From 5e1a5cbb3b508dacd4abcee82c91d761367a2ee7 Mon Sep 17 00:00:00 2001 From: Tomas Kral Date: Sun, 9 Oct 2016 13:15:26 +0200 Subject: [PATCH 1/3] kompose up for openshift kompose --provider openshift up --- cli/app/app.go | 2 +- pkg/transformer/openshift/openshift.go | 72 ++++++++++++++++++++++++-- 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/cli/app/app.go b/cli/app/app.go index 5642674a..0ddc551f 100644 --- a/cli/app/app.go +++ b/cli/app/app.go @@ -194,7 +194,7 @@ func Up(c *cli.Context) { t = new(openshift.OpenShift) } - //Submit objects provider + //Submit objects to provider errDeploy := t.Deploy(komposeObject, opt) if errDeploy != nil { logrus.Fatalf("Error while deploying application: %s", errDeploy) diff --git a/pkg/transformer/openshift/openshift.go b/pkg/transformer/openshift/openshift.go index 082fe837..e921e2c0 100644 --- a/pkg/transformer/openshift/openshift.go +++ b/pkg/transformer/openshift/openshift.go @@ -18,18 +18,27 @@ package openshift import ( "errors" - - deployapi "github.com/openshift/origin/pkg/deploy/api" - imageapi "github.com/openshift/origin/pkg/image/api" + "fmt" + "strings" "github.com/kubernetes-incubator/kompose/pkg/kobject" "github.com/kubernetes-incubator/kompose/pkg/transformer/kubernetes" + "github.com/Sirupsen/logrus" + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" "k8s.io/kubernetes/pkg/runtime" - "strings" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + + oclient "github.com/openshift/origin/pkg/client" + ocliconfig "github.com/openshift/origin/pkg/cmd/cli/config" + + deployapi "github.com/openshift/origin/pkg/deploy/api" + imageapi "github.com/openshift/origin/pkg/image/api" ) type OpenShift struct { @@ -157,7 +166,60 @@ func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C } func (k *OpenShift) Deploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error { - return errors.New("Not Implemented") + //Convert komposeObject + objects := k.Transform(komposeObject, opt) + + fmt.Println("We are going to create OpenShift DeploymentConfigs and Services for your Dockerized application. \n" + + "If you need different kind of resources, use the 'kompose convert' and 'oc create -f' commands instead. \n") + + // initialize OpenShift Client + loadingRules := ocliconfig.NewOpenShiftClientConfigLoadingRules() + overrides := &clientcmd.ConfigOverrides{} + oclientConfig, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, overrides).ClientConfig() + if err != nil { + return err + } + oclient := oclient.NewOrDie(oclientConfig) + + // initialize Kubernetes client + kfactory := kcmdutil.NewFactory(nil) + kclientConfig, err := kfactory.ClientConfig() + if err != nil { + return err + } + kclient := kclient.NewOrDie(kclientConfig) + + // get namespace from config + namespace, _, err := kfactory.DefaultNamespace() + if err != nil { + return err + } + + for _, v := range objects { + switch t := v.(type) { + case *imageapi.ImageStream: + _, err := oclient.ImageStreams(namespace).Create(t) + if err != nil { + return err + } + logrus.Infof("Successfully created ImageStream: %s", t.Name) + case *deployapi.DeploymentConfig: + _, err := oclient.DeploymentConfigs(namespace).Create(t) + if err != nil { + return err + } + logrus.Infof("Successfully created deployment: %s", t.Name) + case *api.Service: + _, err := kclient.Services(namespace).Create(t) + if err != nil { + return err + } + logrus.Infof("Successfully created service: %s", t.Name) + } + } + fmt.Println("\nYour application has been deployed to OpenShift. You can run 'oc get dc,svc,is' for details.") + + return nil } func (k *OpenShift) Undeploy(komposeObject kobject.KomposeObject, opt kobject.ConvertOptions) error { From 1f8a0e06c984e6b7262a402ee2647fedeac8adcc Mon Sep 17 00:00:00 2001 From: Tomas Kral Date: Tue, 11 Oct 2016 19:11:36 +0200 Subject: [PATCH 2/3] Upgrade OpenShift and its dependencies. OpenShift version 1.4.0-alpha.0 --- Godeps/Godeps.json | 1675 +- pkg/transformer/kubernetes/k8sutils.go | 2 +- script/godep-restore.sh | 3 +- vendor/bitbucket.org/ww/goautoneg/Makefile | 13 + vendor/bitbucket.org/ww/goautoneg/README.txt | 67 + vendor/bitbucket.org/ww/goautoneg/autoneg.go | 162 + vendor/github.com/Azure/go-ansiterm/LICENSE | 21 + vendor/github.com/Azure/go-ansiterm/README.md | 12 + .../github.com/Azure/go-ansiterm/constants.go | 188 + .../github.com/Azure/go-ansiterm/context.go | 7 + .../Azure/go-ansiterm/csi_entry_state.go | 49 + .../Azure/go-ansiterm/csi_param_state.go | 38 + .../go-ansiterm/escape_intermediate_state.go | 36 + .../Azure/go-ansiterm/escape_state.go | 47 + .../Azure/go-ansiterm/event_handler.go | 90 + .../Azure/go-ansiterm/ground_state.go | 24 + .../Azure/go-ansiterm/osc_string_state.go | 31 + vendor/github.com/Azure/go-ansiterm/parser.go | 136 + .../go-ansiterm/parser_action_helpers.go | 103 + .../Azure/go-ansiterm/parser_actions.go | 122 + vendor/github.com/Azure/go-ansiterm/states.go | 71 + .../github.com/Azure/go-ansiterm/utilities.go | 21 + .../Azure/go-ansiterm/winterm/ansi.go | 182 + .../Azure/go-ansiterm/winterm/api.go | 322 + .../go-ansiterm/winterm/attr_translation.go | 100 + .../go-ansiterm/winterm/cursor_helpers.go | 101 + .../go-ansiterm/winterm/erase_helpers.go | 84 + .../go-ansiterm/winterm/scroll_helper.go | 118 + .../Azure/go-ansiterm/winterm/utilities.go | 9 + .../go-ansiterm/winterm/win_event_handler.go | 726 + vendor/github.com/MakeNowJust/heredoc/LICENSE | 21 + .../github.com/MakeNowJust/heredoc/README.md | 53 + .../github.com/MakeNowJust/heredoc/heredoc.go | 89 + vendor/github.com/coreos/etcd/LICENSE | 202 + vendor/github.com/coreos/etcd/NOTICE | 5 + .../coreos/etcd/auth/authpb/auth.pb.go | 820 + .../coreos/etcd/auth/authpb/auth.proto | 37 + .../github.com/coreos/etcd/client/README.md | 117 + .../coreos/etcd/client/auth_role.go | 237 + .../coreos/etcd/client/auth_user.go | 320 + .../coreos/etcd/client/cancelreq.go | 18 + .../github.com/coreos/etcd/client/client.go | 609 + .../coreos/etcd/client/cluster_error.go | 33 + vendor/github.com/coreos/etcd/client/curl.go | 70 + .../github.com/coreos/etcd/client/discover.go | 21 + vendor/github.com/coreos/etcd/client/doc.go | 73 + .../coreos/etcd/client/keys.generated.go | 1000 + vendor/github.com/coreos/etcd/client/keys.go | 668 + .../github.com/coreos/etcd/client/members.go | 304 + vendor/github.com/coreos/etcd/client/srv.go | 65 + vendor/github.com/coreos/etcd/client/util.go | 23 + .../github.com/coreos/etcd/clientv3/README.md | 77 + .../github.com/coreos/etcd/clientv3/auth.go | 229 + .../coreos/etcd/clientv3/balancer.go | 147 + .../github.com/coreos/etcd/clientv3/client.go | 324 + .../coreos/etcd/clientv3/cluster.go | 102 + .../coreos/etcd/clientv3/compact_op.go | 53 + .../coreos/etcd/clientv3/compare.go | 91 + .../github.com/coreos/etcd/clientv3/config.go | 110 + vendor/github.com/coreos/etcd/clientv3/doc.go | 64 + vendor/github.com/coreos/etcd/clientv3/kv.go | 176 + .../github.com/coreos/etcd/clientv3/lease.go | 462 + .../github.com/coreos/etcd/clientv3/logger.go | 64 + .../coreos/etcd/clientv3/maintenance.go | 164 + vendor/github.com/coreos/etcd/clientv3/op.go | 273 + .../github.com/coreos/etcd/clientv3/retry.go | 243 + .../github.com/coreos/etcd/clientv3/sort.go | 37 + vendor/github.com/coreos/etcd/clientv3/txn.go | 160 + .../github.com/coreos/etcd/clientv3/watch.go | 714 + .../etcd/etcdserver/api/v3rpc/rpctypes/doc.go | 16 + .../etcdserver/api/v3rpc/rpctypes/error.go | 150 + .../etcd/etcdserver/api/v3rpc/rpctypes/md.go | 20 + .../etcdserver/etcdserverpb/etcdserver.pb.go | 1041 + .../etcdserver/etcdserverpb/etcdserver.proto | 34 + .../etcdserverpb/raft_internal.pb.go | 2062 + .../etcdserverpb/raft_internal.proto | 72 + .../etcd/etcdserver/etcdserverpb/rpc.pb.go | 15327 ++++ .../etcd/etcdserver/etcdserverpb/rpc.pb.gw.go | 1866 + .../etcd/etcdserver/etcdserverpb/rpc.proto | 894 + .../coreos/etcd/mvcc/mvccpb/kv.pb.go | 681 + .../coreos/etcd/mvcc/mvccpb/kv.proto | 46 + .../coreos/etcd/pkg/fileutil/fileutil.go | 98 + .../coreos/etcd/pkg/fileutil/lock.go | 26 + .../coreos/etcd/pkg/fileutil/lock_flock.go | 49 + .../coreos/etcd/pkg/fileutil/lock_linux.go | 96 + .../coreos/etcd/pkg/fileutil/lock_plan9.go | 45 + .../coreos/etcd/pkg/fileutil/lock_solaris.go | 62 + .../coreos/etcd/pkg/fileutil/lock_unix.go | 29 + .../coreos/etcd/pkg/fileutil/lock_windows.go | 125 + .../coreos/etcd/pkg/fileutil/preallocate.go | 47 + .../etcd/pkg/fileutil/preallocate_darwin.go | 43 + .../etcd/pkg/fileutil/preallocate_unix.go | 49 + .../pkg/fileutil/preallocate_unsupported.go | 25 + .../coreos/etcd/pkg/fileutil/purge.go | 78 + .../coreos/etcd/pkg/fileutil/sync.go | 29 + .../coreos/etcd/pkg/fileutil/sync_darwin.go | 40 + .../coreos/etcd/pkg/fileutil/sync_linux.go | 34 + .../coreos/etcd/pkg/pathutil/path.go | 31 + .../github.com/coreos/etcd/pkg/tlsutil/doc.go | 16 + .../coreos/etcd/pkg/tlsutil/tlsutil.go | 72 + .../coreos/etcd/pkg/transport/doc.go | 17 + .../etcd/pkg/transport/keepalive_listener.go | 94 + .../coreos/etcd/pkg/transport/limit_listen.go | 80 + .../coreos/etcd/pkg/transport/listener.go | 268 + .../coreos/etcd/pkg/transport/timeout_conn.go | 44 + .../etcd/pkg/transport/timeout_dialer.go | 36 + .../etcd/pkg/transport/timeout_listener.go | 54 + .../etcd/pkg/transport/timeout_transport.go | 51 + .../coreos/etcd/pkg/transport/tls.go | 49 + .../coreos/etcd/pkg/transport/transport.go | 70 + .../etcd/pkg/transport/unix_listener.go | 40 + .../github.com/coreos/etcd/pkg/types/doc.go | 17 + vendor/github.com/coreos/etcd/pkg/types/id.go | 41 + .../github.com/coreos/etcd/pkg/types/set.go | 178 + .../github.com/coreos/etcd/pkg/types/slice.go | 22 + .../github.com/coreos/etcd/pkg/types/urls.go | 82 + .../coreos/etcd/pkg/types/urlsmap.go | 107 + .../coreos/pkg/capnslog/pkg_logger.go | 6 + .../github.com/dgrijalva/jwt-go/.travis.yml | 8 + .../dgrijalva/jwt-go/MIGRATION_GUIDE.md | 96 + vendor/github.com/dgrijalva/jwt-go/README.md | 84 +- .../dgrijalva/jwt-go/VERSION_HISTORY.md | 51 + vendor/github.com/dgrijalva/jwt-go/claims.go | 134 + vendor/github.com/dgrijalva/jwt-go/ecdsa.go | 147 + .../dgrijalva/jwt-go/ecdsa_utils.go | 67 + vendor/github.com/dgrijalva/jwt-go/errors.go | 36 +- vendor/github.com/dgrijalva/jwt-go/hmac.go | 40 +- vendor/github.com/dgrijalva/jwt-go/jwt.go | 198 - .../github.com/dgrijalva/jwt-go/map_claims.go | 94 + vendor/github.com/dgrijalva/jwt-go/none.go | 52 + vendor/github.com/dgrijalva/jwt-go/parser.go | 131 + vendor/github.com/dgrijalva/jwt-go/rsa.go | 30 +- vendor/github.com/dgrijalva/jwt-go/rsa_pss.go | 126 + .../github.com/dgrijalva/jwt-go/rsa_utils.go | 3 +- .../dgrijalva/jwt-go/signing_method.go | 21 +- vendor/github.com/dgrijalva/jwt-go/token.go | 108 + .../docker/distribution/Jenkinsfile | 8 + .../github.com/docker/distribution/README.md | 6 +- .../github.com/docker/distribution/circle.yml | 5 +- .../distribution/manifest/schema2/manifest.go | 2 +- .../distribution/reference/reference.go | 8 +- .../docker/docker/pkg/system/chtimes.go | 52 + .../docker/docker/pkg/system/chtimes_unix.go | 14 + .../docker/pkg/system/chtimes_windows.go | 27 + .../docker/docker/pkg/system/errors.go | 10 + .../docker/pkg/system/events_windows.go | 83 + .../docker/docker/pkg/system/filesys.go | 19 + .../docker/pkg/system/filesys_windows.go | 82 + .../docker/docker/pkg/system/lstat.go | 19 + .../docker/docker/pkg/system/lstat_windows.go | 25 + .../docker/docker/pkg/system/meminfo.go | 17 + .../docker/docker/pkg/system/meminfo_linux.go | 65 + .../docker/pkg/system/meminfo_solaris.go | 128 + .../docker/pkg/system/meminfo_unsupported.go | 8 + .../docker/pkg/system/meminfo_windows.go | 44 + .../docker/docker/pkg/system/mknod.go | 22 + .../docker/docker/pkg/system/mknod_windows.go | 13 + .../docker/docker/pkg/system/path_unix.go | 14 + .../docker/docker/pkg/system/path_windows.go | 37 + .../docker/docker/pkg/system/stat.go | 53 + .../docker/docker/pkg/system/stat_darwin.go | 32 + .../docker/docker/pkg/system/stat_freebsd.go | 27 + .../docker/docker/pkg/system/stat_linux.go | 33 + .../docker/docker/pkg/system/stat_openbsd.go | 15 + .../docker/docker/pkg/system/stat_solaris.go | 34 + .../docker/pkg/system/stat_unsupported.go | 17 + .../docker/docker/pkg/system/stat_windows.go | 43 + .../docker/docker/pkg/system/syscall_unix.go | 17 + .../docker/pkg/system/syscall_windows.go | 103 + .../docker/docker/pkg/system/umask.go | 13 + .../docker/docker/pkg/system/umask_windows.go | 9 + .../docker/pkg/system/utimes_freebsd.go | 22 + .../docker/docker/pkg/system/utimes_linux.go | 26 + .../docker/pkg/system/utimes_unsupported.go | 10 + .../docker/docker/pkg/system/xattrs_linux.go | 63 + .../docker/pkg/system/xattrs_unsupported.go | 13 + .../docker/docker/pkg/term/ascii.go | 66 + .../docker/docker/pkg/term/tc_linux_cgo.go | 50 + .../docker/docker/pkg/term/tc_other.go | 20 + .../docker/docker/pkg/term/tc_solaris_cgo.go | 63 + .../github.com/docker/docker/pkg/term/term.go | 123 + .../docker/docker/pkg/term/term_solaris.go | 41 + .../docker/docker/pkg/term/term_unix.go | 29 + .../docker/docker/pkg/term/term_windows.go | 233 + .../docker/docker/pkg/term/termios_darwin.go | 69 + .../docker/docker/pkg/term/termios_freebsd.go | 69 + .../docker/docker/pkg/term/termios_linux.go | 47 + .../docker/docker/pkg/term/termios_openbsd.go | 69 + .../docker/pkg/term/windows/ansi_reader.go | 261 + .../docker/pkg/term/windows/ansi_writer.go | 64 + .../docker/docker/pkg/term/windows/console.go | 35 + .../docker/docker/pkg/term/windows/windows.go | 33 + .../docker/go-connections/nat/nat.go | 174 +- .../docker/go-units/{LICENSE => LICENSE.code} | 0 .../github.com/docker/go-units/LICENSE.docs | 425 + vendor/github.com/docker/go-units/README.md | 10 +- vendor/github.com/docker/go-units/duration.go | 2 - vendor/github.com/docker/go-units/size.go | 39 +- vendor/github.com/docker/libtrust/util.go | 2 - .../github.com/emicklei/go-restful/README.md | 8 +- .../emicklei/go-restful/container.go | 8 +- .../github.com/emicklei/go-restful/curly.go | 12 +- .../emicklei/go-restful/curly_route.go | 28 +- .../github.com/emicklei/go-restful/install.sh | 13 +- .../github.com/emicklei/go-restful/jsr311.go | 5 +- .../emicklei/go-restful/response.go | 8 +- .../emicklei/go-restful/route_builder.go | 2 +- .../emicklei/go-restful/swagger/config.go | 4 + .../go-restful/swagger/model_builder.go | 21 +- .../emicklei/go-restful/swagger/swagger.go | 1 + .../go-restful/swagger/swagger_webservice.go | 14 +- .../emicklei/go-restful/web_service.go | 14 +- .../github.com/gogo/protobuf/proto/decode.go | 9 +- .../gogo/protobuf/proto/decode_gogo.go | 8 +- .../github.com/gogo/protobuf/proto/encode.go | 34 +- .../github.com/gogo/protobuf/proto/equal.go | 28 +- .../gogo/protobuf/proto/extensions.go | 3 +- .../gogo/protobuf/proto/extensions_gogo.go | 15 + vendor/github.com/gogo/protobuf/proto/lib.go | 15 +- .../gogo/protobuf/proto/properties.go | 16 +- vendor/github.com/gogo/protobuf/proto/text.go | 50 +- .../gogo/protobuf/proto/text_parser.go | 24 +- .../gogo/protobuf/sortkeys/sortkeys.go | 99 + vendor/github.com/golang/glog/glog.go | 8 + .../golang/protobuf/jsonpb/jsonpb.go | 799 + .../github.com/golang/protobuf/proto/Makefile | 2 +- .../github.com/golang/protobuf/proto/clone.go | 12 +- .../golang/protobuf/proto/decode.go | 16 +- .../golang/protobuf/proto/encode.go | 60 +- .../github.com/golang/protobuf/proto/equal.go | 26 +- .../golang/protobuf/proto/extensions.go | 196 +- .../github.com/golang/protobuf/proto/lib.go | 4 + .../golang/protobuf/proto/message_set.go | 43 +- .../golang/protobuf/proto/pointer_reflect.go | 7 +- .../golang/protobuf/proto/pointer_unsafe.go | 6 +- .../golang/protobuf/proto/properties.go | 54 +- .../github.com/golang/protobuf/proto/text.go | 179 +- .../golang/protobuf/proto/text_parser.go | 166 +- vendor/github.com/gonum/blas/.travis.yml | 39 + vendor/github.com/gonum/blas/README.md | 96 + vendor/github.com/gonum/blas/blas.go | 388 + vendor/github.com/gonum/blas/blas64/blas64.go | 434 + vendor/github.com/gonum/blas/native/dgemm.go | 391 + vendor/github.com/gonum/blas/native/doc.go | 88 + .../gonum/blas/native/general_double.go | 155 + .../gonum/blas/native/general_single.go | 157 + .../gonum/blas/native/internal/math32/math.go | 113 + .../gonum/blas/native/internal/math32/sqrt.go | 25 + .../blas/native/internal/math32/sqrt_amd64.go | 20 + .../blas/native/internal/math32/sqrt_amd64.s | 20 + .../gonum/blas/native/level1double.go | 599 + .../gonum/blas/native/level1double_ddot.go | 46 + .../gonum/blas/native/level1single.go | 623 + .../gonum/blas/native/level1single_dsdot.go | 50 + .../gonum/blas/native/level1single_sdot.go | 50 + .../gonum/blas/native/level1single_sdsdot.go | 50 + .../gonum/blas/native/level2double.go | 2258 + .../gonum/blas/native/level2single.go | 2292 + .../gonum/blas/native/level3double.go | 831 + .../gonum/blas/native/level3single.go | 843 + vendor/github.com/gonum/blas/native/native.go | 66 + vendor/github.com/gonum/blas/native/sgemm.go | 395 + .../gonum/blas/native/single_precision | 143 + vendor/github.com/gonum/graph/.gitignore | 1 + vendor/github.com/gonum/graph/.travis.yml | 29 + vendor/github.com/gonum/graph/README.md | 15 + .../gonum/graph/concrete/concrete.go | 8 + .../graph/concrete/dense_directed_matrix.go | 136 + .../graph/concrete/dense_undirected_matrix.go | 131 + .../gonum/graph/concrete/directed.go | 269 + .../gonum/graph/concrete/undirected.go | 250 + .../github.com/gonum/graph/concrete/util.go | 44 + vendor/github.com/gonum/graph/doc.go | 38 + .../gonum/graph/encoding/dot/dot.go | 383 + vendor/github.com/gonum/graph/graph.go | 173 + .../github.com/gonum/graph/internal/linear.go | 73 + vendor/github.com/gonum/graph/internal/set.go | 211 + .../github.com/gonum/graph/internal/sort.go | 28 + vendor/github.com/gonum/graph/path/a_star.go | 157 + .../gonum/graph/path/bellman_ford_moore.go | 59 + .../gonum/graph/path/control_flow.go | 118 + .../github.com/gonum/graph/path/dijkstra.go | 136 + .../github.com/gonum/graph/path/disjoint.go | 87 + .../gonum/graph/path/floydwarshall.go | 55 + .../gonum/graph/path/johnson_apsp.go | 137 + .../github.com/gonum/graph/path/shortest.go | 319 + .../gonum/graph/path/spanning_tree.go | 108 + .../gonum/graph/topo/bron_kerbosch.go | 225 + .../gonum/graph/topo/johnson_cycles.go | 285 + .../gonum/graph/topo/non_tomita_choice.go | 9 + vendor/github.com/gonum/graph/topo/tarjan.go | 161 + .../gonum/graph/topo/tomita_choice.go | 9 + vendor/github.com/gonum/graph/topo/topo.go | 58 + .../gonum/graph/traverse/traverse.go | 182 + vendor/github.com/gonum/internal/asm/caxpy.go | 22 + vendor/github.com/gonum/internal/asm/cdotc.go | 23 + vendor/github.com/gonum/internal/asm/cdotu.go | 23 + vendor/github.com/gonum/internal/asm/complex | 58 + vendor/github.com/gonum/internal/asm/conj.go | 7 + vendor/github.com/gonum/internal/asm/daxpy.go | 22 + .../gonum/internal/asm/daxpy_amd64.go | 12 + .../gonum/internal/asm/daxpy_amd64.s | 140 + vendor/github.com/gonum/internal/asm/ddot.go | 23 + .../gonum/internal/asm/ddot_amd64.go | 10 + .../gonum/internal/asm/ddot_amd64.s | 140 + vendor/github.com/gonum/internal/asm/dsdot.go | 23 + .../github.com/gonum/internal/asm/generate.go | 8 + vendor/github.com/gonum/internal/asm/saxpy.go | 22 + vendor/github.com/gonum/internal/asm/sdot.go | 23 + .../gonum/internal/asm/single_precision | 30 + vendor/github.com/gonum/internal/asm/zaxpy.go | 22 + vendor/github.com/gonum/internal/asm/zdotc.go | 25 + vendor/github.com/gonum/internal/asm/zdotu.go | 23 + vendor/github.com/gonum/lapack/.gitignore | 1 + vendor/github.com/gonum/lapack/.travis.yml | 38 + vendor/github.com/gonum/lapack/README.md | 58 + vendor/github.com/gonum/lapack/lapack.go | 60 + .../gonum/lapack/lapack64/lapack64.go | 49 + .../github.com/gonum/lapack/native/dgelq2.go | 44 + .../github.com/gonum/lapack/native/dgelqf.go | 84 + .../github.com/gonum/lapack/native/dgels.go | 200 + .../github.com/gonum/lapack/native/dgeqr2.go | 57 + .../github.com/gonum/lapack/native/dgeqrf.go | 98 + .../github.com/gonum/lapack/native/dlange.go | 76 + .../github.com/gonum/lapack/native/dlapy2.go | 12 + .../github.com/gonum/lapack/native/dlarf.go | 82 + .../github.com/gonum/lapack/native/dlarfb.go | 424 + .../github.com/gonum/lapack/native/dlarfg.go | 60 + .../github.com/gonum/lapack/native/dlarft.go | 148 + .../github.com/gonum/lapack/native/dlascl.go | 72 + .../github.com/gonum/lapack/native/dlaset.go | 37 + .../github.com/gonum/lapack/native/dlassq.go | 29 + vendor/github.com/gonum/lapack/native/doc.go | 28 + .../github.com/gonum/lapack/native/dorm2r.go | 86 + .../github.com/gonum/lapack/native/dorml2.go | 83 + .../github.com/gonum/lapack/native/dormlq.go | 155 + .../github.com/gonum/lapack/native/dormqr.go | 139 + .../github.com/gonum/lapack/native/dpotf2.go | 73 + .../github.com/gonum/lapack/native/dpotrf.go | 75 + .../github.com/gonum/lapack/native/dtrtrs.go | 31 + .../github.com/gonum/lapack/native/general.go | 92 + .../github.com/gonum/lapack/native/iladlc.go | 31 + .../github.com/gonum/lapack/native/iladlr.go | 28 + .../github.com/gonum/lapack/native/ilaenv.go | 375 + .../github.com/gonum/matrix/mat64/cholesky.go | 140 + vendor/github.com/gonum/matrix/mat64/dense.go | 646 + .../gonum/matrix/mat64/dense_arithmetic.go | 975 + vendor/github.com/gonum/matrix/mat64/eigen.go | 819 + .../github.com/gonum/matrix/mat64/format.go | 153 + .../gonum/matrix/mat64/index_bound_checks.go | 151 + .../matrix/mat64/index_no_bound_checks.go | 151 + vendor/github.com/gonum/matrix/mat64/inner.go | 102 + vendor/github.com/gonum/matrix/mat64/io.go | 18 + vendor/github.com/gonum/matrix/mat64/lq.go | 193 + vendor/github.com/gonum/matrix/mat64/lu.go | 212 + .../github.com/gonum/matrix/mat64/matrix.go | 472 + vendor/github.com/gonum/matrix/mat64/pool.go | 80 + vendor/github.com/gonum/matrix/mat64/qr.go | 185 + vendor/github.com/gonum/matrix/mat64/svd.go | 479 + .../gonum/matrix/mat64/symmetric.go | 198 + .../gonum/matrix/mat64/triangular.go | 177 + .../github.com/gonum/matrix/mat64/vector.go | 349 + .../google/cadvisor/info/v1/container.go | 30 +- .../google/cadvisor/info/v1/machine.go | 3 + vendor/github.com/gorilla/context/.travis.yml | 24 +- vendor/github.com/gorilla/mux/.travis.yml | 23 +- vendor/github.com/gorilla/mux/README.md | 241 +- vendor/github.com/gorilla/mux/doc.go | 31 +- vendor/github.com/gorilla/mux/mux.go | 143 +- vendor/github.com/gorilla/mux/regexp.go | 92 +- vendor/github.com/gorilla/mux/route.go | 78 +- .../grpc-ecosystem/grpc-gateway/LICENSE.txt | 27 + .../grpc-gateway/runtime/context.go | 139 + .../grpc-gateway/runtime/convert.go | 58 + .../grpc-gateway/runtime/doc.go | 5 + .../grpc-gateway/runtime/errors.go | 121 + .../grpc-gateway/runtime/handler.go | 164 + .../runtime/internal/stream_chunk.pb.go | 65 + .../runtime/internal/stream_chunk.proto | 12 + .../grpc-gateway/runtime/marshal_json.go | 37 + .../grpc-gateway/runtime/marshal_jsonpb.go | 182 + .../grpc-gateway/runtime/marshaler.go | 42 + .../runtime/marshaler_registry.go | 91 + .../grpc-gateway/runtime/mux.go | 132 + .../grpc-gateway/runtime/pattern.go | 227 + .../grpc-gateway/runtime/proto2_convert.go | 80 + .../grpc-gateway/runtime/query.go | 140 + .../grpc-gateway/utilities/doc.go | 2 + .../grpc-gateway/utilities/pattern.go | 22 + .../grpc-gateway/utilities/trie.go | 177 + vendor/github.com/opencontainers/runc/NOTICE | 17 - .../runc/libcontainer/cgroups/cgroups.go | 64 - .../cgroups/cgroups_unsupported.go | 3 - .../runc/libcontainer/cgroups/fs/apply_raw.go | 402 - .../runc/libcontainer/cgroups/fs/blkio.go | 237 - .../runc/libcontainer/cgroups/fs/cpu.go | 94 - .../runc/libcontainer/cgroups/fs/cpuacct.go | 121 - .../runc/libcontainer/cgroups/fs/cpuset.go | 139 - .../runc/libcontainer/cgroups/fs/devices.go | 78 - .../runc/libcontainer/cgroups/fs/freezer.go | 61 - .../libcontainer/cgroups/fs/fs_unsupported.go | 3 - .../runc/libcontainer/cgroups/fs/hugetlb.go | 71 - .../runc/libcontainer/cgroups/fs/memory.go | 281 - .../runc/libcontainer/cgroups/fs/name.go | 40 - .../runc/libcontainer/cgroups/fs/net_cls.go | 41 - .../runc/libcontainer/cgroups/fs/net_prio.go | 41 - .../libcontainer/cgroups/fs/perf_event.go | 35 - .../runc/libcontainer/cgroups/fs/pids.go | 73 - .../runc/libcontainer/cgroups/fs/utils.go | 78 - .../runc/libcontainer/cgroups/stats.go | 106 - .../runc/libcontainer/cgroups/utils.go | 413 - .../runc/libcontainer/configs/blkio_device.go | 61 - .../runc/libcontainer/configs/cgroup_unix.go | 124 - .../configs/cgroup_unsupported.go | 6 - .../libcontainer/configs/cgroup_windows.go | 6 - .../runc/libcontainer/configs/config.go | 332 - .../runc/libcontainer/configs/config_unix.go | 51 - .../runc/libcontainer/configs/device.go | 57 - .../libcontainer/configs/device_defaults.go | 125 - .../libcontainer/configs/hugepage_limit.go | 9 - .../configs/interface_priority_map.go | 14 - .../runc/libcontainer/configs/mount.go | 30 - .../runc/libcontainer/configs/namespaces.go | 5 - .../configs/namespaces_syscall.go | 31 - .../configs/namespaces_syscall_unsupported.go | 15 - .../libcontainer/configs/namespaces_unix.go | 127 - .../configs/namespaces_unsupported.go | 8 - .../runc/libcontainer/configs/network.go | 72 - .../runc/libcontainer/system/linux.go | 143 - .../runc/libcontainer/system/proc.go | 27 - .../runc/libcontainer/system/setns_linux.go | 40 - .../libcontainer/system/syscall_linux_386.go | 25 - .../libcontainer/system/syscall_linux_64.go | 25 - .../libcontainer/system/syscall_linux_arm.go | 25 - .../runc/libcontainer/system/sysconfig.go | 31 - .../libcontainer/system/sysconfig_notcgo.go | 15 - .../runc/libcontainer/system/unsupported.go | 9 - .../runc/libcontainer/system/xattrs_linux.go | 99 - .../runc/libcontainer/utils/utils.go | 121 - .../runc/libcontainer/utils/utils_unix.go | 33 - .../openshift/origin/pkg/api/graph/graph.go | 693 + .../pkg/api/graph/graphview/dc_pipeline.go | 84 + .../pkg/api/graph/graphview/image_pipeline.go | 240 + .../origin/pkg/api/graph/graphview/intset.go | 46 + .../origin/pkg/api/graph/graphview/petset.go | 51 + .../origin/pkg/api/graph/graphview/pod.go | 39 + .../origin/pkg/api/graph/graphview/rc.go | 100 + .../pkg/api/graph/graphview/service_group.go | 134 + .../origin/pkg/api/graph/interfaces.go | 134 + .../openshift/origin/pkg/api/graph/types.go | 69 + .../origin/pkg/api/kubegraph/analysis/hpa.go | 180 + .../origin/pkg/api/kubegraph/analysis/pod.go | 135 + .../pkg/api/kubegraph/analysis/podspec.go | 124 + .../origin/pkg/api/kubegraph/analysis/rc.go | 56 + .../origin/pkg/api/kubegraph/edges.go | 248 + .../origin/pkg/api/kubegraph/nodes/nodes.go | 187 + .../origin/pkg/api/kubegraph/nodes/types.go | 325 + .../openshift/origin/pkg/api/latest/doc.go | 5 + .../openshift/origin/pkg/api/latest/latest.go | 73 + .../origin/pkg/api/restmapper/discovery.go | 176 + .../openshift/origin/pkg/auth/api/types.go | 85 + .../pkg/auth/authenticator/interfaces.go | 34 + .../authenticator/request/x509request/doc.go | 3 + .../authenticator/request/x509request/x509.go | 173 + .../authorization/api/deep_copy_generated.go | 678 - .../origin/pkg/authorization/api/doc.go | 4 + .../origin/pkg/authorization/api/helpers.go | 53 + .../origin/pkg/authorization/api/register.go | 12 +- .../origin/pkg/authorization/api/types.go | 36 +- .../api/zz_generated.deepcopy.go | 690 + .../pkg/authorization/reaper/cluster_role.go | 60 + .../origin/pkg/authorization/reaper/role.go | 47 + .../pkg/build/api/deep_copy_generated.go | 937 - .../openshift/origin/pkg/build/api/doc.go | 4 + .../origin/pkg/build/api/register.go | 12 +- .../openshift/origin/pkg/build/api/types.go | 21 +- .../pkg/build/api/zz_generated.deepcopy.go | 1034 + .../origin/pkg/build/client/clients.go | 109 + .../openshift/origin/pkg/build/cmd/doc.go | 2 + .../openshift/origin/pkg/build/cmd/reaper.go | 150 + .../origin/pkg/build/graph/analysis/bc.go | 351 + .../openshift/origin/pkg/build/graph/edges.go | 133 + .../origin/pkg/build/graph/helpers.go | 111 + .../origin/pkg/build/graph/nodes/nodes.go | 47 + .../origin/pkg/build/graph/nodes/types.go | 90 + .../openshift/origin/pkg/build/util/doc.go | 3 + .../openshift/origin/pkg/build/util/util.go | 169 + .../pkg/client/appliedclusterresourcequota.go | 46 + .../origin/pkg/client/buildconfigs.go | 132 + .../openshift/origin/pkg/client/buildlogs.go | 37 + .../openshift/origin/pkg/client/builds.go | 104 + .../openshift/origin/pkg/client/client.go | 367 + .../origin/pkg/client/clusteresourcequota.go | 73 + .../origin/pkg/client/clusternetwork.go | 50 + .../origin/pkg/client/clusterpolicies.go | 68 + .../pkg/client/clusterpolicybindings.go | 77 + .../origin/pkg/client/clusterrolebindings.go | 66 + .../origin/pkg/client/clusterroles.go | 66 + .../origin/pkg/client/deploymentconfigs.go | 176 + .../origin/pkg/client/deploymentlogs.go | 37 + .../openshift/origin/pkg/client/discovery.go | 68 + .../origin/pkg/client/egressnetworkpolicy.go | 85 + .../openshift/origin/pkg/client/groups.go | 81 + .../origin/pkg/client/hostsubnets.go | 81 + .../openshift/origin/pkg/client/identities.go | 70 + .../openshift/origin/pkg/client/images.go | 72 + .../origin/pkg/client/imagesignatures.go | 41 + .../origin/pkg/client/imagestreamimages.go | 36 + .../origin/pkg/client/imagestreammappings.go | 34 + .../origin/pkg/client/imagestreams.go | 147 + .../origin/pkg/client/imagestreamsecrets.go | 44 + .../origin/pkg/client/imagestreamtags.go | 57 + .../pkg/client/localresourceaccessreview.go | 51 + .../pkg/client/localsubjectaccessreview.go | 78 + .../openshift/origin/pkg/client/mapper.go | 26 + .../origin/pkg/client/netnamespaces.go | 81 + .../origin/pkg/client/oauthaccesstoken.go | 46 + .../origin/pkg/client/oauthauthorizetoken.go | 35 + .../origin/pkg/client/oauthclient.go | 57 + .../pkg/client/oauthclientauthorization.go | 64 + .../openshift/origin/pkg/client/policies.go | 72 + .../origin/pkg/client/policybindings.go | 80 + .../origin/pkg/client/projectrequests.go | 44 + .../openshift/origin/pkg/client/projects.go | 81 + .../origin/pkg/client/resourceaccessreview.go | 61 + .../origin/pkg/client/role_bindings.go | 69 + .../openshift/origin/pkg/client/roles.go | 69 + .../openshift/origin/pkg/client/routes.go | 93 + .../openshift/origin/pkg/client/scale.go | 63 + .../pkg/client/selfsubjectrulesreviews.go | 32 + .../origin/pkg/client/subjectaccessreview.go | 100 + .../origin/pkg/client/templateconfigs.go | 37 + .../openshift/origin/pkg/client/templates.go | 86 + .../origin/pkg/client/useridentitymappings.go | 57 + .../openshift/origin/pkg/client/users.go | 81 + .../origin/pkg/cmd/cli/config/helpers.go | 103 + .../origin/pkg/cmd/cli/config/loader.go | 76 + .../origin/pkg/cmd/cli/config/smart_merge.go | 194 + .../pkg/cmd/cli/describe/chaindescriber.go | 319 + .../pkg/cmd/cli/describe/deployments.go | 417 + .../origin/pkg/cmd/cli/describe/describer.go | 1606 + .../origin/pkg/cmd/cli/describe/helpers.go | 427 + .../origin/pkg/cmd/cli/describe/printer.go | 1057 + .../pkg/cmd/cli/describe/projectstatus.go | 1458 + .../origin/pkg/cmd/flagtypes/addr.go | 176 + .../openshift/origin/pkg/cmd/flagtypes/doc.go | 3 + .../origin/pkg/cmd/flagtypes/glog.go | 30 + .../openshift/origin/pkg/cmd/flagtypes/net.go | 59 + .../cmd/util/clientcmd/cached_discovery.go | 136 + .../pkg/cmd/util/clientcmd/clientcmd.go | 247 + .../pkg/cmd/util/clientcmd/clientconfig.go | 29 + .../origin/pkg/cmd/util/clientcmd/errors.go | 108 + .../origin/pkg/cmd/util/clientcmd/factory.go | 1071 + .../pkg/cmd/util/clientcmd/negotiate.go | 116 + .../cmd/util/clientcmd/shortcut_restmapper.go | 141 + .../openshift/origin/pkg/cmd/util/cmd.go | 165 + .../openshift/origin/pkg/cmd/util/crypto.go | 100 + .../openshift/origin/pkg/cmd/util/doc.go | 2 + .../openshift/origin/pkg/cmd/util/env.go | 159 + .../openshift/origin/pkg/cmd/util/filepath.go | 85 + .../openshift/origin/pkg/cmd/util/ip.go | 61 + .../openshift/origin/pkg/cmd/util/log.go | 37 + .../openshift/origin/pkg/cmd/util/mux.go | 11 + .../openshift/origin/pkg/cmd/util/net.go | 201 + .../openshift/origin/pkg/cmd/util/product.go | 54 + .../openshift/origin/pkg/cmd/util/route.go | 93 + .../openshift/origin/pkg/cmd/util/sibling.go | 30 + .../openshift/origin/pkg/cmd/util/terminal.go | 122 + .../pkg/deploy/api/deep_copy_generated.go | 565 - .../openshift/origin/pkg/deploy/api/doc.go | 4 + .../origin/pkg/deploy/api/register.go | 12 +- .../origin/pkg/deploy/api/v1/conversion.go | 7 +- .../pkg/deploy/api/v1/deep_copy_generated.go | 544 - .../origin/pkg/deploy/api/v1/defaults.go | 12 +- .../openshift/origin/pkg/deploy/api/v1/doc.go | 4 +- .../origin/pkg/deploy/api/v1/generated.pb.go | 873 +- .../origin/pkg/deploy/api/v1/generated.proto | 13 +- .../origin/pkg/deploy/api/v1/register.go | 12 +- .../origin/pkg/deploy/api/v1/swagger_doc.go | 2 +- .../origin/pkg/deploy/api/v1/types.go | 15 +- ...enerated.go => zz_generated.conversion.go} | 234 +- .../deploy/api/v1/zz_generated.deepcopy.go | 596 + .../pkg/deploy/api/zz_generated.deepcopy.go | 617 + .../openshift/origin/pkg/deploy/cmd/delete.go | 136 + .../openshift/origin/pkg/deploy/cmd/doc.go | 3 + .../origin/pkg/deploy/cmd/generate.go | 41 + .../origin/pkg/deploy/cmd/history.go | 99 + .../origin/pkg/deploy/cmd/rollback.go | 56 + .../openshift/origin/pkg/deploy/cmd/scale.go | 98 + .../origin/pkg/deploy/graph/analysis/dc.go | 126 + .../origin/pkg/deploy/graph/analysis/doc.go | 3 + .../origin/pkg/deploy/graph/edges.go | 85 + .../origin/pkg/deploy/graph/helpers.go | 49 + .../origin/pkg/deploy/graph/nodes/nodes.go | 38 + .../origin/pkg/deploy/graph/nodes/types.go | 39 + .../openshift/origin/pkg/deploy/util/util.go | 496 + .../pkg/image/api/deep_copy_generated.go | 942 - .../openshift/origin/pkg/image/api/doc.go | 4 + .../origin/pkg/image/api/docker10/register.go | 10 +- .../pkg/image/api/dockerpre012/conversion.go | 8 +- .../pkg/image/api/dockerpre012/register.go | 11 +- .../openshift/origin/pkg/image/api/helper.go | 82 +- .../origin/pkg/image/api/install/install.go | 2 +- .../origin/pkg/image/api/register.go | 14 +- .../openshift/origin/pkg/image/api/types.go | 11 +- .../origin/pkg/image/api/v1/conversion.go | 11 +- .../pkg/image/api/v1/deep_copy_generated.go | 622 - .../origin/pkg/image/api/v1/defaults.go | 7 +- .../openshift/origin/pkg/image/api/v1/doc.go | 4 +- .../origin/pkg/image/api/v1/generated.pb.go | 988 +- .../origin/pkg/image/api/v1/generated.proto | 27 +- .../origin/pkg/image/api/v1/register.go | 16 +- .../origin/pkg/image/api/v1/swagger_doc.go | 5 +- .../origin/pkg/image/api/v1/types.go | 29 +- ...enerated.go => zz_generated.conversion.go} | 338 +- .../pkg/image/api/v1/zz_generated.deepcopy.go | 685 + .../pkg/image/api/zz_generated.deepcopy.go | 1025 + .../openshift/origin/pkg/image/graph/edges.go | 56 + .../origin/pkg/image/graph/nodes/nodes.go | 172 + .../origin/pkg/image/graph/nodes/types.go | 207 + .../pkg/oauth/api/deep_copy_generated.go | 257 - .../openshift/origin/pkg/oauth/api/doc.go | 4 + .../origin/pkg/oauth/api/register.go | 12 +- .../pkg/oauth/api/zz_generated.deepcopy.go | 277 + .../pkg/project/api/deep_copy_generated.go | 91 - .../openshift/origin/pkg/project/api/doc.go | 4 + .../origin/pkg/project/api/register.go | 12 +- .../pkg/project/api/zz_generated.deepcopy.go | 105 + .../openshift/origin/pkg/quota/api/convert.go | 19 + .../openshift/origin/pkg/quota/api/doc.go | 4 + .../openshift/origin/pkg/quota/api/fields.go | 9 + .../openshift/origin/pkg/quota/api/helpers.go | 56 + .../origin/pkg/quota/api/register.go | 48 + .../openshift/origin/pkg/quota/api/types.go | 165 + .../pkg/quota/api/zz_generated.deepcopy.go | 177 + .../openshift/origin/pkg/quota/util/helper.go | 42 + .../pkg/route/api/deep_copy_generated.go | 190 - .../openshift/origin/pkg/route/api/doc.go | 4 + .../origin/pkg/route/api/register.go | 12 +- .../pkg/route/api/zz_generated.deepcopy.go | 220 + .../origin/pkg/route/generator/doc.go | 2 + .../origin/pkg/route/generator/generate.go | 93 + .../pkg/route/graph/analysis/analysis.go | 228 + .../origin/pkg/route/graph/analysis/doc.go | 3 + .../openshift/origin/pkg/route/graph/doc.go | 2 + .../openshift/origin/pkg/route/graph/edges.go | 45 + .../origin/pkg/route/graph/nodes/doc.go | 2 + .../origin/pkg/route/graph/nodes/nodes.go | 22 + .../origin/pkg/route/graph/nodes/types.go | 33 + .../origin/pkg/sdn/api/deep_copy_generated.go | 127 - .../openshift/origin/pkg/sdn/api/doc.go | 4 + .../openshift/origin/pkg/sdn/api/fields.go | 8 + .../openshift/origin/pkg/sdn/api/netid.go | 86 + .../openshift/origin/pkg/sdn/api/register.go | 28 +- .../openshift/origin/pkg/sdn/api/types.go | 42 +- .../pkg/sdn/api/zz_generated.deepcopy.go | 214 + .../pkg/security/api/deep_copy_generated.go | 143 - .../openshift/origin/pkg/security/api/doc.go | 4 + .../origin/pkg/security/api/register.go | 14 +- .../origin/pkg/security/api/types.go | 36 +- .../pkg/security/api/zz_generated.deepcopy.go | 175 + .../pkg/template/api/deep_copy_generated.go | 99 - .../openshift/origin/pkg/template/api/doc.go | 4 + .../origin/pkg/template/api/register.go | 12 +- .../origin/pkg/template/api/types.go | 6 + .../pkg/template/api/zz_generated.deepcopy.go | 106 + .../pkg/user/api/deep_copy_generated.go | 171 - .../openshift/origin/pkg/user/api/doc.go | 4 + .../openshift/origin/pkg/user/api/register.go | 12 +- .../pkg/user/api/zz_generated.deepcopy.go | 177 + .../origin/pkg/user/reaper/bindings.go | 57 + .../openshift/origin/pkg/user/reaper/group.go | 76 + .../openshift/origin/pkg/user/reaper/user.go | 104 + .../openshift/origin/pkg/util/doc.go | 4 + .../openshift/origin/pkg/util/dot/dot.go | 14 + .../openshift/origin/pkg/util/errors/doc.go | 2 + .../origin/pkg/util/errors/errors.go | 39 + .../openshift/origin/pkg/util/etcd.go | 21 + .../openshift/origin/pkg/util/labels.go | 278 + .../origin/pkg/util/parallel/parallel.go | 27 + .../openshift/origin/pkg/util/strings.go | 21 + .../openshift/origin/pkg/version/doc.go | 3 + .../openshift/origin/pkg/version/version.go | 97 + .../client_golang/prometheus/go_collector.go | 217 +- .../github.com/prometheus/procfs/.travis.yml | 2 + .../github.com/prometheus/procfs/AUTHORS.md | 11 +- vendor/github.com/prometheus/procfs/Makefile | 6 + vendor/github.com/prometheus/procfs/README.md | 3 + vendor/github.com/prometheus/procfs/fs.go | 4 + vendor/github.com/prometheus/procfs/ipvs.go | 223 + vendor/github.com/prometheus/procfs/mdstat.go | 158 + vendor/github.com/prometheus/procfs/proc.go | 63 +- .../github.com/prometheus/procfs/proc_io.go | 54 + vendor/github.com/spf13/cobra/.gitignore | 12 + vendor/github.com/spf13/cobra/.travis.yml | 11 +- vendor/github.com/spf13/cobra/README.md | 23 +- .../spf13/cobra/bash_completions.go | 55 +- .../spf13/cobra/bash_completions.md | 4 +- vendor/github.com/spf13/cobra/cobra.go | 4 + vendor/github.com/spf13/cobra/command.go | 189 +- vendor/github.com/spf13/pflag/.travis.yml | 4 +- vendor/github.com/spf13/pflag/README.md | 19 + .../x/net/context/ctxhttp/ctxhttp.go | 12 +- .../x/net/http2/client_conn_pool.go | 9 +- vendor/golang.org/x/net/http2/errors.go | 8 - vendor/golang.org/x/net/http2/frame.go | 46 +- vendor/golang.org/x/net/http2/go17.go | 12 - vendor/golang.org/x/net/http2/go17_not18.go | 36 - vendor/golang.org/x/net/http2/go18.go | 11 - vendor/golang.org/x/net/http2/hpack/hpack.go | 2 +- vendor/golang.org/x/net/http2/http2.go | 16 +- vendor/golang.org/x/net/http2/not_go17.go | 38 +- vendor/golang.org/x/net/http2/server.go | 92 +- vendor/golang.org/x/net/http2/transport.go | 506 +- vendor/golang.org/x/net/idna/idna.go | 68 - vendor/golang.org/x/net/idna/punycode.go | 200 - .../x/net/internal/timeseries/timeseries.go | 525 + .../golang.org/x/net/lex/httplex/httplex.go | 39 - vendor/golang.org/x/net/trace/events.go | 524 + vendor/golang.org/x/net/trace/histogram.go | 356 + vendor/golang.org/x/net/trace/trace.go | 1063 + vendor/golang.org/x/sys/unix/syscall_linux.go | 4 +- .../golang.org/x/sys/unix/syscall_solaris.go | 2 +- .../x/sys/unix/zsyscall_solaris_amd64.go | 4 +- vendor/google.golang.org/grpc/.travis.yml | 21 + vendor/google.golang.org/grpc/CONTRIBUTING.md | 46 + .../json => google.golang.org/grpc}/LICENSE | 9 +- vendor/google.golang.org/grpc/Makefile | 52 + vendor/google.golang.org/grpc/PATENTS | 22 + vendor/google.golang.org/grpc/README.md | 32 + vendor/google.golang.org/grpc/backoff.go | 80 + vendor/google.golang.org/grpc/balancer.go | 385 + vendor/google.golang.org/grpc/call.go | 226 + vendor/google.golang.org/grpc/clientconn.go | 845 + vendor/google.golang.org/grpc/codegen.sh | 17 + .../grpc/codes/code_string.go | 16 + vendor/google.golang.org/grpc/codes/codes.go | 159 + vendor/google.golang.org/grpc/coverage.sh | 47 + .../grpc/credentials/credentials.go | 213 + .../grpc/credentials/credentials_util_go17.go | 76 + .../credentials/credentials_util_pre_go17.go | 74 + vendor/google.golang.org/grpc/doc.go | 6 + .../google.golang.org/grpc/grpclog/logger.go | 93 + vendor/google.golang.org/grpc/interceptor.go | 74 + .../grpc/internal/internal.go | 49 + .../grpc/metadata/metadata.go | 140 + .../google.golang.org/grpc/naming/naming.go | 74 + vendor/google.golang.org/grpc/peer/peer.go | 65 + vendor/google.golang.org/grpc/rpc_util.go | 457 + vendor/google.golang.org/grpc/server.go | 894 + vendor/google.golang.org/grpc/stream.go | 493 + vendor/google.golang.org/grpc/trace.go | 119 + .../grpc/transport/control.go | 215 + .../google.golang.org/grpc/transport/go16.go | 46 + .../google.golang.org/grpc/transport/go17.go | 46 + .../grpc/transport/handler_server.go | 397 + .../grpc/transport/http2_client.go | 1027 + .../grpc/transport/http2_server.go | 774 + .../grpc/transport/http_util.go | 510 + .../grpc/transport/pre_go16.go | 51 + .../grpc/transport/transport.go | 578 + vendor/gopkg.in/yaml.v2/LICENSE | 195 +- vendor/k8s.io/client-go/1.4/pkg/api/OWNERS | 6 + .../k8s.io/client-go/1.4/pkg/api/context.go | 152 + .../client-go/1.4/pkg/api/conversion.go | 245 + .../k8s.io/client-go/1.4/pkg/api/defaults.go | 36 + vendor/k8s.io/client-go/1.4/pkg/api/doc.go | 24 + .../client-go/1.4/pkg/api/endpoints/util.go | 238 + .../client-go/1.4/pkg/api/errors/doc.go | 18 + .../client-go/1.4/pkg/api/errors/errors.go | 456 + .../client-go/1.4/pkg/api/field_constants.go | 38 + .../k8s.io/client-go/1.4/pkg/api/generate.go | 64 + .../k8s.io/client-go/1.4/pkg/api/helpers.go | 600 + vendor/k8s.io/client-go/1.4/pkg/api/mapper.go | 68 + vendor/k8s.io/client-go/1.4/pkg/api/meta.go | 140 + .../k8s.io/client-go/1.4/pkg/api/meta/doc.go | 19 + .../client-go/1.4/pkg/api/meta/errors.go | 105 + .../k8s.io/client-go/1.4/pkg/api/meta/help.go | 134 + .../client-go/1.4/pkg/api/meta/interfaces.go | 185 + .../k8s.io/client-go/1.4/pkg/api/meta/meta.go | 567 + .../1.4/pkg/api/meta/metatypes/types.go} | 26 +- .../1.4/pkg/api/meta/multirestmapper.go | 231 + .../client-go/1.4/pkg/api/meta/priority.go | 226 + .../client-go/1.4/pkg/api/meta/restmapper.go | 564 + .../1.4/pkg/api/meta/unstructured.go | 31 + .../client-go/1.4/pkg/api/node_example.json | 49 + .../k8s.io/client-go/1.4/pkg/api/pod/util.go | 61 + vendor/k8s.io/client-go/1.4/pkg/api/ref.go | 132 + .../k8s.io/client-go/1.4/pkg/api/register.go | 139 + .../api/replication_controller_example.json | 83 + .../client-go/1.4/pkg/api/requestcontext.go | 115 + .../client-go/1.4/pkg/api/resource/amount.go | 298 + .../1.4/pkg/api/resource/generated.pb.go | 69 + .../1.4/pkg/api/resource/generated.proto | 93 + .../client-go/1.4/pkg/api/resource/math.go | 327 + .../1.4/pkg/api/resource/quantity.go | 777 + .../1.4/pkg/api/resource/quantity_proto.go | 284 + .../1.4/pkg/api/resource/scale_int.go | 95 + .../client-go/1.4/pkg/api/resource/suffix.go | 198 + .../client-go/1.4/pkg/api/resource_helpers.go | 209 + .../1.4/pkg/api/service/annotations.go | 89 + .../client-go/1.4/pkg/api/service/util.go | 68 + .../client-go/1.4/pkg/api/types.generated.go | 62430 +++++++++++++++ vendor/k8s.io/client-go/1.4/pkg/api/types.go | 3064 + .../1.4/pkg/api/unversioned}/doc.go | 7 +- .../1.4/pkg/api/unversioned/duration.go | 47 + .../1.4/pkg/api/unversioned/generated.pb.go | 4536 ++ .../1.4/pkg/api/unversioned/generated.proto | 378 + .../1.4/pkg/api/unversioned/group_version.go | 325 + .../1.4/pkg/api/unversioned/helpers.go | 184 + .../client-go/1.4/pkg/api/unversioned/meta.go | 62 + .../1.4/pkg/api/unversioned/register.go | 25 + .../client-go/1.4/pkg/api/unversioned/time.go | 166 + .../1.4/pkg/api/unversioned/time_proto.go | 85 + .../1.4/pkg/api/unversioned/types.go | 460 + .../types_swagger_doc_generated.go | 208 + .../api/unversioned/validation/validation.go | 74 + .../pkg/api/unversioned/well_known_labels.go | 30 + .../api/unversioned/zz_generated.deepcopy.go | 390 + .../1.4/pkg/api/util/group_version.go | 48 + .../client-go/1.4/pkg/api/v1/conversion.go | 814 + .../client-go/1.4/pkg/api/v1/defaults.go | 336 + vendor/k8s.io/client-go/1.4/pkg/api/v1/doc.go | 21 + .../client-go/1.4/pkg/api/v1/generated.pb.go | 39094 ++++++++++ .../client-go/1.4/pkg/api/v1/generated.proto | 3088 + .../k8s.io/client-go/1.4/pkg/api/v1/meta.go | 92 + vendor/k8s.io/client-go/1.4/pkg/api/v1/ref.go | 133 + .../client-go/1.4/pkg/api/v1/register.go | 93 + .../1.4/pkg/api/v1/types.generated.go | 62479 ++++++++++++++++ .../k8s.io/client-go/1.4/pkg/api/v1/types.go | 3503 + .../pkg/api/v1/types_swagger_doc_generated.go | 1811 + .../pkg/api/v1/zz_generated.conversion.go} | 787 +- .../1.4/pkg/api/v1/zz_generated.deepcopy.go | 3703 + .../client-go/1.4/pkg/api/validation/doc.go | 19 + .../1.4/pkg/api/validation/events.go | 80 + .../client-go/1.4/pkg/api/validation/name.go | 66 + .../1.4/pkg/api/validation/schema.go | 370 + .../1.4/pkg/api/validation/validation.go | 3619 + .../1.4/pkg/api/zz_generated.deepcopy.go | 3749 + .../client-go/1.4/pkg/apimachinery/doc.go | 20 + .../pkg/apimachinery/registered/registered.go | 376 + .../client-go/1.4/pkg/apimachinery/types.go | 52 + .../client-go/1.4/pkg/apis/autoscaling/doc.go | 19 + .../1.4/pkg/apis/autoscaling/register.go | 55 + .../pkg/apis/autoscaling/types.generated.go | 2656 + .../1.4/pkg/apis/autoscaling/types.go | 120 + .../apis/autoscaling/zz_generated.deepcopy.go | 186 + .../client-go/1.4/pkg/apis/batch/doc.go | 19 + .../client-go/1.4/pkg/apis/batch/register.go | 57 + .../1.4/pkg/apis/batch/types.generated.go | 4676 ++ .../client-go/1.4/pkg/apis/batch/types.go | 244 + .../pkg/apis/batch/zz_generated.deepcopy.go | 307 + .../client-go/1.4/pkg/apis/extensions/doc.go | 19 + .../1.4/pkg/apis/extensions/helpers.go | 37 + .../1.4/pkg/apis/extensions/register.go | 81 + .../pkg/apis/extensions/types.generated.go | 17991 +++++ .../1.4/pkg/apis/extensions/types.go | 913 + .../apis/extensions/zz_generated.deepcopy.go | 1081 + .../k8s.io/client-go/1.4/pkg/auth/user/doc.go | 19 + .../client-go/1.4/pkg/auth/user/user.go | 67 + .../1.4/pkg/capabilities/capabilities.go | 94 + .../client-go/1.4/pkg/capabilities/doc.go | 18 + .../client-go/1.4/pkg/conversion/OWNERS | 5 + .../client-go/1.4/pkg/conversion/cloner.go | 249 + .../client-go/1.4/pkg/conversion/converter.go | 953 + .../1.4/pkg/conversion/deep_equal.go | 36 + .../client-go/1.4/pkg/conversion/doc.go | 24 + .../client-go/1.4/pkg/conversion/helper.go | 39 + .../1.4/pkg/conversion/queryparams/convert.go | 188 + .../1.4/pkg/conversion/queryparams/doc.go | 19 + vendor/k8s.io/client-go/1.4/pkg/fields/doc.go | 19 + .../k8s.io/client-go/1.4/pkg/fields/fields.go | 62 + .../client-go/1.4/pkg/fields/requirements.go | 30 + .../client-go/1.4/pkg/fields/selector.go | 278 + vendor/k8s.io/client-go/1.4/pkg/labels/doc.go | 19 + .../k8s.io/client-go/1.4/pkg/labels/labels.go | 80 + .../client-go/1.4/pkg/labels/selector.go | 822 + .../k8s.io/client-go/1.4/pkg/runtime/OWNERS | 5 + .../k8s.io/client-go/1.4/pkg/runtime/codec.go | 280 + .../client-go/1.4/pkg/runtime/codec_check.go | 50 + .../client-go/1.4/pkg/runtime/conversion.go | 98 + .../k8s.io/client-go/1.4/pkg/runtime/doc.go | 45 + .../client-go/1.4/pkg/runtime/embedded.go | 136 + .../k8s.io/client-go/1.4/pkg/runtime/error.go | 102 + .../client-go/1.4/pkg/runtime/extension.go | 48 + .../client-go/1.4/pkg/runtime/generated.pb.go | 766 + .../client-go/1.4/pkg/runtime/generated.proto | 124 + .../client-go/1.4/pkg/runtime/helper.go | 212 + .../client-go/1.4/pkg/runtime/interfaces.go | 238 + .../client-go/1.4/pkg/runtime/register.go | 66 + .../client-go/1.4/pkg/runtime/scheme.go | 570 + .../1.4/pkg/runtime/scheme_builder.go | 48 + .../pkg/runtime/serializer/codec_factory.go | 348 + .../1.4/pkg/runtime/serializer/json/json.go | 245 + .../1.4/pkg/runtime/serializer/json/meta.go | 61 + .../runtime/serializer/negotiated_codec.go | 56 + .../pkg/runtime/serializer/protobuf/doc.go | 18 + .../runtime/serializer/protobuf/protobuf.go | 448 + .../runtime/serializer/protobuf_extension.go | 52 + .../serializer/recognizer/recognizer.go | 127 + .../runtime/serializer/streaming/streaming.go | 137 + .../serializer/versioning/versioning.go | 222 + .../1.4/pkg/runtime/swagger_doc_generator.go | 262 + .../k8s.io/client-go/1.4/pkg/runtime/types.go | 553 + .../client-go/1.4/pkg/runtime/types_proto.go | 69 + .../client-go/1.4/pkg/runtime/unstructured.go | 204 + .../1.4/pkg/runtime/zz_generated.deepcopy.go | 75 + .../1.4/pkg/security/apparmor/helpers.go | 62 + .../1.4/pkg/security/apparmor/validate.go | 227 + .../security/apparmor/validate_disabled.go | 24 + .../client-go/1.4/pkg/selection/operator.go | 33 + .../forked/golang}/reflect/deep_equal.go | 0 .../third_party/forked/golang/reflect/type.go | 91 + vendor/k8s.io/client-go/1.4/pkg/types/doc.go | 18 + .../client-go/1.4/pkg/types/namespacedname.go | 60 + vendor/k8s.io/client-go/1.4/pkg/types/uid.go | 22 + .../client-go/1.4/pkg/types/unix_user_id.go | 23 + .../1.4/pkg/util/clock}/clock.go | 4 +- .../client-go/1.4/pkg/util/config/config.go | 140 + .../1.4/pkg/util/config/configuration_map.go | 53 + .../client-go/1.4/pkg/util/config/doc.go | 20 + .../1.4/pkg/util/config/feature_gate.go | 223 + .../client-go/1.4/pkg/util/crypto/crypto.go | 212 + vendor/k8s.io/client-go/1.4/pkg/util/doc.go | 20 + .../client-go/1.4/pkg/util/errors/doc.go | 18 + .../client-go/1.4/pkg/util/errors/errors.go | 168 + .../1.4/pkg/util/flowcontrol/backoff.go | 149 + .../1.4/pkg/util/flowcontrol/throttle.go | 132 + .../client-go/1.4/pkg/util/framer/framer.go | 167 + .../client-go/1.4/pkg/util/hash/hash.go | 37 + .../client-go/1.4/pkg/util/integer/integer.go | 67 + .../1.4/pkg/util/intstr/generated.pb.go | 372 + .../1.4/pkg/util/intstr/generated.proto | 42 + .../client-go/1.4/pkg/util/intstr/intstr.go | 147 + .../client-go/1.4/pkg/util/json/json.go | 107 + .../client-go/1.4/pkg/util/labels/doc.go | 18 + .../client-go/1.4/pkg/util/labels/labels.go | 126 + .../k8s.io/client-go/1.4/pkg/util/net/http.go | 261 + .../client-go/1.4/pkg/util/net/interface.go | 278 + .../client-go/1.4/pkg/util/net/port_range.go | 113 + .../client-go/1.4/pkg/util/net/port_split.go | 77 + .../client-go/1.4/pkg/util/net/sets/doc.go | 28 + .../client-go/1.4/pkg/util/net/sets/ipnet.go | 119 + .../k8s.io/client-go/1.4/pkg/util/net/util.go | 36 + .../client-go/1.4/pkg/util/parsers/parsers.go | 54 + .../client-go/1.4/pkg/util/rand/rand.go | 83 + .../client-go/1.4/pkg/util/runtime/runtime.go | 128 + .../client-go/1.4/pkg/util/sets/byte.go | 203 + .../k8s.io/client-go/1.4/pkg/util/sets/doc.go | 20 + .../client-go/1.4/pkg/util/sets/empty.go | 23 + .../k8s.io/client-go/1.4/pkg/util/sets/int.go | 203 + .../client-go/1.4/pkg/util/sets/int64.go | 203 + .../client-go/1.4/pkg/util/sets/string.go | 203 + .../client-go/1.4/pkg/util/string_flag.go | 56 + .../k8s.io/client-go/1.4/pkg/util/template.go | 48 + vendor/k8s.io/client-go/1.4/pkg/util/trace.go | 72 + .../1.4/pkg/util/umask.go} | 19 +- .../1.4/pkg/util/umask_windows.go} | 12 +- vendor/k8s.io/client-go/1.4/pkg/util/util.go | 147 + .../client-go/1.4/pkg/util/uuid/uuid.go | 42 + .../1.4/pkg/util/validation/field/errors.go | 228 + .../1.4/pkg/util/validation/field/path.go | 91 + .../1.4/pkg/util/validation/validation.go | 334 + .../k8s.io/client-go/1.4/pkg/util/wait/doc.go | 19 + .../client-go/1.4/pkg/util/wait/wait.go | 263 + .../client-go/1.4/pkg/util/yaml/decoder.go | 306 + .../client-go/1.4/pkg/version/.gitattributes | 1 + .../k8s.io/client-go/1.4/pkg/version/base.go | 59 + .../k8s.io/client-go/1.4/pkg/version/doc.go | 19 + .../client-go/1.4/pkg/version/semver.go | 50 + .../client-go/1.4/pkg/version/version.go | 60 + vendor/k8s.io/client-go/1.4/pkg/watch/doc.go | 19 + .../k8s.io/client-go/1.4/pkg/watch/filter.go | 109 + vendor/k8s.io/client-go/1.4/pkg/watch/mux.go | 257 + .../client-go/1.4/pkg/watch/streamwatcher.go | 119 + .../k8s.io/client-go/1.4/pkg/watch/until.go | 82 + .../1.4/pkg/watch/versioned/decoder.go | 71 + .../1.4/pkg/watch/versioned/encoder.go | 51 + .../1.4/pkg/watch/versioned/generated.pb.go | 390 + .../1.4/pkg/watch/versioned/generated.proto | 43 + .../1.4/pkg/watch/versioned/register.go | 84 + .../1.4/pkg/watch/versioned/types.go | 37 + .../k8s.io/client-go/1.4/pkg/watch/watch.go | 152 + vendor/k8s.io/client-go/1.4/rest/client.go | 224 + vendor/k8s.io/client-go/1.4/rest/config.go | 335 + vendor/k8s.io/client-go/1.4/rest/plugin.go | 73 + vendor/k8s.io/client-go/1.4/rest/request.go | 1111 + vendor/k8s.io/client-go/1.4/rest/transport.go | 94 + vendor/k8s.io/client-go/1.4/rest/url_utils.go | 93 + .../k8s.io/client-go/1.4/rest/urlbackoff.go | 107 + vendor/k8s.io/client-go/1.4/rest/versions.go | 88 + .../1.4/tools/clientcmd/api/helpers.go | 183 + .../1.4/tools/clientcmd/api/register.go | 46 + .../1.4/tools/clientcmd/api/types.go | 154 + .../client-go/1.4/tools/metrics/metrics.go | 61 + .../k8s.io/client-go/1.4/transport/cache.go | 88 + .../k8s.io/client-go/1.4/transport/config.go | 84 + .../client-go/1.4/transport/round_trippers.go | 337 + .../client-go/1.4/transport/transport.go | 140 + .../runc => k8s.io/client-go}/LICENSE | 13 +- vendor/k8s.io/kubernetes/LICENSE | 2 +- .../apis/federation/deep_copy_generated.go | 145 - .../federation/apis/federation/doc.go | 19 + .../apis/federation/install/install.go | 12 +- .../federation/apis/federation/register.go | 13 +- .../federation/apis/federation/types.go | 34 +- .../apis/federation/v1beta1/conversion.go | 14 +- .../federation/v1beta1/deep_copy_generated.go | 146 - .../apis/federation/v1beta1/defaults.go | 5 +- .../federation/apis/federation/v1beta1/doc.go | 6 +- .../apis/federation/v1beta1/generated.pb.go | 180 +- .../apis/federation/v1beta1/generated.proto | 4 +- .../apis/federation/v1beta1/register.go | 15 +- .../apis/federation/v1beta1/types.go | 5 +- .../v1beta1/types_swagger_doc_generated.go | 96 + ...enerated.go => zz_generated.conversion.go} | 16 +- .../v1beta1/zz_generated.deepcopy.go | 159 + .../apis/federation/zz_generated.deepcopy.go | 200 + .../federation_internalclientset/clientset.go | 19 +- .../federation_internalclientset/doc.go | 4 +- .../import_known_versions.go | 2 +- .../typed/core/unversioned/core_client.go | 17 +- .../typed/core/unversioned/doc.go | 4 +- .../typed/core/unversioned/event.go | 150 + .../core/unversioned/generated_expansion.go | 6 +- .../typed/core/unversioned/namespace.go | 153 + .../core/unversioned/namespace_expansion.go | 31 + .../typed/core/unversioned/secret.go | 150 + .../typed/core/unversioned/service.go | 17 +- .../typed/extensions/unversioned/doc.go | 20 + .../unversioned/extensions_client.go | 106 + .../unversioned/generated_expansion.go | 21 + .../typed/extensions/unversioned/ingress.go | 165 + .../extensions/unversioned/replicaset.go | 165 + .../typed/federation/unversioned/cluster.go | 16 +- .../typed/federation/unversioned/doc.go | 4 +- .../unversioned/federation_client.go | 2 +- .../unversioned/generated_expansion.go | 2 +- .../pkg/api/annotations/annotations.go | 2 +- .../kubernetes/pkg/api/annotations/doc.go | 2 +- vendor/k8s.io/kubernetes/pkg/api/context.go | 27 +- .../k8s.io/kubernetes/pkg/api/conversion.go | 124 +- .../kubernetes/pkg/api/deep_copy_generated.go | 3491 - vendor/k8s.io/kubernetes/pkg/api/defaults.go | 36 + vendor/k8s.io/kubernetes/pkg/api/doc.go | 4 +- .../kubernetes/pkg/api/endpoints/util.go | 2 +- .../k8s.io/kubernetes/pkg/api/errors/doc.go | 2 +- .../kubernetes/pkg/api/errors/errors.go | 8 +- .../kubernetes/pkg/api/field_constants.go | 2 +- vendor/k8s.io/kubernetes/pkg/api/generate.go | 2 +- vendor/k8s.io/kubernetes/pkg/api/helpers.go | 120 +- .../kubernetes/pkg/api/install/install.go | 110 +- vendor/k8s.io/kubernetes/pkg/api/mapper.go | 12 +- vendor/k8s.io/kubernetes/pkg/api/meta.go | 21 +- vendor/k8s.io/kubernetes/pkg/api/meta/doc.go | 2 +- .../k8s.io/kubernetes/pkg/api/meta/errors.go | 2 +- vendor/k8s.io/kubernetes/pkg/api/meta/help.go | 2 +- .../kubernetes/pkg/api/meta/interfaces.go | 12 +- vendor/k8s.io/kubernetes/pkg/api/meta/meta.go | 2 +- .../pkg/api/meta/metatypes/types.go | 2 +- .../kubernetes/pkg/api/meta/priority.go | 7 +- .../kubernetes/pkg/api/meta/restmapper.go | 6 +- .../kubernetes/pkg/api/meta/unstructured.go | 31 + vendor/k8s.io/kubernetes/pkg/api/pod/util.go | 4 +- .../kubernetes/pkg/api/pod_example.json | 102 - vendor/k8s.io/kubernetes/pkg/api/ref.go | 4 +- vendor/k8s.io/kubernetes/pkg/api/register.go | 38 +- .../api/replication_controller_example.json | 3 +- .../kubernetes/pkg/api/requestcontext.go | 2 +- .../kubernetes/pkg/api/resource/amount.go | 2 +- .../pkg/api/resource/generated.pb.go | 30 +- .../pkg/api/resource/generated.proto | 3 +- .../kubernetes/pkg/api/resource/math.go | 2 +- .../kubernetes/pkg/api/resource/quantity.go | 13 +- .../pkg/api/resource/quantity_proto.go | 2 +- .../kubernetes/pkg/api/resource/scale_int.go | 2 +- .../kubernetes/pkg/api/resource/suffix.go | 2 +- .../kubernetes/pkg/api/resource_helpers.go | 6 +- .../k8s.io/kubernetes/pkg/api/rest/create.go | 23 +- .../k8s.io/kubernetes/pkg/api/rest/delete.go | 43 +- vendor/k8s.io/kubernetes/pkg/api/rest/doc.go | 2 +- .../k8s.io/kubernetes/pkg/api/rest/export.go | 5 +- vendor/k8s.io/kubernetes/pkg/api/rest/rest.go | 4 +- .../k8s.io/kubernetes/pkg/api/rest/types.go | 2 +- .../k8s.io/kubernetes/pkg/api/rest/update.go | 70 +- .../kubernetes/pkg/api/service/annotations.go | 63 +- .../k8s.io/kubernetes/pkg/api/service/util.go | 2 +- vendor/k8s.io/kubernetes/pkg/api/types.go | 271 +- .../api/unversioned/deep_copy_generated.go | 314 - .../kubernetes/pkg/api/unversioned/doc.go | 19 + .../pkg/api/unversioned/duration.go | 2 +- .../pkg/api/unversioned/generated.pb.go | 459 +- .../pkg/api/unversioned/generated.proto | 17 +- .../pkg/api/unversioned/group_version.go | 68 +- .../kubernetes/pkg/api/unversioned/helpers.go | 56 +- .../kubernetes/pkg/api/unversioned/meta.go | 2 +- .../pkg/api/unversioned/register.go | 4 +- .../kubernetes/pkg/api/unversioned/time.go | 15 +- .../pkg/api/unversioned/time_proto.go | 2 +- .../kubernetes/pkg/api/unversioned/types.go | 16 +- .../types_swagger_doc_generated.go | 16 +- .../api/unversioned/validation/validation.go | 2 +- .../pkg/api/unversioned/well_known_labels.go | 2 +- .../api/unversioned/zz_generated.deepcopy.go | 390 + .../kubernetes/pkg/api/util/group_version.go | 2 +- .../kubernetes/pkg/api/v1/conversion.go | 590 +- .../pkg/api/v1/deep_copy_generated.go | 3504 - .../k8s.io/kubernetes/pkg/api/v1/defaults.go | 94 +- vendor/k8s.io/kubernetes/pkg/api/v1/doc.go | 6 +- .../kubernetes/pkg/api/v1/generated.pb.go | 6475 +- .../kubernetes/pkg/api/v1/generated.proto | 639 +- vendor/k8s.io/kubernetes/pkg/api/v1/meta.go | 9 +- .../k8s.io/kubernetes/pkg/api/v1/register.go | 15 +- vendor/k8s.io/kubernetes/pkg/api/v1/types.go | 741 +- .../pkg/api/v1/types_swagger_doc_generated.go | 510 +- .../pkg/api/v1/zz_generated.conversion.go | 7582 ++ .../pkg/api/v1/zz_generated.deepcopy.go | 3987 + .../kubernetes/pkg/api/validation/doc.go | 2 +- .../kubernetes/pkg/api/validation/events.go | 37 +- .../kubernetes/pkg/api/validation/name.go | 2 +- .../kubernetes/pkg/api/validation/schema.go | 7 +- .../pkg/api/validation/validation.go | 910 +- .../pkg/api/zz_generated.deepcopy.go | 4023 + .../k8s.io/kubernetes/pkg/apimachinery/doc.go | 2 +- .../pkg/apimachinery/registered/registered.go | 192 +- .../kubernetes/pkg/apimachinery/types.go | 2 +- .../pkg/apis/apps/deep_copy_generated.go | 117 - vendor/k8s.io/kubernetes/pkg/apis/apps/doc.go | 19 + .../pkg/apis/apps/install/install.go | 12 +- .../kubernetes/pkg/apis/apps/register.go | 18 +- .../k8s.io/kubernetes/pkg/apis/apps/types.go | 4 +- .../pkg/apis/apps/v1alpha1/conversion.go | 16 +- .../apis/apps/v1alpha1/deep_copy_generated.go | 124 - .../pkg/apis/apps/v1alpha1/defaults.go | 6 +- .../kubernetes/pkg/apis/apps/v1alpha1/doc.go | 6 +- .../pkg/apis/apps/v1alpha1/generated.pb.go | 132 +- .../pkg/apis/apps/v1alpha1/generated.proto | 5 +- .../pkg/apis/apps/v1alpha1/register.go | 14 +- .../pkg/apis/apps/v1alpha1/types.go | 4 +- .../v1alpha1/types_swagger_doc_generated.go | 4 +- ...enerated.go => zz_generated.conversion.go} | 16 +- .../apps/v1alpha1/zz_generated.deepcopy.go | 138 + .../pkg/apis/apps/zz_generated.deepcopy.go | 132 + .../deep_copy_generated.go | 91 - .../v1beta1/conversion_generated.go | 143 - .../v1beta1/deep_copy_generated.go | 91 - .../kubernetes/pkg/apis/authentication/doc.go | 19 + .../install/install.go | 18 +- .../register.go | 23 +- .../types.go | 33 +- .../v1beta1/conversion.go | 10 +- .../v1beta1/defaults.go | 6 +- .../pkg/apis/authentication/v1beta1/doc.go | 20 + .../authentication/v1beta1/generated.pb.go | 1280 + .../authentication/v1beta1/generated.proto | 89 + .../v1beta1/register.go | 22 +- .../v1beta1/types.go | 39 +- .../v1beta1/types_swagger_doc_generated.go | 72 + .../v1beta1/zz_generated.conversion.go | 183 + .../v1beta1/zz_generated.deepcopy.go | 111 + .../authentication/zz_generated.deepcopy.go | 111 + .../apis/authorization/deep_copy_generated.go | 170 - .../kubernetes/pkg/apis/authorization/doc.go | 20 + .../pkg/apis/authorization/install/install.go | 12 +- .../pkg/apis/authorization/register.go | 16 +- .../pkg/apis/authorization/types.go | 20 +- .../apis/authorization/v1beta1/conversion.go | 10 +- .../v1beta1/deep_copy_generated.go | 170 - .../apis/authorization/v1beta1/defaults.go | 6 +- .../pkg/apis/authorization/v1beta1/doc.go | 7 +- .../authorization/v1beta1/generated.pb.go | 2342 + .../authorization/v1beta1/generated.proto | 159 + .../apis/authorization/v1beta1/register.go | 22 +- .../pkg/apis/authorization/v1beta1/types.go | 73 +- .../v1beta1/types_swagger_doc_generated.go | 9 +- ...enerated.go => zz_generated.conversion.go} | 72 +- .../v1beta1/zz_generated.deepcopy.go | 196 + .../authorization/zz_generated.deepcopy.go | 196 + .../apis/autoscaling/deep_copy_generated.go | 165 - .../kubernetes/pkg/apis/autoscaling/doc.go | 19 + .../pkg/apis/autoscaling/install/install.go | 12 +- .../pkg/apis/autoscaling/register.go | 17 +- .../kubernetes/pkg/apis/autoscaling/types.go | 16 +- .../autoscaling/v1/deep_copy_generated.go | 166 - .../pkg/apis/autoscaling/v1/defaults.go | 6 +- .../kubernetes/pkg/apis/autoscaling/v1/doc.go | 6 +- .../pkg/apis/autoscaling/v1/generated.pb.go | 224 +- .../pkg/apis/autoscaling/v1/generated.proto | 19 +- .../pkg/apis/autoscaling/v1/register.go | 13 +- .../pkg/apis/autoscaling/v1/types.go | 18 +- .../v1/types_swagger_doc_generated.go | 18 +- ...enerated.go => zz_generated.conversion.go} | 16 +- .../autoscaling/v1/zz_generated.deepcopy.go | 186 + .../apis/autoscaling/zz_generated.deepcopy.go | 186 + .../pkg/apis/batch/deep_copy_generated.go | 284 - .../k8s.io/kubernetes/pkg/apis/batch/doc.go | 19 + .../pkg/apis/batch/install/install.go | 17 +- .../kubernetes/pkg/apis/batch/register.go | 17 +- .../k8s.io/kubernetes/pkg/apis/batch/types.go | 28 +- .../pkg/apis/batch/v1/conversion.go | 16 +- .../pkg/apis/batch/v1/deep_copy_generated.go | 211 - .../kubernetes/pkg/apis/batch/v1/defaults.go | 6 +- .../kubernetes/pkg/apis/batch/v1/doc.go | 6 +- .../pkg/apis/batch/v1/generated.pb.go | 232 +- .../pkg/apis/batch/v1/generated.proto | 23 +- .../kubernetes/pkg/apis/batch/v1/register.go | 14 +- .../kubernetes/pkg/apis/batch/v1/types.go | 22 +- .../batch/v1/types_swagger_doc_generated.go | 22 +- ...enerated.go => zz_generated.conversion.go} | 16 +- .../apis/batch/v1/zz_generated.deepcopy.go | 229 + .../pkg/apis/batch/v2alpha1/conversion.go | 15 +- .../batch/v2alpha1/deep_copy_generated.go | 324 - .../pkg/apis/batch/v2alpha1/defaults.go | 9 +- .../kubernetes/pkg/apis/batch/v2alpha1/doc.go | 6 +- .../pkg/apis/batch/v2alpha1/generated.pb.go | 355 +- .../pkg/apis/batch/v2alpha1/generated.proto | 39 +- .../pkg/apis/batch/v2alpha1/register.go | 14 +- .../pkg/apis/batch/v2alpha1/types.go | 40 +- .../v2alpha1/types_swagger_doc_generated.go | 38 +- ...enerated.go => zz_generated.conversion.go} | 16 +- .../batch/v2alpha1/zz_generated.deepcopy.go | 354 + .../pkg/apis/batch/zz_generated.deepcopy.go | 307 + .../kubernetes/pkg/apis/certificates/doc.go | 20 + .../pkg/apis/certificates/install/install.go | 137 + .../pkg/apis/certificates/register.go | 58 + .../kubernetes/pkg/apis/certificates/types.go | 85 + .../apis/certificates/v1alpha1/conversion.go | 39 + .../pkg/apis/certificates/v1alpha1/doc.go | 21 + .../certificates/v1alpha1/generated.pb.go | 1325 + .../certificates/v1alpha1/generated.proto | 87 + .../apis/certificates/v1alpha1/register.go | 62 + .../pkg/apis/certificates/v1alpha1/types.go | 85 + .../v1alpha1/types_swagger_doc_generated.go | 70 + .../v1alpha1/zz_generated.conversion.go | 241 + .../v1alpha1/zz_generated.deepcopy.go | 145 + .../certificates/zz_generated.deepcopy.go | 145 + .../componentconfig/deep_copy_generated.go | 374 - .../pkg/apis/componentconfig/doc.go | 19 + .../pkg/apis/componentconfig/helpers.go | 2 +- .../apis/componentconfig/install/install.go | 12 +- .../pkg/apis/componentconfig/register.go | 21 +- .../pkg/apis/componentconfig/types.go | 144 +- .../v1alpha1/conversion_generated.go | 182 - .../v1alpha1/deep_copy_generated.go | 127 - .../apis/componentconfig/v1alpha1/defaults.go | 258 +- .../pkg/apis/componentconfig/v1alpha1/doc.go | 6 +- .../apis/componentconfig/v1alpha1/register.go | 18 +- .../apis/componentconfig/v1alpha1/types.go | 347 +- .../v1alpha1/zz_generated.conversion.go | 548 + .../v1alpha1/zz_generated.deepcopy.go | 432 + .../componentconfig/zz_generated.deepcopy.go | 403 + .../apis/extensions/deep_copy_generated.go | 958 - .../kubernetes/pkg/apis/extensions/doc.go | 19 + .../kubernetes/pkg/apis/extensions/helpers.go | 37 + .../pkg/apis/extensions/install/install.go | 16 +- .../pkg/apis/extensions/register.go | 18 +- .../kubernetes/pkg/apis/extensions/types.go | 61 +- .../pkg/apis/extensions/v1beta1/conversion.go | 25 +- .../extensions/v1beta1/deep_copy_generated.go | 1297 - .../pkg/apis/extensions/v1beta1/defaults.go | 6 +- .../pkg/apis/extensions/v1beta1/doc.go | 8 +- .../apis/extensions/v1beta1/generated.pb.go | 1706 +- .../apis/extensions/v1beta1/generated.proto | 101 +- .../pkg/apis/extensions/v1beta1/register.go | 14 +- .../pkg/apis/extensions/v1beta1/types.go | 114 +- .../v1beta1/types_swagger_doc_generated.go | 99 +- ...enerated.go => zz_generated.conversion.go} | 194 +- .../v1beta1/zz_generated.deepcopy.go | 1451 + .../apis/extensions/validation/validation.go | 128 +- .../apis/extensions/zz_generated.deepcopy.go | 1081 + .../pkg/apis/policy/deep_copy_generated.go | 101 - .../k8s.io/kubernetes/pkg/apis/policy/doc.go | 19 + .../pkg/apis/policy/install/install.go | 12 +- .../kubernetes/pkg/apis/policy/register.go | 20 +- .../kubernetes/pkg/apis/policy/types.go | 18 +- .../policy/v1alpha1/deep_copy_generated.go | 102 - .../pkg/apis/policy/v1alpha1/doc.go | 6 +- .../pkg/apis/policy/v1alpha1/generated.pb.go | 360 +- .../pkg/apis/policy/v1alpha1/generated.proto | 13 +- .../pkg/apis/policy/v1alpha1/register.go | 17 +- .../pkg/apis/policy/v1alpha1/types.go | 18 +- .../v1alpha1/types_swagger_doc_generated.go | 12 +- ...enerated.go => zz_generated.conversion.go} | 67 +- .../policy/v1alpha1/zz_generated.deepcopy.go | 133 + .../pkg/apis/policy/zz_generated.deepcopy.go | 133 + .../pkg/apis/rbac/deep_copy_generated.go | 274 - vendor/k8s.io/kubernetes/pkg/apis/rbac/doc.go | 4 +- .../pkg/apis/rbac/install/install.go | 12 +- .../kubernetes/pkg/apis/rbac/register.go | 17 +- .../k8s.io/kubernetes/pkg/apis/rbac/types.go | 13 +- .../apis/rbac/v1alpha1/deep_copy_generated.go | 271 - .../kubernetes/pkg/apis/rbac/v1alpha1/doc.go | 6 +- .../pkg/apis/rbac/v1alpha1/generated.pb.go | 249 +- .../pkg/apis/rbac/v1alpha1/generated.proto | 5 +- .../pkg/apis/rbac/v1alpha1/register.go | 12 +- .../pkg/apis/rbac/v1alpha1/types.go | 17 +- .../v1alpha1/types_swagger_doc_generated.go | 4 +- ...enerated.go => zz_generated.conversion.go} | 15 +- .../rbac/v1alpha1/zz_generated.deepcopy.go | 281 + .../pkg/apis/rbac/zz_generated.deepcopy.go | 285 + .../k8s.io/kubernetes/pkg/apis/storage/doc.go | 19 + .../pkg/apis/storage/install/install.go | 137 + .../kubernetes/pkg/apis/storage/register.go | 56 + .../kubernetes/pkg/apis/storage/types.go | 60 + .../pkg/apis/storage/v1beta1/doc.go | 20 + .../pkg/apis/storage/v1beta1/generated.pb.go | 729 + .../pkg/apis/storage/v1beta1/generated.proto | 59 + .../pkg/apis/storage/v1beta1/register.go | 50 + .../pkg/apis/storage/v1beta1/types.go | 55 + .../v1beta1/types_swagger_doc_generated.go | 51 + .../v1beta1/zz_generated.conversion.go | 127 + .../storage/v1beta1/zz_generated.deepcopy.go | 84 + .../pkg/apis/storage/zz_generated.deepcopy.go | 84 + .../pkg/auth/authenticator/interfaces.go | 2 +- vendor/k8s.io/kubernetes/pkg/auth/user/doc.go | 2 +- .../k8s.io/kubernetes/pkg/auth/user/user.go | 4 +- .../pkg/capabilities/capabilities.go | 4 +- .../k8s.io/kubernetes/pkg/capabilities/doc.go | 4 +- .../kubernetes/pkg/client/cache/delta_fifo.go | 74 +- .../k8s.io/kubernetes/pkg/client/cache/doc.go | 2 +- .../pkg/client/cache/expiration_cache.go | 14 +- .../client/cache/expiration_cache_fakes.go | 6 +- .../pkg/client/cache/fake_custom_store.go | 2 +- .../kubernetes/pkg/client/cache/fifo.go | 76 +- .../kubernetes/pkg/client/cache/index.go | 5 +- .../kubernetes/pkg/client/cache/listers.go | 247 +- .../kubernetes/pkg/client/cache/listwatch.go | 2 +- .../kubernetes/pkg/client/cache/reflector.go | 10 +- .../kubernetes/pkg/client/cache/store.go | 4 +- .../pkg/client/cache/thread_safe_store.go | 15 +- .../pkg/client/cache/undelta_store.go | 2 +- .../internalclientset/clientset.go | 86 +- .../internalclientset/doc.go | 2 +- .../import_known_versions.go | 5 +- .../unversioned/authentication_client.go | 101 + .../typed/authentication/unversioned/doc.go | 20 + .../unversioned/generated_expansion.go | 17 + .../authentication/unversioned/tokenreview.go | 40 + .../unversioned/tokenreview_expansion.go | 35 + .../unversioned/authorization_client.go | 101 + .../typed/authorization/unversioned/doc.go | 20 + .../unversioned/generated_expansion.go | 17 + .../unversioned/subjectaccessreview.go | 40 + .../subjectaccessreview_expansion.go | 36 + .../unversioned/autoscaling_client.go | 2 +- .../typed/autoscaling/unversioned/doc.go | 2 +- .../unversioned/generated_expansion.go | 2 +- .../unversioned/horizontalpodautoscaler.go | 17 +- .../typed/batch/unversioned/batch_client.go | 2 +- .../typed/batch/unversioned/doc.go | 2 +- .../batch/unversioned/generated_expansion.go | 2 +- .../typed/batch/unversioned/job.go | 17 +- .../typed/batch/unversioned/scheduledjob.go | 17 +- .../unversioned/certificates_client.go | 101 + .../unversioned/certificatesigningrequest.go | 154 + .../certificatesigningrequest_expansion.go | 35 + .../typed/certificates/unversioned/doc.go | 20 + .../unversioned/generated_expansion.go | 17 + .../typed/core/unversioned/componentstatus.go | 16 +- .../typed/core/unversioned/configmap.go | 17 +- .../typed/core/unversioned/core_client.go | 2 +- .../typed/core/unversioned/doc.go | 2 +- .../typed/core/unversioned/endpoints.go | 17 +- .../typed/core/unversioned/event.go | 17 +- .../typed/core/unversioned/event_expansion.go | 18 +- .../core/unversioned/generated_expansion.go | 6 +- .../typed/core/unversioned/limitrange.go | 17 +- .../typed/core/unversioned/namespace.go | 16 +- .../core/unversioned/namespace_expansion.go | 2 +- .../typed/core/unversioned/node.go | 16 +- .../typed/core/unversioned/node_expansion.go | 2 +- .../core/unversioned/persistentvolume.go | 16 +- .../core/unversioned/persistentvolumeclaim.go | 17 +- .../typed/core/unversioned/pod.go | 17 +- .../typed/core/unversioned/pod_expansion.go | 2 +- .../typed/core/unversioned/podtemplate.go | 17 +- .../core/unversioned/replicationcontroller.go | 17 +- .../typed/core/unversioned/resourcequota.go | 17 +- .../typed/core/unversioned/secret.go | 17 +- .../unversioned/securitycontextconstraints.go | 16 +- .../securitycontextconstraints_expansion.go | 21 +- .../typed/core/unversioned/service.go | 17 +- .../core/unversioned/service_expansion.go | 2 +- .../typed/core/unversioned/serviceaccount.go | 17 +- .../typed/extensions/unversioned/daemonset.go | 17 +- .../extensions/unversioned/deployment.go | 17 +- .../unversioned/deployment_expansion.go | 2 +- .../typed/extensions/unversioned/doc.go | 2 +- .../unversioned/extensions_client.go | 2 +- .../unversioned/generated_expansion.go | 10 +- .../typed/extensions/unversioned/ingress.go | 17 +- .../typed/extensions/unversioned/job.go | 150 - .../unversioned/podsecuritypolicy.go | 16 +- .../extensions/unversioned/replicaset.go | 17 +- .../typed/extensions/unversioned/scale.go | 2 +- .../extensions/unversioned/scale_expansion.go | 2 +- .../unversioned/thirdpartyresource.go | 16 +- .../typed/rbac/unversioned/clusterrole.go | 16 +- .../rbac/unversioned/clusterrolebinding.go | 16 +- .../typed/rbac/unversioned/doc.go | 2 +- .../rbac/unversioned/generated_expansion.go | 2 +- .../typed/rbac/unversioned/rbac_client.go | 2 +- .../typed/rbac/unversioned/role.go | 17 +- .../typed/rbac/unversioned/rolebinding.go | 17 +- .../typed/storage/unversioned/doc.go | 20 + .../unversioned/generated_expansion.go | 19 + .../storage/unversioned/storage_client.go | 101 + .../typed/storage/unversioned/storageclass.go | 141 + .../kubernetes/pkg/client/metrics/metrics.go | 72 +- .../kubernetes/pkg/client/record/doc.go | 2 +- .../kubernetes/pkg/client/record/event.go | 13 +- .../pkg/client/record/events_cache.go | 14 +- .../kubernetes/pkg/client/record/fake.go | 2 +- .../pkg/client/restclient/client.go | 6 +- .../pkg/client/restclient/config.go | 47 +- .../pkg/client/restclient/plugin.go | 2 +- .../pkg/client/restclient/request.go | 113 +- .../pkg/client/restclient/transport.go | 2 +- .../pkg/client/restclient/url_utils.go | 4 +- .../pkg/client/restclient/urlbackoff.go | 2 +- .../pkg/client/restclient/versions.go | 2 +- .../kubernetes/pkg/client/transport/cache.go | 2 +- .../kubernetes/pkg/client/transport/config.go | 2 +- .../pkg/client/transport/round_trippers.go | 2 +- .../pkg/client/transport/transport.go | 2 +- .../typed/discovery/discovery_client.go | 46 +- .../pkg/client/typed/discovery/restmapper.go | 263 + .../client/typed/discovery/unstructured.go | 95 + .../pkg/client/typed/dynamic/client.go | 289 + .../pkg/client/typed/dynamic/client_pool.go | 95 + .../pkg/client/typed/dynamic/dynamic_util.go | 94 + .../internalclientset/clientset_adaption.go | 20 +- .../kubernetes/pkg/client/unversioned/apps.go | 32 +- .../pkg/client/unversioned/auth/clientauth.go | 2 +- .../pkg/client/unversioned/authentication.go | 77 + .../pkg/client/unversioned/authorization.go | 77 + .../pkg/client/unversioned/autoscaling.go | 33 +- .../pkg/client/unversioned/batch.go | 60 +- .../pkg/client/unversioned/certificates.go | 69 + .../unversioned/certificatesigningrequests.go | 104 + .../pkg/client/unversioned/client.go | 31 +- .../unversioned/clientcmd/api/helpers.go | 2 +- .../clientcmd/api/latest/latest.go | 22 +- .../unversioned/clientcmd/api/register.go | 15 +- .../client/unversioned/clientcmd/api/types.go | 4 +- .../clientcmd/api/v1/conversion.go | 10 +- .../unversioned/clientcmd/api/v1/register.go | 14 +- .../unversioned/clientcmd/api/v1/types.go | 4 +- .../unversioned/clientcmd/auth_loaders.go | 2 +- .../unversioned/clientcmd/client_config.go | 20 +- .../client/unversioned/clientcmd/config.go | 75 +- .../pkg/client/unversioned/clientcmd/doc.go | 2 +- .../client/unversioned/clientcmd/loader.go | 39 +- .../clientcmd/merged_client_builder.go | 59 +- .../client/unversioned/clientcmd/overrides.go | 30 +- .../unversioned/clientcmd/validation.go | 2 +- .../client/unversioned/clusterrolebindings.go | 2 +- .../pkg/client/unversioned/clusterroles.go | 2 +- .../client/unversioned/componentstatuses.go | 2 +- .../pkg/client/unversioned/conditions.go | 30 +- .../pkg/client/unversioned/configmap.go | 2 +- .../pkg/client/unversioned/containerinfo.go | 2 +- .../pkg/client/unversioned/daemon_sets.go | 2 +- .../pkg/client/unversioned/deployment.go | 2 +- .../kubernetes/pkg/client/unversioned/doc.go | 2 +- .../pkg/client/unversioned/endpoints.go | 2 +- .../pkg/client/unversioned/events.go | 2 +- .../pkg/client/unversioned/extensions.go | 33 +- .../pkg/client/unversioned/flags.go | 2 +- .../pkg/client/unversioned/helper.go | 94 +- .../unversioned/horizontalpodautoscaler.go | 2 +- .../unversioned/import_known_versions.go | 6 +- .../pkg/client/unversioned/ingress.go | 2 +- .../kubernetes/pkg/client/unversioned/jobs.go | 2 +- .../pkg/client/unversioned/limit_ranges.go | 2 +- .../pkg/client/unversioned/namespaces.go | 2 +- .../pkg/client/unversioned/network_policys.go | 2 +- .../pkg/client/unversioned/nodes.go | 13 +- .../unversioned/persistentvolumeclaim.go | 2 +- .../client/unversioned/persistentvolumes.go | 2 +- .../pkg/client/unversioned/pet_sets.go | 2 +- .../unversioned/pod_disruption_budgets.go | 2 +- .../pkg/client/unversioned/pod_templates.go | 2 +- .../kubernetes/pkg/client/unversioned/pods.go | 2 +- .../client/unversioned/podsecuritypolicy.go | 2 +- .../pkg/client/unversioned/policy.go | 32 +- .../kubernetes/pkg/client/unversioned/rbac.go | 34 +- .../pkg/client/unversioned/replica_sets.go | 2 +- .../unversioned/replication_controllers.go | 8 +- .../pkg/client/unversioned/resource_quotas.go | 2 +- .../pkg/client/unversioned/rolebindings.go | 2 +- .../pkg/client/unversioned/roles.go | 2 +- .../pkg/client/unversioned/scale.go | 2 +- .../pkg/client/unversioned/scheduledjobs.go | 16 +- .../pkg/client/unversioned/secrets.go | 2 +- .../unversioned/securitycontextconstraints.go | 2 +- .../client/unversioned/service_accounts.go | 2 +- .../pkg/client/unversioned/services.go | 2 +- .../pkg/client/unversioned/storage.go | 77 + .../pkg/client/unversioned/storageclasses.go | 87 + .../client/unversioned/subjectaccessreview.go | 45 + .../client/unversioned/thirdpartyresources.go | 2 +- .../pkg/client/unversioned/tokenreviews.go | 49 + .../kubernetes/pkg/client/unversioned/util.go | 2 +- .../pkg/controller/controller_ref_manager.go | 144 + .../pkg/controller/controller_utils.go | 140 +- .../deployment/util/deployment_util.go} | 414 +- .../k8s.io/kubernetes/pkg/controller/doc.go | 2 +- .../pkg/controller/framework/controller.go | 2 +- .../pkg/controller/framework/doc.go | 2 +- .../framework/fake_controller_source.go | 2 +- .../controller/framework/informers/core.go | 203 + .../controller/framework/informers/factory.go | 193 + .../controller/framework/mutation_detector.go | 2 +- .../controller/framework/shared_informer.go | 29 +- .../kubernetes/pkg/controller/lookup_cache.go | 2 +- .../pkg/controller/replication/doc.go | 19 + .../replication/replication_controller.go | 738 + .../replication_controller_utils.go | 84 + .../kubernetes/pkg/conversion/cloner.go | 54 +- .../kubernetes/pkg/conversion/converter.go | 2 +- .../kubernetes/pkg/conversion/deep_equal.go | 6 +- .../k8s.io/kubernetes/pkg/conversion/doc.go | 2 +- .../kubernetes/pkg/conversion/helper.go | 2 +- .../pkg/conversion/queryparams/convert.go | 2 +- .../pkg/conversion/queryparams/doc.go | 2 +- .../pkg/credentialprovider/config.go | 2 +- .../kubernetes/pkg/credentialprovider/doc.go | 2 +- .../pkg/credentialprovider/keyring.go | 2 +- .../pkg/credentialprovider/plugins.go | 2 +- .../pkg/credentialprovider/provider.go | 6 +- vendor/k8s.io/kubernetes/pkg/fieldpath/doc.go | 2 +- .../kubernetes/pkg/fieldpath/fieldpath.go | 41 +- vendor/k8s.io/kubernetes/pkg/fields/doc.go | 2 +- vendor/k8s.io/kubernetes/pkg/fields/fields.go | 2 +- .../kubernetes/pkg/fields/requirements.go | 30 + .../k8s.io/kubernetes/pkg/fields/selector.go | 33 +- vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS | 1 - vendor/k8s.io/kubernetes/pkg/kubectl/apply.go | 2 +- .../kubernetes/pkg/kubectl/autoscale.go | 2 +- .../kubernetes/pkg/kubectl/bash_comp_utils.go | 2 +- .../pkg/kubectl/cmd/util/clientcache.go | 6 +- .../pkg/kubectl/cmd/util/factory.go | 264 +- .../pkg/kubectl/cmd/util/helpers.go | 155 +- .../pkg/kubectl/cmd/util/printing.go | 18 +- .../kubernetes/pkg/kubectl/configmap.go | 11 +- .../pkg/kubectl/custom_column_printer.go | 30 +- .../kubernetes/pkg/kubectl/deployment.go | 107 + .../k8s.io/kubernetes/pkg/kubectl/describe.go | 330 +- vendor/k8s.io/kubernetes/pkg/kubectl/doc.go | 2 +- .../k8s.io/kubernetes/pkg/kubectl/explain.go | 2 +- .../k8s.io/kubernetes/pkg/kubectl/generate.go | 2 +- .../k8s.io/kubernetes/pkg/kubectl/history.go | 18 +- .../kubernetes/pkg/kubectl/interfaces.go | 2 +- .../k8s.io/kubernetes/pkg/kubectl/kubectl.go | 24 +- .../kubernetes/pkg/kubectl/namespace.go | 2 +- .../kubernetes/pkg/kubectl/proxy_server.go | 6 +- vendor/k8s.io/kubernetes/pkg/kubectl/quota.go | 125 + .../pkg/kubectl/resource/builder.go | 37 +- .../kubernetes/pkg/kubectl/resource/doc.go | 2 +- .../kubernetes/pkg/kubectl/resource/helper.go | 2 +- .../pkg/kubectl/resource/interfaces.go | 2 +- .../kubernetes/pkg/kubectl/resource/mapper.go | 19 +- .../kubernetes/pkg/kubectl/resource/result.go | 10 +- .../pkg/kubectl/resource/selector.go | 2 +- .../pkg/kubectl/resource/visitor.go | 18 +- .../pkg/kubectl/resource_printer.go | 411 +- .../k8s.io/kubernetes/pkg/kubectl/rollback.go | 23 +- .../kubernetes/pkg/kubectl/rolling_updater.go | 67 +- .../kubernetes/pkg/kubectl/rollout_status.go | 2 +- vendor/k8s.io/kubernetes/pkg/kubectl/run.go | 146 +- vendor/k8s.io/kubernetes/pkg/kubectl/scale.go | 205 +- .../k8s.io/kubernetes/pkg/kubectl/secret.go | 9 +- .../pkg/kubectl/secret_for_docker_registry.go | 2 +- .../kubernetes/pkg/kubectl/secret_for_tls.go | 2 +- .../k8s.io/kubernetes/pkg/kubectl/service.go | 10 +- .../kubernetes/pkg/kubectl/service_basic.go | 207 + .../kubernetes/pkg/kubectl/serviceaccount.go | 2 +- .../pkg/kubectl/sorted_event_list.go | 2 +- .../pkg/kubectl/sorted_resource_name_list.go | 20 +- .../kubernetes/pkg/kubectl/sorting_printer.go | 6 +- vendor/k8s.io/kubernetes/pkg/kubectl/stop.go | 89 +- .../k8s.io/kubernetes/pkg/kubectl/version.go | 2 +- .../kubernetes/pkg/kubectl/watchloop.go | 2 +- .../k8s.io/kubernetes/pkg/kubelet/qos/doc.go | 2 +- .../kubernetes/pkg/kubelet/qos/policy.go | 9 +- .../pkg/kubelet/qos/{util => }/qos.go | 32 +- .../kubernetes/pkg/kubelet/qos/types.go | 29 + .../kubernetes/pkg/kubelet/types/constants.go | 22 + .../kubernetes/pkg/kubelet/types/doc.go | 18 + .../kubernetes/pkg/kubelet/types/labels.go | 40 + .../pkg/kubelet/types/pod_update.go | 133 + .../kubernetes/pkg/kubelet/types/types.go | 93 + vendor/k8s.io/kubernetes/pkg/labels/doc.go | 2 +- vendor/k8s.io/kubernetes/pkg/labels/labels.go | 11 +- .../k8s.io/kubernetes/pkg/labels/selector.go | 168 +- .../k8s.io/kubernetes/pkg/master/ports/doc.go | 2 +- .../kubernetes/pkg/master/ports/ports.go | 2 +- .../kubernetes/pkg/registry/generic/doc.go | 2 +- .../pkg/registry/generic/matcher.go | 79 +- .../pkg/registry/generic/options.go | 10 +- .../pkg/registry/generic/storage_decorator.go | 28 +- .../registry/thirdpartyresourcedata/codec.go | 80 +- .../registry/thirdpartyresourcedata/doc.go | 2 +- .../thirdpartyresourcedata/registry.go | 2 +- .../thirdpartyresourcedata/strategy.go | 33 +- .../registry/thirdpartyresourcedata/util.go | 2 +- vendor/k8s.io/kubernetes/pkg/runtime/codec.go | 122 +- .../kubernetes/pkg/runtime/codec_check.go | 2 +- .../kubernetes/pkg/runtime/conversion.go | 2 +- .../pkg/runtime/deep_copy_generated.go | 65 - vendor/k8s.io/kubernetes/pkg/runtime/doc.go | 3 +- .../k8s.io/kubernetes/pkg/runtime/embedded.go | 2 +- vendor/k8s.io/kubernetes/pkg/runtime/error.go | 4 +- .../kubernetes/pkg/runtime/extension.go | 2 +- .../kubernetes/pkg/runtime/generated.pb.go | 98 +- .../kubernetes/pkg/runtime/generated.proto | 8 +- .../k8s.io/kubernetes/pkg/runtime/helper.go | 55 +- .../kubernetes/pkg/runtime/interfaces.go | 14 +- .../k8s.io/kubernetes/pkg/runtime/register.go | 2 +- .../k8s.io/kubernetes/pkg/runtime/scheme.go | 52 +- .../kubernetes/pkg/runtime/scheme_builder.go | 48 + .../pkg/runtime/serializer/codec_factory.go | 13 +- .../pkg/runtime/serializer/json/json.go | 4 +- .../pkg/runtime/serializer/json/meta.go | 2 +- .../runtime/serializer/negotiated_codec.go | 2 +- .../pkg/runtime/serializer/protobuf/doc.go | 2 +- .../runtime/serializer/protobuf/protobuf.go | 47 +- .../runtime/serializer/protobuf_extension.go | 2 +- .../serializer/recognizer/recognizer.go | 2 +- .../runtime/serializer/streaming/streaming.go | 2 +- .../serializer/versioning/versioning.go | 25 +- .../pkg/runtime/swagger_doc_generator.go | 2 +- vendor/k8s.io/kubernetes/pkg/runtime/types.go | 47 +- .../kubernetes/pkg/runtime/types_proto.go | 2 +- .../kubernetes/pkg/runtime/unstructured.go | 18 +- .../pkg/runtime/zz_generated.deepcopy.go | 75 + .../pkg/security/apparmor/helpers.go | 62 + .../pkg/security/apparmor/validate.go | 227 + .../security/apparmor/validate_disabled.go | 24 + .../security/podsecuritypolicy/util/doc.go | 19 + .../security/podsecuritypolicy/util/util.go | 10 +- .../securitycontextconstraints/util/util.go | 8 +- .../kubernetes/pkg/selection/operator.go | 33 + .../kubernetes/pkg/serviceaccount/jwt.go | 30 +- .../kubernetes/pkg/serviceaccount/util.go | 2 +- .../k8s.io/kubernetes/pkg/storage/cacher.go | 349 +- vendor/k8s.io/kubernetes/pkg/storage/doc.go | 2 +- .../k8s.io/kubernetes/pkg/storage/errors.go | 14 +- .../pkg/storage/etcd/api_object_versioner.go | 98 + .../k8s.io/kubernetes/pkg/storage/etcd/doc.go | 17 + .../pkg/storage/etcd/etcd_helper.go | 616 + .../pkg/storage/etcd/etcd_watcher.go | 504 + .../pkg/storage/etcd/metrics/metrics.go | 113 + .../kubernetes/pkg/storage/etcd/util/doc.go | 19 + .../pkg/storage/etcd/util/etcd_util.go | 99 + .../kubernetes/pkg/storage/etcd3/compact.go | 161 + .../kubernetes/pkg/storage/etcd3/event.go | 50 + .../kubernetes/pkg/storage/etcd3/store.go | 455 + .../kubernetes/pkg/storage/etcd3/watcher.go | 351 + .../kubernetes/pkg/storage/interfaces.go | 72 +- .../pkg/storage/storagebackend/config.go | 47 + .../storage/storagebackend/factory/etcd2.go | 81 + .../storage/storagebackend/factory/etcd3.go | 55 + .../storage/storagebackend/factory/factory.go | 43 + vendor/k8s.io/kubernetes/pkg/storage/util.go | 63 +- .../kubernetes/pkg/storage/watch_cache.go | 8 +- vendor/k8s.io/kubernetes/pkg/types/doc.go | 2 +- .../kubernetes/pkg/types/namespacedname.go | 29 +- vendor/k8s.io/kubernetes/pkg/types/uid.go | 2 +- .../kubernetes/pkg/types/unix_user_id.go | 2 +- .../k8s.io/kubernetes/pkg/util/cache/cache.go | 83 + .../pkg/util/cache/lruexpirecache.go | 66 + .../kubernetes/pkg/util/certificates/csr.go | 138 + .../k8s.io/kubernetes/pkg/util/clock/clock.go | 218 + .../kubernetes/pkg/util/config/config.go | 140 + .../pkg/util/config/configuration_map.go | 53 + .../k8s.io/kubernetes/pkg/util/config/doc.go | 20 + .../pkg/util/config/feature_gate.go | 223 + .../kubernetes/pkg/util/crypto/crypto.go | 50 +- .../k8s.io/kubernetes/pkg/util/diff/diff.go | 6 +- vendor/k8s.io/kubernetes/pkg/util/doc.go | 2 +- .../k8s.io/kubernetes/pkg/util/errors/doc.go | 2 +- .../kubernetes/pkg/util/errors/errors.go | 16 +- vendor/k8s.io/kubernetes/pkg/util/exec/doc.go | 18 + .../k8s.io/kubernetes/pkg/util/exec/exec.go | 167 + .../kubernetes/pkg/util/exec/fake_exec.go | 112 + .../k8s.io/kubernetes/pkg/util/flag/flags.go | 2 +- .../kubernetes/pkg/util/flag/tristate.go | 2 +- .../pkg/util/flowcontrol/backoff.go | 10 +- .../pkg/util/flowcontrol/throttle.go | 30 +- .../kubernetes/pkg/util/framer/framer.go | 2 +- .../k8s.io/kubernetes/pkg/util/hash/hash.go | 2 +- .../kubernetes/pkg/util/homedir/homedir.go | 2 +- .../kubernetes/pkg/util/integer/integer.go | 24 +- .../pkg/util/interrupt/interrupt.go | 104 + .../pkg/util/intstr/generated.pb.go | 32 +- .../pkg/util/intstr/generated.proto | 3 +- .../kubernetes/pkg/util/intstr/intstr.go | 5 +- .../k8s.io/kubernetes/pkg/util/json/json.go | 2 +- .../kubernetes/pkg/util/jsonpath/doc.go | 2 +- .../kubernetes/pkg/util/jsonpath/jsonpath.go | 18 +- .../kubernetes/pkg/util/jsonpath/node.go | 2 +- .../kubernetes/pkg/util/jsonpath/parser.go | 2 +- .../k8s.io/kubernetes/pkg/util/labels/doc.go | 2 +- .../kubernetes/pkg/util/labels/labels.go | 2 +- .../kubernetes/pkg/util/line_delimiter.go | 63 - vendor/k8s.io/kubernetes/pkg/util/logs.go | 61 - .../kubernetes/pkg/util/metrics/util.go | 71 + vendor/k8s.io/kubernetes/pkg/util/net/http.go | 2 +- .../kubernetes/pkg/util/net/interface.go | 2 +- .../kubernetes/pkg/util/net/port_range.go | 9 +- .../kubernetes/pkg/util/net/port_split.go | 2 +- .../kubernetes/pkg/util/net/sets/README.md | 17 - .../kubernetes/pkg/util/net/sets/doc.go | 28 + .../kubernetes/pkg/util/net/sets/ipnet.go | 2 +- vendor/k8s.io/kubernetes/pkg/util/net/util.go | 2 +- .../kubernetes/pkg/util/parsers/parsers.go | 2 +- vendor/k8s.io/kubernetes/pkg/util/pod/doc.go | 2 +- vendor/k8s.io/kubernetes/pkg/util/pod/pod.go | 4 +- .../k8s.io/kubernetes/pkg/util/rand/rand.go | 2 +- .../pkg/util/replicaset/replicaset.go | 26 +- .../pkg/util/resource_container_linux.go | 49 - vendor/k8s.io/kubernetes/pkg/util/runner.go | 58 - .../kubernetes/pkg/util/runtime/runtime.go | 56 +- .../k8s.io/kubernetes/pkg/util/sets/byte.go | 11 +- vendor/k8s.io/kubernetes/pkg/util/sets/doc.go | 2 +- .../k8s.io/kubernetes/pkg/util/sets/empty.go | 2 +- vendor/k8s.io/kubernetes/pkg/util/sets/int.go | 11 +- .../k8s.io/kubernetes/pkg/util/sets/int64.go | 11 +- .../k8s.io/kubernetes/pkg/util/sets/string.go | 11 +- .../k8s.io/kubernetes/pkg/util/slice/slice.go | 2 +- .../pkg/util/strategicpatch/patch.go | 4 +- .../k8s.io/kubernetes/pkg/util/string_flag.go | 2 +- vendor/k8s.io/kubernetes/pkg/util/template.go | 2 +- .../k8s.io/kubernetes/pkg/util/term/resize.go | 144 + .../kubernetes/pkg/util/term/resizeevents.go | 60 + .../pkg/util/term/resizeevents_windows.go | 61 + .../kubernetes/pkg/util/term/setsize.go | 28 + .../pkg/util/term/setsize_unsupported.go | 24 + .../k8s.io/kubernetes/pkg/util/term/term.go | 110 + vendor/k8s.io/kubernetes/pkg/util/trace.go | 2 +- vendor/k8s.io/kubernetes/pkg/util/umask.go | 2 +- .../kubernetes/pkg/util/umask_windows.go | 2 +- vendor/k8s.io/kubernetes/pkg/util/util.go | 2 +- .../kubernetes/pkg/util/{ => uuid}/uuid.go | 4 +- .../pkg/util/validation/field/errors.go | 15 +- .../pkg/util/validation/field/path.go | 2 +- .../pkg/util/validation/validation.go | 194 +- vendor/k8s.io/kubernetes/pkg/util/wait/doc.go | 2 +- .../k8s.io/kubernetes/pkg/util/wait/wait.go | 33 +- .../util/workqueue/default_rate_limiters.go | 211 + .../pkg/util/workqueue/delaying_queue.go | 240 + .../kubernetes/pkg/util/workqueue/doc.go | 26 + .../kubernetes/pkg/util/workqueue/metrics.go | 153 + .../pkg/util/workqueue/parallelizer.go | 48 + .../kubernetes/pkg/util/workqueue/queue.go | 172 + .../util/workqueue/rate_limitting_queue.go | 68 + .../pkg/util/workqueue/timed_queue.go | 52 + .../kubernetes/pkg/util/yaml/decoder.go | 81 +- vendor/k8s.io/kubernetes/pkg/version/base.go | 10 +- vendor/k8s.io/kubernetes/pkg/version/doc.go | 2 +- .../k8s.io/kubernetes/pkg/version/semver.go | 2 +- .../k8s.io/kubernetes/pkg/version/version.go | 18 +- vendor/k8s.io/kubernetes/pkg/watch/doc.go | 2 +- vendor/k8s.io/kubernetes/pkg/watch/filter.go | 2 +- vendor/k8s.io/kubernetes/pkg/watch/mux.go | 2 +- .../kubernetes/pkg/watch/streamwatcher.go | 2 +- vendor/k8s.io/kubernetes/pkg/watch/until.go | 2 +- .../kubernetes/pkg/watch/versioned/decoder.go | 2 +- .../kubernetes/pkg/watch/versioned/encoder.go | 2 +- .../pkg/watch/versioned/generated.pb.go | 56 +- .../pkg/watch/versioned/generated.proto | 2 +- .../pkg/watch/versioned/register.go | 2 +- .../kubernetes/pkg/watch/versioned/types.go | 2 +- vendor/k8s.io/kubernetes/pkg/watch/watch.go | 2 +- .../plugin/pkg/client/auth/gcp/gcp.go | 15 +- .../plugin/pkg/client/auth/oidc/oidc.go | 4 +- .../plugin/pkg/client/auth/plugins.go | 2 +- .../forked/{ => golang}/json/fields.go | 0 .../third_party/forked/golang/netutil/addr.go | 27 + .../forked/golang/reflect/deep_equal.go | 388 + .../third_party/forked/golang/reflect/type.go | 91 + .../{ => forked}/golang/template/exec.go | 0 .../{ => forked}/golang/template/funcs.go | 0 .../third_party/forked/reflect/LICENSE | 27 - 1786 files changed, 424709 insertions(+), 33395 deletions(-) create mode 100644 vendor/bitbucket.org/ww/goautoneg/Makefile create mode 100644 vendor/bitbucket.org/ww/goautoneg/README.txt create mode 100644 vendor/bitbucket.org/ww/goautoneg/autoneg.go create mode 100644 vendor/github.com/Azure/go-ansiterm/LICENSE create mode 100644 vendor/github.com/Azure/go-ansiterm/README.md create mode 100644 vendor/github.com/Azure/go-ansiterm/constants.go create mode 100644 vendor/github.com/Azure/go-ansiterm/context.go create mode 100644 vendor/github.com/Azure/go-ansiterm/csi_entry_state.go create mode 100644 vendor/github.com/Azure/go-ansiterm/csi_param_state.go create mode 100644 vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go create mode 100644 vendor/github.com/Azure/go-ansiterm/escape_state.go create mode 100644 vendor/github.com/Azure/go-ansiterm/event_handler.go create mode 100644 vendor/github.com/Azure/go-ansiterm/ground_state.go create mode 100644 vendor/github.com/Azure/go-ansiterm/osc_string_state.go create mode 100644 vendor/github.com/Azure/go-ansiterm/parser.go create mode 100644 vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go create mode 100644 vendor/github.com/Azure/go-ansiterm/parser_actions.go create mode 100644 vendor/github.com/Azure/go-ansiterm/states.go create mode 100644 vendor/github.com/Azure/go-ansiterm/utilities.go create mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/ansi.go create mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/api.go create mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/attr_translation.go create mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go create mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/erase_helpers.go create mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go create mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/utilities.go create mode 100644 vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go create mode 100644 vendor/github.com/MakeNowJust/heredoc/LICENSE create mode 100644 vendor/github.com/MakeNowJust/heredoc/README.md create mode 100644 vendor/github.com/MakeNowJust/heredoc/heredoc.go create mode 100644 vendor/github.com/coreos/etcd/LICENSE create mode 100644 vendor/github.com/coreos/etcd/NOTICE create mode 100644 vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go create mode 100644 vendor/github.com/coreos/etcd/auth/authpb/auth.proto create mode 100644 vendor/github.com/coreos/etcd/client/README.md create mode 100644 vendor/github.com/coreos/etcd/client/auth_role.go create mode 100644 vendor/github.com/coreos/etcd/client/auth_user.go create mode 100644 vendor/github.com/coreos/etcd/client/cancelreq.go create mode 100644 vendor/github.com/coreos/etcd/client/client.go create mode 100644 vendor/github.com/coreos/etcd/client/cluster_error.go create mode 100644 vendor/github.com/coreos/etcd/client/curl.go create mode 100644 vendor/github.com/coreos/etcd/client/discover.go create mode 100644 vendor/github.com/coreos/etcd/client/doc.go create mode 100644 vendor/github.com/coreos/etcd/client/keys.generated.go create mode 100644 vendor/github.com/coreos/etcd/client/keys.go create mode 100644 vendor/github.com/coreos/etcd/client/members.go create mode 100644 vendor/github.com/coreos/etcd/client/srv.go create mode 100644 vendor/github.com/coreos/etcd/client/util.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/README.md create mode 100644 vendor/github.com/coreos/etcd/clientv3/auth.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/balancer.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/client.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/cluster.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/compact_op.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/compare.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/config.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/doc.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/kv.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/lease.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/logger.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/maintenance.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/op.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/retry.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/sort.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/txn.go create mode 100644 vendor/github.com/coreos/etcd/clientv3/watch.go create mode 100644 vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go create mode 100644 vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go create mode 100644 vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go create mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go create mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.proto create mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go create mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.proto create mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go create mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.gw.go create mode 100644 vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.proto create mode 100644 vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go create mode 100644 vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.proto create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/fileutil.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/lock.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/lock_flock.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/lock_linux.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/lock_plan9.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/lock_solaris.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/lock_unix.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/lock_windows.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/preallocate.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_darwin.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_unix.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_unsupported.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/purge.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/sync.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/sync_darwin.go create mode 100644 vendor/github.com/coreos/etcd/pkg/fileutil/sync_linux.go create mode 100644 vendor/github.com/coreos/etcd/pkg/pathutil/path.go create mode 100644 vendor/github.com/coreos/etcd/pkg/tlsutil/doc.go create mode 100644 vendor/github.com/coreos/etcd/pkg/tlsutil/tlsutil.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/doc.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/keepalive_listener.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/limit_listen.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/listener.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/timeout_conn.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/timeout_dialer.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/timeout_listener.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/timeout_transport.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/tls.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/transport.go create mode 100644 vendor/github.com/coreos/etcd/pkg/transport/unix_listener.go create mode 100644 vendor/github.com/coreos/etcd/pkg/types/doc.go create mode 100644 vendor/github.com/coreos/etcd/pkg/types/id.go create mode 100644 vendor/github.com/coreos/etcd/pkg/types/set.go create mode 100644 vendor/github.com/coreos/etcd/pkg/types/slice.go create mode 100644 vendor/github.com/coreos/etcd/pkg/types/urls.go create mode 100644 vendor/github.com/coreos/etcd/pkg/types/urlsmap.go create mode 100644 vendor/github.com/dgrijalva/jwt-go/.travis.yml create mode 100644 vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md create mode 100644 vendor/github.com/dgrijalva/jwt-go/claims.go create mode 100644 vendor/github.com/dgrijalva/jwt-go/ecdsa.go create mode 100644 vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go delete mode 100644 vendor/github.com/dgrijalva/jwt-go/jwt.go create mode 100644 vendor/github.com/dgrijalva/jwt-go/map_claims.go create mode 100644 vendor/github.com/dgrijalva/jwt-go/none.go create mode 100644 vendor/github.com/dgrijalva/jwt-go/parser.go create mode 100644 vendor/github.com/dgrijalva/jwt-go/rsa_pss.go create mode 100644 vendor/github.com/dgrijalva/jwt-go/token.go create mode 100644 vendor/github.com/docker/distribution/Jenkinsfile create mode 100644 vendor/github.com/docker/docker/pkg/system/chtimes.go create mode 100644 vendor/github.com/docker/docker/pkg/system/chtimes_unix.go create mode 100644 vendor/github.com/docker/docker/pkg/system/chtimes_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/errors.go create mode 100644 vendor/github.com/docker/docker/pkg/system/events_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/filesys.go create mode 100644 vendor/github.com/docker/docker/pkg/system/filesys_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/lstat.go create mode 100644 vendor/github.com/docker/docker/pkg/system/lstat_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/meminfo.go create mode 100644 vendor/github.com/docker/docker/pkg/system/meminfo_linux.go create mode 100644 vendor/github.com/docker/docker/pkg/system/meminfo_solaris.go create mode 100644 vendor/github.com/docker/docker/pkg/system/meminfo_unsupported.go create mode 100644 vendor/github.com/docker/docker/pkg/system/meminfo_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/mknod.go create mode 100644 vendor/github.com/docker/docker/pkg/system/mknod_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/path_unix.go create mode 100644 vendor/github.com/docker/docker/pkg/system/path_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/stat.go create mode 100644 vendor/github.com/docker/docker/pkg/system/stat_darwin.go create mode 100644 vendor/github.com/docker/docker/pkg/system/stat_freebsd.go create mode 100644 vendor/github.com/docker/docker/pkg/system/stat_linux.go create mode 100644 vendor/github.com/docker/docker/pkg/system/stat_openbsd.go create mode 100644 vendor/github.com/docker/docker/pkg/system/stat_solaris.go create mode 100644 vendor/github.com/docker/docker/pkg/system/stat_unsupported.go create mode 100644 vendor/github.com/docker/docker/pkg/system/stat_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/syscall_unix.go create mode 100644 vendor/github.com/docker/docker/pkg/system/syscall_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/umask.go create mode 100644 vendor/github.com/docker/docker/pkg/system/umask_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/system/utimes_freebsd.go create mode 100644 vendor/github.com/docker/docker/pkg/system/utimes_linux.go create mode 100644 vendor/github.com/docker/docker/pkg/system/utimes_unsupported.go create mode 100644 vendor/github.com/docker/docker/pkg/system/xattrs_linux.go create mode 100644 vendor/github.com/docker/docker/pkg/system/xattrs_unsupported.go create mode 100644 vendor/github.com/docker/docker/pkg/term/ascii.go create mode 100644 vendor/github.com/docker/docker/pkg/term/tc_linux_cgo.go create mode 100644 vendor/github.com/docker/docker/pkg/term/tc_other.go create mode 100644 vendor/github.com/docker/docker/pkg/term/tc_solaris_cgo.go create mode 100644 vendor/github.com/docker/docker/pkg/term/term.go create mode 100644 vendor/github.com/docker/docker/pkg/term/term_solaris.go create mode 100644 vendor/github.com/docker/docker/pkg/term/term_unix.go create mode 100644 vendor/github.com/docker/docker/pkg/term/term_windows.go create mode 100644 vendor/github.com/docker/docker/pkg/term/termios_darwin.go create mode 100644 vendor/github.com/docker/docker/pkg/term/termios_freebsd.go create mode 100644 vendor/github.com/docker/docker/pkg/term/termios_linux.go create mode 100644 vendor/github.com/docker/docker/pkg/term/termios_openbsd.go create mode 100644 vendor/github.com/docker/docker/pkg/term/windows/ansi_reader.go create mode 100644 vendor/github.com/docker/docker/pkg/term/windows/ansi_writer.go create mode 100644 vendor/github.com/docker/docker/pkg/term/windows/console.go create mode 100644 vendor/github.com/docker/docker/pkg/term/windows/windows.go rename vendor/github.com/docker/go-units/{LICENSE => LICENSE.code} (100%) create mode 100644 vendor/github.com/docker/go-units/LICENSE.docs create mode 100644 vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go create mode 100644 vendor/github.com/golang/protobuf/jsonpb/jsonpb.go create mode 100644 vendor/github.com/gonum/blas/.travis.yml create mode 100644 vendor/github.com/gonum/blas/README.md create mode 100644 vendor/github.com/gonum/blas/blas.go create mode 100644 vendor/github.com/gonum/blas/blas64/blas64.go create mode 100644 vendor/github.com/gonum/blas/native/dgemm.go create mode 100644 vendor/github.com/gonum/blas/native/doc.go create mode 100644 vendor/github.com/gonum/blas/native/general_double.go create mode 100644 vendor/github.com/gonum/blas/native/general_single.go create mode 100644 vendor/github.com/gonum/blas/native/internal/math32/math.go create mode 100644 vendor/github.com/gonum/blas/native/internal/math32/sqrt.go create mode 100644 vendor/github.com/gonum/blas/native/internal/math32/sqrt_amd64.go create mode 100644 vendor/github.com/gonum/blas/native/internal/math32/sqrt_amd64.s create mode 100644 vendor/github.com/gonum/blas/native/level1double.go create mode 100644 vendor/github.com/gonum/blas/native/level1double_ddot.go create mode 100644 vendor/github.com/gonum/blas/native/level1single.go create mode 100644 vendor/github.com/gonum/blas/native/level1single_dsdot.go create mode 100644 vendor/github.com/gonum/blas/native/level1single_sdot.go create mode 100644 vendor/github.com/gonum/blas/native/level1single_sdsdot.go create mode 100644 vendor/github.com/gonum/blas/native/level2double.go create mode 100644 vendor/github.com/gonum/blas/native/level2single.go create mode 100644 vendor/github.com/gonum/blas/native/level3double.go create mode 100644 vendor/github.com/gonum/blas/native/level3single.go create mode 100644 vendor/github.com/gonum/blas/native/native.go create mode 100644 vendor/github.com/gonum/blas/native/sgemm.go create mode 100755 vendor/github.com/gonum/blas/native/single_precision create mode 100644 vendor/github.com/gonum/graph/.gitignore create mode 100644 vendor/github.com/gonum/graph/.travis.yml create mode 100644 vendor/github.com/gonum/graph/README.md create mode 100644 vendor/github.com/gonum/graph/concrete/concrete.go create mode 100644 vendor/github.com/gonum/graph/concrete/dense_directed_matrix.go create mode 100644 vendor/github.com/gonum/graph/concrete/dense_undirected_matrix.go create mode 100644 vendor/github.com/gonum/graph/concrete/directed.go create mode 100644 vendor/github.com/gonum/graph/concrete/undirected.go create mode 100644 vendor/github.com/gonum/graph/concrete/util.go create mode 100644 vendor/github.com/gonum/graph/doc.go create mode 100644 vendor/github.com/gonum/graph/encoding/dot/dot.go create mode 100644 vendor/github.com/gonum/graph/graph.go create mode 100644 vendor/github.com/gonum/graph/internal/linear.go create mode 100644 vendor/github.com/gonum/graph/internal/set.go create mode 100644 vendor/github.com/gonum/graph/internal/sort.go create mode 100644 vendor/github.com/gonum/graph/path/a_star.go create mode 100644 vendor/github.com/gonum/graph/path/bellman_ford_moore.go create mode 100644 vendor/github.com/gonum/graph/path/control_flow.go create mode 100644 vendor/github.com/gonum/graph/path/dijkstra.go create mode 100644 vendor/github.com/gonum/graph/path/disjoint.go create mode 100644 vendor/github.com/gonum/graph/path/floydwarshall.go create mode 100644 vendor/github.com/gonum/graph/path/johnson_apsp.go create mode 100644 vendor/github.com/gonum/graph/path/shortest.go create mode 100644 vendor/github.com/gonum/graph/path/spanning_tree.go create mode 100644 vendor/github.com/gonum/graph/topo/bron_kerbosch.go create mode 100644 vendor/github.com/gonum/graph/topo/johnson_cycles.go create mode 100644 vendor/github.com/gonum/graph/topo/non_tomita_choice.go create mode 100644 vendor/github.com/gonum/graph/topo/tarjan.go create mode 100644 vendor/github.com/gonum/graph/topo/tomita_choice.go create mode 100644 vendor/github.com/gonum/graph/topo/topo.go create mode 100644 vendor/github.com/gonum/graph/traverse/traverse.go create mode 100644 vendor/github.com/gonum/internal/asm/caxpy.go create mode 100644 vendor/github.com/gonum/internal/asm/cdotc.go create mode 100644 vendor/github.com/gonum/internal/asm/cdotu.go create mode 100755 vendor/github.com/gonum/internal/asm/complex create mode 100644 vendor/github.com/gonum/internal/asm/conj.go create mode 100644 vendor/github.com/gonum/internal/asm/daxpy.go create mode 100644 vendor/github.com/gonum/internal/asm/daxpy_amd64.go create mode 100644 vendor/github.com/gonum/internal/asm/daxpy_amd64.s create mode 100644 vendor/github.com/gonum/internal/asm/ddot.go create mode 100644 vendor/github.com/gonum/internal/asm/ddot_amd64.go create mode 100644 vendor/github.com/gonum/internal/asm/ddot_amd64.s create mode 100644 vendor/github.com/gonum/internal/asm/dsdot.go create mode 100644 vendor/github.com/gonum/internal/asm/generate.go create mode 100644 vendor/github.com/gonum/internal/asm/saxpy.go create mode 100644 vendor/github.com/gonum/internal/asm/sdot.go create mode 100755 vendor/github.com/gonum/internal/asm/single_precision create mode 100644 vendor/github.com/gonum/internal/asm/zaxpy.go create mode 100644 vendor/github.com/gonum/internal/asm/zdotc.go create mode 100644 vendor/github.com/gonum/internal/asm/zdotu.go create mode 100644 vendor/github.com/gonum/lapack/.gitignore create mode 100644 vendor/github.com/gonum/lapack/.travis.yml create mode 100644 vendor/github.com/gonum/lapack/README.md create mode 100644 vendor/github.com/gonum/lapack/lapack.go create mode 100644 vendor/github.com/gonum/lapack/lapack64/lapack64.go create mode 100644 vendor/github.com/gonum/lapack/native/dgelq2.go create mode 100644 vendor/github.com/gonum/lapack/native/dgelqf.go create mode 100644 vendor/github.com/gonum/lapack/native/dgels.go create mode 100644 vendor/github.com/gonum/lapack/native/dgeqr2.go create mode 100644 vendor/github.com/gonum/lapack/native/dgeqrf.go create mode 100644 vendor/github.com/gonum/lapack/native/dlange.go create mode 100644 vendor/github.com/gonum/lapack/native/dlapy2.go create mode 100644 vendor/github.com/gonum/lapack/native/dlarf.go create mode 100644 vendor/github.com/gonum/lapack/native/dlarfb.go create mode 100644 vendor/github.com/gonum/lapack/native/dlarfg.go create mode 100644 vendor/github.com/gonum/lapack/native/dlarft.go create mode 100644 vendor/github.com/gonum/lapack/native/dlascl.go create mode 100644 vendor/github.com/gonum/lapack/native/dlaset.go create mode 100644 vendor/github.com/gonum/lapack/native/dlassq.go create mode 100644 vendor/github.com/gonum/lapack/native/doc.go create mode 100644 vendor/github.com/gonum/lapack/native/dorm2r.go create mode 100644 vendor/github.com/gonum/lapack/native/dorml2.go create mode 100644 vendor/github.com/gonum/lapack/native/dormlq.go create mode 100644 vendor/github.com/gonum/lapack/native/dormqr.go create mode 100644 vendor/github.com/gonum/lapack/native/dpotf2.go create mode 100644 vendor/github.com/gonum/lapack/native/dpotrf.go create mode 100644 vendor/github.com/gonum/lapack/native/dtrtrs.go create mode 100644 vendor/github.com/gonum/lapack/native/general.go create mode 100644 vendor/github.com/gonum/lapack/native/iladlc.go create mode 100644 vendor/github.com/gonum/lapack/native/iladlr.go create mode 100644 vendor/github.com/gonum/lapack/native/ilaenv.go create mode 100644 vendor/github.com/gonum/matrix/mat64/cholesky.go create mode 100644 vendor/github.com/gonum/matrix/mat64/dense.go create mode 100644 vendor/github.com/gonum/matrix/mat64/dense_arithmetic.go create mode 100644 vendor/github.com/gonum/matrix/mat64/eigen.go create mode 100644 vendor/github.com/gonum/matrix/mat64/format.go create mode 100644 vendor/github.com/gonum/matrix/mat64/index_bound_checks.go create mode 100644 vendor/github.com/gonum/matrix/mat64/index_no_bound_checks.go create mode 100644 vendor/github.com/gonum/matrix/mat64/inner.go create mode 100644 vendor/github.com/gonum/matrix/mat64/io.go create mode 100644 vendor/github.com/gonum/matrix/mat64/lq.go create mode 100644 vendor/github.com/gonum/matrix/mat64/lu.go create mode 100644 vendor/github.com/gonum/matrix/mat64/matrix.go create mode 100644 vendor/github.com/gonum/matrix/mat64/pool.go create mode 100644 vendor/github.com/gonum/matrix/mat64/qr.go create mode 100644 vendor/github.com/gonum/matrix/mat64/svd.go create mode 100644 vendor/github.com/gonum/matrix/mat64/symmetric.go create mode 100644 vendor/github.com/gonum/matrix/mat64/triangular.go create mode 100644 vendor/github.com/gonum/matrix/mat64/vector.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/context.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/convert.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/doc.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/errors.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/handler.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/internal/stream_chunk.pb.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/internal/stream_chunk.proto create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_json.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_jsonpb.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshaler.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshaler_registry.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/mux.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/pattern.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/proto2_convert.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/query.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/doc.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/pattern.go create mode 100644 vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/trie.go delete mode 100644 vendor/github.com/opencontainers/runc/NOTICE delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups_unsupported.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/apply_raw.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/blkio.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpu.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuacct.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuset.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/devices.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/freezer.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/fs_unsupported.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/hugetlb.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/memory.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/name.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_cls.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_prio.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/perf_event.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/pids.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/utils.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/stats.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/blkio_device.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unix.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unsupported.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_windows.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/config.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/config_unix.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/device.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/device_defaults.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/hugepage_limit.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/interface_priority_map.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/mount.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall_unsupported.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unix.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unsupported.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/configs/network.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/linux.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/proc.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/setns_linux.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_386.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_arm.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig_notcgo.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/unsupported.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/system/xattrs_linux.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go delete mode 100644 vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/graph.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/graphview/dc_pipeline.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/graphview/image_pipeline.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/graphview/intset.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/graphview/petset.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/graphview/pod.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/graphview/rc.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/graphview/service_group.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/interfaces.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/graph/types.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/hpa.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/pod.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/podspec.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/rc.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/kubegraph/edges.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/kubegraph/nodes/nodes.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/kubegraph/nodes/types.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/latest/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/latest/latest.go create mode 100644 vendor/github.com/openshift/origin/pkg/api/restmapper/discovery.go create mode 100644 vendor/github.com/openshift/origin/pkg/auth/api/types.go create mode 100644 vendor/github.com/openshift/origin/pkg/auth/authenticator/interfaces.go create mode 100644 vendor/github.com/openshift/origin/pkg/auth/authenticator/request/x509request/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/auth/authenticator/request/x509request/x509.go delete mode 100644 vendor/github.com/openshift/origin/pkg/authorization/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/authorization/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/authorization/api/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/authorization/reaper/cluster_role.go create mode 100644 vendor/github.com/openshift/origin/pkg/authorization/reaper/role.go delete mode 100644 vendor/github.com/openshift/origin/pkg/build/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/api/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/client/clients.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/cmd/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/cmd/reaper.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/graph/analysis/bc.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/graph/edges.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/graph/helpers.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/graph/nodes/nodes.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/graph/nodes/types.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/util/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/build/util/util.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/appliedclusterresourcequota.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/buildconfigs.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/buildlogs.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/builds.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/client.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/clusteresourcequota.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/clusternetwork.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/clusterpolicies.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/clusterpolicybindings.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/clusterrolebindings.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/clusterroles.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/deploymentconfigs.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/deploymentlogs.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/discovery.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/egressnetworkpolicy.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/groups.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/hostsubnets.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/identities.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/images.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/imagesignatures.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/imagestreamimages.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/imagestreammappings.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/imagestreams.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/imagestreamsecrets.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/imagestreamtags.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/localresourceaccessreview.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/localsubjectaccessreview.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/mapper.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/netnamespaces.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/oauthaccesstoken.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/oauthauthorizetoken.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/oauthclient.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/oauthclientauthorization.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/policies.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/policybindings.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/projectrequests.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/projects.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/resourceaccessreview.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/role_bindings.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/roles.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/routes.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/scale.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/selfsubjectrulesreviews.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/subjectaccessreview.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/templateconfigs.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/templates.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/useridentitymappings.go create mode 100644 vendor/github.com/openshift/origin/pkg/client/users.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/config/helpers.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/config/loader.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/config/smart_merge.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/describe/chaindescriber.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/describe/deployments.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/describe/describer.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/describe/helpers.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/describe/printer.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/cli/describe/projectstatus.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/flagtypes/addr.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/flagtypes/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/flagtypes/glog.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/flagtypes/net.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/cached_discovery.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/clientcmd.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/clientconfig.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/errors.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/factory.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/negotiate.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/shortcut_restmapper.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/cmd.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/crypto.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/env.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/filepath.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/ip.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/log.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/mux.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/net.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/product.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/route.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/sibling.go create mode 100644 vendor/github.com/openshift/origin/pkg/cmd/util/terminal.go delete mode 100644 vendor/github.com/openshift/origin/pkg/deploy/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/api/doc.go delete mode 100644 vendor/github.com/openshift/origin/pkg/deploy/api/v1/deep_copy_generated.go rename vendor/github.com/openshift/origin/pkg/deploy/api/v1/{conversion_generated.go => zz_generated.conversion.go} (70%) create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/api/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/api/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/cmd/delete.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/cmd/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/cmd/generate.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/cmd/history.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/cmd/rollback.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/cmd/scale.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/graph/analysis/dc.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/graph/analysis/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/graph/edges.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/graph/helpers.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/graph/nodes/nodes.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/graph/nodes/types.go create mode 100644 vendor/github.com/openshift/origin/pkg/deploy/util/util.go delete mode 100644 vendor/github.com/openshift/origin/pkg/image/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/image/api/doc.go delete mode 100644 vendor/github.com/openshift/origin/pkg/image/api/v1/deep_copy_generated.go rename vendor/github.com/openshift/origin/pkg/image/api/v1/{conversion_generated.go => zz_generated.conversion.go} (65%) create mode 100644 vendor/github.com/openshift/origin/pkg/image/api/v1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/image/api/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/image/graph/edges.go create mode 100644 vendor/github.com/openshift/origin/pkg/image/graph/nodes/nodes.go create mode 100644 vendor/github.com/openshift/origin/pkg/image/graph/nodes/types.go delete mode 100644 vendor/github.com/openshift/origin/pkg/oauth/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/oauth/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/oauth/api/zz_generated.deepcopy.go delete mode 100644 vendor/github.com/openshift/origin/pkg/project/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/project/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/project/api/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/quota/api/convert.go create mode 100644 vendor/github.com/openshift/origin/pkg/quota/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/quota/api/fields.go create mode 100644 vendor/github.com/openshift/origin/pkg/quota/api/helpers.go create mode 100644 vendor/github.com/openshift/origin/pkg/quota/api/register.go create mode 100644 vendor/github.com/openshift/origin/pkg/quota/api/types.go create mode 100644 vendor/github.com/openshift/origin/pkg/quota/api/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/quota/util/helper.go delete mode 100644 vendor/github.com/openshift/origin/pkg/route/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/api/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/generator/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/generator/generate.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/graph/analysis/analysis.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/graph/analysis/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/graph/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/graph/edges.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/graph/nodes/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/graph/nodes/nodes.go create mode 100644 vendor/github.com/openshift/origin/pkg/route/graph/nodes/types.go delete mode 100644 vendor/github.com/openshift/origin/pkg/sdn/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/sdn/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/sdn/api/netid.go create mode 100644 vendor/github.com/openshift/origin/pkg/sdn/api/zz_generated.deepcopy.go delete mode 100644 vendor/github.com/openshift/origin/pkg/security/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/security/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/security/api/zz_generated.deepcopy.go delete mode 100644 vendor/github.com/openshift/origin/pkg/template/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/template/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/template/api/zz_generated.deepcopy.go delete mode 100644 vendor/github.com/openshift/origin/pkg/user/api/deep_copy_generated.go create mode 100644 vendor/github.com/openshift/origin/pkg/user/api/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/user/api/zz_generated.deepcopy.go create mode 100644 vendor/github.com/openshift/origin/pkg/user/reaper/bindings.go create mode 100644 vendor/github.com/openshift/origin/pkg/user/reaper/group.go create mode 100644 vendor/github.com/openshift/origin/pkg/user/reaper/user.go create mode 100644 vendor/github.com/openshift/origin/pkg/util/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/util/dot/dot.go create mode 100644 vendor/github.com/openshift/origin/pkg/util/errors/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/util/errors/errors.go create mode 100644 vendor/github.com/openshift/origin/pkg/util/etcd.go create mode 100644 vendor/github.com/openshift/origin/pkg/util/labels.go create mode 100644 vendor/github.com/openshift/origin/pkg/util/parallel/parallel.go create mode 100644 vendor/github.com/openshift/origin/pkg/util/strings.go create mode 100644 vendor/github.com/openshift/origin/pkg/version/doc.go create mode 100644 vendor/github.com/openshift/origin/pkg/version/version.go create mode 100644 vendor/github.com/prometheus/procfs/Makefile create mode 100644 vendor/github.com/prometheus/procfs/ipvs.go create mode 100644 vendor/github.com/prometheus/procfs/mdstat.go create mode 100644 vendor/github.com/prometheus/procfs/proc_io.go delete mode 100644 vendor/golang.org/x/net/http2/go17_not18.go delete mode 100644 vendor/golang.org/x/net/http2/go18.go delete mode 100644 vendor/golang.org/x/net/idna/idna.go delete mode 100644 vendor/golang.org/x/net/idna/punycode.go create mode 100644 vendor/golang.org/x/net/internal/timeseries/timeseries.go create mode 100644 vendor/golang.org/x/net/trace/events.go create mode 100644 vendor/golang.org/x/net/trace/histogram.go create mode 100644 vendor/golang.org/x/net/trace/trace.go create mode 100644 vendor/google.golang.org/grpc/.travis.yml create mode 100644 vendor/google.golang.org/grpc/CONTRIBUTING.md rename vendor/{k8s.io/kubernetes/third_party/forked/json => google.golang.org/grpc}/LICENSE (83%) create mode 100644 vendor/google.golang.org/grpc/Makefile create mode 100644 vendor/google.golang.org/grpc/PATENTS create mode 100644 vendor/google.golang.org/grpc/README.md create mode 100644 vendor/google.golang.org/grpc/backoff.go create mode 100644 vendor/google.golang.org/grpc/balancer.go create mode 100644 vendor/google.golang.org/grpc/call.go create mode 100644 vendor/google.golang.org/grpc/clientconn.go create mode 100755 vendor/google.golang.org/grpc/codegen.sh create mode 100644 vendor/google.golang.org/grpc/codes/code_string.go create mode 100644 vendor/google.golang.org/grpc/codes/codes.go create mode 100755 vendor/google.golang.org/grpc/coverage.sh create mode 100644 vendor/google.golang.org/grpc/credentials/credentials.go create mode 100644 vendor/google.golang.org/grpc/credentials/credentials_util_go17.go create mode 100644 vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go create mode 100644 vendor/google.golang.org/grpc/doc.go create mode 100644 vendor/google.golang.org/grpc/grpclog/logger.go create mode 100644 vendor/google.golang.org/grpc/interceptor.go create mode 100644 vendor/google.golang.org/grpc/internal/internal.go create mode 100644 vendor/google.golang.org/grpc/metadata/metadata.go create mode 100644 vendor/google.golang.org/grpc/naming/naming.go create mode 100644 vendor/google.golang.org/grpc/peer/peer.go create mode 100644 vendor/google.golang.org/grpc/rpc_util.go create mode 100644 vendor/google.golang.org/grpc/server.go create mode 100644 vendor/google.golang.org/grpc/stream.go create mode 100644 vendor/google.golang.org/grpc/trace.go create mode 100644 vendor/google.golang.org/grpc/transport/control.go create mode 100644 vendor/google.golang.org/grpc/transport/go16.go create mode 100644 vendor/google.golang.org/grpc/transport/go17.go create mode 100644 vendor/google.golang.org/grpc/transport/handler_server.go create mode 100644 vendor/google.golang.org/grpc/transport/http2_client.go create mode 100644 vendor/google.golang.org/grpc/transport/http2_server.go create mode 100644 vendor/google.golang.org/grpc/transport/http_util.go create mode 100644 vendor/google.golang.org/grpc/transport/pre_go16.go create mode 100644 vendor/google.golang.org/grpc/transport/transport.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/OWNERS create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/context.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/conversion.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/defaults.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/endpoints/util.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/errors/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/errors/errors.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/field_constants.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/generate.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/helpers.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/mapper.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/errors.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/help.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/interfaces.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/meta.go rename vendor/k8s.io/{kubernetes/pkg/util/intstr/deep_copy_generated.go => client-go/1.4/pkg/api/meta/metatypes/types.go} (55%) create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/multirestmapper.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/priority.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/restmapper.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/meta/unstructured.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/node_example.json create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/pod/util.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/ref.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/register.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/replication_controller_example.json create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/requestcontext.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource/amount.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource/generated.pb.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource/generated.proto create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource/math.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource/quantity.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource/quantity_proto.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource/scale_int.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource/suffix.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/resource_helpers.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/service/annotations.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/service/util.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/types.generated.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/types.go rename vendor/k8s.io/{kubernetes/pkg/apis/authentication.k8s.io/v1beta1 => client-go/1.4/pkg/api/unversioned}/doc.go (84%) create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/duration.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/generated.pb.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/generated.proto create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/group_version.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/helpers.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/meta.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/register.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/time.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/time_proto.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/types.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/validation/validation.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/well_known_labels.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/unversioned/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/util/group_version.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/conversion.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/defaults.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/generated.pb.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/generated.proto create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/meta.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/ref.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/register.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/types.generated.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/types.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/types_swagger_doc_generated.go rename vendor/k8s.io/{kubernetes/pkg/api/v1/conversion_generated.go => client-go/1.4/pkg/api/v1/zz_generated.conversion.go} (94%) create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/validation/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/validation/events.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/validation/name.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/validation/schema.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/validation/validation.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/api/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apimachinery/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apimachinery/registered/registered.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apimachinery/types.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/register.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/types.generated.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/types.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/batch/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/batch/register.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/batch/types.generated.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/batch/types.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/batch/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/extensions/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/extensions/helpers.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/extensions/register.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/extensions/types.generated.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/extensions/types.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/apis/extensions/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/auth/user/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/auth/user/user.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/capabilities/capabilities.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/capabilities/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/conversion/OWNERS create mode 100644 vendor/k8s.io/client-go/1.4/pkg/conversion/cloner.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/conversion/converter.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/conversion/deep_equal.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/conversion/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/conversion/helper.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/conversion/queryparams/convert.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/conversion/queryparams/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/fields/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/fields/fields.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/fields/requirements.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/fields/selector.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/labels/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/labels/labels.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/labels/selector.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/OWNERS create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/codec.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/codec_check.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/conversion.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/embedded.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/error.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/extension.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/generated.pb.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/generated.proto create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/helper.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/interfaces.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/register.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/scheme.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/scheme_builder.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/codec_factory.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/json/json.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/json/meta.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/negotiated_codec.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf/protobuf.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf_extension.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/recognizer/recognizer.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/streaming/streaming.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/versioning/versioning.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/swagger_doc_generator.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/types.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/types_proto.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/unstructured.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/runtime/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/security/apparmor/helpers.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/security/apparmor/validate.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/security/apparmor/validate_disabled.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/selection/operator.go rename vendor/k8s.io/{kubernetes/third_party/forked => client-go/1.4/pkg/third_party/forked/golang}/reflect/deep_equal.go (100%) create mode 100644 vendor/k8s.io/client-go/1.4/pkg/third_party/forked/golang/reflect/type.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/types/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/types/namespacedname.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/types/uid.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/types/unix_user_id.go rename vendor/k8s.io/{kubernetes/pkg/util => client-go/1.4/pkg/util/clock}/clock.go (98%) create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/config/config.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/config/configuration_map.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/config/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/config/feature_gate.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/crypto/crypto.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/errors/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/errors/errors.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/flowcontrol/backoff.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/flowcontrol/throttle.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/framer/framer.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/hash/hash.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/integer/integer.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/intstr/generated.pb.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/intstr/generated.proto create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/intstr/intstr.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/json/json.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/labels/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/labels/labels.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/net/http.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/net/interface.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/net/port_range.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/net/port_split.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/net/sets/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/net/sets/ipnet.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/net/util.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/parsers/parsers.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/rand/rand.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/runtime/runtime.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/sets/byte.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/sets/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/sets/empty.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/sets/int.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/sets/int64.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/sets/string.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/string_flag.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/template.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/trace.go rename vendor/k8s.io/{kubernetes/pkg/api/resource/deep_copy.go => client-go/1.4/pkg/util/umask.go} (61%) rename vendor/k8s.io/{kubernetes/pkg/util/resource_container_unsupported.go => client-go/1.4/pkg/util/umask_windows.go} (63%) create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/util.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/uuid/uuid.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/validation/field/errors.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/validation/field/path.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/validation/validation.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/wait/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/wait/wait.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/util/yaml/decoder.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/version/.gitattributes create mode 100644 vendor/k8s.io/client-go/1.4/pkg/version/base.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/version/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/version/semver.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/version/version.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/doc.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/filter.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/mux.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/streamwatcher.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/until.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/versioned/decoder.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/versioned/encoder.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/versioned/generated.pb.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/versioned/generated.proto create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/versioned/register.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/versioned/types.go create mode 100644 vendor/k8s.io/client-go/1.4/pkg/watch/watch.go create mode 100644 vendor/k8s.io/client-go/1.4/rest/client.go create mode 100644 vendor/k8s.io/client-go/1.4/rest/config.go create mode 100644 vendor/k8s.io/client-go/1.4/rest/plugin.go create mode 100644 vendor/k8s.io/client-go/1.4/rest/request.go create mode 100644 vendor/k8s.io/client-go/1.4/rest/transport.go create mode 100644 vendor/k8s.io/client-go/1.4/rest/url_utils.go create mode 100644 vendor/k8s.io/client-go/1.4/rest/urlbackoff.go create mode 100644 vendor/k8s.io/client-go/1.4/rest/versions.go create mode 100644 vendor/k8s.io/client-go/1.4/tools/clientcmd/api/helpers.go create mode 100644 vendor/k8s.io/client-go/1.4/tools/clientcmd/api/register.go create mode 100644 vendor/k8s.io/client-go/1.4/tools/clientcmd/api/types.go create mode 100644 vendor/k8s.io/client-go/1.4/tools/metrics/metrics.go create mode 100644 vendor/k8s.io/client-go/1.4/transport/cache.go create mode 100644 vendor/k8s.io/client-go/1.4/transport/config.go create mode 100644 vendor/k8s.io/client-go/1.4/transport/round_trippers.go create mode 100644 vendor/k8s.io/client-go/1.4/transport/transport.go rename vendor/{github.com/opencontainers/runc => k8s.io/client-go}/LICENSE (94%) delete mode 100644 vendor/k8s.io/kubernetes/federation/apis/federation/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/federation/apis/federation/doc.go delete mode 100644 vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/types_swagger_doc_generated.go rename vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/{conversion_generated.go => zz_generated.conversion.go} (97%) create mode 100644 vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/federation/apis/federation/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/event.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/namespace.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/namespace_expansion.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/secret.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/doc.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/extensions_client.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/generated_expansion.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/ingress.go create mode 100644 vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/replicaset.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/api/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/api/defaults.go create mode 100644 vendor/k8s.io/kubernetes/pkg/api/meta/unstructured.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/api/pod_example.json delete mode 100644 vendor/k8s.io/kubernetes/pkg/api/unversioned/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/api/unversioned/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/api/unversioned/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/api/v1/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/apps/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/apps/doc.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/deep_copy_generated.go rename vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/{conversion_generated.go => zz_generated.conversion.go} (93%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/apps/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/deep_copy_generated.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/conversion_generated.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication/doc.go rename vendor/k8s.io/kubernetes/pkg/apis/{authentication.k8s.io => authentication}/install/install.go (89%) rename vendor/k8s.io/kubernetes/pkg/apis/{authentication.k8s.io => authentication}/register.go (72%) rename vendor/k8s.io/kubernetes/pkg/apis/{authentication.k8s.io => authentication}/types.go (59%) rename vendor/k8s.io/kubernetes/pkg/apis/{authentication.k8s.io => authentication}/v1beta1/conversion.go (71%) rename vendor/k8s.io/kubernetes/pkg/apis/{authentication.k8s.io => authentication}/v1beta1/defaults.go (81%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.pb.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.proto rename vendor/k8s.io/kubernetes/pkg/apis/{authentication.k8s.io => authentication}/v1beta1/register.go (74%) rename vendor/k8s.io/kubernetes/pkg/apis/{authentication.k8s.io => authentication}/v1beta1/types.go (58%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/zz_generated.conversion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authentication/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authorization/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authorization/doc.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.pb.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.proto rename vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/{conversion_generated.go => zz_generated.conversion.go} (88%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/authorization/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/autoscaling/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/autoscaling/doc.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/deep_copy_generated.go rename vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/{conversion_generated.go => zz_generated.conversion.go} (97%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/autoscaling/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/batch/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/batch/doc.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/batch/v1/deep_copy_generated.go rename vendor/k8s.io/kubernetes/pkg/apis/batch/v1/{conversion_generated.go => zz_generated.conversion.go} (97%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/deep_copy_generated.go rename vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/{conversion_generated.go => zz_generated.conversion.go} (98%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/batch/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/install/install.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/register.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/types.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/conversion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.pb.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.proto create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/register.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/types.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/certificates/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/componentconfig/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/componentconfig/doc.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/conversion_generated.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/componentconfig/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/extensions/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/extensions/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/extensions/helpers.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/deep_copy_generated.go rename vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/{conversion_generated.go => zz_generated.conversion.go} (93%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/extensions/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/policy/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/policy/doc.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/deep_copy_generated.go rename vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/{conversion_generated.go => zz_generated.conversion.go} (78%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/rbac/deep_copy_generated.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/deep_copy_generated.go rename vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/{conversion_generated.go => zz_generated.conversion.go} (98%) create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/rbac/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/install/install.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/register.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/types.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.pb.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.proto create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/register.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/types.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.conversion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/apis/storage/zz_generated.deepcopy.go mode change 100644 => 100755 vendor/k8s.io/kubernetes/pkg/client/cache/store.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/authentication_client.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/generated_expansion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/tokenreview.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/tokenreview_expansion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/authorization_client.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/generated_expansion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/subjectaccessreview.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/subjectaccessreview_expansion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificates_client.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificatesigningrequest.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificatesigningrequest_expansion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/generated_expansion.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/job.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/generated_expansion.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/storage_client.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/storageclass.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/typed/discovery/restmapper.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/typed/discovery/unstructured.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/client.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/client_pool.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/dynamic_util.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/unversioned/authentication.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/unversioned/authorization.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/unversioned/certificates.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/unversioned/certificatesigningrequests.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/unversioned/storage.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/unversioned/storageclasses.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/unversioned/subjectaccessreview.go create mode 100644 vendor/k8s.io/kubernetes/pkg/client/unversioned/tokenreviews.go create mode 100644 vendor/k8s.io/kubernetes/pkg/controller/controller_ref_manager.go rename vendor/k8s.io/kubernetes/pkg/{util/deployment/deployment.go => controller/deployment/util/deployment_util.go} (52%) create mode 100644 vendor/k8s.io/kubernetes/pkg/controller/framework/informers/core.go create mode 100644 vendor/k8s.io/kubernetes/pkg/controller/framework/informers/factory.go create mode 100644 vendor/k8s.io/kubernetes/pkg/controller/replication/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/controller/replication/replication_controller.go create mode 100644 vendor/k8s.io/kubernetes/pkg/controller/replication/replication_controller_utils.go create mode 100644 vendor/k8s.io/kubernetes/pkg/fields/requirements.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubectl/deployment.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubectl/quota.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubectl/service_basic.go rename vendor/k8s.io/kubernetes/pkg/kubelet/qos/{util => }/qos.go (86%) create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/qos/types.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/types/constants.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/types/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/types/labels.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/types/types.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/runtime/deep_copy_generated.go create mode 100644 vendor/k8s.io/kubernetes/pkg/runtime/scheme_builder.go create mode 100644 vendor/k8s.io/kubernetes/pkg/runtime/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/kubernetes/pkg/security/apparmor/helpers.go create mode 100644 vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go create mode 100644 vendor/k8s.io/kubernetes/pkg/security/apparmor/validate_disabled.go create mode 100644 vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/selection/operator.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd/api_object_versioner.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd/etcd_helper.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd/etcd_watcher.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd/metrics/metrics.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd/util/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd/util/etcd_util.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd3/compact.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd3/event.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd3/store.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/etcd3/watcher.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/storagebackend/config.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/etcd2.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/etcd3.go create mode 100644 vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/factory.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/cache/cache.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/cache/lruexpirecache.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/certificates/csr.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/clock/clock.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/config/config.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/config/configuration_map.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/config/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/config/feature_gate.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/exec/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/exec/exec.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/exec/fake_exec.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/interrupt/interrupt.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/line_delimiter.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/logs.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/metrics/util.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/net/sets/README.md create mode 100644 vendor/k8s.io/kubernetes/pkg/util/net/sets/doc.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/resource_container_linux.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/runner.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/term/resize.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/term/resizeevents.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/term/resizeevents_windows.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/term/setsize.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/term/setsize_unsupported.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/term/term.go rename vendor/k8s.io/kubernetes/pkg/util/{ => uuid}/uuid.go (93%) create mode 100644 vendor/k8s.io/kubernetes/pkg/util/workqueue/default_rate_limiters.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/workqueue/delaying_queue.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/workqueue/doc.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/workqueue/metrics.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/workqueue/parallelizer.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/workqueue/queue.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/workqueue/rate_limitting_queue.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/workqueue/timed_queue.go rename vendor/k8s.io/kubernetes/third_party/forked/{ => golang}/json/fields.go (100%) create mode 100644 vendor/k8s.io/kubernetes/third_party/forked/golang/netutil/addr.go create mode 100644 vendor/k8s.io/kubernetes/third_party/forked/golang/reflect/deep_equal.go create mode 100644 vendor/k8s.io/kubernetes/third_party/forked/golang/reflect/type.go rename vendor/k8s.io/kubernetes/third_party/{ => forked}/golang/template/exec.go (100%) rename vendor/k8s.io/kubernetes/third_party/{ => forked}/golang/template/funcs.go (100%) delete mode 100644 vendor/k8s.io/kubernetes/third_party/forked/reflect/LICENSE diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index f1016143..fbfe8ba2 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -6,6 +6,23 @@ "./..." ], "Deps": [ + { + "ImportPath": "bitbucket.org/ww/goautoneg", + "Comment": "null-5", + "Rev": "'75cd24fc2f2c2a2088577d12123ddee5f54e0675'" + }, + { + "ImportPath": "github.com/Azure/go-ansiterm", + "Rev": "fa152c58bc15761d0200cb75fe958b89a9d4888e" + }, + { + "ImportPath": "github.com/Azure/go-ansiterm/winterm", + "Rev": "fa152c58bc15761d0200cb75fe958b89a9d4888e" + }, + { + "ImportPath": "github.com/MakeNowJust/heredoc", + "Rev": "1d91351acdc1cb2f2c995864674b754134b86ca7" + }, { "ImportPath": "github.com/Sirupsen/logrus", "Comment": "v0.10.0", @@ -20,6 +37,61 @@ "Comment": "v3.0.1", "Rev": "31b736133b98f26d5e078ec9eb591666edfd091f" }, + { + "ImportPath": "github.com/coreos/etcd/auth/authpb", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/client", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/clientv3", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/etcdserver/etcdserverpb", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/mvcc/mvccpb", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/fileutil", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/pathutil", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/tlsutil", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/transport", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, + { + "ImportPath": "github.com/coreos/etcd/pkg/types", + "Comment": "v3.0.6", + "Rev": "9efa00d1030d4bf62eb8e5ec130023aeb1b8e2d0" + }, { "ImportPath": "github.com/coreos/go-oidc/http", "Rev": "5cf2aa52da8c574d3aa4458f471ad6ae2240fe6b" @@ -47,23 +119,23 @@ }, { "ImportPath": "github.com/coreos/pkg/capnslog", - "Comment": "v2", - "Rev": "7f080b6c11ac2d2347c3cd7521e810207ea1a041" + "Comment": "v2-8-gfa29b1d", + "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" }, { "ImportPath": "github.com/coreos/pkg/health", - "Comment": "v2", - "Rev": "7f080b6c11ac2d2347c3cd7521e810207ea1a041" + "Comment": "v2-8-gfa29b1d", + "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" }, { "ImportPath": "github.com/coreos/pkg/httputil", - "Comment": "v2", - "Rev": "7f080b6c11ac2d2347c3cd7521e810207ea1a041" + "Comment": "v2-8-gfa29b1d", + "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" }, { "ImportPath": "github.com/coreos/pkg/timeutil", - "Comment": "v2", - "Rev": "7f080b6c11ac2d2347c3cd7521e810207ea1a041" + "Comment": "v2-8-gfa29b1d", + "Rev": "fa29b1d70f0beaddd4c7021607cc3c3be8ce94b8" }, { "ImportPath": "github.com/davecgh/go-spew/spew", @@ -71,48 +143,48 @@ }, { "ImportPath": "github.com/dgrijalva/jwt-go", - "Comment": "v2.2.0-23-g5ca8014", - "Rev": "5ca80149b9d3f8b863af0e2bb6742e608603bd99" + "Comment": "v3.0.0-4-g01aeca5", + "Rev": "01aeca54ebda6e0fbfafd0a524d234159c05ec20" }, { "ImportPath": "github.com/docker/distribution", - "Comment": "docs-v2.4.1-2016-06-28-72-g77b9d29", - "Rev": "77b9d2997abcded79a5314970fe69a44c93c25fb" + "Comment": "docs-v2.4.1-2016-06-28-136-g1921dde", + "Rev": "1921dde3f1e52bf7dac07a0a2fcd55b770e134c5" }, { "ImportPath": "github.com/docker/distribution/context", - "Comment": "docs-v2.4.1-2016-06-28-72-g77b9d29", - "Rev": "77b9d2997abcded79a5314970fe69a44c93c25fb" + "Comment": "docs-v2.4.1-2016-06-28-136-g1921dde", + "Rev": "1921dde3f1e52bf7dac07a0a2fcd55b770e134c5" }, { "ImportPath": "github.com/docker/distribution/digest", - "Comment": "docs-v2.4.1-2016-06-28-72-g77b9d29", - "Rev": "77b9d2997abcded79a5314970fe69a44c93c25fb" + "Comment": "docs-v2.4.1-2016-06-28-136-g1921dde", + "Rev": "1921dde3f1e52bf7dac07a0a2fcd55b770e134c5" }, { "ImportPath": "github.com/docker/distribution/manifest", - "Comment": "docs-v2.4.1-2016-06-28-72-g77b9d29", - "Rev": "77b9d2997abcded79a5314970fe69a44c93c25fb" + "Comment": "docs-v2.4.1-2016-06-28-136-g1921dde", + "Rev": "1921dde3f1e52bf7dac07a0a2fcd55b770e134c5" }, { "ImportPath": "github.com/docker/distribution/manifest/schema1", - "Comment": "docs-v2.4.1-2016-06-28-72-g77b9d29", - "Rev": "77b9d2997abcded79a5314970fe69a44c93c25fb" + "Comment": "docs-v2.4.1-2016-06-28-136-g1921dde", + "Rev": "1921dde3f1e52bf7dac07a0a2fcd55b770e134c5" }, { "ImportPath": "github.com/docker/distribution/manifest/schema2", - "Comment": "docs-v2.4.1-2016-06-28-72-g77b9d29", - "Rev": "77b9d2997abcded79a5314970fe69a44c93c25fb" + "Comment": "docs-v2.4.1-2016-06-28-136-g1921dde", + "Rev": "1921dde3f1e52bf7dac07a0a2fcd55b770e134c5" }, { "ImportPath": "github.com/docker/distribution/reference", - "Comment": "docs-v2.4.1-2016-06-28-72-g77b9d29", - "Rev": "77b9d2997abcded79a5314970fe69a44c93c25fb" + "Comment": "docs-v2.4.1-2016-06-28-136-g1921dde", + "Rev": "1921dde3f1e52bf7dac07a0a2fcd55b770e134c5" }, { "ImportPath": "github.com/docker/distribution/uuid", - "Comment": "docs-v2.4.1-2016-06-28-72-g77b9d29", - "Rev": "77b9d2997abcded79a5314970fe69a44c93c25fb" + "Comment": "docs-v2.4.1-2016-06-28-136-g1921dde", + "Rev": "1921dde3f1e52bf7dac07a0a2fcd55b770e134c5" }, { "ImportPath": "github.com/docker/docker/api/types", @@ -184,6 +256,21 @@ "Comment": "docs-v1.12.0-rc4-2016-07-15-1840-g601004e", "Rev": "601004e1a714d77d3a43e957b8ae8adbc867b280" }, + { + "ImportPath": "github.com/docker/docker/pkg/system", + "Comment": "docs-v1.12.0-rc4-2016-07-15-1840-g601004e", + "Rev": "601004e1a714d77d3a43e957b8ae8adbc867b280" + }, + { + "ImportPath": "github.com/docker/docker/pkg/term", + "Comment": "docs-v1.12.0-rc4-2016-07-15-1840-g601004e", + "Rev": "601004e1a714d77d3a43e957b8ae8adbc867b280" + }, + { + "ImportPath": "github.com/docker/docker/pkg/term/windows", + "Comment": "docs-v1.12.0-rc4-2016-07-15-1840-g601004e", + "Rev": "601004e1a714d77d3a43e957b8ae8adbc867b280" + }, { "ImportPath": "github.com/docker/docker/pkg/urlutil", "Comment": "docs-v1.12.0-rc4-2016-07-15-1840-g601004e", @@ -241,13 +328,13 @@ }, { "ImportPath": "github.com/docker/go-connections/nat", - "Comment": "v0.2.1-4-g988efe9", - "Rev": "988efe982fdecb46f01d53465878ff1f2ff411ce" + "Comment": "v0.2.0-2-gf549a93", + "Rev": "f549a9393d05688dff0992ef3efd8bbe6c628aeb" }, { "ImportPath": "github.com/docker/go-units", - "Comment": "v0.3.1-6-gf2145db", - "Rev": "f2145db703495b2e525c59662db69a7344b00bb8" + "Comment": "v0.1.0-21-g0bbddae", + "Rev": "0bbddae09c5a5419a8c6dcdd7ff90da3d450393b" }, { "ImportPath": "github.com/docker/libcompose/config", @@ -291,22 +378,22 @@ }, { "ImportPath": "github.com/docker/libtrust", - "Rev": "9cbd2a1374f46905c68a4eb3694a130610adc62a" + "Rev": "c54fbb67c1f1e68d7d6f8d2ad7c9360404616a41" }, { "ImportPath": "github.com/emicklei/go-restful", - "Comment": "v1.2-54-g7c47e25", - "Rev": "7c47e2558a0bbbaba9ecab06bc6681e73028a28a" + "Comment": "v1.2-79-g89ef8af", + "Rev": "89ef8af493ab468a45a42bb0d89a06fccdd2fb22" }, { "ImportPath": "github.com/emicklei/go-restful/log", - "Comment": "v1.2-54-g7c47e25", - "Rev": "7c47e2558a0bbbaba9ecab06bc6681e73028a28a" + "Comment": "v1.2-79-g89ef8af", + "Rev": "89ef8af493ab468a45a42bb0d89a06fccdd2fb22" }, { "ImportPath": "github.com/emicklei/go-restful/swagger", - "Comment": "v1.2-54-g7c47e25", - "Rev": "7c47e2558a0bbbaba9ecab06bc6681e73028a28a" + "Comment": "v1.2-79-g89ef8af", + "Rev": "89ef8af493ab468a45a42bb0d89a06fccdd2fb22" }, { "ImportPath": "github.com/evanphx/json-patch", @@ -398,25 +485,105 @@ }, { "ImportPath": "github.com/gogo/protobuf/proto", - "Comment": "v0.1-125-g82d16f7", - "Rev": "82d16f734d6d871204a3feb1a73cb220cc92574c" + "Comment": "v0.2-33-ge18d7aa", + "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" + }, + { + "ImportPath": "github.com/gogo/protobuf/sortkeys", + "Comment": "v0.2-33-ge18d7aa", + "Rev": "e18d7aa8f8c624c915db340349aad4c49b10d173" }, { "ImportPath": "github.com/golang/glog", - "Rev": "44145f04b68cf362d9c4df2182967c2275eaefed" + "Rev": "335da9dda11408a34b64344f82e9c03779b71673" }, { "ImportPath": "github.com/golang/groupcache/lru", "Rev": "604ed5785183e59ae2789449d89e73f3a2a77987" }, + { + "ImportPath": "github.com/golang/protobuf/jsonpb", + "Rev": "8616e8ee5e20a1704615e6c8d7afcdac06087a67" + }, { "ImportPath": "github.com/golang/protobuf/proto", - "Rev": "b982704f8bb716bb608144408cff30e15fbde841" + "Rev": "8616e8ee5e20a1704615e6c8d7afcdac06087a67" + }, + { + "ImportPath": "github.com/gonum/blas", + "Rev": "80dca99229cccca259b550ae3f755cf79c65a224" + }, + { + "ImportPath": "github.com/gonum/blas/blas64", + "Rev": "80dca99229cccca259b550ae3f755cf79c65a224" + }, + { + "ImportPath": "github.com/gonum/blas/native", + "Rev": "80dca99229cccca259b550ae3f755cf79c65a224" + }, + { + "ImportPath": "github.com/gonum/blas/native/internal/math32", + "Rev": "80dca99229cccca259b550ae3f755cf79c65a224" + }, + { + "ImportPath": "github.com/gonum/graph", + "Comment": "v0.9-100-gbde6d0f", + "Rev": "bde6d0fbd9dec5a997e906611fe0364001364c41" + }, + { + "ImportPath": "github.com/gonum/graph/concrete", + "Comment": "v0.9-100-gbde6d0f", + "Rev": "bde6d0fbd9dec5a997e906611fe0364001364c41" + }, + { + "ImportPath": "github.com/gonum/graph/encoding/dot", + "Comment": "v0.9-100-gbde6d0f", + "Rev": "bde6d0fbd9dec5a997e906611fe0364001364c41" + }, + { + "ImportPath": "github.com/gonum/graph/internal", + "Comment": "v0.9-100-gbde6d0f", + "Rev": "bde6d0fbd9dec5a997e906611fe0364001364c41" + }, + { + "ImportPath": "github.com/gonum/graph/path", + "Comment": "v0.9-100-gbde6d0f", + "Rev": "bde6d0fbd9dec5a997e906611fe0364001364c41" + }, + { + "ImportPath": "github.com/gonum/graph/topo", + "Comment": "v0.9-100-gbde6d0f", + "Rev": "bde6d0fbd9dec5a997e906611fe0364001364c41" + }, + { + "ImportPath": "github.com/gonum/graph/traverse", + "Comment": "v0.9-100-gbde6d0f", + "Rev": "bde6d0fbd9dec5a997e906611fe0364001364c41" + }, + { + "ImportPath": "github.com/gonum/internal/asm", + "Rev": "5b84ddfb9d3e72d73b8de858c97650be140935c0" + }, + { + "ImportPath": "github.com/gonum/lapack", + "Rev": "88ec467285859a6cd23900147d250a8af1f38b10" + }, + { + "ImportPath": "github.com/gonum/lapack/lapack64", + "Rev": "88ec467285859a6cd23900147d250a8af1f38b10" + }, + { + "ImportPath": "github.com/gonum/lapack/native", + "Rev": "88ec467285859a6cd23900147d250a8af1f38b10" + }, + { + "ImportPath": "github.com/gonum/matrix/mat64", + "Rev": "fb1396264e2e259ff714a408a7b0142d238b198d" }, { "ImportPath": "github.com/google/cadvisor/info/v1", - "Comment": "v0.23.6", - "Rev": "4dbefc9b671b81257973a33211fb12370c1a526e" + "Comment": "v0.24.0-alpha1-1-gd84e075", + "Rev": "d84e0758ab16ee68598702793119c9a7370c1522" }, { "ImportPath": "github.com/google/gofuzz", @@ -424,13 +591,26 @@ }, { "ImportPath": "github.com/gorilla/context", - "Comment": "v1.1", - "Rev": "1ea25387ff6f684839d82767c1733ff4d4d15d0a" + "Rev": "215affda49addc4c8ef7e2534915df2c8c35c6cd" }, { "ImportPath": "github.com/gorilla/mux", - "Comment": "v1.1", - "Rev": "0eeaf8392f5b04950925b8a69fe70f110fa7cbfc" + "Rev": "8096f47503459bcc74d1f4c487b7e6e42e5746b5" + }, + { + "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/runtime", + "Comment": "v1.0.0-8-gf52d055", + "Rev": "f52d055dc48aec25854ed7d31862f78913cf17d1" + }, + { + "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/runtime/internal", + "Comment": "v1.0.0-8-gf52d055", + "Rev": "f52d055dc48aec25854ed7d31862f78913cf17d1" + }, + { + "ImportPath": "github.com/grpc-ecosystem/grpc-gateway/utilities", + "Comment": "v1.0.0-8-gf52d055", + "Rev": "f52d055dc48aec25854ed7d31862f78913cf17d1" }, { "ImportPath": "github.com/imdario/mergo", @@ -453,130 +633,315 @@ "ImportPath": "github.com/matttproud/golang_protobuf_extensions/pbutil", "Rev": "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a" }, - { - "ImportPath": "github.com/opencontainers/runc/libcontainer/cgroups", - "Comment": "v1.0.0-rc1-39-gcc29e3d", - "Rev": "cc29e3dded8e27ba8f65738f40d251c885030a28" - }, - { - "ImportPath": "github.com/opencontainers/runc/libcontainer/cgroups/fs", - "Comment": "v1.0.0-rc1-39-gcc29e3d", - "Rev": "cc29e3dded8e27ba8f65738f40d251c885030a28" - }, - { - "ImportPath": "github.com/opencontainers/runc/libcontainer/configs", - "Comment": "v1.0.0-rc1-39-gcc29e3d", - "Rev": "cc29e3dded8e27ba8f65738f40d251c885030a28" - }, - { - "ImportPath": "github.com/opencontainers/runc/libcontainer/system", - "Comment": "v1.0.0-rc1-39-gcc29e3d", - "Rev": "cc29e3dded8e27ba8f65738f40d251c885030a28" - }, - { - "ImportPath": "github.com/opencontainers/runc/libcontainer/utils", - "Comment": "v1.0.0-rc1-39-gcc29e3d", - "Rev": "cc29e3dded8e27ba8f65738f40d251c885030a28" - }, { "ImportPath": "github.com/openshift/origin/pkg/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/api/extension", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/api/graph", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/api/graph/graphview", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/api/kubegraph", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/api/kubegraph/analysis", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/api/kubegraph/nodes", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/api/latest", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/api/restmapper", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/auth/api", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/auth/authenticator", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/auth/authenticator/request/x509request", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/authorization/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/authorization/reaper", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/build/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/build/client", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/build/cmd", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/build/graph", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/build/graph/analysis", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/build/graph/nodes", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/build/util", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/client", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/cmd/cli/config", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/cmd/cli/describe", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/cmd/flagtypes", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/cmd/util", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/cmd/util/clientcmd", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/deploy/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/deploy/api/install", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/deploy/api/v1", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/deploy/cmd", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/deploy/graph", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/deploy/graph/analysis", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/deploy/graph/nodes", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/deploy/util", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/image/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/image/api/docker10", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/image/api/dockerpre012", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/image/api/install", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/image/api/v1", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/image/graph", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/image/graph/nodes", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/oauth/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/project/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/quota/api", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/quota/util", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/route/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/route/generator", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/route/graph", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/route/graph/analysis", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/route/graph/nodes", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/sdn/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/security/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/template/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/user/api", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/user/reaper", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/util", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/util/dot", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/util/errors", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/openshift/origin/pkg/util/namer", - "Comment": "v1.3.0-alpha.2-1281-g2e48c47", - "Rev": "2e48c47ce0371eab4d23ce32c0fec6de2e964dc1" + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/util/parallel", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" + }, + { + "ImportPath": "github.com/openshift/origin/pkg/version", + "Comment": "v1.4.0-alpha.0", + "Rev": "67479ffd447d68d20e556746d56eb80458b9294c" }, { "ImportPath": "github.com/pborman/uuid", @@ -584,8 +949,8 @@ }, { "ImportPath": "github.com/prometheus/client_golang/prometheus", - "Comment": "0.7.0-39-g3b78d7a", - "Rev": "3b78d7a77f51ccbc364d4bc170920153022cfd08" + "Comment": "0.7.0-52-ge51041b", + "Rev": "e51041b3fa41cece0dca035740ba6411905be473" }, { "ImportPath": "github.com/prometheus/client_model/go", @@ -606,15 +971,15 @@ }, { "ImportPath": "github.com/prometheus/procfs", - "Rev": "490cc6eb5fa45bf8a8b7b73c8bc82a8160e8531d" + "Rev": "454a56f35412459b5e684fd5ec0f9211b94f002a" }, { "ImportPath": "github.com/spf13/cobra", - "Rev": "4c05eb1145f16d0e6bb4a3e1b6d769f4713cb41f" + "Rev": "7c674d9e72017ed25f6d2b5e497a1368086b6a6f" }, { "ImportPath": "github.com/spf13/pflag", - "Rev": "cb88ea77998c3f024757528e3305022ab50b43be" + "Rev": "1560c1005499d61b80f865c04d39ca7505bf7f0b" }, { "ImportPath": "github.com/ugorji/go/codec", @@ -639,27 +1004,31 @@ }, { "ImportPath": "golang.org/x/net/context", - "Rev": "cf4effbb9db1f3ef07f7e1891402991b6afbb276" + "Rev": "e90d6d0afc4c315a0d87a568ae68577cc15149a0" }, { "ImportPath": "golang.org/x/net/context/ctxhttp", - "Rev": "cf4effbb9db1f3ef07f7e1891402991b6afbb276" + "Rev": "e90d6d0afc4c315a0d87a568ae68577cc15149a0" }, { "ImportPath": "golang.org/x/net/http2", - "Rev": "cf4effbb9db1f3ef07f7e1891402991b6afbb276" + "Rev": "e90d6d0afc4c315a0d87a568ae68577cc15149a0" }, { "ImportPath": "golang.org/x/net/http2/hpack", - "Rev": "cf4effbb9db1f3ef07f7e1891402991b6afbb276" + "Rev": "e90d6d0afc4c315a0d87a568ae68577cc15149a0" }, { - "ImportPath": "golang.org/x/net/idna", - "Rev": "cf4effbb9db1f3ef07f7e1891402991b6afbb276" + "ImportPath": "golang.org/x/net/internal/timeseries", + "Rev": "e90d6d0afc4c315a0d87a568ae68577cc15149a0" }, { "ImportPath": "golang.org/x/net/lex/httplex", - "Rev": "cf4effbb9db1f3ef07f7e1891402991b6afbb276" + "Rev": "e90d6d0afc4c315a0d87a568ae68577cc15149a0" + }, + { + "ImportPath": "golang.org/x/net/trace", + "Rev": "e90d6d0afc4c315a0d87a568ae68577cc15149a0" }, { "ImportPath": "golang.org/x/oauth2", @@ -683,7 +1052,7 @@ }, { "ImportPath": "golang.org/x/sys/unix", - "Rev": "eb2c74142fd19a79b3f237334c7384d5167b1b46" + "Rev": "833a04a10549a95dc34458c195cbad61bbb6cb4d" }, { "ImportPath": "google.golang.org/cloud/compute/metadata", @@ -693,6 +1062,51 @@ "ImportPath": "google.golang.org/cloud/internal", "Rev": "eb47ba841d53d93506cfbfbc03927daf9cc48f88" }, + { + "ImportPath": "google.golang.org/grpc", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, + { + "ImportPath": "google.golang.org/grpc/codes", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, + { + "ImportPath": "google.golang.org/grpc/credentials", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, + { + "ImportPath": "google.golang.org/grpc/grpclog", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, + { + "ImportPath": "google.golang.org/grpc/internal", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, + { + "ImportPath": "google.golang.org/grpc/metadata", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, + { + "ImportPath": "google.golang.org/grpc/naming", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, + { + "ImportPath": "google.golang.org/grpc/peer", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, + { + "ImportPath": "google.golang.org/grpc/transport", + "Comment": "v1.0.0-183-g231b4cf", + "Rev": "231b4cfea0e79843053a33f5fe90bd4d84b23cd3" + }, { "ImportPath": "gopkg.in/inf.v0", "Comment": "v0.9.0", @@ -700,712 +1114,1137 @@ }, { "ImportPath": "gopkg.in/yaml.v2", - "Rev": "e4d366fc3c7938e2958e662b4258c7a89e1f0e3e" + "Rev": "a83829b6f1293c91addabc89d0571c246397bbf4" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/endpoints", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/errors", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/meta", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/meta/metatypes", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/pod", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/resource", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/service", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/unversioned", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/unversioned/validation", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/util", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/v1", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/api/validation", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/apimachinery", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/apimachinery/registered", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/apis/autoscaling", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/apis/batch", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/apis/extensions", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/auth/user", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/capabilities", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/conversion", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/conversion/queryparams", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/fields", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/labels", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/runtime", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/runtime/serializer", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/runtime/serializer/json", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/runtime/serializer/recognizer", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/runtime/serializer/streaming", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/runtime/serializer/versioning", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/security/apparmor", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/selection", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/third_party/forked/golang/reflect", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/types", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/clock", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/config", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/crypto", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/errors", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/flowcontrol", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/framer", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/hash", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/integer", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/intstr", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/json", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/labels", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/net", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/net/sets", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/parsers", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/rand", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/runtime", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/sets", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/uuid", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/validation", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/validation/field", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/wait", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/util/yaml", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/version", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/watch", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/pkg/watch/versioned", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/rest", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/tools/clientcmd/api", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/tools/metrics", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" + }, + { + "ImportPath": "k8s.io/client-go/1.4/transport", + "Rev": "f8e519fcc08881bcfe82d8755046df62ea30fda0" }, { "ImportPath": "k8s.io/kubernetes/federation/apis/federation", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/federation/apis/federation/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/federation/apis/federation/v1beta1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/annotations", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/endpoints", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/errors", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/meta", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/meta/metatypes", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/pod", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/resource", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/rest", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/service", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/unversioned/validation", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/util", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/v1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/api/validation", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apimachinery", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apimachinery/registered", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/apps", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/apps/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/apps/v1alpha1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { - "ImportPath": "k8s.io/kubernetes/pkg/apis/authentication.k8s.io", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "ImportPath": "k8s.io/kubernetes/pkg/apis/authentication", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { - "ImportPath": "k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "ImportPath": "k8s.io/kubernetes/pkg/apis/authentication/install", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { - "ImportPath": "k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "ImportPath": "k8s.io/kubernetes/pkg/apis/authentication/v1beta1", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/authorization", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/authorization/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/authorization/v1beta1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/autoscaling", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/autoscaling/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/autoscaling/v1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/batch", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/batch/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/batch/v1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/batch/v2alpha1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/apis/certificates", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/apis/certificates/install", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/apis/certificates/v1alpha1", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/componentconfig", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/componentconfig/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/extensions", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/extensions/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/extensions/v1beta1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/extensions/validation", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/policy", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/policy/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/policy/v1alpha1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/rbac", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/rbac/install", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/apis/rbac/v1alpha1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/apis/storage", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/apis/storage/install", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/apis/storage/v1beta1", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/auth/authenticator", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/auth/user", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/capabilities", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/cache", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/metrics", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/record", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/restclient", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/transport", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/typed/discovery", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/client/typed/dynamic", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/unversioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/unversioned/adapters/internalclientset", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/unversioned/auth", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/unversioned/clientcmd", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/controller", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/controller/deployment/util", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/controller/framework", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/controller/framework/informers", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/controller/replication", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/conversion", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/conversion/queryparams", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/credentialprovider", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/fieldpath", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/fields", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/kubectl", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/kubectl/cmd/util", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/kubectl/resource", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/kubelet/qos", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { - "ImportPath": "k8s.io/kubernetes/pkg/kubelet/qos/util", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "ImportPath": "k8s.io/kubernetes/pkg/kubelet/types", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/labels", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/master/ports", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/registry/generic", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/runtime", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/runtime/serializer", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/runtime/serializer/json", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/runtime/serializer/protobuf", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/runtime/serializer/recognizer", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/runtime/serializer/streaming", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/runtime/serializer/versioning", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/security/apparmor", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/security/podsecuritypolicy/util", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/securitycontextconstraints/util", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/selection", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/serviceaccount", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/storage", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/storage/etcd", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/storage/etcd/metrics", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/storage/etcd/util", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/storage/etcd3", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/storage/storagebackend", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/storage/storagebackend/factory", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/types", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/cache", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/certificates", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/clock", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/config", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/crypto", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" - }, - { - "ImportPath": "k8s.io/kubernetes/pkg/util/deployment", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/diff", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/errors", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/exec", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/flag", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/flowcontrol", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/framer", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/hash", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/homedir", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/integer", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/interrupt", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/intstr", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/json", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/jsonpath", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/labels", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/metrics", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/net", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/net/sets", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/parsers", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/pod", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/rand", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/replicaset", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/runtime", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/sets", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/slice", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/strategicpatch", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/term", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/uuid", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/validation", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/validation/field", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/wait", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/pkg/util/workqueue", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/util/yaml", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/version", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/watch", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/pkg/watch/versioned", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/plugin/pkg/client/auth", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/plugin/pkg/client/auth/gcp", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { "ImportPath": "k8s.io/kubernetes/plugin/pkg/client/auth/oidc", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { - "ImportPath": "k8s.io/kubernetes/third_party/forked/json", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "ImportPath": "k8s.io/kubernetes/third_party/forked/golang/json", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { - "ImportPath": "k8s.io/kubernetes/third_party/forked/reflect", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "ImportPath": "k8s.io/kubernetes/third_party/forked/golang/netutil", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" }, { - "ImportPath": "k8s.io/kubernetes/third_party/golang/template", - "Comment": "v1.3.0-58-g57fb9ac", - "Rev": "57fb9acc109285378ecd0af925c8160eb8ca19e6" + "ImportPath": "k8s.io/kubernetes/third_party/forked/golang/reflect", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" + }, + { + "ImportPath": "k8s.io/kubernetes/third_party/forked/golang/template", + "Comment": "v1.4.0-beta.3-45-gd19513f", + "Rev": "d19513fe86f3e0769dd5c4674c093a88a5adb8b4" } ] } diff --git a/pkg/transformer/kubernetes/k8sutils.go b/pkg/transformer/kubernetes/k8sutils.go index fa4cb736..50be67af 100644 --- a/pkg/transformer/kubernetes/k8sutils.go +++ b/pkg/transformer/kubernetes/k8sutils.go @@ -214,7 +214,7 @@ func convertToVersion(obj runtime.Object, groupVersion unversioned.GroupVersion) var version unversioned.GroupVersion - if groupVersion.IsEmpty() { + if groupVersion.Empty() { objectVersion := obj.GetObjectKind().GroupVersionKind() version = unversioned.GroupVersion{Group: objectVersion.Group, Version: objectVersion.Version} } else { diff --git a/script/godep-restore.sh b/script/godep-restore.sh index 398af3d7..a2dbff2c 100755 --- a/script/godep-restore.sh +++ b/script/godep-restore.sh @@ -22,7 +22,8 @@ preload-remote() { echo "Preloading some dependencies" # OpenShift requires its own Kubernets fork :-( preload-remote "k8s.io" "kubernetes" "github.com/openshift" "kubernetes" - +# OpenShift requires its own glog fork +preload-remote "github.com/golang" "glog" "github.com/openshift" "glog" echo "Starting to download all godeps. This takes a while" godep restore diff --git a/vendor/bitbucket.org/ww/goautoneg/Makefile b/vendor/bitbucket.org/ww/goautoneg/Makefile new file mode 100644 index 00000000..e33ee173 --- /dev/null +++ b/vendor/bitbucket.org/ww/goautoneg/Makefile @@ -0,0 +1,13 @@ +include $(GOROOT)/src/Make.inc + +TARG=bitbucket.org/ww/goautoneg +GOFILES=autoneg.go + +include $(GOROOT)/src/Make.pkg + +format: + gofmt -w *.go + +docs: + gomake clean + godoc ${TARG} > README.txt diff --git a/vendor/bitbucket.org/ww/goautoneg/README.txt b/vendor/bitbucket.org/ww/goautoneg/README.txt new file mode 100644 index 00000000..7723656d --- /dev/null +++ b/vendor/bitbucket.org/ww/goautoneg/README.txt @@ -0,0 +1,67 @@ +PACKAGE + +package goautoneg +import "bitbucket.org/ww/goautoneg" + +HTTP Content-Type Autonegotiation. + +The functions in this package implement the behaviour specified in +http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html + +Copyright (c) 2011, Open Knowledge Foundation Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + Neither the name of the Open Knowledge Foundation Ltd. nor the + names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +FUNCTIONS + +func Negotiate(header string, alternatives []string) (content_type string) +Negotiate the most appropriate content_type given the accept header +and a list of alternatives. + +func ParseAccept(header string) (accept []Accept) +Parse an Accept Header string returning a sorted list +of clauses + + +TYPES + +type Accept struct { + Type, SubType string + Q float32 + Params map[string]string +} +Structure to represent a clause in an HTTP Accept Header + + +SUBDIRECTORIES + + .hg diff --git a/vendor/bitbucket.org/ww/goautoneg/autoneg.go b/vendor/bitbucket.org/ww/goautoneg/autoneg.go new file mode 100644 index 00000000..648b38cb --- /dev/null +++ b/vendor/bitbucket.org/ww/goautoneg/autoneg.go @@ -0,0 +1,162 @@ +/* +HTTP Content-Type Autonegotiation. + +The functions in this package implement the behaviour specified in +http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html + +Copyright (c) 2011, Open Knowledge Foundation Ltd. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + Neither the name of the Open Knowledge Foundation Ltd. nor the + names of its contributors may be used to endorse or promote + products derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +*/ +package goautoneg + +import ( + "sort" + "strconv" + "strings" +) + +// Structure to represent a clause in an HTTP Accept Header +type Accept struct { + Type, SubType string + Q float64 + Params map[string]string +} + +// For internal use, so that we can use the sort interface +type accept_slice []Accept + +func (accept accept_slice) Len() int { + slice := []Accept(accept) + return len(slice) +} + +func (accept accept_slice) Less(i, j int) bool { + slice := []Accept(accept) + ai, aj := slice[i], slice[j] + if ai.Q > aj.Q { + return true + } + if ai.Type != "*" && aj.Type == "*" { + return true + } + if ai.SubType != "*" && aj.SubType == "*" { + return true + } + return false +} + +func (accept accept_slice) Swap(i, j int) { + slice := []Accept(accept) + slice[i], slice[j] = slice[j], slice[i] +} + +// Parse an Accept Header string returning a sorted list +// of clauses +func ParseAccept(header string) (accept []Accept) { + parts := strings.Split(header, ",") + accept = make([]Accept, 0, len(parts)) + for _, part := range parts { + part := strings.Trim(part, " ") + + a := Accept{} + a.Params = make(map[string]string) + a.Q = 1.0 + + mrp := strings.Split(part, ";") + + media_range := mrp[0] + sp := strings.Split(media_range, "/") + a.Type = strings.Trim(sp[0], " ") + + switch { + case len(sp) == 1 && a.Type == "*": + a.SubType = "*" + case len(sp) == 2: + a.SubType = strings.Trim(sp[1], " ") + default: + continue + } + + if len(mrp) == 1 { + accept = append(accept, a) + continue + } + + for _, param := range mrp[1:] { + sp := strings.SplitN(param, "=", 2) + if len(sp) != 2 { + continue + } + token := strings.Trim(sp[0], " ") + if token == "q" { + a.Q, _ = strconv.ParseFloat(sp[1], 32) + } else { + a.Params[token] = strings.Trim(sp[1], " ") + } + } + + accept = append(accept, a) + } + + slice := accept_slice(accept) + sort.Sort(slice) + + return +} + +// Negotiate the most appropriate content_type given the accept header +// and a list of alternatives. +func Negotiate(header string, alternatives []string) (content_type string) { + asp := make([][]string, 0, len(alternatives)) + for _, ctype := range alternatives { + asp = append(asp, strings.SplitN(ctype, "/", 2)) + } + for _, clause := range ParseAccept(header) { + for i, ctsp := range asp { + if clause.Type == ctsp[0] && clause.SubType == ctsp[1] { + content_type = alternatives[i] + return + } + if clause.Type == ctsp[0] && clause.SubType == "*" { + content_type = alternatives[i] + return + } + if clause.Type == "*" && clause.SubType == "*" { + content_type = alternatives[i] + return + } + } + } + return +} diff --git a/vendor/github.com/Azure/go-ansiterm/LICENSE b/vendor/github.com/Azure/go-ansiterm/LICENSE new file mode 100644 index 00000000..e3d9a64d --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Microsoft Corporation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/github.com/Azure/go-ansiterm/README.md b/vendor/github.com/Azure/go-ansiterm/README.md new file mode 100644 index 00000000..261c041e --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/README.md @@ -0,0 +1,12 @@ +# go-ansiterm + +This is a cross platform Ansi Terminal Emulation library. It reads a stream of Ansi characters and produces the appropriate function calls. The results of the function calls are platform dependent. + +For example the parser might receive "ESC, [, A" as a stream of three characters. This is the code for Cursor Up (http://www.vt100.net/docs/vt510-rm/CUU). The parser then calls the cursor up function (CUU()) on an event handler. The event handler determines what platform specific work must be done to cause the cursor to move up one position. + +The parser (parser.go) is a partial implementation of this state machine (http://vt100.net/emu/vt500_parser.png). There are also two event handler implementations, one for tests (test_event_handler.go) to validate that the expected events are being produced and called, the other is a Windows implementation (winterm/win_event_handler.go). + +See parser_test.go for examples exercising the state machine and generating appropriate function calls. + +----- +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. diff --git a/vendor/github.com/Azure/go-ansiterm/constants.go b/vendor/github.com/Azure/go-ansiterm/constants.go new file mode 100644 index 00000000..96504a33 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/constants.go @@ -0,0 +1,188 @@ +package ansiterm + +const LogEnv = "DEBUG_TERMINAL" + +// ANSI constants +// References: +// -- http://www.ecma-international.org/publications/standards/Ecma-048.htm +// -- http://man7.org/linux/man-pages/man4/console_codes.4.html +// -- http://manpages.ubuntu.com/manpages/intrepid/man4/console_codes.4.html +// -- http://en.wikipedia.org/wiki/ANSI_escape_code +// -- http://vt100.net/emu/dec_ansi_parser +// -- http://vt100.net/emu/vt500_parser.svg +// -- http://invisible-island.net/xterm/ctlseqs/ctlseqs.html +// -- http://www.inwap.com/pdp10/ansicode.txt +const ( + // ECMA-48 Set Graphics Rendition + // Note: + // -- Constants leading with an underscore (e.g., _ANSI_xxx) are unsupported or reserved + // -- Fonts could possibly be supported via SetCurrentConsoleFontEx + // -- Windows does not expose the per-window cursor (i.e., caret) blink times + ANSI_SGR_RESET = 0 + ANSI_SGR_BOLD = 1 + ANSI_SGR_DIM = 2 + _ANSI_SGR_ITALIC = 3 + ANSI_SGR_UNDERLINE = 4 + _ANSI_SGR_BLINKSLOW = 5 + _ANSI_SGR_BLINKFAST = 6 + ANSI_SGR_REVERSE = 7 + _ANSI_SGR_INVISIBLE = 8 + _ANSI_SGR_LINETHROUGH = 9 + _ANSI_SGR_FONT_00 = 10 + _ANSI_SGR_FONT_01 = 11 + _ANSI_SGR_FONT_02 = 12 + _ANSI_SGR_FONT_03 = 13 + _ANSI_SGR_FONT_04 = 14 + _ANSI_SGR_FONT_05 = 15 + _ANSI_SGR_FONT_06 = 16 + _ANSI_SGR_FONT_07 = 17 + _ANSI_SGR_FONT_08 = 18 + _ANSI_SGR_FONT_09 = 19 + _ANSI_SGR_FONT_10 = 20 + _ANSI_SGR_DOUBLEUNDERLINE = 21 + ANSI_SGR_BOLD_DIM_OFF = 22 + _ANSI_SGR_ITALIC_OFF = 23 + ANSI_SGR_UNDERLINE_OFF = 24 + _ANSI_SGR_BLINK_OFF = 25 + _ANSI_SGR_RESERVED_00 = 26 + ANSI_SGR_REVERSE_OFF = 27 + _ANSI_SGR_INVISIBLE_OFF = 28 + _ANSI_SGR_LINETHROUGH_OFF = 29 + ANSI_SGR_FOREGROUND_BLACK = 30 + ANSI_SGR_FOREGROUND_RED = 31 + ANSI_SGR_FOREGROUND_GREEN = 32 + ANSI_SGR_FOREGROUND_YELLOW = 33 + ANSI_SGR_FOREGROUND_BLUE = 34 + ANSI_SGR_FOREGROUND_MAGENTA = 35 + ANSI_SGR_FOREGROUND_CYAN = 36 + ANSI_SGR_FOREGROUND_WHITE = 37 + _ANSI_SGR_RESERVED_01 = 38 + ANSI_SGR_FOREGROUND_DEFAULT = 39 + ANSI_SGR_BACKGROUND_BLACK = 40 + ANSI_SGR_BACKGROUND_RED = 41 + ANSI_SGR_BACKGROUND_GREEN = 42 + ANSI_SGR_BACKGROUND_YELLOW = 43 + ANSI_SGR_BACKGROUND_BLUE = 44 + ANSI_SGR_BACKGROUND_MAGENTA = 45 + ANSI_SGR_BACKGROUND_CYAN = 46 + ANSI_SGR_BACKGROUND_WHITE = 47 + _ANSI_SGR_RESERVED_02 = 48 + ANSI_SGR_BACKGROUND_DEFAULT = 49 + // 50 - 65: Unsupported + + ANSI_MAX_CMD_LENGTH = 4096 + + MAX_INPUT_EVENTS = 128 + DEFAULT_WIDTH = 80 + DEFAULT_HEIGHT = 24 + + ANSI_BEL = 0x07 + ANSI_BACKSPACE = 0x08 + ANSI_TAB = 0x09 + ANSI_LINE_FEED = 0x0A + ANSI_VERTICAL_TAB = 0x0B + ANSI_FORM_FEED = 0x0C + ANSI_CARRIAGE_RETURN = 0x0D + ANSI_ESCAPE_PRIMARY = 0x1B + ANSI_ESCAPE_SECONDARY = 0x5B + ANSI_OSC_STRING_ENTRY = 0x5D + ANSI_COMMAND_FIRST = 0x40 + ANSI_COMMAND_LAST = 0x7E + DCS_ENTRY = 0x90 + CSI_ENTRY = 0x9B + OSC_STRING = 0x9D + ANSI_PARAMETER_SEP = ";" + ANSI_CMD_G0 = '(' + ANSI_CMD_G1 = ')' + ANSI_CMD_G2 = '*' + ANSI_CMD_G3 = '+' + ANSI_CMD_DECPNM = '>' + ANSI_CMD_DECPAM = '=' + ANSI_CMD_OSC = ']' + ANSI_CMD_STR_TERM = '\\' + + KEY_CONTROL_PARAM_2 = ";2" + KEY_CONTROL_PARAM_3 = ";3" + KEY_CONTROL_PARAM_4 = ";4" + KEY_CONTROL_PARAM_5 = ";5" + KEY_CONTROL_PARAM_6 = ";6" + KEY_CONTROL_PARAM_7 = ";7" + KEY_CONTROL_PARAM_8 = ";8" + KEY_ESC_CSI = "\x1B[" + KEY_ESC_N = "\x1BN" + KEY_ESC_O = "\x1BO" + + FILL_CHARACTER = ' ' +) + +func getByteRange(start byte, end byte) []byte { + bytes := make([]byte, 0, 32) + for i := start; i <= end; i++ { + bytes = append(bytes, byte(i)) + } + + return bytes +} + +var toGroundBytes = getToGroundBytes() +var executors = getExecuteBytes() + +// SPACE 20+A0 hex Always and everywhere a blank space +// Intermediate 20-2F hex !"#$%&'()*+,-./ +var intermeds = getByteRange(0x20, 0x2F) + +// Parameters 30-3F hex 0123456789:;<=>? +// CSI Parameters 30-39, 3B hex 0123456789; +var csiParams = getByteRange(0x30, 0x3F) + +var csiCollectables = append(getByteRange(0x30, 0x39), getByteRange(0x3B, 0x3F)...) + +// Uppercase 40-5F hex @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ +var upperCase = getByteRange(0x40, 0x5F) + +// Lowercase 60-7E hex `abcdefghijlkmnopqrstuvwxyz{|}~ +var lowerCase = getByteRange(0x60, 0x7E) + +// Alphabetics 40-7E hex (all of upper and lower case) +var alphabetics = append(upperCase, lowerCase...) + +var printables = getByteRange(0x20, 0x7F) + +var escapeIntermediateToGroundBytes = getByteRange(0x30, 0x7E) +var escapeToGroundBytes = getEscapeToGroundBytes() + +// See http://www.vt100.net/emu/vt500_parser.png for description of the complex +// byte ranges below + +func getEscapeToGroundBytes() []byte { + escapeToGroundBytes := getByteRange(0x30, 0x4F) + escapeToGroundBytes = append(escapeToGroundBytes, getByteRange(0x51, 0x57)...) + escapeToGroundBytes = append(escapeToGroundBytes, 0x59) + escapeToGroundBytes = append(escapeToGroundBytes, 0x5A) + escapeToGroundBytes = append(escapeToGroundBytes, 0x5C) + escapeToGroundBytes = append(escapeToGroundBytes, getByteRange(0x60, 0x7E)...) + return escapeToGroundBytes +} + +func getExecuteBytes() []byte { + executeBytes := getByteRange(0x00, 0x17) + executeBytes = append(executeBytes, 0x19) + executeBytes = append(executeBytes, getByteRange(0x1C, 0x1F)...) + return executeBytes +} + +func getToGroundBytes() []byte { + groundBytes := []byte{0x18} + groundBytes = append(groundBytes, 0x1A) + groundBytes = append(groundBytes, getByteRange(0x80, 0x8F)...) + groundBytes = append(groundBytes, getByteRange(0x91, 0x97)...) + groundBytes = append(groundBytes, 0x99) + groundBytes = append(groundBytes, 0x9A) + groundBytes = append(groundBytes, 0x9C) + return groundBytes +} + +// Delete 7F hex Always and everywhere ignored +// C1 Control 80-9F hex 32 additional control characters +// G1 Displayable A1-FE hex 94 additional displayable characters +// Special A0+FF hex Same as SPACE and DELETE diff --git a/vendor/github.com/Azure/go-ansiterm/context.go b/vendor/github.com/Azure/go-ansiterm/context.go new file mode 100644 index 00000000..8d66e777 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/context.go @@ -0,0 +1,7 @@ +package ansiterm + +type ansiContext struct { + currentChar byte + paramBuffer []byte + interBuffer []byte +} diff --git a/vendor/github.com/Azure/go-ansiterm/csi_entry_state.go b/vendor/github.com/Azure/go-ansiterm/csi_entry_state.go new file mode 100644 index 00000000..1bd6057d --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/csi_entry_state.go @@ -0,0 +1,49 @@ +package ansiterm + +type csiEntryState struct { + baseState +} + +func (csiState csiEntryState) Handle(b byte) (s state, e error) { + logger.Infof("CsiEntry::Handle %#x", b) + + nextState, err := csiState.baseState.Handle(b) + if nextState != nil || err != nil { + return nextState, err + } + + switch { + case sliceContains(alphabetics, b): + return csiState.parser.ground, nil + case sliceContains(csiCollectables, b): + return csiState.parser.csiParam, nil + case sliceContains(executors, b): + return csiState, csiState.parser.execute() + } + + return csiState, nil +} + +func (csiState csiEntryState) Transition(s state) error { + logger.Infof("CsiEntry::Transition %s --> %s", csiState.Name(), s.Name()) + csiState.baseState.Transition(s) + + switch s { + case csiState.parser.ground: + return csiState.parser.csiDispatch() + case csiState.parser.csiParam: + switch { + case sliceContains(csiParams, csiState.parser.context.currentChar): + csiState.parser.collectParam() + case sliceContains(intermeds, csiState.parser.context.currentChar): + csiState.parser.collectInter() + } + } + + return nil +} + +func (csiState csiEntryState) Enter() error { + csiState.parser.clear() + return nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/csi_param_state.go b/vendor/github.com/Azure/go-ansiterm/csi_param_state.go new file mode 100644 index 00000000..4be35c5f --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/csi_param_state.go @@ -0,0 +1,38 @@ +package ansiterm + +type csiParamState struct { + baseState +} + +func (csiState csiParamState) Handle(b byte) (s state, e error) { + logger.Infof("CsiParam::Handle %#x", b) + + nextState, err := csiState.baseState.Handle(b) + if nextState != nil || err != nil { + return nextState, err + } + + switch { + case sliceContains(alphabetics, b): + return csiState.parser.ground, nil + case sliceContains(csiCollectables, b): + csiState.parser.collectParam() + return csiState, nil + case sliceContains(executors, b): + return csiState, csiState.parser.execute() + } + + return csiState, nil +} + +func (csiState csiParamState) Transition(s state) error { + logger.Infof("CsiParam::Transition %s --> %s", csiState.Name(), s.Name()) + csiState.baseState.Transition(s) + + switch s { + case csiState.parser.ground: + return csiState.parser.csiDispatch() + } + + return nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go b/vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go new file mode 100644 index 00000000..2189eb6b --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/escape_intermediate_state.go @@ -0,0 +1,36 @@ +package ansiterm + +type escapeIntermediateState struct { + baseState +} + +func (escState escapeIntermediateState) Handle(b byte) (s state, e error) { + logger.Infof("escapeIntermediateState::Handle %#x", b) + nextState, err := escState.baseState.Handle(b) + if nextState != nil || err != nil { + return nextState, err + } + + switch { + case sliceContains(intermeds, b): + return escState, escState.parser.collectInter() + case sliceContains(executors, b): + return escState, escState.parser.execute() + case sliceContains(escapeIntermediateToGroundBytes, b): + return escState.parser.ground, nil + } + + return escState, nil +} + +func (escState escapeIntermediateState) Transition(s state) error { + logger.Infof("escapeIntermediateState::Transition %s --> %s", escState.Name(), s.Name()) + escState.baseState.Transition(s) + + switch s { + case escState.parser.ground: + return escState.parser.escDispatch() + } + + return nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/escape_state.go b/vendor/github.com/Azure/go-ansiterm/escape_state.go new file mode 100644 index 00000000..7b1b9ad3 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/escape_state.go @@ -0,0 +1,47 @@ +package ansiterm + +type escapeState struct { + baseState +} + +func (escState escapeState) Handle(b byte) (s state, e error) { + logger.Infof("escapeState::Handle %#x", b) + nextState, err := escState.baseState.Handle(b) + if nextState != nil || err != nil { + return nextState, err + } + + switch { + case b == ANSI_ESCAPE_SECONDARY: + return escState.parser.csiEntry, nil + case b == ANSI_OSC_STRING_ENTRY: + return escState.parser.oscString, nil + case sliceContains(executors, b): + return escState, escState.parser.execute() + case sliceContains(escapeToGroundBytes, b): + return escState.parser.ground, nil + case sliceContains(intermeds, b): + return escState.parser.escapeIntermediate, nil + } + + return escState, nil +} + +func (escState escapeState) Transition(s state) error { + logger.Infof("Escape::Transition %s --> %s", escState.Name(), s.Name()) + escState.baseState.Transition(s) + + switch s { + case escState.parser.ground: + return escState.parser.escDispatch() + case escState.parser.escapeIntermediate: + return escState.parser.collectInter() + } + + return nil +} + +func (escState escapeState) Enter() error { + escState.parser.clear() + return nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/event_handler.go b/vendor/github.com/Azure/go-ansiterm/event_handler.go new file mode 100644 index 00000000..98087b38 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/event_handler.go @@ -0,0 +1,90 @@ +package ansiterm + +type AnsiEventHandler interface { + // Print + Print(b byte) error + + // Execute C0 commands + Execute(b byte) error + + // CUrsor Up + CUU(int) error + + // CUrsor Down + CUD(int) error + + // CUrsor Forward + CUF(int) error + + // CUrsor Backward + CUB(int) error + + // Cursor to Next Line + CNL(int) error + + // Cursor to Previous Line + CPL(int) error + + // Cursor Horizontal position Absolute + CHA(int) error + + // Vertical line Position Absolute + VPA(int) error + + // CUrsor Position + CUP(int, int) error + + // Horizontal and Vertical Position (depends on PUM) + HVP(int, int) error + + // Text Cursor Enable Mode + DECTCEM(bool) error + + // Origin Mode + DECOM(bool) error + + // 132 Column Mode + DECCOLM(bool) error + + // Erase in Display + ED(int) error + + // Erase in Line + EL(int) error + + // Insert Line + IL(int) error + + // Delete Line + DL(int) error + + // Insert Character + ICH(int) error + + // Delete Character + DCH(int) error + + // Set Graphics Rendition + SGR([]int) error + + // Pan Down + SU(int) error + + // Pan Up + SD(int) error + + // Device Attributes + DA([]string) error + + // Set Top and Bottom Margins + DECSTBM(int, int) error + + // Index + IND() error + + // Reverse Index + RI() error + + // Flush updates from previous commands + Flush() error +} diff --git a/vendor/github.com/Azure/go-ansiterm/ground_state.go b/vendor/github.com/Azure/go-ansiterm/ground_state.go new file mode 100644 index 00000000..52451e94 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/ground_state.go @@ -0,0 +1,24 @@ +package ansiterm + +type groundState struct { + baseState +} + +func (gs groundState) Handle(b byte) (s state, e error) { + gs.parser.context.currentChar = b + + nextState, err := gs.baseState.Handle(b) + if nextState != nil || err != nil { + return nextState, err + } + + switch { + case sliceContains(printables, b): + return gs, gs.parser.print() + + case sliceContains(executors, b): + return gs, gs.parser.execute() + } + + return gs, nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/osc_string_state.go b/vendor/github.com/Azure/go-ansiterm/osc_string_state.go new file mode 100644 index 00000000..24062d42 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/osc_string_state.go @@ -0,0 +1,31 @@ +package ansiterm + +type oscStringState struct { + baseState +} + +func (oscState oscStringState) Handle(b byte) (s state, e error) { + logger.Infof("OscString::Handle %#x", b) + nextState, err := oscState.baseState.Handle(b) + if nextState != nil || err != nil { + return nextState, err + } + + switch { + case isOscStringTerminator(b): + return oscState.parser.ground, nil + } + + return oscState, nil +} + +// See below for OSC string terminators for linux +// http://man7.org/linux/man-pages/man4/console_codes.4.html +func isOscStringTerminator(b byte) bool { + + if b == ANSI_BEL || b == 0x5C { + return true + } + + return false +} diff --git a/vendor/github.com/Azure/go-ansiterm/parser.go b/vendor/github.com/Azure/go-ansiterm/parser.go new file mode 100644 index 00000000..169f68db --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/parser.go @@ -0,0 +1,136 @@ +package ansiterm + +import ( + "errors" + "io/ioutil" + "os" + + "github.com/Sirupsen/logrus" +) + +var logger *logrus.Logger + +type AnsiParser struct { + currState state + eventHandler AnsiEventHandler + context *ansiContext + csiEntry state + csiParam state + dcsEntry state + escape state + escapeIntermediate state + error state + ground state + oscString state + stateMap []state +} + +func CreateParser(initialState string, evtHandler AnsiEventHandler) *AnsiParser { + logFile := ioutil.Discard + + if isDebugEnv := os.Getenv(LogEnv); isDebugEnv == "1" { + logFile, _ = os.Create("ansiParser.log") + } + + logger = &logrus.Logger{ + Out: logFile, + Formatter: new(logrus.TextFormatter), + Level: logrus.InfoLevel, + } + + parser := &AnsiParser{ + eventHandler: evtHandler, + context: &ansiContext{}, + } + + parser.csiEntry = csiEntryState{baseState{name: "CsiEntry", parser: parser}} + parser.csiParam = csiParamState{baseState{name: "CsiParam", parser: parser}} + parser.dcsEntry = dcsEntryState{baseState{name: "DcsEntry", parser: parser}} + parser.escape = escapeState{baseState{name: "Escape", parser: parser}} + parser.escapeIntermediate = escapeIntermediateState{baseState{name: "EscapeIntermediate", parser: parser}} + parser.error = errorState{baseState{name: "Error", parser: parser}} + parser.ground = groundState{baseState{name: "Ground", parser: parser}} + parser.oscString = oscStringState{baseState{name: "OscString", parser: parser}} + + parser.stateMap = []state{ + parser.csiEntry, + parser.csiParam, + parser.dcsEntry, + parser.escape, + parser.escapeIntermediate, + parser.error, + parser.ground, + parser.oscString, + } + + parser.currState = getState(initialState, parser.stateMap) + + logger.Infof("CreateParser: parser %p", parser) + return parser +} + +func getState(name string, states []state) state { + for _, el := range states { + if el.Name() == name { + return el + } + } + + return nil +} + +func (ap *AnsiParser) Parse(bytes []byte) (int, error) { + for i, b := range bytes { + if err := ap.handle(b); err != nil { + return i, err + } + } + + return len(bytes), ap.eventHandler.Flush() +} + +func (ap *AnsiParser) handle(b byte) error { + ap.context.currentChar = b + newState, err := ap.currState.Handle(b) + if err != nil { + return err + } + + if newState == nil { + logger.Warning("newState is nil") + return errors.New("New state of 'nil' is invalid.") + } + + if newState != ap.currState { + if err := ap.changeState(newState); err != nil { + return err + } + } + + return nil +} + +func (ap *AnsiParser) changeState(newState state) error { + logger.Infof("ChangeState %s --> %s", ap.currState.Name(), newState.Name()) + + // Exit old state + if err := ap.currState.Exit(); err != nil { + logger.Infof("Exit state '%s' failed with : '%v'", ap.currState.Name(), err) + return err + } + + // Perform transition action + if err := ap.currState.Transition(newState); err != nil { + logger.Infof("Transition from '%s' to '%s' failed with: '%v'", ap.currState.Name(), newState.Name, err) + return err + } + + // Enter new state + if err := newState.Enter(); err != nil { + logger.Infof("Enter state '%s' failed with: '%v'", newState.Name(), err) + return err + } + + ap.currState = newState + return nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go b/vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go new file mode 100644 index 00000000..8b69a67a --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/parser_action_helpers.go @@ -0,0 +1,103 @@ +package ansiterm + +import ( + "strconv" +) + +func parseParams(bytes []byte) ([]string, error) { + paramBuff := make([]byte, 0, 0) + params := []string{} + + for _, v := range bytes { + if v == ';' { + if len(paramBuff) > 0 { + // Completed parameter, append it to the list + s := string(paramBuff) + params = append(params, s) + paramBuff = make([]byte, 0, 0) + } + } else { + paramBuff = append(paramBuff, v) + } + } + + // Last parameter may not be terminated with ';' + if len(paramBuff) > 0 { + s := string(paramBuff) + params = append(params, s) + } + + logger.Infof("Parsed params: %v with length: %d", params, len(params)) + return params, nil +} + +func parseCmd(context ansiContext) (string, error) { + return string(context.currentChar), nil +} + +func getInt(params []string, dflt int) int { + i := getInts(params, 1, dflt)[0] + logger.Infof("getInt: %v", i) + return i +} + +func getInts(params []string, minCount int, dflt int) []int { + ints := []int{} + + for _, v := range params { + i, _ := strconv.Atoi(v) + // Zero is mapped to the default value in VT100. + if i == 0 { + i = dflt + } + ints = append(ints, i) + } + + if len(ints) < minCount { + remaining := minCount - len(ints) + for i := 0; i < remaining; i++ { + ints = append(ints, dflt) + } + } + + logger.Infof("getInts: %v", ints) + + return ints +} + +func (ap *AnsiParser) modeDispatch(param string, set bool) error { + switch param { + case "?3": + return ap.eventHandler.DECCOLM(set) + case "?6": + return ap.eventHandler.DECOM(set) + case "?25": + return ap.eventHandler.DECTCEM(set) + } + return nil +} + +func (ap *AnsiParser) hDispatch(params []string) error { + if len(params) == 1 { + return ap.modeDispatch(params[0], true) + } + + return nil +} + +func (ap *AnsiParser) lDispatch(params []string) error { + if len(params) == 1 { + return ap.modeDispatch(params[0], false) + } + + return nil +} + +func getEraseParam(params []string) int { + param := getInt(params, 0) + if param < 0 || 3 < param { + param = 0 + } + + return param +} diff --git a/vendor/github.com/Azure/go-ansiterm/parser_actions.go b/vendor/github.com/Azure/go-ansiterm/parser_actions.go new file mode 100644 index 00000000..58750a2d --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/parser_actions.go @@ -0,0 +1,122 @@ +package ansiterm + +import ( + "fmt" +) + +func (ap *AnsiParser) collectParam() error { + currChar := ap.context.currentChar + logger.Infof("collectParam %#x", currChar) + ap.context.paramBuffer = append(ap.context.paramBuffer, currChar) + return nil +} + +func (ap *AnsiParser) collectInter() error { + currChar := ap.context.currentChar + logger.Infof("collectInter %#x", currChar) + ap.context.paramBuffer = append(ap.context.interBuffer, currChar) + return nil +} + +func (ap *AnsiParser) escDispatch() error { + cmd, _ := parseCmd(*ap.context) + intermeds := ap.context.interBuffer + logger.Infof("escDispatch currentChar: %#x", ap.context.currentChar) + logger.Infof("escDispatch: %v(%v)", cmd, intermeds) + + switch cmd { + case "D": // IND + return ap.eventHandler.IND() + case "E": // NEL, equivalent to CRLF + err := ap.eventHandler.Execute(ANSI_CARRIAGE_RETURN) + if err == nil { + err = ap.eventHandler.Execute(ANSI_LINE_FEED) + } + return err + case "M": // RI + return ap.eventHandler.RI() + } + + return nil +} + +func (ap *AnsiParser) csiDispatch() error { + cmd, _ := parseCmd(*ap.context) + params, _ := parseParams(ap.context.paramBuffer) + + logger.Infof("csiDispatch: %v(%v)", cmd, params) + + switch cmd { + case "@": + return ap.eventHandler.ICH(getInt(params, 1)) + case "A": + return ap.eventHandler.CUU(getInt(params, 1)) + case "B": + return ap.eventHandler.CUD(getInt(params, 1)) + case "C": + return ap.eventHandler.CUF(getInt(params, 1)) + case "D": + return ap.eventHandler.CUB(getInt(params, 1)) + case "E": + return ap.eventHandler.CNL(getInt(params, 1)) + case "F": + return ap.eventHandler.CPL(getInt(params, 1)) + case "G": + return ap.eventHandler.CHA(getInt(params, 1)) + case "H": + ints := getInts(params, 2, 1) + x, y := ints[0], ints[1] + return ap.eventHandler.CUP(x, y) + case "J": + param := getEraseParam(params) + return ap.eventHandler.ED(param) + case "K": + param := getEraseParam(params) + return ap.eventHandler.EL(param) + case "L": + return ap.eventHandler.IL(getInt(params, 1)) + case "M": + return ap.eventHandler.DL(getInt(params, 1)) + case "P": + return ap.eventHandler.DCH(getInt(params, 1)) + case "S": + return ap.eventHandler.SU(getInt(params, 1)) + case "T": + return ap.eventHandler.SD(getInt(params, 1)) + case "c": + return ap.eventHandler.DA(params) + case "d": + return ap.eventHandler.VPA(getInt(params, 1)) + case "f": + ints := getInts(params, 2, 1) + x, y := ints[0], ints[1] + return ap.eventHandler.HVP(x, y) + case "h": + return ap.hDispatch(params) + case "l": + return ap.lDispatch(params) + case "m": + return ap.eventHandler.SGR(getInts(params, 1, 0)) + case "r": + ints := getInts(params, 2, 1) + top, bottom := ints[0], ints[1] + return ap.eventHandler.DECSTBM(top, bottom) + default: + logger.Errorf(fmt.Sprintf("Unsupported CSI command: '%s', with full context: %v", cmd, ap.context)) + return nil + } + +} + +func (ap *AnsiParser) print() error { + return ap.eventHandler.Print(ap.context.currentChar) +} + +func (ap *AnsiParser) clear() error { + ap.context = &ansiContext{} + return nil +} + +func (ap *AnsiParser) execute() error { + return ap.eventHandler.Execute(ap.context.currentChar) +} diff --git a/vendor/github.com/Azure/go-ansiterm/states.go b/vendor/github.com/Azure/go-ansiterm/states.go new file mode 100644 index 00000000..f2ea1fcd --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/states.go @@ -0,0 +1,71 @@ +package ansiterm + +type stateID int + +type state interface { + Enter() error + Exit() error + Handle(byte) (state, error) + Name() string + Transition(state) error +} + +type baseState struct { + name string + parser *AnsiParser +} + +func (base baseState) Enter() error { + return nil +} + +func (base baseState) Exit() error { + return nil +} + +func (base baseState) Handle(b byte) (s state, e error) { + + switch { + case b == CSI_ENTRY: + return base.parser.csiEntry, nil + case b == DCS_ENTRY: + return base.parser.dcsEntry, nil + case b == ANSI_ESCAPE_PRIMARY: + return base.parser.escape, nil + case b == OSC_STRING: + return base.parser.oscString, nil + case sliceContains(toGroundBytes, b): + return base.parser.ground, nil + } + + return nil, nil +} + +func (base baseState) Name() string { + return base.name +} + +func (base baseState) Transition(s state) error { + if s == base.parser.ground { + execBytes := []byte{0x18} + execBytes = append(execBytes, 0x1A) + execBytes = append(execBytes, getByteRange(0x80, 0x8F)...) + execBytes = append(execBytes, getByteRange(0x91, 0x97)...) + execBytes = append(execBytes, 0x99) + execBytes = append(execBytes, 0x9A) + + if sliceContains(execBytes, base.parser.context.currentChar) { + return base.parser.execute() + } + } + + return nil +} + +type dcsEntryState struct { + baseState +} + +type errorState struct { + baseState +} diff --git a/vendor/github.com/Azure/go-ansiterm/utilities.go b/vendor/github.com/Azure/go-ansiterm/utilities.go new file mode 100644 index 00000000..39211449 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/utilities.go @@ -0,0 +1,21 @@ +package ansiterm + +import ( + "strconv" +) + +func sliceContains(bytes []byte, b byte) bool { + for _, v := range bytes { + if v == b { + return true + } + } + + return false +} + +func convertBytesToInteger(bytes []byte) int { + s := string(bytes) + i, _ := strconv.Atoi(s) + return i +} diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/ansi.go b/vendor/github.com/Azure/go-ansiterm/winterm/ansi.go new file mode 100644 index 00000000..daf2f069 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/winterm/ansi.go @@ -0,0 +1,182 @@ +// +build windows + +package winterm + +import ( + "fmt" + "os" + "strconv" + "strings" + "syscall" + + "github.com/Azure/go-ansiterm" +) + +// Windows keyboard constants +// See https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx. +const ( + VK_PRIOR = 0x21 // PAGE UP key + VK_NEXT = 0x22 // PAGE DOWN key + VK_END = 0x23 // END key + VK_HOME = 0x24 // HOME key + VK_LEFT = 0x25 // LEFT ARROW key + VK_UP = 0x26 // UP ARROW key + VK_RIGHT = 0x27 // RIGHT ARROW key + VK_DOWN = 0x28 // DOWN ARROW key + VK_SELECT = 0x29 // SELECT key + VK_PRINT = 0x2A // PRINT key + VK_EXECUTE = 0x2B // EXECUTE key + VK_SNAPSHOT = 0x2C // PRINT SCREEN key + VK_INSERT = 0x2D // INS key + VK_DELETE = 0x2E // DEL key + VK_HELP = 0x2F // HELP key + VK_F1 = 0x70 // F1 key + VK_F2 = 0x71 // F2 key + VK_F3 = 0x72 // F3 key + VK_F4 = 0x73 // F4 key + VK_F5 = 0x74 // F5 key + VK_F6 = 0x75 // F6 key + VK_F7 = 0x76 // F7 key + VK_F8 = 0x77 // F8 key + VK_F9 = 0x78 // F9 key + VK_F10 = 0x79 // F10 key + VK_F11 = 0x7A // F11 key + VK_F12 = 0x7B // F12 key + + RIGHT_ALT_PRESSED = 0x0001 + LEFT_ALT_PRESSED = 0x0002 + RIGHT_CTRL_PRESSED = 0x0004 + LEFT_CTRL_PRESSED = 0x0008 + SHIFT_PRESSED = 0x0010 + NUMLOCK_ON = 0x0020 + SCROLLLOCK_ON = 0x0040 + CAPSLOCK_ON = 0x0080 + ENHANCED_KEY = 0x0100 +) + +type ansiCommand struct { + CommandBytes []byte + Command string + Parameters []string + IsSpecial bool +} + +func newAnsiCommand(command []byte) *ansiCommand { + + if isCharacterSelectionCmdChar(command[1]) { + // Is Character Set Selection commands + return &ansiCommand{ + CommandBytes: command, + Command: string(command), + IsSpecial: true, + } + } + + // last char is command character + lastCharIndex := len(command) - 1 + + ac := &ansiCommand{ + CommandBytes: command, + Command: string(command[lastCharIndex]), + IsSpecial: false, + } + + // more than a single escape + if lastCharIndex != 0 { + start := 1 + // skip if double char escape sequence + if command[0] == ansiterm.ANSI_ESCAPE_PRIMARY && command[1] == ansiterm.ANSI_ESCAPE_SECONDARY { + start++ + } + // convert this to GetNextParam method + ac.Parameters = strings.Split(string(command[start:lastCharIndex]), ansiterm.ANSI_PARAMETER_SEP) + } + + return ac +} + +func (ac *ansiCommand) paramAsSHORT(index int, defaultValue int16) int16 { + if index < 0 || index >= len(ac.Parameters) { + return defaultValue + } + + param, err := strconv.ParseInt(ac.Parameters[index], 10, 16) + if err != nil { + return defaultValue + } + + return int16(param) +} + +func (ac *ansiCommand) String() string { + return fmt.Sprintf("0x%v \"%v\" (\"%v\")", + bytesToHex(ac.CommandBytes), + ac.Command, + strings.Join(ac.Parameters, "\",\"")) +} + +// isAnsiCommandChar returns true if the passed byte falls within the range of ANSI commands. +// See http://manpages.ubuntu.com/manpages/intrepid/man4/console_codes.4.html. +func isAnsiCommandChar(b byte) bool { + switch { + case ansiterm.ANSI_COMMAND_FIRST <= b && b <= ansiterm.ANSI_COMMAND_LAST && b != ansiterm.ANSI_ESCAPE_SECONDARY: + return true + case b == ansiterm.ANSI_CMD_G1 || b == ansiterm.ANSI_CMD_OSC || b == ansiterm.ANSI_CMD_DECPAM || b == ansiterm.ANSI_CMD_DECPNM: + // non-CSI escape sequence terminator + return true + case b == ansiterm.ANSI_CMD_STR_TERM || b == ansiterm.ANSI_BEL: + // String escape sequence terminator + return true + } + return false +} + +func isXtermOscSequence(command []byte, current byte) bool { + return (len(command) >= 2 && command[0] == ansiterm.ANSI_ESCAPE_PRIMARY && command[1] == ansiterm.ANSI_CMD_OSC && current != ansiterm.ANSI_BEL) +} + +func isCharacterSelectionCmdChar(b byte) bool { + return (b == ansiterm.ANSI_CMD_G0 || b == ansiterm.ANSI_CMD_G1 || b == ansiterm.ANSI_CMD_G2 || b == ansiterm.ANSI_CMD_G3) +} + +// bytesToHex converts a slice of bytes to a human-readable string. +func bytesToHex(b []byte) string { + hex := make([]string, len(b)) + for i, ch := range b { + hex[i] = fmt.Sprintf("%X", ch) + } + return strings.Join(hex, "") +} + +// ensureInRange adjusts the passed value, if necessary, to ensure it is within +// the passed min / max range. +func ensureInRange(n int16, min int16, max int16) int16 { + if n < min { + return min + } else if n > max { + return max + } else { + return n + } +} + +func GetStdFile(nFile int) (*os.File, uintptr) { + var file *os.File + switch nFile { + case syscall.STD_INPUT_HANDLE: + file = os.Stdin + case syscall.STD_OUTPUT_HANDLE: + file = os.Stdout + case syscall.STD_ERROR_HANDLE: + file = os.Stderr + default: + panic(fmt.Errorf("Invalid standard handle identifier: %v", nFile)) + } + + fd, err := syscall.GetStdHandle(nFile) + if err != nil { + panic(fmt.Errorf("Invalid standard handle indentifier: %v -- %v", nFile, err)) + } + + return file, uintptr(fd) +} diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/api.go b/vendor/github.com/Azure/go-ansiterm/winterm/api.go new file mode 100644 index 00000000..462d92f8 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/winterm/api.go @@ -0,0 +1,322 @@ +// +build windows + +package winterm + +import ( + "fmt" + "syscall" + "unsafe" +) + +//=========================================================================================================== +// IMPORTANT NOTE: +// +// The methods below make extensive use of the "unsafe" package to obtain the required pointers. +// Beginning in Go 1.3, the garbage collector may release local variables (e.g., incoming arguments, stack +// variables) the pointers reference *before* the API completes. +// +// As a result, in those cases, the code must hint that the variables remain in active by invoking the +// dummy method "use" (see below). Newer versions of Go are planned to change the mechanism to no longer +// require unsafe pointers. +// +// If you add or modify methods, ENSURE protection of local variables through the "use" builtin to inform +// the garbage collector the variables remain in use if: +// +// -- The value is not a pointer (e.g., int32, struct) +// -- The value is not referenced by the method after passing the pointer to Windows +// +// See http://golang.org/doc/go1.3. +//=========================================================================================================== + +var ( + kernel32DLL = syscall.NewLazyDLL("kernel32.dll") + + getConsoleCursorInfoProc = kernel32DLL.NewProc("GetConsoleCursorInfo") + setConsoleCursorInfoProc = kernel32DLL.NewProc("SetConsoleCursorInfo") + setConsoleCursorPositionProc = kernel32DLL.NewProc("SetConsoleCursorPosition") + setConsoleModeProc = kernel32DLL.NewProc("SetConsoleMode") + getConsoleScreenBufferInfoProc = kernel32DLL.NewProc("GetConsoleScreenBufferInfo") + setConsoleScreenBufferSizeProc = kernel32DLL.NewProc("SetConsoleScreenBufferSize") + scrollConsoleScreenBufferProc = kernel32DLL.NewProc("ScrollConsoleScreenBufferA") + setConsoleTextAttributeProc = kernel32DLL.NewProc("SetConsoleTextAttribute") + setConsoleWindowInfoProc = kernel32DLL.NewProc("SetConsoleWindowInfo") + writeConsoleOutputProc = kernel32DLL.NewProc("WriteConsoleOutputW") + readConsoleInputProc = kernel32DLL.NewProc("ReadConsoleInputW") + waitForSingleObjectProc = kernel32DLL.NewProc("WaitForSingleObject") +) + +// Windows Console constants +const ( + // Console modes + // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx. + ENABLE_PROCESSED_INPUT = 0x0001 + ENABLE_LINE_INPUT = 0x0002 + ENABLE_ECHO_INPUT = 0x0004 + ENABLE_WINDOW_INPUT = 0x0008 + ENABLE_MOUSE_INPUT = 0x0010 + ENABLE_INSERT_MODE = 0x0020 + ENABLE_QUICK_EDIT_MODE = 0x0040 + ENABLE_EXTENDED_FLAGS = 0x0080 + + ENABLE_PROCESSED_OUTPUT = 0x0001 + ENABLE_WRAP_AT_EOL_OUTPUT = 0x0002 + + // Character attributes + // Note: + // -- The attributes are combined to produce various colors (e.g., Blue + Green will create Cyan). + // Clearing all foreground or background colors results in black; setting all creates white. + // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms682088(v=vs.85).aspx#_win32_character_attributes. + FOREGROUND_BLUE uint16 = 0x0001 + FOREGROUND_GREEN uint16 = 0x0002 + FOREGROUND_RED uint16 = 0x0004 + FOREGROUND_INTENSITY uint16 = 0x0008 + FOREGROUND_MASK uint16 = 0x000F + + BACKGROUND_BLUE uint16 = 0x0010 + BACKGROUND_GREEN uint16 = 0x0020 + BACKGROUND_RED uint16 = 0x0040 + BACKGROUND_INTENSITY uint16 = 0x0080 + BACKGROUND_MASK uint16 = 0x00F0 + + COMMON_LVB_MASK uint16 = 0xFF00 + COMMON_LVB_REVERSE_VIDEO uint16 = 0x4000 + COMMON_LVB_UNDERSCORE uint16 = 0x8000 + + // Input event types + // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683499(v=vs.85).aspx. + KEY_EVENT = 0x0001 + MOUSE_EVENT = 0x0002 + WINDOW_BUFFER_SIZE_EVENT = 0x0004 + MENU_EVENT = 0x0008 + FOCUS_EVENT = 0x0010 + + // WaitForSingleObject return codes + WAIT_ABANDONED = 0x00000080 + WAIT_FAILED = 0xFFFFFFFF + WAIT_SIGNALED = 0x0000000 + WAIT_TIMEOUT = 0x00000102 + + // WaitForSingleObject wait duration + WAIT_INFINITE = 0xFFFFFFFF + WAIT_ONE_SECOND = 1000 + WAIT_HALF_SECOND = 500 + WAIT_QUARTER_SECOND = 250 +) + +// Windows API Console types +// -- See https://msdn.microsoft.com/en-us/library/windows/desktop/ms682101(v=vs.85).aspx for Console specific types (e.g., COORD) +// -- See https://msdn.microsoft.com/en-us/library/aa296569(v=vs.60).aspx for comments on alignment +type ( + CHAR_INFO struct { + UnicodeChar uint16 + Attributes uint16 + } + + CONSOLE_CURSOR_INFO struct { + Size uint32 + Visible int32 + } + + CONSOLE_SCREEN_BUFFER_INFO struct { + Size COORD + CursorPosition COORD + Attributes uint16 + Window SMALL_RECT + MaximumWindowSize COORD + } + + COORD struct { + X int16 + Y int16 + } + + SMALL_RECT struct { + Left int16 + Top int16 + Right int16 + Bottom int16 + } + + // INPUT_RECORD is a C/C++ union of which KEY_EVENT_RECORD is one case, it is also the largest + // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683499(v=vs.85).aspx. + INPUT_RECORD struct { + EventType uint16 + KeyEvent KEY_EVENT_RECORD + } + + KEY_EVENT_RECORD struct { + KeyDown int32 + RepeatCount uint16 + VirtualKeyCode uint16 + VirtualScanCode uint16 + UnicodeChar uint16 + ControlKeyState uint32 + } + + WINDOW_BUFFER_SIZE struct { + Size COORD + } +) + +// boolToBOOL converts a Go bool into a Windows int32. +func boolToBOOL(f bool) int32 { + if f { + return int32(1) + } else { + return int32(0) + } +} + +// GetConsoleCursorInfo retrieves information about the size and visiblity of the console cursor. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683163(v=vs.85).aspx. +func GetConsoleCursorInfo(handle uintptr, cursorInfo *CONSOLE_CURSOR_INFO) error { + r1, r2, err := getConsoleCursorInfoProc.Call(handle, uintptr(unsafe.Pointer(cursorInfo)), 0) + return checkError(r1, r2, err) +} + +// SetConsoleCursorInfo sets the size and visiblity of the console cursor. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686019(v=vs.85).aspx. +func SetConsoleCursorInfo(handle uintptr, cursorInfo *CONSOLE_CURSOR_INFO) error { + r1, r2, err := setConsoleCursorInfoProc.Call(handle, uintptr(unsafe.Pointer(cursorInfo)), 0) + return checkError(r1, r2, err) +} + +// SetConsoleCursorPosition location of the console cursor. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686025(v=vs.85).aspx. +func SetConsoleCursorPosition(handle uintptr, coord COORD) error { + r1, r2, err := setConsoleCursorPositionProc.Call(handle, coordToPointer(coord)) + use(coord) + return checkError(r1, r2, err) +} + +// GetConsoleMode gets the console mode for given file descriptor +// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms683167(v=vs.85).aspx. +func GetConsoleMode(handle uintptr) (mode uint32, err error) { + err = syscall.GetConsoleMode(syscall.Handle(handle), &mode) + return mode, err +} + +// SetConsoleMode sets the console mode for given file descriptor +// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx. +func SetConsoleMode(handle uintptr, mode uint32) error { + r1, r2, err := setConsoleModeProc.Call(handle, uintptr(mode), 0) + use(mode) + return checkError(r1, r2, err) +} + +// GetConsoleScreenBufferInfo retrieves information about the specified console screen buffer. +// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms683171(v=vs.85).aspx. +func GetConsoleScreenBufferInfo(handle uintptr) (*CONSOLE_SCREEN_BUFFER_INFO, error) { + info := CONSOLE_SCREEN_BUFFER_INFO{} + err := checkError(getConsoleScreenBufferInfoProc.Call(handle, uintptr(unsafe.Pointer(&info)), 0)) + if err != nil { + return nil, err + } + return &info, nil +} + +func ScrollConsoleScreenBuffer(handle uintptr, scrollRect SMALL_RECT, clipRect SMALL_RECT, destOrigin COORD, char CHAR_INFO) error { + r1, r2, err := scrollConsoleScreenBufferProc.Call(handle, uintptr(unsafe.Pointer(&scrollRect)), uintptr(unsafe.Pointer(&clipRect)), coordToPointer(destOrigin), uintptr(unsafe.Pointer(&char))) + use(scrollRect) + use(clipRect) + use(destOrigin) + use(char) + return checkError(r1, r2, err) +} + +// SetConsoleScreenBufferSize sets the size of the console screen buffer. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686044(v=vs.85).aspx. +func SetConsoleScreenBufferSize(handle uintptr, coord COORD) error { + r1, r2, err := setConsoleScreenBufferSizeProc.Call(handle, coordToPointer(coord)) + use(coord) + return checkError(r1, r2, err) +} + +// SetConsoleTextAttribute sets the attributes of characters written to the +// console screen buffer by the WriteFile or WriteConsole function. +// See http://msdn.microsoft.com/en-us/library/windows/desktop/ms686047(v=vs.85).aspx. +func SetConsoleTextAttribute(handle uintptr, attribute uint16) error { + r1, r2, err := setConsoleTextAttributeProc.Call(handle, uintptr(attribute), 0) + use(attribute) + return checkError(r1, r2, err) +} + +// SetConsoleWindowInfo sets the size and position of the console screen buffer's window. +// Note that the size and location must be within and no larger than the backing console screen buffer. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms686125(v=vs.85).aspx. +func SetConsoleWindowInfo(handle uintptr, isAbsolute bool, rect SMALL_RECT) error { + r1, r2, err := setConsoleWindowInfoProc.Call(handle, uintptr(boolToBOOL(isAbsolute)), uintptr(unsafe.Pointer(&rect))) + use(isAbsolute) + use(rect) + return checkError(r1, r2, err) +} + +// WriteConsoleOutput writes the CHAR_INFOs from the provided buffer to the active console buffer. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms687404(v=vs.85).aspx. +func WriteConsoleOutput(handle uintptr, buffer []CHAR_INFO, bufferSize COORD, bufferCoord COORD, writeRegion *SMALL_RECT) error { + r1, r2, err := writeConsoleOutputProc.Call(handle, uintptr(unsafe.Pointer(&buffer[0])), coordToPointer(bufferSize), coordToPointer(bufferCoord), uintptr(unsafe.Pointer(writeRegion))) + use(buffer) + use(bufferSize) + use(bufferCoord) + return checkError(r1, r2, err) +} + +// ReadConsoleInput reads (and removes) data from the console input buffer. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684961(v=vs.85).aspx. +func ReadConsoleInput(handle uintptr, buffer []INPUT_RECORD, count *uint32) error { + r1, r2, err := readConsoleInputProc.Call(handle, uintptr(unsafe.Pointer(&buffer[0])), uintptr(len(buffer)), uintptr(unsafe.Pointer(count))) + use(buffer) + return checkError(r1, r2, err) +} + +// WaitForSingleObject waits for the passed handle to be signaled. +// It returns true if the handle was signaled; false otherwise. +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms687032(v=vs.85).aspx. +func WaitForSingleObject(handle uintptr, msWait uint32) (bool, error) { + r1, _, err := waitForSingleObjectProc.Call(handle, uintptr(uint32(msWait))) + switch r1 { + case WAIT_ABANDONED, WAIT_TIMEOUT: + return false, nil + case WAIT_SIGNALED: + return true, nil + } + use(msWait) + return false, err +} + +// String helpers +func (info CONSOLE_SCREEN_BUFFER_INFO) String() string { + return fmt.Sprintf("Size(%v) Cursor(%v) Window(%v) Max(%v)", info.Size, info.CursorPosition, info.Window, info.MaximumWindowSize) +} + +func (coord COORD) String() string { + return fmt.Sprintf("%v,%v", coord.X, coord.Y) +} + +func (rect SMALL_RECT) String() string { + return fmt.Sprintf("(%v,%v),(%v,%v)", rect.Left, rect.Top, rect.Right, rect.Bottom) +} + +// checkError evaluates the results of a Windows API call and returns the error if it failed. +func checkError(r1, r2 uintptr, err error) error { + // Windows APIs return non-zero to indicate success + if r1 != 0 { + return nil + } + + // Return the error if provided, otherwise default to EINVAL + if err != nil { + return err + } + return syscall.EINVAL +} + +// coordToPointer converts a COORD into a uintptr (by fooling the type system). +func coordToPointer(c COORD) uintptr { + // Note: This code assumes the two SHORTs are correctly laid out; the "cast" to uint32 is just to get a pointer to pass. + return uintptr(*((*uint32)(unsafe.Pointer(&c)))) +} + +// use is a no-op, but the compiler cannot see that it is. +// Calling use(p) ensures that p is kept live until that point. +func use(p interface{}) {} diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/attr_translation.go b/vendor/github.com/Azure/go-ansiterm/winterm/attr_translation.go new file mode 100644 index 00000000..cbec8f72 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/winterm/attr_translation.go @@ -0,0 +1,100 @@ +// +build windows + +package winterm + +import "github.com/Azure/go-ansiterm" + +const ( + FOREGROUND_COLOR_MASK = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE + BACKGROUND_COLOR_MASK = BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE +) + +// collectAnsiIntoWindowsAttributes modifies the passed Windows text mode flags to reflect the +// request represented by the passed ANSI mode. +func collectAnsiIntoWindowsAttributes(windowsMode uint16, inverted bool, baseMode uint16, ansiMode int16) (uint16, bool) { + switch ansiMode { + + // Mode styles + case ansiterm.ANSI_SGR_BOLD: + windowsMode = windowsMode | FOREGROUND_INTENSITY + + case ansiterm.ANSI_SGR_DIM, ansiterm.ANSI_SGR_BOLD_DIM_OFF: + windowsMode &^= FOREGROUND_INTENSITY + + case ansiterm.ANSI_SGR_UNDERLINE: + windowsMode = windowsMode | COMMON_LVB_UNDERSCORE + + case ansiterm.ANSI_SGR_REVERSE: + inverted = true + + case ansiterm.ANSI_SGR_REVERSE_OFF: + inverted = false + + case ansiterm.ANSI_SGR_UNDERLINE_OFF: + windowsMode &^= COMMON_LVB_UNDERSCORE + + // Foreground colors + case ansiterm.ANSI_SGR_FOREGROUND_DEFAULT: + windowsMode = (windowsMode &^ FOREGROUND_MASK) | (baseMode & FOREGROUND_MASK) + + case ansiterm.ANSI_SGR_FOREGROUND_BLACK: + windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) + + case ansiterm.ANSI_SGR_FOREGROUND_RED: + windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED + + case ansiterm.ANSI_SGR_FOREGROUND_GREEN: + windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_GREEN + + case ansiterm.ANSI_SGR_FOREGROUND_YELLOW: + windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_GREEN + + case ansiterm.ANSI_SGR_FOREGROUND_BLUE: + windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_BLUE + + case ansiterm.ANSI_SGR_FOREGROUND_MAGENTA: + windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_BLUE + + case ansiterm.ANSI_SGR_FOREGROUND_CYAN: + windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_GREEN | FOREGROUND_BLUE + + case ansiterm.ANSI_SGR_FOREGROUND_WHITE: + windowsMode = (windowsMode &^ FOREGROUND_COLOR_MASK) | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE + + // Background colors + case ansiterm.ANSI_SGR_BACKGROUND_DEFAULT: + // Black with no intensity + windowsMode = (windowsMode &^ BACKGROUND_MASK) | (baseMode & BACKGROUND_MASK) + + case ansiterm.ANSI_SGR_BACKGROUND_BLACK: + windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) + + case ansiterm.ANSI_SGR_BACKGROUND_RED: + windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED + + case ansiterm.ANSI_SGR_BACKGROUND_GREEN: + windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_GREEN + + case ansiterm.ANSI_SGR_BACKGROUND_YELLOW: + windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_GREEN + + case ansiterm.ANSI_SGR_BACKGROUND_BLUE: + windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_BLUE + + case ansiterm.ANSI_SGR_BACKGROUND_MAGENTA: + windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_BLUE + + case ansiterm.ANSI_SGR_BACKGROUND_CYAN: + windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_GREEN | BACKGROUND_BLUE + + case ansiterm.ANSI_SGR_BACKGROUND_WHITE: + windowsMode = (windowsMode &^ BACKGROUND_COLOR_MASK) | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE + } + + return windowsMode, inverted +} + +// invertAttributes inverts the foreground and background colors of a Windows attributes value +func invertAttributes(windowsMode uint16) uint16 { + return (COMMON_LVB_MASK & windowsMode) | ((FOREGROUND_MASK & windowsMode) << 4) | ((BACKGROUND_MASK & windowsMode) >> 4) +} diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go b/vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go new file mode 100644 index 00000000..f015723a --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/winterm/cursor_helpers.go @@ -0,0 +1,101 @@ +// +build windows + +package winterm + +const ( + horizontal = iota + vertical +) + +func (h *windowsAnsiEventHandler) getCursorWindow(info *CONSOLE_SCREEN_BUFFER_INFO) SMALL_RECT { + if h.originMode { + sr := h.effectiveSr(info.Window) + return SMALL_RECT{ + Top: sr.top, + Bottom: sr.bottom, + Left: 0, + Right: info.Size.X - 1, + } + } else { + return SMALL_RECT{ + Top: info.Window.Top, + Bottom: info.Window.Bottom, + Left: 0, + Right: info.Size.X - 1, + } + } +} + +// setCursorPosition sets the cursor to the specified position, bounded to the screen size +func (h *windowsAnsiEventHandler) setCursorPosition(position COORD, window SMALL_RECT) error { + position.X = ensureInRange(position.X, window.Left, window.Right) + position.Y = ensureInRange(position.Y, window.Top, window.Bottom) + err := SetConsoleCursorPosition(h.fd, position) + if err != nil { + return err + } + logger.Infof("Cursor position set: (%d, %d)", position.X, position.Y) + return err +} + +func (h *windowsAnsiEventHandler) moveCursorVertical(param int) error { + return h.moveCursor(vertical, param) +} + +func (h *windowsAnsiEventHandler) moveCursorHorizontal(param int) error { + return h.moveCursor(horizontal, param) +} + +func (h *windowsAnsiEventHandler) moveCursor(moveMode int, param int) error { + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + position := info.CursorPosition + switch moveMode { + case horizontal: + position.X += int16(param) + case vertical: + position.Y += int16(param) + } + + if err = h.setCursorPosition(position, h.getCursorWindow(info)); err != nil { + return err + } + + return nil +} + +func (h *windowsAnsiEventHandler) moveCursorLine(param int) error { + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + position := info.CursorPosition + position.X = 0 + position.Y += int16(param) + + if err = h.setCursorPosition(position, h.getCursorWindow(info)); err != nil { + return err + } + + return nil +} + +func (h *windowsAnsiEventHandler) moveCursorColumn(param int) error { + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + position := info.CursorPosition + position.X = int16(param) - 1 + + if err = h.setCursorPosition(position, h.getCursorWindow(info)); err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/erase_helpers.go b/vendor/github.com/Azure/go-ansiterm/winterm/erase_helpers.go new file mode 100644 index 00000000..244b5fa2 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/winterm/erase_helpers.go @@ -0,0 +1,84 @@ +// +build windows + +package winterm + +import "github.com/Azure/go-ansiterm" + +func (h *windowsAnsiEventHandler) clearRange(attributes uint16, fromCoord COORD, toCoord COORD) error { + // Ignore an invalid (negative area) request + if toCoord.Y < fromCoord.Y { + return nil + } + + var err error + + var coordStart = COORD{} + var coordEnd = COORD{} + + xCurrent, yCurrent := fromCoord.X, fromCoord.Y + xEnd, yEnd := toCoord.X, toCoord.Y + + // Clear any partial initial line + if xCurrent > 0 { + coordStart.X, coordStart.Y = xCurrent, yCurrent + coordEnd.X, coordEnd.Y = xEnd, yCurrent + + err = h.clearRect(attributes, coordStart, coordEnd) + if err != nil { + return err + } + + xCurrent = 0 + yCurrent += 1 + } + + // Clear intervening rectangular section + if yCurrent < yEnd { + coordStart.X, coordStart.Y = xCurrent, yCurrent + coordEnd.X, coordEnd.Y = xEnd, yEnd-1 + + err = h.clearRect(attributes, coordStart, coordEnd) + if err != nil { + return err + } + + xCurrent = 0 + yCurrent = yEnd + } + + // Clear remaining partial ending line + coordStart.X, coordStart.Y = xCurrent, yCurrent + coordEnd.X, coordEnd.Y = xEnd, yEnd + + err = h.clearRect(attributes, coordStart, coordEnd) + if err != nil { + return err + } + + return nil +} + +func (h *windowsAnsiEventHandler) clearRect(attributes uint16, fromCoord COORD, toCoord COORD) error { + region := SMALL_RECT{Top: fromCoord.Y, Left: fromCoord.X, Bottom: toCoord.Y, Right: toCoord.X} + width := toCoord.X - fromCoord.X + 1 + height := toCoord.Y - fromCoord.Y + 1 + size := uint32(width) * uint32(height) + + if size <= 0 { + return nil + } + + buffer := make([]CHAR_INFO, size) + + char := CHAR_INFO{ansiterm.FILL_CHARACTER, attributes} + for i := 0; i < int(size); i++ { + buffer[i] = char + } + + err := WriteConsoleOutput(h.fd, buffer, COORD{X: width, Y: height}, COORD{X: 0, Y: 0}, ®ion) + if err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go b/vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go new file mode 100644 index 00000000..706d2705 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/winterm/scroll_helper.go @@ -0,0 +1,118 @@ +// +build windows + +package winterm + +// effectiveSr gets the current effective scroll region in buffer coordinates +func (h *windowsAnsiEventHandler) effectiveSr(window SMALL_RECT) scrollRegion { + top := addInRange(window.Top, h.sr.top, window.Top, window.Bottom) + bottom := addInRange(window.Top, h.sr.bottom, window.Top, window.Bottom) + if top >= bottom { + top = window.Top + bottom = window.Bottom + } + return scrollRegion{top: top, bottom: bottom} +} + +func (h *windowsAnsiEventHandler) scrollUp(param int) error { + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + sr := h.effectiveSr(info.Window) + return h.scroll(param, sr, info) +} + +func (h *windowsAnsiEventHandler) scrollDown(param int) error { + return h.scrollUp(-param) +} + +func (h *windowsAnsiEventHandler) deleteLines(param int) error { + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + start := info.CursorPosition.Y + sr := h.effectiveSr(info.Window) + // Lines cannot be inserted or deleted outside the scrolling region. + if start >= sr.top && start <= sr.bottom { + sr.top = start + return h.scroll(param, sr, info) + } else { + return nil + } +} + +func (h *windowsAnsiEventHandler) insertLines(param int) error { + return h.deleteLines(-param) +} + +// scroll scrolls the provided scroll region by param lines. The scroll region is in buffer coordinates. +func (h *windowsAnsiEventHandler) scroll(param int, sr scrollRegion, info *CONSOLE_SCREEN_BUFFER_INFO) error { + logger.Infof("scroll: scrollTop: %d, scrollBottom: %d", sr.top, sr.bottom) + logger.Infof("scroll: windowTop: %d, windowBottom: %d", info.Window.Top, info.Window.Bottom) + + // Copy from and clip to the scroll region (full buffer width) + scrollRect := SMALL_RECT{ + Top: sr.top, + Bottom: sr.bottom, + Left: 0, + Right: info.Size.X - 1, + } + + // Origin to which area should be copied + destOrigin := COORD{ + X: 0, + Y: sr.top - int16(param), + } + + char := CHAR_INFO{ + UnicodeChar: ' ', + Attributes: h.attributes, + } + + if err := ScrollConsoleScreenBuffer(h.fd, scrollRect, scrollRect, destOrigin, char); err != nil { + return err + } + return nil +} + +func (h *windowsAnsiEventHandler) deleteCharacters(param int) error { + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + return h.scrollLine(param, info.CursorPosition, info) +} + +func (h *windowsAnsiEventHandler) insertCharacters(param int) error { + return h.deleteCharacters(-param) +} + +// scrollLine scrolls a line horizontally starting at the provided position by a number of columns. +func (h *windowsAnsiEventHandler) scrollLine(columns int, position COORD, info *CONSOLE_SCREEN_BUFFER_INFO) error { + // Copy from and clip to the scroll region (full buffer width) + scrollRect := SMALL_RECT{ + Top: position.Y, + Bottom: position.Y, + Left: position.X, + Right: info.Size.X - 1, + } + + // Origin to which area should be copied + destOrigin := COORD{ + X: position.X - int16(columns), + Y: position.Y, + } + + char := CHAR_INFO{ + UnicodeChar: ' ', + Attributes: h.attributes, + } + + if err := ScrollConsoleScreenBuffer(h.fd, scrollRect, scrollRect, destOrigin, char); err != nil { + return err + } + return nil +} diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/utilities.go b/vendor/github.com/Azure/go-ansiterm/winterm/utilities.go new file mode 100644 index 00000000..afa7635d --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/winterm/utilities.go @@ -0,0 +1,9 @@ +// +build windows + +package winterm + +// AddInRange increments a value by the passed quantity while ensuring the values +// always remain within the supplied min / max range. +func addInRange(n int16, increment int16, min int16, max int16) int16 { + return ensureInRange(n+increment, min, max) +} diff --git a/vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go b/vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go new file mode 100644 index 00000000..4d858ed6 --- /dev/null +++ b/vendor/github.com/Azure/go-ansiterm/winterm/win_event_handler.go @@ -0,0 +1,726 @@ +// +build windows + +package winterm + +import ( + "bytes" + "io/ioutil" + "os" + "strconv" + + "github.com/Azure/go-ansiterm" + "github.com/Sirupsen/logrus" +) + +var logger *logrus.Logger + +type windowsAnsiEventHandler struct { + fd uintptr + file *os.File + infoReset *CONSOLE_SCREEN_BUFFER_INFO + sr scrollRegion + buffer bytes.Buffer + attributes uint16 + inverted bool + wrapNext bool + drewMarginByte bool + originMode bool + marginByte byte + curInfo *CONSOLE_SCREEN_BUFFER_INFO + curPos COORD +} + +func CreateWinEventHandler(fd uintptr, file *os.File) ansiterm.AnsiEventHandler { + logFile := ioutil.Discard + + if isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == "1" { + logFile, _ = os.Create("winEventHandler.log") + } + + logger = &logrus.Logger{ + Out: logFile, + Formatter: new(logrus.TextFormatter), + Level: logrus.DebugLevel, + } + + infoReset, err := GetConsoleScreenBufferInfo(fd) + if err != nil { + return nil + } + + return &windowsAnsiEventHandler{ + fd: fd, + file: file, + infoReset: infoReset, + attributes: infoReset.Attributes, + } +} + +type scrollRegion struct { + top int16 + bottom int16 +} + +// simulateLF simulates a LF or CR+LF by scrolling if necessary to handle the +// current cursor position and scroll region settings, in which case it returns +// true. If no special handling is necessary, then it does nothing and returns +// false. +// +// In the false case, the caller should ensure that a carriage return +// and line feed are inserted or that the text is otherwise wrapped. +func (h *windowsAnsiEventHandler) simulateLF(includeCR bool) (bool, error) { + if h.wrapNext { + if err := h.Flush(); err != nil { + return false, err + } + h.clearWrap() + } + pos, info, err := h.getCurrentInfo() + if err != nil { + return false, err + } + sr := h.effectiveSr(info.Window) + if pos.Y == sr.bottom { + // Scrolling is necessary. Let Windows automatically scroll if the scrolling region + // is the full window. + if sr.top == info.Window.Top && sr.bottom == info.Window.Bottom { + if includeCR { + pos.X = 0 + h.updatePos(pos) + } + return false, nil + } + + // A custom scroll region is active. Scroll the window manually to simulate + // the LF. + if err := h.Flush(); err != nil { + return false, err + } + logger.Info("Simulating LF inside scroll region") + if err := h.scrollUp(1); err != nil { + return false, err + } + if includeCR { + pos.X = 0 + if err := SetConsoleCursorPosition(h.fd, pos); err != nil { + return false, err + } + } + return true, nil + + } else if pos.Y < info.Window.Bottom { + // Let Windows handle the LF. + pos.Y++ + if includeCR { + pos.X = 0 + } + h.updatePos(pos) + return false, nil + } else { + // The cursor is at the bottom of the screen but outside the scroll + // region. Skip the LF. + logger.Info("Simulating LF outside scroll region") + if includeCR { + if err := h.Flush(); err != nil { + return false, err + } + pos.X = 0 + if err := SetConsoleCursorPosition(h.fd, pos); err != nil { + return false, err + } + } + return true, nil + } +} + +// executeLF executes a LF without a CR. +func (h *windowsAnsiEventHandler) executeLF() error { + handled, err := h.simulateLF(false) + if err != nil { + return err + } + if !handled { + // Windows LF will reset the cursor column position. Write the LF + // and restore the cursor position. + pos, _, err := h.getCurrentInfo() + if err != nil { + return err + } + h.buffer.WriteByte(ansiterm.ANSI_LINE_FEED) + if pos.X != 0 { + if err := h.Flush(); err != nil { + return err + } + logger.Info("Resetting cursor position for LF without CR") + if err := SetConsoleCursorPosition(h.fd, pos); err != nil { + return err + } + } + } + return nil +} + +func (h *windowsAnsiEventHandler) Print(b byte) error { + if h.wrapNext { + h.buffer.WriteByte(h.marginByte) + h.clearWrap() + if _, err := h.simulateLF(true); err != nil { + return err + } + } + pos, info, err := h.getCurrentInfo() + if err != nil { + return err + } + if pos.X == info.Size.X-1 { + h.wrapNext = true + h.marginByte = b + } else { + pos.X++ + h.updatePos(pos) + h.buffer.WriteByte(b) + } + return nil +} + +func (h *windowsAnsiEventHandler) Execute(b byte) error { + switch b { + case ansiterm.ANSI_TAB: + logger.Info("Execute(TAB)") + // Move to the next tab stop, but preserve auto-wrap if already set. + if !h.wrapNext { + pos, info, err := h.getCurrentInfo() + if err != nil { + return err + } + pos.X = (pos.X + 8) - pos.X%8 + if pos.X >= info.Size.X { + pos.X = info.Size.X - 1 + } + if err := h.Flush(); err != nil { + return err + } + if err := SetConsoleCursorPosition(h.fd, pos); err != nil { + return err + } + } + return nil + + case ansiterm.ANSI_BEL: + h.buffer.WriteByte(ansiterm.ANSI_BEL) + return nil + + case ansiterm.ANSI_BACKSPACE: + if h.wrapNext { + if err := h.Flush(); err != nil { + return err + } + h.clearWrap() + } + pos, _, err := h.getCurrentInfo() + if err != nil { + return err + } + if pos.X > 0 { + pos.X-- + h.updatePos(pos) + h.buffer.WriteByte(ansiterm.ANSI_BACKSPACE) + } + return nil + + case ansiterm.ANSI_VERTICAL_TAB, ansiterm.ANSI_FORM_FEED: + // Treat as true LF. + return h.executeLF() + + case ansiterm.ANSI_LINE_FEED: + // Simulate a CR and LF for now since there is no way in go-ansiterm + // to tell if the LF should include CR (and more things break when it's + // missing than when it's incorrectly added). + handled, err := h.simulateLF(true) + if handled || err != nil { + return err + } + return h.buffer.WriteByte(ansiterm.ANSI_LINE_FEED) + + case ansiterm.ANSI_CARRIAGE_RETURN: + if h.wrapNext { + if err := h.Flush(); err != nil { + return err + } + h.clearWrap() + } + pos, _, err := h.getCurrentInfo() + if err != nil { + return err + } + if pos.X != 0 { + pos.X = 0 + h.updatePos(pos) + h.buffer.WriteByte(ansiterm.ANSI_CARRIAGE_RETURN) + } + return nil + + default: + return nil + } +} + +func (h *windowsAnsiEventHandler) CUU(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("CUU: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.moveCursorVertical(-param) +} + +func (h *windowsAnsiEventHandler) CUD(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("CUD: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.moveCursorVertical(param) +} + +func (h *windowsAnsiEventHandler) CUF(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("CUF: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.moveCursorHorizontal(param) +} + +func (h *windowsAnsiEventHandler) CUB(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("CUB: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.moveCursorHorizontal(-param) +} + +func (h *windowsAnsiEventHandler) CNL(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("CNL: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.moveCursorLine(param) +} + +func (h *windowsAnsiEventHandler) CPL(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("CPL: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.moveCursorLine(-param) +} + +func (h *windowsAnsiEventHandler) CHA(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("CHA: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.moveCursorColumn(param) +} + +func (h *windowsAnsiEventHandler) VPA(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("VPA: [[%d]]", param) + h.clearWrap() + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + window := h.getCursorWindow(info) + position := info.CursorPosition + position.Y = window.Top + int16(param) - 1 + return h.setCursorPosition(position, window) +} + +func (h *windowsAnsiEventHandler) CUP(row int, col int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("CUP: [[%d %d]]", row, col) + h.clearWrap() + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + window := h.getCursorWindow(info) + position := COORD{window.Left + int16(col) - 1, window.Top + int16(row) - 1} + return h.setCursorPosition(position, window) +} + +func (h *windowsAnsiEventHandler) HVP(row int, col int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("HVP: [[%d %d]]", row, col) + h.clearWrap() + return h.CUP(row, col) +} + +func (h *windowsAnsiEventHandler) DECTCEM(visible bool) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("DECTCEM: [%v]", []string{strconv.FormatBool(visible)}) + h.clearWrap() + return nil +} + +func (h *windowsAnsiEventHandler) DECOM(enable bool) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("DECOM: [%v]", []string{strconv.FormatBool(enable)}) + h.clearWrap() + h.originMode = enable + return h.CUP(1, 1) +} + +func (h *windowsAnsiEventHandler) DECCOLM(use132 bool) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("DECCOLM: [%v]", []string{strconv.FormatBool(use132)}) + h.clearWrap() + if err := h.ED(2); err != nil { + return err + } + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + targetWidth := int16(80) + if use132 { + targetWidth = 132 + } + if info.Size.X < targetWidth { + if err := SetConsoleScreenBufferSize(h.fd, COORD{targetWidth, info.Size.Y}); err != nil { + logger.Info("set buffer failed:", err) + return err + } + } + window := info.Window + window.Left = 0 + window.Right = targetWidth - 1 + if err := SetConsoleWindowInfo(h.fd, true, window); err != nil { + logger.Info("set window failed:", err) + return err + } + if info.Size.X > targetWidth { + if err := SetConsoleScreenBufferSize(h.fd, COORD{targetWidth, info.Size.Y}); err != nil { + logger.Info("set buffer failed:", err) + return err + } + } + return SetConsoleCursorPosition(h.fd, COORD{0, 0}) +} + +func (h *windowsAnsiEventHandler) ED(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("ED: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + + // [J -- Erases from the cursor to the end of the screen, including the cursor position. + // [1J -- Erases from the beginning of the screen to the cursor, including the cursor position. + // [2J -- Erases the complete display. The cursor does not move. + // Notes: + // -- Clearing the entire buffer, versus just the Window, works best for Windows Consoles + + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + var start COORD + var end COORD + + switch param { + case 0: + start = info.CursorPosition + end = COORD{info.Size.X - 1, info.Size.Y - 1} + + case 1: + start = COORD{0, 0} + end = info.CursorPosition + + case 2: + start = COORD{0, 0} + end = COORD{info.Size.X - 1, info.Size.Y - 1} + } + + err = h.clearRange(h.attributes, start, end) + if err != nil { + return err + } + + // If the whole buffer was cleared, move the window to the top while preserving + // the window-relative cursor position. + if param == 2 { + pos := info.CursorPosition + window := info.Window + pos.Y -= window.Top + window.Bottom -= window.Top + window.Top = 0 + if err := SetConsoleCursorPosition(h.fd, pos); err != nil { + return err + } + if err := SetConsoleWindowInfo(h.fd, true, window); err != nil { + return err + } + } + + return nil +} + +func (h *windowsAnsiEventHandler) EL(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("EL: [%v]", strconv.Itoa(param)) + h.clearWrap() + + // [K -- Erases from the cursor to the end of the line, including the cursor position. + // [1K -- Erases from the beginning of the line to the cursor, including the cursor position. + // [2K -- Erases the complete line. + + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + var start COORD + var end COORD + + switch param { + case 0: + start = info.CursorPosition + end = COORD{info.Size.X, info.CursorPosition.Y} + + case 1: + start = COORD{0, info.CursorPosition.Y} + end = info.CursorPosition + + case 2: + start = COORD{0, info.CursorPosition.Y} + end = COORD{info.Size.X, info.CursorPosition.Y} + } + + err = h.clearRange(h.attributes, start, end) + if err != nil { + return err + } + + return nil +} + +func (h *windowsAnsiEventHandler) IL(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("IL: [%v]", strconv.Itoa(param)) + h.clearWrap() + return h.insertLines(param) +} + +func (h *windowsAnsiEventHandler) DL(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("DL: [%v]", strconv.Itoa(param)) + h.clearWrap() + return h.deleteLines(param) +} + +func (h *windowsAnsiEventHandler) ICH(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("ICH: [%v]", strconv.Itoa(param)) + h.clearWrap() + return h.insertCharacters(param) +} + +func (h *windowsAnsiEventHandler) DCH(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("DCH: [%v]", strconv.Itoa(param)) + h.clearWrap() + return h.deleteCharacters(param) +} + +func (h *windowsAnsiEventHandler) SGR(params []int) error { + if err := h.Flush(); err != nil { + return err + } + strings := []string{} + for _, v := range params { + strings = append(strings, strconv.Itoa(v)) + } + + logger.Infof("SGR: [%v]", strings) + + if len(params) <= 0 { + h.attributes = h.infoReset.Attributes + h.inverted = false + } else { + for _, attr := range params { + + if attr == ansiterm.ANSI_SGR_RESET { + h.attributes = h.infoReset.Attributes + h.inverted = false + continue + } + + h.attributes, h.inverted = collectAnsiIntoWindowsAttributes(h.attributes, h.inverted, h.infoReset.Attributes, int16(attr)) + } + } + + attributes := h.attributes + if h.inverted { + attributes = invertAttributes(attributes) + } + err := SetConsoleTextAttribute(h.fd, attributes) + if err != nil { + return err + } + + return nil +} + +func (h *windowsAnsiEventHandler) SU(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("SU: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.scrollUp(param) +} + +func (h *windowsAnsiEventHandler) SD(param int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("SD: [%v]", []string{strconv.Itoa(param)}) + h.clearWrap() + return h.scrollDown(param) +} + +func (h *windowsAnsiEventHandler) DA(params []string) error { + logger.Infof("DA: [%v]", params) + // DA cannot be implemented because it must send data on the VT100 input stream, + // which is not available to go-ansiterm. + return nil +} + +func (h *windowsAnsiEventHandler) DECSTBM(top int, bottom int) error { + if err := h.Flush(); err != nil { + return err + } + logger.Infof("DECSTBM: [%d, %d]", top, bottom) + + // Windows is 0 indexed, Linux is 1 indexed + h.sr.top = int16(top - 1) + h.sr.bottom = int16(bottom - 1) + + // This command also moves the cursor to the origin. + h.clearWrap() + return h.CUP(1, 1) +} + +func (h *windowsAnsiEventHandler) RI() error { + if err := h.Flush(); err != nil { + return err + } + logger.Info("RI: []") + h.clearWrap() + + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + sr := h.effectiveSr(info.Window) + if info.CursorPosition.Y == sr.top { + return h.scrollDown(1) + } + + return h.moveCursorVertical(-1) +} + +func (h *windowsAnsiEventHandler) IND() error { + logger.Info("IND: []") + return h.executeLF() +} + +func (h *windowsAnsiEventHandler) Flush() error { + h.curInfo = nil + if h.buffer.Len() > 0 { + logger.Infof("Flush: [%s]", h.buffer.Bytes()) + if _, err := h.buffer.WriteTo(h.file); err != nil { + return err + } + } + + if h.wrapNext && !h.drewMarginByte { + logger.Infof("Flush: drawing margin byte '%c'", h.marginByte) + + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return err + } + + charInfo := []CHAR_INFO{{UnicodeChar: uint16(h.marginByte), Attributes: info.Attributes}} + size := COORD{1, 1} + position := COORD{0, 0} + region := SMALL_RECT{Left: info.CursorPosition.X, Top: info.CursorPosition.Y, Right: info.CursorPosition.X, Bottom: info.CursorPosition.Y} + if err := WriteConsoleOutput(h.fd, charInfo, size, position, ®ion); err != nil { + return err + } + h.drewMarginByte = true + } + return nil +} + +// cacheConsoleInfo ensures that the current console screen information has been queried +// since the last call to Flush(). It must be called before accessing h.curInfo or h.curPos. +func (h *windowsAnsiEventHandler) getCurrentInfo() (COORD, *CONSOLE_SCREEN_BUFFER_INFO, error) { + if h.curInfo == nil { + info, err := GetConsoleScreenBufferInfo(h.fd) + if err != nil { + return COORD{}, nil, err + } + h.curInfo = info + h.curPos = info.CursorPosition + } + return h.curPos, h.curInfo, nil +} + +func (h *windowsAnsiEventHandler) updatePos(pos COORD) { + if h.curInfo == nil { + panic("failed to call getCurrentInfo before calling updatePos") + } + h.curPos = pos +} + +// clearWrap clears the state where the cursor is in the margin +// waiting for the next character before wrapping the line. This must +// be done before most operations that act on the cursor. +func (h *windowsAnsiEventHandler) clearWrap() { + h.wrapNext = false + h.drewMarginByte = false +} diff --git a/vendor/github.com/MakeNowJust/heredoc/LICENSE b/vendor/github.com/MakeNowJust/heredoc/LICENSE new file mode 100644 index 00000000..dd5aa7e8 --- /dev/null +++ b/vendor/github.com/MakeNowJust/heredoc/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 TSUYUSATO Kitsune + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/github.com/MakeNowJust/heredoc/README.md b/vendor/github.com/MakeNowJust/heredoc/README.md new file mode 100644 index 00000000..df12b43d --- /dev/null +++ b/vendor/github.com/MakeNowJust/heredoc/README.md @@ -0,0 +1,53 @@ +#heredoc [![Build Status](https://drone.io/github.com/MakeNowJust/heredoc/status.png)](https://drone.io/github.com/MakeNowJust/heredoc/latest) [![Go Walker](http://gowalker.org/api/v1/badge)](https://gowalker.org/github.com/MakeNowJust/heredoc) + +##About + +Package heredoc provides the here-document with keeping indent. + +##Install + +```console +$ go get github.com/MakeNowJust/heredoc +``` + +##Import + +```go +// usual +import "github.com/MakeNowJust/heredoc" +// shortcuts +import . "github.com/MakeNowJust/heredoc/dot" +``` + +##Example + +```go +package main + +import ( + "fmt" + . "github.com/MakeNowJust/heredoc/dot" +) + +func main() { + fmt.Println(D(` + Lorem ipsum dolor sit amet, consectetur adipisicing elit, + sed do eiusmod tempor incididunt ut labore et dolore magna + aliqua. Ut enim ad minim veniam, ... + `)) + // Output: + // Lorem ipsum dolor sit amet, consectetur adipisicing elit, + // sed do eiusmod tempor incididunt ut labore et dolore magna + // aliqua. Ut enim ad minim veniam, ... + // +} +``` + +##API Document + + - [Go Walker - github.com/MakeNowJust/heredoc](https://gowalker.org/github.com/MakeNowJust/heredoc) + - [Go Walker - github.com/MakeNowJust/heredoc/dot](https://gowalker.org/github.com/MakeNowJust/heredoc/dot) + +##License + +This software is released under the MIT License, see LICENSE. diff --git a/vendor/github.com/MakeNowJust/heredoc/heredoc.go b/vendor/github.com/MakeNowJust/heredoc/heredoc.go new file mode 100644 index 00000000..3978e30d --- /dev/null +++ b/vendor/github.com/MakeNowJust/heredoc/heredoc.go @@ -0,0 +1,89 @@ +// Copyright (c) 2014 TSUYUSATO Kitsune +// This software is released under the MIT License. +// http://opensource.org/licenses/mit-license.php + +// Package heredoc provides the here-document with keeping indent. +// +// Golang supports raw-string syntax. +// doc := ` +// Foo +// Bar +// ` +// But raw-string cannot recognize indent. Thus such content is indented string, equivalent to +// "\n\tFoo\n\tBar\n" +// I dont't want this! +// +// However this problem is solved by package heredoc. +// doc := heredoc.Doc(` +// Foo +// Bar +// `) +// It is equivalent to +// "Foo\nBar\n" +package heredoc + +import ( + "fmt" + "strings" + "unicode" +) + +// heredoc.Doc retutns unindented string as here-document. +// +// Process of making here-document: +// 1. Find most little indent size. (Skip empty lines) +// 2. Remove this indents of lines. +func Doc(raw string) string { + skipFirstLine := false + if raw[0] == '\n' { + raw = raw[1:] + } else { + skipFirstLine = true + } + + minIndentSize := int(^uint(0) >> 1) // Max value of type int + lines := strings.Split(raw, "\n") + + // 1. + for i, line := range lines { + if i == 0 && skipFirstLine { + continue + } + + indentSize := 0 + for _, r := range []rune(line) { + if unicode.IsSpace(r) { + indentSize += 1 + } else { + break + } + } + + if len(line) == indentSize { + if i == len(lines)-1 && indentSize < minIndentSize { + lines[i] = "" + } + } else if indentSize < minIndentSize { + minIndentSize = indentSize + } + } + + // 2. + for i, line := range lines { + if i == 0 && skipFirstLine { + continue + } + + if len(lines[i]) >= minIndentSize { + lines[i] = line[minIndentSize:] + } + } + + return strings.Join(lines, "\n") +} + +// heredoc.Docf returns unindented and formatted string as here-document. +// This format is same with package fmt's format. +func Docf(raw string, args ...interface{}) string { + return fmt.Sprintf(Doc(raw), args...) +} diff --git a/vendor/github.com/coreos/etcd/LICENSE b/vendor/github.com/coreos/etcd/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/vendor/github.com/coreos/etcd/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/coreos/etcd/NOTICE b/vendor/github.com/coreos/etcd/NOTICE new file mode 100644 index 00000000..b39ddfa5 --- /dev/null +++ b/vendor/github.com/coreos/etcd/NOTICE @@ -0,0 +1,5 @@ +CoreOS Project +Copyright 2014 CoreOS, Inc + +This product includes software developed at CoreOS, Inc. +(http://www.coreos.com/). diff --git a/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go b/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go new file mode 100644 index 00000000..448e1eaa --- /dev/null +++ b/vendor/github.com/coreos/etcd/auth/authpb/auth.pb.go @@ -0,0 +1,820 @@ +// Code generated by protoc-gen-gogo. +// source: auth.proto +// DO NOT EDIT! + +/* + Package authpb is a generated protocol buffer package. + + It is generated from these files: + auth.proto + + It has these top-level messages: + User + Permission + Role +*/ +package authpb + +import ( + "fmt" + + proto "github.com/golang/protobuf/proto" + + math "math" +) + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.ProtoPackageIsVersion1 + +type Permission_Type int32 + +const ( + READ Permission_Type = 0 + WRITE Permission_Type = 1 + READWRITE Permission_Type = 2 +) + +var Permission_Type_name = map[int32]string{ + 0: "READ", + 1: "WRITE", + 2: "READWRITE", +} +var Permission_Type_value = map[string]int32{ + "READ": 0, + "WRITE": 1, + "READWRITE": 2, +} + +func (x Permission_Type) String() string { + return proto.EnumName(Permission_Type_name, int32(x)) +} +func (Permission_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptorAuth, []int{1, 0} } + +// User is a single entry in the bucket authUsers +type User struct { + Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Password []byte `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + Roles []string `protobuf:"bytes,3,rep,name=roles" json:"roles,omitempty"` +} + +func (m *User) Reset() { *m = User{} } +func (m *User) String() string { return proto.CompactTextString(m) } +func (*User) ProtoMessage() {} +func (*User) Descriptor() ([]byte, []int) { return fileDescriptorAuth, []int{0} } + +// Permission is a single entity +type Permission struct { + PermType Permission_Type `protobuf:"varint,1,opt,name=permType,proto3,enum=authpb.Permission_Type" json:"permType,omitempty"` + Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + RangeEnd []byte `protobuf:"bytes,3,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` +} + +func (m *Permission) Reset() { *m = Permission{} } +func (m *Permission) String() string { return proto.CompactTextString(m) } +func (*Permission) ProtoMessage() {} +func (*Permission) Descriptor() ([]byte, []int) { return fileDescriptorAuth, []int{1} } + +// Role is a single entry in the bucket authRoles +type Role struct { + Name []byte `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + KeyPermission []*Permission `protobuf:"bytes,2,rep,name=keyPermission" json:"keyPermission,omitempty"` +} + +func (m *Role) Reset() { *m = Role{} } +func (m *Role) String() string { return proto.CompactTextString(m) } +func (*Role) ProtoMessage() {} +func (*Role) Descriptor() ([]byte, []int) { return fileDescriptorAuth, []int{2} } + +func init() { + proto.RegisterType((*User)(nil), "authpb.User") + proto.RegisterType((*Permission)(nil), "authpb.Permission") + proto.RegisterType((*Role)(nil), "authpb.Role") + proto.RegisterEnum("authpb.Permission_Type", Permission_Type_name, Permission_Type_value) +} +func (m *User) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *User) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintAuth(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if len(m.Password) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintAuth(data, i, uint64(len(m.Password))) + i += copy(data[i:], m.Password) + } + if len(m.Roles) > 0 { + for _, s := range m.Roles { + data[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *Permission) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Permission) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.PermType != 0 { + data[i] = 0x8 + i++ + i = encodeVarintAuth(data, i, uint64(m.PermType)) + } + if len(m.Key) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintAuth(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + } + if len(m.RangeEnd) > 0 { + data[i] = 0x1a + i++ + i = encodeVarintAuth(data, i, uint64(len(m.RangeEnd))) + i += copy(data[i:], m.RangeEnd) + } + return i, nil +} + +func (m *Role) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Role) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintAuth(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if len(m.KeyPermission) > 0 { + for _, msg := range m.KeyPermission { + data[i] = 0x12 + i++ + i = encodeVarintAuth(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func encodeFixed64Auth(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Auth(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintAuth(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *User) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + l = len(m.Password) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + if len(m.Roles) > 0 { + for _, s := range m.Roles { + l = len(s) + n += 1 + l + sovAuth(uint64(l)) + } + } + return n +} + +func (m *Permission) Size() (n int) { + var l int + _ = l + if m.PermType != 0 { + n += 1 + sovAuth(uint64(m.PermType)) + } + l = len(m.Key) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + l = len(m.RangeEnd) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + return n +} + +func (m *Role) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovAuth(uint64(l)) + } + if len(m.KeyPermission) > 0 { + for _, e := range m.KeyPermission { + l = e.Size() + n += 1 + l + sovAuth(uint64(l)) + } + } + return n +} + +func sovAuth(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozAuth(x uint64) (n int) { + return sovAuth(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *User) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: User: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: User: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = append(m.Name[:0], data[iNdEx:postIndex]...) + if m.Name == nil { + m.Name = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Password = append(m.Password[:0], data[iNdEx:postIndex]...) + if m.Password == nil { + m.Password = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Roles = append(m.Roles, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuth(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAuth + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Permission) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Permission: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Permission: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PermType", wireType) + } + m.PermType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.PermType |= (Permission_Type(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], data[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RangeEnd = append(m.RangeEnd[:0], data[iNdEx:postIndex]...) + if m.RangeEnd == nil { + m.RangeEnd = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuth(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAuth + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Role) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Role: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Role: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = append(m.Name[:0], data[iNdEx:postIndex]...) + if m.Name == nil { + m.Name = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KeyPermission", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAuth + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthAuth + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.KeyPermission = append(m.KeyPermission, &Permission{}) + if err := m.KeyPermission[len(m.KeyPermission)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipAuth(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthAuth + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipAuth(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAuth + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAuth + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAuth + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthAuth + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAuth + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipAuth(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthAuth = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowAuth = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorAuth = []byte{ + // 288 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x90, 0xc1, 0x4a, 0xc3, 0x30, + 0x1c, 0xc6, 0x9b, 0xb6, 0x1b, 0xed, 0x5f, 0x27, 0x25, 0x0c, 0x0c, 0x13, 0x42, 0xe9, 0xa9, 0x78, + 0xa8, 0xb0, 0x5d, 0xbc, 0x2a, 0xf6, 0x20, 0x78, 0x90, 0x50, 0xf1, 0x28, 0x1d, 0x0d, 0x75, 0x6c, + 0x6d, 0x4a, 0x32, 0x91, 0xbe, 0x89, 0x07, 0x1f, 0x68, 0xc7, 0x3d, 0x82, 0xab, 0x2f, 0x22, 0x4d, + 0x64, 0x43, 0xdc, 0xed, 0xfb, 0xbe, 0xff, 0x97, 0xe4, 0x97, 0x3f, 0x40, 0xfe, 0xb6, 0x7e, 0x4d, + 0x1a, 0x29, 0xd6, 0x02, 0x0f, 0x7b, 0xdd, 0xcc, 0x27, 0xe3, 0x52, 0x94, 0x42, 0x47, 0x57, 0xbd, + 0x32, 0xd3, 0xe8, 0x01, 0xdc, 0x27, 0xc5, 0x25, 0xc6, 0xe0, 0xd6, 0x79, 0xc5, 0x09, 0x0a, 0x51, + 0x7c, 0xca, 0xb4, 0xc6, 0x13, 0xf0, 0x9a, 0x5c, 0xa9, 0x77, 0x21, 0x0b, 0x62, 0xeb, 0x7c, 0xef, + 0xf1, 0x18, 0x06, 0x52, 0xac, 0xb8, 0x22, 0x4e, 0xe8, 0xc4, 0x3e, 0x33, 0x26, 0xfa, 0x44, 0x00, + 0x8f, 0x5c, 0x56, 0x0b, 0xa5, 0x16, 0xa2, 0xc6, 0x33, 0xf0, 0x1a, 0x2e, 0xab, 0xac, 0x6d, 0xcc, + 0xc5, 0x67, 0xd3, 0xf3, 0xc4, 0xd0, 0x24, 0x87, 0x56, 0xd2, 0x8f, 0xd9, 0xbe, 0x88, 0x03, 0x70, + 0x96, 0xbc, 0xfd, 0x7d, 0xb0, 0x97, 0xf8, 0x02, 0x7c, 0x99, 0xd7, 0x25, 0x7f, 0xe1, 0x75, 0x41, + 0x1c, 0x03, 0xa2, 0x83, 0xb4, 0x2e, 0xa2, 0x4b, 0x70, 0xf5, 0x31, 0x0f, 0x5c, 0x96, 0xde, 0xdc, + 0x05, 0x16, 0xf6, 0x61, 0xf0, 0xcc, 0xee, 0xb3, 0x34, 0x40, 0x78, 0x04, 0x7e, 0x1f, 0x1a, 0x6b, + 0x47, 0x19, 0xb8, 0x4c, 0xac, 0xf8, 0xd1, 0xcf, 0x5e, 0xc3, 0x68, 0xc9, 0xdb, 0x03, 0x16, 0xb1, + 0x43, 0x27, 0x3e, 0x99, 0xe2, 0xff, 0xc0, 0xec, 0x6f, 0xf1, 0x96, 0x6c, 0x76, 0xd4, 0xda, 0xee, + 0xa8, 0xb5, 0xe9, 0x28, 0xda, 0x76, 0x14, 0x7d, 0x75, 0x14, 0x7d, 0x7c, 0x53, 0x6b, 0x3e, 0xd4, + 0x3b, 0x9e, 0xfd, 0x04, 0x00, 0x00, 0xff, 0xff, 0xcc, 0x76, 0x8d, 0x4f, 0x8f, 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/coreos/etcd/auth/authpb/auth.proto b/vendor/github.com/coreos/etcd/auth/authpb/auth.proto new file mode 100644 index 00000000..001d3343 --- /dev/null +++ b/vendor/github.com/coreos/etcd/auth/authpb/auth.proto @@ -0,0 +1,37 @@ +syntax = "proto3"; +package authpb; + +import "gogoproto/gogo.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_enum_prefix_all) = false; + +// User is a single entry in the bucket authUsers +message User { + bytes name = 1; + bytes password = 2; + repeated string roles = 3; +} + +// Permission is a single entity +message Permission { + enum Type { + READ = 0; + WRITE = 1; + READWRITE = 2; + } + Type permType = 1; + + bytes key = 2; + bytes range_end = 3; +} + +// Role is a single entry in the bucket authRoles +message Role { + bytes name = 1; + + repeated Permission keyPermission = 2; +} diff --git a/vendor/github.com/coreos/etcd/client/README.md b/vendor/github.com/coreos/etcd/client/README.md new file mode 100644 index 00000000..0bab9589 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/README.md @@ -0,0 +1,117 @@ +# etcd/client + +etcd/client is the Go client library for etcd. + +[![GoDoc](https://godoc.org/github.com/coreos/etcd/client?status.png)](https://godoc.org/github.com/coreos/etcd/client) + +etcd uses `cmd/vendor` directory to store external dependencies, which are +to be compiled into etcd release binaries. `client` can be imported without +vendoring. For full compatibility, it is recommended to vendor builds using +etcd's vendored packages, using tools like godep, as in +[vendor directories](https://golang.org/cmd/go/#hdr-Vendor_Directories). +For more detail, please read [Go vendor design](https://golang.org/s/go15vendor). + +## Install + +```bash +go get github.com/coreos/etcd/client +``` + +## Usage + +```go +package main + +import ( + "log" + "time" + + "golang.org/x/net/context" + "github.com/coreos/etcd/client" +) + +func main() { + cfg := client.Config{ + Endpoints: []string{"http://127.0.0.1:2379"}, + Transport: client.DefaultTransport, + // set timeout per request to fail fast when the target endpoint is unavailable + HeaderTimeoutPerRequest: time.Second, + } + c, err := client.New(cfg) + if err != nil { + log.Fatal(err) + } + kapi := client.NewKeysAPI(c) + // set "/foo" key with "bar" value + log.Print("Setting '/foo' key with 'bar' value") + resp, err := kapi.Set(context.Background(), "/foo", "bar", nil) + if err != nil { + log.Fatal(err) + } else { + // print common key info + log.Printf("Set is done. Metadata is %q\n", resp) + } + // get "/foo" key's value + log.Print("Getting '/foo' key value") + resp, err = kapi.Get(context.Background(), "/foo", nil) + if err != nil { + log.Fatal(err) + } else { + // print common key info + log.Printf("Get is done. Metadata is %q\n", resp) + // print value + log.Printf("%q key has %q value\n", resp.Node.Key, resp.Node.Value) + } +} +``` + +## Error Handling + +etcd client might return three types of errors. + +- context error + +Each API call has its first parameter as `context`. A context can be canceled or have an attached deadline. If the context is canceled or reaches its deadline, the responding context error will be returned no matter what internal errors the API call has already encountered. + +- cluster error + +Each API call tries to send request to the cluster endpoints one by one until it successfully gets a response. If a requests to an endpoint fails, due to exceeding per request timeout or connection issues, the error will be added into a list of errors. If all possible endpoints fail, a cluster error that includes all encountered errors will be returned. + +- response error + +If the response gets from the cluster is invalid, a plain string error will be returned. For example, it might be a invalid JSON error. + +Here is the example code to handle client errors: + +```go +cfg := client.Config{Endpoints: []string{"http://etcd1:2379","http://etcd2:2379","http://etcd3:2379"}} +c, err := client.New(cfg) +if err != nil { + log.Fatal(err) +} + +kapi := client.NewKeysAPI(c) +resp, err := kapi.Set(ctx, "test", "bar", nil) +if err != nil { + if err == context.Canceled { + // ctx is canceled by another routine + } else if err == context.DeadlineExceeded { + // ctx is attached with a deadline and it exceeded + } else if cerr, ok := err.(*client.ClusterError); ok { + // process (cerr.Errors) + } else { + // bad cluster endpoints, which are not etcd servers + } +} +``` + + +## Caveat + +1. etcd/client prefers to use the same endpoint as long as the endpoint continues to work well. This saves socket resources, and improves efficiency for both client and server side. This preference doesn't remove consistency from the data consumed by the client because data replicated to each etcd member has already passed through the consensus process. + +2. etcd/client does round-robin rotation on other available endpoints if the preferred endpoint isn't functioning properly. For example, if the member that etcd/client connects to is hard killed, etcd/client will fail on the first attempt with the killed member, and succeed on the second attempt with another member. If it fails to talk to all available endpoints, it will return all errors happened. + +3. Default etcd/client cannot handle the case that the remote server is SIGSTOPed now. TCP keepalive mechanism doesn't help in this scenario because operating system may still send TCP keep-alive packets. Over time we'd like to improve this functionality, but solving this issue isn't high priority because a real-life case in which a server is stopped, but the connection is kept alive, hasn't been brought to our attention. + +4. etcd/client cannot detect whether the member in use is healthy when doing read requests. If the member is isolated from the cluster, etcd/client may retrieve outdated data. As a workaround, users could monitor experimental /health endpoint for member healthy information. We are improving it at [#3265](https://github.com/coreos/etcd/issues/3265). diff --git a/vendor/github.com/coreos/etcd/client/auth_role.go b/vendor/github.com/coreos/etcd/client/auth_role.go new file mode 100644 index 00000000..d15e00dd --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/auth_role.go @@ -0,0 +1,237 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import ( + "bytes" + "encoding/json" + "net/http" + "net/url" + + "golang.org/x/net/context" +) + +type Role struct { + Role string `json:"role"` + Permissions Permissions `json:"permissions"` + Grant *Permissions `json:"grant,omitempty"` + Revoke *Permissions `json:"revoke,omitempty"` +} + +type Permissions struct { + KV rwPermission `json:"kv"` +} + +type rwPermission struct { + Read []string `json:"read"` + Write []string `json:"write"` +} + +type PermissionType int + +const ( + ReadPermission PermissionType = iota + WritePermission + ReadWritePermission +) + +// NewAuthRoleAPI constructs a new AuthRoleAPI that uses HTTP to +// interact with etcd's role creation and modification features. +func NewAuthRoleAPI(c Client) AuthRoleAPI { + return &httpAuthRoleAPI{ + client: c, + } +} + +type AuthRoleAPI interface { + // AddRole adds a role. + AddRole(ctx context.Context, role string) error + + // RemoveRole removes a role. + RemoveRole(ctx context.Context, role string) error + + // GetRole retrieves role details. + GetRole(ctx context.Context, role string) (*Role, error) + + // GrantRoleKV grants a role some permission prefixes for the KV store. + GrantRoleKV(ctx context.Context, role string, prefixes []string, permType PermissionType) (*Role, error) + + // RevokeRoleKV revokes some permission prefixes for a role on the KV store. + RevokeRoleKV(ctx context.Context, role string, prefixes []string, permType PermissionType) (*Role, error) + + // ListRoles lists roles. + ListRoles(ctx context.Context) ([]string, error) +} + +type httpAuthRoleAPI struct { + client httpClient +} + +type authRoleAPIAction struct { + verb string + name string + role *Role +} + +type authRoleAPIList struct{} + +func (list *authRoleAPIList) HTTPRequest(ep url.URL) *http.Request { + u := v2AuthURL(ep, "roles", "") + req, _ := http.NewRequest("GET", u.String(), nil) + req.Header.Set("Content-Type", "application/json") + return req +} + +func (l *authRoleAPIAction) HTTPRequest(ep url.URL) *http.Request { + u := v2AuthURL(ep, "roles", l.name) + if l.role == nil { + req, _ := http.NewRequest(l.verb, u.String(), nil) + return req + } + b, err := json.Marshal(l.role) + if err != nil { + panic(err) + } + body := bytes.NewReader(b) + req, _ := http.NewRequest(l.verb, u.String(), body) + req.Header.Set("Content-Type", "application/json") + return req +} + +func (r *httpAuthRoleAPI) ListRoles(ctx context.Context) ([]string, error) { + resp, body, err := r.client.Do(ctx, &authRoleAPIList{}) + if err != nil { + return nil, err + } + if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil { + return nil, err + } + var roleList struct { + Roles []Role `json:"roles"` + } + if err = json.Unmarshal(body, &roleList); err != nil { + return nil, err + } + ret := make([]string, 0, len(roleList.Roles)) + for _, r := range roleList.Roles { + ret = append(ret, r.Role) + } + return ret, nil +} + +func (r *httpAuthRoleAPI) AddRole(ctx context.Context, rolename string) error { + role := &Role{ + Role: rolename, + } + return r.addRemoveRole(ctx, &authRoleAPIAction{ + verb: "PUT", + name: rolename, + role: role, + }) +} + +func (r *httpAuthRoleAPI) RemoveRole(ctx context.Context, rolename string) error { + return r.addRemoveRole(ctx, &authRoleAPIAction{ + verb: "DELETE", + name: rolename, + }) +} + +func (r *httpAuthRoleAPI) addRemoveRole(ctx context.Context, req *authRoleAPIAction) error { + resp, body, err := r.client.Do(ctx, req) + if err != nil { + return err + } + if err := assertStatusCode(resp.StatusCode, http.StatusOK, http.StatusCreated); err != nil { + var sec authError + err := json.Unmarshal(body, &sec) + if err != nil { + return err + } + return sec + } + return nil +} + +func (r *httpAuthRoleAPI) GetRole(ctx context.Context, rolename string) (*Role, error) { + return r.modRole(ctx, &authRoleAPIAction{ + verb: "GET", + name: rolename, + }) +} + +func buildRWPermission(prefixes []string, permType PermissionType) rwPermission { + var out rwPermission + switch permType { + case ReadPermission: + out.Read = prefixes + case WritePermission: + out.Write = prefixes + case ReadWritePermission: + out.Read = prefixes + out.Write = prefixes + } + return out +} + +func (r *httpAuthRoleAPI) GrantRoleKV(ctx context.Context, rolename string, prefixes []string, permType PermissionType) (*Role, error) { + rwp := buildRWPermission(prefixes, permType) + role := &Role{ + Role: rolename, + Grant: &Permissions{ + KV: rwp, + }, + } + return r.modRole(ctx, &authRoleAPIAction{ + verb: "PUT", + name: rolename, + role: role, + }) +} + +func (r *httpAuthRoleAPI) RevokeRoleKV(ctx context.Context, rolename string, prefixes []string, permType PermissionType) (*Role, error) { + rwp := buildRWPermission(prefixes, permType) + role := &Role{ + Role: rolename, + Revoke: &Permissions{ + KV: rwp, + }, + } + return r.modRole(ctx, &authRoleAPIAction{ + verb: "PUT", + name: rolename, + role: role, + }) +} + +func (r *httpAuthRoleAPI) modRole(ctx context.Context, req *authRoleAPIAction) (*Role, error) { + resp, body, err := r.client.Do(ctx, req) + if err != nil { + return nil, err + } + if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil { + var sec authError + err = json.Unmarshal(body, &sec) + if err != nil { + return nil, err + } + return nil, sec + } + var role Role + if err = json.Unmarshal(body, &role); err != nil { + return nil, err + } + return &role, nil +} diff --git a/vendor/github.com/coreos/etcd/client/auth_user.go b/vendor/github.com/coreos/etcd/client/auth_user.go new file mode 100644 index 00000000..97c3f318 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/auth_user.go @@ -0,0 +1,320 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import ( + "bytes" + "encoding/json" + "net/http" + "net/url" + "path" + + "golang.org/x/net/context" +) + +var ( + defaultV2AuthPrefix = "/v2/auth" +) + +type User struct { + User string `json:"user"` + Password string `json:"password,omitempty"` + Roles []string `json:"roles"` + Grant []string `json:"grant,omitempty"` + Revoke []string `json:"revoke,omitempty"` +} + +// userListEntry is the user representation given by the server for ListUsers +type userListEntry struct { + User string `json:"user"` + Roles []Role `json:"roles"` +} + +type UserRoles struct { + User string `json:"user"` + Roles []Role `json:"roles"` +} + +func v2AuthURL(ep url.URL, action string, name string) *url.URL { + if name != "" { + ep.Path = path.Join(ep.Path, defaultV2AuthPrefix, action, name) + return &ep + } + ep.Path = path.Join(ep.Path, defaultV2AuthPrefix, action) + return &ep +} + +// NewAuthAPI constructs a new AuthAPI that uses HTTP to +// interact with etcd's general auth features. +func NewAuthAPI(c Client) AuthAPI { + return &httpAuthAPI{ + client: c, + } +} + +type AuthAPI interface { + // Enable auth. + Enable(ctx context.Context) error + + // Disable auth. + Disable(ctx context.Context) error +} + +type httpAuthAPI struct { + client httpClient +} + +func (s *httpAuthAPI) Enable(ctx context.Context) error { + return s.enableDisable(ctx, &authAPIAction{"PUT"}) +} + +func (s *httpAuthAPI) Disable(ctx context.Context) error { + return s.enableDisable(ctx, &authAPIAction{"DELETE"}) +} + +func (s *httpAuthAPI) enableDisable(ctx context.Context, req httpAction) error { + resp, body, err := s.client.Do(ctx, req) + if err != nil { + return err + } + if err = assertStatusCode(resp.StatusCode, http.StatusOK, http.StatusCreated); err != nil { + var sec authError + err = json.Unmarshal(body, &sec) + if err != nil { + return err + } + return sec + } + return nil +} + +type authAPIAction struct { + verb string +} + +func (l *authAPIAction) HTTPRequest(ep url.URL) *http.Request { + u := v2AuthURL(ep, "enable", "") + req, _ := http.NewRequest(l.verb, u.String(), nil) + return req +} + +type authError struct { + Message string `json:"message"` + Code int `json:"-"` +} + +func (e authError) Error() string { + return e.Message +} + +// NewAuthUserAPI constructs a new AuthUserAPI that uses HTTP to +// interact with etcd's user creation and modification features. +func NewAuthUserAPI(c Client) AuthUserAPI { + return &httpAuthUserAPI{ + client: c, + } +} + +type AuthUserAPI interface { + // AddUser adds a user. + AddUser(ctx context.Context, username string, password string) error + + // RemoveUser removes a user. + RemoveUser(ctx context.Context, username string) error + + // GetUser retrieves user details. + GetUser(ctx context.Context, username string) (*User, error) + + // GrantUser grants a user some permission roles. + GrantUser(ctx context.Context, username string, roles []string) (*User, error) + + // RevokeUser revokes some permission roles from a user. + RevokeUser(ctx context.Context, username string, roles []string) (*User, error) + + // ChangePassword changes the user's password. + ChangePassword(ctx context.Context, username string, password string) (*User, error) + + // ListUsers lists the users. + ListUsers(ctx context.Context) ([]string, error) +} + +type httpAuthUserAPI struct { + client httpClient +} + +type authUserAPIAction struct { + verb string + username string + user *User +} + +type authUserAPIList struct{} + +func (list *authUserAPIList) HTTPRequest(ep url.URL) *http.Request { + u := v2AuthURL(ep, "users", "") + req, _ := http.NewRequest("GET", u.String(), nil) + req.Header.Set("Content-Type", "application/json") + return req +} + +func (l *authUserAPIAction) HTTPRequest(ep url.URL) *http.Request { + u := v2AuthURL(ep, "users", l.username) + if l.user == nil { + req, _ := http.NewRequest(l.verb, u.String(), nil) + return req + } + b, err := json.Marshal(l.user) + if err != nil { + panic(err) + } + body := bytes.NewReader(b) + req, _ := http.NewRequest(l.verb, u.String(), body) + req.Header.Set("Content-Type", "application/json") + return req +} + +func (u *httpAuthUserAPI) ListUsers(ctx context.Context) ([]string, error) { + resp, body, err := u.client.Do(ctx, &authUserAPIList{}) + if err != nil { + return nil, err + } + if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil { + var sec authError + err = json.Unmarshal(body, &sec) + if err != nil { + return nil, err + } + return nil, sec + } + + var userList struct { + Users []userListEntry `json:"users"` + } + + if err = json.Unmarshal(body, &userList); err != nil { + return nil, err + } + + ret := make([]string, 0, len(userList.Users)) + for _, u := range userList.Users { + ret = append(ret, u.User) + } + return ret, nil +} + +func (u *httpAuthUserAPI) AddUser(ctx context.Context, username string, password string) error { + user := &User{ + User: username, + Password: password, + } + return u.addRemoveUser(ctx, &authUserAPIAction{ + verb: "PUT", + username: username, + user: user, + }) +} + +func (u *httpAuthUserAPI) RemoveUser(ctx context.Context, username string) error { + return u.addRemoveUser(ctx, &authUserAPIAction{ + verb: "DELETE", + username: username, + }) +} + +func (u *httpAuthUserAPI) addRemoveUser(ctx context.Context, req *authUserAPIAction) error { + resp, body, err := u.client.Do(ctx, req) + if err != nil { + return err + } + if err = assertStatusCode(resp.StatusCode, http.StatusOK, http.StatusCreated); err != nil { + var sec authError + err = json.Unmarshal(body, &sec) + if err != nil { + return err + } + return sec + } + return nil +} + +func (u *httpAuthUserAPI) GetUser(ctx context.Context, username string) (*User, error) { + return u.modUser(ctx, &authUserAPIAction{ + verb: "GET", + username: username, + }) +} + +func (u *httpAuthUserAPI) GrantUser(ctx context.Context, username string, roles []string) (*User, error) { + user := &User{ + User: username, + Grant: roles, + } + return u.modUser(ctx, &authUserAPIAction{ + verb: "PUT", + username: username, + user: user, + }) +} + +func (u *httpAuthUserAPI) RevokeUser(ctx context.Context, username string, roles []string) (*User, error) { + user := &User{ + User: username, + Revoke: roles, + } + return u.modUser(ctx, &authUserAPIAction{ + verb: "PUT", + username: username, + user: user, + }) +} + +func (u *httpAuthUserAPI) ChangePassword(ctx context.Context, username string, password string) (*User, error) { + user := &User{ + User: username, + Password: password, + } + return u.modUser(ctx, &authUserAPIAction{ + verb: "PUT", + username: username, + user: user, + }) +} + +func (u *httpAuthUserAPI) modUser(ctx context.Context, req *authUserAPIAction) (*User, error) { + resp, body, err := u.client.Do(ctx, req) + if err != nil { + return nil, err + } + if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil { + var sec authError + err = json.Unmarshal(body, &sec) + if err != nil { + return nil, err + } + return nil, sec + } + var user User + if err = json.Unmarshal(body, &user); err != nil { + var userR UserRoles + if urerr := json.Unmarshal(body, &userR); urerr != nil { + return nil, err + } + user.User = userR.User + for _, r := range userR.Roles { + user.Roles = append(user.Roles, r.Role) + } + } + return &user, nil +} diff --git a/vendor/github.com/coreos/etcd/client/cancelreq.go b/vendor/github.com/coreos/etcd/client/cancelreq.go new file mode 100644 index 00000000..76d1f040 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/cancelreq.go @@ -0,0 +1,18 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// borrowed from golang/net/context/ctxhttp/cancelreq.go + +package client + +import "net/http" + +func requestCanceler(tr CancelableTransport, req *http.Request) func() { + ch := make(chan struct{}) + req.Cancel = ch + + return func() { + close(ch) + } +} diff --git a/vendor/github.com/coreos/etcd/client/client.go b/vendor/github.com/coreos/etcd/client/client.go new file mode 100644 index 00000000..eeeb8b57 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/client.go @@ -0,0 +1,609 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import ( + "errors" + "fmt" + "io/ioutil" + "math/rand" + "net" + "net/http" + "net/url" + "reflect" + "sort" + "strconv" + "sync" + "time" + + "golang.org/x/net/context" +) + +var ( + ErrNoEndpoints = errors.New("client: no endpoints available") + ErrTooManyRedirects = errors.New("client: too many redirects") + ErrClusterUnavailable = errors.New("client: etcd cluster is unavailable or misconfigured") + ErrNoLeaderEndpoint = errors.New("client: no leader endpoint available") + errTooManyRedirectChecks = errors.New("client: too many redirect checks") + + // oneShotCtxValue is set on a context using WithValue(&oneShotValue) so + // that Do() will not retry a request + oneShotCtxValue interface{} +) + +var DefaultRequestTimeout = 5 * time.Second + +var DefaultTransport CancelableTransport = &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, +} + +type EndpointSelectionMode int + +const ( + // EndpointSelectionRandom is the default value of the 'SelectionMode'. + // As the name implies, the client object will pick a node from the members + // of the cluster in a random fashion. If the cluster has three members, A, B, + // and C, the client picks any node from its three members as its request + // destination. + EndpointSelectionRandom EndpointSelectionMode = iota + + // If 'SelectionMode' is set to 'EndpointSelectionPrioritizeLeader', + // requests are sent directly to the cluster leader. This reduces + // forwarding roundtrips compared to making requests to etcd followers + // who then forward them to the cluster leader. In the event of a leader + // failure, however, clients configured this way cannot prioritize among + // the remaining etcd followers. Therefore, when a client sets 'SelectionMode' + // to 'EndpointSelectionPrioritizeLeader', it must use 'client.AutoSync()' to + // maintain its knowledge of current cluster state. + // + // This mode should be used with Client.AutoSync(). + EndpointSelectionPrioritizeLeader +) + +type Config struct { + // Endpoints defines a set of URLs (schemes, hosts and ports only) + // that can be used to communicate with a logical etcd cluster. For + // example, a three-node cluster could be provided like so: + // + // Endpoints: []string{ + // "http://node1.example.com:2379", + // "http://node2.example.com:2379", + // "http://node3.example.com:2379", + // } + // + // If multiple endpoints are provided, the Client will attempt to + // use them all in the event that one or more of them are unusable. + // + // If Client.Sync is ever called, the Client may cache an alternate + // set of endpoints to continue operation. + Endpoints []string + + // Transport is used by the Client to drive HTTP requests. If not + // provided, DefaultTransport will be used. + Transport CancelableTransport + + // CheckRedirect specifies the policy for handling HTTP redirects. + // If CheckRedirect is not nil, the Client calls it before + // following an HTTP redirect. The sole argument is the number of + // requests that have already been made. If CheckRedirect returns + // an error, Client.Do will not make any further requests and return + // the error back it to the caller. + // + // If CheckRedirect is nil, the Client uses its default policy, + // which is to stop after 10 consecutive requests. + CheckRedirect CheckRedirectFunc + + // Username specifies the user credential to add as an authorization header + Username string + + // Password is the password for the specified user to add as an authorization header + // to the request. + Password string + + // HeaderTimeoutPerRequest specifies the time limit to wait for response + // header in a single request made by the Client. The timeout includes + // connection time, any redirects, and header wait time. + // + // For non-watch GET request, server returns the response body immediately. + // For PUT/POST/DELETE request, server will attempt to commit request + // before responding, which is expected to take `100ms + 2 * RTT`. + // For watch request, server returns the header immediately to notify Client + // watch start. But if server is behind some kind of proxy, the response + // header may be cached at proxy, and Client cannot rely on this behavior. + // + // Especially, wait request will ignore this timeout. + // + // One API call may send multiple requests to different etcd servers until it + // succeeds. Use context of the API to specify the overall timeout. + // + // A HeaderTimeoutPerRequest of zero means no timeout. + HeaderTimeoutPerRequest time.Duration + + // SelectionMode is an EndpointSelectionMode enum that specifies the + // policy for choosing the etcd cluster node to which requests are sent. + SelectionMode EndpointSelectionMode +} + +func (cfg *Config) transport() CancelableTransport { + if cfg.Transport == nil { + return DefaultTransport + } + return cfg.Transport +} + +func (cfg *Config) checkRedirect() CheckRedirectFunc { + if cfg.CheckRedirect == nil { + return DefaultCheckRedirect + } + return cfg.CheckRedirect +} + +// CancelableTransport mimics net/http.Transport, but requires that +// the object also support request cancellation. +type CancelableTransport interface { + http.RoundTripper + CancelRequest(req *http.Request) +} + +type CheckRedirectFunc func(via int) error + +// DefaultCheckRedirect follows up to 10 redirects, but no more. +var DefaultCheckRedirect CheckRedirectFunc = func(via int) error { + if via > 10 { + return ErrTooManyRedirects + } + return nil +} + +type Client interface { + // Sync updates the internal cache of the etcd cluster's membership. + Sync(context.Context) error + + // AutoSync periodically calls Sync() every given interval. + // The recommended sync interval is 10 seconds to 1 minute, which does + // not bring too much overhead to server and makes client catch up the + // cluster change in time. + // + // The example to use it: + // + // for { + // err := client.AutoSync(ctx, 10*time.Second) + // if err == context.DeadlineExceeded || err == context.Canceled { + // break + // } + // log.Print(err) + // } + AutoSync(context.Context, time.Duration) error + + // Endpoints returns a copy of the current set of API endpoints used + // by Client to resolve HTTP requests. If Sync has ever been called, + // this may differ from the initial Endpoints provided in the Config. + Endpoints() []string + + // SetEndpoints sets the set of API endpoints used by Client to resolve + // HTTP requests. If the given endpoints are not valid, an error will be + // returned + SetEndpoints(eps []string) error + + httpClient +} + +func New(cfg Config) (Client, error) { + c := &httpClusterClient{ + clientFactory: newHTTPClientFactory(cfg.transport(), cfg.checkRedirect(), cfg.HeaderTimeoutPerRequest), + rand: rand.New(rand.NewSource(int64(time.Now().Nanosecond()))), + selectionMode: cfg.SelectionMode, + } + if cfg.Username != "" { + c.credentials = &credentials{ + username: cfg.Username, + password: cfg.Password, + } + } + if err := c.SetEndpoints(cfg.Endpoints); err != nil { + return nil, err + } + return c, nil +} + +type httpClient interface { + Do(context.Context, httpAction) (*http.Response, []byte, error) +} + +func newHTTPClientFactory(tr CancelableTransport, cr CheckRedirectFunc, headerTimeout time.Duration) httpClientFactory { + return func(ep url.URL) httpClient { + return &redirectFollowingHTTPClient{ + checkRedirect: cr, + client: &simpleHTTPClient{ + transport: tr, + endpoint: ep, + headerTimeout: headerTimeout, + }, + } + } +} + +type credentials struct { + username string + password string +} + +type httpClientFactory func(url.URL) httpClient + +type httpAction interface { + HTTPRequest(url.URL) *http.Request +} + +type httpClusterClient struct { + clientFactory httpClientFactory + endpoints []url.URL + pinned int + credentials *credentials + sync.RWMutex + rand *rand.Rand + selectionMode EndpointSelectionMode +} + +func (c *httpClusterClient) getLeaderEndpoint() (string, error) { + mAPI := NewMembersAPI(c) + leader, err := mAPI.Leader(context.Background()) + if err != nil { + return "", err + } + + return leader.ClientURLs[0], nil // TODO: how to handle multiple client URLs? +} + +func (c *httpClusterClient) SetEndpoints(eps []string) error { + if len(eps) == 0 { + return ErrNoEndpoints + } + + neps := make([]url.URL, len(eps)) + for i, ep := range eps { + u, err := url.Parse(ep) + if err != nil { + return err + } + neps[i] = *u + } + + switch c.selectionMode { + case EndpointSelectionRandom: + c.endpoints = shuffleEndpoints(c.rand, neps) + c.pinned = 0 + case EndpointSelectionPrioritizeLeader: + c.endpoints = neps + lep, err := c.getLeaderEndpoint() + if err != nil { + return ErrNoLeaderEndpoint + } + + for i := range c.endpoints { + if c.endpoints[i].String() == lep { + c.pinned = i + break + } + } + // If endpoints doesn't have the lu, just keep c.pinned = 0. + // Forwarding between follower and leader would be required but it works. + default: + return errors.New(fmt.Sprintf("invalid endpoint selection mode: %d", c.selectionMode)) + } + + return nil +} + +func (c *httpClusterClient) Do(ctx context.Context, act httpAction) (*http.Response, []byte, error) { + action := act + c.RLock() + leps := len(c.endpoints) + eps := make([]url.URL, leps) + n := copy(eps, c.endpoints) + pinned := c.pinned + + if c.credentials != nil { + action = &authedAction{ + act: act, + credentials: *c.credentials, + } + } + c.RUnlock() + + if leps == 0 { + return nil, nil, ErrNoEndpoints + } + + if leps != n { + return nil, nil, errors.New("unable to pick endpoint: copy failed") + } + + var resp *http.Response + var body []byte + var err error + cerr := &ClusterError{} + isOneShot := ctx.Value(&oneShotCtxValue) != nil + + for i := pinned; i < leps+pinned; i++ { + k := i % leps + hc := c.clientFactory(eps[k]) + resp, body, err = hc.Do(ctx, action) + if err != nil { + cerr.Errors = append(cerr.Errors, err) + if err == ctx.Err() { + return nil, nil, ctx.Err() + } + if err == context.Canceled || err == context.DeadlineExceeded { + return nil, nil, err + } + if isOneShot { + return nil, nil, err + } + continue + } + if resp.StatusCode/100 == 5 { + switch resp.StatusCode { + case http.StatusInternalServerError, http.StatusServiceUnavailable: + // TODO: make sure this is a no leader response + cerr.Errors = append(cerr.Errors, fmt.Errorf("client: etcd member %s has no leader", eps[k].String())) + default: + cerr.Errors = append(cerr.Errors, fmt.Errorf("client: etcd member %s returns server error [%s]", eps[k].String(), http.StatusText(resp.StatusCode))) + } + if isOneShot { + return nil, nil, cerr.Errors[0] + } + continue + } + if k != pinned { + c.Lock() + c.pinned = k + c.Unlock() + } + return resp, body, nil + } + + return nil, nil, cerr +} + +func (c *httpClusterClient) Endpoints() []string { + c.RLock() + defer c.RUnlock() + + eps := make([]string, len(c.endpoints)) + for i, ep := range c.endpoints { + eps[i] = ep.String() + } + + return eps +} + +func (c *httpClusterClient) Sync(ctx context.Context) error { + mAPI := NewMembersAPI(c) + ms, err := mAPI.List(ctx) + if err != nil { + return err + } + + c.Lock() + defer c.Unlock() + + eps := make([]string, 0) + for _, m := range ms { + eps = append(eps, m.ClientURLs...) + } + sort.Sort(sort.StringSlice(eps)) + + ceps := make([]string, len(c.endpoints)) + for i, cep := range c.endpoints { + ceps[i] = cep.String() + } + sort.Sort(sort.StringSlice(ceps)) + // fast path if no change happens + // this helps client to pin the endpoint when no cluster change + if reflect.DeepEqual(eps, ceps) { + return nil + } + + return c.SetEndpoints(eps) +} + +func (c *httpClusterClient) AutoSync(ctx context.Context, interval time.Duration) error { + ticker := time.NewTicker(interval) + defer ticker.Stop() + for { + err := c.Sync(ctx) + if err != nil { + return err + } + select { + case <-ctx.Done(): + return ctx.Err() + case <-ticker.C: + } + } +} + +type roundTripResponse struct { + resp *http.Response + err error +} + +type simpleHTTPClient struct { + transport CancelableTransport + endpoint url.URL + headerTimeout time.Duration +} + +func (c *simpleHTTPClient) Do(ctx context.Context, act httpAction) (*http.Response, []byte, error) { + req := act.HTTPRequest(c.endpoint) + + if err := printcURL(req); err != nil { + return nil, nil, err + } + + isWait := false + if req != nil && req.URL != nil { + ws := req.URL.Query().Get("wait") + if len(ws) != 0 { + var err error + isWait, err = strconv.ParseBool(ws) + if err != nil { + return nil, nil, fmt.Errorf("wrong wait value %s (%v for %+v)", ws, err, req) + } + } + } + + var hctx context.Context + var hcancel context.CancelFunc + if !isWait && c.headerTimeout > 0 { + hctx, hcancel = context.WithTimeout(ctx, c.headerTimeout) + } else { + hctx, hcancel = context.WithCancel(ctx) + } + defer hcancel() + + reqcancel := requestCanceler(c.transport, req) + + rtchan := make(chan roundTripResponse, 1) + go func() { + resp, err := c.transport.RoundTrip(req) + rtchan <- roundTripResponse{resp: resp, err: err} + close(rtchan) + }() + + var resp *http.Response + var err error + + select { + case rtresp := <-rtchan: + resp, err = rtresp.resp, rtresp.err + case <-hctx.Done(): + // cancel and wait for request to actually exit before continuing + reqcancel() + rtresp := <-rtchan + resp = rtresp.resp + switch { + case ctx.Err() != nil: + err = ctx.Err() + case hctx.Err() != nil: + err = fmt.Errorf("client: endpoint %s exceeded header timeout", c.endpoint.String()) + default: + panic("failed to get error from context") + } + } + + // always check for resp nil-ness to deal with possible + // race conditions between channels above + defer func() { + if resp != nil { + resp.Body.Close() + } + }() + + if err != nil { + return nil, nil, err + } + + var body []byte + done := make(chan struct{}) + go func() { + body, err = ioutil.ReadAll(resp.Body) + done <- struct{}{} + }() + + select { + case <-ctx.Done(): + resp.Body.Close() + <-done + return nil, nil, ctx.Err() + case <-done: + } + + return resp, body, err +} + +type authedAction struct { + act httpAction + credentials credentials +} + +func (a *authedAction) HTTPRequest(url url.URL) *http.Request { + r := a.act.HTTPRequest(url) + r.SetBasicAuth(a.credentials.username, a.credentials.password) + return r +} + +type redirectFollowingHTTPClient struct { + client httpClient + checkRedirect CheckRedirectFunc +} + +func (r *redirectFollowingHTTPClient) Do(ctx context.Context, act httpAction) (*http.Response, []byte, error) { + next := act + for i := 0; i < 100; i++ { + if i > 0 { + if err := r.checkRedirect(i); err != nil { + return nil, nil, err + } + } + resp, body, err := r.client.Do(ctx, next) + if err != nil { + return nil, nil, err + } + if resp.StatusCode/100 == 3 { + hdr := resp.Header.Get("Location") + if hdr == "" { + return nil, nil, fmt.Errorf("Location header not set") + } + loc, err := url.Parse(hdr) + if err != nil { + return nil, nil, fmt.Errorf("Location header not valid URL: %s", hdr) + } + next = &redirectedHTTPAction{ + action: act, + location: *loc, + } + continue + } + return resp, body, nil + } + + return nil, nil, errTooManyRedirectChecks +} + +type redirectedHTTPAction struct { + action httpAction + location url.URL +} + +func (r *redirectedHTTPAction) HTTPRequest(ep url.URL) *http.Request { + orig := r.action.HTTPRequest(ep) + orig.URL = &r.location + return orig +} + +func shuffleEndpoints(r *rand.Rand, eps []url.URL) []url.URL { + p := r.Perm(len(eps)) + neps := make([]url.URL, len(eps)) + for i, k := range p { + neps[i] = eps[k] + } + return neps +} diff --git a/vendor/github.com/coreos/etcd/client/cluster_error.go b/vendor/github.com/coreos/etcd/client/cluster_error.go new file mode 100644 index 00000000..aef5bf75 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/cluster_error.go @@ -0,0 +1,33 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import "fmt" + +type ClusterError struct { + Errors []error +} + +func (ce *ClusterError) Error() string { + return ErrClusterUnavailable.Error() +} + +func (ce *ClusterError) Detail() string { + s := "" + for i, e := range ce.Errors { + s += fmt.Sprintf("error #%d: %s\n", i, e) + } + return s +} diff --git a/vendor/github.com/coreos/etcd/client/curl.go b/vendor/github.com/coreos/etcd/client/curl.go new file mode 100644 index 00000000..c8bc9fba --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/curl.go @@ -0,0 +1,70 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import ( + "bytes" + "fmt" + "io/ioutil" + "net/http" + "os" +) + +var ( + cURLDebug = false +) + +func EnablecURLDebug() { + cURLDebug = true +} + +func DisablecURLDebug() { + cURLDebug = false +} + +// printcURL prints the cURL equivalent request to stderr. +// It returns an error if the body of the request cannot +// be read. +// The caller MUST cancel the request if there is an error. +func printcURL(req *http.Request) error { + if !cURLDebug { + return nil + } + var ( + command string + b []byte + err error + ) + + if req.URL != nil { + command = fmt.Sprintf("curl -X %s %s", req.Method, req.URL.String()) + } + + if req.Body != nil { + b, err = ioutil.ReadAll(req.Body) + if err != nil { + return err + } + command += fmt.Sprintf(" -d %q", string(b)) + } + + fmt.Fprintf(os.Stderr, "cURL Command: %s\n", command) + + // reset body + body := bytes.NewBuffer(b) + req.Body = ioutil.NopCloser(body) + + return nil +} diff --git a/vendor/github.com/coreos/etcd/client/discover.go b/vendor/github.com/coreos/etcd/client/discover.go new file mode 100644 index 00000000..bfd7aec9 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/discover.go @@ -0,0 +1,21 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +// Discoverer is an interface that wraps the Discover method. +type Discoverer interface { + // Discover looks up the etcd servers for the domain. + Discover(domain string) ([]string, error) +} diff --git a/vendor/github.com/coreos/etcd/client/doc.go b/vendor/github.com/coreos/etcd/client/doc.go new file mode 100644 index 00000000..32fdfb52 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/doc.go @@ -0,0 +1,73 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* +Package client provides bindings for the etcd APIs. + +Create a Config and exchange it for a Client: + + import ( + "net/http" + + "github.com/coreos/etcd/client" + "golang.org/x/net/context" + ) + + cfg := client.Config{ + Endpoints: []string{"http://127.0.0.1:2379"}, + Transport: DefaultTransport, + } + + c, err := client.New(cfg) + if err != nil { + // handle error + } + +Clients are safe for concurrent use by multiple goroutines. + +Create a KeysAPI using the Client, then use it to interact with etcd: + + kAPI := client.NewKeysAPI(c) + + // create a new key /foo with the value "bar" + _, err = kAPI.Create(context.Background(), "/foo", "bar") + if err != nil { + // handle error + } + + // delete the newly created key only if the value is still "bar" + _, err = kAPI.Delete(context.Background(), "/foo", &DeleteOptions{PrevValue: "bar"}) + if err != nil { + // handle error + } + +Use a custom context to set timeouts on your operations: + + import "time" + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + // set a new key, ignoring it's previous state + _, err := kAPI.Set(ctx, "/ping", "pong", nil) + if err != nil { + if err == context.DeadlineExceeded { + // request took longer than 5s + } else { + // handle error + } + } + +*/ +package client diff --git a/vendor/github.com/coreos/etcd/client/keys.generated.go b/vendor/github.com/coreos/etcd/client/keys.generated.go new file mode 100644 index 00000000..748283aa --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/keys.generated.go @@ -0,0 +1,1000 @@ +// ************************************************************ +// DO NOT EDIT. +// THIS FILE IS AUTO-GENERATED BY codecgen. +// ************************************************************ + +package client + +import ( + "errors" + "fmt" + codec1978 "github.com/ugorji/go/codec" + "reflect" + "runtime" + time "time" +) + +const ( + // ----- content types ---- + codecSelferC_UTF81819 = 1 + codecSelferC_RAW1819 = 0 + // ----- value types used ---- + codecSelferValueTypeArray1819 = 10 + codecSelferValueTypeMap1819 = 9 + // ----- containerStateValues ---- + codecSelfer_containerMapKey1819 = 2 + codecSelfer_containerMapValue1819 = 3 + codecSelfer_containerMapEnd1819 = 4 + codecSelfer_containerArrayElem1819 = 6 + codecSelfer_containerArrayEnd1819 = 7 +) + +var ( + codecSelferBitsize1819 = uint8(reflect.TypeOf(uint(0)).Bits()) + codecSelferOnlyMapOrArrayEncodeToStructErr1819 = errors.New(`only encoded map or array can be decoded into a struct`) +) + +type codecSelfer1819 struct{} + +func init() { + if codec1978.GenVersion != 5 { + _, file, _, _ := runtime.Caller(0) + err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", + 5, codec1978.GenVersion, file) + panic(err) + } + if false { // reference the types, but skip this branch at build/run time + var v0 time.Time + _ = v0 + } +} + +func (x *Response) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [3]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(3) + } else { + yynn2 = 3 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81819, string(x.Action)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("action")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81819, string(x.Action)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + if x.Node == nil { + r.EncodeNil() + } else { + x.Node.CodecEncodeSelf(e) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("node")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + if x.Node == nil { + r.EncodeNil() + } else { + x.Node.CodecEncodeSelf(e) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + if x.PrevNode == nil { + r.EncodeNil() + } else { + x.PrevNode.CodecEncodeSelf(e) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("prevNode")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + if x.PrevNode == nil { + r.EncodeNil() + } else { + x.PrevNode.CodecEncodeSelf(e) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1819) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1819) + } + } + } +} + +func (x *Response) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym8 := z.DecBinary() + _ = yym8 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct9 := r.ContainerType() + if yyct9 == codecSelferValueTypeMap1819 { + yyl9 := r.ReadMapStart() + if yyl9 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1819) + } else { + x.codecDecodeSelfFromMap(yyl9, d) + } + } else if yyct9 == codecSelferValueTypeArray1819 { + yyl9 := r.ReadArrayStart() + if yyl9 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + } else { + x.codecDecodeSelfFromArray(yyl9, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1819) + } + } +} + +func (x *Response) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys10Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys10Slc + var yyhl10 bool = l >= 0 + for yyj10 := 0; ; yyj10++ { + if yyhl10 { + if yyj10 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1819) + yys10Slc = r.DecodeBytes(yys10Slc, true, true) + yys10 := string(yys10Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1819) + switch yys10 { + case "action": + if r.TryDecodeAsNil() { + x.Action = "" + } else { + x.Action = string(r.DecodeString()) + } + case "node": + if r.TryDecodeAsNil() { + if x.Node != nil { + x.Node = nil + } + } else { + if x.Node == nil { + x.Node = new(Node) + } + x.Node.CodecDecodeSelf(d) + } + case "prevNode": + if r.TryDecodeAsNil() { + if x.PrevNode != nil { + x.PrevNode = nil + } + } else { + if x.PrevNode == nil { + x.PrevNode = new(Node) + } + x.PrevNode.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys10) + } // end switch yys10 + } // end for yyj10 + z.DecSendContainerState(codecSelfer_containerMapEnd1819) +} + +func (x *Response) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj14 int + var yyb14 bool + var yyhl14 bool = l >= 0 + yyj14++ + if yyhl14 { + yyb14 = yyj14 > l + } else { + yyb14 = r.CheckBreak() + } + if yyb14 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + x.Action = "" + } else { + x.Action = string(r.DecodeString()) + } + yyj14++ + if yyhl14 { + yyb14 = yyj14 > l + } else { + yyb14 = r.CheckBreak() + } + if yyb14 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + if x.Node != nil { + x.Node = nil + } + } else { + if x.Node == nil { + x.Node = new(Node) + } + x.Node.CodecDecodeSelf(d) + } + yyj14++ + if yyhl14 { + yyb14 = yyj14 > l + } else { + yyb14 = r.CheckBreak() + } + if yyb14 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + if x.PrevNode != nil { + x.PrevNode = nil + } + } else { + if x.PrevNode == nil { + x.PrevNode = new(Node) + } + x.PrevNode.CodecDecodeSelf(d) + } + for { + yyj14++ + if yyhl14 { + yyb14 = yyj14 > l + } else { + yyb14 = r.CheckBreak() + } + if yyb14 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + z.DecStructFieldNotFound(yyj14-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) +} + +func (x *Node) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym18 := z.EncBinary() + _ = yym18 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep19 := !z.EncBinary() + yy2arr19 := z.EncBasicHandle().StructToArray + var yyq19 [8]bool + _, _, _ = yysep19, yyq19, yy2arr19 + const yyr19 bool = false + yyq19[1] = x.Dir != false + yyq19[6] = x.Expiration != nil + yyq19[7] = x.TTL != 0 + var yynn19 int + if yyr19 || yy2arr19 { + r.EncodeArrayStart(8) + } else { + yynn19 = 5 + for _, b := range yyq19 { + if b { + yynn19++ + } + } + r.EncodeMapStart(yynn19) + yynn19 = 0 + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + yym21 := z.EncBinary() + _ = yym21 + if false { + } else { + r.EncodeString(codecSelferC_UTF81819, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + yym22 := z.EncBinary() + _ = yym22 + if false { + } else { + r.EncodeString(codecSelferC_UTF81819, string(x.Key)) + } + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + if yyq19[1] { + yym24 := z.EncBinary() + _ = yym24 + if false { + } else { + r.EncodeBool(bool(x.Dir)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq19[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("dir")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + yym25 := z.EncBinary() + _ = yym25 + if false { + } else { + r.EncodeBool(bool(x.Dir)) + } + } + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + yym27 := z.EncBinary() + _ = yym27 + if false { + } else { + r.EncodeString(codecSelferC_UTF81819, string(x.Value)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + yym28 := z.EncBinary() + _ = yym28 + if false { + } else { + r.EncodeString(codecSelferC_UTF81819, string(x.Value)) + } + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + if x.Nodes == nil { + r.EncodeNil() + } else { + x.Nodes.CodecEncodeSelf(e) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("nodes")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + if x.Nodes == nil { + r.EncodeNil() + } else { + x.Nodes.CodecEncodeSelf(e) + } + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + yym31 := z.EncBinary() + _ = yym31 + if false { + } else { + r.EncodeUint(uint64(x.CreatedIndex)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("createdIndex")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + yym32 := z.EncBinary() + _ = yym32 + if false { + } else { + r.EncodeUint(uint64(x.CreatedIndex)) + } + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + yym34 := z.EncBinary() + _ = yym34 + if false { + } else { + r.EncodeUint(uint64(x.ModifiedIndex)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("modifiedIndex")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + yym35 := z.EncBinary() + _ = yym35 + if false { + } else { + r.EncodeUint(uint64(x.ModifiedIndex)) + } + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + if yyq19[6] { + if x.Expiration == nil { + r.EncodeNil() + } else { + yym37 := z.EncBinary() + _ = yym37 + if false { + } else if yym38 := z.TimeRtidIfBinc(); yym38 != 0 { + r.EncodeBuiltin(yym38, x.Expiration) + } else if z.HasExtensions() && z.EncExt(x.Expiration) { + } else if yym37 { + z.EncBinaryMarshal(x.Expiration) + } else if !yym37 && z.IsJSONHandle() { + z.EncJSONMarshal(x.Expiration) + } else { + z.EncFallback(x.Expiration) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq19[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("expiration")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + if x.Expiration == nil { + r.EncodeNil() + } else { + yym39 := z.EncBinary() + _ = yym39 + if false { + } else if yym40 := z.TimeRtidIfBinc(); yym40 != 0 { + r.EncodeBuiltin(yym40, x.Expiration) + } else if z.HasExtensions() && z.EncExt(x.Expiration) { + } else if yym39 { + z.EncBinaryMarshal(x.Expiration) + } else if !yym39 && z.IsJSONHandle() { + z.EncJSONMarshal(x.Expiration) + } else { + z.EncFallback(x.Expiration) + } + } + } + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + if yyq19[7] { + yym42 := z.EncBinary() + _ = yym42 + if false { + } else { + r.EncodeInt(int64(x.TTL)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq19[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1819) + r.EncodeString(codecSelferC_UTF81819, string("ttl")) + z.EncSendContainerState(codecSelfer_containerMapValue1819) + yym43 := z.EncBinary() + _ = yym43 + if false { + } else { + r.EncodeInt(int64(x.TTL)) + } + } + } + if yyr19 || yy2arr19 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1819) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1819) + } + } + } +} + +func (x *Node) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym44 := z.DecBinary() + _ = yym44 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct45 := r.ContainerType() + if yyct45 == codecSelferValueTypeMap1819 { + yyl45 := r.ReadMapStart() + if yyl45 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1819) + } else { + x.codecDecodeSelfFromMap(yyl45, d) + } + } else if yyct45 == codecSelferValueTypeArray1819 { + yyl45 := r.ReadArrayStart() + if yyl45 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + } else { + x.codecDecodeSelfFromArray(yyl45, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1819) + } + } +} + +func (x *Node) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys46Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys46Slc + var yyhl46 bool = l >= 0 + for yyj46 := 0; ; yyj46++ { + if yyhl46 { + if yyj46 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1819) + yys46Slc = r.DecodeBytes(yys46Slc, true, true) + yys46 := string(yys46Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1819) + switch yys46 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "dir": + if r.TryDecodeAsNil() { + x.Dir = false + } else { + x.Dir = bool(r.DecodeBool()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + case "nodes": + if r.TryDecodeAsNil() { + x.Nodes = nil + } else { + yyv50 := &x.Nodes + yyv50.CodecDecodeSelf(d) + } + case "createdIndex": + if r.TryDecodeAsNil() { + x.CreatedIndex = 0 + } else { + x.CreatedIndex = uint64(r.DecodeUint(64)) + } + case "modifiedIndex": + if r.TryDecodeAsNil() { + x.ModifiedIndex = 0 + } else { + x.ModifiedIndex = uint64(r.DecodeUint(64)) + } + case "expiration": + if r.TryDecodeAsNil() { + if x.Expiration != nil { + x.Expiration = nil + } + } else { + if x.Expiration == nil { + x.Expiration = new(time.Time) + } + yym54 := z.DecBinary() + _ = yym54 + if false { + } else if yym55 := z.TimeRtidIfBinc(); yym55 != 0 { + r.DecodeBuiltin(yym55, x.Expiration) + } else if z.HasExtensions() && z.DecExt(x.Expiration) { + } else if yym54 { + z.DecBinaryUnmarshal(x.Expiration) + } else if !yym54 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.Expiration) + } else { + z.DecFallback(x.Expiration, false) + } + } + case "ttl": + if r.TryDecodeAsNil() { + x.TTL = 0 + } else { + x.TTL = int64(r.DecodeInt(64)) + } + default: + z.DecStructFieldNotFound(-1, yys46) + } // end switch yys46 + } // end for yyj46 + z.DecSendContainerState(codecSelfer_containerMapEnd1819) +} + +func (x *Node) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj57 int + var yyb57 bool + var yyhl57 bool = l >= 0 + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + x.Dir = false + } else { + x.Dir = bool(r.DecodeBool()) + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + x.Nodes = nil + } else { + yyv61 := &x.Nodes + yyv61.CodecDecodeSelf(d) + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + x.CreatedIndex = 0 + } else { + x.CreatedIndex = uint64(r.DecodeUint(64)) + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + x.ModifiedIndex = 0 + } else { + x.ModifiedIndex = uint64(r.DecodeUint(64)) + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + if x.Expiration != nil { + x.Expiration = nil + } + } else { + if x.Expiration == nil { + x.Expiration = new(time.Time) + } + yym65 := z.DecBinary() + _ = yym65 + if false { + } else if yym66 := z.TimeRtidIfBinc(); yym66 != 0 { + r.DecodeBuiltin(yym66, x.Expiration) + } else if z.HasExtensions() && z.DecExt(x.Expiration) { + } else if yym65 { + z.DecBinaryUnmarshal(x.Expiration) + } else if !yym65 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.Expiration) + } else { + z.DecFallback(x.Expiration, false) + } + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + if r.TryDecodeAsNil() { + x.TTL = 0 + } else { + x.TTL = int64(r.DecodeInt(64)) + } + for { + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1819) + z.DecStructFieldNotFound(yyj57-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1819) +} + +func (x Nodes) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym68 := z.EncBinary() + _ = yym68 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + h.encNodes((Nodes)(x), e) + } + } +} + +func (x *Nodes) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym69 := z.DecBinary() + _ = yym69 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + h.decNodes((*Nodes)(x), d) + } +} + +func (x codecSelfer1819) encNodes(v Nodes, e *codec1978.Encoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv70 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1819) + if yyv70 == nil { + r.EncodeNil() + } else { + yyv70.CodecEncodeSelf(e) + } + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1819) +} + +func (x codecSelfer1819) decNodes(v *Nodes, d *codec1978.Decoder) { + var h codecSelfer1819 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv71 := *v + yyh71, yyl71 := z.DecSliceHelperStart() + var yyc71 bool + if yyl71 == 0 { + if yyv71 == nil { + yyv71 = []*Node{} + yyc71 = true + } else if len(yyv71) != 0 { + yyv71 = yyv71[:0] + yyc71 = true + } + } else if yyl71 > 0 { + var yyrr71, yyrl71 int + var yyrt71 bool + if yyl71 > cap(yyv71) { + + yyrg71 := len(yyv71) > 0 + yyv271 := yyv71 + yyrl71, yyrt71 = z.DecInferLen(yyl71, z.DecBasicHandle().MaxInitLen, 8) + if yyrt71 { + if yyrl71 <= cap(yyv71) { + yyv71 = yyv71[:yyrl71] + } else { + yyv71 = make([]*Node, yyrl71) + } + } else { + yyv71 = make([]*Node, yyrl71) + } + yyc71 = true + yyrr71 = len(yyv71) + if yyrg71 { + copy(yyv71, yyv271) + } + } else if yyl71 != len(yyv71) { + yyv71 = yyv71[:yyl71] + yyc71 = true + } + yyj71 := 0 + for ; yyj71 < yyrr71; yyj71++ { + yyh71.ElemContainerState(yyj71) + if r.TryDecodeAsNil() { + if yyv71[yyj71] != nil { + *yyv71[yyj71] = Node{} + } + } else { + if yyv71[yyj71] == nil { + yyv71[yyj71] = new(Node) + } + yyw72 := yyv71[yyj71] + yyw72.CodecDecodeSelf(d) + } + + } + if yyrt71 { + for ; yyj71 < yyl71; yyj71++ { + yyv71 = append(yyv71, nil) + yyh71.ElemContainerState(yyj71) + if r.TryDecodeAsNil() { + if yyv71[yyj71] != nil { + *yyv71[yyj71] = Node{} + } + } else { + if yyv71[yyj71] == nil { + yyv71[yyj71] = new(Node) + } + yyw73 := yyv71[yyj71] + yyw73.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj71 := 0 + for ; !r.CheckBreak(); yyj71++ { + + if yyj71 >= len(yyv71) { + yyv71 = append(yyv71, nil) // var yyz71 *Node + yyc71 = true + } + yyh71.ElemContainerState(yyj71) + if yyj71 < len(yyv71) { + if r.TryDecodeAsNil() { + if yyv71[yyj71] != nil { + *yyv71[yyj71] = Node{} + } + } else { + if yyv71[yyj71] == nil { + yyv71[yyj71] = new(Node) + } + yyw74 := yyv71[yyj71] + yyw74.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj71 < len(yyv71) { + yyv71 = yyv71[:yyj71] + yyc71 = true + } else if yyj71 == 0 && yyv71 == nil { + yyv71 = []*Node{} + yyc71 = true + } + } + yyh71.End() + if yyc71 { + *v = yyv71 + } +} diff --git a/vendor/github.com/coreos/etcd/client/keys.go b/vendor/github.com/coreos/etcd/client/keys.go new file mode 100644 index 00000000..62d5d506 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/keys.go @@ -0,0 +1,668 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +//go:generate codecgen -d 1819 -r "Node|Response|Nodes" -o keys.generated.go keys.go + +import ( + "encoding/json" + "errors" + "fmt" + "net/http" + "net/url" + "strconv" + "strings" + "time" + + "github.com/coreos/etcd/pkg/pathutil" + "github.com/ugorji/go/codec" + "golang.org/x/net/context" +) + +const ( + ErrorCodeKeyNotFound = 100 + ErrorCodeTestFailed = 101 + ErrorCodeNotFile = 102 + ErrorCodeNotDir = 104 + ErrorCodeNodeExist = 105 + ErrorCodeRootROnly = 107 + ErrorCodeDirNotEmpty = 108 + ErrorCodeUnauthorized = 110 + + ErrorCodePrevValueRequired = 201 + ErrorCodeTTLNaN = 202 + ErrorCodeIndexNaN = 203 + ErrorCodeInvalidField = 209 + ErrorCodeInvalidForm = 210 + + ErrorCodeRaftInternal = 300 + ErrorCodeLeaderElect = 301 + + ErrorCodeWatcherCleared = 400 + ErrorCodeEventIndexCleared = 401 +) + +type Error struct { + Code int `json:"errorCode"` + Message string `json:"message"` + Cause string `json:"cause"` + Index uint64 `json:"index"` +} + +func (e Error) Error() string { + return fmt.Sprintf("%v: %v (%v) [%v]", e.Code, e.Message, e.Cause, e.Index) +} + +var ( + ErrInvalidJSON = errors.New("client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint.") + ErrEmptyBody = errors.New("client: response body is empty") +) + +// PrevExistType is used to define an existence condition when setting +// or deleting Nodes. +type PrevExistType string + +const ( + PrevIgnore = PrevExistType("") + PrevExist = PrevExistType("true") + PrevNoExist = PrevExistType("false") +) + +var ( + defaultV2KeysPrefix = "/v2/keys" +) + +// NewKeysAPI builds a KeysAPI that interacts with etcd's key-value +// API over HTTP. +func NewKeysAPI(c Client) KeysAPI { + return NewKeysAPIWithPrefix(c, defaultV2KeysPrefix) +} + +// NewKeysAPIWithPrefix acts like NewKeysAPI, but allows the caller +// to provide a custom base URL path. This should only be used in +// very rare cases. +func NewKeysAPIWithPrefix(c Client, p string) KeysAPI { + return &httpKeysAPI{ + client: c, + prefix: p, + } +} + +type KeysAPI interface { + // Get retrieves a set of Nodes from etcd + Get(ctx context.Context, key string, opts *GetOptions) (*Response, error) + + // Set assigns a new value to a Node identified by a given key. The caller + // may define a set of conditions in the SetOptions. If SetOptions.Dir=true + // then value is ignored. + Set(ctx context.Context, key, value string, opts *SetOptions) (*Response, error) + + // Delete removes a Node identified by the given key, optionally destroying + // all of its children as well. The caller may define a set of required + // conditions in an DeleteOptions object. + Delete(ctx context.Context, key string, opts *DeleteOptions) (*Response, error) + + // Create is an alias for Set w/ PrevExist=false + Create(ctx context.Context, key, value string) (*Response, error) + + // CreateInOrder is used to atomically create in-order keys within the given directory. + CreateInOrder(ctx context.Context, dir, value string, opts *CreateInOrderOptions) (*Response, error) + + // Update is an alias for Set w/ PrevExist=true + Update(ctx context.Context, key, value string) (*Response, error) + + // Watcher builds a new Watcher targeted at a specific Node identified + // by the given key. The Watcher may be configured at creation time + // through a WatcherOptions object. The returned Watcher is designed + // to emit events that happen to a Node, and optionally to its children. + Watcher(key string, opts *WatcherOptions) Watcher +} + +type WatcherOptions struct { + // AfterIndex defines the index after-which the Watcher should + // start emitting events. For example, if a value of 5 is + // provided, the first event will have an index >= 6. + // + // Setting AfterIndex to 0 (default) means that the Watcher + // should start watching for events starting at the current + // index, whatever that may be. + AfterIndex uint64 + + // Recursive specifies whether or not the Watcher should emit + // events that occur in children of the given keyspace. If set + // to false (default), events will be limited to those that + // occur for the exact key. + Recursive bool +} + +type CreateInOrderOptions struct { + // TTL defines a period of time after-which the Node should + // expire and no longer exist. Values <= 0 are ignored. Given + // that the zero-value is ignored, TTL cannot be used to set + // a TTL of 0. + TTL time.Duration +} + +type SetOptions struct { + // PrevValue specifies what the current value of the Node must + // be in order for the Set operation to succeed. + // + // Leaving this field empty means that the caller wishes to + // ignore the current value of the Node. This cannot be used + // to compare the Node's current value to an empty string. + // + // PrevValue is ignored if Dir=true + PrevValue string + + // PrevIndex indicates what the current ModifiedIndex of the + // Node must be in order for the Set operation to succeed. + // + // If PrevIndex is set to 0 (default), no comparison is made. + PrevIndex uint64 + + // PrevExist specifies whether the Node must currently exist + // (PrevExist) or not (PrevNoExist). If the caller does not + // care about existence, set PrevExist to PrevIgnore, or simply + // leave it unset. + PrevExist PrevExistType + + // TTL defines a period of time after-which the Node should + // expire and no longer exist. Values <= 0 are ignored. Given + // that the zero-value is ignored, TTL cannot be used to set + // a TTL of 0. + TTL time.Duration + + // Refresh set to true means a TTL value can be updated + // without firing a watch or changing the node value. A + // value must not be provided when refreshing a key. + Refresh bool + + // Dir specifies whether or not this Node should be created as a directory. + Dir bool +} + +type GetOptions struct { + // Recursive defines whether or not all children of the Node + // should be returned. + Recursive bool + + // Sort instructs the server whether or not to sort the Nodes. + // If true, the Nodes are sorted alphabetically by key in + // ascending order (A to z). If false (default), the Nodes will + // not be sorted and the ordering used should not be considered + // predictable. + Sort bool + + // Quorum specifies whether it gets the latest committed value that + // has been applied in quorum of members, which ensures external + // consistency (or linearizability). + Quorum bool +} + +type DeleteOptions struct { + // PrevValue specifies what the current value of the Node must + // be in order for the Delete operation to succeed. + // + // Leaving this field empty means that the caller wishes to + // ignore the current value of the Node. This cannot be used + // to compare the Node's current value to an empty string. + PrevValue string + + // PrevIndex indicates what the current ModifiedIndex of the + // Node must be in order for the Delete operation to succeed. + // + // If PrevIndex is set to 0 (default), no comparison is made. + PrevIndex uint64 + + // Recursive defines whether or not all children of the Node + // should be deleted. If set to true, all children of the Node + // identified by the given key will be deleted. If left unset + // or explicitly set to false, only a single Node will be + // deleted. + Recursive bool + + // Dir specifies whether or not this Node should be removed as a directory. + Dir bool +} + +type Watcher interface { + // Next blocks until an etcd event occurs, then returns a Response + // representing that event. The behavior of Next depends on the + // WatcherOptions used to construct the Watcher. Next is designed to + // be called repeatedly, each time blocking until a subsequent event + // is available. + // + // If the provided context is cancelled, Next will return a non-nil + // error. Any other failures encountered while waiting for the next + // event (connection issues, deserialization failures, etc) will + // also result in a non-nil error. + Next(context.Context) (*Response, error) +} + +type Response struct { + // Action is the name of the operation that occurred. Possible values + // include get, set, delete, update, create, compareAndSwap, + // compareAndDelete and expire. + Action string `json:"action"` + + // Node represents the state of the relevant etcd Node. + Node *Node `json:"node"` + + // PrevNode represents the previous state of the Node. PrevNode is non-nil + // only if the Node existed before the action occurred and the action + // caused a change to the Node. + PrevNode *Node `json:"prevNode"` + + // Index holds the cluster-level index at the time the Response was generated. + // This index is not tied to the Node(s) contained in this Response. + Index uint64 `json:"-"` +} + +type Node struct { + // Key represents the unique location of this Node (e.g. "/foo/bar"). + Key string `json:"key"` + + // Dir reports whether node describes a directory. + Dir bool `json:"dir,omitempty"` + + // Value is the current data stored on this Node. If this Node + // is a directory, Value will be empty. + Value string `json:"value"` + + // Nodes holds the children of this Node, only if this Node is a directory. + // This slice of will be arbitrarily deep (children, grandchildren, great- + // grandchildren, etc.) if a recursive Get or Watch request were made. + Nodes Nodes `json:"nodes"` + + // CreatedIndex is the etcd index at-which this Node was created. + CreatedIndex uint64 `json:"createdIndex"` + + // ModifiedIndex is the etcd index at-which this Node was last modified. + ModifiedIndex uint64 `json:"modifiedIndex"` + + // Expiration is the server side expiration time of the key. + Expiration *time.Time `json:"expiration,omitempty"` + + // TTL is the time to live of the key in second. + TTL int64 `json:"ttl,omitempty"` +} + +func (n *Node) String() string { + return fmt.Sprintf("{Key: %s, CreatedIndex: %d, ModifiedIndex: %d, TTL: %d}", n.Key, n.CreatedIndex, n.ModifiedIndex, n.TTL) +} + +// TTLDuration returns the Node's TTL as a time.Duration object +func (n *Node) TTLDuration() time.Duration { + return time.Duration(n.TTL) * time.Second +} + +type Nodes []*Node + +// interfaces for sorting + +func (ns Nodes) Len() int { return len(ns) } +func (ns Nodes) Less(i, j int) bool { return ns[i].Key < ns[j].Key } +func (ns Nodes) Swap(i, j int) { ns[i], ns[j] = ns[j], ns[i] } + +type httpKeysAPI struct { + client httpClient + prefix string +} + +func (k *httpKeysAPI) Set(ctx context.Context, key, val string, opts *SetOptions) (*Response, error) { + act := &setAction{ + Prefix: k.prefix, + Key: key, + Value: val, + } + + if opts != nil { + act.PrevValue = opts.PrevValue + act.PrevIndex = opts.PrevIndex + act.PrevExist = opts.PrevExist + act.TTL = opts.TTL + act.Refresh = opts.Refresh + act.Dir = opts.Dir + } + + doCtx := ctx + if act.PrevExist == PrevNoExist { + doCtx = context.WithValue(doCtx, &oneShotCtxValue, &oneShotCtxValue) + } + resp, body, err := k.client.Do(doCtx, act) + if err != nil { + return nil, err + } + + return unmarshalHTTPResponse(resp.StatusCode, resp.Header, body) +} + +func (k *httpKeysAPI) Create(ctx context.Context, key, val string) (*Response, error) { + return k.Set(ctx, key, val, &SetOptions{PrevExist: PrevNoExist}) +} + +func (k *httpKeysAPI) CreateInOrder(ctx context.Context, dir, val string, opts *CreateInOrderOptions) (*Response, error) { + act := &createInOrderAction{ + Prefix: k.prefix, + Dir: dir, + Value: val, + } + + if opts != nil { + act.TTL = opts.TTL + } + + resp, body, err := k.client.Do(ctx, act) + if err != nil { + return nil, err + } + + return unmarshalHTTPResponse(resp.StatusCode, resp.Header, body) +} + +func (k *httpKeysAPI) Update(ctx context.Context, key, val string) (*Response, error) { + return k.Set(ctx, key, val, &SetOptions{PrevExist: PrevExist}) +} + +func (k *httpKeysAPI) Delete(ctx context.Context, key string, opts *DeleteOptions) (*Response, error) { + act := &deleteAction{ + Prefix: k.prefix, + Key: key, + } + + if opts != nil { + act.PrevValue = opts.PrevValue + act.PrevIndex = opts.PrevIndex + act.Dir = opts.Dir + act.Recursive = opts.Recursive + } + + doCtx := context.WithValue(ctx, &oneShotCtxValue, &oneShotCtxValue) + resp, body, err := k.client.Do(doCtx, act) + if err != nil { + return nil, err + } + + return unmarshalHTTPResponse(resp.StatusCode, resp.Header, body) +} + +func (k *httpKeysAPI) Get(ctx context.Context, key string, opts *GetOptions) (*Response, error) { + act := &getAction{ + Prefix: k.prefix, + Key: key, + } + + if opts != nil { + act.Recursive = opts.Recursive + act.Sorted = opts.Sort + act.Quorum = opts.Quorum + } + + resp, body, err := k.client.Do(ctx, act) + if err != nil { + return nil, err + } + + return unmarshalHTTPResponse(resp.StatusCode, resp.Header, body) +} + +func (k *httpKeysAPI) Watcher(key string, opts *WatcherOptions) Watcher { + act := waitAction{ + Prefix: k.prefix, + Key: key, + } + + if opts != nil { + act.Recursive = opts.Recursive + if opts.AfterIndex > 0 { + act.WaitIndex = opts.AfterIndex + 1 + } + } + + return &httpWatcher{ + client: k.client, + nextWait: act, + } +} + +type httpWatcher struct { + client httpClient + nextWait waitAction +} + +func (hw *httpWatcher) Next(ctx context.Context) (*Response, error) { + for { + httpresp, body, err := hw.client.Do(ctx, &hw.nextWait) + if err != nil { + return nil, err + } + + resp, err := unmarshalHTTPResponse(httpresp.StatusCode, httpresp.Header, body) + if err != nil { + if err == ErrEmptyBody { + continue + } + return nil, err + } + + hw.nextWait.WaitIndex = resp.Node.ModifiedIndex + 1 + return resp, nil + } +} + +// v2KeysURL forms a URL representing the location of a key. +// The endpoint argument represents the base URL of an etcd +// server. The prefix is the path needed to route from the +// provided endpoint's path to the root of the keys API +// (typically "/v2/keys"). +func v2KeysURL(ep url.URL, prefix, key string) *url.URL { + // We concatenate all parts together manually. We cannot use + // path.Join because it does not reserve trailing slash. + // We call CanonicalURLPath to further cleanup the path. + if prefix != "" && prefix[0] != '/' { + prefix = "/" + prefix + } + if key != "" && key[0] != '/' { + key = "/" + key + } + ep.Path = pathutil.CanonicalURLPath(ep.Path + prefix + key) + return &ep +} + +type getAction struct { + Prefix string + Key string + Recursive bool + Sorted bool + Quorum bool +} + +func (g *getAction) HTTPRequest(ep url.URL) *http.Request { + u := v2KeysURL(ep, g.Prefix, g.Key) + + params := u.Query() + params.Set("recursive", strconv.FormatBool(g.Recursive)) + params.Set("sorted", strconv.FormatBool(g.Sorted)) + params.Set("quorum", strconv.FormatBool(g.Quorum)) + u.RawQuery = params.Encode() + + req, _ := http.NewRequest("GET", u.String(), nil) + return req +} + +type waitAction struct { + Prefix string + Key string + WaitIndex uint64 + Recursive bool +} + +func (w *waitAction) HTTPRequest(ep url.URL) *http.Request { + u := v2KeysURL(ep, w.Prefix, w.Key) + + params := u.Query() + params.Set("wait", "true") + params.Set("waitIndex", strconv.FormatUint(w.WaitIndex, 10)) + params.Set("recursive", strconv.FormatBool(w.Recursive)) + u.RawQuery = params.Encode() + + req, _ := http.NewRequest("GET", u.String(), nil) + return req +} + +type setAction struct { + Prefix string + Key string + Value string + PrevValue string + PrevIndex uint64 + PrevExist PrevExistType + TTL time.Duration + Refresh bool + Dir bool +} + +func (a *setAction) HTTPRequest(ep url.URL) *http.Request { + u := v2KeysURL(ep, a.Prefix, a.Key) + + params := u.Query() + form := url.Values{} + + // we're either creating a directory or setting a key + if a.Dir { + params.Set("dir", strconv.FormatBool(a.Dir)) + } else { + // These options are only valid for setting a key + if a.PrevValue != "" { + params.Set("prevValue", a.PrevValue) + } + form.Add("value", a.Value) + } + + // Options which apply to both setting a key and creating a dir + if a.PrevIndex != 0 { + params.Set("prevIndex", strconv.FormatUint(a.PrevIndex, 10)) + } + if a.PrevExist != PrevIgnore { + params.Set("prevExist", string(a.PrevExist)) + } + if a.TTL > 0 { + form.Add("ttl", strconv.FormatUint(uint64(a.TTL.Seconds()), 10)) + } + + if a.Refresh { + form.Add("refresh", "true") + } + + u.RawQuery = params.Encode() + body := strings.NewReader(form.Encode()) + + req, _ := http.NewRequest("PUT", u.String(), body) + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + return req +} + +type deleteAction struct { + Prefix string + Key string + PrevValue string + PrevIndex uint64 + Dir bool + Recursive bool +} + +func (a *deleteAction) HTTPRequest(ep url.URL) *http.Request { + u := v2KeysURL(ep, a.Prefix, a.Key) + + params := u.Query() + if a.PrevValue != "" { + params.Set("prevValue", a.PrevValue) + } + if a.PrevIndex != 0 { + params.Set("prevIndex", strconv.FormatUint(a.PrevIndex, 10)) + } + if a.Dir { + params.Set("dir", "true") + } + if a.Recursive { + params.Set("recursive", "true") + } + u.RawQuery = params.Encode() + + req, _ := http.NewRequest("DELETE", u.String(), nil) + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + return req +} + +type createInOrderAction struct { + Prefix string + Dir string + Value string + TTL time.Duration +} + +func (a *createInOrderAction) HTTPRequest(ep url.URL) *http.Request { + u := v2KeysURL(ep, a.Prefix, a.Dir) + + form := url.Values{} + form.Add("value", a.Value) + if a.TTL > 0 { + form.Add("ttl", strconv.FormatUint(uint64(a.TTL.Seconds()), 10)) + } + body := strings.NewReader(form.Encode()) + + req, _ := http.NewRequest("POST", u.String(), body) + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + return req +} + +func unmarshalHTTPResponse(code int, header http.Header, body []byte) (res *Response, err error) { + switch code { + case http.StatusOK, http.StatusCreated: + if len(body) == 0 { + return nil, ErrEmptyBody + } + res, err = unmarshalSuccessfulKeysResponse(header, body) + default: + err = unmarshalFailedKeysResponse(body) + } + + return +} + +func unmarshalSuccessfulKeysResponse(header http.Header, body []byte) (*Response, error) { + var res Response + err := codec.NewDecoderBytes(body, new(codec.JsonHandle)).Decode(&res) + if err != nil { + return nil, ErrInvalidJSON + } + if header.Get("X-Etcd-Index") != "" { + res.Index, err = strconv.ParseUint(header.Get("X-Etcd-Index"), 10, 64) + if err != nil { + return nil, err + } + } + return &res, nil +} + +func unmarshalFailedKeysResponse(body []byte) error { + var etcdErr Error + if err := json.Unmarshal(body, &etcdErr); err != nil { + return ErrInvalidJSON + } + return etcdErr +} diff --git a/vendor/github.com/coreos/etcd/client/members.go b/vendor/github.com/coreos/etcd/client/members.go new file mode 100644 index 00000000..23adf07a --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/members.go @@ -0,0 +1,304 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import ( + "bytes" + "encoding/json" + "fmt" + "net/http" + "net/url" + "path" + + "golang.org/x/net/context" + + "github.com/coreos/etcd/pkg/types" +) + +var ( + defaultV2MembersPrefix = "/v2/members" + defaultLeaderSuffix = "/leader" +) + +type Member struct { + // ID is the unique identifier of this Member. + ID string `json:"id"` + + // Name is a human-readable, non-unique identifier of this Member. + Name string `json:"name"` + + // PeerURLs represents the HTTP(S) endpoints this Member uses to + // participate in etcd's consensus protocol. + PeerURLs []string `json:"peerURLs"` + + // ClientURLs represents the HTTP(S) endpoints on which this Member + // serves it's client-facing APIs. + ClientURLs []string `json:"clientURLs"` +} + +type memberCollection []Member + +func (c *memberCollection) UnmarshalJSON(data []byte) error { + d := struct { + Members []Member + }{} + + if err := json.Unmarshal(data, &d); err != nil { + return err + } + + if d.Members == nil { + *c = make([]Member, 0) + return nil + } + + *c = d.Members + return nil +} + +type memberCreateOrUpdateRequest struct { + PeerURLs types.URLs +} + +func (m *memberCreateOrUpdateRequest) MarshalJSON() ([]byte, error) { + s := struct { + PeerURLs []string `json:"peerURLs"` + }{ + PeerURLs: make([]string, len(m.PeerURLs)), + } + + for i, u := range m.PeerURLs { + s.PeerURLs[i] = u.String() + } + + return json.Marshal(&s) +} + +// NewMembersAPI constructs a new MembersAPI that uses HTTP to +// interact with etcd's membership API. +func NewMembersAPI(c Client) MembersAPI { + return &httpMembersAPI{ + client: c, + } +} + +type MembersAPI interface { + // List enumerates the current cluster membership. + List(ctx context.Context) ([]Member, error) + + // Add instructs etcd to accept a new Member into the cluster. + Add(ctx context.Context, peerURL string) (*Member, error) + + // Remove demotes an existing Member out of the cluster. + Remove(ctx context.Context, mID string) error + + // Update instructs etcd to update an existing Member in the cluster. + Update(ctx context.Context, mID string, peerURLs []string) error + + // Leader gets current leader of the cluster + Leader(ctx context.Context) (*Member, error) +} + +type httpMembersAPI struct { + client httpClient +} + +func (m *httpMembersAPI) List(ctx context.Context) ([]Member, error) { + req := &membersAPIActionList{} + resp, body, err := m.client.Do(ctx, req) + if err != nil { + return nil, err + } + + if err := assertStatusCode(resp.StatusCode, http.StatusOK); err != nil { + return nil, err + } + + var mCollection memberCollection + if err := json.Unmarshal(body, &mCollection); err != nil { + return nil, err + } + + return []Member(mCollection), nil +} + +func (m *httpMembersAPI) Add(ctx context.Context, peerURL string) (*Member, error) { + urls, err := types.NewURLs([]string{peerURL}) + if err != nil { + return nil, err + } + + req := &membersAPIActionAdd{peerURLs: urls} + resp, body, err := m.client.Do(ctx, req) + if err != nil { + return nil, err + } + + if err := assertStatusCode(resp.StatusCode, http.StatusCreated, http.StatusConflict); err != nil { + return nil, err + } + + if resp.StatusCode != http.StatusCreated { + var merr membersError + if err := json.Unmarshal(body, &merr); err != nil { + return nil, err + } + return nil, merr + } + + var memb Member + if err := json.Unmarshal(body, &memb); err != nil { + return nil, err + } + + return &memb, nil +} + +func (m *httpMembersAPI) Update(ctx context.Context, memberID string, peerURLs []string) error { + urls, err := types.NewURLs(peerURLs) + if err != nil { + return err + } + + req := &membersAPIActionUpdate{peerURLs: urls, memberID: memberID} + resp, body, err := m.client.Do(ctx, req) + if err != nil { + return err + } + + if err := assertStatusCode(resp.StatusCode, http.StatusNoContent, http.StatusNotFound, http.StatusConflict); err != nil { + return err + } + + if resp.StatusCode != http.StatusNoContent { + var merr membersError + if err := json.Unmarshal(body, &merr); err != nil { + return err + } + return merr + } + + return nil +} + +func (m *httpMembersAPI) Remove(ctx context.Context, memberID string) error { + req := &membersAPIActionRemove{memberID: memberID} + resp, _, err := m.client.Do(ctx, req) + if err != nil { + return err + } + + return assertStatusCode(resp.StatusCode, http.StatusNoContent, http.StatusGone) +} + +func (m *httpMembersAPI) Leader(ctx context.Context) (*Member, error) { + req := &membersAPIActionLeader{} + resp, body, err := m.client.Do(ctx, req) + if err != nil { + return nil, err + } + + if err := assertStatusCode(resp.StatusCode, http.StatusOK); err != nil { + return nil, err + } + + var leader Member + if err := json.Unmarshal(body, &leader); err != nil { + return nil, err + } + + return &leader, nil +} + +type membersAPIActionList struct{} + +func (l *membersAPIActionList) HTTPRequest(ep url.URL) *http.Request { + u := v2MembersURL(ep) + req, _ := http.NewRequest("GET", u.String(), nil) + return req +} + +type membersAPIActionRemove struct { + memberID string +} + +func (d *membersAPIActionRemove) HTTPRequest(ep url.URL) *http.Request { + u := v2MembersURL(ep) + u.Path = path.Join(u.Path, d.memberID) + req, _ := http.NewRequest("DELETE", u.String(), nil) + return req +} + +type membersAPIActionAdd struct { + peerURLs types.URLs +} + +func (a *membersAPIActionAdd) HTTPRequest(ep url.URL) *http.Request { + u := v2MembersURL(ep) + m := memberCreateOrUpdateRequest{PeerURLs: a.peerURLs} + b, _ := json.Marshal(&m) + req, _ := http.NewRequest("POST", u.String(), bytes.NewReader(b)) + req.Header.Set("Content-Type", "application/json") + return req +} + +type membersAPIActionUpdate struct { + memberID string + peerURLs types.URLs +} + +func (a *membersAPIActionUpdate) HTTPRequest(ep url.URL) *http.Request { + u := v2MembersURL(ep) + m := memberCreateOrUpdateRequest{PeerURLs: a.peerURLs} + u.Path = path.Join(u.Path, a.memberID) + b, _ := json.Marshal(&m) + req, _ := http.NewRequest("PUT", u.String(), bytes.NewReader(b)) + req.Header.Set("Content-Type", "application/json") + return req +} + +func assertStatusCode(got int, want ...int) (err error) { + for _, w := range want { + if w == got { + return nil + } + } + return fmt.Errorf("unexpected status code %d", got) +} + +type membersAPIActionLeader struct{} + +func (l *membersAPIActionLeader) HTTPRequest(ep url.URL) *http.Request { + u := v2MembersURL(ep) + u.Path = path.Join(u.Path, defaultLeaderSuffix) + req, _ := http.NewRequest("GET", u.String(), nil) + return req +} + +// v2MembersURL add the necessary path to the provided endpoint +// to route requests to the default v2 members API. +func v2MembersURL(ep url.URL) *url.URL { + ep.Path = path.Join(ep.Path, defaultV2MembersPrefix) + return &ep +} + +type membersError struct { + Message string `json:"message"` + Code int `json:"-"` +} + +func (e membersError) Error() string { + return e.Message +} diff --git a/vendor/github.com/coreos/etcd/client/srv.go b/vendor/github.com/coreos/etcd/client/srv.go new file mode 100644 index 00000000..fdfa3435 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/srv.go @@ -0,0 +1,65 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +import ( + "fmt" + "net" + "net/url" +) + +var ( + // indirection for testing + lookupSRV = net.LookupSRV +) + +type srvDiscover struct{} + +// NewSRVDiscover constructs a new Discoverer that uses the stdlib to lookup SRV records. +func NewSRVDiscover() Discoverer { + return &srvDiscover{} +} + +// Discover looks up the etcd servers for the domain. +func (d *srvDiscover) Discover(domain string) ([]string, error) { + var urls []*url.URL + + updateURLs := func(service, scheme string) error { + _, addrs, err := lookupSRV(service, "tcp", domain) + if err != nil { + return err + } + for _, srv := range addrs { + urls = append(urls, &url.URL{ + Scheme: scheme, + Host: net.JoinHostPort(srv.Target, fmt.Sprintf("%d", srv.Port)), + }) + } + return nil + } + + errHTTPS := updateURLs("etcd-client-ssl", "https") + errHTTP := updateURLs("etcd-client", "http") + + if errHTTPS != nil && errHTTP != nil { + return nil, fmt.Errorf("dns lookup errors: %s and %s", errHTTPS, errHTTP) + } + + endpoints := make([]string, len(urls)) + for i := range urls { + endpoints[i] = urls[i].String() + } + return endpoints, nil +} diff --git a/vendor/github.com/coreos/etcd/client/util.go b/vendor/github.com/coreos/etcd/client/util.go new file mode 100644 index 00000000..198bff96 --- /dev/null +++ b/vendor/github.com/coreos/etcd/client/util.go @@ -0,0 +1,23 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package client + +// IsKeyNotFound returns true if the error code is ErrorCodeKeyNotFound. +func IsKeyNotFound(err error) bool { + if cErr, ok := err.(Error); ok { + return cErr.Code == ErrorCodeKeyNotFound + } + return false +} diff --git a/vendor/github.com/coreos/etcd/clientv3/README.md b/vendor/github.com/coreos/etcd/clientv3/README.md new file mode 100644 index 00000000..e434f999 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/README.md @@ -0,0 +1,77 @@ +# etcd/clientv3 + +[![Godoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](https://godoc.org/github.com/coreos/etcd/clientv3) + +`etcd/clientv3` is the official Go etcd client for v3. + +## Install + +```bash +go get github.com/coreos/etcd/clientv3 +``` + +## Get started + +Create client using `clientv3.New`: + +```go +cli, err := clientv3.New(clientv3.Config{ + Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"}, + DialTimeout: 5 * time.Second, +}) +if err != nil { + // handle error! +} +defer cli.Close() +``` + +etcd v3 uses [`gRPC`](http://www.grpc.io) for remote procedure calls. And `clientv3` uses +[`grpc-go`](https://github.com/grpc/grpc-go) to connect to etcd. Make sure to close the client after using it. +If the client is not closed, the connection will have leaky goroutines. To specify client request timeout, +pass `context.WithTimeout` to APIs: + +```go +ctx, cancel := context.WithTimeout(context.Background(), timeout) +resp, err := kvc.Put(ctx, "sample_key", "sample_value") +cancel() +if err != nil { + // handle error! +} +// use the response +``` + +etcd uses `cmd/vendor` directory to store external dependencies, which are +to be compiled into etcd release binaries. `client` can be imported without +vendoring. For full compatibility, it is recommended to vendor builds using +etcd's vendored packages, using tools like godep, as in +[vendor directories](https://golang.org/cmd/go/#hdr-Vendor_Directories). +For more detail, please read [Go vendor design](https://golang.org/s/go15vendor). + +## Error Handling + +etcd client returns 2 types of errors: + +1. context error: canceled or deadline exceeded. +2. gRPC error: see [api/v3rpc/rpctypes](https://godoc.org/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes). + +Here is the example code to handle client errors: + +```go +resp, err := kvc.Put(ctx, "", "") +if err != nil { + switch err { + case context.Canceled: + log.Fatalf("ctx is canceled by another routine: %v", err) + case context.DeadlineExceeded: + log.Fatalf("ctx is attached with a deadline is exceeded: %v", err) + case rpctypes.ErrEmptyKey: + log.Fatalf("client-side error: %v", err) + default: + log.Fatalf("bad cluster endpoints, which are not etcd servers: %v", err) + } +} +``` + +## Examples + +More code examples can be found at [GoDoc](https://godoc.org/github.com/coreos/etcd/clientv3). diff --git a/vendor/github.com/coreos/etcd/clientv3/auth.go b/vendor/github.com/coreos/etcd/clientv3/auth.go new file mode 100644 index 00000000..8c3c047f --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/auth.go @@ -0,0 +1,229 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "fmt" + "strings" + + "github.com/coreos/etcd/auth/authpb" + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +type ( + AuthEnableResponse pb.AuthEnableResponse + AuthDisableResponse pb.AuthDisableResponse + AuthenticateResponse pb.AuthenticateResponse + AuthUserAddResponse pb.AuthUserAddResponse + AuthUserDeleteResponse pb.AuthUserDeleteResponse + AuthUserChangePasswordResponse pb.AuthUserChangePasswordResponse + AuthUserGrantRoleResponse pb.AuthUserGrantRoleResponse + AuthUserGetResponse pb.AuthUserGetResponse + AuthUserRevokeRoleResponse pb.AuthUserRevokeRoleResponse + AuthRoleAddResponse pb.AuthRoleAddResponse + AuthRoleGrantPermissionResponse pb.AuthRoleGrantPermissionResponse + AuthRoleGetResponse pb.AuthRoleGetResponse + AuthRoleRevokePermissionResponse pb.AuthRoleRevokePermissionResponse + AuthRoleDeleteResponse pb.AuthRoleDeleteResponse + AuthUserListResponse pb.AuthUserListResponse + AuthRoleListResponse pb.AuthRoleListResponse + + PermissionType authpb.Permission_Type +) + +const ( + PermRead = authpb.READ + PermWrite = authpb.WRITE + PermReadWrite = authpb.READWRITE +) + +type Auth interface { + // AuthEnable enables auth of an etcd cluster. + AuthEnable(ctx context.Context) (*AuthEnableResponse, error) + + // AuthDisable disables auth of an etcd cluster. + AuthDisable(ctx context.Context) (*AuthDisableResponse, error) + + // UserAdd adds a new user to an etcd cluster. + UserAdd(ctx context.Context, name string, password string) (*AuthUserAddResponse, error) + + // UserDelete deletes a user from an etcd cluster. + UserDelete(ctx context.Context, name string) (*AuthUserDeleteResponse, error) + + // UserChangePassword changes a password of a user. + UserChangePassword(ctx context.Context, name string, password string) (*AuthUserChangePasswordResponse, error) + + // UserGrantRole grants a role to a user. + UserGrantRole(ctx context.Context, user string, role string) (*AuthUserGrantRoleResponse, error) + + // UserGet gets a detailed information of a user. + UserGet(ctx context.Context, name string) (*AuthUserGetResponse, error) + + // UserList gets a list of all users. + UserList(ctx context.Context) (*AuthUserListResponse, error) + + // UserRevokeRole revokes a role of a user. + UserRevokeRole(ctx context.Context, name string, role string) (*AuthUserRevokeRoleResponse, error) + + // RoleAdd adds a new role to an etcd cluster. + RoleAdd(ctx context.Context, name string) (*AuthRoleAddResponse, error) + + // RoleGrantPermission grants a permission to a role. + RoleGrantPermission(ctx context.Context, name string, key, rangeEnd string, permType PermissionType) (*AuthRoleGrantPermissionResponse, error) + + // RoleGet gets a detailed information of a role. + RoleGet(ctx context.Context, role string) (*AuthRoleGetResponse, error) + + // RoleList gets a list of all roles. + RoleList(ctx context.Context) (*AuthRoleListResponse, error) + + // RoleRevokePermission revokes a permission from a role. + RoleRevokePermission(ctx context.Context, role string, key, rangeEnd string) (*AuthRoleRevokePermissionResponse, error) + + // RoleDelete deletes a role. + RoleDelete(ctx context.Context, role string) (*AuthRoleDeleteResponse, error) +} + +type auth struct { + c *Client + + conn *grpc.ClientConn // conn in-use + remote pb.AuthClient +} + +func NewAuth(c *Client) Auth { + conn := c.ActiveConnection() + return &auth{ + conn: c.ActiveConnection(), + remote: pb.NewAuthClient(conn), + c: c, + } +} + +func (auth *auth) AuthEnable(ctx context.Context) (*AuthEnableResponse, error) { + resp, err := auth.remote.AuthEnable(ctx, &pb.AuthEnableRequest{}) + return (*AuthEnableResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) AuthDisable(ctx context.Context) (*AuthDisableResponse, error) { + resp, err := auth.remote.AuthDisable(ctx, &pb.AuthDisableRequest{}) + return (*AuthDisableResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) UserAdd(ctx context.Context, name string, password string) (*AuthUserAddResponse, error) { + resp, err := auth.remote.UserAdd(ctx, &pb.AuthUserAddRequest{Name: name, Password: password}) + return (*AuthUserAddResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) UserDelete(ctx context.Context, name string) (*AuthUserDeleteResponse, error) { + resp, err := auth.remote.UserDelete(ctx, &pb.AuthUserDeleteRequest{Name: name}) + return (*AuthUserDeleteResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) UserChangePassword(ctx context.Context, name string, password string) (*AuthUserChangePasswordResponse, error) { + resp, err := auth.remote.UserChangePassword(ctx, &pb.AuthUserChangePasswordRequest{Name: name, Password: password}) + return (*AuthUserChangePasswordResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) UserGrantRole(ctx context.Context, user string, role string) (*AuthUserGrantRoleResponse, error) { + resp, err := auth.remote.UserGrantRole(ctx, &pb.AuthUserGrantRoleRequest{User: user, Role: role}) + return (*AuthUserGrantRoleResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) UserGet(ctx context.Context, name string) (*AuthUserGetResponse, error) { + resp, err := auth.remote.UserGet(ctx, &pb.AuthUserGetRequest{Name: name}, grpc.FailFast(false)) + return (*AuthUserGetResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) UserList(ctx context.Context) (*AuthUserListResponse, error) { + resp, err := auth.remote.UserList(ctx, &pb.AuthUserListRequest{}, grpc.FailFast(false)) + return (*AuthUserListResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) UserRevokeRole(ctx context.Context, name string, role string) (*AuthUserRevokeRoleResponse, error) { + resp, err := auth.remote.UserRevokeRole(ctx, &pb.AuthUserRevokeRoleRequest{Name: name, Role: role}) + return (*AuthUserRevokeRoleResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) RoleAdd(ctx context.Context, name string) (*AuthRoleAddResponse, error) { + resp, err := auth.remote.RoleAdd(ctx, &pb.AuthRoleAddRequest{Name: name}) + return (*AuthRoleAddResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) RoleGrantPermission(ctx context.Context, name string, key, rangeEnd string, permType PermissionType) (*AuthRoleGrantPermissionResponse, error) { + perm := &authpb.Permission{ + Key: []byte(key), + RangeEnd: []byte(rangeEnd), + PermType: authpb.Permission_Type(permType), + } + resp, err := auth.remote.RoleGrantPermission(ctx, &pb.AuthRoleGrantPermissionRequest{Name: name, Perm: perm}) + return (*AuthRoleGrantPermissionResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) RoleGet(ctx context.Context, role string) (*AuthRoleGetResponse, error) { + resp, err := auth.remote.RoleGet(ctx, &pb.AuthRoleGetRequest{Role: role}, grpc.FailFast(false)) + return (*AuthRoleGetResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) RoleList(ctx context.Context) (*AuthRoleListResponse, error) { + resp, err := auth.remote.RoleList(ctx, &pb.AuthRoleListRequest{}, grpc.FailFast(false)) + return (*AuthRoleListResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) RoleRevokePermission(ctx context.Context, role string, key, rangeEnd string) (*AuthRoleRevokePermissionResponse, error) { + resp, err := auth.remote.RoleRevokePermission(ctx, &pb.AuthRoleRevokePermissionRequest{Role: role, Key: key, RangeEnd: rangeEnd}) + return (*AuthRoleRevokePermissionResponse)(resp), toErr(ctx, err) +} + +func (auth *auth) RoleDelete(ctx context.Context, role string) (*AuthRoleDeleteResponse, error) { + resp, err := auth.remote.RoleDelete(ctx, &pb.AuthRoleDeleteRequest{Role: role}) + return (*AuthRoleDeleteResponse)(resp), toErr(ctx, err) +} + +func StrToPermissionType(s string) (PermissionType, error) { + val, ok := authpb.Permission_Type_value[strings.ToUpper(s)] + if ok { + return PermissionType(val), nil + } + return PermissionType(-1), fmt.Errorf("invalid permission type: %s", s) +} + +type authenticator struct { + conn *grpc.ClientConn // conn in-use + remote pb.AuthClient +} + +func (auth *authenticator) authenticate(ctx context.Context, name string, password string) (*AuthenticateResponse, error) { + resp, err := auth.remote.Authenticate(ctx, &pb.AuthenticateRequest{Name: name, Password: password}, grpc.FailFast(false)) + return (*AuthenticateResponse)(resp), toErr(ctx, err) +} + +func (auth *authenticator) close() { + auth.conn.Close() +} + +func newAuthenticator(endpoint string, opts []grpc.DialOption) (*authenticator, error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return nil, err + } + + return &authenticator{ + conn: conn, + remote: pb.NewAuthClient(conn), + }, nil +} diff --git a/vendor/github.com/coreos/etcd/clientv3/balancer.go b/vendor/github.com/coreos/etcd/clientv3/balancer.go new file mode 100644 index 00000000..b7fba6a2 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/balancer.go @@ -0,0 +1,147 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "net/url" + "strings" + "sync" + + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +// simpleBalancer does the bare minimum to expose multiple eps +// to the grpc reconnection code path +type simpleBalancer struct { + // addrs are the client's endpoints for grpc + addrs []grpc.Address + // notifyCh notifies grpc of the set of addresses for connecting + notifyCh chan []grpc.Address + + // readyc closes once the first connection is up + readyc chan struct{} + readyOnce sync.Once + + // mu protects upEps, pinAddr, and connectingAddr + mu sync.RWMutex + // upEps holds the current endpoints that have an active connection + upEps map[string]struct{} + // upc closes when upEps transitions from empty to non-zero or the balancer closes. + upc chan struct{} + + // pinAddr is the currently pinned address; set to the empty string on + // intialization and shutdown. + pinAddr string +} + +func newSimpleBalancer(eps []string) *simpleBalancer { + notifyCh := make(chan []grpc.Address, 1) + addrs := make([]grpc.Address, len(eps)) + for i := range eps { + addrs[i].Addr = getHost(eps[i]) + } + notifyCh <- addrs + sb := &simpleBalancer{ + addrs: addrs, + notifyCh: notifyCh, + readyc: make(chan struct{}), + upEps: make(map[string]struct{}), + upc: make(chan struct{}), + } + return sb +} + +func (b *simpleBalancer) Start(target string) error { return nil } + +func (b *simpleBalancer) ConnectNotify() <-chan struct{} { + b.mu.Lock() + defer b.mu.Unlock() + return b.upc +} + +func (b *simpleBalancer) Up(addr grpc.Address) func(error) { + b.mu.Lock() + if len(b.upEps) == 0 { + // notify waiting Get()s and pin first connected address + close(b.upc) + b.pinAddr = addr.Addr + } + b.upEps[addr.Addr] = struct{}{} + b.mu.Unlock() + // notify client that a connection is up + b.readyOnce.Do(func() { close(b.readyc) }) + return func(err error) { + b.mu.Lock() + delete(b.upEps, addr.Addr) + if len(b.upEps) == 0 && b.pinAddr != "" { + b.upc = make(chan struct{}) + } else if b.pinAddr == addr.Addr { + // choose new random up endpoint + for k := range b.upEps { + b.pinAddr = k + break + } + } + b.mu.Unlock() + } +} + +func (b *simpleBalancer) Get(ctx context.Context, opts grpc.BalancerGetOptions) (grpc.Address, func(), error) { + var addr string + for { + b.mu.RLock() + ch := b.upc + b.mu.RUnlock() + select { + case <-ch: + case <-ctx.Done(): + return grpc.Address{Addr: ""}, nil, ctx.Err() + } + b.mu.RLock() + addr = b.pinAddr + upEps := len(b.upEps) + b.mu.RUnlock() + if addr == "" { + return grpc.Address{Addr: ""}, nil, grpc.ErrClientConnClosing + } + if upEps > 0 { + break + } + } + return grpc.Address{Addr: addr}, func() {}, nil +} + +func (b *simpleBalancer) Notify() <-chan []grpc.Address { return b.notifyCh } + +func (b *simpleBalancer) Close() error { + b.mu.Lock() + close(b.notifyCh) + // terminate all waiting Get()s + b.pinAddr = "" + if len(b.upEps) == 0 { + close(b.upc) + } + b.mu.Unlock() + return nil +} + +func getHost(ep string) string { + url, uerr := url.Parse(ep) + if uerr != nil || !strings.Contains(ep, "://") { + return ep + } + return url.Host +} diff --git a/vendor/github.com/coreos/etcd/clientv3/client.go b/vendor/github.com/coreos/etcd/clientv3/client.go new file mode 100644 index 00000000..e6903fc2 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/client.go @@ -0,0 +1,324 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "crypto/tls" + "errors" + "fmt" + "io/ioutil" + "log" + "net" + "net/url" + "strings" + "time" + + "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/metadata" +) + +var ( + ErrNoAvailableEndpoints = errors.New("etcdclient: no available endpoints") +) + +// Client provides and manages an etcd v3 client session. +type Client struct { + Cluster + KV + Lease + Watcher + Auth + Maintenance + + conn *grpc.ClientConn + cfg Config + creds *credentials.TransportCredentials + balancer *simpleBalancer + retryWrapper retryRpcFunc + + ctx context.Context + cancel context.CancelFunc + + // Username is a username for authentication + Username string + // Password is a password for authentication + Password string +} + +// New creates a new etcdv3 client from a given configuration. +func New(cfg Config) (*Client, error) { + if len(cfg.Endpoints) == 0 { + return nil, ErrNoAvailableEndpoints + } + + return newClient(&cfg) +} + +// NewFromURL creates a new etcdv3 client from a URL. +func NewFromURL(url string) (*Client, error) { + return New(Config{Endpoints: []string{url}}) +} + +// NewFromConfigFile creates a new etcdv3 client from a configuration file. +func NewFromConfigFile(path string) (*Client, error) { + cfg, err := configFromFile(path) + if err != nil { + return nil, err + } + return New(*cfg) +} + +// Close shuts down the client's etcd connections. +func (c *Client) Close() error { + c.cancel() + return toErr(c.ctx, c.conn.Close()) +} + +// Ctx is a context for "out of band" messages (e.g., for sending +// "clean up" message when another context is canceled). It is +// canceled on client Close(). +func (c *Client) Ctx() context.Context { return c.ctx } + +// Endpoints lists the registered endpoints for the client. +func (c *Client) Endpoints() []string { return c.cfg.Endpoints } + +type authTokenCredential struct { + token string +} + +func (cred authTokenCredential) RequireTransportSecurity() bool { + return false +} + +func (cred authTokenCredential) GetRequestMetadata(ctx context.Context, s ...string) (map[string]string, error) { + return map[string]string{ + "token": cred.token, + }, nil +} + +func (c *Client) dialTarget(endpoint string) (proto string, host string, creds *credentials.TransportCredentials) { + proto = "tcp" + host = endpoint + creds = c.creds + url, uerr := url.Parse(endpoint) + if uerr != nil || !strings.Contains(endpoint, "://") { + return + } + // strip scheme:// prefix since grpc dials by host + host = url.Host + switch url.Scheme { + case "unix": + proto = "unix" + case "http": + creds = nil + case "https": + if creds != nil { + break + } + tlsconfig := &tls.Config{} + emptyCreds := credentials.NewTLS(tlsconfig) + creds = &emptyCreds + default: + return "", "", nil + } + return +} + +// dialSetupOpts gives the dial opts prior to any authentication +func (c *Client) dialSetupOpts(endpoint string, dopts ...grpc.DialOption) (opts []grpc.DialOption) { + if c.cfg.DialTimeout > 0 { + opts = []grpc.DialOption{grpc.WithTimeout(c.cfg.DialTimeout)} + } + opts = append(opts, dopts...) + + // grpc issues TLS cert checks using the string passed into dial so + // that string must be the host. To recover the full scheme://host URL, + // have a map from hosts to the original endpoint. + host2ep := make(map[string]string) + for i := range c.cfg.Endpoints { + _, host, _ := c.dialTarget(c.cfg.Endpoints[i]) + host2ep[host] = c.cfg.Endpoints[i] + } + + f := func(host string, t time.Duration) (net.Conn, error) { + proto, host, _ := c.dialTarget(host2ep[host]) + if proto == "" { + return nil, fmt.Errorf("unknown scheme for %q", host) + } + select { + case <-c.ctx.Done(): + return nil, c.ctx.Err() + default: + } + return net.DialTimeout(proto, host, t) + } + opts = append(opts, grpc.WithDialer(f)) + + _, _, creds := c.dialTarget(endpoint) + if creds != nil { + opts = append(opts, grpc.WithTransportCredentials(*creds)) + } else { + opts = append(opts, grpc.WithInsecure()) + } + + return opts +} + +// Dial connects to a single endpoint using the client's config. +func (c *Client) Dial(endpoint string) (*grpc.ClientConn, error) { + return c.dial(endpoint) +} + +func (c *Client) dial(endpoint string, dopts ...grpc.DialOption) (*grpc.ClientConn, error) { + opts := c.dialSetupOpts(endpoint, dopts...) + host := getHost(endpoint) + if c.Username != "" && c.Password != "" { + // use dial options without dopts to avoid reusing the client balancer + auth, err := newAuthenticator(host, c.dialSetupOpts(endpoint)) + if err != nil { + return nil, err + } + defer auth.close() + + resp, err := auth.authenticate(c.ctx, c.Username, c.Password) + if err != nil { + return nil, err + } + opts = append(opts, grpc.WithPerRPCCredentials(authTokenCredential{token: resp.Token})) + } + + conn, err := grpc.Dial(host, opts...) + if err != nil { + return nil, err + } + return conn, nil +} + +// WithRequireLeader requires client requests to only succeed +// when the cluster has a leader. +func WithRequireLeader(ctx context.Context) context.Context { + md := metadata.Pairs(rpctypes.MetadataRequireLeaderKey, rpctypes.MetadataHasLeader) + return metadata.NewContext(ctx, md) +} + +func newClient(cfg *Config) (*Client, error) { + if cfg == nil { + cfg = &Config{} + } + var creds *credentials.TransportCredentials + if cfg.TLS != nil { + c := credentials.NewTLS(cfg.TLS) + creds = &c + } + + // use a temporary skeleton client to bootstrap first connection + ctx, cancel := context.WithCancel(context.TODO()) + client := &Client{ + conn: nil, + cfg: *cfg, + creds: creds, + ctx: ctx, + cancel: cancel, + } + if cfg.Username != "" && cfg.Password != "" { + client.Username = cfg.Username + client.Password = cfg.Password + } + + client.balancer = newSimpleBalancer(cfg.Endpoints) + conn, err := client.dial(cfg.Endpoints[0], grpc.WithBalancer(client.balancer)) + if err != nil { + return nil, err + } + client.conn = conn + client.retryWrapper = client.newRetryWrapper() + + // wait for a connection + if cfg.DialTimeout > 0 { + hasConn := false + waitc := time.After(cfg.DialTimeout) + select { + case <-client.balancer.readyc: + hasConn = true + case <-ctx.Done(): + case <-waitc: + } + if !hasConn { + client.cancel() + conn.Close() + return nil, grpc.ErrClientConnTimeout + } + } + + client.Cluster = NewCluster(client) + client.KV = NewKV(client) + client.Lease = NewLease(client) + client.Watcher = NewWatcher(client) + client.Auth = NewAuth(client) + client.Maintenance = NewMaintenance(client) + if cfg.Logger != nil { + logger.Set(cfg.Logger) + } else { + // disable client side grpc by default + logger.Set(log.New(ioutil.Discard, "", 0)) + } + + return client, nil +} + +// ActiveConnection returns the current in-use connection +func (c *Client) ActiveConnection() *grpc.ClientConn { return c.conn } + +// isHaltErr returns true if the given error and context indicate no forward +// progress can be made, even after reconnecting. +func isHaltErr(ctx context.Context, err error) bool { + if ctx != nil && ctx.Err() != nil { + return true + } + if err == nil { + return false + } + eErr := rpctypes.Error(err) + if _, ok := eErr.(rpctypes.EtcdError); ok { + return eErr != rpctypes.ErrStopped && eErr != rpctypes.ErrNoLeader + } + // treat etcdserver errors not recognized by the client as halting + return isConnClosing(err) || strings.Contains(err.Error(), "etcdserver:") +} + +// isConnClosing returns true if the error matches a grpc client closing error +func isConnClosing(err error) bool { + return strings.Contains(err.Error(), grpc.ErrClientConnClosing.Error()) +} + +func toErr(ctx context.Context, err error) error { + if err == nil { + return nil + } + err = rpctypes.Error(err) + switch { + case ctx.Err() != nil && strings.Contains(err.Error(), "context"): + err = ctx.Err() + case strings.Contains(err.Error(), ErrNoAvailableEndpoints.Error()): + err = ErrNoAvailableEndpoints + case strings.Contains(err.Error(), grpc.ErrClientConnClosing.Error()): + err = grpc.ErrClientConnClosing + } + return err +} diff --git a/vendor/github.com/coreos/etcd/clientv3/cluster.go b/vendor/github.com/coreos/etcd/clientv3/cluster.go new file mode 100644 index 00000000..8b981171 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/cluster.go @@ -0,0 +1,102 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +type ( + Member pb.Member + MemberListResponse pb.MemberListResponse + MemberAddResponse pb.MemberAddResponse + MemberRemoveResponse pb.MemberRemoveResponse + MemberUpdateResponse pb.MemberUpdateResponse +) + +type Cluster interface { + // MemberList lists the current cluster membership. + MemberList(ctx context.Context) (*MemberListResponse, error) + + // MemberAdd adds a new member into the cluster. + MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) + + // MemberRemove removes an existing member from the cluster. + MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error) + + // MemberUpdate updates the peer addresses of the member. + MemberUpdate(ctx context.Context, id uint64, peerAddrs []string) (*MemberUpdateResponse, error) +} + +type cluster struct { + remote pb.ClusterClient +} + +func NewCluster(c *Client) Cluster { + return &cluster{remote: RetryClusterClient(c)} +} + +func (c *cluster) MemberAdd(ctx context.Context, peerAddrs []string) (*MemberAddResponse, error) { + r := &pb.MemberAddRequest{PeerURLs: peerAddrs} + resp, err := c.remote.MemberAdd(ctx, r) + if err == nil { + return (*MemberAddResponse)(resp), nil + } + if isHaltErr(ctx, err) { + return nil, toErr(ctx, err) + } + return nil, toErr(ctx, err) +} + +func (c *cluster) MemberRemove(ctx context.Context, id uint64) (*MemberRemoveResponse, error) { + r := &pb.MemberRemoveRequest{ID: id} + resp, err := c.remote.MemberRemove(ctx, r) + if err == nil { + return (*MemberRemoveResponse)(resp), nil + } + if isHaltErr(ctx, err) { + return nil, toErr(ctx, err) + } + return nil, toErr(ctx, err) +} + +func (c *cluster) MemberUpdate(ctx context.Context, id uint64, peerAddrs []string) (*MemberUpdateResponse, error) { + // it is safe to retry on update. + for { + r := &pb.MemberUpdateRequest{ID: id, PeerURLs: peerAddrs} + resp, err := c.remote.MemberUpdate(ctx, r) + if err == nil { + return (*MemberUpdateResponse)(resp), nil + } + if isHaltErr(ctx, err) { + return nil, toErr(ctx, err) + } + } +} + +func (c *cluster) MemberList(ctx context.Context) (*MemberListResponse, error) { + // it is safe to retry on list. + for { + resp, err := c.remote.MemberList(ctx, &pb.MemberListRequest{}, grpc.FailFast(false)) + if err == nil { + return (*MemberListResponse)(resp), nil + } + if isHaltErr(ctx, err) { + return nil, toErr(ctx, err) + } + } +} diff --git a/vendor/github.com/coreos/etcd/clientv3/compact_op.go b/vendor/github.com/coreos/etcd/clientv3/compact_op.go new file mode 100644 index 00000000..32d97eb0 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/compact_op.go @@ -0,0 +1,53 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" +) + +// CompactOp represents a compact operation. +type CompactOp struct { + revision int64 + physical bool +} + +// CompactOption configures compact operation. +type CompactOption func(*CompactOp) + +func (op *CompactOp) applyCompactOpts(opts []CompactOption) { + for _, opt := range opts { + opt(op) + } +} + +// OpCompact wraps slice CompactOption to create a CompactOp. +func OpCompact(rev int64, opts ...CompactOption) CompactOp { + ret := CompactOp{revision: rev} + ret.applyCompactOpts(opts) + return ret +} + +func (op CompactOp) toRequest() *pb.CompactionRequest { + return &pb.CompactionRequest{Revision: op.revision, Physical: op.physical} +} + +// WithCompactPhysical makes compact RPC call wait until +// the compaction is physically applied to the local database +// such that compacted entries are totally removed from the +// backend database. +func WithCompactPhysical() CompactOption { + return func(op *CompactOp) { op.physical = true } +} diff --git a/vendor/github.com/coreos/etcd/clientv3/compare.go b/vendor/github.com/coreos/etcd/clientv3/compare.go new file mode 100644 index 00000000..60134943 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/compare.go @@ -0,0 +1,91 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" +) + +type CompareTarget int +type CompareResult int + +const ( + CompareVersion CompareTarget = iota + CompareCreated + CompareModified + CompareValue +) + +type Cmp pb.Compare + +func Compare(cmp Cmp, result string, v interface{}) Cmp { + var r pb.Compare_CompareResult + + switch result { + case "=": + r = pb.Compare_EQUAL + case ">": + r = pb.Compare_GREATER + case "<": + r = pb.Compare_LESS + default: + panic("Unknown result op") + } + + cmp.Result = r + switch cmp.Target { + case pb.Compare_VALUE: + val, ok := v.(string) + if !ok { + panic("bad compare value") + } + cmp.TargetUnion = &pb.Compare_Value{Value: []byte(val)} + case pb.Compare_VERSION: + cmp.TargetUnion = &pb.Compare_Version{Version: mustInt64(v)} + case pb.Compare_CREATE: + cmp.TargetUnion = &pb.Compare_CreateRevision{CreateRevision: mustInt64(v)} + case pb.Compare_MOD: + cmp.TargetUnion = &pb.Compare_ModRevision{ModRevision: mustInt64(v)} + default: + panic("Unknown compare type") + } + return cmp +} + +func Value(key string) Cmp { + return Cmp{Key: []byte(key), Target: pb.Compare_VALUE} +} + +func Version(key string) Cmp { + return Cmp{Key: []byte(key), Target: pb.Compare_VERSION} +} + +func CreateRevision(key string) Cmp { + return Cmp{Key: []byte(key), Target: pb.Compare_CREATE} +} + +func ModRevision(key string) Cmp { + return Cmp{Key: []byte(key), Target: pb.Compare_MOD} +} + +func mustInt64(val interface{}) int64 { + if v, ok := val.(int64); ok { + return v + } + if v, ok := val.(int); ok { + return int64(v) + } + panic("bad value") +} diff --git a/vendor/github.com/coreos/etcd/clientv3/config.go b/vendor/github.com/coreos/etcd/clientv3/config.go new file mode 100644 index 00000000..066b41ec --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/config.go @@ -0,0 +1,110 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "crypto/tls" + "crypto/x509" + "io/ioutil" + "time" + + "github.com/coreos/etcd/pkg/tlsutil" + "github.com/ghodss/yaml" +) + +type Config struct { + // Endpoints is a list of URLs + Endpoints []string + + // DialTimeout is the timeout for failing to establish a connection. + DialTimeout time.Duration + + // TLS holds the client secure credentials, if any. + TLS *tls.Config + + // Logger is the logger used by client library. + Logger Logger + + // Username is a username for authentication + Username string + + // Password is a password for authentication + Password string +} + +type yamlConfig struct { + Endpoints []string `json:"endpoints"` + DialTimeout time.Duration `json:"dial-timeout"` + InsecureTransport bool `json:"insecure-transport"` + InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify"` + Certfile string `json:"cert-file"` + Keyfile string `json:"key-file"` + CAfile string `json:"ca-file"` +} + +func configFromFile(fpath string) (*Config, error) { + b, err := ioutil.ReadFile(fpath) + if err != nil { + return nil, err + } + + yc := &yamlConfig{} + + err = yaml.Unmarshal(b, yc) + if err != nil { + return nil, err + } + + cfg := &Config{ + Endpoints: yc.Endpoints, + DialTimeout: yc.DialTimeout, + } + + if yc.InsecureTransport { + cfg.TLS = nil + return cfg, nil + } + + var ( + cert *tls.Certificate + cp *x509.CertPool + ) + + if yc.Certfile != "" && yc.Keyfile != "" { + cert, err = tlsutil.NewCert(yc.Certfile, yc.Keyfile, nil) + if err != nil { + return nil, err + } + } + + if yc.CAfile != "" { + cp, err = tlsutil.NewCertPool([]string{yc.CAfile}) + if err != nil { + return nil, err + } + } + + tlscfg := &tls.Config{ + MinVersion: tls.VersionTLS10, + InsecureSkipVerify: yc.InsecureSkipTLSVerify, + RootCAs: cp, + } + if cert != nil { + tlscfg.Certificates = []tls.Certificate{*cert} + } + cfg.TLS = tlscfg + + return cfg, nil +} diff --git a/vendor/github.com/coreos/etcd/clientv3/doc.go b/vendor/github.com/coreos/etcd/clientv3/doc.go new file mode 100644 index 00000000..9ce84aa5 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/doc.go @@ -0,0 +1,64 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package clientv3 implements the official Go etcd client for v3. +// +// Create client using `clientv3.New`: +// +// cli, err := clientv3.New(clientv3.Config{ +// Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"}, +// DialTimeout: 5 * time.Second, +// }) +// if err != nil { +// // handle error! +// } +// defer cli.Close() +// +// Make sure to close the client after using it. If the client is not closed, the +// connection will have leaky goroutines. +// +// To specify client request timeout, pass context.WithTimeout to APIs: +// +// ctx, cancel := context.WithTimeout(context.Background(), timeout) +// resp, err := kvc.Put(ctx, "sample_key", "sample_value") +// cancel() +// if err != nil { +// // handle error! +// } +// // use the response +// +// The Client has internal state (watchers and leases), so Clients should be reused instead of created as needed. +// Clients are safe for concurrent use by multiple goroutines. +// +// etcd client returns 2 types of errors: +// +// 1. context error: canceled or deadline exceeded. +// 2. gRPC error: see https://github.com/coreos/etcd/blob/master/etcdserver/api/v3rpc/error.go. +// +// Here is the example code to handle client errors: +// +// resp, err := kvc.Put(ctx, "", "") +// if err != nil { +// if err == context.Canceled { +// // ctx is canceled by another routine +// } else if err == context.DeadlineExceeded { +// // ctx is attached with a deadline and it exceeded +// } else if verr, ok := err.(*v3rpc.ErrEmptyKey); ok { +// // process (verr.Errors) +// } else { +// // bad cluster endpoints, which are not etcd servers +// } +// } +// +package clientv3 diff --git a/vendor/github.com/coreos/etcd/clientv3/kv.go b/vendor/github.com/coreos/etcd/clientv3/kv.go new file mode 100644 index 00000000..27f9110f --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/kv.go @@ -0,0 +1,176 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +type ( + CompactResponse pb.CompactionResponse + PutResponse pb.PutResponse + GetResponse pb.RangeResponse + DeleteResponse pb.DeleteRangeResponse + TxnResponse pb.TxnResponse +) + +type KV interface { + // Put puts a key-value pair into etcd. + // Note that key,value can be plain bytes array and string is + // an immutable representation of that bytes array. + // To get a string of bytes, do string([]byte(0x10, 0x20)). + Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error) + + // Get retrieves keys. + // By default, Get will return the value for "key", if any. + // When passed WithRange(end), Get will return the keys in the range [key, end). + // When passed WithFromKey(), Get returns keys greater than or equal to key. + // When passed WithRev(rev) with rev > 0, Get retrieves keys at the given revision; + // if the required revision is compacted, the request will fail with ErrCompacted . + // When passed WithLimit(limit), the number of returned keys is bounded by limit. + // When passed WithSort(), the keys will be sorted. + Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error) + + // Delete deletes a key, or optionally using WithRange(end), [key, end). + Delete(ctx context.Context, key string, opts ...OpOption) (*DeleteResponse, error) + + // Compact compacts etcd KV history before the given rev. + Compact(ctx context.Context, rev int64, opts ...CompactOption) (*CompactResponse, error) + + // Do applies a single Op on KV without a transaction. + // Do is useful when declaring operations to be issued at a later time + // whereas Get/Put/Delete are for better suited for when the operation + // should be immediately issued at time of declaration. + + // Do applies a single Op on KV without a transaction. + // Do is useful when creating arbitrary operations to be issued at a + // later time; the user can range over the operations, calling Do to + // execute them. Get/Put/Delete, on the other hand, are best suited + // for when the operation should be issued at the time of declaration. + Do(ctx context.Context, op Op) (OpResponse, error) + + // Txn creates a transaction. + Txn(ctx context.Context) Txn +} + +type OpResponse struct { + put *PutResponse + get *GetResponse + del *DeleteResponse +} + +func (op OpResponse) Put() *PutResponse { return op.put } +func (op OpResponse) Get() *GetResponse { return op.get } +func (op OpResponse) Del() *DeleteResponse { return op.del } + +type kv struct { + remote pb.KVClient +} + +func NewKV(c *Client) KV { + return &kv{remote: RetryKVClient(c)} +} + +func (kv *kv) Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error) { + r, err := kv.Do(ctx, OpPut(key, val, opts...)) + return r.put, toErr(ctx, err) +} + +func (kv *kv) Get(ctx context.Context, key string, opts ...OpOption) (*GetResponse, error) { + r, err := kv.Do(ctx, OpGet(key, opts...)) + return r.get, toErr(ctx, err) +} + +func (kv *kv) Delete(ctx context.Context, key string, opts ...OpOption) (*DeleteResponse, error) { + r, err := kv.Do(ctx, OpDelete(key, opts...)) + return r.del, toErr(ctx, err) +} + +func (kv *kv) Compact(ctx context.Context, rev int64, opts ...CompactOption) (*CompactResponse, error) { + resp, err := kv.remote.Compact(ctx, OpCompact(rev, opts...).toRequest(), grpc.FailFast(false)) + if err != nil { + return nil, toErr(ctx, err) + } + return (*CompactResponse)(resp), err +} + +func (kv *kv) Txn(ctx context.Context) Txn { + return &txn{ + kv: kv, + ctx: ctx, + } +} + +func (kv *kv) Do(ctx context.Context, op Op) (OpResponse, error) { + for { + resp, err := kv.do(ctx, op) + if err == nil { + return resp, nil + } + if isHaltErr(ctx, err) { + return resp, toErr(ctx, err) + } + // do not retry on modifications + if op.isWrite() { + return resp, toErr(ctx, err) + } + } +} + +func (kv *kv) do(ctx context.Context, op Op) (OpResponse, error) { + var err error + switch op.t { + // TODO: handle other ops + case tRange: + var resp *pb.RangeResponse + r := &pb.RangeRequest{ + Key: op.key, + RangeEnd: op.end, + Limit: op.limit, + Revision: op.rev, + Serializable: op.serializable, + KeysOnly: op.keysOnly, + CountOnly: op.countOnly, + } + if op.sort != nil { + r.SortOrder = pb.RangeRequest_SortOrder(op.sort.Order) + r.SortTarget = pb.RangeRequest_SortTarget(op.sort.Target) + } + + resp, err = kv.remote.Range(ctx, r, grpc.FailFast(false)) + if err == nil { + return OpResponse{get: (*GetResponse)(resp)}, nil + } + case tPut: + var resp *pb.PutResponse + r := &pb.PutRequest{Key: op.key, Value: op.val, Lease: int64(op.leaseID)} + resp, err = kv.remote.Put(ctx, r) + if err == nil { + return OpResponse{put: (*PutResponse)(resp)}, nil + } + case tDeleteRange: + var resp *pb.DeleteRangeResponse + r := &pb.DeleteRangeRequest{Key: op.key, RangeEnd: op.end} + resp, err = kv.remote.DeleteRange(ctx, r) + if err == nil { + return OpResponse{del: (*DeleteResponse)(resp)}, nil + } + default: + panic("Unknown op") + } + return OpResponse{}, err +} diff --git a/vendor/github.com/coreos/etcd/clientv3/lease.go b/vendor/github.com/coreos/etcd/clientv3/lease.go new file mode 100644 index 00000000..bf8919c3 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/lease.go @@ -0,0 +1,462 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "sync" + "time" + + "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +type ( + LeaseRevokeResponse pb.LeaseRevokeResponse + LeaseID int64 +) + +// LeaseGrantResponse is used to convert the protobuf grant response. +type LeaseGrantResponse struct { + *pb.ResponseHeader + ID LeaseID + TTL int64 + Error string +} + +// LeaseKeepAliveResponse is used to convert the protobuf keepalive response. +type LeaseKeepAliveResponse struct { + *pb.ResponseHeader + ID LeaseID + TTL int64 +} + +const ( + // defaultTTL is the assumed lease TTL used for the first keepalive + // deadline before the actual TTL is known to the client. + defaultTTL = 5 * time.Second + // a small buffer to store unsent lease responses. + leaseResponseChSize = 16 + // NoLease is a lease ID for the absence of a lease. + NoLease LeaseID = 0 +) + +type Lease interface { + // Grant creates a new lease. + Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, error) + + // Revoke revokes the given lease. + Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error) + + // KeepAlive keeps the given lease alive forever. + KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) + + // KeepAliveOnce renews the lease once. In most of the cases, Keepalive + // should be used instead of KeepAliveOnce. + KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error) + + // Close releases all resources Lease keeps for efficient communication + // with the etcd server. + Close() error +} + +type lessor struct { + mu sync.Mutex // guards all fields + + // donec is closed when recvKeepAliveLoop stops + donec chan struct{} + + remote pb.LeaseClient + + stream pb.Lease_LeaseKeepAliveClient + streamCancel context.CancelFunc + + stopCtx context.Context + stopCancel context.CancelFunc + + keepAlives map[LeaseID]*keepAlive + + // firstKeepAliveTimeout is the timeout for the first keepalive request + // before the actual TTL is known to the lease client + firstKeepAliveTimeout time.Duration +} + +// keepAlive multiplexes a keepalive for a lease over multiple channels +type keepAlive struct { + chs []chan<- *LeaseKeepAliveResponse + ctxs []context.Context + // deadline is the time the keep alive channels close if no response + deadline time.Time + // nextKeepAlive is when to send the next keep alive message + nextKeepAlive time.Time + // donec is closed on lease revoke, expiration, or cancel. + donec chan struct{} +} + +func NewLease(c *Client) Lease { + l := &lessor{ + donec: make(chan struct{}), + keepAlives: make(map[LeaseID]*keepAlive), + remote: RetryLeaseClient(c), + firstKeepAliveTimeout: c.cfg.DialTimeout + time.Second, + } + if l.firstKeepAliveTimeout == time.Second { + l.firstKeepAliveTimeout = defaultTTL + } + + l.stopCtx, l.stopCancel = context.WithCancel(context.Background()) + go l.recvKeepAliveLoop() + go l.deadlineLoop() + return l +} + +func (l *lessor) Grant(ctx context.Context, ttl int64) (*LeaseGrantResponse, error) { + cctx, cancel := context.WithCancel(ctx) + done := cancelWhenStop(cancel, l.stopCtx.Done()) + defer close(done) + + for { + r := &pb.LeaseGrantRequest{TTL: ttl} + resp, err := l.remote.LeaseGrant(cctx, r) + if err == nil { + gresp := &LeaseGrantResponse{ + ResponseHeader: resp.GetHeader(), + ID: LeaseID(resp.ID), + TTL: resp.TTL, + Error: resp.Error, + } + return gresp, nil + } + if isHaltErr(cctx, err) { + return nil, toErr(ctx, err) + } + if nerr := l.newStream(); nerr != nil { + return nil, nerr + } + } +} + +func (l *lessor) Revoke(ctx context.Context, id LeaseID) (*LeaseRevokeResponse, error) { + cctx, cancel := context.WithCancel(ctx) + done := cancelWhenStop(cancel, l.stopCtx.Done()) + defer close(done) + + for { + r := &pb.LeaseRevokeRequest{ID: int64(id)} + resp, err := l.remote.LeaseRevoke(cctx, r) + + if err == nil { + return (*LeaseRevokeResponse)(resp), nil + } + if isHaltErr(ctx, err) { + return nil, toErr(ctx, err) + } + if nerr := l.newStream(); nerr != nil { + return nil, nerr + } + } +} + +func (l *lessor) KeepAlive(ctx context.Context, id LeaseID) (<-chan *LeaseKeepAliveResponse, error) { + ch := make(chan *LeaseKeepAliveResponse, leaseResponseChSize) + + l.mu.Lock() + ka, ok := l.keepAlives[id] + if !ok { + // create fresh keep alive + ka = &keepAlive{ + chs: []chan<- *LeaseKeepAliveResponse{ch}, + ctxs: []context.Context{ctx}, + deadline: time.Now().Add(l.firstKeepAliveTimeout), + nextKeepAlive: time.Now(), + donec: make(chan struct{}), + } + l.keepAlives[id] = ka + } else { + // add channel and context to existing keep alive + ka.ctxs = append(ka.ctxs, ctx) + ka.chs = append(ka.chs, ch) + } + l.mu.Unlock() + + go l.keepAliveCtxCloser(id, ctx, ka.donec) + + return ch, nil +} + +func (l *lessor) KeepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error) { + cctx, cancel := context.WithCancel(ctx) + done := cancelWhenStop(cancel, l.stopCtx.Done()) + defer close(done) + + for { + resp, err := l.keepAliveOnce(cctx, id) + if err == nil { + if resp.TTL == 0 { + err = rpctypes.ErrLeaseNotFound + } + return resp, err + } + if isHaltErr(ctx, err) { + return nil, toErr(ctx, err) + } + + if nerr := l.newStream(); nerr != nil { + return nil, nerr + } + } +} + +func (l *lessor) Close() error { + l.stopCancel() + <-l.donec + return nil +} + +func (l *lessor) keepAliveCtxCloser(id LeaseID, ctx context.Context, donec <-chan struct{}) { + select { + case <-donec: + return + case <-l.donec: + return + case <-ctx.Done(): + } + + l.mu.Lock() + defer l.mu.Unlock() + + ka, ok := l.keepAlives[id] + if !ok { + return + } + + // close channel and remove context if still associated with keep alive + for i, c := range ka.ctxs { + if c == ctx { + close(ka.chs[i]) + ka.ctxs = append(ka.ctxs[:i], ka.ctxs[i+1:]...) + ka.chs = append(ka.chs[:i], ka.chs[i+1:]...) + break + } + } + // remove if no one more listeners + if len(ka.chs) == 0 { + delete(l.keepAlives, id) + } +} + +func (l *lessor) keepAliveOnce(ctx context.Context, id LeaseID) (*LeaseKeepAliveResponse, error) { + cctx, cancel := context.WithCancel(ctx) + defer cancel() + + stream, err := l.remote.LeaseKeepAlive(cctx, grpc.FailFast(false)) + if err != nil { + return nil, toErr(ctx, err) + } + + err = stream.Send(&pb.LeaseKeepAliveRequest{ID: int64(id)}) + if err != nil { + return nil, toErr(ctx, err) + } + + resp, rerr := stream.Recv() + if rerr != nil { + return nil, toErr(ctx, rerr) + } + + karesp := &LeaseKeepAliveResponse{ + ResponseHeader: resp.GetHeader(), + ID: LeaseID(resp.ID), + TTL: resp.TTL, + } + return karesp, nil +} + +func (l *lessor) recvKeepAliveLoop() { + defer func() { + l.mu.Lock() + close(l.donec) + for _, ka := range l.keepAlives { + ka.Close() + } + l.keepAlives = make(map[LeaseID]*keepAlive) + l.mu.Unlock() + }() + + stream, serr := l.resetRecv() + for serr == nil { + resp, err := stream.Recv() + if err != nil { + if isHaltErr(l.stopCtx, err) { + return + } + stream, serr = l.resetRecv() + continue + } + l.recvKeepAlive(resp) + } +} + +// resetRecv opens a new lease stream and starts sending LeaseKeepAliveRequests +func (l *lessor) resetRecv() (pb.Lease_LeaseKeepAliveClient, error) { + if err := l.newStream(); err != nil { + return nil, err + } + stream := l.getKeepAliveStream() + go l.sendKeepAliveLoop(stream) + return stream, nil +} + +// recvKeepAlive updates a lease based on its LeaseKeepAliveResponse +func (l *lessor) recvKeepAlive(resp *pb.LeaseKeepAliveResponse) { + karesp := &LeaseKeepAliveResponse{ + ResponseHeader: resp.GetHeader(), + ID: LeaseID(resp.ID), + TTL: resp.TTL, + } + + l.mu.Lock() + defer l.mu.Unlock() + + ka, ok := l.keepAlives[karesp.ID] + if !ok { + return + } + + if karesp.TTL <= 0 { + // lease expired; close all keep alive channels + delete(l.keepAlives, karesp.ID) + ka.Close() + return + } + + // send update to all channels + nextKeepAlive := time.Now().Add(1 + time.Duration(karesp.TTL/3)*time.Second) + ka.deadline = time.Now().Add(time.Duration(karesp.TTL) * time.Second) + for _, ch := range ka.chs { + select { + case ch <- karesp: + ka.nextKeepAlive = nextKeepAlive + default: + } + } +} + +// deadlineLoop reaps any keep alive channels that have not received a response +// within the lease TTL +func (l *lessor) deadlineLoop() { + for { + select { + case <-time.After(time.Second): + case <-l.donec: + return + } + now := time.Now() + l.mu.Lock() + for id, ka := range l.keepAlives { + if ka.deadline.Before(now) { + // waited too long for response; lease may be expired + ka.Close() + delete(l.keepAlives, id) + } + } + l.mu.Unlock() + } +} + +// sendKeepAliveLoop sends LeaseKeepAliveRequests for the lifetime of a lease stream +func (l *lessor) sendKeepAliveLoop(stream pb.Lease_LeaseKeepAliveClient) { + for { + select { + case <-time.After(500 * time.Millisecond): + case <-stream.Context().Done(): + return + case <-l.donec: + return + case <-l.stopCtx.Done(): + return + } + + tosend := make([]LeaseID, 0) + + now := time.Now() + l.mu.Lock() + for id, ka := range l.keepAlives { + if ka.nextKeepAlive.Before(now) { + tosend = append(tosend, id) + } + } + l.mu.Unlock() + + for _, id := range tosend { + r := &pb.LeaseKeepAliveRequest{ID: int64(id)} + if err := stream.Send(r); err != nil { + // TODO do something with this error? + return + } + } + } +} + +func (l *lessor) getKeepAliveStream() pb.Lease_LeaseKeepAliveClient { + l.mu.Lock() + defer l.mu.Unlock() + return l.stream +} + +func (l *lessor) newStream() error { + sctx, cancel := context.WithCancel(l.stopCtx) + stream, err := l.remote.LeaseKeepAlive(sctx, grpc.FailFast(false)) + if err != nil { + cancel() + return toErr(sctx, err) + } + + l.mu.Lock() + defer l.mu.Unlock() + if l.stream != nil && l.streamCancel != nil { + l.stream.CloseSend() + l.streamCancel() + } + + l.streamCancel = cancel + l.stream = stream + return nil +} + +func (ka *keepAlive) Close() { + close(ka.donec) + for _, ch := range ka.chs { + close(ch) + } +} + +// cancelWhenStop calls cancel when the given stopc fires. It returns a done chan. done +// should be closed when the work is finished. When done fires, cancelWhenStop will release +// its internal resource. +func cancelWhenStop(cancel context.CancelFunc, stopc <-chan struct{}) chan<- struct{} { + done := make(chan struct{}, 1) + + go func() { + select { + case <-stopc: + case <-done: + } + cancel() + }() + + return done +} diff --git a/vendor/github.com/coreos/etcd/clientv3/logger.go b/vendor/github.com/coreos/etcd/clientv3/logger.go new file mode 100644 index 00000000..6e57c4e7 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/logger.go @@ -0,0 +1,64 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "log" + "os" + "sync" + + "google.golang.org/grpc/grpclog" +) + +type Logger grpclog.Logger + +var ( + logger settableLogger +) + +type settableLogger struct { + l grpclog.Logger + mu sync.RWMutex +} + +func init() { + // use go's standard logger by default like grpc + logger.mu.Lock() + logger.l = log.New(os.Stderr, "", log.LstdFlags) + grpclog.SetLogger(&logger) + logger.mu.Unlock() +} + +func (s *settableLogger) Set(l Logger) { + s.mu.Lock() + logger.l = l + s.mu.Unlock() +} + +func (s *settableLogger) Get() Logger { + s.mu.RLock() + l := logger.l + s.mu.RUnlock() + return l +} + +// implement the grpclog.Logger interface + +func (s *settableLogger) Fatal(args ...interface{}) { s.Get().Fatal(args...) } +func (s *settableLogger) Fatalf(format string, args ...interface{}) { s.Get().Fatalf(format, args...) } +func (s *settableLogger) Fatalln(args ...interface{}) { s.Get().Fatalln(args...) } +func (s *settableLogger) Print(args ...interface{}) { s.Get().Print(args...) } +func (s *settableLogger) Printf(format string, args ...interface{}) { s.Get().Printf(format, args...) } +func (s *settableLogger) Println(args ...interface{}) { s.Get().Println(args...) } diff --git a/vendor/github.com/coreos/etcd/clientv3/maintenance.go b/vendor/github.com/coreos/etcd/clientv3/maintenance.go new file mode 100644 index 00000000..71835625 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/maintenance.go @@ -0,0 +1,164 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "io" + + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +type ( + DefragmentResponse pb.DefragmentResponse + AlarmResponse pb.AlarmResponse + AlarmMember pb.AlarmMember + StatusResponse pb.StatusResponse +) + +type Maintenance interface { + // AlarmList gets all active alarms. + AlarmList(ctx context.Context) (*AlarmResponse, error) + + // AlarmDisarm disarms a given alarm. + AlarmDisarm(ctx context.Context, m *AlarmMember) (*AlarmResponse, error) + + // Defragment defragments storage backend of the etcd member with given endpoint. + // Defragment is only needed when deleting a large number of keys and want to reclaim + // the resources. + // Defragment is an expensive operation. User should avoid defragmenting multiple members + // at the same time. + // To defragment multiple members in the cluster, user need to call defragment multiple + // times with different endpoints. + Defragment(ctx context.Context, endpoint string) (*DefragmentResponse, error) + + // Status gets the status of the endpoint. + Status(ctx context.Context, endpoint string) (*StatusResponse, error) + + // Snapshot provides a reader for a snapshot of a backend. + Snapshot(ctx context.Context) (io.ReadCloser, error) +} + +type maintenance struct { + c *Client + remote pb.MaintenanceClient +} + +func NewMaintenance(c *Client) Maintenance { + return &maintenance{c: c, remote: pb.NewMaintenanceClient(c.conn)} +} + +func (m *maintenance) AlarmList(ctx context.Context) (*AlarmResponse, error) { + req := &pb.AlarmRequest{ + Action: pb.AlarmRequest_GET, + MemberID: 0, // all + Alarm: pb.AlarmType_NONE, // all + } + for { + resp, err := m.remote.Alarm(ctx, req, grpc.FailFast(false)) + if err == nil { + return (*AlarmResponse)(resp), nil + } + if isHaltErr(ctx, err) { + return nil, toErr(ctx, err) + } + } +} + +func (m *maintenance) AlarmDisarm(ctx context.Context, am *AlarmMember) (*AlarmResponse, error) { + req := &pb.AlarmRequest{ + Action: pb.AlarmRequest_DEACTIVATE, + MemberID: am.MemberID, + Alarm: am.Alarm, + } + + if req.MemberID == 0 && req.Alarm == pb.AlarmType_NONE { + ar, err := m.AlarmList(ctx) + if err != nil { + return nil, toErr(ctx, err) + } + ret := AlarmResponse{} + for _, am := range ar.Alarms { + dresp, derr := m.AlarmDisarm(ctx, (*AlarmMember)(am)) + if derr != nil { + return nil, toErr(ctx, derr) + } + ret.Alarms = append(ret.Alarms, dresp.Alarms...) + } + return &ret, nil + } + + resp, err := m.remote.Alarm(ctx, req, grpc.FailFast(false)) + if err == nil { + return (*AlarmResponse)(resp), nil + } + return nil, toErr(ctx, err) +} + +func (m *maintenance) Defragment(ctx context.Context, endpoint string) (*DefragmentResponse, error) { + conn, err := m.c.Dial(endpoint) + if err != nil { + return nil, toErr(ctx, err) + } + defer conn.Close() + remote := pb.NewMaintenanceClient(conn) + resp, err := remote.Defragment(ctx, &pb.DefragmentRequest{}, grpc.FailFast(false)) + if err != nil { + return nil, toErr(ctx, err) + } + return (*DefragmentResponse)(resp), nil +} + +func (m *maintenance) Status(ctx context.Context, endpoint string) (*StatusResponse, error) { + conn, err := m.c.Dial(endpoint) + if err != nil { + return nil, toErr(ctx, err) + } + defer conn.Close() + remote := pb.NewMaintenanceClient(conn) + resp, err := remote.Status(ctx, &pb.StatusRequest{}, grpc.FailFast(false)) + if err != nil { + return nil, toErr(ctx, err) + } + return (*StatusResponse)(resp), nil +} + +func (m *maintenance) Snapshot(ctx context.Context) (io.ReadCloser, error) { + ss, err := m.remote.Snapshot(ctx, &pb.SnapshotRequest{}, grpc.FailFast(false)) + if err != nil { + return nil, toErr(ctx, err) + } + + pr, pw := io.Pipe() + go func() { + for { + resp, err := ss.Recv() + if err != nil { + pw.CloseWithError(err) + return + } + if resp == nil && err == nil { + break + } + if _, werr := pw.Write(resp.Blob); werr != nil { + pw.CloseWithError(werr) + return + } + } + pw.Close() + }() + return pr, nil +} diff --git a/vendor/github.com/coreos/etcd/clientv3/op.go b/vendor/github.com/coreos/etcd/clientv3/op.go new file mode 100644 index 00000000..89698be2 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/op.go @@ -0,0 +1,273 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" +) + +type opType int + +const ( + // A default Op has opType 0, which is invalid. + tRange opType = iota + 1 + tPut + tDeleteRange +) + +var ( + noPrefixEnd = []byte{0} +) + +// Op represents an Operation that kv can execute. +type Op struct { + t opType + key []byte + end []byte + + // for range + limit int64 + sort *SortOption + serializable bool + keysOnly bool + countOnly bool + + // for range, watch + rev int64 + + // progressNotify is for progress updates. + progressNotify bool + + // for put + val []byte + leaseID LeaseID +} + +func (op Op) toRequestOp() *pb.RequestOp { + switch op.t { + case tRange: + r := &pb.RangeRequest{ + Key: op.key, + RangeEnd: op.end, + Limit: op.limit, + Revision: op.rev, + Serializable: op.serializable, + KeysOnly: op.keysOnly, + CountOnly: op.countOnly, + } + if op.sort != nil { + r.SortOrder = pb.RangeRequest_SortOrder(op.sort.Order) + r.SortTarget = pb.RangeRequest_SortTarget(op.sort.Target) + } + return &pb.RequestOp{Request: &pb.RequestOp_RequestRange{RequestRange: r}} + case tPut: + r := &pb.PutRequest{Key: op.key, Value: op.val, Lease: int64(op.leaseID)} + return &pb.RequestOp{Request: &pb.RequestOp_RequestPut{RequestPut: r}} + case tDeleteRange: + r := &pb.DeleteRangeRequest{Key: op.key, RangeEnd: op.end} + return &pb.RequestOp{Request: &pb.RequestOp_RequestDeleteRange{RequestDeleteRange: r}} + default: + panic("Unknown Op") + } +} + +func (op Op) isWrite() bool { + return op.t != tRange +} + +func OpGet(key string, opts ...OpOption) Op { + ret := Op{t: tRange, key: []byte(key)} + ret.applyOpts(opts) + return ret +} + +func OpDelete(key string, opts ...OpOption) Op { + ret := Op{t: tDeleteRange, key: []byte(key)} + ret.applyOpts(opts) + switch { + case ret.leaseID != 0: + panic("unexpected lease in delete") + case ret.limit != 0: + panic("unexpected limit in delete") + case ret.rev != 0: + panic("unexpected revision in delete") + case ret.sort != nil: + panic("unexpected sort in delete") + case ret.serializable: + panic("unexpected serializable in delete") + case ret.countOnly: + panic("unexpected countOnly in delete") + } + return ret +} + +func OpPut(key, val string, opts ...OpOption) Op { + ret := Op{t: tPut, key: []byte(key), val: []byte(val)} + ret.applyOpts(opts) + switch { + case ret.end != nil: + panic("unexpected range in put") + case ret.limit != 0: + panic("unexpected limit in put") + case ret.rev != 0: + panic("unexpected revision in put") + case ret.sort != nil: + panic("unexpected sort in put") + case ret.serializable: + panic("unexpected serializable in put") + case ret.countOnly: + panic("unexpected countOnly in delete") + } + return ret +} + +func opWatch(key string, opts ...OpOption) Op { + ret := Op{t: tRange, key: []byte(key)} + ret.applyOpts(opts) + switch { + case ret.leaseID != 0: + panic("unexpected lease in watch") + case ret.limit != 0: + panic("unexpected limit in watch") + case ret.sort != nil: + panic("unexpected sort in watch") + case ret.serializable: + panic("unexpected serializable in watch") + case ret.countOnly: + panic("unexpected countOnly in delete") + } + return ret +} + +func (op *Op) applyOpts(opts []OpOption) { + for _, opt := range opts { + opt(op) + } +} + +// OpOption configures Operations like Get, Put, Delete. +type OpOption func(*Op) + +// WithLease attaches a lease ID to a key in 'Put' request. +func WithLease(leaseID LeaseID) OpOption { + return func(op *Op) { op.leaseID = leaseID } +} + +// WithLimit limits the number of results to return from 'Get' request. +func WithLimit(n int64) OpOption { return func(op *Op) { op.limit = n } } + +// WithRev specifies the store revision for 'Get' request. +// Or the start revision of 'Watch' request. +func WithRev(rev int64) OpOption { return func(op *Op) { op.rev = rev } } + +// WithSort specifies the ordering in 'Get' request. It requires +// 'WithRange' and/or 'WithPrefix' to be specified too. +// 'target' specifies the target to sort by: key, version, revisions, value. +// 'order' can be either 'SortNone', 'SortAscend', 'SortDescend'. +func WithSort(target SortTarget, order SortOrder) OpOption { + return func(op *Op) { + op.sort = &SortOption{target, order} + } +} + +// GetPrefixRangeEnd gets the range end of the prefix. +// 'Get(foo, WithPrefix())' is equal to 'Get(foo, WithRange(GetPrefixRangeEnd(foo))'. +func GetPrefixRangeEnd(prefix string) string { + return string(getPrefix([]byte(prefix))) +} + +func getPrefix(key []byte) []byte { + end := make([]byte, len(key)) + copy(end, key) + for i := len(end) - 1; i >= 0; i-- { + if end[i] < 0xff { + end[i] = end[i] + 1 + end = end[:i+1] + return end + } + } + // next prefix does not exist (e.g., 0xffff); + // default to WithFromKey policy + return noPrefixEnd +} + +// WithPrefix enables 'Get', 'Delete', or 'Watch' requests to operate +// on the keys with matching prefix. For example, 'Get(foo, WithPrefix())' +// can return 'foo1', 'foo2', and so on. +func WithPrefix() OpOption { + return func(op *Op) { + op.end = getPrefix(op.key) + } +} + +// WithRange specifies the range of 'Get' or 'Delete' requests. +// For example, 'Get' requests with 'WithRange(end)' returns +// the keys in the range [key, end). +func WithRange(endKey string) OpOption { + return func(op *Op) { op.end = []byte(endKey) } +} + +// WithFromKey specifies the range of 'Get' or 'Delete' requests +// to be equal or greater than the key in the argument. +func WithFromKey() OpOption { return WithRange("\x00") } + +// WithSerializable makes 'Get' request serializable. By default, +// it's linearizable. Serializable requests are better for lower latency +// requirement. +func WithSerializable() OpOption { + return func(op *Op) { op.serializable = true } +} + +// WithKeysOnly makes the 'Get' request return only the keys and the corresponding +// values will be omitted. +func WithKeysOnly() OpOption { + return func(op *Op) { op.keysOnly = true } +} + +// WithCountOnly makes the 'Get' request return only the count of keys. +func WithCountOnly() OpOption { + return func(op *Op) { op.countOnly = true } +} + +// WithFirstCreate gets the key with the oldest creation revision in the request range. +func WithFirstCreate() []OpOption { return withTop(SortByCreateRevision, SortAscend) } + +// WithLastCreate gets the key with the latest creation revision in the request range. +func WithLastCreate() []OpOption { return withTop(SortByCreateRevision, SortDescend) } + +// WithFirstKey gets the lexically first key in the request range. +func WithFirstKey() []OpOption { return withTop(SortByKey, SortAscend) } + +// WithLastKey gets the lexically last key in the request range. +func WithLastKey() []OpOption { return withTop(SortByKey, SortDescend) } + +// WithFirstRev gets the key with the oldest modification revision in the request range. +func WithFirstRev() []OpOption { return withTop(SortByModRevision, SortAscend) } + +// WithLastRev gets the key with the latest modification revision in the request range. +func WithLastRev() []OpOption { return withTop(SortByModRevision, SortDescend) } + +// withTop gets the first key over the get's prefix given a sort order +func withTop(target SortTarget, order SortOrder) []OpOption { + return []OpOption{WithPrefix(), WithSort(target, order), WithLimit(1)} +} + +// WithProgressNotify makes watch server send periodic progress updates. +// Progress updates have zero events in WatchResponse. +func WithProgressNotify() OpOption { + return func(op *Op) { + op.progressNotify = true + } +} diff --git a/vendor/github.com/coreos/etcd/clientv3/retry.go b/vendor/github.com/coreos/etcd/clientv3/retry.go new file mode 100644 index 00000000..3029ed8e --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/retry.go @@ -0,0 +1,243 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +type rpcFunc func(ctx context.Context) error +type retryRpcFunc func(context.Context, rpcFunc) + +func (c *Client) newRetryWrapper() retryRpcFunc { + return func(rpcCtx context.Context, f rpcFunc) { + for { + err := f(rpcCtx) + // ignore grpc conn closing on fail-fast calls; they are transient errors + if err == nil || !isConnClosing(err) { + return + } + select { + case <-c.balancer.ConnectNotify(): + case <-rpcCtx.Done(): + case <-c.ctx.Done(): + return + } + } + } +} + +type retryKVClient struct { + pb.KVClient + retryf retryRpcFunc +} + +// RetryKVClient implements a KVClient that uses the client's FailFast retry policy. +func RetryKVClient(c *Client) pb.KVClient { + return &retryKVClient{pb.NewKVClient(c.conn), c.retryWrapper} +} + +func (rkv *retryKVClient) Put(ctx context.Context, in *pb.PutRequest, opts ...grpc.CallOption) (resp *pb.PutResponse, err error) { + rkv.retryf(ctx, func(rctx context.Context) error { + resp, err = rkv.KVClient.Put(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rkv *retryKVClient) DeleteRange(ctx context.Context, in *pb.DeleteRangeRequest, opts ...grpc.CallOption) (resp *pb.DeleteRangeResponse, err error) { + rkv.retryf(ctx, func(rctx context.Context) error { + resp, err = rkv.KVClient.DeleteRange(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rkv *retryKVClient) Txn(ctx context.Context, in *pb.TxnRequest, opts ...grpc.CallOption) (resp *pb.TxnResponse, err error) { + rkv.retryf(ctx, func(rctx context.Context) error { + resp, err = rkv.KVClient.Txn(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rkv *retryKVClient) Compact(ctx context.Context, in *pb.CompactionRequest, opts ...grpc.CallOption) (resp *pb.CompactionResponse, err error) { + rkv.retryf(ctx, func(rctx context.Context) error { + resp, err = rkv.KVClient.Compact(rctx, in, opts...) + return err + }) + return resp, err +} + +type retryLeaseClient struct { + pb.LeaseClient + retryf retryRpcFunc +} + +// RetryLeaseClient implements a LeaseClient that uses the client's FailFast retry policy. +func RetryLeaseClient(c *Client) pb.LeaseClient { + return &retryLeaseClient{pb.NewLeaseClient(c.conn), c.retryWrapper} +} + +func (rlc *retryLeaseClient) LeaseGrant(ctx context.Context, in *pb.LeaseGrantRequest, opts ...grpc.CallOption) (resp *pb.LeaseGrantResponse, err error) { + rlc.retryf(ctx, func(rctx context.Context) error { + resp, err = rlc.LeaseClient.LeaseGrant(rctx, in, opts...) + return err + }) + return resp, err + +} + +func (rlc *retryLeaseClient) LeaseRevoke(ctx context.Context, in *pb.LeaseRevokeRequest, opts ...grpc.CallOption) (resp *pb.LeaseRevokeResponse, err error) { + rlc.retryf(ctx, func(rctx context.Context) error { + resp, err = rlc.LeaseClient.LeaseRevoke(rctx, in, opts...) + return err + }) + return resp, err +} + +type retryClusterClient struct { + pb.ClusterClient + retryf retryRpcFunc +} + +// RetryClusterClient implements a ClusterClient that uses the client's FailFast retry policy. +func RetryClusterClient(c *Client) pb.ClusterClient { + return &retryClusterClient{pb.NewClusterClient(c.conn), c.retryWrapper} +} + +func (rcc *retryClusterClient) MemberAdd(ctx context.Context, in *pb.MemberAddRequest, opts ...grpc.CallOption) (resp *pb.MemberAddResponse, err error) { + rcc.retryf(ctx, func(rctx context.Context) error { + resp, err = rcc.ClusterClient.MemberAdd(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rcc *retryClusterClient) MemberRemove(ctx context.Context, in *pb.MemberRemoveRequest, opts ...grpc.CallOption) (resp *pb.MemberRemoveResponse, err error) { + rcc.retryf(ctx, func(rctx context.Context) error { + resp, err = rcc.ClusterClient.MemberRemove(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rcc *retryClusterClient) MemberUpdate(ctx context.Context, in *pb.MemberUpdateRequest, opts ...grpc.CallOption) (resp *pb.MemberUpdateResponse, err error) { + rcc.retryf(ctx, func(rctx context.Context) error { + resp, err = rcc.ClusterClient.MemberUpdate(rctx, in, opts...) + return err + }) + return resp, err +} + +type retryAuthClient struct { + pb.AuthClient + retryf retryRpcFunc +} + +// RetryAuthClient implements a AuthClient that uses the client's FailFast retry policy. +func RetryAuthClient(c *Client) pb.AuthClient { + return &retryAuthClient{pb.NewAuthClient(c.conn), c.retryWrapper} +} + +func (rac *retryAuthClient) AuthEnable(ctx context.Context, in *pb.AuthEnableRequest, opts ...grpc.CallOption) (resp *pb.AuthEnableResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.AuthEnable(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) AuthDisable(ctx context.Context, in *pb.AuthDisableRequest, opts ...grpc.CallOption) (resp *pb.AuthDisableResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.AuthDisable(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) UserAdd(ctx context.Context, in *pb.AuthUserAddRequest, opts ...grpc.CallOption) (resp *pb.AuthUserAddResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.UserAdd(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) UserDelete(ctx context.Context, in *pb.AuthUserDeleteRequest, opts ...grpc.CallOption) (resp *pb.AuthUserDeleteResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.UserDelete(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) UserChangePassword(ctx context.Context, in *pb.AuthUserChangePasswordRequest, opts ...grpc.CallOption) (resp *pb.AuthUserChangePasswordResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.UserChangePassword(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) UserGrantRole(ctx context.Context, in *pb.AuthUserGrantRoleRequest, opts ...grpc.CallOption) (resp *pb.AuthUserGrantRoleResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.UserGrantRole(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) UserRevokeRole(ctx context.Context, in *pb.AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (resp *pb.AuthUserRevokeRoleResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.UserRevokeRole(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) RoleAdd(ctx context.Context, in *pb.AuthRoleAddRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleAddResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.RoleAdd(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) RoleDelete(ctx context.Context, in *pb.AuthRoleDeleteRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleDeleteResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.RoleDelete(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) RoleGrantPermission(ctx context.Context, in *pb.AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleGrantPermissionResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.RoleGrantPermission(rctx, in, opts...) + return err + }) + return resp, err +} + +func (rac *retryAuthClient) RoleRevokePermission(ctx context.Context, in *pb.AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (resp *pb.AuthRoleRevokePermissionResponse, err error) { + rac.retryf(ctx, func(rctx context.Context) error { + resp, err = rac.AuthClient.RoleRevokePermission(rctx, in, opts...) + return err + }) + return resp, err +} diff --git a/vendor/github.com/coreos/etcd/clientv3/sort.go b/vendor/github.com/coreos/etcd/clientv3/sort.go new file mode 100644 index 00000000..2bb9d9a1 --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/sort.go @@ -0,0 +1,37 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +type SortTarget int +type SortOrder int + +const ( + SortNone SortOrder = iota + SortAscend + SortDescend +) + +const ( + SortByKey SortTarget = iota + SortByVersion + SortByCreateRevision + SortByModRevision + SortByValue +) + +type SortOption struct { + Target SortTarget + Order SortOrder +} diff --git a/vendor/github.com/coreos/etcd/clientv3/txn.go b/vendor/github.com/coreos/etcd/clientv3/txn.go new file mode 100644 index 00000000..a451e33a --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/txn.go @@ -0,0 +1,160 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "sync" + + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + "golang.org/x/net/context" +) + +// Txn is the interface that wraps mini-transactions. +// +// Tx.If( +// Compare(Value(k1), ">", v1), +// Compare(Version(k1), "=", 2) +// ).Then( +// OpPut(k2,v2), OpPut(k3,v3) +// ).Else( +// OpPut(k4,v4), OpPut(k5,v5) +// ).Commit() +// +type Txn interface { + // If takes a list of comparison. If all comparisons passed in succeed, + // the operations passed into Then() will be executed. Or the operations + // passed into Else() will be executed. + If(cs ...Cmp) Txn + + // Then takes a list of operations. The Ops list will be executed, if the + // comparisons passed in If() succeed. + Then(ops ...Op) Txn + + // Else takes a list of operations. The Ops list will be executed, if the + // comparisons passed in If() fail. + Else(ops ...Op) Txn + + // Commit tries to commit the transaction. + Commit() (*TxnResponse, error) + + // TODO: add a Do for shortcut the txn without any condition? +} + +type txn struct { + kv *kv + ctx context.Context + + mu sync.Mutex + cif bool + cthen bool + celse bool + + isWrite bool + + cmps []*pb.Compare + + sus []*pb.RequestOp + fas []*pb.RequestOp +} + +func (txn *txn) If(cs ...Cmp) Txn { + txn.mu.Lock() + defer txn.mu.Unlock() + + if txn.cif { + panic("cannot call If twice!") + } + + if txn.cthen { + panic("cannot call If after Then!") + } + + if txn.celse { + panic("cannot call If after Else!") + } + + txn.cif = true + + for i := range cs { + txn.cmps = append(txn.cmps, (*pb.Compare)(&cs[i])) + } + + return txn +} + +func (txn *txn) Then(ops ...Op) Txn { + txn.mu.Lock() + defer txn.mu.Unlock() + + if txn.cthen { + panic("cannot call Then twice!") + } + if txn.celse { + panic("cannot call Then after Else!") + } + + txn.cthen = true + + for _, op := range ops { + txn.isWrite = txn.isWrite || op.isWrite() + txn.sus = append(txn.sus, op.toRequestOp()) + } + + return txn +} + +func (txn *txn) Else(ops ...Op) Txn { + txn.mu.Lock() + defer txn.mu.Unlock() + + if txn.celse { + panic("cannot call Else twice!") + } + + txn.celse = true + + for _, op := range ops { + txn.isWrite = txn.isWrite || op.isWrite() + txn.fas = append(txn.fas, op.toRequestOp()) + } + + return txn +} + +func (txn *txn) Commit() (*TxnResponse, error) { + txn.mu.Lock() + defer txn.mu.Unlock() + for { + resp, err := txn.commit() + if err == nil { + return resp, err + } + if isHaltErr(txn.ctx, err) { + return nil, toErr(txn.ctx, err) + } + if txn.isWrite { + return nil, toErr(txn.ctx, err) + } + } +} + +func (txn *txn) commit() (*TxnResponse, error) { + r := &pb.TxnRequest{Compare: txn.cmps, Success: txn.sus, Failure: txn.fas} + resp, err := txn.kv.remote.Txn(txn.ctx, r) + if err != nil { + return nil, err + } + return (*TxnResponse)(resp), nil +} diff --git a/vendor/github.com/coreos/etcd/clientv3/watch.go b/vendor/github.com/coreos/etcd/clientv3/watch.go new file mode 100644 index 00000000..afcc3b1a --- /dev/null +++ b/vendor/github.com/coreos/etcd/clientv3/watch.go @@ -0,0 +1,714 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package clientv3 + +import ( + "fmt" + "sync" + "time" + + v3rpc "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" + pb "github.com/coreos/etcd/etcdserver/etcdserverpb" + mvccpb "github.com/coreos/etcd/mvcc/mvccpb" + "golang.org/x/net/context" + "google.golang.org/grpc" +) + +const ( + EventTypeDelete = mvccpb.DELETE + EventTypePut = mvccpb.PUT + + closeSendErrTimeout = 250 * time.Millisecond +) + +type Event mvccpb.Event + +type WatchChan <-chan WatchResponse + +type Watcher interface { + // Watch watches on a key or prefix. The watched events will be returned + // through the returned channel. + // If the watch is slow or the required rev is compacted, the watch request + // might be canceled from the server-side and the chan will be closed. + // 'opts' can be: 'WithRev' and/or 'WithPrefix'. + Watch(ctx context.Context, key string, opts ...OpOption) WatchChan + + // Close closes the watcher and cancels all watch requests. + Close() error +} + +type WatchResponse struct { + Header pb.ResponseHeader + Events []*Event + + // CompactRevision is the minimum revision the watcher may receive. + CompactRevision int64 + + // Canceled is used to indicate watch failure. + // If the watch failed and the stream was about to close, before the channel is closed, + // the channel sends a final response that has Canceled set to true with a non-nil Err(). + Canceled bool + + closeErr error +} + +// IsCreate returns true if the event tells that the key is newly created. +func (e *Event) IsCreate() bool { + return e.Type == EventTypePut && e.Kv.CreateRevision == e.Kv.ModRevision +} + +// IsModify returns true if the event tells that a new value is put on existing key. +func (e *Event) IsModify() bool { + return e.Type == EventTypePut && e.Kv.CreateRevision != e.Kv.ModRevision +} + +// Err is the error value if this WatchResponse holds an error. +func (wr *WatchResponse) Err() error { + switch { + case wr.closeErr != nil: + return v3rpc.Error(wr.closeErr) + case wr.CompactRevision != 0: + return v3rpc.ErrCompacted + case wr.Canceled: + return v3rpc.ErrFutureRev + } + return nil +} + +// IsProgressNotify returns true if the WatchResponse is progress notification. +func (wr *WatchResponse) IsProgressNotify() bool { + return len(wr.Events) == 0 && !wr.Canceled +} + +// watcher implements the Watcher interface +type watcher struct { + remote pb.WatchClient + + // mu protects the grpc streams map + mu sync.RWMutex + // streams holds all the active grpc streams keyed by ctx value. + streams map[string]*watchGrpcStream +} + +type watchGrpcStream struct { + owner *watcher + remote pb.WatchClient + + // ctx controls internal remote.Watch requests + ctx context.Context + // ctxKey is the key used when looking up this stream's context + ctxKey string + cancel context.CancelFunc + + // mu protects the streams map + mu sync.RWMutex + // streams holds all active watchers + streams map[int64]*watcherStream + + // reqc sends a watch request from Watch() to the main goroutine + reqc chan *watchRequest + // respc receives data from the watch client + respc chan *pb.WatchResponse + // stopc is sent to the main goroutine to stop all processing + stopc chan struct{} + // donec closes to broadcast shutdown + donec chan struct{} + // errc transmits errors from grpc Recv to the watch stream reconn logic + errc chan error + + // the error that closed the watch stream + closeErr error +} + +// watchRequest is issued by the subscriber to start a new watcher +type watchRequest struct { + ctx context.Context + key string + end string + rev int64 + // progressNotify is for progress updates. + progressNotify bool + // retc receives a chan WatchResponse once the watcher is established + retc chan chan WatchResponse +} + +// watcherStream represents a registered watcher +type watcherStream struct { + // initReq is the request that initiated this request + initReq watchRequest + + // outc publishes watch responses to subscriber + outc chan<- WatchResponse + // recvc buffers watch responses before publishing + recvc chan *WatchResponse + id int64 + + // lastRev is revision last successfully sent over outc + lastRev int64 + // resumec indicates the stream must recover at a given revision + resumec chan int64 +} + +func NewWatcher(c *Client) Watcher { + return &watcher{ + remote: pb.NewWatchClient(c.conn), + streams: make(map[string]*watchGrpcStream), + } +} + +// never closes +var valCtxCh = make(chan struct{}) +var zeroTime = time.Unix(0, 0) + +// ctx with only the values; never Done +type valCtx struct{ context.Context } + +func (vc *valCtx) Deadline() (time.Time, bool) { return zeroTime, false } +func (vc *valCtx) Done() <-chan struct{} { return valCtxCh } +func (vc *valCtx) Err() error { return nil } + +func (w *watcher) newWatcherGrpcStream(inctx context.Context) *watchGrpcStream { + ctx, cancel := context.WithCancel(&valCtx{inctx}) + wgs := &watchGrpcStream{ + owner: w, + remote: w.remote, + ctx: ctx, + ctxKey: fmt.Sprintf("%v", inctx), + cancel: cancel, + streams: make(map[int64]*watcherStream), + + respc: make(chan *pb.WatchResponse), + reqc: make(chan *watchRequest), + stopc: make(chan struct{}), + donec: make(chan struct{}), + errc: make(chan error, 1), + } + go wgs.run() + return wgs +} + +// Watch posts a watch request to run() and waits for a new watcher channel +func (w *watcher) Watch(ctx context.Context, key string, opts ...OpOption) WatchChan { + ow := opWatch(key, opts...) + + retc := make(chan chan WatchResponse, 1) + wr := &watchRequest{ + ctx: ctx, + key: string(ow.key), + end: string(ow.end), + rev: ow.rev, + progressNotify: ow.progressNotify, + retc: retc, + } + + ok := false + ctxKey := fmt.Sprintf("%v", ctx) + + // find or allocate appropriate grpc watch stream + w.mu.Lock() + if w.streams == nil { + // closed + w.mu.Unlock() + ch := make(chan WatchResponse) + close(ch) + return ch + } + wgs := w.streams[ctxKey] + if wgs == nil { + wgs = w.newWatcherGrpcStream(ctx) + w.streams[ctxKey] = wgs + } + donec := wgs.donec + reqc := wgs.reqc + w.mu.Unlock() + + // couldn't create channel; return closed channel + closeCh := make(chan WatchResponse, 1) + + // submit request + select { + case reqc <- wr: + ok = true + case <-wr.ctx.Done(): + wgs.stopIfEmpty() + case <-donec: + if wgs.closeErr != nil { + closeCh <- WatchResponse{closeErr: wgs.closeErr} + break + } + // retry; may have dropped stream from no ctxs + return w.Watch(ctx, key, opts...) + } + + // receive channel + if ok { + select { + case ret := <-retc: + return ret + case <-ctx.Done(): + case <-donec: + if wgs.closeErr != nil { + closeCh <- WatchResponse{closeErr: wgs.closeErr} + break + } + // retry; may have dropped stream from no ctxs + return w.Watch(ctx, key, opts...) + } + } + + close(closeCh) + return closeCh +} + +func (w *watcher) Close() (err error) { + w.mu.Lock() + streams := w.streams + w.streams = nil + w.mu.Unlock() + for _, wgs := range streams { + if werr := wgs.Close(); werr != nil { + err = werr + } + } + return err +} + +func (w *watchGrpcStream) Close() (err error) { + w.mu.Lock() + if w.stopc != nil { + close(w.stopc) + w.stopc = nil + } + w.mu.Unlock() + <-w.donec + select { + case err = <-w.errc: + default: + } + return toErr(w.ctx, err) +} + +func (w *watchGrpcStream) addStream(resp *pb.WatchResponse, pendingReq *watchRequest) { + if pendingReq == nil { + // no pending request; ignore + return + } + if resp.Canceled || resp.CompactRevision != 0 { + // a cancel at id creation time means the start revision has + // been compacted out of the store + ret := make(chan WatchResponse, 1) + ret <- WatchResponse{ + Header: *resp.Header, + CompactRevision: resp.CompactRevision, + Canceled: true} + close(ret) + pendingReq.retc <- ret + return + } + + ret := make(chan WatchResponse) + if resp.WatchId == -1 { + // failed; no channel + close(ret) + pendingReq.retc <- ret + return + } + + ws := &watcherStream{ + initReq: *pendingReq, + id: resp.WatchId, + outc: ret, + // buffered so unlikely to block on sending while holding mu + recvc: make(chan *WatchResponse, 4), + resumec: make(chan int64), + } + + if pendingReq.rev == 0 { + // note the header revision so that a put following a current watcher + // disconnect will arrive on the watcher channel after reconnect + ws.initReq.rev = resp.Header.Revision + } + + w.mu.Lock() + w.streams[ws.id] = ws + w.mu.Unlock() + + // pass back the subscriber channel for the watcher + pendingReq.retc <- ret + + // send messages to subscriber + go w.serveStream(ws) +} + +// closeStream closes the watcher resources and removes it +func (w *watchGrpcStream) closeStream(ws *watcherStream) { + w.mu.Lock() + // cancels request stream; subscriber receives nil channel + close(ws.initReq.retc) + // close subscriber's channel + close(ws.outc) + delete(w.streams, ws.id) + w.mu.Unlock() +} + +// run is the root of the goroutines for managing a watcher client +func (w *watchGrpcStream) run() { + var wc pb.Watch_WatchClient + var closeErr error + + defer func() { + w.owner.mu.Lock() + w.closeErr = closeErr + if w.owner.streams != nil { + delete(w.owner.streams, w.ctxKey) + } + close(w.donec) + w.owner.mu.Unlock() + w.cancel() + }() + + // already stopped? + w.mu.RLock() + stopc := w.stopc + w.mu.RUnlock() + if stopc == nil { + return + } + + // start a stream with the etcd grpc server + if wc, closeErr = w.newWatchClient(); closeErr != nil { + return + } + + var pendingReq, failedReq *watchRequest + curReqC := w.reqc + cancelSet := make(map[int64]struct{}) + + for { + select { + // Watch() requested + case pendingReq = <-curReqC: + // no more watch requests until there's a response + curReqC = nil + if err := wc.Send(pendingReq.toPB()); err == nil { + // pendingReq now waits on w.respc + break + } + failedReq = pendingReq + // New events from the watch client + case pbresp := <-w.respc: + switch { + case pbresp.Created: + // response to pending req, try to add + w.addStream(pbresp, pendingReq) + pendingReq = nil + curReqC = w.reqc + case pbresp.Canceled: + delete(cancelSet, pbresp.WatchId) + // shutdown serveStream, if any + w.mu.Lock() + if ws, ok := w.streams[pbresp.WatchId]; ok { + close(ws.recvc) + delete(w.streams, ws.id) + } + numStreams := len(w.streams) + w.mu.Unlock() + if numStreams == 0 { + // don't leak watcher streams + return + } + default: + // dispatch to appropriate watch stream + if ok := w.dispatchEvent(pbresp); ok { + break + } + // watch response on unexpected watch id; cancel id + if _, ok := cancelSet[pbresp.WatchId]; ok { + break + } + cancelSet[pbresp.WatchId] = struct{}{} + cr := &pb.WatchRequest_CancelRequest{ + CancelRequest: &pb.WatchCancelRequest{ + WatchId: pbresp.WatchId, + }, + } + req := &pb.WatchRequest{RequestUnion: cr} + wc.Send(req) + } + // watch client failed to recv; spawn another if possible + // TODO report watch client errors from errc? + case err := <-w.errc: + if toErr(w.ctx, err) == v3rpc.ErrNoLeader { + closeErr = err + return + } + if wc, closeErr = w.newWatchClient(); closeErr != nil { + return + } + curReqC = w.reqc + if pendingReq != nil { + failedReq = pendingReq + } + cancelSet = make(map[int64]struct{}) + case <-stopc: + return + } + + // send failed; queue for retry + if failedReq != nil { + go func(wr *watchRequest) { + select { + case w.reqc <- wr: + case <-wr.ctx.Done(): + case <-w.donec: + } + }(pendingReq) + failedReq = nil + pendingReq = nil + } + } +} + +// dispatchEvent sends a WatchResponse to the appropriate watcher stream +func (w *watchGrpcStream) dispatchEvent(pbresp *pb.WatchResponse) bool { + w.mu.RLock() + defer w.mu.RUnlock() + ws, ok := w.streams[pbresp.WatchId] + events := make([]*Event, len(pbresp.Events)) + for i, ev := range pbresp.Events { + events[i] = (*Event)(ev) + } + if ok { + wr := &WatchResponse{ + Header: *pbresp.Header, + Events: events, + CompactRevision: pbresp.CompactRevision, + Canceled: pbresp.Canceled} + ws.recvc <- wr + } + return ok +} + +// serveWatchClient forwards messages from the grpc stream to run() +func (w *watchGrpcStream) serveWatchClient(wc pb.Watch_WatchClient) { + for { + resp, err := wc.Recv() + if err != nil { + select { + case w.errc <- err: + case <-w.donec: + } + return + } + select { + case w.respc <- resp: + case <-w.donec: + return + } + } +} + +// serveStream forwards watch responses from run() to the subscriber +func (w *watchGrpcStream) serveStream(ws *watcherStream) { + var closeErr error + emptyWr := &WatchResponse{} + wrs := []*WatchResponse{} + resuming := false + closing := false + for !closing { + curWr := emptyWr + outc := ws.outc + if len(wrs) > 0 { + curWr = wrs[0] + } else { + outc = nil + } + select { + case outc <- *curWr: + if wrs[0].Err() != nil { + closing = true + break + } + var newRev int64 + if len(wrs[0].Events) > 0 { + newRev = wrs[0].Events[len(wrs[0].Events)-1].Kv.ModRevision + } else { + newRev = wrs[0].Header.Revision + } + if newRev != ws.lastRev { + ws.lastRev = newRev + } + wrs[0] = nil + wrs = wrs[1:] + case wr, ok := <-ws.recvc: + if !ok { + // shutdown from closeStream + return + } + // resume up to last seen event if disconnected + if resuming && wr.Err() == nil { + resuming = false + // trim events already seen + for i := 0; i < len(wr.Events); i++ { + if wr.Events[i].Kv.ModRevision > ws.lastRev { + wr.Events = wr.Events[i:] + break + } + } + // only forward new events + if wr.Events[0].Kv.ModRevision == ws.lastRev { + break + } + } + resuming = false + // TODO don't keep buffering if subscriber stops reading + wrs = append(wrs, wr) + case resumeRev := <-ws.resumec: + wrs = nil + resuming = true + if resumeRev == -1 { + // pause serving stream while resume gets set up + break + } + if resumeRev != ws.lastRev { + panic("unexpected resume revision") + } + case <-w.donec: + closing = true + closeErr = w.closeErr + case <-ws.initReq.ctx.Done(): + closing = true + } + } + + // try to send off close error + if closeErr != nil { + select { + case ws.outc <- WatchResponse{closeErr: w.closeErr}: + case <-w.donec: + case <-time.After(closeSendErrTimeout): + } + } + + w.closeStream(ws) + w.stopIfEmpty() + // lazily send cancel message if events on missing id +} + +func (wgs *watchGrpcStream) stopIfEmpty() { + wgs.mu.Lock() + if len(wgs.streams) == 0 && wgs.stopc != nil { + close(wgs.stopc) + wgs.stopc = nil + } + wgs.mu.Unlock() +} + +func (w *watchGrpcStream) newWatchClient() (pb.Watch_WatchClient, error) { + ws, rerr := w.resume() + if rerr != nil { + return nil, rerr + } + go w.serveWatchClient(ws) + return ws, nil +} + +// resume creates a new WatchClient with all current watchers reestablished +func (w *watchGrpcStream) resume() (ws pb.Watch_WatchClient, err error) { + for { + if ws, err = w.openWatchClient(); err != nil { + break + } else if err = w.resumeWatchers(ws); err == nil { + break + } + } + return ws, v3rpc.Error(err) +} + +// openWatchClient retries opening a watchclient until retryConnection fails +func (w *watchGrpcStream) openWatchClient() (ws pb.Watch_WatchClient, err error) { + for { + w.mu.Lock() + stopc := w.stopc + w.mu.Unlock() + if stopc == nil { + if err == nil { + err = context.Canceled + } + return nil, err + } + if ws, err = w.remote.Watch(w.ctx, grpc.FailFast(false)); ws != nil && err == nil { + break + } + if isHaltErr(w.ctx, err) { + return nil, v3rpc.Error(err) + } + } + return ws, nil +} + +// resumeWatchers rebuilds every registered watcher on a new client +func (w *watchGrpcStream) resumeWatchers(wc pb.Watch_WatchClient) error { + w.mu.RLock() + streams := make([]*watcherStream, 0, len(w.streams)) + for _, ws := range w.streams { + streams = append(streams, ws) + } + w.mu.RUnlock() + + for _, ws := range streams { + // pause serveStream + ws.resumec <- -1 + + // reconstruct watcher from initial request + if ws.lastRev != 0 { + ws.initReq.rev = ws.lastRev + } + if err := wc.Send(ws.initReq.toPB()); err != nil { + return err + } + + // wait for request ack + resp, err := wc.Recv() + if err != nil { + return err + } else if len(resp.Events) != 0 || !resp.Created { + return fmt.Errorf("watcher: unexpected response (%+v)", resp) + } + + // id may be different since new remote watcher; update map + w.mu.Lock() + delete(w.streams, ws.id) + ws.id = resp.WatchId + w.streams[ws.id] = ws + w.mu.Unlock() + + // unpause serveStream + ws.resumec <- ws.lastRev + } + return nil +} + +// toPB converts an internal watch request structure to its protobuf messagefunc (wr *watchRequest) +func (wr *watchRequest) toPB() *pb.WatchRequest { + req := &pb.WatchCreateRequest{ + StartRevision: wr.rev, + Key: []byte(wr.key), + RangeEnd: []byte(wr.end), + ProgressNotify: wr.progressNotify, + } + cr := &pb.WatchRequest_CreateRequest{CreateRequest: req} + return &pb.WatchRequest{RequestUnion: cr} +} diff --git a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go new file mode 100644 index 00000000..f72c6a64 --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/doc.go @@ -0,0 +1,16 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package rpctypes has types and values shared by the etcd server and client for v3 RPC interaction. +package rpctypes diff --git a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go new file mode 100644 index 00000000..ecf5a206 --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/error.go @@ -0,0 +1,150 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rpctypes + +import ( + "google.golang.org/grpc" + "google.golang.org/grpc/codes" +) + +var ( + // server-side error + ErrGRPCEmptyKey = grpc.Errorf(codes.InvalidArgument, "etcdserver: key is not provided") + ErrGRPCTooManyOps = grpc.Errorf(codes.InvalidArgument, "etcdserver: too many operations in txn request") + ErrGRPCDuplicateKey = grpc.Errorf(codes.InvalidArgument, "etcdserver: duplicate key given in txn request") + ErrGRPCCompacted = grpc.Errorf(codes.OutOfRange, "etcdserver: mvcc: required revision has been compacted") + ErrGRPCFutureRev = grpc.Errorf(codes.OutOfRange, "etcdserver: mvcc: required revision is a future revision") + ErrGRPCNoSpace = grpc.Errorf(codes.ResourceExhausted, "etcdserver: mvcc: database space exceeded") + + ErrGRPCLeaseNotFound = grpc.Errorf(codes.NotFound, "etcdserver: requested lease not found") + ErrGRPCLeaseExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: lease already exists") + + ErrGRPCMemberExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: member ID already exist") + ErrGRPCPeerURLExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: Peer URLs already exists") + ErrGRPCMemberBadURLs = grpc.Errorf(codes.InvalidArgument, "etcdserver: given member URLs are invalid") + ErrGRPCMemberNotFound = grpc.Errorf(codes.NotFound, "etcdserver: member not found") + + ErrGRPCRequestTooLarge = grpc.Errorf(codes.InvalidArgument, "etcdserver: request is too large") + + ErrGRPCRootUserNotExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: root user does not exist") + ErrGRPCRootRoleNotExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: root user does not have root role") + ErrGRPCUserAlreadyExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: user name already exists") + ErrGRPCUserNotFound = grpc.Errorf(codes.FailedPrecondition, "etcdserver: user name not found") + ErrGRPCRoleAlreadyExist = grpc.Errorf(codes.FailedPrecondition, "etcdserver: role name already exists") + ErrGRPCRoleNotFound = grpc.Errorf(codes.FailedPrecondition, "etcdserver: role name not found") + ErrGRPCAuthFailed = grpc.Errorf(codes.InvalidArgument, "etcdserver: authentication failed, invalid user ID or password") + ErrGRPCPermissionDenied = grpc.Errorf(codes.FailedPrecondition, "etcdserver: permission denied") + ErrGRPCRoleNotGranted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: role is not granted to the user") + ErrGRPCPermissionNotGranted = grpc.Errorf(codes.FailedPrecondition, "etcdserver: permission is not granted to the role") + + ErrGRPCNoLeader = grpc.Errorf(codes.Unavailable, "etcdserver: no leader") + ErrGRPCNotCapable = grpc.Errorf(codes.Unavailable, "etcdserver: not capable") + ErrGRPCStopped = grpc.Errorf(codes.Unavailable, "etcdserver: server stopped") + + errStringToError = map[string]error{ + grpc.ErrorDesc(ErrGRPCEmptyKey): ErrGRPCEmptyKey, + grpc.ErrorDesc(ErrGRPCTooManyOps): ErrGRPCTooManyOps, + grpc.ErrorDesc(ErrGRPCDuplicateKey): ErrGRPCDuplicateKey, + grpc.ErrorDesc(ErrGRPCCompacted): ErrGRPCCompacted, + grpc.ErrorDesc(ErrGRPCFutureRev): ErrGRPCFutureRev, + grpc.ErrorDesc(ErrGRPCNoSpace): ErrGRPCNoSpace, + + grpc.ErrorDesc(ErrGRPCLeaseNotFound): ErrGRPCLeaseNotFound, + grpc.ErrorDesc(ErrGRPCLeaseExist): ErrGRPCLeaseExist, + + grpc.ErrorDesc(ErrGRPCMemberExist): ErrGRPCMemberExist, + grpc.ErrorDesc(ErrGRPCPeerURLExist): ErrGRPCPeerURLExist, + grpc.ErrorDesc(ErrGRPCMemberBadURLs): ErrGRPCMemberBadURLs, + grpc.ErrorDesc(ErrGRPCMemberNotFound): ErrGRPCMemberNotFound, + + grpc.ErrorDesc(ErrGRPCRequestTooLarge): ErrGRPCRequestTooLarge, + + grpc.ErrorDesc(ErrGRPCRootUserNotExist): ErrGRPCRootUserNotExist, + grpc.ErrorDesc(ErrGRPCRootRoleNotExist): ErrGRPCRootRoleNotExist, + grpc.ErrorDesc(ErrGRPCUserAlreadyExist): ErrGRPCUserAlreadyExist, + grpc.ErrorDesc(ErrGRPCUserNotFound): ErrGRPCUserNotFound, + grpc.ErrorDesc(ErrGRPCRoleAlreadyExist): ErrGRPCRoleAlreadyExist, + grpc.ErrorDesc(ErrGRPCRoleNotFound): ErrGRPCRoleNotFound, + grpc.ErrorDesc(ErrGRPCAuthFailed): ErrGRPCAuthFailed, + grpc.ErrorDesc(ErrGRPCPermissionDenied): ErrGRPCPermissionDenied, + grpc.ErrorDesc(ErrGRPCRoleNotGranted): ErrGRPCRoleNotGranted, + grpc.ErrorDesc(ErrGRPCPermissionNotGranted): ErrGRPCPermissionNotGranted, + + grpc.ErrorDesc(ErrGRPCNoLeader): ErrGRPCNoLeader, + grpc.ErrorDesc(ErrGRPCNotCapable): ErrGRPCNotCapable, + grpc.ErrorDesc(ErrGRPCStopped): ErrGRPCStopped, + } + + // client-side error + ErrEmptyKey = Error(ErrGRPCEmptyKey) + ErrTooManyOps = Error(ErrGRPCTooManyOps) + ErrDuplicateKey = Error(ErrGRPCDuplicateKey) + ErrCompacted = Error(ErrGRPCCompacted) + ErrFutureRev = Error(ErrGRPCFutureRev) + ErrNoSpace = Error(ErrGRPCNoSpace) + + ErrLeaseNotFound = Error(ErrGRPCLeaseNotFound) + ErrLeaseExist = Error(ErrGRPCLeaseExist) + + ErrMemberExist = Error(ErrGRPCMemberExist) + ErrPeerURLExist = Error(ErrGRPCPeerURLExist) + ErrMemberBadURLs = Error(ErrGRPCMemberBadURLs) + ErrMemberNotFound = Error(ErrGRPCMemberNotFound) + + ErrRequestTooLarge = Error(ErrGRPCRequestTooLarge) + + ErrRootUserNotExist = Error(ErrGRPCRootUserNotExist) + ErrRootRoleNotExist = Error(ErrGRPCRootRoleNotExist) + ErrUserAlreadyExist = Error(ErrGRPCUserAlreadyExist) + ErrUserNotFound = Error(ErrGRPCUserNotFound) + ErrRoleAlreadyExist = Error(ErrGRPCRoleAlreadyExist) + ErrRoleNotFound = Error(ErrGRPCRoleNotFound) + ErrAuthFailed = Error(ErrGRPCAuthFailed) + ErrPermissionDenied = Error(ErrGRPCPermissionDenied) + ErrRoleNotGranted = Error(ErrGRPCRoleNotGranted) + ErrPermissionNotGranted = Error(ErrGRPCPermissionNotGranted) + + ErrNoLeader = Error(ErrGRPCNoLeader) + ErrNotCapable = Error(ErrGRPCNotCapable) + ErrStopped = Error(ErrGRPCStopped) +) + +// EtcdError defines gRPC server errors. +// (https://github.com/grpc/grpc-go/blob/master/rpc_util.go#L319-L323) +type EtcdError struct { + code codes.Code + desc string +} + +// Code returns grpc/codes.Code. +// TODO: define clientv3/codes.Code. +func (e EtcdError) Code() codes.Code { + return e.code +} + +func (e EtcdError) Error() string { + return e.desc +} + +func Error(err error) error { + if err == nil { + return nil + } + verr, ok := errStringToError[grpc.ErrorDesc(err)] + if !ok { // not gRPC error + return err + } + return EtcdError{code: grpc.Code(verr), desc: grpc.ErrorDesc(verr)} +} diff --git a/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go new file mode 100644 index 00000000..5c590e1a --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes/md.go @@ -0,0 +1,20 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package rpctypes + +var ( + MetadataRequireLeaderKey = "hasleader" + MetadataHasLeader = "true" +) diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go new file mode 100644 index 00000000..746e9a11 --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.pb.go @@ -0,0 +1,1041 @@ +// Code generated by protoc-gen-gogo. +// source: etcdserver.proto +// DO NOT EDIT! + +/* + Package etcdserverpb is a generated protocol buffer package. + + It is generated from these files: + etcdserver.proto + raft_internal.proto + rpc.proto + + It has these top-level messages: + Request + Metadata + RequestHeader + InternalRaftRequest + EmptyResponse + InternalAuthenticateRequest + ResponseHeader + RangeRequest + RangeResponse + PutRequest + PutResponse + DeleteRangeRequest + DeleteRangeResponse + RequestOp + ResponseOp + Compare + TxnRequest + TxnResponse + CompactionRequest + CompactionResponse + HashRequest + HashResponse + SnapshotRequest + SnapshotResponse + WatchRequest + WatchCreateRequest + WatchCancelRequest + WatchResponse + LeaseGrantRequest + LeaseGrantResponse + LeaseRevokeRequest + LeaseRevokeResponse + LeaseKeepAliveRequest + LeaseKeepAliveResponse + Member + MemberAddRequest + MemberAddResponse + MemberRemoveRequest + MemberRemoveResponse + MemberUpdateRequest + MemberUpdateResponse + MemberListRequest + MemberListResponse + DefragmentRequest + DefragmentResponse + AlarmRequest + AlarmMember + AlarmResponse + StatusRequest + StatusResponse + AuthEnableRequest + AuthDisableRequest + AuthenticateRequest + AuthUserAddRequest + AuthUserGetRequest + AuthUserDeleteRequest + AuthUserChangePasswordRequest + AuthUserGrantRoleRequest + AuthUserRevokeRoleRequest + AuthRoleAddRequest + AuthRoleGetRequest + AuthUserListRequest + AuthRoleListRequest + AuthRoleDeleteRequest + AuthRoleGrantPermissionRequest + AuthRoleRevokePermissionRequest + AuthEnableResponse + AuthDisableResponse + AuthenticateResponse + AuthUserAddResponse + AuthUserGetResponse + AuthUserDeleteResponse + AuthUserChangePasswordResponse + AuthUserGrantRoleResponse + AuthUserRevokeRoleResponse + AuthRoleAddResponse + AuthRoleGetResponse + AuthRoleListResponse + AuthUserListResponse + AuthRoleDeleteResponse + AuthRoleGrantPermissionResponse + AuthRoleRevokePermissionResponse +*/ +package etcdserverpb + +import ( + "fmt" + + proto "github.com/golang/protobuf/proto" + + math "math" +) + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.ProtoPackageIsVersion1 + +type Request struct { + ID uint64 `protobuf:"varint,1,opt,name=ID,json=iD" json:"ID"` + Method string `protobuf:"bytes,2,opt,name=Method,json=method" json:"Method"` + Path string `protobuf:"bytes,3,opt,name=Path,json=path" json:"Path"` + Val string `protobuf:"bytes,4,opt,name=Val,json=val" json:"Val"` + Dir bool `protobuf:"varint,5,opt,name=Dir,json=dir" json:"Dir"` + PrevValue string `protobuf:"bytes,6,opt,name=PrevValue,json=prevValue" json:"PrevValue"` + PrevIndex uint64 `protobuf:"varint,7,opt,name=PrevIndex,json=prevIndex" json:"PrevIndex"` + PrevExist *bool `protobuf:"varint,8,opt,name=PrevExist,json=prevExist" json:"PrevExist,omitempty"` + Expiration int64 `protobuf:"varint,9,opt,name=Expiration,json=expiration" json:"Expiration"` + Wait bool `protobuf:"varint,10,opt,name=Wait,json=wait" json:"Wait"` + Since uint64 `protobuf:"varint,11,opt,name=Since,json=since" json:"Since"` + Recursive bool `protobuf:"varint,12,opt,name=Recursive,json=recursive" json:"Recursive"` + Sorted bool `protobuf:"varint,13,opt,name=Sorted,json=sorted" json:"Sorted"` + Quorum bool `protobuf:"varint,14,opt,name=Quorum,json=quorum" json:"Quorum"` + Time int64 `protobuf:"varint,15,opt,name=Time,json=time" json:"Time"` + Stream bool `protobuf:"varint,16,opt,name=Stream,json=stream" json:"Stream"` + Refresh *bool `protobuf:"varint,17,opt,name=Refresh,json=refresh" json:"Refresh,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Request) Reset() { *m = Request{} } +func (m *Request) String() string { return proto.CompactTextString(m) } +func (*Request) ProtoMessage() {} +func (*Request) Descriptor() ([]byte, []int) { return fileDescriptorEtcdserver, []int{0} } + +type Metadata struct { + NodeID uint64 `protobuf:"varint,1,opt,name=NodeID,json=nodeID" json:"NodeID"` + ClusterID uint64 `protobuf:"varint,2,opt,name=ClusterID,json=clusterID" json:"ClusterID"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Metadata) Reset() { *m = Metadata{} } +func (m *Metadata) String() string { return proto.CompactTextString(m) } +func (*Metadata) ProtoMessage() {} +func (*Metadata) Descriptor() ([]byte, []int) { return fileDescriptorEtcdserver, []int{1} } + +func init() { + proto.RegisterType((*Request)(nil), "etcdserverpb.Request") + proto.RegisterType((*Metadata)(nil), "etcdserverpb.Metadata") +} +func (m *Request) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Request) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintEtcdserver(data, i, uint64(m.ID)) + data[i] = 0x12 + i++ + i = encodeVarintEtcdserver(data, i, uint64(len(m.Method))) + i += copy(data[i:], m.Method) + data[i] = 0x1a + i++ + i = encodeVarintEtcdserver(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + data[i] = 0x22 + i++ + i = encodeVarintEtcdserver(data, i, uint64(len(m.Val))) + i += copy(data[i:], m.Val) + data[i] = 0x28 + i++ + if m.Dir { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x32 + i++ + i = encodeVarintEtcdserver(data, i, uint64(len(m.PrevValue))) + i += copy(data[i:], m.PrevValue) + data[i] = 0x38 + i++ + i = encodeVarintEtcdserver(data, i, uint64(m.PrevIndex)) + if m.PrevExist != nil { + data[i] = 0x40 + i++ + if *m.PrevExist { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + data[i] = 0x48 + i++ + i = encodeVarintEtcdserver(data, i, uint64(m.Expiration)) + data[i] = 0x50 + i++ + if m.Wait { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x58 + i++ + i = encodeVarintEtcdserver(data, i, uint64(m.Since)) + data[i] = 0x60 + i++ + if m.Recursive { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x68 + i++ + if m.Sorted { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x70 + i++ + if m.Quorum { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x78 + i++ + i = encodeVarintEtcdserver(data, i, uint64(m.Time)) + data[i] = 0x80 + i++ + data[i] = 0x1 + i++ + if m.Stream { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + if m.Refresh != nil { + data[i] = 0x88 + i++ + data[i] = 0x1 + i++ + if *m.Refresh { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func (m *Metadata) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Metadata) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintEtcdserver(data, i, uint64(m.NodeID)) + data[i] = 0x10 + i++ + i = encodeVarintEtcdserver(data, i, uint64(m.ClusterID)) + if m.XXX_unrecognized != nil { + i += copy(data[i:], m.XXX_unrecognized) + } + return i, nil +} + +func encodeFixed64Etcdserver(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Etcdserver(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintEtcdserver(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *Request) Size() (n int) { + var l int + _ = l + n += 1 + sovEtcdserver(uint64(m.ID)) + l = len(m.Method) + n += 1 + l + sovEtcdserver(uint64(l)) + l = len(m.Path) + n += 1 + l + sovEtcdserver(uint64(l)) + l = len(m.Val) + n += 1 + l + sovEtcdserver(uint64(l)) + n += 2 + l = len(m.PrevValue) + n += 1 + l + sovEtcdserver(uint64(l)) + n += 1 + sovEtcdserver(uint64(m.PrevIndex)) + if m.PrevExist != nil { + n += 2 + } + n += 1 + sovEtcdserver(uint64(m.Expiration)) + n += 2 + n += 1 + sovEtcdserver(uint64(m.Since)) + n += 2 + n += 2 + n += 2 + n += 1 + sovEtcdserver(uint64(m.Time)) + n += 3 + if m.Refresh != nil { + n += 3 + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *Metadata) Size() (n int) { + var l int + _ = l + n += 1 + sovEtcdserver(uint64(m.NodeID)) + n += 1 + sovEtcdserver(uint64(m.ClusterID)) + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func sovEtcdserver(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozEtcdserver(x uint64) (n int) { + return sovEtcdserver(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Request) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Request: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Request: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Method", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEtcdserver + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Method = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEtcdserver + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Val", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEtcdserver + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Val = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Dir", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Dir = bool(v != 0) + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PrevValue", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEtcdserver + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PrevValue = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PrevIndex", wireType) + } + m.PrevIndex = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.PrevIndex |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PrevExist", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.PrevExist = &b + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Expiration", wireType) + } + m.Expiration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Expiration |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Wait", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Wait = bool(v != 0) + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Since", wireType) + } + m.Since = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Since |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Recursive", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Recursive = bool(v != 0) + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sorted", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Sorted = bool(v != 0) + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Quorum", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Quorum = bool(v != 0) + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) + } + m.Time = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Time |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stream", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stream = bool(v != 0) + case 17: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Refresh", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Refresh = &b + default: + iNdEx = preIndex + skippy, err := skipEtcdserver(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthEtcdserver + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Metadata) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Metadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Metadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeID", wireType) + } + m.NodeID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.NodeID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterID", wireType) + } + m.ClusterID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ClusterID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipEtcdserver(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthEtcdserver + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, data[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipEtcdserver(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthEtcdserver + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEtcdserver + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipEtcdserver(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthEtcdserver = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowEtcdserver = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorEtcdserver = []byte{ + // 404 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x5c, 0x92, 0x41, 0x6e, 0x13, 0x31, + 0x14, 0x86, 0xe3, 0xc4, 0x99, 0x64, 0x4c, 0x81, 0x62, 0x45, 0xe8, 0xa9, 0x42, 0x43, 0x14, 0xb1, + 0xc8, 0x0a, 0xee, 0x50, 0xd2, 0x45, 0x24, 0x8a, 0x4a, 0x8a, 0xca, 0xda, 0x64, 0x1e, 0x8d, 0xa5, + 0xcc, 0x78, 0x6a, 0xbf, 0x19, 0x72, 0x03, 0xae, 0xc0, 0x91, 0xb2, 0xe4, 0x04, 0x08, 0xc2, 0x45, + 0x90, 0x3d, 0x9d, 0x60, 0xba, 0xb3, 0xbe, 0xff, 0xf7, 0xef, 0xdf, 0xf6, 0x13, 0xa7, 0x48, 0xeb, + 0xdc, 0xa1, 0x6d, 0xd0, 0xbe, 0xae, 0xac, 0x21, 0x23, 0x4f, 0xfe, 0x91, 0xea, 0xf3, 0xd9, 0xe4, + 0xd6, 0xdc, 0x9a, 0x20, 0xbc, 0xf1, 0xab, 0xd6, 0x33, 0xfb, 0xc6, 0xc5, 0x68, 0x85, 0x77, 0x35, + 0x3a, 0x92, 0x13, 0xd1, 0x5f, 0x2e, 0x80, 0x4d, 0xd9, 0x9c, 0x9f, 0xf3, 0xfd, 0xcf, 0x97, 0xbd, + 0x55, 0x5f, 0x2f, 0xe4, 0x0b, 0x91, 0x5c, 0x22, 0x6d, 0x4c, 0x0e, 0xfd, 0x29, 0x9b, 0xa7, 0xf7, + 0x4a, 0x52, 0x04, 0x26, 0x41, 0xf0, 0x2b, 0x45, 0x1b, 0x18, 0x44, 0x1a, 0xaf, 0x14, 0x6d, 0xe4, + 0x73, 0x31, 0xb8, 0x51, 0x5b, 0xe0, 0x91, 0x30, 0x68, 0xd4, 0xd6, 0xf3, 0x85, 0xb6, 0x30, 0x9c, + 0xb2, 0xf9, 0xb8, 0xe3, 0xb9, 0xb6, 0x72, 0x26, 0xd2, 0x2b, 0x8b, 0xcd, 0x8d, 0xda, 0xd6, 0x08, + 0x49, 0xb4, 0x2b, 0xad, 0x3a, 0xdc, 0x79, 0x96, 0x65, 0x8e, 0x3b, 0x18, 0x45, 0x45, 0x83, 0x27, + 0xe0, 0xce, 0x73, 0xb1, 0xd3, 0x8e, 0x60, 0x7c, 0x3c, 0x85, 0xb5, 0x9e, 0x80, 0xe5, 0x2b, 0x21, + 0x2e, 0x76, 0x95, 0xb6, 0x8a, 0xb4, 0x29, 0x21, 0x9d, 0xb2, 0xf9, 0xe0, 0x3e, 0x48, 0xe0, 0x91, + 0xfb, 0xbb, 0x7d, 0x52, 0x9a, 0x40, 0x44, 0x55, 0xf9, 0x57, 0xa5, 0x49, 0x9e, 0x89, 0xe1, 0xb5, + 0x2e, 0xd7, 0x08, 0x8f, 0xa2, 0x0e, 0x43, 0xe7, 0x91, 0x3f, 0x7f, 0x85, 0xeb, 0xda, 0x3a, 0xdd, + 0x20, 0x9c, 0x44, 0x5b, 0x53, 0xdb, 0x61, 0xff, 0xa6, 0xd7, 0xc6, 0x12, 0xe6, 0xf0, 0x38, 0x32, + 0x24, 0x2e, 0x30, 0xaf, 0x7e, 0xa8, 0x8d, 0xad, 0x0b, 0x78, 0x12, 0xab, 0x77, 0x81, 0xf9, 0x56, + 0x1f, 0x75, 0x81, 0xf0, 0x34, 0x6a, 0xcd, 0x49, 0x17, 0x6d, 0x2a, 0x59, 0x54, 0x05, 0x9c, 0xfe, + 0x97, 0x1a, 0x98, 0xcc, 0xfc, 0x47, 0x7f, 0xb1, 0xe8, 0x36, 0xf0, 0x2c, 0x7a, 0x95, 0x91, 0x6d, + 0xe1, 0xec, 0x9d, 0x18, 0x5f, 0x22, 0xa9, 0x5c, 0x91, 0xf2, 0x49, 0xef, 0x4d, 0x8e, 0x0f, 0xa6, + 0x21, 0x29, 0x03, 0xf3, 0x37, 0x7c, 0xbb, 0xad, 0x1d, 0xa1, 0x5d, 0x2e, 0xc2, 0x50, 0x1c, 0x7f, + 0x61, 0xdd, 0xe1, 0xf3, 0xc9, 0xfe, 0x77, 0xd6, 0xdb, 0x1f, 0x32, 0xf6, 0xe3, 0x90, 0xb1, 0x5f, + 0x87, 0x8c, 0x7d, 0xff, 0x93, 0xf5, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0x80, 0x62, 0xfc, 0x40, + 0xa4, 0x02, 0x00, 0x00, +} diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.proto b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.proto new file mode 100644 index 00000000..25e0aca5 --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/etcdserver.proto @@ -0,0 +1,34 @@ +syntax = "proto2"; +package etcdserverpb; + +import "gogoproto/gogo.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_getters_all) = false; + +message Request { + optional uint64 ID = 1 [(gogoproto.nullable) = false]; + optional string Method = 2 [(gogoproto.nullable) = false]; + optional string Path = 3 [(gogoproto.nullable) = false]; + optional string Val = 4 [(gogoproto.nullable) = false]; + optional bool Dir = 5 [(gogoproto.nullable) = false]; + optional string PrevValue = 6 [(gogoproto.nullable) = false]; + optional uint64 PrevIndex = 7 [(gogoproto.nullable) = false]; + optional bool PrevExist = 8 [(gogoproto.nullable) = true]; + optional int64 Expiration = 9 [(gogoproto.nullable) = false]; + optional bool Wait = 10 [(gogoproto.nullable) = false]; + optional uint64 Since = 11 [(gogoproto.nullable) = false]; + optional bool Recursive = 12 [(gogoproto.nullable) = false]; + optional bool Sorted = 13 [(gogoproto.nullable) = false]; + optional bool Quorum = 14 [(gogoproto.nullable) = false]; + optional int64 Time = 15 [(gogoproto.nullable) = false]; + optional bool Stream = 16 [(gogoproto.nullable) = false]; + optional bool Refresh = 17 [(gogoproto.nullable) = true]; +} + +message Metadata { + optional uint64 NodeID = 1 [(gogoproto.nullable) = false]; + optional uint64 ClusterID = 2 [(gogoproto.nullable) = false]; +} diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go new file mode 100644 index 00000000..068aefff --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.pb.go @@ -0,0 +1,2062 @@ +// Code generated by protoc-gen-gogo. +// source: raft_internal.proto +// DO NOT EDIT! + +package etcdserverpb + +import ( + "fmt" + + proto "github.com/golang/protobuf/proto" + + math "math" +) + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type RequestHeader struct { + ID uint64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` + // username is a username that is associated with an auth token of gRPC connection + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` +} + +func (m *RequestHeader) Reset() { *m = RequestHeader{} } +func (m *RequestHeader) String() string { return proto.CompactTextString(m) } +func (*RequestHeader) ProtoMessage() {} +func (*RequestHeader) Descriptor() ([]byte, []int) { return fileDescriptorRaftInternal, []int{0} } + +// An InternalRaftRequest is the union of all requests which can be +// sent via raft. +type InternalRaftRequest struct { + Header *RequestHeader `protobuf:"bytes,100,opt,name=header" json:"header,omitempty"` + ID uint64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` + V2 *Request `protobuf:"bytes,2,opt,name=v2" json:"v2,omitempty"` + Range *RangeRequest `protobuf:"bytes,3,opt,name=range" json:"range,omitempty"` + Put *PutRequest `protobuf:"bytes,4,opt,name=put" json:"put,omitempty"` + DeleteRange *DeleteRangeRequest `protobuf:"bytes,5,opt,name=delete_range,json=deleteRange" json:"delete_range,omitempty"` + Txn *TxnRequest `protobuf:"bytes,6,opt,name=txn" json:"txn,omitempty"` + Compaction *CompactionRequest `protobuf:"bytes,7,opt,name=compaction" json:"compaction,omitempty"` + LeaseGrant *LeaseGrantRequest `protobuf:"bytes,8,opt,name=lease_grant,json=leaseGrant" json:"lease_grant,omitempty"` + LeaseRevoke *LeaseRevokeRequest `protobuf:"bytes,9,opt,name=lease_revoke,json=leaseRevoke" json:"lease_revoke,omitempty"` + Alarm *AlarmRequest `protobuf:"bytes,10,opt,name=alarm" json:"alarm,omitempty"` + AuthEnable *AuthEnableRequest `protobuf:"bytes,1000,opt,name=auth_enable,json=authEnable" json:"auth_enable,omitempty"` + AuthDisable *AuthDisableRequest `protobuf:"bytes,1011,opt,name=auth_disable,json=authDisable" json:"auth_disable,omitempty"` + Authenticate *InternalAuthenticateRequest `protobuf:"bytes,1012,opt,name=authenticate" json:"authenticate,omitempty"` + AuthUserAdd *AuthUserAddRequest `protobuf:"bytes,1100,opt,name=auth_user_add,json=authUserAdd" json:"auth_user_add,omitempty"` + AuthUserDelete *AuthUserDeleteRequest `protobuf:"bytes,1101,opt,name=auth_user_delete,json=authUserDelete" json:"auth_user_delete,omitempty"` + AuthUserGet *AuthUserGetRequest `protobuf:"bytes,1102,opt,name=auth_user_get,json=authUserGet" json:"auth_user_get,omitempty"` + AuthUserChangePassword *AuthUserChangePasswordRequest `protobuf:"bytes,1103,opt,name=auth_user_change_password,json=authUserChangePassword" json:"auth_user_change_password,omitempty"` + AuthUserGrantRole *AuthUserGrantRoleRequest `protobuf:"bytes,1104,opt,name=auth_user_grant_role,json=authUserGrantRole" json:"auth_user_grant_role,omitempty"` + AuthUserRevokeRole *AuthUserRevokeRoleRequest `protobuf:"bytes,1105,opt,name=auth_user_revoke_role,json=authUserRevokeRole" json:"auth_user_revoke_role,omitempty"` + AuthUserList *AuthUserListRequest `protobuf:"bytes,1106,opt,name=auth_user_list,json=authUserList" json:"auth_user_list,omitempty"` + AuthRoleList *AuthRoleListRequest `protobuf:"bytes,1107,opt,name=auth_role_list,json=authRoleList" json:"auth_role_list,omitempty"` + AuthRoleAdd *AuthRoleAddRequest `protobuf:"bytes,1200,opt,name=auth_role_add,json=authRoleAdd" json:"auth_role_add,omitempty"` + AuthRoleDelete *AuthRoleDeleteRequest `protobuf:"bytes,1201,opt,name=auth_role_delete,json=authRoleDelete" json:"auth_role_delete,omitempty"` + AuthRoleGet *AuthRoleGetRequest `protobuf:"bytes,1202,opt,name=auth_role_get,json=authRoleGet" json:"auth_role_get,omitempty"` + AuthRoleGrantPermission *AuthRoleGrantPermissionRequest `protobuf:"bytes,1203,opt,name=auth_role_grant_permission,json=authRoleGrantPermission" json:"auth_role_grant_permission,omitempty"` + AuthRoleRevokePermission *AuthRoleRevokePermissionRequest `protobuf:"bytes,1204,opt,name=auth_role_revoke_permission,json=authRoleRevokePermission" json:"auth_role_revoke_permission,omitempty"` +} + +func (m *InternalRaftRequest) Reset() { *m = InternalRaftRequest{} } +func (m *InternalRaftRequest) String() string { return proto.CompactTextString(m) } +func (*InternalRaftRequest) ProtoMessage() {} +func (*InternalRaftRequest) Descriptor() ([]byte, []int) { return fileDescriptorRaftInternal, []int{1} } + +type EmptyResponse struct { +} + +func (m *EmptyResponse) Reset() { *m = EmptyResponse{} } +func (m *EmptyResponse) String() string { return proto.CompactTextString(m) } +func (*EmptyResponse) ProtoMessage() {} +func (*EmptyResponse) Descriptor() ([]byte, []int) { return fileDescriptorRaftInternal, []int{2} } + +// What is the difference between AuthenticateRequest (defined in rpc.proto) and InternalAuthenticateRequest? +// InternalAuthenticateRequest has a member that is filled by etcdserver and shouldn't be user-facing. +// For avoiding misusage the field, we have an internal version of AuthenticateRequest. +type InternalAuthenticateRequest struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + // simple_token is generated in API layer (etcdserver/v3_server.go) + SimpleToken string `protobuf:"bytes,3,opt,name=simple_token,json=simpleToken,proto3" json:"simple_token,omitempty"` +} + +func (m *InternalAuthenticateRequest) Reset() { *m = InternalAuthenticateRequest{} } +func (m *InternalAuthenticateRequest) String() string { return proto.CompactTextString(m) } +func (*InternalAuthenticateRequest) ProtoMessage() {} +func (*InternalAuthenticateRequest) Descriptor() ([]byte, []int) { + return fileDescriptorRaftInternal, []int{3} +} + +func init() { + proto.RegisterType((*RequestHeader)(nil), "etcdserverpb.RequestHeader") + proto.RegisterType((*InternalRaftRequest)(nil), "etcdserverpb.InternalRaftRequest") + proto.RegisterType((*EmptyResponse)(nil), "etcdserverpb.EmptyResponse") + proto.RegisterType((*InternalAuthenticateRequest)(nil), "etcdserverpb.InternalAuthenticateRequest") +} +func (m *RequestHeader) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *RequestHeader) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.ID)) + } + if len(m.Username) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRaftInternal(data, i, uint64(len(m.Username))) + i += copy(data[i:], m.Username) + } + return i, nil +} + +func (m *InternalRaftRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *InternalRaftRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.ID)) + } + if m.V2 != nil { + data[i] = 0x12 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.V2.Size())) + n1, err := m.V2.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if m.Range != nil { + data[i] = 0x1a + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.Range.Size())) + n2, err := m.Range.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + } + if m.Put != nil { + data[i] = 0x22 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.Put.Size())) + n3, err := m.Put.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n3 + } + if m.DeleteRange != nil { + data[i] = 0x2a + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.DeleteRange.Size())) + n4, err := m.DeleteRange.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n4 + } + if m.Txn != nil { + data[i] = 0x32 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.Txn.Size())) + n5, err := m.Txn.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n5 + } + if m.Compaction != nil { + data[i] = 0x3a + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.Compaction.Size())) + n6, err := m.Compaction.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n6 + } + if m.LeaseGrant != nil { + data[i] = 0x42 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.LeaseGrant.Size())) + n7, err := m.LeaseGrant.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n7 + } + if m.LeaseRevoke != nil { + data[i] = 0x4a + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.LeaseRevoke.Size())) + n8, err := m.LeaseRevoke.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n8 + } + if m.Alarm != nil { + data[i] = 0x52 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.Alarm.Size())) + n9, err := m.Alarm.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n9 + } + if m.Header != nil { + data[i] = 0xa2 + i++ + data[i] = 0x6 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.Header.Size())) + n10, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n10 + } + if m.AuthEnable != nil { + data[i] = 0xc2 + i++ + data[i] = 0x3e + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthEnable.Size())) + n11, err := m.AuthEnable.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n11 + } + if m.AuthDisable != nil { + data[i] = 0x9a + i++ + data[i] = 0x3f + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthDisable.Size())) + n12, err := m.AuthDisable.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n12 + } + if m.Authenticate != nil { + data[i] = 0xa2 + i++ + data[i] = 0x3f + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.Authenticate.Size())) + n13, err := m.Authenticate.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n13 + } + if m.AuthUserAdd != nil { + data[i] = 0xe2 + i++ + data[i] = 0x44 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserAdd.Size())) + n14, err := m.AuthUserAdd.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n14 + } + if m.AuthUserDelete != nil { + data[i] = 0xea + i++ + data[i] = 0x44 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserDelete.Size())) + n15, err := m.AuthUserDelete.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n15 + } + if m.AuthUserGet != nil { + data[i] = 0xf2 + i++ + data[i] = 0x44 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserGet.Size())) + n16, err := m.AuthUserGet.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n16 + } + if m.AuthUserChangePassword != nil { + data[i] = 0xfa + i++ + data[i] = 0x44 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserChangePassword.Size())) + n17, err := m.AuthUserChangePassword.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n17 + } + if m.AuthUserGrantRole != nil { + data[i] = 0x82 + i++ + data[i] = 0x45 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserGrantRole.Size())) + n18, err := m.AuthUserGrantRole.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n18 + } + if m.AuthUserRevokeRole != nil { + data[i] = 0x8a + i++ + data[i] = 0x45 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserRevokeRole.Size())) + n19, err := m.AuthUserRevokeRole.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n19 + } + if m.AuthUserList != nil { + data[i] = 0x92 + i++ + data[i] = 0x45 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthUserList.Size())) + n20, err := m.AuthUserList.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n20 + } + if m.AuthRoleList != nil { + data[i] = 0x9a + i++ + data[i] = 0x45 + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthRoleList.Size())) + n21, err := m.AuthRoleList.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n21 + } + if m.AuthRoleAdd != nil { + data[i] = 0x82 + i++ + data[i] = 0x4b + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthRoleAdd.Size())) + n22, err := m.AuthRoleAdd.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n22 + } + if m.AuthRoleDelete != nil { + data[i] = 0x8a + i++ + data[i] = 0x4b + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthRoleDelete.Size())) + n23, err := m.AuthRoleDelete.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n23 + } + if m.AuthRoleGet != nil { + data[i] = 0x92 + i++ + data[i] = 0x4b + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthRoleGet.Size())) + n24, err := m.AuthRoleGet.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n24 + } + if m.AuthRoleGrantPermission != nil { + data[i] = 0x9a + i++ + data[i] = 0x4b + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthRoleGrantPermission.Size())) + n25, err := m.AuthRoleGrantPermission.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n25 + } + if m.AuthRoleRevokePermission != nil { + data[i] = 0xa2 + i++ + data[i] = 0x4b + i++ + i = encodeVarintRaftInternal(data, i, uint64(m.AuthRoleRevokePermission.Size())) + n26, err := m.AuthRoleRevokePermission.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n26 + } + return i, nil +} + +func (m *EmptyResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EmptyResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *InternalAuthenticateRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *InternalAuthenticateRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRaftInternal(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if len(m.Password) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRaftInternal(data, i, uint64(len(m.Password))) + i += copy(data[i:], m.Password) + } + if len(m.SimpleToken) > 0 { + data[i] = 0x1a + i++ + i = encodeVarintRaftInternal(data, i, uint64(len(m.SimpleToken))) + i += copy(data[i:], m.SimpleToken) + } + return i, nil +} + +func encodeFixed64RaftInternal(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32RaftInternal(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintRaftInternal(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *RequestHeader) Size() (n int) { + var l int + _ = l + if m.ID != 0 { + n += 1 + sovRaftInternal(uint64(m.ID)) + } + l = len(m.Username) + if l > 0 { + n += 1 + l + sovRaftInternal(uint64(l)) + } + return n +} + +func (m *InternalRaftRequest) Size() (n int) { + var l int + _ = l + if m.ID != 0 { + n += 1 + sovRaftInternal(uint64(m.ID)) + } + if m.V2 != nil { + l = m.V2.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.Range != nil { + l = m.Range.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.Put != nil { + l = m.Put.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.DeleteRange != nil { + l = m.DeleteRange.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.Txn != nil { + l = m.Txn.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.Compaction != nil { + l = m.Compaction.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.LeaseGrant != nil { + l = m.LeaseGrant.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.LeaseRevoke != nil { + l = m.LeaseRevoke.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.Alarm != nil { + l = m.Alarm.Size() + n += 1 + l + sovRaftInternal(uint64(l)) + } + if m.Header != nil { + l = m.Header.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthEnable != nil { + l = m.AuthEnable.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthDisable != nil { + l = m.AuthDisable.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.Authenticate != nil { + l = m.Authenticate.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthUserAdd != nil { + l = m.AuthUserAdd.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthUserDelete != nil { + l = m.AuthUserDelete.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthUserGet != nil { + l = m.AuthUserGet.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthUserChangePassword != nil { + l = m.AuthUserChangePassword.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthUserGrantRole != nil { + l = m.AuthUserGrantRole.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthUserRevokeRole != nil { + l = m.AuthUserRevokeRole.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthUserList != nil { + l = m.AuthUserList.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthRoleList != nil { + l = m.AuthRoleList.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthRoleAdd != nil { + l = m.AuthRoleAdd.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthRoleDelete != nil { + l = m.AuthRoleDelete.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthRoleGet != nil { + l = m.AuthRoleGet.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthRoleGrantPermission != nil { + l = m.AuthRoleGrantPermission.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + if m.AuthRoleRevokePermission != nil { + l = m.AuthRoleRevokePermission.Size() + n += 2 + l + sovRaftInternal(uint64(l)) + } + return n +} + +func (m *EmptyResponse) Size() (n int) { + var l int + _ = l + return n +} + +func (m *InternalAuthenticateRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRaftInternal(uint64(l)) + } + l = len(m.Password) + if l > 0 { + n += 1 + l + sovRaftInternal(uint64(l)) + } + l = len(m.SimpleToken) + if l > 0 { + n += 1 + l + sovRaftInternal(uint64(l)) + } + return n +} + +func sovRaftInternal(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozRaftInternal(x uint64) (n int) { + return sovRaftInternal(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *RequestHeader) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RequestHeader: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RequestHeader: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Username = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRaftInternal(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRaftInternal + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *InternalRaftRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: InternalRaftRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: InternalRaftRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field V2", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.V2 == nil { + m.V2 = &Request{} + } + if err := m.V2.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Range == nil { + m.Range = &RangeRequest{} + } + if err := m.Range.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Put", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Put == nil { + m.Put = &PutRequest{} + } + if err := m.Put.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeleteRange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DeleteRange == nil { + m.DeleteRange = &DeleteRangeRequest{} + } + if err := m.DeleteRange.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Txn", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Txn == nil { + m.Txn = &TxnRequest{} + } + if err := m.Txn.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Compaction", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Compaction == nil { + m.Compaction = &CompactionRequest{} + } + if err := m.Compaction.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseGrant", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LeaseGrant == nil { + m.LeaseGrant = &LeaseGrantRequest{} + } + if err := m.LeaseGrant.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LeaseRevoke", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LeaseRevoke == nil { + m.LeaseRevoke = &LeaseRevokeRequest{} + } + if err := m.LeaseRevoke.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Alarm == nil { + m.Alarm = &AlarmRequest{} + } + if err := m.Alarm.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 100: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &RequestHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1000: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthEnable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthEnable == nil { + m.AuthEnable = &AuthEnableRequest{} + } + if err := m.AuthEnable.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1011: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthDisable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthDisable == nil { + m.AuthDisable = &AuthDisableRequest{} + } + if err := m.AuthDisable.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1012: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authenticate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Authenticate == nil { + m.Authenticate = &InternalAuthenticateRequest{} + } + if err := m.Authenticate.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1100: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthUserAdd", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthUserAdd == nil { + m.AuthUserAdd = &AuthUserAddRequest{} + } + if err := m.AuthUserAdd.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1101: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthUserDelete", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthUserDelete == nil { + m.AuthUserDelete = &AuthUserDeleteRequest{} + } + if err := m.AuthUserDelete.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1102: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthUserGet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthUserGet == nil { + m.AuthUserGet = &AuthUserGetRequest{} + } + if err := m.AuthUserGet.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1103: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthUserChangePassword", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthUserChangePassword == nil { + m.AuthUserChangePassword = &AuthUserChangePasswordRequest{} + } + if err := m.AuthUserChangePassword.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1104: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthUserGrantRole", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthUserGrantRole == nil { + m.AuthUserGrantRole = &AuthUserGrantRoleRequest{} + } + if err := m.AuthUserGrantRole.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1105: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthUserRevokeRole", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthUserRevokeRole == nil { + m.AuthUserRevokeRole = &AuthUserRevokeRoleRequest{} + } + if err := m.AuthUserRevokeRole.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1106: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthUserList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthUserList == nil { + m.AuthUserList = &AuthUserListRequest{} + } + if err := m.AuthUserList.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1107: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthRoleList == nil { + m.AuthRoleList = &AuthRoleListRequest{} + } + if err := m.AuthRoleList.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1200: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleAdd", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthRoleAdd == nil { + m.AuthRoleAdd = &AuthRoleAddRequest{} + } + if err := m.AuthRoleAdd.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1201: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleDelete", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthRoleDelete == nil { + m.AuthRoleDelete = &AuthRoleDeleteRequest{} + } + if err := m.AuthRoleDelete.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1202: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleGet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthRoleGet == nil { + m.AuthRoleGet = &AuthRoleGetRequest{} + } + if err := m.AuthRoleGet.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1203: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleGrantPermission", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthRoleGrantPermission == nil { + m.AuthRoleGrantPermission = &AuthRoleGrantPermissionRequest{} + } + if err := m.AuthRoleGrantPermission.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 1204: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthRoleRevokePermission", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AuthRoleRevokePermission == nil { + m.AuthRoleRevokePermission = &AuthRoleRevokePermissionRequest{} + } + if err := m.AuthRoleRevokePermission.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRaftInternal(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRaftInternal + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EmptyResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EmptyResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EmptyResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRaftInternal(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRaftInternal + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *InternalAuthenticateRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: InternalAuthenticateRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: InternalAuthenticateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Password = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SimpleToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRaftInternal + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SimpleToken = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRaftInternal(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRaftInternal + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipRaftInternal(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthRaftInternal + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRaftInternal + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipRaftInternal(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthRaftInternal = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowRaftInternal = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorRaftInternal = []byte{ + // 824 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x96, 0xdd, 0x4e, 0xdb, 0x48, + 0x14, 0xc7, 0x49, 0xf8, 0xcc, 0x24, 0x64, 0xd9, 0x01, 0x76, 0x67, 0x83, 0x94, 0x85, 0xac, 0x76, + 0x97, 0x7e, 0xd1, 0x0a, 0x2e, 0x7b, 0xd1, 0xa6, 0x04, 0x01, 0x12, 0x42, 0xc8, 0xa2, 0x52, 0xa5, + 0x5e, 0x58, 0x43, 0x7c, 0x48, 0x5c, 0x1c, 0xdb, 0xb5, 0x27, 0x29, 0x7d, 0x93, 0x3e, 0x46, 0xbf, + 0x1e, 0x82, 0x8b, 0x7e, 0xd0, 0xf6, 0x05, 0x5a, 0x7a, 0xd3, 0xab, 0xde, 0xb4, 0x0f, 0x50, 0xcd, + 0x87, 0xc7, 0x71, 0x32, 0xe1, 0xce, 0x3e, 0xe7, 0x7f, 0x7e, 0xe7, 0x4c, 0xe6, 0x3f, 0x9e, 0xa0, + 0xf9, 0x88, 0x1e, 0x33, 0xdb, 0xf5, 0x19, 0x44, 0x3e, 0xf5, 0xd6, 0xc2, 0x28, 0x60, 0x01, 0x2e, + 0x01, 0x6b, 0x3a, 0x31, 0x44, 0x3d, 0x88, 0xc2, 0xa3, 0xca, 0x42, 0x2b, 0x68, 0x05, 0x22, 0x71, + 0x93, 0x3f, 0x49, 0x4d, 0x65, 0x2e, 0xd5, 0xa8, 0x48, 0x21, 0x0a, 0x9b, 0xf2, 0xb1, 0x76, 0x1b, + 0xcd, 0x5a, 0xf0, 0xb8, 0x0b, 0x31, 0xdb, 0x01, 0xea, 0x40, 0x84, 0xcb, 0x28, 0xbf, 0xdb, 0x20, + 0xb9, 0xe5, 0xdc, 0xea, 0x84, 0x95, 0x77, 0x1b, 0xb8, 0x82, 0x66, 0xba, 0x31, 0x6f, 0xd9, 0x01, + 0x92, 0x5f, 0xce, 0xad, 0x16, 0x2c, 0xfd, 0x5e, 0xfb, 0x5e, 0x46, 0xf3, 0xbb, 0x6a, 0x20, 0x8b, + 0x1e, 0x33, 0x45, 0x1a, 0x62, 0xfc, 0x8b, 0xf2, 0xbd, 0x75, 0x51, 0x5d, 0x5c, 0x5f, 0x5c, 0xeb, + 0x1f, 0x79, 0x4d, 0x95, 0x58, 0xf9, 0xde, 0x3a, 0xbe, 0x85, 0x26, 0x23, 0xea, 0xb7, 0x80, 0x8c, + 0x0b, 0x65, 0x65, 0x40, 0xc9, 0x53, 0x89, 0x5c, 0x0a, 0xf1, 0x55, 0x34, 0x1e, 0x76, 0x19, 0x99, + 0x10, 0x7a, 0x92, 0xd5, 0x1f, 0x74, 0x93, 0x79, 0x2c, 0x2e, 0xc2, 0x9b, 0xa8, 0xe4, 0x80, 0x07, + 0x0c, 0x6c, 0xd9, 0x64, 0x52, 0x14, 0x2d, 0x67, 0x8b, 0x1a, 0x42, 0x91, 0x69, 0x55, 0x74, 0xd2, + 0x18, 0x6f, 0xc8, 0x4e, 0x7d, 0x32, 0x65, 0x6a, 0x78, 0x78, 0xea, 0xeb, 0x86, 0xec, 0xd4, 0xc7, + 0x77, 0x10, 0x6a, 0x06, 0x9d, 0x90, 0x36, 0x99, 0x1b, 0xf8, 0x64, 0x5a, 0x94, 0xfc, 0x9d, 0x2d, + 0xd9, 0xd4, 0xf9, 0xa4, 0xb2, 0xaf, 0x04, 0xdf, 0x45, 0x45, 0x0f, 0x68, 0x0c, 0x76, 0x2b, 0xa2, + 0x3e, 0x23, 0x33, 0x26, 0xc2, 0x1e, 0x17, 0x6c, 0xf3, 0xbc, 0x26, 0x78, 0x3a, 0xc4, 0xd7, 0x2c, + 0x09, 0x11, 0xf4, 0x82, 0x13, 0x20, 0x05, 0xd3, 0x9a, 0x05, 0xc2, 0x12, 0x02, 0xbd, 0x66, 0x2f, + 0x8d, 0xf1, 0x6d, 0xa1, 0x1e, 0x8d, 0x3a, 0x04, 0x99, 0xb6, 0xa5, 0xce, 0x53, 0x7a, 0x5b, 0x84, + 0x10, 0x6f, 0xa0, 0xa9, 0xb6, 0x70, 0x13, 0x71, 0x44, 0xc9, 0x92, 0x71, 0xcf, 0xa5, 0xe1, 0x2c, + 0x25, 0xc5, 0x75, 0x54, 0xa4, 0x5d, 0xd6, 0xb6, 0xc1, 0xa7, 0x47, 0x1e, 0x90, 0x6f, 0xc6, 0x1f, + 0xac, 0xde, 0x65, 0xed, 0x2d, 0x21, 0xd0, 0xcb, 0xa5, 0x3a, 0x84, 0x1b, 0xa8, 0x24, 0x10, 0x8e, + 0x1b, 0x0b, 0xc6, 0x8f, 0x69, 0xd3, 0x7a, 0x39, 0xa3, 0x21, 0x15, 0x7a, 0xbd, 0x34, 0x8d, 0xe1, + 0x7d, 0x49, 0x01, 0x9f, 0xb9, 0x4d, 0xca, 0x80, 0xfc, 0x94, 0x94, 0x2b, 0x59, 0x4a, 0xe2, 0xfb, + 0x7a, 0x9f, 0x34, 0xc1, 0x65, 0xea, 0xf1, 0x16, 0x9a, 0x15, 0x53, 0xf1, 0x63, 0x63, 0x53, 0xc7, + 0x21, 0x6f, 0x66, 0x46, 0x8d, 0x75, 0x3f, 0x86, 0xa8, 0xee, 0x38, 0x99, 0xb1, 0x54, 0x0c, 0xef, + 0xa3, 0xb9, 0x14, 0x23, 0x3d, 0x49, 0xde, 0x4a, 0xd2, 0x3f, 0x66, 0x92, 0x32, 0xb3, 0x82, 0x95, + 0x69, 0x26, 0x9c, 0x1d, 0xab, 0x05, 0x8c, 0xbc, 0xbb, 0x74, 0xac, 0x6d, 0x60, 0x43, 0x63, 0x6d, + 0x03, 0xc3, 0x2d, 0xf4, 0x57, 0x8a, 0x69, 0xb6, 0xf9, 0x29, 0xb1, 0x43, 0x1a, 0xc7, 0x4f, 0x82, + 0xc8, 0x21, 0xef, 0x25, 0xf2, 0x9a, 0x19, 0xb9, 0x29, 0xd4, 0x07, 0x4a, 0x9c, 0xd0, 0xff, 0xa0, + 0xc6, 0x34, 0x7e, 0x80, 0x16, 0xfa, 0xe6, 0xe5, 0xf6, 0xb6, 0xa3, 0xc0, 0x03, 0x72, 0x2e, 0x7b, + 0xfc, 0x37, 0x62, 0x6c, 0x71, 0x34, 0x82, 0x74, 0xab, 0x7f, 0xa7, 0x83, 0x19, 0xfc, 0x10, 0x2d, + 0xa6, 0x64, 0x79, 0x52, 0x24, 0xfa, 0x83, 0x44, 0xff, 0x6f, 0x46, 0xab, 0x23, 0xd3, 0xc7, 0xc6, + 0x74, 0x28, 0x85, 0x77, 0x50, 0x39, 0x85, 0x7b, 0x6e, 0xcc, 0xc8, 0x47, 0x49, 0x5d, 0x31, 0x53, + 0xf7, 0xdc, 0x98, 0x65, 0x7c, 0x94, 0x04, 0x35, 0x89, 0x8f, 0x26, 0x49, 0x9f, 0x46, 0x92, 0x78, + 0xeb, 0x21, 0x52, 0x12, 0xd4, 0x5b, 0x2f, 0x48, 0xdc, 0x91, 0xcf, 0x0b, 0xa3, 0xb6, 0x9e, 0xd7, + 0x0c, 0x3a, 0x52, 0xc5, 0xb4, 0x23, 0x05, 0x46, 0x39, 0xf2, 0x45, 0x61, 0x94, 0x23, 0x79, 0x95, + 0xc1, 0x91, 0x69, 0x38, 0x3b, 0x16, 0x77, 0xe4, 0xcb, 0x4b, 0xc7, 0x1a, 0x74, 0xa4, 0x8a, 0xe1, + 0x47, 0xa8, 0xd2, 0x87, 0x11, 0x46, 0x09, 0x21, 0xea, 0xb8, 0x71, 0xcc, 0xbf, 0xc3, 0xaf, 0x24, + 0xf3, 0xfa, 0x08, 0x26, 0x97, 0x1f, 0x68, 0x75, 0xc2, 0xff, 0x93, 0x9a, 0xf3, 0xb8, 0x83, 0x96, + 0xd2, 0x5e, 0xca, 0x3a, 0x7d, 0xcd, 0x5e, 0xcb, 0x66, 0x37, 0xcc, 0xcd, 0xa4, 0x4b, 0x86, 0xbb, + 0x11, 0x3a, 0x42, 0x50, 0xfb, 0x0d, 0xcd, 0x6e, 0x75, 0x42, 0xf6, 0xd4, 0x82, 0x38, 0x0c, 0xfc, + 0x18, 0x6a, 0x21, 0x5a, 0xba, 0xe4, 0x43, 0x84, 0x31, 0x9a, 0x10, 0x17, 0x77, 0x4e, 0x5c, 0xdc, + 0xe2, 0x99, 0x5f, 0xe8, 0xfa, 0x7c, 0xaa, 0x0b, 0x3d, 0x79, 0xc7, 0x2b, 0xa8, 0x14, 0xbb, 0x9d, + 0xd0, 0x03, 0x9b, 0x05, 0x27, 0xe0, 0x8b, 0x8b, 0xb8, 0x60, 0x15, 0x65, 0xec, 0x90, 0x87, 0xee, + 0x2d, 0x9c, 0x7d, 0xa9, 0x8e, 0x9d, 0x5d, 0x54, 0x73, 0xe7, 0x17, 0xd5, 0xdc, 0xe7, 0x8b, 0x6a, + 0xee, 0xd9, 0xd7, 0xea, 0xd8, 0xd1, 0x94, 0xf8, 0x37, 0xb1, 0xf1, 0x2b, 0x00, 0x00, 0xff, 0xff, + 0x54, 0x8c, 0x4a, 0x7f, 0xa5, 0x08, 0x00, 0x00, +} diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.proto b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.proto new file mode 100644 index 00000000..3ad0d1b3 --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/raft_internal.proto @@ -0,0 +1,72 @@ +syntax = "proto3"; +package etcdserverpb; + +import "gogoproto/gogo.proto"; +import "etcdserver.proto"; +import "rpc.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_getters_all) = false; + +message RequestHeader { + uint64 ID = 1; + // username is a username that is associated with an auth token of gRPC connection + string username = 2; +} + +// An InternalRaftRequest is the union of all requests which can be +// sent via raft. +message InternalRaftRequest { + RequestHeader header = 100; + uint64 ID = 1; + + Request v2 = 2; + + RangeRequest range = 3; + PutRequest put = 4; + DeleteRangeRequest delete_range = 5; + TxnRequest txn = 6; + CompactionRequest compaction = 7; + + LeaseGrantRequest lease_grant = 8; + LeaseRevokeRequest lease_revoke = 9; + + AlarmRequest alarm = 10; + + AuthEnableRequest auth_enable = 1000; + AuthDisableRequest auth_disable = 1011; + + InternalAuthenticateRequest authenticate = 1012; + + AuthUserAddRequest auth_user_add = 1100; + AuthUserDeleteRequest auth_user_delete = 1101; + AuthUserGetRequest auth_user_get = 1102; + AuthUserChangePasswordRequest auth_user_change_password = 1103; + AuthUserGrantRoleRequest auth_user_grant_role = 1104; + AuthUserRevokeRoleRequest auth_user_revoke_role = 1105; + AuthUserListRequest auth_user_list = 1106; + AuthRoleListRequest auth_role_list = 1107; + + AuthRoleAddRequest auth_role_add = 1200; + AuthRoleDeleteRequest auth_role_delete = 1201; + AuthRoleGetRequest auth_role_get = 1202; + AuthRoleGrantPermissionRequest auth_role_grant_permission = 1203; + AuthRoleRevokePermissionRequest auth_role_revoke_permission = 1204; +} + +message EmptyResponse { +} + +// What is the difference between AuthenticateRequest (defined in rpc.proto) and InternalAuthenticateRequest? +// InternalAuthenticateRequest has a member that is filled by etcdserver and shouldn't be user-facing. +// For avoiding misusage the field, we have an internal version of AuthenticateRequest. +message InternalAuthenticateRequest { + string name = 1; + string password = 2; + + // simple_token is generated in API layer (etcdserver/v3_server.go) + string simple_token = 3; +} + diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go new file mode 100644 index 00000000..213d5442 --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.go @@ -0,0 +1,15327 @@ +// Code generated by protoc-gen-gogo. +// source: rpc.proto +// DO NOT EDIT! + +package etcdserverpb + +import ( + "fmt" + + proto "github.com/golang/protobuf/proto" + + math "math" + + authpb "github.com/coreos/etcd/auth/authpb" + + io "io" +) + +import mvccpb "github.com/coreos/etcd/mvcc/mvccpb" + +import ( + context "golang.org/x/net/context" + grpc "google.golang.org/grpc" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type AlarmType int32 + +const ( + AlarmType_NONE AlarmType = 0 + AlarmType_NOSPACE AlarmType = 1 +) + +var AlarmType_name = map[int32]string{ + 0: "NONE", + 1: "NOSPACE", +} +var AlarmType_value = map[string]int32{ + "NONE": 0, + "NOSPACE": 1, +} + +func (x AlarmType) String() string { + return proto.EnumName(AlarmType_name, int32(x)) +} +func (AlarmType) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{0} } + +type RangeRequest_SortOrder int32 + +const ( + RangeRequest_NONE RangeRequest_SortOrder = 0 + RangeRequest_ASCEND RangeRequest_SortOrder = 1 + RangeRequest_DESCEND RangeRequest_SortOrder = 2 +) + +var RangeRequest_SortOrder_name = map[int32]string{ + 0: "NONE", + 1: "ASCEND", + 2: "DESCEND", +} +var RangeRequest_SortOrder_value = map[string]int32{ + "NONE": 0, + "ASCEND": 1, + "DESCEND": 2, +} + +func (x RangeRequest_SortOrder) String() string { + return proto.EnumName(RangeRequest_SortOrder_name, int32(x)) +} +func (RangeRequest_SortOrder) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1, 0} } + +type RangeRequest_SortTarget int32 + +const ( + RangeRequest_KEY RangeRequest_SortTarget = 0 + RangeRequest_VERSION RangeRequest_SortTarget = 1 + RangeRequest_CREATE RangeRequest_SortTarget = 2 + RangeRequest_MOD RangeRequest_SortTarget = 3 + RangeRequest_VALUE RangeRequest_SortTarget = 4 +) + +var RangeRequest_SortTarget_name = map[int32]string{ + 0: "KEY", + 1: "VERSION", + 2: "CREATE", + 3: "MOD", + 4: "VALUE", +} +var RangeRequest_SortTarget_value = map[string]int32{ + "KEY": 0, + "VERSION": 1, + "CREATE": 2, + "MOD": 3, + "VALUE": 4, +} + +func (x RangeRequest_SortTarget) String() string { + return proto.EnumName(RangeRequest_SortTarget_name, int32(x)) +} +func (RangeRequest_SortTarget) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1, 1} } + +type Compare_CompareResult int32 + +const ( + Compare_EQUAL Compare_CompareResult = 0 + Compare_GREATER Compare_CompareResult = 1 + Compare_LESS Compare_CompareResult = 2 +) + +var Compare_CompareResult_name = map[int32]string{ + 0: "EQUAL", + 1: "GREATER", + 2: "LESS", +} +var Compare_CompareResult_value = map[string]int32{ + "EQUAL": 0, + "GREATER": 1, + "LESS": 2, +} + +func (x Compare_CompareResult) String() string { + return proto.EnumName(Compare_CompareResult_name, int32(x)) +} +func (Compare_CompareResult) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{9, 0} } + +type Compare_CompareTarget int32 + +const ( + Compare_VERSION Compare_CompareTarget = 0 + Compare_CREATE Compare_CompareTarget = 1 + Compare_MOD Compare_CompareTarget = 2 + Compare_VALUE Compare_CompareTarget = 3 +) + +var Compare_CompareTarget_name = map[int32]string{ + 0: "VERSION", + 1: "CREATE", + 2: "MOD", + 3: "VALUE", +} +var Compare_CompareTarget_value = map[string]int32{ + "VERSION": 0, + "CREATE": 1, + "MOD": 2, + "VALUE": 3, +} + +func (x Compare_CompareTarget) String() string { + return proto.EnumName(Compare_CompareTarget_name, int32(x)) +} +func (Compare_CompareTarget) EnumDescriptor() ([]byte, []int) { return fileDescriptorRpc, []int{9, 1} } + +type AlarmRequest_AlarmAction int32 + +const ( + AlarmRequest_GET AlarmRequest_AlarmAction = 0 + AlarmRequest_ACTIVATE AlarmRequest_AlarmAction = 1 + AlarmRequest_DEACTIVATE AlarmRequest_AlarmAction = 2 +) + +var AlarmRequest_AlarmAction_name = map[int32]string{ + 0: "GET", + 1: "ACTIVATE", + 2: "DEACTIVATE", +} +var AlarmRequest_AlarmAction_value = map[string]int32{ + "GET": 0, + "ACTIVATE": 1, + "DEACTIVATE": 2, +} + +func (x AlarmRequest_AlarmAction) String() string { + return proto.EnumName(AlarmRequest_AlarmAction_name, int32(x)) +} +func (AlarmRequest_AlarmAction) EnumDescriptor() ([]byte, []int) { + return fileDescriptorRpc, []int{39, 0} +} + +type ResponseHeader struct { + // cluster_id is the ID of the cluster which sent the response. + ClusterId uint64 `protobuf:"varint,1,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` + // member_id is the ID of the member which sent the response. + MemberId uint64 `protobuf:"varint,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // revision is the key-value store revision when the request was applied. + Revision int64 `protobuf:"varint,3,opt,name=revision,proto3" json:"revision,omitempty"` + // raft_term is the raft term when the request was applied. + RaftTerm uint64 `protobuf:"varint,4,opt,name=raft_term,json=raftTerm,proto3" json:"raft_term,omitempty"` +} + +func (m *ResponseHeader) Reset() { *m = ResponseHeader{} } +func (m *ResponseHeader) String() string { return proto.CompactTextString(m) } +func (*ResponseHeader) ProtoMessage() {} +func (*ResponseHeader) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{0} } + +type RangeRequest struct { + // key is the first key for the range. If range_end is not given, the request only looks up key. + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // range_end is the upper bound on the requested range [key, range_end). + // If range_end is '\0', the range is all keys >= key. + // If the range_end is one bit larger than the given key, + // then the range requests get the all keys with the prefix (the given key). + // If both key and range_end are '\0', then range requests returns all keys. + RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` + // limit is a limit on the number of keys returned for the request. + Limit int64 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` + // revision is the point-in-time of the key-value store to use for the range. + // If revision is less or equal to zero, the range is over the newest key-value store. + // If the revision has been compacted, ErrCompacted is returned as a response. + Revision int64 `protobuf:"varint,4,opt,name=revision,proto3" json:"revision,omitempty"` + // sort_order is the order for returned sorted results. + SortOrder RangeRequest_SortOrder `protobuf:"varint,5,opt,name=sort_order,json=sortOrder,proto3,enum=etcdserverpb.RangeRequest_SortOrder" json:"sort_order,omitempty"` + // sort_target is the key-value field to use for sorting. + SortTarget RangeRequest_SortTarget `protobuf:"varint,6,opt,name=sort_target,json=sortTarget,proto3,enum=etcdserverpb.RangeRequest_SortTarget" json:"sort_target,omitempty"` + // serializable sets the range request to use serializable member-local reads. + // Range requests are linearizable by default; linearizable requests have higher + // latency and lower throughput than serializable requests but reflect the current + // consensus of the cluster. For better performance, in exchange for possible stale reads, + // a serializable range request is served locally without needing to reach consensus + // with other nodes in the cluster. + Serializable bool `protobuf:"varint,7,opt,name=serializable,proto3" json:"serializable,omitempty"` + // keys_only when set returns only the keys and not the values. + KeysOnly bool `protobuf:"varint,8,opt,name=keys_only,json=keysOnly,proto3" json:"keys_only,omitempty"` + // count_only when set returns only the count of the keys in the range. + CountOnly bool `protobuf:"varint,9,opt,name=count_only,json=countOnly,proto3" json:"count_only,omitempty"` +} + +func (m *RangeRequest) Reset() { *m = RangeRequest{} } +func (m *RangeRequest) String() string { return proto.CompactTextString(m) } +func (*RangeRequest) ProtoMessage() {} +func (*RangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{1} } + +type RangeResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // kvs is the list of key-value pairs matched by the range request. + // kvs is empty when count is requested. + Kvs []*mvccpb.KeyValue `protobuf:"bytes,2,rep,name=kvs" json:"kvs,omitempty"` + // more indicates if there are more keys to return in the requested range. + More bool `protobuf:"varint,3,opt,name=more,proto3" json:"more,omitempty"` + // count is set to the number of keys within the range when requested. + Count int64 `protobuf:"varint,4,opt,name=count,proto3" json:"count,omitempty"` +} + +func (m *RangeResponse) Reset() { *m = RangeResponse{} } +func (m *RangeResponse) String() string { return proto.CompactTextString(m) } +func (*RangeResponse) ProtoMessage() {} +func (*RangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{2} } + +func (m *RangeResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *RangeResponse) GetKvs() []*mvccpb.KeyValue { + if m != nil { + return m.Kvs + } + return nil +} + +type PutRequest struct { + // key is the key, in bytes, to put into the key-value store. + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // value is the value, in bytes, to associate with the key in the key-value store. + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // lease is the lease ID to associate with the key in the key-value store. A lease + // value of 0 indicates no lease. + Lease int64 `protobuf:"varint,3,opt,name=lease,proto3" json:"lease,omitempty"` +} + +func (m *PutRequest) Reset() { *m = PutRequest{} } +func (m *PutRequest) String() string { return proto.CompactTextString(m) } +func (*PutRequest) ProtoMessage() {} +func (*PutRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{3} } + +type PutResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *PutResponse) Reset() { *m = PutResponse{} } +func (m *PutResponse) String() string { return proto.CompactTextString(m) } +func (*PutResponse) ProtoMessage() {} +func (*PutResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{4} } + +func (m *PutResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type DeleteRangeRequest struct { + // key is the first key to delete in the range. + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // range_end is the key following the last key to delete for the range [key, range_end). + // If range_end is not given, the range is defined to contain only the key argument. + // If range_end is '\0', the range is all keys greater than or equal to the key argument. + RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` +} + +func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } +func (m *DeleteRangeRequest) String() string { return proto.CompactTextString(m) } +func (*DeleteRangeRequest) ProtoMessage() {} +func (*DeleteRangeRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{5} } + +type DeleteRangeResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // deleted is the number of keys deleted by the delete range request. + Deleted int64 `protobuf:"varint,2,opt,name=deleted,proto3" json:"deleted,omitempty"` +} + +func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } +func (m *DeleteRangeResponse) String() string { return proto.CompactTextString(m) } +func (*DeleteRangeResponse) ProtoMessage() {} +func (*DeleteRangeResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{6} } + +func (m *DeleteRangeResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type RequestOp struct { + // request is a union of request types accepted by a transaction. + // + // Types that are valid to be assigned to Request: + // *RequestOp_RequestRange + // *RequestOp_RequestPut + // *RequestOp_RequestDeleteRange + Request isRequestOp_Request `protobuf_oneof:"request"` +} + +func (m *RequestOp) Reset() { *m = RequestOp{} } +func (m *RequestOp) String() string { return proto.CompactTextString(m) } +func (*RequestOp) ProtoMessage() {} +func (*RequestOp) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{7} } + +type isRequestOp_Request interface { + isRequestOp_Request() + MarshalTo([]byte) (int, error) + Size() int +} + +type RequestOp_RequestRange struct { + RequestRange *RangeRequest `protobuf:"bytes,1,opt,name=request_range,json=requestRange,oneof"` +} +type RequestOp_RequestPut struct { + RequestPut *PutRequest `protobuf:"bytes,2,opt,name=request_put,json=requestPut,oneof"` +} +type RequestOp_RequestDeleteRange struct { + RequestDeleteRange *DeleteRangeRequest `protobuf:"bytes,3,opt,name=request_delete_range,json=requestDeleteRange,oneof"` +} + +func (*RequestOp_RequestRange) isRequestOp_Request() {} +func (*RequestOp_RequestPut) isRequestOp_Request() {} +func (*RequestOp_RequestDeleteRange) isRequestOp_Request() {} + +func (m *RequestOp) GetRequest() isRequestOp_Request { + if m != nil { + return m.Request + } + return nil +} + +func (m *RequestOp) GetRequestRange() *RangeRequest { + if x, ok := m.GetRequest().(*RequestOp_RequestRange); ok { + return x.RequestRange + } + return nil +} + +func (m *RequestOp) GetRequestPut() *PutRequest { + if x, ok := m.GetRequest().(*RequestOp_RequestPut); ok { + return x.RequestPut + } + return nil +} + +func (m *RequestOp) GetRequestDeleteRange() *DeleteRangeRequest { + if x, ok := m.GetRequest().(*RequestOp_RequestDeleteRange); ok { + return x.RequestDeleteRange + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*RequestOp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _RequestOp_OneofMarshaler, _RequestOp_OneofUnmarshaler, _RequestOp_OneofSizer, []interface{}{ + (*RequestOp_RequestRange)(nil), + (*RequestOp_RequestPut)(nil), + (*RequestOp_RequestDeleteRange)(nil), + } +} + +func _RequestOp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*RequestOp) + // request + switch x := m.Request.(type) { + case *RequestOp_RequestRange: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RequestRange); err != nil { + return err + } + case *RequestOp_RequestPut: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RequestPut); err != nil { + return err + } + case *RequestOp_RequestDeleteRange: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.RequestDeleteRange); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("RequestOp.Request has unexpected type %T", x) + } + return nil +} + +func _RequestOp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*RequestOp) + switch tag { + case 1: // request.request_range + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RangeRequest) + err := b.DecodeMessage(msg) + m.Request = &RequestOp_RequestRange{msg} + return true, err + case 2: // request.request_put + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PutRequest) + err := b.DecodeMessage(msg) + m.Request = &RequestOp_RequestPut{msg} + return true, err + case 3: // request.request_delete_range + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DeleteRangeRequest) + err := b.DecodeMessage(msg) + m.Request = &RequestOp_RequestDeleteRange{msg} + return true, err + default: + return false, nil + } +} + +func _RequestOp_OneofSizer(msg proto.Message) (n int) { + m := msg.(*RequestOp) + // request + switch x := m.Request.(type) { + case *RequestOp_RequestRange: + s := proto.Size(x.RequestRange) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RequestOp_RequestPut: + s := proto.Size(x.RequestPut) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *RequestOp_RequestDeleteRange: + s := proto.Size(x.RequestDeleteRange) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type ResponseOp struct { + // response is a union of response types returned by a transaction. + // + // Types that are valid to be assigned to Response: + // *ResponseOp_ResponseRange + // *ResponseOp_ResponsePut + // *ResponseOp_ResponseDeleteRange + Response isResponseOp_Response `protobuf_oneof:"response"` +} + +func (m *ResponseOp) Reset() { *m = ResponseOp{} } +func (m *ResponseOp) String() string { return proto.CompactTextString(m) } +func (*ResponseOp) ProtoMessage() {} +func (*ResponseOp) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{8} } + +type isResponseOp_Response interface { + isResponseOp_Response() + MarshalTo([]byte) (int, error) + Size() int +} + +type ResponseOp_ResponseRange struct { + ResponseRange *RangeResponse `protobuf:"bytes,1,opt,name=response_range,json=responseRange,oneof"` +} +type ResponseOp_ResponsePut struct { + ResponsePut *PutResponse `protobuf:"bytes,2,opt,name=response_put,json=responsePut,oneof"` +} +type ResponseOp_ResponseDeleteRange struct { + ResponseDeleteRange *DeleteRangeResponse `protobuf:"bytes,3,opt,name=response_delete_range,json=responseDeleteRange,oneof"` +} + +func (*ResponseOp_ResponseRange) isResponseOp_Response() {} +func (*ResponseOp_ResponsePut) isResponseOp_Response() {} +func (*ResponseOp_ResponseDeleteRange) isResponseOp_Response() {} + +func (m *ResponseOp) GetResponse() isResponseOp_Response { + if m != nil { + return m.Response + } + return nil +} + +func (m *ResponseOp) GetResponseRange() *RangeResponse { + if x, ok := m.GetResponse().(*ResponseOp_ResponseRange); ok { + return x.ResponseRange + } + return nil +} + +func (m *ResponseOp) GetResponsePut() *PutResponse { + if x, ok := m.GetResponse().(*ResponseOp_ResponsePut); ok { + return x.ResponsePut + } + return nil +} + +func (m *ResponseOp) GetResponseDeleteRange() *DeleteRangeResponse { + if x, ok := m.GetResponse().(*ResponseOp_ResponseDeleteRange); ok { + return x.ResponseDeleteRange + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ResponseOp) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _ResponseOp_OneofMarshaler, _ResponseOp_OneofUnmarshaler, _ResponseOp_OneofSizer, []interface{}{ + (*ResponseOp_ResponseRange)(nil), + (*ResponseOp_ResponsePut)(nil), + (*ResponseOp_ResponseDeleteRange)(nil), + } +} + +func _ResponseOp_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ResponseOp) + // response + switch x := m.Response.(type) { + case *ResponseOp_ResponseRange: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ResponseRange); err != nil { + return err + } + case *ResponseOp_ResponsePut: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ResponsePut); err != nil { + return err + } + case *ResponseOp_ResponseDeleteRange: + _ = b.EncodeVarint(3<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ResponseDeleteRange); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("ResponseOp.Response has unexpected type %T", x) + } + return nil +} + +func _ResponseOp_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ResponseOp) + switch tag { + case 1: // response.response_range + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(RangeResponse) + err := b.DecodeMessage(msg) + m.Response = &ResponseOp_ResponseRange{msg} + return true, err + case 2: // response.response_put + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(PutResponse) + err := b.DecodeMessage(msg) + m.Response = &ResponseOp_ResponsePut{msg} + return true, err + case 3: // response.response_delete_range + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(DeleteRangeResponse) + err := b.DecodeMessage(msg) + m.Response = &ResponseOp_ResponseDeleteRange{msg} + return true, err + default: + return false, nil + } +} + +func _ResponseOp_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ResponseOp) + // response + switch x := m.Response.(type) { + case *ResponseOp_ResponseRange: + s := proto.Size(x.ResponseRange) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ResponseOp_ResponsePut: + s := proto.Size(x.ResponsePut) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *ResponseOp_ResponseDeleteRange: + s := proto.Size(x.ResponseDeleteRange) + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type Compare struct { + // result is logical comparison operation for this comparison. + Result Compare_CompareResult `protobuf:"varint,1,opt,name=result,proto3,enum=etcdserverpb.Compare_CompareResult" json:"result,omitempty"` + // target is the key-value field to inspect for the comparison. + Target Compare_CompareTarget `protobuf:"varint,2,opt,name=target,proto3,enum=etcdserverpb.Compare_CompareTarget" json:"target,omitempty"` + // key is the subject key for the comparison operation. + Key []byte `protobuf:"bytes,3,opt,name=key,proto3" json:"key,omitempty"` + // Types that are valid to be assigned to TargetUnion: + // *Compare_Version + // *Compare_CreateRevision + // *Compare_ModRevision + // *Compare_Value + TargetUnion isCompare_TargetUnion `protobuf_oneof:"target_union"` +} + +func (m *Compare) Reset() { *m = Compare{} } +func (m *Compare) String() string { return proto.CompactTextString(m) } +func (*Compare) ProtoMessage() {} +func (*Compare) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{9} } + +type isCompare_TargetUnion interface { + isCompare_TargetUnion() + MarshalTo([]byte) (int, error) + Size() int +} + +type Compare_Version struct { + Version int64 `protobuf:"varint,4,opt,name=version,proto3,oneof"` +} +type Compare_CreateRevision struct { + CreateRevision int64 `protobuf:"varint,5,opt,name=create_revision,json=createRevision,proto3,oneof"` +} +type Compare_ModRevision struct { + ModRevision int64 `protobuf:"varint,6,opt,name=mod_revision,json=modRevision,proto3,oneof"` +} +type Compare_Value struct { + Value []byte `protobuf:"bytes,7,opt,name=value,proto3,oneof"` +} + +func (*Compare_Version) isCompare_TargetUnion() {} +func (*Compare_CreateRevision) isCompare_TargetUnion() {} +func (*Compare_ModRevision) isCompare_TargetUnion() {} +func (*Compare_Value) isCompare_TargetUnion() {} + +func (m *Compare) GetTargetUnion() isCompare_TargetUnion { + if m != nil { + return m.TargetUnion + } + return nil +} + +func (m *Compare) GetVersion() int64 { + if x, ok := m.GetTargetUnion().(*Compare_Version); ok { + return x.Version + } + return 0 +} + +func (m *Compare) GetCreateRevision() int64 { + if x, ok := m.GetTargetUnion().(*Compare_CreateRevision); ok { + return x.CreateRevision + } + return 0 +} + +func (m *Compare) GetModRevision() int64 { + if x, ok := m.GetTargetUnion().(*Compare_ModRevision); ok { + return x.ModRevision + } + return 0 +} + +func (m *Compare) GetValue() []byte { + if x, ok := m.GetTargetUnion().(*Compare_Value); ok { + return x.Value + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Compare) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Compare_OneofMarshaler, _Compare_OneofUnmarshaler, _Compare_OneofSizer, []interface{}{ + (*Compare_Version)(nil), + (*Compare_CreateRevision)(nil), + (*Compare_ModRevision)(nil), + (*Compare_Value)(nil), + } +} + +func _Compare_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Compare) + // target_union + switch x := m.TargetUnion.(type) { + case *Compare_Version: + _ = b.EncodeVarint(4<<3 | proto.WireVarint) + _ = b.EncodeVarint(uint64(x.Version)) + case *Compare_CreateRevision: + _ = b.EncodeVarint(5<<3 | proto.WireVarint) + _ = b.EncodeVarint(uint64(x.CreateRevision)) + case *Compare_ModRevision: + _ = b.EncodeVarint(6<<3 | proto.WireVarint) + _ = b.EncodeVarint(uint64(x.ModRevision)) + case *Compare_Value: + _ = b.EncodeVarint(7<<3 | proto.WireBytes) + _ = b.EncodeRawBytes(x.Value) + case nil: + default: + return fmt.Errorf("Compare.TargetUnion has unexpected type %T", x) + } + return nil +} + +func _Compare_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Compare) + switch tag { + case 4: // target_union.version + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.TargetUnion = &Compare_Version{int64(x)} + return true, err + case 5: // target_union.create_revision + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.TargetUnion = &Compare_CreateRevision{int64(x)} + return true, err + case 6: // target_union.mod_revision + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.TargetUnion = &Compare_ModRevision{int64(x)} + return true, err + case 7: // target_union.value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.TargetUnion = &Compare_Value{x} + return true, err + default: + return false, nil + } +} + +func _Compare_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Compare) + // target_union + switch x := m.TargetUnion.(type) { + case *Compare_Version: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Version)) + case *Compare_CreateRevision: + n += proto.SizeVarint(5<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.CreateRevision)) + case *Compare_ModRevision: + n += proto.SizeVarint(6<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.ModRevision)) + case *Compare_Value: + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Value))) + n += len(x.Value) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// From google paxosdb paper: +// Our implementation hinges around a powerful primitive which we call MultiOp. All other database +// operations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically +// and consists of three components: +// 1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check +// for the absence or presence of a value, or compare with a given value. Two different tests in the guard +// may apply to the same or different entries in the database. All tests in the guard are applied and +// MultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise +// it executes f op (see item 3 below). +// 2. A list of database operations called t op. Each operation in the list is either an insert, delete, or +// lookup operation, and applies to a single database entry. Two different operations in the list may apply +// to the same or different entries in the database. These operations are executed +// if guard evaluates to +// true. +// 3. A list of database operations called f op. Like t op, but executed if guard evaluates to false. +type TxnRequest struct { + // compare is a list of predicates representing a conjunction of terms. + // If the comparisons succeed, then the success requests will be processed in order, + // and the response will contain their respective responses in order. + // If the comparisons fail, then the failure requests will be processed in order, + // and the response will contain their respective responses in order. + Compare []*Compare `protobuf:"bytes,1,rep,name=compare" json:"compare,omitempty"` + // success is a list of requests which will be applied when compare evaluates to true. + Success []*RequestOp `protobuf:"bytes,2,rep,name=success" json:"success,omitempty"` + // failure is a list of requests which will be applied when compare evaluates to false. + Failure []*RequestOp `protobuf:"bytes,3,rep,name=failure" json:"failure,omitempty"` +} + +func (m *TxnRequest) Reset() { *m = TxnRequest{} } +func (m *TxnRequest) String() string { return proto.CompactTextString(m) } +func (*TxnRequest) ProtoMessage() {} +func (*TxnRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{10} } + +func (m *TxnRequest) GetCompare() []*Compare { + if m != nil { + return m.Compare + } + return nil +} + +func (m *TxnRequest) GetSuccess() []*RequestOp { + if m != nil { + return m.Success + } + return nil +} + +func (m *TxnRequest) GetFailure() []*RequestOp { + if m != nil { + return m.Failure + } + return nil +} + +type TxnResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // succeeded is set to true if the compare evaluated to true or false otherwise. + Succeeded bool `protobuf:"varint,2,opt,name=succeeded,proto3" json:"succeeded,omitempty"` + // responses is a list of responses corresponding to the results from applying + // success if succeeded is true or failure if succeeded is false. + Responses []*ResponseOp `protobuf:"bytes,3,rep,name=responses" json:"responses,omitempty"` +} + +func (m *TxnResponse) Reset() { *m = TxnResponse{} } +func (m *TxnResponse) String() string { return proto.CompactTextString(m) } +func (*TxnResponse) ProtoMessage() {} +func (*TxnResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{11} } + +func (m *TxnResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *TxnResponse) GetResponses() []*ResponseOp { + if m != nil { + return m.Responses + } + return nil +} + +// CompactionRequest compacts the key-value store up to a given revision. All superseded keys +// with a revision less than the compaction revision will be removed. +type CompactionRequest struct { + // revision is the key-value store revision for the compaction operation. + Revision int64 `protobuf:"varint,1,opt,name=revision,proto3" json:"revision,omitempty"` + // physical is set so the RPC will wait until the compaction is physically + // applied to the local database such that compacted entries are totally + // removed from the backend database. + Physical bool `protobuf:"varint,2,opt,name=physical,proto3" json:"physical,omitempty"` +} + +func (m *CompactionRequest) Reset() { *m = CompactionRequest{} } +func (m *CompactionRequest) String() string { return proto.CompactTextString(m) } +func (*CompactionRequest) ProtoMessage() {} +func (*CompactionRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{12} } + +type CompactionResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *CompactionResponse) Reset() { *m = CompactionResponse{} } +func (m *CompactionResponse) String() string { return proto.CompactTextString(m) } +func (*CompactionResponse) ProtoMessage() {} +func (*CompactionResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{13} } + +func (m *CompactionResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type HashRequest struct { +} + +func (m *HashRequest) Reset() { *m = HashRequest{} } +func (m *HashRequest) String() string { return proto.CompactTextString(m) } +func (*HashRequest) ProtoMessage() {} +func (*HashRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{14} } + +type HashResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // hash is the hash value computed from the responding member's key-value store. + Hash uint32 `protobuf:"varint,2,opt,name=hash,proto3" json:"hash,omitempty"` +} + +func (m *HashResponse) Reset() { *m = HashResponse{} } +func (m *HashResponse) String() string { return proto.CompactTextString(m) } +func (*HashResponse) ProtoMessage() {} +func (*HashResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{15} } + +func (m *HashResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type SnapshotRequest struct { +} + +func (m *SnapshotRequest) Reset() { *m = SnapshotRequest{} } +func (m *SnapshotRequest) String() string { return proto.CompactTextString(m) } +func (*SnapshotRequest) ProtoMessage() {} +func (*SnapshotRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{16} } + +type SnapshotResponse struct { + // header has the current key-value store information. The first header in the snapshot + // stream indicates the point in time of the snapshot. + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // remaining_bytes is the number of blob bytes to be sent after this message + RemainingBytes uint64 `protobuf:"varint,2,opt,name=remaining_bytes,json=remainingBytes,proto3" json:"remaining_bytes,omitempty"` + // blob contains the next chunk of the snapshot in the snapshot stream. + Blob []byte `protobuf:"bytes,3,opt,name=blob,proto3" json:"blob,omitempty"` +} + +func (m *SnapshotResponse) Reset() { *m = SnapshotResponse{} } +func (m *SnapshotResponse) String() string { return proto.CompactTextString(m) } +func (*SnapshotResponse) ProtoMessage() {} +func (*SnapshotResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{17} } + +func (m *SnapshotResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type WatchRequest struct { + // request_union is a request to either create a new watcher or cancel an existing watcher. + // + // Types that are valid to be assigned to RequestUnion: + // *WatchRequest_CreateRequest + // *WatchRequest_CancelRequest + RequestUnion isWatchRequest_RequestUnion `protobuf_oneof:"request_union"` +} + +func (m *WatchRequest) Reset() { *m = WatchRequest{} } +func (m *WatchRequest) String() string { return proto.CompactTextString(m) } +func (*WatchRequest) ProtoMessage() {} +func (*WatchRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{18} } + +type isWatchRequest_RequestUnion interface { + isWatchRequest_RequestUnion() + MarshalTo([]byte) (int, error) + Size() int +} + +type WatchRequest_CreateRequest struct { + CreateRequest *WatchCreateRequest `protobuf:"bytes,1,opt,name=create_request,json=createRequest,oneof"` +} +type WatchRequest_CancelRequest struct { + CancelRequest *WatchCancelRequest `protobuf:"bytes,2,opt,name=cancel_request,json=cancelRequest,oneof"` +} + +func (*WatchRequest_CreateRequest) isWatchRequest_RequestUnion() {} +func (*WatchRequest_CancelRequest) isWatchRequest_RequestUnion() {} + +func (m *WatchRequest) GetRequestUnion() isWatchRequest_RequestUnion { + if m != nil { + return m.RequestUnion + } + return nil +} + +func (m *WatchRequest) GetCreateRequest() *WatchCreateRequest { + if x, ok := m.GetRequestUnion().(*WatchRequest_CreateRequest); ok { + return x.CreateRequest + } + return nil +} + +func (m *WatchRequest) GetCancelRequest() *WatchCancelRequest { + if x, ok := m.GetRequestUnion().(*WatchRequest_CancelRequest); ok { + return x.CancelRequest + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*WatchRequest) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _WatchRequest_OneofMarshaler, _WatchRequest_OneofUnmarshaler, _WatchRequest_OneofSizer, []interface{}{ + (*WatchRequest_CreateRequest)(nil), + (*WatchRequest_CancelRequest)(nil), + } +} + +func _WatchRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*WatchRequest) + // request_union + switch x := m.RequestUnion.(type) { + case *WatchRequest_CreateRequest: + _ = b.EncodeVarint(1<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CreateRequest); err != nil { + return err + } + case *WatchRequest_CancelRequest: + _ = b.EncodeVarint(2<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.CancelRequest); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("WatchRequest.RequestUnion has unexpected type %T", x) + } + return nil +} + +func _WatchRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*WatchRequest) + switch tag { + case 1: // request_union.create_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(WatchCreateRequest) + err := b.DecodeMessage(msg) + m.RequestUnion = &WatchRequest_CreateRequest{msg} + return true, err + case 2: // request_union.cancel_request + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(WatchCancelRequest) + err := b.DecodeMessage(msg) + m.RequestUnion = &WatchRequest_CancelRequest{msg} + return true, err + default: + return false, nil + } +} + +func _WatchRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*WatchRequest) + // request_union + switch x := m.RequestUnion.(type) { + case *WatchRequest_CreateRequest: + s := proto.Size(x.CreateRequest) + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *WatchRequest_CancelRequest: + s := proto.Size(x.CancelRequest) + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type WatchCreateRequest struct { + // key is the key to register for watching. + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // range_end is the end of the range [key, range_end) to watch. If range_end is not given, + // only the key argument is watched. If range_end is equal to '\0', all keys greater than + // or equal to the key argument are watched. + RangeEnd []byte `protobuf:"bytes,2,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` + // start_revision is an optional revision to watch from (inclusive). No start_revision is "now". + StartRevision int64 `protobuf:"varint,3,opt,name=start_revision,json=startRevision,proto3" json:"start_revision,omitempty"` + // progress_notify is set so that the etcd server will periodically send a WatchResponse with + // no events to the new watcher if there are no recent events. It is useful when clients + // wish to recover a disconnected watcher starting from a recent known revision. + // The etcd server may decide how often it will send notifications based on current load. + ProgressNotify bool `protobuf:"varint,4,opt,name=progress_notify,json=progressNotify,proto3" json:"progress_notify,omitempty"` +} + +func (m *WatchCreateRequest) Reset() { *m = WatchCreateRequest{} } +func (m *WatchCreateRequest) String() string { return proto.CompactTextString(m) } +func (*WatchCreateRequest) ProtoMessage() {} +func (*WatchCreateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{19} } + +type WatchCancelRequest struct { + // watch_id is the watcher id to cancel so that no more events are transmitted. + WatchId int64 `protobuf:"varint,1,opt,name=watch_id,json=watchId,proto3" json:"watch_id,omitempty"` +} + +func (m *WatchCancelRequest) Reset() { *m = WatchCancelRequest{} } +func (m *WatchCancelRequest) String() string { return proto.CompactTextString(m) } +func (*WatchCancelRequest) ProtoMessage() {} +func (*WatchCancelRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{20} } + +type WatchResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // watch_id is the ID of the watcher that corresponds to the response. + WatchId int64 `protobuf:"varint,2,opt,name=watch_id,json=watchId,proto3" json:"watch_id,omitempty"` + // created is set to true if the response is for a create watch request. + // The client should record the watch_id and expect to receive events for + // the created watcher from the same stream. + // All events sent to the created watcher will attach with the same watch_id. + Created bool `protobuf:"varint,3,opt,name=created,proto3" json:"created,omitempty"` + // canceled is set to true if the response is for a cancel watch request. + // No further events will be sent to the canceled watcher. + Canceled bool `protobuf:"varint,4,opt,name=canceled,proto3" json:"canceled,omitempty"` + // compact_revision is set to the minimum index if a watcher tries to watch + // at a compacted index. + // + // This happens when creating a watcher at a compacted revision or the watcher cannot + // catch up with the progress of the key-value store. + // + // The client should treat the watcher as canceled and should not try to create any + // watcher with the same start_revision again. + CompactRevision int64 `protobuf:"varint,5,opt,name=compact_revision,json=compactRevision,proto3" json:"compact_revision,omitempty"` + Events []*mvccpb.Event `protobuf:"bytes,11,rep,name=events" json:"events,omitempty"` +} + +func (m *WatchResponse) Reset() { *m = WatchResponse{} } +func (m *WatchResponse) String() string { return proto.CompactTextString(m) } +func (*WatchResponse) ProtoMessage() {} +func (*WatchResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{21} } + +func (m *WatchResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *WatchResponse) GetEvents() []*mvccpb.Event { + if m != nil { + return m.Events + } + return nil +} + +type LeaseGrantRequest struct { + // TTL is the advisory time-to-live in seconds. + TTL int64 `protobuf:"varint,1,opt,name=TTL,json=tTL,proto3" json:"TTL,omitempty"` + // ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID. + ID int64 `protobuf:"varint,2,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` +} + +func (m *LeaseGrantRequest) Reset() { *m = LeaseGrantRequest{} } +func (m *LeaseGrantRequest) String() string { return proto.CompactTextString(m) } +func (*LeaseGrantRequest) ProtoMessage() {} +func (*LeaseGrantRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{22} } + +type LeaseGrantResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // ID is the lease ID for the granted lease. + ID int64 `protobuf:"varint,2,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` + // TTL is the server chosen lease time-to-live in seconds. + TTL int64 `protobuf:"varint,3,opt,name=TTL,json=tTL,proto3" json:"TTL,omitempty"` + Error string `protobuf:"bytes,4,opt,name=error,proto3" json:"error,omitempty"` +} + +func (m *LeaseGrantResponse) Reset() { *m = LeaseGrantResponse{} } +func (m *LeaseGrantResponse) String() string { return proto.CompactTextString(m) } +func (*LeaseGrantResponse) ProtoMessage() {} +func (*LeaseGrantResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{23} } + +func (m *LeaseGrantResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type LeaseRevokeRequest struct { + // ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted. + ID int64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` +} + +func (m *LeaseRevokeRequest) Reset() { *m = LeaseRevokeRequest{} } +func (m *LeaseRevokeRequest) String() string { return proto.CompactTextString(m) } +func (*LeaseRevokeRequest) ProtoMessage() {} +func (*LeaseRevokeRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{24} } + +type LeaseRevokeResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *LeaseRevokeResponse) Reset() { *m = LeaseRevokeResponse{} } +func (m *LeaseRevokeResponse) String() string { return proto.CompactTextString(m) } +func (*LeaseRevokeResponse) ProtoMessage() {} +func (*LeaseRevokeResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{25} } + +func (m *LeaseRevokeResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type LeaseKeepAliveRequest struct { + // ID is the lease ID for the lease to keep alive. + ID int64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` +} + +func (m *LeaseKeepAliveRequest) Reset() { *m = LeaseKeepAliveRequest{} } +func (m *LeaseKeepAliveRequest) String() string { return proto.CompactTextString(m) } +func (*LeaseKeepAliveRequest) ProtoMessage() {} +func (*LeaseKeepAliveRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{26} } + +type LeaseKeepAliveResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // ID is the lease ID from the keep alive request. + ID int64 `protobuf:"varint,2,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` + // TTL is the new time-to-live for the lease. + TTL int64 `protobuf:"varint,3,opt,name=TTL,json=tTL,proto3" json:"TTL,omitempty"` +} + +func (m *LeaseKeepAliveResponse) Reset() { *m = LeaseKeepAliveResponse{} } +func (m *LeaseKeepAliveResponse) String() string { return proto.CompactTextString(m) } +func (*LeaseKeepAliveResponse) ProtoMessage() {} +func (*LeaseKeepAliveResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{27} } + +func (m *LeaseKeepAliveResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type Member struct { + // ID is the member ID for this member. + ID uint64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` + // name is the human-readable name of the member. If the member is not started, the name will be an empty string. + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + // peerURLs is the list of URLs the member exposes to the cluster for communication. + PeerURLs []string `protobuf:"bytes,3,rep,name=peerURLs" json:"peerURLs,omitempty"` + // clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty. + ClientURLs []string `protobuf:"bytes,4,rep,name=clientURLs" json:"clientURLs,omitempty"` +} + +func (m *Member) Reset() { *m = Member{} } +func (m *Member) String() string { return proto.CompactTextString(m) } +func (*Member) ProtoMessage() {} +func (*Member) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{28} } + +type MemberAddRequest struct { + // peerURLs is the list of URLs the added member will use to communicate with the cluster. + PeerURLs []string `protobuf:"bytes,1,rep,name=peerURLs" json:"peerURLs,omitempty"` +} + +func (m *MemberAddRequest) Reset() { *m = MemberAddRequest{} } +func (m *MemberAddRequest) String() string { return proto.CompactTextString(m) } +func (*MemberAddRequest) ProtoMessage() {} +func (*MemberAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{29} } + +type MemberAddResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // member is the member information for the added member. + Member *Member `protobuf:"bytes,2,opt,name=member" json:"member,omitempty"` +} + +func (m *MemberAddResponse) Reset() { *m = MemberAddResponse{} } +func (m *MemberAddResponse) String() string { return proto.CompactTextString(m) } +func (*MemberAddResponse) ProtoMessage() {} +func (*MemberAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{30} } + +func (m *MemberAddResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *MemberAddResponse) GetMember() *Member { + if m != nil { + return m.Member + } + return nil +} + +type MemberRemoveRequest struct { + // ID is the member ID of the member to remove. + ID uint64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` +} + +func (m *MemberRemoveRequest) Reset() { *m = MemberRemoveRequest{} } +func (m *MemberRemoveRequest) String() string { return proto.CompactTextString(m) } +func (*MemberRemoveRequest) ProtoMessage() {} +func (*MemberRemoveRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{31} } + +type MemberRemoveResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *MemberRemoveResponse) Reset() { *m = MemberRemoveResponse{} } +func (m *MemberRemoveResponse) String() string { return proto.CompactTextString(m) } +func (*MemberRemoveResponse) ProtoMessage() {} +func (*MemberRemoveResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{32} } + +func (m *MemberRemoveResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type MemberUpdateRequest struct { + // ID is the member ID of the member to update. + ID uint64 `protobuf:"varint,1,opt,name=ID,json=iD,proto3" json:"ID,omitempty"` + // peerURLs is the new list of URLs the member will use to communicate with the cluster. + PeerURLs []string `protobuf:"bytes,2,rep,name=peerURLs" json:"peerURLs,omitempty"` +} + +func (m *MemberUpdateRequest) Reset() { *m = MemberUpdateRequest{} } +func (m *MemberUpdateRequest) String() string { return proto.CompactTextString(m) } +func (*MemberUpdateRequest) ProtoMessage() {} +func (*MemberUpdateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{33} } + +type MemberUpdateResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *MemberUpdateResponse) Reset() { *m = MemberUpdateResponse{} } +func (m *MemberUpdateResponse) String() string { return proto.CompactTextString(m) } +func (*MemberUpdateResponse) ProtoMessage() {} +func (*MemberUpdateResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{34} } + +func (m *MemberUpdateResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type MemberListRequest struct { +} + +func (m *MemberListRequest) Reset() { *m = MemberListRequest{} } +func (m *MemberListRequest) String() string { return proto.CompactTextString(m) } +func (*MemberListRequest) ProtoMessage() {} +func (*MemberListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{35} } + +type MemberListResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // members is a list of all members associated with the cluster. + Members []*Member `protobuf:"bytes,2,rep,name=members" json:"members,omitempty"` +} + +func (m *MemberListResponse) Reset() { *m = MemberListResponse{} } +func (m *MemberListResponse) String() string { return proto.CompactTextString(m) } +func (*MemberListResponse) ProtoMessage() {} +func (*MemberListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{36} } + +func (m *MemberListResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *MemberListResponse) GetMembers() []*Member { + if m != nil { + return m.Members + } + return nil +} + +type DefragmentRequest struct { +} + +func (m *DefragmentRequest) Reset() { *m = DefragmentRequest{} } +func (m *DefragmentRequest) String() string { return proto.CompactTextString(m) } +func (*DefragmentRequest) ProtoMessage() {} +func (*DefragmentRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{37} } + +type DefragmentResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *DefragmentResponse) Reset() { *m = DefragmentResponse{} } +func (m *DefragmentResponse) String() string { return proto.CompactTextString(m) } +func (*DefragmentResponse) ProtoMessage() {} +func (*DefragmentResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{38} } + +func (m *DefragmentResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AlarmRequest struct { + // action is the kind of alarm request to issue. The action + // may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a + // raised alarm. + Action AlarmRequest_AlarmAction `protobuf:"varint,1,opt,name=action,proto3,enum=etcdserverpb.AlarmRequest_AlarmAction" json:"action,omitempty"` + // memberID is the ID of the member associated with the alarm. If memberID is 0, the + // alarm request covers all members. + MemberID uint64 `protobuf:"varint,2,opt,name=memberID,proto3" json:"memberID,omitempty"` + // alarm is the type of alarm to consider for this request. + Alarm AlarmType `protobuf:"varint,3,opt,name=alarm,proto3,enum=etcdserverpb.AlarmType" json:"alarm,omitempty"` +} + +func (m *AlarmRequest) Reset() { *m = AlarmRequest{} } +func (m *AlarmRequest) String() string { return proto.CompactTextString(m) } +func (*AlarmRequest) ProtoMessage() {} +func (*AlarmRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{39} } + +type AlarmMember struct { + // memberID is the ID of the member associated with the raised alarm. + MemberID uint64 `protobuf:"varint,1,opt,name=memberID,proto3" json:"memberID,omitempty"` + // alarm is the type of alarm which has been raised. + Alarm AlarmType `protobuf:"varint,2,opt,name=alarm,proto3,enum=etcdserverpb.AlarmType" json:"alarm,omitempty"` +} + +func (m *AlarmMember) Reset() { *m = AlarmMember{} } +func (m *AlarmMember) String() string { return proto.CompactTextString(m) } +func (*AlarmMember) ProtoMessage() {} +func (*AlarmMember) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{40} } + +type AlarmResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // alarms is a list of alarms associated with the alarm request. + Alarms []*AlarmMember `protobuf:"bytes,2,rep,name=alarms" json:"alarms,omitempty"` +} + +func (m *AlarmResponse) Reset() { *m = AlarmResponse{} } +func (m *AlarmResponse) String() string { return proto.CompactTextString(m) } +func (*AlarmResponse) ProtoMessage() {} +func (*AlarmResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{41} } + +func (m *AlarmResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *AlarmResponse) GetAlarms() []*AlarmMember { + if m != nil { + return m.Alarms + } + return nil +} + +type StatusRequest struct { +} + +func (m *StatusRequest) Reset() { *m = StatusRequest{} } +func (m *StatusRequest) String() string { return proto.CompactTextString(m) } +func (*StatusRequest) ProtoMessage() {} +func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{42} } + +type StatusResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // version is the cluster protocol version used by the responding member. + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // dbSize is the size of the backend database, in bytes, of the responding member. + DbSize int64 `protobuf:"varint,3,opt,name=dbSize,proto3" json:"dbSize,omitempty"` + // leader is the member ID which the responding member believes is the current leader. + Leader uint64 `protobuf:"varint,4,opt,name=leader,proto3" json:"leader,omitempty"` + // raftIndex is the current raft index of the responding member. + RaftIndex uint64 `protobuf:"varint,5,opt,name=raftIndex,proto3" json:"raftIndex,omitempty"` + // raftTerm is the current raft term of the responding member. + RaftTerm uint64 `protobuf:"varint,6,opt,name=raftTerm,proto3" json:"raftTerm,omitempty"` +} + +func (m *StatusResponse) Reset() { *m = StatusResponse{} } +func (m *StatusResponse) String() string { return proto.CompactTextString(m) } +func (*StatusResponse) ProtoMessage() {} +func (*StatusResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{43} } + +func (m *StatusResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthEnableRequest struct { +} + +func (m *AuthEnableRequest) Reset() { *m = AuthEnableRequest{} } +func (m *AuthEnableRequest) String() string { return proto.CompactTextString(m) } +func (*AuthEnableRequest) ProtoMessage() {} +func (*AuthEnableRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{44} } + +type AuthDisableRequest struct { +} + +func (m *AuthDisableRequest) Reset() { *m = AuthDisableRequest{} } +func (m *AuthDisableRequest) String() string { return proto.CompactTextString(m) } +func (*AuthDisableRequest) ProtoMessage() {} +func (*AuthDisableRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{45} } + +type AuthenticateRequest struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` +} + +func (m *AuthenticateRequest) Reset() { *m = AuthenticateRequest{} } +func (m *AuthenticateRequest) String() string { return proto.CompactTextString(m) } +func (*AuthenticateRequest) ProtoMessage() {} +func (*AuthenticateRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{46} } + +type AuthUserAddRequest struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` +} + +func (m *AuthUserAddRequest) Reset() { *m = AuthUserAddRequest{} } +func (m *AuthUserAddRequest) String() string { return proto.CompactTextString(m) } +func (*AuthUserAddRequest) ProtoMessage() {} +func (*AuthUserAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{47} } + +type AuthUserGetRequest struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (m *AuthUserGetRequest) Reset() { *m = AuthUserGetRequest{} } +func (m *AuthUserGetRequest) String() string { return proto.CompactTextString(m) } +func (*AuthUserGetRequest) ProtoMessage() {} +func (*AuthUserGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{48} } + +type AuthUserDeleteRequest struct { + // name is the name of the user to delete. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (m *AuthUserDeleteRequest) Reset() { *m = AuthUserDeleteRequest{} } +func (m *AuthUserDeleteRequest) String() string { return proto.CompactTextString(m) } +func (*AuthUserDeleteRequest) ProtoMessage() {} +func (*AuthUserDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{49} } + +type AuthUserChangePasswordRequest struct { + // name is the name of the user whose password is being changed. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // password is the new password for the user. + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` +} + +func (m *AuthUserChangePasswordRequest) Reset() { *m = AuthUserChangePasswordRequest{} } +func (m *AuthUserChangePasswordRequest) String() string { return proto.CompactTextString(m) } +func (*AuthUserChangePasswordRequest) ProtoMessage() {} +func (*AuthUserChangePasswordRequest) Descriptor() ([]byte, []int) { + return fileDescriptorRpc, []int{50} +} + +type AuthUserGrantRoleRequest struct { + // user is the name of the user which should be granted a given role. + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` + // role is the name of the role to grant to the user. + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` +} + +func (m *AuthUserGrantRoleRequest) Reset() { *m = AuthUserGrantRoleRequest{} } +func (m *AuthUserGrantRoleRequest) String() string { return proto.CompactTextString(m) } +func (*AuthUserGrantRoleRequest) ProtoMessage() {} +func (*AuthUserGrantRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{51} } + +type AuthUserRevokeRoleRequest struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Role string `protobuf:"bytes,2,opt,name=role,proto3" json:"role,omitempty"` +} + +func (m *AuthUserRevokeRoleRequest) Reset() { *m = AuthUserRevokeRoleRequest{} } +func (m *AuthUserRevokeRoleRequest) String() string { return proto.CompactTextString(m) } +func (*AuthUserRevokeRoleRequest) ProtoMessage() {} +func (*AuthUserRevokeRoleRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{52} } + +type AuthRoleAddRequest struct { + // name is the name of the role to add to the authentication system. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (m *AuthRoleAddRequest) Reset() { *m = AuthRoleAddRequest{} } +func (m *AuthRoleAddRequest) String() string { return proto.CompactTextString(m) } +func (*AuthRoleAddRequest) ProtoMessage() {} +func (*AuthRoleAddRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{53} } + +type AuthRoleGetRequest struct { + Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` +} + +func (m *AuthRoleGetRequest) Reset() { *m = AuthRoleGetRequest{} } +func (m *AuthRoleGetRequest) String() string { return proto.CompactTextString(m) } +func (*AuthRoleGetRequest) ProtoMessage() {} +func (*AuthRoleGetRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{54} } + +type AuthUserListRequest struct { +} + +func (m *AuthUserListRequest) Reset() { *m = AuthUserListRequest{} } +func (m *AuthUserListRequest) String() string { return proto.CompactTextString(m) } +func (*AuthUserListRequest) ProtoMessage() {} +func (*AuthUserListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{55} } + +type AuthRoleListRequest struct { +} + +func (m *AuthRoleListRequest) Reset() { *m = AuthRoleListRequest{} } +func (m *AuthRoleListRequest) String() string { return proto.CompactTextString(m) } +func (*AuthRoleListRequest) ProtoMessage() {} +func (*AuthRoleListRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{56} } + +type AuthRoleDeleteRequest struct { + Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` +} + +func (m *AuthRoleDeleteRequest) Reset() { *m = AuthRoleDeleteRequest{} } +func (m *AuthRoleDeleteRequest) String() string { return proto.CompactTextString(m) } +func (*AuthRoleDeleteRequest) ProtoMessage() {} +func (*AuthRoleDeleteRequest) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{57} } + +type AuthRoleGrantPermissionRequest struct { + // name is the name of the role which will be granted the permission. + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + // perm is the permission to grant to the role. + Perm *authpb.Permission `protobuf:"bytes,2,opt,name=perm" json:"perm,omitempty"` +} + +func (m *AuthRoleGrantPermissionRequest) Reset() { *m = AuthRoleGrantPermissionRequest{} } +func (m *AuthRoleGrantPermissionRequest) String() string { return proto.CompactTextString(m) } +func (*AuthRoleGrantPermissionRequest) ProtoMessage() {} +func (*AuthRoleGrantPermissionRequest) Descriptor() ([]byte, []int) { + return fileDescriptorRpc, []int{58} +} + +func (m *AuthRoleGrantPermissionRequest) GetPerm() *authpb.Permission { + if m != nil { + return m.Perm + } + return nil +} + +type AuthRoleRevokePermissionRequest struct { + Role string `protobuf:"bytes,1,opt,name=role,proto3" json:"role,omitempty"` + Key string `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + RangeEnd string `protobuf:"bytes,3,opt,name=range_end,json=rangeEnd,proto3" json:"range_end,omitempty"` +} + +func (m *AuthRoleRevokePermissionRequest) Reset() { *m = AuthRoleRevokePermissionRequest{} } +func (m *AuthRoleRevokePermissionRequest) String() string { return proto.CompactTextString(m) } +func (*AuthRoleRevokePermissionRequest) ProtoMessage() {} +func (*AuthRoleRevokePermissionRequest) Descriptor() ([]byte, []int) { + return fileDescriptorRpc, []int{59} +} + +type AuthEnableResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthEnableResponse) Reset() { *m = AuthEnableResponse{} } +func (m *AuthEnableResponse) String() string { return proto.CompactTextString(m) } +func (*AuthEnableResponse) ProtoMessage() {} +func (*AuthEnableResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{60} } + +func (m *AuthEnableResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthDisableResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthDisableResponse) Reset() { *m = AuthDisableResponse{} } +func (m *AuthDisableResponse) String() string { return proto.CompactTextString(m) } +func (*AuthDisableResponse) ProtoMessage() {} +func (*AuthDisableResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{61} } + +func (m *AuthDisableResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthenticateResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + // token is an authorized token that can be used in succeeding RPCs + Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` +} + +func (m *AuthenticateResponse) Reset() { *m = AuthenticateResponse{} } +func (m *AuthenticateResponse) String() string { return proto.CompactTextString(m) } +func (*AuthenticateResponse) ProtoMessage() {} +func (*AuthenticateResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{62} } + +func (m *AuthenticateResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthUserAddResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthUserAddResponse) Reset() { *m = AuthUserAddResponse{} } +func (m *AuthUserAddResponse) String() string { return proto.CompactTextString(m) } +func (*AuthUserAddResponse) ProtoMessage() {} +func (*AuthUserAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{63} } + +func (m *AuthUserAddResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthUserGetResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + Roles []string `protobuf:"bytes,2,rep,name=roles" json:"roles,omitempty"` +} + +func (m *AuthUserGetResponse) Reset() { *m = AuthUserGetResponse{} } +func (m *AuthUserGetResponse) String() string { return proto.CompactTextString(m) } +func (*AuthUserGetResponse) ProtoMessage() {} +func (*AuthUserGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{64} } + +func (m *AuthUserGetResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthUserDeleteResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthUserDeleteResponse) Reset() { *m = AuthUserDeleteResponse{} } +func (m *AuthUserDeleteResponse) String() string { return proto.CompactTextString(m) } +func (*AuthUserDeleteResponse) ProtoMessage() {} +func (*AuthUserDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{65} } + +func (m *AuthUserDeleteResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthUserChangePasswordResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthUserChangePasswordResponse) Reset() { *m = AuthUserChangePasswordResponse{} } +func (m *AuthUserChangePasswordResponse) String() string { return proto.CompactTextString(m) } +func (*AuthUserChangePasswordResponse) ProtoMessage() {} +func (*AuthUserChangePasswordResponse) Descriptor() ([]byte, []int) { + return fileDescriptorRpc, []int{66} +} + +func (m *AuthUserChangePasswordResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthUserGrantRoleResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthUserGrantRoleResponse) Reset() { *m = AuthUserGrantRoleResponse{} } +func (m *AuthUserGrantRoleResponse) String() string { return proto.CompactTextString(m) } +func (*AuthUserGrantRoleResponse) ProtoMessage() {} +func (*AuthUserGrantRoleResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{67} } + +func (m *AuthUserGrantRoleResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthUserRevokeRoleResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthUserRevokeRoleResponse) Reset() { *m = AuthUserRevokeRoleResponse{} } +func (m *AuthUserRevokeRoleResponse) String() string { return proto.CompactTextString(m) } +func (*AuthUserRevokeRoleResponse) ProtoMessage() {} +func (*AuthUserRevokeRoleResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{68} } + +func (m *AuthUserRevokeRoleResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthRoleAddResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthRoleAddResponse) Reset() { *m = AuthRoleAddResponse{} } +func (m *AuthRoleAddResponse) String() string { return proto.CompactTextString(m) } +func (*AuthRoleAddResponse) ProtoMessage() {} +func (*AuthRoleAddResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{69} } + +func (m *AuthRoleAddResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthRoleGetResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + Perm []*authpb.Permission `protobuf:"bytes,2,rep,name=perm" json:"perm,omitempty"` +} + +func (m *AuthRoleGetResponse) Reset() { *m = AuthRoleGetResponse{} } +func (m *AuthRoleGetResponse) String() string { return proto.CompactTextString(m) } +func (*AuthRoleGetResponse) ProtoMessage() {} +func (*AuthRoleGetResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{70} } + +func (m *AuthRoleGetResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +func (m *AuthRoleGetResponse) GetPerm() []*authpb.Permission { + if m != nil { + return m.Perm + } + return nil +} + +type AuthRoleListResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + Roles []string `protobuf:"bytes,2,rep,name=roles" json:"roles,omitempty"` +} + +func (m *AuthRoleListResponse) Reset() { *m = AuthRoleListResponse{} } +func (m *AuthRoleListResponse) String() string { return proto.CompactTextString(m) } +func (*AuthRoleListResponse) ProtoMessage() {} +func (*AuthRoleListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{71} } + +func (m *AuthRoleListResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthUserListResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + Users []string `protobuf:"bytes,2,rep,name=users" json:"users,omitempty"` +} + +func (m *AuthUserListResponse) Reset() { *m = AuthUserListResponse{} } +func (m *AuthUserListResponse) String() string { return proto.CompactTextString(m) } +func (*AuthUserListResponse) ProtoMessage() {} +func (*AuthUserListResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{72} } + +func (m *AuthUserListResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthRoleDeleteResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthRoleDeleteResponse) Reset() { *m = AuthRoleDeleteResponse{} } +func (m *AuthRoleDeleteResponse) String() string { return proto.CompactTextString(m) } +func (*AuthRoleDeleteResponse) ProtoMessage() {} +func (*AuthRoleDeleteResponse) Descriptor() ([]byte, []int) { return fileDescriptorRpc, []int{73} } + +func (m *AuthRoleDeleteResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthRoleGrantPermissionResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthRoleGrantPermissionResponse) Reset() { *m = AuthRoleGrantPermissionResponse{} } +func (m *AuthRoleGrantPermissionResponse) String() string { return proto.CompactTextString(m) } +func (*AuthRoleGrantPermissionResponse) ProtoMessage() {} +func (*AuthRoleGrantPermissionResponse) Descriptor() ([]byte, []int) { + return fileDescriptorRpc, []int{74} +} + +func (m *AuthRoleGrantPermissionResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +type AuthRoleRevokePermissionResponse struct { + Header *ResponseHeader `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` +} + +func (m *AuthRoleRevokePermissionResponse) Reset() { *m = AuthRoleRevokePermissionResponse{} } +func (m *AuthRoleRevokePermissionResponse) String() string { return proto.CompactTextString(m) } +func (*AuthRoleRevokePermissionResponse) ProtoMessage() {} +func (*AuthRoleRevokePermissionResponse) Descriptor() ([]byte, []int) { + return fileDescriptorRpc, []int{75} +} + +func (m *AuthRoleRevokePermissionResponse) GetHeader() *ResponseHeader { + if m != nil { + return m.Header + } + return nil +} + +func init() { + proto.RegisterType((*ResponseHeader)(nil), "etcdserverpb.ResponseHeader") + proto.RegisterType((*RangeRequest)(nil), "etcdserverpb.RangeRequest") + proto.RegisterType((*RangeResponse)(nil), "etcdserverpb.RangeResponse") + proto.RegisterType((*PutRequest)(nil), "etcdserverpb.PutRequest") + proto.RegisterType((*PutResponse)(nil), "etcdserverpb.PutResponse") + proto.RegisterType((*DeleteRangeRequest)(nil), "etcdserverpb.DeleteRangeRequest") + proto.RegisterType((*DeleteRangeResponse)(nil), "etcdserverpb.DeleteRangeResponse") + proto.RegisterType((*RequestOp)(nil), "etcdserverpb.RequestOp") + proto.RegisterType((*ResponseOp)(nil), "etcdserverpb.ResponseOp") + proto.RegisterType((*Compare)(nil), "etcdserverpb.Compare") + proto.RegisterType((*TxnRequest)(nil), "etcdserverpb.TxnRequest") + proto.RegisterType((*TxnResponse)(nil), "etcdserverpb.TxnResponse") + proto.RegisterType((*CompactionRequest)(nil), "etcdserverpb.CompactionRequest") + proto.RegisterType((*CompactionResponse)(nil), "etcdserverpb.CompactionResponse") + proto.RegisterType((*HashRequest)(nil), "etcdserverpb.HashRequest") + proto.RegisterType((*HashResponse)(nil), "etcdserverpb.HashResponse") + proto.RegisterType((*SnapshotRequest)(nil), "etcdserverpb.SnapshotRequest") + proto.RegisterType((*SnapshotResponse)(nil), "etcdserverpb.SnapshotResponse") + proto.RegisterType((*WatchRequest)(nil), "etcdserverpb.WatchRequest") + proto.RegisterType((*WatchCreateRequest)(nil), "etcdserverpb.WatchCreateRequest") + proto.RegisterType((*WatchCancelRequest)(nil), "etcdserverpb.WatchCancelRequest") + proto.RegisterType((*WatchResponse)(nil), "etcdserverpb.WatchResponse") + proto.RegisterType((*LeaseGrantRequest)(nil), "etcdserverpb.LeaseGrantRequest") + proto.RegisterType((*LeaseGrantResponse)(nil), "etcdserverpb.LeaseGrantResponse") + proto.RegisterType((*LeaseRevokeRequest)(nil), "etcdserverpb.LeaseRevokeRequest") + proto.RegisterType((*LeaseRevokeResponse)(nil), "etcdserverpb.LeaseRevokeResponse") + proto.RegisterType((*LeaseKeepAliveRequest)(nil), "etcdserverpb.LeaseKeepAliveRequest") + proto.RegisterType((*LeaseKeepAliveResponse)(nil), "etcdserverpb.LeaseKeepAliveResponse") + proto.RegisterType((*Member)(nil), "etcdserverpb.Member") + proto.RegisterType((*MemberAddRequest)(nil), "etcdserverpb.MemberAddRequest") + proto.RegisterType((*MemberAddResponse)(nil), "etcdserverpb.MemberAddResponse") + proto.RegisterType((*MemberRemoveRequest)(nil), "etcdserverpb.MemberRemoveRequest") + proto.RegisterType((*MemberRemoveResponse)(nil), "etcdserverpb.MemberRemoveResponse") + proto.RegisterType((*MemberUpdateRequest)(nil), "etcdserverpb.MemberUpdateRequest") + proto.RegisterType((*MemberUpdateResponse)(nil), "etcdserverpb.MemberUpdateResponse") + proto.RegisterType((*MemberListRequest)(nil), "etcdserverpb.MemberListRequest") + proto.RegisterType((*MemberListResponse)(nil), "etcdserverpb.MemberListResponse") + proto.RegisterType((*DefragmentRequest)(nil), "etcdserverpb.DefragmentRequest") + proto.RegisterType((*DefragmentResponse)(nil), "etcdserverpb.DefragmentResponse") + proto.RegisterType((*AlarmRequest)(nil), "etcdserverpb.AlarmRequest") + proto.RegisterType((*AlarmMember)(nil), "etcdserverpb.AlarmMember") + proto.RegisterType((*AlarmResponse)(nil), "etcdserverpb.AlarmResponse") + proto.RegisterType((*StatusRequest)(nil), "etcdserverpb.StatusRequest") + proto.RegisterType((*StatusResponse)(nil), "etcdserverpb.StatusResponse") + proto.RegisterType((*AuthEnableRequest)(nil), "etcdserverpb.AuthEnableRequest") + proto.RegisterType((*AuthDisableRequest)(nil), "etcdserverpb.AuthDisableRequest") + proto.RegisterType((*AuthenticateRequest)(nil), "etcdserverpb.AuthenticateRequest") + proto.RegisterType((*AuthUserAddRequest)(nil), "etcdserverpb.AuthUserAddRequest") + proto.RegisterType((*AuthUserGetRequest)(nil), "etcdserverpb.AuthUserGetRequest") + proto.RegisterType((*AuthUserDeleteRequest)(nil), "etcdserverpb.AuthUserDeleteRequest") + proto.RegisterType((*AuthUserChangePasswordRequest)(nil), "etcdserverpb.AuthUserChangePasswordRequest") + proto.RegisterType((*AuthUserGrantRoleRequest)(nil), "etcdserverpb.AuthUserGrantRoleRequest") + proto.RegisterType((*AuthUserRevokeRoleRequest)(nil), "etcdserverpb.AuthUserRevokeRoleRequest") + proto.RegisterType((*AuthRoleAddRequest)(nil), "etcdserverpb.AuthRoleAddRequest") + proto.RegisterType((*AuthRoleGetRequest)(nil), "etcdserverpb.AuthRoleGetRequest") + proto.RegisterType((*AuthUserListRequest)(nil), "etcdserverpb.AuthUserListRequest") + proto.RegisterType((*AuthRoleListRequest)(nil), "etcdserverpb.AuthRoleListRequest") + proto.RegisterType((*AuthRoleDeleteRequest)(nil), "etcdserverpb.AuthRoleDeleteRequest") + proto.RegisterType((*AuthRoleGrantPermissionRequest)(nil), "etcdserverpb.AuthRoleGrantPermissionRequest") + proto.RegisterType((*AuthRoleRevokePermissionRequest)(nil), "etcdserverpb.AuthRoleRevokePermissionRequest") + proto.RegisterType((*AuthEnableResponse)(nil), "etcdserverpb.AuthEnableResponse") + proto.RegisterType((*AuthDisableResponse)(nil), "etcdserverpb.AuthDisableResponse") + proto.RegisterType((*AuthenticateResponse)(nil), "etcdserverpb.AuthenticateResponse") + proto.RegisterType((*AuthUserAddResponse)(nil), "etcdserverpb.AuthUserAddResponse") + proto.RegisterType((*AuthUserGetResponse)(nil), "etcdserverpb.AuthUserGetResponse") + proto.RegisterType((*AuthUserDeleteResponse)(nil), "etcdserverpb.AuthUserDeleteResponse") + proto.RegisterType((*AuthUserChangePasswordResponse)(nil), "etcdserverpb.AuthUserChangePasswordResponse") + proto.RegisterType((*AuthUserGrantRoleResponse)(nil), "etcdserverpb.AuthUserGrantRoleResponse") + proto.RegisterType((*AuthUserRevokeRoleResponse)(nil), "etcdserverpb.AuthUserRevokeRoleResponse") + proto.RegisterType((*AuthRoleAddResponse)(nil), "etcdserverpb.AuthRoleAddResponse") + proto.RegisterType((*AuthRoleGetResponse)(nil), "etcdserverpb.AuthRoleGetResponse") + proto.RegisterType((*AuthRoleListResponse)(nil), "etcdserverpb.AuthRoleListResponse") + proto.RegisterType((*AuthUserListResponse)(nil), "etcdserverpb.AuthUserListResponse") + proto.RegisterType((*AuthRoleDeleteResponse)(nil), "etcdserverpb.AuthRoleDeleteResponse") + proto.RegisterType((*AuthRoleGrantPermissionResponse)(nil), "etcdserverpb.AuthRoleGrantPermissionResponse") + proto.RegisterType((*AuthRoleRevokePermissionResponse)(nil), "etcdserverpb.AuthRoleRevokePermissionResponse") + proto.RegisterEnum("etcdserverpb.AlarmType", AlarmType_name, AlarmType_value) + proto.RegisterEnum("etcdserverpb.RangeRequest_SortOrder", RangeRequest_SortOrder_name, RangeRequest_SortOrder_value) + proto.RegisterEnum("etcdserverpb.RangeRequest_SortTarget", RangeRequest_SortTarget_name, RangeRequest_SortTarget_value) + proto.RegisterEnum("etcdserverpb.Compare_CompareResult", Compare_CompareResult_name, Compare_CompareResult_value) + proto.RegisterEnum("etcdserverpb.Compare_CompareTarget", Compare_CompareTarget_name, Compare_CompareTarget_value) + proto.RegisterEnum("etcdserverpb.AlarmRequest_AlarmAction", AlarmRequest_AlarmAction_name, AlarmRequest_AlarmAction_value) +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion3 + +// Client API for KV service + +type KVClient interface { + // Range gets the keys in the range from the key-value store. + Range(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (*RangeResponse, error) + // Put puts the given key into the key-value store. + // A put request increments the revision of the key-value store + // and generates one event in the event history. + Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error) + // DeleteRange deletes the given range from the key-value store. + // A delete request increments the revision of the key-value store + // and generates a delete event in the event history for every deleted key. + DeleteRange(ctx context.Context, in *DeleteRangeRequest, opts ...grpc.CallOption) (*DeleteRangeResponse, error) + // Txn processes multiple requests in a single transaction. + // A txn request increments the revision of the key-value store + // and generates events with the same revision for every completed request. + // It is not allowed to modify the same key several times within one txn. + Txn(ctx context.Context, in *TxnRequest, opts ...grpc.CallOption) (*TxnResponse, error) + // Compact compacts the event history in the etcd key-value store. The key-value + // store should be periodically compacted or the event history will continue to grow + // indefinitely. + Compact(ctx context.Context, in *CompactionRequest, opts ...grpc.CallOption) (*CompactionResponse, error) +} + +type kVClient struct { + cc *grpc.ClientConn +} + +func NewKVClient(cc *grpc.ClientConn) KVClient { + return &kVClient{cc} +} + +func (c *kVClient) Range(ctx context.Context, in *RangeRequest, opts ...grpc.CallOption) (*RangeResponse, error) { + out := new(RangeResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.KV/Range", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *kVClient) Put(ctx context.Context, in *PutRequest, opts ...grpc.CallOption) (*PutResponse, error) { + out := new(PutResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.KV/Put", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *kVClient) DeleteRange(ctx context.Context, in *DeleteRangeRequest, opts ...grpc.CallOption) (*DeleteRangeResponse, error) { + out := new(DeleteRangeResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.KV/DeleteRange", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *kVClient) Txn(ctx context.Context, in *TxnRequest, opts ...grpc.CallOption) (*TxnResponse, error) { + out := new(TxnResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.KV/Txn", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *kVClient) Compact(ctx context.Context, in *CompactionRequest, opts ...grpc.CallOption) (*CompactionResponse, error) { + out := new(CompactionResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.KV/Compact", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for KV service + +type KVServer interface { + // Range gets the keys in the range from the key-value store. + Range(context.Context, *RangeRequest) (*RangeResponse, error) + // Put puts the given key into the key-value store. + // A put request increments the revision of the key-value store + // and generates one event in the event history. + Put(context.Context, *PutRequest) (*PutResponse, error) + // DeleteRange deletes the given range from the key-value store. + // A delete request increments the revision of the key-value store + // and generates a delete event in the event history for every deleted key. + DeleteRange(context.Context, *DeleteRangeRequest) (*DeleteRangeResponse, error) + // Txn processes multiple requests in a single transaction. + // A txn request increments the revision of the key-value store + // and generates events with the same revision for every completed request. + // It is not allowed to modify the same key several times within one txn. + Txn(context.Context, *TxnRequest) (*TxnResponse, error) + // Compact compacts the event history in the etcd key-value store. The key-value + // store should be periodically compacted or the event history will continue to grow + // indefinitely. + Compact(context.Context, *CompactionRequest) (*CompactionResponse, error) +} + +func RegisterKVServer(s *grpc.Server, srv KVServer) { + s.RegisterService(&_KV_serviceDesc, srv) +} + +func _KV_Range_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RangeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(KVServer).Range(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.KV/Range", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(KVServer).Range(ctx, req.(*RangeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _KV_Put_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(PutRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(KVServer).Put(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.KV/Put", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(KVServer).Put(ctx, req.(*PutRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _KV_DeleteRange_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteRangeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(KVServer).DeleteRange(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.KV/DeleteRange", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(KVServer).DeleteRange(ctx, req.(*DeleteRangeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _KV_Txn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(TxnRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(KVServer).Txn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.KV/Txn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(KVServer).Txn(ctx, req.(*TxnRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _KV_Compact_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(CompactionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(KVServer).Compact(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.KV/Compact", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(KVServer).Compact(ctx, req.(*CompactionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _KV_serviceDesc = grpc.ServiceDesc{ + ServiceName: "etcdserverpb.KV", + HandlerType: (*KVServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Range", + Handler: _KV_Range_Handler, + }, + { + MethodName: "Put", + Handler: _KV_Put_Handler, + }, + { + MethodName: "DeleteRange", + Handler: _KV_DeleteRange_Handler, + }, + { + MethodName: "Txn", + Handler: _KV_Txn_Handler, + }, + { + MethodName: "Compact", + Handler: _KV_Compact_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: fileDescriptorRpc, +} + +// Client API for Watch service + +type WatchClient interface { + // Watch watches for events happening or that have happened. Both input and output + // are streams; the input stream is for creating and canceling watchers and the output + // stream sends events. One watch RPC can watch on multiple key ranges, streaming events + // for several watches at once. The entire event history can be watched starting from the + // last compaction revision. + Watch(ctx context.Context, opts ...grpc.CallOption) (Watch_WatchClient, error) +} + +type watchClient struct { + cc *grpc.ClientConn +} + +func NewWatchClient(cc *grpc.ClientConn) WatchClient { + return &watchClient{cc} +} + +func (c *watchClient) Watch(ctx context.Context, opts ...grpc.CallOption) (Watch_WatchClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Watch_serviceDesc.Streams[0], c.cc, "/etcdserverpb.Watch/Watch", opts...) + if err != nil { + return nil, err + } + x := &watchWatchClient{stream} + return x, nil +} + +type Watch_WatchClient interface { + Send(*WatchRequest) error + Recv() (*WatchResponse, error) + grpc.ClientStream +} + +type watchWatchClient struct { + grpc.ClientStream +} + +func (x *watchWatchClient) Send(m *WatchRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *watchWatchClient) Recv() (*WatchResponse, error) { + m := new(WatchResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for Watch service + +type WatchServer interface { + // Watch watches for events happening or that have happened. Both input and output + // are streams; the input stream is for creating and canceling watchers and the output + // stream sends events. One watch RPC can watch on multiple key ranges, streaming events + // for several watches at once. The entire event history can be watched starting from the + // last compaction revision. + Watch(Watch_WatchServer) error +} + +func RegisterWatchServer(s *grpc.Server, srv WatchServer) { + s.RegisterService(&_Watch_serviceDesc, srv) +} + +func _Watch_Watch_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(WatchServer).Watch(&watchWatchServer{stream}) +} + +type Watch_WatchServer interface { + Send(*WatchResponse) error + Recv() (*WatchRequest, error) + grpc.ServerStream +} + +type watchWatchServer struct { + grpc.ServerStream +} + +func (x *watchWatchServer) Send(m *WatchResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *watchWatchServer) Recv() (*WatchRequest, error) { + m := new(WatchRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _Watch_serviceDesc = grpc.ServiceDesc{ + ServiceName: "etcdserverpb.Watch", + HandlerType: (*WatchServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "Watch", + Handler: _Watch_Watch_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: fileDescriptorRpc, +} + +// Client API for Lease service + +type LeaseClient interface { + // LeaseGrant creates a lease which expires if the server does not receive a keepAlive + // within a given time to live period. All keys attached to the lease will be expired and + // deleted if the lease expires. Each expired key generates a delete event in the event history. + LeaseGrant(ctx context.Context, in *LeaseGrantRequest, opts ...grpc.CallOption) (*LeaseGrantResponse, error) + // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. + LeaseRevoke(ctx context.Context, in *LeaseRevokeRequest, opts ...grpc.CallOption) (*LeaseRevokeResponse, error) + // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client + // to the server and streaming keep alive responses from the server to the client. + LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (Lease_LeaseKeepAliveClient, error) +} + +type leaseClient struct { + cc *grpc.ClientConn +} + +func NewLeaseClient(cc *grpc.ClientConn) LeaseClient { + return &leaseClient{cc} +} + +func (c *leaseClient) LeaseGrant(ctx context.Context, in *LeaseGrantRequest, opts ...grpc.CallOption) (*LeaseGrantResponse, error) { + out := new(LeaseGrantResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Lease/LeaseGrant", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leaseClient) LeaseRevoke(ctx context.Context, in *LeaseRevokeRequest, opts ...grpc.CallOption) (*LeaseRevokeResponse, error) { + out := new(LeaseRevokeResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Lease/LeaseRevoke", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *leaseClient) LeaseKeepAlive(ctx context.Context, opts ...grpc.CallOption) (Lease_LeaseKeepAliveClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Lease_serviceDesc.Streams[0], c.cc, "/etcdserverpb.Lease/LeaseKeepAlive", opts...) + if err != nil { + return nil, err + } + x := &leaseLeaseKeepAliveClient{stream} + return x, nil +} + +type Lease_LeaseKeepAliveClient interface { + Send(*LeaseKeepAliveRequest) error + Recv() (*LeaseKeepAliveResponse, error) + grpc.ClientStream +} + +type leaseLeaseKeepAliveClient struct { + grpc.ClientStream +} + +func (x *leaseLeaseKeepAliveClient) Send(m *LeaseKeepAliveRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *leaseLeaseKeepAliveClient) Recv() (*LeaseKeepAliveResponse, error) { + m := new(LeaseKeepAliveResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for Lease service + +type LeaseServer interface { + // LeaseGrant creates a lease which expires if the server does not receive a keepAlive + // within a given time to live period. All keys attached to the lease will be expired and + // deleted if the lease expires. Each expired key generates a delete event in the event history. + LeaseGrant(context.Context, *LeaseGrantRequest) (*LeaseGrantResponse, error) + // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. + LeaseRevoke(context.Context, *LeaseRevokeRequest) (*LeaseRevokeResponse, error) + // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client + // to the server and streaming keep alive responses from the server to the client. + LeaseKeepAlive(Lease_LeaseKeepAliveServer) error +} + +func RegisterLeaseServer(s *grpc.Server, srv LeaseServer) { + s.RegisterService(&_Lease_serviceDesc, srv) +} + +func _Lease_LeaseGrant_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LeaseGrantRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeaseServer).LeaseGrant(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Lease/LeaseGrant", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeaseServer).LeaseGrant(ctx, req.(*LeaseGrantRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Lease_LeaseRevoke_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LeaseRevokeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(LeaseServer).LeaseRevoke(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Lease/LeaseRevoke", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(LeaseServer).LeaseRevoke(ctx, req.(*LeaseRevokeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Lease_LeaseKeepAlive_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(LeaseServer).LeaseKeepAlive(&leaseLeaseKeepAliveServer{stream}) +} + +type Lease_LeaseKeepAliveServer interface { + Send(*LeaseKeepAliveResponse) error + Recv() (*LeaseKeepAliveRequest, error) + grpc.ServerStream +} + +type leaseLeaseKeepAliveServer struct { + grpc.ServerStream +} + +func (x *leaseLeaseKeepAliveServer) Send(m *LeaseKeepAliveResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *leaseLeaseKeepAliveServer) Recv() (*LeaseKeepAliveRequest, error) { + m := new(LeaseKeepAliveRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +var _Lease_serviceDesc = grpc.ServiceDesc{ + ServiceName: "etcdserverpb.Lease", + HandlerType: (*LeaseServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "LeaseGrant", + Handler: _Lease_LeaseGrant_Handler, + }, + { + MethodName: "LeaseRevoke", + Handler: _Lease_LeaseRevoke_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "LeaseKeepAlive", + Handler: _Lease_LeaseKeepAlive_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: fileDescriptorRpc, +} + +// Client API for Cluster service + +type ClusterClient interface { + // MemberAdd adds a member into the cluster. + MemberAdd(ctx context.Context, in *MemberAddRequest, opts ...grpc.CallOption) (*MemberAddResponse, error) + // MemberRemove removes an existing member from the cluster. + MemberRemove(ctx context.Context, in *MemberRemoveRequest, opts ...grpc.CallOption) (*MemberRemoveResponse, error) + // MemberUpdate updates the member configuration. + MemberUpdate(ctx context.Context, in *MemberUpdateRequest, opts ...grpc.CallOption) (*MemberUpdateResponse, error) + // MemberList lists all the members in the cluster. + MemberList(ctx context.Context, in *MemberListRequest, opts ...grpc.CallOption) (*MemberListResponse, error) +} + +type clusterClient struct { + cc *grpc.ClientConn +} + +func NewClusterClient(cc *grpc.ClientConn) ClusterClient { + return &clusterClient{cc} +} + +func (c *clusterClient) MemberAdd(ctx context.Context, in *MemberAddRequest, opts ...grpc.CallOption) (*MemberAddResponse, error) { + out := new(MemberAddResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberAdd", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterClient) MemberRemove(ctx context.Context, in *MemberRemoveRequest, opts ...grpc.CallOption) (*MemberRemoveResponse, error) { + out := new(MemberRemoveResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberRemove", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterClient) MemberUpdate(ctx context.Context, in *MemberUpdateRequest, opts ...grpc.CallOption) (*MemberUpdateResponse, error) { + out := new(MemberUpdateResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberUpdate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *clusterClient) MemberList(ctx context.Context, in *MemberListRequest, opts ...grpc.CallOption) (*MemberListResponse, error) { + out := new(MemberListResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Cluster/MemberList", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Cluster service + +type ClusterServer interface { + // MemberAdd adds a member into the cluster. + MemberAdd(context.Context, *MemberAddRequest) (*MemberAddResponse, error) + // MemberRemove removes an existing member from the cluster. + MemberRemove(context.Context, *MemberRemoveRequest) (*MemberRemoveResponse, error) + // MemberUpdate updates the member configuration. + MemberUpdate(context.Context, *MemberUpdateRequest) (*MemberUpdateResponse, error) + // MemberList lists all the members in the cluster. + MemberList(context.Context, *MemberListRequest) (*MemberListResponse, error) +} + +func RegisterClusterServer(s *grpc.Server, srv ClusterServer) { + s.RegisterService(&_Cluster_serviceDesc, srv) +} + +func _Cluster_MemberAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MemberAddRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterServer).MemberAdd(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Cluster/MemberAdd", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterServer).MemberAdd(ctx, req.(*MemberAddRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Cluster_MemberRemove_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MemberRemoveRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterServer).MemberRemove(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Cluster/MemberRemove", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterServer).MemberRemove(ctx, req.(*MemberRemoveRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Cluster_MemberUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MemberUpdateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterServer).MemberUpdate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Cluster/MemberUpdate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterServer).MemberUpdate(ctx, req.(*MemberUpdateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Cluster_MemberList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MemberListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ClusterServer).MemberList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Cluster/MemberList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ClusterServer).MemberList(ctx, req.(*MemberListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Cluster_serviceDesc = grpc.ServiceDesc{ + ServiceName: "etcdserverpb.Cluster", + HandlerType: (*ClusterServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "MemberAdd", + Handler: _Cluster_MemberAdd_Handler, + }, + { + MethodName: "MemberRemove", + Handler: _Cluster_MemberRemove_Handler, + }, + { + MethodName: "MemberUpdate", + Handler: _Cluster_MemberUpdate_Handler, + }, + { + MethodName: "MemberList", + Handler: _Cluster_MemberList_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: fileDescriptorRpc, +} + +// Client API for Maintenance service + +type MaintenanceClient interface { + // Alarm activates, deactivates, and queries alarms regarding cluster health. + Alarm(ctx context.Context, in *AlarmRequest, opts ...grpc.CallOption) (*AlarmResponse, error) + // Status gets the status of the member. + Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) + // Defragment defragments a member's backend database to recover storage space. + Defragment(ctx context.Context, in *DefragmentRequest, opts ...grpc.CallOption) (*DefragmentResponse, error) + // Hash returns the hash of the local KV state for consistency checking purpose. + // This is designed for testing; do not use this in production when there + // are ongoing transactions. + Hash(ctx context.Context, in *HashRequest, opts ...grpc.CallOption) (*HashResponse, error) + // Snapshot sends a snapshot of the entire backend from a member over a stream to a client. + Snapshot(ctx context.Context, in *SnapshotRequest, opts ...grpc.CallOption) (Maintenance_SnapshotClient, error) +} + +type maintenanceClient struct { + cc *grpc.ClientConn +} + +func NewMaintenanceClient(cc *grpc.ClientConn) MaintenanceClient { + return &maintenanceClient{cc} +} + +func (c *maintenanceClient) Alarm(ctx context.Context, in *AlarmRequest, opts ...grpc.CallOption) (*AlarmResponse, error) { + out := new(AlarmResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Maintenance/Alarm", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *maintenanceClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) { + out := new(StatusResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Maintenance/Status", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *maintenanceClient) Defragment(ctx context.Context, in *DefragmentRequest, opts ...grpc.CallOption) (*DefragmentResponse, error) { + out := new(DefragmentResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Maintenance/Defragment", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *maintenanceClient) Hash(ctx context.Context, in *HashRequest, opts ...grpc.CallOption) (*HashResponse, error) { + out := new(HashResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Maintenance/Hash", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *maintenanceClient) Snapshot(ctx context.Context, in *SnapshotRequest, opts ...grpc.CallOption) (Maintenance_SnapshotClient, error) { + stream, err := grpc.NewClientStream(ctx, &_Maintenance_serviceDesc.Streams[0], c.cc, "/etcdserverpb.Maintenance/Snapshot", opts...) + if err != nil { + return nil, err + } + x := &maintenanceSnapshotClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Maintenance_SnapshotClient interface { + Recv() (*SnapshotResponse, error) + grpc.ClientStream +} + +type maintenanceSnapshotClient struct { + grpc.ClientStream +} + +func (x *maintenanceSnapshotClient) Recv() (*SnapshotResponse, error) { + m := new(SnapshotResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +// Server API for Maintenance service + +type MaintenanceServer interface { + // Alarm activates, deactivates, and queries alarms regarding cluster health. + Alarm(context.Context, *AlarmRequest) (*AlarmResponse, error) + // Status gets the status of the member. + Status(context.Context, *StatusRequest) (*StatusResponse, error) + // Defragment defragments a member's backend database to recover storage space. + Defragment(context.Context, *DefragmentRequest) (*DefragmentResponse, error) + // Hash returns the hash of the local KV state for consistency checking purpose. + // This is designed for testing; do not use this in production when there + // are ongoing transactions. + Hash(context.Context, *HashRequest) (*HashResponse, error) + // Snapshot sends a snapshot of the entire backend from a member over a stream to a client. + Snapshot(*SnapshotRequest, Maintenance_SnapshotServer) error +} + +func RegisterMaintenanceServer(s *grpc.Server, srv MaintenanceServer) { + s.RegisterService(&_Maintenance_serviceDesc, srv) +} + +func _Maintenance_Alarm_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AlarmRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MaintenanceServer).Alarm(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Maintenance/Alarm", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MaintenanceServer).Alarm(ctx, req.(*AlarmRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Maintenance_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MaintenanceServer).Status(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Maintenance/Status", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MaintenanceServer).Status(ctx, req.(*StatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Maintenance_Defragment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DefragmentRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MaintenanceServer).Defragment(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Maintenance/Defragment", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MaintenanceServer).Defragment(ctx, req.(*DefragmentRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Maintenance_Hash_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HashRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MaintenanceServer).Hash(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Maintenance/Hash", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MaintenanceServer).Hash(ctx, req.(*HashRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Maintenance_Snapshot_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(SnapshotRequest) + if err := stream.RecvMsg(m); err != nil { + return err + } + return srv.(MaintenanceServer).Snapshot(m, &maintenanceSnapshotServer{stream}) +} + +type Maintenance_SnapshotServer interface { + Send(*SnapshotResponse) error + grpc.ServerStream +} + +type maintenanceSnapshotServer struct { + grpc.ServerStream +} + +func (x *maintenanceSnapshotServer) Send(m *SnapshotResponse) error { + return x.ServerStream.SendMsg(m) +} + +var _Maintenance_serviceDesc = grpc.ServiceDesc{ + ServiceName: "etcdserverpb.Maintenance", + HandlerType: (*MaintenanceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Alarm", + Handler: _Maintenance_Alarm_Handler, + }, + { + MethodName: "Status", + Handler: _Maintenance_Status_Handler, + }, + { + MethodName: "Defragment", + Handler: _Maintenance_Defragment_Handler, + }, + { + MethodName: "Hash", + Handler: _Maintenance_Hash_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "Snapshot", + Handler: _Maintenance_Snapshot_Handler, + ServerStreams: true, + }, + }, + Metadata: fileDescriptorRpc, +} + +// Client API for Auth service + +type AuthClient interface { + // AuthEnable enables authentication. + AuthEnable(ctx context.Context, in *AuthEnableRequest, opts ...grpc.CallOption) (*AuthEnableResponse, error) + // AuthDisable disables authentication. + AuthDisable(ctx context.Context, in *AuthDisableRequest, opts ...grpc.CallOption) (*AuthDisableResponse, error) + // Authenticate processes an authenticate request. + Authenticate(ctx context.Context, in *AuthenticateRequest, opts ...grpc.CallOption) (*AuthenticateResponse, error) + // UserAdd adds a new user. + UserAdd(ctx context.Context, in *AuthUserAddRequest, opts ...grpc.CallOption) (*AuthUserAddResponse, error) + // UserGet gets detailed user information. + UserGet(ctx context.Context, in *AuthUserGetRequest, opts ...grpc.CallOption) (*AuthUserGetResponse, error) + // UserList gets a list of all users. + UserList(ctx context.Context, in *AuthUserListRequest, opts ...grpc.CallOption) (*AuthUserListResponse, error) + // UserDelete deletes a specified user. + UserDelete(ctx context.Context, in *AuthUserDeleteRequest, opts ...grpc.CallOption) (*AuthUserDeleteResponse, error) + // UserChangePassword changes the password of a specified user. + UserChangePassword(ctx context.Context, in *AuthUserChangePasswordRequest, opts ...grpc.CallOption) (*AuthUserChangePasswordResponse, error) + // UserGrant grants a role to a specified user. + UserGrantRole(ctx context.Context, in *AuthUserGrantRoleRequest, opts ...grpc.CallOption) (*AuthUserGrantRoleResponse, error) + // UserRevokeRole revokes a role of specified user. + UserRevokeRole(ctx context.Context, in *AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (*AuthUserRevokeRoleResponse, error) + // RoleAdd adds a new role. + RoleAdd(ctx context.Context, in *AuthRoleAddRequest, opts ...grpc.CallOption) (*AuthRoleAddResponse, error) + // RoleGet gets detailed role information. + RoleGet(ctx context.Context, in *AuthRoleGetRequest, opts ...grpc.CallOption) (*AuthRoleGetResponse, error) + // RoleList gets lists of all roles. + RoleList(ctx context.Context, in *AuthRoleListRequest, opts ...grpc.CallOption) (*AuthRoleListResponse, error) + // RoleDelete deletes a specified role. + RoleDelete(ctx context.Context, in *AuthRoleDeleteRequest, opts ...grpc.CallOption) (*AuthRoleDeleteResponse, error) + // RoleGrantPermission grants a permission of a specified key or range to a specified role. + RoleGrantPermission(ctx context.Context, in *AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (*AuthRoleGrantPermissionResponse, error) + // RoleRevokePermission revokes a key or range permission of a specified role. + RoleRevokePermission(ctx context.Context, in *AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (*AuthRoleRevokePermissionResponse, error) +} + +type authClient struct { + cc *grpc.ClientConn +} + +func NewAuthClient(cc *grpc.ClientConn) AuthClient { + return &authClient{cc} +} + +func (c *authClient) AuthEnable(ctx context.Context, in *AuthEnableRequest, opts ...grpc.CallOption) (*AuthEnableResponse, error) { + out := new(AuthEnableResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/AuthEnable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) AuthDisable(ctx context.Context, in *AuthDisableRequest, opts ...grpc.CallOption) (*AuthDisableResponse, error) { + out := new(AuthDisableResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/AuthDisable", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) Authenticate(ctx context.Context, in *AuthenticateRequest, opts ...grpc.CallOption) (*AuthenticateResponse, error) { + out := new(AuthenticateResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/Authenticate", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) UserAdd(ctx context.Context, in *AuthUserAddRequest, opts ...grpc.CallOption) (*AuthUserAddResponse, error) { + out := new(AuthUserAddResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserAdd", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) UserGet(ctx context.Context, in *AuthUserGetRequest, opts ...grpc.CallOption) (*AuthUserGetResponse, error) { + out := new(AuthUserGetResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserGet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) UserList(ctx context.Context, in *AuthUserListRequest, opts ...grpc.CallOption) (*AuthUserListResponse, error) { + out := new(AuthUserListResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserList", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) UserDelete(ctx context.Context, in *AuthUserDeleteRequest, opts ...grpc.CallOption) (*AuthUserDeleteResponse, error) { + out := new(AuthUserDeleteResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserDelete", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) UserChangePassword(ctx context.Context, in *AuthUserChangePasswordRequest, opts ...grpc.CallOption) (*AuthUserChangePasswordResponse, error) { + out := new(AuthUserChangePasswordResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserChangePassword", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) UserGrantRole(ctx context.Context, in *AuthUserGrantRoleRequest, opts ...grpc.CallOption) (*AuthUserGrantRoleResponse, error) { + out := new(AuthUserGrantRoleResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserGrantRole", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) UserRevokeRole(ctx context.Context, in *AuthUserRevokeRoleRequest, opts ...grpc.CallOption) (*AuthUserRevokeRoleResponse, error) { + out := new(AuthUserRevokeRoleResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/UserRevokeRole", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) RoleAdd(ctx context.Context, in *AuthRoleAddRequest, opts ...grpc.CallOption) (*AuthRoleAddResponse, error) { + out := new(AuthRoleAddResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleAdd", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) RoleGet(ctx context.Context, in *AuthRoleGetRequest, opts ...grpc.CallOption) (*AuthRoleGetResponse, error) { + out := new(AuthRoleGetResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleGet", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) RoleList(ctx context.Context, in *AuthRoleListRequest, opts ...grpc.CallOption) (*AuthRoleListResponse, error) { + out := new(AuthRoleListResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleList", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) RoleDelete(ctx context.Context, in *AuthRoleDeleteRequest, opts ...grpc.CallOption) (*AuthRoleDeleteResponse, error) { + out := new(AuthRoleDeleteResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleDelete", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) RoleGrantPermission(ctx context.Context, in *AuthRoleGrantPermissionRequest, opts ...grpc.CallOption) (*AuthRoleGrantPermissionResponse, error) { + out := new(AuthRoleGrantPermissionResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleGrantPermission", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *authClient) RoleRevokePermission(ctx context.Context, in *AuthRoleRevokePermissionRequest, opts ...grpc.CallOption) (*AuthRoleRevokePermissionResponse, error) { + out := new(AuthRoleRevokePermissionResponse) + err := grpc.Invoke(ctx, "/etcdserverpb.Auth/RoleRevokePermission", in, out, c.cc, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// Server API for Auth service + +type AuthServer interface { + // AuthEnable enables authentication. + AuthEnable(context.Context, *AuthEnableRequest) (*AuthEnableResponse, error) + // AuthDisable disables authentication. + AuthDisable(context.Context, *AuthDisableRequest) (*AuthDisableResponse, error) + // Authenticate processes an authenticate request. + Authenticate(context.Context, *AuthenticateRequest) (*AuthenticateResponse, error) + // UserAdd adds a new user. + UserAdd(context.Context, *AuthUserAddRequest) (*AuthUserAddResponse, error) + // UserGet gets detailed user information. + UserGet(context.Context, *AuthUserGetRequest) (*AuthUserGetResponse, error) + // UserList gets a list of all users. + UserList(context.Context, *AuthUserListRequest) (*AuthUserListResponse, error) + // UserDelete deletes a specified user. + UserDelete(context.Context, *AuthUserDeleteRequest) (*AuthUserDeleteResponse, error) + // UserChangePassword changes the password of a specified user. + UserChangePassword(context.Context, *AuthUserChangePasswordRequest) (*AuthUserChangePasswordResponse, error) + // UserGrant grants a role to a specified user. + UserGrantRole(context.Context, *AuthUserGrantRoleRequest) (*AuthUserGrantRoleResponse, error) + // UserRevokeRole revokes a role of specified user. + UserRevokeRole(context.Context, *AuthUserRevokeRoleRequest) (*AuthUserRevokeRoleResponse, error) + // RoleAdd adds a new role. + RoleAdd(context.Context, *AuthRoleAddRequest) (*AuthRoleAddResponse, error) + // RoleGet gets detailed role information. + RoleGet(context.Context, *AuthRoleGetRequest) (*AuthRoleGetResponse, error) + // RoleList gets lists of all roles. + RoleList(context.Context, *AuthRoleListRequest) (*AuthRoleListResponse, error) + // RoleDelete deletes a specified role. + RoleDelete(context.Context, *AuthRoleDeleteRequest) (*AuthRoleDeleteResponse, error) + // RoleGrantPermission grants a permission of a specified key or range to a specified role. + RoleGrantPermission(context.Context, *AuthRoleGrantPermissionRequest) (*AuthRoleGrantPermissionResponse, error) + // RoleRevokePermission revokes a key or range permission of a specified role. + RoleRevokePermission(context.Context, *AuthRoleRevokePermissionRequest) (*AuthRoleRevokePermissionResponse, error) +} + +func RegisterAuthServer(s *grpc.Server, srv AuthServer) { + s.RegisterService(&_Auth_serviceDesc, srv) +} + +func _Auth_AuthEnable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthEnableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).AuthEnable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/AuthEnable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).AuthEnable(ctx, req.(*AuthEnableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_AuthDisable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthDisableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).AuthDisable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/AuthDisable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).AuthDisable(ctx, req.(*AuthDisableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_Authenticate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthenticateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).Authenticate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/Authenticate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).Authenticate(ctx, req.(*AuthenticateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_UserAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthUserAddRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).UserAdd(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/UserAdd", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).UserAdd(ctx, req.(*AuthUserAddRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_UserGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthUserGetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).UserGet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/UserGet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).UserGet(ctx, req.(*AuthUserGetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_UserList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthUserListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).UserList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/UserList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).UserList(ctx, req.(*AuthUserListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_UserDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthUserDeleteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).UserDelete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/UserDelete", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).UserDelete(ctx, req.(*AuthUserDeleteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_UserChangePassword_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthUserChangePasswordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).UserChangePassword(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/UserChangePassword", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).UserChangePassword(ctx, req.(*AuthUserChangePasswordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_UserGrantRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthUserGrantRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).UserGrantRole(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/UserGrantRole", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).UserGrantRole(ctx, req.(*AuthUserGrantRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_UserRevokeRole_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthUserRevokeRoleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).UserRevokeRole(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/UserRevokeRole", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).UserRevokeRole(ctx, req.(*AuthUserRevokeRoleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_RoleAdd_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthRoleAddRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).RoleAdd(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/RoleAdd", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).RoleAdd(ctx, req.(*AuthRoleAddRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_RoleGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthRoleGetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).RoleGet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/RoleGet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).RoleGet(ctx, req.(*AuthRoleGetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_RoleList_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthRoleListRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).RoleList(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/RoleList", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).RoleList(ctx, req.(*AuthRoleListRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_RoleDelete_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthRoleDeleteRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).RoleDelete(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/RoleDelete", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).RoleDelete(ctx, req.(*AuthRoleDeleteRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_RoleGrantPermission_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthRoleGrantPermissionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).RoleGrantPermission(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/RoleGrantPermission", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).RoleGrantPermission(ctx, req.(*AuthRoleGrantPermissionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Auth_RoleRevokePermission_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AuthRoleRevokePermissionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AuthServer).RoleRevokePermission(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/etcdserverpb.Auth/RoleRevokePermission", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AuthServer).RoleRevokePermission(ctx, req.(*AuthRoleRevokePermissionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Auth_serviceDesc = grpc.ServiceDesc{ + ServiceName: "etcdserverpb.Auth", + HandlerType: (*AuthServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AuthEnable", + Handler: _Auth_AuthEnable_Handler, + }, + { + MethodName: "AuthDisable", + Handler: _Auth_AuthDisable_Handler, + }, + { + MethodName: "Authenticate", + Handler: _Auth_Authenticate_Handler, + }, + { + MethodName: "UserAdd", + Handler: _Auth_UserAdd_Handler, + }, + { + MethodName: "UserGet", + Handler: _Auth_UserGet_Handler, + }, + { + MethodName: "UserList", + Handler: _Auth_UserList_Handler, + }, + { + MethodName: "UserDelete", + Handler: _Auth_UserDelete_Handler, + }, + { + MethodName: "UserChangePassword", + Handler: _Auth_UserChangePassword_Handler, + }, + { + MethodName: "UserGrantRole", + Handler: _Auth_UserGrantRole_Handler, + }, + { + MethodName: "UserRevokeRole", + Handler: _Auth_UserRevokeRole_Handler, + }, + { + MethodName: "RoleAdd", + Handler: _Auth_RoleAdd_Handler, + }, + { + MethodName: "RoleGet", + Handler: _Auth_RoleGet_Handler, + }, + { + MethodName: "RoleList", + Handler: _Auth_RoleList_Handler, + }, + { + MethodName: "RoleDelete", + Handler: _Auth_RoleDelete_Handler, + }, + { + MethodName: "RoleGrantPermission", + Handler: _Auth_RoleGrantPermission_Handler, + }, + { + MethodName: "RoleRevokePermission", + Handler: _Auth_RoleRevokePermission_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: fileDescriptorRpc, +} + +func (m *ResponseHeader) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResponseHeader) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ClusterId != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.ClusterId)) + } + if m.MemberId != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.MemberId)) + } + if m.Revision != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.Revision)) + } + if m.RaftTerm != 0 { + data[i] = 0x20 + i++ + i = encodeVarintRpc(data, i, uint64(m.RaftTerm)) + } + return i, nil +} + +func (m *RangeRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *RangeRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Key) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + } + if len(m.RangeEnd) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.RangeEnd))) + i += copy(data[i:], m.RangeEnd) + } + if m.Limit != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.Limit)) + } + if m.Revision != 0 { + data[i] = 0x20 + i++ + i = encodeVarintRpc(data, i, uint64(m.Revision)) + } + if m.SortOrder != 0 { + data[i] = 0x28 + i++ + i = encodeVarintRpc(data, i, uint64(m.SortOrder)) + } + if m.SortTarget != 0 { + data[i] = 0x30 + i++ + i = encodeVarintRpc(data, i, uint64(m.SortTarget)) + } + if m.Serializable { + data[i] = 0x38 + i++ + if m.Serializable { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if m.KeysOnly { + data[i] = 0x40 + i++ + if m.KeysOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if m.CountOnly { + data[i] = 0x48 + i++ + if m.CountOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + +func (m *RangeResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *RangeResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n1, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if len(m.Kvs) > 0 { + for _, msg := range m.Kvs { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.More { + data[i] = 0x18 + i++ + if m.More { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if m.Count != 0 { + data[i] = 0x20 + i++ + i = encodeVarintRpc(data, i, uint64(m.Count)) + } + return i, nil +} + +func (m *PutRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PutRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Key) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + } + if len(m.Value) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Value))) + i += copy(data[i:], m.Value) + } + if m.Lease != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.Lease)) + } + return i, nil +} + +func (m *PutResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PutResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n2, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + } + return i, nil +} + +func (m *DeleteRangeRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *DeleteRangeRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Key) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + } + if len(m.RangeEnd) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.RangeEnd))) + i += copy(data[i:], m.RangeEnd) + } + return i, nil +} + +func (m *DeleteRangeResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *DeleteRangeResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n3, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n3 + } + if m.Deleted != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.Deleted)) + } + return i, nil +} + +func (m *RequestOp) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *RequestOp) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Request != nil { + nn4, err := m.Request.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += nn4 + } + return i, nil +} + +func (m *RequestOp_RequestRange) MarshalTo(data []byte) (int, error) { + i := 0 + if m.RequestRange != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.RequestRange.Size())) + n5, err := m.RequestRange.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n5 + } + return i, nil +} +func (m *RequestOp_RequestPut) MarshalTo(data []byte) (int, error) { + i := 0 + if m.RequestPut != nil { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(m.RequestPut.Size())) + n6, err := m.RequestPut.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n6 + } + return i, nil +} +func (m *RequestOp_RequestDeleteRange) MarshalTo(data []byte) (int, error) { + i := 0 + if m.RequestDeleteRange != nil { + data[i] = 0x1a + i++ + i = encodeVarintRpc(data, i, uint64(m.RequestDeleteRange.Size())) + n7, err := m.RequestDeleteRange.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n7 + } + return i, nil +} +func (m *ResponseOp) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResponseOp) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Response != nil { + nn8, err := m.Response.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += nn8 + } + return i, nil +} + +func (m *ResponseOp_ResponseRange) MarshalTo(data []byte) (int, error) { + i := 0 + if m.ResponseRange != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.ResponseRange.Size())) + n9, err := m.ResponseRange.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n9 + } + return i, nil +} +func (m *ResponseOp_ResponsePut) MarshalTo(data []byte) (int, error) { + i := 0 + if m.ResponsePut != nil { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(m.ResponsePut.Size())) + n10, err := m.ResponsePut.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n10 + } + return i, nil +} +func (m *ResponseOp_ResponseDeleteRange) MarshalTo(data []byte) (int, error) { + i := 0 + if m.ResponseDeleteRange != nil { + data[i] = 0x1a + i++ + i = encodeVarintRpc(data, i, uint64(m.ResponseDeleteRange.Size())) + n11, err := m.ResponseDeleteRange.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n11 + } + return i, nil +} +func (m *Compare) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Compare) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Result != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.Result)) + } + if m.Target != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.Target)) + } + if len(m.Key) > 0 { + data[i] = 0x1a + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + } + if m.TargetUnion != nil { + nn12, err := m.TargetUnion.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += nn12 + } + return i, nil +} + +func (m *Compare_Version) MarshalTo(data []byte) (int, error) { + i := 0 + data[i] = 0x20 + i++ + i = encodeVarintRpc(data, i, uint64(m.Version)) + return i, nil +} +func (m *Compare_CreateRevision) MarshalTo(data []byte) (int, error) { + i := 0 + data[i] = 0x28 + i++ + i = encodeVarintRpc(data, i, uint64(m.CreateRevision)) + return i, nil +} +func (m *Compare_ModRevision) MarshalTo(data []byte) (int, error) { + i := 0 + data[i] = 0x30 + i++ + i = encodeVarintRpc(data, i, uint64(m.ModRevision)) + return i, nil +} +func (m *Compare_Value) MarshalTo(data []byte) (int, error) { + i := 0 + if m.Value != nil { + data[i] = 0x3a + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Value))) + i += copy(data[i:], m.Value) + } + return i, nil +} +func (m *TxnRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *TxnRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Compare) > 0 { + for _, msg := range m.Compare { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Success) > 0 { + for _, msg := range m.Success { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Failure) > 0 { + for _, msg := range m.Failure { + data[i] = 0x1a + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *TxnResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *TxnResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n13, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n13 + } + if m.Succeeded { + data[i] = 0x10 + i++ + if m.Succeeded { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if len(m.Responses) > 0 { + for _, msg := range m.Responses { + data[i] = 0x1a + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *CompactionRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CompactionRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Revision != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.Revision)) + } + if m.Physical { + data[i] = 0x10 + i++ + if m.Physical { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + +func (m *CompactionResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CompactionResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n14, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n14 + } + return i, nil +} + +func (m *HashRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *HashRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *HashResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *HashResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n15, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n15 + } + if m.Hash != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.Hash)) + } + return i, nil +} + +func (m *SnapshotRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SnapshotRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *SnapshotResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SnapshotResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n16, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n16 + } + if m.RemainingBytes != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.RemainingBytes)) + } + if len(m.Blob) > 0 { + data[i] = 0x1a + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Blob))) + i += copy(data[i:], m.Blob) + } + return i, nil +} + +func (m *WatchRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *WatchRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.RequestUnion != nil { + nn17, err := m.RequestUnion.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += nn17 + } + return i, nil +} + +func (m *WatchRequest_CreateRequest) MarshalTo(data []byte) (int, error) { + i := 0 + if m.CreateRequest != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.CreateRequest.Size())) + n18, err := m.CreateRequest.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n18 + } + return i, nil +} +func (m *WatchRequest_CancelRequest) MarshalTo(data []byte) (int, error) { + i := 0 + if m.CancelRequest != nil { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(m.CancelRequest.Size())) + n19, err := m.CancelRequest.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n19 + } + return i, nil +} +func (m *WatchCreateRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *WatchCreateRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Key) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + } + if len(m.RangeEnd) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.RangeEnd))) + i += copy(data[i:], m.RangeEnd) + } + if m.StartRevision != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.StartRevision)) + } + if m.ProgressNotify { + data[i] = 0x20 + i++ + if m.ProgressNotify { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + +func (m *WatchCancelRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *WatchCancelRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.WatchId != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.WatchId)) + } + return i, nil +} + +func (m *WatchResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *WatchResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n20, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n20 + } + if m.WatchId != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.WatchId)) + } + if m.Created { + data[i] = 0x18 + i++ + if m.Created { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if m.Canceled { + data[i] = 0x20 + i++ + if m.Canceled { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if m.CompactRevision != 0 { + data[i] = 0x28 + i++ + i = encodeVarintRpc(data, i, uint64(m.CompactRevision)) + } + if len(m.Events) > 0 { + for _, msg := range m.Events { + data[i] = 0x5a + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *LeaseGrantRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LeaseGrantRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.TTL != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.TTL)) + } + if m.ID != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + return i, nil +} + +func (m *LeaseGrantResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LeaseGrantResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n21, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n21 + } + if m.ID != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + if m.TTL != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.TTL)) + } + if len(m.Error) > 0 { + data[i] = 0x22 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Error))) + i += copy(data[i:], m.Error) + } + return i, nil +} + +func (m *LeaseRevokeRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LeaseRevokeRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + return i, nil +} + +func (m *LeaseRevokeResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LeaseRevokeResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n22, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n22 + } + return i, nil +} + +func (m *LeaseKeepAliveRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LeaseKeepAliveRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + return i, nil +} + +func (m *LeaseKeepAliveResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LeaseKeepAliveResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n23, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n23 + } + if m.ID != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + if m.TTL != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.TTL)) + } + return i, nil +} + +func (m *Member) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Member) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + if len(m.Name) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if len(m.PeerURLs) > 0 { + for _, s := range m.PeerURLs { + data[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.ClientURLs) > 0 { + for _, s := range m.ClientURLs { + data[i] = 0x22 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *MemberAddRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *MemberAddRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.PeerURLs) > 0 { + for _, s := range m.PeerURLs { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *MemberAddResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *MemberAddResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n24, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n24 + } + if m.Member != nil { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(m.Member.Size())) + n25, err := m.Member.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n25 + } + return i, nil +} + +func (m *MemberRemoveRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *MemberRemoveRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + return i, nil +} + +func (m *MemberRemoveResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *MemberRemoveResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n26, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n26 + } + return i, nil +} + +func (m *MemberUpdateRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *MemberUpdateRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.ID)) + } + if len(m.PeerURLs) > 0 { + for _, s := range m.PeerURLs { + data[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *MemberUpdateResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *MemberUpdateResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n27, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n27 + } + return i, nil +} + +func (m *MemberListRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *MemberListRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *MemberListResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *MemberListResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n28, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n28 + } + if len(m.Members) > 0 { + for _, msg := range m.Members { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *DefragmentRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *DefragmentRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *DefragmentResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *DefragmentResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n29, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n29 + } + return i, nil +} + +func (m *AlarmRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AlarmRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Action != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.Action)) + } + if m.MemberID != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.MemberID)) + } + if m.Alarm != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.Alarm)) + } + return i, nil +} + +func (m *AlarmMember) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AlarmMember) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.MemberID != 0 { + data[i] = 0x8 + i++ + i = encodeVarintRpc(data, i, uint64(m.MemberID)) + } + if m.Alarm != 0 { + data[i] = 0x10 + i++ + i = encodeVarintRpc(data, i, uint64(m.Alarm)) + } + return i, nil +} + +func (m *AlarmResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AlarmResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n30, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n30 + } + if len(m.Alarms) > 0 { + for _, msg := range m.Alarms { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *StatusRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *StatusRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *StatusResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *StatusResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n31, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n31 + } + if len(m.Version) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Version))) + i += copy(data[i:], m.Version) + } + if m.DbSize != 0 { + data[i] = 0x18 + i++ + i = encodeVarintRpc(data, i, uint64(m.DbSize)) + } + if m.Leader != 0 { + data[i] = 0x20 + i++ + i = encodeVarintRpc(data, i, uint64(m.Leader)) + } + if m.RaftIndex != 0 { + data[i] = 0x28 + i++ + i = encodeVarintRpc(data, i, uint64(m.RaftIndex)) + } + if m.RaftTerm != 0 { + data[i] = 0x30 + i++ + i = encodeVarintRpc(data, i, uint64(m.RaftTerm)) + } + return i, nil +} + +func (m *AuthEnableRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthEnableRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *AuthDisableRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthDisableRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *AuthenticateRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthenticateRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if len(m.Password) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Password))) + i += copy(data[i:], m.Password) + } + return i, nil +} + +func (m *AuthUserAddRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserAddRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if len(m.Password) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Password))) + i += copy(data[i:], m.Password) + } + return i, nil +} + +func (m *AuthUserGetRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserGetRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + return i, nil +} + +func (m *AuthUserDeleteRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserDeleteRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + return i, nil +} + +func (m *AuthUserChangePasswordRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserChangePasswordRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if len(m.Password) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Password))) + i += copy(data[i:], m.Password) + } + return i, nil +} + +func (m *AuthUserGrantRoleRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserGrantRoleRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.User) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.User))) + i += copy(data[i:], m.User) + } + if len(m.Role) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Role))) + i += copy(data[i:], m.Role) + } + return i, nil +} + +func (m *AuthUserRevokeRoleRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserRevokeRoleRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if len(m.Role) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Role))) + i += copy(data[i:], m.Role) + } + return i, nil +} + +func (m *AuthRoleAddRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleAddRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + return i, nil +} + +func (m *AuthRoleGetRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleGetRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Role) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Role))) + i += copy(data[i:], m.Role) + } + return i, nil +} + +func (m *AuthUserListRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserListRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *AuthRoleListRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleListRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + return i, nil +} + +func (m *AuthRoleDeleteRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleDeleteRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Role) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Role))) + i += copy(data[i:], m.Role) + } + return i, nil +} + +func (m *AuthRoleGrantPermissionRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleGrantPermissionRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Name) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + } + if m.Perm != nil { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(m.Perm.Size())) + n32, err := m.Perm.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n32 + } + return i, nil +} + +func (m *AuthRoleRevokePermissionRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleRevokePermissionRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Role) > 0 { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Role))) + i += copy(data[i:], m.Role) + } + if len(m.Key) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + } + if len(m.RangeEnd) > 0 { + data[i] = 0x1a + i++ + i = encodeVarintRpc(data, i, uint64(len(m.RangeEnd))) + i += copy(data[i:], m.RangeEnd) + } + return i, nil +} + +func (m *AuthEnableResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthEnableResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n33, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n33 + } + return i, nil +} + +func (m *AuthDisableResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthDisableResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n34, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n34 + } + return i, nil +} + +func (m *AuthenticateResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthenticateResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n35, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n35 + } + if len(m.Token) > 0 { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(len(m.Token))) + i += copy(data[i:], m.Token) + } + return i, nil +} + +func (m *AuthUserAddResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserAddResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n36, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n36 + } + return i, nil +} + +func (m *AuthUserGetResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserGetResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n37, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n37 + } + if len(m.Roles) > 0 { + for _, s := range m.Roles { + data[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *AuthUserDeleteResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserDeleteResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n38, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n38 + } + return i, nil +} + +func (m *AuthUserChangePasswordResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserChangePasswordResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n39, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n39 + } + return i, nil +} + +func (m *AuthUserGrantRoleResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserGrantRoleResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n40, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n40 + } + return i, nil +} + +func (m *AuthUserRevokeRoleResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserRevokeRoleResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n41, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n41 + } + return i, nil +} + +func (m *AuthRoleAddResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleAddResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n42, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n42 + } + return i, nil +} + +func (m *AuthRoleGetResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleGetResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n43, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n43 + } + if len(m.Perm) > 0 { + for _, msg := range m.Perm { + data[i] = 0x12 + i++ + i = encodeVarintRpc(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *AuthRoleListResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleListResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n44, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n44 + } + if len(m.Roles) > 0 { + for _, s := range m.Roles { + data[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *AuthUserListResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthUserListResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n45, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n45 + } + if len(m.Users) > 0 { + for _, s := range m.Users { + data[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *AuthRoleDeleteResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleDeleteResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n46, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n46 + } + return i, nil +} + +func (m *AuthRoleGrantPermissionResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleGrantPermissionResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n47, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n47 + } + return i, nil +} + +func (m *AuthRoleRevokePermissionResponse) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AuthRoleRevokePermissionResponse) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Header != nil { + data[i] = 0xa + i++ + i = encodeVarintRpc(data, i, uint64(m.Header.Size())) + n48, err := m.Header.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n48 + } + return i, nil +} + +func encodeFixed64Rpc(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Rpc(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintRpc(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *ResponseHeader) Size() (n int) { + var l int + _ = l + if m.ClusterId != 0 { + n += 1 + sovRpc(uint64(m.ClusterId)) + } + if m.MemberId != 0 { + n += 1 + sovRpc(uint64(m.MemberId)) + } + if m.Revision != 0 { + n += 1 + sovRpc(uint64(m.Revision)) + } + if m.RaftTerm != 0 { + n += 1 + sovRpc(uint64(m.RaftTerm)) + } + return n +} + +func (m *RangeRequest) Size() (n int) { + var l int + _ = l + l = len(m.Key) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.RangeEnd) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + if m.Limit != 0 { + n += 1 + sovRpc(uint64(m.Limit)) + } + if m.Revision != 0 { + n += 1 + sovRpc(uint64(m.Revision)) + } + if m.SortOrder != 0 { + n += 1 + sovRpc(uint64(m.SortOrder)) + } + if m.SortTarget != 0 { + n += 1 + sovRpc(uint64(m.SortTarget)) + } + if m.Serializable { + n += 2 + } + if m.KeysOnly { + n += 2 + } + if m.CountOnly { + n += 2 + } + return n +} + +func (m *RangeResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if len(m.Kvs) > 0 { + for _, e := range m.Kvs { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + if m.More { + n += 2 + } + if m.Count != 0 { + n += 1 + sovRpc(uint64(m.Count)) + } + return n +} + +func (m *PutRequest) Size() (n int) { + var l int + _ = l + l = len(m.Key) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Value) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + if m.Lease != 0 { + n += 1 + sovRpc(uint64(m.Lease)) + } + return n +} + +func (m *PutResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *DeleteRangeRequest) Size() (n int) { + var l int + _ = l + l = len(m.Key) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.RangeEnd) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *DeleteRangeResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.Deleted != 0 { + n += 1 + sovRpc(uint64(m.Deleted)) + } + return n +} + +func (m *RequestOp) Size() (n int) { + var l int + _ = l + if m.Request != nil { + n += m.Request.Size() + } + return n +} + +func (m *RequestOp_RequestRange) Size() (n int) { + var l int + _ = l + if m.RequestRange != nil { + l = m.RequestRange.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *RequestOp_RequestPut) Size() (n int) { + var l int + _ = l + if m.RequestPut != nil { + l = m.RequestPut.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *RequestOp_RequestDeleteRange) Size() (n int) { + var l int + _ = l + if m.RequestDeleteRange != nil { + l = m.RequestDeleteRange.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *ResponseOp) Size() (n int) { + var l int + _ = l + if m.Response != nil { + n += m.Response.Size() + } + return n +} + +func (m *ResponseOp_ResponseRange) Size() (n int) { + var l int + _ = l + if m.ResponseRange != nil { + l = m.ResponseRange.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *ResponseOp_ResponsePut) Size() (n int) { + var l int + _ = l + if m.ResponsePut != nil { + l = m.ResponsePut.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *ResponseOp_ResponseDeleteRange) Size() (n int) { + var l int + _ = l + if m.ResponseDeleteRange != nil { + l = m.ResponseDeleteRange.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *Compare) Size() (n int) { + var l int + _ = l + if m.Result != 0 { + n += 1 + sovRpc(uint64(m.Result)) + } + if m.Target != 0 { + n += 1 + sovRpc(uint64(m.Target)) + } + l = len(m.Key) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + if m.TargetUnion != nil { + n += m.TargetUnion.Size() + } + return n +} + +func (m *Compare_Version) Size() (n int) { + var l int + _ = l + n += 1 + sovRpc(uint64(m.Version)) + return n +} +func (m *Compare_CreateRevision) Size() (n int) { + var l int + _ = l + n += 1 + sovRpc(uint64(m.CreateRevision)) + return n +} +func (m *Compare_ModRevision) Size() (n int) { + var l int + _ = l + n += 1 + sovRpc(uint64(m.ModRevision)) + return n +} +func (m *Compare_Value) Size() (n int) { + var l int + _ = l + if m.Value != nil { + l = len(m.Value) + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *TxnRequest) Size() (n int) { + var l int + _ = l + if len(m.Compare) > 0 { + for _, e := range m.Compare { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + if len(m.Success) > 0 { + for _, e := range m.Success { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + if len(m.Failure) > 0 { + for _, e := range m.Failure { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *TxnResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.Succeeded { + n += 2 + } + if len(m.Responses) > 0 { + for _, e := range m.Responses { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *CompactionRequest) Size() (n int) { + var l int + _ = l + if m.Revision != 0 { + n += 1 + sovRpc(uint64(m.Revision)) + } + if m.Physical { + n += 2 + } + return n +} + +func (m *CompactionResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *HashRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *HashResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.Hash != 0 { + n += 1 + sovRpc(uint64(m.Hash)) + } + return n +} + +func (m *SnapshotRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *SnapshotResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.RemainingBytes != 0 { + n += 1 + sovRpc(uint64(m.RemainingBytes)) + } + l = len(m.Blob) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *WatchRequest) Size() (n int) { + var l int + _ = l + if m.RequestUnion != nil { + n += m.RequestUnion.Size() + } + return n +} + +func (m *WatchRequest_CreateRequest) Size() (n int) { + var l int + _ = l + if m.CreateRequest != nil { + l = m.CreateRequest.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *WatchRequest_CancelRequest) Size() (n int) { + var l int + _ = l + if m.CancelRequest != nil { + l = m.CancelRequest.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} +func (m *WatchCreateRequest) Size() (n int) { + var l int + _ = l + l = len(m.Key) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.RangeEnd) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + if m.StartRevision != 0 { + n += 1 + sovRpc(uint64(m.StartRevision)) + } + if m.ProgressNotify { + n += 2 + } + return n +} + +func (m *WatchCancelRequest) Size() (n int) { + var l int + _ = l + if m.WatchId != 0 { + n += 1 + sovRpc(uint64(m.WatchId)) + } + return n +} + +func (m *WatchResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.WatchId != 0 { + n += 1 + sovRpc(uint64(m.WatchId)) + } + if m.Created { + n += 2 + } + if m.Canceled { + n += 2 + } + if m.CompactRevision != 0 { + n += 1 + sovRpc(uint64(m.CompactRevision)) + } + if len(m.Events) > 0 { + for _, e := range m.Events { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *LeaseGrantRequest) Size() (n int) { + var l int + _ = l + if m.TTL != 0 { + n += 1 + sovRpc(uint64(m.TTL)) + } + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + return n +} + +func (m *LeaseGrantResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + if m.TTL != 0 { + n += 1 + sovRpc(uint64(m.TTL)) + } + l = len(m.Error) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *LeaseRevokeRequest) Size() (n int) { + var l int + _ = l + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + return n +} + +func (m *LeaseRevokeResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *LeaseKeepAliveRequest) Size() (n int) { + var l int + _ = l + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + return n +} + +func (m *LeaseKeepAliveResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + if m.TTL != 0 { + n += 1 + sovRpc(uint64(m.TTL)) + } + return n +} + +func (m *Member) Size() (n int) { + var l int + _ = l + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + if len(m.PeerURLs) > 0 { + for _, s := range m.PeerURLs { + l = len(s) + n += 1 + l + sovRpc(uint64(l)) + } + } + if len(m.ClientURLs) > 0 { + for _, s := range m.ClientURLs { + l = len(s) + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *MemberAddRequest) Size() (n int) { + var l int + _ = l + if len(m.PeerURLs) > 0 { + for _, s := range m.PeerURLs { + l = len(s) + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *MemberAddResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if m.Member != nil { + l = m.Member.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *MemberRemoveRequest) Size() (n int) { + var l int + _ = l + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + return n +} + +func (m *MemberRemoveResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *MemberUpdateRequest) Size() (n int) { + var l int + _ = l + if m.ID != 0 { + n += 1 + sovRpc(uint64(m.ID)) + } + if len(m.PeerURLs) > 0 { + for _, s := range m.PeerURLs { + l = len(s) + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *MemberUpdateResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *MemberListRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *MemberListResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if len(m.Members) > 0 { + for _, e := range m.Members { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *DefragmentRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *DefragmentResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AlarmRequest) Size() (n int) { + var l int + _ = l + if m.Action != 0 { + n += 1 + sovRpc(uint64(m.Action)) + } + if m.MemberID != 0 { + n += 1 + sovRpc(uint64(m.MemberID)) + } + if m.Alarm != 0 { + n += 1 + sovRpc(uint64(m.Alarm)) + } + return n +} + +func (m *AlarmMember) Size() (n int) { + var l int + _ = l + if m.MemberID != 0 { + n += 1 + sovRpc(uint64(m.MemberID)) + } + if m.Alarm != 0 { + n += 1 + sovRpc(uint64(m.Alarm)) + } + return n +} + +func (m *AlarmResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if len(m.Alarms) > 0 { + for _, e := range m.Alarms { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *StatusRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *StatusResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + if m.DbSize != 0 { + n += 1 + sovRpc(uint64(m.DbSize)) + } + if m.Leader != 0 { + n += 1 + sovRpc(uint64(m.Leader)) + } + if m.RaftIndex != 0 { + n += 1 + sovRpc(uint64(m.RaftIndex)) + } + if m.RaftTerm != 0 { + n += 1 + sovRpc(uint64(m.RaftTerm)) + } + return n +} + +func (m *AuthEnableRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *AuthDisableRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *AuthenticateRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Password) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserAddRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Password) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserGetRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserDeleteRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserChangePasswordRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Password) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserGrantRoleRequest) Size() (n int) { + var l int + _ = l + l = len(m.User) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Role) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserRevokeRoleRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Role) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthRoleAddRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthRoleGetRequest) Size() (n int) { + var l int + _ = l + l = len(m.Role) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserListRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *AuthRoleListRequest) Size() (n int) { + var l int + _ = l + return n +} + +func (m *AuthRoleDeleteRequest) Size() (n int) { + var l int + _ = l + l = len(m.Role) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthRoleGrantPermissionRequest) Size() (n int) { + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + if m.Perm != nil { + l = m.Perm.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthRoleRevokePermissionRequest) Size() (n int) { + var l int + _ = l + l = len(m.Role) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Key) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.RangeEnd) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthEnableResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthDisableResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthenticateResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + l = len(m.Token) + if l > 0 { + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserAddResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserGetResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if len(m.Roles) > 0 { + for _, s := range m.Roles { + l = len(s) + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *AuthUserDeleteResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserChangePasswordResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserGrantRoleResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthUserRevokeRoleResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthRoleAddResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthRoleGetResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if len(m.Perm) > 0 { + for _, e := range m.Perm { + l = e.Size() + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *AuthRoleListResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if len(m.Roles) > 0 { + for _, s := range m.Roles { + l = len(s) + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *AuthUserListResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + if len(m.Users) > 0 { + for _, s := range m.Users { + l = len(s) + n += 1 + l + sovRpc(uint64(l)) + } + } + return n +} + +func (m *AuthRoleDeleteResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthRoleGrantPermissionResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func (m *AuthRoleRevokePermissionResponse) Size() (n int) { + var l int + _ = l + if m.Header != nil { + l = m.Header.Size() + n += 1 + l + sovRpc(uint64(l)) + } + return n +} + +func sovRpc(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozRpc(x uint64) (n int) { + return sovRpc(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ResponseHeader) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResponseHeader: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResponseHeader: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterId", wireType) + } + m.ClusterId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ClusterId |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MemberId", wireType) + } + m.MemberId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.MemberId |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + m.Revision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Revision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RaftTerm", wireType) + } + m.RaftTerm = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.RaftTerm |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RangeRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RangeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RangeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], data[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RangeEnd = append(m.RangeEnd[:0], data[iNdEx:postIndex]...) + if m.RangeEnd == nil { + m.RangeEnd = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) + } + m.Limit = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Limit |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + m.Revision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Revision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SortOrder", wireType) + } + m.SortOrder = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.SortOrder |= (RangeRequest_SortOrder(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SortTarget", wireType) + } + m.SortTarget = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.SortTarget |= (RangeRequest_SortTarget(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Serializable", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Serializable = bool(v != 0) + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field KeysOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.KeysOnly = bool(v != 0) + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CountOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.CountOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RangeResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RangeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RangeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kvs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kvs = append(m.Kvs, &mvccpb.KeyValue{}) + if err := m.Kvs[len(m.Kvs)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field More", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.More = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Count |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PutRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PutRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PutRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], data[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = append(m.Value[:0], data[iNdEx:postIndex]...) + if m.Value == nil { + m.Value = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Lease", wireType) + } + m.Lease = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Lease |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PutResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PutResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PutResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteRangeRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteRangeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteRangeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], data[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RangeEnd = append(m.RangeEnd[:0], data[iNdEx:postIndex]...) + if m.RangeEnd == nil { + m.RangeEnd = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteRangeResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteRangeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteRangeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Deleted", wireType) + } + m.Deleted = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Deleted |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RequestOp) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RequestOp: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RequestOp: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequestRange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &RangeRequest{} + if err := v.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + m.Request = &RequestOp_RequestRange{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequestPut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &PutRequest{} + if err := v.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + m.Request = &RequestOp_RequestPut{v} + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequestDeleteRange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &DeleteRangeRequest{} + if err := v.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + m.Request = &RequestOp_RequestDeleteRange{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResponseOp) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResponseOp: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResponseOp: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResponseRange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &RangeResponse{} + if err := v.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + m.Response = &ResponseOp_ResponseRange{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResponsePut", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &PutResponse{} + if err := v.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + m.Response = &ResponseOp_ResponsePut{v} + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResponseDeleteRange", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &DeleteRangeResponse{} + if err := v.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + m.Response = &ResponseOp_ResponseDeleteRange{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Compare) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Compare: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Compare: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + m.Result = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Result |= (Compare_CompareResult(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + m.Target = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Target |= (Compare_CompareTarget(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], data[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TargetUnion = &Compare_Version{v} + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreateRevision", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TargetUnion = &Compare_CreateRevision{v} + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ModRevision", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TargetUnion = &Compare_ModRevision{v} + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := make([]byte, postIndex-iNdEx) + copy(v, data[iNdEx:postIndex]) + m.TargetUnion = &Compare_Value{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TxnRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TxnRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TxnRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Compare", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Compare = append(m.Compare, &Compare{}) + if err := m.Compare[len(m.Compare)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Success", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Success = append(m.Success, &RequestOp{}) + if err := m.Success[len(m.Success)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Failure", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Failure = append(m.Failure, &RequestOp{}) + if err := m.Failure[len(m.Failure)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TxnResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TxnResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TxnResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Succeeded", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Succeeded = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Responses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Responses = append(m.Responses, &ResponseOp{}) + if err := m.Responses[len(m.Responses)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CompactionRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CompactionRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CompactionRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + m.Revision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Revision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Physical", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Physical = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CompactionResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CompactionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CompactionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HashRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HashRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HashRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HashResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HashResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HashResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Hash", wireType) + } + m.Hash = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Hash |= (uint32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SnapshotRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SnapshotRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SnapshotRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SnapshotResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SnapshotResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SnapshotResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RemainingBytes", wireType) + } + m.RemainingBytes = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.RemainingBytes |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Blob", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Blob = append(m.Blob[:0], data[iNdEx:postIndex]...) + if m.Blob == nil { + m.Blob = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WatchRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WatchRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WatchRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CreateRequest", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &WatchCreateRequest{} + if err := v.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + m.RequestUnion = &WatchRequest_CreateRequest{v} + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CancelRequest", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &WatchCancelRequest{} + if err := v.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + m.RequestUnion = &WatchRequest_CancelRequest{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WatchCreateRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WatchCreateRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WatchCreateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], data[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RangeEnd = append(m.RangeEnd[:0], data[iNdEx:postIndex]...) + if m.RangeEnd == nil { + m.RangeEnd = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartRevision", wireType) + } + m.StartRevision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.StartRevision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProgressNotify", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ProgressNotify = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WatchCancelRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WatchCancelRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WatchCancelRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WatchId", wireType) + } + m.WatchId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.WatchId |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WatchResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WatchResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WatchResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field WatchId", wireType) + } + m.WatchId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.WatchId |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Created = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Canceled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Canceled = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CompactRevision", wireType) + } + m.CompactRevision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.CompactRevision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Events", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Events = append(m.Events, &mvccpb.Event{}) + if err := m.Events[len(m.Events)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseGrantRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseGrantRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseGrantRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) + } + m.TTL = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.TTL |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseGrantResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseGrantResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseGrantResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) + } + m.TTL = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.TTL |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Error = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseRevokeRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseRevokeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseRevokeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseRevokeResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseRevokeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseRevokeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseKeepAliveRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseKeepAliveRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseKeepAliveRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LeaseKeepAliveResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LeaseKeepAliveResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LeaseKeepAliveResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTL", wireType) + } + m.TTL = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.TTL |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Member) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Member: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Member: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerURLs = append(m.PeerURLs, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientURLs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientURLs = append(m.ClientURLs, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemberAddRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemberAddRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemberAddRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerURLs = append(m.PeerURLs, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemberAddResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemberAddResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemberAddResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Member", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Member == nil { + m.Member = &Member{} + } + if err := m.Member.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemberRemoveRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemberRemoveRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemberRemoveRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemberRemoveResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemberRemoveResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemberRemoveResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemberUpdateRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemberUpdateRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemberUpdateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ID", wireType) + } + m.ID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PeerURLs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PeerURLs = append(m.PeerURLs, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemberUpdateResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemberUpdateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemberUpdateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemberListRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemberListRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemberListRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MemberListResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MemberListResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MemberListResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Members", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Members = append(m.Members, &Member{}) + if err := m.Members[len(m.Members)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DefragmentRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DefragmentRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DefragmentRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DefragmentResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DefragmentResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DefragmentResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AlarmRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AlarmRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AlarmRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) + } + m.Action = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Action |= (AlarmRequest_AlarmAction(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MemberID", wireType) + } + m.MemberID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.MemberID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType) + } + m.Alarm = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Alarm |= (AlarmType(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AlarmMember) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AlarmMember: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AlarmMember: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MemberID", wireType) + } + m.MemberID = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.MemberID |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Alarm", wireType) + } + m.Alarm = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Alarm |= (AlarmType(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AlarmResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AlarmResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AlarmResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Alarms", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Alarms = append(m.Alarms, &AlarmMember{}) + if err := m.Alarms[len(m.Alarms)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StatusRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StatusRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StatusResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StatusResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DbSize", wireType) + } + m.DbSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.DbSize |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Leader", wireType) + } + m.Leader = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Leader |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RaftIndex", wireType) + } + m.RaftIndex = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.RaftIndex |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RaftTerm", wireType) + } + m.RaftTerm = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.RaftTerm |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthEnableRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthEnableRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthEnableRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthDisableRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthDisableRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthDisableRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthenticateRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthenticateRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthenticateRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Password = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserAddRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserAddRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserAddRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Password = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserGetRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserGetRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserGetRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserDeleteRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserDeleteRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserChangePasswordRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserChangePasswordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserChangePasswordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Password", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Password = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserGrantRoleRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserGrantRoleRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserGrantRoleRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Role = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserRevokeRoleRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserRevokeRoleRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserRevokeRoleRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Role = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleAddRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleAddRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleAddRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleGetRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleGetRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleGetRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Role = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserListRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserListRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserListRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleListRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleListRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleListRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleDeleteRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleDeleteRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleDeleteRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Role = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleGrantPermissionRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleGrantPermissionRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleGrantPermissionRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Perm", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Perm == nil { + m.Perm = &authpb.Permission{} + } + if err := m.Perm.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleRevokePermissionRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleRevokePermissionRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleRevokePermissionRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Role = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RangeEnd", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RangeEnd = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthEnableResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthEnableResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthEnableResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthDisableResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthDisableResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthDisableResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthenticateResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthenticateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthenticateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Token = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserAddResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserAddResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserAddResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserGetResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserGetResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserGetResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Roles = append(m.Roles, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserDeleteResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserDeleteResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserDeleteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserChangePasswordResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserChangePasswordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserChangePasswordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserGrantRoleResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserGrantRoleResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserGrantRoleResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserRevokeRoleResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserRevokeRoleResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserRevokeRoleResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleAddResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleAddResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleAddResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleGetResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleGetResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleGetResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Perm", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Perm = append(m.Perm, &authpb.Permission{}) + if err := m.Perm[len(m.Perm)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleListResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleListResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleListResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Roles", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Roles = append(m.Roles, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthUserListResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthUserListResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthUserListResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Users", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Users = append(m.Users, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleDeleteResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleDeleteResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleDeleteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleGrantPermissionResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleGrantPermissionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleGrantPermissionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AuthRoleRevokePermissionResponse) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AuthRoleRevokePermissionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AuthRoleRevokePermissionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRpc + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRpc + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Header == nil { + m.Header = &ResponseHeader{} + } + if err := m.Header.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRpc(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthRpc + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipRpc(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRpc + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRpc + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRpc + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthRpc + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRpc + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipRpc(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthRpc = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowRpc = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorRpc = []byte{ + // 3154 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x5a, 0xcd, 0x72, 0xe3, 0xc6, + 0xf1, 0x17, 0x48, 0x4a, 0x14, 0x9b, 0x14, 0xc5, 0x1d, 0x69, 0xd7, 0x14, 0x56, 0xab, 0xd5, 0xce, + 0x7e, 0xc9, 0x6b, 0x5b, 0xb4, 0x65, 0xff, 0xff, 0x87, 0x4d, 0xca, 0x55, 0x92, 0xc8, 0xac, 0x64, + 0xc9, 0xd2, 0x1a, 0xd2, 0xca, 0x4e, 0x55, 0x2a, 0x2a, 0x88, 0x9c, 0x25, 0x59, 0x22, 0x01, 0x1a, + 0x00, 0xb9, 0x2b, 0x27, 0xa9, 0x4a, 0xb9, 0xe2, 0x43, 0x72, 0xf5, 0x21, 0x5f, 0xc7, 0x3c, 0x43, + 0x6e, 0x79, 0x80, 0x54, 0x2e, 0x71, 0x55, 0x5e, 0x20, 0xb5, 0xc9, 0x21, 0x87, 0xdc, 0x53, 0x39, + 0xa4, 0x92, 0x9a, 0x2f, 0x60, 0x00, 0x02, 0x94, 0x1c, 0xc4, 0x17, 0x09, 0xd3, 0xd3, 0xd3, 0xbf, + 0x9e, 0x9e, 0xe9, 0x46, 0x77, 0x83, 0x50, 0x70, 0x06, 0xcd, 0xf5, 0x81, 0x63, 0x7b, 0x36, 0x2a, + 0x11, 0xaf, 0xd9, 0x72, 0x89, 0x33, 0x22, 0xce, 0xe0, 0x4c, 0x5f, 0x6c, 0xdb, 0x6d, 0x9b, 0x4d, + 0xd4, 0xe8, 0x13, 0xe7, 0xd1, 0x97, 0x28, 0x4f, 0xad, 0x3f, 0x6a, 0x36, 0xd9, 0x9f, 0xc1, 0x59, + 0xed, 0x7c, 0x24, 0xa6, 0x6e, 0xb2, 0x29, 0x73, 0xe8, 0x75, 0xd8, 0x9f, 0xc1, 0x19, 0xfb, 0x27, + 0x26, 0x97, 0xdb, 0xb6, 0xdd, 0xee, 0x91, 0x9a, 0x39, 0xe8, 0xd6, 0x4c, 0xcb, 0xb2, 0x3d, 0xd3, + 0xeb, 0xda, 0x96, 0xcb, 0x67, 0xf1, 0x17, 0x1a, 0x94, 0x0d, 0xe2, 0x0e, 0x6c, 0xcb, 0x25, 0x3b, + 0xc4, 0x6c, 0x11, 0x07, 0xdd, 0x02, 0x68, 0xf6, 0x86, 0xae, 0x47, 0x9c, 0xd3, 0x6e, 0xab, 0xaa, + 0xad, 0x6a, 0x6b, 0x39, 0xa3, 0x20, 0x28, 0xbb, 0x2d, 0x74, 0x13, 0x0a, 0x7d, 0xd2, 0x3f, 0xe3, + 0xb3, 0x19, 0x36, 0x3b, 0xcb, 0x09, 0xbb, 0x2d, 0xa4, 0xc3, 0xac, 0x43, 0x46, 0x5d, 0xb7, 0x6b, + 0x5b, 0xd5, 0xec, 0xaa, 0xb6, 0x96, 0x35, 0xfc, 0x31, 0x5d, 0xe8, 0x98, 0xcf, 0xbd, 0x53, 0x8f, + 0x38, 0xfd, 0x6a, 0x8e, 0x2f, 0xa4, 0x84, 0x63, 0xe2, 0xf4, 0xf1, 0x57, 0x59, 0x28, 0x19, 0xa6, + 0xd5, 0x26, 0x06, 0xf9, 0x74, 0x48, 0x5c, 0x0f, 0x55, 0x20, 0x7b, 0x4e, 0x2e, 0x18, 0x7c, 0xc9, + 0xa0, 0x8f, 0x7c, 0xbd, 0xd5, 0x26, 0xa7, 0xc4, 0xe2, 0xc0, 0x25, 0xba, 0xde, 0x6a, 0x93, 0x86, + 0xd5, 0x42, 0x8b, 0x30, 0xdd, 0xeb, 0xf6, 0xbb, 0x9e, 0x40, 0xe5, 0x83, 0x90, 0x3a, 0xb9, 0x88, + 0x3a, 0xdb, 0x00, 0xae, 0xed, 0x78, 0xa7, 0xb6, 0xd3, 0x22, 0x4e, 0x75, 0x7a, 0x55, 0x5b, 0x2b, + 0x6f, 0xdc, 0x5b, 0x57, 0x0f, 0x62, 0x5d, 0x55, 0x68, 0xfd, 0xc8, 0x76, 0xbc, 0x43, 0xca, 0x6b, + 0x14, 0x5c, 0xf9, 0x88, 0xbe, 0x03, 0x45, 0x26, 0xc4, 0x33, 0x9d, 0x36, 0xf1, 0xaa, 0x33, 0x4c, + 0xca, 0xfd, 0x4b, 0xa4, 0x1c, 0x33, 0x66, 0x83, 0xc1, 0xf3, 0x67, 0x84, 0xa1, 0xe4, 0x12, 0xa7, + 0x6b, 0xf6, 0xba, 0x9f, 0x99, 0x67, 0x3d, 0x52, 0xcd, 0xaf, 0x6a, 0x6b, 0xb3, 0x46, 0x88, 0x46, + 0xf7, 0x7f, 0x4e, 0x2e, 0xdc, 0x53, 0xdb, 0xea, 0x5d, 0x54, 0x67, 0x19, 0xc3, 0x2c, 0x25, 0x1c, + 0x5a, 0xbd, 0x0b, 0x76, 0x68, 0xf6, 0xd0, 0xf2, 0xf8, 0x6c, 0x81, 0xcd, 0x16, 0x18, 0x85, 0x4e, + 0xe3, 0x75, 0x28, 0xf8, 0xfa, 0xa3, 0x59, 0xc8, 0x1d, 0x1c, 0x1e, 0x34, 0x2a, 0x53, 0x08, 0x60, + 0x66, 0xf3, 0x68, 0xbb, 0x71, 0x50, 0xaf, 0x68, 0xa8, 0x08, 0xf9, 0x7a, 0x83, 0x0f, 0x32, 0x78, + 0x0b, 0x20, 0xd0, 0x14, 0xe5, 0x21, 0xbb, 0xd7, 0xf8, 0x6e, 0x65, 0x8a, 0xf2, 0x9c, 0x34, 0x8c, + 0xa3, 0xdd, 0xc3, 0x83, 0x8a, 0x46, 0x17, 0x6f, 0x1b, 0x8d, 0xcd, 0xe3, 0x46, 0x25, 0x43, 0x39, + 0x3e, 0x3c, 0xac, 0x57, 0xb2, 0xa8, 0x00, 0xd3, 0x27, 0x9b, 0xfb, 0xcf, 0x1a, 0x95, 0x1c, 0xfe, + 0x52, 0x83, 0x39, 0xb1, 0x77, 0x7e, 0xbf, 0xd0, 0x7b, 0x30, 0xd3, 0x61, 0x77, 0x8c, 0x1d, 0x6b, + 0x71, 0x63, 0x39, 0x62, 0xa8, 0xd0, 0x3d, 0x34, 0x04, 0x2f, 0xc2, 0x90, 0x3d, 0x1f, 0xb9, 0xd5, + 0xcc, 0x6a, 0x76, 0xad, 0xb8, 0x51, 0x59, 0xe7, 0x97, 0x7f, 0x7d, 0x8f, 0x5c, 0x9c, 0x98, 0xbd, + 0x21, 0x31, 0xe8, 0x24, 0x42, 0x90, 0xeb, 0xdb, 0x0e, 0x61, 0xa7, 0x3f, 0x6b, 0xb0, 0x67, 0x7a, + 0x25, 0x98, 0x01, 0xc4, 0xc9, 0xf3, 0x01, 0xfe, 0x00, 0xe0, 0xe9, 0xd0, 0x4b, 0xbe, 0x65, 0x8b, + 0x30, 0x3d, 0xa2, 0x72, 0xc5, 0x0d, 0xe3, 0x03, 0x76, 0xbd, 0x88, 0xe9, 0x12, 0xff, 0x7a, 0xd1, + 0x01, 0xde, 0x86, 0x22, 0x93, 0x95, 0x66, 0x7b, 0x78, 0x1b, 0x50, 0x9d, 0xf4, 0x88, 0x47, 0x52, + 0x5c, 0x7f, 0x4c, 0x60, 0x21, 0x24, 0x24, 0x95, 0xc1, 0xab, 0x90, 0x6f, 0x31, 0x61, 0x1c, 0x27, + 0x6b, 0xc8, 0x21, 0xfe, 0xbb, 0x06, 0x05, 0xa1, 0xe1, 0xe1, 0x00, 0x6d, 0xc2, 0x9c, 0xc3, 0x07, + 0xa7, 0x4c, 0x11, 0x01, 0xa2, 0x27, 0x5f, 0xff, 0x9d, 0x29, 0xa3, 0x24, 0x96, 0x30, 0x32, 0xfa, + 0x16, 0x14, 0xa5, 0x88, 0xc1, 0xd0, 0x63, 0x70, 0xc5, 0x8d, 0x6a, 0x58, 0x40, 0x70, 0x5c, 0x3b, + 0x53, 0x06, 0x08, 0xf6, 0xa7, 0x43, 0x0f, 0x1d, 0xc3, 0xa2, 0x5c, 0xcc, 0x15, 0x14, 0x6a, 0x64, + 0x99, 0x94, 0xd5, 0xb0, 0x94, 0x71, 0x1b, 0xef, 0x4c, 0x19, 0x48, 0xac, 0x57, 0x26, 0xb7, 0x0a, + 0x90, 0x17, 0x54, 0xfc, 0x0f, 0x0d, 0x40, 0xda, 0xe8, 0x70, 0x80, 0xea, 0x50, 0x76, 0xc4, 0x28, + 0xb4, 0xe1, 0x9b, 0xb1, 0x1b, 0x16, 0xa6, 0x9d, 0x32, 0xe6, 0xe4, 0x22, 0xbe, 0xe5, 0xf7, 0xa1, + 0xe4, 0x4b, 0x09, 0xf6, 0xbc, 0x14, 0xb3, 0x67, 0x5f, 0x42, 0x51, 0x2e, 0xa0, 0xbb, 0xfe, 0x18, + 0xae, 0xfb, 0xeb, 0x63, 0xb6, 0x7d, 0x67, 0xc2, 0xb6, 0x7d, 0x81, 0x0b, 0x52, 0x82, 0xba, 0x71, + 0xa0, 0xc1, 0x92, 0x93, 0xf1, 0xaf, 0xb2, 0x90, 0xdf, 0xb6, 0xfb, 0x03, 0xd3, 0xa1, 0x67, 0x34, + 0xe3, 0x10, 0x77, 0xd8, 0xf3, 0xd8, 0x76, 0xcb, 0x1b, 0x77, 0xc3, 0x08, 0x82, 0x4d, 0xfe, 0x37, + 0x18, 0xab, 0x21, 0x96, 0xd0, 0xc5, 0x22, 0x36, 0x66, 0xae, 0xb0, 0x58, 0x44, 0x46, 0xb1, 0x44, + 0x3a, 0x41, 0x36, 0x70, 0x02, 0x1d, 0xf2, 0x23, 0xe2, 0x04, 0xf1, 0x7c, 0x67, 0xca, 0x90, 0x04, + 0xf4, 0x3a, 0xcc, 0x37, 0x1d, 0x62, 0x52, 0x7b, 0xc8, 0x98, 0x3f, 0x2d, 0x78, 0xca, 0x7c, 0xc2, + 0x90, 0xb1, 0xff, 0x2e, 0x94, 0xfa, 0x76, 0x2b, 0xe0, 0x9b, 0x11, 0x7c, 0xc5, 0xbe, 0xdd, 0xf2, + 0x99, 0x6e, 0xc8, 0x48, 0x40, 0x83, 0x71, 0x69, 0x67, 0x4a, 0xc4, 0x02, 0xfc, 0x0e, 0xcc, 0x85, + 0xf6, 0x4a, 0x63, 0x5e, 0xe3, 0xa3, 0x67, 0x9b, 0xfb, 0x3c, 0x40, 0x3e, 0x61, 0x31, 0xd1, 0xa8, + 0x68, 0x34, 0xce, 0xee, 0x37, 0x8e, 0x8e, 0x2a, 0x19, 0xfc, 0x6d, 0x7f, 0x89, 0x88, 0xa8, 0x4a, + 0x20, 0x9d, 0x52, 0x02, 0xa9, 0x26, 0x03, 0x69, 0x26, 0x08, 0xa4, 0xd9, 0xad, 0x32, 0x94, 0xb8, + 0x41, 0x4e, 0x87, 0x56, 0xd7, 0xb6, 0xf0, 0x6f, 0x34, 0x80, 0xe3, 0x97, 0x96, 0x0c, 0x15, 0x35, + 0xc8, 0x37, 0xb9, 0xf0, 0xaa, 0xc6, 0x62, 0xe4, 0xf5, 0x58, 0x1b, 0x1b, 0x92, 0x0b, 0xbd, 0x03, + 0x79, 0x77, 0xd8, 0x6c, 0x12, 0x57, 0x06, 0xd5, 0xd7, 0xa2, 0x61, 0x41, 0x78, 0xb8, 0x21, 0xf9, + 0xe8, 0x92, 0xe7, 0x66, 0xb7, 0x37, 0x64, 0x21, 0x76, 0xf2, 0x12, 0xc1, 0x87, 0x7f, 0xa9, 0x41, + 0x91, 0x69, 0x99, 0x2a, 0x16, 0x2d, 0x43, 0x81, 0xe9, 0x40, 0x5a, 0x22, 0x1a, 0xcd, 0x1a, 0x01, + 0x01, 0xfd, 0x3f, 0x14, 0xe4, 0x95, 0x75, 0x85, 0x62, 0xd5, 0x78, 0xb1, 0x87, 0x03, 0x23, 0x60, + 0xc5, 0x7b, 0x70, 0x8d, 0x59, 0xa5, 0x49, 0x53, 0x21, 0x69, 0x47, 0x35, 0x59, 0xd0, 0x22, 0xc9, + 0x82, 0x0e, 0xb3, 0x83, 0xce, 0x85, 0xdb, 0x6d, 0x9a, 0x3d, 0xa1, 0x85, 0x3f, 0xc6, 0x1f, 0x00, + 0x52, 0x85, 0xa5, 0x7a, 0x19, 0xcc, 0x41, 0x71, 0xc7, 0x74, 0x3b, 0x42, 0x25, 0xfc, 0x09, 0x94, + 0xf8, 0x30, 0x95, 0x0d, 0x11, 0xe4, 0x3a, 0xa6, 0xdb, 0x61, 0x8a, 0xcf, 0x19, 0xec, 0x19, 0x5f, + 0x83, 0xf9, 0x23, 0xcb, 0x1c, 0xb8, 0x1d, 0x5b, 0x06, 0x57, 0x9a, 0x0a, 0x56, 0x02, 0x5a, 0x2a, + 0xc4, 0x87, 0x30, 0xef, 0x90, 0xbe, 0xd9, 0xb5, 0xba, 0x56, 0xfb, 0xf4, 0xec, 0xc2, 0x23, 0xae, + 0xc8, 0x14, 0xcb, 0x3e, 0x79, 0x8b, 0x52, 0xa9, 0x6a, 0x67, 0x3d, 0xfb, 0x4c, 0xb8, 0x38, 0x7b, + 0xc6, 0xbf, 0xd5, 0xa0, 0xf4, 0xb1, 0xe9, 0x35, 0xa5, 0x15, 0xd0, 0x2e, 0x94, 0x7d, 0xc7, 0x66, + 0x14, 0xa1, 0x4b, 0x24, 0xc2, 0xb3, 0x35, 0xdb, 0xc2, 0xd1, 0x65, 0x84, 0x9f, 0x6b, 0xaa, 0x04, + 0x26, 0xca, 0xb4, 0x9a, 0xa4, 0xe7, 0x8b, 0xca, 0x24, 0x8b, 0x62, 0x8c, 0xaa, 0x28, 0x95, 0xb0, + 0x35, 0x1f, 0xbc, 0xfd, 0xb8, 0x5b, 0x7e, 0xa9, 0x01, 0x1a, 0xd7, 0xe1, 0xeb, 0x26, 0xb2, 0xf7, + 0xa1, 0xec, 0x7a, 0xa6, 0xe3, 0x9d, 0x46, 0xf2, 0xe8, 0x39, 0x46, 0xf5, 0x83, 0xd3, 0x43, 0x98, + 0x1f, 0x38, 0x76, 0xdb, 0x21, 0xae, 0x7b, 0x6a, 0xd9, 0x5e, 0xf7, 0xf9, 0x05, 0x0b, 0x88, 0xb3, + 0x46, 0x59, 0x92, 0x0f, 0x18, 0x15, 0xd7, 0xa4, 0x52, 0xaa, 0xf2, 0x68, 0x09, 0x66, 0x5f, 0x50, + 0xaa, 0xcc, 0xf0, 0xb3, 0x46, 0x9e, 0x8d, 0x77, 0x5b, 0xf8, 0x6f, 0x1a, 0xcc, 0x09, 0xf3, 0xa7, + 0xba, 0x03, 0x2a, 0x44, 0x26, 0x04, 0x41, 0x13, 0x0c, 0x7e, 0x2c, 0x2d, 0x91, 0xb0, 0xc9, 0x21, + 0xf5, 0x33, 0x6e, 0x65, 0xd2, 0x12, 0xfb, 0xf1, 0xc7, 0xe8, 0x75, 0xa8, 0x34, 0xb9, 0x9f, 0x45, + 0x02, 0xbc, 0x31, 0x2f, 0xe8, 0xbe, 0x75, 0xee, 0xc3, 0x0c, 0x19, 0x11, 0xcb, 0x73, 0xab, 0x45, + 0x16, 0x14, 0xe6, 0x64, 0xd6, 0xd8, 0xa0, 0x54, 0x43, 0x4c, 0xe2, 0xff, 0x83, 0x6b, 0xfb, 0x34, + 0x91, 0x7b, 0xe2, 0x98, 0x96, 0x9a, 0x12, 0x1e, 0x1f, 0xef, 0x0b, 0xab, 0x64, 0xbd, 0xe3, 0x7d, + 0x54, 0x86, 0xcc, 0x6e, 0x5d, 0xec, 0x21, 0xd3, 0xad, 0xe3, 0xcf, 0x35, 0x40, 0xea, 0xba, 0x54, + 0x66, 0x8a, 0x08, 0x97, 0xf0, 0xd9, 0x00, 0x7e, 0x11, 0xa6, 0x89, 0xe3, 0xd8, 0x0e, 0x33, 0x48, + 0xc1, 0xe0, 0x03, 0x7c, 0x4f, 0xe8, 0x60, 0x90, 0x91, 0x7d, 0xee, 0x5f, 0x36, 0x2e, 0x4d, 0xf3, + 0x55, 0xdd, 0x83, 0x85, 0x10, 0x57, 0xaa, 0xe0, 0xf4, 0x10, 0xae, 0x33, 0x61, 0x7b, 0x84, 0x0c, + 0x36, 0x7b, 0xdd, 0x51, 0x22, 0xea, 0x00, 0x6e, 0x44, 0x19, 0xbf, 0x59, 0x1b, 0xe1, 0x0e, 0xcc, + 0x7c, 0xc8, 0x6a, 0x50, 0x45, 0x97, 0x1c, 0xe3, 0x45, 0x90, 0xb3, 0xcc, 0x3e, 0x4f, 0xe7, 0x0b, + 0x06, 0x7b, 0x66, 0xd1, 0x9c, 0x10, 0xe7, 0x99, 0xb1, 0xcf, 0xdf, 0x1a, 0x05, 0xc3, 0x1f, 0xa3, + 0x15, 0x5a, 0xfd, 0x76, 0x89, 0xe5, 0xb1, 0xd9, 0x1c, 0x9b, 0x55, 0x28, 0x78, 0x1d, 0x2a, 0x1c, + 0x69, 0xb3, 0xd5, 0x52, 0xde, 0x1c, 0xbe, 0x3c, 0x2d, 0x2c, 0x0f, 0xbf, 0x80, 0x6b, 0x0a, 0x7f, + 0x2a, 0x33, 0xbc, 0x09, 0x33, 0xbc, 0xd0, 0x16, 0x41, 0x6b, 0x31, 0xbc, 0x8a, 0xc3, 0x18, 0x82, + 0x07, 0xdf, 0x87, 0x05, 0x41, 0x21, 0x7d, 0x3b, 0xee, 0xac, 0x98, 0x7d, 0xf0, 0x3e, 0x2c, 0x86, + 0xd9, 0x52, 0x5d, 0x91, 0x4d, 0x09, 0xfa, 0x6c, 0xd0, 0x52, 0x62, 0x60, 0xf4, 0x50, 0x54, 0x83, + 0x65, 0x22, 0x06, 0xf3, 0x15, 0x92, 0x22, 0x52, 0x29, 0xb4, 0x20, 0xcd, 0xbf, 0xdf, 0x75, 0xfd, + 0x37, 0xdd, 0x67, 0x80, 0x54, 0x62, 0xaa, 0x43, 0x59, 0x87, 0x3c, 0x37, 0xb8, 0x4c, 0xa6, 0xe2, + 0x4f, 0x45, 0x32, 0x51, 0x85, 0xea, 0xe4, 0xb9, 0x63, 0xb6, 0xfb, 0xc4, 0x8f, 0x39, 0x34, 0x85, + 0x50, 0x89, 0xa9, 0x76, 0xfc, 0x47, 0x0d, 0x4a, 0x9b, 0x3d, 0xd3, 0xe9, 0x4b, 0xe3, 0xbf, 0x0f, + 0x33, 0x3c, 0x37, 0x11, 0xf9, 0xfb, 0x83, 0xb0, 0x18, 0x95, 0x97, 0x0f, 0x36, 0x79, 0x26, 0x23, + 0x56, 0xd1, 0xc3, 0x12, 0xfd, 0x9d, 0x7a, 0xa4, 0xdf, 0x53, 0x47, 0x6f, 0xc1, 0xb4, 0x49, 0x97, + 0x30, 0x5f, 0x2c, 0x47, 0xb3, 0x42, 0x26, 0xed, 0xf8, 0x62, 0x40, 0x0c, 0xce, 0x85, 0xdf, 0x83, + 0xa2, 0x82, 0x40, 0x93, 0xdd, 0x27, 0x8d, 0xe3, 0xca, 0x14, 0x2a, 0xc1, 0xec, 0xe6, 0xf6, 0xf1, + 0xee, 0x09, 0xcf, 0x81, 0xcb, 0x00, 0xf5, 0x86, 0x3f, 0xce, 0xe0, 0x4f, 0xc4, 0x2a, 0xe1, 0xe1, + 0xaa, 0x3e, 0x5a, 0x92, 0x3e, 0x99, 0x2b, 0xe9, 0xf3, 0x12, 0xe6, 0xc4, 0xf6, 0x53, 0xdd, 0x81, + 0x77, 0x60, 0x86, 0xc9, 0x93, 0x57, 0x60, 0x29, 0x06, 0x56, 0x7a, 0x27, 0x67, 0xc4, 0xf3, 0x30, + 0x77, 0xe4, 0x99, 0xde, 0xd0, 0x95, 0x57, 0xe0, 0x0f, 0x1a, 0x94, 0x25, 0x25, 0x6d, 0xf5, 0x2e, + 0x4b, 0x24, 0x1e, 0xf3, 0xfc, 0x02, 0xe9, 0x06, 0xcc, 0xb4, 0xce, 0x8e, 0xba, 0x9f, 0xc9, 0x2e, + 0x86, 0x18, 0x51, 0x7a, 0x8f, 0xe3, 0xf0, 0xae, 0x9c, 0x18, 0xd1, 0xdc, 0xdb, 0x31, 0x9f, 0x7b, + 0xbb, 0x56, 0x8b, 0xbc, 0x64, 0x6f, 0xda, 0x9c, 0x11, 0x10, 0x58, 0xba, 0x2c, 0xba, 0x77, 0xac, + 0x7e, 0x52, 0xbb, 0x79, 0x0b, 0x70, 0x6d, 0x73, 0xe8, 0x75, 0x1a, 0x96, 0x79, 0xd6, 0x93, 0x41, + 0x00, 0x2f, 0x02, 0xa2, 0xc4, 0x7a, 0xd7, 0x55, 0xa9, 0x0d, 0x58, 0xa0, 0x54, 0x62, 0x79, 0xdd, + 0xa6, 0x12, 0x31, 0x64, 0xd8, 0xd6, 0x22, 0x61, 0xdb, 0x74, 0xdd, 0x17, 0xb6, 0xd3, 0x12, 0x5b, + 0xf3, 0xc7, 0xb8, 0xce, 0x85, 0x3f, 0x73, 0x43, 0x81, 0xf9, 0xeb, 0x4a, 0x59, 0x0b, 0xa4, 0x3c, + 0x21, 0xde, 0x04, 0x29, 0xf8, 0x0d, 0xb8, 0x2e, 0x39, 0x45, 0x0d, 0x3d, 0x81, 0xf9, 0x10, 0x6e, + 0x49, 0xe6, 0xed, 0x0e, 0x4d, 0xf4, 0x9e, 0x0a, 0xc0, 0xff, 0x56, 0xcf, 0x2d, 0xa8, 0xfa, 0x7a, + 0xb2, 0x1c, 0xc4, 0xee, 0xa9, 0x0a, 0x0c, 0x5d, 0x71, 0x67, 0x0a, 0x06, 0x7b, 0xa6, 0x34, 0xc7, + 0xee, 0xf9, 0x2f, 0x41, 0xfa, 0x8c, 0xb7, 0x61, 0x49, 0xca, 0x10, 0xd9, 0x41, 0x58, 0xc8, 0x98, + 0x42, 0x71, 0x42, 0x84, 0xc1, 0xe8, 0xd2, 0xc9, 0x66, 0x57, 0x39, 0xc3, 0xa6, 0x65, 0x32, 0x35, + 0x45, 0xe6, 0x75, 0x7e, 0x23, 0xa8, 0x62, 0x6a, 0xd0, 0x16, 0x64, 0x2a, 0x40, 0x25, 0x8b, 0x83, + 0xa0, 0xe4, 0xb1, 0x83, 0x18, 0x13, 0xfd, 0x3d, 0x58, 0xf1, 0x95, 0xa0, 0x76, 0x7b, 0x4a, 0x9c, + 0x7e, 0xd7, 0x75, 0x95, 0x22, 0x30, 0x6e, 0xe3, 0x0f, 0x20, 0x37, 0x20, 0x22, 0xa6, 0x14, 0x37, + 0xd0, 0x3a, 0xef, 0xb1, 0xaf, 0x2b, 0x8b, 0xd9, 0x3c, 0x6e, 0xc1, 0x6d, 0x29, 0x9d, 0x5b, 0x34, + 0x56, 0x7c, 0x54, 0x29, 0x59, 0x20, 0x70, 0xb3, 0x8e, 0x17, 0x08, 0x59, 0x7e, 0xf6, 0x7e, 0xab, + 0xef, 0x03, 0x6e, 0x48, 0xe9, 0x5b, 0xa9, 0xde, 0x15, 0x7b, 0xdc, 0xa6, 0xbe, 0x4b, 0xa6, 0x12, + 0x76, 0x06, 0x8b, 0x61, 0x4f, 0x4e, 0x15, 0xc6, 0x16, 0x61, 0xda, 0xb3, 0xcf, 0x89, 0x0c, 0x62, + 0x7c, 0x20, 0x15, 0xf6, 0xdd, 0x3c, 0x95, 0xc2, 0x66, 0x20, 0x8c, 0x5d, 0xc9, 0xb4, 0xfa, 0xd2, + 0xd3, 0x94, 0xf9, 0x0c, 0x1f, 0xe0, 0x03, 0xb8, 0x11, 0x0d, 0x13, 0xa9, 0x54, 0x3e, 0xe1, 0x17, + 0x38, 0x2e, 0x92, 0xa4, 0x92, 0xfb, 0x51, 0x10, 0x0c, 0x94, 0x80, 0x92, 0x4a, 0xa4, 0x01, 0x7a, + 0x5c, 0x7c, 0xf9, 0x5f, 0xdc, 0x57, 0x3f, 0xdc, 0xa4, 0x12, 0xe6, 0x06, 0xc2, 0xd2, 0x1f, 0x7f, + 0x10, 0x23, 0xb2, 0x13, 0x63, 0x84, 0x70, 0x92, 0x20, 0x8a, 0x7d, 0x03, 0x97, 0x4e, 0x60, 0x04, + 0x01, 0x34, 0x2d, 0x06, 0x7d, 0x87, 0xf8, 0x18, 0x6c, 0x20, 0x2f, 0xb6, 0x1a, 0x76, 0x53, 0x1d, + 0xc6, 0xc7, 0x41, 0xec, 0x1c, 0x8b, 0xcc, 0xa9, 0x04, 0x7f, 0x02, 0xab, 0xc9, 0x41, 0x39, 0x8d, + 0xe4, 0x47, 0x18, 0x0a, 0x7e, 0x42, 0xa9, 0x7c, 0x53, 0x2b, 0x42, 0xfe, 0xe0, 0xf0, 0xe8, 0xe9, + 0xe6, 0x76, 0xa3, 0xa2, 0x6d, 0xfc, 0x2b, 0x0b, 0x99, 0xbd, 0x13, 0xf4, 0x7d, 0x98, 0xe6, 0xcd, + 0xff, 0x09, 0xdf, 0x46, 0xf4, 0x49, 0x9f, 0x11, 0xf0, 0xf2, 0xe7, 0x7f, 0xfa, 0xeb, 0x97, 0x99, + 0x1b, 0xf8, 0x5a, 0x6d, 0xf4, 0xae, 0xd9, 0x1b, 0x74, 0xcc, 0xda, 0xf9, 0xa8, 0xc6, 0xde, 0x09, + 0x8f, 0xb5, 0x47, 0xe8, 0x04, 0xb2, 0x4f, 0x87, 0x1e, 0x4a, 0xfc, 0x70, 0xa2, 0x27, 0x7f, 0x5e, + 0xc0, 0x3a, 0x93, 0xbc, 0x88, 0xe7, 0x55, 0xc9, 0x83, 0xa1, 0x47, 0xe5, 0x8e, 0xa0, 0xa8, 0x7c, + 0x21, 0x40, 0x97, 0x7e, 0x52, 0xd1, 0x2f, 0xff, 0xfa, 0x80, 0x31, 0xc3, 0x5b, 0xc6, 0xaf, 0xa9, + 0x78, 0xfc, 0x43, 0x86, 0xba, 0x9f, 0xe3, 0x97, 0x56, 0x74, 0x3f, 0x41, 0xcf, 0x3b, 0xba, 0x1f, + 0xa5, 0xcf, 0x1c, 0xbf, 0x1f, 0xef, 0xa5, 0x45, 0xe5, 0xda, 0xe2, 0xab, 0x46, 0xd3, 0x43, 0xb7, + 0x63, 0x9a, 0xe4, 0x6a, 0x3b, 0x58, 0x5f, 0x4d, 0x66, 0x10, 0x48, 0x77, 0x18, 0xd2, 0x4d, 0x7c, + 0x43, 0x45, 0x6a, 0xfa, 0x7c, 0x8f, 0xb5, 0x47, 0x1b, 0x1d, 0x98, 0x66, 0xbd, 0x34, 0x74, 0x2a, + 0x1f, 0xf4, 0x98, 0x4e, 0x63, 0xc2, 0x0d, 0x08, 0x75, 0xe1, 0xf0, 0x12, 0x43, 0x5b, 0xc0, 0x65, + 0x1f, 0x8d, 0xb5, 0xd3, 0x1e, 0x6b, 0x8f, 0xd6, 0xb4, 0xb7, 0xb5, 0x8d, 0x7f, 0x66, 0x60, 0x9a, + 0x35, 0x5d, 0xd0, 0x00, 0x20, 0xe8, 0x4e, 0x45, 0xf7, 0x39, 0xd6, 0xef, 0x8a, 0xee, 0x73, 0xbc, + 0xb1, 0x85, 0x6f, 0x33, 0xe4, 0x25, 0xbc, 0xe8, 0x23, 0xb3, 0xcf, 0x9f, 0xb5, 0x36, 0xe5, 0xa2, + 0x66, 0x7d, 0x01, 0x45, 0xa5, 0xcb, 0x84, 0xe2, 0x24, 0x86, 0xda, 0x54, 0xd1, 0x6b, 0x12, 0xd3, + 0xa2, 0xc2, 0x77, 0x19, 0xe8, 0x2d, 0x5c, 0x55, 0x8d, 0xcb, 0x71, 0x1d, 0xc6, 0x49, 0x81, 0x7f, + 0xa2, 0x41, 0x39, 0xdc, 0x69, 0x42, 0x77, 0x63, 0x44, 0x47, 0x1b, 0x56, 0xfa, 0xbd, 0xc9, 0x4c, + 0x89, 0x2a, 0x70, 0xfc, 0x73, 0x42, 0x06, 0x26, 0xe5, 0x94, 0xb6, 0xff, 0x77, 0x16, 0xf2, 0xdb, + 0xfc, 0x07, 0x12, 0xc8, 0x83, 0x82, 0xdf, 0xef, 0x41, 0x2b, 0x71, 0xbd, 0x80, 0x20, 0x51, 0xd6, + 0x6f, 0x27, 0xce, 0x0b, 0x15, 0x1e, 0x30, 0x15, 0x56, 0xf1, 0x4d, 0x5f, 0x05, 0xf1, 0x43, 0x8c, + 0x1a, 0x2f, 0x79, 0x6b, 0x66, 0xab, 0x45, 0x0d, 0xf1, 0x63, 0x0d, 0x4a, 0x6a, 0x1b, 0x07, 0xdd, + 0x89, 0xed, 0x42, 0xa8, 0x9d, 0x20, 0x1d, 0x4f, 0x62, 0x11, 0xf8, 0xaf, 0x33, 0xfc, 0xbb, 0x78, + 0x25, 0x09, 0xdf, 0x61, 0xfc, 0x61, 0x15, 0x78, 0xe3, 0x26, 0x5e, 0x85, 0x50, 0x5f, 0x28, 0x5e, + 0x85, 0x70, 0xdf, 0xe7, 0x72, 0x15, 0x86, 0x8c, 0x9f, 0xaa, 0xf0, 0x12, 0x20, 0xe8, 0xeb, 0xa0, + 0x58, 0xe3, 0x2a, 0xa5, 0x43, 0xf4, 0xe6, 0x8f, 0xb7, 0x84, 0xf0, 0x43, 0x86, 0x7d, 0x07, 0x2f, + 0x27, 0x61, 0xf7, 0xba, 0x2e, 0xf5, 0x80, 0x8d, 0xdf, 0xe5, 0xa0, 0xf8, 0xa1, 0xd9, 0xb5, 0x3c, + 0x62, 0x99, 0x56, 0x93, 0xa0, 0x36, 0x4c, 0xb3, 0x77, 0x43, 0xd4, 0xdd, 0xd5, 0x66, 0x4b, 0xd4, + 0xdd, 0x43, 0x9d, 0x08, 0x7c, 0x9f, 0x41, 0xdf, 0xc6, 0xba, 0x0f, 0xdd, 0x0f, 0xe4, 0xd7, 0x58, + 0x17, 0x81, 0x6e, 0xf9, 0x1c, 0x66, 0x78, 0xd7, 0x00, 0x45, 0xa4, 0x85, 0xba, 0x0b, 0xfa, 0x72, + 0xfc, 0x64, 0xe2, 0x2d, 0x53, 0xb1, 0x5c, 0xc6, 0x4c, 0xc1, 0x7e, 0x00, 0x10, 0xb4, 0xa9, 0xa2, + 0xf6, 0x1d, 0xeb, 0x6a, 0xe9, 0xab, 0xc9, 0x0c, 0x02, 0xf8, 0x11, 0x03, 0xbe, 0x87, 0x6f, 0xc7, + 0x02, 0xb7, 0xfc, 0x05, 0x14, 0xbc, 0x09, 0xb9, 0x1d, 0xd3, 0xed, 0xa0, 0x48, 0xe8, 0x57, 0x3e, + 0x97, 0xe9, 0x7a, 0xdc, 0x94, 0x80, 0xba, 0xc7, 0xa0, 0x56, 0xf0, 0x52, 0x2c, 0x54, 0xc7, 0x74, + 0x69, 0x24, 0x45, 0x43, 0x98, 0x95, 0x9f, 0xc0, 0xd0, 0xad, 0x88, 0xcd, 0xc2, 0x9f, 0xcb, 0xf4, + 0x95, 0xa4, 0x69, 0x01, 0xb8, 0xc6, 0x00, 0x31, 0xbe, 0x15, 0x6f, 0x54, 0xc1, 0xfe, 0x58, 0x7b, + 0xf4, 0xb6, 0xb6, 0xf1, 0xb3, 0x0a, 0xe4, 0x68, 0x96, 0x42, 0x63, 0x77, 0x50, 0xdc, 0x45, 0x2d, + 0x3c, 0xd6, 0x52, 0x89, 0x5a, 0x78, 0xbc, 0x2e, 0x8c, 0x89, 0xdd, 0xec, 0x67, 0x62, 0x84, 0x71, + 0xd1, 0x1d, 0x7b, 0x50, 0x54, 0x4a, 0x40, 0x14, 0x23, 0x31, 0xdc, 0xb0, 0x89, 0xc6, 0xee, 0x98, + 0xfa, 0x11, 0xaf, 0x32, 0x50, 0x1d, 0x5f, 0x0f, 0x83, 0xb6, 0x38, 0x1b, 0x45, 0xfd, 0x21, 0x94, + 0xd4, 0x5a, 0x11, 0xc5, 0x08, 0x8d, 0x74, 0x84, 0xa2, 0xb1, 0x22, 0xae, 0xd4, 0x8c, 0x71, 0x1a, + 0xff, 0x47, 0x71, 0x92, 0x97, 0xa2, 0x7f, 0x0a, 0x79, 0x51, 0x41, 0xc6, 0xed, 0x37, 0xdc, 0x43, + 0x8a, 0xdb, 0x6f, 0xa4, 0xfc, 0x8c, 0x49, 0x04, 0x18, 0x2c, 0xcd, 0x94, 0x65, 0x80, 0x16, 0x90, + 0x4f, 0x88, 0x97, 0x04, 0x19, 0x74, 0x45, 0x92, 0x20, 0x95, 0x2a, 0x65, 0x22, 0x64, 0x9b, 0x78, + 0xe2, 0x2e, 0xcb, 0x12, 0x00, 0x25, 0x48, 0x54, 0xa3, 0x21, 0x9e, 0xc4, 0x92, 0x98, 0xbb, 0x05, + 0xa8, 0x22, 0x14, 0xa2, 0x1f, 0x01, 0x04, 0xe5, 0x6e, 0xf4, 0x75, 0x1c, 0xdb, 0x33, 0x8b, 0xbe, + 0x8e, 0xe3, 0x2b, 0xe6, 0x18, 0x0f, 0x0e, 0xc0, 0x79, 0xfe, 0x48, 0xe1, 0x7f, 0xae, 0x01, 0x1a, + 0x2f, 0x8f, 0xd1, 0x1b, 0xf1, 0x10, 0xb1, 0xed, 0x38, 0xfd, 0xcd, 0xab, 0x31, 0x27, 0x46, 0xcf, + 0x40, 0xaf, 0x26, 0x5b, 0x32, 0x78, 0x41, 0x35, 0xfb, 0x42, 0x83, 0xb9, 0x50, 0x81, 0x8d, 0x1e, + 0x24, 0x9c, 0x73, 0xa4, 0xa5, 0xa7, 0x3f, 0xbc, 0x94, 0x2f, 0x31, 0x63, 0x51, 0x6e, 0x85, 0xcc, + 0xd6, 0x7e, 0xaa, 0x41, 0x39, 0x5c, 0x95, 0xa3, 0x04, 0x80, 0xb1, 0xbe, 0xa0, 0xbe, 0x76, 0x39, + 0xe3, 0x15, 0x4e, 0x2b, 0x48, 0xe0, 0x3e, 0x85, 0xbc, 0x28, 0xe6, 0xe3, 0xdc, 0x22, 0xdc, 0x56, + 0x8c, 0x73, 0x8b, 0x48, 0x27, 0x20, 0xc9, 0x2d, 0x68, 0x5d, 0xac, 0x78, 0xa2, 0x28, 0xf9, 0x93, + 0x20, 0x27, 0x7b, 0x62, 0xa4, 0x5f, 0x30, 0x11, 0x32, 0xf0, 0x44, 0x59, 0xf0, 0xa3, 0x04, 0x89, + 0x97, 0x78, 0x62, 0xb4, 0x5f, 0x90, 0xe4, 0x89, 0x0c, 0x55, 0xf1, 0xc4, 0xa0, 0x3e, 0x8f, 0xf3, + 0xc4, 0xb1, 0xa6, 0x69, 0x9c, 0x27, 0x8e, 0x97, 0xf8, 0x49, 0x67, 0xcb, 0xc0, 0x43, 0x9e, 0xb8, + 0x10, 0x53, 0xcf, 0xa3, 0x37, 0x13, 0x6c, 0x1a, 0xdb, 0x90, 0xd5, 0xdf, 0xba, 0x22, 0xf7, 0x64, + 0x0f, 0xe0, 0xa7, 0x21, 0x3d, 0xe0, 0xd7, 0x1a, 0x2c, 0xc6, 0x35, 0x04, 0x50, 0x02, 0x58, 0x42, + 0x37, 0x57, 0x5f, 0xbf, 0x2a, 0xfb, 0x15, 0xec, 0xe6, 0xfb, 0xc4, 0x56, 0xe5, 0xf7, 0xaf, 0x56, + 0xb4, 0xaf, 0x5e, 0xad, 0x68, 0x7f, 0x7e, 0xb5, 0xa2, 0xfd, 0xe2, 0x2f, 0x2b, 0x53, 0x67, 0x33, + 0xec, 0xb7, 0xda, 0xef, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x45, 0x26, 0x54, 0x69, 0x32, 0x2e, + 0x00, 0x00, +} diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.gw.go b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.gw.go new file mode 100644 index 00000000..a2efbcd9 --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.pb.gw.go @@ -0,0 +1,1866 @@ +// Code generated by protoc-gen-grpc-gateway +// source: etcdserver/etcdserverpb/rpc.proto +// DO NOT EDIT! + +/* +Package etcdserverpb is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package etcdserverpb + +import ( + "io" + "net/http" + + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" +) + +var _ codes.Code +var _ io.Reader +var _ = runtime.String +var _ = utilities.NewDoubleArray + +func request_KV_Range_0(ctx context.Context, marshaler runtime.Marshaler, client KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RangeRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Range(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_KV_Put_0(ctx context.Context, marshaler runtime.Marshaler, client KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq PutRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Put(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_KV_DeleteRange_0(ctx context.Context, marshaler runtime.Marshaler, client KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteRangeRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DeleteRange(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_KV_Txn_0(ctx context.Context, marshaler runtime.Marshaler, client KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq TxnRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Txn(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_KV_Compact_0(ctx context.Context, marshaler runtime.Marshaler, client KVClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CompactionRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Compact(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Watch_Watch_0(ctx context.Context, marshaler runtime.Marshaler, client WatchClient, req *http.Request, pathParams map[string]string) (Watch_WatchClient, runtime.ServerMetadata, error) { + var metadata runtime.ServerMetadata + stream, err := client.Watch(ctx) + if err != nil { + grpclog.Printf("Failed to start streaming: %v", err) + return nil, metadata, err + } + dec := marshaler.NewDecoder(req.Body) + handleSend := func() error { + var protoReq WatchRequest + err = dec.Decode(&protoReq) + if err == io.EOF { + return err + } + if err != nil { + grpclog.Printf("Failed to decode request: %v", err) + return err + } + if err = stream.Send(&protoReq); err != nil { + grpclog.Printf("Failed to send request: %v", err) + return err + } + return nil + } + if err := handleSend(); err != nil { + if cerr := stream.CloseSend(); cerr != nil { + grpclog.Printf("Failed to terminate client stream: %v", cerr) + } + if err == io.EOF { + return stream, metadata, nil + } + return nil, metadata, err + } + go func() { + for { + if err := handleSend(); err != nil { + break + } + } + if err := stream.CloseSend(); err != nil { + grpclog.Printf("Failed to terminate client stream: %v", err) + } + }() + header, err := stream.Header() + if err != nil { + grpclog.Printf("Failed to get header from client: %v", err) + return nil, metadata, err + } + metadata.HeaderMD = header + return stream, metadata, nil +} + +func request_Lease_LeaseGrant_0(ctx context.Context, marshaler runtime.Marshaler, client LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LeaseGrantRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.LeaseGrant(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Lease_LeaseRevoke_0(ctx context.Context, marshaler runtime.Marshaler, client LeaseClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq LeaseRevokeRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.LeaseRevoke(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Lease_LeaseKeepAlive_0(ctx context.Context, marshaler runtime.Marshaler, client LeaseClient, req *http.Request, pathParams map[string]string) (Lease_LeaseKeepAliveClient, runtime.ServerMetadata, error) { + var metadata runtime.ServerMetadata + stream, err := client.LeaseKeepAlive(ctx) + if err != nil { + grpclog.Printf("Failed to start streaming: %v", err) + return nil, metadata, err + } + dec := marshaler.NewDecoder(req.Body) + handleSend := func() error { + var protoReq LeaseKeepAliveRequest + err = dec.Decode(&protoReq) + if err == io.EOF { + return err + } + if err != nil { + grpclog.Printf("Failed to decode request: %v", err) + return err + } + if err = stream.Send(&protoReq); err != nil { + grpclog.Printf("Failed to send request: %v", err) + return err + } + return nil + } + if err := handleSend(); err != nil { + if cerr := stream.CloseSend(); cerr != nil { + grpclog.Printf("Failed to terminate client stream: %v", cerr) + } + if err == io.EOF { + return stream, metadata, nil + } + return nil, metadata, err + } + go func() { + for { + if err := handleSend(); err != nil { + break + } + } + if err := stream.CloseSend(); err != nil { + grpclog.Printf("Failed to terminate client stream: %v", err) + } + }() + header, err := stream.Header() + if err != nil { + grpclog.Printf("Failed to get header from client: %v", err) + return nil, metadata, err + } + metadata.HeaderMD = header + return stream, metadata, nil +} + +func request_Cluster_MemberAdd_0(ctx context.Context, marshaler runtime.Marshaler, client ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MemberAddRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MemberAdd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Cluster_MemberRemove_0(ctx context.Context, marshaler runtime.Marshaler, client ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MemberRemoveRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MemberRemove(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Cluster_MemberUpdate_0(ctx context.Context, marshaler runtime.Marshaler, client ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MemberUpdateRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MemberUpdate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Cluster_MemberList_0(ctx context.Context, marshaler runtime.Marshaler, client ClusterClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MemberListRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.MemberList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Maintenance_Alarm_0(ctx context.Context, marshaler runtime.Marshaler, client MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AlarmRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Alarm(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Maintenance_Status_0(ctx context.Context, marshaler runtime.Marshaler, client MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StatusRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Status(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Maintenance_Defragment_0(ctx context.Context, marshaler runtime.Marshaler, client MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DefragmentRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Defragment(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Maintenance_Hash_0(ctx context.Context, marshaler runtime.Marshaler, client MaintenanceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq HashRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Hash(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Maintenance_Snapshot_0(ctx context.Context, marshaler runtime.Marshaler, client MaintenanceClient, req *http.Request, pathParams map[string]string) (Maintenance_SnapshotClient, runtime.ServerMetadata, error) { + var protoReq SnapshotRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + stream, err := client.Snapshot(ctx, &protoReq) + if err != nil { + return nil, metadata, err + } + header, err := stream.Header() + if err != nil { + return nil, metadata, err + } + metadata.HeaderMD = header + return stream, metadata, nil + +} + +func request_Auth_AuthEnable_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthEnableRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AuthEnable(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_AuthDisable_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthDisableRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AuthDisable(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_Authenticate_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthenticateRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Authenticate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_UserAdd_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthUserAddRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserAdd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_UserGet_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthUserGetRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserGet(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_UserList_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthUserListRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_UserDelete_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthUserDeleteRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_UserChangePassword_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthUserChangePasswordRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserChangePassword(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_UserGrantRole_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthUserGrantRoleRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserGrantRole(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_UserRevokeRole_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthUserRevokeRoleRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserRevokeRole(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_RoleAdd_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthRoleAddRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RoleAdd(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_RoleGet_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthRoleGetRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RoleGet(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_RoleList_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthRoleListRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RoleList(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_RoleDelete_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthRoleDeleteRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RoleDelete(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_RoleGrantPermission_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthRoleGrantPermissionRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RoleGrantPermission(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func request_Auth_RoleRevokePermission_0(ctx context.Context, marshaler runtime.Marshaler, client AuthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AuthRoleRevokePermissionRequest + var metadata runtime.ServerMetadata + + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil { + return nil, metadata, grpc.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RoleRevokePermission(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +// RegisterKVHandlerFromEndpoint is same as RegisterKVHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterKVHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterKVHandler(ctx, mux, conn) +} + +// RegisterKVHandler registers the http handlers for service KV to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterKVHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + client := NewKVClient(conn) + + mux.Handle("POST", pattern_KV_Range_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_KV_Range_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_KV_Range_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_KV_Put_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_KV_Put_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_KV_Put_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_KV_DeleteRange_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_KV_DeleteRange_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_KV_DeleteRange_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_KV_Txn_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_KV_Txn_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_KV_Txn_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_KV_Compact_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_KV_Compact_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_KV_Compact_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_KV_Range_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "kv", "range"}, "")) + + pattern_KV_Put_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "kv", "put"}, "")) + + pattern_KV_DeleteRange_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "kv", "deleterange"}, "")) + + pattern_KV_Txn_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "kv", "txn"}, "")) + + pattern_KV_Compact_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "kv", "compaction"}, "")) +) + +var ( + forward_KV_Range_0 = runtime.ForwardResponseMessage + + forward_KV_Put_0 = runtime.ForwardResponseMessage + + forward_KV_DeleteRange_0 = runtime.ForwardResponseMessage + + forward_KV_Txn_0 = runtime.ForwardResponseMessage + + forward_KV_Compact_0 = runtime.ForwardResponseMessage +) + +// RegisterWatchHandlerFromEndpoint is same as RegisterWatchHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterWatchHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterWatchHandler(ctx, mux, conn) +} + +// RegisterWatchHandler registers the http handlers for service Watch to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterWatchHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + client := NewWatchClient(conn) + + mux.Handle("POST", pattern_Watch_Watch_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Watch_Watch_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Watch_Watch_0(ctx, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Watch_Watch_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v3alpha", "watch"}, "")) +) + +var ( + forward_Watch_Watch_0 = runtime.ForwardResponseStream +) + +// RegisterLeaseHandlerFromEndpoint is same as RegisterLeaseHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterLeaseHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterLeaseHandler(ctx, mux, conn) +} + +// RegisterLeaseHandler registers the http handlers for service Lease to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterLeaseHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + client := NewLeaseClient(conn) + + mux.Handle("POST", pattern_Lease_LeaseGrant_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Lease_LeaseGrant_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Lease_LeaseGrant_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Lease_LeaseRevoke_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Lease_LeaseRevoke_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Lease_LeaseRevoke_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Lease_LeaseKeepAlive_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Lease_LeaseKeepAlive_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Lease_LeaseKeepAlive_0(ctx, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Lease_LeaseGrant_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "lease", "grant"}, "")) + + pattern_Lease_LeaseRevoke_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "kv", "lease", "revoke"}, "")) + + pattern_Lease_LeaseKeepAlive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "lease", "keepalive"}, "")) +) + +var ( + forward_Lease_LeaseGrant_0 = runtime.ForwardResponseMessage + + forward_Lease_LeaseRevoke_0 = runtime.ForwardResponseMessage + + forward_Lease_LeaseKeepAlive_0 = runtime.ForwardResponseStream +) + +// RegisterClusterHandlerFromEndpoint is same as RegisterClusterHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterClusterHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterClusterHandler(ctx, mux, conn) +} + +// RegisterClusterHandler registers the http handlers for service Cluster to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterClusterHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + client := NewClusterClient(conn) + + mux.Handle("POST", pattern_Cluster_MemberAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Cluster_MemberAdd_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Cluster_MemberAdd_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Cluster_MemberRemove_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Cluster_MemberRemove_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Cluster_MemberRemove_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Cluster_MemberUpdate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Cluster_MemberUpdate_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Cluster_MemberUpdate_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Cluster_MemberList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Cluster_MemberList_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Cluster_MemberList_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Cluster_MemberAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "cluster", "member", "add"}, "")) + + pattern_Cluster_MemberRemove_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "cluster", "member", "remove"}, "")) + + pattern_Cluster_MemberUpdate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "cluster", "member", "update"}, "")) + + pattern_Cluster_MemberList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "cluster", "member", "list"}, "")) +) + +var ( + forward_Cluster_MemberAdd_0 = runtime.ForwardResponseMessage + + forward_Cluster_MemberRemove_0 = runtime.ForwardResponseMessage + + forward_Cluster_MemberUpdate_0 = runtime.ForwardResponseMessage + + forward_Cluster_MemberList_0 = runtime.ForwardResponseMessage +) + +// RegisterMaintenanceHandlerFromEndpoint is same as RegisterMaintenanceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterMaintenanceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterMaintenanceHandler(ctx, mux, conn) +} + +// RegisterMaintenanceHandler registers the http handlers for service Maintenance to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterMaintenanceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + client := NewMaintenanceClient(conn) + + mux.Handle("POST", pattern_Maintenance_Alarm_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Maintenance_Alarm_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Maintenance_Alarm_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Maintenance_Status_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Maintenance_Status_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Maintenance_Status_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Maintenance_Defragment_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Maintenance_Defragment_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Maintenance_Defragment_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Maintenance_Hash_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Maintenance_Hash_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Maintenance_Hash_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Maintenance_Snapshot_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Maintenance_Snapshot_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Maintenance_Snapshot_0(ctx, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Maintenance_Alarm_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "maintenance", "alarm"}, "")) + + pattern_Maintenance_Status_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "maintenance", "status"}, "")) + + pattern_Maintenance_Defragment_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "maintenance", "defragment"}, "")) + + pattern_Maintenance_Hash_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "maintenance", "hash"}, "")) + + pattern_Maintenance_Snapshot_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "maintenance", "snapshot"}, "")) +) + +var ( + forward_Maintenance_Alarm_0 = runtime.ForwardResponseMessage + + forward_Maintenance_Status_0 = runtime.ForwardResponseMessage + + forward_Maintenance_Defragment_0 = runtime.ForwardResponseMessage + + forward_Maintenance_Hash_0 = runtime.ForwardResponseMessage + + forward_Maintenance_Snapshot_0 = runtime.ForwardResponseStream +) + +// RegisterAuthHandlerFromEndpoint is same as RegisterAuthHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterAuthHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Printf("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterAuthHandler(ctx, mux, conn) +} + +// RegisterAuthHandler registers the http handlers for service Auth to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterAuthHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + client := NewAuthClient(conn) + + mux.Handle("POST", pattern_Auth_AuthEnable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_AuthEnable_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_AuthEnable_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_AuthDisable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_AuthDisable_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_AuthDisable_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_Authenticate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_Authenticate_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_Authenticate_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_UserAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_UserAdd_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_UserAdd_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_UserGet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_UserGet_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_UserGet_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_UserList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_UserList_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_UserList_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_UserDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_UserDelete_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_UserDelete_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_UserChangePassword_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_UserChangePassword_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_UserChangePassword_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_UserGrantRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_UserGrantRole_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_UserGrantRole_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_UserRevokeRole_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_UserRevokeRole_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_UserRevokeRole_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_RoleAdd_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_RoleAdd_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_RoleAdd_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_RoleGet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_RoleGet_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_RoleGet_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_RoleList_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_RoleList_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_RoleList_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_RoleDelete_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_RoleDelete_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_RoleDelete_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_RoleGrantPermission_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_RoleGrantPermission_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_RoleGrantPermission_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Auth_RoleRevokePermission_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + if cn, ok := w.(http.CloseNotifier); ok { + go func(done <-chan struct{}, closed <-chan bool) { + select { + case <-done: + case <-closed: + cancel() + } + }(ctx.Done(), cn.CloseNotify()) + } + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, req) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + } + resp, md, err := request_Auth_RoleRevokePermission_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, outboundMarshaler, w, req, err) + return + } + + forward_Auth_RoleRevokePermission_0(ctx, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Auth_AuthEnable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "auth", "enable"}, "")) + + pattern_Auth_AuthDisable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "auth", "disable"}, "")) + + pattern_Auth_Authenticate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v3alpha", "auth", "authenticate"}, "")) + + pattern_Auth_UserAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "user", "add"}, "")) + + pattern_Auth_UserGet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "user", "get"}, "")) + + pattern_Auth_UserList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "user", "list"}, "")) + + pattern_Auth_UserDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "user", "delete"}, "")) + + pattern_Auth_UserChangePassword_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "user", "changepw"}, "")) + + pattern_Auth_UserGrantRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "user", "grant"}, "")) + + pattern_Auth_UserRevokeRole_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "user", "revoke"}, "")) + + pattern_Auth_RoleAdd_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "role", "add"}, "")) + + pattern_Auth_RoleGet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "role", "get"}, "")) + + pattern_Auth_RoleList_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "role", "list"}, "")) + + pattern_Auth_RoleDelete_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "role", "delete"}, "")) + + pattern_Auth_RoleGrantPermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "role", "grant"}, "")) + + pattern_Auth_RoleRevokePermission_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"v3alpha", "auth", "role", "revoke"}, "")) +) + +var ( + forward_Auth_AuthEnable_0 = runtime.ForwardResponseMessage + + forward_Auth_AuthDisable_0 = runtime.ForwardResponseMessage + + forward_Auth_Authenticate_0 = runtime.ForwardResponseMessage + + forward_Auth_UserAdd_0 = runtime.ForwardResponseMessage + + forward_Auth_UserGet_0 = runtime.ForwardResponseMessage + + forward_Auth_UserList_0 = runtime.ForwardResponseMessage + + forward_Auth_UserDelete_0 = runtime.ForwardResponseMessage + + forward_Auth_UserChangePassword_0 = runtime.ForwardResponseMessage + + forward_Auth_UserGrantRole_0 = runtime.ForwardResponseMessage + + forward_Auth_UserRevokeRole_0 = runtime.ForwardResponseMessage + + forward_Auth_RoleAdd_0 = runtime.ForwardResponseMessage + + forward_Auth_RoleGet_0 = runtime.ForwardResponseMessage + + forward_Auth_RoleList_0 = runtime.ForwardResponseMessage + + forward_Auth_RoleDelete_0 = runtime.ForwardResponseMessage + + forward_Auth_RoleGrantPermission_0 = runtime.ForwardResponseMessage + + forward_Auth_RoleRevokePermission_0 = runtime.ForwardResponseMessage +) diff --git a/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.proto b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.proto new file mode 100644 index 00000000..04f08cb5 --- /dev/null +++ b/vendor/github.com/coreos/etcd/etcdserver/etcdserverpb/rpc.proto @@ -0,0 +1,894 @@ +syntax = "proto3"; +package etcdserverpb; + +import "gogoproto/gogo.proto"; +import "etcd/mvcc/mvccpb/kv.proto"; +import "etcd/auth/authpb/auth.proto"; + +// for grpc-gateway +import "google/api/annotations.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.unmarshaler_all) = true; + +service KV { + // Range gets the keys in the range from the key-value store. + rpc Range(RangeRequest) returns (RangeResponse) { + option (google.api.http) = { + post: "/v3alpha/kv/range" + body: "*" + }; + } + + // Put puts the given key into the key-value store. + // A put request increments the revision of the key-value store + // and generates one event in the event history. + rpc Put(PutRequest) returns (PutResponse) { + option (google.api.http) = { + post: "/v3alpha/kv/put" + body: "*" + }; + } + + // DeleteRange deletes the given range from the key-value store. + // A delete request increments the revision of the key-value store + // and generates a delete event in the event history for every deleted key. + rpc DeleteRange(DeleteRangeRequest) returns (DeleteRangeResponse) { + option (google.api.http) = { + post: "/v3alpha/kv/deleterange" + body: "*" + }; + } + + // Txn processes multiple requests in a single transaction. + // A txn request increments the revision of the key-value store + // and generates events with the same revision for every completed request. + // It is not allowed to modify the same key several times within one txn. + rpc Txn(TxnRequest) returns (TxnResponse) { + option (google.api.http) = { + post: "/v3alpha/kv/txn" + body: "*" + }; + } + + // Compact compacts the event history in the etcd key-value store. The key-value + // store should be periodically compacted or the event history will continue to grow + // indefinitely. + rpc Compact(CompactionRequest) returns (CompactionResponse) { + option (google.api.http) = { + post: "/v3alpha/kv/compaction" + body: "*" + }; + } +} + +service Watch { + // Watch watches for events happening or that have happened. Both input and output + // are streams; the input stream is for creating and canceling watchers and the output + // stream sends events. One watch RPC can watch on multiple key ranges, streaming events + // for several watches at once. The entire event history can be watched starting from the + // last compaction revision. + rpc Watch(stream WatchRequest) returns (stream WatchResponse) { + option (google.api.http) = { + post: "/v3alpha/watch" + body: "*" + }; + } +} + +service Lease { + // LeaseGrant creates a lease which expires if the server does not receive a keepAlive + // within a given time to live period. All keys attached to the lease will be expired and + // deleted if the lease expires. Each expired key generates a delete event in the event history. + rpc LeaseGrant(LeaseGrantRequest) returns (LeaseGrantResponse) { + option (google.api.http) = { + post: "/v3alpha/lease/grant" + body: "*" + }; + } + + // LeaseRevoke revokes a lease. All keys attached to the lease will expire and be deleted. + rpc LeaseRevoke(LeaseRevokeRequest) returns (LeaseRevokeResponse) { + option (google.api.http) = { + post: "/v3alpha/kv/lease/revoke" + body: "*" + }; + } + + // LeaseKeepAlive keeps the lease alive by streaming keep alive requests from the client + // to the server and streaming keep alive responses from the server to the client. + rpc LeaseKeepAlive(stream LeaseKeepAliveRequest) returns (stream LeaseKeepAliveResponse) { + option (google.api.http) = { + post: "/v3alpha/lease/keepalive" + body: "*" + }; + } + + // TODO(xiangli) List all existing Leases? + // TODO(xiangli) Get details information (expirations, leased keys, etc.) of a lease? +} + +service Cluster { + // MemberAdd adds a member into the cluster. + rpc MemberAdd(MemberAddRequest) returns (MemberAddResponse) { + option (google.api.http) = { + post: "/v3alpha/cluster/member/add" + body: "*" + }; + } + + // MemberRemove removes an existing member from the cluster. + rpc MemberRemove(MemberRemoveRequest) returns (MemberRemoveResponse) { + option (google.api.http) = { + post: "/v3alpha/cluster/member/remove" + body: "*" + }; + } + + // MemberUpdate updates the member configuration. + rpc MemberUpdate(MemberUpdateRequest) returns (MemberUpdateResponse) { + option (google.api.http) = { + post: "/v3alpha/cluster/member/update" + body: "*" + }; + } + + // MemberList lists all the members in the cluster. + rpc MemberList(MemberListRequest) returns (MemberListResponse) { + option (google.api.http) = { + post: "/v3alpha/cluster/member/list" + body: "*" + }; + } +} + +service Maintenance { + // Alarm activates, deactivates, and queries alarms regarding cluster health. + rpc Alarm(AlarmRequest) returns (AlarmResponse) { + option (google.api.http) = { + post: "/v3alpha/maintenance/alarm" + body: "*" + }; + } + + // Status gets the status of the member. + rpc Status(StatusRequest) returns (StatusResponse) { + option (google.api.http) = { + post: "/v3alpha/maintenance/status" + body: "*" + }; + } + + // Defragment defragments a member's backend database to recover storage space. + rpc Defragment(DefragmentRequest) returns (DefragmentResponse) { + option (google.api.http) = { + post: "/v3alpha/maintenance/defragment" + body: "*" + }; + } + + // Hash returns the hash of the local KV state for consistency checking purpose. + // This is designed for testing; do not use this in production when there + // are ongoing transactions. + rpc Hash(HashRequest) returns (HashResponse) { + option (google.api.http) = { + post: "/v3alpha/maintenance/hash" + body: "*" + }; + } + + // Snapshot sends a snapshot of the entire backend from a member over a stream to a client. + rpc Snapshot(SnapshotRequest) returns (stream SnapshotResponse) { + option (google.api.http) = { + post: "/v3alpha/maintenance/snapshot" + body: "*" + }; + } +} + +service Auth { + // AuthEnable enables authentication. + rpc AuthEnable(AuthEnableRequest) returns (AuthEnableResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/enable" + body: "*" + }; + } + + // AuthDisable disables authentication. + rpc AuthDisable(AuthDisableRequest) returns (AuthDisableResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/disable" + body: "*" + }; + } + + // Authenticate processes an authenticate request. + rpc Authenticate(AuthenticateRequest) returns (AuthenticateResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/authenticate" + body: "*" + }; + } + + // UserAdd adds a new user. + rpc UserAdd(AuthUserAddRequest) returns (AuthUserAddResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/user/add" + body: "*" + }; + } + + // UserGet gets detailed user information. + rpc UserGet(AuthUserGetRequest) returns (AuthUserGetResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/user/get" + body: "*" + }; + } + + // UserList gets a list of all users. + rpc UserList(AuthUserListRequest) returns (AuthUserListResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/user/list" + body: "*" + }; + } + + // UserDelete deletes a specified user. + rpc UserDelete(AuthUserDeleteRequest) returns (AuthUserDeleteResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/user/delete" + body: "*" + }; + } + + // UserChangePassword changes the password of a specified user. + rpc UserChangePassword(AuthUserChangePasswordRequest) returns (AuthUserChangePasswordResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/user/changepw" + body: "*" + }; + } + + // UserGrant grants a role to a specified user. + rpc UserGrantRole(AuthUserGrantRoleRequest) returns (AuthUserGrantRoleResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/user/grant" + body: "*" + }; + } + + // UserRevokeRole revokes a role of specified user. + rpc UserRevokeRole(AuthUserRevokeRoleRequest) returns (AuthUserRevokeRoleResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/user/revoke" + body: "*" + }; + } + + // RoleAdd adds a new role. + rpc RoleAdd(AuthRoleAddRequest) returns (AuthRoleAddResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/role/add" + body: "*" + }; + } + + // RoleGet gets detailed role information. + rpc RoleGet(AuthRoleGetRequest) returns (AuthRoleGetResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/role/get" + body: "*" + }; + } + + // RoleList gets lists of all roles. + rpc RoleList(AuthRoleListRequest) returns (AuthRoleListResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/role/list" + body: "*" + }; + } + + // RoleDelete deletes a specified role. + rpc RoleDelete(AuthRoleDeleteRequest) returns (AuthRoleDeleteResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/role/delete" + body: "*" + }; + } + + // RoleGrantPermission grants a permission of a specified key or range to a specified role. + rpc RoleGrantPermission(AuthRoleGrantPermissionRequest) returns (AuthRoleGrantPermissionResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/role/grant" + body: "*" + }; + } + + // RoleRevokePermission revokes a key or range permission of a specified role. + rpc RoleRevokePermission(AuthRoleRevokePermissionRequest) returns (AuthRoleRevokePermissionResponse) { + option (google.api.http) = { + post: "/v3alpha/auth/role/revoke" + body: "*" + }; + } +} + +message ResponseHeader { + // cluster_id is the ID of the cluster which sent the response. + uint64 cluster_id = 1; + // member_id is the ID of the member which sent the response. + uint64 member_id = 2; + // revision is the key-value store revision when the request was applied. + int64 revision = 3; + // raft_term is the raft term when the request was applied. + uint64 raft_term = 4; +} + +message RangeRequest { + enum SortOrder { + NONE = 0; // default, no sorting + ASCEND = 1; // lowest target value first + DESCEND = 2; // highest target value first + } + enum SortTarget { + KEY = 0; + VERSION = 1; + CREATE = 2; + MOD = 3; + VALUE = 4; + } + + // key is the first key for the range. If range_end is not given, the request only looks up key. + bytes key = 1; + // range_end is the upper bound on the requested range [key, range_end). + // If range_end is '\0', the range is all keys >= key. + // If the range_end is one bit larger than the given key, + // then the range requests get the all keys with the prefix (the given key). + // If both key and range_end are '\0', then range requests returns all keys. + bytes range_end = 2; + // limit is a limit on the number of keys returned for the request. + int64 limit = 3; + // revision is the point-in-time of the key-value store to use for the range. + // If revision is less or equal to zero, the range is over the newest key-value store. + // If the revision has been compacted, ErrCompacted is returned as a response. + int64 revision = 4; + + // sort_order is the order for returned sorted results. + SortOrder sort_order = 5; + + // sort_target is the key-value field to use for sorting. + SortTarget sort_target = 6; + + // serializable sets the range request to use serializable member-local reads. + // Range requests are linearizable by default; linearizable requests have higher + // latency and lower throughput than serializable requests but reflect the current + // consensus of the cluster. For better performance, in exchange for possible stale reads, + // a serializable range request is served locally without needing to reach consensus + // with other nodes in the cluster. + bool serializable = 7; + + // keys_only when set returns only the keys and not the values. + bool keys_only = 8; + + // count_only when set returns only the count of the keys in the range. + bool count_only = 9; +} + +message RangeResponse { + ResponseHeader header = 1; + // kvs is the list of key-value pairs matched by the range request. + // kvs is empty when count is requested. + repeated mvccpb.KeyValue kvs = 2; + // more indicates if there are more keys to return in the requested range. + bool more = 3; + // count is set to the number of keys within the range when requested. + int64 count = 4; +} + +message PutRequest { + // key is the key, in bytes, to put into the key-value store. + bytes key = 1; + // value is the value, in bytes, to associate with the key in the key-value store. + bytes value = 2; + // lease is the lease ID to associate with the key in the key-value store. A lease + // value of 0 indicates no lease. + int64 lease = 3; +} + +message PutResponse { + ResponseHeader header = 1; +} + +message DeleteRangeRequest { + // key is the first key to delete in the range. + bytes key = 1; + // range_end is the key following the last key to delete for the range [key, range_end). + // If range_end is not given, the range is defined to contain only the key argument. + // If range_end is '\0', the range is all keys greater than or equal to the key argument. + bytes range_end = 2; +} + +message DeleteRangeResponse { + ResponseHeader header = 1; + // deleted is the number of keys deleted by the delete range request. + int64 deleted = 2; +} + +message RequestOp { + // request is a union of request types accepted by a transaction. + oneof request { + RangeRequest request_range = 1; + PutRequest request_put = 2; + DeleteRangeRequest request_delete_range = 3; + } +} + +message ResponseOp { + // response is a union of response types returned by a transaction. + oneof response { + RangeResponse response_range = 1; + PutResponse response_put = 2; + DeleteRangeResponse response_delete_range = 3; + } +} + +message Compare { + enum CompareResult { + EQUAL = 0; + GREATER = 1; + LESS = 2; + } + enum CompareTarget { + VERSION = 0; + CREATE = 1; + MOD = 2; + VALUE= 3; + } + // result is logical comparison operation for this comparison. + CompareResult result = 1; + // target is the key-value field to inspect for the comparison. + CompareTarget target = 2; + // key is the subject key for the comparison operation. + bytes key = 3; + oneof target_union { + // version is the version of the given key + int64 version = 4; + // create_revision is the creation revision of the given key + int64 create_revision = 5; + // mod_revision is the last modified revision of the given key. + int64 mod_revision = 6; + // value is the value of the given key, in bytes. + bytes value = 7; + } +} + +// From google paxosdb paper: +// Our implementation hinges around a powerful primitive which we call MultiOp. All other database +// operations except for iteration are implemented as a single call to MultiOp. A MultiOp is applied atomically +// and consists of three components: +// 1. A list of tests called guard. Each test in guard checks a single entry in the database. It may check +// for the absence or presence of a value, or compare with a given value. Two different tests in the guard +// may apply to the same or different entries in the database. All tests in the guard are applied and +// MultiOp returns the results. If all tests are true, MultiOp executes t op (see item 2 below), otherwise +// it executes f op (see item 3 below). +// 2. A list of database operations called t op. Each operation in the list is either an insert, delete, or +// lookup operation, and applies to a single database entry. Two different operations in the list may apply +// to the same or different entries in the database. These operations are executed +// if guard evaluates to +// true. +// 3. A list of database operations called f op. Like t op, but executed if guard evaluates to false. +message TxnRequest { + // compare is a list of predicates representing a conjunction of terms. + // If the comparisons succeed, then the success requests will be processed in order, + // and the response will contain their respective responses in order. + // If the comparisons fail, then the failure requests will be processed in order, + // and the response will contain their respective responses in order. + repeated Compare compare = 1; + // success is a list of requests which will be applied when compare evaluates to true. + repeated RequestOp success = 2; + // failure is a list of requests which will be applied when compare evaluates to false. + repeated RequestOp failure = 3; +} + +message TxnResponse { + ResponseHeader header = 1; + // succeeded is set to true if the compare evaluated to true or false otherwise. + bool succeeded = 2; + // responses is a list of responses corresponding to the results from applying + // success if succeeded is true or failure if succeeded is false. + repeated ResponseOp responses = 3; +} + +// CompactionRequest compacts the key-value store up to a given revision. All superseded keys +// with a revision less than the compaction revision will be removed. +message CompactionRequest { + // revision is the key-value store revision for the compaction operation. + int64 revision = 1; + // physical is set so the RPC will wait until the compaction is physically + // applied to the local database such that compacted entries are totally + // removed from the backend database. + bool physical = 2; +} + +message CompactionResponse { + ResponseHeader header = 1; +} + +message HashRequest { +} + +message HashResponse { + ResponseHeader header = 1; + // hash is the hash value computed from the responding member's key-value store. + uint32 hash = 2; +} + +message SnapshotRequest { +} + +message SnapshotResponse { + // header has the current key-value store information. The first header in the snapshot + // stream indicates the point in time of the snapshot. + ResponseHeader header = 1; + + // remaining_bytes is the number of blob bytes to be sent after this message + uint64 remaining_bytes = 2; + + // blob contains the next chunk of the snapshot in the snapshot stream. + bytes blob = 3; +} + +message WatchRequest { + // request_union is a request to either create a new watcher or cancel an existing watcher. + oneof request_union { + WatchCreateRequest create_request = 1; + WatchCancelRequest cancel_request = 2; + } +} + +message WatchCreateRequest { + // key is the key to register for watching. + bytes key = 1; + // range_end is the end of the range [key, range_end) to watch. If range_end is not given, + // only the key argument is watched. If range_end is equal to '\0', all keys greater than + // or equal to the key argument are watched. + bytes range_end = 2; + // start_revision is an optional revision to watch from (inclusive). No start_revision is "now". + int64 start_revision = 3; + // progress_notify is set so that the etcd server will periodically send a WatchResponse with + // no events to the new watcher if there are no recent events. It is useful when clients + // wish to recover a disconnected watcher starting from a recent known revision. + // The etcd server may decide how often it will send notifications based on current load. + bool progress_notify = 4; +} + +message WatchCancelRequest { + // watch_id is the watcher id to cancel so that no more events are transmitted. + int64 watch_id = 1; +} + +message WatchResponse { + ResponseHeader header = 1; + // watch_id is the ID of the watcher that corresponds to the response. + int64 watch_id = 2; + // created is set to true if the response is for a create watch request. + // The client should record the watch_id and expect to receive events for + // the created watcher from the same stream. + // All events sent to the created watcher will attach with the same watch_id. + bool created = 3; + // canceled is set to true if the response is for a cancel watch request. + // No further events will be sent to the canceled watcher. + bool canceled = 4; + // compact_revision is set to the minimum index if a watcher tries to watch + // at a compacted index. + // + // This happens when creating a watcher at a compacted revision or the watcher cannot + // catch up with the progress of the key-value store. + // + // The client should treat the watcher as canceled and should not try to create any + // watcher with the same start_revision again. + int64 compact_revision = 5; + + repeated mvccpb.Event events = 11; +} + +message LeaseGrantRequest { + // TTL is the advisory time-to-live in seconds. + int64 TTL = 1; + // ID is the requested ID for the lease. If ID is set to 0, the lessor chooses an ID. + int64 ID = 2; +} + +message LeaseGrantResponse { + ResponseHeader header = 1; + // ID is the lease ID for the granted lease. + int64 ID = 2; + // TTL is the server chosen lease time-to-live in seconds. + int64 TTL = 3; + string error = 4; +} + +message LeaseRevokeRequest { + // ID is the lease ID to revoke. When the ID is revoked, all associated keys will be deleted. + int64 ID = 1; +} + +message LeaseRevokeResponse { + ResponseHeader header = 1; +} + +message LeaseKeepAliveRequest { + // ID is the lease ID for the lease to keep alive. + int64 ID = 1; +} + +message LeaseKeepAliveResponse { + ResponseHeader header = 1; + // ID is the lease ID from the keep alive request. + int64 ID = 2; + // TTL is the new time-to-live for the lease. + int64 TTL = 3; +} + +message Member { + // ID is the member ID for this member. + uint64 ID = 1; + // name is the human-readable name of the member. If the member is not started, the name will be an empty string. + string name = 2; + // peerURLs is the list of URLs the member exposes to the cluster for communication. + repeated string peerURLs = 3; + // clientURLs is the list of URLs the member exposes to clients for communication. If the member is not started, clientURLs will be empty. + repeated string clientURLs = 4; +} + +message MemberAddRequest { + // peerURLs is the list of URLs the added member will use to communicate with the cluster. + repeated string peerURLs = 1; +} + +message MemberAddResponse { + ResponseHeader header = 1; + // member is the member information for the added member. + Member member = 2; +} + +message MemberRemoveRequest { + // ID is the member ID of the member to remove. + uint64 ID = 1; +} + +message MemberRemoveResponse { + ResponseHeader header = 1; +} + +message MemberUpdateRequest { + // ID is the member ID of the member to update. + uint64 ID = 1; + // peerURLs is the new list of URLs the member will use to communicate with the cluster. + repeated string peerURLs = 2; +} + +message MemberUpdateResponse{ + ResponseHeader header = 1; +} + +message MemberListRequest { +} + +message MemberListResponse { + ResponseHeader header = 1; + // members is a list of all members associated with the cluster. + repeated Member members = 2; +} + +message DefragmentRequest { +} + +message DefragmentResponse { + ResponseHeader header = 1; +} + +enum AlarmType { + NONE = 0; // default, used to query if any alarm is active + NOSPACE = 1; // space quota is exhausted +} + +message AlarmRequest { + enum AlarmAction { + GET = 0; + ACTIVATE = 1; + DEACTIVATE = 2; + } + // action is the kind of alarm request to issue. The action + // may GET alarm statuses, ACTIVATE an alarm, or DEACTIVATE a + // raised alarm. + AlarmAction action = 1; + // memberID is the ID of the member associated with the alarm. If memberID is 0, the + // alarm request covers all members. + uint64 memberID = 2; + // alarm is the type of alarm to consider for this request. + AlarmType alarm = 3; +} + +message AlarmMember { + // memberID is the ID of the member associated with the raised alarm. + uint64 memberID = 1; + // alarm is the type of alarm which has been raised. + AlarmType alarm = 2; +} + +message AlarmResponse { + ResponseHeader header = 1; + // alarms is a list of alarms associated with the alarm request. + repeated AlarmMember alarms = 2; +} + +message StatusRequest { +} + +message StatusResponse { + ResponseHeader header = 1; + // version is the cluster protocol version used by the responding member. + string version = 2; + // dbSize is the size of the backend database, in bytes, of the responding member. + int64 dbSize = 3; + // leader is the member ID which the responding member believes is the current leader. + uint64 leader = 4; + // raftIndex is the current raft index of the responding member. + uint64 raftIndex = 5; + // raftTerm is the current raft term of the responding member. + uint64 raftTerm = 6; +} + +message AuthEnableRequest { +} + +message AuthDisableRequest { +} + +message AuthenticateRequest { + string name = 1; + string password = 2; +} + +message AuthUserAddRequest { + string name = 1; + string password = 2; +} + +message AuthUserGetRequest { + string name = 1; +} + +message AuthUserDeleteRequest { + // name is the name of the user to delete. + string name = 1; +} + +message AuthUserChangePasswordRequest { + // name is the name of the user whose password is being changed. + string name = 1; + // password is the new password for the user. + string password = 2; +} + +message AuthUserGrantRoleRequest { + // user is the name of the user which should be granted a given role. + string user = 1; + // role is the name of the role to grant to the user. + string role = 2; +} + +message AuthUserRevokeRoleRequest { + string name = 1; + string role = 2; +} + +message AuthRoleAddRequest { + // name is the name of the role to add to the authentication system. + string name = 1; +} + +message AuthRoleGetRequest { + string role = 1; +} + +message AuthUserListRequest { +} + +message AuthRoleListRequest { +} + +message AuthRoleDeleteRequest { + string role = 1; +} + +message AuthRoleGrantPermissionRequest { + // name is the name of the role which will be granted the permission. + string name = 1; + // perm is the permission to grant to the role. + authpb.Permission perm = 2; +} + +message AuthRoleRevokePermissionRequest { + string role = 1; + string key = 2; + string range_end = 3; +} + +message AuthEnableResponse { + ResponseHeader header = 1; +} + +message AuthDisableResponse { + ResponseHeader header = 1; +} + +message AuthenticateResponse { + ResponseHeader header = 1; + // token is an authorized token that can be used in succeeding RPCs + string token = 2; +} + +message AuthUserAddResponse { + ResponseHeader header = 1; +} + +message AuthUserGetResponse { + ResponseHeader header = 1; + + repeated string roles = 2; +} + +message AuthUserDeleteResponse { + ResponseHeader header = 1; +} + +message AuthUserChangePasswordResponse { + ResponseHeader header = 1; +} + +message AuthUserGrantRoleResponse { + ResponseHeader header = 1; +} + +message AuthUserRevokeRoleResponse { + ResponseHeader header = 1; +} + +message AuthRoleAddResponse { + ResponseHeader header = 1; +} + +message AuthRoleGetResponse { + ResponseHeader header = 1; + + repeated authpb.Permission perm = 2; +} + +message AuthRoleListResponse { + ResponseHeader header = 1; + + repeated string roles = 2; +} + +message AuthUserListResponse { + ResponseHeader header = 1; + + repeated string users = 2; +} + +message AuthRoleDeleteResponse { + ResponseHeader header = 1; +} + +message AuthRoleGrantPermissionResponse { + ResponseHeader header = 1; +} + +message AuthRoleRevokePermissionResponse { + ResponseHeader header = 1; +} diff --git a/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go b/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go new file mode 100644 index 00000000..2ab97270 --- /dev/null +++ b/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.pb.go @@ -0,0 +1,681 @@ +// Code generated by protoc-gen-gogo. +// source: kv.proto +// DO NOT EDIT! + +/* + Package mvccpb is a generated protocol buffer package. + + It is generated from these files: + kv.proto + + It has these top-level messages: + KeyValue + Event +*/ +package mvccpb + +import ( + "fmt" + + proto "github.com/golang/protobuf/proto" + + math "math" +) + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.ProtoPackageIsVersion1 + +type Event_EventType int32 + +const ( + PUT Event_EventType = 0 + DELETE Event_EventType = 1 +) + +var Event_EventType_name = map[int32]string{ + 0: "PUT", + 1: "DELETE", +} +var Event_EventType_value = map[string]int32{ + "PUT": 0, + "DELETE": 1, +} + +func (x Event_EventType) String() string { + return proto.EnumName(Event_EventType_name, int32(x)) +} +func (Event_EventType) EnumDescriptor() ([]byte, []int) { return fileDescriptorKv, []int{1, 0} } + +type KeyValue struct { + // key is the key in bytes. An empty key is not allowed. + Key []byte `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + // create_revision is the revision of last creation on this key. + CreateRevision int64 `protobuf:"varint,2,opt,name=create_revision,json=createRevision,proto3" json:"create_revision,omitempty"` + // mod_revision is the revision of last modification on this key. + ModRevision int64 `protobuf:"varint,3,opt,name=mod_revision,json=modRevision,proto3" json:"mod_revision,omitempty"` + // version is the version of the key. A deletion resets + // the version to zero and any modification of the key + // increases its version. + Version int64 `protobuf:"varint,4,opt,name=version,proto3" json:"version,omitempty"` + // value is the value held by the key, in bytes. + Value []byte `protobuf:"bytes,5,opt,name=value,proto3" json:"value,omitempty"` + // lease is the ID of the lease that attached to key. + // When the attached lease expires, the key will be deleted. + // If lease is 0, then no lease is attached to the key. + Lease int64 `protobuf:"varint,6,opt,name=lease,proto3" json:"lease,omitempty"` +} + +func (m *KeyValue) Reset() { *m = KeyValue{} } +func (m *KeyValue) String() string { return proto.CompactTextString(m) } +func (*KeyValue) ProtoMessage() {} +func (*KeyValue) Descriptor() ([]byte, []int) { return fileDescriptorKv, []int{0} } + +type Event struct { + // type is the kind of event. If type is a PUT, it indicates + // new data has been stored to the key. If type is a DELETE, + // it indicates the key was deleted. + Type Event_EventType `protobuf:"varint,1,opt,name=type,proto3,enum=mvccpb.Event_EventType" json:"type,omitempty"` + // kv holds the KeyValue for the event. + // A PUT event contains current kv pair. + // A PUT event with kv.Version=1 indicates the creation of a key. + // A DELETE/EXPIRE event contains the deleted key with + // its modification revision set to the revision of deletion. + Kv *KeyValue `protobuf:"bytes,2,opt,name=kv" json:"kv,omitempty"` +} + +func (m *Event) Reset() { *m = Event{} } +func (m *Event) String() string { return proto.CompactTextString(m) } +func (*Event) ProtoMessage() {} +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorKv, []int{1} } + +func init() { + proto.RegisterType((*KeyValue)(nil), "mvccpb.KeyValue") + proto.RegisterType((*Event)(nil), "mvccpb.Event") + proto.RegisterEnum("mvccpb.Event_EventType", Event_EventType_name, Event_EventType_value) +} +func (m *KeyValue) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *KeyValue) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Key) > 0 { + data[i] = 0xa + i++ + i = encodeVarintKv(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + } + if m.CreateRevision != 0 { + data[i] = 0x10 + i++ + i = encodeVarintKv(data, i, uint64(m.CreateRevision)) + } + if m.ModRevision != 0 { + data[i] = 0x18 + i++ + i = encodeVarintKv(data, i, uint64(m.ModRevision)) + } + if m.Version != 0 { + data[i] = 0x20 + i++ + i = encodeVarintKv(data, i, uint64(m.Version)) + } + if len(m.Value) > 0 { + data[i] = 0x2a + i++ + i = encodeVarintKv(data, i, uint64(len(m.Value))) + i += copy(data[i:], m.Value) + } + if m.Lease != 0 { + data[i] = 0x30 + i++ + i = encodeVarintKv(data, i, uint64(m.Lease)) + } + return i, nil +} + +func (m *Event) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Event) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Type != 0 { + data[i] = 0x8 + i++ + i = encodeVarintKv(data, i, uint64(m.Type)) + } + if m.Kv != nil { + data[i] = 0x12 + i++ + i = encodeVarintKv(data, i, uint64(m.Kv.Size())) + n1, err := m.Kv.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + } + return i, nil +} + +func encodeFixed64Kv(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Kv(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintKv(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *KeyValue) Size() (n int) { + var l int + _ = l + l = len(m.Key) + if l > 0 { + n += 1 + l + sovKv(uint64(l)) + } + if m.CreateRevision != 0 { + n += 1 + sovKv(uint64(m.CreateRevision)) + } + if m.ModRevision != 0 { + n += 1 + sovKv(uint64(m.ModRevision)) + } + if m.Version != 0 { + n += 1 + sovKv(uint64(m.Version)) + } + l = len(m.Value) + if l > 0 { + n += 1 + l + sovKv(uint64(l)) + } + if m.Lease != 0 { + n += 1 + sovKv(uint64(m.Lease)) + } + return n +} + +func (m *Event) Size() (n int) { + var l int + _ = l + if m.Type != 0 { + n += 1 + sovKv(uint64(m.Type)) + } + if m.Kv != nil { + l = m.Kv.Size() + n += 1 + l + sovKv(uint64(l)) + } + return n +} + +func sovKv(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozKv(x uint64) (n int) { + return sovKv(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *KeyValue) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KeyValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KeyValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthKv + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], data[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CreateRevision", wireType) + } + m.CreateRevision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.CreateRevision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ModRevision", wireType) + } + m.ModRevision = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ModRevision |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + m.Version = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Version |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthKv + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = append(m.Value[:0], data[iNdEx:postIndex]...) + if m.Value == nil { + m.Value = []byte{} + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Lease", wireType) + } + m.Lease = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Lease |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipKv(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthKv + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Event) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Event: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + m.Type = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Type |= (Event_EventType(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kv", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowKv + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthKv + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Kv == nil { + m.Kv = &KeyValue{} + } + if err := m.Kv.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipKv(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthKv + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipKv(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowKv + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowKv + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowKv + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthKv + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowKv + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipKv(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthKv = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowKv = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorKv = []byte{ + // 285 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x44, 0x90, 0x41, 0x4a, 0xc3, 0x40, + 0x14, 0x86, 0x33, 0x4d, 0x9b, 0xd6, 0xd7, 0x52, 0xc3, 0x50, 0x70, 0x70, 0x31, 0xc4, 0x6e, 0x2c, + 0x08, 0x11, 0xea, 0x0d, 0xc4, 0xac, 0x74, 0x21, 0x21, 0xba, 0x95, 0x34, 0x7d, 0x94, 0x92, 0xa6, + 0x13, 0xd2, 0x38, 0x98, 0x9b, 0x78, 0x0a, 0xcf, 0xd1, 0x65, 0x8f, 0x60, 0xe3, 0x45, 0x24, 0x6f, + 0x4c, 0xdd, 0x0c, 0xef, 0xff, 0xff, 0x6f, 0x98, 0xff, 0x0d, 0x0c, 0x52, 0xed, 0xe7, 0x85, 0x2a, + 0x15, 0x77, 0x32, 0x9d, 0x24, 0xf9, 0xe2, 0x72, 0xb2, 0x52, 0x2b, 0x45, 0xd6, 0x6d, 0x33, 0x99, + 0x74, 0xfa, 0xc5, 0x60, 0xf0, 0x88, 0xd5, 0x6b, 0xbc, 0x79, 0x47, 0xee, 0x82, 0x9d, 0x62, 0x25, + 0x98, 0xc7, 0x66, 0xa3, 0xb0, 0x19, 0xf9, 0x35, 0x9c, 0x27, 0x05, 0xc6, 0x25, 0xbe, 0x15, 0xa8, + 0xd7, 0xbb, 0xb5, 0xda, 0x8a, 0x8e, 0xc7, 0x66, 0x76, 0x38, 0x36, 0x76, 0xf8, 0xe7, 0xf2, 0x2b, + 0x18, 0x65, 0x6a, 0xf9, 0x4f, 0xd9, 0x44, 0x0d, 0x33, 0xb5, 0x3c, 0x21, 0x02, 0xfa, 0x1a, 0x0b, + 0x4a, 0xbb, 0x94, 0xb6, 0x92, 0x4f, 0xa0, 0xa7, 0x9b, 0x02, 0xa2, 0x47, 0x2f, 0x1b, 0xd1, 0xb8, + 0x1b, 0x8c, 0x77, 0x28, 0x1c, 0xa2, 0x8d, 0x98, 0x7e, 0x40, 0x2f, 0xd0, 0xb8, 0x2d, 0xf9, 0x0d, + 0x74, 0xcb, 0x2a, 0x47, 0x6a, 0x3b, 0x9e, 0x5f, 0xf8, 0x66, 0x4d, 0x9f, 0x42, 0x73, 0x46, 0x55, + 0x8e, 0x21, 0x41, 0xdc, 0x83, 0x4e, 0xaa, 0xa9, 0xfa, 0x70, 0xee, 0xb6, 0x68, 0xbb, 0x77, 0xd8, + 0x49, 0xf5, 0xd4, 0x83, 0xb3, 0xd3, 0x25, 0xde, 0x07, 0xfb, 0xf9, 0x25, 0x72, 0x2d, 0x0e, 0xe0, + 0x3c, 0x04, 0x4f, 0x41, 0x14, 0xb8, 0xec, 0x5e, 0xec, 0x8f, 0xd2, 0x3a, 0x1c, 0xa5, 0xb5, 0xaf, + 0x25, 0x3b, 0xd4, 0x92, 0x7d, 0xd7, 0x92, 0x7d, 0xfe, 0x48, 0x6b, 0xe1, 0xd0, 0x5f, 0xde, 0xfd, + 0x06, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x21, 0x8f, 0x2c, 0x75, 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.proto b/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.proto new file mode 100644 index 00000000..f0c82b57 --- /dev/null +++ b/vendor/github.com/coreos/etcd/mvcc/mvccpb/kv.proto @@ -0,0 +1,46 @@ +syntax = "proto3"; +package mvccpb; + +import "gogoproto/gogo.proto"; + +option (gogoproto.marshaler_all) = true; +option (gogoproto.sizer_all) = true; +option (gogoproto.unmarshaler_all) = true; +option (gogoproto.goproto_getters_all) = false; +option (gogoproto.goproto_enum_prefix_all) = false; + +message KeyValue { + // key is the key in bytes. An empty key is not allowed. + bytes key = 1; + // create_revision is the revision of last creation on this key. + int64 create_revision = 2; + // mod_revision is the revision of last modification on this key. + int64 mod_revision = 3; + // version is the version of the key. A deletion resets + // the version to zero and any modification of the key + // increases its version. + int64 version = 4; + // value is the value held by the key, in bytes. + bytes value = 5; + // lease is the ID of the lease that attached to key. + // When the attached lease expires, the key will be deleted. + // If lease is 0, then no lease is attached to the key. + int64 lease = 6; +} + +message Event { + enum EventType { + PUT = 0; + DELETE = 1; + } + // type is the kind of event. If type is a PUT, it indicates + // new data has been stored to the key. If type is a DELETE, + // it indicates the key was deleted. + EventType type = 1; + // kv holds the KeyValue for the event. + // A PUT event contains current kv pair. + // A PUT event with kv.Version=1 indicates the creation of a key. + // A DELETE/EXPIRE event contains the deleted key with + // its modification revision set to the revision of deletion. + KeyValue kv = 2; +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/fileutil.go b/vendor/github.com/coreos/etcd/pkg/fileutil/fileutil.go new file mode 100644 index 00000000..c963a790 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/fileutil.go @@ -0,0 +1,98 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package fileutil implements utility functions related to files and paths. +package fileutil + +import ( + "fmt" + "io/ioutil" + "os" + "path" + "sort" + + "github.com/coreos/pkg/capnslog" +) + +const ( + // PrivateFileMode grants owner to read/write a file. + PrivateFileMode = 0600 + // PrivateDirMode grants owner to make/remove files inside the directory. + PrivateDirMode = 0700 +) + +var ( + plog = capnslog.NewPackageLogger("github.com/coreos/etcd/pkg", "fileutil") +) + +// IsDirWriteable checks if dir is writable by writing and removing a file +// to dir. It returns nil if dir is writable. +func IsDirWriteable(dir string) error { + f := path.Join(dir, ".touch") + if err := ioutil.WriteFile(f, []byte(""), PrivateFileMode); err != nil { + return err + } + return os.Remove(f) +} + +// ReadDir returns the filenames in the given directory in sorted order. +func ReadDir(dirpath string) ([]string, error) { + dir, err := os.Open(dirpath) + if err != nil { + return nil, err + } + defer dir.Close() + names, err := dir.Readdirnames(-1) + if err != nil { + return nil, err + } + sort.Strings(names) + return names, nil +} + +// TouchDirAll is similar to os.MkdirAll. It creates directories with 0700 permission if any directory +// does not exists. TouchDirAll also ensures the given directory is writable. +func TouchDirAll(dir string) error { + // If path is already a directory, MkdirAll does nothing + // and returns nil. + err := os.MkdirAll(dir, PrivateDirMode) + if err != nil { + // if mkdirAll("a/text") and "text" is not + // a directory, this will return syscall.ENOTDIR + return err + } + return IsDirWriteable(dir) +} + +// CreateDirAll is similar to TouchDirAll but returns error +// if the deepest directory was not empty. +func CreateDirAll(dir string) error { + err := TouchDirAll(dir) + if err == nil { + var ns []string + ns, err = ReadDir(dir) + if err != nil { + return err + } + if len(ns) != 0 { + err = fmt.Errorf("expected %q to be empty, got %q", dir, ns) + } + } + return err +} + +func Exist(name string) bool { + _, err := os.Stat(name) + return err == nil +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/lock.go b/vendor/github.com/coreos/etcd/pkg/fileutil/lock.go new file mode 100644 index 00000000..338627f4 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/lock.go @@ -0,0 +1,26 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import ( + "errors" + "os" +) + +var ( + ErrLocked = errors.New("fileutil: file already locked") +) + +type LockedFile struct{ *os.File } diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/lock_flock.go b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_flock.go new file mode 100644 index 00000000..542550bc --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_flock.go @@ -0,0 +1,49 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !windows,!plan9,!solaris + +package fileutil + +import ( + "os" + "syscall" +) + +func flockTryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + f, err := os.OpenFile(path, flag, perm) + if err != nil { + return nil, err + } + if err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB); err != nil { + f.Close() + if err == syscall.EWOULDBLOCK { + err = ErrLocked + } + return nil, err + } + return &LockedFile{f}, nil +} + +func flockLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + f, err := os.OpenFile(path, flag, perm) + if err != nil { + return nil, err + } + if err = syscall.Flock(int(f.Fd()), syscall.LOCK_EX); err != nil { + f.Close() + return nil, err + } + return &LockedFile{f}, err +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/lock_linux.go b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_linux.go new file mode 100644 index 00000000..dec25a1a --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_linux.go @@ -0,0 +1,96 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build linux + +package fileutil + +import ( + "os" + "syscall" +) + +// This used to call syscall.Flock() but that call fails with EBADF on NFS. +// An alternative is lockf() which works on NFS but that call lets a process lock +// the same file twice. Instead, use Linux's non-standard open file descriptor +// locks which will block if the process already holds the file lock. +// +// constants from /usr/include/bits/fcntl-linux.h +const ( + F_OFD_GETLK = 37 + F_OFD_SETLK = 37 + F_OFD_SETLKW = 38 +) + +var ( + wrlck = syscall.Flock_t{ + Type: syscall.F_WRLCK, + Whence: int16(os.SEEK_SET), + Start: 0, + Len: 0, + } + + linuxTryLockFile = flockTryLockFile + linuxLockFile = flockLockFile +) + +func init() { + // use open file descriptor locks if the system supports it + getlk := syscall.Flock_t{Type: syscall.F_RDLCK} + if err := syscall.FcntlFlock(0, F_OFD_GETLK, &getlk); err == nil { + linuxTryLockFile = ofdTryLockFile + linuxLockFile = ofdLockFile + } +} + +func TryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + return linuxTryLockFile(path, flag, perm) +} + +func ofdTryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + f, err := os.OpenFile(path, flag, perm) + if err != nil { + return nil, err + } + + flock := wrlck + if err = syscall.FcntlFlock(f.Fd(), F_OFD_SETLK, &flock); err != nil { + f.Close() + if err == syscall.EWOULDBLOCK { + err = ErrLocked + } + return nil, err + } + return &LockedFile{f}, nil +} + +func LockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + return linuxLockFile(path, flag, perm) +} + +func ofdLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + f, err := os.OpenFile(path, flag, perm) + if err != nil { + return nil, err + } + + flock := wrlck + err = syscall.FcntlFlock(f.Fd(), F_OFD_SETLKW, &flock) + + if err != nil { + f.Close() + return nil, err + } + return &LockedFile{f}, err +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/lock_plan9.go b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_plan9.go new file mode 100644 index 00000000..fee6a7c8 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_plan9.go @@ -0,0 +1,45 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import ( + "os" + "syscall" + "time" +) + +func TryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + if err := os.Chmod(path, syscall.DMEXCL|PrivateFileMode); err != nil { + return nil, err + } + f, err := os.Open(path, flag, perm) + if err != nil { + return nil, ErrLocked + } + return &LockedFile{f}, nil +} + +func LockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + if err := os.Chmod(path, syscall.DMEXCL|PrivateFileMode); err != nil { + return nil, err + } + for { + f, err := os.OpenFile(path, flag, perm) + if err == nil { + return &LockedFile{f}, nil + } + time.Sleep(10 * time.Millisecond) + } +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/lock_solaris.go b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_solaris.go new file mode 100644 index 00000000..352ca559 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_solaris.go @@ -0,0 +1,62 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build solaris + +package fileutil + +import ( + "os" + "syscall" +) + +func TryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + var lock syscall.Flock_t + lock.Start = 0 + lock.Len = 0 + lock.Pid = 0 + lock.Type = syscall.F_WRLCK + lock.Whence = 0 + lock.Pid = 0 + f, err := os.OpenFile(path, flag, perm) + if err != nil { + return nil, err + } + if err := syscall.FcntlFlock(f.Fd(), syscall.F_SETLK, &lock); err != nil { + f.Close() + if err == syscall.EAGAIN { + err = ErrLocked + } + return nil, err + } + return &LockedFile{f}, nil +} + +func LockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + var lock syscall.Flock_t + lock.Start = 0 + lock.Len = 0 + lock.Pid = 0 + lock.Type = syscall.F_WRLCK + lock.Whence = 0 + f, err := os.OpenFile(path, flag, perm) + if err != nil { + return nil, err + } + if err = syscall.FcntlFlock(f.Fd(), syscall.F_SETLKW, &lock); err != nil { + f.Close() + return nil, err + } + return &LockedFile{f}, nil +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/lock_unix.go b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_unix.go new file mode 100644 index 00000000..ed01164d --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_unix.go @@ -0,0 +1,29 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !windows,!plan9,!solaris,!linux + +package fileutil + +import ( + "os" +) + +func TryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + return flockTryLockFile(path, flag, perm) +} + +func LockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + return flockLockFile(path, flag, perm) +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/lock_windows.go b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_windows.go new file mode 100644 index 00000000..8698f4a8 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/lock_windows.go @@ -0,0 +1,125 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build windows + +package fileutil + +import ( + "errors" + "fmt" + "os" + "syscall" + "unsafe" +) + +var ( + modkernel32 = syscall.NewLazyDLL("kernel32.dll") + procLockFileEx = modkernel32.NewProc("LockFileEx") + + errLocked = errors.New("The process cannot access the file because another process has locked a portion of the file.") +) + +const ( + // https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203(v=vs.85).aspx + LOCKFILE_EXCLUSIVE_LOCK = 2 + LOCKFILE_FAIL_IMMEDIATELY = 1 + + // see https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx + errLockViolation syscall.Errno = 0x21 +) + +func TryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + f, err := open(path, flag, perm) + if err != nil { + return nil, err + } + if err := lockFile(syscall.Handle(f.Fd()), LOCKFILE_FAIL_IMMEDIATELY); err != nil { + f.Close() + return nil, err + } + return &LockedFile{f}, nil +} + +func LockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) { + f, err := open(path, flag, perm) + if err != nil { + return nil, err + } + if err := lockFile(syscall.Handle(f.Fd()), 0); err != nil { + f.Close() + return nil, err + } + return &LockedFile{f}, nil +} + +func open(path string, flag int, perm os.FileMode) (*os.File, error) { + if path == "" { + return nil, fmt.Errorf("cannot open empty filename") + } + var access uint32 + switch flag { + case syscall.O_RDONLY: + access = syscall.GENERIC_READ + case syscall.O_WRONLY: + access = syscall.GENERIC_WRITE + case syscall.O_RDWR: + access = syscall.GENERIC_READ | syscall.GENERIC_WRITE + case syscall.O_WRONLY | syscall.O_CREAT: + access = syscall.GENERIC_ALL + default: + panic(fmt.Errorf("flag %v is not supported", flag)) + } + fd, err := syscall.CreateFile(&(syscall.StringToUTF16(path)[0]), + access, + syscall.FILE_SHARE_READ|syscall.FILE_SHARE_WRITE|syscall.FILE_SHARE_DELETE, + nil, + syscall.OPEN_ALWAYS, + syscall.FILE_ATTRIBUTE_NORMAL, + 0) + if err != nil { + return nil, err + } + return os.NewFile(uintptr(fd), path), nil +} + +func lockFile(fd syscall.Handle, flags uint32) error { + var flag uint32 = LOCKFILE_EXCLUSIVE_LOCK + flag |= flags + if fd == syscall.InvalidHandle { + return nil + } + err := lockFileEx(fd, flag, 1, 0, &syscall.Overlapped{}) + if err == nil { + return nil + } else if err.Error() == errLocked.Error() { + return ErrLocked + } else if err != errLockViolation { + return err + } + return nil +} + +func lockFileEx(h syscall.Handle, flags, locklow, lockhigh uint32, ol *syscall.Overlapped) (err error) { + var reserved uint32 = 0 + r1, _, e1 := syscall.Syscall6(procLockFileEx.Addr(), 6, uintptr(h), uintptr(flags), uintptr(reserved), uintptr(locklow), uintptr(lockhigh), uintptr(unsafe.Pointer(ol))) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate.go b/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate.go new file mode 100644 index 00000000..bb7f0281 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate.go @@ -0,0 +1,47 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import "os" + +// Preallocate tries to allocate the space for given +// file. This operation is only supported on linux by a +// few filesystems (btrfs, ext4, etc.). +// If the operation is unsupported, no error will be returned. +// Otherwise, the error encountered will be returned. +func Preallocate(f *os.File, sizeInBytes int64, extendFile bool) error { + if extendFile { + return preallocExtend(f, sizeInBytes) + } + return preallocFixed(f, sizeInBytes) +} + +func preallocExtendTrunc(f *os.File, sizeInBytes int64) error { + curOff, err := f.Seek(0, os.SEEK_CUR) + if err != nil { + return err + } + size, err := f.Seek(sizeInBytes, os.SEEK_END) + if err != nil { + return err + } + if _, err = f.Seek(curOff, os.SEEK_SET); err != nil { + return err + } + if sizeInBytes > size { + return nil + } + return f.Truncate(sizeInBytes) +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_darwin.go b/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_darwin.go new file mode 100644 index 00000000..1ed09c56 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_darwin.go @@ -0,0 +1,43 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build darwin + +package fileutil + +import ( + "os" + "syscall" + "unsafe" +) + +func preallocExtend(f *os.File, sizeInBytes int64) error { + if err := preallocFixed(f, sizeInBytes); err != nil { + return err + } + return preallocExtendTrunc(f, sizeInBytes) +} + +func preallocFixed(f *os.File, sizeInBytes int64) error { + fstore := &syscall.Fstore_t{ + Flags: syscall.F_ALLOCATEALL, + Posmode: syscall.F_PEOFPOSMODE, + Length: sizeInBytes} + p := unsafe.Pointer(fstore) + _, _, errno := syscall.Syscall(syscall.SYS_FCNTL, f.Fd(), uintptr(syscall.F_PREALLOCATE), uintptr(p)) + if errno == 0 || errno == syscall.ENOTSUP { + return nil + } + return errno +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_unix.go b/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_unix.go new file mode 100644 index 00000000..50bd84f0 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_unix.go @@ -0,0 +1,49 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build linux + +package fileutil + +import ( + "os" + "syscall" +) + +func preallocExtend(f *os.File, sizeInBytes int64) error { + // use mode = 0 to change size + err := syscall.Fallocate(int(f.Fd()), 0, 0, sizeInBytes) + if err != nil { + errno, ok := err.(syscall.Errno) + // not supported; fallback + // fallocate EINTRs frequently in some environments; fallback + if ok && (errno == syscall.ENOTSUP || errno == syscall.EINTR) { + return preallocExtendTrunc(f, sizeInBytes) + } + } + return err +} + +func preallocFixed(f *os.File, sizeInBytes int64) error { + // use mode = 1 to keep size; see FALLOC_FL_KEEP_SIZE + err := syscall.Fallocate(int(f.Fd()), 1, 0, sizeInBytes) + if err != nil { + errno, ok := err.(syscall.Errno) + // treat not supported as nil error + if ok && errno == syscall.ENOTSUP { + return nil + } + } + return err +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_unsupported.go b/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_unsupported.go new file mode 100644 index 00000000..162fbc5f --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/preallocate_unsupported.go @@ -0,0 +1,25 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !linux,!darwin + +package fileutil + +import "os" + +func preallocExtend(f *os.File, sizeInBytes int64) error { + return preallocExtendTrunc(f, sizeInBytes) +} + +func preallocFixed(f *os.File, sizeInBytes int64) error { return nil } diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/purge.go b/vendor/github.com/coreos/etcd/pkg/fileutil/purge.go new file mode 100644 index 00000000..53bda0c0 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/purge.go @@ -0,0 +1,78 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package fileutil + +import ( + "os" + "path" + "sort" + "strings" + "time" +) + +func PurgeFile(dirname string, suffix string, max uint, interval time.Duration, stop <-chan struct{}) <-chan error { + return purgeFile(dirname, suffix, max, interval, stop, nil) +} + +// purgeFile is the internal implementation for PurgeFile which can post purged files to purgec if non-nil. +func purgeFile(dirname string, suffix string, max uint, interval time.Duration, stop <-chan struct{}, purgec chan<- string) <-chan error { + errC := make(chan error, 1) + go func() { + for { + fnames, err := ReadDir(dirname) + if err != nil { + errC <- err + return + } + newfnames := make([]string, 0) + for _, fname := range fnames { + if strings.HasSuffix(fname, suffix) { + newfnames = append(newfnames, fname) + } + } + sort.Strings(newfnames) + fnames = newfnames + for len(newfnames) > int(max) { + f := path.Join(dirname, newfnames[0]) + l, err := TryLockFile(f, os.O_WRONLY, PrivateFileMode) + if err != nil { + break + } + if err = os.Remove(f); err != nil { + errC <- err + return + } + if err = l.Close(); err != nil { + plog.Errorf("error unlocking %s when purging file (%v)", l.Name(), err) + errC <- err + return + } + plog.Infof("purged file %s successfully", f) + newfnames = newfnames[1:] + } + if purgec != nil { + for i := 0; i < len(fnames)-len(newfnames); i++ { + purgec <- fnames[i] + } + } + select { + case <-time.After(interval): + case <-stop: + return + } + } + }() + return errC +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/sync.go b/vendor/github.com/coreos/etcd/pkg/fileutil/sync.go new file mode 100644 index 00000000..54dd41f4 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/sync.go @@ -0,0 +1,29 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !linux,!darwin + +package fileutil + +import "os" + +// Fsync is a wrapper around file.Sync(). Special handling is needed on darwin platform. +func Fsync(f *os.File) error { + return f.Sync() +} + +// Fdatasync is a wrapper around file.Sync(). Special handling is needed on linux platform. +func Fdatasync(f *os.File) error { + return f.Sync() +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/sync_darwin.go b/vendor/github.com/coreos/etcd/pkg/fileutil/sync_darwin.go new file mode 100644 index 00000000..c2f39bf2 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/sync_darwin.go @@ -0,0 +1,40 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build darwin + +package fileutil + +import ( + "os" + "syscall" +) + +// Fsync on HFS/OSX flushes the data on to the physical drive but the drive +// may not write it to the persistent media for quite sometime and it may be +// written in out-of-order sequence. Using F_FULLFSYNC ensures that the +// physical drive's buffer will also get flushed to the media. +func Fsync(f *os.File) error { + _, _, errno := syscall.Syscall(syscall.SYS_FCNTL, f.Fd(), uintptr(syscall.F_FULLFSYNC), uintptr(0)) + if errno == 0 { + return nil + } + return errno +} + +// Fdatasync on darwin platform invokes fcntl(F_FULLFSYNC) for actual persistence +// on physical drive media. +func Fdatasync(f *os.File) error { + return Fsync(f) +} diff --git a/vendor/github.com/coreos/etcd/pkg/fileutil/sync_linux.go b/vendor/github.com/coreos/etcd/pkg/fileutil/sync_linux.go new file mode 100644 index 00000000..1bbced91 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/fileutil/sync_linux.go @@ -0,0 +1,34 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build linux + +package fileutil + +import ( + "os" + "syscall" +) + +// Fsync is a wrapper around file.Sync(). Special handling is needed on darwin platform. +func Fsync(f *os.File) error { + return f.Sync() +} + +// Fdatasync is similar to fsync(), but does not flush modified metadata +// unless that metadata is needed in order to allow a subsequent data retrieval +// to be correctly handled. +func Fdatasync(f *os.File) error { + return syscall.Fdatasync(int(f.Fd())) +} diff --git a/vendor/github.com/coreos/etcd/pkg/pathutil/path.go b/vendor/github.com/coreos/etcd/pkg/pathutil/path.go new file mode 100644 index 00000000..f26254ba --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/pathutil/path.go @@ -0,0 +1,31 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package pathutil implements utility functions for handling slash-separated +// paths. +package pathutil + +import "path" + +// CanonicalURLPath returns the canonical url path for p, which follows the rules: +// 1. the path always starts with "/" +// 2. replace multiple slashes with a single slash +// 3. replace each '.' '..' path name element with equivalent one +// 4. keep the trailing slash +// The function is borrowed from stdlib http.cleanPath in server.go. +func CanonicalURLPath(p string) string { + if p == "" { + return "/" + } + if p[0] != '/' { + p = "/" + p + } + np := path.Clean(p) + // path.Clean removes trailing slash except for root, + // put the trailing slash back if necessary. + if p[len(p)-1] == '/' && np != "/" { + np += "/" + } + return np +} diff --git a/vendor/github.com/coreos/etcd/pkg/tlsutil/doc.go b/vendor/github.com/coreos/etcd/pkg/tlsutil/doc.go new file mode 100644 index 00000000..3b6aa670 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/tlsutil/doc.go @@ -0,0 +1,16 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package tlsutil provides utility functions for handling TLS. +package tlsutil diff --git a/vendor/github.com/coreos/etcd/pkg/tlsutil/tlsutil.go b/vendor/github.com/coreos/etcd/pkg/tlsutil/tlsutil.go new file mode 100644 index 00000000..79b1f632 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/tlsutil/tlsutil.go @@ -0,0 +1,72 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tlsutil + +import ( + "crypto/tls" + "crypto/x509" + "encoding/pem" + "io/ioutil" +) + +// NewCertPool creates x509 certPool with provided CA files. +func NewCertPool(CAFiles []string) (*x509.CertPool, error) { + certPool := x509.NewCertPool() + + for _, CAFile := range CAFiles { + pemByte, err := ioutil.ReadFile(CAFile) + if err != nil { + return nil, err + } + + for { + var block *pem.Block + block, pemByte = pem.Decode(pemByte) + if block == nil { + break + } + cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + return nil, err + } + certPool.AddCert(cert) + } + } + + return certPool, nil +} + +// NewCert generates TLS cert by using the given cert,key and parse function. +func NewCert(certfile, keyfile string, parseFunc func([]byte, []byte) (tls.Certificate, error)) (*tls.Certificate, error) { + cert, err := ioutil.ReadFile(certfile) + if err != nil { + return nil, err + } + + key, err := ioutil.ReadFile(keyfile) + if err != nil { + return nil, err + } + + if parseFunc == nil { + parseFunc = tls.X509KeyPair + } + + tlsCert, err := parseFunc(cert, key) + if err != nil { + return nil, err + } + return &tlsCert, nil +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/doc.go b/vendor/github.com/coreos/etcd/pkg/transport/doc.go new file mode 100644 index 00000000..37658ce5 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/doc.go @@ -0,0 +1,17 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package transport implements various HTTP transport utilities based on Go +// net package. +package transport diff --git a/vendor/github.com/coreos/etcd/pkg/transport/keepalive_listener.go b/vendor/github.com/coreos/etcd/pkg/transport/keepalive_listener.go new file mode 100644 index 00000000..6ccae4ee --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/keepalive_listener.go @@ -0,0 +1,94 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "crypto/tls" + "fmt" + "net" + "time" +) + +type keepAliveConn interface { + SetKeepAlive(bool) error + SetKeepAlivePeriod(d time.Duration) error +} + +// NewKeepAliveListener returns a listener that listens on the given address. +// Be careful when wrap around KeepAliveListener with another Listener if TLSInfo is not nil. +// Some pkgs (like go/http) might expect Listener to return TLSConn type to start TLS handshake. +// http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html +func NewKeepAliveListener(l net.Listener, scheme string, tlscfg *tls.Config) (net.Listener, error) { + if scheme == "https" { + if tlscfg == nil { + return nil, fmt.Errorf("cannot listen on TLS for given listener: KeyFile and CertFile are not presented") + } + return newTLSKeepaliveListener(l, tlscfg), nil + } + + return &keepaliveListener{ + Listener: l, + }, nil +} + +type keepaliveListener struct{ net.Listener } + +func (kln *keepaliveListener) Accept() (net.Conn, error) { + c, err := kln.Listener.Accept() + if err != nil { + return nil, err + } + kac := c.(keepAliveConn) + // detection time: tcp_keepalive_time + tcp_keepalive_probes + tcp_keepalive_intvl + // default on linux: 30 + 8 * 30 + // default on osx: 30 + 8 * 75 + kac.SetKeepAlive(true) + kac.SetKeepAlivePeriod(30 * time.Second) + return c, nil +} + +// A tlsKeepaliveListener implements a network listener (net.Listener) for TLS connections. +type tlsKeepaliveListener struct { + net.Listener + config *tls.Config +} + +// Accept waits for and returns the next incoming TLS connection. +// The returned connection c is a *tls.Conn. +func (l *tlsKeepaliveListener) Accept() (c net.Conn, err error) { + c, err = l.Listener.Accept() + if err != nil { + return + } + kac := c.(keepAliveConn) + // detection time: tcp_keepalive_time + tcp_keepalive_probes + tcp_keepalive_intvl + // default on linux: 30 + 8 * 30 + // default on osx: 30 + 8 * 75 + kac.SetKeepAlive(true) + kac.SetKeepAlivePeriod(30 * time.Second) + c = tls.Server(c, l.config) + return +} + +// NewListener creates a Listener which accepts connections from an inner +// Listener and wraps each connection with Server. +// The configuration config must be non-nil and must have +// at least one certificate. +func newTLSKeepaliveListener(inner net.Listener, config *tls.Config) net.Listener { + l := &tlsKeepaliveListener{} + l.Listener = inner + l.config = config + return l +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/limit_listen.go b/vendor/github.com/coreos/etcd/pkg/transport/limit_listen.go new file mode 100644 index 00000000..930c5420 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/limit_listen.go @@ -0,0 +1,80 @@ +// Copyright 2013 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package transport provides network utility functions, complementing the more +// common ones in the net package. +package transport + +import ( + "errors" + "net" + "sync" + "time" +) + +var ( + ErrNotTCP = errors.New("only tcp connections have keepalive") +) + +// LimitListener returns a Listener that accepts at most n simultaneous +// connections from the provided Listener. +func LimitListener(l net.Listener, n int) net.Listener { + return &limitListener{l, make(chan struct{}, n)} +} + +type limitListener struct { + net.Listener + sem chan struct{} +} + +func (l *limitListener) acquire() { l.sem <- struct{}{} } +func (l *limitListener) release() { <-l.sem } + +func (l *limitListener) Accept() (net.Conn, error) { + l.acquire() + c, err := l.Listener.Accept() + if err != nil { + l.release() + return nil, err + } + return &limitListenerConn{Conn: c, release: l.release}, nil +} + +type limitListenerConn struct { + net.Conn + releaseOnce sync.Once + release func() +} + +func (l *limitListenerConn) Close() error { + err := l.Conn.Close() + l.releaseOnce.Do(l.release) + return err +} + +func (l *limitListenerConn) SetKeepAlive(doKeepAlive bool) error { + tcpc, ok := l.Conn.(*net.TCPConn) + if !ok { + return ErrNotTCP + } + return tcpc.SetKeepAlive(doKeepAlive) +} + +func (l *limitListenerConn) SetKeepAlivePeriod(d time.Duration) error { + tcpc, ok := l.Conn.(*net.TCPConn) + if !ok { + return ErrNotTCP + } + return tcpc.SetKeepAlivePeriod(d) +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/listener.go b/vendor/github.com/coreos/etcd/pkg/transport/listener.go new file mode 100644 index 00000000..46fe1200 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/listener.go @@ -0,0 +1,268 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "fmt" + "math/big" + "net" + "os" + "path" + "strings" + "time" + + "github.com/coreos/etcd/pkg/fileutil" + "github.com/coreos/etcd/pkg/tlsutil" +) + +func NewListener(addr string, scheme string, tlscfg *tls.Config) (l net.Listener, err error) { + if scheme == "unix" || scheme == "unixs" { + // unix sockets via unix://laddr + l, err = NewUnixListener(addr) + } else { + l, err = net.Listen("tcp", addr) + } + + if err != nil { + return nil, err + } + + if scheme == "https" || scheme == "unixs" { + if tlscfg == nil { + return nil, fmt.Errorf("cannot listen on TLS for %s: KeyFile and CertFile are not presented", scheme+"://"+addr) + } + + l = tls.NewListener(l, tlscfg) + } + + return l, nil +} + +type TLSInfo struct { + CertFile string + KeyFile string + CAFile string + TrustedCAFile string + ClientCertAuth bool + + // ServerName ensures the cert matches the given host in case of discovery / virtual hosting + ServerName string + + selfCert bool + + // parseFunc exists to simplify testing. Typically, parseFunc + // should be left nil. In that case, tls.X509KeyPair will be used. + parseFunc func([]byte, []byte) (tls.Certificate, error) +} + +func (info TLSInfo) String() string { + return fmt.Sprintf("cert = %s, key = %s, ca = %s, trusted-ca = %s, client-cert-auth = %v", info.CertFile, info.KeyFile, info.CAFile, info.TrustedCAFile, info.ClientCertAuth) +} + +func (info TLSInfo) Empty() bool { + return info.CertFile == "" && info.KeyFile == "" +} + +func SelfCert(dirpath string, hosts []string) (info TLSInfo, err error) { + if err = fileutil.TouchDirAll(dirpath); err != nil { + return + } + + certPath := path.Join(dirpath, "cert.pem") + keyPath := path.Join(dirpath, "key.pem") + _, errcert := os.Stat(certPath) + _, errkey := os.Stat(keyPath) + if errcert == nil && errkey == nil { + info.CertFile = certPath + info.KeyFile = keyPath + info.selfCert = true + return + } + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return + } + + tmpl := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{Organization: []string{"etcd"}}, + NotBefore: time.Now(), + NotAfter: time.Now().Add(365 * (24 * time.Hour)), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + } + + for _, host := range hosts { + if ip := net.ParseIP(host); ip != nil { + tmpl.IPAddresses = append(tmpl.IPAddresses, ip) + } else { + tmpl.DNSNames = append(tmpl.DNSNames, strings.Split(host, ":")[0]) + } + } + + priv, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader) + if err != nil { + return + } + + derBytes, err := x509.CreateCertificate(rand.Reader, &tmpl, &tmpl, &priv.PublicKey, priv) + if err != nil { + return + } + + certOut, err := os.Create(certPath) + if err != nil { + return + } + pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}) + certOut.Close() + + b, err := x509.MarshalECPrivateKey(priv) + if err != nil { + return + } + keyOut, err := os.OpenFile(keyPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600) + if err != nil { + return + } + pem.Encode(keyOut, &pem.Block{Type: "EC PRIVATE KEY", Bytes: b}) + keyOut.Close() + + return SelfCert(dirpath, hosts) +} + +func (info TLSInfo) baseConfig() (*tls.Config, error) { + if info.KeyFile == "" || info.CertFile == "" { + return nil, fmt.Errorf("KeyFile and CertFile must both be present[key: %v, cert: %v]", info.KeyFile, info.CertFile) + } + + tlsCert, err := tlsutil.NewCert(info.CertFile, info.KeyFile, info.parseFunc) + if err != nil { + return nil, err + } + + cfg := &tls.Config{ + Certificates: []tls.Certificate{*tlsCert}, + MinVersion: tls.VersionTLS12, + ServerName: info.ServerName, + } + return cfg, nil +} + +// cafiles returns a list of CA file paths. +func (info TLSInfo) cafiles() []string { + cs := make([]string, 0) + if info.CAFile != "" { + cs = append(cs, info.CAFile) + } + if info.TrustedCAFile != "" { + cs = append(cs, info.TrustedCAFile) + } + return cs +} + +// ServerConfig generates a tls.Config object for use by an HTTP server. +func (info TLSInfo) ServerConfig() (*tls.Config, error) { + cfg, err := info.baseConfig() + if err != nil { + return nil, err + } + + cfg.ClientAuth = tls.NoClientCert + if info.CAFile != "" || info.ClientCertAuth { + cfg.ClientAuth = tls.RequireAndVerifyClientCert + } + + CAFiles := info.cafiles() + if len(CAFiles) > 0 { + cp, err := tlsutil.NewCertPool(CAFiles) + if err != nil { + return nil, err + } + cfg.ClientCAs = cp + } + + return cfg, nil +} + +// ClientConfig generates a tls.Config object for use by an HTTP client. +func (info TLSInfo) ClientConfig() (*tls.Config, error) { + var cfg *tls.Config + var err error + + if !info.Empty() { + cfg, err = info.baseConfig() + if err != nil { + return nil, err + } + } else { + cfg = &tls.Config{ServerName: info.ServerName} + } + + CAFiles := info.cafiles() + if len(CAFiles) > 0 { + cfg.RootCAs, err = tlsutil.NewCertPool(CAFiles) + if err != nil { + return nil, err + } + // if given a CA, trust any host with a cert signed by the CA + cfg.ServerName = "" + } + + if info.selfCert { + cfg.InsecureSkipVerify = true + } + return cfg, nil +} + +// ShallowCopyTLSConfig copies *tls.Config. This is only +// work-around for go-vet tests, which complains +// +// assignment copies lock value to p: crypto/tls.Config contains sync.Once contains sync.Mutex +// +// Keep up-to-date with 'go/src/crypto/tls/common.go' +func ShallowCopyTLSConfig(cfg *tls.Config) *tls.Config { + ncfg := tls.Config{ + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + SessionTicketKey: cfg.SessionTicketKey, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + } + return &ncfg +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/timeout_conn.go b/vendor/github.com/coreos/etcd/pkg/transport/timeout_conn.go new file mode 100644 index 00000000..7e8c0203 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/timeout_conn.go @@ -0,0 +1,44 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "net" + "time" +) + +type timeoutConn struct { + net.Conn + wtimeoutd time.Duration + rdtimeoutd time.Duration +} + +func (c timeoutConn) Write(b []byte) (n int, err error) { + if c.wtimeoutd > 0 { + if err := c.SetWriteDeadline(time.Now().Add(c.wtimeoutd)); err != nil { + return 0, err + } + } + return c.Conn.Write(b) +} + +func (c timeoutConn) Read(b []byte) (n int, err error) { + if c.rdtimeoutd > 0 { + if err := c.SetReadDeadline(time.Now().Add(c.rdtimeoutd)); err != nil { + return 0, err + } + } + return c.Conn.Read(b) +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/timeout_dialer.go b/vendor/github.com/coreos/etcd/pkg/transport/timeout_dialer.go new file mode 100644 index 00000000..6ae39ecf --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/timeout_dialer.go @@ -0,0 +1,36 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "net" + "time" +) + +type rwTimeoutDialer struct { + wtimeoutd time.Duration + rdtimeoutd time.Duration + net.Dialer +} + +func (d *rwTimeoutDialer) Dial(network, address string) (net.Conn, error) { + conn, err := d.Dialer.Dial(network, address) + tconn := &timeoutConn{ + rdtimeoutd: d.rdtimeoutd, + wtimeoutd: d.wtimeoutd, + Conn: conn, + } + return tconn, err +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/timeout_listener.go b/vendor/github.com/coreos/etcd/pkg/transport/timeout_listener.go new file mode 100644 index 00000000..f176c43b --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/timeout_listener.go @@ -0,0 +1,54 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "crypto/tls" + "net" + "time" +) + +// NewTimeoutListener returns a listener that listens on the given address. +// If read/write on the accepted connection blocks longer than its time limit, +// it will return timeout error. +func NewTimeoutListener(addr string, scheme string, tlscfg *tls.Config, rdtimeoutd, wtimeoutd time.Duration) (net.Listener, error) { + ln, err := NewListener(addr, scheme, tlscfg) + if err != nil { + return nil, err + } + return &rwTimeoutListener{ + Listener: ln, + rdtimeoutd: rdtimeoutd, + wtimeoutd: wtimeoutd, + }, nil +} + +type rwTimeoutListener struct { + net.Listener + wtimeoutd time.Duration + rdtimeoutd time.Duration +} + +func (rwln *rwTimeoutListener) Accept() (net.Conn, error) { + c, err := rwln.Listener.Accept() + if err != nil { + return nil, err + } + return timeoutConn{ + Conn: c, + wtimeoutd: rwln.wtimeoutd, + rdtimeoutd: rwln.rdtimeoutd, + }, nil +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/timeout_transport.go b/vendor/github.com/coreos/etcd/pkg/transport/timeout_transport.go new file mode 100644 index 00000000..742cc5cb --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/timeout_transport.go @@ -0,0 +1,51 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "net" + "net/http" + "time" +) + +// NewTimeoutTransport returns a transport created using the given TLS info. +// If read/write on the created connection blocks longer than its time limit, +// it will return timeout error. +// If read/write timeout is set, transport will not be able to reuse connection. +func NewTimeoutTransport(info TLSInfo, dialtimeoutd, rdtimeoutd, wtimeoutd time.Duration) (*http.Transport, error) { + tr, err := NewTransport(info, dialtimeoutd) + if err != nil { + return nil, err + } + + if rdtimeoutd != 0 || wtimeoutd != 0 { + // the timed out connection will timeout soon after it is idle. + // it should not be put back to http transport as an idle connection for future usage. + tr.MaxIdleConnsPerHost = -1 + } else { + // allow more idle connections between peers to avoid unncessary port allocation. + tr.MaxIdleConnsPerHost = 1024 + } + + tr.Dial = (&rwTimeoutDialer{ + Dialer: net.Dialer{ + Timeout: dialtimeoutd, + KeepAlive: 30 * time.Second, + }, + rdtimeoutd: rdtimeoutd, + wtimeoutd: wtimeoutd, + }).Dial + return tr, nil +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/tls.go b/vendor/github.com/coreos/etcd/pkg/transport/tls.go new file mode 100644 index 00000000..62fe0d38 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/tls.go @@ -0,0 +1,49 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "fmt" + "strings" + "time" +) + +// ValidateSecureEndpoints scans the given endpoints against tls info, returning only those +// endpoints that could be validated as secure. +func ValidateSecureEndpoints(tlsInfo TLSInfo, eps []string) ([]string, error) { + t, err := NewTransport(tlsInfo, 5*time.Second) + if err != nil { + return nil, err + } + var errs []string + var endpoints []string + for _, ep := range eps { + if !strings.HasPrefix(ep, "https://") { + errs = append(errs, fmt.Sprintf("%q is insecure", ep)) + continue + } + conn, cerr := t.Dial("tcp", ep[len("https://"):]) + if cerr != nil { + errs = append(errs, fmt.Sprintf("%q failed to dial (%v)", ep, cerr)) + continue + } + conn.Close() + endpoints = append(endpoints, ep) + } + if len(errs) != 0 { + err = fmt.Errorf("%s", strings.Join(errs, ",")) + } + return endpoints, err +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/transport.go b/vendor/github.com/coreos/etcd/pkg/transport/transport.go new file mode 100644 index 00000000..ca9ccfd8 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/transport.go @@ -0,0 +1,70 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "net" + "net/http" + "strings" + "time" +) + +type unixTransport struct{ *http.Transport } + +func NewTransport(info TLSInfo, dialtimeoutd time.Duration) (*http.Transport, error) { + cfg, err := info.ClientConfig() + if err != nil { + return nil, err + } + + t := &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: dialtimeoutd, + // value taken from http.DefaultTransport + KeepAlive: 30 * time.Second, + }).Dial, + // value taken from http.DefaultTransport + TLSHandshakeTimeout: 10 * time.Second, + TLSClientConfig: cfg, + } + + dialer := (&net.Dialer{ + Timeout: dialtimeoutd, + KeepAlive: 30 * time.Second, + }) + dial := func(net, addr string) (net.Conn, error) { + return dialer.Dial("unix", addr) + } + + tu := &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: dial, + TLSHandshakeTimeout: 10 * time.Second, + TLSClientConfig: cfg, + } + ut := &unixTransport{tu} + + t.RegisterProtocol("unix", ut) + t.RegisterProtocol("unixs", ut) + + return t, nil +} + +func (urt *unixTransport) RoundTrip(req *http.Request) (*http.Response, error) { + req2 := *req + req2.URL.Scheme = strings.Replace(req.URL.Scheme, "unix", "http", 1) + return urt.Transport.RoundTrip(req) +} diff --git a/vendor/github.com/coreos/etcd/pkg/transport/unix_listener.go b/vendor/github.com/coreos/etcd/pkg/transport/unix_listener.go new file mode 100644 index 00000000..c126b6f7 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/transport/unix_listener.go @@ -0,0 +1,40 @@ +// Copyright 2016 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package transport + +import ( + "net" + "os" +) + +type unixListener struct{ net.Listener } + +func NewUnixListener(addr string) (net.Listener, error) { + if err := os.RemoveAll(addr); err != nil { + return nil, err + } + l, err := net.Listen("unix", addr) + if err != nil { + return nil, err + } + return &unixListener{l}, nil +} + +func (ul *unixListener) Close() error { + if err := os.RemoveAll(ul.Addr().String()); err != nil { + return err + } + return ul.Listener.Close() +} diff --git a/vendor/github.com/coreos/etcd/pkg/types/doc.go b/vendor/github.com/coreos/etcd/pkg/types/doc.go new file mode 100644 index 00000000..de8ef0bd --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/types/doc.go @@ -0,0 +1,17 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package types declares various data types and implements type-checking +// functions. +package types diff --git a/vendor/github.com/coreos/etcd/pkg/types/id.go b/vendor/github.com/coreos/etcd/pkg/types/id.go new file mode 100644 index 00000000..1b042d9c --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/types/id.go @@ -0,0 +1,41 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "strconv" +) + +// ID represents a generic identifier which is canonically +// stored as a uint64 but is typically represented as a +// base-16 string for input/output +type ID uint64 + +func (i ID) String() string { + return strconv.FormatUint(uint64(i), 16) +} + +// IDFromString attempts to create an ID from a base-16 string. +func IDFromString(s string) (ID, error) { + i, err := strconv.ParseUint(s, 16, 64) + return ID(i), err +} + +// IDSlice implements the sort interface +type IDSlice []ID + +func (p IDSlice) Len() int { return len(p) } +func (p IDSlice) Less(i, j int) bool { return uint64(p[i]) < uint64(p[j]) } +func (p IDSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/vendor/github.com/coreos/etcd/pkg/types/set.go b/vendor/github.com/coreos/etcd/pkg/types/set.go new file mode 100644 index 00000000..73ef431b --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/types/set.go @@ -0,0 +1,178 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "reflect" + "sort" + "sync" +) + +type Set interface { + Add(string) + Remove(string) + Contains(string) bool + Equals(Set) bool + Length() int + Values() []string + Copy() Set + Sub(Set) Set +} + +func NewUnsafeSet(values ...string) *unsafeSet { + set := &unsafeSet{make(map[string]struct{})} + for _, v := range values { + set.Add(v) + } + return set +} + +func NewThreadsafeSet(values ...string) *tsafeSet { + us := NewUnsafeSet(values...) + return &tsafeSet{us, sync.RWMutex{}} +} + +type unsafeSet struct { + d map[string]struct{} +} + +// Add adds a new value to the set (no-op if the value is already present) +func (us *unsafeSet) Add(value string) { + us.d[value] = struct{}{} +} + +// Remove removes the given value from the set +func (us *unsafeSet) Remove(value string) { + delete(us.d, value) +} + +// Contains returns whether the set contains the given value +func (us *unsafeSet) Contains(value string) (exists bool) { + _, exists = us.d[value] + return +} + +// ContainsAll returns whether the set contains all given values +func (us *unsafeSet) ContainsAll(values []string) bool { + for _, s := range values { + if !us.Contains(s) { + return false + } + } + return true +} + +// Equals returns whether the contents of two sets are identical +func (us *unsafeSet) Equals(other Set) bool { + v1 := sort.StringSlice(us.Values()) + v2 := sort.StringSlice(other.Values()) + v1.Sort() + v2.Sort() + return reflect.DeepEqual(v1, v2) +} + +// Length returns the number of elements in the set +func (us *unsafeSet) Length() int { + return len(us.d) +} + +// Values returns the values of the Set in an unspecified order. +func (us *unsafeSet) Values() (values []string) { + values = make([]string, 0) + for val := range us.d { + values = append(values, val) + } + return +} + +// Copy creates a new Set containing the values of the first +func (us *unsafeSet) Copy() Set { + cp := NewUnsafeSet() + for val := range us.d { + cp.Add(val) + } + + return cp +} + +// Sub removes all elements in other from the set +func (us *unsafeSet) Sub(other Set) Set { + oValues := other.Values() + result := us.Copy().(*unsafeSet) + + for _, val := range oValues { + if _, ok := result.d[val]; !ok { + continue + } + delete(result.d, val) + } + + return result +} + +type tsafeSet struct { + us *unsafeSet + m sync.RWMutex +} + +func (ts *tsafeSet) Add(value string) { + ts.m.Lock() + defer ts.m.Unlock() + ts.us.Add(value) +} + +func (ts *tsafeSet) Remove(value string) { + ts.m.Lock() + defer ts.m.Unlock() + ts.us.Remove(value) +} + +func (ts *tsafeSet) Contains(value string) (exists bool) { + ts.m.RLock() + defer ts.m.RUnlock() + return ts.us.Contains(value) +} + +func (ts *tsafeSet) Equals(other Set) bool { + ts.m.RLock() + defer ts.m.RUnlock() + return ts.us.Equals(other) +} + +func (ts *tsafeSet) Length() int { + ts.m.RLock() + defer ts.m.RUnlock() + return ts.us.Length() +} + +func (ts *tsafeSet) Values() (values []string) { + ts.m.RLock() + defer ts.m.RUnlock() + return ts.us.Values() +} + +func (ts *tsafeSet) Copy() Set { + ts.m.RLock() + defer ts.m.RUnlock() + usResult := ts.us.Copy().(*unsafeSet) + return &tsafeSet{usResult, sync.RWMutex{}} +} + +func (ts *tsafeSet) Sub(other Set) Set { + ts.m.RLock() + defer ts.m.RUnlock() + usResult := ts.us.Sub(other).(*unsafeSet) + return &tsafeSet{usResult, sync.RWMutex{}} +} diff --git a/vendor/github.com/coreos/etcd/pkg/types/slice.go b/vendor/github.com/coreos/etcd/pkg/types/slice.go new file mode 100644 index 00000000..0dd9ca79 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/types/slice.go @@ -0,0 +1,22 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +// Uint64Slice implements sort interface +type Uint64Slice []uint64 + +func (p Uint64Slice) Len() int { return len(p) } +func (p Uint64Slice) Less(i, j int) bool { return p[i] < p[j] } +func (p Uint64Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/vendor/github.com/coreos/etcd/pkg/types/urls.go b/vendor/github.com/coreos/etcd/pkg/types/urls.go new file mode 100644 index 00000000..9e5d03ff --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/types/urls.go @@ -0,0 +1,82 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "errors" + "fmt" + "net" + "net/url" + "sort" + "strings" +) + +type URLs []url.URL + +func NewURLs(strs []string) (URLs, error) { + all := make([]url.URL, len(strs)) + if len(all) == 0 { + return nil, errors.New("no valid URLs given") + } + for i, in := range strs { + in = strings.TrimSpace(in) + u, err := url.Parse(in) + if err != nil { + return nil, err + } + if u.Scheme != "http" && u.Scheme != "https" && u.Scheme != "unix" && u.Scheme != "unixs" { + return nil, fmt.Errorf("URL scheme must be http, https, unix, or unixs: %s", in) + } + if _, _, err := net.SplitHostPort(u.Host); err != nil { + return nil, fmt.Errorf(`URL address does not have the form "host:port": %s`, in) + } + if u.Path != "" { + return nil, fmt.Errorf("URL must not contain a path: %s", in) + } + all[i] = *u + } + us := URLs(all) + us.Sort() + + return us, nil +} + +func MustNewURLs(strs []string) URLs { + urls, err := NewURLs(strs) + if err != nil { + panic(err) + } + return urls +} + +func (us URLs) String() string { + return strings.Join(us.StringSlice(), ",") +} + +func (us *URLs) Sort() { + sort.Sort(us) +} +func (us URLs) Len() int { return len(us) } +func (us URLs) Less(i, j int) bool { return us[i].String() < us[j].String() } +func (us URLs) Swap(i, j int) { us[i], us[j] = us[j], us[i] } + +func (us URLs) StringSlice() []string { + out := make([]string, len(us)) + for i := range us { + out[i] = us[i].String() + } + + return out +} diff --git a/vendor/github.com/coreos/etcd/pkg/types/urlsmap.go b/vendor/github.com/coreos/etcd/pkg/types/urlsmap.go new file mode 100644 index 00000000..47690cc3 --- /dev/null +++ b/vendor/github.com/coreos/etcd/pkg/types/urlsmap.go @@ -0,0 +1,107 @@ +// Copyright 2015 The etcd Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package types + +import ( + "fmt" + "sort" + "strings" +) + +// URLsMap is a map from a name to its URLs. +type URLsMap map[string]URLs + +// NewURLsMap returns a URLsMap instantiated from the given string, +// which consists of discovery-formatted names-to-URLs, like: +// mach0=http://1.1.1.1:2380,mach0=http://2.2.2.2::2380,mach1=http://3.3.3.3:2380,mach2=http://4.4.4.4:2380 +func NewURLsMap(s string) (URLsMap, error) { + m := parse(s) + + cl := URLsMap{} + for name, urls := range m { + us, err := NewURLs(urls) + if err != nil { + return nil, err + } + cl[name] = us + } + return cl, nil +} + +// NewURLsMapFromStringMap takes a map of strings and returns a URLsMap. The +// string values in the map can be multiple values separated by the sep string. +func NewURLsMapFromStringMap(m map[string]string, sep string) (URLsMap, error) { + var err error + um := URLsMap{} + for k, v := range m { + um[k], err = NewURLs(strings.Split(v, sep)) + if err != nil { + return nil, err + } + } + return um, nil +} + +// String turns URLsMap into discovery-formatted name-to-URLs sorted by name. +func (c URLsMap) String() string { + var pairs []string + for name, urls := range c { + for _, url := range urls { + pairs = append(pairs, fmt.Sprintf("%s=%s", name, url.String())) + } + } + sort.Strings(pairs) + return strings.Join(pairs, ",") +} + +// URLs returns a list of all URLs. +// The returned list is sorted in ascending lexicographical order. +func (c URLsMap) URLs() []string { + var urls []string + for _, us := range c { + for _, u := range us { + urls = append(urls, u.String()) + } + } + sort.Strings(urls) + return urls +} + +// Len returns the size of URLsMap. +func (c URLsMap) Len() int { + return len(c) +} + +// parse parses the given string and returns a map listing the values specified for each key. +func parse(s string) map[string][]string { + m := make(map[string][]string) + for s != "" { + key := s + if i := strings.IndexAny(key, ","); i >= 0 { + key, s = key[:i], key[i+1:] + } else { + s = "" + } + if key == "" { + continue + } + value := "" + if i := strings.Index(key, "="); i >= 0 { + key, value = key[:i], key[i+1:] + } + m[key] = append(m[key], value) + } + return m +} diff --git a/vendor/github.com/coreos/pkg/capnslog/pkg_logger.go b/vendor/github.com/coreos/pkg/capnslog/pkg_logger.go index e2c46688..612d55c6 100644 --- a/vendor/github.com/coreos/pkg/capnslog/pkg_logger.go +++ b/vendor/github.com/coreos/pkg/capnslog/pkg_logger.go @@ -92,6 +92,12 @@ func (p *PackageLogger) Fatal(args ...interface{}) { os.Exit(1) } +func (p *PackageLogger) Fatalln(args ...interface{}) { + s := fmt.Sprintln(args...) + p.internalLog(calldepth, CRITICAL, s) + os.Exit(1) +} + // Error Functions func (p *PackageLogger) Errorf(format string, args ...interface{}) { diff --git a/vendor/github.com/dgrijalva/jwt-go/.travis.yml b/vendor/github.com/dgrijalva/jwt-go/.travis.yml new file mode 100644 index 00000000..bde823d8 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/.travis.yml @@ -0,0 +1,8 @@ +language: go + +go: + - 1.3 + - 1.4 + - 1.5 + - 1.6 + - tip diff --git a/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md b/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md new file mode 100644 index 00000000..fd62e949 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/MIGRATION_GUIDE.md @@ -0,0 +1,96 @@ +## Migration Guide from v2 -> v3 + +Version 3 adds several new, frequently requested features. To do so, it introduces a few breaking changes. We've worked to keep these as minimal as possible. This guide explains the breaking changes and how you can quickly update your code. + +### `Token.Claims` is now an interface type + +The most requested feature from the 2.0 verison of this library was the ability to provide a custom type to the JSON parser for claims. This was implemented by introducing a new interface, `Claims`, to replace `map[string]interface{}`. We also included two concrete implementations of `Claims`: `MapClaims` and `StandardClaims`. + +`MapClaims` is an alias for `map[string]interface{}` with built in validation behavior. It is the default claims type when using `Parse`. The usage is unchanged except you must type cast the claims property. + +The old example for parsing a token looked like this.. + +```go + if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { + fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) + } +``` + +is now directly mapped to... + +```go + if token, err := jwt.Parse(tokenString, keyLookupFunc); err == nil { + claims := token.Claims.(jwt.MapClaims) + fmt.Printf("Token for user %v expires %v", claims["user"], claims["exp"]) + } +``` + +`StandardClaims` is designed to be embedded in your custom type. You can supply a custom claims type with the new `ParseWithClaims` function. Here's an example of using a custom claims type. + +```go + type MyCustomClaims struct { + User string + *StandardClaims + } + + if token, err := jwt.ParseWithClaims(tokenString, &MyCustomClaims{}, keyLookupFunc); err == nil { + claims := token.Claims.(*MyCustomClaims) + fmt.Printf("Token for user %v expires %v", claims.User, claims.StandardClaims.ExpiresAt) + } +``` + +### `ParseFromRequest` has been moved + +To keep this library focused on the tokens without becoming overburdened with complex request processing logic, `ParseFromRequest` and its new companion `ParseFromRequestWithClaims` have been moved to a subpackage, `request`. The method signatues have also been augmented to receive a new argument: `Extractor`. + +`Extractors` do the work of picking the token string out of a request. The interface is simple and composable. + +This simple parsing example: + +```go + if token, err := jwt.ParseFromRequest(tokenString, req, keyLookupFunc); err == nil { + fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) + } +``` + +is directly mapped to: + +```go + if token, err := request.ParseFromRequest(tokenString, request.OAuth2Extractor, req, keyLookupFunc); err == nil { + fmt.Printf("Token for user %v expires %v", token.Claims["user"], token.Claims["exp"]) + } +``` + +There are several concrete `Extractor` types provided for your convenience: + +* `HeaderExtractor` will search a list of headers until one contains content. +* `ArgumentExtractor` will search a list of keys in request query and form arguments until one contains content. +* `MultiExtractor` will try a list of `Extractors` in order until one returns content. +* `AuthorizationHeaderExtractor` will look in the `Authorization` header for a `Bearer` token. +* `OAuth2Extractor` searches the places an OAuth2 token would be specified (per the spec): `Authorization` header and `access_token` argument +* `PostExtractionFilter` wraps an `Extractor`, allowing you to process the content before it's parsed. A simple example is stripping the `Bearer ` text from a header + + +### RSA signing methods no longer accept `[]byte` keys + +Due to a [critical vulnerability](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/), we've decided the convenience of accepting `[]byte` instead of `rsa.PublicKey` or `rsa.PrivateKey` isn't worth the risk of misuse. + +To replace this behavior, we've added two helper methods: `ParseRSAPrivateKeyFromPEM(key []byte) (*rsa.PrivateKey, error)` and `ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error)`. These are just simple helpers for unpacking PEM encoded PKCS1 and PKCS8 keys. If your keys are encoded any other way, all you need to do is convert them to the `crypto/rsa` package's types. + +```go + func keyLookupFunc(*Token) (interface{}, error) { + // Don't forget to validate the alg is what you expect: + if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { + return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) + } + + // Look up key + key, err := lookupPublicKey(token.Header["kid"]) + if err != nil { + return nil, err + } + + // Unpack key from PEM encoded PKCS8 + return jwt.ParseRSAPublicKeyFromPEM(key) + } +``` diff --git a/vendor/github.com/dgrijalva/jwt-go/README.md b/vendor/github.com/dgrijalva/jwt-go/README.md index 8fa7734c..f48365fa 100644 --- a/vendor/github.com/dgrijalva/jwt-go/README.md +++ b/vendor/github.com/dgrijalva/jwt-go/README.md @@ -1,9 +1,16 @@ -A [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-jones-json-web-token.html) +A [go](http://www.golang.org) (or 'golang' for search engine friendliness) implementation of [JSON Web Tokens](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html) + +[![Build Status](https://travis-ci.org/dgrijalva/jwt-go.svg?branch=master)](https://travis-ci.org/dgrijalva/jwt-go) + +**BREAKING CHANGES:*** Version 3.0.0 is here. It includes _a lot_ of changes including a few that break the API. We've tried to break as few things as possible, so there should just be a few type signature changes. A full list of breaking changes is available in `VERSION_HISTORY.md`. See `MIGRATION_GUIDE.md` for more information on updating your code. **NOTICE:** A vulnerability in JWT was [recently published](https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/). As this library doesn't force users to validate the `alg` is what they expected, it's possible your usage is effected. There will be an update soon to remedy this, and it will likey require backwards-incompatible changes to the API. In the short term, please make sure your implementation verifies the `alg` is what you expect. + ## What the heck is a JWT? +JWT.io has [a great introduction](https://jwt.io/introduction) to JSON Web Tokens. + In short, it's a signed JSON object that does something useful (for example, authentication). It's commonly used for `Bearer` tokens in Oauth 2. A token is made of three parts, separated by `.`'s. The first two parts are JSON objects, that have been [base64url](http://tools.ietf.org/html/rfc4648) encoded. The last part is the signature, encoded the same way. The first part is called the header. It contains the necessary information for verifying the last part, the signature. For example, which encryption method was used for signing and what key was used. @@ -12,39 +19,27 @@ The part in the middle is the interesting bit. It's called the Claims and conta ## What's in the box? -This library supports the parsing and verification as well as the generation and signing of JWTs. Current supported signing algorithms are RSA256 and HMAC SHA256, though hooks are present for adding your own. +This library supports the parsing and verification as well as the generation and signing of JWTs. Current supported signing algorithms are HMAC SHA, RSA, RSA-PSS, and ECDSA, though hooks are present for adding your own. -## Parse and Verify +## Examples -Parsing and verifying tokens is pretty straight forward. You pass in the token and a function for looking up the key. This is done as a callback since you may need to parse the token to find out what signing method and key was used. +See [the project documentation](https://godoc.org/github.com/dgrijalva/jwt-go) for examples of usage: -```go - token, err := jwt.Parse(myToken, func(token *jwt.Token) (interface{}, error) { - // Don't forget to validate the alg is what you expect: - if _, ok := token.Method.(*jwt.SigningMethodRSA); !ok { - return nil, fmt.Errorf("Unexpected signing method: %v", token.Header["alg"]) - } - return myLookupKey(token.Header["kid"]) - }) +* [Simple example of parsing and validating a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-Parse--Hmac) +* [Simple example of building and signing a token](https://godoc.org/github.com/dgrijalva/jwt-go#example-New--Hmac) +* [Directory of Examples](https://godoc.org/github.com/dgrijalva/jwt-go#pkg-examples) - if err == nil && token.Valid { - deliverGoodness("!") - } else { - deliverUtterRejection(":(") - } -``` - -## Create a token +## Extensions -```go - // Create the token - token := jwt.New(jwt.SigningMethodHS256) - // Set some claims - token.Claims["foo"] = "bar" - token.Claims["exp"] = time.Now().Add(time.Hour * 72).Unix() - // Sign and get the complete encoded token as a string - tokenString, err := token.SignedString(mySigningKey) -``` +This library publishes all the necessary components for adding your own signing methods. Simply implement the `SigningMethod` interface and register a factory method using `RegisterSigningMethod`. + +Here's an example of an extension that integrates with the Google App Engine signing tools: https://github.com/someone1/gcp-jwt-go + +## Compliance + +This library was last reviewed to comply with [RTF 7519](http://www.rfc-editor.org/info/rfc7519) dated May 2015 with a few notable differences: + +* In order to protect against accidental use of [Unsecured JWTs](http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#UnsecuredJWT), tokens using `alg=none` will only be accepted if the constant `jwt.UnsafeAllowNoneSignatureType` is provided as the key. ## Project Status & Versioning @@ -54,8 +49,37 @@ This project uses [Semantic Versioning 2.0.0](http://semver.org). Accepted pull While we try to make it obvious when we make breaking changes, there isn't a great mechanism for pushing announcements out to users. You may want to use this alternative package include: `gopkg.in/dgrijalva/jwt-go.v2`. It will do the right thing WRT semantic versioning. +## Usage Tips + +### Signing vs Encryption + +A token is simply a JSON object that is signed by its author. this tells you exactly two things about the data: + +* The author of the token was in the possession of the signing secret +* The data has not been modified since it was signed + +It's important to know that JWT does not provide encryption, which means anyone who has access to the token can read its contents. If you need to protect (encrypt) the data, there is a companion spec, `JWE`, that provides this functionality. JWE is currently outside the scope of this library. + +### Choosing a Signing Method + +There are several signing methods available, and you should probably take the time to learn about the various options before choosing one. The principal design decision is most likely going to be symmetric vs asymmetric. + +Symmetric signing methods, such as HSA, use only a single secret. This is probably the simplest signing method to use since any `[]byte` can be used as a valid secret. They are also slightly computationally faster to use, though this rarely is enough to matter. Symmetric signing methods work the best when both producers and consumers of tokens are trusted, or even the same system. Since the same secret is used to both sign and validate tokens, you can't easily distribute the key for validation. + +Asymmetric signing methods, such as RSA, use different keys for signing and verifying tokens. This makes it possible to produce tokens with a private key, and allow any consumer to access the public key for verification. + +### JWT and OAuth + +It's worth mentioning that OAuth and JWT are not the same thing. A JWT token is simply a signed JSON object. It can be used anywhere such a thing is useful. There is some confusion, though, as JWT is the most common type of bearer token used in OAuth2 authentication. + +Without going too far down the rabbit hole, here's a description of the interaction of these technologies: + +* OAuth is a protocol for allowing an identity provider to be separate from the service a user is logging in to. For example, whenever you use Facebook to log into a different service (Yelp, Spotify, etc), you are using OAuth. +* OAuth defines several options for passing around authentication data. One popular method is called a "bearer token". A bearer token is simply a string that _should_ only be held by an authenticated user. Thus, simply presenting this token proves your identity. You can probably derive from here why a JWT might make a good bearer token. +* Because bearer tokens are used for authentication, it's important they're kept secret. This is why transactions that use bearer tokens typically happen over SSL. + ## More Documentation can be found [on godoc.org](http://godoc.org/github.com/dgrijalva/jwt-go). -The command line utility included in this project (cmd/jwt) provides a straightforward example of token creation and parsing as well as a useful tool for debugging your own integration. For a more http centric example, see [this gist](https://gist.github.com/cryptix/45c33ecf0ae54828e63b). +The command line utility included in this project (cmd/jwt) provides a straightforward example of token creation and parsing as well as a useful tool for debugging your own integration. You'll also find several implementation examples in to documentation. diff --git a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md b/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md index 972722ee..b605b450 100644 --- a/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md +++ b/vendor/github.com/dgrijalva/jwt-go/VERSION_HISTORY.md @@ -1,5 +1,56 @@ ## `jwt-go` Version History +#### 3.0.0 + +* **Compatibility Breaking Changes**: See MIGRATION_GUIDE.md for tips on updating your code + * Dropped support for `[]byte` keys when using RSA signing methods. This convenience feature could contribute to security vulnerabilities involving mismatched key types with signing methods. + * `ParseFromRequest` has been moved to `request` subpackage and usage has changed + * The `Claims` property on `Token` is now type `Claims` instead of `map[string]interface{}`. The default value is type `MapClaims`, which is an alias to `map[string]interface{}`. This makes it possible to use a custom type when decoding claims. +* Other Additions and Changes + * Added `Claims` interface type to allow users to decode the claims into a custom type + * Added `ParseWithClaims`, which takes a third argument of type `Claims`. Use this function instead of `Parse` if you have a custom type you'd like to decode into. + * Dramatically improved the functionality and flexibility of `ParseFromRequest`, which is now in the `request` subpackage + * Added `ParseFromRequestWithClaims` which is the `FromRequest` equivalent of `ParseWithClaims` + * Added new interface type `Extractor`, which is used for extracting JWT strings from http requests. Used with `ParseFromRequest` and `ParseFromRequestWithClaims`. + * Added several new, more specific, validation errors to error type bitmask + * Moved examples from README to executable example files + * Signing method registry is now thread safe + * Added new property to `ValidationError`, which contains the raw error returned by calls made by parse/verify (such as those returned by keyfunc or json parser) + +#### 2.7.0 + +This will likely be the last backwards compatible release before 3.0.0, excluding essential bug fixes. + +* Added new option `-show` to the `jwt` command that will just output the decoded token without verifying +* Error text for expired tokens includes how long it's been expired +* Fixed incorrect error returned from `ParseRSAPublicKeyFromPEM` +* Documentation updates + +#### 2.6.0 + +* Exposed inner error within ValidationError +* Fixed validation errors when using UseJSONNumber flag +* Added several unit tests + +#### 2.5.0 + +* Added support for signing method none. You shouldn't use this. The API tries to make this clear. +* Updated/fixed some documentation +* Added more helpful error message when trying to parse tokens that begin with `BEARER ` + +#### 2.4.0 + +* Added new type, Parser, to allow for configuration of various parsing parameters + * You can now specify a list of valid signing methods. Anything outside this set will be rejected. + * You can now opt to use the `json.Number` type instead of `float64` when parsing token JSON +* Added support for [Travis CI](https://travis-ci.org/dgrijalva/jwt-go) +* Fixed some bugs with ECDSA parsing + +#### 2.3.0 + +* Added support for ECDSA signing methods +* Added support for RSA PSS signing methods (requires go v1.4) + #### 2.2.0 * Gracefully handle a `nil` `Keyfunc` being passed to `Parse`. Result will now be the parsed token and an error, instead of a panic. diff --git a/vendor/github.com/dgrijalva/jwt-go/claims.go b/vendor/github.com/dgrijalva/jwt-go/claims.go new file mode 100644 index 00000000..f0228f02 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/claims.go @@ -0,0 +1,134 @@ +package jwt + +import ( + "crypto/subtle" + "fmt" + "time" +) + +// For a type to be a Claims object, it must just have a Valid method that determines +// if the token is invalid for any supported reason +type Claims interface { + Valid() error +} + +// Structured version of Claims Section, as referenced at +// https://tools.ietf.org/html/rfc7519#section-4.1 +// See examples for how to use this with your own claim types +type StandardClaims struct { + Audience string `json:"aud,omitempty"` + ExpiresAt int64 `json:"exp,omitempty"` + Id string `json:"jti,omitempty"` + IssuedAt int64 `json:"iat,omitempty"` + Issuer string `json:"iss,omitempty"` + NotBefore int64 `json:"nbf,omitempty"` + Subject string `json:"sub,omitempty"` +} + +// Validates time based claims "exp, iat, nbf". +// There is no accounting for clock skew. +// As well, if any of the above claims are not in the token, it will still +// be considered a valid claim. +func (c StandardClaims) Valid() error { + vErr := new(ValidationError) + now := TimeFunc().Unix() + + // The claims below are optional, by default, so if they are set to the + // default value in Go, let's not fail the verification for them. + if c.VerifyExpiresAt(now, false) == false { + delta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0)) + vErr.Inner = fmt.Errorf("token is expired by %v", delta) + vErr.Errors |= ValidationErrorExpired + } + + if c.VerifyIssuedAt(now, false) == false { + vErr.Inner = fmt.Errorf("Token used before issued") + vErr.Errors |= ValidationErrorIssuedAt + } + + if c.VerifyNotBefore(now, false) == false { + vErr.Inner = fmt.Errorf("token is not valid yet") + vErr.Errors |= ValidationErrorNotValidYet + } + + if vErr.valid() { + return nil + } + + return vErr +} + +// Compares the aud claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyAudience(cmp string, req bool) bool { + return verifyAud(c.Audience, cmp, req) +} + +// Compares the exp claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyExpiresAt(cmp int64, req bool) bool { + return verifyExp(c.ExpiresAt, cmp, req) +} + +// Compares the iat claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyIssuedAt(cmp int64, req bool) bool { + return verifyIat(c.IssuedAt, cmp, req) +} + +// Compares the iss claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyIssuer(cmp string, req bool) bool { + return verifyIss(c.Issuer, cmp, req) +} + +// Compares the nbf claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (c *StandardClaims) VerifyNotBefore(cmp int64, req bool) bool { + return verifyNbf(c.NotBefore, cmp, req) +} + +// ----- helpers + +func verifyAud(aud string, cmp string, required bool) bool { + if aud == "" { + return !required + } + if subtle.ConstantTimeCompare([]byte(aud), []byte(cmp)) != 0 { + return true + } else { + return false + } +} + +func verifyExp(exp int64, now int64, required bool) bool { + if exp == 0 { + return !required + } + return now <= exp +} + +func verifyIat(iat int64, now int64, required bool) bool { + if iat == 0 { + return !required + } + return now >= iat +} + +func verifyIss(iss string, cmp string, required bool) bool { + if iss == "" { + return !required + } + if subtle.ConstantTimeCompare([]byte(iss), []byte(cmp)) != 0 { + return true + } else { + return false + } +} + +func verifyNbf(nbf int64, now int64, required bool) bool { + if nbf == 0 { + return !required + } + return now >= nbf +} diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa.go new file mode 100644 index 00000000..2f59a222 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/ecdsa.go @@ -0,0 +1,147 @@ +package jwt + +import ( + "crypto" + "crypto/ecdsa" + "crypto/rand" + "errors" + "math/big" +) + +var ( + // Sadly this is missing from crypto/ecdsa compared to crypto/rsa + ErrECDSAVerification = errors.New("crypto/ecdsa: verification error") +) + +// Implements the ECDSA family of signing methods signing methods +type SigningMethodECDSA struct { + Name string + Hash crypto.Hash + KeySize int + CurveBits int +} + +// Specific instances for EC256 and company +var ( + SigningMethodES256 *SigningMethodECDSA + SigningMethodES384 *SigningMethodECDSA + SigningMethodES512 *SigningMethodECDSA +) + +func init() { + // ES256 + SigningMethodES256 = &SigningMethodECDSA{"ES256", crypto.SHA256, 32, 256} + RegisterSigningMethod(SigningMethodES256.Alg(), func() SigningMethod { + return SigningMethodES256 + }) + + // ES384 + SigningMethodES384 = &SigningMethodECDSA{"ES384", crypto.SHA384, 48, 384} + RegisterSigningMethod(SigningMethodES384.Alg(), func() SigningMethod { + return SigningMethodES384 + }) + + // ES512 + SigningMethodES512 = &SigningMethodECDSA{"ES512", crypto.SHA512, 66, 521} + RegisterSigningMethod(SigningMethodES512.Alg(), func() SigningMethod { + return SigningMethodES512 + }) +} + +func (m *SigningMethodECDSA) Alg() string { + return m.Name +} + +// Implements the Verify method from SigningMethod +// For this verify method, key must be an ecdsa.PublicKey struct +func (m *SigningMethodECDSA) Verify(signingString, signature string, key interface{}) error { + var err error + + // Decode the signature + var sig []byte + if sig, err = DecodeSegment(signature); err != nil { + return err + } + + // Get the key + var ecdsaKey *ecdsa.PublicKey + switch k := key.(type) { + case *ecdsa.PublicKey: + ecdsaKey = k + default: + return ErrInvalidKeyType + } + + if len(sig) != 2*m.KeySize { + return ErrECDSAVerification + } + + r := big.NewInt(0).SetBytes(sig[:m.KeySize]) + s := big.NewInt(0).SetBytes(sig[m.KeySize:]) + + // Create hasher + if !m.Hash.Available() { + return ErrHashUnavailable + } + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + // Verify the signature + if verifystatus := ecdsa.Verify(ecdsaKey, hasher.Sum(nil), r, s); verifystatus == true { + return nil + } else { + return ErrECDSAVerification + } +} + +// Implements the Sign method from SigningMethod +// For this signing method, key must be an ecdsa.PrivateKey struct +func (m *SigningMethodECDSA) Sign(signingString string, key interface{}) (string, error) { + // Get the key + var ecdsaKey *ecdsa.PrivateKey + switch k := key.(type) { + case *ecdsa.PrivateKey: + ecdsaKey = k + default: + return "", ErrInvalidKeyType + } + + // Create the hasher + if !m.Hash.Available() { + return "", ErrHashUnavailable + } + + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + // Sign the string and return r, s + if r, s, err := ecdsa.Sign(rand.Reader, ecdsaKey, hasher.Sum(nil)); err == nil { + curveBits := ecdsaKey.Curve.Params().BitSize + + if m.CurveBits != curveBits { + return "", ErrInvalidKey + } + + keyBytes := curveBits / 8 + if curveBits%8 > 0 { + keyBytes += 1 + } + + // We serialize the outpus (r and s) into big-endian byte arrays and pad + // them with zeros on the left to make sure the sizes work out. Both arrays + // must be keyBytes long, and the output must be 2*keyBytes long. + rBytes := r.Bytes() + rBytesPadded := make([]byte, keyBytes) + copy(rBytesPadded[keyBytes-len(rBytes):], rBytes) + + sBytes := s.Bytes() + sBytesPadded := make([]byte, keyBytes) + copy(sBytesPadded[keyBytes-len(sBytes):], sBytes) + + out := append(rBytesPadded, sBytesPadded...) + + return EncodeSegment(out), nil + } else { + return "", err + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go new file mode 100644 index 00000000..d19624b7 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/ecdsa_utils.go @@ -0,0 +1,67 @@ +package jwt + +import ( + "crypto/ecdsa" + "crypto/x509" + "encoding/pem" + "errors" +) + +var ( + ErrNotECPublicKey = errors.New("Key is not a valid ECDSA public key") + ErrNotECPrivateKey = errors.New("Key is not a valid ECDSA private key") +) + +// Parse PEM encoded Elliptic Curve Private Key Structure +func ParseECPrivateKeyFromPEM(key []byte) (*ecdsa.PrivateKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParseECPrivateKey(block.Bytes); err != nil { + return nil, err + } + + var pkey *ecdsa.PrivateKey + var ok bool + if pkey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { + return nil, ErrNotECPrivateKey + } + + return pkey, nil +} + +// Parse PEM encoded PKCS1 or PKCS8 public key +func ParseECPublicKeyFromPEM(key []byte) (*ecdsa.PublicKey, error) { + var err error + + // Parse PEM block + var block *pem.Block + if block, _ = pem.Decode(key); block == nil { + return nil, ErrKeyMustBePEMEncoded + } + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { + if cert, err := x509.ParseCertificate(block.Bytes); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + var pkey *ecdsa.PublicKey + var ok bool + if pkey, ok = parsedKey.(*ecdsa.PublicKey); !ok { + return nil, ErrNotECPublicKey + } + + return pkey, nil +} diff --git a/vendor/github.com/dgrijalva/jwt-go/errors.go b/vendor/github.com/dgrijalva/jwt-go/errors.go index e9e788ff..662df19d 100644 --- a/vendor/github.com/dgrijalva/jwt-go/errors.go +++ b/vendor/github.com/dgrijalva/jwt-go/errors.go @@ -6,9 +6,9 @@ import ( // Error constants var ( - ErrInvalidKey = errors.New("key is invalid or of invalid type") - ErrHashUnavailable = errors.New("the requested hash function is unavailable") - ErrNoTokenInRequest = errors.New("no token present in request") + ErrInvalidKey = errors.New("key is invalid") + ErrInvalidKeyType = errors.New("key is of invalid type") + ErrHashUnavailable = errors.New("the requested hash function is unavailable") ) // The errors that might occur when parsing and validating a token @@ -16,22 +16,42 @@ const ( ValidationErrorMalformed uint32 = 1 << iota // Token is malformed ValidationErrorUnverifiable // Token could not be verified because of signing problems ValidationErrorSignatureInvalid // Signature validation failed - ValidationErrorExpired // Exp validation failed - ValidationErrorNotValidYet // NBF validation failed + + // Standard Claim validation errors + ValidationErrorAudience // AUD validation failed + ValidationErrorExpired // EXP validation failed + ValidationErrorIssuedAt // IAT validation failed + ValidationErrorIssuer // ISS validation failed + ValidationErrorNotValidYet // NBF validation failed + ValidationErrorId // JTI validation failed + ValidationErrorClaimsInvalid // Generic claims validation error ) +// Helper for constructing a ValidationError with a string error message +func NewValidationError(errorText string, errorFlags uint32) *ValidationError { + return &ValidationError{ + text: errorText, + Errors: errorFlags, + } +} + // The error from Parse if token is not valid type ValidationError struct { - err string + Inner error // stores the error returned by external dependencies, i.e.: KeyFunc Errors uint32 // bitfield. see ValidationError... constants + text string // errors that do not have a valid error just have text } // Validation error is an error type func (e ValidationError) Error() string { - if e.err == "" { + if e.Inner != nil { + return e.Inner.Error() + } else if e.text != "" { + return e.text + } else { return "token is invalid" } - return e.err + return e.Inner.Error() } // No errors diff --git a/vendor/github.com/dgrijalva/jwt-go/hmac.go b/vendor/github.com/dgrijalva/jwt-go/hmac.go index 402ff085..c2299192 100644 --- a/vendor/github.com/dgrijalva/jwt-go/hmac.go +++ b/vendor/github.com/dgrijalva/jwt-go/hmac.go @@ -44,26 +44,36 @@ func (m *SigningMethodHMAC) Alg() string { return m.Name } +// Verify the signature of HSXXX tokens. Returns nil if the signature is valid. func (m *SigningMethodHMAC) Verify(signingString, signature string, key interface{}) error { - if keyBytes, ok := key.([]byte); ok { - var sig []byte - var err error - if sig, err = DecodeSegment(signature); err == nil { - if !m.Hash.Available() { - return ErrHashUnavailable - } + // Verify the key is the right type + keyBytes, ok := key.([]byte) + if !ok { + return ErrInvalidKeyType + } - hasher := hmac.New(m.Hash.New, keyBytes) - hasher.Write([]byte(signingString)) - - if !hmac.Equal(sig, hasher.Sum(nil)) { - err = ErrSignatureInvalid - } - } + // Decode signature, for comparison + sig, err := DecodeSegment(signature) + if err != nil { return err } - return ErrInvalidKey + // Can we use the specified hashing method? + if !m.Hash.Available() { + return ErrHashUnavailable + } + + // This signing method is symmetric, so we validate the signature + // by reproducing the signature from the signing string and key, then + // comparing that against the provided signature. + hasher := hmac.New(m.Hash.New, keyBytes) + hasher.Write([]byte(signingString)) + if !hmac.Equal(sig, hasher.Sum(nil)) { + return ErrSignatureInvalid + } + + // No validation errors. Signature is good. + return nil } // Implements the Sign method from SigningMethod for this signing method. diff --git a/vendor/github.com/dgrijalva/jwt-go/jwt.go b/vendor/github.com/dgrijalva/jwt-go/jwt.go deleted file mode 100644 index 06995aa6..00000000 --- a/vendor/github.com/dgrijalva/jwt-go/jwt.go +++ /dev/null @@ -1,198 +0,0 @@ -package jwt - -import ( - "encoding/base64" - "encoding/json" - "net/http" - "strings" - "time" -) - -// TimeFunc provides the current time when parsing token to validate "exp" claim (expiration time). -// You can override it to use another time value. This is useful for testing or if your -// server uses a different time zone than your tokens. -var TimeFunc = time.Now - -// Parse methods use this callback function to supply -// the key for verification. The function receives the parsed, -// but unverified Token. This allows you to use propries in the -// Header of the token (such as `kid`) to identify which key to use. -type Keyfunc func(*Token) (interface{}, error) - -// A JWT Token. Different fields will be used depending on whether you're -// creating or parsing/verifying a token. -type Token struct { - Raw string // The raw token. Populated when you Parse a token - Method SigningMethod // The signing method used or to be used - Header map[string]interface{} // The first segment of the token - Claims map[string]interface{} // The second segment of the token - Signature string // The third segment of the token. Populated when you Parse a token - Valid bool // Is the token valid? Populated when you Parse/Verify a token -} - -// Create a new Token. Takes a signing method -func New(method SigningMethod) *Token { - return &Token{ - Header: map[string]interface{}{ - "typ": "JWT", - "alg": method.Alg(), - }, - Claims: make(map[string]interface{}), - Method: method, - } -} - -// Get the complete, signed token -func (t *Token) SignedString(key interface{}) (string, error) { - var sig, sstr string - var err error - if sstr, err = t.SigningString(); err != nil { - return "", err - } - if sig, err = t.Method.Sign(sstr, key); err != nil { - return "", err - } - return strings.Join([]string{sstr, sig}, "."), nil -} - -// Generate the signing string. This is the -// most expensive part of the whole deal. Unless you -// need this for something special, just go straight for -// the SignedString. -func (t *Token) SigningString() (string, error) { - var err error - parts := make([]string, 2) - for i, _ := range parts { - var source map[string]interface{} - if i == 0 { - source = t.Header - } else { - source = t.Claims - } - - var jsonValue []byte - if jsonValue, err = json.Marshal(source); err != nil { - return "", err - } - - parts[i] = EncodeSegment(jsonValue) - } - return strings.Join(parts, "."), nil -} - -// Parse, validate, and return a token. -// keyFunc will receive the parsed token and should return the key for validating. -// If everything is kosher, err will be nil -func Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { - parts := strings.Split(tokenString, ".") - if len(parts) != 3 { - return nil, &ValidationError{err: "token contains an invalid number of segments", Errors: ValidationErrorMalformed} - } - - var err error - token := &Token{Raw: tokenString} - // parse Header - var headerBytes []byte - if headerBytes, err = DecodeSegment(parts[0]); err != nil { - return token, &ValidationError{err: err.Error(), Errors: ValidationErrorMalformed} - } - if err = json.Unmarshal(headerBytes, &token.Header); err != nil { - return token, &ValidationError{err: err.Error(), Errors: ValidationErrorMalformed} - } - - // parse Claims - var claimBytes []byte - if claimBytes, err = DecodeSegment(parts[1]); err != nil { - return token, &ValidationError{err: err.Error(), Errors: ValidationErrorMalformed} - } - if err = json.Unmarshal(claimBytes, &token.Claims); err != nil { - return token, &ValidationError{err: err.Error(), Errors: ValidationErrorMalformed} - } - - // Lookup signature method - if method, ok := token.Header["alg"].(string); ok { - if token.Method = GetSigningMethod(method); token.Method == nil { - return token, &ValidationError{err: "signing method (alg) is unavailable.", Errors: ValidationErrorUnverifiable} - } - } else { - return token, &ValidationError{err: "signing method (alg) is unspecified.", Errors: ValidationErrorUnverifiable} - } - - // Lookup key - var key interface{} - if keyFunc == nil { - // keyFunc was not provided. short circuiting validation - return token, &ValidationError{err: "no Keyfunc was provided.", Errors: ValidationErrorUnverifiable} - } - if key, err = keyFunc(token); err != nil { - // keyFunc returned an error - return token, &ValidationError{err: err.Error(), Errors: ValidationErrorUnverifiable} - } - - // Check expiration times - vErr := &ValidationError{} - now := TimeFunc().Unix() - if exp, ok := token.Claims["exp"].(float64); ok { - if now > int64(exp) { - vErr.err = "token is expired" - vErr.Errors |= ValidationErrorExpired - } - } - if nbf, ok := token.Claims["nbf"].(float64); ok { - if now < int64(nbf) { - vErr.err = "token is not valid yet" - vErr.Errors |= ValidationErrorNotValidYet - } - } - - // Perform validation - if err = token.Method.Verify(strings.Join(parts[0:2], "."), parts[2], key); err != nil { - vErr.err = err.Error() - vErr.Errors |= ValidationErrorSignatureInvalid - } - - if vErr.valid() { - token.Valid = true - return token, nil - } - - return token, vErr -} - -// Try to find the token in an http.Request. -// This method will call ParseMultipartForm if there's no token in the header. -// Currently, it looks in the Authorization header as well as -// looking for an 'access_token' request parameter in req.Form. -func ParseFromRequest(req *http.Request, keyFunc Keyfunc) (token *Token, err error) { - - // Look for an Authorization header - if ah := req.Header.Get("Authorization"); ah != "" { - // Should be a bearer token - if len(ah) > 6 && strings.ToUpper(ah[0:6]) == "BEARER" { - return Parse(ah[7:], keyFunc) - } - } - - // Look for "access_token" parameter - req.ParseMultipartForm(10e6) - if tokStr := req.Form.Get("access_token"); tokStr != "" { - return Parse(tokStr, keyFunc) - } - - return nil, ErrNoTokenInRequest - -} - -// Encode JWT specific base64url encoding with padding stripped -func EncodeSegment(seg []byte) string { - return strings.TrimRight(base64.URLEncoding.EncodeToString(seg), "=") -} - -// Decode JWT specific base64url encoding with padding stripped -func DecodeSegment(seg string) ([]byte, error) { - if l := len(seg) % 4; l > 0 { - seg += strings.Repeat("=", 4-l) - } - - return base64.URLEncoding.DecodeString(seg) -} diff --git a/vendor/github.com/dgrijalva/jwt-go/map_claims.go b/vendor/github.com/dgrijalva/jwt-go/map_claims.go new file mode 100644 index 00000000..291213c4 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/map_claims.go @@ -0,0 +1,94 @@ +package jwt + +import ( + "encoding/json" + "errors" + // "fmt" +) + +// Claims type that uses the map[string]interface{} for JSON decoding +// This is the default claims type if you don't supply one +type MapClaims map[string]interface{} + +// Compares the aud claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyAudience(cmp string, req bool) bool { + aud, _ := m["aud"].(string) + return verifyAud(aud, cmp, req) +} + +// Compares the exp claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyExpiresAt(cmp int64, req bool) bool { + switch exp := m["exp"].(type) { + case float64: + return verifyExp(int64(exp), cmp, req) + case json.Number: + v, _ := exp.Int64() + return verifyExp(v, cmp, req) + } + return req == false +} + +// Compares the iat claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyIssuedAt(cmp int64, req bool) bool { + switch iat := m["iat"].(type) { + case float64: + return verifyIat(int64(iat), cmp, req) + case json.Number: + v, _ := iat.Int64() + return verifyIat(v, cmp, req) + } + return req == false +} + +// Compares the iss claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyIssuer(cmp string, req bool) bool { + iss, _ := m["iss"].(string) + return verifyIss(iss, cmp, req) +} + +// Compares the nbf claim against cmp. +// If required is false, this method will return true if the value matches or is unset +func (m MapClaims) VerifyNotBefore(cmp int64, req bool) bool { + switch nbf := m["nbf"].(type) { + case float64: + return verifyNbf(int64(nbf), cmp, req) + case json.Number: + v, _ := nbf.Int64() + return verifyNbf(v, cmp, req) + } + return req == false +} + +// Validates time based claims "exp, iat, nbf". +// There is no accounting for clock skew. +// As well, if any of the above claims are not in the token, it will still +// be considered a valid claim. +func (m MapClaims) Valid() error { + vErr := new(ValidationError) + now := TimeFunc().Unix() + + if m.VerifyExpiresAt(now, false) == false { + vErr.Inner = errors.New("Token is expired") + vErr.Errors |= ValidationErrorExpired + } + + if m.VerifyIssuedAt(now, false) == false { + vErr.Inner = errors.New("Token used before issued") + vErr.Errors |= ValidationErrorIssuedAt + } + + if m.VerifyNotBefore(now, false) == false { + vErr.Inner = errors.New("Token is not valid yet") + vErr.Errors |= ValidationErrorNotValidYet + } + + if vErr.valid() { + return nil + } + + return vErr +} diff --git a/vendor/github.com/dgrijalva/jwt-go/none.go b/vendor/github.com/dgrijalva/jwt-go/none.go new file mode 100644 index 00000000..f04d189d --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/none.go @@ -0,0 +1,52 @@ +package jwt + +// Implements the none signing method. This is required by the spec +// but you probably should never use it. +var SigningMethodNone *signingMethodNone + +const UnsafeAllowNoneSignatureType unsafeNoneMagicConstant = "none signing method allowed" + +var NoneSignatureTypeDisallowedError error + +type signingMethodNone struct{} +type unsafeNoneMagicConstant string + +func init() { + SigningMethodNone = &signingMethodNone{} + NoneSignatureTypeDisallowedError = NewValidationError("'none' signature type is not allowed", ValidationErrorSignatureInvalid) + + RegisterSigningMethod(SigningMethodNone.Alg(), func() SigningMethod { + return SigningMethodNone + }) +} + +func (m *signingMethodNone) Alg() string { + return "none" +} + +// Only allow 'none' alg type if UnsafeAllowNoneSignatureType is specified as the key +func (m *signingMethodNone) Verify(signingString, signature string, key interface{}) (err error) { + // Key must be UnsafeAllowNoneSignatureType to prevent accidentally + // accepting 'none' signing method + if _, ok := key.(unsafeNoneMagicConstant); !ok { + return NoneSignatureTypeDisallowedError + } + // If signing method is none, signature must be an empty string + if signature != "" { + return NewValidationError( + "'none' signing method with non-empty signature", + ValidationErrorSignatureInvalid, + ) + } + + // Accept 'none' signing method. + return nil +} + +// Only allow 'none' signing if UnsafeAllowNoneSignatureType is specified as the key +func (m *signingMethodNone) Sign(signingString string, key interface{}) (string, error) { + if _, ok := key.(unsafeNoneMagicConstant); ok { + return "", nil + } + return "", NoneSignatureTypeDisallowedError +} diff --git a/vendor/github.com/dgrijalva/jwt-go/parser.go b/vendor/github.com/dgrijalva/jwt-go/parser.go new file mode 100644 index 00000000..7bf1c4ea --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/parser.go @@ -0,0 +1,131 @@ +package jwt + +import ( + "bytes" + "encoding/json" + "fmt" + "strings" +) + +type Parser struct { + ValidMethods []string // If populated, only these methods will be considered valid + UseJSONNumber bool // Use JSON Number format in JSON decoder + SkipClaimsValidation bool // Skip claims validation during token parsing +} + +// Parse, validate, and return a token. +// keyFunc will receive the parsed token and should return the key for validating. +// If everything is kosher, err will be nil +func (p *Parser) Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { + return p.ParseWithClaims(tokenString, MapClaims{}, keyFunc) +} + +func (p *Parser) ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { + parts := strings.Split(tokenString, ".") + if len(parts) != 3 { + return nil, NewValidationError("token contains an invalid number of segments", ValidationErrorMalformed) + } + + var err error + token := &Token{Raw: tokenString} + + // parse Header + var headerBytes []byte + if headerBytes, err = DecodeSegment(parts[0]); err != nil { + if strings.HasPrefix(strings.ToLower(tokenString), "bearer ") { + return token, NewValidationError("tokenstring should not contain 'bearer '", ValidationErrorMalformed) + } + return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + if err = json.Unmarshal(headerBytes, &token.Header); err != nil { + return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + + // parse Claims + var claimBytes []byte + token.Claims = claims + + if claimBytes, err = DecodeSegment(parts[1]); err != nil { + return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + dec := json.NewDecoder(bytes.NewBuffer(claimBytes)) + if p.UseJSONNumber { + dec.UseNumber() + } + // JSON Decode. Special case for map type to avoid weird pointer behavior + if c, ok := token.Claims.(MapClaims); ok { + err = dec.Decode(&c) + } else { + err = dec.Decode(&claims) + } + // Handle decode error + if err != nil { + return token, &ValidationError{Inner: err, Errors: ValidationErrorMalformed} + } + + // Lookup signature method + if method, ok := token.Header["alg"].(string); ok { + if token.Method = GetSigningMethod(method); token.Method == nil { + return token, NewValidationError("signing method (alg) is unavailable.", ValidationErrorUnverifiable) + } + } else { + return token, NewValidationError("signing method (alg) is unspecified.", ValidationErrorUnverifiable) + } + + // Verify signing method is in the required set + if p.ValidMethods != nil { + var signingMethodValid = false + var alg = token.Method.Alg() + for _, m := range p.ValidMethods { + if m == alg { + signingMethodValid = true + break + } + } + if !signingMethodValid { + // signing method is not in the listed set + return token, NewValidationError(fmt.Sprintf("signing method %v is invalid", alg), ValidationErrorSignatureInvalid) + } + } + + // Lookup key + var key interface{} + if keyFunc == nil { + // keyFunc was not provided. short circuiting validation + return token, NewValidationError("no Keyfunc was provided.", ValidationErrorUnverifiable) + } + if key, err = keyFunc(token); err != nil { + // keyFunc returned an error + return token, &ValidationError{Inner: err, Errors: ValidationErrorUnverifiable} + } + + vErr := &ValidationError{} + + // Validate Claims + if !p.SkipClaimsValidation { + if err := token.Claims.Valid(); err != nil { + + // If the Claims Valid returned an error, check if it is a validation error, + // If it was another error type, create a ValidationError with a generic ClaimsInvalid flag set + if e, ok := err.(*ValidationError); !ok { + vErr = &ValidationError{Inner: err, Errors: ValidationErrorClaimsInvalid} + } else { + vErr = e + } + } + } + + // Perform validation + token.Signature = parts[2] + if err = token.Method.Verify(strings.Join(parts[0:2], "."), token.Signature, key); err != nil { + vErr.Inner = err + vErr.Errors |= ValidationErrorSignatureInvalid + } + + if vErr.valid() { + token.Valid = true + return token, nil + } + + return token, vErr +} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa.go b/vendor/github.com/dgrijalva/jwt-go/rsa.go index cddffced..0ae0b198 100644 --- a/vendor/github.com/dgrijalva/jwt-go/rsa.go +++ b/vendor/github.com/dgrijalva/jwt-go/rsa.go @@ -44,8 +44,7 @@ func (m *SigningMethodRSA) Alg() string { } // Implements the Verify method from SigningMethod -// For this signing method, must be either a PEM encoded PKCS1 or PKCS8 RSA public key as -// []byte, or an rsa.PublicKey structure. +// For this signing method, must be an rsa.PublicKey structure. func (m *SigningMethodRSA) Verify(signingString, signature string, key interface{}) error { var err error @@ -56,16 +55,10 @@ func (m *SigningMethodRSA) Verify(signingString, signature string, key interface } var rsaKey *rsa.PublicKey + var ok bool - switch k := key.(type) { - case []byte: - if rsaKey, err = ParseRSAPublicKeyFromPEM(k); err != nil { - return err - } - case *rsa.PublicKey: - rsaKey = k - default: - return ErrInvalidKey + if rsaKey, ok = key.(*rsa.PublicKey); !ok { + return ErrInvalidKeyType } // Create hasher @@ -80,20 +73,13 @@ func (m *SigningMethodRSA) Verify(signingString, signature string, key interface } // Implements the Sign method from SigningMethod -// For this signing method, must be either a PEM encoded PKCS1 or PKCS8 RSA private key as -// []byte, or an rsa.PrivateKey structure. +// For this signing method, must be an rsa.PrivateKey structure. func (m *SigningMethodRSA) Sign(signingString string, key interface{}) (string, error) { - var err error var rsaKey *rsa.PrivateKey + var ok bool - switch k := key.(type) { - case []byte: - if rsaKey, err = ParseRSAPrivateKeyFromPEM(k); err != nil { - return "", err - } - case *rsa.PrivateKey: - rsaKey = k - default: + // Validate type of key + if rsaKey, ok = key.(*rsa.PrivateKey); !ok { return "", ErrInvalidKey } diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go b/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go new file mode 100644 index 00000000..10ee9db8 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/rsa_pss.go @@ -0,0 +1,126 @@ +// +build go1.4 + +package jwt + +import ( + "crypto" + "crypto/rand" + "crypto/rsa" +) + +// Implements the RSAPSS family of signing methods signing methods +type SigningMethodRSAPSS struct { + *SigningMethodRSA + Options *rsa.PSSOptions +} + +// Specific instances for RS/PS and company +var ( + SigningMethodPS256 *SigningMethodRSAPSS + SigningMethodPS384 *SigningMethodRSAPSS + SigningMethodPS512 *SigningMethodRSAPSS +) + +func init() { + // PS256 + SigningMethodPS256 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS256", + Hash: crypto.SHA256, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA256, + }, + } + RegisterSigningMethod(SigningMethodPS256.Alg(), func() SigningMethod { + return SigningMethodPS256 + }) + + // PS384 + SigningMethodPS384 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS384", + Hash: crypto.SHA384, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA384, + }, + } + RegisterSigningMethod(SigningMethodPS384.Alg(), func() SigningMethod { + return SigningMethodPS384 + }) + + // PS512 + SigningMethodPS512 = &SigningMethodRSAPSS{ + &SigningMethodRSA{ + Name: "PS512", + Hash: crypto.SHA512, + }, + &rsa.PSSOptions{ + SaltLength: rsa.PSSSaltLengthAuto, + Hash: crypto.SHA512, + }, + } + RegisterSigningMethod(SigningMethodPS512.Alg(), func() SigningMethod { + return SigningMethodPS512 + }) +} + +// Implements the Verify method from SigningMethod +// For this verify method, key must be an rsa.PublicKey struct +func (m *SigningMethodRSAPSS) Verify(signingString, signature string, key interface{}) error { + var err error + + // Decode the signature + var sig []byte + if sig, err = DecodeSegment(signature); err != nil { + return err + } + + var rsaKey *rsa.PublicKey + switch k := key.(type) { + case *rsa.PublicKey: + rsaKey = k + default: + return ErrInvalidKey + } + + // Create hasher + if !m.Hash.Available() { + return ErrHashUnavailable + } + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + return rsa.VerifyPSS(rsaKey, m.Hash, hasher.Sum(nil), sig, m.Options) +} + +// Implements the Sign method from SigningMethod +// For this signing method, key must be an rsa.PrivateKey struct +func (m *SigningMethodRSAPSS) Sign(signingString string, key interface{}) (string, error) { + var rsaKey *rsa.PrivateKey + + switch k := key.(type) { + case *rsa.PrivateKey: + rsaKey = k + default: + return "", ErrInvalidKeyType + } + + // Create the hasher + if !m.Hash.Available() { + return "", ErrHashUnavailable + } + + hasher := m.Hash.New() + hasher.Write([]byte(signingString)) + + // Sign the string and return the encoded bytes + if sigBytes, err := rsa.SignPSS(rand.Reader, rsaKey, m.Hash, hasher.Sum(nil), m.Options); err == nil { + return EncodeSegment(sigBytes), nil + } else { + return "", err + } +} diff --git a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go b/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go index 6f3b6ff0..213a90db 100644 --- a/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go +++ b/vendor/github.com/dgrijalva/jwt-go/rsa_utils.go @@ -10,6 +10,7 @@ import ( var ( ErrKeyMustBePEMEncoded = errors.New("Invalid Key: Key must be PEM encoded PKCS1 or PKCS8 private key") ErrNotRSAPrivateKey = errors.New("Key is not a valid RSA private key") + ErrNotRSAPublicKey = errors.New("Key is not a valid RSA public key") ) // Parse PEM encoded PKCS1 or PKCS8 private key @@ -61,7 +62,7 @@ func ParseRSAPublicKeyFromPEM(key []byte) (*rsa.PublicKey, error) { var pkey *rsa.PublicKey var ok bool if pkey, ok = parsedKey.(*rsa.PublicKey); !ok { - return nil, ErrNotRSAPrivateKey + return nil, ErrNotRSAPublicKey } return pkey, nil diff --git a/vendor/github.com/dgrijalva/jwt-go/signing_method.go b/vendor/github.com/dgrijalva/jwt-go/signing_method.go index 109dd0f5..ed1f212b 100644 --- a/vendor/github.com/dgrijalva/jwt-go/signing_method.go +++ b/vendor/github.com/dgrijalva/jwt-go/signing_method.go @@ -1,22 +1,33 @@ package jwt -var signingMethods = map[string]func() SigningMethod{} +import ( + "sync" +) -// Signing method +var signingMethods = map[string]func() SigningMethod{} +var signingMethodLock = new(sync.RWMutex) + +// Implement SigningMethod to add new methods for signing or verifying tokens. type SigningMethod interface { - Verify(signingString, signature string, key interface{}) error - Sign(signingString string, key interface{}) (string, error) - Alg() string + Verify(signingString, signature string, key interface{}) error // Returns nil if signature is valid + Sign(signingString string, key interface{}) (string, error) // Returns encoded signature or error + Alg() string // returns the alg identifier for this method (example: 'HS256') } // Register the "alg" name and a factory function for signing method. // This is typically done during init() in the method's implementation func RegisterSigningMethod(alg string, f func() SigningMethod) { + signingMethodLock.Lock() + defer signingMethodLock.Unlock() + signingMethods[alg] = f } // Get a signing method from an "alg" string func GetSigningMethod(alg string) (method SigningMethod) { + signingMethodLock.RLock() + defer signingMethodLock.RUnlock() + if methodF, ok := signingMethods[alg]; ok { method = methodF() } diff --git a/vendor/github.com/dgrijalva/jwt-go/token.go b/vendor/github.com/dgrijalva/jwt-go/token.go new file mode 100644 index 00000000..d637e086 --- /dev/null +++ b/vendor/github.com/dgrijalva/jwt-go/token.go @@ -0,0 +1,108 @@ +package jwt + +import ( + "encoding/base64" + "encoding/json" + "strings" + "time" +) + +// TimeFunc provides the current time when parsing token to validate "exp" claim (expiration time). +// You can override it to use another time value. This is useful for testing or if your +// server uses a different time zone than your tokens. +var TimeFunc = time.Now + +// Parse methods use this callback function to supply +// the key for verification. The function receives the parsed, +// but unverified Token. This allows you to use properties in the +// Header of the token (such as `kid`) to identify which key to use. +type Keyfunc func(*Token) (interface{}, error) + +// A JWT Token. Different fields will be used depending on whether you're +// creating or parsing/verifying a token. +type Token struct { + Raw string // The raw token. Populated when you Parse a token + Method SigningMethod // The signing method used or to be used + Header map[string]interface{} // The first segment of the token + Claims Claims // The second segment of the token + Signature string // The third segment of the token. Populated when you Parse a token + Valid bool // Is the token valid? Populated when you Parse/Verify a token +} + +// Create a new Token. Takes a signing method +func New(method SigningMethod) *Token { + return NewWithClaims(method, MapClaims{}) +} + +func NewWithClaims(method SigningMethod, claims Claims) *Token { + return &Token{ + Header: map[string]interface{}{ + "typ": "JWT", + "alg": method.Alg(), + }, + Claims: claims, + Method: method, + } +} + +// Get the complete, signed token +func (t *Token) SignedString(key interface{}) (string, error) { + var sig, sstr string + var err error + if sstr, err = t.SigningString(); err != nil { + return "", err + } + if sig, err = t.Method.Sign(sstr, key); err != nil { + return "", err + } + return strings.Join([]string{sstr, sig}, "."), nil +} + +// Generate the signing string. This is the +// most expensive part of the whole deal. Unless you +// need this for something special, just go straight for +// the SignedString. +func (t *Token) SigningString() (string, error) { + var err error + parts := make([]string, 2) + for i, _ := range parts { + var jsonValue []byte + if i == 0 { + if jsonValue, err = json.Marshal(t.Header); err != nil { + return "", err + } + } else { + if jsonValue, err = json.Marshal(t.Claims); err != nil { + return "", err + } + } + + parts[i] = EncodeSegment(jsonValue) + } + return strings.Join(parts, "."), nil +} + +// Parse, validate, and return a token. +// keyFunc will receive the parsed token and should return the key for validating. +// If everything is kosher, err will be nil +func Parse(tokenString string, keyFunc Keyfunc) (*Token, error) { + return new(Parser).Parse(tokenString, keyFunc) +} + +func ParseWithClaims(tokenString string, claims Claims, keyFunc Keyfunc) (*Token, error) { + return new(Parser).ParseWithClaims(tokenString, claims, keyFunc) +} + +// Encode JWT specific base64url encoding with padding stripped +func EncodeSegment(seg []byte) string { + return strings.TrimRight(base64.URLEncoding.EncodeToString(seg), "=") +} + +// Decode JWT specific base64url encoding with padding stripped +func DecodeSegment(seg string) ([]byte, error) { + if l := len(seg) % 4; l > 0 { + seg += strings.Repeat("=", 4-l) + } + + return base64.URLEncoding.DecodeString(seg) +} diff --git a/vendor/github.com/docker/distribution/Jenkinsfile b/vendor/github.com/docker/distribution/Jenkinsfile new file mode 100644 index 00000000..fa29520b --- /dev/null +++ b/vendor/github.com/docker/distribution/Jenkinsfile @@ -0,0 +1,8 @@ +// Only run on Linux atm +wrappedNode(label: 'docker') { + deleteDir() + stage "checkout" + checkout scm + + documentationChecker("docs") +} diff --git a/vendor/github.com/docker/distribution/README.md b/vendor/github.com/docker/distribution/README.md index d35bcb68..99fd5945 100644 --- a/vendor/github.com/docker/distribution/README.md +++ b/vendor/github.com/docker/distribution/README.md @@ -60,10 +60,10 @@ For information on upcoming functionality, please see [ROADMAP.md](ROADMAP.md). By default, Docker users pull images from Docker's public registry instance. [Installing Docker](https://docs.docker.com/engine/installation/) gives users this ability. Users can also push images to a repository on Docker's public registry, -if they have a [Docker Hub](https://hub.docker.com/) account. +if they have a [Docker Hub](https://hub.docker.com/) account. For some users and even companies, this default behavior is sufficient. For -others, it is not. +others, it is not. For example, users with their own software products may want to maintain a registry for private, company images. Also, you may wish to deploy your own @@ -83,7 +83,7 @@ created. For more information see [docker/migrator] Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute issues, fixes, and patches to this project. If you are contributing code, see -the instructions for [building a development environment](docs/recipes/building.md). +the instructions for [building a development environment](BUILDING.md). ## Support diff --git a/vendor/github.com/docker/distribution/circle.yml b/vendor/github.com/docker/distribution/circle.yml index 164407dc..52348a4b 100644 --- a/vendor/github.com/docker/distribution/circle.yml +++ b/vendor/github.com/docker/distribution/circle.yml @@ -77,13 +77,16 @@ test: timeout: 1000 pwd: $BASE_STABLE + # Test stable with race + - gvm use stable; export ROOT_PACKAGE=$(go list .); go list -tags "$DOCKER_BUILDTAGS" ./... | grep -v "/vendor/" | grep -v "registry/handlers" | grep -v "registry/storage/driver" | xargs -L 1 -I{} bash -c 'export PACKAGE={}; godep go test -race -tags "$DOCKER_BUILDTAGS" -test.short $PACKAGE': + timeout: 1000 + pwd: $BASE_STABLE post: # Report to codecov - bash <(curl -s https://codecov.io/bash): pwd: $BASE_STABLE ## Notes - # Disabled the -race detector due to massive memory usage. # Do we want these as well? # - go get code.google.com/p/go.tools/cmd/goimports # - test -z "$(goimports -l -w ./... | tee /dev/stderr)" diff --git a/vendor/github.com/docker/distribution/manifest/schema2/manifest.go b/vendor/github.com/docker/distribution/manifest/schema2/manifest.go index 87b9d62e..dd2ed114 100644 --- a/vendor/github.com/docker/distribution/manifest/schema2/manifest.go +++ b/vendor/github.com/docker/distribution/manifest/schema2/manifest.go @@ -18,7 +18,7 @@ const ( MediaTypeConfig = "application/vnd.docker.container.image.v1+json" // MediaTypePluginConfig specifies the mediaType for plugin configuration. - MediaTypePluginConfig = "application/vnd.docker.plugin.v0+json" + MediaTypePluginConfig = "application/vnd.docker.plugin.image.v0+json" // MediaTypeLayer is the mediaType used for layers referenced by the // manifest. diff --git a/vendor/github.com/docker/distribution/reference/reference.go b/vendor/github.com/docker/distribution/reference/reference.go index bb09fa25..5b3e08ee 100644 --- a/vendor/github.com/docker/distribution/reference/reference.go +++ b/vendor/github.com/docker/distribution/reference/reference.go @@ -24,6 +24,7 @@ package reference import ( "errors" "fmt" + "strings" "github.com/docker/distribution/digest" ) @@ -43,6 +44,9 @@ var ( // ErrDigestInvalidFormat represents an error while trying to parse a string as a tag. ErrDigestInvalidFormat = errors.New("invalid digest format") + // ErrNameContainsUppercase is returned for invalid repository names that contain uppercase characters. + ErrNameContainsUppercase = errors.New("repository name must be lowercase") + // ErrNameEmpty is returned for empty, invalid repository names. ErrNameEmpty = errors.New("repository name must have at least one component") @@ -149,7 +153,9 @@ func Parse(s string) (Reference, error) { if s == "" { return nil, ErrNameEmpty } - // TODO(dmcgowan): Provide more specific and helpful error + if ReferenceRegexp.FindStringSubmatch(strings.ToLower(s)) != nil { + return nil, ErrNameContainsUppercase + } return nil, ErrReferenceInvalidFormat } diff --git a/vendor/github.com/docker/docker/pkg/system/chtimes.go b/vendor/github.com/docker/docker/pkg/system/chtimes.go new file mode 100644 index 00000000..7637f12e --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/chtimes.go @@ -0,0 +1,52 @@ +package system + +import ( + "os" + "syscall" + "time" + "unsafe" +) + +var ( + maxTime time.Time +) + +func init() { + if unsafe.Sizeof(syscall.Timespec{}.Nsec) == 8 { + // This is a 64 bit timespec + // os.Chtimes limits time to the following + maxTime = time.Unix(0, 1<<63-1) + } else { + // This is a 32 bit timespec + maxTime = time.Unix(1<<31-1, 0) + } +} + +// Chtimes changes the access time and modified time of a file at the given path +func Chtimes(name string, atime time.Time, mtime time.Time) error { + unixMinTime := time.Unix(0, 0) + unixMaxTime := maxTime + + // If the modified time is prior to the Unix Epoch, or after the + // end of Unix Time, os.Chtimes has undefined behavior + // default to Unix Epoch in this case, just in case + + if atime.Before(unixMinTime) || atime.After(unixMaxTime) { + atime = unixMinTime + } + + if mtime.Before(unixMinTime) || mtime.After(unixMaxTime) { + mtime = unixMinTime + } + + if err := os.Chtimes(name, atime, mtime); err != nil { + return err + } + + // Take platform specific action for setting create time. + if err := setCTime(name, mtime); err != nil { + return err + } + + return nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/chtimes_unix.go b/vendor/github.com/docker/docker/pkg/system/chtimes_unix.go new file mode 100644 index 00000000..09d58bcb --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/chtimes_unix.go @@ -0,0 +1,14 @@ +// +build !windows + +package system + +import ( + "time" +) + +//setCTime will set the create time on a file. On Unix, the create +//time is updated as a side effect of setting the modified time, so +//no action is required. +func setCTime(path string, ctime time.Time) error { + return nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/chtimes_windows.go b/vendor/github.com/docker/docker/pkg/system/chtimes_windows.go new file mode 100644 index 00000000..29458684 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/chtimes_windows.go @@ -0,0 +1,27 @@ +// +build windows + +package system + +import ( + "syscall" + "time" +) + +//setCTime will set the create time on a file. On Windows, this requires +//calling SetFileTime and explicitly including the create time. +func setCTime(path string, ctime time.Time) error { + ctimespec := syscall.NsecToTimespec(ctime.UnixNano()) + pathp, e := syscall.UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := syscall.CreateFile(pathp, + syscall.FILE_WRITE_ATTRIBUTES, syscall.FILE_SHARE_WRITE, nil, + syscall.OPEN_EXISTING, syscall.FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer syscall.Close(h) + c := syscall.NsecToFiletime(syscall.TimespecToNsec(ctimespec)) + return syscall.SetFileTime(h, &c, nil, nil) +} diff --git a/vendor/github.com/docker/docker/pkg/system/errors.go b/vendor/github.com/docker/docker/pkg/system/errors.go new file mode 100644 index 00000000..28831898 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/errors.go @@ -0,0 +1,10 @@ +package system + +import ( + "errors" +) + +var ( + // ErrNotSupportedPlatform means the platform is not supported. + ErrNotSupportedPlatform = errors.New("platform and architecture is not supported") +) diff --git a/vendor/github.com/docker/docker/pkg/system/events_windows.go b/vendor/github.com/docker/docker/pkg/system/events_windows.go new file mode 100644 index 00000000..04e2de78 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/events_windows.go @@ -0,0 +1,83 @@ +package system + +// This file implements syscalls for Win32 events which are not implemented +// in golang. + +import ( + "syscall" + "unsafe" +) + +var ( + procCreateEvent = modkernel32.NewProc("CreateEventW") + procOpenEvent = modkernel32.NewProc("OpenEventW") + procSetEvent = modkernel32.NewProc("SetEvent") + procResetEvent = modkernel32.NewProc("ResetEvent") + procPulseEvent = modkernel32.NewProc("PulseEvent") +) + +// CreateEvent implements win32 CreateEventW func in golang. It will create an event object. +func CreateEvent(eventAttributes *syscall.SecurityAttributes, manualReset bool, initialState bool, name string) (handle syscall.Handle, err error) { + namep, _ := syscall.UTF16PtrFromString(name) + var _p1 uint32 + if manualReset { + _p1 = 1 + } + var _p2 uint32 + if initialState { + _p2 = 1 + } + r0, _, e1 := procCreateEvent.Call(uintptr(unsafe.Pointer(eventAttributes)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(namep))) + use(unsafe.Pointer(namep)) + handle = syscall.Handle(r0) + if handle == syscall.InvalidHandle { + err = e1 + } + return +} + +// OpenEvent implements win32 OpenEventW func in golang. It opens an event object. +func OpenEvent(desiredAccess uint32, inheritHandle bool, name string) (handle syscall.Handle, err error) { + namep, _ := syscall.UTF16PtrFromString(name) + var _p1 uint32 + if inheritHandle { + _p1 = 1 + } + r0, _, e1 := procOpenEvent.Call(uintptr(desiredAccess), uintptr(_p1), uintptr(unsafe.Pointer(namep))) + use(unsafe.Pointer(namep)) + handle = syscall.Handle(r0) + if handle == syscall.InvalidHandle { + err = e1 + } + return +} + +// SetEvent implements win32 SetEvent func in golang. +func SetEvent(handle syscall.Handle) (err error) { + return setResetPulse(handle, procSetEvent) +} + +// ResetEvent implements win32 ResetEvent func in golang. +func ResetEvent(handle syscall.Handle) (err error) { + return setResetPulse(handle, procResetEvent) +} + +// PulseEvent implements win32 PulseEvent func in golang. +func PulseEvent(handle syscall.Handle) (err error) { + return setResetPulse(handle, procPulseEvent) +} + +func setResetPulse(handle syscall.Handle, proc *syscall.LazyProc) (err error) { + r0, _, _ := proc.Call(uintptr(handle)) + if r0 != 0 { + err = syscall.Errno(r0) + } + return +} + +var temp unsafe.Pointer + +// use ensures a variable is kept alive without the GC freeing while still needed +func use(p unsafe.Pointer) { + temp = p +} diff --git a/vendor/github.com/docker/docker/pkg/system/filesys.go b/vendor/github.com/docker/docker/pkg/system/filesys.go new file mode 100644 index 00000000..c14feb84 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/filesys.go @@ -0,0 +1,19 @@ +// +build !windows + +package system + +import ( + "os" + "path/filepath" +) + +// MkdirAll creates a directory named path along with any necessary parents, +// with permission specified by attribute perm for all dir created. +func MkdirAll(path string, perm os.FileMode) error { + return os.MkdirAll(path, perm) +} + +// IsAbs is a platform-specific wrapper for filepath.IsAbs. +func IsAbs(path string) bool { + return filepath.IsAbs(path) +} diff --git a/vendor/github.com/docker/docker/pkg/system/filesys_windows.go b/vendor/github.com/docker/docker/pkg/system/filesys_windows.go new file mode 100644 index 00000000..16823d55 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/filesys_windows.go @@ -0,0 +1,82 @@ +// +build windows + +package system + +import ( + "os" + "path/filepath" + "regexp" + "strings" + "syscall" +) + +// MkdirAll implementation that is volume path aware for Windows. +func MkdirAll(path string, perm os.FileMode) error { + if re := regexp.MustCompile(`^\\\\\?\\Volume{[a-z0-9-]+}$`); re.MatchString(path) { + return nil + } + + // The rest of this method is copied from os.MkdirAll and should be kept + // as-is to ensure compatibility. + + // Fast path: if we can tell whether path is a directory or file, stop with success or error. + dir, err := os.Stat(path) + if err == nil { + if dir.IsDir() { + return nil + } + return &os.PathError{ + Op: "mkdir", + Path: path, + Err: syscall.ENOTDIR, + } + } + + // Slow path: make sure parent exists and then call Mkdir for path. + i := len(path) + for i > 0 && os.IsPathSeparator(path[i-1]) { // Skip trailing path separator. + i-- + } + + j := i + for j > 0 && !os.IsPathSeparator(path[j-1]) { // Scan backward over element. + j-- + } + + if j > 1 { + // Create parent + err = MkdirAll(path[0:j-1], perm) + if err != nil { + return err + } + } + + // Parent now exists; invoke Mkdir and use its result. + err = os.Mkdir(path, perm) + if err != nil { + // Handle arguments like "foo/." by + // double-checking that directory doesn't exist. + dir, err1 := os.Lstat(path) + if err1 == nil && dir.IsDir() { + return nil + } + return err + } + return nil +} + +// IsAbs is a platform-specific wrapper for filepath.IsAbs. On Windows, +// golang filepath.IsAbs does not consider a path \windows\system32 as absolute +// as it doesn't start with a drive-letter/colon combination. However, in +// docker we need to verify things such as WORKDIR /windows/system32 in +// a Dockerfile (which gets translated to \windows\system32 when being processed +// by the daemon. This SHOULD be treated as absolute from a docker processing +// perspective. +func IsAbs(path string) bool { + if !filepath.IsAbs(path) { + if !strings.HasPrefix(path, string(os.PathSeparator)) { + return false + } + } + return true +} diff --git a/vendor/github.com/docker/docker/pkg/system/lstat.go b/vendor/github.com/docker/docker/pkg/system/lstat.go new file mode 100644 index 00000000..bd23c4d5 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/lstat.go @@ -0,0 +1,19 @@ +// +build !windows + +package system + +import ( + "syscall" +) + +// Lstat takes a path to a file and returns +// a system.StatT type pertaining to that file. +// +// Throws an error if the file does not exist +func Lstat(path string) (*StatT, error) { + s := &syscall.Stat_t{} + if err := syscall.Lstat(path, s); err != nil { + return nil, err + } + return fromStatT(s) +} diff --git a/vendor/github.com/docker/docker/pkg/system/lstat_windows.go b/vendor/github.com/docker/docker/pkg/system/lstat_windows.go new file mode 100644 index 00000000..49e87eb4 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/lstat_windows.go @@ -0,0 +1,25 @@ +// +build windows + +package system + +import ( + "os" +) + +// Lstat calls os.Lstat to get a fileinfo interface back. +// This is then copied into our own locally defined structure. +// Note the Linux version uses fromStatT to do the copy back, +// but that not strictly necessary when already in an OS specific module. +func Lstat(path string) (*StatT, error) { + fi, err := os.Lstat(path) + if err != nil { + return nil, err + } + + return &StatT{ + name: fi.Name(), + size: fi.Size(), + mode: fi.Mode(), + modTime: fi.ModTime(), + isDir: fi.IsDir()}, nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/meminfo.go b/vendor/github.com/docker/docker/pkg/system/meminfo.go new file mode 100644 index 00000000..3b6e947e --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/meminfo.go @@ -0,0 +1,17 @@ +package system + +// MemInfo contains memory statistics of the host system. +type MemInfo struct { + // Total usable RAM (i.e. physical RAM minus a few reserved bits and the + // kernel binary code). + MemTotal int64 + + // Amount of free memory. + MemFree int64 + + // Total amount of swap space available. + SwapTotal int64 + + // Amount of swap space that is currently unused. + SwapFree int64 +} diff --git a/vendor/github.com/docker/docker/pkg/system/meminfo_linux.go b/vendor/github.com/docker/docker/pkg/system/meminfo_linux.go new file mode 100644 index 00000000..385f1d5e --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/meminfo_linux.go @@ -0,0 +1,65 @@ +package system + +import ( + "bufio" + "io" + "os" + "strconv" + "strings" + + "github.com/docker/go-units" +) + +// ReadMemInfo retrieves memory statistics of the host system and returns a +// MemInfo type. +func ReadMemInfo() (*MemInfo, error) { + file, err := os.Open("/proc/meminfo") + if err != nil { + return nil, err + } + defer file.Close() + return parseMemInfo(file) +} + +// parseMemInfo parses the /proc/meminfo file into +// a MemInfo object given an io.Reader to the file. +// Throws error if there are problems reading from the file +func parseMemInfo(reader io.Reader) (*MemInfo, error) { + meminfo := &MemInfo{} + scanner := bufio.NewScanner(reader) + for scanner.Scan() { + // Expected format: ["MemTotal:", "1234", "kB"] + parts := strings.Fields(scanner.Text()) + + // Sanity checks: Skip malformed entries. + if len(parts) < 3 || parts[2] != "kB" { + continue + } + + // Convert to bytes. + size, err := strconv.Atoi(parts[1]) + if err != nil { + continue + } + bytes := int64(size) * units.KiB + + switch parts[0] { + case "MemTotal:": + meminfo.MemTotal = bytes + case "MemFree:": + meminfo.MemFree = bytes + case "SwapTotal:": + meminfo.SwapTotal = bytes + case "SwapFree:": + meminfo.SwapFree = bytes + } + + } + + // Handle errors that may have occurred during the reading of the file. + if err := scanner.Err(); err != nil { + return nil, err + } + + return meminfo, nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/meminfo_solaris.go b/vendor/github.com/docker/docker/pkg/system/meminfo_solaris.go new file mode 100644 index 00000000..313c601b --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/meminfo_solaris.go @@ -0,0 +1,128 @@ +// +build solaris,cgo + +package system + +import ( + "fmt" + "unsafe" +) + +// #cgo LDFLAGS: -lkstat +// #include +// #include +// #include +// #include +// #include +// #include +// struct swaptable *allocSwaptable(int num) { +// struct swaptable *st; +// struct swapent *swapent; +// st = (struct swaptable *)malloc(num * sizeof(swapent_t) + sizeof (int)); +// swapent = st->swt_ent; +// for (int i = 0; i < num; i++,swapent++) { +// swapent->ste_path = (char *)malloc(MAXPATHLEN * sizeof (char)); +// } +// st->swt_n = num; +// return st; +//} +// void freeSwaptable (struct swaptable *st) { +// struct swapent *swapent = st->swt_ent; +// for (int i = 0; i < st->swt_n; i++,swapent++) { +// free(swapent->ste_path); +// } +// free(st); +// } +// swapent_t getSwapEnt(swapent_t *ent, int i) { +// return ent[i]; +// } +// int64_t getPpKernel() { +// int64_t pp_kernel = 0; +// kstat_ctl_t *ksc; +// kstat_t *ks; +// kstat_named_t *knp; +// kid_t kid; +// +// if ((ksc = kstat_open()) == NULL) { +// return -1; +// } +// if ((ks = kstat_lookup(ksc, "unix", 0, "system_pages")) == NULL) { +// return -1; +// } +// if (((kid = kstat_read(ksc, ks, NULL)) == -1) || +// ((knp = kstat_data_lookup(ks, "pp_kernel")) == NULL)) { +// return -1; +// } +// switch (knp->data_type) { +// case KSTAT_DATA_UINT64: +// pp_kernel = knp->value.ui64; +// break; +// case KSTAT_DATA_UINT32: +// pp_kernel = knp->value.ui32; +// break; +// } +// pp_kernel *= sysconf(_SC_PAGESIZE); +// return (pp_kernel > 0 ? pp_kernel : -1); +// } +import "C" + +// Get the system memory info using sysconf same as prtconf +func getTotalMem() int64 { + pagesize := C.sysconf(C._SC_PAGESIZE) + npages := C.sysconf(C._SC_PHYS_PAGES) + return int64(pagesize * npages) +} + +func getFreeMem() int64 { + pagesize := C.sysconf(C._SC_PAGESIZE) + npages := C.sysconf(C._SC_AVPHYS_PAGES) + return int64(pagesize * npages) +} + +// ReadMemInfo retrieves memory statistics of the host system and returns a +// MemInfo type. +func ReadMemInfo() (*MemInfo, error) { + + ppKernel := C.getPpKernel() + MemTotal := getTotalMem() + MemFree := getFreeMem() + SwapTotal, SwapFree, err := getSysSwap() + + if ppKernel < 0 || MemTotal < 0 || MemFree < 0 || SwapTotal < 0 || + SwapFree < 0 { + return nil, fmt.Errorf("Error getting system memory info %v\n", err) + } + + meminfo := &MemInfo{} + // Total memory is total physical memory less than memory locked by kernel + meminfo.MemTotal = MemTotal - int64(ppKernel) + meminfo.MemFree = MemFree + meminfo.SwapTotal = SwapTotal + meminfo.SwapFree = SwapFree + + return meminfo, nil +} + +func getSysSwap() (int64, int64, error) { + var tSwap int64 + var fSwap int64 + var diskblksPerPage int64 + num, err := C.swapctl(C.SC_GETNSWP, nil) + if err != nil { + return -1, -1, err + } + st := C.allocSwaptable(num) + _, err = C.swapctl(C.SC_LIST, unsafe.Pointer(st)) + if err != nil { + C.freeSwaptable(st) + return -1, -1, err + } + + diskblksPerPage = int64(C.sysconf(C._SC_PAGESIZE) >> C.DEV_BSHIFT) + for i := 0; i < int(num); i++ { + swapent := C.getSwapEnt(&st.swt_ent[0], C.int(i)) + tSwap += int64(swapent.ste_pages) * diskblksPerPage + fSwap += int64(swapent.ste_free) * diskblksPerPage + } + C.freeSwaptable(st) + return tSwap, fSwap, nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/meminfo_unsupported.go b/vendor/github.com/docker/docker/pkg/system/meminfo_unsupported.go new file mode 100644 index 00000000..3ce019df --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/meminfo_unsupported.go @@ -0,0 +1,8 @@ +// +build !linux,!windows,!solaris + +package system + +// ReadMemInfo is not supported on platforms other than linux and windows. +func ReadMemInfo() (*MemInfo, error) { + return nil, ErrNotSupportedPlatform +} diff --git a/vendor/github.com/docker/docker/pkg/system/meminfo_windows.go b/vendor/github.com/docker/docker/pkg/system/meminfo_windows.go new file mode 100644 index 00000000..d4664259 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/meminfo_windows.go @@ -0,0 +1,44 @@ +package system + +import ( + "syscall" + "unsafe" +) + +var ( + modkernel32 = syscall.NewLazyDLL("kernel32.dll") + + procGlobalMemoryStatusEx = modkernel32.NewProc("GlobalMemoryStatusEx") +) + +// https://msdn.microsoft.com/en-us/library/windows/desktop/aa366589(v=vs.85).aspx +// https://msdn.microsoft.com/en-us/library/windows/desktop/aa366770(v=vs.85).aspx +type memorystatusex struct { + dwLength uint32 + dwMemoryLoad uint32 + ullTotalPhys uint64 + ullAvailPhys uint64 + ullTotalPageFile uint64 + ullAvailPageFile uint64 + ullTotalVirtual uint64 + ullAvailVirtual uint64 + ullAvailExtendedVirtual uint64 +} + +// ReadMemInfo retrieves memory statistics of the host system and returns a +// MemInfo type. +func ReadMemInfo() (*MemInfo, error) { + msi := &memorystatusex{ + dwLength: 64, + } + r1, _, _ := procGlobalMemoryStatusEx.Call(uintptr(unsafe.Pointer(msi))) + if r1 == 0 { + return &MemInfo{}, nil + } + return &MemInfo{ + MemTotal: int64(msi.ullTotalPhys), + MemFree: int64(msi.ullAvailPhys), + SwapTotal: int64(msi.ullTotalPageFile), + SwapFree: int64(msi.ullAvailPageFile), + }, nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/mknod.go b/vendor/github.com/docker/docker/pkg/system/mknod.go new file mode 100644 index 00000000..73958182 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/mknod.go @@ -0,0 +1,22 @@ +// +build !windows + +package system + +import ( + "syscall" +) + +// Mknod creates a filesystem node (file, device special file or named pipe) named path +// with attributes specified by mode and dev. +func Mknod(path string, mode uint32, dev int) error { + return syscall.Mknod(path, mode, dev) +} + +// Mkdev is used to build the value of linux devices (in /dev/) which specifies major +// and minor number of the newly created device special file. +// Linux device nodes are a bit weird due to backwards compat with 16 bit device nodes. +// They are, from low to high: the lower 8 bits of the minor, then 12 bits of the major, +// then the top 12 bits of the minor. +func Mkdev(major int64, minor int64) uint32 { + return uint32(((minor & 0xfff00) << 12) | ((major & 0xfff) << 8) | (minor & 0xff)) +} diff --git a/vendor/github.com/docker/docker/pkg/system/mknod_windows.go b/vendor/github.com/docker/docker/pkg/system/mknod_windows.go new file mode 100644 index 00000000..2e863c02 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/mknod_windows.go @@ -0,0 +1,13 @@ +// +build windows + +package system + +// Mknod is not implemented on Windows. +func Mknod(path string, mode uint32, dev int) error { + return ErrNotSupportedPlatform +} + +// Mkdev is not implemented on Windows. +func Mkdev(major int64, minor int64) uint32 { + panic("Mkdev not implemented on Windows.") +} diff --git a/vendor/github.com/docker/docker/pkg/system/path_unix.go b/vendor/github.com/docker/docker/pkg/system/path_unix.go new file mode 100644 index 00000000..c607c4db --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/path_unix.go @@ -0,0 +1,14 @@ +// +build !windows + +package system + +// DefaultPathEnv is unix style list of directories to search for +// executables. Each directory is separated from the next by a colon +// ':' character . +const DefaultPathEnv = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + +// CheckSystemDriveAndRemoveDriveLetter verifies that a path, if it includes a drive letter, +// is the system drive. This is a no-op on Linux. +func CheckSystemDriveAndRemoveDriveLetter(path string) (string, error) { + return path, nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/path_windows.go b/vendor/github.com/docker/docker/pkg/system/path_windows.go new file mode 100644 index 00000000..cbfe2c15 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/path_windows.go @@ -0,0 +1,37 @@ +// +build windows + +package system + +import ( + "fmt" + "path/filepath" + "strings" +) + +// DefaultPathEnv is deliberately empty on Windows as the default path will be set by +// the container. Docker has no context of what the default path should be. +const DefaultPathEnv = "" + +// CheckSystemDriveAndRemoveDriveLetter verifies and manipulates a Windows path. +// This is used, for example, when validating a user provided path in docker cp. +// If a drive letter is supplied, it must be the system drive. The drive letter +// is always removed. Also, it translates it to OS semantics (IOW / to \). We +// need the path in this syntax so that it can ultimately be contatenated with +// a Windows long-path which doesn't support drive-letters. Examples: +// C: --> Fail +// C:\ --> \ +// a --> a +// /a --> \a +// d:\ --> Fail +func CheckSystemDriveAndRemoveDriveLetter(path string) (string, error) { + if len(path) == 2 && string(path[1]) == ":" { + return "", fmt.Errorf("No relative path specified in %q", path) + } + if !filepath.IsAbs(path) || len(path) < 2 { + return filepath.FromSlash(path), nil + } + if string(path[1]) == ":" && !strings.EqualFold(string(path[0]), "c") { + return "", fmt.Errorf("The specified path is not on the system drive (C:)") + } + return filepath.FromSlash(path[2:]), nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/stat.go b/vendor/github.com/docker/docker/pkg/system/stat.go new file mode 100644 index 00000000..087034c5 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/stat.go @@ -0,0 +1,53 @@ +// +build !windows + +package system + +import ( + "syscall" +) + +// StatT type contains status of a file. It contains metadata +// like permission, owner, group, size, etc about a file. +type StatT struct { + mode uint32 + uid uint32 + gid uint32 + rdev uint64 + size int64 + mtim syscall.Timespec +} + +// Mode returns file's permission mode. +func (s StatT) Mode() uint32 { + return s.mode +} + +// UID returns file's user id of owner. +func (s StatT) UID() uint32 { + return s.uid +} + +// GID returns file's group id of owner. +func (s StatT) GID() uint32 { + return s.gid +} + +// Rdev returns file's device ID (if it's special file). +func (s StatT) Rdev() uint64 { + return s.rdev +} + +// Size returns file's size. +func (s StatT) Size() int64 { + return s.size +} + +// Mtim returns file's last modification time. +func (s StatT) Mtim() syscall.Timespec { + return s.mtim +} + +// GetLastModification returns file's last modification time. +func (s StatT) GetLastModification() syscall.Timespec { + return s.Mtim() +} diff --git a/vendor/github.com/docker/docker/pkg/system/stat_darwin.go b/vendor/github.com/docker/docker/pkg/system/stat_darwin.go new file mode 100644 index 00000000..f0742f59 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/stat_darwin.go @@ -0,0 +1,32 @@ +package system + +import ( + "syscall" +) + +// fromStatT creates a system.StatT type from a syscall.Stat_t type +func fromStatT(s *syscall.Stat_t) (*StatT, error) { + return &StatT{size: s.Size, + mode: uint32(s.Mode), + uid: s.Uid, + gid: s.Gid, + rdev: uint64(s.Rdev), + mtim: s.Mtimespec}, nil +} + +// FromStatT loads a system.StatT from a syscall.Stat_t. +func FromStatT(s *syscall.Stat_t) (*StatT, error) { + return fromStatT(s) +} + +// Stat takes a path to a file and returns +// a system.StatT type pertaining to that file. +// +// Throws an error if the file does not exist +func Stat(path string) (*StatT, error) { + s := &syscall.Stat_t{} + if err := syscall.Stat(path, s); err != nil { + return nil, err + } + return fromStatT(s) +} diff --git a/vendor/github.com/docker/docker/pkg/system/stat_freebsd.go b/vendor/github.com/docker/docker/pkg/system/stat_freebsd.go new file mode 100644 index 00000000..d0fb6f15 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/stat_freebsd.go @@ -0,0 +1,27 @@ +package system + +import ( + "syscall" +) + +// fromStatT converts a syscall.Stat_t type to a system.Stat_t type +func fromStatT(s *syscall.Stat_t) (*StatT, error) { + return &StatT{size: s.Size, + mode: uint32(s.Mode), + uid: s.Uid, + gid: s.Gid, + rdev: uint64(s.Rdev), + mtim: s.Mtimespec}, nil +} + +// Stat takes a path to a file and returns +// a system.Stat_t type pertaining to that file. +// +// Throws an error if the file does not exist +func Stat(path string) (*StatT, error) { + s := &syscall.Stat_t{} + if err := syscall.Stat(path, s); err != nil { + return nil, err + } + return fromStatT(s) +} diff --git a/vendor/github.com/docker/docker/pkg/system/stat_linux.go b/vendor/github.com/docker/docker/pkg/system/stat_linux.go new file mode 100644 index 00000000..8b1eded1 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/stat_linux.go @@ -0,0 +1,33 @@ +package system + +import ( + "syscall" +) + +// fromStatT converts a syscall.Stat_t type to a system.Stat_t type +func fromStatT(s *syscall.Stat_t) (*StatT, error) { + return &StatT{size: s.Size, + mode: s.Mode, + uid: s.Uid, + gid: s.Gid, + rdev: s.Rdev, + mtim: s.Mtim}, nil +} + +// FromStatT exists only on linux, and loads a system.StatT from a +// syscal.Stat_t. +func FromStatT(s *syscall.Stat_t) (*StatT, error) { + return fromStatT(s) +} + +// Stat takes a path to a file and returns +// a system.StatT type pertaining to that file. +// +// Throws an error if the file does not exist +func Stat(path string) (*StatT, error) { + s := &syscall.Stat_t{} + if err := syscall.Stat(path, s); err != nil { + return nil, err + } + return fromStatT(s) +} diff --git a/vendor/github.com/docker/docker/pkg/system/stat_openbsd.go b/vendor/github.com/docker/docker/pkg/system/stat_openbsd.go new file mode 100644 index 00000000..3c3b71fb --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/stat_openbsd.go @@ -0,0 +1,15 @@ +package system + +import ( + "syscall" +) + +// fromStatT creates a system.StatT type from a syscall.Stat_t type +func fromStatT(s *syscall.Stat_t) (*StatT, error) { + return &StatT{size: s.Size, + mode: uint32(s.Mode), + uid: s.Uid, + gid: s.Gid, + rdev: uint64(s.Rdev), + mtim: s.Mtim}, nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/stat_solaris.go b/vendor/github.com/docker/docker/pkg/system/stat_solaris.go new file mode 100644 index 00000000..0216985a --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/stat_solaris.go @@ -0,0 +1,34 @@ +// +build solaris + +package system + +import ( + "syscall" +) + +// fromStatT creates a system.StatT type from a syscall.Stat_t type +func fromStatT(s *syscall.Stat_t) (*StatT, error) { + return &StatT{size: s.Size, + mode: uint32(s.Mode), + uid: s.Uid, + gid: s.Gid, + rdev: uint64(s.Rdev), + mtim: s.Mtim}, nil +} + +// FromStatT loads a system.StatT from a syscal.Stat_t. +func FromStatT(s *syscall.Stat_t) (*StatT, error) { + return fromStatT(s) +} + +// Stat takes a path to a file and returns +// a system.StatT type pertaining to that file. +// +// Throws an error if the file does not exist +func Stat(path string) (*StatT, error) { + s := &syscall.Stat_t{} + if err := syscall.Stat(path, s); err != nil { + return nil, err + } + return fromStatT(s) +} diff --git a/vendor/github.com/docker/docker/pkg/system/stat_unsupported.go b/vendor/github.com/docker/docker/pkg/system/stat_unsupported.go new file mode 100644 index 00000000..5d85f523 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/stat_unsupported.go @@ -0,0 +1,17 @@ +// +build !linux,!windows,!freebsd,!solaris,!openbsd,!darwin + +package system + +import ( + "syscall" +) + +// fromStatT creates a system.StatT type from a syscall.Stat_t type +func fromStatT(s *syscall.Stat_t) (*StatT, error) { + return &StatT{size: s.Size, + mode: uint32(s.Mode), + uid: s.Uid, + gid: s.Gid, + rdev: uint64(s.Rdev), + mtim: s.Mtimespec}, nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/stat_windows.go b/vendor/github.com/docker/docker/pkg/system/stat_windows.go new file mode 100644 index 00000000..39490c62 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/stat_windows.go @@ -0,0 +1,43 @@ +// +build windows + +package system + +import ( + "os" + "time" +) + +// StatT type contains status of a file. It contains metadata +// like name, permission, size, etc about a file. +type StatT struct { + name string + size int64 + mode os.FileMode + modTime time.Time + isDir bool +} + +// Name returns file's name. +func (s StatT) Name() string { + return s.name +} + +// Size returns file's size. +func (s StatT) Size() int64 { + return s.size +} + +// Mode returns file's permission mode. +func (s StatT) Mode() os.FileMode { + return s.mode +} + +// ModTime returns file's last modification time. +func (s StatT) ModTime() time.Time { + return s.modTime +} + +// IsDir returns whether file is actually a directory. +func (s StatT) IsDir() bool { + return s.isDir +} diff --git a/vendor/github.com/docker/docker/pkg/system/syscall_unix.go b/vendor/github.com/docker/docker/pkg/system/syscall_unix.go new file mode 100644 index 00000000..3ae91284 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/syscall_unix.go @@ -0,0 +1,17 @@ +// +build linux freebsd + +package system + +import "syscall" + +// Unmount is a platform-specific helper function to call +// the unmount syscall. +func Unmount(dest string) error { + return syscall.Unmount(dest, 0) +} + +// CommandLineToArgv should not be used on Unix. +// It simply returns commandLine in the only element in the returned array. +func CommandLineToArgv(commandLine string) ([]string, error) { + return []string{commandLine}, nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/syscall_windows.go b/vendor/github.com/docker/docker/pkg/system/syscall_windows.go new file mode 100644 index 00000000..f5f2d569 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/syscall_windows.go @@ -0,0 +1,103 @@ +package system + +import ( + "syscall" + "unsafe" + + "github.com/Sirupsen/logrus" +) + +var ( + ntuserApiset = syscall.NewLazyDLL("ext-ms-win-ntuser-window-l1-1-0") + procGetVersionExW = modkernel32.NewProc("GetVersionExW") +) + +// OSVersion is a wrapper for Windows version information +// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724439(v=vs.85).aspx +type OSVersion struct { + Version uint32 + MajorVersion uint8 + MinorVersion uint8 + Build uint16 +} + +// https://msdn.microsoft.com/en-us/library/windows/desktop/ms724833(v=vs.85).aspx +type osVersionInfoEx struct { + OSVersionInfoSize uint32 + MajorVersion uint32 + MinorVersion uint32 + BuildNumber uint32 + PlatformID uint32 + CSDVersion [128]uint16 + ServicePackMajor uint16 + ServicePackMinor uint16 + SuiteMask uint16 + ProductType byte + Reserve byte +} + +// GetOSVersion gets the operating system version on Windows. Note that +// docker.exe must be manifested to get the correct version information. +func GetOSVersion() OSVersion { + var err error + osv := OSVersion{} + osv.Version, err = syscall.GetVersion() + if err != nil { + // GetVersion never fails. + panic(err) + } + osv.MajorVersion = uint8(osv.Version & 0xFF) + osv.MinorVersion = uint8(osv.Version >> 8 & 0xFF) + osv.Build = uint16(osv.Version >> 16) + return osv +} + +// IsWindowsClient returns true if the SKU is client +func IsWindowsClient() bool { + osviex := &osVersionInfoEx{OSVersionInfoSize: 284} + r1, _, err := procGetVersionExW.Call(uintptr(unsafe.Pointer(osviex))) + if r1 == 0 { + logrus.Warnf("GetVersionExW failed - assuming server SKU: %v", err) + return false + } + const verNTWorkstation = 0x00000001 + return osviex.ProductType == verNTWorkstation +} + +// Unmount is a platform-specific helper function to call +// the unmount syscall. Not supported on Windows +func Unmount(dest string) error { + return nil +} + +// CommandLineToArgv wraps the Windows syscall to turn a commandline into an argument array. +func CommandLineToArgv(commandLine string) ([]string, error) { + var argc int32 + + argsPtr, err := syscall.UTF16PtrFromString(commandLine) + if err != nil { + return nil, err + } + + argv, err := syscall.CommandLineToArgv(argsPtr, &argc) + if err != nil { + return nil, err + } + defer syscall.LocalFree(syscall.Handle(uintptr(unsafe.Pointer(argv)))) + + newArgs := make([]string, argc) + for i, v := range (*argv)[:argc] { + newArgs[i] = string(syscall.UTF16ToString((*v)[:])) + } + + return newArgs, nil +} + +// HasWin32KSupport determines whether containers that depend on win32k can +// run on this machine. Win32k is the driver used to implement windowing. +func HasWin32KSupport() bool { + // For now, check for ntuser API support on the host. In the future, a host + // may support win32k in containers even if the host does not support ntuser + // APIs. + return ntuserApiset.Load() == nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/umask.go b/vendor/github.com/docker/docker/pkg/system/umask.go new file mode 100644 index 00000000..3d0146b0 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/umask.go @@ -0,0 +1,13 @@ +// +build !windows + +package system + +import ( + "syscall" +) + +// Umask sets current process's file mode creation mask to newmask +// and returns oldmask. +func Umask(newmask int) (oldmask int, err error) { + return syscall.Umask(newmask), nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/umask_windows.go b/vendor/github.com/docker/docker/pkg/system/umask_windows.go new file mode 100644 index 00000000..13f1de17 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/umask_windows.go @@ -0,0 +1,9 @@ +// +build windows + +package system + +// Umask is not supported on the windows platform. +func Umask(newmask int) (oldmask int, err error) { + // should not be called on cli code path + return 0, ErrNotSupportedPlatform +} diff --git a/vendor/github.com/docker/docker/pkg/system/utimes_freebsd.go b/vendor/github.com/docker/docker/pkg/system/utimes_freebsd.go new file mode 100644 index 00000000..e2eac3b5 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/utimes_freebsd.go @@ -0,0 +1,22 @@ +package system + +import ( + "syscall" + "unsafe" +) + +// LUtimesNano is used to change access and modification time of the specified path. +// It's used for symbol link file because syscall.UtimesNano doesn't support a NOFOLLOW flag atm. +func LUtimesNano(path string, ts []syscall.Timespec) error { + var _path *byte + _path, err := syscall.BytePtrFromString(path) + if err != nil { + return err + } + + if _, _, err := syscall.Syscall(syscall.SYS_LUTIMES, uintptr(unsafe.Pointer(_path)), uintptr(unsafe.Pointer(&ts[0])), 0); err != 0 && err != syscall.ENOSYS { + return err + } + + return nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/utimes_linux.go b/vendor/github.com/docker/docker/pkg/system/utimes_linux.go new file mode 100644 index 00000000..fc8a1aba --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/utimes_linux.go @@ -0,0 +1,26 @@ +package system + +import ( + "syscall" + "unsafe" +) + +// LUtimesNano is used to change access and modification time of the specified path. +// It's used for symbol link file because syscall.UtimesNano doesn't support a NOFOLLOW flag atm. +func LUtimesNano(path string, ts []syscall.Timespec) error { + // These are not currently available in syscall + atFdCwd := -100 + atSymLinkNoFollow := 0x100 + + var _path *byte + _path, err := syscall.BytePtrFromString(path) + if err != nil { + return err + } + + if _, _, err := syscall.Syscall6(syscall.SYS_UTIMENSAT, uintptr(atFdCwd), uintptr(unsafe.Pointer(_path)), uintptr(unsafe.Pointer(&ts[0])), uintptr(atSymLinkNoFollow), 0, 0); err != 0 && err != syscall.ENOSYS { + return err + } + + return nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/utimes_unsupported.go b/vendor/github.com/docker/docker/pkg/system/utimes_unsupported.go new file mode 100644 index 00000000..13971454 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/utimes_unsupported.go @@ -0,0 +1,10 @@ +// +build !linux,!freebsd + +package system + +import "syscall" + +// LUtimesNano is only supported on linux and freebsd. +func LUtimesNano(path string, ts []syscall.Timespec) error { + return ErrNotSupportedPlatform +} diff --git a/vendor/github.com/docker/docker/pkg/system/xattrs_linux.go b/vendor/github.com/docker/docker/pkg/system/xattrs_linux.go new file mode 100644 index 00000000..d2e2c057 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/xattrs_linux.go @@ -0,0 +1,63 @@ +package system + +import ( + "syscall" + "unsafe" +) + +// Lgetxattr retrieves the value of the extended attribute identified by attr +// and associated with the given path in the file system. +// It will returns a nil slice and nil error if the xattr is not set. +func Lgetxattr(path string, attr string) ([]byte, error) { + pathBytes, err := syscall.BytePtrFromString(path) + if err != nil { + return nil, err + } + attrBytes, err := syscall.BytePtrFromString(attr) + if err != nil { + return nil, err + } + + dest := make([]byte, 128) + destBytes := unsafe.Pointer(&dest[0]) + sz, _, errno := syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(destBytes), uintptr(len(dest)), 0, 0) + if errno == syscall.ENODATA { + return nil, nil + } + if errno == syscall.ERANGE { + dest = make([]byte, sz) + destBytes := unsafe.Pointer(&dest[0]) + sz, _, errno = syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(destBytes), uintptr(len(dest)), 0, 0) + } + if errno != 0 { + return nil, errno + } + + return dest[:sz], nil +} + +var _zero uintptr + +// Lsetxattr sets the value of the extended attribute identified by attr +// and associated with the given path in the file system. +func Lsetxattr(path string, attr string, data []byte, flags int) error { + pathBytes, err := syscall.BytePtrFromString(path) + if err != nil { + return err + } + attrBytes, err := syscall.BytePtrFromString(attr) + if err != nil { + return err + } + var dataBytes unsafe.Pointer + if len(data) > 0 { + dataBytes = unsafe.Pointer(&data[0]) + } else { + dataBytes = unsafe.Pointer(&_zero) + } + _, _, errno := syscall.Syscall6(syscall.SYS_LSETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(dataBytes), uintptr(len(data)), uintptr(flags), 0) + if errno != 0 { + return errno + } + return nil +} diff --git a/vendor/github.com/docker/docker/pkg/system/xattrs_unsupported.go b/vendor/github.com/docker/docker/pkg/system/xattrs_unsupported.go new file mode 100644 index 00000000..0114f222 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/system/xattrs_unsupported.go @@ -0,0 +1,13 @@ +// +build !linux + +package system + +// Lgetxattr is not supported on platforms other than linux. +func Lgetxattr(path string, attr string) ([]byte, error) { + return nil, ErrNotSupportedPlatform +} + +// Lsetxattr is not supported on platforms other than linux. +func Lsetxattr(path string, attr string, data []byte, flags int) error { + return ErrNotSupportedPlatform +} diff --git a/vendor/github.com/docker/docker/pkg/term/ascii.go b/vendor/github.com/docker/docker/pkg/term/ascii.go new file mode 100644 index 00000000..f5262bcc --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/ascii.go @@ -0,0 +1,66 @@ +package term + +import ( + "fmt" + "strings" +) + +// ASCII list the possible supported ASCII key sequence +var ASCII = []string{ + "ctrl-@", + "ctrl-a", + "ctrl-b", + "ctrl-c", + "ctrl-d", + "ctrl-e", + "ctrl-f", + "ctrl-g", + "ctrl-h", + "ctrl-i", + "ctrl-j", + "ctrl-k", + "ctrl-l", + "ctrl-m", + "ctrl-n", + "ctrl-o", + "ctrl-p", + "ctrl-q", + "ctrl-r", + "ctrl-s", + "ctrl-t", + "ctrl-u", + "ctrl-v", + "ctrl-w", + "ctrl-x", + "ctrl-y", + "ctrl-z", + "ctrl-[", + "ctrl-\\", + "ctrl-]", + "ctrl-^", + "ctrl-_", +} + +// ToBytes converts a string representing a suite of key-sequence to the corresponding ASCII code. +func ToBytes(keys string) ([]byte, error) { + codes := []byte{} +next: + for _, key := range strings.Split(keys, ",") { + if len(key) != 1 { + for code, ctrl := range ASCII { + if ctrl == key { + codes = append(codes, byte(code)) + continue next + } + } + if key == "DEL" { + codes = append(codes, 127) + } else { + return nil, fmt.Errorf("Unknown character: '%s'", key) + } + } else { + codes = append(codes, byte(key[0])) + } + } + return codes, nil +} diff --git a/vendor/github.com/docker/docker/pkg/term/tc_linux_cgo.go b/vendor/github.com/docker/docker/pkg/term/tc_linux_cgo.go new file mode 100644 index 00000000..59dac5ba --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/tc_linux_cgo.go @@ -0,0 +1,50 @@ +// +build linux,cgo + +package term + +import ( + "syscall" + "unsafe" +) + +// #include +import "C" + +// Termios is the Unix API for terminal I/O. +// It is passthrough for syscall.Termios in order to make it portable with +// other platforms where it is not available or handled differently. +type Termios syscall.Termios + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd uintptr) (*State, error) { + var oldState State + if err := tcget(fd, &oldState.termios); err != 0 { + return nil, err + } + + newState := oldState.termios + + C.cfmakeraw((*C.struct_termios)(unsafe.Pointer(&newState))) + if err := tcset(fd, &newState); err != 0 { + return nil, err + } + return &oldState, nil +} + +func tcget(fd uintptr, p *Termios) syscall.Errno { + ret, err := C.tcgetattr(C.int(fd), (*C.struct_termios)(unsafe.Pointer(p))) + if ret != 0 { + return err.(syscall.Errno) + } + return 0 +} + +func tcset(fd uintptr, p *Termios) syscall.Errno { + ret, err := C.tcsetattr(C.int(fd), C.TCSANOW, (*C.struct_termios)(unsafe.Pointer(p))) + if ret != 0 { + return err.(syscall.Errno) + } + return 0 +} diff --git a/vendor/github.com/docker/docker/pkg/term/tc_other.go b/vendor/github.com/docker/docker/pkg/term/tc_other.go new file mode 100644 index 00000000..750d7c3f --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/tc_other.go @@ -0,0 +1,20 @@ +// +build !windows +// +build !linux !cgo +// +build !solaris !cgo + +package term + +import ( + "syscall" + "unsafe" +) + +func tcget(fd uintptr, p *Termios) syscall.Errno { + _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(getTermios), uintptr(unsafe.Pointer(p))) + return err +} + +func tcset(fd uintptr, p *Termios) syscall.Errno { + _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, setTermios, uintptr(unsafe.Pointer(p))) + return err +} diff --git a/vendor/github.com/docker/docker/pkg/term/tc_solaris_cgo.go b/vendor/github.com/docker/docker/pkg/term/tc_solaris_cgo.go new file mode 100644 index 00000000..c9139d0c --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/tc_solaris_cgo.go @@ -0,0 +1,63 @@ +// +build solaris,cgo + +package term + +import ( + "syscall" + "unsafe" +) + +// #include +import "C" + +// Termios is the Unix API for terminal I/O. +// It is passthrough for syscall.Termios in order to make it portable with +// other platforms where it is not available or handled differently. +type Termios syscall.Termios + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd uintptr) (*State, error) { + var oldState State + if err := tcget(fd, &oldState.termios); err != 0 { + return nil, err + } + + newState := oldState.termios + + newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON | syscall.IXANY) + newState.Oflag &^= syscall.OPOST + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN) + newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) + newState.Cflag |= syscall.CS8 + + /* + VMIN is the minimum number of characters that needs to be read in non-canonical mode for it to be returned + Since VMIN is overloaded with another element in canonical mode when we switch modes it defaults to 4. It + needs to be explicitly set to 1. + */ + newState.Cc[C.VMIN] = 1 + newState.Cc[C.VTIME] = 0 + + if err := tcset(fd, &newState); err != 0 { + return nil, err + } + return &oldState, nil +} + +func tcget(fd uintptr, p *Termios) syscall.Errno { + ret, err := C.tcgetattr(C.int(fd), (*C.struct_termios)(unsafe.Pointer(p))) + if ret != 0 { + return err.(syscall.Errno) + } + return 0 +} + +func tcset(fd uintptr, p *Termios) syscall.Errno { + ret, err := C.tcsetattr(C.int(fd), C.TCSANOW, (*C.struct_termios)(unsafe.Pointer(p))) + if ret != 0 { + return err.(syscall.Errno) + } + return 0 +} diff --git a/vendor/github.com/docker/docker/pkg/term/term.go b/vendor/github.com/docker/docker/pkg/term/term.go new file mode 100644 index 00000000..fe59faa9 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/term.go @@ -0,0 +1,123 @@ +// +build !windows + +// Package term provides structures and helper functions to work with +// terminal (state, sizes). +package term + +import ( + "errors" + "fmt" + "io" + "os" + "os/signal" + "syscall" +) + +var ( + // ErrInvalidState is returned if the state of the terminal is invalid. + ErrInvalidState = errors.New("Invalid terminal state") +) + +// State represents the state of the terminal. +type State struct { + termios Termios +} + +// Winsize represents the size of the terminal window. +type Winsize struct { + Height uint16 + Width uint16 + x uint16 + y uint16 +} + +// StdStreams returns the standard streams (stdin, stdout, stedrr). +func StdStreams() (stdIn io.ReadCloser, stdOut, stdErr io.Writer) { + return os.Stdin, os.Stdout, os.Stderr +} + +// GetFdInfo returns the file descriptor for an os.File and indicates whether the file represents a terminal. +func GetFdInfo(in interface{}) (uintptr, bool) { + var inFd uintptr + var isTerminalIn bool + if file, ok := in.(*os.File); ok { + inFd = file.Fd() + isTerminalIn = IsTerminal(inFd) + } + return inFd, isTerminalIn +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd uintptr) bool { + var termios Termios + return tcget(fd, &termios) == 0 +} + +// RestoreTerminal restores the terminal connected to the given file descriptor +// to a previous state. +func RestoreTerminal(fd uintptr, state *State) error { + if state == nil { + return ErrInvalidState + } + if err := tcset(fd, &state.termios); err != 0 { + return err + } + return nil +} + +// SaveState saves the state of the terminal connected to the given file descriptor. +func SaveState(fd uintptr) (*State, error) { + var oldState State + if err := tcget(fd, &oldState.termios); err != 0 { + return nil, err + } + + return &oldState, nil +} + +// DisableEcho applies the specified state to the terminal connected to the file +// descriptor, with echo disabled. +func DisableEcho(fd uintptr, state *State) error { + newState := state.termios + newState.Lflag &^= syscall.ECHO + + if err := tcset(fd, &newState); err != 0 { + return err + } + handleInterrupt(fd, state) + return nil +} + +// SetRawTerminal puts the terminal connected to the given file descriptor into +// raw mode and returns the previous state. On UNIX, this puts both the input +// and output into raw mode. On Windows, it only puts the input into raw mode. +func SetRawTerminal(fd uintptr) (*State, error) { + oldState, err := MakeRaw(fd) + if err != nil { + return nil, err + } + handleInterrupt(fd, oldState) + return oldState, err +} + +// SetRawTerminalOutput puts the output of terminal connected to the given file +// descriptor into raw mode. On UNIX, this does nothing and returns nil for the +// state. On Windows, it disables LF -> CRLF translation. +func SetRawTerminalOutput(fd uintptr) (*State, error) { + return nil, nil +} + +func handleInterrupt(fd uintptr, state *State) { + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, os.Interrupt) + go func() { + for range sigchan { + // quit cleanly and the new terminal item is on a new line + fmt.Println() + signal.Stop(sigchan) + close(sigchan) + RestoreTerminal(fd, state) + os.Exit(1) + } + }() +} diff --git a/vendor/github.com/docker/docker/pkg/term/term_solaris.go b/vendor/github.com/docker/docker/pkg/term/term_solaris.go new file mode 100644 index 00000000..112debbe --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/term_solaris.go @@ -0,0 +1,41 @@ +// +build solaris + +package term + +import ( + "syscall" + "unsafe" +) + +/* +#include +#include +#include + +// Small wrapper to get rid of variadic args of ioctl() +int my_ioctl(int fd, int cmd, struct winsize *ws) { + return ioctl(fd, cmd, ws); +} +*/ +import "C" + +// GetWinsize returns the window size based on the specified file descriptor. +func GetWinsize(fd uintptr) (*Winsize, error) { + ws := &Winsize{} + ret, err := C.my_ioctl(C.int(fd), C.int(syscall.TIOCGWINSZ), (*C.struct_winsize)(unsafe.Pointer(ws))) + // Skip retval = 0 + if ret == 0 { + return ws, nil + } + return ws, err +} + +// SetWinsize tries to set the specified window size for the specified file descriptor. +func SetWinsize(fd uintptr, ws *Winsize) error { + ret, err := C.my_ioctl(C.int(fd), C.int(syscall.TIOCSWINSZ), (*C.struct_winsize)(unsafe.Pointer(ws))) + // Skip retval = 0 + if ret == 0 { + return nil + } + return err +} diff --git a/vendor/github.com/docker/docker/pkg/term/term_unix.go b/vendor/github.com/docker/docker/pkg/term/term_unix.go new file mode 100644 index 00000000..ddf87a0e --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/term_unix.go @@ -0,0 +1,29 @@ +// +build !solaris,!windows + +package term + +import ( + "syscall" + "unsafe" +) + +// GetWinsize returns the window size based on the specified file descriptor. +func GetWinsize(fd uintptr) (*Winsize, error) { + ws := &Winsize{} + _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(ws))) + // Skipp errno = 0 + if err == 0 { + return ws, nil + } + return ws, err +} + +// SetWinsize tries to set the specified window size for the specified file descriptor. +func SetWinsize(fd uintptr, ws *Winsize) error { + _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) + // Skipp errno = 0 + if err == 0 { + return nil + } + return err +} diff --git a/vendor/github.com/docker/docker/pkg/term/term_windows.go b/vendor/github.com/docker/docker/pkg/term/term_windows.go new file mode 100644 index 00000000..11a16fde --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/term_windows.go @@ -0,0 +1,233 @@ +// +build windows + +package term + +import ( + "io" + "os" + "os/signal" + "syscall" + + "github.com/Azure/go-ansiterm/winterm" + "github.com/docker/docker/pkg/term/windows" +) + +// State holds the console mode for the terminal. +type State struct { + mode uint32 +} + +// Winsize is used for window size. +type Winsize struct { + Height uint16 + Width uint16 +} + +const ( + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms683167(v=vs.85).aspx + enableVirtualTerminalInput = 0x0200 + enableVirtualTerminalProcessing = 0x0004 + disableNewlineAutoReturn = 0x0008 +) + +// vtInputSupported is true if enableVirtualTerminalInput is supported by the console +var vtInputSupported bool + +// StdStreams returns the standard streams (stdin, stdout, stedrr). +func StdStreams() (stdIn io.ReadCloser, stdOut, stdErr io.Writer) { + // Turn on VT handling on all std handles, if possible. This might + // fail, in which case we will fall back to terminal emulation. + var emulateStdin, emulateStdout, emulateStderr bool + fd := os.Stdin.Fd() + if mode, err := winterm.GetConsoleMode(fd); err == nil { + // Validate that enableVirtualTerminalInput is supported, but do not set it. + if err = winterm.SetConsoleMode(fd, mode|enableVirtualTerminalInput); err != nil { + emulateStdin = true + } else { + vtInputSupported = true + } + // Unconditionally set the console mode back even on failure because SetConsoleMode + // remembers invalid bits on input handles. + winterm.SetConsoleMode(fd, mode) + } + + fd = os.Stdout.Fd() + if mode, err := winterm.GetConsoleMode(fd); err == nil { + // Validate disableNewlineAutoReturn is supported, but do not set it. + if err = winterm.SetConsoleMode(fd, mode|enableVirtualTerminalProcessing|disableNewlineAutoReturn); err != nil { + emulateStdout = true + } else { + winterm.SetConsoleMode(fd, mode|enableVirtualTerminalProcessing) + } + } + + fd = os.Stderr.Fd() + if mode, err := winterm.GetConsoleMode(fd); err == nil { + // Validate disableNewlineAutoReturn is supported, but do not set it. + if err = winterm.SetConsoleMode(fd, mode|enableVirtualTerminalProcessing|disableNewlineAutoReturn); err != nil { + emulateStderr = true + } else { + winterm.SetConsoleMode(fd, mode|enableVirtualTerminalProcessing) + } + } + + if os.Getenv("ConEmuANSI") == "ON" { + // The ConEmu terminal emulates ANSI on output streams well. + emulateStdin = true + emulateStdout = false + emulateStderr = false + } + + if emulateStdin { + stdIn = windows.NewAnsiReader(syscall.STD_INPUT_HANDLE) + } else { + stdIn = os.Stdin + } + + if emulateStdout { + stdOut = windows.NewAnsiWriter(syscall.STD_OUTPUT_HANDLE) + } else { + stdOut = os.Stdout + } + + if emulateStderr { + stdErr = windows.NewAnsiWriter(syscall.STD_ERROR_HANDLE) + } else { + stdErr = os.Stderr + } + + return +} + +// GetFdInfo returns the file descriptor for an os.File and indicates whether the file represents a terminal. +func GetFdInfo(in interface{}) (uintptr, bool) { + return windows.GetHandleInfo(in) +} + +// GetWinsize returns the window size based on the specified file descriptor. +func GetWinsize(fd uintptr) (*Winsize, error) { + info, err := winterm.GetConsoleScreenBufferInfo(fd) + if err != nil { + return nil, err + } + + winsize := &Winsize{ + Width: uint16(info.Window.Right - info.Window.Left + 1), + Height: uint16(info.Window.Bottom - info.Window.Top + 1), + } + + return winsize, nil +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd uintptr) bool { + return windows.IsConsole(fd) +} + +// RestoreTerminal restores the terminal connected to the given file descriptor +// to a previous state. +func RestoreTerminal(fd uintptr, state *State) error { + return winterm.SetConsoleMode(fd, state.mode) +} + +// SaveState saves the state of the terminal connected to the given file descriptor. +func SaveState(fd uintptr) (*State, error) { + mode, e := winterm.GetConsoleMode(fd) + if e != nil { + return nil, e + } + + return &State{mode: mode}, nil +} + +// DisableEcho disables echo for the terminal connected to the given file descriptor. +// -- See https://msdn.microsoft.com/en-us/library/windows/desktop/ms683462(v=vs.85).aspx +func DisableEcho(fd uintptr, state *State) error { + mode := state.mode + mode &^= winterm.ENABLE_ECHO_INPUT + mode |= winterm.ENABLE_PROCESSED_INPUT | winterm.ENABLE_LINE_INPUT + err := winterm.SetConsoleMode(fd, mode) + if err != nil { + return err + } + + // Register an interrupt handler to catch and restore prior state + restoreAtInterrupt(fd, state) + return nil +} + +// SetRawTerminal puts the terminal connected to the given file descriptor into +// raw mode and returns the previous state. On UNIX, this puts both the input +// and output into raw mode. On Windows, it only puts the input into raw mode. +func SetRawTerminal(fd uintptr) (*State, error) { + state, err := MakeRaw(fd) + if err != nil { + return nil, err + } + + // Register an interrupt handler to catch and restore prior state + restoreAtInterrupt(fd, state) + return state, err +} + +// SetRawTerminalOutput puts the output of terminal connected to the given file +// descriptor into raw mode. On UNIX, this does nothing and returns nil for the +// state. On Windows, it disables LF -> CRLF translation. +func SetRawTerminalOutput(fd uintptr) (*State, error) { + state, err := SaveState(fd) + if err != nil { + return nil, err + } + + // Ignore failures, since disableNewlineAutoReturn might not be supported on this + // version of Windows. + winterm.SetConsoleMode(fd, state.mode|disableNewlineAutoReturn) + return state, err +} + +// MakeRaw puts the terminal (Windows Console) connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be restored. +func MakeRaw(fd uintptr) (*State, error) { + state, err := SaveState(fd) + if err != nil { + return nil, err + } + + mode := state.mode + + // See + // -- https://msdn.microsoft.com/en-us/library/windows/desktop/ms686033(v=vs.85).aspx + // -- https://msdn.microsoft.com/en-us/library/windows/desktop/ms683462(v=vs.85).aspx + + // Disable these modes + mode &^= winterm.ENABLE_ECHO_INPUT + mode &^= winterm.ENABLE_LINE_INPUT + mode &^= winterm.ENABLE_MOUSE_INPUT + mode &^= winterm.ENABLE_WINDOW_INPUT + mode &^= winterm.ENABLE_PROCESSED_INPUT + + // Enable these modes + mode |= winterm.ENABLE_EXTENDED_FLAGS + mode |= winterm.ENABLE_INSERT_MODE + mode |= winterm.ENABLE_QUICK_EDIT_MODE + if vtInputSupported { + mode |= enableVirtualTerminalInput + } + + err = winterm.SetConsoleMode(fd, mode) + if err != nil { + return nil, err + } + return state, nil +} + +func restoreAtInterrupt(fd uintptr, state *State) { + sigchan := make(chan os.Signal, 1) + signal.Notify(sigchan, os.Interrupt) + + go func() { + _ = <-sigchan + RestoreTerminal(fd, state) + os.Exit(0) + }() +} diff --git a/vendor/github.com/docker/docker/pkg/term/termios_darwin.go b/vendor/github.com/docker/docker/pkg/term/termios_darwin.go new file mode 100644 index 00000000..480db900 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/termios_darwin.go @@ -0,0 +1,69 @@ +package term + +import ( + "syscall" + "unsafe" +) + +const ( + getTermios = syscall.TIOCGETA + setTermios = syscall.TIOCSETA +) + +// Termios magic numbers, passthrough to the ones defined in syscall. +const ( + IGNBRK = syscall.IGNBRK + PARMRK = syscall.PARMRK + INLCR = syscall.INLCR + IGNCR = syscall.IGNCR + ECHONL = syscall.ECHONL + CSIZE = syscall.CSIZE + ICRNL = syscall.ICRNL + ISTRIP = syscall.ISTRIP + PARENB = syscall.PARENB + ECHO = syscall.ECHO + ICANON = syscall.ICANON + ISIG = syscall.ISIG + IXON = syscall.IXON + BRKINT = syscall.BRKINT + INPCK = syscall.INPCK + OPOST = syscall.OPOST + CS8 = syscall.CS8 + IEXTEN = syscall.IEXTEN +) + +// Termios is the Unix API for terminal I/O. +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]byte + Ispeed uint64 + Ospeed uint64 +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd uintptr) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(getTermios), uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { + return nil, err + } + + newState := oldState.termios + newState.Iflag &^= (IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON) + newState.Oflag &^= OPOST + newState.Lflag &^= (ECHO | ECHONL | ICANON | ISIG | IEXTEN) + newState.Cflag &^= (CSIZE | PARENB) + newState.Cflag |= CS8 + newState.Cc[syscall.VMIN] = 1 + newState.Cc[syscall.VTIME] = 0 + + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&newState))); err != 0 { + return nil, err + } + + return &oldState, nil +} diff --git a/vendor/github.com/docker/docker/pkg/term/termios_freebsd.go b/vendor/github.com/docker/docker/pkg/term/termios_freebsd.go new file mode 100644 index 00000000..ed843ad6 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/termios_freebsd.go @@ -0,0 +1,69 @@ +package term + +import ( + "syscall" + "unsafe" +) + +const ( + getTermios = syscall.TIOCGETA + setTermios = syscall.TIOCSETA +) + +// Termios magic numbers, passthrough to the ones defined in syscall. +const ( + IGNBRK = syscall.IGNBRK + PARMRK = syscall.PARMRK + INLCR = syscall.INLCR + IGNCR = syscall.IGNCR + ECHONL = syscall.ECHONL + CSIZE = syscall.CSIZE + ICRNL = syscall.ICRNL + ISTRIP = syscall.ISTRIP + PARENB = syscall.PARENB + ECHO = syscall.ECHO + ICANON = syscall.ICANON + ISIG = syscall.ISIG + IXON = syscall.IXON + BRKINT = syscall.BRKINT + INPCK = syscall.INPCK + OPOST = syscall.OPOST + CS8 = syscall.CS8 + IEXTEN = syscall.IEXTEN +) + +// Termios is the Unix API for terminal I/O. +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]byte + Ispeed uint32 + Ospeed uint32 +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd uintptr) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(getTermios), uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { + return nil, err + } + + newState := oldState.termios + newState.Iflag &^= (IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON) + newState.Oflag &^= OPOST + newState.Lflag &^= (ECHO | ECHONL | ICANON | ISIG | IEXTEN) + newState.Cflag &^= (CSIZE | PARENB) + newState.Cflag |= CS8 + newState.Cc[syscall.VMIN] = 1 + newState.Cc[syscall.VTIME] = 0 + + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&newState))); err != 0 { + return nil, err + } + + return &oldState, nil +} diff --git a/vendor/github.com/docker/docker/pkg/term/termios_linux.go b/vendor/github.com/docker/docker/pkg/term/termios_linux.go new file mode 100644 index 00000000..22921b6a --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/termios_linux.go @@ -0,0 +1,47 @@ +// +build !cgo + +package term + +import ( + "syscall" + "unsafe" +) + +const ( + getTermios = syscall.TCGETS + setTermios = syscall.TCSETS +) + +// Termios is the Unix API for terminal I/O. +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]byte + Ispeed uint32 + Ospeed uint32 +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd uintptr) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, getTermios, uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { + return nil, err + } + + newState := oldState.termios + + newState.Iflag &^= (syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON) + newState.Oflag &^= syscall.OPOST + newState.Lflag &^= (syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN) + newState.Cflag &^= (syscall.CSIZE | syscall.PARENB) + newState.Cflag |= syscall.CS8 + + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, setTermios, uintptr(unsafe.Pointer(&newState))); err != 0 { + return nil, err + } + return &oldState, nil +} diff --git a/vendor/github.com/docker/docker/pkg/term/termios_openbsd.go b/vendor/github.com/docker/docker/pkg/term/termios_openbsd.go new file mode 100644 index 00000000..ed843ad6 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/termios_openbsd.go @@ -0,0 +1,69 @@ +package term + +import ( + "syscall" + "unsafe" +) + +const ( + getTermios = syscall.TIOCGETA + setTermios = syscall.TIOCSETA +) + +// Termios magic numbers, passthrough to the ones defined in syscall. +const ( + IGNBRK = syscall.IGNBRK + PARMRK = syscall.PARMRK + INLCR = syscall.INLCR + IGNCR = syscall.IGNCR + ECHONL = syscall.ECHONL + CSIZE = syscall.CSIZE + ICRNL = syscall.ICRNL + ISTRIP = syscall.ISTRIP + PARENB = syscall.PARENB + ECHO = syscall.ECHO + ICANON = syscall.ICANON + ISIG = syscall.ISIG + IXON = syscall.IXON + BRKINT = syscall.BRKINT + INPCK = syscall.INPCK + OPOST = syscall.OPOST + CS8 = syscall.CS8 + IEXTEN = syscall.IEXTEN +) + +// Termios is the Unix API for terminal I/O. +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]byte + Ispeed uint32 + Ospeed uint32 +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd uintptr) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(getTermios), uintptr(unsafe.Pointer(&oldState.termios))); err != 0 { + return nil, err + } + + newState := oldState.termios + newState.Iflag &^= (IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL | IXON) + newState.Oflag &^= OPOST + newState.Lflag &^= (ECHO | ECHONL | ICANON | ISIG | IEXTEN) + newState.Cflag &^= (CSIZE | PARENB) + newState.Cflag |= CS8 + newState.Cc[syscall.VMIN] = 1 + newState.Cc[syscall.VTIME] = 0 + + if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(setTermios), uintptr(unsafe.Pointer(&newState))); err != 0 { + return nil, err + } + + return &oldState, nil +} diff --git a/vendor/github.com/docker/docker/pkg/term/windows/ansi_reader.go b/vendor/github.com/docker/docker/pkg/term/windows/ansi_reader.go new file mode 100644 index 00000000..58452ad7 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/windows/ansi_reader.go @@ -0,0 +1,261 @@ +// +build windows + +package windows + +import ( + "bytes" + "errors" + "fmt" + "io" + "os" + "strings" + "unsafe" + + ansiterm "github.com/Azure/go-ansiterm" + "github.com/Azure/go-ansiterm/winterm" +) + +const ( + escapeSequence = ansiterm.KEY_ESC_CSI +) + +// ansiReader wraps a standard input file (e.g., os.Stdin) providing ANSI sequence translation. +type ansiReader struct { + file *os.File + fd uintptr + buffer []byte + cbBuffer int + command []byte +} + +// NewAnsiReader returns an io.ReadCloser that provides VT100 terminal emulation on top of a +// Windows console input handle. +func NewAnsiReader(nFile int) io.ReadCloser { + initLogger() + file, fd := winterm.GetStdFile(nFile) + return &ansiReader{ + file: file, + fd: fd, + command: make([]byte, 0, ansiterm.ANSI_MAX_CMD_LENGTH), + buffer: make([]byte, 0), + } +} + +// Close closes the wrapped file. +func (ar *ansiReader) Close() (err error) { + return ar.file.Close() +} + +// Fd returns the file descriptor of the wrapped file. +func (ar *ansiReader) Fd() uintptr { + return ar.fd +} + +// Read reads up to len(p) bytes of translated input events into p. +func (ar *ansiReader) Read(p []byte) (int, error) { + if len(p) == 0 { + return 0, nil + } + + // Previously read bytes exist, read as much as we can and return + if len(ar.buffer) > 0 { + logger.Debugf("Reading previously cached bytes") + + originalLength := len(ar.buffer) + copiedLength := copy(p, ar.buffer) + + if copiedLength == originalLength { + ar.buffer = make([]byte, 0, len(p)) + } else { + ar.buffer = ar.buffer[copiedLength:] + } + + logger.Debugf("Read from cache p[%d]: % x", copiedLength, p) + return copiedLength, nil + } + + // Read and translate key events + events, err := readInputEvents(ar.fd, len(p)) + if err != nil { + return 0, err + } else if len(events) == 0 { + logger.Debug("No input events detected") + return 0, nil + } + + keyBytes := translateKeyEvents(events, []byte(escapeSequence)) + + // Save excess bytes and right-size keyBytes + if len(keyBytes) > len(p) { + logger.Debugf("Received %d keyBytes, only room for %d bytes", len(keyBytes), len(p)) + ar.buffer = keyBytes[len(p):] + keyBytes = keyBytes[:len(p)] + } else if len(keyBytes) == 0 { + logger.Debug("No key bytes returned from the translator") + return 0, nil + } + + copiedLength := copy(p, keyBytes) + if copiedLength != len(keyBytes) { + return 0, errors.New("Unexpected copy length encountered.") + } + + logger.Debugf("Read p[%d]: % x", copiedLength, p) + logger.Debugf("Read keyBytes[%d]: % x", copiedLength, keyBytes) + return copiedLength, nil +} + +// readInputEvents polls until at least one event is available. +func readInputEvents(fd uintptr, maxBytes int) ([]winterm.INPUT_RECORD, error) { + // Determine the maximum number of records to retrieve + // -- Cast around the type system to obtain the size of a single INPUT_RECORD. + // unsafe.Sizeof requires an expression vs. a type-reference; the casting + // tricks the type system into believing it has such an expression. + recordSize := int(unsafe.Sizeof(*((*winterm.INPUT_RECORD)(unsafe.Pointer(&maxBytes))))) + countRecords := maxBytes / recordSize + if countRecords > ansiterm.MAX_INPUT_EVENTS { + countRecords = ansiterm.MAX_INPUT_EVENTS + } + logger.Debugf("[windows] readInputEvents: Reading %v records (buffer size %v, record size %v)", countRecords, maxBytes, recordSize) + + // Wait for and read input events + events := make([]winterm.INPUT_RECORD, countRecords) + nEvents := uint32(0) + eventsExist, err := winterm.WaitForSingleObject(fd, winterm.WAIT_INFINITE) + if err != nil { + return nil, err + } + + if eventsExist { + err = winterm.ReadConsoleInput(fd, events, &nEvents) + if err != nil { + return nil, err + } + } + + // Return a slice restricted to the number of returned records + logger.Debugf("[windows] readInputEvents: Read %v events", nEvents) + return events[:nEvents], nil +} + +// KeyEvent Translation Helpers + +var arrowKeyMapPrefix = map[uint16]string{ + winterm.VK_UP: "%s%sA", + winterm.VK_DOWN: "%s%sB", + winterm.VK_RIGHT: "%s%sC", + winterm.VK_LEFT: "%s%sD", +} + +var keyMapPrefix = map[uint16]string{ + winterm.VK_UP: "\x1B[%sA", + winterm.VK_DOWN: "\x1B[%sB", + winterm.VK_RIGHT: "\x1B[%sC", + winterm.VK_LEFT: "\x1B[%sD", + winterm.VK_HOME: "\x1B[1%s~", // showkey shows ^[[1 + winterm.VK_END: "\x1B[4%s~", // showkey shows ^[[4 + winterm.VK_INSERT: "\x1B[2%s~", + winterm.VK_DELETE: "\x1B[3%s~", + winterm.VK_PRIOR: "\x1B[5%s~", + winterm.VK_NEXT: "\x1B[6%s~", + winterm.VK_F1: "", + winterm.VK_F2: "", + winterm.VK_F3: "\x1B[13%s~", + winterm.VK_F4: "\x1B[14%s~", + winterm.VK_F5: "\x1B[15%s~", + winterm.VK_F6: "\x1B[17%s~", + winterm.VK_F7: "\x1B[18%s~", + winterm.VK_F8: "\x1B[19%s~", + winterm.VK_F9: "\x1B[20%s~", + winterm.VK_F10: "\x1B[21%s~", + winterm.VK_F11: "\x1B[23%s~", + winterm.VK_F12: "\x1B[24%s~", +} + +// translateKeyEvents converts the input events into the appropriate ANSI string. +func translateKeyEvents(events []winterm.INPUT_RECORD, escapeSequence []byte) []byte { + var buffer bytes.Buffer + for _, event := range events { + if event.EventType == winterm.KEY_EVENT && event.KeyEvent.KeyDown != 0 { + buffer.WriteString(keyToString(&event.KeyEvent, escapeSequence)) + } + } + + return buffer.Bytes() +} + +// keyToString maps the given input event record to the corresponding string. +func keyToString(keyEvent *winterm.KEY_EVENT_RECORD, escapeSequence []byte) string { + if keyEvent.UnicodeChar == 0 { + return formatVirtualKey(keyEvent.VirtualKeyCode, keyEvent.ControlKeyState, escapeSequence) + } + + _, alt, control := getControlKeys(keyEvent.ControlKeyState) + if control { + // TODO(azlinux): Implement following control sequences + // -D Signals the end of input from the keyboard; also exits current shell. + // -H Deletes the first character to the left of the cursor. Also called the ERASE key. + // -Q Restarts printing after it has been stopped with -s. + // -S Suspends printing on the screen (does not stop the program). + // -U Deletes all characters on the current line. Also called the KILL key. + // -E Quits current command and creates a core + + } + + // +Key generates ESC N Key + if !control && alt { + return ansiterm.KEY_ESC_N + strings.ToLower(string(keyEvent.UnicodeChar)) + } + + return string(keyEvent.UnicodeChar) +} + +// formatVirtualKey converts a virtual key (e.g., up arrow) into the appropriate ANSI string. +func formatVirtualKey(key uint16, controlState uint32, escapeSequence []byte) string { + shift, alt, control := getControlKeys(controlState) + modifier := getControlKeysModifier(shift, alt, control) + + if format, ok := arrowKeyMapPrefix[key]; ok { + return fmt.Sprintf(format, escapeSequence, modifier) + } + + if format, ok := keyMapPrefix[key]; ok { + return fmt.Sprintf(format, modifier) + } + + return "" +} + +// getControlKeys extracts the shift, alt, and ctrl key states. +func getControlKeys(controlState uint32) (shift, alt, control bool) { + shift = 0 != (controlState & winterm.SHIFT_PRESSED) + alt = 0 != (controlState & (winterm.LEFT_ALT_PRESSED | winterm.RIGHT_ALT_PRESSED)) + control = 0 != (controlState & (winterm.LEFT_CTRL_PRESSED | winterm.RIGHT_CTRL_PRESSED)) + return shift, alt, control +} + +// getControlKeysModifier returns the ANSI modifier for the given combination of control keys. +func getControlKeysModifier(shift, alt, control bool) string { + if shift && alt && control { + return ansiterm.KEY_CONTROL_PARAM_8 + } + if alt && control { + return ansiterm.KEY_CONTROL_PARAM_7 + } + if shift && control { + return ansiterm.KEY_CONTROL_PARAM_6 + } + if control { + return ansiterm.KEY_CONTROL_PARAM_5 + } + if shift && alt { + return ansiterm.KEY_CONTROL_PARAM_4 + } + if alt { + return ansiterm.KEY_CONTROL_PARAM_3 + } + if shift { + return ansiterm.KEY_CONTROL_PARAM_2 + } + return "" +} diff --git a/vendor/github.com/docker/docker/pkg/term/windows/ansi_writer.go b/vendor/github.com/docker/docker/pkg/term/windows/ansi_writer.go new file mode 100644 index 00000000..a3ce5697 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/windows/ansi_writer.go @@ -0,0 +1,64 @@ +// +build windows + +package windows + +import ( + "io" + "os" + + ansiterm "github.com/Azure/go-ansiterm" + "github.com/Azure/go-ansiterm/winterm" +) + +// ansiWriter wraps a standard output file (e.g., os.Stdout) providing ANSI sequence translation. +type ansiWriter struct { + file *os.File + fd uintptr + infoReset *winterm.CONSOLE_SCREEN_BUFFER_INFO + command []byte + escapeSequence []byte + inAnsiSequence bool + parser *ansiterm.AnsiParser +} + +// NewAnsiWriter returns an io.Writer that provides VT100 terminal emulation on top of a +// Windows console output handle. +func NewAnsiWriter(nFile int) io.Writer { + initLogger() + file, fd := winterm.GetStdFile(nFile) + info, err := winterm.GetConsoleScreenBufferInfo(fd) + if err != nil { + return nil + } + + parser := ansiterm.CreateParser("Ground", winterm.CreateWinEventHandler(fd, file)) + logger.Infof("newAnsiWriter: parser %p", parser) + + aw := &ansiWriter{ + file: file, + fd: fd, + infoReset: info, + command: make([]byte, 0, ansiterm.ANSI_MAX_CMD_LENGTH), + escapeSequence: []byte(ansiterm.KEY_ESC_CSI), + parser: parser, + } + + logger.Infof("newAnsiWriter: aw.parser %p", aw.parser) + logger.Infof("newAnsiWriter: %v", aw) + return aw +} + +func (aw *ansiWriter) Fd() uintptr { + return aw.fd +} + +// Write writes len(p) bytes from p to the underlying data stream. +func (aw *ansiWriter) Write(p []byte) (total int, err error) { + if len(p) == 0 { + return 0, nil + } + + logger.Infof("Write: % x", p) + logger.Infof("Write: %s", string(p)) + return aw.parser.Parse(p) +} diff --git a/vendor/github.com/docker/docker/pkg/term/windows/console.go b/vendor/github.com/docker/docker/pkg/term/windows/console.go new file mode 100644 index 00000000..ca5c3b2e --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/windows/console.go @@ -0,0 +1,35 @@ +// +build windows + +package windows + +import ( + "os" + + "github.com/Azure/go-ansiterm/winterm" +) + +// GetHandleInfo returns file descriptor and bool indicating whether the file is a console. +func GetHandleInfo(in interface{}) (uintptr, bool) { + switch t := in.(type) { + case *ansiReader: + return t.Fd(), true + case *ansiWriter: + return t.Fd(), true + } + + var inFd uintptr + var isTerminal bool + + if file, ok := in.(*os.File); ok { + inFd = file.Fd() + isTerminal = IsConsole(inFd) + } + return inFd, isTerminal +} + +// IsConsole returns true if the given file descriptor is a Windows Console. +// The code assumes that GetConsoleMode will return an error for file descriptors that are not a console. +func IsConsole(fd uintptr) bool { + _, e := winterm.GetConsoleMode(fd) + return e == nil +} diff --git a/vendor/github.com/docker/docker/pkg/term/windows/windows.go b/vendor/github.com/docker/docker/pkg/term/windows/windows.go new file mode 100644 index 00000000..ce4cb599 --- /dev/null +++ b/vendor/github.com/docker/docker/pkg/term/windows/windows.go @@ -0,0 +1,33 @@ +// These files implement ANSI-aware input and output streams for use by the Docker Windows client. +// When asked for the set of standard streams (e.g., stdin, stdout, stderr), the code will create +// and return pseudo-streams that convert ANSI sequences to / from Windows Console API calls. + +package windows + +import ( + "io/ioutil" + "os" + "sync" + + ansiterm "github.com/Azure/go-ansiterm" + "github.com/Sirupsen/logrus" +) + +var logger *logrus.Logger +var initOnce sync.Once + +func initLogger() { + initOnce.Do(func() { + logFile := ioutil.Discard + + if isDebugEnv := os.Getenv(ansiterm.LogEnv); isDebugEnv == "1" { + logFile, _ = os.Create("ansiReaderWriter.log") + } + + logger = &logrus.Logger{ + Out: logFile, + Formatter: new(logrus.TextFormatter), + Level: logrus.DebugLevel, + } + }) +} diff --git a/vendor/github.com/docker/go-connections/nat/nat.go b/vendor/github.com/docker/go-connections/nat/nat.go index e19c73c3..3d469165 100644 --- a/vendor/github.com/docker/go-connections/nat/nat.go +++ b/vendor/github.com/docker/go-connections/nat/nat.go @@ -85,10 +85,14 @@ func (p Port) Port() string { // Int returns the port number of a Port as an int func (p Port) Int() int { portStr := p.Port() + if len(portStr) == 0 { + return 0 + } + // We don't need to check for an error because we're going to // assume that any error would have been found, and reported, in NewPort() - port, _ := ParsePort(portStr) - return port + port, _ := strconv.ParseUint(portStr, 10, 16) + return int(port) } // Range returns the start/end port numbers of a Port range as ints @@ -128,112 +132,92 @@ func ParsePortSpecs(ports []string) (map[Port]struct{}, map[Port][]PortBinding, exposedPorts = make(map[Port]struct{}, len(ports)) bindings = make(map[Port][]PortBinding) ) + for _, rawPort := range ports { - portMappings, err := ParsePortSpec(rawPort) + proto := "tcp" + + if i := strings.LastIndex(rawPort, "/"); i != -1 { + proto = rawPort[i+1:] + rawPort = rawPort[:i] + } + if !strings.Contains(rawPort, ":") { + rawPort = fmt.Sprintf("::%s", rawPort) + } else if len(strings.Split(rawPort, ":")) == 2 { + rawPort = fmt.Sprintf(":%s", rawPort) + } + + parts, err := PartParser(portSpecTemplate, rawPort) if err != nil { return nil, nil, err } - for _, portMapping := range portMappings { - port := portMapping.Port + var ( + containerPort = parts["containerPort"] + rawIP = parts["ip"] + hostPort = parts["hostPort"] + ) + + if rawIP != "" && net.ParseIP(rawIP) == nil { + return nil, nil, fmt.Errorf("Invalid ip address: %s", rawIP) + } + if containerPort == "" { + return nil, nil, fmt.Errorf("No port specified: %s", rawPort) + } + + startPort, endPort, err := ParsePortRange(containerPort) + if err != nil { + return nil, nil, fmt.Errorf("Invalid containerPort: %s", containerPort) + } + + var startHostPort, endHostPort uint64 = 0, 0 + if len(hostPort) > 0 { + startHostPort, endHostPort, err = ParsePortRange(hostPort) + if err != nil { + return nil, nil, fmt.Errorf("Invalid hostPort: %s", hostPort) + } + } + + if hostPort != "" && (endPort-startPort) != (endHostPort-startHostPort) { + // Allow host port range iff containerPort is not a range. + // In this case, use the host port range as the dynamic + // host port range to allocate into. + if endPort != startPort { + return nil, nil, fmt.Errorf("Invalid ranges specified for container and host Ports: %s and %s", containerPort, hostPort) + } + } + + if !validateProto(strings.ToLower(proto)) { + return nil, nil, fmt.Errorf("Invalid proto: %s", proto) + } + + for i := uint64(0); i <= (endPort - startPort); i++ { + containerPort = strconv.FormatUint(startPort+i, 10) + if len(hostPort) > 0 { + hostPort = strconv.FormatUint(startHostPort+i, 10) + } + // Set hostPort to a range only if there is a single container port + // and a dynamic host port. + if startPort == endPort && startHostPort != endHostPort { + hostPort = fmt.Sprintf("%s-%s", hostPort, strconv.FormatUint(endHostPort, 10)) + } + port, err := NewPort(strings.ToLower(proto), containerPort) + if err != nil { + return nil, nil, err + } if _, exists := exposedPorts[port]; !exists { exposedPorts[port] = struct{}{} } + + binding := PortBinding{ + HostIP: rawIP, + HostPort: hostPort, + } bslice, exists := bindings[port] if !exists { bslice = []PortBinding{} } - bindings[port] = append(bslice, portMapping.Binding) + bindings[port] = append(bslice, binding) } } return exposedPorts, bindings, nil } - -// PortMapping is a data object mapping a Port to a PortBinding -type PortMapping struct { - Port Port - Binding PortBinding -} - -// ParsePortSpec parses a port specification string into a slice of PortMappings -func ParsePortSpec(rawPort string) ([]PortMapping, error) { - proto := "tcp" - - if i := strings.LastIndex(rawPort, "/"); i != -1 { - proto = rawPort[i+1:] - rawPort = rawPort[:i] - } - if !strings.Contains(rawPort, ":") { - rawPort = fmt.Sprintf("::%s", rawPort) - } else if len(strings.Split(rawPort, ":")) == 2 { - rawPort = fmt.Sprintf(":%s", rawPort) - } - - parts, err := PartParser(portSpecTemplate, rawPort) - if err != nil { - return nil, err - } - - var ( - containerPort = parts["containerPort"] - rawIP = parts["ip"] - hostPort = parts["hostPort"] - ) - - if rawIP != "" && net.ParseIP(rawIP) == nil { - return nil, fmt.Errorf("Invalid ip address: %s", rawIP) - } - if containerPort == "" { - return nil, fmt.Errorf("No port specified: %s", rawPort) - } - - startPort, endPort, err := ParsePortRange(containerPort) - if err != nil { - return nil, fmt.Errorf("Invalid containerPort: %s", containerPort) - } - - var startHostPort, endHostPort uint64 = 0, 0 - if len(hostPort) > 0 { - startHostPort, endHostPort, err = ParsePortRange(hostPort) - if err != nil { - return nil, fmt.Errorf("Invalid hostPort: %s", hostPort) - } - } - - if hostPort != "" && (endPort-startPort) != (endHostPort-startHostPort) { - // Allow host port range iff containerPort is not a range. - // In this case, use the host port range as the dynamic - // host port range to allocate into. - if endPort != startPort { - return nil, fmt.Errorf("Invalid ranges specified for container and host Ports: %s and %s", containerPort, hostPort) - } - } - - if !validateProto(strings.ToLower(proto)) { - return nil, fmt.Errorf("Invalid proto: %s", proto) - } - - ports := []PortMapping{} - for i := uint64(0); i <= (endPort - startPort); i++ { - containerPort = strconv.FormatUint(startPort+i, 10) - if len(hostPort) > 0 { - hostPort = strconv.FormatUint(startHostPort+i, 10) - } - // Set hostPort to a range only if there is a single container port - // and a dynamic host port. - if startPort == endPort && startHostPort != endHostPort { - hostPort = fmt.Sprintf("%s-%s", hostPort, strconv.FormatUint(endHostPort, 10)) - } - port, err := NewPort(strings.ToLower(proto), containerPort) - if err != nil { - return nil, err - } - - binding := PortBinding{ - HostIP: rawIP, - HostPort: hostPort, - } - ports = append(ports, PortMapping{Port: port, Binding: binding}) - } - return ports, nil -} diff --git a/vendor/github.com/docker/go-units/LICENSE b/vendor/github.com/docker/go-units/LICENSE.code similarity index 100% rename from vendor/github.com/docker/go-units/LICENSE rename to vendor/github.com/docker/go-units/LICENSE.code diff --git a/vendor/github.com/docker/go-units/LICENSE.docs b/vendor/github.com/docker/go-units/LICENSE.docs new file mode 100644 index 00000000..e26cd4fc --- /dev/null +++ b/vendor/github.com/docker/go-units/LICENSE.docs @@ -0,0 +1,425 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public licenses. +Notwithstanding, Creative Commons may elect to apply one of its public +licenses to material it publishes and in those instances will be +considered the "Licensor." Except for the limited purpose of indicating +that material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the public +licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/vendor/github.com/docker/go-units/README.md b/vendor/github.com/docker/go-units/README.md index 4f70a4e1..3ce4d79d 100644 --- a/vendor/github.com/docker/go-units/README.md +++ b/vendor/github.com/docker/go-units/README.md @@ -10,7 +10,9 @@ See the [docs in godoc](https://godoc.org/github.com/docker/go-units) for exampl ## Copyright and license -Copyright © 2015 Docker, Inc. - -go-units is licensed under the Apache License, Version 2.0. -See [LICENSE](LICENSE) for the full text of the license. +Copyright © 2015 Docker, Inc. All rights reserved, except as follows. Code +is released under the Apache 2.0 license. The README.md file, and files in the +"docs" folder are licensed under the Creative Commons Attribution 4.0 +International License under the terms and conditions set forth in the file +"LICENSE.docs". You may obtain a duplicate copy of the same license, titled +CC-BY-SA-4.0, at http://creativecommons.org/licenses/by/4.0/. diff --git a/vendor/github.com/docker/go-units/duration.go b/vendor/github.com/docker/go-units/duration.go index d4a64549..c219a8a9 100644 --- a/vendor/github.com/docker/go-units/duration.go +++ b/vendor/github.com/docker/go-units/duration.go @@ -12,8 +12,6 @@ import ( func HumanDuration(d time.Duration) string { if seconds := int(d.Seconds()); seconds < 1 { return "Less than a second" - } else if seconds == 1 { - return "1 second" } else if seconds < 60 { return fmt.Sprintf("%d seconds", seconds) } else if minutes := int(d.Minutes()); minutes == 1 { diff --git a/vendor/github.com/docker/go-units/size.go b/vendor/github.com/docker/go-units/size.go index b6485edf..3b59daff 100644 --- a/vendor/github.com/docker/go-units/size.go +++ b/vendor/github.com/docker/go-units/size.go @@ -31,40 +31,27 @@ type unitMap map[string]int64 var ( decimalMap = unitMap{"k": KB, "m": MB, "g": GB, "t": TB, "p": PB} binaryMap = unitMap{"k": KiB, "m": MiB, "g": GiB, "t": TiB, "p": PiB} - sizeRegex = regexp.MustCompile(`^(\d+(\.\d+)*) ?([kKmMgGtTpP])?[bB]?$`) + sizeRegex = regexp.MustCompile(`^(\d+)([kKmMgGtTpP])?[bB]?$`) ) var decimapAbbrs = []string{"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"} var binaryAbbrs = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"} -func getSizeAndUnit(size float64, base float64, _map []string) (float64, string) { - i := 0 - unitsLimit := len(_map) - 1 - for size >= base && i < unitsLimit { - size = size / base - i++ - } - return size, _map[i] -} - // CustomSize returns a human-readable approximation of a size // using custom format. func CustomSize(format string, size float64, base float64, _map []string) string { - size, unit := getSizeAndUnit(size, base, _map) - return fmt.Sprintf(format, size, unit) -} - -// HumanSizeWithPrecision allows the size to be in any precision, -// instead of 4 digit precision used in units.HumanSize. -func HumanSizeWithPrecision(size float64, precision int) string { - size, unit := getSizeAndUnit(size, 1000.0, decimapAbbrs) - return fmt.Sprintf("%.*g %s", precision, size, unit) + i := 0 + for size >= base { + size = size / base + i++ + } + return fmt.Sprintf(format, size, _map[i]) } // HumanSize returns a human-readable approximation of a size // capped at 4 valid numbers (eg. "2.746 MB", "796 KB"). func HumanSize(size float64) string { - return HumanSizeWithPrecision(size, 4) + return CustomSize("%.4g %s", size, 1000.0, decimapAbbrs) } // BytesSize returns a human-readable size in bytes, kibibytes, @@ -90,19 +77,19 @@ func RAMInBytes(size string) (int64, error) { // Parses the human-readable size string into the amount it represents. func parseSize(sizeStr string, uMap unitMap) (int64, error) { matches := sizeRegex.FindStringSubmatch(sizeStr) - if len(matches) != 4 { + if len(matches) != 3 { return -1, fmt.Errorf("invalid size: '%s'", sizeStr) } - size, err := strconv.ParseFloat(matches[1], 64) + size, err := strconv.ParseInt(matches[1], 10, 0) if err != nil { return -1, err } - unitPrefix := strings.ToLower(matches[3]) + unitPrefix := strings.ToLower(matches[2]) if mul, ok := uMap[unitPrefix]; ok { - size *= float64(mul) + size *= mul } - return int64(size), nil + return size, nil } diff --git a/vendor/github.com/docker/libtrust/util.go b/vendor/github.com/docker/libtrust/util.go index d88176cc..45dc3e18 100644 --- a/vendor/github.com/docker/libtrust/util.go +++ b/vendor/github.com/docker/libtrust/util.go @@ -164,8 +164,6 @@ func joseBase64UrlEncode(b []byte) string { // accordance with the jose specification. // http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-31#section-2 func joseBase64UrlDecode(s string) ([]byte, error) { - s = strings.Replace(s, "\n", "", -1) - s = strings.Replace(s, " ", "", -1) switch len(s) % 4 { case 0: case 2: diff --git a/vendor/github.com/emicklei/go-restful/README.md b/vendor/github.com/emicklei/go-restful/README.md index 8f954c01..cfe6d0a9 100644 --- a/vendor/github.com/emicklei/go-restful/README.md +++ b/vendor/github.com/emicklei/go-restful/README.md @@ -40,7 +40,7 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo - Routes for request → function mapping with path parameter (e.g. {id}) support - Configurable router: - - Routing algorithm after [JSR311](http://jsr311.java.net/nonav/releases/1.1/spec/spec.html) that is implemented using (but doest **not** accept) regular expressions (See RouterJSR311 which is used by default) + - Routing algorithm after [JSR311](http://jsr311.java.net/nonav/releases/1.1/spec/spec.html) that is implemented using (but does **not** accept) regular expressions (See RouterJSR311 which is used by default) - Fast routing algorithm that allows static elements, regular expressions and dynamic parameters in the URL path (e.g. /meetings/{id} or /static/{subpath:*}, See CurlyRouter) - Request API for reading structs from JSON/XML and accesing parameters (path,query,header) - Response API for writing structs to JSON/XML and setting headers @@ -61,8 +61,8 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo - [Documentation on godoc.org](http://godoc.org/github.com/emicklei/go-restful) - [Code examples](https://github.com/emicklei/go-restful/tree/master/examples) -- [Example posted on blog](http://ernestmicklei.com/2012/11/24/go-restful-first-working-example/) -- [Design explained on blog](http://ernestmicklei.com/2012/11/11/go-restful-api-design/) +- [Example posted on blog](http://ernestmicklei.com/2012/11/go-restful-first-working-example/) +- [Design explained on blog](http://ernestmicklei.com/2012/11/go-restful-api-design/) - [sourcegraph](https://sourcegraph.com/github.com/emicklei/go-restful) - [gopkg.in](https://gopkg.in/emicklei/go-restful.v1) - [showcase: Mora - MongoDB REST Api server](https://github.com/emicklei/mora) @@ -71,4 +71,4 @@ func (u UserResource) findUser(request *restful.Request, response *restful.Respo (c) 2012 - 2015, http://ernestmicklei.com. MIT License -Type ```git shortlog -s``` for a full list of contributors. \ No newline at end of file +Type ```git shortlog -s``` for a full list of contributors. diff --git a/vendor/github.com/emicklei/go-restful/container.go b/vendor/github.com/emicklei/go-restful/container.go index 62ded27c..4e53cccb 100644 --- a/vendor/github.com/emicklei/go-restful/container.go +++ b/vendor/github.com/emicklei/go-restful/container.go @@ -283,12 +283,12 @@ func fixedPrefixPath(pathspec string) string { } // ServeHTTP implements net/http.Handler therefore a Container can be a Handler in a http.Server -func (c Container) ServeHTTP(httpwriter http.ResponseWriter, httpRequest *http.Request) { +func (c *Container) ServeHTTP(httpwriter http.ResponseWriter, httpRequest *http.Request) { c.ServeMux.ServeHTTP(httpwriter, httpRequest) } // Handle registers the handler for the given pattern. If a handler already exists for pattern, Handle panics. -func (c Container) Handle(pattern string, handler http.Handler) { +func (c *Container) Handle(pattern string, handler http.Handler) { c.ServeMux.Handle(pattern, handler) } @@ -318,7 +318,7 @@ func (c *Container) Filter(filter FilterFunction) { } // RegisteredWebServices returns the collections of added WebServices -func (c Container) RegisteredWebServices() []*WebService { +func (c *Container) RegisteredWebServices() []*WebService { c.webServicesLock.RLock() defer c.webServicesLock.RUnlock() result := make([]*WebService, len(c.webServices)) @@ -329,7 +329,7 @@ func (c Container) RegisteredWebServices() []*WebService { } // computeAllowedMethods returns a list of HTTP methods that are valid for a Request -func (c Container) computeAllowedMethods(req *Request) []string { +func (c *Container) computeAllowedMethods(req *Request) []string { // Go through all RegisteredWebServices() and all its Routes to collect the options methods := []string{} requestPath := req.Request.URL.Path diff --git a/vendor/github.com/emicklei/go-restful/curly.go b/vendor/github.com/emicklei/go-restful/curly.go index ce284f74..185300db 100644 --- a/vendor/github.com/emicklei/go-restful/curly.go +++ b/vendor/github.com/emicklei/go-restful/curly.go @@ -44,16 +44,16 @@ func (c CurlyRouter) SelectRoute( } // selectRoutes return a collection of Route from a WebService that matches the path tokens from the request. -func (c CurlyRouter) selectRoutes(ws *WebService, requestTokens []string) []Route { - candidates := &sortableCurlyRoutes{[]*curlyRoute{}} +func (c CurlyRouter) selectRoutes(ws *WebService, requestTokens []string) sortableCurlyRoutes { + candidates := sortableCurlyRoutes{} for _, each := range ws.routes { matches, paramCount, staticCount := c.matchesRouteByPathTokens(each.pathParts, requestTokens) if matches { - candidates.add(&curlyRoute{each, paramCount, staticCount}) // TODO make sure Routes() return pointers? + candidates.add(curlyRoute{each, paramCount, staticCount}) // TODO make sure Routes() return pointers? } } sort.Sort(sort.Reverse(candidates)) - return candidates.routes() + return candidates } // matchesRouteByPathTokens computes whether it matches, howmany parameters do match and what the number of static path elements are. @@ -110,9 +110,9 @@ func (c CurlyRouter) regularMatchesPathToken(routeToken string, colon int, reque // detectRoute selectes from a list of Route the first match by inspecting both the Accept and Content-Type // headers of the Request. See also RouterJSR311 in jsr311.go -func (c CurlyRouter) detectRoute(candidateRoutes []Route, httpRequest *http.Request) (*Route, error) { +func (c CurlyRouter) detectRoute(candidateRoutes sortableCurlyRoutes, httpRequest *http.Request) (*Route, error) { // tracing is done inside detectRoute - return RouterJSR311{}.detectRoute(candidateRoutes, httpRequest) + return RouterJSR311{}.detectRoute(candidateRoutes.routes(), httpRequest) } // detectWebService returns the best matching webService given the list of path tokens. diff --git a/vendor/github.com/emicklei/go-restful/curly_route.go b/vendor/github.com/emicklei/go-restful/curly_route.go index 3edab72f..296f9465 100644 --- a/vendor/github.com/emicklei/go-restful/curly_route.go +++ b/vendor/github.com/emicklei/go-restful/curly_route.go @@ -11,30 +11,28 @@ type curlyRoute struct { staticCount int } -type sortableCurlyRoutes struct { - candidates []*curlyRoute +type sortableCurlyRoutes []curlyRoute + +func (s *sortableCurlyRoutes) add(route curlyRoute) { + *s = append(*s, route) } -func (s *sortableCurlyRoutes) add(route *curlyRoute) { - s.candidates = append(s.candidates, route) -} - -func (s *sortableCurlyRoutes) routes() (routes []Route) { - for _, each := range s.candidates { +func (s sortableCurlyRoutes) routes() (routes []Route) { + for _, each := range s { routes = append(routes, each.route) // TODO change return type } return routes } -func (s *sortableCurlyRoutes) Len() int { - return len(s.candidates) +func (s sortableCurlyRoutes) Len() int { + return len(s) } -func (s *sortableCurlyRoutes) Swap(i, j int) { - s.candidates[i], s.candidates[j] = s.candidates[j], s.candidates[i] +func (s sortableCurlyRoutes) Swap(i, j int) { + s[i], s[j] = s[j], s[i] } -func (s *sortableCurlyRoutes) Less(i, j int) bool { - ci := s.candidates[i] - cj := s.candidates[j] +func (s sortableCurlyRoutes) Less(i, j int) bool { + ci := s[i] + cj := s[j] // primary key if ci.staticCount < cj.staticCount { diff --git a/vendor/github.com/emicklei/go-restful/install.sh b/vendor/github.com/emicklei/go-restful/install.sh index 5fe03b56..36cbf25f 100644 --- a/vendor/github.com/emicklei/go-restful/install.sh +++ b/vendor/github.com/emicklei/go-restful/install.sh @@ -1,9 +1,10 @@ -cd examples - ls *.go | xargs -I {} go build -o /tmp/ignore {} - cd .. -go fmt ...swagger && \ +go test -test.v ...restful && \ go test -test.v ...swagger && \ +go vet ...restful && \ +go fmt ...swagger && \ go install ...swagger && \ go fmt ...restful && \ -go test -test.v ...restful && \ -go install ...restful \ No newline at end of file +go install ...restful +cd examples + ls *.go | xargs -I {} go build -o /tmp/ignore {} + cd .. \ No newline at end of file diff --git a/vendor/github.com/emicklei/go-restful/jsr311.go b/vendor/github.com/emicklei/go-restful/jsr311.go index b4fa9bba..511444ac 100644 --- a/vendor/github.com/emicklei/go-restful/jsr311.go +++ b/vendor/github.com/emicklei/go-restful/jsr311.go @@ -74,7 +74,7 @@ func (r RouterJSR311) detectRoute(routes []Route, httpRequest *http.Request) (*R // accept outputMediaOk := []Route{} accept := httpRequest.Header.Get(HEADER_Accept) - if accept == "" { + if len(accept) == 0 { accept = "*/*" } for _, each := range inputMediaOk { @@ -88,7 +88,8 @@ func (r RouterJSR311) detectRoute(routes []Route, httpRequest *http.Request) (*R } return nil, NewError(http.StatusNotAcceptable, "406: Not Acceptable") } - return r.bestMatchByMedia(outputMediaOk, contentType, accept), nil + // return r.bestMatchByMedia(outputMediaOk, contentType, accept), nil + return &outputMediaOk[0], nil } // http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html#x3-360003.7.2 diff --git a/vendor/github.com/emicklei/go-restful/response.go b/vendor/github.com/emicklei/go-restful/response.go index 696c67eb..971cd0b4 100644 --- a/vendor/github.com/emicklei/go-restful/response.go +++ b/vendor/github.com/emicklei/go-restful/response.go @@ -130,25 +130,25 @@ func (r *Response) WriteHeaderAndEntity(status int, value interface{}) error { } // WriteAsXml is a convenience method for writing a value in xml (requires Xml tags on the value) -// It uses the standard encoding/xml package for marshalling the valuel ; not using a registered EntityReaderWriter. +// It uses the standard encoding/xml package for marshalling the value ; not using a registered EntityReaderWriter. func (r *Response) WriteAsXml(value interface{}) error { return writeXML(r, http.StatusOK, MIME_XML, value) } // WriteHeaderAndXml is a convenience method for writing a status and value in xml (requires Xml tags on the value) -// It uses the standard encoding/xml package for marshalling the valuel ; not using a registered EntityReaderWriter. +// It uses the standard encoding/xml package for marshalling the value ; not using a registered EntityReaderWriter. func (r *Response) WriteHeaderAndXml(status int, value interface{}) error { return writeXML(r, status, MIME_XML, value) } // WriteAsJson is a convenience method for writing a value in json. -// It uses the standard encoding/json package for marshalling the valuel ; not using a registered EntityReaderWriter. +// It uses the standard encoding/json package for marshalling the value ; not using a registered EntityReaderWriter. func (r *Response) WriteAsJson(value interface{}) error { return writeJSON(r, http.StatusOK, MIME_JSON, value) } // WriteJson is a convenience method for writing a value in Json with a given Content-Type. -// It uses the standard encoding/json package for marshalling the valuel ; not using a registered EntityReaderWriter. +// It uses the standard encoding/json package for marshalling the value ; not using a registered EntityReaderWriter. func (r *Response) WriteJson(value interface{}, contentType string) error { return writeJSON(r, http.StatusOK, contentType, value) } diff --git a/vendor/github.com/emicklei/go-restful/route_builder.go b/vendor/github.com/emicklei/go-restful/route_builder.go index b49b7c74..8bc1ab68 100644 --- a/vendor/github.com/emicklei/go-restful/route_builder.go +++ b/vendor/github.com/emicklei/go-restful/route_builder.go @@ -128,7 +128,7 @@ func (b *RouteBuilder) Param(parameter *Parameter) *RouteBuilder { return b } -// Operation allows you to document what the acutal method/function call is of the Route. +// Operation allows you to document what the actual method/function call is of the Route. // Unless called, the operation name is derived from the RouteFunction set using To(..). func (b *RouteBuilder) Operation(name string) *RouteBuilder { b.operation = name diff --git a/vendor/github.com/emicklei/go-restful/swagger/config.go b/vendor/github.com/emicklei/go-restful/swagger/config.go index 944d988e..510d6fc1 100644 --- a/vendor/github.com/emicklei/go-restful/swagger/config.go +++ b/vendor/github.com/emicklei/go-restful/swagger/config.go @@ -9,6 +9,8 @@ import ( // PostBuildDeclarationMapFunc can be used to modify the api declaration map. type PostBuildDeclarationMapFunc func(apiDeclarationMap *ApiDeclarationList) +type MapSchemaFormatFunc func(typeName string) string + type Config struct { // url where the services are available, e.g. http://localhost:8080 // if left empty then the basePath of Swagger is taken from the actual request @@ -31,4 +33,6 @@ type Config struct { PostBuildHandler PostBuildDeclarationMapFunc // Swagger global info struct Info Info + // [optional] If set, model builder should call this handler to get addition typename-to-swagger-format-field convertion. + SchemaFormatHandler MapSchemaFormatFunc } diff --git a/vendor/github.com/emicklei/go-restful/swagger/model_builder.go b/vendor/github.com/emicklei/go-restful/swagger/model_builder.go index fcc2976c..398e8304 100644 --- a/vendor/github.com/emicklei/go-restful/swagger/model_builder.go +++ b/vendor/github.com/emicklei/go-restful/swagger/model_builder.go @@ -14,6 +14,7 @@ type ModelBuildable interface { type modelBuilder struct { Models *ModelList + Config *Config } type documentable interface { @@ -50,6 +51,14 @@ func (b modelBuilder) addModel(st reflect.Type, nameOverride string) *Model { if b.isPrimitiveType(modelName) { return nil } + // golang encoding/json packages says array and slice values encode as + // JSON arrays, except that []byte encodes as a base64-encoded string. + // If we see a []byte here, treat it at as a primitive type (string) + // and deal with it in buildArrayTypeProperty. + if (st.Kind() == reflect.Slice || st.Kind() == reflect.Array) && + st.Elem().Kind() == reflect.Uint8 { + return nil + } // see if we already have visited this model if _, ok := b.Models.At(modelName); ok { return nil @@ -231,7 +240,7 @@ func (b modelBuilder) buildStructTypeProperty(field reflect.StructField, jsonNam if field.Name == fieldType.Name() && field.Anonymous && !hasNamedJSONTag(field) { // embedded struct - sub := modelBuilder{new(ModelList)} + sub := modelBuilder{new(ModelList), b.Config} sub.addModel(fieldType, "") subKey := sub.keyFrom(fieldType) // merge properties from sub @@ -275,6 +284,11 @@ func (b modelBuilder) buildArrayTypeProperty(field reflect.StructField, jsonName return jsonName, prop } fieldType := field.Type + if fieldType.Elem().Kind() == reflect.Uint8 { + stringt := "string" + prop.Type = &stringt + return jsonName, prop + } var pType = "array" prop.Type = &pType isPrimitive := b.isPrimitiveType(fieldType.Elem().Name()) @@ -410,6 +424,11 @@ func (b modelBuilder) jsonSchemaType(modelName string) string { } func (b modelBuilder) jsonSchemaFormat(modelName string) string { + if b.Config != nil && b.Config.SchemaFormatHandler != nil { + if mapped := b.Config.SchemaFormatHandler(modelName); mapped != "" { + return mapped + } + } schemaMap := map[string]string{ "int": "int32", "int32": "int32", diff --git a/vendor/github.com/emicklei/go-restful/swagger/swagger.go b/vendor/github.com/emicklei/go-restful/swagger/swagger.go index 967b6711..9c40833e 100644 --- a/vendor/github.com/emicklei/go-restful/swagger/swagger.go +++ b/vendor/github.com/emicklei/go-restful/swagger/swagger.go @@ -118,6 +118,7 @@ type ApiDeclaration struct { ApiVersion string `json:"apiVersion"` BasePath string `json:"basePath"` ResourcePath string `json:"resourcePath"` // must start with / + Info Info `json:"info"` Apis []Api `json:"apis,omitempty"` Models ModelList `json:"models,omitempty"` Produces []string `json:"produces,omitempty"` diff --git a/vendor/github.com/emicklei/go-restful/swagger/swagger_webservice.go b/vendor/github.com/emicklei/go-restful/swagger/swagger_webservice.go index 8dc3d5f9..58dd6259 100644 --- a/vendor/github.com/emicklei/go-restful/swagger/swagger_webservice.go +++ b/vendor/github.com/emicklei/go-restful/swagger/swagger_webservice.go @@ -241,7 +241,7 @@ func (sws SwaggerService) composeDeclaration(ws *restful.WebService, pathPrefix DataTypeFields: DataTypeFields{Type: &voidString}, Parameters: []Parameter{}, Nickname: route.Operation, - ResponseMessages: composeResponseMessages(route, &decl)} + ResponseMessages: composeResponseMessages(route, &decl, &sws.config)} operation.Consumes = route.Consumes operation.Produces = route.Produces @@ -271,7 +271,7 @@ func withoutWildcard(path string) string { } // composeResponseMessages takes the ResponseErrors (if any) and creates ResponseMessages from them. -func composeResponseMessages(route restful.Route, decl *ApiDeclaration) (messages []ResponseMessage) { +func composeResponseMessages(route restful.Route, decl *ApiDeclaration, config *Config) (messages []ResponseMessage) { if route.ResponseErrors == nil { return messages } @@ -294,7 +294,7 @@ func composeResponseMessages(route restful.Route, decl *ApiDeclaration) (message if isCollection { modelName = "array[" + modelName + "]" } - modelBuilder{&decl.Models}.addModel(st, "") + modelBuilder{Models: &decl.Models, Config: config}.addModel(st, "") // reference the model message.ResponseModel = modelName } @@ -332,11 +332,11 @@ func detectCollectionType(st reflect.Type) (bool, reflect.Type) { // addModelFromSample creates and adds (or overwrites) a Model from a sample resource func (sws SwaggerService) addModelFromSampleTo(operation *Operation, isResponse bool, sample interface{}, models *ModelList) { if isResponse { - type_, items := asDataType(sample) + type_, items := asDataType(sample, &sws.config) operation.Type = type_ operation.Items = items } - modelBuilder{models}.addModelFrom(sample) + modelBuilder{Models: models, Config: &sws.config}.addModelFrom(sample) } func asSwaggerParameter(param restful.ParameterData) Parameter { @@ -411,7 +411,7 @@ func asParamType(kind int) string { return "" } -func asDataType(any interface{}) (*string, *Item) { +func asDataType(any interface{}, config *Config) (*string, *Item) { // If it's not a collection, return the suggested model name st := reflect.TypeOf(any) isCollection, st := detectCollectionType(st) @@ -424,7 +424,7 @@ func asDataType(any interface{}) (*string, *Item) { // XXX: This is not very elegant // We create an Item object referring to the given model models := ModelList{} - mb := modelBuilder{&models} + mb := modelBuilder{Models: &models, Config: config} mb.addModelFrom(any) elemTypeName := mb.getElementTypeName(modelName, "", st) diff --git a/vendor/github.com/emicklei/go-restful/web_service.go b/vendor/github.com/emicklei/go-restful/web_service.go index 24fc5328..2a51004f 100644 --- a/vendor/github.com/emicklei/go-restful/web_service.go +++ b/vendor/github.com/emicklei/go-restful/web_service.go @@ -1,7 +1,7 @@ package restful import ( - "fmt" + "errors" "os" "sync" @@ -51,7 +51,7 @@ func (w *WebService) ApiVersion(apiVersion string) *WebService { } // Version returns the API version for documentation purposes. -func (w WebService) Version() string { return w.apiVersion } +func (w *WebService) Version() string { return w.apiVersion } // Path specifies the root URL template path of the WebService. // All Routes will be relative to this path. @@ -155,7 +155,7 @@ func (w *WebService) Route(builder *RouteBuilder) *WebService { // RemoveRoute removes the specified route, looks for something that matches 'path' and 'method' func (w *WebService) RemoveRoute(path, method string) error { if !w.dynamicRoutes { - return fmt.Errorf("dynamic routes are not enabled.") + return errors.New("dynamic routes are not enabled.") } w.routesLock.Lock() defer w.routesLock.Unlock() @@ -192,7 +192,7 @@ func (w *WebService) Consumes(accepts ...string) *WebService { } // Routes returns the Routes associated with this WebService -func (w WebService) Routes() []Route { +func (w *WebService) Routes() []Route { if !w.dynamicRoutes { return w.routes } @@ -207,12 +207,12 @@ func (w WebService) Routes() []Route { } // RootPath returns the RootPath associated with this WebService. Default "/" -func (w WebService) RootPath() string { +func (w *WebService) RootPath() string { return w.rootPath } // PathParameters return the path parameter names for (shared amoung its Routes) -func (w WebService) PathParameters() []*Parameter { +func (w *WebService) PathParameters() []*Parameter { return w.pathParameters } @@ -229,7 +229,7 @@ func (w *WebService) Doc(plainText string) *WebService { } // Documentation returns it. -func (w WebService) Documentation() string { +func (w *WebService) Documentation() string { return w.documentation } diff --git a/vendor/github.com/gogo/protobuf/proto/decode.go b/vendor/github.com/gogo/protobuf/proto/decode.go index cb5b213f..7b06266d 100644 --- a/vendor/github.com/gogo/protobuf/proto/decode.go +++ b/vendor/github.com/gogo/protobuf/proto/decode.go @@ -773,10 +773,11 @@ func (o *Buffer) dec_new_map(p *Properties, base structPointer) error { } } keyelem, valelem := keyptr.Elem(), valptr.Elem() - if !keyelem.IsValid() || !valelem.IsValid() { - // We did not decode the key or the value in the map entry. - // Either way, it's an invalid map entry. - return fmt.Errorf("proto: bad map data: missing key/val") + if !keyelem.IsValid() { + keyelem = reflect.Zero(p.mtype.Key()) + } + if !valelem.IsValid() { + valelem = reflect.Zero(p.mtype.Elem()) } v.SetMapIndex(keyelem, valelem) diff --git a/vendor/github.com/gogo/protobuf/proto/decode_gogo.go b/vendor/github.com/gogo/protobuf/proto/decode_gogo.go index 6a77aad7..603dabec 100644 --- a/vendor/github.com/gogo/protobuf/proto/decode_gogo.go +++ b/vendor/github.com/gogo/protobuf/proto/decode_gogo.go @@ -115,14 +115,8 @@ func setCustomType(base structPointer, f field, value interface{}) { oldHeader.Len = v.Len() oldHeader.Cap = v.Cap() default: - l := 1 size := reflect.TypeOf(value).Elem().Size() - if kind == reflect.Array { - l = reflect.TypeOf(value).Elem().Len() - size = reflect.TypeOf(value).Size() - } - total := int(size) * l - structPointer_Copy(toStructPointer(reflect.ValueOf(value)), structPointer_Add(base, f), total) + structPointer_Copy(toStructPointer(reflect.ValueOf(value)), structPointer_Add(base, f), int(size)) } } diff --git a/vendor/github.com/gogo/protobuf/proto/encode.go b/vendor/github.com/gogo/protobuf/proto/encode.go index 7321e1aa..eb7e0474 100644 --- a/vendor/github.com/gogo/protobuf/proto/encode.go +++ b/vendor/github.com/gogo/protobuf/proto/encode.go @@ -64,6 +64,10 @@ var ( // a struct with a repeated field containing a nil element. errRepeatedHasNil = errors.New("proto: repeated field has nil element") + // errOneofHasNil is the error returned if Marshal is called with + // a struct with a oneof field containing a nil element. + errOneofHasNil = errors.New("proto: oneof field has nil value") + // ErrNil is the error returned if Marshal is called with nil. ErrNil = errors.New("proto: Marshal called with nil") ) @@ -105,6 +109,11 @@ func (p *Buffer) EncodeVarint(x uint64) error { return nil } +// SizeVarint returns the varint encoding size of an integer. +func SizeVarint(x uint64) int { + return sizeVarint(x) +} + func sizeVarint(x uint64) (n int) { for { n++ @@ -1217,7 +1226,9 @@ func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error { // Do oneof fields. if prop.oneofMarshaler != nil { m := structPointer_Interface(base, prop.stype).(Message) - if err := prop.oneofMarshaler(m, o); err != nil { + if err := prop.oneofMarshaler(m, o); err == ErrNil { + return errOneofHasNil + } else if err != nil { return err } } @@ -1248,24 +1259,9 @@ func size_struct(prop *StructProperties, base structPointer) (n int) { } // Factor in any oneof fields. - // TODO: This could be faster and use less reflection. - if prop.oneofMarshaler != nil { - sv := reflect.ValueOf(structPointer_Interface(base, prop.stype)).Elem() - for i := 0; i < prop.stype.NumField(); i++ { - fv := sv.Field(i) - if fv.Kind() != reflect.Interface || fv.IsNil() { - continue - } - if prop.stype.Field(i).Tag.Get("protobuf_oneof") == "" { - continue - } - spv := fv.Elem() // interface -> *T - sv := spv.Elem() // *T -> T - sf := sv.Type().Field(0) // StructField inside T - var prop Properties - prop.Init(sf.Type, "whatever", sf.Tag.Get("protobuf"), &sf) - n += prop.size(&prop, toStructPointer(spv)) - } + if prop.oneofSizer != nil { + m := structPointer_Interface(base, prop.stype).(Message) + n += prop.oneofSizer(m) } return diff --git a/vendor/github.com/gogo/protobuf/proto/equal.go b/vendor/github.com/gogo/protobuf/proto/equal.go index cc3f2c95..f5db1def 100644 --- a/vendor/github.com/gogo/protobuf/proto/equal.go +++ b/vendor/github.com/gogo/protobuf/proto/equal.go @@ -50,7 +50,9 @@ Equality is defined in this way: are equal, and extensions sets are equal. - Two set scalar fields are equal iff their values are equal. If the fields are of a floating-point type, remember that - NaN != x for all x, including NaN. + NaN != x for all x, including NaN. If the message is defined + in a proto3 .proto file, fields are not "set"; specifically, + zero length proto3 "bytes" fields are equal (nil == {}). - Two repeated fields are equal iff their lengths are the same, and their corresponding elements are equal (a "bytes" field, although represented by []byte, is not a repeated field) @@ -88,6 +90,7 @@ func Equal(a, b Message) bool { // v1 and v2 are known to have the same type. func equalStruct(v1, v2 reflect.Value) bool { + sprop := GetProperties(v1.Type()) for i := 0; i < v1.NumField(); i++ { f := v1.Type().Field(i) if strings.HasPrefix(f.Name, "XXX_") { @@ -113,7 +116,7 @@ func equalStruct(v1, v2 reflect.Value) bool { } f1, f2 = f1.Elem(), f2.Elem() } - if !equalAny(f1, f2) { + if !equalAny(f1, f2, sprop.Prop[i]) { return false } } @@ -140,7 +143,8 @@ func equalStruct(v1, v2 reflect.Value) bool { } // v1 and v2 are known to have the same type. -func equalAny(v1, v2 reflect.Value) bool { +// prop may be nil. +func equalAny(v1, v2 reflect.Value, prop *Properties) bool { if v1.Type() == protoMessageType { m1, _ := v1.Interface().(Message) m2, _ := v2.Interface().(Message) @@ -163,7 +167,7 @@ func equalAny(v1, v2 reflect.Value) bool { if e1.Type() != e2.Type() { return false } - return equalAny(e1, e2) + return equalAny(e1, e2, nil) case reflect.Map: if v1.Len() != v2.Len() { return false @@ -174,16 +178,22 @@ func equalAny(v1, v2 reflect.Value) bool { // This key was not found in the second map. return false } - if !equalAny(v1.MapIndex(key), val2) { + if !equalAny(v1.MapIndex(key), val2, nil) { return false } } return true case reflect.Ptr: - return equalAny(v1.Elem(), v2.Elem()) + return equalAny(v1.Elem(), v2.Elem(), prop) case reflect.Slice: if v1.Type().Elem().Kind() == reflect.Uint8 { // short circuit: []byte + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value. + if prop != nil && prop.proto3 && v1.Len() == 0 && v2.Len() == 0 { + return true + } if v1.IsNil() != v2.IsNil() { return false } @@ -194,7 +204,7 @@ func equalAny(v1, v2 reflect.Value) bool { return false } for i := 0; i < v1.Len(); i++ { - if !equalAny(v1.Index(i), v2.Index(i)) { + if !equalAny(v1.Index(i), v2.Index(i), prop) { return false } } @@ -229,7 +239,7 @@ func equalExtensions(base reflect.Type, em1, em2 map[int32]Extension) bool { if m1 != nil && m2 != nil { // Both are unencoded. - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2)) { + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { return false } continue @@ -257,7 +267,7 @@ func equalExtensions(base reflect.Type, em1, em2 map[int32]Extension) bool { log.Printf("proto: badly encoded extension %d of %v: %v", extNum, base, err) return false } - if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2)) { + if !equalAny(reflect.ValueOf(m1), reflect.ValueOf(m2), nil) { return false } } diff --git a/vendor/github.com/gogo/protobuf/proto/extensions.go b/vendor/github.com/gogo/protobuf/proto/extensions.go index 9a6374fd..6180347e 100644 --- a/vendor/github.com/gogo/protobuf/proto/extensions.go +++ b/vendor/github.com/gogo/protobuf/proto/extensions.go @@ -403,7 +403,6 @@ func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { o := NewBuffer(b) t := reflect.TypeOf(extension.ExtensionType) - rep := extension.repeated() props := extensionProperties(extension) @@ -425,7 +424,7 @@ func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { return nil, err } - if !rep || o.index >= len(o.buf) { + if o.index >= len(o.buf) { break } } diff --git a/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go index bd55fb68..86b1fa23 100644 --- a/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go +++ b/vendor/github.com/gogo/protobuf/proto/extensions_gogo.go @@ -56,6 +56,10 @@ func (this *Extension) Equal(that *Extension) bool { return bytes.Equal(this.enc, that.enc) } +func (this *Extension) Compare(that *Extension) int { + return bytes.Compare(this.enc, that.enc) +} + func SizeOfExtensionMap(m map[int32]Extension) (n int) { return sizeExtensionMap(m) } @@ -185,6 +189,17 @@ func NewExtension(e []byte) Extension { return ee } +func AppendExtension(e extendableProto, tag int32, buf []byte) { + if ee, eok := e.(extensionsMap); eok { + ext := ee.ExtensionMap()[int32(tag)] // may be missing + ext.enc = append(ext.enc, buf...) + ee.ExtensionMap()[int32(tag)] = ext + } else if ee, eok := e.(extensionsBytes); eok { + ext := ee.GetExtensions() + *ext = append(*ext, buf...) + } +} + func (this Extension) GoString() string { if this.enc == nil { if err := encodeExtension(&this); err != nil { diff --git a/vendor/github.com/gogo/protobuf/proto/lib.go b/vendor/github.com/gogo/protobuf/proto/lib.go index 8ffa91a3..2e35ae2d 100644 --- a/vendor/github.com/gogo/protobuf/proto/lib.go +++ b/vendor/github.com/gogo/protobuf/proto/lib.go @@ -70,6 +70,12 @@ for a protocol buffer variable v: with distinguished wrapper types for each possible field value. - Marshal and Unmarshal are functions to encode and decode the wire format. +When the .proto file specifies `syntax="proto3"`, there are some differences: + + - Non-repeated fields of non-message type are values instead of pointers. + - Getters are only generated for message and oneof fields. + - Enum types do not get an Enum method. + The simplest way to describe this is to see an example. Given file test.proto, containing @@ -229,6 +235,7 @@ To create and play with a Test object: test := &pb.Test{ Label: proto.String("hello"), Type: proto.Int32(17), + Reps: []int64{1, 2, 3}, Optionalgroup: &pb.Test_OptionalGroup{ RequiredField: proto.String("good bye"), }, @@ -441,7 +448,7 @@ func (p *Buffer) DebugPrint(s string, b []byte) { var u uint64 obuf := p.buf - index := p.index + sindex := p.index p.buf = b p.index = 0 depth := 0 @@ -536,7 +543,7 @@ out: fmt.Printf("\n") p.buf = obuf - p.index = index + p.index = sindex } // SetDefaults sets unset protocol buffer fields to their default values. @@ -881,3 +888,7 @@ func isProto3Zero(v reflect.Value) bool { } return false } + +// ProtoPackageIsVersion1 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const GoGoProtoPackageIsVersion1 = true diff --git a/vendor/github.com/gogo/protobuf/proto/properties.go b/vendor/github.com/gogo/protobuf/proto/properties.go index 4711057e..5e6a0b3b 100644 --- a/vendor/github.com/gogo/protobuf/proto/properties.go +++ b/vendor/github.com/gogo/protobuf/proto/properties.go @@ -96,6 +96,9 @@ type oneofMarshaler func(Message, *Buffer) error // A oneofUnmarshaler does the unmarshaling for a oneof field in a message. type oneofUnmarshaler func(Message, int, int, *Buffer) (bool, error) +// A oneofSizer does the sizing for all oneof fields in a message. +type oneofSizer func(Message) int + // tagMap is an optimization over map[int]int for typical protocol buffer // use-cases. Encoded protocol buffers are often in tag order with small tag // numbers. @@ -147,6 +150,7 @@ type StructProperties struct { oneofMarshaler oneofMarshaler oneofUnmarshaler oneofUnmarshaler + oneofSizer oneofSizer stype reflect.Type // OneofTypes contains information about the oneof fields in this message. @@ -174,6 +178,7 @@ func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order type Properties struct { Name string // name of the field, for error messages OrigName string // original name before protocol compiler (always set) + JSONName string // name to use for JSON; determined by protoc Wire string WireType int Tag int @@ -233,8 +238,9 @@ func (p *Properties) String() string { if p.Packed { s += ",packed" } - if p.OrigName != p.Name { - s += ",name=" + p.OrigName + s += ",name=" + p.OrigName + if p.JSONName != p.OrigName { + s += ",json=" + p.JSONName } if p.proto3 { s += ",proto3" @@ -314,6 +320,8 @@ func (p *Properties) Parse(s string) { p.Packed = true case strings.HasPrefix(f, "name="): p.OrigName = f[5:] + case strings.HasPrefix(f, "json="): + p.JSONName = f[5:] case strings.HasPrefix(f, "enum="): p.Enum = f[5:] case f == "proto3": @@ -784,11 +792,11 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { sort.Sort(prop) type oneofMessage interface { - XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), []interface{}) + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) } if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); isOneofMessage && ok { var oots []interface{} - prop.oneofMarshaler, prop.oneofUnmarshaler, oots = om.XXX_OneofFuncs() + prop.oneofMarshaler, prop.oneofUnmarshaler, prop.oneofSizer, oots = om.XXX_OneofFuncs() prop.stype = t // Interpret oneof metadata. diff --git a/vendor/github.com/gogo/protobuf/proto/text.go b/vendor/github.com/gogo/protobuf/proto/text.go index 7c9ae90f..b60be28a 100644 --- a/vendor/github.com/gogo/protobuf/proto/text.go +++ b/vendor/github.com/gogo/protobuf/proto/text.go @@ -335,7 +335,8 @@ func writeStruct(w *textWriter, sv reflect.Value) error { } inner := fv.Elem().Elem() // interface -> *T -> T tag := inner.Type().Field(0).Tag.Get("protobuf") - props.Parse(tag) // Overwrite the outer props. + props = new(Properties) // Overwrite the outer props var, but not its pointee. + props.Parse(tag) // Write the value in the oneof, not the oneof itself. fv = inner.Field(0) @@ -573,12 +574,12 @@ func writeUnknownStruct(w *textWriter, data []byte) (err error) { return ferr } if wire != WireStartGroup { - if err := w.WriteByte(':'); err != nil { + if err = w.WriteByte(':'); err != nil { return err } } if !w.compact || wire == WireStartGroup { - if err := w.WriteByte(' '); err != nil { + if err = w.WriteByte(' '); err != nil { return err } } @@ -727,7 +728,14 @@ func (w *textWriter) writeIndent() { w.complete = false } -func marshalText(w io.Writer, pb Message, compact bool) error { +// TextMarshaler is a configurable text format marshaler. +type TextMarshaler struct { + Compact bool // use compact text format (one line). +} + +// Marshal writes a given protocol buffer in text format. +// The only errors returned are from w. +func (m *TextMarshaler) Marshal(w io.Writer, pb Message) error { val := reflect.ValueOf(pb) if pb == nil || val.IsNil() { w.Write([]byte("")) @@ -742,7 +750,7 @@ func marshalText(w io.Writer, pb Message, compact bool) error { aw := &textWriter{ w: ww, complete: true, - compact: compact, + compact: m.Compact, } if tm, ok := pb.(encoding.TextMarshaler); ok { @@ -769,25 +777,29 @@ func marshalText(w io.Writer, pb Message, compact bool) error { return nil } +// Text is the same as Marshal, but returns the string directly. +func (m *TextMarshaler) Text(pb Message) string { + var buf bytes.Buffer + m.Marshal(&buf, pb) + return buf.String() +} + +var ( + defaultTextMarshaler = TextMarshaler{} + compactTextMarshaler = TextMarshaler{Compact: true} +) + +// TODO: consider removing some of the Marshal functions below. + // MarshalText writes a given protocol buffer in text format. // The only errors returned are from w. -func MarshalText(w io.Writer, pb Message) error { - return marshalText(w, pb, false) -} +func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } // MarshalTextString is the same as MarshalText, but returns the string directly. -func MarshalTextString(pb Message) string { - var buf bytes.Buffer - marshalText(&buf, pb, false) - return buf.String() -} +func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } // CompactText writes a given protocol buffer in compact text format (one line). -func CompactText(w io.Writer, pb Message) error { return marshalText(w, pb, true) } +func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } // CompactTextString is the same as CompactText, but returns the string directly. -func CompactTextString(pb Message) string { - var buf bytes.Buffer - marshalText(&buf, pb, true) - return buf.String() -} +func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/vendor/github.com/gogo/protobuf/proto/text_parser.go b/vendor/github.com/gogo/protobuf/proto/text_parser.go index f3909695..61b4bc8c 100644 --- a/vendor/github.com/gogo/protobuf/proto/text_parser.go +++ b/vendor/github.com/gogo/protobuf/proto/text_parser.go @@ -124,6 +124,14 @@ func isWhitespace(c byte) bool { return false } +func isQuote(c byte) bool { + switch c { + case '"', '\'': + return true + } + return false +} + func (p *textParser) skipWhitespace() { i := 0 for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { @@ -338,13 +346,13 @@ func (p *textParser) next() *token { p.advance() if p.done { p.cur.value = "" - } else if len(p.cur.value) > 0 && p.cur.value[0] == '"' { + } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { // Look for multiple quoted strings separated by whitespace, // and concatenate them. cat := p.cur for { p.skipWhitespace() - if p.done || p.s[0] != '"' { + if p.done || !isQuote(p.s[0]) { break } p.advance() @@ -724,15 +732,15 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { if err != nil { return err } - tok := p.next() - if tok.err != nil { - return tok.err + ntok := p.next() + if ntok.err != nil { + return ntok.err } - if tok.value == "]" { + if ntok.value == "]" { break } - if tok.value != "," { - return p.errorf("Expected ']' or ',' found %q", tok.value) + if ntok.value != "," { + return p.errorf("Expected ']' or ',' found %q", ntok.value) } } return nil diff --git a/vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go b/vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go new file mode 100644 index 00000000..c52878dd --- /dev/null +++ b/vendor/github.com/gogo/protobuf/sortkeys/sortkeys.go @@ -0,0 +1,99 @@ +// Copyright (c) 2013, Vastech SA (PTY) LTD. All rights reserved. +// http://github.com/gogo/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package sortkeys + +import ( + "sort" +) + +func Strings(l []string) { + sort.Strings(l) +} + +func Float64s(l []float64) { + sort.Float64s(l) +} + +func Float32s(l []float32) { + sort.Sort(Float32Slice(l)) +} + +func Int64s(l []int64) { + sort.Sort(Int64Slice(l)) +} + +func Int32s(l []int32) { + sort.Sort(Int32Slice(l)) +} + +func Uint64s(l []uint64) { + sort.Sort(Uint64Slice(l)) +} + +func Uint32s(l []uint32) { + sort.Sort(Uint32Slice(l)) +} + +func Bools(l []bool) { + sort.Sort(BoolSlice(l)) +} + +type BoolSlice []bool + +func (p BoolSlice) Len() int { return len(p) } +func (p BoolSlice) Less(i, j int) bool { return p[j] } +func (p BoolSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +type Int64Slice []int64 + +func (p Int64Slice) Len() int { return len(p) } +func (p Int64Slice) Less(i, j int) bool { return p[i] < p[j] } +func (p Int64Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +type Int32Slice []int32 + +func (p Int32Slice) Len() int { return len(p) } +func (p Int32Slice) Less(i, j int) bool { return p[i] < p[j] } +func (p Int32Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +type Uint64Slice []uint64 + +func (p Uint64Slice) Len() int { return len(p) } +func (p Uint64Slice) Less(i, j int) bool { return p[i] < p[j] } +func (p Uint64Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +type Uint32Slice []uint32 + +func (p Uint32Slice) Len() int { return len(p) } +func (p Uint32Slice) Less(i, j int) bool { return p[i] < p[j] } +func (p Uint32Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +type Float32Slice []float32 + +func (p Float32Slice) Len() int { return len(p) } +func (p Float32Slice) Less(i, j int) bool { return p[i] < p[j] } +func (p Float32Slice) Swap(i, j int) { p[i], p[j] = p[j], p[i] } diff --git a/vendor/github.com/golang/glog/glog.go b/vendor/github.com/golang/glog/glog.go index 3e63fffd..309727cb 100644 --- a/vendor/github.com/golang/glog/glog.go +++ b/vendor/github.com/golang/glog/glog.go @@ -1046,6 +1046,14 @@ func (v Verbose) Infof(format string, args ...interface{}) { } } +// InfoDepth is equivalent to the global InfoDepth function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) InfoDepth(depth int, args ...interface{}) { + if v { + logging.printDepth(infoLog, depth, args...) + } +} + // Info logs to the INFO log. // Arguments are handled in the manner of fmt.Print; a newline is appended if missing. func Info(args ...interface{}) { diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go new file mode 100644 index 00000000..6308548c --- /dev/null +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go @@ -0,0 +1,799 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package jsonpb provides marshaling and unmarshaling between protocol buffers and JSON. +It follows the specification at https://developers.google.com/protocol-buffers/docs/proto3#json. + +This package produces a different output than the standard "encoding/json" package, +which does not operate correctly on protocol buffers. +*/ +package jsonpb + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "reflect" + "sort" + "strconv" + "strings" + "time" + + "github.com/golang/protobuf/proto" +) + +// Marshaler is a configurable object for converting between +// protocol buffer objects and a JSON representation for them. +type Marshaler struct { + // Whether to render enum values as integers, as opposed to string values. + EnumsAsInts bool + + // Whether to render fields with zero values. + EmitDefaults bool + + // A string to indent each level by. The presence of this field will + // also cause a space to appear between the field separator and + // value, and for newlines to be appear between fields and array + // elements. + Indent string + + // Whether to use the original (.proto) name for fields. + OrigName bool +} + +// Marshal marshals a protocol buffer into JSON. +func (m *Marshaler) Marshal(out io.Writer, pb proto.Message) error { + writer := &errWriter{writer: out} + return m.marshalObject(writer, pb, "", "") +} + +// MarshalToString converts a protocol buffer object to JSON string. +func (m *Marshaler) MarshalToString(pb proto.Message) (string, error) { + var buf bytes.Buffer + if err := m.Marshal(&buf, pb); err != nil { + return "", err + } + return buf.String(), nil +} + +type int32Slice []int32 + +// For sorting extensions ids to ensure stable output. +func (s int32Slice) Len() int { return len(s) } +func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } +func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +type wkt interface { + XXX_WellKnownType() string +} + +// marshalObject writes a struct to the Writer. +func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeURL string) error { + s := reflect.ValueOf(v).Elem() + + // Handle well-known types. + if wkt, ok := v.(wkt); ok { + switch wkt.XXX_WellKnownType() { + case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value", + "Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue": + // "Wrappers use the same representation in JSON + // as the wrapped primitive type, ..." + sprop := proto.GetProperties(s.Type()) + return m.marshalValue(out, sprop.Prop[0], s.Field(0), indent) + case "Any": + // Any is a bit more involved. + return m.marshalAny(out, v, indent) + case "Duration": + // "Generated output always contains 3, 6, or 9 fractional digits, + // depending on required precision." + s, ns := s.Field(0).Int(), s.Field(1).Int() + d := time.Duration(s)*time.Second + time.Duration(ns)*time.Nanosecond + x := fmt.Sprintf("%.9f", d.Seconds()) + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, "000") + out.write(`"`) + out.write(x) + out.write(`s"`) + return out.err + case "Struct": + // Let marshalValue handle the `fields` map. + // TODO: pass the correct Properties if needed. + return m.marshalValue(out, &proto.Properties{}, s.Field(0), indent) + case "Timestamp": + // "RFC 3339, where generated output will always be Z-normalized + // and uses 3, 6 or 9 fractional digits." + s, ns := s.Field(0).Int(), s.Field(1).Int() + t := time.Unix(s, ns).UTC() + // time.RFC3339Nano isn't exactly right (we need to get 3/6/9 fractional digits). + x := t.Format("2006-01-02T15:04:05.000000000") + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, "000") + out.write(`"`) + out.write(x) + out.write(`Z"`) + return out.err + case "Value": + // Value has a single oneof. + kind := s.Field(0) + if kind.IsNil() { + // "absence of any variant indicates an error" + return errors.New("nil Value") + } + // oneof -> *T -> T -> T.F + x := kind.Elem().Elem().Field(0) + // TODO: pass the correct Properties if needed. + return m.marshalValue(out, &proto.Properties{}, x, indent) + } + } + + out.write("{") + if m.Indent != "" { + out.write("\n") + } + + firstField := true + + if typeURL != "" { + if err := m.marshalTypeURL(out, indent, typeURL); err != nil { + return err + } + firstField = false + } + + for i := 0; i < s.NumField(); i++ { + value := s.Field(i) + valueField := s.Type().Field(i) + if strings.HasPrefix(valueField.Name, "XXX_") { + continue + } + + // IsNil will panic on most value kinds. + switch value.Kind() { + case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice: + if value.IsNil() { + continue + } + } + + if !m.EmitDefaults { + switch value.Kind() { + case reflect.Bool: + if !value.Bool() { + continue + } + case reflect.Int32, reflect.Int64: + if value.Int() == 0 { + continue + } + case reflect.Uint32, reflect.Uint64: + if value.Uint() == 0 { + continue + } + case reflect.Float32, reflect.Float64: + if value.Float() == 0 { + continue + } + case reflect.String: + if value.Len() == 0 { + continue + } + } + } + + // Oneof fields need special handling. + if valueField.Tag.Get("protobuf_oneof") != "" { + // value is an interface containing &T{real_value}. + sv := value.Elem().Elem() // interface -> *T -> T + value = sv.Field(0) + valueField = sv.Type().Field(0) + } + prop := jsonProperties(valueField, m.OrigName) + if !firstField { + m.writeSep(out) + } + if err := m.marshalField(out, prop, value, indent); err != nil { + return err + } + firstField = false + } + + // Handle proto2 extensions. + if ep, ok := v.(proto.Message); ok { + extensions := proto.RegisteredExtensions(v) + // Sort extensions for stable output. + ids := make([]int32, 0, len(extensions)) + for id, desc := range extensions { + if !proto.HasExtension(ep, desc) { + continue + } + ids = append(ids, id) + } + sort.Sort(int32Slice(ids)) + for _, id := range ids { + desc := extensions[id] + if desc == nil { + // unknown extension + continue + } + ext, extErr := proto.GetExtension(ep, desc) + if extErr != nil { + return extErr + } + value := reflect.ValueOf(ext) + var prop proto.Properties + prop.Parse(desc.Tag) + prop.JSONName = fmt.Sprintf("[%s]", desc.Name) + if !firstField { + m.writeSep(out) + } + if err := m.marshalField(out, &prop, value, indent); err != nil { + return err + } + firstField = false + } + + } + + if m.Indent != "" { + out.write("\n") + out.write(indent) + } + out.write("}") + return out.err +} + +func (m *Marshaler) writeSep(out *errWriter) { + if m.Indent != "" { + out.write(",\n") + } else { + out.write(",") + } +} + +func (m *Marshaler) marshalAny(out *errWriter, any proto.Message, indent string) error { + // "If the Any contains a value that has a special JSON mapping, + // it will be converted as follows: {"@type": xxx, "value": yyy}. + // Otherwise, the value will be converted into a JSON object, + // and the "@type" field will be inserted to indicate the actual data type." + v := reflect.ValueOf(any).Elem() + turl := v.Field(0).String() + val := v.Field(1).Bytes() + + // Only the part of type_url after the last slash is relevant. + mname := turl + if slash := strings.LastIndex(mname, "/"); slash >= 0 { + mname = mname[slash+1:] + } + mt := proto.MessageType(mname) + if mt == nil { + return fmt.Errorf("unknown message type %q", mname) + } + msg := reflect.New(mt.Elem()).Interface().(proto.Message) + if err := proto.Unmarshal(val, msg); err != nil { + return err + } + + if _, ok := msg.(wkt); ok { + out.write("{") + if m.Indent != "" { + out.write("\n") + } + if err := m.marshalTypeURL(out, indent, turl); err != nil { + return err + } + m.writeSep(out) + if m.Indent != "" { + out.write(indent) + out.write(m.Indent) + out.write(`"value": `) + } else { + out.write(`"value":`) + } + if err := m.marshalObject(out, msg, indent+m.Indent, ""); err != nil { + return err + } + if m.Indent != "" { + out.write("\n") + out.write(indent) + } + out.write("}") + return out.err + } + + return m.marshalObject(out, msg, indent, turl) +} + +func (m *Marshaler) marshalTypeURL(out *errWriter, indent, typeURL string) error { + if m.Indent != "" { + out.write(indent) + out.write(m.Indent) + } + out.write(`"@type":`) + if m.Indent != "" { + out.write(" ") + } + b, err := json.Marshal(typeURL) + if err != nil { + return err + } + out.write(string(b)) + return out.err +} + +// marshalField writes field description and value to the Writer. +func (m *Marshaler) marshalField(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error { + if m.Indent != "" { + out.write(indent) + out.write(m.Indent) + } + out.write(`"`) + out.write(prop.JSONName) + out.write(`":`) + if m.Indent != "" { + out.write(" ") + } + if err := m.marshalValue(out, prop, v, indent); err != nil { + return err + } + return nil +} + +// marshalValue writes the value to the Writer. +func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error { + + var err error + v = reflect.Indirect(v) + + // Handle repeated elements. + if v.Kind() == reflect.Slice && v.Type().Elem().Kind() != reflect.Uint8 { + out.write("[") + comma := "" + for i := 0; i < v.Len(); i++ { + sliceVal := v.Index(i) + out.write(comma) + if m.Indent != "" { + out.write("\n") + out.write(indent) + out.write(m.Indent) + out.write(m.Indent) + } + if err := m.marshalValue(out, prop, sliceVal, indent+m.Indent); err != nil { + return err + } + comma = "," + } + if m.Indent != "" { + out.write("\n") + out.write(indent) + out.write(m.Indent) + } + out.write("]") + return out.err + } + + // Handle well-known types. + // Most are handled up in marshalObject (because 99% are messages). + type wkt interface { + XXX_WellKnownType() string + } + if wkt, ok := v.Interface().(wkt); ok { + switch wkt.XXX_WellKnownType() { + case "NullValue": + out.write("null") + return out.err + } + } + + // Handle enumerations. + if !m.EnumsAsInts && prop.Enum != "" { + // Unknown enum values will are stringified by the proto library as their + // value. Such values should _not_ be quoted or they will be interpreted + // as an enum string instead of their value. + enumStr := v.Interface().(fmt.Stringer).String() + var valStr string + if v.Kind() == reflect.Ptr { + valStr = strconv.Itoa(int(v.Elem().Int())) + } else { + valStr = strconv.Itoa(int(v.Int())) + } + isKnownEnum := enumStr != valStr + if isKnownEnum { + out.write(`"`) + } + out.write(enumStr) + if isKnownEnum { + out.write(`"`) + } + return out.err + } + + // Handle nested messages. + if v.Kind() == reflect.Struct { + return m.marshalObject(out, v.Addr().Interface().(proto.Message), indent+m.Indent, "") + } + + // Handle maps. + // Since Go randomizes map iteration, we sort keys for stable output. + if v.Kind() == reflect.Map { + out.write(`{`) + keys := v.MapKeys() + sort.Sort(mapKeys(keys)) + for i, k := range keys { + if i > 0 { + out.write(`,`) + } + if m.Indent != "" { + out.write("\n") + out.write(indent) + out.write(m.Indent) + out.write(m.Indent) + } + + b, err := json.Marshal(k.Interface()) + if err != nil { + return err + } + s := string(b) + + // If the JSON is not a string value, encode it again to make it one. + if !strings.HasPrefix(s, `"`) { + b, err := json.Marshal(s) + if err != nil { + return err + } + s = string(b) + } + + out.write(s) + out.write(`:`) + if m.Indent != "" { + out.write(` `) + } + + if err := m.marshalValue(out, prop, v.MapIndex(k), indent+m.Indent); err != nil { + return err + } + } + if m.Indent != "" { + out.write("\n") + out.write(indent) + out.write(m.Indent) + } + out.write(`}`) + return out.err + } + + // Default handling defers to the encoding/json library. + b, err := json.Marshal(v.Interface()) + if err != nil { + return err + } + needToQuote := string(b[0]) != `"` && (v.Kind() == reflect.Int64 || v.Kind() == reflect.Uint64) + if needToQuote { + out.write(`"`) + } + out.write(string(b)) + if needToQuote { + out.write(`"`) + } + return out.err +} + +// UnmarshalNext unmarshals the next protocol buffer from a JSON object stream. +// This function is lenient and will decode any options permutations of the +// related Marshaler. +func UnmarshalNext(dec *json.Decoder, pb proto.Message) error { + inputValue := json.RawMessage{} + if err := dec.Decode(&inputValue); err != nil { + return err + } + return unmarshalValue(reflect.ValueOf(pb).Elem(), inputValue, nil) +} + +// Unmarshal unmarshals a JSON object stream into a protocol +// buffer. This function is lenient and will decode any options +// permutations of the related Marshaler. +func Unmarshal(r io.Reader, pb proto.Message) error { + dec := json.NewDecoder(r) + return UnmarshalNext(dec, pb) +} + +// UnmarshalString will populate the fields of a protocol buffer based +// on a JSON string. This function is lenient and will decode any options +// permutations of the related Marshaler. +func UnmarshalString(str string, pb proto.Message) error { + return Unmarshal(strings.NewReader(str), pb) +} + +// unmarshalValue converts/copies a value into the target. +// prop may be nil. +func unmarshalValue(target reflect.Value, inputValue json.RawMessage, prop *proto.Properties) error { + targetType := target.Type() + + // Allocate memory for pointer fields. + if targetType.Kind() == reflect.Ptr { + target.Set(reflect.New(targetType.Elem())) + return unmarshalValue(target.Elem(), inputValue, prop) + } + + // Handle well-known types. + type wkt interface { + XXX_WellKnownType() string + } + if wkt, ok := target.Addr().Interface().(wkt); ok { + switch wkt.XXX_WellKnownType() { + case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value", + "Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue": + // "Wrappers use the same representation in JSON + // as the wrapped primitive type, except that null is allowed." + // encoding/json will turn JSON `null` into Go `nil`, + // so we don't have to do any extra work. + return unmarshalValue(target.Field(0), inputValue, prop) + case "Any": + return fmt.Errorf("unmarshaling Any not supported yet") + case "Duration": + unq, err := strconv.Unquote(string(inputValue)) + if err != nil { + return err + } + d, err := time.ParseDuration(unq) + if err != nil { + return fmt.Errorf("bad Duration: %v", err) + } + ns := d.Nanoseconds() + s := ns / 1e9 + ns %= 1e9 + target.Field(0).SetInt(s) + target.Field(1).SetInt(ns) + return nil + case "Timestamp": + unq, err := strconv.Unquote(string(inputValue)) + if err != nil { + return err + } + t, err := time.Parse(time.RFC3339Nano, unq) + if err != nil { + return fmt.Errorf("bad Timestamp: %v", err) + } + ns := t.UnixNano() + s := ns / 1e9 + ns %= 1e9 + target.Field(0).SetInt(s) + target.Field(1).SetInt(ns) + return nil + } + } + + // Handle enums, which have an underlying type of int32, + // and may appear as strings. + // The case of an enum appearing as a number is handled + // at the bottom of this function. + if inputValue[0] == '"' && prop != nil && prop.Enum != "" { + vmap := proto.EnumValueMap(prop.Enum) + // Don't need to do unquoting; valid enum names + // are from a limited character set. + s := inputValue[1 : len(inputValue)-1] + n, ok := vmap[string(s)] + if !ok { + return fmt.Errorf("unknown value %q for enum %s", s, prop.Enum) + } + if target.Kind() == reflect.Ptr { // proto2 + target.Set(reflect.New(targetType.Elem())) + target = target.Elem() + } + target.SetInt(int64(n)) + return nil + } + + // Handle nested messages. + if targetType.Kind() == reflect.Struct { + var jsonFields map[string]json.RawMessage + if err := json.Unmarshal(inputValue, &jsonFields); err != nil { + return err + } + + consumeField := func(prop *proto.Properties) (json.RawMessage, bool) { + // Be liberal in what names we accept; both orig_name and camelName are okay. + fieldNames := acceptedJSONFieldNames(prop) + + vOrig, okOrig := jsonFields[fieldNames.orig] + vCamel, okCamel := jsonFields[fieldNames.camel] + if !okOrig && !okCamel { + return nil, false + } + // If, for some reason, both are present in the data, favour the camelName. + var raw json.RawMessage + if okOrig { + raw = vOrig + delete(jsonFields, fieldNames.orig) + } + if okCamel { + raw = vCamel + delete(jsonFields, fieldNames.camel) + } + return raw, true + } + + sprops := proto.GetProperties(targetType) + for i := 0; i < target.NumField(); i++ { + ft := target.Type().Field(i) + if strings.HasPrefix(ft.Name, "XXX_") { + continue + } + + valueForField, ok := consumeField(sprops.Prop[i]) + if !ok { + continue + } + + if err := unmarshalValue(target.Field(i), valueForField, sprops.Prop[i]); err != nil { + return err + } + } + // Check for any oneof fields. + if len(jsonFields) > 0 { + for _, oop := range sprops.OneofTypes { + raw, ok := consumeField(oop.Prop) + if !ok { + continue + } + nv := reflect.New(oop.Type.Elem()) + target.Field(oop.Field).Set(nv) + if err := unmarshalValue(nv.Elem().Field(0), raw, oop.Prop); err != nil { + return err + } + } + } + if len(jsonFields) > 0 { + // Pick any field to be the scapegoat. + var f string + for fname := range jsonFields { + f = fname + break + } + return fmt.Errorf("unknown field %q in %v", f, targetType) + } + return nil + } + + // Handle arrays (which aren't encoded bytes) + if targetType.Kind() == reflect.Slice && targetType.Elem().Kind() != reflect.Uint8 { + var slc []json.RawMessage + if err := json.Unmarshal(inputValue, &slc); err != nil { + return err + } + len := len(slc) + target.Set(reflect.MakeSlice(targetType, len, len)) + for i := 0; i < len; i++ { + if err := unmarshalValue(target.Index(i), slc[i], prop); err != nil { + return err + } + } + return nil + } + + // Handle maps (whose keys are always strings) + if targetType.Kind() == reflect.Map { + var mp map[string]json.RawMessage + if err := json.Unmarshal(inputValue, &mp); err != nil { + return err + } + target.Set(reflect.MakeMap(targetType)) + var keyprop, valprop *proto.Properties + if prop != nil { + // These could still be nil if the protobuf metadata is broken somehow. + // TODO: This won't work because the fields are unexported. + // We should probably just reparse them. + //keyprop, valprop = prop.mkeyprop, prop.mvalprop + } + for ks, raw := range mp { + // Unmarshal map key. The core json library already decoded the key into a + // string, so we handle that specially. Other types were quoted post-serialization. + var k reflect.Value + if targetType.Key().Kind() == reflect.String { + k = reflect.ValueOf(ks) + } else { + k = reflect.New(targetType.Key()).Elem() + if err := unmarshalValue(k, json.RawMessage(ks), keyprop); err != nil { + return err + } + } + + // Unmarshal map value. + v := reflect.New(targetType.Elem()).Elem() + if err := unmarshalValue(v, raw, valprop); err != nil { + return err + } + target.SetMapIndex(k, v) + } + return nil + } + + // 64-bit integers can be encoded as strings. In this case we drop + // the quotes and proceed as normal. + isNum := targetType.Kind() == reflect.Int64 || targetType.Kind() == reflect.Uint64 + if isNum && strings.HasPrefix(string(inputValue), `"`) { + inputValue = inputValue[1 : len(inputValue)-1] + } + + // Use the encoding/json for parsing other value types. + return json.Unmarshal(inputValue, target.Addr().Interface()) +} + +// jsonProperties returns parsed proto.Properties for the field and corrects JSONName attribute. +func jsonProperties(f reflect.StructField, origName bool) *proto.Properties { + var prop proto.Properties + prop.Init(f.Type, f.Name, f.Tag.Get("protobuf"), &f) + if origName || prop.JSONName == "" { + prop.JSONName = prop.OrigName + } + return &prop +} + +type fieldNames struct { + orig, camel string +} + +func acceptedJSONFieldNames(prop *proto.Properties) fieldNames { + opts := fieldNames{orig: prop.OrigName, camel: prop.OrigName} + if prop.JSONName != "" { + opts.camel = prop.JSONName + } + return opts +} + +// Writer wrapper inspired by https://blog.golang.org/errors-are-values +type errWriter struct { + writer io.Writer + err error +} + +func (w *errWriter) write(str string) { + if w.err != nil { + return + } + _, w.err = w.writer.Write([]byte(str)) +} + +// Map fields may have key types of non-float scalars, strings and enums. +// The easiest way to sort them in some deterministic order is to use fmt. +// If this turns out to be inefficient we can always consider other options, +// such as doing a Schwartzian transform. +type mapKeys []reflect.Value + +func (s mapKeys) Len() int { return len(s) } +func (s mapKeys) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s mapKeys) Less(i, j int) bool { + return fmt.Sprint(s[i].Interface()) < fmt.Sprint(s[j].Interface()) +} diff --git a/vendor/github.com/golang/protobuf/proto/Makefile b/vendor/github.com/golang/protobuf/proto/Makefile index f1f06564..e2e0651a 100644 --- a/vendor/github.com/golang/protobuf/proto/Makefile +++ b/vendor/github.com/golang/protobuf/proto/Makefile @@ -39,5 +39,5 @@ test: install generate-test-pbs generate-test-pbs: make install make -C testdata - protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata:. proto3_proto/proto3.proto + protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto make diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go index e98ddec9..e392575b 100644 --- a/vendor/github.com/golang/protobuf/proto/clone.go +++ b/vendor/github.com/golang/protobuf/proto/clone.go @@ -84,9 +84,15 @@ func mergeStruct(out, in reflect.Value) { mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) } - if emIn, ok := in.Addr().Interface().(extendableProto); ok { - emOut := out.Addr().Interface().(extendableProto) - mergeExtension(emOut.ExtensionMap(), emIn.ExtensionMap()) + if emIn, ok := extendable(in.Addr().Interface()); ok { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } } uf := in.FieldByName("XXX_unrecognized") diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go index 5810782f..07288a25 100644 --- a/vendor/github.com/golang/protobuf/proto/decode.go +++ b/vendor/github.com/golang/protobuf/proto/decode.go @@ -390,11 +390,12 @@ func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group if !ok { // Maybe it's an extension? if prop.extendable { - if e := structPointer_Interface(base, st).(extendableProto); isExtensionField(e, int32(tag)) { + if e, _ := extendable(structPointer_Interface(base, st)); isExtensionField(e, int32(tag)) { if err = o.skip(st, tag, wire); err == nil { - ext := e.ExtensionMap()[int32(tag)] // may be missing + extmap := e.extensionsWrite() + ext := extmap[int32(tag)] // may be missing ext.enc = append(ext.enc, o.buf[oi:o.index]...) - e.ExtensionMap()[int32(tag)] = ext + extmap[int32(tag)] = ext } continue } @@ -768,10 +769,11 @@ func (o *Buffer) dec_new_map(p *Properties, base structPointer) error { } } keyelem, valelem := keyptr.Elem(), valptr.Elem() - if !keyelem.IsValid() || !valelem.IsValid() { - // We did not decode the key or the value in the map entry. - // Either way, it's an invalid map entry. - return fmt.Errorf("proto: bad map data: missing key/val") + if !keyelem.IsValid() { + keyelem = reflect.Zero(p.mtype.Key()) + } + if !valelem.IsValid() { + valelem = reflect.Zero(p.mtype.Elem()) } v.SetMapIndex(keyelem, valelem) diff --git a/vendor/github.com/golang/protobuf/proto/encode.go b/vendor/github.com/golang/protobuf/proto/encode.go index 231b0740..8c1b8fd1 100644 --- a/vendor/github.com/golang/protobuf/proto/encode.go +++ b/vendor/github.com/golang/protobuf/proto/encode.go @@ -64,8 +64,16 @@ var ( // a struct with a repeated field containing a nil element. errRepeatedHasNil = errors.New("proto: repeated field has nil element") + // errOneofHasNil is the error returned if Marshal is called with + // a struct with a oneof field containing a nil element. + errOneofHasNil = errors.New("proto: oneof field has nil value") + // ErrNil is the error returned if Marshal is called with nil. ErrNil = errors.New("proto: Marshal called with nil") + + // ErrTooLarge is the error returned if Marshal is called with a + // message that encodes to >2GB. + ErrTooLarge = errors.New("proto: message encodes to over 2 GB") ) // The fundamental encoders that put bytes on the wire. @@ -74,6 +82,10 @@ var ( const maxVarintBytes = 10 // maximum length of a varint +// maxMarshalSize is the largest allowed size of an encoded protobuf, +// since C++ and Java use signed int32s for the size. +const maxMarshalSize = 1<<31 - 1 + // EncodeVarint returns the varint encoding of x. // This is the format for the // int32, int64, uint32, uint64, bool, and enum @@ -273,6 +285,9 @@ func (p *Buffer) Marshal(pb Message) error { stats.Encode++ } + if len(p.buf) > maxMarshalSize { + return ErrTooLarge + } return err } @@ -1058,10 +1073,25 @@ func size_slice_struct_group(p *Properties, base structPointer) (n int) { // Encode an extension map. func (o *Buffer) enc_map(p *Properties, base structPointer) error { - v := *structPointer_ExtMap(base, p.field) - if err := encodeExtensionMap(v); err != nil { + exts := structPointer_ExtMap(base, p.field) + if err := encodeExtensionsMap(*exts); err != nil { return err } + + return o.enc_map_body(*exts) +} + +func (o *Buffer) enc_exts(p *Properties, base structPointer) error { + exts := structPointer_Extensions(base, p.field) + if err := encodeExtensions(exts); err != nil { + return err + } + v, _ := exts.extensionsRead() + + return o.enc_map_body(v) +} + +func (o *Buffer) enc_map_body(v map[int32]Extension) error { // Fast-path for common cases: zero or one extensions. if len(v) <= 1 { for _, e := range v { @@ -1084,8 +1114,13 @@ func (o *Buffer) enc_map(p *Properties, base structPointer) error { } func size_map(p *Properties, base structPointer) int { - v := *structPointer_ExtMap(base, p.field) - return sizeExtensionMap(v) + v := structPointer_ExtMap(base, p.field) + return extensionsMapSize(*v) +} + +func size_exts(p *Properties, base structPointer) int { + v := structPointer_Extensions(base, p.field) + return extensionsSize(v) } // Encode a map field. @@ -1114,7 +1149,7 @@ func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil { return err } - if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil { + if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil && err != ErrNil { return err } return nil @@ -1124,11 +1159,6 @@ func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { for _, key := range v.MapKeys() { val := v.MapIndex(key) - // The only illegal map entry values are nil message pointers. - if val.Kind() == reflect.Ptr && val.IsNil() { - return errors.New("proto: map has nil element") - } - keycopy.Set(key) valcopy.Set(val) @@ -1216,13 +1246,18 @@ func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error { return err } } + if len(o.buf) > maxMarshalSize { + return ErrTooLarge + } } } // Do oneof fields. if prop.oneofMarshaler != nil { m := structPointer_Interface(base, prop.stype).(Message) - if err := prop.oneofMarshaler(m, o); err != nil { + if err := prop.oneofMarshaler(m, o); err == ErrNil { + return errOneofHasNil + } else if err != nil { return err } } @@ -1230,6 +1265,9 @@ func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error { // Add unrecognized fields at the end. if prop.unrecField.IsValid() { v := *structPointer_Bytes(base, prop.unrecField) + if len(o.buf)+len(v) > maxMarshalSize { + return ErrTooLarge + } if len(v) > 0 { o.buf = append(o.buf, v...) } diff --git a/vendor/github.com/golang/protobuf/proto/equal.go b/vendor/github.com/golang/protobuf/proto/equal.go index f5db1def..8b16f951 100644 --- a/vendor/github.com/golang/protobuf/proto/equal.go +++ b/vendor/github.com/golang/protobuf/proto/equal.go @@ -121,9 +121,16 @@ func equalStruct(v1, v2 reflect.Value) bool { } } + if em1 := v1.FieldByName("XXX_InternalExtensions"); em1.IsValid() { + em2 := v2.FieldByName("XXX_InternalExtensions") + if !equalExtensions(v1.Type(), em1.Interface().(XXX_InternalExtensions), em2.Interface().(XXX_InternalExtensions)) { + return false + } + } + if em1 := v1.FieldByName("XXX_extensions"); em1.IsValid() { em2 := v2.FieldByName("XXX_extensions") - if !equalExtensions(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { + if !equalExtMap(v1.Type(), em1.Interface().(map[int32]Extension), em2.Interface().(map[int32]Extension)) { return false } } @@ -184,6 +191,13 @@ func equalAny(v1, v2 reflect.Value, prop *Properties) bool { } return true case reflect.Ptr: + // Maps may have nil values in them, so check for nil. + if v1.IsNil() && v2.IsNil() { + return true + } + if v1.IsNil() != v2.IsNil() { + return false + } return equalAny(v1.Elem(), v2.Elem(), prop) case reflect.Slice: if v1.Type().Elem().Kind() == reflect.Uint8 { @@ -223,8 +237,14 @@ func equalAny(v1, v2 reflect.Value, prop *Properties) bool { } // base is the struct type that the extensions are based on. -// em1 and em2 are extension maps. -func equalExtensions(base reflect.Type, em1, em2 map[int32]Extension) bool { +// x1 and x2 are InternalExtensions. +func equalExtensions(base reflect.Type, x1, x2 XXX_InternalExtensions) bool { + em1, _ := x1.extensionsRead() + em2, _ := x2.extensionsRead() + return equalExtMap(base, em1, em2) +} + +func equalExtMap(base reflect.Type, em1, em2 map[int32]Extension) bool { if len(em1) != len(em2) { return false } diff --git a/vendor/github.com/golang/protobuf/proto/extensions.go b/vendor/github.com/golang/protobuf/proto/extensions.go index 054f4f1d..9f484f53 100644 --- a/vendor/github.com/golang/protobuf/proto/extensions.go +++ b/vendor/github.com/golang/protobuf/proto/extensions.go @@ -52,14 +52,99 @@ type ExtensionRange struct { Start, End int32 // both inclusive } -// extendableProto is an interface implemented by any protocol buffer that may be extended. +// extendableProto is an interface implemented by any protocol buffer generated by the current +// proto compiler that may be extended. type extendableProto interface { + Message + ExtensionRangeArray() []ExtensionRange + extensionsWrite() map[int32]Extension + extensionsRead() (map[int32]Extension, sync.Locker) +} + +// extendableProtoV1 is an interface implemented by a protocol buffer generated by the previous +// version of the proto compiler that may be extended. +type extendableProtoV1 interface { Message ExtensionRangeArray() []ExtensionRange ExtensionMap() map[int32]Extension } +// extensionAdapter is a wrapper around extendableProtoV1 that implements extendableProto. +type extensionAdapter struct { + extendableProtoV1 +} + +func (e extensionAdapter) extensionsWrite() map[int32]Extension { + return e.ExtensionMap() +} + +func (e extensionAdapter) extensionsRead() (map[int32]Extension, sync.Locker) { + return e.ExtensionMap(), notLocker{} +} + +// notLocker is a sync.Locker whose Lock and Unlock methods are nops. +type notLocker struct{} + +func (n notLocker) Lock() {} +func (n notLocker) Unlock() {} + +// extendable returns the extendableProto interface for the given generated proto message. +// If the proto message has the old extension format, it returns a wrapper that implements +// the extendableProto interface. +func extendable(p interface{}) (extendableProto, bool) { + if ep, ok := p.(extendableProto); ok { + return ep, ok + } + if ep, ok := p.(extendableProtoV1); ok { + return extensionAdapter{ep}, ok + } + return nil, false +} + +// XXX_InternalExtensions is an internal representation of proto extensions. +// +// Each generated message struct type embeds an anonymous XXX_InternalExtensions field, +// thus gaining the unexported 'extensions' method, which can be called only from the proto package. +// +// The methods of XXX_InternalExtensions are not concurrency safe in general, +// but calls to logically read-only methods such as has and get may be executed concurrently. +type XXX_InternalExtensions struct { + // The struct must be indirect so that if a user inadvertently copies a + // generated message and its embedded XXX_InternalExtensions, they + // avoid the mayhem of a copied mutex. + // + // The mutex serializes all logically read-only operations to p.extensionMap. + // It is up to the client to ensure that write operations to p.extensionMap are + // mutually exclusive with other accesses. + p *struct { + mu sync.Mutex + extensionMap map[int32]Extension + } +} + +// extensionsWrite returns the extension map, creating it on first use. +func (e *XXX_InternalExtensions) extensionsWrite() map[int32]Extension { + if e.p == nil { + e.p = new(struct { + mu sync.Mutex + extensionMap map[int32]Extension + }) + e.p.extensionMap = make(map[int32]Extension) + } + return e.p.extensionMap +} + +// extensionsRead returns the extensions map for read-only use. It may be nil. +// The caller must hold the returned mutex's lock when accessing Elements within the map. +func (e *XXX_InternalExtensions) extensionsRead() (map[int32]Extension, sync.Locker) { + if e.p == nil { + return nil, nil + } + return e.p.extensionMap, &e.p.mu +} + var extendableProtoType = reflect.TypeOf((*extendableProto)(nil)).Elem() +var extendableProtoV1Type = reflect.TypeOf((*extendableProtoV1)(nil)).Elem() // ExtensionDesc represents an extension specification. // Used in generated code from the protocol compiler. @@ -92,8 +177,13 @@ type Extension struct { } // SetRawExtension is for testing only. -func SetRawExtension(base extendableProto, id int32, b []byte) { - base.ExtensionMap()[id] = Extension{enc: b} +func SetRawExtension(base Message, id int32, b []byte) { + epb, ok := extendable(base) + if !ok { + return + } + extmap := epb.extensionsWrite() + extmap[id] = Extension{enc: b} } // isExtensionField returns true iff the given field number is in an extension range. @@ -108,8 +198,12 @@ func isExtensionField(pb extendableProto, field int32) bool { // checkExtensionTypes checks that the given extension is valid for pb. func checkExtensionTypes(pb extendableProto, extension *ExtensionDesc) error { + var pbi interface{} = pb // Check the extended type. - if a, b := reflect.TypeOf(pb), reflect.TypeOf(extension.ExtendedType); a != b { + if ea, ok := pbi.(extensionAdapter); ok { + pbi = ea.extendableProtoV1 + } + if a, b := reflect.TypeOf(pbi), reflect.TypeOf(extension.ExtendedType); a != b { return errors.New("proto: bad extended type; " + b.String() + " does not extend " + a.String()) } // Check the range. @@ -155,8 +249,19 @@ func extensionProperties(ed *ExtensionDesc) *Properties { return prop } -// encodeExtensionMap encodes any unmarshaled (unencoded) extensions in m. -func encodeExtensionMap(m map[int32]Extension) error { +// encode encodes any unmarshaled (unencoded) extensions in e. +func encodeExtensions(e *XXX_InternalExtensions) error { + m, mu := e.extensionsRead() + if m == nil { + return nil // fast path + } + mu.Lock() + defer mu.Unlock() + return encodeExtensionsMap(m) +} + +// encode encodes any unmarshaled (unencoded) extensions in e. +func encodeExtensionsMap(m map[int32]Extension) error { for k, e := range m { if e.value == nil || e.desc == nil { // Extension is only in its encoded form. @@ -184,7 +289,17 @@ func encodeExtensionMap(m map[int32]Extension) error { return nil } -func sizeExtensionMap(m map[int32]Extension) (n int) { +func extensionsSize(e *XXX_InternalExtensions) (n int) { + m, mu := e.extensionsRead() + if m == nil { + return 0 + } + mu.Lock() + defer mu.Unlock() + return extensionsMapSize(m) +} + +func extensionsMapSize(m map[int32]Extension) (n int) { for _, e := range m { if e.value == nil || e.desc == nil { // Extension is only in its encoded form. @@ -209,26 +324,51 @@ func sizeExtensionMap(m map[int32]Extension) (n int) { } // HasExtension returns whether the given extension is present in pb. -func HasExtension(pb extendableProto, extension *ExtensionDesc) bool { +func HasExtension(pb Message, extension *ExtensionDesc) bool { // TODO: Check types, field numbers, etc.? - _, ok := pb.ExtensionMap()[extension.Field] + epb, ok := extendable(pb) + if !ok { + return false + } + extmap, mu := epb.extensionsRead() + if extmap == nil { + return false + } + mu.Lock() + _, ok = extmap[extension.Field] + mu.Unlock() return ok } // ClearExtension removes the given extension from pb. -func ClearExtension(pb extendableProto, extension *ExtensionDesc) { +func ClearExtension(pb Message, extension *ExtensionDesc) { + epb, ok := extendable(pb) + if !ok { + return + } // TODO: Check types, field numbers, etc.? - delete(pb.ExtensionMap(), extension.Field) + extmap := epb.extensionsWrite() + delete(extmap, extension.Field) } // GetExtension parses and returns the given extension of pb. // If the extension is not present and has no default value it returns ErrMissingExtension. -func GetExtension(pb extendableProto, extension *ExtensionDesc) (interface{}, error) { - if err := checkExtensionTypes(pb, extension); err != nil { +func GetExtension(pb Message, extension *ExtensionDesc) (interface{}, error) { + epb, ok := extendable(pb) + if !ok { + return nil, errors.New("proto: not an extendable proto") + } + + if err := checkExtensionTypes(epb, extension); err != nil { return nil, err } - emap := pb.ExtensionMap() + emap, mu := epb.extensionsRead() + if emap == nil { + return defaultExtensionValue(extension) + } + mu.Lock() + defer mu.Unlock() e, ok := emap[extension.Field] if !ok { // defaultExtensionValue returns the default value or @@ -332,10 +472,9 @@ func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { // GetExtensions returns a slice of the extensions present in pb that are also listed in es. // The returned slice has the same length as es; missing extensions will appear as nil elements. func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { - epb, ok := pb.(extendableProto) + epb, ok := extendable(pb) if !ok { - err = errors.New("proto: not an extendable proto") - return + return nil, errors.New("proto: not an extendable proto") } extensions = make([]interface{}, len(es)) for i, e := range es { @@ -351,8 +490,12 @@ func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, e } // SetExtension sets the specified extension of pb to the specified value. -func SetExtension(pb extendableProto, extension *ExtensionDesc, value interface{}) error { - if err := checkExtensionTypes(pb, extension); err != nil { +func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { + epb, ok := extendable(pb) + if !ok { + return errors.New("proto: not an extendable proto") + } + if err := checkExtensionTypes(epb, extension); err != nil { return err } typ := reflect.TypeOf(extension.ExtensionType) @@ -368,10 +511,23 @@ func SetExtension(pb extendableProto, extension *ExtensionDesc, value interface{ return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) } - pb.ExtensionMap()[extension.Field] = Extension{desc: extension, value: value} + extmap := epb.extensionsWrite() + extmap[extension.Field] = Extension{desc: extension, value: value} return nil } +// ClearAllExtensions clears all extensions from pb. +func ClearAllExtensions(pb Message) { + epb, ok := extendable(pb) + if !ok { + return + } + m := epb.extensionsWrite() + for k := range m { + delete(m, k) + } +} + // A global registry of extensions. // The generated code will register the generated descriptors by calling RegisterExtension. diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go index 0de8f8df..170b8e87 100644 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ b/vendor/github.com/golang/protobuf/proto/lib.go @@ -889,6 +889,10 @@ func isProto3Zero(v reflect.Value) bool { return false } +// ProtoPackageIsVersion2 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const ProtoPackageIsVersion2 = true + // ProtoPackageIsVersion1 is referenced from generated protocol buffer files // to assert that that code is compatible with this version of the proto package. const ProtoPackageIsVersion1 = true diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go index e25e01e6..fd982dec 100644 --- a/vendor/github.com/golang/protobuf/proto/message_set.go +++ b/vendor/github.com/golang/protobuf/proto/message_set.go @@ -149,9 +149,21 @@ func skipVarint(buf []byte) []byte { // MarshalMessageSet encodes the extension map represented by m in the message set wire format. // It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { - if err := encodeExtensionMap(m); err != nil { - return nil, err +func MarshalMessageSet(exts interface{}) ([]byte, error) { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + if err := encodeExtensions(exts); err != nil { + return nil, err + } + m, _ = exts.extensionsRead() + case map[int32]Extension: + if err := encodeExtensionsMap(exts); err != nil { + return nil, err + } + m = exts + default: + return nil, errors.New("proto: not an extension map") } // Sort extension IDs to provide a deterministic encoding. @@ -178,7 +190,17 @@ func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { // UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. // It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSet(buf []byte, m map[int32]Extension) error { +func UnmarshalMessageSet(buf []byte, exts interface{}) error { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m = exts.extensionsWrite() + case map[int32]Extension: + m = exts + default: + return errors.New("proto: not an extension map") + } + ms := new(messageSet) if err := Unmarshal(buf, ms); err != nil { return err @@ -209,7 +231,16 @@ func UnmarshalMessageSet(buf []byte, m map[int32]Extension) error { // MarshalMessageSetJSON encodes the extension map represented by m in JSON format. // It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSetJSON(m map[int32]Extension) ([]byte, error) { +func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m, _ = exts.extensionsRead() + case map[int32]Extension: + m = exts + default: + return nil, errors.New("proto: not an extension map") + } var b bytes.Buffer b.WriteByte('{') @@ -252,7 +283,7 @@ func MarshalMessageSetJSON(m map[int32]Extension) ([]byte, error) { // UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. // It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSetJSON(buf []byte, m map[int32]Extension) error { +func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { // Common-case fast path. if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { return nil diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go index 749919d2..fb512e2e 100644 --- a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go +++ b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build appengine +// +build appengine js // This file contains an implementation of proto field accesses using package reflect. // It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can @@ -139,6 +139,11 @@ func structPointer_StringSlice(p structPointer, f field) *[]string { return structPointer_ifield(p, f).(*[]string) } +// Extensions returns the address of an extension map field in the struct. +func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { + return structPointer_ifield(p, f).(*XXX_InternalExtensions) +} + // ExtMap returns the address of an extension map field in the struct. func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { return structPointer_ifield(p, f).(*map[int32]Extension) diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go index e9be0fe9..6b5567d4 100644 --- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go +++ b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build !appengine +// +build !appengine,!js // This file contains the implementation of the proto field accesses using package unsafe. @@ -126,6 +126,10 @@ func structPointer_StringSlice(p structPointer, f field) *[]string { } // ExtMap returns the address of an extension map field in the struct. +func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { + return (*XXX_InternalExtensions)(unsafe.Pointer(uintptr(p) + uintptr(f))) +} + func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { return (*map[int32]Extension)(unsafe.Pointer(uintptr(p) + uintptr(f))) } diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go index d4531c05..69ddda8d 100644 --- a/vendor/github.com/golang/protobuf/proto/properties.go +++ b/vendor/github.com/golang/protobuf/proto/properties.go @@ -173,6 +173,7 @@ func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order type Properties struct { Name string // name of the field, for error messages OrigName string // original name before protocol compiler (always set) + JSONName string // name to use for JSON; determined by protoc Wire string WireType int Tag int @@ -229,8 +230,9 @@ func (p *Properties) String() string { if p.Packed { s += ",packed" } - if p.OrigName != p.Name { - s += ",name=" + p.OrigName + s += ",name=" + p.OrigName + if p.JSONName != p.OrigName { + s += ",json=" + p.JSONName } if p.proto3 { s += ",proto3" @@ -310,6 +312,8 @@ func (p *Properties) Parse(s string) { p.Packed = true case strings.HasPrefix(f, "name="): p.OrigName = f[5:] + case strings.HasPrefix(f, "json="): + p.JSONName = f[5:] case strings.HasPrefix(f, "enum="): p.Enum = f[5:] case f == "proto3": @@ -469,17 +473,13 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock p.dec = (*Buffer).dec_slice_int64 p.packedDec = (*Buffer).dec_slice_packed_int64 case reflect.Uint8: - p.enc = (*Buffer).enc_slice_byte p.dec = (*Buffer).dec_slice_byte - p.size = size_slice_byte - // This is a []byte, which is either a bytes field, - // or the value of a map field. In the latter case, - // we always encode an empty []byte, so we should not - // use the proto3 enc/size funcs. - // f == nil iff this is the key/value of a map field. - if p.proto3 && f != nil { + if p.proto3 { p.enc = (*Buffer).enc_proto3_slice_byte p.size = size_proto3_slice_byte + } else { + p.enc = (*Buffer).enc_slice_byte + p.size = size_slice_byte } case reflect.Float32, reflect.Float64: switch t2.Bits() { @@ -678,7 +678,8 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { propertiesMap[t] = prop // build properties - prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) + prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) || + reflect.PtrTo(t).Implements(extendableProtoV1Type) prop.unrecField = invalidField prop.Prop = make([]*Properties, t.NumField()) prop.order = make([]int, t.NumField()) @@ -689,15 +690,22 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { name := f.Name p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) - if f.Name == "XXX_extensions" { // special case + if f.Name == "XXX_InternalExtensions" { // special case + p.enc = (*Buffer).enc_exts + p.dec = nil // not needed + p.size = size_exts + } else if f.Name == "XXX_extensions" { // special case p.enc = (*Buffer).enc_map p.dec = nil // not needed p.size = size_map - } - if f.Name == "XXX_unrecognized" { // special case + } else if f.Name == "XXX_unrecognized" { // special case prop.unrecField = toField(&f) } - oneof := f.Tag.Get("protobuf_oneof") != "" // special case + oneof := f.Tag.Get("protobuf_oneof") // special case + if oneof != "" { + // Oneof fields don't use the traditional protobuf tag. + p.OrigName = oneof + } prop.Prop[i] = p prop.order[i] = i if debug { @@ -707,7 +715,7 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { } print("\n") } - if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && !oneof { + if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" { fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]") } } @@ -840,3 +848,17 @@ func MessageName(x Message) string { return revProtoTypes[reflect.TypeOf(x)] } // MessageType returns the message type (pointer to struct) for a named message. func MessageType(name string) reflect.Type { return protoTypes[name] } + +// A registry of all linked proto files. +var ( + protoFiles = make(map[string][]byte) // file name => fileDescriptor +) + +// RegisterFile is called from generated code and maps from the +// full file name of a .proto file to its compressed FileDescriptorProto. +func RegisterFile(filename string, fileDescriptor []byte) { + protoFiles[filename] = fileDescriptor +} + +// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. +func FileDescriptor(filename string) []byte { return protoFiles[filename] } diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go index 2336b144..8214ce32 100644 --- a/vendor/github.com/golang/protobuf/proto/text.go +++ b/vendor/github.com/golang/protobuf/proto/text.go @@ -175,7 +175,93 @@ type raw interface { Bytes() []byte } -func writeStruct(w *textWriter, sv reflect.Value) error { +func requiresQuotes(u string) bool { + // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. + for _, ch := range u { + switch { + case ch == '.' || ch == '/' || ch == '_': + continue + case '0' <= ch && ch <= '9': + continue + case 'A' <= ch && ch <= 'Z': + continue + case 'a' <= ch && ch <= 'z': + continue + default: + return true + } + } + return false +} + +// isAny reports whether sv is a google.protobuf.Any message +func isAny(sv reflect.Value) bool { + type wkt interface { + XXX_WellKnownType() string + } + t, ok := sv.Addr().Interface().(wkt) + return ok && t.XXX_WellKnownType() == "Any" +} + +// writeProto3Any writes an expanded google.protobuf.Any message. +// +// It returns (false, nil) if sv value can't be unmarshaled (e.g. because +// required messages are not linked in). +// +// It returns (true, error) when sv was written in expanded format or an error +// was encountered. +func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { + turl := sv.FieldByName("TypeUrl") + val := sv.FieldByName("Value") + if !turl.IsValid() || !val.IsValid() { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + b, ok := val.Interface().([]byte) + if !ok { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + parts := strings.Split(turl.String(), "/") + mt := MessageType(parts[len(parts)-1]) + if mt == nil { + return false, nil + } + m := reflect.New(mt.Elem()) + if err := Unmarshal(b, m.Interface().(Message)); err != nil { + return false, nil + } + w.Write([]byte("[")) + u := turl.String() + if requiresQuotes(u) { + writeString(w, u) + } else { + w.Write([]byte(u)) + } + if w.compact { + w.Write([]byte("]:<")) + } else { + w.Write([]byte("]: <\n")) + w.ind++ + } + if err := tm.writeStruct(w, m.Elem()); err != nil { + return true, err + } + if w.compact { + w.Write([]byte("> ")) + } else { + w.ind-- + w.Write([]byte(">\n")) + } + return true, nil +} + +func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { + if tm.ExpandAny && isAny(sv) { + if canExpand, err := tm.writeProto3Any(w, sv); canExpand { + return err + } + } st := sv.Type() sprops := GetProperties(st) for i := 0; i < sv.NumField(); i++ { @@ -227,7 +313,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { } continue } - if err := writeAny(w, v, props); err != nil { + if err := tm.writeAny(w, v, props); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -269,7 +355,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { return err } } - if err := writeAny(w, key, props.mkeyprop); err != nil { + if err := tm.writeAny(w, key, props.mkeyprop); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -286,7 +372,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { return err } } - if err := writeAny(w, val, props.mvalprop); err != nil { + if err := tm.writeAny(w, val, props.mvalprop); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -358,7 +444,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { } // Enums have a String method, so writeAny will work fine. - if err := writeAny(w, fv, props); err != nil { + if err := tm.writeAny(w, fv, props); err != nil { return err } @@ -369,8 +455,8 @@ func writeStruct(w *textWriter, sv reflect.Value) error { // Extensions (the XXX_extensions field). pv := sv.Addr() - if pv.Type().Implements(extendableProtoType) { - if err := writeExtensions(w, pv); err != nil { + if _, ok := extendable(pv.Interface()); ok { + if err := tm.writeExtensions(w, pv); err != nil { return err } } @@ -400,7 +486,7 @@ func writeRaw(w *textWriter, b []byte) error { } // writeAny writes an arbitrary field. -func writeAny(w *textWriter, v reflect.Value, props *Properties) error { +func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { v = reflect.Indirect(v) // Floats have special cases. @@ -427,7 +513,7 @@ func writeAny(w *textWriter, v reflect.Value, props *Properties) error { switch v.Kind() { case reflect.Slice: // Should only be a []byte; repeated fields are handled in writeStruct. - if err := writeString(w, string(v.Interface().([]byte))); err != nil { + if err := writeString(w, string(v.Bytes())); err != nil { return err } case reflect.String: @@ -449,15 +535,15 @@ func writeAny(w *textWriter, v reflect.Value, props *Properties) error { } } w.indent() - if tm, ok := v.Interface().(encoding.TextMarshaler); ok { - text, err := tm.MarshalText() + if etm, ok := v.Interface().(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() if err != nil { return err } if _, err = w.Write(text); err != nil { return err } - } else if err := writeStruct(w, v); err != nil { + } else if err := tm.writeStruct(w, v); err != nil { return err } w.unindent() @@ -601,19 +687,24 @@ func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // writeExtensions writes all the extensions in pv. // pv is assumed to be a pointer to a protocol message struct that is extendable. -func writeExtensions(w *textWriter, pv reflect.Value) error { +func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { emap := extensionMaps[pv.Type().Elem()] - ep := pv.Interface().(extendableProto) + ep, _ := extendable(pv.Interface()) // Order the extensions by ID. // This isn't strictly necessary, but it will give us // canonical output, which will also make testing easier. - m := ep.ExtensionMap() + m, mu := ep.extensionsRead() + if m == nil { + return nil + } + mu.Lock() ids := make([]int32, 0, len(m)) for id := range m { ids = append(ids, id) } sort.Sort(int32Slice(ids)) + mu.Unlock() for _, extNum := range ids { ext := m[extNum] @@ -636,13 +727,13 @@ func writeExtensions(w *textWriter, pv reflect.Value) error { // Repeated extensions will appear as a slice. if !desc.repeated() { - if err := writeExtension(w, desc.Name, pb); err != nil { + if err := tm.writeExtension(w, desc.Name, pb); err != nil { return err } } else { v := reflect.ValueOf(pb) for i := 0; i < v.Len(); i++ { - if err := writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { + if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { return err } } @@ -651,7 +742,7 @@ func writeExtensions(w *textWriter, pv reflect.Value) error { return nil } -func writeExtension(w *textWriter, name string, pb interface{}) error { +func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { return err } @@ -660,7 +751,7 @@ func writeExtension(w *textWriter, name string, pb interface{}) error { return err } } - if err := writeAny(w, reflect.ValueOf(pb), nil); err != nil { + if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -685,7 +776,15 @@ func (w *textWriter) writeIndent() { w.complete = false } -func marshalText(w io.Writer, pb Message, compact bool) error { +// TextMarshaler is a configurable text format marshaler. +type TextMarshaler struct { + Compact bool // use compact text format (one line). + ExpandAny bool // expand google.protobuf.Any messages of known types +} + +// Marshal writes a given protocol buffer in text format. +// The only errors returned are from w. +func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { val := reflect.ValueOf(pb) if pb == nil || val.IsNil() { w.Write([]byte("")) @@ -700,11 +799,11 @@ func marshalText(w io.Writer, pb Message, compact bool) error { aw := &textWriter{ w: ww, complete: true, - compact: compact, + compact: tm.Compact, } - if tm, ok := pb.(encoding.TextMarshaler); ok { - text, err := tm.MarshalText() + if etm, ok := pb.(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() if err != nil { return err } @@ -718,7 +817,7 @@ func marshalText(w io.Writer, pb Message, compact bool) error { } // Dereference the received pointer so we don't have outer < and >. v := reflect.Indirect(val) - if err := writeStruct(aw, v); err != nil { + if err := tm.writeStruct(aw, v); err != nil { return err } if bw != nil { @@ -727,25 +826,29 @@ func marshalText(w io.Writer, pb Message, compact bool) error { return nil } +// Text is the same as Marshal, but returns the string directly. +func (tm *TextMarshaler) Text(pb Message) string { + var buf bytes.Buffer + tm.Marshal(&buf, pb) + return buf.String() +} + +var ( + defaultTextMarshaler = TextMarshaler{} + compactTextMarshaler = TextMarshaler{Compact: true} +) + +// TODO: consider removing some of the Marshal functions below. + // MarshalText writes a given protocol buffer in text format. // The only errors returned are from w. -func MarshalText(w io.Writer, pb Message) error { - return marshalText(w, pb, false) -} +func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } // MarshalTextString is the same as MarshalText, but returns the string directly. -func MarshalTextString(pb Message) string { - var buf bytes.Buffer - marshalText(&buf, pb, false) - return buf.String() -} +func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } // CompactText writes a given protocol buffer in compact text format (one line). -func CompactText(w io.Writer, pb Message) error { return marshalText(w, pb, true) } +func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } // CompactTextString is the same as CompactText, but returns the string directly. -func CompactTextString(pb Message) string { - var buf bytes.Buffer - marshalText(&buf, pb, true) - return buf.String() -} +func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go index 45132326..0b8c59f7 100644 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ b/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -163,7 +163,7 @@ func (p *textParser) advance() { p.cur.offset, p.cur.line = p.offset, p.line p.cur.unquoted = "" switch p.s[0] { - case '<', '>', '{', '}', ':', '[', ']', ';', ',': + case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': // Single symbol p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] case '"', '\'': @@ -451,7 +451,10 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { fieldSet := make(map[string]bool) // A struct is a sequence of "name: value", terminated by one of // '>' or '}', or the end of the input. A name may also be - // "[extension]". + // "[extension]" or "[type/url]". + // + // The whole struct can also be an expanded Any message, like: + // [type/url] < ... struct contents ... > for { tok := p.next() if tok.err != nil { @@ -461,33 +464,66 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { break } if tok.value == "[" { - // Looks like an extension. + // Looks like an extension or an Any. // // TODO: Check whether we need to handle // namespace rooted names (e.g. ".something.Foo"). - tok = p.next() - if tok.err != nil { - return tok.err + extName, err := p.consumeExtName() + if err != nil { + return err } + + if s := strings.LastIndex(extName, "/"); s >= 0 { + // If it contains a slash, it's an Any type URL. + messageName := extName[s+1:] + mt := MessageType(messageName) + if mt == nil { + return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) + } + tok = p.next() + if tok.err != nil { + return tok.err + } + // consume an optional colon + if tok.value == ":" { + tok = p.next() + if tok.err != nil { + return tok.err + } + } + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + v := reflect.New(mt.Elem()) + if pe := p.readStruct(v.Elem(), terminator); pe != nil { + return pe + } + b, err := Marshal(v.Interface().(Message)) + if err != nil { + return p.errorf("failed to marshal message of type %q: %v", messageName, err) + } + sv.FieldByName("TypeUrl").SetString(extName) + sv.FieldByName("Value").SetBytes(b) + continue + } + var desc *ExtensionDesc // This could be faster, but it's functional. // TODO: Do something smarter than a linear scan. for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { - if d.Name == tok.value { + if d.Name == extName { desc = d break } } if desc == nil { - return p.errorf("unrecognized extension %q", tok.value) - } - // Check the extension terminator. - tok = p.next() - if tok.err != nil { - return tok.err - } - if tok.value != "]" { - return p.errorf("unrecognized extension terminator %q", tok.value) + return p.errorf("unrecognized extension %q", extName) } props := &Properties{} @@ -514,7 +550,7 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { } reqFieldErr = err } - ep := sv.Addr().Interface().(extendableProto) + ep := sv.Addr().Interface().(Message) if !rep { SetExtension(ep, desc, ext.Interface()) } else { @@ -566,8 +602,9 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { // The map entry should be this sequence of tokens: // < key : KEY value : VALUE > - // Technically the "key" and "value" could come in any order, - // but in practice they won't. + // However, implementations may omit key or value, and technically + // we should support them in any order. See b/28924776 for a time + // this went wrong. tok := p.next() var terminator string @@ -579,32 +616,39 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { default: return p.errorf("expected '{' or '<', found %q", tok.value) } - if err := p.consumeToken("key"); err != nil { - return err - } - if err := p.consumeToken(":"); err != nil { - return err - } - if err := p.readAny(key, props.mkeyprop); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - if err := p.consumeToken("value"); err != nil { - return err - } - if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { - return err - } - if err := p.readAny(val, props.mvalprop); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - if err := p.consumeToken(terminator); err != nil { - return err + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + switch tok.value { + case "key": + if err := p.consumeToken(":"); err != nil { + return err + } + if err := p.readAny(key, props.mkeyprop); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + case "value": + if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { + return err + } + if err := p.readAny(val, props.mvalprop); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + default: + p.back() + return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) + } } dst.SetMapIndex(key, val) @@ -627,7 +671,8 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { return err } reqFieldErr = err - } else if props.Required { + } + if props.Required { reqCount-- } @@ -643,6 +688,35 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { return reqFieldErr } +// consumeExtName consumes extension name or expanded Any type URL and the +// following ']'. It returns the name or URL consumed. +func (p *textParser) consumeExtName() (string, error) { + tok := p.next() + if tok.err != nil { + return "", tok.err + } + + // If extension name or type url is quoted, it's a single token. + if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { + name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) + if err != nil { + return "", err + } + return name, p.consumeToken("]") + } + + // Consume everything up to "]" + var parts []string + for tok.value != "]" { + parts = append(parts, tok.value) + tok = p.next() + if tok.err != nil { + return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) + } + } + return strings.Join(parts, ""), nil +} + // consumeOptionalSeparator consumes an optional semicolon or comma. // It is used in readStruct to provide backward compatibility. func (p *textParser) consumeOptionalSeparator() error { diff --git a/vendor/github.com/gonum/blas/.travis.yml b/vendor/github.com/gonum/blas/.travis.yml new file mode 100644 index 00000000..32f97a5b --- /dev/null +++ b/vendor/github.com/gonum/blas/.travis.yml @@ -0,0 +1,39 @@ +sudo: required + +language: go + +# Versions of go that are explicitly supported by gonum. +go: + - 1.5beta1 + - 1.3.3 + - 1.4.2 + +env: + matrix: + - BLAS_LIB=OpenBLAS + - BLAS_LIB=gonum + # at some point, when travis allows builds on darwin + #- BLAS_LIB=Accellerate + # at some point, when the issue with drotgm is resolved + #- BLAS_LIB=ATLAS + +# Required for coverage. +before_install: + - go get golang.org/x/tools/cmd/cover + - go get github.com/mattn/goveralls + +# Install the appropriate blas library if we are using cgo. +install: + - source .travis/$TRAVIS_OS_NAME/$BLAS_LIB/install.sh + - go get github.com/gonum/floats + +# Get deps, build, test, and ensure the code is gofmt'ed. +# Move into the native directory if we aren't using an external blas lib. +# If we are building as gonum, then we have access to the coveralls api key, so we can run coverage as well. +script: + - if [[ "$BLAS_LIB" == "gonum" ]]; then pushd native; fi + - go get -d -t -v ./... + - go test -a -v ./... + - go test -a -tags noasm -v ./... + - diff <(gofmt -d .) <("") + - if [[ $TRAVIS_SECURE_ENV_VARS = "true" ]]; then bash -c "${TRAVIS_BUILD_DIR}/.travis/test-coverage.sh"; fi diff --git a/vendor/github.com/gonum/blas/README.md b/vendor/github.com/gonum/blas/README.md new file mode 100644 index 00000000..4d11e3f8 --- /dev/null +++ b/vendor/github.com/gonum/blas/README.md @@ -0,0 +1,96 @@ +# Gonum BLAS [![Build Status](https://travis-ci.org/gonum/blas.svg?branch=master)](https://travis-ci.org/gonum/blas) [![Coverage Status](https://img.shields.io/coveralls/gonum/blas.svg)](https://coveralls.io/r/gonum/blas) + +A collection of packages to provide BLAS functionality for the [Go programming +language](http://golang.org) + +## Installation +```sh + go get github.com/gonum/blas +``` + +### BLAS C-bindings + +If you want to use OpenBLAS, install it in any directory: +```sh + git clone https://github.com/xianyi/OpenBLAS + cd OpenBLAS + make +``` + +The blas/cgo package provides bindings to C-backed BLAS packages. blas/cgo needs the `CGO_LDFLAGS` +environment variable to point to the blas installation. More information can be found in the +[cgo command documentation](http://golang.org/cmd/cgo/). + +Then install the blas/cgo package: +```sh + CGO_LDFLAGS="-L/path/to/OpenBLAS -lopenblas" go install github.com/gonum/blas/cgo +``` + +For Windows you can download binary packages for OpenBLAS at +[SourceForge](http://sourceforge.net/projects/openblas/files/). + +If you want to use a different BLAS package such as the Intel MKL you can +adjust the `CGO_LDFLAGS` variable: +```sh + CGO_LDFLAGS="-lmkl_rt" go install github.com/gonum/blas/cgo +``` + +On OS X the easiest solution is to use the libraries provided by the system: +```sh + CGO_LDFLAGS="-framework Accelerate" go install github.com/gonum/blas/cgo +``` + +## Packages + +### blas + +Defines [BLAS API](http://www.netlib.org/blas/blast-forum/cinterface.pdf) split in several +interfaces. + +### blas/native + +Go implementation of the BLAS API (incomplete, implements the `float32` and `float64` API) + +### blas/cgo + +Binding to a C implementation of the cblas interface (e.g. ATLAS, OpenBLAS, Intel MKL) + +The recommended (free) option for good performance on both Linux and Darwin is OpenBLAS. + +### blas/blas64 and blas/blas32 + +Wrappers for an implementation of the double (i.e., `float64`) and single (`float32`) +precision real parts of the blas API + +```Go +package main + +import ( + "fmt" + + "github.com/gonum/blas/blas64" +) + +func main() { + v := blas64.Vector{Inc: 1, Data: []float64{1, 1, 1}} + fmt.Println("v has length:", blas64.Nrm2(len(v.Data), v)) +} +``` + +### blas/cblas128 and blas/cblas64 + +Wrappers for an implementation of the double (i.e., `complex128`) and single (`complex64`) +precision complex parts of the blas API + +Currently blas/cblas64 and blas/cblas128 require blas/cgo. + +## Issues + +If you find any bugs, feel free to file an issue on the github issue tracker. +Discussions on API changes, added features, code review, or similar requests +are preferred on the [gonum-dev Google Group](https://groups.google.com/forum/#!forum/gonum-dev). + +## License + +Please see [github.com/gonum/license](https://github.com/gonum/license) for general +license information, contributors, authors, etc on the Gonum suite of packages. diff --git a/vendor/github.com/gonum/blas/blas.go b/vendor/github.com/gonum/blas/blas.go new file mode 100644 index 00000000..6c14aac4 --- /dev/null +++ b/vendor/github.com/gonum/blas/blas.go @@ -0,0 +1,388 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package blas provides interfaces for the BLAS linear algebra standard. + +All methods must perform appropriate parameter checking and panic if +provided parameters that do not conform to the requirements specified +by the BLAS standard. + +Quick Reference Guide to the BLAS from http://www.netlib.org/lapack/lug/node145.html + +This version is modified to remove the "order" option. All matrix operations are +on row-order matrices. + +Level 1 BLAS + + dim scalar vector vector scalars 5-element prefixes + struct + + _rotg ( a, b ) S, D + _rotmg( d1, d2, a, b ) S, D + _rot ( n, x, incX, y, incY, c, s ) S, D + _rotm ( n, x, incX, y, incY, param ) S, D + _swap ( n, x, incX, y, incY ) S, D, C, Z + _scal ( n, alpha, x, incX ) S, D, C, Z, Cs, Zd + _copy ( n, x, incX, y, incY ) S, D, C, Z + _axpy ( n, alpha, x, incX, y, incY ) S, D, C, Z + _dot ( n, x, incX, y, incY ) S, D, Ds + _dotu ( n, x, incX, y, incY ) C, Z + _dotc ( n, x, incX, y, incY ) C, Z + __dot ( n, alpha, x, incX, y, incY ) Sds + _nrm2 ( n, x, incX ) S, D, Sc, Dz + _asum ( n, x, incX ) S, D, Sc, Dz + I_amax( n, x, incX ) s, d, c, z + +Level 2 BLAS + + options dim b-width scalar matrix vector scalar vector prefixes + + _gemv ( trans, m, n, alpha, a, lda, x, incX, beta, y, incY ) S, D, C, Z + _gbmv ( trans, m, n, kL, kU, alpha, a, lda, x, incX, beta, y, incY ) S, D, C, Z + _hemv ( uplo, n, alpha, a, lda, x, incX, beta, y, incY ) C, Z + _hbmv ( uplo, n, k, alpha, a, lda, x, incX, beta, y, incY ) C, Z + _hpmv ( uplo, n, alpha, ap, x, incX, beta, y, incY ) C, Z + _symv ( uplo, n, alpha, a, lda, x, incX, beta, y, incY ) S, D + _sbmv ( uplo, n, k, alpha, a, lda, x, incX, beta, y, incY ) S, D + _spmv ( uplo, n, alpha, ap, x, incX, beta, y, incY ) S, D + _trmv ( uplo, trans, diag, n, a, lda, x, incX ) S, D, C, Z + _tbmv ( uplo, trans, diag, n, k, a, lda, x, incX ) S, D, C, Z + _tpmv ( uplo, trans, diag, n, ap, x, incX ) S, D, C, Z + _trsv ( uplo, trans, diag, n, a, lda, x, incX ) S, D, C, Z + _tbsv ( uplo, trans, diag, n, k, a, lda, x, incX ) S, D, C, Z + _tpsv ( uplo, trans, diag, n, ap, x, incX ) S, D, C, Z + + options dim scalar vector vector matrix prefixes + + _ger ( m, n, alpha, x, incX, y, incY, a, lda ) S, D + _geru ( m, n, alpha, x, incX, y, incY, a, lda ) C, Z + _gerc ( m, n, alpha, x, incX, y, incY, a, lda ) C, Z + _her ( uplo, n, alpha, x, incX, a, lda ) C, Z + _hpr ( uplo, n, alpha, x, incX, ap ) C, Z + _her2 ( uplo, n, alpha, x, incX, y, incY, a, lda ) C, Z + _hpr2 ( uplo, n, alpha, x, incX, y, incY, ap ) C, Z + _syr ( uplo, n, alpha, x, incX, a, lda ) S, D + _spr ( uplo, n, alpha, x, incX, ap ) S, D + _syr2 ( uplo, n, alpha, x, incX, y, incY, a, lda ) S, D + _spr2 ( uplo, n, alpha, x, incX, y, incY, ap ) S, D + +Level 3 BLAS + + options dim scalar matrix matrix scalar matrix prefixes + + _gemm ( transA, transB, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc ) S, D, C, Z + _symm ( side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc ) S, D, C, Z + _hemm ( side, uplo, m, n, alpha, a, lda, b, ldb, beta, c, ldc ) C, Z + _syrk ( uplo, trans, n, k, alpha, a, lda, beta, c, ldc ) S, D, C, Z + _herk ( uplo, trans, n, k, alpha, a, lda, beta, c, ldc ) C, Z + _syr2k( uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc ) S, D, C, Z + _her2k( uplo, trans, n, k, alpha, a, lda, b, ldb, beta, c, ldc ) C, Z + _trmm ( side, uplo, transA, diag, m, n, alpha, a, lda, b, ldb ) S, D, C, Z + _trsm ( side, uplo, transA, diag, m, n, alpha, a, lda, b, ldb ) S, D, C, Z + +Meaning of prefixes + + S - float32 C - complex64 + D - float64 Z - complex128 + +Matrix types + + GE - GEneral GB - General Band + SY - SYmmetric SB - Symmetric Band SP - Symmetric Packed + HE - HErmitian HB - Hermitian Band HP - Hermitian Packed + TR - TRiangular TB - Triangular Band TP - Triangular Packed + +Options + + trans = NoTrans, Trans, ConjTrans + uplo = Upper, Lower + diag = Nonunit, Unit + side = Left, Right (A or op(A) on the left, or A or op(A) on the right) + +For real matrices, Trans and ConjTrans have the same meaning. +For Hermitian matrices, trans = Trans is not allowed. +For complex symmetric matrices, trans = ConjTrans is not allowed. +*/ +package blas + +// Flag constants indicate Givens transformation H matrix state. +type Flag int + +const ( + Identity Flag = iota - 2 // H is the identity matrix; no rotation is needed. + Rescaling // H specifies rescaling. + OffDiagonal // Off-diagonal elements of H are units. + Diagonal // Diagonal elements of H are units. +) + +// SrotmParams contains Givens transformation parameters returned +// by the Float32 Srotm method. +type SrotmParams struct { + Flag + H [4]float32 // Column-major 2 by 2 matrix. +} + +// DrotmParams contains Givens transformation parameters returned +// by the Float64 Drotm method. +type DrotmParams struct { + Flag + H [4]float64 // Column-major 2 by 2 matrix. +} + +// Transpose is used to specify the transposition operation for a +// routine. +type Transpose int + +const ( + NoTrans Transpose = 111 + iota + Trans + ConjTrans +) + +// Uplo is used to specify whether the matrix is an upper or lower +// triangular matrix. +type Uplo int + +const ( + All Uplo = 120 + iota + Upper + Lower +) + +// Diag is used to specify whether the matrix is a unit or non-unit +// triangular matrix. +type Diag int + +const ( + NonUnit Diag = 131 + iota + Unit +) + +// Side is used to specify from which side a multiplication operation +// is performed. +type Side int + +const ( + Left Side = 141 + iota + Right +) + +// Float32 implements the single precision real BLAS routines. +type Float32 interface { + Float32Level1 + Float32Level2 + Float32Level3 +} + +// Float32Level1 implements the single precision real BLAS Level 1 routines. +type Float32Level1 interface { + Sdsdot(n int, alpha float32, x []float32, incX int, y []float32, incY int) float32 + Dsdot(n int, x []float32, incX int, y []float32, incY int) float64 + Sdot(n int, x []float32, incX int, y []float32, incY int) float32 + Snrm2(n int, x []float32, incX int) float32 + Sasum(n int, x []float32, incX int) float32 + Isamax(n int, x []float32, incX int) int + Sswap(n int, x []float32, incX int, y []float32, incY int) + Scopy(n int, x []float32, incX int, y []float32, incY int) + Saxpy(n int, alpha float32, x []float32, incX int, y []float32, incY int) + Srotg(a, b float32) (c, s, r, z float32) + Srotmg(d1, d2, b1, b2 float32) (p SrotmParams, rd1, rd2, rb1 float32) + Srot(n int, x []float32, incX int, y []float32, incY int, c, s float32) + Srotm(n int, x []float32, incX int, y []float32, incY int, p SrotmParams) + Sscal(n int, alpha float32, x []float32, incX int) +} + +// Float32Level2 implements the single precision real BLAS Level 2 routines. +type Float32Level2 interface { + Sgemv(tA Transpose, m, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int) + Sgbmv(tA Transpose, m, n, kL, kU int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int) + Strmv(ul Uplo, tA Transpose, d Diag, n int, a []float32, lda int, x []float32, incX int) + Stbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []float32, lda int, x []float32, incX int) + Stpmv(ul Uplo, tA Transpose, d Diag, n int, ap []float32, x []float32, incX int) + Strsv(ul Uplo, tA Transpose, d Diag, n int, a []float32, lda int, x []float32, incX int) + Stbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []float32, lda int, x []float32, incX int) + Stpsv(ul Uplo, tA Transpose, d Diag, n int, ap []float32, x []float32, incX int) + Ssymv(ul Uplo, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int) + Ssbmv(ul Uplo, n, k int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int) + Sspmv(ul Uplo, n int, alpha float32, ap []float32, x []float32, incX int, beta float32, y []float32, incY int) + Sger(m, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int) + Ssyr(ul Uplo, n int, alpha float32, x []float32, incX int, a []float32, lda int) + Sspr(ul Uplo, n int, alpha float32, x []float32, incX int, ap []float32) + Ssyr2(ul Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int) + Sspr2(ul Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32) +} + +// Float32Level3 implements the single precision real BLAS Level 3 routines. +type Float32Level3 interface { + Sgemm(tA, tB Transpose, m, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int) + Ssymm(s Side, ul Uplo, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int) + Ssyrk(ul Uplo, t Transpose, n, k int, alpha float32, a []float32, lda int, beta float32, c []float32, ldc int) + Ssyr2k(ul Uplo, t Transpose, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int) + Strmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int) + Strsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int) +} + +// Float64 implements the single precision real BLAS routines. +type Float64 interface { + Float64Level1 + Float64Level2 + Float64Level3 +} + +// Float64Level1 implements the double precision real BLAS Level 1 routines. +type Float64Level1 interface { + Ddot(n int, x []float64, incX int, y []float64, incY int) float64 + Dnrm2(n int, x []float64, incX int) float64 + Dasum(n int, x []float64, incX int) float64 + Idamax(n int, x []float64, incX int) int + Dswap(n int, x []float64, incX int, y []float64, incY int) + Dcopy(n int, x []float64, incX int, y []float64, incY int) + Daxpy(n int, alpha float64, x []float64, incX int, y []float64, incY int) + Drotg(a, b float64) (c, s, r, z float64) + Drotmg(d1, d2, b1, b2 float64) (p DrotmParams, rd1, rd2, rb1 float64) + Drot(n int, x []float64, incX int, y []float64, incY int, c float64, s float64) + Drotm(n int, x []float64, incX int, y []float64, incY int, p DrotmParams) + Dscal(n int, alpha float64, x []float64, incX int) +} + +// Float64Level2 implements the double precision real BLAS Level 2 routines. +type Float64Level2 interface { + Dgemv(tA Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) + Dgbmv(tA Transpose, m, n, kL, kU int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) + Dtrmv(ul Uplo, tA Transpose, d Diag, n int, a []float64, lda int, x []float64, incX int) + Dtbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []float64, lda int, x []float64, incX int) + Dtpmv(ul Uplo, tA Transpose, d Diag, n int, ap []float64, x []float64, incX int) + Dtrsv(ul Uplo, tA Transpose, d Diag, n int, a []float64, lda int, x []float64, incX int) + Dtbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []float64, lda int, x []float64, incX int) + Dtpsv(ul Uplo, tA Transpose, d Diag, n int, ap []float64, x []float64, incX int) + Dsymv(ul Uplo, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) + Dsbmv(ul Uplo, n, k int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) + Dspmv(ul Uplo, n int, alpha float64, ap []float64, x []float64, incX int, beta float64, y []float64, incY int) + Dger(m, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) + Dsyr(ul Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int) + Dspr(ul Uplo, n int, alpha float64, x []float64, incX int, ap []float64) + Dsyr2(ul Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) + Dspr2(ul Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64) +} + +// Float64Level3 implements the double precision real BLAS Level 3 routines. +type Float64Level3 interface { + Dgemm(tA, tB Transpose, m, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) + Dsymm(s Side, ul Uplo, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) + Dsyrk(ul Uplo, t Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int) + Dsyr2k(ul Uplo, t Transpose, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) + Dtrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int) + Dtrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int) +} + +// Complex64 implements the single precision complex BLAS routines. +type Complex64 interface { + Complex64Level1 + Complex64Level2 + Complex64Level3 +} + +// Complex64Level1 implements the single precision complex BLAS Level 1 routines. +type Complex64Level1 interface { + Cdotu(n int, x []complex64, incX int, y []complex64, incY int) (dotu complex64) + Cdotc(n int, x []complex64, incX int, y []complex64, incY int) (dotc complex64) + Scnrm2(n int, x []complex64, incX int) float32 + Scasum(n int, x []complex64, incX int) float32 + Icamax(n int, x []complex64, incX int) int + Cswap(n int, x []complex64, incX int, y []complex64, incY int) + Ccopy(n int, x []complex64, incX int, y []complex64, incY int) + Caxpy(n int, alpha complex64, x []complex64, incX int, y []complex64, incY int) + Cscal(n int, alpha complex64, x []complex64, incX int) + Csscal(n int, alpha float32, x []complex64, incX int) +} + +// Complex64Level2 implements the single precision complex BLAS routines Level 2 routines. +type Complex64Level2 interface { + Cgemv(tA Transpose, m, n int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int) + Cgbmv(tA Transpose, m, n, kL, kU int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int) + Ctrmv(ul Uplo, tA Transpose, d Diag, n int, a []complex64, lda int, x []complex64, incX int) + Ctbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex64, lda int, x []complex64, incX int) + Ctpmv(ul Uplo, tA Transpose, d Diag, n int, ap []complex64, x []complex64, incX int) + Ctrsv(ul Uplo, tA Transpose, d Diag, n int, a []complex64, lda int, x []complex64, incX int) + Ctbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex64, lda int, x []complex64, incX int) + Ctpsv(ul Uplo, tA Transpose, d Diag, n int, ap []complex64, x []complex64, incX int) + Chemv(ul Uplo, n int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int) + Chbmv(ul Uplo, n, k int, alpha complex64, a []complex64, lda int, x []complex64, incX int, beta complex64, y []complex64, incY int) + Chpmv(ul Uplo, n int, alpha complex64, ap []complex64, x []complex64, incX int, beta complex64, y []complex64, incY int) + Cgeru(m, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int) + Cgerc(m, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int) + Cher(ul Uplo, n int, alpha float32, x []complex64, incX int, a []complex64, lda int) + Chpr(ul Uplo, n int, alpha float32, x []complex64, incX int, a []complex64) + Cher2(ul Uplo, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, a []complex64, lda int) + Chpr2(ul Uplo, n int, alpha complex64, x []complex64, incX int, y []complex64, incY int, ap []complex64) +} + +// Complex64Level3 implements the single precision complex BLAS Level 3 routines. +type Complex64Level3 interface { + Cgemm(tA, tB Transpose, m, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int) + Csymm(s Side, ul Uplo, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int) + Csyrk(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, beta complex64, c []complex64, ldc int) + Csyr2k(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int) + Ctrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int) + Ctrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int) + Chemm(s Side, ul Uplo, m, n int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta complex64, c []complex64, ldc int) + Cherk(ul Uplo, t Transpose, n, k int, alpha float32, a []complex64, lda int, beta float32, c []complex64, ldc int) + Cher2k(ul Uplo, t Transpose, n, k int, alpha complex64, a []complex64, lda int, b []complex64, ldb int, beta float32, c []complex64, ldc int) +} + +// Complex128 implements the double precision complex BLAS routines. +type Complex128 interface { + Complex128Level1 + Complex128Level2 + Complex128Level3 +} + +// Complex128Level1 implements the double precision complex BLAS Level 1 routines. +type Complex128Level1 interface { + Zdotu(n int, x []complex128, incX int, y []complex128, incY int) (dotu complex128) + Zdotc(n int, x []complex128, incX int, y []complex128, incY int) (dotc complex128) + Dznrm2(n int, x []complex128, incX int) float64 + Dzasum(n int, x []complex128, incX int) float64 + Izamax(n int, x []complex128, incX int) int + Zswap(n int, x []complex128, incX int, y []complex128, incY int) + Zcopy(n int, x []complex128, incX int, y []complex128, incY int) + Zaxpy(n int, alpha complex128, x []complex128, incX int, y []complex128, incY int) + Zscal(n int, alpha complex128, x []complex128, incX int) + Zdscal(n int, alpha float64, x []complex128, incX int) +} + +// Complex128Level2 implements the double precision complex BLAS Level 2 routines. +type Complex128Level2 interface { + Zgemv(tA Transpose, m, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int) + Zgbmv(tA Transpose, m, n int, kL int, kU int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int) + Ztrmv(ul Uplo, tA Transpose, d Diag, n int, a []complex128, lda int, x []complex128, incX int) + Ztbmv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex128, lda int, x []complex128, incX int) + Ztpmv(ul Uplo, tA Transpose, d Diag, n int, ap []complex128, x []complex128, incX int) + Ztrsv(ul Uplo, tA Transpose, d Diag, n int, a []complex128, lda int, x []complex128, incX int) + Ztbsv(ul Uplo, tA Transpose, d Diag, n, k int, a []complex128, lda int, x []complex128, incX int) + Ztpsv(ul Uplo, tA Transpose, d Diag, n int, ap []complex128, x []complex128, incX int) + Zhemv(ul Uplo, n int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int) + Zhbmv(ul Uplo, n, k int, alpha complex128, a []complex128, lda int, x []complex128, incX int, beta complex128, y []complex128, incY int) + Zhpmv(ul Uplo, n int, alpha complex128, ap []complex128, x []complex128, incX int, beta complex128, y []complex128, incY int) + Zgeru(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int) + Zgerc(m, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int) + Zher(ul Uplo, n int, alpha float64, x []complex128, incX int, a []complex128, lda int) + Zhpr(ul Uplo, n int, alpha float64, x []complex128, incX int, a []complex128) + Zher2(ul Uplo, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, a []complex128, lda int) + Zhpr2(ul Uplo, n int, alpha complex128, x []complex128, incX int, y []complex128, incY int, ap []complex128) +} + +// Complex128Level3 implements the double precision complex BLAS Level 3 routines. +type Complex128Level3 interface { + Zgemm(tA, tB Transpose, m, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int) + Zsymm(s Side, ul Uplo, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int) + Zsyrk(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, beta complex128, c []complex128, ldc int) + Zsyr2k(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int) + Ztrmm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int) + Ztrsm(s Side, ul Uplo, tA Transpose, d Diag, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int) + Zhemm(s Side, ul Uplo, m, n int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta complex128, c []complex128, ldc int) + Zherk(ul Uplo, t Transpose, n, k int, alpha float64, a []complex128, lda int, beta float64, c []complex128, ldc int) + Zher2k(ul Uplo, t Transpose, n, k int, alpha complex128, a []complex128, lda int, b []complex128, ldb int, beta float64, c []complex128, ldc int) +} diff --git a/vendor/github.com/gonum/blas/blas64/blas64.go b/vendor/github.com/gonum/blas/blas64/blas64.go new file mode 100644 index 00000000..850e5ec7 --- /dev/null +++ b/vendor/github.com/gonum/blas/blas64/blas64.go @@ -0,0 +1,434 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package blas64 provides a simple interface to the float64 BLAS API. +package blas64 + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/native" +) + +var blas64 blas.Float64 = native.Implementation{} + +// Use sets the BLAS float64 implementation to be used by subsequent BLAS calls. +// The default implementation is native.Implementation. +func Use(b blas.Float64) { + blas64 = b +} + +// Implementation returns the current BLAS float64 implementation. +// +// Implementation allows direct calls to the current the BLAS float64 implementation +// giving finer control of parameters. +func Implementation() blas.Float64 { + return blas64 +} + +// Vector represents a vector with an associated element increment. +type Vector struct { + Inc int + Data []float64 +} + +// General represents a matrix using the conventional storage scheme. +type General struct { + Rows, Cols int + Stride int + Data []float64 +} + +// Band represents a band matrix using the band storage scheme. +type Band struct { + Rows, Cols int + KL, KU int + Stride int + Data []float64 +} + +// Triangular represents a triangular matrix using the conventional storage scheme. +type Triangular struct { + N int + Stride int + Data []float64 + Uplo blas.Uplo + Diag blas.Diag +} + +// TriangularBand represents a triangular matrix using the band storage scheme. +type TriangularBand struct { + N, K int + Stride int + Data []float64 + Uplo blas.Uplo + Diag blas.Diag +} + +// TriangularPacked represents a triangular matrix using the packed storage scheme. +type TriangularPacked struct { + N int + Data []float64 + Uplo blas.Uplo + Diag blas.Diag +} + +// Symmetric represents a symmetric matrix using the conventional storage scheme. +type Symmetric struct { + N int + Stride int + Data []float64 + Uplo blas.Uplo +} + +// SymmetricBand represents a symmetric matrix using the band storage scheme. +type SymmetricBand struct { + N, K int + Stride int + Data []float64 + Uplo blas.Uplo +} + +// SymmetricPacked represents a symmetric matrix using the packed storage scheme. +type SymmetricPacked struct { + N int + Data []float64 + Uplo blas.Uplo +} + +// Level 1 + +const negInc = "blas64: negative vector increment" + +// Dot computes the dot product of the two vectors +// \sum_i x[i]*y[i] +func Dot(n int, x, y Vector) float64 { + return blas64.Ddot(n, x.Data, x.Inc, y.Data, y.Inc) +} + +// Nrm2 computes the Euclidean norm of a vector, +// sqrt(\sum_i x[i] * x[i]). +// +// Nrm2 will panic if the vector increment is negative. +func Nrm2(n int, x Vector) float64 { + if x.Inc < 0 { + panic(negInc) + } + return blas64.Dnrm2(n, x.Data, x.Inc) +} + +// Asum computes the sum of the absolute values of the elements of x. +// \sum_i |x[i]| +// +// Asum will panic if the vector increment is negative. +func Asum(n int, x Vector) float64 { + if x.Inc < 0 { + panic(negInc) + } + return blas64.Dasum(n, x.Data, x.Inc) +} + +// Iamax returns the index of the largest element of x. If there are multiple +// such indices the earliest is returned. Iamax returns -1 if n == 0. +// +// Iamax will panic if the vector increment is negative. +func Iamax(n int, x Vector) int { + if x.Inc < 0 { + panic(negInc) + } + return blas64.Idamax(n, x.Data, x.Inc) +} + +// Swap exchanges the elements of two vectors. +// x[i], y[i] = y[i], x[i] for all i +func Swap(n int, x, y Vector) { + blas64.Dswap(n, x.Data, x.Inc, y.Data, y.Inc) +} + +// Copy copies the elements of x into the elements of y. +// y[i] = x[i] for all i +func Copy(n int, x, y Vector) { + blas64.Dcopy(n, x.Data, x.Inc, y.Data, y.Inc) +} + +// Axpy adds alpha times x to y +// y[i] += alpha * x[i] for all i +func Axpy(n int, alpha float64, x, y Vector) { + blas64.Daxpy(n, alpha, x.Data, x.Inc, y.Data, y.Inc) +} + +// Rotg computes the plane rotation +// _ _ _ _ _ _ +// | c s | | a | | r | +// | -s c | * | b | = | 0 | +// ‾ ‾ ‾ ‾ ‾ ‾ +// where +// r = ±(a^2 + b^2) +// c = a/r, the cosine of the plane rotation +// s = b/r, the sine of the plane rotation +func Rotg(a, b float64) (c, s, r, z float64) { + return blas64.Drotg(a, b) +} + +// Rotmg computes the modified Givens rotation. See +// http://www.netlib.org/lapack/explore-html/df/deb/drotmg_8f.html +// for more details. +func Rotmg(d1, d2, b1, b2 float64) (p blas.DrotmParams, rd1, rd2, rb1 float64) { + return blas64.Drotmg(d1, d2, b1, b2) +} + +// Rot applies a plane transformation. +// x[i] = c * x[i] + s * y[i] +// y[i] = c * y[i] - s * x[i] +func Rot(n int, x, y Vector, c, s float64) { + blas64.Drot(n, x.Data, x.Inc, y.Data, y.Inc, c, s) +} + +// Rotm applies the modified Givens rotation to the 2×n matrix. +func Rotm(n int, x, y Vector, p blas.DrotmParams) { + blas64.Drotm(n, x.Data, x.Inc, y.Data, y.Inc, p) +} + +// Scal scales x by alpha. +// x[i] *= alpha +// +// Scal will panic if the vector increment is negative +func Scal(n int, alpha float64, x Vector) { + if x.Inc < 0 { + panic(negInc) + } + blas64.Dscal(n, alpha, x.Data, x.Inc) +} + +// Level 2 + +// Gemv computes +// y = alpha * a * x + beta * y if tA = blas.NoTrans +// y = alpha * A^T * x + beta * y if tA = blas.Trans or blas.ConjTrans +// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. +func Gemv(tA blas.Transpose, alpha float64, a General, x Vector, beta float64, y Vector) { + blas64.Dgemv(tA, a.Rows, a.Cols, alpha, a.Data, a.Stride, x.Data, x.Inc, beta, y.Data, y.Inc) +} + +// Gbmv computes +// y = alpha * A * x + beta * y if tA == blas.NoTrans +// y = alpha * A^T * x + beta * y if tA == blas.Trans or blas.ConjTrans +// where a is an m×n band matrix kL subdiagonals and kU super-diagonals, and +// m and n refer to the size of the full dense matrix it represents. +// x and y are vectors, and alpha and beta are scalars. +func Gbmv(tA blas.Transpose, alpha float64, a Band, x Vector, beta float64, y Vector) { + blas64.Dgbmv(tA, a.Rows, a.Cols, a.KL, a.KU, alpha, a.Data, a.Stride, x.Data, x.Inc, beta, y.Data, y.Inc) +} + +// Trmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// A is an n×n Triangular matrix and x is a vector. +func Trmv(tA blas.Transpose, a Triangular, x Vector) { + blas64.Dtrmv(a.Uplo, tA, a.Diag, a.N, a.Data, a.Stride, x.Data, x.Inc) +} + +// Tbmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// where A is an n×n triangular banded matrix with k diagonals, and x is a vector. +func Tbmv(tA blas.Transpose, a TriangularBand, x Vector) { + blas64.Dtbmv(a.Uplo, tA, a.Diag, a.N, a.K, a.Data, a.Stride, x.Data, x.Inc) +} + +// Tpmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// where A is an n×n unit triangular matrix in packed format, and x is a vector. +func Tpmv(tA blas.Transpose, a TriangularPacked, x Vector) { + blas64.Dtpmv(a.Uplo, tA, a.Diag, a.N, a.Data, x.Data, x.Inc) +} + +// Trsv solves +// A * x = b if tA == blas.NoTrans +// A^T * x = b if tA == blas.Trans or blas.ConjTrans +// A is an n×n triangular matrix and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +func Trsv(tA blas.Transpose, a Triangular, x Vector) { + blas64.Dtrsv(a.Uplo, tA, a.Diag, a.N, a.Data, a.Stride, x.Data, x.Inc) +} + +// Tbsv solves +// A * x = b +// where A is an n×n triangular banded matrix with k diagonals in packed format, +// and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +func Tbsv(tA blas.Transpose, a TriangularBand, x Vector) { + blas64.Dtbsv(a.Uplo, tA, a.Diag, a.N, a.K, a.Data, a.Stride, x.Data, x.Inc) +} + +// Tpsv solves +// A * x = b if tA == blas.NoTrans +// A^T * x = b if tA == blas.Trans or blas.ConjTrans +// where A is an n×n triangular matrix in packed format and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +func Tpsv(tA blas.Transpose, a TriangularPacked, x Vector) { + blas64.Dtpsv(a.Uplo, tA, a.Diag, a.N, a.Data, x.Data, x.Inc) +} + +// Symv computes +// y = alpha * A * x + beta * y, +// where a is an n×n symmetric matrix, x and y are vectors, and alpha and +// beta are scalars. +func Symv(alpha float64, a Symmetric, x Vector, beta float64, y Vector) { + blas64.Dsymv(a.Uplo, a.N, alpha, a.Data, a.Stride, x.Data, x.Inc, beta, y.Data, y.Inc) +} + +// Sbmv performs +// y = alpha * A * x + beta * y +// where A is an n×n symmetric banded matrix, x and y are vectors, and alpha +// and beta are scalars. +func Sbmv(alpha float64, a SymmetricBand, x Vector, beta float64, y Vector) { + blas64.Dsbmv(a.Uplo, a.N, a.K, alpha, a.Data, a.Stride, x.Data, x.Inc, beta, y.Data, y.Inc) +} + +// Spmv performs +// y = alpha * A * x + beta * y, +// where A is an n×n symmetric matrix in packed format, x and y are vectors +// and alpha and beta are scalars. +func Spmv(alpha float64, a SymmetricPacked, x Vector, beta float64, y Vector) { + blas64.Dspmv(a.Uplo, a.N, alpha, a.Data, x.Data, x.Inc, beta, y.Data, y.Inc) +} + +// Ger performs the rank-one operation +// A += alpha * x * y^T +// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. +func Ger(alpha float64, x, y Vector, a General) { + blas64.Dger(a.Rows, a.Cols, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride) +} + +// Syr performs the rank-one update +// a += alpha * x * x^T +// where a is an n×n symmetric matrix, and x is a vector. +func Syr(alpha float64, x Vector, a Symmetric) { + blas64.Dsyr(a.Uplo, a.N, alpha, x.Data, x.Inc, a.Data, a.Stride) +} + +// Spr computes the rank-one operation +// a += alpha * x * x^T +// where a is an n×n symmetric matrix in packed format, x is a vector, and +// alpha is a scalar. +func Spr(alpha float64, x Vector, a SymmetricPacked) { + blas64.Dspr(a.Uplo, a.N, alpha, x.Data, x.Inc, a.Data) +} + +// Syr2 performs the symmetric rank-two update +// A += alpha * x * y^T + alpha * y * x^T +// where A is a symmetric n×n matrix, x and y are vectors, and alpha is a scalar. +func Syr2(alpha float64, x, y Vector, a Symmetric) { + blas64.Dsyr2(a.Uplo, a.N, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data, a.Stride) +} + +// Spr2 performs the symmetric rank-2 update +// a += alpha * x * y^T + alpha * y * x^T +// where a is an n×n symmetric matirx in packed format and x and y are vectors. +func Spr2(alpha float64, x, y Vector, a SymmetricPacked) { + blas64.Dspr2(a.Uplo, a.N, alpha, x.Data, x.Inc, y.Data, y.Inc, a.Data) +} + +// Level 3 + +// Gemm computes +// C = beta * C + alpha * A * B. +// tA and tB specify whether A or B are transposed. A, B, and C are m×n dense +// matrices. +func Gemm(tA, tB blas.Transpose, alpha float64, a, b General, beta float64, c General) { + var m, n, k int + if tA == blas.NoTrans { + m, k = a.Rows, a.Cols + } else { + m, k = a.Cols, a.Rows + } + if tB == blas.NoTrans { + n = b.Cols + } else { + n = b.Rows + } + blas64.Dgemm(tA, tB, m, n, k, alpha, a.Data, a.Stride, b.Data, b.Stride, beta, c.Data, c.Stride) +} + +// Symm performs one of +// C = alpha * A * B + beta * C if side == blas.Left +// C = alpha * B * A + beta * C if side == blas.Right +// where A is an n×n symmetric matrix, B and C are m×n matrices, and alpha +// is a scalar. +func Symm(s blas.Side, alpha float64, a Symmetric, b General, beta float64, c General) { + var m, n int + if s == blas.Left { + m, n = a.N, b.Cols + } else { + m, n = b.Rows, a.N + } + blas64.Dsymm(s, a.Uplo, m, n, alpha, a.Data, a.Stride, b.Data, b.Stride, beta, c.Data, c.Stride) +} + +// Syrk performs the symmetric rank-k operation +// C = alpha * A * A^T + beta*C +// C is an n×n symmetric matrix. A is an n×k matrix if tA == blas.NoTrans, and +// a k×n matrix otherwise. alpha and beta are scalars. +func Syrk(t blas.Transpose, alpha float64, a General, beta float64, c Symmetric) { + var n, k int + if t == blas.NoTrans { + n, k = a.Rows, a.Cols + } else { + n, k = a.Cols, a.Rows + } + blas64.Dsyrk(c.Uplo, t, n, k, alpha, a.Data, a.Stride, beta, c.Data, c.Stride) +} + +// Syr2k performs the symmetric rank 2k operation +// C = alpha * A * B^T + alpha * B * A^T + beta * C +// where C is an n×n symmetric matrix. A and B are n×k matrices if +// tA == NoTrans and k×n otherwise. alpha and beta are scalars. +func Syr2k(t blas.Transpose, alpha float64, a, b General, beta float64, c Symmetric) { + var n, k int + if t == blas.NoTrans { + n, k = a.Rows, a.Cols + } else { + n, k = a.Cols, a.Rows + } + blas64.Dsyr2k(c.Uplo, t, n, k, alpha, a.Data, a.Stride, b.Data, b.Stride, beta, c.Data, c.Stride) +} + +// Trmm performs +// B = alpha * A * B if tA == blas.NoTrans and side == blas.Left +// B = alpha * A^T * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left +// B = alpha * B * A if tA == blas.NoTrans and side == blas.Right +// B = alpha * B * A^T if tA == blas.Trans or blas.ConjTrans, and side == blas.Right +// where A is an n×n triangular matrix, and B is an m×n matrix. +func Trmm(s blas.Side, tA blas.Transpose, alpha float64, a Triangular, b General) { + blas64.Dtrmm(s, a.Uplo, tA, a.Diag, b.Rows, b.Cols, alpha, a.Data, a.Stride, b.Data, b.Stride) +} + +// Trsm solves +// A * X = alpha * B if tA == blas.NoTrans side == blas.Left +// A^T * X = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left +// X * A = alpha * B if tA == blas.NoTrans side == blas.Right +// X * A^T = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Right +// where A is an n×n triangular matrix, x is an m×n matrix, and alpha is a +// scalar. +// +// At entry to the function, X contains the values of B, and the result is +// stored in place into X. +// +// No check is made that A is invertible. +func Trsm(s blas.Side, tA blas.Transpose, alpha float64, a Triangular, b General) { + blas64.Dtrsm(s, a.Uplo, tA, a.Diag, b.Rows, b.Cols, alpha, a.Data, a.Stride, b.Data, b.Stride) +} diff --git a/vendor/github.com/gonum/blas/native/dgemm.go b/vendor/github.com/gonum/blas/native/dgemm.go new file mode 100644 index 00000000..850f62cd --- /dev/null +++ b/vendor/github.com/gonum/blas/native/dgemm.go @@ -0,0 +1,391 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "fmt" + "runtime" + "sync" + + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +// Dgemm computes +// C = beta * C + alpha * A * B. +// tA and tB specify whether A or B are transposed. A, B, and C are m×n dense +// matrices. +func (Implementation) Dgemm(tA, tB blas.Transpose, m, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) { + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if tB != blas.NoTrans && tB != blas.Trans && tB != blas.ConjTrans { + panic(badTranspose) + } + + var amat, bmat, cmat general64 + if tA != blas.NoTrans { + amat = general64{ + data: a, + rows: k, + cols: m, + stride: lda, + } + } else { + amat = general64{ + data: a, + rows: m, + cols: k, + stride: lda, + } + } + err := amat.check('a') + if err != nil { + panic(err.Error()) + } + if tB != blas.NoTrans { + bmat = general64{ + data: b, + rows: n, + cols: k, + stride: ldb, + } + } else { + bmat = general64{ + data: b, + rows: k, + cols: n, + stride: ldb, + } + } + + err = bmat.check('b') + if err != nil { + panic(err.Error()) + } + cmat = general64{ + data: c, + rows: m, + cols: n, + stride: ldc, + } + err = cmat.check('c') + if err != nil { + panic(err.Error()) + } + + // scale c + if beta != 1 { + if beta == 0 { + for i := 0; i < m; i++ { + ctmp := cmat.data[i*cmat.stride : i*cmat.stride+cmat.cols] + for j := range ctmp { + ctmp[j] = 0 + } + } + } else { + for i := 0; i < m; i++ { + ctmp := cmat.data[i*cmat.stride : i*cmat.stride+cmat.cols] + for j := range ctmp { + ctmp[j] *= beta + } + } + } + } + + dgemmParallel(tA, tB, amat, bmat, cmat, alpha) +} + +func dgemmParallel(tA, tB blas.Transpose, a, b, c general64, alpha float64) { + // dgemmParallel computes a parallel matrix multiplication by partitioning + // a and b into sub-blocks, and updating c with the multiplication of the sub-block + // In all cases, + // A = [ A_11 A_12 ... A_1j + // A_21 A_22 ... A_2j + // ... + // A_i1 A_i2 ... A_ij] + // + // and same for B. All of the submatrix sizes are blockSize*blockSize except + // at the edges. + // In all cases, there is one dimension for each matrix along which + // C must be updated sequentially. + // Cij = \sum_k Aik Bki, (A * B) + // Cij = \sum_k Aki Bkj, (A^T * B) + // Cij = \sum_k Aik Bjk, (A * B^T) + // Cij = \sum_k Aki Bjk, (A^T * B^T) + // + // This code computes one {i, j} block sequentially along the k dimension, + // and computes all of the {i, j} blocks concurrently. This + // partitioning allows Cij to be updated in-place without race-conditions. + // Instead of launching a goroutine for each possible concurrent computation, + // a number of worker goroutines are created and channels are used to pass + // available and completed cases. + // + // http://alexkr.com/docs/matrixmult.pdf is a good reference on matrix-matrix + // multiplies, though this code does not copy matrices to attempt to eliminate + // cache misses. + + aTrans := tA == blas.Trans || tA == blas.ConjTrans + bTrans := tB == blas.Trans || tB == blas.ConjTrans + + maxKLen, parBlocks := computeNumBlocks64(a, b, aTrans, bTrans) + if parBlocks < minParBlock { + // The matrix multiplication is small in the dimensions where it can be + // computed concurrently. Just do it in serial. + dgemmSerial(tA, tB, a, b, c, alpha) + return + } + + nWorkers := runtime.GOMAXPROCS(0) + if parBlocks < nWorkers { + nWorkers = parBlocks + } + // There is a tradeoff between the workers having to wait for work + // and a large buffer making operations slow. + buf := buffMul * nWorkers + if buf > parBlocks { + buf = parBlocks + } + + sendChan := make(chan subMul, buf) + + // Launch workers. A worker receives an {i, j} submatrix of c, and computes + // A_ik B_ki (or the transposed version) storing the result in c_ij. When the + // channel is finally closed, it signals to the waitgroup that it has finished + // computing. + var wg sync.WaitGroup + for i := 0; i < nWorkers; i++ { + wg.Add(1) + go func() { + defer wg.Done() + // Make local copies of otherwise global variables to reduce shared memory. + // This has a noticable effect on benchmarks in some cases. + alpha := alpha + aTrans := aTrans + bTrans := bTrans + crows := c.rows + ccols := c.cols + for sub := range sendChan { + i := sub.i + j := sub.j + leni := blockSize + if i+leni > crows { + leni = crows - i + } + lenj := blockSize + if j+lenj > ccols { + lenj = ccols - j + } + cSub := c.view(i, j, leni, lenj) + + // Compute A_ik B_kj for all k + for k := 0; k < maxKLen; k += blockSize { + lenk := blockSize + if k+lenk > maxKLen { + lenk = maxKLen - k + } + var aSub, bSub general64 + if aTrans { + aSub = a.view(k, i, lenk, leni) + } else { + aSub = a.view(i, k, leni, lenk) + } + if bTrans { + bSub = b.view(j, k, lenj, lenk) + } else { + bSub = b.view(k, j, lenk, lenj) + } + + dgemmSerial(tA, tB, aSub, bSub, cSub, alpha) + } + } + }() + } + + // Send out all of the {i, j} subblocks for computation. + for i := 0; i < c.rows; i += blockSize { + for j := 0; j < c.cols; j += blockSize { + sendChan <- subMul{ + i: i, + j: j, + } + } + } + close(sendChan) + wg.Wait() +} + +// computeNumBlocks says how many blocks there are to compute. maxKLen says the length of the +// k dimension, parBlocks is the number of blocks that could be computed in parallel +// (the submatrices in i and j). expect is the full number of blocks that will be computed. +func computeNumBlocks64(a, b general64, aTrans, bTrans bool) (maxKLen, parBlocks int) { + aRowBlocks := a.rows / blockSize + if a.rows%blockSize != 0 { + aRowBlocks++ + } + aColBlocks := a.cols / blockSize + if a.cols%blockSize != 0 { + aColBlocks++ + } + bRowBlocks := b.rows / blockSize + if b.rows%blockSize != 0 { + bRowBlocks++ + } + bColBlocks := b.cols / blockSize + if b.cols%blockSize != 0 { + bColBlocks++ + } + + switch { + case !aTrans && !bTrans: + // Cij = \sum_k Aik Bki + maxKLen = a.cols + parBlocks = aRowBlocks * bColBlocks + case aTrans && !bTrans: + // Cij = \sum_k Aki Bkj + maxKLen = a.rows + parBlocks = aColBlocks * bColBlocks + case !aTrans && bTrans: + // Cij = \sum_k Aik Bjk + maxKLen = a.cols + parBlocks = aRowBlocks * bRowBlocks + case aTrans && bTrans: + // Cij = \sum_k Aki Bjk + maxKLen = a.rows + parBlocks = aColBlocks * bRowBlocks + } + return +} + +// dgemmSerial is serial matrix multiply +func dgemmSerial(tA, tB blas.Transpose, a, b, c general64, alpha float64) { + switch { + case tA == blas.NoTrans && tB == blas.NoTrans: + dgemmSerialNotNot(a, b, c, alpha) + return + case tA != blas.NoTrans && tB == blas.NoTrans: + dgemmSerialTransNot(a, b, c, alpha) + return + case tA == blas.NoTrans && tB != blas.NoTrans: + dgemmSerialNotTrans(a, b, c, alpha) + return + case tA != blas.NoTrans && tB != blas.NoTrans: + dgemmSerialTransTrans(a, b, c, alpha) + return + default: + panic("unreachable") + } +} + +// dgemmSerial where neither a nor b are transposed +func dgemmSerialNotNot(a, b, c general64, alpha float64) { + if debug { + if a.cols != b.rows { + panic("inner dimension mismatch") + } + if a.rows != c.rows { + panic("outer dimension mismatch") + } + if b.cols != c.cols { + panic("outer dimension mismatch") + } + } + + // This style is used instead of the literal [i*stride +j]) is used because + // approximately 5 times faster as of go 1.3. + for i := 0; i < a.rows; i++ { + ctmp := c.data[i*c.stride : i*c.stride+c.cols] + for l, v := range a.data[i*a.stride : i*a.stride+a.cols] { + tmp := alpha * v + if tmp != 0 { + asm.DaxpyUnitary(tmp, b.data[l*b.stride:l*b.stride+b.cols], ctmp, ctmp) + } + } + } +} + +// dgemmSerial where neither a is transposed and b is not +func dgemmSerialTransNot(a, b, c general64, alpha float64) { + if debug { + if a.rows != b.rows { + fmt.Println(a.rows, b.rows) + panic("inner dimension mismatch") + } + if a.cols != c.rows { + panic("outer dimension mismatch") + } + if b.cols != c.cols { + panic("outer dimension mismatch") + } + } + + // This style is used instead of the literal [i*stride +j]) is used because + // approximately 5 times faster as of go 1.3. + for l := 0; l < a.rows; l++ { + btmp := b.data[l*b.stride : l*b.stride+b.cols] + for i, v := range a.data[l*a.stride : l*a.stride+a.cols] { + tmp := alpha * v + ctmp := c.data[i*c.stride : i*c.stride+c.cols] + if tmp != 0 { + asm.DaxpyUnitary(tmp, btmp, ctmp, ctmp) + } + } + } +} + +// dgemmSerial where neither a is not transposed and b is +func dgemmSerialNotTrans(a, b, c general64, alpha float64) { + if debug { + if a.cols != b.cols { + panic("inner dimension mismatch") + } + if a.rows != c.rows { + panic("outer dimension mismatch") + } + if b.rows != c.cols { + panic("outer dimension mismatch") + } + } + + // This style is used instead of the literal [i*stride +j]) is used because + // approximately 5 times faster as of go 1.3. + for i := 0; i < a.rows; i++ { + atmp := a.data[i*a.stride : i*a.stride+a.cols] + ctmp := c.data[i*c.stride : i*c.stride+c.cols] + for j := 0; j < b.rows; j++ { + ctmp[j] += alpha * asm.DdotUnitary(atmp, b.data[j*b.stride:j*b.stride+b.cols]) + } + } + +} + +// dgemmSerial where both are transposed +func dgemmSerialTransTrans(a, b, c general64, alpha float64) { + if debug { + if a.rows != b.cols { + panic("inner dimension mismatch") + } + if a.cols != c.rows { + panic("outer dimension mismatch") + } + if b.rows != c.cols { + panic("outer dimension mismatch") + } + } + + // This style is used instead of the literal [i*stride +j]) is used because + // approximately 5 times faster as of go 1.3. + for l := 0; l < a.rows; l++ { + for i, v := range a.data[l*a.stride : l*a.stride+a.cols] { + ctmp := c.data[i*c.stride : i*c.stride+c.cols] + if v != 0 { + tmp := alpha * v + if tmp != 0 { + asm.DaxpyInc(tmp, b.data[l:], ctmp, uintptr(b.rows), uintptr(b.stride), 1, 0, 0) + } + } + } + } +} diff --git a/vendor/github.com/gonum/blas/native/doc.go b/vendor/github.com/gonum/blas/native/doc.go new file mode 100644 index 00000000..cb63fe77 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/doc.go @@ -0,0 +1,88 @@ +// Copyright ©2015 The Gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Ensure changes made to blas/native are reflected in blas/cgo where relevant. + +/* +Package native is a Go implementation of the BLAS API. This implementation +panics when the input arguments are invalid as per the standard, for example +if a vector increment is zero. Please note that the treatment of NaN values +is not specified, and differs among the BLAS implementations. +github.com/gonum/blas/blas64 provides helpful wrapper functions to the BLAS +interface. The rest of this text describes the layout of the data for the input types. + +Please note that in the function documentation, x[i] refers to the i^th element +of the vector, which will be different from the i^th element of the slice if +incX != 1. + +See http://www.netlib.org/lapack/explore-html/d4/de1/_l_i_c_e_n_s_e_source.html +for more license information. + +Vector arguments are effectively strided slices. They have two input arguments, +a number of elements, n, and an increment, incX. The increment specifies the +distance between elements of the vector. The actual Go slice may be longer +than necessary. +The increment may be positive or negative, except in functions with only +a single vector argument where the increment may only be positive. If the increment +is negative, s[0] is the last element in the slice. Note that this is not the same +as counting backward from the end of the slice, as len(s) may be longer than +necessary. So, for example, if n = 5 and incX = 3, the elements of s are + [0 * * 1 * * 2 * * 3 * * 4 * * * ...] +where ∗ elements are never accessed. If incX = -3, the same elements are +accessed, just in reverse order (4, 3, 2, 1, 0). + +Dense matrices are specified by a number of rows, a number of columns, and a stride. +The stride specifies the number of entries in the slice between the first element +of successive rows. The stride must be at least as large as the number of columns +but may be longer. + [a00 ... a0n a0* ... a1stride-1 a21 ... amn am* ... amstride-1] +Thus, dense[i*ld + j] refers to the {i, j}th element of the matrix. + +Symmetric and triangular matrices (non-packed) are stored identically to Dense, +except that only elements in one triangle of the matrix are accessed. + +Packed symmetric and packed triangular matrices are laid out with the entries +condensed such that all of the unreferenced elements are removed. So, the upper triangular +matrix + [ + 1 2 3 + 0 4 5 + 0 0 6 + ] +and the lower-triangular matrix + [ + 1 0 0 + 2 3 0 + 4 5 6 + ] +will both be compacted as [1 2 3 4 5 6]. The (i, j) element of the original +dense matrix can be found at element i*n - (i-1)*i/2 + j for upper triangular, +and at element i * (i+1) /2 + j for lower triangular. + +Banded matrices are laid out in a compact format, constructed by removing the +zeros in the rows and aligning the diagonals. For example, the matrix + [ + 1 2 3 0 0 0 + 4 5 6 7 0 0 + 0 8 9 10 11 0 + 0 0 12 13 14 15 + 0 0 0 16 17 18 + 0 0 0 0 19 20 + ] + +implicitly becomes (∗ entries are never accessed) + [ + * 1 2 3 + 4 5 6 7 + 8 9 10 11 + 12 13 14 15 + 16 17 18 * + 19 20 * * + ] +which is given to the BLAS routine as [∗ 1 2 3 4 ...]. + +See http://www.crest.iu.edu/research/mtl/reference/html/banded.html +for more information +*/ +package native diff --git a/vendor/github.com/gonum/blas/native/general_double.go b/vendor/github.com/gonum/blas/native/general_double.go new file mode 100644 index 00000000..0fa6cb74 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/general_double.go @@ -0,0 +1,155 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "errors" + "fmt" + "math" +) + +func newGeneral64(r, c int) general64 { + return general64{ + data: make([]float64, r*c), + rows: r, + cols: c, + stride: c, + } +} + +type general64 struct { + data []float64 + rows, cols int + stride int +} + +// adds element-wise into receiver. rows and columns must match +func (g general64) add(h general64) { + if debug { + if g.rows != h.rows { + panic("blas: row size mismatch") + } + if g.cols != h.cols { + panic("blas: col size mismatch") + } + } + for i := 0; i < g.rows; i++ { + gtmp := g.data[i*g.stride : i*g.stride+g.cols] + for j, v := range h.data[i*h.stride : i*h.stride+h.cols] { + gtmp[j] += v + } + } +} + +// at returns the value at the ith row and jth column. For speed reasons, the +// rows and columns are not bounds checked. +func (g general64) at(i, j int) float64 { + if debug { + if i < 0 || i >= g.rows { + panic("blas: row out of bounds") + } + if j < 0 || j >= g.cols { + panic("blas: col out of bounds") + } + } + return g.data[i*g.stride+j] +} + +func (g general64) check(c byte) error { + if g.rows < 0 { + return errors.New("blas: rows < 0") + } + if g.cols < 0 { + return errors.New("blas: cols < 0") + } + if g.stride < 1 { + return errors.New("blas: stride < 1") + } + if g.stride < g.cols { + return errors.New("blas: illegal stride") + } + if (g.rows-1)*g.stride+g.cols > len(g.data) { + return fmt.Errorf("blas: index of %c out of range", c) + } + return nil +} + +func (g general64) clone() general64 { + data := make([]float64, len(g.data)) + copy(data, g.data) + return general64{ + data: data, + rows: g.rows, + cols: g.cols, + stride: g.stride, + } +} + +// assumes they are the same size +func (g general64) copy(h general64) { + if debug { + if g.rows != h.rows { + panic("blas: row mismatch") + } + if g.cols != h.cols { + panic("blas: col mismatch") + } + } + for k := 0; k < g.rows; k++ { + copy(g.data[k*g.stride:(k+1)*g.stride], h.data[k*h.stride:(k+1)*h.stride]) + } +} + +func (g general64) equal(a general64) bool { + if g.rows != a.rows || g.cols != a.cols || g.stride != a.stride { + return false + } + for i, v := range g.data { + if a.data[i] != v { + return false + } + } + return true +} + +/* +// print is to aid debugging. Commented out to avoid fmt import +func (g general64) print() { + fmt.Println("r = ", g.rows, "c = ", g.cols, "stride: ", g.stride) + for i := 0; i < g.rows; i++ { + fmt.Println(g.data[i*g.stride : (i+1)*g.stride]) + } + +} +*/ + +func (g general64) view(i, j, r, c int) general64 { + if debug { + if i < 0 || i+r > g.rows { + panic("blas: row out of bounds") + } + if j < 0 || j+c > g.cols { + panic("blas: col out of bounds") + } + } + return general64{ + data: g.data[i*g.stride+j : (i+r-1)*g.stride+j+c], + rows: r, + cols: c, + stride: g.stride, + } +} + +func (g general64) equalWithinAbs(a general64, tol float64) bool { + if g.rows != a.rows || g.cols != a.cols || g.stride != a.stride { + return false + } + for i, v := range g.data { + if math.Abs(a.data[i]-v) > tol { + return false + } + } + return true +} diff --git a/vendor/github.com/gonum/blas/native/general_single.go b/vendor/github.com/gonum/blas/native/general_single.go new file mode 100644 index 00000000..bf648e5c --- /dev/null +++ b/vendor/github.com/gonum/blas/native/general_single.go @@ -0,0 +1,157 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "errors" + "fmt" + math "github.com/gonum/blas/native/internal/math32" +) + +func newGeneral32(r, c int) general32 { + return general32{ + data: make([]float32, r*c), + rows: r, + cols: c, + stride: c, + } +} + +type general32 struct { + data []float32 + rows, cols int + stride int +} + +// adds element-wise into receiver. rows and columns must match +func (g general32) add(h general32) { + if debug { + if g.rows != h.rows { + panic("blas: row size mismatch") + } + if g.cols != h.cols { + panic("blas: col size mismatch") + } + } + for i := 0; i < g.rows; i++ { + gtmp := g.data[i*g.stride : i*g.stride+g.cols] + for j, v := range h.data[i*h.stride : i*h.stride+h.cols] { + gtmp[j] += v + } + } +} + +// at returns the value at the ith row and jth column. For speed reasons, the +// rows and columns are not bounds checked. +func (g general32) at(i, j int) float32 { + if debug { + if i < 0 || i >= g.rows { + panic("blas: row out of bounds") + } + if j < 0 || j >= g.cols { + panic("blas: col out of bounds") + } + } + return g.data[i*g.stride+j] +} + +func (g general32) check(c byte) error { + if g.rows < 0 { + return errors.New("blas: rows < 0") + } + if g.cols < 0 { + return errors.New("blas: cols < 0") + } + if g.stride < 1 { + return errors.New("blas: stride < 1") + } + if g.stride < g.cols { + return errors.New("blas: illegal stride") + } + if (g.rows-1)*g.stride+g.cols > len(g.data) { + return fmt.Errorf("blas: index of %c out of range", c) + } + return nil +} + +func (g general32) clone() general32 { + data := make([]float32, len(g.data)) + copy(data, g.data) + return general32{ + data: data, + rows: g.rows, + cols: g.cols, + stride: g.stride, + } +} + +// assumes they are the same size +func (g general32) copy(h general32) { + if debug { + if g.rows != h.rows { + panic("blas: row mismatch") + } + if g.cols != h.cols { + panic("blas: col mismatch") + } + } + for k := 0; k < g.rows; k++ { + copy(g.data[k*g.stride:(k+1)*g.stride], h.data[k*h.stride:(k+1)*h.stride]) + } +} + +func (g general32) equal(a general32) bool { + if g.rows != a.rows || g.cols != a.cols || g.stride != a.stride { + return false + } + for i, v := range g.data { + if a.data[i] != v { + return false + } + } + return true +} + +/* +// print is to aid debugging. Commented out to avoid fmt import +func (g general32) print() { + fmt.Println("r = ", g.rows, "c = ", g.cols, "stride: ", g.stride) + for i := 0; i < g.rows; i++ { + fmt.Println(g.data[i*g.stride : (i+1)*g.stride]) + } + +} +*/ + +func (g general32) view(i, j, r, c int) general32 { + if debug { + if i < 0 || i+r > g.rows { + panic("blas: row out of bounds") + } + if j < 0 || j+c > g.cols { + panic("blas: col out of bounds") + } + } + return general32{ + data: g.data[i*g.stride+j : (i+r-1)*g.stride+j+c], + rows: r, + cols: c, + stride: g.stride, + } +} + +func (g general32) equalWithinAbs(a general32, tol float32) bool { + if g.rows != a.rows || g.cols != a.cols || g.stride != a.stride { + return false + } + for i, v := range g.data { + if math.Abs(a.data[i]-v) > tol { + return false + } + } + return true +} diff --git a/vendor/github.com/gonum/blas/native/internal/math32/math.go b/vendor/github.com/gonum/blas/native/internal/math32/math.go new file mode 100644 index 00000000..b33401b9 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/internal/math32/math.go @@ -0,0 +1,113 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package math32 provides float32 versions of standard library math package +// routines used by gonum/blas/native. +package math32 + +import ( + "math" +) + +const ( + unan = 0x7fc00000 + uinf = 0x7f800000 + uneginf = 0xff800000 + mask = 0x7f8 >> 3 + shift = 32 - 8 - 1 + bias = 127 +) + +// Abs returns the absolute value of x. +// +// Special cases are: +// Abs(±Inf) = +Inf +// Abs(NaN) = NaN +func Abs(x float32) float32 { + switch { + case x < 0: + return -x + case x == 0: + return 0 // return correctly abs(-0) + } + return x +} + +// Copysign returns a value with the magnitude +// of x and the sign of y. +func Copysign(x, y float32) float32 { + const sign = 1 << 31 + return math.Float32frombits(math.Float32bits(x)&^sign | math.Float32bits(y)&sign) +} + +// Hypot returns Sqrt(p*p + q*q), taking care to avoid +// unnecessary overflow and underflow. +// +// Special cases are: +// Hypot(±Inf, q) = +Inf +// Hypot(p, ±Inf) = +Inf +// Hypot(NaN, q) = NaN +// Hypot(p, NaN) = NaN +func Hypot(p, q float32) float32 { + // special cases + switch { + case IsInf(p, 0) || IsInf(q, 0): + return Inf(1) + case IsNaN(p) || IsNaN(q): + return NaN() + } + if p < 0 { + p = -p + } + if q < 0 { + q = -q + } + if p < q { + p, q = q, p + } + if p == 0 { + return 0 + } + q = q / p + return p * Sqrt(1+q*q) +} + +// Inf returns positive infinity if sign >= 0, negative infinity if sign < 0. +func Inf(sign int) float32 { + var v uint32 + if sign >= 0 { + v = uinf + } else { + v = uneginf + } + return math.Float32frombits(v) +} + +// IsInf reports whether f is an infinity, according to sign. +// If sign > 0, IsInf reports whether f is positive infinity. +// If sign < 0, IsInf reports whether f is negative infinity. +// If sign == 0, IsInf reports whether f is either infinity. +func IsInf(f float32, sign int) bool { + // Test for infinity by comparing against maximum float. + // To avoid the floating-point hardware, could use: + // x := math.Float32bits(f); + // return sign >= 0 && x == uinf || sign <= 0 && x == uneginf; + return sign >= 0 && f > math.MaxFloat32 || sign <= 0 && f < -math.MaxFloat32 +} + +// IsNaN reports whether f is an IEEE 754 ``not-a-number'' value. +func IsNaN(f float32) (is bool) { + // IEEE 754 says that only NaNs satisfy f != f. + // To avoid the floating-point hardware, could use: + // x := math.Float32bits(f); + // return uint32(x>>shift)&mask == mask && x != uinf && x != uneginf + return f != f +} + +// NaN returns an IEEE 754 ``not-a-number'' value. +func NaN() float32 { return math.Float32frombits(unan) } diff --git a/vendor/github.com/gonum/blas/native/internal/math32/sqrt.go b/vendor/github.com/gonum/blas/native/internal/math32/sqrt.go new file mode 100644 index 00000000..058b731d --- /dev/null +++ b/vendor/github.com/gonum/blas/native/internal/math32/sqrt.go @@ -0,0 +1,25 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build !amd64 noasm + +package math32 + +import ( + "math" +) + +// Sqrt returns the square root of x. +// +// Special cases are: +// Sqrt(+Inf) = +Inf +// Sqrt(±0) = ±0 +// Sqrt(x < 0) = NaN +// Sqrt(NaN) = NaN +func Sqrt(x float32) float32 { + // FIXME(kortschak): Direct translation of the math package + // asm code for 386 fails to build. No test hardware is available + // for arm, so using conversion instead. + return float32(math.Sqrt(float64(x))) +} diff --git a/vendor/github.com/gonum/blas/native/internal/math32/sqrt_amd64.go b/vendor/github.com/gonum/blas/native/internal/math32/sqrt_amd64.go new file mode 100644 index 00000000..ca11639e --- /dev/null +++ b/vendor/github.com/gonum/blas/native/internal/math32/sqrt_amd64.go @@ -0,0 +1,20 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build !noasm + +package math32 + +// Sqrt returns the square root of x. +// +// Special cases are: +// Sqrt(+Inf) = +Inf +// Sqrt(±0) = ±0 +// Sqrt(x < 0) = NaN +// Sqrt(NaN) = NaN +func Sqrt(x float32) float32 diff --git a/vendor/github.com/gonum/blas/native/internal/math32/sqrt_amd64.s b/vendor/github.com/gonum/blas/native/internal/math32/sqrt_amd64.s new file mode 100644 index 00000000..595ce5d5 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/internal/math32/sqrt_amd64.s @@ -0,0 +1,20 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build !noasm + +// TODO(kortschak): use textflag.h after we drop Go 1.3 support +//#include "textflag.h" +// Don't insert stack check preamble. +#define NOSPLIT 4 + +// func Sqrt(x float32) float32 +TEXT ·Sqrt(SB),NOSPLIT,$0 + SQRTSS x+0(FP), X0 + MOVSS X0, ret+8(FP) + RET diff --git a/vendor/github.com/gonum/blas/native/level1double.go b/vendor/github.com/gonum/blas/native/level1double.go new file mode 100644 index 00000000..0d77243f --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level1double.go @@ -0,0 +1,599 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +var _ blas.Float64Level1 = Implementation{} + +// Dnrm2 computes the Euclidean norm of a vector, +// sqrt(\sum_i x[i] * x[i]). +// This function returns 0 if incX is negative. +func (Implementation) Dnrm2(n int, x []float64, incX int) float64 { + if incX < 1 { + if incX == 0 { + panic(zeroIncX) + } + return 0 + } + if incX > 0 && (n-1)*incX >= len(x) { + panic(badX) + } + if n < 2 { + if n == 1 { + return math.Abs(x[0]) + } + if n == 0 { + return 0 + } + if n < 1 { + panic(negativeN) + } + } + var ( + scale float64 = 0 + sumSquares float64 = 1 + ) + if incX == 1 { + x = x[:n] + for _, v := range x { + absxi := math.Abs(v) + if scale < absxi { + sumSquares = 1 + sumSquares*(scale/absxi)*(scale/absxi) + scale = absxi + } else { + sumSquares = sumSquares + (absxi/scale)*(absxi/scale) + } + } + return scale * math.Sqrt(sumSquares) + } + for ix := 0; ix < n*incX; ix += incX { + val := x[ix] + if val == 0 { + continue + } + absxi := math.Abs(val) + if scale < absxi { + sumSquares = 1 + sumSquares*(scale/absxi)*(scale/absxi) + scale = absxi + } else { + sumSquares = sumSquares + (absxi/scale)*(absxi/scale) + } + } + return scale * math.Sqrt(sumSquares) +} + +// Dasum computes the sum of the absolute values of the elements of x. +// \sum_i |x[i]| +// Dasum returns 0 if incX is negative. +func (Implementation) Dasum(n int, x []float64, incX int) float64 { + var sum float64 + if n < 0 { + panic(negativeN) + } + if incX < 1 { + if incX == 0 { + panic(zeroIncX) + } + return 0 + } + if incX > 0 && (n-1)*incX >= len(x) { + panic(badX) + } + if incX == 1 { + x = x[:n] + for _, v := range x { + sum += math.Abs(v) + } + return sum + } + for i := 0; i < n; i++ { + sum += math.Abs(x[i*incX]) + } + return sum +} + +// Idamax returns the index of the largest element of x. If there are multiple +// such indices the earliest is returned. Idamax returns -1 if incX is negative or if +// n == 0. +func (Implementation) Idamax(n int, x []float64, incX int) int { + if incX < 1 { + if incX == 0 { + panic(zeroIncX) + } + return -1 + } + if incX > 0 && (n-1)*incX >= len(x) { + panic(badX) + } + if n < 2 { + if n == 1 { + return 0 + } + if n == 0 { + return -1 // Netlib returns invalid index when n == 0 + } + if n < 1 { + panic(negativeN) + } + } + idx := 0 + max := math.Abs(x[0]) + if incX == 1 { + for i, v := range x[:n] { + absV := math.Abs(v) + if absV > max { + max = absV + idx = i + } + } + return idx + } + ix := incX + for i := 1; i < n; i++ { + v := x[ix] + absV := math.Abs(v) + if absV > max { + max = absV + idx = i + } + ix += incX + } + return idx +} + +// Dswap exchanges the elements of two vectors. +// x[i], y[i] = y[i], x[i] for all i +func (Implementation) Dswap(n int, x []float64, incX int, y []float64, incY int) { + if n < 1 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if incX == 1 && incY == 1 { + x = x[:n] + for i, v := range x { + x[i], y[i] = y[i], v + } + return + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + for i := 0; i < n; i++ { + x[ix], y[iy] = y[iy], x[ix] + ix += incX + iy += incY + } +} + +// Dcopy copies the elements of x into the elements of y. +// y[i] = x[i] for all i +func (Implementation) Dcopy(n int, x []float64, incX int, y []float64, incY int) { + if n < 1 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if incX == 1 && incY == 1 { + copy(y[:n], x[:n]) + return + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + for i := 0; i < n; i++ { + y[iy] = x[ix] + ix += incX + iy += incY + } +} + +// Daxpy adds alpha times x to y +// y[i] += alpha * x[i] for all i +func (Implementation) Daxpy(n int, alpha float64, x []float64, incX int, y []float64, incY int) { + if n < 1 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if alpha == 0 { + return + } + if incX == 1 && incY == 1 { + if len(x) < n { + panic(badLenX) + } + if len(y) < n { + panic(badLenY) + } + asm.DaxpyUnitary(alpha, x[:n], y, y) + return + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + if ix >= len(x) || ix+(n-1)*incX >= len(x) { + panic(badLenX) + } + if iy >= len(y) || iy+(n-1)*incY >= len(y) { + panic(badLenY) + } + asm.DaxpyInc(alpha, x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy)) +} + +// Drotg computes the plane rotation +// _ _ _ _ _ _ +// | c s | | a | | r | +// | -s c | * | b | = | 0 | +// ‾ ‾ ‾ ‾ ‾ ‾ +// where +// r = ±(a^2 + b^2) +// c = a/r, the cosine of the plane rotation +// s = b/r, the sine of the plane rotation +// +// NOTE: There is a discrepancy between the refence implementation and the BLAS +// technical manual regarding the sign for r when a or b are zero. +// Drotg agrees with the definition in the manual and other +// common BLAS implementations. +func (Implementation) Drotg(a, b float64) (c, s, r, z float64) { + if b == 0 && a == 0 { + return 1, 0, a, 0 + } + absA := math.Abs(a) + absB := math.Abs(b) + aGTb := absA > absB + r = math.Hypot(a, b) + if aGTb { + r = math.Copysign(r, a) + } else { + r = math.Copysign(r, b) + } + c = a / r + s = b / r + if aGTb { + z = s + } else if c != 0 { // r == 0 case handled above + z = 1 / c + } else { + z = 1 + } + return +} + +// Drotmg computes the modified Givens rotation. See +// http://www.netlib.org/lapack/explore-html/df/deb/drotmg_8f.html +// for more details. +func (Implementation) Drotmg(d1, d2, x1, y1 float64) (p blas.DrotmParams, rd1, rd2, rx1 float64) { + var p1, p2, q1, q2, u float64 + + const ( + gam = 4096.0 + gamsq = 16777216.0 + rgamsq = 5.9604645e-8 + ) + + if d1 < 0 { + p.Flag = blas.Rescaling + return + } + + p2 = d2 * y1 + if p2 == 0 { + p.Flag = blas.Identity + rd1 = d1 + rd2 = d2 + rx1 = x1 + return + } + p1 = d1 * x1 + q2 = p2 * y1 + q1 = p1 * x1 + + absQ1 := math.Abs(q1) + absQ2 := math.Abs(q2) + + if absQ1 < absQ2 && q2 < 0 { + p.Flag = blas.Rescaling + return + } + + if d1 == 0 { + p.Flag = blas.Diagonal + p.H[0] = p1 / p2 + p.H[3] = x1 / y1 + u = 1 + p.H[0]*p.H[3] + rd1, rd2 = d2/u, d1/u + rx1 = y1 / u + return + } + + // Now we know that d1 != 0, and d2 != 0. If d2 == 0, it would be caught + // when p2 == 0, and if d1 == 0, then it is caught above + + if absQ1 > absQ2 { + p.H[1] = -y1 / x1 + p.H[2] = p2 / p1 + u = 1 - p.H[2]*p.H[1] + rd1 = d1 + rd2 = d2 + rx1 = x1 + p.Flag = blas.OffDiagonal + // u must be greater than zero because |q1| > |q2|, so check from netlib + // is unnecessary + // This is left in for ease of comparison with complex routines + //if u > 0 { + rd1 /= u + rd2 /= u + rx1 *= u + //} + } else { + p.Flag = blas.Diagonal + p.H[0] = p1 / p2 + p.H[3] = x1 / y1 + u = 1 + p.H[0]*p.H[3] + rd1 = d2 / u + rd2 = d1 / u + rx1 = y1 * u + } + + for rd1 <= rgamsq || rd1 >= gamsq { + if p.Flag == blas.OffDiagonal { + p.H[0] = 1 + p.H[3] = 1 + p.Flag = blas.Rescaling + } else if p.Flag == blas.Diagonal { + p.H[1] = -1 + p.H[2] = 1 + p.Flag = blas.Rescaling + } + if rd1 <= rgamsq { + rd1 *= gam * gam + rx1 /= gam + p.H[0] /= gam + p.H[2] /= gam + } else { + rd1 /= gam * gam + rx1 *= gam + p.H[0] *= gam + p.H[2] *= gam + } + } + + for math.Abs(rd2) <= rgamsq || math.Abs(rd2) >= gamsq { + if p.Flag == blas.OffDiagonal { + p.H[0] = 1 + p.H[3] = 1 + p.Flag = blas.Rescaling + } else if p.Flag == blas.Diagonal { + p.H[1] = -1 + p.H[2] = 1 + p.Flag = blas.Rescaling + } + if math.Abs(rd2) <= rgamsq { + rd2 *= gam * gam + p.H[1] /= gam + p.H[3] /= gam + } else { + rd2 /= gam * gam + p.H[1] *= gam + p.H[3] *= gam + } + } + return +} + +// Drot applies a plane transformation. +// x[i] = c * x[i] + s * y[i] +// y[i] = c * y[i] - s * x[i] +func (Implementation) Drot(n int, x []float64, incX int, y []float64, incY int, c float64, s float64) { + if n < 1 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if incX == 1 && incY == 1 { + x = x[:n] + for i, vx := range x { + vy := y[i] + x[i], y[i] = c*vx+s*vy, c*vy-s*vx + } + return + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + for i := 0; i < n; i++ { + vx := x[ix] + vy := y[iy] + x[ix], y[iy] = c*vx+s*vy, c*vy-s*vx + ix += incX + iy += incY + } +} + +// Drotm applies the modified Givens rotation to the 2×n matrix. +func (Implementation) Drotm(n int, x []float64, incX int, y []float64, incY int, p blas.DrotmParams) { + if n <= 0 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + + var h11, h12, h21, h22 float64 + var ix, iy int + switch p.Flag { + case blas.Identity: + return + case blas.Rescaling: + h11 = p.H[0] + h12 = p.H[2] + h21 = p.H[1] + h22 = p.H[3] + case blas.OffDiagonal: + h11 = 1 + h12 = p.H[2] + h21 = p.H[1] + h22 = 1 + case blas.Diagonal: + h11 = p.H[0] + h12 = 1 + h21 = -1 + h22 = p.H[3] + } + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + if incX == 1 && incY == 1 { + x = x[:n] + for i, vx := range x { + vy := y[i] + x[i], y[i] = vx*h11+vy*h12, vx*h21+vy*h22 + } + return + } + for i := 0; i < n; i++ { + vx := x[ix] + vy := y[iy] + x[ix], y[iy] = vx*h11+vy*h12, vx*h21+vy*h22 + ix += incX + iy += incY + } + return +} + +// Dscal scales x by alpha. +// x[i] *= alpha +// Dscal has no effect if incX < 0. +func (Implementation) Dscal(n int, alpha float64, x []float64, incX int) { + if incX < 1 { + if incX == 0 { + panic(zeroIncX) + } + return + } + if incX > 0 && (n-1)*incX >= len(x) { + panic(badX) + } + if n < 1 { + if n == 0 { + return + } + if n < 1 { + panic(negativeN) + } + } + if alpha == 0 { + if incX == 1 { + x = x[:n] + for i := range x { + x[i] = 0 + } + } + for ix := 0; ix < n*incX; ix += incX { + x[ix] = 0 + } + } + if incX == 1 { + x = x[:n] + for i := range x { + x[i] *= alpha + } + return + } + for ix := 0; ix < n*incX; ix += incX { + x[ix] *= alpha + } + return +} diff --git a/vendor/github.com/gonum/blas/native/level1double_ddot.go b/vendor/github.com/gonum/blas/native/level1double_ddot.go new file mode 100644 index 00000000..7af4e042 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level1double_ddot.go @@ -0,0 +1,46 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/internal/asm" +) + +// Ddot computes the dot product of the two vectors +// \sum_i x[i]*y[i] +func (Implementation) Ddot(n int, x []float64, incX int, y []float64, incY int) float64 { + if n < 0 { + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if incX == 1 && incY == 1 { + if len(x) < n { + panic(badLenX) + } + if len(y) < n { + panic(badLenY) + } + return asm.DdotUnitary(x[:n], y) + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + if ix >= len(x) || ix+(n-1)*incX >= len(x) { + panic(badLenX) + } + if iy >= len(y) || iy+(n-1)*incY >= len(y) { + panic(badLenY) + } + return asm.DdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy)) +} diff --git a/vendor/github.com/gonum/blas/native/level1single.go b/vendor/github.com/gonum/blas/native/level1single.go new file mode 100644 index 00000000..6bcba83f --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level1single.go @@ -0,0 +1,623 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + math "github.com/gonum/blas/native/internal/math32" + + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +var _ blas.Float32Level1 = Implementation{} + +// Snrm2 computes the Euclidean norm of a vector, +// sqrt(\sum_i x[i] * x[i]). +// This function returns 0 if incX is negative. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Snrm2(n int, x []float32, incX int) float32 { + if incX < 1 { + if incX == 0 { + panic(zeroIncX) + } + return 0 + } + if incX > 0 && (n-1)*incX >= len(x) { + panic(badX) + } + if n < 2 { + if n == 1 { + return math.Abs(x[0]) + } + if n == 0 { + return 0 + } + if n < 1 { + panic(negativeN) + } + } + var ( + scale float32 = 0 + sumSquares float32 = 1 + ) + if incX == 1 { + x = x[:n] + for _, v := range x { + absxi := math.Abs(v) + if scale < absxi { + sumSquares = 1 + sumSquares*(scale/absxi)*(scale/absxi) + scale = absxi + } else { + sumSquares = sumSquares + (absxi/scale)*(absxi/scale) + } + } + return scale * math.Sqrt(sumSquares) + } + for ix := 0; ix < n*incX; ix += incX { + val := x[ix] + if val == 0 { + continue + } + absxi := math.Abs(val) + if scale < absxi { + sumSquares = 1 + sumSquares*(scale/absxi)*(scale/absxi) + scale = absxi + } else { + sumSquares = sumSquares + (absxi/scale)*(absxi/scale) + } + } + return scale * math.Sqrt(sumSquares) +} + +// Sasum computes the sum of the absolute values of the elements of x. +// \sum_i |x[i]| +// Sasum returns 0 if incX is negative. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sasum(n int, x []float32, incX int) float32 { + var sum float32 + if n < 0 { + panic(negativeN) + } + if incX < 1 { + if incX == 0 { + panic(zeroIncX) + } + return 0 + } + if incX > 0 && (n-1)*incX >= len(x) { + panic(badX) + } + if incX == 1 { + x = x[:n] + for _, v := range x { + sum += math.Abs(v) + } + return sum + } + for i := 0; i < n; i++ { + sum += math.Abs(x[i*incX]) + } + return sum +} + +// Isamax returns the index of the largest element of x. If there are multiple +// such indices the earliest is returned. Idamax returns -1 if incX is negative or if +// n == 0. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Isamax(n int, x []float32, incX int) int { + if incX < 1 { + if incX == 0 { + panic(zeroIncX) + } + return -1 + } + if incX > 0 && (n-1)*incX >= len(x) { + panic(badX) + } + if n < 2 { + if n == 1 { + return 0 + } + if n == 0 { + return -1 // Netlib returns invalid index when n == 0 + } + if n < 1 { + panic(negativeN) + } + } + idx := 0 + max := math.Abs(x[0]) + if incX == 1 { + for i, v := range x[:n] { + absV := math.Abs(v) + if absV > max { + max = absV + idx = i + } + } + return idx + } + ix := incX + for i := 1; i < n; i++ { + v := x[ix] + absV := math.Abs(v) + if absV > max { + max = absV + idx = i + } + ix += incX + } + return idx +} + +// Sswap exchanges the elements of two vectors. +// x[i], y[i] = y[i], x[i] for all i +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sswap(n int, x []float32, incX int, y []float32, incY int) { + if n < 1 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if incX == 1 && incY == 1 { + x = x[:n] + for i, v := range x { + x[i], y[i] = y[i], v + } + return + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + for i := 0; i < n; i++ { + x[ix], y[iy] = y[iy], x[ix] + ix += incX + iy += incY + } +} + +// Scopy copies the elements of x into the elements of y. +// y[i] = x[i] for all i +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Scopy(n int, x []float32, incX int, y []float32, incY int) { + if n < 1 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if incX == 1 && incY == 1 { + copy(y[:n], x[:n]) + return + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + for i := 0; i < n; i++ { + y[iy] = x[ix] + ix += incX + iy += incY + } +} + +// Saxpy adds alpha times x to y +// y[i] += alpha * x[i] for all i +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Saxpy(n int, alpha float32, x []float32, incX int, y []float32, incY int) { + if n < 1 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if alpha == 0 { + return + } + if incX == 1 && incY == 1 { + if len(x) < n { + panic(badLenX) + } + if len(y) < n { + panic(badLenY) + } + asm.SaxpyUnitary(alpha, x[:n], y, y) + return + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + if ix >= len(x) || ix+(n-1)*incX >= len(x) { + panic(badLenX) + } + if iy >= len(y) || iy+(n-1)*incY >= len(y) { + panic(badLenY) + } + asm.SaxpyInc(alpha, x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy)) +} + +// Srotg computes the plane rotation +// _ _ _ _ _ _ +// | c s | | a | | r | +// | -s c | * | b | = | 0 | +// ‾ ‾ ‾ ‾ ‾ ‾ +// where +// r = ±(a^2 + b^2) +// c = a/r, the cosine of the plane rotation +// s = b/r, the sine of the plane rotation +// +// NOTE: There is a discrepancy between the refence implementation and the BLAS +// technical manual regarding the sign for r when a or b are zero. +// Srotg agrees with the definition in the manual and other +// common BLAS implementations. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Srotg(a, b float32) (c, s, r, z float32) { + if b == 0 && a == 0 { + return 1, 0, a, 0 + } + absA := math.Abs(a) + absB := math.Abs(b) + aGTb := absA > absB + r = math.Hypot(a, b) + if aGTb { + r = math.Copysign(r, a) + } else { + r = math.Copysign(r, b) + } + c = a / r + s = b / r + if aGTb { + z = s + } else if c != 0 { // r == 0 case handled above + z = 1 / c + } else { + z = 1 + } + return +} + +// Srotmg computes the modified Givens rotation. See +// http://www.netlib.org/lapack/explore-html/df/deb/drotmg_8f.html +// for more details. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Srotmg(d1, d2, x1, y1 float32) (p blas.SrotmParams, rd1, rd2, rx1 float32) { + var p1, p2, q1, q2, u float32 + + const ( + gam = 4096.0 + gamsq = 16777216.0 + rgamsq = 5.9604645e-8 + ) + + if d1 < 0 { + p.Flag = blas.Rescaling + return + } + + p2 = d2 * y1 + if p2 == 0 { + p.Flag = blas.Identity + rd1 = d1 + rd2 = d2 + rx1 = x1 + return + } + p1 = d1 * x1 + q2 = p2 * y1 + q1 = p1 * x1 + + absQ1 := math.Abs(q1) + absQ2 := math.Abs(q2) + + if absQ1 < absQ2 && q2 < 0 { + p.Flag = blas.Rescaling + return + } + + if d1 == 0 { + p.Flag = blas.Diagonal + p.H[0] = p1 / p2 + p.H[3] = x1 / y1 + u = 1 + p.H[0]*p.H[3] + rd1, rd2 = d2/u, d1/u + rx1 = y1 / u + return + } + + // Now we know that d1 != 0, and d2 != 0. If d2 == 0, it would be caught + // when p2 == 0, and if d1 == 0, then it is caught above + + if absQ1 > absQ2 { + p.H[1] = -y1 / x1 + p.H[2] = p2 / p1 + u = 1 - p.H[2]*p.H[1] + rd1 = d1 + rd2 = d2 + rx1 = x1 + p.Flag = blas.OffDiagonal + // u must be greater than zero because |q1| > |q2|, so check from netlib + // is unnecessary + // This is left in for ease of comparison with complex routines + //if u > 0 { + rd1 /= u + rd2 /= u + rx1 *= u + //} + } else { + p.Flag = blas.Diagonal + p.H[0] = p1 / p2 + p.H[3] = x1 / y1 + u = 1 + p.H[0]*p.H[3] + rd1 = d2 / u + rd2 = d1 / u + rx1 = y1 * u + } + + for rd1 <= rgamsq || rd1 >= gamsq { + if p.Flag == blas.OffDiagonal { + p.H[0] = 1 + p.H[3] = 1 + p.Flag = blas.Rescaling + } else if p.Flag == blas.Diagonal { + p.H[1] = -1 + p.H[2] = 1 + p.Flag = blas.Rescaling + } + if rd1 <= rgamsq { + rd1 *= gam * gam + rx1 /= gam + p.H[0] /= gam + p.H[2] /= gam + } else { + rd1 /= gam * gam + rx1 *= gam + p.H[0] *= gam + p.H[2] *= gam + } + } + + for math.Abs(rd2) <= rgamsq || math.Abs(rd2) >= gamsq { + if p.Flag == blas.OffDiagonal { + p.H[0] = 1 + p.H[3] = 1 + p.Flag = blas.Rescaling + } else if p.Flag == blas.Diagonal { + p.H[1] = -1 + p.H[2] = 1 + p.Flag = blas.Rescaling + } + if math.Abs(rd2) <= rgamsq { + rd2 *= gam * gam + p.H[1] /= gam + p.H[3] /= gam + } else { + rd2 /= gam * gam + p.H[1] *= gam + p.H[3] *= gam + } + } + return +} + +// Srot applies a plane transformation. +// x[i] = c * x[i] + s * y[i] +// y[i] = c * y[i] - s * x[i] +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Srot(n int, x []float32, incX int, y []float32, incY int, c float32, s float32) { + if n < 1 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if incX == 1 && incY == 1 { + x = x[:n] + for i, vx := range x { + vy := y[i] + x[i], y[i] = c*vx+s*vy, c*vy-s*vx + } + return + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + for i := 0; i < n; i++ { + vx := x[ix] + vy := y[iy] + x[ix], y[iy] = c*vx+s*vy, c*vy-s*vx + ix += incX + iy += incY + } +} + +// Srotm applies the modified Givens rotation to the 2×n matrix. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Srotm(n int, x []float32, incX int, y []float32, incY int, p blas.SrotmParams) { + if n <= 0 { + if n == 0 { + return + } + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + + var h11, h12, h21, h22 float32 + var ix, iy int + switch p.Flag { + case blas.Identity: + return + case blas.Rescaling: + h11 = p.H[0] + h12 = p.H[2] + h21 = p.H[1] + h22 = p.H[3] + case blas.OffDiagonal: + h11 = 1 + h12 = p.H[2] + h21 = p.H[1] + h22 = 1 + case blas.Diagonal: + h11 = p.H[0] + h12 = 1 + h21 = -1 + h22 = p.H[3] + } + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + if incX == 1 && incY == 1 { + x = x[:n] + for i, vx := range x { + vy := y[i] + x[i], y[i] = vx*h11+vy*h12, vx*h21+vy*h22 + } + return + } + for i := 0; i < n; i++ { + vx := x[ix] + vy := y[iy] + x[ix], y[iy] = vx*h11+vy*h12, vx*h21+vy*h22 + ix += incX + iy += incY + } + return +} + +// Sscal scales x by alpha. +// x[i] *= alpha +// Sscal has no effect if incX < 0. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sscal(n int, alpha float32, x []float32, incX int) { + if incX < 1 { + if incX == 0 { + panic(zeroIncX) + } + return + } + if incX > 0 && (n-1)*incX >= len(x) { + panic(badX) + } + if n < 1 { + if n == 0 { + return + } + if n < 1 { + panic(negativeN) + } + } + if alpha == 0 { + if incX == 1 { + x = x[:n] + for i := range x { + x[i] = 0 + } + } + for ix := 0; ix < n*incX; ix += incX { + x[ix] = 0 + } + } + if incX == 1 { + x = x[:n] + for i := range x { + x[i] *= alpha + } + return + } + for ix := 0; ix < n*incX; ix += incX { + x[ix] *= alpha + } + return +} diff --git a/vendor/github.com/gonum/blas/native/level1single_dsdot.go b/vendor/github.com/gonum/blas/native/level1single_dsdot.go new file mode 100644 index 00000000..4665a010 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level1single_dsdot.go @@ -0,0 +1,50 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/internal/asm" +) + +// Dsdot computes the dot product of the two vectors +// \sum_i x[i]*y[i] +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Dsdot(n int, x []float32, incX int, y []float32, incY int) float64 { + if n < 0 { + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if incX == 1 && incY == 1 { + if len(x) < n { + panic(badLenX) + } + if len(y) < n { + panic(badLenY) + } + return asm.DsdotUnitary(x[:n], y) + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + if ix >= len(x) || ix+(n-1)*incX >= len(x) { + panic(badLenX) + } + if iy >= len(y) || iy+(n-1)*incY >= len(y) { + panic(badLenY) + } + return asm.DsdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy)) +} diff --git a/vendor/github.com/gonum/blas/native/level1single_sdot.go b/vendor/github.com/gonum/blas/native/level1single_sdot.go new file mode 100644 index 00000000..1e5b5656 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level1single_sdot.go @@ -0,0 +1,50 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/internal/asm" +) + +// Sdot computes the dot product of the two vectors +// \sum_i x[i]*y[i] +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sdot(n int, x []float32, incX int, y []float32, incY int) float32 { + if n < 0 { + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if incX == 1 && incY == 1 { + if len(x) < n { + panic(badLenX) + } + if len(y) < n { + panic(badLenY) + } + return asm.SdotUnitary(x[:n], y) + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + if ix >= len(x) || ix+(n-1)*incX >= len(x) { + panic(badLenX) + } + if iy >= len(y) || iy+(n-1)*incY >= len(y) { + panic(badLenY) + } + return asm.SdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy)) +} diff --git a/vendor/github.com/gonum/blas/native/level1single_sdsdot.go b/vendor/github.com/gonum/blas/native/level1single_sdsdot.go new file mode 100644 index 00000000..d58be3d5 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level1single_sdsdot.go @@ -0,0 +1,50 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/internal/asm" +) + +// Sdsdot computes the dot product of the two vectors plus a constant +// alpha + \sum_i x[i]*y[i] +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sdsdot(n int, alpha float32, x []float32, incX int, y []float32, incY int) float32 { + if n < 0 { + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if incX == 1 && incY == 1 { + if len(x) < n { + panic(badLenX) + } + if len(y) < n { + panic(badLenY) + } + return alpha + float32(asm.DsdotUnitary(x[:n], y)) + } + var ix, iy int + if incX < 0 { + ix = (-n + 1) * incX + } + if incY < 0 { + iy = (-n + 1) * incY + } + if ix >= len(x) || ix+(n-1)*incX >= len(x) { + panic(badLenX) + } + if iy >= len(y) || iy+(n-1)*incY >= len(y) { + panic(badLenY) + } + return alpha + float32(asm.DsdotInc(x, y, uintptr(n), uintptr(incX), uintptr(incY), uintptr(ix), uintptr(iy))) +} diff --git a/vendor/github.com/gonum/blas/native/level2double.go b/vendor/github.com/gonum/blas/native/level2double.go new file mode 100644 index 00000000..6d595594 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level2double.go @@ -0,0 +1,2258 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +var _ blas.Float64Level2 = Implementation{} + +// Dgemv computes +// y = alpha * a * x + beta * y if tA = blas.NoTrans +// y = alpha * A^T * x + beta * y if tA = blas.Trans or blas.ConjTrans +// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. +func (Implementation) Dgemv(tA blas.Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + if lda < max(1, n) { + panic(badLdA) + } + + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + // Set up indexes + lenX := m + lenY := n + if tA == blas.NoTrans { + lenX = n + lenY = m + } + if (incX > 0 && (lenX-1)*incX >= len(x)) || (incX < 0 && (1-lenX)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (lenY-1)*incY >= len(y)) || (incY < 0 && (1-lenY)*incY >= len(y)) { + panic(badY) + } + if lda*(m-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + + // Quick return if possible + if m == 0 || n == 0 || (alpha == 0 && beta == 1) { + return + } + + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(lenY - 1) * incY + } + + // First form y := beta * y + if incY > 0 { + Implementation{}.Dscal(lenY, beta, y, incY) + } else { + Implementation{}.Dscal(lenY, beta, y, -incY) + } + + if alpha == 0 { + return + } + + // Form y := alpha * A * x + y + if tA == blas.NoTrans { + if incX == 1 && incY == 1 { + for i := 0; i < m; i++ { + y[i] += alpha * asm.DdotUnitary(a[lda*i:lda*i+n], x) + } + return + } + iy := ky + for i := 0; i < m; i++ { + y[iy] += alpha * asm.DdotInc(x, a[lda*i:lda*i+n], uintptr(n), uintptr(incX), 1, uintptr(kx), 0) + iy += incY + } + return + } + // Cases where a is transposed. + if incX == 1 && incY == 1 { + for i := 0; i < m; i++ { + tmp := alpha * x[i] + if tmp != 0 { + asm.DaxpyUnitary(tmp, a[lda*i:lda*i+n], y, y) + } + } + return + } + ix := kx + for i := 0; i < m; i++ { + tmp := alpha * x[ix] + if tmp != 0 { + asm.DaxpyInc(tmp, a[lda*i:lda*i+n], y, uintptr(n), 1, uintptr(incY), 0, uintptr(ky)) + } + ix += incX + } +} + +// Dger performs the rank-one operation +// A += alpha * x * y^T +// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. +func (Implementation) Dger(m, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) { + // Check inputs + if m < 0 { + panic("m < 0") + } + if n < 0 { + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (m-1)*incX >= len(x)) || (incX < 0 && (1-m)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if lda*(m-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if lda < max(1, n) { + panic(badLdA) + } + + // Quick return if possible + if m == 0 || n == 0 || alpha == 0 { + return + } + + var ky, kx int + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + + if incX > 0 { + kx = 0 + } else { + kx = -(m - 1) * incX + } + + if incX == 1 && incY == 1 { + x = x[:m] + y = y[:n] + for i, xv := range x { + tmp := alpha * xv + if tmp != 0 { + atmp := a[i*lda : i*lda+n] + asm.DaxpyUnitary(tmp, y, atmp, atmp) + } + } + return + } + + ix := kx + for i := 0; i < m; i++ { + tmp := alpha * x[ix] + if tmp != 0 { + asm.DaxpyInc(tmp, y, a[i*lda:i*lda+n], uintptr(n), uintptr(incY), 1, uintptr(ky), 0) + } + ix += incX + } +} + +// Dgbmv computes +// y = alpha * A * x + beta * y if tA == blas.NoTrans +// y = alpha * A^T * x + beta * y if tA == blas.Trans or blas.ConjTrans +// where a is an m×n band matrix kL subdiagonals and kU super-diagonals, and +// m and n refer to the size of the full dense matrix it represents. +// x and y are vectors, and alpha and beta are scalars. +func (Implementation) Dgbmv(tA blas.Transpose, m, n, kL, kU int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + if kL < 0 { + panic(kLLT0) + } + if kL < 0 { + panic(kULT0) + } + if lda < kL+kU+1 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + // Set up indexes + lenX := m + lenY := n + if tA == blas.NoTrans { + lenX = n + lenY = m + } + if (incX > 0 && (lenX-1)*incX >= len(x)) || (incX < 0 && (1-lenX)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (lenY-1)*incY >= len(y)) || (incY < 0 && (1-lenY)*incY >= len(y)) { + panic(badY) + } + if lda*(m-1)+kL+kU+1 > len(a) || lda < kL+kU+1 { + panic(badLdA) + } + + // Quick return if possible + if m == 0 || n == 0 || (alpha == 0 && beta == 1) { + return + } + + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(lenY - 1) * incY + } + + // First form y := beta * y + if incY > 0 { + Implementation{}.Dscal(lenY, beta, y, incY) + } else { + Implementation{}.Dscal(lenY, beta, y, -incY) + } + + if alpha == 0 { + return + } + + // i and j are indices of the compacted banded matrix. + // off is the offset into the dense matrix (off + j = densej) + ld := min(m, n) + nCol := kU + 1 + kL + if tA == blas.NoTrans { + iy := ky + if incX == 1 { + for i := 0; i < m; i++ { + l := max(0, kL-i) + u := min(nCol, ld+kL-i) + off := max(0, i-kL) + atmp := a[i*lda+l : i*lda+u] + xtmp := x[off : off+u-l] + var sum float64 + for j, v := range atmp { + sum += xtmp[j] * v + } + y[iy] += sum * alpha + iy += incY + } + return + } + for i := 0; i < m; i++ { + l := max(0, kL-i) + u := min(nCol, ld+kL-i) + off := max(0, i-kL) + atmp := a[i*lda+l : i*lda+u] + jx := kx + var sum float64 + for _, v := range atmp { + sum += x[off*incX+jx] * v + jx += incX + } + y[iy] += sum * alpha + iy += incY + } + return + } + if incX == 1 { + for i := 0; i < m; i++ { + l := max(0, kL-i) + u := min(nCol, ld+kL-i) + off := max(0, i-kL) + atmp := a[i*lda+l : i*lda+u] + tmp := alpha * x[i] + jy := ky + for _, v := range atmp { + y[jy+off*incY] += tmp * v + jy += incY + } + } + return + } + ix := kx + for i := 0; i < m; i++ { + l := max(0, kL-i) + u := min(nCol, ld+kL-i) + off := max(0, i-kL) + atmp := a[i*lda+l : i*lda+u] + tmp := alpha * x[ix] + jy := ky + for _, v := range atmp { + y[jy+off*incY] += tmp * v + jy += incY + } + ix += incX + } +} + +// Dtrmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// A is an n×n Triangular matrix and x is a vector. +func (Implementation) Dtrmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float64, lda int, x []float64, incX int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if lda < n { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if n == 0 { + return + } + nonUnit := d != blas.Unit + if n == 1 { + x[0] *= a[0] + return + } + var kx int + if incX <= 0 { + kx = -(n - 1) * incX + } + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + var tmp float64 + if nonUnit { + tmp = a[i*lda+i] * x[i] + } else { + tmp = x[i] + } + xtmp := x[i+1:] + for j, v := range a[i*lda+i+1 : i*lda+n] { + tmp += v * xtmp[j] + } + x[i] = tmp + } + return + } + ix := kx + for i := 0; i < n; i++ { + var tmp float64 + if nonUnit { + tmp = a[i*lda+i] * x[ix] + } else { + tmp = x[ix] + } + jx := ix + incX + for _, v := range a[i*lda+i+1 : i*lda+n] { + tmp += v * x[jx] + jx += incX + } + x[ix] = tmp + ix += incX + } + return + } + if incX == 1 { + for i := n - 1; i >= 0; i-- { + var tmp float64 + if nonUnit { + tmp += a[i*lda+i] * x[i] + } else { + tmp = x[i] + } + for j, v := range a[i*lda : i*lda+i] { + tmp += v * x[j] + } + x[i] = tmp + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + var tmp float64 + if nonUnit { + tmp += a[i*lda+i] * x[ix] + } else { + tmp = x[ix] + } + jx := kx + for _, v := range a[i*lda : i*lda+i] { + tmp += v * x[jx] + jx += incX + } + x[ix] = tmp + ix -= incX + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + if incX == 1 { + for i := n - 1; i >= 0; i-- { + xi := x[i] + atmp := a[i*lda+i+1 : i*lda+n] + xtmp := x[i+1 : n] + for j, v := range atmp { + xtmp[j] += xi * v + } + if nonUnit { + x[i] *= a[i*lda+i] + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + xi := x[ix] + jx := kx + (i+1)*incX + atmp := a[i*lda+i+1 : i*lda+n] + for _, v := range atmp { + x[jx] += xi * v + jx += incX + } + if nonUnit { + x[ix] *= a[i*lda+i] + } + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + xi := x[i] + atmp := a[i*lda : i*lda+i] + for j, v := range atmp { + x[j] += xi * v + } + if nonUnit { + x[i] *= a[i*lda+i] + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + xi := x[ix] + jx := kx + atmp := a[i*lda : i*lda+i] + for _, v := range atmp { + x[jx] += xi * v + jx += incX + } + if nonUnit { + x[ix] *= a[i*lda+i] + } + ix += incX + } +} + +// Dtrsv solves +// A * x = b if tA == blas.NoTrans +// A^T * x = b if tA == blas.Trans or blas.ConjTrans +// A is an n×n triangular matrix and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +func (Implementation) Dtrsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float64, lda int, x []float64, incX int) { + // Test the input parameters + // Verify inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + // Quick return if possible + if n == 0 { + return + } + if n == 1 { + if d == blas.NonUnit { + x[0] /= a[0] + } + return + } + + var kx int + if incX < 0 { + kx = -(n - 1) * incX + } + nonUnit := d == blas.NonUnit + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := n - 1; i >= 0; i-- { + var sum float64 + atmp := a[i*lda+i+1 : i*lda+n] + for j, v := range atmp { + jv := i + j + 1 + sum += x[jv] * v + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda+i] + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + var sum float64 + jx := ix + incX + atmp := a[i*lda+i+1 : i*lda+n] + for _, v := range atmp { + sum += x[jx] * v + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= a[i*lda+i] + } + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + var sum float64 + atmp := a[i*lda : i*lda+i] + for j, v := range atmp { + sum += x[j] * v + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda+i] + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + jx := kx + var sum float64 + atmp := a[i*lda : i*lda+i] + for _, v := range atmp { + sum += x[jx] * v + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= a[i*lda+i] + } + ix += incX + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + if nonUnit { + x[i] /= a[i*lda+i] + } + xi := x[i] + atmp := a[i*lda+i+1 : i*lda+n] + for j, v := range atmp { + jv := j + i + 1 + x[jv] -= v * xi + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + if nonUnit { + x[ix] /= a[i*lda+i] + } + xi := x[ix] + jx := kx + (i+1)*incX + atmp := a[i*lda+i+1 : i*lda+n] + for _, v := range atmp { + x[jx] -= v * xi + jx += incX + } + ix += incX + } + return + } + if incX == 1 { + for i := n - 1; i >= 0; i-- { + if nonUnit { + x[i] /= a[i*lda+i] + } + xi := x[i] + atmp := a[i*lda : i*lda+i] + for j, v := range atmp { + x[j] -= v * xi + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + if nonUnit { + x[ix] /= a[i*lda+i] + } + xi := x[ix] + jx := kx + atmp := a[i*lda : i*lda+i] + for _, v := range atmp { + x[jx] -= v * xi + jx += incX + } + ix -= incX + } +} + +// Dsymv computes +// y = alpha * A * x + beta * y, +// where a is an n×n symmetric matrix, x and y are vectors, and alpha and +// beta are scalars. +func (Implementation) Dsymv(ul blas.Uplo, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { + // Check inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(negativeN) + } + if lda > 1 && lda > n { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + // Quick return if possible + if n == 0 || (alpha == 0 && beta == 1) { + return + } + + // Set up start points + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(n - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + + // Form y = beta * y + if beta != 1 { + if incY > 0 { + Implementation{}.Dscal(n, beta, y, incY) + } else { + Implementation{}.Dscal(n, beta, y, -incY) + } + } + + if alpha == 0 { + return + } + + if n == 1 { + y[0] += alpha * a[0] * x[0] + return + } + + if ul == blas.Upper { + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + xv := x[i] * alpha + sum := x[i] * a[i*lda+i] + jy := ky + (i+1)*incY + atmp := a[i*lda+i+1 : i*lda+n] + for j, v := range atmp { + jp := j + i + 1 + sum += x[jp] * v + y[jy] += xv * v + jy += incY + } + y[iy] += alpha * sum + iy += incY + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + xv := x[ix] * alpha + sum := x[ix] * a[i*lda+i] + jx := kx + (i+1)*incX + jy := ky + (i+1)*incY + atmp := a[i*lda+i+1 : i*lda+n] + for _, v := range atmp { + sum += x[jx] * v + y[jy] += xv * v + jx += incX + jy += incY + } + y[iy] += alpha * sum + ix += incX + iy += incY + } + return + } + // Cases where a is lower triangular. + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + jy := ky + xv := alpha * x[i] + atmp := a[i*lda : i*lda+i] + var sum float64 + for j, v := range atmp { + sum += x[j] * v + y[jy] += xv * v + jy += incY + } + sum += x[i] * a[i*lda+i] + sum *= alpha + y[iy] += sum + iy += incY + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + jy := ky + xv := alpha * x[ix] + atmp := a[i*lda : i*lda+i] + var sum float64 + for _, v := range atmp { + sum += x[jx] * v + y[jy] += xv * v + jx += incX + jy += incY + } + sum += x[ix] * a[i*lda+i] + sum *= alpha + y[iy] += sum + ix += incX + iy += incY + } +} + +// Dtbmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// where A is an n×n triangular banded matrix with k diagonals, and x is a vector. +func (Implementation) Dtbmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float64, lda int, x []float64, incX int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if k < 0 { + panic(kLT0) + } + if lda*(n-1)+k+1 > len(a) || lda < k+1 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if n == 0 { + return + } + var kx int + if incX <= 0 { + kx = -(n - 1) * incX + } else if incX != 1 { + kx = 0 + } + + nonunit := d != blas.Unit + + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + u := min(1+k, n-i) + var sum float64 + atmp := a[i*lda:] + xtmp := x[i:] + for j := 1; j < u; j++ { + sum += xtmp[j] * atmp[j] + } + if nonunit { + sum += xtmp[0] * atmp[0] + } else { + sum += xtmp[0] + } + x[i] = sum + } + return + } + ix := kx + for i := 0; i < n; i++ { + u := min(1+k, n-i) + var sum float64 + atmp := a[i*lda:] + jx := incX + for j := 1; j < u; j++ { + sum += x[ix+jx] * atmp[j] + jx += incX + } + if nonunit { + sum += x[ix] * atmp[0] + } else { + sum += x[ix] + } + x[ix] = sum + ix += incX + } + return + } + if incX == 1 { + for i := n - 1; i >= 0; i-- { + l := max(0, k-i) + atmp := a[i*lda:] + var sum float64 + for j := l; j < k; j++ { + sum += x[i-k+j] * atmp[j] + } + if nonunit { + sum += x[i] * atmp[k] + } else { + sum += x[i] + } + x[i] = sum + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + l := max(0, k-i) + atmp := a[i*lda:] + var sum float64 + jx := l * incX + for j := l; j < k; j++ { + sum += x[ix-k*incX+jx] * atmp[j] + jx += incX + } + if nonunit { + sum += x[ix] * atmp[k] + } else { + sum += x[ix] + } + x[ix] = sum + ix -= incX + } + return + } + if ul == blas.Upper { + if incX == 1 { + for i := n - 1; i >= 0; i-- { + u := k + 1 + if i < u { + u = i + 1 + } + var sum float64 + for j := 1; j < u; j++ { + sum += x[i-j] * a[(i-j)*lda+j] + } + if nonunit { + sum += x[i] * a[i*lda] + } else { + sum += x[i] + } + x[i] = sum + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + u := k + 1 + if i < u { + u = i + 1 + } + var sum float64 + jx := incX + for j := 1; j < u; j++ { + sum += x[ix-jx] * a[(i-j)*lda+j] + jx += incX + } + if nonunit { + sum += x[ix] * a[i*lda] + } else { + sum += x[ix] + } + x[ix] = sum + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + u := k + if i+k >= n { + u = n - i - 1 + } + var sum float64 + for j := 0; j < u; j++ { + sum += x[i+j+1] * a[(i+j+1)*lda+k-j-1] + } + if nonunit { + sum += x[i] * a[i*lda+k] + } else { + sum += x[i] + } + x[i] = sum + } + return + } + ix := kx + for i := 0; i < n; i++ { + u := k + if i+k >= n { + u = n - i - 1 + } + var ( + sum float64 + jx int + ) + for j := 0; j < u; j++ { + sum += x[ix+jx+incX] * a[(i+j+1)*lda+k-j-1] + jx += incX + } + if nonunit { + sum += x[ix] * a[i*lda+k] + } else { + sum += x[ix] + } + x[ix] = sum + ix += incX + } +} + +// Dtpmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// where A is an n×n unit triangular matrix in packed format, and x is a vector. +func (Implementation) Dtpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float64, x []float64, incX int) { + // Verify inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if len(ap) < (n*(n+1))/2 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if n == 0 { + return + } + var kx int + if incX <= 0 { + kx = -(n - 1) * incX + } + + nonUnit := d == blas.NonUnit + var offset int // Offset is the index of (i,i) + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + xi := x[i] + if nonUnit { + xi *= ap[offset] + } + atmp := ap[offset+1 : offset+n-i] + xtmp := x[i+1:] + for j, v := range atmp { + xi += v * xtmp[j] + } + x[i] = xi + offset += n - i + } + return + } + ix := kx + for i := 0; i < n; i++ { + xix := x[ix] + if nonUnit { + xix *= ap[offset] + } + atmp := ap[offset+1 : offset+n-i] + jx := kx + (i+1)*incX + for _, v := range atmp { + xix += v * x[jx] + jx += incX + } + x[ix] = xix + offset += n - i + ix += incX + } + return + } + if incX == 1 { + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + xi := x[i] + if nonUnit { + xi *= ap[offset] + } + atmp := ap[offset-i : offset] + for j, v := range atmp { + xi += v * x[j] + } + x[i] = xi + offset -= i + 1 + } + return + } + ix := kx + (n-1)*incX + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + xix := x[ix] + if nonUnit { + xix *= ap[offset] + } + atmp := ap[offset-i : offset] + jx := kx + for _, v := range atmp { + xix += v * x[jx] + jx += incX + } + x[ix] = xix + offset -= i + 1 + ix -= incX + } + return + } + // Cases where ap is transposed. + if ul == blas.Upper { + if incX == 1 { + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + xi := x[i] + atmp := ap[offset+1 : offset+n-i] + xtmp := x[i+1:] + for j, v := range atmp { + xtmp[j] += v * xi + } + if nonUnit { + x[i] *= ap[offset] + } + offset -= n - i + 1 + } + return + } + ix := kx + (n-1)*incX + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + xix := x[ix] + jx := kx + (i+1)*incX + atmp := ap[offset+1 : offset+n-i] + for _, v := range atmp { + x[jx] += v * xix + jx += incX + } + if nonUnit { + x[ix] *= ap[offset] + } + offset -= n - i + 1 + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + xi := x[i] + atmp := ap[offset-i : offset] + for j, v := range atmp { + x[j] += v * xi + } + if nonUnit { + x[i] *= ap[offset] + } + offset += i + 2 + } + return + } + ix := kx + for i := 0; i < n; i++ { + xix := x[ix] + jx := kx + atmp := ap[offset-i : offset] + for _, v := range atmp { + x[jx] += v * xix + jx += incX + } + if nonUnit { + x[ix] *= ap[offset] + } + ix += incX + offset += i + 2 + } +} + +// Dtbsv solves +// A * x = b +// where A is an n×n triangular banded matrix with k diagonals in packed format, +// and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +func (Implementation) Dtbsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float64, lda int, x []float64, incX int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if lda*(n-1)+k+1 > len(a) || lda < k+1 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if n == 0 { + return + } + var kx int + if incX < 0 { + kx = -(n - 1) * incX + } else { + kx = 0 + } + nonUnit := d == blas.NonUnit + // Form x = A^-1 x. + // Several cases below use subslices for speed improvement. + // The incX != 1 cases usually do not because incX may be negative. + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := n - 1; i >= 0; i-- { + bands := k + if i+bands >= n { + bands = n - i - 1 + } + atmp := a[i*lda+1:] + xtmp := x[i+1 : i+bands+1] + var sum float64 + for j, v := range xtmp { + sum += v * atmp[j] + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda] + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + max := k + 1 + if i+max > n { + max = n - i + } + atmp := a[i*lda:] + var ( + jx int + sum float64 + ) + for j := 1; j < max; j++ { + jx += incX + sum += x[ix+jx] * atmp[j] + } + x[ix] -= sum + if nonUnit { + x[ix] /= atmp[0] + } + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + bands := k + if i-k < 0 { + bands = i + } + atmp := a[i*lda+k-bands:] + xtmp := x[i-bands : i] + var sum float64 + for j, v := range xtmp { + sum += v * atmp[j] + } + x[i] -= sum + if nonUnit { + x[i] /= atmp[bands] + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + bands := k + if i-k < 0 { + bands = i + } + atmp := a[i*lda+k-bands:] + var ( + sum float64 + jx int + ) + for j := 0; j < bands; j++ { + sum += x[ix-bands*incX+jx] * atmp[j] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= atmp[bands] + } + ix += incX + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + bands := k + if i-k < 0 { + bands = i + } + var sum float64 + for j := 0; j < bands; j++ { + sum += x[i-bands+j] * a[(i-bands+j)*lda+bands-j] + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda] + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + bands := k + if i-k < 0 { + bands = i + } + var ( + sum float64 + jx int + ) + for j := 0; j < bands; j++ { + sum += x[ix-bands*incX+jx] * a[(i-bands+j)*lda+bands-j] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= a[i*lda] + } + ix += incX + } + return + } + if incX == 1 { + for i := n - 1; i >= 0; i-- { + bands := k + if i+bands >= n { + bands = n - i - 1 + } + var sum float64 + xtmp := x[i+1 : i+1+bands] + for j, v := range xtmp { + sum += v * a[(i+j+1)*lda+k-j-1] + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda+k] + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + bands := k + if i+bands >= n { + bands = n - i - 1 + } + var ( + sum float64 + jx int + ) + for j := 0; j < bands; j++ { + sum += x[ix+jx+incX] * a[(i+j+1)*lda+k-j-1] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= a[i*lda+k] + } + ix -= incX + } +} + +// Dsbmv performs +// y = alpha * A * x + beta * y +// where A is an n×n symmetric banded matrix, x and y are vectors, and alpha +// and beta are scalars. +func (Implementation) Dsbmv(ul blas.Uplo, n, k int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if lda*(n-1)+k+1 > len(a) || lda < k+1 { + panic(badLdA) + } + + // Quick return if possible + if n == 0 || (alpha == 0 && beta == 1) { + return + } + + // Set up indexes + lenX := n + lenY := n + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(lenY - 1) * incY + } + + // First form y := beta * y + if incY > 0 { + Implementation{}.Dscal(lenY, beta, y, incY) + } else { + Implementation{}.Dscal(lenY, beta, y, -incY) + } + + if alpha == 0 { + return + } + + if ul == blas.Upper { + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + atmp := a[i*lda:] + tmp := alpha * x[i] + sum := tmp * atmp[0] + u := min(k, n-i-1) + jy := incY + for j := 1; j <= u; j++ { + v := atmp[j] + sum += alpha * x[i+j] * v + y[iy+jy] += tmp * v + jy += incY + } + y[iy] += sum + iy += incY + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + atmp := a[i*lda:] + tmp := alpha * x[ix] + sum := tmp * atmp[0] + u := min(k, n-i-1) + jx := incX + jy := incY + for j := 1; j <= u; j++ { + v := atmp[j] + sum += alpha * x[ix+jx] * v + y[iy+jy] += tmp * v + jx += incX + jy += incY + } + y[iy] += sum + ix += incX + iy += incY + } + return + } + + // Casses where a has bands below the diagonal. + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + l := max(0, k-i) + tmp := alpha * x[i] + jy := l * incY + atmp := a[i*lda:] + for j := l; j < k; j++ { + v := atmp[j] + y[iy] += alpha * v * x[i-k+j] + y[iy-k*incY+jy] += tmp * v + jy += incY + } + y[iy] += tmp * atmp[k] + iy += incY + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + l := max(0, k-i) + tmp := alpha * x[ix] + jx := l * incX + jy := l * incY + atmp := a[i*lda:] + for j := l; j < k; j++ { + v := atmp[j] + y[iy] += alpha * v * x[ix-k*incX+jx] + y[iy-k*incY+jy] += tmp * v + jx += incX + jy += incY + } + y[iy] += tmp * atmp[k] + ix += incX + iy += incY + } + return +} + +// Dsyr performs the rank-one update +// a += alpha * x * x^T +// where a is an n×n symmetric matrix, and x is a vector. +func (Implementation) Dsyr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if alpha == 0 || n == 0 { + return + } + + lenX := n + var kx int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + tmp := x[i] * alpha + if tmp != 0 { + atmp := a[i*lda+i : i*lda+n] + xtmp := x[i:n] + for j, v := range xtmp { + atmp[j] += v * tmp + } + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + tmp := x[ix] * alpha + if tmp != 0 { + jx := ix + atmp := a[i*lda:] + for j := i; j < n; j++ { + atmp[j] += x[jx] * tmp + jx += incX + } + } + ix += incX + } + return + } + // Cases where a is lower triangular. + if incX == 1 { + for i := 0; i < n; i++ { + tmp := x[i] * alpha + if tmp != 0 { + atmp := a[i*lda:] + xtmp := x[:i+1] + for j, v := range xtmp { + atmp[j] += tmp * v + } + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + tmp := x[ix] * alpha + if tmp != 0 { + atmp := a[i*lda:] + jx := kx + for j := 0; j < i+1; j++ { + atmp[j] += tmp * x[jx] + jx += incX + } + } + ix += incX + } +} + +// Dsyr2 performs the symmetric rank-two update +// A += alpha * x * y^T + alpha * y * x^T +// where A is a symmetric n×n matrix, x and y are vectors, and alpha is a scalar. +func (Implementation) Dsyr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64, lda int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if alpha == 0 { + return + } + + var ky, kx int + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + if incX > 0 { + kx = 0 + } else { + kx = -(n - 1) * incX + } + if ul == blas.Upper { + if incX == 1 && incY == 1 { + for i := 0; i < n; i++ { + xi := x[i] + yi := y[i] + atmp := a[i*lda:] + for j := i; j < n; j++ { + atmp[j] += alpha * (xi*y[j] + x[j]*yi) + } + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + i*incX + jy := ky + i*incY + xi := x[ix] + yi := y[iy] + atmp := a[i*lda:] + for j := i; j < n; j++ { + atmp[j] += alpha * (xi*y[jy] + x[jx]*yi) + jx += incX + jy += incY + } + ix += incX + iy += incY + } + return + } + if incX == 1 && incY == 1 { + for i := 0; i < n; i++ { + xi := x[i] + yi := y[i] + atmp := a[i*lda:] + for j := 0; j <= i; j++ { + atmp[j] += alpha * (xi*y[j] + x[j]*yi) + } + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + jy := ky + xi := x[ix] + yi := y[iy] + atmp := a[i*lda:] + for j := 0; j <= i; j++ { + atmp[j] += alpha * (xi*y[jy] + x[jx]*yi) + jx += incX + jy += incY + } + ix += incX + iy += incY + } + return +} + +// Dtpsv solves +// A * x = b if tA == blas.NoTrans +// A^T * x = b if tA == blas.Trans or blas.ConjTrans +// where A is an n×n triangular matrix in packed format and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +func (Implementation) Dtpsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float64, x []float64, incX int) { + // Verify inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if len(ap) < (n*(n+1))/2 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if n == 0 { + return + } + var kx int + if incX <= 0 { + kx = -(n - 1) * incX + } + + nonUnit := d == blas.NonUnit + var offset int // Offset is the index of (i,i) + if tA == blas.NoTrans { + if ul == blas.Upper { + offset = n*(n+1)/2 - 1 + if incX == 1 { + for i := n - 1; i >= 0; i-- { + atmp := ap[offset+1 : offset+n-i] + xtmp := x[i+1:] + var sum float64 + for j, v := range atmp { + sum += v * xtmp[j] + } + x[i] -= sum + if nonUnit { + x[i] /= ap[offset] + } + offset -= n - i + 1 + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + atmp := ap[offset+1 : offset+n-i] + jx := kx + (i+1)*incX + var sum float64 + for _, v := range atmp { + sum += v * x[jx] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= ap[offset] + } + ix -= incX + offset -= n - i + 1 + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + atmp := ap[offset-i : offset] + var sum float64 + for j, v := range atmp { + sum += v * x[j] + } + x[i] -= sum + if nonUnit { + x[i] /= ap[offset] + } + offset += i + 2 + } + return + } + ix := kx + for i := 0; i < n; i++ { + jx := kx + atmp := ap[offset-i : offset] + var sum float64 + for _, v := range atmp { + sum += v * x[jx] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= ap[offset] + } + ix += incX + offset += i + 2 + } + return + } + // Cases where ap is transposed. + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + if nonUnit { + x[i] /= ap[offset] + } + xi := x[i] + atmp := ap[offset+1 : offset+n-i] + xtmp := x[i+1:] + for j, v := range atmp { + xtmp[j] -= v * xi + } + offset += n - i + } + return + } + ix := kx + for i := 0; i < n; i++ { + if nonUnit { + x[ix] /= ap[offset] + } + xix := x[ix] + atmp := ap[offset+1 : offset+n-i] + jx := kx + (i+1)*incX + for _, v := range atmp { + x[jx] -= v * xix + jx += incX + } + ix += incX + offset += n - i + } + return + } + if incX == 1 { + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + if nonUnit { + x[i] /= ap[offset] + } + xi := x[i] + atmp := ap[offset-i : offset] + for j, v := range atmp { + x[j] -= v * xi + } + offset -= i + 1 + } + return + } + ix := kx + (n-1)*incX + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + if nonUnit { + x[ix] /= ap[offset] + } + xix := x[ix] + atmp := ap[offset-i : offset] + jx := kx + for _, v := range atmp { + x[jx] -= v * xix + jx += incX + } + ix -= incX + offset -= i + 1 + } +} + +// Dspmv performs +// y = alpha * A * x + beta * y, +// where A is an n×n symmetric matrix in packed format, x and y are vectors +// and alpha and beta are scalars. +func (Implementation) Dspmv(ul blas.Uplo, n int, alpha float64, a []float64, x []float64, incX int, beta float64, y []float64, incY int) { + // Verify inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if len(a) < (n*(n+1))/2 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + // Quick return if possible + if n == 0 || (alpha == 0 && beta == 1) { + return + } + + // Set up start points + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(n - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + + // Form y = beta * y + if beta != 1 { + if incY > 0 { + Implementation{}.Dscal(n, beta, y, incY) + } else { + Implementation{}.Dscal(n, beta, y, -incY) + } + } + + if alpha == 0 { + return + } + + if n == 1 { + y[0] += alpha * a[0] * x[0] + return + } + var offset int // Offset is the index of (i,i). + if ul == blas.Upper { + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + xv := x[i] * alpha + sum := a[offset] * x[i] + atmp := a[offset+1 : offset+n-i] + xtmp := x[i+1:] + jy := ky + (i+1)*incY + for j, v := range atmp { + sum += v * xtmp[j] + y[jy] += v * xv + jy += incY + } + y[iy] += alpha * sum + iy += incY + offset += n - i + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + xv := x[ix] * alpha + sum := a[offset] * x[ix] + atmp := a[offset+1 : offset+n-i] + jx := kx + (i+1)*incX + jy := ky + (i+1)*incY + for _, v := range atmp { + sum += v * x[jx] + y[jy] += v * xv + jx += incX + jy += incY + } + y[iy] += alpha * sum + ix += incX + iy += incY + offset += n - i + } + return + } + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + xv := x[i] * alpha + atmp := a[offset-i : offset] + jy := ky + var sum float64 + for j, v := range atmp { + sum += v * x[j] + y[jy] += v * xv + jy += incY + } + sum += a[offset] * x[i] + y[iy] += alpha * sum + iy += incY + offset += i + 2 + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + xv := x[ix] * alpha + atmp := a[offset-i : offset] + jx := kx + jy := ky + var sum float64 + for _, v := range atmp { + sum += v * x[jx] + y[jy] += v * xv + jx += incX + jy += incY + } + + sum += a[offset] * x[ix] + y[iy] += alpha * sum + ix += incX + iy += incY + offset += i + 2 + } +} + +// Dspr computes the rank-one operation +// a += alpha * x * x^T +// where a is an n×n symmetric matrix in packed format, x is a vector, and +// alpha is a scalar. +func (Implementation) Dspr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, a []float64) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if len(a) < (n*(n+1))/2 { + panic(badLdA) + } + if alpha == 0 || n == 0 { + return + } + lenX := n + var kx int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + var offset int // Offset is the index of (i,i). + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + atmp := a[offset:] + xv := alpha * x[i] + xtmp := x[i:n] + for j, v := range xtmp { + atmp[j] += xv * v + } + offset += n - i + } + return + } + ix := kx + for i := 0; i < n; i++ { + jx := kx + i*incX + atmp := a[offset:] + xv := alpha * x[ix] + for j := 0; j < n-i; j++ { + atmp[j] += xv * x[jx] + jx += incX + } + ix += incX + offset += n - i + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + atmp := a[offset-i:] + xv := alpha * x[i] + xtmp := x[:i+1] + for j, v := range xtmp { + atmp[j] += xv * v + } + offset += i + 2 + } + return + } + ix := kx + for i := 0; i < n; i++ { + jx := kx + atmp := a[offset-i:] + xv := alpha * x[ix] + for j := 0; j <= i; j++ { + atmp[j] += xv * x[jx] + jx += incX + } + ix += incX + offset += i + 2 + } +} + +// Dspr2 performs the symmetric rank-2 update +// a += alpha * x * y^T + alpha * y * x^T +// where a is an n×n symmetric matrix in packed format and x and y are vectors. +func (Implementation) Dspr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, ap []float64) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if len(ap) < (n*(n+1))/2 { + panic(badLdA) + } + if alpha == 0 { + return + } + var ky, kx int + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + if incX > 0 { + kx = 0 + } else { + kx = -(n - 1) * incX + } + var offset int // Offset is the index of (i,i). + if ul == blas.Upper { + if incX == 1 && incY == 1 { + for i := 0; i < n; i++ { + atmp := ap[offset:] + xi := x[i] + yi := y[i] + xtmp := x[i:n] + ytmp := y[i:n] + for j, v := range xtmp { + atmp[j] += alpha * (xi*ytmp[j] + v*yi) + } + offset += n - i + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + i*incX + jy := ky + i*incY + atmp := ap[offset:] + xi := x[ix] + yi := y[iy] + for j := 0; j < n-i; j++ { + atmp[j] += alpha * (xi*y[jy] + x[jx]*yi) + jx += incX + jy += incY + } + ix += incX + iy += incY + offset += n - i + } + return + } + if incX == 1 && incY == 1 { + for i := 0; i < n; i++ { + atmp := ap[offset-i:] + xi := x[i] + yi := y[i] + xtmp := x[:i+1] + for j, v := range xtmp { + atmp[j] += alpha * (xi*y[j] + v*yi) + } + offset += i + 2 + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + jy := ky + atmp := ap[offset-i:] + for j := 0; j <= i; j++ { + atmp[j] += alpha * (x[ix]*y[jy] + x[jx]*y[iy]) + jx += incX + jy += incY + } + ix += incX + iy += incY + offset += i + 2 + } +} diff --git a/vendor/github.com/gonum/blas/native/level2single.go b/vendor/github.com/gonum/blas/native/level2single.go new file mode 100644 index 00000000..b213ad6e --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level2single.go @@ -0,0 +1,2292 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +var _ blas.Float32Level2 = Implementation{} + +// Sgemv computes +// y = alpha * a * x + beta * y if tA = blas.NoTrans +// y = alpha * A^T * x + beta * y if tA = blas.Trans or blas.ConjTrans +// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sgemv(tA blas.Transpose, m, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int) { + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + if lda < max(1, n) { + panic(badLdA) + } + + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + // Set up indexes + lenX := m + lenY := n + if tA == blas.NoTrans { + lenX = n + lenY = m + } + if (incX > 0 && (lenX-1)*incX >= len(x)) || (incX < 0 && (1-lenX)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (lenY-1)*incY >= len(y)) || (incY < 0 && (1-lenY)*incY >= len(y)) { + panic(badY) + } + if lda*(m-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + + // Quick return if possible + if m == 0 || n == 0 || (alpha == 0 && beta == 1) { + return + } + + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(lenY - 1) * incY + } + + // First form y := beta * y + if incY > 0 { + Implementation{}.Sscal(lenY, beta, y, incY) + } else { + Implementation{}.Sscal(lenY, beta, y, -incY) + } + + if alpha == 0 { + return + } + + // Form y := alpha * A * x + y + if tA == blas.NoTrans { + if incX == 1 && incY == 1 { + for i := 0; i < m; i++ { + y[i] += alpha * asm.SdotUnitary(a[lda*i:lda*i+n], x) + } + return + } + iy := ky + for i := 0; i < m; i++ { + y[iy] += alpha * asm.SdotInc(x, a[lda*i:lda*i+n], uintptr(n), uintptr(incX), 1, uintptr(kx), 0) + iy += incY + } + return + } + // Cases where a is transposed. + if incX == 1 && incY == 1 { + for i := 0; i < m; i++ { + tmp := alpha * x[i] + if tmp != 0 { + asm.SaxpyUnitary(tmp, a[lda*i:lda*i+n], y, y) + } + } + return + } + ix := kx + for i := 0; i < m; i++ { + tmp := alpha * x[ix] + if tmp != 0 { + asm.SaxpyInc(tmp, a[lda*i:lda*i+n], y, uintptr(n), 1, uintptr(incY), 0, uintptr(ky)) + } + ix += incX + } +} + +// Sger performs the rank-one operation +// A += alpha * x * y^T +// where A is an m×n dense matrix, x and y are vectors, and alpha is a scalar. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sger(m, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int) { + // Check inputs + if m < 0 { + panic("m < 0") + } + if n < 0 { + panic(negativeN) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (m-1)*incX >= len(x)) || (incX < 0 && (1-m)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if lda*(m-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if lda < max(1, n) { + panic(badLdA) + } + + // Quick return if possible + if m == 0 || n == 0 || alpha == 0 { + return + } + + var ky, kx int + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + + if incX > 0 { + kx = 0 + } else { + kx = -(m - 1) * incX + } + + if incX == 1 && incY == 1 { + x = x[:m] + y = y[:n] + for i, xv := range x { + tmp := alpha * xv + if tmp != 0 { + atmp := a[i*lda : i*lda+n] + asm.SaxpyUnitary(tmp, y, atmp, atmp) + } + } + return + } + + ix := kx + for i := 0; i < m; i++ { + tmp := alpha * x[ix] + if tmp != 0 { + asm.SaxpyInc(tmp, y, a[i*lda:i*lda+n], uintptr(n), uintptr(incY), 1, uintptr(ky), 0) + } + ix += incX + } +} + +// Sgbmv computes +// y = alpha * A * x + beta * y if tA == blas.NoTrans +// y = alpha * A^T * x + beta * y if tA == blas.Trans or blas.ConjTrans +// where a is an m×n band matrix kL subdiagonals and kU super-diagonals, and +// m and n refer to the size of the full dense matrix it represents. +// x and y are vectors, and alpha and beta are scalars. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sgbmv(tA blas.Transpose, m, n, kL, kU int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int) { + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + if kL < 0 { + panic(kLLT0) + } + if kL < 0 { + panic(kULT0) + } + if lda < kL+kU+1 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + // Set up indexes + lenX := m + lenY := n + if tA == blas.NoTrans { + lenX = n + lenY = m + } + if (incX > 0 && (lenX-1)*incX >= len(x)) || (incX < 0 && (1-lenX)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (lenY-1)*incY >= len(y)) || (incY < 0 && (1-lenY)*incY >= len(y)) { + panic(badY) + } + if lda*(m-1)+kL+kU+1 > len(a) || lda < kL+kU+1 { + panic(badLdA) + } + + // Quick return if possible + if m == 0 || n == 0 || (alpha == 0 && beta == 1) { + return + } + + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(lenY - 1) * incY + } + + // First form y := beta * y + if incY > 0 { + Implementation{}.Sscal(lenY, beta, y, incY) + } else { + Implementation{}.Sscal(lenY, beta, y, -incY) + } + + if alpha == 0 { + return + } + + // i and j are indices of the compacted banded matrix. + // off is the offset into the dense matrix (off + j = densej) + ld := min(m, n) + nCol := kU + 1 + kL + if tA == blas.NoTrans { + iy := ky + if incX == 1 { + for i := 0; i < m; i++ { + l := max(0, kL-i) + u := min(nCol, ld+kL-i) + off := max(0, i-kL) + atmp := a[i*lda+l : i*lda+u] + xtmp := x[off : off+u-l] + var sum float32 + for j, v := range atmp { + sum += xtmp[j] * v + } + y[iy] += sum * alpha + iy += incY + } + return + } + for i := 0; i < m; i++ { + l := max(0, kL-i) + u := min(nCol, ld+kL-i) + off := max(0, i-kL) + atmp := a[i*lda+l : i*lda+u] + jx := kx + var sum float32 + for _, v := range atmp { + sum += x[off*incX+jx] * v + jx += incX + } + y[iy] += sum * alpha + iy += incY + } + return + } + if incX == 1 { + for i := 0; i < m; i++ { + l := max(0, kL-i) + u := min(nCol, ld+kL-i) + off := max(0, i-kL) + atmp := a[i*lda+l : i*lda+u] + tmp := alpha * x[i] + jy := ky + for _, v := range atmp { + y[jy+off*incY] += tmp * v + jy += incY + } + } + return + } + ix := kx + for i := 0; i < m; i++ { + l := max(0, kL-i) + u := min(nCol, ld+kL-i) + off := max(0, i-kL) + atmp := a[i*lda+l : i*lda+u] + tmp := alpha * x[ix] + jy := ky + for _, v := range atmp { + y[jy+off*incY] += tmp * v + jy += incY + } + ix += incX + } +} + +// Strmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// A is an n×n Triangular matrix and x is a vector. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Strmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float32, lda int, x []float32, incX int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if lda < n { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if n == 0 { + return + } + nonUnit := d != blas.Unit + if n == 1 { + x[0] *= a[0] + return + } + var kx int + if incX <= 0 { + kx = -(n - 1) * incX + } + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + var tmp float32 + if nonUnit { + tmp = a[i*lda+i] * x[i] + } else { + tmp = x[i] + } + xtmp := x[i+1:] + for j, v := range a[i*lda+i+1 : i*lda+n] { + tmp += v * xtmp[j] + } + x[i] = tmp + } + return + } + ix := kx + for i := 0; i < n; i++ { + var tmp float32 + if nonUnit { + tmp = a[i*lda+i] * x[ix] + } else { + tmp = x[ix] + } + jx := ix + incX + for _, v := range a[i*lda+i+1 : i*lda+n] { + tmp += v * x[jx] + jx += incX + } + x[ix] = tmp + ix += incX + } + return + } + if incX == 1 { + for i := n - 1; i >= 0; i-- { + var tmp float32 + if nonUnit { + tmp += a[i*lda+i] * x[i] + } else { + tmp = x[i] + } + for j, v := range a[i*lda : i*lda+i] { + tmp += v * x[j] + } + x[i] = tmp + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + var tmp float32 + if nonUnit { + tmp += a[i*lda+i] * x[ix] + } else { + tmp = x[ix] + } + jx := kx + for _, v := range a[i*lda : i*lda+i] { + tmp += v * x[jx] + jx += incX + } + x[ix] = tmp + ix -= incX + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + if incX == 1 { + for i := n - 1; i >= 0; i-- { + xi := x[i] + atmp := a[i*lda+i+1 : i*lda+n] + xtmp := x[i+1 : n] + for j, v := range atmp { + xtmp[j] += xi * v + } + if nonUnit { + x[i] *= a[i*lda+i] + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + xi := x[ix] + jx := kx + (i+1)*incX + atmp := a[i*lda+i+1 : i*lda+n] + for _, v := range atmp { + x[jx] += xi * v + jx += incX + } + if nonUnit { + x[ix] *= a[i*lda+i] + } + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + xi := x[i] + atmp := a[i*lda : i*lda+i] + for j, v := range atmp { + x[j] += xi * v + } + if nonUnit { + x[i] *= a[i*lda+i] + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + xi := x[ix] + jx := kx + atmp := a[i*lda : i*lda+i] + for _, v := range atmp { + x[jx] += xi * v + jx += incX + } + if nonUnit { + x[ix] *= a[i*lda+i] + } + ix += incX + } +} + +// Strsv solves +// A * x = b if tA == blas.NoTrans +// A^T * x = b if tA == blas.Trans or blas.ConjTrans +// A is an n×n triangular matrix and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Strsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, a []float32, lda int, x []float32, incX int) { + // Test the input parameters + // Verify inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + // Quick return if possible + if n == 0 { + return + } + if n == 1 { + if d == blas.NonUnit { + x[0] /= a[0] + } + return + } + + var kx int + if incX < 0 { + kx = -(n - 1) * incX + } + nonUnit := d == blas.NonUnit + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := n - 1; i >= 0; i-- { + var sum float32 + atmp := a[i*lda+i+1 : i*lda+n] + for j, v := range atmp { + jv := i + j + 1 + sum += x[jv] * v + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda+i] + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + var sum float32 + jx := ix + incX + atmp := a[i*lda+i+1 : i*lda+n] + for _, v := range atmp { + sum += x[jx] * v + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= a[i*lda+i] + } + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + var sum float32 + atmp := a[i*lda : i*lda+i] + for j, v := range atmp { + sum += x[j] * v + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda+i] + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + jx := kx + var sum float32 + atmp := a[i*lda : i*lda+i] + for _, v := range atmp { + sum += x[jx] * v + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= a[i*lda+i] + } + ix += incX + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + if nonUnit { + x[i] /= a[i*lda+i] + } + xi := x[i] + atmp := a[i*lda+i+1 : i*lda+n] + for j, v := range atmp { + jv := j + i + 1 + x[jv] -= v * xi + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + if nonUnit { + x[ix] /= a[i*lda+i] + } + xi := x[ix] + jx := kx + (i+1)*incX + atmp := a[i*lda+i+1 : i*lda+n] + for _, v := range atmp { + x[jx] -= v * xi + jx += incX + } + ix += incX + } + return + } + if incX == 1 { + for i := n - 1; i >= 0; i-- { + if nonUnit { + x[i] /= a[i*lda+i] + } + xi := x[i] + atmp := a[i*lda : i*lda+i] + for j, v := range atmp { + x[j] -= v * xi + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + if nonUnit { + x[ix] /= a[i*lda+i] + } + xi := x[ix] + jx := kx + atmp := a[i*lda : i*lda+i] + for _, v := range atmp { + x[jx] -= v * xi + jx += incX + } + ix -= incX + } +} + +// Ssymv computes +// y = alpha * A * x + beta * y, +// where a is an n×n symmetric matrix, x and y are vectors, and alpha and +// beta are scalars. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Ssymv(ul blas.Uplo, n int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int) { + // Check inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(negativeN) + } + if lda > 1 && lda > n { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + // Quick return if possible + if n == 0 || (alpha == 0 && beta == 1) { + return + } + + // Set up start points + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(n - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + + // Form y = beta * y + if beta != 1 { + if incY > 0 { + Implementation{}.Sscal(n, beta, y, incY) + } else { + Implementation{}.Sscal(n, beta, y, -incY) + } + } + + if alpha == 0 { + return + } + + if n == 1 { + y[0] += alpha * a[0] * x[0] + return + } + + if ul == blas.Upper { + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + xv := x[i] * alpha + sum := x[i] * a[i*lda+i] + jy := ky + (i+1)*incY + atmp := a[i*lda+i+1 : i*lda+n] + for j, v := range atmp { + jp := j + i + 1 + sum += x[jp] * v + y[jy] += xv * v + jy += incY + } + y[iy] += alpha * sum + iy += incY + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + xv := x[ix] * alpha + sum := x[ix] * a[i*lda+i] + jx := kx + (i+1)*incX + jy := ky + (i+1)*incY + atmp := a[i*lda+i+1 : i*lda+n] + for _, v := range atmp { + sum += x[jx] * v + y[jy] += xv * v + jx += incX + jy += incY + } + y[iy] += alpha * sum + ix += incX + iy += incY + } + return + } + // Cases where a is lower triangular. + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + jy := ky + xv := alpha * x[i] + atmp := a[i*lda : i*lda+i] + var sum float32 + for j, v := range atmp { + sum += x[j] * v + y[jy] += xv * v + jy += incY + } + sum += x[i] * a[i*lda+i] + sum *= alpha + y[iy] += sum + iy += incY + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + jy := ky + xv := alpha * x[ix] + atmp := a[i*lda : i*lda+i] + var sum float32 + for _, v := range atmp { + sum += x[jx] * v + y[jy] += xv * v + jx += incX + jy += incY + } + sum += x[ix] * a[i*lda+i] + sum *= alpha + y[iy] += sum + ix += incX + iy += incY + } +} + +// Stbmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// where A is an n×n triangular banded matrix with k diagonals, and x is a vector. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Stbmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float32, lda int, x []float32, incX int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if k < 0 { + panic(kLT0) + } + if lda*(n-1)+k+1 > len(a) || lda < k+1 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if n == 0 { + return + } + var kx int + if incX <= 0 { + kx = -(n - 1) * incX + } else if incX != 1 { + kx = 0 + } + + nonunit := d != blas.Unit + + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + u := min(1+k, n-i) + var sum float32 + atmp := a[i*lda:] + xtmp := x[i:] + for j := 1; j < u; j++ { + sum += xtmp[j] * atmp[j] + } + if nonunit { + sum += xtmp[0] * atmp[0] + } else { + sum += xtmp[0] + } + x[i] = sum + } + return + } + ix := kx + for i := 0; i < n; i++ { + u := min(1+k, n-i) + var sum float32 + atmp := a[i*lda:] + jx := incX + for j := 1; j < u; j++ { + sum += x[ix+jx] * atmp[j] + jx += incX + } + if nonunit { + sum += x[ix] * atmp[0] + } else { + sum += x[ix] + } + x[ix] = sum + ix += incX + } + return + } + if incX == 1 { + for i := n - 1; i >= 0; i-- { + l := max(0, k-i) + atmp := a[i*lda:] + var sum float32 + for j := l; j < k; j++ { + sum += x[i-k+j] * atmp[j] + } + if nonunit { + sum += x[i] * atmp[k] + } else { + sum += x[i] + } + x[i] = sum + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + l := max(0, k-i) + atmp := a[i*lda:] + var sum float32 + jx := l * incX + for j := l; j < k; j++ { + sum += x[ix-k*incX+jx] * atmp[j] + jx += incX + } + if nonunit { + sum += x[ix] * atmp[k] + } else { + sum += x[ix] + } + x[ix] = sum + ix -= incX + } + return + } + if ul == blas.Upper { + if incX == 1 { + for i := n - 1; i >= 0; i-- { + u := k + 1 + if i < u { + u = i + 1 + } + var sum float32 + for j := 1; j < u; j++ { + sum += x[i-j] * a[(i-j)*lda+j] + } + if nonunit { + sum += x[i] * a[i*lda] + } else { + sum += x[i] + } + x[i] = sum + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + u := k + 1 + if i < u { + u = i + 1 + } + var sum float32 + jx := incX + for j := 1; j < u; j++ { + sum += x[ix-jx] * a[(i-j)*lda+j] + jx += incX + } + if nonunit { + sum += x[ix] * a[i*lda] + } else { + sum += x[ix] + } + x[ix] = sum + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + u := k + if i+k >= n { + u = n - i - 1 + } + var sum float32 + for j := 0; j < u; j++ { + sum += x[i+j+1] * a[(i+j+1)*lda+k-j-1] + } + if nonunit { + sum += x[i] * a[i*lda+k] + } else { + sum += x[i] + } + x[i] = sum + } + return + } + ix := kx + for i := 0; i < n; i++ { + u := k + if i+k >= n { + u = n - i - 1 + } + var ( + sum float32 + jx int + ) + for j := 0; j < u; j++ { + sum += x[ix+jx+incX] * a[(i+j+1)*lda+k-j-1] + jx += incX + } + if nonunit { + sum += x[ix] * a[i*lda+k] + } else { + sum += x[ix] + } + x[ix] = sum + ix += incX + } +} + +// Stpmv computes +// x = A * x if tA == blas.NoTrans +// x = A^T * x if tA == blas.Trans or blas.ConjTrans +// where A is an n×n unit triangular matrix in packed format, and x is a vector. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Stpmv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float32, x []float32, incX int) { + // Verify inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if len(ap) < (n*(n+1))/2 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if n == 0 { + return + } + var kx int + if incX <= 0 { + kx = -(n - 1) * incX + } + + nonUnit := d == blas.NonUnit + var offset int // Offset is the index of (i,i) + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + xi := x[i] + if nonUnit { + xi *= ap[offset] + } + atmp := ap[offset+1 : offset+n-i] + xtmp := x[i+1:] + for j, v := range atmp { + xi += v * xtmp[j] + } + x[i] = xi + offset += n - i + } + return + } + ix := kx + for i := 0; i < n; i++ { + xix := x[ix] + if nonUnit { + xix *= ap[offset] + } + atmp := ap[offset+1 : offset+n-i] + jx := kx + (i+1)*incX + for _, v := range atmp { + xix += v * x[jx] + jx += incX + } + x[ix] = xix + offset += n - i + ix += incX + } + return + } + if incX == 1 { + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + xi := x[i] + if nonUnit { + xi *= ap[offset] + } + atmp := ap[offset-i : offset] + for j, v := range atmp { + xi += v * x[j] + } + x[i] = xi + offset -= i + 1 + } + return + } + ix := kx + (n-1)*incX + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + xix := x[ix] + if nonUnit { + xix *= ap[offset] + } + atmp := ap[offset-i : offset] + jx := kx + for _, v := range atmp { + xix += v * x[jx] + jx += incX + } + x[ix] = xix + offset -= i + 1 + ix -= incX + } + return + } + // Cases where ap is transposed. + if ul == blas.Upper { + if incX == 1 { + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + xi := x[i] + atmp := ap[offset+1 : offset+n-i] + xtmp := x[i+1:] + for j, v := range atmp { + xtmp[j] += v * xi + } + if nonUnit { + x[i] *= ap[offset] + } + offset -= n - i + 1 + } + return + } + ix := kx + (n-1)*incX + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + xix := x[ix] + jx := kx + (i+1)*incX + atmp := ap[offset+1 : offset+n-i] + for _, v := range atmp { + x[jx] += v * xix + jx += incX + } + if nonUnit { + x[ix] *= ap[offset] + } + offset -= n - i + 1 + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + xi := x[i] + atmp := ap[offset-i : offset] + for j, v := range atmp { + x[j] += v * xi + } + if nonUnit { + x[i] *= ap[offset] + } + offset += i + 2 + } + return + } + ix := kx + for i := 0; i < n; i++ { + xix := x[ix] + jx := kx + atmp := ap[offset-i : offset] + for _, v := range atmp { + x[jx] += v * xix + jx += incX + } + if nonUnit { + x[ix] *= ap[offset] + } + ix += incX + offset += i + 2 + } +} + +// Stbsv solves +// A * x = b +// where A is an n×n triangular banded matrix with k diagonals in packed format, +// and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Stbsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n, k int, a []float32, lda int, x []float32, incX int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if lda*(n-1)+k+1 > len(a) || lda < k+1 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if n == 0 { + return + } + var kx int + if incX < 0 { + kx = -(n - 1) * incX + } else { + kx = 0 + } + nonUnit := d == blas.NonUnit + // Form x = A^-1 x. + // Several cases below use subslices for speed improvement. + // The incX != 1 cases usually do not because incX may be negative. + if tA == blas.NoTrans { + if ul == blas.Upper { + if incX == 1 { + for i := n - 1; i >= 0; i-- { + bands := k + if i+bands >= n { + bands = n - i - 1 + } + atmp := a[i*lda+1:] + xtmp := x[i+1 : i+bands+1] + var sum float32 + for j, v := range xtmp { + sum += v * atmp[j] + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda] + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + max := k + 1 + if i+max > n { + max = n - i + } + atmp := a[i*lda:] + var ( + jx int + sum float32 + ) + for j := 1; j < max; j++ { + jx += incX + sum += x[ix+jx] * atmp[j] + } + x[ix] -= sum + if nonUnit { + x[ix] /= atmp[0] + } + ix -= incX + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + bands := k + if i-k < 0 { + bands = i + } + atmp := a[i*lda+k-bands:] + xtmp := x[i-bands : i] + var sum float32 + for j, v := range xtmp { + sum += v * atmp[j] + } + x[i] -= sum + if nonUnit { + x[i] /= atmp[bands] + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + bands := k + if i-k < 0 { + bands = i + } + atmp := a[i*lda+k-bands:] + var ( + sum float32 + jx int + ) + for j := 0; j < bands; j++ { + sum += x[ix-bands*incX+jx] * atmp[j] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= atmp[bands] + } + ix += incX + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + bands := k + if i-k < 0 { + bands = i + } + var sum float32 + for j := 0; j < bands; j++ { + sum += x[i-bands+j] * a[(i-bands+j)*lda+bands-j] + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda] + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + bands := k + if i-k < 0 { + bands = i + } + var ( + sum float32 + jx int + ) + for j := 0; j < bands; j++ { + sum += x[ix-bands*incX+jx] * a[(i-bands+j)*lda+bands-j] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= a[i*lda] + } + ix += incX + } + return + } + if incX == 1 { + for i := n - 1; i >= 0; i-- { + bands := k + if i+bands >= n { + bands = n - i - 1 + } + var sum float32 + xtmp := x[i+1 : i+1+bands] + for j, v := range xtmp { + sum += v * a[(i+j+1)*lda+k-j-1] + } + x[i] -= sum + if nonUnit { + x[i] /= a[i*lda+k] + } + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + bands := k + if i+bands >= n { + bands = n - i - 1 + } + var ( + sum float32 + jx int + ) + for j := 0; j < bands; j++ { + sum += x[ix+jx+incX] * a[(i+j+1)*lda+k-j-1] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= a[i*lda+k] + } + ix -= incX + } +} + +// Ssbmv performs +// y = alpha * A * x + beta * y +// where A is an n×n symmetric banded matrix, x and y are vectors, and alpha +// and beta are scalars. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Ssbmv(ul blas.Uplo, n, k int, alpha float32, a []float32, lda int, x []float32, incX int, beta float32, y []float32, incY int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if lda*(n-1)+k+1 > len(a) || lda < k+1 { + panic(badLdA) + } + + // Quick return if possible + if n == 0 || (alpha == 0 && beta == 1) { + return + } + + // Set up indexes + lenX := n + lenY := n + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(lenY - 1) * incY + } + + // First form y := beta * y + if incY > 0 { + Implementation{}.Sscal(lenY, beta, y, incY) + } else { + Implementation{}.Sscal(lenY, beta, y, -incY) + } + + if alpha == 0 { + return + } + + if ul == blas.Upper { + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + atmp := a[i*lda:] + tmp := alpha * x[i] + sum := tmp * atmp[0] + u := min(k, n-i-1) + jy := incY + for j := 1; j <= u; j++ { + v := atmp[j] + sum += alpha * x[i+j] * v + y[iy+jy] += tmp * v + jy += incY + } + y[iy] += sum + iy += incY + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + atmp := a[i*lda:] + tmp := alpha * x[ix] + sum := tmp * atmp[0] + u := min(k, n-i-1) + jx := incX + jy := incY + for j := 1; j <= u; j++ { + v := atmp[j] + sum += alpha * x[ix+jx] * v + y[iy+jy] += tmp * v + jx += incX + jy += incY + } + y[iy] += sum + ix += incX + iy += incY + } + return + } + + // Casses where a has bands below the diagonal. + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + l := max(0, k-i) + tmp := alpha * x[i] + jy := l * incY + atmp := a[i*lda:] + for j := l; j < k; j++ { + v := atmp[j] + y[iy] += alpha * v * x[i-k+j] + y[iy-k*incY+jy] += tmp * v + jy += incY + } + y[iy] += tmp * atmp[k] + iy += incY + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + l := max(0, k-i) + tmp := alpha * x[ix] + jx := l * incX + jy := l * incY + atmp := a[i*lda:] + for j := l; j < k; j++ { + v := atmp[j] + y[iy] += alpha * v * x[ix-k*incX+jx] + y[iy-k*incY+jy] += tmp * v + jx += incX + jy += incY + } + y[iy] += tmp * atmp[k] + ix += incX + iy += incY + } + return +} + +// Ssyr performs the rank-one update +// a += alpha * x * x^T +// where a is an n×n symmetric matrix, and x is a vector. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Ssyr(ul blas.Uplo, n int, alpha float32, x []float32, incX int, a []float32, lda int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if alpha == 0 || n == 0 { + return + } + + lenX := n + var kx int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + tmp := x[i] * alpha + if tmp != 0 { + atmp := a[i*lda+i : i*lda+n] + xtmp := x[i:n] + for j, v := range xtmp { + atmp[j] += v * tmp + } + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + tmp := x[ix] * alpha + if tmp != 0 { + jx := ix + atmp := a[i*lda:] + for j := i; j < n; j++ { + atmp[j] += x[jx] * tmp + jx += incX + } + } + ix += incX + } + return + } + // Cases where a is lower triangular. + if incX == 1 { + for i := 0; i < n; i++ { + tmp := x[i] * alpha + if tmp != 0 { + atmp := a[i*lda:] + xtmp := x[:i+1] + for j, v := range xtmp { + atmp[j] += tmp * v + } + } + } + return + } + ix := kx + for i := 0; i < n; i++ { + tmp := x[ix] * alpha + if tmp != 0 { + atmp := a[i*lda:] + jx := kx + for j := 0; j < i+1; j++ { + atmp[j] += tmp * x[jx] + jx += incX + } + } + ix += incX + } +} + +// Ssyr2 performs the symmetric rank-two update +// A += alpha * x * y^T + alpha * y * x^T +// where A is a symmetric n×n matrix, x and y are vectors, and alpha is a scalar. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Ssyr2(ul blas.Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, a []float32, lda int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if lda*(n-1)+n > len(a) || lda < max(1, n) { + panic(badLdA) + } + if alpha == 0 { + return + } + + var ky, kx int + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + if incX > 0 { + kx = 0 + } else { + kx = -(n - 1) * incX + } + if ul == blas.Upper { + if incX == 1 && incY == 1 { + for i := 0; i < n; i++ { + xi := x[i] + yi := y[i] + atmp := a[i*lda:] + for j := i; j < n; j++ { + atmp[j] += alpha * (xi*y[j] + x[j]*yi) + } + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + i*incX + jy := ky + i*incY + xi := x[ix] + yi := y[iy] + atmp := a[i*lda:] + for j := i; j < n; j++ { + atmp[j] += alpha * (xi*y[jy] + x[jx]*yi) + jx += incX + jy += incY + } + ix += incX + iy += incY + } + return + } + if incX == 1 && incY == 1 { + for i := 0; i < n; i++ { + xi := x[i] + yi := y[i] + atmp := a[i*lda:] + for j := 0; j <= i; j++ { + atmp[j] += alpha * (xi*y[j] + x[j]*yi) + } + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + jy := ky + xi := x[ix] + yi := y[iy] + atmp := a[i*lda:] + for j := 0; j <= i; j++ { + atmp[j] += alpha * (xi*y[jy] + x[jx]*yi) + jx += incX + jy += incY + } + ix += incX + iy += incY + } + return +} + +// Stpsv solves +// A * x = b if tA == blas.NoTrans +// A^T * x = b if tA == blas.Trans or blas.ConjTrans +// where A is an n×n triangular matrix in packed format and x is a vector. +// At entry to the function, x contains the values of b, and the result is +// stored in place into x. +// +// No test for singularity or near-singularity is included in this +// routine. Such tests must be performed before calling this routine. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Stpsv(ul blas.Uplo, tA blas.Transpose, d blas.Diag, n int, ap []float32, x []float32, incX int) { + // Verify inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if n < 0 { + panic(nLT0) + } + if len(ap) < (n*(n+1))/2 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if n == 0 { + return + } + var kx int + if incX <= 0 { + kx = -(n - 1) * incX + } + + nonUnit := d == blas.NonUnit + var offset int // Offset is the index of (i,i) + if tA == blas.NoTrans { + if ul == blas.Upper { + offset = n*(n+1)/2 - 1 + if incX == 1 { + for i := n - 1; i >= 0; i-- { + atmp := ap[offset+1 : offset+n-i] + xtmp := x[i+1:] + var sum float32 + for j, v := range atmp { + sum += v * xtmp[j] + } + x[i] -= sum + if nonUnit { + x[i] /= ap[offset] + } + offset -= n - i + 1 + } + return + } + ix := kx + (n-1)*incX + for i := n - 1; i >= 0; i-- { + atmp := ap[offset+1 : offset+n-i] + jx := kx + (i+1)*incX + var sum float32 + for _, v := range atmp { + sum += v * x[jx] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= ap[offset] + } + ix -= incX + offset -= n - i + 1 + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + atmp := ap[offset-i : offset] + var sum float32 + for j, v := range atmp { + sum += v * x[j] + } + x[i] -= sum + if nonUnit { + x[i] /= ap[offset] + } + offset += i + 2 + } + return + } + ix := kx + for i := 0; i < n; i++ { + jx := kx + atmp := ap[offset-i : offset] + var sum float32 + for _, v := range atmp { + sum += v * x[jx] + jx += incX + } + x[ix] -= sum + if nonUnit { + x[ix] /= ap[offset] + } + ix += incX + offset += i + 2 + } + return + } + // Cases where ap is transposed. + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + if nonUnit { + x[i] /= ap[offset] + } + xi := x[i] + atmp := ap[offset+1 : offset+n-i] + xtmp := x[i+1:] + for j, v := range atmp { + xtmp[j] -= v * xi + } + offset += n - i + } + return + } + ix := kx + for i := 0; i < n; i++ { + if nonUnit { + x[ix] /= ap[offset] + } + xix := x[ix] + atmp := ap[offset+1 : offset+n-i] + jx := kx + (i+1)*incX + for _, v := range atmp { + x[jx] -= v * xix + jx += incX + } + ix += incX + offset += n - i + } + return + } + if incX == 1 { + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + if nonUnit { + x[i] /= ap[offset] + } + xi := x[i] + atmp := ap[offset-i : offset] + for j, v := range atmp { + x[j] -= v * xi + } + offset -= i + 1 + } + return + } + ix := kx + (n-1)*incX + offset = n*(n+1)/2 - 1 + for i := n - 1; i >= 0; i-- { + if nonUnit { + x[ix] /= ap[offset] + } + xix := x[ix] + atmp := ap[offset-i : offset] + jx := kx + for _, v := range atmp { + x[jx] -= v * xix + jx += incX + } + ix -= incX + offset -= i + 1 + } +} + +// Sspmv performs +// y = alpha * A * x + beta * y, +// where A is an n×n symmetric matrix in packed format, x and y are vectors +// and alpha and beta are scalars. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sspmv(ul blas.Uplo, n int, alpha float32, a []float32, x []float32, incX int, beta float32, y []float32, incY int) { + // Verify inputs + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if len(a) < (n*(n+1))/2 { + panic(badLdA) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + // Quick return if possible + if n == 0 || (alpha == 0 && beta == 1) { + return + } + + // Set up start points + var kx, ky int + if incX > 0 { + kx = 0 + } else { + kx = -(n - 1) * incX + } + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + + // Form y = beta * y + if beta != 1 { + if incY > 0 { + Implementation{}.Sscal(n, beta, y, incY) + } else { + Implementation{}.Sscal(n, beta, y, -incY) + } + } + + if alpha == 0 { + return + } + + if n == 1 { + y[0] += alpha * a[0] * x[0] + return + } + var offset int // Offset is the index of (i,i). + if ul == blas.Upper { + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + xv := x[i] * alpha + sum := a[offset] * x[i] + atmp := a[offset+1 : offset+n-i] + xtmp := x[i+1:] + jy := ky + (i+1)*incY + for j, v := range atmp { + sum += v * xtmp[j] + y[jy] += v * xv + jy += incY + } + y[iy] += alpha * sum + iy += incY + offset += n - i + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + xv := x[ix] * alpha + sum := a[offset] * x[ix] + atmp := a[offset+1 : offset+n-i] + jx := kx + (i+1)*incX + jy := ky + (i+1)*incY + for _, v := range atmp { + sum += v * x[jx] + y[jy] += v * xv + jx += incX + jy += incY + } + y[iy] += alpha * sum + ix += incX + iy += incY + offset += n - i + } + return + } + if incX == 1 { + iy := ky + for i := 0; i < n; i++ { + xv := x[i] * alpha + atmp := a[offset-i : offset] + jy := ky + var sum float32 + for j, v := range atmp { + sum += v * x[j] + y[jy] += v * xv + jy += incY + } + sum += a[offset] * x[i] + y[iy] += alpha * sum + iy += incY + offset += i + 2 + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + xv := x[ix] * alpha + atmp := a[offset-i : offset] + jx := kx + jy := ky + var sum float32 + for _, v := range atmp { + sum += v * x[jx] + y[jy] += v * xv + jx += incX + jy += incY + } + + sum += a[offset] * x[ix] + y[iy] += alpha * sum + ix += incX + iy += incY + offset += i + 2 + } +} + +// Sspr computes the rank-one operation +// a += alpha * x * x^T +// where a is an n×n symmetric matrix in packed format, x is a vector, and +// alpha is a scalar. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sspr(ul blas.Uplo, n int, alpha float32, x []float32, incX int, a []float32) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if incX == 0 { + panic(zeroIncX) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if len(a) < (n*(n+1))/2 { + panic(badLdA) + } + if alpha == 0 || n == 0 { + return + } + lenX := n + var kx int + if incX > 0 { + kx = 0 + } else { + kx = -(lenX - 1) * incX + } + var offset int // Offset is the index of (i,i). + if ul == blas.Upper { + if incX == 1 { + for i := 0; i < n; i++ { + atmp := a[offset:] + xv := alpha * x[i] + xtmp := x[i:n] + for j, v := range xtmp { + atmp[j] += xv * v + } + offset += n - i + } + return + } + ix := kx + for i := 0; i < n; i++ { + jx := kx + i*incX + atmp := a[offset:] + xv := alpha * x[ix] + for j := 0; j < n-i; j++ { + atmp[j] += xv * x[jx] + jx += incX + } + ix += incX + offset += n - i + } + return + } + if incX == 1 { + for i := 0; i < n; i++ { + atmp := a[offset-i:] + xv := alpha * x[i] + xtmp := x[:i+1] + for j, v := range xtmp { + atmp[j] += xv * v + } + offset += i + 2 + } + return + } + ix := kx + for i := 0; i < n; i++ { + jx := kx + atmp := a[offset-i:] + xv := alpha * x[ix] + for j := 0; j <= i; j++ { + atmp[j] += xv * x[jx] + jx += incX + } + ix += incX + offset += i + 2 + } +} + +// Sspr2 performs the symmetric rank-2 update +// a += alpha * x * y^T + alpha * y * x^T +// where a is an n×n symmetric matrix in packed format and x and y are vectors. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sspr2(ul blas.Uplo, n int, alpha float32, x []float32, incX int, y []float32, incY int, ap []float32) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if incX == 0 { + panic(zeroIncX) + } + if incY == 0 { + panic(zeroIncY) + } + if (incX > 0 && (n-1)*incX >= len(x)) || (incX < 0 && (1-n)*incX >= len(x)) { + panic(badX) + } + if (incY > 0 && (n-1)*incY >= len(y)) || (incY < 0 && (1-n)*incY >= len(y)) { + panic(badY) + } + if len(ap) < (n*(n+1))/2 { + panic(badLdA) + } + if alpha == 0 { + return + } + var ky, kx int + if incY > 0 { + ky = 0 + } else { + ky = -(n - 1) * incY + } + if incX > 0 { + kx = 0 + } else { + kx = -(n - 1) * incX + } + var offset int // Offset is the index of (i,i). + if ul == blas.Upper { + if incX == 1 && incY == 1 { + for i := 0; i < n; i++ { + atmp := ap[offset:] + xi := x[i] + yi := y[i] + xtmp := x[i:n] + ytmp := y[i:n] + for j, v := range xtmp { + atmp[j] += alpha * (xi*ytmp[j] + v*yi) + } + offset += n - i + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + i*incX + jy := ky + i*incY + atmp := ap[offset:] + xi := x[ix] + yi := y[iy] + for j := 0; j < n-i; j++ { + atmp[j] += alpha * (xi*y[jy] + x[jx]*yi) + jx += incX + jy += incY + } + ix += incX + iy += incY + offset += n - i + } + return + } + if incX == 1 && incY == 1 { + for i := 0; i < n; i++ { + atmp := ap[offset-i:] + xi := x[i] + yi := y[i] + xtmp := x[:i+1] + for j, v := range xtmp { + atmp[j] += alpha * (xi*y[j] + v*yi) + } + offset += i + 2 + } + return + } + ix := kx + iy := ky + for i := 0; i < n; i++ { + jx := kx + jy := ky + atmp := ap[offset-i:] + for j := 0; j <= i; j++ { + atmp[j] += alpha * (x[ix]*y[jy] + x[jx]*y[iy]) + jx += incX + jy += incY + } + ix += incX + iy += incY + offset += i + 2 + } +} diff --git a/vendor/github.com/gonum/blas/native/level3double.go b/vendor/github.com/gonum/blas/native/level3double.go new file mode 100644 index 00000000..5a196522 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level3double.go @@ -0,0 +1,831 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +var _ blas.Float64Level3 = Implementation{} + +// Dtrsm solves +// A * X = alpha * B if tA == blas.NoTrans and side == blas.Left +// A^T * X = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left +// X * A = alpha * B if tA == blas.NoTrans and side == blas.Right +// X * A^T = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Right +// where A is an n×n triangular matrix, x is an m×n matrix, and alpha is a +// scalar. +// +// At entry to the function, X contains the values of B, and the result is +// stored in place into X. +// +// No check is made that A is invertible. +func (Implementation) Dtrsm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int) { + if s != blas.Left && s != blas.Right { + panic(badSide) + } + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + if ldb < n { + panic(badLdB) + } + var k int + if s == blas.Left { + k = m + } else { + k = n + } + if lda*(k-1)+k > len(a) || lda < max(1, k) { + panic(badLdA) + } + if ldb*(m-1)+n > len(b) || ldb < max(1, n) { + panic(badLdB) + } + + if m == 0 || n == 0 { + return + } + + if alpha == 0 { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for j := range btmp { + btmp[j] = 0 + } + } + return + } + nonUnit := d == blas.NonUnit + if s == blas.Left { + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := m - 1; i >= 0; i-- { + btmp := b[i*ldb : i*ldb+n] + if alpha != 1 { + for j := range btmp { + btmp[j] *= alpha + } + } + for ka, va := range a[i*lda+i+1 : i*lda+m] { + k := ka + i + 1 + if va != 0 { + asm.DaxpyUnitary(-va, b[k*ldb:k*ldb+n], btmp, btmp) + } + } + if nonUnit { + tmp := 1 / a[i*lda+i] + for j := 0; j < n; j++ { + btmp[j] *= tmp + } + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + if alpha != 1 { + for j := 0; j < n; j++ { + btmp[j] *= alpha + } + } + for k, va := range a[i*lda : i*lda+i] { + if va != 0 { + asm.DaxpyUnitary(-va, b[k*ldb:k*ldb+n], btmp, btmp) + } + } + if nonUnit { + tmp := 1 / a[i*lda+i] + for j := 0; j < n; j++ { + btmp[j] *= tmp + } + } + } + return + } + // Cases where a is transposed + if ul == blas.Upper { + for k := 0; k < m; k++ { + btmpk := b[k*ldb : k*ldb+n] + if nonUnit { + tmp := 1 / a[k*lda+k] + for j := 0; j < n; j++ { + btmpk[j] *= tmp + } + } + for ia, va := range a[k*lda+k+1 : k*lda+m] { + i := ia + k + 1 + if va != 0 { + btmp := b[i*ldb : i*ldb+n] + asm.DaxpyUnitary(-va, btmpk, btmp, btmp) + } + } + if alpha != 1 { + for j := 0; j < n; j++ { + btmpk[j] *= alpha + } + } + } + return + } + for k := m - 1; k >= 0; k-- { + btmpk := b[k*ldb : k*ldb+n] + if nonUnit { + tmp := 1 / a[k*lda+k] + for j := 0; j < n; j++ { + btmpk[j] *= tmp + } + } + for i, va := range a[k*lda : k*lda+k] { + if va != 0 { + btmp := b[i*ldb : i*ldb+n] + asm.DaxpyUnitary(-va, btmpk, btmp, btmp) + } + } + if alpha != 1 { + for j := 0; j < n; j++ { + btmpk[j] *= alpha + } + } + } + return + } + // Cases where a is to the right of X. + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + if alpha != 1 { + for j := 0; j < n; j++ { + btmp[j] *= alpha + } + } + for k, vb := range btmp { + if vb != 0 { + if btmp[k] != 0 { + if nonUnit { + btmp[k] /= a[k*lda+k] + } + btmpk := btmp[k+1 : n] + asm.DaxpyUnitary(-btmp[k], a[k*lda+k+1:k*lda+n], btmpk, btmpk) + } + } + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*lda : i*lda+n] + if alpha != 1 { + for j := 0; j < n; j++ { + btmp[j] *= alpha + } + } + for k := n - 1; k >= 0; k-- { + if btmp[k] != 0 { + if nonUnit { + btmp[k] /= a[k*lda+k] + } + asm.DaxpyUnitary(-btmp[k], a[k*lda:k*lda+k], btmp, btmp) + } + } + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + for i := 0; i < m; i++ { + btmp := b[i*lda : i*lda+n] + for j := n - 1; j >= 0; j-- { + tmp := alpha*btmp[j] - asm.DdotUnitary(a[j*lda+j+1:j*lda+n], btmp[j+1:]) + if nonUnit { + tmp /= a[j*lda+j] + } + btmp[j] = tmp + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*lda : i*lda+n] + for j := 0; j < n; j++ { + tmp := alpha*btmp[j] - asm.DdotUnitary(a[j*lda:j*lda+j], btmp) + if nonUnit { + tmp /= a[j*lda+j] + } + btmp[j] = tmp + } + } +} + +// Dsymm performs one of +// C = alpha * A * B + beta * C if side == blas.Left +// C = alpha * B * A + beta * C if side == blas.Right +// where A is an n×n symmetric matrix, B and C are m×n matrices, and alpha +// is a scalar. +func (Implementation) Dsymm(s blas.Side, ul blas.Uplo, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) { + if s != blas.Right && s != blas.Left { + panic("goblas: bad side") + } + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + var k int + if s == blas.Left { + k = m + } else { + k = n + } + if lda*(k-1)+k > len(a) || lda < max(1, k) { + panic(badLdA) + } + if ldb*(m-1)+n > len(b) || ldb < max(1, n) { + panic(badLdB) + } + if ldc*(m-1)+n > len(c) || ldc < max(1, n) { + panic(badLdC) + } + if m == 0 || n == 0 { + return + } + if alpha == 0 && beta == 1 { + return + } + if alpha == 0 { + if beta == 0 { + for i := 0; i < m; i++ { + ctmp := c[i*ldc : i*ldc+n] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + for i := 0; i < m; i++ { + ctmp := c[i*ldc : i*ldc+n] + for j := 0; j < n; j++ { + ctmp[j] *= beta + } + } + return + } + + isUpper := ul == blas.Upper + if s == blas.Left { + for i := 0; i < m; i++ { + atmp := alpha * a[i*lda+i] + btmp := b[i*ldb : i*ldb+n] + ctmp := c[i*ldc : i*ldc+n] + for j, v := range btmp { + ctmp[j] *= beta + ctmp[j] += atmp * v + } + + for k := 0; k < i; k++ { + var atmp float64 + if isUpper { + atmp = a[k*lda+i] + } else { + atmp = a[i*lda+k] + } + atmp *= alpha + ctmp := c[i*ldc : i*ldc+n] + asm.DaxpyUnitary(atmp, b[k*ldb:k*ldb+n], ctmp, ctmp) + } + for k := i + 1; k < m; k++ { + var atmp float64 + if isUpper { + atmp = a[i*lda+k] + } else { + atmp = a[k*lda+i] + } + atmp *= alpha + ctmp := c[i*ldc : i*ldc+n] + asm.DaxpyUnitary(atmp, b[k*ldb:k*ldb+n], ctmp, ctmp) + } + } + return + } + if isUpper { + for i := 0; i < m; i++ { + for j := n - 1; j >= 0; j-- { + tmp := alpha * b[i*ldb+j] + var tmp2 float64 + atmp := a[j*lda+j+1 : j*lda+n] + btmp := b[i*ldb+j+1 : i*ldb+n] + ctmp := c[i*ldc+j+1 : i*ldc+n] + for k, v := range atmp { + ctmp[k] += tmp * v + tmp2 += btmp[k] * v + } + c[i*ldc+j] *= beta + c[i*ldc+j] += tmp*a[j*lda+j] + alpha*tmp2 + } + } + return + } + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + tmp := alpha * b[i*ldb+j] + var tmp2 float64 + atmp := a[j*lda : j*lda+j] + btmp := b[i*ldb : i*ldb+j] + ctmp := c[i*ldc : i*ldc+j] + for k, v := range atmp { + ctmp[k] += tmp * v + tmp2 += btmp[k] * v + } + c[i*ldc+j] *= beta + c[i*ldc+j] += tmp*a[j*lda+j] + alpha*tmp2 + } + } +} + +// Dsyrk performs the symmetric rank-k operation +// C = alpha * A * A^T + beta*C +// C is an n×n symmetric matrix. A is an n×k matrix if tA == blas.NoTrans, and +// a k×n matrix otherwise. alpha and beta are scalars. +func (Implementation) Dsyrk(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float64, a []float64, lda int, beta float64, c []float64, ldc int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.Trans && tA != blas.NoTrans && tA != blas.ConjTrans { + panic(badTranspose) + } + if n < 0 { + panic(nLT0) + } + if k < 0 { + panic(kLT0) + } + if ldc < n { + panic(badLdC) + } + var row, col int + if tA == blas.NoTrans { + row, col = n, k + } else { + row, col = k, n + } + if lda*(row-1)+col > len(a) || lda < max(1, col) { + panic(badLdA) + } + if ldc*(n-1)+n > len(c) || ldc < max(1, n) { + panic(badLdC) + } + if alpha == 0 { + if beta == 0 { + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + for j := range ctmp { + ctmp[j] *= beta + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + for j := range ctmp { + ctmp[j] *= beta + } + } + return + } + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + atmp := a[i*lda : i*lda+k] + for jc, vc := range ctmp { + j := jc + i + ctmp[jc] = vc*beta + alpha*asm.DdotUnitary(atmp, a[j*lda:j*lda+k]) + } + } + return + } + for i := 0; i < n; i++ { + atmp := a[i*lda : i*lda+k] + for j, vc := range c[i*ldc : i*ldc+i+1] { + c[i*ldc+j] = vc*beta + alpha*asm.DdotUnitary(a[j*lda:j*lda+k], atmp) + } + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + if beta != 1 { + for j := range ctmp { + ctmp[j] *= beta + } + } + for l := 0; l < k; l++ { + tmp := alpha * a[l*lda+i] + if tmp != 0 { + asm.DaxpyUnitary(tmp, a[l*lda+i:l*lda+n], ctmp, ctmp) + } + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + if beta != 0 { + for j := range ctmp { + ctmp[j] *= beta + } + } + for l := 0; l < k; l++ { + tmp := alpha * a[l*lda+i] + if tmp != 0 { + asm.DaxpyUnitary(tmp, a[l*lda:l*lda+i+1], ctmp, ctmp) + } + } + } +} + +// Dsyr2k performs the symmetric rank 2k operation +// C = alpha * A * B^T + alpha * B * A^T + beta * C +// where C is an n×n symmetric matrix. A and B are n×k matrices if +// tA == NoTrans and k×n otherwise. alpha and beta are scalars. +func (Implementation) Dsyr2k(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float64, a []float64, lda int, b []float64, ldb int, beta float64, c []float64, ldc int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.Trans && tA != blas.NoTrans && tA != blas.ConjTrans { + panic(badTranspose) + } + if n < 0 { + panic(nLT0) + } + if k < 0 { + panic(kLT0) + } + if ldc < n { + panic(badLdC) + } + var row, col int + if tA == blas.NoTrans { + row, col = n, k + } else { + row, col = k, n + } + if lda*(row-1)+col > len(a) || lda < max(1, col) { + panic(badLdA) + } + if ldb*(row-1)+col > len(b) || ldb < max(1, col) { + panic(badLdB) + } + if ldc*(n-1)+n > len(c) || ldc < max(1, n) { + panic(badLdC) + } + if alpha == 0 { + if beta == 0 { + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + for j := range ctmp { + ctmp[j] *= beta + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + for j := range ctmp { + ctmp[j] *= beta + } + } + return + } + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < n; i++ { + atmp := a[i*lda : i*lda+k] + btmp := b[i*lda : i*lda+k] + ctmp := c[i*ldc+i : i*ldc+n] + for jc := range ctmp { + j := i + jc + var tmp1, tmp2 float64 + binner := b[j*ldb : j*ldb+k] + for l, v := range a[j*lda : j*lda+k] { + tmp1 += v * btmp[l] + tmp2 += atmp[l] * binner[l] + } + ctmp[jc] *= beta + ctmp[jc] += alpha * (tmp1 + tmp2) + } + } + return + } + for i := 0; i < n; i++ { + atmp := a[i*lda : i*lda+k] + btmp := b[i*lda : i*lda+k] + ctmp := c[i*ldc : i*ldc+i+1] + for j := 0; j <= i; j++ { + var tmp1, tmp2 float64 + binner := b[j*ldb : j*ldb+k] + for l, v := range a[j*lda : j*lda+k] { + tmp1 += v * btmp[l] + tmp2 += atmp[l] * binner[l] + } + ctmp[j] *= beta + ctmp[j] += alpha * (tmp1 + tmp2) + } + } + return + } + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + if beta != 1 { + for j := range ctmp { + ctmp[j] *= beta + } + } + for l := 0; l < k; l++ { + tmp1 := alpha * b[l*lda+i] + tmp2 := alpha * a[l*lda+i] + btmp := b[l*ldb+i : l*ldb+n] + if tmp1 != 0 || tmp2 != 0 { + for j, v := range a[l*lda+i : l*lda+n] { + ctmp[j] += v*tmp1 + btmp[j]*tmp2 + } + } + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + if beta != 1 { + for j := range ctmp { + ctmp[j] *= beta + } + } + for l := 0; l < k; l++ { + tmp1 := alpha * b[l*lda+i] + tmp2 := alpha * a[l*lda+i] + btmp := b[l*ldb : l*ldb+i+1] + if tmp1 != 0 || tmp2 != 0 { + for j, v := range a[l*lda : l*lda+i+1] { + ctmp[j] += v*tmp1 + btmp[j]*tmp2 + } + } + } + } +} + +// Dtrmm performs +// B = alpha * A * B if tA == blas.NoTrans and side == blas.Left +// B = alpha * A^T * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left +// B = alpha * B * A if tA == blas.NoTrans and side == blas.Right +// B = alpha * B * A^T if tA == blas.Trans or blas.ConjTrans, and side == blas.Right +// where A is an n×n triangular matrix, and B is an m×n matrix. +func (Implementation) Dtrmm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int, alpha float64, a []float64, lda int, b []float64, ldb int) { + if s != blas.Left && s != blas.Right { + panic(badSide) + } + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + var k int + if s == blas.Left { + k = m + } else { + k = n + } + if lda*(k-1)+k > len(a) || lda < max(1, k) { + panic(badLdA) + } + if ldb*(m-1)+n > len(b) || ldb < max(1, n) { + panic(badLdB) + } + if alpha == 0 { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for j := range btmp { + btmp[j] = 0 + } + } + return + } + + nonUnit := d == blas.NonUnit + if s == blas.Left { + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < m; i++ { + tmp := alpha + if nonUnit { + tmp *= a[i*lda+i] + } + btmp := b[i*ldb : i*ldb+n] + for j := range btmp { + btmp[j] *= tmp + } + for ka, va := range a[i*lda+i+1 : i*lda+m] { + k := ka + i + 1 + tmp := alpha * va + if tmp != 0 { + asm.DaxpyUnitary(tmp, b[k*ldb:k*ldb+n], btmp, btmp) + } + } + } + return + } + for i := m - 1; i >= 0; i-- { + tmp := alpha + if nonUnit { + tmp *= a[i*lda+i] + } + btmp := b[i*ldb : i*ldb+n] + for j := range btmp { + btmp[j] *= tmp + } + for k, va := range a[i*lda : i*lda+i] { + tmp := alpha * va + if tmp != 0 { + asm.DaxpyUnitary(tmp, b[k*ldb:k*ldb+n], btmp, btmp) + } + } + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + for k := m - 1; k >= 0; k-- { + btmpk := b[k*ldb : k*ldb+n] + for ia, va := range a[k*lda+k+1 : k*lda+m] { + i := ia + k + 1 + btmp := b[i*ldb : i*ldb+n] + tmp := alpha * va + if tmp != 0 { + asm.DaxpyUnitary(tmp, btmpk, btmp, btmp) + } + } + tmp := alpha + if nonUnit { + tmp *= a[k*lda+k] + } + if tmp != 1 { + for j := 0; j < n; j++ { + btmpk[j] *= tmp + } + } + } + return + } + for k := 0; k < m; k++ { + btmpk := b[k*ldb : k*ldb+n] + for i, va := range a[k*lda : k*lda+k] { + btmp := b[i*ldb : i*ldb+n] + tmp := alpha * va + if tmp != 0 { + asm.DaxpyUnitary(tmp, btmpk, btmp, btmp) + } + } + tmp := alpha + if nonUnit { + tmp *= a[k*lda+k] + } + if tmp != 1 { + for j := 0; j < n; j++ { + btmpk[j] *= tmp + } + } + } + return + } + // Cases where a is on the right + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for k := n - 1; k >= 0; k-- { + tmp := alpha * btmp[k] + if tmp != 0 { + btmp[k] = tmp + if nonUnit { + btmp[k] *= a[k*lda+k] + } + for ja, v := range a[k*lda+k+1 : k*lda+n] { + j := ja + k + 1 + btmp[j] += tmp * v + } + } + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for k := 0; k < n; k++ { + tmp := alpha * btmp[k] + if tmp != 0 { + btmp[k] = tmp + if nonUnit { + btmp[k] *= a[k*lda+k] + } + asm.DaxpyUnitary(tmp, a[k*lda:k*lda+k], btmp, btmp) + } + } + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for j, vb := range btmp { + tmp := vb + if nonUnit { + tmp *= a[j*lda+j] + } + tmp += asm.DdotUnitary(a[j*lda+j+1:j*lda+n], btmp[j+1:n]) + btmp[j] = alpha * tmp + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for j := n - 1; j >= 0; j-- { + tmp := btmp[j] + if nonUnit { + tmp *= a[j*lda+j] + } + tmp += asm.DdotUnitary(a[j*lda:j*lda+j], btmp[:j]) + btmp[j] = alpha * tmp + } + } +} diff --git a/vendor/github.com/gonum/blas/native/level3single.go b/vendor/github.com/gonum/blas/native/level3single.go new file mode 100644 index 00000000..6bc9a56d --- /dev/null +++ b/vendor/github.com/gonum/blas/native/level3single.go @@ -0,0 +1,843 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +var _ blas.Float32Level3 = Implementation{} + +// Strsm solves +// A * X = alpha * B if tA == blas.NoTrans and side == blas.Left +// A^T * X = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left +// X * A = alpha * B if tA == blas.NoTrans and side == blas.Right +// X * A^T = alpha * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Right +// where A is an n×n triangular matrix, x is an m×n matrix, and alpha is a +// scalar. +// +// At entry to the function, X contains the values of B, and the result is +// stored in place into X. +// +// No check is made that A is invertible. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Strsm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int) { + if s != blas.Left && s != blas.Right { + panic(badSide) + } + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + if ldb < n { + panic(badLdB) + } + var k int + if s == blas.Left { + k = m + } else { + k = n + } + if lda*(k-1)+k > len(a) || lda < max(1, k) { + panic(badLdA) + } + if ldb*(m-1)+n > len(b) || ldb < max(1, n) { + panic(badLdB) + } + + if m == 0 || n == 0 { + return + } + + if alpha == 0 { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for j := range btmp { + btmp[j] = 0 + } + } + return + } + nonUnit := d == blas.NonUnit + if s == blas.Left { + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := m - 1; i >= 0; i-- { + btmp := b[i*ldb : i*ldb+n] + if alpha != 1 { + for j := range btmp { + btmp[j] *= alpha + } + } + for ka, va := range a[i*lda+i+1 : i*lda+m] { + k := ka + i + 1 + if va != 0 { + asm.SaxpyUnitary(-va, b[k*ldb:k*ldb+n], btmp, btmp) + } + } + if nonUnit { + tmp := 1 / a[i*lda+i] + for j := 0; j < n; j++ { + btmp[j] *= tmp + } + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + if alpha != 1 { + for j := 0; j < n; j++ { + btmp[j] *= alpha + } + } + for k, va := range a[i*lda : i*lda+i] { + if va != 0 { + asm.SaxpyUnitary(-va, b[k*ldb:k*ldb+n], btmp, btmp) + } + } + if nonUnit { + tmp := 1 / a[i*lda+i] + for j := 0; j < n; j++ { + btmp[j] *= tmp + } + } + } + return + } + // Cases where a is transposed + if ul == blas.Upper { + for k := 0; k < m; k++ { + btmpk := b[k*ldb : k*ldb+n] + if nonUnit { + tmp := 1 / a[k*lda+k] + for j := 0; j < n; j++ { + btmpk[j] *= tmp + } + } + for ia, va := range a[k*lda+k+1 : k*lda+m] { + i := ia + k + 1 + if va != 0 { + btmp := b[i*ldb : i*ldb+n] + asm.SaxpyUnitary(-va, btmpk, btmp, btmp) + } + } + if alpha != 1 { + for j := 0; j < n; j++ { + btmpk[j] *= alpha + } + } + } + return + } + for k := m - 1; k >= 0; k-- { + btmpk := b[k*ldb : k*ldb+n] + if nonUnit { + tmp := 1 / a[k*lda+k] + for j := 0; j < n; j++ { + btmpk[j] *= tmp + } + } + for i, va := range a[k*lda : k*lda+k] { + if va != 0 { + btmp := b[i*ldb : i*ldb+n] + asm.SaxpyUnitary(-va, btmpk, btmp, btmp) + } + } + if alpha != 1 { + for j := 0; j < n; j++ { + btmpk[j] *= alpha + } + } + } + return + } + // Cases where a is to the right of X. + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + if alpha != 1 { + for j := 0; j < n; j++ { + btmp[j] *= alpha + } + } + for k, vb := range btmp { + if vb != 0 { + if btmp[k] != 0 { + if nonUnit { + btmp[k] /= a[k*lda+k] + } + btmpk := btmp[k+1 : n] + asm.SaxpyUnitary(-btmp[k], a[k*lda+k+1:k*lda+n], btmpk, btmpk) + } + } + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*lda : i*lda+n] + if alpha != 1 { + for j := 0; j < n; j++ { + btmp[j] *= alpha + } + } + for k := n - 1; k >= 0; k-- { + if btmp[k] != 0 { + if nonUnit { + btmp[k] /= a[k*lda+k] + } + asm.SaxpyUnitary(-btmp[k], a[k*lda:k*lda+k], btmp, btmp) + } + } + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + for i := 0; i < m; i++ { + btmp := b[i*lda : i*lda+n] + for j := n - 1; j >= 0; j-- { + tmp := alpha*btmp[j] - asm.SdotUnitary(a[j*lda+j+1:j*lda+n], btmp[j+1:]) + if nonUnit { + tmp /= a[j*lda+j] + } + btmp[j] = tmp + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*lda : i*lda+n] + for j := 0; j < n; j++ { + tmp := alpha*btmp[j] - asm.SdotUnitary(a[j*lda:j*lda+j], btmp) + if nonUnit { + tmp /= a[j*lda+j] + } + btmp[j] = tmp + } + } +} + +// Ssymm performs one of +// C = alpha * A * B + beta * C if side == blas.Left +// C = alpha * B * A + beta * C if side == blas.Right +// where A is an n×n symmetric matrix, B and C are m×n matrices, and alpha +// is a scalar. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Ssymm(s blas.Side, ul blas.Uplo, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int) { + if s != blas.Right && s != blas.Left { + panic("goblas: bad side") + } + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + var k int + if s == blas.Left { + k = m + } else { + k = n + } + if lda*(k-1)+k > len(a) || lda < max(1, k) { + panic(badLdA) + } + if ldb*(m-1)+n > len(b) || ldb < max(1, n) { + panic(badLdB) + } + if ldc*(m-1)+n > len(c) || ldc < max(1, n) { + panic(badLdC) + } + if m == 0 || n == 0 { + return + } + if alpha == 0 && beta == 1 { + return + } + if alpha == 0 { + if beta == 0 { + for i := 0; i < m; i++ { + ctmp := c[i*ldc : i*ldc+n] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + for i := 0; i < m; i++ { + ctmp := c[i*ldc : i*ldc+n] + for j := 0; j < n; j++ { + ctmp[j] *= beta + } + } + return + } + + isUpper := ul == blas.Upper + if s == blas.Left { + for i := 0; i < m; i++ { + atmp := alpha * a[i*lda+i] + btmp := b[i*ldb : i*ldb+n] + ctmp := c[i*ldc : i*ldc+n] + for j, v := range btmp { + ctmp[j] *= beta + ctmp[j] += atmp * v + } + + for k := 0; k < i; k++ { + var atmp float32 + if isUpper { + atmp = a[k*lda+i] + } else { + atmp = a[i*lda+k] + } + atmp *= alpha + ctmp := c[i*ldc : i*ldc+n] + asm.SaxpyUnitary(atmp, b[k*ldb:k*ldb+n], ctmp, ctmp) + } + for k := i + 1; k < m; k++ { + var atmp float32 + if isUpper { + atmp = a[i*lda+k] + } else { + atmp = a[k*lda+i] + } + atmp *= alpha + ctmp := c[i*ldc : i*ldc+n] + asm.SaxpyUnitary(atmp, b[k*ldb:k*ldb+n], ctmp, ctmp) + } + } + return + } + if isUpper { + for i := 0; i < m; i++ { + for j := n - 1; j >= 0; j-- { + tmp := alpha * b[i*ldb+j] + var tmp2 float32 + atmp := a[j*lda+j+1 : j*lda+n] + btmp := b[i*ldb+j+1 : i*ldb+n] + ctmp := c[i*ldc+j+1 : i*ldc+n] + for k, v := range atmp { + ctmp[k] += tmp * v + tmp2 += btmp[k] * v + } + c[i*ldc+j] *= beta + c[i*ldc+j] += tmp*a[j*lda+j] + alpha*tmp2 + } + } + return + } + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + tmp := alpha * b[i*ldb+j] + var tmp2 float32 + atmp := a[j*lda : j*lda+j] + btmp := b[i*ldb : i*ldb+j] + ctmp := c[i*ldc : i*ldc+j] + for k, v := range atmp { + ctmp[k] += tmp * v + tmp2 += btmp[k] * v + } + c[i*ldc+j] *= beta + c[i*ldc+j] += tmp*a[j*lda+j] + alpha*tmp2 + } + } +} + +// Ssyrk performs the symmetric rank-k operation +// C = alpha * A * A^T + beta*C +// C is an n×n symmetric matrix. A is an n×k matrix if tA == blas.NoTrans, and +// a k×n matrix otherwise. alpha and beta are scalars. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Ssyrk(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float32, a []float32, lda int, beta float32, c []float32, ldc int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.Trans && tA != blas.NoTrans && tA != blas.ConjTrans { + panic(badTranspose) + } + if n < 0 { + panic(nLT0) + } + if k < 0 { + panic(kLT0) + } + if ldc < n { + panic(badLdC) + } + var row, col int + if tA == blas.NoTrans { + row, col = n, k + } else { + row, col = k, n + } + if lda*(row-1)+col > len(a) || lda < max(1, col) { + panic(badLdA) + } + if ldc*(n-1)+n > len(c) || ldc < max(1, n) { + panic(badLdC) + } + if alpha == 0 { + if beta == 0 { + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + for j := range ctmp { + ctmp[j] *= beta + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + for j := range ctmp { + ctmp[j] *= beta + } + } + return + } + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + atmp := a[i*lda : i*lda+k] + for jc, vc := range ctmp { + j := jc + i + ctmp[jc] = vc*beta + alpha*asm.SdotUnitary(atmp, a[j*lda:j*lda+k]) + } + } + return + } + for i := 0; i < n; i++ { + atmp := a[i*lda : i*lda+k] + for j, vc := range c[i*ldc : i*ldc+i+1] { + c[i*ldc+j] = vc*beta + alpha*asm.SdotUnitary(a[j*lda:j*lda+k], atmp) + } + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + if beta != 1 { + for j := range ctmp { + ctmp[j] *= beta + } + } + for l := 0; l < k; l++ { + tmp := alpha * a[l*lda+i] + if tmp != 0 { + asm.SaxpyUnitary(tmp, a[l*lda+i:l*lda+n], ctmp, ctmp) + } + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + if beta != 0 { + for j := range ctmp { + ctmp[j] *= beta + } + } + for l := 0; l < k; l++ { + tmp := alpha * a[l*lda+i] + if tmp != 0 { + asm.SaxpyUnitary(tmp, a[l*lda:l*lda+i+1], ctmp, ctmp) + } + } + } +} + +// Ssyr2k performs the symmetric rank 2k operation +// C = alpha * A * B^T + alpha * B * A^T + beta * C +// where C is an n×n symmetric matrix. A and B are n×k matrices if +// tA == NoTrans and k×n otherwise. alpha and beta are scalars. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Ssyr2k(ul blas.Uplo, tA blas.Transpose, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int) { + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.Trans && tA != blas.NoTrans && tA != blas.ConjTrans { + panic(badTranspose) + } + if n < 0 { + panic(nLT0) + } + if k < 0 { + panic(kLT0) + } + if ldc < n { + panic(badLdC) + } + var row, col int + if tA == blas.NoTrans { + row, col = n, k + } else { + row, col = k, n + } + if lda*(row-1)+col > len(a) || lda < max(1, col) { + panic(badLdA) + } + if ldb*(row-1)+col > len(b) || ldb < max(1, col) { + panic(badLdB) + } + if ldc*(n-1)+n > len(c) || ldc < max(1, n) { + panic(badLdC) + } + if alpha == 0 { + if beta == 0 { + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + for j := range ctmp { + ctmp[j] = 0 + } + } + return + } + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + for j := range ctmp { + ctmp[j] *= beta + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + for j := range ctmp { + ctmp[j] *= beta + } + } + return + } + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < n; i++ { + atmp := a[i*lda : i*lda+k] + btmp := b[i*lda : i*lda+k] + ctmp := c[i*ldc+i : i*ldc+n] + for jc := range ctmp { + j := i + jc + var tmp1, tmp2 float32 + binner := b[j*ldb : j*ldb+k] + for l, v := range a[j*lda : j*lda+k] { + tmp1 += v * btmp[l] + tmp2 += atmp[l] * binner[l] + } + ctmp[jc] *= beta + ctmp[jc] += alpha * (tmp1 + tmp2) + } + } + return + } + for i := 0; i < n; i++ { + atmp := a[i*lda : i*lda+k] + btmp := b[i*lda : i*lda+k] + ctmp := c[i*ldc : i*ldc+i+1] + for j := 0; j <= i; j++ { + var tmp1, tmp2 float32 + binner := b[j*ldb : j*ldb+k] + for l, v := range a[j*lda : j*lda+k] { + tmp1 += v * btmp[l] + tmp2 += atmp[l] * binner[l] + } + ctmp[j] *= beta + ctmp[j] += alpha * (tmp1 + tmp2) + } + } + return + } + if ul == blas.Upper { + for i := 0; i < n; i++ { + ctmp := c[i*ldc+i : i*ldc+n] + if beta != 1 { + for j := range ctmp { + ctmp[j] *= beta + } + } + for l := 0; l < k; l++ { + tmp1 := alpha * b[l*lda+i] + tmp2 := alpha * a[l*lda+i] + btmp := b[l*ldb+i : l*ldb+n] + if tmp1 != 0 || tmp2 != 0 { + for j, v := range a[l*lda+i : l*lda+n] { + ctmp[j] += v*tmp1 + btmp[j]*tmp2 + } + } + } + } + return + } + for i := 0; i < n; i++ { + ctmp := c[i*ldc : i*ldc+i+1] + if beta != 1 { + for j := range ctmp { + ctmp[j] *= beta + } + } + for l := 0; l < k; l++ { + tmp1 := alpha * b[l*lda+i] + tmp2 := alpha * a[l*lda+i] + btmp := b[l*ldb : l*ldb+i+1] + if tmp1 != 0 || tmp2 != 0 { + for j, v := range a[l*lda : l*lda+i+1] { + ctmp[j] += v*tmp1 + btmp[j]*tmp2 + } + } + } + } +} + +// Strmm performs +// B = alpha * A * B if tA == blas.NoTrans and side == blas.Left +// B = alpha * A^T * B if tA == blas.Trans or blas.ConjTrans, and side == blas.Left +// B = alpha * B * A if tA == blas.NoTrans and side == blas.Right +// B = alpha * B * A^T if tA == blas.Trans or blas.ConjTrans, and side == blas.Right +// where A is an n×n triangular matrix, and B is an m×n matrix. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Strmm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int, alpha float32, a []float32, lda int, b []float32, ldb int) { + if s != blas.Left && s != blas.Right { + panic(badSide) + } + if ul != blas.Lower && ul != blas.Upper { + panic(badUplo) + } + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if d != blas.NonUnit && d != blas.Unit { + panic(badDiag) + } + if m < 0 { + panic(mLT0) + } + if n < 0 { + panic(nLT0) + } + var k int + if s == blas.Left { + k = m + } else { + k = n + } + if lda*(k-1)+k > len(a) || lda < max(1, k) { + panic(badLdA) + } + if ldb*(m-1)+n > len(b) || ldb < max(1, n) { + panic(badLdB) + } + if alpha == 0 { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for j := range btmp { + btmp[j] = 0 + } + } + return + } + + nonUnit := d == blas.NonUnit + if s == blas.Left { + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < m; i++ { + tmp := alpha + if nonUnit { + tmp *= a[i*lda+i] + } + btmp := b[i*ldb : i*ldb+n] + for j := range btmp { + btmp[j] *= tmp + } + for ka, va := range a[i*lda+i+1 : i*lda+m] { + k := ka + i + 1 + tmp := alpha * va + if tmp != 0 { + asm.SaxpyUnitary(tmp, b[k*ldb:k*ldb+n], btmp, btmp) + } + } + } + return + } + for i := m - 1; i >= 0; i-- { + tmp := alpha + if nonUnit { + tmp *= a[i*lda+i] + } + btmp := b[i*ldb : i*ldb+n] + for j := range btmp { + btmp[j] *= tmp + } + for k, va := range a[i*lda : i*lda+i] { + tmp := alpha * va + if tmp != 0 { + asm.SaxpyUnitary(tmp, b[k*ldb:k*ldb+n], btmp, btmp) + } + } + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + for k := m - 1; k >= 0; k-- { + btmpk := b[k*ldb : k*ldb+n] + for ia, va := range a[k*lda+k+1 : k*lda+m] { + i := ia + k + 1 + btmp := b[i*ldb : i*ldb+n] + tmp := alpha * va + if tmp != 0 { + asm.SaxpyUnitary(tmp, btmpk, btmp, btmp) + } + } + tmp := alpha + if nonUnit { + tmp *= a[k*lda+k] + } + if tmp != 1 { + for j := 0; j < n; j++ { + btmpk[j] *= tmp + } + } + } + return + } + for k := 0; k < m; k++ { + btmpk := b[k*ldb : k*ldb+n] + for i, va := range a[k*lda : k*lda+k] { + btmp := b[i*ldb : i*ldb+n] + tmp := alpha * va + if tmp != 0 { + asm.SaxpyUnitary(tmp, btmpk, btmp, btmp) + } + } + tmp := alpha + if nonUnit { + tmp *= a[k*lda+k] + } + if tmp != 1 { + for j := 0; j < n; j++ { + btmpk[j] *= tmp + } + } + } + return + } + // Cases where a is on the right + if tA == blas.NoTrans { + if ul == blas.Upper { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for k := n - 1; k >= 0; k-- { + tmp := alpha * btmp[k] + if tmp != 0 { + btmp[k] = tmp + if nonUnit { + btmp[k] *= a[k*lda+k] + } + for ja, v := range a[k*lda+k+1 : k*lda+n] { + j := ja + k + 1 + btmp[j] += tmp * v + } + } + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for k := 0; k < n; k++ { + tmp := alpha * btmp[k] + if tmp != 0 { + btmp[k] = tmp + if nonUnit { + btmp[k] *= a[k*lda+k] + } + asm.SaxpyUnitary(tmp, a[k*lda:k*lda+k], btmp, btmp) + } + } + } + return + } + // Cases where a is transposed. + if ul == blas.Upper { + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for j, vb := range btmp { + tmp := vb + if nonUnit { + tmp *= a[j*lda+j] + } + tmp += asm.SdotUnitary(a[j*lda+j+1:j*lda+n], btmp[j+1:n]) + btmp[j] = alpha * tmp + } + } + return + } + for i := 0; i < m; i++ { + btmp := b[i*ldb : i*ldb+n] + for j := n - 1; j >= 0; j-- { + tmp := btmp[j] + if nonUnit { + tmp *= a[j*lda+j] + } + tmp += asm.SdotUnitary(a[j*lda:j*lda+j], btmp[:j]) + btmp[j] = alpha * tmp + } + } +} diff --git a/vendor/github.com/gonum/blas/native/native.go b/vendor/github.com/gonum/blas/native/native.go new file mode 100644 index 00000000..43ec9bb5 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/native.go @@ -0,0 +1,66 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate ./single_precision + +package native + +type Implementation struct{} + +// The following are panic strings used during parameter checks. +const ( + negativeN = "blas: n < 0" + zeroIncX = "blas: zero x index increment" + zeroIncY = "blas: zero y index increment" + badLenX = "blas: x index out of range" + badLenY = "blas: y index out of range" + + mLT0 = "blas: m < 0" + nLT0 = "blas: n < 0" + kLT0 = "blas: k < 0" + kLLT0 = "blas: kL < 0" + kULT0 = "blas: kU < 0" + + badUplo = "blas: illegal triangle" + badTranspose = "blas: illegal transpose" + badDiag = "blas: illegal diagonal" + badSide = "blas: illegal side" + + badLdA = "blas: index of a out of range" + badLdB = "blas: index of b out of range" + badLdC = "blas: index of c out of range" + + badX = "blas: x index out of range" + badY = "blas: y index out of range" +) + +// [SD]gemm behavior constants. These are kept here to keep them out of the +// way during single precision code genration. +const ( + blockSize = 64 // b x b matrix + minParBlock = 4 // minimum number of blocks needed to go parallel + buffMul = 4 // how big is the buffer relative to the number of workers +) + +// [SD]gemm debugging constant. +const debug = false + +// subMul is a common type shared by [SD]gemm. +type subMul struct { + i, j int // index of block +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +func min(a, b int) int { + if a > b { + return b + } + return a +} diff --git a/vendor/github.com/gonum/blas/native/sgemm.go b/vendor/github.com/gonum/blas/native/sgemm.go new file mode 100644 index 00000000..047d4e52 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/sgemm.go @@ -0,0 +1,395 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "fmt" + "runtime" + "sync" + + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +// Sgemm computes +// C = beta * C + alpha * A * B. +// tA and tB specify whether A or B are transposed. A, B, and C are m×n dense +// matrices. +// +// Float32 implementations are autogenerated and not directly tested. +func (Implementation) Sgemm(tA, tB blas.Transpose, m, n, k int, alpha float32, a []float32, lda int, b []float32, ldb int, beta float32, c []float32, ldc int) { + if tA != blas.NoTrans && tA != blas.Trans && tA != blas.ConjTrans { + panic(badTranspose) + } + if tB != blas.NoTrans && tB != blas.Trans && tB != blas.ConjTrans { + panic(badTranspose) + } + + var amat, bmat, cmat general32 + if tA != blas.NoTrans { + amat = general32{ + data: a, + rows: k, + cols: m, + stride: lda, + } + } else { + amat = general32{ + data: a, + rows: m, + cols: k, + stride: lda, + } + } + err := amat.check('a') + if err != nil { + panic(err.Error()) + } + if tB != blas.NoTrans { + bmat = general32{ + data: b, + rows: n, + cols: k, + stride: ldb, + } + } else { + bmat = general32{ + data: b, + rows: k, + cols: n, + stride: ldb, + } + } + + err = bmat.check('b') + if err != nil { + panic(err.Error()) + } + cmat = general32{ + data: c, + rows: m, + cols: n, + stride: ldc, + } + err = cmat.check('c') + if err != nil { + panic(err.Error()) + } + + // scale c + if beta != 1 { + if beta == 0 { + for i := 0; i < m; i++ { + ctmp := cmat.data[i*cmat.stride : i*cmat.stride+cmat.cols] + for j := range ctmp { + ctmp[j] = 0 + } + } + } else { + for i := 0; i < m; i++ { + ctmp := cmat.data[i*cmat.stride : i*cmat.stride+cmat.cols] + for j := range ctmp { + ctmp[j] *= beta + } + } + } + } + + sgemmParallel(tA, tB, amat, bmat, cmat, alpha) +} + +func sgemmParallel(tA, tB blas.Transpose, a, b, c general32, alpha float32) { + // dgemmParallel computes a parallel matrix multiplication by partitioning + // a and b into sub-blocks, and updating c with the multiplication of the sub-block + // In all cases, + // A = [ A_11 A_12 ... A_1j + // A_21 A_22 ... A_2j + // ... + // A_i1 A_i2 ... A_ij] + // + // and same for B. All of the submatrix sizes are blockSize*blockSize except + // at the edges. + // In all cases, there is one dimension for each matrix along which + // C must be updated sequentially. + // Cij = \sum_k Aik Bki, (A * B) + // Cij = \sum_k Aki Bkj, (A^T * B) + // Cij = \sum_k Aik Bjk, (A * B^T) + // Cij = \sum_k Aki Bjk, (A^T * B^T) + // + // This code computes one {i, j} block sequentially along the k dimension, + // and computes all of the {i, j} blocks concurrently. This + // partitioning allows Cij to be updated in-place without race-conditions. + // Instead of launching a goroutine for each possible concurrent computation, + // a number of worker goroutines are created and channels are used to pass + // available and completed cases. + // + // http://alexkr.com/docs/matrixmult.pdf is a good reference on matrix-matrix + // multiplies, though this code does not copy matrices to attempt to eliminate + // cache misses. + + aTrans := tA == blas.Trans || tA == blas.ConjTrans + bTrans := tB == blas.Trans || tB == blas.ConjTrans + + maxKLen, parBlocks := computeNumBlocks32(a, b, aTrans, bTrans) + if parBlocks < minParBlock { + // The matrix multiplication is small in the dimensions where it can be + // computed concurrently. Just do it in serial. + sgemmSerial(tA, tB, a, b, c, alpha) + return + } + + nWorkers := runtime.GOMAXPROCS(0) + if parBlocks < nWorkers { + nWorkers = parBlocks + } + // There is a tradeoff between the workers having to wait for work + // and a large buffer making operations slow. + buf := buffMul * nWorkers + if buf > parBlocks { + buf = parBlocks + } + + sendChan := make(chan subMul, buf) + + // Launch workers. A worker receives an {i, j} submatrix of c, and computes + // A_ik B_ki (or the transposed version) storing the result in c_ij. When the + // channel is finally closed, it signals to the waitgroup that it has finished + // computing. + var wg sync.WaitGroup + for i := 0; i < nWorkers; i++ { + wg.Add(1) + go func() { + defer wg.Done() + // Make local copies of otherwise global variables to reduce shared memory. + // This has a noticable effect on benchmarks in some cases. + alpha := alpha + aTrans := aTrans + bTrans := bTrans + crows := c.rows + ccols := c.cols + for sub := range sendChan { + i := sub.i + j := sub.j + leni := blockSize + if i+leni > crows { + leni = crows - i + } + lenj := blockSize + if j+lenj > ccols { + lenj = ccols - j + } + cSub := c.view(i, j, leni, lenj) + + // Compute A_ik B_kj for all k + for k := 0; k < maxKLen; k += blockSize { + lenk := blockSize + if k+lenk > maxKLen { + lenk = maxKLen - k + } + var aSub, bSub general32 + if aTrans { + aSub = a.view(k, i, lenk, leni) + } else { + aSub = a.view(i, k, leni, lenk) + } + if bTrans { + bSub = b.view(j, k, lenj, lenk) + } else { + bSub = b.view(k, j, lenk, lenj) + } + + sgemmSerial(tA, tB, aSub, bSub, cSub, alpha) + } + } + }() + } + + // Send out all of the {i, j} subblocks for computation. + for i := 0; i < c.rows; i += blockSize { + for j := 0; j < c.cols; j += blockSize { + sendChan <- subMul{ + i: i, + j: j, + } + } + } + close(sendChan) + wg.Wait() +} + +// computeNumBlocks says how many blocks there are to compute. maxKLen says the length of the +// k dimension, parBlocks is the number of blocks that could be computed in parallel +// (the submatrices in i and j). expect is the full number of blocks that will be computed. +func computeNumBlocks32(a, b general32, aTrans, bTrans bool) (maxKLen, parBlocks int) { + aRowBlocks := a.rows / blockSize + if a.rows%blockSize != 0 { + aRowBlocks++ + } + aColBlocks := a.cols / blockSize + if a.cols%blockSize != 0 { + aColBlocks++ + } + bRowBlocks := b.rows / blockSize + if b.rows%blockSize != 0 { + bRowBlocks++ + } + bColBlocks := b.cols / blockSize + if b.cols%blockSize != 0 { + bColBlocks++ + } + + switch { + case !aTrans && !bTrans: + // Cij = \sum_k Aik Bki + maxKLen = a.cols + parBlocks = aRowBlocks * bColBlocks + case aTrans && !bTrans: + // Cij = \sum_k Aki Bkj + maxKLen = a.rows + parBlocks = aColBlocks * bColBlocks + case !aTrans && bTrans: + // Cij = \sum_k Aik Bjk + maxKLen = a.cols + parBlocks = aRowBlocks * bRowBlocks + case aTrans && bTrans: + // Cij = \sum_k Aki Bjk + maxKLen = a.rows + parBlocks = aColBlocks * bRowBlocks + } + return +} + +// sgemmSerial is serial matrix multiply +func sgemmSerial(tA, tB blas.Transpose, a, b, c general32, alpha float32) { + switch { + case tA == blas.NoTrans && tB == blas.NoTrans: + sgemmSerialNotNot(a, b, c, alpha) + return + case tA != blas.NoTrans && tB == blas.NoTrans: + sgemmSerialTransNot(a, b, c, alpha) + return + case tA == blas.NoTrans && tB != blas.NoTrans: + sgemmSerialNotTrans(a, b, c, alpha) + return + case tA != blas.NoTrans && tB != blas.NoTrans: + sgemmSerialTransTrans(a, b, c, alpha) + return + default: + panic("unreachable") + } +} + +// sgemmSerial where neither a nor b are transposed +func sgemmSerialNotNot(a, b, c general32, alpha float32) { + if debug { + if a.cols != b.rows { + panic("inner dimension mismatch") + } + if a.rows != c.rows { + panic("outer dimension mismatch") + } + if b.cols != c.cols { + panic("outer dimension mismatch") + } + } + + // This style is used instead of the literal [i*stride +j]) is used because + // approximately 5 times faster as of go 1.3. + for i := 0; i < a.rows; i++ { + ctmp := c.data[i*c.stride : i*c.stride+c.cols] + for l, v := range a.data[i*a.stride : i*a.stride+a.cols] { + tmp := alpha * v + if tmp != 0 { + asm.SaxpyUnitary(tmp, b.data[l*b.stride:l*b.stride+b.cols], ctmp, ctmp) + } + } + } +} + +// sgemmSerial where neither a is transposed and b is not +func sgemmSerialTransNot(a, b, c general32, alpha float32) { + if debug { + if a.rows != b.rows { + fmt.Println(a.rows, b.rows) + panic("inner dimension mismatch") + } + if a.cols != c.rows { + panic("outer dimension mismatch") + } + if b.cols != c.cols { + panic("outer dimension mismatch") + } + } + + // This style is used instead of the literal [i*stride +j]) is used because + // approximately 5 times faster as of go 1.3. + for l := 0; l < a.rows; l++ { + btmp := b.data[l*b.stride : l*b.stride+b.cols] + for i, v := range a.data[l*a.stride : l*a.stride+a.cols] { + tmp := alpha * v + ctmp := c.data[i*c.stride : i*c.stride+c.cols] + if tmp != 0 { + asm.SaxpyUnitary(tmp, btmp, ctmp, ctmp) + } + } + } +} + +// sgemmSerial where neither a is not transposed and b is +func sgemmSerialNotTrans(a, b, c general32, alpha float32) { + if debug { + if a.cols != b.cols { + panic("inner dimension mismatch") + } + if a.rows != c.rows { + panic("outer dimension mismatch") + } + if b.rows != c.cols { + panic("outer dimension mismatch") + } + } + + // This style is used instead of the literal [i*stride +j]) is used because + // approximately 5 times faster as of go 1.3. + for i := 0; i < a.rows; i++ { + atmp := a.data[i*a.stride : i*a.stride+a.cols] + ctmp := c.data[i*c.stride : i*c.stride+c.cols] + for j := 0; j < b.rows; j++ { + ctmp[j] += alpha * asm.SdotUnitary(atmp, b.data[j*b.stride:j*b.stride+b.cols]) + } + } + +} + +// sgemmSerial where both are transposed +func sgemmSerialTransTrans(a, b, c general32, alpha float32) { + if debug { + if a.rows != b.cols { + panic("inner dimension mismatch") + } + if a.cols != c.rows { + panic("outer dimension mismatch") + } + if b.rows != c.cols { + panic("outer dimension mismatch") + } + } + + // This style is used instead of the literal [i*stride +j]) is used because + // approximately 5 times faster as of go 1.3. + for l := 0; l < a.rows; l++ { + for i, v := range a.data[l*a.stride : l*a.stride+a.cols] { + ctmp := c.data[i*c.stride : i*c.stride+c.cols] + if v != 0 { + tmp := alpha * v + if tmp != 0 { + asm.SaxpyInc(tmp, b.data[l:], ctmp, uintptr(b.rows), uintptr(b.stride), 1, 0, 0) + } + } + } + } +} diff --git a/vendor/github.com/gonum/blas/native/single_precision b/vendor/github.com/gonum/blas/native/single_precision new file mode 100755 index 00000000..46259f98 --- /dev/null +++ b/vendor/github.com/gonum/blas/native/single_precision @@ -0,0 +1,143 @@ +#!/usr/bin/env bash + +# Copyright ©2015 The gonum Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +WARNING='//\ +// Float32 implementations are autogenerated and not directly tested.\ +' + +# Level1 routines. + +echo Generating level1single.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > level1single.go +cat level1double.go \ +| gofmt -r 'blas.Float64Level1 -> blas.Float32Level1' \ +\ +| gofmt -r 'float64 -> float32' \ +| gofmt -r 'blas.DrotmParams -> blas.SrotmParams' \ +\ +| gofmt -r 'asm.DaxpyInc -> asm.SaxpyInc' \ +| gofmt -r 'asm.DaxpyUnitary -> asm.SaxpyUnitary' \ +| gofmt -r 'asm.DdotInc -> asm.SdotInc' \ +| gofmt -r 'asm.DdotUnitary -> asm.SdotUnitary' \ +\ +| sed -e "s_^\(func (Implementation) \)D\(.*\)\$_$WARNING\1S\2_" \ + -e 's_^// D_// S_' \ + -e "s_^\(func (Implementation) \)Id\(.*\)\$_$WARNING\1Is\2_" \ + -e 's_^// Id_// Is_' \ + -e 's_"math"_math "github.com/gonum/blas/native/internal/math32"_' \ +>> level1single.go + +echo Generating level1single_sdot.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > level1single_sdot.go +cat level1double_ddot.go \ +| gofmt -r 'float64 -> float32' \ +\ +| gofmt -r 'asm.DdotInc -> asm.SdotInc' \ +| gofmt -r 'asm.DdotUnitary -> asm.SdotUnitary' \ +\ +| sed -e "s_^\(func (Implementation) \)D\(.*\)\$_$WARNING\1S\2_" \ + -e 's_^// D_// S_' \ +>> level1single_sdot.go + +echo Generating level1single_dsdot.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > level1single_dsdot.go +cat level1double_ddot.go \ +| gofmt -r '[]float64 -> []float32' \ +\ +| gofmt -r 'asm.DdotInc -> asm.DsdotInc' \ +| gofmt -r 'asm.DdotUnitary -> asm.DsdotUnitary' \ +\ +| sed -e "s_^\(func (Implementation) \)D\(.*\)\$_$WARNING\1Ds\2_" \ + -e 's_^// D_// Ds_' \ +>> level1single_dsdot.go + +echo Generating level1single_sdsdot.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > level1single_sdsdot.go +cat level1double_ddot.go \ +| gofmt -r 'float64 -> float32' \ +\ +| gofmt -r 'asm.DdotInc(x, y, f(n), f(incX), f(incY), f(ix), f(iy)) -> alpha + float32(asm.DsdotInc(x, y, f(n), f(incX), f(incY), f(ix), f(iy)))' \ +| gofmt -r 'asm.DdotUnitary(a, b) -> alpha + float32(asm.DsdotUnitary(a, b))' \ +\ +| sed -e "s_^\(func (Implementation) \)D\(.*\)\$_$WARNING\1Sds\2_" \ + -e 's_^// D\(.*\)$_// Sds\1 plus a constant_' \ + -e 's_\\sum_alpha + \\sum_' \ + -e 's/n int/n int, alpha float32/' \ +>> level1single_sdsdot.go + + +# Level2 routines. + +echo Generating level2single.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > level2single.go +cat level2double.go \ +| gofmt -r 'blas.Float64Level2 -> blas.Float32Level2' \ +\ +| gofmt -r 'float64 -> float32' \ +\ +| gofmt -r 'Dscal -> Sscal' \ +\ +| gofmt -r 'asm.DaxpyInc -> asm.SaxpyInc' \ +| gofmt -r 'asm.DaxpyUnitary -> asm.SaxpyUnitary' \ +| gofmt -r 'asm.DdotInc -> asm.SdotInc' \ +| gofmt -r 'asm.DdotUnitary -> asm.SdotUnitary' \ +\ +| sed -e "s_^\(func (Implementation) \)D\(.*\)\$_$WARNING\1S\2_" \ + -e 's_^// D_// S_' \ +>> level2single.go + + +# Level3 routines. + +echo Generating level3single.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > level3single.go +cat level3double.go \ +| gofmt -r 'blas.Float64Level3 -> blas.Float32Level3' \ +\ +| gofmt -r 'float64 -> float32' \ +\ +| gofmt -r 'asm.DaxpyUnitary -> asm.SaxpyUnitary' \ +| gofmt -r 'asm.DdotUnitary -> asm.SdotUnitary' \ +\ +| sed -e "s_^\(func (Implementation) \)D\(.*\)\$_$WARNING\1S\2_" \ + -e 's_^// D_// S_' \ +>> level3single.go + +echo Generating general_single.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > general_single.go +cat general_double.go \ +| gofmt -r 'float64 -> float32' \ +\ +| gofmt -r 'general64 -> general32' \ +| gofmt -r 'newGeneral64 -> newGeneral32' \ +\ +| sed -e 's/(g general64) print()/(g general32) print()/' \ + -e 's_"math"_math "github.com/gonum/blas/native/internal/math32"_' \ +>> general_single.go + +echo Generating sgemm.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > sgemm.go +cat dgemm.go \ +| gofmt -r 'float64 -> float32' \ +| gofmt -r 'general64 -> general32' \ +\ +| gofmt -r 'dgemmParallel -> sgemmParallel' \ +| gofmt -r 'computeNumBlocks64 -> computeNumBlocks32' \ +| gofmt -r 'dgemmSerial -> sgemmSerial' \ +| gofmt -r 'dgemmSerialNotNot -> sgemmSerialNotNot' \ +| gofmt -r 'dgemmSerialTransNot -> sgemmSerialTransNot' \ +| gofmt -r 'dgemmSerialNotTrans -> sgemmSerialNotTrans' \ +| gofmt -r 'dgemmSerialTransTrans -> sgemmSerialTransTrans' \ +\ +| gofmt -r 'asm.DaxpyInc -> asm.SaxpyInc' \ +| gofmt -r 'asm.DaxpyUnitary -> asm.SaxpyUnitary' \ +| gofmt -r 'asm.DdotInc -> asm.SdotInc' \ +| gofmt -r 'asm.DdotUnitary -> asm.SdotUnitary' \ +\ +| sed -e "s_^\(func (Implementation) \)D\(.*\)\$_$WARNING\1S\2_" \ + -e 's_^// D_// S_' \ + -e 's_^// d_// s_' \ +>> sgemm.go diff --git a/vendor/github.com/gonum/graph/.gitignore b/vendor/github.com/gonum/graph/.gitignore new file mode 100644 index 00000000..86e0d240 --- /dev/null +++ b/vendor/github.com/gonum/graph/.gitignore @@ -0,0 +1 @@ +test.out \ No newline at end of file diff --git a/vendor/github.com/gonum/graph/.travis.yml b/vendor/github.com/gonum/graph/.travis.yml new file mode 100644 index 00000000..a5e9aa15 --- /dev/null +++ b/vendor/github.com/gonum/graph/.travis.yml @@ -0,0 +1,29 @@ +language: go + +# Versions of go that are explicitly supported by gonum. +go: + - 1.5beta1 + - 1.3.3 + - 1.4.2 + +# Required for coverage. +before_install: + - go get golang.org/x/tools/cmd/cover + - go get github.com/mattn/goveralls + +# Get deps, build, test, and ensure the code is gofmt'ed. +# If we are building as gonum, then we have access to the coveralls api key, so we can run coverage as well. +script: + - go get -d -t -v ./... + - go build -v ./... + - go test -v ./... + - diff <(gofmt -d .) <("") + - if [[ $TRAVIS_SECURE_ENV_VARS = "true" ]]; then bash ./.travis/test-coverage.sh; fi + +notifications: + email: + recipients: + - jragonmiris@gmail.com + on_success: change + on_failure: always + diff --git a/vendor/github.com/gonum/graph/README.md b/vendor/github.com/gonum/graph/README.md new file mode 100644 index 00000000..3c4c1796 --- /dev/null +++ b/vendor/github.com/gonum/graph/README.md @@ -0,0 +1,15 @@ +# Gonum Graph [![Build Status](https://travis-ci.org/gonum/graph.svg?branch=master)](https://travis-ci.org/gonum/graph) [![Coverage Status](https://img.shields.io/coveralls/gonum/graph.svg)](https://coveralls.io/r/gonum/graph?branch=master) + +This is a generalized graph package for the Go language. It aims to provide a clean, transparent API for common algorithms on arbitrary graphs such as finding the graph's strongly connected components, dominators, or searces. + +The package is currently in testing, and the API is "semi-stable". The signatures of any functions like AStar are unlikely to change much, but the Graph, Node, and Edge interfaces may change a bit. + +## Issues + +If you find any bugs, feel free to file an issue on the github issue tracker. Discussions on API changes, added features, code review, or similar requests are preferred on the Gonum-dev Google Group. + +https://groups.google.com/forum/#!forum/gonum-dev + +## License + +Please see github.com/gonum/license for general license information, contributors, authors, etc on the Gonum suite of packages. diff --git a/vendor/github.com/gonum/graph/concrete/concrete.go b/vendor/github.com/gonum/graph/concrete/concrete.go new file mode 100644 index 00000000..4b272a76 --- /dev/null +++ b/vendor/github.com/gonum/graph/concrete/concrete.go @@ -0,0 +1,8 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package concrete + +// TODO(anyone) Package level documentation for this describing the overall +// reason for the package and a summary for the provided types. diff --git a/vendor/github.com/gonum/graph/concrete/dense_directed_matrix.go b/vendor/github.com/gonum/graph/concrete/dense_directed_matrix.go new file mode 100644 index 00000000..5e72db68 --- /dev/null +++ b/vendor/github.com/gonum/graph/concrete/dense_directed_matrix.go @@ -0,0 +1,136 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package concrete + +import ( + "github.com/gonum/graph" + "github.com/gonum/matrix/mat64" +) + +// DirectedDenseGraph represents a graph such that all IDs are in a contiguous +// block from 0 to n-1. +type DirectedDenseGraph struct { + absent float64 + mat *mat64.Dense +} + +// NewDirectedDenseGraph creates a directed dense graph with n nodes. +// If passable is true all pairs of nodes will be connected by an edge +// with unit cost, otherwise every node will start unconnected with +// the cost specified by absent. +func NewDirectedDenseGraph(n int, passable bool, absent float64) *DirectedDenseGraph { + mat := make([]float64, n*n) + v := 1. + if !passable { + v = absent + } + for i := range mat { + mat[i] = v + } + return &DirectedDenseGraph{mat: mat64.NewDense(n, n, mat), absent: absent} +} + +func (g *DirectedDenseGraph) Has(n graph.Node) bool { + id := n.ID() + r, _ := g.mat.Dims() + return 0 <= id && id < r +} + +func (g *DirectedDenseGraph) Nodes() []graph.Node { + r, _ := g.mat.Dims() + nodes := make([]graph.Node, r) + for i := 0; i < r; i++ { + nodes[i] = Node(i) + } + return nodes +} + +func (g *DirectedDenseGraph) Edges() []graph.Edge { + var edges []graph.Edge + r, _ := g.mat.Dims() + for i := 0; i < r; i++ { + for j := 0; j < r; j++ { + if i == j { + continue + } + if !isSame(g.mat.At(i, j), g.absent) { + edges = append(edges, Edge{Node(i), Node(j)}) + } + } + } + return edges +} + +func (g *DirectedDenseGraph) From(n graph.Node) []graph.Node { + var neighbors []graph.Node + id := n.ID() + _, c := g.mat.Dims() + for j := 0; j < c; j++ { + if j == id { + continue + } + if !isSame(g.mat.At(id, j), g.absent) { + neighbors = append(neighbors, Node(j)) + } + } + return neighbors +} + +func (g *DirectedDenseGraph) To(n graph.Node) []graph.Node { + var neighbors []graph.Node + id := n.ID() + r, _ := g.mat.Dims() + for i := 0; i < r; i++ { + if i == id { + continue + } + if !isSame(g.mat.At(i, id), g.absent) { + neighbors = append(neighbors, Node(i)) + } + } + return neighbors +} + +func (g *DirectedDenseGraph) HasEdge(x, y graph.Node) bool { + xid := x.ID() + yid := y.ID() + return xid != yid && (!isSame(g.mat.At(xid, yid), g.absent) || !isSame(g.mat.At(yid, xid), g.absent)) +} + +func (g *DirectedDenseGraph) Edge(u, v graph.Node) graph.Edge { + if g.HasEdge(u, v) { + return Edge{u, v} + } + return nil +} + +func (g *DirectedDenseGraph) HasEdgeFromTo(u, v graph.Node) bool { + uid := u.ID() + vid := v.ID() + return uid != vid && !isSame(g.mat.At(uid, vid), g.absent) +} + +func (g *DirectedDenseGraph) Weight(e graph.Edge) float64 { + return g.mat.At(e.From().ID(), e.To().ID()) +} + +func (g *DirectedDenseGraph) SetEdgeWeight(e graph.Edge, weight float64) { + fid := e.From().ID() + tid := e.To().ID() + if fid == tid { + panic("concrete: set edge cost of illegal edge") + } + g.mat.Set(fid, tid, weight) +} + +func (g *DirectedDenseGraph) RemoveEdge(e graph.Edge) { + g.mat.Set(e.From().ID(), e.To().ID(), g.absent) +} + +func (g *DirectedDenseGraph) Matrix() mat64.Matrix { + // Prevent alteration of dimensions of the returned matrix. + m := *g.mat + return &m +} diff --git a/vendor/github.com/gonum/graph/concrete/dense_undirected_matrix.go b/vendor/github.com/gonum/graph/concrete/dense_undirected_matrix.go new file mode 100644 index 00000000..d5aca028 --- /dev/null +++ b/vendor/github.com/gonum/graph/concrete/dense_undirected_matrix.go @@ -0,0 +1,131 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package concrete + +import ( + "github.com/gonum/graph" + "github.com/gonum/matrix/mat64" +) + +// UndirectedDenseGraph represents a graph such that all IDs are in a contiguous +// block from 0 to n-1. +type UndirectedDenseGraph struct { + absent float64 + mat *mat64.SymDense +} + +// NewUndirectedDenseGraph creates an undirected dense graph with n nodes. +// If passable is true all pairs of nodes will be connected by an edge +// with unit cost, otherwise every node will start unconnected with +// the cost specified by absent. +func NewUndirectedDenseGraph(n int, passable bool, absent float64) *UndirectedDenseGraph { + mat := make([]float64, n*n) + v := 1. + if !passable { + v = absent + } + for i := range mat { + mat[i] = v + } + return &UndirectedDenseGraph{mat: mat64.NewSymDense(n, mat), absent: absent} +} + +func (g *UndirectedDenseGraph) Has(n graph.Node) bool { + id := n.ID() + r := g.mat.Symmetric() + return 0 <= id && id < r +} + +func (g *UndirectedDenseGraph) Nodes() []graph.Node { + r := g.mat.Symmetric() + nodes := make([]graph.Node, r) + for i := 0; i < r; i++ { + nodes[i] = Node(i) + } + return nodes +} + +func (g *UndirectedDenseGraph) Edges() []graph.Edge { + var edges []graph.Edge + r, _ := g.mat.Dims() + for i := 0; i < r; i++ { + for j := i + 1; j < r; j++ { + if !isSame(g.mat.At(i, j), g.absent) { + edges = append(edges, Edge{Node(i), Node(j)}) + } + } + } + return edges +} + +func (g *UndirectedDenseGraph) Degree(n graph.Node) int { + id := n.ID() + var deg int + r := g.mat.Symmetric() + for i := 0; i < r; i++ { + if i == id { + continue + } + if !isSame(g.mat.At(id, i), g.absent) { + deg++ + } + } + return deg +} + +func (g *UndirectedDenseGraph) From(n graph.Node) []graph.Node { + var neighbors []graph.Node + id := n.ID() + r := g.mat.Symmetric() + for i := 0; i < r; i++ { + if i == id { + continue + } + if !isSame(g.mat.At(id, i), g.absent) { + neighbors = append(neighbors, Node(i)) + } + } + return neighbors +} + +func (g *UndirectedDenseGraph) HasEdge(u, v graph.Node) bool { + uid := u.ID() + vid := v.ID() + return uid != vid && !isSame(g.mat.At(uid, vid), g.absent) +} + +func (g *UndirectedDenseGraph) Edge(u, v graph.Node) graph.Edge { + return g.EdgeBetween(u, v) +} + +func (g *UndirectedDenseGraph) EdgeBetween(u, v graph.Node) graph.Edge { + if g.HasEdge(u, v) { + return Edge{u, v} + } + return nil +} + +func (g *UndirectedDenseGraph) Weight(e graph.Edge) float64 { + return g.mat.At(e.From().ID(), e.To().ID()) +} + +func (g *UndirectedDenseGraph) SetEdgeWeight(e graph.Edge, weight float64) { + fid := e.From().ID() + tid := e.To().ID() + if fid == tid { + panic("concrete: set edge cost of illegal edge") + } + g.mat.SetSym(fid, tid, weight) +} + +func (g *UndirectedDenseGraph) RemoveEdge(e graph.Edge) { + g.mat.SetSym(e.From().ID(), e.To().ID(), g.absent) +} + +func (g *UndirectedDenseGraph) Matrix() mat64.Matrix { + // Prevent alteration of dimensions of the returned matrix. + m := *g.mat + return &m +} diff --git a/vendor/github.com/gonum/graph/concrete/directed.go b/vendor/github.com/gonum/graph/concrete/directed.go new file mode 100644 index 00000000..9366e6a5 --- /dev/null +++ b/vendor/github.com/gonum/graph/concrete/directed.go @@ -0,0 +1,269 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package concrete + +import ( + "fmt" + + "github.com/gonum/graph" +) + +// A Directed graph is a highly generalized MutableDirectedGraph. +// +// In most cases it's likely more desireable to use a graph specific to your +// problem domain. +type DirectedGraph struct { + successors map[int]map[int]WeightedEdge + predecessors map[int]map[int]WeightedEdge + nodeMap map[int]graph.Node + + // Add/remove convenience variables + maxID int + freeMap map[int]struct{} +} + +func NewDirectedGraph() *DirectedGraph { + return &DirectedGraph{ + successors: make(map[int]map[int]WeightedEdge), + predecessors: make(map[int]map[int]WeightedEdge), + nodeMap: make(map[int]graph.Node), + maxID: 0, + freeMap: make(map[int]struct{}), + } +} + +func (g *DirectedGraph) NewNodeID() int { + if g.maxID != maxInt { + g.maxID++ + return g.maxID + } + + // Implicitly checks if len(g.freeMap) == 0 + for id := range g.freeMap { + return id + } + + // I cannot foresee this ever happening, but just in case + if len(g.nodeMap) == maxInt { + panic("cannot allocate node: graph too large") + } + + for i := 0; i < maxInt; i++ { + if _, ok := g.nodeMap[i]; !ok { + return i + } + } + + // Should not happen. + panic("cannot allocate node id: no free id found") +} + +// Adds a node to the graph. Implementation note: if you add a node close to or at +// the max int on your machine NewNode will become slower. +func (g *DirectedGraph) AddNode(n graph.Node) { + if _, exists := g.nodeMap[n.ID()]; exists { + panic(fmt.Sprintf("concrete: node ID collision: %d", n.ID())) + } + g.nodeMap[n.ID()] = n + g.successors[n.ID()] = make(map[int]WeightedEdge) + g.predecessors[n.ID()] = make(map[int]WeightedEdge) + + delete(g.freeMap, n.ID()) + g.maxID = max(g.maxID, n.ID()) +} + +func (g *DirectedGraph) SetEdge(e graph.Edge, cost float64) { + var ( + from = e.From() + fid = from.ID() + to = e.To() + tid = to.ID() + ) + + if fid == tid { + panic("concrete: adding self edge") + } + + if !g.Has(from) { + g.AddNode(from) + } + + if !g.Has(to) { + g.AddNode(to) + } + + g.successors[fid][tid] = WeightedEdge{Edge: e, Cost: cost} + g.predecessors[tid][fid] = WeightedEdge{Edge: e, Cost: cost} +} + +func (g *DirectedGraph) RemoveNode(n graph.Node) { + if _, ok := g.nodeMap[n.ID()]; !ok { + return + } + delete(g.nodeMap, n.ID()) + + for succ := range g.successors[n.ID()] { + delete(g.predecessors[succ], n.ID()) + } + delete(g.successors, n.ID()) + + for pred := range g.predecessors[n.ID()] { + delete(g.successors[pred], n.ID()) + } + delete(g.predecessors, n.ID()) + + g.maxID-- // Fun facts: even if this ID doesn't exist this still works! + g.freeMap[n.ID()] = struct{}{} +} + +func (g *DirectedGraph) RemoveEdge(e graph.Edge) { + from, to := e.From(), e.To() + if _, ok := g.nodeMap[from.ID()]; !ok { + return + } else if _, ok := g.nodeMap[to.ID()]; !ok { + return + } + + delete(g.successors[from.ID()], to.ID()) + delete(g.predecessors[to.ID()], from.ID()) +} + +func (g *DirectedGraph) EmptyGraph() { + g.successors = make(map[int]map[int]WeightedEdge) + g.predecessors = make(map[int]map[int]WeightedEdge) + g.nodeMap = make(map[int]graph.Node) +} + +/* Graph implementation */ + +func (g *DirectedGraph) From(n graph.Node) []graph.Node { + if _, ok := g.successors[n.ID()]; !ok { + return nil + } + + successors := make([]graph.Node, len(g.successors[n.ID()])) + i := 0 + for succ := range g.successors[n.ID()] { + successors[i] = g.nodeMap[succ] + i++ + } + + return successors +} + +func (g *DirectedGraph) HasEdge(x, y graph.Node) bool { + xid := x.ID() + yid := y.ID() + if _, ok := g.nodeMap[xid]; !ok { + return false + } + if _, ok := g.nodeMap[yid]; !ok { + return false + } + if _, ok := g.successors[xid][yid]; ok { + return true + } + _, ok := g.successors[yid][xid] + return ok +} + +func (g *DirectedGraph) Edge(u, v graph.Node) graph.Edge { + if _, ok := g.nodeMap[u.ID()]; !ok { + return nil + } + if _, ok := g.nodeMap[v.ID()]; !ok { + return nil + } + edge, ok := g.successors[u.ID()][v.ID()] + if !ok { + return nil + } + return edge.Edge +} + +func (g *DirectedGraph) HasEdgeFromTo(u, v graph.Node) bool { + if _, ok := g.nodeMap[u.ID()]; !ok { + return false + } + if _, ok := g.nodeMap[v.ID()]; !ok { + return false + } + if _, ok := g.successors[u.ID()][v.ID()]; !ok { + return false + } + return true +} + +func (g *DirectedGraph) To(n graph.Node) []graph.Node { + if _, ok := g.successors[n.ID()]; !ok { + return nil + } + + predecessors := make([]graph.Node, len(g.predecessors[n.ID()])) + i := 0 + for succ := range g.predecessors[n.ID()] { + predecessors[i] = g.nodeMap[succ] + i++ + } + + return predecessors +} + +func (g *DirectedGraph) Node(id int) graph.Node { + return g.nodeMap[id] +} + +func (g *DirectedGraph) Has(n graph.Node) bool { + _, ok := g.nodeMap[n.ID()] + + return ok +} + +func (g *DirectedGraph) Degree(n graph.Node) int { + if _, ok := g.nodeMap[n.ID()]; !ok { + return 0 + } + + return len(g.successors[n.ID()]) + len(g.predecessors[n.ID()]) +} + +func (g *DirectedGraph) Nodes() []graph.Node { + nodes := make([]graph.Node, len(g.successors)) + i := 0 + for _, n := range g.nodeMap { + nodes[i] = n + i++ + } + + return nodes +} + +func (g *DirectedGraph) Weight(e graph.Edge) float64 { + if s, ok := g.successors[e.From().ID()]; ok { + if we, ok := s[e.To().ID()]; ok { + return we.Cost + } + } + return inf +} + +func (g *DirectedGraph) Edges() []graph.Edge { + edgeList := make([]graph.Edge, 0, len(g.successors)) + edgeMap := make(map[int]map[int]struct{}, len(g.successors)) + for n, succMap := range g.successors { + edgeMap[n] = make(map[int]struct{}, len(succMap)) + for succ, edge := range succMap { + if doneMap, ok := edgeMap[succ]; ok { + if _, ok := doneMap[n]; ok { + continue + } + } + edgeList = append(edgeList, edge) + edgeMap[n][succ] = struct{}{} + } + } + + return edgeList +} diff --git a/vendor/github.com/gonum/graph/concrete/undirected.go b/vendor/github.com/gonum/graph/concrete/undirected.go new file mode 100644 index 00000000..0bc13b71 --- /dev/null +++ b/vendor/github.com/gonum/graph/concrete/undirected.go @@ -0,0 +1,250 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package concrete + +import ( + "fmt" + + "github.com/gonum/graph" +) + +// A simple int alias. +type Node int + +func (n Node) ID() int { + return int(n) +} + +// Just a collection of two nodes +type Edge struct { + F, T graph.Node +} + +func (e Edge) From() graph.Node { + return e.F +} + +func (e Edge) To() graph.Node { + return e.T +} + +type WeightedEdge struct { + graph.Edge + Cost float64 +} + +// A GonumGraph is a very generalized graph that can handle an arbitrary number of vertices and +// edges -- as well as act as either directed or undirected. +// +// Internally, it uses a map of successors AND predecessors, to speed up some operations (such as +// getting all successors/predecessors). It also speeds up things like adding edges (assuming both +// edges exist). +// +// However, its generality is also its weakness (and partially a flaw in needing to satisfy +// MutableGraph). For most purposes, creating your own graph is probably better. For instance, +// see TileGraph for an example of an immutable 2D grid of tiles that also implements the Graph +// interface, but would be more suitable if all you needed was a simple undirected 2D grid. +type Graph struct { + neighbors map[int]map[int]WeightedEdge + nodeMap map[int]graph.Node + + // Node add/remove convenience vars + maxID int + freeMap map[int]struct{} +} + +func NewGraph() *Graph { + return &Graph{ + neighbors: make(map[int]map[int]WeightedEdge), + nodeMap: make(map[int]graph.Node), + maxID: 0, + freeMap: make(map[int]struct{}), + } +} + +func (g *Graph) NewNodeID() int { + if g.maxID != maxInt { + g.maxID++ + return g.maxID + } + + // Implicitly checks if len(g.freeMap) == 0 + for id := range g.freeMap { + return id + } + + // I cannot foresee this ever happening, but just in case, we check. + if len(g.nodeMap) == maxInt { + panic("cannot allocate node: graph too large") + } + + for i := 0; i < maxInt; i++ { + if _, ok := g.nodeMap[i]; !ok { + return i + } + } + + // Should not happen. + panic("cannot allocate node id: no free id found") +} + +func (g *Graph) AddNode(n graph.Node) { + if _, exists := g.nodeMap[n.ID()]; exists { + panic(fmt.Sprintf("concrete: node ID collision: %d", n.ID())) + } + g.nodeMap[n.ID()] = n + g.neighbors[n.ID()] = make(map[int]WeightedEdge) + + delete(g.freeMap, n.ID()) + g.maxID = max(g.maxID, n.ID()) +} + +func (g *Graph) SetEdge(e graph.Edge, cost float64) { + var ( + from = e.From() + fid = from.ID() + to = e.To() + tid = to.ID() + ) + + if fid == tid { + panic("concrete: adding self edge") + } + + if !g.Has(from) { + g.AddNode(from) + } + + if !g.Has(to) { + g.AddNode(to) + } + + g.neighbors[fid][tid] = WeightedEdge{Edge: e, Cost: cost} + g.neighbors[tid][fid] = WeightedEdge{Edge: e, Cost: cost} +} + +func (g *Graph) RemoveNode(n graph.Node) { + if _, ok := g.nodeMap[n.ID()]; !ok { + return + } + delete(g.nodeMap, n.ID()) + + for neigh := range g.neighbors[n.ID()] { + delete(g.neighbors[neigh], n.ID()) + } + delete(g.neighbors, n.ID()) + + if g.maxID != 0 && n.ID() == g.maxID { + g.maxID-- + } + g.freeMap[n.ID()] = struct{}{} +} + +func (g *Graph) RemoveEdge(e graph.Edge) { + from, to := e.From(), e.To() + if _, ok := g.nodeMap[from.ID()]; !ok { + return + } else if _, ok := g.nodeMap[to.ID()]; !ok { + return + } + + delete(g.neighbors[from.ID()], to.ID()) + delete(g.neighbors[to.ID()], from.ID()) +} + +func (g *Graph) EmptyGraph() { + g.neighbors = make(map[int]map[int]WeightedEdge) + g.nodeMap = make(map[int]graph.Node) +} + +/* Graph implementation */ + +func (g *Graph) From(n graph.Node) []graph.Node { + if !g.Has(n) { + return nil + } + + neighbors := make([]graph.Node, len(g.neighbors[n.ID()])) + i := 0 + for id := range g.neighbors[n.ID()] { + neighbors[i] = g.nodeMap[id] + i++ + } + + return neighbors +} + +func (g *Graph) HasEdge(n, neigh graph.Node) bool { + _, ok := g.neighbors[n.ID()][neigh.ID()] + return ok +} + +func (g *Graph) Edge(u, v graph.Node) graph.Edge { + return g.EdgeBetween(u, v) +} + +func (g *Graph) EdgeBetween(u, v graph.Node) graph.Edge { + // We don't need to check if neigh exists because + // it's implicit in the neighbors access. + if !g.Has(u) { + return nil + } + + return g.neighbors[u.ID()][v.ID()].Edge +} + +func (g *Graph) Node(id int) graph.Node { + return g.nodeMap[id] +} + +func (g *Graph) Has(n graph.Node) bool { + _, ok := g.nodeMap[n.ID()] + + return ok +} + +func (g *Graph) Nodes() []graph.Node { + nodes := make([]graph.Node, len(g.nodeMap)) + i := 0 + for _, n := range g.nodeMap { + nodes[i] = n + i++ + } + + return nodes +} + +func (g *Graph) Weight(e graph.Edge) float64 { + if n, ok := g.neighbors[e.From().ID()]; ok { + if we, ok := n[e.To().ID()]; ok { + return we.Cost + } + } + return inf +} + +func (g *Graph) Edges() []graph.Edge { + m := make(map[WeightedEdge]struct{}) + toReturn := make([]graph.Edge, 0) + + for _, neighs := range g.neighbors { + for _, we := range neighs { + if _, ok := m[we]; !ok { + m[we] = struct{}{} + toReturn = append(toReturn, we.Edge) + } + } + } + + return toReturn +} + +func (g *Graph) Degree(n graph.Node) int { + if _, ok := g.nodeMap[n.ID()]; !ok { + return 0 + } + + return len(g.neighbors[n.ID()]) +} diff --git a/vendor/github.com/gonum/graph/concrete/util.go b/vendor/github.com/gonum/graph/concrete/util.go new file mode 100644 index 00000000..ee049e38 --- /dev/null +++ b/vendor/github.com/gonum/graph/concrete/util.go @@ -0,0 +1,44 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package concrete + +import ( + "math" + + "github.com/gonum/graph" +) + +type nodeSorter []graph.Node + +func (ns nodeSorter) Less(i, j int) bool { + return ns[i].ID() < ns[j].ID() +} + +func (ns nodeSorter) Swap(i, j int) { + ns[i], ns[j] = ns[j], ns[i] +} + +func (ns nodeSorter) Len() int { + return len(ns) +} + +// The math package only provides explicitly sized max +// values. This ensures we get the max for the actual +// type int. +const maxInt int = int(^uint(0) >> 1) + +var inf = math.Inf(1) + +func isSame(a, b float64) bool { + return a == b || (math.IsNaN(a) && math.IsNaN(b)) +} + +func max(a, b int) int { + if a > b { + return a + } else { + return b + } +} diff --git a/vendor/github.com/gonum/graph/doc.go b/vendor/github.com/gonum/graph/doc.go new file mode 100644 index 00000000..7b7b3cc8 --- /dev/null +++ b/vendor/github.com/gonum/graph/doc.go @@ -0,0 +1,38 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package graph implements functions and interfaces to deal with formal discrete graphs. It aims to +be first and foremost flexible, with speed as a strong second priority. + +In this package, graphs are taken to be directed, and undirected graphs are considered to be a +special case of directed graphs that happen to have reciprocal edges. Graphs are, by default, +unweighted, but functions that require weighted edges have several methods of dealing with this. +In order of precedence: + +1. These functions have an argument called Cost (and in some cases, HeuristicCost). If this is +present, it will always be used to determine the cost between two nodes. + +2. These functions will check if your graph implements the Coster (and/or HeuristicCoster) +interface. If this is present, and the Cost (or HeuristicCost) argument is nil, these functions +will be used. + +3. Finally, if no user data is supplied, it will use the functions UniformCost (always returns 1) +and/or NulLHeuristic (always returns 0). + +For information on the specification for Cost functions, please see the Coster interface. + +Finally, although the functions take in a Graph -- they will always use the correct behavior. +If your graph implements DirectedGraph, it will use Successors and To where applicable, +if undirected, it will use From instead. If it implements neither, it will scan the edge list +for successors and predecessors where applicable. (This is slow, you should always implement either +Directed or Undirected) + +This package will never modify a graph that is not Mutable (and the interface does not allow it to +do so). However, return values are free to be modified, so never pass a reference to your own edge +list or node list. It also guarantees that any nodes passed back to the user will be the same +nodes returned to it -- that is, it will never take a Node's ID and then wrap the ID in a new +struct and return that. You'll always get back your original data. +*/ +package graph diff --git a/vendor/github.com/gonum/graph/encoding/dot/dot.go b/vendor/github.com/gonum/graph/encoding/dot/dot.go new file mode 100644 index 00000000..4b43839e --- /dev/null +++ b/vendor/github.com/gonum/graph/encoding/dot/dot.go @@ -0,0 +1,383 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package dot implements GraphViz DOT marshaling of graphs. +// +// See the GraphViz DOT Guide and the DOT grammar for more information +// on using specific aspects of the DOT language: +// +// DOT Guide: http://www.graphviz.org/Documentation/dotguide.pdf +// +// DOT grammar: http://www.graphviz.org/doc/info/lang.html +// +package dot + +import ( + "bytes" + "errors" + "fmt" + "sort" + "strings" + + "github.com/gonum/graph" +) + +// Node is a DOT graph node. +type Node interface { + // DOTID returns a DOT node ID. + // + // An ID is one of the following: + // + // - a string of alphabetic ([a-zA-Z\x80-\xff]) characters, underscores ('_'). + // digits ([0-9]), not beginning with a digit. + // - a numeral [-]?(.[0-9]+ | [0-9]+(.[0-9]*)?). + // - a double-quoted string ("...") possibly containing escaped quotes (\"). + // - an HTML string (<...>). + DOTID() string +} + +// Attributers are graph.Graph values that specify top-level DOT +// attributes. +type Attributers interface { + DOTAttributers() (graph, node, edge Attributer) +} + +// Attributer defines graph.Node or graph.Edge values that can +// specify DOT attributes. +type Attributer interface { + DOTAttributes() []Attribute +} + +// Attribute is a DOT language key value attribute pair. +type Attribute struct { + Key, Value string +} + +// Porter defines the behavior of graph.Edge values that can specify +// connection ports for their end points. The returned port corresponds +// to the the DOT node port to be used by the edge, compass corresponds +// to DOT compass point to which the edge will be aimed. +type Porter interface { + FromPort() (port, compass string) + ToPort() (port, compass string) +} + +// Structurer represents a graph.Graph that can define subgraphs. +type Structurer interface { + Structure() []Graph +} + +// Graph wraps named graph.Graph values. +type Graph interface { + graph.Graph + DOTID() string +} + +// Subgrapher wraps graph.Node values that represent subgraphs. +type Subgrapher interface { + Subgraph() graph.Graph +} + +// Marshal returns the DOT encoding for the graph g, applying the prefix +// and indent to the encoding. Name is used to specify the graph name. If +// name is empty and g implements Graph, the returned string from DOTID +// will be used. If strict is true the output bytes will be prefixed with +// the DOT "strict" keyword. +// +// Graph serialization will work for a graph.Graph without modification, +// however, advanced GraphViz DOT features provided by Marshal depend on +// implementation of the Node, Attributer, Porter, Attributers, Structurer, +// Subgrapher and Graph interfaces. +func Marshal(g graph.Graph, name, prefix, indent string, strict bool) ([]byte, error) { + var p printer + p.indent = indent + p.prefix = prefix + p.visited = make(map[edge]bool) + if strict { + p.buf.WriteString("strict ") + } + err := p.print(g, name, false, false) + if err != nil { + return nil, err + } + return p.buf.Bytes(), nil +} + +type printer struct { + buf bytes.Buffer + + prefix string + indent string + depth int + + visited map[edge]bool + + err error +} + +type edge struct { + inGraph string + from, to int +} + +func (p *printer) print(g graph.Graph, name string, needsIndent, isSubgraph bool) error { + nodes := g.Nodes() + sort.Sort(byID(nodes)) + + p.buf.WriteString(p.prefix) + if needsIndent { + for i := 0; i < p.depth; i++ { + p.buf.WriteString(p.indent) + } + } + _, isDirected := g.(graph.Directed) + if isSubgraph { + p.buf.WriteString("sub") + } else if isDirected { + p.buf.WriteString("di") + } + p.buf.WriteString("graph") + + if name == "" { + if g, ok := g.(Graph); ok { + name = g.DOTID() + } + } + if name != "" { + p.buf.WriteByte(' ') + p.buf.WriteString(name) + } + + p.openBlock(" {") + if a, ok := g.(Attributers); ok { + p.writeAttributeComplex(a) + } + if s, ok := g.(Structurer); ok { + for _, g := range s.Structure() { + _, subIsDirected := g.(graph.Directed) + if subIsDirected != isDirected { + return errors.New("dot: mismatched graph type") + } + p.buf.WriteByte('\n') + p.print(g, g.DOTID(), true, true) + } + } + + havePrintedNodeHeader := false + for _, n := range nodes { + if s, ok := n.(Subgrapher); ok { + // If the node is not linked to any other node + // the graph needs to be written now. + if len(g.From(n)) == 0 { + g := s.Subgraph() + _, subIsDirected := g.(graph.Directed) + if subIsDirected != isDirected { + return errors.New("dot: mismatched graph type") + } + if !havePrintedNodeHeader { + p.newline() + p.buf.WriteString("// Node definitions.") + havePrintedNodeHeader = true + } + p.newline() + p.print(g, graphID(g, n), false, true) + } + continue + } + if !havePrintedNodeHeader { + p.newline() + p.buf.WriteString("// Node definitions.") + havePrintedNodeHeader = true + } + p.newline() + p.writeNode(n) + if a, ok := n.(Attributer); ok { + p.writeAttributeList(a) + } + p.buf.WriteByte(';') + } + + havePrintedEdgeHeader := false + for _, n := range nodes { + to := g.From(n) + sort.Sort(byID(to)) + for _, t := range to { + if isDirected { + if p.visited[edge{inGraph: name, from: n.ID(), to: t.ID()}] { + continue + } + p.visited[edge{inGraph: name, from: n.ID(), to: t.ID()}] = true + } else { + if p.visited[edge{inGraph: name, from: n.ID(), to: t.ID()}] { + continue + } + p.visited[edge{inGraph: name, from: n.ID(), to: t.ID()}] = true + p.visited[edge{inGraph: name, from: t.ID(), to: n.ID()}] = true + } + + if !havePrintedEdgeHeader { + p.buf.WriteByte('\n') + p.buf.WriteString(strings.TrimRight(p.prefix, " \t\xa0")) // Trim whitespace suffix. + p.newline() + p.buf.WriteString("// Edge definitions.") + havePrintedEdgeHeader = true + } + p.newline() + + if s, ok := n.(Subgrapher); ok { + g := s.Subgraph() + _, subIsDirected := g.(graph.Directed) + if subIsDirected != isDirected { + return errors.New("dot: mismatched graph type") + } + p.print(g, graphID(g, n), false, true) + } else { + p.writeNode(n) + } + e, edgeIsPorter := g.Edge(n, t).(Porter) + if edgeIsPorter { + p.writePorts(e.FromPort()) + } + + if isDirected { + p.buf.WriteString(" -> ") + } else { + p.buf.WriteString(" -- ") + } + + if s, ok := t.(Subgrapher); ok { + g := s.Subgraph() + _, subIsDirected := g.(graph.Directed) + if subIsDirected != isDirected { + return errors.New("dot: mismatched graph type") + } + p.print(g, graphID(g, t), false, true) + } else { + p.writeNode(t) + } + if edgeIsPorter { + p.writePorts(e.ToPort()) + } + + if a, ok := g.Edge(n, t).(Attributer); ok { + p.writeAttributeList(a) + } + + p.buf.WriteByte(';') + } + } + p.closeBlock("}") + + return nil +} + +func (p *printer) writeNode(n graph.Node) { + p.buf.WriteString(nodeID(n)) +} + +func (p *printer) writePorts(port, cp string) { + if port != "" { + p.buf.WriteByte(':') + p.buf.WriteString(port) + } + if cp != "" { + p.buf.WriteByte(':') + p.buf.WriteString(cp) + } +} + +func nodeID(n graph.Node) string { + switch n := n.(type) { + case Node: + return n.DOTID() + default: + return fmt.Sprint(n.ID()) + } +} + +func graphID(g graph.Graph, n graph.Node) string { + switch g := g.(type) { + case Node: + return g.DOTID() + default: + return nodeID(n) + } +} + +func (p *printer) writeAttributeList(a Attributer) { + attributes := a.DOTAttributes() + switch len(attributes) { + case 0: + case 1: + p.buf.WriteString(" [") + p.buf.WriteString(attributes[0].Key) + p.buf.WriteByte('=') + p.buf.WriteString(attributes[0].Value) + p.buf.WriteString("]") + default: + p.openBlock(" [") + for _, att := range attributes { + p.newline() + p.buf.WriteString(att.Key) + p.buf.WriteByte('=') + p.buf.WriteString(att.Value) + } + p.closeBlock("]") + } +} + +var attType = []string{"graph", "node", "edge"} + +func (p *printer) writeAttributeComplex(ca Attributers) { + g, n, e := ca.DOTAttributers() + haveWrittenBlock := false + for i, a := range []Attributer{g, n, e} { + attributes := a.DOTAttributes() + if len(attributes) == 0 { + continue + } + if haveWrittenBlock { + p.buf.WriteByte(';') + } + p.newline() + p.buf.WriteString(attType[i]) + p.openBlock(" [") + for _, att := range attributes { + p.newline() + p.buf.WriteString(att.Key) + p.buf.WriteByte('=') + p.buf.WriteString(att.Value) + } + p.closeBlock("]") + haveWrittenBlock = true + } + if haveWrittenBlock { + p.buf.WriteString(";\n") + } +} + +func (p *printer) newline() { + p.buf.WriteByte('\n') + p.buf.WriteString(p.prefix) + for i := 0; i < p.depth; i++ { + p.buf.WriteString(p.indent) + } +} + +func (p *printer) openBlock(b string) { + p.buf.WriteString(b) + p.depth++ +} + +func (p *printer) closeBlock(b string) { + p.depth-- + p.newline() + p.buf.WriteString(b) +} + +type byID []graph.Node + +func (n byID) Len() int { return len(n) } +func (n byID) Less(i, j int) bool { return n[i].ID() < n[j].ID() } +func (n byID) Swap(i, j int) { n[i], n[j] = n[j], n[i] } diff --git a/vendor/github.com/gonum/graph/graph.go b/vendor/github.com/gonum/graph/graph.go new file mode 100644 index 00000000..732fd269 --- /dev/null +++ b/vendor/github.com/gonum/graph/graph.go @@ -0,0 +1,173 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package graph + +import "math" + +// Node is a graph node. It returns a graph-unique integer ID. +type Node interface { + ID() int +} + +// Edge is a graph edge. In directed graphs, the direction of the +// edge is given from -> to, otherwise the edge is semantically +// unordered. +type Edge interface { + From() Node + To() Node +} + +// Graph is a generalized graph. +type Graph interface { + // Has returns whether the node exists within the graph. + Has(Node) bool + + // Nodes returns all the nodes in the graph. + Nodes() []Node + + // From returns all nodes that can be reached directly + // from the given node. + From(Node) []Node + + // HasEdge returns whether an edge exists between + // nodes x and y without considering direction. + HasEdge(x, y Node) bool + + // Edge returns the edge from u to v if such an edge + // exists and nil otherwise. The node v must be directly + // reachable from u as defined by the From method. + Edge(u, v Node) Edge +} + +// Undirected is an undirected graph. +type Undirected interface { + Graph + + // EdgeBetween returns the edge between nodes x and y. + EdgeBetween(x, y Node) Edge +} + +// Directed is a directed graph. +type Directed interface { + Graph + + // HasEdgeFromTo returns whether an edge exists + // in the graph from u to v. + HasEdgeFromTo(u, v Node) bool + + // To returns all nodes that can reach directly + // to the given node. + To(Node) []Node +} + +// Weighter defines graphs that can report edge weights. +type Weighter interface { + // Weight returns the weight for the given edge. + Weight(Edge) float64 +} + +// Mutable is an interface for generalized graph mutation. +type Mutable interface { + // NewNodeID returns a new unique arbitrary ID. + NewNodeID() int + + // Adds a node to the graph. AddNode panics if + // the added node ID matches an existing node ID. + AddNode(Node) + + // RemoveNode removes a node from the graph, as + // well as any edges attached to it. If the node + // is not in the graph it is a no-op. + RemoveNode(Node) + + // SetEdge adds an edge from one node to another. + // If the nodes do not exist, they are added. + // SetEdge will panic if the IDs of the e.From + // and e.To are equal. + SetEdge(e Edge, cost float64) + + // RemoveEdge removes the given edge, leaving the + // terminal nodes. If the edge does not exist it + // is a no-op. + RemoveEdge(Edge) +} + +// MutableUndirected is an undirected graph that can be arbitrarily altered. +type MutableUndirected interface { + Undirected + Mutable +} + +// MutableDirected is a directed graph that can be arbitrarily altered. +type MutableDirected interface { + Directed + Mutable +} + +// WeightFunc is a mapping between an edge and an edge weight. +type WeightFunc func(Edge) float64 + +// UniformCost is a WeightFunc that returns an edge cost of 1 for a non-nil Edge +// and Inf for a nil Edge. +func UniformCost(e Edge) float64 { + if e == nil { + return math.Inf(1) + } + return 1 +} + +// CopyUndirected copies nodes and edges as undirected edges from the source to the +// destination without first clearing the destination. CopyUndirected will panic if +// a node ID in the source graph matches a node ID in the destination. If the source +// does not implement Weighter, UniformCost is used to define edge weights. +// +// Note that if the source is a directed graph and a fundamental cycle exists with +// two nodes where the edge weights differ, the resulting destination graph's edge +// weight between those nodes is undefined. +func CopyUndirected(dst MutableUndirected, src Graph) { + var weight WeightFunc + if g, ok := src.(Weighter); ok { + weight = g.Weight + } else { + weight = UniformCost + } + + nodes := src.Nodes() + for _, n := range nodes { + dst.AddNode(n) + } + for _, u := range nodes { + for _, v := range src.From(u) { + edge := src.Edge(u, v) + dst.SetEdge(edge, weight(edge)) + } + } +} + +// CopyDirected copies nodes and edges as directed edges from the source to the +// destination without first clearing the destination. CopyDirected will panic if +// a node ID in the source graph matches a node ID in the destination. If the +// source is undirected both directions will be present in the destination after +// the copy is complete. If the source does not implement Weighter, UniformCost +// is used to define edge weights. +func CopyDirected(dst MutableDirected, src Graph) { + var weight WeightFunc + if g, ok := src.(Weighter); ok { + weight = g.Weight + } else { + weight = UniformCost + } + + nodes := src.Nodes() + for _, n := range nodes { + dst.AddNode(n) + } + for _, u := range nodes { + for _, v := range src.From(u) { + edge := src.Edge(u, v) + dst.SetEdge(edge, weight(edge)) + } + } +} diff --git a/vendor/github.com/gonum/graph/internal/linear.go b/vendor/github.com/gonum/graph/internal/linear.go new file mode 100644 index 00000000..3d64de9c --- /dev/null +++ b/vendor/github.com/gonum/graph/internal/linear.go @@ -0,0 +1,73 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "github.com/gonum/graph" +) + +// NodeStack implements a LIFO stack of graph.Node. +type NodeStack []graph.Node + +// Len returns the number of graph.Nodes on the stack. +func (s *NodeStack) Len() int { return len(*s) } + +// Pop returns the last graph.Node on the stack and removes it +// from the stack. +func (s *NodeStack) Pop() graph.Node { + v := *s + v, n := v[:len(v)-1], v[len(v)-1] + *s = v + return n +} + +// Push adds the node n to the stack at the last position. +func (s *NodeStack) Push(n graph.Node) { *s = append(*s, n) } + +// NodeQueue implements a FIFO queue. +type NodeQueue struct { + head int + data []graph.Node +} + +// Len returns the number of graph.Nodes in the queue. +func (q *NodeQueue) Len() int { return len(q.data) - q.head } + +// Enqueue adds the node n to the back of the queue. +func (q *NodeQueue) Enqueue(n graph.Node) { + if len(q.data) == cap(q.data) && q.head > 0 { + l := q.Len() + copy(q.data, q.data[q.head:]) + q.head = 0 + q.data = append(q.data[:l], n) + } else { + q.data = append(q.data, n) + } +} + +// Dequeue returns the graph.Node at the front of the queue and +// removes it from the queue. +func (q *NodeQueue) Dequeue() graph.Node { + if q.Len() == 0 { + panic("queue: empty queue") + } + + var n graph.Node + n, q.data[q.head] = q.data[q.head], nil + q.head++ + + if q.Len() == 0 { + q.head = 0 + q.data = q.data[:0] + } + + return n +} + +// Reset clears the queue for reuse. +func (q *NodeQueue) Reset() { + q.head = 0 + q.data = q.data[:0] +} diff --git a/vendor/github.com/gonum/graph/internal/set.go b/vendor/github.com/gonum/graph/internal/set.go new file mode 100644 index 00000000..3ad1bc8c --- /dev/null +++ b/vendor/github.com/gonum/graph/internal/set.go @@ -0,0 +1,211 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +import ( + "unsafe" + + "github.com/gonum/graph" +) + +// IntSet is a set of integer identifiers. +type IntSet map[int]struct{} + +// The simple accessor methods for Set are provided to allow ease of +// implementation change should the need arise. + +// Add inserts an element into the set. +func (s IntSet) Add(e int) { + s[e] = struct{}{} +} + +// Has reports the existence of the element in the set. +func (s IntSet) Has(e int) bool { + _, ok := s[e] + return ok +} + +// Remove deletes the specified element from the set. +func (s IntSet) Remove(e int) { + delete(s, e) +} + +// Count reports the number of elements stored in the set. +func (s IntSet) Count() int { + return len(s) +} + +// Same determines whether two sets are backed by the same store. In the +// current implementation using hash maps it makes use of the fact that +// hash maps (at least in the gc implementation) are passed as a pointer +// to a runtime Hmap struct. +// +// A map is not seen by the runtime as a pointer though, so we cannot +// directly compare the sets converted to unsafe.Pointer and need to take +// the sets' addressed and dereference them as pointers to some comparable +// type. +func Same(s1, s2 Set) bool { + return *(*uintptr)(unsafe.Pointer(&s1)) == *(*uintptr)(unsafe.Pointer(&s2)) +} + +// A set is a set of nodes keyed in their integer identifiers. +type Set map[int]graph.Node + +// The simple accessor methods for Set are provided to allow ease of +// implementation change should the need arise. + +// Add inserts an element into the set. +func (s Set) Add(n graph.Node) { + s[n.ID()] = n +} + +// Remove deletes the specified element from the set. +func (s Set) Remove(e graph.Node) { + delete(s, e.ID()) +} + +// Has reports the existence of the element in the set. +func (s Set) Has(n graph.Node) bool { + _, ok := s[n.ID()] + return ok +} + +// Clear returns an empty set, possibly using the same backing store. +// Clear is not provided as a method since there is no way to replace +// the calling value if clearing is performed by a make(set). Clear +// should never be called without keeping the returned value. +func Clear(s Set) Set { + if len(s) == 0 { + return s + } + + return make(Set) +} + +// Copy performs a perfect copy from s1 to dst (meaning the sets will +// be equal). +func (dst Set) Copy(src Set) Set { + if Same(src, dst) { + return dst + } + + if len(dst) > 0 { + dst = make(Set, len(src)) + } + + for e, n := range src { + dst[e] = n + } + + return dst +} + +// Equal reports set equality between the parameters. Sets are equal if +// and only if they have the same elements. +func Equal(s1, s2 Set) bool { + if Same(s1, s2) { + return true + } + + if len(s1) != len(s2) { + return false + } + + for e := range s1 { + if _, ok := s2[e]; !ok { + return false + } + } + + return true +} + +// Union takes the union of s1 and s2, and stores it in dst. +// +// The union of two sets, s1 and s2, is the set containing all the +// elements of each, for instance: +// +// {a,b,c} UNION {d,e,f} = {a,b,c,d,e,f} +// +// Since sets may not have repetition, unions of two sets that overlap +// do not contain repeat elements, that is: +// +// {a,b,c} UNION {b,c,d} = {a,b,c,d} +// +func (dst Set) Union(s1, s2 Set) Set { + if Same(s1, s2) { + return dst.Copy(s1) + } + + if !Same(s1, dst) && !Same(s2, dst) { + dst = Clear(dst) + } + + if !Same(dst, s1) { + for e, n := range s1 { + dst[e] = n + } + } + + if !Same(dst, s2) { + for e, n := range s2 { + dst[e] = n + } + } + + return dst +} + +// Intersect takes the intersection of s1 and s2, and stores it in dst. +// +// The intersection of two sets, s1 and s2, is the set containing all +// the elements shared between the two sets, for instance: +// +// {a,b,c} INTERSECT {b,c,d} = {b,c} +// +// The intersection between a set and itself is itself, and thus +// effectively a copy operation: +// +// {a,b,c} INTERSECT {a,b,c} = {a,b,c} +// +// The intersection between two sets that share no elements is the empty +// set: +// +// {a,b,c} INTERSECT {d,e,f} = {} +// +func (dst Set) Intersect(s1, s2 Set) Set { + var swap Set + + if Same(s1, s2) { + return dst.Copy(s1) + } + if Same(s1, dst) { + swap = s2 + } else if Same(s2, dst) { + swap = s1 + } else { + dst = Clear(dst) + + if len(s1) > len(s2) { + s1, s2 = s2, s1 + } + + for e, n := range s1 { + if _, ok := s2[e]; ok { + dst[e] = n + } + } + + return dst + } + + for e := range dst { + if _, ok := swap[e]; !ok { + delete(dst, e) + } + } + + return dst +} diff --git a/vendor/github.com/gonum/graph/internal/sort.go b/vendor/github.com/gonum/graph/internal/sort.go new file mode 100644 index 00000000..3bfee0f6 --- /dev/null +++ b/vendor/github.com/gonum/graph/internal/sort.go @@ -0,0 +1,28 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package internal + +// BySliceValues implements the sort.Interface sorting a slice of +// []int lexically by the values of the []int. +type BySliceValues [][]int + +func (c BySliceValues) Len() int { return len(c) } +func (c BySliceValues) Less(i, j int) bool { + a, b := c[i], c[j] + l := len(a) + if len(b) < l { + l = len(b) + } + for k, v := range a[:l] { + if v < b[k] { + return true + } + if v > b[k] { + return false + } + } + return len(a) < len(b) +} +func (c BySliceValues) Swap(i, j int) { c[i], c[j] = c[j], c[i] } diff --git a/vendor/github.com/gonum/graph/path/a_star.go b/vendor/github.com/gonum/graph/path/a_star.go new file mode 100644 index 00000000..b41d1942 --- /dev/null +++ b/vendor/github.com/gonum/graph/path/a_star.go @@ -0,0 +1,157 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +import ( + "container/heap" + + "github.com/gonum/graph" + "github.com/gonum/graph/internal" +) + +// Heuristic returns an estimate of the cost of travelling between two nodes. +type Heuristic func(x, y graph.Node) float64 + +// HeuristicCoster wraps the HeuristicCost method. A graph implementing the +// interface provides a heuristic between any two given nodes. +type HeuristicCoster interface { + HeuristicCost(x, y graph.Node) float64 +} + +// AStar finds the A*-shortest path from s to t in g using the heuristic h. The path and +// its cost are returned in a Shortest along with paths and costs to all nodes explored +// during the search. The number of expanded nodes is also returned. This value may help +// with heuristic tuning. +// +// The path will be the shortest path if the heuristic is admissible. A heuristic is +// admissible if for any node, n, in the graph, the heuristic estimate of the cost of +// the path from n to t is less than or equal to the true cost of that path. +// +// If h is nil, AStar will use the g.HeuristicCost method if g implements HeuristicCoster, +// falling back to NullHeuristic otherwise. If the graph does not implement graph.Weighter, +// graph.UniformCost is used. AStar will panic if g has an A*-reachable negative edge weight. +func AStar(s, t graph.Node, g graph.Graph, h Heuristic) (path Shortest, expanded int) { + if !g.Has(s) || !g.Has(t) { + return Shortest{from: s}, 0 + } + var weight graph.WeightFunc + if g, ok := g.(graph.Weighter); ok { + weight = g.Weight + } else { + weight = graph.UniformCost + } + if h == nil { + if g, ok := g.(HeuristicCoster); ok { + h = g.HeuristicCost + } else { + h = NullHeuristic + } + } + + path = newShortestFrom(s, g.Nodes()) + tid := t.ID() + + visited := make(internal.IntSet) + open := &aStarQueue{indexOf: make(map[int]int)} + heap.Push(open, aStarNode{node: s, gscore: 0, fscore: h(s, t)}) + + for open.Len() != 0 { + u := heap.Pop(open).(aStarNode) + uid := u.node.ID() + i := path.indexOf[uid] + expanded++ + + if uid == tid { + break + } + + visited.Add(uid) + for _, v := range g.From(u.node) { + vid := v.ID() + if visited.Has(vid) { + continue + } + j := path.indexOf[vid] + + w := weight(g.Edge(u.node, v)) + if w < 0 { + panic("A*: negative edge weight") + } + g := u.gscore + w + if n, ok := open.node(vid); !ok { + path.set(j, g, i) + heap.Push(open, aStarNode{node: v, gscore: g, fscore: g + h(v, t)}) + } else if g < n.gscore { + path.set(j, g, i) + open.update(vid, g, g+h(v, t)) + } + } + } + + return path, expanded +} + +// NullHeuristic is an admissible, consistent heuristic that will not speed up computation. +func NullHeuristic(_, _ graph.Node) float64 { + return 0 +} + +// aStarNode adds A* accounting to a graph.Node. +type aStarNode struct { + node graph.Node + gscore float64 + fscore float64 +} + +// aStarQueue is an A* priority queue. +type aStarQueue struct { + indexOf map[int]int + nodes []aStarNode +} + +func (q *aStarQueue) Less(i, j int) bool { + return q.nodes[i].fscore < q.nodes[j].fscore +} + +func (q *aStarQueue) Swap(i, j int) { + q.indexOf[q.nodes[i].node.ID()] = j + q.indexOf[q.nodes[j].node.ID()] = i + q.nodes[i], q.nodes[j] = q.nodes[j], q.nodes[i] +} + +func (q *aStarQueue) Len() int { + return len(q.nodes) +} + +func (q *aStarQueue) Push(x interface{}) { + n := x.(aStarNode) + q.indexOf[n.node.ID()] = len(q.nodes) + q.nodes = append(q.nodes, n) +} + +func (q *aStarQueue) Pop() interface{} { + n := q.nodes[len(q.nodes)-1] + q.nodes = q.nodes[:len(q.nodes)-1] + delete(q.indexOf, n.node.ID()) + return n +} + +func (q *aStarQueue) update(id int, g, f float64) { + i, ok := q.indexOf[id] + if !ok { + return + } + q.nodes[i].gscore = g + q.nodes[i].fscore = f + heap.Fix(q, i) +} + +func (q *aStarQueue) node(id int) (aStarNode, bool) { + loc, ok := q.indexOf[id] + if ok { + return q.nodes[loc], true + } + return aStarNode{}, false +} diff --git a/vendor/github.com/gonum/graph/path/bellman_ford_moore.go b/vendor/github.com/gonum/graph/path/bellman_ford_moore.go new file mode 100644 index 00000000..6ca49d5f --- /dev/null +++ b/vendor/github.com/gonum/graph/path/bellman_ford_moore.go @@ -0,0 +1,59 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +import "github.com/gonum/graph" + +// BellmanFordFrom returns a shortest-path tree for a shortest path from u to all nodes in +// the graph g, or false indicating that a negative cycle exists in the graph. If the graph +// does not implement graph.Weighter, graph.UniformCost is used. +// +// The time complexity of BellmanFordFrom is O(|V|.|E|). +func BellmanFordFrom(u graph.Node, g graph.Graph) (path Shortest, ok bool) { + if !g.Has(u) { + return Shortest{from: u}, true + } + var weight graph.WeightFunc + if g, ok := g.(graph.Weighter); ok { + weight = g.Weight + } else { + weight = graph.UniformCost + } + + nodes := g.Nodes() + + path = newShortestFrom(u, nodes) + path.dist[path.indexOf[u.ID()]] = 0 + + // TODO(kortschak): Consider adding further optimisations + // from http://arxiv.org/abs/1111.5414. + for i := 1; i < len(nodes); i++ { + changed := false + for j, u := range nodes { + for _, v := range g.From(u) { + k := path.indexOf[v.ID()] + joint := path.dist[j] + weight(g.Edge(u, v)) + if joint < path.dist[k] { + path.set(k, joint, j) + changed = true + } + } + } + if !changed { + break + } + } + + for j, u := range nodes { + for _, v := range g.From(u) { + k := path.indexOf[v.ID()] + if path.dist[j]+weight(g.Edge(u, v)) < path.dist[k] { + return path, false + } + } + } + + return path, true +} diff --git a/vendor/github.com/gonum/graph/path/control_flow.go b/vendor/github.com/gonum/graph/path/control_flow.go new file mode 100644 index 00000000..219226d5 --- /dev/null +++ b/vendor/github.com/gonum/graph/path/control_flow.go @@ -0,0 +1,118 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +import ( + "github.com/gonum/graph" + "github.com/gonum/graph/internal" +) + +// PostDominatores returns all dominators for all nodes in g. It does not +// prune for strict post-dominators, immediate dominators etc. +// +// A dominates B if and only if the only path through B travels through A. +func Dominators(start graph.Node, g graph.Graph) map[int]internal.Set { + allNodes := make(internal.Set) + nlist := g.Nodes() + dominators := make(map[int]internal.Set, len(nlist)) + for _, node := range nlist { + allNodes.Add(node) + } + + var to func(graph.Node) []graph.Node + switch g := g.(type) { + case graph.Directed: + to = g.To + default: + to = g.From + } + + for _, node := range nlist { + dominators[node.ID()] = make(internal.Set) + if node.ID() == start.ID() { + dominators[node.ID()].Add(start) + } else { + dominators[node.ID()].Copy(allNodes) + } + } + + for somethingChanged := true; somethingChanged; { + somethingChanged = false + for _, node := range nlist { + if node.ID() == start.ID() { + continue + } + preds := to(node) + if len(preds) == 0 { + continue + } + tmp := make(internal.Set).Copy(dominators[preds[0].ID()]) + for _, pred := range preds[1:] { + tmp.Intersect(tmp, dominators[pred.ID()]) + } + + dom := make(internal.Set) + dom.Add(node) + + dom.Union(dom, tmp) + if !internal.Equal(dom, dominators[node.ID()]) { + dominators[node.ID()] = dom + somethingChanged = true + } + } + } + + return dominators +} + +// PostDominatores returns all post-dominators for all nodes in g. It does not +// prune for strict post-dominators, immediate post-dominators etc. +// +// A post-dominates B if and only if all paths from B travel through A. +func PostDominators(end graph.Node, g graph.Graph) map[int]internal.Set { + allNodes := make(internal.Set) + nlist := g.Nodes() + dominators := make(map[int]internal.Set, len(nlist)) + for _, node := range nlist { + allNodes.Add(node) + } + + for _, node := range nlist { + dominators[node.ID()] = make(internal.Set) + if node.ID() == end.ID() { + dominators[node.ID()].Add(end) + } else { + dominators[node.ID()].Copy(allNodes) + } + } + + for somethingChanged := true; somethingChanged; { + somethingChanged = false + for _, node := range nlist { + if node.ID() == end.ID() { + continue + } + succs := g.From(node) + if len(succs) == 0 { + continue + } + tmp := make(internal.Set).Copy(dominators[succs[0].ID()]) + for _, succ := range succs[1:] { + tmp.Intersect(tmp, dominators[succ.ID()]) + } + + dom := make(internal.Set) + dom.Add(node) + + dom.Union(dom, tmp) + if !internal.Equal(dom, dominators[node.ID()]) { + dominators[node.ID()] = dom + somethingChanged = true + } + } + } + + return dominators +} diff --git a/vendor/github.com/gonum/graph/path/dijkstra.go b/vendor/github.com/gonum/graph/path/dijkstra.go new file mode 100644 index 00000000..254676b3 --- /dev/null +++ b/vendor/github.com/gonum/graph/path/dijkstra.go @@ -0,0 +1,136 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +import ( + "container/heap" + + "github.com/gonum/graph" +) + +// DijkstraFrom returns a shortest-path tree for a shortest path from u to all nodes in +// the graph g. If the graph does not implement graph.Weighter, graph.UniformCost is used. +// DijkstraFrom will panic if g has a u-reachable negative edge weight. +// +// The time complexity of DijkstrFrom is O(|E|+|V|.log|V|). +func DijkstraFrom(u graph.Node, g graph.Graph) Shortest { + if !g.Has(u) { + return Shortest{from: u} + } + var weight graph.WeightFunc + if g, ok := g.(graph.Weighter); ok { + weight = g.Weight + } else { + weight = graph.UniformCost + } + + nodes := g.Nodes() + path := newShortestFrom(u, nodes) + + // Dijkstra's algorithm here is implemented essentially as + // described in Function B.2 in figure 6 of UTCS Technical + // Report TR-07-54. + // + // http://www.cs.utexas.edu/ftp/techreports/tr07-54.pdf + Q := priorityQueue{{node: u, dist: 0}} + for Q.Len() != 0 { + mid := heap.Pop(&Q).(distanceNode) + k := path.indexOf[mid.node.ID()] + if mid.dist < path.dist[k] { + path.dist[k] = mid.dist + } + for _, v := range g.From(mid.node) { + j := path.indexOf[v.ID()] + w := weight(g.Edge(mid.node, v)) + if w < 0 { + panic("dijkstra: negative edge weight") + } + joint := path.dist[k] + w + if joint < path.dist[j] { + heap.Push(&Q, distanceNode{node: v, dist: joint}) + path.set(j, joint, k) + } + } + } + + return path +} + +// DijkstraAllPaths returns a shortest-path tree for shortest paths in the graph g. +// If the graph does not implement graph.Weighter, graph.UniformCost is used. +// DijkstraAllPaths will panic if g has a negative edge weight. +// +// The time complexity of DijkstrAllPaths is O(|V|.|E|+|V|^2.log|V|). +func DijkstraAllPaths(g graph.Graph) (paths AllShortest) { + paths = newAllShortest(g.Nodes(), false) + dijkstraAllPaths(g, paths) + return paths +} + +// dijkstraAllPaths is the all-paths implementation of Dijkstra. It is shared +// between DijkstraAllPaths and JohnsonAllPaths to avoid repeated allocation +// of the nodes slice and the indexOf map. It returns nothing, but stores the +// result of the work in the paths parameter which is a reference type. +func dijkstraAllPaths(g graph.Graph, paths AllShortest) { + var weight graph.WeightFunc + if g, ok := g.(graph.Weighter); ok { + weight = g.Weight + } else { + weight = graph.UniformCost + } + + var Q priorityQueue + for i, u := range paths.nodes { + // Dijkstra's algorithm here is implemented essentially as + // described in Function B.2 in figure 6 of UTCS Technical + // Report TR-07-54 with the addition of handling multiple + // co-equal paths. + // + // http://www.cs.utexas.edu/ftp/techreports/tr07-54.pdf + + // Q must be empty at this point. + heap.Push(&Q, distanceNode{node: u, dist: 0}) + for Q.Len() != 0 { + mid := heap.Pop(&Q).(distanceNode) + k := paths.indexOf[mid.node.ID()] + if mid.dist < paths.dist.At(i, k) { + paths.dist.Set(i, k, mid.dist) + } + for _, v := range g.From(mid.node) { + j := paths.indexOf[v.ID()] + w := weight(g.Edge(mid.node, v)) + if w < 0 { + panic("dijkstra: negative edge weight") + } + joint := paths.dist.At(i, k) + w + if joint < paths.dist.At(i, j) { + heap.Push(&Q, distanceNode{node: v, dist: joint}) + paths.set(i, j, joint, k) + } else if joint == paths.dist.At(i, j) { + paths.add(i, j, k) + } + } + } + } +} + +type distanceNode struct { + node graph.Node + dist float64 +} + +// priorityQueue implements a no-dec priority queue. +type priorityQueue []distanceNode + +func (q priorityQueue) Len() int { return len(q) } +func (q priorityQueue) Less(i, j int) bool { return q[i].dist < q[j].dist } +func (q priorityQueue) Swap(i, j int) { q[i], q[j] = q[j], q[i] } +func (q *priorityQueue) Push(n interface{}) { *q = append(*q, n.(distanceNode)) } +func (q *priorityQueue) Pop() interface{} { + t := *q + var n interface{} + n, *q = t[len(t)-1], t[:len(t)-1] + return n +} diff --git a/vendor/github.com/gonum/graph/path/disjoint.go b/vendor/github.com/gonum/graph/path/disjoint.go new file mode 100644 index 00000000..0755f695 --- /dev/null +++ b/vendor/github.com/gonum/graph/path/disjoint.go @@ -0,0 +1,87 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +// A disjoint set is a collection of non-overlapping sets. That is, for any two sets in the +// disjoint set, their intersection is the empty set. +// +// A disjoint set has three principle operations: Make Set, Find, and Union. +// +// Make set creates a new set for an element (presuming it does not already exist in any set in +// the disjoint set), Find finds the set containing that element (if any), and Union merges two +// sets in the disjoint set. In general, algorithms operating on disjoint sets are "union-find" +// algorithms, where two sets are found with Find, and then joined with Union. +// +// A concrete example of a union-find algorithm can be found as discrete.Kruskal -- which unions +// two sets when an edge is created between two vertices, and refuses to make an edge between two +// vertices if they're part of the same set. +type disjointSet struct { + master map[int]*disjointSetNode +} + +type disjointSetNode struct { + parent *disjointSetNode + rank int +} + +func newDisjointSet() *disjointSet { + return &disjointSet{master: make(map[int]*disjointSetNode)} +} + +// If the element isn't already somewhere in there, adds it to the master set and its own tiny set. +func (ds *disjointSet) makeSet(e int) { + if _, ok := ds.master[e]; ok { + return + } + dsNode := &disjointSetNode{rank: 0} + dsNode.parent = dsNode + ds.master[e] = dsNode +} + +// Returns the set the element belongs to, or nil if none. +func (ds *disjointSet) find(e int) *disjointSetNode { + dsNode, ok := ds.master[e] + if !ok { + return nil + } + + return find(dsNode) +} + +func find(dsNode *disjointSetNode) *disjointSetNode { + if dsNode.parent != dsNode { + dsNode.parent = find(dsNode.parent) + } + + return dsNode.parent +} + +// Unions two subsets within the disjointSet. +// +// If x or y are not in this disjoint set, the behavior is undefined. If either pointer is nil, +// this function will panic. +func (ds *disjointSet) union(x, y *disjointSetNode) { + if x == nil || y == nil { + panic("Disjoint Set union on nil sets") + } + xRoot := find(x) + yRoot := find(y) + if xRoot == nil || yRoot == nil { + return + } + + if xRoot == yRoot { + return + } + + if xRoot.rank < yRoot.rank { + xRoot.parent = yRoot + } else if yRoot.rank < xRoot.rank { + yRoot.parent = xRoot + } else { + yRoot.parent = xRoot + xRoot.rank += 1 + } +} diff --git a/vendor/github.com/gonum/graph/path/floydwarshall.go b/vendor/github.com/gonum/graph/path/floydwarshall.go new file mode 100644 index 00000000..d4246835 --- /dev/null +++ b/vendor/github.com/gonum/graph/path/floydwarshall.go @@ -0,0 +1,55 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +import "github.com/gonum/graph" + +// FloydWarshall returns a shortest-path tree for the graph g or false indicating +// that a negative cycle exists in the graph. If the graph does not implement +// graph.Weighter, graph.UniformCost is used. +// +// The time complexity of FloydWarshall is O(|V|^3). +func FloydWarshall(g graph.Graph) (paths AllShortest, ok bool) { + var weight graph.WeightFunc + if g, ok := g.(graph.Weighter); ok { + weight = g.Weight + } else { + weight = graph.UniformCost + } + + nodes := g.Nodes() + paths = newAllShortest(nodes, true) + for i, u := range nodes { + paths.dist.Set(i, i, 0) + for _, v := range g.From(u) { + j := paths.indexOf[v.ID()] + paths.set(i, j, weight(g.Edge(u, v)), j) + } + } + + for k := range nodes { + for i := range nodes { + for j := range nodes { + ij := paths.dist.At(i, j) + joint := paths.dist.At(i, k) + paths.dist.At(k, j) + if ij > joint { + paths.set(i, j, joint, paths.at(i, k)...) + } else if ij-joint == 0 { + paths.add(i, j, paths.at(i, k)...) + } + } + } + } + + ok = true + for i := range nodes { + if paths.dist.At(i, i) < 0 { + ok = false + break + } + } + + return paths, ok +} diff --git a/vendor/github.com/gonum/graph/path/johnson_apsp.go b/vendor/github.com/gonum/graph/path/johnson_apsp.go new file mode 100644 index 00000000..1ea195e0 --- /dev/null +++ b/vendor/github.com/gonum/graph/path/johnson_apsp.go @@ -0,0 +1,137 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +import ( + "math" + "math/rand" + + "github.com/gonum/graph" + "github.com/gonum/graph/concrete" +) + +// JohnsonAllPaths returns a shortest-path tree for shortest paths in the graph g. +// If the graph does not implement graph.Weighter, graph.UniformCost is used. +// +// The time complexity of JohnsonAllPaths is O(|V|.|E|+|V|^2.log|V|). +func JohnsonAllPaths(g graph.Graph) (paths AllShortest, ok bool) { + jg := johnsonWeightAdjuster{ + g: g, + from: g.From, + edgeTo: g.Edge, + } + if g, ok := g.(graph.Weighter); ok { + jg.weight = g.Weight + } else { + jg.weight = graph.UniformCost + } + + paths = newAllShortest(g.Nodes(), false) + + sign := -1 + for { + // Choose a random node ID until we find + // one that is not in g. + jg.q = sign * rand.Int() + if _, exists := paths.indexOf[jg.q]; !exists { + break + } + sign *= -1 + } + + jg.bellmanFord = true + jg.adjustBy, ok = BellmanFordFrom(johnsonGraphNode(jg.q), jg) + if !ok { + return paths, false + } + + jg.bellmanFord = false + dijkstraAllPaths(jg, paths) + + for i, u := range paths.nodes { + hu := jg.adjustBy.WeightTo(u) + for j, v := range paths.nodes { + if i == j { + continue + } + hv := jg.adjustBy.WeightTo(v) + paths.dist.Set(i, j, paths.dist.At(i, j)-hu+hv) + } + } + + return paths, ok +} + +type johnsonWeightAdjuster struct { + q int + g graph.Graph + + from func(graph.Node) []graph.Node + edgeTo func(graph.Node, graph.Node) graph.Edge + weight graph.WeightFunc + + bellmanFord bool + adjustBy Shortest +} + +var ( + // johnsonWeightAdjuster has the behaviour + // of a directed graph, but we don't need + // to be explicit with the type since it + // is not exported. + _ graph.Graph = johnsonWeightAdjuster{} + _ graph.Weighter = johnsonWeightAdjuster{} +) + +func (g johnsonWeightAdjuster) Has(n graph.Node) bool { + if g.bellmanFord && n.ID() == g.q { + return true + } + return g.g.Has(n) + +} + +func (g johnsonWeightAdjuster) Nodes() []graph.Node { + if g.bellmanFord { + return append(g.g.Nodes(), johnsonGraphNode(g.q)) + } + return g.g.Nodes() +} + +func (g johnsonWeightAdjuster) From(n graph.Node) []graph.Node { + if g.bellmanFord && n.ID() == g.q { + return g.g.Nodes() + } + return g.from(n) +} + +func (g johnsonWeightAdjuster) Edge(u, v graph.Node) graph.Edge { + if g.bellmanFord && u.ID() == g.q && g.g.Has(v) { + return concrete.Edge{johnsonGraphNode(g.q), v} + } + return g.edgeTo(u, v) +} + +func (g johnsonWeightAdjuster) Weight(e graph.Edge) float64 { + if g.bellmanFord { + switch g.q { + case e.From().ID(): + return 0 + case e.To().ID(): + return math.Inf(1) + default: + return g.weight(e) + } + } + return g.weight(e) + g.adjustBy.WeightTo(e.From()) - g.adjustBy.WeightTo(e.To()) +} + +func (johnsonWeightAdjuster) HasEdge(_, _ graph.Node) bool { + panic("search: unintended use of johnsonWeightAdjuster") +} + +type johnsonGraphNode int + +func (n johnsonGraphNode) ID() int { return int(n) } diff --git a/vendor/github.com/gonum/graph/path/shortest.go b/vendor/github.com/gonum/graph/path/shortest.go new file mode 100644 index 00000000..97f7e49f --- /dev/null +++ b/vendor/github.com/gonum/graph/path/shortest.go @@ -0,0 +1,319 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +import ( + "math" + "math/rand" + + "github.com/gonum/graph" + "github.com/gonum/matrix/mat64" +) + +// Shortest is a shortest-path tree created by the BellmanFordFrom or DijkstraFrom +// single-source shortest path functions. +type Shortest struct { + // from holds the source node given to + // DijkstraFrom. + from graph.Node + + // nodes hold the nodes of the analysed + // graph. + nodes []graph.Node + // indexOf contains a mapping between + // the id-dense representation of the + // graph and the potentially id-sparse + // nodes held in nodes. + indexOf map[int]int + + // dist and next represent the shortest + // paths between nodes. + // + // Indices into dist and next are + // mapped through indexOf. + // + // dist contains the distances + // from the from node for each + // node in the graph. + dist []float64 + // next contains the shortest-path + // tree of the graph. The index is a + // linear mapping of to-dense-id. + next []int +} + +func newShortestFrom(u graph.Node, nodes []graph.Node) Shortest { + indexOf := make(map[int]int, len(nodes)) + uid := u.ID() + for i, n := range nodes { + indexOf[n.ID()] = i + if n.ID() == uid { + u = n + } + } + + p := Shortest{ + from: u, + + nodes: nodes, + indexOf: indexOf, + + dist: make([]float64, len(nodes)), + next: make([]int, len(nodes)), + } + for i := range nodes { + p.dist[i] = math.Inf(1) + p.next[i] = -1 + } + p.dist[indexOf[uid]] = 0 + + return p +} + +func (p Shortest) set(to int, weight float64, mid int) { + p.dist[to] = weight + p.next[to] = mid +} + +// From returns the starting node of the paths held by the Shortest. +func (p Shortest) From() graph.Node { return p.from } + +// WeightTo returns the weight of the minimum path to v. +func (p Shortest) WeightTo(v graph.Node) float64 { + to, toOK := p.indexOf[v.ID()] + if !toOK { + return math.Inf(1) + } + return p.dist[to] +} + +// To returns a shortest path to v and the weight of the path. +func (p Shortest) To(v graph.Node) (path []graph.Node, weight float64) { + to, toOK := p.indexOf[v.ID()] + if !toOK || math.IsInf(p.dist[to], 1) { + return nil, math.Inf(1) + } + from := p.indexOf[p.from.ID()] + path = []graph.Node{p.nodes[to]} + for to != from { + path = append(path, p.nodes[p.next[to]]) + to = p.next[to] + } + reverse(path) + return path, p.dist[p.indexOf[v.ID()]] +} + +// AllShortest is a shortest-path tree created by the DijkstraAllPaths, FloydWarshall +// or JohnsonAllPaths all-pairs shortest paths functions. +type AllShortest struct { + // nodes hold the nodes of the analysed + // graph. + nodes []graph.Node + // indexOf contains a mapping between + // the id-dense representation of the + // graph and the potentially id-sparse + // nodes held in nodes. + indexOf map[int]int + + // dist, next and forward represent + // the shortest paths between nodes. + // + // Indices into dist and next are + // mapped through indexOf. + // + // dist contains the pairwise + // distances between nodes. + dist *mat64.Dense + // next contains the shortest-path + // tree of the graph. The first index + // is a linear mapping of from-dense-id + // and to-dense-id, to-major with a + // stride equal to len(nodes); the + // slice indexed to is the list of + // intermediates leading from the 'from' + // node to the 'to' node represented + // by dense id. + // The interpretation of next is + // dependent on the state of forward. + next [][]int + // forward indicates the direction of + // path reconstruction. Forward + // reconstruction is used for Floyd- + // Warshall and reverse is used for + // Dijkstra. + forward bool +} + +func newAllShortest(nodes []graph.Node, forward bool) AllShortest { + indexOf := make(map[int]int, len(nodes)) + for i, n := range nodes { + indexOf[n.ID()] = i + } + dist := make([]float64, len(nodes)*len(nodes)) + for i := range dist { + dist[i] = math.Inf(1) + } + return AllShortest{ + nodes: nodes, + indexOf: indexOf, + + dist: mat64.NewDense(len(nodes), len(nodes), dist), + next: make([][]int, len(nodes)*len(nodes)), + forward: forward, + } +} + +func (p AllShortest) at(from, to int) (mid []int) { + return p.next[from+to*len(p.nodes)] +} + +func (p AllShortest) set(from, to int, weight float64, mid ...int) { + p.dist.Set(from, to, weight) + p.next[from+to*len(p.nodes)] = append(p.next[from+to*len(p.nodes)][:0], mid...) +} + +func (p AllShortest) add(from, to int, mid ...int) { +loop: // These are likely to be rare, so just loop over collisions. + for _, k := range mid { + for _, v := range p.next[from+to*len(p.nodes)] { + if k == v { + continue loop + } + } + p.next[from+to*len(p.nodes)] = append(p.next[from+to*len(p.nodes)], k) + } +} + +// Weight returns the weight of the minimum path between u and v. +func (p AllShortest) Weight(u, v graph.Node) float64 { + from, fromOK := p.indexOf[u.ID()] + to, toOK := p.indexOf[v.ID()] + if !fromOK || !toOK { + return math.Inf(1) + } + return p.dist.At(from, to) +} + +// Between returns a shortest path from u to v and the weight of the path. If more than +// one shortest path exists between u and v, a randomly chosen path will be returned and +// unique is returned false. If a cycle with zero weight exists in the path, it will not +// be included, but unique will be returned false. +func (p AllShortest) Between(u, v graph.Node) (path []graph.Node, weight float64, unique bool) { + from, fromOK := p.indexOf[u.ID()] + to, toOK := p.indexOf[v.ID()] + if !fromOK || !toOK || len(p.at(from, to)) == 0 { + if u.ID() == v.ID() { + return []graph.Node{p.nodes[from]}, 0, true + } + return nil, math.Inf(1), false + } + + seen := make([]int, len(p.nodes)) + for i := range seen { + seen[i] = -1 + } + var n graph.Node + if p.forward { + n = p.nodes[from] + seen[from] = 0 + } else { + n = p.nodes[to] + seen[to] = 0 + } + + path = []graph.Node{n} + weight = p.dist.At(from, to) + unique = true + + var next int + for from != to { + c := p.at(from, to) + if len(c) != 1 { + unique = false + next = c[rand.Intn(len(c))] + } else { + next = c[0] + } + if seen[next] >= 0 { + path = path[:seen[next]] + } + seen[next] = len(path) + path = append(path, p.nodes[next]) + if p.forward { + from = next + } else { + to = next + } + } + if !p.forward { + reverse(path) + } + + return path, weight, unique +} + +// AllBetween returns all shortest paths from u to v and the weight of the paths. Paths +// containing zero-weight cycles are not returned. +func (p AllShortest) AllBetween(u, v graph.Node) (paths [][]graph.Node, weight float64) { + from, fromOK := p.indexOf[u.ID()] + to, toOK := p.indexOf[v.ID()] + if !fromOK || !toOK || len(p.at(from, to)) == 0 { + if u.ID() == v.ID() { + return [][]graph.Node{{p.nodes[from]}}, 0 + } + return nil, math.Inf(1) + } + + var n graph.Node + if p.forward { + n = u + } else { + n = v + } + seen := make([]bool, len(p.nodes)) + paths = p.allBetween(from, to, seen, []graph.Node{n}, nil) + + return paths, p.dist.At(from, to) +} + +func (p AllShortest) allBetween(from, to int, seen []bool, path []graph.Node, paths [][]graph.Node) [][]graph.Node { + if p.forward { + seen[from] = true + } else { + seen[to] = true + } + if from == to { + if path == nil { + return paths + } + if !p.forward { + reverse(path) + } + return append(paths, path) + } + first := true + for _, n := range p.at(from, to) { + if seen[n] { + continue + } + if first { + path = append([]graph.Node(nil), path...) + first = false + } + if p.forward { + from = n + } else { + to = n + } + paths = p.allBetween(from, to, append([]bool(nil), seen...), append(path, p.nodes[n]), paths) + } + return paths +} + +func reverse(p []graph.Node) { + for i, j := 0, len(p)-1; i < j; i, j = i+1, j-1 { + p[i], p[j] = p[j], p[i] + } +} diff --git a/vendor/github.com/gonum/graph/path/spanning_tree.go b/vendor/github.com/gonum/graph/path/spanning_tree.go new file mode 100644 index 00000000..99b30cbc --- /dev/null +++ b/vendor/github.com/gonum/graph/path/spanning_tree.go @@ -0,0 +1,108 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package path + +import ( + "sort" + + "github.com/gonum/graph" + "github.com/gonum/graph/concrete" + "github.com/gonum/graph/internal" +) + +// EdgeListerGraph is an undirected graph than returns its complete set of edges. +type EdgeListerGraph interface { + graph.Undirected + Edges() []graph.Edge +} + +// Prim generates a minimum spanning tree of g by greedy tree extension, placing +// the result in the destination. The destination is not cleared first. +func Prim(dst graph.MutableUndirected, g EdgeListerGraph) { + var weight graph.WeightFunc + if g, ok := g.(graph.Weighter); ok { + weight = g.Weight + } else { + weight = graph.UniformCost + } + + nlist := g.Nodes() + + if nlist == nil || len(nlist) == 0 { + return + } + + dst.AddNode(nlist[0]) + remainingNodes := make(internal.IntSet) + for _, node := range nlist[1:] { + remainingNodes.Add(node.ID()) + } + + edgeList := g.Edges() + for remainingNodes.Count() != 0 { + var edges []concrete.WeightedEdge + for _, edge := range edgeList { + if (dst.Has(edge.From()) && remainingNodes.Has(edge.To().ID())) || + (dst.Has(edge.To()) && remainingNodes.Has(edge.From().ID())) { + + edges = append(edges, concrete.WeightedEdge{Edge: edge, Cost: weight(edge)}) + } + } + + sort.Sort(byWeight(edges)) + myEdge := edges[0] + + dst.SetEdge(myEdge.Edge, myEdge.Cost) + remainingNodes.Remove(myEdge.Edge.From().ID()) + } + +} + +// Kruskal generates a minimum spanning tree of g by greedy tree coalesence, placing +// the result in the destination. The destination is not cleared first. +func Kruskal(dst graph.MutableUndirected, g EdgeListerGraph) { + var weight graph.WeightFunc + if g, ok := g.(graph.Weighter); ok { + weight = g.Weight + } else { + weight = graph.UniformCost + } + + edgeList := g.Edges() + edges := make([]concrete.WeightedEdge, 0, len(edgeList)) + for _, edge := range edgeList { + edges = append(edges, concrete.WeightedEdge{Edge: edge, Cost: weight(edge)}) + } + + sort.Sort(byWeight(edges)) + + ds := newDisjointSet() + for _, node := range g.Nodes() { + ds.makeSet(node.ID()) + } + + for _, edge := range edges { + // The disjoint set doesn't really care for which is head and which is tail so this + // should work fine without checking both ways + if s1, s2 := ds.find(edge.Edge.From().ID()), ds.find(edge.Edge.To().ID()); s1 != s2 { + ds.union(s1, s2) + dst.SetEdge(edge.Edge, edge.Cost) + } + } +} + +type byWeight []concrete.WeightedEdge + +func (e byWeight) Len() int { + return len(e) +} + +func (e byWeight) Less(i, j int) bool { + return e[i].Cost < e[j].Cost +} + +func (e byWeight) Swap(i, j int) { + e[i], e[j] = e[j], e[i] +} diff --git a/vendor/github.com/gonum/graph/topo/bron_kerbosch.go b/vendor/github.com/gonum/graph/topo/bron_kerbosch.go new file mode 100644 index 00000000..5e30d5bb --- /dev/null +++ b/vendor/github.com/gonum/graph/topo/bron_kerbosch.go @@ -0,0 +1,225 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package topo + +import ( + "github.com/gonum/graph" + "github.com/gonum/graph/internal" +) + +// VertexOrdering returns the vertex ordering and the k-cores of +// the undirected graph g. +func VertexOrdering(g graph.Undirected) (order []graph.Node, cores [][]graph.Node) { + nodes := g.Nodes() + + // The algorithm used here is essentially as described at + // http://en.wikipedia.org/w/index.php?title=Degeneracy_%28graph_theory%29&oldid=640308710 + + // Initialize an output list L. + var l []graph.Node + + // Compute a number d_v for each vertex v in G, + // the number of neighbors of v that are not already in L. + // Initially, these numbers are just the degrees of the vertices. + dv := make(map[int]int, len(nodes)) + var ( + maxDegree int + neighbours = make(map[int][]graph.Node) + ) + for _, n := range nodes { + adj := g.From(n) + neighbours[n.ID()] = adj + dv[n.ID()] = len(adj) + if len(adj) > maxDegree { + maxDegree = len(adj) + } + } + + // Initialize an array D such that D[i] contains a list of the + // vertices v that are not already in L for which d_v = i. + d := make([][]graph.Node, maxDegree+1) + for _, n := range nodes { + deg := dv[n.ID()] + d[deg] = append(d[deg], n) + } + + // Initialize k to 0. + k := 0 + // Repeat n times: + s := []int{0} + for _ = range nodes { // TODO(kortschak): Remove blank assignment when go1.3.3 is no longer supported. + // Scan the array cells D[0], D[1], ... until + // finding an i for which D[i] is nonempty. + var ( + i int + di []graph.Node + ) + for i, di = range d { + if len(di) != 0 { + break + } + } + + // Set k to max(k,i). + if i > k { + k = i + s = append(s, make([]int, k-len(s)+1)...) + } + + // Select a vertex v from D[i]. Add v to the + // beginning of L and remove it from D[i]. + var v graph.Node + v, d[i] = di[len(di)-1], di[:len(di)-1] + l = append(l, v) + s[k]++ + delete(dv, v.ID()) + + // For each neighbor w of v not already in L, + // subtract one from d_w and move w to the + // cell of D corresponding to the new value of d_w. + for _, w := range neighbours[v.ID()] { + dw, ok := dv[w.ID()] + if !ok { + continue + } + for i, n := range d[dw] { + if n.ID() == w.ID() { + d[dw][i], d[dw] = d[dw][len(d[dw])-1], d[dw][:len(d[dw])-1] + dw-- + d[dw] = append(d[dw], w) + break + } + } + dv[w.ID()] = dw + } + } + + for i, j := 0, len(l)-1; i < j; i, j = i+1, j-1 { + l[i], l[j] = l[j], l[i] + } + cores = make([][]graph.Node, len(s)) + offset := len(l) + for i, n := range s { + cores[i] = l[offset-n : offset] + offset -= n + } + return l, cores +} + +// BronKerbosch returns the set of maximal cliques of the undirected graph g. +func BronKerbosch(g graph.Undirected) [][]graph.Node { + nodes := g.Nodes() + + // The algorithm used here is essentially BronKerbosch3 as described at + // http://en.wikipedia.org/w/index.php?title=Bron%E2%80%93Kerbosch_algorithm&oldid=656805858 + + p := make(internal.Set, len(nodes)) + for _, n := range nodes { + p.Add(n) + } + x := make(internal.Set) + var bk bronKerbosch + order, _ := VertexOrdering(g) + for _, v := range order { + neighbours := g.From(v) + nv := make(internal.Set, len(neighbours)) + for _, n := range neighbours { + nv.Add(n) + } + bk.maximalCliquePivot(g, []graph.Node{v}, make(internal.Set).Intersect(p, nv), make(internal.Set).Intersect(x, nv)) + p.Remove(v) + x.Add(v) + } + return bk +} + +type bronKerbosch [][]graph.Node + +func (bk *bronKerbosch) maximalCliquePivot(g graph.Undirected, r []graph.Node, p, x internal.Set) { + if len(p) == 0 && len(x) == 0 { + *bk = append(*bk, r) + return + } + + neighbours := bk.choosePivotFrom(g, p, x) + nu := make(internal.Set, len(neighbours)) + for _, n := range neighbours { + nu.Add(n) + } + for _, v := range p { + if nu.Has(v) { + continue + } + neighbours := g.From(v) + nv := make(internal.Set, len(neighbours)) + for _, n := range neighbours { + nv.Add(n) + } + + var found bool + for _, n := range r { + if n.ID() == v.ID() { + found = true + break + } + } + var sr []graph.Node + if !found { + sr = append(r[:len(r):len(r)], v) + } + + bk.maximalCliquePivot(g, sr, make(internal.Set).Intersect(p, nv), make(internal.Set).Intersect(x, nv)) + p.Remove(v) + x.Add(v) + } +} + +func (*bronKerbosch) choosePivotFrom(g graph.Undirected, p, x internal.Set) (neighbors []graph.Node) { + // TODO(kortschak): Investigate the impact of pivot choice that maximises + // |p â‹‚ neighbours(u)| as a function of input size. Until then, leave as + // compile time option. + if !tomitaTanakaTakahashi { + for _, n := range p { + return g.From(n) + } + for _, n := range x { + return g.From(n) + } + panic("bronKerbosch: empty set") + } + + var ( + max = -1 + pivot graph.Node + ) + maxNeighbors := func(s internal.Set) { + outer: + for _, u := range s { + nb := g.From(u) + c := len(nb) + if c <= max { + continue + } + for n := range nb { + if _, ok := p[n]; ok { + continue + } + c-- + if c <= max { + continue outer + } + } + max = c + pivot = u + neighbors = nb + } + } + maxNeighbors(p) + maxNeighbors(x) + if pivot == nil { + panic("bronKerbosch: empty set") + } + return neighbors +} diff --git a/vendor/github.com/gonum/graph/topo/johnson_cycles.go b/vendor/github.com/gonum/graph/topo/johnson_cycles.go new file mode 100644 index 00000000..36d4cbd0 --- /dev/null +++ b/vendor/github.com/gonum/graph/topo/johnson_cycles.go @@ -0,0 +1,285 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package topo + +import ( + "sort" + + "github.com/gonum/graph" + "github.com/gonum/graph/internal" +) + +// johnson implements Johnson's "Finding all the elementary +// circuits of a directed graph" algorithm. SIAM J. Comput. 4(1):1975. +// +// Comments in the johnson methods are kept in sync with the comments +// and labels from the paper. +type johnson struct { + adjacent johnsonGraph // SCC adjacency list. + b []internal.IntSet // Johnson's "B-list". + blocked []bool + s int + + stack []graph.Node + + result [][]graph.Node +} + +// CyclesIn returns the set of elementary cycles in the graph g. +func CyclesIn(g graph.Directed) [][]graph.Node { + jg := johnsonGraphFrom(g) + j := johnson{ + adjacent: jg, + b: make([]internal.IntSet, len(jg.orig)), + blocked: make([]bool, len(jg.orig)), + } + + // len(j.nodes) is the order of g. + for j.s < len(j.adjacent.orig)-1 { + // We use the previous SCC adjacency to reduce the work needed. + sccs := TarjanSCC(j.adjacent.subgraph(j.s)) + // A_k = adjacency structure of strong component K with least + // vertex in subgraph of G induced by {s, s+1, ... ,n}. + j.adjacent = j.adjacent.sccSubGraph(sccs, 2) // Only allow SCCs with >= 2 vertices. + if j.adjacent.order() == 0 { + break + } + + // s = least vertex in V_k + if s := j.adjacent.leastVertexIndex(); s < j.s { + j.s = s + } + for i, v := range j.adjacent.orig { + if !j.adjacent.nodes.Has(v.ID()) { + continue + } + if len(j.adjacent.succ[v.ID()]) > 0 { + j.blocked[i] = false + j.b[i] = make(internal.IntSet) + } + } + //L3: + _ = j.circuit(j.s) + j.s++ + } + + return j.result +} + +// circuit is the CIRCUIT sub-procedure in the paper. +func (j *johnson) circuit(v int) bool { + f := false + n := j.adjacent.orig[v] + j.stack = append(j.stack, n) + j.blocked[v] = true + + //L1: + for w := range j.adjacent.succ[n.ID()] { + w = j.adjacent.indexOf(w) + if w == j.s { + // Output circuit composed of stack followed by s. + r := make([]graph.Node, len(j.stack)+1) + copy(r, j.stack) + r[len(r)-1] = j.adjacent.orig[j.s] + j.result = append(j.result, r) + f = true + } else if !j.blocked[w] { + if j.circuit(w) { + f = true + } + } + } + + //L2: + if f { + j.unblock(v) + } else { + for w := range j.adjacent.succ[n.ID()] { + j.b[j.adjacent.indexOf(w)].Add(v) + } + } + j.stack = j.stack[:len(j.stack)-1] + + return f +} + +// unblock is the UNBLOCK sub-procedure in the paper. +func (j *johnson) unblock(u int) { + j.blocked[u] = false + for w := range j.b[u] { + j.b[u].Remove(w) + if j.blocked[w] { + j.unblock(w) + } + } +} + +// johnsonGraph is an edge list representation of a graph with helpers +// necessary for Johnson's algorithm +type johnsonGraph struct { + // Keep the original graph nodes and a + // look-up to into the non-sparse + // collection of potentially sparse IDs. + orig []graph.Node + index map[int]int + + nodes internal.IntSet + succ map[int]internal.IntSet +} + +// johnsonGraphFrom returns a deep copy of the graph g. +func johnsonGraphFrom(g graph.Directed) johnsonGraph { + nodes := g.Nodes() + sort.Sort(byID(nodes)) + c := johnsonGraph{ + orig: nodes, + index: make(map[int]int, len(nodes)), + + nodes: make(internal.IntSet, len(nodes)), + succ: make(map[int]internal.IntSet), + } + for i, u := range nodes { + c.index[u.ID()] = i + for _, v := range g.From(u) { + if c.succ[u.ID()] == nil { + c.succ[u.ID()] = make(internal.IntSet) + c.nodes.Add(u.ID()) + } + c.nodes.Add(v.ID()) + c.succ[u.ID()].Add(v.ID()) + } + } + return c +} + +type byID []graph.Node + +func (n byID) Len() int { return len(n) } +func (n byID) Less(i, j int) bool { return n[i].ID() < n[j].ID() } +func (n byID) Swap(i, j int) { n[i], n[j] = n[j], n[i] } + +// order returns the order of the graph. +func (g johnsonGraph) order() int { return g.nodes.Count() } + +// indexOf returns the index of the retained node for the given node ID. +func (g johnsonGraph) indexOf(id int) int { + return g.index[id] +} + +// leastVertexIndex returns the index into orig of the least vertex. +func (g johnsonGraph) leastVertexIndex() int { + for _, v := range g.orig { + if g.nodes.Has(v.ID()) { + return g.indexOf(v.ID()) + } + } + panic("johnsonCycles: empty set") +} + +// subgraph returns a subgraph of g induced by {s, s+1, ... , n}. The +// subgraph is destructively generated in g. +func (g johnsonGraph) subgraph(s int) johnsonGraph { + sn := g.orig[s].ID() + for u, e := range g.succ { + if u < sn { + g.nodes.Remove(u) + delete(g.succ, u) + continue + } + for v := range e { + if v < sn { + g.succ[u].Remove(v) + } + } + } + return g +} + +// sccSubGraph returns the graph of the tarjan's strongly connected +// components with each SCC containing at least min vertices. +// sccSubGraph returns nil if there is no SCC with at least min +// members. +func (g johnsonGraph) sccSubGraph(sccs [][]graph.Node, min int) johnsonGraph { + if len(g.nodes) == 0 { + g.nodes = nil + g.succ = nil + return g + } + sub := johnsonGraph{ + orig: g.orig, + index: g.index, + nodes: make(internal.IntSet), + succ: make(map[int]internal.IntSet), + } + + var n int + for _, scc := range sccs { + if len(scc) < min { + continue + } + n++ + for _, u := range scc { + for _, v := range scc { + if _, ok := g.succ[u.ID()][v.ID()]; ok { + if sub.succ[u.ID()] == nil { + sub.succ[u.ID()] = make(internal.IntSet) + sub.nodes.Add(u.ID()) + } + sub.nodes.Add(v.ID()) + sub.succ[u.ID()].Add(v.ID()) + } + } + } + } + if n == 0 { + g.nodes = nil + g.succ = nil + return g + } + + return sub +} + +// Nodes is required to satisfy Tarjan. +func (g johnsonGraph) Nodes() []graph.Node { + n := make([]graph.Node, 0, len(g.nodes)) + for id := range g.nodes { + n = append(n, johnsonGraphNode(id)) + } + return n +} + +// Successors is required to satisfy Tarjan. +func (g johnsonGraph) From(n graph.Node) []graph.Node { + adj := g.succ[n.ID()] + if len(adj) == 0 { + return nil + } + succ := make([]graph.Node, 0, len(adj)) + for n := range adj { + succ = append(succ, johnsonGraphNode(n)) + } + return succ +} + +func (johnsonGraph) Has(graph.Node) bool { + panic("search: unintended use of johnsonGraph") +} +func (johnsonGraph) HasEdge(_, _ graph.Node) bool { + panic("search: unintended use of johnsonGraph") +} +func (johnsonGraph) Edge(_, _ graph.Node) graph.Edge { + panic("search: unintended use of johnsonGraph") +} +func (johnsonGraph) HasEdgeFromTo(_, _ graph.Node) bool { + panic("search: unintended use of johnsonGraph") +} +func (johnsonGraph) To(graph.Node) []graph.Node { + panic("search: unintended use of johnsonGraph") +} + +type johnsonGraphNode int + +func (n johnsonGraphNode) ID() int { return int(n) } diff --git a/vendor/github.com/gonum/graph/topo/non_tomita_choice.go b/vendor/github.com/gonum/graph/topo/non_tomita_choice.go new file mode 100644 index 00000000..de09ebd8 --- /dev/null +++ b/vendor/github.com/gonum/graph/topo/non_tomita_choice.go @@ -0,0 +1,9 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build !tomita + +package topo + +const tomitaTanakaTakahashi = false diff --git a/vendor/github.com/gonum/graph/topo/tarjan.go b/vendor/github.com/gonum/graph/topo/tarjan.go new file mode 100644 index 00000000..908358cd --- /dev/null +++ b/vendor/github.com/gonum/graph/topo/tarjan.go @@ -0,0 +1,161 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package topo + +import ( + "fmt" + "sort" + + "github.com/gonum/graph" + "github.com/gonum/graph/internal" +) + +// Unorderable is an error containing sets of unorderable graph.Nodes. +type Unorderable [][]graph.Node + +// Error satisfies the error interface. +func (e Unorderable) Error() string { + const maxNodes = 10 + var n int + for _, c := range e { + n += len(c) + } + if n > maxNodes { + // Don't return errors that are too long. + return fmt.Sprintf("topo: no topological ordering: %d nodes in %d cyclic components", n, len(e)) + } + return fmt.Sprintf("topo: no topological ordering: cyclic components: %v", [][]graph.Node(e)) +} + +// Sort performs a topological sort of the directed graph g returning the 'from' to 'to' +// sort order. If a topological ordering is not possible, an Unorderable error is returned +// listing cyclic components in g with each cyclic component's members sorted by ID. When +// an Unorderable error is returned, each cyclic component's topological position within +// the sorted nodes is marked with a nil graph.Node. +func Sort(g graph.Directed) (sorted []graph.Node, err error) { + sccs := TarjanSCC(g) + sorted = make([]graph.Node, 0, len(sccs)) + var sc Unorderable + for _, s := range sccs { + if len(s) != 1 { + sort.Sort(byID(s)) + sc = append(sc, s) + sorted = append(sorted, nil) + continue + } + sorted = append(sorted, s[0]) + } + if sc != nil { + for i, j := 0, len(sc)-1; i < j; i, j = i+1, j-1 { + sc[i], sc[j] = sc[j], sc[i] + } + err = sc + } + reverse(sorted) + return sorted, err +} + +func reverse(p []graph.Node) { + for i, j := 0, len(p)-1; i < j; i, j = i+1, j-1 { + p[i], p[j] = p[j], p[i] + } +} + +// TarjanSCC returns the strongly connected components of the graph g using Tarjan's algorithm. +// +// A strongly connected component of a graph is a set of vertices where it's possible to reach any +// vertex in the set from any other (meaning there's a cycle between them.) +// +// Generally speaking, a directed graph where the number of strongly connected components is equal +// to the number of nodes is acyclic, unless you count reflexive edges as a cycle (which requires +// only a little extra testing.) +// +func TarjanSCC(g graph.Directed) [][]graph.Node { + nodes := g.Nodes() + t := tarjan{ + succ: g.From, + + indexTable: make(map[int]int, len(nodes)), + lowLink: make(map[int]int, len(nodes)), + onStack: make(internal.IntSet, len(nodes)), + } + for _, v := range nodes { + if t.indexTable[v.ID()] == 0 { + t.strongconnect(v) + } + } + return t.sccs +} + +// tarjan implements Tarjan's strongly connected component finding +// algorithm. The implementation is from the pseudocode at +// +// http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm?oldid=642744644 +// +type tarjan struct { + succ func(graph.Node) []graph.Node + + index int + indexTable map[int]int + lowLink map[int]int + onStack internal.IntSet + + stack []graph.Node + + sccs [][]graph.Node +} + +// strongconnect is the strongconnect function described in the +// wikipedia article. +func (t *tarjan) strongconnect(v graph.Node) { + vID := v.ID() + + // Set the depth index for v to the smallest unused index. + t.index++ + t.indexTable[vID] = t.index + t.lowLink[vID] = t.index + t.stack = append(t.stack, v) + t.onStack.Add(vID) + + // Consider successors of v. + for _, w := range t.succ(v) { + wID := w.ID() + if t.indexTable[wID] == 0 { + // Successor w has not yet been visited; recur on it. + t.strongconnect(w) + t.lowLink[vID] = min(t.lowLink[vID], t.lowLink[wID]) + } else if t.onStack.Has(wID) { + // Successor w is in stack s and hence in the current SCC. + t.lowLink[vID] = min(t.lowLink[vID], t.indexTable[wID]) + } + } + + // If v is a root node, pop the stack and generate an SCC. + if t.lowLink[vID] == t.indexTable[vID] { + // Start a new strongly connected component. + var ( + scc []graph.Node + w graph.Node + ) + for { + w, t.stack = t.stack[len(t.stack)-1], t.stack[:len(t.stack)-1] + t.onStack.Remove(w.ID()) + // Add w to current strongly connected component. + scc = append(scc, w) + if w.ID() == vID { + break + } + } + // Output the current strongly connected component. + t.sccs = append(t.sccs, scc) + } +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} diff --git a/vendor/github.com/gonum/graph/topo/tomita_choice.go b/vendor/github.com/gonum/graph/topo/tomita_choice.go new file mode 100644 index 00000000..d4eca625 --- /dev/null +++ b/vendor/github.com/gonum/graph/topo/tomita_choice.go @@ -0,0 +1,9 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build tomita + +package topo + +const tomitaTanakaTakahashi = true diff --git a/vendor/github.com/gonum/graph/topo/topo.go b/vendor/github.com/gonum/graph/topo/topo.go new file mode 100644 index 00000000..f4c3a2a1 --- /dev/null +++ b/vendor/github.com/gonum/graph/topo/topo.go @@ -0,0 +1,58 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package topo + +import ( + "github.com/gonum/graph" + "github.com/gonum/graph/traverse" +) + +// IsPathIn returns whether path is a path in g. +// +// As special cases, IsPathIn returns true for a zero length path or for +// a path of length 1 when the node in path exists in the graph. +func IsPathIn(g graph.Graph, path []graph.Node) bool { + switch len(path) { + case 0: + return true + case 1: + return g.Has(path[0]) + default: + var canReach func(u, v graph.Node) bool + switch g := g.(type) { + case graph.Directed: + canReach = g.HasEdgeFromTo + default: + canReach = g.HasEdge + } + + for i, u := range path[:len(path)-1] { + if !canReach(u, path[i+1]) { + return false + } + } + return true + } +} + +// ConnectedComponents returns the connected components of the undirected graph g. +func ConnectedComponents(g graph.Undirected) [][]graph.Node { + var ( + w traverse.DepthFirst + c []graph.Node + cc [][]graph.Node + ) + during := func(n graph.Node) { + c = append(c, n) + } + after := func() { + cc = append(cc, []graph.Node(nil)) + cc[len(cc)-1] = append(cc[len(cc)-1], c...) + c = c[:0] + } + w.WalkAll(g, nil, after, during) + + return cc +} diff --git a/vendor/github.com/gonum/graph/traverse/traverse.go b/vendor/github.com/gonum/graph/traverse/traverse.go new file mode 100644 index 00000000..bb0fdad1 --- /dev/null +++ b/vendor/github.com/gonum/graph/traverse/traverse.go @@ -0,0 +1,182 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package traverse provides basic graph traversal primitives. +package traverse + +import ( + "github.com/gonum/graph" + "github.com/gonum/graph/internal" +) + +// BreadthFirst implements stateful breadth-first graph traversal. +type BreadthFirst struct { + EdgeFilter func(graph.Edge) bool + Visit func(u, v graph.Node) + queue internal.NodeQueue + visited internal.IntSet +} + +// Walk performs a breadth-first traversal of the graph g starting from the given node, +// depending on the the EdgeFilter field and the until parameter if they are non-nil. The +// traversal follows edges for which EdgeFilter(edge) is true and returns the first node +// for which until(node, depth) is true. During the traversal, if the Visit field is +// non-nil, it is called with the nodes joined by each followed edge. +func (b *BreadthFirst) Walk(g graph.Graph, from graph.Node, until func(n graph.Node, d int) bool) graph.Node { + if b.visited == nil { + b.visited = make(internal.IntSet) + } + b.queue.Enqueue(from) + b.visited.Add(from.ID()) + + var ( + depth int + children int + untilNext = 1 + ) + for b.queue.Len() > 0 { + t := b.queue.Dequeue() + if until != nil && until(t, depth) { + return t + } + for _, n := range g.From(t) { + if b.EdgeFilter != nil && !b.EdgeFilter(g.Edge(t, n)) { + continue + } + if b.visited.Has(n.ID()) { + continue + } + if b.Visit != nil { + b.Visit(t, n) + } + b.visited.Add(n.ID()) + children++ + b.queue.Enqueue(n) + } + if untilNext--; untilNext == 0 { + depth++ + untilNext = children + children = 0 + } + } + + return nil +} + +// WalkAll calls Walk for each unvisited node of the graph g using edges independent +// of their direction. The functions before and after are called prior to commencing +// and after completing each walk if they are non-nil respectively. The function +// during is called on each node as it is traversed. +func (b *BreadthFirst) WalkAll(g graph.Undirected, before, after func(), during func(graph.Node)) { + b.Reset() + for _, from := range g.Nodes() { + if b.Visited(from) { + continue + } + if before != nil { + before() + } + b.Walk(g, from, func(n graph.Node, _ int) bool { + if during != nil { + during(n) + } + return false + }) + if after != nil { + after() + } + } +} + +// Visited returned whether the node n was visited during a traverse. +func (b *BreadthFirst) Visited(n graph.Node) bool { + _, ok := b.visited[n.ID()] + return ok +} + +// Reset resets the state of the traverser for reuse. +func (b *BreadthFirst) Reset() { + b.queue.Reset() + b.visited = nil +} + +// DepthFirst implements stateful depth-first graph traversal. +type DepthFirst struct { + EdgeFilter func(graph.Edge) bool + Visit func(u, v graph.Node) + stack internal.NodeStack + visited internal.IntSet +} + +// Walk performs a depth-first traversal of the graph g starting from the given node, +// depending on the the EdgeFilter field and the until parameter if they are non-nil. The +// traversal follows edges for which EdgeFilter(edge) is true and returns the first node +// for which until(node) is true. During the traversal, if the Visit field is non-nil, it +// is called with the nodes joined by each followed edge. +func (d *DepthFirst) Walk(g graph.Graph, from graph.Node, until func(graph.Node) bool) graph.Node { + if d.visited == nil { + d.visited = make(internal.IntSet) + } + d.stack.Push(from) + d.visited.Add(from.ID()) + + for d.stack.Len() > 0 { + t := d.stack.Pop() + if until != nil && until(t) { + return t + } + for _, n := range g.From(t) { + if d.EdgeFilter != nil && !d.EdgeFilter(g.Edge(t, n)) { + continue + } + if d.visited.Has(n.ID()) { + continue + } + if d.Visit != nil { + d.Visit(t, n) + } + d.visited.Add(n.ID()) + d.stack.Push(n) + } + } + + return nil +} + +// WalkAll calls Walk for each unvisited node of the graph g using edges independent +// of their direction. The functions before and after are called prior to commencing +// and after completing each walk if they are non-nil respectively. The function +// during is called on each node as it is traversed. +func (d *DepthFirst) WalkAll(g graph.Undirected, before, after func(), during func(graph.Node)) { + d.Reset() + for _, from := range g.Nodes() { + if d.Visited(from) { + continue + } + if before != nil { + before() + } + d.Walk(g, from, func(n graph.Node) bool { + if during != nil { + during(n) + } + return false + }) + if after != nil { + after() + } + } +} + +// Visited returned whether the node n was visited during a traverse. +func (d *DepthFirst) Visited(n graph.Node) bool { + _, ok := d.visited[n.ID()] + return ok +} + +// Reset resets the state of the traverser for reuse. +func (d *DepthFirst) Reset() { + d.stack = d.stack[:0] + d.visited = nil +} diff --git a/vendor/github.com/gonum/internal/asm/caxpy.go b/vendor/github.com/gonum/internal/asm/caxpy.go new file mode 100644 index 00000000..80d802ad --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/caxpy.go @@ -0,0 +1,22 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +// The extra z parameter is needed because of floats.AddScaledTo +func CaxpyUnitary(alpha complex64, x, y, z []complex64) { + for i, v := range x { + z[i] = alpha*v + y[i] + } +} + +func CaxpyInc(alpha complex64, x, y []complex64, n, incX, incY, ix, iy uintptr) { + for i := 0; i < int(n); i++ { + y[iy] += alpha * x[ix] + ix += incX + iy += incY + } +} diff --git a/vendor/github.com/gonum/internal/asm/cdotc.go b/vendor/github.com/gonum/internal/asm/cdotc.go new file mode 100644 index 00000000..ed999e5f --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/cdotc.go @@ -0,0 +1,23 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +func CdotcUnitary(x, y []complex64) (sum complex64) { + for i, v := range x { + sum += y[i] * conj(v) + } + return +} + +func CdotcInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) { + for i := 0; i < int(n); i++ { + sum += y[iy] * conj(x[ix]) + ix += incX + iy += incY + } + return +} diff --git a/vendor/github.com/gonum/internal/asm/cdotu.go b/vendor/github.com/gonum/internal/asm/cdotu.go new file mode 100644 index 00000000..3392ee25 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/cdotu.go @@ -0,0 +1,23 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +func CdotuUnitary(x, y []complex64) (sum complex64) { + for i, v := range x { + sum += y[i] * v + } + return +} + +func CdotuInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) { + for i := 0; i < int(n); i++ { + sum += y[iy] * x[ix] + ix += incX + iy += incY + } + return +} diff --git a/vendor/github.com/gonum/internal/asm/complex b/vendor/github.com/gonum/internal/asm/complex new file mode 100755 index 00000000..b26e4e60 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/complex @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Copyright ©2015 The gonum Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +echo Generating zdotu.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotu.go +cat ddot.go \ +| grep -v '//+build' \ +| gofmt -r 'float64 -> complex128' \ +| sed 's/Ddot/Zdotu/' \ +>> zdotu.go + +echo Generating zdotc.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotc.go +cat ddot.go \ +| grep -v '//+build' \ +| gofmt -r 'float64 -> complex128' \ +| gofmt -r 'y[i] * v -> y[i] * cmplx.Conj(v)' \ +| sed 's/Ddot/Zdotc/' \ +| goimports \ +>> zdotc.go + +echo Generating zaxpy.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > zaxpy.go +cat daxpy.go \ +| grep -v '//+build' \ +| gofmt -r 'float64 -> complex128' \ +| sed 's/Daxpy/Zaxpy/' \ +>> zaxpy.go + +echo Generating cdotu.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotu.go +cat ddot.go \ +| grep -v '//+build' \ +| gofmt -r 'float64 -> complex64' \ +| sed 's/Ddot/Cdotu/' \ +>> cdotu.go + +echo Generating cdotc.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotc.go +cat ddot.go \ +| grep -v '//+build' \ +| gofmt -r 'float64 -> complex64' \ +| gofmt -r 'y[i] * v -> y[i] * conj(v)' \ +| sed 's/Ddot/Cdotc/' \ +| goimports \ +>> cdotc.go + +echo Generating caxpy.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > caxpy.go +cat daxpy.go \ +| grep -v '//+build' \ +| gofmt -r 'float64 -> complex64' \ +| sed 's/Daxpy/Caxpy/' \ +>> caxpy.go + diff --git a/vendor/github.com/gonum/internal/asm/conj.go b/vendor/github.com/gonum/internal/asm/conj.go new file mode 100644 index 00000000..1cadb2a5 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/conj.go @@ -0,0 +1,7 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +func conj(c complex64) complex64 { return complex(real(c), -imag(c)) } diff --git a/vendor/github.com/gonum/internal/asm/daxpy.go b/vendor/github.com/gonum/internal/asm/daxpy.go new file mode 100644 index 00000000..24979fc6 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/daxpy.go @@ -0,0 +1,22 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build !amd64 noasm + +package asm + +// The extra z parameter is needed because of floats.AddScaledTo +func DaxpyUnitary(alpha float64, x, y, z []float64) { + for i, v := range x { + z[i] = alpha*v + y[i] + } +} + +func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr) { + for i := 0; i < int(n); i++ { + y[iy] += alpha * x[ix] + ix += incX + iy += incY + } +} diff --git a/vendor/github.com/gonum/internal/asm/daxpy_amd64.go b/vendor/github.com/gonum/internal/asm/daxpy_amd64.go new file mode 100644 index 00000000..d1aeacfe --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/daxpy_amd64.go @@ -0,0 +1,12 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build !noasm + +package asm + +// The extra z parameter is needed because of floats.AddScaledTo +func DaxpyUnitary(alpha float64, x, y, z []float64) + +func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr) diff --git a/vendor/github.com/gonum/internal/asm/daxpy_amd64.s b/vendor/github.com/gonum/internal/asm/daxpy_amd64.s new file mode 100644 index 00000000..18f2d3c7 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/daxpy_amd64.s @@ -0,0 +1,140 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// Some of the loop unrolling code is copied from: +// http://golang.org/src/math/big/arith_amd64.s +// which is distributed under these terms: +// +// Copyright (c) 2012 The Go Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//+build !noasm + +// TODO(fhs): use textflag.h after we drop Go 1.3 support +//#include "textflag.h" +// Don't insert stack check preamble. +#define NOSPLIT 4 + + +// func DaxpyUnitary(alpha float64, x, y, z []float64) +// This function assumes len(y) >= len(x). +TEXT ·DaxpyUnitary(SB),NOSPLIT,$0 + MOVHPD alpha+0(FP), X7 + MOVLPD alpha+0(FP), X7 + MOVQ x_len+16(FP), DI // n = len(x) + MOVQ x+8(FP), R8 + MOVQ y+32(FP), R9 + MOVQ z+56(FP), R10 + + MOVQ $0, SI // i = 0 + SUBQ $2, DI // n -= 2 + JL V1 // if n < 0 goto V1 + +U1: // n >= 0 + // y[i] += alpha * x[i] unrolled 2x. + MOVUPD 0(R8)(SI*8), X0 + MOVUPD 0(R9)(SI*8), X1 + MULPD X7, X0 + ADDPD X0, X1 + MOVUPD X1, 0(R10)(SI*8) + + ADDQ $2, SI // i += 2 + SUBQ $2, DI // n -= 2 + JGE U1 // if n >= 0 goto U1 + +V1: + ADDQ $2, DI // n += 2 + JLE E1 // if n <= 0 goto E1 + + // y[i] += alpha * x[i] for last iteration if n is odd. + MOVSD 0(R8)(SI*8), X0 + MOVSD 0(R9)(SI*8), X1 + MULSD X7, X0 + ADDSD X0, X1 + MOVSD X1, 0(R10)(SI*8) + +E1: + RET + + +// func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr) +TEXT ·DaxpyInc(SB),NOSPLIT,$0 + MOVHPD alpha+0(FP), X7 + MOVLPD alpha+0(FP), X7 + MOVQ x+8(FP), R8 + MOVQ y+32(FP), R9 + MOVQ n+56(FP), CX + MOVQ incX+64(FP), R11 + MOVQ incY+72(FP), R12 + MOVQ ix+80(FP), SI + MOVQ iy+88(FP), DI + + MOVQ SI, AX // nextX = ix + MOVQ DI, BX // nextY = iy + ADDQ R11, AX // nextX += incX + ADDQ R12, BX // nextY += incX + SHLQ $1, R11 // indX *= 2 + SHLQ $1, R12 // indY *= 2 + + SUBQ $2, CX // n -= 2 + JL V2 // if n < 0 goto V2 + +U2: // n >= 0 + // y[i] += alpha * x[i] unrolled 2x. + MOVHPD 0(R8)(SI*8), X0 + MOVHPD 0(R9)(DI*8), X1 + MOVLPD 0(R8)(AX*8), X0 + MOVLPD 0(R9)(BX*8), X1 + + MULPD X7, X0 + ADDPD X0, X1 + MOVHPD X1, 0(R9)(DI*8) + MOVLPD X1, 0(R9)(BX*8) + + ADDQ R11, SI // ix += incX + ADDQ R12, DI // iy += incY + ADDQ R11, AX // nextX += incX + ADDQ R12, BX // nextY += incY + + SUBQ $2, CX // n -= 2 + JGE U2 // if n >= 0 goto U2 + +V2: + ADDQ $2, CX // n += 2 + JLE E2 // if n <= 0 goto E2 + + // y[i] += alpha * x[i] for the last iteration if n is odd. + MOVSD 0(R8)(SI*8), X0 + MOVSD 0(R9)(DI*8), X1 + MULSD X7, X0 + ADDSD X0, X1 + MOVSD X1, 0(R9)(DI*8) + +E2: + RET diff --git a/vendor/github.com/gonum/internal/asm/ddot.go b/vendor/github.com/gonum/internal/asm/ddot.go new file mode 100644 index 00000000..7e699579 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/ddot.go @@ -0,0 +1,23 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build !amd64 noasm + +package asm + +func DdotUnitary(x, y []float64) (sum float64) { + for i, v := range x { + sum += y[i] * v + } + return +} + +func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64) { + for i := 0; i < int(n); i++ { + sum += y[iy] * x[ix] + ix += incX + iy += incY + } + return +} diff --git a/vendor/github.com/gonum/internal/asm/ddot_amd64.go b/vendor/github.com/gonum/internal/asm/ddot_amd64.go new file mode 100644 index 00000000..7fa634a6 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/ddot_amd64.go @@ -0,0 +1,10 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//+build !noasm + +package asm + +func DdotUnitary(x, y []float64) (sum float64) +func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64) diff --git a/vendor/github.com/gonum/internal/asm/ddot_amd64.s b/vendor/github.com/gonum/internal/asm/ddot_amd64.s new file mode 100644 index 00000000..a898bbba --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/ddot_amd64.s @@ -0,0 +1,140 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// Some of the loop unrolling code is copied from: +// http://golang.org/src/math/big/arith_amd64.s +// which is distributed under these terms: +// +// Copyright (c) 2012 The Go Authors. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +//+build !noasm + +// TODO(fhs): use textflag.h after we drop Go 1.3 support +//#include "textflag.h" +// Don't insert stack check preamble. +#define NOSPLIT 4 + + +// func DdotUnitary(x, y []float64) (sum float64) +// This function assumes len(y) >= len(x). +TEXT ·DdotUnitary(SB),NOSPLIT,$0 + MOVQ x_len+8(FP), DI // n = len(x) + MOVQ x+0(FP), R8 + MOVQ y+24(FP), R9 + + MOVQ $0, SI // i = 0 + MOVSD $(0.0), X7 // sum = 0 + + SUBQ $2, DI // n -= 2 + JL V1 // if n < 0 goto V1 + +U1: // n >= 0 + // sum += x[i] * y[i] unrolled 2x. + MOVUPD 0(R8)(SI*8), X0 + MOVUPD 0(R9)(SI*8), X1 + MULPD X1, X0 + ADDPD X0, X7 + + ADDQ $2, SI // i += 2 + SUBQ $2, DI // n -= 2 + JGE U1 // if n >= 0 goto U1 + +V1: // n > 0 + ADDQ $2, DI // n += 2 + JLE E1 // if n <= 0 goto E1 + + // sum += x[i] * y[i] for last iteration if n is odd. + MOVSD 0(R8)(SI*8), X0 + MOVSD 0(R9)(SI*8), X1 + MULSD X1, X0 + ADDSD X0, X7 + +E1: + // Add the two sums together. + MOVSD X7, X0 + UNPCKHPD X7, X7 + ADDSD X0, X7 + MOVSD X7, sum+48(FP) // return final sum + RET + + +// func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64) +TEXT ·DdotInc(SB),NOSPLIT,$0 + MOVQ x+0(FP), R8 + MOVQ y+24(FP), R9 + MOVQ n+48(FP), CX + MOVQ incX+56(FP), R11 + MOVQ incY+64(FP), R12 + MOVQ ix+72(FP), R13 + MOVQ iy+80(FP), R14 + + MOVSD $(0.0), X7 // sum = 0 + LEAQ (R8)(R13*8), SI // p = &x[ix] + LEAQ (R9)(R14*8), DI // q = &y[ix] + SHLQ $3, R11 // incX *= sizeof(float64) + SHLQ $3, R12 // indY *= sizeof(float64) + + SUBQ $2, CX // n -= 2 + JL V2 // if n < 0 goto V2 + +U2: // n >= 0 + // sum += *p * *q unrolled 2x. + MOVHPD (SI), X0 + MOVHPD (DI), X1 + ADDQ R11, SI // p += incX + ADDQ R12, DI // q += incY + MOVLPD (SI), X0 + MOVLPD (DI), X1 + ADDQ R11, SI // p += incX + ADDQ R12, DI // q += incY + + MULPD X1, X0 + ADDPD X0, X7 + + SUBQ $2, CX // n -= 2 + JGE U2 // if n >= 0 goto U2 + +V2: + ADDQ $2, CX // n += 2 + JLE E2 // if n <= 0 goto E2 + + // sum += *p * *q for the last iteration if n is odd. + MOVSD (SI), X0 + MULSD (DI), X0 + ADDSD X0, X7 + +E2: + // Add the two sums together. + MOVSD X7, X0 + UNPCKHPD X7, X7 + ADDSD X0, X7 + MOVSD X7, sum+88(FP) // return final sum + RET + \ No newline at end of file diff --git a/vendor/github.com/gonum/internal/asm/dsdot.go b/vendor/github.com/gonum/internal/asm/dsdot.go new file mode 100644 index 00000000..84506890 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/dsdot.go @@ -0,0 +1,23 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +func DsdotUnitary(x, y []float32) (sum float64) { + for i, v := range x { + sum += float64(y[i]) * float64(v) + } + return +} + +func DsdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float64) { + for i := 0; i < int(n); i++ { + sum += float64(y[iy]) * float64(x[ix]) + ix += incX + iy += incY + } + return +} diff --git a/vendor/github.com/gonum/internal/asm/generate.go b/vendor/github.com/gonum/internal/asm/generate.go new file mode 100644 index 00000000..e2521405 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/generate.go @@ -0,0 +1,8 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:generate ./single_precision +//go:generate ./complex + +package asm diff --git a/vendor/github.com/gonum/internal/asm/saxpy.go b/vendor/github.com/gonum/internal/asm/saxpy.go new file mode 100644 index 00000000..3ef767f2 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/saxpy.go @@ -0,0 +1,22 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +// The extra z parameter is needed because of floats.AddScaledTo +func SaxpyUnitary(alpha float32, x, y, z []float32) { + for i, v := range x { + z[i] = alpha*v + y[i] + } +} + +func SaxpyInc(alpha float32, x, y []float32, n, incX, incY, ix, iy uintptr) { + for i := 0; i < int(n); i++ { + y[iy] += alpha * x[ix] + ix += incX + iy += incY + } +} diff --git a/vendor/github.com/gonum/internal/asm/sdot.go b/vendor/github.com/gonum/internal/asm/sdot.go new file mode 100644 index 00000000..0cef5de4 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/sdot.go @@ -0,0 +1,23 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +func SdotUnitary(x, y []float32) (sum float32) { + for i, v := range x { + sum += y[i] * v + } + return +} + +func SdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float32) { + for i := 0; i < int(n); i++ { + sum += y[iy] * x[ix] + ix += incX + iy += incY + } + return +} diff --git a/vendor/github.com/gonum/internal/asm/single_precision b/vendor/github.com/gonum/internal/asm/single_precision new file mode 100755 index 00000000..a937a977 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/single_precision @@ -0,0 +1,30 @@ +#!/usr/bin/env bash + +# Copyright ©2015 The gonum Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +echo Generating dsdot.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > dsdot.go +cat ddot.go \ +| grep -v '//+build' \ +| gofmt -r '[]float64 -> []float32' \ +| gofmt -r 'a * b -> float64(a) * float64(b)' \ +| sed 's/Ddot/Dsdot/' \ +>> dsdot.go + +echo Generating sdot.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > sdot.go +cat ddot.go \ +| grep -v '//+build' \ +| gofmt -r 'float64 -> float32' \ +| sed 's/Ddot/Sdot/' \ +>> sdot.go + +echo Generating saxpy.go +echo -e '// Generated code do not edit. Run `go generate`.\n' > saxpy.go +cat daxpy.go \ +| grep -v '//+build' \ +| gofmt -r 'float64 -> float32' \ +| sed 's/Daxpy/Saxpy/' \ +>> saxpy.go diff --git a/vendor/github.com/gonum/internal/asm/zaxpy.go b/vendor/github.com/gonum/internal/asm/zaxpy.go new file mode 100644 index 00000000..9478f257 --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/zaxpy.go @@ -0,0 +1,22 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +// The extra z parameter is needed because of floats.AddScaledTo +func ZaxpyUnitary(alpha complex128, x, y, z []complex128) { + for i, v := range x { + z[i] = alpha*v + y[i] + } +} + +func ZaxpyInc(alpha complex128, x, y []complex128, n, incX, incY, ix, iy uintptr) { + for i := 0; i < int(n); i++ { + y[iy] += alpha * x[ix] + ix += incX + iy += incY + } +} diff --git a/vendor/github.com/gonum/internal/asm/zdotc.go b/vendor/github.com/gonum/internal/asm/zdotc.go new file mode 100644 index 00000000..7b8febcc --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/zdotc.go @@ -0,0 +1,25 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +import "math/cmplx" + +func ZdotcUnitary(x, y []complex128) (sum complex128) { + for i, v := range x { + sum += y[i] * cmplx.Conj(v) + } + return +} + +func ZdotcInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) { + for i := 0; i < int(n); i++ { + sum += y[iy] * cmplx.Conj(x[ix]) + ix += incX + iy += incY + } + return +} diff --git a/vendor/github.com/gonum/internal/asm/zdotu.go b/vendor/github.com/gonum/internal/asm/zdotu.go new file mode 100644 index 00000000..82c1fe2c --- /dev/null +++ b/vendor/github.com/gonum/internal/asm/zdotu.go @@ -0,0 +1,23 @@ +// Generated code do not edit. Run `go generate`. + +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package asm + +func ZdotuUnitary(x, y []complex128) (sum complex128) { + for i, v := range x { + sum += y[i] * v + } + return +} + +func ZdotuInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) { + for i := 0; i < int(n); i++ { + sum += y[iy] * x[ix] + ix += incX + iy += incY + } + return +} diff --git a/vendor/github.com/gonum/lapack/.gitignore b/vendor/github.com/gonum/lapack/.gitignore new file mode 100644 index 00000000..cfb89652 --- /dev/null +++ b/vendor/github.com/gonum/lapack/.gitignore @@ -0,0 +1 @@ +clapack/lapack.go diff --git a/vendor/github.com/gonum/lapack/.travis.yml b/vendor/github.com/gonum/lapack/.travis.yml new file mode 100644 index 00000000..54358172 --- /dev/null +++ b/vendor/github.com/gonum/lapack/.travis.yml @@ -0,0 +1,38 @@ +sudo: required + +language: go + +env: + matrix: + - BLAS_LIB=OpenBLAS + - BLAS_LIB=gonum + # Does not currently link correctly. Note that there is an issue with drotgm in ATLAS. + # - BLAS_LIB=ATLAS + # If we can get multiarch builds on travis. + # There are some issues with the Accellerate implementation. + #- BLAS_LIB=Accellerate + +# Versions of go that are explicitly supported by gonum. +go: + - 1.5beta1 + - 1.3.3 + - 1.4.2 + +# Required for coverage. +before_install: + - go get golang.org/x/tools/cmd/cover + - go get github.com/mattn/goveralls + +# Install the appropriate BLAS library. +install: + - bash .travis/$TRAVIS_OS_NAME/$BLAS_LIB/install.sh + +# Get deps, build, test, and ensure the code is gofmt'ed. +# If we are building as gonum, then we have access to the coveralls api key, so we can run coverage as well. +script: + - if [[ "$BLAS_LIB" == "gonum" ]]; then pushd native; fi + - go get -d -t -v ./... + - go build -v ./... + - go test -v ./... + - diff <(gofmt -d *.go) <("") + - if [[ $TRAVIS_SECURE_ENV_VARS = "true" ]]; then bash -c "${TRAVIS_BUILD_DIR}/.travis/test-coverage.sh"; fi diff --git a/vendor/github.com/gonum/lapack/README.md b/vendor/github.com/gonum/lapack/README.md new file mode 100644 index 00000000..b2fc7b21 --- /dev/null +++ b/vendor/github.com/gonum/lapack/README.md @@ -0,0 +1,58 @@ +Gonum LAPACK [![Build Status](https://travis-ci.org/gonum/lapack.svg?branch=master)](https://travis-ci.org/gonum/lapack) [![Coverage Status](https://img.shields.io/coveralls/gonum/lapack.svg)](https://coveralls.io/r/gonum/lapack) +====== + +A collection of packages to provide LAPACK functionality for the Go programming +language (http://golang.org). This provides a partial implementation in native go +and a wrapper using cgo to a c-based implementation. + +## Installation + +``` + go get github.com/gonum/blas +``` + + +Install OpenBLAS: +``` + git clone https://github.com/xianyi/OpenBLAS + cd OpenBLAS + make +``` + +Then install the lapack/cgo package: +```sh + CGO_LDFLAGS="-L/path/to/OpenBLAS -lopenblas" go install github.com/gonum/lapack/cgo +``` + +For Windows you can download binary packages for OpenBLAS at +http://sourceforge.net/projects/openblas/files/ + +If you want to use a different BLAS package such as the Intel MKL you can +adjust the `CGO_LDFLAGS` variable: +```sh + CGO_LDFLAGS="-lmkl_rt" go install github.com/gonum/lapack/cgo +``` + +## Packages + +### lapack + +Defines the LAPACK API based on http://www.netlib.org/lapack/lapacke.html + +### lapack/clapack + +Binding to a C implementation of the lapacke interface (e.g. OpenBLAS or intel MKL) + +The linker flags (i.e. path to the BLAS library and library name) might have to be adapted. + +The recommended (free) option for good performance on both linux and darwin is OpenBLAS. + +## Issues + +If you find any bugs, feel free to file an issue on the github issue tracker. Discussions on API changes, added features, code review, or similar requests are preferred on the gonum-dev Google Group. + +https://groups.google.com/forum/#!forum/gonum-dev + +## License + +Please see github.com/gonum/license for general license information, contributors, authors, etc on the Gonum suite of packages. diff --git a/vendor/github.com/gonum/lapack/lapack.go b/vendor/github.com/gonum/lapack/lapack.go new file mode 100644 index 00000000..f6fbb511 --- /dev/null +++ b/vendor/github.com/gonum/lapack/lapack.go @@ -0,0 +1,60 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package lapack + +import "github.com/gonum/blas" + +const None = 'N' + +type Job byte + +// CompSV determines if the singular values are to be computed in compact form. +type CompSV byte + +const ( + Compact CompSV = 'P' + Explicit CompSV = 'I' +) + +// Complex128 defines the public complex128 LAPACK API supported by gonum/lapack. +type Complex128 interface{} + +// Float64 defines the public float64 LAPACK API supported by gonum/lapack. +type Float64 interface { + Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool) +} + +// Direct specifies the direction of the multiplication for the Householder matrix. +type Direct byte + +const ( + Forward Direct = 'F' // Reflectors are right-multiplied, H_1 * H_2 * ... * H_k + Backward Direct = 'B' // Reflectors are left-multiplied, H_k * ... * H_2 * H_1 +) + +// StoreV indicates the storage direction of elementary reflectors. +type StoreV byte + +const ( + ColumnWise StoreV = 'C' // Reflector stored in a column of the matrix. + RowWise StoreV = 'R' // Reflector stored in a row of the matrix. +) + +// MatrixNorm represents the kind of matrix norm to compute. +type MatrixNorm byte + +const ( + MaxAbs MatrixNorm = 'M' // max(abs(A(i,j))) ('M') + MaxColumnSum MatrixNorm = 'O' // Maximum column sum (one norm) ('1', 'O') + MaxRowSum MatrixNorm = 'I' // Maximum row sum (infinity norm) ('I', 'i') + NormFrob MatrixNorm = 'F' // Frobenium norm (sqrt of sum of squares) ('F', 'f', E, 'e') +) + +// MatrixType represents the kind of matrix represented in the data. +type MatrixType byte + +const ( + General MatrixType = 'G' // A dense matrix (like blas64.General). +) diff --git a/vendor/github.com/gonum/lapack/lapack64/lapack64.go b/vendor/github.com/gonum/lapack/lapack64/lapack64.go new file mode 100644 index 00000000..fe13d587 --- /dev/null +++ b/vendor/github.com/gonum/lapack/lapack64/lapack64.go @@ -0,0 +1,49 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package lapack64 provides a set of convenient wrapper functions for LAPACK +// calls, as specified in the netlib standard (www.netlib.org). +// +// The native Go routines are used by default, and the Use function can be used +// to set an alternate implementation. +// +// If the type of matrix (General, Symmetric, etc.) is known and fixed, it is +// used in the wrapper signature. In many cases, however, the type of the matrix +// changes during the call to the routine, for example the matrix is symmetric on +// entry and is triangular on exit. In these cases the correct types should be checked +// in the documentation. +// +// The full set of Lapack functions is very large, and it is not clear that a +// full implementation is desirable, let alone feasible. Please open up an issue +// if there is a specific function you need and/or are willing to implement. +package lapack64 + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" + "github.com/gonum/lapack/native" +) + +var lapack64 lapack.Float64 = native.Implementation{} + +// Use sets the LAPACK float64 implementation to be used by subsequent BLAS calls. +// The default implementation is native.Implementation. +func Use(l lapack.Float64) { + lapack64 = l +} + +// Potrf computes the cholesky factorization of a. +// A = U^T * U if ul == blas.Upper +// A = L * L^T if ul == blas.Lower +// The underlying data between the input matrix and output matrix is shared. +func Potrf(a blas64.Symmetric) (t blas64.Triangular, ok bool) { + ok = lapack64.Dpotrf(a.Uplo, a.N, a.Data, a.Stride) + t.Uplo = a.Uplo + t.N = a.N + t.Data = a.Data + t.Stride = a.Stride + t.Diag = blas.NonUnit + return +} diff --git a/vendor/github.com/gonum/lapack/native/dgelq2.go b/vendor/github.com/gonum/lapack/native/dgelq2.go new file mode 100644 index 00000000..184769d7 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dgelq2.go @@ -0,0 +1,44 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dgelq2 computes the LQ factorization of the m×n matrix a. +// +// During Dgelq2, a is modified to contain the information to construct Q and L. +// The lower triangle of a contains the matrix L. The upper triangular elements +// (not including the diagonal) contain the elementary reflectors. Tau is modified +// to contain the reflector scales. Tau must have length of at least k = min(m,n) +// and this function will panic otherwise. +// +// See Dgeqr2 for a description of the elementary reflectors and orthonormal +// matrix Q. Q is constructed as a product of these elementary reflectors, +// Q = H_k ... H_2*H_1. +// +// Work is temporary storage of length at least m and this function will panic otherwise. +func (impl Implementation) Dgelq2(m, n int, a []float64, lda int, tau, work []float64) { + checkMatrix(m, n, a, lda) + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + if len(work) < m { + panic(badWork) + } + for i := 0; i < k; i++ { + a[i*lda+i], tau[i] = impl.Dlarfg(n-i, a[i*lda+i], a[i*lda+min(i+1, n-1):], 1) + if i < m-1 { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(blas.Right, m-i-1, n-i, + a[i*lda+i:], 1, + tau[i], + a[(i+1)*lda+i:], lda, + work) + a[i*lda+i] = aii + } + } +} diff --git a/vendor/github.com/gonum/lapack/native/dgelqf.go b/vendor/github.com/gonum/lapack/native/dgelqf.go new file mode 100644 index 00000000..bc52f3b0 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dgelqf.go @@ -0,0 +1,84 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dgelqf computes the LQ factorization of the m×n matrix a using a blocked +// algorithm. Please see the documentation for Dgelq2 for a description of the +// parameters at entry and exit. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m, and this function will panic otherwise. +// Dgelqf is a blocked LQ factorization, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgelqf, +// the optimal work length will be stored into work[0]. +// +// tau must have length at least min(m,n), and this function will panic otherwise. +func (impl Implementation) Dgelqf(m, n int, a []float64, lda int, tau, work []float64, lwork int) { + nb := impl.Ilaenv(1, "DGELQF", " ", m, n, -1, -1) + lworkopt := m * max(nb, 1) + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + checkMatrix(m, n, a, lda) + if len(work) < lwork { + panic(shortWork) + } + if lwork < m { + panic(badWork) + } + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + if k == 0 { + return + } + // Find the optimal blocking size based on the size of available memory + // and optimal machine parameters. + nbmin := 2 + var nx int + iws := m + ldwork := nb + if nb > 1 && k > nb { + nx = max(0, impl.Ilaenv(3, "DGELQF", " ", m, n, -1, -1)) + if nx < k { + iws = m * nb + if lwork < iws { + nb = lwork / m + nbmin = max(2, impl.Ilaenv(2, "DGELQF", " ", m, n, -1, -1)) + } + } + } + // Computed blocked LQ factorization. + var i int + if nb >= nbmin && nb < k && nx < k { + for i = 0; i < k-nx; i += nb { + ib := min(k-i, nb) + impl.Dgelq2(ib, n-i, a[i*lda+i:], lda, tau[i:], work) + if i+ib < m { + impl.Dlarft(lapack.Forward, lapack.RowWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + work, ldwork) + impl.Dlarfb(blas.Right, blas.NoTrans, lapack.Forward, lapack.RowWise, + m-i-ib, n-i, ib, + a[i*lda+i:], lda, + work, ldwork, + a[(i+ib)*lda+i:], lda, + work[ib*ldwork:], ldwork) + } + } + } + // Perform unblocked LQ factorization on the remainder. + if i < k { + impl.Dgelq2(m-i, n-i, a[i*lda+i:], lda, tau[i:], work) + } +} diff --git a/vendor/github.com/gonum/lapack/native/dgels.go b/vendor/github.com/gonum/lapack/native/dgels.go new file mode 100644 index 00000000..7759561b --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dgels.go @@ -0,0 +1,200 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dgels finds a minimum-norm solution based on the matrices a and b using the +// QR or LQ factorization. Dgels returns false if the matrix +// A is singular, and true if this solution was successfully found. +// +// The minimization problem solved depends on the input parameters. +// +// 1. If m >= n and trans == blas.NoTrans, Dgels finds X such that || A*X - B||_2 +// is minimized. +// 2. If m < n and trans == blas.NoTrans, Dgels finds the minimum norm solution of +// A * X = B. +// 3. If m >= n and trans == blas.Trans, Dgels finds the minimum norm solution of +// A^T * X = B. +// 4. If m < n and trans == blas.Trans, Dgels finds X such that || A*X - B||_2 +// is minimized. +// Note that the least-squares solutions (cases 1 and 3) perform the minimization +// per column of B. This is not the same as finding the minimum-norm matrix. +// +// The matrix a is a general matrix of size m×n and is modified during this call. +// The input matrix b is of size max(m,n)×nrhs, and serves two purposes. On entry, +// the elements of b specify the input matrix B. B has size m×nrhs if +// trans == blas.NoTrans, and n×nrhs if trans == blas.Trans. On exit, the +// leading submatrix of b contains the solution vectors X. If trans == blas.NoTrans, +// this submatrix is of size n×nrhs, and of size m×nrhs otherwise. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= max(m,n) + max(m,n,nrhs), and this function will panic +// otherwise. A longer work will enable blocked algorithms to be called. +// In the special case that lwork == -1, work[0] will be set to the optimal working +// length. +func (impl Implementation) Dgels(trans blas.Transpose, m, n, nrhs int, a []float64, lda int, b []float64, ldb int, work []float64, lwork int) bool { + notran := trans == blas.NoTrans + checkMatrix(m, n, a, lda) + mn := min(m, n) + checkMatrix(mn, nrhs, b, ldb) + + // Find optimal block size. + tpsd := true + if notran { + tpsd = false + } + var nb int + if m >= n { + nb = impl.Ilaenv(1, "DGEQRF", " ", m, n, -1, -1) + if tpsd { + nb = max(nb, impl.Ilaenv(1, "DORMQR", "LN", m, nrhs, n, -1)) + } else { + nb = max(nb, impl.Ilaenv(1, "DORMQR", "LT", m, nrhs, n, -1)) + } + } else { + nb = impl.Ilaenv(1, "DGELQF", " ", m, n, -1, -1) + if tpsd { + nb = max(nb, impl.Ilaenv(1, "DORMLQ", "LT", n, nrhs, m, -1)) + } else { + nb = max(nb, impl.Ilaenv(1, "DORMLQ", "LN", n, nrhs, m, -1)) + } + } + if lwork == -1 { + work[0] = float64(max(1, mn+max(mn, nrhs)*nb)) + return true + } + + if len(work) < lwork { + panic(shortWork) + } + if lwork < mn+max(mn, nrhs) { + panic(badWork) + } + if m == 0 || n == 0 || nrhs == 0 { + impl.Dlaset(blas.All, max(m, n), nrhs, 0, 0, b, ldb) + return true + } + + // Scale the input matrices if they contain extreme values. + smlnum := dlamchS / dlamchP + bignum := 1 / smlnum + anrm := impl.Dlange(lapack.MaxAbs, m, n, a, lda, nil) + var iascl int + if anrm > 0 && anrm < smlnum { + impl.Dlascl(lapack.General, 0, 0, anrm, smlnum, m, n, a, lda) + iascl = 1 + } else if anrm > bignum { + impl.Dlascl(lapack.General, 0, 0, anrm, bignum, m, n, a, lda) + } else if anrm == 0 { + // Matrix all zeros + impl.Dlaset(blas.All, max(m, n), nrhs, 0, 0, b, ldb) + return true + } + brow := m + if tpsd { + brow = n + } + bnrm := impl.Dlange(lapack.MaxAbs, brow, nrhs, b, ldb, nil) + ibscl := 0 + if bnrm > 0 && bnrm < smlnum { + impl.Dlascl(lapack.General, 0, 0, bnrm, smlnum, brow, nrhs, b, ldb) + ibscl = 1 + } else if bnrm > bignum { + impl.Dlascl(lapack.General, 0, 0, bnrm, bignum, brow, nrhs, b, ldb) + ibscl = 2 + } + + // Solve the minimization problem using a QR or an LQ decomposition. + var scllen int + if m >= n { + impl.Dgeqrf(m, n, a, lda, work, work[mn:], lwork-mn) + if !tpsd { + impl.Dormqr(blas.Left, blas.Trans, m, nrhs, n, + a, lda, + work, + b, ldb, + work[mn:], lwork-mn) + ok := impl.Dtrtrs(blas.Upper, blas.NoTrans, blas.NonUnit, n, nrhs, + a, lda, + b, ldb) + if !ok { + return false + } + scllen = n + } else { + ok := impl.Dtrtrs(blas.Upper, blas.Trans, blas.NonUnit, n, nrhs, + a, lda, + b, ldb) + if !ok { + return false + } + for i := n; i < m; i++ { + for j := 0; j < nrhs; j++ { + b[i*ldb+j] = 0 + } + } + impl.Dormqr(blas.Left, blas.NoTrans, m, nrhs, n, + a, lda, + work, + b, ldb, + work[mn:], lwork-mn) + scllen = m + } + } else { + impl.Dgelqf(m, n, a, lda, work, work[mn:], lwork-mn) + if !tpsd { + ok := impl.Dtrtrs(blas.Lower, blas.NoTrans, blas.NonUnit, + m, nrhs, + a, lda, + b, ldb) + if !ok { + return false + } + for i := m; i < n; i++ { + for j := 0; j < nrhs; j++ { + b[i*ldb+j] = 0 + } + } + impl.Dormlq(blas.Left, blas.Trans, n, nrhs, m, + a, lda, + work, + b, ldb, + work[mn:], lwork-mn) + scllen = n + } else { + impl.Dormlq(blas.Left, blas.NoTrans, n, nrhs, m, + a, lda, + work, + b, ldb, + work[mn:], lwork-mn) + ok := impl.Dtrtrs(blas.Lower, blas.Trans, blas.NonUnit, + m, nrhs, + a, lda, + b, ldb) + if !ok { + return false + } + } + } + + // Adjust answer vector based on scaling. + if iascl == 1 { + impl.Dlascl(lapack.General, 0, 0, anrm, smlnum, scllen, nrhs, b, ldb) + } + if iascl == 2 { + impl.Dlascl(lapack.General, 0, 0, anrm, bignum, scllen, nrhs, b, ldb) + } + if ibscl == 1 { + impl.Dlascl(lapack.General, 0, 0, smlnum, bnrm, scllen, nrhs, b, ldb) + } + if ibscl == 2 { + impl.Dlascl(lapack.General, 0, 0, bignum, bnrm, scllen, nrhs, b, ldb) + } + return true +} diff --git a/vendor/github.com/gonum/lapack/native/dgeqr2.go b/vendor/github.com/gonum/lapack/native/dgeqr2.go new file mode 100644 index 00000000..efae4a77 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dgeqr2.go @@ -0,0 +1,57 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dgeqr2 computes a QR factorization of the m×n matrix a. +// +// In a QR factorization, Q is an m×m orthonormal matrix, and R is an +// upper triangular m×n matrix. +// +// During Dgeqr2, a is modified to contain the information to construct Q and R. +// The upper triangle of a contains the matrix R. The lower triangular elements +// (not including the diagonal) contain the elementary reflectors. Tau is modified +// to contain the reflector scales. Tau must have length at least k = min(m,n), and +// this function will panic otherwise. +// +// The ith elementary reflector can be explicitly constructed by first extracting +// the +// v[j] = 0 j < i +// v[j] = i j == i +// v[j] = a[i*lda+j] j > i +// and computing h_i = I - tau[i] * v * v^T. +// +// The orthonormal matrix Q can be constucted from a product of these elementary +// reflectors, Q = H_1*H_2 ... H_k, where k = min(m,n). +// +// Work is temporary storage of length at least n and this function will panic otherwise. +func (impl Implementation) Dgeqr2(m, n int, a []float64, lda int, tau, work []float64) { + // TODO(btracey): This is oriented such that columns of a are eliminated. + // This likely could be re-arranged to take better advantage of row-major + // storage. + checkMatrix(m, n, a, lda) + if len(work) < n { + panic(badWork) + } + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + for i := 0; i < k; i++ { + // Generate elementary reflector H(i). + a[i*lda+i], tau[i] = impl.Dlarfg(m-i, a[i*lda+i], a[min((i+1), m-1)*lda+i:], lda) + if i < n-1 { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(blas.Left, m-i, n-i-1, + a[i*lda+i:], lda, + tau[i], + a[i*lda+i+1:], lda, + work) + a[i*lda+i] = aii + } + } +} diff --git a/vendor/github.com/gonum/lapack/native/dgeqrf.go b/vendor/github.com/gonum/lapack/native/dgeqrf.go new file mode 100644 index 00000000..e7c05601 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dgeqrf.go @@ -0,0 +1,98 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dgeqrf computes the QR factorization of the m×n matrix a using a blocked +// algorithm. Please see the documentation for Dgeqr2 for a description of the +// parameters at entry and exit. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m and this function will panic otherwise. +// Dgeqrf is a blocked LQ factorization, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dgelqf, +// the optimal work length will be stored into work[0]. +// +// tau must be at least len min(m,n), and this function will panic otherwise. +func (impl Implementation) Dgeqrf(m, n int, a []float64, lda int, tau, work []float64, lwork int) { + // TODO(btracey): This algorithm is oriented for column-major storage. + // Consider modifying the algorithm to better suit row-major storage. + + // nb is the optimal blocksize, i.e. the number of columns transformed at a time. + nb := impl.Ilaenv(1, "DGEQRF", " ", m, n, -1, -1) + lworkopt := n * max(nb, 1) + lworkopt = max(n, lworkopt) + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + checkMatrix(m, n, a, lda) + if len(work) < lwork { + panic(shortWork) + } + if lwork < n { + panic(badWork) + } + k := min(m, n) + if len(tau) < k { + panic(badTau) + } + if k == 0 { + return + } + nbmin := 2 // Minimal number of blocks + var nx int // Use unblocked (unless changed in the next for loop) + iws := n + ldwork := nb + // Only consider blocked if the suggested number of blocks is > 1 and the + // number of columns is sufficiently large. + if nb > 1 && k > nb { + // nx is the crossover point. Above this value the blocked routine should be used. + nx = max(0, impl.Ilaenv(3, "DGEQRF", " ", m, n, -1, -1)) + if k > nx { + iws = ldwork * n + if lwork < iws { + // Not enough workspace to use the optimal number of blocks. Instead, + // get the maximum allowable number of blocks. + nb = lwork / n + nbmin = max(2, impl.Ilaenv(2, "DGEQRF", " ", m, n, -1, -1)) + } + } + } + for i := range work { + work[i] = 0 + } + // Compute QR using a blocked algorithm. + var i int + if nb >= nbmin && nb < k && nx < k { + for i = 0; i < k-nx; i += nb { + ib := min(k-i, nb) + // Compute the QR factorization of the current block. + impl.Dgeqr2(m-i, ib, a[i*lda+i:], lda, tau[i:], work) + if i+ib < n { + // Form the triangular factor of the block reflector and apply H^T + // In Dlarft, work becomes the T matrix. + impl.Dlarft(lapack.Forward, lapack.ColumnWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + work, ldwork) + impl.Dlarfb(blas.Left, blas.Trans, lapack.Forward, lapack.ColumnWise, + m-i, n-i-ib, ib, + a[i*lda+i:], lda, + work, ldwork, + a[i*lda+i+ib:], lda, + work[ib*ldwork:], ldwork) + } + } + } + // Call unblocked code on the remaining columns. + if i < k { + impl.Dgeqr2(m-i, n-i, a[i*lda+i:], lda, tau[i:], work) + } +} diff --git a/vendor/github.com/gonum/lapack/native/dlange.go b/vendor/github.com/gonum/lapack/native/dlange.go new file mode 100644 index 00000000..fb8259a2 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlange.go @@ -0,0 +1,76 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/lapack" +) + +// Dlange computes the matrix norm of the general m×n matrix a. The input norm +// specifies the norm computed. +// lapack.MaxAbs: the maximum absolute value of an element. +// lapack.MaxColumnSum: the maximum column sum of the absolute values of the entries. +// lapack.MaxRowSum: the maximum row sum of the absolute values of the entries. +// lapack.Frobenius: the square root of the sum of the squares of the entries. +// If norm == lapack.MaxColumnSum, work must be of length n, and this function will panic otherwise. +// There are no restrictions on work for the other matrix norms. +func (impl Implementation) Dlange(norm lapack.MatrixNorm, m, n int, a []float64, lda int, work []float64) float64 { + // TODO(btracey): These should probably be refactored to use BLAS calls. + checkMatrix(m, n, a, lda) + if m == 0 && n == 0 { + return 0 + } + if norm == lapack.MaxAbs { + var value float64 + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + value = math.Max(value, math.Abs(a[i*lda+j])) + } + } + return value + } + if norm == lapack.MaxColumnSum { + if len(work) < n { + panic(badWork) + } + for i := 0; i < n; i++ { + work[i] = 0 + } + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + work[j] += math.Abs(a[i*lda+j]) + } + } + var value float64 + for i := 0; i < n; i++ { + value = math.Max(value, work[i]) + } + return value + } + if norm == lapack.MaxRowSum { + var value float64 + for i := 0; i < m; i++ { + var sum float64 + for j := 0; j < n; j++ { + sum += math.Abs(a[i*lda+j]) + } + value = math.Max(value, sum) + } + return value + } + if norm == lapack.NormFrob { + var value float64 + scale := 0.0 + sum := 1.0 + for i := 0; i < m; i++ { + scale, sum = impl.Dlassq(n, a[i*lda:], 1, scale, sum) + } + value = scale * math.Sqrt(sum) + return value + } + panic("lapack: bad matrix norm") +} diff --git a/vendor/github.com/gonum/lapack/native/dlapy2.go b/vendor/github.com/gonum/lapack/native/dlapy2.go new file mode 100644 index 00000000..172a1174 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlapy2.go @@ -0,0 +1,12 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlapy2 is the LAPACK version of math.Hypot. +func (Implementation) Dlapy2(x, y float64) float64 { + return math.Hypot(x, y) +} diff --git a/vendor/github.com/gonum/lapack/native/dlarf.go b/vendor/github.com/gonum/lapack/native/dlarf.go new file mode 100644 index 00000000..ad473fbe --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlarf.go @@ -0,0 +1,82 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dlarf applies an elementary reflector to a general rectangular matrix c. +// This computes +// c = h * c if side == Left +// c = c * h if side == right +// where +// h = 1 - tau * v * v^T +// and c is an m * n matrix. +// + +// Work is temporary storage of length at least m if side == Left and at least +// n if side == Right. This function will panic if this length requirement is not met. +func (impl Implementation) Dlarf(side blas.Side, m, n int, v []float64, incv int, tau float64, c []float64, ldc int, work []float64) { + applyleft := side == blas.Left + if (applyleft && len(work) < n) || (!applyleft && len(work) < m) { + panic(badWork) + } + checkMatrix(m, n, c, ldc) + + // v has length m if applyleft and n otherwise. + lenV := n + if applyleft { + lenV = m + } + + checkVector(lenV, v, incv) + + lastv := 0 // last non-zero element of v + lastc := 0 // last non-zero row/column of c + if tau != 0 { + var i int + if applyleft { + lastv = m - 1 + } else { + lastv = n - 1 + } + if incv > 0 { + i = lastv * incv + } + + // Look for the last non-zero row in v. + for lastv >= 0 && v[i] == 0 { + lastv-- + i -= incv + } + if applyleft { + // Scan for the last non-zero column in C[0:lastv, :] + lastc = impl.Iladlc(lastv+1, n, c, ldc) + } else { + // Scan for the last non-zero row in C[:, 0:lastv] + lastc = impl.Iladlr(m, lastv+1, c, ldc) + } + } + if lastv == -1 || lastc == -1 { + return + } + // Sometimes 1-indexing is nicer ... + bi := blas64.Implementation() + if applyleft { + // Form H * C + // w[0:lastc+1] = c[1:lastv+1, 1:lastc+1]^T * v[1:lastv+1,1] + bi.Dgemv(blas.Trans, lastv+1, lastc+1, 1, c, ldc, v, incv, 0, work, 1) + // c[0: lastv, 0: lastc] = c[...] - w[0:lastv, 1] * v[1:lastc, 1]^T + bi.Dger(lastv+1, lastc+1, -tau, v, incv, work, 1, c, ldc) + return + } + // Form C*H + // w[0:lastc+1,1] := c[0:lastc+1,0:lastv+1] * v[0:lastv+1,1] + bi.Dgemv(blas.NoTrans, lastc+1, lastv+1, 1, c, ldc, v, incv, 0, work, 1) + // c[0:lastc+1,0:lastv+1] = c[...] - w[0:lastc+1,0] * v[0:lastv+1,0]^T + bi.Dger(lastc+1, lastv+1, -tau, work, 1, v, incv, c, ldc) +} diff --git a/vendor/github.com/gonum/lapack/native/dlarfb.go b/vendor/github.com/gonum/lapack/native/dlarfb.go new file mode 100644 index 00000000..927dd9a5 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlarfb.go @@ -0,0 +1,424 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dlarfb applies a block reflector to a matrix. +// +// In the call to Dlarfb, the mxn c is multiplied by the implicitly defined matrix h as follows: +// c = h * c if side == Left and trans == NoTrans +// c = c * h if side == Right and trans == NoTrans +// c = h^T * c if side == Left and trans == Trans +// c = c * h^t if side == Right and trans == Trans +// h is a product of elementary reflectors. direct sets the direction of multiplication +// h = h_1 * h_2 * ... * h_k if direct == Forward +// h = h_k * h_k-1 * ... * h_1 if direct == Backward +// The combination of direct and store defines the orientation of the elementary +// reflectors. In all cases the ones on the diagonal are implicitly represented. +// +// If direct == lapack.Forward and store == lapack.ColumnWise +// V = ( 1 ) +// ( v1 1 ) +// ( v1 v2 1 ) +// ( v1 v2 v3 ) +// ( v1 v2 v3 ) +// If direct == lapack.Forward and store == lapack.RowWise +// V = ( 1 v1 v1 v1 v1 ) +// ( 1 v2 v2 v2 ) +// ( 1 v3 v3 ) +// If direct == lapack.Backward and store == lapack.ColumnWise +// V = ( v1 v2 v3 ) +// ( v1 v2 v3 ) +// ( 1 v2 v3 ) +// ( 1 v3 ) +// ( 1 ) +// If direct == lapack.Backward and store == lapack.RowWise +// V = ( v1 v1 1 ) +// ( v2 v2 v2 1 ) +// ( v3 v3 v3 v3 1 ) +// An elementary reflector can be explicitly constructed by extracting the +// corresponding elements of v, placing a 1 where the diagonal would be, and +// placing zeros in the remaining elements. +// +// t is a k×k matrix containing the block reflector, and this function will panic +// if t is not of sufficient size. See Dlarft for more information. +// +// Work is a temporary storage matrix with stride ldwork. +// Work must be of size at least n×k side == Left and m×k if side == Right, and +// this function will panic if this size is not met. +func (Implementation) Dlarfb(side blas.Side, trans blas.Transpose, direct lapack.Direct, + store lapack.StoreV, m, n, k int, v []float64, ldv int, t []float64, ldt int, + c []float64, ldc int, work []float64, ldwork int) { + + checkMatrix(m, n, c, ldc) + if m == 0 || n == 0 { + return + } + if k < 0 { + panic("lapack: negative number of transforms") + } + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + if direct != lapack.Forward && direct != lapack.Backward { + panic(badDirect) + } + if store != lapack.ColumnWise && store != lapack.RowWise { + panic(badStore) + } + + rowsWork := n + if side == blas.Right { + rowsWork = m + } + checkMatrix(rowsWork, k, work, ldwork) + + bi := blas64.Implementation() + + transt := blas.Trans + if trans == blas.Trans { + transt = blas.NoTrans + } + // TODO(btracey): This follows the original Lapack code where the + // elements are copied into the columns of the working array. The + // loops should go in the other direction so the data is written + // into the rows of work so the copy is not strided. A bigger change + // would be to replace work with work^T, but benchmarks would be + // needed to see if the change is merited. + if store == lapack.ColumnWise { + if direct == lapack.Forward { + // V1 is the first k rows of C. V2 is the remaining rows. + if side == blas.Left { + // W = C^T V = C1^T V1 + C2^T V2 (stored in work). + + // W = C1. + for j := 0; j < k; j++ { + bi.Dcopy(n, c[j*ldc:], 1, work[j:], ldwork) + } + // W = W * V1. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, + n, k, 1, + v, ldv, + work, ldwork) + if m > k { + // W = W + C2^T V2. + bi.Dgemm(blas.Trans, blas.NoTrans, n, k, m-k, + 1, c[k*ldc:], ldc, v[k*ldv:], ldv, + 1, work, ldwork) + } + // W = W * T^T or W * T. + bi.Dtrmm(blas.Right, blas.Upper, transt, blas.NonUnit, n, k, + 1, t, ldt, + work, ldwork) + // C -= V * W^T. + if m > k { + // C2 -= V2 * W^T. + bi.Dgemm(blas.NoTrans, blas.Trans, m-k, n, k, + -1, v[k*ldv:], ldv, work, ldwork, + 1, c[k*ldc:], ldc) + } + // W *= V1^T. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, n, k, + 1, v, ldv, + work, ldwork) + // C1 -= W^T. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < n; i++ { + for j := 0; j < k; j++ { + c[j*ldc+i] -= work[i*ldwork+j] + } + } + return + } + // Form C = C * H or C * H^T, where C = (C1 C2). + + // W = C1. + for i := 0; i < k; i++ { + bi.Dcopy(m, c[i:], ldc, work[i:], ldwork) + } + // W *= V1. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, m, k, + 1, v, ldv, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, k, n-k, + 1, c[k:], ldc, v[k*ldv:], ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Upper, trans, blas.NonUnit, m, k, + 1, t, ldt, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.Trans, m, n-k, k, + -1, work, ldwork, v[k*ldv:], ldv, + 1, c[k:], ldc) + } + // C -= W * V^T. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, m, k, + 1, v, ldv, + work, ldwork) + // C -= W. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + c[i*ldc+j] -= work[i*ldwork+j] + } + } + return + } + // V = (V1) + // = (V2) (last k rows) + // Where V2 is unit upper triangular. + if side == blas.Left { + // Form H * C or + // W = C^T V. + + // W = C2^T. + for j := 0; j < k; j++ { + bi.Dcopy(n, c[(m-k+j)*ldc:], 1, work[j:], ldwork) + } + // W *= V2. + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, n, k, + 1, v[(m-k)*ldv:], ldv, + work, ldwork) + if m > k { + // W += C1^T * V1. + bi.Dgemm(blas.Trans, blas.NoTrans, n, k, m-k, + 1, c, ldc, v, ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Lower, transt, blas.NonUnit, n, k, + 1, t, ldt, + work, ldwork) + // C -= V * W^T. + if m > k { + bi.Dgemm(blas.NoTrans, blas.Trans, m-k, n, k, + -1, v, ldv, work, ldwork, + 1, c, ldc) + } + // W *= V2^T. + bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, n, k, + 1, v[(m-k)*ldv:], ldv, + work, ldwork) + // C2 -= W^T. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < n; i++ { + for j := 0; j < k; j++ { + c[(m-k+j)*ldc+i] -= work[i*ldwork+j] + } + } + return + } + // Form C * H or C * H^T where C = (C1 C2). + // W = C * V. + + // W = C2. + for j := 0; j < k; j++ { + bi.Dcopy(m, c[n-k+j:], ldc, work[j:], ldwork) + } + + // W = W * V2. + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, m, k, + 1, v[(n-k)*ldv:], ldv, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, k, n-k, + 1, c, ldc, v, ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Lower, trans, blas.NonUnit, m, k, + 1, t, ldt, + work, ldwork) + // C -= W * V^T. + if n > k { + // C1 -= W * V1^T. + bi.Dgemm(blas.NoTrans, blas.Trans, m, n-k, k, + -1, work, ldwork, v, ldv, + 1, c, ldc) + } + // W *= V2^T. + bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, m, k, + 1, v[(n-k)*ldv:], ldv, + work, ldwork) + // C2 -= W. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + c[i*ldc+n-k+j] -= work[i*ldwork+j] + } + } + return + } + // Store = Rowwise. + if direct == lapack.Forward { + // V = (V1 V2) where v1 is unit upper triangular. + if side == blas.Left { + // Form H * C or H^T * C where C = (C1; C2). + // W = C^T * V^T. + + // W = C1^T. + for j := 0; j < k; j++ { + bi.Dcopy(n, c[j*ldc:], 1, work[j:], ldwork) + } + // W *= V1^T. + bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, n, k, + 1, v, ldv, + work, ldwork) + if m > k { + bi.Dgemm(blas.Trans, blas.Trans, n, k, m-k, + 1, c[k*ldc:], ldc, v[k:], ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Upper, transt, blas.NonUnit, n, k, + 1, t, ldt, + work, ldwork) + // C -= V^T * W^T. + if m > k { + bi.Dgemm(blas.Trans, blas.Trans, m-k, n, k, + -1, v[k:], ldv, work, ldwork, + 1, c[k*ldc:], ldc) + } + // W *= V1. + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, n, k, + 1, v, ldv, + work, ldwork) + // C1 -= W^T. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < n; i++ { + for j := 0; j < k; j++ { + c[j*ldc+i] -= work[i*ldwork+j] + } + } + return + } + // Form C * H or C * H^T where C = (C1 C2). + // W = C * V^T. + + // W = C1. + for j := 0; j < k; j++ { + bi.Dcopy(m, c[j:], ldc, work[j:], ldwork) + } + // W *= V1^T. + bi.Dtrmm(blas.Right, blas.Upper, blas.Trans, blas.Unit, m, k, + 1, v, ldv, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.Trans, m, k, n-k, + 1, c[k:], ldc, v[k:], ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Upper, trans, blas.NonUnit, m, k, + 1, t, ldt, + work, ldwork) + // C -= W * V. + if n > k { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n-k, k, + -1, work, ldwork, v[k:], ldv, + 1, c[k:], ldc) + } + // W *= V1. + bi.Dtrmm(blas.Right, blas.Upper, blas.NoTrans, blas.Unit, m, k, + 1, v, ldv, + work, ldwork) + // C1 -= W. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + c[i*ldc+j] -= work[i*ldwork+j] + } + } + return + } + // V = (V1 V2) where V2 is the last k columns and is lower unit triangular. + if side == blas.Left { + // Form H * C or H^T C where C = (C1 ; C2). + // W = C^T * V^T. + + // W = C2^T. + for j := 0; j < k; j++ { + bi.Dcopy(n, c[(m-k+j)*ldc:], 1, work[j:], ldwork) + } + // W *= V2^T. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, n, k, + 1, v[m-k:], ldv, + work, ldwork) + if m > k { + bi.Dgemm(blas.Trans, blas.Trans, n, k, m-k, + 1, c, ldc, v, ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Lower, transt, blas.NonUnit, n, k, + 1, t, ldt, + work, ldwork) + // C -= V^T * W^T. + if m > k { + bi.Dgemm(blas.Trans, blas.Trans, m-k, n, k, + -1, v, ldv, work, ldwork, + 1, c, ldc) + } + // W *= V2. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, n, k, + 1, v[m-k:], ldv, + work, ldwork) + // C2 -= W^T. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < n; i++ { + for j := 0; j < k; j++ { + c[(m-k+j)*ldc+i] -= work[i*ldwork+j] + } + } + return + } + // Form C * H or C * H^T where C = (C1 C2). + // W = C * V^T. + // W = C2. + for j := 0; j < k; j++ { + bi.Dcopy(m, c[n-k+j:], ldc, work[j:], ldwork) + } + // W *= V2^T. + bi.Dtrmm(blas.Right, blas.Lower, blas.Trans, blas.Unit, m, k, + 1, v[n-k:], ldv, + work, ldwork) + if n > k { + bi.Dgemm(blas.NoTrans, blas.Trans, m, k, n-k, + 1, c, ldc, v, ldv, + 1, work, ldwork) + } + // W *= T or T^T. + bi.Dtrmm(blas.Right, blas.Lower, trans, blas.NonUnit, m, k, + 1, t, ldt, + work, ldwork) + // C -= W * V. + if n > k { + bi.Dgemm(blas.NoTrans, blas.NoTrans, m, n-k, k, + -1, work, ldwork, v, ldv, + 1, c, ldc) + } + // W *= V2. + bi.Dtrmm(blas.Right, blas.Lower, blas.NoTrans, blas.Unit, m, k, + 1, v[n-k:], ldv, + work, ldwork) + // C1 -= W. + // TODO(btracey): This should use blas.Axpy. + for i := 0; i < m; i++ { + for j := 0; j < k; j++ { + c[i*ldc+n-k+j] -= work[i*ldwork+j] + } + } +} diff --git a/vendor/github.com/gonum/lapack/native/dlarfg.go b/vendor/github.com/gonum/lapack/native/dlarfg.go new file mode 100644 index 00000000..bd1edf6e --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlarfg.go @@ -0,0 +1,60 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas/blas64" +) + +// Dlarfg generates an elementary reflector for a Householder matrix. It creates +// a real elementary reflector of order n such that +// H * (alpha) = (beta) +// ( x) ( 0) +// H^T * H = I +// H is represented in the form +// H = 1 - tau * (1; v) * (1 v^T) +// where tau is a real scalar. +// +// On entry, x contains the vector x, on exit it contains v. +func (impl Implementation) Dlarfg(n int, alpha float64, x []float64, incX int) (beta, tau float64) { + if n < 0 { + panic(nLT0) + } + if n <= 1 { + return alpha, 0 + } + checkVector(n-1, x, incX) + bi := blas64.Implementation() + xnorm := bi.Dnrm2(n-1, x, incX) + if xnorm == 0 { + return alpha, 0 + } + beta = -math.Copysign(impl.Dlapy2(alpha, xnorm), alpha) + safmin := dlamchS / dlamchE + knt := 0 + if math.Abs(beta) < safmin { + // xnorm and beta may be innacurate, scale x and recompute. + rsafmn := 1 / safmin + for { + knt++ + bi.Dscal(n-1, rsafmn, x, incX) + beta *= rsafmn + alpha *= rsafmn + if math.Abs(beta) >= safmin { + break + } + } + xnorm = bi.Dnrm2(n-1, x, incX) + beta = -math.Copysign(impl.Dlapy2(alpha, xnorm), alpha) + } + tau = (beta - alpha) / beta + bi.Dscal(n-1, 1/(alpha-beta), x, incX) + for j := 0; j < knt; j++ { + beta *= safmin + } + return beta, tau +} diff --git a/vendor/github.com/gonum/lapack/native/dlarft.go b/vendor/github.com/gonum/lapack/native/dlarft.go new file mode 100644 index 00000000..f99d43d1 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlarft.go @@ -0,0 +1,148 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack" +) + +// Dlarft forms the triangular factor t of a block reflector, storing the answer +// in t. +// H = 1 - V * T * V^T if store == lapack.ColumnWise +// H = 1 - V^T * T * V if store == lapack.RowWise +// H is defined by a product of the elementary reflectors where +// H = H_1 * H_2 * ... * H_k if direct == lapack.Forward +// H = H_k * H_k-1 * ... * H_1 if direct == lapack.Backward +// +// t is a k×k triangular matrix. t is upper triangular if direct = lapack.Forward +// and lower triangular otherwise. This function will panic if t is not of +// sufficient size. +// +// store describes the storage of the elementary reflectors in v. Please see +// Dlarfb for a description of layout. +// +// tau contains the scalar factor of the elementary reflectors h. +func (Implementation) Dlarft(direct lapack.Direct, store lapack.StoreV, n, k int, + v []float64, ldv int, tau []float64, t []float64, ldt int) { + if n == 0 { + return + } + if n < 0 || k < 0 { + panic(negDimension) + } + if direct != lapack.Forward && direct != lapack.Backward { + panic(badDirect) + } + if store != lapack.RowWise && store != lapack.ColumnWise { + panic(badStore) + } + if len(tau) < k { + panic(badTau) + } + checkMatrix(k, k, t, ldt) + bi := blas64.Implementation() + // TODO(btracey): There are a number of minor obvious loop optimizations here. + // TODO(btracey): It may be possible to rearrange some of the code so that + // index of 1 is more common in the Dgemv. + if direct == lapack.Forward { + prevlastv := n - 1 + for i := 0; i < k; i++ { + prevlastv = max(i, prevlastv) + if tau[i] == 0 { + for j := 0; j <= i; j++ { + t[j*ldt+i] = 0 + } + continue + } + var lastv int + if store == lapack.ColumnWise { + // skip trailing zeros + for lastv = n - 1; lastv >= i+1; lastv-- { + if v[lastv*ldv+i] != 0 { + break + } + } + for j := 0; j < i; j++ { + t[j*ldt+i] = -tau[i] * v[i*ldv+j] + } + j := min(lastv, prevlastv) + bi.Dgemv(blas.Trans, j-i, i, + -tau[i], v[(i+1)*ldv:], ldv, v[(i+1)*ldv+i:], ldv, + 1, t[i:], ldt) + } else { + for lastv = n - 1; lastv >= i+1; lastv-- { + if v[i*ldv+lastv] != 0 { + break + } + } + for j := 0; j < i; j++ { + t[j*ldt+i] = -tau[i] * v[j*ldv+i] + } + j := min(lastv, prevlastv) + bi.Dgemv(blas.NoTrans, i, j-i, + -tau[i], v[i+1:], ldv, v[i*ldv+i+1:], 1, + 1, t[i:], ldt) + } + bi.Dtrmv(blas.Upper, blas.NoTrans, blas.NonUnit, i, t, ldt, t[i:], ldt) + t[i*ldt+i] = tau[i] + if i > 1 { + prevlastv = max(prevlastv, lastv) + } else { + prevlastv = lastv + } + } + return + } + prevlastv := 0 + for i := k - 1; i >= 0; i-- { + if tau[i] == 0 { + for j := i; j < k; j++ { + t[j*ldt+i] = 0 + } + continue + } + var lastv int + if i < k-1 { + if store == lapack.ColumnWise { + for lastv = 0; lastv < i; lastv++ { + if v[lastv*ldv+i] != 0 { + break + } + } + for j := i + 1; j < k; j++ { + t[j*ldt+i] = -tau[i] * v[(n-k+i)*ldv+j] + } + j := max(lastv, prevlastv) + bi.Dgemv(blas.Trans, n-k+i-j, k-i-1, + -tau[i], v[j*ldv+i+1:], ldv, v[j*ldv+i:], ldv, + 1, t[(i+1)*ldt+i:], ldt) + } else { + for lastv := 0; lastv < i; lastv++ { + if v[i*ldv+lastv] != 0 { + break + } + } + for j := i + 1; j < k; j++ { + t[j*ldt+i] = -tau[i] * v[j*ldv+n-k+i] + } + j := max(lastv, prevlastv) + bi.Dgemv(blas.NoTrans, k-i-1, n-k+i-j, + -tau[i], v[(i+1)*ldv+j:], ldv, v[i*ldv+j:], 1, + 1, t[(i+1)*ldt+i:], ldt) + } + bi.Dtrmv(blas.Lower, blas.NoTrans, blas.NonUnit, k-i-1, + t[(i+1)*ldt+i+1:], ldt, + t[(i+1)*ldt+i:], ldt) + if i > 0 { + prevlastv = min(prevlastv, lastv) + } else { + prevlastv = lastv + } + } + t[i*ldt+i] = tau[i] + } +} diff --git a/vendor/github.com/gonum/lapack/native/dlascl.go b/vendor/github.com/gonum/lapack/native/dlascl.go new file mode 100644 index 00000000..93245723 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlascl.go @@ -0,0 +1,72 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/lapack" +) + +// Dlascl multiplies a rectangular matrix by a scalar. +func (impl Implementation) Dlascl(kind lapack.MatrixType, kl, ku int, cfrom, cto float64, m, n int, a []float64, lda int) { + checkMatrix(m, n, a, lda) + if cfrom == 0 { + panic("dlascl: zero divisor") + } + if math.IsNaN(cfrom) || math.IsNaN(cto) { + panic("dlascl: NaN scale factor") + } + if n == 0 || m == 0 { + return + } + smlnum := dlamchS + bignum := 1 / smlnum + cfromc := cfrom + ctoc := cto + cfrom1 := cfromc * smlnum + for { + var done bool + var mul, ctol float64 + if cfrom1 == cfromc { + // cfromc is inf + mul = ctoc / cfromc + done = true + ctol = ctoc + } else { + ctol = ctoc / bignum + if ctol == ctoc { + // ctoc is either 0 or inf. + mul = ctoc + done = true + cfromc = 1 + } else if math.Abs(cfrom1) > math.Abs(ctoc) && ctoc != 0 { + mul = smlnum + done = false + cfromc = cfrom1 + } else if math.Abs(ctol) > math.Abs(cfromc) { + mul = bignum + done = false + ctoc = ctol + } else { + mul = ctoc / cfromc + done = true + } + } + switch kind { + default: + panic("lapack: not implemented") + case lapack.General: + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = a[i*lda+j] * mul + } + } + } + if done { + break + } + } +} diff --git a/vendor/github.com/gonum/lapack/native/dlaset.go b/vendor/github.com/gonum/lapack/native/dlaset.go new file mode 100644 index 00000000..33cfc438 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlaset.go @@ -0,0 +1,37 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dlaset sets the off-diagonal elements of a to alpha, and the diagonal elements +// of a to beta. If uplo == blas.Upper, only the upper diagonal elements are set. +// If uplo == blas.Lower, only the lower diagonal elements are set. If uplo is +// otherwise, all of the elements of a are set. +func (impl Implementation) Dlaset(uplo blas.Uplo, m, n int, alpha, beta float64, a []float64, lda int) { + checkMatrix(m, n, a, lda) + if uplo == blas.Upper { + for i := 0; i < m; i++ { + for j := i + 1; j < n; j++ { + a[i*lda+j] = alpha + } + } + } else if uplo == blas.Lower { + for i := 0; i < m; i++ { + for j := 0; j < i; j++ { + a[i*lda+j] = alpha + } + } + } else { + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + a[i*lda+j] = alpha + } + } + } + for i := 0; i < min(m, n); i++ { + a[i*lda+i] = beta + } +} diff --git a/vendor/github.com/gonum/lapack/native/dlassq.go b/vendor/github.com/gonum/lapack/native/dlassq.go new file mode 100644 index 00000000..7b98c700 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dlassq.go @@ -0,0 +1,29 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "math" + +// Dlassq updates a sum of squares in scaled form. The input parameters scale and +// sumsq represent the current scale and total sum of squares. These values are +// updated with the information in the first n elements of the vector specified +// by x and incX. +func (impl Implementation) Dlassq(n int, x []float64, incx int, scale float64, sumsq float64) (scl, smsq float64) { + if n <= 0 { + return scale, sumsq + } + for ix := 0; ix <= (n-1)*incx; ix += incx { + absxi := math.Abs(x[ix]) + if absxi > 0 || math.IsNaN(absxi) { + if scale < absxi { + sumsq = 1 + sumsq*(scale/absxi)*(scale/absxi) + scale = absxi + } else { + sumsq += (absxi / scale) * (absxi / scale) + } + } + } + return scale, sumsq +} diff --git a/vendor/github.com/gonum/lapack/native/doc.go b/vendor/github.com/gonum/lapack/native/doc.go new file mode 100644 index 00000000..d622dc50 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/doc.go @@ -0,0 +1,28 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package native is a pure-go implementation of the LAPACK API. The LAPACK API defines +// a set of algorithms for advanced matrix operations. +// +// The function definitions and implementations follow that of the netlib reference +// implementation. Please see http://www.netlib.org/lapack/explore-html/ for more +// information, and http://www.netlib.org/lapack/explore-html/d4/de1/_l_i_c_e_n_s_e_source.html +// for more license information. +// +// Slice function arguments frequently represent vectors and matrices. The data +// layout is identical to that found in https://godoc.org/github.com/gonum/blas/native. +// +// Most LAPACK functions are built on top the routines defined in the BLAS API, +// and as such the computation time for many LAPACK functions is +// dominated by BLAS calls. Here, BLAS is accessed through the +// the blas64 package (https://godoc.org/github.com/gonum/blas/blas64). In particular, +// this implies that an external BLAS library will be used if it is +// registered in blas64. +// +// The full LAPACK capability has not been implemented at present. The full +// API is very large, containing approximately 200 functions for double precision +// alone. Future additions will be focused on supporting the gonum matrix +// package (https://godoc.org/github.com/gonum/matrix/mat64), though pull requests +// with implementations and tests for LAPACK function are encouraged. +package native diff --git a/vendor/github.com/gonum/lapack/native/dorm2r.go b/vendor/github.com/gonum/lapack/native/dorm2r.go new file mode 100644 index 00000000..031480a7 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dorm2r.go @@ -0,0 +1,86 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dorm2r multiplies a general matrix c by an orthogonal matrix from a QR factorization +// determined by Dgeqrf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, a is a matrix of size m×k, and if side == blas.Right +// a is of size n×k. +// +// Tau contains the householder factors and is of length at least k and this function +// will panic otherwise. +// +// Work is temporary storage of length at least n if side == blas.Left +// and at least m if side == blas.Right and this function will panic otherwise. +func (impl Implementation) Dorm2r(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + + left := side == blas.Left + notran := trans == blas.NoTrans + if left { + // Q is m x m + checkMatrix(m, k, a, lda) + if len(work) < n { + panic(badWork) + } + } else { + // Q is n x n + checkMatrix(n, k, a, lda) + if len(work) < m { + panic(badWork) + } + } + checkMatrix(m, n, c, ldc) + if m == 0 || n == 0 || k == 0 { + return + } + if len(tau) < k { + panic(badTau) + } + if left { + if notran { + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m-i, n, a[i*lda+i:], lda, tau[i], c[i*ldc:], ldc, work) + a[i*lda+i] = aii + } + return + } + for i := 0; i < k; i++ { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m-i, n, a[i*lda+i:], lda, tau[i], c[i*ldc:], ldc, work) + a[i*lda+i] = aii + } + return + } + if notran { + for i := 0; i < k; i++ { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m, n-i, a[i*lda+i:], lda, tau[i], c[i:], ldc, work) + a[i*lda+i] = aii + } + return + } + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m, n-i, a[i*lda+i:], lda, tau[i], c[i:], ldc, work) + a[i*lda+i] = aii + } +} diff --git a/vendor/github.com/gonum/lapack/native/dorml2.go b/vendor/github.com/gonum/lapack/native/dorml2.go new file mode 100644 index 00000000..9d1585cd --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dorml2.go @@ -0,0 +1,83 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import "github.com/gonum/blas" + +// Dorml2 multiplies a general matrix c by an orthogonal matrix from an LQ factorization +// determined by Dgelqf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, a is a matrix of side k×m, and if side == blas.Right +// a is of size k×n. +// +// +// Tau contains the householder factors and is of length at least k and this function will +// panic otherwise. +// +// Work is temporary storage of length at least n if side == blas.Left +// and at least m if side == blas.Right and this function will panic otherwise. +func (impl Implementation) Dorml2(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + + left := side == blas.Left + notran := trans == blas.NoTrans + if left { + checkMatrix(k, m, a, lda) + if len(work) < n { + panic(badWork) + } + } else { + checkMatrix(k, n, a, lda) + if len(work) < m { + panic(badWork) + } + } + checkMatrix(m, n, c, ldc) + if m == 0 || n == 0 || k == 0 { + return + } + switch { + case left && notran: + for i := 0; i < k; i++ { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m-i, n, a[i*lda+i:], 1, tau[i], c[i*ldc:], ldc, work) + a[i*lda+i] = aii + } + return + case left && !notran: + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m-i, n, a[i*lda+i:], 1, tau[i], c[i*ldc:], ldc, work) + a[i*lda+i] = aii + } + return + case !left && notran: + for i := k - 1; i >= 0; i-- { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m, n-i, a[i*lda+i:], 1, tau[i], c[i:], ldc, work) + a[i*lda+i] = aii + } + return + case !left && !notran: + for i := 0; i < k; i++ { + aii := a[i*lda+i] + a[i*lda+i] = 1 + impl.Dlarf(side, m, n-i, a[i*lda+i:], 1, tau[i], c[i:], ldc, work) + a[i*lda+i] = aii + } + return + } +} diff --git a/vendor/github.com/gonum/lapack/native/dormlq.go b/vendor/github.com/gonum/lapack/native/dormlq.go new file mode 100644 index 00000000..4d3cedf6 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dormlq.go @@ -0,0 +1,155 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dormlq multiplies the matrix c by the othogonal matrix q defined by the +// slices a and tau. A and tau are as returned from Dgelqf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, a is a matrix of side k×m, and if side == blas.Right +// a is of size k×n. This uses a blocked algorithm. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m if side == blas.Left and lwork >= n if side == blas.Right, +// and this function will panic otherwise. +// Dormlq uses a block algorithm, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dormlq, +// the optimal work length will be stored into work[0]. +// +// Tau contains the householder scales and must have length at least k, and +// this function will panic otherwise. +func (impl Implementation) Dormlq(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + if side != blas.Left && side != blas.Right { + panic(badSide) + } + if trans != blas.Trans && trans != blas.NoTrans { + panic(badTrans) + } + left := side == blas.Left + notran := trans == blas.NoTrans + if left { + checkMatrix(k, m, a, lda) + } else { + checkMatrix(k, n, a, lda) + } + checkMatrix(m, n, c, ldc) + if len(tau) < k { + panic(badTau) + } + + const nbmax = 64 + nw := n + if !left { + nw = m + } + opts := string(side) + string(trans) + nb := min(nbmax, impl.Ilaenv(1, "DORMLQ", opts, m, n, k, -1)) + lworkopt := max(1, nw) * nb + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + if left { + if lwork < n { + panic(badWork) + } + } else { + if lwork < m { + panic(badWork) + } + } + + if m == 0 || n == 0 || k == 0 { + return + } + nbmin := 2 + + ldwork := nb + if nb > 1 && nb < k { + iws := nw * nb + if lwork < iws { + nb = lwork / nw + nbmin = max(2, impl.Ilaenv(2, "DORMLQ", opts, m, n, k, -1)) + } + } + if nb < nbmin || nb >= k { + // Call unblocked code + impl.Dorml2(side, trans, m, n, k, a, lda, tau, c, ldc, work) + return + } + ldt := nb + t := make([]float64, nb*ldt) + + transt := blas.NoTrans + if notran { + transt = blas.Trans + } + + switch { + case left && notran: + for i := 0; i < k; i += nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.RowWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, transt, lapack.Forward, lapack.RowWise, m-i, n, ib, + a[i*lda+i:], lda, + t, ldt, + c[i*ldc:], ldc, + work, ldwork) + } + return + case left && !notran: + for i := ((k - 1) / nb) * nb; i >= 0; i -= nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.RowWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, transt, lapack.Forward, lapack.RowWise, m-i, n, ib, + a[i*lda+i:], lda, + t, ldt, + c[i*ldc:], ldc, + work, ldwork) + } + return + case !left && notran: + for i := ((k - 1) / nb) * nb; i >= 0; i -= nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.RowWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, transt, lapack.Forward, lapack.RowWise, m, n-i, ib, + a[i*lda+i:], lda, + t, ldt, + c[i:], ldc, + work, ldwork) + } + return + case !left && !notran: + for i := 0; i < k; i += nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.RowWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, transt, lapack.Forward, lapack.RowWise, m, n-i, ib, + a[i*lda+i:], lda, + t, ldt, + c[i:], ldc, + work, ldwork) + } + return + } +} diff --git a/vendor/github.com/gonum/lapack/native/dormqr.go b/vendor/github.com/gonum/lapack/native/dormqr.go new file mode 100644 index 00000000..5d005f11 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dormqr.go @@ -0,0 +1,139 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/lapack" +) + +// Dormqr multiplies the matrix c by the othogonal matrix q defined by the +// slices a and tau. A and tau are as returned from Dgeqrf. +// C = Q * C if side == blas.Left and trans == blas.NoTrans +// C = Q^T * C if side == blas.Left and trans == blas.Trans +// C = C * Q if side == blas.Right and trans == blas.NoTrans +// C = C * Q^T if side == blas.Right and trans == blas.Trans +// If side == blas.Left, a is a matrix of side k×m, and if side == blas.Right +// a is of size k×n. This uses a blocked algorithm. +// +// Work is temporary storage, and lwork specifies the usable memory length. +// At minimum, lwork >= m if side == blas.Left and lwork >= n if side == blas.Right, +// and this function will panic otherwise. +// Dormqr uses a block algorithm, but the block size is limited +// by the temporary space available. If lwork == -1, instead of performing Dormqr, +// the optimal work length will be stored into work[0]. +// +// Tau contains the householder scales and must have length at least k, and +// this function will panic otherwise. +func (impl Implementation) Dormqr(side blas.Side, trans blas.Transpose, m, n, k int, a []float64, lda int, tau, c []float64, ldc int, work []float64, lwork int) { + left := side == blas.Left + notran := trans == blas.NoTrans + if left { + checkMatrix(m, k, a, lda) + } else { + checkMatrix(n, k, a, lda) + } + checkMatrix(m, n, c, ldc) + + const nbmax = 64 + nw := n + if side == blas.Right { + nw = m + } + opts := string(side) + string(trans) + nb := min(nbmax, impl.Ilaenv(1, "DORMQR", opts, m, n, k, -1)) + lworkopt := max(1, nw) * nb + if lwork == -1 { + work[0] = float64(lworkopt) + return + } + if left { + if lwork < n { + panic(badWork) + } + } else { + if lwork < m { + panic(badWork) + } + } + if m == 0 || n == 0 || k == 0 { + return + } + nbmin := 2 + + ldwork := nb + if nb > 1 && nb < k { + iws := nw * nb + if lwork < iws { + nb = lwork / nw + nbmin = max(2, impl.Ilaenv(2, "DORMQR", opts, m, n, k, -1)) + } + } + if nb < nbmin || nb >= k { + // Call unblocked code + impl.Dorm2r(side, trans, m, n, k, a, lda, tau, c, ldc, work) + return + } + ldt := nb + t := make([]float64, nb*ldt) + switch { + case left && notran: + for i := ((k - 1) / nb) * nb; i >= 0; i -= nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.ColumnWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, trans, lapack.Forward, lapack.ColumnWise, m-i, n, ib, + a[i*lda+i:], lda, + t, ldt, + c[i*ldc:], ldc, + work, ldwork) + } + return + case left && !notran: + for i := 0; i < k; i += nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.ColumnWise, m-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, trans, lapack.Forward, lapack.ColumnWise, m-i, n, ib, + a[i*lda+i:], lda, + t, ldt, + c[i*ldc:], ldc, + work, ldwork) + } + return + case !left && notran: + for i := 0; i < k; i += nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.ColumnWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, trans, lapack.Forward, lapack.ColumnWise, m, n-i, ib, + a[i*lda+i:], lda, + t, ldt, + c[i:], ldc, + work, ldwork) + } + return + case !left && !notran: + for i := ((k - 1) / nb) * nb; i >= 0; i -= nb { + ib := min(nb, k-i) + impl.Dlarft(lapack.Forward, lapack.ColumnWise, n-i, ib, + a[i*lda+i:], lda, + tau[i:], + t, ldt) + impl.Dlarfb(side, trans, lapack.Forward, lapack.ColumnWise, m, n-i, ib, + a[i*lda+i:], lda, + t, ldt, + c[i:], ldc, + work, ldwork) + } + return + } +} diff --git a/vendor/github.com/gonum/lapack/native/dpotf2.go b/vendor/github.com/gonum/lapack/native/dpotf2.go new file mode 100644 index 00000000..9ad612ef --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dpotf2.go @@ -0,0 +1,73 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dpotf2 computes the cholesky decomposition of the symmetric positive definite +// matrix a. If ul == blas.Upper, then a is stored as an upper-triangular matrix, +// and a = U^T U is stored in place into a. If ul == blas.Lower, then a = L L^T +// is computed and stored in-place into a. If a is not positive definite, false +// is returned. This is the unblocked version of the algorithm. +func (Implementation) Dpotf2(ul blas.Uplo, n int, a []float64, lda int) (ok bool) { + if ul != blas.Upper && ul != blas.Lower { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if lda < n { + panic(badLdA) + } + if n == 0 { + return true + } + bi := blas64.Implementation() + if ul == blas.Upper { + for j := 0; j < n; j++ { + ajj := a[j*lda+j] + if j != 0 { + ajj -= bi.Ddot(j, a[j:], lda, a[j:], lda) + } + if ajj <= 0 || math.IsNaN(ajj) { + a[j*lda+j] = ajj + return false + } + ajj = math.Sqrt(ajj) + a[j*lda+j] = ajj + if j < n-1 { + bi.Dgemv(blas.Trans, j, n-j-1, + -1, a[j+1:], lda, a[j:], lda, + 1, a[j*lda+j+1:], 1) + bi.Dscal(n-j-1, 1/ajj, a[j*lda+j+1:], 1) + } + } + return true + } + for j := 0; j < n; j++ { + ajj := a[j*lda+j] + if j != 0 { + ajj -= bi.Ddot(j, a[j*lda:], 1, a[j*lda:], 1) + } + if ajj <= 0 || math.IsNaN(ajj) { + a[j*lda+j] = ajj + return false + } + ajj = math.Sqrt(ajj) + a[j*lda+j] = ajj + if j < n-1 { + bi.Dgemv(blas.NoTrans, n-j-1, j, + -1, a[(j+1)*lda:], lda, a[j*lda:], 1, + 1, a[(j+1)*lda+j:], lda) + bi.Dscal(n-j-1, 1/ajj, a[(j+1)*lda+j:], lda) + } + } + return true +} diff --git a/vendor/github.com/gonum/lapack/native/dpotrf.go b/vendor/github.com/gonum/lapack/native/dpotrf.go new file mode 100644 index 00000000..4062b902 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dpotrf.go @@ -0,0 +1,75 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dpotrf computes the cholesky decomposition of the symmetric positive definite +// matrix a. If ul == blas.Upper, then a is stored as an upper-triangular matrix, +// and a = U U^T is stored in place into a. If ul == blas.Lower, then a = L L^T +// is computed and stored in-place into a. If a is not positive definite, false +// is returned. This is the blocked version of the algorithm. +func (impl Implementation) Dpotrf(ul blas.Uplo, n int, a []float64, lda int) (ok bool) { + bi := blas64.Implementation() + if ul != blas.Upper && ul != blas.Lower { + panic(badUplo) + } + if n < 0 { + panic(nLT0) + } + if lda < n { + panic(badLdA) + } + if n == 0 { + return true + } + nb := impl.Ilaenv(1, "DPOTRF", string(ul), n, -1, -1, -1) + if n <= nb { + return impl.Dpotf2(ul, n, a, lda) + } + if ul == blas.Upper { + for j := 0; j < n; j += nb { + jb := min(nb, n-j) + bi.Dsyrk(blas.Upper, blas.Trans, jb, j, + -1, a[j:], lda, + 1, a[j*lda+j:], lda) + ok = impl.Dpotf2(blas.Upper, jb, a[j*lda+j:], lda) + if !ok { + return ok + } + if j+jb < n { + bi.Dgemm(blas.Trans, blas.NoTrans, jb, n-j-jb, j, + -1, a[j:], lda, a[j+jb:], lda, + 1, a[j*lda+j+jb:], lda) + bi.Dtrsm(blas.Left, blas.Upper, blas.Trans, blas.NonUnit, jb, n-j-jb, + 1, a[j*lda+j:], lda, + a[j*lda+j+jb:], lda) + } + } + return true + } + for j := 0; j < n; j += nb { + jb := min(nb, n-j) + bi.Dsyrk(blas.Lower, blas.NoTrans, jb, j, + -1, a[j*lda:], lda, + 1, a[j*lda+j:], lda) + ok := impl.Dpotf2(blas.Lower, jb, a[j*lda+j:], lda) + if !ok { + return ok + } + if j+jb < n { + bi.Dgemm(blas.NoTrans, blas.Trans, n-j-jb, jb, j, + -1, a[(j+jb)*lda:], lda, a[j*lda:], lda, + 1, a[(j+jb)*lda+j:], lda) + bi.Dtrsm(blas.Right, blas.Lower, blas.Trans, blas.NonUnit, n-j-jb, jb, + 1, a[j*lda+j:], lda, + a[(j+jb)*lda+j:], lda) + } + } + return true +} diff --git a/vendor/github.com/gonum/lapack/native/dtrtrs.go b/vendor/github.com/gonum/lapack/native/dtrtrs.go new file mode 100644 index 00000000..d6cb8d2d --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/dtrtrs.go @@ -0,0 +1,31 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Dtrtrs solves a triangular system of the form a * x = b or a^T * x = b. Dtrtrs +// checks for singularity in a. If a is singular, false is returned and no solve +// is performed. True is returned otherwise. +func (impl Implementation) Dtrtrs(uplo blas.Uplo, trans blas.Transpose, diag blas.Diag, n, nrhs int, a []float64, lda int, b []float64, ldb int) (ok bool) { + nounit := diag == blas.NonUnit + if n == 0 { + return false + } + // Check for singularity. + if nounit { + for i := 0; i < n; i++ { + if a[i*lda+i] == 0 { + return false + } + } + } + bi := blas64.Implementation() + bi.Dtrsm(blas.Left, uplo, trans, diag, n, nrhs, 1, a, lda, b, ldb) + return true +} diff --git a/vendor/github.com/gonum/lapack/native/general.go b/vendor/github.com/gonum/lapack/native/general.go new file mode 100644 index 00000000..e42b9a2f --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/general.go @@ -0,0 +1,92 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +import ( + "math" + + "github.com/gonum/lapack" +) + +// Implementation is the native Go implementation of LAPACK routines. It +// is built on top of calls to the return of blas64.Implementation(), so while +// this code is in pure Go, the underlying BLAS implementation may not be. +type Implementation struct{} + +var _ lapack.Float64 = Implementation{} + +const ( + badDirect = "lapack: bad direct" + badLdA = "lapack: index of a out of range" + badSide = "lapack: bad side" + badStore = "lapack: bad store" + badTau = "lapack: tau has insufficient length" + badTrans = "lapack: bad trans" + badUplo = "lapack: illegal triangle" + badWork = "lapack: insufficient working memory" + badWorkStride = "lapack: insufficient working array stride" + negDimension = "lapack: negative matrix dimension" + nLT0 = "lapack: n < 0" + shortWork = "lapack: working array shorter than declared" +) + +// checkMatrix verifies the parameters of a matrix input. +func checkMatrix(m, n int, a []float64, lda int) { + if m < 0 { + panic("lapack: has negative number of rows") + } + if m < 0 { + panic("lapack: has negative number of columns") + } + if lda < n { + panic("lapack: stride less than number of columns") + } + if len(a) < (m-1)*lda+n { + panic("lapack: insufficient matrix slice length") + } +} + +func checkVector(n int, v []float64, inc int) { + if n < 0 { + panic("lapack: negative matrix length") + } + if (inc > 0 && (n-1)*inc >= len(v)) || (inc < 0 && (1-n)*inc >= len(v)) { + panic("lapack: insufficient vector slice length") + } +} + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +// dlamch is a function in fortran, but since go forces IEEE-754 these are all +// fixed values. Probably a way to get them as constants. +// TODO(btracey): Is there a better way to find the smallest number such that 1+E > 1 + +var dlamchE, dlamchS, dlamchP float64 + +func init() { + onePlusEps := math.Nextafter(1, math.Inf(1)) + eps := (math.Nextafter(1, math.Inf(1)) - 1) * 0.5 + dlamchE = eps + sfmin := math.SmallestNonzeroFloat64 + small := 1 / math.MaxFloat64 + if small >= sfmin { + sfmin = small * onePlusEps + } + dlamchS = sfmin + radix := 2.0 + dlamchP = radix * eps +} diff --git a/vendor/github.com/gonum/lapack/native/iladlc.go b/vendor/github.com/gonum/lapack/native/iladlc.go new file mode 100644 index 00000000..75b8caf0 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/iladlc.go @@ -0,0 +1,31 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +// Iladlc scans a matrix for its last non-zero column. Returns -1 if the matrix +// is all zeros. +func (Implementation) Iladlc(m, n int, a []float64, lda int) int { + if n == 0 || m == 0 { + return n - 1 + } + checkMatrix(m, n, a, lda) + + // Test common case where corner is non-zero. + if a[n-1] != 0 || a[(m-1)*lda+(n-1)] != 0 { + return n - 1 + } + + // Scan each row tracking the highest column seen. + highest := -1 + for i := 0; i < m; i++ { + for j := n - 1; j >= 0; j-- { + if a[i*lda+j] != 0 { + highest = max(highest, j) + break + } + } + } + return highest +} diff --git a/vendor/github.com/gonum/lapack/native/iladlr.go b/vendor/github.com/gonum/lapack/native/iladlr.go new file mode 100644 index 00000000..6862e158 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/iladlr.go @@ -0,0 +1,28 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +// Iladlr scans a matrix for its last non-zero row. Returns -1 if the matrix +// is all zeros. +func (Implementation) Iladlr(m, n int, a []float64, lda int) int { + if m == 0 { + return m - 1 + } + + checkMatrix(m, n, a, lda) + + // Check the common case where the corner is non-zero + if a[(m-1)*lda] != 0 || a[(m-1)*lda+n-1] != 0 { + return m - 1 + } + for i := m - 1; i >= 0; i-- { + for j := 0; j < n; j++ { + if a[i*lda+j] != 0 { + return i + } + } + } + return -1 +} diff --git a/vendor/github.com/gonum/lapack/native/ilaenv.go b/vendor/github.com/gonum/lapack/native/ilaenv.go new file mode 100644 index 00000000..b420dbf1 --- /dev/null +++ b/vendor/github.com/gonum/lapack/native/ilaenv.go @@ -0,0 +1,375 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package native + +// Ilaenv returns algorithm tuning parameters for the algorithm given by the +// input string. ispec specifies the parameter to return. +// 1: The optimal block size +// 2: The minimum block size for which the algorithm should be used. +// 3: The crossover point below which an unblocked routine should be used. +// 4: The number of shifts. +// 5: The minumum column dimension for blocking to be used. +// 6: The crossover point for SVD (to use QR factorization or not). +// 7: The number of processors. +// 8: The crossover point for multishift in QR and QZ methods for nonsymmetric eigenvalue problems. +// 9: Maximum size of the subproblems in divide-and-conquer algorithms. +// 10: ieee NaN arithmetic can be trusted not to trap. +// 11: infinity arithmetic can be trusted not to trap. +func (Implementation) Ilaenv(ispec int, s string, opts string, n1, n2, n3, n4 int) int { + // TODO(btracey): Replace this with a constant lookup? A list of constants? + // TODO: What is the difference between 2 and 3? + sname := s[0] == 'S' || s[0] == 'D' + cname := s[0] == 'C' || s[0] == 'Z' + if !sname && !cname { + panic("lapack: bad name") + } + c2 := s[1:3] + c3 := s[3:6] + c4 := c3[1:3] + + switch ispec { + default: + panic("lapack: bad ispec") + case 1: + switch c2 { + default: + panic("lapack: bad function name") + case "GE": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + return 64 + } + return 64 + case "QRF", "RQF", "LQF", "QLF": + if sname { + return 32 + } + return 32 + case "HRD": + if sname { + return 32 + } + return 32 + case "BRD": + if sname { + return 32 + } + return 32 + case "TRI": + if sname { + return 64 + } + return 64 + } + case "PO": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + return 64 + } + return 64 + } + case "SY": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + return 64 + } + return 64 + case "TRD": + return 32 + case "GST": + return 64 + } + case "HE": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + return 64 + case "TRD": + return 32 + case "GST": + return 64 + } + case "OR": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c3[1:] { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 32 + } + case 'M': + switch c3[1:] { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 32 + } + } + case "UN": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c3[1:] { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 32 + } + case 'M': + switch c3[1:] { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 32 + } + } + case "GB": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + if n4 <= 64 { + return 1 + } + return 32 + } + if n4 <= 64 { + return 1 + } + return 32 + } + case "PB": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + if n4 <= 64 { + return 1 + } + return 32 + } + if n4 <= 64 { + return 1 + } + return 32 + } + case "TR": + switch c3 { + default: + panic("lapack: bad function name") + case "TRI": + if sname { + return 64 + } + return 64 + } + case "LA": + switch c3 { + default: + panic("lapack: bad function name") + case "UUM": + if sname { + return 64 + } + return 64 + } + case "ST": + if sname && c3 == "EBZ" { + return 1 + } + panic("lapack: bad function name") + } + case 2: + switch c2 { + default: + panic("lapack: bad function name") + case "GE": + switch c3 { + default: + panic("lapack: bad function name") + case "QRF", "RQF", "LQF", "QLF": + if sname { + return 2 + } + return 2 + case "HRD": + if sname { + return 2 + } + return 2 + case "BRD": + if sname { + return 2 + } + return 2 + case "TRI": + if sname { + return 2 + } + return 2 + } + case "SY": + switch c3 { + default: + panic("lapack: bad function name") + case "TRF": + if sname { + return 8 + } + return 8 + case "TRD": + if sname { + return 2 + } + panic("lapack: bad function name") + } + case "HE": + if c3 == "TRD" { + return 2 + } + panic("lapack: bad function name") + case "OR": + if !sname { + panic("lapack: bad function name") + } + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 2 + } + case 'M': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 2 + } + } + case "UN": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 2 + } + case 'M': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 2 + } + } + } + case 3: + switch c2 { + default: + panic("lapack: bad function name") + case "GE": + switch c3 { + default: + panic("lapack: bad function name") + case "QRF", "RQF", "LQF", "QLF": + if sname { + return 128 + } + return 128 + case "HRD": + if sname { + return 128 + } + return 128 + case "BRD": + if sname { + return 128 + } + return 128 + } + case "SY": + if sname && c3 == "TRD" { + return 32 + } + panic("lapack: bad function name") + case "HE": + if c3 == "TRD" { + return 32 + } + panic("lapack: bad function name") + case "OR": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 128 + } + } + case "UN": + switch c3[0] { + default: + panic("lapack: bad function name") + case 'G': + switch c4 { + default: + panic("lapack: bad function name") + case "QR", "RQ", "LQ", "QL", "HR", "TR", "BR": + return 128 + } + } + } + case 4: + // Used by xHSEQR + return 6 + case 5: + // Not used + return 2 + case 6: + // Used by xGELSS and xGESVD + return min(n1, n2) * 1e6 + case 7: + // Not used + return 1 + case 8: + // Used by xHSEQR + return 50 + case 9: + // used by xGELSD and xGESDD + return 25 + case 10: + // Go guarantees ieee + return 1 + case 11: + // Go guarantees ieee + return 1 + } +} diff --git a/vendor/github.com/gonum/matrix/mat64/cholesky.go b/vendor/github.com/gonum/matrix/mat64/cholesky.go new file mode 100644 index 00000000..1b69b05a --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/cholesky.go @@ -0,0 +1,140 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// Based on the CholeskyDecomposition class from Jama 1.0.3. + +package mat64 + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" + "github.com/gonum/lapack/lapack64" +) + +const badTriangle = "mat64: invalid triangle" + +// Cholesky calculates the Cholesky decomposition of the matrix A and returns +// whether the matrix is positive definite. The returned matrix is either a +// lower triangular matrix such that A = L * L^T or an upper triangular matrix +// such that A = U^T * U depending on the upper parameter. +func (t *TriDense) Cholesky(a Symmetric, upper bool) (ok bool) { + n := a.Symmetric() + if t.isZero() { + t.mat = blas64.Triangular{ + N: n, + Stride: n, + Diag: blas.NonUnit, + Data: use(t.mat.Data, n*n), + } + if upper { + t.mat.Uplo = blas.Upper + } else { + t.mat.Uplo = blas.Lower + } + } else { + if n != t.mat.N { + panic(ErrShape) + } + if (upper && t.mat.Uplo != blas.Upper) || (!upper && t.mat.Uplo != blas.Lower) { + panic(ErrTriangle) + } + } + copySymIntoTriangle(t, a) + + // Potrf modifies the data in place + _, ok = lapack64.Potrf( + blas64.Symmetric{ + N: t.mat.N, + Stride: t.mat.Stride, + Data: t.mat.Data, + Uplo: t.mat.Uplo, + }) + return ok +} + +// SolveCholesky finds the matrix m that solves A * m = b where A = L * L^T or +// A = U^T * U, and U or L are represented by t, placing the result in the +// receiver. +func (m *Dense) SolveCholesky(t Triangular, b Matrix) { + _, n := t.Dims() + bm, bn := b.Dims() + if n != bm { + panic(ErrShape) + } + + m.reuseAs(bm, bn) + if b != m { + m.Copy(b) + } + + // TODO(btracey): Implement an algorithm that doesn't require a copy into + // a blas64.Triangular. + ta := getBlasTriangular(t) + + switch ta.Uplo { + case blas.Upper: + blas64.Trsm(blas.Left, blas.Trans, 1, ta, m.mat) + blas64.Trsm(blas.Left, blas.NoTrans, 1, ta, m.mat) + case blas.Lower: + blas64.Trsm(blas.Left, blas.NoTrans, 1, ta, m.mat) + blas64.Trsm(blas.Left, blas.Trans, 1, ta, m.mat) + default: + panic(badTriangle) + } +} + +// SolveCholeskyVec finds the vector v that solves A * v = b where A = L * L^T or +// A = U^T * U, and U or L are represented by t, placing the result in the +// receiver. +func (v *Vector) SolveCholeskyVec(t Triangular, b *Vector) { + _, n := t.Dims() + vn := b.Len() + if vn != n { + panic(ErrShape) + } + v.reuseAs(n) + if v != b { + v.CopyVec(b) + } + ta := getBlasTriangular(t) + switch ta.Uplo { + case blas.Upper: + blas64.Trsv(blas.Trans, ta, v.mat) + blas64.Trsv(blas.NoTrans, ta, v.mat) + case blas.Lower: + blas64.Trsv(blas.NoTrans, ta, v.mat) + blas64.Trsv(blas.Trans, ta, v.mat) + default: + panic(badTriangle) + } +} + +// SolveTri finds the matrix x that solves op(A) * X = B where A is a triangular +// matrix and op is specified by trans. +func (m *Dense) SolveTri(a Triangular, trans bool, b Matrix) { + n, _ := a.Triangle() + bm, bn := b.Dims() + if n != bm { + panic(ErrShape) + } + + m.reuseAs(bm, bn) + if b != m { + m.Copy(b) + } + + // TODO(btracey): Implement an algorithm that doesn't require a copy into + // a blas64.Triangular. + ta := getBlasTriangular(a) + + t := blas.NoTrans + if trans { + t = blas.Trans + } + switch ta.Uplo { + case blas.Upper, blas.Lower: + blas64.Trsm(blas.Left, t, 1, ta, m.mat) + default: + panic(badTriangle) + } +} diff --git a/vendor/github.com/gonum/matrix/mat64/dense.go b/vendor/github.com/gonum/matrix/mat64/dense.go new file mode 100644 index 00000000..50ed79d2 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/dense.go @@ -0,0 +1,646 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mat64 + +import ( + "bytes" + "encoding/binary" + + "github.com/gonum/blas/blas64" +) + +var ( + matrix *Dense + + _ Matrix = matrix + _ Mutable = matrix + _ Vectorer = matrix + _ VectorSetter = matrix + + _ Cloner = matrix + _ Viewer = matrix + _ RowViewer = matrix + _ ColViewer = matrix + _ RawRowViewer = matrix + _ Grower = matrix + + _ Adder = matrix + _ Suber = matrix + _ Muler = matrix + _ Dotter = matrix + _ ElemMuler = matrix + _ ElemDiver = matrix + _ Exper = matrix + + _ Scaler = matrix + _ Applyer = matrix + + _ TransposeCopier = matrix + // _ TransposeViewer = matrix + + _ Tracer = matrix + _ Normer = matrix + _ Sumer = matrix + + _ Uer = matrix + _ Ler = matrix + + _ Stacker = matrix + _ Augmenter = matrix + + _ Equaler = matrix + _ ApproxEqualer = matrix + + _ RawMatrixSetter = matrix + _ RawMatrixer = matrix + + _ Reseter = matrix +) + +// Dense is a dense matrix representation. +type Dense struct { + mat blas64.General + + capRows, capCols int +} + +// NewDense creates a new matrix of type Dense with dimensions r and c. +// If the mat argument is nil, a new data slice is allocated. +// +// The data must be arranged in row-major order, i.e. the (i*c + j)-th +// element in mat is the {i, j}-th element in the matrix. +func NewDense(r, c int, mat []float64) *Dense { + if mat != nil && r*c != len(mat) { + panic(ErrShape) + } + if mat == nil { + mat = make([]float64, r*c) + } + return &Dense{ + mat: blas64.General{ + Rows: r, + Cols: c, + Stride: c, + Data: mat, + }, + capRows: r, + capCols: c, + } +} + +// reuseAs resizes an empty matrix to a r×c matrix, +// or checks that a non-empty matrix is r×c. +func (m *Dense) reuseAs(r, c int) { + if m.mat.Rows > m.capRows || m.mat.Cols > m.capCols { + // Panic as a string, not a mat64.Error. + panic("mat64: caps not correctly set") + } + if m.isZero() { + m.mat = blas64.General{ + Rows: r, + Cols: c, + Stride: c, + Data: use(m.mat.Data, r*c), + } + m.capRows = r + m.capCols = c + return + } + if r != m.mat.Rows || c != m.mat.Cols { + panic(ErrShape) + } +} + +func (m *Dense) isZero() bool { + // It must be the case that m.Dims() returns + // zeros in this case. See comment in Reset(). + return m.mat.Stride == 0 +} + +// DenseCopyOf returns a newly allocated copy of the elements of a. +func DenseCopyOf(a Matrix) *Dense { + d := &Dense{} + d.Clone(a) + return d +} + +// SetRawMatrix sets the underlying blas64.General used by the receiver. +// Changes to elements in the receiver following the call will be reflected +// in b. +func (m *Dense) SetRawMatrix(b blas64.General) { + m.capRows, m.capCols = b.Rows, b.Cols + m.mat = b +} + +// RawMatrix returns the underlying blas64.General used by the receiver. +// Changes to elements in the receiver following the call will be reflected +// in returned blas64.General. +func (m *Dense) RawMatrix() blas64.General { return m.mat } + +// Dims returns the number of rows and columns in the matrix. +func (m *Dense) Dims() (r, c int) { return m.mat.Rows, m.mat.Cols } + +// Caps returns the number of rows and columns in the backing matrix. +func (m *Dense) Caps() (r, c int) { return m.capRows, m.capCols } + +// Col copies the elements in the jth column of the matrix into the slice dst. +// If the provided slice is nil, a new slice is first allocated. +// +// See the Vectorer interface for more information. +func (m *Dense) Col(dst []float64, j int) []float64 { + if j >= m.mat.Cols || j < 0 { + panic(ErrColAccess) + } + + if dst == nil { + dst = make([]float64, m.mat.Rows) + } + dst = dst[:min(len(dst), m.mat.Rows)] + blas64.Copy(len(dst), + blas64.Vector{Inc: m.mat.Stride, Data: m.mat.Data[j:]}, + blas64.Vector{Inc: 1, Data: dst}, + ) + + return dst +} + +// ColView returns a Vector reflecting col j, backed by the matrix data. +// +// See ColViewer for more information. +func (m *Dense) ColView(j int) *Vector { + if j >= m.mat.Cols || j < 0 { + panic(ErrColAccess) + } + return &Vector{ + mat: blas64.Vector{ + Inc: m.mat.Stride, + Data: m.mat.Data[j : (m.mat.Rows-1)*m.mat.Stride+j+1], + }, + n: m.mat.Rows, + } +} + +// SetCol sets the elements of the matrix in the specified column to the values +// of src. +// +// See the VectorSetter interface for more information. +func (m *Dense) SetCol(j int, src []float64) int { + if j >= m.mat.Cols || j < 0 { + panic(ErrColAccess) + } + + blas64.Copy(min(len(src), m.mat.Rows), + blas64.Vector{Inc: 1, Data: src}, + blas64.Vector{Inc: m.mat.Stride, Data: m.mat.Data[j:]}, + ) + + return min(len(src), m.mat.Rows) +} + +// Row copies the elements in the ith row of the matrix into the slice dst. +// If the provided slice is nil, a new slice is first allocated. +// +// See the Vectorer interface for more information. +func (m *Dense) Row(dst []float64, i int) []float64 { + if i >= m.mat.Rows || i < 0 { + panic(ErrRowAccess) + } + + if dst == nil { + dst = make([]float64, m.mat.Cols) + } + copy(dst, m.rowView(i)) + + return dst +} + +// SetRow sets the elements of the matrix in the specified row to the values of +// src. +// +// See the VectorSetter interface for more information. +func (m *Dense) SetRow(i int, src []float64) int { + if i >= m.mat.Rows || i < 0 { + panic(ErrRowAccess) + } + + copy(m.rowView(i), src) + + return min(len(src), m.mat.Cols) +} + +// RowView returns a Vector reflecting row i, backed by the matrix data. +// +// See RowViewer for more information. +func (m *Dense) RowView(i int) *Vector { + if i >= m.mat.Rows || i < 0 { + panic(ErrRowAccess) + } + return &Vector{ + mat: blas64.Vector{ + Inc: 1, + Data: m.mat.Data[i*m.mat.Stride : i*m.mat.Stride+m.mat.Cols], + }, + n: m.mat.Cols, + } +} + +// RawRowView returns a slice backed by the same array as backing the +// receiver. +func (m *Dense) RawRowView(i int) []float64 { + if i >= m.mat.Rows || i < 0 { + panic(ErrRowAccess) + } + return m.rowView(i) +} + +func (m *Dense) rowView(r int) []float64 { + return m.mat.Data[r*m.mat.Stride : r*m.mat.Stride+m.mat.Cols] +} + +// View returns a new Matrix that shares backing data with the receiver. +// The new matrix is located from row i, column j extending r rows and c +// columns. +func (m *Dense) View(i, j, r, c int) Matrix { + mr, mc := m.Dims() + if i < 0 || i >= mr || j < 0 || j >= mc || r <= 0 || i+r > mr || c <= 0 || j+c > mc { + panic(ErrIndexOutOfRange) + } + t := *m + t.mat.Data = t.mat.Data[i*t.mat.Stride+j : (i+r-1)*t.mat.Stride+(j+c)] + t.mat.Rows = r + t.mat.Cols = c + t.capRows -= i + t.capCols -= j + return &t +} + +// Grow returns an expanded copy of the receiver. The copy is expanded +// by r rows and c columns. If the dimensions of the new copy are outside +// the caps of the receiver a new allocation is made, otherwise not. +func (m *Dense) Grow(r, c int) Matrix { + if r < 0 || c < 0 { + panic(ErrIndexOutOfRange) + } + if r == 0 && c == 0 { + return m + } + + r += m.mat.Rows + c += m.mat.Cols + + var t Dense + switch { + case m.mat.Rows == 0 || m.mat.Cols == 0: + t.mat = blas64.General{ + Rows: r, + Cols: c, + Stride: c, + // We zero because we don't know how the matrix will be used. + // In other places, the mat is immediately filled with a result; + // this is not the case here. + Data: useZeroed(m.mat.Data, r*c), + } + case r > m.capRows || c > m.capCols: + cr := max(r, m.capRows) + cc := max(c, m.capCols) + t.mat = blas64.General{ + Rows: r, + Cols: c, + Stride: cc, + Data: make([]float64, cr*cc), + } + t.capRows = cr + t.capCols = cc + // Copy the complete matrix over to the new matrix. + // Including elements not currently visible. + r, c, m.mat.Rows, m.mat.Cols = m.mat.Rows, m.mat.Cols, m.capRows, m.capCols + t.Copy(m) + m.mat.Rows, m.mat.Cols = r, c + return &t + default: + t.mat = blas64.General{ + Data: m.mat.Data[:(r-1)*m.mat.Stride+c], + Rows: r, + Cols: c, + Stride: m.mat.Stride, + } + } + t.capRows = r + t.capCols = c + return &t +} + +// Reset zeros the dimensions of the matrix so that it can be reused as the +// receiver of a dimensionally restricted operation. +// +// See the Reseter interface for more information. +func (m *Dense) Reset() { + // No change of Stride, Rows and Cols to 0 + // may be made unless all are set to 0. + m.mat.Rows, m.mat.Cols, m.mat.Stride = 0, 0, 0 + m.capRows, m.capCols = 0, 0 + m.mat.Data = m.mat.Data[:0] +} + +// Clone makes a copy of a into the receiver, overwriting the previous value of +// the receiver. The clone operation does not make any restriction on shape. +// +// See the Cloner interface for more information. +func (m *Dense) Clone(a Matrix) { + r, c := a.Dims() + mat := blas64.General{ + Rows: r, + Cols: c, + Stride: c, + } + m.capRows, m.capCols = r, c + switch a := a.(type) { + case RawMatrixer: + amat := a.RawMatrix() + mat.Data = make([]float64, r*c) + for i := 0; i < r; i++ { + copy(mat.Data[i*c:(i+1)*c], amat.Data[i*amat.Stride:i*amat.Stride+c]) + } + case Vectorer: + mat.Data = use(m.mat.Data, r*c) + for i := 0; i < r; i++ { + a.Row(mat.Data[i*c:(i+1)*c], i) + } + default: + mat.Data = use(m.mat.Data, r*c) + m.mat = mat + for i := 0; i < r; i++ { + for j := 0; j < c; j++ { + m.set(i, j, a.At(i, j)) + } + } + return + } + m.mat = mat +} + +// Copy makes a copy of elements of a into the receiver. It is similar to the +// built-in copy; it copies as much as the overlap between the two matrices and +// returns the number of rows and columns it copied. +// +// See the Copier interface for more information. +func (m *Dense) Copy(a Matrix) (r, c int) { + r, c = a.Dims() + r = min(r, m.mat.Rows) + c = min(c, m.mat.Cols) + + switch a := a.(type) { + case RawMatrixer: + amat := a.RawMatrix() + for i := 0; i < r; i++ { + copy(m.mat.Data[i*m.mat.Stride:i*m.mat.Stride+c], amat.Data[i*amat.Stride:i*amat.Stride+c]) + } + case Vectorer: + for i := 0; i < r; i++ { + a.Row(m.mat.Data[i*m.mat.Stride:i*m.mat.Stride+c], i) + } + default: + for i := 0; i < r; i++ { + for j := 0; j < c; j++ { + m.set(r, c, a.At(r, c)) + } + } + } + + return r, c +} + +// U places the upper triangular matrix of a in the receiver. +// +// See the Uer interface for more information. +func (m *Dense) U(a Matrix) { + ar, ac := a.Dims() + if ar != ac { + panic(ErrSquare) + } + + if m == a { + m.zeroLower() + return + } + m.reuseAs(ar, ac) + + if a, ok := a.(RawMatrixer); ok { + amat := a.RawMatrix() + copy(m.mat.Data[:ac], amat.Data[:ac]) + for j, ja, jm := 1, amat.Stride, m.mat.Stride; ja < ar*amat.Stride; j, ja, jm = j+1, ja+amat.Stride, jm+m.mat.Stride { + zero(m.mat.Data[jm : jm+j]) + copy(m.mat.Data[jm+j:jm+ac], amat.Data[ja+j:ja+ac]) + } + return + } + + if a, ok := a.(Vectorer); ok { + row := make([]float64, ac) + copy(m.mat.Data[:m.mat.Cols], a.Row(row, 0)) + for r := 1; r < ar; r++ { + zero(m.mat.Data[r*m.mat.Stride : r*(m.mat.Stride+1)]) + copy(m.mat.Data[r*(m.mat.Stride+1):r*m.mat.Stride+m.mat.Cols], a.Row(row, r)) + } + return + } + + m.zeroLower() + for r := 0; r < ar; r++ { + for c := r; c < ac; c++ { + m.set(r, c, a.At(r, c)) + } + } +} + +func (m *Dense) zeroLower() { + for i := 1; i < m.mat.Rows; i++ { + zero(m.mat.Data[i*m.mat.Stride : i*m.mat.Stride+i]) + } +} + +// L places the lower triangular matrix of a in the receiver. +// +// See the Ler interface for more information. +func (m *Dense) L(a Matrix) { + ar, ac := a.Dims() + if ar != ac { + panic(ErrSquare) + } + + if m == a { + m.zeroUpper() + return + } + m.reuseAs(ar, ac) + + if a, ok := a.(RawMatrixer); ok { + amat := a.RawMatrix() + copy(m.mat.Data[:ar], amat.Data[:ar]) + for j, ja, jm := 1, amat.Stride, m.mat.Stride; ja < ac*amat.Stride; j, ja, jm = j+1, ja+amat.Stride, jm+m.mat.Stride { + zero(m.mat.Data[jm : jm+j]) + copy(m.mat.Data[jm+j:jm+ar], amat.Data[ja+j:ja+ar]) + } + return + } + + if a, ok := a.(Vectorer); ok { + row := make([]float64, ac) + for r := 0; r < ar; r++ { + a.Row(row[:r+1], r) + m.SetRow(r, row) + } + return + } + + m.zeroUpper() + for c := 0; c < ac; c++ { + for r := c; r < ar; r++ { + m.set(r, c, a.At(r, c)) + } + } +} + +func (m *Dense) zeroUpper() { + for i := 0; i < m.mat.Rows-1; i++ { + zero(m.mat.Data[i*m.mat.Stride+i+1 : (i+1)*m.mat.Stride]) + } +} + +// TCopy makes a copy of the transpose the matrix represented by a, placing the +// result into the receiver. +// +// See the TransposeCopier interface for more information. +func (m *Dense) TCopy(a Matrix) { + ar, ac := a.Dims() + + var w Dense + if m != a { + w = *m + } + w.reuseAs(ac, ar) + + switch a := a.(type) { + case *Dense: + for i := 0; i < ac; i++ { + for j := 0; j < ar; j++ { + w.set(i, j, a.at(j, i)) + } + } + default: + for i := 0; i < ac; i++ { + for j := 0; j < ar; j++ { + w.set(i, j, a.At(j, i)) + } + } + } + *m = w +} + +// Stack appends the rows of b onto the rows of a, placing the result into the +// receiver. +// +// See the Stacker interface for more information. +func (m *Dense) Stack(a, b Matrix) { + ar, ac := a.Dims() + br, bc := b.Dims() + if ac != bc || m == a || m == b { + panic(ErrShape) + } + + m.reuseAs(ar+br, ac) + + m.Copy(a) + w := m.View(ar, 0, br, bc).(*Dense) + w.Copy(b) +} + +// Augment creates the augmented matrix of a and b, where b is placed in the +// greater indexed columns. +// +// See the Augmenter interface for more information. +func (m *Dense) Augment(a, b Matrix) { + ar, ac := a.Dims() + br, bc := b.Dims() + if ar != br || m == a || m == b { + panic(ErrShape) + } + + m.reuseAs(ar, ac+bc) + + m.Copy(a) + w := m.View(0, ac, br, bc).(*Dense) + w.Copy(b) +} + +// MarshalBinary encodes the receiver into a binary form and returns the result. +// +// Dense is little-endian encoded as follows: +// 0 - 8 number of rows (int64) +// 8 - 16 number of columns (int64) +// 16 - .. matrix data elements (float64) +// [0,0] [0,1] ... [0,ncols-1] +// [1,0] [1,1] ... [1,ncols-1] +// ... +// [nrows-1,0] ... [nrows-1,ncols-1] +func (m Dense) MarshalBinary() ([]byte, error) { + buf := bytes.NewBuffer(make([]byte, 0, m.mat.Rows*m.mat.Cols*sizeFloat64+2*sizeInt64)) + err := binary.Write(buf, defaultEndian, int64(m.mat.Rows)) + if err != nil { + return nil, err + } + err = binary.Write(buf, defaultEndian, int64(m.mat.Cols)) + if err != nil { + return nil, err + } + + for i := 0; i < m.mat.Rows; i++ { + for _, v := range m.rowView(i) { + err = binary.Write(buf, defaultEndian, v) + if err != nil { + return nil, err + } + } + } + return buf.Bytes(), err +} + +// UnmarshalBinary decodes the binary form into the receiver. +// It panics if the receiver is a non-zero Dense matrix. +// +// See MarshalBinary for the on-disk layout. +func (m *Dense) UnmarshalBinary(data []byte) error { + if !m.isZero() { + panic("mat64: unmarshal into non-zero matrix") + } + + buf := bytes.NewReader(data) + var rows int64 + err := binary.Read(buf, defaultEndian, &rows) + if err != nil { + return err + } + var cols int64 + err = binary.Read(buf, defaultEndian, &cols) + if err != nil { + return err + } + + m.mat.Rows = int(rows) + m.mat.Cols = int(cols) + m.mat.Stride = int(cols) + m.capRows = int(rows) + m.capCols = int(cols) + m.mat.Data = use(m.mat.Data, m.mat.Rows*m.mat.Cols) + + for i := range m.mat.Data { + err = binary.Read(buf, defaultEndian, &m.mat.Data[i]) + if err != nil { + return err + } + } + + return err +} diff --git a/vendor/github.com/gonum/matrix/mat64/dense_arithmetic.go b/vendor/github.com/gonum/matrix/mat64/dense_arithmetic.go new file mode 100644 index 00000000..8d0f596d --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/dense_arithmetic.go @@ -0,0 +1,975 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mat64 + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +// Min returns the smallest element value of the receiver. +func (m *Dense) Min() float64 { + min := m.mat.Data[0] + for k := 0; k < m.mat.Rows; k++ { + for _, v := range m.rowView(k) { + min = math.Min(min, v) + } + } + return min +} + +// Max returns the largest element value of the receiver. +func (m *Dense) Max() float64 { + max := m.mat.Data[0] + for k := 0; k < m.mat.Rows; k++ { + for _, v := range m.rowView(k) { + max = math.Max(max, v) + } + } + return max +} + +// Trace returns the trace of the matrix. +// +// See the Tracer interface for more information. +func (m *Dense) Trace() float64 { + if m.mat.Rows != m.mat.Cols { + panic(ErrSquare) + } + var t float64 + for i := 0; i < len(m.mat.Data); i += m.mat.Stride + 1 { + t += m.mat.Data[i] + } + return t +} + +var inf = math.Inf(1) + +const ( + epsilon = 2.2204e-16 + small = math.SmallestNonzeroFloat64 +) + +// Norm returns the specified matrix p-norm of the receiver. +// +// See the Normer interface for more information. +func (m *Dense) Norm(ord float64) float64 { + var n float64 + switch { + case ord == 1: + col := make([]float64, m.mat.Rows) + for i := 0; i < m.mat.Cols; i++ { + var s float64 + for _, e := range m.Col(col, i) { + s += math.Abs(e) + } + n = math.Max(s, n) + } + case math.IsInf(ord, +1): + row := make([]float64, m.mat.Cols) + for i := 0; i < m.mat.Rows; i++ { + var s float64 + for _, e := range m.Row(row, i) { + s += math.Abs(e) + } + n = math.Max(s, n) + } + case ord == -1: + n = math.MaxFloat64 + col := make([]float64, m.mat.Rows) + for i := 0; i < m.mat.Cols; i++ { + var s float64 + for _, e := range m.Col(col, i) { + s += math.Abs(e) + } + n = math.Min(s, n) + } + case math.IsInf(ord, -1): + n = math.MaxFloat64 + row := make([]float64, m.mat.Cols) + for i := 0; i < m.mat.Rows; i++ { + var s float64 + for _, e := range m.Row(row, i) { + s += math.Abs(e) + } + n = math.Min(s, n) + } + case ord == 0: + for i := 0; i < len(m.mat.Data); i += m.mat.Stride { + for _, v := range m.mat.Data[i : i+m.mat.Cols] { + n = math.Hypot(n, v) + } + } + return n + case ord == 2, ord == -2: + s := SVD(m, epsilon, small, false, false).Sigma + if ord == 2 { + return s[0] + } + return s[len(s)-1] + default: + panic(ErrNormOrder) + } + + return n +} + +// Add adds a and b element-wise, placing the result in the receiver. +// +// See the Adder interface for more information. +func (m *Dense) Add(a, b Matrix) { + ar, ac := a.Dims() + br, bc := b.Dims() + + if ar != br || ac != bc { + panic(ErrShape) + } + + m.reuseAs(ar, ac) + + if a, ok := a.(RawMatrixer); ok { + if b, ok := b.(RawMatrixer); ok { + amat, bmat := a.RawMatrix(), b.RawMatrix() + for ja, jb, jm := 0, 0, 0; ja < ar*amat.Stride; ja, jb, jm = ja+amat.Stride, jb+bmat.Stride, jm+m.mat.Stride { + for i, v := range amat.Data[ja : ja+ac] { + m.mat.Data[i+jm] = v + bmat.Data[i+jb] + } + } + return + } + } + + if a, ok := a.(Vectorer); ok { + if b, ok := b.(Vectorer); ok { + rowa := make([]float64, ac) + rowb := make([]float64, bc) + for r := 0; r < ar; r++ { + a.Row(rowa, r) + for i, v := range b.Row(rowb, r) { + rowa[i] += v + } + copy(m.rowView(r), rowa) + } + return + } + } + + for r := 0; r < ar; r++ { + for c := 0; c < ac; c++ { + m.set(r, c, a.At(r, c)+b.At(r, c)) + } + } +} + +// Sub subtracts the matrix b from a, placing the result in the receiver. +// +// See the Suber interface for more information. +func (m *Dense) Sub(a, b Matrix) { + ar, ac := a.Dims() + br, bc := b.Dims() + + if ar != br || ac != bc { + panic(ErrShape) + } + + m.reuseAs(ar, ac) + + if a, ok := a.(RawMatrixer); ok { + if b, ok := b.(RawMatrixer); ok { + amat, bmat := a.RawMatrix(), b.RawMatrix() + for ja, jb, jm := 0, 0, 0; ja < ar*amat.Stride; ja, jb, jm = ja+amat.Stride, jb+bmat.Stride, jm+m.mat.Stride { + for i, v := range amat.Data[ja : ja+ac] { + m.mat.Data[i+jm] = v - bmat.Data[i+jb] + } + } + return + } + } + + if a, ok := a.(Vectorer); ok { + if b, ok := b.(Vectorer); ok { + rowa := make([]float64, ac) + rowb := make([]float64, bc) + for r := 0; r < ar; r++ { + a.Row(rowa, r) + for i, v := range b.Row(rowb, r) { + rowa[i] -= v + } + copy(m.rowView(r), rowa) + } + return + } + } + + for r := 0; r < ar; r++ { + for c := 0; c < ac; c++ { + m.set(r, c, a.At(r, c)-b.At(r, c)) + } + } +} + +// MulElem performs element-wise multiplication of a and b, placing the result +// in the receiver. +// +// See the ElemMuler interface for more information. +func (m *Dense) MulElem(a, b Matrix) { + ar, ac := a.Dims() + br, bc := b.Dims() + + if ar != br || ac != bc { + panic(ErrShape) + } + + m.reuseAs(ar, ac) + + if a, ok := a.(RawMatrixer); ok { + if b, ok := b.(RawMatrixer); ok { + amat, bmat := a.RawMatrix(), b.RawMatrix() + for ja, jb, jm := 0, 0, 0; ja < ar*amat.Stride; ja, jb, jm = ja+amat.Stride, jb+bmat.Stride, jm+m.mat.Stride { + for i, v := range amat.Data[ja : ja+ac] { + m.mat.Data[i+jm] = v * bmat.Data[i+jb] + } + } + return + } + } + + if a, ok := a.(Vectorer); ok { + if b, ok := b.(Vectorer); ok { + rowa := make([]float64, ac) + rowb := make([]float64, bc) + for r := 0; r < ar; r++ { + a.Row(rowa, r) + for i, v := range b.Row(rowb, r) { + rowa[i] *= v + } + copy(m.rowView(r), rowa) + } + return + } + } + + for r := 0; r < ar; r++ { + for c := 0; c < ac; c++ { + m.set(r, c, a.At(r, c)*b.At(r, c)) + } + } +} + +// DivElem performs element-wise division of a by b, placing the result +// in the receiver. +// +// See the ElemDiver interface for more information. +func (m *Dense) DivElem(a, b Matrix) { + ar, ac := a.Dims() + br, bc := b.Dims() + + if ar != br || ac != bc { + panic(ErrShape) + } + + m.reuseAs(ar, ac) + + if a, ok := a.(RawMatrixer); ok { + if b, ok := b.(RawMatrixer); ok { + amat, bmat := a.RawMatrix(), b.RawMatrix() + for ja, jb, jm := 0, 0, 0; ja < ar*amat.Stride; ja, jb, jm = ja+amat.Stride, jb+bmat.Stride, jm+m.mat.Stride { + for i, v := range amat.Data[ja : ja+ac] { + m.mat.Data[i+jm] = v / bmat.Data[i+jb] + } + } + return + } + } + + if a, ok := a.(Vectorer); ok { + if b, ok := b.(Vectorer); ok { + rowa := make([]float64, ac) + rowb := make([]float64, bc) + for r := 0; r < ar; r++ { + a.Row(rowa, r) + for i, v := range b.Row(rowb, r) { + rowa[i] /= v + } + copy(m.rowView(r), rowa) + } + return + } + } + + for r := 0; r < ar; r++ { + for c := 0; c < ac; c++ { + m.set(r, c, a.At(r, c)/b.At(r, c)) + } + } +} + +// Dot returns the sum of the element-wise products of the elements of the +// receiver and b. +// +// See the Dotter interface for more information. +func (m *Dense) Dot(b Matrix) float64 { + mr, mc := m.Dims() + br, bc := b.Dims() + + if mr != br || mc != bc { + panic(ErrShape) + } + + var d float64 + + if b, ok := b.(RawMatrixer); ok { + bmat := b.RawMatrix() + for jm, jb := 0, 0; jm < mr*m.mat.Stride; jm, jb = jm+m.mat.Stride, jb+bmat.Stride { + for i, v := range m.mat.Data[jm : jm+mc] { + d += v * bmat.Data[i+jb] + } + } + return d + } + + if b, ok := b.(Vectorer); ok { + row := make([]float64, bc) + for r := 0; r < br; r++ { + for i, v := range b.Row(row, r) { + d += m.mat.Data[r*m.mat.Stride+i] * v + } + } + return d + } + + for r := 0; r < mr; r++ { + for c := 0; c < mc; c++ { + d += m.At(r, c) * b.At(r, c) + } + } + return d +} + +// Mul takes the matrix product of a and b, placing the result in the receiver. +// +// See the Muler interface for more information. +func (m *Dense) Mul(a, b Matrix) { + ar, ac := a.Dims() + br, bc := b.Dims() + + if ac != br { + panic(ErrShape) + } + + m.reuseAs(ar, bc) + var w *Dense + if m != a && m != b { + w = m + } else { + w = getWorkspace(ar, bc, false) + defer func() { + m.Copy(w) + putWorkspace(w) + }() + } + + if a, ok := a.(RawMatrixer); ok { + if b, ok := b.(RawMatrixer); ok { + amat, bmat := a.RawMatrix(), b.RawMatrix() + blas64.Gemm(blas.NoTrans, blas.NoTrans, 1, amat, bmat, 0, w.mat) + return + } + } + + if a, ok := a.(Vectorer); ok { + if b, ok := b.(Vectorer); ok { + row := make([]float64, ac) + col := make([]float64, br) + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for c := 0; c < bc; c++ { + dataTmp[c] = blas64.Dot(ac, + blas64.Vector{Inc: 1, Data: a.Row(row, r)}, + blas64.Vector{Inc: 1, Data: b.Col(col, c)}, + ) + } + } + return + } + } + + row := make([]float64, ac) + for r := 0; r < ar; r++ { + for i := range row { + row[i] = a.At(r, i) + } + for c := 0; c < bc; c++ { + var v float64 + for i, e := range row { + v += e * b.At(i, c) + } + w.mat.Data[r*w.mat.Stride+c] = v + } + } +} + +// MulTrans takes the matrix product of a and b, optionally transposing each, +// and placing the result in the receiver. +// +// See the MulTranser interface for more information. +func (m *Dense) MulTrans(a Matrix, aTrans bool, b Matrix, bTrans bool) { + ar, ac := a.Dims() + if aTrans { + ar, ac = ac, ar + } + + br, bc := b.Dims() + if bTrans { + br, bc = bc, br + } + + if ac != br { + panic(ErrShape) + } + + m.reuseAs(ar, bc) + var w *Dense + if m != a && m != b { + w = m + } else { + w = getWorkspace(ar, bc, false) + defer func() { + m.Copy(w) + putWorkspace(w) + }() + } + + if a, ok := a.(RawMatrixer); ok { + if b, ok := b.(RawMatrixer); ok { + amat := a.RawMatrix() + if a == b && aTrans != bTrans { + var op blas.Transpose + if aTrans { + op = blas.Trans + } else { + op = blas.NoTrans + } + blas64.Syrk(op, 1, amat, 0, blas64.Symmetric{N: w.mat.Rows, Stride: w.mat.Stride, Data: w.mat.Data, Uplo: blas.Upper}) + + // Fill lower matrix with result. + // TODO(kortschak): Investigate whether using blas64.Copy improves the performance of this significantly. + for i := 0; i < w.mat.Rows; i++ { + for j := i + 1; j < w.mat.Cols; j++ { + w.set(j, i, w.at(i, j)) + } + } + } else { + var aOp, bOp blas.Transpose + if aTrans { + aOp = blas.Trans + } else { + aOp = blas.NoTrans + } + if bTrans { + bOp = blas.Trans + } else { + bOp = blas.NoTrans + } + bmat := b.RawMatrix() + blas64.Gemm(aOp, bOp, 1, amat, bmat, 0, w.mat) + } + return + } + } + + if a, ok := a.(Vectorer); ok { + if b, ok := b.(Vectorer); ok { + row := make([]float64, ac) + col := make([]float64, br) + if aTrans { + if bTrans { + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for c := 0; c < bc; c++ { + dataTmp[c] = blas64.Dot(ac, + blas64.Vector{Inc: 1, Data: a.Col(row, r)}, + blas64.Vector{Inc: 1, Data: b.Row(col, c)}, + ) + } + } + return + } + // TODO(jonlawlor): determine if (b*a)' is more efficient + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for c := 0; c < bc; c++ { + dataTmp[c] = blas64.Dot(ac, + blas64.Vector{Inc: 1, Data: a.Col(row, r)}, + blas64.Vector{Inc: 1, Data: b.Col(col, c)}, + ) + } + } + return + } + if bTrans { + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for c := 0; c < bc; c++ { + dataTmp[c] = blas64.Dot(ac, + blas64.Vector{Inc: 1, Data: a.Row(row, r)}, + blas64.Vector{Inc: 1, Data: b.Row(col, c)}, + ) + } + } + return + } + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for c := 0; c < bc; c++ { + dataTmp[c] = blas64.Dot(ac, + blas64.Vector{Inc: 1, Data: a.Row(row, r)}, + blas64.Vector{Inc: 1, Data: b.Col(col, c)}, + ) + } + } + return + } + } + + row := make([]float64, ac) + if aTrans { + if bTrans { + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for i := range row { + row[i] = a.At(i, r) + } + for c := 0; c < bc; c++ { + var v float64 + for i, e := range row { + v += e * b.At(c, i) + } + dataTmp[c] = v + } + } + return + } + + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for i := range row { + row[i] = a.At(i, r) + } + for c := 0; c < bc; c++ { + var v float64 + for i, e := range row { + v += e * b.At(i, c) + } + dataTmp[c] = v + } + } + return + } + if bTrans { + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for i := range row { + row[i] = a.At(r, i) + } + for c := 0; c < bc; c++ { + var v float64 + for i, e := range row { + v += e * b.At(c, i) + } + dataTmp[c] = v + } + } + return + } + for r := 0; r < ar; r++ { + dataTmp := w.mat.Data[r*w.mat.Stride : r*w.mat.Stride+bc] + for i := range row { + row[i] = a.At(r, i) + } + for c := 0; c < bc; c++ { + var v float64 + for i, e := range row { + v += e * b.At(i, c) + } + dataTmp[c] = v + } + } +} + +// Exp calculates the exponential of the matrix a, e^a, placing the result +// in the receiver. +// +// See the Exper interface for more information. +// +// Exp uses the scaling and squaring method described in section 3 of +// http://www.cs.cornell.edu/cv/researchpdf/19ways+.pdf. +func (m *Dense) Exp(a Matrix) { + r, c := a.Dims() + if r != c { + panic(ErrShape) + } + + var w *Dense + switch { + case m.isZero(): + m.mat = blas64.General{ + Rows: r, + Cols: c, + Stride: c, + Data: useZeroed(m.mat.Data, r*r), + } + m.capRows = r + m.capCols = c + for i := 0; i < r*r; i += r + 1 { + m.mat.Data[i] = 1 + } + w = m + case r == m.mat.Rows && c == m.mat.Cols: + w = getWorkspace(r, r, true) + for i := 0; i < r; i++ { + w.mat.Data[i*w.mat.Stride+i] = 1 + } + default: + panic(ErrShape) + } + + const ( + terms = 10 + scaling = 4 + ) + + small := getWorkspace(r, r, false) + small.Scale(math.Pow(2, -scaling), a) + power := getWorkspace(r, r, false) + power.Copy(small) + + var ( + tmp = getWorkspace(r, r, false) + factI = 1. + ) + for i := 1.; i < terms; i++ { + factI *= i + + // This is OK to do because power and tmp are + // new Dense values so all rows are contiguous. + // TODO(kortschak) Make this explicit in the NewDense doc comment. + for j, v := range power.mat.Data { + tmp.mat.Data[j] = v / factI + } + + w.Add(w, tmp) + if i < terms-1 { + tmp.Mul(power, small) + tmp, power = power, tmp + } + } + putWorkspace(small) + putWorkspace(power) + for i := 0; i < scaling; i++ { + tmp.Mul(w, w) + tmp, w = w, tmp + } + putWorkspace(tmp) + + if w != m { + m.Copy(w) + putWorkspace(w) + } +} + +// Pow calculates the integral power of the matrix a to n, placing the result +// in the receiver. +// +// See the Power interface for more information. +func (m *Dense) Pow(a Matrix, n int) { + if n < 0 { + panic("matrix: illegal power") + } + r, c := a.Dims() + if r != c { + panic(ErrShape) + } + + m.reuseAs(r, c) + + // Take possible fast paths. + switch n { + case 0: + for i := 0; i < r; i++ { + zero(m.mat.Data[i*m.mat.Stride : i*m.mat.Stride+c]) + m.mat.Data[i*m.mat.Stride+i] = 1 + } + return + case 1: + m.Copy(a) + return + case 2: + m.Mul(a, a) + return + } + + // Perform iterative exponentiation by squaring in work space. + w := getWorkspace(r, r, false) + w.Copy(a) + s := getWorkspace(r, r, false) + s.Copy(a) + x := getWorkspace(r, r, false) + for n--; n > 0; n >>= 1 { + if n&1 != 0 { + x.Mul(w, s) + w, x = x, w + } + if n != 1 { + x.Mul(s, s) + s, x = x, s + } + } + m.Copy(w) + putWorkspace(w) + putWorkspace(s) + putWorkspace(x) +} + +// Scale multiplies the elements of a by f, placing the result in the receiver. +// +// See the Scaler interface for more information. +func (m *Dense) Scale(f float64, a Matrix) { + ar, ac := a.Dims() + + m.reuseAs(ar, ac) + + if a, ok := a.(RawMatrixer); ok { + amat := a.RawMatrix() + for ja, jm := 0, 0; ja < ar*amat.Stride; ja, jm = ja+amat.Stride, jm+m.mat.Stride { + for i, v := range amat.Data[ja : ja+ac] { + m.mat.Data[i+jm] = v * f + } + } + return + } + + if a, ok := a.(Vectorer); ok { + row := make([]float64, ac) + for r := 0; r < ar; r++ { + for i, v := range a.Row(row, r) { + row[i] = f * v + } + copy(m.rowView(r), row) + } + return + } + + for r := 0; r < ar; r++ { + for c := 0; c < ac; c++ { + m.set(r, c, f*a.At(r, c)) + } + } +} + +// Apply applies the function f to each of the elements of a, placing the +// resulting matrix in the receiver. +// +// See the Applyer interface for more information. +func (m *Dense) Apply(f ApplyFunc, a Matrix) { + ar, ac := a.Dims() + + m.reuseAs(ar, ac) + + if a, ok := a.(RawMatrixer); ok { + amat := a.RawMatrix() + for j, ja, jm := 0, 0, 0; ja < ar*amat.Stride; j, ja, jm = j+1, ja+amat.Stride, jm+m.mat.Stride { + for i, v := range amat.Data[ja : ja+ac] { + m.mat.Data[i+jm] = f(j, i, v) + } + } + return + } + + if a, ok := a.(Vectorer); ok { + row := make([]float64, ac) + for r := 0; r < ar; r++ { + for i, v := range a.Row(row, r) { + row[i] = f(r, i, v) + } + copy(m.rowView(r), row) + } + return + } + + for r := 0; r < ar; r++ { + for c := 0; c < ac; c++ { + m.set(r, c, f(r, c, a.At(r, c))) + } + } +} + +// Sum returns the sum of the elements of the matrix. +// +// See the Sumer interface for more information. +func (m *Dense) Sum() float64 { + l := m.mat.Cols + var s float64 + for i := 0; i < len(m.mat.Data); i += m.mat.Stride { + for _, v := range m.mat.Data[i : i+l] { + s += v + } + } + return s +} + +// Equals returns true if b and the receiver have the same size and contain all +// equal elements. +// +// See the Equaler interface for more information. +func (m *Dense) Equals(b Matrix) bool { + br, bc := b.Dims() + if br != m.mat.Rows || bc != m.mat.Cols { + return false + } + + if b, ok := b.(RawMatrixer); ok { + bmat := b.RawMatrix() + for jb, jm := 0, 0; jm < br*m.mat.Stride; jb, jm = jb+bmat.Stride, jm+m.mat.Stride { + for i, v := range m.mat.Data[jm : jm+bc] { + if v != bmat.Data[i+jb] { + return false + } + } + } + return true + } + + if b, ok := b.(Vectorer); ok { + rowb := make([]float64, bc) + for r := 0; r < br; r++ { + rowm := m.mat.Data[r*m.mat.Stride : r*m.mat.Stride+m.mat.Cols] + for i, v := range b.Row(rowb, r) { + if rowm[i] != v { + return false + } + } + } + return true + } + + for r := 0; r < br; r++ { + for c := 0; c < bc; c++ { + if m.At(r, c) != b.At(r, c) { + return false + } + } + } + return true +} + +// EqualsApprox compares the matrices represented by b and the receiver, with +// tolerance for element-wise equality specified by epsilon. +// +// See the ApproxEqualer interface for more information. +func (m *Dense) EqualsApprox(b Matrix, epsilon float64) bool { + br, bc := b.Dims() + if br != m.mat.Rows || bc != m.mat.Cols { + return false + } + + if b, ok := b.(RawMatrixer); ok { + bmat := b.RawMatrix() + for jb, jm := 0, 0; jm < br*m.mat.Stride; jb, jm = jb+bmat.Stride, jm+m.mat.Stride { + for i, v := range m.mat.Data[jm : jm+bc] { + if math.Abs(v-bmat.Data[i+jb]) > epsilon { + return false + } + } + } + return true + } + + if b, ok := b.(Vectorer); ok { + rowb := make([]float64, bc) + for r := 0; r < br; r++ { + rowm := m.mat.Data[r*m.mat.Stride : r*m.mat.Stride+m.mat.Cols] + for i, v := range b.Row(rowb, r) { + if math.Abs(rowm[i]-v) > epsilon { + return false + } + } + } + return true + } + + for r := 0; r < br; r++ { + for c := 0; c < bc; c++ { + if math.Abs(m.At(r, c)-b.At(r, c)) > epsilon { + return false + } + } + } + return true +} + +// RankOne performs a rank-one update to the matrix a and stores the result +// in the receiver. If a is zero, see Outer. +// m = a + alpha * x * y' +func (m *Dense) RankOne(a Matrix, alpha float64, x, y *Vector) { + ar, ac := a.Dims() + if x.Len() != ar { + panic(ErrShape) + } + if y.Len() != ac { + panic(ErrShape) + } + + var w Dense + if m == a { + w = *m + } + w.reuseAs(ar, ac) + + // Copy over to the new memory if necessary + if m != a { + w.Copy(a) + } + blas64.Ger(alpha, x.mat, y.mat, w.mat) + *m = w +} + +// Outer calculates the outer product of x and y, and stores the result +// in the receiver. In order to update to an existing matrix, see RankOne. +// m = x * y' +func (m *Dense) Outer(x, y *Vector) { + r := x.Len() + c := y.Len() + + // Copied from reuseAs with use replaced by useZeroed + // and a final zero of the matrix elements if we pass + // the shape checks. + // TODO(kortschak): Factor out into reuseZeroedAs if + // we find another case that needs it. + if m.mat.Rows > m.capRows || m.mat.Cols > m.capCols { + // Panic as a string, not a mat64.Error. + panic("mat64: caps not correctly set") + } + if m.isZero() { + m.mat = blas64.General{ + Rows: r, + Cols: c, + Stride: c, + Data: useZeroed(m.mat.Data, r*c), + } + m.capRows = r + m.capCols = c + } else if r != m.mat.Rows || c != m.mat.Cols { + panic(ErrShape) + } else { + for i := 0; i < r; i++ { + zero(m.mat.Data[i*m.mat.Stride : i*m.mat.Stride+c]) + } + } + + blas64.Ger(1, x.mat, y.mat, m.mat) +} diff --git a/vendor/github.com/gonum/matrix/mat64/eigen.go b/vendor/github.com/gonum/matrix/mat64/eigen.go new file mode 100644 index 00000000..676642f7 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/eigen.go @@ -0,0 +1,819 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// Based on the EigenvalueDecomposition class from Jama 1.0.3. + +package mat64 + +import ( + "math" +) + +func symmetric(m *Dense) bool { + n, _ := m.Dims() + for i := 0; i < n; i++ { + for j := 0; j < i; j++ { + if m.at(i, j) != m.at(j, i) { + return false + } + } + } + return true +} + +type EigenFactors struct { + V *Dense + d, e []float64 +} + +// Eigen returns the Eigenvalues and eigenvectors of a square real matrix. +// The matrix a is overwritten during the decomposition. If a is symmetric, +// then a = v*D*v' where the eigenvalue matrix D is diagonal and the +// eigenvector matrix v is orthogonal. +// +// If a is not symmetric, then the eigenvalue matrix D is block diagonal +// with the real eigenvalues in 1-by-1 blocks and any complex eigenvalues, +// lambda + i*mu, in 2-by-2 blocks, [lambda, mu; -mu, lambda]. The +// columns of v represent the eigenvectors in the sense that a*v = v*D, +// i.e. a.v equals v.D. The matrix v may be badly conditioned, or even +// singular, so the validity of the equation a = v*D*inverse(v) depends +// upon the 2-norm condition number of v. +func Eigen(a *Dense, epsilon float64) EigenFactors { + m, n := a.Dims() + if m != n { + panic(ErrSquare) + } + + var v *Dense + d := make([]float64, n) + e := make([]float64, n) + + if symmetric(a) { + // Tridiagonalize. + v = tred2(a, d, e) + + // Diagonalize. + tql2(d, e, v, epsilon) + } else { + // Reduce to Hessenberg form. + var hess *Dense + hess, v = orthes(a) + + // Reduce Hessenberg to real Schur form. + hqr2(d, e, hess, v, epsilon) + } + + return EigenFactors{v, d, e} +} + +// Symmetric Householder reduction to tridiagonal form. +// +// This is derived from the Algol procedures tred2 by +// Bowdler, Martin, Reinsch, and Wilkinson, Handbook for +// Auto. Comp., Vol.ii-Linear Algebra, and the corresponding +// Fortran subroutine in EISPACK. +func tred2(a *Dense, d, e []float64) (v *Dense) { + n := len(d) + v = a + + for j := 0; j < n; j++ { + d[j] = v.at(n-1, j) + } + + // Householder reduction to tridiagonal form. + for i := n - 1; i > 0; i-- { + // Scale to avoid under/overflow. + var ( + scale float64 + h float64 + ) + for k := 0; k < i; k++ { + scale += math.Abs(d[k]) + } + if scale == 0 { + e[i] = d[i-1] + for j := 0; j < i; j++ { + d[j] = v.at(i-1, j) + v.set(i, j, 0) + v.set(j, i, 0) + } + } else { + // Generate Householder vector. + for k := 0; k < i; k++ { + d[k] /= scale + h += d[k] * d[k] + } + f := d[i-1] + g := math.Sqrt(h) + if f > 0 { + g = -g + } + e[i] = scale * g + h -= f * g + d[i-1] = f - g + for j := 0; j < i; j++ { + e[j] = 0 + } + + // Apply similarity transformation to remaining columns. + for j := 0; j < i; j++ { + f = d[j] + v.set(j, i, f) + g = e[j] + v.at(j, j)*f + for k := j + 1; k <= i-1; k++ { + g += v.at(k, j) * d[k] + e[k] += v.at(k, j) * f + } + e[j] = g + } + f = 0 + for j := 0; j < i; j++ { + e[j] /= h + f += e[j] * d[j] + } + hh := f / (h + h) + for j := 0; j < i; j++ { + e[j] -= hh * d[j] + } + for j := 0; j < i; j++ { + f = d[j] + g = e[j] + for k := j; k <= i-1; k++ { + v.set(k, j, v.at(k, j)-(f*e[k]+g*d[k])) + } + d[j] = v.at(i-1, j) + v.set(i, j, 0) + } + } + d[i] = h + } + + // Accumulate transformations. + for i := 0; i < n-1; i++ { + v.set(n-1, i, v.at(i, i)) + v.set(i, i, 1) + h := d[i+1] + if h != 0 { + for k := 0; k <= i; k++ { + d[k] = v.at(k, i+1) / h + } + for j := 0; j <= i; j++ { + var g float64 + for k := 0; k <= i; k++ { + g += v.at(k, i+1) * v.at(k, j) + } + for k := 0; k <= i; k++ { + v.set(k, j, v.at(k, j)-g*d[k]) + } + } + } + for k := 0; k <= i; k++ { + v.set(k, i+1, 0) + } + } + for j := 0; j < n; j++ { + d[j] = v.at(n-1, j) + v.set(n-1, j, 0) + } + v.set(n-1, n-1, 1) + e[0] = 0 + + return v +} + +// Symmetric tridiagonal QL algorithm. +// +// This is derived from the Algol procedures tql2, by +// Bowdler, Martin, Reinsch, and Wilkinson, Handbook for +// Auto. Comp., Vol.ii-Linear Algebra, and the corresponding +// Fortran subroutine in EISPACK. +func tql2(d, e []float64, v *Dense, epsilon float64) { + n := len(d) + for i := 1; i < n; i++ { + e[i-1] = e[i] + } + e[n-1] = 0 + + var ( + f float64 + tst1 float64 + ) + for l := 0; l < n; l++ { + // Find small subdiagonal element + tst1 = math.Max(tst1, math.Abs(d[l])+math.Abs(e[l])) + m := l + for m < n { + if math.Abs(e[m]) <= epsilon*tst1 { + break + } + m++ + } + + // If m == l, d[l] is an eigenvalue, otherwise, iterate. + if m > l { + for iter := 0; ; iter++ { // Could check iteration count here. + + // Compute implicit shift + g := d[l] + p := (d[l+1] - g) / (2 * e[l]) + r := math.Hypot(p, 1) + if p < 0 { + r = -r + } + d[l] = e[l] / (p + r) + d[l+1] = e[l] * (p + r) + dl1 := d[l+1] + h := g - d[l] + for i := l + 2; i < n; i++ { + d[i] -= h + } + f += h + + // Implicit QL transformation. + p = d[m] + c := 1. + c2 := c + c3 := c + el1 := e[l+1] + var ( + s float64 + s2 float64 + ) + for i := m - 1; i >= l; i-- { + c3 = c2 + c2 = c + s2 = s + g = c * e[i] + h = c * p + r = math.Hypot(p, e[i]) + e[i+1] = s * r + s = e[i] / r + c = p / r + p = c*d[i] - s*g + d[i+1] = h + s*(c*g+s*d[i]) + + // Accumulate transformation. + for k := 0; k < n; k++ { + h = v.at(k, i+1) + v.set(k, i+1, s*v.at(k, i)+c*h) + v.set(k, i, c*v.at(k, i)-s*h) + } + } + p = -s * s2 * c3 * el1 * e[l] / dl1 + e[l] = s * p + d[l] = c * p + + // Check for convergence. + if math.Abs(e[l]) <= epsilon*tst1 { + break + } + } + } + d[l] += f + e[l] = 0 + } + + // Sort eigenvalues and corresponding vectors. + for i := 0; i < n-1; i++ { + k := i + p := d[i] + for j := i + 1; j < n; j++ { + if d[j] < p { + k = j + p = d[j] + } + } + if k != i { + d[k] = d[i] + d[i] = p + for j := 0; j < n; j++ { + p = v.at(j, i) + v.set(j, i, v.at(j, k)) + v.set(j, k, p) + } + } + } +} + +// Nonsymmetric reduction to Hessenberg form. +// +// This is derived from the Algol procedures orthes and ortran, +// by Martin and Wilkinson, Handbook for Auto. Comp., +// Vol.ii-Linear Algebra, and the corresponding +// Fortran subroutines in EISPACK. +func orthes(a *Dense) (hess, v *Dense) { + n, _ := a.Dims() + hess = a + + ort := make([]float64, n) + + low := 0 + high := n - 1 + + for m := low + 1; m <= high-1; m++ { + // Scale column. + var scale float64 + for i := m; i <= high; i++ { + scale += math.Abs(hess.at(i, m-1)) + } + if scale != 0 { + // Compute Householder transformation. + var h float64 + for i := high; i >= m; i-- { + ort[i] = hess.at(i, m-1) / scale + h += ort[i] * ort[i] + } + g := math.Sqrt(h) + if ort[m] > 0 { + g = -g + } + h -= ort[m] * g + ort[m] -= g + + // Apply Householder similarity transformation + // hess = (I-u*u'/h)*hess*(I-u*u')/h) + for j := m; j < n; j++ { + var f float64 + for i := high; i >= m; i-- { + f += ort[i] * hess.at(i, j) + } + f /= h + for i := m; i <= high; i++ { + hess.set(i, j, hess.at(i, j)-f*ort[i]) + } + } + + for i := 0; i <= high; i++ { + var f float64 + for j := high; j >= m; j-- { + f += ort[j] * hess.at(i, j) + } + f /= h + for j := m; j <= high; j++ { + hess.set(i, j, hess.at(i, j)-f*ort[j]) + } + } + ort[m] *= scale + hess.set(m, m-1, scale*g) + } + } + + // Accumulate transformations (Algol's ortran). + v = NewDense(n, n, nil) + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + if i == j { + v.set(i, j, 1) + } else { + v.set(i, j, 0) + } + } + } + for m := high - 1; m >= low+1; m-- { + if hess.at(m, m-1) != 0 { + for i := m + 1; i <= high; i++ { + ort[i] = hess.at(i, m-1) + } + for j := m; j <= high; j++ { + var g float64 + for i := m; i <= high; i++ { + g += ort[i] * v.at(i, j) + } + + // Double division avoids possible underflow + g = (g / ort[m]) / hess.at(m, m-1) + for i := m; i <= high; i++ { + v.set(i, j, v.at(i, j)+g*ort[i]) + } + } + } + } + + return hess, v +} + +// Nonsymmetric reduction from Hessenberg to real Schur form. +// +// This is derived from the Algol procedure hqr2, +// by Martin and Wilkinson, Handbook for Auto. Comp., +// Vol.ii-Linear Algebra, and the corresponding +// Fortran subroutine in EISPACK. +func hqr2(d, e []float64, hess, v *Dense, epsilon float64) { + // Initialize + nn := len(d) + n := nn - 1 + + low := 0 + high := n + + var exshift, p, q, r, s, z, t, w, x, y float64 + + // Store roots isolated by balanc and compute matrix norm + var norm float64 + for i := 0; i < nn; i++ { + if i < low || i > high { + d[i] = hess.at(i, i) + e[i] = 0 + } + for j := max(i-1, 0); j < nn; j++ { + norm += math.Abs(hess.at(i, j)) + } + } + + // Outer loop over eigenvalue index + for iter := 0; n >= low; { + // Look for single small sub-diagonal element + l := n + for l > low { + s = math.Abs(hess.at(l-1, l-1)) + math.Abs(hess.at(l, l)) + if s == 0 { + s = norm + } + if math.Abs(hess.at(l, l-1)) < epsilon*s { + break + } + l-- + } + + // Check for convergence + if l == n { + // One root found + hess.set(n, n, hess.at(n, n)+exshift) + d[n] = hess.at(n, n) + e[n] = 0 + n-- + iter = 0 + } else if l == n-1 { + // Two roots found + w = hess.at(n, n-1) * hess.at(n-1, n) + p = (hess.at(n-1, n-1) - hess.at(n, n)) / 2.0 + q = p*p + w + z = math.Sqrt(math.Abs(q)) + hess.set(n, n, hess.at(n, n)+exshift) + hess.set(n-1, n-1, hess.at(n-1, n-1)+exshift) + x = hess.at(n, n) + + // Real pair + if q >= 0 { + if p >= 0 { + z = p + z + } else { + z = p - z + } + d[n-1] = x + z + d[n] = d[n-1] + if z != 0 { + d[n] = x - w/z + } + e[n-1] = 0 + e[n] = 0 + x = hess.at(n, n-1) + s = math.Abs(x) + math.Abs(z) + p = x / s + q = z / s + r = math.Hypot(p, q) + p /= r + q /= r + + // Row modification + for j := n - 1; j < nn; j++ { + z = hess.at(n-1, j) + hess.set(n-1, j, q*z+p*hess.at(n, j)) + hess.set(n, j, q*hess.at(n, j)-p*z) + } + + // Column modification + for i := 0; i <= n; i++ { + z = hess.at(i, n-1) + hess.set(i, n-1, q*z+p*hess.at(i, n)) + hess.set(i, n, q*hess.at(i, n)-p*z) + } + + // Accumulate transformations + for i := low; i <= high; i++ { + z = v.at(i, n-1) + v.set(i, n-1, q*z+p*v.at(i, n)) + v.set(i, n, q*v.at(i, n)-p*z) + } + } else { + // Complex pair + d[n-1] = x + p + d[n] = x + p + e[n-1] = z + e[n] = -z + } + n -= 2 + iter = 0 + } else { + // No convergence yet + + // Form shift + x = hess.at(n, n) + y = 0 + w = 0 + if l < n { + y = hess.at(n-1, n-1) + w = hess.at(n, n-1) * hess.at(n-1, n) + } + + // Wilkinson's original ad hoc shift + if iter == 10 { + exshift += x + for i := low; i <= n; i++ { + hess.set(i, i, hess.at(i, i)-x) + } + s = math.Abs(hess.at(n, n-1)) + math.Abs(hess.at(n-1, n-2)) + x = 0.75 * s + y = x + w = -0.4375 * s * s + } + + // MATLAB's new ad hoc shift + if iter == 30 { + s = (y - x) / 2 + s = s*s + w + if s > 0 { + s = math.Sqrt(s) + if y < x { + s = -s + } + s = x - w/((y-x)/2+s) + for i := low; i <= n; i++ { + hess.set(i, i, hess.at(i, i)-s) + } + exshift += s + x = 0.964 + y = x + w = x + } + } + + iter++ // Could check iteration count here. + + // Look for two consecutive small sub-diagonal elements + m := n - 2 + for m >= l { + z = hess.at(m, m) + r = x - z + s = y - z + p = (r*s-w)/hess.at(m+1, m) + hess.at(m, m+1) + q = hess.at(m+1, m+1) - z - r - s + r = hess.at(m+2, m+1) + s = math.Abs(p) + math.Abs(q) + math.Abs(r) + p /= s + q /= s + r /= s + if m == l { + break + } + if math.Abs(hess.at(m, m-1))*(math.Abs(q)+math.Abs(r)) < + epsilon*(math.Abs(p)*(math.Abs(hess.at(m-1, m-1))+math.Abs(z)+math.Abs(hess.at(m+1, m+1)))) { + break + } + m-- + } + + for i := m + 2; i <= n; i++ { + hess.set(i, i-2, 0) + if i > m+2 { + hess.set(i, i-3, 0) + } + } + + // Double QR step involving rows l:n and columns m:n + for k := m; k <= n-1; k++ { + last := k == n-1 + if k != m { + p = hess.at(k, k-1) + q = hess.at(k+1, k-1) + if !last { + r = hess.at(k+2, k-1) + } else { + r = 0 + } + x = math.Abs(p) + math.Abs(q) + math.Abs(r) + if x == 0 { + continue + } + p /= x + q /= x + r /= x + } + + s = math.Sqrt(p*p + q*q + r*r) + if p < 0 { + s = -s + } + if s != 0 { + if k != m { + hess.set(k, k-1, -s*x) + } else if l != m { + hess.set(k, k-1, -hess.at(k, k-1)) + } + p += s + x = p / s + y = q / s + z = r / s + q /= p + r /= p + + // Row modification + for j := k; j < nn; j++ { + p = hess.at(k, j) + q*hess.at(k+1, j) + if !last { + p += r * hess.at(k+2, j) + hess.set(k+2, j, hess.at(k+2, j)-p*z) + } + hess.set(k, j, hess.at(k, j)-p*x) + hess.set(k+1, j, hess.at(k+1, j)-p*y) + } + + // Column modification + for i := 0; i <= min(n, k+3); i++ { + p = x*hess.at(i, k) + y*hess.at(i, k+1) + if !last { + p += z * hess.at(i, k+2) + hess.set(i, k+2, hess.at(i, k+2)-p*r) + } + hess.set(i, k, hess.at(i, k)-p) + hess.set(i, k+1, hess.at(i, k+1)-p*q) + } + + // Accumulate transformations + for i := low; i <= high; i++ { + p = x*v.at(i, k) + y*v.at(i, k+1) + if !last { + p += z * v.at(i, k+2) + v.set(i, k+2, v.at(i, k+2)-p*r) + } + v.set(i, k, v.at(i, k)-p) + v.set(i, k+1, v.at(i, k+1)-p*q) + } + } + } + } + } + + // Backsubstitute to find vectors of upper triangular form + if norm == 0 { + return + } + + for n = nn - 1; n >= 0; n-- { + p = d[n] + q = e[n] + + if q == 0 { + // Real vector + l := n + hess.set(n, n, 1) + for i := n - 1; i >= 0; i-- { + w = hess.at(i, i) - p + r = 0 + for j := l; j <= n; j++ { + r += hess.at(i, j) * hess.at(j, n) + } + if e[i] < 0 { + z = w + s = r + } else { + l = i + if e[i] == 0 { + if w != 0 { + hess.set(i, n, -r/w) + } else { + hess.set(i, n, -r/(epsilon*norm)) + } + } else { + // Solve real equations + x = hess.at(i, i+1) + y = hess.at(i+1, i) + q = (d[i]-p)*(d[i]-p) + e[i]*e[i] + t = (x*s - z*r) / q + hess.set(i, n, t) + if math.Abs(x) > math.Abs(z) { + hess.set(i+1, n, (-r-w*t)/x) + } else { + hess.set(i+1, n, (-s-y*t)/z) + } + } + + // Overflow control + t = math.Abs(hess.at(i, n)) + if epsilon*t*t > 1 { + for j := i; j <= n; j++ { + hess.set(j, n, hess.at(j, n)/t) + } + } + } + } + } else if q < 0 { + // Complex vector + + l := n - 1 + + // Last vector component imaginary so matrix is triangular + if math.Abs(hess.at(n, n-1)) > math.Abs(hess.at(n-1, n)) { + hess.set(n-1, n-1, q/hess.at(n, n-1)) + hess.set(n-1, n, -(hess.at(n, n)-p)/hess.at(n, n-1)) + } else { + c := complex(0, -hess.at(n-1, n)) / complex(hess.at(n-1, n-1)-p, q) + hess.set(n-1, n-1, real(c)) + hess.set(n-1, n, imag(c)) + } + hess.set(n, n-1, 0) + hess.set(n, n, 1) + + for i := n - 2; i >= 0; i-- { + var ra, sa, vr, vi float64 + for j := l; j <= n; j++ { + ra += hess.at(i, j) * hess.at(j, n-1) + sa += hess.at(i, j) * hess.at(j, n) + } + w = hess.at(i, i) - p + + if e[i] < 0 { + z = w + r = ra + s = sa + } else { + l = i + if e[i] == 0 { + c := complex(-ra, -sa) / complex(w, q) + hess.set(i, n-1, real(c)) + hess.set(i, n, imag(c)) + } else { + // Solve complex equations + x = hess.at(i, i+1) + y = hess.at(i+1, i) + vr = (d[i]-p)*(d[i]-p) + e[i]*e[i] - q*q + vi = (d[i] - p) * 2 * q + if vr == 0 && vi == 0 { + vr = epsilon * norm * (math.Abs(w) + math.Abs(q) + math.Abs(x) + math.Abs(y) + math.Abs(z)) + } + c := complex(x*r-z*ra+q*sa, x*s-z*sa-q*ra) / complex(vr, vi) + hess.set(i, n-1, real(c)) + hess.set(i, n, imag(c)) + if math.Abs(x) > (math.Abs(z) + math.Abs(q)) { + hess.set(i+1, n-1, (-ra-w*hess.at(i, n-1)+q*hess.at(i, n))/x) + hess.set(i+1, n, (-sa-w*hess.at(i, n)-q*hess.at(i, n-1))/x) + } else { + c := complex(-r-y*hess.at(i, n-1), -s-y*hess.at(i, n)) / complex(z, q) + hess.set(i+1, n-1, real(c)) + hess.set(i+1, n, imag(c)) + } + } + + // Overflow control + t = math.Max(math.Abs(hess.at(i, n-1)), math.Abs(hess.at(i, n))) + if (epsilon*t)*t > 1 { + for j := i; j <= n; j++ { + hess.set(j, n-1, hess.at(j, n-1)/t) + hess.set(j, n, hess.at(j, n)/t) + } + } + } + } + } + } + + // Vectors of isolated roots + for i := 0; i < nn; i++ { + if i < low || i > high { + for j := i; j < nn; j++ { + v.set(i, j, hess.at(i, j)) + } + } + } + + // Back transformation to get eigenvectors of original matrix + for j := nn - 1; j >= low; j-- { + for i := low; i <= high; i++ { + z = 0 + for k := low; k <= min(j, high); k++ { + z += v.at(i, k) * hess.at(k, j) + } + v.set(i, j, z) + } + } +} + +// D returns the block diagonal eigenvalue matrix from the real and imaginary +// components d and e. +func (f EigenFactors) D() *Dense { + d, e := f.d, f.e + var n int + if n = len(d); n != len(e) { + panic(ErrSquare) + } + dm := NewDense(n, n, nil) + for i := 0; i < n; i++ { + dm.set(i, i, d[i]) + if e[i] > 0 { + dm.set(i, i+1, e[i]) + } else if e[i] < 0 { + dm.set(i, i-1, e[i]) + } + } + return dm +} diff --git a/vendor/github.com/gonum/matrix/mat64/format.go b/vendor/github.com/gonum/matrix/mat64/format.go new file mode 100644 index 00000000..a4cc6ff2 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/format.go @@ -0,0 +1,153 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mat64 + +import ( + "fmt" + "strconv" +) + +// Format prints a pretty representation of m to the fs io.Writer. The format character c +// specifies the numerical representation of of elements; valid values are those for float64 +// specified in the fmt package, with their associated flags. In addition to this, a '#' for +// all valid verbs except 'v' indicates that zero values be represented by the dot character. +// The '#' associated with the 'v' verb formats the matrix with Go syntax representation. +// The printed range of the matrix can be limited by specifying a positive value for margin; +// If margin is greater than zero, only the first and last margin rows/columns of the matrix +// are output. +func Format(m Matrix, margin int, dot byte, fs fmt.State, c rune) { + rows, cols := m.Dims() + + var printed int + if margin <= 0 { + printed = rows + if cols > printed { + printed = cols + } + } else { + printed = margin + } + + prec, pOk := fs.Precision() + if !pOk { + prec = -1 + } + + var ( + maxWidth int + buf, pad []byte + ) + switch c { + case 'v', 'e', 'E', 'f', 'F', 'g', 'G': + // Note that the '#' flag should have been dealt with by the type. + // So %v is treated exactly as %g here. + if c == 'v' { + buf, maxWidth = maxCellWidth(m, 'g', printed, prec) + } else { + buf, maxWidth = maxCellWidth(m, c, printed, prec) + } + default: + fmt.Fprintf(fs, "%%!%c(%T=Dims(%d, %d))", c, m, rows, cols) + return + } + width, _ := fs.Width() + width = max(width, maxWidth) + pad = make([]byte, max(width, 2)) + for i := range pad { + pad[i] = ' ' + } + + if rows > 2*printed || cols > 2*printed { + fmt.Fprintf(fs, "Dims(%d, %d)\n", rows, cols) + } + + skipZero := fs.Flag('#') + for i := 0; i < rows; i++ { + var el string + switch { + case rows == 1: + fmt.Fprint(fs, "[") + el = "]" + case i == 0: + fmt.Fprint(fs, "⎡") + el = "⎤\n" + case i < rows-1: + fmt.Fprint(fs, "⎢") + el = "⎥\n" + default: + fmt.Fprint(fs, "⎣") + el = "⎦" + } + + for j := 0; j < cols; j++ { + if j >= printed && j < cols-printed { + j = cols - printed - 1 + if i == 0 || i == rows-1 { + fmt.Fprint(fs, "... ... ") + } else { + fmt.Fprint(fs, " ") + } + continue + } + + v := m.At(i, j) + if v == 0 && skipZero { + buf = buf[:1] + buf[0] = dot + } else { + if c == 'v' { + buf = strconv.AppendFloat(buf[:0], v, 'g', prec, 64) + } else { + buf = strconv.AppendFloat(buf[:0], v, byte(c), prec, 64) + } + } + if fs.Flag('-') { + fs.Write(buf) + fs.Write(pad[:width-len(buf)]) + } else { + fs.Write(pad[:width-len(buf)]) + fs.Write(buf) + } + + if j < cols-1 { + fs.Write(pad[:2]) + } + } + + fmt.Fprint(fs, el) + + if i >= printed-1 && i < rows-printed && 2*printed < rows { + i = rows - printed - 1 + fmt.Fprint(fs, " .\n .\n .\n") + continue + } + } +} + +func maxCellWidth(m Matrix, c rune, printed, prec int) ([]byte, int) { + var ( + buf = make([]byte, 0, 64) + rows, cols = m.Dims() + max int + ) + for i := 0; i < rows; i++ { + if i >= printed-1 && i < rows-printed && 2*printed < rows { + i = rows - printed - 1 + continue + } + for j := 0; j < cols; j++ { + if j >= printed && j < cols-printed { + continue + } + + buf = strconv.AppendFloat(buf, m.At(i, j), byte(c), prec, 64) + if len(buf) > max { + max = len(buf) + } + buf = buf[:0] + } + } + return buf, max +} diff --git a/vendor/github.com/gonum/matrix/mat64/index_bound_checks.go b/vendor/github.com/gonum/matrix/mat64/index_bound_checks.go new file mode 100644 index 00000000..282b69bd --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/index_bound_checks.go @@ -0,0 +1,151 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file must be kept in sync with index_no_bound_checks.go. + +//+build bounds + +package mat64 + +import "github.com/gonum/blas" + +// At returns the element at row r, column c. +func (m *Dense) At(r, c int) float64 { + return m.at(r, c) +} + +func (m *Dense) at(r, c int) float64 { + if r >= m.mat.Rows || r < 0 { + panic(ErrRowAccess) + } + if c >= m.mat.Cols || c < 0 { + panic(ErrColAccess) + } + return m.mat.Data[r*m.mat.Stride+c] +} + +// Set sets the element at row r, column c to the value v. +func (m *Dense) Set(r, c int, v float64) { + m.set(r, c, v) +} + +func (m *Dense) set(r, c int, v float64) { + if r >= m.mat.Rows || r < 0 { + panic(ErrRowAccess) + } + if c >= m.mat.Cols || c < 0 { + panic(ErrColAccess) + } + m.mat.Data[r*m.mat.Stride+c] = v +} + +// At returns the element at row r, column c. It panics if c is not zero. +func (v *Vector) At(r, c int) float64 { + if c != 0 { + panic(ErrColAccess) + } + return v.at(r) +} + +func (v *Vector) at(r int) float64 { + if r < 0 || r >= v.n { + panic(ErrRowAccess) + } + return v.mat.Data[r*v.mat.Inc] +} + +// Set sets the element at row r to the value val. It panics if r is less than +// zero or greater than the length. +func (v *Vector) SetVec(i int, val float64) { + v.setVec(i, val) +} + +func (v *Vector) setVec(i int, val float64) { + if i < 0 || i >= v.n { + panic(ErrVectorAccess) + } + v.mat.Data[i*v.mat.Inc] = val +} + +// At returns the element at row r and column c. +func (t *SymDense) At(r, c int) float64 { + return t.at(r, c) +} + +func (t *SymDense) at(r, c int) float64 { + if r >= t.mat.N || r < 0 { + panic(ErrRowAccess) + } + if c >= t.mat.N || c < 0 { + panic(ErrColAccess) + } + if r > c { + r, c = c, r + } + return t.mat.Data[r*t.mat.Stride+c] +} + +// SetSym sets the elements at (r,c) and (c,r) to the value v. +func (t *SymDense) SetSym(r, c int, v float64) { + t.set(r, c, v) +} + +func (t *SymDense) set(r, c int, v float64) { + if r >= t.mat.N || r < 0 { + panic(ErrRowAccess) + } + if c >= t.mat.N || c < 0 { + panic(ErrColAccess) + } + if r > c { + r, c = c, r + } + t.mat.Data[r*t.mat.Stride+c] = v +} + +// At returns the element at row r, column c. +func (t *TriDense) At(r, c int) float64 { + return t.at(r, c) +} + +func (t *TriDense) at(r, c int) float64 { + if r >= t.mat.N || r < 0 { + panic(ErrRowAccess) + } + if c >= t.mat.N || c < 0 { + panic(ErrColAccess) + } + if t.mat.Uplo == blas.Upper { + if r > c { + return 0 + } + return t.mat.Data[r*t.mat.Stride+c] + } + if r < c { + return 0 + } + return t.mat.Data[r*t.mat.Stride+c] +} + +// SetTri sets the element of the triangular matrix at row r, column c to the value v. +// It panics if the location is outside the appropriate half of the matrix. +func (t *TriDense) SetTri(r, c int, v float64) { + t.set(r, c, v) +} + +func (t *TriDense) set(r, c int, v float64) { + if r >= t.mat.N || r < 0 { + panic(ErrRowAccess) + } + if c >= t.mat.N || c < 0 { + panic(ErrColAccess) + } + if t.mat.Uplo == blas.Upper && r > c { + panic("mat64: triangular set out of bounds") + } + if t.mat.Uplo == blas.Lower && r < c { + panic("mat64: triangular set out of bounds") + } + t.mat.Data[r*t.mat.Stride+c] = v +} diff --git a/vendor/github.com/gonum/matrix/mat64/index_no_bound_checks.go b/vendor/github.com/gonum/matrix/mat64/index_no_bound_checks.go new file mode 100644 index 00000000..716cbf3f --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/index_no_bound_checks.go @@ -0,0 +1,151 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file must be kept in sync with index_bound_checks.go. + +//+build !bounds + +package mat64 + +import "github.com/gonum/blas" + +// At returns the element at row r, column c. +func (m *Dense) At(r, c int) float64 { + if r >= m.mat.Rows || r < 0 { + panic(ErrRowAccess) + } + if c >= m.mat.Cols || c < 0 { + panic(ErrColAccess) + } + return m.at(r, c) +} + +func (m *Dense) at(r, c int) float64 { + return m.mat.Data[r*m.mat.Stride+c] +} + +// Set sets the element at row r, column c to the value v. +func (m *Dense) Set(r, c int, v float64) { + if r >= m.mat.Rows || r < 0 { + panic(ErrRowAccess) + } + if c >= m.mat.Cols || c < 0 { + panic(ErrColAccess) + } + m.set(r, c, v) +} + +func (m *Dense) set(r, c int, v float64) { + m.mat.Data[r*m.mat.Stride+c] = v +} + +// At returns the element at row r, column c. It panics if c is not zero. +func (v *Vector) At(r, c int) float64 { + if r < 0 || r >= v.n { + panic(ErrRowAccess) + } + if c != 0 { + panic(ErrColAccess) + } + return v.at(r) +} + +func (v *Vector) at(r int) float64 { + return v.mat.Data[r*v.mat.Inc] +} + +// Set sets the element at row r to the value val. It panics if r is less than +// zero or greater than the length. +func (v *Vector) SetVec(i int, val float64) { + if i < 0 || i >= v.n { + panic(ErrVectorAccess) + } + v.setVec(i, val) +} + +func (v *Vector) setVec(i int, val float64) { + v.mat.Data[i*v.mat.Inc] = val +} + +// At returns the element at row r and column c. +func (s *SymDense) At(r, c int) float64 { + if r >= s.mat.N || r < 0 { + panic(ErrRowAccess) + } + if c >= s.mat.N || c < 0 { + panic(ErrColAccess) + } + return s.at(r, c) +} + +func (s *SymDense) at(r, c int) float64 { + if r > c { + r, c = c, r + } + return s.mat.Data[r*s.mat.Stride+c] +} + +// SetSym sets the elements at (r,c) and (c,r) to the value v. +func (s *SymDense) SetSym(r, c int, v float64) { + if r >= s.mat.N || r < 0 { + panic(ErrRowAccess) + } + if c >= s.mat.N || c < 0 { + panic(ErrColAccess) + } + s.set(r, c, v) +} + +func (s *SymDense) set(r, c int, v float64) { + if r > c { + r, c = c, r + } + s.mat.Data[r*s.mat.Stride+c] = v +} + +// At returns the element at row r, column c. +func (t *TriDense) At(r, c int) float64 { + if r >= t.mat.N || r < 0 { + panic(ErrRowAccess) + } + if c >= t.mat.N || c < 0 { + panic(ErrColAccess) + } + return t.at(r, c) +} + +func (t *TriDense) at(r, c int) float64 { + if t.mat.Uplo == blas.Upper { + if r > c { + return 0 + } + return t.mat.Data[r*t.mat.Stride+c] + } + if r < c { + return 0 + } + return t.mat.Data[r*t.mat.Stride+c] +} + +// SetTri sets the element at row r, column c to the value v. +// It panics if the location is outside the appropriate half of the matrix. +func (t *TriDense) SetTri(r, c int, v float64) { + if r >= t.mat.N || r < 0 { + panic(ErrRowAccess) + } + if c >= t.mat.N || c < 0 { + panic(ErrColAccess) + } + if t.mat.Uplo == blas.Upper && r > c { + panic("mat64: triangular set out of bounds") + } + if t.mat.Uplo == blas.Lower && r < c { + panic("mat64: triangular set out of bounds") + } + t.set(r, c, v) +} + +func (t *TriDense) set(r, c int, v float64) { + t.mat.Data[r*t.mat.Stride+c] = v +} diff --git a/vendor/github.com/gonum/matrix/mat64/inner.go b/vendor/github.com/gonum/matrix/mat64/inner.go new file mode 100644 index 00000000..77616bae --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/inner.go @@ -0,0 +1,102 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mat64 + +import ( + "github.com/gonum/blas" + "github.com/gonum/internal/asm" +) + +// Inner computes the generalized inner product +// x^T A y +// between vectors x and y with matrix A. This is only a true inner product if +// A is symmetric positive definite, though the operation works for any matrix A. +// +// Inner panics if x.Len != m or y.Len != n when A is an m x n matrix. +func Inner(x *Vector, A Matrix, y *Vector) float64 { + m, n := A.Dims() + if x.Len() != m { + panic(ErrShape) + } + if y.Len() != n { + panic(ErrShape) + } + if m == 0 || n == 0 { + return 0 + } + + var sum float64 + + switch b := A.(type) { + case RawSymmetricer: + bmat := b.RawSymmetric() + if bmat.Uplo != blas.Upper { + // Panic as a string not a mat64.Error. + panic(badSymTriangle) + } + for i := 0; i < x.Len(); i++ { + xi := x.at(i) + if xi != 0 { + if y.mat.Inc == 1 { + sum += xi * asm.DdotUnitary( + bmat.Data[i*bmat.Stride+i:i*bmat.Stride+n], + y.mat.Data[i:], + ) + } else { + sum += xi * asm.DdotInc( + bmat.Data[i*bmat.Stride+i:i*bmat.Stride+n], + y.mat.Data[i*y.mat.Inc:], uintptr(n-i), + 1, uintptr(y.mat.Inc), + 0, 0, + ) + } + } + yi := y.at(i) + if i != n-1 && yi != 0 { + if x.mat.Inc == 1 { + sum += yi * asm.DdotUnitary( + bmat.Data[i*bmat.Stride+i+1:i*bmat.Stride+n], + x.mat.Data[i+1:], + ) + } else { + sum += yi * asm.DdotInc( + bmat.Data[i*bmat.Stride+i+1:i*bmat.Stride+n], + x.mat.Data[(i+1)*x.mat.Inc:], uintptr(n-i-1), + 1, uintptr(x.mat.Inc), + 0, 0, + ) + } + } + } + case RawMatrixer: + bmat := b.RawMatrix() + for i := 0; i < x.Len(); i++ { + xi := x.at(i) + if xi != 0 { + if y.mat.Inc == 1 { + sum += xi * asm.DdotUnitary( + bmat.Data[i*bmat.Stride:i*bmat.Stride+n], + y.mat.Data, + ) + } else { + sum += xi * asm.DdotInc( + bmat.Data[i*bmat.Stride:i*bmat.Stride+n], + y.mat.Data, uintptr(n), + 1, uintptr(y.mat.Inc), + 0, 0, + ) + } + } + } + default: + for i := 0; i < x.Len(); i++ { + xi := x.at(i) + for j := 0; j < y.Len(); j++ { + sum += xi * A.At(i, j) * y.at(j) + } + } + } + return sum +} diff --git a/vendor/github.com/gonum/matrix/mat64/io.go b/vendor/github.com/gonum/matrix/mat64/io.go new file mode 100644 index 00000000..043d4cfb --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/io.go @@ -0,0 +1,18 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mat64 + +import ( + "encoding/binary" +) + +var ( + littleEndian = binary.LittleEndian + bigEndian = binary.BigEndian + defaultEndian = littleEndian + + sizeInt64 = binary.Size(int64(0)) + sizeFloat64 = binary.Size(float64(0)) +) diff --git a/vendor/github.com/gonum/matrix/mat64/lq.go b/vendor/github.com/gonum/matrix/mat64/lq.go new file mode 100644 index 00000000..6d1c6165 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/lq.go @@ -0,0 +1,193 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mat64 + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +type LQFactor struct { + LQ *Dense + lDiag []float64 +} + +// LQ computes an LQ Decomposition for an m-by-n matrix a with m <= n by Householder +// reflections. The LQ decomposition is an m-by-n orthogonal matrix q and an m-by-m +// lower triangular matrix l so that a = l.q. LQ will panic with ErrShape if m > n. +// +// The LQ decomposition always exists, even if the matrix does not have full rank, +// so LQ will never fail unless m > n. The primary use of the LQ decomposition is +// in the least squares solution of non-square systems of simultaneous linear equations. +// This will fail if LQIsFullRank() returns false. The matrix a is overwritten by the +// decomposition. +func LQ(a *Dense) LQFactor { + // Initialize. + m, n := a.Dims() + if m > n { + panic(ErrShape) + } + + lq := *a + + lDiag := make([]float64, m) + projs := NewVector(m, nil) + + // Main loop. + for k := 0; k < m; k++ { + hh := lq.RawRowView(k)[k:] + norm := blas64.Nrm2(len(hh), blas64.Vector{Inc: 1, Data: hh}) + lDiag[k] = norm + + if norm != 0 { + hhNorm := (norm * math.Sqrt(1-hh[0]/norm)) + if hhNorm == 0 { + hh[0] = 0 + } else { + // Form k-th Householder vector. + s := 1 / hhNorm + hh[0] -= norm + blas64.Scal(len(hh), s, blas64.Vector{Inc: 1, Data: hh}) + + // Apply transformation to remaining columns. + if k < m-1 { + a = lq.View(k+1, k, m-k-1, n-k).(*Dense) + projs = projs.ViewVec(0, m-k-1) + projs.MulVec(a, false, NewVector(len(hh), hh)) + + for j := 0; j < m-k-1; j++ { + dst := a.RawRowView(j) + blas64.Axpy(len(dst), -projs.at(j), + blas64.Vector{Inc: 1, Data: hh}, + blas64.Vector{Inc: 1, Data: dst}, + ) + } + } + } + } + } + *a = lq + + return LQFactor{a, lDiag} +} + +// IsFullRank returns whether the L matrix and hence a has full rank. +func (f LQFactor) IsFullRank() bool { + for _, v := range f.lDiag { + if v == 0 { + return false + } + } + return true +} + +// L returns the lower triangular factor for the LQ decomposition. +func (f LQFactor) L() *Dense { + lq, lDiag := f.LQ, f.lDiag + m, _ := lq.Dims() + l := NewDense(m, m, nil) + for i, v := range lDiag { + for j := 0; j < m; j++ { + if i < j { + l.set(j, i, lq.at(j, i)) + } else if i == j { + l.set(j, i, v) + } + } + } + return l +} + +// replaces x with Q.x +func (f LQFactor) applyQTo(x *Dense, trans bool) { + nh, nc := f.LQ.Dims() + m, n := x.Dims() + if m != nc { + panic(ErrShape) + } + proj := make([]float64, n) + + if trans { + for k := nh - 1; k >= 0; k-- { + hh := f.LQ.RawRowView(k)[k:] + + sub := x.View(k, 0, m-k, n).(*Dense) + + blas64.Gemv(blas.Trans, + 1, sub.mat, blas64.Vector{Inc: 1, Data: hh}, + 0, blas64.Vector{Inc: 1, Data: proj}, + ) + for i := k; i < m; i++ { + row := x.RawRowView(i) + blas64.Axpy(n, -hh[i-k], + blas64.Vector{Inc: 1, Data: proj}, + blas64.Vector{Inc: 1, Data: row}, + ) + } + } + } else { + for k := 0; k < nh; k++ { + hh := f.LQ.RawRowView(k)[k:] + + sub := x.View(k, 0, m-k, n).(*Dense) + + blas64.Gemv(blas.Trans, + 1, sub.mat, blas64.Vector{Inc: 1, Data: hh}, + 0, blas64.Vector{Inc: 1, Data: proj}, + ) + for i := k; i < m; i++ { + row := x.RawRowView(i) + blas64.Axpy(n, -hh[i-k], + blas64.Vector{Inc: 1, Data: proj}, + blas64.Vector{Inc: 1, Data: row}, + ) + } + } + } +} + +// Solve computes minimum norm least squares solution of a.x = b where b has as many rows as a. +// A matrix x is returned that minimizes the two norm of Q*R*X-B. Solve will panic +// if a is not full rank. +func (f LQFactor) Solve(b *Dense) (x *Dense) { + lq := f.LQ + lDiag := f.lDiag + m, n := lq.Dims() + bm, bn := b.Dims() + if bm != m { + panic(ErrShape) + } + if !f.IsFullRank() { + panic(ErrSingular) + } + + x = NewDense(n, bn, nil) + x.Copy(b) + + tau := make([]float64, m) + for i := range tau { + tau[i] = lq.at(i, i) + lq.set(i, i, lDiag[i]) + } + lqT := blas64.Triangular{ + // N omitted since it is not used by Trsm. + Stride: lq.mat.Stride, + Data: lq.mat.Data, + Uplo: blas.Lower, + Diag: blas.NonUnit, + } + x.mat.Rows = bm + blas64.Trsm(blas.Left, blas.NoTrans, 1, lqT, x.mat) + x.mat.Rows = n + for i := range tau { + lq.set(i, i, tau[i]) + } + + f.applyQTo(x, true) + + return x +} diff --git a/vendor/github.com/gonum/matrix/mat64/lu.go b/vendor/github.com/gonum/matrix/mat64/lu.go new file mode 100644 index 00000000..3d6c0998 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/lu.go @@ -0,0 +1,212 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// Based on the LUDecomposition class from Jama 1.0.3. + +package mat64 + +import ( + "math" +) + +type LUFactors struct { + LU *Dense + Pivot []int + Sign int +} + +// LU performs an LU Decomposition for an m-by-n matrix a. +// +// If m >= n, the LU decomposition is an m-by-n unit lower triangular matrix L, +// an n-by-n upper triangular matrix U, and a permutation vector piv of length m +// so that A(piv,:) = L*U. +// +// If m < n, then L is m-by-m and U is m-by-n. +// +// The LU decompostion with pivoting always exists, even if the matrix is +// singular, so LU will never fail. The primary use of the LU decomposition +// is in the solution of square systems of simultaneous linear equations. This +// will fail if IsSingular() returns true. +func LU(a *Dense) LUFactors { + // Use a "left-looking", dot-product, Crout/Doolittle algorithm. + m, n := a.Dims() + lu := a + + piv := make([]int, m) + for i := range piv { + piv[i] = i + } + sign := 1 + + // Outer loop. + luColj := make([]float64, m) + for j := 0; j < n; j++ { + + // Make a copy of the j-th column to localize references. + for i := 0; i < m; i++ { + luColj[i] = lu.at(i, j) + } + + // Apply previous transformations. + for i := 0; i < m; i++ { + luRowi := lu.RawRowView(i) + + // Most of the time is spent in the following dot product. + kmax := min(i, j) + var s float64 + for k, v := range luRowi[:kmax] { + s += v * luColj[k] + } + + luColj[i] -= s + luRowi[j] = luColj[i] + } + + // Find pivot and exchange if necessary. + p := j + for i := j + 1; i < m; i++ { + if math.Abs(luColj[i]) > math.Abs(luColj[p]) { + p = i + } + } + if p != j { + for k := 0; k < n; k++ { + t := lu.at(p, k) + lu.set(p, k, lu.at(j, k)) + lu.set(j, k, t) + } + piv[p], piv[j] = piv[j], piv[p] + sign = -sign + } + + // Compute multipliers. + if j < m && lu.at(j, j) != 0 { + for i := j + 1; i < m; i++ { + lu.set(i, j, lu.at(i, j)/lu.at(j, j)) + } + } + } + + return LUFactors{lu, piv, sign} +} + +// IsSingular returns whether the the upper triangular factor and hence a is +// singular. +func (f LUFactors) IsSingular() bool { + lu := f.LU + _, n := lu.Dims() + for j := 0; j < n; j++ { + if lu.at(j, j) == 0 { + return true + } + } + return false +} + +// L returns the lower triangular factor of the LU decomposition. +func (f LUFactors) L() *Dense { + lu := f.LU + m, n := lu.Dims() + if m < n { + n = m + } + l := NewDense(m, n, nil) + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if i > j { + l.set(i, j, lu.at(i, j)) + } else if i == j { + l.set(i, j, 1) + } + } + } + return l +} + +// U returns the upper triangular factor of the LU decomposition. +func (f LUFactors) U() *Dense { + lu := f.LU + m, n := lu.Dims() + u := NewDense(m, n, nil) + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if i <= j { + u.set(i, j, lu.at(i, j)) + } + } + } + return u +} + +// Det returns the determinant of matrix a decomposed into lu. The matrix +// a must have been square. +func (f LUFactors) Det() float64 { + lu, sign := f.LU, f.Sign + m, n := lu.Dims() + if m != n { + panic(ErrSquare) + } + d := float64(sign) + for j := 0; j < n; j++ { + d *= lu.at(j, j) + } + return d +} + +// Solve computes a solution of a.x = b where b has as many rows as a. A matrix x +// is returned that minimizes the two norm of L*U*X - B(piv,:). Solve will panic +// if a is singular. The matrix b is overwritten during the call. +func (f LUFactors) Solve(b *Dense) (x *Dense) { + lu, piv := f.LU, f.Pivot + m, n := lu.Dims() + bm, bn := b.Dims() + if bm != m { + panic(ErrShape) + } + if f.IsSingular() { + panic(ErrSingular) + } + + // Copy right hand side with pivoting + nx := bn + x = pivotRows(b, piv) + + // Solve L*Y = B(piv,:) + for k := 0; k < n; k++ { + for i := k + 1; i < n; i++ { + for j := 0; j < nx; j++ { + x.set(i, j, x.at(i, j)-x.at(k, j)*lu.at(i, k)) + } + } + } + + // Solve U*X = Y; + for k := n - 1; k >= 0; k-- { + for j := 0; j < nx; j++ { + x.set(k, j, x.at(k, j)/lu.at(k, k)) + } + for i := 0; i < k; i++ { + for j := 0; j < nx; j++ { + x.set(i, j, x.at(i, j)-x.at(k, j)*lu.at(i, k)) + } + } + } + + return x +} + +func pivotRows(a *Dense, piv []int) *Dense { + visit := make([]bool, len(piv)) + _, n := a.Dims() + tmpRow := make([]float64, n) + for to, from := range piv { + for to != from && !visit[from] { + visit[from], visit[to] = true, true + a.Row(tmpRow, from) + a.SetRow(from, a.rowView(to)) + a.SetRow(to, tmpRow) + to, from = from, piv[from] + } + } + return a +} diff --git a/vendor/github.com/gonum/matrix/mat64/matrix.go b/vendor/github.com/gonum/matrix/mat64/matrix.go new file mode 100644 index 00000000..fcf92fc9 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/matrix.go @@ -0,0 +1,472 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package mat64 provides basic linear algebra operations for float64 matrices. +// +// Note that in all interfaces that assign the result to the receiver, the receiver must +// be either the correct dimensions for the result or a zero-sized matrix. In the latter +// case, matrix data is allocated and stored in the receiver. If the matrix dimensions +// do not match the result, the method must panic. +package mat64 + +import ( + "github.com/gonum/blas/blas64" +) + +// Matrix is the basic matrix interface type. +type Matrix interface { + // Dims returns the dimensions of a Matrix. + Dims() (r, c int) + + // At returns the value of a matrix element at (r, c). It will panic if r or c are + // out of bounds for the matrix. + At(r, c int) float64 +} + +// Mutable is a matrix interface type that allows elements to be altered. +type Mutable interface { + // Set alters the matrix element at (r, c) to v. It will panic if r or c are out of + // bounds for the matrix. + Set(r, c int, v float64) + + Matrix +} + +// A Vectorer can return rows and columns of the represented matrix. +type Vectorer interface { + // Row returns a slice of float64 for the row specified. It will panic if the index + // is out of bounds. If the call requires a copy and dst is not nil it will be used and + // returned, if it is not nil the number of elements copied will be the minimum of the + // length of the slice and the number of columns in the matrix. + Row(dst []float64, i int) []float64 + + // Col returns a slice of float64 for the column specified. It will panic if the index + // is out of bounds. If the call requires a copy and dst is not nil it will be used and + // returned, if it is not nil the number of elements copied will be the minimum of the + // length of the slice and the number of rows in the matrix. + Col(dst []float64, j int) []float64 +} + +// A VectorSetter can set rows and columns in the represented matrix. +type VectorSetter interface { + // SetRow sets the values of the specified row to the values held in a slice of float64. + // It will panic if the index is out of bounds. The number of elements copied is + // returned and will be the minimum of the length of the slice and the number of columns + // in the matrix. + SetRow(i int, src []float64) int + + // SetCol sets the values of the specified column to the values held in a slice of float64. + // It will panic if the index is out of bounds. The number of elements copied is + // returned and will be the minimum of the length of the slice and the number of rows + // in the matrix. + SetCol(i int, src []float64) int +} + +// A RowViewer can return a Vector reflecting a row that is backed by the matrix +// data. The Vector returned will have Len() == nCols. +type RowViewer interface { + RowView(r int) *Vector +} + +// A RawRowViewer can return a slice of float64 reflecting a row that is backed by the matrix +// data. +type RawRowViewer interface { + RawRowView(r int) []float64 +} + +// A ColViewer can return a Vector reflecting a row that is backed by the matrix +// data. The Vector returned will have Len() == nRows. +type ColViewer interface { + ColView(c int) *Vector +} + +// A RawColViewer can return a slice of float64 reflecting a column that is backed by the matrix +// data. +type RawColViewer interface { + RawColView(c int) *Vector +} + +// A Cloner can make a copy of a into the receiver, overwriting the previous value of the +// receiver. The clone operation does not make any restriction on shape. +type Cloner interface { + Clone(a Matrix) +} + +// A Reseter can reset the matrix so that it can be reused as the receiver of a dimensionally +// restricted operation. This is commonly used when the matrix is being used a a workspace +// or temporary matrix. +// +// If the matrix is a view, using the reset matrix may result in data corruption in elements +// outside the view. +type Reseter interface { + Reset() +} + +// A Copier can make a copy of elements of a into the receiver. The submatrix copied +// starts at row and column 0 and has dimensions equal to the minimum dimensions of +// the two matrices. The number of row and columns copied is returned. +type Copier interface { + Copy(a Matrix) (r, c int) +} + +// A Viewer returns a submatrix view of the Matrix parameter, starting at row i, column j +// and extending r rows and c columns. If i or j are out of range, or r or c are zero or +// extend beyond the bounds of the matrix View will panic with ErrIndexOutOfRange. The +// returned matrix must retain the receiver's reference to the original matrix such that +// changes in the elements of the submatrix are reflected in the original and vice versa. +type Viewer interface { + View(i, j, r, c int) Matrix +} + +// A Grower can grow the size of the represented matrix by the given number of rows and columns. +// Growing beyond the size given by the Caps method will result in the allocation of a new +// matrix and copying of the elements. If Grow is called with negative increments it will +// panic with ErrIndexOutOfRange. +type Grower interface { + Caps() (r, c int) + Grow(r, c int) Matrix +} + +// A Normer can return the specified matrix norm, o of the matrix represented by the receiver. +// +// Valid order values are: +// +// 1 - max of the sum of the absolute values of columns +// -1 - min of the sum of the absolute values of columns +// Inf - max of the sum of the absolute values of rows +// -Inf - min of the sum of the absolute values of rows +// 0 - Frobenius norm +// +// Norm will panic with ErrNormOrder if an illegal norm order is specified. +type Normer interface { + Norm(o float64) float64 +} + +// A TransposeCopier can make a copy of the transpose the matrix represented by a, placing the elements +// into the receiver. +type TransposeCopier interface { + TCopy(a Matrix) +} + +// A Transposer can create a transposed view matrix from the matrix represented by the receiver. +// Changes made to the returned Matrix may be reflected in the original. +type Transposer interface { + T() Matrix +} + +// A Deter can return the determinant of the represented matrix. +type Deter interface { + Det() float64 +} + +// An Inver can calculate the inverse of the matrix represented by a and stored in the receiver. +// ErrSingular is returned if there is no inverse of the matrix. +type Inver interface { + Inv(a Matrix) error +} + +// An Adder can add the matrices represented by a and b, placing the result in the receiver. Add +// will panic if the two matrices do not have the same shape. +type Adder interface { + Add(a, b Matrix) +} + +// A Suber can subtract the matrix b from a, placing the result in the receiver. Sub will panic if +// the two matrices do not have the same shape. +type Suber interface { + Sub(a, b Matrix) +} + +// An ElemMuler can perform element-wise multiplication of the matrices represented by a and b, +// placing the result in the receiver. MulEmen will panic if the two matrices do not have the same +// shape. +type ElemMuler interface { + MulElem(a, b Matrix) +} + +// An ElemDiver can perform element-wise division a / b of the matrices represented by a and b, +// placing the result in the receiver. DivElem will panic if the two matrices do not have the same +// shape. +type ElemDiver interface { + DivElem(a, b Matrix) +} + +// An Equaler can compare the matrices represented by b and the receiver. Matrices with non-equal shapes +// are not equal. +type Equaler interface { + Equals(b Matrix) bool +} + +// An ApproxEqualer can compare the matrices represented by b and the receiver, with tolerance for +// element-wise equailty specified by epsilon. Matrices with non-equal shapes are not equal. +type ApproxEqualer interface { + EqualsApprox(b Matrix, epsilon float64) bool +} + +// A Scaler can perform scalar multiplication of the matrix represented by a with c, placing +// the result in the receiver. +type Scaler interface { + Scale(c float64, a Matrix) +} + +// A Sumer can return the sum of elements of the matrix represented by the receiver. +type Sumer interface { + Sum() float64 +} + +// A Muler can determine the matrix product of a and b, placing the result in the receiver. +// If the number of columns in a does not equal the number of rows in b, Mul will panic. +type Muler interface { + Mul(a, b Matrix) +} + +// A MulTranser can determine the matrix product of a and b, optionally taking the transpose +// of either a, b, or both, placing the result in the receiver. It performs OpA(a) * OpB(b), +// where OpA is transpose(a) when aTrans is true, and does nothing when aTrans == blas.NoTrans. +// The same logic applies to OpB. If the number of columns in OpA(a) does not equal the +// number of rows in OpB(b), MulTrans will panic. +type MulTranser interface { + MulTrans(a Matrix, aTrans bool, b Matrix, bTrans bool) +} + +// An Exper can perform a matrix exponentiation of the square matrix a. Exp will panic with ErrShape +// if a is not square. +type Exper interface { + Exp(a Matrix) +} + +// A Power can raise a square matrix, a to a positive integral power, n. Pow will panic if n is negative +// or if a is not square. +type Power interface { + Pow(a Matrix, n int) +} + +// A Dotter can determine the sum of the element-wise products of the elements of the receiver and b. +// If the shapes of the two matrices differ, Dot will panic. +type Dotter interface { + Dot(b Matrix) float64 +} + +// A Stacker can create the stacked matrix of a with b, where b is placed in the greater indexed rows. +// The result of stacking is placed in the receiver, overwriting the previous value of the receiver. +// Stack will panic if the two input matrices do not have the same number of columns. +type Stacker interface { + Stack(a, b Matrix) +} + +// An Augmenter can create the augmented matrix of a with b, where b is placed in the greater indexed +// columns. The result of augmentation is placed in the receiver, overwriting the previous value of the +// receiver. Augment will panic if the two input matrices do not have the same number of rows. +type Augmenter interface { + Augment(a, b Matrix) +} + +// An ApplyFunc takes a row/column index and element value and returns some function of that tuple. +type ApplyFunc func(r, c int, v float64) float64 + +// An Applyer can apply an Applyfunc f to each of the elements of the matrix represented by a, +// placing the resulting matrix in the receiver. +type Applyer interface { + Apply(f ApplyFunc, a Matrix) +} + +// A Tracer can return the trace of the matrix represented by the receiver. Trace will panic if the +// matrix is not square. +type Tracer interface { + Trace() float64 +} + +// A Uer can return the upper triangular matrix of the matrix represented by a, placing the result +// in the receiver. If the concrete value of a is the receiver, the lower residue is zeroed in place. +type Uer interface { + U(a Matrix) +} + +// An Ler can return the lower triangular matrix of the matrix represented by a, placing the result +// in the receiver. If the concrete value of a is the receiver, the upper residue is zeroed in place. +type Ler interface { + L(a Matrix) +} + +// A BandWidther represents a banded matrix and can return the left and right half-bandwidths, k1 and +// k2. +type BandWidther interface { + BandWidth() (k1, k2 int) +} + +// A RawMatrixSetter can set the underlying blas64.General used by the receiver. There is no restriction +// on the shape of the receiver. Changes to the receiver's elements will be reflected in the blas64.General.Data. +type RawMatrixSetter interface { + SetRawMatrix(a blas64.General) +} + +// A RawMatrixer can return a blas64.General representation of the receiver. Changes to the blas64.General.Data +// slice will be reflected in the original matrix, changes to the Rows, Cols and Stride fields will not. +type RawMatrixer interface { + RawMatrix() blas64.General +} + +// A RawVectorer can return a blas64.Vector representation of the receiver. Changes to the blas64.Vector.Data +// slice will be reflected in the original matrix, changes to the Inc field will not. +type RawVectorer interface { + RawVector() blas64.Vector +} + +// Det returns the determinant of the matrix a. +func Det(a Matrix) float64 { + if a, ok := a.(Deter); ok { + return a.Det() + } + return LU(DenseCopyOf(a)).Det() +} + +// Inverse returns the inverse or pseudoinverse of the matrix a. +// It returns a nil matrix and ErrSingular if a is singular. +func Inverse(a Matrix) (*Dense, error) { + m, _ := a.Dims() + d := make([]float64, m*m) + for i := 0; i < m*m; i += m + 1 { + d[i] = 1 + } + eye := NewDense(m, m, d) + return Solve(a, eye) +} + +// Solve returns a matrix x that satisfies ax = b. +// It returns a nil matrix and ErrSingular if a is singular. +func Solve(a, b Matrix) (x *Dense, err error) { + switch m, n := a.Dims(); { + case m == n: + lu := LU(DenseCopyOf(a)) + if lu.IsSingular() { + return nil, ErrSingular + } + return lu.Solve(DenseCopyOf(b)), nil + case m > n: + qr := QR(DenseCopyOf(a)) + if !qr.IsFullRank() { + return nil, ErrSingular + } + return qr.Solve(DenseCopyOf(b)), nil + default: + lq := LQ(DenseCopyOf(a)) + if !lq.IsFullRank() { + return nil, ErrSingular + } + switch b := b.(type) { + case *Dense: + return lq.Solve(b), nil + default: + return lq.Solve(DenseCopyOf(b)), nil + } + } +} + +// A Panicker is a function that may panic. +type Panicker func() + +// Maybe will recover a panic with a type mat64.Error from fn, and return this error. +// Any other error is re-panicked. +func Maybe(fn Panicker) (err error) { + defer func() { + if r := recover(); r != nil { + if e, ok := r.(Error); ok { + if e.string == "" { + panic("mat64: invalid error") + } + err = e + return + } + panic(r) + } + }() + fn() + return +} + +// A FloatPanicker is a function that returns a float64 and may panic. +type FloatPanicker func() float64 + +// MaybeFloat will recover a panic with a type mat64.Error from fn, and return this error. +// Any other error is re-panicked. +func MaybeFloat(fn FloatPanicker) (f float64, err error) { + defer func() { + if r := recover(); r != nil { + if e, ok := r.(Error); ok { + if e.string == "" { + panic("mat64: invalid error") + } + err = e + return + } + panic(r) + } + }() + return fn(), nil +} + +// Type Error represents matrix handling errors. These errors can be recovered by Maybe wrappers. +type Error struct{ string } + +func (err Error) Error() string { return err.string } + +var ( + ErrIndexOutOfRange = Error{"mat64: index out of range"} + ErrRowAccess = Error{"mat64: row index out of range"} + ErrColAccess = Error{"mat64: column index out of range"} + ErrVectorAccess = Error{"mat64: vector index out of range"} + ErrZeroLength = Error{"mat64: zero length in matrix definition"} + ErrRowLength = Error{"mat64: row length mismatch"} + ErrColLength = Error{"mat64: col length mismatch"} + ErrSquare = Error{"mat64: expect square matrix"} + ErrNormOrder = Error{"mat64: invalid norm order for matrix"} + ErrSingular = Error{"mat64: matrix is singular"} + ErrShape = Error{"mat64: dimension mismatch"} + ErrIllegalStride = Error{"mat64: illegal stride"} + ErrPivot = Error{"mat64: malformed pivot list"} + ErrTriangle = Error{"mat64: triangular storage mismatch"} +) + +func min(a, b int) int { + if a < b { + return a + } + return b +} + +func max(a, b int) int { + if a > b { + return a + } + return b +} + +// use returns a float64 slice with l elements, using f if it +// has the necessary capacity, otherwise creating a new slice. +func use(f []float64, l int) []float64 { + if l <= cap(f) { + return f[:l] + } + return make([]float64, l) +} + +// useZeroed returns a float64 slice with l elements, using f if it +// has the necessary capacity, otherwise creating a new slice. The +// elements of the returned slice are guaranteed to be zero. +func useZeroed(f []float64, l int) []float64 { + if l <= cap(f) { + f = f[:l] + zero(f) + return f + } + return make([]float64, l) +} + +// zero does a fast zeroing of the given slice's elements. +func zero(f []float64) { + f[0] = 0 + for i := 1; i < len(f); { + i += copy(f[i:], f[:i]) + } +} diff --git a/vendor/github.com/gonum/matrix/mat64/pool.go b/vendor/github.com/gonum/matrix/mat64/pool.go new file mode 100644 index 00000000..62faf6aa --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/pool.go @@ -0,0 +1,80 @@ +// Copyright ©2014 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mat64 + +import ( + "sync" + + "github.com/gonum/blas/blas64" +) + +var tab64 = [64]byte{ + 0x3f, 0x00, 0x3a, 0x01, 0x3b, 0x2f, 0x35, 0x02, + 0x3c, 0x27, 0x30, 0x1b, 0x36, 0x21, 0x2a, 0x03, + 0x3d, 0x33, 0x25, 0x28, 0x31, 0x12, 0x1c, 0x14, + 0x37, 0x1e, 0x22, 0x0b, 0x2b, 0x0e, 0x16, 0x04, + 0x3e, 0x39, 0x2e, 0x34, 0x26, 0x1a, 0x20, 0x29, + 0x32, 0x24, 0x11, 0x13, 0x1d, 0x0a, 0x0d, 0x15, + 0x38, 0x2d, 0x19, 0x1f, 0x23, 0x10, 0x09, 0x0c, + 0x2c, 0x18, 0x0f, 0x08, 0x17, 0x07, 0x06, 0x05, +} + +// bits returns the ceiling of base 2 log of v. +// Approach based on http://stackoverflow.com/a/11398748. +func bits(v uint64) byte { + if v == 0 { + return 0 + } + v <<= 2 + v-- + v |= v >> 1 + v |= v >> 2 + v |= v >> 4 + v |= v >> 8 + v |= v >> 16 + v |= v >> 32 + return tab64[((v-(v>>1))*0x07EDD5E59A4E28C2)>>58] - 1 +} + +// pool contains size stratified workspace Dense pools. +// Each pool element i returns sized matrices with a data +// slice capped at 1<= n by Householder +// reflections, the QR decomposition is an m-by-n orthogonal matrix q and an n-by-n +// upper triangular matrix r so that a = q.r. QR will panic with ErrShape if m < n. +// +// The QR decomposition always exists, even if the matrix does not have full rank, +// so QR will never fail unless m < n. The primary use of the QR decomposition is +// in the least squares solution of non-square systems of simultaneous linear equations. +// This will fail if QRIsFullRank() returns false. The matrix a is overwritten by the +// decomposition. +func QR(a *Dense) QRFactor { + // Initialize. + m, n := a.Dims() + if m < n { + panic(ErrShape) + } + + qr := a + rDiag := make([]float64, n) + + // Main loop. + for k := 0; k < n; k++ { + // Compute 2-norm of k-th column without under/overflow. + var norm float64 + for i := k; i < m; i++ { + norm = math.Hypot(norm, qr.at(i, k)) + } + + if norm != 0 { + // Form k-th Householder vector. + if qr.at(k, k) < 0 { + norm = -norm + } + for i := k; i < m; i++ { + qr.set(i, k, qr.at(i, k)/norm) + } + qr.set(k, k, qr.at(k, k)+1) + + // Apply transformation to remaining columns. + for j := k + 1; j < n; j++ { + var s float64 + for i := k; i < m; i++ { + s += qr.at(i, k) * qr.at(i, j) + } + s /= -qr.at(k, k) + for i := k; i < m; i++ { + qr.set(i, j, qr.at(i, j)+s*qr.at(i, k)) + } + } + } + rDiag[k] = -norm + } + + return QRFactor{qr, rDiag} +} + +// IsFullRank returns whether the R matrix and hence a has full rank. +func (f QRFactor) IsFullRank() bool { + for _, v := range f.rDiag { + if v == 0 { + return false + } + } + return true +} + +// H returns the Householder vectors in a lower trapezoidal matrix +// whose columns define the reflections. +func (f QRFactor) H() *Dense { + qr := f.QR + m, n := qr.Dims() + h := NewDense(m, n, nil) + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if i >= j { + h.set(i, j, qr.at(i, j)) + } + } + } + return h +} + +// R returns the upper triangular factor for the QR decomposition. +func (f QRFactor) R() *Dense { + qr, rDiag := f.QR, f.rDiag + _, n := qr.Dims() + r := NewDense(n, n, nil) + for i, v := range rDiag[:n] { + for j := 0; j < n; j++ { + if i < j { + r.set(i, j, qr.at(i, j)) + } else if i == j { + r.set(i, j, v) + } + } + } + return r +} + +// Q generates and returns the (economy-sized) orthogonal factor. +func (f QRFactor) Q() *Dense { + qr := f.QR + m, n := qr.Dims() + q := NewDense(m, n, nil) + + for k := n - 1; k >= 0; k-- { + q.set(k, k, 1) + for j := k; j < n; j++ { + if qr.at(k, k) != 0 { + var s float64 + for i := k; i < m; i++ { + s += qr.at(i, k) * q.at(i, j) + } + s /= -qr.at(k, k) + for i := k; i < m; i++ { + q.set(i, j, q.at(i, j)+s*qr.at(i, k)) + } + } + } + } + + return q +} + +// Solve computes a least squares solution of a.x = b where b has as many rows as a. +// A matrix x is returned that minimizes the two norm of Q*R*X-B. Solve will panic +// if a is not full rank. The matrix b is overwritten during the call. +func (f QRFactor) Solve(b *Dense) (x *Dense) { + qr := f.QR + rDiag := f.rDiag + m, n := qr.Dims() + bm, bn := b.Dims() + if bm != m { + panic(ErrShape) + } + if !f.IsFullRank() { + panic(ErrSingular) + } + + // Compute Y = transpose(Q)*B + for k := 0; k < n; k++ { + for j := 0; j < bn; j++ { + var s float64 + for i := k; i < m; i++ { + s += qr.at(i, k) * b.at(i, j) + } + s /= -qr.at(k, k) + + for i := k; i < m; i++ { + b.set(i, j, b.at(i, j)+s*qr.at(i, k)) + } + } + } + + // Solve R*X = Y; + for k := n - 1; k >= 0; k-- { + row := b.rowView(k) + for j := range row[:bn] { + row[j] /= rDiag[k] + } + for i := 0; i < k; i++ { + row := b.rowView(i) + for j := range row[:bn] { + row[j] -= b.at(k, j) * qr.at(i, k) + } + } + } + + return b.View(0, 0, n, bn).(*Dense) +} diff --git a/vendor/github.com/gonum/matrix/mat64/svd.go b/vendor/github.com/gonum/matrix/mat64/svd.go new file mode 100644 index 00000000..3b9b9895 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/svd.go @@ -0,0 +1,479 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// Based on the SingularValueDecomposition class from Jama 1.0.3. + +package mat64 + +import ( + "math" +) + +type SVDFactors struct { + U *Dense + Sigma []float64 + V *Dense + m, n int +} + +// SVD performs singular value decomposition for an m-by-n matrix a. The +// singular value decomposition is an m-by-n orthogonal matrix u, an n-by-n +// diagonal matrix s, and an n-by-n orthogonal matrix v so that a = u*s*v'. If +// a is a wide matrix a copy of its transpose is allocated, otherwise a is +// overwritten during the decomposition. Matrices u and v are only created when +// wantu and wantv are true respectively. +// +// The singular values, sigma[k] = s[k][k], are ordered so that +// +// sigma[0] >= sigma[1] >= ... >= sigma[n-1]. +// +// The matrix condition number and the effective numerical rank can be computed from +// this decomposition. +func SVD(a *Dense, epsilon, small float64, wantu, wantv bool) SVDFactors { + m, n := a.Dims() + + trans := false + if m < n { + a.TCopy(a) + m, n = n, m + wantu, wantv = wantv, wantu + trans = true + } + + sigma := make([]float64, min(m+1, n)) + nu := min(m, n) + var u, v *Dense + if wantu { + u = NewDense(m, nu, nil) + } + if wantv { + v = NewDense(n, n, nil) + } + + var ( + e = make([]float64, n) + work = make([]float64, m) + ) + + // Reduce a to bidiagonal form, storing the diagonal elements + // in sigma and the super-diagonal elements in e. + nct := min(m-1, n) + nrt := max(0, min(n-2, m)) + for k := 0; k < max(nct, nrt); k++ { + if k < nct { + // Compute the transformation for the k-th column and + // place the k-th diagonal in sigma[k]. + // Compute 2-norm of k-th column without under/overflow. + sigma[k] = 0 + for i := k; i < m; i++ { + sigma[k] = math.Hypot(sigma[k], a.at(i, k)) + } + if sigma[k] != 0 { + if a.at(k, k) < 0 { + sigma[k] = -sigma[k] + } + for i := k; i < m; i++ { + a.set(i, k, a.at(i, k)/sigma[k]) + } + a.set(k, k, a.at(k, k)+1) + } + sigma[k] = -sigma[k] + } + + for j := k + 1; j < n; j++ { + if k < nct && sigma[k] != 0 { + // Apply the transformation. + var t float64 + for i := k; i < m; i++ { + t += a.at(i, k) * a.at(i, j) + } + t = -t / a.at(k, k) + for i := k; i < m; i++ { + a.set(i, j, a.at(i, j)+t*a.at(i, k)) + } + } + + // Place the k-th row of a into e for the + // subsequent calculation of the row transformation. + e[j] = a.at(k, j) + } + + if wantu && k < nct { + // Place the transformation in u for subsequent back + // multiplication. + for i := k; i < m; i++ { + u.set(i, k, a.at(i, k)) + } + } + + if k < nrt { + // Compute the k-th row transformation and place the + // k-th super-diagonal in e[k]. + // Compute 2-norm without under/overflow. + e[k] = 0 + for i := k + 1; i < n; i++ { + e[k] = math.Hypot(e[k], e[i]) + } + if e[k] != 0 { + if e[k+1] < 0 { + e[k] = -e[k] + } + for i := k + 1; i < n; i++ { + e[i] /= e[k] + } + e[k+1]++ + } + e[k] = -e[k] + if k+1 < m && e[k] != 0 { + // Apply the transformation. + for i := k + 1; i < m; i++ { + work[i] = 0 + } + for j := k + 1; j < n; j++ { + for i := k + 1; i < m; i++ { + work[i] += e[j] * a.at(i, j) + } + } + for j := k + 1; j < n; j++ { + t := -e[j] / e[k+1] + for i := k + 1; i < m; i++ { + a.set(i, j, a.at(i, j)+t*work[i]) + } + } + } + if wantv { + // Place the transformation in v for subsequent + // back multiplication. + for i := k + 1; i < n; i++ { + v.set(i, k, e[i]) + } + } + } + } + + // set up the final bidiagonal matrix or order p. + p := min(n, m+1) + if nct < n { + sigma[nct] = a.at(nct, nct) + } + if m < p { + sigma[p-1] = 0 + } + if nrt+1 < p { + e[nrt] = a.at(nrt, p-1) + } + e[p-1] = 0 + + // If requested, generate u. + if wantu { + for j := nct; j < nu; j++ { + for i := 0; i < m; i++ { + u.set(i, j, 0) + } + u.set(j, j, 1) + } + for k := nct - 1; k >= 0; k-- { + if sigma[k] != 0 { + for j := k + 1; j < nu; j++ { + var t float64 + for i := k; i < m; i++ { + t += u.at(i, k) * u.at(i, j) + } + t /= -u.at(k, k) + for i := k; i < m; i++ { + u.set(i, j, u.at(i, j)+t*u.at(i, k)) + } + } + for i := k; i < m; i++ { + u.set(i, k, -u.at(i, k)) + } + u.set(k, k, 1+u.at(k, k)) + for i := 0; i < k-1; i++ { + u.set(i, k, 0) + } + } else { + for i := 0; i < m; i++ { + u.set(i, k, 0) + } + u.set(k, k, 1) + } + } + } + + // If requested, generate v. + if wantv { + for k := n - 1; k >= 0; k-- { + if k < nrt && e[k] != 0 { + for j := k + 1; j < nu; j++ { + var t float64 + for i := k + 1; i < n; i++ { + t += v.at(i, k) * v.at(i, j) + } + t /= -v.at(k+1, k) + for i := k + 1; i < n; i++ { + v.set(i, j, v.at(i, j)+t*v.at(i, k)) + } + } + } + for i := 0; i < n; i++ { + v.set(i, k, 0) + } + v.set(k, k, 1) + } + } + + // Main iteration loop for the singular values. + pp := p - 1 + for iter := 0; p > 0; { + var k, kase int + + // Here is where a test for too many iterations would go. + + // This section of the program inspects for + // negligible elements in the sigma and e arrays. On + // completion the variables kase and k are set as follows. + // + // kase = 1 if sigma(p) and e[k-1] are negligible and k

= -1; k-- { + if k == -1 { + break + } + if math.Abs(e[k]) <= small+epsilon*(math.Abs(sigma[k])+math.Abs(sigma[k+1])) { + e[k] = 0 + break + } + } + + if k == p-2 { + kase = 4 + } else { + var ks int + for ks = p - 1; ks >= k; ks-- { + if ks == k { + break + } + var t float64 + if ks != p { + t = math.Abs(e[ks]) + } + if ks != k+1 { + t += math.Abs(e[ks-1]) + } + if math.Abs(sigma[ks]) <= small+epsilon*t { + sigma[ks] = 0 + break + } + } + if ks == k { + kase = 3 + } else if ks == p-1 { + kase = 1 + } else { + kase = 2 + k = ks + } + } + k++ + + switch kase { + // Deflate negligible sigma(p). + case 1: + f := e[p-2] + e[p-2] = 0 + for j := p - 2; j >= k; j-- { + t := math.Hypot(sigma[j], f) + cs := sigma[j] / t + sn := f / t + sigma[j] = t + if j != k { + f = -sn * e[j-1] + e[j-1] *= cs + } + if wantv { + for i := 0; i < n; i++ { + t = cs*v.at(i, j) + sn*v.at(i, p-1) + v.set(i, p-1, -sn*v.at(i, j)+cs*v.at(i, p-1)) + v.set(i, j, t) + } + } + } + + // Split at negligible sigma(k). + case 2: + f := e[k-1] + e[k-1] = 0 + for j := k; j < p; j++ { + t := math.Hypot(sigma[j], f) + cs := sigma[j] / t + sn := f / t + sigma[j] = t + f = -sn * e[j] + e[j] *= cs + if wantu { + for i := 0; i < m; i++ { + t = cs*u.at(i, j) + sn*u.at(i, k-1) + u.set(i, k-1, -sn*u.at(i, j)+cs*u.at(i, k-1)) + u.set(i, j, t) + } + } + } + + // Perform one qr step. + case 3: + // Calculate the shift. + scale := math.Max(math.Max(math.Max(math.Max( + math.Abs(sigma[p-1]), math.Abs(sigma[p-2])), math.Abs(e[p-2])), math.Abs(sigma[k])), math.Abs(e[k]), + ) + sp := sigma[p-1] / scale + spm1 := sigma[p-2] / scale + epm1 := e[p-2] / scale + sk := sigma[k] / scale + ek := e[k] / scale + b := ((spm1+sp)*(spm1-sp) + epm1*epm1) / 2 + c := (sp * epm1) * (sp * epm1) + + var shift float64 + if b != 0 || c != 0 { + shift = math.Sqrt(b*b + c) + if b < 0 { + shift = -shift + } + shift = c / (b + shift) + } + f := (sk+sp)*(sk-sp) + shift + g := sk * ek + + // Chase zeros. + for j := k; j < p-1; j++ { + t := math.Hypot(f, g) + cs := f / t + sn := g / t + if j != k { + e[j-1] = t + } + f = cs*sigma[j] + sn*e[j] + e[j] = cs*e[j] - sn*sigma[j] + g = sn * sigma[j+1] + sigma[j+1] *= cs + if wantv { + for i := 0; i < n; i++ { + t = cs*v.at(i, j) + sn*v.at(i, j+1) + v.set(i, j+1, -sn*v.at(i, j)+cs*v.at(i, j+1)) + v.set(i, j, t) + } + } + t = math.Hypot(f, g) + cs = f / t + sn = g / t + sigma[j] = t + f = cs*e[j] + sn*sigma[j+1] + sigma[j+1] = -sn*e[j] + cs*sigma[j+1] + g = sn * e[j+1] + e[j+1] *= cs + if wantu && j < m-1 { + for i := 0; i < m; i++ { + t = cs*u.at(i, j) + sn*u.at(i, j+1) + u.set(i, j+1, -sn*u.at(i, j)+cs*u.at(i, j+1)) + u.set(i, j, t) + } + } + } + e[p-2] = f + iter++ + + // Convergence. + case 4: + // Make the singular values positive. + if sigma[k] <= 0 { + if sigma[k] < 0 { + sigma[k] = -sigma[k] + } else { + sigma[k] = 0 + } + if wantv { + for i := 0; i <= pp; i++ { + v.set(i, k, -v.at(i, k)) + } + } + } + + // Order the singular values. + for k < pp { + if sigma[k] >= sigma[k+1] { + break + } + sigma[k], sigma[k+1] = sigma[k+1], sigma[k] + if wantv && k < n-1 { + for i := 0; i < n; i++ { + t := v.at(i, k+1) + v.set(i, k+1, v.at(i, k)) + v.set(i, k, t) + } + } + if wantu && k < m-1 { + for i := 0; i < m; i++ { + t := u.at(i, k+1) + u.set(i, k+1, u.at(i, k)) + u.set(i, k, t) + } + } + k++ + } + iter = 0 + p-- + } + } + + if trans { + return SVDFactors{ + U: v, + Sigma: sigma, + V: u, + + m: m, n: n, + } + } + return SVDFactors{ + U: u, + Sigma: sigma, + V: v, + + m: m, n: n, + } +} + +// S returns a newly allocated S matrix from the sigma values held by the +// factorisation. +func (f SVDFactors) S() *Dense { + s := NewDense(len(f.Sigma), len(f.Sigma), nil) + for i, v := range f.Sigma { + s.set(i, i, v) + } + return s +} + +// Rank returns the number of non-negligible singular values in the sigma held by +// the factorisation with the given epsilon. +func (f SVDFactors) Rank(epsilon float64) int { + if len(f.Sigma) == 0 { + return 0 + } + tol := float64(max(f.m, len(f.Sigma))) * f.Sigma[0] * epsilon + var r int + for _, v := range f.Sigma { + if v > tol { + r++ + } + } + return r +} + +// Cond returns the 2-norm condition number for the S matrix. +func (f SVDFactors) Cond() float64 { + return f.Sigma[0] / f.Sigma[min(f.m, f.n)-1] +} diff --git a/vendor/github.com/gonum/matrix/mat64/symmetric.go b/vendor/github.com/gonum/matrix/mat64/symmetric.go new file mode 100644 index 00000000..19923b04 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/symmetric.go @@ -0,0 +1,198 @@ +package mat64 + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +var ( + symDense *SymDense + + _ Matrix = symDense + _ Symmetric = symDense + _ RawSymmetricer = symDense +) + +const badSymTriangle = "mat64: blas64.Symmetric not upper" + +// SymDense is a symmetric matrix that uses Dense storage. +type SymDense struct { + mat blas64.Symmetric +} + +// Symmetric represents a symmetric matrix (where the element at {i, j} equals +// the element at {j, i}). Symmetric matrices are always square. +type Symmetric interface { + Matrix + // Symmetric returns the number of rows/columns in the matrix. + Symmetric() int +} + +// A RawSymmetricer can return a view of itself as a BLAS Symmetric matrix. +type RawSymmetricer interface { + RawSymmetric() blas64.Symmetric +} + +// NewSymDense constructs an n x n symmetric matrix. If len(mat) == n * n, +// mat will be used to hold the underlying data, or if mat == nil, new data will be allocated. +// The underlying data representation is the same as a Dense matrix, except +// the values of the entries in the lower triangular portion are completely ignored. +func NewSymDense(n int, mat []float64) *SymDense { + if n < 0 { + panic("mat64: negative dimension") + } + if mat != nil && n*n != len(mat) { + panic(ErrShape) + } + if mat == nil { + mat = make([]float64, n*n) + } + return &SymDense{blas64.Symmetric{ + N: n, + Stride: n, + Data: mat, + Uplo: blas.Upper, + }} +} + +func (s *SymDense) Dims() (r, c int) { + return s.mat.N, s.mat.N +} + +func (s *SymDense) Symmetric() int { + return s.mat.N +} + +// RawSymmetric returns the matrix as a blas64.Symmetric. The returned +// value must be stored in upper triangular format. +func (s *SymDense) RawSymmetric() blas64.Symmetric { + return s.mat +} + +func (s *SymDense) isZero() bool { + return s.mat.N == 0 +} + +func (s *SymDense) AddSym(a, b Symmetric) { + n := a.Symmetric() + if n != b.Symmetric() { + panic(ErrShape) + } + if s.isZero() { + s.mat = blas64.Symmetric{ + N: n, + Stride: n, + Data: use(s.mat.Data, n*n), + Uplo: blas.Upper, + } + } else if s.mat.N != n { + panic(ErrShape) + } + + if a, ok := a.(RawSymmetricer); ok { + if b, ok := b.(RawSymmetricer); ok { + amat, bmat := a.RawSymmetric(), b.RawSymmetric() + for i := 0; i < n; i++ { + btmp := bmat.Data[i*bmat.Stride+i : i*bmat.Stride+n] + stmp := s.mat.Data[i*s.mat.Stride+i : i*s.mat.Stride+n] + for j, v := range amat.Data[i*amat.Stride+i : i*amat.Stride+n] { + stmp[j] = v + btmp[j] + } + } + return + } + } + + for i := 0; i < n; i++ { + stmp := s.mat.Data[i*s.mat.Stride : i*s.mat.Stride+n] + for j := i; j < n; j++ { + stmp[j] = a.At(i, j) + b.At(i, j) + } + } +} + +func (s *SymDense) CopySym(a Symmetric) int { + n := a.Symmetric() + n = min(n, s.mat.N) + switch a := a.(type) { + case RawSymmetricer: + amat := a.RawSymmetric() + if amat.Uplo != blas.Upper { + panic(badSymTriangle) + } + for i := 0; i < n; i++ { + copy(s.mat.Data[i*s.mat.Stride+i:i*s.mat.Stride+n], amat.Data[i*amat.Stride+i:i*amat.Stride+n]) + } + default: + for i := 0; i < n; i++ { + stmp := s.mat.Data[i*s.mat.Stride : i*s.mat.Stride+n] + for j := i; j < n; j++ { + stmp[j] = a.At(i, j) + } + } + } + return n +} + +// SymRankOne performs a symetric rank-one update to the matrix a and stores +// the result in the receiver +// s = a + alpha * x * x' +func (s *SymDense) SymRankOne(a Symmetric, alpha float64, x []float64) { + n := s.mat.N + var w SymDense + if s == a { + w = *s + } + if w.isZero() { + w.mat = blas64.Symmetric{ + N: n, + Stride: n, + Uplo: blas.Upper, + Data: use(w.mat.Data, n*n), + } + } else if n != w.mat.N { + panic(ErrShape) + } + if s != a { + w.CopySym(a) + } + if len(x) != n { + panic(ErrShape) + } + blas64.Syr(alpha, blas64.Vector{Inc: 1, Data: x}, w.mat) + *s = w + return +} + +// RankTwo performs a symmmetric rank-two update to the matrix a and stores +// the result in the receiver +// m = a + alpha * (x * y' + y * x') +func (s *SymDense) RankTwo(a Symmetric, alpha float64, x, y []float64) { + n := s.mat.N + var w SymDense + if s == a { + w = *s + } + if w.isZero() { + w.mat = blas64.Symmetric{ + N: n, + Stride: n, + Uplo: blas.Upper, + Data: use(w.mat.Data, n*n), + } + } else if n != w.mat.N { + panic(ErrShape) + } + if s != a { + w.CopySym(a) + } + if len(x) != n { + panic(ErrShape) + } + if len(y) != n { + panic(ErrShape) + } + blas64.Syr2(alpha, blas64.Vector{Inc: 1, Data: x}, blas64.Vector{Inc: 1, Data: y}, w.mat) + *s = w + return +} diff --git a/vendor/github.com/gonum/matrix/mat64/triangular.go b/vendor/github.com/gonum/matrix/mat64/triangular.go new file mode 100644 index 00000000..93e942b4 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/triangular.go @@ -0,0 +1,177 @@ +package mat64 + +import ( + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +var ( + triDense *TriDense + _ Matrix = triDense + _ Triangular = triDense + _ RawTriangular = triDense +) + +// TriDense represents an upper or lower triangular matrix in dense storage +// format. +type TriDense struct { + mat blas64.Triangular +} + +type Triangular interface { + Matrix + // Triangular returns the number of rows/columns in the matrix and if it is + // an upper triangular matrix. + Triangle() (n int, upper bool) +} + +type RawTriangular interface { + RawTriangular() blas64.Triangular +} + +// NewTriangular constructs an n x n triangular matrix. The constructed matrix +// is upper triangular if upper == true and lower triangular otherwise. +// If len(mat) == n * n, mat will be used to hold the underlying data, if +// mat == nil, new data will be allocated, and will panic if neither of these +// cases is true. +// The underlying data representation is the same as that of a Dense matrix, +// except the values of the entries in the opposite half are completely ignored. +func NewTriDense(n int, upper bool, mat []float64) *TriDense { + if n < 0 { + panic("mat64: negative dimension") + } + if mat != nil && len(mat) != n*n { + panic(ErrShape) + } + if mat == nil { + mat = make([]float64, n*n) + } + uplo := blas.Lower + if upper { + uplo = blas.Upper + } + return &TriDense{blas64.Triangular{ + N: n, + Stride: n, + Data: mat, + Uplo: uplo, + Diag: blas.NonUnit, + }} +} + +func (t *TriDense) Dims() (r, c int) { + return t.mat.N, t.mat.N +} + +func (t *TriDense) Triangle() (n int, upper bool) { + return t.mat.N, t.mat.Uplo == blas.Upper +} + +func (t *TriDense) RawTriangular() blas64.Triangular { + return t.mat +} + +func (t *TriDense) isZero() bool { + // It must be the case that t.Dims() returns + // zeros in this case. See comment in Reset(). + return t.mat.Stride == 0 +} + +// Reset zeros the dimensions of the matrix so that it can be reused as the +// receiver of a dimensionally restricted operation. +// +// See the Reseter interface for more information. +func (t *TriDense) Reset() { + // No change of Stride, N to 0 may + // be made unless both are set to 0. + t.mat.N, t.mat.Stride = 0, 0 + // Defensively zero Uplo to ensure + // it is set correctly later. + t.mat.Uplo = 0 + t.mat.Data = t.mat.Data[:0] +} + +// getBlasTriangular transforms t into a blas64.Triangular. If t is a RawTriangular, +// the direct matrix representation is returned, otherwise t is copied into one. +func getBlasTriangular(t Triangular) blas64.Triangular { + n, upper := t.Triangle() + rt, ok := t.(RawTriangular) + if ok { + return rt.RawTriangular() + } + ta := blas64.Triangular{ + N: n, + Stride: n, + Diag: blas.NonUnit, + Data: make([]float64, n*n), + } + if upper { + ta.Uplo = blas.Upper + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + ta.Data[i*n+j] = t.At(i, j) + } + } + return ta + } + ta.Uplo = blas.Lower + for i := 0; i < n; i++ { + for j := 0; j < i; j++ { + ta.Data[i*n+j] = t.At(i, j) + } + } + return ta +} + +// copySymIntoTriangle copies a symmetric matrix into a TriDense +func copySymIntoTriangle(t *TriDense, s Symmetric) { + n, upper := t.Triangle() + ns := s.Symmetric() + if n != ns { + panic("mat64: triangle size mismatch") + } + ts := t.mat.Stride + if rs, ok := s.(RawSymmetricer); ok { + sd := rs.RawSymmetric() + ss := sd.Stride + if upper { + if sd.Uplo == blas.Upper { + for i := 0; i < n; i++ { + copy(t.mat.Data[i*ts+i:i*ts+n], sd.Data[i*ss+i:i*ss+n]) + } + return + } + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + t.mat.Data[i*ts+j] = sd.Data[j*ss+i] + } + return + } + } + if sd.Uplo == blas.Upper { + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + t.mat.Data[i*ts+j] = sd.Data[j*ss+i] + } + } + return + } + for i := 0; i < n; i++ { + copy(t.mat.Data[i*ts:i*ts+i+1], sd.Data[i*ss:i*ss+i+1]) + } + return + } + if upper { + for i := 0; i < n; i++ { + for j := i; j < n; j++ { + t.mat.Data[i*ts+j] = s.At(i, j) + } + } + return + } + for i := 0; i < n; i++ { + for j := 0; j <= i; j++ { + t.mat.Data[i*ts+j] = s.At(i, j) + } + } +} diff --git a/vendor/github.com/gonum/matrix/mat64/vector.go b/vendor/github.com/gonum/matrix/mat64/vector.go new file mode 100644 index 00000000..c2e966d7 --- /dev/null +++ b/vendor/github.com/gonum/matrix/mat64/vector.go @@ -0,0 +1,349 @@ +// Copyright ©2013 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package mat64 + +import ( + "math" + + "github.com/gonum/blas" + "github.com/gonum/blas/blas64" +) + +var ( + vector *Vector + + _ Matrix = vector + + // _ Cloner = vector + // _ Viewer = vector + // _ Subvectorer = vector + + // _ Adder = vector + // _ Suber = vector + // _ Muler = vector + // _ Dotter = vector + // _ ElemMuler = vector + + // _ Scaler = vector + // _ Applyer = vector + + // _ Normer = vector + // _ Sumer = vector + + // _ Stacker = vector + // _ Augmenter = vector + + // _ Equaler = vector + // _ ApproxEqualer = vector + + // _ RawMatrixLoader = vector + // _ RawMatrixer = vector +) + +// Vector represents a column vector. +type Vector struct { + mat blas64.Vector + n int + // A BLAS vector can have a negative increment, but allowing this + // in the mat64 type complicates a lot of code, and doesn't gain anything. + // Vector must have positive increment in this package. +} + +// NewVector creates a new Vector of length n. If len(data) == n, data is used +// as the backing data slice. If data == nil, a new slice is allocated. If +// neither of these is true, NewVector will panic. +func NewVector(n int, data []float64) *Vector { + if len(data) != n && data != nil { + panic(ErrShape) + } + if data == nil { + data = make([]float64, n) + } + return &Vector{ + mat: blas64.Vector{ + Inc: 1, + Data: data, + }, + n: n, + } +} + +// ViewVec returns a sub-vector view of the receiver starting at element i and +// extending n columns. If i is out of range, or if n is zero or extend beyond the +// bounds of the Vector ViewVec will panic with ErrIndexOutOfRange. The returned +// Vector retains reference to the underlying vector. +func (v *Vector) ViewVec(i, n int) *Vector { + if i+n > v.n { + panic(ErrIndexOutOfRange) + } + return &Vector{ + n: n, + mat: blas64.Vector{ + Inc: v.mat.Inc, + Data: v.mat.Data[i*v.mat.Inc:], + }, + } +} + +func (v *Vector) Dims() (r, c int) { return v.n, 1 } + +// Len returns the length of the vector. +func (v *Vector) Len() int { + return v.n +} + +func (v *Vector) Reset() { + v.mat.Data = v.mat.Data[:0] + v.mat.Inc = 0 + v.n = 0 +} + +func (v *Vector) RawVector() blas64.Vector { + return v.mat +} + +// CopyVec makes a copy of elements of a into the receiver. It is similar to the +// built-in copy; it copies as much as the overlap between the two matrices and +// returns the number of rows and columns it copied. +func (v *Vector) CopyVec(a *Vector) (n int) { + n = min(v.Len(), a.Len()) + blas64.Copy(n, a.mat, v.mat) + return n +} + +// AddVec adds a and b element-wise, placing the result in the receiver. +func (v *Vector) AddVec(a, b *Vector) { + ar := a.Len() + br := b.Len() + + if ar != br { + panic(ErrShape) + } + + v.reuseAs(ar) + + amat, bmat := a.RawVector(), b.RawVector() + for i := 0; i < v.n; i++ { + v.mat.Data[i*v.mat.Inc] = amat.Data[i*amat.Inc] + bmat.Data[i*bmat.Inc] + } +} + +// SubVec subtracts the vector b from a, placing the result in the receiver. +func (v *Vector) SubVec(a, b *Vector) { + ar := a.Len() + br := b.Len() + + if ar != br { + panic(ErrShape) + } + + v.reuseAs(ar) + + amat, bmat := a.RawVector(), b.RawVector() + for i := 0; i < v.n; i++ { + v.mat.Data[i*v.mat.Inc] = amat.Data[i*amat.Inc] - bmat.Data[i*bmat.Inc] + } +} + +// MulElemVec performs element-wise multiplication of a and b, placing the result +// in the receiver. +func (v *Vector) MulElemVec(a, b *Vector) { + ar := a.Len() + br := b.Len() + + if ar != br { + panic(ErrShape) + } + + v.reuseAs(ar) + + amat, bmat := a.RawVector(), b.RawVector() + for i := 0; i < v.n; i++ { + v.mat.Data[i*v.mat.Inc] = amat.Data[i*amat.Inc] * bmat.Data[i*bmat.Inc] + } +} + +// DivElemVec performs element-wise division of a by b, placing the result +// in the receiver. +func (v *Vector) DivElemVec(a, b *Vector) { + ar := a.Len() + br := b.Len() + + if ar != br { + panic(ErrShape) + } + + v.reuseAs(ar) + + amat, bmat := a.RawVector(), b.RawVector() + for i := 0; i < v.n; i++ { + v.mat.Data[i*v.mat.Inc] = amat.Data[i*amat.Inc] / bmat.Data[i*bmat.Inc] + } +} + +// MulVec computes a * b if trans == false and a^T * b if trans == true. The +// result is stored into the receiver. MulVec panics if the number of columns in +// a does not equal the number of rows in b. +func (v *Vector) MulVec(a Matrix, trans bool, b *Vector) { + ar, ac := a.Dims() + br := b.Len() + if trans { + if ar != br { + panic(ErrShape) + } + } else { + if ac != br { + panic(ErrShape) + } + } + + var w Vector + if v != a && v != b { + w = *v + } + if w.n == 0 { + if trans { + w.mat.Data = use(w.mat.Data, ac) + } else { + w.mat.Data = use(w.mat.Data, ar) + } + + w.mat.Inc = 1 + w.n = ar + if trans { + w.n = ac + } + } else { + if trans { + if ac != w.n { + panic(ErrShape) + } + } else { + if ar != w.n { + panic(ErrShape) + } + } + } + + switch a := a.(type) { + case RawSymmetricer: + amat := a.RawSymmetric() + blas64.Symv(1, amat, b.mat, 0, w.mat) + case RawTriangular: + w.CopyVec(b) + amat := a.RawTriangular() + ta := blas.NoTrans + if trans { + ta = blas.Trans + } + blas64.Trmv(ta, amat, w.mat) + case RawMatrixer: + amat := a.RawMatrix() + t := blas.NoTrans + if trans { + t = blas.Trans + } + blas64.Gemv(t, 1, amat, b.mat, 0, w.mat) + case Vectorer: + if trans { + col := make([]float64, ar) + for c := 0; c < ac; c++ { + w.mat.Data[c*w.mat.Inc] = blas64.Dot(ar, + blas64.Vector{Inc: 1, Data: a.Col(col, c)}, + b.mat, + ) + } + } else { + row := make([]float64, ac) + for r := 0; r < ar; r++ { + w.mat.Data[r*w.mat.Inc] = blas64.Dot(ac, + blas64.Vector{Inc: 1, Data: a.Row(row, r)}, + b.mat, + ) + } + } + default: + if trans { + col := make([]float64, ar) + for c := 0; c < ac; c++ { + for i := range col { + col[i] = a.At(i, c) + } + var f float64 + for i, e := range col { + f += e * b.mat.Data[i*b.mat.Inc] + } + w.mat.Data[c*w.mat.Inc] = f + } + } else { + row := make([]float64, ac) + for r := 0; r < ar; r++ { + for i := range row { + row[i] = a.At(r, i) + } + var f float64 + for i, e := range row { + f += e * b.mat.Data[i*b.mat.Inc] + } + w.mat.Data[r*w.mat.Inc] = f + } + } + } + *v = w +} + +// Equals compares the vectors represented by b and the receiver and returns true +// if the vectors are element-wise equal. +func (v *Vector) EqualsVec(b *Vector) bool { + n := v.Len() + nb := b.Len() + if n != nb { + return false + } + for i := 0; i < n; i++ { + if v.mat.Data[i*v.mat.Inc] != b.mat.Data[i*b.mat.Inc] { + return false + } + } + return true +} + +// EqualsApproxVec compares the vectors represented by b and the receiver, with +// tolerance for element-wise equality specified by epsilon. +func (v *Vector) EqualsApproxVec(b *Vector, epsilon float64) bool { + n := v.Len() + nb := b.Len() + if n != nb { + return false + } + for i := 0; i < n; i++ { + if math.Abs(v.mat.Data[i*v.mat.Inc]-b.mat.Data[i*b.mat.Inc]) > epsilon { + return false + } + } + return true +} + +// reuseAs resizes an empty vector to a r×1 vector, +// or checks that a non-empty matrix is r×1. +func (v *Vector) reuseAs(r int) { + if v.isZero() { + v.mat = blas64.Vector{ + Inc: 1, + Data: use(v.mat.Data, r), + } + v.n = r + return + } + if r != v.n { + panic(ErrShape) + } +} + +func (v *Vector) isZero() bool { + // It must be the case that v.Dims() returns + // zeros in this case. See comment in Reset(). + return v.mat.Inc == 0 +} diff --git a/vendor/github.com/google/cadvisor/info/v1/container.go b/vendor/github.com/google/cadvisor/info/v1/container.go index 6e7e6589..21c85bd2 100644 --- a/vendor/github.com/google/cadvisor/info/v1/container.go +++ b/vendor/github.com/google/cadvisor/info/v1/container.go @@ -266,7 +266,7 @@ type LoadStats struct { // CPU usage time statistics. type CpuUsage struct { // Total CPU usage. - // Units: nanoseconds + // Unit: nanoseconds. Total uint64 `json:"total"` // Per CPU/core usage of the container. @@ -274,17 +274,31 @@ type CpuUsage struct { PerCpu []uint64 `json:"per_cpu_usage,omitempty"` // Time spent in user space. - // Unit: nanoseconds + // Unit: nanoseconds. User uint64 `json:"user"` // Time spent in kernel space. - // Unit: nanoseconds + // Unit: nanoseconds. System uint64 `json:"system"` } +// Cpu Completely Fair Scheduler statistics. +type CpuCFS struct { + // Total number of elapsed enforcement intervals. + Periods uint64 `json:"periods"` + + // Total number of times tasks in the cgroup have been throttled. + ThrottledPeriods uint64 `json:"throttled_periods"` + + // Total time duration for which tasks in the cgroup have been throttled. + // Unit: nanoseconds. + ThrottledTime uint64 `json:"throttled_time"` +} + // All CPU usage metrics are cumulative from the creation of the container type CpuStats struct { Usage CpuUsage `json:"usage"` + CFS CpuCFS `json:"cfs"` // Smoothed average of number of runnable threads x 1000. // We multiply by thousand to avoid using floats, but preserving precision. // Load is smoothed over the last 10 seconds. Instantaneous value can be read @@ -324,6 +338,10 @@ type MemoryStats struct { // Units: Bytes. RSS uint64 `json:"rss"` + // The amount of swap currently used by the processes in this cgroup + // Units: Bytes. + Swap uint64 `json:"swap"` + // The amount of working set memory, this includes recently accessed memory, // dirty memory, and kernel memory. Working set is <= "usage". // Units: Bytes. @@ -415,6 +433,12 @@ type FsStats struct { // Number of bytes available for non-root user. Available uint64 `json:"available"` + // HasInodes when true, indicates that Inodes info will be available. + HasInodes bool `json:"has_inodes"` + + // Number of Inodes + Inodes uint64 `json:"inodes"` + // Number of available Inodes InodesFree uint64 `json:"inodes_free"` diff --git a/vendor/github.com/google/cadvisor/info/v1/machine.go b/vendor/github.com/google/cadvisor/info/v1/machine.go index 74a5df49..933b6f30 100644 --- a/vendor/github.com/google/cadvisor/info/v1/machine.go +++ b/vendor/github.com/google/cadvisor/info/v1/machine.go @@ -26,6 +26,9 @@ type FsInfo struct { // Total number of inodes available on the filesystem. Inodes uint64 `json:"inodes"` + + // HasInodes when true, indicates that Inodes info will be available. + HasInodes bool `json:"has_inodes"` } type Node struct { diff --git a/vendor/github.com/gorilla/context/.travis.yml b/vendor/github.com/gorilla/context/.travis.yml index faca4dad..6796581f 100644 --- a/vendor/github.com/gorilla/context/.travis.yml +++ b/vendor/github.com/gorilla/context/.travis.yml @@ -1,19 +1,9 @@ language: go -sudo: false -matrix: - include: - - go: 1.3 - - go: 1.4 - - go: 1.5 - - go: 1.6 - - go: tip - -install: - - go get golang.org/x/tools/cmd/vet - -script: - - go get -t -v ./... - - diff -u <(echo -n) <(gofmt -d .) - - go tool vet . - - go test -v -race ./... +go: + - 1.0 + - 1.1 + - 1.2 + - 1.3 + - 1.4 + - tip diff --git a/vendor/github.com/gorilla/mux/.travis.yml b/vendor/github.com/gorilla/mux/.travis.yml index 4dcdacb6..d87d4657 100644 --- a/vendor/github.com/gorilla/mux/.travis.yml +++ b/vendor/github.com/gorilla/mux/.travis.yml @@ -1,20 +1,7 @@ language: go -sudo: false -matrix: - include: - - go: 1.2 - - go: 1.3 - - go: 1.4 - - go: 1.5 - - go: 1.6 - - go: tip - -install: - - go get golang.org/x/tools/cmd/vet - -script: - - go get -t -v ./... - - diff -u <(echo -n) <(gofmt -d .) - - go tool vet . - - go test -v -race ./... +go: + - 1.0 + - 1.1 + - 1.2 + - tip diff --git a/vendor/github.com/gorilla/mux/README.md b/vendor/github.com/gorilla/mux/README.md index 9516c519..e60301b0 100644 --- a/vendor/github.com/gorilla/mux/README.md +++ b/vendor/github.com/gorilla/mux/README.md @@ -1,242 +1,7 @@ mux === -[![GoDoc](https://godoc.org/github.com/gorilla/mux?status.svg)](https://godoc.org/github.com/gorilla/mux) -[![Build Status](https://travis-ci.org/gorilla/mux.svg?branch=master)](https://travis-ci.org/gorilla/mux) +[![Build Status](https://travis-ci.org/gorilla/mux.png?branch=master)](https://travis-ci.org/gorilla/mux) -http://www.gorillatoolkit.org/pkg/mux +gorilla/mux is a powerful URL router and dispatcher. -Package `gorilla/mux` implements a request router and dispatcher. - -The name mux stands for "HTTP request multiplexer". Like the standard `http.ServeMux`, `mux.Router` matches incoming requests against a list of registered routes and calls a handler for the route that matches the URL or other conditions. The main features are: - -* Requests can be matched based on URL host, path, path prefix, schemes, header and query values, HTTP methods or using custom matchers. -* URL hosts and paths can have variables with an optional regular expression. -* Registered URLs can be built, or "reversed", which helps maintaining references to resources. -* Routes can be used as subrouters: nested routes are only tested if the parent route matches. This is useful to define groups of routes that share common conditions like a host, a path prefix or other repeated attributes. As a bonus, this optimizes request matching. -* It implements the `http.Handler` interface so it is compatible with the standard `http.ServeMux`. - -Let's start registering a couple of URL paths and handlers: - -```go -func main() { - r := mux.NewRouter() - r.HandleFunc("/", HomeHandler) - r.HandleFunc("/products", ProductsHandler) - r.HandleFunc("/articles", ArticlesHandler) - http.Handle("/", r) -} -``` - -Here we register three routes mapping URL paths to handlers. This is equivalent to how `http.HandleFunc()` works: if an incoming request URL matches one of the paths, the corresponding handler is called passing (`http.ResponseWriter`, `*http.Request`) as parameters. - -Paths can have variables. They are defined using the format `{name}` or `{name:pattern}`. If a regular expression pattern is not defined, the matched variable will be anything until the next slash. For example: - -```go -r := mux.NewRouter() -r.HandleFunc("/products/{key}", ProductHandler) -r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler) -r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler) -``` - -The names are used to create a map of route variables which can be retrieved calling `mux.Vars()`: - -```go -vars := mux.Vars(request) -category := vars["category"] -``` - -And this is all you need to know about the basic usage. More advanced options are explained below. - -Routes can also be restricted to a domain or subdomain. Just define a host pattern to be matched. They can also have variables: - -```go -r := mux.NewRouter() -// Only matches if domain is "www.example.com". -r.Host("www.example.com") -// Matches a dynamic subdomain. -r.Host("{subdomain:[a-z]+}.domain.com") -``` - -There are several other matchers that can be added. To match path prefixes: - -```go -r.PathPrefix("/products/") -``` - -...or HTTP methods: - -```go -r.Methods("GET", "POST") -``` - -...or URL schemes: - -```go -r.Schemes("https") -``` - -...or header values: - -```go -r.Headers("X-Requested-With", "XMLHttpRequest") -``` - -...or query values: - -```go -r.Queries("key", "value") -``` - -...or to use a custom matcher function: - -```go -r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool { - return r.ProtoMajor == 0 -}) -``` - -...and finally, it is possible to combine several matchers in a single route: - -```go -r.HandleFunc("/products", ProductsHandler). - Host("www.example.com"). - Methods("GET"). - Schemes("http") -``` - -Setting the same matching conditions again and again can be boring, so we have a way to group several routes that share the same requirements. We call it "subrouting". - -For example, let's say we have several URLs that should only match when the host is `www.example.com`. Create a route for that host and get a "subrouter" from it: - -```go -r := mux.NewRouter() -s := r.Host("www.example.com").Subrouter() -``` - -Then register routes in the subrouter: - -```go -s.HandleFunc("/products/", ProductsHandler) -s.HandleFunc("/products/{key}", ProductHandler) -s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) -``` - -The three URL paths we registered above will only be tested if the domain is `www.example.com`, because the subrouter is tested first. This is not only convenient, but also optimizes request matching. You can create subrouters combining any attribute matchers accepted by a route. - -Subrouters can be used to create domain or path "namespaces": you define subrouters in a central place and then parts of the app can register its paths relatively to a given subrouter. - -There's one more thing about subroutes. When a subrouter has a path prefix, the inner routes use it as base for their paths: - -```go -r := mux.NewRouter() -s := r.PathPrefix("/products").Subrouter() -// "/products/" -s.HandleFunc("/", ProductsHandler) -// "/products/{key}/" -s.HandleFunc("/{key}/", ProductHandler) -// "/products/{key}/details" -s.HandleFunc("/{key}/details", ProductDetailsHandler) -``` - -Now let's see how to build registered URLs. - -Routes can be named. All routes that define a name can have their URLs built, or "reversed". We define a name calling `Name()` on a route. For example: - -```go -r := mux.NewRouter() -r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). - Name("article") -``` - -To build a URL, get the route and call the `URL()` method, passing a sequence of key/value pairs for the route variables. For the previous route, we would do: - -```go -url, err := r.Get("article").URL("category", "technology", "id", "42") -``` - -...and the result will be a `url.URL` with the following path: - -``` -"/articles/technology/42" -``` - -This also works for host variables: - -```go -r := mux.NewRouter() -r.Host("{subdomain}.domain.com"). - Path("/articles/{category}/{id:[0-9]+}"). - HandlerFunc(ArticleHandler). - Name("article") - -// url.String() will be "http://news.domain.com/articles/technology/42" -url, err := r.Get("article").URL("subdomain", "news", - "category", "technology", - "id", "42") -``` - -All variables defined in the route are required, and their values must conform to the corresponding patterns. These requirements guarantee that a generated URL will always match a registered route -- the only exception is for explicitly defined "build-only" routes which never match. - -Regex support also exists for matching Headers within a route. For example, we could do: - -```go -r.HeadersRegexp("Content-Type", "application/(text|json)") -``` - -...and the route will match both requests with a Content-Type of `application/json` as well as `application/text` - -There's also a way to build only the URL host or path for a route: use the methods `URLHost()` or `URLPath()` instead. For the previous route, we would do: - -```go -// "http://news.domain.com/" -host, err := r.Get("article").URLHost("subdomain", "news") - -// "/articles/technology/42" -path, err := r.Get("article").URLPath("category", "technology", "id", "42") -``` - -And if you use subrouters, host and path defined separately can be built as well: - -```go -r := mux.NewRouter() -s := r.Host("{subdomain}.domain.com").Subrouter() -s.Path("/articles/{category}/{id:[0-9]+}"). - HandlerFunc(ArticleHandler). - Name("article") - -// "http://news.domain.com/articles/technology/42" -url, err := r.Get("article").URL("subdomain", "news", - "category", "technology", - "id", "42") -``` - -## Full Example - -Here's a complete, runnable example of a small `mux` based server: - -```go -package main - -import ( - "net/http" - - "github.com/gorilla/mux" -) - -func YourHandler(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("Gorilla!\n")) -} - -func main() { - r := mux.NewRouter() - // Routes consist of a path and a handler function. - r.HandleFunc("/", YourHandler) - - // Bind to a port and pass our router in - http.ListenAndServe(":8000", r) -} -``` - -## License - -BSD licensed. See the LICENSE file for details. +Read the full documentation here: http://www.gorillatoolkit.org/pkg/mux diff --git a/vendor/github.com/gorilla/mux/doc.go b/vendor/github.com/gorilla/mux/doc.go index 835f5342..b2deed34 100644 --- a/vendor/github.com/gorilla/mux/doc.go +++ b/vendor/github.com/gorilla/mux/doc.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. /* -Package mux implements a request router and dispatcher. +Package gorilla/mux implements a request router and dispatcher. The name mux stands for "HTTP request multiplexer". Like the standard http.ServeMux, mux.Router matches incoming requests against a list of @@ -60,8 +60,8 @@ Routes can also be restricted to a domain or subdomain. Just define a host pattern to be matched. They can also have variables: r := mux.NewRouter() - // Only matches if domain is "www.example.com". - r.Host("www.example.com") + // Only matches if domain is "www.domain.com". + r.Host("www.domain.com") // Matches a dynamic subdomain. r.Host("{subdomain:[a-z]+}.domain.com") @@ -89,12 +89,12 @@ There are several other matchers that can be added. To match path prefixes: r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool { return r.ProtoMajor == 0 - }) + }) ...and finally, it is possible to combine several matchers in a single route: r.HandleFunc("/products", ProductsHandler). - Host("www.example.com"). + Host("www.domain.com"). Methods("GET"). Schemes("http") @@ -103,11 +103,11 @@ a way to group several routes that share the same requirements. We call it "subrouting". For example, let's say we have several URLs that should only match when the -host is "www.example.com". Create a route for that host and get a "subrouter" +host is "www.domain.com". Create a route for that host and get a "subrouter" from it: r := mux.NewRouter() - s := r.Host("www.example.com").Subrouter() + s := r.Host("www.domain.com").Subrouter() Then register routes in the subrouter: @@ -116,7 +116,7 @@ Then register routes in the subrouter: s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) The three URL paths we registered above will only be tested if the domain is -"www.example.com", because the subrouter is tested first. This is not +"www.domain.com", because the subrouter is tested first. This is not only convenient, but also optimizes request matching. You can create subrouters combining any attribute matchers accepted by a route. @@ -164,21 +164,14 @@ This also works for host variables: // url.String() will be "http://news.domain.com/articles/technology/42" url, err := r.Get("article").URL("subdomain", "news", - "category", "technology", - "id", "42") + "category", "technology", + "id", "42") All variables defined in the route are required, and their values must conform to the corresponding patterns. These requirements guarantee that a generated URL will always match a registered route -- the only exception is for explicitly defined "build-only" routes which never match. -Regex support also exists for matching Headers within a route. For example, we could do: - - r.HeadersRegexp("Content-Type", "application/(text|json)") - -...and the route will match both requests with a Content-Type of `application/json` as well as -`application/text` - There's also a way to build only the URL host or path for a route: use the methods URLHost() or URLPath() instead. For the previous route, we would do: @@ -200,7 +193,7 @@ as well: // "http://news.domain.com/articles/technology/42" url, err := r.Get("article").URL("subdomain", "news", - "category", "technology", - "id", "42") + "category", "technology", + "id", "42") */ package mux diff --git a/vendor/github.com/gorilla/mux/mux.go b/vendor/github.com/gorilla/mux/mux.go index fbb7f19a..af31d239 100644 --- a/vendor/github.com/gorilla/mux/mux.go +++ b/vendor/github.com/gorilla/mux/mux.go @@ -5,11 +5,9 @@ package mux import ( - "errors" "fmt" "net/http" "path" - "regexp" "github.com/gorilla/context" ) @@ -59,12 +57,6 @@ func (r *Router) Match(req *http.Request, match *RouteMatch) bool { return true } } - - // Closest match for a router (includes sub-routers) - if r.NotFoundHandler != nil { - match.Handler = r.NotFoundHandler - return true - } return false } @@ -76,7 +68,7 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { // Clean path to canonical form and redirect. if p := cleanPath(req.URL.Path); p != req.URL.Path { - // Added 3 lines (Philip Schlump) - It was dropping the query string and #whatever from query. + // Added 3 lines (Philip Schlump) - It was droping the query string and #whatever from query. // This matches with fix in go 1.2 r.c. 4 for same problem. Go Issue: // http://code.google.com/p/go/issues/detail?id=5252 url := *req.URL @@ -95,7 +87,10 @@ func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { setCurrentRoute(req, match.Route) } if handler == nil { - handler = http.NotFoundHandler() + handler = r.NotFoundHandler + if handler == nil { + handler = http.NotFoundHandler() + } } if !r.KeepContext { defer context.Clear(req) @@ -236,58 +231,12 @@ func (r *Router) Schemes(schemes ...string) *Route { return r.NewRoute().Schemes(schemes...) } -// BuildVarsFunc registers a new route with a custom function for modifying +// BuildVars registers a new route with a custom function for modifying // route variables before building a URL. func (r *Router) BuildVarsFunc(f BuildVarsFunc) *Route { return r.NewRoute().BuildVarsFunc(f) } -// Walk walks the router and all its sub-routers, calling walkFn for each route -// in the tree. The routes are walked in the order they were added. Sub-routers -// are explored depth-first. -func (r *Router) Walk(walkFn WalkFunc) error { - return r.walk(walkFn, []*Route{}) -} - -// SkipRouter is used as a return value from WalkFuncs to indicate that the -// router that walk is about to descend down to should be skipped. -var SkipRouter = errors.New("skip this router") - -// WalkFunc is the type of the function called for each route visited by Walk. -// At every invocation, it is given the current route, and the current router, -// and a list of ancestor routes that lead to the current route. -type WalkFunc func(route *Route, router *Router, ancestors []*Route) error - -func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error { - for _, t := range r.routes { - if t.regexp == nil || t.regexp.path == nil || t.regexp.path.template == "" { - continue - } - - err := walkFn(t, r, ancestors) - if err == SkipRouter { - continue - } - for _, sr := range t.matchers { - if h, ok := sr.(*Router); ok { - err := h.walk(walkFn, ancestors) - if err != nil { - return err - } - } - } - if h, ok := t.handler.(*Router); ok { - ancestors = append(ancestors, t) - err := h.walk(walkFn, ancestors) - if err != nil { - return err - } - ancestors = ancestors[:len(ancestors)-1] - } - } - return nil -} - // ---------------------------------------------------------------------------- // Context // ---------------------------------------------------------------------------- @@ -315,10 +264,6 @@ func Vars(r *http.Request) map[string]string { } // CurrentRoute returns the matched route for the current request, if any. -// This only works when called inside the handler of the matched route -// because the matched route is stored in the request context which is cleared -// after the handler returns, unless the KeepContext option is set on the -// Router. func CurrentRoute(r *http.Request) *Route { if rv := context.Get(r, routeKey); rv != nil { return rv.(*Route) @@ -327,15 +272,11 @@ func CurrentRoute(r *http.Request) *Route { } func setVars(r *http.Request, val interface{}) { - if val != nil { - context.Set(r, varsKey, val) - } + context.Set(r, varsKey, val) } func setCurrentRoute(r *http.Request, val interface{}) { - if val != nil { - context.Set(r, routeKey, val) - } + context.Set(r, routeKey, val) } // ---------------------------------------------------------------------------- @@ -372,24 +313,13 @@ func uniqueVars(s1, s2 []string) error { return nil } -// checkPairs returns the count of strings passed in, and an error if -// the count is not an even number. -func checkPairs(pairs ...string) (int, error) { +// mapFromPairs converts variadic string parameters to a string map. +func mapFromPairs(pairs ...string) (map[string]string, error) { length := len(pairs) if length%2 != 0 { - return length, fmt.Errorf( + return nil, fmt.Errorf( "mux: number of parameters must be multiple of 2, got %v", pairs) } - return length, nil -} - -// mapFromPairsToString converts variadic string parameters to a -// string to string map. -func mapFromPairsToString(pairs ...string) (map[string]string, error) { - length, err := checkPairs(pairs...) - if err != nil { - return nil, err - } m := make(map[string]string, length/2) for i := 0; i < length; i += 2 { m[pairs[i]] = pairs[i+1] @@ -397,24 +327,6 @@ func mapFromPairsToString(pairs ...string) (map[string]string, error) { return m, nil } -// mapFromPairsToRegex converts variadic string paramers to a -// string to regex map. -func mapFromPairsToRegex(pairs ...string) (map[string]*regexp.Regexp, error) { - length, err := checkPairs(pairs...) - if err != nil { - return nil, err - } - m := make(map[string]*regexp.Regexp, length/2) - for i := 0; i < length; i += 2 { - regex, err := regexp.Compile(pairs[i+1]) - if err != nil { - return nil, err - } - m[pairs[i]] = regex - } - return m, nil -} - // matchInArray returns true if the given string value is in the array. func matchInArray(arr []string, value string) bool { for _, v := range arr { @@ -425,8 +337,9 @@ func matchInArray(arr []string, value string) bool { return false } -// matchMapWithString returns true if the given key/value pairs exist in a given map. -func matchMapWithString(toCheck map[string]string, toMatch map[string][]string, canonicalKey bool) bool { +// matchMap returns true if the given key/value pairs exist in a given map. +func matchMap(toCheck map[string]string, toMatch map[string][]string, + canonicalKey bool) bool { for k, v := range toCheck { // Check if key exists. if canonicalKey { @@ -451,31 +364,3 @@ func matchMapWithString(toCheck map[string]string, toMatch map[string][]string, } return true } - -// matchMapWithRegex returns true if the given key/value pairs exist in a given map compiled against -// the given regex -func matchMapWithRegex(toCheck map[string]*regexp.Regexp, toMatch map[string][]string, canonicalKey bool) bool { - for k, v := range toCheck { - // Check if key exists. - if canonicalKey { - k = http.CanonicalHeaderKey(k) - } - if values := toMatch[k]; values == nil { - return false - } else if v != nil { - // If value was defined as an empty string we only check that the - // key exists. Otherwise we also check for equality. - valueExists := false - for _, value := range values { - if v.MatchString(value) { - valueExists = true - break - } - } - if !valueExists { - return false - } - } - } - return true -} diff --git a/vendor/github.com/gorilla/mux/regexp.go b/vendor/github.com/gorilla/mux/regexp.go index 08710bc9..aa306798 100644 --- a/vendor/github.com/gorilla/mux/regexp.go +++ b/vendor/github.com/gorilla/mux/regexp.go @@ -10,7 +10,6 @@ import ( "net/http" "net/url" "regexp" - "strconv" "strings" ) @@ -35,7 +34,8 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash // Now let's parse it. defaultPattern := "[^/]+" if matchQuery { - defaultPattern = "[^?&]*" + defaultPattern = "[^?&]+" + matchPrefix = true } else if matchHost { defaultPattern = "[^.]+" matchPrefix = false @@ -53,7 +53,9 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash varsN := make([]string, len(idxs)/2) varsR := make([]*regexp.Regexp, len(idxs)/2) pattern := bytes.NewBufferString("") - pattern.WriteByte('^') + if !matchQuery { + pattern.WriteByte('^') + } reverse := bytes.NewBufferString("") var end int var err error @@ -73,11 +75,9 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash tpl[idxs[i]:end]) } // Build the regexp pattern. - fmt.Fprintf(pattern, "%s(?P<%s>%s)", regexp.QuoteMeta(raw), varGroupName(i/2), patt) - + fmt.Fprintf(pattern, "%s(%s)", regexp.QuoteMeta(raw), patt) // Build the reverse template. fmt.Fprintf(reverse, "%s%%s", raw) - // Append variable name and compiled pattern. varsN[i/2] = name varsR[i/2], err = regexp.Compile(fmt.Sprintf("^%s$", patt)) @@ -91,12 +91,6 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash if strictSlash { pattern.WriteString("[/]?") } - if matchQuery { - // Add the default pattern if the query value is empty - if queryVal := strings.SplitN(template, "=", 2)[1]; queryVal == "" { - pattern.WriteString(defaultPattern) - } - } if !matchPrefix { pattern.WriteByte('$') } @@ -147,12 +141,11 @@ type routeRegexp struct { func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool { if !r.matchHost { if r.matchQuery { - return r.matchQueryString(req) + return r.regexp.MatchString(req.URL.RawQuery) + } else { + return r.regexp.MatchString(req.URL.Path) } - - return r.regexp.MatchString(req.URL.Path) } - return r.regexp.MatchString(getHost(req)) } @@ -182,31 +175,11 @@ func (r *routeRegexp) url(values map[string]string) (string, error) { return rv, nil } -// getURLQuery returns a single query parameter from a request URL. -// For a URL with foo=bar&baz=ding, we return only the relevant key -// value pair for the routeRegexp. -func (r *routeRegexp) getURLQuery(req *http.Request) string { - if !r.matchQuery { - return "" - } - templateKey := strings.SplitN(r.template, "=", 2)[0] - for key, vals := range req.URL.Query() { - if key == templateKey && len(vals) > 0 { - return key + "=" + vals[0] - } - } - return "" -} - -func (r *routeRegexp) matchQueryString(req *http.Request) bool { - return r.regexp.MatchString(r.getURLQuery(req)) -} - // braceIndices returns the first level curly brace indices from a string. // It returns an error in case of unbalanced braces. func braceIndices(s string) ([]int, error) { var level, idx int - var idxs []int + idxs := make([]int, 0) for i := 0; i < len(s); i++ { switch s[i] { case '{': @@ -227,11 +200,6 @@ func braceIndices(s string) ([]int, error) { return idxs, nil } -// varGroupName builds a capturing group name for the indexed variable. -func varGroupName(idx int) string { - return "v" + strconv.Itoa(idx) -} - // ---------------------------------------------------------------------------- // routeRegexpGroup // ---------------------------------------------------------------------------- @@ -247,17 +215,20 @@ type routeRegexpGroup struct { func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) { // Store host variables. if v.host != nil { - host := getHost(req) - matches := v.host.regexp.FindStringSubmatchIndex(host) - if len(matches) > 0 { - extractVars(host, matches, v.host.varsN, m.Vars) + hostVars := v.host.regexp.FindStringSubmatch(getHost(req)) + if hostVars != nil { + for k, v := range v.host.varsN { + m.Vars[v] = hostVars[k+1] + } } } // Store path variables. if v.path != nil { - matches := v.path.regexp.FindStringSubmatchIndex(req.URL.Path) - if len(matches) > 0 { - extractVars(req.URL.Path, matches, v.path.varsN, m.Vars) + pathVars := v.path.regexp.FindStringSubmatch(req.URL.Path) + if pathVars != nil { + for k, v := range v.path.varsN { + m.Vars[v] = pathVars[k+1] + } // Check if we should redirect. if v.path.strictSlash { p1 := strings.HasSuffix(req.URL.Path, "/") @@ -275,11 +246,13 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) } } // Store query string variables. + rawQuery := req.URL.RawQuery for _, q := range v.queries { - queryURL := q.getURLQuery(req) - matches := q.regexp.FindStringSubmatchIndex(queryURL) - if len(matches) > 0 { - extractVars(queryURL, matches, q.varsN, m.Vars) + queryVars := q.regexp.FindStringSubmatch(rawQuery) + if queryVars != nil { + for k, v := range q.varsN { + m.Vars[v] = queryVars[k+1] + } } } } @@ -297,16 +270,3 @@ func getHost(r *http.Request) string { return host } - -func extractVars(input string, matches []int, names []string, output map[string]string) { - matchesCount := 0 - prevEnd := -1 - for i := 2; i < len(matches) && matchesCount < len(names); i += 2 { - if prevEnd < matches[i+1] { - value := input[matches[i]:matches[i+1]] - output[names[matchesCount]] = value - prevEnd = matches[i+1] - matchesCount++ - } - } -} diff --git a/vendor/github.com/gorilla/mux/route.go b/vendor/github.com/gorilla/mux/route.go index bf92af26..d4f01468 100644 --- a/vendor/github.com/gorilla/mux/route.go +++ b/vendor/github.com/gorilla/mux/route.go @@ -9,7 +9,6 @@ import ( "fmt" "net/http" "net/url" - "regexp" "strings" ) @@ -189,7 +188,7 @@ func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix, matchQuery type headerMatcher map[string]string func (m headerMatcher) Match(r *http.Request, match *RouteMatch) bool { - return matchMapWithString(m, r.Header, true) + return matchMap(m, r.Header, true) } // Headers adds a matcher for request header values. @@ -200,46 +199,22 @@ func (m headerMatcher) Match(r *http.Request, match *RouteMatch) bool { // "X-Requested-With", "XMLHttpRequest") // // The above route will only match if both request header values match. -// If the value is an empty string, it will match any value if the key is set. +// +// It the value is an empty string, it will match any value if the key is set. func (r *Route) Headers(pairs ...string) *Route { if r.err == nil { var headers map[string]string - headers, r.err = mapFromPairsToString(pairs...) + headers, r.err = mapFromPairs(pairs...) return r.addMatcher(headerMatcher(headers)) } return r } -// headerRegexMatcher matches the request against the route given a regex for the header -type headerRegexMatcher map[string]*regexp.Regexp - -func (m headerRegexMatcher) Match(r *http.Request, match *RouteMatch) bool { - return matchMapWithRegex(m, r.Header, true) -} - -// HeadersRegexp accepts a sequence of key/value pairs, where the value has regex -// support. For example: -// -// r := mux.NewRouter() -// r.HeadersRegexp("Content-Type", "application/(text|json)", -// "X-Requested-With", "XMLHttpRequest") -// -// The above route will only match if both the request header matches both regular expressions. -// It the value is an empty string, it will match any value if the key is set. -func (r *Route) HeadersRegexp(pairs ...string) *Route { - if r.err == nil { - var headers map[string]*regexp.Regexp - headers, r.err = mapFromPairsToRegex(pairs...) - return r.addMatcher(headerRegexMatcher(headers)) - } - return r -} - // Host ----------------------------------------------------------------------- // Host adds a matcher for the URL host. // It accepts a template with zero or more URL variables enclosed by {}. -// Variables can define an optional regexp pattern to be matched: +// Variables can define an optional regexp pattern to me matched: // // - {name} matches anything until the next dot. // @@ -248,7 +223,7 @@ func (r *Route) HeadersRegexp(pairs ...string) *Route { // For example: // // r := mux.NewRouter() -// r.Host("www.example.com") +// r.Host("www.domain.com") // r.Host("{subdomain}.domain.com") // r.Host("{subdomain:[a-z]+}.domain.com") // @@ -264,7 +239,6 @@ func (r *Route) Host(tpl string) *Route { // MatcherFunc is the function signature used by custom matchers. type MatcherFunc func(*http.Request, *RouteMatch) bool -// Match returns the match for a given request. func (m MatcherFunc) Match(r *http.Request, match *RouteMatch) bool { return m(r, match) } @@ -298,7 +272,7 @@ func (r *Route) Methods(methods ...string) *Route { // Path adds a matcher for the URL path. // It accepts a template with zero or more URL variables enclosed by {}. The // template must start with a "/". -// Variables can define an optional regexp pattern to be matched: +// Variables can define an optional regexp pattern to me matched: // // - {name} matches anything until the next slash. // @@ -349,7 +323,7 @@ func (r *Route) PathPrefix(tpl string) *Route { // // It the value is an empty string, it will match any value if the key is set. // -// Variables can define an optional regexp pattern to be matched: +// Variables can define an optional regexp pattern to me matched: // // - {name} matches anything until the next slash. // @@ -362,7 +336,7 @@ func (r *Route) Queries(pairs ...string) *Route { return nil } for i := 0; i < length; i += 2 { - if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], false, false, true); r.err != nil { + if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], false, true, true); r.err != nil { return r } } @@ -408,7 +382,7 @@ func (r *Route) BuildVarsFunc(f BuildVarsFunc) *Route { // It will test the inner routes only if the parent route matched. For example: // // r := mux.NewRouter() -// s := r.Host("www.example.com").Subrouter() +// s := r.Host("www.domain.com").Subrouter() // s.HandleFunc("/products/", ProductsHandler) // s.HandleFunc("/products/{key}", ProductHandler) // s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) @@ -534,40 +508,10 @@ func (r *Route) URLPath(pairs ...string) (*url.URL, error) { }, nil } -// GetPathTemplate returns the template used to build the -// route match. -// This is useful for building simple REST API documentation and for instrumentation -// against third-party services. -// An error will be returned if the route does not define a path. -func (r *Route) GetPathTemplate() (string, error) { - if r.err != nil { - return "", r.err - } - if r.regexp == nil || r.regexp.path == nil { - return "", errors.New("mux: route doesn't have a path") - } - return r.regexp.path.template, nil -} - -// GetHostTemplate returns the template used to build the -// route match. -// This is useful for building simple REST API documentation and for instrumentation -// against third-party services. -// An error will be returned if the route does not define a host. -func (r *Route) GetHostTemplate() (string, error) { - if r.err != nil { - return "", r.err - } - if r.regexp == nil || r.regexp.host == nil { - return "", errors.New("mux: route doesn't have a host") - } - return r.regexp.host.template, nil -} - // prepareVars converts the route variable pairs into a map. If the route has a // BuildVarsFunc, it is invoked. func (r *Route) prepareVars(pairs ...string) (map[string]string, error) { - m, err := mapFromPairsToString(pairs...) + m, err := mapFromPairs(pairs...) if err != nil { return nil, err } diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt b/vendor/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt new file mode 100644 index 00000000..36451625 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/LICENSE.txt @@ -0,0 +1,27 @@ +Copyright (c) 2015, Gengo, Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name of Gengo, Inc. nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/context.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/context.go new file mode 100644 index 00000000..ad425356 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/context.go @@ -0,0 +1,139 @@ +package runtime + +import ( + "fmt" + "net" + "net/http" + "strconv" + "strings" + "time" + + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" +) + +const metadataHeaderPrefix = "Grpc-Metadata-" +const metadataTrailerPrefix = "Grpc-Trailer-" +const metadataGrpcTimeout = "Grpc-Timeout" + +const xForwardedFor = "X-Forwarded-For" +const xForwardedHost = "X-Forwarded-Host" + +var ( + // DefaultContextTimeout is used for gRPC call context.WithTimeout whenever a Grpc-Timeout inbound + // header isn't present. If the value is 0 the sent `context` will not have a timeout. + DefaultContextTimeout = 0 * time.Second +) + +/* +AnnotateContext adds context information such as metadata from the request. + +At a minimum, the RemoteAddr is included in the fashion of "X-Forwarded-For", +except that the forwarded destination is not another HTTP service but rather +a gRPC service. +*/ +func AnnotateContext(ctx context.Context, req *http.Request) (context.Context, error) { + var pairs []string + timeout := DefaultContextTimeout + if tm := req.Header.Get(metadataGrpcTimeout); tm != "" { + var err error + timeout, err = timeoutDecode(tm) + if err != nil { + return nil, grpc.Errorf(codes.InvalidArgument, "invalid grpc-timeout: %s", tm) + } + } + + for key, vals := range req.Header { + for _, val := range vals { + if key == "Authorization" { + pairs = append(pairs, "authorization", val) + continue + } + if strings.HasPrefix(key, metadataHeaderPrefix) { + pairs = append(pairs, key[len(metadataHeaderPrefix):], val) + } + } + } + if host := req.Header.Get(xForwardedHost); host != "" { + pairs = append(pairs, strings.ToLower(xForwardedHost), host) + } else if req.Host != "" { + pairs = append(pairs, strings.ToLower(xForwardedHost), req.Host) + } + + if addr := req.RemoteAddr; addr != "" { + if remoteIP, _, err := net.SplitHostPort(addr); err == nil { + if fwd := req.Header.Get(xForwardedFor); fwd == "" { + pairs = append(pairs, strings.ToLower(xForwardedFor), remoteIP) + } else { + pairs = append(pairs, strings.ToLower(xForwardedFor), fmt.Sprintf("%s, %s", fwd, remoteIP)) + } + } else { + grpclog.Printf("invalid remote addr: %s", addr) + } + } + + if timeout != 0 { + ctx, _ = context.WithTimeout(ctx, timeout) + } + if len(pairs) == 0 { + return ctx, nil + } + return metadata.NewContext(ctx, metadata.Pairs(pairs...)), nil +} + +// ServerMetadata consists of metadata sent from gRPC server. +type ServerMetadata struct { + HeaderMD metadata.MD + TrailerMD metadata.MD +} + +type serverMetadataKey struct{} + +// NewServerMetadataContext creates a new context with ServerMetadata +func NewServerMetadataContext(ctx context.Context, md ServerMetadata) context.Context { + return context.WithValue(ctx, serverMetadataKey{}, md) +} + +// ServerMetadataFromContext returns the ServerMetadata in ctx +func ServerMetadataFromContext(ctx context.Context) (md ServerMetadata, ok bool) { + md, ok = ctx.Value(serverMetadataKey{}).(ServerMetadata) + return +} + +func timeoutDecode(s string) (time.Duration, error) { + size := len(s) + if size < 2 { + return 0, fmt.Errorf("timeout string is too short: %q", s) + } + d, ok := timeoutUnitToDuration(s[size-1]) + if !ok { + return 0, fmt.Errorf("timeout unit is not recognized: %q", s) + } + t, err := strconv.ParseInt(s[:size-1], 10, 64) + if err != nil { + return 0, err + } + return d * time.Duration(t), nil +} + +func timeoutUnitToDuration(u uint8) (d time.Duration, ok bool) { + switch u { + case 'H': + return time.Hour, true + case 'M': + return time.Minute, true + case 'S': + return time.Second, true + case 'm': + return time.Millisecond, true + case 'u': + return time.Microsecond, true + case 'n': + return time.Nanosecond, true + default: + } + return +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/convert.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/convert.go new file mode 100644 index 00000000..1af5cc4e --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/convert.go @@ -0,0 +1,58 @@ +package runtime + +import ( + "strconv" +) + +// String just returns the given string. +// It is just for compatibility to other types. +func String(val string) (string, error) { + return val, nil +} + +// Bool converts the given string representation of a boolean value into bool. +func Bool(val string) (bool, error) { + return strconv.ParseBool(val) +} + +// Float64 converts the given string representation into representation of a floating point number into float64. +func Float64(val string) (float64, error) { + return strconv.ParseFloat(val, 64) +} + +// Float32 converts the given string representation of a floating point number into float32. +func Float32(val string) (float32, error) { + f, err := strconv.ParseFloat(val, 32) + if err != nil { + return 0, err + } + return float32(f), nil +} + +// Int64 converts the given string representation of an integer into int64. +func Int64(val string) (int64, error) { + return strconv.ParseInt(val, 0, 64) +} + +// Int32 converts the given string representation of an integer into int32. +func Int32(val string) (int32, error) { + i, err := strconv.ParseInt(val, 0, 32) + if err != nil { + return 0, err + } + return int32(i), nil +} + +// Uint64 converts the given string representation of an integer into uint64. +func Uint64(val string) (uint64, error) { + return strconv.ParseUint(val, 0, 64) +} + +// Uint32 converts the given string representation of an integer into uint32. +func Uint32(val string) (uint32, error) { + i, err := strconv.ParseUint(val, 0, 32) + if err != nil { + return 0, err + } + return uint32(i), nil +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/doc.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/doc.go new file mode 100644 index 00000000..b6e5ddf7 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/doc.go @@ -0,0 +1,5 @@ +/* +Package runtime contains runtime helper functions used by +servers which protoc-gen-grpc-gateway generates. +*/ +package runtime diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/errors.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/errors.go new file mode 100644 index 00000000..7d7a9b22 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/errors.go @@ -0,0 +1,121 @@ +package runtime + +import ( + "io" + "net/http" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" +) + +// HTTPStatusFromCode converts a gRPC error code into the corresponding HTTP response status. +func HTTPStatusFromCode(code codes.Code) int { + switch code { + case codes.OK: + return http.StatusOK + case codes.Canceled: + return http.StatusRequestTimeout + case codes.Unknown: + return http.StatusInternalServerError + case codes.InvalidArgument: + return http.StatusBadRequest + case codes.DeadlineExceeded: + return http.StatusRequestTimeout + case codes.NotFound: + return http.StatusNotFound + case codes.AlreadyExists: + return http.StatusConflict + case codes.PermissionDenied: + return http.StatusForbidden + case codes.Unauthenticated: + return http.StatusUnauthorized + case codes.ResourceExhausted: + return http.StatusForbidden + case codes.FailedPrecondition: + return http.StatusPreconditionFailed + case codes.Aborted: + return http.StatusConflict + case codes.OutOfRange: + return http.StatusBadRequest + case codes.Unimplemented: + return http.StatusNotImplemented + case codes.Internal: + return http.StatusInternalServerError + case codes.Unavailable: + return http.StatusServiceUnavailable + case codes.DataLoss: + return http.StatusInternalServerError + } + + grpclog.Printf("Unknown gRPC error code: %v", code) + return http.StatusInternalServerError +} + +var ( + // HTTPError replies to the request with the error. + // You can set a custom function to this variable to customize error format. + HTTPError = DefaultHTTPError + // OtherErrorHandler handles the following error used by the gateway: StatusMethodNotAllowed StatusNotFound and StatusBadRequest + OtherErrorHandler = DefaultOtherErrorHandler +) + +type errorBody struct { + Error string `json:"error"` + Code int `json:"code"` +} + +//Make this also conform to proto.Message for builtin JSONPb Marshaler +func (e *errorBody) Reset() { *e = errorBody{} } +func (e *errorBody) String() string { return proto.CompactTextString(e) } +func (*errorBody) ProtoMessage() {} + +// DefaultHTTPError is the default implementation of HTTPError. +// If "err" is an error from gRPC system, the function replies with the status code mapped by HTTPStatusFromCode. +// If otherwise, it replies with http.StatusInternalServerError. +// +// The response body returned by this function is a JSON object, +// which contains a member whose key is "error" and whose value is err.Error(). +func DefaultHTTPError(ctx context.Context, marshaler Marshaler, w http.ResponseWriter, _ *http.Request, err error) { + const fallback = `{"error": "failed to marshal error message"}` + + w.Header().Del("Trailer") + w.Header().Set("Content-Type", marshaler.ContentType()) + body := &errorBody{ + Error: grpc.ErrorDesc(err), + Code: int(grpc.Code(err)), + } + + buf, merr := marshaler.Marshal(body) + if merr != nil { + grpclog.Printf("Failed to marshal error message %q: %v", body, merr) + w.WriteHeader(http.StatusInternalServerError) + if _, err := io.WriteString(w, fallback); err != nil { + grpclog.Printf("Failed to write response: %v", err) + } + return + } + + md, ok := ServerMetadataFromContext(ctx) + if !ok { + grpclog.Printf("Failed to extract ServerMetadata from context") + } + + handleForwardResponseServerMetadata(w, md) + handleForwardResponseTrailerHeader(w, md) + st := HTTPStatusFromCode(grpc.Code(err)) + w.WriteHeader(st) + if _, err := w.Write(buf); err != nil { + grpclog.Printf("Failed to write response: %v", err) + } + + handleForwardResponseTrailer(w, md) +} + +// DefaultOtherErrorHandler is the default implementation of OtherErrorHandler. +// It simply writes a string representation of the given error into "w". +func DefaultOtherErrorHandler(w http.ResponseWriter, _ *http.Request, msg string, code int) { + http.Error(w, msg, code) +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/handler.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/handler.go new file mode 100644 index 00000000..bafa4285 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/handler.go @@ -0,0 +1,164 @@ +package runtime + +import ( + "fmt" + "io" + "net/http" + "net/textproto" + + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime/internal" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/grpclog" +) + +// ForwardResponseStream forwards the stream from gRPC server to REST client. +func ForwardResponseStream(ctx context.Context, marshaler Marshaler, w http.ResponseWriter, req *http.Request, recv func() (proto.Message, error), opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { + f, ok := w.(http.Flusher) + if !ok { + grpclog.Printf("Flush not supported in %T", w) + http.Error(w, "unexpected type of web server", http.StatusInternalServerError) + return + } + + md, ok := ServerMetadataFromContext(ctx) + if !ok { + grpclog.Printf("Failed to extract ServerMetadata from context") + http.Error(w, "unexpected error", http.StatusInternalServerError) + return + } + handleForwardResponseServerMetadata(w, md) + + w.Header().Set("Transfer-Encoding", "chunked") + w.Header().Set("Content-Type", marshaler.ContentType()) + if err := handleForwardResponseOptions(ctx, w, nil, opts); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.WriteHeader(http.StatusOK) + f.Flush() + for { + resp, err := recv() + if err == io.EOF { + return + } + if err != nil { + handleForwardResponseStreamError(marshaler, w, err) + return + } + if err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil { + handleForwardResponseStreamError(marshaler, w, err) + return + } + + buf, err := marshaler.Marshal(streamChunk(resp, nil)) + if err != nil { + grpclog.Printf("Failed to marshal response chunk: %v", err) + return + } + if _, err = fmt.Fprintf(w, "%s\n", buf); err != nil { + grpclog.Printf("Failed to send response chunk: %v", err) + return + } + f.Flush() + } +} + +func handleForwardResponseServerMetadata(w http.ResponseWriter, md ServerMetadata) { + for k, vs := range md.HeaderMD { + hKey := fmt.Sprintf("%s%s", metadataHeaderPrefix, k) + for i := range vs { + w.Header().Add(hKey, vs[i]) + } + } +} + +func handleForwardResponseTrailerHeader(w http.ResponseWriter, md ServerMetadata) { + for k := range md.TrailerMD { + tKey := textproto.CanonicalMIMEHeaderKey(fmt.Sprintf("%s%s", metadataTrailerPrefix, k)) + w.Header().Add("Trailer", tKey) + } +} + +func handleForwardResponseTrailer(w http.ResponseWriter, md ServerMetadata) { + for k, vs := range md.TrailerMD { + tKey := fmt.Sprintf("%s%s", metadataTrailerPrefix, k) + for i := range vs { + w.Header().Add(tKey, vs[i]) + } + } +} + +// ForwardResponseMessage forwards the message "resp" from gRPC server to REST client. +func ForwardResponseMessage(ctx context.Context, marshaler Marshaler, w http.ResponseWriter, req *http.Request, resp proto.Message, opts ...func(context.Context, http.ResponseWriter, proto.Message) error) { + md, ok := ServerMetadataFromContext(ctx) + if !ok { + grpclog.Printf("Failed to extract ServerMetadata from context") + } + + handleForwardResponseServerMetadata(w, md) + handleForwardResponseTrailerHeader(w, md) + w.Header().Set("Content-Type", marshaler.ContentType()) + if err := handleForwardResponseOptions(ctx, w, resp, opts); err != nil { + HTTPError(ctx, marshaler, w, req, err) + return + } + + buf, err := marshaler.Marshal(resp) + if err != nil { + grpclog.Printf("Marshal error: %v", err) + HTTPError(ctx, marshaler, w, req, err) + return + } + + if _, err = w.Write(buf); err != nil { + grpclog.Printf("Failed to write response: %v", err) + } + + handleForwardResponseTrailer(w, md) +} + +func handleForwardResponseOptions(ctx context.Context, w http.ResponseWriter, resp proto.Message, opts []func(context.Context, http.ResponseWriter, proto.Message) error) error { + if len(opts) == 0 { + return nil + } + for _, opt := range opts { + if err := opt(ctx, w, resp); err != nil { + grpclog.Printf("Error handling ForwardResponseOptions: %v", err) + return err + } + } + return nil +} + +func handleForwardResponseStreamError(marshaler Marshaler, w http.ResponseWriter, err error) { + buf, merr := marshaler.Marshal(streamChunk(nil, err)) + if merr != nil { + grpclog.Printf("Failed to marshal an error: %v", merr) + return + } + if _, werr := fmt.Fprintf(w, "%s\n", buf); werr != nil { + grpclog.Printf("Failed to notify error to client: %v", werr) + return + } +} + +func streamChunk(result proto.Message, err error) map[string]proto.Message { + if err != nil { + grpcCode := grpc.Code(err) + httpCode := HTTPStatusFromCode(grpcCode) + return map[string]proto.Message{ + "error": &internal.StreamError{ + GrpcCode: int32(grpcCode), + HttpCode: int32(httpCode), + Message: err.Error(), + HttpStatus: http.StatusText(httpCode), + }, + } + } + if result == nil { + return streamChunk(nil, fmt.Errorf("empty response")) + } + return map[string]proto.Message{"result": result} +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/internal/stream_chunk.pb.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/internal/stream_chunk.pb.go new file mode 100644 index 00000000..524e0d3c --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/internal/stream_chunk.pb.go @@ -0,0 +1,65 @@ +// Code generated by protoc-gen-go. +// source: runtime/internal/stream_chunk.proto +// DO NOT EDIT! + +/* +Package internal is a generated protocol buffer package. + +It is generated from these files: + runtime/internal/stream_chunk.proto + +It has these top-level messages: + StreamError +*/ +package internal + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// StreamError is a response type which is returned when +// streaming rpc returns an error. +type StreamError struct { + GrpcCode int32 `protobuf:"varint,1,opt,name=grpc_code,json=grpcCode" json:"grpc_code,omitempty"` + HttpCode int32 `protobuf:"varint,2,opt,name=http_code,json=httpCode" json:"http_code,omitempty"` + Message string `protobuf:"bytes,3,opt,name=message" json:"message,omitempty"` + HttpStatus string `protobuf:"bytes,4,opt,name=http_status,json=httpStatus" json:"http_status,omitempty"` +} + +func (m *StreamError) Reset() { *m = StreamError{} } +func (m *StreamError) String() string { return proto.CompactTextString(m) } +func (*StreamError) ProtoMessage() {} +func (*StreamError) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func init() { + proto.RegisterType((*StreamError)(nil), "grpc.gateway.runtime.StreamError") +} + +func init() { proto.RegisterFile("runtime/internal/stream_chunk.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 180 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x52, 0x2e, 0x2a, 0xcd, 0x2b, + 0xc9, 0xcc, 0x4d, 0xd5, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0xca, 0x4b, 0xcc, 0xd1, 0x2f, 0x2e, 0x29, + 0x4a, 0x4d, 0xcc, 0x8d, 0x4f, 0xce, 0x28, 0xcd, 0xcb, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x12, 0x49, 0x2f, 0x2a, 0x48, 0xd6, 0x4b, 0x4f, 0x2c, 0x49, 0x2d, 0x4f, 0xac, 0xd4, 0x83, 0xea, + 0x50, 0x6a, 0x62, 0xe4, 0xe2, 0x0e, 0x06, 0x2b, 0x76, 0x2d, 0x2a, 0xca, 0x2f, 0x12, 0x92, 0xe6, + 0xe2, 0x04, 0xa9, 0x8b, 0x4f, 0xce, 0x4f, 0x49, 0x95, 0x60, 0x54, 0x60, 0xd4, 0x60, 0x0d, 0xe2, + 0x00, 0x09, 0x38, 0x03, 0xf9, 0x20, 0xc9, 0x8c, 0x92, 0x92, 0x02, 0x88, 0x24, 0x13, 0x44, 0x12, + 0x24, 0x00, 0x96, 0x94, 0xe0, 0x62, 0xcf, 0x4d, 0x2d, 0x2e, 0x4e, 0x4c, 0x4f, 0x95, 0x60, 0x06, + 0x4a, 0x71, 0x06, 0xc1, 0xb8, 0x42, 0xf2, 0x5c, 0xdc, 0x60, 0x6d, 0xc5, 0x25, 0x89, 0x25, 0xa5, + 0xc5, 0x12, 0x2c, 0x60, 0x59, 0x2e, 0x90, 0x50, 0x30, 0x58, 0xc4, 0x89, 0x2b, 0x8a, 0x03, 0xe6, + 0xf2, 0x24, 0x36, 0xb0, 0x6b, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa9, 0x07, 0x92, 0xb6, + 0xd4, 0x00, 0x00, 0x00, +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/internal/stream_chunk.proto b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/internal/stream_chunk.proto new file mode 100644 index 00000000..f7fba56c --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/internal/stream_chunk.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package grpc.gateway.runtime; +option go_package = "internal"; + +// StreamError is a response type which is returned when +// streaming rpc returns an error. +message StreamError { + int32 grpc_code = 1; + int32 http_code = 2; + string message = 3; + string http_status = 4; +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_json.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_json.go new file mode 100644 index 00000000..0acd2ca2 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_json.go @@ -0,0 +1,37 @@ +package runtime + +import ( + "encoding/json" + "io" +) + +// JSONBuiltin is a Marshaler which marshals/unmarshals into/from JSON +// with the standard "encoding/json" package of Golang. +// Although it is generally faster for simple proto messages than JSONPb, +// it does not support advanced features of protobuf, e.g. map, oneof, .... +type JSONBuiltin struct{} + +// ContentType always Returns "application/json". +func (*JSONBuiltin) ContentType() string { + return "application/json" +} + +// Marshal marshals "v" into JSON +func (j *JSONBuiltin) Marshal(v interface{}) ([]byte, error) { + return json.Marshal(v) +} + +// Unmarshal unmarshals JSON data into "v". +func (j *JSONBuiltin) Unmarshal(data []byte, v interface{}) error { + return json.Unmarshal(data, v) +} + +// NewDecoder returns a Decoder which reads JSON stream from "r". +func (j *JSONBuiltin) NewDecoder(r io.Reader) Decoder { + return json.NewDecoder(r) +} + +// NewEncoder returns an Encoder which writes JSON stream into "w". +func (j *JSONBuiltin) NewEncoder(w io.Writer) Encoder { + return json.NewEncoder(w) +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_jsonpb.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_jsonpb.go new file mode 100644 index 00000000..9a421911 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshal_jsonpb.go @@ -0,0 +1,182 @@ +package runtime + +import ( + "bytes" + "encoding/json" + "fmt" + "io" + "reflect" + + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" +) + +// JSONPb is a Marshaler which marshals/unmarshals into/from JSON +// with the "github.com/golang/protobuf/jsonpb". +// It supports fully functionality of protobuf unlike JSONBuiltin. +type JSONPb jsonpb.Marshaler + +// ContentType always returns "application/json". +func (*JSONPb) ContentType() string { + return "application/json" +} + +// Marshal marshals "v" into JSON +// Currently it can marshal only proto.Message. +// TODO(yugui) Support fields of primitive types in a message. +func (j *JSONPb) Marshal(v interface{}) ([]byte, error) { + if _, ok := v.(proto.Message); !ok { + return j.marshalNonProtoField(v) + } + + var buf bytes.Buffer + if err := j.marshalTo(&buf, v); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +func (j *JSONPb) marshalTo(w io.Writer, v interface{}) error { + p, ok := v.(proto.Message) + if !ok { + buf, err := j.marshalNonProtoField(v) + if err != nil { + return err + } + _, err = w.Write(buf) + return err + } + return (*jsonpb.Marshaler)(j).Marshal(w, p) +} + +// marshalNonProto marshals a non-message field of a protobuf message. +// This function does not correctly marshals arbitary data structure into JSON, +// but it is only capable of marshaling non-message field values of protobuf, +// i.e. primitive types, enums; pointers to primitives or enums; maps from +// integer/string types to primitives/enums/pointers to messages. +func (j *JSONPb) marshalNonProtoField(v interface{}) ([]byte, error) { + rv := reflect.ValueOf(v) + for rv.Kind() == reflect.Ptr { + if rv.IsNil() { + return []byte("null"), nil + } + rv = rv.Elem() + } + + if rv.Kind() == reflect.Map { + m := make(map[string]*json.RawMessage) + for _, k := range rv.MapKeys() { + buf, err := j.Marshal(rv.MapIndex(k).Interface()) + if err != nil { + return nil, err + } + m[fmt.Sprintf("%v", k.Interface())] = (*json.RawMessage)(&buf) + } + if j.Indent != "" { + return json.MarshalIndent(m, "", j.Indent) + } + return json.Marshal(m) + } + if enum, ok := rv.Interface().(protoEnum); ok && !j.EnumsAsInts { + return json.Marshal(enum.String()) + } + return json.Marshal(rv.Interface()) +} + +// Unmarshal unmarshals JSON "data" into "v" +// Currently it can marshal only proto.Message. +// TODO(yugui) Support fields of primitive types in a message. +func (j *JSONPb) Unmarshal(data []byte, v interface{}) error { + return unmarshalJSONPb(data, v) +} + +// NewDecoder returns a Decoder which reads JSON stream from "r". +func (j *JSONPb) NewDecoder(r io.Reader) Decoder { + d := json.NewDecoder(r) + return DecoderFunc(func(v interface{}) error { return decodeJSONPb(d, v) }) +} + +// NewEncoder returns an Encoder which writes JSON stream into "w". +func (j *JSONPb) NewEncoder(w io.Writer) Encoder { + return EncoderFunc(func(v interface{}) error { return j.marshalTo(w, v) }) +} + +func unmarshalJSONPb(data []byte, v interface{}) error { + d := json.NewDecoder(bytes.NewReader(data)) + return decodeJSONPb(d, v) +} + +func decodeJSONPb(d *json.Decoder, v interface{}) error { + p, ok := v.(proto.Message) + if !ok { + return decodeNonProtoField(d, v) + } + return jsonpb.UnmarshalNext(d, p) +} + +func decodeNonProtoField(d *json.Decoder, v interface{}) error { + rv := reflect.ValueOf(v) + if rv.Kind() != reflect.Ptr { + return fmt.Errorf("%T is not a pointer", v) + } + for rv.Kind() == reflect.Ptr { + if rv.IsNil() { + rv.Set(reflect.New(rv.Type().Elem())) + } + if rv.Type().ConvertibleTo(typeProtoMessage) { + return jsonpb.UnmarshalNext(d, rv.Interface().(proto.Message)) + } + rv = rv.Elem() + } + if rv.Kind() == reflect.Map { + if rv.IsNil() { + rv.Set(reflect.MakeMap(rv.Type())) + } + conv, ok := convFromType[rv.Type().Key().Kind()] + if !ok { + return fmt.Errorf("unsupported type of map field key: %v", rv.Type().Key()) + } + + m := make(map[string]*json.RawMessage) + if err := d.Decode(&m); err != nil { + return err + } + for k, v := range m { + result := conv.Call([]reflect.Value{reflect.ValueOf(k)}) + if err := result[1].Interface(); err != nil { + return err.(error) + } + bk := result[0] + bv := reflect.New(rv.Type().Elem()) + if err := unmarshalJSONPb([]byte(*v), bv.Interface()); err != nil { + return err + } + rv.SetMapIndex(bk, bv.Elem()) + } + return nil + } + if _, ok := rv.Interface().(protoEnum); ok { + var repr interface{} + if err := d.Decode(&repr); err != nil { + return err + } + switch repr.(type) { + case string: + // TODO(yugui) Should use proto.StructProperties? + return fmt.Errorf("unmarshaling of symbolic enum %q not supported: %T", repr, rv.Interface()) + case float64: + rv.Set(reflect.ValueOf(int32(repr.(float64))).Convert(rv.Type())) + return nil + default: + return fmt.Errorf("cannot assign %#v into Go type %T", repr, rv.Interface()) + } + } + return d.Decode(v) +} + +type protoEnum interface { + fmt.Stringer + EnumDescriptor() ([]byte, []int) +} + +var typeProtoMessage = reflect.TypeOf((*proto.Message)(nil)).Elem() diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshaler.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshaler.go new file mode 100644 index 00000000..6d434f13 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshaler.go @@ -0,0 +1,42 @@ +package runtime + +import ( + "io" +) + +// Marshaler defines a conversion between byte sequence and gRPC payloads / fields. +type Marshaler interface { + // Marshal marshals "v" into byte sequence. + Marshal(v interface{}) ([]byte, error) + // Unmarshal unmarshals "data" into "v". + // "v" must be a pointer value. + Unmarshal(data []byte, v interface{}) error + // NewDecoder returns a Decoder which reads byte sequence from "r". + NewDecoder(r io.Reader) Decoder + // NewEncoder returns an Encoder which writes bytes sequence into "w". + NewEncoder(w io.Writer) Encoder + // ContentType returns the Content-Type which this marshaler is responsible for. + ContentType() string +} + +// Decoder decodes a byte sequence +type Decoder interface { + Decode(v interface{}) error +} + +// Encoder encodes gRPC payloads / fields into byte sequence. +type Encoder interface { + Encode(v interface{}) error +} + +// DecoderFunc adapts an decoder function into Decoder. +type DecoderFunc func(v interface{}) error + +// Decode delegates invocations to the underlying function itself. +func (f DecoderFunc) Decode(v interface{}) error { return f(v) } + +// EncoderFunc adapts an encoder function into Encoder +type EncoderFunc func(v interface{}) error + +// Encode delegates invocations to the underlying function itself. +func (f EncoderFunc) Encode(v interface{}) error { return f(v) } diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshaler_registry.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshaler_registry.go new file mode 100644 index 00000000..928f0733 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/marshaler_registry.go @@ -0,0 +1,91 @@ +package runtime + +import ( + "errors" + "net/http" +) + +// MIMEWildcard is the fallback MIME type used for requests which do not match +// a registered MIME type. +const MIMEWildcard = "*" + +var ( + acceptHeader = http.CanonicalHeaderKey("Accept") + contentTypeHeader = http.CanonicalHeaderKey("Content-Type") + + defaultMarshaler = &JSONPb{OrigName: true} +) + +// MarshalerForRequest returns the inbound/outbound marshalers for this request. +// It checks the registry on the ServeMux for the MIME type set by the Content-Type header. +// If it isn't set (or the request Content-Type is empty), checks for "*". +// If there are multiple Content-Type headers set, choose the first one that it can +// exactly match in the registry. +// Otherwise, it follows the above logic for "*"/InboundMarshaler/OutboundMarshaler. +func MarshalerForRequest(mux *ServeMux, r *http.Request) (inbound Marshaler, outbound Marshaler) { + for _, acceptVal := range r.Header[acceptHeader] { + if m, ok := mux.marshalers.mimeMap[acceptVal]; ok { + outbound = m + break + } + } + + for _, contentTypeVal := range r.Header[contentTypeHeader] { + if m, ok := mux.marshalers.mimeMap[contentTypeVal]; ok { + inbound = m + break + } + } + + if inbound == nil { + inbound = mux.marshalers.mimeMap[MIMEWildcard] + } + if outbound == nil { + outbound = inbound + } + + return inbound, outbound +} + +// marshalerRegistry is a mapping from MIME types to Marshalers. +type marshalerRegistry struct { + mimeMap map[string]Marshaler +} + +// add adds a marshaler for a case-sensitive MIME type string ("*" to match any +// MIME type). +func (m marshalerRegistry) add(mime string, marshaler Marshaler) error { + if len(mime) == 0 { + return errors.New("empty MIME type") + } + + m.mimeMap[mime] = marshaler + + return nil +} + +// makeMarshalerMIMERegistry returns a new registry of marshalers. +// It allows for a mapping of case-sensitive Content-Type MIME type string to runtime.Marshaler interfaces. +// +// For example, you could allow the client to specify the use of the runtime.JSONPb marshaler +// with a "applicaton/jsonpb" Content-Type and the use of the runtime.JSONBuiltin marshaler +// with a "application/json" Content-Type. +// "*" can be used to match any Content-Type. +// This can be attached to a ServerMux with the marshaler option. +func makeMarshalerMIMERegistry() marshalerRegistry { + return marshalerRegistry{ + mimeMap: map[string]Marshaler{ + MIMEWildcard: defaultMarshaler, + }, + } +} + +// WithMarshalerOption returns a ServeMuxOption which associates inbound and outbound +// Marshalers to a MIME type in mux. +func WithMarshalerOption(mime string, marshaler Marshaler) ServeMuxOption { + return func(mux *ServeMux) { + if err := mux.marshalers.add(mime, marshaler); err != nil { + panic(err) + } + } +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/mux.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/mux.go new file mode 100644 index 00000000..2e6c5621 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/mux.go @@ -0,0 +1,132 @@ +package runtime + +import ( + "net/http" + "strings" + + "golang.org/x/net/context" + + "github.com/golang/protobuf/proto" +) + +// A HandlerFunc handles a specific pair of path pattern and HTTP method. +type HandlerFunc func(w http.ResponseWriter, r *http.Request, pathParams map[string]string) + +// ServeMux is a request multiplexer for grpc-gateway. +// It matches http requests to patterns and invokes the corresponding handler. +type ServeMux struct { + // handlers maps HTTP method to a list of handlers. + handlers map[string][]handler + forwardResponseOptions []func(context.Context, http.ResponseWriter, proto.Message) error + marshalers marshalerRegistry +} + +// ServeMuxOption is an option that can be given to a ServeMux on construction. +type ServeMuxOption func(*ServeMux) + +// WithForwardResponseOption returns a ServeMuxOption representing the forwardResponseOption. +// +// forwardResponseOption is an option that will be called on the relevant context.Context, +// http.ResponseWriter, and proto.Message before every forwarded response. +// +// The message may be nil in the case where just a header is being sent. +func WithForwardResponseOption(forwardResponseOption func(context.Context, http.ResponseWriter, proto.Message) error) ServeMuxOption { + return func(serveMux *ServeMux) { + serveMux.forwardResponseOptions = append(serveMux.forwardResponseOptions, forwardResponseOption) + } +} + +// NewServeMux returns a new ServeMux whose internal mapping is empty. +func NewServeMux(opts ...ServeMuxOption) *ServeMux { + serveMux := &ServeMux{ + handlers: make(map[string][]handler), + forwardResponseOptions: make([]func(context.Context, http.ResponseWriter, proto.Message) error, 0), + marshalers: makeMarshalerMIMERegistry(), + } + + for _, opt := range opts { + opt(serveMux) + } + return serveMux +} + +// Handle associates "h" to the pair of HTTP method and path pattern. +func (s *ServeMux) Handle(meth string, pat Pattern, h HandlerFunc) { + s.handlers[meth] = append(s.handlers[meth], handler{pat: pat, h: h}) +} + +// ServeHTTP dispatches the request to the first handler whose pattern matches to r.Method and r.Path. +func (s *ServeMux) ServeHTTP(w http.ResponseWriter, r *http.Request) { + path := r.URL.Path + if !strings.HasPrefix(path, "/") { + OtherErrorHandler(w, r, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) + return + } + + components := strings.Split(path[1:], "/") + l := len(components) + var verb string + if idx := strings.LastIndex(components[l-1], ":"); idx == 0 { + OtherErrorHandler(w, r, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return + } else if idx > 0 { + c := components[l-1] + components[l-1], verb = c[:idx], c[idx+1:] + } + + if override := r.Header.Get("X-HTTP-Method-Override"); override != "" && isPathLengthFallback(r) { + r.Method = strings.ToUpper(override) + if err := r.ParseForm(); err != nil { + OtherErrorHandler(w, r, err.Error(), http.StatusBadRequest) + return + } + } + for _, h := range s.handlers[r.Method] { + pathParams, err := h.pat.Match(components, verb) + if err != nil { + continue + } + h.h(w, r, pathParams) + return + } + + // lookup other methods to handle fallback from GET to POST and + // to determine if it is MethodNotAllowed or NotFound. + for m, handlers := range s.handlers { + if m == r.Method { + continue + } + for _, h := range handlers { + pathParams, err := h.pat.Match(components, verb) + if err != nil { + continue + } + // X-HTTP-Method-Override is optional. Always allow fallback to POST. + if isPathLengthFallback(r) { + if err := r.ParseForm(); err != nil { + OtherErrorHandler(w, r, err.Error(), http.StatusBadRequest) + return + } + h.h(w, r, pathParams) + return + } + OtherErrorHandler(w, r, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed) + return + } + } + OtherErrorHandler(w, r, http.StatusText(http.StatusNotFound), http.StatusNotFound) +} + +// GetForwardResponseOptions returns the ForwardResponseOptions associated with this ServeMux. +func (s *ServeMux) GetForwardResponseOptions() []func(context.Context, http.ResponseWriter, proto.Message) error { + return s.forwardResponseOptions +} + +func isPathLengthFallback(r *http.Request) bool { + return r.Method == "POST" && r.Header.Get("Content-Type") == "application/x-www-form-urlencoded" +} + +type handler struct { + pat Pattern + h HandlerFunc +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/pattern.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/pattern.go new file mode 100644 index 00000000..3947dbea --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/pattern.go @@ -0,0 +1,227 @@ +package runtime + +import ( + "errors" + "fmt" + "strings" + + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc/grpclog" +) + +var ( + // ErrNotMatch indicates that the given HTTP request path does not match to the pattern. + ErrNotMatch = errors.New("not match to the path pattern") + // ErrInvalidPattern indicates that the given definition of Pattern is not valid. + ErrInvalidPattern = errors.New("invalid pattern") +) + +type op struct { + code utilities.OpCode + operand int +} + +// Pattern is a template pattern of http request paths defined in third_party/googleapis/google/api/http.proto. +type Pattern struct { + // ops is a list of operations + ops []op + // pool is a constant pool indexed by the operands or vars. + pool []string + // vars is a list of variables names to be bound by this pattern + vars []string + // stacksize is the max depth of the stack + stacksize int + // tailLen is the length of the fixed-size segments after a deep wildcard + tailLen int + // verb is the VERB part of the path pattern. It is empty if the pattern does not have VERB part. + verb string +} + +// NewPattern returns a new Pattern from the given definition values. +// "ops" is a sequence of op codes. "pool" is a constant pool. +// "verb" is the verb part of the pattern. It is empty if the pattern does not have the part. +// "version" must be 1 for now. +// It returns an error if the given definition is invalid. +func NewPattern(version int, ops []int, pool []string, verb string) (Pattern, error) { + if version != 1 { + grpclog.Printf("unsupported version: %d", version) + return Pattern{}, ErrInvalidPattern + } + + l := len(ops) + if l%2 != 0 { + grpclog.Printf("odd number of ops codes: %d", l) + return Pattern{}, ErrInvalidPattern + } + + var ( + typedOps []op + stack, maxstack int + tailLen int + pushMSeen bool + vars []string + ) + for i := 0; i < l; i += 2 { + op := op{code: utilities.OpCode(ops[i]), operand: ops[i+1]} + switch op.code { + case utilities.OpNop: + continue + case utilities.OpPush: + if pushMSeen { + tailLen++ + } + stack++ + case utilities.OpPushM: + if pushMSeen { + grpclog.Printf("pushM appears twice") + return Pattern{}, ErrInvalidPattern + } + pushMSeen = true + stack++ + case utilities.OpLitPush: + if op.operand < 0 || len(pool) <= op.operand { + grpclog.Printf("negative literal index: %d", op.operand) + return Pattern{}, ErrInvalidPattern + } + if pushMSeen { + tailLen++ + } + stack++ + case utilities.OpConcatN: + if op.operand <= 0 { + grpclog.Printf("negative concat size: %d", op.operand) + return Pattern{}, ErrInvalidPattern + } + stack -= op.operand + if stack < 0 { + grpclog.Print("stack underflow") + return Pattern{}, ErrInvalidPattern + } + stack++ + case utilities.OpCapture: + if op.operand < 0 || len(pool) <= op.operand { + grpclog.Printf("variable name index out of bound: %d", op.operand) + return Pattern{}, ErrInvalidPattern + } + v := pool[op.operand] + op.operand = len(vars) + vars = append(vars, v) + stack-- + if stack < 0 { + grpclog.Printf("stack underflow") + return Pattern{}, ErrInvalidPattern + } + default: + grpclog.Printf("invalid opcode: %d", op.code) + return Pattern{}, ErrInvalidPattern + } + + if maxstack < stack { + maxstack = stack + } + typedOps = append(typedOps, op) + } + return Pattern{ + ops: typedOps, + pool: pool, + vars: vars, + stacksize: maxstack, + tailLen: tailLen, + verb: verb, + }, nil +} + +// MustPattern is a helper function which makes it easier to call NewPattern in variable initialization. +func MustPattern(p Pattern, err error) Pattern { + if err != nil { + grpclog.Fatalf("Pattern initialization failed: %v", err) + } + return p +} + +// Match examines components if it matches to the Pattern. +// If it matches, the function returns a mapping from field paths to their captured values. +// If otherwise, the function returns an error. +func (p Pattern) Match(components []string, verb string) (map[string]string, error) { + if p.verb != verb { + return nil, ErrNotMatch + } + + var pos int + stack := make([]string, 0, p.stacksize) + captured := make([]string, len(p.vars)) + l := len(components) + for _, op := range p.ops { + switch op.code { + case utilities.OpNop: + continue + case utilities.OpPush, utilities.OpLitPush: + if pos >= l { + return nil, ErrNotMatch + } + c := components[pos] + if op.code == utilities.OpLitPush { + if lit := p.pool[op.operand]; c != lit { + return nil, ErrNotMatch + } + } + stack = append(stack, c) + pos++ + case utilities.OpPushM: + end := len(components) + if end < pos+p.tailLen { + return nil, ErrNotMatch + } + end -= p.tailLen + stack = append(stack, strings.Join(components[pos:end], "/")) + pos = end + case utilities.OpConcatN: + n := op.operand + l := len(stack) - n + stack = append(stack[:l], strings.Join(stack[l:], "/")) + case utilities.OpCapture: + n := len(stack) - 1 + captured[op.operand] = stack[n] + stack = stack[:n] + } + } + if pos < l { + return nil, ErrNotMatch + } + bindings := make(map[string]string) + for i, val := range captured { + bindings[p.vars[i]] = val + } + return bindings, nil +} + +// Verb returns the verb part of the Pattern. +func (p Pattern) Verb() string { return p.verb } + +func (p Pattern) String() string { + var stack []string + for _, op := range p.ops { + switch op.code { + case utilities.OpNop: + continue + case utilities.OpPush: + stack = append(stack, "*") + case utilities.OpLitPush: + stack = append(stack, p.pool[op.operand]) + case utilities.OpPushM: + stack = append(stack, "**") + case utilities.OpConcatN: + n := op.operand + l := len(stack) - n + stack = append(stack[:l], strings.Join(stack[l:], "/")) + case utilities.OpCapture: + n := len(stack) - 1 + stack[n] = fmt.Sprintf("{%s=%s}", p.vars[op.operand], stack[n]) + } + } + segs := strings.Join(stack, "/") + if p.verb != "" { + return fmt.Sprintf("/%s:%s", segs, p.verb) + } + return "/" + segs +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/proto2_convert.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/proto2_convert.go new file mode 100644 index 00000000..a3151e2a --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/proto2_convert.go @@ -0,0 +1,80 @@ +package runtime + +import ( + "github.com/golang/protobuf/proto" +) + +// StringP returns a pointer to a string whose pointee is same as the given string value. +func StringP(val string) (*string, error) { + return proto.String(val), nil +} + +// BoolP parses the given string representation of a boolean value, +// and returns a pointer to a bool whose value is same as the parsed value. +func BoolP(val string) (*bool, error) { + b, err := Bool(val) + if err != nil { + return nil, err + } + return proto.Bool(b), nil +} + +// Float64P parses the given string representation of a floating point number, +// and returns a pointer to a float64 whose value is same as the parsed number. +func Float64P(val string) (*float64, error) { + f, err := Float64(val) + if err != nil { + return nil, err + } + return proto.Float64(f), nil +} + +// Float32P parses the given string representation of a floating point number, +// and returns a pointer to a float32 whose value is same as the parsed number. +func Float32P(val string) (*float32, error) { + f, err := Float32(val) + if err != nil { + return nil, err + } + return proto.Float32(f), nil +} + +// Int64P parses the given string representation of an integer +// and returns a pointer to a int64 whose value is same as the parsed integer. +func Int64P(val string) (*int64, error) { + i, err := Int64(val) + if err != nil { + return nil, err + } + return proto.Int64(i), nil +} + +// Int32P parses the given string representation of an integer +// and returns a pointer to a int32 whose value is same as the parsed integer. +func Int32P(val string) (*int32, error) { + i, err := Int32(val) + if err != nil { + return nil, err + } + return proto.Int32(i), err +} + +// Uint64P parses the given string representation of an integer +// and returns a pointer to a uint64 whose value is same as the parsed integer. +func Uint64P(val string) (*uint64, error) { + i, err := Uint64(val) + if err != nil { + return nil, err + } + return proto.Uint64(i), err +} + +// Uint32P parses the given string representation of an integer +// and returns a pointer to a uint32 whose value is same as the parsed integer. +func Uint32P(val string) (*uint32, error) { + i, err := Uint32(val) + if err != nil { + return nil, err + } + return proto.Uint32(i), err +} diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/query.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/query.go new file mode 100644 index 00000000..56a919a5 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/runtime/query.go @@ -0,0 +1,140 @@ +package runtime + +import ( + "fmt" + "net/url" + "reflect" + "strings" + + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc/grpclog" +) + +// PopulateQueryParameters populates "values" into "msg". +// A value is ignored if its key starts with one of the elements in "filter". +func PopulateQueryParameters(msg proto.Message, values url.Values, filter *utilities.DoubleArray) error { + for key, values := range values { + fieldPath := strings.Split(key, ".") + if filter.HasCommonPrefix(fieldPath) { + continue + } + if err := populateFieldValueFromPath(msg, fieldPath, values); err != nil { + return err + } + } + return nil +} + +// PopulateFieldFromPath sets a value in a nested Protobuf structure. +// It instantiates missing protobuf fields as it goes. +func PopulateFieldFromPath(msg proto.Message, fieldPathString string, value string) error { + fieldPath := strings.Split(fieldPathString, ".") + return populateFieldValueFromPath(msg, fieldPath, []string{value}) +} + +func populateFieldValueFromPath(msg proto.Message, fieldPath []string, values []string) error { + m := reflect.ValueOf(msg) + if m.Kind() != reflect.Ptr { + return fmt.Errorf("unexpected type %T: %v", msg, msg) + } + m = m.Elem() + for i, fieldName := range fieldPath { + isLast := i == len(fieldPath)-1 + if !isLast && m.Kind() != reflect.Struct { + return fmt.Errorf("non-aggregate type in the mid of path: %s", strings.Join(fieldPath, ".")) + } + f := fieldByProtoName(m, fieldName) + if !f.IsValid() { + grpclog.Printf("field not found in %T: %s", msg, strings.Join(fieldPath, ".")) + return nil + } + + switch f.Kind() { + case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.String, reflect.Uint32, reflect.Uint64: + m = f + case reflect.Slice: + // TODO(yugui) Support []byte + if !isLast { + return fmt.Errorf("unexpected repeated field in %s", strings.Join(fieldPath, ".")) + } + return populateRepeatedField(f, values) + case reflect.Ptr: + if f.IsNil() { + m = reflect.New(f.Type().Elem()) + f.Set(m) + } + m = f.Elem() + continue + case reflect.Struct: + m = f + continue + default: + return fmt.Errorf("unexpected type %s in %T", f.Type(), msg) + } + } + switch len(values) { + case 0: + return fmt.Errorf("no value of field: %s", strings.Join(fieldPath, ".")) + case 1: + default: + grpclog.Printf("too many field values: %s", strings.Join(fieldPath, ".")) + } + return populateField(m, values[0]) +} + +// fieldByProtoName looks up a field whose corresponding protobuf field name is "name". +// "m" must be a struct value. It returns zero reflect.Value if no such field found. +func fieldByProtoName(m reflect.Value, name string) reflect.Value { + props := proto.GetProperties(m.Type()) + for _, p := range props.Prop { + if p.OrigName == name { + return m.FieldByName(p.Name) + } + } + return reflect.Value{} +} + +func populateRepeatedField(f reflect.Value, values []string) error { + elemType := f.Type().Elem() + conv, ok := convFromType[elemType.Kind()] + if !ok { + return fmt.Errorf("unsupported field type %s", elemType) + } + f.Set(reflect.MakeSlice(f.Type(), len(values), len(values))) + for i, v := range values { + result := conv.Call([]reflect.Value{reflect.ValueOf(v)}) + if err := result[1].Interface(); err != nil { + return err.(error) + } + f.Index(i).Set(result[0]) + } + return nil +} + +func populateField(f reflect.Value, value string) error { + conv, ok := convFromType[f.Kind()] + if !ok { + return fmt.Errorf("unsupported field type %T", f) + } + result := conv.Call([]reflect.Value{reflect.ValueOf(value)}) + if err := result[1].Interface(); err != nil { + return err.(error) + } + f.Set(result[0]) + return nil +} + +var ( + convFromType = map[reflect.Kind]reflect.Value{ + reflect.String: reflect.ValueOf(String), + reflect.Bool: reflect.ValueOf(Bool), + reflect.Float64: reflect.ValueOf(Float64), + reflect.Float32: reflect.ValueOf(Float32), + reflect.Int64: reflect.ValueOf(Int64), + reflect.Int32: reflect.ValueOf(Int32), + reflect.Uint64: reflect.ValueOf(Uint64), + reflect.Uint32: reflect.ValueOf(Uint32), + // TODO(yugui) Support []byte + } +) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/doc.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/doc.go new file mode 100644 index 00000000..cf79a4d5 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/doc.go @@ -0,0 +1,2 @@ +// Package utilities provides members for internal use in grpc-gateway. +package utilities diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/pattern.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/pattern.go new file mode 100644 index 00000000..28ad9461 --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/pattern.go @@ -0,0 +1,22 @@ +package utilities + +// An OpCode is a opcode of compiled path patterns. +type OpCode int + +// These constants are the valid values of OpCode. +const ( + // OpNop does nothing + OpNop = OpCode(iota) + // OpPush pushes a component to stack + OpPush + // OpLitPush pushes a component to stack if it matches to the literal + OpLitPush + // OpPushM concatenates the remaining components and pushes it to stack + OpPushM + // OpConcatN pops N items from stack, concatenates them and pushes it back to stack + OpConcatN + // OpCapture pops an item and binds it to the variable + OpCapture + // OpEnd is the least postive invalid opcode. + OpEnd +) diff --git a/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/trie.go b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/trie.go new file mode 100644 index 00000000..c2b7b30d --- /dev/null +++ b/vendor/github.com/grpc-ecosystem/grpc-gateway/utilities/trie.go @@ -0,0 +1,177 @@ +package utilities + +import ( + "sort" +) + +// DoubleArray is a Double Array implementation of trie on sequences of strings. +type DoubleArray struct { + // Encoding keeps an encoding from string to int + Encoding map[string]int + // Base is the base array of Double Array + Base []int + // Check is the check array of Double Array + Check []int +} + +// NewDoubleArray builds a DoubleArray from a set of sequences of strings. +func NewDoubleArray(seqs [][]string) *DoubleArray { + da := &DoubleArray{Encoding: make(map[string]int)} + if len(seqs) == 0 { + return da + } + + encoded := registerTokens(da, seqs) + sort.Sort(byLex(encoded)) + + root := node{row: -1, col: -1, left: 0, right: len(encoded)} + addSeqs(da, encoded, 0, root) + + for i := len(da.Base); i > 0; i-- { + if da.Check[i-1] != 0 { + da.Base = da.Base[:i] + da.Check = da.Check[:i] + break + } + } + return da +} + +func registerTokens(da *DoubleArray, seqs [][]string) [][]int { + var result [][]int + for _, seq := range seqs { + var encoded []int + for _, token := range seq { + if _, ok := da.Encoding[token]; !ok { + da.Encoding[token] = len(da.Encoding) + } + encoded = append(encoded, da.Encoding[token]) + } + result = append(result, encoded) + } + for i := range result { + result[i] = append(result[i], len(da.Encoding)) + } + return result +} + +type node struct { + row, col int + left, right int +} + +func (n node) value(seqs [][]int) int { + return seqs[n.row][n.col] +} + +func (n node) children(seqs [][]int) []*node { + var result []*node + lastVal := int(-1) + last := new(node) + for i := n.left; i < n.right; i++ { + if lastVal == seqs[i][n.col+1] { + continue + } + last.right = i + last = &node{ + row: i, + col: n.col + 1, + left: i, + } + result = append(result, last) + } + last.right = n.right + return result +} + +func addSeqs(da *DoubleArray, seqs [][]int, pos int, n node) { + ensureSize(da, pos) + + children := n.children(seqs) + var i int + for i = 1; ; i++ { + ok := func() bool { + for _, child := range children { + code := child.value(seqs) + j := i + code + ensureSize(da, j) + if da.Check[j] != 0 { + return false + } + } + return true + }() + if ok { + break + } + } + da.Base[pos] = i + for _, child := range children { + code := child.value(seqs) + j := i + code + da.Check[j] = pos + 1 + } + terminator := len(da.Encoding) + for _, child := range children { + code := child.value(seqs) + if code == terminator { + continue + } + j := i + code + addSeqs(da, seqs, j, *child) + } +} + +func ensureSize(da *DoubleArray, i int) { + for i >= len(da.Base) { + da.Base = append(da.Base, make([]int, len(da.Base)+1)...) + da.Check = append(da.Check, make([]int, len(da.Check)+1)...) + } +} + +type byLex [][]int + +func (l byLex) Len() int { return len(l) } +func (l byLex) Swap(i, j int) { l[i], l[j] = l[j], l[i] } +func (l byLex) Less(i, j int) bool { + si := l[i] + sj := l[j] + var k int + for k = 0; k < len(si) && k < len(sj); k++ { + if si[k] < sj[k] { + return true + } + if si[k] > sj[k] { + return false + } + } + if k < len(sj) { + return true + } + return false +} + +// HasCommonPrefix determines if any sequence in the DoubleArray is a prefix of the given sequence. +func (da *DoubleArray) HasCommonPrefix(seq []string) bool { + if len(da.Base) == 0 { + return false + } + + var i int + for _, t := range seq { + code, ok := da.Encoding[t] + if !ok { + break + } + j := da.Base[i] + code + if len(da.Check) <= j || da.Check[j] != i+1 { + break + } + i = j + } + j := da.Base[i] + len(da.Encoding) + if len(da.Check) <= j || da.Check[j] != i+1 { + return false + } + return true +} diff --git a/vendor/github.com/opencontainers/runc/NOTICE b/vendor/github.com/opencontainers/runc/NOTICE deleted file mode 100644 index 5c97abce..00000000 --- a/vendor/github.com/opencontainers/runc/NOTICE +++ /dev/null @@ -1,17 +0,0 @@ -runc - -Copyright 2012-2015 Docker, Inc. - -This product includes software developed at Docker, Inc. (http://www.docker.com). - -The following is courtesy of our legal counsel: - - -Use and transfer of Docker may be subject to certain restrictions by the -United States and other governments. -It is your responsibility to ensure that your use and/or transfer does not -violate applicable laws. - -For more information, please see http://www.bis.doc.gov - -See also http://www.apache.org/dev/crypto.html and/or seek legal counsel. diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups.go deleted file mode 100644 index 274ab47d..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups.go +++ /dev/null @@ -1,64 +0,0 @@ -// +build linux - -package cgroups - -import ( - "fmt" - - "github.com/opencontainers/runc/libcontainer/configs" -) - -type Manager interface { - // Applies cgroup configuration to the process with the specified pid - Apply(pid int) error - - // Returns the PIDs inside the cgroup set - GetPids() ([]int, error) - - // Returns the PIDs inside the cgroup set & all sub-cgroups - GetAllPids() ([]int, error) - - // Returns statistics for the cgroup set - GetStats() (*Stats, error) - - // Toggles the freezer cgroup according with specified state - Freeze(state configs.FreezerState) error - - // Destroys the cgroup set - Destroy() error - - // NewCgroupManager() and LoadCgroupManager() require following attributes: - // Paths map[string]string - // Cgroups *cgroups.Cgroup - // Paths maps cgroup subsystem to path at which it is mounted. - // Cgroups specifies specific cgroup settings for the various subsystems - - // Returns cgroup paths to save in a state file and to be able to - // restore the object later. - GetPaths() map[string]string - - // Set the cgroup as configured. - Set(container *configs.Config) error -} - -type NotFoundError struct { - Subsystem string -} - -func (e *NotFoundError) Error() string { - return fmt.Sprintf("mountpoint for %s not found", e.Subsystem) -} - -func NewNotFoundError(sub string) error { - return &NotFoundError{ - Subsystem: sub, - } -} - -func IsNotFound(err error) bool { - if err == nil { - return false - } - _, ok := err.(*NotFoundError) - return ok -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups_unsupported.go deleted file mode 100644 index 278d507e..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/cgroups_unsupported.go +++ /dev/null @@ -1,3 +0,0 @@ -// +build !linux - -package cgroups diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/apply_raw.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/apply_raw.go deleted file mode 100644 index 633ab042..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/apply_raw.go +++ /dev/null @@ -1,402 +0,0 @@ -// +build linux - -package fs - -import ( - "errors" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strconv" - "sync" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" - libcontainerUtils "github.com/opencontainers/runc/libcontainer/utils" -) - -var ( - subsystems = subsystemSet{ - &CpusetGroup{}, - &DevicesGroup{}, - &MemoryGroup{}, - &CpuGroup{}, - &CpuacctGroup{}, - &PidsGroup{}, - &BlkioGroup{}, - &HugetlbGroup{}, - &NetClsGroup{}, - &NetPrioGroup{}, - &PerfEventGroup{}, - &FreezerGroup{}, - &NameGroup{GroupName: "name=systemd", Join: true}, - } - CgroupProcesses = "cgroup.procs" - HugePageSizes, _ = cgroups.GetHugePageSize() -) - -var errSubsystemDoesNotExist = errors.New("cgroup: subsystem does not exist") - -type subsystemSet []subsystem - -func (s subsystemSet) Get(name string) (subsystem, error) { - for _, ss := range s { - if ss.Name() == name { - return ss, nil - } - } - return nil, errSubsystemDoesNotExist -} - -type subsystem interface { - // Name returns the name of the subsystem. - Name() string - // Returns the stats, as 'stats', corresponding to the cgroup under 'path'. - GetStats(path string, stats *cgroups.Stats) error - // Removes the cgroup represented by 'cgroupData'. - Remove(*cgroupData) error - // Creates and joins the cgroup represented by 'cgroupData'. - Apply(*cgroupData) error - // Set the cgroup represented by cgroup. - Set(path string, cgroup *configs.Cgroup) error -} - -type Manager struct { - mu sync.Mutex - Cgroups *configs.Cgroup - Paths map[string]string -} - -// The absolute path to the root of the cgroup hierarchies. -var cgroupRootLock sync.Mutex -var cgroupRoot string - -// Gets the cgroupRoot. -func getCgroupRoot() (string, error) { - cgroupRootLock.Lock() - defer cgroupRootLock.Unlock() - - if cgroupRoot != "" { - return cgroupRoot, nil - } - - root, err := cgroups.FindCgroupMountpointDir() - if err != nil { - return "", err - } - - if _, err := os.Stat(root); err != nil { - return "", err - } - - cgroupRoot = root - return cgroupRoot, nil -} - -type cgroupData struct { - root string - innerPath string - config *configs.Cgroup - pid int -} - -func (m *Manager) Apply(pid int) (err error) { - if m.Cgroups == nil { - return nil - } - - var c = m.Cgroups - - d, err := getCgroupData(m.Cgroups, pid) - if err != nil { - return err - } - - if c.Paths != nil { - paths := make(map[string]string) - for name, path := range c.Paths { - _, err := d.path(name) - if err != nil { - if cgroups.IsNotFound(err) { - continue - } - return err - } - paths[name] = path - } - m.Paths = paths - return cgroups.EnterPid(m.Paths, pid) - } - - m.mu.Lock() - defer m.mu.Unlock() - paths := make(map[string]string) - for _, sys := range subsystems { - if err := sys.Apply(d); err != nil { - return err - } - // TODO: Apply should, ideally, be reentrant or be broken up into a separate - // create and join phase so that the cgroup hierarchy for a container can be - // created then join consists of writing the process pids to cgroup.procs - p, err := d.path(sys.Name()) - if err != nil { - // The non-presence of the devices subsystem is - // considered fatal for security reasons. - if cgroups.IsNotFound(err) && sys.Name() != "devices" { - continue - } - return err - } - paths[sys.Name()] = p - } - m.Paths = paths - return nil -} - -func (m *Manager) Destroy() error { - if m.Cgroups.Paths != nil { - return nil - } - m.mu.Lock() - defer m.mu.Unlock() - if err := cgroups.RemovePaths(m.Paths); err != nil { - return err - } - m.Paths = make(map[string]string) - return nil -} - -func (m *Manager) GetPaths() map[string]string { - m.mu.Lock() - paths := m.Paths - m.mu.Unlock() - return paths -} - -func (m *Manager) GetStats() (*cgroups.Stats, error) { - m.mu.Lock() - defer m.mu.Unlock() - stats := cgroups.NewStats() - for name, path := range m.Paths { - sys, err := subsystems.Get(name) - if err == errSubsystemDoesNotExist || !cgroups.PathExists(path) { - continue - } - if err := sys.GetStats(path, stats); err != nil { - return nil, err - } - } - return stats, nil -} - -func (m *Manager) Set(container *configs.Config) error { - for _, sys := range subsystems { - // Generate fake cgroup data. - d, err := getCgroupData(container.Cgroups, -1) - if err != nil { - return err - } - // Get the path, but don't error out if the cgroup wasn't found. - path, err := d.path(sys.Name()) - if err != nil && !cgroups.IsNotFound(err) { - return err - } - - if err := sys.Set(path, container.Cgroups); err != nil { - return err - } - } - - if m.Paths["cpu"] != "" { - if err := CheckCpushares(m.Paths["cpu"], container.Cgroups.Resources.CpuShares); err != nil { - return err - } - } - return nil -} - -// Freeze toggles the container's freezer cgroup depending on the state -// provided -func (m *Manager) Freeze(state configs.FreezerState) error { - d, err := getCgroupData(m.Cgroups, 0) - if err != nil { - return err - } - dir, err := d.path("freezer") - if err != nil { - return err - } - prevState := m.Cgroups.Resources.Freezer - m.Cgroups.Resources.Freezer = state - freezer, err := subsystems.Get("freezer") - if err != nil { - return err - } - err = freezer.Set(dir, m.Cgroups) - if err != nil { - m.Cgroups.Resources.Freezer = prevState - return err - } - return nil -} - -func (m *Manager) GetPids() ([]int, error) { - dir, err := getCgroupPath(m.Cgroups) - if err != nil { - return nil, err - } - return cgroups.GetPids(dir) -} - -func (m *Manager) GetAllPids() ([]int, error) { - dir, err := getCgroupPath(m.Cgroups) - if err != nil { - return nil, err - } - return cgroups.GetAllPids(dir) -} - -func getCgroupPath(c *configs.Cgroup) (string, error) { - d, err := getCgroupData(c, 0) - if err != nil { - return "", err - } - - return d.path("devices") -} - -func getCgroupData(c *configs.Cgroup, pid int) (*cgroupData, error) { - root, err := getCgroupRoot() - if err != nil { - return nil, err - } - - if (c.Name != "" || c.Parent != "") && c.Path != "" { - return nil, fmt.Errorf("cgroup: either Path or Name and Parent should be used") - } - - // XXX: Do not remove this code. Path safety is important! -- cyphar - cgPath := libcontainerUtils.CleanPath(c.Path) - cgParent := libcontainerUtils.CleanPath(c.Parent) - cgName := libcontainerUtils.CleanPath(c.Name) - - innerPath := cgPath - if innerPath == "" { - innerPath = filepath.Join(cgParent, cgName) - } - - return &cgroupData{ - root: root, - innerPath: innerPath, - config: c, - pid: pid, - }, nil -} - -func (raw *cgroupData) parentPath(subsystem, mountpoint, root string) (string, error) { - // Use GetThisCgroupDir instead of GetInitCgroupDir, because the creating - // process could in container and shared pid namespace with host, and - // /proc/1/cgroup could point to whole other world of cgroups. - initPath, err := cgroups.GetThisCgroupDir(subsystem) - if err != nil { - return "", err - } - // This is needed for nested containers, because in /proc/self/cgroup we - // see pathes from host, which don't exist in container. - relDir, err := filepath.Rel(root, initPath) - if err != nil { - return "", err - } - return filepath.Join(mountpoint, relDir), nil -} - -func (raw *cgroupData) path(subsystem string) (string, error) { - mnt, root, err := cgroups.FindCgroupMountpointAndRoot(subsystem) - // If we didn't mount the subsystem, there is no point we make the path. - if err != nil { - return "", err - } - - // If the cgroup name/path is absolute do not look relative to the cgroup of the init process. - if filepath.IsAbs(raw.innerPath) { - // Sometimes subsystems can be mounted togethger as 'cpu,cpuacct'. - return filepath.Join(raw.root, filepath.Base(mnt), raw.innerPath), nil - } - - parentPath, err := raw.parentPath(subsystem, mnt, root) - if err != nil { - return "", err - } - - return filepath.Join(parentPath, raw.innerPath), nil -} - -func (raw *cgroupData) join(subsystem string) (string, error) { - path, err := raw.path(subsystem) - if err != nil { - return "", err - } - if err := os.MkdirAll(path, 0755); err != nil { - return "", err - } - if err := writeFile(path, CgroupProcesses, strconv.Itoa(raw.pid)); err != nil { - return "", err - } - return path, nil -} - -func writeFile(dir, file, data string) error { - // Normally dir should not be empty, one case is that cgroup subsystem - // is not mounted, we will get empty dir, and we want it fail here. - if dir == "" { - return fmt.Errorf("no such directory for %s", file) - } - if err := ioutil.WriteFile(filepath.Join(dir, file), []byte(data), 0700); err != nil { - return fmt.Errorf("failed to write %v to %v: %v", data, file, err) - } - return nil -} - -func readFile(dir, file string) (string, error) { - data, err := ioutil.ReadFile(filepath.Join(dir, file)) - return string(data), err -} - -func removePath(p string, err error) error { - if err != nil { - return err - } - if p != "" { - return os.RemoveAll(p) - } - return nil -} - -func CheckCpushares(path string, c int64) error { - var cpuShares int64 - - if c == 0 { - return nil - } - - fd, err := os.Open(filepath.Join(path, "cpu.shares")) - if err != nil { - return err - } - defer fd.Close() - - _, err = fmt.Fscanf(fd, "%d", &cpuShares) - if err != nil && err != io.EOF { - return err - } - - if c > cpuShares { - return fmt.Errorf("The maximum allowed cpu-shares is %d", cpuShares) - } else if c < cpuShares { - return fmt.Errorf("The minimum allowed cpu-shares is %d", cpuShares) - } - - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/blkio.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/blkio.go deleted file mode 100644 index a142cb99..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/blkio.go +++ /dev/null @@ -1,237 +0,0 @@ -// +build linux - -package fs - -import ( - "bufio" - "fmt" - "os" - "path/filepath" - "strconv" - "strings" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type BlkioGroup struct { -} - -func (s *BlkioGroup) Name() string { - return "blkio" -} - -func (s *BlkioGroup) Apply(d *cgroupData) error { - _, err := d.join("blkio") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *BlkioGroup) Set(path string, cgroup *configs.Cgroup) error { - if cgroup.Resources.BlkioWeight != 0 { - if err := writeFile(path, "blkio.weight", strconv.FormatUint(uint64(cgroup.Resources.BlkioWeight), 10)); err != nil { - return err - } - } - - if cgroup.Resources.BlkioLeafWeight != 0 { - if err := writeFile(path, "blkio.leaf_weight", strconv.FormatUint(uint64(cgroup.Resources.BlkioLeafWeight), 10)); err != nil { - return err - } - } - for _, wd := range cgroup.Resources.BlkioWeightDevice { - if err := writeFile(path, "blkio.weight_device", wd.WeightString()); err != nil { - return err - } - if err := writeFile(path, "blkio.leaf_weight_device", wd.LeafWeightString()); err != nil { - return err - } - } - for _, td := range cgroup.Resources.BlkioThrottleReadBpsDevice { - if err := writeFile(path, "blkio.throttle.read_bps_device", td.String()); err != nil { - return err - } - } - for _, td := range cgroup.Resources.BlkioThrottleWriteBpsDevice { - if err := writeFile(path, "blkio.throttle.write_bps_device", td.String()); err != nil { - return err - } - } - for _, td := range cgroup.Resources.BlkioThrottleReadIOPSDevice { - if err := writeFile(path, "blkio.throttle.read_iops_device", td.String()); err != nil { - return err - } - } - for _, td := range cgroup.Resources.BlkioThrottleWriteIOPSDevice { - if err := writeFile(path, "blkio.throttle.write_iops_device", td.String()); err != nil { - return err - } - } - - return nil -} - -func (s *BlkioGroup) Remove(d *cgroupData) error { - return removePath(d.path("blkio")) -} - -/* -examples: - - blkio.sectors - 8:0 6792 - - blkio.io_service_bytes - 8:0 Read 1282048 - 8:0 Write 2195456 - 8:0 Sync 2195456 - 8:0 Async 1282048 - 8:0 Total 3477504 - Total 3477504 - - blkio.io_serviced - 8:0 Read 124 - 8:0 Write 104 - 8:0 Sync 104 - 8:0 Async 124 - 8:0 Total 228 - Total 228 - - blkio.io_queued - 8:0 Read 0 - 8:0 Write 0 - 8:0 Sync 0 - 8:0 Async 0 - 8:0 Total 0 - Total 0 -*/ - -func splitBlkioStatLine(r rune) bool { - return r == ' ' || r == ':' -} - -func getBlkioStat(path string) ([]cgroups.BlkioStatEntry, error) { - var blkioStats []cgroups.BlkioStatEntry - f, err := os.Open(path) - if err != nil { - if os.IsNotExist(err) { - return blkioStats, nil - } - return nil, err - } - defer f.Close() - - sc := bufio.NewScanner(f) - for sc.Scan() { - // format: dev type amount - fields := strings.FieldsFunc(sc.Text(), splitBlkioStatLine) - if len(fields) < 3 { - if len(fields) == 2 && fields[0] == "Total" { - // skip total line - continue - } else { - return nil, fmt.Errorf("Invalid line found while parsing %s: %s", path, sc.Text()) - } - } - - v, err := strconv.ParseUint(fields[0], 10, 64) - if err != nil { - return nil, err - } - major := v - - v, err = strconv.ParseUint(fields[1], 10, 64) - if err != nil { - return nil, err - } - minor := v - - op := "" - valueField := 2 - if len(fields) == 4 { - op = fields[2] - valueField = 3 - } - v, err = strconv.ParseUint(fields[valueField], 10, 64) - if err != nil { - return nil, err - } - blkioStats = append(blkioStats, cgroups.BlkioStatEntry{Major: major, Minor: minor, Op: op, Value: v}) - } - - return blkioStats, nil -} - -func (s *BlkioGroup) GetStats(path string, stats *cgroups.Stats) error { - // Try to read CFQ stats available on all CFQ enabled kernels first - if blkioStats, err := getBlkioStat(filepath.Join(path, "blkio.io_serviced_recursive")); err == nil && blkioStats != nil { - return getCFQStats(path, stats) - } - return getStats(path, stats) // Use generic stats as fallback -} - -func getCFQStats(path string, stats *cgroups.Stats) error { - var blkioStats []cgroups.BlkioStatEntry - var err error - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.sectors_recursive")); err != nil { - return err - } - stats.BlkioStats.SectorsRecursive = blkioStats - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_service_bytes_recursive")); err != nil { - return err - } - stats.BlkioStats.IoServiceBytesRecursive = blkioStats - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_serviced_recursive")); err != nil { - return err - } - stats.BlkioStats.IoServicedRecursive = blkioStats - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_queued_recursive")); err != nil { - return err - } - stats.BlkioStats.IoQueuedRecursive = blkioStats - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_service_time_recursive")); err != nil { - return err - } - stats.BlkioStats.IoServiceTimeRecursive = blkioStats - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_wait_time_recursive")); err != nil { - return err - } - stats.BlkioStats.IoWaitTimeRecursive = blkioStats - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.io_merged_recursive")); err != nil { - return err - } - stats.BlkioStats.IoMergedRecursive = blkioStats - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.time_recursive")); err != nil { - return err - } - stats.BlkioStats.IoTimeRecursive = blkioStats - - return nil -} - -func getStats(path string, stats *cgroups.Stats) error { - var blkioStats []cgroups.BlkioStatEntry - var err error - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.throttle.io_service_bytes")); err != nil { - return err - } - stats.BlkioStats.IoServiceBytesRecursive = blkioStats - - if blkioStats, err = getBlkioStat(filepath.Join(path, "blkio.throttle.io_serviced")); err != nil { - return err - } - stats.BlkioStats.IoServicedRecursive = blkioStats - - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpu.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpu.go deleted file mode 100644 index a4ef28a6..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpu.go +++ /dev/null @@ -1,94 +0,0 @@ -// +build linux - -package fs - -import ( - "bufio" - "os" - "path/filepath" - "strconv" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type CpuGroup struct { -} - -func (s *CpuGroup) Name() string { - return "cpu" -} - -func (s *CpuGroup) Apply(d *cgroupData) error { - // We always want to join the cpu group, to allow fair cpu scheduling - // on a container basis - _, err := d.join("cpu") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *CpuGroup) Set(path string, cgroup *configs.Cgroup) error { - if cgroup.Resources.CpuShares != 0 { - if err := writeFile(path, "cpu.shares", strconv.FormatInt(cgroup.Resources.CpuShares, 10)); err != nil { - return err - } - } - if cgroup.Resources.CpuPeriod != 0 { - if err := writeFile(path, "cpu.cfs_period_us", strconv.FormatInt(cgroup.Resources.CpuPeriod, 10)); err != nil { - return err - } - } - if cgroup.Resources.CpuQuota != 0 { - if err := writeFile(path, "cpu.cfs_quota_us", strconv.FormatInt(cgroup.Resources.CpuQuota, 10)); err != nil { - return err - } - } - if cgroup.Resources.CpuRtPeriod != 0 { - if err := writeFile(path, "cpu.rt_period_us", strconv.FormatInt(cgroup.Resources.CpuRtPeriod, 10)); err != nil { - return err - } - } - if cgroup.Resources.CpuRtRuntime != 0 { - if err := writeFile(path, "cpu.rt_runtime_us", strconv.FormatInt(cgroup.Resources.CpuRtRuntime, 10)); err != nil { - return err - } - } - - return nil -} - -func (s *CpuGroup) Remove(d *cgroupData) error { - return removePath(d.path("cpu")) -} - -func (s *CpuGroup) GetStats(path string, stats *cgroups.Stats) error { - f, err := os.Open(filepath.Join(path, "cpu.stat")) - if err != nil { - if os.IsNotExist(err) { - return nil - } - return err - } - defer f.Close() - - sc := bufio.NewScanner(f) - for sc.Scan() { - t, v, err := getCgroupParamKeyValue(sc.Text()) - if err != nil { - return err - } - switch t { - case "nr_periods": - stats.CpuStats.ThrottlingData.Periods = v - - case "nr_throttled": - stats.CpuStats.ThrottlingData.ThrottledPeriods = v - - case "throttled_time": - stats.CpuStats.ThrottlingData.ThrottledTime = v - } - } - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuacct.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuacct.go deleted file mode 100644 index 53afbadd..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuacct.go +++ /dev/null @@ -1,121 +0,0 @@ -// +build linux - -package fs - -import ( - "fmt" - "io/ioutil" - "path/filepath" - "strconv" - "strings" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" - "github.com/opencontainers/runc/libcontainer/system" -) - -const ( - cgroupCpuacctStat = "cpuacct.stat" - nanosecondsInSecond = 1000000000 -) - -var clockTicks = uint64(system.GetClockTicks()) - -type CpuacctGroup struct { -} - -func (s *CpuacctGroup) Name() string { - return "cpuacct" -} - -func (s *CpuacctGroup) Apply(d *cgroupData) error { - // we just want to join this group even though we don't set anything - if _, err := d.join("cpuacct"); err != nil && !cgroups.IsNotFound(err) { - return err - } - - return nil -} - -func (s *CpuacctGroup) Set(path string, cgroup *configs.Cgroup) error { - return nil -} - -func (s *CpuacctGroup) Remove(d *cgroupData) error { - return removePath(d.path("cpuacct")) -} - -func (s *CpuacctGroup) GetStats(path string, stats *cgroups.Stats) error { - userModeUsage, kernelModeUsage, err := getCpuUsageBreakdown(path) - if err != nil { - return err - } - - totalUsage, err := getCgroupParamUint(path, "cpuacct.usage") - if err != nil { - return err - } - - percpuUsage, err := getPercpuUsage(path) - if err != nil { - return err - } - - stats.CpuStats.CpuUsage.TotalUsage = totalUsage - stats.CpuStats.CpuUsage.PercpuUsage = percpuUsage - stats.CpuStats.CpuUsage.UsageInUsermode = userModeUsage - stats.CpuStats.CpuUsage.UsageInKernelmode = kernelModeUsage - return nil -} - -// Returns user and kernel usage breakdown in nanoseconds. -func getCpuUsageBreakdown(path string) (uint64, uint64, error) { - userModeUsage := uint64(0) - kernelModeUsage := uint64(0) - const ( - userField = "user" - systemField = "system" - ) - - // Expected format: - // user - // system - data, err := ioutil.ReadFile(filepath.Join(path, cgroupCpuacctStat)) - if err != nil { - return 0, 0, err - } - fields := strings.Fields(string(data)) - if len(fields) != 4 { - return 0, 0, fmt.Errorf("failure - %s is expected to have 4 fields", filepath.Join(path, cgroupCpuacctStat)) - } - if fields[0] != userField { - return 0, 0, fmt.Errorf("unexpected field %q in %q, expected %q", fields[0], cgroupCpuacctStat, userField) - } - if fields[2] != systemField { - return 0, 0, fmt.Errorf("unexpected field %q in %q, expected %q", fields[2], cgroupCpuacctStat, systemField) - } - if userModeUsage, err = strconv.ParseUint(fields[1], 10, 64); err != nil { - return 0, 0, err - } - if kernelModeUsage, err = strconv.ParseUint(fields[3], 10, 64); err != nil { - return 0, 0, err - } - - return (userModeUsage * nanosecondsInSecond) / clockTicks, (kernelModeUsage * nanosecondsInSecond) / clockTicks, nil -} - -func getPercpuUsage(path string) ([]uint64, error) { - percpuUsage := []uint64{} - data, err := ioutil.ReadFile(filepath.Join(path, "cpuacct.usage_percpu")) - if err != nil { - return percpuUsage, err - } - for _, value := range strings.Fields(string(data)) { - value, err := strconv.ParseUint(value, 10, 64) - if err != nil { - return percpuUsage, fmt.Errorf("Unable to convert param value to uint64: %s", err) - } - percpuUsage = append(percpuUsage, value) - } - return percpuUsage, nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuset.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuset.go deleted file mode 100644 index cbe62bd9..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/cpuset.go +++ /dev/null @@ -1,139 +0,0 @@ -// +build linux - -package fs - -import ( - "bytes" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strconv" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" - libcontainerUtils "github.com/opencontainers/runc/libcontainer/utils" -) - -type CpusetGroup struct { -} - -func (s *CpusetGroup) Name() string { - return "cpuset" -} - -func (s *CpusetGroup) Apply(d *cgroupData) error { - dir, err := d.path("cpuset") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return s.ApplyDir(dir, d.config, d.pid) -} - -func (s *CpusetGroup) Set(path string, cgroup *configs.Cgroup) error { - if cgroup.Resources.CpusetCpus != "" { - if err := writeFile(path, "cpuset.cpus", cgroup.Resources.CpusetCpus); err != nil { - return err - } - } - if cgroup.Resources.CpusetMems != "" { - if err := writeFile(path, "cpuset.mems", cgroup.Resources.CpusetMems); err != nil { - return err - } - } - return nil -} - -func (s *CpusetGroup) Remove(d *cgroupData) error { - return removePath(d.path("cpuset")) -} - -func (s *CpusetGroup) GetStats(path string, stats *cgroups.Stats) error { - return nil -} - -func (s *CpusetGroup) ApplyDir(dir string, cgroup *configs.Cgroup, pid int) error { - // This might happen if we have no cpuset cgroup mounted. - // Just do nothing and don't fail. - if dir == "" { - return nil - } - root, err := getCgroupRoot() - if err != nil { - return err - } - if err := s.ensureParent(dir, root); err != nil { - return err - } - // because we are not using d.join we need to place the pid into the procs file - // unlike the other subsystems - if err := writeFile(dir, "cgroup.procs", strconv.Itoa(pid)); err != nil { - return err - } - - return nil -} - -func (s *CpusetGroup) getSubsystemSettings(parent string) (cpus []byte, mems []byte, err error) { - if cpus, err = ioutil.ReadFile(filepath.Join(parent, "cpuset.cpus")); err != nil { - return - } - if mems, err = ioutil.ReadFile(filepath.Join(parent, "cpuset.mems")); err != nil { - return - } - return cpus, mems, nil -} - -// ensureParent makes sure that the parent directory of current is created -// and populated with the proper cpus and mems files copied from -// it's parent. -func (s *CpusetGroup) ensureParent(current, root string) error { - parent := filepath.Dir(current) - if libcontainerUtils.CleanPath(parent) == root { - return nil - } - // Avoid infinite recursion. - if parent == current { - return fmt.Errorf("cpuset: cgroup parent path outside cgroup root") - } - if err := s.ensureParent(parent, root); err != nil { - return err - } - if err := os.MkdirAll(current, 0755); err != nil { - return err - } - return s.copyIfNeeded(current, parent) -} - -// copyIfNeeded copies the cpuset.cpus and cpuset.mems from the parent -// directory to the current directory if the file's contents are 0 -func (s *CpusetGroup) copyIfNeeded(current, parent string) error { - var ( - err error - currentCpus, currentMems []byte - parentCpus, parentMems []byte - ) - - if currentCpus, currentMems, err = s.getSubsystemSettings(current); err != nil { - return err - } - if parentCpus, parentMems, err = s.getSubsystemSettings(parent); err != nil { - return err - } - - if s.isEmpty(currentCpus) { - if err := writeFile(current, "cpuset.cpus", string(parentCpus)); err != nil { - return err - } - } - if s.isEmpty(currentMems) { - if err := writeFile(current, "cpuset.mems", string(parentMems)); err != nil { - return err - } - } - return nil -} - -func (s *CpusetGroup) isEmpty(b []byte) bool { - return len(bytes.Trim(b, "\n")) == 0 -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/devices.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/devices.go deleted file mode 100644 index 5f783310..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/devices.go +++ /dev/null @@ -1,78 +0,0 @@ -// +build linux - -package fs - -import ( - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" - "github.com/opencontainers/runc/libcontainer/system" -) - -type DevicesGroup struct { -} - -func (s *DevicesGroup) Name() string { - return "devices" -} - -func (s *DevicesGroup) Apply(d *cgroupData) error { - _, err := d.join("devices") - if err != nil { - // We will return error even it's `not found` error, devices - // cgroup is hard requirement for container's security. - return err - } - return nil -} - -func (s *DevicesGroup) Set(path string, cgroup *configs.Cgroup) error { - if system.RunningInUserNS() { - return nil - } - - devices := cgroup.Resources.Devices - if len(devices) > 0 { - for _, dev := range devices { - file := "devices.deny" - if dev.Allow { - file = "devices.allow" - } - if err := writeFile(path, file, dev.CgroupString()); err != nil { - return err - } - } - return nil - } - if !cgroup.Resources.AllowAllDevices { - if err := writeFile(path, "devices.deny", "a"); err != nil { - return err - } - - for _, dev := range cgroup.Resources.AllowedDevices { - if err := writeFile(path, "devices.allow", dev.CgroupString()); err != nil { - return err - } - } - return nil - } - - if err := writeFile(path, "devices.allow", "a"); err != nil { - return err - } - - for _, dev := range cgroup.Resources.DeniedDevices { - if err := writeFile(path, "devices.deny", dev.CgroupString()); err != nil { - return err - } - } - - return nil -} - -func (s *DevicesGroup) Remove(d *cgroupData) error { - return removePath(d.path("devices")) -} - -func (s *DevicesGroup) GetStats(path string, stats *cgroups.Stats) error { - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/freezer.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/freezer.go deleted file mode 100644 index e70dfe3b..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/freezer.go +++ /dev/null @@ -1,61 +0,0 @@ -// +build linux - -package fs - -import ( - "fmt" - "strings" - "time" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type FreezerGroup struct { -} - -func (s *FreezerGroup) Name() string { - return "freezer" -} - -func (s *FreezerGroup) Apply(d *cgroupData) error { - _, err := d.join("freezer") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *FreezerGroup) Set(path string, cgroup *configs.Cgroup) error { - switch cgroup.Resources.Freezer { - case configs.Frozen, configs.Thawed: - if err := writeFile(path, "freezer.state", string(cgroup.Resources.Freezer)); err != nil { - return err - } - - for { - state, err := readFile(path, "freezer.state") - if err != nil { - return err - } - if strings.TrimSpace(state) == string(cgroup.Resources.Freezer) { - break - } - time.Sleep(1 * time.Millisecond) - } - case configs.Undefined: - return nil - default: - return fmt.Errorf("Invalid argument '%s' to freezer.state", string(cgroup.Resources.Freezer)) - } - - return nil -} - -func (s *FreezerGroup) Remove(d *cgroupData) error { - return removePath(d.path("freezer")) -} - -func (s *FreezerGroup) GetStats(path string, stats *cgroups.Stats) error { - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/fs_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/fs_unsupported.go deleted file mode 100644 index 3ef9e031..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/fs_unsupported.go +++ /dev/null @@ -1,3 +0,0 @@ -// +build !linux - -package fs diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/hugetlb.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/hugetlb.go deleted file mode 100644 index 2f972771..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/hugetlb.go +++ /dev/null @@ -1,71 +0,0 @@ -// +build linux - -package fs - -import ( - "fmt" - "strconv" - "strings" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type HugetlbGroup struct { -} - -func (s *HugetlbGroup) Name() string { - return "hugetlb" -} - -func (s *HugetlbGroup) Apply(d *cgroupData) error { - _, err := d.join("hugetlb") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *HugetlbGroup) Set(path string, cgroup *configs.Cgroup) error { - for _, hugetlb := range cgroup.Resources.HugetlbLimit { - if err := writeFile(path, strings.Join([]string{"hugetlb", hugetlb.Pagesize, "limit_in_bytes"}, "."), strconv.FormatUint(hugetlb.Limit, 10)); err != nil { - return err - } - } - - return nil -} - -func (s *HugetlbGroup) Remove(d *cgroupData) error { - return removePath(d.path("hugetlb")) -} - -func (s *HugetlbGroup) GetStats(path string, stats *cgroups.Stats) error { - hugetlbStats := cgroups.HugetlbStats{} - for _, pageSize := range HugePageSizes { - usage := strings.Join([]string{"hugetlb", pageSize, "usage_in_bytes"}, ".") - value, err := getCgroupParamUint(path, usage) - if err != nil { - return fmt.Errorf("failed to parse %s - %v", usage, err) - } - hugetlbStats.Usage = value - - maxUsage := strings.Join([]string{"hugetlb", pageSize, "max_usage_in_bytes"}, ".") - value, err = getCgroupParamUint(path, maxUsage) - if err != nil { - return fmt.Errorf("failed to parse %s - %v", maxUsage, err) - } - hugetlbStats.MaxUsage = value - - failcnt := strings.Join([]string{"hugetlb", pageSize, "failcnt"}, ".") - value, err = getCgroupParamUint(path, failcnt) - if err != nil { - return fmt.Errorf("failed to parse %s - %v", failcnt, err) - } - hugetlbStats.Failcnt = value - - stats.HugetlbStats[pageSize] = hugetlbStats - } - - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/memory.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/memory.go deleted file mode 100644 index 01c25eff..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/memory.go +++ /dev/null @@ -1,281 +0,0 @@ -// +build linux - -package fs - -import ( - "bufio" - "fmt" - "math" - "os" - "path/filepath" - "strconv" - "strings" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" - "github.com/opencontainers/runc/libcontainer/system" -) - -type MemoryGroup struct { -} - -func (s *MemoryGroup) Name() string { - return "memory" -} - -func (s *MemoryGroup) Apply(d *cgroupData) (err error) { - path, err := d.path("memory") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - if memoryAssigned(d.config) { - if path != "" { - if err := os.MkdirAll(path, 0755); err != nil { - return err - } - } - // We have to set kernel memory here, as we can't change it once - // processes have been attached to the cgroup. - if err := s.SetKernelMemory(path, d.config); err != nil { - return err - } - } - - defer func() { - if err != nil { - os.RemoveAll(path) - } - }() - - // We need to join memory cgroup after set memory limits, because - // kmem.limit_in_bytes can only be set when the cgroup is empty. - _, err = d.join("memory") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *MemoryGroup) SetKernelMemory(path string, cgroup *configs.Cgroup) error { - // This has to be done separately because it has special - // constraints (it can only be initialized before setting up a - // hierarchy or adding a task to the cgroups. However, if - // sucessfully initialized, it can be updated anytime afterwards) - if cgroup.Resources.KernelMemory != 0 { - kmemInitialized := false - // Is kmem.limit_in_bytes already set? - kmemValue, err := getCgroupParamUint(path, "memory.kmem.limit_in_bytes") - if err != nil { - return err - } - switch system.GetLongBit() { - case 32: - kmemInitialized = uint32(kmemValue) != uint32(math.MaxUint32) - case 64: - kmemInitialized = kmemValue != uint64(math.MaxUint64) - } - - if !kmemInitialized { - // If there's already tasks in the cgroup, we can't change the limit either - tasks, err := getCgroupParamString(path, "tasks") - if err != nil { - return err - } - if tasks != "" { - return fmt.Errorf("cannot set kmem.limit_in_bytes after task have joined this cgroup") - } - } - - if err := writeFile(path, "memory.kmem.limit_in_bytes", strconv.FormatInt(cgroup.Resources.KernelMemory, 10)); err != nil { - return err - } - } - return nil -} - -func setMemoryAndSwap(path string, cgroup *configs.Cgroup) error { - // When memory and swap memory are both set, we need to handle the cases - // for updating container. - if cgroup.Resources.Memory != 0 && cgroup.Resources.MemorySwap > 0 { - memoryUsage, err := getMemoryData(path, "") - if err != nil { - return err - } - - // When update memory limit, we should adapt the write sequence - // for memory and swap memory, so it won't fail because the new - // value and the old value don't fit kernel's validation. - if memoryUsage.Limit < uint64(cgroup.Resources.MemorySwap) { - if err := writeFile(path, "memory.memsw.limit_in_bytes", strconv.FormatInt(cgroup.Resources.MemorySwap, 10)); err != nil { - return err - } - if err := writeFile(path, "memory.limit_in_bytes", strconv.FormatInt(cgroup.Resources.Memory, 10)); err != nil { - return err - } - } else { - if err := writeFile(path, "memory.limit_in_bytes", strconv.FormatInt(cgroup.Resources.Memory, 10)); err != nil { - return err - } - if err := writeFile(path, "memory.memsw.limit_in_bytes", strconv.FormatInt(cgroup.Resources.MemorySwap, 10)); err != nil { - return err - } - } - } else { - if cgroup.Resources.Memory != 0 { - if err := writeFile(path, "memory.limit_in_bytes", strconv.FormatInt(cgroup.Resources.Memory, 10)); err != nil { - return err - } - } - if cgroup.Resources.MemorySwap > 0 { - if err := writeFile(path, "memory.memsw.limit_in_bytes", strconv.FormatInt(cgroup.Resources.MemorySwap, 10)); err != nil { - return err - } - } - } - - return nil -} - -func (s *MemoryGroup) Set(path string, cgroup *configs.Cgroup) error { - if err := setMemoryAndSwap(path, cgroup); err != nil { - return err - } - - if err := s.SetKernelMemory(path, cgroup); err != nil { - return err - } - - if cgroup.Resources.MemoryReservation != 0 { - if err := writeFile(path, "memory.soft_limit_in_bytes", strconv.FormatInt(cgroup.Resources.MemoryReservation, 10)); err != nil { - return err - } - } - if cgroup.Resources.KernelMemoryTCP != 0 { - if err := writeFile(path, "memory.kmem.tcp.limit_in_bytes", strconv.FormatInt(cgroup.Resources.KernelMemoryTCP, 10)); err != nil { - return err - } - } - if cgroup.Resources.OomKillDisable { - if err := writeFile(path, "memory.oom_control", "1"); err != nil { - return err - } - } - if cgroup.Resources.MemorySwappiness == nil || int64(*cgroup.Resources.MemorySwappiness) == -1 { - return nil - } else if int64(*cgroup.Resources.MemorySwappiness) >= 0 && int64(*cgroup.Resources.MemorySwappiness) <= 100 { - if err := writeFile(path, "memory.swappiness", strconv.FormatInt(*cgroup.Resources.MemorySwappiness, 10)); err != nil { - return err - } - } else { - return fmt.Errorf("invalid value:%d. valid memory swappiness range is 0-100", int64(*cgroup.Resources.MemorySwappiness)) - } - - return nil -} - -func (s *MemoryGroup) Remove(d *cgroupData) error { - return removePath(d.path("memory")) -} - -func (s *MemoryGroup) GetStats(path string, stats *cgroups.Stats) error { - // Set stats from memory.stat. - statsFile, err := os.Open(filepath.Join(path, "memory.stat")) - if err != nil { - if os.IsNotExist(err) { - return nil - } - return err - } - defer statsFile.Close() - - sc := bufio.NewScanner(statsFile) - for sc.Scan() { - t, v, err := getCgroupParamKeyValue(sc.Text()) - if err != nil { - return fmt.Errorf("failed to parse memory.stat (%q) - %v", sc.Text(), err) - } - stats.MemoryStats.Stats[t] = v - } - stats.MemoryStats.Cache = stats.MemoryStats.Stats["cache"] - - memoryUsage, err := getMemoryData(path, "") - if err != nil { - return err - } - stats.MemoryStats.Usage = memoryUsage - swapUsage, err := getMemoryData(path, "memsw") - if err != nil { - return err - } - stats.MemoryStats.SwapUsage = swapUsage - kernelUsage, err := getMemoryData(path, "kmem") - if err != nil { - return err - } - stats.MemoryStats.KernelUsage = kernelUsage - kernelTCPUsage, err := getMemoryData(path, "kmem.tcp") - if err != nil { - return err - } - stats.MemoryStats.KernelTCPUsage = kernelTCPUsage - - return nil -} - -func memoryAssigned(cgroup *configs.Cgroup) bool { - return cgroup.Resources.Memory != 0 || - cgroup.Resources.MemoryReservation != 0 || - cgroup.Resources.MemorySwap > 0 || - cgroup.Resources.KernelMemory > 0 || - cgroup.Resources.KernelMemoryTCP > 0 || - cgroup.Resources.OomKillDisable || - (cgroup.Resources.MemorySwappiness != nil && *cgroup.Resources.MemorySwappiness != -1) -} - -func getMemoryData(path, name string) (cgroups.MemoryData, error) { - memoryData := cgroups.MemoryData{} - - moduleName := "memory" - if name != "" { - moduleName = strings.Join([]string{"memory", name}, ".") - } - usage := strings.Join([]string{moduleName, "usage_in_bytes"}, ".") - maxUsage := strings.Join([]string{moduleName, "max_usage_in_bytes"}, ".") - failcnt := strings.Join([]string{moduleName, "failcnt"}, ".") - limit := strings.Join([]string{moduleName, "limit_in_bytes"}, ".") - - value, err := getCgroupParamUint(path, usage) - if err != nil { - if moduleName != "memory" && os.IsNotExist(err) { - return cgroups.MemoryData{}, nil - } - return cgroups.MemoryData{}, fmt.Errorf("failed to parse %s - %v", usage, err) - } - memoryData.Usage = value - value, err = getCgroupParamUint(path, maxUsage) - if err != nil { - if moduleName != "memory" && os.IsNotExist(err) { - return cgroups.MemoryData{}, nil - } - return cgroups.MemoryData{}, fmt.Errorf("failed to parse %s - %v", maxUsage, err) - } - memoryData.MaxUsage = value - value, err = getCgroupParamUint(path, failcnt) - if err != nil { - if moduleName != "memory" && os.IsNotExist(err) { - return cgroups.MemoryData{}, nil - } - return cgroups.MemoryData{}, fmt.Errorf("failed to parse %s - %v", failcnt, err) - } - memoryData.Failcnt = value - value, err = getCgroupParamUint(path, limit) - if err != nil { - if moduleName != "memory" && os.IsNotExist(err) { - return cgroups.MemoryData{}, nil - } - return cgroups.MemoryData{}, fmt.Errorf("failed to parse %s - %v", limit, err) - } - memoryData.Limit = value - - return memoryData, nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/name.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/name.go deleted file mode 100644 index d8cf1d87..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/name.go +++ /dev/null @@ -1,40 +0,0 @@ -// +build linux - -package fs - -import ( - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type NameGroup struct { - GroupName string - Join bool -} - -func (s *NameGroup) Name() string { - return s.GroupName -} - -func (s *NameGroup) Apply(d *cgroupData) error { - if s.Join { - // ignore errors if the named cgroup does not exist - d.join(s.GroupName) - } - return nil -} - -func (s *NameGroup) Set(path string, cgroup *configs.Cgroup) error { - return nil -} - -func (s *NameGroup) Remove(d *cgroupData) error { - if s.Join { - removePath(d.path(s.GroupName)) - } - return nil -} - -func (s *NameGroup) GetStats(path string, stats *cgroups.Stats) error { - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_cls.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_cls.go deleted file mode 100644 index 8a4054ba..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_cls.go +++ /dev/null @@ -1,41 +0,0 @@ -// +build linux - -package fs - -import ( - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type NetClsGroup struct { -} - -func (s *NetClsGroup) Name() string { - return "net_cls" -} - -func (s *NetClsGroup) Apply(d *cgroupData) error { - _, err := d.join("net_cls") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *NetClsGroup) Set(path string, cgroup *configs.Cgroup) error { - if cgroup.Resources.NetClsClassid != "" { - if err := writeFile(path, "net_cls.classid", cgroup.Resources.NetClsClassid); err != nil { - return err - } - } - - return nil -} - -func (s *NetClsGroup) Remove(d *cgroupData) error { - return removePath(d.path("net_cls")) -} - -func (s *NetClsGroup) GetStats(path string, stats *cgroups.Stats) error { - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_prio.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_prio.go deleted file mode 100644 index d0ab2af8..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/net_prio.go +++ /dev/null @@ -1,41 +0,0 @@ -// +build linux - -package fs - -import ( - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type NetPrioGroup struct { -} - -func (s *NetPrioGroup) Name() string { - return "net_prio" -} - -func (s *NetPrioGroup) Apply(d *cgroupData) error { - _, err := d.join("net_prio") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *NetPrioGroup) Set(path string, cgroup *configs.Cgroup) error { - for _, prioMap := range cgroup.Resources.NetPrioIfpriomap { - if err := writeFile(path, "net_prio.ifpriomap", prioMap.CgroupString()); err != nil { - return err - } - } - - return nil -} - -func (s *NetPrioGroup) Remove(d *cgroupData) error { - return removePath(d.path("net_prio")) -} - -func (s *NetPrioGroup) GetStats(path string, stats *cgroups.Stats) error { - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/perf_event.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/perf_event.go deleted file mode 100644 index 5693676d..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/perf_event.go +++ /dev/null @@ -1,35 +0,0 @@ -// +build linux - -package fs - -import ( - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type PerfEventGroup struct { -} - -func (s *PerfEventGroup) Name() string { - return "perf_event" -} - -func (s *PerfEventGroup) Apply(d *cgroupData) error { - // we just want to join this group even though we don't set anything - if _, err := d.join("perf_event"); err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *PerfEventGroup) Set(path string, cgroup *configs.Cgroup) error { - return nil -} - -func (s *PerfEventGroup) Remove(d *cgroupData) error { - return removePath(d.path("perf_event")) -} - -func (s *PerfEventGroup) GetStats(path string, stats *cgroups.Stats) error { - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/pids.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/pids.go deleted file mode 100644 index f1e37205..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/pids.go +++ /dev/null @@ -1,73 +0,0 @@ -// +build linux - -package fs - -import ( - "fmt" - "path/filepath" - "strconv" - - "github.com/opencontainers/runc/libcontainer/cgroups" - "github.com/opencontainers/runc/libcontainer/configs" -) - -type PidsGroup struct { -} - -func (s *PidsGroup) Name() string { - return "pids" -} - -func (s *PidsGroup) Apply(d *cgroupData) error { - _, err := d.join("pids") - if err != nil && !cgroups.IsNotFound(err) { - return err - } - return nil -} - -func (s *PidsGroup) Set(path string, cgroup *configs.Cgroup) error { - if cgroup.Resources.PidsLimit != 0 { - // "max" is the fallback value. - limit := "max" - - if cgroup.Resources.PidsLimit > 0 { - limit = strconv.FormatInt(cgroup.Resources.PidsLimit, 10) - } - - if err := writeFile(path, "pids.max", limit); err != nil { - return err - } - } - - return nil -} - -func (s *PidsGroup) Remove(d *cgroupData) error { - return removePath(d.path("pids")) -} - -func (s *PidsGroup) GetStats(path string, stats *cgroups.Stats) error { - current, err := getCgroupParamUint(path, "pids.current") - if err != nil { - return fmt.Errorf("failed to parse pids.current - %s", err) - } - - maxString, err := getCgroupParamString(path, "pids.max") - if err != nil { - return fmt.Errorf("failed to parse pids.max - %s", err) - } - - // Default if pids.max == "max" is 0 -- which represents "no limit". - var max uint64 - if maxString != "max" { - max, err = parseUint(maxString, 10, 64) - if err != nil { - return fmt.Errorf("failed to parse pids.max - unable to parse %q as a uint from Cgroup file %q", maxString, filepath.Join(path, "pids.max")) - } - } - - stats.PidsStats.Current = current - stats.PidsStats.Limit = max - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/utils.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/utils.go deleted file mode 100644 index 5ff0a161..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs/utils.go +++ /dev/null @@ -1,78 +0,0 @@ -// +build linux - -package fs - -import ( - "errors" - "fmt" - "io/ioutil" - "path/filepath" - "strconv" - "strings" -) - -var ( - ErrNotValidFormat = errors.New("line is not a valid key value format") -) - -// Saturates negative values at zero and returns a uint64. -// Due to kernel bugs, some of the memory cgroup stats can be negative. -func parseUint(s string, base, bitSize int) (uint64, error) { - value, err := strconv.ParseUint(s, base, bitSize) - if err != nil { - intValue, intErr := strconv.ParseInt(s, base, bitSize) - // 1. Handle negative values greater than MinInt64 (and) - // 2. Handle negative values lesser than MinInt64 - if intErr == nil && intValue < 0 { - return 0, nil - } else if intErr != nil && intErr.(*strconv.NumError).Err == strconv.ErrRange && intValue < 0 { - return 0, nil - } - - return value, err - } - - return value, nil -} - -// Parses a cgroup param and returns as name, value -// i.e. "io_service_bytes 1234" will return as io_service_bytes, 1234 -func getCgroupParamKeyValue(t string) (string, uint64, error) { - parts := strings.Fields(t) - switch len(parts) { - case 2: - value, err := parseUint(parts[1], 10, 64) - if err != nil { - return "", 0, fmt.Errorf("unable to convert param value (%q) to uint64: %v", parts[1], err) - } - - return parts[0], value, nil - default: - return "", 0, ErrNotValidFormat - } -} - -// Gets a single uint64 value from the specified cgroup file. -func getCgroupParamUint(cgroupPath, cgroupFile string) (uint64, error) { - fileName := filepath.Join(cgroupPath, cgroupFile) - contents, err := ioutil.ReadFile(fileName) - if err != nil { - return 0, err - } - - res, err := parseUint(strings.TrimSpace(string(contents)), 10, 64) - if err != nil { - return res, fmt.Errorf("unable to parse %q as a uint from Cgroup file %q", string(contents), fileName) - } - return res, nil -} - -// Gets a string value from the specified cgroup file -func getCgroupParamString(cgroupPath, cgroupFile string) (string, error) { - contents, err := ioutil.ReadFile(filepath.Join(cgroupPath, cgroupFile)) - if err != nil { - return "", err - } - - return strings.TrimSpace(string(contents)), nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/stats.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/stats.go deleted file mode 100644 index b483f1bf..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/stats.go +++ /dev/null @@ -1,106 +0,0 @@ -// +build linux - -package cgroups - -type ThrottlingData struct { - // Number of periods with throttling active - Periods uint64 `json:"periods,omitempty"` - // Number of periods when the container hit its throttling limit. - ThrottledPeriods uint64 `json:"throttled_periods,omitempty"` - // Aggregate time the container was throttled for in nanoseconds. - ThrottledTime uint64 `json:"throttled_time,omitempty"` -} - -// CpuUsage denotes the usage of a CPU. -// All CPU stats are aggregate since container inception. -type CpuUsage struct { - // Total CPU time consumed. - // Units: nanoseconds. - TotalUsage uint64 `json:"total_usage,omitempty"` - // Total CPU time consumed per core. - // Units: nanoseconds. - PercpuUsage []uint64 `json:"percpu_usage,omitempty"` - // Time spent by tasks of the cgroup in kernel mode. - // Units: nanoseconds. - UsageInKernelmode uint64 `json:"usage_in_kernelmode"` - // Time spent by tasks of the cgroup in user mode. - // Units: nanoseconds. - UsageInUsermode uint64 `json:"usage_in_usermode"` -} - -type CpuStats struct { - CpuUsage CpuUsage `json:"cpu_usage,omitempty"` - ThrottlingData ThrottlingData `json:"throttling_data,omitempty"` -} - -type MemoryData struct { - Usage uint64 `json:"usage,omitempty"` - MaxUsage uint64 `json:"max_usage,omitempty"` - Failcnt uint64 `json:"failcnt"` - Limit uint64 `json:"limit"` -} - -type MemoryStats struct { - // memory used for cache - Cache uint64 `json:"cache,omitempty"` - // usage of memory - Usage MemoryData `json:"usage,omitempty"` - // usage of memory + swap - SwapUsage MemoryData `json:"swap_usage,omitempty"` - // usage of kernel memory - KernelUsage MemoryData `json:"kernel_usage,omitempty"` - // usage of kernel TCP memory - KernelTCPUsage MemoryData `json:"kernel_tcp_usage,omitempty"` - - Stats map[string]uint64 `json:"stats,omitempty"` -} - -type PidsStats struct { - // number of pids in the cgroup - Current uint64 `json:"current,omitempty"` - // active pids hard limit - Limit uint64 `json:"limit,omitempty"` -} - -type BlkioStatEntry struct { - Major uint64 `json:"major,omitempty"` - Minor uint64 `json:"minor,omitempty"` - Op string `json:"op,omitempty"` - Value uint64 `json:"value,omitempty"` -} - -type BlkioStats struct { - // number of bytes tranferred to and from the block device - IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive,omitempty"` - IoServicedRecursive []BlkioStatEntry `json:"io_serviced_recursive,omitempty"` - IoQueuedRecursive []BlkioStatEntry `json:"io_queue_recursive,omitempty"` - IoServiceTimeRecursive []BlkioStatEntry `json:"io_service_time_recursive,omitempty"` - IoWaitTimeRecursive []BlkioStatEntry `json:"io_wait_time_recursive,omitempty"` - IoMergedRecursive []BlkioStatEntry `json:"io_merged_recursive,omitempty"` - IoTimeRecursive []BlkioStatEntry `json:"io_time_recursive,omitempty"` - SectorsRecursive []BlkioStatEntry `json:"sectors_recursive,omitempty"` -} - -type HugetlbStats struct { - // current res_counter usage for hugetlb - Usage uint64 `json:"usage,omitempty"` - // maximum usage ever recorded. - MaxUsage uint64 `json:"max_usage,omitempty"` - // number of times hugetlb usage allocation failure. - Failcnt uint64 `json:"failcnt"` -} - -type Stats struct { - CpuStats CpuStats `json:"cpu_stats,omitempty"` - MemoryStats MemoryStats `json:"memory_stats,omitempty"` - PidsStats PidsStats `json:"pids_stats,omitempty"` - BlkioStats BlkioStats `json:"blkio_stats,omitempty"` - // the map is in the format "size of hugepage: stats of the hugepage" - HugetlbStats map[string]HugetlbStats `json:"hugetlb_stats,omitempty"` -} - -func NewStats() *Stats { - memoryStats := MemoryStats{Stats: make(map[string]uint64)} - hugetlbStats := make(map[string]HugetlbStats) - return &Stats{MemoryStats: memoryStats, HugetlbStats: hugetlbStats} -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go b/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go deleted file mode 100644 index 1a7c4e1a..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/cgroups/utils.go +++ /dev/null @@ -1,413 +0,0 @@ -// +build linux - -package cgroups - -import ( - "bufio" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strconv" - "strings" - "time" - - "github.com/docker/go-units" -) - -const cgroupNamePrefix = "name=" - -// https://www.kernel.org/doc/Documentation/cgroup-v1/cgroups.txt -func FindCgroupMountpoint(subsystem string) (string, error) { - // We are not using mount.GetMounts() because it's super-inefficient, - // parsing it directly sped up x10 times because of not using Sscanf. - // It was one of two major performance drawbacks in container start. - if !isSubsystemAvailable(subsystem) { - return "", NewNotFoundError(subsystem) - } - f, err := os.Open("/proc/self/mountinfo") - if err != nil { - return "", err - } - defer f.Close() - - scanner := bufio.NewScanner(f) - for scanner.Scan() { - txt := scanner.Text() - fields := strings.Split(txt, " ") - for _, opt := range strings.Split(fields[len(fields)-1], ",") { - if opt == subsystem { - return fields[4], nil - } - } - } - if err := scanner.Err(); err != nil { - return "", err - } - - return "", NewNotFoundError(subsystem) -} - -func FindCgroupMountpointAndRoot(subsystem string) (string, string, error) { - if !isSubsystemAvailable(subsystem) { - return "", "", NewNotFoundError(subsystem) - } - f, err := os.Open("/proc/self/mountinfo") - if err != nil { - return "", "", err - } - defer f.Close() - - scanner := bufio.NewScanner(f) - for scanner.Scan() { - txt := scanner.Text() - fields := strings.Split(txt, " ") - for _, opt := range strings.Split(fields[len(fields)-1], ",") { - if opt == subsystem { - return fields[4], fields[3], nil - } - } - } - if err := scanner.Err(); err != nil { - return "", "", err - } - - return "", "", NewNotFoundError(subsystem) -} - -func isSubsystemAvailable(subsystem string) bool { - cgroups, err := ParseCgroupFile("/proc/self/cgroup") - if err != nil { - return false - } - _, avail := cgroups[subsystem] - return avail -} - -func FindCgroupMountpointDir() (string, error) { - f, err := os.Open("/proc/self/mountinfo") - if err != nil { - return "", err - } - defer f.Close() - - scanner := bufio.NewScanner(f) - for scanner.Scan() { - text := scanner.Text() - fields := strings.Split(text, " ") - // Safe as mountinfo encodes mountpoints with spaces as \040. - index := strings.Index(text, " - ") - postSeparatorFields := strings.Fields(text[index+3:]) - numPostFields := len(postSeparatorFields) - - // This is an error as we can't detect if the mount is for "cgroup" - if numPostFields == 0 { - return "", fmt.Errorf("Found no fields post '-' in %q", text) - } - - if postSeparatorFields[0] == "cgroup" { - // Check that the mount is properly formated. - if numPostFields < 3 { - return "", fmt.Errorf("Error found less than 3 fields post '-' in %q", text) - } - - return filepath.Dir(fields[4]), nil - } - } - if err := scanner.Err(); err != nil { - return "", err - } - - return "", NewNotFoundError("cgroup") -} - -type Mount struct { - Mountpoint string - Root string - Subsystems []string -} - -func (m Mount) GetThisCgroupDir(cgroups map[string]string) (string, error) { - if len(m.Subsystems) == 0 { - return "", fmt.Errorf("no subsystem for mount") - } - - return getControllerPath(m.Subsystems[0], cgroups) -} - -func getCgroupMountsHelper(ss map[string]bool, mi io.Reader) ([]Mount, error) { - res := make([]Mount, 0, len(ss)) - scanner := bufio.NewScanner(mi) - numFound := 0 - for scanner.Scan() && numFound < len(ss) { - txt := scanner.Text() - sepIdx := strings.Index(txt, " - ") - if sepIdx == -1 { - return nil, fmt.Errorf("invalid mountinfo format") - } - if txt[sepIdx+3:sepIdx+9] != "cgroup" { - continue - } - fields := strings.Split(txt, " ") - m := Mount{ - Mountpoint: fields[4], - Root: fields[3], - } - for _, opt := range strings.Split(fields[len(fields)-1], ",") { - if !ss[opt] { - continue - } - if strings.HasPrefix(opt, cgroupNamePrefix) { - m.Subsystems = append(m.Subsystems, opt[len(cgroupNamePrefix):]) - } else { - m.Subsystems = append(m.Subsystems, opt) - } - numFound++ - } - res = append(res, m) - } - if err := scanner.Err(); err != nil { - return nil, err - } - return res, nil -} - -func GetCgroupMounts() ([]Mount, error) { - f, err := os.Open("/proc/self/mountinfo") - if err != nil { - return nil, err - } - defer f.Close() - - all, err := ParseCgroupFile("/proc/self/cgroup") - if err != nil { - return nil, err - } - - allMap := make(map[string]bool) - for s := range all { - allMap[s] = true - } - return getCgroupMountsHelper(allMap, f) -} - -// GetAllSubsystems returns all the cgroup subsystems supported by the kernel -func GetAllSubsystems() ([]string, error) { - f, err := os.Open("/proc/cgroups") - if err != nil { - return nil, err - } - defer f.Close() - - subsystems := []string{} - - s := bufio.NewScanner(f) - for s.Scan() { - if err := s.Err(); err != nil { - return nil, err - } - text := s.Text() - if text[0] != '#' { - parts := strings.Fields(text) - if len(parts) >= 4 && parts[3] != "0" { - subsystems = append(subsystems, parts[0]) - } - } - } - return subsystems, nil -} - -// GetThisCgroupDir returns the relative path to the cgroup docker is running in. -func GetThisCgroupDir(subsystem string) (string, error) { - cgroups, err := ParseCgroupFile("/proc/self/cgroup") - if err != nil { - return "", err - } - - return getControllerPath(subsystem, cgroups) -} - -func GetInitCgroupDir(subsystem string) (string, error) { - - cgroups, err := ParseCgroupFile("/proc/1/cgroup") - if err != nil { - return "", err - } - - return getControllerPath(subsystem, cgroups) -} - -func readProcsFile(dir string) ([]int, error) { - f, err := os.Open(filepath.Join(dir, "cgroup.procs")) - if err != nil { - return nil, err - } - defer f.Close() - - var ( - s = bufio.NewScanner(f) - out = []int{} - ) - - for s.Scan() { - if t := s.Text(); t != "" { - pid, err := strconv.Atoi(t) - if err != nil { - return nil, err - } - out = append(out, pid) - } - } - return out, nil -} - -// ParseCgroupFile parses the given cgroup file, typically from -// /proc//cgroup, into a map of subgroups to cgroup names. -func ParseCgroupFile(path string) (map[string]string, error) { - f, err := os.Open(path) - if err != nil { - return nil, err - } - defer f.Close() - - return parseCgroupFromReader(f) -} - -// helper function for ParseCgroupFile to make testing easier -func parseCgroupFromReader(r io.Reader) (map[string]string, error) { - s := bufio.NewScanner(r) - cgroups := make(map[string]string) - - for s.Scan() { - if err := s.Err(); err != nil { - return nil, err - } - - text := s.Text() - // from cgroups(7): - // /proc/[pid]/cgroup - // ... - // For each cgroup hierarchy ... there is one entry - // containing three colon-separated fields of the form: - // hierarchy-ID:subsystem-list:cgroup-path - parts := strings.SplitN(text, ":", 3) - if len(parts) < 3 { - return nil, fmt.Errorf("invalid cgroup entry: must contain at least two colons: %v", text) - } - - for _, subs := range strings.Split(parts[1], ",") { - cgroups[subs] = parts[2] - } - } - return cgroups, nil -} - -func getControllerPath(subsystem string, cgroups map[string]string) (string, error) { - - if p, ok := cgroups[subsystem]; ok { - return p, nil - } - - if p, ok := cgroups[cgroupNamePrefix+subsystem]; ok { - return p, nil - } - - return "", NewNotFoundError(subsystem) -} - -func PathExists(path string) bool { - if _, err := os.Stat(path); err != nil { - return false - } - return true -} - -func EnterPid(cgroupPaths map[string]string, pid int) error { - for _, path := range cgroupPaths { - if PathExists(path) { - if err := ioutil.WriteFile(filepath.Join(path, "cgroup.procs"), - []byte(strconv.Itoa(pid)), 0700); err != nil { - return err - } - } - } - return nil -} - -// RemovePaths iterates over the provided paths removing them. -// We trying to remove all paths five times with increasing delay between tries. -// If after all there are not removed cgroups - appropriate error will be -// returned. -func RemovePaths(paths map[string]string) (err error) { - delay := 10 * time.Millisecond - for i := 0; i < 5; i++ { - if i != 0 { - time.Sleep(delay) - delay *= 2 - } - for s, p := range paths { - os.RemoveAll(p) - // TODO: here probably should be logging - _, err := os.Stat(p) - // We need this strange way of checking cgroups existence because - // RemoveAll almost always returns error, even on already removed - // cgroups - if os.IsNotExist(err) { - delete(paths, s) - } - } - if len(paths) == 0 { - return nil - } - } - return fmt.Errorf("Failed to remove paths: %v", paths) -} - -func GetHugePageSize() ([]string, error) { - var pageSizes []string - sizeList := []string{"B", "kB", "MB", "GB", "TB", "PB"} - files, err := ioutil.ReadDir("/sys/kernel/mm/hugepages") - if err != nil { - return pageSizes, err - } - for _, st := range files { - nameArray := strings.Split(st.Name(), "-") - pageSize, err := units.RAMInBytes(nameArray[1]) - if err != nil { - return []string{}, err - } - sizeString := units.CustomSize("%g%s", float64(pageSize), 1024.0, sizeList) - pageSizes = append(pageSizes, sizeString) - } - - return pageSizes, nil -} - -// GetPids returns all pids, that were added to cgroup at path. -func GetPids(path string) ([]int, error) { - return readProcsFile(path) -} - -// GetAllPids returns all pids, that were added to cgroup at path and to all its -// subcgroups. -func GetAllPids(path string) ([]int, error) { - var pids []int - // collect pids from all sub-cgroups - err := filepath.Walk(path, func(p string, info os.FileInfo, iErr error) error { - dir, file := filepath.Split(p) - if file != "cgroup.procs" { - return nil - } - if iErr != nil { - return iErr - } - cPids, err := readProcsFile(dir) - if err != nil { - return err - } - pids = append(pids, cPids...) - return nil - }) - return pids, err -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/blkio_device.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/blkio_device.go deleted file mode 100644 index e0f3ca16..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/blkio_device.go +++ /dev/null @@ -1,61 +0,0 @@ -package configs - -import "fmt" - -// blockIODevice holds major:minor format supported in blkio cgroup -type blockIODevice struct { - // Major is the device's major number - Major int64 `json:"major"` - // Minor is the device's minor number - Minor int64 `json:"minor"` -} - -// WeightDevice struct holds a `major:minor weight`|`major:minor leaf_weight` pair -type WeightDevice struct { - blockIODevice - // Weight is the bandwidth rate for the device, range is from 10 to 1000 - Weight uint16 `json:"weight"` - // LeafWeight is the bandwidth rate for the device while competing with the cgroup's child cgroups, range is from 10 to 1000, cfq scheduler only - LeafWeight uint16 `json:"leafWeight"` -} - -// NewWeightDevice returns a configured WeightDevice pointer -func NewWeightDevice(major, minor int64, weight, leafWeight uint16) *WeightDevice { - wd := &WeightDevice{} - wd.Major = major - wd.Minor = minor - wd.Weight = weight - wd.LeafWeight = leafWeight - return wd -} - -// WeightString formats the struct to be writable to the cgroup specific file -func (wd *WeightDevice) WeightString() string { - return fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, wd.Weight) -} - -// LeafWeightString formats the struct to be writable to the cgroup specific file -func (wd *WeightDevice) LeafWeightString() string { - return fmt.Sprintf("%d:%d %d", wd.Major, wd.Minor, wd.LeafWeight) -} - -// ThrottleDevice struct holds a `major:minor rate_per_second` pair -type ThrottleDevice struct { - blockIODevice - // Rate is the IO rate limit per cgroup per device - Rate uint64 `json:"rate"` -} - -// NewThrottleDevice returns a configured ThrottleDevice pointer -func NewThrottleDevice(major, minor int64, rate uint64) *ThrottleDevice { - td := &ThrottleDevice{} - td.Major = major - td.Minor = minor - td.Rate = rate - return td -} - -// String formats the struct to be writable to the cgroup specific file -func (td *ThrottleDevice) String() string { - return fmt.Sprintf("%d:%d %d", td.Major, td.Minor, td.Rate) -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unix.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unix.go deleted file mode 100644 index f2eff91c..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unix.go +++ /dev/null @@ -1,124 +0,0 @@ -// +build linux freebsd - -package configs - -type FreezerState string - -const ( - Undefined FreezerState = "" - Frozen FreezerState = "FROZEN" - Thawed FreezerState = "THAWED" -) - -type Cgroup struct { - // Deprecated, use Path instead - Name string `json:"name,omitempty"` - - // name of parent of cgroup or slice - // Deprecated, use Path instead - Parent string `json:"parent,omitempty"` - - // Path specifies the path to cgroups that are created and/or joined by the container. - // The path is assumed to be relative to the host system cgroup mountpoint. - Path string `json:"path"` - - // ScopePrefix decribes prefix for the scope name - ScopePrefix string `json:"scope_prefix"` - - // Paths represent the absolute cgroups paths to join. - // This takes precedence over Path. - Paths map[string]string - - // Resources contains various cgroups settings to apply - *Resources -} - -type Resources struct { - // If this is true allow access to any kind of device within the container. If false, allow access only to devices explicitly listed in the allowed_devices list. - // Deprecated - AllowAllDevices bool `json:"allow_all_devices,omitempty"` - // Deprecated - AllowedDevices []*Device `json:"allowed_devices,omitempty"` - // Deprecated - DeniedDevices []*Device `json:"denied_devices,omitempty"` - - Devices []*Device `json:"devices"` - - // Memory limit (in bytes) - Memory int64 `json:"memory"` - - // Memory reservation or soft_limit (in bytes) - MemoryReservation int64 `json:"memory_reservation"` - - // Total memory usage (memory + swap); set `-1` to enable unlimited swap - MemorySwap int64 `json:"memory_swap"` - - // Kernel memory limit (in bytes) - KernelMemory int64 `json:"kernel_memory"` - - // Kernel memory limit for TCP use (in bytes) - KernelMemoryTCP int64 `json:"kernel_memory_tcp"` - - // CPU shares (relative weight vs. other containers) - CpuShares int64 `json:"cpu_shares"` - - // CPU hardcap limit (in usecs). Allowed cpu time in a given period. - CpuQuota int64 `json:"cpu_quota"` - - // CPU period to be used for hardcapping (in usecs). 0 to use system default. - CpuPeriod int64 `json:"cpu_period"` - - // How many time CPU will use in realtime scheduling (in usecs). - CpuRtRuntime int64 `json:"cpu_quota"` - - // CPU period to be used for realtime scheduling (in usecs). - CpuRtPeriod int64 `json:"cpu_period"` - - // CPU to use - CpusetCpus string `json:"cpuset_cpus"` - - // MEM to use - CpusetMems string `json:"cpuset_mems"` - - // Process limit; set <= `0' to disable limit. - PidsLimit int64 `json:"pids_limit"` - - // Specifies per cgroup weight, range is from 10 to 1000. - BlkioWeight uint16 `json:"blkio_weight"` - - // Specifies tasks' weight in the given cgroup while competing with the cgroup's child cgroups, range is from 10 to 1000, cfq scheduler only - BlkioLeafWeight uint16 `json:"blkio_leaf_weight"` - - // Weight per cgroup per device, can override BlkioWeight. - BlkioWeightDevice []*WeightDevice `json:"blkio_weight_device"` - - // IO read rate limit per cgroup per device, bytes per second. - BlkioThrottleReadBpsDevice []*ThrottleDevice `json:"blkio_throttle_read_bps_device"` - - // IO write rate limit per cgroup per divice, bytes per second. - BlkioThrottleWriteBpsDevice []*ThrottleDevice `json:"blkio_throttle_write_bps_device"` - - // IO read rate limit per cgroup per device, IO per second. - BlkioThrottleReadIOPSDevice []*ThrottleDevice `json:"blkio_throttle_read_iops_device"` - - // IO write rate limit per cgroup per device, IO per second. - BlkioThrottleWriteIOPSDevice []*ThrottleDevice `json:"blkio_throttle_write_iops_device"` - - // set the freeze value for the process - Freezer FreezerState `json:"freezer"` - - // Hugetlb limit (in bytes) - HugetlbLimit []*HugepageLimit `json:"hugetlb_limit"` - - // Whether to disable OOM Killer - OomKillDisable bool `json:"oom_kill_disable"` - - // Tuning swappiness behaviour per cgroup - MemorySwappiness *int64 `json:"memory_swappiness"` - - // Set priority of network traffic for container - NetPrioIfpriomap []*IfPrioMap `json:"net_prio_ifpriomap"` - - // Set class identifier for container's network packets - NetClsClassid string `json:"net_cls_classid"` -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unsupported.go deleted file mode 100644 index 95e2830a..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_unsupported.go +++ /dev/null @@ -1,6 +0,0 @@ -// +build !windows,!linux,!freebsd - -package configs - -type Cgroup struct { -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_windows.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_windows.go deleted file mode 100644 index d74847b0..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/cgroup_windows.go +++ /dev/null @@ -1,6 +0,0 @@ -package configs - -// TODO Windows: This can ultimately be entirely factored out on Windows as -// cgroups are a Unix-specific construct. -type Cgroup struct { -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go deleted file mode 100644 index 806e0be9..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/config.go +++ /dev/null @@ -1,332 +0,0 @@ -package configs - -import ( - "bytes" - "encoding/json" - "fmt" - "os/exec" - "time" - - "github.com/Sirupsen/logrus" -) - -type Rlimit struct { - Type int `json:"type"` - Hard uint64 `json:"hard"` - Soft uint64 `json:"soft"` -} - -// IDMap represents UID/GID Mappings for User Namespaces. -type IDMap struct { - ContainerID int `json:"container_id"` - HostID int `json:"host_id"` - Size int `json:"size"` -} - -// Seccomp represents syscall restrictions -// By default, only the native architecture of the kernel is allowed to be used -// for syscalls. Additional architectures can be added by specifying them in -// Architectures. -type Seccomp struct { - DefaultAction Action `json:"default_action"` - Architectures []string `json:"architectures"` - Syscalls []*Syscall `json:"syscalls"` -} - -// Action is taken upon rule match in Seccomp -type Action int - -const ( - Kill Action = iota + 1 - Errno - Trap - Allow - Trace -) - -// Operator is a comparison operator to be used when matching syscall arguments in Seccomp -type Operator int - -const ( - EqualTo Operator = iota + 1 - NotEqualTo - GreaterThan - GreaterThanOrEqualTo - LessThan - LessThanOrEqualTo - MaskEqualTo -) - -// Arg is a rule to match a specific syscall argument in Seccomp -type Arg struct { - Index uint `json:"index"` - Value uint64 `json:"value"` - ValueTwo uint64 `json:"value_two"` - Op Operator `json:"op"` -} - -// Syscall is a rule to match a syscall in Seccomp -type Syscall struct { - Name string `json:"name"` - Action Action `json:"action"` - Args []*Arg `json:"args"` -} - -// TODO Windows. Many of these fields should be factored out into those parts -// which are common across platforms, and those which are platform specific. - -// Config defines configuration options for executing a process inside a contained environment. -type Config struct { - // NoPivotRoot will use MS_MOVE and a chroot to jail the process into the container's rootfs - // This is a common option when the container is running in ramdisk - NoPivotRoot bool `json:"no_pivot_root"` - - // ParentDeathSignal specifies the signal that is sent to the container's process in the case - // that the parent process dies. - ParentDeathSignal int `json:"parent_death_signal"` - - // PivotDir allows a custom directory inside the container's root filesystem to be used as pivot, when NoPivotRoot is not set. - // When a custom PivotDir not set, a temporary dir inside the root filesystem will be used. The pivot dir needs to be writeable. - // This is required when using read only root filesystems. In these cases, a read/writeable path can be (bind) mounted somewhere inside the root filesystem to act as pivot. - PivotDir string `json:"pivot_dir"` - - // Path to a directory containing the container's root filesystem. - Rootfs string `json:"rootfs"` - - // Readonlyfs will remount the container's rootfs as readonly where only externally mounted - // bind mounts are writtable. - Readonlyfs bool `json:"readonlyfs"` - - // Specifies the mount propagation flags to be applied to /. - RootPropagation int `json:"rootPropagation"` - - // Mounts specify additional source and destination paths that will be mounted inside the container's - // rootfs and mount namespace if specified - Mounts []*Mount `json:"mounts"` - - // The device nodes that should be automatically created within the container upon container start. Note, make sure that the node is marked as allowed in the cgroup as well! - Devices []*Device `json:"devices"` - - MountLabel string `json:"mount_label"` - - // Hostname optionally sets the container's hostname if provided - Hostname string `json:"hostname"` - - // Namespaces specifies the container's namespaces that it should setup when cloning the init process - // If a namespace is not provided that namespace is shared from the container's parent process - Namespaces Namespaces `json:"namespaces"` - - // Capabilities specify the capabilities to keep when executing the process inside the container - // All capbilities not specified will be dropped from the processes capability mask - Capabilities []string `json:"capabilities"` - - // Networks specifies the container's network setup to be created - Networks []*Network `json:"networks"` - - // Routes can be specified to create entries in the route table as the container is started - Routes []*Route `json:"routes"` - - // Cgroups specifies specific cgroup settings for the various subsystems that the container is - // placed into to limit the resources the container has available - Cgroups *Cgroup `json:"cgroups"` - - // AppArmorProfile specifies the profile to apply to the process running in the container and is - // change at the time the process is execed - AppArmorProfile string `json:"apparmor_profile,omitempty"` - - // ProcessLabel specifies the label to apply to the process running in the container. It is - // commonly used by selinux - ProcessLabel string `json:"process_label,omitempty"` - - // Rlimits specifies the resource limits, such as max open files, to set in the container - // If Rlimits are not set, the container will inherit rlimits from the parent process - Rlimits []Rlimit `json:"rlimits,omitempty"` - - // OomScoreAdj specifies the adjustment to be made by the kernel when calculating oom scores - // for a process. Valid values are between the range [-1000, '1000'], where processes with - // higher scores are preferred for being killed. - // More information about kernel oom score calculation here: https://lwn.net/Articles/317814/ - OomScoreAdj int `json:"oom_score_adj"` - - // AdditionalGroups specifies the gids that should be added to supplementary groups - // in addition to those that the user belongs to. - AdditionalGroups []string `json:"additional_groups"` - - // UidMappings is an array of User ID mappings for User Namespaces - UidMappings []IDMap `json:"uid_mappings"` - - // GidMappings is an array of Group ID mappings for User Namespaces - GidMappings []IDMap `json:"gid_mappings"` - - // MaskPaths specifies paths within the container's rootfs to mask over with a bind - // mount pointing to /dev/null as to prevent reads of the file. - MaskPaths []string `json:"mask_paths"` - - // ReadonlyPaths specifies paths within the container's rootfs to remount as read-only - // so that these files prevent any writes. - ReadonlyPaths []string `json:"readonly_paths"` - - // Sysctl is a map of properties and their values. It is the equivalent of using - // sysctl -w my.property.name value in Linux. - Sysctl map[string]string `json:"sysctl"` - - // Seccomp allows actions to be taken whenever a syscall is made within the container. - // A number of rules are given, each having an action to be taken if a syscall matches it. - // A default action to be taken if no rules match is also given. - Seccomp *Seccomp `json:"seccomp"` - - // NoNewPrivileges controls whether processes in the container can gain additional privileges. - NoNewPrivileges bool `json:"no_new_privileges,omitempty"` - - // Hooks are a collection of actions to perform at various container lifecycle events. - // CommandHooks are serialized to JSON, but other hooks are not. - Hooks *Hooks - - // Version is the version of opencontainer specification that is supported. - Version string `json:"version"` - - // Labels are user defined metadata that is stored in the config and populated on the state - Labels []string `json:"labels"` - - // NoNewKeyring will not allocated a new session keyring for the container. It will use the - // callers keyring in this case. - NoNewKeyring bool `json:"no_new_keyring"` -} - -type Hooks struct { - // Prestart commands are executed after the container namespaces are created, - // but before the user supplied command is executed from init. - Prestart []Hook - - // Poststart commands are executed after the container init process starts. - Poststart []Hook - - // Poststop commands are executed after the container init process exits. - Poststop []Hook -} - -func (hooks *Hooks) UnmarshalJSON(b []byte) error { - var state struct { - Prestart []CommandHook - Poststart []CommandHook - Poststop []CommandHook - } - - if err := json.Unmarshal(b, &state); err != nil { - return err - } - - deserialize := func(shooks []CommandHook) (hooks []Hook) { - for _, shook := range shooks { - hooks = append(hooks, shook) - } - - return hooks - } - - hooks.Prestart = deserialize(state.Prestart) - hooks.Poststart = deserialize(state.Poststart) - hooks.Poststop = deserialize(state.Poststop) - return nil -} - -func (hooks Hooks) MarshalJSON() ([]byte, error) { - serialize := func(hooks []Hook) (serializableHooks []CommandHook) { - for _, hook := range hooks { - switch chook := hook.(type) { - case CommandHook: - serializableHooks = append(serializableHooks, chook) - default: - logrus.Warnf("cannot serialize hook of type %T, skipping", hook) - } - } - - return serializableHooks - } - - return json.Marshal(map[string]interface{}{ - "prestart": serialize(hooks.Prestart), - "poststart": serialize(hooks.Poststart), - "poststop": serialize(hooks.Poststop), - }) -} - -// HookState is the payload provided to a hook on execution. -type HookState struct { - Version string `json:"ociVersion"` - ID string `json:"id"` - Pid int `json:"pid"` - Root string `json:"root"` - BundlePath string `json:"bundlePath"` -} - -type Hook interface { - // Run executes the hook with the provided state. - Run(HookState) error -} - -// NewFunctionHook will call the provided function when the hook is run. -func NewFunctionHook(f func(HookState) error) FuncHook { - return FuncHook{ - run: f, - } -} - -type FuncHook struct { - run func(HookState) error -} - -func (f FuncHook) Run(s HookState) error { - return f.run(s) -} - -type Command struct { - Path string `json:"path"` - Args []string `json:"args"` - Env []string `json:"env"` - Dir string `json:"dir"` - Timeout *time.Duration `json:"timeout"` -} - -// NewCommandHook will execute the provided command when the hook is run. -func NewCommandHook(cmd Command) CommandHook { - return CommandHook{ - Command: cmd, - } -} - -type CommandHook struct { - Command -} - -func (c Command) Run(s HookState) error { - b, err := json.Marshal(s) - if err != nil { - return err - } - cmd := exec.Cmd{ - Path: c.Path, - Args: c.Args, - Env: c.Env, - Stdin: bytes.NewReader(b), - } - errC := make(chan error, 1) - go func() { - out, err := cmd.CombinedOutput() - if err != nil { - err = fmt.Errorf("%s: %s", err, out) - } - errC <- err - }() - if c.Timeout != nil { - select { - case err := <-errC: - return err - case <-time.After(*c.Timeout): - cmd.Process.Kill() - cmd.Wait() - return fmt.Errorf("hook ran past specified timeout of %.1fs", c.Timeout.Seconds()) - } - } - return <-errC -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/config_unix.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/config_unix.go deleted file mode 100644 index a60554a7..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/config_unix.go +++ /dev/null @@ -1,51 +0,0 @@ -// +build freebsd linux - -package configs - -import "fmt" - -// HostUID gets the root uid for the process on host which could be non-zero -// when user namespaces are enabled. -func (c Config) HostUID() (int, error) { - if c.Namespaces.Contains(NEWUSER) { - if c.UidMappings == nil { - return -1, fmt.Errorf("User namespaces enabled, but no user mappings found.") - } - id, found := c.hostIDFromMapping(0, c.UidMappings) - if !found { - return -1, fmt.Errorf("User namespaces enabled, but no root user mapping found.") - } - return id, nil - } - // Return default root uid 0 - return 0, nil -} - -// HostGID gets the root gid for the process on host which could be non-zero -// when user namespaces are enabled. -func (c Config) HostGID() (int, error) { - if c.Namespaces.Contains(NEWUSER) { - if c.GidMappings == nil { - return -1, fmt.Errorf("User namespaces enabled, but no gid mappings found.") - } - id, found := c.hostIDFromMapping(0, c.GidMappings) - if !found { - return -1, fmt.Errorf("User namespaces enabled, but no root group mapping found.") - } - return id, nil - } - // Return default root gid 0 - return 0, nil -} - -// Utility function that gets a host ID for a container ID from user namespace map -// if that ID is present in the map. -func (c Config) hostIDFromMapping(containerID int, uMap []IDMap) (int, bool) { - for _, m := range uMap { - if (containerID >= m.ContainerID) && (containerID <= (m.ContainerID + m.Size - 1)) { - hostID := m.HostID + (containerID - m.ContainerID) - return hostID, true - } - } - return -1, false -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/device.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/device.go deleted file mode 100644 index 8701bb21..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/device.go +++ /dev/null @@ -1,57 +0,0 @@ -package configs - -import ( - "fmt" - "os" -) - -const ( - Wildcard = -1 -) - -// TODO Windows: This can be factored out in the future - -type Device struct { - // Device type, block, char, etc. - Type rune `json:"type"` - - // Path to the device. - Path string `json:"path"` - - // Major is the device's major number. - Major int64 `json:"major"` - - // Minor is the device's minor number. - Minor int64 `json:"minor"` - - // Cgroup permissions format, rwm. - Permissions string `json:"permissions"` - - // FileMode permission bits for the device. - FileMode os.FileMode `json:"file_mode"` - - // Uid of the device. - Uid uint32 `json:"uid"` - - // Gid of the device. - Gid uint32 `json:"gid"` - - // Write the file to the allowed list - Allow bool `json:"allow"` -} - -func (d *Device) CgroupString() string { - return fmt.Sprintf("%c %s:%s %s", d.Type, deviceNumberString(d.Major), deviceNumberString(d.Minor), d.Permissions) -} - -func (d *Device) Mkdev() int { - return int((d.Major << 8) | (d.Minor & 0xff) | ((d.Minor & 0xfff00) << 12)) -} - -// deviceNumberString converts the device number to a string return result. -func deviceNumberString(number int64) string { - if number == Wildcard { - return "*" - } - return fmt.Sprint(number) -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/device_defaults.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/device_defaults.go deleted file mode 100644 index ba1f437f..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/device_defaults.go +++ /dev/null @@ -1,125 +0,0 @@ -// +build linux freebsd - -package configs - -var ( - // DefaultSimpleDevices are devices that are to be both allowed and created. - DefaultSimpleDevices = []*Device{ - // /dev/null and zero - { - Path: "/dev/null", - Type: 'c', - Major: 1, - Minor: 3, - Permissions: "rwm", - FileMode: 0666, - }, - { - Path: "/dev/zero", - Type: 'c', - Major: 1, - Minor: 5, - Permissions: "rwm", - FileMode: 0666, - }, - - { - Path: "/dev/full", - Type: 'c', - Major: 1, - Minor: 7, - Permissions: "rwm", - FileMode: 0666, - }, - - // consoles and ttys - { - Path: "/dev/tty", - Type: 'c', - Major: 5, - Minor: 0, - Permissions: "rwm", - FileMode: 0666, - }, - - // /dev/urandom,/dev/random - { - Path: "/dev/urandom", - Type: 'c', - Major: 1, - Minor: 9, - Permissions: "rwm", - FileMode: 0666, - }, - { - Path: "/dev/random", - Type: 'c', - Major: 1, - Minor: 8, - Permissions: "rwm", - FileMode: 0666, - }, - } - DefaultAllowedDevices = append([]*Device{ - // allow mknod for any device - { - Type: 'c', - Major: Wildcard, - Minor: Wildcard, - Permissions: "m", - }, - { - Type: 'b', - Major: Wildcard, - Minor: Wildcard, - Permissions: "m", - }, - - { - Path: "/dev/console", - Type: 'c', - Major: 5, - Minor: 1, - Permissions: "rwm", - }, - // /dev/pts/ - pts namespaces are "coming soon" - { - Path: "", - Type: 'c', - Major: 136, - Minor: Wildcard, - Permissions: "rwm", - }, - { - Path: "", - Type: 'c', - Major: 5, - Minor: 2, - Permissions: "rwm", - }, - - // tuntap - { - Path: "", - Type: 'c', - Major: 10, - Minor: 200, - Permissions: "rwm", - }, - }, DefaultSimpleDevices...) - DefaultAutoCreatedDevices = append([]*Device{ - { - // /dev/fuse is created but not allowed. - // This is to allow java to work. Because java - // Insists on there being a /dev/fuse - // https://github.com/docker/docker/issues/514 - // https://github.com/docker/docker/issues/2393 - // - Path: "/dev/fuse", - Type: 'c', - Major: 10, - Minor: 229, - Permissions: "rwm", - }, - }, DefaultSimpleDevices...) -) diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/hugepage_limit.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/hugepage_limit.go deleted file mode 100644 index d3021638..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/hugepage_limit.go +++ /dev/null @@ -1,9 +0,0 @@ -package configs - -type HugepageLimit struct { - // which type of hugepage to limit. - Pagesize string `json:"page_size"` - - // usage limit for hugepage. - Limit uint64 `json:"limit"` -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/interface_priority_map.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/interface_priority_map.go deleted file mode 100644 index 9a0395ea..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/interface_priority_map.go +++ /dev/null @@ -1,14 +0,0 @@ -package configs - -import ( - "fmt" -) - -type IfPrioMap struct { - Interface string `json:"interface"` - Priority int64 `json:"priority"` -} - -func (i *IfPrioMap) CgroupString() string { - return fmt.Sprintf("%s %d", i.Interface, i.Priority) -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/mount.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/mount.go deleted file mode 100644 index cc770c91..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/mount.go +++ /dev/null @@ -1,30 +0,0 @@ -package configs - -type Mount struct { - // Source path for the mount. - Source string `json:"source"` - - // Destination path for the mount inside the container. - Destination string `json:"destination"` - - // Device the mount is for. - Device string `json:"device"` - - // Mount flags. - Flags int `json:"flags"` - - // Propagation Flags - PropagationFlags []int `json:"propagation_flags"` - - // Mount data applied to the mount. - Data string `json:"data"` - - // Relabel source if set, "z" indicates shared, "Z" indicates unshared. - Relabel string `json:"relabel"` - - // Optional Command to be run before Source is mounted. - PremountCmds []Command `json:"premount_cmds"` - - // Optional Command to be run after Source is mounted. - PostmountCmds []Command `json:"postmount_cmds"` -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces.go deleted file mode 100644 index a3329a31..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces.go +++ /dev/null @@ -1,5 +0,0 @@ -package configs - -type NamespaceType string - -type Namespaces []Namespace diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go deleted file mode 100644 index fb4b8522..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall.go +++ /dev/null @@ -1,31 +0,0 @@ -// +build linux - -package configs - -import "syscall" - -func (n *Namespace) Syscall() int { - return namespaceInfo[n.Type] -} - -var namespaceInfo = map[NamespaceType]int{ - NEWNET: syscall.CLONE_NEWNET, - NEWNS: syscall.CLONE_NEWNS, - NEWUSER: syscall.CLONE_NEWUSER, - NEWIPC: syscall.CLONE_NEWIPC, - NEWUTS: syscall.CLONE_NEWUTS, - NEWPID: syscall.CLONE_NEWPID, -} - -// CloneFlags parses the container's Namespaces options to set the correct -// flags on clone, unshare. This function returns flags only for new namespaces. -func (n *Namespaces) CloneFlags() uintptr { - var flag int - for _, v := range *n { - if v.Path != "" { - continue - } - flag |= namespaceInfo[v.Type] - } - return uintptr(flag) -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall_unsupported.go deleted file mode 100644 index 0547223a..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_syscall_unsupported.go +++ /dev/null @@ -1,15 +0,0 @@ -// +build !linux,!windows - -package configs - -func (n *Namespace) Syscall() int { - panic("No namespace syscall support") - return 0 -} - -// CloneFlags parses the container's Namespaces options to set the correct -// flags on clone, unshare. This function returns flags only for new namespaces. -func (n *Namespaces) CloneFlags() uintptr { - panic("No namespace syscall support") - return uintptr(0) -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unix.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unix.go deleted file mode 100644 index b9c820d0..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unix.go +++ /dev/null @@ -1,127 +0,0 @@ -// +build linux freebsd - -package configs - -import ( - "fmt" - "os" - "sync" -) - -const ( - NEWNET NamespaceType = "NEWNET" - NEWPID NamespaceType = "NEWPID" - NEWNS NamespaceType = "NEWNS" - NEWUTS NamespaceType = "NEWUTS" - NEWIPC NamespaceType = "NEWIPC" - NEWUSER NamespaceType = "NEWUSER" -) - -var ( - nsLock sync.Mutex - supportedNamespaces = make(map[NamespaceType]bool) -) - -// nsToFile converts the namespace type to its filename -func nsToFile(ns NamespaceType) string { - switch ns { - case NEWNET: - return "net" - case NEWNS: - return "mnt" - case NEWPID: - return "pid" - case NEWIPC: - return "ipc" - case NEWUSER: - return "user" - case NEWUTS: - return "uts" - } - return "" -} - -// IsNamespaceSupported returns whether a namespace is available or -// not -func IsNamespaceSupported(ns NamespaceType) bool { - nsLock.Lock() - defer nsLock.Unlock() - supported, ok := supportedNamespaces[ns] - if ok { - return supported - } - nsFile := nsToFile(ns) - // if the namespace type is unknown, just return false - if nsFile == "" { - return false - } - _, err := os.Stat(fmt.Sprintf("/proc/self/ns/%s", nsFile)) - // a namespace is supported if it exists and we have permissions to read it - supported = err == nil - supportedNamespaces[ns] = supported - return supported -} - -func NamespaceTypes() []NamespaceType { - return []NamespaceType{ - NEWNET, - NEWPID, - NEWNS, - NEWUTS, - NEWIPC, - NEWUSER, - } -} - -// Namespace defines configuration for each namespace. It specifies an -// alternate path that is able to be joined via setns. -type Namespace struct { - Type NamespaceType `json:"type"` - Path string `json:"path"` -} - -func (n *Namespace) GetPath(pid int) string { - if n.Path != "" { - return n.Path - } - return fmt.Sprintf("/proc/%d/ns/%s", pid, nsToFile(n.Type)) -} - -func (n *Namespaces) Remove(t NamespaceType) bool { - i := n.index(t) - if i == -1 { - return false - } - *n = append((*n)[:i], (*n)[i+1:]...) - return true -} - -func (n *Namespaces) Add(t NamespaceType, path string) { - i := n.index(t) - if i == -1 { - *n = append(*n, Namespace{Type: t, Path: path}) - return - } - (*n)[i].Path = path -} - -func (n *Namespaces) index(t NamespaceType) int { - for i, ns := range *n { - if ns.Type == t { - return i - } - } - return -1 -} - -func (n *Namespaces) Contains(t NamespaceType) bool { - return n.index(t) != -1 -} - -func (n *Namespaces) PathOf(t NamespaceType) string { - i := n.index(t) - if i == -1 { - return "" - } - return (*n)[i].Path -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unsupported.go deleted file mode 100644 index 9a74033c..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/namespaces_unsupported.go +++ /dev/null @@ -1,8 +0,0 @@ -// +build !linux,!freebsd - -package configs - -// Namespace defines configuration for each namespace. It specifies an -// alternate path that is able to be joined via setns. -type Namespace struct { -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/configs/network.go b/vendor/github.com/opencontainers/runc/libcontainer/configs/network.go deleted file mode 100644 index ccdb228e..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/configs/network.go +++ /dev/null @@ -1,72 +0,0 @@ -package configs - -// Network defines configuration for a container's networking stack -// -// The network configuration can be omitted from a container causing the -// container to be setup with the host's networking stack -type Network struct { - // Type sets the networks type, commonly veth and loopback - Type string `json:"type"` - - // Name of the network interface - Name string `json:"name"` - - // The bridge to use. - Bridge string `json:"bridge"` - - // MacAddress contains the MAC address to set on the network interface - MacAddress string `json:"mac_address"` - - // Address contains the IPv4 and mask to set on the network interface - Address string `json:"address"` - - // Gateway sets the gateway address that is used as the default for the interface - Gateway string `json:"gateway"` - - // IPv6Address contains the IPv6 and mask to set on the network interface - IPv6Address string `json:"ipv6_address"` - - // IPv6Gateway sets the ipv6 gateway address that is used as the default for the interface - IPv6Gateway string `json:"ipv6_gateway"` - - // Mtu sets the mtu value for the interface and will be mirrored on both the host and - // container's interfaces if a pair is created, specifically in the case of type veth - // Note: This does not apply to loopback interfaces. - Mtu int `json:"mtu"` - - // TxQueueLen sets the tx_queuelen value for the interface and will be mirrored on both the host and - // container's interfaces if a pair is created, specifically in the case of type veth - // Note: This does not apply to loopback interfaces. - TxQueueLen int `json:"txqueuelen"` - - // HostInterfaceName is a unique name of a veth pair that resides on in the host interface of the - // container. - HostInterfaceName string `json:"host_interface_name"` - - // HairpinMode specifies if hairpin NAT should be enabled on the virtual interface - // bridge port in the case of type veth - // Note: This is unsupported on some systems. - // Note: This does not apply to loopback interfaces. - HairpinMode bool `json:"hairpin_mode"` -} - -// Routes can be specified to create entries in the route table as the container is started -// -// All of destination, source, and gateway should be either IPv4 or IPv6. -// One of the three options must be present, and omitted entries will use their -// IP family default for the route table. For IPv4 for example, setting the -// gateway to 1.2.3.4 and the interface to eth0 will set up a standard -// destination of 0.0.0.0(or *) when viewed in the route table. -type Route struct { - // Sets the destination and mask, should be a CIDR. Accepts IPv4 and IPv6 - Destination string `json:"destination"` - - // Sets the source and mask, should be a CIDR. Accepts IPv4 and IPv6 - Source string `json:"source"` - - // Sets the gateway. Accepts IPv4 and IPv6 - Gateway string `json:"gateway"` - - // The device to set this route up for, for example: eth0 - InterfaceName string `json:"interface_name"` -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/linux.go b/vendor/github.com/opencontainers/runc/libcontainer/system/linux.go deleted file mode 100644 index 1afc52b4..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/linux.go +++ /dev/null @@ -1,143 +0,0 @@ -// +build linux - -package system - -import ( - "bufio" - "fmt" - "os" - "os/exec" - "syscall" - "unsafe" -) - -// If arg2 is nonzero, set the "child subreaper" attribute of the -// calling process; if arg2 is zero, unset the attribute. When a -// process is marked as a child subreaper, all of the children -// that it creates, and their descendants, will be marked as -// having a subreaper. In effect, a subreaper fulfills the role -// of init(1) for its descendant processes. Upon termination of -// a process that is orphaned (i.e., its immediate parent has -// already terminated) and marked as having a subreaper, the -// nearest still living ancestor subreaper will receive a SIGCHLD -// signal and be able to wait(2) on the process to discover its -// termination status. -const PR_SET_CHILD_SUBREAPER = 36 - -type ParentDeathSignal int - -func (p ParentDeathSignal) Restore() error { - if p == 0 { - return nil - } - current, err := GetParentDeathSignal() - if err != nil { - return err - } - if p == current { - return nil - } - return p.Set() -} - -func (p ParentDeathSignal) Set() error { - return SetParentDeathSignal(uintptr(p)) -} - -func Execv(cmd string, args []string, env []string) error { - name, err := exec.LookPath(cmd) - if err != nil { - return err - } - - return syscall.Exec(name, args, env) -} - -func Prlimit(pid, resource int, limit syscall.Rlimit) error { - _, _, err := syscall.RawSyscall6(syscall.SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(&limit)), uintptr(unsafe.Pointer(&limit)), 0, 0) - if err != 0 { - return err - } - return nil -} - -func SetParentDeathSignal(sig uintptr) error { - if _, _, err := syscall.RawSyscall(syscall.SYS_PRCTL, syscall.PR_SET_PDEATHSIG, sig, 0); err != 0 { - return err - } - return nil -} - -func GetParentDeathSignal() (ParentDeathSignal, error) { - var sig int - _, _, err := syscall.RawSyscall(syscall.SYS_PRCTL, syscall.PR_GET_PDEATHSIG, uintptr(unsafe.Pointer(&sig)), 0) - if err != 0 { - return -1, err - } - return ParentDeathSignal(sig), nil -} - -func SetKeepCaps() error { - if _, _, err := syscall.RawSyscall(syscall.SYS_PRCTL, syscall.PR_SET_KEEPCAPS, 1, 0); err != 0 { - return err - } - - return nil -} - -func ClearKeepCaps() error { - if _, _, err := syscall.RawSyscall(syscall.SYS_PRCTL, syscall.PR_SET_KEEPCAPS, 0, 0); err != 0 { - return err - } - - return nil -} - -func Setctty() error { - if _, _, err := syscall.RawSyscall(syscall.SYS_IOCTL, 0, uintptr(syscall.TIOCSCTTY), 0); err != 0 { - return err - } - return nil -} - -// RunningInUserNS detects whether we are currently running in a user namespace. -// Copied from github.com/lxc/lxd/shared/util.go -func RunningInUserNS() bool { - file, err := os.Open("/proc/self/uid_map") - if err != nil { - // This kernel-provided file only exists if user namespaces are supported - return false - } - defer file.Close() - - buf := bufio.NewReader(file) - l, _, err := buf.ReadLine() - if err != nil { - return false - } - - line := string(l) - var a, b, c int64 - fmt.Sscanf(line, "%d %d %d", &a, &b, &c) - /* - * We assume we are in the initial user namespace if we have a full - * range - 4294967295 uids starting at uid 0. - */ - if a == 0 && b == 0 && c == 4294967295 { - return false - } - return true -} - -// SetSubreaper sets the value i as the subreaper setting for the calling process -func SetSubreaper(i int) error { - return Prctl(PR_SET_CHILD_SUBREAPER, uintptr(i), 0, 0, 0) -} - -func Prctl(option int, arg2, arg3, arg4, arg5 uintptr) (err error) { - _, _, e1 := syscall.Syscall6(syscall.SYS_PRCTL, uintptr(option), arg2, arg3, arg4, arg5, 0) - if e1 != 0 { - err = e1 - } - return -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/proc.go b/vendor/github.com/opencontainers/runc/libcontainer/system/proc.go deleted file mode 100644 index 37808a29..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/proc.go +++ /dev/null @@ -1,27 +0,0 @@ -package system - -import ( - "io/ioutil" - "path/filepath" - "strconv" - "strings" -) - -// look in /proc to find the process start time so that we can verify -// that this pid has started after ourself -func GetProcessStartTime(pid int) (string, error) { - data, err := ioutil.ReadFile(filepath.Join("/proc", strconv.Itoa(pid), "stat")) - if err != nil { - return "", err - } - - parts := strings.Split(string(data), " ") - // the starttime is located at pos 22 - // from the man page - // - // starttime %llu (was %lu before Linux 2.6) - // (22) The time the process started after system boot. In kernels before Linux 2.6, this - // value was expressed in jiffies. Since Linux 2.6, the value is expressed in clock ticks - // (divide by sysconf(_SC_CLK_TCK)). - return parts[22-1], nil // starts at 1 -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/setns_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/system/setns_linux.go deleted file mode 100644 index 615ff4c8..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/setns_linux.go +++ /dev/null @@ -1,40 +0,0 @@ -package system - -import ( - "fmt" - "runtime" - "syscall" -) - -// Via http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=7b21fddd087678a70ad64afc0f632e0f1071b092 -// -// We need different setns values for the different platforms and arch -// We are declaring the macro here because the SETNS syscall does not exist in th stdlib -var setNsMap = map[string]uintptr{ - "linux/386": 346, - "linux/arm64": 268, - "linux/amd64": 308, - "linux/arm": 375, - "linux/ppc": 350, - "linux/ppc64": 350, - "linux/ppc64le": 350, - "linux/s390x": 339, -} - -var sysSetns = setNsMap[fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)] - -func SysSetns() uint32 { - return uint32(sysSetns) -} - -func Setns(fd uintptr, flags uintptr) error { - ns, exists := setNsMap[fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)] - if !exists { - return fmt.Errorf("unsupported platform %s/%s", runtime.GOOS, runtime.GOARCH) - } - _, _, err := syscall.RawSyscall(ns, fd, flags, 0) - if err != 0 { - return err - } - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_386.go b/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_386.go deleted file mode 100644 index c9900651..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_386.go +++ /dev/null @@ -1,25 +0,0 @@ -// +build linux,386 - -package system - -import ( - "syscall" -) - -// Setuid sets the uid of the calling thread to the specified uid. -func Setuid(uid int) (err error) { - _, _, e1 := syscall.RawSyscall(syscall.SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// Setgid sets the gid of the calling thread to the specified gid. -func Setgid(gid int) (err error) { - _, _, e1 := syscall.RawSyscall(syscall.SYS_SETGID32, uintptr(gid), 0, 0) - if e1 != 0 { - err = e1 - } - return -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go b/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go deleted file mode 100644 index 0816bf82..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_64.go +++ /dev/null @@ -1,25 +0,0 @@ -// +build linux,arm64 linux,amd64 linux,ppc linux,ppc64 linux,ppc64le linux,s390x - -package system - -import ( - "syscall" -) - -// Setuid sets the uid of the calling thread to the specified uid. -func Setuid(uid int) (err error) { - _, _, e1 := syscall.RawSyscall(syscall.SYS_SETUID, uintptr(uid), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// Setgid sets the gid of the calling thread to the specified gid. -func Setgid(gid int) (err error) { - _, _, e1 := syscall.RawSyscall(syscall.SYS_SETGID, uintptr(gid), 0, 0) - if e1 != 0 { - err = e1 - } - return -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_arm.go b/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_arm.go deleted file mode 100644 index 3f780f31..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/syscall_linux_arm.go +++ /dev/null @@ -1,25 +0,0 @@ -// +build linux,arm - -package system - -import ( - "syscall" -) - -// Setuid sets the uid of the calling thread to the specified uid. -func Setuid(uid int) (err error) { - _, _, e1 := syscall.RawSyscall(syscall.SYS_SETUID32, uintptr(uid), 0, 0) - if e1 != 0 { - err = e1 - } - return -} - -// Setgid sets the gid of the calling thread to the specified gid. -func Setgid(gid int) (err error) { - _, _, e1 := syscall.RawSyscall(syscall.SYS_SETGID32, uintptr(gid), 0, 0) - if e1 != 0 { - err = e1 - } - return -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig.go b/vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig.go deleted file mode 100644 index 4fba6c2b..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig.go +++ /dev/null @@ -1,31 +0,0 @@ -// +build cgo,linux cgo,freebsd - -package system - -/* -#include -#include - -int GetLongBit() { -#ifdef _SC_LONG_BIT - int longbits; - - longbits = sysconf(_SC_LONG_BIT); - if (longbits < 0) { - longbits = (CHAR_BIT * sizeof(long)); - } - return longbits; -#else - return (CHAR_BIT * sizeof(long)); -#endif -} -*/ -import "C" - -func GetClockTicks() int { - return int(C.sysconf(C._SC_CLK_TCK)) -} - -func GetLongBit() int { - return int(C.GetLongBit()) -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig_notcgo.go b/vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig_notcgo.go deleted file mode 100644 index d93b5d5f..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/sysconfig_notcgo.go +++ /dev/null @@ -1,15 +0,0 @@ -// +build !cgo windows - -package system - -func GetClockTicks() int { - // TODO figure out a better alternative for platforms where we're missing cgo - // - // TODO Windows. This could be implemented using Win32 QueryPerformanceFrequency(). - // https://msdn.microsoft.com/en-us/library/windows/desktop/ms644905(v=vs.85).aspx - // - // An example of its usage can be found here. - // https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx - - return 100 -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/unsupported.go b/vendor/github.com/opencontainers/runc/libcontainer/system/unsupported.go deleted file mode 100644 index e7cfd62b..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/unsupported.go +++ /dev/null @@ -1,9 +0,0 @@ -// +build !linux - -package system - -// RunningInUserNS is a stub for non-Linux systems -// Always returns false -func RunningInUserNS() bool { - return false -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/system/xattrs_linux.go b/vendor/github.com/opencontainers/runc/libcontainer/system/xattrs_linux.go deleted file mode 100644 index 30f74dfb..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/system/xattrs_linux.go +++ /dev/null @@ -1,99 +0,0 @@ -package system - -import ( - "syscall" - "unsafe" -) - -var _zero uintptr - -// Returns the size of xattrs and nil error -// Requires path, takes allocated []byte or nil as last argument -func Llistxattr(path string, dest []byte) (size int, err error) { - pathBytes, err := syscall.BytePtrFromString(path) - if err != nil { - return -1, err - } - var newpathBytes unsafe.Pointer - if len(dest) > 0 { - newpathBytes = unsafe.Pointer(&dest[0]) - } else { - newpathBytes = unsafe.Pointer(&_zero) - } - - _size, _, errno := syscall.Syscall6(syscall.SYS_LLISTXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(newpathBytes), uintptr(len(dest)), 0, 0, 0) - size = int(_size) - if errno != 0 { - return -1, errno - } - - return size, nil -} - -// Returns a []byte slice if the xattr is set and nil otherwise -// Requires path and its attribute as arguments -func Lgetxattr(path string, attr string) ([]byte, error) { - var sz int - pathBytes, err := syscall.BytePtrFromString(path) - if err != nil { - return nil, err - } - attrBytes, err := syscall.BytePtrFromString(attr) - if err != nil { - return nil, err - } - - // Start with a 128 length byte array - sz = 128 - dest := make([]byte, sz) - destBytes := unsafe.Pointer(&dest[0]) - _sz, _, errno := syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(destBytes), uintptr(len(dest)), 0, 0) - - switch { - case errno == syscall.ENODATA: - return nil, errno - case errno == syscall.ENOTSUP: - return nil, errno - case errno == syscall.ERANGE: - // 128 byte array might just not be good enough, - // A dummy buffer is used ``uintptr(0)`` to get real size - // of the xattrs on disk - _sz, _, errno = syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(unsafe.Pointer(nil)), uintptr(0), 0, 0) - sz = int(_sz) - if sz < 0 { - return nil, errno - } - dest = make([]byte, sz) - destBytes := unsafe.Pointer(&dest[0]) - _sz, _, errno = syscall.Syscall6(syscall.SYS_LGETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(destBytes), uintptr(len(dest)), 0, 0) - if errno != 0 { - return nil, errno - } - case errno != 0: - return nil, errno - } - sz = int(_sz) - return dest[:sz], nil -} - -func Lsetxattr(path string, attr string, data []byte, flags int) error { - pathBytes, err := syscall.BytePtrFromString(path) - if err != nil { - return err - } - attrBytes, err := syscall.BytePtrFromString(attr) - if err != nil { - return err - } - var dataBytes unsafe.Pointer - if len(data) > 0 { - dataBytes = unsafe.Pointer(&data[0]) - } else { - dataBytes = unsafe.Pointer(&_zero) - } - _, _, errno := syscall.Syscall6(syscall.SYS_LSETXATTR, uintptr(unsafe.Pointer(pathBytes)), uintptr(unsafe.Pointer(attrBytes)), uintptr(dataBytes), uintptr(len(data)), uintptr(flags), 0) - if errno != 0 { - return errno - } - return nil -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go b/vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go deleted file mode 100644 index 3466bfce..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/utils/utils.go +++ /dev/null @@ -1,121 +0,0 @@ -package utils - -import ( - "crypto/rand" - "encoding/hex" - "encoding/json" - "io" - "os" - "path/filepath" - "strings" - "syscall" -) - -const ( - exitSignalOffset = 128 -) - -// GenerateRandomName returns a new name joined with a prefix. This size -// specified is used to truncate the randomly generated value -func GenerateRandomName(prefix string, size int) (string, error) { - id := make([]byte, 32) - if _, err := io.ReadFull(rand.Reader, id); err != nil { - return "", err - } - if size > 64 { - size = 64 - } - return prefix + hex.EncodeToString(id)[:size], nil -} - -// ResolveRootfs ensures that the current working directory is -// not a symlink and returns the absolute path to the rootfs -func ResolveRootfs(uncleanRootfs string) (string, error) { - rootfs, err := filepath.Abs(uncleanRootfs) - if err != nil { - return "", err - } - return filepath.EvalSymlinks(rootfs) -} - -// ExitStatus returns the correct exit status for a process based on if it -// was signaled or exited cleanly -func ExitStatus(status syscall.WaitStatus) int { - if status.Signaled() { - return exitSignalOffset + int(status.Signal()) - } - return status.ExitStatus() -} - -// WriteJSON writes the provided struct v to w using standard json marshaling -func WriteJSON(w io.Writer, v interface{}) error { - data, err := json.Marshal(v) - if err != nil { - return err - } - _, err = w.Write(data) - return err -} - -// CleanPath makes a path safe for use with filepath.Join. This is done by not -// only cleaning the path, but also (if the path is relative) adding a leading -// '/' and cleaning it (then removing the leading '/'). This ensures that a -// path resulting from prepending another path will always resolve to lexically -// be a subdirectory of the prefixed path. This is all done lexically, so paths -// that include symlinks won't be safe as a result of using CleanPath. -func CleanPath(path string) string { - // Deal with empty strings nicely. - if path == "" { - return "" - } - - // Ensure that all paths are cleaned (especially problematic ones like - // "/../../../../../" which can cause lots of issues). - path = filepath.Clean(path) - - // If the path isn't absolute, we need to do more processing to fix paths - // such as "../../../..//some/path". We also shouldn't convert absolute - // paths to relative ones. - if !filepath.IsAbs(path) { - path = filepath.Clean(string(os.PathSeparator) + path) - // This can't fail, as (by definition) all paths are relative to root. - path, _ = filepath.Rel(string(os.PathSeparator), path) - } - - // Clean the path again for good measure. - return filepath.Clean(path) -} - -// SearchLabels searches a list of key-value pairs for the provided key and -// returns the corresponding value. The pairs must be separated with '='. -func SearchLabels(labels []string, query string) string { - for _, l := range labels { - parts := strings.SplitN(l, "=", 2) - if len(parts) < 2 { - continue - } - if parts[0] == query { - return parts[1] - } - } - return "" -} - -// Annotations returns the bundle path and user defined annotations from the -// libcontianer state. We need to remove the bundle because that is a label -// added by libcontainer. -func Annotations(labels []string) (bundle string, userAnnotations map[string]string) { - userAnnotations = make(map[string]string) - for _, l := range labels { - parts := strings.SplitN(l, "=", 2) - if len(parts) < 2 { - continue - } - if parts[0] == "bundle" { - bundle = parts[1] - } else { - userAnnotations[parts[0]] = parts[1] - } - } - return -} diff --git a/vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go b/vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go deleted file mode 100644 index 408918f2..00000000 --- a/vendor/github.com/opencontainers/runc/libcontainer/utils/utils_unix.go +++ /dev/null @@ -1,33 +0,0 @@ -// +build !windows - -package utils - -import ( - "io/ioutil" - "strconv" - "syscall" -) - -func CloseExecFrom(minFd int) error { - fdList, err := ioutil.ReadDir("/proc/self/fd") - if err != nil { - return err - } - for _, fi := range fdList { - fd, err := strconv.Atoi(fi.Name()) - if err != nil { - // ignore non-numeric file names - continue - } - - if fd < minFd { - // ignore descriptors lower than our specified minimum - continue - } - - // intentionally ignore errors from syscall.CloseOnExec - syscall.CloseOnExec(fd) - // the cases where this might fail are basically file descriptors that have already been closed (including and especially the one that was created when ioutil.ReadDir did the "opendir" syscall) - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/graph.go b/vendor/github.com/openshift/origin/pkg/api/graph/graph.go new file mode 100644 index 00000000..58a08d32 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/graph.go @@ -0,0 +1,693 @@ +package graph + +import ( + "fmt" + "reflect" + "sort" + "strings" + + "github.com/gonum/graph" + "github.com/gonum/graph/concrete" + "github.com/gonum/graph/encoding/dot" + + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/util/sets" +) + +type Node struct { + concrete.Node + UniqueName +} + +// DOTAttributes implements an attribute getter for the DOT encoding +func (n Node) DOTAttributes() []dot.Attribute { + return []dot.Attribute{{Key: "label", Value: fmt.Sprintf("%q", n.UniqueName)}} +} + +// ExistenceChecker is an interface for those nodes that can be created without a backing object. +// This can happen when a node wants an edge to a non-existent node. We know the node should exist, +// The graph needs something in that location to track the information we have about the node, but the +// backing object doesn't exist. +type ExistenceChecker interface { + // Found returns false if the node represents an object that we don't have the backing object for + Found() bool +} + +type UniqueName string + +type UniqueNameFunc func(obj interface{}) UniqueName + +func (n UniqueName) UniqueName() string { + return string(n) +} + +func (n UniqueName) String() string { + return string(n) +} + +type uniqueNamer interface { + UniqueName() UniqueName +} + +type NodeFinder interface { + Find(name UniqueName) graph.Node +} + +// UniqueNodeInitializer is a graph that allows nodes with a unique name to be added without duplication. +// If the node is newly added, true will be returned. +type UniqueNodeInitializer interface { + FindOrCreate(name UniqueName, fn NodeInitializerFunc) (graph.Node, bool) +} + +type NodeInitializerFunc func(Node) graph.Node + +func EnsureUnique(g UniqueNodeInitializer, name UniqueName, fn NodeInitializerFunc) graph.Node { + node, _ := g.FindOrCreate(name, fn) + return node +} + +type MutableDirectedEdge interface { + AddEdge(from, to graph.Node, edgeKind string) +} + +type MutableUniqueGraph interface { + graph.Mutable + MutableDirectedEdge + UniqueNodeInitializer + NodeFinder +} + +type Edge struct { + concrete.Edge + kinds sets.String +} + +func NewEdge(from, to graph.Node, kinds ...string) Edge { + return Edge{concrete.Edge{F: from, T: to}, sets.NewString(kinds...)} +} + +func (e Edge) Kinds() sets.String { + return e.kinds +} + +func (e Edge) IsKind(kind string) bool { + return e.kinds.Has(kind) +} + +// DOTAttributes implements an attribute getter for the DOT encoding +func (e Edge) DOTAttributes() []dot.Attribute { + return []dot.Attribute{{Key: "label", Value: fmt.Sprintf("%q", strings.Join(e.Kinds().List(), ","))}} +} + +type GraphDescriber interface { + Name(node graph.Node) string + Kind(node graph.Node) string + Object(node graph.Node) interface{} + EdgeKinds(edge graph.Edge) sets.String +} + +type Interface interface { + graph.Directed + + GraphDescriber + MutableUniqueGraph + + Edges() []graph.Edge +} + +type Namer interface { + ResourceName(obj interface{}) string +} + +type namer struct{} + +var DefaultNamer Namer = namer{} + +func (namer) ResourceName(obj interface{}) string { + switch t := obj.(type) { + case uniqueNamer: + return t.UniqueName().String() + default: + return reflect.TypeOf(obj).String() + } +} + +type Graph struct { + // the standard graph + graph.Directed + // helper methods for switching on the kind and types of the node + GraphDescriber + + // exposes the public interface for adding nodes + uniqueNamedGraph + // the internal graph object, which allows edges and nodes to be directly added + internal *concrete.DirectedGraph +} + +// Graph must implement MutableUniqueGraph +var _ MutableUniqueGraph = Graph{} + +// New initializes a graph from input to output. +func New() Graph { + g := concrete.NewDirectedGraph() + return Graph{ + Directed: g, + GraphDescriber: typedGraph{}, + + uniqueNamedGraph: newUniqueNamedGraph(g), + + internal: g, + } +} + +// Edges returns all the edges of the graph. Note that the returned set +// will have no specific ordering. +func (g Graph) Edges() []graph.Edge { + return g.internal.Edges() +} + +func (g Graph) String() string { + ret := "" + + nodes := g.Nodes() + sort.Sort(ByID(nodes)) + for _, node := range nodes { + ret += fmt.Sprintf("%d: %v\n", node.ID(), g.GraphDescriber.Name(node)) + + // can't use SuccessorEdges, because I want stable ordering + successors := g.From(node) + sort.Sort(ByID(successors)) + for _, successor := range successors { + edge := g.Edge(node, successor) + kinds := g.EdgeKinds(edge) + for _, kind := range kinds.List() { + ret += fmt.Sprintf("\t%v to %d: %v\n", kind, successor.ID(), g.GraphDescriber.Name(successor)) + } + } + } + + return ret +} + +// ByID is a sorted group of nodes by ID +type ByID []graph.Node + +func (m ByID) Len() int { return len(m) } +func (m ByID) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m ByID) Less(i, j int) bool { + return m[i].ID() < m[j].ID() +} + +// SyntheticNodes returns back the set of nodes that were created in response to edge requests, but did not exist +func (g Graph) SyntheticNodes() []graph.Node { + ret := []graph.Node{} + + nodes := g.Nodes() + sort.Sort(ByID(nodes)) + for _, node := range nodes { + if potentiallySyntheticNode, ok := node.(ExistenceChecker); ok { + if !potentiallySyntheticNode.Found() { + ret = append(ret, node) + } + } + } + + return ret +} + +// NodesByKind returns all the nodes of the graph with the provided kinds +func (g Graph) NodesByKind(nodeKinds ...string) []graph.Node { + ret := []graph.Node{} + + kinds := sets.NewString(nodeKinds...) + for _, node := range g.internal.Nodes() { + if kinds.Has(g.Kind(node)) { + ret = append(ret, node) + } + } + + return ret +} + +// RootNodes returns all the roots of this graph. +func (g Graph) RootNodes() []graph.Node { + roots := []graph.Node{} + for _, n := range g.Nodes() { + if len(g.To(n)) != 0 { + continue + } + roots = append(roots, n) + } + return roots +} + +// PredecessorEdges invokes fn with all of the predecessor edges of node that have the specified +// edge kind. +func (g Graph) PredecessorEdges(node graph.Node, fn EdgeFunc, edgeKinds ...string) { + for _, n := range g.To(node) { + edge := g.Edge(n, node) + kinds := g.EdgeKinds(edge) + + if kinds.HasAny(edgeKinds...) { + fn(g, n, node, kinds) + } + } +} + +// SuccessorEdges invokes fn with all of the successor edges of node that have the specified +// edge kind. +func (g Graph) SuccessorEdges(node graph.Node, fn EdgeFunc, edgeKinds ...string) { + for _, n := range g.From(node) { + edge := g.Edge(node, n) + kinds := g.EdgeKinds(edge) + + if kinds.HasAny(edgeKinds...) { + fn(g, n, node, kinds) + } + } +} + +// OutboundEdges returns all the outbound edges from node that are in the list of edgeKinds +// if edgeKinds is empty, then all edges are returned +func (g Graph) OutboundEdges(node graph.Node, edgeKinds ...string) []graph.Edge { + ret := []graph.Edge{} + + for _, n := range g.From(node) { + edge := g.Edge(node, n) + if edge == nil { + continue + } + + if len(edgeKinds) == 0 || g.EdgeKinds(edge).HasAny(edgeKinds...) { + ret = append(ret, edge) + } + } + + return ret +} + +// InboundEdges returns all the inbound edges to node that are in the list of edgeKinds +// if edgeKinds is empty, then all edges are returned +func (g Graph) InboundEdges(node graph.Node, edgeKinds ...string) []graph.Edge { + ret := []graph.Edge{} + + for _, n := range g.To(node) { + edge := g.Edge(n, node) + if edge == nil { + continue + } + + if len(edgeKinds) == 0 || g.EdgeKinds(edge).HasAny(edgeKinds...) { + ret = append(ret, edge) + } + } + + return ret +} + +// PredecessorNodesByEdgeKind returns all the predecessor nodes of the given node +// that can be reached via edges of the provided kinds +func (g Graph) PredecessorNodesByEdgeKind(node graph.Node, edgeKinds ...string) []graph.Node { + ret := []graph.Node{} + + for _, inboundEdges := range g.InboundEdges(node, edgeKinds...) { + ret = append(ret, inboundEdges.From()) + } + + return ret +} + +// SuccessorNodesByEdgeKind returns all the successor nodes of the given node +// that can be reached via edges of the provided kinds +func (g Graph) SuccessorNodesByEdgeKind(node graph.Node, edgeKinds ...string) []graph.Node { + ret := []graph.Node{} + + for _, outboundEdge := range g.OutboundEdges(node, edgeKinds...) { + ret = append(ret, outboundEdge.To()) + } + + return ret +} + +func (g Graph) SuccessorNodesByNodeAndEdgeKind(node graph.Node, nodeKind, edgeKind string) []graph.Node { + ret := []graph.Node{} + + for _, successor := range g.SuccessorNodesByEdgeKind(node, edgeKind) { + if g.Kind(successor) != nodeKind { + continue + } + + ret = append(ret, successor) + } + + return ret +} + +func (g Graph) AddNode(n graph.Node) { + g.internal.AddNode(n) +} + +// AddEdge implements MutableUniqueGraph +func (g Graph) AddEdge(from, to graph.Node, edgeKind string) { + // a Contains edge has semantic meaning for osgraph.Graph objects. It never makes sense + // to allow a single object to be "contained" by multiple nodes. + if edgeKind == ContainsEdgeKind { + // check incoming edges on the 'to' node to be certain that we aren't already contained + containsEdges := g.InboundEdges(to, ContainsEdgeKind) + if len(containsEdges) != 0 { + // TODO consider changing the AddEdge API to make this cleaner. This is a pretty severe programming error + panic(fmt.Sprintf("%v is already contained by %v", to, containsEdges)) + } + } + + kinds := sets.NewString(edgeKind) + if existingEdge := g.Edge(from, to); existingEdge != nil { + kinds.Insert(g.EdgeKinds(existingEdge).List()...) + } + + g.internal.SetEdge(NewEdge(from, to, kinds.List()...), 1.0) +} + +// addEdges adds the specified edges, filtered by the provided edge connection +// function. +func (g Graph) addEdges(edges []graph.Edge, fn EdgeFunc) { + for _, e := range edges { + switch t := e.(type) { + case concrete.WeightedEdge: + if fn(g, t.From(), t.To(), t.Edge.(Edge).Kinds()) { + g.internal.SetEdge(t.Edge.(Edge), t.Cost) + } + case Edge: + if fn(g, t.From(), t.To(), t.Kinds()) { + g.internal.SetEdge(t, 1.0) + } + default: + panic("bad edge") + } + } +} + +// NodeFunc is passed a new graph, a node in the graph, and should return true if the +// node should be included. +type NodeFunc func(g Interface, n graph.Node) bool + +// NodesOfKind returns a new NodeFunc accepting the provided kinds of nodes +// If no kinds are specified, the returned NodeFunc will accept all nodes +func NodesOfKind(kinds ...string) NodeFunc { + if len(kinds) == 0 { + return func(g Interface, n graph.Node) bool { + return true + } + } + + allowedKinds := sets.NewString(kinds...) + return func(g Interface, n graph.Node) bool { + return allowedKinds.Has(g.Kind(n)) + } +} + +// EdgeFunc is passed a new graph, an edge in the current graph, and should mutate +// the new graph as needed. If true is returned, the existing edge will be added to the graph. +type EdgeFunc func(g Interface, from, to graph.Node, edgeKinds sets.String) bool + +// EdgesOfKind returns a new EdgeFunc accepting the provided kinds of edges +// If no kinds are specified, the returned EdgeFunc will accept all edges +func EdgesOfKind(kinds ...string) EdgeFunc { + if len(kinds) == 0 { + return func(g Interface, from, to graph.Node, edgeKinds sets.String) bool { + return true + } + } + + allowedKinds := sets.NewString(kinds...) + return func(g Interface, from, to graph.Node, edgeKinds sets.String) bool { + return allowedKinds.HasAny(edgeKinds.List()...) + } +} + +// RemoveInboundEdges returns a new EdgeFunc dismissing any inbound edges to +// the provided set of nodes +func RemoveInboundEdges(nodes []graph.Node) EdgeFunc { + return func(g Interface, from, to graph.Node, edgeKinds sets.String) bool { + for _, node := range nodes { + if node == to { + return false + } + } + return true + } +} + +func RemoveOutboundEdges(nodes []graph.Node) EdgeFunc { + return func(g Interface, from, to graph.Node, edgeKinds sets.String) bool { + for _, node := range nodes { + if node == from { + return false + } + } + return true + } +} + +// EdgeSubgraph returns the directed subgraph with only the edges that match the +// provided function. +func (g Graph) EdgeSubgraph(edgeFn EdgeFunc) Graph { + out := New() + for _, node := range g.Nodes() { + out.internal.AddNode(node) + } + out.addEdges(g.internal.Edges(), edgeFn) + return out +} + +// Subgraph returns the directed subgraph with only the nodes and edges that match the +// provided functions. +func (g Graph) Subgraph(nodeFn NodeFunc, edgeFn EdgeFunc) Graph { + out := New() + for _, node := range g.Nodes() { + if nodeFn(out, node) { + out.internal.AddNode(node) + } + } + out.addEdges(g.internal.Edges(), edgeFn) + return out +} + +// SubgraphWithNodes returns the directed subgraph with only the listed nodes and edges that +// match the provided function. +func (g Graph) SubgraphWithNodes(nodes []graph.Node, fn EdgeFunc) Graph { + out := New() + for _, node := range nodes { + out.internal.AddNode(node) + } + out.addEdges(g.internal.Edges(), fn) + return out +} + +// ConnectedEdgeSubgraph creates a new graph that iterates through all edges in the graph +// and includes all edges the provided function returns true for. Nodes not referenced by +// an edge will be dropped unless the function adds them explicitly. +func (g Graph) ConnectedEdgeSubgraph(fn EdgeFunc) Graph { + out := New() + out.addEdges(g.internal.Edges(), fn) + return out +} + +// AllNodes includes all nodes in the graph +func AllNodes(g Interface, node graph.Node) bool { + return true +} + +// ExistingDirectEdge returns true if both from and to already exist in the graph and the edge kind is +// not ReferencedByEdgeKind (the generic reverse edge kind). This will purge the graph of any +// edges created by AddReversedEdge. +func ExistingDirectEdge(g Interface, from, to graph.Node, edgeKinds sets.String) bool { + return !edgeKinds.Has(ReferencedByEdgeKind) && g.Has(from) && g.Has(to) +} + +// ReverseExistingDirectEdge reverses the order of the edge and drops the existing edge only if +// both from and to already exist in the graph and the edge kind is not ReferencedByEdgeKind +// (the generic reverse edge kind). +func ReverseExistingDirectEdge(g Interface, from, to graph.Node, edgeKinds sets.String) bool { + return ExistingDirectEdge(g, from, to, edgeKinds) && ReverseGraphEdge(g, from, to, edgeKinds) +} + +// ReverseGraphEdge reverses the order of the edge and drops the existing edge. +func ReverseGraphEdge(g Interface, from, to graph.Node, edgeKinds sets.String) bool { + for edgeKind := range edgeKinds { + g.AddEdge(to, from, edgeKind) + } + return false +} + +// AddReversedEdge adds a reversed edge for every passed edge and preserves the existing +// edge. Used to convert a one directional edge into a bidirectional edge, but will +// create duplicate edges if a bidirectional edge between two nodes already exists. +func AddReversedEdge(g Interface, from, to graph.Node, edgeKinds sets.String) bool { + g.AddEdge(to, from, ReferencedByEdgeKind) + return true +} + +// AddGraphEdgesTo returns an EdgeFunc that will add the selected edges to the passed +// graph. +func AddGraphEdgesTo(g Interface) EdgeFunc { + return func(_ Interface, from, to graph.Node, edgeKinds sets.String) bool { + for edgeKind := range edgeKinds { + g.AddEdge(from, to, edgeKind) + } + + return false + } +} + +type uniqueNamedGraph struct { + graph.Mutable + names map[UniqueName]graph.Node +} + +func newUniqueNamedGraph(g graph.Mutable) uniqueNamedGraph { + return uniqueNamedGraph{ + Mutable: g, + names: make(map[UniqueName]graph.Node), + } +} + +func (g uniqueNamedGraph) FindOrCreate(name UniqueName, fn NodeInitializerFunc) (graph.Node, bool) { + if node, ok := g.names[name]; ok { + return node, true + } + id := g.NewNodeID() + node := fn(Node{concrete.Node(id), name}) + g.names[name] = node + g.AddNode(node) + return node, false +} + +func (g uniqueNamedGraph) Find(name UniqueName) graph.Node { + if node, ok := g.names[name]; ok { + return node + } + return nil +} + +type typedGraph struct{} + +func (g typedGraph) Name(node graph.Node) string { + switch t := node.(type) { + case fmt.Stringer: + return t.String() + case uniqueNamer: + return t.UniqueName().String() + default: + return fmt.Sprintf("", node.ID()) + } +} + +type objectifier interface { + Object() interface{} +} + +func (g typedGraph) Object(node graph.Node) interface{} { + switch t := node.(type) { + case objectifier: + return t.Object() + default: + return nil + } +} + +type kind interface { + Kind() string +} + +func (g typedGraph) Kind(node graph.Node) string { + if k, ok := node.(kind); ok { + return k.Kind() + } + return UnknownNodeKind +} + +func (g typedGraph) EdgeKinds(edge graph.Edge) sets.String { + var e Edge + switch t := edge.(type) { + case concrete.WeightedEdge: + e = t.Edge.(Edge) + case Edge: + e = t + default: + return sets.NewString(UnknownEdgeKind) + } + return e.Kinds() +} + +type NodeSet map[int]struct{} + +func (n NodeSet) Has(id int) bool { + _, ok := n[id] + return ok +} + +func (n NodeSet) Add(id int) { + n[id] = struct{}{} +} + +func NodesByKind(g Interface, nodes []graph.Node, kinds ...string) [][]graph.Node { + buckets := make(map[string]int) + for i, kind := range kinds { + buckets[kind] = i + } + if nodes == nil { + nodes = g.Nodes() + } + + last := len(kinds) + result := make([][]graph.Node, last+1) + for _, node := range nodes { + if bucket, ok := buckets[g.Kind(node)]; ok { + result[bucket] = append(result[bucket], node) + } else { + result[last] = append(result[last], node) + } + } + return result +} + +// IsFromDifferentNamespace returns if a node is in a different namespace +// than the one provided. +func IsFromDifferentNamespace(namespace string, node graph.Node) bool { + potentiallySyntheticNode, ok := node.(ExistenceChecker) + if !ok || potentiallySyntheticNode.Found() { + return false + } + objectified, ok := node.(objectifier) + if !ok { + return false + } + object, err := meta.Accessor(objectified) + if err != nil { + return false + } + return object.GetNamespace() != namespace +} + +func pathCovered(path []graph.Node, paths map[int][]graph.Node) bool { + l := len(path) + for _, existing := range paths { + if l >= len(existing) { + continue + } + if pathEqual(path, existing) { + return true + } + } + return false +} + +func pathEqual(a, b []graph.Node) bool { + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/graphview/dc_pipeline.go b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/dc_pipeline.go new file mode 100644 index 00000000..4cf39de9 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/dc_pipeline.go @@ -0,0 +1,84 @@ +package graphview + +import ( + "sort" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + deployedges "github.com/openshift/origin/pkg/deploy/graph" + deploygraph "github.com/openshift/origin/pkg/deploy/graph/nodes" +) + +type DeploymentConfigPipeline struct { + Deployment *deploygraph.DeploymentConfigNode + + ActiveDeployment *kubegraph.ReplicationControllerNode + InactiveDeployments []*kubegraph.ReplicationControllerNode + + Images []ImagePipeline +} + +// AllDeploymentConfigPipelines returns all the DCPipelines that aren't in the excludes set and the set of covered NodeIDs +func AllDeploymentConfigPipelines(g osgraph.Graph, excludeNodeIDs IntSet) ([]DeploymentConfigPipeline, IntSet) { + covered := IntSet{} + dcPipelines := []DeploymentConfigPipeline{} + + for _, uncastNode := range g.NodesByKind(deploygraph.DeploymentConfigNodeKind) { + if excludeNodeIDs.Has(uncastNode.ID()) { + continue + } + + pipeline, covers := NewDeploymentConfigPipeline(g, uncastNode.(*deploygraph.DeploymentConfigNode)) + covered.Insert(covers.List()...) + dcPipelines = append(dcPipelines, pipeline) + } + + sort.Sort(SortedDeploymentConfigPipeline(dcPipelines)) + return dcPipelines, covered +} + +// NewDeploymentConfigPipeline returns the DeploymentConfigPipeline and a set of all the NodeIDs covered by the DeploymentConfigPipeline +func NewDeploymentConfigPipeline(g osgraph.Graph, dcNode *deploygraph.DeploymentConfigNode) (DeploymentConfigPipeline, IntSet) { + covered := IntSet{} + covered.Insert(dcNode.ID()) + + dcPipeline := DeploymentConfigPipeline{} + dcPipeline.Deployment = dcNode + + // for everything that can trigger a deployment, create an image pipeline and add it to the list + for _, istNode := range g.PredecessorNodesByEdgeKind(dcNode, deployedges.TriggersDeploymentEdgeKind) { + imagePipeline, covers := NewImagePipelineFromImageTagLocation(g, istNode, istNode.(ImageTagLocation)) + + covered.Insert(covers.List()...) + dcPipeline.Images = append(dcPipeline.Images, imagePipeline) + } + + // for image that we use, create an image pipeline and add it to the list + for _, tagNode := range g.PredecessorNodesByEdgeKind(dcNode, deployedges.UsedInDeploymentEdgeKind) { + imagePipeline, covers := NewImagePipelineFromImageTagLocation(g, tagNode, tagNode.(ImageTagLocation)) + + covered.Insert(covers.List()...) + dcPipeline.Images = append(dcPipeline.Images, imagePipeline) + } + + dcPipeline.ActiveDeployment, dcPipeline.InactiveDeployments = deployedges.RelevantDeployments(g, dcNode) + for _, rc := range dcPipeline.InactiveDeployments { + _, covers := NewReplicationController(g, rc) + covered.Insert(covers.List()...) + } + + if dcPipeline.ActiveDeployment != nil { + _, covers := NewReplicationController(g, dcPipeline.ActiveDeployment) + covered.Insert(covers.List()...) + } + + return dcPipeline, covered +} + +type SortedDeploymentConfigPipeline []DeploymentConfigPipeline + +func (m SortedDeploymentConfigPipeline) Len() int { return len(m) } +func (m SortedDeploymentConfigPipeline) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m SortedDeploymentConfigPipeline) Less(i, j int) bool { + return CompareObjectMeta(&m[i].Deployment.DeploymentConfig.ObjectMeta, &m[j].Deployment.DeploymentConfig.ObjectMeta) +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/graphview/image_pipeline.go b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/image_pipeline.go new file mode 100644 index 00000000..4eecd9b9 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/image_pipeline.go @@ -0,0 +1,240 @@ +package graphview + +import ( + "sort" + + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + buildedges "github.com/openshift/origin/pkg/build/graph" + buildgraph "github.com/openshift/origin/pkg/build/graph/nodes" + imageedges "github.com/openshift/origin/pkg/image/graph" + imagegraph "github.com/openshift/origin/pkg/image/graph/nodes" +) + +// ImagePipeline represents a build, its output, and any inputs. The input +// to a build may be another ImagePipeline. +type ImagePipeline struct { + Image ImageTagLocation + DestinationResolved bool + ScheduledImport bool + + Build *buildgraph.BuildConfigNode + + LastSuccessfulBuild *buildgraph.BuildNode + LastUnsuccessfulBuild *buildgraph.BuildNode + ActiveBuilds []*buildgraph.BuildNode + + // If set, the base image used by the build + BaseImage ImageTagLocation + // if set, the build config names that produces the base image + BaseBuilds []string + // If set, the source repository that inputs to the build + Source SourceLocation +} + +// ImageTagLocation identifies the source or destination of an image. Represents +// both a tag in a Docker image repository, as well as a tag in an OpenShift image stream. +type ImageTagLocation interface { + ID() int + ImageSpec() string + ImageTag() string +} + +// SourceLocation identifies a repository that is an input to a build. +type SourceLocation interface { + ID() int +} + +func AllImagePipelinesFromBuildConfig(g osgraph.Graph, excludeNodeIDs IntSet) ([]ImagePipeline, IntSet) { + covered := IntSet{} + pipelines := []ImagePipeline{} + + for _, uncastNode := range g.NodesByKind(buildgraph.BuildConfigNodeKind) { + if excludeNodeIDs.Has(uncastNode.ID()) { + continue + } + + pipeline, covers := NewImagePipelineFromBuildConfigNode(g, uncastNode.(*buildgraph.BuildConfigNode)) + covered.Insert(covers.List()...) + pipelines = append(pipelines, pipeline) + } + + sort.Sort(SortedImagePipelines(pipelines)) + + outputImageToBCMap := make(map[string][]string) + for _, pipeline := range pipelines { + // note, bc does not have to have an output image + if pipeline.Image != nil { + bcs, ok := outputImageToBCMap[pipeline.Image.ImageSpec()] + if !ok { + bcs = []string{} + } + bcs = append(bcs, pipeline.Build.BuildConfig.Name) + outputImageToBCMap[pipeline.Image.ImageSpec()] = bcs + } + } + + if len(outputImageToBCMap) > 0 { + for i, pipeline := range pipelines { + // note, bc does not have to have an input strategy image + if pipeline.BaseImage != nil { + baseBCs, ok := outputImageToBCMap[pipeline.BaseImage.ImageSpec()] + if ok && len(baseBCs) > 0 { + pipelines[i].BaseBuilds = baseBCs + } + } + } + } + + return pipelines, covered +} + +// NewImagePipeline attempts to locate a build flow from the provided node. If no such +// build flow can be located, false is returned. +func NewImagePipelineFromBuildConfigNode(g osgraph.Graph, bcNode *buildgraph.BuildConfigNode) (ImagePipeline, IntSet) { + covered := IntSet{} + covered.Insert(bcNode.ID()) + + flow := ImagePipeline{} + + base, src, coveredInputs, scheduled, _ := findBuildInputs(g, bcNode) + covered.Insert(coveredInputs.List()...) + flow.BaseImage = base + flow.Source = src + flow.Build = bcNode + flow.ScheduledImport = scheduled + flow.LastSuccessfulBuild, flow.LastUnsuccessfulBuild, flow.ActiveBuilds = buildedges.RelevantBuilds(g, flow.Build) + flow.Image = findBuildOutput(g, bcNode) + + // we should have at most one + for _, buildOutputNode := range g.SuccessorNodesByEdgeKind(bcNode, buildedges.BuildOutputEdgeKind) { + // this will handle the imagestream tag case + for _, input := range g.SuccessorNodesByEdgeKind(buildOutputNode, imageedges.ReferencedImageStreamGraphEdgeKind) { + imageStreamNode := input.(*imagegraph.ImageStreamNode) + + flow.DestinationResolved = (len(imageStreamNode.Status.DockerImageRepository) != 0) + } + // this will handle the imagestream image case + for _, input := range g.SuccessorNodesByEdgeKind(buildOutputNode, imageedges.ReferencedImageStreamImageGraphEdgeKind) { + imageStreamNode := input.(*imagegraph.ImageStreamNode) + + flow.DestinationResolved = (len(imageStreamNode.Status.DockerImageRepository) != 0) + } + + // TODO handle the DockerImage case + } + + return flow, covered +} + +// NewImagePipelineFromImageTagLocation returns the ImagePipeline and all the nodes contributing to it +func NewImagePipelineFromImageTagLocation(g osgraph.Graph, node graph.Node, imageTagLocation ImageTagLocation) (ImagePipeline, IntSet) { + covered := IntSet{} + covered.Insert(node.ID()) + + flow := ImagePipeline{} + flow.Image = imageTagLocation + + for _, input := range g.PredecessorNodesByEdgeKind(node, buildedges.BuildOutputEdgeKind) { + covered.Insert(input.ID()) + build := input.(*buildgraph.BuildConfigNode) + if flow.Build != nil { + // report this as an error (unexpected duplicate input build) + } + if build.BuildConfig == nil { + // report this as as a missing build / broken link + break + } + + base, src, coveredInputs, scheduled, _ := findBuildInputs(g, build) + covered.Insert(coveredInputs.List()...) + flow.BaseImage = base + flow.Source = src + flow.Build = build + flow.ScheduledImport = scheduled + flow.LastSuccessfulBuild, flow.LastUnsuccessfulBuild, flow.ActiveBuilds = buildedges.RelevantBuilds(g, flow.Build) + } + + for _, input := range g.SuccessorNodesByEdgeKind(node, imageedges.ReferencedImageStreamGraphEdgeKind) { + covered.Insert(input.ID()) + imageStreamNode := input.(*imagegraph.ImageStreamNode) + + flow.DestinationResolved = (len(imageStreamNode.Status.DockerImageRepository) != 0) + } + for _, input := range g.SuccessorNodesByEdgeKind(node, imageedges.ReferencedImageStreamImageGraphEdgeKind) { + covered.Insert(input.ID()) + imageStreamNode := input.(*imagegraph.ImageStreamNode) + + flow.DestinationResolved = (len(imageStreamNode.Status.DockerImageRepository) != 0) + } + + return flow, covered +} + +func findBuildInputs(g osgraph.Graph, bcNode *buildgraph.BuildConfigNode) (base ImageTagLocation, source SourceLocation, covered IntSet, scheduled bool, err error) { + covered = IntSet{} + + // find inputs to the build + for _, input := range g.PredecessorNodesByEdgeKind(bcNode, buildedges.BuildInputEdgeKind) { + if source != nil { + // report this as an error (unexpected duplicate source) + } + covered.Insert(input.ID()) + source = input.(SourceLocation) + } + for _, input := range g.PredecessorNodesByEdgeKind(bcNode, buildedges.BuildInputImageEdgeKind) { + if base != nil { + // report this as an error (unexpected duplicate input build) + } + covered.Insert(input.ID()) + base = input.(ImageTagLocation) + scheduled = imageStreamTagScheduled(g, input, base) + } + + return +} + +func findBuildOutput(g osgraph.Graph, bcNode *buildgraph.BuildConfigNode) (result ImageTagLocation) { + for _, output := range g.SuccessorNodesByEdgeKind(bcNode, buildedges.BuildOutputEdgeKind) { + result = output.(ImageTagLocation) + return + } + return +} + +func imageStreamTagScheduled(g osgraph.Graph, input graph.Node, base ImageTagLocation) (scheduled bool) { + for _, uncastImageStreamNode := range g.SuccessorNodesByEdgeKind(input, imageedges.ReferencedImageStreamGraphEdgeKind) { + imageStreamNode := uncastImageStreamNode.(*imagegraph.ImageStreamNode) + if imageStreamNode.ImageStream != nil { + if tag, ok := imageStreamNode.ImageStream.Spec.Tags[base.ImageTag()]; ok { + scheduled = tag.ImportPolicy.Scheduled + return + } + } + } + return +} + +type SortedImagePipelines []ImagePipeline + +func (m SortedImagePipelines) Len() int { return len(m) } +func (m SortedImagePipelines) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m SortedImagePipelines) Less(i, j int) bool { + return CompareImagePipeline(&m[i], &m[j]) +} + +func CompareImagePipeline(a, b *ImagePipeline) bool { + switch { + case a.Build != nil && b.Build != nil && a.Build.BuildConfig != nil && b.Build.BuildConfig != nil: + return CompareObjectMeta(&a.Build.BuildConfig.ObjectMeta, &b.Build.BuildConfig.ObjectMeta) + case a.Build != nil && a.Build.BuildConfig != nil: + return true + case b.Build != nil && b.Build.BuildConfig != nil: + return false + } + if a.Image == nil || b.Image == nil { + return true + } + return a.Image.ImageSpec() < b.Image.ImageSpec() +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/graphview/intset.go b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/intset.go new file mode 100644 index 00000000..b5f76d5c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/intset.go @@ -0,0 +1,46 @@ +package graphview + +import ( + "sort" + + "k8s.io/kubernetes/pkg/util/sets" +) + +type IntSet map[int]sets.Empty + +// NewIntSet creates a IntSet from a list of values. +func NewIntSet(items ...int) IntSet { + ss := IntSet{} + ss.Insert(items...) + return ss +} + +// Insert adds items to the set. +func (s IntSet) Insert(items ...int) { + for _, item := range items { + s[item] = sets.Empty{} + } +} + +// Delete removes all items from the set. +func (s IntSet) Delete(items ...int) { + for _, item := range items { + delete(s, item) + } +} + +// Has returns true iff item is contained in the set. +func (s IntSet) Has(item int) bool { + _, contained := s[item] + return contained +} + +// List returns the contents as a sorted string slice. +func (s IntSet) List() []int { + res := make([]int, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.IntSlice(res).Sort() + return res +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/graphview/petset.go b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/petset.go new file mode 100644 index 00000000..b06d76f5 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/petset.go @@ -0,0 +1,51 @@ +package graphview + +import ( + osgraph "github.com/openshift/origin/pkg/api/graph" + kubeedges "github.com/openshift/origin/pkg/api/kubegraph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" +) + +type PetSet struct { + PetSet *kubegraph.PetSetNode + + OwnedPods []*kubegraph.PodNode + CreatedPods []*kubegraph.PodNode + + // TODO: handle conflicting once controller refs are present, not worth it yet +} + +// AllPetSets returns all the PetSets that aren't in the excludes set and the set of covered NodeIDs +func AllPetSets(g osgraph.Graph, excludeNodeIDs IntSet) ([]PetSet, IntSet) { + covered := IntSet{} + views := []PetSet{} + + for _, uncastNode := range g.NodesByKind(kubegraph.PetSetNodeKind) { + if excludeNodeIDs.Has(uncastNode.ID()) { + continue + } + + view, covers := NewPetSet(g, uncastNode.(*kubegraph.PetSetNode)) + covered.Insert(covers.List()...) + views = append(views, view) + } + + return views, covered +} + +// NewPetSet returns the PetSet and a set of all the NodeIDs covered by the PetSet +func NewPetSet(g osgraph.Graph, node *kubegraph.PetSetNode) (PetSet, IntSet) { + covered := IntSet{} + covered.Insert(node.ID()) + + view := PetSet{} + view.PetSet = node + + for _, uncastPodNode := range g.PredecessorNodesByEdgeKind(node, kubeedges.ManagedByControllerEdgeKind) { + podNode := uncastPodNode.(*kubegraph.PodNode) + covered.Insert(podNode.ID()) + view.OwnedPods = append(view.OwnedPods, podNode) + } + + return view, covered +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/graphview/pod.go b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/pod.go new file mode 100644 index 00000000..e0d09bbf --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/pod.go @@ -0,0 +1,39 @@ +package graphview + +import ( + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" +) + +type Pod struct { + Pod *kubegraph.PodNode +} + +// AllPods returns all Pods and the set of covered NodeIDs +func AllPods(g osgraph.Graph, excludeNodeIDs IntSet) ([]Pod, IntSet) { + covered := IntSet{} + pods := []Pod{} + + for _, uncastNode := range g.NodesByKind(kubegraph.PodNodeKind) { + if excludeNodeIDs.Has(uncastNode.ID()) { + continue + } + + pod, covers := NewPod(g, uncastNode.(*kubegraph.PodNode)) + covered.Insert(covers.List()...) + pods = append(pods, pod) + } + + return pods, covered +} + +// NewPod returns the Pod and a set of all the NodeIDs covered by the Pod +func NewPod(g osgraph.Graph, podNode *kubegraph.PodNode) (Pod, IntSet) { + covered := IntSet{} + covered.Insert(podNode.ID()) + + podView := Pod{} + podView.Pod = podNode + + return podView, covered +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/graphview/rc.go b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/rc.go new file mode 100644 index 00000000..59d57dec --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/rc.go @@ -0,0 +1,100 @@ +package graphview + +import ( + "k8s.io/kubernetes/pkg/api/unversioned" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubeedges "github.com/openshift/origin/pkg/api/kubegraph" + "github.com/openshift/origin/pkg/api/kubegraph/analysis" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" +) + +type ReplicationController struct { + RC *kubegraph.ReplicationControllerNode + + OwnedPods []*kubegraph.PodNode + CreatedPods []*kubegraph.PodNode + + ConflictingRCs []*kubegraph.ReplicationControllerNode + ConflictingRCIDToPods map[int][]*kubegraph.PodNode +} + +// AllReplicationControllers returns all the ReplicationControllers that aren't in the excludes set and the set of covered NodeIDs +func AllReplicationControllers(g osgraph.Graph, excludeNodeIDs IntSet) ([]ReplicationController, IntSet) { + covered := IntSet{} + rcViews := []ReplicationController{} + + for _, uncastNode := range g.NodesByKind(kubegraph.ReplicationControllerNodeKind) { + if excludeNodeIDs.Has(uncastNode.ID()) { + continue + } + + rcView, covers := NewReplicationController(g, uncastNode.(*kubegraph.ReplicationControllerNode)) + covered.Insert(covers.List()...) + rcViews = append(rcViews, rcView) + } + + return rcViews, covered +} + +// MaxRecentContainerRestarts returns the maximum container restarts for all pods in +// replication controller. +func (rc *ReplicationController) MaxRecentContainerRestarts() int32 { + var maxRestarts int32 + for _, pod := range rc.OwnedPods { + for _, status := range pod.Status.ContainerStatuses { + if status.RestartCount > maxRestarts && analysis.ContainerRestartedRecently(status, unversioned.Now()) { + maxRestarts = status.RestartCount + } + } + } + return maxRestarts +} + +// NewReplicationController returns the ReplicationController and a set of all the NodeIDs covered by the ReplicationController +func NewReplicationController(g osgraph.Graph, rcNode *kubegraph.ReplicationControllerNode) (ReplicationController, IntSet) { + covered := IntSet{} + covered.Insert(rcNode.ID()) + + rcView := ReplicationController{} + rcView.RC = rcNode + rcView.ConflictingRCIDToPods = map[int][]*kubegraph.PodNode{} + + for _, uncastPodNode := range g.PredecessorNodesByEdgeKind(rcNode, kubeedges.ManagedByControllerEdgeKind) { + podNode := uncastPodNode.(*kubegraph.PodNode) + covered.Insert(podNode.ID()) + rcView.OwnedPods = append(rcView.OwnedPods, podNode) + + // check to see if this pod is managed by more than one RC + uncastOwningRCs := g.SuccessorNodesByEdgeKind(podNode, kubeedges.ManagedByControllerEdgeKind) + if len(uncastOwningRCs) > 1 { + for _, uncastOwningRC := range uncastOwningRCs { + if uncastOwningRC.ID() == rcNode.ID() { + continue + } + + conflictingRC := uncastOwningRC.(*kubegraph.ReplicationControllerNode) + rcView.ConflictingRCs = append(rcView.ConflictingRCs, conflictingRC) + + conflictingPods, ok := rcView.ConflictingRCIDToPods[conflictingRC.ID()] + if !ok { + conflictingPods = []*kubegraph.PodNode{} + } + conflictingPods = append(conflictingPods, podNode) + rcView.ConflictingRCIDToPods[conflictingRC.ID()] = conflictingPods + } + } + } + + return rcView, covered +} + +// MaxRecentContainerRestartsForRC returns the maximum container restarts in pods +// in the replication controller node for the last 10 minutes. +func MaxRecentContainerRestartsForRC(g osgraph.Graph, rcNode *kubegraph.ReplicationControllerNode) int32 { + if rcNode == nil { + return 0 + } + rc, _ := NewReplicationController(g, rcNode) + return rc.MaxRecentContainerRestarts() +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/graphview/service_group.go b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/service_group.go new file mode 100644 index 00000000..5706dbc4 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/graphview/service_group.go @@ -0,0 +1,134 @@ +package graphview + +import ( + "fmt" + "sort" + + kapi "k8s.io/kubernetes/pkg/api" + utilruntime "k8s.io/kubernetes/pkg/util/runtime" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubeedges "github.com/openshift/origin/pkg/api/kubegraph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + deploygraph "github.com/openshift/origin/pkg/deploy/graph/nodes" + routeedges "github.com/openshift/origin/pkg/route/graph" + routegraph "github.com/openshift/origin/pkg/route/graph/nodes" +) + +// ServiceGroup is a service, the DeploymentConfigPipelines it covers, and lists of the other nodes that fulfill it +type ServiceGroup struct { + Service *kubegraph.ServiceNode + + DeploymentConfigPipelines []DeploymentConfigPipeline + ReplicationControllers []ReplicationController + PetSets []PetSet + + // TODO: this has to stop + FulfillingPetSets []*kubegraph.PetSetNode + FulfillingDCs []*deploygraph.DeploymentConfigNode + FulfillingRCs []*kubegraph.ReplicationControllerNode + FulfillingPods []*kubegraph.PodNode + + ExposingRoutes []*routegraph.RouteNode +} + +// AllServiceGroups returns all the ServiceGroups that aren't in the excludes set and the set of covered NodeIDs +func AllServiceGroups(g osgraph.Graph, excludeNodeIDs IntSet) ([]ServiceGroup, IntSet) { + covered := IntSet{} + services := []ServiceGroup{} + + for _, uncastNode := range g.NodesByKind(kubegraph.ServiceNodeKind) { + if excludeNodeIDs.Has(uncastNode.ID()) { + continue + } + + service, covers := NewServiceGroup(g, uncastNode.(*kubegraph.ServiceNode)) + covered.Insert(covers.List()...) + services = append(services, service) + } + + sort.Sort(ServiceGroupByObjectMeta(services)) + return services, covered +} + +// NewServiceGroup returns the ServiceGroup and a set of all the NodeIDs covered by the service +func NewServiceGroup(g osgraph.Graph, serviceNode *kubegraph.ServiceNode) (ServiceGroup, IntSet) { + covered := IntSet{} + covered.Insert(serviceNode.ID()) + + service := ServiceGroup{} + service.Service = serviceNode + + for _, uncastServiceFulfiller := range g.PredecessorNodesByEdgeKind(serviceNode, kubeedges.ExposedThroughServiceEdgeKind) { + container := osgraph.GetTopLevelContainerNode(g, uncastServiceFulfiller) + + switch castContainer := container.(type) { + case *deploygraph.DeploymentConfigNode: + service.FulfillingDCs = append(service.FulfillingDCs, castContainer) + case *kubegraph.ReplicationControllerNode: + service.FulfillingRCs = append(service.FulfillingRCs, castContainer) + case *kubegraph.PodNode: + service.FulfillingPods = append(service.FulfillingPods, castContainer) + case *kubegraph.PetSetNode: + service.FulfillingPetSets = append(service.FulfillingPetSets, castContainer) + default: + utilruntime.HandleError(fmt.Errorf("unrecognized container: %v", castContainer)) + } + } + + for _, uncastServiceFulfiller := range g.PredecessorNodesByEdgeKind(serviceNode, routeedges.ExposedThroughRouteEdgeKind) { + container := osgraph.GetTopLevelContainerNode(g, uncastServiceFulfiller) + + switch castContainer := container.(type) { + case *routegraph.RouteNode: + service.ExposingRoutes = append(service.ExposingRoutes, castContainer) + default: + utilruntime.HandleError(fmt.Errorf("unrecognized container: %v", castContainer)) + } + } + + // add the DCPipelines for all the DCs that fulfill the service + for _, fulfillingDC := range service.FulfillingDCs { + dcPipeline, dcCovers := NewDeploymentConfigPipeline(g, fulfillingDC) + + covered.Insert(dcCovers.List()...) + service.DeploymentConfigPipelines = append(service.DeploymentConfigPipelines, dcPipeline) + } + + for _, fulfillingRC := range service.FulfillingRCs { + rcView, rcCovers := NewReplicationController(g, fulfillingRC) + + covered.Insert(rcCovers.List()...) + service.ReplicationControllers = append(service.ReplicationControllers, rcView) + } + + for _, fulfillingPetSet := range service.FulfillingPetSets { + view, covers := NewPetSet(g, fulfillingPetSet) + + covered.Insert(covers.List()...) + service.PetSets = append(service.PetSets, view) + } + + for _, fulfillingPod := range service.FulfillingPods { + _, podCovers := NewPod(g, fulfillingPod) + covered.Insert(podCovers.List()...) + } + + return service, covered +} + +type ServiceGroupByObjectMeta []ServiceGroup + +func (m ServiceGroupByObjectMeta) Len() int { return len(m) } +func (m ServiceGroupByObjectMeta) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m ServiceGroupByObjectMeta) Less(i, j int) bool { + a, b := m[i], m[j] + return CompareObjectMeta(&a.Service.Service.ObjectMeta, &b.Service.Service.ObjectMeta) +} + +func CompareObjectMeta(a, b *kapi.ObjectMeta) bool { + if a.Namespace == b.Namespace { + return a.Name < b.Name + } + return a.Namespace < b.Namespace +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/interfaces.go b/vendor/github.com/openshift/origin/pkg/api/graph/interfaces.go new file mode 100644 index 00000000..d59c0026 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/interfaces.go @@ -0,0 +1,134 @@ +package graph + +import ( + "github.com/gonum/graph" +) + +// Marker is a struct that describes something interesting on a Node +type Marker struct { + // Node is the optional node that this message is attached to + Node graph.Node + // RelatedNodes is an optional list of other nodes that are involved in this marker. + RelatedNodes []graph.Node + + // Severity indicates how important this problem is. + Severity Severity + // Key is a short string to identify this message + Key string + + // Message is a human-readable string that describes what is interesting + Message string + // Suggestion is a human-readable string that holds advice for resolving this + // marker. + Suggestion Suggestion +} + +// Severity indicates how important this problem is. +type Severity string + +const ( + // InfoSeverity is interesting + // TODO: Consider what to do with this once we revisit the graph api - currently not used. + InfoSeverity Severity = "info" + // WarningSeverity is probably wrong, but we aren't certain + WarningSeverity Severity = "warning" + // ErrorSeverity is definitely wrong, this won't work + ErrorSeverity Severity = "error" +) + +type Markers []Marker + +// MarkerScanner is a function for analyzing a graph and finding interesting things in it +type MarkerScanner func(g Graph, f Namer) []Marker + +func (m Markers) BySeverity(severity Severity) []Marker { + ret := []Marker{} + for i := range m { + if m[i].Severity == severity { + ret = append(ret, m[i]) + } + } + + return ret +} + +// FilterByNamespace returns all the markers that are not associated with missing nodes +// from other namespaces (other than the provided namespace). +func (m Markers) FilterByNamespace(namespace string) Markers { + filtered := Markers{} + + for i := range m { + markerNodes := []graph.Node{} + markerNodes = append(markerNodes, m[i].Node) + markerNodes = append(markerNodes, m[i].RelatedNodes...) + hasCrossNamespaceLink := false + for _, node := range markerNodes { + if IsFromDifferentNamespace(namespace, node) { + hasCrossNamespaceLink = true + break + } + } + if !hasCrossNamespaceLink { + filtered = append(filtered, m[i]) + } + } + + return filtered +} + +type BySeverity []Marker + +func (m BySeverity) Len() int { return len(m) } +func (m BySeverity) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m BySeverity) Less(i, j int) bool { + lhs := m[i] + rhs := m[j] + + switch lhs.Severity { + case ErrorSeverity: + switch rhs.Severity { + case ErrorSeverity: + return false + } + case WarningSeverity: + switch rhs.Severity { + case ErrorSeverity, WarningSeverity: + return false + } + case InfoSeverity: + switch rhs.Severity { + case ErrorSeverity, WarningSeverity, InfoSeverity: + return false + } + } + + return true +} + +type ByNodeID []Marker + +func (m ByNodeID) Len() int { return len(m) } +func (m ByNodeID) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m ByNodeID) Less(i, j int) bool { + if m[i].Node == nil { + return true + } + if m[j].Node == nil { + return false + } + return m[i].Node.ID() < m[j].Node.ID() +} + +type ByKey []Marker + +func (m ByKey) Len() int { return len(m) } +func (m ByKey) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m ByKey) Less(i, j int) bool { + return m[i].Key < m[j].Key +} + +type Suggestion string + +func (s Suggestion) String() string { + return string(s) +} diff --git a/vendor/github.com/openshift/origin/pkg/api/graph/types.go b/vendor/github.com/openshift/origin/pkg/api/graph/types.go new file mode 100644 index 00000000..1bb6622b --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/graph/types.go @@ -0,0 +1,69 @@ +package graph + +import ( + "fmt" + + "github.com/gonum/graph" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/runtime" +) + +const ( + UnknownNodeKind = "UnknownNode" +) + +const ( + UnknownEdgeKind = "UnknownEdge" + // ReferencedByEdgeKind is the kind to use if you're building reverse links that don't have a specific edge in the other direction + // other uses are discouraged. You should create a kind for your edge + ReferencedByEdgeKind = "ReferencedBy" + // ContainsEdgeKind is the kind to use if one node's contents logically contain another node's contents. A given node can only have + // a single inbound Contais edge. The code does not prevent contains cycles, but that's insane, don't do that. + ContainsEdgeKind = "Contains" +) + +func GetUniqueRuntimeObjectNodeName(nodeKind string, obj runtime.Object) UniqueName { + meta, err := kapi.ObjectMetaFor(obj) + if err != nil { + panic(err) + } + + return UniqueName(fmt.Sprintf("%s|%s/%s", nodeKind, meta.Namespace, meta.Name)) +} + +// GetTopLevelContainerNode traverses the reverse ContainsEdgeKind edges until it finds a node +// that does not have an inbound ContainsEdgeKind edge. This could be the node itself +func GetTopLevelContainerNode(g Graph, containedNode graph.Node) graph.Node { + // my kingdom for a LinkedHashSet + visited := map[int]bool{} + prevContainingNode := containedNode + + for { + visited[prevContainingNode.ID()] = true + currContainingNode := GetContainingNode(g, prevContainingNode) + + if currContainingNode == nil { + return prevContainingNode + } + if _, alreadyVisited := visited[currContainingNode.ID()]; alreadyVisited { + panic(fmt.Sprintf("contains cycle in %v", visited)) + } + + prevContainingNode = currContainingNode + } +} + +// GetContainingNode returns the direct predecessor that is linked to the node by a ContainsEdgeKind. It returns +// nil if no container is found. +func GetContainingNode(g Graph, containedNode graph.Node) graph.Node { + for _, node := range g.To(containedNode) { + edge := g.Edge(node, containedNode) + + if g.EdgeKinds(edge).Has(ContainsEdgeKind) { + return node + } + } + + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/hpa.go b/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/hpa.go new file mode 100644 index 00000000..30ff94e0 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/hpa.go @@ -0,0 +1,180 @@ +package analysis + +import ( + "fmt" + "strings" + + "k8s.io/kubernetes/pkg/util/sets" + + graphapi "github.com/gonum/graph" + "github.com/gonum/graph/path" + + osgraph "github.com/openshift/origin/pkg/api/graph" + "github.com/openshift/origin/pkg/api/kubegraph" + kubenodes "github.com/openshift/origin/pkg/api/kubegraph/nodes" + deploygraph "github.com/openshift/origin/pkg/deploy/graph" + deploynodes "github.com/openshift/origin/pkg/deploy/graph/nodes" +) + +const ( + // HPAMissingScaleRefError denotes an error where a Horizontal Pod Autoscaler does not have a reference to an object to scale + HPAMissingScaleRefError = "HPAMissingScaleRef" + // HPAMissingCPUTargetError denotes an error where a Horizontal Pod Autoscaler does not have a CPU target to scale by. + // Currently, the only supported scale metric is CPU utilization, so without this metric an HPA is useless. + HPAMissingCPUTargetError = "HPAMissingCPUTarget" + // HPAOverlappingScaleRefWarning denotes a warning where a Horizontal Pod Autoscaler scales an object that is scaled by some other object as well + HPAOverlappingScaleRefWarning = "HPAOverlappingScaleRef" +) + +// FindHPASpecsMissingCPUTargets scans the graph in search of HorizontalPodAutoscalers that are missing a CPU utilization target. +// As of right now, the only metric that HPAs can use to scale pods is the CPU utilization, so if a HPA is missing this target it +// is effectively useless. +func FindHPASpecsMissingCPUTargets(graph osgraph.Graph, namer osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastNode := range graph.NodesByKind(kubenodes.HorizontalPodAutoscalerNodeKind) { + node := uncastNode.(*kubenodes.HorizontalPodAutoscalerNode) + + if node.HorizontalPodAutoscaler.Spec.TargetCPUUtilizationPercentage == nil { + markers = append(markers, osgraph.Marker{ + Node: node, + Severity: osgraph.ErrorSeverity, + Key: HPAMissingCPUTargetError, + Message: fmt.Sprintf("%s is missing a CPU utilization target", namer.ResourceName(node)), + Suggestion: osgraph.Suggestion(fmt.Sprintf(`oc patch %s -p '{"spec":{"targetCPUUtilizationPercentage": 80}}'`, namer.ResourceName(node))), + }) + } + } + + return markers +} + +// FindHPASpecsMissingScaleRefs finds all Horizontal Pod Autoscalers whose scale reference points to an object that doesn't exist +// or that the client does not have the permission to see. +func FindHPASpecsMissingScaleRefs(graph osgraph.Graph, namer osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastNode := range graph.NodesByKind(kubenodes.HorizontalPodAutoscalerNodeKind) { + node := uncastNode.(*kubenodes.HorizontalPodAutoscalerNode) + + scaledObjects := graph.SuccessorNodesByEdgeKind( + uncastNode, + kubegraph.ScalingEdgeKind, + ) + + if len(scaledObjects) < 1 { + markers = append(markers, createMissingScaleRefMarker(node, nil, namer)) + continue + } + + for _, scaleRef := range scaledObjects { + if existenceChecker, ok := scaleRef.(osgraph.ExistenceChecker); ok && !existenceChecker.Found() { + // if this node is synthetic, we can't be sure that the HPA is scaling something that actually exists + markers = append(markers, createMissingScaleRefMarker(node, scaleRef, namer)) + } + } + } + + return markers +} + +func createMissingScaleRefMarker(hpaNode *kubenodes.HorizontalPodAutoscalerNode, scaleRef graphapi.Node, namer osgraph.Namer) osgraph.Marker { + return osgraph.Marker{ + Node: hpaNode, + Severity: osgraph.ErrorSeverity, + RelatedNodes: []graphapi.Node{scaleRef}, + Key: HPAMissingScaleRefError, + Message: fmt.Sprintf("%s is attempting to scale %s/%s, which doesn't exist", + namer.ResourceName(hpaNode), + hpaNode.HorizontalPodAutoscaler.Spec.ScaleTargetRef.Kind, + hpaNode.HorizontalPodAutoscaler.Spec.ScaleTargetRef.Name, + ), + } +} + +// FindOverlappingHPAs scans the graph in search of HorizontalPodAutoscalers that are attempting to scale the same set of pods. +// This can occur in two ways: +// - 1. label selectors for two ReplicationControllers/DeploymentConfigs/etc overlap +// - 2. multiple HorizontalPodAutoscalers are attempting to scale the same ReplicationController/DeploymentConfig/etc +// Case 1 is handled by deconflicting the area of influence of ReplicationControllers/DeploymentConfigs/etc, and therefore we +// can assume that it will be handled before this step. Therefore, we are only concerned with finding HPAs that are trying to +// scale the same resources. +// +// The algorithm that is used to implement this check is described as follows: +// - create a sub-graph containing only HPA nodes and other nodes that can be scaled, as well as any scaling edges or other +// edges used to connect between objects that can be scaled +// - for every resulting edge in the new sub-graph, create an edge in the reverse direction +// - find the shortest paths between all HPA nodes in the graph +// - shortest paths connecting two horizontal pod autoscalers are used to create markers for the graph +func FindOverlappingHPAs(graph osgraph.Graph, namer osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + nodeFilter := osgraph.NodesOfKind( + kubenodes.HorizontalPodAutoscalerNodeKind, + kubenodes.ReplicationControllerNodeKind, + deploynodes.DeploymentConfigNodeKind, + ) + edgeFilter := osgraph.EdgesOfKind( + kubegraph.ScalingEdgeKind, + deploygraph.DeploymentEdgeKind, + ) + + hpaSubGraph := graph.Subgraph(nodeFilter, edgeFilter) + for _, edge := range hpaSubGraph.Edges() { + osgraph.AddReversedEdge(hpaSubGraph, edge.From(), edge.To(), sets.NewString()) + } + + hpaNodes := hpaSubGraph.NodesByKind(kubenodes.HorizontalPodAutoscalerNodeKind) + + for _, firstHPA := range hpaNodes { + // we can use Dijkstra's algorithm as we know we do not have any negative edge weights + shortestPaths := path.DijkstraFrom(firstHPA, hpaSubGraph) + + for _, secondHPA := range hpaNodes { + if firstHPA == secondHPA { + continue + } + + shortestPath, _ := shortestPaths.To(secondHPA) + + if shortestPath == nil { + // if two HPAs have no path between them, no error exists + continue + } + + markers = append(markers, osgraph.Marker{ + Node: firstHPA, + Severity: osgraph.WarningSeverity, + RelatedNodes: shortestPath[1:], + Key: HPAOverlappingScaleRefWarning, + Message: fmt.Sprintf("%s and %s overlap because they both attempt to scale %s", + namer.ResourceName(firstHPA), namer.ResourceName(secondHPA), nameList(shortestPath[1:len(shortestPath)-1], namer)), + }) + } + } + + return markers +} + +// nameList outputs a nicely-formatted list of names: +// - given nodes ['a', 'b', 'c'], this will return "one of a, b, or c" +// - given nodes ['a', 'b'], this will return "a or b" +// - given nodes ['a'], this will return "a" +func nameList(nodes []graphapi.Node, namer osgraph.Namer) string { + names := []string{} + + for _, node := range nodes { + names = append(names, namer.ResourceName(node)) + } + + switch len(names) { + case 0: + return "" + case 1: + return names[0] + case 2: + return names[0] + " or " + names[1] + default: + return "one of " + strings.Join(names[:len(names)-1], ", ") + ", or " + names[len(names)-1] + } +} diff --git a/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/pod.go b/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/pod.go new file mode 100644 index 00000000..67911204 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/pod.go @@ -0,0 +1,135 @@ +package analysis + +import ( + "fmt" + "time" + + "github.com/MakeNowJust/heredoc" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" +) + +const ( + CrashLoopingPodError = "CrashLoopingPod" + RestartingPodWarning = "RestartingPod" + + RestartThreshold = 5 + // TODO: if you change this, you must change the messages below. + RestartRecentDuration = 10 * time.Minute +) + +// exposed for testing +var nowFn = unversioned.Now + +// FindRestartingPods inspects all Pods to see if they've restarted more than the threshold. logsCommandName is the name of +// the command that should be invoked to see pod logs. securityPolicyCommandPattern is a format string accepting two replacement +// variables for fmt.Sprintf - 1, the namespace of the current pod, 2 the service account of the pod. +func FindRestartingPods(g osgraph.Graph, f osgraph.Namer, logsCommandName, securityPolicyCommandPattern string) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastPodNode := range g.NodesByKind(kubegraph.PodNodeKind) { + podNode := uncastPodNode.(*kubegraph.PodNode) + pod, ok := podNode.Object().(*kapi.Pod) + if !ok { + continue + } + + for _, containerStatus := range pod.Status.ContainerStatuses { + containerString := "" + if len(pod.Spec.Containers) > 1 { + containerString = fmt.Sprintf("container %q in ", containerStatus.Name) + } + switch { + case containerCrashLoopBackOff(containerStatus): + var suggestion string + switch { + case containerIsNonRoot(pod, containerStatus.Name): + suggestion = heredoc.Docf(` + The container is starting and exiting repeatedly. This usually means the container is unable + to start, misconfigured, or limited by security restrictions. Check the container logs with + + %s %s -c %s + + Current security policy prevents your containers from being run as the root user. Some images + may fail expecting to be able to change ownership or permissions on directories. Your admin + can grant you access to run containers that need to run as the root user with this command: + + %s + `, logsCommandName, pod.Name, containerStatus.Name, fmt.Sprintf(securityPolicyCommandPattern, pod.Namespace, pod.Spec.ServiceAccountName)) + default: + suggestion = heredoc.Docf(` + The container is starting and exiting repeatedly. This usually means the container is unable + to start, misconfigured, or limited by security restrictions. Check the container logs with + + %s %s -c %s + `, logsCommandName, pod.Name, containerStatus.Name) + } + markers = append(markers, osgraph.Marker{ + Node: podNode, + + Severity: osgraph.ErrorSeverity, + Key: CrashLoopingPodError, + Message: fmt.Sprintf("%s%s is crash-looping", containerString, + f.ResourceName(podNode)), + Suggestion: osgraph.Suggestion(suggestion), + }) + case ContainerRestartedRecently(containerStatus, nowFn()): + markers = append(markers, osgraph.Marker{ + Node: podNode, + + Severity: osgraph.WarningSeverity, + Key: RestartingPodWarning, + Message: fmt.Sprintf("%s%s has restarted within the last 10 minutes", containerString, + f.ResourceName(podNode)), + }) + case containerRestartedFrequently(containerStatus): + markers = append(markers, osgraph.Marker{ + Node: podNode, + + Severity: osgraph.WarningSeverity, + Key: RestartingPodWarning, + Message: fmt.Sprintf("%s%s has restarted %d times", containerString, + f.ResourceName(podNode), containerStatus.RestartCount), + }) + } + } + } + + return markers +} + +func containerIsNonRoot(pod *kapi.Pod, container string) bool { + for _, c := range pod.Spec.Containers { + if c.Name != container || c.SecurityContext == nil { + continue + } + switch { + case c.SecurityContext.RunAsUser != nil && *c.SecurityContext.RunAsUser != 0: + //c.SecurityContext.RunAsNonRoot != nil && *c.SecurityContext.RunAsNonRoot, + return true + } + } + return false +} + +func containerCrashLoopBackOff(status kapi.ContainerStatus) bool { + return status.State.Waiting != nil && status.State.Waiting.Reason == "CrashLoopBackOff" +} + +func ContainerRestartedRecently(status kapi.ContainerStatus, now unversioned.Time) bool { + if status.RestartCount == 0 { + return false + } + if status.LastTerminationState.Terminated != nil && now.Sub(status.LastTerminationState.Terminated.FinishedAt.Time) < RestartRecentDuration { + return true + } + return false +} + +func containerRestartedFrequently(status kapi.ContainerStatus) bool { + return status.RestartCount > RestartThreshold +} diff --git a/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/podspec.go b/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/podspec.go new file mode 100644 index 00000000..e4fb1979 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/podspec.go @@ -0,0 +1,124 @@ +package analysis + +import ( + "fmt" + + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubeedges "github.com/openshift/origin/pkg/api/kubegraph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" +) + +const ( + UnmountableSecretWarning = "UnmountableSecret" + MissingSecretWarning = "MissingSecret" +) + +// FindUnmountableSecrets inspects all PodSpecs for any Secret reference that isn't listed as mountable by the referenced ServiceAccount +func FindUnmountableSecrets(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastPodSpecNode := range g.NodesByKind(kubegraph.PodSpecNodeKind) { + podSpecNode := uncastPodSpecNode.(*kubegraph.PodSpecNode) + unmountableSecrets := CheckForUnmountableSecrets(g, podSpecNode) + + topLevelNode := osgraph.GetTopLevelContainerNode(g, podSpecNode) + topLevelString := f.ResourceName(topLevelNode) + + saString := "MISSING_SA" + saNodes := g.SuccessorNodesByEdgeKind(podSpecNode, kubeedges.ReferencedServiceAccountEdgeKind) + if len(saNodes) > 0 { + saString = f.ResourceName(saNodes[0]) + } + + for _, unmountableSecret := range unmountableSecrets { + markers = append(markers, osgraph.Marker{ + Node: podSpecNode, + RelatedNodes: []graph.Node{unmountableSecret}, + + Severity: osgraph.WarningSeverity, + Key: UnmountableSecretWarning, + Message: fmt.Sprintf("%s is attempting to mount a secret %s disallowed by %s", + topLevelString, f.ResourceName(unmountableSecret), saString), + }) + } + } + + return markers +} + +// FindMissingSecrets inspects all PodSpecs for any Secret reference that is a synthetic node (not a pre-existing node in the graph) +func FindMissingSecrets(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastPodSpecNode := range g.NodesByKind(kubegraph.PodSpecNodeKind) { + podSpecNode := uncastPodSpecNode.(*kubegraph.PodSpecNode) + missingSecrets := CheckMissingMountedSecrets(g, podSpecNode) + + topLevelNode := osgraph.GetTopLevelContainerNode(g, podSpecNode) + topLevelString := f.ResourceName(topLevelNode) + + for _, missingSecret := range missingSecrets { + markers = append(markers, osgraph.Marker{ + Node: podSpecNode, + RelatedNodes: []graph.Node{missingSecret}, + + Severity: osgraph.WarningSeverity, + Key: UnmountableSecretWarning, + Message: fmt.Sprintf("%s is attempting to mount a missing secret %s", + topLevelString, f.ResourceName(missingSecret)), + }) + } + } + + return markers +} + +// CheckForUnmountableSecrets checks to be sure that all the referenced secrets are mountable (by service account) +func CheckForUnmountableSecrets(g osgraph.Graph, podSpecNode *kubegraph.PodSpecNode) []*kubegraph.SecretNode { + saNodes := g.SuccessorNodesByNodeAndEdgeKind(podSpecNode, kubegraph.ServiceAccountNodeKind, kubeedges.ReferencedServiceAccountEdgeKind) + saMountableSecrets := []*kubegraph.SecretNode{} + + if len(saNodes) > 0 { + saNode := saNodes[0].(*kubegraph.ServiceAccountNode) + for _, secretNode := range g.SuccessorNodesByNodeAndEdgeKind(saNode, kubegraph.SecretNodeKind, kubeedges.MountableSecretEdgeKind) { + saMountableSecrets = append(saMountableSecrets, secretNode.(*kubegraph.SecretNode)) + } + } + + unmountableSecrets := []*kubegraph.SecretNode{} + + for _, uncastMountedSecretNode := range g.SuccessorNodesByNodeAndEdgeKind(podSpecNode, kubegraph.SecretNodeKind, kubeedges.MountedSecretEdgeKind) { + mountedSecretNode := uncastMountedSecretNode.(*kubegraph.SecretNode) + + mountable := false + for _, mountableSecretNode := range saMountableSecrets { + if mountableSecretNode == mountedSecretNode { + mountable = true + break + } + } + + if !mountable { + unmountableSecrets = append(unmountableSecrets, mountedSecretNode) + continue + } + } + + return unmountableSecrets +} + +// CheckMissingMountedSecrets checks to be sure that all the referenced secrets are present (not synthetic) +func CheckMissingMountedSecrets(g osgraph.Graph, podSpecNode *kubegraph.PodSpecNode) []*kubegraph.SecretNode { + missingSecrets := []*kubegraph.SecretNode{} + + for _, uncastMountedSecretNode := range g.SuccessorNodesByNodeAndEdgeKind(podSpecNode, kubegraph.SecretNodeKind, kubeedges.MountedSecretEdgeKind) { + mountedSecretNode := uncastMountedSecretNode.(*kubegraph.SecretNode) + if !mountedSecretNode.Found() { + missingSecrets = append(missingSecrets, mountedSecretNode) + } + } + + return missingSecrets +} diff --git a/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/rc.go b/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/rc.go new file mode 100644 index 00000000..a0b16443 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/kubegraph/analysis/rc.go @@ -0,0 +1,56 @@ +package analysis + +import ( + "fmt" + "strings" + + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubeedges "github.com/openshift/origin/pkg/api/kubegraph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" +) + +const ( + DuelingReplicationControllerWarning = "DuelingReplicationControllers" +) + +func FindDuelingReplicationControllers(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastRCNode := range g.NodesByKind(kubegraph.ReplicationControllerNodeKind) { + rcNode := uncastRCNode.(*kubegraph.ReplicationControllerNode) + + for _, uncastPodNode := range g.PredecessorNodesByEdgeKind(rcNode, kubeedges.ManagedByControllerEdgeKind) { + podNode := uncastPodNode.(*kubegraph.PodNode) + + // check to see if this pod is managed by more than one RC + uncastOwningRCs := g.SuccessorNodesByEdgeKind(podNode, kubeedges.ManagedByControllerEdgeKind) + if len(uncastOwningRCs) > 1 { + involvedRCNames := []string{} + relatedNodes := []graph.Node{uncastPodNode} + + for _, uncastOwningRC := range uncastOwningRCs { + if uncastOwningRC.ID() == rcNode.ID() { + continue + } + owningRC := uncastOwningRC.(*kubegraph.ReplicationControllerNode) + involvedRCNames = append(involvedRCNames, f.ResourceName(owningRC)) + + relatedNodes = append(relatedNodes, uncastOwningRC) + } + + markers = append(markers, osgraph.Marker{ + Node: rcNode, + RelatedNodes: relatedNodes, + + Severity: osgraph.WarningSeverity, + Key: DuelingReplicationControllerWarning, + Message: fmt.Sprintf("%s is competing for %s with %s", f.ResourceName(rcNode), f.ResourceName(podNode), strings.Join(involvedRCNames, ", ")), + }) + } + } + } + + return markers +} diff --git a/vendor/github.com/openshift/origin/pkg/api/kubegraph/edges.go b/vendor/github.com/openshift/origin/pkg/api/kubegraph/edges.go new file mode 100644 index 00000000..053a63fb --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/kubegraph/edges.go @@ -0,0 +1,248 @@ +package kubegraph + +import ( + "strings" + + "github.com/gonum/graph" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + deployapi "github.com/openshift/origin/pkg/deploy/api" + deploygraph "github.com/openshift/origin/pkg/deploy/graph/nodes" +) + +const ( + // ExposedThroughServiceEdgeKind goes from a PodTemplateSpec or a Pod to Service. The head should make the service's selector. + ExposedThroughServiceEdgeKind = "ExposedThroughService" + // ManagedByControllerEdgeKind goes from Pod to controller when the Pod satisfies a controller's label selector + ManagedByControllerEdgeKind = "ManagedByController" + // MountedSecretEdgeKind goes from PodSpec to Secret indicating that is or will be a request to mount a volume with the Secret. + MountedSecretEdgeKind = "MountedSecret" + // MountableSecretEdgeKind goes from ServiceAccount to Secret indicating that the SA allows the Secret to be mounted + MountableSecretEdgeKind = "MountableSecret" + // ReferencedServiceAccountEdgeKind goes from PodSpec to ServiceAccount indicating that Pod is or will be running as the SA. + ReferencedServiceAccountEdgeKind = "ReferencedServiceAccount" + // ScalingEdgeKind goes from HorizontalPodAutoscaler to scaled objects indicating that the HPA scales the object + ScalingEdgeKind = "Scaling" +) + +// AddExposedPodTemplateSpecEdges ensures that a directed edge exists between a service and all the PodTemplateSpecs +// in the graph that match the service selector +func AddExposedPodTemplateSpecEdges(g osgraph.MutableUniqueGraph, node *kubegraph.ServiceNode) { + if node.Service.Spec.Selector == nil { + return + } + query := labels.SelectorFromSet(node.Service.Spec.Selector) + for _, n := range g.(graph.Graph).Nodes() { + switch target := n.(type) { + case *kubegraph.PodTemplateSpecNode: + if target.Namespace != node.Namespace { + continue + } + + if query.Matches(labels.Set(target.PodTemplateSpec.Labels)) { + g.AddEdge(target, node, ExposedThroughServiceEdgeKind) + } + } + } +} + +// AddAllExposedPodTemplateSpecEdges calls AddExposedPodTemplateSpecEdges for every ServiceNode in the graph +func AddAllExposedPodTemplateSpecEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if serviceNode, ok := node.(*kubegraph.ServiceNode); ok { + AddExposedPodTemplateSpecEdges(g, serviceNode) + } + } +} + +// AddExposedPodEdges ensures that a directed edge exists between a service and all the pods +// in the graph that match the service selector +func AddExposedPodEdges(g osgraph.MutableUniqueGraph, node *kubegraph.ServiceNode) { + if node.Service.Spec.Selector == nil { + return + } + query := labels.SelectorFromSet(node.Service.Spec.Selector) + for _, n := range g.(graph.Graph).Nodes() { + switch target := n.(type) { + case *kubegraph.PodNode: + if target.Namespace != node.Namespace { + continue + } + if query.Matches(labels.Set(target.Labels)) { + g.AddEdge(target, node, ExposedThroughServiceEdgeKind) + } + } + } +} + +// AddAllExposedPodEdges calls AddExposedPodEdges for every ServiceNode in the graph +func AddAllExposedPodEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if serviceNode, ok := node.(*kubegraph.ServiceNode); ok { + AddExposedPodEdges(g, serviceNode) + } + } +} + +// AddManagedByControllerPodEdges ensures that a directed edge exists between a controller and all the pods +// in the graph that match the label selector +func AddManagedByControllerPodEdges(g osgraph.MutableUniqueGraph, to graph.Node, namespace string, selector map[string]string) { + if selector == nil { + return + } + query := labels.SelectorFromSet(selector) + for _, n := range g.(graph.Graph).Nodes() { + switch target := n.(type) { + case *kubegraph.PodNode: + if target.Namespace != namespace { + continue + } + if query.Matches(labels.Set(target.Labels)) { + g.AddEdge(target, to, ManagedByControllerEdgeKind) + } + } + } +} + +// AddAllManagedByControllerPodEdges calls AddManagedByControllerPodEdges for every node in the graph +// TODO: should do this through an interface (selects pods) +func AddAllManagedByControllerPodEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + switch cast := node.(type) { + case *kubegraph.ReplicationControllerNode: + AddManagedByControllerPodEdges(g, cast, cast.ReplicationController.Namespace, cast.ReplicationController.Spec.Selector) + case *kubegraph.PetSetNode: + // TODO: refactor to handle expanded selectors (along with ReplicaSets and Deployments) + AddManagedByControllerPodEdges(g, cast, cast.PetSet.Namespace, cast.PetSet.Spec.Selector.MatchLabels) + } + } +} + +func AddMountedSecretEdges(g osgraph.Graph, podSpec *kubegraph.PodSpecNode) { + //pod specs are always contained. We'll get the toplevel container so that we can pull a namespace from it + containerNode := osgraph.GetTopLevelContainerNode(g, podSpec) + containerObj := g.GraphDescriber.Object(containerNode) + + meta, err := kapi.ObjectMetaFor(containerObj.(runtime.Object)) + if err != nil { + // this should never happen. it means that a podSpec is owned by a top level container that is not a runtime.Object + panic(err) + } + + for _, volume := range podSpec.Volumes { + source := volume.VolumeSource + if source.Secret == nil { + continue + } + + // pod secrets must be in the same namespace + syntheticSecret := &kapi.Secret{} + syntheticSecret.Namespace = meta.Namespace + syntheticSecret.Name = source.Secret.SecretName + + secretNode := kubegraph.FindOrCreateSyntheticSecretNode(g, syntheticSecret) + g.AddEdge(podSpec, secretNode, MountedSecretEdgeKind) + } +} + +func AddAllMountedSecretEdges(g osgraph.Graph) { + for _, node := range g.Nodes() { + if podSpecNode, ok := node.(*kubegraph.PodSpecNode); ok { + AddMountedSecretEdges(g, podSpecNode) + } + } +} + +func AddMountableSecretEdges(g osgraph.Graph, saNode *kubegraph.ServiceAccountNode) { + for _, mountableSecret := range saNode.ServiceAccount.Secrets { + syntheticSecret := &kapi.Secret{} + syntheticSecret.Namespace = saNode.ServiceAccount.Namespace + syntheticSecret.Name = mountableSecret.Name + + secretNode := kubegraph.FindOrCreateSyntheticSecretNode(g, syntheticSecret) + g.AddEdge(saNode, secretNode, MountableSecretEdgeKind) + } +} + +func AddAllMountableSecretEdges(g osgraph.Graph) { + for _, node := range g.Nodes() { + if saNode, ok := node.(*kubegraph.ServiceAccountNode); ok { + AddMountableSecretEdges(g, saNode) + } + } +} + +func AddRequestedServiceAccountEdges(g osgraph.Graph, podSpecNode *kubegraph.PodSpecNode) { + //pod specs are always contained. We'll get the toplevel container so that we can pull a namespace from it + containerNode := osgraph.GetTopLevelContainerNode(g, podSpecNode) + containerObj := g.GraphDescriber.Object(containerNode) + + meta, err := kapi.ObjectMetaFor(containerObj.(runtime.Object)) + if err != nil { + panic(err) + } + + // if no SA name is present, admission will set 'default' + name := "default" + if len(podSpecNode.ServiceAccountName) > 0 { + name = podSpecNode.ServiceAccountName + } + + syntheticSA := &kapi.ServiceAccount{} + syntheticSA.Namespace = meta.Namespace + syntheticSA.Name = name + + saNode := kubegraph.FindOrCreateSyntheticServiceAccountNode(g, syntheticSA) + g.AddEdge(podSpecNode, saNode, ReferencedServiceAccountEdgeKind) +} + +func AddAllRequestedServiceAccountEdges(g osgraph.Graph) { + for _, node := range g.Nodes() { + if podSpecNode, ok := node.(*kubegraph.PodSpecNode); ok { + AddRequestedServiceAccountEdges(g, podSpecNode) + } + } +} + +func AddHPAScaleRefEdges(g osgraph.Graph) { + for _, node := range g.NodesByKind(kubegraph.HorizontalPodAutoscalerNodeKind) { + hpaNode := node.(*kubegraph.HorizontalPodAutoscalerNode) + + syntheticMeta := kapi.ObjectMeta{ + Name: hpaNode.HorizontalPodAutoscaler.Spec.ScaleTargetRef.Name, + Namespace: hpaNode.HorizontalPodAutoscaler.Namespace, + } + + var groupVersionResource unversioned.GroupVersionResource + resource := strings.ToLower(hpaNode.HorizontalPodAutoscaler.Spec.ScaleTargetRef.Kind) + if groupVersion, err := unversioned.ParseGroupVersion(hpaNode.HorizontalPodAutoscaler.Spec.ScaleTargetRef.APIVersion); err == nil { + groupVersionResource = groupVersion.WithResource(resource) + } else { + groupVersionResource = unversioned.GroupVersionResource{Resource: resource} + } + + groupVersionResource, err := registered.RESTMapper().ResourceFor(groupVersionResource) + if err != nil { + continue + } + + var syntheticNode graph.Node + switch groupVersionResource.GroupResource() { + case kapi.Resource("replicationcontrollers"): + syntheticNode = kubegraph.FindOrCreateSyntheticReplicationControllerNode(g, &kapi.ReplicationController{ObjectMeta: syntheticMeta}) + case deployapi.Resource("deploymentconfigs"): + syntheticNode = deploygraph.FindOrCreateSyntheticDeploymentConfigNode(g, &deployapi.DeploymentConfig{ObjectMeta: syntheticMeta}) + default: + continue + } + + g.AddEdge(hpaNode, syntheticNode, ScalingEdgeKind) + } +} diff --git a/vendor/github.com/openshift/origin/pkg/api/kubegraph/nodes/nodes.go b/vendor/github.com/openshift/origin/pkg/api/kubegraph/nodes/nodes.go new file mode 100644 index 00000000..5b7368f3 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/kubegraph/nodes/nodes.go @@ -0,0 +1,187 @@ +package nodes + +import ( + "github.com/gonum/graph" + + kapi "k8s.io/kubernetes/pkg/api" + kapps "k8s.io/kubernetes/pkg/apis/apps" + "k8s.io/kubernetes/pkg/apis/autoscaling" + + osgraph "github.com/openshift/origin/pkg/api/graph" +) + +func EnsurePodNode(g osgraph.MutableUniqueGraph, pod *kapi.Pod) *PodNode { + podNodeName := PodNodeName(pod) + podNode := osgraph.EnsureUnique(g, + podNodeName, + func(node osgraph.Node) graph.Node { + return &PodNode{node, pod} + }, + ).(*PodNode) + + podSpecNode := EnsurePodSpecNode(g, &pod.Spec, pod.Namespace, podNodeName) + g.AddEdge(podNode, podSpecNode, osgraph.ContainsEdgeKind) + + return podNode +} + +func EnsurePodSpecNode(g osgraph.MutableUniqueGraph, podSpec *kapi.PodSpec, namespace string, ownerName osgraph.UniqueName) *PodSpecNode { + return osgraph.EnsureUnique(g, + PodSpecNodeName(podSpec, ownerName), + func(node osgraph.Node) graph.Node { + return &PodSpecNode{node, podSpec, namespace, ownerName} + }, + ).(*PodSpecNode) +} + +// EnsureServiceNode adds the provided service to the graph if it does not already exist. +func EnsureServiceNode(g osgraph.MutableUniqueGraph, svc *kapi.Service) *ServiceNode { + return osgraph.EnsureUnique(g, + ServiceNodeName(svc), + func(node osgraph.Node) graph.Node { + return &ServiceNode{node, svc, true} + }, + ).(*ServiceNode) +} + +// FindOrCreateSyntheticServiceNode returns the existing service node or creates a synthetic node in its place +func FindOrCreateSyntheticServiceNode(g osgraph.MutableUniqueGraph, svc *kapi.Service) *ServiceNode { + return osgraph.EnsureUnique(g, + ServiceNodeName(svc), + func(node osgraph.Node) graph.Node { + return &ServiceNode{node, svc, false} + }, + ).(*ServiceNode) +} + +func EnsureServiceAccountNode(g osgraph.MutableUniqueGraph, o *kapi.ServiceAccount) *ServiceAccountNode { + return osgraph.EnsureUnique(g, + ServiceAccountNodeName(o), + func(node osgraph.Node) graph.Node { + return &ServiceAccountNode{node, o, true} + }, + ).(*ServiceAccountNode) +} + +func FindOrCreateSyntheticServiceAccountNode(g osgraph.MutableUniqueGraph, o *kapi.ServiceAccount) *ServiceAccountNode { + return osgraph.EnsureUnique(g, + ServiceAccountNodeName(o), + func(node osgraph.Node) graph.Node { + return &ServiceAccountNode{node, o, false} + }, + ).(*ServiceAccountNode) +} + +func EnsureSecretNode(g osgraph.MutableUniqueGraph, o *kapi.Secret) *SecretNode { + return osgraph.EnsureUnique(g, + SecretNodeName(o), + func(node osgraph.Node) graph.Node { + return &SecretNode{node, o, true} + }, + ).(*SecretNode) +} + +func FindOrCreateSyntheticSecretNode(g osgraph.MutableUniqueGraph, o *kapi.Secret) *SecretNode { + return osgraph.EnsureUnique(g, + SecretNodeName(o), + func(node osgraph.Node) graph.Node { + return &SecretNode{node, o, false} + }, + ).(*SecretNode) +} + +// EnsureReplicationControllerNode adds a graph node for the ReplicationController if it does not already exist. +func EnsureReplicationControllerNode(g osgraph.MutableUniqueGraph, rc *kapi.ReplicationController) *ReplicationControllerNode { + rcNodeName := ReplicationControllerNodeName(rc) + rcNode := osgraph.EnsureUnique(g, + rcNodeName, + func(node osgraph.Node) graph.Node { + return &ReplicationControllerNode{node, rc, true} + }, + ).(*ReplicationControllerNode) + + rcSpecNode := EnsureReplicationControllerSpecNode(g, &rc.Spec, rc.Namespace, rcNodeName) + g.AddEdge(rcNode, rcSpecNode, osgraph.ContainsEdgeKind) + + return rcNode +} + +func FindOrCreateSyntheticReplicationControllerNode(g osgraph.MutableUniqueGraph, rc *kapi.ReplicationController) *ReplicationControllerNode { + return osgraph.EnsureUnique(g, + ReplicationControllerNodeName(rc), + func(node osgraph.Node) graph.Node { + return &ReplicationControllerNode{node, rc, false} + }, + ).(*ReplicationControllerNode) +} + +func EnsureReplicationControllerSpecNode(g osgraph.MutableUniqueGraph, rcSpec *kapi.ReplicationControllerSpec, namespace string, ownerName osgraph.UniqueName) *ReplicationControllerSpecNode { + rcSpecName := ReplicationControllerSpecNodeName(rcSpec, ownerName) + rcSpecNode := osgraph.EnsureUnique(g, + rcSpecName, + func(node osgraph.Node) graph.Node { + return &ReplicationControllerSpecNode{node, rcSpec, namespace, ownerName} + }, + ).(*ReplicationControllerSpecNode) + + if rcSpec.Template != nil { + ptSpecNode := EnsurePodTemplateSpecNode(g, rcSpec.Template, namespace, rcSpecName) + g.AddEdge(rcSpecNode, ptSpecNode, osgraph.ContainsEdgeKind) + } + + return rcSpecNode +} + +func EnsurePodTemplateSpecNode(g osgraph.MutableUniqueGraph, ptSpec *kapi.PodTemplateSpec, namespace string, ownerName osgraph.UniqueName) *PodTemplateSpecNode { + ptSpecName := PodTemplateSpecNodeName(ptSpec, ownerName) + ptSpecNode := osgraph.EnsureUnique(g, + ptSpecName, + func(node osgraph.Node) graph.Node { + return &PodTemplateSpecNode{node, ptSpec, namespace, ownerName} + }, + ).(*PodTemplateSpecNode) + + podSpecNode := EnsurePodSpecNode(g, &ptSpec.Spec, namespace, ptSpecName) + g.AddEdge(ptSpecNode, podSpecNode, osgraph.ContainsEdgeKind) + + return ptSpecNode +} + +func EnsureHorizontalPodAutoscalerNode(g osgraph.MutableUniqueGraph, hpa *autoscaling.HorizontalPodAutoscaler) *HorizontalPodAutoscalerNode { + return osgraph.EnsureUnique(g, + HorizontalPodAutoscalerNodeName(hpa), + func(node osgraph.Node) graph.Node { + return &HorizontalPodAutoscalerNode{Node: node, HorizontalPodAutoscaler: hpa} + }, + ).(*HorizontalPodAutoscalerNode) +} + +func EnsurePetSetNode(g osgraph.MutableUniqueGraph, petset *kapps.PetSet) *PetSetNode { + nodeName := PetSetNodeName(petset) + node := osgraph.EnsureUnique(g, + nodeName, + func(node osgraph.Node) graph.Node { + return &PetSetNode{node, petset} + }, + ).(*PetSetNode) + + specNode := EnsurePetSetSpecNode(g, &petset.Spec, petset.Namespace, nodeName) + g.AddEdge(node, specNode, osgraph.ContainsEdgeKind) + + return node +} + +func EnsurePetSetSpecNode(g osgraph.MutableUniqueGraph, spec *kapps.PetSetSpec, namespace string, ownerName osgraph.UniqueName) *PetSetSpecNode { + specName := PetSetSpecNodeName(spec, ownerName) + specNode := osgraph.EnsureUnique(g, + specName, + func(node osgraph.Node) graph.Node { + return &PetSetSpecNode{node, spec, namespace, ownerName} + }, + ).(*PetSetSpecNode) + + ptSpecNode := EnsurePodTemplateSpecNode(g, &spec.Template, namespace, specName) + g.AddEdge(specNode, ptSpecNode, osgraph.ContainsEdgeKind) + + return specNode +} diff --git a/vendor/github.com/openshift/origin/pkg/api/kubegraph/nodes/types.go b/vendor/github.com/openshift/origin/pkg/api/kubegraph/nodes/types.go new file mode 100644 index 00000000..78f4c452 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/kubegraph/nodes/types.go @@ -0,0 +1,325 @@ +package nodes + +import ( + "fmt" + "reflect" + + kapi "k8s.io/kubernetes/pkg/api" + kapps "k8s.io/kubernetes/pkg/apis/apps" + "k8s.io/kubernetes/pkg/apis/autoscaling" + + osgraph "github.com/openshift/origin/pkg/api/graph" +) + +var ( + ServiceNodeKind = reflect.TypeOf(kapi.Service{}).Name() + PodNodeKind = reflect.TypeOf(kapi.Pod{}).Name() + PodSpecNodeKind = reflect.TypeOf(kapi.PodSpec{}).Name() + PodTemplateSpecNodeKind = reflect.TypeOf(kapi.PodTemplateSpec{}).Name() + ReplicationControllerNodeKind = reflect.TypeOf(kapi.ReplicationController{}).Name() + ReplicationControllerSpecNodeKind = reflect.TypeOf(kapi.ReplicationControllerSpec{}).Name() + ServiceAccountNodeKind = reflect.TypeOf(kapi.ServiceAccount{}).Name() + SecretNodeKind = reflect.TypeOf(kapi.Secret{}).Name() + HorizontalPodAutoscalerNodeKind = reflect.TypeOf(autoscaling.HorizontalPodAutoscaler{}).Name() + PetSetNodeKind = reflect.TypeOf(kapps.PetSet{}).Name() + PetSetSpecNodeKind = reflect.TypeOf(kapps.PetSetSpec{}).Name() +) + +func ServiceNodeName(o *kapi.Service) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(ServiceNodeKind, o) +} + +type ServiceNode struct { + osgraph.Node + *kapi.Service + + IsFound bool +} + +func (n ServiceNode) Object() interface{} { + return n.Service +} + +func (n ServiceNode) String() string { + return string(ServiceNodeName(n.Service)) +} + +func (*ServiceNode) Kind() string { + return ServiceNodeKind +} + +func (n ServiceNode) Found() bool { + return n.IsFound +} + +func PodNodeName(o *kapi.Pod) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(PodNodeKind, o) +} + +type PodNode struct { + osgraph.Node + *kapi.Pod +} + +func (n PodNode) Object() interface{} { + return n.Pod +} + +func (n PodNode) String() string { + return string(PodNodeName(n.Pod)) +} + +func (n PodNode) UniqueName() osgraph.UniqueName { + return PodNodeName(n.Pod) +} + +func (*PodNode) Kind() string { + return PodNodeKind +} + +func PodSpecNodeName(o *kapi.PodSpec, ownerName osgraph.UniqueName) osgraph.UniqueName { + return osgraph.UniqueName(fmt.Sprintf("%s|%v", PodSpecNodeKind, ownerName)) +} + +type PodSpecNode struct { + osgraph.Node + *kapi.PodSpec + Namespace string + + OwnerName osgraph.UniqueName +} + +func (n PodSpecNode) Object() interface{} { + return n.PodSpec +} + +func (n PodSpecNode) String() string { + return string(n.UniqueName()) +} + +func (n PodSpecNode) UniqueName() osgraph.UniqueName { + return PodSpecNodeName(n.PodSpec, n.OwnerName) +} + +func (*PodSpecNode) Kind() string { + return PodSpecNodeKind +} + +func ReplicationControllerNodeName(o *kapi.ReplicationController) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(ReplicationControllerNodeKind, o) +} + +type ReplicationControllerNode struct { + osgraph.Node + ReplicationController *kapi.ReplicationController + + IsFound bool +} + +func (n ReplicationControllerNode) Found() bool { + return n.IsFound +} + +func (n ReplicationControllerNode) Object() interface{} { + return n.ReplicationController +} + +func (n ReplicationControllerNode) String() string { + return string(ReplicationControllerNodeName(n.ReplicationController)) +} + +func (n ReplicationControllerNode) UniqueName() osgraph.UniqueName { + return ReplicationControllerNodeName(n.ReplicationController) +} + +func (*ReplicationControllerNode) Kind() string { + return ReplicationControllerNodeKind +} + +func ReplicationControllerSpecNodeName(o *kapi.ReplicationControllerSpec, ownerName osgraph.UniqueName) osgraph.UniqueName { + return osgraph.UniqueName(fmt.Sprintf("%s|%v", ReplicationControllerSpecNodeKind, ownerName)) +} + +type ReplicationControllerSpecNode struct { + osgraph.Node + ReplicationControllerSpec *kapi.ReplicationControllerSpec + Namespace string + + OwnerName osgraph.UniqueName +} + +func (n ReplicationControllerSpecNode) Object() interface{} { + return n.ReplicationControllerSpec +} + +func (n ReplicationControllerSpecNode) String() string { + return string(n.UniqueName()) +} + +func (n ReplicationControllerSpecNode) UniqueName() osgraph.UniqueName { + return ReplicationControllerSpecNodeName(n.ReplicationControllerSpec, n.OwnerName) +} + +func (*ReplicationControllerSpecNode) Kind() string { + return ReplicationControllerSpecNodeKind +} + +func PodTemplateSpecNodeName(o *kapi.PodTemplateSpec, ownerName osgraph.UniqueName) osgraph.UniqueName { + return osgraph.UniqueName(fmt.Sprintf("%s|%v", PodTemplateSpecNodeKind, ownerName)) +} + +type PodTemplateSpecNode struct { + osgraph.Node + *kapi.PodTemplateSpec + Namespace string + + OwnerName osgraph.UniqueName +} + +func (n PodTemplateSpecNode) Object() interface{} { + return n.PodTemplateSpec +} + +func (n PodTemplateSpecNode) String() string { + return string(n.UniqueName()) +} + +func (n PodTemplateSpecNode) UniqueName() osgraph.UniqueName { + return PodTemplateSpecNodeName(n.PodTemplateSpec, n.OwnerName) +} + +func (*PodTemplateSpecNode) Kind() string { + return PodTemplateSpecNodeKind +} + +func ServiceAccountNodeName(o *kapi.ServiceAccount) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(ServiceAccountNodeKind, o) +} + +type ServiceAccountNode struct { + osgraph.Node + *kapi.ServiceAccount + + IsFound bool +} + +func (n ServiceAccountNode) Found() bool { + return n.IsFound +} + +func (n ServiceAccountNode) Object() interface{} { + return n.ServiceAccount +} + +func (n ServiceAccountNode) String() string { + return string(ServiceAccountNodeName(n.ServiceAccount)) +} + +func (*ServiceAccountNode) Kind() string { + return ServiceAccountNodeKind +} + +func SecretNodeName(o *kapi.Secret) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(SecretNodeKind, o) +} + +type SecretNode struct { + osgraph.Node + *kapi.Secret + + IsFound bool +} + +func (n SecretNode) Found() bool { + return n.IsFound +} + +func (n SecretNode) Object() interface{} { + return n.Secret +} + +func (n SecretNode) String() string { + return string(SecretNodeName(n.Secret)) +} + +func (*SecretNode) Kind() string { + return SecretNodeKind +} + +func HorizontalPodAutoscalerNodeName(o *autoscaling.HorizontalPodAutoscaler) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(HorizontalPodAutoscalerNodeKind, o) +} + +type HorizontalPodAutoscalerNode struct { + osgraph.Node + HorizontalPodAutoscaler *autoscaling.HorizontalPodAutoscaler +} + +func (n HorizontalPodAutoscalerNode) Object() interface{} { + return n.HorizontalPodAutoscaler +} + +func (n HorizontalPodAutoscalerNode) String() string { + return string(n.UniqueName()) +} + +func (*HorizontalPodAutoscalerNode) Kind() string { + return HorizontalPodAutoscalerNodeKind +} + +func (n HorizontalPodAutoscalerNode) UniqueName() osgraph.UniqueName { + return HorizontalPodAutoscalerNodeName(n.HorizontalPodAutoscaler) +} + +func PetSetNodeName(o *kapps.PetSet) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(PetSetNodeKind, o) +} + +type PetSetNode struct { + osgraph.Node + PetSet *kapps.PetSet +} + +func (n PetSetNode) Object() interface{} { + return n.PetSet +} + +func (n PetSetNode) String() string { + return string(n.UniqueName()) +} + +func (n PetSetNode) UniqueName() osgraph.UniqueName { + return PetSetNodeName(n.PetSet) +} + +func (*PetSetNode) Kind() string { + return PetSetNodeKind +} + +func PetSetSpecNodeName(o *kapps.PetSetSpec, ownerName osgraph.UniqueName) osgraph.UniqueName { + return osgraph.UniqueName(fmt.Sprintf("%s|%v", PetSetSpecNodeKind, ownerName)) +} + +type PetSetSpecNode struct { + osgraph.Node + PetSetSpec *kapps.PetSetSpec + Namespace string + + OwnerName osgraph.UniqueName +} + +func (n PetSetSpecNode) Object() interface{} { + return n.PetSetSpec +} + +func (n PetSetSpecNode) String() string { + return string(n.UniqueName()) +} + +func (n PetSetSpecNode) UniqueName() osgraph.UniqueName { + return PetSetSpecNodeName(n.PetSetSpec, n.OwnerName) +} + +func (*PetSetSpecNode) Kind() string { + return PetSetSpecNodeKind +} diff --git a/vendor/github.com/openshift/origin/pkg/api/latest/doc.go b/vendor/github.com/openshift/origin/pkg/api/latest/doc.go new file mode 100644 index 00000000..436e8f57 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/latest/doc.go @@ -0,0 +1,5 @@ +// Package latest defines the default output serializations that code should +// use and imports the required schemas. It also ensures all previously known +// and supported API versions are available for conversion. Consumers may +// import this package in lieu of importing individual versions. +package latest diff --git a/vendor/github.com/openshift/origin/pkg/api/latest/latest.go b/vendor/github.com/openshift/origin/pkg/api/latest/latest.go new file mode 100644 index 00000000..9e265252 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/latest/latest.go @@ -0,0 +1,73 @@ +package latest + +import ( + "strings" + "sync" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" +) + +// HACK TO ELIMINATE CYCLES UNTIL WE KILL THIS PACKAGE + +// Version is the string that represents the current external default version. +var Version = unversioned.GroupVersion{Group: "", Version: "v1"} + +// OldestVersion is the string that represents the oldest server version supported, +// for client code that wants to hardcode the lowest common denominator. +var OldestVersion = unversioned.GroupVersion{Group: "", Version: "v1"} + +// Versions is the list of versions that are recognized in code. The order provided +// may be assumed to be most preferred to least preferred, and clients may +// choose to prefer the earlier items in the list over the latter items when presented +// with a set of versions to choose. +var Versions = []unversioned.GroupVersion{{Group: "", Version: "v1"}} + +// originTypes are the hardcoded types defined by the OpenShift API. +var originTypes map[unversioned.GroupVersionKind]bool + +// originTypesLock allows lazying initialization of originTypes to allow initializers to run before +// loading the map. It means that initializers have to know ahead of time where their type is from, +// but that is not onerous +var originTypesLock sync.Once + +// OriginKind returns true if OpenShift owns the GroupVersionKind. +func OriginKind(gvk unversioned.GroupVersionKind) bool { + return getOrCreateOriginKinds()[gvk] +} + +// IsKindInAnyOriginGroup returns true if OpenShift owns the kind described in any apiVersion. +// TODO: this may not work once we divide builds/deployments/images into their own API groups +func IsKindInAnyOriginGroup(kind string) bool { + for _, version := range Versions { + if OriginKind(version.WithKind(kind)) { + return true + } + } + + return false +} + +func getOrCreateOriginKinds() map[unversioned.GroupVersionKind]bool { + if originTypes == nil { + originTypesLock.Do(func() { + newOriginTypes := map[unversioned.GroupVersionKind]bool{} + + // enumerate all supported versions, get the kinds, and register with the mapper how to address our resources + for _, version := range Versions { + for kind, t := range api.Scheme.KnownTypes(version) { + if !strings.Contains(t.PkgPath(), "github.com/openshift/origin") || strings.Contains(t.PkgPath(), "github.com/openshift/origin/vendor/") { + continue + } + gvk := version.WithKind(kind) + newOriginTypes[gvk] = true + } + } + originTypes = newOriginTypes + }) + + return originTypes + } + + return originTypes +} diff --git a/vendor/github.com/openshift/origin/pkg/api/restmapper/discovery.go b/vendor/github.com/openshift/origin/pkg/api/restmapper/discovery.go new file mode 100644 index 00000000..3e99ea24 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/api/restmapper/discovery.go @@ -0,0 +1,176 @@ +package restmapper + +import ( + "sync" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/client/typed/discovery" +) + +type discoveryRESTMapper struct { + discoveryClient discovery.DiscoveryInterface + + delegate meta.RESTMapper + + initLock sync.Mutex +} + +// NewDiscoveryRESTMapper that initializes using the discovery APIs, relying on group ordering and preferred versions +// to build its appropriate priorities. Only versions are registered with API machinery are added now. +// TODO make this work with generic resources at some point. For now, this handles enabled and disabled resources cleanly. +func NewDiscoveryRESTMapper(discoveryClient discovery.DiscoveryInterface) meta.RESTMapper { + return &discoveryRESTMapper{discoveryClient: discoveryClient} +} + +func (d *discoveryRESTMapper) getDelegate() (meta.RESTMapper, error) { + d.initLock.Lock() + defer d.initLock.Unlock() + + if d.delegate != nil { + return d.delegate, nil + } + + serverGroups, err := d.discoveryClient.ServerGroups() + if err != nil { + return nil, err + } + + // always prefer our default group for now. The version should be discovered from discovery, but this will hold us + // for quite some time. + resourcePriority := []unversioned.GroupVersionResource{ + {Group: kapi.GroupName, Version: meta.AnyVersion, Resource: meta.AnyResource}, + } + kindPriority := []unversioned.GroupVersionKind{ + {Group: kapi.GroupName, Version: meta.AnyVersion, Kind: meta.AnyKind}, + } + groupPriority := []string{} + + unionMapper := meta.MultiRESTMapper{} + + for _, group := range serverGroups.Groups { + if len(group.Versions) == 0 { + continue + } + groupPriority = append(groupPriority, group.Name) + + if len(group.PreferredVersion.Version) != 0 { + preferredVersion := unversioned.GroupVersion{Group: group.Name, Version: group.PreferredVersion.Version} + if registered.IsEnabledVersion(preferredVersion) { + resourcePriority = append(resourcePriority, preferredVersion.WithResource(meta.AnyResource)) + kindPriority = append(kindPriority, preferredVersion.WithKind(meta.AnyKind)) + } + } + + for _, discoveryVersion := range group.Versions { + version := unversioned.GroupVersion{Group: group.Name, Version: discoveryVersion.Version} + if !registered.IsEnabledVersion(version) { + continue + } + groupMeta, err := registered.Group(group.Name) + if err != nil { + return nil, err + } + resources, err := d.discoveryClient.ServerResourcesForGroupVersion(version.String()) + if err != nil { + return nil, err + } + + versionMapper := meta.NewDefaultRESTMapper([]unversioned.GroupVersion{version}, groupMeta.InterfacesFor) + for _, resource := range resources.APIResources { + // TODO properly handle resource versus kind + gvk := version.WithKind(resource.Kind) + + scope := meta.RESTScopeNamespace + if !resource.Namespaced { + scope = meta.RESTScopeRoot + } + versionMapper.Add(gvk, scope) + + // TODO formalize this by checking to see if they support listing + versionMapper.Add(version.WithKind(resource.Kind+"List"), scope) + } + + // we need to add List. Its a special case of something we need that isn't in the discovery doc + if group.Name == kapi.GroupName { + versionMapper.Add(version.WithKind("List"), meta.RESTScopeNamespace) + } + + unionMapper = append(unionMapper, versionMapper) + } + } + + for _, group := range groupPriority { + resourcePriority = append(resourcePriority, unversioned.GroupVersionResource{Group: group, Version: meta.AnyVersion, Resource: meta.AnyResource}) + kindPriority = append(kindPriority, unversioned.GroupVersionKind{Group: group, Version: meta.AnyVersion, Kind: meta.AnyKind}) + } + + d.delegate = meta.PriorityRESTMapper{Delegate: unionMapper, ResourcePriority: resourcePriority, KindPriority: kindPriority} + return d.delegate, nil +} + +func (d *discoveryRESTMapper) KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) { + delegate, err := d.getDelegate() + if err != nil { + return unversioned.GroupVersionKind{}, err + } + return delegate.KindFor(resource) +} + +func (d *discoveryRESTMapper) KindsFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) { + delegate, err := d.getDelegate() + if err != nil { + return nil, err + } + return delegate.KindsFor(resource) +} + +func (d *discoveryRESTMapper) ResourceFor(input unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) { + delegate, err := d.getDelegate() + if err != nil { + return unversioned.GroupVersionResource{}, err + } + return delegate.ResourceFor(input) +} + +func (d *discoveryRESTMapper) ResourcesFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) { + delegate, err := d.getDelegate() + if err != nil { + return nil, err + } + return delegate.ResourcesFor(input) +} + +func (d *discoveryRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...string) (*meta.RESTMapping, error) { + delegate, err := d.getDelegate() + if err != nil { + return nil, err + } + return delegate.RESTMapping(gk, versions...) +} + +func (d *discoveryRESTMapper) RESTMappings(gk unversioned.GroupKind) ([]*meta.RESTMapping, error) { + delegate, err := d.getDelegate() + if err != nil { + return nil, err + } + return delegate.RESTMappings(gk) +} + +func (d *discoveryRESTMapper) AliasesForResource(resource string) ([]string, bool) { + delegate, err := d.getDelegate() + if err != nil { + return nil, false + } + return delegate.AliasesForResource(resource) +} + +func (d *discoveryRESTMapper) ResourceSingularizer(resource string) (singular string, err error) { + delegate, err := d.getDelegate() + if err != nil { + return resource, err + } + return delegate.ResourceSingularizer(resource) +} diff --git a/vendor/github.com/openshift/origin/pkg/auth/api/types.go b/vendor/github.com/openshift/origin/pkg/auth/api/types.go new file mode 100644 index 00000000..9b62c2ad --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/auth/api/types.go @@ -0,0 +1,85 @@ +package api + +import ( + "k8s.io/kubernetes/pkg/auth/user" +) + +const ( + // IdentityDisplayNameKey is the key for an optional display name in an identity's Extra map + IdentityDisplayNameKey = "name" + // IdentityEmailKey is the key for an optional email address in an identity's Extra map + IdentityEmailKey = "email" + // IdentityPreferredUsernameKey is the key for an optional preferred username in an identity's Extra map. + // This is useful when the immutable providerUserName is different than the login used to authenticate + // If present, this extra value is used as the preferred username + IdentityPreferredUsernameKey = "preferred_username" + + ImpersonateUserHeader = "Impersonate-User" + ImpersonateGroupHeader = "Impersonate-Group" + ImpersonateUserScopeHeader = "Impersonate-User-Scope" +) + +// UserIdentityInfo contains information about an identity. Identities are distinct from users. An authentication server of +// some kind (like oauth for example) describes an identity. Our system controls the users mapped to this identity. +type UserIdentityInfo interface { + // GetIdentityName returns the name of this identity. It must be equal to GetProviderName() + ":" + GetProviderUserName() + GetIdentityName() string + // GetProviderName returns the name of the provider of this identity. + GetProviderName() string + // GetProviderUserName uniquely identifies this particular identity for this provider. It is NOT guaranteed to be unique across providers + GetProviderUserName() string + // GetExtra is a map to allow providers to add additional fields that they understand + GetExtra() map[string]string +} + +// UserIdentityMapper maps UserIdentities into user.Info objects to allow different user abstractions within auth code. +type UserIdentityMapper interface { + // UserFor takes an identity, ignores the passed identity.Provider, forces the provider value to some other value and then creates the mapping. + // It returns the corresponding user.Info + UserFor(identityInfo UserIdentityInfo) (user.Info, error) +} + +type Client interface { + GetId() string + ValidateSecret(secret string) bool + GetRedirectUri() string + GetUserData() interface{} +} + +type Grant struct { + Client Client + Scope string + Expiration int64 + RedirectURI string +} + +type DefaultUserIdentityInfo struct { + ProviderName string + ProviderUserName string + Extra map[string]string +} + +// NewDefaultUserIdentityInfo returns a DefaultUserIdentityInfo with a non-nil Extra component +func NewDefaultUserIdentityInfo(providerName, providerUserName string) *DefaultUserIdentityInfo { + return &DefaultUserIdentityInfo{ + ProviderName: providerName, + ProviderUserName: providerUserName, + Extra: map[string]string{}, + } +} + +func (i *DefaultUserIdentityInfo) GetIdentityName() string { + return i.ProviderName + ":" + i.ProviderUserName +} + +func (i *DefaultUserIdentityInfo) GetProviderName() string { + return i.ProviderName +} + +func (i *DefaultUserIdentityInfo) GetProviderUserName() string { + return i.ProviderUserName +} + +func (i *DefaultUserIdentityInfo) GetExtra() map[string]string { + return i.Extra +} diff --git a/vendor/github.com/openshift/origin/pkg/auth/authenticator/interfaces.go b/vendor/github.com/openshift/origin/pkg/auth/authenticator/interfaces.go new file mode 100644 index 00000000..acafde79 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/auth/authenticator/interfaces.go @@ -0,0 +1,34 @@ +package authenticator + +import ( + "net/http" + + "github.com/openshift/origin/pkg/auth/api" + "k8s.io/kubernetes/pkg/auth/user" +) + +type Token interface { + AuthenticateToken(token string) (user.Info, bool, error) +} + +type Request interface { + AuthenticateRequest(req *http.Request) (user.Info, bool, error) +} + +type Password interface { + AuthenticatePassword(user, password string) (user.Info, bool, error) +} + +type Assertion interface { + AuthenticateAssertion(assertionType, data string) (user.Info, bool, error) +} + +type Client interface { + AuthenticateClient(client api.Client) (user.Info, bool, error) +} + +type RequestFunc func(req *http.Request) (user.Info, bool, error) + +func (f RequestFunc) AuthenticateRequest(req *http.Request) (user.Info, bool, error) { + return f(req) +} diff --git a/vendor/github.com/openshift/origin/pkg/auth/authenticator/request/x509request/doc.go b/vendor/github.com/openshift/origin/pkg/auth/authenticator/request/x509request/doc.go new file mode 100644 index 00000000..2cf71e53 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/auth/authenticator/request/x509request/doc.go @@ -0,0 +1,3 @@ +// Package x509request provides a request authenticator that validates and +// extracts user information from client certificates +package x509request diff --git a/vendor/github.com/openshift/origin/pkg/auth/authenticator/request/x509request/x509.go b/vendor/github.com/openshift/origin/pkg/auth/authenticator/request/x509request/x509.go new file mode 100644 index 00000000..8f775e77 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/auth/authenticator/request/x509request/x509.go @@ -0,0 +1,173 @@ +package x509request + +import ( + "crypto/x509" + "crypto/x509/pkix" + "fmt" + "net/http" + + "github.com/golang/glog" + "github.com/openshift/origin/pkg/auth/authenticator" + "k8s.io/kubernetes/pkg/auth/user" + kerrors "k8s.io/kubernetes/pkg/util/errors" + "k8s.io/kubernetes/pkg/util/sets" +) + +// UserConversion defines an interface for extracting user info from a client certificate chain +type UserConversion interface { + User(chain []*x509.Certificate) (user.Info, bool, error) +} + +// UserConversionFunc is a function that implements the UserConversion interface. +type UserConversionFunc func(chain []*x509.Certificate) (user.Info, bool, error) + +// User implements x509.UserConversion +func (f UserConversionFunc) User(chain []*x509.Certificate) (user.Info, bool, error) { + return f(chain) +} + +// Authenticator implements request.Authenticator by extracting user info from verified client certificates +type Authenticator struct { + opts x509.VerifyOptions + user UserConversion +} + +// New returns a request.Authenticator that verifies client certificates using the provided +// VerifyOptions, and converts valid certificate chains into user.Info using the provided UserConversion +func New(opts x509.VerifyOptions, user UserConversion) *Authenticator { + return &Authenticator{opts, user} +} + +// AuthenticateRequest authenticates the request using presented client certificates +func (a *Authenticator) AuthenticateRequest(req *http.Request) (user.Info, bool, error) { + if req.TLS == nil { + return nil, false, nil + } + + var errlist []error + for _, cert := range req.TLS.PeerCertificates { + chains, err := cert.Verify(a.opts) + if err != nil { + errlist = append(errlist, err) + continue + } + + for _, chain := range chains { + user, ok, err := a.user.User(chain) + if err != nil { + errlist = append(errlist, err) + continue + } + + if ok { + return user, ok, err + } + } + } + return nil, false, kerrors.NewAggregate(errlist) +} + +// Verifier implements request.Authenticator by verifying a client cert on the request, then delegating to the wrapped auth +type Verifier struct { + opts x509.VerifyOptions + auth authenticator.Request + + // allowedCommonNames contains the common names which a verified certificate is allowed to have. + // If empty, all verified certificates are allowed. + allowedCommonNames sets.String +} + +func NewVerifier(opts x509.VerifyOptions, auth authenticator.Request, allowedCommonNames sets.String) authenticator.Request { + return &Verifier{opts, auth, allowedCommonNames} +} + +// AuthenticateRequest verifies the presented client certificates, then delegates to the wrapped auth +func (a *Verifier) AuthenticateRequest(req *http.Request) (user.Info, bool, error) { + if req.TLS == nil { + return nil, false, nil + } + + var errlist []error + for _, cert := range req.TLS.PeerCertificates { + if _, err := cert.Verify(a.opts); err != nil { + errlist = append(errlist, err) + continue + } + if err := a.verifySubject(cert.Subject); err != nil { + errlist = append(errlist, err) + continue + } + return a.auth.AuthenticateRequest(req) + } + return nil, false, kerrors.NewAggregate(errlist) +} + +func (a *Verifier) verifySubject(subject pkix.Name) error { + // No CN restrictions + if len(a.allowedCommonNames) == 0 { + return nil + } + // Enforce CN restrictions + if a.allowedCommonNames.Has(subject.CommonName) { + return nil + } + glog.Warningf("x509: subject with cn=%s is not in the allowed list: %v", subject.CommonName, a.allowedCommonNames.List()) + return fmt.Errorf("x509: subject with cn=%s is not allowed", subject.CommonName) +} + +// DefaultVerifyOptions returns VerifyOptions that use the system root certificates, current time, +// and requires certificates to be valid for client auth (x509.ExtKeyUsageClientAuth) +func DefaultVerifyOptions() x509.VerifyOptions { + return x509.VerifyOptions{ + KeyUsages: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}, + } +} + +// SubjectToUserConversion calls SubjectToUser on the subject of the first certificate in the chain. +// If the resulting user has no name, it returns nil, false, nil +var SubjectToUserConversion = UserConversionFunc(func(chain []*x509.Certificate) (user.Info, bool, error) { + user := SubjectToUser(chain[0].Subject) + if len(user.GetName()) == 0 { + return nil, false, nil + } + return user, true, nil +}) + +// CommonNameUserConversion builds user info from a certificate chain using the subject's CommonName +var CommonNameUserConversion = UserConversionFunc(func(chain []*x509.Certificate) (user.Info, bool, error) { + if len(chain[0].Subject.CommonName) == 0 { + return nil, false, nil + } + return &user.DefaultInfo{Name: chain[0].Subject.CommonName}, true, nil +}) + +// DNSNameUserConversion builds user info from a certificate chain using the first DNSName on the certificate +var DNSNameUserConversion = UserConversionFunc(func(chain []*x509.Certificate) (user.Info, bool, error) { + if len(chain[0].DNSNames) == 0 { + return nil, false, nil + } + return &user.DefaultInfo{Name: chain[0].DNSNames[0]}, true, nil +}) + +// EmailAddressUserConversion builds user info from a certificate chain using the first EmailAddress on the certificate +var EmailAddressUserConversion = UserConversionFunc(func(chain []*x509.Certificate) (user.Info, bool, error) { + if len(chain[0].EmailAddresses) == 0 { + return nil, false, nil + } + return &user.DefaultInfo{Name: chain[0].EmailAddresses[0]}, true, nil +}) + +func UserToSubject(u user.Info) pkix.Name { + return pkix.Name{ + CommonName: u.GetName(), + SerialNumber: u.GetUID(), + Organization: u.GetGroups(), + } +} +func SubjectToUser(subject pkix.Name) user.Info { + return &user.DefaultInfo{ + Name: subject.CommonName, + UID: subject.SerialNumber, + Groups: subject.Organization, + } +} diff --git a/vendor/github.com/openshift/origin/pkg/authorization/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/authorization/api/deep_copy_generated.go deleted file mode 100644 index 96dd1b2e..00000000 --- a/vendor/github.com/openshift/origin/pkg/authorization/api/deep_copy_generated.go +++ /dev/null @@ -1,678 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - runtime "k8s.io/kubernetes/pkg/runtime" - sets "k8s.io/kubernetes/pkg/util/sets" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_AuthorizationAttributes, - DeepCopy_api_ClusterPolicy, - DeepCopy_api_ClusterPolicyBinding, - DeepCopy_api_ClusterPolicyBindingList, - DeepCopy_api_ClusterPolicyList, - DeepCopy_api_ClusterRole, - DeepCopy_api_ClusterRoleBinding, - DeepCopy_api_ClusterRoleBindingList, - DeepCopy_api_ClusterRoleList, - DeepCopy_api_IsPersonalSubjectAccessReview, - DeepCopy_api_LocalResourceAccessReview, - DeepCopy_api_LocalSubjectAccessReview, - DeepCopy_api_Policy, - DeepCopy_api_PolicyBinding, - DeepCopy_api_PolicyBindingList, - DeepCopy_api_PolicyList, - DeepCopy_api_PolicyRule, - DeepCopy_api_ResourceAccessReview, - DeepCopy_api_ResourceAccessReviewResponse, - DeepCopy_api_Role, - DeepCopy_api_RoleBinding, - DeepCopy_api_RoleBindingList, - DeepCopy_api_RoleList, - DeepCopy_api_SelfSubjectRulesReview, - DeepCopy_api_SelfSubjectRulesReviewSpec, - DeepCopy_api_SubjectAccessReview, - DeepCopy_api_SubjectAccessReviewResponse, - DeepCopy_api_SubjectRulesReviewStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_AuthorizationAttributes(in AuthorizationAttributes, out *AuthorizationAttributes, c *conversion.Cloner) error { - out.Namespace = in.Namespace - out.Verb = in.Verb - out.Group = in.Group - out.Version = in.Version - out.Resource = in.Resource - out.ResourceName = in.ResourceName - if in.Content == nil { - out.Content = nil - } else if newVal, err := c.DeepCopy(in.Content); err != nil { - return err - } else { - out.Content = newVal.(runtime.Object) - } - return nil -} - -func DeepCopy_api_ClusterPolicy(in ClusterPolicy, out *ClusterPolicy, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastModified, &out.LastModified, c); err != nil { - return err - } - if in.Roles != nil { - in, out := in.Roles, &out.Roles - *out = make(map[string]*ClusterRole) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(*ClusterRole) - } - } - } else { - out.Roles = nil - } - return nil -} - -func DeepCopy_api_ClusterPolicyBinding(in ClusterPolicyBinding, out *ClusterPolicyBinding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastModified, &out.LastModified, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectReference(in.PolicyRef, &out.PolicyRef, c); err != nil { - return err - } - if in.RoleBindings != nil { - in, out := in.RoleBindings, &out.RoleBindings - *out = make(map[string]*ClusterRoleBinding) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(*ClusterRoleBinding) - } - } - } else { - out.RoleBindings = nil - } - return nil -} - -func DeepCopy_api_ClusterPolicyBindingList(in ClusterPolicyBindingList, out *ClusterPolicyBindingList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterPolicyBinding, len(in)) - for i := range in { - if err := DeepCopy_api_ClusterPolicyBinding(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ClusterPolicyList(in ClusterPolicyList, out *ClusterPolicyList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterPolicy, len(in)) - for i := range in { - if err := DeepCopy_api_ClusterPolicy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ClusterRole(in ClusterRole, out *ClusterRole, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]PolicyRule, len(in)) - for i := range in { - if err := DeepCopy_api_PolicyRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - return nil -} - -func DeepCopy_api_ClusterRoleBinding(in ClusterRoleBinding, out *ClusterRoleBinding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Subjects != nil { - in, out := in.Subjects, &out.Subjects - *out = make([]api.ObjectReference, len(in)) - for i := range in { - if err := api.DeepCopy_api_ObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Subjects = nil - } - if err := api.DeepCopy_api_ObjectReference(in.RoleRef, &out.RoleRef, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ClusterRoleBindingList(in ClusterRoleBindingList, out *ClusterRoleBindingList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterRoleBinding, len(in)) - for i := range in { - if err := DeepCopy_api_ClusterRoleBinding(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ClusterRoleList(in ClusterRoleList, out *ClusterRoleList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterRole, len(in)) - for i := range in { - if err := DeepCopy_api_ClusterRole(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_IsPersonalSubjectAccessReview(in IsPersonalSubjectAccessReview, out *IsPersonalSubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_LocalResourceAccessReview(in LocalResourceAccessReview, out *LocalResourceAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_AuthorizationAttributes(in.Action, &out.Action, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_LocalSubjectAccessReview(in LocalSubjectAccessReview, out *LocalSubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_AuthorizationAttributes(in.Action, &out.Action, c); err != nil { - return err - } - out.User = in.User - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make(sets.String) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(sets.Empty) - } - } - } else { - out.Groups = nil - } - if in.Scopes != nil { - in, out := in.Scopes, &out.Scopes - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Scopes = nil - } - return nil -} - -func DeepCopy_api_Policy(in Policy, out *Policy, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastModified, &out.LastModified, c); err != nil { - return err - } - if in.Roles != nil { - in, out := in.Roles, &out.Roles - *out = make(map[string]*Role) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(*Role) - } - } - } else { - out.Roles = nil - } - return nil -} - -func DeepCopy_api_PolicyBinding(in PolicyBinding, out *PolicyBinding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastModified, &out.LastModified, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectReference(in.PolicyRef, &out.PolicyRef, c); err != nil { - return err - } - if in.RoleBindings != nil { - in, out := in.RoleBindings, &out.RoleBindings - *out = make(map[string]*RoleBinding) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(*RoleBinding) - } - } - } else { - out.RoleBindings = nil - } - return nil -} - -func DeepCopy_api_PolicyBindingList(in PolicyBindingList, out *PolicyBindingList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PolicyBinding, len(in)) - for i := range in { - if err := DeepCopy_api_PolicyBinding(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_PolicyList(in PolicyList, out *PolicyList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Policy, len(in)) - for i := range in { - if err := DeepCopy_api_Policy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_PolicyRule(in PolicyRule, out *PolicyRule, c *conversion.Cloner) error { - if in.Verbs != nil { - in, out := in.Verbs, &out.Verbs - *out = make(sets.String) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(sets.Empty) - } - } - } else { - out.Verbs = nil - } - if in.AttributeRestrictions == nil { - out.AttributeRestrictions = nil - } else if newVal, err := c.DeepCopy(in.AttributeRestrictions); err != nil { - return err - } else { - out.AttributeRestrictions = newVal.(runtime.Object) - } - if in.APIGroups != nil { - in, out := in.APIGroups, &out.APIGroups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.APIGroups = nil - } - if in.Resources != nil { - in, out := in.Resources, &out.Resources - *out = make(sets.String) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(sets.Empty) - } - } - } else { - out.Resources = nil - } - if in.ResourceNames != nil { - in, out := in.ResourceNames, &out.ResourceNames - *out = make(sets.String) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(sets.Empty) - } - } - } else { - out.ResourceNames = nil - } - if in.NonResourceURLs != nil { - in, out := in.NonResourceURLs, &out.NonResourceURLs - *out = make(sets.String) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(sets.Empty) - } - } - } else { - out.NonResourceURLs = nil - } - return nil -} - -func DeepCopy_api_ResourceAccessReview(in ResourceAccessReview, out *ResourceAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_AuthorizationAttributes(in.Action, &out.Action, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ResourceAccessReviewResponse(in ResourceAccessReviewResponse, out *ResourceAccessReviewResponse, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Namespace = in.Namespace - if in.Users != nil { - in, out := in.Users, &out.Users - *out = make(sets.String) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(sets.Empty) - } - } - } else { - out.Users = nil - } - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make(sets.String) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(sets.Empty) - } - } - } else { - out.Groups = nil - } - out.EvaluationError = in.EvaluationError - return nil -} - -func DeepCopy_api_Role(in Role, out *Role, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]PolicyRule, len(in)) - for i := range in { - if err := DeepCopy_api_PolicyRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - return nil -} - -func DeepCopy_api_RoleBinding(in RoleBinding, out *RoleBinding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Subjects != nil { - in, out := in.Subjects, &out.Subjects - *out = make([]api.ObjectReference, len(in)) - for i := range in { - if err := api.DeepCopy_api_ObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Subjects = nil - } - if err := api.DeepCopy_api_ObjectReference(in.RoleRef, &out.RoleRef, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_RoleBindingList(in RoleBindingList, out *RoleBindingList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]RoleBinding, len(in)) - for i := range in { - if err := DeepCopy_api_RoleBinding(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_RoleList(in RoleList, out *RoleList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Role, len(in)) - for i := range in { - if err := DeepCopy_api_Role(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_SelfSubjectRulesReview(in SelfSubjectRulesReview, out *SelfSubjectRulesReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_SelfSubjectRulesReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_SubjectRulesReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_SelfSubjectRulesReviewSpec(in SelfSubjectRulesReviewSpec, out *SelfSubjectRulesReviewSpec, c *conversion.Cloner) error { - if in.Scopes != nil { - in, out := in.Scopes, &out.Scopes - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Scopes = nil - } - return nil -} - -func DeepCopy_api_SubjectAccessReview(in SubjectAccessReview, out *SubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_AuthorizationAttributes(in.Action, &out.Action, c); err != nil { - return err - } - out.User = in.User - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make(sets.String) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(sets.Empty) - } - } - } else { - out.Groups = nil - } - if in.Scopes != nil { - in, out := in.Scopes, &out.Scopes - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Scopes = nil - } - return nil -} - -func DeepCopy_api_SubjectAccessReviewResponse(in SubjectAccessReviewResponse, out *SubjectAccessReviewResponse, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Namespace = in.Namespace - out.Allowed = in.Allowed - out.Reason = in.Reason - return nil -} - -func DeepCopy_api_SubjectRulesReviewStatus(in SubjectRulesReviewStatus, out *SubjectRulesReviewStatus, c *conversion.Cloner) error { - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]PolicyRule, len(in)) - for i := range in { - if err := DeepCopy_api_PolicyRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - out.EvaluationError = in.EvaluationError - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/authorization/api/doc.go b/vendor/github.com/openshift/origin/pkg/authorization/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/authorization/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/authorization/api/helpers.go b/vendor/github.com/openshift/origin/pkg/authorization/api/helpers.go index d16b3493..a3cc84c2 100644 --- a/vendor/github.com/openshift/origin/pkg/authorization/api/helpers.go +++ b/vendor/github.com/openshift/origin/pkg/authorization/api/helpers.go @@ -244,6 +244,59 @@ func SubjectsStrings(currentNamespace string, subjects []kapi.ObjectReference) ( return users, groups, sas, others } +// SubjectsContainUser returns true if the provided subjects contain the named user. currentNamespace +// is used to identify service accounts that are defined in a relative fashion. +func SubjectsContainUser(subjects []kapi.ObjectReference, currentNamespace string, user string) bool { + if !strings.HasPrefix(user, serviceaccount.ServiceAccountUsernamePrefix) { + for _, subject := range subjects { + switch subject.Kind { + case UserKind, SystemUserKind: + if user == subject.Name { + return true + } + } + } + return false + } + + for _, subject := range subjects { + switch subject.Kind { + case ServiceAccountKind: + namespace := currentNamespace + if len(subject.Namespace) > 0 { + namespace = subject.Namespace + } + if len(namespace) == 0 { + continue + } + if user == serviceaccount.MakeUsername(namespace, subject.Name) { + return true + } + + case UserKind, SystemUserKind: + if user == subject.Name { + return true + } + } + } + return false +} + +// SubjectsContainAnyGroup returns true if the provided subjects any of the named groups. +func SubjectsContainAnyGroup(subjects []kapi.ObjectReference, groups []string) bool { + for _, subject := range subjects { + switch subject.Kind { + case GroupKind, SystemGroupKind: + for _, group := range groups { + if group == subject.Name { + return true + } + } + } + } + return false +} + func AddUserToSAR(user user.Info, sar *SubjectAccessReview) *SubjectAccessReview { origScopes := user.GetExtra()[ScopesKey] scopes := make([]string, len(origScopes), len(origScopes)) diff --git a/vendor/github.com/openshift/origin/pkg/authorization/api/register.go b/vendor/github.com/openshift/origin/pkg/authorization/api/register.go index f0f87b83..b52b75c6 100644 --- a/vendor/github.com/openshift/origin/pkg/authorization/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/authorization/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "authorization.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,13 +21,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Role{}, &RoleBinding{}, @@ -55,4 +56,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &ClusterRoleBindingList{}, &ClusterRoleList{}, ) + return nil } diff --git a/vendor/github.com/openshift/origin/pkg/authorization/api/types.go b/vendor/github.com/openshift/origin/pkg/authorization/api/types.go index c0e423dc..47cf816e 100644 --- a/vendor/github.com/openshift/origin/pkg/authorization/api/types.go +++ b/vendor/github.com/openshift/origin/pkg/authorization/api/types.go @@ -105,6 +105,8 @@ type RoleBinding struct { RoleRef kapi.ObjectReference } +type RolesByName map[string]*Role + // +genclient=true // Policy is a object that holds all the Roles for a particular namespace. There is at most @@ -117,9 +119,11 @@ type Policy struct { LastModified unversioned.Time // Roles holds all the Roles held by this Policy, mapped by Role.Name - Roles map[string]*Role + Roles RolesByName } +type RoleBindingsByName map[string]*RoleBinding + // PolicyBinding is a object that holds all the RoleBindings for a particular namespace. There is // one PolicyBinding document per referenced Policy namespace type PolicyBinding struct { @@ -133,7 +137,7 @@ type PolicyBinding struct { // PolicyRef is a reference to the Policy that contains all the Roles that this PolicyBinding's RoleBindings may reference PolicyRef kapi.ObjectReference // RoleBindings holds all the RoleBindings held by this PolicyBinding, mapped by RoleBinding.Name - RoleBindings map[string]*RoleBinding + RoleBindings RoleBindingsByName } // SelfSubjectRulesReview is a resource you can create to determine which actions you can perform in a namespace @@ -171,8 +175,10 @@ type ResourceAccessReviewResponse struct { // Namespace is the namespace used for the access review Namespace string // Users is the list of users who can perform the action + // +k8s:conversion-gen=false Users sets.String // Groups is the list of groups who can perform the action + // +k8s:conversion-gen=false Groups sets.String // EvaluationError is an indication that some error occurred during resolution, but partial results can still be returned. @@ -187,7 +193,7 @@ type ResourceAccessReview struct { unversioned.TypeMeta // Action describes the action being tested - Action AuthorizationAttributes + Action } // SubjectAccessReviewResponse describes whether or not a user or group can perform an action @@ -200,6 +206,10 @@ type SubjectAccessReviewResponse struct { Allowed bool // Reason is optional. It indicates why a request was allowed or denied. Reason string + // EvaluationError is an indication that some error occurred during the authorization check. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. This is + // most common when a bound role is missing, but enough roles are still present and bound to reason about the request. + EvaluationError string } // SubjectAccessReview is an object for requesting information about whether a user or group can perform an action @@ -207,10 +217,11 @@ type SubjectAccessReview struct { unversioned.TypeMeta // Action describes the action being tested - Action AuthorizationAttributes + Action // User is optional. If both User and Groups are empty, the current authenticated user is used. User string // Groups is optional. Groups is the list of groups to which the User belongs. + // +k8s:conversion-gen=false Groups sets.String // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". // Nil for a self-SAR, means "use the scopes on this request". @@ -223,7 +234,7 @@ type LocalResourceAccessReview struct { unversioned.TypeMeta // Action describes the action being tested - Action AuthorizationAttributes + Action } // LocalSubjectAccessReview is an object for requesting information about whether a user or group can perform an action in a particular namespace @@ -231,10 +242,11 @@ type LocalSubjectAccessReview struct { unversioned.TypeMeta // Action describes the action being tested. The Namespace element is FORCED to the current namespace. - Action AuthorizationAttributes + Action // User is optional. If both User and Groups are empty, the current authenticated user is used. User string // Groups is optional. Groups is the list of groups to which the User belongs. + // +k8s:conversion-gen=false Groups sets.String // Scopes to use for the evaluation. Empty means "use the unscoped (full) permissions of the user/groups". // Nil for a self-SAR, means "use the scopes on this request". @@ -242,8 +254,8 @@ type LocalSubjectAccessReview struct { Scopes []string } -// AuthorizationAttributes describes a request to be authorized -type AuthorizationAttributes struct { +// Action describes a request to be authorized +type Action struct { // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces Namespace string // Verb is one of: get, list, watch, create, update, delete @@ -327,6 +339,8 @@ type ClusterRoleBinding struct { RoleRef kapi.ObjectReference } +type ClusterRolesByName map[string]*ClusterRole + // ClusterPolicy is a object that holds all the ClusterRoles for a particular namespace. There is at most // one ClusterPolicy document per namespace. type ClusterPolicy struct { @@ -338,9 +352,11 @@ type ClusterPolicy struct { LastModified unversioned.Time // Roles holds all the ClusterRoles held by this ClusterPolicy, mapped by Role.Name - Roles map[string]*ClusterRole + Roles ClusterRolesByName } +type ClusterRoleBindingsByName map[string]*ClusterRoleBinding + // ClusterPolicyBinding is a object that holds all the ClusterRoleBindings for a particular namespace. There is // one ClusterPolicyBinding document per referenced ClusterPolicy namespace type ClusterPolicyBinding struct { @@ -354,7 +370,7 @@ type ClusterPolicyBinding struct { // ClusterPolicyRef is a reference to the ClusterPolicy that contains all the ClusterRoles that this ClusterPolicyBinding's RoleBindings may reference PolicyRef kapi.ObjectReference // RoleBindings holds all the RoleBindings held by this ClusterPolicyBinding, mapped by RoleBinding.Name - RoleBindings map[string]*ClusterRoleBinding + RoleBindings ClusterRoleBindingsByName } // ClusterPolicyList is a collection of ClusterPolicies diff --git a/vendor/github.com/openshift/origin/pkg/authorization/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/authorization/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..094e0d7d --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/authorization/api/zz_generated.deepcopy.go @@ -0,0 +1,690 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + sets "k8s.io/kubernetes/pkg/util/sets" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Action, InType: reflect.TypeOf(&Action{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterPolicy, InType: reflect.TypeOf(&ClusterPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterPolicyBinding, InType: reflect.TypeOf(&ClusterPolicyBinding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterPolicyBindingList, InType: reflect.TypeOf(&ClusterPolicyBindingList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterPolicyList, InType: reflect.TypeOf(&ClusterPolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterRole, InType: reflect.TypeOf(&ClusterRole{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterRoleBinding, InType: reflect.TypeOf(&ClusterRoleBinding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterRoleBindingList, InType: reflect.TypeOf(&ClusterRoleBindingList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterRoleList, InType: reflect.TypeOf(&ClusterRoleList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_IsPersonalSubjectAccessReview, InType: reflect.TypeOf(&IsPersonalSubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LocalResourceAccessReview, InType: reflect.TypeOf(&LocalResourceAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LocalSubjectAccessReview, InType: reflect.TypeOf(&LocalSubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Policy, InType: reflect.TypeOf(&Policy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PolicyBinding, InType: reflect.TypeOf(&PolicyBinding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PolicyBindingList, InType: reflect.TypeOf(&PolicyBindingList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PolicyList, InType: reflect.TypeOf(&PolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PolicyRule, InType: reflect.TypeOf(&PolicyRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PolicyRuleBuilder, InType: reflect.TypeOf(&PolicyRuleBuilder{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceAccessReview, InType: reflect.TypeOf(&ResourceAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceAccessReviewResponse, InType: reflect.TypeOf(&ResourceAccessReviewResponse{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Role, InType: reflect.TypeOf(&Role{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RoleBinding, InType: reflect.TypeOf(&RoleBinding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RoleBindingList, InType: reflect.TypeOf(&RoleBindingList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RoleList, InType: reflect.TypeOf(&RoleList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SelfSubjectRulesReview, InType: reflect.TypeOf(&SelfSubjectRulesReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SelfSubjectRulesReviewSpec, InType: reflect.TypeOf(&SelfSubjectRulesReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SubjectAccessReview, InType: reflect.TypeOf(&SubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SubjectAccessReviewResponse, InType: reflect.TypeOf(&SubjectAccessReviewResponse{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SubjectRulesReviewStatus, InType: reflect.TypeOf(&SubjectRulesReviewStatus{})}, + ) +} + +func DeepCopy_api_Action(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Action) + out := out.(*Action) + out.Namespace = in.Namespace + out.Verb = in.Verb + out.Group = in.Group + out.Version = in.Version + out.Resource = in.Resource + out.ResourceName = in.ResourceName + if in.Content == nil { + out.Content = nil + } else if newVal, err := c.DeepCopy(&in.Content); err != nil { + return err + } else { + out.Content = *newVal.(*runtime.Object) + } + return nil + } +} + +func DeepCopy_api_ClusterPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterPolicy) + out := out.(*ClusterPolicy) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.LastModified = in.LastModified.DeepCopy() + if in.Roles != nil { + in, out := &in.Roles, &out.Roles + *out = make(ClusterRolesByName) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(**ClusterRole) + } + } + } else { + out.Roles = nil + } + return nil + } +} + +func DeepCopy_api_ClusterPolicyBinding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterPolicyBinding) + out := out.(*ClusterPolicyBinding) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.LastModified = in.LastModified.DeepCopy() + out.PolicyRef = in.PolicyRef + if in.RoleBindings != nil { + in, out := &in.RoleBindings, &out.RoleBindings + *out = make(ClusterRoleBindingsByName) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(**ClusterRoleBinding) + } + } + } else { + out.RoleBindings = nil + } + return nil + } +} + +func DeepCopy_api_ClusterPolicyBindingList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterPolicyBindingList) + out := out.(*ClusterPolicyBindingList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterPolicyBinding, len(*in)) + for i := range *in { + if err := DeepCopy_api_ClusterPolicyBinding(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ClusterPolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterPolicyList) + out := out.(*ClusterPolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_api_ClusterPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ClusterRole(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRole) + out := out.(*ClusterRole) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + if err := DeepCopy_api_PolicyRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_api_ClusterRoleBinding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleBinding) + out := out.(*ClusterRoleBinding) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subjects != nil { + in, out := &in.Subjects, &out.Subjects + *out = make([]pkg_api.ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Subjects = nil + } + out.RoleRef = in.RoleRef + return nil + } +} + +func DeepCopy_api_ClusterRoleBindingList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleBindingList) + out := out.(*ClusterRoleBindingList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterRoleBinding, len(*in)) + for i := range *in { + if err := DeepCopy_api_ClusterRoleBinding(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ClusterRoleList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleList) + out := out.(*ClusterRoleList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterRole, len(*in)) + for i := range *in { + if err := DeepCopy_api_ClusterRole(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_IsPersonalSubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IsPersonalSubjectAccessReview) + out := out.(*IsPersonalSubjectAccessReview) + out.TypeMeta = in.TypeMeta + return nil + } +} + +func DeepCopy_api_LocalResourceAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LocalResourceAccessReview) + out := out.(*LocalResourceAccessReview) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_Action(&in.Action, &out.Action, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_LocalSubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LocalSubjectAccessReview) + out := out.(*LocalSubjectAccessReview) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_Action(&in.Action, &out.Action, c); err != nil { + return err + } + out.User = in.User + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make(sets.String) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Groups = nil + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Scopes = nil + } + return nil + } +} + +func DeepCopy_api_Policy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Policy) + out := out.(*Policy) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.LastModified = in.LastModified.DeepCopy() + if in.Roles != nil { + in, out := &in.Roles, &out.Roles + *out = make(RolesByName) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(**Role) + } + } + } else { + out.Roles = nil + } + return nil + } +} + +func DeepCopy_api_PolicyBinding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PolicyBinding) + out := out.(*PolicyBinding) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.LastModified = in.LastModified.DeepCopy() + out.PolicyRef = in.PolicyRef + if in.RoleBindings != nil { + in, out := &in.RoleBindings, &out.RoleBindings + *out = make(RoleBindingsByName) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(**RoleBinding) + } + } + } else { + out.RoleBindings = nil + } + return nil + } +} + +func DeepCopy_api_PolicyBindingList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PolicyBindingList) + out := out.(*PolicyBindingList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PolicyBinding, len(*in)) + for i := range *in { + if err := DeepCopy_api_PolicyBinding(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PolicyList) + out := out.(*PolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Policy, len(*in)) + for i := range *in { + if err := DeepCopy_api_Policy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PolicyRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PolicyRule) + out := out.(*PolicyRule) + if in.Verbs != nil { + in, out := &in.Verbs, &out.Verbs + *out = make(sets.String) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Verbs = nil + } + if in.AttributeRestrictions == nil { + out.AttributeRestrictions = nil + } else if newVal, err := c.DeepCopy(&in.AttributeRestrictions); err != nil { + return err + } else { + out.AttributeRestrictions = *newVal.(*runtime.Object) + } + if in.APIGroups != nil { + in, out := &in.APIGroups, &out.APIGroups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.APIGroups = nil + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make(sets.String) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Resources = nil + } + if in.ResourceNames != nil { + in, out := &in.ResourceNames, &out.ResourceNames + *out = make(sets.String) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.ResourceNames = nil + } + if in.NonResourceURLs != nil { + in, out := &in.NonResourceURLs, &out.NonResourceURLs + *out = make(sets.String) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.NonResourceURLs = nil + } + return nil + } +} + +func DeepCopy_api_PolicyRuleBuilder(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PolicyRuleBuilder) + out := out.(*PolicyRuleBuilder) + if err := DeepCopy_api_PolicyRule(&in.PolicyRule, &out.PolicyRule, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ResourceAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceAccessReview) + out := out.(*ResourceAccessReview) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_Action(&in.Action, &out.Action, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ResourceAccessReviewResponse(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceAccessReviewResponse) + out := out.(*ResourceAccessReviewResponse) + out.TypeMeta = in.TypeMeta + out.Namespace = in.Namespace + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make(sets.String) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Users = nil + } + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make(sets.String) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Groups = nil + } + out.EvaluationError = in.EvaluationError + return nil + } +} + +func DeepCopy_api_Role(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Role) + out := out.(*Role) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + if err := DeepCopy_api_PolicyRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_api_RoleBinding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleBinding) + out := out.(*RoleBinding) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subjects != nil { + in, out := &in.Subjects, &out.Subjects + *out = make([]pkg_api.ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Subjects = nil + } + out.RoleRef = in.RoleRef + return nil + } +} + +func DeepCopy_api_RoleBindingList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleBindingList) + out := out.(*RoleBindingList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RoleBinding, len(*in)) + for i := range *in { + if err := DeepCopy_api_RoleBinding(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_RoleList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleList) + out := out.(*RoleList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Role, len(*in)) + for i := range *in { + if err := DeepCopy_api_Role(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_SelfSubjectRulesReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SelfSubjectRulesReview) + out := out.(*SelfSubjectRulesReview) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_SelfSubjectRulesReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_SubjectRulesReviewStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_SelfSubjectRulesReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SelfSubjectRulesReviewSpec) + out := out.(*SelfSubjectRulesReviewSpec) + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Scopes = nil + } + return nil + } +} + +func DeepCopy_api_SubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectAccessReview) + out := out.(*SubjectAccessReview) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_Action(&in.Action, &out.Action, c); err != nil { + return err + } + out.User = in.User + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make(sets.String) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Groups = nil + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Scopes = nil + } + return nil + } +} + +func DeepCopy_api_SubjectAccessReviewResponse(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectAccessReviewResponse) + out := out.(*SubjectAccessReviewResponse) + out.TypeMeta = in.TypeMeta + out.Namespace = in.Namespace + out.Allowed = in.Allowed + out.Reason = in.Reason + out.EvaluationError = in.EvaluationError + return nil + } +} + +func DeepCopy_api_SubjectRulesReviewStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectRulesReviewStatus) + out := out.(*SubjectRulesReviewStatus) + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + if err := DeepCopy_api_PolicyRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + out.EvaluationError = in.EvaluationError + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/authorization/reaper/cluster_role.go b/vendor/github.com/openshift/origin/pkg/authorization/reaper/cluster_role.go new file mode 100644 index 00000000..6e4739cc --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/authorization/reaper/cluster_role.go @@ -0,0 +1,60 @@ +package reaper + +import ( + "time" + + "github.com/golang/glog" + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/kubectl" + + "github.com/openshift/origin/pkg/client" +) + +func NewClusterRoleReaper(roleClient client.ClusterRolesInterface, clusterBindingClient client.ClusterRoleBindingsInterface, bindingClient client.RoleBindingsNamespacer) kubectl.Reaper { + return &ClusterRoleReaper{ + roleClient: roleClient, + clusterBindingClient: clusterBindingClient, + bindingClient: bindingClient, + } +} + +type ClusterRoleReaper struct { + roleClient client.ClusterRolesInterface + clusterBindingClient client.ClusterRoleBindingsInterface + bindingClient client.RoleBindingsNamespacer +} + +// Stop on a reaper is actually used for deletion. In this case, we'll delete referencing clusterroleclusterBindings +// then delete the clusterrole. +func (r *ClusterRoleReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *kapi.DeleteOptions) error { + clusterBindings, err := r.clusterBindingClient.ClusterRoleBindings().List(kapi.ListOptions{}) + if err != nil { + return err + } + for _, clusterBinding := range clusterBindings.Items { + if clusterBinding.RoleRef.Name == name { + if err := r.clusterBindingClient.ClusterRoleBindings().Delete(clusterBinding.Name); err != nil && !kerrors.IsNotFound(err) { + glog.Infof("Cannot delete clusterrolebinding/%s: %v", clusterBinding.Name, err) + } + } + } + + namespacedBindings, err := r.bindingClient.RoleBindings(kapi.NamespaceNone).List(kapi.ListOptions{}) + if err != nil { + return err + } + for _, namespacedBinding := range namespacedBindings.Items { + if namespacedBinding.RoleRef.Namespace == kapi.NamespaceNone && namespacedBinding.RoleRef.Name == name { + if err := r.bindingClient.RoleBindings(namespacedBinding.Namespace).Delete(namespacedBinding.Name); err != nil && !kerrors.IsNotFound(err) { + glog.Infof("Cannot delete rolebinding/%s in %s: %v", namespacedBinding.Name, namespacedBinding.Namespace, err) + } + } + } + + if err := r.roleClient.ClusterRoles().Delete(name); err != nil && !kerrors.IsNotFound(err) { + return err + } + + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/authorization/reaper/role.go b/vendor/github.com/openshift/origin/pkg/authorization/reaper/role.go new file mode 100644 index 00000000..1baffd37 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/authorization/reaper/role.go @@ -0,0 +1,47 @@ +package reaper + +import ( + "time" + + "github.com/golang/glog" + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/kubectl" + + "github.com/openshift/origin/pkg/client" +) + +func NewRoleReaper(roleClient client.RolesNamespacer, bindingClient client.RoleBindingsNamespacer) kubectl.Reaper { + return &RoleReaper{ + roleClient: roleClient, + bindingClient: bindingClient, + } +} + +type RoleReaper struct { + roleClient client.RolesNamespacer + bindingClient client.RoleBindingsNamespacer +} + +// Stop on a reaper is actually used for deletion. In this case, we'll delete referencing rolebindings +// then delete the role. +func (r *RoleReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *kapi.DeleteOptions) error { + bindings, err := r.bindingClient.RoleBindings(namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + for _, binding := range bindings.Items { + if binding.RoleRef.Namespace == namespace && binding.RoleRef.Name == name { + if err := r.bindingClient.RoleBindings(namespace).Delete(binding.Name); err != nil && !kerrors.IsNotFound(err) { + glog.Infof("Cannot delete rolebinding/%s: %v", binding.Name, err) + } + } + } + + if err := r.roleClient.Roles(namespace).Delete(name); err != nil && !kerrors.IsNotFound(err) { + return err + } + + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/build/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/build/api/deep_copy_generated.go deleted file mode 100644 index 9e345c95..00000000 --- a/vendor/github.com/openshift/origin/pkg/build/api/deep_copy_generated.go +++ /dev/null @@ -1,937 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_BinaryBuildRequestOptions, - DeepCopy_api_BinaryBuildSource, - DeepCopy_api_Build, - DeepCopy_api_BuildConfig, - DeepCopy_api_BuildConfigList, - DeepCopy_api_BuildConfigSpec, - DeepCopy_api_BuildConfigStatus, - DeepCopy_api_BuildList, - DeepCopy_api_BuildLog, - DeepCopy_api_BuildLogOptions, - DeepCopy_api_BuildOutput, - DeepCopy_api_BuildPostCommitSpec, - DeepCopy_api_BuildRequest, - DeepCopy_api_BuildSource, - DeepCopy_api_BuildSpec, - DeepCopy_api_BuildStatus, - DeepCopy_api_BuildStrategy, - DeepCopy_api_BuildTriggerCause, - DeepCopy_api_BuildTriggerPolicy, - DeepCopy_api_CommonSpec, - DeepCopy_api_CustomBuildStrategy, - DeepCopy_api_DockerBuildStrategy, - DeepCopy_api_GenericWebHookCause, - DeepCopy_api_GenericWebHookEvent, - DeepCopy_api_GitBuildSource, - DeepCopy_api_GitHubWebHookCause, - DeepCopy_api_GitInfo, - DeepCopy_api_GitRefInfo, - DeepCopy_api_GitSourceRevision, - DeepCopy_api_ImageChangeCause, - DeepCopy_api_ImageChangeTrigger, - DeepCopy_api_ImageSource, - DeepCopy_api_ImageSourcePath, - DeepCopy_api_JenkinsPipelineBuildStrategy, - DeepCopy_api_SecretBuildSource, - DeepCopy_api_SecretSpec, - DeepCopy_api_SourceBuildStrategy, - DeepCopy_api_SourceControlUser, - DeepCopy_api_SourceRevision, - DeepCopy_api_WebHookTrigger, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_BinaryBuildRequestOptions(in BinaryBuildRequestOptions, out *BinaryBuildRequestOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.AsFile = in.AsFile - out.Commit = in.Commit - out.Message = in.Message - out.AuthorName = in.AuthorName - out.AuthorEmail = in.AuthorEmail - out.CommitterName = in.CommitterName - out.CommitterEmail = in.CommitterEmail - return nil -} - -func DeepCopy_api_BinaryBuildSource(in BinaryBuildSource, out *BinaryBuildSource, c *conversion.Cloner) error { - out.AsFile = in.AsFile - return nil -} - -func DeepCopy_api_Build(in Build, out *Build, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_BuildSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_BuildStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_BuildConfig(in BuildConfig, out *BuildConfig, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_BuildConfigSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_BuildConfigStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_BuildConfigList(in BuildConfigList, out *BuildConfigList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]BuildConfig, len(in)) - for i := range in { - if err := DeepCopy_api_BuildConfig(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_BuildConfigSpec(in BuildConfigSpec, out *BuildConfigSpec, c *conversion.Cloner) error { - if in.Triggers != nil { - in, out := in.Triggers, &out.Triggers - *out = make([]BuildTriggerPolicy, len(in)) - for i := range in { - if err := DeepCopy_api_BuildTriggerPolicy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Triggers = nil - } - out.RunPolicy = in.RunPolicy - if err := DeepCopy_api_CommonSpec(in.CommonSpec, &out.CommonSpec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_BuildConfigStatus(in BuildConfigStatus, out *BuildConfigStatus, c *conversion.Cloner) error { - out.LastVersion = in.LastVersion - return nil -} - -func DeepCopy_api_BuildList(in BuildList, out *BuildList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Build, len(in)) - for i := range in { - if err := DeepCopy_api_Build(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_BuildLog(in BuildLog, out *BuildLog, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_BuildLogOptions(in BuildLogOptions, out *BuildLogOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Container = in.Container - out.Follow = in.Follow - out.Previous = in.Previous - if in.SinceSeconds != nil { - in, out := in.SinceSeconds, &out.SinceSeconds - *out = new(int64) - **out = *in - } else { - out.SinceSeconds = nil - } - if in.SinceTime != nil { - in, out := in.SinceTime, &out.SinceTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.SinceTime = nil - } - out.Timestamps = in.Timestamps - if in.TailLines != nil { - in, out := in.TailLines, &out.TailLines - *out = new(int64) - **out = *in - } else { - out.TailLines = nil - } - if in.LimitBytes != nil { - in, out := in.LimitBytes, &out.LimitBytes - *out = new(int64) - **out = *in - } else { - out.LimitBytes = nil - } - out.NoWait = in.NoWait - if in.Version != nil { - in, out := in.Version, &out.Version - *out = new(int64) - **out = *in - } else { - out.Version = nil - } - return nil -} - -func DeepCopy_api_BuildOutput(in BuildOutput, out *BuildOutput, c *conversion.Cloner) error { - if in.To != nil { - in, out := in.To, &out.To - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.To = nil - } - if in.PushSecret != nil { - in, out := in.PushSecret, &out.PushSecret - *out = new(api.LocalObjectReference) - if err := api.DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.PushSecret = nil - } - return nil -} - -func DeepCopy_api_BuildPostCommitSpec(in BuildPostCommitSpec, out *BuildPostCommitSpec, c *conversion.Cloner) error { - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - if in.Args != nil { - in, out := in.Args, &out.Args - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Args = nil - } - out.Script = in.Script - return nil -} - -func DeepCopy_api_BuildRequest(in BuildRequest, out *BuildRequest, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Revision != nil { - in, out := in.Revision, &out.Revision - *out = new(SourceRevision) - if err := DeepCopy_api_SourceRevision(*in, *out, c); err != nil { - return err - } - } else { - out.Revision = nil - } - if in.TriggeredByImage != nil { - in, out := in.TriggeredByImage, &out.TriggeredByImage - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.TriggeredByImage = nil - } - if in.From != nil { - in, out := in.From, &out.From - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.From = nil - } - if in.Binary != nil { - in, out := in.Binary, &out.Binary - *out = new(BinaryBuildSource) - if err := DeepCopy_api_BinaryBuildSource(*in, *out, c); err != nil { - return err - } - } else { - out.Binary = nil - } - if in.LastVersion != nil { - in, out := in.LastVersion, &out.LastVersion - *out = new(int64) - **out = *in - } else { - out.LastVersion = nil - } - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]api.EnvVar, len(in)) - for i := range in { - if err := api.DeepCopy_api_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - if in.TriggeredBy != nil { - in, out := in.TriggeredBy, &out.TriggeredBy - *out = make([]BuildTriggerCause, len(in)) - for i := range in { - if err := DeepCopy_api_BuildTriggerCause(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.TriggeredBy = nil - } - return nil -} - -func DeepCopy_api_BuildSource(in BuildSource, out *BuildSource, c *conversion.Cloner) error { - if in.Binary != nil { - in, out := in.Binary, &out.Binary - *out = new(BinaryBuildSource) - if err := DeepCopy_api_BinaryBuildSource(*in, *out, c); err != nil { - return err - } - } else { - out.Binary = nil - } - if in.Dockerfile != nil { - in, out := in.Dockerfile, &out.Dockerfile - *out = new(string) - **out = *in - } else { - out.Dockerfile = nil - } - if in.Git != nil { - in, out := in.Git, &out.Git - *out = new(GitBuildSource) - if err := DeepCopy_api_GitBuildSource(*in, *out, c); err != nil { - return err - } - } else { - out.Git = nil - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ImageSource, len(in)) - for i := range in { - if err := DeepCopy_api_ImageSource(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - out.ContextDir = in.ContextDir - if in.SourceSecret != nil { - in, out := in.SourceSecret, &out.SourceSecret - *out = new(api.LocalObjectReference) - if err := api.DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SourceSecret = nil - } - if in.Secrets != nil { - in, out := in.Secrets, &out.Secrets - *out = make([]SecretBuildSource, len(in)) - for i := range in { - if err := DeepCopy_api_SecretBuildSource(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Secrets = nil - } - return nil -} - -func DeepCopy_api_BuildSpec(in BuildSpec, out *BuildSpec, c *conversion.Cloner) error { - if err := DeepCopy_api_CommonSpec(in.CommonSpec, &out.CommonSpec, c); err != nil { - return err - } - if in.TriggeredBy != nil { - in, out := in.TriggeredBy, &out.TriggeredBy - *out = make([]BuildTriggerCause, len(in)) - for i := range in { - if err := DeepCopy_api_BuildTriggerCause(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.TriggeredBy = nil - } - return nil -} - -func DeepCopy_api_BuildStatus(in BuildStatus, out *BuildStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - out.Cancelled = in.Cancelled - out.Reason = in.Reason - out.Message = in.Message - if in.StartTimestamp != nil { - in, out := in.StartTimestamp, &out.StartTimestamp - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.StartTimestamp = nil - } - if in.CompletionTimestamp != nil { - in, out := in.CompletionTimestamp, &out.CompletionTimestamp - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.CompletionTimestamp = nil - } - out.Duration = in.Duration - out.OutputDockerImageReference = in.OutputDockerImageReference - if in.Config != nil { - in, out := in.Config, &out.Config - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.Config = nil - } - return nil -} - -func DeepCopy_api_BuildStrategy(in BuildStrategy, out *BuildStrategy, c *conversion.Cloner) error { - if in.DockerStrategy != nil { - in, out := in.DockerStrategy, &out.DockerStrategy - *out = new(DockerBuildStrategy) - if err := DeepCopy_api_DockerBuildStrategy(*in, *out, c); err != nil { - return err - } - } else { - out.DockerStrategy = nil - } - if in.SourceStrategy != nil { - in, out := in.SourceStrategy, &out.SourceStrategy - *out = new(SourceBuildStrategy) - if err := DeepCopy_api_SourceBuildStrategy(*in, *out, c); err != nil { - return err - } - } else { - out.SourceStrategy = nil - } - if in.CustomStrategy != nil { - in, out := in.CustomStrategy, &out.CustomStrategy - *out = new(CustomBuildStrategy) - if err := DeepCopy_api_CustomBuildStrategy(*in, *out, c); err != nil { - return err - } - } else { - out.CustomStrategy = nil - } - if in.JenkinsPipelineStrategy != nil { - in, out := in.JenkinsPipelineStrategy, &out.JenkinsPipelineStrategy - *out = new(JenkinsPipelineBuildStrategy) - if err := DeepCopy_api_JenkinsPipelineBuildStrategy(*in, *out, c); err != nil { - return err - } - } else { - out.JenkinsPipelineStrategy = nil - } - return nil -} - -func DeepCopy_api_BuildTriggerCause(in BuildTriggerCause, out *BuildTriggerCause, c *conversion.Cloner) error { - out.Message = in.Message - if in.GenericWebHook != nil { - in, out := in.GenericWebHook, &out.GenericWebHook - *out = new(GenericWebHookCause) - if err := DeepCopy_api_GenericWebHookCause(*in, *out, c); err != nil { - return err - } - } else { - out.GenericWebHook = nil - } - if in.GitHubWebHook != nil { - in, out := in.GitHubWebHook, &out.GitHubWebHook - *out = new(GitHubWebHookCause) - if err := DeepCopy_api_GitHubWebHookCause(*in, *out, c); err != nil { - return err - } - } else { - out.GitHubWebHook = nil - } - if in.ImageChangeBuild != nil { - in, out := in.ImageChangeBuild, &out.ImageChangeBuild - *out = new(ImageChangeCause) - if err := DeepCopy_api_ImageChangeCause(*in, *out, c); err != nil { - return err - } - } else { - out.ImageChangeBuild = nil - } - return nil -} - -func DeepCopy_api_BuildTriggerPolicy(in BuildTriggerPolicy, out *BuildTriggerPolicy, c *conversion.Cloner) error { - out.Type = in.Type - if in.GitHubWebHook != nil { - in, out := in.GitHubWebHook, &out.GitHubWebHook - *out = new(WebHookTrigger) - if err := DeepCopy_api_WebHookTrigger(*in, *out, c); err != nil { - return err - } - } else { - out.GitHubWebHook = nil - } - if in.GenericWebHook != nil { - in, out := in.GenericWebHook, &out.GenericWebHook - *out = new(WebHookTrigger) - if err := DeepCopy_api_WebHookTrigger(*in, *out, c); err != nil { - return err - } - } else { - out.GenericWebHook = nil - } - if in.ImageChange != nil { - in, out := in.ImageChange, &out.ImageChange - *out = new(ImageChangeTrigger) - if err := DeepCopy_api_ImageChangeTrigger(*in, *out, c); err != nil { - return err - } - } else { - out.ImageChange = nil - } - return nil -} - -func DeepCopy_api_CommonSpec(in CommonSpec, out *CommonSpec, c *conversion.Cloner) error { - out.ServiceAccount = in.ServiceAccount - if err := DeepCopy_api_BuildSource(in.Source, &out.Source, c); err != nil { - return err - } - if in.Revision != nil { - in, out := in.Revision, &out.Revision - *out = new(SourceRevision) - if err := DeepCopy_api_SourceRevision(*in, *out, c); err != nil { - return err - } - } else { - out.Revision = nil - } - if err := DeepCopy_api_BuildStrategy(in.Strategy, &out.Strategy, c); err != nil { - return err - } - if err := DeepCopy_api_BuildOutput(in.Output, &out.Output, c); err != nil { - return err - } - if err := api.DeepCopy_api_ResourceRequirements(in.Resources, &out.Resources, c); err != nil { - return err - } - if err := DeepCopy_api_BuildPostCommitSpec(in.PostCommit, &out.PostCommit, c); err != nil { - return err - } - if in.CompletionDeadlineSeconds != nil { - in, out := in.CompletionDeadlineSeconds, &out.CompletionDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.CompletionDeadlineSeconds = nil - } - return nil -} - -func DeepCopy_api_CustomBuildStrategy(in CustomBuildStrategy, out *CustomBuildStrategy, c *conversion.Cloner) error { - if err := api.DeepCopy_api_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - if in.PullSecret != nil { - in, out := in.PullSecret, &out.PullSecret - *out = new(api.LocalObjectReference) - if err := api.DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.PullSecret = nil - } - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]api.EnvVar, len(in)) - for i := range in { - if err := api.DeepCopy_api_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - out.ExposeDockerSocket = in.ExposeDockerSocket - out.ForcePull = in.ForcePull - if in.Secrets != nil { - in, out := in.Secrets, &out.Secrets - *out = make([]SecretSpec, len(in)) - for i := range in { - if err := DeepCopy_api_SecretSpec(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Secrets = nil - } - out.BuildAPIVersion = in.BuildAPIVersion - return nil -} - -func DeepCopy_api_DockerBuildStrategy(in DockerBuildStrategy, out *DockerBuildStrategy, c *conversion.Cloner) error { - if in.From != nil { - in, out := in.From, &out.From - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.From = nil - } - if in.PullSecret != nil { - in, out := in.PullSecret, &out.PullSecret - *out = new(api.LocalObjectReference) - if err := api.DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.PullSecret = nil - } - out.NoCache = in.NoCache - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]api.EnvVar, len(in)) - for i := range in { - if err := api.DeepCopy_api_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - out.ForcePull = in.ForcePull - out.DockerfilePath = in.DockerfilePath - return nil -} - -func DeepCopy_api_GenericWebHookCause(in GenericWebHookCause, out *GenericWebHookCause, c *conversion.Cloner) error { - if in.Revision != nil { - in, out := in.Revision, &out.Revision - *out = new(SourceRevision) - if err := DeepCopy_api_SourceRevision(*in, *out, c); err != nil { - return err - } - } else { - out.Revision = nil - } - out.Secret = in.Secret - return nil -} - -func DeepCopy_api_GenericWebHookEvent(in GenericWebHookEvent, out *GenericWebHookEvent, c *conversion.Cloner) error { - if in.Git != nil { - in, out := in.Git, &out.Git - *out = new(GitInfo) - if err := DeepCopy_api_GitInfo(*in, *out, c); err != nil { - return err - } - } else { - out.Git = nil - } - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]api.EnvVar, len(in)) - for i := range in { - if err := api.DeepCopy_api_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - return nil -} - -func DeepCopy_api_GitBuildSource(in GitBuildSource, out *GitBuildSource, c *conversion.Cloner) error { - out.URI = in.URI - out.Ref = in.Ref - if in.HTTPProxy != nil { - in, out := in.HTTPProxy, &out.HTTPProxy - *out = new(string) - **out = *in - } else { - out.HTTPProxy = nil - } - if in.HTTPSProxy != nil { - in, out := in.HTTPSProxy, &out.HTTPSProxy - *out = new(string) - **out = *in - } else { - out.HTTPSProxy = nil - } - return nil -} - -func DeepCopy_api_GitHubWebHookCause(in GitHubWebHookCause, out *GitHubWebHookCause, c *conversion.Cloner) error { - if in.Revision != nil { - in, out := in.Revision, &out.Revision - *out = new(SourceRevision) - if err := DeepCopy_api_SourceRevision(*in, *out, c); err != nil { - return err - } - } else { - out.Revision = nil - } - out.Secret = in.Secret - return nil -} - -func DeepCopy_api_GitInfo(in GitInfo, out *GitInfo, c *conversion.Cloner) error { - if err := DeepCopy_api_GitBuildSource(in.GitBuildSource, &out.GitBuildSource, c); err != nil { - return err - } - if err := DeepCopy_api_GitSourceRevision(in.GitSourceRevision, &out.GitSourceRevision, c); err != nil { - return err - } - if in.Refs != nil { - in, out := in.Refs, &out.Refs - *out = make([]GitRefInfo, len(in)) - for i := range in { - if err := DeepCopy_api_GitRefInfo(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Refs = nil - } - return nil -} - -func DeepCopy_api_GitRefInfo(in GitRefInfo, out *GitRefInfo, c *conversion.Cloner) error { - if err := DeepCopy_api_GitBuildSource(in.GitBuildSource, &out.GitBuildSource, c); err != nil { - return err - } - if err := DeepCopy_api_GitSourceRevision(in.GitSourceRevision, &out.GitSourceRevision, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_GitSourceRevision(in GitSourceRevision, out *GitSourceRevision, c *conversion.Cloner) error { - out.Commit = in.Commit - if err := DeepCopy_api_SourceControlUser(in.Author, &out.Author, c); err != nil { - return err - } - if err := DeepCopy_api_SourceControlUser(in.Committer, &out.Committer, c); err != nil { - return err - } - out.Message = in.Message - return nil -} - -func DeepCopy_api_ImageChangeCause(in ImageChangeCause, out *ImageChangeCause, c *conversion.Cloner) error { - out.ImageID = in.ImageID - if in.FromRef != nil { - in, out := in.FromRef, &out.FromRef - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.FromRef = nil - } - return nil -} - -func DeepCopy_api_ImageChangeTrigger(in ImageChangeTrigger, out *ImageChangeTrigger, c *conversion.Cloner) error { - out.LastTriggeredImageID = in.LastTriggeredImageID - if in.From != nil { - in, out := in.From, &out.From - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.From = nil - } - return nil -} - -func DeepCopy_api_ImageSource(in ImageSource, out *ImageSource, c *conversion.Cloner) error { - if err := api.DeepCopy_api_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - if in.Paths != nil { - in, out := in.Paths, &out.Paths - *out = make([]ImageSourcePath, len(in)) - for i := range in { - if err := DeepCopy_api_ImageSourcePath(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Paths = nil - } - if in.PullSecret != nil { - in, out := in.PullSecret, &out.PullSecret - *out = new(api.LocalObjectReference) - if err := api.DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.PullSecret = nil - } - return nil -} - -func DeepCopy_api_ImageSourcePath(in ImageSourcePath, out *ImageSourcePath, c *conversion.Cloner) error { - out.SourcePath = in.SourcePath - out.DestinationDir = in.DestinationDir - return nil -} - -func DeepCopy_api_JenkinsPipelineBuildStrategy(in JenkinsPipelineBuildStrategy, out *JenkinsPipelineBuildStrategy, c *conversion.Cloner) error { - out.JenkinsfilePath = in.JenkinsfilePath - out.Jenkinsfile = in.Jenkinsfile - return nil -} - -func DeepCopy_api_SecretBuildSource(in SecretBuildSource, out *SecretBuildSource, c *conversion.Cloner) error { - if err := api.DeepCopy_api_LocalObjectReference(in.Secret, &out.Secret, c); err != nil { - return err - } - out.DestinationDir = in.DestinationDir - return nil -} - -func DeepCopy_api_SecretSpec(in SecretSpec, out *SecretSpec, c *conversion.Cloner) error { - if err := api.DeepCopy_api_LocalObjectReference(in.SecretSource, &out.SecretSource, c); err != nil { - return err - } - out.MountPath = in.MountPath - return nil -} - -func DeepCopy_api_SourceBuildStrategy(in SourceBuildStrategy, out *SourceBuildStrategy, c *conversion.Cloner) error { - if err := api.DeepCopy_api_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - if in.PullSecret != nil { - in, out := in.PullSecret, &out.PullSecret - *out = new(api.LocalObjectReference) - if err := api.DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.PullSecret = nil - } - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]api.EnvVar, len(in)) - for i := range in { - if err := api.DeepCopy_api_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - out.Scripts = in.Scripts - out.Incremental = in.Incremental - out.ForcePull = in.ForcePull - return nil -} - -func DeepCopy_api_SourceControlUser(in SourceControlUser, out *SourceControlUser, c *conversion.Cloner) error { - out.Name = in.Name - out.Email = in.Email - return nil -} - -func DeepCopy_api_SourceRevision(in SourceRevision, out *SourceRevision, c *conversion.Cloner) error { - if in.Git != nil { - in, out := in.Git, &out.Git - *out = new(GitSourceRevision) - if err := DeepCopy_api_GitSourceRevision(*in, *out, c); err != nil { - return err - } - } else { - out.Git = nil - } - return nil -} - -func DeepCopy_api_WebHookTrigger(in WebHookTrigger, out *WebHookTrigger, c *conversion.Cloner) error { - out.Secret = in.Secret - out.AllowEnv = in.AllowEnv - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/build/api/doc.go b/vendor/github.com/openshift/origin/pkg/build/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/build/api/register.go b/vendor/github.com/openshift/origin/pkg/build/api/register.go index ca98ba56..2df00bb3 100644 --- a/vendor/github.com/openshift/origin/pkg/build/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/build/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "build.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,13 +21,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Build{}, &BuildList{}, @@ -37,6 +38,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &BuildLogOptions{}, &BinaryBuildRequestOptions{}, ) + return nil } func (obj *Build) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/build/api/types.go b/vendor/github.com/openshift/origin/pkg/build/api/types.go index 18e1953f..7ca948a4 100644 --- a/vendor/github.com/openshift/origin/pkg/build/api/types.go +++ b/vendor/github.com/openshift/origin/pkg/build/api/types.go @@ -424,7 +424,7 @@ type BuildStrategy struct { CustomStrategy *CustomBuildStrategy // JenkinsPipelineStrategy holds the parameters to the Jenkins Pipeline build strategy. - // This strategy is experimental. + // This strategy is in tech preview. JenkinsPipelineStrategy *JenkinsPipelineBuildStrategy } @@ -512,14 +512,28 @@ type SourceBuildStrategy struct { Scripts string // Incremental flag forces the Source build to do incremental builds if true. - Incremental bool + Incremental *bool // ForcePull describes if the builder should pull the images from registry prior to building. ForcePull bool + + // RuntimeImage is an optional image that is used to run an application + // without unneeded dependencies installed. The building of the application + // is still done in the builder image but, post build, you can copy the + // needed artifacts in the runtime image for use. + // This field and the feature it enables are in tech preview. + RuntimeImage *kapi.ObjectReference + + // RuntimeArtifacts specifies a list of source/destination pairs that will be + // copied from the builder to a runtime image. sourcePath can be a file or + // directory. destinationDir must be a directory. destinationDir can also be + // empty or equal to ".", in this case it just refers to the root of WORKDIR. + // This field and the feature it enables are in tech preview. + RuntimeArtifacts []ImageSourcePath } // JenkinsPipelineStrategy holds parameters specific to a Jenkins Pipeline build. -// This strategy is experimental. +// This strategy is in tech preview. type JenkinsPipelineBuildStrategy struct { // JenkinsfilePath is the optional path of the Jenkinsfile that will be used to configure the pipeline // relative to the root of the context (contextDir). If both JenkinsfilePath & Jenkinsfile are @@ -792,6 +806,7 @@ type GitInfo struct { // Refs is a list of GitRefs for the provided repo - generally sent // when used from a post-receive hook. This field is optional and is // used when sending multiple refs + // +k8s:conversion-gen=false Refs []GitRefInfo } diff --git a/vendor/github.com/openshift/origin/pkg/build/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/build/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..745953ba --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/api/zz_generated.deepcopy.go @@ -0,0 +1,1034 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BinaryBuildRequestOptions, InType: reflect.TypeOf(&BinaryBuildRequestOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BinaryBuildSource, InType: reflect.TypeOf(&BinaryBuildSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Build, InType: reflect.TypeOf(&Build{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildConfig, InType: reflect.TypeOf(&BuildConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildConfigList, InType: reflect.TypeOf(&BuildConfigList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildConfigSpec, InType: reflect.TypeOf(&BuildConfigSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildConfigStatus, InType: reflect.TypeOf(&BuildConfigStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildList, InType: reflect.TypeOf(&BuildList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildLog, InType: reflect.TypeOf(&BuildLog{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildLogOptions, InType: reflect.TypeOf(&BuildLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildOutput, InType: reflect.TypeOf(&BuildOutput{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildPostCommitSpec, InType: reflect.TypeOf(&BuildPostCommitSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildRequest, InType: reflect.TypeOf(&BuildRequest{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildSource, InType: reflect.TypeOf(&BuildSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildSpec, InType: reflect.TypeOf(&BuildSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildStatus, InType: reflect.TypeOf(&BuildStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildStrategy, InType: reflect.TypeOf(&BuildStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildTriggerCause, InType: reflect.TypeOf(&BuildTriggerCause{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_BuildTriggerPolicy, InType: reflect.TypeOf(&BuildTriggerPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_CommonSpec, InType: reflect.TypeOf(&CommonSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_CustomBuildStrategy, InType: reflect.TypeOf(&CustomBuildStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerBuildStrategy, InType: reflect.TypeOf(&DockerBuildStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GenericWebHookCause, InType: reflect.TypeOf(&GenericWebHookCause{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GenericWebHookEvent, InType: reflect.TypeOf(&GenericWebHookEvent{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GitBuildSource, InType: reflect.TypeOf(&GitBuildSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GitHubWebHookCause, InType: reflect.TypeOf(&GitHubWebHookCause{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GitInfo, InType: reflect.TypeOf(&GitInfo{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GitRefInfo, InType: reflect.TypeOf(&GitRefInfo{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GitSourceRevision, InType: reflect.TypeOf(&GitSourceRevision{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageChangeCause, InType: reflect.TypeOf(&ImageChangeCause{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageChangeTrigger, InType: reflect.TypeOf(&ImageChangeTrigger{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageSource, InType: reflect.TypeOf(&ImageSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageSourcePath, InType: reflect.TypeOf(&ImageSourcePath{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_JenkinsPipelineBuildStrategy, InType: reflect.TypeOf(&JenkinsPipelineBuildStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretBuildSource, InType: reflect.TypeOf(&SecretBuildSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretSpec, InType: reflect.TypeOf(&SecretSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SourceBuildStrategy, InType: reflect.TypeOf(&SourceBuildStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SourceControlUser, InType: reflect.TypeOf(&SourceControlUser{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SourceRevision, InType: reflect.TypeOf(&SourceRevision{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_WebHookTrigger, InType: reflect.TypeOf(&WebHookTrigger{})}, + ) +} + +func DeepCopy_api_BinaryBuildRequestOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BinaryBuildRequestOptions) + out := out.(*BinaryBuildRequestOptions) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.AsFile = in.AsFile + out.Commit = in.Commit + out.Message = in.Message + out.AuthorName = in.AuthorName + out.AuthorEmail = in.AuthorEmail + out.CommitterName = in.CommitterName + out.CommitterEmail = in.CommitterEmail + return nil + } +} + +func DeepCopy_api_BinaryBuildSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BinaryBuildSource) + out := out.(*BinaryBuildSource) + out.AsFile = in.AsFile + return nil + } +} + +func DeepCopy_api_Build(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Build) + out := out.(*Build) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_BuildSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_BuildStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_BuildConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildConfig) + out := out.(*BuildConfig) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_BuildConfigSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_api_BuildConfigList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildConfigList) + out := out.(*BuildConfigList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]BuildConfig, len(*in)) + for i := range *in { + if err := DeepCopy_api_BuildConfig(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_BuildConfigSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildConfigSpec) + out := out.(*BuildConfigSpec) + if in.Triggers != nil { + in, out := &in.Triggers, &out.Triggers + *out = make([]BuildTriggerPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_api_BuildTriggerPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Triggers = nil + } + out.RunPolicy = in.RunPolicy + if err := DeepCopy_api_CommonSpec(&in.CommonSpec, &out.CommonSpec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_BuildConfigStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildConfigStatus) + out := out.(*BuildConfigStatus) + out.LastVersion = in.LastVersion + return nil + } +} + +func DeepCopy_api_BuildList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildList) + out := out.(*BuildList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Build, len(*in)) + for i := range *in { + if err := DeepCopy_api_Build(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_BuildLog(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildLog) + out := out.(*BuildLog) + out.TypeMeta = in.TypeMeta + return nil + } +} + +func DeepCopy_api_BuildLogOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildLogOptions) + out := out.(*BuildLogOptions) + out.TypeMeta = in.TypeMeta + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } else { + out.SinceSeconds = nil + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.SinceTime = nil + } + out.Timestamps = in.Timestamps + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } else { + out.TailLines = nil + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } else { + out.LimitBytes = nil + } + out.NoWait = in.NoWait + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(int64) + **out = **in + } else { + out.Version = nil + } + return nil + } +} + +func DeepCopy_api_BuildOutput(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildOutput) + out := out.(*BuildOutput) + if in.To != nil { + in, out := &in.To, &out.To + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.To = nil + } + if in.PushSecret != nil { + in, out := &in.PushSecret, &out.PushSecret + *out = new(pkg_api.LocalObjectReference) + **out = **in + } else { + out.PushSecret = nil + } + return nil + } +} + +func DeepCopy_api_BuildPostCommitSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildPostCommitSpec) + out := out.(*BuildPostCommitSpec) + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Args = nil + } + out.Script = in.Script + return nil + } +} + +func DeepCopy_api_BuildRequest(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildRequest) + out := out.(*BuildRequest) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + if err := DeepCopy_api_SourceRevision(*in, *out, c); err != nil { + return err + } + } else { + out.Revision = nil + } + if in.TriggeredByImage != nil { + in, out := &in.TriggeredByImage, &out.TriggeredByImage + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.TriggeredByImage = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.From = nil + } + if in.Binary != nil { + in, out := &in.Binary, &out.Binary + *out = new(BinaryBuildSource) + **out = **in + } else { + out.Binary = nil + } + if in.LastVersion != nil { + in, out := &in.LastVersion, &out.LastVersion + *out = new(int64) + **out = **in + } else { + out.LastVersion = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]pkg_api.EnvVar, len(*in)) + for i := range *in { + if err := pkg_api.DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + if in.TriggeredBy != nil { + in, out := &in.TriggeredBy, &out.TriggeredBy + *out = make([]BuildTriggerCause, len(*in)) + for i := range *in { + if err := DeepCopy_api_BuildTriggerCause(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.TriggeredBy = nil + } + return nil + } +} + +func DeepCopy_api_BuildSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildSource) + out := out.(*BuildSource) + if in.Binary != nil { + in, out := &in.Binary, &out.Binary + *out = new(BinaryBuildSource) + **out = **in + } else { + out.Binary = nil + } + if in.Dockerfile != nil { + in, out := &in.Dockerfile, &out.Dockerfile + *out = new(string) + **out = **in + } else { + out.Dockerfile = nil + } + if in.Git != nil { + in, out := &in.Git, &out.Git + *out = new(GitBuildSource) + if err := DeepCopy_api_GitBuildSource(*in, *out, c); err != nil { + return err + } + } else { + out.Git = nil + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageSource, len(*in)) + for i := range *in { + if err := DeepCopy_api_ImageSource(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + out.ContextDir = in.ContextDir + if in.SourceSecret != nil { + in, out := &in.SourceSecret, &out.SourceSecret + *out = new(pkg_api.LocalObjectReference) + **out = **in + } else { + out.SourceSecret = nil + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]SecretBuildSource, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Secrets = nil + } + return nil + } +} + +func DeepCopy_api_BuildSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildSpec) + out := out.(*BuildSpec) + if err := DeepCopy_api_CommonSpec(&in.CommonSpec, &out.CommonSpec, c); err != nil { + return err + } + if in.TriggeredBy != nil { + in, out := &in.TriggeredBy, &out.TriggeredBy + *out = make([]BuildTriggerCause, len(*in)) + for i := range *in { + if err := DeepCopy_api_BuildTriggerCause(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.TriggeredBy = nil + } + return nil + } +} + +func DeepCopy_api_BuildStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildStatus) + out := out.(*BuildStatus) + out.Phase = in.Phase + out.Cancelled = in.Cancelled + out.Reason = in.Reason + out.Message = in.Message + if in.StartTimestamp != nil { + in, out := &in.StartTimestamp, &out.StartTimestamp + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTimestamp = nil + } + if in.CompletionTimestamp != nil { + in, out := &in.CompletionTimestamp, &out.CompletionTimestamp + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.CompletionTimestamp = nil + } + out.Duration = in.Duration + out.OutputDockerImageReference = in.OutputDockerImageReference + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.Config = nil + } + return nil + } +} + +func DeepCopy_api_BuildStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildStrategy) + out := out.(*BuildStrategy) + if in.DockerStrategy != nil { + in, out := &in.DockerStrategy, &out.DockerStrategy + *out = new(DockerBuildStrategy) + if err := DeepCopy_api_DockerBuildStrategy(*in, *out, c); err != nil { + return err + } + } else { + out.DockerStrategy = nil + } + if in.SourceStrategy != nil { + in, out := &in.SourceStrategy, &out.SourceStrategy + *out = new(SourceBuildStrategy) + if err := DeepCopy_api_SourceBuildStrategy(*in, *out, c); err != nil { + return err + } + } else { + out.SourceStrategy = nil + } + if in.CustomStrategy != nil { + in, out := &in.CustomStrategy, &out.CustomStrategy + *out = new(CustomBuildStrategy) + if err := DeepCopy_api_CustomBuildStrategy(*in, *out, c); err != nil { + return err + } + } else { + out.CustomStrategy = nil + } + if in.JenkinsPipelineStrategy != nil { + in, out := &in.JenkinsPipelineStrategy, &out.JenkinsPipelineStrategy + *out = new(JenkinsPipelineBuildStrategy) + **out = **in + } else { + out.JenkinsPipelineStrategy = nil + } + return nil + } +} + +func DeepCopy_api_BuildTriggerCause(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildTriggerCause) + out := out.(*BuildTriggerCause) + out.Message = in.Message + if in.GenericWebHook != nil { + in, out := &in.GenericWebHook, &out.GenericWebHook + *out = new(GenericWebHookCause) + if err := DeepCopy_api_GenericWebHookCause(*in, *out, c); err != nil { + return err + } + } else { + out.GenericWebHook = nil + } + if in.GitHubWebHook != nil { + in, out := &in.GitHubWebHook, &out.GitHubWebHook + *out = new(GitHubWebHookCause) + if err := DeepCopy_api_GitHubWebHookCause(*in, *out, c); err != nil { + return err + } + } else { + out.GitHubWebHook = nil + } + if in.ImageChangeBuild != nil { + in, out := &in.ImageChangeBuild, &out.ImageChangeBuild + *out = new(ImageChangeCause) + if err := DeepCopy_api_ImageChangeCause(*in, *out, c); err != nil { + return err + } + } else { + out.ImageChangeBuild = nil + } + return nil + } +} + +func DeepCopy_api_BuildTriggerPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*BuildTriggerPolicy) + out := out.(*BuildTriggerPolicy) + out.Type = in.Type + if in.GitHubWebHook != nil { + in, out := &in.GitHubWebHook, &out.GitHubWebHook + *out = new(WebHookTrigger) + **out = **in + } else { + out.GitHubWebHook = nil + } + if in.GenericWebHook != nil { + in, out := &in.GenericWebHook, &out.GenericWebHook + *out = new(WebHookTrigger) + **out = **in + } else { + out.GenericWebHook = nil + } + if in.ImageChange != nil { + in, out := &in.ImageChange, &out.ImageChange + *out = new(ImageChangeTrigger) + if err := DeepCopy_api_ImageChangeTrigger(*in, *out, c); err != nil { + return err + } + } else { + out.ImageChange = nil + } + return nil + } +} + +func DeepCopy_api_CommonSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CommonSpec) + out := out.(*CommonSpec) + out.ServiceAccount = in.ServiceAccount + if err := DeepCopy_api_BuildSource(&in.Source, &out.Source, c); err != nil { + return err + } + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + if err := DeepCopy_api_SourceRevision(*in, *out, c); err != nil { + return err + } + } else { + out.Revision = nil + } + if err := DeepCopy_api_BuildStrategy(&in.Strategy, &out.Strategy, c); err != nil { + return err + } + if err := DeepCopy_api_BuildOutput(&in.Output, &out.Output, c); err != nil { + return err + } + if err := pkg_api.DeepCopy_api_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + if err := DeepCopy_api_BuildPostCommitSpec(&in.PostCommit, &out.PostCommit, c); err != nil { + return err + } + if in.CompletionDeadlineSeconds != nil { + in, out := &in.CompletionDeadlineSeconds, &out.CompletionDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.CompletionDeadlineSeconds = nil + } + return nil + } +} + +func DeepCopy_api_CustomBuildStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomBuildStrategy) + out := out.(*CustomBuildStrategy) + out.From = in.From + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(pkg_api.LocalObjectReference) + **out = **in + } else { + out.PullSecret = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]pkg_api.EnvVar, len(*in)) + for i := range *in { + if err := pkg_api.DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + out.ExposeDockerSocket = in.ExposeDockerSocket + out.ForcePull = in.ForcePull + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]SecretSpec, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Secrets = nil + } + out.BuildAPIVersion = in.BuildAPIVersion + return nil + } +} + +func DeepCopy_api_DockerBuildStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerBuildStrategy) + out := out.(*DockerBuildStrategy) + if in.From != nil { + in, out := &in.From, &out.From + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.From = nil + } + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(pkg_api.LocalObjectReference) + **out = **in + } else { + out.PullSecret = nil + } + out.NoCache = in.NoCache + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]pkg_api.EnvVar, len(*in)) + for i := range *in { + if err := pkg_api.DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + out.ForcePull = in.ForcePull + out.DockerfilePath = in.DockerfilePath + return nil + } +} + +func DeepCopy_api_GenericWebHookCause(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GenericWebHookCause) + out := out.(*GenericWebHookCause) + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + if err := DeepCopy_api_SourceRevision(*in, *out, c); err != nil { + return err + } + } else { + out.Revision = nil + } + out.Secret = in.Secret + return nil + } +} + +func DeepCopy_api_GenericWebHookEvent(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GenericWebHookEvent) + out := out.(*GenericWebHookEvent) + if in.Git != nil { + in, out := &in.Git, &out.Git + *out = new(GitInfo) + if err := DeepCopy_api_GitInfo(*in, *out, c); err != nil { + return err + } + } else { + out.Git = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]pkg_api.EnvVar, len(*in)) + for i := range *in { + if err := pkg_api.DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + return nil + } +} + +func DeepCopy_api_GitBuildSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitBuildSource) + out := out.(*GitBuildSource) + out.URI = in.URI + out.Ref = in.Ref + if in.HTTPProxy != nil { + in, out := &in.HTTPProxy, &out.HTTPProxy + *out = new(string) + **out = **in + } else { + out.HTTPProxy = nil + } + if in.HTTPSProxy != nil { + in, out := &in.HTTPSProxy, &out.HTTPSProxy + *out = new(string) + **out = **in + } else { + out.HTTPSProxy = nil + } + return nil + } +} + +func DeepCopy_api_GitHubWebHookCause(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitHubWebHookCause) + out := out.(*GitHubWebHookCause) + if in.Revision != nil { + in, out := &in.Revision, &out.Revision + *out = new(SourceRevision) + if err := DeepCopy_api_SourceRevision(*in, *out, c); err != nil { + return err + } + } else { + out.Revision = nil + } + out.Secret = in.Secret + return nil + } +} + +func DeepCopy_api_GitInfo(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitInfo) + out := out.(*GitInfo) + if err := DeepCopy_api_GitBuildSource(&in.GitBuildSource, &out.GitBuildSource, c); err != nil { + return err + } + out.GitSourceRevision = in.GitSourceRevision + if in.Refs != nil { + in, out := &in.Refs, &out.Refs + *out = make([]GitRefInfo, len(*in)) + for i := range *in { + if err := DeepCopy_api_GitRefInfo(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Refs = nil + } + return nil + } +} + +func DeepCopy_api_GitRefInfo(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitRefInfo) + out := out.(*GitRefInfo) + if err := DeepCopy_api_GitBuildSource(&in.GitBuildSource, &out.GitBuildSource, c); err != nil { + return err + } + out.GitSourceRevision = in.GitSourceRevision + return nil + } +} + +func DeepCopy_api_GitSourceRevision(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitSourceRevision) + out := out.(*GitSourceRevision) + out.Commit = in.Commit + out.Author = in.Author + out.Committer = in.Committer + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_ImageChangeCause(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageChangeCause) + out := out.(*ImageChangeCause) + out.ImageID = in.ImageID + if in.FromRef != nil { + in, out := &in.FromRef, &out.FromRef + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.FromRef = nil + } + return nil + } +} + +func DeepCopy_api_ImageChangeTrigger(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageChangeTrigger) + out := out.(*ImageChangeTrigger) + out.LastTriggeredImageID = in.LastTriggeredImageID + if in.From != nil { + in, out := &in.From, &out.From + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.From = nil + } + return nil + } +} + +func DeepCopy_api_ImageSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageSource) + out := out.(*ImageSource) + out.From = in.From + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]ImageSourcePath, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Paths = nil + } + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(pkg_api.LocalObjectReference) + **out = **in + } else { + out.PullSecret = nil + } + return nil + } +} + +func DeepCopy_api_ImageSourcePath(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageSourcePath) + out := out.(*ImageSourcePath) + out.SourcePath = in.SourcePath + out.DestinationDir = in.DestinationDir + return nil + } +} + +func DeepCopy_api_JenkinsPipelineBuildStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JenkinsPipelineBuildStrategy) + out := out.(*JenkinsPipelineBuildStrategy) + out.JenkinsfilePath = in.JenkinsfilePath + out.Jenkinsfile = in.Jenkinsfile + return nil + } +} + +func DeepCopy_api_SecretBuildSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretBuildSource) + out := out.(*SecretBuildSource) + out.Secret = in.Secret + out.DestinationDir = in.DestinationDir + return nil + } +} + +func DeepCopy_api_SecretSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretSpec) + out := out.(*SecretSpec) + out.SecretSource = in.SecretSource + out.MountPath = in.MountPath + return nil + } +} + +func DeepCopy_api_SourceBuildStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SourceBuildStrategy) + out := out.(*SourceBuildStrategy) + out.From = in.From + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(pkg_api.LocalObjectReference) + **out = **in + } else { + out.PullSecret = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]pkg_api.EnvVar, len(*in)) + for i := range *in { + if err := pkg_api.DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + out.Scripts = in.Scripts + if in.Incremental != nil { + in, out := &in.Incremental, &out.Incremental + *out = new(bool) + **out = **in + } else { + out.Incremental = nil + } + out.ForcePull = in.ForcePull + if in.RuntimeImage != nil { + in, out := &in.RuntimeImage, &out.RuntimeImage + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.RuntimeImage = nil + } + if in.RuntimeArtifacts != nil { + in, out := &in.RuntimeArtifacts, &out.RuntimeArtifacts + *out = make([]ImageSourcePath, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.RuntimeArtifacts = nil + } + return nil + } +} + +func DeepCopy_api_SourceControlUser(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SourceControlUser) + out := out.(*SourceControlUser) + out.Name = in.Name + out.Email = in.Email + return nil + } +} + +func DeepCopy_api_SourceRevision(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SourceRevision) + out := out.(*SourceRevision) + if in.Git != nil { + in, out := &in.Git, &out.Git + *out = new(GitSourceRevision) + **out = **in + } else { + out.Git = nil + } + return nil + } +} + +func DeepCopy_api_WebHookTrigger(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*WebHookTrigger) + out := out.(*WebHookTrigger) + out.Secret = in.Secret + out.AllowEnv = in.AllowEnv + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/build/client/clients.go b/vendor/github.com/openshift/origin/pkg/build/client/clients.go new file mode 100644 index 00000000..00d70144 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/client/clients.go @@ -0,0 +1,109 @@ +package client + +import ( + buildapi "github.com/openshift/origin/pkg/build/api" + osclient "github.com/openshift/origin/pkg/client" + kapi "k8s.io/kubernetes/pkg/api" +) + +// BuildConfigGetter provides methods for getting BuildConfigs +type BuildConfigGetter interface { + Get(namespace, name string) (*buildapi.BuildConfig, error) +} + +// BuildConfigUpdater provides methods for updating BuildConfigs +type BuildConfigUpdater interface { + Update(buildConfig *buildapi.BuildConfig) error +} + +// OSClientBuildConfigClient delegates get and update operations to the OpenShift client interface +type OSClientBuildConfigClient struct { + Client osclient.Interface +} + +// NewOSClientBuildConfigClient creates a new build config client that uses an openshift client to create and get BuildConfigs +func NewOSClientBuildConfigClient(client osclient.Interface) *OSClientBuildConfigClient { + return &OSClientBuildConfigClient{Client: client} +} + +// Get returns a BuildConfig using the OpenShift client. +func (c OSClientBuildConfigClient) Get(namespace, name string) (*buildapi.BuildConfig, error) { + return c.Client.BuildConfigs(namespace).Get(name) +} + +// Update updates a BuildConfig using the OpenShift client. +func (c OSClientBuildConfigClient) Update(buildConfig *buildapi.BuildConfig) error { + _, err := c.Client.BuildConfigs(buildConfig.Namespace).Update(buildConfig) + return err +} + +// BuildUpdater provides methods for updating existing Builds. +type BuildUpdater interface { + Update(namespace string, build *buildapi.Build) error +} + +// BuildLister provides methods for listing the Builds. +type BuildLister interface { + List(namespace string, opts kapi.ListOptions) (*buildapi.BuildList, error) +} + +// OSClientBuildClient deletes build create and update operations to the OpenShift client interface +type OSClientBuildClient struct { + Client osclient.Interface +} + +// NewOSClientBuildClient creates a new build client that uses an openshift client to update builds +func NewOSClientBuildClient(client osclient.Interface) *OSClientBuildClient { + return &OSClientBuildClient{Client: client} +} + +// Update updates builds using the OpenShift client. +func (c OSClientBuildClient) Update(namespace string, build *buildapi.Build) error { + _, e := c.Client.Builds(namespace).Update(build) + return e +} + +// List lists the builds using the OpenShift client. +func (c OSClientBuildClient) List(namespace string, opts kapi.ListOptions) (*buildapi.BuildList, error) { + return c.Client.Builds(namespace).List(opts) +} + +// BuildCloner provides methods for cloning builds +type BuildCloner interface { + Clone(namespace string, request *buildapi.BuildRequest) (*buildapi.Build, error) +} + +// OSClientBuildClonerClient creates a new build client that uses an openshift client to clone builds +type OSClientBuildClonerClient struct { + Client osclient.Interface +} + +// NewOSClientBuildClonerClient creates a new build client that uses an openshift client to clone builds +func NewOSClientBuildClonerClient(client osclient.Interface) *OSClientBuildClonerClient { + return &OSClientBuildClonerClient{Client: client} +} + +// Clone generates new build for given build name +func (c OSClientBuildClonerClient) Clone(namespace string, request *buildapi.BuildRequest) (*buildapi.Build, error) { + return c.Client.Builds(namespace).Clone(request) +} + +// BuildConfigInstantiator provides methods for instantiating builds from build configs +type BuildConfigInstantiator interface { + Instantiate(namespace string, request *buildapi.BuildRequest) (*buildapi.Build, error) +} + +// OSClientBuildConfigInstantiatorClient creates a new build client that uses an openshift client to create builds +type OSClientBuildConfigInstantiatorClient struct { + Client osclient.Interface +} + +// NewOSClientBuildConfigInstantiatorClient creates a new build client that uses an openshift client to create builds +func NewOSClientBuildConfigInstantiatorClient(client osclient.Interface) *OSClientBuildConfigInstantiatorClient { + return &OSClientBuildConfigInstantiatorClient{Client: client} +} + +// Instantiate generates new build for given buildConfig +func (c OSClientBuildConfigInstantiatorClient) Instantiate(namespace string, request *buildapi.BuildRequest) (*buildapi.Build, error) { + return c.Client.BuildConfigs(namespace).Instantiate(request) +} diff --git a/vendor/github.com/openshift/origin/pkg/build/cmd/doc.go b/vendor/github.com/openshift/origin/pkg/build/cmd/doc.go new file mode 100644 index 00000000..e9cc603a --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/cmd/doc.go @@ -0,0 +1,2 @@ +// Package cmd provides command helpers for builds +package cmd diff --git a/vendor/github.com/openshift/origin/pkg/build/cmd/reaper.go b/vendor/github.com/openshift/origin/pkg/build/cmd/reaper.go new file mode 100644 index 00000000..11fb11a5 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/cmd/reaper.go @@ -0,0 +1,150 @@ +package cmd + +import ( + "sort" + "strings" + "time" + + "github.com/golang/glog" + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/kubectl" + ktypes "k8s.io/kubernetes/pkg/types" + kutilerrors "k8s.io/kubernetes/pkg/util/errors" + + buildapi "github.com/openshift/origin/pkg/build/api" + buildutil "github.com/openshift/origin/pkg/build/util" + "github.com/openshift/origin/pkg/client" + "github.com/openshift/origin/pkg/util" +) + +// NewBuildConfigReaper returns a new reaper for buildConfigs +func NewBuildConfigReaper(oc *client.Client) kubectl.Reaper { + return &BuildConfigReaper{oc: oc, pollInterval: kubectl.Interval, timeout: kubectl.Timeout} +} + +// BuildConfigReaper implements the Reaper interface for buildConfigs +type BuildConfigReaper struct { + oc client.Interface + pollInterval, timeout time.Duration +} + +// Stop deletes the build configuration and all of the associated builds. +func (reaper *BuildConfigReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *kapi.DeleteOptions) error { + _, err := reaper.oc.BuildConfigs(namespace).Get(name) + + if err != nil { + return err + } + + var bcPotentialBuilds []buildapi.Build + + // Collect builds related to the config. + builds, err := reaper.oc.Builds(namespace).List(kapi.ListOptions{LabelSelector: buildutil.BuildConfigSelector(name)}) + if err != nil { + return err + } + + bcPotentialBuilds = append(bcPotentialBuilds, builds.Items...) + + // Collect deprecated builds related to the config. + // TODO: Delete this block after BuildConfigLabelDeprecated is removed. + builds, err = reaper.oc.Builds(namespace).List(kapi.ListOptions{LabelSelector: buildutil.BuildConfigSelectorDeprecated(name)}) + if err != nil { + return err + } + + bcPotentialBuilds = append(bcPotentialBuilds, builds.Items...) + + // A map of builds associated with this build configuration + bcBuilds := make(map[ktypes.UID]buildapi.Build) + + // Because of name length limits in the BuildConfigSelector, annotations are used to ensure + // reliable selection of associated builds. + for _, build := range bcPotentialBuilds { + if build.Annotations != nil { + if bcName, ok := build.Annotations[buildapi.BuildConfigAnnotation]; ok { + // The annotation, if present, has the full build config name. + if bcName != name { + // If the name does not match exactly, the build is not truly associated with the build configuration + continue + } + } + } + // Note that if there is no annotation, this is a deprecated build spec + // and we choose to include it in the deletion having matched only the BuildConfigSelectorDeprecated + + // Use a map to union the lists returned by the contemporary & deprecated build queries + // (there will be overlap between the lists, and we only want to try to delete each build once) + bcBuilds[build.UID] = build + } + + // If there are builds associated with this build configuration, pause it before attempting the deletion + if len(bcBuilds) > 0 { + + // Add paused annotation to the build config pending the deletion + err = unversioned.RetryOnConflict(unversioned.DefaultRetry, func() error { + + bc, err := reaper.oc.BuildConfigs(namespace).Get(name) + if err != nil { + return err + } + + // Ignore if the annotation already exists + if strings.ToLower(bc.Annotations[buildapi.BuildConfigPausedAnnotation]) == "true" { + return nil + } + + // Set the annotation and update + if err := util.AddObjectAnnotations(bc, map[string]string{buildapi.BuildConfigPausedAnnotation: "true"}); err != nil { + return err + } + _, err = reaper.oc.BuildConfigs(namespace).Update(bc) + return err + }) + + if err != nil { + return err + } + + } + + // Warn the user if the BuildConfig won't get deleted after this point. + bcDeleted := false + defer func() { + if !bcDeleted { + glog.Warningf("BuildConfig %s/%s will not be deleted because not all associated builds could be deleted. You can try re-running the command or removing them manually", namespace, name) + } + }() + + // For the benefit of test cases, sort the UIDs so that the deletion order is deterministic + buildUIDs := make([]string, 0, len(bcBuilds)) + for buildUID := range bcBuilds { + buildUIDs = append(buildUIDs, string(buildUID)) + } + sort.Strings(buildUIDs) + + errList := []error{} + for _, buildUID := range buildUIDs { + build := bcBuilds[ktypes.UID(buildUID)] + if err := reaper.oc.Builds(namespace).Delete(build.Name); err != nil { + glog.Warningf("Cannot delete Build %s/%s: %v", build.Namespace, build.Name, err) + if !kerrors.IsNotFound(err) { + errList = append(errList, err) + } + } + } + + // Aggregate all errors + if len(errList) > 0 { + return kutilerrors.NewAggregate(errList) + } + + if err := reaper.oc.BuildConfigs(namespace).Delete(name); err != nil { + return err + } + + bcDeleted = true + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/build/graph/analysis/bc.go b/vendor/github.com/openshift/origin/pkg/build/graph/analysis/bc.go new file mode 100644 index 00000000..d19bf0bb --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/graph/analysis/bc.go @@ -0,0 +1,351 @@ +package analysis + +import ( + "fmt" + "strings" + "time" + + "github.com/gonum/graph" + "github.com/gonum/graph/topo" + + "k8s.io/kubernetes/pkg/api/unversioned" + + osgraph "github.com/openshift/origin/pkg/api/graph" + buildapi "github.com/openshift/origin/pkg/build/api" + buildedges "github.com/openshift/origin/pkg/build/graph" + buildgraph "github.com/openshift/origin/pkg/build/graph/nodes" + imageapi "github.com/openshift/origin/pkg/image/api" + imageedges "github.com/openshift/origin/pkg/image/graph" + imagegraph "github.com/openshift/origin/pkg/image/graph/nodes" +) + +const ( + TagNotAvailableWarning = "ImageStreamTagNotAvailable" + LatestBuildFailedErr = "LatestBuildFailed" + MissingRequiredRegistryErr = "MissingRequiredRegistry" + MissingOutputImageStreamErr = "MissingOutputImageStream" + CyclicBuildConfigWarning = "CyclicBuildConfig" + MissingImageStreamTagWarning = "MissingImageStreamTag" + MissingImageStreamImageWarning = "MissingImageStreamImage" +) + +// FindUnpushableBuildConfigs checks all build configs that will output to an IST backed by an ImageStream and checks to make sure their builds can push. +func FindUnpushableBuildConfigs(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + // note, unlike with Inputs, ImageStreamImage is not a valid type for build output + +bc: + for _, bcNode := range g.NodesByKind(buildgraph.BuildConfigNodeKind) { + for _, istNode := range g.SuccessorNodesByEdgeKind(bcNode, buildedges.BuildOutputEdgeKind) { + for _, uncastImageStreamNode := range g.SuccessorNodesByEdgeKind(istNode, imageedges.ReferencedImageStreamGraphEdgeKind) { + imageStreamNode := uncastImageStreamNode.(*imagegraph.ImageStreamNode) + + if !imageStreamNode.IsFound { + markers = append(markers, osgraph.Marker{ + Node: bcNode, + RelatedNodes: []graph.Node{istNode}, + + Severity: osgraph.ErrorSeverity, + Key: MissingOutputImageStreamErr, + Message: fmt.Sprintf("%s is pushing to %s, but the image stream for that tag does not exist.", + f.ResourceName(bcNode), f.ResourceName(istNode)), + }) + + continue + } + + if len(imageStreamNode.Status.DockerImageRepository) == 0 { + markers = append(markers, osgraph.Marker{ + Node: bcNode, + RelatedNodes: []graph.Node{istNode}, + + Severity: osgraph.ErrorSeverity, + Key: MissingRequiredRegistryErr, + Message: fmt.Sprintf("%s is pushing to %s, but the administrator has not configured the integrated Docker registry.", + f.ResourceName(bcNode), f.ResourceName(istNode)), + Suggestion: osgraph.Suggestion("oc adm registry -h"), + }) + + continue bc + } + } + } + } + + return markers +} + +// FindMissingInputImageStreams checks all build configs and confirms that their From element exists +// +// Precedence of failures: +// 1. A build config's input points to an image stream that does not exist +// 2. A build config's input uses an image stream tag reference in an existing image stream, but no images within the image stream have that tag assigned +// 3. A build config's input uses an image stream image reference in an exisiting image stream, but no images within the image stream have the supplied image hexadecimal ID +func FindMissingInputImageStreams(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, bcNode := range g.NodesByKind(buildgraph.BuildConfigNodeKind) { + for _, bcInputNode := range g.PredecessorNodesByEdgeKind(bcNode, buildedges.BuildInputImageEdgeKind) { + switch bcInputNode.(type) { + case *imagegraph.ImageStreamTagNode: + + for _, uncastImageStreamNode := range g.SuccessorNodesByEdgeKind(bcInputNode, imageedges.ReferencedImageStreamGraphEdgeKind) { + imageStreamNode := uncastImageStreamNode.(*imagegraph.ImageStreamNode) + + // note, BuildConfig.Spec.BuildSpec.Strategy.[Docker|Source|Custom]Stragegy.From Input of ImageStream has been converted to ImageStreamTag on the vX to api conversion + // prior to our reaching this point in the code; so there is not need to check for that type vs. ImageStreamTag or ImageStreamImage; + + tagNode, _ := bcInputNode.(*imagegraph.ImageStreamTagNode) + imageStream := imageStreamNode.Object().(*imageapi.ImageStream) + if _, ok := imageStream.Status.Tags[tagNode.ImageTag()]; !ok { + + markers = append(markers, getImageStreamTagMarker(g, f, bcInputNode, imageStreamNode, tagNode, bcNode)) + + } + + } + + case *imagegraph.ImageStreamImageNode: + + for _, uncastImageStreamNode := range g.SuccessorNodesByEdgeKind(bcInputNode, imageedges.ReferencedImageStreamImageGraphEdgeKind) { + imageStreamNode := uncastImageStreamNode.(*imagegraph.ImageStreamNode) + + imageNode, _ := bcInputNode.(*imagegraph.ImageStreamImageNode) + imageStream := imageStreamNode.Object().(*imageapi.ImageStream) + found, imageID := validImageStreamImage(imageNode, imageStream) + if !found { + + markers = append(markers, getImageStreamImageMarker(g, f, bcNode, bcInputNode, imageStreamNode, imageNode, imageStream, imageID)) + + } + + } + + } + + } + } + return markers +} + +// FindCircularBuilds checks all build configs for cycles +func FindCircularBuilds(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + // Filter out all but ImageStreamTag and BuildConfig nodes + nodeFn := osgraph.NodesOfKind(imagegraph.ImageStreamTagNodeKind, buildgraph.BuildConfigNodeKind) + // Filter out all but BuildInputImage and BuildOutput edges + edgeFn := osgraph.EdgesOfKind(buildedges.BuildInputImageEdgeKind, buildedges.BuildOutputEdgeKind) + + // Create desired subgraph + sub := g.Subgraph(nodeFn, edgeFn) + + markers := []osgraph.Marker{} + + // Check for cycles + for _, cycle := range topo.CyclesIn(sub) { + nodeNames := []string{} + for _, node := range cycle { + nodeNames = append(nodeNames, f.ResourceName(node)) + } + + markers = append(markers, osgraph.Marker{ + Node: cycle[0], + RelatedNodes: cycle, + + Severity: osgraph.WarningSeverity, + Key: CyclicBuildConfigWarning, + Message: fmt.Sprintf("Cycle detected in build configurations: %s", strings.Join(nodeNames, " -> ")), + }) + + } + + return markers +} + +// multiBCStartBuildSuggestion builds the `oc start-build` suggestion string with multiple build configs +func multiBCStartBuildSuggestion(bcNodes []*buildgraph.BuildConfigNode) string { + var ret string + if len(bcNodes) > 1 { + ret = "Run one of the following commands: " + } + for i, bcNode := range bcNodes { + // use of f.ResourceName(bcNode) will produce a string like oc start-build BuildConfig|example/ruby-hello-world + ret = ret + fmt.Sprintf("oc start-build %s", bcNode.BuildConfig.GetName()) + if i < (len(bcNodes) - 1) { + ret = ret + ", " + } + } + return ret +} + +// bcNodesToRelatedNodes takes an array of BuildConfigNode's and returns an array of graph.Node's for the Marker.RelatedNodes field +func bcNodesToRelatedNodes(bcNodes []*buildgraph.BuildConfigNode) []graph.Node { + relatedNodes := []graph.Node{} + for _, bcNode := range bcNodes { + relatedNodes = append(relatedNodes, graph.Node(bcNode)) + } + return relatedNodes +} + +// findPendingTagMarkers is the guts behind FindPendingTags .... break out some of the content and reduce some indentation +func findPendingTagMarkers(istNode *imagegraph.ImageStreamTagNode, g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + buildFound := false + bcNodes := buildedges.BuildConfigsForTag(g, graph.Node(istNode)) + for _, bcNode := range bcNodes { + latestBuild := buildedges.GetLatestBuild(g, bcNode) + + // A build config points to the non existent tag but no current build exists. + if latestBuild == nil { + continue + } + buildFound = true + + // A build config points to the non existent tag but something is going on with + // the latest build. + // TODO: Handle other build phases. + switch latestBuild.Build.Status.Phase { + case buildapi.BuildPhaseCancelled: + // TODO: Add a warning here. + case buildapi.BuildPhaseError: + // TODO: Add a warning here. + case buildapi.BuildPhaseComplete: + // We should never hit this. The output of our build is missing but the build is complete. + // Most probably the user has messed up? + case buildapi.BuildPhaseFailed: + // Since the tag hasn't been populated yet, we assume there hasn't been a successful + // build so far. + markers = append(markers, osgraph.Marker{ + Node: graph.Node(latestBuild), + RelatedNodes: []graph.Node{graph.Node(istNode), graph.Node(bcNode)}, + + Severity: osgraph.ErrorSeverity, + Key: LatestBuildFailedErr, + Message: fmt.Sprintf("%s has failed.", f.ResourceName(latestBuild)), + Suggestion: osgraph.Suggestion(fmt.Sprintf("Inspect the build failure with 'oc logs -f bc/%s'", bcNode.BuildConfig.GetName())), + }) + default: + // Do nothing when latest build is new, pending, or running. + } + + } + + // if no current builds exist for any of the build configs, append marker for that + // but ignore ISTs which have no build configs + if !buildFound && len(bcNodes) > 0 { + markers = append(markers, osgraph.Marker{ + Node: graph.Node(istNode), + RelatedNodes: bcNodesToRelatedNodes(bcNodes), + + Severity: osgraph.WarningSeverity, + Key: TagNotAvailableWarning, + Message: fmt.Sprintf("%s needs to be imported or created by a build.", f.ResourceName(istNode)), + Suggestion: osgraph.Suggestion(multiBCStartBuildSuggestion(bcNodes)), + }) + } + return markers +} + +// FindPendingTags inspects all imageStreamTags that serve as outputs to builds. +// +// Precedence of failures: +// 1. A build config points to the non existent tag but no current build exists. +// 2. A build config points to the non existent tag but the latest build has failed. +func FindPendingTags(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastIstNode := range g.NodesByKind(imagegraph.ImageStreamTagNodeKind) { + istNode := uncastIstNode.(*imagegraph.ImageStreamTagNode) + if !istNode.Found() { + markers = append(markers, findPendingTagMarkers(istNode, g, f)...) + } + } + + return markers +} + +// getImageStreamTagMarker will return the appropriate marker for when a BuildConfig is missing its input ImageStreamTag +func getImageStreamTagMarker(g osgraph.Graph, f osgraph.Namer, bcInputNode graph.Node, imageStreamNode graph.Node, tagNode *imagegraph.ImageStreamTagNode, bcNode graph.Node) osgraph.Marker { + return osgraph.Marker{ + Node: bcNode, + RelatedNodes: []graph.Node{bcInputNode, + imageStreamNode}, + Severity: osgraph.WarningSeverity, + Key: MissingImageStreamImageWarning, + Message: fmt.Sprintf("%s builds from %s, but the image stream tag does not exist.", f.ResourceName(bcNode), f.ResourceName(bcInputNode)), + Suggestion: getImageStreamTagSuggestion(g, f, tagNode), + } +} + +// getImageStreamTagSuggestion will return the appropriate marker Suggestion for when a BuildConfig is missing its input ImageStreamTag; in particular, +// it will determine whether or not another BuildConfig can produce the aforementioned ImageStreamTag +func getImageStreamTagSuggestion(g osgraph.Graph, f osgraph.Namer, tagNode *imagegraph.ImageStreamTagNode) osgraph.Suggestion { + bcs := []string{} + for _, bcNode := range g.PredecessorNodesByEdgeKind(tagNode, buildedges.BuildOutputEdgeKind) { + bcs = append(bcs, f.ResourceName(bcNode)) + } + if len(bcs) == 1 { + return osgraph.Suggestion(fmt.Sprintf("oc start-build %s", bcs[0])) + } + if len(bcs) > 0 { + return osgraph.Suggestion(fmt.Sprintf("`oc start-build` with one of these: %s.", strings.Join(bcs[:], ","))) + } + return osgraph.Suggestion(fmt.Sprintf("%s needs to be imported.", f.ResourceName(tagNode))) +} + +// getImageStreamImageMarker will return the appropriate marker for when a BuildConfig is missing its input ImageStreamImage +func getImageStreamImageMarker(g osgraph.Graph, f osgraph.Namer, bcNode graph.Node, bcInputNode graph.Node, imageStreamNode graph.Node, imageNode *imagegraph.ImageStreamImageNode, imageStream *imageapi.ImageStream, imageID string) osgraph.Marker { + return osgraph.Marker{ + Node: bcNode, + RelatedNodes: []graph.Node{bcInputNode, + imageStreamNode}, + Severity: osgraph.WarningSeverity, + Key: MissingImageStreamImageWarning, + Message: fmt.Sprintf("%s builds from %s, but the image stream image does not exist.", f.ResourceName(bcNode), f.ResourceName(bcInputNode)), + Suggestion: getImageStreamImageSuggestion(imageID, imageStream), + } +} + +// getImageStreamImageSuggestion will return the appropriate marker Suggestion for when a BuildConfig is missing its input ImageStreamImage +func getImageStreamImageSuggestion(imageID string, imageStream *imageapi.ImageStream) osgraph.Suggestion { + // check the images stream to see if any import images are in flight or have failed + annotation, ok := imageStream.Annotations[imageapi.DockerImageRepositoryCheckAnnotation] + if !ok { + return osgraph.Suggestion(fmt.Sprintf("`oc import-image %s --from=` where `--from` specifies an image with hexadecimal ID %s", imageStream.GetName(), imageID)) + } + + if checkTime, err := time.Parse(time.RFC3339, annotation); err == nil { + // this time based annotation is set by pkg/image/controller/controller.go whenever import/tag operations are performed; unless + // in the midst of an import/tag operation, it stays set and serves as a timestamp for when the last operation occurred; + // so we will check if the image stream has been updated "recently"; + // in case it is a slow link to the remote repo, see if if the check annotation occurred within the last 5 minutes; if so, consider that as potentially "in progress" + compareTime := checkTime.Add(5 * time.Minute) + currentTime, _ := time.Parse(time.RFC3339, unversioned.Now().UTC().Format(time.RFC3339)) + if compareTime.Before(currentTime) { + return osgraph.Suggestion(fmt.Sprintf("`oc import-image %s --from=` where `--from` specifies an image with hexadecimal ID %s", imageStream.GetName(), imageID)) + } + + return osgraph.Suggestion(fmt.Sprintf("`oc import-image %s --from=` with hexadecimal ID %s possibly in progress", imageStream.GetName(), imageID)) + + } + return osgraph.Suggestion(fmt.Sprintf("Possible error occurred with `oc import-image %s --from=` with hexadecimal ID %s; inspect images stream annotations", imageStream.GetName(), imageID)) +} + +// validImageStreamImage will cycle through the imageStream.Status.Tags.[]TagEvent.DockerImageReference and determine whether an image with the hexadecimal image id +// associated with an ImageStreamImage reference in fact exists in a given ImageStream; on return, this method returns a true if does exist, and as well as the hexadecimal image +// id from the ImageStreamImage +func validImageStreamImage(imageNode *imagegraph.ImageStreamImageNode, imageStream *imageapi.ImageStream) (bool, string) { + dockerImageReference, err := imageapi.ParseDockerImageReference(imageNode.Name) + if err == nil { + for _, tagEventList := range imageStream.Status.Tags { + for _, tagEvent := range tagEventList.Items { + if strings.Contains(tagEvent.DockerImageReference, dockerImageReference.ID) { + return true, dockerImageReference.ID + } + } + } + return false, dockerImageReference.ID + } + return false, "" +} diff --git a/vendor/github.com/openshift/origin/pkg/build/graph/edges.go b/vendor/github.com/openshift/origin/pkg/build/graph/edges.go new file mode 100644 index 00000000..b0c4d3b2 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/graph/edges.go @@ -0,0 +1,133 @@ +package graph + +import ( + "github.com/gonum/graph" + kapi "k8s.io/kubernetes/pkg/api" + + osgraph "github.com/openshift/origin/pkg/api/graph" + buildapi "github.com/openshift/origin/pkg/build/api" + buildgraph "github.com/openshift/origin/pkg/build/graph/nodes" + buildutil "github.com/openshift/origin/pkg/build/util" + imageapi "github.com/openshift/origin/pkg/image/api" + imagegraph "github.com/openshift/origin/pkg/image/graph/nodes" +) + +const ( + // BuildTriggerImageEdgeKind is an edge from an ImageStream to a BuildConfig that + // represents a trigger connection. Changes to the ImageStream will trigger a new build + // from the BuildConfig. + BuildTriggerImageEdgeKind = "BuildTriggerImage" + + // BuildInputImageEdgeKind is an edge from an ImageStream to a BuildConfig, where the + // ImageStream is the source image for the build (builder in S2I builds, FROM in Docker builds, + // custom builder in Custom builds). The same ImageStream can also have a trigger + // relationship with the BuildConfig, but not necessarily. + BuildInputImageEdgeKind = "BuildInputImage" + + // BuildOutputEdgeKind is an edge from a BuildConfig to an ImageStream. The ImageStream will hold + // the ouptut of the Builds created with that BuildConfig. + BuildOutputEdgeKind = "BuildOutput" + + // BuildInputEdgeKind is an edge from a source repository to a BuildConfig. The source repository is the + // input source for the build. + BuildInputEdgeKind = "BuildInput" + + // BuildEdgeKind goes from a BuildConfigNode to a BuildNode and indicates that the buildConfig owns the build + BuildEdgeKind = "Build" +) + +// AddBuildEdges adds edges that connect a BuildConfig to Builds to the given graph +func AddBuildEdges(g osgraph.MutableUniqueGraph, node *buildgraph.BuildConfigNode) { + for _, n := range g.(graph.Graph).Nodes() { + if buildNode, ok := n.(*buildgraph.BuildNode); ok { + if buildNode.Build.Namespace != node.BuildConfig.Namespace { + continue + } + if belongsToBuildConfig(node.BuildConfig, buildNode.Build) { + g.AddEdge(node, buildNode, BuildEdgeKind) + } + } + } +} + +// AddAllBuildEdges adds build edges to all BuildConfig nodes in the given graph +func AddAllBuildEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if bcNode, ok := node.(*buildgraph.BuildConfigNode); ok { + AddBuildEdges(g, bcNode) + } + } +} + +func imageRefNode(g osgraph.MutableUniqueGraph, ref *kapi.ObjectReference, bc *buildapi.BuildConfig) graph.Node { + if ref == nil { + return nil + } + switch ref.Kind { + case "DockerImage": + if ref, err := imageapi.ParseDockerImageReference(ref.Name); err == nil { + tag := ref.Tag + ref.Tag = "" + return imagegraph.EnsureDockerRepositoryNode(g, ref.String(), tag) + } + case "ImageStream": + return imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta(defaultNamespace(ref.Namespace, bc.Namespace), ref.Name, imageapi.DefaultImageTag)) + case "ImageStreamTag": + return imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta2(defaultNamespace(ref.Namespace, bc.Namespace), ref.Name)) + case "ImageStreamImage": + return imagegraph.FindOrCreateSyntheticImageStreamImageNode(g, imagegraph.MakeImageStreamImageObjectMeta(defaultNamespace(ref.Namespace, bc.Namespace), ref.Name)) + } + return nil +} + +// AddOutputEdges links the build config to its output image node. +func AddOutputEdges(g osgraph.MutableUniqueGraph, node *buildgraph.BuildConfigNode) { + if node.BuildConfig.Spec.Output.To == nil { + return + } + out := imageRefNode(g, node.BuildConfig.Spec.Output.To, node.BuildConfig) + g.AddEdge(node, out, BuildOutputEdgeKind) +} + +// AddInputEdges links the build config to its input image and source nodes. +func AddInputEdges(g osgraph.MutableUniqueGraph, node *buildgraph.BuildConfigNode) { + if in := buildgraph.EnsureSourceRepositoryNode(g, node.BuildConfig.Spec.Source); in != nil { + g.AddEdge(in, node, BuildInputEdgeKind) + } + inputImage := buildutil.GetInputReference(node.BuildConfig.Spec.Strategy) + if input := imageRefNode(g, inputImage, node.BuildConfig); input != nil { + g.AddEdge(input, node, BuildInputImageEdgeKind) + } +} + +// AddTriggerEdges links the build config to its trigger input image nodes. +func AddTriggerEdges(g osgraph.MutableUniqueGraph, node *buildgraph.BuildConfigNode) { + for _, trigger := range node.BuildConfig.Spec.Triggers { + if trigger.Type != buildapi.ImageChangeBuildTriggerType { + continue + } + from := trigger.ImageChange.From + if trigger.ImageChange.From == nil { + from = buildutil.GetInputReference(node.BuildConfig.Spec.Strategy) + } + triggerNode := imageRefNode(g, from, node.BuildConfig) + g.AddEdge(triggerNode, node, BuildTriggerImageEdgeKind) + } +} + +// AddInputOutputEdges links the build config to other nodes for the images and source repositories it depends on. +func AddInputOutputEdges(g osgraph.MutableUniqueGraph, node *buildgraph.BuildConfigNode) *buildgraph.BuildConfigNode { + AddInputEdges(g, node) + AddTriggerEdges(g, node) + AddOutputEdges(g, node) + return node +} + +// AddAllInputOutputEdges adds input and output edges for all BuildConfigs in the given graph +func AddAllInputOutputEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if bcNode, ok := node.(*buildgraph.BuildConfigNode); ok { + AddInputOutputEdges(g, bcNode) + } + } +} diff --git a/vendor/github.com/openshift/origin/pkg/build/graph/helpers.go b/vendor/github.com/openshift/origin/pkg/build/graph/helpers.go new file mode 100644 index 00000000..3c27375c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/graph/helpers.go @@ -0,0 +1,111 @@ +package graph + +import ( + "sort" + + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + buildapi "github.com/openshift/origin/pkg/build/api" + buildgraph "github.com/openshift/origin/pkg/build/graph/nodes" +) + +// RelevantBuilds returns the lastSuccessful build, lastUnsuccessful build, and a list of active builds +func RelevantBuilds(g osgraph.Graph, bcNode *buildgraph.BuildConfigNode) (*buildgraph.BuildNode, *buildgraph.BuildNode, []*buildgraph.BuildNode) { + var ( + lastSuccessfulBuild *buildgraph.BuildNode + lastUnsuccessfulBuild *buildgraph.BuildNode + ) + activeBuilds := []*buildgraph.BuildNode{} + allBuilds := []*buildgraph.BuildNode{} + uncastBuilds := g.SuccessorNodesByEdgeKind(bcNode, BuildEdgeKind) + + for i := range uncastBuilds { + buildNode := uncastBuilds[i].(*buildgraph.BuildNode) + if belongsToBuildConfig(bcNode.BuildConfig, buildNode.Build) { + allBuilds = append(allBuilds, buildNode) + } + } + + if len(allBuilds) == 0 { + return nil, nil, []*buildgraph.BuildNode{} + } + + sort.Sort(RecentBuildReferences(allBuilds)) + + for i := range allBuilds { + switch allBuilds[i].Build.Status.Phase { + case buildapi.BuildPhaseComplete: + if lastSuccessfulBuild == nil { + lastSuccessfulBuild = allBuilds[i] + } + case buildapi.BuildPhaseFailed, buildapi.BuildPhaseCancelled, buildapi.BuildPhaseError: + if lastUnsuccessfulBuild == nil { + lastUnsuccessfulBuild = allBuilds[i] + } + default: + activeBuilds = append(activeBuilds, allBuilds[i]) + } + } + + return lastSuccessfulBuild, lastUnsuccessfulBuild, activeBuilds +} + +func belongsToBuildConfig(config *buildapi.BuildConfig, b *buildapi.Build) bool { + if b.Labels == nil { + return false + } + if b.Annotations != nil && b.Annotations[buildapi.BuildConfigAnnotation] == config.Name { + return true + } + if b.Labels[buildapi.BuildConfigLabel] == config.Name { + return true + } + if b.Labels[buildapi.BuildConfigLabelDeprecated] == config.Name { + return true + } + return false +} + +type RecentBuildReferences []*buildgraph.BuildNode + +func (m RecentBuildReferences) Len() int { return len(m) } +func (m RecentBuildReferences) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m RecentBuildReferences) Less(i, j int) bool { + return m[i].Build.CreationTimestamp.After(m[j].Build.CreationTimestamp.Time) +} + +func defaultNamespace(value, defaultValue string) string { + if len(value) == 0 { + return defaultValue + } + return value +} + +// BuildConfigsForTag returns the buildConfig that points to the provided imageStreamTag. +func BuildConfigsForTag(g osgraph.Graph, istag graph.Node) []*buildgraph.BuildConfigNode { + bcs := []*buildgraph.BuildConfigNode{} + for _, bcNode := range g.PredecessorNodesByEdgeKind(istag, BuildOutputEdgeKind) { + bcs = append(bcs, bcNode.(*buildgraph.BuildConfigNode)) + } + return bcs +} + +// GetLatestBuild returns the latest build for the provided buildConfig. +func GetLatestBuild(g osgraph.Graph, bc graph.Node) *buildgraph.BuildNode { + builds := g.SuccessorNodesByEdgeKind(bc, BuildEdgeKind) + if len(builds) == 0 { + return nil + } + latestBuild := builds[0].(*buildgraph.BuildNode) + + for _, buildNode := range builds[1:] { + if build, ok := buildNode.(*buildgraph.BuildNode); ok { + if latestBuild.Build.CreationTimestamp.Before(build.Build.CreationTimestamp) { + latestBuild = build + } + } + } + + return latestBuild +} diff --git a/vendor/github.com/openshift/origin/pkg/build/graph/nodes/nodes.go b/vendor/github.com/openshift/origin/pkg/build/graph/nodes/nodes.go new file mode 100644 index 00000000..96bbc85f --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/graph/nodes/nodes.go @@ -0,0 +1,47 @@ +package nodes + +import ( + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + buildapi "github.com/openshift/origin/pkg/build/api" +) + +// EnsureBuildConfigNode adds a graph node for the specific build config if it does not exist +func EnsureBuildConfigNode(g osgraph.MutableUniqueGraph, config *buildapi.BuildConfig) *BuildConfigNode { + return osgraph.EnsureUnique( + g, + BuildConfigNodeName(config), + func(node osgraph.Node) graph.Node { + return &BuildConfigNode{ + Node: node, + BuildConfig: config, + } + }, + ).(*BuildConfigNode) +} + +// EnsureSourceRepositoryNode adds the specific BuildSource to the graph if it does not already exist. +func EnsureSourceRepositoryNode(g osgraph.MutableUniqueGraph, source buildapi.BuildSource) *SourceRepositoryNode { + switch { + case source.Git != nil: + default: + return nil + } + return osgraph.EnsureUnique(g, + SourceRepositoryNodeName(source), + func(node osgraph.Node) graph.Node { + return &SourceRepositoryNode{node, source} + }, + ).(*SourceRepositoryNode) +} + +// EnsureBuildNode adds a graph node for the build if it does not already exist. +func EnsureBuildNode(g osgraph.MutableUniqueGraph, build *buildapi.Build) *BuildNode { + return osgraph.EnsureUnique(g, + BuildNodeName(build), + func(node osgraph.Node) graph.Node { + return &BuildNode{node, build} + }, + ).(*BuildNode) +} diff --git a/vendor/github.com/openshift/origin/pkg/build/graph/nodes/types.go b/vendor/github.com/openshift/origin/pkg/build/graph/nodes/types.go new file mode 100644 index 00000000..fbfb3b05 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/graph/nodes/types.go @@ -0,0 +1,90 @@ +package nodes + +import ( + "fmt" + "reflect" + + osgraph "github.com/openshift/origin/pkg/api/graph" + buildapi "github.com/openshift/origin/pkg/build/api" +) + +var ( + BuildConfigNodeKind = reflect.TypeOf(buildapi.BuildConfig{}).Name() + BuildNodeKind = reflect.TypeOf(buildapi.Build{}).Name() + + // non-api types + SourceRepositoryNodeKind = reflect.TypeOf(buildapi.BuildSource{}).Name() +) + +func BuildConfigNodeName(o *buildapi.BuildConfig) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(BuildConfigNodeKind, o) +} + +type BuildConfigNode struct { + osgraph.Node + BuildConfig *buildapi.BuildConfig +} + +func (n BuildConfigNode) Object() interface{} { + return n.BuildConfig +} + +func (n BuildConfigNode) String() string { + return string(BuildConfigNodeName(n.BuildConfig)) +} + +func (n BuildConfigNode) UniqueName() osgraph.UniqueName { + return BuildConfigNodeName(n.BuildConfig) +} + +func (*BuildConfigNode) Kind() string { + return BuildConfigNodeKind +} + +func SourceRepositoryNodeName(source buildapi.BuildSource) osgraph.UniqueName { + switch { + case source.Git != nil: + sourceType, uri, ref := "git", source.Git.URI, source.Git.Ref + return osgraph.UniqueName(fmt.Sprintf("%s|%s|%s#%s", SourceRepositoryNodeKind, sourceType, uri, ref)) + default: + panic(fmt.Sprintf("invalid build source: %v", source)) + } +} + +type SourceRepositoryNode struct { + osgraph.Node + Source buildapi.BuildSource +} + +func (n SourceRepositoryNode) String() string { + return string(SourceRepositoryNodeName(n.Source)) +} + +func (SourceRepositoryNode) Kind() string { + return SourceRepositoryNodeKind +} + +func BuildNodeName(o *buildapi.Build) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(BuildNodeKind, o) +} + +type BuildNode struct { + osgraph.Node + Build *buildapi.Build +} + +func (n BuildNode) Object() interface{} { + return n.Build +} + +func (n BuildNode) String() string { + return string(BuildNodeName(n.Build)) +} + +func (n BuildNode) UniqueName() osgraph.UniqueName { + return BuildNodeName(n.Build) +} + +func (*BuildNode) Kind() string { + return BuildNodeKind +} diff --git a/vendor/github.com/openshift/origin/pkg/build/util/doc.go b/vendor/github.com/openshift/origin/pkg/build/util/doc.go new file mode 100644 index 00000000..07e585bb --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/util/doc.go @@ -0,0 +1,3 @@ +// Package util contains common functions that are used +// by the rest of the OpenShift build system. +package util diff --git a/vendor/github.com/openshift/origin/pkg/build/util/util.go b/vendor/github.com/openshift/origin/pkg/build/util/util.go new file mode 100644 index 00000000..bfb3b670 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/build/util/util.go @@ -0,0 +1,169 @@ +package util + +import ( + "fmt" + "strconv" + "strings" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/labels" + + "github.com/golang/glog" + buildapi "github.com/openshift/origin/pkg/build/api" + buildclient "github.com/openshift/origin/pkg/build/client" +) + +const ( + // NoBuildLogsMessage reports that no build logs are available + NoBuildLogsMessage = "No logs are available." +) + +// GetBuildName returns name of the build pod. +func GetBuildName(pod *kapi.Pod) string { + if pod == nil { + return "" + } + return pod.Annotations[buildapi.BuildAnnotation] +} + +// GetInputReference returns the From ObjectReference associated with the +// BuildStrategy. +func GetInputReference(strategy buildapi.BuildStrategy) *kapi.ObjectReference { + switch { + case strategy.SourceStrategy != nil: + return &strategy.SourceStrategy.From + case strategy.DockerStrategy != nil: + return strategy.DockerStrategy.From + case strategy.CustomStrategy != nil: + return &strategy.CustomStrategy.From + default: + return nil + } +} + +// NameFromImageStream returns a concatenated name representing an ImageStream[Tag/Image] +// reference. If the reference does not contain a Namespace, the namespace parameter +// is used instead. +func NameFromImageStream(namespace string, ref *kapi.ObjectReference, tag string) string { + var ret string + if ref.Namespace == "" { + ret = namespace + } else { + ret = ref.Namespace + } + ret = ret + "/" + ref.Name + if tag != "" && strings.Index(ref.Name, ":") == -1 && strings.Index(ref.Name, "@") == -1 { + ret = ret + ":" + tag + } + return ret +} + +// IsBuildComplete returns whether the provided build is complete or not +func IsBuildComplete(build *buildapi.Build) bool { + return build.Status.Phase != buildapi.BuildPhaseRunning && build.Status.Phase != buildapi.BuildPhasePending && build.Status.Phase != buildapi.BuildPhaseNew +} + +// IsPaused returns true if the provided BuildConfig is paused and cannot be used to create a new Build +func IsPaused(bc *buildapi.BuildConfig) bool { + return strings.ToLower(bc.Annotations[buildapi.BuildConfigPausedAnnotation]) == "true" +} + +// BuildNumber returns the given build number. +func BuildNumber(build *buildapi.Build) (int64, error) { + annotations := build.GetAnnotations() + if stringNumber, ok := annotations[buildapi.BuildNumberAnnotation]; ok { + return strconv.ParseInt(stringNumber, 10, 64) + } + return 0, fmt.Errorf("build %s/%s does not have %s annotation", build.Namespace, build.Name, buildapi.BuildNumberAnnotation) +} + +// BuildRunPolicy returns the scheduling policy for the build based on the +// "queued" label. +func BuildRunPolicy(build *buildapi.Build) buildapi.BuildRunPolicy { + labels := build.GetLabels() + if value, found := labels[buildapi.BuildRunPolicyLabel]; found { + switch value { + case "Parallel": + return buildapi.BuildRunPolicyParallel + case "Serial": + return buildapi.BuildRunPolicySerial + case "SerialLatestOnly": + return buildapi.BuildRunPolicySerialLatestOnly + } + } + glog.V(5).Infof("Build %s/%s does not have start policy label set, using default (Serial)") + return buildapi.BuildRunPolicySerial +} + +// BuildNameForConfigVersion returns the name of the version-th build +// for the config that has the provided name. +func BuildNameForConfigVersion(name string, version int) string { + return fmt.Sprintf("%s-%d", name, version) +} + +// BuildConfigSelector returns a label Selector which can be used to find all +// builds for a BuildConfig. +func BuildConfigSelector(name string) labels.Selector { + return labels.Set{buildapi.BuildConfigLabel: buildapi.LabelValue(name)}.AsSelector() +} + +// BuildConfigSelectorDeprecated returns a label Selector which can be used to find +// all builds for a BuildConfig that use the deprecated labels. +func BuildConfigSelectorDeprecated(name string) labels.Selector { + return labels.Set{buildapi.BuildConfigLabelDeprecated: name}.AsSelector() +} + +type buildFilter func(buildapi.Build) bool + +// BuildConfigBuilds return a list of builds for the given build config. +// Optionally you can specify a filter function to select only builds that +// matches your criteria. +func BuildConfigBuilds(c buildclient.BuildLister, namespace, name string, filterFunc buildFilter) (*buildapi.BuildList, error) { + result, err := c.List(namespace, kapi.ListOptions{ + LabelSelector: BuildConfigSelector(name), + }) + if err != nil { + return nil, err + } + if filterFunc == nil { + return result, nil + } + filteredList := &buildapi.BuildList{TypeMeta: result.TypeMeta, ListMeta: result.ListMeta} + for _, b := range result.Items { + if filterFunc(b) { + filteredList.Items = append(filteredList.Items, b) + } + } + return filteredList, nil +} + +// ConfigNameForBuild returns the name of the build config from a +// build name. +func ConfigNameForBuild(build *buildapi.Build) string { + if build == nil { + return "" + } + if build.Annotations != nil { + if _, exists := build.Annotations[buildapi.BuildConfigAnnotation]; exists { + return build.Annotations[buildapi.BuildConfigAnnotation] + } + } + if _, exists := build.Labels[buildapi.BuildConfigLabel]; exists { + return build.Labels[buildapi.BuildConfigLabel] + } + return build.Labels[buildapi.BuildConfigLabelDeprecated] +} + +// VersionForBuild returns the version from the provided build name. +// If no version can be found, 0 is returned to indicate no version. +func VersionForBuild(build *buildapi.Build) int { + if build == nil { + return 0 + } + versionString := build.Annotations[buildapi.BuildNumberAnnotation] + version, err := strconv.Atoi(versionString) + if err != nil { + return 0 + } + return version +} diff --git a/vendor/github.com/openshift/origin/pkg/client/appliedclusterresourcequota.go b/vendor/github.com/openshift/origin/pkg/client/appliedclusterresourcequota.go new file mode 100644 index 00000000..968b4e96 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/appliedclusterresourcequota.go @@ -0,0 +1,46 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + + quotaapi "github.com/openshift/origin/pkg/quota/api" +) + +// AppliedClusterResourceQuotasNamespacer has methods to work with AppliedClusterResourceQuota resources in a namespace +type AppliedClusterResourceQuotasNamespacer interface { + AppliedClusterResourceQuotas(namespace string) AppliedClusterResourceQuotaInterface +} + +// AppliedClusterResourceQuotaInterface exposes methods on AppliedClusterResourceQuota resources. +type AppliedClusterResourceQuotaInterface interface { + List(opts kapi.ListOptions) (*quotaapi.AppliedClusterResourceQuotaList, error) + Get(name string) (*quotaapi.AppliedClusterResourceQuota, error) +} + +// appliedClusterResourceQuotas implements AppliedClusterResourceQuotasNamespacer interface +type appliedClusterResourceQuotas struct { + r *Client + ns string +} + +// newAppliedClusterResourceQuotas returns a appliedClusterResourceQuotas +func newAppliedClusterResourceQuotas(c *Client, namespace string) *appliedClusterResourceQuotas { + return &appliedClusterResourceQuotas{ + r: c, + ns: namespace, + } +} + +// List returns a list of appliedClusterResourceQuotas that match the label and field selectors. +func (c *appliedClusterResourceQuotas) List(opts kapi.ListOptions) (result *quotaapi.AppliedClusterResourceQuotaList, err error) { + result = "aapi.AppliedClusterResourceQuotaList{} + err = c.r.Get().Namespace(c.ns).Resource("appliedclusterresourcequotas").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular appliedClusterResourceQuota and error if one occurs. +func (c *appliedClusterResourceQuotas) Get(name string) (result *quotaapi.AppliedClusterResourceQuota, err error) { + result = "aapi.AppliedClusterResourceQuota{} + err = c.r.Get().Namespace(c.ns).Resource("appliedclusterresourcequotas").Name(name).Do().Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/buildconfigs.go b/vendor/github.com/openshift/origin/pkg/client/buildconfigs.go new file mode 100644 index 00000000..3fef269d --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/buildconfigs.go @@ -0,0 +1,132 @@ +package client + +import ( + "fmt" + "io" + "net/url" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + buildapi "github.com/openshift/origin/pkg/build/api" +) + +// ErrTriggerIsNotAWebHook is returned when a webhook URL is requested for a trigger +// that is not a webhook type. +var ErrTriggerIsNotAWebHook = fmt.Errorf("the specified trigger is not a webhook") + +// BuildConfigsNamespacer has methods to work with BuildConfig resources in a namespace +type BuildConfigsNamespacer interface { + BuildConfigs(namespace string) BuildConfigInterface +} + +// BuildConfigInterface exposes methods on BuildConfig resources +type BuildConfigInterface interface { + List(opts kapi.ListOptions) (*buildapi.BuildConfigList, error) + Get(name string) (*buildapi.BuildConfig, error) + Create(config *buildapi.BuildConfig) (*buildapi.BuildConfig, error) + Update(config *buildapi.BuildConfig) (*buildapi.BuildConfig, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) + + Instantiate(request *buildapi.BuildRequest) (result *buildapi.Build, err error) + InstantiateBinary(request *buildapi.BinaryBuildRequestOptions, r io.Reader) (result *buildapi.Build, err error) + + WebHookURL(name string, trigger *buildapi.BuildTriggerPolicy) (*url.URL, error) +} + +// buildConfigs implements BuildConfigsNamespacer interface +type buildConfigs struct { + r *Client + ns string +} + +// newBuildConfigs returns a buildConfigs +func newBuildConfigs(c *Client, namespace string) *buildConfigs { + return &buildConfigs{ + r: c, + ns: namespace, + } +} + +// List returns a list of buildconfigs that match the label and field selectors. +func (c *buildConfigs) List(opts kapi.ListOptions) (result *buildapi.BuildConfigList, err error) { + result = &buildapi.BuildConfigList{} + err = c.r.Get(). + Namespace(c.ns). + Resource("buildConfigs"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular buildconfig and error if one occurs. +func (c *buildConfigs) Get(name string) (result *buildapi.BuildConfig, err error) { + result = &buildapi.BuildConfig{} + err = c.r.Get().Namespace(c.ns).Resource("buildConfigs").Name(name).Do().Into(result) + return +} + +// WebHookURL returns the URL for the provided build config name and trigger policy, or ErrTriggerIsNotAWebHook +// if the trigger is not a webhook type. +func (c *buildConfigs) WebHookURL(name string, trigger *buildapi.BuildTriggerPolicy) (*url.URL, error) { + switch { + case trigger.GenericWebHook != nil: + return c.r.Get().Namespace(c.ns).Resource("buildConfigs").Name(name).SubResource("webhooks").Suffix(trigger.GenericWebHook.Secret, "generic").URL(), nil + case trigger.GitHubWebHook != nil: + return c.r.Get().Namespace(c.ns).Resource("buildConfigs").Name(name).SubResource("webhooks").Suffix(trigger.GitHubWebHook.Secret, "github").URL(), nil + default: + return nil, ErrTriggerIsNotAWebHook + } +} + +// Create creates a new buildconfig. Returns the server's representation of the buildconfig and error if one occurs. +func (c *buildConfigs) Create(build *buildapi.BuildConfig) (result *buildapi.BuildConfig, err error) { + result = &buildapi.BuildConfig{} + err = c.r.Post().Namespace(c.ns).Resource("buildConfigs").Body(build).Do().Into(result) + return +} + +// Update updates the buildconfig on server. Returns the server's representation of the buildconfig and error if one occurs. +func (c *buildConfigs) Update(build *buildapi.BuildConfig) (result *buildapi.BuildConfig, err error) { + result = &buildapi.BuildConfig{} + err = c.r.Put().Namespace(c.ns).Resource("buildConfigs").Name(build.Name).Body(build).Do().Into(result) + return +} + +// Delete deletes a BuildConfig, returns error if one occurs. +func (c *buildConfigs) Delete(name string) error { + return c.r.Delete().Namespace(c.ns).Resource("buildConfigs").Name(name).Do().Error() +} + +// Watch returns a watch.Interface that watches the requested buildConfigs. +func (c *buildConfigs) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("buildConfigs"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} + +// Instantiate instantiates a new build from build config returning new object or an error +func (c *buildConfigs) Instantiate(request *buildapi.BuildRequest) (result *buildapi.Build, err error) { + result = &buildapi.Build{} + err = c.r.Post().Namespace(c.ns).Resource("buildConfigs").Name(request.Name).SubResource("instantiate").Body(request).Do().Into(result) + return +} + +// InstantiateBinary instantiates a new build from a build config, given a structured request and an input stream, +// and returns the created build or an error. +func (c *buildConfigs) InstantiateBinary(request *buildapi.BinaryBuildRequestOptions, r io.Reader) (result *buildapi.Build, err error) { + result = &buildapi.Build{} + err = c.r.Post(). + Namespace(c.ns). + Resource("buildConfigs"). + Name(request.Name). + SubResource("instantiatebinary"). + VersionedParams(request, kapi.ParameterCodec). + Body(r).Do().Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/buildlogs.go b/vendor/github.com/openshift/origin/pkg/client/buildlogs.go new file mode 100644 index 00000000..b0ca9cd1 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/buildlogs.go @@ -0,0 +1,37 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" + + api "github.com/openshift/origin/pkg/build/api" +) + +// BuildLogsNamespacer has methods to work with BuildLogs resources in a namespace +type BuildLogsNamespacer interface { + BuildLogs(namespace string) BuildLogsInterface +} + +// BuildLogsInterface exposes methods on BuildLogs resources. +type BuildLogsInterface interface { + Get(name string, opts api.BuildLogOptions) *restclient.Request +} + +// buildLogs implements BuildLogsNamespacer interface +type buildLogs struct { + r *Client + ns string +} + +// newBuildLogs returns a buildLogs +func newBuildLogs(c *Client, namespace string) *buildLogs { + return &buildLogs{ + r: c, + ns: namespace, + } +} + +// Get builds and returns a buildLog request +func (c *buildLogs) Get(name string, opts api.BuildLogOptions) *restclient.Request { + return c.r.Get().Namespace(c.ns).Resource("builds").Name(name).SubResource("log").VersionedParams(&opts, kapi.ParameterCodec) +} diff --git a/vendor/github.com/openshift/origin/pkg/client/builds.go b/vendor/github.com/openshift/origin/pkg/client/builds.go new file mode 100644 index 00000000..953c2bee --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/builds.go @@ -0,0 +1,104 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + buildapi "github.com/openshift/origin/pkg/build/api" +) + +// BuildsNamespacer has methods to work with Build resources in a namespace +type BuildsNamespacer interface { + Builds(namespace string) BuildInterface +} + +// BuildInterface exposes methods on Build resources. +type BuildInterface interface { + List(opts kapi.ListOptions) (*buildapi.BuildList, error) + Get(name string) (*buildapi.Build, error) + Create(build *buildapi.Build) (*buildapi.Build, error) + Update(build *buildapi.Build) (*buildapi.Build, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) + Clone(request *buildapi.BuildRequest) (*buildapi.Build, error) + UpdateDetails(build *buildapi.Build) (*buildapi.Build, error) +} + +// builds implements BuildsNamespacer interface +type builds struct { + r *Client + ns string +} + +// newBuilds returns a builds +func newBuilds(c *Client, namespace string) *builds { + return &builds{ + r: c, + ns: namespace, + } +} + +// List returns a list of builds that match the label and field selectors. +func (c *builds) List(opts kapi.ListOptions) (result *buildapi.BuildList, err error) { + result = &buildapi.BuildList{} + err = c.r.Get(). + Namespace(c.ns). + Resource("builds"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular build and error if one occurs. +func (c *builds) Get(name string) (result *buildapi.Build, err error) { + result = &buildapi.Build{} + err = c.r.Get().Namespace(c.ns).Resource("builds").Name(name).Do().Into(result) + return +} + +// Create creates new build. Returns the server's representation of the build and error if one occurs. +func (c *builds) Create(build *buildapi.Build) (result *buildapi.Build, err error) { + result = &buildapi.Build{} + err = c.r.Post().Namespace(c.ns).Resource("builds").Body(build).Do().Into(result) + return +} + +// Update updates the build on server. Returns the server's representation of the build and error if one occurs. +func (c *builds) Update(build *buildapi.Build) (result *buildapi.Build, err error) { + result = &buildapi.Build{} + err = c.r.Put().Namespace(c.ns).Resource("builds").Name(build.Name).Body(build).Do().Into(result) + return +} + +// Delete deletes a build, returns error if one occurs. +func (c *builds) Delete(name string) (err error) { + err = c.r.Delete().Namespace(c.ns).Resource("builds").Name(name).Do().Error() + return +} + +// Watch returns a watch.Interface that watches the requested builds +func (c *builds) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("builds"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} + +// Clone creates a clone of a build returning new object or an error +func (c *builds) Clone(request *buildapi.BuildRequest) (result *buildapi.Build, err error) { + result = &buildapi.Build{} + err = c.r.Post().Namespace(c.ns).Resource("builds").Name(request.Name).SubResource("clone").Body(request).Do().Into(result) + return +} + +// UpdateDetails updates the build details for a given build. +// Currently only the Spec.Revision is allowed to be updated. +// Returns the server's representation of the build and error if one occurs. +func (c *builds) UpdateDetails(build *buildapi.Build) (result *buildapi.Build, err error) { + result = &buildapi.Build{} + err = c.r.Put().Namespace(c.ns).Resource("builds").Name(build.Name).SubResource("details").Body(build).Do().Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/client.go b/vendor/github.com/openshift/origin/pkg/client/client.go new file mode 100644 index 00000000..c5c00a17 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/client.go @@ -0,0 +1,367 @@ +package client + +import ( + "fmt" + "os" + "path" + "runtime" + "strings" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/client/restclient" + "k8s.io/kubernetes/pkg/client/typed/discovery" + + "github.com/openshift/origin/pkg/api/latest" + "github.com/openshift/origin/pkg/version" +) + +// Interface exposes methods on OpenShift resources. +type Interface interface { + BuildsNamespacer + BuildConfigsNamespacer + BuildLogsNamespacer + ImagesInterfacer + ImageSignaturesInterfacer + ImageStreamsNamespacer + ImageStreamMappingsNamespacer + ImageStreamTagsNamespacer + ImageStreamImagesNamespacer + ImageStreamSecretsNamespacer + DeploymentConfigsNamespacer + DeploymentLogsNamespacer + RoutesNamespacer + HostSubnetsInterface + NetNamespacesInterface + ClusterNetworkingInterface + EgressNetworkPoliciesNamespacer + IdentitiesInterface + UsersInterface + GroupsInterface + UserIdentityMappingsInterface + ProjectsInterface + ProjectRequestsInterface + LocalSubjectAccessReviewsImpersonator + SubjectAccessReviewsImpersonator + LocalResourceAccessReviewsNamespacer + ResourceAccessReviews + SubjectAccessReviews + LocalSubjectAccessReviewsNamespacer + SelfSubjectRulesReviewsNamespacer + TemplatesNamespacer + TemplateConfigsNamespacer + OAuthClientsInterface + OAuthClientAuthorizationsInterface + OAuthAccessTokensInterface + OAuthAuthorizeTokensInterface + PoliciesNamespacer + PolicyBindingsNamespacer + RolesNamespacer + RoleBindingsNamespacer + ClusterPoliciesInterface + ClusterPolicyBindingsInterface + ClusterRolesInterface + ClusterRoleBindingsInterface + ClusterResourceQuotasInterface + AppliedClusterResourceQuotasNamespacer +} + +// Builds provides a REST client for Builds +func (c *Client) Builds(namespace string) BuildInterface { + return newBuilds(c, namespace) +} + +// BuildConfigs provides a REST client for BuildConfigs +func (c *Client) BuildConfigs(namespace string) BuildConfigInterface { + return newBuildConfigs(c, namespace) +} + +// BuildLogs provides a REST client for BuildLogs +func (c *Client) BuildLogs(namespace string) BuildLogsInterface { + return newBuildLogs(c, namespace) +} + +// Images provides a REST client for Images +func (c *Client) Images() ImageInterface { + return newImages(c) +} + +// ImageSignatures provides a REST client for ImageSignatures +func (c *Client) ImageSignatures() ImageSignatureInterface { + return newImageSignatures(c) +} + +// ImageStreamImages provides a REST client for retrieving image secrets in a namespace +func (c *Client) ImageStreamSecrets(namespace string) ImageStreamSecretInterface { + return newImageStreamSecrets(c, namespace) +} + +// ImageStreams provides a REST client for ImageStream +func (c *Client) ImageStreams(namespace string) ImageStreamInterface { + return newImageStreams(c, namespace) +} + +// ImageStreamMappings provides a REST client for ImageStreamMapping +func (c *Client) ImageStreamMappings(namespace string) ImageStreamMappingInterface { + return newImageStreamMappings(c, namespace) +} + +// ImageStreamTags provides a REST client for ImageStreamTag +func (c *Client) ImageStreamTags(namespace string) ImageStreamTagInterface { + return newImageStreamTags(c, namespace) +} + +// ImageStreamImages provides a REST client for ImageStreamImage +func (c *Client) ImageStreamImages(namespace string) ImageStreamImageInterface { + return newImageStreamImages(c, namespace) +} + +// DeploymentConfigs provides a REST client for DeploymentConfig +func (c *Client) DeploymentConfigs(namespace string) DeploymentConfigInterface { + return newDeploymentConfigs(c, namespace) +} + +// DeploymentLogs provides a REST client for DeploymentLog +func (c *Client) DeploymentLogs(namespace string) DeploymentLogInterface { + return newDeploymentLogs(c, namespace) +} + +// Routes provides a REST client for Route +func (c *Client) Routes(namespace string) RouteInterface { + return newRoutes(c, namespace) +} + +// HostSubnets provides a REST client for HostSubnet +func (c *Client) HostSubnets() HostSubnetInterface { + return newHostSubnet(c) +} + +// NetNamespaces provides a REST client for NetNamespace +func (c *Client) NetNamespaces() NetNamespaceInterface { + return newNetNamespace(c) +} + +// ClusterNetwork provides a REST client for ClusterNetworking +func (c *Client) ClusterNetwork() ClusterNetworkInterface { + return newClusterNetwork(c) +} + +// EgressNetworkPolicies provides a REST client for EgressNetworkPolicy +func (c *Client) EgressNetworkPolicies(namespace string) EgressNetworkPolicyInterface { + return newEgressNetworkPolicy(c, namespace) +} + +// Users provides a REST client for User +func (c *Client) Users() UserInterface { + return newUsers(c) +} + +// Identities provides a REST client for Identity +func (c *Client) Identities() IdentityInterface { + return newIdentities(c) +} + +// UserIdentityMappings provides a REST client for UserIdentityMapping +func (c *Client) UserIdentityMappings() UserIdentityMappingInterface { + return newUserIdentityMappings(c) +} + +// Groups provides a REST client for Groups +func (c *Client) Groups() GroupInterface { + return newGroups(c) +} + +// Projects provides a REST client for Projects +func (c *Client) Projects() ProjectInterface { + return newProjects(c) +} + +// ProjectRequests provides a REST client for Projects +func (c *Client) ProjectRequests() ProjectRequestInterface { + return newProjectRequests(c) +} + +// TemplateConfigs provides a REST client for TemplateConfig +func (c *Client) TemplateConfigs(namespace string) TemplateConfigInterface { + return newTemplateConfigs(c, namespace) +} + +// Templates provides a REST client for Templates +func (c *Client) Templates(namespace string) TemplateInterface { + return newTemplates(c, namespace) +} + +// Policies provides a REST client for Policies +func (c *Client) Policies(namespace string) PolicyInterface { + return newPolicies(c, namespace) +} + +// PolicyBindings provides a REST client for PolicyBindings +func (c *Client) PolicyBindings(namespace string) PolicyBindingInterface { + return newPolicyBindings(c, namespace) +} + +// Roles provides a REST client for Roles +func (c *Client) Roles(namespace string) RoleInterface { + return newRoles(c, namespace) +} + +// RoleBindings provides a REST client for RoleBindings +func (c *Client) RoleBindings(namespace string) RoleBindingInterface { + return newRoleBindings(c, namespace) +} + +// LocalResourceAccessReviews provides a REST client for LocalResourceAccessReviews +func (c *Client) LocalResourceAccessReviews(namespace string) LocalResourceAccessReviewInterface { + return newLocalResourceAccessReviews(c, namespace) +} + +// ClusterResourceAccessReviews provides a REST client for ClusterResourceAccessReviews +func (c *Client) ResourceAccessReviews() ResourceAccessReviewInterface { + return newResourceAccessReviews(c) +} + +// ImpersonateSubjectAccessReviews provides a REST client for SubjectAccessReviews +func (c *Client) ImpersonateSubjectAccessReviews(token string) SubjectAccessReviewInterface { + return newImpersonatingSubjectAccessReviews(c, token) +} + +// ImpersonateLocalSubjectAccessReviews provides a REST client for SubjectAccessReviews +func (c *Client) ImpersonateLocalSubjectAccessReviews(namespace, token string) LocalSubjectAccessReviewInterface { + return newImpersonatingLocalSubjectAccessReviews(c, namespace, token) +} + +// LocalSubjectAccessReviews provides a REST client for LocalSubjectAccessReviews +func (c *Client) LocalSubjectAccessReviews(namespace string) LocalSubjectAccessReviewInterface { + return newLocalSubjectAccessReviews(c, namespace) +} + +// SubjectAccessReviews provides a REST client for SubjectAccessReviews +func (c *Client) SubjectAccessReviews() SubjectAccessReviewInterface { + return newSubjectAccessReviews(c) +} + +func (c *Client) SelfSubjectRulesReviews(namespace string) SelfSubjectRulesReviewInterface { + return newSelfSubjectRulesReviews(c, namespace) +} + +func (c *Client) OAuthClients() OAuthClientInterface { + return newOAuthClients(c) +} + +func (c *Client) OAuthClientAuthorizations() OAuthClientAuthorizationInterface { + return newOAuthClientAuthorizations(c) +} + +func (c *Client) OAuthAccessTokens() OAuthAccessTokenInterface { + return newOAuthAccessTokens(c) +} + +func (c *Client) OAuthAuthorizeTokens() OAuthAuthorizeTokenInterface { + return newOAuthAuthorizeTokens(c) +} + +func (c *Client) ClusterPolicies() ClusterPolicyInterface { + return newClusterPolicies(c) +} + +func (c *Client) ClusterPolicyBindings() ClusterPolicyBindingInterface { + return newClusterPolicyBindings(c) +} + +func (c *Client) ClusterRoles() ClusterRoleInterface { + return newClusterRoles(c) +} + +func (c *Client) ClusterRoleBindings() ClusterRoleBindingInterface { + return newClusterRoleBindings(c) +} + +func (c *Client) ClusterResourceQuotas() ClusterResourceQuotaInterface { + return newClusterResourceQuotas(c) +} + +func (c *Client) AppliedClusterResourceQuotas(namespace string) AppliedClusterResourceQuotaInterface { + return newAppliedClusterResourceQuotas(c, namespace) +} + +// Client is an OpenShift client object +type Client struct { + *restclient.RESTClient +} + +// New creates an OpenShift client for the given config. This client works with builds, deployments, +// templates, routes, and images. It allows operations such as list, get, update and delete on these +// objects. An error is returned if the provided configuration is not valid. +func New(c *restclient.Config) (*Client, error) { + config := *c + if err := SetOpenShiftDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + + return &Client{client}, nil +} + +// DiscoveryClient returns a discovery client. +func (c *Client) Discovery() discovery.DiscoveryInterface { + d := NewDiscoveryClient(c.RESTClient) + return d +} + +// SetOpenShiftDefaults sets the default settings on the passed +// client configuration +func SetOpenShiftDefaults(config *restclient.Config) error { + if len(config.UserAgent) == 0 { + config.UserAgent = DefaultOpenShiftUserAgent() + } + if config.GroupVersion == nil { + // Clients default to the preferred code API version + groupVersionCopy := latest.Version + config.GroupVersion = &groupVersionCopy + } + if config.APIPath == "" { + config.APIPath = "/oapi" + } + if config.NegotiatedSerializer == nil { + config.NegotiatedSerializer = kapi.Codecs + } + return nil +} + +// NewOrDie creates an OpenShift client and panics if the provided API version is not recognized. +func NewOrDie(c *restclient.Config) *Client { + client, err := New(c) + if err != nil { + panic(err) + } + return client +} + +// DefaultOpenShiftUserAgent returns the default user agent that clients can use. +func DefaultOpenShiftUserAgent() string { + commit := version.Get().GitCommit + if len(commit) > 7 { + commit = commit[:7] + } + if len(commit) == 0 { + commit = "unknown" + } + version := version.Get().GitVersion + seg := strings.SplitN(version, "-", 2) + version = seg[0] + return fmt.Sprintf("%s/%s (%s/%s) openshift/%s", path.Base(os.Args[0]), version, runtime.GOOS, runtime.GOARCH, commit) +} + +// IsStatusErrorKind returns true if this error describes the provided kind. +func IsStatusErrorKind(err error, kind string) bool { + if s, ok := err.(errors.APIStatus); ok { + if details := s.Status().Details; details != nil { + return kind == details.Kind + } + } + return false +} diff --git a/vendor/github.com/openshift/origin/pkg/client/clusteresourcequota.go b/vendor/github.com/openshift/origin/pkg/client/clusteresourcequota.go new file mode 100644 index 00000000..e54c2a79 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/clusteresourcequota.go @@ -0,0 +1,73 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + quotaapi "github.com/openshift/origin/pkg/quota/api" +) + +type ClusterResourceQuotasInterface interface { + ClusterResourceQuotas() ClusterResourceQuotaInterface +} + +type ClusterResourceQuotaInterface interface { + List(opts kapi.ListOptions) (*quotaapi.ClusterResourceQuotaList, error) + Get(name string) (*quotaapi.ClusterResourceQuota, error) + Create(resourceQuota *quotaapi.ClusterResourceQuota) (*quotaapi.ClusterResourceQuota, error) + Update(resourceQuota *quotaapi.ClusterResourceQuota) (*quotaapi.ClusterResourceQuota, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) + + UpdateStatus(resourceQuota *quotaapi.ClusterResourceQuota) (*quotaapi.ClusterResourceQuota, error) +} + +type clusterResourceQuotas struct { + r *Client +} + +// newClusterResourceQuotas returns a clusterResourceQuotas +func newClusterResourceQuotas(c *Client) *clusterResourceQuotas { + return &clusterResourceQuotas{ + r: c, + } +} + +func (c *clusterResourceQuotas) List(opts kapi.ListOptions) (result *quotaapi.ClusterResourceQuotaList, err error) { + result = "aapi.ClusterResourceQuotaList{} + err = c.r.Get().Resource("clusterresourcequotas").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +func (c *clusterResourceQuotas) Get(name string) (result *quotaapi.ClusterResourceQuota, err error) { + result = "aapi.ClusterResourceQuota{} + err = c.r.Get().Resource("clusterresourcequotas").Name(name).Do().Into(result) + return +} + +func (c *clusterResourceQuotas) Create(resourceQuota *quotaapi.ClusterResourceQuota) (result *quotaapi.ClusterResourceQuota, err error) { + result = "aapi.ClusterResourceQuota{} + err = c.r.Post().Resource("clusterresourcequotas").Body(resourceQuota).Do().Into(result) + return +} + +func (c *clusterResourceQuotas) Update(resourceQuota *quotaapi.ClusterResourceQuota) (result *quotaapi.ClusterResourceQuota, err error) { + result = "aapi.ClusterResourceQuota{} + err = c.r.Put().Resource("clusterresourcequotas").Name(resourceQuota.Name).Body(resourceQuota).Do().Into(result) + return +} + +func (c *clusterResourceQuotas) Delete(name string) (err error) { + err = c.r.Delete().Resource("clusterresourcequotas").Name(name).Do().Error() + return +} + +func (c *clusterResourceQuotas) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get().Prefix("watch").Resource("clusterresourcequotas").VersionedParams(&opts, kapi.ParameterCodec).Watch() +} + +func (c *clusterResourceQuotas) UpdateStatus(resourceQuota *quotaapi.ClusterResourceQuota) (result *quotaapi.ClusterResourceQuota, err error) { + result = "aapi.ClusterResourceQuota{} + err = c.r.Put().Resource("clusterresourcequotas").Name(resourceQuota.Name).SubResource("status").Body(resourceQuota).Do().Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/clusternetwork.go b/vendor/github.com/openshift/origin/pkg/client/clusternetwork.go new file mode 100644 index 00000000..9f32364c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/clusternetwork.go @@ -0,0 +1,50 @@ +package client + +import ( + sdnapi "github.com/openshift/origin/pkg/sdn/api" +) + +// ClusterNetworkingInterface has methods to work with ClusterNetwork resources +type ClusterNetworkingInterface interface { + ClusterNetwork() ClusterNetworkInterface +} + +// ClusterNetworkInterface exposes methods on clusterNetwork resources. +type ClusterNetworkInterface interface { + Get(name string) (*sdnapi.ClusterNetwork, error) + Create(sub *sdnapi.ClusterNetwork) (*sdnapi.ClusterNetwork, error) + Update(sub *sdnapi.ClusterNetwork) (*sdnapi.ClusterNetwork, error) +} + +// clusterNetwork implements ClusterNetworkInterface interface +type clusterNetwork struct { + r *Client +} + +// newClusterNetwork returns a clusterNetwork +func newClusterNetwork(c *Client) *clusterNetwork { + return &clusterNetwork{ + r: c, + } +} + +// Get returns information about a particular network +func (c *clusterNetwork) Get(networkName string) (result *sdnapi.ClusterNetwork, err error) { + result = &sdnapi.ClusterNetwork{} + err = c.r.Get().Resource("clusterNetworks").Name(networkName).Do().Into(result) + return +} + +// Create creates a new ClusterNetwork. Returns the server's representation of ClusterNetwork and error if one occurs. +func (c *clusterNetwork) Create(cn *sdnapi.ClusterNetwork) (result *sdnapi.ClusterNetwork, err error) { + result = &sdnapi.ClusterNetwork{} + err = c.r.Post().Resource("clusterNetworks").Body(cn).Do().Into(result) + return +} + +// Update updates the ClusterNetwork on the server. Returns the server's representation of the ClusterNetwork and error if one occurs. +func (c *clusterNetwork) Update(cn *sdnapi.ClusterNetwork) (result *sdnapi.ClusterNetwork, err error) { + result = &sdnapi.ClusterNetwork{} + err = c.r.Put().Resource("clusterNetworks").Name(cn.Name).Body(cn).Do().Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/clusterpolicies.go b/vendor/github.com/openshift/origin/pkg/client/clusterpolicies.go new file mode 100644 index 00000000..fb13a112 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/clusterpolicies.go @@ -0,0 +1,68 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// ClusterPoliciesInterface has methods to work with ClusterPolicies resources in a namespace +type ClusterPoliciesInterface interface { + ClusterPolicies() ClusterPolicyInterface +} + +// ClusterPolicyInterface exposes methods on ClusterPolicies resources +type ClusterPolicyInterface interface { + List(opts kapi.ListOptions) (*authorizationapi.ClusterPolicyList, error) + Get(name string) (*authorizationapi.ClusterPolicy, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +type ClusterPoliciesListerInterface interface { + ClusterPolicies() ClusterPolicyLister +} +type ClusterPolicyLister interface { + List(options kapi.ListOptions) (*authorizationapi.ClusterPolicyList, error) + Get(name string) (*authorizationapi.ClusterPolicy, error) +} +type SyncedClusterPoliciesListerInterface interface { + ClusterPoliciesListerInterface + LastSyncResourceVersion() string +} + +type clusterPolicies struct { + r *Client +} + +func newClusterPolicies(c *Client) *clusterPolicies { + return &clusterPolicies{ + r: c, + } +} + +// List returns a list of policies that match the label and field selectors. +func (c *clusterPolicies) List(opts kapi.ListOptions) (result *authorizationapi.ClusterPolicyList, err error) { + result = &authorizationapi.ClusterPolicyList{} + err = c.r.Get().Resource("clusterPolicies").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular policy and error if one occurs. +func (c *clusterPolicies) Get(name string) (result *authorizationapi.ClusterPolicy, err error) { + result = &authorizationapi.ClusterPolicy{} + err = c.r.Get().Resource("clusterPolicies").Name(name).Do().Into(result) + return +} + +// Delete deletes a policy, returns error if one occurs. +func (c *clusterPolicies) Delete(name string) (err error) { + err = c.r.Delete().Resource("clusterPolicies").Name(name).Do().Error() + return +} + +// Watch returns a watch.Interface that watches the requested clusterPolicies +func (c *clusterPolicies) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get().Prefix("watch").Resource("clusterPolicies").VersionedParams(&opts, kapi.ParameterCodec).Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/clusterpolicybindings.go b/vendor/github.com/openshift/origin/pkg/client/clusterpolicybindings.go new file mode 100644 index 00000000..190937fe --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/clusterpolicybindings.go @@ -0,0 +1,77 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// ClusterPolicyBindingsInterface has methods to work with ClusterPolicyBindings resources in a namespace +type ClusterPolicyBindingsInterface interface { + ClusterPolicyBindings() ClusterPolicyBindingInterface +} + +// ClusterPolicyBindingInterface exposes methods on ClusterPolicyBindings resources +type ClusterPolicyBindingInterface interface { + List(opts kapi.ListOptions) (*authorizationapi.ClusterPolicyBindingList, error) + Get(name string) (*authorizationapi.ClusterPolicyBinding, error) + Create(policyBinding *authorizationapi.ClusterPolicyBinding) (*authorizationapi.ClusterPolicyBinding, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +type ClusterPolicyBindingsListerInterface interface { + ClusterPolicyBindings() ClusterPolicyBindingLister +} +type ClusterPolicyBindingLister interface { + List(options kapi.ListOptions) (*authorizationapi.ClusterPolicyBindingList, error) + Get(name string) (*authorizationapi.ClusterPolicyBinding, error) +} +type SyncedClusterPolicyBindingsListerInterface interface { + ClusterPolicyBindingsListerInterface + LastSyncResourceVersion() string +} + +type clusterPolicyBindings struct { + r *Client +} + +// newClusterPolicyBindings returns a clusterPolicyBindings +func newClusterPolicyBindings(c *Client) *clusterPolicyBindings { + return &clusterPolicyBindings{ + r: c, + } +} + +// List returns a list of clusterPolicyBindings that match the label and field selectors. +func (c *clusterPolicyBindings) List(opts kapi.ListOptions) (result *authorizationapi.ClusterPolicyBindingList, err error) { + result = &authorizationapi.ClusterPolicyBindingList{} + err = c.r.Get().Resource("clusterPolicyBindings").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular clusterPolicyBindings and error if one occurs. +func (c *clusterPolicyBindings) Get(name string) (result *authorizationapi.ClusterPolicyBinding, err error) { + result = &authorizationapi.ClusterPolicyBinding{} + err = c.r.Get().Resource("clusterPolicyBindings").Name(name).Do().Into(result) + return +} + +// Create creates new policyBinding. Returns the server's representation of the clusterPolicyBindings and error if one occurs. +func (c *clusterPolicyBindings) Create(policyBinding *authorizationapi.ClusterPolicyBinding) (result *authorizationapi.ClusterPolicyBinding, err error) { + result = &authorizationapi.ClusterPolicyBinding{} + err = c.r.Post().Resource("clusterPolicyBindings").Body(policyBinding).Do().Into(result) + return +} + +// Delete deletes a policyBinding, returns error if one occurs. +func (c *clusterPolicyBindings) Delete(name string) (err error) { + err = c.r.Delete().Resource("clusterPolicyBindings").Name(name).Do().Error() + return +} + +// Watch returns a watch.Interface that watches the requested clusterPolicyBindings +func (c *clusterPolicyBindings) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get().Prefix("watch").Resource("clusterPolicyBindings").VersionedParams(&opts, kapi.ParameterCodec).Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/clusterrolebindings.go b/vendor/github.com/openshift/origin/pkg/client/clusterrolebindings.go new file mode 100644 index 00000000..a5cc7f83 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/clusterrolebindings.go @@ -0,0 +1,66 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// ClusterRoleBindingsInterface has methods to work with ClusterRoleBindings resources in a namespace +type ClusterRoleBindingsInterface interface { + ClusterRoleBindings() ClusterRoleBindingInterface +} + +// ClusterRoleBindingInterface exposes methods on ClusterRoleBindings resources +type ClusterRoleBindingInterface interface { + List(opts kapi.ListOptions) (*authorizationapi.ClusterRoleBindingList, error) + Get(name string) (*authorizationapi.ClusterRoleBinding, error) + Update(roleBinding *authorizationapi.ClusterRoleBinding) (*authorizationapi.ClusterRoleBinding, error) + Create(roleBinding *authorizationapi.ClusterRoleBinding) (*authorizationapi.ClusterRoleBinding, error) + Delete(name string) error +} + +type clusterRoleBindings struct { + r *Client +} + +// newClusterRoleBindings returns a clusterRoleBindings +func newClusterRoleBindings(c *Client) *clusterRoleBindings { + return &clusterRoleBindings{ + r: c, + } +} + +// List returns a list of clusterRoleBindings that match the label and field selectors. +func (c *clusterRoleBindings) List(opts kapi.ListOptions) (result *authorizationapi.ClusterRoleBindingList, err error) { + result = &authorizationapi.ClusterRoleBindingList{} + err = c.r.Get().Resource("clusterRoleBindings").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular roleBinding and error if one occurs. +func (c *clusterRoleBindings) Get(name string) (result *authorizationapi.ClusterRoleBinding, err error) { + result = &authorizationapi.ClusterRoleBinding{} + err = c.r.Get().Resource("clusterRoleBindings").Name(name).Do().Into(result) + return +} + +// Create creates new roleBinding. Returns the server's representation of the roleBinding and error if one occurs. +func (c *clusterRoleBindings) Create(roleBinding *authorizationapi.ClusterRoleBinding) (result *authorizationapi.ClusterRoleBinding, err error) { + result = &authorizationapi.ClusterRoleBinding{} + err = c.r.Post().Resource("clusterRoleBindings").Body(roleBinding).Do().Into(result) + return +} + +// Update updates the roleBinding on server. Returns the server's representation of the roleBinding and error if one occurs. +func (c *clusterRoleBindings) Update(roleBinding *authorizationapi.ClusterRoleBinding) (result *authorizationapi.ClusterRoleBinding, err error) { + result = &authorizationapi.ClusterRoleBinding{} + err = c.r.Put().Resource("clusterRoleBindings").Name(roleBinding.Name).Body(roleBinding).Do().Into(result) + return +} + +// Delete deletes a roleBinding, returns error if one occurs. +func (c *clusterRoleBindings) Delete(name string) (err error) { + err = c.r.Delete().Resource("clusterRoleBindings").Name(name).Do().Error() + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/clusterroles.go b/vendor/github.com/openshift/origin/pkg/client/clusterroles.go new file mode 100644 index 00000000..b814957f --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/clusterroles.go @@ -0,0 +1,66 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// ClusterRolesInterface has methods to work with ClusterRoles resources in a namespace +type ClusterRolesInterface interface { + ClusterRoles() ClusterRoleInterface +} + +// ClusterRoleInterface exposes methods on ClusterRoles resources +type ClusterRoleInterface interface { + List(opts kapi.ListOptions) (*authorizationapi.ClusterRoleList, error) + Get(name string) (*authorizationapi.ClusterRole, error) + Create(role *authorizationapi.ClusterRole) (*authorizationapi.ClusterRole, error) + Update(role *authorizationapi.ClusterRole) (*authorizationapi.ClusterRole, error) + Delete(name string) error +} + +type clusterRoles struct { + r *Client +} + +// newClusterRoles returns a clusterRoles +func newClusterRoles(c *Client) *clusterRoles { + return &clusterRoles{ + r: c, + } +} + +// List returns a list of clusterRoles that match the label and field selectors. +func (c *clusterRoles) List(opts kapi.ListOptions) (result *authorizationapi.ClusterRoleList, err error) { + result = &authorizationapi.ClusterRoleList{} + err = c.r.Get().Resource("clusterRoles").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular role and error if one occurs. +func (c *clusterRoles) Get(name string) (result *authorizationapi.ClusterRole, err error) { + result = &authorizationapi.ClusterRole{} + err = c.r.Get().Resource("clusterRoles").Name(name).Do().Into(result) + return +} + +// Create creates new role. Returns the server's representation of the role and error if one occurs. +func (c *clusterRoles) Create(role *authorizationapi.ClusterRole) (result *authorizationapi.ClusterRole, err error) { + result = &authorizationapi.ClusterRole{} + err = c.r.Post().Resource("clusterRoles").Body(role).Do().Into(result) + return +} + +// Update updates the roleBinding on server. Returns the server's representation of the roleBinding and error if one occurs. +func (c *clusterRoles) Update(role *authorizationapi.ClusterRole) (result *authorizationapi.ClusterRole, err error) { + result = &authorizationapi.ClusterRole{} + err = c.r.Put().Resource("clusterRoles").Name(role.Name).Body(role).Do().Into(result) + return +} + +// Delete deletes a role, returns error if one occurs. +func (c *clusterRoles) Delete(name string) (err error) { + err = c.r.Delete().Resource("clusterRoles").Name(name).Do().Error() + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/deploymentconfigs.go b/vendor/github.com/openshift/origin/pkg/client/deploymentconfigs.go new file mode 100644 index 00000000..cd50f603 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/deploymentconfigs.go @@ -0,0 +1,176 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apis/extensions" + extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/watch" + + deployapi "github.com/openshift/origin/pkg/deploy/api" +) + +// DeploymentConfigsNamespacer has methods to work with DeploymentConfig resources in a namespace +type DeploymentConfigsNamespacer interface { + DeploymentConfigs(namespace string) DeploymentConfigInterface +} + +// DeploymentConfigInterface contains methods for working with DeploymentConfigs +type DeploymentConfigInterface interface { + List(opts kapi.ListOptions) (*deployapi.DeploymentConfigList, error) + Get(name string) (*deployapi.DeploymentConfig, error) + Create(config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) + Update(config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) + Generate(name string) (*deployapi.DeploymentConfig, error) + Rollback(config *deployapi.DeploymentConfigRollback) (*deployapi.DeploymentConfig, error) + RollbackDeprecated(config *deployapi.DeploymentConfigRollback) (*deployapi.DeploymentConfig, error) + GetScale(name string) (*extensions.Scale, error) + UpdateScale(scale *extensions.Scale) (*extensions.Scale, error) + UpdateStatus(config *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) +} + +// deploymentConfigs implements DeploymentConfigsNamespacer interface +type deploymentConfigs struct { + r *Client + ns string +} + +// newDeploymentConfigs returns a deploymentConfigs +func newDeploymentConfigs(c *Client, namespace string) *deploymentConfigs { + return &deploymentConfigs{ + r: c, + ns: namespace, + } +} + +// List takes a label and field selectors, and returns the list of deploymentConfigs that match that selectors +func (c *deploymentConfigs) List(opts kapi.ListOptions) (result *deployapi.DeploymentConfigList, err error) { + result = &deployapi.DeploymentConfigList{} + err = c.r.Get(). + Namespace(c.ns). + Resource("deploymentConfigs"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular deploymentConfig +func (c *deploymentConfigs) Get(name string) (result *deployapi.DeploymentConfig, err error) { + result = &deployapi.DeploymentConfig{} + err = c.r.Get().Namespace(c.ns).Resource("deploymentConfigs").Name(name).Do().Into(result) + return +} + +// Create creates a new deploymentConfig +func (c *deploymentConfigs) Create(deploymentConfig *deployapi.DeploymentConfig) (result *deployapi.DeploymentConfig, err error) { + result = &deployapi.DeploymentConfig{} + err = c.r.Post().Namespace(c.ns).Resource("deploymentConfigs").Body(deploymentConfig).Do().Into(result) + return +} + +// Update updates an existing deploymentConfig +func (c *deploymentConfigs) Update(deploymentConfig *deployapi.DeploymentConfig) (result *deployapi.DeploymentConfig, err error) { + result = &deployapi.DeploymentConfig{} + err = c.r.Put().Namespace(c.ns).Resource("deploymentConfigs").Name(deploymentConfig.Name).Body(deploymentConfig).Do().Into(result) + return +} + +// Delete deletes an existing deploymentConfig. +func (c *deploymentConfigs) Delete(name string) error { + return c.r.Delete().Namespace(c.ns).Resource("deploymentConfigs").Name(name).Do().Error() +} + +// Watch returns a watch.Interface that watches the requested deploymentConfigs. +func (c *deploymentConfigs) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("deploymentConfigs"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} + +// Generate generates a new deploymentConfig for the given name. +func (c *deploymentConfigs) Generate(name string) (result *deployapi.DeploymentConfig, err error) { + result = &deployapi.DeploymentConfig{} + err = c.r.Get().Namespace(c.ns).Resource("generateDeploymentConfigs").Name(name).Do().Into(result) + return +} + +// Rollback rolls a deploymentConfig back to a previous configuration +func (c *deploymentConfigs) Rollback(config *deployapi.DeploymentConfigRollback) (result *deployapi.DeploymentConfig, err error) { + result = &deployapi.DeploymentConfig{} + err = c.r.Post(). + Namespace(c.ns). + Resource("deploymentConfigs"). + Name(config.Name). + SubResource("rollback"). + Body(config). + Do(). + Into(result) + return +} + +// RollbackDeprecated rolls a deploymentConfig back to a previous configuration +func (c *deploymentConfigs) RollbackDeprecated(config *deployapi.DeploymentConfigRollback) (result *deployapi.DeploymentConfig, err error) { + result = &deployapi.DeploymentConfig{} + err = c.r.Post(). + Namespace(c.ns). + Resource("deploymentConfigRollbacks"). + Body(config). + Do(). + Into(result) + return +} + +// GetScale returns information about a particular deploymentConfig via its scale subresource +func (c *deploymentConfigs) GetScale(name string) (result *extensions.Scale, err error) { + result = &extensions.Scale{} + err = c.r.Get().Namespace(c.ns).Resource("deploymentConfigs").Name(name).SubResource("scale").Do().Into(result) + return +} + +// UpdateScale scales an existing deploymentConfig via its scale subresource +func (c *deploymentConfigs) UpdateScale(scale *extensions.Scale) (result *extensions.Scale, err error) { + result = &extensions.Scale{} + + // TODO fix by making the client understand how to encode using different codecs for different resources + encodedBytes, err := runtime.Encode(kapi.Codecs.LegacyCodec(extensionsv1beta1.SchemeGroupVersion), scale) + if err != nil { + return result, err + } + + err = c.r.Put().Namespace(c.ns).Resource("deploymentConfigs").Name(scale.Name).SubResource("scale").Body(encodedBytes).Do().Into(result) + return +} + +// UpdateStatus updates the status for an existing deploymentConfig. +func (c *deploymentConfigs) UpdateStatus(deploymentConfig *deployapi.DeploymentConfig) (result *deployapi.DeploymentConfig, err error) { + result = &deployapi.DeploymentConfig{} + err = c.r.Put().Namespace(c.ns).Resource("deploymentConfigs").Name(deploymentConfig.Name).SubResource("status").Body(deploymentConfig).Do().Into(result) + return +} + +type updateConfigFunc func(d *deployapi.DeploymentConfig) + +// UpdateConfigWithRetries will try to update a deployment config and ignore any update conflicts. +func UpdateConfigWithRetries(dn DeploymentConfigsNamespacer, namespace, name string, applyUpdate updateConfigFunc) (*deployapi.DeploymentConfig, error) { + var config *deployapi.DeploymentConfig + + resultErr := kclient.RetryOnConflict(kclient.DefaultBackoff, func() error { + var err error + config, err = dn.DeploymentConfigs(namespace).Get(name) + if err != nil { + return err + } + // Apply the update, then attempt to push it to the apiserver. + applyUpdate(config) + config, err = dn.DeploymentConfigs(namespace).Update(config) + return err + }) + return config, resultErr +} diff --git a/vendor/github.com/openshift/origin/pkg/client/deploymentlogs.go b/vendor/github.com/openshift/origin/pkg/client/deploymentlogs.go new file mode 100644 index 00000000..6b06d50e --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/deploymentlogs.go @@ -0,0 +1,37 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" + + "github.com/openshift/origin/pkg/deploy/api" +) + +// DeploymentLogsNamespacer has methods to work with DeploymentLogs resources in a namespace +type DeploymentLogsNamespacer interface { + DeploymentLogs(namespace string) DeploymentLogInterface +} + +// DeploymentLogInterface exposes methods on DeploymentLogs resources. +type DeploymentLogInterface interface { + Get(name string, opts api.DeploymentLogOptions) *restclient.Request +} + +// deploymentLogs implements DeploymentLogsNamespacer interface +type deploymentLogs struct { + r *Client + ns string +} + +// newDeploymentLogs returns a deploymentLogs +func newDeploymentLogs(c *Client, namespace string) *deploymentLogs { + return &deploymentLogs{ + r: c, + ns: namespace, + } +} + +// Get gets the deploymentlogs and return a deploymentLog request +func (c *deploymentLogs) Get(name string, opts api.DeploymentLogOptions) *restclient.Request { + return c.r.Get().Namespace(c.ns).Resource("deploymentConfigs").Name(name).SubResource("log").VersionedParams(&opts, kapi.ParameterCodec) +} diff --git a/vendor/github.com/openshift/origin/pkg/client/discovery.go b/vendor/github.com/openshift/origin/pkg/client/discovery.go new file mode 100644 index 00000000..b7fefad5 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/discovery.go @@ -0,0 +1,68 @@ +package client + +import ( + "net/url" + + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" + "k8s.io/kubernetes/pkg/client/typed/discovery" +) + +// DiscoveryClient implements the functions that discovery server-supported API groups, +// versions and resources. +type DiscoveryClient struct { + *discovery.DiscoveryClient +} + +// ServerResourcesForGroupVersion returns the supported resources for a group and version. +func (d *DiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (resources *unversioned.APIResourceList, err error) { + parentList, err := d.DiscoveryClient.ServerResourcesForGroupVersion(groupVersion) + if err != nil { + return parentList, err + } + + if groupVersion != "v1" { + return parentList, nil + } + + // we request v1, we must combine the parent list with the list from /oapi + + url := url.URL{} + url.Path = "/oapi/" + groupVersion + originResources := &unversioned.APIResourceList{} + err = d.Get().AbsPath(url.String()).Do().Into(originResources) + if err != nil { + // ignore 403 or 404 error to be compatible with an v1.0 server. + if groupVersion == "v1" && (errors.IsNotFound(err) || errors.IsForbidden(err)) { + return parentList, nil + } + return nil, err + } + + parentList.APIResources = append(parentList.APIResources, originResources.APIResources...) + return parentList, nil +} + +// ServerResources returns the supported resources for all groups and versions. +func (d *DiscoveryClient) ServerResources() (map[string]*unversioned.APIResourceList, error) { + apiGroups, err := d.ServerGroups() + if err != nil { + return nil, err + } + groupVersions := unversioned.ExtractGroupVersions(apiGroups) + result := map[string]*unversioned.APIResourceList{} + for _, groupVersion := range groupVersions { + resources, err := d.ServerResourcesForGroupVersion(groupVersion) + if err != nil { + return nil, err + } + result[groupVersion] = resources + } + return result, nil +} + +// New creates a new DiscoveryClient for the given RESTClient. +func NewDiscoveryClient(c *restclient.RESTClient) *DiscoveryClient { + return &DiscoveryClient{discovery.NewDiscoveryClient(c)} +} diff --git a/vendor/github.com/openshift/origin/pkg/client/egressnetworkpolicy.go b/vendor/github.com/openshift/origin/pkg/client/egressnetworkpolicy.go new file mode 100644 index 00000000..17a88be3 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/egressnetworkpolicy.go @@ -0,0 +1,85 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + sdnapi "github.com/openshift/origin/pkg/sdn/api" +) + +// EgressNetworkPoliciesNamespacer has methods to work with EgressNetworkPolicy resources in a namespace +type EgressNetworkPoliciesNamespacer interface { + EgressNetworkPolicies(namespace string) EgressNetworkPolicyInterface +} + +// EgressNetworkPolicyInterface exposes methods on egressNetworkPolicy resources. +type EgressNetworkPolicyInterface interface { + List(opts kapi.ListOptions) (*sdnapi.EgressNetworkPolicyList, error) + Get(name string) (*sdnapi.EgressNetworkPolicy, error) + Create(sub *sdnapi.EgressNetworkPolicy) (*sdnapi.EgressNetworkPolicy, error) + Update(sub *sdnapi.EgressNetworkPolicy) (*sdnapi.EgressNetworkPolicy, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +// egressNetworkPolicy implements EgressNetworkPolicyInterface interface +type egressNetworkPolicy struct { + r *Client + ns string +} + +// newEgressNetworkPolicy returns a egressNetworkPolicy +func newEgressNetworkPolicy(c *Client, namespace string) *egressNetworkPolicy { + return &egressNetworkPolicy{ + r: c, + ns: namespace, + } +} + +// List returns a list of EgressNetworkPolicy that match the label and field selectors. +func (c *egressNetworkPolicy) List(opts kapi.ListOptions) (result *sdnapi.EgressNetworkPolicyList, err error) { + result = &sdnapi.EgressNetworkPolicyList{} + err = c.r.Get(). + Namespace(c.ns). + Resource("egressNetworkPolicies"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular firewall +func (c *egressNetworkPolicy) Get(name string) (result *sdnapi.EgressNetworkPolicy, err error) { + result = &sdnapi.EgressNetworkPolicy{} + err = c.r.Get().Namespace(c.ns).Resource("egressNetworkPolicies").Name(name).Do().Into(result) + return +} + +// Create creates a new EgressNetworkPolicy. Returns the server's representation of EgressNetworkPolicy and error if one occurs. +func (c *egressNetworkPolicy) Create(fw *sdnapi.EgressNetworkPolicy) (result *sdnapi.EgressNetworkPolicy, err error) { + result = &sdnapi.EgressNetworkPolicy{} + err = c.r.Post().Namespace(c.ns).Resource("egressNetworkPolicies").Body(fw).Do().Into(result) + return +} + +// Update updates the EgressNetworkPolicy on the server. Returns the server's representation of the EgressNetworkPolicy and error if one occurs. +func (c *egressNetworkPolicy) Update(fw *sdnapi.EgressNetworkPolicy) (result *sdnapi.EgressNetworkPolicy, err error) { + result = &sdnapi.EgressNetworkPolicy{} + err = c.r.Put().Namespace(c.ns).Resource("egressNetworkPolicies").Name(fw.Name).Body(fw).Do().Into(result) + return +} + +// Delete takes the name of the EgressNetworkPolicy, and returns an error if one occurs during deletion of the EgressNetworkPolicy +func (c *egressNetworkPolicy) Delete(name string) error { + return c.r.Delete().Namespace(c.ns).Resource("egressNetworkPolicies").Name(name).Do().Error() +} + +// Watch returns a watch.Interface that watches the requested EgressNetworkPolicies +func (c *egressNetworkPolicy) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("egressNetworkPolicies"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/groups.go b/vendor/github.com/openshift/origin/pkg/client/groups.go new file mode 100644 index 00000000..32601f88 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/groups.go @@ -0,0 +1,81 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + userapi "github.com/openshift/origin/pkg/user/api" +) + +// GroupsInterface has methods to work with Group resources +type GroupsInterface interface { + Groups() GroupInterface +} + +// GroupInterface exposes methods on group resources. +type GroupInterface interface { + List(opts kapi.ListOptions) (*userapi.GroupList, error) + Get(name string) (*userapi.Group, error) + Create(group *userapi.Group) (*userapi.Group, error) + Update(group *userapi.Group) (*userapi.Group, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +// groups implements GroupInterface interface +type groups struct { + r *Client +} + +// newGroups returns a groups +func newGroups(c *Client) *groups { + return &groups{ + r: c, + } +} + +// List returns a list of groups that match the label and field selectors. +func (c *groups) List(opts kapi.ListOptions) (result *userapi.GroupList, err error) { + result = &userapi.GroupList{} + err = c.r.Get(). + Resource("groups"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular group or an error +func (c *groups) Get(name string) (result *userapi.Group, err error) { + result = &userapi.Group{} + err = c.r.Get().Resource("groups").Name(name).Do().Into(result) + return +} + +// Create creates a new group. Returns the server's representation of the group and error if one occurs. +func (c *groups) Create(group *userapi.Group) (result *userapi.Group, err error) { + result = &userapi.Group{} + err = c.r.Post().Resource("groups").Body(group).Do().Into(result) + return +} + +// Update updates the group on server. Returns the server's representation of the group and error if one occurs. +func (c *groups) Update(group *userapi.Group) (result *userapi.Group, err error) { + result = &userapi.Group{} + err = c.r.Put().Resource("groups").Name(group.Name).Body(group).Do().Into(result) + return +} + +// Delete takes the name of the groups, and returns an error if one occurs during deletion of the groups +func (c *groups) Delete(name string) error { + return c.r.Delete().Resource("groups").Name(name).Do().Error() +} + +// Watch returns a watch.Interface that watches the requested groups. +func (c *groups) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Resource("groups"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/hostsubnets.go b/vendor/github.com/openshift/origin/pkg/client/hostsubnets.go new file mode 100644 index 00000000..6d95b2bf --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/hostsubnets.go @@ -0,0 +1,81 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + sdnapi "github.com/openshift/origin/pkg/sdn/api" +) + +// HostSubnetInterface has methods to work with HostSubnet resources +type HostSubnetsInterface interface { + HostSubnets() HostSubnetInterface +} + +// HostSubnetInterface exposes methods on HostSubnet resources. +type HostSubnetInterface interface { + List(opts kapi.ListOptions) (*sdnapi.HostSubnetList, error) + Get(name string) (*sdnapi.HostSubnet, error) + Create(sub *sdnapi.HostSubnet) (*sdnapi.HostSubnet, error) + Update(sub *sdnapi.HostSubnet) (*sdnapi.HostSubnet, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +// hostSubnet implements HostSubnetInterface interface +type hostSubnet struct { + r *Client +} + +// newHostSubnet returns a hostsubnet +func newHostSubnet(c *Client) *hostSubnet { + return &hostSubnet{ + r: c, + } +} + +// List returns a list of hostsubnets that match the label and field selectors. +func (c *hostSubnet) List(opts kapi.ListOptions) (result *sdnapi.HostSubnetList, err error) { + result = &sdnapi.HostSubnetList{} + err = c.r.Get(). + Resource("hostSubnets"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns host subnet information for a given host or an error +func (c *hostSubnet) Get(hostName string) (result *sdnapi.HostSubnet, err error) { + result = &sdnapi.HostSubnet{} + err = c.r.Get().Resource("hostSubnets").Name(hostName).Do().Into(result) + return +} + +// Create creates a new host subnet. Returns the server's representation of the host subnet and error if one occurs. +func (c *hostSubnet) Create(hostSubnet *sdnapi.HostSubnet) (result *sdnapi.HostSubnet, err error) { + result = &sdnapi.HostSubnet{} + err = c.r.Post().Resource("hostSubnets").Body(hostSubnet).Do().Into(result) + return +} + +// Update updates existing host subnet. Returns the server's representation of the host subnet and error if one occurs. +func (c *hostSubnet) Update(hostSubnet *sdnapi.HostSubnet) (result *sdnapi.HostSubnet, err error) { + result = &sdnapi.HostSubnet{} + err = c.r.Put().Resource("hostSubnets").Name(hostSubnet.Name).Body(hostSubnet).Do().Into(result) + return +} + +// Delete takes the name of the host, and returns an error if one occurs during deletion of the subnet +func (c *hostSubnet) Delete(name string) error { + return c.r.Delete().Resource("hostSubnets").Name(name).Do().Error() +} + +// Watch returns a watch.Interface that watches the requested subnets +func (c *hostSubnet) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Resource("hostSubnets"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/identities.go b/vendor/github.com/openshift/origin/pkg/client/identities.go new file mode 100644 index 00000000..9c3ff235 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/identities.go @@ -0,0 +1,70 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + + userapi "github.com/openshift/origin/pkg/user/api" +) + +// IdentitiesInterface has methods to work with Identity resources +type IdentitiesInterface interface { + Identities() IdentityInterface +} + +// IdentityInterface exposes methods on identity resources. +type IdentityInterface interface { + List(opts kapi.ListOptions) (*userapi.IdentityList, error) + Get(name string) (*userapi.Identity, error) + Create(identity *userapi.Identity) (*userapi.Identity, error) + Update(identity *userapi.Identity) (*userapi.Identity, error) + Delete(name string) error +} + +// identities implements IdentityInterface interface +type identities struct { + r *Client +} + +// newIdentities returns an identities client +func newIdentities(c *Client) *identities { + return &identities{ + r: c, + } +} + +// List returns a list of identities that match the label and field selectors. +func (c *identities) List(opts kapi.ListOptions) (result *userapi.IdentityList, err error) { + result = &userapi.IdentityList{} + err = c.r.Get(). + Resource("identities"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular identity or an error +func (c *identities) Get(name string) (result *userapi.Identity, err error) { + result = &userapi.Identity{} + err = c.r.Get().Resource("identities").Name(name).Do().Into(result) + return +} + +// Create creates a new identity. Returns the server's representation of the identity and error if one occurs. +func (c *identities) Create(identity *userapi.Identity) (result *userapi.Identity, err error) { + result = &userapi.Identity{} + err = c.r.Post().Resource("identities").Body(identity).Do().Into(result) + return +} + +// Update updates the identity on server. Returns the server's representation of the identity and error if one occurs. +func (c *identities) Update(identity *userapi.Identity) (result *userapi.Identity, err error) { + result = &userapi.Identity{} + err = c.r.Put().Resource("identities").Name(identity.Name).Body(identity).Do().Into(result) + return +} + +// Delete deletes the identity on server. Returns an error if one occurs. +func (c *identities) Delete(name string) (err error) { + return c.r.Delete().Resource("identities").Name(name).Do().Error() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/images.go b/vendor/github.com/openshift/origin/pkg/client/images.go new file mode 100644 index 00000000..3ecd27ec --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/images.go @@ -0,0 +1,72 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + + imageapi "github.com/openshift/origin/pkg/image/api" +) + +// ImagesInterfacer has methods to work with Image resources +type ImagesInterfacer interface { + Images() ImageInterface +} + +// ImageInterface exposes methods on Image resources. +type ImageInterface interface { + List(opts kapi.ListOptions) (*imageapi.ImageList, error) + Get(name string) (*imageapi.Image, error) + Create(image *imageapi.Image) (*imageapi.Image, error) + Update(image *imageapi.Image) (*imageapi.Image, error) + Delete(name string) error +} + +// images implements ImagesInterface. +type images struct { + r *Client +} + +// newImages returns an images +func newImages(c *Client) ImageInterface { + return &images{ + r: c, + } +} + +// List returns a list of images that match the label and field selectors. +func (c *images) List(opts kapi.ListOptions) (result *imageapi.ImageList, err error) { + result = &imageapi.ImageList{} + err = c.r.Get(). + Resource("images"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular image and error if one occurs. +func (c *images) Get(name string) (result *imageapi.Image, err error) { + result = &imageapi.Image{} + err = c.r.Get().Resource("images").Name(name).Do().Into(result) + return +} + +// Create creates a new image. Returns the server's representation of the image and error if one occurs. +func (c *images) Create(image *imageapi.Image) (result *imageapi.Image, err error) { + result = &imageapi.Image{} + err = c.r.Post().Resource("images").Body(image).Do().Into(result) + return +} + +// Update allows to modify existing image. Since most of image's attributes are immutable, this call allows +// mainly for updating image signatures. +func (c *images) Update(image *imageapi.Image) (result *imageapi.Image, err error) { + result = &imageapi.Image{} + err = c.r.Put().Resource("images").Name(image.Name).Body(image).Do().Into(result) + return +} + +// Delete deletes an image, returns error if one occurs. +func (c *images) Delete(name string) (err error) { + err = c.r.Delete().Resource("images").Name(name).Do().Error() + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/imagesignatures.go b/vendor/github.com/openshift/origin/pkg/client/imagesignatures.go new file mode 100644 index 00000000..4f987aba --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/imagesignatures.go @@ -0,0 +1,41 @@ +package client + +import ( + imageapi "github.com/openshift/origin/pkg/image/api" +) + +// ImageSignaturesInterfacer has methods to work with ImageSignature resource. +type ImageSignaturesInterfacer interface { + ImageSignatures() ImageSignatureInterface +} + +// ImageSignatureInterface exposes methods on ImageSignature virtual resource. +type ImageSignatureInterface interface { + Create(signature *imageapi.ImageSignature) (*imageapi.ImageSignature, error) + Delete(name string) error +} + +// imageSignatures implements ImageSignatureInterface. +type imageSignatures struct { + r *Client +} + +// newImageSignatures returns imageSignatures +func newImageSignatures(c *Client) ImageSignatureInterface { + return &imageSignatures{ + r: c, + } +} + +// Create creates a new ImageSignature. Returns the server's representation of the signature and error if one +// occurs. +func (c *imageSignatures) Create(signature *imageapi.ImageSignature) (result *imageapi.ImageSignature, err error) { + result = &imageapi.ImageSignature{} + err = c.r.Post().Resource("imageSignatures").Body(signature).Do().Into(result) + return +} + +// Delete deletes an ImageSignature, returns error if one occurs. +func (c *imageSignatures) Delete(name string) error { + return c.r.Delete().Resource("imageSignatures").Name(name).Do().Error() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/imagestreamimages.go b/vendor/github.com/openshift/origin/pkg/client/imagestreamimages.go new file mode 100644 index 00000000..3c33f3fc --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/imagestreamimages.go @@ -0,0 +1,36 @@ +package client + +import ( + "github.com/openshift/origin/pkg/image/api" +) + +// ImageStreamImagesNamespacer has methods to work with ImageStreamImage resources in a namespace +type ImageStreamImagesNamespacer interface { + ImageStreamImages(namespace string) ImageStreamImageInterface +} + +// ImageStreamImageInterface exposes methods on ImageStreamImage resources. +type ImageStreamImageInterface interface { + Get(name, id string) (*api.ImageStreamImage, error) +} + +// imageStreamImages implements ImageStreamImagesNamespacer interface +type imageStreamImages struct { + r *Client + ns string +} + +// newImageStreamImages returns an imageStreamImages +func newImageStreamImages(c *Client, namespace string) *imageStreamImages { + return &imageStreamImages{ + r: c, + ns: namespace, + } +} + +// Get finds the specified image by name of an image repository and id. +func (c *imageStreamImages) Get(name, id string) (result *api.ImageStreamImage, err error) { + result = &api.ImageStreamImage{} + err = c.r.Get().Namespace(c.ns).Resource("imageStreamImages").Name(api.MakeImageStreamImageName(name, id)).Do().Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/imagestreammappings.go b/vendor/github.com/openshift/origin/pkg/client/imagestreammappings.go new file mode 100644 index 00000000..b1dcf62e --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/imagestreammappings.go @@ -0,0 +1,34 @@ +package client + +import ( + imageapi "github.com/openshift/origin/pkg/image/api" +) + +// ImageStreamMappingsNamespacer has methods to work with ImageStreamMapping resources in a namespace +type ImageStreamMappingsNamespacer interface { + ImageStreamMappings(namespace string) ImageStreamMappingInterface +} + +// ImageStreamMappingInterface exposes methods on ImageStreamMapping resources. +type ImageStreamMappingInterface interface { + Create(mapping *imageapi.ImageStreamMapping) error +} + +// imageStreamMappings implements ImageStreamMappingsNamespacer interface +type imageStreamMappings struct { + r *Client + ns string +} + +// newImageStreamMappings returns an imageStreamMappings +func newImageStreamMappings(c *Client, namespace string) *imageStreamMappings { + return &imageStreamMappings{ + r: c, + ns: namespace, + } +} + +// Create creates a new image stream mapping on the server. Returns error if one occurs. +func (c *imageStreamMappings) Create(mapping *imageapi.ImageStreamMapping) error { + return c.r.Post().Namespace(c.ns).Resource("imageStreamMappings").Body(mapping).Do().Error() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/imagestreams.go b/vendor/github.com/openshift/origin/pkg/client/imagestreams.go new file mode 100644 index 00000000..42a855cb --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/imagestreams.go @@ -0,0 +1,147 @@ +package client + +import ( + "errors" + + kapi "k8s.io/kubernetes/pkg/api" + apierrs "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/watch" + + imageapi "github.com/openshift/origin/pkg/image/api" + quotautil "github.com/openshift/origin/pkg/quota/util" +) + +var ErrImageStreamImportUnsupported = errors.New("the server does not support directly importing images - create an image stream with tags or the dockerImageRepository field set") + +// ImageStreamsNamespacer has methods to work with ImageStream resources in a namespace +type ImageStreamsNamespacer interface { + ImageStreams(namespace string) ImageStreamInterface +} + +// ImageStreamInterface exposes methods on ImageStream resources. +type ImageStreamInterface interface { + List(opts kapi.ListOptions) (*imageapi.ImageStreamList, error) + Get(name string) (*imageapi.ImageStream, error) + Create(stream *imageapi.ImageStream) (*imageapi.ImageStream, error) + Update(stream *imageapi.ImageStream) (*imageapi.ImageStream, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) + UpdateStatus(stream *imageapi.ImageStream) (*imageapi.ImageStream, error) + Import(isi *imageapi.ImageStreamImport) (*imageapi.ImageStreamImport, error) +} + +// ImageStreamNamespaceGetter exposes methods to get ImageStreams by Namespace +type ImageStreamNamespaceGetter interface { + GetByNamespace(namespace, name string) (*imageapi.ImageStream, error) +} + +// imageStreams implements ImageStreamsNamespacer interface +type imageStreams struct { + r *Client + ns string +} + +// newImageStreams returns an imageStreams +func newImageStreams(c *Client, namespace string) *imageStreams { + return &imageStreams{ + r: c, + ns: namespace, + } +} + +// List returns a list of image streams that match the label and field selectors. +func (c *imageStreams) List(opts kapi.ListOptions) (result *imageapi.ImageStreamList, err error) { + result = &imageapi.ImageStreamList{} + err = c.r.Get(). + Namespace(c.ns). + Resource("imageStreams"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular image stream and error if one occurs. +func (c *imageStreams) Get(name string) (result *imageapi.ImageStream, err error) { + result = &imageapi.ImageStream{} + err = c.r.Get().Namespace(c.ns).Resource("imageStreams").Name(name).Do().Into(result) + return +} + +// GetByNamespace returns information about a particular image stream in a particular namespace and error if one occurs. +func (c *imageStreams) GetByNamespace(namespace, name string) (result *imageapi.ImageStream, err error) { + result = &imageapi.ImageStream{} + c.r.Get().Namespace(namespace).Resource("imageStreams").Name(name).Do().Into(result) + return +} + +// Create create a new image stream. Returns the server's representation of the image stream and error if one occurs. +func (c *imageStreams) Create(stream *imageapi.ImageStream) (result *imageapi.ImageStream, err error) { + result = &imageapi.ImageStream{} + err = c.r.Post().Namespace(c.ns).Resource("imageStreams").Body(stream).Do().Into(result) + return +} + +// Update updates the image stream on the server. Returns the server's representation of the image stream and error if one occurs. +func (c *imageStreams) Update(stream *imageapi.ImageStream) (result *imageapi.ImageStream, err error) { + result = &imageapi.ImageStream{} + err = c.r.Put().Namespace(c.ns).Resource("imageStreams").Name(stream.Name).Body(stream).Do().Into(result) + return +} + +// Delete deletes an image stream, returns error if one occurs. +func (c *imageStreams) Delete(name string) (err error) { + err = c.r.Delete().Namespace(c.ns).Resource("imageStreams").Name(name).Do().Error() + return +} + +// Watch returns a watch.Interface that watches the requested image streams. +func (c *imageStreams) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("imageStreams"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} + +// UpdateStatus updates the image stream's status. Returns the server's representation of the image stream, and an error, if it occurs. +func (c *imageStreams) UpdateStatus(stream *imageapi.ImageStream) (result *imageapi.ImageStream, err error) { + result = &imageapi.ImageStream{} + err = c.r.Put().Namespace(c.ns).Resource("imageStreams").Name(stream.Name).SubResource("status").Body(stream).Do().Into(result) + return +} + +// Import makes a call to the server to retrieve information about the requested images or to perform an import. ImageStreamImport +// will be returned if no actual import was requested (the to fields were not set), or an ImageStream if import was requested. +func (c *imageStreams) Import(isi *imageapi.ImageStreamImport) (*imageapi.ImageStreamImport, error) { + result := &imageapi.ImageStreamImport{} + if err := c.r.Post().Namespace(c.ns).Resource("imageStreamImports").Body(isi).Do().Into(result); err != nil { + return nil, transformUnsupported(err) + } + return result, nil +} + +// transformUnsupported converts specific error conditions to unsupported +func transformUnsupported(err error) error { + if err == nil { + return nil + } + if apierrs.IsNotFound(err) { + status, ok := err.(apierrs.APIStatus) + if !ok { + return ErrImageStreamImportUnsupported + } + if status.Status().Details == nil || status.Status().Details.Kind == "" { + return ErrImageStreamImportUnsupported + } + } + // The ImageStreamImport resource exists in v1.1.1 of origin but is not yet + // enabled by policy. A create request will return a Forbidden(403) error. + // We want to return ErrImageStreamImportUnsupported to allow fallback behavior + // in clients. + if apierrs.IsForbidden(err) && !quotautil.IsErrorQuotaExceeded(err) { + return ErrImageStreamImportUnsupported + } + return err +} diff --git a/vendor/github.com/openshift/origin/pkg/client/imagestreamsecrets.go b/vendor/github.com/openshift/origin/pkg/client/imagestreamsecrets.go new file mode 100644 index 00000000..dc831dd3 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/imagestreamsecrets.go @@ -0,0 +1,44 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" +) + +// ImageStreamSecretsNamespacer has methods to work with ImageStreamSecret resources in a namespace +type ImageStreamSecretsNamespacer interface { + ImageStreamSecrets(namespace string) ImageStreamSecretInterface +} + +// ImageStreamSecretInterface exposes methods on ImageStreamSecret resources. +type ImageStreamSecretInterface interface { + // Secrets retrieves the secrets for a named image stream with the provided list options. + Secrets(name string, options kapi.ListOptions) (*kapi.SecretList, error) +} + +// imageStreamSecrets implements ImageStreamSecretsNamespacer interface +type imageStreamSecrets struct { + r *Client + ns string +} + +// newImageStreamSecrets returns an imageStreamSecrets +func newImageStreamSecrets(c *Client, namespace string) *imageStreamSecrets { + return &imageStreamSecrets{ + r: c, + ns: namespace, + } +} + +// GetSecrets returns a list of secrets for the named image stream +func (c *imageStreamSecrets) Secrets(name string, options kapi.ListOptions) (result *kapi.SecretList, err error) { + result = &kapi.SecretList{} + err = c.r.Get(). + Namespace(c.ns). + Resource("imageStreams"). + Name(name). + SubResource("secrets"). + VersionedParams(&options, kapi.ParameterCodec). + Do(). + Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/imagestreamtags.go b/vendor/github.com/openshift/origin/pkg/client/imagestreamtags.go new file mode 100644 index 00000000..44b30f74 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/imagestreamtags.go @@ -0,0 +1,57 @@ +package client + +import ( + "github.com/openshift/origin/pkg/image/api" +) + +// ImageStreamTagsNamespacer has methods to work with ImageStreamTag resources in a namespace +type ImageStreamTagsNamespacer interface { + ImageStreamTags(namespace string) ImageStreamTagInterface +} + +// ImageStreamTagInterface exposes methods on ImageStreamTag resources. +type ImageStreamTagInterface interface { + Get(name, tag string) (*api.ImageStreamTag, error) + Create(tag *api.ImageStreamTag) (*api.ImageStreamTag, error) + Update(tag *api.ImageStreamTag) (*api.ImageStreamTag, error) + Delete(name, tag string) error +} + +// imageStreamTags implements ImageStreamTagsNamespacer interface +type imageStreamTags struct { + r *Client + ns string +} + +// newImageStreamTags returns an imageStreamTags +func newImageStreamTags(c *Client, namespace string) *imageStreamTags { + return &imageStreamTags{ + r: c, + ns: namespace, + } +} + +// Get finds the specified image by name of an image stream and tag. +func (c *imageStreamTags) Get(name, tag string) (result *api.ImageStreamTag, err error) { + result = &api.ImageStreamTag{} + err = c.r.Get().Namespace(c.ns).Resource("imageStreamTags").Name(api.JoinImageStreamTag(name, tag)).Do().Into(result) + return +} + +// Update updates an image stream tag (creating it if it does not exist). +func (c *imageStreamTags) Update(tag *api.ImageStreamTag) (result *api.ImageStreamTag, err error) { + result = &api.ImageStreamTag{} + err = c.r.Put().Namespace(c.ns).Resource("imageStreamTags").Name(tag.Name).Body(tag).Do().Into(result) + return +} + +func (c *imageStreamTags) Create(tag *api.ImageStreamTag) (result *api.ImageStreamTag, err error) { + result = &api.ImageStreamTag{} + err = c.r.Post().Namespace(c.ns).Resource("imageStreamTags").Body(tag).Do().Into(result) + return +} + +// Delete deletes the specified tag from the image stream. +func (c *imageStreamTags) Delete(name, tag string) error { + return c.r.Delete().Namespace(c.ns).Resource("imageStreamTags").Name(api.JoinImageStreamTag(name, tag)).Do().Error() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/localresourceaccessreview.go b/vendor/github.com/openshift/origin/pkg/client/localresourceaccessreview.go new file mode 100644 index 00000000..4061fa88 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/localresourceaccessreview.go @@ -0,0 +1,51 @@ +package client + +import ( + kapierrors "k8s.io/kubernetes/pkg/api/errors" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// LocalResourceAccessReviewsNamespacer has methods to work with LocalResourceAccessReview resources in a namespace +type LocalResourceAccessReviewsNamespacer interface { + LocalResourceAccessReviews(namespace string) LocalResourceAccessReviewInterface +} + +// LocalResourceAccessReviewInterface exposes methods on LocalResourceAccessReview resources. +type LocalResourceAccessReviewInterface interface { + Create(policy *authorizationapi.LocalResourceAccessReview) (*authorizationapi.ResourceAccessReviewResponse, error) +} + +// localResourceAccessReviews implements ResourceAccessReviewsNamespacer interface +type localResourceAccessReviews struct { + r *Client + ns string +} + +// newLocalResourceAccessReviews returns a localLocalResourceAccessReviews +func newLocalResourceAccessReviews(c *Client, namespace string) *localResourceAccessReviews { + return &localResourceAccessReviews{ + r: c, + ns: namespace, + } +} + +func (c *localResourceAccessReviews) Create(rar *authorizationapi.LocalResourceAccessReview) (result *authorizationapi.ResourceAccessReviewResponse, err error) { + result = &authorizationapi.ResourceAccessReviewResponse{} + err = c.r.Post().Namespace(c.ns).Resource("localResourceAccessReviews").Body(rar).Do().Into(result) + + // if we get one of these failures, we may be talking to an older openshift. In that case, we need to try hitting ns/namespace-name/subjectaccessreview + if kapierrors.IsForbidden(err) || kapierrors.IsNotFound(err) { + deprecatedRAR := &authorizationapi.ResourceAccessReview{ + Action: rar.Action, + } + deprecatedResponse := &authorizationapi.ResourceAccessReviewResponse{} + deprecatedAttemptErr := c.r.Post().Namespace(c.ns).Resource("resourceAccessReviews").Body(deprecatedRAR).Do().Into(deprecatedResponse) + if deprecatedAttemptErr == nil { + err = nil + result = deprecatedResponse + } + } + + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/localsubjectaccessreview.go b/vendor/github.com/openshift/origin/pkg/client/localsubjectaccessreview.go new file mode 100644 index 00000000..b3bca9a3 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/localsubjectaccessreview.go @@ -0,0 +1,78 @@ +package client + +import ( + kapierrors "k8s.io/kubernetes/pkg/api/errors" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +type LocalSubjectAccessReviewsImpersonator interface { + ImpersonateLocalSubjectAccessReviews(namespace, token string) LocalSubjectAccessReviewInterface +} + +// LocalSubjectAccessReviewsNamespacer has methods to work with LocalSubjectAccessReview resources in a namespace +type LocalSubjectAccessReviewsNamespacer interface { + LocalSubjectAccessReviews(namespace string) LocalSubjectAccessReviewInterface +} + +// LocalSubjectAccessReviewInterface exposes methods on LocalSubjectAccessReview resources. +type LocalSubjectAccessReviewInterface interface { + Create(policy *authorizationapi.LocalSubjectAccessReview) (*authorizationapi.SubjectAccessReviewResponse, error) +} + +// localSubjectAccessReviews implements LocalSubjectAccessReviewsNamespacer interface +type localSubjectAccessReviews struct { + r *Client + ns string + token *string +} + +// newImpersonatingLocalSubjectAccessReviews returns a subjectAccessReviews +func newImpersonatingLocalSubjectAccessReviews(c *Client, namespace, token string) *localSubjectAccessReviews { + return &localSubjectAccessReviews{ + r: c, + ns: namespace, + token: &token, + } +} + +// newLocalSubjectAccessReviews returns a localSubjectAccessReviews +func newLocalSubjectAccessReviews(c *Client, namespace string) *localSubjectAccessReviews { + return &localSubjectAccessReviews{ + r: c, + ns: namespace, + } +} + +func (c *localSubjectAccessReviews) Create(sar *authorizationapi.LocalSubjectAccessReview) (*authorizationapi.SubjectAccessReviewResponse, error) { + result := &authorizationapi.SubjectAccessReviewResponse{} + + req, err := overrideAuth(c.token, c.r.Post().Namespace(c.ns).Resource("localSubjectAccessReviews")) + if err != nil { + return &authorizationapi.SubjectAccessReviewResponse{}, err + } + + err = req.Body(sar).Do().Into(result) + + // if we get one of these failures, we may be talking to an older openshift. In that case, we need to try hitting ns/namespace-name/subjectaccessreview + if kapierrors.IsForbidden(err) || kapierrors.IsNotFound(err) { + deprecatedSAR := &authorizationapi.SubjectAccessReview{ + Action: sar.Action, + User: sar.User, + Groups: sar.Groups, + } + deprecatedResponse := &authorizationapi.SubjectAccessReviewResponse{} + + deprecatedReq, deprecatedAttemptErr := overrideAuth(c.token, c.r.Post().Namespace(c.ns).Resource("subjectAccessReviews")) + if deprecatedAttemptErr != nil { + return &authorizationapi.SubjectAccessReviewResponse{}, deprecatedAttemptErr + } + deprecatedAttemptErr = deprecatedReq.Body(deprecatedSAR).Do().Into(deprecatedResponse) + if deprecatedAttemptErr == nil { + err = nil + result = deprecatedResponse + } + } + + return result, err +} diff --git a/vendor/github.com/openshift/origin/pkg/client/mapper.go b/vendor/github.com/openshift/origin/pkg/client/mapper.go new file mode 100644 index 00000000..6b5e9d2b --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/mapper.go @@ -0,0 +1,26 @@ +package client + +import ( + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/util/sets" +) + +// DefaultMultiRESTMapper returns the multi REST mapper with all OpenShift and +// Kubernetes objects already registered. +func DefaultMultiRESTMapper() meta.MultiRESTMapper { + var restMapper meta.MultiRESTMapper + seenGroups := sets.String{} + for _, gv := range registered.EnabledVersions() { + if seenGroups.Has(gv.Group) { + continue + } + seenGroups.Insert(gv.Group) + groupMeta, err := registered.Group(gv.Group) + if err != nil { + continue + } + restMapper = meta.MultiRESTMapper(append(restMapper, groupMeta.RESTMapper)) + } + return restMapper +} diff --git a/vendor/github.com/openshift/origin/pkg/client/netnamespaces.go b/vendor/github.com/openshift/origin/pkg/client/netnamespaces.go new file mode 100644 index 00000000..7ce5e8ad --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/netnamespaces.go @@ -0,0 +1,81 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + sdnapi "github.com/openshift/origin/pkg/sdn/api" +) + +// NetNamespaceInterface has methods to work with NetNamespace resources +type NetNamespacesInterface interface { + NetNamespaces() NetNamespaceInterface +} + +// NetNamespaceInterface exposes methods on NetNamespace resources. +type NetNamespaceInterface interface { + List(opts kapi.ListOptions) (*sdnapi.NetNamespaceList, error) + Get(name string) (*sdnapi.NetNamespace, error) + Create(sub *sdnapi.NetNamespace) (*sdnapi.NetNamespace, error) + Update(sub *sdnapi.NetNamespace) (*sdnapi.NetNamespace, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +// netNamespace implements NetNamespaceInterface interface +type netNamespace struct { + r *Client +} + +// newNetNamespace returns a NetNamespace +func newNetNamespace(c *Client) *netNamespace { + return &netNamespace{ + r: c, + } +} + +// List returns a list of NetNamespaces that match the label and field selectors. +func (c *netNamespace) List(opts kapi.ListOptions) (result *sdnapi.NetNamespaceList, err error) { + result = &sdnapi.NetNamespaceList{} + err = c.r.Get(). + Resource("netNamespaces"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular NetNamespace or an error +func (c *netNamespace) Get(netname string) (result *sdnapi.NetNamespace, err error) { + result = &sdnapi.NetNamespace{} + err = c.r.Get().Resource("netNamespaces").Name(netname).Do().Into(result) + return +} + +// Create creates a new NetNamespace. Returns the server's representation of the NetNamespace and error if one occurs. +func (c *netNamespace) Create(netNamespace *sdnapi.NetNamespace) (result *sdnapi.NetNamespace, err error) { + result = &sdnapi.NetNamespace{} + err = c.r.Post().Resource("netNamespaces").Body(netNamespace).Do().Into(result) + return +} + +// Update updates the NetNamespace. Returns the server's representation of the NetNamespace and error if one occurs. +func (c *netNamespace) Update(netNamespace *sdnapi.NetNamespace) (result *sdnapi.NetNamespace, err error) { + result = &sdnapi.NetNamespace{} + err = c.r.Put().Resource("netNamespaces").Name(netNamespace.Name).Body(netNamespace).Do().Into(result) + return +} + +// Delete takes the name of the NetNamespace, and returns an error if one occurs during deletion of the NetNamespace +func (c *netNamespace) Delete(name string) error { + return c.r.Delete().Resource("netNamespaces").Name(name).Do().Error() +} + +// Watch returns a watch.Interface that watches the requested NetNamespaces +func (c *netNamespace) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Resource("netNamespaces"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/oauthaccesstoken.go b/vendor/github.com/openshift/origin/pkg/client/oauthaccesstoken.go new file mode 100644 index 00000000..754375dc --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/oauthaccesstoken.go @@ -0,0 +1,46 @@ +package client + +import ( + oauthapi "github.com/openshift/origin/pkg/oauth/api" +) + +// OAuthAccessTokensInterface has methods to work with OAuthAccessTokens resources in a namespace +type OAuthAccessTokensInterface interface { + OAuthAccessTokens() OAuthAccessTokenInterface +} + +// OAuthAccessTokenInterface exposes methods on OAuthAccessTokens resources. +type OAuthAccessTokenInterface interface { + Create(token *oauthapi.OAuthAccessToken) (*oauthapi.OAuthAccessToken, error) + Get(name string) (*oauthapi.OAuthAccessToken, error) + Delete(name string) error +} + +type oauthAccessTokenInterface struct { + r *Client +} + +func newOAuthAccessTokens(c *Client) *oauthAccessTokenInterface { + return &oauthAccessTokenInterface{ + r: c, + } +} + +// Get returns information about a particular image and error if one occurs. +func (c *oauthAccessTokenInterface) Get(name string) (result *oauthapi.OAuthAccessToken, err error) { + result = &oauthapi.OAuthAccessToken{} + err = c.r.Get().Resource("oAuthAccessTokens").Name(name).Do().Into(result) + return +} + +// Delete removes the OAuthAccessToken on server +func (c *oauthAccessTokenInterface) Delete(name string) (err error) { + err = c.r.Delete().Resource("oAuthAccessTokens").Name(name).Do().Error() + return +} + +func (c *oauthAccessTokenInterface) Create(token *oauthapi.OAuthAccessToken) (result *oauthapi.OAuthAccessToken, err error) { + result = &oauthapi.OAuthAccessToken{} + err = c.r.Post().Resource("oAuthAccessTokens").Body(token).Do().Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/oauthauthorizetoken.go b/vendor/github.com/openshift/origin/pkg/client/oauthauthorizetoken.go new file mode 100644 index 00000000..fe839f27 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/oauthauthorizetoken.go @@ -0,0 +1,35 @@ +package client + +import ( + oauthapi "github.com/openshift/origin/pkg/oauth/api" +) + +type OAuthAuthorizeTokensInterface interface { + OAuthAuthorizeTokens() OAuthAuthorizeTokenInterface +} + +type OAuthAuthorizeTokenInterface interface { + Create(token *oauthapi.OAuthAuthorizeToken) (*oauthapi.OAuthAuthorizeToken, error) + Delete(name string) error +} + +type oauthAuthorizeTokenInterface struct { + r *Client +} + +func newOAuthAuthorizeTokens(c *Client) *oauthAuthorizeTokenInterface { + return &oauthAuthorizeTokenInterface{ + r: c, + } +} + +func (c *oauthAuthorizeTokenInterface) Delete(name string) (err error) { + err = c.r.Delete().Resource("oAuthAuthorizeTokens").Name(name).Do().Error() + return +} + +func (c *oauthAuthorizeTokenInterface) Create(token *oauthapi.OAuthAuthorizeToken) (result *oauthapi.OAuthAuthorizeToken, err error) { + result = &oauthapi.OAuthAuthorizeToken{} + err = c.r.Post().Resource("oAuthAuthorizeTokens").Body(token).Do().Into(result) + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/oauthclient.go b/vendor/github.com/openshift/origin/pkg/client/oauthclient.go new file mode 100644 index 00000000..0361b078 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/oauthclient.go @@ -0,0 +1,57 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + oauthapi "github.com/openshift/origin/pkg/oauth/api" +) + +type OAuthClientsInterface interface { + OAuthClients() OAuthClientInterface +} + +type OAuthClientInterface interface { + Create(obj *oauthapi.OAuthClient) (*oauthapi.OAuthClient, error) + List(opts kapi.ListOptions) (*oauthapi.OAuthClientList, error) + Get(name string) (*oauthapi.OAuthClient, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +type oauthClients struct { + r *Client +} + +func newOAuthClients(c *Client) *oauthClients { + return &oauthClients{ + r: c, + } +} + +func (c *oauthClients) Create(obj *oauthapi.OAuthClient) (result *oauthapi.OAuthClient, err error) { + result = &oauthapi.OAuthClient{} + err = c.r.Post().Resource("oAuthClients").Body(obj).Do().Into(result) + return +} + +func (c *oauthClients) List(opts kapi.ListOptions) (result *oauthapi.OAuthClientList, err error) { + result = &oauthapi.OAuthClientList{} + err = c.r.Get().Resource("oAuthClients").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +func (c *oauthClients) Get(name string) (result *oauthapi.OAuthClient, err error) { + result = &oauthapi.OAuthClient{} + err = c.r.Get().Resource("oAuthClients").Name(name).Do().Into(result) + return +} + +func (c *oauthClients) Delete(name string) (err error) { + err = c.r.Delete().Resource("oAuthClients").Name(name).Do().Error() + return +} + +func (c *oauthClients) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get().Prefix("watch").Resource("oAuthClients").VersionedParams(&opts, kapi.ParameterCodec).Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/oauthclientauthorization.go b/vendor/github.com/openshift/origin/pkg/client/oauthclientauthorization.go new file mode 100644 index 00000000..c163e591 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/oauthclientauthorization.go @@ -0,0 +1,64 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + oauthapi "github.com/openshift/origin/pkg/oauth/api" +) + +type OAuthClientAuthorizationsInterface interface { + OAuthClientAuthorizations() OAuthClientAuthorizationInterface +} + +type OAuthClientAuthorizationInterface interface { + Create(obj *oauthapi.OAuthClientAuthorization) (*oauthapi.OAuthClientAuthorization, error) + List(opts kapi.ListOptions) (*oauthapi.OAuthClientAuthorizationList, error) + Get(name string) (*oauthapi.OAuthClientAuthorization, error) + Update(obj *oauthapi.OAuthClientAuthorization) (*oauthapi.OAuthClientAuthorization, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +type oauthClientAuthorizations struct { + r *Client +} + +func newOAuthClientAuthorizations(c *Client) *oauthClientAuthorizations { + return &oauthClientAuthorizations{ + r: c, + } +} + +func (c *oauthClientAuthorizations) Create(obj *oauthapi.OAuthClientAuthorization) (result *oauthapi.OAuthClientAuthorization, err error) { + result = &oauthapi.OAuthClientAuthorization{} + err = c.r.Post().Resource("oAuthClientAuthorizations").Body(obj).Do().Into(result) + return +} + +func (c *oauthClientAuthorizations) Update(obj *oauthapi.OAuthClientAuthorization) (result *oauthapi.OAuthClientAuthorization, err error) { + result = &oauthapi.OAuthClientAuthorization{} + err = c.r.Put().Resource("oAuthClientAuthorizations").Name(obj.Name).Body(obj).Do().Into(result) + return +} + +func (c *oauthClientAuthorizations) List(opts kapi.ListOptions) (result *oauthapi.OAuthClientAuthorizationList, err error) { + result = &oauthapi.OAuthClientAuthorizationList{} + err = c.r.Get().Resource("oAuthClientAuthorizations").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +func (c *oauthClientAuthorizations) Get(name string) (result *oauthapi.OAuthClientAuthorization, err error) { + result = &oauthapi.OAuthClientAuthorization{} + err = c.r.Get().Resource("oAuthClientAuthorizations").Name(name).Do().Into(result) + return +} + +func (c *oauthClientAuthorizations) Delete(name string) (err error) { + err = c.r.Delete().Resource("oAuthClientAuthorizations").Name(name).Do().Error() + return +} + +func (c *oauthClientAuthorizations) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get().Prefix("watch").Resource("oAuthClientAuthorizations").VersionedParams(&opts, kapi.ParameterCodec).Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/policies.go b/vendor/github.com/openshift/origin/pkg/client/policies.go new file mode 100644 index 00000000..e670e210 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/policies.go @@ -0,0 +1,72 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// PoliciesNamespacer has methods to work with Policy resources in a namespace +type PoliciesNamespacer interface { + Policies(namespace string) PolicyInterface +} + +// PolicyInterface exposes methods on Policy resources. +type PolicyInterface interface { + List(opts kapi.ListOptions) (*authorizationapi.PolicyList, error) + Get(name string) (*authorizationapi.Policy, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +type PoliciesListerNamespacer interface { + Policies(namespace string) PolicyLister +} +type SyncedPoliciesListerNamespacer interface { + PoliciesListerNamespacer + LastSyncResourceVersion() string +} +type PolicyLister interface { + List(options kapi.ListOptions) (*authorizationapi.PolicyList, error) + Get(name string) (*authorizationapi.Policy, error) +} + +// policies implements PoliciesNamespacer interface +type policies struct { + r *Client + ns string +} + +// newPolicies returns a policies +func newPolicies(c *Client, namespace string) *policies { + return &policies{ + r: c, + ns: namespace, + } +} + +// List returns a list of policies that match the label and field selectors. +func (c *policies) List(opts kapi.ListOptions) (result *authorizationapi.PolicyList, err error) { + result = &authorizationapi.PolicyList{} + err = c.r.Get().Namespace(c.ns).Resource("policies").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular policy and error if one occurs. +func (c *policies) Get(name string) (result *authorizationapi.Policy, err error) { + result = &authorizationapi.Policy{} + err = c.r.Get().Namespace(c.ns).Resource("policies").Name(name).Do().Into(result) + return +} + +// Delete deletes a policy, returns error if one occurs. +func (c *policies) Delete(name string) (err error) { + err = c.r.Delete().Namespace(c.ns).Resource("policies").Name(name).Do().Error() + return +} + +// Watch returns a watch.Interface that watches the requested policies +func (c *policies) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get().Prefix("watch").Namespace(c.ns).Resource("policies").VersionedParams(&opts, kapi.ParameterCodec).Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/policybindings.go b/vendor/github.com/openshift/origin/pkg/client/policybindings.go new file mode 100644 index 00000000..3ce336e0 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/policybindings.go @@ -0,0 +1,80 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// PolicyBindingsNamespacer has methods to work with PolicyBinding resources in a namespace +type PolicyBindingsNamespacer interface { + PolicyBindings(namespace string) PolicyBindingInterface +} + +// PolicyBindingInterface exposes methods on PolicyBinding resources. +type PolicyBindingInterface interface { + List(opts kapi.ListOptions) (*authorizationapi.PolicyBindingList, error) + Get(name string) (*authorizationapi.PolicyBinding, error) + Create(policyBinding *authorizationapi.PolicyBinding) (*authorizationapi.PolicyBinding, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +type PolicyBindingsListerNamespacer interface { + PolicyBindings(namespace string) PolicyBindingLister +} +type SyncedPolicyBindingsListerNamespacer interface { + PolicyBindingsListerNamespacer + LastSyncResourceVersion() string +} +type PolicyBindingLister interface { + List(options kapi.ListOptions) (*authorizationapi.PolicyBindingList, error) + Get(name string) (*authorizationapi.PolicyBinding, error) +} + +// policyBindings implements PolicyBindingsNamespacer interface +type policyBindings struct { + r *Client + ns string +} + +// newPolicyBindings returns a policyBindings +func newPolicyBindings(c *Client, namespace string) *policyBindings { + return &policyBindings{ + r: c, + ns: namespace, + } +} + +// List returns a list of policyBindings that match the label and field selectors. +func (c *policyBindings) List(opts kapi.ListOptions) (result *authorizationapi.PolicyBindingList, err error) { + result = &authorizationapi.PolicyBindingList{} + err = c.r.Get().Namespace(c.ns).Resource("policyBindings").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular policyBinding and error if one occurs. +func (c *policyBindings) Get(name string) (result *authorizationapi.PolicyBinding, err error) { + result = &authorizationapi.PolicyBinding{} + err = c.r.Get().Namespace(c.ns).Resource("policyBindings").Name(name).Do().Into(result) + return +} + +// Create creates new policyBinding. Returns the server's representation of the policyBinding and error if one occurs. +func (c *policyBindings) Create(policyBinding *authorizationapi.PolicyBinding) (result *authorizationapi.PolicyBinding, err error) { + result = &authorizationapi.PolicyBinding{} + err = c.r.Post().Namespace(c.ns).Resource("policyBindings").Body(policyBinding).Do().Into(result) + return +} + +// Delete deletes a policyBinding, returns error if one occurs. +func (c *policyBindings) Delete(name string) (err error) { + err = c.r.Delete().Namespace(c.ns).Resource("policyBindings").Name(name).Do().Error() + return +} + +// Watch returns a watch.Interface that watches the requested policyBindings +func (c *policyBindings) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get().Prefix("watch").Namespace(c.ns).Resource("policyBindings").VersionedParams(&opts, kapi.ParameterCodec).Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/projectrequests.go b/vendor/github.com/openshift/origin/pkg/client/projectrequests.go new file mode 100644 index 00000000..ab92ee9b --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/projectrequests.go @@ -0,0 +1,44 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + + projectapi "github.com/openshift/origin/pkg/project/api" +) + +// ProjectRequestsInterface has methods to work with ProjectRequest resources in a namespace +type ProjectRequestsInterface interface { + ProjectRequests() ProjectRequestInterface +} + +// ProjectRequestInterface exposes methods on projectRequest resources. +type ProjectRequestInterface interface { + Create(p *projectapi.ProjectRequest) (*projectapi.Project, error) + List(opts kapi.ListOptions) (*unversioned.Status, error) +} + +type projectRequests struct { + r *Client +} + +// newUsers returns a users +func newProjectRequests(c *Client) *projectRequests { + return &projectRequests{ + r: c, + } +} + +// Create creates a new Project +func (c *projectRequests) Create(p *projectapi.ProjectRequest) (result *projectapi.Project, err error) { + result = &projectapi.Project{} + err = c.r.Post().Resource("projectRequests").Body(p).Do().Into(result) + return +} + +// List returns a status object indicating that a user can call the Create or an error indicating why not +func (c *projectRequests) List(opts kapi.ListOptions) (result *unversioned.Status, err error) { + result = &unversioned.Status{} + err = c.r.Get().Resource("projectRequests").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return result, err +} diff --git a/vendor/github.com/openshift/origin/pkg/client/projects.go b/vendor/github.com/openshift/origin/pkg/client/projects.go new file mode 100644 index 00000000..534579d6 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/projects.go @@ -0,0 +1,81 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + projectapi "github.com/openshift/origin/pkg/project/api" +) + +// ProjectsInterface has methods to work with Project resources in a namespace +type ProjectsInterface interface { + Projects() ProjectInterface +} + +// ProjectInterface exposes methods on project resources. +type ProjectInterface interface { + Create(p *projectapi.Project) (*projectapi.Project, error) + Update(p *projectapi.Project) (*projectapi.Project, error) + Delete(name string) error + Get(name string) (*projectapi.Project, error) + List(opts kapi.ListOptions) (*projectapi.ProjectList, error) + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +type projects struct { + r *Client +} + +// newUsers returns a project +func newProjects(c *Client) *projects { + return &projects{ + r: c, + } +} + +// Get returns information about a particular project or an error +func (c *projects) Get(name string) (result *projectapi.Project, err error) { + result = &projectapi.Project{} + err = c.r.Get().Resource("projects").Name(name).Do().Into(result) + return +} + +// List returns all projects matching the label selector +func (c *projects) List(opts kapi.ListOptions) (result *projectapi.ProjectList, err error) { + result = &projectapi.ProjectList{} + err = c.r.Get(). + Resource("projects"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Create creates a new Project +func (c *projects) Create(p *projectapi.Project) (result *projectapi.Project, err error) { + result = &projectapi.Project{} + err = c.r.Post().Resource("projects").Body(p).Do().Into(result) + return +} + +// Update updates the project on server +func (c *projects) Update(p *projectapi.Project) (result *projectapi.Project, err error) { + result = &projectapi.Project{} + err = c.r.Put().Resource("projects").Name(p.Name).Body(p).Do().Into(result) + return +} + +// Delete removes the project on server +func (c *projects) Delete(name string) (err error) { + err = c.r.Delete().Resource("projects").Name(name).Do().Error() + return +} + +// Watch returns a watch.Interface that watches the requested namespaces. +func (c *projects) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Resource("projects"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/resourceaccessreview.go b/vendor/github.com/openshift/origin/pkg/client/resourceaccessreview.go new file mode 100644 index 00000000..cd9e7b9b --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/resourceaccessreview.go @@ -0,0 +1,61 @@ +package client + +import ( + kapierrors "k8s.io/kubernetes/pkg/api/errors" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// ResourceAccessReviews has methods to work with ResourceAccessReview resources in the cluster scope +type ResourceAccessReviews interface { + ResourceAccessReviews() ResourceAccessReviewInterface +} + +// ResourceAccessReviewInterface exposes methods on ResourceAccessReview resources. +type ResourceAccessReviewInterface interface { + Create(policy *authorizationapi.ResourceAccessReview) (*authorizationapi.ResourceAccessReviewResponse, error) +} + +// resourceAccessReviews implements ResourceAccessReviews interface +type resourceAccessReviews struct { + r *Client +} + +// newResourceAccessReviews returns a resourceAccessReviews +func newResourceAccessReviews(c *Client) *resourceAccessReviews { + return &resourceAccessReviews{ + r: c, + } +} + +func (c *resourceAccessReviews) Create(rar *authorizationapi.ResourceAccessReview) (result *authorizationapi.ResourceAccessReviewResponse, err error) { + result = &authorizationapi.ResourceAccessReviewResponse{} + + // if this a cluster RAR, then no special handling + if len(rar.Action.Namespace) == 0 { + err = c.r.Post().Resource("resourceAccessReviews").Body(rar).Do().Into(result) + return + } + + err = c.r.Post().Resource("resourceAccessReviews").Body(rar).Do().Into(result) + + // if the namespace values don't match then we definitely hit an old server. If we got a forbidden, then we might have hit an old server + // and should try the old endpoint + if (rar.Action.Namespace != result.Namespace) || kapierrors.IsForbidden(err) { + deprecatedResponse := &authorizationapi.ResourceAccessReviewResponse{} + deprecatedAttemptErr := c.r.Post().Namespace(rar.Action.Namespace).Resource("resourceAccessReviews").Body(rar).Do().Into(deprecatedResponse) + + // if we definitely hit an old server, then return the error and result you get from the older server. + if rar.Action.Namespace != result.Namespace { + return deprecatedResponse, deprecatedAttemptErr + } + + // if we're not certain it was an old server, success overwrites the previous error, but failure doesn't overwrite the previous error + if deprecatedAttemptErr == nil { + err = nil + result = deprecatedResponse + } + } + + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/role_bindings.go b/vendor/github.com/openshift/origin/pkg/client/role_bindings.go new file mode 100644 index 00000000..33c7e776 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/role_bindings.go @@ -0,0 +1,69 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// RoleBindingsNamespacer has methods to work with RoleBinding resources in a namespace +type RoleBindingsNamespacer interface { + RoleBindings(namespace string) RoleBindingInterface +} + +// RoleBindingInterface exposes methods on RoleBinding resources. +type RoleBindingInterface interface { + List(opts kapi.ListOptions) (*authorizationapi.RoleBindingList, error) + Get(name string) (*authorizationapi.RoleBinding, error) + Create(roleBinding *authorizationapi.RoleBinding) (*authorizationapi.RoleBinding, error) + Update(roleBinding *authorizationapi.RoleBinding) (*authorizationapi.RoleBinding, error) + Delete(name string) error +} + +// roleBindings implements RoleBindingsNamespacer interface +type roleBindings struct { + r *Client + ns string +} + +// newRoleBindings returns a roleBindings +func newRoleBindings(c *Client, namespace string) *roleBindings { + return &roleBindings{ + r: c, + ns: namespace, + } +} + +// List returns a list of roleBindings that match the label and field selectors. +func (c *roleBindings) List(opts kapi.ListOptions) (result *authorizationapi.RoleBindingList, err error) { + result = &authorizationapi.RoleBindingList{} + err = c.r.Get().Namespace(c.ns).Resource("roleBindings").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular roleBinding and error if one occurs. +func (c *roleBindings) Get(name string) (result *authorizationapi.RoleBinding, err error) { + result = &authorizationapi.RoleBinding{} + err = c.r.Get().Namespace(c.ns).Resource("roleBindings").Name(name).Do().Into(result) + return +} + +// Create creates new roleBinding. Returns the server's representation of the roleBinding and error if one occurs. +func (c *roleBindings) Create(roleBinding *authorizationapi.RoleBinding) (result *authorizationapi.RoleBinding, err error) { + result = &authorizationapi.RoleBinding{} + err = c.r.Post().Namespace(c.ns).Resource("roleBindings").Body(roleBinding).Do().Into(result) + return +} + +// Update updates the roleBinding on server. Returns the server's representation of the roleBinding and error if one occurs. +func (c *roleBindings) Update(roleBinding *authorizationapi.RoleBinding) (result *authorizationapi.RoleBinding, err error) { + result = &authorizationapi.RoleBinding{} + err = c.r.Put().Namespace(c.ns).Resource("roleBindings").Name(roleBinding.Name).Body(roleBinding).Do().Into(result) + return +} + +// Delete deletes a roleBinding, returns error if one occurs. +func (c *roleBindings) Delete(name string) (err error) { + err = c.r.Delete().Namespace(c.ns).Resource("roleBindings").Name(name).Do().Error() + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/roles.go b/vendor/github.com/openshift/origin/pkg/client/roles.go new file mode 100644 index 00000000..938d3d17 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/roles.go @@ -0,0 +1,69 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +// RolesNamespacer has methods to work with Role resources in a namespace +type RolesNamespacer interface { + Roles(namespace string) RoleInterface +} + +// RoleInterface exposes methods on Role resources. +type RoleInterface interface { + List(opts kapi.ListOptions) (*authorizationapi.RoleList, error) + Get(name string) (*authorizationapi.Role, error) + Create(role *authorizationapi.Role) (*authorizationapi.Role, error) + Update(role *authorizationapi.Role) (*authorizationapi.Role, error) + Delete(name string) error +} + +// roles implements RolesNamespacer interface +type roles struct { + r *Client + ns string +} + +// newRoles returns a roles +func newRoles(c *Client, namespace string) *roles { + return &roles{ + r: c, + ns: namespace, + } +} + +// List returns a list of roles that match the label and field selectors. +func (c *roles) List(opts kapi.ListOptions) (result *authorizationapi.RoleList, err error) { + result = &authorizationapi.RoleList{} + err = c.r.Get().Namespace(c.ns).Resource("roles").VersionedParams(&opts, kapi.ParameterCodec).Do().Into(result) + return +} + +// Get returns information about a particular role and error if one occurs. +func (c *roles) Get(name string) (result *authorizationapi.Role, err error) { + result = &authorizationapi.Role{} + err = c.r.Get().Namespace(c.ns).Resource("roles").Name(name).Do().Into(result) + return +} + +// Create creates new role. Returns the server's representation of the role and error if one occurs. +func (c *roles) Create(role *authorizationapi.Role) (result *authorizationapi.Role, err error) { + result = &authorizationapi.Role{} + err = c.r.Post().Namespace(c.ns).Resource("roles").Body(role).Do().Into(result) + return +} + +// Update updates the role on server. Returns the server's representation of the role and error if one occurs. +func (c *roles) Update(role *authorizationapi.Role) (result *authorizationapi.Role, err error) { + result = &authorizationapi.Role{} + err = c.r.Put().Namespace(c.ns).Resource("roles").Name(role.Name).Body(role).Do().Into(result) + return +} + +// Delete deletes a role, returns error if one occurs. +func (c *roles) Delete(name string) (err error) { + err = c.r.Delete().Namespace(c.ns).Resource("roles").Name(name).Do().Error() + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/routes.go b/vendor/github.com/openshift/origin/pkg/client/routes.go new file mode 100644 index 00000000..c48cc574 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/routes.go @@ -0,0 +1,93 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + routeapi "github.com/openshift/origin/pkg/route/api" +) + +// RoutesNamespacer has methods to work with Route resources in a namespace +type RoutesNamespacer interface { + Routes(namespace string) RouteInterface +} + +// RouteInterface exposes methods on Route resources +type RouteInterface interface { + List(opts kapi.ListOptions) (*routeapi.RouteList, error) + Get(name string) (*routeapi.Route, error) + Create(route *routeapi.Route) (*routeapi.Route, error) + Update(route *routeapi.Route) (*routeapi.Route, error) + UpdateStatus(route *routeapi.Route) (*routeapi.Route, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +// routes implements RouteInterface interface +type routes struct { + r *Client + ns string +} + +// newRoutes returns a routes +func newRoutes(c *Client, namespace string) *routes { + return &routes{ + r: c, + ns: namespace, + } +} + +// List takes a label and field selector, and returns the list of routes that match that selectors +func (c *routes) List(opts kapi.ListOptions) (result *routeapi.RouteList, err error) { + result = &routeapi.RouteList{} + err = c.r.Get(). + Namespace(c.ns). + Resource("routes"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get takes the name of the route, and returns the corresponding Route object, and an error if it occurs +func (c *routes) Get(name string) (result *routeapi.Route, err error) { + result = &routeapi.Route{} + err = c.r.Get().Namespace(c.ns).Resource("routes").Name(name).Do().Into(result) + return +} + +// Delete takes the name of the route, and returns an error if one occurs +func (c *routes) Delete(name string) error { + return c.r.Delete().Namespace(c.ns).Resource("routes").Name(name).Do().Error() +} + +// Create takes the representation of a route. Returns the server's representation of the route, and an error, if it occurs +func (c *routes) Create(route *routeapi.Route) (result *routeapi.Route, err error) { + result = &routeapi.Route{} + err = c.r.Post().Namespace(c.ns).Resource("routes").Body(route).Do().Into(result) + return +} + +// Update takes the representation of a route to update. Returns the server's representation of the route, and an error, if it occurs +func (c *routes) Update(route *routeapi.Route) (result *routeapi.Route, err error) { + result = &routeapi.Route{} + err = c.r.Put().Namespace(c.ns).Resource("routes").Name(route.Name).Body(route).Do().Into(result) + return +} + +// UpdateStatus takes the route with altered status. Returns the server's representation of the route, and an error, if it occurs. +func (c *routes) UpdateStatus(route *routeapi.Route) (result *routeapi.Route, err error) { + result = &routeapi.Route{} + err = c.r.Put().Namespace(c.ns).Resource("routes").Name(route.Name).SubResource("status").Body(route).Do().Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested routes. +func (c *routes) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("routes"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/scale.go b/vendor/github.com/openshift/origin/pkg/client/scale.go new file mode 100644 index 00000000..fe641af5 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/scale.go @@ -0,0 +1,63 @@ +package client + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/apis/extensions" + unversioned_extensions "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + + "github.com/openshift/origin/pkg/api/latest" +) + +type delegatingScaleInterface struct { + dcs DeploymentConfigInterface + scales kclient.ScaleInterface +} + +type delegatingScaleNamespacer struct { + dcNS DeploymentConfigsNamespacer + scaleNS kclient.ScaleNamespacer +} + +func (c *delegatingScaleNamespacer) Scales(namespace string) unversioned_extensions.ScaleInterface { + return &delegatingScaleInterface{ + dcs: c.dcNS.DeploymentConfigs(namespace), + scales: c.scaleNS.Scales(namespace), + } +} + +func NewDelegatingScaleNamespacer(dcNamespacer DeploymentConfigsNamespacer, sNamespacer kclient.ScaleNamespacer) unversioned_extensions.ScalesGetter { + return &delegatingScaleNamespacer{ + dcNS: dcNamespacer, + scaleNS: sNamespacer, + } +} + +// Get takes the reference to scale subresource and returns the subresource or error, if one occurs. +func (c *delegatingScaleInterface) Get(kind string, name string) (result *extensions.Scale, err error) { + switch { + case kind == "DeploymentConfig": + return c.dcs.GetScale(name) + // TODO: This is borked because the interface for Get is broken. Kind is insufficient. + case latest.IsKindInAnyOriginGroup(kind): + return nil, errors.NewBadRequest(fmt.Sprintf("Kind %s has no Scale subresource", kind)) + default: + return c.scales.Get(kind, name) + } +} + +// Update takes a scale subresource object, updates the stored version to match it, and +// returns the subresource or error, if one occurs. +func (c *delegatingScaleInterface) Update(kind string, scale *extensions.Scale) (result *extensions.Scale, err error) { + switch { + case kind == "DeploymentConfig": + return c.dcs.UpdateScale(scale) + // TODO: This is borked because the interface for Update is broken. Kind is insufficient. + case latest.IsKindInAnyOriginGroup(kind): + return nil, errors.NewBadRequest(fmt.Sprintf("Kind %s has no Scale subresource", kind)) + default: + return c.scales.Update(kind, scale) + } +} diff --git a/vendor/github.com/openshift/origin/pkg/client/selfsubjectrulesreviews.go b/vendor/github.com/openshift/origin/pkg/client/selfsubjectrulesreviews.go new file mode 100644 index 00000000..600f8fa3 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/selfsubjectrulesreviews.go @@ -0,0 +1,32 @@ +package client + +import ( + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +type SelfSubjectRulesReviewsNamespacer interface { + SelfSubjectRulesReviews(namespace string) SelfSubjectRulesReviewInterface +} + +type SelfSubjectRulesReviewInterface interface { + Create(*authorizationapi.SelfSubjectRulesReview) (*authorizationapi.SelfSubjectRulesReview, error) +} + +type selfSubjectRulesReviews struct { + r *Client + ns string +} + +func newSelfSubjectRulesReviews(c *Client, namespace string) *selfSubjectRulesReviews { + return &selfSubjectRulesReviews{ + r: c, + ns: namespace, + } +} + +func (c *selfSubjectRulesReviews) Create(selfSubjectRulesReview *authorizationapi.SelfSubjectRulesReview) (result *authorizationapi.SelfSubjectRulesReview, err error) { + result = &authorizationapi.SelfSubjectRulesReview{} + err = c.r.Post().Namespace(c.ns).Resource("selfSubjectRulesReviews").Body(selfSubjectRulesReview).Do().Into(result) + + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/subjectaccessreview.go b/vendor/github.com/openshift/origin/pkg/client/subjectaccessreview.go new file mode 100644 index 00000000..0f5ba2f5 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/subjectaccessreview.go @@ -0,0 +1,100 @@ +package client + +import ( + "errors" + "fmt" + + kapierrors "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/client/restclient" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" +) + +type SubjectAccessReviewsImpersonator interface { + ImpersonateSubjectAccessReviews(token string) SubjectAccessReviewInterface +} + +// SubjectAccessReviews has methods to work with SubjectAccessReview resources in the cluster scope +type SubjectAccessReviews interface { + SubjectAccessReviews() SubjectAccessReviewInterface +} + +// SubjectAccessReviewInterface exposes methods on SubjectAccessReview resources. +type SubjectAccessReviewInterface interface { + Create(policy *authorizationapi.SubjectAccessReview) (*authorizationapi.SubjectAccessReviewResponse, error) +} + +// subjectAccessReviews implements SubjectAccessReviews interface +type subjectAccessReviews struct { + r *Client + token *string +} + +// newImpersonatingSubjectAccessReviews returns a subjectAccessReviews +func newImpersonatingSubjectAccessReviews(c *Client, token string) *subjectAccessReviews { + return &subjectAccessReviews{ + r: c, + token: &token, + } +} + +// newSubjectAccessReviews returns a subjectAccessReviews +func newSubjectAccessReviews(c *Client) *subjectAccessReviews { + return &subjectAccessReviews{ + r: c, + } +} + +func (c *subjectAccessReviews) Create(sar *authorizationapi.SubjectAccessReview) (*authorizationapi.SubjectAccessReviewResponse, error) { + result := &authorizationapi.SubjectAccessReviewResponse{} + + // if this a cluster SAR, then no special handling + if len(sar.Action.Namespace) == 0 { + req, err := overrideAuth(c.token, c.r.Post().Resource("subjectAccessReviews")) + if err != nil { + return &authorizationapi.SubjectAccessReviewResponse{}, err + } + + err = req.Body(sar).Do().Into(result) + return result, err + } + + err := c.r.Post().Resource("subjectAccessReviews").Body(sar).Do().Into(result) + + // if the namespace values don't match then we definitely hit an old server. If we got a forbidden, then we might have hit an old server + // and should try the old endpoint + if (sar.Action.Namespace != result.Namespace) || kapierrors.IsForbidden(err) { + deprecatedReq, deprecatedAttemptErr := overrideAuth(c.token, c.r.Post().Namespace(sar.Action.Namespace).Resource("subjectAccessReviews")) + if deprecatedAttemptErr != nil { + return &authorizationapi.SubjectAccessReviewResponse{}, deprecatedAttemptErr + } + + deprecatedResponse := &authorizationapi.SubjectAccessReviewResponse{} + deprecatedAttemptErr = deprecatedReq.Body(sar).Do().Into(deprecatedResponse) + + // if we definitely hit an old server, then return the error and result you get from the older server. + if sar.Action.Namespace != result.Namespace { + return deprecatedResponse, deprecatedAttemptErr + } + + // if we're not certain it was an old server, success overwrites the previous error, but failure doesn't overwrite the previous error + if deprecatedAttemptErr == nil { + err = nil + result = deprecatedResponse + } + } + + return result, err +} + +// overrideAuth specifies the token to authenticate the request with. token == "" is not allowed +func overrideAuth(token *string, req *restclient.Request) (*restclient.Request, error) { + if token != nil { + if len(*token) == 0 { + return nil, errors.New("impersonating token may not be empty") + } + + req.SetHeader("Authorization", fmt.Sprintf("Bearer %s", *token)) + } + return req, nil +} diff --git a/vendor/github.com/openshift/origin/pkg/client/templateconfigs.go b/vendor/github.com/openshift/origin/pkg/client/templateconfigs.go new file mode 100644 index 00000000..42dd20a5 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/templateconfigs.go @@ -0,0 +1,37 @@ +package client + +import ( + templateapi "github.com/openshift/origin/pkg/template/api" +) + +// TemplateConfigNamespacer has methods to work with Image resources in a namespace +// TODO: Rename to ProcessedTemplates +type TemplateConfigsNamespacer interface { + TemplateConfigs(namespace string) TemplateConfigInterface +} + +// TemplateConfigInterface exposes methods on Image resources. +type TemplateConfigInterface interface { + Create(t *templateapi.Template) (*templateapi.Template, error) +} + +// templateConfigs implements TemplateConfigsNamespacer interface +type templateConfigs struct { + r *Client + ns string +} + +// newTemplateConfigs returns an TemplateConfigInterface +func newTemplateConfigs(c *Client, namespace string) TemplateConfigInterface { + return &templateConfigs{ + r: c, + ns: namespace, + } +} + +// Create process the Template and returns its current state +func (c *templateConfigs) Create(in *templateapi.Template) (*templateapi.Template, error) { + template := &templateapi.Template{} + err := c.r.Post().Namespace(c.ns).Resource("processedTemplates").Body(in).Do().Into(template) + return template, err +} diff --git a/vendor/github.com/openshift/origin/pkg/client/templates.go b/vendor/github.com/openshift/origin/pkg/client/templates.go new file mode 100644 index 00000000..b91dbcfc --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/templates.go @@ -0,0 +1,86 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + templateapi "github.com/openshift/origin/pkg/template/api" +) + +// TemplatesNamespacer has methods to work with Template resources in a namespace +type TemplatesNamespacer interface { + Templates(namespace string) TemplateInterface +} + +// TemplateInterface exposes methods on Template resources. +type TemplateInterface interface { + List(opts kapi.ListOptions) (*templateapi.TemplateList, error) + Get(name string) (*templateapi.Template, error) + Create(template *templateapi.Template) (*templateapi.Template, error) + Update(template *templateapi.Template) (*templateapi.Template, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +// templates implements TemplatesNamespacer interface +type templates struct { + r *Client + ns string +} + +// newTemplates returns a templates +func newTemplates(c *Client, namespace string) *templates { + return &templates{ + r: c, + ns: namespace, + } +} + +// List returns a list of templates that match the label and field selectors. +func (c *templates) List(opts kapi.ListOptions) (result *templateapi.TemplateList, err error) { + result = &templateapi.TemplateList{} + err = c.r.Get(). + Namespace(c.ns). + Resource("templates"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular template and error if one occurs. +func (c *templates) Get(name string) (result *templateapi.Template, err error) { + result = &templateapi.Template{} + err = c.r.Get().Namespace(c.ns).Resource("templates").Name(name).Do().Into(result) + return +} + +// Create creates new template. Returns the server's representation of the template and error if one occurs. +func (c *templates) Create(template *templateapi.Template) (result *templateapi.Template, err error) { + result = &templateapi.Template{} + err = c.r.Post().Namespace(c.ns).Resource("templates").Body(template).Do().Into(result) + return +} + +// Update updates the template on server. Returns the server's representation of the template and error if one occurs. +func (c *templates) Update(template *templateapi.Template) (result *templateapi.Template, err error) { + result = &templateapi.Template{} + err = c.r.Put().Namespace(c.ns).Resource("templates").Name(template.Name).Body(template).Do().Into(result) + return +} + +// Delete deletes a template, returns error if one occurs. +func (c *templates) Delete(name string) (err error) { + err = c.r.Delete().Namespace(c.ns).Resource("templates").Name(name).Do().Error() + return +} + +// Watch returns a watch.Interface that watches the requested templates +func (c *templates) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("templates"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/client/useridentitymappings.go b/vendor/github.com/openshift/origin/pkg/client/useridentitymappings.go new file mode 100644 index 00000000..84e3e906 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/useridentitymappings.go @@ -0,0 +1,57 @@ +package client + +import ( + userapi "github.com/openshift/origin/pkg/user/api" +) + +// UserIdentityMappingsInterface has methods to work with UserIdentityMapping resources in a namespace +type UserIdentityMappingsInterface interface { + UserIdentityMappings() UserIdentityMappingInterface +} + +// UserIdentityMappingInterface exposes methods on UserIdentityMapping resources. +type UserIdentityMappingInterface interface { + Get(string) (*userapi.UserIdentityMapping, error) + Create(*userapi.UserIdentityMapping) (*userapi.UserIdentityMapping, error) + Update(*userapi.UserIdentityMapping) (*userapi.UserIdentityMapping, error) + Delete(string) error +} + +// userIdentityMappings implements UserIdentityMappingsNamespacer interface +type userIdentityMappings struct { + r *Client +} + +// newUserIdentityMappings returns a userIdentityMappings +func newUserIdentityMappings(c *Client) *userIdentityMappings { + return &userIdentityMappings{ + r: c, + } +} + +// Get returns information about a particular mapping or an error +func (c *userIdentityMappings) Get(name string) (result *userapi.UserIdentityMapping, err error) { + result = &userapi.UserIdentityMapping{} + err = c.r.Get().Resource("userIdentityMappings").Name(name).Do().Into(result) + return +} + +// Create creates a new mapping. Returns the server's representation of the mapping and error if one occurs. +func (c *userIdentityMappings) Create(mapping *userapi.UserIdentityMapping) (result *userapi.UserIdentityMapping, err error) { + result = &userapi.UserIdentityMapping{} + err = c.r.Post().Resource("userIdentityMappings").Body(mapping).Do().Into(result) + return +} + +// Update updates the mapping on server. Returns the server's representation of the mapping and error if one occurs. +func (c *userIdentityMappings) Update(mapping *userapi.UserIdentityMapping) (result *userapi.UserIdentityMapping, err error) { + result = &userapi.UserIdentityMapping{} + err = c.r.Put().Resource("userIdentityMappings").Name(mapping.Name).Body(mapping).Do().Into(result) + return +} + +// Delete deletes the mapping on server. +func (c *userIdentityMappings) Delete(name string) (err error) { + err = c.r.Delete().Resource("userIdentityMappings").Name(name).Do().Error() + return +} diff --git a/vendor/github.com/openshift/origin/pkg/client/users.go b/vendor/github.com/openshift/origin/pkg/client/users.go new file mode 100644 index 00000000..5149c528 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/client/users.go @@ -0,0 +1,81 @@ +package client + +import ( + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/watch" + + userapi "github.com/openshift/origin/pkg/user/api" +) + +// UsersInterface has methods to work with User resources +type UsersInterface interface { + Users() UserInterface +} + +// UserInterface exposes methods on user resources. +type UserInterface interface { + List(opts kapi.ListOptions) (*userapi.UserList, error) + Get(name string) (*userapi.User, error) + Create(user *userapi.User) (*userapi.User, error) + Update(user *userapi.User) (*userapi.User, error) + Delete(name string) error + Watch(opts kapi.ListOptions) (watch.Interface, error) +} + +// users implements UserInterface interface +type users struct { + r *Client +} + +// newUsers returns a users +func newUsers(c *Client) *users { + return &users{ + r: c, + } +} + +// List returns a list of users that match the label and field selectors. +func (c *users) List(opts kapi.ListOptions) (result *userapi.UserList, err error) { + result = &userapi.UserList{} + err = c.r.Get(). + Resource("users"). + VersionedParams(&opts, kapi.ParameterCodec). + Do(). + Into(result) + return +} + +// Get returns information about a particular user or an error +func (c *users) Get(name string) (result *userapi.User, err error) { + result = &userapi.User{} + err = c.r.Get().Resource("users").Name(name).Do().Into(result) + return +} + +// Create creates a new user. Returns the server's representation of the user and error if one occurs. +func (c *users) Create(user *userapi.User) (result *userapi.User, err error) { + result = &userapi.User{} + err = c.r.Post().Resource("users").Body(user).Do().Into(result) + return +} + +// Update updates the user on server. Returns the server's representation of the user and error if one occurs. +func (c *users) Update(user *userapi.User) (result *userapi.User, err error) { + result = &userapi.User{} + err = c.r.Put().Resource("users").Name(user.Name).Body(user).Do().Into(result) + return +} + +// Delete deletes the user on server. Returns an error if one occurs. +func (c *users) Delete(name string) (err error) { + return c.r.Delete().Resource("users").Name(name).Do().Error() +} + +// Watch returns a watch.Interface that watches the requested users. +func (c *users) Watch(opts kapi.ListOptions) (watch.Interface, error) { + return c.r.Get(). + Prefix("watch"). + Resource("users"). + VersionedParams(&opts, kapi.ParameterCodec). + Watch() +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/config/helpers.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/config/helpers.go new file mode 100644 index 00000000..7b957435 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/config/helpers.go @@ -0,0 +1,103 @@ +package config + +import ( + "fmt" + "net" + "net/url" + "strconv" + "strings" + + "github.com/openshift/origin/pkg/cmd/util" + clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" +) + +// TODO should be moved upstream +func RelativizeClientConfigPaths(cfg *clientcmdapi.Config, base string) (err error) { + for k, cluster := range cfg.Clusters { + if len(cluster.CertificateAuthority) > 0 { + if cluster.CertificateAuthority, err = util.MakeAbs(cluster.CertificateAuthority, ""); err != nil { + return err + } + if cluster.CertificateAuthority, err = util.MakeRelative(cluster.CertificateAuthority, base); err != nil { + return err + } + cfg.Clusters[k] = cluster + } + } + for k, authInfo := range cfg.AuthInfos { + if len(authInfo.ClientCertificate) > 0 { + if authInfo.ClientCertificate, err = util.MakeAbs(authInfo.ClientCertificate, ""); err != nil { + return err + } + if authInfo.ClientCertificate, err = util.MakeRelative(authInfo.ClientCertificate, base); err != nil { + return err + } + } + if len(authInfo.ClientKey) > 0 { + if authInfo.ClientKey, err = util.MakeAbs(authInfo.ClientKey, ""); err != nil { + return err + } + if authInfo.ClientKey, err = util.MakeRelative(authInfo.ClientKey, base); err != nil { + return err + } + } + cfg.AuthInfos[k] = authInfo + } + return nil +} + +var validURLSchemes = []string{"https://", "http://", "tcp://"} + +// NormalizeServerURL is opinionated normalization of a string that represents a URL. Returns the URL provided matching the format +// expected when storing a URL in a config. Sets a scheme and port if not present, removes unnecessary trailing +// slashes, etc. Can be used to normalize a URL provided by user input. +func NormalizeServerURL(s string) (string, error) { + // normalize scheme + if !hasScheme(s) { + s = validURLSchemes[0] + s + } + + addr, err := url.Parse(s) + if err != nil { + return "", fmt.Errorf("Not a valid URL: %v.", err) + } + + // normalize host:port + if strings.Contains(addr.Host, ":") { + _, port, err := net.SplitHostPort(addr.Host) + if err != nil { + return "", fmt.Errorf("Not a valid host:port: %v.", err) + } + _, err = strconv.ParseUint(port, 10, 16) + if err != nil { + return "", fmt.Errorf("Not a valid port: %v. Port numbers must be between 0 and 65535.", port) + } + } else { + port := 0 + switch addr.Scheme { + case "http": + port = 80 + case "https": + port = 443 + default: + return "", fmt.Errorf("No port specified.") + } + addr.Host = net.JoinHostPort(addr.Host, strconv.FormatInt(int64(port), 10)) + } + + // remove trailing slash if that's the only path we have + if addr.Path == "/" { + addr.Path = "" + } + + return addr.String(), nil +} + +func hasScheme(s string) bool { + for _, p := range validURLSchemes { + if strings.HasPrefix(s, p) { + return true + } + } + return false +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/config/loader.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/config/loader.go new file mode 100644 index 00000000..e0f46ea4 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/config/loader.go @@ -0,0 +1,76 @@ +package config + +import ( + "os" + "path" + "path/filepath" + "runtime" + + "github.com/spf13/cobra" + + "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/util/homedir" +) + +const ( + OpenShiftConfigPathEnvVar = "KUBECONFIG" + OpenShiftConfigFlagName = "config" + OpenShiftConfigHomeDir = ".kube" + OpenShiftConfigHomeFileName = "config" + OpenShiftConfigHomeDirFileName = OpenShiftConfigHomeDir + "/" + OpenShiftConfigHomeFileName +) + +var RecommendedHomeFile = path.Join(homedir.HomeDir(), OpenShiftConfigHomeDirFileName) + +// currentMigrationRules returns a map that holds the history of recommended home directories used in previous versions. +// Any future changes to RecommendedHomeFile and related are expected to add a migration rule here, in order to make +// sure existing config files are migrated to their new locations properly. +func currentMigrationRules() map[string]string { + oldRecommendedHomeFile := path.Join(homedir.HomeDir(), ".kube/.config") + oldRecommendedWindowsHomeFile := path.Join(os.Getenv("HOME"), OpenShiftConfigHomeDirFileName) + + migrationRules := map[string]string{} + migrationRules[RecommendedHomeFile] = oldRecommendedHomeFile + if runtime.GOOS == "windows" { + migrationRules[RecommendedHomeFile] = oldRecommendedWindowsHomeFile + } + return migrationRules +} + +// NewOpenShiftClientConfigLoadingRules returns file priority loading rules for OpenShift. +// 1. --config value +// 2. if KUBECONFIG env var has a value, use it. Otherwise, ~/.kube/config file +func NewOpenShiftClientConfigLoadingRules() *clientcmd.ClientConfigLoadingRules { + chain := []string{} + + envVarFile := os.Getenv(OpenShiftConfigPathEnvVar) + if len(envVarFile) != 0 { + chain = append(chain, filepath.SplitList(envVarFile)...) + } else { + chain = append(chain, RecommendedHomeFile) + } + + return &clientcmd.ClientConfigLoadingRules{ + Precedence: chain, + MigrationRules: currentMigrationRules(), + } +} + +func NewPathOptions(cmd *cobra.Command) *kclientcmd.PathOptions { + return NewPathOptionsWithConfig(kcmdutil.GetFlagString(cmd, OpenShiftConfigFlagName)) +} + +func NewPathOptionsWithConfig(configPath string) *kclientcmd.PathOptions { + return &kclientcmd.PathOptions{ + GlobalFile: RecommendedHomeFile, + + EnvVar: OpenShiftConfigPathEnvVar, + ExplicitFileFlag: OpenShiftConfigFlagName, + + LoadingRules: &kclientcmd.ClientConfigLoadingRules{ + ExplicitPath: configPath, + }, + } +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/config/smart_merge.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/config/smart_merge.go new file mode 100644 index 00000000..8ff84d0a --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/config/smart_merge.go @@ -0,0 +1,194 @@ +package config + +import ( + "crypto/x509" + "net/url" + "reflect" + "strings" + + "k8s.io/kubernetes/pkg/client/restclient" + clientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" + "k8s.io/kubernetes/third_party/forked/golang/netutil" + + "github.com/openshift/origin/pkg/auth/authenticator/request/x509request" + osclient "github.com/openshift/origin/pkg/client" +) + +// GetClusterNicknameFromConfig returns host:port of the clientConfig.Host, with .'s replaced by -'s +func GetClusterNicknameFromConfig(clientCfg *restclient.Config) (string, error) { + return GetClusterNicknameFromURL(clientCfg.Host) +} + +// GetClusterNicknameFromURL returns host:port of the apiServerLocation, with .'s replaced by -'s +func GetClusterNicknameFromURL(apiServerLocation string) (string, error) { + u, err := url.Parse(apiServerLocation) + if err != nil { + return "", err + } + hostPort := netutil.CanonicalAddr(u) + + // we need a character other than "." to avoid conflicts with. replace with '-' + return strings.Replace(hostPort, ".", "-", -1), nil +} + +// GetUserNicknameFromConfig returns "username(as known by the server)/GetClusterNicknameFromConfig". This allows tab completion for switching users to +// work easily and obviously. +func GetUserNicknameFromConfig(clientCfg *restclient.Config) (string, error) { + client, err := osclient.New(clientCfg) + if err != nil { + return "", err + } + userInfo, err := client.Users().Get("~") + if err != nil { + return "", err + } + + clusterNick, err := GetClusterNicknameFromConfig(clientCfg) + if err != nil { + return "", err + } + + return userInfo.Name + "/" + clusterNick, nil +} + +func GetUserNicknameFromCert(clusterNick string, chain ...*x509.Certificate) (string, error) { + userInfo, _, err := x509request.SubjectToUserConversion(chain) + if err != nil { + return "", err + } + + return userInfo.GetName() + "/" + clusterNick, nil +} + +// GetContextNicknameFromConfig returns "namespace/GetClusterNicknameFromConfig/username(as known by the server)". This allows tab completion for switching projects/context +// to work easily. First tab is the most selective on project. Second stanza in the next most selective on cluster name. The chances of a user trying having +// one projects on a single server that they want to operate against with two identities is low, so username is last. +func GetContextNicknameFromConfig(namespace string, clientCfg *restclient.Config) (string, error) { + client, err := osclient.New(clientCfg) + if err != nil { + return "", err + } + userInfo, err := client.Users().Get("~") + if err != nil { + return "", err + } + + clusterNick, err := GetClusterNicknameFromConfig(clientCfg) + if err != nil { + return "", err + } + + return namespace + "/" + clusterNick + "/" + userInfo.Name, nil +} + +func GetContextNickname(namespace, clusterNick, userNick string) string { + tokens := strings.SplitN(userNick, "/", 2) + return namespace + "/" + clusterNick + "/" + tokens[0] +} + +// CreateConfig takes a clientCfg and builds a config (kubeconfig style) from it. +func CreateConfig(namespace string, clientCfg *restclient.Config) (*clientcmdapi.Config, error) { + clusterNick, err := GetClusterNicknameFromConfig(clientCfg) + if err != nil { + return nil, err + } + + userNick, err := GetUserNicknameFromConfig(clientCfg) + if err != nil { + return nil, err + } + + contextNick, err := GetContextNicknameFromConfig(namespace, clientCfg) + if err != nil { + return nil, err + } + + config := clientcmdapi.NewConfig() + + credentials := clientcmdapi.NewAuthInfo() + credentials.Token = clientCfg.BearerToken + credentials.ClientCertificate = clientCfg.TLSClientConfig.CertFile + if len(credentials.ClientCertificate) == 0 { + credentials.ClientCertificateData = clientCfg.TLSClientConfig.CertData + } + credentials.ClientKey = clientCfg.TLSClientConfig.KeyFile + if len(credentials.ClientKey) == 0 { + credentials.ClientKeyData = clientCfg.TLSClientConfig.KeyData + } + config.AuthInfos[userNick] = credentials + + cluster := clientcmdapi.NewCluster() + cluster.Server = clientCfg.Host + cluster.CertificateAuthority = clientCfg.CAFile + if len(cluster.CertificateAuthority) == 0 { + cluster.CertificateAuthorityData = clientCfg.CAData + } + cluster.InsecureSkipTLSVerify = clientCfg.Insecure + if clientCfg.GroupVersion != nil { + cluster.APIVersion = clientCfg.GroupVersion.String() + } + config.Clusters[clusterNick] = cluster + + context := clientcmdapi.NewContext() + context.Cluster = clusterNick + context.AuthInfo = userNick + context.Namespace = namespace + config.Contexts[contextNick] = context + config.CurrentContext = contextNick + + return config, nil +} + +// MergeConfig adds the additional Config stanzas to the startingConfig. It blindly stomps clusters and users, but +// it searches for a matching context before writing a new one. +func MergeConfig(startingConfig, addition clientcmdapi.Config) (*clientcmdapi.Config, error) { + ret := startingConfig + + for requestedKey, value := range addition.Clusters { + ret.Clusters[requestedKey] = value + } + + for requestedKey, value := range addition.AuthInfos { + ret.AuthInfos[requestedKey] = value + } + + requestedContextNamesToActualContextNames := map[string]string{} + for requestedKey, newContext := range addition.Contexts { + actualContext := clientcmdapi.NewContext() + actualContext.AuthInfo = newContext.AuthInfo + actualContext.Cluster = newContext.Cluster + actualContext.Namespace = newContext.Namespace + actualContext.Extensions = newContext.Extensions + + if existingName := FindExistingContextName(startingConfig, *actualContext); len(existingName) > 0 { + // if this already exists, just move to the next, our job is done + requestedContextNamesToActualContextNames[requestedKey] = existingName + continue + } + + requestedContextNamesToActualContextNames[requestedKey] = requestedKey + ret.Contexts[requestedKey] = actualContext + } + + if len(addition.CurrentContext) > 0 { + if newCurrentContext, exists := requestedContextNamesToActualContextNames[addition.CurrentContext]; exists { + ret.CurrentContext = newCurrentContext + } else { + ret.CurrentContext = addition.CurrentContext + } + } + + return &ret, nil +} + +// FindExistingContextName finds the nickname for the passed context +func FindExistingContextName(haystack clientcmdapi.Config, needle clientcmdapi.Context) string { + for key, context := range haystack.Contexts { + context.LocationOfOrigin = "" + if reflect.DeepEqual(context, needle) { + return key + } + } + + return "" +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/chaindescriber.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/chaindescriber.go new file mode 100644 index 00000000..34ff224c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/chaindescriber.go @@ -0,0 +1,319 @@ +package describe + +import ( + "fmt" + "sort" + "strings" + + "github.com/golang/glog" + "github.com/gonum/graph" + "github.com/gonum/graph/encoding/dot" + "github.com/gonum/graph/path" + kapi "k8s.io/kubernetes/pkg/api" + utilerrors "k8s.io/kubernetes/pkg/util/errors" + "k8s.io/kubernetes/pkg/util/sets" + + osgraph "github.com/openshift/origin/pkg/api/graph" + buildedges "github.com/openshift/origin/pkg/build/graph" + buildanalysis "github.com/openshift/origin/pkg/build/graph/analysis" + buildgraph "github.com/openshift/origin/pkg/build/graph/nodes" + "github.com/openshift/origin/pkg/client" + imageapi "github.com/openshift/origin/pkg/image/api" + imagegraph "github.com/openshift/origin/pkg/image/graph/nodes" + dotutil "github.com/openshift/origin/pkg/util/dot" + "github.com/openshift/origin/pkg/util/parallel" +) + +// NotFoundErr is returned when the imageStreamTag (ist) of interest cannot +// be found in the graph. This doesn't mean though that the IST does not +// exist. A user may have an image stream without a build configuration +// pointing at it. In that case, the IST of interest simply doesn't have +// other dependant ists +type NotFoundErr string + +func (e NotFoundErr) Error() string { + return fmt.Sprintf("couldn't find image stream tag: %q", string(e)) +} + +// ChainDescriber generates extended information about a chain of +// dependencies of an image stream +type ChainDescriber struct { + c client.BuildConfigsNamespacer + namespaces sets.String + outputFormat string + namer osgraph.Namer +} + +// NewChainDescriber returns a new ChainDescriber +func NewChainDescriber(c client.BuildConfigsNamespacer, namespaces sets.String, out string) *ChainDescriber { + return &ChainDescriber{c: c, namespaces: namespaces, outputFormat: out, namer: namespacedFormatter{hideNamespace: true}} +} + +// MakeGraph will create the graph of all build configurations and the image streams +// they point to via image change triggers in the provided namespace(s) +func (d *ChainDescriber) MakeGraph() (osgraph.Graph, error) { + g := osgraph.New() + + loaders := []GraphLoader{} + for namespace := range d.namespaces { + glog.V(4).Infof("Loading build configurations from %q", namespace) + loaders = append(loaders, &bcLoader{namespace: namespace, lister: d.c}) + } + loadingFuncs := []func() error{} + for _, loader := range loaders { + loadingFuncs = append(loadingFuncs, loader.Load) + } + + if errs := parallel.Run(loadingFuncs...); len(errs) > 0 { + return g, utilerrors.NewAggregate(errs) + } + + for _, loader := range loaders { + loader.AddToGraph(g) + } + + buildedges.AddAllInputOutputEdges(g) + + return g, nil +} + +// Describe returns the output of the graph starting from the provided +// image stream tag (name:tag) in namespace. Namespace is needed here +// because image stream tags with the same name can be found across +// different namespaces. +func (d *ChainDescriber) Describe(ist *imageapi.ImageStreamTag, includeInputImages, reverse bool) (string, error) { + g, err := d.MakeGraph() + if err != nil { + return "", err + } + + // Retrieve the imageStreamTag node of interest + istNode := g.Find(imagegraph.ImageStreamTagNodeName(ist)) + if istNode == nil { + return "", NotFoundErr(fmt.Sprintf("%q", ist.Name)) + } + + markers := buildanalysis.FindCircularBuilds(g, d.namer) + if len(markers) > 0 { + for _, marker := range markers { + if strings.Contains(marker.Message, ist.Name) { + return marker.Message, nil + } + } + } + + buildInputEdgeKinds := []string{buildedges.BuildTriggerImageEdgeKind} + if includeInputImages { + buildInputEdgeKinds = append(buildInputEdgeKinds, buildedges.BuildInputImageEdgeKind) + } + + // Partition down to the subgraph containing the imagestreamtag of interest + var partitioned osgraph.Graph + if reverse { + partitioned = partitionReverse(g, istNode, buildInputEdgeKinds) + } else { + partitioned = partition(g, istNode, buildInputEdgeKinds) + } + + switch strings.ToLower(d.outputFormat) { + case "dot": + data, err := dot.Marshal(partitioned, dotutil.Quote(ist.Name), "", " ", false) + if err != nil { + return "", err + } + return string(data), nil + case "": + return d.humanReadableOutput(partitioned, d.namer, istNode, reverse), nil + } + + return "", fmt.Errorf("unknown specified format %q", d.outputFormat) +} + +// partition the graph down to a subgraph starting from the given root +func partition(g osgraph.Graph, root graph.Node, buildInputEdgeKinds []string) osgraph.Graph { + // Filter out all but BuildConfig and ImageStreamTag nodes + nodeFn := osgraph.NodesOfKind(buildgraph.BuildConfigNodeKind, imagegraph.ImageStreamTagNodeKind) + // Filter out all but BuildInputImage and BuildOutput edges + edgeKinds := []string{} + edgeKinds = append(edgeKinds, buildInputEdgeKinds...) + edgeKinds = append(edgeKinds, buildedges.BuildOutputEdgeKind) + edgeFn := osgraph.EdgesOfKind(edgeKinds...) + sub := g.Subgraph(nodeFn, edgeFn) + + // Filter out inbound edges to the IST of interest + edgeFn = osgraph.RemoveInboundEdges([]graph.Node{root}) + sub = sub.Subgraph(nodeFn, edgeFn) + + // Check all paths leading from the root node, collect any + // node found in them, and create the desired subgraph + desired := []graph.Node{root} + paths := path.DijkstraAllPaths(sub) + for _, node := range sub.Nodes() { + if node == root { + continue + } + path, _, _ := paths.Between(root, node) + if len(path) != 0 { + desired = append(desired, node) + } + } + return sub.SubgraphWithNodes(desired, osgraph.ExistingDirectEdge) +} + +// partitionReverse the graph down to a subgraph starting from the given root +func partitionReverse(g osgraph.Graph, root graph.Node, buildInputEdgeKinds []string) osgraph.Graph { + // Filter out all but BuildConfig and ImageStreamTag nodes + nodeFn := osgraph.NodesOfKind(buildgraph.BuildConfigNodeKind, imagegraph.ImageStreamTagNodeKind) + // Filter out all but BuildInputImage and BuildOutput edges + edgeKinds := []string{} + edgeKinds = append(edgeKinds, buildInputEdgeKinds...) + edgeKinds = append(edgeKinds, buildedges.BuildOutputEdgeKind) + edgeFn := osgraph.EdgesOfKind(edgeKinds...) + sub := g.Subgraph(nodeFn, edgeFn) + + // Filter out inbound edges to the IST of interest + edgeFn = osgraph.RemoveOutboundEdges([]graph.Node{root}) + sub = sub.Subgraph(nodeFn, edgeFn) + + // Check all paths leading from the root node, collect any + // node found in them, and create the desired subgraph + desired := []graph.Node{root} + paths := path.DijkstraAllPaths(sub) + for _, node := range sub.Nodes() { + if node == root { + continue + } + path, _, _ := paths.Between(node, root) + if len(path) != 0 { + desired = append(desired, node) + } + } + return sub.SubgraphWithNodes(desired, osgraph.ExistingDirectEdge) +} + +// humanReadableOutput traverses the provided graph using DFS and outputs it +// in a human-readable format. It starts from the provided root, assuming it +// is an imageStreamTag node and continues to the rest of the graph handling +// only imageStreamTag and buildConfig nodes. +func (d *ChainDescriber) humanReadableOutput(g osgraph.Graph, f osgraph.Namer, root graph.Node, reverse bool) string { + if reverse { + g = g.EdgeSubgraph(osgraph.ReverseExistingDirectEdge) + } + + var singleNamespace bool + if len(d.namespaces) == 1 && !d.namespaces.Has(kapi.NamespaceAll) { + singleNamespace = true + } + depth := map[graph.Node]int{ + root: 0, + } + out := "" + + dfs := &DepthFirst{ + Visit: func(u, v graph.Node) { + depth[v] = depth[u] + 1 + }, + } + + until := func(node graph.Node) bool { + var info string + + switch t := node.(type) { + case *imagegraph.ImageStreamTagNode: + info = outputHelper(f.ResourceName(t), t.Namespace, singleNamespace) + case *buildgraph.BuildConfigNode: + info = outputHelper(f.ResourceName(t), t.BuildConfig.Namespace, singleNamespace) + default: + panic("this graph contains node kinds other than imageStreamTags and buildConfigs") + } + + if depth[node] != 0 { + out += "\n" + } + out += fmt.Sprintf("%s", strings.Repeat("\t", depth[node])) + out += fmt.Sprintf("%s", info) + + return false + } + + dfs.Walk(g, root, until) + + return out +} + +// outputHelper returns resource/name in a single namespace, +// in multiple namespaces +func outputHelper(info, namespace string, singleNamespace bool) string { + if singleNamespace { + return info + } + return fmt.Sprintf("<%s %s>", namespace, info) +} + +// DepthFirst implements stateful depth-first graph traversal. +// Modifies behavior of visitor.DepthFirst to allow nodes to be visited multiple +// times as long as they're not in the current stack +type DepthFirst struct { + EdgeFilter func(graph.Edge) bool + Visit func(u, v graph.Node) + stack NodeStack +} + +// Walk performs a depth-first traversal of the graph g starting from the given node +func (d *DepthFirst) Walk(g graph.Graph, from graph.Node, until func(graph.Node) bool) graph.Node { + return d.visit(g, from, until) +} + +func (d *DepthFirst) visit(g graph.Graph, t graph.Node, until func(graph.Node) bool) graph.Node { + if until != nil && until(t) { + return t + } + d.stack.Push(t) + children := osgraph.ByID(g.From(t)) + sort.Sort(children) + for _, n := range children { + if d.EdgeFilter != nil && !d.EdgeFilter(g.Edge(t, n)) { + continue + } + if d.visited(n.ID()) { + continue + } + if d.Visit != nil { + d.Visit(t, n) + } + result := d.visit(g, n, until) + if result != nil { + return result + } + } + d.stack.Pop() + return nil +} + +func (d *DepthFirst) visited(id int) bool { + for _, n := range d.stack { + if n.ID() == id { + return true + } + } + return false +} + +// NodeStack implements a LIFO stack of graph.Node. +// NodeStack is internal only in go 1.5. +type NodeStack []graph.Node + +// Len returns the number of graph.Nodes on the stack. +func (s *NodeStack) Len() int { return len(*s) } + +// Pop returns the last graph.Node on the stack and removes it +// from the stack. +func (s *NodeStack) Pop() graph.Node { + v := *s + v, n := v[:len(v)-1], v[len(v)-1] + *s = v + return n +} + +// Push adds the node n to the stack at the last position. +func (s *NodeStack) Push(n graph.Node) { *s = append(*s, n) } diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/deployments.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/deployments.go new file mode 100644 index 00000000..977c4292 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/deployments.go @@ -0,0 +1,417 @@ +package describe + +import ( + "fmt" + "io" + "sort" + "strconv" + "strings" + "text/tabwriter" + + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apis/autoscaling" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + rcutils "k8s.io/kubernetes/pkg/controller/replication" + kctl "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/labels" + + "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + "github.com/openshift/origin/pkg/client" + deployapi "github.com/openshift/origin/pkg/deploy/api" + deployedges "github.com/openshift/origin/pkg/deploy/graph" + deploygraph "github.com/openshift/origin/pkg/deploy/graph/nodes" + deployutil "github.com/openshift/origin/pkg/deploy/util" + imageapi "github.com/openshift/origin/pkg/image/api" +) + +const ( + // maxDisplayDeployments is the number of deployments to show when describing + // deployment configuration. + maxDisplayDeployments = 3 + + // maxDisplayDeploymentsEvents is the number of events to display when + // describing the deployment configuration. + // TODO: Make the estimation of this number more sophisticated and make this + // number configurable via DescriberSettings + maxDisplayDeploymentsEvents = 8 +) + +// DeploymentConfigDescriber generates information about a DeploymentConfig +type DeploymentConfigDescriber struct { + osClient client.Interface + kubeClient kclient.Interface + + config *deployapi.DeploymentConfig +} + +// NewDeploymentConfigDescriber returns a new DeploymentConfigDescriber +func NewDeploymentConfigDescriber(client client.Interface, kclient kclient.Interface, config *deployapi.DeploymentConfig) *DeploymentConfigDescriber { + return &DeploymentConfigDescriber{ + osClient: client, + kubeClient: kclient, + config: config, + } +} + +// Describe returns the description of a DeploymentConfig +func (d *DeploymentConfigDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + var deploymentConfig *deployapi.DeploymentConfig + if d.config != nil { + // If a deployment config is already provided use that. + // This is used by `oc rollback --dry-run`. + deploymentConfig = d.config + } else { + var err error + deploymentConfig, err = d.osClient.DeploymentConfigs(namespace).Get(name) + if err != nil { + return "", err + } + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, deploymentConfig.ObjectMeta) + var ( + deploymentsHistory []kapi.ReplicationController + activeDeploymentName string + ) + + if d.config == nil { + if rcs, err := d.kubeClient.ReplicationControllers(namespace).List(kapi.ListOptions{LabelSelector: deployutil.ConfigSelector(deploymentConfig.Name)}); err == nil { + deploymentsHistory = rcs.Items + } + } + + if deploymentConfig.Status.LatestVersion == 0 { + formatString(out, "Latest Version", "Not deployed") + } else { + formatString(out, "Latest Version", strconv.FormatInt(deploymentConfig.Status.LatestVersion, 10)) + } + + printDeploymentConfigSpec(d.kubeClient, *deploymentConfig, out) + fmt.Fprintln(out) + + latestDeploymentName := deployutil.LatestDeploymentNameForConfig(deploymentConfig) + if activeDeployment := deployutil.ActiveDeployment(deploymentConfig, deploymentsHistory); activeDeployment != nil { + activeDeploymentName = activeDeployment.Name + } + + var deployment *kapi.ReplicationController + isNotDeployed := len(deploymentsHistory) == 0 + for _, item := range deploymentsHistory { + if item.Name == latestDeploymentName { + deployment = &item + } + } + + if isNotDeployed { + formatString(out, "Latest Deployment", "") + } else { + header := fmt.Sprintf("Deployment #%d (latest)", deployutil.DeploymentVersionFor(deployment)) + // Show details if the current deployment is the active one or it is the + // initial deployment. + printDeploymentRc(deployment, d.kubeClient, out, header, (deployment.Name == activeDeploymentName) || len(deploymentsHistory) == 1) + } + + // We don't show the deployment history when running `oc rollback --dry-run`. + if d.config == nil && !isNotDeployed { + sorted := deploymentsHistory + sort.Sort(sort.Reverse(rcutils.OverlappingControllers(sorted))) + counter := 1 + for _, item := range sorted { + if item.Name != latestDeploymentName && deploymentConfig.Name == deployutil.DeploymentConfigNameFor(&item) { + header := fmt.Sprintf("Deployment #%d", deployutil.DeploymentVersionFor(&item)) + printDeploymentRc(&item, d.kubeClient, out, header, item.Name == activeDeploymentName) + counter++ + } + if counter == maxDisplayDeployments { + break + } + } + } + + if settings.ShowEvents { + // Events + if events, err := d.kubeClient.Events(deploymentConfig.Namespace).Search(deploymentConfig); err == nil && events != nil { + latestDeploymentEvents := &kapi.EventList{Items: []kapi.Event{}} + for i := len(events.Items); i != 0 && i > len(events.Items)-maxDisplayDeploymentsEvents; i-- { + latestDeploymentEvents.Items = append(latestDeploymentEvents.Items, events.Items[i-1]) + } + fmt.Fprintln(out) + kctl.DescribeEvents(latestDeploymentEvents, out) + } + } + return nil + }) +} + +func multilineStringArray(sep, indent string, args ...string) string { + for i, s := range args { + if strings.HasSuffix(s, "\n") { + s = strings.TrimSuffix(s, "\n") + } + if strings.Contains(s, "\n") { + s = "\n" + indent + strings.Join(strings.Split(s, "\n"), "\n"+indent) + } + args[i] = s + } + strings.TrimRight(args[len(args)-1], "\n ") + return strings.Join(args, " ") +} + +func printStrategy(strategy deployapi.DeploymentStrategy, indent string, w *tabwriter.Writer) { + if strategy.CustomParams != nil { + if len(strategy.CustomParams.Image) == 0 { + fmt.Fprintf(w, "%sImage:\t%s\n", indent, "") + } else { + fmt.Fprintf(w, "%sImage:\t%s\n", indent, strategy.CustomParams.Image) + } + + if len(strategy.CustomParams.Environment) > 0 { + fmt.Fprintf(w, "%sEnvironment:\t%s\n", indent, formatLabels(convertEnv(strategy.CustomParams.Environment))) + } + + if len(strategy.CustomParams.Command) > 0 { + fmt.Fprintf(w, "%sCommand:\t%v\n", indent, multilineStringArray(" ", "\t ", strategy.CustomParams.Command...)) + } + } + + if strategy.RecreateParams != nil { + pre := strategy.RecreateParams.Pre + mid := strategy.RecreateParams.Mid + post := strategy.RecreateParams.Post + if pre != nil { + printHook("Pre-deployment", pre, indent, w) + } + if mid != nil { + printHook("Mid-deployment", mid, indent, w) + } + if post != nil { + printHook("Post-deployment", post, indent, w) + } + } + + if strategy.RollingParams != nil { + pre := strategy.RollingParams.Pre + post := strategy.RollingParams.Post + if pre != nil { + printHook("Pre-deployment", pre, indent, w) + } + if post != nil { + printHook("Post-deployment", post, indent, w) + } + } +} + +func printHook(prefix string, hook *deployapi.LifecycleHook, indent string, w io.Writer) { + if hook.ExecNewPod != nil { + fmt.Fprintf(w, "%s%s hook (pod type, failure policy: %s):\n", indent, prefix, hook.FailurePolicy) + fmt.Fprintf(w, "%s Container:\t%s\n", indent, hook.ExecNewPod.ContainerName) + fmt.Fprintf(w, "%s Command:\t%v\n", indent, multilineStringArray(" ", "\t ", hook.ExecNewPod.Command...)) + if len(hook.ExecNewPod.Env) > 0 { + fmt.Fprintf(w, "%s Env:\t%s\n", indent, formatLabels(convertEnv(hook.ExecNewPod.Env))) + } + } + if len(hook.TagImages) > 0 { + fmt.Fprintf(w, "%s%s hook (tag images, failure policy: %s):\n", indent, prefix, hook.FailurePolicy) + for _, image := range hook.TagImages { + fmt.Fprintf(w, "%s Tag:\tcontainer %s to %s %s %s\n", indent, image.ContainerName, image.To.Kind, image.To.Name, image.To.Namespace) + } + } +} + +func printTriggers(triggers []deployapi.DeploymentTriggerPolicy, w *tabwriter.Writer) { + if len(triggers) == 0 { + formatString(w, "Triggers", "") + return + } + + labels := []string{} + + for _, t := range triggers { + switch t.Type { + case deployapi.DeploymentTriggerOnConfigChange: + labels = append(labels, "Config") + case deployapi.DeploymentTriggerOnImageChange: + if len(t.ImageChangeParams.From.Name) > 0 { + name, tag, _ := imageapi.SplitImageStreamTag(t.ImageChangeParams.From.Name) + labels = append(labels, fmt.Sprintf("Image(%s@%s, auto=%v)", name, tag, t.ImageChangeParams.Automatic)) + } + } + } + + desc := strings.Join(labels, ", ") + formatString(w, "Triggers", desc) +} + +func printDeploymentConfigSpec(kc kclient.Interface, dc deployapi.DeploymentConfig, w *tabwriter.Writer) error { + spec := dc.Spec + // Selector + formatString(w, "Selector", formatLabels(spec.Selector)) + + // Replicas + test := "" + if spec.Test { + test = " (test, will be scaled down between deployments)" + } + formatString(w, "Replicas", fmt.Sprintf("%d%s", spec.Replicas, test)) + + if spec.Paused { + formatString(w, "Paused", "yes") + } + + // Autoscaling info + printAutoscalingInfo(deployapi.Resource("DeploymentConfig"), dc.Namespace, dc.Name, kc, w) + + // Triggers + printTriggers(spec.Triggers, w) + + // Strategy + formatString(w, "Strategy", spec.Strategy.Type) + printStrategy(spec.Strategy, " ", w) + + if dc.Spec.MinReadySeconds > 0 { + formatString(w, "MinReadySeconds", fmt.Sprintf("%d", spec.MinReadySeconds)) + } + + // Pod template + fmt.Fprintf(w, "Template:\n") + kctl.DescribePodTemplate(spec.Template, w) + + return nil +} + +// TODO: Move this upstream +func printAutoscalingInfo(res unversioned.GroupResource, namespace, name string, kclient kclient.Interface, w *tabwriter.Writer) { + hpaList, err := kclient.Autoscaling().HorizontalPodAutoscalers(namespace).List(kapi.ListOptions{LabelSelector: labels.Everything()}) + if err != nil { + return + } + + scaledBy := []autoscaling.HorizontalPodAutoscaler{} + for _, hpa := range hpaList.Items { + if hpa.Spec.ScaleTargetRef.Name == name && hpa.Spec.ScaleTargetRef.Kind == res.String() { + scaledBy = append(scaledBy, hpa) + } + } + + for _, hpa := range scaledBy { + cpuUtil := "" + if hpa.Spec.TargetCPUUtilizationPercentage != nil { + cpuUtil = fmt.Sprintf(", triggered at %d%% CPU usage", *hpa.Spec.TargetCPUUtilizationPercentage) + } + fmt.Fprintf(w, "Autoscaling:\tbetween %d and %d replicas%s\n", *hpa.Spec.MinReplicas, hpa.Spec.MaxReplicas, cpuUtil) + // TODO: Print a warning in case of multiple hpas. + // Related oc status PR: https://github.com/openshift/origin/pull/7799 + break + } +} + +func printDeploymentRc(deployment *kapi.ReplicationController, kubeClient kclient.Interface, w io.Writer, header string, verbose bool) error { + if len(header) > 0 { + fmt.Fprintf(w, "%v:\n", header) + } + + if verbose { + fmt.Fprintf(w, "\tName:\t%s\n", deployment.Name) + } + timeAt := strings.ToLower(formatRelativeTime(deployment.CreationTimestamp.Time)) + fmt.Fprintf(w, "\tCreated:\t%s ago\n", timeAt) + fmt.Fprintf(w, "\tStatus:\t%s\n", deployutil.DeploymentStatusFor(deployment)) + fmt.Fprintf(w, "\tReplicas:\t%d current / %d desired\n", deployment.Status.Replicas, deployment.Spec.Replicas) + + if verbose { + fmt.Fprintf(w, "\tSelector:\t%s\n", formatLabels(deployment.Spec.Selector)) + fmt.Fprintf(w, "\tLabels:\t%s\n", formatLabels(deployment.Labels)) + running, waiting, succeeded, failed, err := getPodStatusForDeployment(deployment, kubeClient) + if err != nil { + return err + } + fmt.Fprintf(w, "\tPods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed) + } + + return nil +} + +func getPodStatusForDeployment(deployment *kapi.ReplicationController, kubeClient kclient.Interface) (running, waiting, succeeded, failed int, err error) { + rcPods, err := kubeClient.Pods(deployment.Namespace).List(kapi.ListOptions{LabelSelector: labels.Set(deployment.Spec.Selector).AsSelector()}) + if err != nil { + return + } + for _, pod := range rcPods.Items { + switch pod.Status.Phase { + case kapi.PodRunning: + running++ + case kapi.PodPending: + waiting++ + case kapi.PodSucceeded: + succeeded++ + case kapi.PodFailed: + failed++ + } + } + return +} + +type LatestDeploymentsDescriber struct { + count int + osClient client.Interface + kubeClient kclient.Interface +} + +// NewLatestDeploymentsDescriber lists the latest deployments limited to "count". In case count == -1, list back to the last successful. +func NewLatestDeploymentsDescriber(client client.Interface, kclient kclient.Interface, count int) *LatestDeploymentsDescriber { + return &LatestDeploymentsDescriber{ + count: count, + osClient: client, + kubeClient: kclient, + } +} + +// Describe returns the description of the latest deployments for a config +func (d *LatestDeploymentsDescriber) Describe(namespace, name string) (string, error) { + var f formatter + + config, err := d.osClient.DeploymentConfigs(namespace).Get(name) + if err != nil { + return "", err + } + + var deployments []kapi.ReplicationController + if d.count == -1 || d.count > 1 { + list, err := d.kubeClient.ReplicationControllers(namespace).List(kapi.ListOptions{LabelSelector: deployutil.ConfigSelector(name)}) + if err != nil && !kerrors.IsNotFound(err) { + return "", err + } + deployments = list.Items + } else { + deploymentName := deployutil.LatestDeploymentNameForConfig(config) + deployment, err := d.kubeClient.ReplicationControllers(config.Namespace).Get(deploymentName) + if err != nil && !kerrors.IsNotFound(err) { + return "", err + } + if deployment != nil { + deployments = []kapi.ReplicationController{*deployment} + } + } + + g := graph.New() + dcNode := deploygraph.EnsureDeploymentConfigNode(g, config) + for i := range deployments { + kubegraph.EnsureReplicationControllerNode(g, &deployments[i]) + } + deployedges.AddTriggerEdges(g, dcNode) + deployedges.AddDeploymentEdges(g, dcNode) + activeDeployment, inactiveDeployments := deployedges.RelevantDeployments(g, dcNode) + + return tabbedString(func(out *tabwriter.Writer) error { + descriptions := describeDeployments(f, dcNode, activeDeployment, inactiveDeployments, nil, d.count) + for i, description := range descriptions { + descriptions[i] = fmt.Sprintf("%v %v", name, description) + } + printLines(out, "", 0, descriptions...) + return nil + }) +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/describer.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/describer.go new file mode 100644 index 00000000..cf003e7e --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/describer.go @@ -0,0 +1,1606 @@ +package describe + +import ( + "bytes" + "fmt" + "path/filepath" + "sort" + "strconv" + "strings" + "text/tabwriter" + "time" + + units "github.com/docker/go-units" + + kapi "k8s.io/kubernetes/pkg/api" + kerrs "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + kctl "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/sets" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" + buildapi "github.com/openshift/origin/pkg/build/api" + "github.com/openshift/origin/pkg/client" + deployapi "github.com/openshift/origin/pkg/deploy/api" + imageapi "github.com/openshift/origin/pkg/image/api" + oauthapi "github.com/openshift/origin/pkg/oauth/api" + projectapi "github.com/openshift/origin/pkg/project/api" + quotaapi "github.com/openshift/origin/pkg/quota/api" + routeapi "github.com/openshift/origin/pkg/route/api" + sdnapi "github.com/openshift/origin/pkg/sdn/api" + templateapi "github.com/openshift/origin/pkg/template/api" + userapi "github.com/openshift/origin/pkg/user/api" +) + +func describerMap(c *client.Client, kclient kclient.Interface, host string) map[unversioned.GroupKind]kctl.Describer { + m := map[unversioned.GroupKind]kctl.Describer{ + buildapi.Kind("Build"): &BuildDescriber{c, kclient}, + buildapi.Kind("BuildConfig"): &BuildConfigDescriber{c, host}, + deployapi.Kind("DeploymentConfig"): &DeploymentConfigDescriber{c, kclient, nil}, + authorizationapi.Kind("Identity"): &IdentityDescriber{c}, + imageapi.Kind("Image"): &ImageDescriber{c}, + imageapi.Kind("ImageStream"): &ImageStreamDescriber{c}, + imageapi.Kind("ImageStreamTag"): &ImageStreamTagDescriber{c}, + imageapi.Kind("ImageStreamImage"): &ImageStreamImageDescriber{c}, + routeapi.Kind("Route"): &RouteDescriber{c, kclient}, + projectapi.Kind("Project"): &ProjectDescriber{c, kclient}, + templateapi.Kind("Template"): &TemplateDescriber{c, meta.NewAccessor(), kapi.Scheme, nil}, + authorizationapi.Kind("Policy"): &PolicyDescriber{c}, + authorizationapi.Kind("PolicyBinding"): &PolicyBindingDescriber{c}, + authorizationapi.Kind("RoleBinding"): &RoleBindingDescriber{c}, + authorizationapi.Kind("Role"): &RoleDescriber{c}, + authorizationapi.Kind("ClusterPolicy"): &ClusterPolicyDescriber{c}, + authorizationapi.Kind("ClusterPolicyBinding"): &ClusterPolicyBindingDescriber{c}, + authorizationapi.Kind("ClusterRoleBinding"): &ClusterRoleBindingDescriber{c}, + authorizationapi.Kind("ClusterRole"): &ClusterRoleDescriber{c}, + oauthapi.Kind("OAuthAccessToken"): &OAuthAccessTokenDescriber{c}, + userapi.Kind("User"): &UserDescriber{c}, + userapi.Kind("Group"): &GroupDescriber{c.Groups()}, + userapi.Kind("UserIdentityMapping"): &UserIdentityMappingDescriber{c}, + quotaapi.Kind("ClusterResourceQuota"): &ClusterQuotaDescriber{c}, + quotaapi.Kind("AppliedClusterResourceQuota"): &AppliedClusterQuotaDescriber{c}, + sdnapi.Kind("ClusterNetwork"): &ClusterNetworkDescriber{c}, + sdnapi.Kind("HostSubnet"): &HostSubnetDescriber{c}, + sdnapi.Kind("NetNamespace"): &NetNamespaceDescriber{c}, + sdnapi.Kind("EgressNetworkPolicy"): &EgressNetworkPolicyDescriber{c}, + } + return m +} + +// DescribableResources lists all of the resource types we can describe +func DescribableResources() []string { + // Include describable resources in kubernetes + keys := kctl.DescribableResources() + + for k := range describerMap(nil, nil, "") { + resource := strings.ToLower(k.Kind) + keys = append(keys, resource) + } + return keys +} + +// DescriberFor returns a describer for a given kind of resource +func DescriberFor(kind unversioned.GroupKind, c *client.Client, kclient kclient.Interface, host string) (kctl.Describer, bool) { + f, ok := describerMap(c, kclient, host)[kind] + if ok { + return f, true + } + return nil, false +} + +// BuildDescriber generates information about a build +type BuildDescriber struct { + osClient client.Interface + kubeClient kclient.Interface +} + +// Describe returns the description of a build +func (d *BuildDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.osClient.Builds(namespace) + build, err := c.Get(name) + if err != nil { + return "", err + } + events, _ := d.kubeClient.Events(namespace).Search(build) + if events == nil { + events = &kapi.EventList{} + } + // get also pod events and merge it all into one list for describe + if pod, err := d.kubeClient.Pods(namespace).Get(buildapi.GetBuildPodName(build)); err == nil { + if podEvents, _ := d.kubeClient.Events(namespace).Search(pod); podEvents != nil { + events.Items = append(events.Items, podEvents.Items...) + } + } + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, build.ObjectMeta) + + fmt.Fprintln(out, "") + + status := bold(build.Status.Phase) + if build.Status.Message != "" { + status += " (" + build.Status.Message + ")" + } + formatString(out, "Status", status) + + if build.Status.StartTimestamp != nil && !build.Status.StartTimestamp.IsZero() { + formatString(out, "Started", build.Status.StartTimestamp.Time.Format(time.RFC1123)) + } + + // Create the time object with second-level precision so we don't get + // output like "duration: 1.2724395728934s" + formatString(out, "Duration", describeBuildDuration(build)) + + if build.Status.Config != nil { + formatString(out, "Build Config", build.Status.Config.Name) + } + formatString(out, "Build Pod", buildapi.GetBuildPodName(build)) + + describeCommonSpec(build.Spec.CommonSpec, out) + describeBuildTriggerCauses(build.Spec.TriggeredBy, out) + + if settings.ShowEvents { + kctl.DescribeEvents(events, out) + } + + return nil + }) +} + +func describeBuildDuration(build *buildapi.Build) string { + t := unversioned.Now().Rfc3339Copy() + if build.Status.StartTimestamp == nil && + build.Status.CompletionTimestamp != nil && + (build.Status.Phase == buildapi.BuildPhaseCancelled || + build.Status.Phase == buildapi.BuildPhaseFailed || + build.Status.Phase == buildapi.BuildPhaseError) { + // time a build waited for its pod before ultimately being cancelled before that pod was created + return fmt.Sprintf("waited for %s", build.Status.CompletionTimestamp.Rfc3339Copy().Time.Sub(build.CreationTimestamp.Rfc3339Copy().Time)) + } else if build.Status.StartTimestamp == nil && build.Status.Phase != buildapi.BuildPhaseCancelled { + // time a new build has been waiting for its pod to be created so it can run + return fmt.Sprintf("waiting for %v", t.Sub(build.CreationTimestamp.Rfc3339Copy().Time)) + } else if build.Status.StartTimestamp != nil && build.Status.CompletionTimestamp == nil { + // time a still running build has been running in a pod + return fmt.Sprintf("running for %v", build.Status.Duration) + } + return fmt.Sprintf("%v", build.Status.Duration) +} + +// BuildConfigDescriber generates information about a buildConfig +type BuildConfigDescriber struct { + client.Interface + host string +} + +func nameAndNamespace(ns, name string) string { + if len(ns) != 0 { + return fmt.Sprintf("%s/%s", ns, name) + } + return name +} + +func describeCommonSpec(p buildapi.CommonSpec, out *tabwriter.Writer) { + formatString(out, "\nStrategy", buildapi.StrategyType(p.Strategy)) + noneType := true + if p.Source.Git != nil { + noneType = false + formatString(out, "URL", p.Source.Git.URI) + if len(p.Source.Git.Ref) > 0 { + formatString(out, "Ref", p.Source.Git.Ref) + } + if len(p.Source.ContextDir) > 0 { + formatString(out, "ContextDir", p.Source.ContextDir) + } + if p.Source.SourceSecret != nil { + formatString(out, "Source Secret", p.Source.SourceSecret.Name) + } + squashGitInfo(p.Revision, out) + } + if p.Source.Dockerfile != nil { + if len(strings.TrimSpace(*p.Source.Dockerfile)) == 0 { + formatString(out, "Dockerfile", "") + } else { + fmt.Fprintf(out, "Dockerfile:\n") + for _, s := range strings.Split(*p.Source.Dockerfile, "\n") { + fmt.Fprintf(out, " %s\n", s) + } + } + } + switch { + case p.Strategy.DockerStrategy != nil: + describeDockerStrategy(p.Strategy.DockerStrategy, out) + case p.Strategy.SourceStrategy != nil: + describeSourceStrategy(p.Strategy.SourceStrategy, out) + case p.Strategy.CustomStrategy != nil: + describeCustomStrategy(p.Strategy.CustomStrategy, out) + case p.Strategy.JenkinsPipelineStrategy != nil: + describeJenkinsPipelineStrategy(p.Strategy.JenkinsPipelineStrategy, out) + } + + if p.Output.To != nil { + formatString(out, "Output to", fmt.Sprintf("%s %s", p.Output.To.Kind, nameAndNamespace(p.Output.To.Namespace, p.Output.To.Name))) + } + + if p.Source.Binary != nil { + noneType = false + if len(p.Source.Binary.AsFile) > 0 { + formatString(out, "Binary", fmt.Sprintf("provided as file %q on build", p.Source.Binary.AsFile)) + } else { + formatString(out, "Binary", "provided on build") + } + } + + if len(p.Source.Secrets) > 0 { + result := []string{} + for _, s := range p.Source.Secrets { + result = append(result, fmt.Sprintf("%s->%s", s.Secret.Name, filepath.Clean(s.DestinationDir))) + } + formatString(out, "Build Secrets", strings.Join(result, ",")) + } + if len(p.Source.Images) == 1 && len(p.Source.Images[0].Paths) == 1 { + noneType = false + image := p.Source.Images[0] + path := image.Paths[0] + formatString(out, "Image Source", fmt.Sprintf("copies %s from %s to %s", path.SourcePath, nameAndNamespace(image.From.Namespace, image.From.Name), path.DestinationDir)) + } else { + for _, image := range p.Source.Images { + noneType = false + formatString(out, "Image Source", fmt.Sprintf("%s", nameAndNamespace(image.From.Namespace, image.From.Name))) + for _, path := range image.Paths { + fmt.Fprintf(out, "\t- %s -> %s\n", path.SourcePath, path.DestinationDir) + } + } + } + + if noneType { + formatString(out, "Empty Source", "no input source provided") + } + + describePostCommitHook(p.PostCommit, out) + + if p.Output.PushSecret != nil { + formatString(out, "Push Secret", p.Output.PushSecret.Name) + } + + if p.CompletionDeadlineSeconds != nil { + formatString(out, "Fail Build After", time.Duration(*p.CompletionDeadlineSeconds)*time.Second) + } +} + +func describePostCommitHook(hook buildapi.BuildPostCommitSpec, out *tabwriter.Writer) { + command := hook.Command + args := hook.Args + script := hook.Script + if len(command) == 0 && len(args) == 0 && len(script) == 0 { + // Post commit hook is not set, nothing to do. + return + } + if len(script) != 0 { + command = []string{"/bin/sh", "-ic"} + if len(args) > 0 { + args = append([]string{script, command[0]}, args...) + } else { + args = []string{script} + } + } + if len(command) == 0 { + command = []string{""} + } + all := append(command, args...) + for i, v := range all { + all[i] = fmt.Sprintf("%q", v) + } + formatString(out, "Post Commit Hook", fmt.Sprintf("[%s]", strings.Join(all, ", "))) +} + +func describeSourceStrategy(s *buildapi.SourceBuildStrategy, out *tabwriter.Writer) { + if len(s.From.Name) != 0 { + formatString(out, "From Image", fmt.Sprintf("%s %s", s.From.Kind, nameAndNamespace(s.From.Namespace, s.From.Name))) + } + if len(s.Scripts) != 0 { + formatString(out, "Scripts", s.Scripts) + } + if s.PullSecret != nil { + formatString(out, "Pull Secret Name", s.PullSecret.Name) + } + if s.Incremental != nil && *s.Incremental { + formatString(out, "Incremental Build", "yes") + } + if s.ForcePull { + formatString(out, "Force Pull", "yes") + } +} + +func describeDockerStrategy(s *buildapi.DockerBuildStrategy, out *tabwriter.Writer) { + if s.From != nil && len(s.From.Name) != 0 { + formatString(out, "From Image", fmt.Sprintf("%s %s", s.From.Kind, nameAndNamespace(s.From.Namespace, s.From.Name))) + } + if len(s.DockerfilePath) != 0 { + formatString(out, "Dockerfile Path", s.DockerfilePath) + } + if s.PullSecret != nil { + formatString(out, "Pull Secret Name", s.PullSecret.Name) + } + if s.NoCache { + formatString(out, "No Cache", "true") + } + if s.ForcePull { + formatString(out, "Force Pull", "true") + } +} + +func describeCustomStrategy(s *buildapi.CustomBuildStrategy, out *tabwriter.Writer) { + if len(s.From.Name) != 0 { + formatString(out, "Image Reference", fmt.Sprintf("%s %s", s.From.Kind, nameAndNamespace(s.From.Namespace, s.From.Name))) + } + if s.ExposeDockerSocket { + formatString(out, "Expose Docker Socket", "yes") + } + if s.ForcePull { + formatString(out, "Force Pull", "yes") + } + if s.PullSecret != nil { + formatString(out, "Pull Secret Name", s.PullSecret.Name) + } + for i, env := range s.Env { + if i == 0 { + formatString(out, "Environment", formatEnv(env)) + } else { + formatString(out, "", formatEnv(env)) + } + } +} + +func describeJenkinsPipelineStrategy(s *buildapi.JenkinsPipelineBuildStrategy, out *tabwriter.Writer) { + if len(s.JenkinsfilePath) != 0 { + formatString(out, "Jenkinsfile path", s.JenkinsfilePath) + } + if len(s.Jenkinsfile) != 0 { + fmt.Fprintf(out, "Jenkinsfile contents:\n") + for _, s := range strings.Split(s.Jenkinsfile, "\n") { + fmt.Fprintf(out, " %s\n", s) + } + } + if len(s.Jenkinsfile) == 0 && len(s.JenkinsfilePath) == 0 { + formatString(out, "Jenkinsfile", "from source repository root") + } +} + +// DescribeTriggers generates information about the triggers associated with a +// buildconfig +func (d *BuildConfigDescriber) DescribeTriggers(bc *buildapi.BuildConfig, out *tabwriter.Writer) { + describeBuildTriggers(bc.Spec.Triggers, bc.Name, bc.Namespace, out, d) +} + +func describeBuildTriggers(triggers []buildapi.BuildTriggerPolicy, name, namespace string, w *tabwriter.Writer, d *BuildConfigDescriber) { + if len(triggers) == 0 { + formatString(w, "Triggered by", "") + return + } + + labels := []string{} + + for _, t := range triggers { + switch t.Type { + case buildapi.GitHubWebHookBuildTriggerType, buildapi.GenericWebHookBuildTriggerType: + continue + case buildapi.ConfigChangeBuildTriggerType: + labels = append(labels, "Config") + case buildapi.ImageChangeBuildTriggerType: + if t.ImageChange != nil && t.ImageChange.From != nil && len(t.ImageChange.From.Name) > 0 { + labels = append(labels, fmt.Sprintf("Image(%s %s)", t.ImageChange.From.Kind, t.ImageChange.From.Name)) + } else { + labels = append(labels, string(t.Type)) + } + case "": + labels = append(labels, "") + default: + labels = append(labels, string(t.Type)) + } + } + + desc := strings.Join(labels, ", ") + formatString(w, "Triggered by", desc) + + webHooks := webHooksDescribe(triggers, name, namespace, d.Interface) + for webHookType, webHookDesc := range webHooks { + fmt.Fprintf(w, "Webhook %s:\n", strings.Title(webHookType)) + for _, trigger := range webHookDesc { + fmt.Fprintf(w, "\tURL:\t%s\n", trigger.URL) + if webHookType == string(buildapi.GenericWebHookBuildTriggerType) && trigger.AllowEnv != nil { + fmt.Fprintf(w, fmt.Sprintf("\t%s:\t%v\n", "AllowEnv", *trigger.AllowEnv)) + } + } + } +} + +// Describe returns the description of a buildConfig +func (d *BuildConfigDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.BuildConfigs(namespace) + buildConfig, err := c.Get(name) + if err != nil { + return "", err + } + buildList, err := d.Builds(namespace).List(kapi.ListOptions{}) + if err != nil { + return "", err + } + buildList.Items = buildapi.FilterBuilds(buildList.Items, buildapi.ByBuildConfigPredicate(name)) + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, buildConfig.ObjectMeta) + if buildConfig.Status.LastVersion == 0 { + formatString(out, "Latest Version", "Never built") + } else { + formatString(out, "Latest Version", strconv.FormatInt(buildConfig.Status.LastVersion, 10)) + } + describeCommonSpec(buildConfig.Spec.CommonSpec, out) + formatString(out, "\nBuild Run Policy", string(buildConfig.Spec.RunPolicy)) + d.DescribeTriggers(buildConfig, out) + if len(buildList.Items) == 0 { + return nil + } + fmt.Fprintf(out, "\nBuild\tStatus\tDuration\tCreation Time\n") + + builds := buildList.Items + sort.Sort(sort.Reverse(buildapi.BuildSliceByCreationTimestamp(builds))) + + for i, build := range builds { + fmt.Fprintf(out, "%s \t%s \t%v \t%v\n", + build.Name, + strings.ToLower(string(build.Status.Phase)), + describeBuildDuration(&build), + build.CreationTimestamp.Rfc3339Copy().Time) + // only print the 10 most recent builds. + if i == 9 { + break + } + } + return nil + }) +} + +// OAuthAccessTokenDescriber generates information about an OAuth Acess Token (OAuth) +type OAuthAccessTokenDescriber struct { + client.Interface +} + +func (d *OAuthAccessTokenDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.OAuthAccessTokens() + oAuthAccessToken, err := c.Get(name) + if err != nil { + return "", err + } + + var timeCreated time.Time = oAuthAccessToken.ObjectMeta.CreationTimestamp.Time + var timeExpired time.Time = timeCreated.Add(time.Duration(oAuthAccessToken.ExpiresIn) * time.Second) + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, oAuthAccessToken.ObjectMeta) + formatString(out, "Scopes", oAuthAccessToken.Scopes) + formatString(out, "Expires In", formatToHumanDuration(timeExpired.Sub(time.Now()))) + formatString(out, "User Name", oAuthAccessToken.UserName) + formatString(out, "User UID", oAuthAccessToken.UserUID) + formatString(out, "Client Name", oAuthAccessToken.ClientName) + + return nil + }) +} + +// ImageDescriber generates information about a Image +type ImageDescriber struct { + client.Interface +} + +// Describe returns the description of an image +func (d *ImageDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.Images() + image, err := c.Get(name) + if err != nil { + return "", err + } + + return describeImage(image, "") +} + +func describeImage(image *imageapi.Image, imageName string) (string, error) { + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, image.ObjectMeta) + formatString(out, "Docker Image", image.DockerImageReference) + if len(imageName) > 0 { + formatString(out, "Image Name", imageName) + } + switch l := len(image.DockerImageLayers); l { + case 0: + // legacy case, server does not know individual layers + formatString(out, "Layer Size", units.HumanSize(float64(image.DockerImageMetadata.Size))) + case 1: + formatString(out, "Image Size", units.HumanSize(float64(image.DockerImageMetadata.Size))) + default: + info := []string{} + if image.DockerImageLayers[0].LayerSize > 0 { + info = append(info, fmt.Sprintf("first layer %s", units.HumanSize(float64(image.DockerImageLayers[0].LayerSize)))) + } + for i := l - 1; i > 0; i-- { + if image.DockerImageLayers[i].LayerSize == 0 { + continue + } + info = append(info, fmt.Sprintf("last binary layer %s", units.HumanSize(float64(image.DockerImageLayers[i].LayerSize)))) + break + } + if len(info) > 0 { + formatString(out, "Image Size", fmt.Sprintf("%s (%s)", units.HumanSize(float64(image.DockerImageMetadata.Size)), strings.Join(info, ", "))) + } else { + formatString(out, "Image Size", units.HumanSize(float64(image.DockerImageMetadata.Size))) + } + } + //formatString(out, "Parent Image", image.DockerImageMetadata.Parent) + formatString(out, "Image Created", fmt.Sprintf("%s ago", formatRelativeTime(image.DockerImageMetadata.Created.Time))) + formatString(out, "Author", image.DockerImageMetadata.Author) + formatString(out, "Arch", image.DockerImageMetadata.Architecture) + describeDockerImage(out, image.DockerImageMetadata.Config) + return nil + }) +} + +func describeDockerImage(out *tabwriter.Writer, image *imageapi.DockerConfig) { + if image == nil { + return + } + hasCommand := false + if len(image.Entrypoint) > 0 { + hasCommand = true + formatString(out, "Entrypoint", strings.Join(image.Entrypoint, " ")) + } + if len(image.Cmd) > 0 { + hasCommand = true + formatString(out, "Command", strings.Join(image.Cmd, " ")) + } + if !hasCommand { + formatString(out, "Command", "") + } + formatString(out, "Working Dir", image.WorkingDir) + formatString(out, "User", image.User) + ports := sets.NewString() + for k := range image.ExposedPorts { + ports.Insert(k) + } + formatString(out, "Exposes Ports", strings.Join(ports.List(), ", ")) + formatMapStringString(out, "Docker Labels", image.Labels) + for i, env := range image.Env { + if i == 0 { + formatString(out, "Environment", env) + } else { + fmt.Fprintf(out, "\t%s\n", env) + } + } + volumes := sets.NewString() + for k := range image.Volumes { + volumes.Insert(k) + } + for i, volume := range volumes.List() { + if i == 0 { + formatString(out, "Volumes", volume) + } else { + fmt.Fprintf(out, "\t%s\n", volume) + } + } +} + +// ImageStreamTagDescriber generates information about a ImageStreamTag (Image). +type ImageStreamTagDescriber struct { + client.Interface +} + +// Describe returns the description of an imageStreamTag +func (d *ImageStreamTagDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.ImageStreamTags(namespace) + repo, tag, err := imageapi.ParseImageStreamTagName(name) + if err != nil { + return "", err + } + if len(tag) == 0 { + // TODO use repo's preferred default, when that's coded + tag = imageapi.DefaultImageTag + } + imageStreamTag, err := c.Get(repo, tag) + if err != nil { + return "", err + } + + return describeImage(&imageStreamTag.Image, imageStreamTag.Image.Name) +} + +// ImageStreamImageDescriber generates information about a ImageStreamImage (Image). +type ImageStreamImageDescriber struct { + client.Interface +} + +// Describe returns the description of an imageStreamImage +func (d *ImageStreamImageDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.ImageStreamImages(namespace) + repo, id, err := imageapi.ParseImageStreamImageName(name) + if err != nil { + return "", err + } + imageStreamImage, err := c.Get(repo, id) + if err != nil { + return "", err + } + + return describeImage(&imageStreamImage.Image, imageStreamImage.Image.Name) +} + +// ImageStreamDescriber generates information about a ImageStream (Image). +type ImageStreamDescriber struct { + client.Interface +} + +// Describe returns the description of an imageStream +func (d *ImageStreamDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.ImageStreams(namespace) + imageStream, err := c.Get(name) + if err != nil { + return "", err + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, imageStream.ObjectMeta) + formatString(out, "Docker Pull Spec", imageStream.Status.DockerImageRepository) + formatImageStreamTags(out, imageStream) + return nil + }) +} + +// RouteDescriber generates information about a Route +type RouteDescriber struct { + client.Interface + kubeClient kclient.Interface +} + +type routeEndpointInfo struct { + *kapi.Endpoints + Err error +} + +// Describe returns the description of a route +func (d *RouteDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.Routes(namespace) + route, err := c.Get(name) + if err != nil { + return "", err + } + + backends := append([]routeapi.RouteTargetReference{route.Spec.To}, route.Spec.AlternateBackends...) + totalWeight := int32(0) + endpoints := make(map[string]routeEndpointInfo) + for _, backend := range backends { + if backend.Weight != nil { + totalWeight += *backend.Weight + } + ep, endpointsErr := d.kubeClient.Endpoints(namespace).Get(backend.Name) + endpoints[backend.Name] = routeEndpointInfo{ep, endpointsErr} + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, route.ObjectMeta) + if len(route.Spec.Host) > 0 { + formatString(out, "Requested Host", route.Spec.Host) + for _, ingress := range route.Status.Ingress { + if route.Spec.Host != ingress.Host { + continue + } + switch status, condition := routeapi.IngressConditionStatus(&ingress, routeapi.RouteAdmitted); status { + case kapi.ConditionTrue: + fmt.Fprintf(out, "\t exposed on router %s %s ago\n", ingress.RouterName, strings.ToLower(formatRelativeTime(condition.LastTransitionTime.Time))) + case kapi.ConditionFalse: + fmt.Fprintf(out, "\t rejected by router %s: %s (%s ago)\n", ingress.RouterName, condition.Reason, strings.ToLower(formatRelativeTime(condition.LastTransitionTime.Time))) + if len(condition.Message) > 0 { + fmt.Fprintf(out, "\t %s\n", condition.Message) + } + } + } + } else { + formatString(out, "Requested Host", "") + } + + for _, ingress := range route.Status.Ingress { + if route.Spec.Host == ingress.Host { + continue + } + switch status, condition := routeapi.IngressConditionStatus(&ingress, routeapi.RouteAdmitted); status { + case kapi.ConditionTrue: + fmt.Fprintf(out, "\t%s exposed on router %s %s ago\n", ingress.Host, ingress.RouterName, strings.ToLower(formatRelativeTime(condition.LastTransitionTime.Time))) + case kapi.ConditionFalse: + fmt.Fprintf(out, "\trejected by router %s: %s (%s ago)\n", ingress.RouterName, condition.Reason, strings.ToLower(formatRelativeTime(condition.LastTransitionTime.Time))) + if len(condition.Message) > 0 { + fmt.Fprintf(out, "\t %s\n", condition.Message) + } + } + } + formatString(out, "Path", route.Spec.Path) + + tlsTerm := "" + insecurePolicy := "" + if route.Spec.TLS != nil { + tlsTerm = string(route.Spec.TLS.Termination) + insecurePolicy = string(route.Spec.TLS.InsecureEdgeTerminationPolicy) + } + formatString(out, "TLS Termination", tlsTerm) + formatString(out, "Insecure Policy", insecurePolicy) + if route.Spec.Port != nil { + formatString(out, "Endpoint Port", route.Spec.Port.TargetPort.String()) + } else { + formatString(out, "Endpoint Port", "") + } + + for _, backend := range backends { + fmt.Fprintln(out) + formatString(out, "Service", backend.Name) + weight := int32(0) + if backend.Weight != nil { + weight = *backend.Weight + } + if weight > 0 { + fmt.Fprintf(out, "Weight:\t%d (%d%%)\n", weight, weight*100/totalWeight) + } else { + formatString(out, "Weight", "0") + } + + info := endpoints[backend.Name] + if info.Err != nil { + formatString(out, "Endpoints", fmt.Sprintf("", info.Err)) + continue + } + endpoints := info.Endpoints + if len(endpoints.Subsets) == 0 { + formatString(out, "Endpoints", "") + continue + } + + list := []string{} + max := 3 + count := 0 + for i := range endpoints.Subsets { + ss := &endpoints.Subsets[i] + for p := range ss.Ports { + for a := range ss.Addresses { + if len(list) < max { + list = append(list, fmt.Sprintf("%s:%d", ss.Addresses[a].IP, ss.Ports[p].Port)) + } + count++ + } + } + } + ends := strings.Join(list, ", ") + if count > max { + ends += fmt.Sprintf(" + %d more...", count-max) + } + formatString(out, "Endpoints", ends) + } + return nil + }) +} + +// ProjectDescriber generates information about a Project +type ProjectDescriber struct { + osClient client.Interface + kubeClient kclient.Interface +} + +// Describe returns the description of a project +func (d *ProjectDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + projectsClient := d.osClient.Projects() + project, err := projectsClient.Get(name) + if err != nil { + return "", err + } + resourceQuotasClient := d.kubeClient.ResourceQuotas(name) + resourceQuotaList, err := resourceQuotasClient.List(kapi.ListOptions{}) + if err != nil { + return "", err + } + limitRangesClient := d.kubeClient.LimitRanges(name) + limitRangeList, err := limitRangesClient.List(kapi.ListOptions{}) + if err != nil { + return "", err + } + + nodeSelector := "" + if len(project.ObjectMeta.Annotations) > 0 { + if ns, ok := project.ObjectMeta.Annotations[projectapi.ProjectNodeSelector]; ok { + nodeSelector = ns + } + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, project.ObjectMeta) + formatString(out, "Display Name", project.Annotations[projectapi.ProjectDisplayName]) + formatString(out, "Description", project.Annotations[projectapi.ProjectDescription]) + formatString(out, "Status", project.Status.Phase) + formatString(out, "Node Selector", nodeSelector) + if len(resourceQuotaList.Items) == 0 { + formatString(out, "Quota", "") + } else { + fmt.Fprintf(out, "Quota:\n") + for i := range resourceQuotaList.Items { + resourceQuota := &resourceQuotaList.Items[i] + fmt.Fprintf(out, "\tName:\t%s\n", resourceQuota.Name) + fmt.Fprintf(out, "\tResource\tUsed\tHard\n") + fmt.Fprintf(out, "\t--------\t----\t----\n") + + resources := []kapi.ResourceName{} + for resource := range resourceQuota.Status.Hard { + resources = append(resources, resource) + } + sort.Sort(kctl.SortableResourceNames(resources)) + + msg := "\t%v\t%v\t%v\n" + for i := range resources { + resource := resources[i] + hardQuantity := resourceQuota.Status.Hard[resource] + usedQuantity := resourceQuota.Status.Used[resource] + fmt.Fprintf(out, msg, resource, usedQuantity.String(), hardQuantity.String()) + } + } + } + if len(limitRangeList.Items) == 0 { + formatString(out, "Resource limits", "") + } else { + fmt.Fprintf(out, "Resource limits:\n") + for i := range limitRangeList.Items { + limitRange := &limitRangeList.Items[i] + fmt.Fprintf(out, "\tName:\t%s\n", limitRange.Name) + fmt.Fprintf(out, "\tType\tResource\tMin\tMax\tDefault\n") + fmt.Fprintf(out, "\t----\t--------\t---\t---\t---\n") + for i := range limitRange.Spec.Limits { + item := limitRange.Spec.Limits[i] + maxResources := item.Max + minResources := item.Min + defaultResources := item.Default + + set := map[kapi.ResourceName]bool{} + for k := range maxResources { + set[k] = true + } + for k := range minResources { + set[k] = true + } + for k := range defaultResources { + set[k] = true + } + + for k := range set { + // if no value is set, we output - + maxValue := "-" + minValue := "-" + defaultValue := "-" + + maxQuantity, maxQuantityFound := maxResources[k] + if maxQuantityFound { + maxValue = maxQuantity.String() + } + + minQuantity, minQuantityFound := minResources[k] + if minQuantityFound { + minValue = minQuantity.String() + } + + defaultQuantity, defaultQuantityFound := defaultResources[k] + if defaultQuantityFound { + defaultValue = defaultQuantity.String() + } + + msg := "\t%v\t%v\t%v\t%v\t%v\n" + fmt.Fprintf(out, msg, item.Type, k, minValue, maxValue, defaultValue) + } + } + } + } + return nil + }) +} + +// TemplateDescriber generates information about a template +type TemplateDescriber struct { + client.Interface + meta.MetadataAccessor + runtime.ObjectTyper + kctl.ObjectDescriber +} + +// DescribeMessage prints the message that will be parameter substituted and displayed to the +// user when this template is processed. +func (d *TemplateDescriber) DescribeMessage(msg string, out *tabwriter.Writer) { + if len(msg) == 0 { + msg = "" + } + formatString(out, "Message", msg) +} + +// DescribeParameters prints out information about the parameters of a template +func (d *TemplateDescriber) DescribeParameters(params []templateapi.Parameter, out *tabwriter.Writer) { + formatString(out, "Parameters", " ") + indent := " " + for _, p := range params { + formatString(out, indent+"Name", p.Name) + if len(p.DisplayName) > 0 { + formatString(out, indent+"Display Name", p.DisplayName) + } + if len(p.Description) > 0 { + formatString(out, indent+"Description", p.Description) + } + formatString(out, indent+"Required", p.Required) + if len(p.Generate) == 0 { + formatString(out, indent+"Value", p.Value) + continue + } + if len(p.Value) > 0 { + formatString(out, indent+"Value", p.Value) + formatString(out, indent+"Generated (ignored)", p.Generate) + formatString(out, indent+"From", p.From) + } else { + formatString(out, indent+"Generated", p.Generate) + formatString(out, indent+"From", p.From) + } + out.Write([]byte("\n")) + } +} + +// describeObjects prints out information about the objects of a template +func (d *TemplateDescriber) describeObjects(objects []runtime.Object, out *tabwriter.Writer) { + formatString(out, "Objects", " ") + indent := " " + for _, obj := range objects { + if d.ObjectDescriber != nil { + output, err := d.DescribeObject(obj) + if err != nil { + fmt.Fprintf(out, "error: %v\n", err) + continue + } + fmt.Fprint(out, output) + fmt.Fprint(out, "\n") + continue + } + + meta := kapi.ObjectMeta{} + meta.Name, _ = d.MetadataAccessor.Name(obj) + gvk, _, err := d.ObjectTyper.ObjectKinds(obj) + if err != nil { + fmt.Fprintf(out, fmt.Sprintf("%s%s\t%s\n", indent, "", meta.Name)) + continue + } + fmt.Fprintf(out, fmt.Sprintf("%s%s\t%s\n", indent, gvk[0].Kind, meta.Name)) + //meta.Annotations, _ = d.MetadataAccessor.Annotations(obj) + //meta.Labels, _ = d.MetadataAccessor.Labels(obj) + /*if len(meta.Labels) > 0 { + formatString(out, indent+"Labels", formatLabels(meta.Labels)) + } + formatAnnotations(out, meta, indent)*/ + } +} + +// Describe returns the description of a template +func (d *TemplateDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.Templates(namespace) + template, err := c.Get(name) + if err != nil { + return "", err + } + return d.DescribeTemplate(template) +} + +func (d *TemplateDescriber) DescribeTemplate(template *templateapi.Template) (string, error) { + // TODO: write error? + _ = runtime.DecodeList(template.Objects, kapi.Codecs.UniversalDecoder(), runtime.UnstructuredJSONScheme) + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, template.ObjectMeta) + out.Write([]byte("\n")) + out.Flush() + d.DescribeParameters(template.Parameters, out) + out.Write([]byte("\n")) + formatString(out, "Object Labels", formatLabels(template.ObjectLabels)) + out.Write([]byte("\n")) + d.DescribeMessage(template.Message, out) + out.Write([]byte("\n")) + out.Flush() + d.describeObjects(template.Objects, out) + return nil + }) +} + +// IdentityDescriber generates information about a user +type IdentityDescriber struct { + client.Interface +} + +// Describe returns the description of an identity +func (d *IdentityDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + userClient := d.Users() + identityClient := d.Identities() + + identity, err := identityClient.Get(name) + if err != nil { + return "", err + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, identity.ObjectMeta) + + if len(identity.User.Name) == 0 { + formatString(out, "User Name", identity.User.Name) + formatString(out, "User UID", identity.User.UID) + } else { + resolvedUser, err := userClient.Get(identity.User.Name) + + nameValue := identity.User.Name + uidValue := string(identity.User.UID) + + if kerrs.IsNotFound(err) { + nameValue += fmt.Sprintf(" (Error: User does not exist)") + } else if err != nil { + nameValue += fmt.Sprintf(" (Error: User lookup failed)") + } else { + if !sets.NewString(resolvedUser.Identities...).Has(name) { + nameValue += fmt.Sprintf(" (Error: User identities do not include %s)", name) + } + if resolvedUser.UID != identity.User.UID { + uidValue += fmt.Sprintf(" (Error: Actual user UID is %s)", string(resolvedUser.UID)) + } + } + + formatString(out, "User Name", nameValue) + formatString(out, "User UID", uidValue) + } + return nil + }) + +} + +// UserIdentityMappingDescriber generates information about a user +type UserIdentityMappingDescriber struct { + client.Interface +} + +// Describe returns the description of a userIdentity +func (d *UserIdentityMappingDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.UserIdentityMappings() + + mapping, err := c.Get(name) + if err != nil { + return "", err + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, mapping.ObjectMeta) + formatString(out, "Identity", mapping.Identity.Name) + formatString(out, "User Name", mapping.User.Name) + formatString(out, "User UID", mapping.User.UID) + return nil + }) +} + +// UserDescriber generates information about a user +type UserDescriber struct { + client.Interface +} + +// Describe returns the description of a user +func (d *UserDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + userClient := d.Users() + identityClient := d.Identities() + + user, err := userClient.Get(name) + if err != nil { + return "", err + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, user.ObjectMeta) + if len(user.FullName) > 0 { + formatString(out, "Full Name", user.FullName) + } + + if len(user.Identities) == 0 { + formatString(out, "Identities", "") + } else { + for i, identity := range user.Identities { + resolvedIdentity, err := identityClient.Get(identity) + + value := identity + if kerrs.IsNotFound(err) { + value += fmt.Sprintf(" (Error: Identity does not exist)") + } else if err != nil { + value += fmt.Sprintf(" (Error: Identity lookup failed)") + } else if resolvedIdentity.User.Name != name { + value += fmt.Sprintf(" (Error: Identity maps to user name '%s')", resolvedIdentity.User.Name) + } else if resolvedIdentity.User.UID != user.UID { + value += fmt.Sprintf(" (Error: Identity maps to user UID '%s')", resolvedIdentity.User.UID) + } + + if i == 0 { + formatString(out, "Identities", value) + } else { + fmt.Fprintf(out, " \t%s\n", value) + } + } + } + return nil + }) +} + +// GroupDescriber generates information about a group +type GroupDescriber struct { + c client.GroupInterface +} + +// Describe returns the description of a group +func (d *GroupDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + group, err := d.c.Get(name) + if err != nil { + return "", err + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, group.ObjectMeta) + + if len(group.Users) == 0 { + formatString(out, "Users", "") + } else { + for i, user := range group.Users { + if i == 0 { + formatString(out, "Users", user) + } else { + fmt.Fprintf(out, " \t%s\n", user) + } + } + } + return nil + }) +} + +// policy describers + +// PolicyDescriber generates information about a Project +type PolicyDescriber struct { + client.Interface +} + +// Describe returns the description of a policy +// TODO make something a lot prettier +func (d *PolicyDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.Policies(namespace) + policy, err := c.Get(name) + if err != nil { + return "", err + } + + return DescribePolicy(policy) +} + +func DescribePolicy(policy *authorizationapi.Policy) (string, error) { + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, policy.ObjectMeta) + formatString(out, "Last Modified", policy.LastModified) + + // using .List() here because I always want the sorted order that it provides + for _, key := range sets.StringKeySet(policy.Roles).List() { + role := policy.Roles[key] + fmt.Fprint(out, key+"\t"+PolicyRuleHeadings+"\n") + for _, rule := range role.Rules { + DescribePolicyRule(out, rule, "\t") + } + } + + return nil + }) +} + +const PolicyRuleHeadings = "Verbs\tNon-Resource URLs\tExtension\tResource Names\tAPI Groups\tResources" + +func DescribePolicyRule(out *tabwriter.Writer, rule authorizationapi.PolicyRule, indent string) { + extensionString := "" + if rule.AttributeRestrictions != nil { + extensionString = fmt.Sprintf("%#v", rule.AttributeRestrictions) + + buffer := new(bytes.Buffer) + + printer := NewHumanReadablePrinter(kctl.PrintOptions{NoHeaders: true}) + if err := printer.PrintObj(rule.AttributeRestrictions, buffer); err == nil { + extensionString = strings.TrimSpace(buffer.String()) + } + } + + fmt.Fprintf(out, indent+"%v\t%v\t%v\t%v\t%v\t%v\n", + rule.Verbs.List(), + rule.NonResourceURLs.List(), + extensionString, + rule.ResourceNames.List(), + rule.APIGroups, + rule.Resources.List(), + ) +} + +// RoleDescriber generates information about a Project +type RoleDescriber struct { + client.Interface +} + +// Describe returns the description of a role +func (d *RoleDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.Roles(namespace) + role, err := c.Get(name) + if err != nil { + return "", err + } + + return DescribeRole(role) +} + +func DescribeRole(role *authorizationapi.Role) (string, error) { + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, role.ObjectMeta) + + fmt.Fprint(out, PolicyRuleHeadings+"\n") + for _, rule := range role.Rules { + DescribePolicyRule(out, rule, "") + + } + + return nil + }) +} + +// PolicyBindingDescriber generates information about a Project +type PolicyBindingDescriber struct { + client.Interface +} + +// Describe returns the description of a policyBinding +func (d *PolicyBindingDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.PolicyBindings(namespace) + policyBinding, err := c.Get(name) + if err != nil { + return "", err + } + + return DescribePolicyBinding(policyBinding) +} + +func DescribePolicyBinding(policyBinding *authorizationapi.PolicyBinding) (string, error) { + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, policyBinding.ObjectMeta) + formatString(out, "Last Modified", policyBinding.LastModified) + formatString(out, "Policy", policyBinding.PolicyRef.Namespace) + + // using .List() here because I always want the sorted order that it provides + for _, key := range sets.StringKeySet(policyBinding.RoleBindings).List() { + roleBinding := policyBinding.RoleBindings[key] + users, groups, sas, others := authorizationapi.SubjectsStrings(roleBinding.Namespace, roleBinding.Subjects) + + formatString(out, "RoleBinding["+key+"]", " ") + formatString(out, "\tRole", roleBinding.RoleRef.Name) + formatString(out, "\tUsers", strings.Join(users, ", ")) + formatString(out, "\tGroups", strings.Join(groups, ", ")) + formatString(out, "\tServiceAccounts", strings.Join(sas, ", ")) + formatString(out, "\tSubjects", strings.Join(others, ", ")) + } + + return nil + }) +} + +// RoleBindingDescriber generates information about a Project +type RoleBindingDescriber struct { + client.Interface +} + +// Describe returns the description of a roleBinding +func (d *RoleBindingDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.RoleBindings(namespace) + roleBinding, err := c.Get(name) + if err != nil { + return "", err + } + + var role *authorizationapi.Role + if len(roleBinding.RoleRef.Namespace) == 0 { + var clusterRole *authorizationapi.ClusterRole + clusterRole, err = d.ClusterRoles().Get(roleBinding.RoleRef.Name) + role = authorizationapi.ToRole(clusterRole) + } else { + role, err = d.Roles(roleBinding.RoleRef.Namespace).Get(roleBinding.RoleRef.Name) + } + + return DescribeRoleBinding(roleBinding, role, err) +} + +// DescribeRoleBinding prints out information about a role binding and its associated role +func DescribeRoleBinding(roleBinding *authorizationapi.RoleBinding, role *authorizationapi.Role, err error) (string, error) { + users, groups, sas, others := authorizationapi.SubjectsStrings(roleBinding.Namespace, roleBinding.Subjects) + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, roleBinding.ObjectMeta) + + formatString(out, "Role", roleBinding.RoleRef.Namespace+"/"+roleBinding.RoleRef.Name) + formatString(out, "Users", strings.Join(users, ", ")) + formatString(out, "Groups", strings.Join(groups, ", ")) + formatString(out, "ServiceAccounts", strings.Join(sas, ", ")) + formatString(out, "Subjects", strings.Join(others, ", ")) + + switch { + case err != nil: + formatString(out, "Policy Rules", fmt.Sprintf("error: %v", err)) + + case role != nil: + fmt.Fprint(out, PolicyRuleHeadings+"\n") + for _, rule := range role.Rules { + DescribePolicyRule(out, rule, "") + } + + default: + formatString(out, "Policy Rules", "") + } + + return nil + }) +} + +// ClusterPolicyDescriber generates information about a Project +type ClusterPolicyDescriber struct { + client.Interface +} + +// Describe returns the description of a policy +// TODO make something a lot prettier +func (d *ClusterPolicyDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.ClusterPolicies() + policy, err := c.Get(name) + if err != nil { + return "", err + } + + return DescribePolicy(authorizationapi.ToPolicy(policy)) +} + +type ClusterRoleDescriber struct { + client.Interface +} + +// Describe returns the description of a role +func (d *ClusterRoleDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.ClusterRoles() + role, err := c.Get(name) + if err != nil { + return "", err + } + + return DescribeRole(authorizationapi.ToRole(role)) +} + +// ClusterPolicyBindingDescriber generates information about a Project +type ClusterPolicyBindingDescriber struct { + client.Interface +} + +// Describe returns the description of a policyBinding +func (d *ClusterPolicyBindingDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.ClusterPolicyBindings() + policyBinding, err := c.Get(name) + if err != nil { + return "", err + } + + return DescribePolicyBinding(authorizationapi.ToPolicyBinding(policyBinding)) +} + +// ClusterRoleBindingDescriber generates information about a Project +type ClusterRoleBindingDescriber struct { + client.Interface +} + +// Describe returns the description of a roleBinding +func (d *ClusterRoleBindingDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.ClusterRoleBindings() + roleBinding, err := c.Get(name) + if err != nil { + return "", err + } + + role, err := d.ClusterRoles().Get(roleBinding.RoleRef.Name) + return DescribeRoleBinding(authorizationapi.ToRoleBinding(roleBinding), authorizationapi.ToRole(role), err) +} + +func describeBuildTriggerCauses(causes []buildapi.BuildTriggerCause, out *tabwriter.Writer) { + if causes == nil { + formatString(out, "\nBuild trigger cause", "") + } + + for _, cause := range causes { + formatString(out, "\nBuild trigger cause", cause.Message) + + switch { + case cause.GitHubWebHook != nil: + squashGitInfo(cause.GitHubWebHook.Revision, out) + formatString(out, "Secret", cause.GitHubWebHook.Secret) + + case cause.GenericWebHook != nil: + squashGitInfo(cause.GenericWebHook.Revision, out) + formatString(out, "Secret", cause.GenericWebHook.Secret) + + case cause.ImageChangeBuild != nil: + formatString(out, "Image ID", cause.ImageChangeBuild.ImageID) + formatString(out, "Image Name/Kind", fmt.Sprintf("%s / %s", cause.ImageChangeBuild.FromRef.Name, cause.ImageChangeBuild.FromRef.Kind)) + } + } + fmt.Fprintf(out, "\n") +} + +func squashGitInfo(sourceRevision *buildapi.SourceRevision, out *tabwriter.Writer) { + if sourceRevision != nil && sourceRevision.Git != nil { + rev := sourceRevision.Git + var commit string + if len(rev.Commit) > 7 { + commit = rev.Commit[:7] + } else { + commit = rev.Commit + } + formatString(out, "Commit", fmt.Sprintf("%s (%s)", commit, rev.Message)) + hasAuthor := len(rev.Author.Name) != 0 + hasCommitter := len(rev.Committer.Name) != 0 + if hasAuthor && hasCommitter { + if rev.Author.Name == rev.Committer.Name { + formatString(out, "Author/Committer", rev.Author.Name) + } else { + formatString(out, "Author/Committer", fmt.Sprintf("%s / %s", rev.Author.Name, rev.Committer.Name)) + } + } else if hasAuthor { + formatString(out, "Author", rev.Author.Name) + } else if hasCommitter { + formatString(out, "Committer", rev.Committer.Name) + } + } +} + +type ClusterQuotaDescriber struct { + client.Interface +} + +func (d *ClusterQuotaDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + quota, err := d.ClusterResourceQuotas().Get(name) + if err != nil { + return "", err + } + return DescribeClusterQuota(quota) +} + +func DescribeClusterQuota(quota *quotaapi.ClusterResourceQuota) (string, error) { + labelSelector, err := unversioned.LabelSelectorAsSelector(quota.Spec.Selector.LabelSelector) + if err != nil { + return "", err + } + + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, quota.ObjectMeta) + fmt.Fprintf(out, "Label Selector: %s\n", labelSelector) + fmt.Fprintf(out, "AnnotationSelector: %s\n", quota.Spec.Selector.AnnotationSelector) + if len(quota.Spec.Quota.Scopes) > 0 { + scopes := []string{} + for _, scope := range quota.Spec.Quota.Scopes { + scopes = append(scopes, string(scope)) + } + sort.Strings(scopes) + fmt.Fprintf(out, "Scopes:\t%s\n", strings.Join(scopes, ", ")) + } + fmt.Fprintf(out, "Resource\tUsed\tHard\n") + fmt.Fprintf(out, "--------\t----\t----\n") + + resources := []kapi.ResourceName{} + for resource := range quota.Status.Total.Hard { + resources = append(resources, resource) + } + sort.Sort(kctl.SortableResourceNames(resources)) + + msg := "%v\t%v\t%v\n" + for i := range resources { + resource := resources[i] + hardQuantity := quota.Status.Total.Hard[resource] + usedQuantity := quota.Status.Total.Used[resource] + fmt.Fprintf(out, msg, resource, usedQuantity.String(), hardQuantity.String()) + } + return nil + }) +} + +type AppliedClusterQuotaDescriber struct { + client.Interface +} + +func (d *AppliedClusterQuotaDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + quota, err := d.AppliedClusterResourceQuotas(namespace).Get(name) + if err != nil { + return "", err + } + return DescribeClusterQuota(quotaapi.ConvertAppliedClusterResourceQuotaToClusterResourceQuota(quota)) +} + +type ClusterNetworkDescriber struct { + client.Interface +} + +// Describe returns the description of a ClusterNetwork +func (d *ClusterNetworkDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + cn, err := d.ClusterNetwork().Get(name) + if err != nil { + return "", err + } + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, cn.ObjectMeta) + formatString(out, "Cluster Network", cn.Network) + formatString(out, "Host Subnet Length", cn.HostSubnetLength) + formatString(out, "Service Network", cn.ServiceNetwork) + formatString(out, "Plugin Name", cn.PluginName) + return nil + }) +} + +type HostSubnetDescriber struct { + client.Interface +} + +// Describe returns the description of a HostSubnet +func (d *HostSubnetDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + hs, err := d.HostSubnets().Get(name) + if err != nil { + return "", err + } + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, hs.ObjectMeta) + formatString(out, "Node", hs.Host) + formatString(out, "Node IP", hs.HostIP) + formatString(out, "Pod Subnet", hs.Subnet) + return nil + }) +} + +type NetNamespaceDescriber struct { + client.Interface +} + +// Describe returns the description of a NetNamespace +func (d *NetNamespaceDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + netns, err := d.NetNamespaces().Get(name) + if err != nil { + return "", err + } + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, netns.ObjectMeta) + formatString(out, "Name", netns.NetName) + formatString(out, "ID", netns.NetID) + return nil + }) +} + +type EgressNetworkPolicyDescriber struct { + osClient client.Interface +} + +// Describe returns the description of an EgressNetworkPolicy +func (d *EgressNetworkPolicyDescriber) Describe(namespace, name string, settings kctl.DescriberSettings) (string, error) { + c := d.osClient.EgressNetworkPolicies(namespace) + policy, err := c.Get(name) + if err != nil { + return "", err + } + return tabbedString(func(out *tabwriter.Writer) error { + formatMeta(out, policy.ObjectMeta) + for _, rule := range policy.Spec.Egress { + fmt.Fprintf(out, "Rule:\t%s to %s\n", rule.Type, rule.To.CIDRSelector) + } + return nil + }) +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/helpers.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/helpers.go new file mode 100644 index 00000000..9f34aeef --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/helpers.go @@ -0,0 +1,427 @@ +package describe + +import ( + "bytes" + "fmt" + "regexp" + "strings" + "text/tabwriter" + "time" + + units "github.com/docker/go-units" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/util/sets" + + buildapi "github.com/openshift/origin/pkg/build/api" + "github.com/openshift/origin/pkg/client" + imageapi "github.com/openshift/origin/pkg/image/api" +) + +const emptyString = "" + +func tabbedString(f func(*tabwriter.Writer) error) (string, error) { + out := new(tabwriter.Writer) + buf := &bytes.Buffer{} + out.Init(buf, 0, 8, 1, '\t', 0) + + err := f(out) + if err != nil { + return "", err + } + + out.Flush() + str := string(buf.String()) + return str, nil +} + +func toString(v interface{}) string { + value := fmt.Sprintf("%v", v) + if len(value) == 0 { + value = emptyString + } + return value +} + +func bold(v interface{}) string { + return "\033[1m" + toString(v) + "\033[0m" +} + +func convertEnv(env []api.EnvVar) map[string]string { + result := make(map[string]string, len(env)) + for _, e := range env { + result[e.Name] = toString(e.Value) + } + return result +} + +func formatEnv(env api.EnvVar) string { + if env.ValueFrom != nil && env.ValueFrom.FieldRef != nil { + return fmt.Sprintf("%s=<%s>", env.Name, env.ValueFrom.FieldRef.FieldPath) + } + return fmt.Sprintf("%s=%s", env.Name, env.Value) +} + +func formatString(out *tabwriter.Writer, label string, v interface{}) { + fmt.Fprintf(out, fmt.Sprintf("%s:\t%s\n", label, toString(v))) +} + +func formatTime(out *tabwriter.Writer, label string, t time.Time) { + fmt.Fprintf(out, fmt.Sprintf("%s:\t%s ago\n", label, formatRelativeTime(t))) +} + +func formatLabels(labelMap map[string]string) string { + return labels.Set(labelMap).String() +} + +func extractAnnotations(annotations map[string]string, keys ...string) ([]string, map[string]string) { + extracted := make([]string, len(keys)) + remaining := make(map[string]string) + for k, v := range annotations { + remaining[k] = v + } + for i, key := range keys { + extracted[i] = remaining[key] + delete(remaining, key) + } + return extracted, remaining +} + +func formatMapStringString(out *tabwriter.Writer, label string, items map[string]string) { + keys := sets.NewString() + for k := range items { + keys.Insert(k) + } + if keys.Len() == 0 { + formatString(out, label, "") + return + } + for i, key := range keys.List() { + if i == 0 { + formatString(out, label, fmt.Sprintf("%s=%s", key, items[key])) + } else { + fmt.Fprintf(out, "%s\t%s=%s\n", "", key, items[key]) + } + } +} + +func formatAnnotations(out *tabwriter.Writer, m api.ObjectMeta, prefix string) { + values, annotations := extractAnnotations(m.Annotations, "description") + if len(values[0]) > 0 { + formatString(out, prefix+"Description", values[0]) + } + formatMapStringString(out, prefix+"Annotations", annotations) +} + +var timeNowFn = func() time.Time { + return time.Now() +} + +// Receives a time.Duration and returns Docker go-utils' +// human-readable output +func formatToHumanDuration(dur time.Duration) string { + return units.HumanDuration(dur) +} + +func formatRelativeTime(t time.Time) string { + return units.HumanDuration(timeNowFn().Sub(t)) +} + +// FormatRelativeTime converts a time field into a human readable age string (hours, minutes, days). +func FormatRelativeTime(t time.Time) string { + return formatRelativeTime(t) +} + +func formatMeta(out *tabwriter.Writer, m api.ObjectMeta) { + formatString(out, "Name", m.Name) + formatString(out, "Namespace", m.Namespace) + if !m.CreationTimestamp.IsZero() { + formatTime(out, "Created", m.CreationTimestamp.Time) + } + formatMapStringString(out, "Labels", m.Labels) + formatAnnotations(out, m, "") +} + +// DescribeWebhook holds the URL information about a webhook and for generic +// webhooks it tells us if we allow env variables. +type DescribeWebhook struct { + URL string + AllowEnv *bool +} + +// webhookDescribe returns a map of webhook trigger types and its corresponding +// information. +func webHooksDescribe(triggers []buildapi.BuildTriggerPolicy, name, namespace string, cli client.BuildConfigsNamespacer) map[string][]DescribeWebhook { + result := map[string][]DescribeWebhook{} + + for _, trigger := range triggers { + var webHookTrigger string + var allowEnv *bool + + switch trigger.Type { + case buildapi.GitHubWebHookBuildTriggerType: + webHookTrigger = trigger.GitHubWebHook.Secret + + case buildapi.GenericWebHookBuildTriggerType: + webHookTrigger = trigger.GenericWebHook.Secret + allowEnv = &trigger.GenericWebHook.AllowEnv + + default: + continue + } + webHookDesc := result[string(trigger.Type)] + + if len(webHookTrigger) == 0 { + continue + } + + var urlStr string + url, err := cli.BuildConfigs(namespace).WebHookURL(name, &trigger) + if err != nil { + urlStr = fmt.Sprintf("", err.Error()) + } else { + urlStr = url.String() + } + + webHookDesc = append(webHookDesc, + DescribeWebhook{ + URL: urlStr, + AllowEnv: allowEnv, + }) + result[string(trigger.Type)] = webHookDesc + } + + return result +} + +var reLongImageID = regexp.MustCompile(`[a-f0-9]{60,}$`) + +// shortenImagePullSpec returns a version of the pull spec intended for +// display, which may result in the image not being usable via cut-and-paste +// for users. +func shortenImagePullSpec(spec string) string { + if reLongImageID.MatchString(spec) { + return spec[:len(spec)-50] + } + return spec +} + +func formatImageStreamTags(out *tabwriter.Writer, stream *imageapi.ImageStream) { + if len(stream.Status.Tags) == 0 && len(stream.Spec.Tags) == 0 { + fmt.Fprintf(out, "Tags:\t\n") + return + } + + now := timeNowFn() + + images := make(map[string]string) + for tag, tags := range stream.Status.Tags { + for _, item := range tags.Items { + switch { + case len(item.Image) > 0: + if _, ok := images[item.Image]; !ok { + images[item.Image] = tag + } + case len(item.DockerImageReference) > 0: + if _, ok := images[item.DockerImageReference]; !ok { + images[item.Image] = item.DockerImageReference + } + } + } + } + + sortedTags := []string{} + for k := range stream.Status.Tags { + sortedTags = append(sortedTags, k) + } + var localReferences sets.String + var referentialTags map[string]sets.String + for k := range stream.Spec.Tags { + if target, _, ok, multiple := imageapi.FollowTagReference(stream, k); ok && multiple { + if referentialTags == nil { + referentialTags = make(map[string]sets.String) + } + if localReferences == nil { + localReferences = sets.NewString() + } + localReferences.Insert(k) + v := referentialTags[target] + if v == nil { + v = sets.NewString() + referentialTags[target] = v + } + v.Insert(k) + } + if _, ok := stream.Status.Tags[k]; !ok { + sortedTags = append(sortedTags, k) + } + } + fmt.Fprintf(out, "Unique Images:\t%d\nTags:\t%d\n\n", len(images), len(sortedTags)) + + first := true + imageapi.PrioritizeTags(sortedTags) + for _, tag := range sortedTags { + if localReferences.Has(tag) { + continue + } + if first { + first = false + } else { + fmt.Fprintf(out, "\n") + } + taglist, _ := stream.Status.Tags[tag] + tagRef, hasSpecTag := stream.Spec.Tags[tag] + scheduled := false + insecure := false + importing := false + + var name string + if hasSpecTag && tagRef.From != nil { + if len(tagRef.From.Namespace) > 0 && tagRef.From.Namespace != stream.Namespace { + name = fmt.Sprintf("%s/%s", tagRef.From.Namespace, tagRef.From.Name) + } else { + name = tagRef.From.Name + } + scheduled, insecure = tagRef.ImportPolicy.Scheduled, tagRef.ImportPolicy.Insecure + gen := imageapi.LatestObservedTagGeneration(stream, tag) + importing = !tagRef.Reference && tagRef.Generation != nil && *tagRef.Generation != gen + } + + // updates whenever tag :5.2 is changed + + // :latest (30 minutes ago) -> 102.205.358.453/foo/bar@sha256:abcde734 + // error: last import failed 20 minutes ago + // updates automatically from index.docker.io/mysql/bar + // will use insecure HTTPS connections or HTTP + // + // MySQL 5.5 + // --------- + // Describes a system for updating based on practical changes to a database system + // with some other data involved + // + // 20 minutes ago + // Failed to locate the server in time + // 30 minutes ago 102.205.358.453/foo/bar@sha256:abcdef + // 1 hour ago 102.205.358.453/foo/bar@sha256:bfedfc + + //var shortErrors []string + /* + var internalReference *imageapi.DockerImageReference + if value := stream.Status.DockerImageRepository; len(value) > 0 { + ref, err := imageapi.ParseDockerImageReference(value) + if err != nil { + internalReference = &ref + } + } + */ + + if referentialTags[tag].Len() > 0 { + references := referentialTags[tag].List() + imageapi.PrioritizeTags(references) + fmt.Fprintf(out, "%s (%s)\n", tag, strings.Join(references, ", ")) + } else { + fmt.Fprintf(out, "%s\n", tag) + } + + switch { + case !hasSpecTag || tagRef.From == nil: + fmt.Fprintf(out, " pushed image\n") + case tagRef.From.Kind == "ImageStreamTag": + switch { + case tagRef.Reference: + fmt.Fprintf(out, " reference to %s\n", name) + case scheduled: + fmt.Fprintf(out, " updates automatically from %s\n", name) + default: + fmt.Fprintf(out, " tagged from %s\n", name) + } + case tagRef.From.Kind == "DockerImage": + switch { + case tagRef.Reference: + fmt.Fprintf(out, " reference to registry %s\n", name) + case scheduled: + fmt.Fprintf(out, " updates automatically from registry %s\n", name) + default: + fmt.Fprintf(out, " tagged from %s\n", name) + } + case tagRef.From.Kind == "ImageStreamImage": + switch { + case tagRef.Reference: + fmt.Fprintf(out, " reference to image %s\n", name) + default: + fmt.Fprintf(out, " tagged from %s\n", name) + } + default: + switch { + case tagRef.Reference: + fmt.Fprintf(out, " reference to %s %s\n", tagRef.From.Kind, name) + default: + fmt.Fprintf(out, " updates from %s %s\n", tagRef.From.Kind, name) + } + } + if insecure { + fmt.Fprintf(out, " will use insecure HTTPS or HTTP connections\n") + } + + fmt.Fprintln(out) + + extraOutput := false + if d := tagRef.Annotations["description"]; len(d) > 0 { + fmt.Fprintf(out, " %s\n", d) + extraOutput = true + } + if t := tagRef.Annotations["tags"]; len(t) > 0 { + fmt.Fprintf(out, " Tags: %s\n", strings.Join(strings.Split(t, ","), ", ")) + extraOutput = true + } + if t := tagRef.Annotations["supports"]; len(t) > 0 { + fmt.Fprintf(out, " Supports: %s\n", strings.Join(strings.Split(t, ","), ", ")) + extraOutput = true + } + if t := tagRef.Annotations["sampleRepo"]; len(t) > 0 { + fmt.Fprintf(out, " Example Repo: %s\n", t) + extraOutput = true + } + if extraOutput { + fmt.Fprintln(out) + } + + if importing { + fmt.Fprintf(out, " ~ importing latest image ...\n") + } + + for i := range taglist.Conditions { + condition := &taglist.Conditions[i] + switch condition.Type { + case imageapi.ImportSuccess: + if condition.Status == api.ConditionFalse { + d := now.Sub(condition.LastTransitionTime.Time) + fmt.Fprintf(out, " ! error: Import failed (%s): %s\n %s ago\n", condition.Reason, condition.Message, units.HumanDuration(d)) + } + } + } + + if len(taglist.Items) == 0 { + continue + } + + for i, event := range taglist.Items { + d := now.Sub(event.Created.Time) + + if i == 0 { + fmt.Fprintf(out, " * %s\n", event.DockerImageReference) + } else { + fmt.Fprintf(out, " %s\n", event.DockerImageReference) + } + + ref, err := imageapi.ParseDockerImageReference(event.DockerImageReference) + id := event.Image + if len(id) > 0 && err == nil && ref.ID != id { + fmt.Fprintf(out, " %s ago\t%s\n", units.HumanDuration(d), id) + } else { + fmt.Fprintf(out, " %s ago\n", units.HumanDuration(d)) + } + } + } +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/printer.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/printer.go new file mode 100644 index 00000000..f47f63fd --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/printer.go @@ -0,0 +1,1057 @@ +package describe + +import ( + "fmt" + "io" + "regexp" + "sort" + "strings" + "text/tabwriter" + "time" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + kctl "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/util/sets" + + authorizationapi "github.com/openshift/origin/pkg/authorization/api" + buildapi "github.com/openshift/origin/pkg/build/api" + deployapi "github.com/openshift/origin/pkg/deploy/api" + imageapi "github.com/openshift/origin/pkg/image/api" + oauthapi "github.com/openshift/origin/pkg/oauth/api" + projectapi "github.com/openshift/origin/pkg/project/api" + quotaapi "github.com/openshift/origin/pkg/quota/api" + routeapi "github.com/openshift/origin/pkg/route/api" + sdnapi "github.com/openshift/origin/pkg/sdn/api" + templateapi "github.com/openshift/origin/pkg/template/api" + userapi "github.com/openshift/origin/pkg/user/api" +) + +var ( + buildColumns = []string{"NAME", "TYPE", "FROM", "STATUS", "STARTED", "DURATION"} + buildConfigColumns = []string{"NAME", "TYPE", "FROM", "LATEST"} + imageColumns = []string{"NAME", "DOCKER REF"} + imageStreamTagColumns = []string{"NAME", "DOCKER REF", "UPDATED", "IMAGENAME"} + imageStreamImageColumns = []string{"NAME", "DOCKER REF", "UPDATED", "IMAGENAME"} + imageStreamColumns = []string{"NAME", "DOCKER REPO", "TAGS", "UPDATED"} + projectColumns = []string{"NAME", "DISPLAY NAME", "STATUS"} + routeColumns = []string{"NAME", "HOST/PORT", "PATH", "SERVICES", "PORT", "TERMINATION"} + deploymentConfigColumns = []string{"NAME", "REVISION", "DESIRED", "CURRENT", "TRIGGERED BY"} + templateColumns = []string{"NAME", "DESCRIPTION", "PARAMETERS", "OBJECTS"} + policyColumns = []string{"NAME", "ROLES", "LAST MODIFIED"} + policyBindingColumns = []string{"NAME", "ROLE BINDINGS", "LAST MODIFIED"} + roleBindingColumns = []string{"NAME", "ROLE", "USERS", "GROUPS", "SERVICE ACCOUNTS", "SUBJECTS"} + roleColumns = []string{"NAME"} + + oauthClientColumns = []string{"NAME", "SECRET", "WWW-CHALLENGE", "REDIRECT URIS"} + oauthClientAuthorizationColumns = []string{"NAME", "USER NAME", "CLIENT NAME", "SCOPES"} + oauthAccessTokenColumns = []string{"NAME", "USER NAME", "CLIENT NAME", "CREATED", "EXPIRES", "REDIRECT URI", "SCOPES"} + oauthAuthorizeTokenColumns = []string{"NAME", "USER NAME", "CLIENT NAME", "CREATED", "EXPIRES", "REDIRECT URI", "SCOPES"} + + userColumns = []string{"NAME", "UID", "FULL NAME", "IDENTITIES"} + identityColumns = []string{"NAME", "IDP NAME", "IDP USER NAME", "USER NAME", "USER UID"} + userIdentityMappingColumns = []string{"NAME", "IDENTITY", "USER NAME", "USER UID"} + groupColumns = []string{"NAME", "USERS"} + + // IsPersonalSubjectAccessReviewColumns contains known custom role extensions + IsPersonalSubjectAccessReviewColumns = []string{"NAME"} + + hostSubnetColumns = []string{"NAME", "HOST", "HOST IP", "SUBNET"} + netNamespaceColumns = []string{"NAME", "NETID"} + clusterNetworkColumns = []string{"NAME", "NETWORK", "HOST SUBNET LENGTH", "SERVICE NETWORK", "PLUGIN NAME"} + egressNetworkPolicyColumns = []string{"NAME"} + + clusterResourceQuotaColumns = []string{"NAME", "LABEL SELECTOR", "ANNOTATION SELECTOR"} +) + +// NewHumanReadablePrinter returns a new HumanReadablePrinter +func NewHumanReadablePrinter(printOptions kctl.PrintOptions) *kctl.HumanReadablePrinter { + // TODO: support cross namespace listing + p := kctl.NewHumanReadablePrinter(printOptions) + p.Handler(buildColumns, printBuild) + p.Handler(buildColumns, printBuildList) + p.Handler(buildConfigColumns, printBuildConfig) + p.Handler(buildConfigColumns, printBuildConfigList) + p.Handler(imageColumns, printImage) + p.Handler(imageStreamTagColumns, printImageStreamTag) + p.Handler(imageStreamTagColumns, printImageStreamTagList) + p.Handler(imageStreamImageColumns, printImageStreamImage) + p.Handler(imageColumns, printImageList) + p.Handler(imageStreamColumns, printImageStream) + p.Handler(imageStreamColumns, printImageStreamList) + p.Handler(projectColumns, printProject) + p.Handler(projectColumns, printProjectList) + p.Handler(routeColumns, printRoute) + p.Handler(routeColumns, printRouteList) + p.Handler(deploymentConfigColumns, printDeploymentConfig) + p.Handler(deploymentConfigColumns, printDeploymentConfigList) + p.Handler(templateColumns, printTemplate) + p.Handler(templateColumns, printTemplateList) + + p.Handler(policyColumns, printPolicy) + p.Handler(policyColumns, printPolicyList) + p.Handler(policyBindingColumns, printPolicyBinding) + p.Handler(policyBindingColumns, printPolicyBindingList) + p.Handler(roleBindingColumns, printRoleBinding) + p.Handler(roleBindingColumns, printRoleBindingList) + p.Handler(roleColumns, printRole) + p.Handler(roleColumns, printRoleList) + + p.Handler(policyColumns, printClusterPolicy) + p.Handler(policyColumns, printClusterPolicyList) + p.Handler(policyBindingColumns, printClusterPolicyBinding) + p.Handler(policyBindingColumns, printClusterPolicyBindingList) + p.Handler(roleColumns, printClusterRole) + p.Handler(roleColumns, printClusterRoleList) + p.Handler(roleBindingColumns, printClusterRoleBinding) + p.Handler(roleBindingColumns, printClusterRoleBindingList) + + p.Handler(oauthClientColumns, printOAuthClient) + p.Handler(oauthClientColumns, printOAuthClientList) + p.Handler(oauthClientAuthorizationColumns, printOAuthClientAuthorization) + p.Handler(oauthClientAuthorizationColumns, printOAuthClientAuthorizationList) + p.Handler(oauthAccessTokenColumns, printOAuthAccessToken) + p.Handler(oauthAccessTokenColumns, printOAuthAccessTokenList) + p.Handler(oauthAuthorizeTokenColumns, printOAuthAuthorizeToken) + p.Handler(oauthAuthorizeTokenColumns, printOAuthAuthorizeTokenList) + + p.Handler(userColumns, printUser) + p.Handler(userColumns, printUserList) + p.Handler(identityColumns, printIdentity) + p.Handler(identityColumns, printIdentityList) + p.Handler(userIdentityMappingColumns, printUserIdentityMapping) + p.Handler(groupColumns, printGroup) + p.Handler(groupColumns, printGroupList) + + p.Handler(IsPersonalSubjectAccessReviewColumns, printIsPersonalSubjectAccessReview) + + p.Handler(hostSubnetColumns, printHostSubnet) + p.Handler(hostSubnetColumns, printHostSubnetList) + p.Handler(netNamespaceColumns, printNetNamespaceList) + p.Handler(netNamespaceColumns, printNetNamespace) + p.Handler(clusterNetworkColumns, printClusterNetwork) + p.Handler(clusterNetworkColumns, printClusterNetworkList) + p.Handler(egressNetworkPolicyColumns, printEgressNetworkPolicy) + p.Handler(egressNetworkPolicyColumns, printEgressNetworkPolicyList) + + p.Handler(clusterResourceQuotaColumns, printClusterResourceQuota) + p.Handler(clusterResourceQuotaColumns, printClusterResourceQuotaList) + p.Handler(clusterResourceQuotaColumns, printAppliedClusterResourceQuota) + p.Handler(clusterResourceQuotaColumns, printAppliedClusterResourceQuotaList) + + return p +} + +const templateDescriptionLen = 80 + +// PrintTemplateParameters the Template parameters with their default values +func PrintTemplateParameters(params []templateapi.Parameter, output io.Writer) error { + w := tabwriter.NewWriter(output, 20, 5, 3, ' ', 0) + defer w.Flush() + parameterColumns := []string{"NAME", "DESCRIPTION", "GENERATOR", "VALUE"} + fmt.Fprintf(w, "%s\n", strings.Join(parameterColumns, "\t")) + for _, p := range params { + value := p.Value + if len(p.Generate) != 0 { + value = p.From + } + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", p.Name, p.Description, p.Generate, value) + if err != nil { + return err + } + } + return nil +} + +// formatResourceName receives a resource kind, name, and boolean specifying +// whether or not to update the current name to "kind/name" +func formatResourceName(kind, name string, withKind bool) string { + if !withKind || kind == "" { + return name + } + + return kind + "/" + name +} + +func printTemplate(t *templateapi.Template, w io.Writer, opts kctl.PrintOptions) error { + description := "" + if t.Annotations != nil { + description = t.Annotations["description"] + } + if len(description) > templateDescriptionLen { + description = strings.TrimSpace(description[:templateDescriptionLen-3]) + "..." + } + empty, generated, total := 0, 0, len(t.Parameters) + for _, p := range t.Parameters { + if len(p.Value) > 0 { + continue + } + if len(p.Generate) > 0 { + generated++ + continue + } + empty++ + } + params := "" + switch { + case empty > 0: + params = fmt.Sprintf("%d (%d blank)", total, empty) + case generated > 0: + params = fmt.Sprintf("%d (%d generated)", total, generated) + default: + params = fmt.Sprintf("%d (all set)", total) + } + + name := formatResourceName(opts.Kind, t.Name, opts.WithKind) + + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", t.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%d", name, description, params, len(t.Objects)); err != nil { + return err + } + if err := appendItemLabels(t.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printTemplateList(list *templateapi.TemplateList, w io.Writer, opts kctl.PrintOptions) error { + for _, t := range list.Items { + if err := printTemplate(&t, w, opts); err != nil { + return err + } + } + return nil +} + +func printBuild(build *buildapi.Build, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, build.Name, opts.WithKind) + + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", build.Namespace); err != nil { + return err + } + } + var created string + if build.Status.StartTimestamp != nil { + created = fmt.Sprintf("%s ago", formatRelativeTime(build.Status.StartTimestamp.Time)) + } + var duration string + if build.Status.Duration > 0 { + duration = build.Status.Duration.String() + } + from := describeSourceShort(build.Spec.CommonSpec) + status := string(build.Status.Phase) + if len(build.Status.Reason) > 0 { + status = fmt.Sprintf("%s (%s)", status, build.Status.Reason) + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s", name, buildapi.StrategyType(build.Spec.Strategy), from, status, created, duration); err != nil { + return err + } + if err := appendItemLabels(build.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func describeSourceShort(spec buildapi.CommonSpec) string { + var from string + switch source := spec.Source; { + case source.Binary != nil: + from = "Binary" + if rev := describeSourceGitRevision(spec); len(rev) != 0 { + from = fmt.Sprintf("%s@%s", from, rev) + } + case source.Dockerfile != nil && source.Git != nil: + from = "Dockerfile,Git" + if rev := describeSourceGitRevision(spec); len(rev) != 0 { + from = fmt.Sprintf("%s@%s", from, rev) + } + case source.Dockerfile != nil: + from = "Dockerfile" + case source.Git != nil: + from = "Git" + if rev := describeSourceGitRevision(spec); len(rev) != 0 { + from = fmt.Sprintf("%s@%s", from, rev) + } + default: + from = buildapi.SourceType(source) + } + return from +} + +var nonCommitRev = regexp.MustCompile("[^a-fA-F0-9]") + +func describeSourceGitRevision(spec buildapi.CommonSpec) string { + var rev string + if spec.Revision != nil && spec.Revision.Git != nil { + rev = spec.Revision.Git.Commit + } + if len(rev) == 0 && spec.Source.Git != nil { + rev = spec.Source.Git.Ref + } + // if this appears to be a full Git commit hash, shorten it to 7 characters for brevity + if !nonCommitRev.MatchString(rev) && len(rev) > 20 { + rev = rev[:7] + } + return rev +} + +func printBuildList(buildList *buildapi.BuildList, w io.Writer, opts kctl.PrintOptions) error { + builds := buildList.Items + sort.Sort(buildapi.BuildSliceByCreationTimestamp(builds)) + for _, build := range builds { + if err := printBuild(&build, w, opts); err != nil { + return err + } + } + return nil +} + +func printBuildConfig(bc *buildapi.BuildConfig, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, bc.Name, opts.WithKind) + from := describeSourceShort(bc.Spec.CommonSpec) + + if bc.Spec.Strategy.CustomStrategy != nil { + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", bc.Namespace); err != nil { + return err + } + } + _, err := fmt.Fprintf(w, "%s\t%v\t%s\t%d\n", name, buildapi.StrategyType(bc.Spec.Strategy), bc.Spec.Strategy.CustomStrategy.From.Name, bc.Status.LastVersion) + return err + } + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", bc.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s\t%v\t%s\t%d", name, buildapi.StrategyType(bc.Spec.Strategy), from, bc.Status.LastVersion); err != nil { + return err + } + if err := appendItemLabels(bc.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printBuildConfigList(buildList *buildapi.BuildConfigList, w io.Writer, opts kctl.PrintOptions) error { + for _, buildConfig := range buildList.Items { + if err := printBuildConfig(&buildConfig, w, opts); err != nil { + return err + } + } + return nil +} + +func printImage(image *imageapi.Image, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, image.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\n", name, image.DockerImageReference) + return err +} + +func printImageStreamTag(ist *imageapi.ImageStreamTag, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, ist.Name, opts.WithKind) + created := fmt.Sprintf("%s ago", formatRelativeTime(ist.CreationTimestamp.Time)) + + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", ist.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s", name, ist.Image.DockerImageReference, created, ist.Image.Name); err != nil { + return err + } + if err := appendItemLabels(ist.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printImageStreamTagList(list *imageapi.ImageStreamTagList, w io.Writer, opts kctl.PrintOptions) error { + for _, ist := range list.Items { + if err := printImageStreamTag(&ist, w, opts); err != nil { + return err + } + } + return nil +} + +func printImageStreamImage(isi *imageapi.ImageStreamImage, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, isi.Name, opts.WithKind) + created := fmt.Sprintf("%s ago", formatRelativeTime(isi.CreationTimestamp.Time)) + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", isi.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s", name, isi.Image.DockerImageReference, created, isi.Image.Name); err != nil { + return err + } + if err := appendItemLabels(isi.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printImageList(images *imageapi.ImageList, w io.Writer, opts kctl.PrintOptions) error { + for _, image := range images.Items { + if err := printImage(&image, w, opts); err != nil { + return err + } + } + return nil +} + +func printImageStream(stream *imageapi.ImageStream, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, stream.Name, opts.WithKind) + tags := "" + const numOfTagsShown = 3 + + var latest unversioned.Time + for _, list := range stream.Status.Tags { + if len(list.Items) > 0 { + if list.Items[0].Created.After(latest.Time) { + latest = list.Items[0].Created + } + } + } + latestTime := "" + if !latest.IsZero() { + latestTime = fmt.Sprintf("%s ago", formatRelativeTime(latest.Time)) + } + list := imageapi.SortStatusTags(stream.Status.Tags) + more := false + if len(list) > numOfTagsShown { + list = list[:numOfTagsShown] + more = true + } + tags = strings.Join(list, ",") + if more { + tags = fmt.Sprintf("%s + %d more...", tags, len(stream.Status.Tags)-numOfTagsShown) + } + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", stream.Namespace); err != nil { + return err + } + } + repo := stream.Spec.DockerImageRepository + if len(repo) == 0 { + repo = stream.Status.DockerImageRepository + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s", name, repo, tags, latestTime); err != nil { + return err + } + if err := appendItemLabels(stream.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printImageStreamList(streams *imageapi.ImageStreamList, w io.Writer, opts kctl.PrintOptions) error { + for _, stream := range streams.Items { + if err := printImageStream(&stream, w, opts); err != nil { + return err + } + } + return nil +} + +func printProject(project *projectapi.Project, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, project.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\t%s", name, project.Annotations[projectapi.ProjectDisplayName], project.Status.Phase) + if err := appendItemLabels(project.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return err +} + +// SortableProjects is a list of projects that can be sorted +type SortableProjects []projectapi.Project + +func (list SortableProjects) Len() int { + return len(list) +} + +func (list SortableProjects) Swap(i, j int) { + list[i], list[j] = list[j], list[i] +} + +func (list SortableProjects) Less(i, j int) bool { + return list[i].ObjectMeta.Name < list[j].ObjectMeta.Name +} + +func printProjectList(projects *projectapi.ProjectList, w io.Writer, opts kctl.PrintOptions) error { + sort.Sort(SortableProjects(projects.Items)) + for _, project := range projects.Items { + if err := printProject(&project, w, opts); err != nil { + return err + } + } + return nil +} + +func printRoute(route *routeapi.Route, w io.Writer, opts kctl.PrintOptions) error { + tlsTerm := "" + insecurePolicy := "" + if route.Spec.TLS != nil { + tlsTerm = string(route.Spec.TLS.Termination) + insecurePolicy = string(route.Spec.TLS.InsecureEdgeTerminationPolicy) + } + + name := formatResourceName(opts.Kind, route.Name, opts.WithKind) + + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", route.Namespace); err != nil { + return err + } + } + var ( + matchedHost bool + reason string + host = route.Spec.Host + + admitted, errors = 0, 0 + ) + for _, ingress := range route.Status.Ingress { + switch status, condition := routeapi.IngressConditionStatus(&ingress, routeapi.RouteAdmitted); status { + case kapi.ConditionTrue: + admitted++ + if !matchedHost { + matchedHost = ingress.Host == route.Spec.Host + host = ingress.Host + } + case kapi.ConditionFalse: + reason = condition.Reason + errors++ + } + } + switch { + case route.Status.Ingress == nil: + // this is the legacy case, we should continue to show the host when talking to servers + // that have not set status ingress, since we can't distinguish this condition from there + // being no routers. + case admitted == 0 && errors > 0: + host = reason + case errors > 0: + host = fmt.Sprintf("%s ... %d rejected", host, errors) + case admitted == 0: + host = "Pending" + case admitted > 1: + host = fmt.Sprintf("%s ... %d more", host, admitted-1) + } + var policy string + switch { + case len(tlsTerm) != 0 && len(insecurePolicy) != 0: + policy = fmt.Sprintf("%s/%s", tlsTerm, insecurePolicy) + case len(tlsTerm) != 0: + policy = tlsTerm + case len(insecurePolicy) != 0: + policy = fmt.Sprintf("default/%s", insecurePolicy) + default: + policy = "" + } + + backends := append([]routeapi.RouteTargetReference{route.Spec.To}, route.Spec.AlternateBackends...) + totalWeight := int32(0) + for _, backend := range backends { + if backend.Weight != nil { + totalWeight += *backend.Weight + } + } + var backendInfo []string + for _, backend := range backends { + switch { + case backend.Weight == nil, len(backends) == 1 && totalWeight != 0: + backendInfo = append(backendInfo, backend.Name) + case totalWeight == 0: + backendInfo = append(backendInfo, fmt.Sprintf("%s(0%%)", backend.Name)) + default: + backendInfo = append(backendInfo, fmt.Sprintf("%s(%d%%)", backend.Name, *backend.Weight*100/totalWeight)) + } + } + + var port string + if route.Spec.Port != nil { + port = route.Spec.Port.TargetPort.String() + } else { + port = "" + } + + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\n", name, host, route.Spec.Path, strings.Join(backendInfo, ","), port, policy) + return err +} + +func printRouteList(routeList *routeapi.RouteList, w io.Writer, opts kctl.PrintOptions) error { + for _, route := range routeList.Items { + if err := printRoute(&route, w, opts); err != nil { + return err + } + } + return nil +} + +func printDeploymentConfig(dc *deployapi.DeploymentConfig, w io.Writer, opts kctl.PrintOptions) error { + var desired string + if dc.Spec.Test { + desired = fmt.Sprintf("%d (during test)", dc.Spec.Replicas) + } else { + desired = fmt.Sprintf("%d", dc.Spec.Replicas) + } + + containers := sets.NewString() + if dc.Spec.Template != nil { + for _, c := range dc.Spec.Template.Spec.Containers { + containers.Insert(c.Name) + } + } + //names := containers.List() + referencedContainers := sets.NewString() + + triggers := sets.String{} + for _, trigger := range dc.Spec.Triggers { + switch t := trigger.Type; t { + case deployapi.DeploymentTriggerOnConfigChange: + triggers.Insert("config") + case deployapi.DeploymentTriggerOnImageChange: + if p := trigger.ImageChangeParams; p != nil && p.Automatic { + var prefix string + if len(containers) != 1 && !containers.HasAll(p.ContainerNames...) { + sort.Sort(sort.StringSlice(p.ContainerNames)) + prefix = strings.Join(p.ContainerNames, ",") + ":" + } + referencedContainers.Insert(p.ContainerNames...) + switch p.From.Kind { + case "ImageStreamTag": + triggers.Insert(fmt.Sprintf("image(%s%s)", prefix, p.From.Name)) + default: + triggers.Insert(fmt.Sprintf("%s(%s%s)", p.From.Kind, prefix, p.From.Name)) + } + } + default: + triggers.Insert(string(t)) + } + } + + name := formatResourceName(opts.Kind, dc.Name, opts.WithKind) + trigger := strings.Join(triggers.List(), ",") + + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", dc.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s\t%d\t%s\t%d\t%s", name, dc.Status.LatestVersion, desired, dc.Status.UpdatedReplicas, trigger); err != nil { + return err + } + err := appendItemLabels(dc.Labels, w, opts.ColumnLabels, opts.ShowLabels) + return err +} + +func printDeploymentConfigList(list *deployapi.DeploymentConfigList, w io.Writer, opts kctl.PrintOptions) error { + for _, dc := range list.Items { + if err := printDeploymentConfig(&dc, w, opts); err != nil { + return err + } + } + return nil +} + +func printPolicy(policy *authorizationapi.Policy, w io.Writer, opts kctl.PrintOptions) error { + roleNames := sets.String{} + for key := range policy.Roles { + roleNames.Insert(key) + } + + name := formatResourceName(opts.Kind, policy.Name, opts.WithKind) + rolesString := strings.Join(roleNames.List(), ", ") + + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", policy.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%v", name, rolesString, policy.LastModified); err != nil { + return err + } + if err := appendItemLabels(policy.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printPolicyList(list *authorizationapi.PolicyList, w io.Writer, opts kctl.PrintOptions) error { + for _, policy := range list.Items { + if err := printPolicy(&policy, w, opts); err != nil { + return err + } + } + return nil +} + +func printPolicyBinding(policyBinding *authorizationapi.PolicyBinding, w io.Writer, opts kctl.PrintOptions) error { + roleBindingNames := sets.String{} + for key := range policyBinding.RoleBindings { + roleBindingNames.Insert(key) + } + + name := formatResourceName(opts.Kind, policyBinding.Name, opts.WithKind) + roleBindingsString := strings.Join(roleBindingNames.List(), ", ") + + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", policyBinding.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%v", name, roleBindingsString, policyBinding.LastModified); err != nil { + return err + } + if err := appendItemLabels(policyBinding.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printPolicyBindingList(list *authorizationapi.PolicyBindingList, w io.Writer, opts kctl.PrintOptions) error { + for _, policyBinding := range list.Items { + if err := printPolicyBinding(&policyBinding, w, opts); err != nil { + return err + } + } + return nil +} + +func printClusterPolicy(policy *authorizationapi.ClusterPolicy, w io.Writer, opts kctl.PrintOptions) error { + return printPolicy(authorizationapi.ToPolicy(policy), w, opts) +} + +func printClusterPolicyList(list *authorizationapi.ClusterPolicyList, w io.Writer, opts kctl.PrintOptions) error { + return printPolicyList(authorizationapi.ToPolicyList(list), w, opts) +} + +func printClusterPolicyBinding(policyBinding *authorizationapi.ClusterPolicyBinding, w io.Writer, opts kctl.PrintOptions) error { + return printPolicyBinding(authorizationapi.ToPolicyBinding(policyBinding), w, opts) +} + +func printClusterPolicyBindingList(list *authorizationapi.ClusterPolicyBindingList, w io.Writer, opts kctl.PrintOptions) error { + return printPolicyBindingList(authorizationapi.ToPolicyBindingList(list), w, opts) +} + +func printClusterRole(role *authorizationapi.ClusterRole, w io.Writer, opts kctl.PrintOptions) error { + return printRole(authorizationapi.ToRole(role), w, opts) +} + +func printClusterRoleList(list *authorizationapi.ClusterRoleList, w io.Writer, opts kctl.PrintOptions) error { + return printRoleList(authorizationapi.ToRoleList(list), w, opts) +} + +func printClusterRoleBinding(roleBinding *authorizationapi.ClusterRoleBinding, w io.Writer, opts kctl.PrintOptions) error { + return printRoleBinding(authorizationapi.ToRoleBinding(roleBinding), w, opts) +} + +func printClusterRoleBindingList(list *authorizationapi.ClusterRoleBindingList, w io.Writer, opts kctl.PrintOptions) error { + return printRoleBindingList(authorizationapi.ToRoleBindingList(list), w, opts) +} + +func printIsPersonalSubjectAccessReview(a *authorizationapi.IsPersonalSubjectAccessReview, w io.Writer, opts kctl.PrintOptions) error { + _, err := fmt.Fprintf(w, "IsPersonalSubjectAccessReview\n") + return err +} + +func printRole(role *authorizationapi.Role, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, role.Name, opts.WithKind) + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", role.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s", name); err != nil { + return err + } + if err := appendItemLabels(role.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printRoleList(list *authorizationapi.RoleList, w io.Writer, opts kctl.PrintOptions) error { + for _, role := range list.Items { + if err := printRole(&role, w, opts); err != nil { + return err + } + } + + return nil +} + +func printRoleBinding(roleBinding *authorizationapi.RoleBinding, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, roleBinding.Name, opts.WithKind) + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", roleBinding.Namespace); err != nil { + return err + } + } + users, groups, sas, others := authorizationapi.SubjectsStrings(roleBinding.Namespace, roleBinding.Subjects) + + if _, err := fmt.Fprintf(w, "%s\t%s\t%v\t%v\t%v\t%v", name, roleBinding.RoleRef.Namespace+"/"+roleBinding.RoleRef.Name, strings.Join(users, ", "), strings.Join(groups, ", "), strings.Join(sas, ", "), strings.Join(others, ", ")); err != nil { + return err + } + if err := appendItemLabels(roleBinding.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printRoleBindingList(list *authorizationapi.RoleBindingList, w io.Writer, opts kctl.PrintOptions) error { + for _, roleBinding := range list.Items { + if err := printRoleBinding(&roleBinding, w, opts); err != nil { + return err + } + } + + return nil +} + +func printOAuthClient(client *oauthapi.OAuthClient, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, client.Name, opts.WithKind) + challenge := "FALSE" + if client.RespondWithChallenges { + challenge = "TRUE" + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%v", name, client.Secret, challenge, strings.Join(client.RedirectURIs, ",")); err != nil { + return err + } + if err := appendItemLabels(client.Labels, w, opts.ColumnLabels, opts.ShowLabels); err != nil { + return err + } + return nil +} + +func printOAuthClientList(list *oauthapi.OAuthClientList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printOAuthClient(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printOAuthClientAuthorization(auth *oauthapi.OAuthClientAuthorization, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, auth.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%v\n", name, auth.UserName, auth.ClientName, strings.Join(auth.Scopes, ",")) + return err +} + +func printOAuthClientAuthorizationList(list *oauthapi.OAuthClientAuthorizationList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printOAuthClientAuthorization(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printOAuthAccessToken(token *oauthapi.OAuthAccessToken, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, token.Name, opts.WithKind) + created := token.CreationTimestamp + expires := created.Add(time.Duration(token.ExpiresIn) * time.Second) + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n", name, token.UserName, token.ClientName, created, expires, token.RedirectURI, strings.Join(token.Scopes, ",")) + return err +} + +func printOAuthAccessTokenList(list *oauthapi.OAuthAccessTokenList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printOAuthAccessToken(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printOAuthAuthorizeToken(token *oauthapi.OAuthAuthorizeToken, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, token.Name, opts.WithKind) + created := token.CreationTimestamp + expires := created.Add(time.Duration(token.ExpiresIn) * time.Second) + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n", name, token.UserName, token.ClientName, created, expires, token.RedirectURI, strings.Join(token.Scopes, ",")) + return err +} + +func printOAuthAuthorizeTokenList(list *oauthapi.OAuthAuthorizeTokenList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printOAuthAuthorizeToken(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printUser(user *userapi.User, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, user.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", name, user.UID, user.FullName, strings.Join(user.Identities, ", ")) + return err +} + +func printUserList(list *userapi.UserList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printUser(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printIdentity(identity *userapi.Identity, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, identity.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\n", name, identity.ProviderName, identity.ProviderUserName, identity.User.Name, identity.User.UID) + return err +} + +func printIdentityList(list *userapi.IdentityList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printIdentity(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printUserIdentityMapping(mapping *userapi.UserIdentityMapping, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, mapping.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", name, mapping.Identity.Name, mapping.User.Name, mapping.User.UID) + return err +} + +func printGroup(group *userapi.Group, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, group.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\n", name, strings.Join(group.Users, ", ")) + return err +} + +func printGroupList(list *userapi.GroupList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printGroup(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printHostSubnet(h *sdnapi.HostSubnet, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, h.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\n", name, h.Host, h.HostIP, h.Subnet) + return err +} + +func printHostSubnetList(list *sdnapi.HostSubnetList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printHostSubnet(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printNetNamespace(h *sdnapi.NetNamespace, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, h.NetName, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%d\n", name, h.NetID) + return err +} + +func printNetNamespaceList(list *sdnapi.NetNamespaceList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printNetNamespace(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printClusterNetwork(n *sdnapi.ClusterNetwork, w io.Writer, opts kctl.PrintOptions) error { + name := formatResourceName(opts.Kind, n.Name, opts.WithKind) + _, err := fmt.Fprintf(w, "%s\t%s\t%d\t%s\t%s\n", name, n.Network, n.HostSubnetLength, n.ServiceNetwork, n.PluginName) + return err +} + +func printClusterNetworkList(list *sdnapi.ClusterNetworkList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printClusterNetwork(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func printEgressNetworkPolicy(n *sdnapi.EgressNetworkPolicy, w io.Writer, opts kctl.PrintOptions) error { + if opts.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", n.Namespace); err != nil { + return err + } + } + if _, err := fmt.Fprintf(w, "%s\n", n.Name); err != nil { + return err + } + return nil +} + +func printEgressNetworkPolicyList(list *sdnapi.EgressNetworkPolicyList, w io.Writer, opts kctl.PrintOptions) error { + for _, item := range list.Items { + if err := printEgressNetworkPolicy(&item, w, opts); err != nil { + return err + } + } + return nil +} + +func appendItemLabels(itemLabels map[string]string, w io.Writer, columnLabels []string, showLabels bool) error { + if _, err := fmt.Fprint(w, kctl.AppendLabels(itemLabels, columnLabels)); err != nil { + return err + } + if _, err := fmt.Fprint(w, kctl.AppendAllLabels(showLabels, itemLabels)); err != nil { + return err + } + return nil +} + +func printClusterResourceQuota(resourceQuota *quotaapi.ClusterResourceQuota, w io.Writer, options kctl.PrintOptions) error { + name := formatResourceName(options.Kind, resourceQuota.Name, options.WithKind) + + if _, err := fmt.Fprintf(w, "%s", name); err != nil { + return err + } + if _, err := fmt.Fprintf(w, "\t%s", unversioned.FormatLabelSelector(resourceQuota.Spec.Selector.LabelSelector)); err != nil { + return err + } + if _, err := fmt.Fprintf(w, "\t%s", resourceQuota.Spec.Selector.AnnotationSelector); err != nil { + return err + } + if _, err := fmt.Fprint(w, kctl.AppendLabels(resourceQuota.Labels, options.ColumnLabels)); err != nil { + return err + } + _, err := fmt.Fprint(w, kctl.AppendAllLabels(options.ShowLabels, resourceQuota.Labels)) + return err +} + +func printClusterResourceQuotaList(list *quotaapi.ClusterResourceQuotaList, w io.Writer, options kctl.PrintOptions) error { + for i := range list.Items { + if err := printClusterResourceQuota(&list.Items[i], w, options); err != nil { + return err + } + } + return nil +} + +func printAppliedClusterResourceQuota(resourceQuota *quotaapi.AppliedClusterResourceQuota, w io.Writer, options kctl.PrintOptions) error { + return printClusterResourceQuota(quotaapi.ConvertAppliedClusterResourceQuotaToClusterResourceQuota(resourceQuota), w, options) +} + +func printAppliedClusterResourceQuotaList(list *quotaapi.AppliedClusterResourceQuotaList, w io.Writer, options kctl.PrintOptions) error { + for i := range list.Items { + if err := printClusterResourceQuota(quotaapi.ConvertAppliedClusterResourceQuotaToClusterResourceQuota(&list.Items[i]), w, options); err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/projectstatus.go b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/projectstatus.go new file mode 100644 index 00000000..99b71922 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/cli/describe/projectstatus.go @@ -0,0 +1,1458 @@ +package describe + +import ( + "fmt" + "io" + "sort" + "strconv" + "strings" + "text/tabwriter" + + kapi "k8s.io/kubernetes/pkg/api" + kapierrors "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" + kapps "k8s.io/kubernetes/pkg/apis/apps" + "k8s.io/kubernetes/pkg/apis/autoscaling" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + utilerrors "k8s.io/kubernetes/pkg/util/errors" + "k8s.io/kubernetes/pkg/util/sets" + + osgraph "github.com/openshift/origin/pkg/api/graph" + "github.com/openshift/origin/pkg/api/graph/graphview" + kubeedges "github.com/openshift/origin/pkg/api/kubegraph" + kubeanalysis "github.com/openshift/origin/pkg/api/kubegraph/analysis" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + buildapi "github.com/openshift/origin/pkg/build/api" + buildedges "github.com/openshift/origin/pkg/build/graph" + buildanalysis "github.com/openshift/origin/pkg/build/graph/analysis" + buildgraph "github.com/openshift/origin/pkg/build/graph/nodes" + "github.com/openshift/origin/pkg/client" + deployapi "github.com/openshift/origin/pkg/deploy/api" + deployedges "github.com/openshift/origin/pkg/deploy/graph" + deployanalysis "github.com/openshift/origin/pkg/deploy/graph/analysis" + deploygraph "github.com/openshift/origin/pkg/deploy/graph/nodes" + deployutil "github.com/openshift/origin/pkg/deploy/util" + imageapi "github.com/openshift/origin/pkg/image/api" + imageedges "github.com/openshift/origin/pkg/image/graph" + imagegraph "github.com/openshift/origin/pkg/image/graph/nodes" + projectapi "github.com/openshift/origin/pkg/project/api" + routeapi "github.com/openshift/origin/pkg/route/api" + routeedges "github.com/openshift/origin/pkg/route/graph" + routeanalysis "github.com/openshift/origin/pkg/route/graph/analysis" + routegraph "github.com/openshift/origin/pkg/route/graph/nodes" + "github.com/openshift/origin/pkg/util/errors" + "github.com/openshift/origin/pkg/util/parallel" +) + +const ForbiddenListWarning = "Forbidden" + +// ProjectStatusDescriber generates extended information about a Project +type ProjectStatusDescriber struct { + K kclient.Interface + C client.Interface + Server string + Suggest bool + + // root command used when calling this command + CommandBaseName string + + LogsCommandName string + SecurityPolicyCommandFormat string + SetProbeCommandName string +} + +func (d *ProjectStatusDescriber) MakeGraph(namespace string) (osgraph.Graph, sets.String, error) { + g := osgraph.New() + + loaders := []GraphLoader{ + &serviceLoader{namespace: namespace, lister: d.K}, + &serviceAccountLoader{namespace: namespace, lister: d.K}, + &secretLoader{namespace: namespace, lister: d.K}, + &rcLoader{namespace: namespace, lister: d.K}, + &podLoader{namespace: namespace, lister: d.K}, + &petsetLoader{namespace: namespace, lister: d.K.Apps()}, + &horizontalPodAutoscalerLoader{namespace: namespace, lister: d.K.Autoscaling()}, + // TODO check swagger for feature enablement and selectively add bcLoader and buildLoader + // then remove errors.TolerateNotFoundError method. + &bcLoader{namespace: namespace, lister: d.C}, + &buildLoader{namespace: namespace, lister: d.C}, + &isLoader{namespace: namespace, lister: d.C}, + &dcLoader{namespace: namespace, lister: d.C}, + &routeLoader{namespace: namespace, lister: d.C}, + } + loadingFuncs := []func() error{} + for _, loader := range loaders { + loadingFuncs = append(loadingFuncs, loader.Load) + } + + forbiddenResources := sets.String{} + if errs := parallel.Run(loadingFuncs...); len(errs) > 0 { + actualErrors := []error{} + for _, err := range errs { + if kapierrors.IsForbidden(err) { + forbiddenErr := err.(*kapierrors.StatusError) + if (forbiddenErr.Status().Details != nil) && (len(forbiddenErr.Status().Details.Kind) > 0) { + forbiddenResources.Insert(forbiddenErr.Status().Details.Kind) + } + continue + } + actualErrors = append(actualErrors, err) + } + + if len(actualErrors) > 0 { + return g, forbiddenResources, utilerrors.NewAggregate(actualErrors) + } + } + + for _, loader := range loaders { + loader.AddToGraph(g) + } + + kubeedges.AddAllExposedPodTemplateSpecEdges(g) + kubeedges.AddAllExposedPodEdges(g) + kubeedges.AddAllManagedByControllerPodEdges(g) + kubeedges.AddAllRequestedServiceAccountEdges(g) + kubeedges.AddAllMountableSecretEdges(g) + kubeedges.AddAllMountedSecretEdges(g) + kubeedges.AddHPAScaleRefEdges(g) + buildedges.AddAllInputOutputEdges(g) + buildedges.AddAllBuildEdges(g) + deployedges.AddAllTriggerEdges(g) + deployedges.AddAllDeploymentEdges(g) + imageedges.AddAllImageStreamRefEdges(g) + imageedges.AddAllImageStreamImageRefEdges(g) + routeedges.AddAllRouteEdges(g) + + return g, forbiddenResources, nil +} + +// Describe returns the description of a project +func (d *ProjectStatusDescriber) Describe(namespace, name string) (string, error) { + var f formatter = namespacedFormatter{} + + g, forbiddenResources, err := d.MakeGraph(namespace) + if err != nil { + return "", err + } + + allNamespaces := namespace == kapi.NamespaceAll + var project *projectapi.Project + if !allNamespaces { + p, err := d.C.Projects().Get(namespace) + if err != nil { + return "", err + } + project = p + f = namespacedFormatter{currentNamespace: namespace} + } + + coveredNodes := graphview.IntSet{} + + services, coveredByServices := graphview.AllServiceGroups(g, coveredNodes) + coveredNodes.Insert(coveredByServices.List()...) + + standaloneDCs, coveredByDCs := graphview.AllDeploymentConfigPipelines(g, coveredNodes) + coveredNodes.Insert(coveredByDCs.List()...) + + standaloneRCs, coveredByRCs := graphview.AllReplicationControllers(g, coveredNodes) + coveredNodes.Insert(coveredByRCs.List()...) + + standaloneImages, coveredByImages := graphview.AllImagePipelinesFromBuildConfig(g, coveredNodes) + coveredNodes.Insert(coveredByImages.List()...) + + standalonePods, coveredByPods := graphview.AllPods(g, coveredNodes) + coveredNodes.Insert(coveredByPods.List()...) + + return tabbedString(func(out *tabwriter.Writer) error { + indent := " " + if allNamespaces { + fmt.Fprintf(out, describeAllProjectsOnServer(f, d.Server)) + } else { + fmt.Fprintf(out, describeProjectAndServer(f, project, d.Server)) + } + + for _, service := range services { + if !service.Service.Found() { + continue + } + local := namespacedFormatter{currentNamespace: service.Service.Namespace} + + var exposes []string + for _, routeNode := range service.ExposingRoutes { + exposes = append(exposes, describeRouteInServiceGroup(local, routeNode)...) + } + sort.Sort(exposedRoutes(exposes)) + + fmt.Fprintln(out) + printLines(out, "", 0, describeServiceInServiceGroup(f, service, exposes...)...) + + for _, dcPipeline := range service.DeploymentConfigPipelines { + printLines(out, indent, 1, describeDeploymentInServiceGroup(local, dcPipeline, func(rc *kubegraph.ReplicationControllerNode) int32 { + return graphview.MaxRecentContainerRestartsForRC(g, rc) + })...) + } + + for _, node := range service.FulfillingPetSets { + printLines(out, indent, 1, describePetSetInServiceGroup(local, node)...) + } + + rcNode: + for _, rcNode := range service.FulfillingRCs { + for _, coveredDC := range service.FulfillingDCs { + if deployedges.BelongsToDeploymentConfig(coveredDC.DeploymentConfig, rcNode.ReplicationController) { + continue rcNode + } + } + printLines(out, indent, 1, describeRCInServiceGroup(local, rcNode)...) + } + + pod: + for _, node := range service.FulfillingPods { + // skip pods that have been displayed in a roll-up of RCs and DCs (by implicit usage of RCs) + for _, coveredRC := range service.FulfillingRCs { + if g.Edge(node, coveredRC) != nil { + continue pod + } + } + // TODO: collapse into FulfillingControllers + for _, covered := range service.FulfillingPetSets { + if g.Edge(node, covered) != nil { + continue pod + } + } + printLines(out, indent, 1, describePodInServiceGroup(local, node)...) + } + } + + for _, standaloneDC := range standaloneDCs { + fmt.Fprintln(out) + printLines(out, indent, 0, describeDeploymentInServiceGroup(f, standaloneDC, func(rc *kubegraph.ReplicationControllerNode) int32 { + return graphview.MaxRecentContainerRestartsForRC(g, rc) + })...) + } + + for _, standaloneImage := range standaloneImages { + fmt.Fprintln(out) + lines := describeStandaloneBuildGroup(f, standaloneImage, namespace) + lines = append(lines, describeAdditionalBuildDetail(standaloneImage.Build, standaloneImage.LastSuccessfulBuild, standaloneImage.LastUnsuccessfulBuild, standaloneImage.ActiveBuilds, standaloneImage.DestinationResolved, true)...) + printLines(out, indent, 0, lines...) + } + + for _, standaloneRC := range standaloneRCs { + fmt.Fprintln(out) + printLines(out, indent, 0, describeRCInServiceGroup(f, standaloneRC.RC)...) + } + + monopods, err := filterBoringPods(standalonePods) + if err != nil { + return err + } + for _, monopod := range monopods { + fmt.Fprintln(out) + printLines(out, indent, 0, describeMonopod(f, monopod.Pod)...) + } + + allMarkers := osgraph.Markers{} + allMarkers = append(allMarkers, createForbiddenMarkers(forbiddenResources)...) + for _, scanner := range getMarkerScanners(d.LogsCommandName, d.SecurityPolicyCommandFormat, d.SetProbeCommandName) { + allMarkers = append(allMarkers, scanner(g, f)...) + } + + // TODO: Provide an option to chase these hidden markers. + allMarkers = allMarkers.FilterByNamespace(namespace) + + fmt.Fprintln(out) + + sort.Stable(osgraph.ByKey(allMarkers)) + sort.Stable(osgraph.ByNodeID(allMarkers)) + + errorMarkers := allMarkers.BySeverity(osgraph.ErrorSeverity) + errorSuggestions := 0 + if len(errorMarkers) > 0 { + fmt.Fprintln(out, "Errors:") + for _, marker := range errorMarkers { + fmt.Fprintln(out, indent+"* "+marker.Message) + if len(marker.Suggestion) > 0 { + errorSuggestions++ + if d.Suggest { + switch s := marker.Suggestion.String(); { + case strings.Contains(s, "\n"): + fmt.Fprintln(out) + for _, line := range strings.Split(s, "\n") { + fmt.Fprintln(out, indent+" "+line) + } + case len(s) > 0: + fmt.Fprintln(out, indent+" try: "+s) + } + } + } + } + } + + warningMarkers := allMarkers.BySeverity(osgraph.WarningSeverity) + if len(warningMarkers) > 0 { + if d.Suggest { + fmt.Fprintln(out, "Warnings:") + } + for _, marker := range warningMarkers { + if d.Suggest { + fmt.Fprintln(out, indent+"* "+marker.Message) + switch s := marker.Suggestion.String(); { + case strings.Contains(s, "\n"): + fmt.Fprintln(out) + for _, line := range strings.Split(s, "\n") { + fmt.Fprintln(out, indent+" "+line) + } + case len(s) > 0: + fmt.Fprintln(out, indent+" try: "+s) + } + } + } + } + + // We print errors by default and warnings if -v is used. If we get none, + // this would be an extra new line. + if len(errorMarkers) != 0 || (d.Suggest && len(warningMarkers) != 0) { + fmt.Fprintln(out) + } + + errors, warnings := "", "" + if len(errorMarkers) == 1 { + errors = "1 error" + } else if len(errorMarkers) > 1 { + errors = fmt.Sprintf("%d errors", len(errorMarkers)) + } + if len(warningMarkers) == 1 { + warnings = "1 warning" + } else if len(warningMarkers) > 1 { + warnings = fmt.Sprintf("%d warnings", len(warningMarkers)) + } + + switch { + case !d.Suggest && len(errorMarkers) > 0 && len(warningMarkers) > 0: + fmt.Fprintf(out, "%s and %s identified, use '%[3]s status -v' to see details.\n", errors, warnings, d.CommandBaseName) + + case !d.Suggest && len(errorMarkers) > 0 && errorSuggestions > 0: + fmt.Fprintf(out, "%s identified, use '%[2]s status -v' to see details.\n", errors, d.CommandBaseName) + + case !d.Suggest && len(warningMarkers) > 0: + fmt.Fprintf(out, "%s identified, use '%[2]s status -v' to see details.\n", warnings, d.CommandBaseName) + + case (len(services) == 0) && (len(standaloneDCs) == 0) && (len(standaloneImages) == 0): + fmt.Fprintln(out, "You have no services, deployment configs, or build configs.") + fmt.Fprintf(out, "Run '%[1]s new-app' to create an application.\n", d.CommandBaseName) + + default: + fmt.Fprintf(out, "View details with '%[1]s describe /' or list everything with '%[1]s get all'.\n", d.CommandBaseName) + } + + return nil + }) +} + +func createForbiddenMarkers(forbiddenResources sets.String) []osgraph.Marker { + markers := []osgraph.Marker{} + for forbiddenResource := range forbiddenResources { + markers = append(markers, osgraph.Marker{ + Severity: osgraph.WarningSeverity, + Key: ForbiddenListWarning, + Message: fmt.Sprintf("Unable to list %s resources. Not all status relationships can be established.", forbiddenResource), + }) + } + return markers +} + +func getMarkerScanners(logsCommandName, securityPolicyCommandFormat, setProbeCommandName string) []osgraph.MarkerScanner { + return []osgraph.MarkerScanner{ + func(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + return kubeanalysis.FindRestartingPods(g, f, logsCommandName, securityPolicyCommandFormat) + }, + kubeanalysis.FindDuelingReplicationControllers, + kubeanalysis.FindMissingSecrets, + kubeanalysis.FindHPASpecsMissingCPUTargets, + kubeanalysis.FindHPASpecsMissingScaleRefs, + kubeanalysis.FindOverlappingHPAs, + buildanalysis.FindUnpushableBuildConfigs, + buildanalysis.FindCircularBuilds, + buildanalysis.FindPendingTags, + deployanalysis.FindDeploymentConfigTriggerErrors, + buildanalysis.FindMissingInputImageStreams, + func(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + return deployanalysis.FindDeploymentConfigReadinessWarnings(g, f, setProbeCommandName) + }, + routeanalysis.FindPortMappingIssues, + routeanalysis.FindMissingTLSTerminationType, + routeanalysis.FindPathBasedPassthroughRoutes, + routeanalysis.FindRouteAdmissionFailures, + routeanalysis.FindMissingRouter, + // We disable this feature by default and we don't have a capability detection for this sort of thing. Disable this check for now. + // kubeanalysis.FindUnmountableSecrets, + } +} + +func printLines(out io.Writer, indent string, depth int, lines ...string) { + for i, s := range lines { + fmt.Fprintf(out, strings.Repeat(indent, depth)) + if i != 0 { + fmt.Fprint(out, indent) + } + fmt.Fprintln(out, s) + } +} + +func indentLines(indent string, lines ...string) []string { + ret := make([]string, 0, len(lines)) + for _, line := range lines { + ret = append(ret, indent+line) + } + + return ret +} + +type formatter interface { + ResourceName(obj interface{}) string +} + +func namespaceNameWithType(resource, name, namespace, defaultNamespace string, noNamespace bool) string { + if noNamespace || namespace == defaultNamespace || len(namespace) == 0 { + return resource + "/" + name + } + return resource + "/" + name + "[" + namespace + "]" +} + +var namespaced = namespacedFormatter{} + +type namespacedFormatter struct { + hideNamespace bool + currentNamespace string +} + +func (f namespacedFormatter) ResourceName(obj interface{}) string { + switch t := obj.(type) { + + case *kubegraph.PodNode: + return namespaceNameWithType("pod", t.Name, t.Namespace, f.currentNamespace, f.hideNamespace) + case *kubegraph.ServiceNode: + return namespaceNameWithType("svc", t.Name, t.Namespace, f.currentNamespace, f.hideNamespace) + case *kubegraph.SecretNode: + return namespaceNameWithType("secret", t.Name, t.Namespace, f.currentNamespace, f.hideNamespace) + case *kubegraph.ServiceAccountNode: + return namespaceNameWithType("sa", t.Name, t.Namespace, f.currentNamespace, f.hideNamespace) + case *kubegraph.ReplicationControllerNode: + return namespaceNameWithType("rc", t.ReplicationController.Name, t.ReplicationController.Namespace, f.currentNamespace, f.hideNamespace) + case *kubegraph.HorizontalPodAutoscalerNode: + return namespaceNameWithType("hpa", t.HorizontalPodAutoscaler.Name, t.HorizontalPodAutoscaler.Namespace, f.currentNamespace, f.hideNamespace) + case *kubegraph.PetSetNode: + return namespaceNameWithType("petset", t.PetSet.Name, t.PetSet.Namespace, f.currentNamespace, f.hideNamespace) + + case *imagegraph.ImageStreamNode: + return namespaceNameWithType("is", t.ImageStream.Name, t.ImageStream.Namespace, f.currentNamespace, f.hideNamespace) + case *imagegraph.ImageStreamTagNode: + return namespaceNameWithType("istag", t.ImageStreamTag.Name, t.ImageStreamTag.Namespace, f.currentNamespace, f.hideNamespace) + case *imagegraph.ImageStreamImageNode: + return namespaceNameWithType("isi", t.ImageStreamImage.Name, t.ImageStreamImage.Namespace, f.currentNamespace, f.hideNamespace) + case *imagegraph.ImageNode: + return namespaceNameWithType("image", t.Image.Name, t.Image.Namespace, f.currentNamespace, f.hideNamespace) + case *buildgraph.BuildConfigNode: + return namespaceNameWithType("bc", t.BuildConfig.Name, t.BuildConfig.Namespace, f.currentNamespace, f.hideNamespace) + case *buildgraph.BuildNode: + return namespaceNameWithType("build", t.Build.Name, t.Build.Namespace, f.currentNamespace, f.hideNamespace) + + case *deploygraph.DeploymentConfigNode: + return namespaceNameWithType("dc", t.DeploymentConfig.Name, t.DeploymentConfig.Namespace, f.currentNamespace, f.hideNamespace) + + case *routegraph.RouteNode: + return namespaceNameWithType("route", t.Route.Name, t.Route.Namespace, f.currentNamespace, f.hideNamespace) + + default: + return fmt.Sprintf("", obj) + } +} + +func describeProjectAndServer(f formatter, project *projectapi.Project, server string) string { + if len(server) == 0 { + return fmt.Sprintf("In project %s on server %s\n", projectapi.DisplayNameAndNameForProject(project), server) + } + return fmt.Sprintf("In project %s on server %s\n", projectapi.DisplayNameAndNameForProject(project), server) + +} + +func describeAllProjectsOnServer(f formatter, server string) string { + if len(server) == 0 { + return "Showing all projects\n" + } + return fmt.Sprintf("Showing all projects on server %s\n", server) +} + +func describeDeploymentInServiceGroup(f formatter, deploy graphview.DeploymentConfigPipeline, restartFn func(*kubegraph.ReplicationControllerNode) int32) []string { + local := namespacedFormatter{currentNamespace: deploy.Deployment.DeploymentConfig.Namespace} + + includeLastPass := deploy.ActiveDeployment == nil + if len(deploy.Images) == 1 { + format := "%s deploys %s %s" + if deploy.Deployment.DeploymentConfig.Spec.Test { + format = "%s test deploys %s %s" + } + lines := []string{fmt.Sprintf(format, f.ResourceName(deploy.Deployment), describeImageInPipeline(local, deploy.Images[0], deploy.Deployment.DeploymentConfig.Namespace), describeDeploymentConfigTrigger(deploy.Deployment.DeploymentConfig))} + if len(lines[0]) > 120 && strings.Contains(lines[0], " <- ") { + segments := strings.SplitN(lines[0], " <- ", 2) + lines[0] = segments[0] + " <-" + lines = append(lines, segments[1]) + } + lines = append(lines, indentLines(" ", describeAdditionalBuildDetail(deploy.Images[0].Build, deploy.Images[0].LastSuccessfulBuild, deploy.Images[0].LastUnsuccessfulBuild, deploy.Images[0].ActiveBuilds, deploy.Images[0].DestinationResolved, includeLastPass)...)...) + lines = append(lines, describeDeployments(local, deploy.Deployment, deploy.ActiveDeployment, deploy.InactiveDeployments, restartFn, maxDisplayDeployments)...) + return lines + } + + format := "%s deploys %s" + if deploy.Deployment.DeploymentConfig.Spec.Test { + format = "%s test deploys %s" + } + lines := []string{fmt.Sprintf(format, f.ResourceName(deploy.Deployment), describeDeploymentConfigTrigger(deploy.Deployment.DeploymentConfig))} + for _, image := range deploy.Images { + lines = append(lines, describeImageInPipeline(local, image, deploy.Deployment.DeploymentConfig.Namespace)) + lines = append(lines, indentLines(" ", describeAdditionalBuildDetail(image.Build, image.LastSuccessfulBuild, image.LastUnsuccessfulBuild, image.ActiveBuilds, image.DestinationResolved, includeLastPass)...)...) + lines = append(lines, describeDeployments(local, deploy.Deployment, deploy.ActiveDeployment, deploy.InactiveDeployments, restartFn, maxDisplayDeployments)...) + } + return lines +} + +func describePetSetInServiceGroup(f formatter, node *kubegraph.PetSetNode) []string { + images := []string{} + for _, container := range node.PetSet.Spec.Template.Spec.Containers { + images = append(images, container.Image) + } + + return []string{fmt.Sprintf("%s manages %s, %s", f.ResourceName(node), strings.Join(images, ", "), describePetSetStatus(node.PetSet))} +} + +func describeRCInServiceGroup(f formatter, rcNode *kubegraph.ReplicationControllerNode) []string { + if rcNode.ReplicationController.Spec.Template == nil { + return []string{} + } + + images := []string{} + for _, container := range rcNode.ReplicationController.Spec.Template.Spec.Containers { + images = append(images, container.Image) + } + + lines := []string{fmt.Sprintf("%s runs %s", f.ResourceName(rcNode), strings.Join(images, ", "))} + lines = append(lines, describeRCStatus(rcNode.ReplicationController)) + + return lines +} + +func describePodInServiceGroup(f formatter, podNode *kubegraph.PodNode) []string { + images := []string{} + for _, container := range podNode.Pod.Spec.Containers { + images = append(images, container.Image) + } + + lines := []string{fmt.Sprintf("%s runs %s", f.ResourceName(podNode), strings.Join(images, ", "))} + return lines +} + +func describeMonopod(f formatter, podNode *kubegraph.PodNode) []string { + images := []string{} + for _, container := range podNode.Pod.Spec.Containers { + images = append(images, container.Image) + } + + lines := []string{fmt.Sprintf("%s runs %s", f.ResourceName(podNode), strings.Join(images, ", "))} + return lines +} + +// exposedRoutes orders strings by their leading prefix (https:// -> http:// other prefixes), then by +// the shortest distance up to the first space (indicating a break), then alphabetically: +// +// https://test.com +// https://www.test.com +// http://t.com +// other string +// +type exposedRoutes []string + +func (e exposedRoutes) Len() int { return len(e) } +func (e exposedRoutes) Swap(i, j int) { e[i], e[j] = e[j], e[i] } +func (e exposedRoutes) Less(i, j int) bool { + a, b := e[i], e[j] + prefixA, prefixB := strings.HasPrefix(a, "https://"), strings.HasPrefix(b, "https://") + switch { + case prefixA && !prefixB: + return true + case !prefixA && prefixB: + return false + case !prefixA && !prefixB: + prefixA, prefixB = strings.HasPrefix(a, "http://"), strings.HasPrefix(b, "http://") + switch { + case prefixA && !prefixB: + return true + case !prefixA && prefixB: + return false + case !prefixA && !prefixB: + return a < b + default: + a, b = a[7:], b[7:] + } + default: + a, b = a[8:], b[8:] + } + lA, lB := strings.Index(a, " "), strings.Index(b, " ") + if lA == -1 { + lA = len(a) + } + if lB == -1 { + lB = len(b) + } + switch { + case lA < lB: + return true + case lA > lB: + return false + default: + return a < b + } +} + +func extractRouteInfo(route *routeapi.Route) (requested bool, other []string, errors []string) { + reasons := sets.NewString() + for _, ingress := range route.Status.Ingress { + exact := route.Spec.Host == ingress.Host + switch status, condition := routeapi.IngressConditionStatus(&ingress, routeapi.RouteAdmitted); status { + case kapi.ConditionFalse: + reasons.Insert(condition.Reason) + default: + if exact { + requested = true + } else { + other = append(other, ingress.Host) + } + } + } + return requested, other, reasons.List() +} + +func describeRouteExposed(host string, route *routeapi.Route, errors bool) string { + var trailer string + if errors { + trailer = " (!)" + } + var prefix string + switch { + case route.Spec.TLS == nil: + prefix = fmt.Sprintf("http://%s", host) + case route.Spec.TLS.Termination == routeapi.TLSTerminationPassthrough: + prefix = fmt.Sprintf("https://%s (passthrough)", host) + case route.Spec.TLS.Termination == routeapi.TLSTerminationReencrypt: + prefix = fmt.Sprintf("https://%s (reencrypt)", host) + case route.Spec.TLS.Termination != routeapi.TLSTerminationEdge: + // future proof against other types of TLS termination being added + prefix = fmt.Sprintf("https://%s", host) + case route.Spec.TLS.InsecureEdgeTerminationPolicy == routeapi.InsecureEdgeTerminationPolicyRedirect: + prefix = fmt.Sprintf("https://%s (redirects)", host) + case route.Spec.TLS.InsecureEdgeTerminationPolicy == routeapi.InsecureEdgeTerminationPolicyAllow: + prefix = fmt.Sprintf("https://%s (and http)", host) + default: + prefix = fmt.Sprintf("https://%s", host) + } + + if route.Spec.Port != nil && len(route.Spec.Port.TargetPort.String()) > 0 { + return fmt.Sprintf("%s to pod port %s%s", prefix, route.Spec.Port.TargetPort.String(), trailer) + } + return fmt.Sprintf("%s%s", prefix, trailer) +} + +func describeRouteInServiceGroup(f formatter, routeNode *routegraph.RouteNode) []string { + // markers should cover printing information about admission failure + requested, other, errors := extractRouteInfo(routeNode.Route) + var lines []string + if requested { + lines = append(lines, describeRouteExposed(routeNode.Spec.Host, routeNode.Route, len(errors) > 0)) + } + for _, s := range other { + lines = append(lines, describeRouteExposed(s, routeNode.Route, len(errors) > 0)) + } + if len(lines) == 0 { + switch { + case len(errors) >= 1: + // router rejected the output + lines = append(lines, fmt.Sprintf("%s not accepted: %s", f.ResourceName(routeNode), errors[0])) + case len(routeNode.Spec.Host) == 0: + // no errors or output, likely no router running and no default domain + lines = append(lines, fmt.Sprintf("%s has no host set", f.ResourceName(routeNode))) + case len(routeNode.Status.Ingress) == 0: + // host set, but no ingress, an older legacy router + lines = append(lines, describeRouteExposed(routeNode.Spec.Host, routeNode.Route, false)) + default: + // multiple conditions but no host exposed, use the generic legacy output + lines = append(lines, fmt.Sprintf("exposed as %s by %s", routeNode.Spec.Host, f.ResourceName(routeNode))) + } + } + return lines +} + +func describeDeploymentConfigTrigger(dc *deployapi.DeploymentConfig) string { + if len(dc.Spec.Triggers) == 0 { + return "(manual)" + } + + return "" +} + +func describeStandaloneBuildGroup(f formatter, pipeline graphview.ImagePipeline, namespace string) []string { + switch { + case pipeline.Build != nil: + lines := []string{describeBuildInPipeline(f, pipeline, namespace)} + if pipeline.Image != nil { + lines = append(lines, fmt.Sprintf("-> %s", describeImageTagInPipeline(f, pipeline.Image, namespace))) + } + return lines + case pipeline.Image != nil: + return []string{describeImageTagInPipeline(f, pipeline.Image, namespace)} + default: + return []string{""} + } +} + +func describeImageInPipeline(f formatter, pipeline graphview.ImagePipeline, namespace string) string { + switch { + case pipeline.Image != nil && pipeline.Build != nil: + return fmt.Sprintf("%s <- %s", describeImageTagInPipeline(f, pipeline.Image, namespace), describeBuildInPipeline(f, pipeline, namespace)) + case pipeline.Image != nil: + return describeImageTagInPipeline(f, pipeline.Image, namespace) + case pipeline.Build != nil: + return describeBuildInPipeline(f, pipeline, namespace) + default: + return "" + } +} + +func describeImageTagInPipeline(f formatter, image graphview.ImageTagLocation, namespace string) string { + switch t := image.(type) { + case *imagegraph.ImageStreamTagNode: + if t.ImageStreamTag.Namespace != namespace { + return image.ImageSpec() + } + return f.ResourceName(t) + default: + return image.ImageSpec() + } +} + +func describeBuildInPipeline(f formatter, pipeline graphview.ImagePipeline, namespace string) string { + bldType := "" + switch { + case pipeline.Build.BuildConfig.Spec.Strategy.DockerStrategy != nil: + bldType = "docker" + case pipeline.Build.BuildConfig.Spec.Strategy.SourceStrategy != nil: + bldType = "source" + case pipeline.Build.BuildConfig.Spec.Strategy.CustomStrategy != nil: + bldType = "custom" + case pipeline.Build.BuildConfig.Spec.Strategy.JenkinsPipelineStrategy != nil: + return fmt.Sprintf("bc/%s is a Jenkins Pipeline", pipeline.Build.BuildConfig.Name) + default: + return fmt.Sprintf("bc/%s unrecognized build", pipeline.Build.BuildConfig.Name) + } + + source, ok := describeSourceInPipeline(&pipeline.Build.BuildConfig.Spec.Source) + if !ok { + return fmt.Sprintf("bc/%s unconfigured %s build", pipeline.Build.BuildConfig.Name, bldType) + } + + retStr := fmt.Sprintf("bc/%s %s builds %s", pipeline.Build.BuildConfig.Name, bldType, source) + if pipeline.BaseImage != nil { + retStr = retStr + fmt.Sprintf(" on %s", describeImageTagInPipeline(f, pipeline.BaseImage, namespace)) + } + if pipeline.BaseBuilds != nil && len(pipeline.BaseBuilds) > 0 { + bcList := "bc/" + pipeline.BaseBuilds[0] + for i, bc := range pipeline.BaseBuilds { + if i == 0 { + continue + } + bcList = bcList + ", bc/" + bc + } + retStr = retStr + fmt.Sprintf(" (from %s)", bcList) + } else if pipeline.ScheduledImport { + // technically, an image stream produced by a bc could also have a scheduled import, + // but in the interest of saving space, we'll only note this possibility when there is no input BC + // (giving the input BC precedence) + retStr = retStr + " (import scheduled)" + } + return retStr +} + +func describeAdditionalBuildDetail(build *buildgraph.BuildConfigNode, lastSuccessfulBuild *buildgraph.BuildNode, lastUnsuccessfulBuild *buildgraph.BuildNode, activeBuilds []*buildgraph.BuildNode, pushTargetResolved bool, includeSuccess bool) []string { + if build == nil { + return nil + } + out := []string{} + + passTime := unversioned.Time{} + if lastSuccessfulBuild != nil { + passTime = buildTimestamp(lastSuccessfulBuild.Build) + } + failTime := unversioned.Time{} + if lastUnsuccessfulBuild != nil { + failTime = buildTimestamp(lastUnsuccessfulBuild.Build) + } + + lastTime := failTime + if passTime.After(failTime.Time) { + lastTime = passTime + } + + // display the last successful build if specifically requested or we're going to display an active build for context + if lastSuccessfulBuild != nil && (includeSuccess || len(activeBuilds) > 0) { + out = append(out, describeBuildPhase(lastSuccessfulBuild.Build, &passTime, build.BuildConfig.Name, pushTargetResolved)) + } + if passTime.Before(failTime) { + out = append(out, describeBuildPhase(lastUnsuccessfulBuild.Build, &failTime, build.BuildConfig.Name, pushTargetResolved)) + } + + if len(activeBuilds) > 0 { + activeOut := []string{} + for i := range activeBuilds { + activeOut = append(activeOut, describeBuildPhase(activeBuilds[i].Build, nil, build.BuildConfig.Name, pushTargetResolved)) + } + + if buildTimestamp(activeBuilds[0].Build).Before(lastTime) { + out = append(out, activeOut...) + } else { + out = append(activeOut, out...) + } + } + if len(out) == 0 && lastSuccessfulBuild == nil { + out = append(out, "not built yet") + } + return out +} + +func describeBuildPhase(build *buildapi.Build, t *unversioned.Time, parentName string, pushTargetResolved bool) string { + imageStreamFailure := "" + // if we're using an image stream and that image stream is the internal registry and that registry doesn't exist + if (build.Spec.Output.To != nil) && !pushTargetResolved { + imageStreamFailure = " (can't push to image)" + } + + if t == nil { + ts := buildTimestamp(build) + t = &ts + } + var time string + if t.IsZero() { + time = "" + } else { + time = strings.ToLower(formatRelativeTime(t.Time)) + } + buildIdentification := fmt.Sprintf("build/%s", build.Name) + prefix := parentName + "-" + if strings.HasPrefix(build.Name, prefix) { + suffix := build.Name[len(prefix):] + + if buildNumber, err := strconv.Atoi(suffix); err == nil { + buildIdentification = fmt.Sprintf("build #%d", buildNumber) + } + } + + revision := describeSourceRevision(build.Spec.Revision) + if len(revision) != 0 { + revision = fmt.Sprintf(" - %s", revision) + } + switch build.Status.Phase { + case buildapi.BuildPhaseComplete: + return fmt.Sprintf("%s succeeded %s ago%s%s", buildIdentification, time, revision, imageStreamFailure) + case buildapi.BuildPhaseError: + return fmt.Sprintf("%s stopped with an error %s ago%s%s", buildIdentification, time, revision, imageStreamFailure) + case buildapi.BuildPhaseFailed: + return fmt.Sprintf("%s failed %s ago%s%s", buildIdentification, time, revision, imageStreamFailure) + default: + status := strings.ToLower(string(build.Status.Phase)) + return fmt.Sprintf("%s %s for %s%s%s", buildIdentification, status, time, revision, imageStreamFailure) + } +} + +func describeSourceRevision(rev *buildapi.SourceRevision) string { + if rev == nil { + return "" + } + switch { + case rev.Git != nil: + author := describeSourceControlUser(rev.Git.Author) + if len(author) == 0 { + author = describeSourceControlUser(rev.Git.Committer) + } + if len(author) != 0 { + author = fmt.Sprintf(" (%s)", author) + } + commit := rev.Git.Commit + if len(commit) > 7 { + commit = commit[:7] + } + return fmt.Sprintf("%s: %s%s", commit, rev.Git.Message, author) + default: + return "" + } +} + +func describeSourceControlUser(user buildapi.SourceControlUser) string { + if len(user.Name) == 0 { + return user.Email + } + if len(user.Email) == 0 { + return user.Name + } + return fmt.Sprintf("%s <%s>", user.Name, user.Email) +} + +func buildTimestamp(build *buildapi.Build) unversioned.Time { + if build == nil { + return unversioned.Time{} + } + if !build.Status.CompletionTimestamp.IsZero() { + return *build.Status.CompletionTimestamp + } + if !build.Status.StartTimestamp.IsZero() { + return *build.Status.StartTimestamp + } + return build.CreationTimestamp +} + +func describeSourceInPipeline(source *buildapi.BuildSource) (string, bool) { + switch { + case source.Git != nil: + if len(source.Git.Ref) == 0 { + return source.Git.URI, true + } + return fmt.Sprintf("%s#%s", source.Git.URI, source.Git.Ref), true + case source.Dockerfile != nil: + return "Dockerfile", true + case source.Binary != nil: + return "uploaded code", true + case len(source.Images) > 0: + return "contents in other images", true + } + return "", false +} + +func describeDeployments(f formatter, dcNode *deploygraph.DeploymentConfigNode, activeDeployment *kubegraph.ReplicationControllerNode, inactiveDeployments []*kubegraph.ReplicationControllerNode, restartFn func(*kubegraph.ReplicationControllerNode) int32, count int) []string { + if dcNode == nil { + return nil + } + out := []string{} + deploymentsToPrint := append([]*kubegraph.ReplicationControllerNode{}, inactiveDeployments...) + + if activeDeployment == nil { + on, auto := describeDeploymentConfigTriggers(dcNode.DeploymentConfig) + if dcNode.DeploymentConfig.Status.LatestVersion == 0 { + out = append(out, fmt.Sprintf("deployment #1 waiting %s", on)) + } else if auto { + out = append(out, fmt.Sprintf("deployment #%d pending %s", dcNode.DeploymentConfig.Status.LatestVersion, on)) + } + // TODO: detect new image available? + } else { + deploymentsToPrint = append([]*kubegraph.ReplicationControllerNode{activeDeployment}, inactiveDeployments...) + } + + for i, deployment := range deploymentsToPrint { + restartCount := int32(0) + if restartFn != nil { + restartCount = restartFn(deployment) + } + out = append(out, describeDeploymentStatus(deployment.ReplicationController, i == 0, dcNode.DeploymentConfig.Spec.Test, restartCount)) + switch { + case count == -1: + if deployutil.DeploymentStatusFor(deployment.ReplicationController) == deployapi.DeploymentStatusComplete { + return out + } + default: + if i+1 >= count { + return out + } + } + } + return out +} + +func describeDeploymentStatus(deploy *kapi.ReplicationController, first, test bool, restartCount int32) string { + timeAt := strings.ToLower(formatRelativeTime(deploy.CreationTimestamp.Time)) + status := deployutil.DeploymentStatusFor(deploy) + version := deployutil.DeploymentVersionFor(deploy) + maybeCancelling := "" + if deployutil.IsDeploymentCancelled(deploy) && !deployutil.IsTerminatedDeployment(deploy) { + maybeCancelling = " (cancelling)" + } + + switch status { + case deployapi.DeploymentStatusFailed: + reason := deployutil.DeploymentStatusReasonFor(deploy) + if len(reason) > 0 { + reason = fmt.Sprintf(": %s", reason) + } + // TODO: encode fail time in the rc + return fmt.Sprintf("deployment #%d failed %s ago%s%s", version, timeAt, reason, describePodSummaryInline(deploy.Status.Replicas, deploy.Spec.Replicas, false, restartCount)) + case deployapi.DeploymentStatusComplete: + // TODO: pod status output + if test { + return fmt.Sprintf("test deployment #%d deployed %s ago", version, timeAt) + } + return fmt.Sprintf("deployment #%d deployed %s ago%s", version, timeAt, describePodSummaryInline(deploy.Status.Replicas, deploy.Spec.Replicas, first, restartCount)) + case deployapi.DeploymentStatusRunning: + format := "deployment #%d running%s for %s%s" + if test { + format = "test deployment #%d running%s for %s%s" + } + return fmt.Sprintf(format, version, maybeCancelling, timeAt, describePodSummaryInline(deploy.Status.Replicas, deploy.Spec.Replicas, false, restartCount)) + default: + return fmt.Sprintf("deployment #%d %s%s %s ago%s", version, strings.ToLower(string(status)), maybeCancelling, timeAt, describePodSummaryInline(deploy.Status.Replicas, deploy.Spec.Replicas, false, restartCount)) + } +} + +func describePetSetStatus(p *kapps.PetSet) string { + timeAt := strings.ToLower(formatRelativeTime(p.CreationTimestamp.Time)) + return fmt.Sprintf("created %s ago%s", timeAt, describePodSummaryInline(int32(p.Status.Replicas), int32(p.Spec.Replicas), false, 0)) +} + +func describeRCStatus(rc *kapi.ReplicationController) string { + timeAt := strings.ToLower(formatRelativeTime(rc.CreationTimestamp.Time)) + return fmt.Sprintf("rc/%s created %s ago%s", rc.Name, timeAt, describePodSummaryInline(rc.Status.Replicas, rc.Spec.Replicas, false, 0)) +} + +func describePodSummaryInline(actual, requested int32, includeEmpty bool, restartCount int32) string { + s := describePodSummary(actual, requested, includeEmpty, restartCount) + if len(s) == 0 { + return s + } + change := "" + switch { + case requested < actual: + change = fmt.Sprintf(" reducing to %d", requested) + case requested > actual: + change = fmt.Sprintf(" growing to %d", requested) + } + return fmt.Sprintf(" - %s%s", s, change) +} + +func describePodSummary(actual, requested int32, includeEmpty bool, restartCount int32) string { + var restartWarn string + if restartCount > 0 { + restartWarn = fmt.Sprintf(" (warning: %d restarts)", restartCount) + } + if actual == requested { + switch { + case actual == 0: + if !includeEmpty { + return "" + } + return "0 pods" + case actual > 1: + return fmt.Sprintf("%d pods", actual) + restartWarn + default: + return "1 pod" + restartWarn + } + } + return fmt.Sprintf("%d/%d pods", actual, requested) + restartWarn +} + +func describeDeploymentConfigTriggers(config *deployapi.DeploymentConfig) (string, bool) { + hasConfig, hasImage := false, false + for _, t := range config.Spec.Triggers { + switch t.Type { + case deployapi.DeploymentTriggerOnConfigChange: + hasConfig = true + case deployapi.DeploymentTriggerOnImageChange: + hasImage = true + } + } + switch { + case hasConfig && hasImage: + return "on image or update", true + case hasConfig: + return "on update", true + case hasImage: + return "on image", true + default: + return "for manual", false + } +} + +func describeServiceInServiceGroup(f formatter, svc graphview.ServiceGroup, exposed ...string) []string { + spec := svc.Service.Spec + ip := spec.ClusterIP + port := describeServicePorts(spec) + switch { + case len(exposed) > 1: + return append([]string{fmt.Sprintf("%s (%s)", exposed[0], f.ResourceName(svc.Service))}, exposed[1:]...) + case len(exposed) == 1: + return []string{fmt.Sprintf("%s (%s)", exposed[0], f.ResourceName(svc.Service))} + case spec.Type == kapi.ServiceTypeNodePort: + return []string{fmt.Sprintf("%s (all nodes)%s", f.ResourceName(svc.Service), port)} + case ip == "None": + return []string{fmt.Sprintf("%s (headless)%s", f.ResourceName(svc.Service), port)} + case len(ip) == 0: + return []string{fmt.Sprintf("%s %s", f.ResourceName(svc.Service), port)} + default: + return []string{fmt.Sprintf("%s - %s%s", f.ResourceName(svc.Service), ip, port)} + } +} + +func portOrNodePort(spec kapi.ServiceSpec, port kapi.ServicePort) string { + switch { + case spec.Type != kapi.ServiceTypeNodePort: + return strconv.Itoa(int(port.Port)) + case port.NodePort == 0: + return "" + default: + return strconv.Itoa(int(port.NodePort)) + } +} + +func describeServicePorts(spec kapi.ServiceSpec) string { + switch len(spec.Ports) { + case 0: + return " no ports" + + case 1: + port := portOrNodePort(spec, spec.Ports[0]) + if spec.Ports[0].TargetPort.String() == "0" || spec.ClusterIP == kapi.ClusterIPNone || port == spec.Ports[0].TargetPort.String() { + return fmt.Sprintf(":%s", port) + } + return fmt.Sprintf(":%s -> %s", port, spec.Ports[0].TargetPort.String()) + + default: + pairs := []string{} + for _, port := range spec.Ports { + externalPort := portOrNodePort(spec, port) + if port.TargetPort.String() == "0" || spec.ClusterIP == kapi.ClusterIPNone { + pairs = append(pairs, externalPort) + continue + } + if port.Port == port.TargetPort.IntVal { + pairs = append(pairs, port.TargetPort.String()) + } else { + pairs = append(pairs, fmt.Sprintf("%s->%s", externalPort, port.TargetPort.String())) + } + } + return " ports " + strings.Join(pairs, ", ") + } +} + +func filterBoringPods(pods []graphview.Pod) ([]graphview.Pod, error) { + monopods := []graphview.Pod{} + + for _, pod := range pods { + actualPod, ok := pod.Pod.Object().(*kapi.Pod) + if !ok { + continue + } + meta, err := kapi.ObjectMetaFor(actualPod) + if err != nil { + return nil, err + } + _, isDeployerPod := meta.Labels[deployapi.DeployerPodForDeploymentLabel] + _, isBuilderPod := meta.Annotations[buildapi.BuildAnnotation] + isFinished := actualPod.Status.Phase == kapi.PodSucceeded || actualPod.Status.Phase == kapi.PodFailed + if isDeployerPod || isBuilderPod || isFinished { + continue + } + monopods = append(monopods, pod) + } + + return monopods, nil +} + +// GraphLoader is a stateful interface that provides methods for building the nodes of a graph +type GraphLoader interface { + // Load is responsible for gathering and saving the objects this GraphLoader should AddToGraph + Load() error + // AddToGraph + AddToGraph(g osgraph.Graph) error +} + +type rcLoader struct { + namespace string + lister kclient.ReplicationControllersNamespacer + items []kapi.ReplicationController +} + +func (l *rcLoader) Load() error { + list, err := l.lister.ReplicationControllers(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *rcLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + kubegraph.EnsureReplicationControllerNode(g, &l.items[i]) + } + + return nil +} + +type serviceLoader struct { + namespace string + lister kclient.ServicesNamespacer + items []kapi.Service +} + +func (l *serviceLoader) Load() error { + list, err := l.lister.Services(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *serviceLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + kubegraph.EnsureServiceNode(g, &l.items[i]) + } + + return nil +} + +type podLoader struct { + namespace string + lister kclient.PodsNamespacer + items []kapi.Pod +} + +func (l *podLoader) Load() error { + list, err := l.lister.Pods(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *podLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + kubegraph.EnsurePodNode(g, &l.items[i]) + } + + return nil +} + +type petsetLoader struct { + namespace string + lister kclient.PetSetNamespacer + items []kapps.PetSet +} + +func (l *petsetLoader) Load() error { + list, err := l.lister.PetSets(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *petsetLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + kubegraph.EnsurePetSetNode(g, &l.items[i]) + } + + return nil +} + +type horizontalPodAutoscalerLoader struct { + namespace string + lister kclient.HorizontalPodAutoscalersNamespacer + items []autoscaling.HorizontalPodAutoscaler +} + +func (l *horizontalPodAutoscalerLoader) Load() error { + list, err := l.lister.HorizontalPodAutoscalers(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *horizontalPodAutoscalerLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + kubegraph.EnsureHorizontalPodAutoscalerNode(g, &l.items[i]) + } + + return nil +} + +type serviceAccountLoader struct { + namespace string + lister kclient.ServiceAccountsNamespacer + items []kapi.ServiceAccount +} + +func (l *serviceAccountLoader) Load() error { + list, err := l.lister.ServiceAccounts(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *serviceAccountLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + kubegraph.EnsureServiceAccountNode(g, &l.items[i]) + } + + return nil +} + +type secretLoader struct { + namespace string + lister kclient.SecretsNamespacer + items []kapi.Secret +} + +func (l *secretLoader) Load() error { + list, err := l.lister.Secrets(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *secretLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + kubegraph.EnsureSecretNode(g, &l.items[i]) + } + + return nil +} + +type isLoader struct { + namespace string + lister client.ImageStreamsNamespacer + items []imageapi.ImageStream +} + +func (l *isLoader) Load() error { + list, err := l.lister.ImageStreams(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *isLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + imagegraph.EnsureImageStreamNode(g, &l.items[i]) + imagegraph.EnsureAllImageStreamTagNodes(g, &l.items[i]) + } + + return nil +} + +type dcLoader struct { + namespace string + lister client.DeploymentConfigsNamespacer + items []deployapi.DeploymentConfig +} + +func (l *dcLoader) Load() error { + list, err := l.lister.DeploymentConfigs(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *dcLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + deploygraph.EnsureDeploymentConfigNode(g, &l.items[i]) + } + + return nil +} + +type bcLoader struct { + namespace string + lister client.BuildConfigsNamespacer + items []buildapi.BuildConfig +} + +func (l *bcLoader) Load() error { + list, err := l.lister.BuildConfigs(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return errors.TolerateNotFoundError(err) + } + + l.items = list.Items + return nil +} + +func (l *bcLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + buildgraph.EnsureBuildConfigNode(g, &l.items[i]) + } + + return nil +} + +type buildLoader struct { + namespace string + lister client.BuildsNamespacer + items []buildapi.Build +} + +func (l *buildLoader) Load() error { + list, err := l.lister.Builds(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return errors.TolerateNotFoundError(err) + } + + l.items = list.Items + return nil +} + +func (l *buildLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + buildgraph.EnsureBuildNode(g, &l.items[i]) + } + + return nil +} + +type routeLoader struct { + namespace string + lister client.RoutesNamespacer + items []routeapi.Route +} + +func (l *routeLoader) Load() error { + list, err := l.lister.Routes(l.namespace).List(kapi.ListOptions{}) + if err != nil { + return err + } + + l.items = list.Items + return nil +} + +func (l *routeLoader) AddToGraph(g osgraph.Graph) error { + for i := range l.items { + routegraph.EnsureRouteNode(g, &l.items[i]) + } + + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/addr.go b/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/addr.go new file mode 100644 index 00000000..b686463c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/addr.go @@ -0,0 +1,176 @@ +package flagtypes + +import ( + "fmt" + "net" + "net/url" + "strconv" + "strings" +) + +// urlPrefixes is the list of string prefix values that may indicate a URL +// is present. +var urlPrefixes = []string{"http://", "https://", "tcp://"} + +// Addr is a flag type that attempts to load a host, IP, host:port, or +// URL value from a string argument. It tracks whether the value was set +// and allows the caller to provide defaults for the scheme and port. +type Addr struct { + // Specified by the caller + DefaultScheme string + DefaultPort int + AllowPrefix bool + + // Provided will be true if Set is invoked + Provided bool + // Value is the exact value provided on the flag + Value string + + // URL represents the user input. The Host field is guaranteed + // to be set if Provided is true + URL *url.URL + // Host is the hostname or IP portion of the user input + Host string + // IPv6Host is true if the hostname appears to be an IPv6 input + IPv6Host bool + // Port is the port portion of the user input. Will be 0 if no port was found + // and no default port could be established. + Port int +} + +// Default creates a new Address with the value set +func (a Addr) Default() Addr { + if err := a.Set(a.Value); err != nil { + panic(err) + } + a.Provided = false + return a +} + +// String returns the string representation of the Addr +func (a *Addr) String() string { + if a.URL == nil { + return a.Value + } + return a.URL.String() +} + +// Set attempts to set a string value to an address +func (a *Addr) Set(value string) error { + scheme := a.DefaultScheme + if len(scheme) == 0 { + scheme = "tcp" + } + addr := &url.URL{ + Scheme: scheme, + } + + switch { + case a.isURL(value): + parsed, err := url.Parse(value) + if err != nil { + return fmt.Errorf("not a valid URL: %v", err) + } + if !a.AllowPrefix { + parsed.Path = "" + } + parsed.RawQuery = "" + parsed.Fragment = "" + + if strings.Contains(parsed.Host, ":") { + host, port, err := net.SplitHostPort(parsed.Host) + if err != nil { + return fmt.Errorf("not a valid host:port: %v", err) + } + portNum, err := strconv.ParseUint(port, 10, 64) + if err != nil { + return fmt.Errorf("not a valid port: %v", err) + } + a.Host = host + a.Port = int(portNum) + + } else { + port := 0 + switch parsed.Scheme { + case "http": + port = 80 + case "https": + port = 443 + default: + return fmt.Errorf("no port specified") + } + a.Host = parsed.Host + a.Port = port + } + addr = parsed + + case isIPv6Host(value): + a.Host = value + a.Port = a.DefaultPort + + case strings.Contains(value, ":"): + host, port, err := net.SplitHostPort(value) + if err != nil { + return fmt.Errorf("not a valid host:port: %v", err) + } + portNum, err := strconv.ParseUint(port, 10, 64) + if err != nil { + return fmt.Errorf("not a valid port: %v", err) + } + a.Host = host + a.Port = int(portNum) + + default: + port := a.DefaultPort + if port == 0 { + switch a.DefaultScheme { + case "http": + port = 80 + case "https": + port = 443 + default: + return fmt.Errorf("no port specified") + } + } + a.Host = value + a.Port = port + } + addr.Host = net.JoinHostPort(a.Host, strconv.FormatInt(int64(a.Port), 10)) + + if value != a.Value { + a.Provided = true + } + a.URL = addr + a.IPv6Host = isIPv6Host(a.Host) + a.Value = value + + return nil +} + +// Type returns a string representation of what kind of value this is +func (a *Addr) Type() string { + return "string" +} + +// isURL returns true if the provided value appears to be a valid URL. +func (a *Addr) isURL(value string) bool { + prefixes := urlPrefixes + if a.DefaultScheme != "" { + prefixes = append(prefixes, fmt.Sprintf("%s://", a.DefaultScheme)) + } + for _, p := range prefixes { + if strings.HasPrefix(value, p) { + return true + } + } + return false +} + +// isIPv6Host returns true if the value appears to be an IPv6 host string (that does +// not include a port). +func isIPv6Host(value string) bool { + if strings.HasPrefix(value, "[") { + return false + } + return strings.Contains(value, "%") || strings.Count(value, ":") > 1 +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/doc.go b/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/doc.go new file mode 100644 index 00000000..caca72f1 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/doc.go @@ -0,0 +1,3 @@ +// Package flagtypes provides types that implement the pflags.Value interface for +// converting command line flags to objects. +package flagtypes diff --git a/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/glog.go b/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/glog.go new file mode 100644 index 00000000..6d265545 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/glog.go @@ -0,0 +1,30 @@ +package flagtypes + +import ( + "flag" + + "github.com/golang/glog" + "github.com/spf13/pflag" +) + +// GLog binds the log flags from the default Google "flag" package into a pflag.FlagSet. +func GLog(flags *pflag.FlagSet) { + from := flag.CommandLine + if flag := from.Lookup("v"); flag != nil { + level := flag.Value.(*glog.Level) + levelPtr := (*int32)(level) + flags.Int32Var(levelPtr, "loglevel", 0, "Set the level of log output (0-10)") + } + if flag := from.Lookup("vmodule"); flag != nil { + value := flag.Value + flags.Var(pflagValue{value}, "logspec", "Set per module logging with file|pattern=LEVEL,...") + } +} + +type pflagValue struct { + flag.Value +} + +func (pflagValue) Type() string { + return "string" +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/net.go b/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/net.go new file mode 100644 index 00000000..f939111f --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/flagtypes/net.go @@ -0,0 +1,59 @@ +package flagtypes + +import ( + "fmt" + "net" + "strings" +) + +// lifted from kubernetes/pkg/util/net.go. same flags vs pflags problem as we had with StringList + +// IP adapts net.IP for use as a flag. +type IP net.IP + +func (ip IP) String() string { + return net.IP(ip).String() +} + +func (ip *IP) Set(value string) error { + *ip = IP(net.ParseIP(strings.TrimSpace(value))) + if *ip == nil { + return fmt.Errorf("invalid IP address: '%s'", value) + } + return nil +} + +// Type returns a string representation of what kind of argument this is +func (ip *IP) Type() string { + return "cmd.flagtypes.IP" +} + +// IPNet adapts net.IPNet for use as a flag. +type IPNet net.IPNet + +func DefaultIPNet(value string) IPNet { + ret := IPNet{} + if err := ret.Set(value); err != nil { + panic(err) + } + return ret +} + +func (ipnet IPNet) String() string { + n := net.IPNet(ipnet) + return n.String() +} + +func (ipnet *IPNet) Set(value string) error { + _, n, err := net.ParseCIDR(strings.TrimSpace(value)) + if err != nil { + return err + } + *ipnet = IPNet(*n) + return nil +} + +// Type returns a string representation of what kind of argument this is +func (ipnet *IPNet) Type() string { + return "cmd.flagtypes.IPNet" +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/cached_discovery.go b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/cached_discovery.go new file mode 100644 index 00000000..731acbd7 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/cached_discovery.go @@ -0,0 +1,136 @@ +package clientcmd + +import ( + "errors" + "io/ioutil" + "os" + "path/filepath" + "time" + + "github.com/golang/glog" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/typed/discovery" + "k8s.io/kubernetes/pkg/runtime" +) + +// CachedDiscoveryClient implements the functions that discovery server-supported API groups, +// versions and resources. +type CachedDiscoveryClient struct { + discovery.DiscoveryInterface + + // cacheDirectory is the directory where discovery docs are held. It must be unique per host:port combination to work well. + cacheDirectory string + + // ttl is how long the cache should be considered valid + ttl time.Duration +} + +// ServerResourcesForGroupVersion returns the supported resources for a group and version. +func (d *CachedDiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (*unversioned.APIResourceList, error) { + filename := filepath.Join(d.cacheDirectory, groupVersion, "serverresources.json") + cachedBytes, err := d.getCachedFile(filename) + // don't fail on errors, we either don't have a file or won't be able to run the cached check. Either way we can fallback. + if err == nil { + cachedResources := &unversioned.APIResourceList{} + if err := runtime.DecodeInto(kapi.Codecs.UniversalDecoder(), cachedBytes, cachedResources); err == nil { + glog.V(6).Infof("returning cached discovery info from %v", filename) + return cachedResources, nil + } + } + + liveResources, err := d.DiscoveryInterface.ServerResourcesForGroupVersion(groupVersion) + if err != nil { + return liveResources, err + } + + if err := d.writeCachedFile(filename, liveResources); err != nil { + glog.V(3).Infof("failed to write cache to %v due to %v", filename, err) + } + + return liveResources, nil +} + +// ServerResources returns the supported resources for all groups and versions. +func (d *CachedDiscoveryClient) ServerResources() (map[string]*unversioned.APIResourceList, error) { + apiGroups, err := d.ServerGroups() + if err != nil { + return nil, err + } + groupVersions := unversioned.ExtractGroupVersions(apiGroups) + result := map[string]*unversioned.APIResourceList{} + for _, groupVersion := range groupVersions { + resources, err := d.ServerResourcesForGroupVersion(groupVersion) + if err != nil { + return nil, err + } + result[groupVersion] = resources + } + return result, nil +} + +func (d *CachedDiscoveryClient) ServerGroups() (*unversioned.APIGroupList, error) { + filename := filepath.Join(d.cacheDirectory, "servergroups.json") + cachedBytes, err := d.getCachedFile(filename) + // don't fail on errors, we either don't have a file or won't be able to run the cached check. Either way we can fallback. + if err == nil { + cachedGroups := &unversioned.APIGroupList{} + if err := runtime.DecodeInto(kapi.Codecs.UniversalDecoder(), cachedBytes, cachedGroups); err == nil { + glog.V(6).Infof("returning cached discovery info from %v", filename) + return cachedGroups, nil + } + } + + liveGroups, err := d.DiscoveryInterface.ServerGroups() + if err != nil { + return liveGroups, err + } + + if err := d.writeCachedFile(filename, liveGroups); err != nil { + glog.V(3).Infof("failed to write cache to %v due to %v", filename, err) + } + + return liveGroups, nil +} + +func (d *CachedDiscoveryClient) getCachedFile(filename string) ([]byte, error) { + file, err := os.Open(filename) + if err != nil { + return nil, err + } + + fileInfo, err := file.Stat() + if err != nil { + return nil, err + } + if time.Now().After(fileInfo.ModTime().Add(d.ttl)) { + return nil, errors.New("cache expired") + } + + // the cache is present and its valid. Try to read and use it. + cachedBytes, err := ioutil.ReadAll(file) + if err != nil { + return nil, err + } + + return cachedBytes, nil +} + +func (d *CachedDiscoveryClient) writeCachedFile(filename string, obj runtime.Object) error { + if err := os.MkdirAll(filepath.Dir(filename), 0755); err != nil { + return err + } + + bytes, err := runtime.Encode(kapi.Codecs.LegacyCodec(), obj) + if err != nil { + return err + } + + return ioutil.WriteFile(filename, bytes, 0755) +} + +// NewCachedDiscoveryClient creates a new DiscoveryClient. cacheDirectory is the directory where discovery docs are held. It must be unique per host:port combination to work well. +func NewCachedDiscoveryClient(delegate discovery.DiscoveryInterface, cacheDirectory string, ttl time.Duration) *CachedDiscoveryClient { + return &CachedDiscoveryClient{DiscoveryInterface: delegate, cacheDirectory: cacheDirectory, ttl: ttl} +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/clientcmd.go b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/clientcmd.go new file mode 100644 index 00000000..4e1e3ab2 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/clientcmd.go @@ -0,0 +1,247 @@ +package clientcmd + +import ( + "fmt" + "io/ioutil" + "strings" + + "github.com/golang/glog" + "github.com/spf13/pflag" + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/restclient" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + + osclient "github.com/openshift/origin/pkg/client" + "github.com/openshift/origin/pkg/cmd/flagtypes" + "github.com/openshift/origin/pkg/cmd/util" +) + +const ConfigSyntax = " --master=" + +// Config contains all the necessary bits for client configuration +type Config struct { + // MasterAddr is the address the master can be reached on (host, host:port, or URL). + MasterAddr flagtypes.Addr + // KubernetesAddr is the address of the Kubernetes server (host, host:port, or URL). + // If omitted defaults to the master. + KubernetesAddr flagtypes.Addr + // CommonConfig is the shared base config for both the OpenShift config and Kubernetes config + CommonConfig restclient.Config + // Namespace is the namespace to act in + Namespace string + + // If set, allow kubeconfig file loading + FromFile bool + // If true, no environment is loaded (for testing, primarily) + SkipEnv bool + clientConfig clientcmd.ClientConfig +} + +// NewConfig returns a new configuration +func NewConfig() *Config { + return &Config{ + MasterAddr: flagtypes.Addr{Value: "localhost:8080", DefaultScheme: "http", DefaultPort: 8080, AllowPrefix: true}.Default(), + KubernetesAddr: flagtypes.Addr{Value: "localhost:8080", DefaultScheme: "http", DefaultPort: 8080}.Default(), + CommonConfig: restclient.Config{}, + } +} + +// AnonymousClientConfig returns a copy of the given config with all user credentials (cert/key, bearer token, and username/password) removed +func AnonymousClientConfig(config *restclient.Config) restclient.Config { + // copy only known safe fields + // TODO: expose a copy method on the config that is "auth free" + return restclient.Config{ + Host: config.Host, + APIPath: config.APIPath, + Prefix: config.Prefix, + ContentConfig: config.ContentConfig, + TLSClientConfig: restclient.TLSClientConfig{ + CAFile: config.TLSClientConfig.CAFile, + CAData: config.TLSClientConfig.CAData, + }, + RateLimiter: config.RateLimiter, + Insecure: config.Insecure, + UserAgent: config.UserAgent, + Transport: config.Transport, + WrapTransport: config.WrapTransport, + QPS: config.QPS, + Burst: config.Burst, + } +} + +// BindClientConfigSecurityFlags adds flags for the supplied client config +func BindClientConfigSecurityFlags(config *restclient.Config, flags *pflag.FlagSet) { + flags.BoolVar(&config.Insecure, "insecure-skip-tls-verify", config.Insecure, "If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure.") + flags.StringVar(&config.CertFile, "client-certificate", config.CertFile, "Path to a client certificate file for TLS.") + flags.StringVar(&config.KeyFile, "client-key", config.KeyFile, "Path to a client key file for TLS.") + flags.StringVar(&config.CAFile, "certificate-authority", config.CAFile, "Path to a cert. file for the certificate authority") + flags.StringVar(&config.BearerToken, "token", config.BearerToken, "If present, the bearer token for this request.") +} + +// Bind binds configuration values to the passed flagset +func (cfg *Config) Bind(flags *pflag.FlagSet) { + flags.Var(&cfg.MasterAddr, "master", "The address the master can be reached on (host, host:port, or URL).") + flags.Var(&cfg.KubernetesAddr, "kubernetes", "The address of the Kubernetes server (host, host:port, or URL). If omitted defaults to the master.") + + if cfg.FromFile { + cfg.clientConfig = DefaultClientConfig(flags) + } else { + BindClientConfigSecurityFlags(&cfg.CommonConfig, flags) + } +} + +// BindToFile is used when this config will not be bound to flags, but should load the config file +// from disk if available. +func (cfg *Config) BindToFile() *Config { + cfg.clientConfig = DefaultClientConfig(pflag.NewFlagSet("empty", pflag.ContinueOnError)) + return cfg +} + +func EnvVars(host string, caData []byte, insecure bool, bearerTokenFile string) []api.EnvVar { + envvars := []api.EnvVar{ + {Name: "KUBERNETES_MASTER", Value: host}, + {Name: "OPENSHIFT_MASTER", Value: host}, + } + + if len(bearerTokenFile) > 0 { + envvars = append(envvars, api.EnvVar{Name: "BEARER_TOKEN_FILE", Value: bearerTokenFile}) + } + + if len(caData) > 0 { + envvars = append(envvars, api.EnvVar{Name: "OPENSHIFT_CA_DATA", Value: string(caData)}) + } else if insecure { + envvars = append(envvars, api.EnvVar{Name: "OPENSHIFT_INSECURE", Value: "true"}) + } + + return envvars +} + +func (cfg *Config) bindEnv() error { + // bypass loading from env + if cfg.SkipEnv { + return nil + } + var err error + + // callers may not use the config file if they have specified a master directly, for backwards + // compatibility with components that used to use env, switch to service account token, and have + // config defined in env. + _, masterSet := util.GetEnv("OPENSHIFT_MASTER") + specifiedMaster := masterSet || cfg.MasterAddr.Provided + + if cfg.clientConfig != nil && !specifiedMaster { + clientConfig, err := cfg.clientConfig.ClientConfig() + if err != nil { + return err + } + cfg.CommonConfig = *clientConfig + cfg.Namespace, _, err = cfg.clientConfig.Namespace() + if err != nil { + return err + } + + if !cfg.MasterAddr.Provided { + cfg.MasterAddr.Set(cfg.CommonConfig.Host) + } + if !cfg.KubernetesAddr.Provided { + cfg.KubernetesAddr.Set(cfg.CommonConfig.Host) + } + return nil + } + + // Legacy path - preserve env vars set on pods that previously were honored. + if value, ok := util.GetEnv("KUBERNETES_MASTER"); ok && !cfg.KubernetesAddr.Provided { + cfg.KubernetesAddr.Set(value) + } + if value, ok := util.GetEnv("OPENSHIFT_MASTER"); ok && !cfg.MasterAddr.Provided { + cfg.MasterAddr.Set(value) + } + if value, ok := util.GetEnv("BEARER_TOKEN"); ok && len(cfg.CommonConfig.BearerToken) == 0 { + cfg.CommonConfig.BearerToken = value + } + if value, ok := util.GetEnv("BEARER_TOKEN_FILE"); ok && len(cfg.CommonConfig.BearerToken) == 0 { + if tokenData, tokenErr := ioutil.ReadFile(value); tokenErr == nil { + cfg.CommonConfig.BearerToken = strings.TrimSpace(string(tokenData)) + if len(cfg.CommonConfig.BearerToken) == 0 { + err = fmt.Errorf("BEARER_TOKEN_FILE %q was empty", value) + } + } else { + err = fmt.Errorf("Error reading BEARER_TOKEN_FILE %q: %v", value, tokenErr) + } + } + + if value, ok := util.GetEnv("OPENSHIFT_CA_FILE"); ok && len(cfg.CommonConfig.CAFile) == 0 { + cfg.CommonConfig.CAFile = value + } else if value, ok := util.GetEnv("OPENSHIFT_CA_DATA"); ok && len(cfg.CommonConfig.CAData) == 0 { + cfg.CommonConfig.CAData = []byte(value) + } + + if value, ok := util.GetEnv("OPENSHIFT_CERT_FILE"); ok && len(cfg.CommonConfig.CertFile) == 0 { + cfg.CommonConfig.CertFile = value + } else if value, ok := util.GetEnv("OPENSHIFT_CERT_DATA"); ok && len(cfg.CommonConfig.CertData) == 0 { + cfg.CommonConfig.CertData = []byte(value) + } + + if value, ok := util.GetEnv("OPENSHIFT_KEY_FILE"); ok && len(cfg.CommonConfig.KeyFile) == 0 { + cfg.CommonConfig.KeyFile = value + } else if value, ok := util.GetEnv("OPENSHIFT_KEY_DATA"); ok && len(cfg.CommonConfig.KeyData) == 0 { + cfg.CommonConfig.KeyData = []byte(value) + } + + if value, ok := util.GetEnv("OPENSHIFT_INSECURE"); ok && len(value) != 0 { + cfg.CommonConfig.Insecure = value == "true" + } + + return err +} + +// KubeConfig returns the Kubernetes configuration +func (cfg *Config) KubeConfig() *restclient.Config { + err := cfg.bindEnv() + if err != nil { + glog.Error(err) + } + + kaddr := cfg.KubernetesAddr + if !kaddr.Provided { + kaddr = cfg.MasterAddr + } + + kConfig := cfg.CommonConfig + kConfig.Host = kaddr.URL.String() + + return &kConfig +} + +// OpenShiftConfig returns the OpenShift configuration +func (cfg *Config) OpenShiftConfig() *restclient.Config { + err := cfg.bindEnv() + if err != nil { + glog.Error(err) + } + + osConfig := cfg.CommonConfig + if len(osConfig.Host) == 0 || cfg.MasterAddr.Provided { + osConfig.Host = cfg.MasterAddr.String() + } + + return &osConfig +} + +// Clients returns an OpenShift and a Kubernetes client from a given configuration +func (cfg *Config) Clients() (osclient.Interface, kclient.Interface, error) { + cfg.bindEnv() + + kubeClient, err := kclient.New(cfg.KubeConfig()) + if err != nil { + return nil, nil, fmt.Errorf("Unable to configure Kubernetes client: %v", err) + } + + osClient, err := osclient.New(cfg.OpenShiftConfig()) + if err != nil { + return nil, nil, fmt.Errorf("Unable to configure Origin client: %v", err) + } + + return osClient, kubeClient, nil +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/clientconfig.go b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/clientconfig.go new file mode 100644 index 00000000..c152100f --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/clientconfig.go @@ -0,0 +1,29 @@ +package clientcmd + +import ( + "github.com/spf13/cobra" + "github.com/spf13/pflag" + + "github.com/openshift/origin/pkg/cmd/cli/config" + "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" +) + +func DefaultClientConfig(flags *pflag.FlagSet) clientcmd.ClientConfig { + loadingRules := config.NewOpenShiftClientConfigLoadingRules() + flags.StringVar(&loadingRules.ExplicitPath, config.OpenShiftConfigFlagName, "", "Path to the config file to use for CLI requests.") + cobra.MarkFlagFilename(flags, config.OpenShiftConfigFlagName) + + overrides := &clientcmd.ConfigOverrides{} + overrideFlags := clientcmd.RecommendedConfigOverrideFlags("") + overrideFlags.ContextOverrideFlags.Namespace.ShortName = "n" + overrideFlags.AuthOverrideFlags.Username.LongName = "" + overrideFlags.AuthOverrideFlags.Password.LongName = "" + clientcmd.BindOverrideFlags(overrides, flags, overrideFlags) + cobra.MarkFlagFilename(flags, overrideFlags.AuthOverrideFlags.ClientCertificate.LongName) + cobra.MarkFlagFilename(flags, overrideFlags.AuthOverrideFlags.ClientKey.LongName) + cobra.MarkFlagFilename(flags, overrideFlags.ClusterOverrideFlags.CertificateAuthority.LongName) + + clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, overrides) + + return clientConfig +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/errors.go b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/errors.go new file mode 100644 index 00000000..f10006fd --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/errors.go @@ -0,0 +1,108 @@ +package clientcmd + +import ( + "errors" + "fmt" + "strings" + + kerrors "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" +) + +const ( + unknownReason = iota + noServerFoundReason + certificateAuthorityUnknownReason + configurationInvalidReason + tlsOversizedRecordReason + + certificateAuthorityUnknownMsg = "The server uses a certificate signed by unknown authority. You may need to use the --certificate-authority flag to provide the path to a certificate file for the certificate authority, or --insecure-skip-tls-verify to bypass the certificate check and use insecure connections." + notConfiguredMsg = `The client is not configured. You need to run the login command in order to create a default config for your server and credentials: + oc login +You can also run this command again providing the path to a config file directly, either through the --config flag of the KUBECONFIG environment variable. +` + tlsOversizedRecordMsg = `Unable to connect to %[2]s using TLS: %[1]s. +Ensure the specified server supports HTTPS.` +) + +// GetPrettyMessageFor prettifys the message of the provided error +func GetPrettyMessageFor(err error) string { + return GetPrettyMessageForServer(err, "") +} + +// GetPrettyMessageForServer prettifys the message of the provided error +func GetPrettyMessageForServer(err error, serverName string) string { + if err == nil { + return "" + } + + reason := detectReason(err) + + switch reason { + case noServerFoundReason: + return notConfiguredMsg + + case certificateAuthorityUnknownReason: + return certificateAuthorityUnknownMsg + + case tlsOversizedRecordReason: + if len(serverName) == 0 { + serverName = "server" + } + return fmt.Sprintf(tlsOversizedRecordMsg, err, serverName) + } + + return err.Error() +} + +// GetPrettyErrorFor prettifys the message of the provided error +func GetPrettyErrorFor(err error) error { + return GetPrettyErrorForServer(err, "") +} + +// GetPrettyErrorForServer prettifys the message of the provided error +func GetPrettyErrorForServer(err error, serverName string) error { + return errors.New(GetPrettyMessageForServer(err, serverName)) +} + +// IsNoServerFound checks whether the provided error is a 'no server found' error or not +func IsNoServerFound(err error) bool { + return detectReason(err) == noServerFoundReason +} + +// IsConfigurationInvalid checks whether the provided error is a 'invalid configuration' error or not +func IsConfigurationInvalid(err error) bool { + return detectReason(err) == configurationInvalidReason +} + +// IsCertificateAuthorityUnknown checks whether the provided error is a 'certificate authority unknown' error or not +func IsCertificateAuthorityUnknown(err error) bool { + return detectReason(err) == certificateAuthorityUnknownReason +} + +// IsForbidden checks whether the provided error is a 'forbidden' error or not +func IsForbidden(err error) bool { + return kerrors.IsForbidden(err) +} + +// IsTLSOversizedRecord checks whether the provided error is a url.Error +// with "tls: oversized record received", which usually means TLS not supported. +func IsTLSOversizedRecord(err error) bool { + return detectReason(err) == tlsOversizedRecordReason +} + +func detectReason(err error) int { + if err != nil { + switch { + case strings.Contains(err.Error(), "certificate signed by unknown authority"): + return certificateAuthorityUnknownReason + case strings.Contains(err.Error(), "no server defined"): + return noServerFoundReason + case clientcmd.IsConfigurationInvalid(err): + return configurationInvalidReason + case strings.Contains(err.Error(), "tls: oversized record received"): + return tlsOversizedRecordReason + } + } + return unknownReason +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/factory.go b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/factory.go new file mode 100644 index 00000000..6aed4688 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/factory.go @@ -0,0 +1,1071 @@ +package clientcmd + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "io/ioutil" + "os" + "path/filepath" + "regexp" + "sort" + "strconv" + "strings" + "time" + + "github.com/blang/semver" + "github.com/emicklei/go-restful/swagger" + "github.com/golang/glog" + "github.com/spf13/pflag" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/apis/batch" + "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/client/restclient" + "k8s.io/kubernetes/pkg/client/typed/discovery" + "k8s.io/kubernetes/pkg/client/typed/dynamic" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + kclientcmd "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" + kclientcmdapi "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" + "k8s.io/kubernetes/pkg/controller" + "k8s.io/kubernetes/pkg/kubectl" + cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/kubectl/resource" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/homedir" + + "github.com/openshift/origin/pkg/api/latest" + "github.com/openshift/origin/pkg/api/restmapper" + authorizationapi "github.com/openshift/origin/pkg/authorization/api" + authorizationreaper "github.com/openshift/origin/pkg/authorization/reaper" + buildapi "github.com/openshift/origin/pkg/build/api" + buildcmd "github.com/openshift/origin/pkg/build/cmd" + buildutil "github.com/openshift/origin/pkg/build/util" + "github.com/openshift/origin/pkg/client" + "github.com/openshift/origin/pkg/cmd/cli/describe" + "github.com/openshift/origin/pkg/cmd/util" + deployapi "github.com/openshift/origin/pkg/deploy/api" + deploycmd "github.com/openshift/origin/pkg/deploy/cmd" + deployutil "github.com/openshift/origin/pkg/deploy/util" + imageapi "github.com/openshift/origin/pkg/image/api" + routegen "github.com/openshift/origin/pkg/route/generator" + userapi "github.com/openshift/origin/pkg/user/api" + authenticationreaper "github.com/openshift/origin/pkg/user/reaper" +) + +// New creates a default Factory for commands that should share identical server +// connection behavior. Most commands should use this method to get a factory. +func New(flags *pflag.FlagSet) *Factory { + // TODO refactor this upstream: + // DefaultCluster should not be a global + // A call to ClientConfig() should always return the best clientCfg possible + // even if an error was returned, and let the caller decide what to do + kclientcmd.DefaultCluster.Server = "" + + // TODO: there should be two client configs, one for OpenShift, and one for Kubernetes + clientConfig := DefaultClientConfig(flags) + clientConfig = defaultingClientConfig{clientConfig} + f := NewFactory(clientConfig) + f.BindFlags(flags) + + return f +} + +// defaultingClientConfig detects whether the provided config is the default, and if +// so returns an error that indicates the user should set up their config. +type defaultingClientConfig struct { + nested kclientcmd.ClientConfig +} + +// RawConfig calls the nested method +func (c defaultingClientConfig) RawConfig() (kclientcmdapi.Config, error) { + return c.nested.RawConfig() +} + +// Namespace calls the nested method, and if an empty config error is returned +// it checks for the same default as kubectl - the value of POD_NAMESPACE or +// "default". +func (c defaultingClientConfig) Namespace() (string, bool, error) { + namespace, ok, err := c.nested.Namespace() + if err == nil { + return namespace, ok, nil + } + if !kclientcmd.IsEmptyConfig(err) { + return "", false, err + } + + // This way assumes you've set the POD_NAMESPACE environment variable using the downward API. + // This check has to be done first for backwards compatibility with the way InClusterConfig was originally set up + if ns := os.Getenv("POD_NAMESPACE"); ns != "" { + return ns, true, nil + } + + // Fall back to the namespace associated with the service account token, if available + if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil { + if ns := strings.TrimSpace(string(data)); len(ns) > 0 { + return ns, true, nil + } + } + + return api.NamespaceDefault, false, nil +} + +// ConfigAccess implements ClientConfig +func (c defaultingClientConfig) ConfigAccess() kclientcmd.ConfigAccess { + return c.nested.ConfigAccess() +} + +type errConfigurationMissing struct { + err error +} + +func (e errConfigurationMissing) Error() string { + return fmt.Sprintf("%v", e.err) +} + +func IsConfigurationMissing(err error) bool { + switch err.(type) { + case errConfigurationMissing: + return true + } + return kclientcmd.IsContextNotFound(err) +} + +// ClientConfig returns a complete client config +func (c defaultingClientConfig) ClientConfig() (*restclient.Config, error) { + cfg, err := c.nested.ClientConfig() + if err == nil { + return cfg, nil + } + + if !kclientcmd.IsEmptyConfig(err) { + return nil, err + } + + // TODO: need to expose inClusterConfig upstream and use that + if icc, err := restclient.InClusterConfig(); err == nil { + glog.V(4).Infof("Using in-cluster configuration") + return icc, nil + } + + return nil, errConfigurationMissing{fmt.Errorf(`Missing or incomplete configuration info. Please login or point to an existing, complete config file: + + 1. Via the command-line flag --config + 2. Via the KUBECONFIG environment variable + 3. In your home directory as ~/.kube/config + +To view or setup config directly use the 'config' command.`)} +} + +// Factory provides common options for OpenShift commands +type Factory struct { + *cmdutil.Factory + OpenShiftClientConfig kclientcmd.ClientConfig + clients *clientCache +} + +func DefaultGenerators(cmdName string) map[string]kubectl.Generator { + generators := map[string]map[string]kubectl.Generator{} + generators["run"] = map[string]kubectl.Generator{ + "deploymentconfig/v1": deploycmd.BasicDeploymentConfigController{}, + "run-controller/v1": kubectl.BasicReplicationController{}, // legacy alias for run/v1 + } + generators["expose"] = map[string]kubectl.Generator{ + "route/v1": routegen.RouteGenerator{}, + } + + return generators[cmdName] +} + +// NewFactory creates an object that holds common methods across all OpenShift commands +func NewFactory(clientConfig kclientcmd.ClientConfig) *Factory { + restMapper := registered.RESTMapper() + + clients := &clientCache{ + clients: make(map[string]*client.Client), + configs: make(map[string]*restclient.Config), + loader: clientConfig, + } + + w := &Factory{ + Factory: cmdutil.NewFactory(clientConfig), + OpenShiftClientConfig: clientConfig, + clients: clients, + } + + w.Object = func(bool) (meta.RESTMapper, runtime.ObjectTyper) { + defaultMapper := ShortcutExpander{RESTMapper: kubectl.ShortcutExpander{RESTMapper: restMapper}} + defaultTyper := api.Scheme + + // Output using whatever version was negotiated in the client cache. The + // version we decode with may not be the same as what the server requires. + cfg, err := clients.ClientConfigForVersion(nil) + if err != nil { + return defaultMapper, defaultTyper + } + + cmdApiVersion := unversioned.GroupVersion{} + if cfg.GroupVersion != nil { + cmdApiVersion = *cfg.GroupVersion + } + + // at this point we've negotiated and can get the client + oclient, err := clients.ClientForVersion(nil) + if err != nil { + return defaultMapper, defaultTyper + } + + cacheDir := computeDiscoverCacheDir(filepath.Join(homedir.HomeDir(), ".kube"), cfg.Host) + cachedDiscoverClient := NewCachedDiscoveryClient(client.NewDiscoveryClient(oclient.RESTClient), cacheDir, time.Duration(10*time.Minute)) + + // if we can't find the server version or its too old to have Kind information in the discovery doc, skip the discovery RESTMapper + // and use our hardcoded levels + mapper := registered.RESTMapper() + if serverVersion, err := cachedDiscoverClient.ServerVersion(); err == nil && useDiscoveryRESTMapper(serverVersion.GitVersion) { + mapper = restmapper.NewDiscoveryRESTMapper(cachedDiscoverClient) + } + mapper = NewShortcutExpander(cachedDiscoverClient, kubectl.ShortcutExpander{RESTMapper: mapper}) + return kubectl.OutputVersionMapper{RESTMapper: mapper, OutputVersions: []unversioned.GroupVersion{cmdApiVersion}}, api.Scheme + } + + w.UnstructuredObject = func() (meta.RESTMapper, runtime.ObjectTyper, error) { + // load a discovery client from the default config + cfg, err := clients.ClientConfigForVersion(nil) + if err != nil { + return nil, nil, err + } + dc, err := discovery.NewDiscoveryClientForConfig(cfg) + if err != nil { + return nil, nil, err + } + cacheDir := computeDiscoverCacheDir(filepath.Join(homedir.HomeDir(), ".kube"), cfg.Host) + cachedDiscoverClient := NewCachedDiscoveryClient(client.NewDiscoveryClient(dc.RESTClient), cacheDir, time.Duration(10*time.Minute)) + + // enumerate all group resources + groupResources, err := discovery.GetAPIGroupResources(cachedDiscoverClient) + if err != nil { + return nil, nil, err + } + + // Register unknown APIs as third party for now to make + // validation happy. TODO perhaps make a dynamic schema + // validator to avoid this. + for _, group := range groupResources { + for _, version := range group.Group.Versions { + gv := unversioned.GroupVersion{Group: group.Group.Name, Version: version.Version} + if !registered.IsRegisteredVersion(gv) { + registered.AddThirdPartyAPIGroupVersions(gv) + } + } + } + + // construct unstructured mapper and typer + mapper := discovery.NewRESTMapper(groupResources, meta.InterfacesForUnstructured) + typer := discovery.NewUnstructuredObjectTyper(groupResources) + return NewShortcutExpander(cachedDiscoverClient, kubectl.ShortcutExpander{RESTMapper: mapper}), typer, nil + } + + kClientForMapping := w.Factory.ClientForMapping + w.ClientForMapping = func(mapping *meta.RESTMapping) (resource.RESTClient, error) { + if latest.OriginKind(mapping.GroupVersionKind) { + mappingVersion := mapping.GroupVersionKind.GroupVersion() + client, err := clients.ClientForVersion(&mappingVersion) + if err != nil { + return nil, err + } + return client.RESTClient, nil + } + return kClientForMapping(mapping) + } + + kUnstructuredClientForMapping := w.Factory.UnstructuredClientForMapping + w.UnstructuredClientForMapping = func(mapping *meta.RESTMapping) (resource.RESTClient, error) { + if latest.OriginKind(mapping.GroupVersionKind) { + cfg, err := clientConfig.ClientConfig() + if err != nil { + return nil, err + } + if err := client.SetOpenShiftDefaults(cfg); err != nil { + return nil, err + } + cfg.APIPath = "/apis" + if mapping.GroupVersionKind.Group == api.GroupName { + cfg.APIPath = "/oapi" + } + gv := mapping.GroupVersionKind.GroupVersion() + cfg.ContentConfig = dynamic.ContentConfig() + cfg.GroupVersion = &gv + return restclient.RESTClientFor(cfg) + } + return kUnstructuredClientForMapping(mapping) + } + + // Save original Describer function + kDescriberFunc := w.Factory.Describer + w.Describer = func(mapping *meta.RESTMapping) (kubectl.Describer, error) { + if latest.OriginKind(mapping.GroupVersionKind) { + oClient, kClient, err := w.Clients() + if err != nil { + return nil, fmt.Errorf("unable to create client %s: %v", mapping.GroupVersionKind.Kind, err) + } + + mappingVersion := mapping.GroupVersionKind.GroupVersion() + cfg, err := clients.ClientConfigForVersion(&mappingVersion) + if err != nil { + return nil, fmt.Errorf("unable to load a client %s: %v", mapping.GroupVersionKind.Kind, err) + } + + describer, ok := describe.DescriberFor(mapping.GroupVersionKind.GroupKind(), oClient, kClient, cfg.Host) + if !ok { + return nil, fmt.Errorf("no description has been implemented for %q", mapping.GroupVersionKind.Kind) + } + return describer, nil + } + return kDescriberFunc(mapping) + } + kScalerFunc := w.Factory.Scaler + w.Scaler = func(mapping *meta.RESTMapping) (kubectl.Scaler, error) { + if mapping.GroupVersionKind.GroupKind() == deployapi.Kind("DeploymentConfig") { + oc, kc, err := w.Clients() + if err != nil { + return nil, err + } + return deploycmd.NewDeploymentConfigScaler(oc, kc), nil + } + return kScalerFunc(mapping) + } + kReaperFunc := w.Factory.Reaper + w.Reaper = func(mapping *meta.RESTMapping) (kubectl.Reaper, error) { + switch mapping.GroupVersionKind.GroupKind() { + case deployapi.Kind("DeploymentConfig"): + oc, kc, err := w.Clients() + if err != nil { + return nil, err + } + return deploycmd.NewDeploymentConfigReaper(oc, kc), nil + case authorizationapi.Kind("Role"): + oc, _, err := w.Clients() + if err != nil { + return nil, err + } + return authorizationreaper.NewRoleReaper(oc, oc), nil + case authorizationapi.Kind("ClusterRole"): + oc, _, err := w.Clients() + if err != nil { + return nil, err + } + return authorizationreaper.NewClusterRoleReaper(oc, oc, oc), nil + case userapi.Kind("User"): + oc, kc, err := w.Clients() + if err != nil { + return nil, err + } + return authenticationreaper.NewUserReaper( + client.UsersInterface(oc), + client.GroupsInterface(oc), + client.ClusterRoleBindingsInterface(oc), + client.RoleBindingsNamespacer(oc), + kclient.SecurityContextConstraintsInterface(kc), + ), nil + case userapi.Kind("Group"): + oc, kc, err := w.Clients() + if err != nil { + return nil, err + } + return authenticationreaper.NewGroupReaper( + client.GroupsInterface(oc), + client.ClusterRoleBindingsInterface(oc), + client.RoleBindingsNamespacer(oc), + kclient.SecurityContextConstraintsInterface(kc), + ), nil + case buildapi.Kind("BuildConfig"): + oc, _, err := w.Clients() + if err != nil { + return nil, err + } + return buildcmd.NewBuildConfigReaper(oc), nil + } + return kReaperFunc(mapping) + } + kGenerators := w.Factory.Generators + w.Generators = func(cmdName string) map[string]kubectl.Generator { + originGenerators := DefaultGenerators(cmdName) + kubeGenerators := kGenerators(cmdName) + + ret := map[string]kubectl.Generator{} + for k, v := range kubeGenerators { + ret[k] = v + } + for k, v := range originGenerators { + ret[k] = v + } + return ret + } + kMapBasedSelectorForObjectFunc := w.Factory.MapBasedSelectorForObject + w.MapBasedSelectorForObject = func(object runtime.Object) (string, error) { + switch t := object.(type) { + case *deployapi.DeploymentConfig: + return kubectl.MakeLabels(t.Spec.Selector), nil + default: + return kMapBasedSelectorForObjectFunc(object) + } + } + kPortsForObjectFunc := w.Factory.PortsForObject + w.PortsForObject = func(object runtime.Object) ([]string, error) { + switch t := object.(type) { + case *deployapi.DeploymentConfig: + return getPorts(t.Spec.Template.Spec), nil + default: + return kPortsForObjectFunc(object) + } + } + kLogsForObjectFunc := w.Factory.LogsForObject + w.LogsForObject = func(object, options runtime.Object) (*restclient.Request, error) { + switch t := object.(type) { + case *deployapi.DeploymentConfig: + dopts, ok := options.(*deployapi.DeploymentLogOptions) + if !ok { + return nil, errors.New("provided options object is not a DeploymentLogOptions") + } + oc, _, err := w.Clients() + if err != nil { + return nil, err + } + return oc.DeploymentLogs(t.Namespace).Get(t.Name, *dopts), nil + case *buildapi.Build: + bopts, ok := options.(*buildapi.BuildLogOptions) + if !ok { + return nil, errors.New("provided options object is not a BuildLogOptions") + } + if bopts.Version != nil { + return nil, errors.New("cannot specify a version and a build") + } + oc, _, err := w.Clients() + if err != nil { + return nil, err + } + return oc.BuildLogs(t.Namespace).Get(t.Name, *bopts), nil + case *buildapi.BuildConfig: + bopts, ok := options.(*buildapi.BuildLogOptions) + if !ok { + return nil, errors.New("provided options object is not a BuildLogOptions") + } + oc, _, err := w.Clients() + if err != nil { + return nil, err + } + builds, err := oc.Builds(t.Namespace).List(api.ListOptions{}) + if err != nil { + return nil, err + } + builds.Items = buildapi.FilterBuilds(builds.Items, buildapi.ByBuildConfigPredicate(t.Name)) + if len(builds.Items) == 0 { + return nil, fmt.Errorf("no builds found for %q", t.Name) + } + if bopts.Version != nil { + // If a version has been specified, try to get the logs from that build. + desired := buildutil.BuildNameForConfigVersion(t.Name, int(*bopts.Version)) + return oc.BuildLogs(t.Namespace).Get(desired, *bopts), nil + } + sort.Sort(sort.Reverse(buildapi.BuildSliceByCreationTimestamp(builds.Items))) + return oc.BuildLogs(t.Namespace).Get(builds.Items[0].Name, *bopts), nil + default: + return kLogsForObjectFunc(object, options) + } + } + // Saves current resource name (or alias if any) in PrintOptions. Once saved, it will not be overwritten by the + // kubernetes resource alias look-up, as it will notice a non-empty value in `options.Kind` + w.Printer = func(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) { + if mapping != nil { + options.Kind = mapping.Resource + if alias, ok := resourceShortFormFor(mapping.Resource); ok { + options.Kind = alias + } + } + return describe.NewHumanReadablePrinter(options), nil + } + kCanBeExposed := w.Factory.CanBeExposed + w.CanBeExposed = func(kind unversioned.GroupKind) error { + if kind == deployapi.Kind("DeploymentConfig") { + return nil + } + return kCanBeExposed(kind) + } + kCanBeAutoscaled := w.Factory.CanBeAutoscaled + w.CanBeAutoscaled = func(kind unversioned.GroupKind) error { + if kind == deployapi.Kind("DeploymentConfig") { + return nil + } + return kCanBeAutoscaled(kind) + } + kAttachablePodForObjectFunc := w.Factory.AttachablePodForObject + w.AttachablePodForObject = func(object runtime.Object) (*api.Pod, error) { + switch t := object.(type) { + case *deployapi.DeploymentConfig: + _, kc, err := w.Clients() + if err != nil { + return nil, err + } + selector := labels.SelectorFromSet(t.Spec.Selector) + f := func(pods []*api.Pod) sort.Interface { return sort.Reverse(controller.ActivePods(pods)) } + pod, _, err := cmdutil.GetFirstPod(kc, t.Namespace, selector, 1*time.Minute, f) + return pod, err + default: + return kAttachablePodForObjectFunc(object) + } + } + kUpdatePodSpecForObject := w.Factory.UpdatePodSpecForObject + w.UpdatePodSpecForObject = func(obj runtime.Object, fn func(*api.PodSpec) error) (bool, error) { + switch t := obj.(type) { + case *deployapi.DeploymentConfig: + template := t.Spec.Template + if template == nil { + t.Spec.Template = template + template = &api.PodTemplateSpec{} + } + return true, fn(&template.Spec) + default: + return kUpdatePodSpecForObject(obj, fn) + } + } + kProtocolsForObject := w.Factory.ProtocolsForObject + w.ProtocolsForObject = func(object runtime.Object) (map[string]string, error) { + switch t := object.(type) { + case *deployapi.DeploymentConfig: + return getProtocols(t.Spec.Template.Spec), nil + default: + return kProtocolsForObject(object) + } + } + + kSwaggerSchemaFunc := w.Factory.SwaggerSchema + w.Factory.SwaggerSchema = func(gvk unversioned.GroupVersionKind) (*swagger.ApiDeclaration, error) { + if !latest.OriginKind(gvk) { + return kSwaggerSchemaFunc(gvk) + } + // TODO: we need to register the OpenShift API under the Kube group, and start returning the OpenShift + // group from the scheme. + oc, _, err := w.Clients() + if err != nil { + return nil, err + } + return w.OriginSwaggerSchema(oc.RESTClient, gvk.GroupVersion()) + } + + w.EditorEnvs = func() []string { + return []string{"OC_EDITOR", "EDITOR"} + } + w.PrintObjectSpecificMessage = func(obj runtime.Object, out io.Writer) {} + kPauseObjectFunc := w.Factory.PauseObject + w.Factory.PauseObject = func(object runtime.Object) (bool, error) { + switch t := object.(type) { + case *deployapi.DeploymentConfig: + if t.Spec.Paused { + return true, nil + } + t.Spec.Paused = true + oc, _, err := w.Clients() + if err != nil { + return false, err + } + _, err = oc.DeploymentConfigs(t.Namespace).Update(t) + // TODO: Pause the deployer containers. + return false, err + default: + return kPauseObjectFunc(object) + } + } + kResumeObjectFunc := w.Factory.ResumeObject + w.Factory.ResumeObject = func(object runtime.Object) (bool, error) { + switch t := object.(type) { + case *deployapi.DeploymentConfig: + if !t.Spec.Paused { + return true, nil + } + t.Spec.Paused = false + oc, _, err := w.Clients() + if err != nil { + return false, err + } + _, err = oc.DeploymentConfigs(t.Namespace).Update(t) + // TODO: Resume the deployer containers. + return false, err + default: + return kResumeObjectFunc(object) + } + } + kHistoryViewerFunc := w.Factory.HistoryViewer + w.Factory.HistoryViewer = func(mapping *meta.RESTMapping) (kubectl.HistoryViewer, error) { + switch mapping.GroupVersionKind.GroupKind() { + case deployapi.Kind("DeploymentConfig"): + oc, kc, err := w.Clients() + if err != nil { + return nil, err + } + return deploycmd.NewDeploymentConfigHistoryViewer(oc, kc), nil + } + return kHistoryViewerFunc(mapping) + } + kRollbackerFunc := w.Factory.Rollbacker + w.Factory.Rollbacker = func(mapping *meta.RESTMapping) (kubectl.Rollbacker, error) { + switch mapping.GroupVersionKind.GroupKind() { + case deployapi.Kind("DeploymentConfig"): + oc, _, err := w.Clients() + if err != nil { + return nil, err + } + return deploycmd.NewDeploymentConfigRollbacker(oc), nil + } + return kRollbackerFunc(mapping) + } + + return w +} + +// useDiscoveryRESTMapper checks the server version to see if its recent enough to have +// enough discovery information avaiable to reliably build a RESTMapper. If not, use the +// hardcoded mapper in this client (legacy behavior) +func useDiscoveryRESTMapper(serverVersion string) bool { + serverSemVer, err := semver.Parse(serverVersion[1:]) + if err != nil { + return false + } + if serverSemVer.LT(semver.MustParse("1.3.0")) { + return false + } + return true +} + +// overlyCautiousIllegalFileCharacters matches characters that *might* not be supported. Windows is really restrictive, so this is really restrictive +var overlyCautiousIllegalFileCharacters = regexp.MustCompile(`[^(\w/\.)]`) + +// computeDiscoverCacheDir takes the parentDir and the host and comes up with a "usually non-colliding" name. +func computeDiscoverCacheDir(parentDir, host string) string { + // strip the optional scheme from host if its there: + schemelessHost := strings.Replace(strings.Replace(host, "https://", "", 1), "http://", "", 1) + // now do a simple collapse of non-AZ09 characters. Collisions are possible but unlikely. Even if we do collide the problem is short lived + safeHost := overlyCautiousIllegalFileCharacters.ReplaceAllString(schemelessHost, "_") + + return filepath.Join(parentDir, safeHost) +} + +func getPorts(spec api.PodSpec) []string { + result := []string{} + for _, container := range spec.Containers { + for _, port := range container.Ports { + result = append(result, strconv.Itoa(int(port.ContainerPort))) + } + } + return result +} + +func getProtocols(spec api.PodSpec) map[string]string { + result := make(map[string]string) + for _, container := range spec.Containers { + for _, port := range container.Ports { + result[strconv.Itoa(int(port.ContainerPort))] = string(port.Protocol) + } + } + return result +} + +func ResourceMapper(f *Factory) *resource.Mapper { + mapper, typer := f.Object(false) + return &resource.Mapper{ + RESTMapper: mapper, + ObjectTyper: typer, + ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), + } +} + +// UpdateObjectEnvironment update the environment variables in object specification. +func (f *Factory) UpdateObjectEnvironment(obj runtime.Object, fn func(*[]api.EnvVar) error) (bool, error) { + switch t := obj.(type) { + case *buildapi.BuildConfig: + if t.Spec.Strategy.CustomStrategy != nil { + return true, fn(&t.Spec.Strategy.CustomStrategy.Env) + } + if t.Spec.Strategy.SourceStrategy != nil { + return true, fn(&t.Spec.Strategy.SourceStrategy.Env) + } + if t.Spec.Strategy.DockerStrategy != nil { + return true, fn(&t.Spec.Strategy.DockerStrategy.Env) + } + } + return false, fmt.Errorf("object does not contain any environment variables") +} + +// ExtractFileContents returns a map of keys to contents, false if the object cannot support such an +// operation, or an error. +func (f *Factory) ExtractFileContents(obj runtime.Object) (map[string][]byte, bool, error) { + switch t := obj.(type) { + case *api.Secret: + return t.Data, true, nil + case *api.ConfigMap: + out := make(map[string][]byte) + for k, v := range t.Data { + out[k] = []byte(v) + } + return out, true, nil + default: + return nil, false, nil + } +} + +// ApproximatePodTemplateForObject returns a pod template object for the provided source. +// It may return both an error and a object. It attempt to return the best possible template +// available at the current time. +func (w *Factory) ApproximatePodTemplateForObject(object runtime.Object) (*api.PodTemplateSpec, error) { + switch t := object.(type) { + case *imageapi.ImageStreamTag: + // create a minimal pod spec that uses the image referenced by the istag without any introspection + // it possible that we could someday do a better job introspecting it + return &api.PodTemplateSpec{ + Spec: api.PodSpec{ + RestartPolicy: api.RestartPolicyNever, + Containers: []api.Container{ + {Name: "container-00", Image: t.Image.DockerImageReference}, + }, + }, + }, nil + case *imageapi.ImageStreamImage: + // create a minimal pod spec that uses the image referenced by the istag without any introspection + // it possible that we could someday do a better job introspecting it + return &api.PodTemplateSpec{ + Spec: api.PodSpec{ + RestartPolicy: api.RestartPolicyNever, + Containers: []api.Container{ + {Name: "container-00", Image: t.Image.DockerImageReference}, + }, + }, + }, nil + case *deployapi.DeploymentConfig: + fallback := t.Spec.Template + + _, kc, err := w.Clients() + if err != nil { + return fallback, err + } + + latestDeploymentName := deployutil.LatestDeploymentNameForConfig(t) + deployment, err := kc.ReplicationControllers(t.Namespace).Get(latestDeploymentName) + if err != nil { + return fallback, err + } + + fallback = deployment.Spec.Template + + pods, err := kc.Pods(deployment.Namespace).List(api.ListOptions{LabelSelector: labels.SelectorFromSet(deployment.Spec.Selector)}) + if err != nil { + return fallback, err + } + + for i := range pods.Items { + pod := &pods.Items[i] + if fallback == nil || pod.CreationTimestamp.Before(fallback.CreationTimestamp) { + fallback = &api.PodTemplateSpec{ + ObjectMeta: pod.ObjectMeta, + Spec: pod.Spec, + } + } + } + return fallback, nil + + default: + pod, err := w.AttachablePodForObject(object) + if pod != nil { + return &api.PodTemplateSpec{ + ObjectMeta: pod.ObjectMeta, + Spec: pod.Spec, + }, err + } + switch t := object.(type) { + case *api.ReplicationController: + return t.Spec.Template, err + case *extensions.ReplicaSet: + return &t.Spec.Template, err + case *extensions.DaemonSet: + return &t.Spec.Template, err + case *batch.Job: + return &t.Spec.Template, err + } + return nil, err + } +} + +func (f *Factory) PodForResource(resource string, timeout time.Duration) (string, error) { + sortBy := func(pods []*api.Pod) sort.Interface { return sort.Reverse(controller.ActivePods(pods)) } + namespace, _, err := f.DefaultNamespace() + if err != nil { + return "", err + } + mapper, _ := f.Object(false) + resourceType, name, err := util.ResolveResource(api.Resource("pods"), resource, mapper) + if err != nil { + return "", err + } + + switch resourceType { + case api.Resource("pods"): + return name, nil + case api.Resource("replicationcontrollers"): + kc, err := f.Client() + if err != nil { + return "", err + } + rc, err := kc.ReplicationControllers(namespace).Get(name) + if err != nil { + return "", err + } + selector := labels.SelectorFromSet(rc.Spec.Selector) + pod, _, err := cmdutil.GetFirstPod(kc, namespace, selector, timeout, sortBy) + if err != nil { + return "", err + } + return pod.Name, nil + case deployapi.Resource("deploymentconfigs"): + oc, kc, err := f.Clients() + if err != nil { + return "", err + } + dc, err := oc.DeploymentConfigs(namespace).Get(name) + if err != nil { + return "", err + } + selector := labels.SelectorFromSet(dc.Spec.Selector) + pod, _, err := cmdutil.GetFirstPod(kc, namespace, selector, timeout, sortBy) + if err != nil { + return "", err + } + return pod.Name, nil + case extensions.Resource("daemonsets"): + kc, err := f.Client() + if err != nil { + return "", err + } + ds, err := kc.Extensions().DaemonSets(namespace).Get(name) + if err != nil { + return "", err + } + selector, err := unversioned.LabelSelectorAsSelector(ds.Spec.Selector) + if err != nil { + return "", err + } + pod, _, err := cmdutil.GetFirstPod(kc, namespace, selector, timeout, sortBy) + if err != nil { + return "", err + } + return pod.Name, nil + case extensions.Resource("jobs"): + kc, err := f.Client() + if err != nil { + return "", err + } + job, err := kc.Extensions().Jobs(namespace).Get(name) + if err != nil { + return "", err + } + return podNameForJob(job, kc, timeout, sortBy) + case batch.Resource("jobs"): + kc, err := f.Client() + if err != nil { + return "", err + } + job, err := kc.Batch().Jobs(namespace).Get(name) + if err != nil { + return "", err + } + return podNameForJob(job, kc, timeout, sortBy) + default: + return "", fmt.Errorf("remote shell for %s is not supported", resourceType) + } +} + +func podNameForJob(job *batch.Job, kc *kclient.Client, timeout time.Duration, sortBy func(pods []*api.Pod) sort.Interface) (string, error) { + selector, err := unversioned.LabelSelectorAsSelector(job.Spec.Selector) + if err != nil { + return "", err + } + pod, _, err := cmdutil.GetFirstPod(kc, job.Namespace, selector, timeout, sortBy) + if err != nil { + return "", err + } + return pod.Name, nil +} + +// Clients returns an OpenShift and Kubernetes client. +func (f *Factory) Clients() (*client.Client, *kclient.Client, error) { + kClient, err := f.Client() + if err != nil { + return nil, nil, err + } + osClient, err := f.clients.ClientForVersion(nil) + if err != nil { + return nil, nil, err + } + return osClient, kClient, nil +} + +// OriginSwaggerSchema returns a swagger API doc for an Origin schema under the /oapi prefix. +func (f *Factory) OriginSwaggerSchema(client *restclient.RESTClient, version unversioned.GroupVersion) (*swagger.ApiDeclaration, error) { + if version.Empty() { + return nil, fmt.Errorf("groupVersion cannot be empty") + } + body, err := client.Get().AbsPath("/").Suffix("swaggerapi", "oapi", version.Version).Do().Raw() + if err != nil { + return nil, err + } + var schema swagger.ApiDeclaration + err = json.Unmarshal(body, &schema) + if err != nil { + return nil, fmt.Errorf("got '%s': %v", string(body), err) + } + return &schema, nil +} + +// clientCache caches previously loaded clients for reuse. This is largely +// copied from upstream (because of typing) but reuses the negotiation logic. +// TODO: Consolidate this entire concept with upstream's ClientCache. +type clientCache struct { + loader kclientcmd.ClientConfig + clients map[string]*client.Client + configs map[string]*restclient.Config + defaultConfig *restclient.Config + // negotiatingClient is used only for negotiating versions with the server. + negotiatingClient *kclient.Client +} + +// ClientConfigForVersion returns the correct config for a server +func (c *clientCache) ClientConfigForVersion(version *unversioned.GroupVersion) (*restclient.Config, error) { + if c.defaultConfig == nil { + config, err := c.loader.ClientConfig() + if err != nil { + return nil, err + } + c.defaultConfig = config + } + // TODO: have a better config copy method + cacheKey := "" + if version != nil { + cacheKey = version.String() + } + if config, ok := c.configs[cacheKey]; ok { + return config, nil + } + if c.negotiatingClient == nil { + // TODO: We want to reuse the upstream negotiation logic, which is coupled + // to a concrete kube Client. The negotiation will ultimately try and + // build an unversioned URL using the config prefix to ask for supported + // server versions. If we use the default kube client config, the prefix + // will be /api, while we need to use the OpenShift prefix to ask for the + // OpenShift server versions. For now, set OpenShift defaults on the + // config to ensure the right prefix gets used. The client cache and + // negotiation logic should be refactored upstream to support downstream + // reuse so that we don't need to do any of this cache or negotiation + // duplication. + negotiatingConfig := *c.defaultConfig + client.SetOpenShiftDefaults(&negotiatingConfig) + negotiatingClient, err := kclient.New(&negotiatingConfig) + if err != nil { + return nil, err + } + c.negotiatingClient = negotiatingClient + } + config := *c.defaultConfig + negotiatedVersion, err := negotiateVersion(c.negotiatingClient, &config, version, latest.Versions) + if err != nil { + return nil, err + } + config.GroupVersion = negotiatedVersion + client.SetOpenShiftDefaults(&config) + c.configs[cacheKey] = &config + + // `version` does not necessarily equal `config.Version`. However, we know that we call this method again with + // `config.Version`, we should get the the config we've just built. + configCopy := config + c.configs[config.GroupVersion.String()] = &configCopy + + return &config, nil +} + +// ClientForVersion initializes or reuses a client for the specified version, or returns an +// error if that is not possible +func (c *clientCache) ClientForVersion(version *unversioned.GroupVersion) (*client.Client, error) { + cacheKey := "" + if version != nil { + cacheKey = version.String() + } + if client, ok := c.clients[cacheKey]; ok { + return client, nil + } + config, err := c.ClientConfigForVersion(version) + if err != nil { + return nil, err + } + client, err := client.New(config) + if err != nil { + return nil, err + } + + c.clients[config.GroupVersion.String()] = client + return client, nil +} + +// FindAllCanonicalResources returns all resource names that map directly to their kind (Kind -> Resource -> Kind) +// and are not subresources. This is the closest mapping possible from the client side to resources that can be +// listed and updated. Note that this may return some virtual resources (like imagestreamtags) that can be otherwise +// represented. +// TODO: add a field to APIResources for "virtual" (or that points to the canonical resource). +// TODO: fallback to the scheme when discovery is not possible. +func FindAllCanonicalResources(d discovery.DiscoveryInterface, m meta.RESTMapper) ([]unversioned.GroupResource, error) { + set := make(map[unversioned.GroupResource]struct{}) + all, err := d.ServerResources() + if err != nil { + return nil, err + } + for apiVersion, v := range all { + gv, err := unversioned.ParseGroupVersion(apiVersion) + if err != nil { + continue + } + for _, r := range v.APIResources { + // ignore subresources + if strings.Contains(r.Name, "/") { + continue + } + // because discovery info doesn't tell us whether the object is virtual or not, perform a lookup + // by the kind for resource (which should be the canonical resource) and then verify that the reverse + // lookup (KindsFor) does not error. + if mapping, err := m.RESTMapping(unversioned.GroupKind{Group: gv.Group, Kind: r.Kind}, gv.Version); err == nil { + if _, err := m.KindsFor(mapping.GroupVersionKind.GroupVersion().WithResource(mapping.Resource)); err == nil { + set[unversioned.GroupResource{Group: mapping.GroupVersionKind.Group, Resource: mapping.Resource}] = struct{}{} + } + } + } + } + var groupResources []unversioned.GroupResource + for k := range set { + groupResources = append(groupResources, k) + } + sort.Sort(groupResourcesByName(groupResources)) + return groupResources, nil +} + +type groupResourcesByName []unversioned.GroupResource + +func (g groupResourcesByName) Len() int { return len(g) } +func (g groupResourcesByName) Less(i, j int) bool { + if g[i].Resource < g[j].Resource { + return true + } + if g[i].Resource > g[j].Resource { + return false + } + return g[i].Group < g[j].Group +} +func (g groupResourcesByName) Swap(i, j int) { g[i], g[j] = g[j], g[i] } diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/negotiate.go b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/negotiate.go new file mode 100644 index 00000000..d93f403e --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/negotiate.go @@ -0,0 +1,116 @@ +package clientcmd + +import ( + "fmt" + + "github.com/golang/glog" + + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" + kclient "k8s.io/kubernetes/pkg/client/unversioned" +) + +// negotiateVersion queries the server's supported api versions to find a version that both client and server support. +// - If no version is provided, try registered client versions in order of preference. +// - If version is provided, but not default config (explicitly requested via +// commandline flag), and is unsupported by the server, print a warning to +// stderr and try client's registered versions in order of preference. +// - If version is config default, and the server does not support it, return an error. +func negotiateVersion(client *kclient.Client, config *restclient.Config, requestedGV *unversioned.GroupVersion, clientGVs []unversioned.GroupVersion) (*unversioned.GroupVersion, error) { + // Ensure we have a client + var err error + if client == nil { + client, err = kclient.New(config) + if err != nil { + return nil, err + } + } + + // Determine our preferred version + preferredGV := copyGroupVersion(requestedGV) + if preferredGV == nil { + preferredGV = copyGroupVersion(config.GroupVersion) + } + + // Get server versions + serverGVs, err := serverAPIVersions(client, "/oapi") + if err != nil { + if errors.IsNotFound(err) { + glog.V(4).Infof("Server path /oapi was not found, returning the requested group version %v", preferredGV) + return preferredGV, nil + } + return nil, err + } + + // Find a version we can all agree on + matchedGV, err := matchAPIVersion(preferredGV, clientGVs, serverGVs) + if err != nil { + return nil, err + } + + // Enforce a match if the preferredGV is the config default + if config.GroupVersion != nil && (*preferredGV == *config.GroupVersion) && (*matchedGV != *config.GroupVersion) { + return nil, fmt.Errorf("server does not support API version %q", config.GroupVersion.String()) + } + + return matchedGV, err +} + +// serverAPIVersions fetches the server versions available from the groupless API at the given prefix +func serverAPIVersions(c *kclient.Client, grouplessPrefix string) ([]unversioned.GroupVersion, error) { + // Get versions doc + var v unversioned.APIVersions + if err := c.Get().AbsPath(grouplessPrefix).Do().Into(&v); err != nil { + return []unversioned.GroupVersion{}, err + } + + // Convert to GroupVersion structs + serverAPIVersions := []unversioned.GroupVersion{} + for _, version := range v.Versions { + gv, err := unversioned.ParseGroupVersion(version) + if err != nil { + return []unversioned.GroupVersion{}, err + } + serverAPIVersions = append(serverAPIVersions, gv) + } + return serverAPIVersions, nil +} + +func matchAPIVersion(preferredGV *unversioned.GroupVersion, clientGVs []unversioned.GroupVersion, serverGVs []unversioned.GroupVersion) (*unversioned.GroupVersion, error) { + // If version explicitly requested verify that both client and server support it. + // If server does not support warn, but try to negotiate a lower version. + if preferredGV != nil { + if !containsGroupVersion(clientGVs, *preferredGV) { + return nil, fmt.Errorf("client does not support API version %q; client supported API versions: %v", preferredGV, clientGVs) + } + if containsGroupVersion(serverGVs, *preferredGV) { + return preferredGV, nil + } + } + + for _, clientGV := range clientGVs { + if containsGroupVersion(serverGVs, clientGV) { + t := clientGV + return &t, nil + } + } + return nil, fmt.Errorf("failed to negotiate an api version; server supports: %v, client supports: %v", serverGVs, clientGVs) +} + +func copyGroupVersion(version *unversioned.GroupVersion) *unversioned.GroupVersion { + if version == nil { + return nil + } + versionCopy := *version + return &versionCopy +} + +func containsGroupVersion(versions []unversioned.GroupVersion, version unversioned.GroupVersion) bool { + for _, v := range versions { + if v == version { + return true + } + } + return false +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/shortcut_restmapper.go b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/shortcut_restmapper.go new file mode 100644 index 00000000..6d99796c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/clientcmd/shortcut_restmapper.go @@ -0,0 +1,141 @@ +package clientcmd + +import ( + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/typed/discovery" +) + +// ShortcutExpander is a RESTMapper that can be used for OpenShift resources. It expands the resource first, then invokes the wrapped +type ShortcutExpander struct { + RESTMapper meta.RESTMapper + + All []string +} + +var _ meta.RESTMapper = &ShortcutExpander{} + +func NewShortcutExpander(discoveryClient discovery.DiscoveryInterface, delegate meta.RESTMapper) ShortcutExpander { + defaultMapper := ShortcutExpander{RESTMapper: delegate} + + // this assumes that legacy kube versions and legacy origin versions are the same, probably fair + apiResources, err := discoveryClient.ServerResources() + if err != nil { + return defaultMapper + } + + availableResources := []unversioned.GroupVersionResource{} + for groupVersionString, resourceList := range apiResources { + currVersion, err := unversioned.ParseGroupVersion(groupVersionString) + if err != nil { + return defaultMapper + } + + for _, resource := range resourceList.APIResources { + availableResources = append(availableResources, currVersion.WithResource(resource.Name)) + } + } + + availableAll := []string{} + for _, requestedResource := range userResources { + for _, availableResource := range availableResources { + if requestedResource == availableResource.Resource { + availableAll = append(availableAll, requestedResource) + break + } + } + } + + return ShortcutExpander{All: availableAll, RESTMapper: delegate} +} + +func (e ShortcutExpander) KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) { + return e.RESTMapper.KindFor(expandResourceShortcut(resource)) +} + +func (e ShortcutExpander) KindsFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) { + return e.RESTMapper.KindsFor(expandResourceShortcut(resource)) +} + +func (e ShortcutExpander) ResourcesFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) { + return e.RESTMapper.ResourcesFor(expandResourceShortcut(resource)) +} + +func (e ShortcutExpander) ResourceFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) { + return e.RESTMapper.ResourceFor(expandResourceShortcut(resource)) +} + +func (e ShortcutExpander) ResourceSingularizer(resource string) (string, error) { + return e.RESTMapper.ResourceSingularizer(expandResourceShortcut(unversioned.GroupVersionResource{Resource: resource}).Resource) +} + +func (e ShortcutExpander) RESTMapping(gk unversioned.GroupKind, versions ...string) (*meta.RESTMapping, error) { + return e.RESTMapper.RESTMapping(gk, versions...) +} + +func (e ShortcutExpander) RESTMappings(gk unversioned.GroupKind) ([]*meta.RESTMapping, error) { + return e.RESTMapper.RESTMappings(gk) +} + +// userResources are the resource names that apply to the primary, user facing resources used by +// client tools. They are in deletion-first order - dependent resources should be last. +var userResources = []string{ + "buildconfigs", "builds", + "imagestreams", + "deploymentconfigs", "replicationcontrollers", + "routes", "services", + "pods", +} + +// AliasesForResource returns whether a resource has an alias or not +func (e ShortcutExpander) AliasesForResource(resource string) ([]string, bool) { + aliases := map[string][]string{ + "all": userResources, + } + if len(e.All) != 0 { + aliases["all"] = e.All + } + + if res, ok := aliases[resource]; ok { + return res, true + } + return e.RESTMapper.AliasesForResource(expandResourceShortcut(unversioned.GroupVersionResource{Resource: resource}).Resource) +} + +// shortForms is the list of short names to their expanded names +var shortForms = map[string]string{ + "dc": "deploymentconfigs", + "bc": "buildconfigs", + "is": "imagestreams", + "istag": "imagestreamtags", + "isimage": "imagestreamimages", + "sa": "serviceaccounts", + "pv": "persistentvolumes", + "pvc": "persistentvolumeclaims", + "clusterquota": "clusterresourcequota", +} + +// expandResourceShortcut will return the expanded version of resource +// (something that a pkg/api/meta.RESTMapper can understand), if it is +// indeed a shortcut. Otherwise, will return resource unmodified. +func expandResourceShortcut(resource unversioned.GroupVersionResource) unversioned.GroupVersionResource { + if expanded, ok := shortForms[resource.Resource]; ok { + resource.Resource = expanded + return resource + } + return resource +} + +// resourceShortFormFor looks up for a short form of resource names. +func resourceShortFormFor(resource string) (string, bool) { + var alias string + exists := false + for k, val := range shortForms { + if val == resource { + alias = k + exists = true + break + } + } + return alias, exists +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/cmd.go b/vendor/github.com/openshift/origin/pkg/cmd/util/cmd.go new file mode 100644 index 00000000..bce62fbd --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/cmd.go @@ -0,0 +1,165 @@ +package util + +import ( + "errors" + "fmt" + "io" + "path/filepath" + "strings" + + "github.com/spf13/cobra" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apimachinery/registered" + kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" + "k8s.io/kubernetes/pkg/runtime" +) + +// ErrExit is a marker interface for cli commands indicating that the response has been processed +var ErrExit = fmt.Errorf("exit directly") + +// ReplaceCommandName recursively processes the examples in a given command to change a hardcoded +// command name (like 'kubectl' to the appropriate target name). It returns c. +func ReplaceCommandName(from, to string, c *cobra.Command) *cobra.Command { + c.Example = strings.Replace(c.Example, from, to, -1) + for _, sub := range c.Commands() { + ReplaceCommandName(from, to, sub) + } + return c +} + +// RequireNoArguments exits with a usage error if extra arguments are provided. +func RequireNoArguments(c *cobra.Command, args []string) { + if len(args) > 0 { + kcmdutil.CheckErr(kcmdutil.UsageError(c, fmt.Sprintf(`unknown command "%s"`, strings.Join(args, " ")))) + } +} + +func DefaultSubCommandRun(out io.Writer) func(c *cobra.Command, args []string) { + return func(c *cobra.Command, args []string) { + c.SetOutput(out) + RequireNoArguments(c, args) + c.Help() + } +} + +// GetDisplayFilename returns the absolute path of the filename as long as there was no error, otherwise it returns the filename as-is +func GetDisplayFilename(filename string) string { + if absName, err := filepath.Abs(filename); err == nil { + return absName + } + + return filename +} + +// ResolveResource returns the resource type and name of the resourceString. +// If the resource string has no specified type, defaultResource will be returned. +func ResolveResource(defaultResource unversioned.GroupResource, resourceString string, mapper meta.RESTMapper) (unversioned.GroupResource, string, error) { + if mapper == nil { + return unversioned.GroupResource{}, "", errors.New("mapper cannot be nil") + } + + var name string + parts := strings.Split(resourceString, "/") + switch len(parts) { + case 1: + name = parts[0] + case 2: + name = parts[1] + + // Allow specifying the group the same way kubectl does, as "resource.group.name" + groupResource := unversioned.ParseGroupResource(parts[0]) + // normalize resource case + groupResource.Resource = strings.ToLower(groupResource.Resource) + + gvr, err := mapper.ResourceFor(groupResource.WithVersion("")) + if err != nil { + return unversioned.GroupResource{}, "", err + } + return gvr.GroupResource(), name, nil + default: + return unversioned.GroupResource{}, "", fmt.Errorf("invalid resource format: %s", resourceString) + } + + return defaultResource, name, nil +} + +// convertItemsForDisplay returns a new list that contains parallel elements that have been converted to the most preferred external version +func convertItemsForDisplay(objs []runtime.Object, preferredVersions ...unversioned.GroupVersion) ([]runtime.Object, error) { + ret := []runtime.Object{} + + for i := range objs { + obj := objs[i] + kind, _, err := kapi.Scheme.ObjectKind(obj) + if err != nil { + return nil, err + } + groupMeta, err := registered.Group(kind.Group) + if err != nil { + return nil, err + } + + requestedVersion := unversioned.GroupVersion{} + for _, preferredVersion := range preferredVersions { + if preferredVersion.Group == kind.Group { + requestedVersion = preferredVersion + break + } + } + + actualOutputVersion := unversioned.GroupVersion{} + for _, externalVersion := range groupMeta.GroupVersions { + if externalVersion == requestedVersion { + actualOutputVersion = externalVersion + break + } + if actualOutputVersion.Empty() { + actualOutputVersion = externalVersion + } + } + + convertedObject, err := kapi.Scheme.ConvertToVersion(obj, actualOutputVersion) + if err != nil { + return nil, err + } + + ret = append(ret, convertedObject) + } + + return ret, nil +} + +// convertItemsForDisplayFromDefaultCommand returns a new list that contains parallel elements that have been converted to the most preferred external version +// TODO: move this function into the core factory PrintObjects method +// TODO: print-objects should have preferred output versions +func convertItemsForDisplayFromDefaultCommand(cmd *cobra.Command, objs []runtime.Object) ([]runtime.Object, error) { + requested := kcmdutil.GetFlagString(cmd, "output-version") + version, err := unversioned.ParseGroupVersion(requested) + if err != nil { + return nil, err + } + return convertItemsForDisplay(objs, version) +} + +// VersionedPrintObject handles printing an object in the appropriate version by looking at 'output-version' +// on the command +func VersionedPrintObject(fn func(*cobra.Command, meta.RESTMapper, runtime.Object, io.Writer) error, c *cobra.Command, mapper meta.RESTMapper, out io.Writer) func(runtime.Object) error { + return func(obj runtime.Object) error { + // TODO: fold into the core printer functionality (preferred output version) + if list, ok := obj.(*kapi.List); ok { + var err error + if list.Items, err = convertItemsForDisplayFromDefaultCommand(c, list.Items); err != nil { + return err + } + } else { + result, err := convertItemsForDisplayFromDefaultCommand(c, []runtime.Object{obj}) + if err != nil { + return err + } + obj = result[0] + } + return fn(c, mapper, obj, out) + } +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/crypto.go b/vendor/github.com/openshift/origin/pkg/cmd/util/crypto.go new file mode 100644 index 00000000..742f3b58 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/crypto.go @@ -0,0 +1,100 @@ +package util + +import ( + "bytes" + "crypto/x509" + "encoding/pem" + "errors" + "fmt" + "io/ioutil" +) + +func CertPoolFromFile(filename string) (*x509.CertPool, error) { + pool := x509.NewCertPool() + if len(filename) == 0 { + return pool, nil + } + + pemBlock, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + + certs, err := CertificatesFromPEM(pemBlock) + if err != nil { + return nil, fmt.Errorf("Error reading %s: %s", filename, err) + } + + for _, cert := range certs { + pool.AddCert(cert) + } + + return pool, nil +} + +func CertificatesFromFile(file string) ([]*x509.Certificate, error) { + if len(file) == 0 { + return nil, nil + } + pemBlock, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + certs, err := CertificatesFromPEM(pemBlock) + if err != nil { + return nil, fmt.Errorf("Error reading %s: %s", file, err) + } + return certs, nil +} + +func CertificatesFromPEM(pemCerts []byte) ([]*x509.Certificate, error) { + ok := false + certs := []*x509.Certificate{} + for len(pemCerts) > 0 { + var block *pem.Block + block, pemCerts = pem.Decode(pemCerts) + if block == nil { + break + } + if block.Type != "CERTIFICATE" || len(block.Headers) != 0 { + continue + } + + cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + return certs, err + } + + certs = append(certs, cert) + ok = true + } + + if !ok { + return certs, errors.New("Could not read any certificates") + } + return certs, nil +} + +// PrivateKeysFromPEM extracts all blocks recognized as private keys into an output PEM encoded byte array, +// or returns an error. If there are no private keys it will return an empty byte buffer. +func PrivateKeysFromPEM(pemCerts []byte) ([]byte, error) { + buf := &bytes.Buffer{} + for len(pemCerts) > 0 { + var block *pem.Block + block, pemCerts = pem.Decode(pemCerts) + if block == nil { + break + } + if len(block.Headers) != 0 { + continue + } + switch block.Type { + // defined in OpenSSL pem.h + case "RSA PRIVATE KEY", "PRIVATE KEY", "ANY PRIVATE KEY", "DSA PRIVATE KEY", "ENCRYPTED PRIVATE KEY", "EC PRIVATE KEY": + if err := pem.Encode(buf, block); err != nil { + return nil, err + } + } + } + return buf.Bytes(), nil +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/doc.go b/vendor/github.com/openshift/origin/pkg/cmd/util/doc.go new file mode 100644 index 00000000..612f7c8e --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/doc.go @@ -0,0 +1,2 @@ +// Package util provides utility functions for the cmd packages. +package util diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/env.go b/vendor/github.com/openshift/origin/pkg/cmd/util/env.go new file mode 100644 index 00000000..b904b84c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/env.go @@ -0,0 +1,159 @@ +package util + +import ( + "bufio" + "fmt" + "io" + "os" + "regexp" + "strconv" + "strings" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/util/sets" +) + +func EnvInt(key string, defaultValue int32, minValue int32) int32 { + value, err := strconv.ParseInt(Env(key, fmt.Sprintf("%d", defaultValue)), 10, 32) + if err != nil || int32(value) < minValue { + return defaultValue + } + return int32(value) +} + +// Env returns an environment variable or a default value if not specified. +func Env(key string, defaultValue string) string { + val := os.Getenv(key) + if len(val) == 0 { + return defaultValue + } + return val +} + +// GetEnv returns an environment value if specified +func GetEnv(key string) (string, bool) { + val := os.Getenv(key) + if len(val) == 0 { + return "", false + } + return val, true +} + +type Environment map[string]string + +var argumentEnvironment = regexp.MustCompile("(?ms)^(.+)\\=(.*)$") +var validArgumentEnvironment = regexp.MustCompile("(?ms)^(\\w+)\\=(.*)$") + +func IsEnvironmentArgument(s string) bool { + return argumentEnvironment.MatchString(s) +} + +func IsValidEnvironmentArgument(s string) bool { + return validArgumentEnvironment.MatchString(s) +} + +func SplitEnvironmentFromResources(args []string) (resources, envArgs []string, ok bool) { + first := true + for _, s := range args { + // this method also has to understand env removal syntax, i.e. KEY- + isEnv := IsEnvironmentArgument(s) || strings.HasSuffix(s, "-") + switch { + case first && isEnv: + first = false + fallthrough + case !first && isEnv: + envArgs = append(envArgs, s) + case first && !isEnv: + resources = append(resources, s) + case !first && !isEnv: + return nil, nil, false + } + } + return resources, envArgs, true +} + +func ParseEnvironmentArguments(s []string) (Environment, []string, []error) { + errs := []error{} + duplicates := []string{} + env := make(Environment) + for _, s := range s { + switch matches := validArgumentEnvironment.FindStringSubmatch(s); len(matches) { + case 3: + k, v := matches[1], matches[2] + if exist, ok := env[k]; ok { + duplicates = append(duplicates, fmt.Sprintf("%s=%s", k, exist)) + } + env[k] = v + default: + errs = append(errs, fmt.Errorf("environment variables must be of the form key=value: %s", s)) + } + } + return env, duplicates, errs +} + +// ParseEnv parses the list of environment variables into kubernetes EnvVar +func ParseEnv(spec []string, defaultReader io.Reader) ([]kapi.EnvVar, []string, error) { + env := []kapi.EnvVar{} + exists := sets.NewString() + var remove []string + for _, envSpec := range spec { + switch { + case !IsValidEnvironmentArgument(envSpec) && !strings.HasSuffix(envSpec, "-"): + return nil, nil, fmt.Errorf("environment variables must be of the form key=value and can only contain letters, numbers, and underscores") + case envSpec == "-": + if defaultReader == nil { + return nil, nil, fmt.Errorf("when '-' is used, STDIN must be open") + } + fileEnv, err := readEnv(defaultReader) + if err != nil { + return nil, nil, err + } + env = append(env, fileEnv...) + case strings.Index(envSpec, "=") != -1: + parts := strings.SplitN(envSpec, "=", 2) + if len(parts) != 2 { + return nil, nil, fmt.Errorf("invalid environment variable: %v", envSpec) + } + exists.Insert(parts[0]) + env = append(env, kapi.EnvVar{ + Name: parts[0], + Value: parts[1], + }) + case strings.HasSuffix(envSpec, "-"): + remove = append(remove, envSpec[:len(envSpec)-1]) + default: + return nil, nil, fmt.Errorf("unknown environment variable: %v", envSpec) + } + } + for _, removeLabel := range remove { + if _, found := exists[removeLabel]; found { + return nil, nil, fmt.Errorf("can not both modify and remove an environment variable in the same command") + } + } + return env, remove, nil +} + +func readEnv(r io.Reader) ([]kapi.EnvVar, error) { + env := []kapi.EnvVar{} + scanner := bufio.NewScanner(r) + for scanner.Scan() { + envSpec := scanner.Text() + if pos := strings.Index(envSpec, "#"); pos != -1 { + envSpec = envSpec[:pos] + } + if strings.Index(envSpec, "=") != -1 { + parts := strings.SplitN(envSpec, "=", 2) + if len(parts) != 2 { + return nil, fmt.Errorf("invalid environment variable: %v", envSpec) + } + env = append(env, kapi.EnvVar{ + Name: parts[0], + Value: parts[1], + }) + } + } + if err := scanner.Err(); err != nil && err != io.EOF { + return nil, err + } + return env, nil +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/filepath.go b/vendor/github.com/openshift/origin/pkg/cmd/util/filepath.go new file mode 100644 index 00000000..675e4aab --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/filepath.go @@ -0,0 +1,85 @@ +package util + +import ( + "fmt" + "os" + "path/filepath" + "strings" +) + +func MakeAbs(path, base string) (string, error) { + if filepath.IsAbs(path) { + return path, nil + } + if len(base) == 0 { + cwd, err := os.Getwd() + if err != nil { + return "", err + } + base = cwd + } + return filepath.Join(base, path), nil +} + +// ResolvePaths updates the given refs to be absolute paths, relative to the given base directory +func ResolvePaths(refs []*string, base string) error { + for _, ref := range refs { + // Don't resolve empty paths + if len(*ref) > 0 { + // Don't resolve absolute paths + if !filepath.IsAbs(*ref) { + *ref = filepath.Join(base, *ref) + } + } + } + return nil +} + +func MakeRelative(path, base string) (string, error) { + if len(path) > 0 { + rel, err := filepath.Rel(base, path) + if err != nil { + return path, err + } + return rel, nil + } + return path, nil +} + +// RelativizePaths updates the given refs to be relative paths, relative to the given base directory +func RelativizePaths(refs []*string, base string) error { + for _, ref := range refs { + rel, err := MakeRelative(*ref, base) + if err != nil { + return err + } + *ref = rel + } + return nil +} + +// RelativizePathWithNoBacksteps updates the given refs to be relative paths, relative to the given base directory as long as they do not require backsteps. +// Any path requiring a backstep is left as-is as long it is absolute. Any non-absolute path that can't be relativized produces an error +func RelativizePathWithNoBacksteps(refs []*string, base string) error { + for _, ref := range refs { + // Don't relativize empty paths + if len(*ref) > 0 { + rel, err := MakeRelative(*ref, base) + if err != nil { + return err + } + + // if we have a backstep, don't mess with the path + if strings.HasPrefix(rel, "../") { + if filepath.IsAbs(*ref) { + continue + } + + return fmt.Errorf("%v requires backsteps and is not absolute", *ref) + } + + *ref = rel + } + } + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/ip.go b/vendor/github.com/openshift/origin/pkg/cmd/util/ip.go new file mode 100644 index 00000000..3ce113de --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/ip.go @@ -0,0 +1,61 @@ +package util + +import ( + "errors" + "net" +) + +// ErrorNoDefaultIP is returned when no suitable non-loopback address can be found. +var ErrorNoDefaultIP = errors.New("no suitable IP address") + +// DefaultLocalIP4 returns an IPv4 address that this host can be reached +// on. Will return NoDefaultIP if no suitable address can be found. +func DefaultLocalIP4() (net.IP, error) { + devices, err := net.Interfaces() + if err != nil { + return nil, err + } + for _, dev := range devices { + if (dev.Flags&net.FlagUp != 0) && (dev.Flags&net.FlagLoopback == 0) { + addrs, err := dev.Addrs() + if err != nil { + continue + } + for i := range addrs { + if ip, ok := addrs[i].(*net.IPNet); ok { + if ip.IP.To4() != nil { + return ip.IP, nil + } + } + } + } + } + return nil, ErrorNoDefaultIP +} + +// AllLocalIP4 returns all the IPv4 addresses that this host can be reached +// on. +func AllLocalIP4() ([]net.IP, error) { + devices, err := net.Interfaces() + if err != nil { + return nil, err + } + + ret := []net.IP{} + for _, dev := range devices { + if dev.Flags&net.FlagUp != 0 { + addrs, err := dev.Addrs() + if err != nil { + continue + } + for i := range addrs { + if ip, ok := addrs[i].(*net.IPNet); ok { + if ip.IP.To4() != nil { + ret = append(ret, ip.IP) + } + } + } + } + } + return ret, nil +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/log.go b/vendor/github.com/openshift/origin/pkg/cmd/util/log.go new file mode 100644 index 00000000..baeeee65 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/log.go @@ -0,0 +1,37 @@ +package util + +import ( + "io" + + "github.com/golang/glog" +) + +// GetLogLevel returns the current glog log level +func GetLogLevel() (level int) { + for level = 5; level >= 0; level-- { + if glog.V(glog.Level(level)) == true { + break + } + } + return +} + +// NewGLogWriterV returns a new Writer that delegates to `glog.Info` at the +// desired level of verbosity +func NewGLogWriterV(level int) io.Writer { + return &gLogWriter{ + level: glog.Level(level), + } +} + +// gLogWriter is a Writer that writes by delegating to `glog.Info` +type gLogWriter struct { + // level is the default level to log at + level glog.Level +} + +func (w *gLogWriter) Write(p []byte) (n int, err error) { + glog.V(w.level).InfoDepth(2, string(p)) + + return len(p), nil +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/mux.go b/vendor/github.com/openshift/origin/pkg/cmd/util/mux.go new file mode 100644 index 00000000..c0275fc2 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/mux.go @@ -0,0 +1,11 @@ +package util + +import ( + "net/http" +) + +// Mux is a standard mux interface for HTTP +type Mux interface { + Handle(pattern string, handler http.Handler) + HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request)) +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/net.go b/vendor/github.com/openshift/origin/pkg/cmd/util/net.go new file mode 100644 index 00000000..11077391 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/net.go @@ -0,0 +1,201 @@ +package util + +import ( + "crypto/tls" + "errors" + "fmt" + "net" + "net/http" + "strings" + "time" + + knet "k8s.io/kubernetes/pkg/util/net" + "k8s.io/kubernetes/pkg/util/sets" + + "github.com/golang/glog" +) + +// TryListen tries to open a connection on the given port and returns true if it succeeded. +func TryListen(network, hostPort string) (bool, error) { + l, err := net.Listen(network, hostPort) + if err != nil { + glog.V(5).Infof("Failure while checking listen on %s: %v", err) + return false, err + } + defer l.Close() + return true, nil +} + +// tcpKeepAliveListener sets TCP keep-alive timeouts on accepted +// connections. It's used by ListenAndServe and ListenAndServeTLS so +// dead TCP connections (e.g. closing laptop mid-download) eventually +// go away. +type tcpKeepAliveListener struct { + *net.TCPListener +} + +func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { + tc, err := ln.AcceptTCP() + if err != nil { + return + } + tc.SetKeepAlive(true) + tc.SetKeepAlivePeriod(3 * time.Minute) + return tc, nil +} + +// ListenAndServe starts a server that listens on the provided TCP mode (as supported +// by net.Listen) +func ListenAndServe(srv *http.Server, network string) error { + addr := srv.Addr + if addr == "" { + addr = ":http" + } + ln, err := net.Listen(network, addr) + if err != nil { + return err + } + return srv.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)}) +} + +// ListenAndServeTLS starts a server that listens on the provided TCP mode (as supported +// by net.Listen). +func ListenAndServeTLS(srv *http.Server, network string, certFile, keyFile string) error { + addr := srv.Addr + if addr == "" { + addr = ":https" + } + config := &tls.Config{} + if srv.TLSConfig != nil { + config = srv.TLSConfig + } + if config.NextProtos == nil { + config.NextProtos = []string{"http/1.1"} + } + + var err error + config.Certificates = make([]tls.Certificate, 1) + config.Certificates[0], err = tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return err + } + + ln, err := net.Listen(network, addr) + if err != nil { + return err + } + + tlsListener := tls.NewListener(tcpKeepAliveListener{ln.(*net.TCPListener)}, config) + return srv.Serve(tlsListener) +} + +// WaitForSuccessfulDial attempts to connect to the given address, closing and returning nil on the first successful connection. +func WaitForSuccessfulDial(https bool, network, address string, timeout, interval time.Duration, retries int) error { + var ( + conn net.Conn + err error + ) + for i := 0; i <= retries; i++ { + dialer := net.Dialer{Timeout: timeout} + if https { + conn, err = tls.DialWithDialer(&dialer, network, address, &tls.Config{InsecureSkipVerify: true}) + } else { + conn, err = dialer.Dial(network, address) + } + if err != nil { + glog.V(5).Infof("Got error %#v, trying again: %#v\n", err, address) + time.Sleep(interval) + continue + } + conn.Close() + return nil + } + return err +} + +// TransportFor returns an http.Transport for the given ca and client cert (which may be empty strings) +func TransportFor(ca string, certFile string, keyFile string) (http.RoundTripper, error) { + if len(ca) == 0 && len(certFile) == 0 && len(keyFile) == 0 { + return http.DefaultTransport, nil + } + + if (len(certFile) == 0) != (len(keyFile) == 0) { + return nil, errors.New("certFile and keyFile must be specified together") + } + + // Copy default transport + transport := knet.SetTransportDefaults(&http.Transport{ + TLSClientConfig: &tls.Config{}, + }) + + if len(ca) != 0 { + roots, err := CertPoolFromFile(ca) + if err != nil { + return nil, fmt.Errorf("error loading cert pool from ca file %s: %v", ca, err) + } + transport.TLSClientConfig.RootCAs = roots + } + + if len(certFile) != 0 { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return nil, fmt.Errorf("error loading x509 keypair from cert file %s and key file %s: %v", certFile, keyFile, err) + } + transport.TLSClientConfig.Certificates = []tls.Certificate{cert} + } + + return transport, nil +} + +// GetCertificateFunc returns a function that can be used in tls.Config#GetCertificate +// Returns nil if len(certs) == 0 +func GetCertificateFunc(certs map[string]*tls.Certificate) func(*tls.ClientHelloInfo) (*tls.Certificate, error) { + if len(certs) == 0 { + return nil + } + // Replica of tls.Config#getCertificate logic + return func(clientHello *tls.ClientHelloInfo) (*tls.Certificate, error) { + if clientHello == nil { + return nil, nil + } + + name := clientHello.ServerName + name = strings.ToLower(name) + name = strings.TrimRight(name, ".") + for _, candidate := range HostnameMatchSpecCandidates(name) { + if cert, ok := certs[candidate]; ok { + return cert, nil + } + } + return nil, nil + } +} + +// HostnameMatchSpecCandidates returns a list of match specs that would match the provided hostname +// Returns nil if len(hostname) == 0 +func HostnameMatchSpecCandidates(hostname string) []string { + if len(hostname) == 0 { + return nil + } + + // Exact match has priority + candidates := []string{hostname} + + // Replace successive labels in the name with wildcards, to require an exact match on number of + // path segments, because certificates cannot wildcard multiple levels of subdomains + // + // This is primarily to be consistent with tls.Config#getCertificate implementation + // + // It using a cert signed for *.foo.example.com and *.bar.example.com by specifying the name *.*.example.com + labels := strings.Split(hostname, ".") + for i := range labels { + labels[i] = "*" + candidates = append(candidates, strings.Join(labels, ".")) + } + return candidates +} + +// HostnameMatches returns true if the given hostname is matched by the given matchSpec +func HostnameMatches(hostname string, matchSpec string) bool { + return sets.NewString(HostnameMatchSpecCandidates(hostname)...).Has(matchSpec) +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/product.go b/vendor/github.com/openshift/origin/pkg/cmd/util/product.go new file mode 100644 index 00000000..9a1adfc0 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/product.go @@ -0,0 +1,54 @@ +package util + +import ( + "path/filepath" +) + +const ( + ProductOrigin = `Origin` + ProductOpenShift = `OpenShift` + ProductAtomicEnterprise = `Atomic Enterprise` +) + +// GetProductName chooses appropriate product for a binary name. +func GetProductName(binaryName string) string { + name := filepath.Base(binaryName) + for { + switch name { + case "openshift": + return ProductOpenShift + case "atomic-enterprise": + return ProductAtomicEnterprise + default: + return ProductOrigin + } + } +} + +// GetPlatformName returns an appropriate platform name for given binary name. +// Platform name can be used as a headline in command's usage. +func GetPlatformName(binaryName string) string { + switch GetProductName(binaryName) { + case ProductAtomicEnterprise: + return "Atomic Enterprise Platform" + case ProductOpenShift: + return "OpenShift Application Platform" + default: + return "Origin Application Platform" + } +} + +// GetDistributionName returns an appropriate Kubernetes distribution name. +// Distribution name can be used in relation to some feature set in command's +// usage string (e.g. allows you to build, run, etc.). +func GetDistributionName(binaryName string) string { + switch GetProductName(binaryName) { + case ProductAtomicEnterprise: + return "Atomic distribution of Kubernetes" + case ProductOpenShift: + return "OpenShift distribution of Kubernetes" + default: + return "Origin distribution of Kubernetes" + } + +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/route.go b/vendor/github.com/openshift/origin/pkg/cmd/util/route.go new file mode 100644 index 00000000..d921d62e --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/route.go @@ -0,0 +1,93 @@ +package util + +import ( + "fmt" + "strconv" + + kapi "k8s.io/kubernetes/pkg/api" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/util/intstr" + + "github.com/openshift/origin/pkg/route/api" +) + +// UnsecuredRoute will return a route with enough info so that it can direct traffic to +// the service provided by --service. Callers of this helper are responsible for providing +// tls configuration, path, and the hostname of the route. +func UnsecuredRoute(kc *kclient.Client, namespace, routeName, serviceName, portString string) (*api.Route, error) { + if len(routeName) == 0 { + routeName = serviceName + } + + svc, err := kc.Services(namespace).Get(serviceName) + if err != nil { + if len(portString) == 0 { + return nil, fmt.Errorf("you need to provide a route port via --port when exposing a non-existent service") + } + return &api.Route{ + ObjectMeta: kapi.ObjectMeta{ + Name: routeName, + }, + Spec: api.RouteSpec{ + To: api.RouteTargetReference{ + Name: serviceName, + }, + Port: resolveRoutePort(portString), + }, + }, nil + } + + ok, port := supportsTCP(svc) + if !ok { + return nil, fmt.Errorf("service %q doesn't support TCP", svc.Name) + } + + route := &api.Route{ + ObjectMeta: kapi.ObjectMeta{ + Name: routeName, + Labels: svc.Labels, + }, + Spec: api.RouteSpec{ + To: api.RouteTargetReference{ + Name: serviceName, + }, + }, + } + + // If the service has multiple ports and the user didn't specify --port, + // then default the route port to a service port name. + if len(port.Name) > 0 && len(portString) == 0 { + route.Spec.Port = resolveRoutePort(port.Name) + } + // --port uber alles + if len(portString) > 0 { + route.Spec.Port = resolveRoutePort(portString) + } + + return route, nil +} + +func resolveRoutePort(portString string) *api.RoutePort { + if len(portString) == 0 { + return nil + } + var routePort intstr.IntOrString + integer, err := strconv.Atoi(portString) + if err != nil { + routePort = intstr.FromString(portString) + } else { + routePort = intstr.FromInt(integer) + } + return &api.RoutePort{ + TargetPort: routePort, + } +} + +func supportsTCP(svc *kapi.Service) (bool, kapi.ServicePort) { + for _, port := range svc.Spec.Ports { + if port.Protocol == kapi.ProtocolTCP { + return true, port + } + } + return false, kapi.ServicePort{} +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/sibling.go b/vendor/github.com/openshift/origin/pkg/cmd/util/sibling.go new file mode 100644 index 00000000..4c0708cc --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/sibling.go @@ -0,0 +1,30 @@ +package util + +import ( + "os" + "strings" + + "github.com/golang/glog" + "github.com/spf13/cobra" +) + +// SiblingCommand returns a sibling command to the given command +func SiblingCommand(cmd *cobra.Command, name string) string { + c := cmd.Parent() + command := []string{} + for c != nil { + glog.V(5).Infof("Found parent command: %s", c.Name()) + command = append([]string{c.Name()}, command...) + c = c.Parent() + } + // Replace the root command with what was actually used + // in the command line + glog.V(4).Infof("Setting root command to: %s", os.Args[0]) + command[0] = os.Args[0] + + // Append the sibling command + command = append(command, name) + glog.V(4).Infof("The sibling command is: %s", strings.Join(command, " ")) + + return strings.Join(command, " ") +} diff --git a/vendor/github.com/openshift/origin/pkg/cmd/util/terminal.go b/vendor/github.com/openshift/origin/pkg/cmd/util/terminal.go new file mode 100644 index 00000000..a69464ad --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/cmd/util/terminal.go @@ -0,0 +1,122 @@ +package util + +import ( + "bufio" + "fmt" + "io" + "os" + "strings" + + "github.com/docker/docker/pkg/term" + "github.com/golang/glog" + + kterm "k8s.io/kubernetes/pkg/util/term" +) + +// PromptForString takes an io.Reader and prompts for user input if it's a terminal, returning the result. +func PromptForString(r io.Reader, w io.Writer, format string, a ...interface{}) string { + if w == nil { + w = os.Stdout + } + + fmt.Fprintf(w, format, a...) + return readInput(r) +} + +// PromptForPasswordString prompts for user input by disabling echo in terminal, useful for password prompt. +func PromptForPasswordString(r io.Reader, w io.Writer, format string, a ...interface{}) string { + if w == nil { + w = os.Stdout + } + + if file, ok := r.(*os.File); ok { + inFd := file.Fd() + + if term.IsTerminal(inFd) { + oldState, err := term.SaveState(inFd) + if err != nil { + glog.V(3).Infof("Unable to save terminal state") + return PromptForString(r, w, format, a...) + } + + fmt.Fprintf(w, format, a...) + + term.DisableEcho(inFd, oldState) + + input := readInput(r) + + defer term.RestoreTerminal(inFd, oldState) + + fmt.Fprintf(w, "\n") + + return input + } + glog.V(3).Infof("Stdin is not a terminal") + return PromptForString(r, w, format, a...) + } + return PromptForString(r, w, format, a...) +} + +// PromptForBool prompts for user input of a boolean value. The accepted values are: +// yes, y, true, t, 1 (not case sensitive) +// no, n, false, f, 0 (not case sensitive) +// A valid answer is mandatory so it will keep asking until an answer is provided. +func PromptForBool(r io.Reader, w io.Writer, format string, a ...interface{}) bool { + if w == nil { + w = os.Stdout + } + + str := PromptForString(r, w, format, a...) + switch strings.ToLower(str) { + case "1", "t", "true", "y", "yes": + return true + case "0", "f", "false", "n", "no": + return false + } + fmt.Println("Please enter 'yes' or 'no'.") + return PromptForBool(r, w, format, a...) +} + +// PromptForStringWithDefault prompts for user input but take a default in case nothing is provided. +func PromptForStringWithDefault(r io.Reader, w io.Writer, def string, format string, a ...interface{}) string { + if w == nil { + w = os.Stdout + } + + s := PromptForString(r, w, format, a...) + if len(s) == 0 { + return def + } + return s +} + +func readInput(r io.Reader) string { + if kterm.IsTerminal(r) { + return readInputFromTerminal(r) + } + return readInputFromReader(r) +} + +func readInputFromTerminal(r io.Reader) string { + reader := bufio.NewReader(r) + result, _ := reader.ReadString('\n') + return strings.TrimRight(result, "\r\n") +} + +func readInputFromReader(r io.Reader) string { + var result string + fmt.Fscan(r, &result) + return result +} + +// IsTerminalReader returns whether the passed io.Reader is a terminal or not +func IsTerminalReader(r io.Reader) bool { + file, ok := r.(*os.File) + return ok && term.IsTerminal(file.Fd()) +} + +// IsTerminalWriter returns whether the passed io.Writer is a terminal or not +func IsTerminalWriter(w io.Writer) bool { + file, ok := w.(*os.File) + return ok && term.IsTerminal(file.Fd()) +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/deploy/api/deep_copy_generated.go deleted file mode 100644 index c398e706..00000000 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/deep_copy_generated.go +++ /dev/null @@ -1,565 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - image_api "github.com/openshift/origin/pkg/image/api" - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_CustomDeploymentStrategyParams, - DeepCopy_api_DeploymentCause, - DeepCopy_api_DeploymentCauseImageTrigger, - DeepCopy_api_DeploymentConfig, - DeepCopy_api_DeploymentConfigList, - DeepCopy_api_DeploymentConfigRollback, - DeepCopy_api_DeploymentConfigRollbackSpec, - DeepCopy_api_DeploymentConfigSpec, - DeepCopy_api_DeploymentConfigStatus, - DeepCopy_api_DeploymentDetails, - DeepCopy_api_DeploymentLog, - DeepCopy_api_DeploymentLogOptions, - DeepCopy_api_DeploymentStrategy, - DeepCopy_api_DeploymentTriggerImageChangeParams, - DeepCopy_api_DeploymentTriggerPolicy, - DeepCopy_api_ExecNewPodHook, - DeepCopy_api_LifecycleHook, - DeepCopy_api_RecreateDeploymentStrategyParams, - DeepCopy_api_RollingDeploymentStrategyParams, - DeepCopy_api_TagImageHook, - DeepCopy_api_TemplateImage, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_CustomDeploymentStrategyParams(in CustomDeploymentStrategyParams, out *CustomDeploymentStrategyParams, c *conversion.Cloner) error { - out.Image = in.Image - if in.Environment != nil { - in, out := in.Environment, &out.Environment - *out = make([]api.EnvVar, len(in)) - for i := range in { - if err := api.DeepCopy_api_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Environment = nil - } - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - return nil -} - -func DeepCopy_api_DeploymentCause(in DeploymentCause, out *DeploymentCause, c *conversion.Cloner) error { - out.Type = in.Type - if in.ImageTrigger != nil { - in, out := in.ImageTrigger, &out.ImageTrigger - *out = new(DeploymentCauseImageTrigger) - if err := DeepCopy_api_DeploymentCauseImageTrigger(*in, *out, c); err != nil { - return err - } - } else { - out.ImageTrigger = nil - } - return nil -} - -func DeepCopy_api_DeploymentCauseImageTrigger(in DeploymentCauseImageTrigger, out *DeploymentCauseImageTrigger, c *conversion.Cloner) error { - if err := api.DeepCopy_api_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_DeploymentConfig(in DeploymentConfig, out *DeploymentConfig, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_DeploymentConfigSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_DeploymentConfigStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_DeploymentConfigList(in DeploymentConfigList, out *DeploymentConfigList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]DeploymentConfig, len(in)) - for i := range in { - if err := DeepCopy_api_DeploymentConfig(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_DeploymentConfigRollback(in DeploymentConfigRollback, out *DeploymentConfigRollback, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Name = in.Name - if in.UpdatedAnnotations != nil { - in, out := in.UpdatedAnnotations, &out.UpdatedAnnotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.UpdatedAnnotations = nil - } - if err := DeepCopy_api_DeploymentConfigRollbackSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_DeploymentConfigRollbackSpec(in DeploymentConfigRollbackSpec, out *DeploymentConfigRollbackSpec, c *conversion.Cloner) error { - if err := api.DeepCopy_api_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - out.Revision = in.Revision - out.IncludeTriggers = in.IncludeTriggers - out.IncludeTemplate = in.IncludeTemplate - out.IncludeReplicationMeta = in.IncludeReplicationMeta - out.IncludeStrategy = in.IncludeStrategy - return nil -} - -func DeepCopy_api_DeploymentConfigSpec(in DeploymentConfigSpec, out *DeploymentConfigSpec, c *conversion.Cloner) error { - if err := DeepCopy_api_DeploymentStrategy(in.Strategy, &out.Strategy, c); err != nil { - return err - } - out.MinReadySeconds = in.MinReadySeconds - if in.Triggers != nil { - in, out := in.Triggers, &out.Triggers - *out = make([]DeploymentTriggerPolicy, len(in)) - for i := range in { - if err := DeepCopy_api_DeploymentTriggerPolicy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Triggers = nil - } - out.Replicas = in.Replicas - if in.RevisionHistoryLimit != nil { - in, out := in.RevisionHistoryLimit, &out.RevisionHistoryLimit - *out = new(int32) - **out = *in - } else { - out.RevisionHistoryLimit = nil - } - out.Test = in.Test - out.Paused = in.Paused - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Selector = nil - } - if in.Template != nil { - in, out := in.Template, &out.Template - *out = new(api.PodTemplateSpec) - if err := api.DeepCopy_api_PodTemplateSpec(*in, *out, c); err != nil { - return err - } - } else { - out.Template = nil - } - return nil -} - -func DeepCopy_api_DeploymentConfigStatus(in DeploymentConfigStatus, out *DeploymentConfigStatus, c *conversion.Cloner) error { - out.LatestVersion = in.LatestVersion - out.ObservedGeneration = in.ObservedGeneration - out.Replicas = in.Replicas - out.UpdatedReplicas = in.UpdatedReplicas - out.AvailableReplicas = in.AvailableReplicas - out.UnavailableReplicas = in.UnavailableReplicas - if in.Details != nil { - in, out := in.Details, &out.Details - *out = new(DeploymentDetails) - if err := DeepCopy_api_DeploymentDetails(*in, *out, c); err != nil { - return err - } - } else { - out.Details = nil - } - return nil -} - -func DeepCopy_api_DeploymentDetails(in DeploymentDetails, out *DeploymentDetails, c *conversion.Cloner) error { - out.Message = in.Message - if in.Causes != nil { - in, out := in.Causes, &out.Causes - *out = make([]DeploymentCause, len(in)) - for i := range in { - if err := DeepCopy_api_DeploymentCause(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Causes = nil - } - return nil -} - -func DeepCopy_api_DeploymentLog(in DeploymentLog, out *DeploymentLog, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_DeploymentLogOptions(in DeploymentLogOptions, out *DeploymentLogOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Container = in.Container - out.Follow = in.Follow - out.Previous = in.Previous - if in.SinceSeconds != nil { - in, out := in.SinceSeconds, &out.SinceSeconds - *out = new(int64) - **out = *in - } else { - out.SinceSeconds = nil - } - if in.SinceTime != nil { - in, out := in.SinceTime, &out.SinceTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.SinceTime = nil - } - out.Timestamps = in.Timestamps - if in.TailLines != nil { - in, out := in.TailLines, &out.TailLines - *out = new(int64) - **out = *in - } else { - out.TailLines = nil - } - if in.LimitBytes != nil { - in, out := in.LimitBytes, &out.LimitBytes - *out = new(int64) - **out = *in - } else { - out.LimitBytes = nil - } - out.NoWait = in.NoWait - if in.Version != nil { - in, out := in.Version, &out.Version - *out = new(int64) - **out = *in - } else { - out.Version = nil - } - return nil -} - -func DeepCopy_api_DeploymentStrategy(in DeploymentStrategy, out *DeploymentStrategy, c *conversion.Cloner) error { - out.Type = in.Type - if in.RecreateParams != nil { - in, out := in.RecreateParams, &out.RecreateParams - *out = new(RecreateDeploymentStrategyParams) - if err := DeepCopy_api_RecreateDeploymentStrategyParams(*in, *out, c); err != nil { - return err - } - } else { - out.RecreateParams = nil - } - if in.RollingParams != nil { - in, out := in.RollingParams, &out.RollingParams - *out = new(RollingDeploymentStrategyParams) - if err := DeepCopy_api_RollingDeploymentStrategyParams(*in, *out, c); err != nil { - return err - } - } else { - out.RollingParams = nil - } - if in.CustomParams != nil { - in, out := in.CustomParams, &out.CustomParams - *out = new(CustomDeploymentStrategyParams) - if err := DeepCopy_api_CustomDeploymentStrategyParams(*in, *out, c); err != nil { - return err - } - } else { - out.CustomParams = nil - } - if err := api.DeepCopy_api_ResourceRequirements(in.Resources, &out.Resources, c); err != nil { - return err - } - if in.Labels != nil { - in, out := in.Labels, &out.Labels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Labels = nil - } - if in.Annotations != nil { - in, out := in.Annotations, &out.Annotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Annotations = nil - } - return nil -} - -func DeepCopy_api_DeploymentTriggerImageChangeParams(in DeploymentTriggerImageChangeParams, out *DeploymentTriggerImageChangeParams, c *conversion.Cloner) error { - out.Automatic = in.Automatic - if in.ContainerNames != nil { - in, out := in.ContainerNames, &out.ContainerNames - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.ContainerNames = nil - } - if err := api.DeepCopy_api_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - out.LastTriggeredImage = in.LastTriggeredImage - return nil -} - -func DeepCopy_api_DeploymentTriggerPolicy(in DeploymentTriggerPolicy, out *DeploymentTriggerPolicy, c *conversion.Cloner) error { - out.Type = in.Type - if in.ImageChangeParams != nil { - in, out := in.ImageChangeParams, &out.ImageChangeParams - *out = new(DeploymentTriggerImageChangeParams) - if err := DeepCopy_api_DeploymentTriggerImageChangeParams(*in, *out, c); err != nil { - return err - } - } else { - out.ImageChangeParams = nil - } - return nil -} - -func DeepCopy_api_ExecNewPodHook(in ExecNewPodHook, out *ExecNewPodHook, c *conversion.Cloner) error { - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]api.EnvVar, len(in)) - for i := range in { - if err := api.DeepCopy_api_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - out.ContainerName = in.ContainerName - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Volumes = nil - } - return nil -} - -func DeepCopy_api_LifecycleHook(in LifecycleHook, out *LifecycleHook, c *conversion.Cloner) error { - out.FailurePolicy = in.FailurePolicy - if in.ExecNewPod != nil { - in, out := in.ExecNewPod, &out.ExecNewPod - *out = new(ExecNewPodHook) - if err := DeepCopy_api_ExecNewPodHook(*in, *out, c); err != nil { - return err - } - } else { - out.ExecNewPod = nil - } - if in.TagImages != nil { - in, out := in.TagImages, &out.TagImages - *out = make([]TagImageHook, len(in)) - for i := range in { - if err := DeepCopy_api_TagImageHook(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.TagImages = nil - } - return nil -} - -func DeepCopy_api_RecreateDeploymentStrategyParams(in RecreateDeploymentStrategyParams, out *RecreateDeploymentStrategyParams, c *conversion.Cloner) error { - if in.TimeoutSeconds != nil { - in, out := in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int64) - **out = *in - } else { - out.TimeoutSeconds = nil - } - if in.Pre != nil { - in, out := in.Pre, &out.Pre - *out = new(LifecycleHook) - if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Pre = nil - } - if in.Mid != nil { - in, out := in.Mid, &out.Mid - *out = new(LifecycleHook) - if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Mid = nil - } - if in.Post != nil { - in, out := in.Post, &out.Post - *out = new(LifecycleHook) - if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Post = nil - } - return nil -} - -func DeepCopy_api_RollingDeploymentStrategyParams(in RollingDeploymentStrategyParams, out *RollingDeploymentStrategyParams, c *conversion.Cloner) error { - if in.UpdatePeriodSeconds != nil { - in, out := in.UpdatePeriodSeconds, &out.UpdatePeriodSeconds - *out = new(int64) - **out = *in - } else { - out.UpdatePeriodSeconds = nil - } - if in.IntervalSeconds != nil { - in, out := in.IntervalSeconds, &out.IntervalSeconds - *out = new(int64) - **out = *in - } else { - out.IntervalSeconds = nil - } - if in.TimeoutSeconds != nil { - in, out := in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int64) - **out = *in - } else { - out.TimeoutSeconds = nil - } - if err := intstr.DeepCopy_intstr_IntOrString(in.MaxUnavailable, &out.MaxUnavailable, c); err != nil { - return err - } - if err := intstr.DeepCopy_intstr_IntOrString(in.MaxSurge, &out.MaxSurge, c); err != nil { - return err - } - if in.UpdatePercent != nil { - in, out := in.UpdatePercent, &out.UpdatePercent - *out = new(int32) - **out = *in - } else { - out.UpdatePercent = nil - } - if in.Pre != nil { - in, out := in.Pre, &out.Pre - *out = new(LifecycleHook) - if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Pre = nil - } - if in.Post != nil { - in, out := in.Post, &out.Post - *out = new(LifecycleHook) - if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Post = nil - } - return nil -} - -func DeepCopy_api_TagImageHook(in TagImageHook, out *TagImageHook, c *conversion.Cloner) error { - out.ContainerName = in.ContainerName - if err := api.DeepCopy_api_ObjectReference(in.To, &out.To, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_TemplateImage(in TemplateImage, out *TemplateImage, c *conversion.Cloner) error { - out.Image = in.Image - if in.Ref != nil { - in, out := in.Ref, &out.Ref - *out = new(image_api.DockerImageReference) - if err := image_api.DeepCopy_api_DockerImageReference(*in, *out, c); err != nil { - return err - } - } else { - out.Ref = nil - } - if in.From != nil { - in, out := in.From, &out.From - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.From = nil - } - if in.Container != nil { - in, out := in.Container, &out.Container - *out = new(api.Container) - if err := api.DeepCopy_api_Container(*in, *out, c); err != nil { - return err - } - } else { - out.Container = nil - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/doc.go b/vendor/github.com/openshift/origin/pkg/deploy/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/register.go b/vendor/github.com/openshift/origin/pkg/deploy/api/register.go index 77703a05..2e0bb684 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "deploy.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,13 +21,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &DeploymentConfig{}, &DeploymentConfigList{}, @@ -34,6 +35,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &DeploymentLog{}, &DeploymentLogOptions{}, ) + return nil } func (obj *DeploymentConfig) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/conversion.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/conversion.go index 4651b392..4d4a1857 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/conversion.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/conversion.go @@ -132,7 +132,7 @@ func Convert_api_RollingDeploymentStrategyParams_To_v1_RollingDeploymentStrategy return nil } -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { err := scheme.AddConversionFuncs( Convert_v1_DeploymentTriggerImageChangeParams_To_api_DeploymentTriggerImageChangeParams, Convert_api_DeploymentTriggerImageChangeParams_To_v1_DeploymentTriggerImageChangeParams, @@ -141,12 +141,13 @@ func addConversionFuncs(scheme *runtime.Scheme) { Convert_api_RollingDeploymentStrategyParams_To_v1_RollingDeploymentStrategyParams, ) if err != nil { - panic(err) + return err } if err := scheme.AddFieldLabelConversionFunc("v1", "DeploymentConfig", oapi.GetFieldLabelConversionFunc(newer.DeploymentConfigToSelectableFields(&newer.DeploymentConfig{}), nil), ); err != nil { - panic(err) + return err } + return nil } diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/deep_copy_generated.go deleted file mode 100644 index 32382ec7..00000000 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/deep_copy_generated.go +++ /dev/null @@ -1,544 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - api_v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1_CustomDeploymentStrategyParams, - DeepCopy_v1_DeploymentCause, - DeepCopy_v1_DeploymentCauseImageTrigger, - DeepCopy_v1_DeploymentConfig, - DeepCopy_v1_DeploymentConfigList, - DeepCopy_v1_DeploymentConfigRollback, - DeepCopy_v1_DeploymentConfigRollbackSpec, - DeepCopy_v1_DeploymentConfigSpec, - DeepCopy_v1_DeploymentConfigStatus, - DeepCopy_v1_DeploymentDetails, - DeepCopy_v1_DeploymentLog, - DeepCopy_v1_DeploymentLogOptions, - DeepCopy_v1_DeploymentStrategy, - DeepCopy_v1_DeploymentTriggerImageChangeParams, - DeepCopy_v1_DeploymentTriggerPolicy, - DeepCopy_v1_ExecNewPodHook, - DeepCopy_v1_LifecycleHook, - DeepCopy_v1_RecreateDeploymentStrategyParams, - DeepCopy_v1_RollingDeploymentStrategyParams, - DeepCopy_v1_TagImageHook, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1_CustomDeploymentStrategyParams(in CustomDeploymentStrategyParams, out *CustomDeploymentStrategyParams, c *conversion.Cloner) error { - out.Image = in.Image - if in.Environment != nil { - in, out := in.Environment, &out.Environment - *out = make([]api_v1.EnvVar, len(in)) - for i := range in { - if err := api_v1.DeepCopy_v1_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Environment = nil - } - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - return nil -} - -func DeepCopy_v1_DeploymentCause(in DeploymentCause, out *DeploymentCause, c *conversion.Cloner) error { - out.Type = in.Type - if in.ImageTrigger != nil { - in, out := in.ImageTrigger, &out.ImageTrigger - *out = new(DeploymentCauseImageTrigger) - if err := DeepCopy_v1_DeploymentCauseImageTrigger(*in, *out, c); err != nil { - return err - } - } else { - out.ImageTrigger = nil - } - return nil -} - -func DeepCopy_v1_DeploymentCauseImageTrigger(in DeploymentCauseImageTrigger, out *DeploymentCauseImageTrigger, c *conversion.Cloner) error { - if err := api_v1.DeepCopy_v1_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_DeploymentConfig(in DeploymentConfig, out *DeploymentConfig, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_DeploymentConfigSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_DeploymentConfigStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_DeploymentConfigList(in DeploymentConfigList, out *DeploymentConfigList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]DeploymentConfig, len(in)) - for i := range in { - if err := DeepCopy_v1_DeploymentConfig(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_DeploymentConfigRollback(in DeploymentConfigRollback, out *DeploymentConfigRollback, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Name = in.Name - if in.UpdatedAnnotations != nil { - in, out := in.UpdatedAnnotations, &out.UpdatedAnnotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.UpdatedAnnotations = nil - } - if err := DeepCopy_v1_DeploymentConfigRollbackSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_DeploymentConfigRollbackSpec(in DeploymentConfigRollbackSpec, out *DeploymentConfigRollbackSpec, c *conversion.Cloner) error { - if err := api_v1.DeepCopy_v1_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - out.Revision = in.Revision - out.IncludeTriggers = in.IncludeTriggers - out.IncludeTemplate = in.IncludeTemplate - out.IncludeReplicationMeta = in.IncludeReplicationMeta - out.IncludeStrategy = in.IncludeStrategy - return nil -} - -func DeepCopy_v1_DeploymentConfigSpec(in DeploymentConfigSpec, out *DeploymentConfigSpec, c *conversion.Cloner) error { - if err := DeepCopy_v1_DeploymentStrategy(in.Strategy, &out.Strategy, c); err != nil { - return err - } - out.MinReadySeconds = in.MinReadySeconds - if in.Triggers != nil { - in, out := in.Triggers, &out.Triggers - *out = make([]DeploymentTriggerPolicy, len(in)) - for i := range in { - if err := DeepCopy_v1_DeploymentTriggerPolicy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Triggers = nil - } - out.Replicas = in.Replicas - if in.RevisionHistoryLimit != nil { - in, out := in.RevisionHistoryLimit, &out.RevisionHistoryLimit - *out = new(int32) - **out = *in - } else { - out.RevisionHistoryLimit = nil - } - out.Test = in.Test - out.Paused = in.Paused - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Selector = nil - } - if in.Template != nil { - in, out := in.Template, &out.Template - *out = new(api_v1.PodTemplateSpec) - if err := api_v1.DeepCopy_v1_PodTemplateSpec(*in, *out, c); err != nil { - return err - } - } else { - out.Template = nil - } - return nil -} - -func DeepCopy_v1_DeploymentConfigStatus(in DeploymentConfigStatus, out *DeploymentConfigStatus, c *conversion.Cloner) error { - out.LatestVersion = in.LatestVersion - out.ObservedGeneration = in.ObservedGeneration - out.Replicas = in.Replicas - out.UpdatedReplicas = in.UpdatedReplicas - out.AvailableReplicas = in.AvailableReplicas - out.UnavailableReplicas = in.UnavailableReplicas - if in.Details != nil { - in, out := in.Details, &out.Details - *out = new(DeploymentDetails) - if err := DeepCopy_v1_DeploymentDetails(*in, *out, c); err != nil { - return err - } - } else { - out.Details = nil - } - return nil -} - -func DeepCopy_v1_DeploymentDetails(in DeploymentDetails, out *DeploymentDetails, c *conversion.Cloner) error { - out.Message = in.Message - if in.Causes != nil { - in, out := in.Causes, &out.Causes - *out = make([]DeploymentCause, len(in)) - for i := range in { - if err := DeepCopy_v1_DeploymentCause(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Causes = nil - } - return nil -} - -func DeepCopy_v1_DeploymentLog(in DeploymentLog, out *DeploymentLog, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_DeploymentLogOptions(in DeploymentLogOptions, out *DeploymentLogOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Container = in.Container - out.Follow = in.Follow - out.Previous = in.Previous - if in.SinceSeconds != nil { - in, out := in.SinceSeconds, &out.SinceSeconds - *out = new(int64) - **out = *in - } else { - out.SinceSeconds = nil - } - if in.SinceTime != nil { - in, out := in.SinceTime, &out.SinceTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.SinceTime = nil - } - out.Timestamps = in.Timestamps - if in.TailLines != nil { - in, out := in.TailLines, &out.TailLines - *out = new(int64) - **out = *in - } else { - out.TailLines = nil - } - if in.LimitBytes != nil { - in, out := in.LimitBytes, &out.LimitBytes - *out = new(int64) - **out = *in - } else { - out.LimitBytes = nil - } - out.NoWait = in.NoWait - if in.Version != nil { - in, out := in.Version, &out.Version - *out = new(int64) - **out = *in - } else { - out.Version = nil - } - return nil -} - -func DeepCopy_v1_DeploymentStrategy(in DeploymentStrategy, out *DeploymentStrategy, c *conversion.Cloner) error { - out.Type = in.Type - if in.CustomParams != nil { - in, out := in.CustomParams, &out.CustomParams - *out = new(CustomDeploymentStrategyParams) - if err := DeepCopy_v1_CustomDeploymentStrategyParams(*in, *out, c); err != nil { - return err - } - } else { - out.CustomParams = nil - } - if in.RecreateParams != nil { - in, out := in.RecreateParams, &out.RecreateParams - *out = new(RecreateDeploymentStrategyParams) - if err := DeepCopy_v1_RecreateDeploymentStrategyParams(*in, *out, c); err != nil { - return err - } - } else { - out.RecreateParams = nil - } - if in.RollingParams != nil { - in, out := in.RollingParams, &out.RollingParams - *out = new(RollingDeploymentStrategyParams) - if err := DeepCopy_v1_RollingDeploymentStrategyParams(*in, *out, c); err != nil { - return err - } - } else { - out.RollingParams = nil - } - if err := api_v1.DeepCopy_v1_ResourceRequirements(in.Resources, &out.Resources, c); err != nil { - return err - } - if in.Labels != nil { - in, out := in.Labels, &out.Labels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Labels = nil - } - if in.Annotations != nil { - in, out := in.Annotations, &out.Annotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Annotations = nil - } - return nil -} - -func DeepCopy_v1_DeploymentTriggerImageChangeParams(in DeploymentTriggerImageChangeParams, out *DeploymentTriggerImageChangeParams, c *conversion.Cloner) error { - out.Automatic = in.Automatic - if in.ContainerNames != nil { - in, out := in.ContainerNames, &out.ContainerNames - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.ContainerNames = nil - } - if err := api_v1.DeepCopy_v1_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - out.LastTriggeredImage = in.LastTriggeredImage - return nil -} - -func DeepCopy_v1_DeploymentTriggerPolicy(in DeploymentTriggerPolicy, out *DeploymentTriggerPolicy, c *conversion.Cloner) error { - out.Type = in.Type - if in.ImageChangeParams != nil { - in, out := in.ImageChangeParams, &out.ImageChangeParams - *out = new(DeploymentTriggerImageChangeParams) - if err := DeepCopy_v1_DeploymentTriggerImageChangeParams(*in, *out, c); err != nil { - return err - } - } else { - out.ImageChangeParams = nil - } - return nil -} - -func DeepCopy_v1_ExecNewPodHook(in ExecNewPodHook, out *ExecNewPodHook, c *conversion.Cloner) error { - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]api_v1.EnvVar, len(in)) - for i := range in { - if err := api_v1.DeepCopy_v1_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - out.ContainerName = in.ContainerName - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Volumes = nil - } - return nil -} - -func DeepCopy_v1_LifecycleHook(in LifecycleHook, out *LifecycleHook, c *conversion.Cloner) error { - out.FailurePolicy = in.FailurePolicy - if in.ExecNewPod != nil { - in, out := in.ExecNewPod, &out.ExecNewPod - *out = new(ExecNewPodHook) - if err := DeepCopy_v1_ExecNewPodHook(*in, *out, c); err != nil { - return err - } - } else { - out.ExecNewPod = nil - } - if in.TagImages != nil { - in, out := in.TagImages, &out.TagImages - *out = make([]TagImageHook, len(in)) - for i := range in { - if err := DeepCopy_v1_TagImageHook(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.TagImages = nil - } - return nil -} - -func DeepCopy_v1_RecreateDeploymentStrategyParams(in RecreateDeploymentStrategyParams, out *RecreateDeploymentStrategyParams, c *conversion.Cloner) error { - if in.TimeoutSeconds != nil { - in, out := in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int64) - **out = *in - } else { - out.TimeoutSeconds = nil - } - if in.Pre != nil { - in, out := in.Pre, &out.Pre - *out = new(LifecycleHook) - if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Pre = nil - } - if in.Mid != nil { - in, out := in.Mid, &out.Mid - *out = new(LifecycleHook) - if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Mid = nil - } - if in.Post != nil { - in, out := in.Post, &out.Post - *out = new(LifecycleHook) - if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Post = nil - } - return nil -} - -func DeepCopy_v1_RollingDeploymentStrategyParams(in RollingDeploymentStrategyParams, out *RollingDeploymentStrategyParams, c *conversion.Cloner) error { - if in.UpdatePeriodSeconds != nil { - in, out := in.UpdatePeriodSeconds, &out.UpdatePeriodSeconds - *out = new(int64) - **out = *in - } else { - out.UpdatePeriodSeconds = nil - } - if in.IntervalSeconds != nil { - in, out := in.IntervalSeconds, &out.IntervalSeconds - *out = new(int64) - **out = *in - } else { - out.IntervalSeconds = nil - } - if in.TimeoutSeconds != nil { - in, out := in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int64) - **out = *in - } else { - out.TimeoutSeconds = nil - } - if in.MaxUnavailable != nil { - in, out := in.MaxUnavailable, &out.MaxUnavailable - *out = new(intstr.IntOrString) - if err := intstr.DeepCopy_intstr_IntOrString(*in, *out, c); err != nil { - return err - } - } else { - out.MaxUnavailable = nil - } - if in.MaxSurge != nil { - in, out := in.MaxSurge, &out.MaxSurge - *out = new(intstr.IntOrString) - if err := intstr.DeepCopy_intstr_IntOrString(*in, *out, c); err != nil { - return err - } - } else { - out.MaxSurge = nil - } - if in.UpdatePercent != nil { - in, out := in.UpdatePercent, &out.UpdatePercent - *out = new(int32) - **out = *in - } else { - out.UpdatePercent = nil - } - if in.Pre != nil { - in, out := in.Pre, &out.Pre - *out = new(LifecycleHook) - if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Pre = nil - } - if in.Post != nil { - in, out := in.Post, &out.Post - *out = new(LifecycleHook) - if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { - return err - } - } else { - out.Post = nil - } - return nil -} - -func DeepCopy_v1_TagImageHook(in TagImageHook, out *TagImageHook, c *conversion.Cloner) error { - out.ContainerName = in.ContainerName - if err := api_v1.DeepCopy_v1_ObjectReference(in.To, &out.To, c); err != nil { - return err - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/defaults.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/defaults.go index 6d46e9e7..8986ed4e 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/defaults.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/defaults.go @@ -100,8 +100,9 @@ func SetDefaults_RollingDeploymentStrategyParams(obj *RollingDeploymentStrategyP func SetDefaults_DeploymentConfig(obj *DeploymentConfig) { for _, t := range obj.Spec.Triggers { if t.ImageChangeParams != nil { - // Default unconditionally for transforming old data. - t.ImageChangeParams.From.Kind = "ImageStreamTag" + if len(t.ImageChangeParams.From.Kind) == 0 { + t.ImageChangeParams.From.Kind = "ImageStreamTag" + } if len(t.ImageChangeParams.From.Namespace) == 0 { t.ImageChangeParams.From.Namespace = obj.Namespace } @@ -113,15 +114,12 @@ func mkintp(i int64) *int64 { return &i } -func addDefaultingFuncs(scheme *runtime.Scheme) { - err := scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_DeploymentConfigSpec, SetDefaults_DeploymentStrategy, SetDefaults_RecreateDeploymentStrategyParams, SetDefaults_RollingDeploymentStrategyParams, SetDefaults_DeploymentConfig, ) - if err != nil { - panic(err) - } } diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/doc.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/doc.go index e887205c..06f33c31 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/doc.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/doc.go @@ -1,3 +1,5 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/deploy/api + // Package v1 is the v1 version of the API. -// +genconversion=true package v1 diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/generated.pb.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/generated.pb.go index 619637c8..79c3fab2 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/generated.pb.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/generated.pb.go @@ -23,6 +23,7 @@ DeploymentLogOptions DeploymentStrategy DeploymentTriggerImageChangeParams + DeploymentTriggerPolicies DeploymentTriggerPolicy ExecNewPodHook LifecycleHook @@ -41,6 +42,10 @@ import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" import k8s_io_kubernetes_pkg_util_intstr "k8s.io/kubernetes/pkg/util/intstr" +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -48,85 +53,111 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *CustomDeploymentStrategyParams) Reset() { *m = CustomDeploymentStrategyParams{} } -func (m *CustomDeploymentStrategyParams) String() string { return proto.CompactTextString(m) } -func (*CustomDeploymentStrategyParams) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *DeploymentCause) Reset() { *m = DeploymentCause{} } -func (m *DeploymentCause) String() string { return proto.CompactTextString(m) } -func (*DeploymentCause) ProtoMessage() {} +func (m *CustomDeploymentStrategyParams) Reset() { *m = CustomDeploymentStrategyParams{} } +func (*CustomDeploymentStrategyParams) ProtoMessage() {} +func (*CustomDeploymentStrategyParams) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{0} +} -func (m *DeploymentCauseImageTrigger) Reset() { *m = DeploymentCauseImageTrigger{} } -func (m *DeploymentCauseImageTrigger) String() string { return proto.CompactTextString(m) } -func (*DeploymentCauseImageTrigger) ProtoMessage() {} +func (m *DeploymentCause) Reset() { *m = DeploymentCause{} } +func (*DeploymentCause) ProtoMessage() {} +func (*DeploymentCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *DeploymentConfig) Reset() { *m = DeploymentConfig{} } -func (m *DeploymentConfig) String() string { return proto.CompactTextString(m) } -func (*DeploymentConfig) ProtoMessage() {} +func (m *DeploymentCauseImageTrigger) Reset() { *m = DeploymentCauseImageTrigger{} } +func (*DeploymentCauseImageTrigger) ProtoMessage() {} +func (*DeploymentCauseImageTrigger) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{2} +} -func (m *DeploymentConfigList) Reset() { *m = DeploymentConfigList{} } -func (m *DeploymentConfigList) String() string { return proto.CompactTextString(m) } -func (*DeploymentConfigList) ProtoMessage() {} +func (m *DeploymentConfig) Reset() { *m = DeploymentConfig{} } +func (*DeploymentConfig) ProtoMessage() {} +func (*DeploymentConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } -func (m *DeploymentConfigRollback) Reset() { *m = DeploymentConfigRollback{} } -func (m *DeploymentConfigRollback) String() string { return proto.CompactTextString(m) } -func (*DeploymentConfigRollback) ProtoMessage() {} +func (m *DeploymentConfigList) Reset() { *m = DeploymentConfigList{} } +func (*DeploymentConfigList) ProtoMessage() {} +func (*DeploymentConfigList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } -func (m *DeploymentConfigRollbackSpec) Reset() { *m = DeploymentConfigRollbackSpec{} } -func (m *DeploymentConfigRollbackSpec) String() string { return proto.CompactTextString(m) } -func (*DeploymentConfigRollbackSpec) ProtoMessage() {} +func (m *DeploymentConfigRollback) Reset() { *m = DeploymentConfigRollback{} } +func (*DeploymentConfigRollback) ProtoMessage() {} +func (*DeploymentConfigRollback) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{5} +} -func (m *DeploymentConfigSpec) Reset() { *m = DeploymentConfigSpec{} } -func (m *DeploymentConfigSpec) String() string { return proto.CompactTextString(m) } -func (*DeploymentConfigSpec) ProtoMessage() {} +func (m *DeploymentConfigRollbackSpec) Reset() { *m = DeploymentConfigRollbackSpec{} } +func (*DeploymentConfigRollbackSpec) ProtoMessage() {} +func (*DeploymentConfigRollbackSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{6} +} -func (m *DeploymentConfigStatus) Reset() { *m = DeploymentConfigStatus{} } -func (m *DeploymentConfigStatus) String() string { return proto.CompactTextString(m) } -func (*DeploymentConfigStatus) ProtoMessage() {} +func (m *DeploymentConfigSpec) Reset() { *m = DeploymentConfigSpec{} } +func (*DeploymentConfigSpec) ProtoMessage() {} +func (*DeploymentConfigSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } -func (m *DeploymentDetails) Reset() { *m = DeploymentDetails{} } -func (m *DeploymentDetails) String() string { return proto.CompactTextString(m) } -func (*DeploymentDetails) ProtoMessage() {} +func (m *DeploymentConfigStatus) Reset() { *m = DeploymentConfigStatus{} } +func (*DeploymentConfigStatus) ProtoMessage() {} +func (*DeploymentConfigStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } -func (m *DeploymentLog) Reset() { *m = DeploymentLog{} } -func (m *DeploymentLog) String() string { return proto.CompactTextString(m) } -func (*DeploymentLog) ProtoMessage() {} +func (m *DeploymentDetails) Reset() { *m = DeploymentDetails{} } +func (*DeploymentDetails) ProtoMessage() {} +func (*DeploymentDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } -func (m *DeploymentLogOptions) Reset() { *m = DeploymentLogOptions{} } -func (m *DeploymentLogOptions) String() string { return proto.CompactTextString(m) } -func (*DeploymentLogOptions) ProtoMessage() {} +func (m *DeploymentLog) Reset() { *m = DeploymentLog{} } +func (*DeploymentLog) ProtoMessage() {} +func (*DeploymentLog) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } -func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } -func (m *DeploymentStrategy) String() string { return proto.CompactTextString(m) } -func (*DeploymentStrategy) ProtoMessage() {} +func (m *DeploymentLogOptions) Reset() { *m = DeploymentLogOptions{} } +func (*DeploymentLogOptions) ProtoMessage() {} +func (*DeploymentLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } -func (m *DeploymentTriggerImageChangeParams) Reset() { *m = DeploymentTriggerImageChangeParams{} } -func (m *DeploymentTriggerImageChangeParams) String() string { return proto.CompactTextString(m) } -func (*DeploymentTriggerImageChangeParams) ProtoMessage() {} +func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } +func (*DeploymentStrategy) ProtoMessage() {} +func (*DeploymentStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } -func (m *DeploymentTriggerPolicy) Reset() { *m = DeploymentTriggerPolicy{} } -func (m *DeploymentTriggerPolicy) String() string { return proto.CompactTextString(m) } -func (*DeploymentTriggerPolicy) ProtoMessage() {} +func (m *DeploymentTriggerImageChangeParams) Reset() { *m = DeploymentTriggerImageChangeParams{} } +func (*DeploymentTriggerImageChangeParams) ProtoMessage() {} +func (*DeploymentTriggerImageChangeParams) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{13} +} -func (m *ExecNewPodHook) Reset() { *m = ExecNewPodHook{} } -func (m *ExecNewPodHook) String() string { return proto.CompactTextString(m) } -func (*ExecNewPodHook) ProtoMessage() {} +func (m *DeploymentTriggerPolicies) Reset() { *m = DeploymentTriggerPolicies{} } +func (*DeploymentTriggerPolicies) ProtoMessage() {} +func (*DeploymentTriggerPolicies) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{14} +} -func (m *LifecycleHook) Reset() { *m = LifecycleHook{} } -func (m *LifecycleHook) String() string { return proto.CompactTextString(m) } -func (*LifecycleHook) ProtoMessage() {} +func (m *DeploymentTriggerPolicy) Reset() { *m = DeploymentTriggerPolicy{} } +func (*DeploymentTriggerPolicy) ProtoMessage() {} +func (*DeploymentTriggerPolicy) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{15} +} -func (m *RecreateDeploymentStrategyParams) Reset() { *m = RecreateDeploymentStrategyParams{} } -func (m *RecreateDeploymentStrategyParams) String() string { return proto.CompactTextString(m) } -func (*RecreateDeploymentStrategyParams) ProtoMessage() {} +func (m *ExecNewPodHook) Reset() { *m = ExecNewPodHook{} } +func (*ExecNewPodHook) ProtoMessage() {} +func (*ExecNewPodHook) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } -func (m *RollingDeploymentStrategyParams) Reset() { *m = RollingDeploymentStrategyParams{} } -func (m *RollingDeploymentStrategyParams) String() string { return proto.CompactTextString(m) } -func (*RollingDeploymentStrategyParams) ProtoMessage() {} +func (m *LifecycleHook) Reset() { *m = LifecycleHook{} } +func (*LifecycleHook) ProtoMessage() {} +func (*LifecycleHook) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } -func (m *TagImageHook) Reset() { *m = TagImageHook{} } -func (m *TagImageHook) String() string { return proto.CompactTextString(m) } -func (*TagImageHook) ProtoMessage() {} +func (m *RecreateDeploymentStrategyParams) Reset() { *m = RecreateDeploymentStrategyParams{} } +func (*RecreateDeploymentStrategyParams) ProtoMessage() {} +func (*RecreateDeploymentStrategyParams) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{18} +} + +func (m *RollingDeploymentStrategyParams) Reset() { *m = RollingDeploymentStrategyParams{} } +func (*RollingDeploymentStrategyParams) ProtoMessage() {} +func (*RollingDeploymentStrategyParams) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{19} +} + +func (m *TagImageHook) Reset() { *m = TagImageHook{} } +func (*TagImageHook) ProtoMessage() {} +func (*TagImageHook) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } func init() { proto.RegisterType((*CustomDeploymentStrategyParams)(nil), "github.com.openshift.origin.pkg.deploy.api.v1.CustomDeploymentStrategyParams") @@ -143,6 +174,7 @@ func init() { proto.RegisterType((*DeploymentLogOptions)(nil), "github.com.openshift.origin.pkg.deploy.api.v1.DeploymentLogOptions") proto.RegisterType((*DeploymentStrategy)(nil), "github.com.openshift.origin.pkg.deploy.api.v1.DeploymentStrategy") proto.RegisterType((*DeploymentTriggerImageChangeParams)(nil), "github.com.openshift.origin.pkg.deploy.api.v1.DeploymentTriggerImageChangeParams") + proto.RegisterType((*DeploymentTriggerPolicies)(nil), "github.com.openshift.origin.pkg.deploy.api.v1.DeploymentTriggerPolicies") proto.RegisterType((*DeploymentTriggerPolicy)(nil), "github.com.openshift.origin.pkg.deploy.api.v1.DeploymentTriggerPolicy") proto.RegisterType((*ExecNewPodHook)(nil), "github.com.openshift.origin.pkg.deploy.api.v1.ExecNewPodHook") proto.RegisterType((*LifecycleHook)(nil), "github.com.openshift.origin.pkg.deploy.api.v1.LifecycleHook") @@ -468,17 +500,15 @@ func (m *DeploymentConfigSpec) MarshalTo(data []byte) (int, error) { return 0, err } i += n9 - if len(m.Triggers) > 0 { - for _, msg := range m.Triggers { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(msg.Size())) - n, err := msg.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n + if m.Triggers != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Triggers.Size())) + n10, err := m.Triggers.MarshalTo(data[i:]) + if err != nil { + return 0, err } + i += n10 } data[i] = 0x18 i++ @@ -525,11 +555,11 @@ func (m *DeploymentConfigSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x42 i++ i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n10, err := m.Template.MarshalTo(data[i:]) + n11, err := m.Template.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n10 + i += n11 } data[i] = 0x48 i++ @@ -574,11 +604,11 @@ func (m *DeploymentConfigStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.Details.Size())) - n11, err := m.Details.MarshalTo(data[i:]) + n12, err := m.Details.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n11 + i += n12 } return i, nil } @@ -679,11 +709,11 @@ func (m *DeploymentLogOptions) MarshalTo(data []byte) (int, error) { data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.SinceTime.Size())) - n12, err := m.SinceTime.MarshalTo(data[i:]) + n13, err := m.SinceTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n12 + i += n13 } data[i] = 0x30 i++ @@ -742,40 +772,40 @@ func (m *DeploymentStrategy) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.CustomParams.Size())) - n13, err := m.CustomParams.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n13 - } - if m.RecreateParams != nil { - data[i] = 0x1a - i++ - i = encodeVarintGenerated(data, i, uint64(m.RecreateParams.Size())) - n14, err := m.RecreateParams.MarshalTo(data[i:]) + n14, err := m.CustomParams.MarshalTo(data[i:]) if err != nil { return 0, err } i += n14 } - if m.RollingParams != nil { - data[i] = 0x22 + if m.RecreateParams != nil { + data[i] = 0x1a i++ - i = encodeVarintGenerated(data, i, uint64(m.RollingParams.Size())) - n15, err := m.RollingParams.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.RecreateParams.Size())) + n15, err := m.RecreateParams.MarshalTo(data[i:]) if err != nil { return 0, err } i += n15 } + if m.RollingParams != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.RollingParams.Size())) + n16, err := m.RollingParams.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n16 + } data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.Resources.Size())) - n16, err := m.Resources.MarshalTo(data[i:]) + n17, err := m.Resources.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n16 + i += n17 if len(m.Labels) > 0 { for k := range m.Labels { data[i] = 0x32 @@ -854,11 +884,11 @@ func (m *DeploymentTriggerImageChangeParams) MarshalTo(data []byte) (int, error) data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.From.Size())) - n17, err := m.From.MarshalTo(data[i:]) + n18, err := m.From.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n17 + i += n18 data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(len(m.LastTriggeredImage))) @@ -866,6 +896,36 @@ func (m *DeploymentTriggerImageChangeParams) MarshalTo(data []byte) (int, error) return i, nil } +func (m DeploymentTriggerPolicies) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m DeploymentTriggerPolicies) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m) > 0 { + for _, msg := range m { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + func (m *DeploymentTriggerPolicy) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -889,11 +949,11 @@ func (m *DeploymentTriggerPolicy) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.ImageChangeParams.Size())) - n18, err := m.ImageChangeParams.MarshalTo(data[i:]) + n19, err := m.ImageChangeParams.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n18 + i += n19 } return i, nil } @@ -985,11 +1045,11 @@ func (m *LifecycleHook) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.ExecNewPod.Size())) - n19, err := m.ExecNewPod.MarshalTo(data[i:]) + n20, err := m.ExecNewPod.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n19 + i += n20 } if len(m.TagImages) > 0 { for _, msg := range m.TagImages { @@ -1030,32 +1090,32 @@ func (m *RecreateDeploymentStrategyParams) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Pre.Size())) - n20, err := m.Pre.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n20 - } - if m.Mid != nil { - data[i] = 0x1a - i++ - i = encodeVarintGenerated(data, i, uint64(m.Mid.Size())) - n21, err := m.Mid.MarshalTo(data[i:]) + n21, err := m.Pre.MarshalTo(data[i:]) if err != nil { return 0, err } i += n21 } - if m.Post != nil { - data[i] = 0x22 + if m.Mid != nil { + data[i] = 0x1a i++ - i = encodeVarintGenerated(data, i, uint64(m.Post.Size())) - n22, err := m.Post.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Mid.Size())) + n22, err := m.Mid.MarshalTo(data[i:]) if err != nil { return 0, err } i += n22 } + if m.Post != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Post.Size())) + n23, err := m.Post.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n23 + } return i, nil } @@ -1093,21 +1153,21 @@ func (m *RollingDeploymentStrategyParams) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.MaxUnavailable.Size())) - n23, err := m.MaxUnavailable.MarshalTo(data[i:]) + n24, err := m.MaxUnavailable.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n23 + i += n24 } if m.MaxSurge != nil { data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.MaxSurge.Size())) - n24, err := m.MaxSurge.MarshalTo(data[i:]) + n25, err := m.MaxSurge.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n24 + i += n25 } if m.UpdatePercent != nil { data[i] = 0x30 @@ -1118,21 +1178,21 @@ func (m *RollingDeploymentStrategyParams) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.Pre.Size())) - n25, err := m.Pre.MarshalTo(data[i:]) + n26, err := m.Pre.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n25 + i += n26 } if m.Post != nil { data[i] = 0x42 i++ i = encodeVarintGenerated(data, i, uint64(m.Post.Size())) - n26, err := m.Post.MarshalTo(data[i:]) + n27, err := m.Post.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n26 + i += n27 } return i, nil } @@ -1159,11 +1219,11 @@ func (m *TagImageHook) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.To.Size())) - n27, err := m.To.MarshalTo(data[i:]) + n28, err := m.To.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n27 + i += n28 return i, nil } @@ -1296,11 +1356,9 @@ func (m *DeploymentConfigSpec) Size() (n int) { _ = l l = m.Strategy.Size() n += 1 + l + sovGenerated(uint64(l)) - if len(m.Triggers) > 0 { - for _, e := range m.Triggers { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } + if m.Triggers != nil { + l = m.Triggers.Size() + n += 1 + l + sovGenerated(uint64(l)) } n += 1 + sovGenerated(uint64(m.Replicas)) if m.RevisionHistoryLimit != nil { @@ -1443,6 +1501,18 @@ func (m *DeploymentTriggerImageChangeParams) Size() (n int) { return n } +func (m DeploymentTriggerPolicies) Size() (n int) { + var l int + _ = l + if len(m) > 0 { + for _, e := range m { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *DeploymentTriggerPolicy) Size() (n int) { var l int _ = l @@ -1577,6 +1647,316 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *CustomDeploymentStrategyParams) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CustomDeploymentStrategyParams{`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Environment:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Environment), "EnvVar", "k8s_io_kubernetes_pkg_api_v1.EnvVar", 1), `&`, ``, 1) + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentCause{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `ImageTrigger:` + strings.Replace(fmt.Sprintf("%v", this.ImageTrigger), "DeploymentCauseImageTrigger", "DeploymentCauseImageTrigger", 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentCauseImageTrigger) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentCauseImageTrigger{`, + `From:` + strings.Replace(strings.Replace(this.From.String(), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentConfig{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentConfigSpec", "DeploymentConfigSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DeploymentConfigStatus", "DeploymentConfigStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentConfigList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DeploymentConfig", "DeploymentConfig", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigRollback) String() string { + if this == nil { + return "nil" + } + keysForUpdatedAnnotations := make([]string, 0, len(this.UpdatedAnnotations)) + for k := range this.UpdatedAnnotations { + keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) + mapStringForUpdatedAnnotations := "map[string]string{" + for _, k := range keysForUpdatedAnnotations { + mapStringForUpdatedAnnotations += fmt.Sprintf("%v: %v,", k, this.UpdatedAnnotations[k]) + } + mapStringForUpdatedAnnotations += "}" + s := strings.Join([]string{`&DeploymentConfigRollback{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UpdatedAnnotations:` + mapStringForUpdatedAnnotations + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentConfigRollbackSpec", "DeploymentConfigRollbackSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigRollbackSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentConfigRollbackSpec{`, + `From:` + strings.Replace(strings.Replace(this.From.String(), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, + `IncludeTriggers:` + fmt.Sprintf("%v", this.IncludeTriggers) + `,`, + `IncludeTemplate:` + fmt.Sprintf("%v", this.IncludeTemplate) + `,`, + `IncludeReplicationMeta:` + fmt.Sprintf("%v", this.IncludeReplicationMeta) + `,`, + `IncludeStrategy:` + fmt.Sprintf("%v", this.IncludeStrategy) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigSpec) String() string { + if this == nil { + return "nil" + } + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&DeploymentConfigSpec{`, + `Strategy:` + strings.Replace(strings.Replace(this.Strategy.String(), "DeploymentStrategy", "DeploymentStrategy", 1), `&`, ``, 1) + `,`, + `Triggers:` + strings.Replace(fmt.Sprintf("%v", this.Triggers), "DeploymentTriggerPolicies", "DeploymentTriggerPolicies", 1) + `,`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, + `Test:` + fmt.Sprintf("%v", this.Test) + `,`, + `Paused:` + fmt.Sprintf("%v", this.Paused) + `,`, + `Selector:` + mapStringForSelector + `,`, + `Template:` + strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "k8s_io_kubernetes_pkg_api_v1.PodTemplateSpec", 1) + `,`, + `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentConfigStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentConfigStatus{`, + `LatestVersion:` + fmt.Sprintf("%v", this.LatestVersion) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `UpdatedReplicas:` + fmt.Sprintf("%v", this.UpdatedReplicas) + `,`, + `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, + `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, + `Details:` + strings.Replace(fmt.Sprintf("%v", this.Details), "DeploymentDetails", "DeploymentDetails", 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentDetails) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentDetails{`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Causes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Causes), "DeploymentCause", "DeploymentCause", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentLog) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentLog{`, + `}`, + }, "") + return s +} +func (this *DeploymentLogOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentLogOptions{`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Follow:` + fmt.Sprintf("%v", this.Follow) + `,`, + `Previous:` + fmt.Sprintf("%v", this.Previous) + `,`, + `SinceSeconds:` + valueToStringGenerated(this.SinceSeconds) + `,`, + `SinceTime:` + strings.Replace(fmt.Sprintf("%v", this.SinceTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `Timestamps:` + fmt.Sprintf("%v", this.Timestamps) + `,`, + `TailLines:` + valueToStringGenerated(this.TailLines) + `,`, + `LimitBytes:` + valueToStringGenerated(this.LimitBytes) + `,`, + `NoWait:` + fmt.Sprintf("%v", this.NoWait) + `,`, + `Version:` + valueToStringGenerated(this.Version) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentStrategy) String() string { + if this == nil { + return "nil" + } + keysForLabels := make([]string, 0, len(this.Labels)) + for k := range this.Labels { + keysForLabels = append(keysForLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + mapStringForLabels := "map[string]string{" + for _, k := range keysForLabels { + mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) + } + mapStringForLabels += "}" + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" + s := strings.Join([]string{`&DeploymentStrategy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `CustomParams:` + strings.Replace(fmt.Sprintf("%v", this.CustomParams), "CustomDeploymentStrategyParams", "CustomDeploymentStrategyParams", 1) + `,`, + `RecreateParams:` + strings.Replace(fmt.Sprintf("%v", this.RecreateParams), "RecreateDeploymentStrategyParams", "RecreateDeploymentStrategyParams", 1) + `,`, + `RollingParams:` + strings.Replace(fmt.Sprintf("%v", this.RollingParams), "RollingDeploymentStrategyParams", "RollingDeploymentStrategyParams", 1) + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "k8s_io_kubernetes_pkg_api_v1.ResourceRequirements", 1), `&`, ``, 1) + `,`, + `Labels:` + mapStringForLabels + `,`, + `Annotations:` + mapStringForAnnotations + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentTriggerImageChangeParams) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentTriggerImageChangeParams{`, + `Automatic:` + fmt.Sprintf("%v", this.Automatic) + `,`, + `ContainerNames:` + fmt.Sprintf("%v", this.ContainerNames) + `,`, + `From:` + strings.Replace(strings.Replace(this.From.String(), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `LastTriggeredImage:` + fmt.Sprintf("%v", this.LastTriggeredImage) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentTriggerPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentTriggerPolicy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `ImageChangeParams:` + strings.Replace(fmt.Sprintf("%v", this.ImageChangeParams), "DeploymentTriggerImageChangeParams", "DeploymentTriggerImageChangeParams", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ExecNewPodHook) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExecNewPodHook{`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `Env:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Env), "EnvVar", "k8s_io_kubernetes_pkg_api_v1.EnvVar", 1), `&`, ``, 1) + `,`, + `ContainerName:` + fmt.Sprintf("%v", this.ContainerName) + `,`, + `Volumes:` + fmt.Sprintf("%v", this.Volumes) + `,`, + `}`, + }, "") + return s +} +func (this *LifecycleHook) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LifecycleHook{`, + `FailurePolicy:` + fmt.Sprintf("%v", this.FailurePolicy) + `,`, + `ExecNewPod:` + strings.Replace(fmt.Sprintf("%v", this.ExecNewPod), "ExecNewPodHook", "ExecNewPodHook", 1) + `,`, + `TagImages:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TagImages), "TagImageHook", "TagImageHook", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RecreateDeploymentStrategyParams) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RecreateDeploymentStrategyParams{`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `Pre:` + strings.Replace(fmt.Sprintf("%v", this.Pre), "LifecycleHook", "LifecycleHook", 1) + `,`, + `Mid:` + strings.Replace(fmt.Sprintf("%v", this.Mid), "LifecycleHook", "LifecycleHook", 1) + `,`, + `Post:` + strings.Replace(fmt.Sprintf("%v", this.Post), "LifecycleHook", "LifecycleHook", 1) + `,`, + `}`, + }, "") + return s +} +func (this *RollingDeploymentStrategyParams) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RollingDeploymentStrategyParams{`, + `UpdatePeriodSeconds:` + valueToStringGenerated(this.UpdatePeriodSeconds) + `,`, + `IntervalSeconds:` + valueToStringGenerated(this.IntervalSeconds) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1) + `,`, + `UpdatePercent:` + valueToStringGenerated(this.UpdatePercent) + `,`, + `Pre:` + strings.Replace(fmt.Sprintf("%v", this.Pre), "LifecycleHook", "LifecycleHook", 1) + `,`, + `Post:` + strings.Replace(fmt.Sprintf("%v", this.Post), "LifecycleHook", "LifecycleHook", 1) + `,`, + `}`, + }, "") + return s +} +func (this *TagImageHook) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagImageHook{`, + `ContainerName:` + fmt.Sprintf("%v", this.ContainerName) + `,`, + `To:` + strings.Replace(strings.Replace(this.To.String(), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *CustomDeploymentStrategyParams) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -2643,8 +3023,10 @@ func (m *DeploymentConfigSpec) Unmarshal(data []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Triggers = append(m.Triggers, DeploymentTriggerPolicy{}) - if err := m.Triggers[len(m.Triggers)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + if m.Triggers == nil { + m.Triggers = DeploymentTriggerPolicies{} + } + if err := m.Triggers.Unmarshal(data[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -4128,6 +4510,87 @@ func (m *DeploymentTriggerImageChangeParams) Unmarshal(data []byte) error { } return nil } +func (m *DeploymentTriggerPolicies) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeploymentTriggerPolicies: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeploymentTriggerPolicies: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + *m = append(*m, DeploymentTriggerPolicy{}) + if err := (*m)[len(*m)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *DeploymentTriggerPolicy) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -5195,3 +5658,151 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 2291 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x59, 0xcd, 0x6f, 0x24, 0x57, + 0x11, 0x77, 0x7b, 0xc6, 0xf6, 0xcc, 0x1b, 0x7f, 0xbe, 0xfd, 0x9a, 0x4c, 0x90, 0x6d, 0x35, 0x49, + 0xb4, 0x28, 0xd9, 0x1e, 0xad, 0x01, 0x91, 0x6c, 0xd8, 0x80, 0xc7, 0xf1, 0x66, 0x1d, 0xc6, 0x6b, + 0xe7, 0xd9, 0xbb, 0x81, 0x20, 0x84, 0xda, 0x33, 0xcf, 0xb3, 0x1d, 0x4f, 0xf7, 0x1b, 0xfa, 0x63, + 0x76, 0xe7, 0xc4, 0x4a, 0x1c, 0x10, 0x42, 0x48, 0x08, 0x24, 0x84, 0x94, 0x4b, 0x4e, 0x5c, 0x90, + 0xf8, 0x13, 0x38, 0x70, 0x61, 0x39, 0x11, 0x6e, 0x48, 0xa0, 0x55, 0x08, 0x57, 0xf8, 0x07, 0x38, + 0x51, 0xef, 0xab, 0x3f, 0xa6, 0x67, 0x9c, 0x1d, 0xdb, 0x39, 0x8c, 0xe4, 0x7e, 0x55, 0xf5, 0xab, + 0x7a, 0x55, 0xf5, 0xea, 0x55, 0x3d, 0xa3, 0xdb, 0x1d, 0x27, 0x7c, 0x18, 0x1d, 0x59, 0x2d, 0xe6, + 0xd6, 0x59, 0x8f, 0x7a, 0xc1, 0x43, 0xe7, 0x38, 0xac, 0x33, 0xdf, 0xe9, 0x38, 0x5e, 0xbd, 0x77, + 0xd2, 0xa9, 0xb7, 0x69, 0xaf, 0xcb, 0x06, 0x75, 0xbb, 0xe7, 0xd4, 0xfb, 0x37, 0xeb, 0x1d, 0xea, + 0x51, 0xdf, 0x0e, 0x69, 0xdb, 0xea, 0xf9, 0x2c, 0x64, 0xf8, 0x46, 0x22, 0x6e, 0xc5, 0xe2, 0x96, + 0x14, 0xb7, 0x40, 0xdc, 0x92, 0xe2, 0x16, 0x88, 0x5b, 0xfd, 0x9b, 0xb5, 0x14, 0x7b, 0xbd, 0xc3, + 0x3a, 0xac, 0x2e, 0x50, 0x8e, 0xa2, 0x63, 0xf1, 0x25, 0x3e, 0xc4, 0x5f, 0x12, 0xbd, 0xf6, 0xf5, + 0x93, 0xd7, 0x03, 0xcb, 0x61, 0xf5, 0x93, 0xe8, 0x88, 0xfa, 0x1e, 0x0d, 0x69, 0x20, 0x4c, 0xe2, + 0xb6, 0x44, 0x5e, 0x9f, 0xfa, 0x81, 0xc3, 0x3c, 0xda, 0x1e, 0x36, 0xaa, 0xf6, 0xda, 0x78, 0xb1, + 0xfc, 0x16, 0x6a, 0xb7, 0xc7, 0x72, 0x07, 0x75, 0xfa, 0x38, 0x84, 0x3d, 0x81, 0x96, 0x00, 0x24, + 0x8f, 0x68, 0x68, 0xe7, 0xc5, 0x6f, 0x8c, 0x16, 0xf7, 0x23, 0x2f, 0x74, 0x5c, 0x9a, 0x63, 0xbf, + 0x39, 0x9a, 0x3d, 0x0a, 0x9d, 0x6e, 0xdd, 0xf1, 0xc2, 0x20, 0xf4, 0x87, 0x45, 0xcc, 0xbf, 0x18, + 0x68, 0x75, 0x2b, 0x0a, 0x42, 0xe6, 0xbe, 0x2d, 0x9c, 0xe9, 0x52, 0x2f, 0x3c, 0x08, 0x39, 0x47, + 0x67, 0xb0, 0x6f, 0xfb, 0xb6, 0x1b, 0xe0, 0x2f, 0xa3, 0x19, 0xc7, 0xb5, 0x3b, 0xb4, 0x6a, 0xac, + 0x1b, 0xd7, 0xcb, 0x8d, 0x85, 0xa7, 0xcf, 0xd6, 0xa6, 0x3e, 0x7b, 0xb6, 0x36, 0xb3, 0xc3, 0x17, + 0x89, 0xa4, 0xe1, 0xef, 0xa3, 0x0a, 0xf5, 0xfa, 0x8e, 0xcf, 0x3c, 0x8e, 0x50, 0x9d, 0x5e, 0x2f, + 0x5c, 0xaf, 0x6c, 0xbc, 0x64, 0x49, 0x83, 0xac, 0xc4, 0x20, 0x11, 0x37, 0x19, 0x30, 0x6b, 0xdb, + 0xeb, 0x3f, 0xb0, 0xfd, 0xc6, 0x25, 0x05, 0x58, 0xd9, 0x4e, 0x00, 0x48, 0x1a, 0x0d, 0xbf, 0x8c, + 0xe6, 0x20, 0xa8, 0xae, 0xed, 0xb5, 0xab, 0x05, 0x00, 0x2e, 0x37, 0x2a, 0xc0, 0x3e, 0xb7, 0x25, + 0x97, 0x88, 0xa6, 0x99, 0x7f, 0x35, 0xd0, 0x52, 0xb2, 0x8b, 0x2d, 0x3b, 0x0a, 0x28, 0x7e, 0x03, + 0x15, 0xc3, 0x41, 0x4f, 0xdb, 0xfe, 0xb2, 0x52, 0x55, 0x3c, 0x84, 0xb5, 0xff, 0x3d, 0x5b, 0xbb, + 0x92, 0xb0, 0x1f, 0x42, 0x5a, 0x75, 0xa8, 0xcf, 0x09, 0x44, 0x88, 0xe0, 0x27, 0x06, 0x9a, 0x17, + 0x9b, 0x53, 0x24, 0xd8, 0x94, 0x01, 0x9b, 0x7a, 0xd7, 0x9a, 0x28, 0x2d, 0xad, 0x21, 0x8b, 0x76, + 0x52, 0x88, 0x8d, 0x65, 0xb0, 0x65, 0x3e, 0xbd, 0x42, 0x32, 0x1a, 0x4d, 0x0f, 0xbd, 0x78, 0x8a, + 0x38, 0xde, 0x43, 0xc5, 0x63, 0x9f, 0xb9, 0x62, 0x73, 0x95, 0x8d, 0x1b, 0xa7, 0x7b, 0x7b, 0xef, + 0xe8, 0x43, 0xda, 0x0a, 0x09, 0x3d, 0xa6, 0x3e, 0xf5, 0x5a, 0xb4, 0x31, 0xaf, 0x7d, 0x71, 0x07, + 0x20, 0x88, 0x00, 0x32, 0xff, 0x34, 0x8d, 0x96, 0x53, 0x0a, 0x99, 0x77, 0xec, 0x74, 0xf0, 0x77, + 0x51, 0xc9, 0x85, 0xec, 0x6c, 0xdb, 0xa1, 0xad, 0x34, 0x5d, 0x7f, 0x1e, 0x4d, 0xbb, 0x20, 0xd3, + 0xc0, 0x4a, 0x09, 0x4a, 0xd6, 0x48, 0x8c, 0x86, 0x29, 0x2a, 0x06, 0x3d, 0xda, 0x52, 0x8e, 0xdd, + 0x3a, 0xbb, 0x63, 0x85, 0xa1, 0x07, 0x00, 0x95, 0xec, 0x8a, 0x7f, 0x11, 0x01, 0x8f, 0x5d, 0x34, + 0x1b, 0x84, 0x76, 0x18, 0x05, 0x90, 0x3d, 0x5c, 0xd1, 0xf6, 0x79, 0x15, 0x09, 0xb0, 0xc6, 0xa2, + 0x52, 0x35, 0x2b, 0xbf, 0x89, 0x52, 0x62, 0xfe, 0xc3, 0x40, 0x97, 0x87, 0x45, 0x9a, 0x4e, 0x10, + 0xe2, 0x1f, 0xe4, 0x1c, 0x59, 0x3f, 0xc5, 0x91, 0xa9, 0x22, 0x64, 0x71, 0x71, 0xe1, 0xcf, 0x65, + 0xa5, 0xb3, 0xa4, 0x57, 0x52, 0xde, 0x6c, 0xc3, 0x39, 0x0d, 0xa9, 0x1b, 0xa8, 0xc3, 0xf7, 0xad, + 0x73, 0xee, 0x32, 0x75, 0xd0, 0x39, 0x2a, 0x91, 0xe0, 0xe6, 0xc7, 0x05, 0x54, 0x1d, 0x66, 0x25, + 0xac, 0xdb, 0x3d, 0xb2, 0x5b, 0x27, 0x78, 0x1d, 0x15, 0x3d, 0xdb, 0xd5, 0xa7, 0x2d, 0x8e, 0xc5, + 0x3d, 0x58, 0x23, 0x82, 0x82, 0x7f, 0x6f, 0x20, 0x1c, 0xf5, 0xda, 0xbc, 0x02, 0x6d, 0x7a, 0x1e, + 0x03, 0x8f, 0xf1, 0x02, 0xa8, 0x4c, 0xfe, 0xe1, 0x39, 0x4d, 0xd6, 0x76, 0x58, 0xf7, 0x73, 0x1a, + 0xb6, 0xbd, 0xd0, 0x1f, 0x34, 0x6a, 0xca, 0x22, 0x9c, 0x67, 0x20, 0x23, 0xcc, 0x82, 0xcc, 0x91, + 0x09, 0x2a, 0xf3, 0xe6, 0x3b, 0x17, 0x64, 0xde, 0xb8, 0x44, 0xad, 0x6d, 0xa3, 0x6b, 0x63, 0x2c, + 0xc7, 0xcb, 0xa8, 0x70, 0x42, 0x07, 0xd2, 0xb1, 0x84, 0xff, 0x89, 0x2f, 0xa3, 0x99, 0xbe, 0xdd, + 0x8d, 0xa8, 0x38, 0x3d, 0x65, 0x22, 0x3f, 0x6e, 0x4d, 0xbf, 0x6e, 0x98, 0x7f, 0x2c, 0xa0, 0x2f, + 0x9d, 0xa6, 0xfb, 0xc2, 0xeb, 0x06, 0x7e, 0x0d, 0x95, 0x7c, 0xda, 0x77, 0x78, 0xb6, 0x0a, 0x73, + 0x0a, 0x49, 0xa2, 0x12, 0xb5, 0x4e, 0x62, 0x0e, 0xbc, 0x89, 0x96, 0x1c, 0xaf, 0xd5, 0x8d, 0xda, + 0xba, 0x90, 0xc9, 0x83, 0x59, 0x6a, 0x5c, 0x53, 0x42, 0x4b, 0x3b, 0x59, 0x32, 0x19, 0xe6, 0x4f, + 0x43, 0x50, 0xb7, 0xd7, 0x05, 0x97, 0x55, 0x8b, 0xa3, 0x21, 0x14, 0x99, 0x0c, 0xf3, 0xe3, 0x07, + 0xe8, 0xaa, 0x5a, 0x22, 0xe0, 0x2b, 0xa7, 0x25, 0xbc, 0xcd, 0x8f, 0x54, 0x75, 0x46, 0x20, 0xad, + 0x2a, 0xa4, 0xab, 0x3b, 0x23, 0xb9, 0xc8, 0x18, 0xe9, 0x94, 0x69, 0xfa, 0x1e, 0xad, 0xce, 0x8e, + 0x34, 0x4d, 0x93, 0xc9, 0x30, 0xbf, 0xf9, 0xd1, 0x6c, 0xbe, 0x82, 0x88, 0xc0, 0x31, 0x54, 0x0a, + 0x34, 0xa8, 0x0c, 0xde, 0xe6, 0x99, 0x73, 0x52, 0x6b, 0x4b, 0x42, 0x15, 0x1b, 0x14, 0x2b, 0xc1, + 0x3e, 0x2a, 0x85, 0x3a, 0x46, 0xb2, 0x4a, 0xdf, 0x3d, 0xb3, 0x42, 0x15, 0xbc, 0x7d, 0x06, 0xee, + 0x72, 0x68, 0xd0, 0x98, 0xe7, 0x3a, 0xe3, 0x10, 0xc7, 0x7a, 0x64, 0x32, 0x09, 0x9f, 0xca, 0xbc, + 0x98, 0x49, 0x27, 0x93, 0x5c, 0x27, 0x31, 0x07, 0x6e, 0xa2, 0xcb, 0x3a, 0xb1, 0xee, 0x42, 0x4d, + 0x64, 0xfe, 0xa0, 0xe9, 0xb8, 0x4e, 0x28, 0xd2, 0x61, 0xa6, 0x51, 0x05, 0xa9, 0xcb, 0x64, 0x04, + 0x9d, 0x8c, 0x94, 0xe2, 0x05, 0x0c, 0xd2, 0x3f, 0x54, 0x29, 0x10, 0xa7, 0xfa, 0x21, 0xac, 0x11, + 0x41, 0xc1, 0xaf, 0xa0, 0xd9, 0x1e, 0xbf, 0x88, 0xdb, 0x2a, 0xaa, 0xf1, 0x2d, 0xb0, 0x2f, 0x56, + 0x89, 0xa2, 0xe2, 0x1f, 0x43, 0xa8, 0x68, 0x17, 0x4e, 0x0e, 0xf3, 0xab, 0x73, 0xa2, 0xba, 0xbd, + 0x77, 0x01, 0xf7, 0x9b, 0x75, 0xa0, 0x30, 0x65, 0x3d, 0x4b, 0x42, 0xa7, 0x96, 0x49, 0xac, 0x14, + 0xbf, 0x0f, 0xa1, 0xd3, 0x67, 0xa3, 0xf4, 0x3c, 0x07, 0x7d, 0x9f, 0xb5, 0xf5, 0xe1, 0x90, 0x15, + 0x4a, 0xc4, 0x47, 0x9f, 0x9f, 0x18, 0x8c, 0x27, 0xb8, 0xeb, 0x78, 0x84, 0xda, 0xed, 0xc1, 0x01, + 0x6d, 0x31, 0xaf, 0x1d, 0x54, 0xcb, 0xc2, 0xd9, 0x71, 0x82, 0xef, 0x66, 0xc9, 0x64, 0x98, 0xbf, + 0xf6, 0x26, 0x5a, 0xc8, 0x6c, 0x64, 0xa2, 0xf2, 0xf6, 0xeb, 0x22, 0xba, 0x3a, 0xfa, 0x4a, 0xc6, + 0x80, 0xcb, 0x4d, 0x0c, 0xc2, 0x07, 0xf2, 0xea, 0x14, 0x80, 0x85, 0xc6, 0x15, 0x65, 0xd8, 0x42, + 0x33, 0x4d, 0x24, 0x59, 0x5e, 0xfc, 0x2e, 0xc2, 0xec, 0x28, 0xa0, 0x7e, 0x9f, 0xb6, 0xdf, 0x91, + 0x5d, 0x72, 0x52, 0xce, 0xe2, 0x8b, 0x63, 0x2f, 0xc7, 0x41, 0x46, 0x48, 0x4d, 0x98, 0xc3, 0xe0, + 0x51, 0x75, 0xf9, 0x68, 0xa2, 0x4a, 0xdf, 0xd8, 0xa3, 0xf7, 0xb3, 0x64, 0x32, 0xcc, 0x8f, 0xdf, + 0x41, 0x2b, 0x76, 0xdf, 0x76, 0xba, 0xf6, 0x51, 0x97, 0xc6, 0x20, 0x33, 0x02, 0xe4, 0x05, 0x05, + 0xb2, 0xb2, 0x39, 0xcc, 0x40, 0xf2, 0x32, 0x78, 0x17, 0x5d, 0x8a, 0xbc, 0x3c, 0xd4, 0xac, 0x80, + 0x7a, 0x51, 0x41, 0x5d, 0xba, 0x9f, 0x67, 0x21, 0xa3, 0xe4, 0x70, 0x07, 0xcd, 0xb5, 0xa1, 0x2a, + 0x3a, 0xdd, 0x00, 0x4e, 0x01, 0x4f, 0xc2, 0x6f, 0x9f, 0xf9, 0x14, 0xbc, 0x2d, 0x71, 0x64, 0xf3, + 0xaf, 0x3e, 0x88, 0x46, 0x37, 0x7f, 0x67, 0xa0, 0x95, 0x1c, 0x2f, 0xfe, 0x0a, 0x9a, 0x73, 0x69, + 0x10, 0x24, 0xd3, 0xcb, 0x92, 0xda, 0xc1, 0xdc, 0xae, 0x5c, 0x26, 0x9a, 0x8e, 0x8f, 0xd1, 0x6c, + 0x8b, 0x1f, 0x5d, 0xdd, 0x8c, 0xbc, 0x75, 0xbe, 0x3e, 0x3f, 0x29, 0x0c, 0xe2, 0x13, 0xda, 0x43, + 0x89, 0x6e, 0x2e, 0xa1, 0x85, 0x84, 0xb5, 0xc9, 0x3a, 0xe6, 0x2f, 0x8a, 0xe9, 0x6a, 0x0f, 0x2b, + 0x7b, 0x3d, 0xd9, 0x7d, 0xd4, 0x51, 0x19, 0x8e, 0x0b, 0x6c, 0x04, 0xd2, 0x4a, 0x99, 0xbf, 0xa2, + 0x40, 0xcb, 0x5b, 0x9a, 0x40, 0x12, 0x1e, 0x5e, 0x9b, 0x8e, 0xe1, 0x9e, 0x67, 0x8f, 0x44, 0xd6, + 0xa6, 0x6a, 0xd3, 0x1d, 0xb1, 0x4a, 0x14, 0x95, 0x67, 0x67, 0x8f, 0x97, 0x3f, 0x16, 0xe9, 0x9b, + 0x37, 0xce, 0xce, 0x7d, 0xb5, 0x4e, 0x62, 0x0e, 0xfc, 0x35, 0x34, 0x1f, 0xc0, 0x0d, 0x45, 0xf5, + 0x61, 0x2f, 0xca, 0x0b, 0x9e, 0x8f, 0x2e, 0x07, 0xa9, 0x75, 0x92, 0xe1, 0x82, 0xa9, 0xa1, 0x2c, + 0xbe, 0x0f, 0x61, 0x50, 0x15, 0x89, 0x58, 0xd9, 0x78, 0xf5, 0x39, 0xbb, 0x5d, 0x2e, 0xd2, 0x58, + 0xe0, 0xbb, 0x3c, 0xd0, 0x08, 0x24, 0x01, 0xc3, 0x1b, 0x08, 0xf1, 0xe9, 0x17, 0xba, 0x6d, 0xb7, + 0x17, 0xa8, 0x2a, 0x1c, 0xcf, 0x19, 0x87, 0x31, 0x85, 0xa4, 0xb8, 0xf0, 0xab, 0xa8, 0xcc, 0x13, + 0xa2, 0x09, 0x6e, 0x92, 0x89, 0x58, 0x90, 0x0a, 0x0e, 0xf5, 0x22, 0x49, 0xe8, 0xd8, 0x42, 0xa8, + 0xcb, 0x6f, 0x83, 0xc6, 0x00, 0x2c, 0x14, 0xb5, 0xb3, 0xd0, 0x58, 0xe4, 0xe0, 0xcd, 0x78, 0x95, + 0xa4, 0x38, 0xb8, 0xdb, 0x3d, 0xf6, 0xc8, 0x86, 0x4b, 0xa7, 0x9c, 0x75, 0xfb, 0x3d, 0xf6, 0x3e, + 0xac, 0x12, 0x45, 0xe5, 0x63, 0xac, 0xda, 0x64, 0x15, 0x09, 0x50, 0x91, 0xc9, 0xba, 0x1a, 0x69, + 0x9a, 0xf9, 0xb7, 0x39, 0x84, 0xf3, 0xd7, 0x34, 0xbe, 0x95, 0x99, 0x64, 0x5f, 0x19, 0x9a, 0x64, + 0xaf, 0xe6, 0x25, 0x52, 0xa3, 0xec, 0x4f, 0x60, 0x94, 0x6d, 0x89, 0x29, 0x5f, 0xce, 0xf4, 0xea, + 0x2e, 0xdf, 0x9d, 0x30, 0xc5, 0x4f, 0x7f, 0x28, 0x90, 0x29, 0xb1, 0x95, 0x52, 0x43, 0x32, 0x4a, + 0xf1, 0xcf, 0x0d, 0xb4, 0xe8, 0xd3, 0x96, 0x4f, 0x41, 0x48, 0xd9, 0x21, 0x1b, 0xeb, 0xbd, 0x09, + 0xed, 0x20, 0x0a, 0x64, 0xac, 0x25, 0x18, 0x2c, 0x59, 0x24, 0x19, 0x55, 0x64, 0x48, 0x35, 0xfe, + 0xa9, 0x81, 0x16, 0x7c, 0x38, 0x0f, 0x8e, 0xd7, 0x51, 0xc6, 0x14, 0x85, 0x31, 0xf7, 0x26, 0x35, + 0x46, 0x62, 0x8c, 0xb5, 0x65, 0x85, 0x5f, 0x3c, 0x24, 0xad, 0x88, 0x64, 0xf5, 0xe2, 0x16, 0x2a, + 0xfb, 0x34, 0x60, 0x91, 0xdf, 0xa2, 0x81, 0x3a, 0x2a, 0x1b, 0xa7, 0x5f, 0xd5, 0x44, 0xb1, 0x13, + 0xfa, 0xa3, 0xc8, 0xf1, 0x29, 0xd7, 0x1a, 0x24, 0xb5, 0x41, 0x53, 0x21, 0xa9, 0x63, 0x5c, 0x1c, + 0xa1, 0x59, 0xa8, 0xcc, 0xb4, 0xcb, 0x4f, 0x4c, 0xe1, 0x0c, 0xb1, 0xcf, 0xef, 0xcf, 0x6a, 0x0a, + 0x3c, 0xd9, 0x89, 0xc4, 0x39, 0x2f, 0x17, 0x89, 0x52, 0x86, 0x7f, 0x66, 0xa0, 0x8a, 0x9d, 0x1a, + 0xf4, 0x64, 0x2b, 0x44, 0xce, 0xaf, 0x3c, 0x37, 0xdb, 0xc5, 0xcf, 0x48, 0xe9, 0xa1, 0x2e, 0xad, + 0xbb, 0xf6, 0x06, 0xaa, 0xa4, 0x4c, 0x9e, 0xa4, 0xe7, 0xa8, 0xbd, 0x85, 0x96, 0xcf, 0x35, 0x92, + 0xfd, 0x61, 0x1a, 0x99, 0xb9, 0x4e, 0x58, 0xbc, 0xe5, 0x6c, 0x3d, 0xb4, 0xbd, 0x8e, 0xce, 0x49, + 0xa8, 0xf8, 0x76, 0x04, 0x07, 0x06, 0xd4, 0xb4, 0x04, 0x70, 0x29, 0x89, 0xea, 0xa6, 0x26, 0x90, + 0x84, 0x07, 0x8a, 0xc2, 0x62, 0x5c, 0xfe, 0xf9, 0x94, 0x2d, 0x2f, 0xaf, 0xb2, 0x3c, 0x00, 0x5b, + 0x19, 0x0a, 0x19, 0xe2, 0x8c, 0xa7, 0xc0, 0xc2, 0x45, 0x4d, 0x81, 0xd0, 0x40, 0x75, 0xed, 0x40, + 0xef, 0x8e, 0xb6, 0xc5, 0xfe, 0xc4, 0xa9, 0x2a, 0x27, 0x0d, 0x54, 0x33, 0xc7, 0x41, 0x46, 0x48, + 0x99, 0xbf, 0x32, 0xd0, 0x0b, 0x63, 0x47, 0x07, 0x7c, 0xa2, 0x9f, 0x3a, 0x0c, 0x91, 0x4e, 0x77, + 0x2e, 0x64, 0x26, 0x19, 0x8c, 0x7e, 0xf1, 0xb8, 0x55, 0xfa, 0xed, 0xc7, 0x6b, 0x53, 0x4f, 0xfe, + 0xb9, 0x3e, 0x65, 0xfe, 0xd7, 0x40, 0xd7, 0xc6, 0xc8, 0x9e, 0xe7, 0xa1, 0xf1, 0x37, 0xd0, 0xba, + 0x38, 0xc3, 0xb9, 0xa0, 0x4a, 0xf4, 0x7b, 0xe7, 0xdd, 0x5a, 0x2e, 0xc9, 0x1a, 0x57, 0x78, 0x2f, + 0x98, 0x5b, 0x26, 0x79, 0x13, 0xcc, 0x4f, 0xa1, 0x60, 0x6f, 0x3f, 0xa6, 0xad, 0x7b, 0xf4, 0x11, + 0x0c, 0x07, 0x77, 0x19, 0x3b, 0x49, 0x3f, 0xc5, 0x1a, 0xe3, 0x9f, 0x62, 0xf1, 0x16, 0x2a, 0x50, + 0xaf, 0x3f, 0xd1, 0x33, 0x70, 0x45, 0xb9, 0xac, 0x00, 0xdf, 0x84, 0x4b, 0xf3, 0x6e, 0x3e, 0x93, + 0xb2, 0x22, 0x53, 0xcb, 0x49, 0x37, 0x9f, 0xc9, 0x6f, 0x92, 0xe5, 0x15, 0x97, 0x2d, 0xeb, 0x46, + 0xfc, 0x48, 0x14, 0x13, 0x43, 0x1f, 0xc8, 0x25, 0xa2, 0x69, 0xe6, 0x9f, 0xa7, 0xd1, 0x42, 0xd3, + 0x39, 0xa6, 0xad, 0x41, 0xab, 0x4b, 0xc5, 0x0e, 0xbf, 0x87, 0x16, 0x8e, 0xa1, 0x15, 0x88, 0x7c, + 0x2a, 0x23, 0xab, 0x22, 0xfa, 0x55, 0xad, 0xf5, 0x4e, 0x9a, 0x08, 0xa1, 0xad, 0x65, 0xc4, 0x33, + 0x54, 0x92, 0x45, 0xc2, 0x2e, 0x42, 0x34, 0x76, 0xa7, 0x0a, 0xf0, 0xed, 0x09, 0x03, 0x9c, 0x8d, + 0x87, 0xec, 0x4b, 0x92, 0x35, 0x92, 0x52, 0x80, 0xbb, 0xbc, 0xe9, 0xe9, 0x88, 0x48, 0x07, 0xe2, + 0xe1, 0xbc, 0xb2, 0xf1, 0xe6, 0x84, 0xda, 0x0e, 0x95, 0xbc, 0xd0, 0x15, 0x97, 0x22, 0xbd, 0x2a, + 0xba, 0x26, 0xf5, 0xa7, 0xf9, 0x9f, 0x69, 0xb4, 0xfe, 0x79, 0x17, 0x33, 0xaf, 0x57, 0xbc, 0x2b, + 0x63, 0x51, 0xa8, 0xbb, 0x49, 0x39, 0xa1, 0x89, 0x7a, 0x75, 0x98, 0xa1, 0x90, 0x21, 0x4e, 0x18, + 0x68, 0x0b, 0xd0, 0x93, 0x2a, 0xb7, 0x7d, 0x73, 0xc2, 0x8d, 0x64, 0x82, 0xd4, 0x98, 0xe3, 0x79, + 0x06, 0xad, 0x2e, 0xe1, 0x88, 0x1c, 0xd8, 0x75, 0xda, 0xaa, 0x0e, 0x5e, 0x00, 0xf0, 0xae, 0xd3, + 0x26, 0x1c, 0x11, 0x7f, 0x80, 0x8a, 0x3d, 0x16, 0x84, 0xaa, 0xb1, 0x38, 0x1f, 0x72, 0x89, 0x57, + 0x93, 0x7d, 0xc6, 0xdf, 0x21, 0x38, 0xa6, 0xf9, 0xd1, 0x0c, 0x5a, 0xfb, 0x9c, 0xd6, 0x03, 0xef, + 0xc0, 0x2c, 0x27, 0xe6, 0xc4, 0x7d, 0xea, 0x3b, 0xac, 0x9d, 0x75, 0xf9, 0x35, 0x31, 0xc7, 0xe5, + 0xc9, 0x64, 0x94, 0x0c, 0xbe, 0xcd, 0x5f, 0xb5, 0x42, 0x18, 0x73, 0xed, 0xae, 0x86, 0x91, 0x93, + 0xf1, 0x25, 0xf9, 0xa2, 0x95, 0x21, 0x91, 0x61, 0xde, 0x11, 0x71, 0x2f, 0x3c, 0x77, 0xdc, 0x3f, + 0x44, 0x8b, 0xae, 0xfd, 0x38, 0x35, 0x71, 0x2a, 0x7f, 0x5a, 0x63, 0xca, 0x0a, 0xff, 0x77, 0x97, + 0x25, 0xff, 0xdd, 0x65, 0x81, 0x61, 0x7b, 0x3e, 0x78, 0x05, 0xbc, 0x24, 0x75, 0xed, 0x66, 0x90, + 0xc8, 0x10, 0xb2, 0xf8, 0x5f, 0x87, 0xfd, 0xf8, 0x20, 0xf2, 0x3b, 0x7a, 0x68, 0x99, 0x54, 0x8b, + 0x78, 0x35, 0xd9, 0x55, 0x18, 0x24, 0x46, 0xc3, 0xdf, 0x40, 0x0b, 0xb1, 0x5f, 0x5b, 0xfc, 0x5f, + 0x64, 0x72, 0xa2, 0x16, 0xdd, 0xe1, 0xfd, 0x34, 0x81, 0x64, 0xf9, 0x74, 0xda, 0xcf, 0x5d, 0x78, + 0xda, 0xeb, 0xec, 0x2c, 0x7d, 0x01, 0xd9, 0x09, 0x57, 0xda, 0x7c, 0xba, 0x76, 0xe4, 0x6b, 0xb9, + 0x31, 0x41, 0x2d, 0xdf, 0x41, 0xd3, 0x21, 0x53, 0x07, 0x7f, 0xc2, 0x3e, 0x05, 0x29, 0x05, 0xd3, + 0x87, 0x8c, 0x00, 0x48, 0xe3, 0xa5, 0xa7, 0xff, 0x5a, 0x9d, 0xfa, 0x04, 0x7e, 0x7f, 0x87, 0xdf, + 0x93, 0xcf, 0x56, 0x8d, 0xa7, 0xf0, 0xfb, 0x04, 0x7e, 0x9f, 0xc2, 0xef, 0x97, 0xff, 0x5e, 0x9d, + 0xfa, 0x60, 0xba, 0x7f, 0xf3, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x09, 0xcb, 0xb2, 0xb9, + 0x1e, 0x00, 0x00, +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/generated.proto b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/generated.proto index 19a52377..8c753f8b 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/generated.proto +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/generated.proto @@ -112,8 +112,8 @@ message DeploymentConfigSpec { // Triggers determine how updates to a DeploymentConfig result in new deployments. If no triggers // are defined, a new deployment can only occur as a result of an explicit client update to the - // DeploymentConfig with a new LatestVersion. - repeated DeploymentTriggerPolicy triggers = 2; + // DeploymentConfig with a new LatestVersion. If null, defaults to having a config change trigger. + optional DeploymentTriggerPolicies triggers = 2; // Replicas is the number of desired replicas. optional int32 replicas = 3; @@ -269,6 +269,15 @@ message DeploymentTriggerImageChangeParams { optional string lastTriggeredImage = 4; } +// DeploymentTriggerPolicies is a list of policies where nil values and different from empty arrays. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message DeploymentTriggerPolicies { + // items, if empty, will result in an empty slice + + repeated DeploymentTriggerPolicy items = 1; +} + // DeploymentTriggerPolicy describes a policy for a single trigger that results in a new deployment. message DeploymentTriggerPolicy { // Type of the trigger diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/register.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/register.go index 6ab39abc..11a1deb8 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/register.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/register.go @@ -10,14 +10,13 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &DeploymentConfig{}, &DeploymentConfigList{}, @@ -25,6 +24,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &DeploymentLog{}, &DeploymentLogOptions{}, ) + return nil } func (obj *DeploymentConfig) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/swagger_doc.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/swagger_doc.go index ffa08074..70e9200e 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/swagger_doc.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/swagger_doc.go @@ -85,7 +85,7 @@ var map_DeploymentConfigSpec = map[string]string{ "": "DeploymentConfigSpec represents the desired state of the deployment.", "strategy": "Strategy describes how a deployment is executed.", "minReadySeconds": "MinReadySeconds is the minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - "triggers": "Triggers determine how updates to a DeploymentConfig result in new deployments. If no triggers are defined, a new deployment can only occur as a result of an explicit client update to the DeploymentConfig with a new LatestVersion.", + "triggers": "Triggers determine how updates to a DeploymentConfig result in new deployments. If no triggers are defined, a new deployment can only occur as a result of an explicit client update to the DeploymentConfig with a new LatestVersion. If null, defaults to having a config change trigger.", "replicas": "Replicas is the number of desired replicas.", "revisionHistoryLimit": "RevisionHistoryLimit is the number of old ReplicationControllers to retain to allow for rollbacks. This field is a pointer to allow for differentiation between an explicit zero and not specified.", "test": "Test ensures that this deployment config will have zero replicas except while a deployment is running. This allows the deployment config to be used as a continuous deployment test - triggering on images, running the deployment, and then succeeding or failing. Post strategy hooks and After actions can be used to integrate successful deployment with an action.", diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/types.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/types.go index 5f0f0a11..6b031f0e 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/types.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/types.go @@ -1,6 +1,8 @@ package v1 import ( + "fmt" + "k8s.io/kubernetes/pkg/api/unversioned" kapi "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/util/intstr" @@ -252,6 +254,15 @@ type DeploymentConfig struct { Status DeploymentConfigStatus `json:"status" protobuf:"bytes,3,opt,name=status"` } +// DeploymentTriggerPolicies is a list of policies where nil values and different from empty arrays. +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type DeploymentTriggerPolicies []DeploymentTriggerPolicy + +func (t DeploymentTriggerPolicies) String() string { + return fmt.Sprintf("%v", []DeploymentTriggerPolicy(t)) +} + // DeploymentConfigSpec represents the desired state of the deployment. type DeploymentConfigSpec struct { // Strategy describes how a deployment is executed. @@ -264,8 +275,8 @@ type DeploymentConfigSpec struct { // Triggers determine how updates to a DeploymentConfig result in new deployments. If no triggers // are defined, a new deployment can only occur as a result of an explicit client update to the - // DeploymentConfig with a new LatestVersion. - Triggers []DeploymentTriggerPolicy `json:"triggers" protobuf:"bytes,2,rep,name=triggers"` + // DeploymentConfig with a new LatestVersion. If null, defaults to having a config change trigger. + Triggers DeploymentTriggerPolicies `json:"triggers" protobuf:"bytes,2,rep,name=triggers"` // Replicas is the number of desired replicas. Replicas int32 `json:"replicas" protobuf:"varint,3,opt,name=replicas"` diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/conversion_generated.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/zz_generated.conversion.go similarity index 70% rename from vendor/github.com/openshift/origin/pkg/deploy/api/v1/conversion_generated.go rename to vendor/github.com/openshift/origin/pkg/deploy/api/v1/zz_generated.conversion.go index 3fdba921..5a857e75 100644 --- a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/conversion_generated.go +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/zz_generated.conversion.go @@ -5,14 +5,21 @@ package v1 import ( - deploy_api "github.com/openshift/origin/pkg/deploy/api" - api "k8s.io/kubernetes/pkg/api" + api "github.com/openshift/origin/pkg/deploy/api" + pkg_api "k8s.io/kubernetes/pkg/api" api_v1 "k8s.io/kubernetes/pkg/api/v1" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1_CustomDeploymentStrategyParams_To_api_CustomDeploymentStrategyParams, Convert_api_CustomDeploymentStrategyParams_To_v1_CustomDeploymentStrategyParams, Convert_v1_DeploymentCause_To_api_DeploymentCause, @@ -53,17 +60,14 @@ func init() { Convert_api_RollingDeploymentStrategyParams_To_v1_RollingDeploymentStrategyParams, Convert_v1_TagImageHook_To_api_TagImageHook, Convert_api_TagImageHook_To_v1_TagImageHook, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } -func autoConvert_v1_CustomDeploymentStrategyParams_To_api_CustomDeploymentStrategyParams(in *CustomDeploymentStrategyParams, out *deploy_api.CustomDeploymentStrategyParams, s conversion.Scope) error { +func autoConvert_v1_CustomDeploymentStrategyParams_To_api_CustomDeploymentStrategyParams(in *CustomDeploymentStrategyParams, out *api.CustomDeploymentStrategyParams, s conversion.Scope) error { out.Image = in.Image if in.Environment != nil { in, out := &in.Environment, &out.Environment - *out = make([]api.EnvVar, len(*in)) + *out = make([]pkg_api.EnvVar, len(*in)) for i := range *in { if err := api_v1.Convert_v1_EnvVar_To_api_EnvVar(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -76,11 +80,11 @@ func autoConvert_v1_CustomDeploymentStrategyParams_To_api_CustomDeploymentStrate return nil } -func Convert_v1_CustomDeploymentStrategyParams_To_api_CustomDeploymentStrategyParams(in *CustomDeploymentStrategyParams, out *deploy_api.CustomDeploymentStrategyParams, s conversion.Scope) error { +func Convert_v1_CustomDeploymentStrategyParams_To_api_CustomDeploymentStrategyParams(in *CustomDeploymentStrategyParams, out *api.CustomDeploymentStrategyParams, s conversion.Scope) error { return autoConvert_v1_CustomDeploymentStrategyParams_To_api_CustomDeploymentStrategyParams(in, out, s) } -func autoConvert_api_CustomDeploymentStrategyParams_To_v1_CustomDeploymentStrategyParams(in *deploy_api.CustomDeploymentStrategyParams, out *CustomDeploymentStrategyParams, s conversion.Scope) error { +func autoConvert_api_CustomDeploymentStrategyParams_To_v1_CustomDeploymentStrategyParams(in *api.CustomDeploymentStrategyParams, out *CustomDeploymentStrategyParams, s conversion.Scope) error { out.Image = in.Image if in.Environment != nil { in, out := &in.Environment, &out.Environment @@ -97,15 +101,15 @@ func autoConvert_api_CustomDeploymentStrategyParams_To_v1_CustomDeploymentStrate return nil } -func Convert_api_CustomDeploymentStrategyParams_To_v1_CustomDeploymentStrategyParams(in *deploy_api.CustomDeploymentStrategyParams, out *CustomDeploymentStrategyParams, s conversion.Scope) error { +func Convert_api_CustomDeploymentStrategyParams_To_v1_CustomDeploymentStrategyParams(in *api.CustomDeploymentStrategyParams, out *CustomDeploymentStrategyParams, s conversion.Scope) error { return autoConvert_api_CustomDeploymentStrategyParams_To_v1_CustomDeploymentStrategyParams(in, out, s) } -func autoConvert_v1_DeploymentCause_To_api_DeploymentCause(in *DeploymentCause, out *deploy_api.DeploymentCause, s conversion.Scope) error { - out.Type = deploy_api.DeploymentTriggerType(in.Type) +func autoConvert_v1_DeploymentCause_To_api_DeploymentCause(in *DeploymentCause, out *api.DeploymentCause, s conversion.Scope) error { + out.Type = api.DeploymentTriggerType(in.Type) if in.ImageTrigger != nil { in, out := &in.ImageTrigger, &out.ImageTrigger - *out = new(deploy_api.DeploymentCauseImageTrigger) + *out = new(api.DeploymentCauseImageTrigger) if err := Convert_v1_DeploymentCauseImageTrigger_To_api_DeploymentCauseImageTrigger(*in, *out, s); err != nil { return err } @@ -115,11 +119,11 @@ func autoConvert_v1_DeploymentCause_To_api_DeploymentCause(in *DeploymentCause, return nil } -func Convert_v1_DeploymentCause_To_api_DeploymentCause(in *DeploymentCause, out *deploy_api.DeploymentCause, s conversion.Scope) error { +func Convert_v1_DeploymentCause_To_api_DeploymentCause(in *DeploymentCause, out *api.DeploymentCause, s conversion.Scope) error { return autoConvert_v1_DeploymentCause_To_api_DeploymentCause(in, out, s) } -func autoConvert_api_DeploymentCause_To_v1_DeploymentCause(in *deploy_api.DeploymentCause, out *DeploymentCause, s conversion.Scope) error { +func autoConvert_api_DeploymentCause_To_v1_DeploymentCause(in *api.DeploymentCause, out *DeploymentCause, s conversion.Scope) error { out.Type = DeploymentTriggerType(in.Type) if in.ImageTrigger != nil { in, out := &in.ImageTrigger, &out.ImageTrigger @@ -133,35 +137,35 @@ func autoConvert_api_DeploymentCause_To_v1_DeploymentCause(in *deploy_api.Deploy return nil } -func Convert_api_DeploymentCause_To_v1_DeploymentCause(in *deploy_api.DeploymentCause, out *DeploymentCause, s conversion.Scope) error { +func Convert_api_DeploymentCause_To_v1_DeploymentCause(in *api.DeploymentCause, out *DeploymentCause, s conversion.Scope) error { return autoConvert_api_DeploymentCause_To_v1_DeploymentCause(in, out, s) } -func autoConvert_v1_DeploymentCauseImageTrigger_To_api_DeploymentCauseImageTrigger(in *DeploymentCauseImageTrigger, out *deploy_api.DeploymentCauseImageTrigger, s conversion.Scope) error { +func autoConvert_v1_DeploymentCauseImageTrigger_To_api_DeploymentCauseImageTrigger(in *DeploymentCauseImageTrigger, out *api.DeploymentCauseImageTrigger, s conversion.Scope) error { if err := api_v1.Convert_v1_ObjectReference_To_api_ObjectReference(&in.From, &out.From, s); err != nil { return err } return nil } -func Convert_v1_DeploymentCauseImageTrigger_To_api_DeploymentCauseImageTrigger(in *DeploymentCauseImageTrigger, out *deploy_api.DeploymentCauseImageTrigger, s conversion.Scope) error { +func Convert_v1_DeploymentCauseImageTrigger_To_api_DeploymentCauseImageTrigger(in *DeploymentCauseImageTrigger, out *api.DeploymentCauseImageTrigger, s conversion.Scope) error { return autoConvert_v1_DeploymentCauseImageTrigger_To_api_DeploymentCauseImageTrigger(in, out, s) } -func autoConvert_api_DeploymentCauseImageTrigger_To_v1_DeploymentCauseImageTrigger(in *deploy_api.DeploymentCauseImageTrigger, out *DeploymentCauseImageTrigger, s conversion.Scope) error { +func autoConvert_api_DeploymentCauseImageTrigger_To_v1_DeploymentCauseImageTrigger(in *api.DeploymentCauseImageTrigger, out *DeploymentCauseImageTrigger, s conversion.Scope) error { if err := api_v1.Convert_api_ObjectReference_To_v1_ObjectReference(&in.From, &out.From, s); err != nil { return err } return nil } -func Convert_api_DeploymentCauseImageTrigger_To_v1_DeploymentCauseImageTrigger(in *deploy_api.DeploymentCauseImageTrigger, out *DeploymentCauseImageTrigger, s conversion.Scope) error { +func Convert_api_DeploymentCauseImageTrigger_To_v1_DeploymentCauseImageTrigger(in *api.DeploymentCauseImageTrigger, out *DeploymentCauseImageTrigger, s conversion.Scope) error { return autoConvert_api_DeploymentCauseImageTrigger_To_v1_DeploymentCauseImageTrigger(in, out, s) } -func autoConvert_v1_DeploymentConfig_To_api_DeploymentConfig(in *DeploymentConfig, out *deploy_api.DeploymentConfig, s conversion.Scope) error { +func autoConvert_v1_DeploymentConfig_To_api_DeploymentConfig(in *DeploymentConfig, out *api.DeploymentConfig, s conversion.Scope) error { SetDefaults_DeploymentConfig(in) - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -176,12 +180,12 @@ func autoConvert_v1_DeploymentConfig_To_api_DeploymentConfig(in *DeploymentConfi return nil } -func Convert_v1_DeploymentConfig_To_api_DeploymentConfig(in *DeploymentConfig, out *deploy_api.DeploymentConfig, s conversion.Scope) error { +func Convert_v1_DeploymentConfig_To_api_DeploymentConfig(in *DeploymentConfig, out *api.DeploymentConfig, s conversion.Scope) error { return autoConvert_v1_DeploymentConfig_To_api_DeploymentConfig(in, out, s) } -func autoConvert_api_DeploymentConfig_To_v1_DeploymentConfig(in *deploy_api.DeploymentConfig, out *DeploymentConfig, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_DeploymentConfig_To_v1_DeploymentConfig(in *api.DeploymentConfig, out *DeploymentConfig, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -196,20 +200,20 @@ func autoConvert_api_DeploymentConfig_To_v1_DeploymentConfig(in *deploy_api.Depl return nil } -func Convert_api_DeploymentConfig_To_v1_DeploymentConfig(in *deploy_api.DeploymentConfig, out *DeploymentConfig, s conversion.Scope) error { +func Convert_api_DeploymentConfig_To_v1_DeploymentConfig(in *api.DeploymentConfig, out *DeploymentConfig, s conversion.Scope) error { return autoConvert_api_DeploymentConfig_To_v1_DeploymentConfig(in, out, s) } -func autoConvert_v1_DeploymentConfigList_To_api_DeploymentConfigList(in *DeploymentConfigList, out *deploy_api.DeploymentConfigList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_DeploymentConfigList_To_api_DeploymentConfigList(in *DeploymentConfigList, out *api.DeploymentConfigList, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { return err } if in.Items != nil { in, out := &in.Items, &out.Items - *out = make([]deploy_api.DeploymentConfig, len(*in)) + *out = make([]api.DeploymentConfig, len(*in)) for i := range *in { if err := Convert_v1_DeploymentConfig_To_api_DeploymentConfig(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -221,15 +225,15 @@ func autoConvert_v1_DeploymentConfigList_To_api_DeploymentConfigList(in *Deploym return nil } -func Convert_v1_DeploymentConfigList_To_api_DeploymentConfigList(in *DeploymentConfigList, out *deploy_api.DeploymentConfigList, s conversion.Scope) error { +func Convert_v1_DeploymentConfigList_To_api_DeploymentConfigList(in *DeploymentConfigList, out *api.DeploymentConfigList, s conversion.Scope) error { return autoConvert_v1_DeploymentConfigList_To_api_DeploymentConfigList(in, out, s) } -func autoConvert_api_DeploymentConfigList_To_v1_DeploymentConfigList(in *deploy_api.DeploymentConfigList, out *DeploymentConfigList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_DeploymentConfigList_To_v1_DeploymentConfigList(in *api.DeploymentConfigList, out *DeploymentConfigList, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { return err } if in.Items != nil { @@ -246,12 +250,12 @@ func autoConvert_api_DeploymentConfigList_To_v1_DeploymentConfigList(in *deploy_ return nil } -func Convert_api_DeploymentConfigList_To_v1_DeploymentConfigList(in *deploy_api.DeploymentConfigList, out *DeploymentConfigList, s conversion.Scope) error { +func Convert_api_DeploymentConfigList_To_v1_DeploymentConfigList(in *api.DeploymentConfigList, out *DeploymentConfigList, s conversion.Scope) error { return autoConvert_api_DeploymentConfigList_To_v1_DeploymentConfigList(in, out, s) } -func autoConvert_v1_DeploymentConfigRollback_To_api_DeploymentConfigRollback(in *DeploymentConfigRollback, out *deploy_api.DeploymentConfigRollback, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_DeploymentConfigRollback_To_api_DeploymentConfigRollback(in *DeploymentConfigRollback, out *api.DeploymentConfigRollback, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } out.Name = in.Name @@ -262,12 +266,12 @@ func autoConvert_v1_DeploymentConfigRollback_To_api_DeploymentConfigRollback(in return nil } -func Convert_v1_DeploymentConfigRollback_To_api_DeploymentConfigRollback(in *DeploymentConfigRollback, out *deploy_api.DeploymentConfigRollback, s conversion.Scope) error { +func Convert_v1_DeploymentConfigRollback_To_api_DeploymentConfigRollback(in *DeploymentConfigRollback, out *api.DeploymentConfigRollback, s conversion.Scope) error { return autoConvert_v1_DeploymentConfigRollback_To_api_DeploymentConfigRollback(in, out, s) } -func autoConvert_api_DeploymentConfigRollback_To_v1_DeploymentConfigRollback(in *deploy_api.DeploymentConfigRollback, out *DeploymentConfigRollback, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_DeploymentConfigRollback_To_v1_DeploymentConfigRollback(in *api.DeploymentConfigRollback, out *DeploymentConfigRollback, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } out.Name = in.Name @@ -278,11 +282,11 @@ func autoConvert_api_DeploymentConfigRollback_To_v1_DeploymentConfigRollback(in return nil } -func Convert_api_DeploymentConfigRollback_To_v1_DeploymentConfigRollback(in *deploy_api.DeploymentConfigRollback, out *DeploymentConfigRollback, s conversion.Scope) error { +func Convert_api_DeploymentConfigRollback_To_v1_DeploymentConfigRollback(in *api.DeploymentConfigRollback, out *DeploymentConfigRollback, s conversion.Scope) error { return autoConvert_api_DeploymentConfigRollback_To_v1_DeploymentConfigRollback(in, out, s) } -func autoConvert_v1_DeploymentConfigRollbackSpec_To_api_DeploymentConfigRollbackSpec(in *DeploymentConfigRollbackSpec, out *deploy_api.DeploymentConfigRollbackSpec, s conversion.Scope) error { +func autoConvert_v1_DeploymentConfigRollbackSpec_To_api_DeploymentConfigRollbackSpec(in *DeploymentConfigRollbackSpec, out *api.DeploymentConfigRollbackSpec, s conversion.Scope) error { if err := api_v1.Convert_v1_ObjectReference_To_api_ObjectReference(&in.From, &out.From, s); err != nil { return err } @@ -294,11 +298,11 @@ func autoConvert_v1_DeploymentConfigRollbackSpec_To_api_DeploymentConfigRollback return nil } -func Convert_v1_DeploymentConfigRollbackSpec_To_api_DeploymentConfigRollbackSpec(in *DeploymentConfigRollbackSpec, out *deploy_api.DeploymentConfigRollbackSpec, s conversion.Scope) error { +func Convert_v1_DeploymentConfigRollbackSpec_To_api_DeploymentConfigRollbackSpec(in *DeploymentConfigRollbackSpec, out *api.DeploymentConfigRollbackSpec, s conversion.Scope) error { return autoConvert_v1_DeploymentConfigRollbackSpec_To_api_DeploymentConfigRollbackSpec(in, out, s) } -func autoConvert_api_DeploymentConfigRollbackSpec_To_v1_DeploymentConfigRollbackSpec(in *deploy_api.DeploymentConfigRollbackSpec, out *DeploymentConfigRollbackSpec, s conversion.Scope) error { +func autoConvert_api_DeploymentConfigRollbackSpec_To_v1_DeploymentConfigRollbackSpec(in *api.DeploymentConfigRollbackSpec, out *DeploymentConfigRollbackSpec, s conversion.Scope) error { if err := api_v1.Convert_api_ObjectReference_To_v1_ObjectReference(&in.From, &out.From, s); err != nil { return err } @@ -310,11 +314,11 @@ func autoConvert_api_DeploymentConfigRollbackSpec_To_v1_DeploymentConfigRollback return nil } -func Convert_api_DeploymentConfigRollbackSpec_To_v1_DeploymentConfigRollbackSpec(in *deploy_api.DeploymentConfigRollbackSpec, out *DeploymentConfigRollbackSpec, s conversion.Scope) error { +func Convert_api_DeploymentConfigRollbackSpec_To_v1_DeploymentConfigRollbackSpec(in *api.DeploymentConfigRollbackSpec, out *DeploymentConfigRollbackSpec, s conversion.Scope) error { return autoConvert_api_DeploymentConfigRollbackSpec_To_v1_DeploymentConfigRollbackSpec(in, out, s) } -func autoConvert_v1_DeploymentConfigSpec_To_api_DeploymentConfigSpec(in *DeploymentConfigSpec, out *deploy_api.DeploymentConfigSpec, s conversion.Scope) error { +func autoConvert_v1_DeploymentConfigSpec_To_api_DeploymentConfigSpec(in *DeploymentConfigSpec, out *api.DeploymentConfigSpec, s conversion.Scope) error { SetDefaults_DeploymentConfigSpec(in) if err := Convert_v1_DeploymentStrategy_To_api_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil { return err @@ -322,7 +326,7 @@ func autoConvert_v1_DeploymentConfigSpec_To_api_DeploymentConfigSpec(in *Deploym out.MinReadySeconds = in.MinReadySeconds if in.Triggers != nil { in, out := &in.Triggers, &out.Triggers - *out = make([]deploy_api.DeploymentTriggerPolicy, len(*in)) + *out = make([]api.DeploymentTriggerPolicy, len(*in)) for i := range *in { if err := Convert_v1_DeploymentTriggerPolicy_To_api_DeploymentTriggerPolicy(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -338,7 +342,7 @@ func autoConvert_v1_DeploymentConfigSpec_To_api_DeploymentConfigSpec(in *Deploym out.Selector = in.Selector if in.Template != nil { in, out := &in.Template, &out.Template - *out = new(api.PodTemplateSpec) + *out = new(pkg_api.PodTemplateSpec) if err := api_v1.Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(*in, *out, s); err != nil { return err } @@ -348,18 +352,18 @@ func autoConvert_v1_DeploymentConfigSpec_To_api_DeploymentConfigSpec(in *Deploym return nil } -func Convert_v1_DeploymentConfigSpec_To_api_DeploymentConfigSpec(in *DeploymentConfigSpec, out *deploy_api.DeploymentConfigSpec, s conversion.Scope) error { +func Convert_v1_DeploymentConfigSpec_To_api_DeploymentConfigSpec(in *DeploymentConfigSpec, out *api.DeploymentConfigSpec, s conversion.Scope) error { return autoConvert_v1_DeploymentConfigSpec_To_api_DeploymentConfigSpec(in, out, s) } -func autoConvert_api_DeploymentConfigSpec_To_v1_DeploymentConfigSpec(in *deploy_api.DeploymentConfigSpec, out *DeploymentConfigSpec, s conversion.Scope) error { +func autoConvert_api_DeploymentConfigSpec_To_v1_DeploymentConfigSpec(in *api.DeploymentConfigSpec, out *DeploymentConfigSpec, s conversion.Scope) error { if err := Convert_api_DeploymentStrategy_To_v1_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil { return err } out.MinReadySeconds = in.MinReadySeconds if in.Triggers != nil { in, out := &in.Triggers, &out.Triggers - *out = make([]DeploymentTriggerPolicy, len(*in)) + *out = make(DeploymentTriggerPolicies, len(*in)) for i := range *in { if err := Convert_api_DeploymentTriggerPolicy_To_v1_DeploymentTriggerPolicy(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -385,11 +389,11 @@ func autoConvert_api_DeploymentConfigSpec_To_v1_DeploymentConfigSpec(in *deploy_ return nil } -func Convert_api_DeploymentConfigSpec_To_v1_DeploymentConfigSpec(in *deploy_api.DeploymentConfigSpec, out *DeploymentConfigSpec, s conversion.Scope) error { +func Convert_api_DeploymentConfigSpec_To_v1_DeploymentConfigSpec(in *api.DeploymentConfigSpec, out *DeploymentConfigSpec, s conversion.Scope) error { return autoConvert_api_DeploymentConfigSpec_To_v1_DeploymentConfigSpec(in, out, s) } -func autoConvert_v1_DeploymentConfigStatus_To_api_DeploymentConfigStatus(in *DeploymentConfigStatus, out *deploy_api.DeploymentConfigStatus, s conversion.Scope) error { +func autoConvert_v1_DeploymentConfigStatus_To_api_DeploymentConfigStatus(in *DeploymentConfigStatus, out *api.DeploymentConfigStatus, s conversion.Scope) error { out.LatestVersion = in.LatestVersion out.ObservedGeneration = in.ObservedGeneration out.Replicas = in.Replicas @@ -398,7 +402,7 @@ func autoConvert_v1_DeploymentConfigStatus_To_api_DeploymentConfigStatus(in *Dep out.UnavailableReplicas = in.UnavailableReplicas if in.Details != nil { in, out := &in.Details, &out.Details - *out = new(deploy_api.DeploymentDetails) + *out = new(api.DeploymentDetails) if err := Convert_v1_DeploymentDetails_To_api_DeploymentDetails(*in, *out, s); err != nil { return err } @@ -408,11 +412,11 @@ func autoConvert_v1_DeploymentConfigStatus_To_api_DeploymentConfigStatus(in *Dep return nil } -func Convert_v1_DeploymentConfigStatus_To_api_DeploymentConfigStatus(in *DeploymentConfigStatus, out *deploy_api.DeploymentConfigStatus, s conversion.Scope) error { +func Convert_v1_DeploymentConfigStatus_To_api_DeploymentConfigStatus(in *DeploymentConfigStatus, out *api.DeploymentConfigStatus, s conversion.Scope) error { return autoConvert_v1_DeploymentConfigStatus_To_api_DeploymentConfigStatus(in, out, s) } -func autoConvert_api_DeploymentConfigStatus_To_v1_DeploymentConfigStatus(in *deploy_api.DeploymentConfigStatus, out *DeploymentConfigStatus, s conversion.Scope) error { +func autoConvert_api_DeploymentConfigStatus_To_v1_DeploymentConfigStatus(in *api.DeploymentConfigStatus, out *DeploymentConfigStatus, s conversion.Scope) error { out.LatestVersion = in.LatestVersion out.ObservedGeneration = in.ObservedGeneration out.Replicas = in.Replicas @@ -431,15 +435,15 @@ func autoConvert_api_DeploymentConfigStatus_To_v1_DeploymentConfigStatus(in *dep return nil } -func Convert_api_DeploymentConfigStatus_To_v1_DeploymentConfigStatus(in *deploy_api.DeploymentConfigStatus, out *DeploymentConfigStatus, s conversion.Scope) error { +func Convert_api_DeploymentConfigStatus_To_v1_DeploymentConfigStatus(in *api.DeploymentConfigStatus, out *DeploymentConfigStatus, s conversion.Scope) error { return autoConvert_api_DeploymentConfigStatus_To_v1_DeploymentConfigStatus(in, out, s) } -func autoConvert_v1_DeploymentDetails_To_api_DeploymentDetails(in *DeploymentDetails, out *deploy_api.DeploymentDetails, s conversion.Scope) error { +func autoConvert_v1_DeploymentDetails_To_api_DeploymentDetails(in *DeploymentDetails, out *api.DeploymentDetails, s conversion.Scope) error { out.Message = in.Message if in.Causes != nil { in, out := &in.Causes, &out.Causes - *out = make([]deploy_api.DeploymentCause, len(*in)) + *out = make([]api.DeploymentCause, len(*in)) for i := range *in { if err := Convert_v1_DeploymentCause_To_api_DeploymentCause(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -451,11 +455,11 @@ func autoConvert_v1_DeploymentDetails_To_api_DeploymentDetails(in *DeploymentDet return nil } -func Convert_v1_DeploymentDetails_To_api_DeploymentDetails(in *DeploymentDetails, out *deploy_api.DeploymentDetails, s conversion.Scope) error { +func Convert_v1_DeploymentDetails_To_api_DeploymentDetails(in *DeploymentDetails, out *api.DeploymentDetails, s conversion.Scope) error { return autoConvert_v1_DeploymentDetails_To_api_DeploymentDetails(in, out, s) } -func autoConvert_api_DeploymentDetails_To_v1_DeploymentDetails(in *deploy_api.DeploymentDetails, out *DeploymentDetails, s conversion.Scope) error { +func autoConvert_api_DeploymentDetails_To_v1_DeploymentDetails(in *api.DeploymentDetails, out *DeploymentDetails, s conversion.Scope) error { out.Message = in.Message if in.Causes != nil { in, out := &in.Causes, &out.Causes @@ -471,34 +475,34 @@ func autoConvert_api_DeploymentDetails_To_v1_DeploymentDetails(in *deploy_api.De return nil } -func Convert_api_DeploymentDetails_To_v1_DeploymentDetails(in *deploy_api.DeploymentDetails, out *DeploymentDetails, s conversion.Scope) error { +func Convert_api_DeploymentDetails_To_v1_DeploymentDetails(in *api.DeploymentDetails, out *DeploymentDetails, s conversion.Scope) error { return autoConvert_api_DeploymentDetails_To_v1_DeploymentDetails(in, out, s) } -func autoConvert_v1_DeploymentLog_To_api_DeploymentLog(in *DeploymentLog, out *deploy_api.DeploymentLog, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_DeploymentLog_To_api_DeploymentLog(in *DeploymentLog, out *api.DeploymentLog, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } return nil } -func Convert_v1_DeploymentLog_To_api_DeploymentLog(in *DeploymentLog, out *deploy_api.DeploymentLog, s conversion.Scope) error { +func Convert_v1_DeploymentLog_To_api_DeploymentLog(in *DeploymentLog, out *api.DeploymentLog, s conversion.Scope) error { return autoConvert_v1_DeploymentLog_To_api_DeploymentLog(in, out, s) } -func autoConvert_api_DeploymentLog_To_v1_DeploymentLog(in *deploy_api.DeploymentLog, out *DeploymentLog, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_DeploymentLog_To_v1_DeploymentLog(in *api.DeploymentLog, out *DeploymentLog, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } return nil } -func Convert_api_DeploymentLog_To_v1_DeploymentLog(in *deploy_api.DeploymentLog, out *DeploymentLog, s conversion.Scope) error { +func Convert_api_DeploymentLog_To_v1_DeploymentLog(in *api.DeploymentLog, out *DeploymentLog, s conversion.Scope) error { return autoConvert_api_DeploymentLog_To_v1_DeploymentLog(in, out, s) } -func autoConvert_v1_DeploymentLogOptions_To_api_DeploymentLogOptions(in *DeploymentLogOptions, out *deploy_api.DeploymentLogOptions, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_DeploymentLogOptions_To_api_DeploymentLogOptions(in *DeploymentLogOptions, out *api.DeploymentLogOptions, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } out.Container = in.Container @@ -514,12 +518,12 @@ func autoConvert_v1_DeploymentLogOptions_To_api_DeploymentLogOptions(in *Deploym return nil } -func Convert_v1_DeploymentLogOptions_To_api_DeploymentLogOptions(in *DeploymentLogOptions, out *deploy_api.DeploymentLogOptions, s conversion.Scope) error { +func Convert_v1_DeploymentLogOptions_To_api_DeploymentLogOptions(in *DeploymentLogOptions, out *api.DeploymentLogOptions, s conversion.Scope) error { return autoConvert_v1_DeploymentLogOptions_To_api_DeploymentLogOptions(in, out, s) } -func autoConvert_api_DeploymentLogOptions_To_v1_DeploymentLogOptions(in *deploy_api.DeploymentLogOptions, out *DeploymentLogOptions, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_DeploymentLogOptions_To_v1_DeploymentLogOptions(in *api.DeploymentLogOptions, out *DeploymentLogOptions, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } out.Container = in.Container @@ -535,16 +539,16 @@ func autoConvert_api_DeploymentLogOptions_To_v1_DeploymentLogOptions(in *deploy_ return nil } -func Convert_api_DeploymentLogOptions_To_v1_DeploymentLogOptions(in *deploy_api.DeploymentLogOptions, out *DeploymentLogOptions, s conversion.Scope) error { +func Convert_api_DeploymentLogOptions_To_v1_DeploymentLogOptions(in *api.DeploymentLogOptions, out *DeploymentLogOptions, s conversion.Scope) error { return autoConvert_api_DeploymentLogOptions_To_v1_DeploymentLogOptions(in, out, s) } -func autoConvert_v1_DeploymentStrategy_To_api_DeploymentStrategy(in *DeploymentStrategy, out *deploy_api.DeploymentStrategy, s conversion.Scope) error { +func autoConvert_v1_DeploymentStrategy_To_api_DeploymentStrategy(in *DeploymentStrategy, out *api.DeploymentStrategy, s conversion.Scope) error { SetDefaults_DeploymentStrategy(in) - out.Type = deploy_api.DeploymentStrategyType(in.Type) + out.Type = api.DeploymentStrategyType(in.Type) if in.CustomParams != nil { in, out := &in.CustomParams, &out.CustomParams - *out = new(deploy_api.CustomDeploymentStrategyParams) + *out = new(api.CustomDeploymentStrategyParams) if err := Convert_v1_CustomDeploymentStrategyParams_To_api_CustomDeploymentStrategyParams(*in, *out, s); err != nil { return err } @@ -553,7 +557,7 @@ func autoConvert_v1_DeploymentStrategy_To_api_DeploymentStrategy(in *DeploymentS } if in.RecreateParams != nil { in, out := &in.RecreateParams, &out.RecreateParams - *out = new(deploy_api.RecreateDeploymentStrategyParams) + *out = new(api.RecreateDeploymentStrategyParams) if err := Convert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentStrategyParams(*in, *out, s); err != nil { return err } @@ -562,7 +566,7 @@ func autoConvert_v1_DeploymentStrategy_To_api_DeploymentStrategy(in *DeploymentS } if in.RollingParams != nil { in, out := &in.RollingParams, &out.RollingParams - *out = new(deploy_api.RollingDeploymentStrategyParams) + *out = new(api.RollingDeploymentStrategyParams) if err := Convert_v1_RollingDeploymentStrategyParams_To_api_RollingDeploymentStrategyParams(*in, *out, s); err != nil { return err } @@ -577,11 +581,11 @@ func autoConvert_v1_DeploymentStrategy_To_api_DeploymentStrategy(in *DeploymentS return nil } -func Convert_v1_DeploymentStrategy_To_api_DeploymentStrategy(in *DeploymentStrategy, out *deploy_api.DeploymentStrategy, s conversion.Scope) error { +func Convert_v1_DeploymentStrategy_To_api_DeploymentStrategy(in *DeploymentStrategy, out *api.DeploymentStrategy, s conversion.Scope) error { return autoConvert_v1_DeploymentStrategy_To_api_DeploymentStrategy(in, out, s) } -func autoConvert_api_DeploymentStrategy_To_v1_DeploymentStrategy(in *deploy_api.DeploymentStrategy, out *DeploymentStrategy, s conversion.Scope) error { +func autoConvert_api_DeploymentStrategy_To_v1_DeploymentStrategy(in *api.DeploymentStrategy, out *DeploymentStrategy, s conversion.Scope) error { out.Type = DeploymentStrategyType(in.Type) if in.RecreateParams != nil { in, out := &in.RecreateParams, &out.RecreateParams @@ -618,11 +622,11 @@ func autoConvert_api_DeploymentStrategy_To_v1_DeploymentStrategy(in *deploy_api. return nil } -func Convert_api_DeploymentStrategy_To_v1_DeploymentStrategy(in *deploy_api.DeploymentStrategy, out *DeploymentStrategy, s conversion.Scope) error { +func Convert_api_DeploymentStrategy_To_v1_DeploymentStrategy(in *api.DeploymentStrategy, out *DeploymentStrategy, s conversion.Scope) error { return autoConvert_api_DeploymentStrategy_To_v1_DeploymentStrategy(in, out, s) } -func autoConvert_v1_DeploymentTriggerImageChangeParams_To_api_DeploymentTriggerImageChangeParams(in *DeploymentTriggerImageChangeParams, out *deploy_api.DeploymentTriggerImageChangeParams, s conversion.Scope) error { +func autoConvert_v1_DeploymentTriggerImageChangeParams_To_api_DeploymentTriggerImageChangeParams(in *DeploymentTriggerImageChangeParams, out *api.DeploymentTriggerImageChangeParams, s conversion.Scope) error { out.Automatic = in.Automatic out.ContainerNames = in.ContainerNames if err := api_v1.Convert_v1_ObjectReference_To_api_ObjectReference(&in.From, &out.From, s); err != nil { @@ -632,7 +636,7 @@ func autoConvert_v1_DeploymentTriggerImageChangeParams_To_api_DeploymentTriggerI return nil } -func autoConvert_api_DeploymentTriggerImageChangeParams_To_v1_DeploymentTriggerImageChangeParams(in *deploy_api.DeploymentTriggerImageChangeParams, out *DeploymentTriggerImageChangeParams, s conversion.Scope) error { +func autoConvert_api_DeploymentTriggerImageChangeParams_To_v1_DeploymentTriggerImageChangeParams(in *api.DeploymentTriggerImageChangeParams, out *DeploymentTriggerImageChangeParams, s conversion.Scope) error { out.Automatic = in.Automatic out.ContainerNames = in.ContainerNames if err := api_v1.Convert_api_ObjectReference_To_v1_ObjectReference(&in.From, &out.From, s); err != nil { @@ -642,11 +646,11 @@ func autoConvert_api_DeploymentTriggerImageChangeParams_To_v1_DeploymentTriggerI return nil } -func autoConvert_v1_DeploymentTriggerPolicy_To_api_DeploymentTriggerPolicy(in *DeploymentTriggerPolicy, out *deploy_api.DeploymentTriggerPolicy, s conversion.Scope) error { - out.Type = deploy_api.DeploymentTriggerType(in.Type) +func autoConvert_v1_DeploymentTriggerPolicy_To_api_DeploymentTriggerPolicy(in *DeploymentTriggerPolicy, out *api.DeploymentTriggerPolicy, s conversion.Scope) error { + out.Type = api.DeploymentTriggerType(in.Type) if in.ImageChangeParams != nil { in, out := &in.ImageChangeParams, &out.ImageChangeParams - *out = new(deploy_api.DeploymentTriggerImageChangeParams) + *out = new(api.DeploymentTriggerImageChangeParams) if err := Convert_v1_DeploymentTriggerImageChangeParams_To_api_DeploymentTriggerImageChangeParams(*in, *out, s); err != nil { return err } @@ -656,11 +660,11 @@ func autoConvert_v1_DeploymentTriggerPolicy_To_api_DeploymentTriggerPolicy(in *D return nil } -func Convert_v1_DeploymentTriggerPolicy_To_api_DeploymentTriggerPolicy(in *DeploymentTriggerPolicy, out *deploy_api.DeploymentTriggerPolicy, s conversion.Scope) error { +func Convert_v1_DeploymentTriggerPolicy_To_api_DeploymentTriggerPolicy(in *DeploymentTriggerPolicy, out *api.DeploymentTriggerPolicy, s conversion.Scope) error { return autoConvert_v1_DeploymentTriggerPolicy_To_api_DeploymentTriggerPolicy(in, out, s) } -func autoConvert_api_DeploymentTriggerPolicy_To_v1_DeploymentTriggerPolicy(in *deploy_api.DeploymentTriggerPolicy, out *DeploymentTriggerPolicy, s conversion.Scope) error { +func autoConvert_api_DeploymentTriggerPolicy_To_v1_DeploymentTriggerPolicy(in *api.DeploymentTriggerPolicy, out *DeploymentTriggerPolicy, s conversion.Scope) error { out.Type = DeploymentTriggerType(in.Type) if in.ImageChangeParams != nil { in, out := &in.ImageChangeParams, &out.ImageChangeParams @@ -674,15 +678,15 @@ func autoConvert_api_DeploymentTriggerPolicy_To_v1_DeploymentTriggerPolicy(in *d return nil } -func Convert_api_DeploymentTriggerPolicy_To_v1_DeploymentTriggerPolicy(in *deploy_api.DeploymentTriggerPolicy, out *DeploymentTriggerPolicy, s conversion.Scope) error { +func Convert_api_DeploymentTriggerPolicy_To_v1_DeploymentTriggerPolicy(in *api.DeploymentTriggerPolicy, out *DeploymentTriggerPolicy, s conversion.Scope) error { return autoConvert_api_DeploymentTriggerPolicy_To_v1_DeploymentTriggerPolicy(in, out, s) } -func autoConvert_v1_ExecNewPodHook_To_api_ExecNewPodHook(in *ExecNewPodHook, out *deploy_api.ExecNewPodHook, s conversion.Scope) error { +func autoConvert_v1_ExecNewPodHook_To_api_ExecNewPodHook(in *ExecNewPodHook, out *api.ExecNewPodHook, s conversion.Scope) error { out.Command = in.Command if in.Env != nil { in, out := &in.Env, &out.Env - *out = make([]api.EnvVar, len(*in)) + *out = make([]pkg_api.EnvVar, len(*in)) for i := range *in { if err := api_v1.Convert_v1_EnvVar_To_api_EnvVar(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -696,11 +700,11 @@ func autoConvert_v1_ExecNewPodHook_To_api_ExecNewPodHook(in *ExecNewPodHook, out return nil } -func Convert_v1_ExecNewPodHook_To_api_ExecNewPodHook(in *ExecNewPodHook, out *deploy_api.ExecNewPodHook, s conversion.Scope) error { +func Convert_v1_ExecNewPodHook_To_api_ExecNewPodHook(in *ExecNewPodHook, out *api.ExecNewPodHook, s conversion.Scope) error { return autoConvert_v1_ExecNewPodHook_To_api_ExecNewPodHook(in, out, s) } -func autoConvert_api_ExecNewPodHook_To_v1_ExecNewPodHook(in *deploy_api.ExecNewPodHook, out *ExecNewPodHook, s conversion.Scope) error { +func autoConvert_api_ExecNewPodHook_To_v1_ExecNewPodHook(in *api.ExecNewPodHook, out *ExecNewPodHook, s conversion.Scope) error { out.Command = in.Command if in.Env != nil { in, out := &in.Env, &out.Env @@ -718,15 +722,15 @@ func autoConvert_api_ExecNewPodHook_To_v1_ExecNewPodHook(in *deploy_api.ExecNewP return nil } -func Convert_api_ExecNewPodHook_To_v1_ExecNewPodHook(in *deploy_api.ExecNewPodHook, out *ExecNewPodHook, s conversion.Scope) error { +func Convert_api_ExecNewPodHook_To_v1_ExecNewPodHook(in *api.ExecNewPodHook, out *ExecNewPodHook, s conversion.Scope) error { return autoConvert_api_ExecNewPodHook_To_v1_ExecNewPodHook(in, out, s) } -func autoConvert_v1_LifecycleHook_To_api_LifecycleHook(in *LifecycleHook, out *deploy_api.LifecycleHook, s conversion.Scope) error { - out.FailurePolicy = deploy_api.LifecycleHookFailurePolicy(in.FailurePolicy) +func autoConvert_v1_LifecycleHook_To_api_LifecycleHook(in *LifecycleHook, out *api.LifecycleHook, s conversion.Scope) error { + out.FailurePolicy = api.LifecycleHookFailurePolicy(in.FailurePolicy) if in.ExecNewPod != nil { in, out := &in.ExecNewPod, &out.ExecNewPod - *out = new(deploy_api.ExecNewPodHook) + *out = new(api.ExecNewPodHook) if err := Convert_v1_ExecNewPodHook_To_api_ExecNewPodHook(*in, *out, s); err != nil { return err } @@ -735,7 +739,7 @@ func autoConvert_v1_LifecycleHook_To_api_LifecycleHook(in *LifecycleHook, out *d } if in.TagImages != nil { in, out := &in.TagImages, &out.TagImages - *out = make([]deploy_api.TagImageHook, len(*in)) + *out = make([]api.TagImageHook, len(*in)) for i := range *in { if err := Convert_v1_TagImageHook_To_api_TagImageHook(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -747,11 +751,11 @@ func autoConvert_v1_LifecycleHook_To_api_LifecycleHook(in *LifecycleHook, out *d return nil } -func Convert_v1_LifecycleHook_To_api_LifecycleHook(in *LifecycleHook, out *deploy_api.LifecycleHook, s conversion.Scope) error { +func Convert_v1_LifecycleHook_To_api_LifecycleHook(in *LifecycleHook, out *api.LifecycleHook, s conversion.Scope) error { return autoConvert_v1_LifecycleHook_To_api_LifecycleHook(in, out, s) } -func autoConvert_api_LifecycleHook_To_v1_LifecycleHook(in *deploy_api.LifecycleHook, out *LifecycleHook, s conversion.Scope) error { +func autoConvert_api_LifecycleHook_To_v1_LifecycleHook(in *api.LifecycleHook, out *LifecycleHook, s conversion.Scope) error { out.FailurePolicy = LifecycleHookFailurePolicy(in.FailurePolicy) if in.ExecNewPod != nil { in, out := &in.ExecNewPod, &out.ExecNewPod @@ -776,16 +780,16 @@ func autoConvert_api_LifecycleHook_To_v1_LifecycleHook(in *deploy_api.LifecycleH return nil } -func Convert_api_LifecycleHook_To_v1_LifecycleHook(in *deploy_api.LifecycleHook, out *LifecycleHook, s conversion.Scope) error { +func Convert_api_LifecycleHook_To_v1_LifecycleHook(in *api.LifecycleHook, out *LifecycleHook, s conversion.Scope) error { return autoConvert_api_LifecycleHook_To_v1_LifecycleHook(in, out, s) } -func autoConvert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentStrategyParams(in *RecreateDeploymentStrategyParams, out *deploy_api.RecreateDeploymentStrategyParams, s conversion.Scope) error { +func autoConvert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentStrategyParams(in *RecreateDeploymentStrategyParams, out *api.RecreateDeploymentStrategyParams, s conversion.Scope) error { SetDefaults_RecreateDeploymentStrategyParams(in) out.TimeoutSeconds = in.TimeoutSeconds if in.Pre != nil { in, out := &in.Pre, &out.Pre - *out = new(deploy_api.LifecycleHook) + *out = new(api.LifecycleHook) if err := Convert_v1_LifecycleHook_To_api_LifecycleHook(*in, *out, s); err != nil { return err } @@ -794,7 +798,7 @@ func autoConvert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentSt } if in.Mid != nil { in, out := &in.Mid, &out.Mid - *out = new(deploy_api.LifecycleHook) + *out = new(api.LifecycleHook) if err := Convert_v1_LifecycleHook_To_api_LifecycleHook(*in, *out, s); err != nil { return err } @@ -803,7 +807,7 @@ func autoConvert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentSt } if in.Post != nil { in, out := &in.Post, &out.Post - *out = new(deploy_api.LifecycleHook) + *out = new(api.LifecycleHook) if err := Convert_v1_LifecycleHook_To_api_LifecycleHook(*in, *out, s); err != nil { return err } @@ -813,11 +817,11 @@ func autoConvert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentSt return nil } -func Convert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentStrategyParams(in *RecreateDeploymentStrategyParams, out *deploy_api.RecreateDeploymentStrategyParams, s conversion.Scope) error { +func Convert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentStrategyParams(in *RecreateDeploymentStrategyParams, out *api.RecreateDeploymentStrategyParams, s conversion.Scope) error { return autoConvert_v1_RecreateDeploymentStrategyParams_To_api_RecreateDeploymentStrategyParams(in, out, s) } -func autoConvert_api_RecreateDeploymentStrategyParams_To_v1_RecreateDeploymentStrategyParams(in *deploy_api.RecreateDeploymentStrategyParams, out *RecreateDeploymentStrategyParams, s conversion.Scope) error { +func autoConvert_api_RecreateDeploymentStrategyParams_To_v1_RecreateDeploymentStrategyParams(in *api.RecreateDeploymentStrategyParams, out *RecreateDeploymentStrategyParams, s conversion.Scope) error { out.TimeoutSeconds = in.TimeoutSeconds if in.Pre != nil { in, out := &in.Pre, &out.Pre @@ -849,11 +853,11 @@ func autoConvert_api_RecreateDeploymentStrategyParams_To_v1_RecreateDeploymentSt return nil } -func Convert_api_RecreateDeploymentStrategyParams_To_v1_RecreateDeploymentStrategyParams(in *deploy_api.RecreateDeploymentStrategyParams, out *RecreateDeploymentStrategyParams, s conversion.Scope) error { +func Convert_api_RecreateDeploymentStrategyParams_To_v1_RecreateDeploymentStrategyParams(in *api.RecreateDeploymentStrategyParams, out *RecreateDeploymentStrategyParams, s conversion.Scope) error { return autoConvert_api_RecreateDeploymentStrategyParams_To_v1_RecreateDeploymentStrategyParams(in, out, s) } -func autoConvert_v1_TagImageHook_To_api_TagImageHook(in *TagImageHook, out *deploy_api.TagImageHook, s conversion.Scope) error { +func autoConvert_v1_TagImageHook_To_api_TagImageHook(in *TagImageHook, out *api.TagImageHook, s conversion.Scope) error { out.ContainerName = in.ContainerName if err := api_v1.Convert_v1_ObjectReference_To_api_ObjectReference(&in.To, &out.To, s); err != nil { return err @@ -861,11 +865,11 @@ func autoConvert_v1_TagImageHook_To_api_TagImageHook(in *TagImageHook, out *depl return nil } -func Convert_v1_TagImageHook_To_api_TagImageHook(in *TagImageHook, out *deploy_api.TagImageHook, s conversion.Scope) error { +func Convert_v1_TagImageHook_To_api_TagImageHook(in *TagImageHook, out *api.TagImageHook, s conversion.Scope) error { return autoConvert_v1_TagImageHook_To_api_TagImageHook(in, out, s) } -func autoConvert_api_TagImageHook_To_v1_TagImageHook(in *deploy_api.TagImageHook, out *TagImageHook, s conversion.Scope) error { +func autoConvert_api_TagImageHook_To_v1_TagImageHook(in *api.TagImageHook, out *TagImageHook, s conversion.Scope) error { out.ContainerName = in.ContainerName if err := api_v1.Convert_api_ObjectReference_To_v1_ObjectReference(&in.To, &out.To, s); err != nil { return err @@ -873,6 +877,6 @@ func autoConvert_api_TagImageHook_To_v1_TagImageHook(in *deploy_api.TagImageHook return nil } -func Convert_api_TagImageHook_To_v1_TagImageHook(in *deploy_api.TagImageHook, out *TagImageHook, s conversion.Scope) error { +func Convert_api_TagImageHook_To_v1_TagImageHook(in *api.TagImageHook, out *TagImageHook, s conversion.Scope) error { return autoConvert_api_TagImageHook_To_v1_TagImageHook(in, out, s) } diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000..f9bc4f1a --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/v1/zz_generated.deepcopy.go @@ -0,0 +1,596 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + api_v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + intstr "k8s.io/kubernetes/pkg/util/intstr" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_CustomDeploymentStrategyParams, InType: reflect.TypeOf(&CustomDeploymentStrategyParams{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentCause, InType: reflect.TypeOf(&DeploymentCause{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentCauseImageTrigger, InType: reflect.TypeOf(&DeploymentCauseImageTrigger{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentConfig, InType: reflect.TypeOf(&DeploymentConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentConfigList, InType: reflect.TypeOf(&DeploymentConfigList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentConfigRollback, InType: reflect.TypeOf(&DeploymentConfigRollback{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentConfigRollbackSpec, InType: reflect.TypeOf(&DeploymentConfigRollbackSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentConfigSpec, InType: reflect.TypeOf(&DeploymentConfigSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentConfigStatus, InType: reflect.TypeOf(&DeploymentConfigStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentDetails, InType: reflect.TypeOf(&DeploymentDetails{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentLog, InType: reflect.TypeOf(&DeploymentLog{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentLogOptions, InType: reflect.TypeOf(&DeploymentLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentStrategy, InType: reflect.TypeOf(&DeploymentStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentTriggerImageChangeParams, InType: reflect.TypeOf(&DeploymentTriggerImageChangeParams{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeploymentTriggerPolicy, InType: reflect.TypeOf(&DeploymentTriggerPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ExecNewPodHook, InType: reflect.TypeOf(&ExecNewPodHook{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LifecycleHook, InType: reflect.TypeOf(&LifecycleHook{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RecreateDeploymentStrategyParams, InType: reflect.TypeOf(&RecreateDeploymentStrategyParams{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RollingDeploymentStrategyParams, InType: reflect.TypeOf(&RollingDeploymentStrategyParams{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_TagImageHook, InType: reflect.TypeOf(&TagImageHook{})}, + ) +} + +func DeepCopy_v1_CustomDeploymentStrategyParams(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomDeploymentStrategyParams) + out := out.(*CustomDeploymentStrategyParams) + out.Image = in.Image + if in.Environment != nil { + in, out := &in.Environment, &out.Environment + *out = make([]api_v1.EnvVar, len(*in)) + for i := range *in { + if err := api_v1.DeepCopy_v1_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Environment = nil + } + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_v1_DeploymentCause(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentCause) + out := out.(*DeploymentCause) + out.Type = in.Type + if in.ImageTrigger != nil { + in, out := &in.ImageTrigger, &out.ImageTrigger + *out = new(DeploymentCauseImageTrigger) + **out = **in + } else { + out.ImageTrigger = nil + } + return nil + } +} + +func DeepCopy_v1_DeploymentCauseImageTrigger(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentCauseImageTrigger) + out := out.(*DeploymentCauseImageTrigger) + out.From = in.From + return nil + } +} + +func DeepCopy_v1_DeploymentConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfig) + out := out.(*DeploymentConfig) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_DeploymentConfigSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_DeploymentConfigStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_DeploymentConfigList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigList) + out := out.(*DeploymentConfigList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DeploymentConfig, len(*in)) + for i := range *in { + if err := DeepCopy_v1_DeploymentConfig(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_DeploymentConfigRollback(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigRollback) + out := out.(*DeploymentConfigRollback) + out.TypeMeta = in.TypeMeta + out.Name = in.Name + if in.UpdatedAnnotations != nil { + in, out := &in.UpdatedAnnotations, &out.UpdatedAnnotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.UpdatedAnnotations = nil + } + out.Spec = in.Spec + return nil + } +} + +func DeepCopy_v1_DeploymentConfigRollbackSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigRollbackSpec) + out := out.(*DeploymentConfigRollbackSpec) + out.From = in.From + out.Revision = in.Revision + out.IncludeTriggers = in.IncludeTriggers + out.IncludeTemplate = in.IncludeTemplate + out.IncludeReplicationMeta = in.IncludeReplicationMeta + out.IncludeStrategy = in.IncludeStrategy + return nil + } +} + +func DeepCopy_v1_DeploymentConfigSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigSpec) + out := out.(*DeploymentConfigSpec) + if err := DeepCopy_v1_DeploymentStrategy(&in.Strategy, &out.Strategy, c); err != nil { + return err + } + out.MinReadySeconds = in.MinReadySeconds + if in.Triggers != nil { + in, out := &in.Triggers, &out.Triggers + *out = make(DeploymentTriggerPolicies, len(*in)) + for i := range *in { + if err := DeepCopy_v1_DeploymentTriggerPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Triggers = nil + } + out.Replicas = in.Replicas + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } else { + out.RevisionHistoryLimit = nil + } + out.Test = in.Test + out.Paused = in.Paused + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(api_v1.PodTemplateSpec) + if err := api_v1.DeepCopy_v1_PodTemplateSpec(*in, *out, c); err != nil { + return err + } + } else { + out.Template = nil + } + return nil + } +} + +func DeepCopy_v1_DeploymentConfigStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigStatus) + out := out.(*DeploymentConfigStatus) + out.LatestVersion = in.LatestVersion + out.ObservedGeneration = in.ObservedGeneration + out.Replicas = in.Replicas + out.UpdatedReplicas = in.UpdatedReplicas + out.AvailableReplicas = in.AvailableReplicas + out.UnavailableReplicas = in.UnavailableReplicas + if in.Details != nil { + in, out := &in.Details, &out.Details + *out = new(DeploymentDetails) + if err := DeepCopy_v1_DeploymentDetails(*in, *out, c); err != nil { + return err + } + } else { + out.Details = nil + } + return nil + } +} + +func DeepCopy_v1_DeploymentDetails(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentDetails) + out := out.(*DeploymentDetails) + out.Message = in.Message + if in.Causes != nil { + in, out := &in.Causes, &out.Causes + *out = make([]DeploymentCause, len(*in)) + for i := range *in { + if err := DeepCopy_v1_DeploymentCause(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Causes = nil + } + return nil + } +} + +func DeepCopy_v1_DeploymentLog(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentLog) + out := out.(*DeploymentLog) + out.TypeMeta = in.TypeMeta + return nil + } +} + +func DeepCopy_v1_DeploymentLogOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentLogOptions) + out := out.(*DeploymentLogOptions) + out.TypeMeta = in.TypeMeta + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } else { + out.SinceSeconds = nil + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.SinceTime = nil + } + out.Timestamps = in.Timestamps + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } else { + out.TailLines = nil + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } else { + out.LimitBytes = nil + } + out.NoWait = in.NoWait + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(int64) + **out = **in + } else { + out.Version = nil + } + return nil + } +} + +func DeepCopy_v1_DeploymentStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentStrategy) + out := out.(*DeploymentStrategy) + out.Type = in.Type + if in.CustomParams != nil { + in, out := &in.CustomParams, &out.CustomParams + *out = new(CustomDeploymentStrategyParams) + if err := DeepCopy_v1_CustomDeploymentStrategyParams(*in, *out, c); err != nil { + return err + } + } else { + out.CustomParams = nil + } + if in.RecreateParams != nil { + in, out := &in.RecreateParams, &out.RecreateParams + *out = new(RecreateDeploymentStrategyParams) + if err := DeepCopy_v1_RecreateDeploymentStrategyParams(*in, *out, c); err != nil { + return err + } + } else { + out.RecreateParams = nil + } + if in.RollingParams != nil { + in, out := &in.RollingParams, &out.RollingParams + *out = new(RollingDeploymentStrategyParams) + if err := DeepCopy_v1_RollingDeploymentStrategyParams(*in, *out, c); err != nil { + return err + } + } else { + out.RollingParams = nil + } + if err := api_v1.DeepCopy_v1_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Labels = nil + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Annotations = nil + } + return nil + } +} + +func DeepCopy_v1_DeploymentTriggerImageChangeParams(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentTriggerImageChangeParams) + out := out.(*DeploymentTriggerImageChangeParams) + out.Automatic = in.Automatic + if in.ContainerNames != nil { + in, out := &in.ContainerNames, &out.ContainerNames + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ContainerNames = nil + } + out.From = in.From + out.LastTriggeredImage = in.LastTriggeredImage + return nil + } +} + +func DeepCopy_v1_DeploymentTriggerPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentTriggerPolicy) + out := out.(*DeploymentTriggerPolicy) + out.Type = in.Type + if in.ImageChangeParams != nil { + in, out := &in.ImageChangeParams, &out.ImageChangeParams + *out = new(DeploymentTriggerImageChangeParams) + if err := DeepCopy_v1_DeploymentTriggerImageChangeParams(*in, *out, c); err != nil { + return err + } + } else { + out.ImageChangeParams = nil + } + return nil + } +} + +func DeepCopy_v1_ExecNewPodHook(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExecNewPodHook) + out := out.(*ExecNewPodHook) + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]api_v1.EnvVar, len(*in)) + for i := range *in { + if err := api_v1.DeepCopy_v1_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + out.ContainerName = in.ContainerName + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Volumes = nil + } + return nil + } +} + +func DeepCopy_v1_LifecycleHook(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LifecycleHook) + out := out.(*LifecycleHook) + out.FailurePolicy = in.FailurePolicy + if in.ExecNewPod != nil { + in, out := &in.ExecNewPod, &out.ExecNewPod + *out = new(ExecNewPodHook) + if err := DeepCopy_v1_ExecNewPodHook(*in, *out, c); err != nil { + return err + } + } else { + out.ExecNewPod = nil + } + if in.TagImages != nil { + in, out := &in.TagImages, &out.TagImages + *out = make([]TagImageHook, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.TagImages = nil + } + return nil + } +} + +func DeepCopy_v1_RecreateDeploymentStrategyParams(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RecreateDeploymentStrategyParams) + out := out.(*RecreateDeploymentStrategyParams) + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + if in.Pre != nil { + in, out := &in.Pre, &out.Pre + *out = new(LifecycleHook) + if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Pre = nil + } + if in.Mid != nil { + in, out := &in.Mid, &out.Mid + *out = new(LifecycleHook) + if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Mid = nil + } + if in.Post != nil { + in, out := &in.Post, &out.Post + *out = new(LifecycleHook) + if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Post = nil + } + return nil + } +} + +func DeepCopy_v1_RollingDeploymentStrategyParams(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RollingDeploymentStrategyParams) + out := out.(*RollingDeploymentStrategyParams) + if in.UpdatePeriodSeconds != nil { + in, out := &in.UpdatePeriodSeconds, &out.UpdatePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.UpdatePeriodSeconds = nil + } + if in.IntervalSeconds != nil { + in, out := &in.IntervalSeconds, &out.IntervalSeconds + *out = new(int64) + **out = **in + } else { + out.IntervalSeconds = nil + } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + if in.MaxUnavailable != nil { + in, out := &in.MaxUnavailable, &out.MaxUnavailable + *out = new(intstr.IntOrString) + **out = **in + } else { + out.MaxUnavailable = nil + } + if in.MaxSurge != nil { + in, out := &in.MaxSurge, &out.MaxSurge + *out = new(intstr.IntOrString) + **out = **in + } else { + out.MaxSurge = nil + } + if in.UpdatePercent != nil { + in, out := &in.UpdatePercent, &out.UpdatePercent + *out = new(int32) + **out = **in + } else { + out.UpdatePercent = nil + } + if in.Pre != nil { + in, out := &in.Pre, &out.Pre + *out = new(LifecycleHook) + if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Pre = nil + } + if in.Post != nil { + in, out := &in.Post, &out.Post + *out = new(LifecycleHook) + if err := DeepCopy_v1_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Post = nil + } + return nil + } +} + +func DeepCopy_v1_TagImageHook(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagImageHook) + out := out.(*TagImageHook) + out.ContainerName = in.ContainerName + out.To = in.To + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/deploy/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..9dcc6b90 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/api/zz_generated.deepcopy.go @@ -0,0 +1,617 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + image_api "github.com/openshift/origin/pkg/image/api" + pkg_api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_CustomDeploymentStrategyParams, InType: reflect.TypeOf(&CustomDeploymentStrategyParams{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentCause, InType: reflect.TypeOf(&DeploymentCause{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentCauseImageTrigger, InType: reflect.TypeOf(&DeploymentCauseImageTrigger{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentConfig, InType: reflect.TypeOf(&DeploymentConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentConfigList, InType: reflect.TypeOf(&DeploymentConfigList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentConfigRollback, InType: reflect.TypeOf(&DeploymentConfigRollback{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentConfigRollbackSpec, InType: reflect.TypeOf(&DeploymentConfigRollbackSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentConfigSpec, InType: reflect.TypeOf(&DeploymentConfigSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentConfigStatus, InType: reflect.TypeOf(&DeploymentConfigStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentDetails, InType: reflect.TypeOf(&DeploymentDetails{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentLog, InType: reflect.TypeOf(&DeploymentLog{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentLogOptions, InType: reflect.TypeOf(&DeploymentLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentStrategy, InType: reflect.TypeOf(&DeploymentStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentTriggerImageChangeParams, InType: reflect.TypeOf(&DeploymentTriggerImageChangeParams{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeploymentTriggerPolicy, InType: reflect.TypeOf(&DeploymentTriggerPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ExecNewPodHook, InType: reflect.TypeOf(&ExecNewPodHook{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LifecycleHook, InType: reflect.TypeOf(&LifecycleHook{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RecreateDeploymentStrategyParams, InType: reflect.TypeOf(&RecreateDeploymentStrategyParams{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RollingDeploymentStrategyParams, InType: reflect.TypeOf(&RollingDeploymentStrategyParams{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TagImageHook, InType: reflect.TypeOf(&TagImageHook{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TemplateImage, InType: reflect.TypeOf(&TemplateImage{})}, + ) +} + +func DeepCopy_api_CustomDeploymentStrategyParams(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomDeploymentStrategyParams) + out := out.(*CustomDeploymentStrategyParams) + out.Image = in.Image + if in.Environment != nil { + in, out := &in.Environment, &out.Environment + *out = make([]pkg_api.EnvVar, len(*in)) + for i := range *in { + if err := pkg_api.DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Environment = nil + } + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_api_DeploymentCause(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentCause) + out := out.(*DeploymentCause) + out.Type = in.Type + if in.ImageTrigger != nil { + in, out := &in.ImageTrigger, &out.ImageTrigger + *out = new(DeploymentCauseImageTrigger) + **out = **in + } else { + out.ImageTrigger = nil + } + return nil + } +} + +func DeepCopy_api_DeploymentCauseImageTrigger(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentCauseImageTrigger) + out := out.(*DeploymentCauseImageTrigger) + out.From = in.From + return nil + } +} + +func DeepCopy_api_DeploymentConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfig) + out := out.(*DeploymentConfig) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_DeploymentConfigSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_DeploymentConfigStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_DeploymentConfigList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigList) + out := out.(*DeploymentConfigList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DeploymentConfig, len(*in)) + for i := range *in { + if err := DeepCopy_api_DeploymentConfig(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_DeploymentConfigRollback(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigRollback) + out := out.(*DeploymentConfigRollback) + out.TypeMeta = in.TypeMeta + out.Name = in.Name + if in.UpdatedAnnotations != nil { + in, out := &in.UpdatedAnnotations, &out.UpdatedAnnotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.UpdatedAnnotations = nil + } + out.Spec = in.Spec + return nil + } +} + +func DeepCopy_api_DeploymentConfigRollbackSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigRollbackSpec) + out := out.(*DeploymentConfigRollbackSpec) + out.From = in.From + out.Revision = in.Revision + out.IncludeTriggers = in.IncludeTriggers + out.IncludeTemplate = in.IncludeTemplate + out.IncludeReplicationMeta = in.IncludeReplicationMeta + out.IncludeStrategy = in.IncludeStrategy + return nil + } +} + +func DeepCopy_api_DeploymentConfigSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigSpec) + out := out.(*DeploymentConfigSpec) + if err := DeepCopy_api_DeploymentStrategy(&in.Strategy, &out.Strategy, c); err != nil { + return err + } + out.MinReadySeconds = in.MinReadySeconds + if in.Triggers != nil { + in, out := &in.Triggers, &out.Triggers + *out = make([]DeploymentTriggerPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_api_DeploymentTriggerPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Triggers = nil + } + out.Replicas = in.Replicas + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } else { + out.RevisionHistoryLimit = nil + } + out.Test = in.Test + out.Paused = in.Paused + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(pkg_api.PodTemplateSpec) + if err := pkg_api.DeepCopy_api_PodTemplateSpec(*in, *out, c); err != nil { + return err + } + } else { + out.Template = nil + } + return nil + } +} + +func DeepCopy_api_DeploymentConfigStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentConfigStatus) + out := out.(*DeploymentConfigStatus) + out.LatestVersion = in.LatestVersion + out.ObservedGeneration = in.ObservedGeneration + out.Replicas = in.Replicas + out.UpdatedReplicas = in.UpdatedReplicas + out.AvailableReplicas = in.AvailableReplicas + out.UnavailableReplicas = in.UnavailableReplicas + if in.Details != nil { + in, out := &in.Details, &out.Details + *out = new(DeploymentDetails) + if err := DeepCopy_api_DeploymentDetails(*in, *out, c); err != nil { + return err + } + } else { + out.Details = nil + } + return nil + } +} + +func DeepCopy_api_DeploymentDetails(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentDetails) + out := out.(*DeploymentDetails) + out.Message = in.Message + if in.Causes != nil { + in, out := &in.Causes, &out.Causes + *out = make([]DeploymentCause, len(*in)) + for i := range *in { + if err := DeepCopy_api_DeploymentCause(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Causes = nil + } + return nil + } +} + +func DeepCopy_api_DeploymentLog(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentLog) + out := out.(*DeploymentLog) + out.TypeMeta = in.TypeMeta + return nil + } +} + +func DeepCopy_api_DeploymentLogOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentLogOptions) + out := out.(*DeploymentLogOptions) + out.TypeMeta = in.TypeMeta + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } else { + out.SinceSeconds = nil + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.SinceTime = nil + } + out.Timestamps = in.Timestamps + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } else { + out.TailLines = nil + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } else { + out.LimitBytes = nil + } + out.NoWait = in.NoWait + if in.Version != nil { + in, out := &in.Version, &out.Version + *out = new(int64) + **out = **in + } else { + out.Version = nil + } + return nil + } +} + +func DeepCopy_api_DeploymentStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentStrategy) + out := out.(*DeploymentStrategy) + out.Type = in.Type + if in.RecreateParams != nil { + in, out := &in.RecreateParams, &out.RecreateParams + *out = new(RecreateDeploymentStrategyParams) + if err := DeepCopy_api_RecreateDeploymentStrategyParams(*in, *out, c); err != nil { + return err + } + } else { + out.RecreateParams = nil + } + if in.RollingParams != nil { + in, out := &in.RollingParams, &out.RollingParams + *out = new(RollingDeploymentStrategyParams) + if err := DeepCopy_api_RollingDeploymentStrategyParams(*in, *out, c); err != nil { + return err + } + } else { + out.RollingParams = nil + } + if in.CustomParams != nil { + in, out := &in.CustomParams, &out.CustomParams + *out = new(CustomDeploymentStrategyParams) + if err := DeepCopy_api_CustomDeploymentStrategyParams(*in, *out, c); err != nil { + return err + } + } else { + out.CustomParams = nil + } + if err := pkg_api.DeepCopy_api_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Labels = nil + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Annotations = nil + } + return nil + } +} + +func DeepCopy_api_DeploymentTriggerImageChangeParams(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentTriggerImageChangeParams) + out := out.(*DeploymentTriggerImageChangeParams) + out.Automatic = in.Automatic + if in.ContainerNames != nil { + in, out := &in.ContainerNames, &out.ContainerNames + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ContainerNames = nil + } + out.From = in.From + out.LastTriggeredImage = in.LastTriggeredImage + return nil + } +} + +func DeepCopy_api_DeploymentTriggerPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentTriggerPolicy) + out := out.(*DeploymentTriggerPolicy) + out.Type = in.Type + if in.ImageChangeParams != nil { + in, out := &in.ImageChangeParams, &out.ImageChangeParams + *out = new(DeploymentTriggerImageChangeParams) + if err := DeepCopy_api_DeploymentTriggerImageChangeParams(*in, *out, c); err != nil { + return err + } + } else { + out.ImageChangeParams = nil + } + return nil + } +} + +func DeepCopy_api_ExecNewPodHook(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExecNewPodHook) + out := out.(*ExecNewPodHook) + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]pkg_api.EnvVar, len(*in)) + for i := range *in { + if err := pkg_api.DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + out.ContainerName = in.ContainerName + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Volumes = nil + } + return nil + } +} + +func DeepCopy_api_LifecycleHook(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LifecycleHook) + out := out.(*LifecycleHook) + out.FailurePolicy = in.FailurePolicy + if in.ExecNewPod != nil { + in, out := &in.ExecNewPod, &out.ExecNewPod + *out = new(ExecNewPodHook) + if err := DeepCopy_api_ExecNewPodHook(*in, *out, c); err != nil { + return err + } + } else { + out.ExecNewPod = nil + } + if in.TagImages != nil { + in, out := &in.TagImages, &out.TagImages + *out = make([]TagImageHook, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.TagImages = nil + } + return nil + } +} + +func DeepCopy_api_RecreateDeploymentStrategyParams(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RecreateDeploymentStrategyParams) + out := out.(*RecreateDeploymentStrategyParams) + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + if in.Pre != nil { + in, out := &in.Pre, &out.Pre + *out = new(LifecycleHook) + if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Pre = nil + } + if in.Mid != nil { + in, out := &in.Mid, &out.Mid + *out = new(LifecycleHook) + if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Mid = nil + } + if in.Post != nil { + in, out := &in.Post, &out.Post + *out = new(LifecycleHook) + if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Post = nil + } + return nil + } +} + +func DeepCopy_api_RollingDeploymentStrategyParams(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RollingDeploymentStrategyParams) + out := out.(*RollingDeploymentStrategyParams) + if in.UpdatePeriodSeconds != nil { + in, out := &in.UpdatePeriodSeconds, &out.UpdatePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.UpdatePeriodSeconds = nil + } + if in.IntervalSeconds != nil { + in, out := &in.IntervalSeconds, &out.IntervalSeconds + *out = new(int64) + **out = **in + } else { + out.IntervalSeconds = nil + } + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + out.MaxUnavailable = in.MaxUnavailable + out.MaxSurge = in.MaxSurge + if in.UpdatePercent != nil { + in, out := &in.UpdatePercent, &out.UpdatePercent + *out = new(int32) + **out = **in + } else { + out.UpdatePercent = nil + } + if in.Pre != nil { + in, out := &in.Pre, &out.Pre + *out = new(LifecycleHook) + if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Pre = nil + } + if in.Post != nil { + in, out := &in.Post, &out.Post + *out = new(LifecycleHook) + if err := DeepCopy_api_LifecycleHook(*in, *out, c); err != nil { + return err + } + } else { + out.Post = nil + } + return nil + } +} + +func DeepCopy_api_TagImageHook(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagImageHook) + out := out.(*TagImageHook) + out.ContainerName = in.ContainerName + out.To = in.To + return nil + } +} + +func DeepCopy_api_TemplateImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TemplateImage) + out := out.(*TemplateImage) + out.Image = in.Image + if in.Ref != nil { + in, out := &in.Ref, &out.Ref + *out = new(image_api.DockerImageReference) + **out = **in + } else { + out.Ref = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.From = nil + } + if in.Container != nil { + in, out := &in.Container, &out.Container + *out = new(pkg_api.Container) + if err := pkg_api.DeepCopy_api_Container(*in, *out, c); err != nil { + return err + } + } else { + out.Container = nil + } + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/cmd/delete.go b/vendor/github.com/openshift/origin/pkg/deploy/cmd/delete.go new file mode 100644 index 00000000..7a59422a --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/cmd/delete.go @@ -0,0 +1,136 @@ +package cmd + +import ( + "time" + + "github.com/golang/glog" + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/kubectl" + kutil "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/wait" + + "github.com/openshift/origin/pkg/client" + deployapi "github.com/openshift/origin/pkg/deploy/api" + "github.com/openshift/origin/pkg/deploy/util" +) + +// NewDeploymentConfigReaper returns a new reaper for deploymentConfigs +func NewDeploymentConfigReaper(oc client.Interface, kc kclient.Interface) kubectl.Reaper { + return &DeploymentConfigReaper{oc: oc, kc: kc, pollInterval: kubectl.Interval, timeout: kubectl.Timeout} +} + +// DeploymentConfigReaper implements the Reaper interface for deploymentConfigs +type DeploymentConfigReaper struct { + oc client.Interface + kc kclient.Interface + pollInterval, timeout time.Duration +} + +// pause marks the deployment configuration as paused to avoid triggering new +// deployments. +func (reaper *DeploymentConfigReaper) pause(namespace, name string) (*deployapi.DeploymentConfig, error) { + return client.UpdateConfigWithRetries(reaper.oc, namespace, name, func(d *deployapi.DeploymentConfig) { + d.Spec.RevisionHistoryLimit = kutil.Int32Ptr(0) + d.Spec.Replicas = 0 + d.Spec.Paused = true + }) +} + +// Stop scales a replication controller via its deployment configuration down to +// zero replicas, waits for all of them to get deleted and then deletes both the +// replication controller and its deployment configuration. +func (reaper *DeploymentConfigReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *kapi.DeleteOptions) error { + // Pause the deployment configuration to prevent the new deployments from + // being triggered. + config, err := reaper.pause(namespace, name) + configNotFound := kerrors.IsNotFound(err) + if err != nil && !configNotFound { + return err + } + + var ( + isPaused bool + legacy bool + ) + // Determine if the deployment config controller noticed the pause. + if !configNotFound { + if err := wait.Poll(1*time.Second, 1*time.Minute, func() (bool, error) { + dc, err := reaper.oc.DeploymentConfigs(namespace).Get(name) + if err != nil { + return false, err + } + isPaused = dc.Spec.Paused + return dc.Status.ObservedGeneration >= config.Generation, nil + }); err != nil { + return err + } + + // If we failed to pause the deployment config, it means we are talking to + // old API that does not support pausing. In that case, we delete the + // deployment config to stay backward compatible. + if !isPaused { + if err := reaper.oc.DeploymentConfigs(namespace).Delete(name); err != nil { + return err + } + // Setting this to true avoid deleting the config at the end. + legacy = true + } + } + + // Clean up deployments related to the config. Even if the deployment + // configuration has been deleted, we want to sweep the existing replication + // controllers and clean them up. + options := kapi.ListOptions{LabelSelector: util.ConfigSelector(name)} + rcList, err := reaper.kc.ReplicationControllers(namespace).List(options) + if err != nil { + return err + } + rcReaper, err := kubectl.ReaperFor(kapi.Kind("ReplicationController"), reaper.kc) + if err != nil { + return err + } + + // If there is neither a config nor any deployments, nor any deployer pods, we can return NotFound. + deployments := rcList.Items + + if configNotFound && len(deployments) == 0 { + return kerrors.NewNotFound(kapi.Resource("deploymentconfig"), name) + } + + for _, rc := range deployments { + if err = rcReaper.Stop(rc.Namespace, rc.Name, timeout, gracePeriod); err != nil { + // Better not error out here... + glog.Infof("Cannot delete ReplicationController %s/%s for deployment config %s/%s: %v", rc.Namespace, rc.Name, namespace, name, err) + } + + // Only remove deployer pods when the deployment was failed. For completed + // deployment the pods should be already deleted. + if !util.IsFailedDeployment(&rc) { + continue + } + + // Delete all deployer and hook pods + options = kapi.ListOptions{LabelSelector: util.DeployerPodSelector(rc.Name)} + podList, err := reaper.kc.Pods(rc.Namespace).List(options) + if err != nil { + return err + } + for _, pod := range podList.Items { + err := reaper.kc.Pods(pod.Namespace).Delete(pod.Name, gracePeriod) + if err != nil { + // Better not error out here... + glog.Infof("Cannot delete lifecycle Pod %s/%s for deployment config %s/%s: %v", pod.Namespace, pod.Name, namespace, name, err) + } + } + } + + // Nothing to delete or we already deleted the deployment config because we + // failed to pause. + if configNotFound || legacy { + return nil + } + + return reaper.oc.DeploymentConfigs(namespace).Delete(name) +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/cmd/doc.go b/vendor/github.com/openshift/origin/pkg/deploy/cmd/doc.go new file mode 100644 index 00000000..e9976e44 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/cmd/doc.go @@ -0,0 +1,3 @@ +// Package cmd contains various interface implementations for command-line tools +// associated with deploymentconfigs. +package cmd diff --git a/vendor/github.com/openshift/origin/pkg/deploy/cmd/generate.go b/vendor/github.com/openshift/origin/pkg/deploy/cmd/generate.go new file mode 100644 index 00000000..32728204 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/cmd/generate.go @@ -0,0 +1,41 @@ +package cmd + +import ( + "fmt" + "reflect" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/runtime" + + deployapi "github.com/openshift/origin/pkg/deploy/api" +) + +var basic = kubectl.BasicReplicationController{} + +type BasicDeploymentConfigController struct{} + +func (BasicDeploymentConfigController) ParamNames() []kubectl.GeneratorParam { + return basic.ParamNames() +} + +func (BasicDeploymentConfigController) Generate(genericParams map[string]interface{}) (runtime.Object, error) { + obj, err := basic.Generate(genericParams) + if err != nil { + return nil, err + } + switch t := obj.(type) { + case *kapi.ReplicationController: + obj = &deployapi.DeploymentConfig{ + ObjectMeta: t.ObjectMeta, + Spec: deployapi.DeploymentConfigSpec{ + Selector: t.Spec.Selector, + Replicas: t.Spec.Replicas, + Template: t.Spec.Template, + }, + } + default: + return nil, fmt.Errorf("unrecognized object type: %v", reflect.TypeOf(t)) + } + return obj, nil +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/cmd/history.go b/vendor/github.com/openshift/origin/pkg/deploy/cmd/history.go new file mode 100644 index 00000000..7f52e054 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/cmd/history.go @@ -0,0 +1,99 @@ +package cmd + +import ( + "bytes" + "fmt" + "sort" + "text/tabwriter" + + kapi "k8s.io/kubernetes/pkg/api" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/kubectl" + + "github.com/openshift/origin/pkg/client" + deployapi "github.com/openshift/origin/pkg/deploy/api" + deployutil "github.com/openshift/origin/pkg/deploy/util" +) + +func NewDeploymentConfigHistoryViewer(oc client.Interface, kc kclient.Interface) kubectl.HistoryViewer { + return &DeploymentConfigHistoryViewer{dn: oc, rn: kc} +} + +// DeploymentConfigHistoryViewer is an implementation of the kubectl HistoryViewer interface +// for deployment configs. +type DeploymentConfigHistoryViewer struct { + rn kclient.ReplicationControllersNamespacer + dn client.DeploymentConfigsNamespacer +} + +var _ kubectl.HistoryViewer = &DeploymentConfigHistoryViewer{} + +// ViewHistory returns a description of all the history it can find for a deployment config. +func (h *DeploymentConfigHistoryViewer) ViewHistory(namespace, name string, revision int64) (string, error) { + opts := kapi.ListOptions{LabelSelector: deployutil.ConfigSelector(name)} + deploymentList, err := h.rn.ReplicationControllers(namespace).List(opts) + if err != nil { + return "", err + } + history := deploymentList.Items + + if len(deploymentList.Items) == 0 { + return "No rollout history found.", nil + } + + // Print details of a specific revision + if revision > 0 { + var desired *kapi.PodTemplateSpec + // We could use a binary search here but brute-force is always faster to write + for i := range history { + rc := history[i] + + if deployutil.DeploymentVersionFor(&rc) == revision { + desired = rc.Spec.Template + break + } + } + + if desired == nil { + return "", fmt.Errorf("unable to find the specified revision") + } + + buf := bytes.NewBuffer([]byte{}) + kubectl.DescribePodTemplate(desired, buf) + return buf.String(), nil + } + + sort.Sort(deployutil.ByLatestVersionAsc(history)) + + return tabbedString(func(out *tabwriter.Writer) error { + fmt.Fprintf(out, "REVISION\tSTATUS\tCAUSE\n") + for i := range history { + rc := history[i] + + rev := deployutil.DeploymentVersionFor(&rc) + status := deployutil.DeploymentStatusFor(&rc) + cause := rc.Annotations[deployapi.DeploymentStatusReasonAnnotation] + if len(cause) == 0 { + cause = "" + } + fmt.Fprintf(out, "%d\t%s\t%s\n", rev, status, cause) + } + return nil + }) +} + +// TODO: Re-use from an utility package +func tabbedString(f func(*tabwriter.Writer) error) (string, error) { + out := new(tabwriter.Writer) + buf := &bytes.Buffer{} + out.Init(buf, 0, 8, 1, '\t', 0) + + err := f(out) + if err != nil { + return "", err + } + + out.Flush() + str := string(buf.String()) + return str, nil +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/cmd/rollback.go b/vendor/github.com/openshift/origin/pkg/deploy/cmd/rollback.go new file mode 100644 index 00000000..cff7dc9e --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/cmd/rollback.go @@ -0,0 +1,56 @@ +package cmd + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/runtime" + + "github.com/openshift/origin/pkg/client" + deployapi "github.com/openshift/origin/pkg/deploy/api" +) + +func NewDeploymentConfigRollbacker(oc client.Interface) kubectl.Rollbacker { + return &DeploymentConfigRollbacker{dn: oc} +} + +// DeploymentConfigRollbacker is an implementation of the kubectl Rollbacker interface +// for deployment configs. +type DeploymentConfigRollbacker struct { + dn client.DeploymentConfigsNamespacer +} + +var _ kubectl.Rollbacker = &DeploymentConfigRollbacker{} + +// Rollback the provided deployment config to a specific revision. If revision is zero, we will +// rollback to the previous deployment. +func (r *DeploymentConfigRollbacker) Rollback(obj runtime.Object, updatedAnnotations map[string]string, toRevision int64) (string, error) { + config, ok := obj.(*deployapi.DeploymentConfig) + if !ok { + return "", fmt.Errorf("passed object is not a deployment config: %#v", obj) + } + if config.Spec.Paused { + return "", fmt.Errorf("cannot rollback a paused config; resume it first with 'rollout resume dc/%s' and try again", config.Name) + } + + rollback := &deployapi.DeploymentConfigRollback{ + Name: config.Name, + UpdatedAnnotations: updatedAnnotations, + Spec: deployapi.DeploymentConfigRollbackSpec{ + Revision: toRevision, + IncludeTemplate: true, + }, + } + + rolledback, err := r.dn.DeploymentConfigs(config.Namespace).Rollback(rollback) + if err != nil { + return "", err + } + + _, err = r.dn.DeploymentConfigs(config.Namespace).Update(rolledback) + if err != nil { + return "", err + } + + return "rolled back", nil +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/cmd/scale.go b/vendor/github.com/openshift/origin/pkg/deploy/cmd/scale.go new file mode 100644 index 00000000..29d2e98b --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/cmd/scale.go @@ -0,0 +1,98 @@ +package cmd + +import ( + "time" + + kapi "k8s.io/kubernetes/pkg/api" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/util/wait" + + "github.com/openshift/origin/pkg/client" + "github.com/openshift/origin/pkg/deploy/util" +) + +// NewDeploymentConfigScaler returns a new scaler for deploymentConfigs +func NewDeploymentConfigScaler(oc client.Interface, kc kclient.Interface) kubectl.Scaler { + return &DeploymentConfigScaler{rcClient: kc, dcClient: oc, clientInterface: kc} +} + +// DeploymentConfigScaler is a wrapper for the kubectl Scaler client +type DeploymentConfigScaler struct { + rcClient kclient.ReplicationControllersNamespacer + dcClient client.DeploymentConfigsNamespacer + + clientInterface kclient.Interface +} + +// Scale updates the DeploymentConfig with the provided namespace/name, to a +// new size, with optional precondition check (if preconditions is not nil), +// optional retries (if retry is not nil), and then optionally waits for its +// deployment replica count to reach the new value (if wait is not nil). +func (scaler *DeploymentConfigScaler) Scale(namespace, name string, newSize uint, preconditions *kubectl.ScalePrecondition, retry, waitForReplicas *kubectl.RetryParams) error { + if preconditions == nil { + preconditions = &kubectl.ScalePrecondition{Size: -1, ResourceVersion: ""} + } + if retry == nil { + // Make it try only once, immediately + retry = &kubectl.RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} + } + cond := kubectl.ScaleCondition(scaler, preconditions, namespace, name, newSize, nil) + if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { + return err + } + // TODO: convert to a watch and use resource version from the ScaleCondition - kubernetes/kubernetes#31051 + if waitForReplicas != nil { + dc, err := scaler.dcClient.DeploymentConfigs(namespace).Get(name) + if err != nil { + return err + } + rc, err := scaler.rcClient.ReplicationControllers(namespace).Get(util.LatestDeploymentNameForConfig(dc)) + if err != nil { + return err + } + return wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, controllerHasSpecifiedReplicas(scaler.clientInterface, rc, dc.Spec.Replicas)) + } + return nil +} + +// ScaleSimple does a simple one-shot attempt at scaling - not useful on its +// own, but a necessary building block for Scale. +func (scaler *DeploymentConfigScaler) ScaleSimple(namespace, name string, preconditions *kubectl.ScalePrecondition, newSize uint) (string, error) { + scale, err := scaler.dcClient.DeploymentConfigs(namespace).GetScale(name) + if err != nil { + return "", err + } + scale.Spec.Replicas = int32(newSize) + updated, err := scaler.dcClient.DeploymentConfigs(namespace).UpdateScale(scale) + if err != nil { + return "", kubectl.ScaleError{FailureType: kubectl.ScaleUpdateFailure, ResourceVersion: "Unknown", ActualError: err} + } + return updated.ResourceVersion, nil +} + +// controllerHasSpecifiedReplicas returns a condition that will be true if and +// only if the specified replica count for a controller's ReplicaSelector +// equals the Replicas count. +// +// This is a slightly modified version of +// unversioned.ControllerHasDesiredReplicas. This is necessary because when +// scaling an RC via a DC, the RC spec replica count is not immediately +// updated to match the owning DC. +func controllerHasSpecifiedReplicas(c kclient.Interface, controller *kapi.ReplicationController, specifiedReplicas int32) wait.ConditionFunc { + // If we're given a controller where the status lags the spec, it either means that the controller is stale, + // or that the rc manager hasn't noticed the update yet. Polling status.Replicas is not safe in the latter case. + desiredGeneration := controller.Generation + + return func() (bool, error) { + ctrl, err := c.ReplicationControllers(controller.Namespace).Get(controller.Name) + if err != nil { + return false, err + } + // There's a chance a concurrent update modifies the Spec.Replicas causing this check to pass, + // or, after this check has passed, a modification causes the rc manager to create more pods. + // This will not be an issue once we've implemented graceful delete for rcs, but till then + // concurrent stop operations on the same rc might have unintended side effects. + return ctrl.Status.ObservedGeneration >= desiredGeneration && ctrl.Status.Replicas == specifiedReplicas, nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/graph/analysis/dc.go b/vendor/github.com/openshift/origin/pkg/deploy/graph/analysis/dc.go new file mode 100644 index 00000000..ca1c20ad --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/graph/analysis/dc.go @@ -0,0 +1,126 @@ +package analysis + +import ( + "fmt" + + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + buildedges "github.com/openshift/origin/pkg/build/graph" + buildutil "github.com/openshift/origin/pkg/build/util" + deployedges "github.com/openshift/origin/pkg/deploy/graph" + deploygraph "github.com/openshift/origin/pkg/deploy/graph/nodes" + imageedges "github.com/openshift/origin/pkg/image/graph" + imagegraph "github.com/openshift/origin/pkg/image/graph/nodes" +) + +const ( + MissingImageStreamErr = "MissingImageStream" + MissingImageStreamTagWarning = "MissingImageStreamTag" + MissingReadinessProbeWarning = "MissingReadinessProbe" +) + +// FindDeploymentConfigTriggerErrors checks for possible failures in deployment config +// image change triggers. +// +// Precedence of failures: +// 1. The image stream for the tag of interest does not exist. +// 2. The image stream tag does not exist. +func FindDeploymentConfigTriggerErrors(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastDcNode := range g.NodesByKind(deploygraph.DeploymentConfigNodeKind) { + dcNode := uncastDcNode.(*deploygraph.DeploymentConfigNode) + marker := ictMarker(g, f, dcNode) + if marker != nil { + markers = append(markers, *marker) + } + } + + return markers +} + +// ictMarker inspects the image change triggers for the provided deploymentconfig and returns +// a marker in case of the following two scenarios: +// +// 1. The image stream pointed by the dc trigger doen not exist. +// 2. The image stream tag pointed by the dc trigger does not exist and there is no build in +// flight that could push to the tag. +func ictMarker(g osgraph.Graph, f osgraph.Namer, dcNode *deploygraph.DeploymentConfigNode) *osgraph.Marker { + for _, uncastIstNode := range g.PredecessorNodesByEdgeKind(dcNode, deployedges.TriggersDeploymentEdgeKind) { + if istNode := uncastIstNode.(*imagegraph.ImageStreamTagNode); !istNode.Found() { + // The image stream for the tag of interest does not exist. + if isNode, exists := doesImageStreamExist(g, uncastIstNode); !exists { + return &osgraph.Marker{ + Node: dcNode, + RelatedNodes: []graph.Node{uncastIstNode, isNode}, + + Severity: osgraph.ErrorSeverity, + Key: MissingImageStreamErr, + Message: fmt.Sprintf("The image trigger for %s will have no effect because %s does not exist.", + f.ResourceName(dcNode), f.ResourceName(isNode)), + // TODO: Suggest `oc create imagestream` once we have that. + } + } + + for _, bcNode := range buildedges.BuildConfigsForTag(g, istNode) { + // Avoid warning for the dc image trigger in case there is a build in flight. + if latestBuild := buildedges.GetLatestBuild(g, bcNode); latestBuild != nil && !buildutil.IsBuildComplete(latestBuild.Build) { + return nil + } + } + + // The image stream tag of interest does not exist. + return &osgraph.Marker{ + Node: dcNode, + RelatedNodes: []graph.Node{uncastIstNode}, + + Severity: osgraph.WarningSeverity, + Key: MissingImageStreamTagWarning, + Message: fmt.Sprintf("The image trigger for %s will have no effect until %s is imported or created by a build.", + f.ResourceName(dcNode), f.ResourceName(istNode)), + } + } + } + return nil +} + +func doesImageStreamExist(g osgraph.Graph, istag graph.Node) (graph.Node, bool) { + for _, imagestream := range g.SuccessorNodesByEdgeKind(istag, imageedges.ReferencedImageStreamGraphEdgeKind) { + return imagestream, imagestream.(*imagegraph.ImageStreamNode).Found() + } + for _, imagestream := range g.SuccessorNodesByEdgeKind(istag, imageedges.ReferencedImageStreamImageGraphEdgeKind) { + return imagestream, imagestream.(*imagegraph.ImageStreamNode).Found() + } + return nil, false +} + +// FindDeploymentConfigReadinessWarnings inspects deploymentconfigs and reports those that +// don't have readiness probes set up. +func FindDeploymentConfigReadinessWarnings(g osgraph.Graph, f osgraph.Namer, setProbeCommand string) []osgraph.Marker { + markers := []osgraph.Marker{} + +Node: + for _, uncastDcNode := range g.NodesByKind(deploygraph.DeploymentConfigNodeKind) { + dcNode := uncastDcNode.(*deploygraph.DeploymentConfigNode) + if t := dcNode.DeploymentConfig.Spec.Template; t != nil && len(t.Spec.Containers) > 0 { + for _, container := range t.Spec.Containers { + if container.ReadinessProbe != nil { + continue Node + } + } + // All of the containers in the deployment config lack a readiness probe + markers = append(markers, osgraph.Marker{ + Node: uncastDcNode, + Severity: osgraph.WarningSeverity, + Key: MissingReadinessProbeWarning, + Message: fmt.Sprintf("%s has no readiness probe to verify pods are ready to accept traffic or ensure deployment is successful.", + f.ResourceName(dcNode)), + Suggestion: osgraph.Suggestion(fmt.Sprintf("%s %s --readiness ...", setProbeCommand, f.ResourceName(dcNode))), + }) + continue Node + } + } + + return markers +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/graph/analysis/doc.go b/vendor/github.com/openshift/origin/pkg/deploy/graph/analysis/doc.go new file mode 100644 index 00000000..cba9edf1 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/graph/analysis/doc.go @@ -0,0 +1,3 @@ +// Package analysis provides functions that analyse deployment configurations and setup markers +// that will be reported by oc status +package analysis diff --git a/vendor/github.com/openshift/origin/pkg/deploy/graph/edges.go b/vendor/github.com/openshift/origin/pkg/deploy/graph/edges.go new file mode 100644 index 00000000..ead9a385 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/graph/edges.go @@ -0,0 +1,85 @@ +package graph + +import ( + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + deployapi "github.com/openshift/origin/pkg/deploy/api" + deploygraph "github.com/openshift/origin/pkg/deploy/graph/nodes" + imageapi "github.com/openshift/origin/pkg/image/api" + imagegraph "github.com/openshift/origin/pkg/image/graph/nodes" +) + +const ( + // TriggersDeploymentEdgeKind points from DeploymentConfigs to ImageStreamTags that trigger the deployment + TriggersDeploymentEdgeKind = "TriggersDeployment" + // UsedInDeploymentEdgeKind points from DeploymentConfigs to DockerImageReferences that are used in the deployment + UsedInDeploymentEdgeKind = "UsedInDeployment" + // DeploymentEdgeKind points from DeploymentConfigs to the ReplicationControllers that are fulfilling the deployment + DeploymentEdgeKind = "Deployment" +) + +// AddTriggerEdges creates edges that point to named Docker image repositories for each image used in the deployment. +func AddTriggerEdges(g osgraph.MutableUniqueGraph, node *deploygraph.DeploymentConfigNode) *deploygraph.DeploymentConfigNode { + podTemplate := node.DeploymentConfig.Spec.Template + if podTemplate == nil { + return node + } + + deployapi.EachTemplateImage( + &podTemplate.Spec, + deployapi.DeploymentConfigHasTrigger(node.DeploymentConfig), + func(image deployapi.TemplateImage, err error) { + if err != nil { + return + } + if image.From != nil { + if len(image.From.Name) == 0 { + return + } + name, tag, _ := imageapi.SplitImageStreamTag(image.From.Name) + in := imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta(image.From.Namespace, name, tag)) + g.AddEdge(in, node, TriggersDeploymentEdgeKind) + return + } + + tag := image.Ref.Tag + image.Ref.Tag = "" + in := imagegraph.EnsureDockerRepositoryNode(g, image.Ref.String(), tag) + g.AddEdge(in, node, UsedInDeploymentEdgeKind) + }) + + return node +} + +func AddAllTriggerEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if dcNode, ok := node.(*deploygraph.DeploymentConfigNode); ok { + AddTriggerEdges(g, dcNode) + } + } +} + +func AddDeploymentEdges(g osgraph.MutableUniqueGraph, node *deploygraph.DeploymentConfigNode) *deploygraph.DeploymentConfigNode { + for _, n := range g.(graph.Graph).Nodes() { + if rcNode, ok := n.(*kubegraph.ReplicationControllerNode); ok { + if rcNode.ReplicationController.Namespace != node.DeploymentConfig.Namespace { + continue + } + if BelongsToDeploymentConfig(node.DeploymentConfig, rcNode.ReplicationController) { + g.AddEdge(node, rcNode, DeploymentEdgeKind) + } + } + } + + return node +} + +func AddAllDeploymentEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if dcNode, ok := node.(*deploygraph.DeploymentConfigNode); ok { + AddDeploymentEdges(g, dcNode) + } + } +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/graph/helpers.go b/vendor/github.com/openshift/origin/pkg/deploy/graph/helpers.go new file mode 100644 index 00000000..6f99c622 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/graph/helpers.go @@ -0,0 +1,49 @@ +package graph + +import ( + "sort" + + kapi "k8s.io/kubernetes/pkg/api" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + deployapi "github.com/openshift/origin/pkg/deploy/api" + deploygraph "github.com/openshift/origin/pkg/deploy/graph/nodes" + deployutil "github.com/openshift/origin/pkg/deploy/util" +) + +// RelevantDeployments returns the active deployment and a list of inactive deployments (in order from newest to oldest) +func RelevantDeployments(g osgraph.Graph, dcNode *deploygraph.DeploymentConfigNode) (*kubegraph.ReplicationControllerNode, []*kubegraph.ReplicationControllerNode) { + allDeployments := []*kubegraph.ReplicationControllerNode{} + uncastDeployments := g.SuccessorNodesByEdgeKind(dcNode, DeploymentEdgeKind) + if len(uncastDeployments) == 0 { + return nil, []*kubegraph.ReplicationControllerNode{} + } + + for i := range uncastDeployments { + allDeployments = append(allDeployments, uncastDeployments[i].(*kubegraph.ReplicationControllerNode)) + } + + sort.Sort(RecentDeploymentReferences(allDeployments)) + + if dcNode.DeploymentConfig.Status.LatestVersion == deployutil.DeploymentVersionFor(allDeployments[0].ReplicationController) { + return allDeployments[0], allDeployments[1:] + } + + return nil, allDeployments +} + +func BelongsToDeploymentConfig(config *deployapi.DeploymentConfig, b *kapi.ReplicationController) bool { + if b.Annotations != nil { + return config.Name == deployutil.DeploymentConfigNameFor(b) + } + return false +} + +type RecentDeploymentReferences []*kubegraph.ReplicationControllerNode + +func (m RecentDeploymentReferences) Len() int { return len(m) } +func (m RecentDeploymentReferences) Swap(i, j int) { m[i], m[j] = m[j], m[i] } +func (m RecentDeploymentReferences) Less(i, j int) bool { + return deployutil.DeploymentVersionFor(m[i].ReplicationController) > deployutil.DeploymentVersionFor(m[j].ReplicationController) +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/graph/nodes/nodes.go b/vendor/github.com/openshift/origin/pkg/deploy/graph/nodes/nodes.go new file mode 100644 index 00000000..ac59ebc7 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/graph/nodes/nodes.go @@ -0,0 +1,38 @@ +package nodes + +import ( + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + depoyapi "github.com/openshift/origin/pkg/deploy/api" +) + +// EnsureDeploymentConfigNode adds the provided deployment config to the graph if it does not exist +func EnsureDeploymentConfigNode(g osgraph.MutableUniqueGraph, dc *depoyapi.DeploymentConfig) *DeploymentConfigNode { + dcName := DeploymentConfigNodeName(dc) + dcNode := osgraph.EnsureUnique( + g, + dcName, + func(node osgraph.Node) graph.Node { + return &DeploymentConfigNode{Node: node, DeploymentConfig: dc, IsFound: true} + }, + ).(*DeploymentConfigNode) + + if dc.Spec.Template != nil { + podTemplateSpecNode := kubegraph.EnsurePodTemplateSpecNode(g, dc.Spec.Template, dc.Namespace, dcName) + g.AddEdge(dcNode, podTemplateSpecNode, osgraph.ContainsEdgeKind) + } + + return dcNode +} + +func FindOrCreateSyntheticDeploymentConfigNode(g osgraph.MutableUniqueGraph, dc *depoyapi.DeploymentConfig) *DeploymentConfigNode { + return osgraph.EnsureUnique( + g, + DeploymentConfigNodeName(dc), + func(node osgraph.Node) graph.Node { + return &DeploymentConfigNode{Node: node, DeploymentConfig: dc, IsFound: false} + }, + ).(*DeploymentConfigNode) +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/graph/nodes/types.go b/vendor/github.com/openshift/origin/pkg/deploy/graph/nodes/types.go new file mode 100644 index 00000000..ce847ad3 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/graph/nodes/types.go @@ -0,0 +1,39 @@ +package nodes + +import ( + "reflect" + + osgraph "github.com/openshift/origin/pkg/api/graph" + deployapi "github.com/openshift/origin/pkg/deploy/api" +) + +var ( + DeploymentConfigNodeKind = reflect.TypeOf(deployapi.DeploymentConfig{}).Name() +) + +func DeploymentConfigNodeName(o *deployapi.DeploymentConfig) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(DeploymentConfigNodeKind, o) +} + +type DeploymentConfigNode struct { + osgraph.Node + DeploymentConfig *deployapi.DeploymentConfig + + IsFound bool +} + +func (n DeploymentConfigNode) Found() bool { + return n.IsFound +} + +func (n DeploymentConfigNode) Object() interface{} { + return n.DeploymentConfig +} + +func (n DeploymentConfigNode) String() string { + return string(DeploymentConfigNodeName(n.DeploymentConfig)) +} + +func (*DeploymentConfigNode) Kind() string { + return DeploymentConfigNodeKind +} diff --git a/vendor/github.com/openshift/origin/pkg/deploy/util/util.go b/vendor/github.com/openshift/origin/pkg/deploy/util/util.go new file mode 100644 index 00000000..ff3d4c55 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/deploy/util/util.go @@ -0,0 +1,496 @@ +package util + +import ( + "errors" + "fmt" + "sort" + "strconv" + "strings" + "time" + + "k8s.io/kubernetes/pkg/api" + kdeplutil "k8s.io/kubernetes/pkg/controller/deployment/util" + "k8s.io/kubernetes/pkg/fields" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/watch" + + deployapi "github.com/openshift/origin/pkg/deploy/api" + "github.com/openshift/origin/pkg/util/namer" + kclient "k8s.io/kubernetes/pkg/client/unversioned" +) + +// LatestDeploymentNameForConfig returns a stable identifier for config based on its version. +func LatestDeploymentNameForConfig(config *deployapi.DeploymentConfig) string { + return fmt.Sprintf("%s-%d", config.Name, config.Status.LatestVersion) +} + +// LatestDeploymentInfo returns info about the latest deployment for a config, +// or nil if there is no latest deployment. The latest deployment is not +// always the same as the active deployment. +func LatestDeploymentInfo(config *deployapi.DeploymentConfig, deployments []api.ReplicationController) (bool, *api.ReplicationController) { + if config.Status.LatestVersion == 0 || len(deployments) == 0 { + return false, nil + } + sort.Sort(ByLatestVersionDesc(deployments)) + candidate := &deployments[0] + return DeploymentVersionFor(candidate) == config.Status.LatestVersion, candidate +} + +// ActiveDeployment returns the latest complete deployment, or nil if there is +// no such deployment. The active deployment is not always the same as the +// latest deployment. +func ActiveDeployment(config *deployapi.DeploymentConfig, input []api.ReplicationController) *api.ReplicationController { + var activeDeployment *api.ReplicationController + var lastCompleteDeploymentVersion int64 = 0 + for i := range input { + deployment := &input[i] + deploymentVersion := DeploymentVersionFor(deployment) + if DeploymentStatusFor(deployment) == deployapi.DeploymentStatusComplete && deploymentVersion > lastCompleteDeploymentVersion { + activeDeployment = deployment + lastCompleteDeploymentVersion = deploymentVersion + } + } + return activeDeployment +} + +// DeployerPodSuffix is the suffix added to pods created from a deployment +const DeployerPodSuffix = "deploy" + +// DeployerPodNameForDeployment returns the name of a pod for a given deployment +func DeployerPodNameForDeployment(deployment string) string { + return namer.GetPodName(deployment, DeployerPodSuffix) +} + +// LabelForDeployment builds a string identifier for a Deployment. +func LabelForDeployment(deployment *api.ReplicationController) string { + return fmt.Sprintf("%s/%s", deployment.Namespace, deployment.Name) +} + +// LabelForDeploymentConfig builds a string identifier for a DeploymentConfig. +func LabelForDeploymentConfig(config *deployapi.DeploymentConfig) string { + return fmt.Sprintf("%s/%s", config.Namespace, config.Name) +} + +// DeploymentNameForConfigVersion returns the name of the version-th deployment +// for the config that has the provided name +func DeploymentNameForConfigVersion(name string, version int64) string { + return fmt.Sprintf("%s-%d", name, version) +} + +// ConfigSelector returns a label Selector which can be used to find all +// deployments for a DeploymentConfig. +// +// TODO: Using the annotation constant for now since the value is correct +// but we could consider adding a new constant to the public types. +func ConfigSelector(name string) labels.Selector { + return labels.Set{deployapi.DeploymentConfigAnnotation: name}.AsSelector() +} + +// DeployerPodSelector returns a label Selector which can be used to find all +// deployer pods associated with a deployment with name. +func DeployerPodSelector(name string) labels.Selector { + return labels.Set{deployapi.DeployerPodForDeploymentLabel: name}.AsSelector() +} + +// AnyDeployerPodSelector returns a label Selector which can be used to find +// all deployer pods across all deployments, including hook and custom +// deployer pods. +func AnyDeployerPodSelector() labels.Selector { + sel, _ := labels.Parse(deployapi.DeployerPodForDeploymentLabel) + return sel +} + +// HasChangeTrigger returns whether the provided deployment configuration has +// a config change trigger or not +func HasChangeTrigger(config *deployapi.DeploymentConfig) bool { + for _, trigger := range config.Spec.Triggers { + if trigger.Type == deployapi.DeploymentTriggerOnConfigChange { + return true + } + } + return false +} + +func DeploymentConfigDeepCopy(dc *deployapi.DeploymentConfig) (*deployapi.DeploymentConfig, error) { + objCopy, err := api.Scheme.DeepCopy(dc) + if err != nil { + return nil, err + } + copied, ok := objCopy.(*deployapi.DeploymentConfig) + if !ok { + return nil, fmt.Errorf("expected DeploymentConfig, got %#v", objCopy) + } + return copied, nil +} + +func DeploymentDeepCopy(rc *api.ReplicationController) (*api.ReplicationController, error) { + objCopy, err := api.Scheme.DeepCopy(rc) + if err != nil { + return nil, err + } + copied, ok := objCopy.(*api.ReplicationController) + if !ok { + return nil, fmt.Errorf("expected ReplicationController, got %#v", objCopy) + } + return copied, nil +} + +// DecodeDeploymentConfig decodes a DeploymentConfig from controller using codec. An error is returned +// if the controller doesn't contain an encoded config. +func DecodeDeploymentConfig(controller *api.ReplicationController, decoder runtime.Decoder) (*deployapi.DeploymentConfig, error) { + encodedConfig := []byte(EncodedDeploymentConfigFor(controller)) + decoded, err := runtime.Decode(decoder, encodedConfig) + if err != nil { + return nil, fmt.Errorf("failed to decode DeploymentConfig from controller: %v", err) + } + config, ok := decoded.(*deployapi.DeploymentConfig) + if !ok { + return nil, fmt.Errorf("decoded object from controller is not a DeploymentConfig") + } + return config, nil +} + +// EncodeDeploymentConfig encodes config as a string using codec. +func EncodeDeploymentConfig(config *deployapi.DeploymentConfig, codec runtime.Codec) (string, error) { + bytes, err := runtime.Encode(codec, config) + if err != nil { + return "", err + } + return string(bytes[:]), nil +} + +// MakeDeployment creates a deployment represented as a ReplicationController and based on the given +// DeploymentConfig. The controller replica count will be zero. +func MakeDeployment(config *deployapi.DeploymentConfig, codec runtime.Codec) (*api.ReplicationController, error) { + var err error + var encodedConfig string + + if encodedConfig, err = EncodeDeploymentConfig(config, codec); err != nil { + return nil, err + } + + deploymentName := LatestDeploymentNameForConfig(config) + + podSpec := api.PodSpec{} + if err := api.Scheme.Convert(&config.Spec.Template.Spec, &podSpec, nil); err != nil { + return nil, fmt.Errorf("couldn't clone podSpec: %v", err) + } + + controllerLabels := make(labels.Set) + for k, v := range config.Labels { + controllerLabels[k] = v + } + // Correlate the deployment with the config. + // TODO: Using the annotation constant for now since the value is correct + // but we could consider adding a new constant to the public types. + controllerLabels[deployapi.DeploymentConfigAnnotation] = config.Name + + // Ensure that pods created by this deployment controller can be safely associated back + // to the controller, and that multiple deployment controllers for the same config don't + // manipulate each others' pods. + selector := map[string]string{} + for k, v := range config.Spec.Selector { + selector[k] = v + } + selector[deployapi.DeploymentConfigLabel] = config.Name + selector[deployapi.DeploymentLabel] = deploymentName + + podLabels := make(labels.Set) + for k, v := range config.Spec.Template.Labels { + podLabels[k] = v + } + podLabels[deployapi.DeploymentConfigLabel] = config.Name + podLabels[deployapi.DeploymentLabel] = deploymentName + + podAnnotations := make(labels.Set) + for k, v := range config.Spec.Template.Annotations { + podAnnotations[k] = v + } + podAnnotations[deployapi.DeploymentAnnotation] = deploymentName + podAnnotations[deployapi.DeploymentConfigAnnotation] = config.Name + podAnnotations[deployapi.DeploymentVersionAnnotation] = strconv.FormatInt(config.Status.LatestVersion, 10) + + deployment := &api.ReplicationController{ + ObjectMeta: api.ObjectMeta{ + Name: deploymentName, + Namespace: config.Namespace, + Annotations: map[string]string{ + deployapi.DeploymentConfigAnnotation: config.Name, + deployapi.DeploymentStatusAnnotation: string(deployapi.DeploymentStatusNew), + deployapi.DeploymentEncodedConfigAnnotation: encodedConfig, + deployapi.DeploymentVersionAnnotation: strconv.FormatInt(config.Status.LatestVersion, 10), + // This is the target replica count for the new deployment. + deployapi.DesiredReplicasAnnotation: strconv.Itoa(int(config.Spec.Replicas)), + deployapi.DeploymentReplicasAnnotation: strconv.Itoa(0), + }, + Labels: controllerLabels, + }, + Spec: api.ReplicationControllerSpec{ + // The deployment should be inactive initially + Replicas: 0, + Selector: selector, + Template: &api.PodTemplateSpec{ + ObjectMeta: api.ObjectMeta{ + Labels: podLabels, + Annotations: podAnnotations, + }, + Spec: podSpec, + }, + }, + } + if config.Status.Details != nil && len(config.Status.Details.Message) > 0 { + deployment.Annotations[deployapi.DeploymentStatusReasonAnnotation] = config.Status.Details.Message + } + if value, ok := config.Annotations[deployapi.DeploymentIgnorePodAnnotation]; ok { + deployment.Annotations[deployapi.DeploymentIgnorePodAnnotation] = value + } + + return deployment, nil +} + +// GetReplicaCountForDeployments returns the sum of all replicas for the +// given deployments. +func GetReplicaCountForDeployments(deployments []api.ReplicationController) int32 { + totalReplicaCount := int32(0) + for _, deployment := range deployments { + totalReplicaCount += deployment.Spec.Replicas + } + return totalReplicaCount +} + +// GetStatusReplicaCountForDeployments returns the sum of the replicas reported in the +// status of the given deployments. +func GetStatusReplicaCountForDeployments(deployments []api.ReplicationController) int32 { + totalReplicaCount := int32(0) + for _, deployment := range deployments { + totalReplicaCount += deployment.Status.Replicas + } + return totalReplicaCount +} + +// GetAvailablePods returns all the available pods from the provided pod list. +func GetAvailablePods(pods []*api.Pod, minReadySeconds int32) int32 { + available := int32(0) + for i := range pods { + pod := pods[i] + if kdeplutil.IsPodAvailable(pod, minReadySeconds, time.Now()) { + available++ + } + } + return available +} + +func DeploymentConfigNameFor(obj runtime.Object) string { + return annotationFor(obj, deployapi.DeploymentConfigAnnotation) +} + +func DeploymentNameFor(obj runtime.Object) string { + return annotationFor(obj, deployapi.DeploymentAnnotation) +} + +func DeployerPodNameFor(obj runtime.Object) string { + return annotationFor(obj, deployapi.DeploymentPodAnnotation) +} + +func DeploymentStatusFor(obj runtime.Object) deployapi.DeploymentStatus { + return deployapi.DeploymentStatus(annotationFor(obj, deployapi.DeploymentStatusAnnotation)) +} + +func DeploymentStatusReasonFor(obj runtime.Object) string { + return annotationFor(obj, deployapi.DeploymentStatusReasonAnnotation) +} + +func DeploymentDesiredReplicas(obj runtime.Object) (int32, bool) { + return int32AnnotationFor(obj, deployapi.DesiredReplicasAnnotation) +} + +func DeploymentReplicas(obj runtime.Object) (int32, bool) { + return int32AnnotationFor(obj, deployapi.DeploymentReplicasAnnotation) +} + +func EncodedDeploymentConfigFor(obj runtime.Object) string { + return annotationFor(obj, deployapi.DeploymentEncodedConfigAnnotation) +} + +func DeploymentVersionFor(obj runtime.Object) int64 { + v, err := strconv.ParseInt(annotationFor(obj, deployapi.DeploymentVersionAnnotation), 10, 64) + if err != nil { + return -1 + } + return v +} + +func IsDeploymentCancelled(deployment *api.ReplicationController) bool { + value := annotationFor(deployment, deployapi.DeploymentCancelledAnnotation) + return strings.EqualFold(value, deployapi.DeploymentCancelledAnnotationValue) +} + +func HasSynced(dc *deployapi.DeploymentConfig) bool { + return dc.Status.ObservedGeneration >= dc.Generation +} + +// IsOwnedByConfig checks whether the provided replication controller is part of a +// deployment configuration. +// TODO: Switch to use owner references once we got those working. +func IsOwnedByConfig(deployment *api.ReplicationController) bool { + _, ok := deployment.Annotations[deployapi.DeploymentConfigAnnotation] + return ok +} + +// IsTerminatedDeployment returns true if the passed deployment has terminated (either +// complete or failed). +func IsTerminatedDeployment(deployment *api.ReplicationController) bool { + current := DeploymentStatusFor(deployment) + return current == deployapi.DeploymentStatusComplete || current == deployapi.DeploymentStatusFailed +} + +// IsFailedDeployment returns true if the passed deployment failed. +func IsFailedDeployment(deployment *api.ReplicationController) bool { + current := DeploymentStatusFor(deployment) + return current == deployapi.DeploymentStatusFailed +} + +// CanTransitionPhase returns whether it is allowed to go from the current to the next phase. +func CanTransitionPhase(current, next deployapi.DeploymentStatus) bool { + switch current { + case deployapi.DeploymentStatusNew: + switch next { + case deployapi.DeploymentStatusPending, + deployapi.DeploymentStatusRunning, + deployapi.DeploymentStatusFailed, + deployapi.DeploymentStatusComplete: + return true + } + case deployapi.DeploymentStatusPending: + switch next { + case deployapi.DeploymentStatusRunning, + deployapi.DeploymentStatusFailed, + deployapi.DeploymentStatusComplete: + return true + } + case deployapi.DeploymentStatusRunning: + switch next { + case deployapi.DeploymentStatusFailed, deployapi.DeploymentStatusComplete: + return true + } + } + return false +} + +// annotationFor returns the annotation with key for obj. +func annotationFor(obj runtime.Object, key string) string { + meta, err := api.ObjectMetaFor(obj) + if err != nil { + return "" + } + return meta.Annotations[key] +} + +func int32AnnotationFor(obj runtime.Object, key string) (int32, bool) { + s := annotationFor(obj, key) + if len(s) == 0 { + return 0, false + } + i, err := strconv.ParseInt(s, 10, 32) + if err != nil { + return 0, false + } + return int32(i), true +} + +// DeploymentsForCleanup determines which deployments for a configuration are relevant for the +// revision history limit quota +func DeploymentsForCleanup(configuration *deployapi.DeploymentConfig, deployments []api.ReplicationController) []api.ReplicationController { + // if the past deployment quota has been exceeded, we need to prune the oldest deployments + // until we are not exceeding the quota any longer, so we sort oldest first + sort.Sort(ByLatestVersionAsc(deployments)) + + relevantDeployments := []api.ReplicationController{} + activeDeployment := ActiveDeployment(configuration, deployments) + if activeDeployment == nil { + // if cleanup policy is set but no successful deployments have happened, there will be + // no active deployment. We can consider all of the deployments in this case except for + // the latest one + for i := range deployments { + deployment := &deployments[i] + if DeploymentVersionFor(deployment) != configuration.Status.LatestVersion { + relevantDeployments = append(relevantDeployments, *deployment) + } + } + } else { + // if there is an active deployment, we need to filter out any deployments that we don't + // care about, namely the active deployment and any newer deployments + for i := range deployments { + deployment := &deployments[i] + if deployment != activeDeployment && DeploymentVersionFor(deployment) < DeploymentVersionFor(activeDeployment) { + relevantDeployments = append(relevantDeployments, *deployment) + } + } + } + + return relevantDeployments +} + +// WaitForRunningDeployerPod waits a given period of time until the deployer pod +// for given replication controller is not running. +func WaitForRunningDeployerPod(podClient kclient.PodsNamespacer, rc *api.ReplicationController, timeout time.Duration) error { + podName := DeployerPodNameForDeployment(rc.Name) + canGetLogs := func(p *api.Pod) bool { + return api.PodSucceeded == p.Status.Phase || api.PodFailed == p.Status.Phase || api.PodRunning == p.Status.Phase + } + pod, err := podClient.Pods(rc.Namespace).Get(podName) + if err == nil && canGetLogs(pod) { + return nil + } + watcher, err := podClient.Pods(rc.Namespace).Watch( + api.ListOptions{ + FieldSelector: fields.Set{"metadata.name": podName}.AsSelector(), + }, + ) + if err != nil { + return err + } + + defer watcher.Stop() + if _, err := watch.Until(timeout, watcher, func(e watch.Event) (bool, error) { + if e.Type == watch.Error { + return false, fmt.Errorf("encountered error while watching for pod: %v", e.Object) + } + obj, isPod := e.Object.(*api.Pod) + if !isPod { + return false, errors.New("received unknown object while watching for pods") + } + return canGetLogs(obj), nil + }); err != nil { + return err + } + return nil +} + +// ByLatestVersionAsc sorts deployments by LatestVersion ascending. +type ByLatestVersionAsc []api.ReplicationController + +func (d ByLatestVersionAsc) Len() int { return len(d) } +func (d ByLatestVersionAsc) Swap(i, j int) { d[i], d[j] = d[j], d[i] } +func (d ByLatestVersionAsc) Less(i, j int) bool { + return DeploymentVersionFor(&d[i]) < DeploymentVersionFor(&d[j]) +} + +// ByLatestVersionDesc sorts deployments by LatestVersion descending. +type ByLatestVersionDesc []api.ReplicationController + +func (d ByLatestVersionDesc) Len() int { return len(d) } +func (d ByLatestVersionDesc) Swap(i, j int) { d[i], d[j] = d[j], d[i] } +func (d ByLatestVersionDesc) Less(i, j int) bool { + return DeploymentVersionFor(&d[j]) < DeploymentVersionFor(&d[i]) +} + +// ByMostRecent sorts deployments by most recently created. +type ByMostRecent []*api.ReplicationController + +func (s ByMostRecent) Len() int { return len(s) } +func (s ByMostRecent) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s ByMostRecent) Less(i, j int) bool { + return !s[i].CreationTimestamp.Before(s[j].CreationTimestamp) +} diff --git a/vendor/github.com/openshift/origin/pkg/image/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/image/api/deep_copy_generated.go deleted file mode 100644 index 389a645f..00000000 --- a/vendor/github.com/openshift/origin/pkg/image/api/deep_copy_generated.go +++ /dev/null @@ -1,942 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_Descriptor, - DeepCopy_api_DockerConfig, - DeepCopy_api_DockerConfigHistory, - DeepCopy_api_DockerConfigRootFS, - DeepCopy_api_DockerFSLayer, - DeepCopy_api_DockerHistory, - DeepCopy_api_DockerImage, - DeepCopy_api_DockerImageConfig, - DeepCopy_api_DockerImageManifest, - DeepCopy_api_DockerImageReference, - DeepCopy_api_DockerV1CompatibilityImage, - DeepCopy_api_DockerV1CompatibilityImageSize, - DeepCopy_api_Image, - DeepCopy_api_ImageImportSpec, - DeepCopy_api_ImageImportStatus, - DeepCopy_api_ImageLayer, - DeepCopy_api_ImageList, - DeepCopy_api_ImageSignature, - DeepCopy_api_ImageStream, - DeepCopy_api_ImageStreamImage, - DeepCopy_api_ImageStreamImport, - DeepCopy_api_ImageStreamImportSpec, - DeepCopy_api_ImageStreamImportStatus, - DeepCopy_api_ImageStreamList, - DeepCopy_api_ImageStreamMapping, - DeepCopy_api_ImageStreamSpec, - DeepCopy_api_ImageStreamStatus, - DeepCopy_api_ImageStreamTag, - DeepCopy_api_ImageStreamTagList, - DeepCopy_api_RepositoryImportSpec, - DeepCopy_api_RepositoryImportStatus, - DeepCopy_api_SignatureCondition, - DeepCopy_api_SignatureGenericEntity, - DeepCopy_api_SignatureIssuer, - DeepCopy_api_SignatureSubject, - DeepCopy_api_TagEvent, - DeepCopy_api_TagEventCondition, - DeepCopy_api_TagEventList, - DeepCopy_api_TagImportPolicy, - DeepCopy_api_TagReference, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_Descriptor(in Descriptor, out *Descriptor, c *conversion.Cloner) error { - out.MediaType = in.MediaType - out.Size = in.Size - out.Digest = in.Digest - return nil -} - -func DeepCopy_api_DockerConfig(in DockerConfig, out *DockerConfig, c *conversion.Cloner) error { - out.Hostname = in.Hostname - out.Domainname = in.Domainname - out.User = in.User - out.Memory = in.Memory - out.MemorySwap = in.MemorySwap - out.CPUShares = in.CPUShares - out.CPUSet = in.CPUSet - out.AttachStdin = in.AttachStdin - out.AttachStdout = in.AttachStdout - out.AttachStderr = in.AttachStderr - if in.PortSpecs != nil { - in, out := in.PortSpecs, &out.PortSpecs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.PortSpecs = nil - } - if in.ExposedPorts != nil { - in, out := in.ExposedPorts, &out.ExposedPorts - *out = make(map[string]struct{}) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(struct{}) - } - } - } else { - out.ExposedPorts = nil - } - out.Tty = in.Tty - out.OpenStdin = in.OpenStdin - out.StdinOnce = in.StdinOnce - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Env = nil - } - if in.Cmd != nil { - in, out := in.Cmd, &out.Cmd - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Cmd = nil - } - if in.DNS != nil { - in, out := in.DNS, &out.DNS - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.DNS = nil - } - out.Image = in.Image - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make(map[string]struct{}) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.(struct{}) - } - } - } else { - out.Volumes = nil - } - out.VolumesFrom = in.VolumesFrom - out.WorkingDir = in.WorkingDir - if in.Entrypoint != nil { - in, out := in.Entrypoint, &out.Entrypoint - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Entrypoint = nil - } - out.NetworkDisabled = in.NetworkDisabled - if in.SecurityOpts != nil { - in, out := in.SecurityOpts, &out.SecurityOpts - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.SecurityOpts = nil - } - if in.OnBuild != nil { - in, out := in.OnBuild, &out.OnBuild - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.OnBuild = nil - } - if in.Labels != nil { - in, out := in.Labels, &out.Labels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Labels = nil - } - return nil -} - -func DeepCopy_api_DockerConfigHistory(in DockerConfigHistory, out *DockerConfigHistory, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_Time(in.Created, &out.Created, c); err != nil { - return err - } - out.Author = in.Author - out.CreatedBy = in.CreatedBy - out.Comment = in.Comment - out.EmptyLayer = in.EmptyLayer - return nil -} - -func DeepCopy_api_DockerConfigRootFS(in DockerConfigRootFS, out *DockerConfigRootFS, c *conversion.Cloner) error { - out.Type = in.Type - if in.DiffIDs != nil { - in, out := in.DiffIDs, &out.DiffIDs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.DiffIDs = nil - } - return nil -} - -func DeepCopy_api_DockerFSLayer(in DockerFSLayer, out *DockerFSLayer, c *conversion.Cloner) error { - out.DockerBlobSum = in.DockerBlobSum - return nil -} - -func DeepCopy_api_DockerHistory(in DockerHistory, out *DockerHistory, c *conversion.Cloner) error { - out.DockerV1Compatibility = in.DockerV1Compatibility - return nil -} - -func DeepCopy_api_DockerImage(in DockerImage, out *DockerImage, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.ID = in.ID - out.Parent = in.Parent - out.Comment = in.Comment - if err := unversioned.DeepCopy_unversioned_Time(in.Created, &out.Created, c); err != nil { - return err - } - out.Container = in.Container - if err := DeepCopy_api_DockerConfig(in.ContainerConfig, &out.ContainerConfig, c); err != nil { - return err - } - out.DockerVersion = in.DockerVersion - out.Author = in.Author - if in.Config != nil { - in, out := in.Config, &out.Config - *out = new(DockerConfig) - if err := DeepCopy_api_DockerConfig(*in, *out, c); err != nil { - return err - } - } else { - out.Config = nil - } - out.Architecture = in.Architecture - out.Size = in.Size - return nil -} - -func DeepCopy_api_DockerImageConfig(in DockerImageConfig, out *DockerImageConfig, c *conversion.Cloner) error { - out.ID = in.ID - out.Parent = in.Parent - out.Comment = in.Comment - if err := unversioned.DeepCopy_unversioned_Time(in.Created, &out.Created, c); err != nil { - return err - } - out.Container = in.Container - if err := DeepCopy_api_DockerConfig(in.ContainerConfig, &out.ContainerConfig, c); err != nil { - return err - } - out.DockerVersion = in.DockerVersion - out.Author = in.Author - if in.Config != nil { - in, out := in.Config, &out.Config - *out = new(DockerConfig) - if err := DeepCopy_api_DockerConfig(*in, *out, c); err != nil { - return err - } - } else { - out.Config = nil - } - out.Architecture = in.Architecture - out.Size = in.Size - if in.RootFS != nil { - in, out := in.RootFS, &out.RootFS - *out = new(DockerConfigRootFS) - if err := DeepCopy_api_DockerConfigRootFS(*in, *out, c); err != nil { - return err - } - } else { - out.RootFS = nil - } - if in.History != nil { - in, out := in.History, &out.History - *out = make([]DockerConfigHistory, len(in)) - for i := range in { - if err := DeepCopy_api_DockerConfigHistory(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.History = nil - } - out.OSVersion = in.OSVersion - if in.OSFeatures != nil { - in, out := in.OSFeatures, &out.OSFeatures - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.OSFeatures = nil - } - return nil -} - -func DeepCopy_api_DockerImageManifest(in DockerImageManifest, out *DockerImageManifest, c *conversion.Cloner) error { - out.SchemaVersion = in.SchemaVersion - out.MediaType = in.MediaType - out.Name = in.Name - out.Tag = in.Tag - out.Architecture = in.Architecture - if in.FSLayers != nil { - in, out := in.FSLayers, &out.FSLayers - *out = make([]DockerFSLayer, len(in)) - for i := range in { - if err := DeepCopy_api_DockerFSLayer(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.FSLayers = nil - } - if in.History != nil { - in, out := in.History, &out.History - *out = make([]DockerHistory, len(in)) - for i := range in { - if err := DeepCopy_api_DockerHistory(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.History = nil - } - if in.Layers != nil { - in, out := in.Layers, &out.Layers - *out = make([]Descriptor, len(in)) - for i := range in { - if err := DeepCopy_api_Descriptor(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Layers = nil - } - if err := DeepCopy_api_Descriptor(in.Config, &out.Config, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_DockerImageReference(in DockerImageReference, out *DockerImageReference, c *conversion.Cloner) error { - out.Registry = in.Registry - out.Namespace = in.Namespace - out.Name = in.Name - out.Tag = in.Tag - out.ID = in.ID - return nil -} - -func DeepCopy_api_DockerV1CompatibilityImage(in DockerV1CompatibilityImage, out *DockerV1CompatibilityImage, c *conversion.Cloner) error { - out.ID = in.ID - out.Parent = in.Parent - out.Comment = in.Comment - if err := unversioned.DeepCopy_unversioned_Time(in.Created, &out.Created, c); err != nil { - return err - } - out.Container = in.Container - if err := DeepCopy_api_DockerConfig(in.ContainerConfig, &out.ContainerConfig, c); err != nil { - return err - } - out.DockerVersion = in.DockerVersion - out.Author = in.Author - if in.Config != nil { - in, out := in.Config, &out.Config - *out = new(DockerConfig) - if err := DeepCopy_api_DockerConfig(*in, *out, c); err != nil { - return err - } - } else { - out.Config = nil - } - out.Architecture = in.Architecture - out.Size = in.Size - return nil -} - -func DeepCopy_api_DockerV1CompatibilityImageSize(in DockerV1CompatibilityImageSize, out *DockerV1CompatibilityImageSize, c *conversion.Cloner) error { - out.Size = in.Size - return nil -} - -func DeepCopy_api_Image(in Image, out *Image, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.DockerImageReference = in.DockerImageReference - if err := DeepCopy_api_DockerImage(in.DockerImageMetadata, &out.DockerImageMetadata, c); err != nil { - return err - } - out.DockerImageMetadataVersion = in.DockerImageMetadataVersion - out.DockerImageManifest = in.DockerImageManifest - if in.DockerImageLayers != nil { - in, out := in.DockerImageLayers, &out.DockerImageLayers - *out = make([]ImageLayer, len(in)) - for i := range in { - if err := DeepCopy_api_ImageLayer(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.DockerImageLayers = nil - } - if in.Signatures != nil { - in, out := in.Signatures, &out.Signatures - *out = make([]ImageSignature, len(in)) - for i := range in { - if err := DeepCopy_api_ImageSignature(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Signatures = nil - } - if in.DockerImageSignatures != nil { - in, out := in.DockerImageSignatures, &out.DockerImageSignatures - *out = make([][]byte, len(in)) - for i := range in { - if newVal, err := c.DeepCopy(in[i]); err != nil { - return err - } else { - (*out)[i] = newVal.([]byte) - } - } - } else { - out.DockerImageSignatures = nil - } - out.DockerImageManifestMediaType = in.DockerImageManifestMediaType - out.DockerImageConfig = in.DockerImageConfig - return nil -} - -func DeepCopy_api_ImageImportSpec(in ImageImportSpec, out *ImageImportSpec, c *conversion.Cloner) error { - if err := api.DeepCopy_api_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - if in.To != nil { - in, out := in.To, &out.To - *out = new(api.LocalObjectReference) - if err := api.DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.To = nil - } - if err := DeepCopy_api_TagImportPolicy(in.ImportPolicy, &out.ImportPolicy, c); err != nil { - return err - } - out.IncludeManifest = in.IncludeManifest - return nil -} - -func DeepCopy_api_ImageImportStatus(in ImageImportStatus, out *ImageImportStatus, c *conversion.Cloner) error { - out.Tag = in.Tag - if err := unversioned.DeepCopy_unversioned_Status(in.Status, &out.Status, c); err != nil { - return err - } - if in.Image != nil { - in, out := in.Image, &out.Image - *out = new(Image) - if err := DeepCopy_api_Image(*in, *out, c); err != nil { - return err - } - } else { - out.Image = nil - } - return nil -} - -func DeepCopy_api_ImageLayer(in ImageLayer, out *ImageLayer, c *conversion.Cloner) error { - out.Name = in.Name - out.LayerSize = in.LayerSize - out.MediaType = in.MediaType - return nil -} - -func DeepCopy_api_ImageList(in ImageList, out *ImageList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Image, len(in)) - for i := range in { - if err := DeepCopy_api_Image(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ImageSignature(in ImageSignature, out *ImageSignature, c *conversion.Cloner) error { - out.Type = in.Type - if in.Content != nil { - in, out := in.Content, &out.Content - *out = make([]byte, len(in)) - copy(*out, in) - } else { - out.Content = nil - } - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]SignatureCondition, len(in)) - for i := range in { - if err := DeepCopy_api_SignatureCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - out.ImageIdentity = in.ImageIdentity - if in.SignedClaims != nil { - in, out := in.SignedClaims, &out.SignedClaims - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.SignedClaims = nil - } - if in.Created != nil { - in, out := in.Created, &out.Created - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.Created = nil - } - if in.IssuedBy != nil { - in, out := in.IssuedBy, &out.IssuedBy - *out = new(SignatureIssuer) - if err := DeepCopy_api_SignatureIssuer(*in, *out, c); err != nil { - return err - } - } else { - out.IssuedBy = nil - } - if in.IssuedTo != nil { - in, out := in.IssuedTo, &out.IssuedTo - *out = new(SignatureSubject) - if err := DeepCopy_api_SignatureSubject(*in, *out, c); err != nil { - return err - } - } else { - out.IssuedTo = nil - } - return nil -} - -func DeepCopy_api_ImageStream(in ImageStream, out *ImageStream, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ImageStreamSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_ImageStreamStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ImageStreamImage(in ImageStreamImage, out *ImageStreamImage, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_Image(in.Image, &out.Image, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ImageStreamImport(in ImageStreamImport, out *ImageStreamImport, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ImageStreamImportSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_ImageStreamImportStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ImageStreamImportSpec(in ImageStreamImportSpec, out *ImageStreamImportSpec, c *conversion.Cloner) error { - out.Import = in.Import - if in.Repository != nil { - in, out := in.Repository, &out.Repository - *out = new(RepositoryImportSpec) - if err := DeepCopy_api_RepositoryImportSpec(*in, *out, c); err != nil { - return err - } - } else { - out.Repository = nil - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ImageImportSpec, len(in)) - for i := range in { - if err := DeepCopy_api_ImageImportSpec(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - return nil -} - -func DeepCopy_api_ImageStreamImportStatus(in ImageStreamImportStatus, out *ImageStreamImportStatus, c *conversion.Cloner) error { - if in.Import != nil { - in, out := in.Import, &out.Import - *out = new(ImageStream) - if err := DeepCopy_api_ImageStream(*in, *out, c); err != nil { - return err - } - } else { - out.Import = nil - } - if in.Repository != nil { - in, out := in.Repository, &out.Repository - *out = new(RepositoryImportStatus) - if err := DeepCopy_api_RepositoryImportStatus(*in, *out, c); err != nil { - return err - } - } else { - out.Repository = nil - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ImageImportStatus, len(in)) - for i := range in { - if err := DeepCopy_api_ImageImportStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - return nil -} - -func DeepCopy_api_ImageStreamList(in ImageStreamList, out *ImageStreamList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ImageStream, len(in)) - for i := range in { - if err := DeepCopy_api_ImageStream(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ImageStreamMapping(in ImageStreamMapping, out *ImageStreamMapping, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.DockerImageRepository = in.DockerImageRepository - if err := DeepCopy_api_Image(in.Image, &out.Image, c); err != nil { - return err - } - out.Tag = in.Tag - return nil -} - -func DeepCopy_api_ImageStreamSpec(in ImageStreamSpec, out *ImageStreamSpec, c *conversion.Cloner) error { - out.DockerImageRepository = in.DockerImageRepository - if in.Tags != nil { - in, out := in.Tags, &out.Tags - *out = make(map[string]TagReference) - for key, val := range in { - newVal := new(TagReference) - if err := DeepCopy_api_TagReference(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Tags = nil - } - return nil -} - -func DeepCopy_api_ImageStreamStatus(in ImageStreamStatus, out *ImageStreamStatus, c *conversion.Cloner) error { - out.DockerImageRepository = in.DockerImageRepository - if in.Tags != nil { - in, out := in.Tags, &out.Tags - *out = make(map[string]TagEventList) - for key, val := range in { - newVal := new(TagEventList) - if err := DeepCopy_api_TagEventList(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Tags = nil - } - return nil -} - -func DeepCopy_api_ImageStreamTag(in ImageStreamTag, out *ImageStreamTag, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Tag != nil { - in, out := in.Tag, &out.Tag - *out = new(TagReference) - if err := DeepCopy_api_TagReference(*in, *out, c); err != nil { - return err - } - } else { - out.Tag = nil - } - out.Generation = in.Generation - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]TagEventCondition, len(in)) - for i := range in { - if err := DeepCopy_api_TagEventCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if err := DeepCopy_api_Image(in.Image, &out.Image, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ImageStreamTagList(in ImageStreamTagList, out *ImageStreamTagList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ImageStreamTag, len(in)) - for i := range in { - if err := DeepCopy_api_ImageStreamTag(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_RepositoryImportSpec(in RepositoryImportSpec, out *RepositoryImportSpec, c *conversion.Cloner) error { - if err := api.DeepCopy_api_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - if err := DeepCopy_api_TagImportPolicy(in.ImportPolicy, &out.ImportPolicy, c); err != nil { - return err - } - out.IncludeManifest = in.IncludeManifest - return nil -} - -func DeepCopy_api_RepositoryImportStatus(in RepositoryImportStatus, out *RepositoryImportStatus, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_Status(in.Status, &out.Status, c); err != nil { - return err - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ImageImportStatus, len(in)) - for i := range in { - if err := DeepCopy_api_ImageImportStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - if in.AdditionalTags != nil { - in, out := in.AdditionalTags, &out.AdditionalTags - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.AdditionalTags = nil - } - return nil -} - -func DeepCopy_api_SignatureCondition(in SignatureCondition, out *SignatureCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_api_SignatureGenericEntity(in SignatureGenericEntity, out *SignatureGenericEntity, c *conversion.Cloner) error { - out.Organization = in.Organization - out.CommonName = in.CommonName - return nil -} - -func DeepCopy_api_SignatureIssuer(in SignatureIssuer, out *SignatureIssuer, c *conversion.Cloner) error { - if err := DeepCopy_api_SignatureGenericEntity(in.SignatureGenericEntity, &out.SignatureGenericEntity, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_SignatureSubject(in SignatureSubject, out *SignatureSubject, c *conversion.Cloner) error { - if err := DeepCopy_api_SignatureGenericEntity(in.SignatureGenericEntity, &out.SignatureGenericEntity, c); err != nil { - return err - } - out.PublicKeyID = in.PublicKeyID - return nil -} - -func DeepCopy_api_TagEvent(in TagEvent, out *TagEvent, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_Time(in.Created, &out.Created, c); err != nil { - return err - } - out.DockerImageReference = in.DockerImageReference - out.Image = in.Image - out.Generation = in.Generation - return nil -} - -func DeepCopy_api_TagEventCondition(in TagEventCondition, out *TagEventCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - out.Generation = in.Generation - return nil -} - -func DeepCopy_api_TagEventList(in TagEventList, out *TagEventList, c *conversion.Cloner) error { - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]TagEvent, len(in)) - for i := range in { - if err := DeepCopy_api_TagEvent(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]TagEventCondition, len(in)) - for i := range in { - if err := DeepCopy_api_TagEventCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - return nil -} - -func DeepCopy_api_TagImportPolicy(in TagImportPolicy, out *TagImportPolicy, c *conversion.Cloner) error { - out.Insecure = in.Insecure - out.Scheduled = in.Scheduled - return nil -} - -func DeepCopy_api_TagReference(in TagReference, out *TagReference, c *conversion.Cloner) error { - out.Name = in.Name - if in.Annotations != nil { - in, out := in.Annotations, &out.Annotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Annotations = nil - } - if in.From != nil { - in, out := in.From, &out.From - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.From = nil - } - out.Reference = in.Reference - if in.Generation != nil { - in, out := in.Generation, &out.Generation - *out = new(int64) - **out = *in - } else { - out.Generation = nil - } - if err := DeepCopy_api_TagImportPolicy(in.ImportPolicy, &out.ImportPolicy, c); err != nil { - return err - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/image/api/doc.go b/vendor/github.com/openshift/origin/pkg/image/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/image/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/image/api/docker10/register.go b/vendor/github.com/openshift/origin/pkg/image/api/docker10/register.go index b595b70a..8570daeb 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/docker10/register.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/docker10/register.go @@ -10,15 +10,17 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "1.0"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &DockerImage{}, ) + return nil } func (obj *DockerImage) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/dockerpre012/conversion.go b/vendor/github.com/openshift/origin/pkg/image/api/dockerpre012/conversion.go index 3ebf0f2b..d99af581 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/dockerpre012/conversion.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/dockerpre012/conversion.go @@ -48,13 +48,9 @@ func Convert_api_DockerImage_to_dockerpre012_ImagePre_012(in *newer.DockerImage, return nil } -func addConversionFuncs(scheme *runtime.Scheme) { - err := scheme.AddConversionFuncs( +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddConversionFuncs( Convert_dockerpre012_ImagePre_012_to_api_DockerImage, Convert_api_DockerImage_to_dockerpre012_ImagePre_012, ) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/dockerpre012/register.go b/vendor/github.com/openshift/origin/pkg/image/api/dockerpre012/register.go index 28c6a228..8fa62d8a 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/dockerpre012/register.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/dockerpre012/register.go @@ -10,16 +10,17 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "pre012"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &DockerImage{}, ) + return nil } func (obj *DockerImage) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/helper.go b/vendor/github.com/openshift/origin/pkg/image/api/helper.go index 657ce483..60338f5b 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/helper.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/helper.go @@ -1,6 +1,7 @@ package api import ( + "bytes" "encoding/json" "fmt" "net/url" @@ -183,6 +184,7 @@ func ParseDockerImageReference(spec string) (DockerImageReference, error) { ref.ID = id break default: + // TODO: this is no longer true with V2 return ref, fmt.Errorf("the docker pull spec %q must be two or three segments separated by slashes", spec) } @@ -434,14 +436,14 @@ func ImageConfigMatchesImage(image *Image, imageConfig []byte) (bool, error) { return v.Verified(), nil } -// ImageWithMetadata returns a copy of image with the DockerImageMetadata filled in -// from the raw DockerImageManifest data stored in the image. +// ImageWithMetadata mutates the given image. It parses raw DockerImageManifest data stored in the image and +// fills its DockerImageMetadata and other fields. func ImageWithMetadata(image *Image) error { if len(image.DockerImageManifest) == 0 { return nil } - if len(image.DockerImageLayers) > 0 && image.DockerImageMetadata.Size > 0 { + if len(image.DockerImageLayers) > 0 && image.DockerImageMetadata.Size > 0 && len(image.DockerImageManifestMediaType) > 0 { glog.V(5).Infof("Image metadata already filled for %s", image.Name) // don't update image already filled return nil @@ -458,6 +460,8 @@ func ImageWithMetadata(image *Image) error { case 0: // legacy config object case 1: + image.DockerImageManifestMediaType = schema1.MediaTypeManifest + if len(manifest.History) == 0 { // should never have an empty history, but just in case... return nil @@ -518,6 +522,8 @@ func ImageWithMetadata(image *Image) error { image.DockerImageMetadata.Size = v1Metadata.Size } case 2: + image.DockerImageManifestMediaType = schema2.MediaTypeManifest + config := DockerImageConfig{} if err := json.Unmarshal([]byte(image.DockerImageConfig), &config); err != nil { return err @@ -546,8 +552,8 @@ func ImageWithMetadata(image *Image) error { image.DockerImageMetadata.Architecture = config.Architecture image.DockerImageMetadata.Size = int64(len(image.DockerImageConfig)) + layerSet := sets.NewString(image.DockerImageMetadata.ID) if len(image.DockerImageLayers) > 0 { - layerSet := sets.NewString() for _, layer := range image.DockerImageLayers { if layerSet.Has(layer.Name) { continue @@ -555,8 +561,6 @@ func ImageWithMetadata(image *Image) error { layerSet.Insert(layer.Name) image.DockerImageMetadata.Size += layer.LayerSize } - } else { - image.DockerImageMetadata.Size += config.Size } default: return fmt.Errorf("unrecognized Docker image manifest schema %d for %q (%s)", manifest.SchemaVersion, image.Name, image.DockerImageReference) @@ -639,6 +643,20 @@ func DifferentTagEvent(stream *ImageStream, tag string, next TagEvent) bool { return !(sameRef && sameImage) } +// DifferentTagEvent compares the generation on tag's spec vs its status. +// Returns if spec generation is newer than status one. +func DifferentTagGeneration(stream *ImageStream, tag string) bool { + specTag, ok := stream.Spec.Tags[tag] + if !ok || specTag.Generation == nil { + return true + } + statusTag, ok := stream.Status.Tags[tag] + if !ok || len(statusTag.Items) == 0 { + return true + } + return *specTag.Generation > statusTag.Items[0].Generation +} + // AddTagEventToImageStream attempts to update the given image stream with a tag event. It will // collapse duplicate entries - returning true if a change was made or false if no change // occurred. Any successful tag resets the status field. @@ -1003,3 +1021,55 @@ func SetContainerImageEntrypointAnnotation(annotations map[string]string, contai func LabelForStream(stream *ImageStream) string { return fmt.Sprintf("%s/%s", stream.Namespace, stream.Name) } + +// JoinImageSignatureName joins image name and custom signature name into one string with @ separator. +func JoinImageSignatureName(imageName, signatureName string) (string, error) { + if len(imageName) == 0 { + return "", fmt.Errorf("imageName may not be empty") + } + if len(signatureName) == 0 { + return "", fmt.Errorf("signatureName may not be empty") + } + if strings.Count(imageName, "@") > 0 || strings.Count(signatureName, "@") > 0 { + return "", fmt.Errorf("neither imageName nor signatureName can contain '@'") + } + return fmt.Sprintf("%s@%s", imageName, signatureName), nil +} + +// SplitImageSignatureName splits given signature name into image name and signature name. +func SplitImageSignatureName(imageSignatureName string) (imageName, signatureName string, err error) { + segments := strings.Split(imageSignatureName, "@") + switch len(segments) { + case 2: + signatureName = segments[1] + imageName = segments[0] + if len(imageName) == 0 || len(signatureName) == 0 { + err = fmt.Errorf("image signature name %q must have an image name and signature name", imageSignatureName) + } + default: + err = fmt.Errorf("expected exactly one @ in the image signature name %q", imageSignatureName) + } + return +} + +// IndexOfImageSignatureByName returns an index of signature identified by name in the image if present. It +// returns -1 otherwise. +func IndexOfImageSignatureByName(signatures []ImageSignature, name string) int { + for i := range signatures { + if signatures[i].Name == name { + return i + } + } + return -1 +} + +// IndexOfImageSignature returns index of signature identified by type and blob in the image if present. It +// returns -1 otherwise. +func IndexOfImageSignature(signatures []ImageSignature, sType string, sContent []byte) int { + for i := range signatures { + if signatures[i].Type == sType && bytes.Equal(signatures[i].Content, sContent) { + return i + } + } + return -1 +} diff --git a/vendor/github.com/openshift/origin/pkg/image/api/install/install.go b/vendor/github.com/openshift/origin/pkg/image/api/install/install.go index e6ea5ad7..0a79f3c5 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/install/install.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/install/install.go @@ -95,7 +95,7 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper { - rootScoped := sets.NewString("Image") + rootScoped := sets.NewString("Image", "ImageSignature") ignoredKinds := sets.NewString() return kapi.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped) } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/register.go b/vendor/github.com/openshift/origin/pkg/image/api/register.go index 019b293c..717cd5bb 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "image.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,17 +21,18 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Image{}, &ImageList{}, &DockerImage{}, + &ImageSignature{}, &ImageStream{}, &ImageStreamList{}, &ImageStreamMapping{}, @@ -39,11 +41,13 @@ func addKnownTypes(scheme *runtime.Scheme) { &ImageStreamImage{}, &ImageStreamImport{}, ) + return nil } func (obj *Image) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *ImageList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *DockerImage) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *ImageSignature) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *ImageStream) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *ImageStreamList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *ImageStreamMapping) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/types.go b/vendor/github.com/openshift/origin/pkg/image/api/types.go index fa02f6ac..010e6a9b 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/types.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/types.go @@ -96,10 +96,12 @@ const ( // ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims // as long as the signature is trusted. Based on this information it is possible to restrict runnable images // to those matching cluster-wide policy. -// There are two mandatory fields provided by client: Type and Content. They should be parsed by clients doing -// image verification. The others are parsed from signature's content by the server. They serve just an -// informative purpose. +// Mandatory fields should be parsed by clients doing image verification. The others are parsed from +// signature's content by the server. They serve just an informative purpose. type ImageSignature struct { + unversioned.TypeMeta + kapi.ObjectMeta + // Required: Describes a type of stored blob. Type string // Required: An opaque binary string which is an image's signature. @@ -144,7 +146,7 @@ type SignatureConditionType string // SignatureCondition describes an image signature condition of particular kind at particular probe time. type SignatureCondition struct { - // Type of job condition, Complete or Failed. + // Type of signature condition, Complete or Failed. Type SignatureConditionType // Status of the condition, one of True, False, Unknown. Status kapi.ConditionStatus @@ -306,6 +308,7 @@ type ImageStreamMapping struct { // The Docker image repository the specified image is located in // DEPRECATED: remove once v1beta1 support is dropped + // +k8s:conversion-gen=false DockerImageRepository string // A Docker image. Image Image diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/conversion.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/conversion.go index 94d92306..557c9def 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/conversion.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/conversion.go @@ -209,7 +209,7 @@ func Convert_api_TagEventListArray_to_v1_NamedTagEventListArray(in *map[string]n for key := range *in { allKeys = append(allKeys, key) } - sort.Strings(allKeys) + newer.PrioritizeTags(allKeys) for _, key := range allKeys { newTagEventList := (*in)[key] @@ -255,7 +255,7 @@ func Convert_api_TagReferenceMap_to_v1_TagReferenceArray(in *map[string]newer.Ta return nil } -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { err := scheme.AddConversionFuncs( Convert_v1_NamedTagEventListArray_to_api_TagEventListArray, Convert_api_TagEventListArray_to_v1_NamedTagEventListArray, @@ -273,18 +273,19 @@ func addConversionFuncs(scheme *runtime.Scheme) { ) if err != nil { // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } if err := scheme.AddFieldLabelConversionFunc("v1", "Image", oapi.GetFieldLabelConversionFunc(newer.ImageToSelectableFields(&newer.Image{}), nil), ); err != nil { - panic(err) + return err } if err := scheme.AddFieldLabelConversionFunc("v1", "ImageStream", oapi.GetFieldLabelConversionFunc(newer.ImageStreamToSelectableFields(&newer.ImageStream{}), map[string]string{"name": "metadata.name"}), ); err != nil { - panic(err) + return err } + return nil } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/deep_copy_generated.go deleted file mode 100644 index b61c4f3e..00000000 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/deep_copy_generated.go +++ /dev/null @@ -1,622 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - api_v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" - runtime "k8s.io/kubernetes/pkg/runtime" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1_DockerImageReference, - DeepCopy_v1_Image, - DeepCopy_v1_ImageImportSpec, - DeepCopy_v1_ImageImportStatus, - DeepCopy_v1_ImageLayer, - DeepCopy_v1_ImageList, - DeepCopy_v1_ImageSignature, - DeepCopy_v1_ImageStream, - DeepCopy_v1_ImageStreamImage, - DeepCopy_v1_ImageStreamImport, - DeepCopy_v1_ImageStreamImportSpec, - DeepCopy_v1_ImageStreamImportStatus, - DeepCopy_v1_ImageStreamList, - DeepCopy_v1_ImageStreamMapping, - DeepCopy_v1_ImageStreamSpec, - DeepCopy_v1_ImageStreamStatus, - DeepCopy_v1_ImageStreamTag, - DeepCopy_v1_ImageStreamTagList, - DeepCopy_v1_NamedTagEventList, - DeepCopy_v1_RepositoryImportSpec, - DeepCopy_v1_RepositoryImportStatus, - DeepCopy_v1_SignatureCondition, - DeepCopy_v1_SignatureGenericEntity, - DeepCopy_v1_SignatureIssuer, - DeepCopy_v1_SignatureSubject, - DeepCopy_v1_TagEvent, - DeepCopy_v1_TagEventCondition, - DeepCopy_v1_TagImportPolicy, - DeepCopy_v1_TagReference, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1_DockerImageReference(in DockerImageReference, out *DockerImageReference, c *conversion.Cloner) error { - out.Registry = in.Registry - out.Namespace = in.Namespace - out.Name = in.Name - out.Tag = in.Tag - out.ID = in.ID - return nil -} - -func DeepCopy_v1_Image(in Image, out *Image, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.DockerImageReference = in.DockerImageReference - if err := runtime.DeepCopy_runtime_RawExtension(in.DockerImageMetadata, &out.DockerImageMetadata, c); err != nil { - return err - } - out.DockerImageMetadataVersion = in.DockerImageMetadataVersion - out.DockerImageManifest = in.DockerImageManifest - if in.DockerImageLayers != nil { - in, out := in.DockerImageLayers, &out.DockerImageLayers - *out = make([]ImageLayer, len(in)) - for i := range in { - if err := DeepCopy_v1_ImageLayer(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.DockerImageLayers = nil - } - if in.Signatures != nil { - in, out := in.Signatures, &out.Signatures - *out = make([]ImageSignature, len(in)) - for i := range in { - if err := DeepCopy_v1_ImageSignature(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Signatures = nil - } - if in.DockerImageSignatures != nil { - in, out := in.DockerImageSignatures, &out.DockerImageSignatures - *out = make([][]byte, len(in)) - for i := range in { - if newVal, err := c.DeepCopy(in[i]); err != nil { - return err - } else { - (*out)[i] = newVal.([]byte) - } - } - } else { - out.DockerImageSignatures = nil - } - out.DockerImageManifestMediaType = in.DockerImageManifestMediaType - out.DockerImageConfig = in.DockerImageConfig - return nil -} - -func DeepCopy_v1_ImageImportSpec(in ImageImportSpec, out *ImageImportSpec, c *conversion.Cloner) error { - if err := api_v1.DeepCopy_v1_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - if in.To != nil { - in, out := in.To, &out.To - *out = new(api_v1.LocalObjectReference) - if err := api_v1.DeepCopy_v1_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.To = nil - } - if err := DeepCopy_v1_TagImportPolicy(in.ImportPolicy, &out.ImportPolicy, c); err != nil { - return err - } - out.IncludeManifest = in.IncludeManifest - return nil -} - -func DeepCopy_v1_ImageImportStatus(in ImageImportStatus, out *ImageImportStatus, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_Status(in.Status, &out.Status, c); err != nil { - return err - } - if in.Image != nil { - in, out := in.Image, &out.Image - *out = new(Image) - if err := DeepCopy_v1_Image(*in, *out, c); err != nil { - return err - } - } else { - out.Image = nil - } - out.Tag = in.Tag - return nil -} - -func DeepCopy_v1_ImageLayer(in ImageLayer, out *ImageLayer, c *conversion.Cloner) error { - out.Name = in.Name - out.LayerSize = in.LayerSize - out.MediaType = in.MediaType - return nil -} - -func DeepCopy_v1_ImageList(in ImageList, out *ImageList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Image, len(in)) - for i := range in { - if err := DeepCopy_v1_Image(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ImageSignature(in ImageSignature, out *ImageSignature, c *conversion.Cloner) error { - out.Type = in.Type - if in.Content != nil { - in, out := in.Content, &out.Content - *out = make([]byte, len(in)) - copy(*out, in) - } else { - out.Content = nil - } - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]SignatureCondition, len(in)) - for i := range in { - if err := DeepCopy_v1_SignatureCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - out.ImageIdentity = in.ImageIdentity - if in.SignedClaims != nil { - in, out := in.SignedClaims, &out.SignedClaims - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.SignedClaims = nil - } - if in.Created != nil { - in, out := in.Created, &out.Created - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.Created = nil - } - if in.IssuedBy != nil { - in, out := in.IssuedBy, &out.IssuedBy - *out = new(SignatureIssuer) - if err := DeepCopy_v1_SignatureIssuer(*in, *out, c); err != nil { - return err - } - } else { - out.IssuedBy = nil - } - if in.IssuedTo != nil { - in, out := in.IssuedTo, &out.IssuedTo - *out = new(SignatureSubject) - if err := DeepCopy_v1_SignatureSubject(*in, *out, c); err != nil { - return err - } - } else { - out.IssuedTo = nil - } - return nil -} - -func DeepCopy_v1_ImageStream(in ImageStream, out *ImageStream, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ImageStreamSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_ImageStreamStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ImageStreamImage(in ImageStreamImage, out *ImageStreamImage, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_Image(in.Image, &out.Image, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ImageStreamImport(in ImageStreamImport, out *ImageStreamImport, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ImageStreamImportSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_ImageStreamImportStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ImageStreamImportSpec(in ImageStreamImportSpec, out *ImageStreamImportSpec, c *conversion.Cloner) error { - out.Import = in.Import - if in.Repository != nil { - in, out := in.Repository, &out.Repository - *out = new(RepositoryImportSpec) - if err := DeepCopy_v1_RepositoryImportSpec(*in, *out, c); err != nil { - return err - } - } else { - out.Repository = nil - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ImageImportSpec, len(in)) - for i := range in { - if err := DeepCopy_v1_ImageImportSpec(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - return nil -} - -func DeepCopy_v1_ImageStreamImportStatus(in ImageStreamImportStatus, out *ImageStreamImportStatus, c *conversion.Cloner) error { - if in.Import != nil { - in, out := in.Import, &out.Import - *out = new(ImageStream) - if err := DeepCopy_v1_ImageStream(*in, *out, c); err != nil { - return err - } - } else { - out.Import = nil - } - if in.Repository != nil { - in, out := in.Repository, &out.Repository - *out = new(RepositoryImportStatus) - if err := DeepCopy_v1_RepositoryImportStatus(*in, *out, c); err != nil { - return err - } - } else { - out.Repository = nil - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ImageImportStatus, len(in)) - for i := range in { - if err := DeepCopy_v1_ImageImportStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - return nil -} - -func DeepCopy_v1_ImageStreamList(in ImageStreamList, out *ImageStreamList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ImageStream, len(in)) - for i := range in { - if err := DeepCopy_v1_ImageStream(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ImageStreamMapping(in ImageStreamMapping, out *ImageStreamMapping, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_Image(in.Image, &out.Image, c); err != nil { - return err - } - out.Tag = in.Tag - return nil -} - -func DeepCopy_v1_ImageStreamSpec(in ImageStreamSpec, out *ImageStreamSpec, c *conversion.Cloner) error { - out.DockerImageRepository = in.DockerImageRepository - if in.Tags != nil { - in, out := in.Tags, &out.Tags - *out = make([]TagReference, len(in)) - for i := range in { - if err := DeepCopy_v1_TagReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Tags = nil - } - return nil -} - -func DeepCopy_v1_ImageStreamStatus(in ImageStreamStatus, out *ImageStreamStatus, c *conversion.Cloner) error { - out.DockerImageRepository = in.DockerImageRepository - if in.Tags != nil { - in, out := in.Tags, &out.Tags - *out = make([]NamedTagEventList, len(in)) - for i := range in { - if err := DeepCopy_v1_NamedTagEventList(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Tags = nil - } - return nil -} - -func DeepCopy_v1_ImageStreamTag(in ImageStreamTag, out *ImageStreamTag, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Tag != nil { - in, out := in.Tag, &out.Tag - *out = new(TagReference) - if err := DeepCopy_v1_TagReference(*in, *out, c); err != nil { - return err - } - } else { - out.Tag = nil - } - out.Generation = in.Generation - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]TagEventCondition, len(in)) - for i := range in { - if err := DeepCopy_v1_TagEventCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if err := DeepCopy_v1_Image(in.Image, &out.Image, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ImageStreamTagList(in ImageStreamTagList, out *ImageStreamTagList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ImageStreamTag, len(in)) - for i := range in { - if err := DeepCopy_v1_ImageStreamTag(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_NamedTagEventList(in NamedTagEventList, out *NamedTagEventList, c *conversion.Cloner) error { - out.Tag = in.Tag - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]TagEvent, len(in)) - for i := range in { - if err := DeepCopy_v1_TagEvent(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]TagEventCondition, len(in)) - for i := range in { - if err := DeepCopy_v1_TagEventCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - return nil -} - -func DeepCopy_v1_RepositoryImportSpec(in RepositoryImportSpec, out *RepositoryImportSpec, c *conversion.Cloner) error { - if err := api_v1.DeepCopy_v1_ObjectReference(in.From, &out.From, c); err != nil { - return err - } - if err := DeepCopy_v1_TagImportPolicy(in.ImportPolicy, &out.ImportPolicy, c); err != nil { - return err - } - out.IncludeManifest = in.IncludeManifest - return nil -} - -func DeepCopy_v1_RepositoryImportStatus(in RepositoryImportStatus, out *RepositoryImportStatus, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_Status(in.Status, &out.Status, c); err != nil { - return err - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ImageImportStatus, len(in)) - for i := range in { - if err := DeepCopy_v1_ImageImportStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - if in.AdditionalTags != nil { - in, out := in.AdditionalTags, &out.AdditionalTags - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.AdditionalTags = nil - } - return nil -} - -func DeepCopy_v1_SignatureCondition(in SignatureCondition, out *SignatureCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_v1_SignatureGenericEntity(in SignatureGenericEntity, out *SignatureGenericEntity, c *conversion.Cloner) error { - out.Organization = in.Organization - out.CommonName = in.CommonName - return nil -} - -func DeepCopy_v1_SignatureIssuer(in SignatureIssuer, out *SignatureIssuer, c *conversion.Cloner) error { - if err := DeepCopy_v1_SignatureGenericEntity(in.SignatureGenericEntity, &out.SignatureGenericEntity, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_SignatureSubject(in SignatureSubject, out *SignatureSubject, c *conversion.Cloner) error { - if err := DeepCopy_v1_SignatureGenericEntity(in.SignatureGenericEntity, &out.SignatureGenericEntity, c); err != nil { - return err - } - out.PublicKeyID = in.PublicKeyID - return nil -} - -func DeepCopy_v1_TagEvent(in TagEvent, out *TagEvent, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_Time(in.Created, &out.Created, c); err != nil { - return err - } - out.DockerImageReference = in.DockerImageReference - out.Image = in.Image - out.Generation = in.Generation - return nil -} - -func DeepCopy_v1_TagEventCondition(in TagEventCondition, out *TagEventCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - out.Generation = in.Generation - return nil -} - -func DeepCopy_v1_TagImportPolicy(in TagImportPolicy, out *TagImportPolicy, c *conversion.Cloner) error { - out.Insecure = in.Insecure - out.Scheduled = in.Scheduled - return nil -} - -func DeepCopy_v1_TagReference(in TagReference, out *TagReference, c *conversion.Cloner) error { - out.Name = in.Name - if in.Annotations != nil { - in, out := in.Annotations, &out.Annotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Annotations = nil - } - if in.From != nil { - in, out := in.From, &out.From - *out = new(api_v1.ObjectReference) - if err := api_v1.DeepCopy_v1_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.From = nil - } - out.Reference = in.Reference - if in.Generation != nil { - in, out := in.Generation, &out.Generation - *out = new(int64) - **out = *in - } else { - out.Generation = nil - } - if err := DeepCopy_v1_TagImportPolicy(in.ImportPolicy, &out.ImportPolicy, c); err != nil { - return err - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/defaults.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/defaults.go index ef92bffa..ae2d1f45 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/defaults.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/defaults.go @@ -16,11 +16,8 @@ func SetDefaults_ImageImportSpec(obj *ImageImportSpec) { } } -func addDefaultingFuncs(scheme *runtime.Scheme) { - err := scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_ImageImportSpec, ) - if err != nil { - panic(err) - } } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/doc.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/doc.go index e887205c..fb1f86ef 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/doc.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/doc.go @@ -1,3 +1,5 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=github.com/openshift/origin/pkg/image/api + // Package v1 is the v1 version of the API. -// +genconversion=true package v1 diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/generated.pb.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/generated.pb.go index 3bc8f101..d30bcd21 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/generated.pb.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/generated.pb.go @@ -48,6 +48,10 @@ import math "math" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -55,121 +59,127 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *DockerImageReference) Reset() { *m = DockerImageReference{} } -func (m *DockerImageReference) String() string { return proto.CompactTextString(m) } -func (*DockerImageReference) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *Image) Reset() { *m = Image{} } -func (m *Image) String() string { return proto.CompactTextString(m) } -func (*Image) ProtoMessage() {} +func (m *DockerImageReference) Reset() { *m = DockerImageReference{} } +func (*DockerImageReference) ProtoMessage() {} +func (*DockerImageReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *ImageImportSpec) Reset() { *m = ImageImportSpec{} } -func (m *ImageImportSpec) String() string { return proto.CompactTextString(m) } -func (*ImageImportSpec) ProtoMessage() {} +func (m *Image) Reset() { *m = Image{} } +func (*Image) ProtoMessage() {} +func (*Image) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *ImageImportStatus) Reset() { *m = ImageImportStatus{} } -func (m *ImageImportStatus) String() string { return proto.CompactTextString(m) } -func (*ImageImportStatus) ProtoMessage() {} +func (m *ImageImportSpec) Reset() { *m = ImageImportSpec{} } +func (*ImageImportSpec) ProtoMessage() {} +func (*ImageImportSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } -func (m *ImageLayer) Reset() { *m = ImageLayer{} } -func (m *ImageLayer) String() string { return proto.CompactTextString(m) } -func (*ImageLayer) ProtoMessage() {} +func (m *ImageImportStatus) Reset() { *m = ImageImportStatus{} } +func (*ImageImportStatus) ProtoMessage() {} +func (*ImageImportStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } -func (m *ImageList) Reset() { *m = ImageList{} } -func (m *ImageList) String() string { return proto.CompactTextString(m) } -func (*ImageList) ProtoMessage() {} +func (m *ImageLayer) Reset() { *m = ImageLayer{} } +func (*ImageLayer) ProtoMessage() {} +func (*ImageLayer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } -func (m *ImageSignature) Reset() { *m = ImageSignature{} } -func (m *ImageSignature) String() string { return proto.CompactTextString(m) } -func (*ImageSignature) ProtoMessage() {} +func (m *ImageList) Reset() { *m = ImageList{} } +func (*ImageList) ProtoMessage() {} +func (*ImageList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } -func (m *ImageStream) Reset() { *m = ImageStream{} } -func (m *ImageStream) String() string { return proto.CompactTextString(m) } -func (*ImageStream) ProtoMessage() {} +func (m *ImageSignature) Reset() { *m = ImageSignature{} } +func (*ImageSignature) ProtoMessage() {} +func (*ImageSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } -func (m *ImageStreamImage) Reset() { *m = ImageStreamImage{} } -func (m *ImageStreamImage) String() string { return proto.CompactTextString(m) } -func (*ImageStreamImage) ProtoMessage() {} +func (m *ImageStream) Reset() { *m = ImageStream{} } +func (*ImageStream) ProtoMessage() {} +func (*ImageStream) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } -func (m *ImageStreamImport) Reset() { *m = ImageStreamImport{} } -func (m *ImageStreamImport) String() string { return proto.CompactTextString(m) } -func (*ImageStreamImport) ProtoMessage() {} +func (m *ImageStreamImage) Reset() { *m = ImageStreamImage{} } +func (*ImageStreamImage) ProtoMessage() {} +func (*ImageStreamImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } -func (m *ImageStreamImportSpec) Reset() { *m = ImageStreamImportSpec{} } -func (m *ImageStreamImportSpec) String() string { return proto.CompactTextString(m) } -func (*ImageStreamImportSpec) ProtoMessage() {} +func (m *ImageStreamImport) Reset() { *m = ImageStreamImport{} } +func (*ImageStreamImport) ProtoMessage() {} +func (*ImageStreamImport) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } -func (m *ImageStreamImportStatus) Reset() { *m = ImageStreamImportStatus{} } -func (m *ImageStreamImportStatus) String() string { return proto.CompactTextString(m) } -func (*ImageStreamImportStatus) ProtoMessage() {} +func (m *ImageStreamImportSpec) Reset() { *m = ImageStreamImportSpec{} } +func (*ImageStreamImportSpec) ProtoMessage() {} +func (*ImageStreamImportSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } -func (m *ImageStreamList) Reset() { *m = ImageStreamList{} } -func (m *ImageStreamList) String() string { return proto.CompactTextString(m) } -func (*ImageStreamList) ProtoMessage() {} +func (m *ImageStreamImportStatus) Reset() { *m = ImageStreamImportStatus{} } +func (*ImageStreamImportStatus) ProtoMessage() {} +func (*ImageStreamImportStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{11} +} -func (m *ImageStreamMapping) Reset() { *m = ImageStreamMapping{} } -func (m *ImageStreamMapping) String() string { return proto.CompactTextString(m) } -func (*ImageStreamMapping) ProtoMessage() {} +func (m *ImageStreamList) Reset() { *m = ImageStreamList{} } +func (*ImageStreamList) ProtoMessage() {} +func (*ImageStreamList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } -func (m *ImageStreamSpec) Reset() { *m = ImageStreamSpec{} } -func (m *ImageStreamSpec) String() string { return proto.CompactTextString(m) } -func (*ImageStreamSpec) ProtoMessage() {} +func (m *ImageStreamMapping) Reset() { *m = ImageStreamMapping{} } +func (*ImageStreamMapping) ProtoMessage() {} +func (*ImageStreamMapping) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } -func (m *ImageStreamStatus) Reset() { *m = ImageStreamStatus{} } -func (m *ImageStreamStatus) String() string { return proto.CompactTextString(m) } -func (*ImageStreamStatus) ProtoMessage() {} +func (m *ImageStreamSpec) Reset() { *m = ImageStreamSpec{} } +func (*ImageStreamSpec) ProtoMessage() {} +func (*ImageStreamSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } -func (m *ImageStreamTag) Reset() { *m = ImageStreamTag{} } -func (m *ImageStreamTag) String() string { return proto.CompactTextString(m) } -func (*ImageStreamTag) ProtoMessage() {} +func (m *ImageStreamStatus) Reset() { *m = ImageStreamStatus{} } +func (*ImageStreamStatus) ProtoMessage() {} +func (*ImageStreamStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } -func (m *ImageStreamTagList) Reset() { *m = ImageStreamTagList{} } -func (m *ImageStreamTagList) String() string { return proto.CompactTextString(m) } -func (*ImageStreamTagList) ProtoMessage() {} +func (m *ImageStreamTag) Reset() { *m = ImageStreamTag{} } +func (*ImageStreamTag) ProtoMessage() {} +func (*ImageStreamTag) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } -func (m *NamedTagEventList) Reset() { *m = NamedTagEventList{} } -func (m *NamedTagEventList) String() string { return proto.CompactTextString(m) } -func (*NamedTagEventList) ProtoMessage() {} +func (m *ImageStreamTagList) Reset() { *m = ImageStreamTagList{} } +func (*ImageStreamTagList) ProtoMessage() {} +func (*ImageStreamTagList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } -func (m *RepositoryImportSpec) Reset() { *m = RepositoryImportSpec{} } -func (m *RepositoryImportSpec) String() string { return proto.CompactTextString(m) } -func (*RepositoryImportSpec) ProtoMessage() {} +func (m *NamedTagEventList) Reset() { *m = NamedTagEventList{} } +func (*NamedTagEventList) ProtoMessage() {} +func (*NamedTagEventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } -func (m *RepositoryImportStatus) Reset() { *m = RepositoryImportStatus{} } -func (m *RepositoryImportStatus) String() string { return proto.CompactTextString(m) } -func (*RepositoryImportStatus) ProtoMessage() {} +func (m *RepositoryImportSpec) Reset() { *m = RepositoryImportSpec{} } +func (*RepositoryImportSpec) ProtoMessage() {} +func (*RepositoryImportSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } -func (m *SignatureCondition) Reset() { *m = SignatureCondition{} } -func (m *SignatureCondition) String() string { return proto.CompactTextString(m) } -func (*SignatureCondition) ProtoMessage() {} +func (m *RepositoryImportStatus) Reset() { *m = RepositoryImportStatus{} } +func (*RepositoryImportStatus) ProtoMessage() {} +func (*RepositoryImportStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } -func (m *SignatureGenericEntity) Reset() { *m = SignatureGenericEntity{} } -func (m *SignatureGenericEntity) String() string { return proto.CompactTextString(m) } -func (*SignatureGenericEntity) ProtoMessage() {} +func (m *SignatureCondition) Reset() { *m = SignatureCondition{} } +func (*SignatureCondition) ProtoMessage() {} +func (*SignatureCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } -func (m *SignatureIssuer) Reset() { *m = SignatureIssuer{} } -func (m *SignatureIssuer) String() string { return proto.CompactTextString(m) } -func (*SignatureIssuer) ProtoMessage() {} +func (m *SignatureGenericEntity) Reset() { *m = SignatureGenericEntity{} } +func (*SignatureGenericEntity) ProtoMessage() {} +func (*SignatureGenericEntity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } -func (m *SignatureSubject) Reset() { *m = SignatureSubject{} } -func (m *SignatureSubject) String() string { return proto.CompactTextString(m) } -func (*SignatureSubject) ProtoMessage() {} +func (m *SignatureIssuer) Reset() { *m = SignatureIssuer{} } +func (*SignatureIssuer) ProtoMessage() {} +func (*SignatureIssuer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } -func (m *TagEvent) Reset() { *m = TagEvent{} } -func (m *TagEvent) String() string { return proto.CompactTextString(m) } -func (*TagEvent) ProtoMessage() {} +func (m *SignatureSubject) Reset() { *m = SignatureSubject{} } +func (*SignatureSubject) ProtoMessage() {} +func (*SignatureSubject) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } -func (m *TagEventCondition) Reset() { *m = TagEventCondition{} } -func (m *TagEventCondition) String() string { return proto.CompactTextString(m) } -func (*TagEventCondition) ProtoMessage() {} +func (m *TagEvent) Reset() { *m = TagEvent{} } +func (*TagEvent) ProtoMessage() {} +func (*TagEvent) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } -func (m *TagImportPolicy) Reset() { *m = TagImportPolicy{} } -func (m *TagImportPolicy) String() string { return proto.CompactTextString(m) } -func (*TagImportPolicy) ProtoMessage() {} +func (m *TagEventCondition) Reset() { *m = TagEventCondition{} } +func (*TagEventCondition) ProtoMessage() {} +func (*TagEventCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } -func (m *TagReference) Reset() { *m = TagReference{} } -func (m *TagReference) String() string { return proto.CompactTextString(m) } -func (*TagReference) ProtoMessage() {} +func (m *TagImportPolicy) Reset() { *m = TagImportPolicy{} } +func (*TagImportPolicy) ProtoMessage() {} +func (*TagImportPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } + +func (m *TagReference) Reset() { *m = TagReference{} } +func (*TagReference) ProtoMessage() {} +func (*TagReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } func init() { proto.RegisterType((*DockerImageReference)(nil), "github.com.openshift.origin.pkg.image.api.v1.DockerImageReference") @@ -502,17 +512,25 @@ func (m *ImageSignature) MarshalTo(data []byte) (int, error) { _ = l data[i] = 0xa i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n9, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n9 + data[i] = 0x12 + i++ i = encodeVarintGenerated(data, i, uint64(len(m.Type))) i += copy(data[i:], m.Type) if m.Content != nil { - data[i] = 0x12 + data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Content))) i += copy(data[i:], m.Content) } if len(m.Conditions) > 0 { for _, msg := range m.Conditions { - data[i] = 0x1a + data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(msg.Size())) n, err := msg.MarshalTo(data[i:]) @@ -522,13 +540,13 @@ func (m *ImageSignature) MarshalTo(data []byte) (int, error) { i += n } } - data[i] = 0x22 + data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(len(m.ImageIdentity))) i += copy(data[i:], m.ImageIdentity) if len(m.SignedClaims) > 0 { for k := range m.SignedClaims { - data[i] = 0x2a + data[i] = 0x32 i++ v := m.SignedClaims[k] mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) @@ -544,35 +562,35 @@ func (m *ImageSignature) MarshalTo(data []byte) (int, error) { } } if m.Created != nil { - data[i] = 0x32 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Created.Size())) - n9, err := m.Created.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n9 - } - if m.IssuedBy != nil { data[i] = 0x3a i++ - i = encodeVarintGenerated(data, i, uint64(m.IssuedBy.Size())) - n10, err := m.IssuedBy.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Created.Size())) + n10, err := m.Created.MarshalTo(data[i:]) if err != nil { return 0, err } i += n10 } - if m.IssuedTo != nil { + if m.IssuedBy != nil { data[i] = 0x42 i++ - i = encodeVarintGenerated(data, i, uint64(m.IssuedTo.Size())) - n11, err := m.IssuedTo.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.IssuedBy.Size())) + n11, err := m.IssuedBy.MarshalTo(data[i:]) if err != nil { return 0, err } i += n11 } + if m.IssuedTo != nil { + data[i] = 0x4a + i++ + i = encodeVarintGenerated(data, i, uint64(m.IssuedTo.Size())) + n12, err := m.IssuedTo.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n12 + } return i, nil } @@ -594,27 +612,27 @@ func (m *ImageStream) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n12, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n12 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n13, err := m.Spec.MarshalTo(data[i:]) + n13, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n13 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n14, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n14, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n14 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n15, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n15 return i, nil } @@ -636,19 +654,19 @@ func (m *ImageStreamImage) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n15, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n15 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Image.Size())) - n16, err := m.Image.MarshalTo(data[i:]) + n16, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n16 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Image.Size())) + n17, err := m.Image.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n17 return i, nil } @@ -670,27 +688,27 @@ func (m *ImageStreamImport) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n17, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n17 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n18, err := m.Spec.MarshalTo(data[i:]) + n18, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n18 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n19, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n19, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n19 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n20, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n20 return i, nil } @@ -721,11 +739,11 @@ func (m *ImageStreamImportSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Repository.Size())) - n20, err := m.Repository.MarshalTo(data[i:]) + n21, err := m.Repository.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n20 + i += n21 } if len(m.Images) > 0 { for _, msg := range m.Images { @@ -761,21 +779,21 @@ func (m *ImageStreamImportStatus) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Import.Size())) - n21, err := m.Import.MarshalTo(data[i:]) + n22, err := m.Import.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n21 + i += n22 } if m.Repository != nil { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Repository.Size())) - n22, err := m.Repository.MarshalTo(data[i:]) + n23, err := m.Repository.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n22 + i += n23 } if len(m.Images) > 0 { for _, msg := range m.Images { @@ -810,11 +828,11 @@ func (m *ImageStreamList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n23, err := m.ListMeta.MarshalTo(data[i:]) + n24, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n23 + i += n24 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -848,19 +866,19 @@ func (m *ImageStreamMapping) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n24, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n24 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Image.Size())) - n25, err := m.Image.MarshalTo(data[i:]) + n25, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n25 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Image.Size())) + n26, err := m.Image.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n26 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Tag))) @@ -954,20 +972,20 @@ func (m *ImageStreamTag) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n26, err := m.ObjectMeta.MarshalTo(data[i:]) + n27, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n26 + i += n27 if m.Tag != nil { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Tag.Size())) - n27, err := m.Tag.MarshalTo(data[i:]) + n28, err := m.Tag.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n27 + i += n28 } data[i] = 0x18 i++ @@ -987,11 +1005,11 @@ func (m *ImageStreamTag) MarshalTo(data []byte) (int, error) { data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.Image.Size())) - n28, err := m.Image.MarshalTo(data[i:]) + n29, err := m.Image.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n28 + i += n29 return i, nil } @@ -1013,11 +1031,11 @@ func (m *ImageStreamTagList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n29, err := m.ListMeta.MarshalTo(data[i:]) + n30, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n29 + i += n30 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -1097,19 +1115,19 @@ func (m *RepositoryImportSpec) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.From.Size())) - n30, err := m.From.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n30 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.ImportPolicy.Size())) - n31, err := m.ImportPolicy.MarshalTo(data[i:]) + n31, err := m.From.MarshalTo(data[i:]) if err != nil { return 0, err } i += n31 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ImportPolicy.Size())) + n32, err := m.ImportPolicy.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n32 data[i] = 0x18 i++ if m.IncludeManifest { @@ -1139,11 +1157,11 @@ func (m *RepositoryImportStatus) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n32, err := m.Status.MarshalTo(data[i:]) + n33, err := m.Status.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n32 + i += n33 if len(m.Images) > 0 { for _, msg := range m.Images { data[i] = 0x12 @@ -1200,19 +1218,19 @@ func (m *SignatureCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastProbeTime.Size())) - n33, err := m.LastProbeTime.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n33 - data[i] = 0x22 - i++ - i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n34, err := m.LastTransitionTime.MarshalTo(data[i:]) + n34, err := m.LastProbeTime.MarshalTo(data[i:]) if err != nil { return 0, err } i += n34 + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) + n35, err := m.LastTransitionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n35 data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -1268,11 +1286,11 @@ func (m *SignatureIssuer) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.SignatureGenericEntity.Size())) - n35, err := m.SignatureGenericEntity.MarshalTo(data[i:]) + n36, err := m.SignatureGenericEntity.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n35 + i += n36 return i, nil } @@ -1294,11 +1312,11 @@ func (m *SignatureSubject) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.SignatureGenericEntity.Size())) - n36, err := m.SignatureGenericEntity.MarshalTo(data[i:]) + n37, err := m.SignatureGenericEntity.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n36 + i += n37 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.PublicKeyID))) @@ -1324,11 +1342,11 @@ func (m *TagEvent) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Created.Size())) - n37, err := m.Created.MarshalTo(data[i:]) + n38, err := m.Created.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n37 + i += n38 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.DockerImageReference))) @@ -1369,11 +1387,11 @@ func (m *TagEventCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n38, err := m.LastTransitionTime.MarshalTo(data[i:]) + n39, err := m.LastTransitionTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n38 + i += n39 data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -1462,11 +1480,11 @@ func (m *TagReference) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.From.Size())) - n39, err := m.From.MarshalTo(data[i:]) + n40, err := m.From.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n39 + i += n40 } data[i] = 0x20 i++ @@ -1484,11 +1502,11 @@ func (m *TagReference) MarshalTo(data []byte) (int, error) { data[i] = 0x32 i++ i = encodeVarintGenerated(data, i, uint64(m.ImportPolicy.Size())) - n40, err := m.ImportPolicy.MarshalTo(data[i:]) + n41, err := m.ImportPolicy.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n40 + i += n41 return i, nil } @@ -1630,6 +1648,8 @@ func (m *ImageList) Size() (n int) { func (m *ImageSignature) Size() (n int) { var l int _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) l = len(m.Type) n += 1 + l + sovGenerated(uint64(l)) if m.Content != nil { @@ -2001,6 +2021,399 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *DockerImageReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DockerImageReference{`, + `Registry:` + fmt.Sprintf("%v", this.Registry) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Tag:` + fmt.Sprintf("%v", this.Tag) + `,`, + `ID:` + fmt.Sprintf("%v", this.ID) + `,`, + `}`, + }, "") + return s +} +func (this *Image) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Image{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `DockerImageReference:` + fmt.Sprintf("%v", this.DockerImageReference) + `,`, + `DockerImageMetadata:` + strings.Replace(strings.Replace(this.DockerImageMetadata.String(), "RawExtension", "k8s_io_kubernetes_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `DockerImageMetadataVersion:` + fmt.Sprintf("%v", this.DockerImageMetadataVersion) + `,`, + `DockerImageManifest:` + fmt.Sprintf("%v", this.DockerImageManifest) + `,`, + `DockerImageLayers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.DockerImageLayers), "ImageLayer", "ImageLayer", 1), `&`, ``, 1) + `,`, + `Signatures:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Signatures), "ImageSignature", "ImageSignature", 1), `&`, ``, 1) + `,`, + `DockerImageSignatures:` + fmt.Sprintf("%v", this.DockerImageSignatures) + `,`, + `DockerImageManifestMediaType:` + fmt.Sprintf("%v", this.DockerImageManifestMediaType) + `,`, + `DockerImageConfig:` + fmt.Sprintf("%v", this.DockerImageConfig) + `,`, + `}`, + }, "") + return s +} +func (this *ImageImportSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageImportSpec{`, + `From:` + strings.Replace(strings.Replace(this.From.String(), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `To:` + strings.Replace(fmt.Sprintf("%v", this.To), "LocalObjectReference", "k8s_io_kubernetes_pkg_api_v1.LocalObjectReference", 1) + `,`, + `ImportPolicy:` + strings.Replace(strings.Replace(this.ImportPolicy.String(), "TagImportPolicy", "TagImportPolicy", 1), `&`, ``, 1) + `,`, + `IncludeManifest:` + fmt.Sprintf("%v", this.IncludeManifest) + `,`, + `}`, + }, "") + return s +} +func (this *ImageImportStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageImportStatus{`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "Status", "k8s_io_kubernetes_pkg_api_unversioned.Status", 1), `&`, ``, 1) + `,`, + `Image:` + strings.Replace(fmt.Sprintf("%v", this.Image), "Image", "Image", 1) + `,`, + `Tag:` + fmt.Sprintf("%v", this.Tag) + `,`, + `}`, + }, "") + return s +} +func (this *ImageLayer) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageLayer{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `LayerSize:` + fmt.Sprintf("%v", this.LayerSize) + `,`, + `MediaType:` + fmt.Sprintf("%v", this.MediaType) + `,`, + `}`, + }, "") + return s +} +func (this *ImageList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Image", "Image", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageSignature) String() string { + if this == nil { + return "nil" + } + keysForSignedClaims := make([]string, 0, len(this.SignedClaims)) + for k := range this.SignedClaims { + keysForSignedClaims = append(keysForSignedClaims, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSignedClaims) + mapStringForSignedClaims := "map[string]string{" + for _, k := range keysForSignedClaims { + mapStringForSignedClaims += fmt.Sprintf("%v: %v,", k, this.SignedClaims[k]) + } + mapStringForSignedClaims += "}" + s := strings.Join([]string{`&ImageSignature{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Content:` + valueToStringGenerated(this.Content) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "SignatureCondition", "SignatureCondition", 1), `&`, ``, 1) + `,`, + `ImageIdentity:` + fmt.Sprintf("%v", this.ImageIdentity) + `,`, + `SignedClaims:` + mapStringForSignedClaims + `,`, + `Created:` + strings.Replace(fmt.Sprintf("%v", this.Created), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `IssuedBy:` + strings.Replace(fmt.Sprintf("%v", this.IssuedBy), "SignatureIssuer", "SignatureIssuer", 1) + `,`, + `IssuedTo:` + strings.Replace(fmt.Sprintf("%v", this.IssuedTo), "SignatureSubject", "SignatureSubject", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStream) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStream{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ImageStreamSpec", "ImageStreamSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ImageStreamStatus", "ImageStreamStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamImage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamImage{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Image:` + strings.Replace(strings.Replace(this.Image.String(), "Image", "Image", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamImport) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamImport{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ImageStreamImportSpec", "ImageStreamImportSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ImageStreamImportStatus", "ImageStreamImportStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamImportSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamImportSpec{`, + `Import:` + fmt.Sprintf("%v", this.Import) + `,`, + `Repository:` + strings.Replace(fmt.Sprintf("%v", this.Repository), "RepositoryImportSpec", "RepositoryImportSpec", 1) + `,`, + `Images:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Images), "ImageImportSpec", "ImageImportSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamImportStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamImportStatus{`, + `Import:` + strings.Replace(fmt.Sprintf("%v", this.Import), "ImageStream", "ImageStream", 1) + `,`, + `Repository:` + strings.Replace(fmt.Sprintf("%v", this.Repository), "RepositoryImportStatus", "RepositoryImportStatus", 1) + `,`, + `Images:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Images), "ImageImportStatus", "ImageImportStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ImageStream", "ImageStream", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamMapping) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamMapping{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Image:` + strings.Replace(strings.Replace(this.Image.String(), "Image", "Image", 1), `&`, ``, 1) + `,`, + `Tag:` + fmt.Sprintf("%v", this.Tag) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamSpec{`, + `DockerImageRepository:` + fmt.Sprintf("%v", this.DockerImageRepository) + `,`, + `Tags:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Tags), "TagReference", "TagReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamStatus{`, + `DockerImageRepository:` + fmt.Sprintf("%v", this.DockerImageRepository) + `,`, + `Tags:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Tags), "NamedTagEventList", "NamedTagEventList", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamTag) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamTag{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Tag:` + strings.Replace(fmt.Sprintf("%v", this.Tag), "TagReference", "TagReference", 1) + `,`, + `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "TagEventCondition", "TagEventCondition", 1), `&`, ``, 1) + `,`, + `Image:` + strings.Replace(strings.Replace(this.Image.String(), "Image", "Image", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ImageStreamTagList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ImageStreamTagList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ImageStreamTag", "ImageStreamTag", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamedTagEventList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamedTagEventList{`, + `Tag:` + fmt.Sprintf("%v", this.Tag) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "TagEvent", "TagEvent", 1), `&`, ``, 1) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "TagEventCondition", "TagEventCondition", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RepositoryImportSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RepositoryImportSpec{`, + `From:` + strings.Replace(strings.Replace(this.From.String(), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `ImportPolicy:` + strings.Replace(strings.Replace(this.ImportPolicy.String(), "TagImportPolicy", "TagImportPolicy", 1), `&`, ``, 1) + `,`, + `IncludeManifest:` + fmt.Sprintf("%v", this.IncludeManifest) + `,`, + `}`, + }, "") + return s +} +func (this *RepositoryImportStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RepositoryImportStatus{`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "Status", "k8s_io_kubernetes_pkg_api_unversioned.Status", 1), `&`, ``, 1) + `,`, + `Images:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Images), "ImageImportStatus", "ImageImportStatus", 1), `&`, ``, 1) + `,`, + `AdditionalTags:` + fmt.Sprintf("%v", this.AdditionalTags) + `,`, + `}`, + }, "") + return s +} +func (this *SignatureCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SignatureCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *SignatureGenericEntity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SignatureGenericEntity{`, + `Organization:` + fmt.Sprintf("%v", this.Organization) + `,`, + `CommonName:` + fmt.Sprintf("%v", this.CommonName) + `,`, + `}`, + }, "") + return s +} +func (this *SignatureIssuer) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SignatureIssuer{`, + `SignatureGenericEntity:` + strings.Replace(strings.Replace(this.SignatureGenericEntity.String(), "SignatureGenericEntity", "SignatureGenericEntity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SignatureSubject) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SignatureSubject{`, + `SignatureGenericEntity:` + strings.Replace(strings.Replace(this.SignatureGenericEntity.String(), "SignatureGenericEntity", "SignatureGenericEntity", 1), `&`, ``, 1) + `,`, + `PublicKeyID:` + fmt.Sprintf("%v", this.PublicKeyID) + `,`, + `}`, + }, "") + return s +} +func (this *TagEvent) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagEvent{`, + `Created:` + strings.Replace(strings.Replace(this.Created.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `DockerImageReference:` + fmt.Sprintf("%v", this.DockerImageReference) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, + `}`, + }, "") + return s +} +func (this *TagEventCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagEventCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, + `}`, + }, "") + return s +} +func (this *TagImportPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TagImportPolicy{`, + `Insecure:` + fmt.Sprintf("%v", this.Insecure) + `,`, + `Scheduled:` + fmt.Sprintf("%v", this.Scheduled) + `,`, + `}`, + }, "") + return s +} +func (this *TagReference) String() string { + if this == nil { + return "nil" + } + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" + s := strings.Join([]string{`&TagReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Annotations:` + mapStringForAnnotations + `,`, + `From:` + strings.Replace(fmt.Sprintf("%v", this.From), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1) + `,`, + `Reference:` + fmt.Sprintf("%v", this.Reference) + `,`, + `Generation:` + valueToStringGenerated(this.Generation) + `,`, + `ImportPolicy:` + strings.Replace(strings.Replace(this.ImportPolicy.String(), "TagImportPolicy", "TagImportPolicy", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *DockerImageReference) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -3115,6 +3528,36 @@ func (m *ImageSignature) Unmarshal(data []byte) error { } switch fieldNum { case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) } @@ -3143,7 +3586,7 @@ func (m *ImageSignature) Unmarshal(data []byte) error { } m.Type = string(data[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Content", wireType) } @@ -3174,7 +3617,7 @@ func (m *ImageSignature) Unmarshal(data []byte) error { m.Content = []byte{} } iNdEx = postIndex - case 3: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) } @@ -3205,7 +3648,7 @@ func (m *ImageSignature) Unmarshal(data []byte) error { return err } iNdEx = postIndex - case 4: + case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ImageIdentity", wireType) } @@ -3234,7 +3677,7 @@ func (m *ImageSignature) Unmarshal(data []byte) error { } m.ImageIdentity = string(data[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 6: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SignedClaims", wireType) } @@ -3345,7 +3788,7 @@ func (m *ImageSignature) Unmarshal(data []byte) error { } m.SignedClaims[mapkey] = mapvalue iNdEx = postIndex - case 6: + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Created", wireType) } @@ -3378,7 +3821,7 @@ func (m *ImageSignature) Unmarshal(data []byte) error { return err } iNdEx = postIndex - case 7: + case 8: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field IssuedBy", wireType) } @@ -3411,7 +3854,7 @@ func (m *ImageSignature) Unmarshal(data []byte) error { return err } iNdEx = postIndex - case 8: + case 9: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field IssuedTo", wireType) } @@ -6703,3 +7146,142 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 2154 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x1a, 0x5b, 0x6f, 0x1b, 0x59, + 0xb9, 0x33, 0xe3, 0x38, 0xce, 0xb1, 0x9b, 0xcb, 0x69, 0xb2, 0xeb, 0x35, 0xdd, 0xb6, 0x1a, 0x76, + 0x57, 0x8b, 0x68, 0xc7, 0x6a, 0xd0, 0xa2, 0x6e, 0xe9, 0xb6, 0x74, 0xe2, 0xb0, 0x32, 0x6d, 0xb6, + 0xd5, 0x49, 0x76, 0x55, 0x71, 0xd5, 0xc4, 0x3e, 0x99, 0x0c, 0xb1, 0x67, 0xac, 0x99, 0x71, 0x96, + 0xf4, 0x09, 0x10, 0x42, 0xbc, 0x20, 0xf1, 0xc0, 0x13, 0xda, 0x37, 0x24, 0x9e, 0xe1, 0x37, 0x50, + 0xa1, 0x4a, 0xbc, 0x54, 0x3c, 0x70, 0x91, 0x50, 0x81, 0xe5, 0x01, 0xc4, 0x4f, 0xe0, 0x89, 0xef, + 0x5c, 0xe6, 0xea, 0xb1, 0x37, 0x76, 0x9a, 0xc0, 0x3e, 0x58, 0x9a, 0x39, 0xe7, 0xbb, 0x9d, 0xef, + 0x7e, 0xbe, 0x31, 0xba, 0x65, 0x3b, 0xe1, 0xfe, 0x70, 0xd7, 0xe8, 0x78, 0xfd, 0xa6, 0x37, 0xa0, + 0x6e, 0xb0, 0xef, 0xec, 0x85, 0x4d, 0xcf, 0x77, 0x6c, 0xc7, 0x6d, 0x0e, 0x0e, 0xec, 0xa6, 0xd3, + 0xb7, 0x6c, 0xda, 0xb4, 0x06, 0x4e, 0xf3, 0xf0, 0x7a, 0xd3, 0xa6, 0x2e, 0xf5, 0xad, 0x90, 0x76, + 0x8d, 0x81, 0xef, 0x85, 0x1e, 0xbe, 0x9a, 0x60, 0x1b, 0x31, 0xb6, 0x21, 0xb0, 0x0d, 0xc0, 0x36, + 0x38, 0xb6, 0x01, 0xd8, 0xc6, 0xe1, 0xf5, 0xc6, 0xb5, 0x14, 0x2f, 0xdb, 0xb3, 0xbd, 0x26, 0x27, + 0xb2, 0x3b, 0xdc, 0xe3, 0x6f, 0xfc, 0x85, 0x3f, 0x09, 0xe2, 0x8d, 0xb7, 0x0e, 0x6e, 0x04, 0x86, + 0xe3, 0x35, 0x0f, 0x86, 0xbb, 0xd4, 0x77, 0x69, 0x48, 0x03, 0x2e, 0x10, 0x13, 0x65, 0xe8, 0x1e, + 0x52, 0x3f, 0x70, 0x3c, 0x97, 0x76, 0xf3, 0x32, 0x35, 0xae, 0x8e, 0x47, 0x1b, 0x3d, 0x41, 0xe3, + 0x5a, 0x31, 0xb4, 0x3f, 0x74, 0x43, 0xa7, 0x4f, 0x47, 0xc0, 0xaf, 0x17, 0x83, 0x0f, 0x43, 0xa7, + 0xd7, 0x74, 0xdc, 0x30, 0x08, 0xfd, 0x3c, 0x8a, 0xfe, 0x7b, 0x05, 0xad, 0xb6, 0xbc, 0xce, 0x01, + 0xf5, 0xdb, 0x4c, 0x19, 0x84, 0xee, 0x51, 0x9f, 0xba, 0x1d, 0x8a, 0xaf, 0xa2, 0x8a, 0x4f, 0x6d, + 0x07, 0x70, 0x8e, 0xea, 0xca, 0x15, 0xe5, 0xcd, 0x05, 0x73, 0xf9, 0xe9, 0xf3, 0xcb, 0xe7, 0x3e, + 0x7e, 0x7e, 0xb9, 0x42, 0xe4, 0x3a, 0x89, 0x21, 0x70, 0x13, 0x2d, 0xb8, 0x56, 0x9f, 0x06, 0x03, + 0xab, 0x43, 0xeb, 0x2a, 0x07, 0x5f, 0x91, 0xe0, 0x0b, 0xef, 0x45, 0x1b, 0x24, 0x81, 0xc1, 0x57, + 0x50, 0x89, 0xbd, 0xd4, 0x35, 0x0e, 0x5b, 0x93, 0xb0, 0x25, 0x06, 0x4b, 0xf8, 0x0e, 0x7e, 0x15, + 0x69, 0xa1, 0x65, 0xd7, 0x4b, 0x1c, 0xa0, 0x2a, 0x01, 0xb4, 0x1d, 0xcb, 0x26, 0x6c, 0x1d, 0x37, + 0x90, 0xea, 0xb4, 0xea, 0x73, 0x7c, 0x17, 0xc9, 0x5d, 0xb5, 0xdd, 0x22, 0xb0, 0xaa, 0xff, 0x65, + 0x1e, 0xcd, 0xf1, 0xe3, 0xe0, 0x47, 0xa8, 0xd2, 0xa7, 0xa1, 0xd5, 0xb5, 0x42, 0x8b, 0x9f, 0xa2, + 0xba, 0xfe, 0xa6, 0x21, 0x94, 0x64, 0x24, 0x4a, 0xe2, 0xbe, 0x20, 0xbc, 0xc0, 0x78, 0xb0, 0xfb, + 0x1d, 0xda, 0x09, 0xb7, 0x00, 0xc7, 0xc4, 0x92, 0x2a, 0x4a, 0xd6, 0x48, 0x4c, 0x0d, 0x3f, 0x44, + 0xab, 0xdd, 0x02, 0xbd, 0xc9, 0xc3, 0x5f, 0x94, 0xb8, 0x85, 0xba, 0x25, 0x85, 0x98, 0xf8, 0x31, + 0xba, 0x90, 0x5a, 0xdf, 0x8a, 0xc4, 0xd6, 0xb8, 0xd8, 0x9f, 0x1f, 0x23, 0xb6, 0x74, 0x05, 0x83, + 0x58, 0x1f, 0x6e, 0x7e, 0x37, 0x04, 0x1f, 0x07, 0xb7, 0x33, 0x3f, 0x23, 0xb9, 0x5f, 0x68, 0x8d, + 0xd2, 0x23, 0x45, 0x4c, 0xf0, 0x2e, 0x6a, 0x14, 0x2c, 0x7f, 0x20, 0xdc, 0x58, 0xda, 0x40, 0x97, + 0x54, 0x1b, 0xad, 0xb1, 0x90, 0x64, 0x02, 0x15, 0xbc, 0x95, 0x3d, 0x9f, 0xe5, 0x3a, 0x7b, 0x34, + 0x08, 0xa5, 0x09, 0x0b, 0x45, 0x96, 0x20, 0xa4, 0x08, 0x0f, 0x7f, 0x5f, 0x41, 0x2b, 0xa9, 0xf5, + 0xfb, 0xd6, 0x11, 0xf0, 0xa9, 0x97, 0xaf, 0x68, 0xa0, 0xad, 0x1b, 0xc6, 0x34, 0xa1, 0x6f, 0x24, + 0x04, 0xcc, 0x57, 0xa4, 0x1c, 0x2b, 0xad, 0x3c, 0x69, 0x32, 0xca, 0x0d, 0x0f, 0x10, 0x0a, 0x1c, + 0xdb, 0xb5, 0xc2, 0xa1, 0x4f, 0x83, 0xfa, 0x3c, 0xe7, 0x7d, 0x6b, 0x06, 0xde, 0xdb, 0x11, 0x91, + 0xc4, 0xe9, 0xe2, 0xa5, 0x80, 0xa4, 0x78, 0xe0, 0x07, 0x68, 0x2d, 0x25, 0x46, 0x02, 0x54, 0xaf, + 0x00, 0xf3, 0x9a, 0xf9, 0x0a, 0xa0, 0xae, 0xb5, 0x8a, 0x00, 0x48, 0x31, 0x1e, 0xde, 0x47, 0x17, + 0x0b, 0xb4, 0xbb, 0x45, 0xbb, 0x8e, 0xb5, 0x73, 0x34, 0xa0, 0xf5, 0x05, 0x6e, 0x9e, 0xd7, 0xa4, + 0x58, 0x17, 0x5b, 0x13, 0x60, 0xc9, 0x44, 0x4a, 0xf8, 0xdd, 0x8c, 0xbd, 0x36, 0x3c, 0x77, 0xcf, + 0xb1, 0xeb, 0x88, 0x93, 0x2f, 0xd2, 0xba, 0x00, 0x20, 0xa3, 0x38, 0xfa, 0xbf, 0x55, 0xb4, 0xc4, + 0xdf, 0xdb, 0xfd, 0x81, 0xe7, 0x87, 0xdb, 0x03, 0xda, 0x01, 0xbd, 0x94, 0xf6, 0x7c, 0xaf, 0x2f, + 0x83, 0xfc, 0xda, 0x71, 0x82, 0x3c, 0x8e, 0xbc, 0x24, 0xfd, 0x7c, 0x05, 0x48, 0x10, 0x4e, 0x08, + 0x7f, 0x15, 0xa9, 0xa1, 0xc7, 0xa3, 0xb9, 0xba, 0xbe, 0x3e, 0x99, 0xdc, 0x7d, 0xaf, 0x63, 0xf5, + 0xf2, 0x34, 0xcb, 0x2c, 0x1f, 0xed, 0x78, 0x04, 0xa8, 0xe0, 0x0f, 0x51, 0xcd, 0xe1, 0xa2, 0x3e, + 0xf4, 0x7a, 0x4e, 0xe7, 0x48, 0x86, 0xf4, 0x3b, 0xd3, 0x39, 0x0a, 0x64, 0xbe, 0x76, 0x8a, 0x88, + 0xb9, 0x2a, 0x85, 0xae, 0xa5, 0x57, 0x49, 0x86, 0x11, 0xbe, 0x8b, 0x96, 0x1c, 0xb7, 0xd3, 0x1b, + 0x76, 0x93, 0x70, 0x63, 0xb1, 0x5c, 0x31, 0x5f, 0x96, 0xc8, 0x4b, 0xed, 0xec, 0x36, 0xc9, 0xc3, + 0xeb, 0x7f, 0x85, 0x30, 0x4b, 0x2b, 0x3b, 0x04, 0xbf, 0x09, 0xf0, 0xfb, 0xa8, 0x1c, 0xf0, 0xa7, + 0x63, 0x28, 0x3c, 0x55, 0x0e, 0x0d, 0x81, 0x6e, 0x2e, 0x4a, 0xf6, 0x65, 0xf1, 0x4e, 0x24, 0x31, + 0xbc, 0x83, 0xe6, 0xf8, 0x99, 0xa5, 0xde, 0xbf, 0x30, 0x43, 0x28, 0x99, 0x0b, 0x40, 0x57, 0x64, + 0x7f, 0x22, 0x88, 0x45, 0x95, 0x44, 0x2b, 0xae, 0x24, 0xfa, 0x8f, 0x14, 0x84, 0x92, 0xa0, 0x8e, + 0x2b, 0x93, 0x32, 0xb6, 0x32, 0xbd, 0x8e, 0x4a, 0x81, 0xf3, 0x58, 0x08, 0xa9, 0x25, 0x75, 0x8e, + 0xa3, 0x6f, 0xc3, 0x06, 0xe1, 0xdb, 0xac, 0x26, 0xf6, 0xe3, 0x30, 0xd2, 0xb2, 0x35, 0x31, 0x89, + 0x99, 0x04, 0x46, 0x7f, 0xa2, 0xa0, 0x05, 0x21, 0x08, 0x14, 0x55, 0xfc, 0xcd, 0x91, 0xd2, 0xd5, + 0x3c, 0xa6, 0x92, 0x19, 0x3a, 0xaf, 0x60, 0x71, 0xc5, 0x8e, 0x56, 0x52, 0xf5, 0xeb, 0x11, 0xa8, + 0x3a, 0xa4, 0xfd, 0x00, 0x4e, 0xa1, 0xcd, 0xaa, 0xea, 0xf3, 0x92, 0xfe, 0x5c, 0x9b, 0x51, 0x22, + 0x82, 0xa0, 0xfe, 0xe7, 0x32, 0x5a, 0xcc, 0x66, 0x99, 0x53, 0x2c, 0xc3, 0x60, 0xad, 0x90, 0xe9, + 0x57, 0xcd, 0x5a, 0x8b, 0xab, 0x96, 0xef, 0x80, 0xb5, 0xe6, 0x3b, 0x9e, 0x0b, 0xa5, 0x31, 0xe4, + 0x46, 0xa8, 0x99, 0x55, 0x00, 0x98, 0xdf, 0x10, 0x4b, 0x24, 0xda, 0xc3, 0x21, 0x42, 0xf0, 0xd8, + 0x75, 0x42, 0xd0, 0x61, 0x00, 0x51, 0xc2, 0x94, 0xf2, 0xe5, 0xe9, 0x94, 0x12, 0x9f, 0x77, 0x23, + 0x22, 0x94, 0x08, 0x1f, 0x2f, 0x41, 0x3a, 0x4f, 0xf8, 0xe0, 0x2f, 0xa1, 0xf3, 0x9c, 0x44, 0xbb, + 0x0b, 0x32, 0x38, 0xe1, 0x91, 0xac, 0x86, 0x6b, 0x12, 0xed, 0x7c, 0x3b, 0xbd, 0x49, 0xb2, 0xb0, + 0xf8, 0xc7, 0x0a, 0xaa, 0xb1, 0xd2, 0x40, 0xbb, 0x1b, 0x3d, 0xcb, 0xe9, 0x47, 0xc5, 0xef, 0xbd, + 0x93, 0x14, 0x20, 0x7e, 0x88, 0x88, 0xe0, 0xa6, 0x0b, 0xbd, 0x5d, 0x92, 0x68, 0xd2, 0x5b, 0x24, + 0xc3, 0x19, 0x13, 0x50, 0xb2, 0x4f, 0x59, 0x5f, 0x09, 0x55, 0x70, 0x52, 0xbf, 0x92, 0xf7, 0xd5, + 0x1d, 0x68, 0x5e, 0xa4, 0x45, 0x04, 0x3e, 0x89, 0x08, 0x61, 0x1b, 0x55, 0x9c, 0x20, 0x18, 0xd2, + 0xae, 0x79, 0x04, 0xd5, 0x6d, 0x86, 0x8c, 0x19, 0x1f, 0xaa, 0xcd, 0xc8, 0xf8, 0x66, 0x8d, 0x85, + 0x42, 0x5b, 0x92, 0x24, 0x31, 0x71, 0x28, 0x81, 0xf2, 0x79, 0xc7, 0xe3, 0xe5, 0xae, 0xba, 0x7e, + 0x7b, 0x46, 0x46, 0xdb, 0x43, 0xee, 0xa3, 0x69, 0x4e, 0x50, 0x02, 0x62, 0xea, 0x8d, 0x3b, 0x68, + 0x65, 0x44, 0xbf, 0x78, 0x19, 0x69, 0x07, 0x54, 0x36, 0xd9, 0x84, 0x3d, 0xe2, 0x55, 0x34, 0x77, + 0x68, 0xf5, 0x86, 0xd2, 0xab, 0x89, 0x78, 0xb9, 0xa9, 0xde, 0x50, 0xf4, 0x5f, 0xab, 0xa8, 0x2a, + 0x0c, 0x16, 0x82, 0x96, 0xfa, 0xa7, 0x18, 0x58, 0xdf, 0x86, 0x24, 0x07, 0x85, 0x55, 0x66, 0xe2, + 0x77, 0x66, 0xf1, 0x29, 0x2e, 0x22, 0xab, 0xce, 0x49, 0x5c, 0xb2, 0x37, 0xc2, 0x09, 0x83, 0x79, + 0xa3, 0x12, 0x22, 0xca, 0xe1, 0x9d, 0xd9, 0x59, 0x4c, 0x2c, 0x2a, 0xfa, 0x6f, 0x15, 0xb4, 0x9c, + 0x82, 0x3e, 0xed, 0x8b, 0xc1, 0xa3, 0x17, 0x50, 0xc3, 0x92, 0xc4, 0x9a, 0xaa, 0x63, 0xfa, 0x6f, + 0x54, 0x59, 0x8a, 0xa3, 0x83, 0xb0, 0x82, 0x7c, 0x8a, 0x27, 0xa1, 0x19, 0x17, 0xd8, 0x98, 0xd9, + 0x3e, 0x49, 0x9b, 0x56, 0xe8, 0x08, 0xfd, 0x9c, 0x23, 0x6c, 0x9e, 0x94, 0xd1, 0x64, 0x77, 0xf8, + 0xb9, 0x8a, 0xd6, 0x0a, 0x85, 0xc3, 0x6f, 0xa0, 0xb2, 0xe8, 0x9e, 0xb8, 0x1e, 0x2b, 0x09, 0x05, + 0x01, 0x43, 0xe4, 0x2e, 0xf6, 0x11, 0xf2, 0xe9, 0xc0, 0x0b, 0x9c, 0xd0, 0x83, 0xcb, 0xb1, 0xd0, + 0x8e, 0x39, 0x9d, 0xd0, 0x24, 0xc6, 0x4f, 0x29, 0x67, 0x91, 0x59, 0x22, 0xd9, 0x21, 0x29, 0x2e, + 0x60, 0x8b, 0x32, 0x27, 0xc0, 0x94, 0xa4, 0xcd, 0x18, 0x90, 0x69, 0x56, 0xc9, 0xd1, 0x18, 0x51, + 0x22, 0x89, 0xeb, 0x7f, 0x54, 0xd1, 0xcb, 0x63, 0x14, 0x0a, 0x0d, 0x49, 0x5a, 0x3d, 0xd5, 0xf5, + 0xb7, 0x67, 0xb6, 0x93, 0x89, 0x0a, 0xb4, 0x1a, 0x16, 0x68, 0xb5, 0x75, 0x42, 0xad, 0x4a, 0x4f, + 0x98, 0xa0, 0x57, 0x3b, 0xa7, 0xd7, 0x3b, 0xb3, 0xeb, 0x35, 0xe7, 0x76, 0x39, 0xcd, 0x3e, 0x53, + 0xe4, 0xa5, 0x45, 0xa8, 0xe0, 0x2c, 0x5a, 0xbc, 0x6f, 0x65, 0x5b, 0xbc, 0x13, 0xd8, 0xab, 0xb8, + 0xd1, 0xfb, 0xa7, 0x82, 0x70, 0x0a, 0x6a, 0xcb, 0x1a, 0x0c, 0x1c, 0xd7, 0xfe, 0x34, 0xa6, 0xd6, + 0x4f, 0xba, 0x22, 0x3c, 0xc9, 0x1a, 0x8f, 0x67, 0x8b, 0xed, 0xcc, 0x4d, 0x3c, 0x71, 0x2f, 0x79, + 0x71, 0x78, 0x55, 0x12, 0x59, 0x6b, 0x15, 0x01, 0x91, 0x62, 0x5c, 0xfc, 0x0d, 0x68, 0x67, 0x2d, + 0x3b, 0xb2, 0xd8, 0xcd, 0xa9, 0x6f, 0x88, 0x05, 0x77, 0x5a, 0x58, 0x0d, 0x08, 0xa7, 0xaa, 0xff, + 0x4e, 0xc9, 0x14, 0x10, 0x19, 0xd7, 0xa7, 0x72, 0x10, 0x2b, 0x73, 0x90, 0x29, 0xa3, 0x8a, 0xdd, + 0xb5, 0xba, 0x20, 0xf7, 0xe6, 0x21, 0x74, 0xba, 0xcc, 0xb1, 0x0b, 0x4f, 0xf3, 0x44, 0x8b, 0xee, + 0x19, 0xfc, 0x34, 0xb0, 0x73, 0x8a, 0xae, 0xf7, 0xbe, 0x70, 0x10, 0xe1, 0x78, 0x27, 0xb1, 0xcb, + 0x7c, 0x66, 0x8a, 0xb9, 0x8e, 0x90, 0x9c, 0xc8, 0xb2, 0x39, 0x9b, 0xc6, 0x2f, 0x94, 0xb1, 0x20, + 0xef, 0xc6, 0x3b, 0x24, 0x05, 0x85, 0x83, 0x82, 0x9b, 0xca, 0x9d, 0xa9, 0x25, 0xe2, 0xba, 0x3d, + 0xfe, 0x45, 0x25, 0x0e, 0xbd, 0xb9, 0x17, 0xdd, 0xd5, 0xfc, 0x21, 0x9b, 0x45, 0x40, 0xb4, 0xb3, + 0xc8, 0x8d, 0x56, 0x36, 0x37, 0xde, 0x9a, 0x39, 0x37, 0x82, 0xbc, 0x63, 0xd2, 0xe3, 0x0f, 0xa1, + 0x5d, 0x1b, 0xf1, 0xe4, 0x28, 0xd3, 0x28, 0x63, 0xc6, 0xda, 0x5f, 0xcf, 0xca, 0xf5, 0xc5, 0xd9, + 0xec, 0x5a, 0x2c, 0x51, 0xce, 0x73, 0xb4, 0x33, 0xf1, 0x1c, 0xfd, 0x17, 0x2a, 0x5a, 0x2d, 0x6a, + 0x77, 0x5e, 0xfc, 0xc8, 0x2e, 0x3f, 0x66, 0x53, 0xff, 0x87, 0x63, 0x36, 0x6d, 0xca, 0x31, 0xdb, + 0xcf, 0x54, 0xf4, 0x52, 0x71, 0xfb, 0x72, 0x5a, 0xb3, 0xb6, 0xa4, 0xf3, 0x51, 0x4f, 0xb5, 0xf3, + 0xc1, 0x37, 0xd1, 0xa2, 0xd5, 0x15, 0xde, 0x60, 0xf5, 0x58, 0xfe, 0xe6, 0x9e, 0xb7, 0x60, 0x62, + 0x80, 0x5d, 0xbc, 0x9b, 0xd9, 0x21, 0x39, 0x48, 0xfd, 0xb9, 0x86, 0xf0, 0xe8, 0x58, 0x05, 0x48, + 0x8a, 0xa9, 0x8f, 0x88, 0xa2, 0x37, 0xd2, 0x53, 0x9f, 0xff, 0x3c, 0xbf, 0xfc, 0xd2, 0x28, 0x46, + 0x6a, 0x1e, 0xf4, 0x41, 0xac, 0x4e, 0x31, 0x33, 0xba, 0x9d, 0xd5, 0x0f, 0xe0, 0x4f, 0xfc, 0x46, + 0x67, 0xc4, 0x34, 0x73, 0xfa, 0xdc, 0x47, 0xe7, 0x7b, 0x56, 0x10, 0x3e, 0xf4, 0xbd, 0x5d, 0xca, + 0xa6, 0x1a, 0x9f, 0xf0, 0xe1, 0xa6, 0x70, 0x10, 0x12, 0xcf, 0x7d, 0xee, 0xa7, 0x29, 0x91, 0x2c, + 0x61, 0xf0, 0x73, 0xcc, 0x16, 0x76, 0x7c, 0xcb, 0x0d, 0xc4, 0xe9, 0x18, 0xbb, 0xd2, 0xf4, 0xec, + 0x1a, 0x92, 0x1d, 0xbe, 0x3f, 0x42, 0x8e, 0x14, 0xb0, 0x60, 0x17, 0x24, 0x48, 0x79, 0x01, 0x54, + 0x2a, 0x31, 0xa6, 0x8a, 0x2d, 0x4e, 0xf8, 0x2a, 0x91, 0xbb, 0xf8, 0x73, 0x68, 0xbe, 0x4f, 0x83, + 0x80, 0x95, 0x8b, 0x32, 0x07, 0x5c, 0x92, 0x80, 0xf3, 0x5b, 0x62, 0x99, 0x44, 0xfb, 0x6c, 0xf8, + 0x9a, 0x98, 0x8b, 0x17, 0x3c, 0xa7, 0xb3, 0x29, 0xc6, 0x5b, 0x37, 0x50, 0xcd, 0xf3, 0x6d, 0x08, + 0x90, 0xc7, 0xa2, 0x3a, 0x0a, 0x63, 0xc7, 0xf1, 0xf8, 0x20, 0xb5, 0x47, 0x32, 0x90, 0xac, 0xaa, + 0x82, 0x13, 0xf7, 0x3d, 0x97, 0xa5, 0x5f, 0x69, 0xe6, 0x54, 0x9a, 0x8a, 0x76, 0x48, 0x0a, 0x4a, + 0xff, 0x15, 0xb4, 0x78, 0xb9, 0x81, 0x11, 0xfe, 0x08, 0x84, 0x0b, 0x0a, 0x85, 0x93, 0xa1, 0xd8, + 0x9a, 0x71, 0x4e, 0x94, 0xa1, 0x65, 0x5e, 0x92, 0xa2, 0x8d, 0x51, 0x04, 0x19, 0x23, 0x83, 0xfe, + 0x2f, 0x05, 0x2d, 0xe7, 0x47, 0x4f, 0xff, 0xe7, 0x32, 0xe3, 0xb7, 0x50, 0x75, 0x30, 0xdc, 0x85, + 0xac, 0x79, 0x8f, 0x1e, 0xb5, 0x5b, 0xd2, 0x36, 0x17, 0x24, 0xb1, 0xea, 0xc3, 0x64, 0x8b, 0xa4, + 0xe1, 0xf4, 0x9f, 0xa8, 0xa8, 0x12, 0x95, 0x1e, 0x88, 0xe0, 0x78, 0xd8, 0xa8, 0x4c, 0xef, 0xf4, + 0xb1, 0x2f, 0x8e, 0x0c, 0x1c, 0x5f, 0xfc, 0x27, 0xdd, 0xcf, 0x46, 0x5d, 0x93, 0xb8, 0x58, 0x14, + 0xdf, 0x3d, 0xb2, 0x3d, 0x60, 0xe9, 0x38, 0x3d, 0xa0, 0xfe, 0x4b, 0x0d, 0xad, 0x8c, 0x94, 0x62, + 0xfc, 0x76, 0x26, 0x2d, 0xbe, 0x9e, 0x4b, 0x8b, 0x6b, 0x23, 0x08, 0x67, 0x90, 0x15, 0x8b, 0x73, + 0x95, 0x76, 0x96, 0xb9, 0xaa, 0x74, 0xdc, 0x5c, 0x35, 0x37, 0x39, 0x57, 0xe5, 0x0c, 0x55, 0x3e, + 0x96, 0xa1, 0x06, 0x68, 0x29, 0xd7, 0x51, 0xb0, 0x7f, 0x56, 0x38, 0x6e, 0x40, 0x3b, 0x10, 0x1b, + 0x72, 0xd0, 0x14, 0x37, 0xaa, 0x6d, 0xb9, 0x4e, 0x62, 0x08, 0xf6, 0x15, 0x29, 0xe8, 0xec, 0xd3, + 0xee, 0xb0, 0x07, 0xee, 0xae, 0x72, 0xf0, 0xf8, 0x2b, 0xd2, 0x76, 0xb4, 0x41, 0x12, 0x18, 0xfd, + 0xa3, 0x12, 0xaa, 0xa5, 0x6f, 0x1c, 0xc7, 0xf8, 0xa0, 0xf5, 0x03, 0x05, 0x55, 0x2d, 0xd7, 0xf5, + 0x42, 0x4b, 0x74, 0x86, 0xa2, 0x21, 0xb8, 0x37, 0xfb, 0x2d, 0xc7, 0xb8, 0x9b, 0x50, 0x13, 0x1f, + 0x11, 0xe2, 0x10, 0x4f, 0xed, 0x90, 0x34, 0x53, 0x7c, 0x4f, 0xb6, 0x83, 0xda, 0x2c, 0xed, 0x60, + 0x25, 0xd7, 0x0a, 0x82, 0xd6, 0xfc, 0x38, 0x7e, 0x4b, 0x59, 0xad, 0x25, 0x41, 0x9b, 0xc0, 0x60, + 0x23, 0x63, 0xdb, 0x39, 0x6e, 0xdb, 0xc5, 0x09, 0x97, 0xb0, 0x7c, 0xaf, 0x59, 0x3e, 0xa3, 0x5e, + 0xb3, 0x71, 0x1b, 0x2d, 0xe7, 0x95, 0x3b, 0xcd, 0x17, 0x04, 0xf3, 0xb5, 0xa7, 0x7f, 0xbf, 0x74, + 0xee, 0x19, 0xfc, 0xfe, 0x04, 0xbf, 0xef, 0x7d, 0x7c, 0x49, 0x79, 0x0a, 0xbf, 0x67, 0xf0, 0xfb, + 0x1b, 0xfc, 0x7e, 0xfa, 0x8f, 0x4b, 0xe7, 0xbe, 0xa6, 0x1e, 0x5e, 0xff, 0x6f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x9e, 0x86, 0x6e, 0x0e, 0x79, 0x25, 0x00, 0x00, +} diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/generated.proto b/vendor/github.com/openshift/origin/pkg/image/api/v1/generated.proto index 83b15114..fe5371b2 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/generated.proto +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/generated.proto @@ -5,7 +5,6 @@ syntax = 'proto2'; package github.com.openshift.origin.pkg.image.api.v1; -import "k8s.io/kubernetes/pkg/api/resource/generated.proto"; import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; import "k8s.io/kubernetes/pkg/runtime/generated.proto"; @@ -116,36 +115,38 @@ message ImageList { // ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims // as long as the signature is trusted. Based on this information it is possible to restrict runnable images // to those matching cluster-wide policy. -// There are two mandatory fields provided by client: Type and Content. They should be parsed by clients doing -// image verification. The others are parsed from signature's content by the server. They serve just an -// informative purpose. +// Mandatory fields should be parsed by clients doing image verification. The others are parsed from +// signature's content by the server. They serve just an informative purpose. message ImageSignature { + // Standard object's metadata. + optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; + // Required: Describes a type of stored blob. - optional string type = 1; + optional string type = 2; // Required: An opaque binary string which is an image's signature. - optional bytes content = 2; + optional bytes content = 3; // Conditions represent the latest available observations of a signature's current state. - repeated SignatureCondition conditions = 3; + repeated SignatureCondition conditions = 4; // A human readable string representing image's identity. It could be a product name and version, or an // image pull spec (e.g. "registry.access.redhat.com/rhel7/rhel:7.2"). - optional string imageIdentity = 4; + optional string imageIdentity = 5; // Contains claims from the signature. - map signedClaims = 5; + map signedClaims = 6; // If specified, it is the time of signature's creation. - optional k8s.io.kubernetes.pkg.api.unversioned.Time created = 6; + optional k8s.io.kubernetes.pkg.api.unversioned.Time created = 7; // If specified, it holds information about an issuer of signing certificate or key (a person or entity // who signed the signing certificate or key). - optional SignatureIssuer issuedBy = 7; + optional SignatureIssuer issuedBy = 8; // If specified, it holds information about a subject of signing certificate or key (a person or entity // who signed the image). - optional SignatureSubject issuedTo = 8; + optional SignatureSubject issuedTo = 9; } // ImageStream stores a mapping of tags to images, metadata overrides that are applied @@ -321,7 +322,7 @@ message RepositoryImportStatus { // SignatureCondition describes an image signature condition of particular kind at particular probe time. message SignatureCondition { - // Type of job condition, Complete or Failed. + // Type of signature condition, Complete or Failed. optional string type = 1; // Status of the condition, one of True, False, Unknown. diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/register.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/register.go index 74189d47..4479e4ac 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/register.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/register.go @@ -13,19 +13,17 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - docker10.AddToScheme(scheme) - dockerpre012.AddToScheme(scheme) - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs, addDefaultingFuncs, docker10.AddToScheme, dockerpre012.AddToScheme) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Image{}, &ImageList{}, + &ImageSignature{}, &ImageStream{}, &ImageStreamList{}, &ImageStreamMapping{}, @@ -34,10 +32,12 @@ func addKnownTypes(scheme *runtime.Scheme) { &ImageStreamImage{}, &ImageStreamImport{}, ) + return nil } func (obj *Image) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *ImageList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *ImageSignature) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *ImageStream) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *ImageStreamList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } func (obj *ImageStreamMapping) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/swagger_doc.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/swagger_doc.go index 27d8382d..5c714856 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/swagger_doc.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/swagger_doc.go @@ -81,7 +81,8 @@ func (ImageList) SwaggerDoc() map[string]string { } var map_ImageSignature = map[string]string{ - "": "ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims as long as the signature is trusted. Based on this information it is possible to restrict runnable images to those matching cluster-wide policy. There are two mandatory fields provided by client: Type and Content. They should be parsed by clients doing image verification. The others are parsed from signature's content by the server. They serve just an informative purpose.", + "": "ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims as long as the signature is trusted. Based on this information it is possible to restrict runnable images to those matching cluster-wide policy. Mandatory fields should be parsed by clients doing image verification. The others are parsed from signature's content by the server. They serve just an informative purpose.", + "metadata": "Standard object's metadata.", "type": "Required: Describes a type of stored blob.", "content": "Required: An opaque binary string which is an image's signature.", "conditions": "Conditions represent the latest available observations of a signature's current state.", @@ -249,7 +250,7 @@ func (RepositoryImportStatus) SwaggerDoc() map[string]string { var map_SignatureCondition = map[string]string{ "": "SignatureCondition describes an image signature condition of particular kind at particular probe time.", - "type": "Type of job condition, Complete or Failed.", + "type": "Type of signature condition, Complete or Failed.", "status": "Status of the condition, one of True, False, Unknown.", "lastProbeTime": "Last time the condition was checked.", "lastTransitionTime": "Last time the condition transit from one status to another.", diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/types.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/types.go index 96c8d8b1..33ecf74c 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/types.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/types.go @@ -35,7 +35,7 @@ type Image struct { // DockerImageLayers represents the layers in the image. May not be set if the image does not define that data. DockerImageLayers []ImageLayer `json:"dockerImageLayers" protobuf:"bytes,6,rep,name=dockerImageLayers"` // Signatures holds all signatures of the image. - Signatures []ImageSignature `json:"signatures,omitempty" protobuf:"bytes,7,rep,name=signatures"` + Signatures []ImageSignature `json:"signatures,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=signatures"` // DockerImageSignatures provides the signatures as opaque blobs. This is a part of manifest schema v1. DockerImageSignatures [][]byte `json:"dockerImageSignatures,omitempty" protobuf:"bytes,8,rep,name=dockerImageSignatures"` // DockerImageManifestMediaType specifies the mediaType of manifest. This is a part of manifest schema v2. @@ -57,33 +57,36 @@ type ImageLayer struct { // ImageSignature holds a signature of an image. It allows to verify image identity and possibly other claims // as long as the signature is trusted. Based on this information it is possible to restrict runnable images // to those matching cluster-wide policy. -// There are two mandatory fields provided by client: Type and Content. They should be parsed by clients doing -// image verification. The others are parsed from signature's content by the server. They serve just an -// informative purpose. +// Mandatory fields should be parsed by clients doing image verification. The others are parsed from +// signature's content by the server. They serve just an informative purpose. type ImageSignature struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + kapi.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Required: Describes a type of stored blob. - Type string `json:"type" protobuf:"bytes,1,opt,name=type"` + Type string `json:"type" protobuf:"bytes,2,opt,name=type"` // Required: An opaque binary string which is an image's signature. - Content []byte `json:"content" protobuf:"bytes,2,opt,name=content"` + Content []byte `json:"content" protobuf:"bytes,3,opt,name=content"` // Conditions represent the latest available observations of a signature's current state. - Conditions []SignatureCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,3,rep,name=conditions"` + Conditions []SignatureCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,4,rep,name=conditions"` // Following metadata fields will be set by server if the signature content is successfully parsed and // the information available. // A human readable string representing image's identity. It could be a product name and version, or an // image pull spec (e.g. "registry.access.redhat.com/rhel7/rhel:7.2"). - ImageIdentity string `json:"imageIdentity,omitempty" protobuf:"bytes,4,opt,name=imageIdentity"` + ImageIdentity string `json:"imageIdentity,omitempty" protobuf:"bytes,5,opt,name=imageIdentity"` // Contains claims from the signature. - SignedClaims map[string]string `json:"signedClaims,omitempty" protobuf:"bytes,5,rep,name=signedClaims"` + SignedClaims map[string]string `json:"signedClaims,omitempty" protobuf:"bytes,6,rep,name=signedClaims"` // If specified, it is the time of signature's creation. - Created *unversioned.Time `json:"created,omitempty" protobuf:"bytes,6,opt,name=created"` + Created *unversioned.Time `json:"created,omitempty" protobuf:"bytes,7,opt,name=created"` // If specified, it holds information about an issuer of signing certificate or key (a person or entity // who signed the signing certificate or key). - IssuedBy *SignatureIssuer `json:"issuedBy,omitempty" protobuf:"bytes,7,opt,name=issuedBy"` + IssuedBy *SignatureIssuer `json:"issuedBy,omitempty" protobuf:"bytes,8,opt,name=issuedBy"` // If specified, it holds information about a subject of signing certificate or key (a person or entity // who signed the image). - IssuedTo *SignatureSubject `json:"issuedTo,omitempty" protobuf:"bytes,8,opt,name=issuedTo"` + IssuedTo *SignatureSubject `json:"issuedTo,omitempty" protobuf:"bytes,9,opt,name=issuedTo"` } /// SignatureConditionType is a type of image signature condition. @@ -91,7 +94,7 @@ type SignatureConditionType string // SignatureCondition describes an image signature condition of particular kind at particular probe time. type SignatureCondition struct { - // Type of job condition, Complete or Failed. + // Type of signature condition, Complete or Failed. Type SignatureConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=SignatureConditionType"` // Status of the condition, one of True, False, Unknown. Status kapi.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=k8s.io/kubernetes/pkg/api/v1.ConditionStatus"` diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/conversion_generated.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/zz_generated.conversion.go similarity index 65% rename from vendor/github.com/openshift/origin/pkg/image/api/v1/conversion_generated.go rename to vendor/github.com/openshift/origin/pkg/image/api/v1/zz_generated.conversion.go index d01c1c65..c74c1eca 100644 --- a/vendor/github.com/openshift/origin/pkg/image/api/v1/conversion_generated.go +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/zz_generated.conversion.go @@ -5,14 +5,21 @@ package v1 import ( - image_api "github.com/openshift/origin/pkg/image/api" - api "k8s.io/kubernetes/pkg/api" + api "github.com/openshift/origin/pkg/image/api" + pkg_api "k8s.io/kubernetes/pkg/api" api_v1 "k8s.io/kubernetes/pkg/api/v1" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1_DockerImageReference_To_api_DockerImageReference, Convert_api_DockerImageReference_To_v1_DockerImageReference, Convert_v1_Image_To_api_Image, @@ -69,13 +76,10 @@ func init() { Convert_api_TagImportPolicy_To_v1_TagImportPolicy, Convert_v1_TagReference_To_api_TagReference, Convert_api_TagReference_To_v1_TagReference, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } -func autoConvert_v1_DockerImageReference_To_api_DockerImageReference(in *DockerImageReference, out *image_api.DockerImageReference, s conversion.Scope) error { +func autoConvert_v1_DockerImageReference_To_api_DockerImageReference(in *DockerImageReference, out *api.DockerImageReference, s conversion.Scope) error { out.Registry = in.Registry out.Namespace = in.Namespace out.Name = in.Name @@ -84,11 +88,11 @@ func autoConvert_v1_DockerImageReference_To_api_DockerImageReference(in *DockerI return nil } -func Convert_v1_DockerImageReference_To_api_DockerImageReference(in *DockerImageReference, out *image_api.DockerImageReference, s conversion.Scope) error { +func Convert_v1_DockerImageReference_To_api_DockerImageReference(in *DockerImageReference, out *api.DockerImageReference, s conversion.Scope) error { return autoConvert_v1_DockerImageReference_To_api_DockerImageReference(in, out, s) } -func autoConvert_api_DockerImageReference_To_v1_DockerImageReference(in *image_api.DockerImageReference, out *DockerImageReference, s conversion.Scope) error { +func autoConvert_api_DockerImageReference_To_v1_DockerImageReference(in *api.DockerImageReference, out *DockerImageReference, s conversion.Scope) error { out.Registry = in.Registry out.Namespace = in.Namespace out.Name = in.Name @@ -97,18 +101,18 @@ func autoConvert_api_DockerImageReference_To_v1_DockerImageReference(in *image_a return nil } -func Convert_api_DockerImageReference_To_v1_DockerImageReference(in *image_api.DockerImageReference, out *DockerImageReference, s conversion.Scope) error { +func Convert_api_DockerImageReference_To_v1_DockerImageReference(in *api.DockerImageReference, out *DockerImageReference, s conversion.Scope) error { return autoConvert_api_DockerImageReference_To_v1_DockerImageReference(in, out, s) } -func autoConvert_v1_ImageImportSpec_To_api_ImageImportSpec(in *ImageImportSpec, out *image_api.ImageImportSpec, s conversion.Scope) error { +func autoConvert_v1_ImageImportSpec_To_api_ImageImportSpec(in *ImageImportSpec, out *api.ImageImportSpec, s conversion.Scope) error { SetDefaults_ImageImportSpec(in) if err := api_v1.Convert_v1_ObjectReference_To_api_ObjectReference(&in.From, &out.From, s); err != nil { return err } if in.To != nil { in, out := &in.To, &out.To - *out = new(api.LocalObjectReference) + *out = new(pkg_api.LocalObjectReference) if err := api_v1.Convert_v1_LocalObjectReference_To_api_LocalObjectReference(*in, *out, s); err != nil { return err } @@ -122,11 +126,11 @@ func autoConvert_v1_ImageImportSpec_To_api_ImageImportSpec(in *ImageImportSpec, return nil } -func Convert_v1_ImageImportSpec_To_api_ImageImportSpec(in *ImageImportSpec, out *image_api.ImageImportSpec, s conversion.Scope) error { +func Convert_v1_ImageImportSpec_To_api_ImageImportSpec(in *ImageImportSpec, out *api.ImageImportSpec, s conversion.Scope) error { return autoConvert_v1_ImageImportSpec_To_api_ImageImportSpec(in, out, s) } -func autoConvert_api_ImageImportSpec_To_v1_ImageImportSpec(in *image_api.ImageImportSpec, out *ImageImportSpec, s conversion.Scope) error { +func autoConvert_api_ImageImportSpec_To_v1_ImageImportSpec(in *api.ImageImportSpec, out *ImageImportSpec, s conversion.Scope) error { if err := api_v1.Convert_api_ObjectReference_To_v1_ObjectReference(&in.From, &out.From, s); err != nil { return err } @@ -146,15 +150,15 @@ func autoConvert_api_ImageImportSpec_To_v1_ImageImportSpec(in *image_api.ImageIm return nil } -func Convert_api_ImageImportSpec_To_v1_ImageImportSpec(in *image_api.ImageImportSpec, out *ImageImportSpec, s conversion.Scope) error { +func Convert_api_ImageImportSpec_To_v1_ImageImportSpec(in *api.ImageImportSpec, out *ImageImportSpec, s conversion.Scope) error { return autoConvert_api_ImageImportSpec_To_v1_ImageImportSpec(in, out, s) } -func autoConvert_v1_ImageImportStatus_To_api_ImageImportStatus(in *ImageImportStatus, out *image_api.ImageImportStatus, s conversion.Scope) error { +func autoConvert_v1_ImageImportStatus_To_api_ImageImportStatus(in *ImageImportStatus, out *api.ImageImportStatus, s conversion.Scope) error { out.Status = in.Status if in.Image != nil { in, out := &in.Image, &out.Image - *out = new(image_api.Image) + *out = new(api.Image) if err := Convert_v1_Image_To_api_Image(*in, *out, s); err != nil { return err } @@ -165,11 +169,11 @@ func autoConvert_v1_ImageImportStatus_To_api_ImageImportStatus(in *ImageImportSt return nil } -func Convert_v1_ImageImportStatus_To_api_ImageImportStatus(in *ImageImportStatus, out *image_api.ImageImportStatus, s conversion.Scope) error { +func Convert_v1_ImageImportStatus_To_api_ImageImportStatus(in *ImageImportStatus, out *api.ImageImportStatus, s conversion.Scope) error { return autoConvert_v1_ImageImportStatus_To_api_ImageImportStatus(in, out, s) } -func autoConvert_api_ImageImportStatus_To_v1_ImageImportStatus(in *image_api.ImageImportStatus, out *ImageImportStatus, s conversion.Scope) error { +func autoConvert_api_ImageImportStatus_To_v1_ImageImportStatus(in *api.ImageImportStatus, out *ImageImportStatus, s conversion.Scope) error { out.Tag = in.Tag out.Status = in.Status if in.Image != nil { @@ -184,42 +188,42 @@ func autoConvert_api_ImageImportStatus_To_v1_ImageImportStatus(in *image_api.Ima return nil } -func Convert_api_ImageImportStatus_To_v1_ImageImportStatus(in *image_api.ImageImportStatus, out *ImageImportStatus, s conversion.Scope) error { +func Convert_api_ImageImportStatus_To_v1_ImageImportStatus(in *api.ImageImportStatus, out *ImageImportStatus, s conversion.Scope) error { return autoConvert_api_ImageImportStatus_To_v1_ImageImportStatus(in, out, s) } -func autoConvert_v1_ImageLayer_To_api_ImageLayer(in *ImageLayer, out *image_api.ImageLayer, s conversion.Scope) error { +func autoConvert_v1_ImageLayer_To_api_ImageLayer(in *ImageLayer, out *api.ImageLayer, s conversion.Scope) error { out.Name = in.Name out.LayerSize = in.LayerSize out.MediaType = in.MediaType return nil } -func Convert_v1_ImageLayer_To_api_ImageLayer(in *ImageLayer, out *image_api.ImageLayer, s conversion.Scope) error { +func Convert_v1_ImageLayer_To_api_ImageLayer(in *ImageLayer, out *api.ImageLayer, s conversion.Scope) error { return autoConvert_v1_ImageLayer_To_api_ImageLayer(in, out, s) } -func autoConvert_api_ImageLayer_To_v1_ImageLayer(in *image_api.ImageLayer, out *ImageLayer, s conversion.Scope) error { +func autoConvert_api_ImageLayer_To_v1_ImageLayer(in *api.ImageLayer, out *ImageLayer, s conversion.Scope) error { out.Name = in.Name out.LayerSize = in.LayerSize out.MediaType = in.MediaType return nil } -func Convert_api_ImageLayer_To_v1_ImageLayer(in *image_api.ImageLayer, out *ImageLayer, s conversion.Scope) error { +func Convert_api_ImageLayer_To_v1_ImageLayer(in *api.ImageLayer, out *ImageLayer, s conversion.Scope) error { return autoConvert_api_ImageLayer_To_v1_ImageLayer(in, out, s) } -func autoConvert_v1_ImageList_To_api_ImageList(in *ImageList, out *image_api.ImageList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_ImageList_To_api_ImageList(in *ImageList, out *api.ImageList, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { return err } if in.Items != nil { in, out := &in.Items, &out.Items - *out = make([]image_api.Image, len(*in)) + *out = make([]api.Image, len(*in)) for i := range *in { if err := Convert_v1_Image_To_api_Image(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -231,15 +235,15 @@ func autoConvert_v1_ImageList_To_api_ImageList(in *ImageList, out *image_api.Ima return nil } -func Convert_v1_ImageList_To_api_ImageList(in *ImageList, out *image_api.ImageList, s conversion.Scope) error { +func Convert_v1_ImageList_To_api_ImageList(in *ImageList, out *api.ImageList, s conversion.Scope) error { return autoConvert_v1_ImageList_To_api_ImageList(in, out, s) } -func autoConvert_api_ImageList_To_v1_ImageList(in *image_api.ImageList, out *ImageList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_ImageList_To_v1_ImageList(in *api.ImageList, out *ImageList, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { return err } if in.Items != nil { @@ -256,18 +260,24 @@ func autoConvert_api_ImageList_To_v1_ImageList(in *image_api.ImageList, out *Ima return nil } -func Convert_api_ImageList_To_v1_ImageList(in *image_api.ImageList, out *ImageList, s conversion.Scope) error { +func Convert_api_ImageList_To_v1_ImageList(in *api.ImageList, out *ImageList, s conversion.Scope) error { return autoConvert_api_ImageList_To_v1_ImageList(in, out, s) } -func autoConvert_v1_ImageSignature_To_api_ImageSignature(in *ImageSignature, out *image_api.ImageSignature, s conversion.Scope) error { +func autoConvert_v1_ImageSignature_To_api_ImageSignature(in *ImageSignature, out *api.ImageSignature, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api_v1.Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } out.Type = in.Type if err := conversion.Convert_Slice_byte_To_Slice_byte(&in.Content, &out.Content, s); err != nil { return err } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]image_api.SignatureCondition, len(*in)) + *out = make([]api.SignatureCondition, len(*in)) for i := range *in { if err := Convert_v1_SignatureCondition_To_api_SignatureCondition(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -281,7 +291,7 @@ func autoConvert_v1_ImageSignature_To_api_ImageSignature(in *ImageSignature, out out.Created = in.Created if in.IssuedBy != nil { in, out := &in.IssuedBy, &out.IssuedBy - *out = new(image_api.SignatureIssuer) + *out = new(api.SignatureIssuer) if err := Convert_v1_SignatureIssuer_To_api_SignatureIssuer(*in, *out, s); err != nil { return err } @@ -290,7 +300,7 @@ func autoConvert_v1_ImageSignature_To_api_ImageSignature(in *ImageSignature, out } if in.IssuedTo != nil { in, out := &in.IssuedTo, &out.IssuedTo - *out = new(image_api.SignatureSubject) + *out = new(api.SignatureSubject) if err := Convert_v1_SignatureSubject_To_api_SignatureSubject(*in, *out, s); err != nil { return err } @@ -300,11 +310,17 @@ func autoConvert_v1_ImageSignature_To_api_ImageSignature(in *ImageSignature, out return nil } -func Convert_v1_ImageSignature_To_api_ImageSignature(in *ImageSignature, out *image_api.ImageSignature, s conversion.Scope) error { +func Convert_v1_ImageSignature_To_api_ImageSignature(in *ImageSignature, out *api.ImageSignature, s conversion.Scope) error { return autoConvert_v1_ImageSignature_To_api_ImageSignature(in, out, s) } -func autoConvert_api_ImageSignature_To_v1_ImageSignature(in *image_api.ImageSignature, out *ImageSignature, s conversion.Scope) error { +func autoConvert_api_ImageSignature_To_v1_ImageSignature(in *api.ImageSignature, out *ImageSignature, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api_v1.Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } out.Type = in.Type if err := conversion.Convert_Slice_byte_To_Slice_byte(&in.Content, &out.Content, s); err != nil { return err @@ -344,12 +360,12 @@ func autoConvert_api_ImageSignature_To_v1_ImageSignature(in *image_api.ImageSign return nil } -func Convert_api_ImageSignature_To_v1_ImageSignature(in *image_api.ImageSignature, out *ImageSignature, s conversion.Scope) error { +func Convert_api_ImageSignature_To_v1_ImageSignature(in *api.ImageSignature, out *ImageSignature, s conversion.Scope) error { return autoConvert_api_ImageSignature_To_v1_ImageSignature(in, out, s) } -func autoConvert_v1_ImageStream_To_api_ImageStream(in *ImageStream, out *image_api.ImageStream, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_ImageStream_To_api_ImageStream(in *ImageStream, out *api.ImageStream, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -364,12 +380,12 @@ func autoConvert_v1_ImageStream_To_api_ImageStream(in *ImageStream, out *image_a return nil } -func Convert_v1_ImageStream_To_api_ImageStream(in *ImageStream, out *image_api.ImageStream, s conversion.Scope) error { +func Convert_v1_ImageStream_To_api_ImageStream(in *ImageStream, out *api.ImageStream, s conversion.Scope) error { return autoConvert_v1_ImageStream_To_api_ImageStream(in, out, s) } -func autoConvert_api_ImageStream_To_v1_ImageStream(in *image_api.ImageStream, out *ImageStream, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_ImageStream_To_v1_ImageStream(in *api.ImageStream, out *ImageStream, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -384,12 +400,12 @@ func autoConvert_api_ImageStream_To_v1_ImageStream(in *image_api.ImageStream, ou return nil } -func Convert_api_ImageStream_To_v1_ImageStream(in *image_api.ImageStream, out *ImageStream, s conversion.Scope) error { +func Convert_api_ImageStream_To_v1_ImageStream(in *api.ImageStream, out *ImageStream, s conversion.Scope) error { return autoConvert_api_ImageStream_To_v1_ImageStream(in, out, s) } -func autoConvert_v1_ImageStreamImage_To_api_ImageStreamImage(in *ImageStreamImage, out *image_api.ImageStreamImage, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_ImageStreamImage_To_api_ImageStreamImage(in *ImageStreamImage, out *api.ImageStreamImage, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -401,12 +417,12 @@ func autoConvert_v1_ImageStreamImage_To_api_ImageStreamImage(in *ImageStreamImag return nil } -func Convert_v1_ImageStreamImage_To_api_ImageStreamImage(in *ImageStreamImage, out *image_api.ImageStreamImage, s conversion.Scope) error { +func Convert_v1_ImageStreamImage_To_api_ImageStreamImage(in *ImageStreamImage, out *api.ImageStreamImage, s conversion.Scope) error { return autoConvert_v1_ImageStreamImage_To_api_ImageStreamImage(in, out, s) } -func autoConvert_api_ImageStreamImage_To_v1_ImageStreamImage(in *image_api.ImageStreamImage, out *ImageStreamImage, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_ImageStreamImage_To_v1_ImageStreamImage(in *api.ImageStreamImage, out *ImageStreamImage, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -418,12 +434,12 @@ func autoConvert_api_ImageStreamImage_To_v1_ImageStreamImage(in *image_api.Image return nil } -func Convert_api_ImageStreamImage_To_v1_ImageStreamImage(in *image_api.ImageStreamImage, out *ImageStreamImage, s conversion.Scope) error { +func Convert_api_ImageStreamImage_To_v1_ImageStreamImage(in *api.ImageStreamImage, out *ImageStreamImage, s conversion.Scope) error { return autoConvert_api_ImageStreamImage_To_v1_ImageStreamImage(in, out, s) } -func autoConvert_v1_ImageStreamImport_To_api_ImageStreamImport(in *ImageStreamImport, out *image_api.ImageStreamImport, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_ImageStreamImport_To_api_ImageStreamImport(in *ImageStreamImport, out *api.ImageStreamImport, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -438,12 +454,12 @@ func autoConvert_v1_ImageStreamImport_To_api_ImageStreamImport(in *ImageStreamIm return nil } -func Convert_v1_ImageStreamImport_To_api_ImageStreamImport(in *ImageStreamImport, out *image_api.ImageStreamImport, s conversion.Scope) error { +func Convert_v1_ImageStreamImport_To_api_ImageStreamImport(in *ImageStreamImport, out *api.ImageStreamImport, s conversion.Scope) error { return autoConvert_v1_ImageStreamImport_To_api_ImageStreamImport(in, out, s) } -func autoConvert_api_ImageStreamImport_To_v1_ImageStreamImport(in *image_api.ImageStreamImport, out *ImageStreamImport, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_ImageStreamImport_To_v1_ImageStreamImport(in *api.ImageStreamImport, out *ImageStreamImport, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -458,15 +474,15 @@ func autoConvert_api_ImageStreamImport_To_v1_ImageStreamImport(in *image_api.Ima return nil } -func Convert_api_ImageStreamImport_To_v1_ImageStreamImport(in *image_api.ImageStreamImport, out *ImageStreamImport, s conversion.Scope) error { +func Convert_api_ImageStreamImport_To_v1_ImageStreamImport(in *api.ImageStreamImport, out *ImageStreamImport, s conversion.Scope) error { return autoConvert_api_ImageStreamImport_To_v1_ImageStreamImport(in, out, s) } -func autoConvert_v1_ImageStreamImportSpec_To_api_ImageStreamImportSpec(in *ImageStreamImportSpec, out *image_api.ImageStreamImportSpec, s conversion.Scope) error { +func autoConvert_v1_ImageStreamImportSpec_To_api_ImageStreamImportSpec(in *ImageStreamImportSpec, out *api.ImageStreamImportSpec, s conversion.Scope) error { out.Import = in.Import if in.Repository != nil { in, out := &in.Repository, &out.Repository - *out = new(image_api.RepositoryImportSpec) + *out = new(api.RepositoryImportSpec) if err := Convert_v1_RepositoryImportSpec_To_api_RepositoryImportSpec(*in, *out, s); err != nil { return err } @@ -475,7 +491,7 @@ func autoConvert_v1_ImageStreamImportSpec_To_api_ImageStreamImportSpec(in *Image } if in.Images != nil { in, out := &in.Images, &out.Images - *out = make([]image_api.ImageImportSpec, len(*in)) + *out = make([]api.ImageImportSpec, len(*in)) for i := range *in { if err := Convert_v1_ImageImportSpec_To_api_ImageImportSpec(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -487,11 +503,11 @@ func autoConvert_v1_ImageStreamImportSpec_To_api_ImageStreamImportSpec(in *Image return nil } -func Convert_v1_ImageStreamImportSpec_To_api_ImageStreamImportSpec(in *ImageStreamImportSpec, out *image_api.ImageStreamImportSpec, s conversion.Scope) error { +func Convert_v1_ImageStreamImportSpec_To_api_ImageStreamImportSpec(in *ImageStreamImportSpec, out *api.ImageStreamImportSpec, s conversion.Scope) error { return autoConvert_v1_ImageStreamImportSpec_To_api_ImageStreamImportSpec(in, out, s) } -func autoConvert_api_ImageStreamImportSpec_To_v1_ImageStreamImportSpec(in *image_api.ImageStreamImportSpec, out *ImageStreamImportSpec, s conversion.Scope) error { +func autoConvert_api_ImageStreamImportSpec_To_v1_ImageStreamImportSpec(in *api.ImageStreamImportSpec, out *ImageStreamImportSpec, s conversion.Scope) error { out.Import = in.Import if in.Repository != nil { in, out := &in.Repository, &out.Repository @@ -516,14 +532,14 @@ func autoConvert_api_ImageStreamImportSpec_To_v1_ImageStreamImportSpec(in *image return nil } -func Convert_api_ImageStreamImportSpec_To_v1_ImageStreamImportSpec(in *image_api.ImageStreamImportSpec, out *ImageStreamImportSpec, s conversion.Scope) error { +func Convert_api_ImageStreamImportSpec_To_v1_ImageStreamImportSpec(in *api.ImageStreamImportSpec, out *ImageStreamImportSpec, s conversion.Scope) error { return autoConvert_api_ImageStreamImportSpec_To_v1_ImageStreamImportSpec(in, out, s) } -func autoConvert_v1_ImageStreamImportStatus_To_api_ImageStreamImportStatus(in *ImageStreamImportStatus, out *image_api.ImageStreamImportStatus, s conversion.Scope) error { +func autoConvert_v1_ImageStreamImportStatus_To_api_ImageStreamImportStatus(in *ImageStreamImportStatus, out *api.ImageStreamImportStatus, s conversion.Scope) error { if in.Import != nil { in, out := &in.Import, &out.Import - *out = new(image_api.ImageStream) + *out = new(api.ImageStream) if err := Convert_v1_ImageStream_To_api_ImageStream(*in, *out, s); err != nil { return err } @@ -532,7 +548,7 @@ func autoConvert_v1_ImageStreamImportStatus_To_api_ImageStreamImportStatus(in *I } if in.Repository != nil { in, out := &in.Repository, &out.Repository - *out = new(image_api.RepositoryImportStatus) + *out = new(api.RepositoryImportStatus) if err := Convert_v1_RepositoryImportStatus_To_api_RepositoryImportStatus(*in, *out, s); err != nil { return err } @@ -541,7 +557,7 @@ func autoConvert_v1_ImageStreamImportStatus_To_api_ImageStreamImportStatus(in *I } if in.Images != nil { in, out := &in.Images, &out.Images - *out = make([]image_api.ImageImportStatus, len(*in)) + *out = make([]api.ImageImportStatus, len(*in)) for i := range *in { if err := Convert_v1_ImageImportStatus_To_api_ImageImportStatus(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -553,11 +569,11 @@ func autoConvert_v1_ImageStreamImportStatus_To_api_ImageStreamImportStatus(in *I return nil } -func Convert_v1_ImageStreamImportStatus_To_api_ImageStreamImportStatus(in *ImageStreamImportStatus, out *image_api.ImageStreamImportStatus, s conversion.Scope) error { +func Convert_v1_ImageStreamImportStatus_To_api_ImageStreamImportStatus(in *ImageStreamImportStatus, out *api.ImageStreamImportStatus, s conversion.Scope) error { return autoConvert_v1_ImageStreamImportStatus_To_api_ImageStreamImportStatus(in, out, s) } -func autoConvert_api_ImageStreamImportStatus_To_v1_ImageStreamImportStatus(in *image_api.ImageStreamImportStatus, out *ImageStreamImportStatus, s conversion.Scope) error { +func autoConvert_api_ImageStreamImportStatus_To_v1_ImageStreamImportStatus(in *api.ImageStreamImportStatus, out *ImageStreamImportStatus, s conversion.Scope) error { if in.Import != nil { in, out := &in.Import, &out.Import *out = new(ImageStream) @@ -590,20 +606,20 @@ func autoConvert_api_ImageStreamImportStatus_To_v1_ImageStreamImportStatus(in *i return nil } -func Convert_api_ImageStreamImportStatus_To_v1_ImageStreamImportStatus(in *image_api.ImageStreamImportStatus, out *ImageStreamImportStatus, s conversion.Scope) error { +func Convert_api_ImageStreamImportStatus_To_v1_ImageStreamImportStatus(in *api.ImageStreamImportStatus, out *ImageStreamImportStatus, s conversion.Scope) error { return autoConvert_api_ImageStreamImportStatus_To_v1_ImageStreamImportStatus(in, out, s) } -func autoConvert_v1_ImageStreamList_To_api_ImageStreamList(in *ImageStreamList, out *image_api.ImageStreamList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_ImageStreamList_To_api_ImageStreamList(in *ImageStreamList, out *api.ImageStreamList, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { return err } if in.Items != nil { in, out := &in.Items, &out.Items - *out = make([]image_api.ImageStream, len(*in)) + *out = make([]api.ImageStream, len(*in)) for i := range *in { if err := Convert_v1_ImageStream_To_api_ImageStream(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -615,15 +631,15 @@ func autoConvert_v1_ImageStreamList_To_api_ImageStreamList(in *ImageStreamList, return nil } -func Convert_v1_ImageStreamList_To_api_ImageStreamList(in *ImageStreamList, out *image_api.ImageStreamList, s conversion.Scope) error { +func Convert_v1_ImageStreamList_To_api_ImageStreamList(in *ImageStreamList, out *api.ImageStreamList, s conversion.Scope) error { return autoConvert_v1_ImageStreamList_To_api_ImageStreamList(in, out, s) } -func autoConvert_api_ImageStreamList_To_v1_ImageStreamList(in *image_api.ImageStreamList, out *ImageStreamList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_ImageStreamList_To_v1_ImageStreamList(in *api.ImageStreamList, out *ImageStreamList, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { return err } if in.Items != nil { @@ -640,12 +656,12 @@ func autoConvert_api_ImageStreamList_To_v1_ImageStreamList(in *image_api.ImageSt return nil } -func Convert_api_ImageStreamList_To_v1_ImageStreamList(in *image_api.ImageStreamList, out *ImageStreamList, s conversion.Scope) error { +func Convert_api_ImageStreamList_To_v1_ImageStreamList(in *api.ImageStreamList, out *ImageStreamList, s conversion.Scope) error { return autoConvert_api_ImageStreamList_To_v1_ImageStreamList(in, out, s) } -func autoConvert_v1_ImageStreamMapping_To_api_ImageStreamMapping(in *ImageStreamMapping, out *image_api.ImageStreamMapping, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_ImageStreamMapping_To_api_ImageStreamMapping(in *ImageStreamMapping, out *api.ImageStreamMapping, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -658,8 +674,22 @@ func autoConvert_v1_ImageStreamMapping_To_api_ImageStreamMapping(in *ImageStream return nil } -func autoConvert_v1_ImageStreamTag_To_api_ImageStreamTag(in *ImageStreamTag, out *image_api.ImageStreamTag, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_ImageStreamMapping_To_v1_ImageStreamMapping(in *api.ImageStreamMapping, out *ImageStreamMapping, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api_v1.Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_Image_To_v1_Image(&in.Image, &out.Image, s); err != nil { + return err + } + out.Tag = in.Tag + return nil +} + +func autoConvert_v1_ImageStreamTag_To_api_ImageStreamTag(in *ImageStreamTag, out *api.ImageStreamTag, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -667,7 +697,7 @@ func autoConvert_v1_ImageStreamTag_To_api_ImageStreamTag(in *ImageStreamTag, out } if in.Tag != nil { in, out := &in.Tag, &out.Tag - *out = new(image_api.TagReference) + *out = new(api.TagReference) if err := Convert_v1_TagReference_To_api_TagReference(*in, *out, s); err != nil { return err } @@ -677,7 +707,7 @@ func autoConvert_v1_ImageStreamTag_To_api_ImageStreamTag(in *ImageStreamTag, out out.Generation = in.Generation if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions - *out = make([]image_api.TagEventCondition, len(*in)) + *out = make([]api.TagEventCondition, len(*in)) for i := range *in { if err := Convert_v1_TagEventCondition_To_api_TagEventCondition(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -692,12 +722,12 @@ func autoConvert_v1_ImageStreamTag_To_api_ImageStreamTag(in *ImageStreamTag, out return nil } -func Convert_v1_ImageStreamTag_To_api_ImageStreamTag(in *ImageStreamTag, out *image_api.ImageStreamTag, s conversion.Scope) error { +func Convert_v1_ImageStreamTag_To_api_ImageStreamTag(in *ImageStreamTag, out *api.ImageStreamTag, s conversion.Scope) error { return autoConvert_v1_ImageStreamTag_To_api_ImageStreamTag(in, out, s) } -func autoConvert_api_ImageStreamTag_To_v1_ImageStreamTag(in *image_api.ImageStreamTag, out *ImageStreamTag, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_ImageStreamTag_To_v1_ImageStreamTag(in *api.ImageStreamTag, out *ImageStreamTag, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } if err := api_v1.Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { @@ -730,20 +760,20 @@ func autoConvert_api_ImageStreamTag_To_v1_ImageStreamTag(in *image_api.ImageStre return nil } -func Convert_api_ImageStreamTag_To_v1_ImageStreamTag(in *image_api.ImageStreamTag, out *ImageStreamTag, s conversion.Scope) error { +func Convert_api_ImageStreamTag_To_v1_ImageStreamTag(in *api.ImageStreamTag, out *ImageStreamTag, s conversion.Scope) error { return autoConvert_api_ImageStreamTag_To_v1_ImageStreamTag(in, out, s) } -func autoConvert_v1_ImageStreamTagList_To_api_ImageStreamTagList(in *ImageStreamTagList, out *image_api.ImageStreamTagList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_v1_ImageStreamTagList_To_api_ImageStreamTagList(in *ImageStreamTagList, out *api.ImageStreamTagList, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { return err } if in.Items != nil { in, out := &in.Items, &out.Items - *out = make([]image_api.ImageStreamTag, len(*in)) + *out = make([]api.ImageStreamTag, len(*in)) for i := range *in { if err := Convert_v1_ImageStreamTag_To_api_ImageStreamTag(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -755,15 +785,15 @@ func autoConvert_v1_ImageStreamTagList_To_api_ImageStreamTagList(in *ImageStream return nil } -func Convert_v1_ImageStreamTagList_To_api_ImageStreamTagList(in *ImageStreamTagList, out *image_api.ImageStreamTagList, s conversion.Scope) error { +func Convert_v1_ImageStreamTagList_To_api_ImageStreamTagList(in *ImageStreamTagList, out *api.ImageStreamTagList, s conversion.Scope) error { return autoConvert_v1_ImageStreamTagList_To_api_ImageStreamTagList(in, out, s) } -func autoConvert_api_ImageStreamTagList_To_v1_ImageStreamTagList(in *image_api.ImageStreamTagList, out *ImageStreamTagList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { +func autoConvert_api_ImageStreamTagList_To_v1_ImageStreamTagList(in *api.ImageStreamTagList, out *ImageStreamTagList, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + if err := pkg_api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { return err } if in.Items != nil { @@ -780,11 +810,11 @@ func autoConvert_api_ImageStreamTagList_To_v1_ImageStreamTagList(in *image_api.I return nil } -func Convert_api_ImageStreamTagList_To_v1_ImageStreamTagList(in *image_api.ImageStreamTagList, out *ImageStreamTagList, s conversion.Scope) error { +func Convert_api_ImageStreamTagList_To_v1_ImageStreamTagList(in *api.ImageStreamTagList, out *ImageStreamTagList, s conversion.Scope) error { return autoConvert_api_ImageStreamTagList_To_v1_ImageStreamTagList(in, out, s) } -func autoConvert_v1_RepositoryImportSpec_To_api_RepositoryImportSpec(in *RepositoryImportSpec, out *image_api.RepositoryImportSpec, s conversion.Scope) error { +func autoConvert_v1_RepositoryImportSpec_To_api_RepositoryImportSpec(in *RepositoryImportSpec, out *api.RepositoryImportSpec, s conversion.Scope) error { if err := api_v1.Convert_v1_ObjectReference_To_api_ObjectReference(&in.From, &out.From, s); err != nil { return err } @@ -795,11 +825,11 @@ func autoConvert_v1_RepositoryImportSpec_To_api_RepositoryImportSpec(in *Reposit return nil } -func Convert_v1_RepositoryImportSpec_To_api_RepositoryImportSpec(in *RepositoryImportSpec, out *image_api.RepositoryImportSpec, s conversion.Scope) error { +func Convert_v1_RepositoryImportSpec_To_api_RepositoryImportSpec(in *RepositoryImportSpec, out *api.RepositoryImportSpec, s conversion.Scope) error { return autoConvert_v1_RepositoryImportSpec_To_api_RepositoryImportSpec(in, out, s) } -func autoConvert_api_RepositoryImportSpec_To_v1_RepositoryImportSpec(in *image_api.RepositoryImportSpec, out *RepositoryImportSpec, s conversion.Scope) error { +func autoConvert_api_RepositoryImportSpec_To_v1_RepositoryImportSpec(in *api.RepositoryImportSpec, out *RepositoryImportSpec, s conversion.Scope) error { if err := api_v1.Convert_api_ObjectReference_To_v1_ObjectReference(&in.From, &out.From, s); err != nil { return err } @@ -810,15 +840,15 @@ func autoConvert_api_RepositoryImportSpec_To_v1_RepositoryImportSpec(in *image_a return nil } -func Convert_api_RepositoryImportSpec_To_v1_RepositoryImportSpec(in *image_api.RepositoryImportSpec, out *RepositoryImportSpec, s conversion.Scope) error { +func Convert_api_RepositoryImportSpec_To_v1_RepositoryImportSpec(in *api.RepositoryImportSpec, out *RepositoryImportSpec, s conversion.Scope) error { return autoConvert_api_RepositoryImportSpec_To_v1_RepositoryImportSpec(in, out, s) } -func autoConvert_v1_RepositoryImportStatus_To_api_RepositoryImportStatus(in *RepositoryImportStatus, out *image_api.RepositoryImportStatus, s conversion.Scope) error { +func autoConvert_v1_RepositoryImportStatus_To_api_RepositoryImportStatus(in *RepositoryImportStatus, out *api.RepositoryImportStatus, s conversion.Scope) error { out.Status = in.Status if in.Images != nil { in, out := &in.Images, &out.Images - *out = make([]image_api.ImageImportStatus, len(*in)) + *out = make([]api.ImageImportStatus, len(*in)) for i := range *in { if err := Convert_v1_ImageImportStatus_To_api_ImageImportStatus(&(*in)[i], &(*out)[i], s); err != nil { return err @@ -831,11 +861,11 @@ func autoConvert_v1_RepositoryImportStatus_To_api_RepositoryImportStatus(in *Rep return nil } -func Convert_v1_RepositoryImportStatus_To_api_RepositoryImportStatus(in *RepositoryImportStatus, out *image_api.RepositoryImportStatus, s conversion.Scope) error { +func Convert_v1_RepositoryImportStatus_To_api_RepositoryImportStatus(in *RepositoryImportStatus, out *api.RepositoryImportStatus, s conversion.Scope) error { return autoConvert_v1_RepositoryImportStatus_To_api_RepositoryImportStatus(in, out, s) } -func autoConvert_api_RepositoryImportStatus_To_v1_RepositoryImportStatus(in *image_api.RepositoryImportStatus, out *RepositoryImportStatus, s conversion.Scope) error { +func autoConvert_api_RepositoryImportStatus_To_v1_RepositoryImportStatus(in *api.RepositoryImportStatus, out *RepositoryImportStatus, s conversion.Scope) error { out.Status = in.Status if in.Images != nil { in, out := &in.Images, &out.Images @@ -852,17 +882,17 @@ func autoConvert_api_RepositoryImportStatus_To_v1_RepositoryImportStatus(in *ima return nil } -func Convert_api_RepositoryImportStatus_To_v1_RepositoryImportStatus(in *image_api.RepositoryImportStatus, out *RepositoryImportStatus, s conversion.Scope) error { +func Convert_api_RepositoryImportStatus_To_v1_RepositoryImportStatus(in *api.RepositoryImportStatus, out *RepositoryImportStatus, s conversion.Scope) error { return autoConvert_api_RepositoryImportStatus_To_v1_RepositoryImportStatus(in, out, s) } -func autoConvert_v1_SignatureCondition_To_api_SignatureCondition(in *SignatureCondition, out *image_api.SignatureCondition, s conversion.Scope) error { - out.Type = image_api.SignatureConditionType(in.Type) - out.Status = api.ConditionStatus(in.Status) - if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastProbeTime, &out.LastProbeTime, s); err != nil { +func autoConvert_v1_SignatureCondition_To_api_SignatureCondition(in *SignatureCondition, out *api.SignatureCondition, s conversion.Scope) error { + out.Type = api.SignatureConditionType(in.Type) + out.Status = pkg_api.ConditionStatus(in.Status) + if err := pkg_api.Convert_unversioned_Time_To_unversioned_Time(&in.LastProbeTime, &out.LastProbeTime, s); err != nil { return err } - if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { + if err := pkg_api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { return err } out.Reason = in.Reason @@ -870,17 +900,17 @@ func autoConvert_v1_SignatureCondition_To_api_SignatureCondition(in *SignatureCo return nil } -func Convert_v1_SignatureCondition_To_api_SignatureCondition(in *SignatureCondition, out *image_api.SignatureCondition, s conversion.Scope) error { +func Convert_v1_SignatureCondition_To_api_SignatureCondition(in *SignatureCondition, out *api.SignatureCondition, s conversion.Scope) error { return autoConvert_v1_SignatureCondition_To_api_SignatureCondition(in, out, s) } -func autoConvert_api_SignatureCondition_To_v1_SignatureCondition(in *image_api.SignatureCondition, out *SignatureCondition, s conversion.Scope) error { +func autoConvert_api_SignatureCondition_To_v1_SignatureCondition(in *api.SignatureCondition, out *SignatureCondition, s conversion.Scope) error { out.Type = SignatureConditionType(in.Type) out.Status = api_v1.ConditionStatus(in.Status) - if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastProbeTime, &out.LastProbeTime, s); err != nil { + if err := pkg_api.Convert_unversioned_Time_To_unversioned_Time(&in.LastProbeTime, &out.LastProbeTime, s); err != nil { return err } - if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { + if err := pkg_api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { return err } out.Reason = in.Reason @@ -888,53 +918,53 @@ func autoConvert_api_SignatureCondition_To_v1_SignatureCondition(in *image_api.S return nil } -func Convert_api_SignatureCondition_To_v1_SignatureCondition(in *image_api.SignatureCondition, out *SignatureCondition, s conversion.Scope) error { +func Convert_api_SignatureCondition_To_v1_SignatureCondition(in *api.SignatureCondition, out *SignatureCondition, s conversion.Scope) error { return autoConvert_api_SignatureCondition_To_v1_SignatureCondition(in, out, s) } -func autoConvert_v1_SignatureGenericEntity_To_api_SignatureGenericEntity(in *SignatureGenericEntity, out *image_api.SignatureGenericEntity, s conversion.Scope) error { +func autoConvert_v1_SignatureGenericEntity_To_api_SignatureGenericEntity(in *SignatureGenericEntity, out *api.SignatureGenericEntity, s conversion.Scope) error { out.Organization = in.Organization out.CommonName = in.CommonName return nil } -func Convert_v1_SignatureGenericEntity_To_api_SignatureGenericEntity(in *SignatureGenericEntity, out *image_api.SignatureGenericEntity, s conversion.Scope) error { +func Convert_v1_SignatureGenericEntity_To_api_SignatureGenericEntity(in *SignatureGenericEntity, out *api.SignatureGenericEntity, s conversion.Scope) error { return autoConvert_v1_SignatureGenericEntity_To_api_SignatureGenericEntity(in, out, s) } -func autoConvert_api_SignatureGenericEntity_To_v1_SignatureGenericEntity(in *image_api.SignatureGenericEntity, out *SignatureGenericEntity, s conversion.Scope) error { +func autoConvert_api_SignatureGenericEntity_To_v1_SignatureGenericEntity(in *api.SignatureGenericEntity, out *SignatureGenericEntity, s conversion.Scope) error { out.Organization = in.Organization out.CommonName = in.CommonName return nil } -func Convert_api_SignatureGenericEntity_To_v1_SignatureGenericEntity(in *image_api.SignatureGenericEntity, out *SignatureGenericEntity, s conversion.Scope) error { +func Convert_api_SignatureGenericEntity_To_v1_SignatureGenericEntity(in *api.SignatureGenericEntity, out *SignatureGenericEntity, s conversion.Scope) error { return autoConvert_api_SignatureGenericEntity_To_v1_SignatureGenericEntity(in, out, s) } -func autoConvert_v1_SignatureIssuer_To_api_SignatureIssuer(in *SignatureIssuer, out *image_api.SignatureIssuer, s conversion.Scope) error { +func autoConvert_v1_SignatureIssuer_To_api_SignatureIssuer(in *SignatureIssuer, out *api.SignatureIssuer, s conversion.Scope) error { if err := Convert_v1_SignatureGenericEntity_To_api_SignatureGenericEntity(&in.SignatureGenericEntity, &out.SignatureGenericEntity, s); err != nil { return err } return nil } -func Convert_v1_SignatureIssuer_To_api_SignatureIssuer(in *SignatureIssuer, out *image_api.SignatureIssuer, s conversion.Scope) error { +func Convert_v1_SignatureIssuer_To_api_SignatureIssuer(in *SignatureIssuer, out *api.SignatureIssuer, s conversion.Scope) error { return autoConvert_v1_SignatureIssuer_To_api_SignatureIssuer(in, out, s) } -func autoConvert_api_SignatureIssuer_To_v1_SignatureIssuer(in *image_api.SignatureIssuer, out *SignatureIssuer, s conversion.Scope) error { +func autoConvert_api_SignatureIssuer_To_v1_SignatureIssuer(in *api.SignatureIssuer, out *SignatureIssuer, s conversion.Scope) error { if err := Convert_api_SignatureGenericEntity_To_v1_SignatureGenericEntity(&in.SignatureGenericEntity, &out.SignatureGenericEntity, s); err != nil { return err } return nil } -func Convert_api_SignatureIssuer_To_v1_SignatureIssuer(in *image_api.SignatureIssuer, out *SignatureIssuer, s conversion.Scope) error { +func Convert_api_SignatureIssuer_To_v1_SignatureIssuer(in *api.SignatureIssuer, out *SignatureIssuer, s conversion.Scope) error { return autoConvert_api_SignatureIssuer_To_v1_SignatureIssuer(in, out, s) } -func autoConvert_v1_SignatureSubject_To_api_SignatureSubject(in *SignatureSubject, out *image_api.SignatureSubject, s conversion.Scope) error { +func autoConvert_v1_SignatureSubject_To_api_SignatureSubject(in *SignatureSubject, out *api.SignatureSubject, s conversion.Scope) error { if err := Convert_v1_SignatureGenericEntity_To_api_SignatureGenericEntity(&in.SignatureGenericEntity, &out.SignatureGenericEntity, s); err != nil { return err } @@ -942,11 +972,11 @@ func autoConvert_v1_SignatureSubject_To_api_SignatureSubject(in *SignatureSubjec return nil } -func Convert_v1_SignatureSubject_To_api_SignatureSubject(in *SignatureSubject, out *image_api.SignatureSubject, s conversion.Scope) error { +func Convert_v1_SignatureSubject_To_api_SignatureSubject(in *SignatureSubject, out *api.SignatureSubject, s conversion.Scope) error { return autoConvert_v1_SignatureSubject_To_api_SignatureSubject(in, out, s) } -func autoConvert_api_SignatureSubject_To_v1_SignatureSubject(in *image_api.SignatureSubject, out *SignatureSubject, s conversion.Scope) error { +func autoConvert_api_SignatureSubject_To_v1_SignatureSubject(in *api.SignatureSubject, out *SignatureSubject, s conversion.Scope) error { if err := Convert_api_SignatureGenericEntity_To_v1_SignatureGenericEntity(&in.SignatureGenericEntity, &out.SignatureGenericEntity, s); err != nil { return err } @@ -954,12 +984,12 @@ func autoConvert_api_SignatureSubject_To_v1_SignatureSubject(in *image_api.Signa return nil } -func Convert_api_SignatureSubject_To_v1_SignatureSubject(in *image_api.SignatureSubject, out *SignatureSubject, s conversion.Scope) error { +func Convert_api_SignatureSubject_To_v1_SignatureSubject(in *api.SignatureSubject, out *SignatureSubject, s conversion.Scope) error { return autoConvert_api_SignatureSubject_To_v1_SignatureSubject(in, out, s) } -func autoConvert_v1_TagEvent_To_api_TagEvent(in *TagEvent, out *image_api.TagEvent, s conversion.Scope) error { - if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.Created, &out.Created, s); err != nil { +func autoConvert_v1_TagEvent_To_api_TagEvent(in *TagEvent, out *api.TagEvent, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_Time_To_unversioned_Time(&in.Created, &out.Created, s); err != nil { return err } out.DockerImageReference = in.DockerImageReference @@ -968,12 +998,12 @@ func autoConvert_v1_TagEvent_To_api_TagEvent(in *TagEvent, out *image_api.TagEve return nil } -func Convert_v1_TagEvent_To_api_TagEvent(in *TagEvent, out *image_api.TagEvent, s conversion.Scope) error { +func Convert_v1_TagEvent_To_api_TagEvent(in *TagEvent, out *api.TagEvent, s conversion.Scope) error { return autoConvert_v1_TagEvent_To_api_TagEvent(in, out, s) } -func autoConvert_api_TagEvent_To_v1_TagEvent(in *image_api.TagEvent, out *TagEvent, s conversion.Scope) error { - if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.Created, &out.Created, s); err != nil { +func autoConvert_api_TagEvent_To_v1_TagEvent(in *api.TagEvent, out *TagEvent, s conversion.Scope) error { + if err := pkg_api.Convert_unversioned_Time_To_unversioned_Time(&in.Created, &out.Created, s); err != nil { return err } out.DockerImageReference = in.DockerImageReference @@ -982,14 +1012,14 @@ func autoConvert_api_TagEvent_To_v1_TagEvent(in *image_api.TagEvent, out *TagEve return nil } -func Convert_api_TagEvent_To_v1_TagEvent(in *image_api.TagEvent, out *TagEvent, s conversion.Scope) error { +func Convert_api_TagEvent_To_v1_TagEvent(in *api.TagEvent, out *TagEvent, s conversion.Scope) error { return autoConvert_api_TagEvent_To_v1_TagEvent(in, out, s) } -func autoConvert_v1_TagEventCondition_To_api_TagEventCondition(in *TagEventCondition, out *image_api.TagEventCondition, s conversion.Scope) error { - out.Type = image_api.TagEventConditionType(in.Type) - out.Status = api.ConditionStatus(in.Status) - if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { +func autoConvert_v1_TagEventCondition_To_api_TagEventCondition(in *TagEventCondition, out *api.TagEventCondition, s conversion.Scope) error { + out.Type = api.TagEventConditionType(in.Type) + out.Status = pkg_api.ConditionStatus(in.Status) + if err := pkg_api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { return err } out.Reason = in.Reason @@ -998,14 +1028,14 @@ func autoConvert_v1_TagEventCondition_To_api_TagEventCondition(in *TagEventCondi return nil } -func Convert_v1_TagEventCondition_To_api_TagEventCondition(in *TagEventCondition, out *image_api.TagEventCondition, s conversion.Scope) error { +func Convert_v1_TagEventCondition_To_api_TagEventCondition(in *TagEventCondition, out *api.TagEventCondition, s conversion.Scope) error { return autoConvert_v1_TagEventCondition_To_api_TagEventCondition(in, out, s) } -func autoConvert_api_TagEventCondition_To_v1_TagEventCondition(in *image_api.TagEventCondition, out *TagEventCondition, s conversion.Scope) error { +func autoConvert_api_TagEventCondition_To_v1_TagEventCondition(in *api.TagEventCondition, out *TagEventCondition, s conversion.Scope) error { out.Type = TagEventConditionType(in.Type) out.Status = api_v1.ConditionStatus(in.Status) - if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { + if err := pkg_api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { return err } out.Reason = in.Reason @@ -1014,36 +1044,36 @@ func autoConvert_api_TagEventCondition_To_v1_TagEventCondition(in *image_api.Tag return nil } -func Convert_api_TagEventCondition_To_v1_TagEventCondition(in *image_api.TagEventCondition, out *TagEventCondition, s conversion.Scope) error { +func Convert_api_TagEventCondition_To_v1_TagEventCondition(in *api.TagEventCondition, out *TagEventCondition, s conversion.Scope) error { return autoConvert_api_TagEventCondition_To_v1_TagEventCondition(in, out, s) } -func autoConvert_v1_TagImportPolicy_To_api_TagImportPolicy(in *TagImportPolicy, out *image_api.TagImportPolicy, s conversion.Scope) error { +func autoConvert_v1_TagImportPolicy_To_api_TagImportPolicy(in *TagImportPolicy, out *api.TagImportPolicy, s conversion.Scope) error { out.Insecure = in.Insecure out.Scheduled = in.Scheduled return nil } -func Convert_v1_TagImportPolicy_To_api_TagImportPolicy(in *TagImportPolicy, out *image_api.TagImportPolicy, s conversion.Scope) error { +func Convert_v1_TagImportPolicy_To_api_TagImportPolicy(in *TagImportPolicy, out *api.TagImportPolicy, s conversion.Scope) error { return autoConvert_v1_TagImportPolicy_To_api_TagImportPolicy(in, out, s) } -func autoConvert_api_TagImportPolicy_To_v1_TagImportPolicy(in *image_api.TagImportPolicy, out *TagImportPolicy, s conversion.Scope) error { +func autoConvert_api_TagImportPolicy_To_v1_TagImportPolicy(in *api.TagImportPolicy, out *TagImportPolicy, s conversion.Scope) error { out.Insecure = in.Insecure out.Scheduled = in.Scheduled return nil } -func Convert_api_TagImportPolicy_To_v1_TagImportPolicy(in *image_api.TagImportPolicy, out *TagImportPolicy, s conversion.Scope) error { +func Convert_api_TagImportPolicy_To_v1_TagImportPolicy(in *api.TagImportPolicy, out *TagImportPolicy, s conversion.Scope) error { return autoConvert_api_TagImportPolicy_To_v1_TagImportPolicy(in, out, s) } -func autoConvert_v1_TagReference_To_api_TagReference(in *TagReference, out *image_api.TagReference, s conversion.Scope) error { +func autoConvert_v1_TagReference_To_api_TagReference(in *TagReference, out *api.TagReference, s conversion.Scope) error { out.Name = in.Name out.Annotations = in.Annotations if in.From != nil { in, out := &in.From, &out.From - *out = new(api.ObjectReference) + *out = new(pkg_api.ObjectReference) if err := api_v1.Convert_v1_ObjectReference_To_api_ObjectReference(*in, *out, s); err != nil { return err } @@ -1058,11 +1088,11 @@ func autoConvert_v1_TagReference_To_api_TagReference(in *TagReference, out *imag return nil } -func Convert_v1_TagReference_To_api_TagReference(in *TagReference, out *image_api.TagReference, s conversion.Scope) error { +func Convert_v1_TagReference_To_api_TagReference(in *TagReference, out *api.TagReference, s conversion.Scope) error { return autoConvert_v1_TagReference_To_api_TagReference(in, out, s) } -func autoConvert_api_TagReference_To_v1_TagReference(in *image_api.TagReference, out *TagReference, s conversion.Scope) error { +func autoConvert_api_TagReference_To_v1_TagReference(in *api.TagReference, out *TagReference, s conversion.Scope) error { out.Name = in.Name out.Annotations = in.Annotations if in.From != nil { @@ -1082,6 +1112,6 @@ func autoConvert_api_TagReference_To_v1_TagReference(in *image_api.TagReference, return nil } -func Convert_api_TagReference_To_v1_TagReference(in *image_api.TagReference, out *TagReference, s conversion.Scope) error { +func Convert_api_TagReference_To_v1_TagReference(in *api.TagReference, out *TagReference, s conversion.Scope) error { return autoConvert_api_TagReference_To_v1_TagReference(in, out, s) } diff --git a/vendor/github.com/openshift/origin/pkg/image/api/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/image/api/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000..f288a560 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/image/api/v1/zz_generated.deepcopy.go @@ -0,0 +1,685 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + api_v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DockerImageReference, InType: reflect.TypeOf(&DockerImageReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Image, InType: reflect.TypeOf(&Image{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageImportSpec, InType: reflect.TypeOf(&ImageImportSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageImportStatus, InType: reflect.TypeOf(&ImageImportStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageLayer, InType: reflect.TypeOf(&ImageLayer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageList, InType: reflect.TypeOf(&ImageList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageSignature, InType: reflect.TypeOf(&ImageSignature{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStream, InType: reflect.TypeOf(&ImageStream{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamImage, InType: reflect.TypeOf(&ImageStreamImage{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamImport, InType: reflect.TypeOf(&ImageStreamImport{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamImportSpec, InType: reflect.TypeOf(&ImageStreamImportSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamImportStatus, InType: reflect.TypeOf(&ImageStreamImportStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamList, InType: reflect.TypeOf(&ImageStreamList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamMapping, InType: reflect.TypeOf(&ImageStreamMapping{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamSpec, InType: reflect.TypeOf(&ImageStreamSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamStatus, InType: reflect.TypeOf(&ImageStreamStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamTag, InType: reflect.TypeOf(&ImageStreamTag{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ImageStreamTagList, InType: reflect.TypeOf(&ImageStreamTagList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NamedTagEventList, InType: reflect.TypeOf(&NamedTagEventList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RepositoryImportSpec, InType: reflect.TypeOf(&RepositoryImportSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RepositoryImportStatus, InType: reflect.TypeOf(&RepositoryImportStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SignatureCondition, InType: reflect.TypeOf(&SignatureCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SignatureGenericEntity, InType: reflect.TypeOf(&SignatureGenericEntity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SignatureIssuer, InType: reflect.TypeOf(&SignatureIssuer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SignatureSubject, InType: reflect.TypeOf(&SignatureSubject{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_TagEvent, InType: reflect.TypeOf(&TagEvent{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_TagEventCondition, InType: reflect.TypeOf(&TagEventCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_TagImportPolicy, InType: reflect.TypeOf(&TagImportPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_TagReference, InType: reflect.TypeOf(&TagReference{})}, + ) +} + +func DeepCopy_v1_DockerImageReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerImageReference) + out := out.(*DockerImageReference) + out.Registry = in.Registry + out.Namespace = in.Namespace + out.Name = in.Name + out.Tag = in.Tag + out.ID = in.ID + return nil + } +} + +func DeepCopy_v1_Image(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Image) + out := out.(*Image) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.DockerImageReference = in.DockerImageReference + if err := runtime.DeepCopy_runtime_RawExtension(&in.DockerImageMetadata, &out.DockerImageMetadata, c); err != nil { + return err + } + out.DockerImageMetadataVersion = in.DockerImageMetadataVersion + out.DockerImageManifest = in.DockerImageManifest + if in.DockerImageLayers != nil { + in, out := &in.DockerImageLayers, &out.DockerImageLayers + *out = make([]ImageLayer, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.DockerImageLayers = nil + } + if in.Signatures != nil { + in, out := &in.Signatures, &out.Signatures + *out = make([]ImageSignature, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ImageSignature(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Signatures = nil + } + if in.DockerImageSignatures != nil { + in, out := &in.DockerImageSignatures, &out.DockerImageSignatures + *out = make([][]byte, len(*in)) + for i := range *in { + if newVal, err := c.DeepCopy(&(*in)[i]); err != nil { + return err + } else { + (*out)[i] = *newVal.(*[]byte) + } + } + } else { + out.DockerImageSignatures = nil + } + out.DockerImageManifestMediaType = in.DockerImageManifestMediaType + out.DockerImageConfig = in.DockerImageConfig + return nil + } +} + +func DeepCopy_v1_ImageImportSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageImportSpec) + out := out.(*ImageImportSpec) + out.From = in.From + if in.To != nil { + in, out := &in.To, &out.To + *out = new(api_v1.LocalObjectReference) + **out = **in + } else { + out.To = nil + } + out.ImportPolicy = in.ImportPolicy + out.IncludeManifest = in.IncludeManifest + return nil + } +} + +func DeepCopy_v1_ImageImportStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageImportStatus) + out := out.(*ImageImportStatus) + if err := unversioned.DeepCopy_unversioned_Status(&in.Status, &out.Status, c); err != nil { + return err + } + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(Image) + if err := DeepCopy_v1_Image(*in, *out, c); err != nil { + return err + } + } else { + out.Image = nil + } + out.Tag = in.Tag + return nil + } +} + +func DeepCopy_v1_ImageLayer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageLayer) + out := out.(*ImageLayer) + out.Name = in.Name + out.LayerSize = in.LayerSize + out.MediaType = in.MediaType + return nil + } +} + +func DeepCopy_v1_ImageList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageList) + out := out.(*ImageList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Image, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Image(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ImageSignature(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageSignature) + out := out.(*ImageSignature) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Type = in.Type + if in.Content != nil { + in, out := &in.Content, &out.Content + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Content = nil + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]SignatureCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1_SignatureCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + out.ImageIdentity = in.ImageIdentity + if in.SignedClaims != nil { + in, out := &in.SignedClaims, &out.SignedClaims + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.SignedClaims = nil + } + if in.Created != nil { + in, out := &in.Created, &out.Created + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.Created = nil + } + if in.IssuedBy != nil { + in, out := &in.IssuedBy, &out.IssuedBy + *out = new(SignatureIssuer) + **out = **in + } else { + out.IssuedBy = nil + } + if in.IssuedTo != nil { + in, out := &in.IssuedTo, &out.IssuedTo + *out = new(SignatureSubject) + **out = **in + } else { + out.IssuedTo = nil + } + return nil + } +} + +func DeepCopy_v1_ImageStream(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStream) + out := out.(*ImageStream) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_ImageStreamSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_ImageStreamStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_ImageStreamImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamImage) + out := out.(*ImageStreamImage) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_Image(&in.Image, &out.Image, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_ImageStreamImport(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamImport) + out := out.(*ImageStreamImport) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_ImageStreamImportSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_ImageStreamImportStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_ImageStreamImportSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamImportSpec) + out := out.(*ImageStreamImportSpec) + out.Import = in.Import + if in.Repository != nil { + in, out := &in.Repository, &out.Repository + *out = new(RepositoryImportSpec) + **out = **in + } else { + out.Repository = nil + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportSpec, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ImageImportSpec(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + return nil + } +} + +func DeepCopy_v1_ImageStreamImportStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamImportStatus) + out := out.(*ImageStreamImportStatus) + if in.Import != nil { + in, out := &in.Import, &out.Import + *out = new(ImageStream) + if err := DeepCopy_v1_ImageStream(*in, *out, c); err != nil { + return err + } + } else { + out.Import = nil + } + if in.Repository != nil { + in, out := &in.Repository, &out.Repository + *out = new(RepositoryImportStatus) + if err := DeepCopy_v1_RepositoryImportStatus(*in, *out, c); err != nil { + return err + } + } else { + out.Repository = nil + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ImageImportStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + return nil + } +} + +func DeepCopy_v1_ImageStreamList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamList) + out := out.(*ImageStreamList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ImageStream, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ImageStream(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ImageStreamMapping(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamMapping) + out := out.(*ImageStreamMapping) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_Image(&in.Image, &out.Image, c); err != nil { + return err + } + out.Tag = in.Tag + return nil + } +} + +func DeepCopy_v1_ImageStreamSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamSpec) + out := out.(*ImageStreamSpec) + out.DockerImageRepository = in.DockerImageRepository + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]TagReference, len(*in)) + for i := range *in { + if err := DeepCopy_v1_TagReference(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Tags = nil + } + return nil + } +} + +func DeepCopy_v1_ImageStreamStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamStatus) + out := out.(*ImageStreamStatus) + out.DockerImageRepository = in.DockerImageRepository + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]NamedTagEventList, len(*in)) + for i := range *in { + if err := DeepCopy_v1_NamedTagEventList(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Tags = nil + } + return nil + } +} + +func DeepCopy_v1_ImageStreamTag(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamTag) + out := out.(*ImageStreamTag) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Tag != nil { + in, out := &in.Tag, &out.Tag + *out = new(TagReference) + if err := DeepCopy_v1_TagReference(*in, *out, c); err != nil { + return err + } + } else { + out.Tag = nil + } + out.Generation = in.Generation + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]TagEventCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1_TagEventCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if err := DeepCopy_v1_Image(&in.Image, &out.Image, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_ImageStreamTagList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamTagList) + out := out.(*ImageStreamTagList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ImageStreamTag, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ImageStreamTag(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_NamedTagEventList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamedTagEventList) + out := out.(*NamedTagEventList) + out.Tag = in.Tag + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]TagEvent, len(*in)) + for i := range *in { + if err := DeepCopy_v1_TagEvent(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]TagEventCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1_TagEventCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + return nil + } +} + +func DeepCopy_v1_RepositoryImportSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RepositoryImportSpec) + out := out.(*RepositoryImportSpec) + out.From = in.From + out.ImportPolicy = in.ImportPolicy + out.IncludeManifest = in.IncludeManifest + return nil + } +} + +func DeepCopy_v1_RepositoryImportStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RepositoryImportStatus) + out := out.(*RepositoryImportStatus) + if err := unversioned.DeepCopy_unversioned_Status(&in.Status, &out.Status, c); err != nil { + return err + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ImageImportStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + if in.AdditionalTags != nil { + in, out := &in.AdditionalTags, &out.AdditionalTags + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.AdditionalTags = nil + } + return nil + } +} + +func DeepCopy_v1_SignatureCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SignatureCondition) + out := out.(*SignatureCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_SignatureGenericEntity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SignatureGenericEntity) + out := out.(*SignatureGenericEntity) + out.Organization = in.Organization + out.CommonName = in.CommonName + return nil + } +} + +func DeepCopy_v1_SignatureIssuer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SignatureIssuer) + out := out.(*SignatureIssuer) + out.SignatureGenericEntity = in.SignatureGenericEntity + return nil + } +} + +func DeepCopy_v1_SignatureSubject(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SignatureSubject) + out := out.(*SignatureSubject) + out.SignatureGenericEntity = in.SignatureGenericEntity + out.PublicKeyID = in.PublicKeyID + return nil + } +} + +func DeepCopy_v1_TagEvent(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagEvent) + out := out.(*TagEvent) + out.Created = in.Created.DeepCopy() + out.DockerImageReference = in.DockerImageReference + out.Image = in.Image + out.Generation = in.Generation + return nil + } +} + +func DeepCopy_v1_TagEventCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagEventCondition) + out := out.(*TagEventCondition) + out.Type = in.Type + out.Status = in.Status + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + out.Generation = in.Generation + return nil + } +} + +func DeepCopy_v1_TagImportPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagImportPolicy) + out := out.(*TagImportPolicy) + out.Insecure = in.Insecure + out.Scheduled = in.Scheduled + return nil + } +} + +func DeepCopy_v1_TagReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagReference) + out := out.(*TagReference) + out.Name = in.Name + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Annotations = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = new(api_v1.ObjectReference) + **out = **in + } else { + out.From = nil + } + out.Reference = in.Reference + if in.Generation != nil { + in, out := &in.Generation, &out.Generation + *out = new(int64) + **out = **in + } else { + out.Generation = nil + } + out.ImportPolicy = in.ImportPolicy + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/image/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/image/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..6eb5a98b --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/image/api/zz_generated.deepcopy.go @@ -0,0 +1,1025 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Descriptor, InType: reflect.TypeOf(&Descriptor{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerConfig, InType: reflect.TypeOf(&DockerConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerConfigHistory, InType: reflect.TypeOf(&DockerConfigHistory{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerConfigRootFS, InType: reflect.TypeOf(&DockerConfigRootFS{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerFSLayer, InType: reflect.TypeOf(&DockerFSLayer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerHistory, InType: reflect.TypeOf(&DockerHistory{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerImage, InType: reflect.TypeOf(&DockerImage{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerImageConfig, InType: reflect.TypeOf(&DockerImageConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerImageManifest, InType: reflect.TypeOf(&DockerImageManifest{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerImageReference, InType: reflect.TypeOf(&DockerImageReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerV1CompatibilityImage, InType: reflect.TypeOf(&DockerV1CompatibilityImage{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DockerV1CompatibilityImageSize, InType: reflect.TypeOf(&DockerV1CompatibilityImageSize{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Image, InType: reflect.TypeOf(&Image{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageImportSpec, InType: reflect.TypeOf(&ImageImportSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageImportStatus, InType: reflect.TypeOf(&ImageImportStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageLayer, InType: reflect.TypeOf(&ImageLayer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageList, InType: reflect.TypeOf(&ImageList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageSignature, InType: reflect.TypeOf(&ImageSignature{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStream, InType: reflect.TypeOf(&ImageStream{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamImage, InType: reflect.TypeOf(&ImageStreamImage{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamImport, InType: reflect.TypeOf(&ImageStreamImport{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamImportSpec, InType: reflect.TypeOf(&ImageStreamImportSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamImportStatus, InType: reflect.TypeOf(&ImageStreamImportStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamList, InType: reflect.TypeOf(&ImageStreamList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamMapping, InType: reflect.TypeOf(&ImageStreamMapping{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamSpec, InType: reflect.TypeOf(&ImageStreamSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamStatus, InType: reflect.TypeOf(&ImageStreamStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamTag, InType: reflect.TypeOf(&ImageStreamTag{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ImageStreamTagList, InType: reflect.TypeOf(&ImageStreamTagList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RepositoryImportSpec, InType: reflect.TypeOf(&RepositoryImportSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RepositoryImportStatus, InType: reflect.TypeOf(&RepositoryImportStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SignatureCondition, InType: reflect.TypeOf(&SignatureCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SignatureGenericEntity, InType: reflect.TypeOf(&SignatureGenericEntity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SignatureIssuer, InType: reflect.TypeOf(&SignatureIssuer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SignatureSubject, InType: reflect.TypeOf(&SignatureSubject{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TagEvent, InType: reflect.TypeOf(&TagEvent{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TagEventCondition, InType: reflect.TypeOf(&TagEventCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TagEventList, InType: reflect.TypeOf(&TagEventList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TagImportPolicy, InType: reflect.TypeOf(&TagImportPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TagReference, InType: reflect.TypeOf(&TagReference{})}, + ) +} + +func DeepCopy_api_Descriptor(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Descriptor) + out := out.(*Descriptor) + out.MediaType = in.MediaType + out.Size = in.Size + out.Digest = in.Digest + return nil + } +} + +func DeepCopy_api_DockerConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerConfig) + out := out.(*DockerConfig) + out.Hostname = in.Hostname + out.Domainname = in.Domainname + out.User = in.User + out.Memory = in.Memory + out.MemorySwap = in.MemorySwap + out.CPUShares = in.CPUShares + out.CPUSet = in.CPUSet + out.AttachStdin = in.AttachStdin + out.AttachStdout = in.AttachStdout + out.AttachStderr = in.AttachStderr + if in.PortSpecs != nil { + in, out := &in.PortSpecs, &out.PortSpecs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.PortSpecs = nil + } + if in.ExposedPorts != nil { + in, out := &in.ExposedPorts, &out.ExposedPorts + *out = make(map[string]struct{}) + for key := range *in { + (*out)[key] = struct{}{} + } + } else { + out.ExposedPorts = nil + } + out.Tty = in.Tty + out.OpenStdin = in.OpenStdin + out.StdinOnce = in.StdinOnce + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Env = nil + } + if in.Cmd != nil { + in, out := &in.Cmd, &out.Cmd + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Cmd = nil + } + if in.DNS != nil { + in, out := &in.DNS, &out.DNS + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.DNS = nil + } + out.Image = in.Image + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make(map[string]struct{}) + for key := range *in { + (*out)[key] = struct{}{} + } + } else { + out.Volumes = nil + } + out.VolumesFrom = in.VolumesFrom + out.WorkingDir = in.WorkingDir + if in.Entrypoint != nil { + in, out := &in.Entrypoint, &out.Entrypoint + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Entrypoint = nil + } + out.NetworkDisabled = in.NetworkDisabled + if in.SecurityOpts != nil { + in, out := &in.SecurityOpts, &out.SecurityOpts + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.SecurityOpts = nil + } + if in.OnBuild != nil { + in, out := &in.OnBuild, &out.OnBuild + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.OnBuild = nil + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Labels = nil + } + return nil + } +} + +func DeepCopy_api_DockerConfigHistory(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerConfigHistory) + out := out.(*DockerConfigHistory) + out.Created = in.Created.DeepCopy() + out.Author = in.Author + out.CreatedBy = in.CreatedBy + out.Comment = in.Comment + out.EmptyLayer = in.EmptyLayer + return nil + } +} + +func DeepCopy_api_DockerConfigRootFS(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerConfigRootFS) + out := out.(*DockerConfigRootFS) + out.Type = in.Type + if in.DiffIDs != nil { + in, out := &in.DiffIDs, &out.DiffIDs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.DiffIDs = nil + } + return nil + } +} + +func DeepCopy_api_DockerFSLayer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerFSLayer) + out := out.(*DockerFSLayer) + out.DockerBlobSum = in.DockerBlobSum + return nil + } +} + +func DeepCopy_api_DockerHistory(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerHistory) + out := out.(*DockerHistory) + out.DockerV1Compatibility = in.DockerV1Compatibility + return nil + } +} + +func DeepCopy_api_DockerImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerImage) + out := out.(*DockerImage) + out.TypeMeta = in.TypeMeta + out.ID = in.ID + out.Parent = in.Parent + out.Comment = in.Comment + out.Created = in.Created.DeepCopy() + out.Container = in.Container + if err := DeepCopy_api_DockerConfig(&in.ContainerConfig, &out.ContainerConfig, c); err != nil { + return err + } + out.DockerVersion = in.DockerVersion + out.Author = in.Author + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(DockerConfig) + if err := DeepCopy_api_DockerConfig(*in, *out, c); err != nil { + return err + } + } else { + out.Config = nil + } + out.Architecture = in.Architecture + out.Size = in.Size + return nil + } +} + +func DeepCopy_api_DockerImageConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerImageConfig) + out := out.(*DockerImageConfig) + out.ID = in.ID + out.Parent = in.Parent + out.Comment = in.Comment + out.Created = in.Created.DeepCopy() + out.Container = in.Container + if err := DeepCopy_api_DockerConfig(&in.ContainerConfig, &out.ContainerConfig, c); err != nil { + return err + } + out.DockerVersion = in.DockerVersion + out.Author = in.Author + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(DockerConfig) + if err := DeepCopy_api_DockerConfig(*in, *out, c); err != nil { + return err + } + } else { + out.Config = nil + } + out.Architecture = in.Architecture + out.Size = in.Size + if in.RootFS != nil { + in, out := &in.RootFS, &out.RootFS + *out = new(DockerConfigRootFS) + if err := DeepCopy_api_DockerConfigRootFS(*in, *out, c); err != nil { + return err + } + } else { + out.RootFS = nil + } + if in.History != nil { + in, out := &in.History, &out.History + *out = make([]DockerConfigHistory, len(*in)) + for i := range *in { + if err := DeepCopy_api_DockerConfigHistory(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.History = nil + } + out.OSVersion = in.OSVersion + if in.OSFeatures != nil { + in, out := &in.OSFeatures, &out.OSFeatures + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.OSFeatures = nil + } + return nil + } +} + +func DeepCopy_api_DockerImageManifest(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerImageManifest) + out := out.(*DockerImageManifest) + out.SchemaVersion = in.SchemaVersion + out.MediaType = in.MediaType + out.Name = in.Name + out.Tag = in.Tag + out.Architecture = in.Architecture + if in.FSLayers != nil { + in, out := &in.FSLayers, &out.FSLayers + *out = make([]DockerFSLayer, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.FSLayers = nil + } + if in.History != nil { + in, out := &in.History, &out.History + *out = make([]DockerHistory, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.History = nil + } + if in.Layers != nil { + in, out := &in.Layers, &out.Layers + *out = make([]Descriptor, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Layers = nil + } + out.Config = in.Config + return nil + } +} + +func DeepCopy_api_DockerImageReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerImageReference) + out := out.(*DockerImageReference) + out.Registry = in.Registry + out.Namespace = in.Namespace + out.Name = in.Name + out.Tag = in.Tag + out.ID = in.ID + return nil + } +} + +func DeepCopy_api_DockerV1CompatibilityImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerV1CompatibilityImage) + out := out.(*DockerV1CompatibilityImage) + out.ID = in.ID + out.Parent = in.Parent + out.Comment = in.Comment + out.Created = in.Created.DeepCopy() + out.Container = in.Container + if err := DeepCopy_api_DockerConfig(&in.ContainerConfig, &out.ContainerConfig, c); err != nil { + return err + } + out.DockerVersion = in.DockerVersion + out.Author = in.Author + if in.Config != nil { + in, out := &in.Config, &out.Config + *out = new(DockerConfig) + if err := DeepCopy_api_DockerConfig(*in, *out, c); err != nil { + return err + } + } else { + out.Config = nil + } + out.Architecture = in.Architecture + out.Size = in.Size + return nil + } +} + +func DeepCopy_api_DockerV1CompatibilityImageSize(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DockerV1CompatibilityImageSize) + out := out.(*DockerV1CompatibilityImageSize) + out.Size = in.Size + return nil + } +} + +func DeepCopy_api_Image(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Image) + out := out.(*Image) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.DockerImageReference = in.DockerImageReference + if err := DeepCopy_api_DockerImage(&in.DockerImageMetadata, &out.DockerImageMetadata, c); err != nil { + return err + } + out.DockerImageMetadataVersion = in.DockerImageMetadataVersion + out.DockerImageManifest = in.DockerImageManifest + if in.DockerImageLayers != nil { + in, out := &in.DockerImageLayers, &out.DockerImageLayers + *out = make([]ImageLayer, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.DockerImageLayers = nil + } + if in.Signatures != nil { + in, out := &in.Signatures, &out.Signatures + *out = make([]ImageSignature, len(*in)) + for i := range *in { + if err := DeepCopy_api_ImageSignature(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Signatures = nil + } + if in.DockerImageSignatures != nil { + in, out := &in.DockerImageSignatures, &out.DockerImageSignatures + *out = make([][]byte, len(*in)) + for i := range *in { + if newVal, err := c.DeepCopy(&(*in)[i]); err != nil { + return err + } else { + (*out)[i] = *newVal.(*[]byte) + } + } + } else { + out.DockerImageSignatures = nil + } + out.DockerImageManifestMediaType = in.DockerImageManifestMediaType + out.DockerImageConfig = in.DockerImageConfig + return nil + } +} + +func DeepCopy_api_ImageImportSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageImportSpec) + out := out.(*ImageImportSpec) + out.From = in.From + if in.To != nil { + in, out := &in.To, &out.To + *out = new(pkg_api.LocalObjectReference) + **out = **in + } else { + out.To = nil + } + out.ImportPolicy = in.ImportPolicy + out.IncludeManifest = in.IncludeManifest + return nil + } +} + +func DeepCopy_api_ImageImportStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageImportStatus) + out := out.(*ImageImportStatus) + out.Tag = in.Tag + if err := unversioned.DeepCopy_unversioned_Status(&in.Status, &out.Status, c); err != nil { + return err + } + if in.Image != nil { + in, out := &in.Image, &out.Image + *out = new(Image) + if err := DeepCopy_api_Image(*in, *out, c); err != nil { + return err + } + } else { + out.Image = nil + } + return nil + } +} + +func DeepCopy_api_ImageLayer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageLayer) + out := out.(*ImageLayer) + out.Name = in.Name + out.LayerSize = in.LayerSize + out.MediaType = in.MediaType + return nil + } +} + +func DeepCopy_api_ImageList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageList) + out := out.(*ImageList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Image, len(*in)) + for i := range *in { + if err := DeepCopy_api_Image(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ImageSignature(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageSignature) + out := out.(*ImageSignature) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Type = in.Type + if in.Content != nil { + in, out := &in.Content, &out.Content + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Content = nil + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]SignatureCondition, len(*in)) + for i := range *in { + if err := DeepCopy_api_SignatureCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + out.ImageIdentity = in.ImageIdentity + if in.SignedClaims != nil { + in, out := &in.SignedClaims, &out.SignedClaims + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.SignedClaims = nil + } + if in.Created != nil { + in, out := &in.Created, &out.Created + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.Created = nil + } + if in.IssuedBy != nil { + in, out := &in.IssuedBy, &out.IssuedBy + *out = new(SignatureIssuer) + **out = **in + } else { + out.IssuedBy = nil + } + if in.IssuedTo != nil { + in, out := &in.IssuedTo, &out.IssuedTo + *out = new(SignatureSubject) + **out = **in + } else { + out.IssuedTo = nil + } + return nil + } +} + +func DeepCopy_api_ImageStream(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStream) + out := out.(*ImageStream) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ImageStreamSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_ImageStreamStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ImageStreamImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamImage) + out := out.(*ImageStreamImage) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_Image(&in.Image, &out.Image, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ImageStreamImport(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamImport) + out := out.(*ImageStreamImport) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ImageStreamImportSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_ImageStreamImportStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ImageStreamImportSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamImportSpec) + out := out.(*ImageStreamImportSpec) + out.Import = in.Import + if in.Repository != nil { + in, out := &in.Repository, &out.Repository + *out = new(RepositoryImportSpec) + **out = **in + } else { + out.Repository = nil + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportSpec, len(*in)) + for i := range *in { + if err := DeepCopy_api_ImageImportSpec(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + return nil + } +} + +func DeepCopy_api_ImageStreamImportStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamImportStatus) + out := out.(*ImageStreamImportStatus) + if in.Import != nil { + in, out := &in.Import, &out.Import + *out = new(ImageStream) + if err := DeepCopy_api_ImageStream(*in, *out, c); err != nil { + return err + } + } else { + out.Import = nil + } + if in.Repository != nil { + in, out := &in.Repository, &out.Repository + *out = new(RepositoryImportStatus) + if err := DeepCopy_api_RepositoryImportStatus(*in, *out, c); err != nil { + return err + } + } else { + out.Repository = nil + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ImageImportStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + return nil + } +} + +func DeepCopy_api_ImageStreamList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamList) + out := out.(*ImageStreamList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ImageStream, len(*in)) + for i := range *in { + if err := DeepCopy_api_ImageStream(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ImageStreamMapping(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamMapping) + out := out.(*ImageStreamMapping) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.DockerImageRepository = in.DockerImageRepository + if err := DeepCopy_api_Image(&in.Image, &out.Image, c); err != nil { + return err + } + out.Tag = in.Tag + return nil + } +} + +func DeepCopy_api_ImageStreamSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamSpec) + out := out.(*ImageStreamSpec) + out.DockerImageRepository = in.DockerImageRepository + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make(map[string]TagReference) + for key, val := range *in { + newVal := new(TagReference) + if err := DeepCopy_api_TagReference(&val, newVal, c); err != nil { + return err + } + (*out)[key] = *newVal + } + } else { + out.Tags = nil + } + return nil + } +} + +func DeepCopy_api_ImageStreamStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamStatus) + out := out.(*ImageStreamStatus) + out.DockerImageRepository = in.DockerImageRepository + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make(map[string]TagEventList) + for key, val := range *in { + newVal := new(TagEventList) + if err := DeepCopy_api_TagEventList(&val, newVal, c); err != nil { + return err + } + (*out)[key] = *newVal + } + } else { + out.Tags = nil + } + return nil + } +} + +func DeepCopy_api_ImageStreamTag(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamTag) + out := out.(*ImageStreamTag) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Tag != nil { + in, out := &in.Tag, &out.Tag + *out = new(TagReference) + if err := DeepCopy_api_TagReference(*in, *out, c); err != nil { + return err + } + } else { + out.Tag = nil + } + out.Generation = in.Generation + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]TagEventCondition, len(*in)) + for i := range *in { + if err := DeepCopy_api_TagEventCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if err := DeepCopy_api_Image(&in.Image, &out.Image, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ImageStreamTagList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ImageStreamTagList) + out := out.(*ImageStreamTagList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ImageStreamTag, len(*in)) + for i := range *in { + if err := DeepCopy_api_ImageStreamTag(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_RepositoryImportSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RepositoryImportSpec) + out := out.(*RepositoryImportSpec) + out.From = in.From + out.ImportPolicy = in.ImportPolicy + out.IncludeManifest = in.IncludeManifest + return nil + } +} + +func DeepCopy_api_RepositoryImportStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RepositoryImportStatus) + out := out.(*RepositoryImportStatus) + if err := unversioned.DeepCopy_unversioned_Status(&in.Status, &out.Status, c); err != nil { + return err + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ImageImportStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ImageImportStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + if in.AdditionalTags != nil { + in, out := &in.AdditionalTags, &out.AdditionalTags + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.AdditionalTags = nil + } + return nil + } +} + +func DeepCopy_api_SignatureCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SignatureCondition) + out := out.(*SignatureCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_SignatureGenericEntity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SignatureGenericEntity) + out := out.(*SignatureGenericEntity) + out.Organization = in.Organization + out.CommonName = in.CommonName + return nil + } +} + +func DeepCopy_api_SignatureIssuer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SignatureIssuer) + out := out.(*SignatureIssuer) + out.SignatureGenericEntity = in.SignatureGenericEntity + return nil + } +} + +func DeepCopy_api_SignatureSubject(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SignatureSubject) + out := out.(*SignatureSubject) + out.SignatureGenericEntity = in.SignatureGenericEntity + out.PublicKeyID = in.PublicKeyID + return nil + } +} + +func DeepCopy_api_TagEvent(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagEvent) + out := out.(*TagEvent) + out.Created = in.Created.DeepCopy() + out.DockerImageReference = in.DockerImageReference + out.Image = in.Image + out.Generation = in.Generation + return nil + } +} + +func DeepCopy_api_TagEventCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagEventCondition) + out := out.(*TagEventCondition) + out.Type = in.Type + out.Status = in.Status + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + out.Generation = in.Generation + return nil + } +} + +func DeepCopy_api_TagEventList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagEventList) + out := out.(*TagEventList) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]TagEvent, len(*in)) + for i := range *in { + if err := DeepCopy_api_TagEvent(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]TagEventCondition, len(*in)) + for i := range *in { + if err := DeepCopy_api_TagEventCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + return nil + } +} + +func DeepCopy_api_TagImportPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagImportPolicy) + out := out.(*TagImportPolicy) + out.Insecure = in.Insecure + out.Scheduled = in.Scheduled + return nil + } +} + +func DeepCopy_api_TagReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TagReference) + out := out.(*TagReference) + out.Name = in.Name + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Annotations = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.From = nil + } + out.Reference = in.Reference + if in.Generation != nil { + in, out := &in.Generation, &out.Generation + *out = new(int64) + **out = **in + } else { + out.Generation = nil + } + out.ImportPolicy = in.ImportPolicy + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/image/graph/edges.go b/vendor/github.com/openshift/origin/pkg/image/graph/edges.go new file mode 100644 index 00000000..d99f981a --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/image/graph/edges.go @@ -0,0 +1,56 @@ +package graph + +import ( + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + imageapi "github.com/openshift/origin/pkg/image/api" + imagegraph "github.com/openshift/origin/pkg/image/graph/nodes" +) + +const ( + // ReferencedImageStreamGraphEdgeKind is an edge that goes from an ImageStreamTag node back to an ImageStream + ReferencedImageStreamGraphEdgeKind = "ReferencedImageStreamGraphEdge" + // ReferencedImageStreamImageGraphEdgeKind is an edge that goes from an ImageStreamImage node back to an ImageStream + ReferencedImageStreamImageGraphEdgeKind = "ReferencedImageStreamImageGraphEdgeKind" +) + +// AddImageStreamTagRefEdge ensures that a directed edge exists between an IST Node and the IS it references +func AddImageStreamTagRefEdge(g osgraph.MutableUniqueGraph, node *imagegraph.ImageStreamTagNode) { + isName, _, _ := imageapi.SplitImageStreamTag(node.Name) + imageStream := &imageapi.ImageStream{} + imageStream.Namespace = node.Namespace + imageStream.Name = isName + + imageStreamNode := imagegraph.FindOrCreateSyntheticImageStreamNode(g, imageStream) + g.AddEdge(node, imageStreamNode, ReferencedImageStreamGraphEdgeKind) +} + +// AddImageStreamImageRefEdge ensures that a directed edge exists between an ImageStreamImage Node and the IS it references +func AddImageStreamImageRefEdge(g osgraph.MutableUniqueGraph, node *imagegraph.ImageStreamImageNode) { + dockImgRef, _ := imageapi.ParseDockerImageReference(node.Name) + imageStream := &imageapi.ImageStream{} + imageStream.Namespace = node.Namespace + imageStream.Name = dockImgRef.Name + + imageStreamNode := imagegraph.FindOrCreateSyntheticImageStreamNode(g, imageStream) + g.AddEdge(node, imageStreamNode, ReferencedImageStreamImageGraphEdgeKind) +} + +// AddAllImageStreamRefEdges calls AddImageStreamRefEdge for every ImageStreamTagNode in the graph +func AddAllImageStreamRefEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if istNode, ok := node.(*imagegraph.ImageStreamTagNode); ok { + AddImageStreamTagRefEdge(g, istNode) + } + } +} + +// AddAllImageStreamImageRefEdges calls AddImageStreamImageRefEdge for every ImageStreamImageNode in the graph +func AddAllImageStreamImageRefEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if isimageNode, ok := node.(*imagegraph.ImageStreamImageNode); ok { + AddImageStreamImageRefEdge(g, isimageNode) + } + } +} diff --git a/vendor/github.com/openshift/origin/pkg/image/graph/nodes/nodes.go b/vendor/github.com/openshift/origin/pkg/image/graph/nodes/nodes.go new file mode 100644 index 00000000..87475b02 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/image/graph/nodes/nodes.go @@ -0,0 +1,172 @@ +package nodes + +import ( + "github.com/gonum/graph" + + kapi "k8s.io/kubernetes/pkg/api" + + osgraph "github.com/openshift/origin/pkg/api/graph" + imageapi "github.com/openshift/origin/pkg/image/api" +) + +func EnsureImageNode(g osgraph.MutableUniqueGraph, img *imageapi.Image) graph.Node { + return osgraph.EnsureUnique(g, + ImageNodeName(img), + func(node osgraph.Node) graph.Node { + return &ImageNode{node, img} + }, + ) +} + +// EnsureAllImageStreamTagNodes creates all the ImageStreamTagNodes that are guaranteed to be present based on the ImageStream. +// This is different than inferring the presence of an object, since the IST is an object derived from a join between the ImageStream +// and the Image it references. +func EnsureAllImageStreamTagNodes(g osgraph.MutableUniqueGraph, is *imageapi.ImageStream) []*ImageStreamTagNode { + ret := []*ImageStreamTagNode{} + + for tag := range is.Status.Tags { + ist := &imageapi.ImageStreamTag{} + ist.Namespace = is.Namespace + ist.Name = imageapi.JoinImageStreamTag(is.Name, tag) + + istNode := EnsureImageStreamTagNode(g, ist) + ret = append(ret, istNode) + } + + return ret +} + +func FindImage(g osgraph.MutableUniqueGraph, imageName string) graph.Node { + return g.Find(ImageNodeName(&imageapi.Image{ObjectMeta: kapi.ObjectMeta{Name: imageName}})) +} + +// EnsureDockerRepositoryNode adds the named Docker repository tag reference to the graph if it does +// not already exist. If the reference is invalid, the Name field of the graph will be used directly. +func EnsureDockerRepositoryNode(g osgraph.MutableUniqueGraph, name, tag string) graph.Node { + ref, err := imageapi.ParseDockerImageReference(name) + if err == nil { + if len(tag) != 0 { + ref.Tag = tag + } + ref = ref.DockerClientDefaults() + } else { + ref = imageapi.DockerImageReference{Name: name} + } + + return osgraph.EnsureUnique(g, + DockerImageRepositoryNodeName(ref), + func(node osgraph.Node) graph.Node { + return &DockerImageRepositoryNode{node, ref} + }, + ) +} + +// MakeImageStreamTagObjectMeta returns an ImageStreamTag that has enough information to join the graph, but it is not +// based on a full IST object. This can be used to properly initialize the graph without having to retrieve all ISTs +func MakeImageStreamTagObjectMeta(namespace, name, tag string) *imageapi.ImageStreamTag { + return &imageapi.ImageStreamTag{ + ObjectMeta: kapi.ObjectMeta{ + Namespace: namespace, + Name: imageapi.JoinImageStreamTag(name, tag), + }, + } +} + +// MakeImageStreamTagObjectMeta2 returns an ImageStreamTag that has enough information to join the graph, but it is not +// based on a full IST object. This can be used to properly initialize the graph without having to retrieve all ISTs +func MakeImageStreamTagObjectMeta2(namespace, name string) *imageapi.ImageStreamTag { + return &imageapi.ImageStreamTag{ + ObjectMeta: kapi.ObjectMeta{ + Namespace: namespace, + Name: name, + }, + } +} + +// EnsureImageStreamTagNode adds a graph node for the specific tag in an Image Stream if it does not already exist. +func EnsureImageStreamTagNode(g osgraph.MutableUniqueGraph, ist *imageapi.ImageStreamTag) *ImageStreamTagNode { + return osgraph.EnsureUnique(g, + ImageStreamTagNodeName(ist), + func(node osgraph.Node) graph.Node { + return &ImageStreamTagNode{node, ist, true} + }, + ).(*ImageStreamTagNode) +} + +// FindOrCreateSyntheticImageStreamTagNode returns the existing ISTNode or creates a synthetic node in its place +func FindOrCreateSyntheticImageStreamTagNode(g osgraph.MutableUniqueGraph, ist *imageapi.ImageStreamTag) *ImageStreamTagNode { + return osgraph.EnsureUnique(g, + ImageStreamTagNodeName(ist), + func(node osgraph.Node) graph.Node { + return &ImageStreamTagNode{node, ist, false} + }, + ).(*ImageStreamTagNode) +} + +// MakeImageStreamImageObjectMeta returns an ImageStreamImage that has enough information to join the graph, but it is not +// based on a full ISI object. This can be used to properly initialize the graph without having to retrieve all ISIs +func MakeImageStreamImageObjectMeta(namespace, name string) *imageapi.ImageStreamImage { + return &imageapi.ImageStreamImage{ + ObjectMeta: kapi.ObjectMeta{ + Namespace: namespace, + Name: name, + }, + } +} + +// EnsureImageStreamImageNode adds a graph node for the specific ImageStreamImage if it +// does not already exist. +func EnsureImageStreamImageNode(g osgraph.MutableUniqueGraph, namespace, name string) graph.Node { + isi := &imageapi.ImageStreamImage{ + ObjectMeta: kapi.ObjectMeta{ + Namespace: namespace, + Name: name, + }, + } + return osgraph.EnsureUnique(g, + ImageStreamImageNodeName(isi), + func(node osgraph.Node) graph.Node { + return &ImageStreamImageNode{node, isi, true} + }, + ) +} + +// FindOrCreateSyntheticImageStreamImageNode returns the existing ISINode or creates a synthetic node in its place +func FindOrCreateSyntheticImageStreamImageNode(g osgraph.MutableUniqueGraph, isi *imageapi.ImageStreamImage) *ImageStreamImageNode { + return osgraph.EnsureUnique(g, + ImageStreamImageNodeName(isi), + func(node osgraph.Node) graph.Node { + return &ImageStreamImageNode{node, isi, false} + }, + ).(*ImageStreamImageNode) +} + +// EnsureImageStreamNode adds a graph node for the Image Stream if it does not already exist. +func EnsureImageStreamNode(g osgraph.MutableUniqueGraph, is *imageapi.ImageStream) graph.Node { + return osgraph.EnsureUnique(g, + ImageStreamNodeName(is), + func(node osgraph.Node) graph.Node { + return &ImageStreamNode{node, is, true} + }, + ) +} + +// FindOrCreateSyntheticImageStreamNode returns the existing ISNode or creates a synthetic node in its place +func FindOrCreateSyntheticImageStreamNode(g osgraph.MutableUniqueGraph, is *imageapi.ImageStream) *ImageStreamNode { + return osgraph.EnsureUnique(g, + ImageStreamNodeName(is), + func(node osgraph.Node) graph.Node { + return &ImageStreamNode{node, is, false} + }, + ).(*ImageStreamNode) +} + +// EnsureImageLayerNode adds a graph node for the layer if it does not already exist. +func EnsureImageLayerNode(g osgraph.MutableUniqueGraph, layer string) graph.Node { + return osgraph.EnsureUnique(g, + ImageLayerNodeName(layer), + func(node osgraph.Node) graph.Node { + return &ImageLayerNode{node, layer} + }, + ) +} diff --git a/vendor/github.com/openshift/origin/pkg/image/graph/nodes/types.go b/vendor/github.com/openshift/origin/pkg/image/graph/nodes/types.go new file mode 100644 index 00000000..da923b6b --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/image/graph/nodes/types.go @@ -0,0 +1,207 @@ +package nodes + +import ( + "fmt" + "reflect" + + osgraph "github.com/openshift/origin/pkg/api/graph" + imageapi "github.com/openshift/origin/pkg/image/api" +) + +var ( + ImageStreamNodeKind = reflect.TypeOf(imageapi.ImageStream{}).Name() + ImageNodeKind = reflect.TypeOf(imageapi.Image{}).Name() + ImageStreamTagNodeKind = reflect.TypeOf(imageapi.ImageStreamTag{}).Name() + ImageStreamImageNodeKind = reflect.TypeOf(imageapi.ImageStreamImage{}).Name() + + // non-api types + DockerRepositoryNodeKind = reflect.TypeOf(imageapi.DockerImageReference{}).Name() + ImageLayerNodeKind = "ImageLayer" +) + +func ImageStreamNodeName(o *imageapi.ImageStream) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(ImageStreamNodeKind, o) +} + +type ImageStreamNode struct { + osgraph.Node + *imageapi.ImageStream + + IsFound bool +} + +func (n ImageStreamNode) Found() bool { + return n.IsFound +} + +func (n ImageStreamNode) Object() interface{} { + return n.ImageStream +} + +func (n ImageStreamNode) String() string { + return string(ImageStreamNodeName(n.ImageStream)) +} + +func (n ImageStreamNode) UniqueName() osgraph.UniqueName { + return ImageStreamNodeName(n.ImageStream) +} + +func (*ImageStreamNode) Kind() string { + return ImageStreamNodeKind +} + +func ImageStreamTagNodeName(o *imageapi.ImageStreamTag) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(ImageStreamTagNodeKind, o) +} + +type ImageStreamTagNode struct { + osgraph.Node + *imageapi.ImageStreamTag + + IsFound bool +} + +func (n ImageStreamTagNode) Found() bool { + return n.IsFound +} + +func (n ImageStreamTagNode) ImageSpec() string { + name, tag, _ := imageapi.SplitImageStreamTag(n.ImageStreamTag.Name) + return imageapi.DockerImageReference{Namespace: n.Namespace, Name: name, Tag: tag}.String() +} + +func (n ImageStreamTagNode) ImageTag() string { + _, tag, _ := imageapi.SplitImageStreamTag(n.ImageStreamTag.Name) + return tag +} + +func (n ImageStreamTagNode) Object() interface{} { + return n.ImageStreamTag +} + +func (n ImageStreamTagNode) String() string { + return string(ImageStreamTagNodeName(n.ImageStreamTag)) +} + +func (n ImageStreamTagNode) UniqueName() osgraph.UniqueName { + return ImageStreamTagNodeName(n.ImageStreamTag) +} + +func (*ImageStreamTagNode) Kind() string { + return ImageStreamTagNodeKind +} + +func ImageStreamImageNodeName(o *imageapi.ImageStreamImage) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(ImageStreamImageNodeKind, o) +} + +type ImageStreamImageNode struct { + osgraph.Node + *imageapi.ImageStreamImage + + IsFound bool +} + +func (n ImageStreamImageNode) ImageSpec() string { + return n.ImageStreamImage.Namespace + "/" + n.ImageStreamImage.Name +} + +func (n ImageStreamImageNode) ImageTag() string { + _, id, _ := imageapi.SplitImageStreamImage(n.ImageStreamImage.Name) + return id +} + +func (n ImageStreamImageNode) Object() interface{} { + return n.ImageStreamImage +} + +func (n ImageStreamImageNode) String() string { + return string(ImageStreamImageNodeName(n.ImageStreamImage)) +} + +func (n ImageStreamImageNode) ResourceString() string { + return "isimage/" + n.Name +} + +func (n ImageStreamImageNode) UniqueName() osgraph.UniqueName { + return ImageStreamImageNodeName(n.ImageStreamImage) +} + +func (*ImageStreamImageNode) Kind() string { + return ImageStreamImageNodeKind +} + +func DockerImageRepositoryNodeName(o imageapi.DockerImageReference) osgraph.UniqueName { + return osgraph.UniqueName(fmt.Sprintf("%s|%s", DockerRepositoryNodeKind, o.String())) +} + +type DockerImageRepositoryNode struct { + osgraph.Node + Ref imageapi.DockerImageReference +} + +func (n DockerImageRepositoryNode) ImageSpec() string { + return n.Ref.String() +} + +func (n DockerImageRepositoryNode) ImageTag() string { + return n.Ref.DockerClientDefaults().Tag +} + +func (n DockerImageRepositoryNode) String() string { + return string(DockerImageRepositoryNodeName(n.Ref)) +} + +func (*DockerImageRepositoryNode) Kind() string { + return DockerRepositoryNodeKind +} + +func (n DockerImageRepositoryNode) UniqueName() osgraph.UniqueName { + return DockerImageRepositoryNodeName(n.Ref) +} + +func ImageNodeName(o *imageapi.Image) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(ImageNodeKind, o) +} + +type ImageNode struct { + osgraph.Node + Image *imageapi.Image +} + +func (n ImageNode) Object() interface{} { + return n.Image +} + +func (n ImageNode) String() string { + return string(ImageNodeName(n.Image)) +} + +func (n ImageNode) UniqueName() osgraph.UniqueName { + return ImageNodeName(n.Image) +} + +func (*ImageNode) Kind() string { + return ImageNodeKind +} + +func ImageLayerNodeName(layer string) osgraph.UniqueName { + return osgraph.UniqueName(fmt.Sprintf("%s|%s", ImageLayerNodeKind, layer)) +} + +type ImageLayerNode struct { + osgraph.Node + Layer string +} + +func (n ImageLayerNode) Object() interface{} { + return n.Layer +} + +func (n ImageLayerNode) String() string { + return string(ImageLayerNodeName(n.Layer)) +} + +func (*ImageLayerNode) Kind() string { + return ImageLayerNodeKind +} diff --git a/vendor/github.com/openshift/origin/pkg/oauth/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/oauth/api/deep_copy_generated.go deleted file mode 100644 index b3e6150c..00000000 --- a/vendor/github.com/openshift/origin/pkg/oauth/api/deep_copy_generated.go +++ /dev/null @@ -1,257 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_ClusterRoleScopeRestriction, - DeepCopy_api_OAuthAccessToken, - DeepCopy_api_OAuthAccessTokenList, - DeepCopy_api_OAuthAuthorizeToken, - DeepCopy_api_OAuthAuthorizeTokenList, - DeepCopy_api_OAuthClient, - DeepCopy_api_OAuthClientAuthorization, - DeepCopy_api_OAuthClientAuthorizationList, - DeepCopy_api_OAuthClientList, - DeepCopy_api_ScopeRestriction, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_ClusterRoleScopeRestriction(in ClusterRoleScopeRestriction, out *ClusterRoleScopeRestriction, c *conversion.Cloner) error { - if in.RoleNames != nil { - in, out := in.RoleNames, &out.RoleNames - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.RoleNames = nil - } - if in.Namespaces != nil { - in, out := in.Namespaces, &out.Namespaces - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Namespaces = nil - } - out.AllowEscalation = in.AllowEscalation - return nil -} - -func DeepCopy_api_OAuthAccessToken(in OAuthAccessToken, out *OAuthAccessToken, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.ClientName = in.ClientName - out.ExpiresIn = in.ExpiresIn - if in.Scopes != nil { - in, out := in.Scopes, &out.Scopes - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Scopes = nil - } - out.RedirectURI = in.RedirectURI - out.UserName = in.UserName - out.UserUID = in.UserUID - out.AuthorizeToken = in.AuthorizeToken - out.RefreshToken = in.RefreshToken - return nil -} - -func DeepCopy_api_OAuthAccessTokenList(in OAuthAccessTokenList, out *OAuthAccessTokenList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]OAuthAccessToken, len(in)) - for i := range in { - if err := DeepCopy_api_OAuthAccessToken(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_OAuthAuthorizeToken(in OAuthAuthorizeToken, out *OAuthAuthorizeToken, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.ClientName = in.ClientName - out.ExpiresIn = in.ExpiresIn - if in.Scopes != nil { - in, out := in.Scopes, &out.Scopes - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Scopes = nil - } - out.RedirectURI = in.RedirectURI - out.State = in.State - out.UserName = in.UserName - out.UserUID = in.UserUID - return nil -} - -func DeepCopy_api_OAuthAuthorizeTokenList(in OAuthAuthorizeTokenList, out *OAuthAuthorizeTokenList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]OAuthAuthorizeToken, len(in)) - for i := range in { - if err := DeepCopy_api_OAuthAuthorizeToken(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_OAuthClient(in OAuthClient, out *OAuthClient, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.Secret = in.Secret - if in.AdditionalSecrets != nil { - in, out := in.AdditionalSecrets, &out.AdditionalSecrets - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.AdditionalSecrets = nil - } - out.RespondWithChallenges = in.RespondWithChallenges - if in.RedirectURIs != nil { - in, out := in.RedirectURIs, &out.RedirectURIs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.RedirectURIs = nil - } - out.GrantMethod = in.GrantMethod - if in.ScopeRestrictions != nil { - in, out := in.ScopeRestrictions, &out.ScopeRestrictions - *out = make([]ScopeRestriction, len(in)) - for i := range in { - if err := DeepCopy_api_ScopeRestriction(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ScopeRestrictions = nil - } - return nil -} - -func DeepCopy_api_OAuthClientAuthorization(in OAuthClientAuthorization, out *OAuthClientAuthorization, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.ClientName = in.ClientName - out.UserName = in.UserName - out.UserUID = in.UserUID - if in.Scopes != nil { - in, out := in.Scopes, &out.Scopes - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Scopes = nil - } - return nil -} - -func DeepCopy_api_OAuthClientAuthorizationList(in OAuthClientAuthorizationList, out *OAuthClientAuthorizationList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]OAuthClientAuthorization, len(in)) - for i := range in { - if err := DeepCopy_api_OAuthClientAuthorization(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_OAuthClientList(in OAuthClientList, out *OAuthClientList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]OAuthClient, len(in)) - for i := range in { - if err := DeepCopy_api_OAuthClient(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ScopeRestriction(in ScopeRestriction, out *ScopeRestriction, c *conversion.Cloner) error { - if in.ExactValues != nil { - in, out := in.ExactValues, &out.ExactValues - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.ExactValues = nil - } - if in.ClusterRole != nil { - in, out := in.ClusterRole, &out.ClusterRole - *out = new(ClusterRoleScopeRestriction) - if err := DeepCopy_api_ClusterRoleScopeRestriction(*in, *out, c); err != nil { - return err - } - } else { - out.ClusterRole = nil - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/oauth/api/doc.go b/vendor/github.com/openshift/origin/pkg/oauth/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/oauth/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/oauth/api/register.go b/vendor/github.com/openshift/origin/pkg/oauth/api/register.go index fead000d..0a1d80f0 100644 --- a/vendor/github.com/openshift/origin/pkg/oauth/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/oauth/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "oauth.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,13 +21,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &OAuthAccessToken{}, &OAuthAccessTokenList{}, @@ -37,6 +38,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &OAuthClientAuthorization{}, &OAuthClientAuthorizationList{}, ) + return nil } func (obj *OAuthClientAuthorizationList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/oauth/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/oauth/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..87bdc2fe --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/oauth/api/zz_generated.deepcopy.go @@ -0,0 +1,277 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterRoleScopeRestriction, InType: reflect.TypeOf(&ClusterRoleScopeRestriction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OAuthAccessToken, InType: reflect.TypeOf(&OAuthAccessToken{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OAuthAccessTokenList, InType: reflect.TypeOf(&OAuthAccessTokenList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OAuthAuthorizeToken, InType: reflect.TypeOf(&OAuthAuthorizeToken{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OAuthAuthorizeTokenList, InType: reflect.TypeOf(&OAuthAuthorizeTokenList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OAuthClient, InType: reflect.TypeOf(&OAuthClient{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OAuthClientAuthorization, InType: reflect.TypeOf(&OAuthClientAuthorization{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OAuthClientAuthorizationList, InType: reflect.TypeOf(&OAuthClientAuthorizationList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OAuthClientList, InType: reflect.TypeOf(&OAuthClientList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ScopeRestriction, InType: reflect.TypeOf(&ScopeRestriction{})}, + ) +} + +func DeepCopy_api_ClusterRoleScopeRestriction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleScopeRestriction) + out := out.(*ClusterRoleScopeRestriction) + if in.RoleNames != nil { + in, out := &in.RoleNames, &out.RoleNames + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.RoleNames = nil + } + if in.Namespaces != nil { + in, out := &in.Namespaces, &out.Namespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Namespaces = nil + } + out.AllowEscalation = in.AllowEscalation + return nil + } +} + +func DeepCopy_api_OAuthAccessToken(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OAuthAccessToken) + out := out.(*OAuthAccessToken) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.ClientName = in.ClientName + out.ExpiresIn = in.ExpiresIn + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Scopes = nil + } + out.RedirectURI = in.RedirectURI + out.UserName = in.UserName + out.UserUID = in.UserUID + out.AuthorizeToken = in.AuthorizeToken + out.RefreshToken = in.RefreshToken + return nil + } +} + +func DeepCopy_api_OAuthAccessTokenList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OAuthAccessTokenList) + out := out.(*OAuthAccessTokenList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuthAccessToken, len(*in)) + for i := range *in { + if err := DeepCopy_api_OAuthAccessToken(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_OAuthAuthorizeToken(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OAuthAuthorizeToken) + out := out.(*OAuthAuthorizeToken) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.ClientName = in.ClientName + out.ExpiresIn = in.ExpiresIn + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Scopes = nil + } + out.RedirectURI = in.RedirectURI + out.State = in.State + out.UserName = in.UserName + out.UserUID = in.UserUID + return nil + } +} + +func DeepCopy_api_OAuthAuthorizeTokenList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OAuthAuthorizeTokenList) + out := out.(*OAuthAuthorizeTokenList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuthAuthorizeToken, len(*in)) + for i := range *in { + if err := DeepCopy_api_OAuthAuthorizeToken(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_OAuthClient(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OAuthClient) + out := out.(*OAuthClient) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Secret = in.Secret + if in.AdditionalSecrets != nil { + in, out := &in.AdditionalSecrets, &out.AdditionalSecrets + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.AdditionalSecrets = nil + } + out.RespondWithChallenges = in.RespondWithChallenges + if in.RedirectURIs != nil { + in, out := &in.RedirectURIs, &out.RedirectURIs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.RedirectURIs = nil + } + out.GrantMethod = in.GrantMethod + if in.ScopeRestrictions != nil { + in, out := &in.ScopeRestrictions, &out.ScopeRestrictions + *out = make([]ScopeRestriction, len(*in)) + for i := range *in { + if err := DeepCopy_api_ScopeRestriction(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.ScopeRestrictions = nil + } + return nil + } +} + +func DeepCopy_api_OAuthClientAuthorization(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OAuthClientAuthorization) + out := out.(*OAuthClientAuthorization) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.ClientName = in.ClientName + out.UserName = in.UserName + out.UserUID = in.UserUID + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Scopes = nil + } + return nil + } +} + +func DeepCopy_api_OAuthClientAuthorizationList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OAuthClientAuthorizationList) + out := out.(*OAuthClientAuthorizationList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuthClientAuthorization, len(*in)) + for i := range *in { + if err := DeepCopy_api_OAuthClientAuthorization(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_OAuthClientList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OAuthClientList) + out := out.(*OAuthClientList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]OAuthClient, len(*in)) + for i := range *in { + if err := DeepCopy_api_OAuthClient(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ScopeRestriction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScopeRestriction) + out := out.(*ScopeRestriction) + if in.ExactValues != nil { + in, out := &in.ExactValues, &out.ExactValues + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ExactValues = nil + } + if in.ClusterRole != nil { + in, out := &in.ClusterRole, &out.ClusterRole + *out = new(ClusterRoleScopeRestriction) + if err := DeepCopy_api_ClusterRoleScopeRestriction(*in, *out, c); err != nil { + return err + } + } else { + out.ClusterRole = nil + } + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/project/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/project/api/deep_copy_generated.go deleted file mode 100644 index dafd929b..00000000 --- a/vendor/github.com/openshift/origin/pkg/project/api/deep_copy_generated.go +++ /dev/null @@ -1,91 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_Project, - DeepCopy_api_ProjectList, - DeepCopy_api_ProjectRequest, - DeepCopy_api_ProjectSpec, - DeepCopy_api_ProjectStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_Project(in Project, out *Project, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ProjectSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_ProjectStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ProjectList(in ProjectList, out *ProjectList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Project, len(in)) - for i := range in { - if err := DeepCopy_api_Project(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ProjectRequest(in ProjectRequest, out *ProjectRequest, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.DisplayName = in.DisplayName - out.Description = in.Description - return nil -} - -func DeepCopy_api_ProjectSpec(in ProjectSpec, out *ProjectSpec, c *conversion.Cloner) error { - if in.Finalizers != nil { - in, out := in.Finalizers, &out.Finalizers - *out = make([]api.FinalizerName, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Finalizers = nil - } - return nil -} - -func DeepCopy_api_ProjectStatus(in ProjectStatus, out *ProjectStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/project/api/doc.go b/vendor/github.com/openshift/origin/pkg/project/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/project/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/project/api/register.go b/vendor/github.com/openshift/origin/pkg/project/api/register.go index ff0a09df..2c05107e 100644 --- a/vendor/github.com/openshift/origin/pkg/project/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/project/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "project.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,18 +21,19 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Project{}, &ProjectList{}, &ProjectRequest{}, ) + return nil } func (obj *ProjectRequest) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/project/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/project/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..c1d1a8a9 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/project/api/zz_generated.deepcopy.go @@ -0,0 +1,105 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Project, InType: reflect.TypeOf(&Project{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ProjectList, InType: reflect.TypeOf(&ProjectList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ProjectRequest, InType: reflect.TypeOf(&ProjectRequest{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ProjectSpec, InType: reflect.TypeOf(&ProjectSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ProjectStatus, InType: reflect.TypeOf(&ProjectStatus{})}, + ) +} + +func DeepCopy_api_Project(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Project) + out := out.(*Project) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ProjectSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_api_ProjectList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ProjectList) + out := out.(*ProjectList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Project, len(*in)) + for i := range *in { + if err := DeepCopy_api_Project(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ProjectRequest(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ProjectRequest) + out := out.(*ProjectRequest) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.DisplayName = in.DisplayName + out.Description = in.Description + return nil + } +} + +func DeepCopy_api_ProjectSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ProjectSpec) + out := out.(*ProjectSpec) + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]pkg_api.FinalizerName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Finalizers = nil + } + return nil + } +} + +func DeepCopy_api_ProjectStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ProjectStatus) + out := out.(*ProjectStatus) + out.Phase = in.Phase + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/quota/api/convert.go b/vendor/github.com/openshift/origin/pkg/quota/api/convert.go new file mode 100644 index 00000000..399a6f4b --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/quota/api/convert.go @@ -0,0 +1,19 @@ +package api + +// ConvertClusterResourceQuotaToAppliedClusterQuota returns back a converted AppliedClusterResourceQuota which is NOT a deep copy. +func ConvertClusterResourceQuotaToAppliedClusterResourceQuota(in *ClusterResourceQuota) *AppliedClusterResourceQuota { + return &AppliedClusterResourceQuota{ + ObjectMeta: in.ObjectMeta, + Spec: in.Spec, + Status: in.Status, + } +} + +// ConvertClusterResourceQuotaToAppliedClusterQuota returns back a converted AppliedClusterResourceQuota which is NOT a deep copy. +func ConvertAppliedClusterResourceQuotaToClusterResourceQuota(in *AppliedClusterResourceQuota) *ClusterResourceQuota { + return &ClusterResourceQuota{ + ObjectMeta: in.ObjectMeta, + Spec: in.Spec, + Status: in.Status, + } +} diff --git a/vendor/github.com/openshift/origin/pkg/quota/api/doc.go b/vendor/github.com/openshift/origin/pkg/quota/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/quota/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/quota/api/fields.go b/vendor/github.com/openshift/origin/pkg/quota/api/fields.go new file mode 100644 index 00000000..675a74d8 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/quota/api/fields.go @@ -0,0 +1,9 @@ +package api + +import "k8s.io/kubernetes/pkg/fields" + +func ClusterResourceQuotaToSelectableFields(quota *ClusterResourceQuota) fields.Set { + return fields.Set{ + "metadata.name": quota.Name, + } +} diff --git a/vendor/github.com/openshift/origin/pkg/quota/api/helpers.go b/vendor/github.com/openshift/origin/pkg/quota/api/helpers.go new file mode 100644 index 00000000..ad3057a0 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/quota/api/helpers.go @@ -0,0 +1,56 @@ +package api + +import ( + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" +) + +var accessor = meta.NewAccessor() + +func GetMatcher(selector ClusterResourceQuotaSelector) (func(obj runtime.Object) (bool, error), error) { + var labelSelector labels.Selector + if selector.LabelSelector != nil { + var err error + labelSelector, err = unversioned.LabelSelectorAsSelector(selector.LabelSelector) + if err != nil { + return nil, err + } + } + + var annotationSelector map[string]string + if len(selector.AnnotationSelector) > 0 { + // ensure our matcher has a stable copy of the map + annotationSelector = make(map[string]string, len(selector.AnnotationSelector)) + for k, v := range selector.AnnotationSelector { + annotationSelector[k] = v + } + } + + return func(obj runtime.Object) (bool, error) { + if labelSelector != nil { + objLabels, err := accessor.Labels(obj) + if err != nil { + return false, err + } + if !labelSelector.Matches(labels.Set(objLabels)) { + return false, nil + } + } + + if annotationSelector != nil { + objAnnotations, err := accessor.Annotations(obj) + if err != nil { + return false, err + } + for k, v := range annotationSelector { + if objValue, exists := objAnnotations[k]; !exists || objValue != v { + return false, nil + } + } + } + + return true, nil + }, nil +} diff --git a/vendor/github.com/openshift/origin/pkg/quota/api/register.go b/vendor/github.com/openshift/origin/pkg/quota/api/register.go new file mode 100644 index 00000000..2dfe48ee --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/quota/api/register.go @@ -0,0 +1,48 @@ +package api + +import ( + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" +) + +const GroupName = "" + +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns back a Group qualified GroupKind +func Kind(kind string) unversioned.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns back a Group qualified GroupResource +func Resource(resource string) unversioned.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &ClusterResourceQuota{}, + &ClusterResourceQuotaList{}, + &AppliedClusterResourceQuota{}, + &AppliedClusterResourceQuotaList{}, + ) + return nil +} + +func (obj *AppliedClusterResourceQuotaList) GetObjectKind() unversioned.ObjectKind { + return &obj.TypeMeta +} +func (obj *AppliedClusterResourceQuota) GetObjectKind() unversioned.ObjectKind { + return &obj.TypeMeta +} + +func (obj *ClusterResourceQuotaList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *ClusterResourceQuota) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *ClusterResourceQuota) GetObjectMeta() meta.Object { return &obj.ObjectMeta } diff --git a/vendor/github.com/openshift/origin/pkg/quota/api/types.go b/vendor/github.com/openshift/origin/pkg/quota/api/types.go new file mode 100644 index 00000000..2b07893f --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/quota/api/types.go @@ -0,0 +1,165 @@ +package api + +import ( + "container/list" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" +) + +// ClusterResourceQuota mirrors ResourceQuota at a cluster scope. This object is easily convertible to +// synthetic ResourceQuota object to allow quota evaluation re-use. +type ClusterResourceQuota struct { + unversioned.TypeMeta + // Standard object's metadata. + kapi.ObjectMeta + + // Spec defines the desired quota + Spec ClusterResourceQuotaSpec + + // Status defines the actual enforced quota and its current usage + Status ClusterResourceQuotaStatus +} + +// ClusterResourceQuotaSpec defines the desired quota restrictions +type ClusterResourceQuotaSpec struct { + // Selector is the selector used to match projects. + // It should only select active projects on the scale of dozens (though it can select + // many more less active projects). These projects will contend on object creation through + // this resource. + Selector ClusterResourceQuotaSelector + + // Quota defines the desired quota + Quota kapi.ResourceQuotaSpec +} + +// ClusterResourceQuotaSelector is used to select projects. At least one of LabelSelector or AnnotationSelector +// must present. If only one is present, it is the only selection criteria. If both are specified, +// the project must match both restrictions. +type ClusterResourceQuotaSelector struct { + // LabelSelector is used to select projects by label. + LabelSelector *unversioned.LabelSelector + + // AnnotationSelector is used to select projects by annotation. + AnnotationSelector map[string]string +} + +// ClusterResourceQuotaStatus defines the actual enforced quota and its current usage +type ClusterResourceQuotaStatus struct { + // Total defines the actual enforced quota and its current usage across all projects + Total kapi.ResourceQuotaStatus + + // Namespaces slices the usage by project. This division allows for quick resolution of + // deletion reconcilation inside of a single project without requiring a recalculation + // across all projects. This map can be used to pull the deltas for a given project. + Namespaces ResourceQuotasStatusByNamespace +} + +// ClusterResourceQuotaList is a collection of ClusterResourceQuotas +type ClusterResourceQuotaList struct { + unversioned.TypeMeta + // Standard object's metadata. + unversioned.ListMeta + + // Items is a list of ClusterResourceQuotas + Items []ClusterResourceQuota +} + +// AppliedClusterResourceQuota mirrors ClusterResourceQuota at a project scope, for projection +// into a project. It allows a project-admin to know which ClusterResourceQuotas are applied to +// his project and their associated usage. +type AppliedClusterResourceQuota struct { + unversioned.TypeMeta + // Standard object's metadata. + kapi.ObjectMeta + + // Spec defines the desired quota + Spec ClusterResourceQuotaSpec + + // Status defines the actual enforced quota and its current usage + Status ClusterResourceQuotaStatus +} + +// AppliedClusterResourceQuotaList is a collection of AppliedClusterResourceQuotas +type AppliedClusterResourceQuotaList struct { + unversioned.TypeMeta + // Standard object's metadata. + unversioned.ListMeta + + // Items is a list of AppliedClusterResourceQuota + Items []AppliedClusterResourceQuota +} + +// ResourceQuotasStatusByNamespace provides type correct methods +type ResourceQuotasStatusByNamespace struct { + orderedMap orderedMap +} + +func (o *ResourceQuotasStatusByNamespace) Insert(key string, value kapi.ResourceQuotaStatus) { + o.orderedMap.Insert(key, value) +} + +func (o *ResourceQuotasStatusByNamespace) Get(key string) (kapi.ResourceQuotaStatus, bool) { + ret, ok := o.orderedMap.Get(key) + if !ok { + return kapi.ResourceQuotaStatus{}, ok + } + return ret.(kapi.ResourceQuotaStatus), ok +} + +func (o *ResourceQuotasStatusByNamespace) Remove(key string) { + o.orderedMap.Remove(key) +} + +func (o *ResourceQuotasStatusByNamespace) OrderedKeys() *list.List { + return o.orderedMap.OrderedKeys() +} + +// orderedMap is a very simple ordering a map tracking insertion order. It allows fast and stable serializations +// for our encoding. You could probably do something fancier with pointers to interfaces, but I didn't. +type orderedMap struct { + backingMap map[string]interface{} + orderedKeys *list.List +} + +// Insert puts something else in the map. keys are ordered based on first insertion, not last touch. +func (o *orderedMap) Insert(key string, value interface{}) { + if o.backingMap == nil { + o.backingMap = map[string]interface{}{} + } + if o.orderedKeys == nil { + o.orderedKeys = list.New() + } + + if _, exists := o.backingMap[key]; !exists { + o.orderedKeys.PushBack(key) + } + o.backingMap[key] = value +} + +func (o *orderedMap) Get(key string) (interface{}, bool) { + ret, ok := o.backingMap[key] + return ret, ok +} + +func (o *orderedMap) Remove(key string) { + delete(o.backingMap, key) + + if o.orderedKeys == nil { + return + } + for e := o.orderedKeys.Front(); e != nil; e = e.Next() { + if e.Value.(string) == key { + o.orderedKeys.Remove(e) + break + } + } +} + +// OrderedKeys returns back the ordered keys. This can be used to build a stable serialization +func (o *orderedMap) OrderedKeys() *list.List { + if o.orderedKeys == nil { + o.orderedKeys = list.New() + } + return o.orderedKeys +} diff --git a/vendor/github.com/openshift/origin/pkg/quota/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/quota/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..7f2dd622 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/quota/api/zz_generated.deepcopy.go @@ -0,0 +1,177 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AppliedClusterResourceQuota, InType: reflect.TypeOf(&AppliedClusterResourceQuota{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AppliedClusterResourceQuotaList, InType: reflect.TypeOf(&AppliedClusterResourceQuotaList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterResourceQuota, InType: reflect.TypeOf(&ClusterResourceQuota{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterResourceQuotaList, InType: reflect.TypeOf(&ClusterResourceQuotaList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterResourceQuotaSelector, InType: reflect.TypeOf(&ClusterResourceQuotaSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterResourceQuotaSpec, InType: reflect.TypeOf(&ClusterResourceQuotaSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterResourceQuotaStatus, InType: reflect.TypeOf(&ClusterResourceQuotaStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuotasStatusByNamespace, InType: reflect.TypeOf(&ResourceQuotasStatusByNamespace{})}, + ) +} + +func DeepCopy_api_AppliedClusterResourceQuota(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AppliedClusterResourceQuota) + out := out.(*AppliedClusterResourceQuota) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ClusterResourceQuotaSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_ClusterResourceQuotaStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_AppliedClusterResourceQuotaList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AppliedClusterResourceQuotaList) + out := out.(*AppliedClusterResourceQuotaList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]AppliedClusterResourceQuota, len(*in)) + for i := range *in { + if err := DeepCopy_api_AppliedClusterResourceQuota(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ClusterResourceQuota(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterResourceQuota) + out := out.(*ClusterResourceQuota) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ClusterResourceQuotaSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_ClusterResourceQuotaStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ClusterResourceQuotaList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterResourceQuotaList) + out := out.(*ClusterResourceQuotaList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterResourceQuota, len(*in)) + for i := range *in { + if err := DeepCopy_api_ClusterResourceQuota(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ClusterResourceQuotaSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterResourceQuotaSelector) + out := out.(*ClusterResourceQuotaSelector) + if in.LabelSelector != nil { + in, out := &in.LabelSelector, &out.LabelSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.LabelSelector = nil + } + if in.AnnotationSelector != nil { + in, out := &in.AnnotationSelector, &out.AnnotationSelector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.AnnotationSelector = nil + } + return nil + } +} + +func DeepCopy_api_ClusterResourceQuotaSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterResourceQuotaSpec) + out := out.(*ClusterResourceQuotaSpec) + if err := DeepCopy_api_ClusterResourceQuotaSelector(&in.Selector, &out.Selector, c); err != nil { + return err + } + if err := pkg_api.DeepCopy_api_ResourceQuotaSpec(&in.Quota, &out.Quota, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ClusterResourceQuotaStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterResourceQuotaStatus) + out := out.(*ClusterResourceQuotaStatus) + if err := pkg_api.DeepCopy_api_ResourceQuotaStatus(&in.Total, &out.Total, c); err != nil { + return err + } + if err := DeepCopy_api_ResourceQuotasStatusByNamespace(&in.Namespaces, &out.Namespaces, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ResourceQuotasStatusByNamespace(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotasStatusByNamespace) + out := out.(*ResourceQuotasStatusByNamespace) + if newVal, err := c.DeepCopy(&in.orderedMap); err != nil { + return err + } else { + out.orderedMap = *newVal.(*orderedMap) + } + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/quota/util/helper.go b/vendor/github.com/openshift/origin/pkg/quota/util/helper.go new file mode 100644 index 00000000..6e7e7707 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/quota/util/helper.go @@ -0,0 +1,42 @@ +package util + +import ( + "strings" + + apierrs "k8s.io/kubernetes/pkg/api/errors" +) + +// errMessageString is a part of error message copied from quotaAdmission.Admit() method in +// k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission.go module +const errQuotaMessageString = `exceeded quota:` +const errQuotaUnknownMessageString = `status unknown for quota:` +const errLimitsMessageString = `exceeds the maximum limit` + +// IsErrorQuotaExceeded returns true if the given error stands for a denied request caused by detected quota +// abuse. +func IsErrorQuotaExceeded(err error) bool { + if isForbidden := apierrs.IsForbidden(err); isForbidden || apierrs.IsInvalid(err) { + lowered := strings.ToLower(err.Error()) + // the limit error message can be accompanied only by Invalid reason + if strings.Contains(lowered, errLimitsMessageString) { + return true + } + // the quota error message can be accompanied only by Forbidden reason + if isForbidden && (strings.Contains(lowered, errQuotaMessageString) || strings.Contains(lowered, errQuotaUnknownMessageString)) { + return true + } + } + return false +} + +// IsErrorLimitExceeded returns true if the given error is a limit error. +func IsErrorLimitExceeded(err error) bool { + if isForbidden := apierrs.IsForbidden(err); isForbidden || apierrs.IsInvalid(err) { + lowered := strings.ToLower(err.Error()) + // the limit error message can be accompanied only by Invalid reason + if strings.Contains(lowered, errLimitsMessageString) { + return true + } + } + return false +} diff --git a/vendor/github.com/openshift/origin/pkg/route/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/route/api/deep_copy_generated.go deleted file mode 100644 index e162ffd5..00000000 --- a/vendor/github.com/openshift/origin/pkg/route/api/deep_copy_generated.go +++ /dev/null @@ -1,190 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_Route, - DeepCopy_api_RouteIngress, - DeepCopy_api_RouteIngressCondition, - DeepCopy_api_RouteList, - DeepCopy_api_RoutePort, - DeepCopy_api_RouteSpec, - DeepCopy_api_RouteStatus, - DeepCopy_api_RouteTargetReference, - DeepCopy_api_RouterShard, - DeepCopy_api_TLSConfig, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_Route(in Route, out *Route, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_RouteSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_RouteStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_RouteIngress(in RouteIngress, out *RouteIngress, c *conversion.Cloner) error { - out.Host = in.Host - out.RouterName = in.RouterName - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]RouteIngressCondition, len(in)) - for i := range in { - if err := DeepCopy_api_RouteIngressCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - return nil -} - -func DeepCopy_api_RouteIngressCondition(in RouteIngressCondition, out *RouteIngressCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - out.Reason = in.Reason - out.Message = in.Message - if in.LastTransitionTime != nil { - in, out := in.LastTransitionTime, &out.LastTransitionTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.LastTransitionTime = nil - } - return nil -} - -func DeepCopy_api_RouteList(in RouteList, out *RouteList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Route, len(in)) - for i := range in { - if err := DeepCopy_api_Route(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_RoutePort(in RoutePort, out *RoutePort, c *conversion.Cloner) error { - if err := intstr.DeepCopy_intstr_IntOrString(in.TargetPort, &out.TargetPort, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_RouteSpec(in RouteSpec, out *RouteSpec, c *conversion.Cloner) error { - out.Host = in.Host - out.Path = in.Path - if err := DeepCopy_api_RouteTargetReference(in.To, &out.To, c); err != nil { - return err - } - if in.AlternateBackends != nil { - in, out := in.AlternateBackends, &out.AlternateBackends - *out = make([]RouteTargetReference, len(in)) - for i := range in { - if err := DeepCopy_api_RouteTargetReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.AlternateBackends = nil - } - if in.Port != nil { - in, out := in.Port, &out.Port - *out = new(RoutePort) - if err := DeepCopy_api_RoutePort(*in, *out, c); err != nil { - return err - } - } else { - out.Port = nil - } - if in.TLS != nil { - in, out := in.TLS, &out.TLS - *out = new(TLSConfig) - if err := DeepCopy_api_TLSConfig(*in, *out, c); err != nil { - return err - } - } else { - out.TLS = nil - } - return nil -} - -func DeepCopy_api_RouteStatus(in RouteStatus, out *RouteStatus, c *conversion.Cloner) error { - if in.Ingress != nil { - in, out := in.Ingress, &out.Ingress - *out = make([]RouteIngress, len(in)) - for i := range in { - if err := DeepCopy_api_RouteIngress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ingress = nil - } - return nil -} - -func DeepCopy_api_RouteTargetReference(in RouteTargetReference, out *RouteTargetReference, c *conversion.Cloner) error { - out.Kind = in.Kind - out.Name = in.Name - if in.Weight != nil { - in, out := in.Weight, &out.Weight - *out = new(int32) - **out = *in - } else { - out.Weight = nil - } - return nil -} - -func DeepCopy_api_RouterShard(in RouterShard, out *RouterShard, c *conversion.Cloner) error { - out.ShardName = in.ShardName - out.DNSSuffix = in.DNSSuffix - return nil -} - -func DeepCopy_api_TLSConfig(in TLSConfig, out *TLSConfig, c *conversion.Cloner) error { - out.Termination = in.Termination - out.Certificate = in.Certificate - out.Key = in.Key - out.CACertificate = in.CACertificate - out.DestinationCACertificate = in.DestinationCACertificate - out.InsecureEdgeTerminationPolicy = in.InsecureEdgeTerminationPolicy - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/route/api/doc.go b/vendor/github.com/openshift/origin/pkg/route/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/route/api/register.go b/vendor/github.com/openshift/origin/pkg/route/api/register.go index 1b653621..9016fc26 100644 --- a/vendor/github.com/openshift/origin/pkg/route/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/route/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "route.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,17 +21,18 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Route{}, &RouteList{}, ) + return nil } func (obj *Route) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/route/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/route/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..aa04f9e6 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/api/zz_generated.deepcopy.go @@ -0,0 +1,220 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Route, InType: reflect.TypeOf(&Route{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RouteIngress, InType: reflect.TypeOf(&RouteIngress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RouteIngressCondition, InType: reflect.TypeOf(&RouteIngressCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RouteList, InType: reflect.TypeOf(&RouteList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RoutePort, InType: reflect.TypeOf(&RoutePort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RouteSpec, InType: reflect.TypeOf(&RouteSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RouteStatus, InType: reflect.TypeOf(&RouteStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RouteTargetReference, InType: reflect.TypeOf(&RouteTargetReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RouterShard, InType: reflect.TypeOf(&RouterShard{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TLSConfig, InType: reflect.TypeOf(&TLSConfig{})}, + ) +} + +func DeepCopy_api_Route(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Route) + out := out.(*Route) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_RouteSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_RouteStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_RouteIngress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RouteIngress) + out := out.(*RouteIngress) + out.Host = in.Host + out.RouterName = in.RouterName + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]RouteIngressCondition, len(*in)) + for i := range *in { + if err := DeepCopy_api_RouteIngressCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + return nil + } +} + +func DeepCopy_api_RouteIngressCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RouteIngressCondition) + out := out.(*RouteIngressCondition) + out.Type = in.Type + out.Status = in.Status + out.Reason = in.Reason + out.Message = in.Message + if in.LastTransitionTime != nil { + in, out := &in.LastTransitionTime, &out.LastTransitionTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.LastTransitionTime = nil + } + return nil + } +} + +func DeepCopy_api_RouteList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RouteList) + out := out.(*RouteList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Route, len(*in)) + for i := range *in { + if err := DeepCopy_api_Route(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_RoutePort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoutePort) + out := out.(*RoutePort) + out.TargetPort = in.TargetPort + return nil + } +} + +func DeepCopy_api_RouteSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RouteSpec) + out := out.(*RouteSpec) + out.Host = in.Host + out.Path = in.Path + if err := DeepCopy_api_RouteTargetReference(&in.To, &out.To, c); err != nil { + return err + } + if in.AlternateBackends != nil { + in, out := &in.AlternateBackends, &out.AlternateBackends + *out = make([]RouteTargetReference, len(*in)) + for i := range *in { + if err := DeepCopy_api_RouteTargetReference(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.AlternateBackends = nil + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(RoutePort) + **out = **in + } else { + out.Port = nil + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = new(TLSConfig) + **out = **in + } else { + out.TLS = nil + } + return nil + } +} + +func DeepCopy_api_RouteStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RouteStatus) + out := out.(*RouteStatus) + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]RouteIngress, len(*in)) + for i := range *in { + if err := DeepCopy_api_RouteIngress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Ingress = nil + } + return nil + } +} + +func DeepCopy_api_RouteTargetReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RouteTargetReference) + out := out.(*RouteTargetReference) + out.Kind = in.Kind + out.Name = in.Name + if in.Weight != nil { + in, out := &in.Weight, &out.Weight + *out = new(int32) + **out = **in + } else { + out.Weight = nil + } + return nil + } +} + +func DeepCopy_api_RouterShard(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RouterShard) + out := out.(*RouterShard) + out.ShardName = in.ShardName + out.DNSSuffix = in.DNSSuffix + return nil + } +} + +func DeepCopy_api_TLSConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TLSConfig) + out := out.(*TLSConfig) + out.Termination = in.Termination + out.Certificate = in.Certificate + out.Key = in.Key + out.CACertificate = in.CACertificate + out.DestinationCACertificate = in.DestinationCACertificate + out.InsecureEdgeTerminationPolicy = in.InsecureEdgeTerminationPolicy + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/route/generator/doc.go b/vendor/github.com/openshift/origin/pkg/route/generator/doc.go new file mode 100644 index 00000000..c86c1035 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/generator/doc.go @@ -0,0 +1,2 @@ +// Package generator implements the Generator interface for routes +package generator diff --git a/vendor/github.com/openshift/origin/pkg/route/generator/generate.go b/vendor/github.com/openshift/origin/pkg/route/generator/generate.go new file mode 100644 index 00000000..b064b05e --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/generator/generate.go @@ -0,0 +1,93 @@ +package generator + +import ( + "fmt" + "strconv" + + kapi "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/kubectl" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/intstr" + + "github.com/openshift/origin/pkg/route/api" +) + +// RouteGenerator generates routes from a given set of parameters +type RouteGenerator struct{} + +// RouteGenerator implements the kubectl.Generator interface for routes +var _ kubectl.Generator = RouteGenerator{} + +// ParamNames returns the parameters required for generating a route +func (RouteGenerator) ParamNames() []kubectl.GeneratorParam { + return []kubectl.GeneratorParam{ + {Name: "labels", Required: false}, + {Name: "default-name", Required: true}, + {Name: "port", Required: false}, + {Name: "name", Required: false}, + {Name: "hostname", Required: false}, + {Name: "path", Required: false}, + } +} + +// Generate accepts a set of parameters and maps them into a new route +func (RouteGenerator) Generate(genericParams map[string]interface{}) (runtime.Object, error) { + var ( + labels map[string]string + err error + ) + + params := map[string]string{} + for key, value := range genericParams { + strVal, isString := value.(string) + if !isString { + return nil, fmt.Errorf("expected string, saw %v for '%s'", value, key) + } + params[key] = strVal + } + + labelString, found := params["labels"] + if found && len(labelString) > 0 { + labels, err = kubectl.ParseLabels(labelString) + if err != nil { + return nil, err + } + } + + name, found := params["name"] + if !found || len(name) == 0 { + name, found = params["default-name"] + if !found || len(name) == 0 { + return nil, fmt.Errorf("'name' is a required parameter.") + } + } + + route := &api.Route{ + ObjectMeta: kapi.ObjectMeta{ + Name: name, + Labels: labels, + }, + Spec: api.RouteSpec{ + Host: params["hostname"], + Path: params["path"], + To: api.RouteTargetReference{ + Name: params["default-name"], + }, + }, + } + + portString := params["port"] + if len(portString) > 0 { + var targetPort intstr.IntOrString + if port, err := strconv.Atoi(portString); err == nil { + targetPort = intstr.FromInt(port) + } else { + targetPort = intstr.FromString(portString) + } + route.Spec.Port = &api.RoutePort{ + TargetPort: targetPort, + } + } + + return route, nil +} diff --git a/vendor/github.com/openshift/origin/pkg/route/graph/analysis/analysis.go b/vendor/github.com/openshift/origin/pkg/route/graph/analysis/analysis.go new file mode 100644 index 00000000..f44194be --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/graph/analysis/analysis.go @@ -0,0 +1,228 @@ +package analysis + +import ( + "fmt" + "strconv" + + "github.com/gonum/graph" + + kapi "k8s.io/kubernetes/pkg/api" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + routeapi "github.com/openshift/origin/pkg/route/api" + routeedges "github.com/openshift/origin/pkg/route/graph" + routegraph "github.com/openshift/origin/pkg/route/graph/nodes" +) + +const ( + // MissingRoutePortWarning is returned when a route has no route port specified + // and the service it routes to has multiple ports. + MissingRoutePortWarning = "MissingRoutePort" + // WrongRoutePortWarning is returned when a route has a route port specified + // but the service it points to has no such port (either as a named port or as + // a target port). + WrongRoutePortWarning = "WrongRoutePort" + // MissingServiceWarning is returned when there is no service for the specific route. + MissingServiceWarning = "MissingService" + // MissingTLSTerminationTypeErr is returned when a route with a tls config doesn't + // specify a tls termination type. + MissingTLSTerminationTypeErr = "MissingTLSTermination" + // PathBasedPassthroughErr is returned when a path based route is passthrough + // terminated. + PathBasedPassthroughErr = "PathBasedPassthrough" + // MissingTLSTerminationTypeErr is returned when a route with a tls config doesn't + // specify a tls termination type. + RouteNotAdmittedTypeErr = "RouteNotAdmitted" + // MissingRequiredRouterErr is returned when no router has been setup. + MissingRequiredRouterErr = "MissingRequiredRouter" +) + +// FindPortMappingIssues checks all routes and reports any issues related to their ports. +// Also non-existent services for routes are reported here. +func FindPortMappingIssues(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastRouteNode := range g.NodesByKind(routegraph.RouteNodeKind) { + routeNode := uncastRouteNode.(*routegraph.RouteNode) + marker := routePortMarker(g, f, routeNode) + if marker != nil { + markers = append(markers, *marker) + } + } + + return markers +} + +func routePortMarker(g osgraph.Graph, f osgraph.Namer, routeNode *routegraph.RouteNode) *osgraph.Marker { + for _, uncastServiceNode := range g.SuccessorNodesByEdgeKind(routeNode, routeedges.ExposedThroughRouteEdgeKind) { + svcNode := uncastServiceNode.(*kubegraph.ServiceNode) + + if !svcNode.Found() { + return &osgraph.Marker{ + Node: routeNode, + RelatedNodes: []graph.Node{svcNode}, + + Severity: osgraph.WarningSeverity, + Key: MissingServiceWarning, + Message: fmt.Sprintf("%s is supposed to route traffic to %s but %s doesn't exist.", + f.ResourceName(routeNode), f.ResourceName(svcNode), f.ResourceName(svcNode)), + // TODO: Suggest 'oc create service' once that's a thing. + // See https://github.com/kubernetes/kubernetes/pull/19509 + } + } + + if len(svcNode.Spec.Ports) > 1 && (routeNode.Spec.Port == nil || len(routeNode.Spec.Port.TargetPort.String()) == 0) { + return &osgraph.Marker{ + Node: routeNode, + RelatedNodes: []graph.Node{svcNode}, + + Severity: osgraph.WarningSeverity, + Key: MissingRoutePortWarning, + Message: fmt.Sprintf("%s doesn't have a port specified and is routing traffic to %s which uses multiple ports.", + f.ResourceName(routeNode), f.ResourceName(svcNode)), + } + } + + if routeNode.Spec.Port == nil { + // If no port is specified, we don't need to analyze any further. + return nil + } + + routePortString := routeNode.Spec.Port.TargetPort.String() + if routePort, err := strconv.Atoi(routePortString); err == nil { + for _, port := range svcNode.Spec.Ports { + if port.TargetPort.IntValue() == routePort { + return nil + } + } + + // route has a numeric port, service has no port with that number as a targetPort. + marker := &osgraph.Marker{ + Node: routeNode, + RelatedNodes: []graph.Node{svcNode}, + + Severity: osgraph.WarningSeverity, + Key: WrongRoutePortWarning, + Message: fmt.Sprintf("%s has a port specified (%d) but %s has no such targetPort.", + f.ResourceName(routeNode), routePort, f.ResourceName(svcNode)), + } + if len(svcNode.Spec.Ports) == 1 { + marker.Suggestion = osgraph.Suggestion(fmt.Sprintf("oc patch %s -p '{\"spec\":{\"port\":{\"targetPort\": %d}}}'", f.ResourceName(routeNode), svcNode.Spec.Ports[0].TargetPort.IntValue())) + } + + return marker + } + + for _, port := range svcNode.Spec.Ports { + if port.Name == routePortString { + return nil + } + } + + // route has a named port, service has no port with that name. + marker := &osgraph.Marker{ + Node: routeNode, + RelatedNodes: []graph.Node{svcNode}, + + Severity: osgraph.WarningSeverity, + Key: WrongRoutePortWarning, + Message: fmt.Sprintf("%s has a named port specified (%q) but %s has no such named port.", + f.ResourceName(routeNode), routePortString, f.ResourceName(svcNode)), + } + if len(svcNode.Spec.Ports) == 1 { + marker.Suggestion = osgraph.Suggestion(fmt.Sprintf("oc patch %s -p '{\"spec\":{\"port\":{\"targetPort\": %d}}}'", f.ResourceName(routeNode), svcNode.Spec.Ports[0].TargetPort.IntValue())) + } + + return marker + } + return nil +} + +func FindMissingTLSTerminationType(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastRouteNode := range g.NodesByKind(routegraph.RouteNodeKind) { + routeNode := uncastRouteNode.(*routegraph.RouteNode) + + if routeNode.Spec.TLS != nil && len(routeNode.Spec.TLS.Termination) == 0 { + markers = append(markers, osgraph.Marker{ + Node: routeNode, + + Severity: osgraph.ErrorSeverity, + Key: MissingTLSTerminationTypeErr, + Message: fmt.Sprintf("%s has a TLS configuration but no termination type specified.", f.ResourceName(routeNode)), + Suggestion: osgraph.Suggestion(fmt.Sprintf("oc patch %s -p '{\"spec\":{\"tls\":{\"termination\":\"\"}}}' (replace with a valid termination type: edge, passthrough, reencrypt)", f.ResourceName(routeNode)))}) + } + } + + return markers +} + +// FindRouteAdmissionFailures creates markers for any routes that were rejected by their routers +func FindRouteAdmissionFailures(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastRouteNode := range g.NodesByKind(routegraph.RouteNodeKind) { + routeNode := uncastRouteNode.(*routegraph.RouteNode) + Route: + for _, ingress := range routeNode.Status.Ingress { + switch status, condition := routeapi.IngressConditionStatus(&ingress, routeapi.RouteAdmitted); status { + case kapi.ConditionFalse: + markers = append(markers, osgraph.Marker{ + Node: routeNode, + + Severity: osgraph.ErrorSeverity, + Key: RouteNotAdmittedTypeErr, + Message: fmt.Sprintf("%s was not accepted by router %q: %s (%s)", f.ResourceName(routeNode), ingress.RouterName, condition.Message, condition.Reason), + }) + break Route + } + } + } + + return markers +} + +// FindMissingRouter creates markers for all routes in case there is no running router. +func FindMissingRouter(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastRouteNode := range g.NodesByKind(routegraph.RouteNodeKind) { + routeNode := uncastRouteNode.(*routegraph.RouteNode) + + if len(routeNode.Route.Status.Ingress) == 0 { + markers = append(markers, osgraph.Marker{ + Node: routeNode, + + Severity: osgraph.ErrorSeverity, + Key: MissingRequiredRouterErr, + Message: fmt.Sprintf("%s is routing traffic to svc/%s, but either the administrator has not installed a router or the router is not selecting this route.", f.ResourceName(routeNode), routeNode.Spec.To.Name), + Suggestion: osgraph.Suggestion("oc adm router -h"), + }) + } + } + + return markers +} + +func FindPathBasedPassthroughRoutes(g osgraph.Graph, f osgraph.Namer) []osgraph.Marker { + markers := []osgraph.Marker{} + + for _, uncastRouteNode := range g.NodesByKind(routegraph.RouteNodeKind) { + routeNode := uncastRouteNode.(*routegraph.RouteNode) + + if len(routeNode.Spec.Path) > 0 && routeNode.Spec.TLS != nil && routeNode.Spec.TLS.Termination == routeapi.TLSTerminationPassthrough { + markers = append(markers, osgraph.Marker{ + Node: routeNode, + + Severity: osgraph.ErrorSeverity, + Key: PathBasedPassthroughErr, + Message: fmt.Sprintf("%s is path-based and uses passthrough termination, which is an invalid combination.", f.ResourceName(routeNode)), + Suggestion: osgraph.Suggestion(fmt.Sprintf("1. use spec.tls.termination=edge or 2. use spec.tls.termination=reencrypt and specify spec.tls.destinationCACertificate or 3. remove spec.path")), + }) + } + } + + return markers +} diff --git a/vendor/github.com/openshift/origin/pkg/route/graph/analysis/doc.go b/vendor/github.com/openshift/origin/pkg/route/graph/analysis/doc.go new file mode 100644 index 00000000..8f8de870 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/graph/analysis/doc.go @@ -0,0 +1,3 @@ +// Package analysis provides functions that analyse routes and setup markers +// that will be reported by oc status +package analysis diff --git a/vendor/github.com/openshift/origin/pkg/route/graph/doc.go b/vendor/github.com/openshift/origin/pkg/route/graph/doc.go new file mode 100644 index 00000000..71ae6175 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/graph/doc.go @@ -0,0 +1,2 @@ +// Package graph contains graph utilities for routes +package graph diff --git a/vendor/github.com/openshift/origin/pkg/route/graph/edges.go b/vendor/github.com/openshift/origin/pkg/route/graph/edges.go new file mode 100644 index 00000000..38b816a1 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/graph/edges.go @@ -0,0 +1,45 @@ +package graph + +import ( + "github.com/gonum/graph" + + kapi "k8s.io/kubernetes/pkg/api" + + osgraph "github.com/openshift/origin/pkg/api/graph" + kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes" + routegraph "github.com/openshift/origin/pkg/route/graph/nodes" +) + +const ( + // ExposedThroughRouteEdgeKind is an edge from a route to any object that + // is exposed through routes + ExposedThroughRouteEdgeKind = "ExposedThroughRoute" +) + +// AddRouteEdges adds an edge that connect a service to a route in the given graph +func AddRouteEdges(g osgraph.MutableUniqueGraph, node *routegraph.RouteNode) { + syntheticService := &kapi.Service{} + syntheticService.Namespace = node.Namespace + syntheticService.Name = node.Spec.To.Name + + serviceNode := kubegraph.FindOrCreateSyntheticServiceNode(g, syntheticService) + g.AddEdge(node, serviceNode, ExposedThroughRouteEdgeKind) + + for _, svc := range node.Spec.AlternateBackends { + syntheticService := &kapi.Service{} + syntheticService.Namespace = node.Namespace + syntheticService.Name = svc.Name + + serviceNode := kubegraph.FindOrCreateSyntheticServiceNode(g, syntheticService) + g.AddEdge(node, serviceNode, ExposedThroughRouteEdgeKind) + } +} + +// AddAllRouteEdges adds service edges to all route nodes in the given graph +func AddAllRouteEdges(g osgraph.MutableUniqueGraph) { + for _, node := range g.(graph.Graph).Nodes() { + if routeNode, ok := node.(*routegraph.RouteNode); ok { + AddRouteEdges(g, routeNode) + } + } +} diff --git a/vendor/github.com/openshift/origin/pkg/route/graph/nodes/doc.go b/vendor/github.com/openshift/origin/pkg/route/graph/nodes/doc.go new file mode 100644 index 00000000..91a17a79 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/graph/nodes/doc.go @@ -0,0 +1,2 @@ +// Package nodes contains graph functions and types for routes +package nodes diff --git a/vendor/github.com/openshift/origin/pkg/route/graph/nodes/nodes.go b/vendor/github.com/openshift/origin/pkg/route/graph/nodes/nodes.go new file mode 100644 index 00000000..c7a954de --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/graph/nodes/nodes.go @@ -0,0 +1,22 @@ +package nodes + +import ( + "github.com/gonum/graph" + + osgraph "github.com/openshift/origin/pkg/api/graph" + routeapi "github.com/openshift/origin/pkg/route/api" +) + +// EnsureRouteNode adds a graph node for the specific route if it does not exist +func EnsureRouteNode(g osgraph.MutableUniqueGraph, route *routeapi.Route) *RouteNode { + return osgraph.EnsureUnique( + g, + RouteNodeName(route), + func(node osgraph.Node) graph.Node { + return &RouteNode{ + Node: node, + Route: route, + } + }, + ).(*RouteNode) +} diff --git a/vendor/github.com/openshift/origin/pkg/route/graph/nodes/types.go b/vendor/github.com/openshift/origin/pkg/route/graph/nodes/types.go new file mode 100644 index 00000000..18e779e7 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/route/graph/nodes/types.go @@ -0,0 +1,33 @@ +package nodes + +import ( + "reflect" + + osgraph "github.com/openshift/origin/pkg/api/graph" + routeapi "github.com/openshift/origin/pkg/route/api" +) + +var ( + RouteNodeKind = reflect.TypeOf(routeapi.Route{}).Name() +) + +func RouteNodeName(o *routeapi.Route) osgraph.UniqueName { + return osgraph.GetUniqueRuntimeObjectNodeName(RouteNodeKind, o) +} + +type RouteNode struct { + osgraph.Node + *routeapi.Route +} + +func (n RouteNode) Object() interface{} { + return n.Route +} + +func (n RouteNode) String() string { + return string(RouteNodeName(n.Route)) +} + +func (*RouteNode) Kind() string { + return RouteNodeKind +} diff --git a/vendor/github.com/openshift/origin/pkg/sdn/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/sdn/api/deep_copy_generated.go deleted file mode 100644 index 1535c8dc..00000000 --- a/vendor/github.com/openshift/origin/pkg/sdn/api/deep_copy_generated.go +++ /dev/null @@ -1,127 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_ClusterNetwork, - DeepCopy_api_ClusterNetworkList, - DeepCopy_api_HostSubnet, - DeepCopy_api_HostSubnetList, - DeepCopy_api_NetNamespace, - DeepCopy_api_NetNamespaceList, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_ClusterNetwork(in ClusterNetwork, out *ClusterNetwork, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.Network = in.Network - out.HostSubnetLength = in.HostSubnetLength - out.ServiceNetwork = in.ServiceNetwork - out.PluginName = in.PluginName - return nil -} - -func DeepCopy_api_ClusterNetworkList(in ClusterNetworkList, out *ClusterNetworkList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterNetwork, len(in)) - for i := range in { - if err := DeepCopy_api_ClusterNetwork(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_HostSubnet(in HostSubnet, out *HostSubnet, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.Host = in.Host - out.HostIP = in.HostIP - out.Subnet = in.Subnet - return nil -} - -func DeepCopy_api_HostSubnetList(in HostSubnetList, out *HostSubnetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]HostSubnet, len(in)) - for i := range in { - if err := DeepCopy_api_HostSubnet(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_NetNamespace(in NetNamespace, out *NetNamespace, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.NetName = in.NetName - out.NetID = in.NetID - return nil -} - -func DeepCopy_api_NetNamespaceList(in NetNamespaceList, out *NetNamespaceList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]NetNamespace, len(in)) - for i := range in { - if err := DeepCopy_api_NetNamespace(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/sdn/api/doc.go b/vendor/github.com/openshift/origin/pkg/sdn/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/sdn/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/sdn/api/fields.go b/vendor/github.com/openshift/origin/pkg/sdn/api/fields.go index 59318dd9..587f47c4 100644 --- a/vendor/github.com/openshift/origin/pkg/sdn/api/fields.go +++ b/vendor/github.com/openshift/origin/pkg/sdn/api/fields.go @@ -22,3 +22,11 @@ func NetNamespaceToSelectableFields(obj *NetNamespace) fields.Set { "metadata.name": obj.Name, } } + +// EgressNetworkPolicyToSelectableFields returns a label set that represents the object +func EgressNetworkPolicyToSelectableFields(obj *EgressNetworkPolicy) fields.Set { + return fields.Set{ + "metadata.name": obj.Name, + "metadata.namespace": obj.Namespace, + } +} diff --git a/vendor/github.com/openshift/origin/pkg/sdn/api/netid.go b/vendor/github.com/openshift/origin/pkg/sdn/api/netid.go new file mode 100644 index 00000000..8f45f346 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/sdn/api/netid.go @@ -0,0 +1,86 @@ +package api + +// Accessor methods to annotate NetNamespace for multitenant support +import ( + "fmt" + "strings" +) + +type PodNetworkAction string + +const ( + // Maximum VXLAN Virtual Network Identifier(VNID) as per RFC#7348 + MaxVNID = uint32((1 << 24) - 1) + // VNID: 1 to 9 are internally reserved for any special cases in the future + MinVNID = uint32(10) + // VNID: 0 reserved for default namespace and can reach any network in the cluster + GlobalVNID = uint32(0) + + // ChangePodNetworkAnnotation is an annotation on NetNamespace to request change of pod network + ChangePodNetworkAnnotation string = "pod.network.openshift.io/multitenant.change-network" + + // Acceptable values for ChangePodNetworkAnnotation + GlobalPodNetwork PodNetworkAction = "global" + JoinPodNetwork PodNetworkAction = "join" + IsolatePodNetwork PodNetworkAction = "isolate" +) + +var ( + ErrorPodNetworkAnnotationNotFound = fmt.Errorf("ChangePodNetworkAnnotation not found") +) + +// Check if the given vnid is valid or not +func ValidVNID(vnid uint32) error { + if vnid == GlobalVNID { + return nil + } + if vnid < MinVNID { + return fmt.Errorf("VNID must be greater than or equal to %d", MinVNID) + } + if vnid > MaxVNID { + return fmt.Errorf("VNID must be less than or equal to %d", MaxVNID) + } + return nil +} + +// GetChangePodNetworkAnnotation fetches network change intent from NetNamespace +func GetChangePodNetworkAnnotation(netns *NetNamespace) (PodNetworkAction, string, error) { + value, ok := netns.Annotations[ChangePodNetworkAnnotation] + if !ok { + return PodNetworkAction(""), "", ErrorPodNetworkAnnotationNotFound + } + + args := strings.Split(value, ":") + switch PodNetworkAction(args[0]) { + case GlobalPodNetwork: + return GlobalPodNetwork, "", nil + case JoinPodNetwork: + if len(args) != 2 { + return PodNetworkAction(""), "", fmt.Errorf("invalid namespace for join pod network: %s", value) + } + namespace := args[1] + return JoinPodNetwork, namespace, nil + case IsolatePodNetwork: + return IsolatePodNetwork, "", nil + } + + return PodNetworkAction(""), "", fmt.Errorf("invalid ChangePodNetworkAnnotation: %s", value) +} + +// SetChangePodNetworkAnnotation sets network change intent on NetNamespace +func SetChangePodNetworkAnnotation(netns *NetNamespace, action PodNetworkAction, params string) { + if netns.Annotations == nil { + netns.Annotations = make(map[string]string) + } + + value := string(action) + if len(params) != 0 { + value = fmt.Sprintf("%s:%s", value, params) + } + netns.Annotations[ChangePodNetworkAnnotation] = value +} + +// DeleteChangePodNetworkAnnotation removes network change intent from NetNamespace +func DeleteChangePodNetworkAnnotation(netns *NetNamespace) { + delete(netns.Annotations, ChangePodNetworkAnnotation) +} diff --git a/vendor/github.com/openshift/origin/pkg/sdn/api/register.go b/vendor/github.com/openshift/origin/pkg/sdn/api/register.go index 6831d7ef..dae9e59d 100644 --- a/vendor/github.com/openshift/origin/pkg/sdn/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/sdn/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "networking.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,13 +21,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &ClusterNetwork{}, &ClusterNetworkList{}, @@ -34,12 +35,17 @@ func addKnownTypes(scheme *runtime.Scheme) { &HostSubnetList{}, &NetNamespace{}, &NetNamespaceList{}, + &EgressNetworkPolicy{}, + &EgressNetworkPolicyList{}, ) + return nil } -func (obj *ClusterNetwork) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } -func (obj *ClusterNetworkList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } -func (obj *HostSubnet) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } -func (obj *HostSubnetList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } -func (obj *NetNamespace) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } -func (obj *NetNamespaceList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *ClusterNetwork) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *ClusterNetworkList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *HostSubnet) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *HostSubnetList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *NetNamespace) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *NetNamespaceList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *EgressNetworkPolicy) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *EgressNetworkPolicyList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/sdn/api/types.go b/vendor/github.com/openshift/origin/pkg/sdn/api/types.go index 3108062b..e0ae15d3 100644 --- a/vendor/github.com/openshift/origin/pkg/sdn/api/types.go +++ b/vendor/github.com/openshift/origin/pkg/sdn/api/types.go @@ -6,7 +6,8 @@ import ( ) const ( - ClusterNetworkDefault = "default" + ClusterNetworkDefault = "default" + EgressNetworkPolicyMaxRules = 50 ) // +genclient=true @@ -60,3 +61,42 @@ type NetNamespaceList struct { unversioned.ListMeta Items []NetNamespace } + +// EgressNetworkPolicyRuleType gives the type of an EgressNetworkPolicyRule +type EgressNetworkPolicyRuleType string + +const ( + EgressNetworkPolicyRuleAllow EgressNetworkPolicyRuleType = "Allow" + EgressNetworkPolicyRuleDeny EgressNetworkPolicyRuleType = "Deny" +) + +// EgressNetworkPolicyPeer specifies a target to apply egress policy to +type EgressNetworkPolicyPeer struct { + CIDRSelector string +} + +// EgressNetworkPolicyRule contains a single egress network policy rule +type EgressNetworkPolicyRule struct { + Type EgressNetworkPolicyRuleType + To EgressNetworkPolicyPeer +} + +// EgressNetworkPolicySpec provides a list of policies on outgoing traffic +type EgressNetworkPolicySpec struct { + Egress []EgressNetworkPolicyRule +} + +// EgressNetworkPolicy describes the current egress network policy +type EgressNetworkPolicy struct { + unversioned.TypeMeta + kapi.ObjectMeta + + Spec EgressNetworkPolicySpec +} + +// EgressNetworkPolicyList is a collection of EgressNetworkPolicy +type EgressNetworkPolicyList struct { + unversioned.TypeMeta + unversioned.ListMeta + Items []EgressNetworkPolicy +} diff --git a/vendor/github.com/openshift/origin/pkg/sdn/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/sdn/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..6eb57464 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/sdn/api/zz_generated.deepcopy.go @@ -0,0 +1,214 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterNetwork, InType: reflect.TypeOf(&ClusterNetwork{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ClusterNetworkList, InType: reflect.TypeOf(&ClusterNetworkList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EgressNetworkPolicy, InType: reflect.TypeOf(&EgressNetworkPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EgressNetworkPolicyList, InType: reflect.TypeOf(&EgressNetworkPolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EgressNetworkPolicyPeer, InType: reflect.TypeOf(&EgressNetworkPolicyPeer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EgressNetworkPolicyRule, InType: reflect.TypeOf(&EgressNetworkPolicyRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EgressNetworkPolicySpec, InType: reflect.TypeOf(&EgressNetworkPolicySpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_HostSubnet, InType: reflect.TypeOf(&HostSubnet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_HostSubnetList, InType: reflect.TypeOf(&HostSubnetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NetNamespace, InType: reflect.TypeOf(&NetNamespace{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NetNamespaceList, InType: reflect.TypeOf(&NetNamespaceList{})}, + ) +} + +func DeepCopy_api_ClusterNetwork(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterNetwork) + out := out.(*ClusterNetwork) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Network = in.Network + out.HostSubnetLength = in.HostSubnetLength + out.ServiceNetwork = in.ServiceNetwork + out.PluginName = in.PluginName + return nil + } +} + +func DeepCopy_api_ClusterNetworkList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterNetworkList) + out := out.(*ClusterNetworkList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterNetwork, len(*in)) + for i := range *in { + if err := DeepCopy_api_ClusterNetwork(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_EgressNetworkPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EgressNetworkPolicy) + out := out.(*EgressNetworkPolicy) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_EgressNetworkPolicySpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_EgressNetworkPolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EgressNetworkPolicyList) + out := out.(*EgressNetworkPolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]EgressNetworkPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_api_EgressNetworkPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_EgressNetworkPolicyPeer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EgressNetworkPolicyPeer) + out := out.(*EgressNetworkPolicyPeer) + out.CIDRSelector = in.CIDRSelector + return nil + } +} + +func DeepCopy_api_EgressNetworkPolicyRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EgressNetworkPolicyRule) + out := out.(*EgressNetworkPolicyRule) + out.Type = in.Type + out.To = in.To + return nil + } +} + +func DeepCopy_api_EgressNetworkPolicySpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EgressNetworkPolicySpec) + out := out.(*EgressNetworkPolicySpec) + if in.Egress != nil { + in, out := &in.Egress, &out.Egress + *out = make([]EgressNetworkPolicyRule, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Egress = nil + } + return nil + } +} + +func DeepCopy_api_HostSubnet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostSubnet) + out := out.(*HostSubnet) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Host = in.Host + out.HostIP = in.HostIP + out.Subnet = in.Subnet + return nil + } +} + +func DeepCopy_api_HostSubnetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostSubnetList) + out := out.(*HostSubnetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]HostSubnet, len(*in)) + for i := range *in { + if err := DeepCopy_api_HostSubnet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_NetNamespace(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetNamespace) + out := out.(*NetNamespace) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.NetName = in.NetName + out.NetID = in.NetID + return nil + } +} + +func DeepCopy_api_NetNamespaceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetNamespaceList) + out := out.(*NetNamespaceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NetNamespace, len(*in)) + for i := range *in { + if err := DeepCopy_api_NetNamespace(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/security/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/security/api/deep_copy_generated.go deleted file mode 100644 index bea0e059..00000000 --- a/vendor/github.com/openshift/origin/pkg/security/api/deep_copy_generated.go +++ /dev/null @@ -1,143 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_PodSecurityPolicyReview, - DeepCopy_api_PodSecurityPolicyReviewSpec, - DeepCopy_api_PodSecurityPolicyReviewStatus, - DeepCopy_api_PodSecurityPolicySelfSubjectReview, - DeepCopy_api_PodSecurityPolicySelfSubjectReviewSpec, - DeepCopy_api_PodSecurityPolicySubjectReview, - DeepCopy_api_PodSecurityPolicySubjectReviewSpec, - DeepCopy_api_PodSecurityPolicySubjectReviewStatus, - DeepCopy_api_ServiceAccountPodSecurityPolicyReviewStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_PodSecurityPolicyReview(in PodSecurityPolicyReview, out *PodSecurityPolicyReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PodSecurityPolicyReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_PodSecurityPolicyReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PodSecurityPolicyReviewSpec(in PodSecurityPolicyReviewSpec, out *PodSecurityPolicyReviewSpec, c *conversion.Cloner) error { - if err := api.DeepCopy_api_PodSpec(in.PodSpec, &out.PodSpec, c); err != nil { - return err - } - if in.ServiceAccountNames != nil { - in, out := in.ServiceAccountNames, &out.ServiceAccountNames - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.ServiceAccountNames = nil - } - return nil -} - -func DeepCopy_api_PodSecurityPolicyReviewStatus(in PodSecurityPolicyReviewStatus, out *PodSecurityPolicyReviewStatus, c *conversion.Cloner) error { - if in.AllowedServiceAccounts != nil { - in, out := in.AllowedServiceAccounts, &out.AllowedServiceAccounts - *out = make([]ServiceAccountPodSecurityPolicyReviewStatus, len(in)) - for i := range in { - if err := DeepCopy_api_ServiceAccountPodSecurityPolicyReviewStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.AllowedServiceAccounts = nil - } - return nil -} - -func DeepCopy_api_PodSecurityPolicySelfSubjectReview(in PodSecurityPolicySelfSubjectReview, out *PodSecurityPolicySelfSubjectReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PodSecurityPolicySelfSubjectReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_PodSecurityPolicySubjectReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PodSecurityPolicySelfSubjectReviewSpec(in PodSecurityPolicySelfSubjectReviewSpec, out *PodSecurityPolicySelfSubjectReviewSpec, c *conversion.Cloner) error { - if err := api.DeepCopy_api_PodSpec(in.PodSpec, &out.PodSpec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PodSecurityPolicySubjectReview(in PodSecurityPolicySubjectReview, out *PodSecurityPolicySubjectReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PodSecurityPolicySubjectReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_PodSecurityPolicySubjectReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PodSecurityPolicySubjectReviewSpec(in PodSecurityPolicySubjectReviewSpec, out *PodSecurityPolicySubjectReviewSpec, c *conversion.Cloner) error { - if err := api.DeepCopy_api_PodSpec(in.PodSpec, &out.PodSpec, c); err != nil { - return err - } - out.User = in.User - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Groups = nil - } - return nil -} - -func DeepCopy_api_PodSecurityPolicySubjectReviewStatus(in PodSecurityPolicySubjectReviewStatus, out *PodSecurityPolicySubjectReviewStatus, c *conversion.Cloner) error { - if in.AllowedBy != nil { - in, out := in.AllowedBy, &out.AllowedBy - *out = new(api.ObjectReference) - if err := api.DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.AllowedBy = nil - } - out.Reason = in.Reason - if err := api.DeepCopy_api_PodSpec(in.PodSpec, &out.PodSpec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ServiceAccountPodSecurityPolicyReviewStatus(in ServiceAccountPodSecurityPolicyReviewStatus, out *ServiceAccountPodSecurityPolicyReviewStatus, c *conversion.Cloner) error { - if err := DeepCopy_api_PodSecurityPolicySubjectReviewStatus(in.PodSecurityPolicySubjectReviewStatus, &out.PodSecurityPolicySubjectReviewStatus, c); err != nil { - return err - } - out.Name = in.Name - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/security/api/doc.go b/vendor/github.com/openshift/origin/pkg/security/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/security/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/security/api/register.go b/vendor/github.com/openshift/origin/pkg/security/api/register.go index c53d21bd..dbaa30b3 100644 --- a/vendor/github.com/openshift/origin/pkg/security/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/security/api/register.go @@ -7,6 +7,9 @@ import ( const GroupName = "" +// TODO no one likes the name security because it so broad as to be meaningless. +// const FutureGroupName = "security.openshift.io" + // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,18 +23,19 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &PodSecurityPolicySubjectReview{}, &PodSecurityPolicySelfSubjectReview{}, &PodSecurityPolicyReview{}, ) + return nil } func (obj *PodSecurityPolicySubjectReview) GetObjectKind() unversioned.ObjectKind { diff --git a/vendor/github.com/openshift/origin/pkg/security/api/types.go b/vendor/github.com/openshift/origin/pkg/security/api/types.go index fbcb3669..a343a911 100644 --- a/vendor/github.com/openshift/origin/pkg/security/api/types.go +++ b/vendor/github.com/openshift/origin/pkg/security/api/types.go @@ -7,7 +7,7 @@ import ( // +genclient=true -// PodSecurityPolicySubjectReview checks whether a particular user/SA tuple can create the PodSpec. +// PodSecurityPolicySubjectReview checks whether a particular user/SA tuple can create the PodTemplateSpec. type PodSecurityPolicySubjectReview struct { unversioned.TypeMeta @@ -20,13 +20,13 @@ type PodSecurityPolicySubjectReview struct { // PodSecurityPolicySubjectReviewSpec defines specification for PodSecurityPolicySubjectReview type PodSecurityPolicySubjectReviewSpec struct { - // PodSpec is the PodSpec to check. If PodSpec.ServiceAccountName is empty it will not be defaulted. + // Template is the PodTemplateSpec to check. If PodTemplateSpec.Spec.ServiceAccountName is empty it will not be defaulted. // If its non-empty, it will be checked. - PodSpec kapi.PodSpec + Template kapi.PodTemplateSpec // User is the user you're testing for. // If you specify "User" but not "Group", then is it interpreted as "What if User were not a member of any groups. - // If User and Groups are empty, then the check is performed using *only* the ServiceAccountName in the PodSpec. + // If User and Groups are empty, then the check is performed using *only* the ServiceAccountName in the PodTemplateSpec. User string // Groups is the groups you're testing for. @@ -35,7 +35,7 @@ type PodSecurityPolicySubjectReviewSpec struct { // PodSecurityPolicySubjectReviewStatus contains information/status for PodSecurityPolicySubjectReview. type PodSecurityPolicySubjectReviewStatus struct { - // AllowedBy is a reference to the rule that allows the PodSpec. + // AllowedBy is a reference to the rule that allows the PodTemplateSpec. // A rule can be a SecurityContextConstraint or a PodSecurityPolicy // A `nil`, indicates that it was denied. AllowedBy *kapi.ObjectReference @@ -45,11 +45,11 @@ type PodSecurityPolicySubjectReviewStatus struct { // is no information available. Reason string - // PodSpec is the PodSpec after the defaulting is applied. - PodSpec kapi.PodSpec + // Template is the PodTemplateSpec after the defaulting is applied. + Template kapi.PodTemplateSpec } -// PodSecurityPolicySelfSubjectReview checks whether this user/SA tuple can create the PodSpec. +// PodSecurityPolicySelfSubjectReview checks whether this user/SA tuple can create the PodTemplateSpec. type PodSecurityPolicySelfSubjectReview struct { unversioned.TypeMeta @@ -62,11 +62,11 @@ type PodSecurityPolicySelfSubjectReview struct { // PodSecurityPolicySelfSubjectReviewSpec contains specification for PodSecurityPolicySelfSubjectReview. type PodSecurityPolicySelfSubjectReviewSpec struct { - // PodSpec is the PodSpec to check. - PodSpec kapi.PodSpec + // Template is the PodTemplateSpec to check. + Template kapi.PodTemplateSpec } -// PodSecurityPolicyReview checks which service accounts (not users, since that would be cluster-wide) can create the `PodSpec` in question. +// PodSecurityPolicyReview checks which service accounts (not users, since that would be cluster-wide) can create the `PodTemplateSpec` in question. type PodSecurityPolicyReview struct { unversioned.TypeMeta @@ -79,22 +79,22 @@ type PodSecurityPolicyReview struct { // PodSecurityPolicyReviewSpec defines specification for PodSecurityPolicyReview type PodSecurityPolicyReviewSpec struct { - // PodSpec is the PodSpec to check. The PodSpec.ServiceAccountName field is used - // if ServiceAccountNames is empty, unless the PodSpec.ServiceAccountName is empty, + // Template is the PodTemplateSpec to check. The PodTemplateSpec.Spec.ServiceAccountName field is used + // if ServiceAccountNames is empty, unless the PodTemplateSpec.Spec.ServiceAccountName is empty, // in which case "default" is used. - // If ServiceAccountNames is specified, PodSpec.ServiceAccountName is ignored. - PodSpec kapi.PodSpec + // If ServiceAccountNames is specified, PodTemplateSpec.Spec.ServiceAccountName is ignored. + Template kapi.PodTemplateSpec // ServiceAccountNames is an optional set of ServiceAccounts to run the check with. - // If ServiceAccountNames is empty, the PodSpec ServiceAccountName is used, + // If ServiceAccountNames is empty, the PodTemplateSpec.Spec.ServiceAccountName is used, // unless it's empty, in which case "default" is used instead. - // If ServiceAccountNames is specified, PodSpec ServiceAccountName is ignored. + // If ServiceAccountNames is specified, PodTemplateSpec.Spec.ServiceAccountName is ignored. ServiceAccountNames []string // TODO: find a way to express 'all service accounts' } // PodSecurityPolicyReviewStatus represents the status of PodSecurityPolicyReview. type PodSecurityPolicyReviewStatus struct { - // AllowedServiceAccounts returns the list of service accounts in *this* namespace that have the power to create the PodSpec. + // AllowedServiceAccounts returns the list of service accounts in *this* namespace that have the power to create the PodTemplateSpec. AllowedServiceAccounts []ServiceAccountPodSecurityPolicyReviewStatus } diff --git a/vendor/github.com/openshift/origin/pkg/security/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/security/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..60bab508 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/security/api/zz_generated.deepcopy.go @@ -0,0 +1,175 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityPolicyReview, InType: reflect.TypeOf(&PodSecurityPolicyReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityPolicyReviewSpec, InType: reflect.TypeOf(&PodSecurityPolicyReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityPolicyReviewStatus, InType: reflect.TypeOf(&PodSecurityPolicyReviewStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityPolicySelfSubjectReview, InType: reflect.TypeOf(&PodSecurityPolicySelfSubjectReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityPolicySelfSubjectReviewSpec, InType: reflect.TypeOf(&PodSecurityPolicySelfSubjectReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityPolicySubjectReview, InType: reflect.TypeOf(&PodSecurityPolicySubjectReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityPolicySubjectReviewSpec, InType: reflect.TypeOf(&PodSecurityPolicySubjectReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityPolicySubjectReviewStatus, InType: reflect.TypeOf(&PodSecurityPolicySubjectReviewStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceAccountPodSecurityPolicyReviewStatus, InType: reflect.TypeOf(&ServiceAccountPodSecurityPolicyReviewStatus{})}, + ) +} + +func DeepCopy_api_PodSecurityPolicyReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicyReview) + out := out.(*PodSecurityPolicyReview) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_PodSecurityPolicyReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_PodSecurityPolicyReviewStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodSecurityPolicyReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicyReviewSpec) + out := out.(*PodSecurityPolicyReviewSpec) + if err := pkg_api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + if in.ServiceAccountNames != nil { + in, out := &in.ServiceAccountNames, &out.ServiceAccountNames + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ServiceAccountNames = nil + } + return nil + } +} + +func DeepCopy_api_PodSecurityPolicyReviewStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicyReviewStatus) + out := out.(*PodSecurityPolicyReviewStatus) + if in.AllowedServiceAccounts != nil { + in, out := &in.AllowedServiceAccounts, &out.AllowedServiceAccounts + *out = make([]ServiceAccountPodSecurityPolicyReviewStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ServiceAccountPodSecurityPolicyReviewStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.AllowedServiceAccounts = nil + } + return nil + } +} + +func DeepCopy_api_PodSecurityPolicySelfSubjectReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicySelfSubjectReview) + out := out.(*PodSecurityPolicySelfSubjectReview) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_PodSecurityPolicySelfSubjectReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_PodSecurityPolicySubjectReviewStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodSecurityPolicySelfSubjectReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicySelfSubjectReviewSpec) + out := out.(*PodSecurityPolicySelfSubjectReviewSpec) + if err := pkg_api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodSecurityPolicySubjectReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicySubjectReview) + out := out.(*PodSecurityPolicySubjectReview) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_PodSecurityPolicySubjectReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_PodSecurityPolicySubjectReviewStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodSecurityPolicySubjectReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicySubjectReviewSpec) + out := out.(*PodSecurityPolicySubjectReviewSpec) + if err := pkg_api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + out.User = in.User + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + return nil + } +} + +func DeepCopy_api_PodSecurityPolicySubjectReviewStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicySubjectReviewStatus) + out := out.(*PodSecurityPolicySubjectReviewStatus) + if in.AllowedBy != nil { + in, out := &in.AllowedBy, &out.AllowedBy + *out = new(pkg_api.ObjectReference) + **out = **in + } else { + out.AllowedBy = nil + } + out.Reason = in.Reason + if err := pkg_api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ServiceAccountPodSecurityPolicyReviewStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccountPodSecurityPolicyReviewStatus) + out := out.(*ServiceAccountPodSecurityPolicyReviewStatus) + if err := DeepCopy_api_PodSecurityPolicySubjectReviewStatus(&in.PodSecurityPolicySubjectReviewStatus, &out.PodSecurityPolicySubjectReviewStatus, c); err != nil { + return err + } + out.Name = in.Name + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/template/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/template/api/deep_copy_generated.go deleted file mode 100644 index 4f5928d2..00000000 --- a/vendor/github.com/openshift/origin/pkg/template/api/deep_copy_generated.go +++ /dev/null @@ -1,99 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - runtime "k8s.io/kubernetes/pkg/runtime" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_Parameter, - DeepCopy_api_Template, - DeepCopy_api_TemplateList, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_Parameter(in Parameter, out *Parameter, c *conversion.Cloner) error { - out.Name = in.Name - out.DisplayName = in.DisplayName - out.Description = in.Description - out.Value = in.Value - out.Generate = in.Generate - out.From = in.From - out.Required = in.Required - return nil -} - -func DeepCopy_api_Template(in Template, out *Template, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.Message = in.Message - if in.Parameters != nil { - in, out := in.Parameters, &out.Parameters - *out = make([]Parameter, len(in)) - for i := range in { - if err := DeepCopy_api_Parameter(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Parameters = nil - } - if in.Objects != nil { - in, out := in.Objects, &out.Objects - *out = make([]runtime.Object, len(in)) - for i := range in { - if newVal, err := c.DeepCopy(in[i]); err != nil { - return err - } else { - (*out)[i] = newVal.(runtime.Object) - } - } - } else { - out.Objects = nil - } - if in.ObjectLabels != nil { - in, out := in.ObjectLabels, &out.ObjectLabels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.ObjectLabels = nil - } - return nil -} - -func DeepCopy_api_TemplateList(in TemplateList, out *TemplateList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Template, len(in)) - for i := range in { - if err := DeepCopy_api_Template(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/template/api/doc.go b/vendor/github.com/openshift/origin/pkg/template/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/template/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/template/api/register.go b/vendor/github.com/openshift/origin/pkg/template/api/register.go index 755324f4..067b825c 100644 --- a/vendor/github.com/openshift/origin/pkg/template/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/template/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "template.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,17 +21,18 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Template{}, &TemplateList{}, ) + return nil } func (obj *Template) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/template/api/types.go b/vendor/github.com/openshift/origin/pkg/template/api/types.go index f081c2a7..10f3da5c 100644 --- a/vendor/github.com/openshift/origin/pkg/template/api/types.go +++ b/vendor/github.com/openshift/origin/pkg/template/api/types.go @@ -70,3 +70,9 @@ type Parameter struct { // Optional: Indicates the parameter must have a value. Defaults to false. Required bool } + +// These constants represent annotations keys affixed to templates +const ( + // TemplateDisplayName is an optional annotation that stores the name displayed by a UI when referencing a template. + TemplateDisplayName = "openshift.io/display-name" +) diff --git a/vendor/github.com/openshift/origin/pkg/template/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/template/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..93bd5242 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/template/api/zz_generated.deepcopy.go @@ -0,0 +1,106 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Parameter, InType: reflect.TypeOf(&Parameter{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Template, InType: reflect.TypeOf(&Template{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TemplateList, InType: reflect.TypeOf(&TemplateList{})}, + ) +} + +func DeepCopy_api_Parameter(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Parameter) + out := out.(*Parameter) + out.Name = in.Name + out.DisplayName = in.DisplayName + out.Description = in.Description + out.Value = in.Value + out.Generate = in.Generate + out.From = in.From + out.Required = in.Required + return nil + } +} + +func DeepCopy_api_Template(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Template) + out := out.(*Template) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Message = in.Message + if in.Parameters != nil { + in, out := &in.Parameters, &out.Parameters + *out = make([]Parameter, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Parameters = nil + } + if in.Objects != nil { + in, out := &in.Objects, &out.Objects + *out = make([]runtime.Object, len(*in)) + for i := range *in { + if newVal, err := c.DeepCopy(&(*in)[i]); err != nil { + return err + } else { + (*out)[i] = *newVal.(*runtime.Object) + } + } + } else { + out.Objects = nil + } + if in.ObjectLabels != nil { + in, out := &in.ObjectLabels, &out.ObjectLabels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.ObjectLabels = nil + } + return nil + } +} + +func DeepCopy_api_TemplateList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TemplateList) + out := out.(*TemplateList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Template, len(*in)) + for i := range *in { + if err := DeepCopy_api_Template(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/user/api/deep_copy_generated.go b/vendor/github.com/openshift/origin/pkg/user/api/deep_copy_generated.go deleted file mode 100644 index f6a0c2e4..00000000 --- a/vendor/github.com/openshift/origin/pkg/user/api/deep_copy_generated.go +++ /dev/null @@ -1,171 +0,0 @@ -// +build !ignore_autogenerated_openshift - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_Group, - DeepCopy_api_GroupList, - DeepCopy_api_Identity, - DeepCopy_api_IdentityList, - DeepCopy_api_User, - DeepCopy_api_UserIdentityMapping, - DeepCopy_api_UserList, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_Group(in Group, out *Group, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Users != nil { - in, out := in.Users, &out.Users - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Users = nil - } - return nil -} - -func DeepCopy_api_GroupList(in GroupList, out *GroupList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Group, len(in)) - for i := range in { - if err := DeepCopy_api_Group(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_Identity(in Identity, out *Identity, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.ProviderName = in.ProviderName - out.ProviderUserName = in.ProviderUserName - if err := api.DeepCopy_api_ObjectReference(in.User, &out.User, c); err != nil { - return err - } - if in.Extra != nil { - in, out := in.Extra, &out.Extra - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Extra = nil - } - return nil -} - -func DeepCopy_api_IdentityList(in IdentityList, out *IdentityList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Identity, len(in)) - for i := range in { - if err := DeepCopy_api_Identity(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_User(in User, out *User, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.FullName = in.FullName - if in.Identities != nil { - in, out := in.Identities, &out.Identities - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Identities = nil - } - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Groups = nil - } - return nil -} - -func DeepCopy_api_UserIdentityMapping(in UserIdentityMapping, out *UserIdentityMapping, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectReference(in.Identity, &out.Identity, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectReference(in.User, &out.User, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_UserList(in UserList, out *UserList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]User, len(in)) - for i := range in { - if err := DeepCopy_api_User(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} diff --git a/vendor/github.com/openshift/origin/pkg/user/api/doc.go b/vendor/github.com/openshift/origin/pkg/user/api/doc.go new file mode 100644 index 00000000..9f6c967c --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/user/api/doc.go @@ -0,0 +1,4 @@ +// +k8s:deepcopy-gen=package,register + +// Package api is the internal version of the API. +package api diff --git a/vendor/github.com/openshift/origin/pkg/user/api/register.go b/vendor/github.com/openshift/origin/pkg/user/api/register.go index ba8ad3ca..33db9162 100644 --- a/vendor/github.com/openshift/origin/pkg/user/api/register.go +++ b/vendor/github.com/openshift/origin/pkg/user/api/register.go @@ -6,6 +6,7 @@ import ( ) const GroupName = "" +const FutureGroupName = "user.openshift.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} @@ -20,13 +21,13 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &User{}, &UserList{}, @@ -36,6 +37,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &Group{}, &GroupList{}, ) + return nil } func (obj *GroupList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/github.com/openshift/origin/pkg/user/api/zz_generated.deepcopy.go b/vendor/github.com/openshift/origin/pkg/user/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..54b104ab --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/user/api/zz_generated.deepcopy.go @@ -0,0 +1,177 @@ +// +build !ignore_autogenerated_openshift + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + pkg_api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Group, InType: reflect.TypeOf(&Group{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GroupList, InType: reflect.TypeOf(&GroupList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Identity, InType: reflect.TypeOf(&Identity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_IdentityList, InType: reflect.TypeOf(&IdentityList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_User, InType: reflect.TypeOf(&User{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_UserIdentityMapping, InType: reflect.TypeOf(&UserIdentityMapping{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_UserList, InType: reflect.TypeOf(&UserList{})}, + ) +} + +func DeepCopy_api_Group(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Group) + out := out.(*Group) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Users = nil + } + return nil + } +} + +func DeepCopy_api_GroupList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupList) + out := out.(*GroupList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Group, len(*in)) + for i := range *in { + if err := DeepCopy_api_Group(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_Identity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Identity) + out := out.(*Identity) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.ProviderName = in.ProviderName + out.ProviderUserName = in.ProviderUserName + out.User = in.User + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Extra = nil + } + return nil + } +} + +func DeepCopy_api_IdentityList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IdentityList) + out := out.(*IdentityList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Identity, len(*in)) + for i := range *in { + if err := DeepCopy_api_Identity(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_User(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*User) + out := out.(*User) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.FullName = in.FullName + if in.Identities != nil { + in, out := &in.Identities, &out.Identities + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Identities = nil + } + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + return nil + } +} + +func DeepCopy_api_UserIdentityMapping(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*UserIdentityMapping) + out := out.(*UserIdentityMapping) + out.TypeMeta = in.TypeMeta + if err := pkg_api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Identity = in.Identity + out.User = in.User + return nil + } +} + +func DeepCopy_api_UserList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*UserList) + out := out.(*UserList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]User, len(*in)) + for i := range *in { + if err := DeepCopy_api_User(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} diff --git a/vendor/github.com/openshift/origin/pkg/user/reaper/bindings.go b/vendor/github.com/openshift/origin/pkg/user/reaper/bindings.go new file mode 100644 index 00000000..76a3a68f --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/user/reaper/bindings.go @@ -0,0 +1,57 @@ +package reaper + +import ( + "github.com/golang/glog" + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" + + "github.com/openshift/origin/pkg/client" +) + +// reapClusterBindings removes the subject from cluster-level role bindings +func reapClusterBindings(removedSubject kapi.ObjectReference, c client.ClusterRoleBindingsInterface) error { + clusterBindings, err := c.ClusterRoleBindings().List(kapi.ListOptions{}) + if err != nil { + return err + } + for _, binding := range clusterBindings.Items { + retainedSubjects := []kapi.ObjectReference{} + for _, subject := range binding.Subjects { + if subject != removedSubject { + retainedSubjects = append(retainedSubjects, subject) + } + } + if len(retainedSubjects) != len(binding.Subjects) { + updatedBinding := binding + updatedBinding.Subjects = retainedSubjects + if _, err := c.ClusterRoleBindings().Update(&updatedBinding); err != nil && !kerrors.IsNotFound(err) { + glog.Infof("Cannot update clusterrolebinding/%s: %v", binding.Name, err) + } + } + } + return nil +} + +// reapNamespacedBindings removes the subject from namespaced role bindings +func reapNamespacedBindings(removedSubject kapi.ObjectReference, c client.RoleBindingsNamespacer) error { + namespacedBindings, err := c.RoleBindings(kapi.NamespaceAll).List(kapi.ListOptions{}) + if err != nil { + return err + } + for _, binding := range namespacedBindings.Items { + retainedSubjects := []kapi.ObjectReference{} + for _, subject := range binding.Subjects { + if subject != removedSubject { + retainedSubjects = append(retainedSubjects, subject) + } + } + if len(retainedSubjects) != len(binding.Subjects) { + updatedBinding := binding + updatedBinding.Subjects = retainedSubjects + if _, err := c.RoleBindings(binding.Namespace).Update(&updatedBinding); err != nil && !kerrors.IsNotFound(err) { + glog.Infof("Cannot update rolebinding/%s in %s: %v", binding.Name, binding.Namespace, err) + } + } + } + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/user/reaper/group.go b/vendor/github.com/openshift/origin/pkg/user/reaper/group.go new file mode 100644 index 00000000..a34b41ad --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/user/reaper/group.go @@ -0,0 +1,76 @@ +package reaper + +import ( + "time" + + "github.com/golang/glog" + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/kubectl" + + "github.com/openshift/origin/pkg/client" +) + +func NewGroupReaper( + groupClient client.GroupsInterface, + clusterBindingClient client.ClusterRoleBindingsInterface, + bindingClient client.RoleBindingsNamespacer, + sccClient kclient.SecurityContextConstraintsInterface, +) kubectl.Reaper { + return &GroupReaper{ + groupClient: groupClient, + clusterBindingClient: clusterBindingClient, + bindingClient: bindingClient, + sccClient: sccClient, + } +} + +type GroupReaper struct { + groupClient client.GroupsInterface + clusterBindingClient client.ClusterRoleBindingsInterface + bindingClient client.RoleBindingsNamespacer + sccClient kclient.SecurityContextConstraintsInterface +} + +// Stop on a reaper is actually used for deletion. In this case, we'll delete referencing identities, clusterBindings, and bindings, +// then delete the group +func (r *GroupReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *kapi.DeleteOptions) error { + removedSubject := kapi.ObjectReference{Kind: "Group", Name: name} + + if err := reapClusterBindings(removedSubject, r.clusterBindingClient); err != nil { + return err + } + + if err := reapNamespacedBindings(removedSubject, r.bindingClient); err != nil { + return err + } + + // Remove the group from sccs + sccs, err := r.sccClient.SecurityContextConstraints().List(kapi.ListOptions{}) + if err != nil { + return err + } + for _, scc := range sccs.Items { + retainedGroups := []string{} + for _, group := range scc.Groups { + if group != name { + retainedGroups = append(retainedGroups, group) + } + } + if len(retainedGroups) != len(scc.Groups) { + updatedSCC := scc + updatedSCC.Groups = retainedGroups + if _, err := r.sccClient.SecurityContextConstraints().Update(&updatedSCC); err != nil && !kerrors.IsNotFound(err) { + glog.Infof("Cannot update scc/%s: %v", scc.Name, err) + } + } + } + + // Remove the group + if err := r.groupClient.Groups().Delete(name); err != nil && !kerrors.IsNotFound(err) { + return err + } + + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/user/reaper/user.go b/vendor/github.com/openshift/origin/pkg/user/reaper/user.go new file mode 100644 index 00000000..6c4084f0 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/user/reaper/user.go @@ -0,0 +1,104 @@ +package reaper + +import ( + "time" + + "github.com/golang/glog" + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" + kclient "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/kubectl" + + "github.com/openshift/origin/pkg/client" +) + +func NewUserReaper( + userClient client.UsersInterface, + groupClient client.GroupsInterface, + clusterBindingClient client.ClusterRoleBindingsInterface, + bindingClient client.RoleBindingsNamespacer, + sccClient kclient.SecurityContextConstraintsInterface, +) kubectl.Reaper { + return &UserReaper{ + userClient: userClient, + groupClient: groupClient, + clusterBindingClient: clusterBindingClient, + bindingClient: bindingClient, + sccClient: sccClient, + } +} + +type UserReaper struct { + userClient client.UsersInterface + groupClient client.GroupsInterface + clusterBindingClient client.ClusterRoleBindingsInterface + bindingClient client.RoleBindingsNamespacer + sccClient kclient.SecurityContextConstraintsInterface +} + +// Stop on a reaper is actually used for deletion. In this case, we'll delete referencing identities, clusterBindings, and bindings, +// then delete the user +func (r *UserReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *kapi.DeleteOptions) error { + removedSubject := kapi.ObjectReference{Kind: "User", Name: name} + + if err := reapClusterBindings(removedSubject, r.clusterBindingClient); err != nil { + return err + } + + if err := reapNamespacedBindings(removedSubject, r.bindingClient); err != nil { + return err + } + + // Remove the user from sccs + sccs, err := r.sccClient.SecurityContextConstraints().List(kapi.ListOptions{}) + if err != nil { + return err + } + for _, scc := range sccs.Items { + retainedUsers := []string{} + for _, user := range scc.Users { + if user != name { + retainedUsers = append(retainedUsers, user) + } + } + if len(retainedUsers) != len(scc.Users) { + updatedSCC := scc + updatedSCC.Users = retainedUsers + if _, err := r.sccClient.SecurityContextConstraints().Update(&updatedSCC); err != nil && !kerrors.IsNotFound(err) { + glog.Infof("Cannot update scc/%s: %v", scc.Name, err) + } + } + } + + // Remove the user from groups + groups, err := r.groupClient.Groups().List(kapi.ListOptions{}) + if err != nil { + return err + } + for _, group := range groups.Items { + retainedUsers := []string{} + for _, user := range group.Users { + if user != name { + retainedUsers = append(retainedUsers, user) + } + } + if len(retainedUsers) != len(group.Users) { + updatedGroup := group + updatedGroup.Users = retainedUsers + if _, err := r.groupClient.Groups().Update(&updatedGroup); err != nil && !kerrors.IsNotFound(err) { + glog.Infof("Cannot update groups/%s: %v", group.Name, err) + } + } + } + + // Intentionally leave identities that reference the user + // The user does not "own" the identities + // If the admin wants to remove the identities, that is a distinct operation + + // Remove the user + if err := r.userClient.Users().Delete(name); err != nil && !kerrors.IsNotFound(err) { + return err + } + + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/util/doc.go b/vendor/github.com/openshift/origin/pkg/util/doc.go new file mode 100644 index 00000000..3ce2be72 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/util/doc.go @@ -0,0 +1,4 @@ +// Package util implements various utility functions used in both testing and +// implementation of OpenShift. Package util may not depend on any other +// package in the OpenShift package tree. +package util diff --git a/vendor/github.com/openshift/origin/pkg/util/dot/dot.go b/vendor/github.com/openshift/origin/pkg/util/dot/dot.go new file mode 100644 index 00000000..01c90b61 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/util/dot/dot.go @@ -0,0 +1,14 @@ +package dot + +import ( + "fmt" + "strings" +) + +// Quote takes an arbitrary DOT ID and escapes any quotes that is contains. +// The resulting string is quoted again to guarantee that it is a valid ID. +// DOT graph IDs can be any double-quoted string +// See http://www.graphviz.org/doc/info/lang.html +func Quote(id string) string { + return fmt.Sprintf(`"%s"`, strings.Replace(id, `"`, `\"`, -1)) +} diff --git a/vendor/github.com/openshift/origin/pkg/util/errors/doc.go b/vendor/github.com/openshift/origin/pkg/util/errors/doc.go new file mode 100644 index 00000000..9d0d52db --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/util/errors/doc.go @@ -0,0 +1,2 @@ +// Package errors provides utility functions for various errors +package errors diff --git a/vendor/github.com/openshift/origin/pkg/util/errors/errors.go b/vendor/github.com/openshift/origin/pkg/util/errors/errors.go new file mode 100644 index 00000000..1da1b0ae --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/util/errors/errors.go @@ -0,0 +1,39 @@ +package errors + +import "strings" + +import ( + kapierrors "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" +) + +// TolerateNotFoundError tolerates 'not found' errors +func TolerateNotFoundError(err error) error { + if kapierrors.IsNotFound(err) { + return nil + } + return err +} + +// ErrorToSentence will capitalize the first letter of the error +// message and add a period to the end if one is not present. +func ErrorToSentence(err error) string { + msg := err.Error() + if len(msg) == 0 { + return msg + } + msg = strings.ToUpper(msg)[:1] + msg[1:] + if !strings.HasSuffix(msg, ".") { + msg = msg + "." + } + return msg +} + +// IsTimeoutErr returns true if the error indicates timeout +func IsTimeoutErr(err error) bool { + e, ok := err.(*kapierrors.StatusError) + if !ok { + return false + } + return e.ErrStatus.Reason == unversioned.StatusReasonTimeout +} diff --git a/vendor/github.com/openshift/origin/pkg/util/etcd.go b/vendor/github.com/openshift/origin/pkg/util/etcd.go new file mode 100644 index 00000000..754f49d9 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/util/etcd.go @@ -0,0 +1,21 @@ +package util + +import ( + "path" + + kapi "k8s.io/kubernetes/pkg/api" + kerrors "k8s.io/kubernetes/pkg/api/errors" +) + +// NoNamespaceKeyFunc is the default function for constructing etcd paths to a resource relative to prefix enforcing +// If a namespace is on context, it errors. +func NoNamespaceKeyFunc(ctx kapi.Context, prefix string, name string) (string, error) { + ns, ok := kapi.NamespaceFrom(ctx) + if ok && len(ns) > 0 { + return "", kerrors.NewBadRequest("Namespace parameter is not allowed.") + } + if len(name) == 0 { + return "", kerrors.NewBadRequest("Name parameter required.") + } + return path.Join(prefix, name), nil +} diff --git a/vendor/github.com/openshift/origin/pkg/util/labels.go b/vendor/github.com/openshift/origin/pkg/util/labels.go new file mode 100644 index 00000000..a7a49087 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/util/labels.go @@ -0,0 +1,278 @@ +package util + +import ( + "fmt" + "reflect" + + kmeta "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" + + deployapi "github.com/openshift/origin/pkg/deploy/api" +) + +// MergeInto flags +const ( + OverwriteExistingDstKey = 1 << iota + ErrorOnExistingDstKey + ErrorOnDifferentDstKeyValue +) + +// AddObjectLabels adds new label(s) to a single runtime.Object +func AddObjectLabels(obj runtime.Object, labels labels.Set) error { + if labels == nil { + return nil + } + + accessor, err := kmeta.Accessor(obj) + + if err != nil { + if _, ok := obj.(*runtime.Unstructured); !ok { + // error out if it's not possible to get an accessor and it's also not an unstructured object + return err + } + } else { + metaLabels := accessor.GetLabels() + if metaLabels == nil { + metaLabels = make(map[string]string) + } + + switch objType := obj.(type) { + case *deployapi.DeploymentConfig: + if err := addDeploymentConfigNestedLabels(objType, labels); err != nil { + return fmt.Errorf("unable to add nested labels to %s/%s: %v", obj.GetObjectKind().GroupVersionKind(), accessor.GetName(), err) + } + } + + if err := MergeInto(metaLabels, labels, OverwriteExistingDstKey); err != nil { + return fmt.Errorf("unable to add labels to %s/%s: %v", obj.GetObjectKind().GroupVersionKind(), accessor.GetName(), err) + } + + accessor.SetLabels(metaLabels) + + return nil + } + + // handle unstructured object + // TODO: allow meta.Accessor to handle runtime.Unstructured + if unstruct, ok := obj.(*runtime.Unstructured); ok && unstruct.Object != nil { + // the presence of "metadata" is sufficient for us to apply the rules for Kube-like + // objects. + // TODO: add swagger detection to allow this to happen more effectively + if obj, ok := unstruct.Object["metadata"]; ok { + if m, ok := obj.(map[string]interface{}); ok { + + existing := make(map[string]string) + if l, ok := m["labels"]; ok { + if found, ok := interfaceToStringMap(l); ok { + existing = found + } + } + if err := MergeInto(existing, labels, OverwriteExistingDstKey); err != nil { + return err + } + m["labels"] = mapToGeneric(existing) + } + return nil + } + + // only attempt to set root labels if a root object called labels exists + // TODO: add swagger detection to allow this to happen more effectively + if obj, ok := unstruct.Object["labels"]; ok { + existing := make(map[string]string) + if found, ok := interfaceToStringMap(obj); ok { + existing = found + } + if err := MergeInto(existing, labels, OverwriteExistingDstKey); err != nil { + return err + } + unstruct.Object["labels"] = mapToGeneric(existing) + return nil + } + } + + return nil +} + +// AddObjectAnnotations adds new annotation(s) to a single runtime.Object +func AddObjectAnnotations(obj runtime.Object, annotations map[string]string) error { + if len(annotations) == 0 { + return nil + } + + accessor, err := kmeta.Accessor(obj) + + if err != nil { + if _, ok := obj.(*runtime.Unstructured); !ok { + // error out if it's not possible to get an accessor and it's also not an unstructured object + return err + } + } else { + metaAnnotations := accessor.GetAnnotations() + if metaAnnotations == nil { + metaAnnotations = make(map[string]string) + } + + switch objType := obj.(type) { + case *deployapi.DeploymentConfig: + if err := addDeploymentConfigNestedAnnotations(objType, annotations); err != nil { + return fmt.Errorf("unable to add nested annotations to %s/%s: %v", obj.GetObjectKind().GroupVersionKind(), accessor.GetName(), err) + } + } + + MergeInto(metaAnnotations, annotations, OverwriteExistingDstKey) + accessor.SetAnnotations(metaAnnotations) + + return nil + } + + // handle unstructured object + // TODO: allow meta.Accessor to handle runtime.Unstructured + if unstruct, ok := obj.(*runtime.Unstructured); ok && unstruct.Object != nil { + // the presence of "metadata" is sufficient for us to apply the rules for Kube-like + // objects. + // TODO: add swagger detection to allow this to happen more effectively + if obj, ok := unstruct.Object["metadata"]; ok { + if m, ok := obj.(map[string]interface{}); ok { + + existing := make(map[string]string) + if l, ok := m["annotations"]; ok { + if found, ok := interfaceToStringMap(l); ok { + existing = found + } + } + if err := MergeInto(existing, annotations, OverwriteExistingDstKey); err != nil { + return err + } + m["annotations"] = mapToGeneric(existing) + } + return nil + } + + // only attempt to set root annotations if a root object called annotations exists + // TODO: add swagger detection to allow this to happen more effectively + if obj, ok := unstruct.Object["annotations"]; ok { + existing := make(map[string]string) + if found, ok := interfaceToStringMap(obj); ok { + existing = found + } + if err := MergeInto(existing, annotations, OverwriteExistingDstKey); err != nil { + return err + } + unstruct.Object["annotations"] = mapToGeneric(existing) + return nil + } + } + + return nil +} + +// addDeploymentConfigNestedLabels adds new label(s) to a nested labels of a single DeploymentConfig object +func addDeploymentConfigNestedLabels(obj *deployapi.DeploymentConfig, labels labels.Set) error { + if obj.Spec.Template.Labels == nil { + obj.Spec.Template.Labels = make(map[string]string) + } + if err := MergeInto(obj.Spec.Template.Labels, labels, OverwriteExistingDstKey); err != nil { + return fmt.Errorf("unable to add labels to Template.DeploymentConfig.Template.ControllerTemplate.Template: %v", err) + } + return nil +} + +func addDeploymentConfigNestedAnnotations(obj *deployapi.DeploymentConfig, annotations map[string]string) error { + if obj.Spec.Template == nil { + return nil + } + + if obj.Spec.Template.Annotations == nil { + obj.Spec.Template.Annotations = make(map[string]string) + } + + if err := MergeInto(obj.Spec.Template.Annotations, annotations, OverwriteExistingDstKey); err != nil { + return fmt.Errorf("unable to add annotations to Template.DeploymentConfig.Template.ControllerTemplate.Template: %v", err) + } + return nil +} + +// interfaceToStringMap extracts a map[string]string from a map[string]interface{} +func interfaceToStringMap(obj interface{}) (map[string]string, bool) { + if obj == nil { + return nil, false + } + lm, ok := obj.(map[string]interface{}) + if !ok { + return nil, false + } + existing := make(map[string]string) + for k, v := range lm { + switch t := v.(type) { + case string: + existing[k] = t + } + } + return existing, true +} + +// mapToGeneric converts a map[string]string into a map[string]interface{} +func mapToGeneric(obj map[string]string) map[string]interface{} { + if obj == nil { + return nil + } + res := make(map[string]interface{}) + for k, v := range obj { + res[k] = v + } + return res +} + +// MergeInto merges items from a src map into a dst map. +// Returns an error when the maps are not of the same type. +// Flags: +// - ErrorOnExistingDstKey +// When set: Return an error if any of the dst keys is already set. +// - ErrorOnDifferentDstKeyValue +// When set: Return an error if any of the dst keys is already set +// to a different value than src key. +// - OverwriteDstKey +// When set: Overwrite existing dst key value with src key value. +func MergeInto(dst, src interface{}, flags int) error { + dstVal := reflect.ValueOf(dst) + srcVal := reflect.ValueOf(src) + + if dstVal.Kind() != reflect.Map { + return fmt.Errorf("dst is not a valid map: %v", dstVal.Kind()) + } + if srcVal.Kind() != reflect.Map { + return fmt.Errorf("src is not a valid map: %v", srcVal.Kind()) + } + if dstTyp, srcTyp := dstVal.Type(), srcVal.Type(); !dstTyp.AssignableTo(srcTyp) { + return fmt.Errorf("type mismatch, can't assign '%v' to '%v'", srcTyp, dstTyp) + } + + if dstVal.IsNil() { + return fmt.Errorf("dst value is nil") + } + if srcVal.IsNil() { + // Nothing to merge + return nil + } + + for _, k := range srcVal.MapKeys() { + if dstVal.MapIndex(k).IsValid() { + if flags&ErrorOnExistingDstKey != 0 { + return fmt.Errorf("dst key already set (ErrorOnExistingDstKey=1), '%v'='%v'", k, dstVal.MapIndex(k)) + } + if dstVal.MapIndex(k).String() != srcVal.MapIndex(k).String() { + if flags&ErrorOnDifferentDstKeyValue != 0 { + return fmt.Errorf("dst key already set to a different value (ErrorOnDifferentDstKeyValue=1), '%v'='%v'", k, dstVal.MapIndex(k)) + } + if flags&OverwriteExistingDstKey != 0 { + dstVal.SetMapIndex(k, srcVal.MapIndex(k)) + } + } + } else { + dstVal.SetMapIndex(k, srcVal.MapIndex(k)) + } + } + + return nil +} diff --git a/vendor/github.com/openshift/origin/pkg/util/parallel/parallel.go b/vendor/github.com/openshift/origin/pkg/util/parallel/parallel.go new file mode 100644 index 00000000..902cfb66 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/util/parallel/parallel.go @@ -0,0 +1,27 @@ +package parallel + +import ( + "sync" +) + +// Run executes the provided functions in parallel and collects any errors they return. +func Run(fns ...func() error) []error { + wg := sync.WaitGroup{} + errCh := make(chan error, len(fns)) + wg.Add(len(fns)) + for i := range fns { + go func(i int) { + if err := fns[i](); err != nil { + errCh <- err + } + wg.Done() + }(i) + } + wg.Wait() + close(errCh) + var errs []error + for err := range errCh { + errs = append(errs, err) + } + return errs +} diff --git a/vendor/github.com/openshift/origin/pkg/util/strings.go b/vendor/github.com/openshift/origin/pkg/util/strings.go new file mode 100644 index 00000000..cf1b4804 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/util/strings.go @@ -0,0 +1,21 @@ +package util + +import "sort" + +// UniqueStrings returns a sorted, uniquified slice of the specified strings +func UniqueStrings(strings []string) []string { + m := make(map[string]bool, len(strings)) + for _, s := range strings { + m[s] = true + } + + i := 0 + strings = make([]string, len(m), len(m)) + for s := range m { + strings[i] = s + i++ + } + + sort.Strings(strings) + return strings +} diff --git a/vendor/github.com/openshift/origin/pkg/version/doc.go b/vendor/github.com/openshift/origin/pkg/version/doc.go new file mode 100644 index 00000000..4fb58d05 --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/version/doc.go @@ -0,0 +1,3 @@ +// Package version supplies version information collected at build time to +// OpenShift and Kubernetes components. +package version diff --git a/vendor/github.com/openshift/origin/pkg/version/version.go b/vendor/github.com/openshift/origin/pkg/version/version.go new file mode 100644 index 00000000..48b8d85d --- /dev/null +++ b/vendor/github.com/openshift/origin/pkg/version/version.go @@ -0,0 +1,97 @@ +package version + +import ( + "regexp" + "strings" + + "github.com/prometheus/client_golang/prometheus" +) + +var ( + // commitFromGit is a constant representing the source version that + // generated this build. It should be set during build via -ldflags. + commitFromGit string + // versionFromGit is a constant representing the version tag that + // generated this build. It should be set during build via -ldflags. + versionFromGit string + // major version + majorFromGit string + // minor version + minorFromGit string + // build date in ISO8601 format, output of $(date -u +'%Y-%m-%dT%H:%M:%SZ') + buildDate string +) + +// Info contains versioning information. +// TODO: Add []string of api versions supported? It's still unclear +// how we'll want to distribute that information. +type Info struct { + Major string `json:"major"` + Minor string `json:"minor"` + GitCommit string `json:"gitCommit"` + GitVersion string `json:"gitVersion"` + BuildDate string `json:"buildDate"` +} + +// Get returns the overall codebase version. It's for detecting +// what code a binary was built from. +func Get() Info { + return Info{ + Major: majorFromGit, + Minor: minorFromGit, + GitCommit: commitFromGit, + GitVersion: versionFromGit, + BuildDate: buildDate, + } +} + +// String returns info as a human-friendly version string. +func (info Info) String() string { + version := info.GitVersion + if version == "" { + version = "unknown" + } + return version +} + +var ( + reCommitSegment = regexp.MustCompile(`\+[0-9a-f]{6,14}$`) + reCommitIncrement = regexp.MustCompile(`^[0-9a-f]+$`) +) + +// LastSemanticVersion attempts to return a semantic version from the GitVersion - which +// is either + or on release boundaries. +func (info Info) LastSemanticVersion() string { + version := info.GitVersion + parts := strings.Split(version, "-") + // strip the modifier + if len(parts) > 1 && parts[len(parts)-1] == "dirty" { + parts = parts[:len(parts)-1] + } + // strip the Git commit + if len(parts) > 0 && reCommitSegment.MatchString(parts[len(parts)-1]) { + parts[len(parts)-1] = reCommitSegment.ReplaceAllString(parts[len(parts)-1], "") + if len(parts[len(parts)-1]) == 0 { + parts = parts[:len(parts)-1] + } + // strip a version increment, but only if we found the commit + if len(parts) > 1 && reCommitIncrement.MatchString(parts[len(parts)-1]) { + parts = parts[:len(parts)-1] + } + } + + return strings.Join(parts, "-") +} + +func init() { + buildInfo := prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "openshift_build_info", + Help: "A metric with a constant '1' value labeled by major, minor, git commit & git version from which OpenShift was built.", + }, + []string{"major", "minor", "gitCommit", "gitVersion"}, + ) + buildInfo.WithLabelValues(majorFromGit, minorFromGit, commitFromGit, versionFromGit).Set(1) + + prometheus.MustRegister(buildInfo) +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index 85fa20be..8be24769 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -1,6 +1,7 @@ package prometheus import ( + "fmt" "runtime" "runtime/debug" "time" @@ -9,6 +10,9 @@ import ( type goCollector struct { goroutines Gauge gcDesc *Desc + + // metrics to describe and collect + metrics memStatsMetrics } // NewGoCollector returns a collector which exports metrics about the current @@ -16,20 +20,216 @@ type goCollector struct { func NewGoCollector() *goCollector { return &goCollector{ goroutines: NewGauge(GaugeOpts{ - Name: "go_goroutines", - Help: "Number of goroutines that currently exist.", + Namespace: "go", + Name: "goroutines", + Help: "Number of goroutines that currently exist.", }), gcDesc: NewDesc( "go_gc_duration_seconds", "A summary of the GC invocation durations.", nil, nil), + metrics: memStatsMetrics{ + { + desc: NewDesc( + memstatNamespace("alloc_bytes"), + "Number of bytes allocated and still in use.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Alloc) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("alloc_bytes_total"), + "Total number of bytes allocated, even if freed.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.TotalAlloc) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("sys_bytes"), + "Number of bytes obtained by system. Sum of all system allocations.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Sys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("lookups_total"), + "Total number of pointer lookups.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Lookups) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("mallocs_total"), + "Total number of mallocs.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Mallocs) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("frees_total"), + "Total number of frees.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Frees) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("heap_alloc_bytes"), + "Number of heap bytes allocated and still in use.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapAlloc) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("heap_sys_bytes"), + "Number of heap bytes obtained from system.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("heap_idle_bytes"), + "Number of heap bytes waiting to be used.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapIdle) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("heap_inuse_bytes"), + "Number of heap bytes that are in use.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapInuse) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("heap_released_bytes_total"), + "Total number of heap bytes released to OS.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapReleased) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("heap_objects"), + "Number of allocated objects.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapObjects) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("stack_inuse_bytes"), + "Number of bytes in use by the stack allocator.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackInuse) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("stack_sys_bytes"), + "Number of bytes obtained from system for stack allocator.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("mspan_inuse_bytes"), + "Number of bytes in use by mspan structures.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanInuse) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("mspan_sys_bytes"), + "Number of bytes used for mspan structures obtained from system.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("mcache_inuse_bytes"), + "Number of bytes in use by mcache structures.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheInuse) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("mcache_sys_bytes"), + "Number of bytes used for mcache structures obtained from system.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("buck_hash_sys_bytes"), + "Number of bytes used by the profiling bucket hash table.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.BuckHashSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("gc_sys_bytes"), + "Number of bytes used for garbage collection system metadata.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.GCSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("other_sys_bytes"), + "Number of bytes used for other system allocations.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.OtherSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("next_gc_bytes"), + "Number of heap bytes when next garbage collection will take place.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.NextGC) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("last_gc_time_seconds"), + "Number of seconds since 1970 of last garbage collection.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.LastGC*10 ^ 9) }, + valType: GaugeValue, + }, + }, } } +func memstatNamespace(s string) string { + return fmt.Sprintf("go_memstats_%s", s) +} + // Describe returns all descriptions of the collector. func (c *goCollector) Describe(ch chan<- *Desc) { ch <- c.goroutines.Desc() ch <- c.gcDesc + + for _, i := range c.metrics { + ch <- i.desc + } } // Collect returns the current state of all metrics of the collector. @@ -47,4 +247,17 @@ func (c *goCollector) Collect(ch chan<- Metric) { } quantiles[0.0] = stats.PauseQuantiles[0].Seconds() ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), float64(stats.PauseTotal.Seconds()), quantiles) + + ms := &runtime.MemStats{} + runtime.ReadMemStats(ms) + for _, i := range c.metrics { + ch <- MustNewConstMetric(i.desc, i.valType, i.eval(ms)) + } +} + +// memStatsMetrics provide description, value, and value type for memstat metrics. +type memStatsMetrics []struct { + desc *Desc + eval func(*runtime.MemStats) float64 + valType ValueType } diff --git a/vendor/github.com/prometheus/procfs/.travis.yml b/vendor/github.com/prometheus/procfs/.travis.yml index b1e6743f..25e169dd 100644 --- a/vendor/github.com/prometheus/procfs/.travis.yml +++ b/vendor/github.com/prometheus/procfs/.travis.yml @@ -1,5 +1,7 @@ +sudo: false language: go go: - 1.3 - 1.4 + - 1.5 - tip diff --git a/vendor/github.com/prometheus/procfs/AUTHORS.md b/vendor/github.com/prometheus/procfs/AUTHORS.md index 6eb1935c..f1c27ccb 100644 --- a/vendor/github.com/prometheus/procfs/AUTHORS.md +++ b/vendor/github.com/prometheus/procfs/AUTHORS.md @@ -8,4 +8,13 @@ Maintainers of this repository: The following individuals have contributed code to this repository (listed in alphabetical order): -* Tobias Schmidt +* Armen Baghumian +* Bjoern Rabenstein +* David Cournapeau +* Ji-Hoon, Seol +* Jonas Große Sundrup +* Julius Volz +* Matthias Rampke +* Nicky Gerritsen +* Rémi Audebert +* Tobias Schmidt diff --git a/vendor/github.com/prometheus/procfs/Makefile b/vendor/github.com/prometheus/procfs/Makefile new file mode 100644 index 00000000..e8acbbc5 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/Makefile @@ -0,0 +1,6 @@ +ci: + go fmt + go vet + go test -v ./... + go get github.com/golang/lint/golint + golint *.go diff --git a/vendor/github.com/prometheus/procfs/README.md b/vendor/github.com/prometheus/procfs/README.md index 761d31cd..6e7ee6b8 100644 --- a/vendor/github.com/prometheus/procfs/README.md +++ b/vendor/github.com/prometheus/procfs/README.md @@ -3,5 +3,8 @@ This procfs package provides functions to retrieve system, kernel and process metrics from the pseudo-filesystem proc. +*WARNING*: This package is a work in progress. Its API may still break in +backwards-incompatible ways without warnings. Use it at your own risk. + [![GoDoc](https://godoc.org/github.com/prometheus/procfs?status.png)](https://godoc.org/github.com/prometheus/procfs) [![Build Status](https://travis-ci.org/prometheus/procfs.svg?branch=master)](https://travis-ci.org/prometheus/procfs) diff --git a/vendor/github.com/prometheus/procfs/fs.go b/vendor/github.com/prometheus/procfs/fs.go index 838474ab..6a8d97b1 100644 --- a/vendor/github.com/prometheus/procfs/fs.go +++ b/vendor/github.com/prometheus/procfs/fs.go @@ -34,3 +34,7 @@ func (fs FS) stat(p string) (os.FileInfo, error) { func (fs FS) open(p string) (*os.File, error) { return os.Open(path.Join(string(fs), p)) } + +func (fs FS) readlink(p string) (string, error) { + return os.Readlink(path.Join(string(fs), p)) +} diff --git a/vendor/github.com/prometheus/procfs/ipvs.go b/vendor/github.com/prometheus/procfs/ipvs.go new file mode 100644 index 00000000..26da5000 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/ipvs.go @@ -0,0 +1,223 @@ +package procfs + +import ( + "bufio" + "encoding/hex" + "errors" + "fmt" + "io" + "io/ioutil" + "net" + "strconv" + "strings" +) + +// IPVSStats holds IPVS statistics, as exposed by the kernel in `/proc/net/ip_vs_stats`. +type IPVSStats struct { + // Total count of connections. + Connections uint64 + // Total incoming packages processed. + IncomingPackets uint64 + // Total outgoing packages processed. + OutgoingPackets uint64 + // Total incoming traffic. + IncomingBytes uint64 + // Total outgoing traffic. + OutgoingBytes uint64 +} + +// IPVSBackendStatus holds current metrics of one virtual / real address pair. +type IPVSBackendStatus struct { + // The local (virtual) IP address. + LocalAddress net.IP + // The local (virtual) port. + LocalPort uint16 + // The transport protocol (TCP, UDP). + Proto string + // The remote (real) IP address. + RemoteAddress net.IP + // The remote (real) port. + RemotePort uint16 + // The current number of active connections for this virtual/real address pair. + ActiveConn uint64 + // The current number of inactive connections for this virtual/real address pair. + InactConn uint64 + // The current weight of this virtual/real address pair. + Weight uint64 +} + +// NewIPVSStats reads the IPVS statistics. +func NewIPVSStats() (IPVSStats, error) { + fs, err := NewFS(DefaultMountPoint) + if err != nil { + return IPVSStats{}, err + } + + return fs.NewIPVSStats() +} + +// NewIPVSStats reads the IPVS statistics from the specified `proc` filesystem. +func (fs FS) NewIPVSStats() (IPVSStats, error) { + file, err := fs.open("net/ip_vs_stats") + if err != nil { + return IPVSStats{}, err + } + defer file.Close() + + return parseIPVSStats(file) +} + +// parseIPVSStats performs the actual parsing of `ip_vs_stats`. +func parseIPVSStats(file io.Reader) (IPVSStats, error) { + var ( + statContent []byte + statLines []string + statFields []string + stats IPVSStats + ) + + statContent, err := ioutil.ReadAll(file) + if err != nil { + return IPVSStats{}, err + } + + statLines = strings.SplitN(string(statContent), "\n", 4) + if len(statLines) != 4 { + return IPVSStats{}, errors.New("ip_vs_stats corrupt: too short") + } + + statFields = strings.Fields(statLines[2]) + if len(statFields) != 5 { + return IPVSStats{}, errors.New("ip_vs_stats corrupt: unexpected number of fields") + } + + stats.Connections, err = strconv.ParseUint(statFields[0], 16, 64) + if err != nil { + return IPVSStats{}, err + } + stats.IncomingPackets, err = strconv.ParseUint(statFields[1], 16, 64) + if err != nil { + return IPVSStats{}, err + } + stats.OutgoingPackets, err = strconv.ParseUint(statFields[2], 16, 64) + if err != nil { + return IPVSStats{}, err + } + stats.IncomingBytes, err = strconv.ParseUint(statFields[3], 16, 64) + if err != nil { + return IPVSStats{}, err + } + stats.OutgoingBytes, err = strconv.ParseUint(statFields[4], 16, 64) + if err != nil { + return IPVSStats{}, err + } + + return stats, nil +} + +// NewIPVSBackendStatus reads and returns the status of all (virtual,real) server pairs. +func NewIPVSBackendStatus() ([]IPVSBackendStatus, error) { + fs, err := NewFS(DefaultMountPoint) + if err != nil { + return []IPVSBackendStatus{}, err + } + + return fs.NewIPVSBackendStatus() +} + +// NewIPVSBackendStatus reads and returns the status of all (virtual,real) server pairs from the specified `proc` filesystem. +func (fs FS) NewIPVSBackendStatus() ([]IPVSBackendStatus, error) { + file, err := fs.open("net/ip_vs") + if err != nil { + return nil, err + } + defer file.Close() + + return parseIPVSBackendStatus(file) +} + +func parseIPVSBackendStatus(file io.Reader) ([]IPVSBackendStatus, error) { + var ( + status []IPVSBackendStatus + scanner = bufio.NewScanner(file) + proto string + localAddress net.IP + localPort uint16 + err error + ) + + for scanner.Scan() { + fields := strings.Fields(string(scanner.Text())) + if len(fields) == 0 { + continue + } + switch { + case fields[0] == "IP" || fields[0] == "Prot" || fields[1] == "RemoteAddress:Port": + continue + case fields[0] == "TCP" || fields[0] == "UDP": + if len(fields) < 2 { + continue + } + proto = fields[0] + localAddress, localPort, err = parseIPPort(fields[1]) + if err != nil { + return nil, err + } + case fields[0] == "->": + if len(fields) < 6 { + continue + } + remoteAddress, remotePort, err := parseIPPort(fields[1]) + if err != nil { + return nil, err + } + weight, err := strconv.ParseUint(fields[3], 10, 64) + if err != nil { + return nil, err + } + activeConn, err := strconv.ParseUint(fields[4], 10, 64) + if err != nil { + return nil, err + } + inactConn, err := strconv.ParseUint(fields[5], 10, 64) + if err != nil { + return nil, err + } + status = append(status, IPVSBackendStatus{ + LocalAddress: localAddress, + LocalPort: localPort, + RemoteAddress: remoteAddress, + RemotePort: remotePort, + Proto: proto, + Weight: weight, + ActiveConn: activeConn, + InactConn: inactConn, + }) + } + } + return status, nil +} + +func parseIPPort(s string) (net.IP, uint16, error) { + tmp := strings.SplitN(s, ":", 2) + + if len(tmp) != 2 { + return nil, 0, fmt.Errorf("invalid IP:Port: %s", s) + } + + if len(tmp[0]) != 8 && len(tmp[0]) != 32 { + return nil, 0, fmt.Errorf("invalid IP: %s", tmp[0]) + } + + ip, err := hex.DecodeString(tmp[0]) + if err != nil { + return nil, 0, err + } + + port, err := strconv.ParseUint(tmp[1], 16, 16) + if err != nil { + return nil, 0, err + } + + return ip, uint16(port), nil +} diff --git a/vendor/github.com/prometheus/procfs/mdstat.go b/vendor/github.com/prometheus/procfs/mdstat.go new file mode 100644 index 00000000..09ed6b5e --- /dev/null +++ b/vendor/github.com/prometheus/procfs/mdstat.go @@ -0,0 +1,158 @@ +package procfs + +import ( + "fmt" + "io/ioutil" + "path" + "regexp" + "strconv" + "strings" +) + +var ( + statuslineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`) + buildlineRE = regexp.MustCompile(`\((\d+)/\d+\)`) +) + +// MDStat holds info parsed from /proc/mdstat. +type MDStat struct { + // Name of the device. + Name string + // activity-state of the device. + ActivityState string + // Number of active disks. + DisksActive int64 + // Total number of disks the device consists of. + DisksTotal int64 + // Number of blocks the device holds. + BlocksTotal int64 + // Number of blocks on the device that are in sync. + BlocksSynced int64 +} + +// ParseMDStat parses an mdstat-file and returns a struct with the relevant infos. +func (fs FS) ParseMDStat() (mdstates []MDStat, err error) { + mdStatusFilePath := path.Join(string(fs), "mdstat") + content, err := ioutil.ReadFile(mdStatusFilePath) + if err != nil { + return []MDStat{}, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) + } + + mdStatusFile := string(content) + + lines := strings.Split(mdStatusFile, "\n") + var currentMD string + + // Each md has at least the deviceline, statusline and one empty line afterwards + // so we will have probably something of the order len(lines)/3 devices + // so we use that for preallocation. + estimateMDs := len(lines) / 3 + mdStates := make([]MDStat, 0, estimateMDs) + + for i, l := range lines { + if l == "" { + // Skip entirely empty lines. + continue + } + + if l[0] == ' ' { + // Those lines are not the beginning of a md-section. + continue + } + + if strings.HasPrefix(l, "Personalities") || strings.HasPrefix(l, "unused") { + // We aren't interested in lines with general info. + continue + } + + mainLine := strings.Split(l, " ") + if len(mainLine) < 3 { + return mdStates, fmt.Errorf("error parsing mdline: %s", l) + } + currentMD = mainLine[0] // name of md-device + activityState := mainLine[2] // activity status of said md-device + + if len(lines) <= i+3 { + return mdStates, fmt.Errorf("error parsing %s: entry for %s has fewer lines than expected", mdStatusFilePath, currentMD) + } + + active, total, size, err := evalStatusline(lines[i+1]) // parse statusline, always present + if err != nil { + return mdStates, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) + } + + // + // Now get the number of synced blocks. + // + + // Get the line number of the syncing-line. + var j int + if strings.Contains(lines[i+2], "bitmap") { // then skip the bitmap line + j = i + 3 + } else { + j = i + 2 + } + + // If device is syncing at the moment, get the number of currently synced bytes, + // otherwise that number equals the size of the device. + syncedBlocks := size + if strings.Contains(lines[j], "recovery") || strings.Contains(lines[j], "resync") { + syncedBlocks, err = evalBuildline(lines[j]) + if err != nil { + return mdStates, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) + } + } + + mdStates = append(mdStates, MDStat{currentMD, activityState, active, total, size, syncedBlocks}) + + } + + return mdStates, nil +} + +func evalStatusline(statusline string) (active, total, size int64, err error) { + matches := statuslineRE.FindStringSubmatch(statusline) + + // +1 to make it more obvious that the whole string containing the info is also returned as matches[0]. + if len(matches) != 3+1 { + return 0, 0, 0, fmt.Errorf("unexpected number matches found in statusline: %s", statusline) + } + + size, err = strconv.ParseInt(matches[1], 10, 64) + if err != nil { + return 0, 0, 0, fmt.Errorf("%s in statusline: %s", err, statusline) + } + + total, err = strconv.ParseInt(matches[2], 10, 64) + if err != nil { + return 0, 0, 0, fmt.Errorf("%s in statusline: %s", err, statusline) + } + + active, err = strconv.ParseInt(matches[3], 10, 64) + if err != nil { + return 0, 0, 0, fmt.Errorf("%s in statusline: %s", err, statusline) + } + + return active, total, size, nil +} + +// Gets the size that has already been synced out of the sync-line. +func evalBuildline(buildline string) (int64, error) { + matches := buildlineRE.FindStringSubmatch(buildline) + + // +1 to make it more obvious that the whole string containing the info is also returned as matches[0]. + if len(matches) < 1+1 { + return 0, fmt.Errorf("too few matches found in buildline: %s", buildline) + } + + if len(matches) > 1+1 { + return 0, fmt.Errorf("too many matches found in buildline: %s", buildline) + } + + syncedSize, err := strconv.ParseInt(matches[1], 10, 64) + if err != nil { + return 0, fmt.Errorf("%s in buildline: %s", err, buildline) + } + + return syncedSize, nil +} diff --git a/vendor/github.com/prometheus/procfs/proc.go b/vendor/github.com/prometheus/procfs/proc.go index 21445cf1..efc85027 100644 --- a/vendor/github.com/prometheus/procfs/proc.go +++ b/vendor/github.com/prometheus/procfs/proc.go @@ -24,9 +24,13 @@ func (p Procs) Len() int { return len(p) } func (p Procs) Swap(i, j int) { p[i], p[j] = p[j], p[i] } func (p Procs) Less(i, j int) bool { return p[i].PID < p[j].PID } -// Self returns a process for the current process. +// Self returns a process for the current process read via /proc/self. func Self() (Proc, error) { - return NewProc(os.Getpid()) + fs, err := NewFS(DefaultMountPoint) + if err != nil { + return Proc{}, err + } + return fs.Self() } // NewProc returns a process for the given pid under /proc. @@ -35,7 +39,6 @@ func NewProc(pid int) (Proc, error) { if err != nil { return Proc{}, err } - return fs.NewProc(pid) } @@ -45,16 +48,27 @@ func AllProcs() (Procs, error) { if err != nil { return Procs{}, err } - return fs.AllProcs() } +// Self returns a process for the current process. +func (fs FS) Self() (Proc, error) { + p, err := fs.readlink("self") + if err != nil { + return Proc{}, err + } + pid, err := strconv.Atoi(strings.Replace(p, string(fs), "", -1)) + if err != nil { + return Proc{}, err + } + return fs.NewProc(pid) +} + // NewProc returns a process for the given pid. func (fs FS) NewProc(pid int) (Proc, error) { if _, err := fs.stat(strconv.Itoa(pid)); err != nil { return Proc{}, err } - return Proc{PID: pid, fs: fs}, nil } @@ -96,9 +110,24 @@ func (p Proc) CmdLine() ([]string, error) { return nil, err } + if len(data) < 1 { + return []string{}, nil + } + return strings.Split(string(data[:len(data)-1]), string(byte(0))), nil } +// Executable returns the absolute path of the executable command of a process. +func (p Proc) Executable() (string, error) { + exe, err := p.readlink("exe") + + if os.IsNotExist(err) { + return "", nil + } + + return exe, err +} + // FileDescriptors returns the currently open file descriptors of a process. func (p Proc) FileDescriptors() ([]uintptr, error) { names, err := p.fileDescriptors() @@ -118,6 +147,26 @@ func (p Proc) FileDescriptors() ([]uintptr, error) { return fds, nil } +// FileDescriptorTargets returns the targets of all file descriptors of a process. +// If a file descriptor is not a symlink to a file (like a socket), that value will be the empty string. +func (p Proc) FileDescriptorTargets() ([]string, error) { + names, err := p.fileDescriptors() + if err != nil { + return nil, err + } + + targets := make([]string, len(names)) + + for i, name := range names { + target, err := p.readlink("fd/" + name) + if err == nil { + targets[i] = target + } + } + + return targets, nil +} + // FileDescriptorsLen returns the number of currently open file descriptors of // a process. func (p Proc) FileDescriptorsLen() (int, error) { @@ -147,3 +196,7 @@ func (p Proc) fileDescriptors() ([]string, error) { func (p Proc) open(pa string) (*os.File, error) { return p.fs.open(path.Join(strconv.Itoa(p.PID), pa)) } + +func (p Proc) readlink(pa string) (string, error) { + return p.fs.readlink(path.Join(strconv.Itoa(p.PID), pa)) +} diff --git a/vendor/github.com/prometheus/procfs/proc_io.go b/vendor/github.com/prometheus/procfs/proc_io.go new file mode 100644 index 00000000..7c6dc869 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/proc_io.go @@ -0,0 +1,54 @@ +package procfs + +import ( + "fmt" + "io/ioutil" +) + +// ProcIO models the content of /proc//io. +type ProcIO struct { + // Chars read. + RChar uint64 + // Chars written. + WChar uint64 + // Read syscalls. + SyscR uint64 + // Write syscalls. + SyscW uint64 + // Bytes read. + ReadBytes uint64 + // Bytes written. + WriteBytes uint64 + // Bytes written, but taking into account truncation. See + // Documentation/filesystems/proc.txt in the kernel sources for + // detailed explanation. + CancelledWriteBytes int64 +} + +// NewIO creates a new ProcIO instance from a given Proc instance. +func (p Proc) NewIO() (ProcIO, error) { + pio := ProcIO{} + + f, err := p.open("io") + if err != nil { + return pio, err + } + defer f.Close() + + data, err := ioutil.ReadAll(f) + if err != nil { + return pio, err + } + + ioFormat := "rchar: %d\nwchar: %d\nsyscr: %d\nsyscw: %d\n" + + "read_bytes: %d\nwrite_bytes: %d\n" + + "cancelled_write_bytes: %d\n" + + _, err = fmt.Sscanf(string(data), ioFormat, &pio.RChar, &pio.WChar, &pio.SyscR, + &pio.SyscW, &pio.ReadBytes, &pio.WriteBytes, &pio.CancelledWriteBytes) + if err != nil { + return pio, err + } + + return pio, nil +} diff --git a/vendor/github.com/spf13/cobra/.gitignore b/vendor/github.com/spf13/cobra/.gitignore index 36d1a84d..1b8c7c26 100644 --- a/vendor/github.com/spf13/cobra/.gitignore +++ b/vendor/github.com/spf13/cobra/.gitignore @@ -19,6 +19,18 @@ _cgo_export.* _testmain.go +# Vim files https://github.com/github/gitignore/blob/master/Global/Vim.gitignore +# swap +[._]*.s[a-w][a-z] +[._]s[a-w][a-z] +# session +Session.vim +# temporary +.netrwhist +*~ +# auto-generated tag files +tags + *.exe cobra.test diff --git a/vendor/github.com/spf13/cobra/.travis.yml b/vendor/github.com/spf13/cobra/.travis.yml index e11869ba..6e84be54 100644 --- a/vendor/github.com/spf13/cobra/.travis.yml +++ b/vendor/github.com/spf13/cobra/.travis.yml @@ -1,9 +1,14 @@ language: go go: - - 1.3.3 - - 1.4.2 - - 1.5.1 + - 1.4.3 + - 1.5.4 + - 1.6.3 - tip + +matrix: + allow_failures: + - go: tip + before_install: - mkdir -p bin - curl -Lso bin/shellcheck https://github.com/caarlos0/shellcheck-docker/releases/download/v0.4.3/shellcheck diff --git a/vendor/github.com/spf13/cobra/README.md b/vendor/github.com/spf13/cobra/README.md index f326c7fa..b338a0e4 100644 --- a/vendor/github.com/spf13/cobra/README.md +++ b/vendor/github.com/spf13/cobra/README.md @@ -22,6 +22,7 @@ Many of the most widely used Go projects are built using Cobra including: [![Build Status](https://travis-ci.org/spf13/cobra.svg "Travis CI status")](https://travis-ci.org/spf13/cobra) [![CircleCI status](https://circleci.com/gh/spf13/cobra.png?circle-token=:circle-token "CircleCI status")](https://circleci.com/gh/spf13/cobra) +[![GoDoc](https://godoc.org/github.com/spf13/cobra?status.svg)](https://godoc.org/github.com/spf13/cobra) ![cobra](https://cloud.githubusercontent.com/assets/173412/10911369/84832a8e-8212-11e5-9f82-cc96660a4794.gif) @@ -171,6 +172,12 @@ func main() { Cobra provides its own program that will create your application and add any commands you want. It's the easiest way to incorporate Cobra into your application. +In order to use the cobra command, compile it using the following command: + + > go install github.com/spf13/cobra/cobra + +This will create the cobra executable under your go path bin directory! + ### cobra init The `cobra init [yourApp]` command will create your initial application code @@ -226,13 +233,27 @@ The cobra generator will be easier to use if you provide a simple configuration file which will help you eliminate providing a bunch of repeated information in flags over and over. -an example ~/.cobra.yaml file: +An example ~/.cobra.yaml file: ```yaml author: Steve Francia license: MIT ``` +You can specify no license by setting `license` to `none` or you can specify +a custom license: + +```yaml +license: + header: This file is part of {{ .appName }}. + text: | + {{ .copyright }} + + This is my license. There are many like it, but this one is mine. + My license is my best friend. It is my life. I must master it as I must + master my life. +``` + ## Manually implementing Cobra To manually implement cobra you need to create a bare main.go file and a RootCmd file. diff --git a/vendor/github.com/spf13/cobra/bash_completions.go b/vendor/github.com/spf13/cobra/bash_completions.go index 3f33bb0e..5b3e855b 100644 --- a/vendor/github.com/spf13/cobra/bash_completions.go +++ b/vendor/github.com/spf13/cobra/bash_completions.go @@ -116,12 +116,12 @@ __handle_reply() fi local completions - if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then - completions=("${must_have_one_flag[@]}") - elif [[ ${#must_have_one_noun[@]} -ne 0 ]]; then + completions=("${commands[@]}") + if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then completions=("${must_have_one_noun[@]}") - else - completions=("${commands[@]}") + fi + if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then + completions+=("${must_have_one_flag[@]}") fi COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") ) @@ -167,6 +167,11 @@ __handle_flag() must_have_one_flag=() fi + # if you set a flag which only applies to this command, don't show subcommands + if __contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then + commands=() + fi + # keep flag value with flagname as flaghash if [ -n "${flagvalue}" ] ; then flaghash[${flagname}]=${flagvalue} @@ -263,6 +268,7 @@ func postscript(w io.Writer, name string) error { local c=0 local flags=() local two_word_flags=() + local local_nonpersistent_flags=() local flags_with_completion=() local flags_completion=() local commands=("%s") @@ -360,7 +366,7 @@ func writeFlagHandler(name string, annotations map[string][]string, w io.Writer) } func writeShortFlag(flag *pflag.Flag, w io.Writer) error { - b := (flag.Value.Type() == "bool") + b := (len(flag.NoOptDefVal) > 0) name := flag.Shorthand format := " " if !b { @@ -374,7 +380,7 @@ func writeShortFlag(flag *pflag.Flag, w io.Writer) error { } func writeFlag(flag *pflag.Flag, w io.Writer) error { - b := (flag.Value.Type() == "bool") + b := (len(flag.NoOptDefVal) > 0) name := flag.Name format := " flags+=(\"--%s" if !b { @@ -387,9 +393,24 @@ func writeFlag(flag *pflag.Flag, w io.Writer) error { return writeFlagHandler("--"+name, flag.Annotations, w) } +func writeLocalNonPersistentFlag(flag *pflag.Flag, w io.Writer) error { + b := (len(flag.NoOptDefVal) > 0) + name := flag.Name + format := " local_nonpersistent_flags+=(\"--%s" + if !b { + format += "=" + } + format += "\")\n" + if _, err := fmt.Fprintf(w, format, name); err != nil { + return err + } + return nil +} + func writeFlags(cmd *Command, w io.Writer) error { _, err := fmt.Fprintf(w, ` flags=() two_word_flags=() + local_nonpersistent_flags=() flags_with_completion=() flags_completion=() @@ -397,8 +418,12 @@ func writeFlags(cmd *Command, w io.Writer) error { if err != nil { return err } + localNonPersistentFlags := cmd.LocalNonPersistentFlags() var visitErr error cmd.NonInheritedFlags().VisitAll(func(flag *pflag.Flag) { + if nonCompletableFlag(flag) { + return + } if err := writeFlag(flag, w); err != nil { visitErr = err return @@ -409,11 +434,20 @@ func writeFlags(cmd *Command, w io.Writer) error { return } } + if localNonPersistentFlags.Lookup(flag.Name) != nil { + if err := writeLocalNonPersistentFlag(flag, w); err != nil { + visitErr = err + return + } + } }) if visitErr != nil { return visitErr } cmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) { + if nonCompletableFlag(flag) { + return + } if err := writeFlag(flag, w); err != nil { visitErr = err return @@ -440,6 +474,9 @@ func writeRequiredFlag(cmd *Command, w io.Writer) error { flags := cmd.NonInheritedFlags() var visitErr error flags.VisitAll(func(flag *pflag.Flag) { + if nonCompletableFlag(flag) { + return + } for key := range flag.Annotations { switch key { case BashCompOneRequiredFlag: @@ -546,6 +583,10 @@ func (cmd *Command) GenBashCompletion(w io.Writer) error { return postscript(w, cmd.Name()) } +func nonCompletableFlag(flag *pflag.Flag) bool { + return flag.Hidden || len(flag.Deprecated) > 0 +} + func (cmd *Command) GenBashCompletionFile(filename string) error { outFile, err := os.Create(filename) if err != nil { diff --git a/vendor/github.com/spf13/cobra/bash_completions.md b/vendor/github.com/spf13/cobra/bash_completions.md index 84d5b012..6e3b71f1 100644 --- a/vendor/github.com/spf13/cobra/bash_completions.md +++ b/vendor/github.com/spf13/cobra/bash_completions.md @@ -117,7 +117,7 @@ cmd := &cobra.Command{ ``` The aliases are not shown to the user on tab completion, but they are accepted as valid nouns by -the completion aglorithm if entered manually, e.g. in: +the completion algorithm if entered manually, e.g. in: ```bash # kubectl get rc [tab][tab] @@ -175,7 +175,7 @@ So while there are many other files in the CWD it only shows me subdirs and thos # Specifiy custom flag completion -Similar to the filename completion and filtering usingn cobra.BashCompFilenameExt, you can specifiy +Similar to the filename completion and filtering using cobra.BashCompFilenameExt, you can specifiy a custom flag completion function with cobra.BashCompCustom: ```go diff --git a/vendor/github.com/spf13/cobra/cobra.go b/vendor/github.com/spf13/cobra/cobra.go index 0c4e2e5d..93a2c0f3 100644 --- a/vendor/github.com/spf13/cobra/cobra.go +++ b/vendor/github.com/spf13/cobra/cobra.go @@ -41,6 +41,10 @@ var initializers []func() // Set this to true to enable it var EnablePrefixMatching = false +//EnableCommandSorting controls sorting of the slice of commands, which is turned on by default. +//To disable sorting, set it to false. +var EnableCommandSorting = true + //AddTemplateFunc adds a template function that's available to Usage and Help //template generation. func AddTemplateFunc(name string, tmplFunc interface{}) { diff --git a/vendor/github.com/spf13/cobra/command.go b/vendor/github.com/spf13/cobra/command.go index 0efeeb19..083e4ea7 100644 --- a/vendor/github.com/spf13/cobra/command.go +++ b/vendor/github.com/spf13/cobra/command.go @@ -21,6 +21,7 @@ import ( "io" "os" "path/filepath" + "sort" "strings" flag "github.com/spf13/pflag" @@ -103,11 +104,13 @@ type Command struct { commandsMaxUseLen int commandsMaxCommandPathLen int commandsMaxNameLen int + // is commands slice are sorted or not + commandsAreSorted bool flagErrorBuf *bytes.Buffer args []string // actual args parsed from flags - output *io.Writer // nil means stderr; use Out() method instead + output *io.Writer // out writer if set in SetOutput(w) usageFunc func(*Command) error // Usage can be defined by application usageTemplate string // Can be defined by Application helpTemplate string // Can be defined by Application @@ -120,6 +123,9 @@ type Command struct { DisableSuggestions bool // If displaying suggestions, allows to set the minimum levenshtein distance to display, must be > 0 SuggestionsMinimumDistance int + + // Disable the flag parsing. If this is true all flags will be passed to the command as arguments. + DisableFlagParsing bool } // os.Args[1:] by default, if desired, can be overridden @@ -128,25 +134,6 @@ func (c *Command) SetArgs(a []string) { c.args = a } -func (c *Command) getOut(def io.Writer) io.Writer { - if c.output != nil { - return *c.output - } - - if c.HasParent() { - return c.parent.Out() - } - return def -} - -func (c *Command) Out() io.Writer { - return c.getOut(os.Stderr) -} - -func (c *Command) getOutOrStdout() io.Writer { - return c.getOut(os.Stdout) -} - // SetOutput sets the destination for usage and error messages. // If output is nil, os.Stderr is used. func (c *Command) SetOutput(output io.Writer) { @@ -189,6 +176,26 @@ func (c *Command) SetGlobalNormalizationFunc(n func(f *flag.FlagSet, name string } } +func (c *Command) OutOrStdout() io.Writer { + return c.getOut(os.Stdout) +} + +func (c *Command) OutOrStderr() io.Writer { + return c.getOut(os.Stderr) +} + +func (c *Command) getOut(def io.Writer) io.Writer { + if c.output != nil { + return *c.output + } + if c.HasParent() { + return c.parent.getOut(def) + } + return def +} + +// UsageFunc returns either the function set by SetUsageFunc for this command +// or a parent, or it returns a default usage function func (c *Command) UsageFunc() (f func(*Command) error) { if c.usageFunc != nil { return c.usageFunc @@ -198,16 +205,24 @@ func (c *Command) UsageFunc() (f func(*Command) error) { return c.parent.UsageFunc() } return func(c *Command) error { - err := tmpl(c.Out(), c.UsageTemplate(), c) + c.mergePersistentFlags() + err := tmpl(c.OutOrStderr(), c.UsageTemplate(), c) if err != nil { - fmt.Print(err) + c.Println(err) } return err } } +// Output the usage for the command +// Used when a user provides invalid input +// Can be defined by user by overriding UsageFunc +func (c *Command) Usage() error { + return c.UsageFunc()(c) +} + // HelpFunc returns either the function set by SetHelpFunc for this command -// or a parent, or it returns a function which calls c.Help() +// or a parent, or it returns a function with default help behavior func (c *Command) HelpFunc() func(*Command, []string) { cmd := c for cmd != nil { @@ -217,13 +232,31 @@ func (c *Command) HelpFunc() func(*Command, []string) { cmd = cmd.parent } return func(*Command, []string) { - err := c.Help() + c.mergePersistentFlags() + err := tmpl(c.OutOrStdout(), c.HelpTemplate(), c) if err != nil { c.Println(err) } } } +// Output the help for the command +// Used when a user calls help [command] +// Can be defined by user by overriding HelpFunc +func (c *Command) Help() error { + c.HelpFunc()(c, []string{}) + return nil +} + +func (c *Command) UsageString() string { + tmpOutput := c.output + bb := new(bytes.Buffer) + c.SetOutput(bb) + c.Usage() + c.output = tmpOutput + return bb.String() +} + var minUsagePadding = 25 func (c *Command) UsagePadding() int { @@ -261,7 +294,7 @@ func (c *Command) UsageTemplate() string { return c.parent.UsageTemplate() } return `Usage:{{if .Runnable}} - {{if .HasFlags}}{{appendIfNotPresent .UseLine "[flags]"}}{{else}}{{.UseLine}}{{end}}{{end}}{{if .HasSubCommands}} + {{if .HasAvailableFlags}}{{appendIfNotPresent .UseLine "[flags]"}}{{else}}{{.UseLine}}{{end}}{{end}}{{if .HasAvailableSubCommands}} {{ .CommandPath}} [command]{{end}}{{if gt .Aliases 0}} Aliases: @@ -272,16 +305,16 @@ Examples: {{ .Example }}{{end}}{{ if .HasAvailableSubCommands}} Available Commands:{{range .Commands}}{{if .IsAvailableCommand}} - {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasLocalFlags}} + {{rpad .Name .NamePadding }} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasAvailableLocalFlags}} Flags: -{{.LocalFlags.FlagUsages | trimRightSpace}}{{end}}{{ if .HasInheritedFlags}} +{{.LocalFlags.FlagUsages | trimRightSpace}}{{end}}{{ if .HasAvailableInheritedFlags}} Global Flags: {{.InheritedFlags.FlagUsages | trimRightSpace}}{{end}}{{if .HasHelpSubCommands}} Additional help topics:{{range .Commands}}{{if .IsHelpCommand}} - {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasSubCommands }} + {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}{{ if .HasAvailableSubCommands }} Use "{{.CommandPath}} [command] --help" for more information about a command.{{end}} ` @@ -531,12 +564,17 @@ func (c *Command) execute(a []string) (err error) { c.Println("\"help\" flag declared as non-bool. Please correct your code") return err } + if helpVal || !c.Runnable() { return flag.ErrHelp } c.preRun() + argWoFlags := c.Flags().Args() + if c.DisableFlagParsing { + argWoFlags = a + } for p := c; p != nil; p = p.Parent() { if p.PersistentPreRunE != nil { @@ -699,8 +737,7 @@ func (c *Command) initHelpCmd() { c.Printf("Unknown help topic %#q.", args) c.Root().Usage() } else { - helpFunc := cmd.HelpFunc() - helpFunc(cmd, args) + cmd.Help() } }, } @@ -714,8 +751,20 @@ func (c *Command) ResetCommands() { c.helpCommand = nil } -//Commands returns a slice of child commands. +// Sorts commands by their names +type commandSorterByName []*Command + +func (c commandSorterByName) Len() int { return len(c) } +func (c commandSorterByName) Swap(i, j int) { c[i], c[j] = c[j], c[i] } +func (c commandSorterByName) Less(i, j int) bool { return c[i].Name() < c[j].Name() } + +// Commands returns a sorted slice of child commands. func (c *Command) Commands() []*Command { + // do not sort commands if it already sorted or sorting was disabled + if EnableCommandSorting && !c.commandsAreSorted { + sort.Sort(commandSorterByName(c.commands)) + c.commandsAreSorted = true + } return c.commands } @@ -744,10 +793,11 @@ func (c *Command) AddCommand(cmds ...*Command) { x.SetGlobalNormalizationFunc(c.globNormFunc) } c.commands = append(c.commands, x) + c.commandsAreSorted = false } } -// AddCommand removes one or more commands from a parent command. +// RemoveCommand removes one or more commands from a parent command. func (c *Command) RemoveCommand(cmds ...*Command) { commands := []*Command{} main: @@ -781,50 +831,23 @@ main: } } -// Print is a convenience method to Print to the defined output +// Print is a convenience method to Print to the defined output, fallback to Stderr if not set func (c *Command) Print(i ...interface{}) { - fmt.Fprint(c.Out(), i...) + fmt.Fprint(c.OutOrStderr(), i...) } -// Println is a convenience method to Println to the defined output +// Println is a convenience method to Println to the defined output, fallback to Stderr if not set func (c *Command) Println(i ...interface{}) { str := fmt.Sprintln(i...) c.Print(str) } -// Printf is a convenience method to Printf to the defined output +// Printf is a convenience method to Printf to the defined output, fallback to Stderr if not set func (c *Command) Printf(format string, i ...interface{}) { str := fmt.Sprintf(format, i...) c.Print(str) } -// Output the usage for the command -// Used when a user provides invalid input -// Can be defined by user by overriding UsageFunc -func (c *Command) Usage() error { - c.mergePersistentFlags() - err := c.UsageFunc()(c) - return err -} - -// Output the help for the command -// Used when a user calls help [command] -// by the default HelpFunc in the commander -func (c *Command) Help() error { - c.mergePersistentFlags() - err := tmpl(c.getOutOrStdout(), c.HelpTemplate(), c) - return err -} - -func (c *Command) UsageString() string { - tmpOutput := c.output - bb := new(bytes.Buffer) - c.SetOutput(bb) - c.Usage() - c.output = tmpOutput - return bb.String() -} - // CommandPath returns the full path to this command. func (c *Command) CommandPath() string { str := c.Name() @@ -1025,6 +1048,19 @@ func (c *Command) Flags() *flag.FlagSet { return c.flags } +// LocalNonPersistentFlags are flags specific to this command which will NOT persist to subcommands +func (c *Command) LocalNonPersistentFlags() *flag.FlagSet { + persistentFlags := c.PersistentFlags() + + out := flag.NewFlagSet(c.Name(), flag.ContinueOnError) + c.LocalFlags().VisitAll(func(f *flag.Flag) { + if persistentFlags.Lookup(f.Name) == nil { + out.AddFlag(f) + } + }) + return out +} + // Get the local FlagSet specifically set in the current command func (c *Command) LocalFlags() *flag.FlagSet { c.mergePersistentFlags() @@ -1114,10 +1150,34 @@ func (c *Command) HasLocalFlags() bool { return c.LocalFlags().HasFlags() } +// Does the command have flags inherited from its parent command func (c *Command) HasInheritedFlags() bool { return c.InheritedFlags().HasFlags() } +// Does the command contain any flags (local plus persistent from the entire +// structure) which are not hidden or deprecated +func (c *Command) HasAvailableFlags() bool { + return c.Flags().HasAvailableFlags() +} + +// Does the command contain persistent flags which are not hidden or deprecated +func (c *Command) HasAvailablePersistentFlags() bool { + return c.PersistentFlags().HasAvailableFlags() +} + +// Does the command has flags specifically declared locally which are not hidden +// or deprecated +func (c *Command) HasAvailableLocalFlags() bool { + return c.LocalFlags().HasAvailableFlags() +} + +// Does the command have flags inherited from its parent command which are +// not hidden or deprecated +func (c *Command) HasAvailableInheritedFlags() bool { + return c.InheritedFlags().HasAvailableFlags() +} + // Flag climbs up the command tree looking for matching flag func (c *Command) Flag(name string) (flag *flag.Flag) { flag = c.Flags().Lookup(name) @@ -1143,6 +1203,9 @@ func (c *Command) persistentFlag(name string) (flag *flag.Flag) { // ParseFlags parses persistent flag tree & local flags func (c *Command) ParseFlags(args []string) (err error) { + if c.DisableFlagParsing { + return nil + } c.mergePersistentFlags() err = c.Flags().Parse(args) return diff --git a/vendor/github.com/spf13/pflag/.travis.yml b/vendor/github.com/spf13/pflag/.travis.yml index 780c7ffb..580ad22f 100644 --- a/vendor/github.com/spf13/pflag/.travis.yml +++ b/vendor/github.com/spf13/pflag/.travis.yml @@ -3,8 +3,8 @@ sudo: false language: go go: - - 1.5 - - 1.6 + - 1.5.4 + - 1.6.3 - tip install: diff --git a/vendor/github.com/spf13/pflag/README.md b/vendor/github.com/spf13/pflag/README.md index 0bafd385..08ad9456 100644 --- a/vendor/github.com/spf13/pflag/README.md +++ b/vendor/github.com/spf13/pflag/README.md @@ -244,6 +244,25 @@ It is possible to mark a flag as hidden, meaning it will still function as norma flags.MarkHidden("secretFlag") ``` +## Supporting Go flags when using pflag +In order to support flags defined using Go's `flag` package, they must be added to the `pflag` flagset. This is usually necessary +to support flags defined by third-party dependencies (e.g. `golang/glog`). + +**Example**: You want to add the Go flags to the `CommandLine` flagset +```go +import ( + goflag "flag" + flag "github.com/spf13/pflag" +) + +var ip *int = flag.Int("flagname", 1234, "help message for flagname") + +func main() { + flag.CommandLine.AddGoFlagSet(goflag.CommandLine) + flag.Parse() +} +``` + ## More info You can see the full reference documentation of the pflag package diff --git a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go index 22eabffe..f31d8827 100644 --- a/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +++ b/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go @@ -27,17 +27,7 @@ func Do(ctx context.Context, client *http.Client, req *http.Request) (*http.Resp if client == nil { client = http.DefaultClient } - resp, err := client.Do(req.WithContext(ctx)) - // If we got an error, and the context has been canceled, - // the context's error is probably more useful. - if err != nil { - select { - case <-ctx.Done(): - err = ctx.Err() - default: - } - } - return resp, err + return client.Do(req.WithContext(ctx)) } // Get issues a GET request via the Do function. diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go index b1394125..547e238a 100644 --- a/vendor/golang.org/x/net/http2/client_conn_pool.go +++ b/vendor/golang.org/x/net/http2/client_conn_pool.go @@ -53,13 +53,13 @@ const ( ) func (p *clientConnPool) getClientConn(req *http.Request, addr string, dialOnMiss bool) (*ClientConn, error) { - if isConnectionCloseRequest(req) && dialOnMiss { + if req.Close && dialOnMiss { // It gets its own connection. - const singleUse = true - cc, err := p.t.dialClientConn(addr, singleUse) + cc, err := p.t.dialClientConn(addr) if err != nil { return nil, err } + cc.singleUse = true return cc, nil } p.mu.Lock() @@ -104,8 +104,7 @@ func (p *clientConnPool) getStartDialLocked(addr string) *dialCall { // run in its own goroutine. func (c *dialCall) dial(addr string) { - const singleUse = false // shared conn - c.res, c.err = c.p.t.dialClientConn(addr, singleUse) + c.res, c.err = c.p.t.dialClientConn(addr) close(c.done) c.p.mu.Lock() diff --git a/vendor/golang.org/x/net/http2/errors.go b/vendor/golang.org/x/net/http2/errors.go index 20fd7626..71a4e290 100644 --- a/vendor/golang.org/x/net/http2/errors.go +++ b/vendor/golang.org/x/net/http2/errors.go @@ -64,17 +64,9 @@ func (e ConnectionError) Error() string { return fmt.Sprintf("connection error: type StreamError struct { StreamID uint32 Code ErrCode - Cause error // optional additional detail -} - -func streamError(id uint32, code ErrCode) StreamError { - return StreamError{StreamID: id, Code: code} } func (e StreamError) Error() string { - if e.Cause != nil { - return fmt.Sprintf("stream error: stream ID %d; %v; %v", e.StreamID, e.Code, e.Cause) - } return fmt.Sprintf("stream error: stream ID %d; %v", e.StreamID, e.Code) } diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go index b0c79b01..981d407a 100644 --- a/vendor/golang.org/x/net/http2/frame.go +++ b/vendor/golang.org/x/net/http2/frame.go @@ -594,7 +594,6 @@ func parseDataFrame(fh FrameHeader, payload []byte) (Frame, error) { var ( errStreamID = errors.New("invalid stream ID") errDepStreamID = errors.New("invalid dependent stream ID") - errPadLength = errors.New("pad length too large") ) func validStreamIDOrZero(streamID uint32) bool { @@ -608,40 +607,18 @@ func validStreamID(streamID uint32) bool { // WriteData writes a DATA frame. // // It will perform exactly one Write to the underlying Writer. -// It is the caller's responsibility not to violate the maximum frame size -// and to not call other Write methods concurrently. +// It is the caller's responsibility to not call other Write methods concurrently. func (f *Framer) WriteData(streamID uint32, endStream bool, data []byte) error { - return f.WriteDataPadded(streamID, endStream, data, nil) -} - -// WriteData writes a DATA frame with optional padding. -// -// If pad is nil, the padding bit is not sent. -// The length of pad must not exceed 255 bytes. -// -// It will perform exactly one Write to the underlying Writer. -// It is the caller's responsibility not to violate the maximum frame size -// and to not call other Write methods concurrently. -func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []byte) error { + // TODO: ignoring padding for now. will add when somebody cares. if !validStreamID(streamID) && !f.AllowIllegalWrites { return errStreamID } - if len(pad) > 255 { - return errPadLength - } var flags Flags if endStream { flags |= FlagDataEndStream } - if pad != nil { - flags |= FlagDataPadded - } f.startWrite(FrameData, flags, streamID) - if pad != nil { - f.wbuf = append(f.wbuf, byte(len(pad))) - } f.wbuf = append(f.wbuf, data...) - f.wbuf = append(f.wbuf, pad...) return f.endWrite() } @@ -737,7 +714,7 @@ func (f *Framer) WriteSettings(settings ...Setting) error { return f.endWrite() } -// WriteSettingsAck writes an empty SETTINGS frame with the ACK bit set. +// WriteSettings writes an empty SETTINGS frame with the ACK bit set. // // It will perform exactly one Write to the underlying Writer. // It is the caller's responsibility to not call other Write methods concurrently. @@ -863,7 +840,7 @@ func parseWindowUpdateFrame(fh FrameHeader, p []byte) (Frame, error) { if fh.StreamID == 0 { return nil, ConnectionError(ErrCodeProtocol) } - return nil, streamError(fh.StreamID, ErrCodeProtocol) + return nil, StreamError{fh.StreamID, ErrCodeProtocol} } return &WindowUpdateFrame{ FrameHeader: fh, @@ -944,7 +921,7 @@ func parseHeadersFrame(fh FrameHeader, p []byte) (_ Frame, err error) { } } if len(p)-int(padLength) <= 0 { - return nil, streamError(fh.StreamID, ErrCodeProtocol) + return nil, StreamError{fh.StreamID, ErrCodeProtocol} } hf.headerFragBuf = p[:len(p)-int(padLength)] return hf, nil @@ -1419,9 +1396,6 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) { hdec.SetEmitEnabled(true) hdec.SetMaxStringLength(fr.maxHeaderStringLen()) hdec.SetEmitFunc(func(hf hpack.HeaderField) { - if VerboseLogs && logFrameReads { - log.Printf("http2: decoded hpack field %+v", hf) - } if !httplex.ValidHeaderFieldValue(hf.Value) { invalid = headerFieldValueError(hf.Value) } @@ -1480,17 +1454,11 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) { } if invalid != nil { fr.errDetail = invalid - if VerboseLogs { - log.Printf("http2: invalid header: %v", invalid) - } - return nil, StreamError{mh.StreamID, ErrCodeProtocol, invalid} + return nil, StreamError{mh.StreamID, ErrCodeProtocol} } if err := mh.checkPseudos(); err != nil { fr.errDetail = err - if VerboseLogs { - log.Printf("http2: invalid pseudo headers: %v", err) - } - return nil, StreamError{mh.StreamID, ErrCodeProtocol, err} + return nil, StreamError{mh.StreamID, ErrCodeProtocol} } return mh, nil } diff --git a/vendor/golang.org/x/net/http2/go17.go b/vendor/golang.org/x/net/http2/go17.go index 47b7fae0..730319dd 100644 --- a/vendor/golang.org/x/net/http2/go17.go +++ b/vendor/golang.org/x/net/http2/go17.go @@ -39,13 +39,6 @@ type clientTrace httptrace.ClientTrace func reqContext(r *http.Request) context.Context { return r.Context() } -func (t *Transport) idleConnTimeout() time.Duration { - if t.t1 != nil { - return t.t1.IdleConnTimeout - } - return 0 -} - func setResponseUncompressed(res *http.Response) { res.Uncompressed = true } func traceGotConn(req *http.Request, cc *ClientConn) { @@ -99,8 +92,3 @@ func requestTrace(req *http.Request) *clientTrace { trace := httptrace.ContextClientTrace(req.Context()) return (*clientTrace)(trace) } - -// Ping sends a PING frame to the server and waits for the ack. -func (cc *ClientConn) Ping(ctx context.Context) error { - return cc.ping(ctx) -} diff --git a/vendor/golang.org/x/net/http2/go17_not18.go b/vendor/golang.org/x/net/http2/go17_not18.go deleted file mode 100644 index b4c52ece..00000000 --- a/vendor/golang.org/x/net/http2/go17_not18.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.7,!go1.8 - -package http2 - -import "crypto/tls" - -// temporary copy of Go 1.7's private tls.Config.clone: -func cloneTLSConfig(c *tls.Config) *tls.Config { - return &tls.Config{ - Rand: c.Rand, - Time: c.Time, - Certificates: c.Certificates, - NameToCertificate: c.NameToCertificate, - GetCertificate: c.GetCertificate, - RootCAs: c.RootCAs, - NextProtos: c.NextProtos, - ServerName: c.ServerName, - ClientAuth: c.ClientAuth, - ClientCAs: c.ClientCAs, - InsecureSkipVerify: c.InsecureSkipVerify, - CipherSuites: c.CipherSuites, - PreferServerCipherSuites: c.PreferServerCipherSuites, - SessionTicketsDisabled: c.SessionTicketsDisabled, - SessionTicketKey: c.SessionTicketKey, - ClientSessionCache: c.ClientSessionCache, - MinVersion: c.MinVersion, - MaxVersion: c.MaxVersion, - CurvePreferences: c.CurvePreferences, - DynamicRecordSizingDisabled: c.DynamicRecordSizingDisabled, - Renegotiation: c.Renegotiation, - } -} diff --git a/vendor/golang.org/x/net/http2/go18.go b/vendor/golang.org/x/net/http2/go18.go deleted file mode 100644 index c2ae1673..00000000 --- a/vendor/golang.org/x/net/http2/go18.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.8 - -package http2 - -import "crypto/tls" - -func cloneTLSConfig(c *tls.Config) *tls.Config { return c.Clone() } diff --git a/vendor/golang.org/x/net/http2/hpack/hpack.go b/vendor/golang.org/x/net/http2/hpack/hpack.go index 135b9f62..8aa197ad 100644 --- a/vendor/golang.org/x/net/http2/hpack/hpack.go +++ b/vendor/golang.org/x/net/http2/hpack/hpack.go @@ -57,7 +57,7 @@ func (hf HeaderField) String() string { return fmt.Sprintf("header field %q = %q%s", hf.Name, hf.Value, suffix) } -// Size returns the size of an entry per RFC 7541 section 4.1. +// Size returns the size of an entry per RFC 7540 section 5.2. func (hf HeaderField) Size() uint32 { // http://http2.github.io/http2-spec/compression.html#rfc.section.4.1 // "The size of the dynamic table is the sum of the size of diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go index 40b46ae8..0173aed6 100644 --- a/vendor/golang.org/x/net/http2/http2.go +++ b/vendor/golang.org/x/net/http2/http2.go @@ -13,7 +13,6 @@ // See https://http2.github.io/ for more information on HTTP/2. // // See https://http2.golang.org/ for a test server running this code. -// package http2 import ( @@ -343,23 +342,10 @@ func (s *sorter) Keys(h http.Header) []string { } func (s *sorter) SortStrings(ss []string) { - // Our sorter works on s.v, which sorter owns, so + // Our sorter works on s.v, which sorter owners, so // stash it away while we sort the user's buffer. save := s.v s.v = ss sort.Sort(s) s.v = save } - -// validPseudoPath reports whether v is a valid :path pseudo-header -// value. It must be either: -// -// *) a non-empty string starting with '/', but not with with "//", -// *) the string '*', for OPTIONS requests. -// -// For now this is only used a quick check for deciding when to clean -// up Opaque URLs before sending requests from the Transport. -// See golang.org/issue/16847 -func validPseudoPath(v string) bool { - return (len(v) > 0 && v[0] == '/' && (len(v) == 1 || v[1] != '/')) || v == "*" -} diff --git a/vendor/golang.org/x/net/http2/not_go17.go b/vendor/golang.org/x/net/http2/not_go17.go index 140434a7..28df0c16 100644 --- a/vendor/golang.org/x/net/http2/not_go17.go +++ b/vendor/golang.org/x/net/http2/not_go17.go @@ -7,16 +7,11 @@ package http2 import ( - "crypto/tls" "net" "net/http" - "time" ) -type contextContext interface { - Done() <-chan struct{} - Err() error -} +type contextContext interface{} type fakeContext struct{} @@ -54,34 +49,3 @@ func contextWithCancel(ctx contextContext) (_ contextContext, cancel func()) { func requestWithContext(req *http.Request, ctx contextContext) *http.Request { return req } - -// temporary copy of Go 1.6's private tls.Config.clone: -func cloneTLSConfig(c *tls.Config) *tls.Config { - return &tls.Config{ - Rand: c.Rand, - Time: c.Time, - Certificates: c.Certificates, - NameToCertificate: c.NameToCertificate, - GetCertificate: c.GetCertificate, - RootCAs: c.RootCAs, - NextProtos: c.NextProtos, - ServerName: c.ServerName, - ClientAuth: c.ClientAuth, - ClientCAs: c.ClientCAs, - InsecureSkipVerify: c.InsecureSkipVerify, - CipherSuites: c.CipherSuites, - PreferServerCipherSuites: c.PreferServerCipherSuites, - SessionTicketsDisabled: c.SessionTicketsDisabled, - SessionTicketKey: c.SessionTicketKey, - ClientSessionCache: c.ClientSessionCache, - MinVersion: c.MinVersion, - MaxVersion: c.MaxVersion, - CurvePreferences: c.CurvePreferences, - } -} - -func (cc *ClientConn) Ping(ctx contextContext) error { - return cc.ping(ctx) -} - -func (t *Transport) idleConnTimeout() time.Duration { return 0 } diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index c986bc1b..f368738f 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -922,7 +922,7 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) { // state here anyway, after telling the peer // we're hanging up on them. st.state = stateHalfClosedLocal // won't last long, but necessary for closeStream via resetStream - errCancel := streamError(st.id, ErrCodeCancel) + errCancel := StreamError{st.id, ErrCodeCancel} sc.resetStream(errCancel) case stateHalfClosedRemote: sc.closeStream(st, errHandlerComplete) @@ -1133,7 +1133,7 @@ func (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error { return nil } if !st.flow.add(int32(f.Increment)) { - return streamError(f.StreamID, ErrCodeFlowControl) + return StreamError{f.StreamID, ErrCodeFlowControl} } default: // connection-level flow control if !sc.flow.add(int32(f.Increment)) { @@ -1159,7 +1159,7 @@ func (sc *serverConn) processResetStream(f *RSTStreamFrame) error { if st != nil { st.gotReset = true st.cancelCtx() - sc.closeStream(st, streamError(f.StreamID, f.ErrCode)) + sc.closeStream(st, StreamError{f.StreamID, f.ErrCode}) } return nil } @@ -1176,10 +1176,6 @@ func (sc *serverConn) closeStream(st *stream, err error) { } delete(sc.streams, st.id) if p := st.body; p != nil { - // Return any buffered unread bytes worth of conn-level flow control. - // See golang.org/issue/16481 - sc.sendWindowUpdate(nil, p.Len()) - p.CloseWithError(err) } st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc @@ -1281,8 +1277,6 @@ func (sc *serverConn) processSettingInitialWindowSize(val uint32) error { func (sc *serverConn) processData(f *DataFrame) error { sc.serveG.check() - data := f.Data() - // "If a DATA frame is received whose stream is not in "open" // or "half closed (local)" state, the recipient MUST respond // with a stream error (Section 5.4.2) of type STREAM_CLOSED." @@ -1294,55 +1288,32 @@ func (sc *serverConn) processData(f *DataFrame) error { // the http.Handler returned, so it's done reading & // done writing). Try to stop the client from sending // more DATA. - - // But still enforce their connection-level flow control, - // and return any flow control bytes since we're not going - // to consume them. - if sc.inflow.available() < int32(f.Length) { - return streamError(id, ErrCodeFlowControl) - } - // Deduct the flow control from inflow, since we're - // going to immediately add it back in - // sendWindowUpdate, which also schedules sending the - // frames. - sc.inflow.take(int32(f.Length)) - sc.sendWindowUpdate(nil, int(f.Length)) // conn-level - - return streamError(id, ErrCodeStreamClosed) + return StreamError{id, ErrCodeStreamClosed} } if st.body == nil { panic("internal error: should have a body in this state") } + data := f.Data() // Sender sending more than they'd declared? if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes { st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes)) - return streamError(id, ErrCodeStreamClosed) + return StreamError{id, ErrCodeStreamClosed} } - if f.Length > 0 { + if len(data) > 0 { // Check whether the client has flow control quota. - if st.inflow.available() < int32(f.Length) { - return streamError(id, ErrCodeFlowControl) + if int(st.inflow.available()) < len(data) { + return StreamError{id, ErrCodeFlowControl} } - st.inflow.take(int32(f.Length)) - - if len(data) > 0 { - wrote, err := st.body.Write(data) - if err != nil { - return streamError(id, ErrCodeStreamClosed) - } - if wrote != len(data) { - panic("internal error: bad Writer") - } - st.bodyBytes += int64(len(data)) + st.inflow.take(int32(len(data))) + wrote, err := st.body.Write(data) + if err != nil { + return StreamError{id, ErrCodeStreamClosed} } - - // Return any padded flow control now, since we won't - // refund it later on body reads. - if pad := int32(f.Length) - int32(len(data)); pad > 0 { - sc.sendWindowUpdate32(nil, pad) - sc.sendWindowUpdate32(st, pad) + if wrote != len(data) { + panic("internal error: bad Writer") } + st.bodyBytes += int64(len(data)) } if f.StreamEnded() { st.endStream() @@ -1446,14 +1417,14 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { // REFUSED_STREAM." if sc.unackedSettings == 0 { // They should know better. - return streamError(st.id, ErrCodeProtocol) + return StreamError{st.id, ErrCodeProtocol} } // Assume it's a network race, where they just haven't // received our last SETTINGS update. But actually // this can't happen yet, because we don't yet provide // a way for users to adjust server parameters at // runtime. - return streamError(st.id, ErrCodeRefusedStream) + return StreamError{st.id, ErrCodeRefusedStream} } rw, req, err := sc.newWriterAndRequest(st, f) @@ -1475,19 +1446,6 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { handler = new400Handler(err) } - // The net/http package sets the read deadline from the - // http.Server.ReadTimeout during the TLS handshake, but then - // passes the connection off to us with the deadline already - // set. Disarm it here after the request headers are read, similar - // to how the http1 server works. - // Unlike http1, though, we never re-arm it yet, though. - // TODO(bradfitz): figure out golang.org/issue/14204 - // (IdleTimeout) and how this relates. Maybe the default - // IdleTimeout is ReadTimeout. - if sc.hs.ReadTimeout != 0 { - sc.conn.SetReadDeadline(time.Time{}) - } - go sc.runHandler(rw, req, handler) return nil } @@ -1500,11 +1458,11 @@ func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error { } st.gotTrailerHeader = true if !f.StreamEnded() { - return streamError(st.id, ErrCodeProtocol) + return StreamError{st.id, ErrCodeProtocol} } if len(f.PseudoFields()) > 0 { - return streamError(st.id, ErrCodeProtocol) + return StreamError{st.id, ErrCodeProtocol} } if st.trailer != nil { for _, hf := range f.RegularFields() { @@ -1513,7 +1471,7 @@ func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error { // TODO: send more details to the peer somehow. But http2 has // no way to send debug data at a stream level. Discuss with // HTTP folk. - return streamError(st.id, ErrCodeProtocol) + return StreamError{st.id, ErrCodeProtocol} } st.trailer[key] = append(st.trailer[key], hf.Value) } @@ -1574,7 +1532,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res isConnect := method == "CONNECT" if isConnect { if path != "" || scheme != "" || authority == "" { - return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + return nil, nil, StreamError{f.StreamID, ErrCodeProtocol} } } else if method == "" || path == "" || (scheme != "https" && scheme != "http") { @@ -1588,13 +1546,13 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res // "All HTTP/2 requests MUST include exactly one valid // value for the :method, :scheme, and :path // pseudo-header fields" - return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + return nil, nil, StreamError{f.StreamID, ErrCodeProtocol} } bodyOpen := !f.StreamEnded() if method == "HEAD" && bodyOpen { // HEAD requests can't have bodies - return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + return nil, nil, StreamError{f.StreamID, ErrCodeProtocol} } var tlsState *tls.ConnectionState // nil if not scheme https @@ -1652,7 +1610,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res var err error url_, err = url.ParseRequestURI(path) if err != nil { - return nil, nil, streamError(f.StreamID, ErrCodeProtocol) + return nil, nil, StreamError{f.StreamID, ErrCodeProtocol} } requestURI = path } diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index b939fed2..fb8dd997 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -10,14 +10,12 @@ import ( "bufio" "bytes" "compress/gzip" - "crypto/rand" "crypto/tls" "errors" "fmt" "io" "io/ioutil" "log" - "math" "net" "net/http" "sort" @@ -27,7 +25,6 @@ import ( "time" "golang.org/x/net/http2/hpack" - "golang.org/x/net/idna" "golang.org/x/net/lex/httplex" ) @@ -151,32 +148,27 @@ type ClientConn struct { readerDone chan struct{} // closed on error readerErr error // set before readerDone is closed - idleTimeout time.Duration // or 0 for never - idleTimer *time.Timer + mu sync.Mutex // guards following + cond *sync.Cond // hold mu; broadcast on flow/closed changes + flow flow // our conn-level flow control quota (cs.flow is per stream) + inflow flow // peer's conn-level flow control + closed bool + goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received + goAwayDebug string // goAway frame's debug data, retained as a string + streams map[uint32]*clientStream // client-initiated + nextStreamID uint32 + bw *bufio.Writer + br *bufio.Reader + fr *Framer + lastActive time.Time - mu sync.Mutex // guards following - cond *sync.Cond // hold mu; broadcast on flow/closed changes - flow flow // our conn-level flow control quota (cs.flow is per stream) - inflow flow // peer's conn-level flow control - closed bool - wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back - goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received - goAwayDebug string // goAway frame's debug data, retained as a string - streams map[uint32]*clientStream // client-initiated - nextStreamID uint32 - pings map[[8]byte]chan struct{} // in flight ping data to notification channel - bw *bufio.Writer - br *bufio.Reader - fr *Framer - lastActive time.Time - // Settings from peer: (also guarded by mu) + // Settings from peer: maxFrameSize uint32 maxConcurrentStreams uint32 initialWindowSize uint32 - - hbuf bytes.Buffer // HPACK encoder writes into this - henc *hpack.Encoder - freeBuf [][]byte + hbuf bytes.Buffer // HPACK encoder writes into this + henc *hpack.Encoder + freeBuf [][]byte wmu sync.Mutex // held while writing; acquire AFTER mu if holding both werr error // first write error that has occurred @@ -291,18 +283,14 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { // authorityAddr returns a given authority (a host/IP, or host:port / ip:port) // and returns a host:port. The port 443 is added if needed. func authorityAddr(scheme string, authority string) (addr string) { - host, port, err := net.SplitHostPort(authority) - if err != nil { // authority didn't have a port - port = "443" - if scheme == "http" { - port = "80" - } - host = authority + if _, _, err := net.SplitHostPort(authority); err == nil { + return authority } - if a, err := idna.ToASCII(host); err == nil { - host = a + port := "443" + if scheme == "http" { + port = "80" } - return net.JoinHostPort(host, port) + return net.JoinHostPort(authority, port) } // RoundTripOpt is like RoundTrip, but takes options. @@ -351,7 +339,7 @@ func shouldRetryRequest(req *http.Request, err error) bool { return err == errClientConnUnusable } -func (t *Transport) dialClientConn(addr string, singleUse bool) (*ClientConn, error) { +func (t *Transport) dialClientConn(addr string) (*ClientConn, error) { host, _, err := net.SplitHostPort(addr) if err != nil { return nil, err @@ -360,13 +348,13 @@ func (t *Transport) dialClientConn(addr string, singleUse bool) (*ClientConn, er if err != nil { return nil, err } - return t.newClientConn(tconn, singleUse) + return t.NewClientConn(tconn) } func (t *Transport) newTLSConfig(host string) *tls.Config { cfg := new(tls.Config) if t.TLSClientConfig != nil { - *cfg = *cloneTLSConfig(t.TLSClientConfig) + *cfg = *t.TLSClientConfig } if !strSliceContains(cfg.NextProtos, NextProtoTLS) { cfg.NextProtos = append([]string{NextProtoTLS}, cfg.NextProtos...) @@ -421,10 +409,14 @@ func (t *Transport) expectContinueTimeout() time.Duration { } func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { - return t.newClientConn(c, false) -} + if VerboseLogs { + t.vlogf("http2: Transport creating client conn to %v", c.RemoteAddr()) + } + if _, err := c.Write(clientPreface); err != nil { + t.vlogf("client preface write error: %v", err) + return nil, err + } -func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) { cc := &ClientConn{ t: t, tconn: c, @@ -434,18 +426,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro initialWindowSize: 65535, // spec default maxConcurrentStreams: 1000, // "infinite", per spec. 1000 seems good enough. streams: make(map[uint32]*clientStream), - singleUse: singleUse, - wantSettingsAck: true, - pings: make(map[[8]byte]chan struct{}), } - if d := t.idleConnTimeout(); d != 0 { - cc.idleTimeout = d - cc.idleTimer = time.AfterFunc(d, cc.onIdleTimeout) - } - if VerboseLogs { - t.vlogf("http2: Transport creating client conn %p to %v", cc, c.RemoteAddr()) - } - cc.cond = sync.NewCond(&cc.mu) cc.flow.add(int32(initialWindowSize)) @@ -473,8 +454,6 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro if max := t.maxHeaderListSize(); max != 0 { initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max}) } - - cc.bw.Write(clientPreface) cc.fr.WriteSettings(initialSettings...) cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow) cc.inflow.add(transportDefaultConnFlow + initialWindowSize) @@ -483,6 +462,33 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro return nil, cc.werr } + // Read the obligatory SETTINGS frame + f, err := cc.fr.ReadFrame() + if err != nil { + return nil, err + } + sf, ok := f.(*SettingsFrame) + if !ok { + return nil, fmt.Errorf("expected settings frame, got: %T", f) + } + cc.fr.WriteSettingsAck() + cc.bw.Flush() + + sf.ForeachSetting(func(s Setting) error { + switch s.ID { + case SettingMaxFrameSize: + cc.maxFrameSize = s.Val + case SettingMaxConcurrentStreams: + cc.maxConcurrentStreams = s.Val + case SettingInitialWindowSize: + cc.initialWindowSize = s.Val + default: + // TODO(bradfitz): handle more; at least SETTINGS_HEADER_TABLE_SIZE? + t.vlogf("Unhandled Setting: %v", s) + } + return nil + }) + go cc.readLoop() return cc, nil } @@ -515,17 +521,7 @@ func (cc *ClientConn) canTakeNewRequestLocked() bool { } return cc.goAway == nil && !cc.closed && int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams) && - cc.nextStreamID < math.MaxInt32 -} - -// onIdleTimeout is called from a time.AfterFunc goroutine. It will -// only be called when we're idle, but because we're coming from a new -// goroutine, there could be a new request coming in at the same time, -// so this simply calls the synchronized closeIfIdle to shut down this -// connection. The timer could just call closeIfIdle, but this is more -// clear. -func (cc *ClientConn) onIdleTimeout() { - cc.closeIfIdle() + cc.nextStreamID < 2147483647 } func (cc *ClientConn) closeIfIdle() { @@ -535,13 +531,9 @@ func (cc *ClientConn) closeIfIdle() { return } cc.closed = true - nextID := cc.nextStreamID // TODO: do clients send GOAWAY too? maybe? Just Close: cc.mu.Unlock() - if VerboseLogs { - cc.vlogf("http2: Transport closing idle conn %p (forSingleUse=%v, maxStream=%v)", cc, cc.singleUse, nextID-2) - } cc.tconn.Close() } @@ -624,13 +616,13 @@ func (cc *ClientConn) responseHeaderTimeout() time.Duration { // Certain headers are special-cased as okay but not transmitted later. func checkConnHeaders(req *http.Request) error { if v := req.Header.Get("Upgrade"); v != "" { - return fmt.Errorf("http2: invalid Upgrade request header: %q", req.Header["Upgrade"]) + return errors.New("http2: invalid Upgrade request header") } - if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { - return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv) + if v := req.Header.Get("Transfer-Encoding"); (v != "" && v != "chunked") || len(req.Header["Transfer-Encoding"]) > 1 { + return errors.New("http2: invalid Transfer-Encoding request header") } - if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "close" && vv[0] != "keep-alive") { - return fmt.Errorf("http2: invalid Connection request header: %q", vv) + if v := req.Header.Get("Connection"); (v != "" && v != "close" && v != "keep-alive") || len(req.Header["Connection"]) > 1 { + return errors.New("http2: invalid Connection request header") } return nil } @@ -643,27 +635,19 @@ func bodyAndLength(req *http.Request) (body io.Reader, contentLen int64) { if req.ContentLength != 0 { return req.Body, req.ContentLength } - // Don't try to sniff the size if they're doing an expect - // request (Issue 16002): - if req.Header.Get("Expect") == "100-continue" { - return req.Body, -1 - } // We have a body but a zero content length. Test to see if // it's actually zero or just unset. var buf [1]byte - n, rerr := body.Read(buf[:]) + n, rerr := io.ReadFull(body, buf[:]) if rerr != nil && rerr != io.EOF { return errorReader{rerr}, -1 } if n == 1 { // Oh, guess there is data in this Body Reader after all. // The ContentLength field just wasn't set. - // Stitch the Body back together again, re-attaching our + // Stich the Body back together again, re-attaching our // consumed byte. - if rerr == io.EOF { - return bytes.NewReader(buf[:]), 1 - } return io.MultiReader(bytes.NewReader(buf[:]), body), -1 } // Body is actually zero bytes. @@ -674,9 +658,6 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { if err := checkConnHeaders(req); err != nil { return nil, err } - if cc.idleTimer != nil { - cc.idleTimer.Stop() - } trailers, err := commaSeparatedTrailers(req) if err != nil { @@ -684,6 +665,9 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { } hasTrailers := trailers != "" + body, contentLen := bodyAndLength(req) + hasBody := body != nil + cc.mu.Lock() cc.lastActive = time.Now() if cc.closed || !cc.canTakeNewRequestLocked() { @@ -691,9 +675,6 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { return nil, errClientConnUnusable } - body, contentLen := bodyAndLength(req) - hasBody := body != nil - // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? var requestedGzip bool if !cc.t.disableCompression() && @@ -766,34 +747,30 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { bodyWritten := false ctx := reqContext(req) - handleReadLoopResponse := func(re resAndError) (*http.Response, error) { - res := re.res - if re.err != nil || res.StatusCode > 299 { - // On error or status code 3xx, 4xx, 5xx, etc abort any - // ongoing write, assuming that the server doesn't care - // about our request body. If the server replied with 1xx or - // 2xx, however, then assume the server DOES potentially - // want our body (e.g. full-duplex streaming: - // golang.org/issue/13444). If it turns out the server - // doesn't, they'll RST_STREAM us soon enough. This is a - // heuristic to avoid adding knobs to Transport. Hopefully - // we can keep it. - bodyWriter.cancel() - cs.abortRequestBodyWrite(errStopReqBodyWrite) - } - if re.err != nil { - cc.forgetStreamID(cs.ID) - return nil, re.err - } - res.Request = req - res.TLS = cc.tlsState - return res, nil - } - for { select { case re := <-readLoopResCh: - return handleReadLoopResponse(re) + res := re.res + if re.err != nil || res.StatusCode > 299 { + // On error or status code 3xx, 4xx, 5xx, etc abort any + // ongoing write, assuming that the server doesn't care + // about our request body. If the server replied with 1xx or + // 2xx, however, then assume the server DOES potentially + // want our body (e.g. full-duplex streaming: + // golang.org/issue/13444). If it turns out the server + // doesn't, they'll RST_STREAM us soon enough. This is a + // heuristic to avoid adding knobs to Transport. Hopefully + // we can keep it. + bodyWriter.cancel() + cs.abortRequestBodyWrite(errStopReqBodyWrite) + } + if re.err != nil { + cc.forgetStreamID(cs.ID) + return nil, re.err + } + res.Request = req + res.TLS = cc.tlsState + return res, nil case <-respHeaderTimer: cc.forgetStreamID(cs.ID) if !hasBody || bodyWritten { @@ -827,12 +804,6 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { // forgetStreamID. return nil, cs.resetErr case err := <-bodyWriter.resc: - // Prefer the read loop's response, if available. Issue 16102. - select { - case re := <-readLoopResCh: - return handleReadLoopResponse(re) - default: - } if err != nil { return nil, err } @@ -937,11 +908,10 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) ( err = cc.fr.WriteData(cs.ID, sentEnd, data) if err == nil { // TODO(bradfitz): this flush is for latency, not bandwidth. - // Most requests won't need this. Make this opt-in or - // opt-out? Use some heuristic on the body type? Nagel-like - // timers? Based on 'n'? Only last chunk of this for loop, - // unless flow control tokens are low? For now, always. - // If we change this, see comment below. + // Most requests won't need this. Make this opt-in or opt-out? + // Use some heuristic on the body type? Nagel-like timers? + // Based on 'n'? Only last chunk of this for loop, unless flow control + // tokens are low? For now, always: err = cc.bw.Flush() } cc.wmu.Unlock() @@ -951,33 +921,28 @@ func (cs *clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) ( } } - if sentEnd { - // Already sent END_STREAM (which implies we have no - // trailers) and flushed, because currently all - // WriteData frames above get a flush. So we're done. - return nil - } - - var trls []byte - if hasTrailers { - cc.mu.Lock() - defer cc.mu.Unlock() - trls = cc.encodeTrailers(req) - } - cc.wmu.Lock() - defer cc.wmu.Unlock() + if !sentEnd { + var trls []byte + if hasTrailers { + cc.mu.Lock() + trls = cc.encodeTrailers(req) + cc.mu.Unlock() + } - // Two ways to send END_STREAM: either with trailers, or - // with an empty DATA frame. - if len(trls) > 0 { - err = cc.writeHeaders(cs.ID, true, trls) - } else { - err = cc.fr.WriteData(cs.ID, true, nil) + // Avoid forgetting to send an END_STREAM if the encoded + // trailers are 0 bytes. Both results produce and END_STREAM. + if len(trls) > 0 { + err = cc.writeHeaders(cs.ID, true, trls) + } else { + err = cc.fr.WriteData(cs.ID, true, nil) + } } if ferr := cc.bw.Flush(); ferr != nil && err == nil { err = ferr } + cc.wmu.Unlock() + return err } @@ -1030,26 +995,6 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail if host == "" { host = req.URL.Host } - host, err := httplex.PunycodeHostPort(host) - if err != nil { - return nil, err - } - - var path string - if req.Method != "CONNECT" { - path = req.URL.RequestURI() - if !validPseudoPath(path) { - orig := path - path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) - if !validPseudoPath(path) { - if req.URL.Opaque != "" { - return nil, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) - } else { - return nil, fmt.Errorf("invalid request :path %q", orig) - } - } - } - } // Check for any invalid headers and return an error before we // potentially pollute our hpack state. (We want to be able to @@ -1073,8 +1018,8 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail cc.writeHeader(":authority", host) cc.writeHeader(":method", req.Method) if req.Method != "CONNECT" { - cc.writeHeader(":path", path) - cc.writeHeader(":scheme", req.URL.Scheme) + cc.writeHeader(":path", req.URL.RequestURI()) + cc.writeHeader(":scheme", "https") } if trailers != "" { cc.writeHeader("trailer", trailers) @@ -1201,9 +1146,6 @@ func (cc *ClientConn) streamByID(id uint32, andRemove bool) *clientStream { if andRemove && cs != nil && !cc.closed { cc.lastActive = time.Now() delete(cc.streams, id) - if len(cc.streams) == 0 && cc.idleTimer != nil { - cc.idleTimer.Reset(cc.idleTimeout) - } close(cs.done) cc.cond.Broadcast() // wake up checkResetOrDone via clientStream.awaitFlowControl } @@ -1246,37 +1188,27 @@ func (e GoAwayError) Error() string { e.LastStreamID, e.ErrCode, e.DebugData) } -func isEOFOrNetReadError(err error) bool { - if err == io.EOF { - return true - } - ne, ok := err.(*net.OpError) - return ok && ne.Op == "read" -} - func (rl *clientConnReadLoop) cleanup() { cc := rl.cc defer cc.tconn.Close() defer cc.t.connPool().MarkDead(cc) defer close(cc.readerDone) - if cc.idleTimer != nil { - cc.idleTimer.Stop() - } - // Close any response bodies if the server closes prematurely. // TODO: also do this if we've written the headers but not // gotten a response yet. err := cc.readerErr cc.mu.Lock() - if cc.goAway != nil && isEOFOrNetReadError(err) { - err = GoAwayError{ - LastStreamID: cc.goAway.LastStreamID, - ErrCode: cc.goAway.ErrCode, - DebugData: cc.goAwayDebug, + if err == io.EOF { + if cc.goAway != nil { + err = GoAwayError{ + LastStreamID: cc.goAway.LastStreamID, + ErrCode: cc.goAway.ErrCode, + DebugData: cc.goAwayDebug, + } + } else { + err = io.ErrUnexpectedEOF } - } else if err == io.EOF { - err = io.ErrUnexpectedEOF } for _, cs := range rl.activeRes { cs.bufPipe.CloseWithError(err) @@ -1296,20 +1228,15 @@ func (rl *clientConnReadLoop) cleanup() { func (rl *clientConnReadLoop) run() error { cc := rl.cc rl.closeWhenIdle = cc.t.disableKeepAlives() || cc.singleUse - gotReply := false // ever saw a HEADERS reply - gotSettings := false + gotReply := false // ever saw a reply for { f, err := cc.fr.ReadFrame() if err != nil { - cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err) + cc.vlogf("Transport readFrame error: (%T) %v", err, err) } if se, ok := err.(StreamError); ok { if cs := cc.streamByID(se.StreamID, true /*ended; remove it*/); cs != nil { - cs.cc.writeStreamReset(cs.ID, se.Code, err) - if se.Cause == nil { - se.Cause = cc.fr.errDetail - } - rl.endStreamError(cs, se) + rl.endStreamError(cs, cc.fr.errDetail) } continue } else if err != nil { @@ -1318,13 +1245,6 @@ func (rl *clientConnReadLoop) run() error { if VerboseLogs { cc.vlogf("http2: Transport received %s", summarizeFrame(f)) } - if !gotSettings { - if _, ok := f.(*SettingsFrame); !ok { - cc.logf("protocol error: received %T before a SETTINGS frame", f) - return ConnectionError(ErrCodeProtocol) - } - gotSettings = true - } maybeIdle := false // whether frame might transition us to idle switch f := f.(type) { @@ -1353,9 +1273,6 @@ func (rl *clientConnReadLoop) run() error { cc.logf("Transport: unhandled response frame type %T", f) } if err != nil { - if VerboseLogs { - cc.vlogf("http2: Transport conn %p received error from processing frame %v: %v", cc, summarizeFrame(f), err) - } return err } if rl.closeWhenIdle && gotReply && maybeIdle && len(rl.activeRes) == 0 { @@ -1605,27 +1522,10 @@ var errClosedResponseBody = errors.New("http2: response body closed") func (b transportResponseBody) Close() error { cs := b.cs - cc := cs.cc - - serverSentStreamEnd := cs.bufPipe.Err() == io.EOF - unread := cs.bufPipe.Len() - - if unread > 0 || !serverSentStreamEnd { - cc.mu.Lock() - cc.wmu.Lock() - if !serverSentStreamEnd { - cc.fr.WriteRSTStream(cs.ID, ErrCodeCancel) - } - // Return connection-level flow control. - if unread > 0 { - cc.inflow.add(int32(unread)) - cc.fr.WriteWindowUpdate(0, uint32(unread)) - } - cc.bw.Flush() - cc.wmu.Unlock() - cc.mu.Unlock() + if cs.bufPipe.Err() != io.EOF { + // TODO: write test for this + cs.cc.writeStreamReset(cs.ID, ErrCodeCancel, nil) } - cs.bufPipe.BreakWithError(errClosedResponseBody) return nil } @@ -1633,7 +1533,6 @@ func (b transportResponseBody) Close() error { func (rl *clientConnReadLoop) processData(f *DataFrame) error { cc := rl.cc cs := cc.streamByID(f.StreamID, f.StreamEnded()) - data := f.Data() if cs == nil { cc.mu.Lock() neverSent := cc.nextStreamID @@ -1647,22 +1546,10 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { // TODO: be stricter here? only silently ignore things which // we canceled, but not things which were closed normally // by the peer? Tough without accumulating too much state. - - // But at least return their flow control: - if f.Length > 0 { - cc.mu.Lock() - cc.inflow.add(int32(f.Length)) - cc.mu.Unlock() - - cc.wmu.Lock() - cc.fr.WriteWindowUpdate(0, uint32(f.Length)) - cc.bw.Flush() - cc.wmu.Unlock() - } return nil } - if f.Length > 0 { - if len(data) > 0 && cs.bufPipe.b == nil { + if data := f.Data(); len(data) > 0 { + if cs.bufPipe.b == nil { // Data frame after it's already closed? cc.logf("http2: Transport received DATA frame for closed stream; closing connection") return ConnectionError(ErrCodeProtocol) @@ -1670,30 +1557,17 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { // Check connection-level flow control. cc.mu.Lock() - if cs.inflow.available() >= int32(f.Length) { - cs.inflow.take(int32(f.Length)) + if cs.inflow.available() >= int32(len(data)) { + cs.inflow.take(int32(len(data))) } else { cc.mu.Unlock() return ConnectionError(ErrCodeFlowControl) } - // Return any padded flow control now, since we won't - // refund it later on body reads. - if pad := int32(f.Length) - int32(len(data)); pad > 0 { - cs.inflow.add(pad) - cc.inflow.add(pad) - cc.wmu.Lock() - cc.fr.WriteWindowUpdate(0, uint32(pad)) - cc.fr.WriteWindowUpdate(cs.ID, uint32(pad)) - cc.bw.Flush() - cc.wmu.Unlock() - } cc.mu.Unlock() - if len(data) > 0 { - if _, err := cs.bufPipe.Write(data); err != nil { - rl.endStreamError(cs, err) - return err - } + if _, err := cs.bufPipe.Write(data); err != nil { + rl.endStreamError(cs, err) + return err } } @@ -1719,14 +1593,9 @@ func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) { } cs.bufPipe.closeWithErrorAndCode(err, code) delete(rl.activeRes, cs.ID) - if isConnectionCloseRequest(cs.req) { + if cs.req.Close || cs.req.Header.Get("Connection") == "close" { rl.closeWhenIdle = true } - - select { - case cs.resc <- resAndError{err: err}: - default: - } } func (cs *clientStream) copyTrailers() { @@ -1754,39 +1623,18 @@ func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { cc := rl.cc cc.mu.Lock() defer cc.mu.Unlock() - - if f.IsAck() { - if cc.wantSettingsAck { - cc.wantSettingsAck = false - return nil - } - return ConnectionError(ErrCodeProtocol) - } - - err := f.ForeachSetting(func(s Setting) error { + return f.ForeachSetting(func(s Setting) error { switch s.ID { case SettingMaxFrameSize: cc.maxFrameSize = s.Val case SettingMaxConcurrentStreams: cc.maxConcurrentStreams = s.Val case SettingInitialWindowSize: - // Values above the maximum flow-control - // window size of 2^31-1 MUST be treated as a - // connection error (Section 5.4.1) of type - // FLOW_CONTROL_ERROR. - if s.Val > math.MaxInt32 { - return ConnectionError(ErrCodeFlowControl) - } + // TODO: error if this is too large. - // Adjust flow control of currently-open + // TODO: adjust flow control of still-open // frames by the difference of the old initial // window size and this one. - delta := int32(s.Val) - int32(cc.initialWindowSize) - for _, cs := range cc.streams { - cs.flow.add(delta) - } - cc.cond.Broadcast() - cc.initialWindowSize = s.Val default: // TODO(bradfitz): handle more settings? SETTINGS_HEADER_TABLE_SIZE probably. @@ -1794,16 +1642,6 @@ func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { } return nil }) - if err != nil { - return err - } - - cc.wmu.Lock() - defer cc.wmu.Unlock() - - cc.fr.WriteSettingsAck() - cc.bw.Flush() - return cc.werr } func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { @@ -1840,7 +1678,7 @@ func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error { // which closes this, so there // isn't a race. default: - err := streamError(cs.ID, f.ErrCode) + err := StreamError{cs.ID, f.ErrCode} cs.resetErr = err close(cs.peerReset) cs.bufPipe.CloseWithError(err) @@ -1850,56 +1688,10 @@ func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error { return nil } -// Ping sends a PING frame to the server and waits for the ack. -// Public implementation is in go17.go and not_go17.go -func (cc *ClientConn) ping(ctx contextContext) error { - c := make(chan struct{}) - // Generate a random payload - var p [8]byte - for { - if _, err := rand.Read(p[:]); err != nil { - return err - } - cc.mu.Lock() - // check for dup before insert - if _, found := cc.pings[p]; !found { - cc.pings[p] = c - cc.mu.Unlock() - break - } - cc.mu.Unlock() - } - cc.wmu.Lock() - if err := cc.fr.WritePing(false, p); err != nil { - cc.wmu.Unlock() - return err - } - if err := cc.bw.Flush(); err != nil { - cc.wmu.Unlock() - return err - } - cc.wmu.Unlock() - select { - case <-c: - return nil - case <-ctx.Done(): - return ctx.Err() - case <-cc.readerDone: - // connection closed - return cc.readerErr - } -} - func (rl *clientConnReadLoop) processPing(f *PingFrame) error { if f.IsAck() { - cc := rl.cc - cc.mu.Lock() - defer cc.mu.Unlock() - // If ack, notify listener if any - if c, ok := cc.pings[f.Data]; ok { - close(c) - delete(cc.pings, f.Data) - } + // 6.7 PING: " An endpoint MUST NOT respond to PING frames + // containing this flag." return nil } cc := rl.cc @@ -1923,10 +1715,8 @@ func (rl *clientConnReadLoop) processPushPromise(f *PushPromiseFrame) error { } func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) { - // TODO: map err to more interesting error codes, once the - // HTTP community comes up with some. But currently for - // RST_STREAM there's no equivalent to GOAWAY frame's debug - // data, and the error codes are all pretty vague ("cancel"). + // TODO: do something with err? send it as a debug frame to the peer? + // But that's only in GOAWAY. Invent a new frame type? Is there one already? cc.wmu.Lock() cc.fr.WriteRSTStream(streamID, code) cc.bw.Flush() @@ -2076,9 +1866,3 @@ func (s bodyWriterState) scheduleBodyWrite() { s.timer.Reset(s.delay) } } - -// isConnectionCloseRequest reports whether req should use its own -// connection for a single request and then close the connection. -func isConnectionCloseRequest(req *http.Request) bool { - return req.Close || httplex.HeaderValuesContainsToken(req.Header["Connection"], "close") -} diff --git a/vendor/golang.org/x/net/idna/idna.go b/vendor/golang.org/x/net/idna/idna.go deleted file mode 100644 index 35ff39d8..00000000 --- a/vendor/golang.org/x/net/idna/idna.go +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package idna implements IDNA2008 (Internationalized Domain Names for -// Applications), defined in RFC 5890, RFC 5891, RFC 5892, RFC 5893 and -// RFC 5894. -package idna - -import ( - "strings" - "unicode/utf8" -) - -// TODO(nigeltao): specify when errors occur. For example, is ToASCII(".") or -// ToASCII("foo\x00") an error? See also http://www.unicode.org/faq/idn.html#11 - -// acePrefix is the ASCII Compatible Encoding prefix. -const acePrefix = "xn--" - -// ToASCII converts a domain or domain label to its ASCII form. For example, -// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and -// ToASCII("golang") is "golang". -func ToASCII(s string) (string, error) { - if ascii(s) { - return s, nil - } - labels := strings.Split(s, ".") - for i, label := range labels { - if !ascii(label) { - a, err := encode(acePrefix, label) - if err != nil { - return "", err - } - labels[i] = a - } - } - return strings.Join(labels, "."), nil -} - -// ToUnicode converts a domain or domain label to its Unicode form. For example, -// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and -// ToUnicode("golang") is "golang". -func ToUnicode(s string) (string, error) { - if !strings.Contains(s, acePrefix) { - return s, nil - } - labels := strings.Split(s, ".") - for i, label := range labels { - if strings.HasPrefix(label, acePrefix) { - u, err := decode(label[len(acePrefix):]) - if err != nil { - return "", err - } - labels[i] = u - } - } - return strings.Join(labels, "."), nil -} - -func ascii(s string) bool { - for i := 0; i < len(s); i++ { - if s[i] >= utf8.RuneSelf { - return false - } - } - return true -} diff --git a/vendor/golang.org/x/net/idna/punycode.go b/vendor/golang.org/x/net/idna/punycode.go deleted file mode 100644 index 92e733f6..00000000 --- a/vendor/golang.org/x/net/idna/punycode.go +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package idna - -// This file implements the Punycode algorithm from RFC 3492. - -import ( - "fmt" - "math" - "strings" - "unicode/utf8" -) - -// These parameter values are specified in section 5. -// -// All computation is done with int32s, so that overflow behavior is identical -// regardless of whether int is 32-bit or 64-bit. -const ( - base int32 = 36 - damp int32 = 700 - initialBias int32 = 72 - initialN int32 = 128 - skew int32 = 38 - tmax int32 = 26 - tmin int32 = 1 -) - -// decode decodes a string as specified in section 6.2. -func decode(encoded string) (string, error) { - if encoded == "" { - return "", nil - } - pos := 1 + strings.LastIndex(encoded, "-") - if pos == 1 { - return "", fmt.Errorf("idna: invalid label %q", encoded) - } - if pos == len(encoded) { - return encoded[:len(encoded)-1], nil - } - output := make([]rune, 0, len(encoded)) - if pos != 0 { - for _, r := range encoded[:pos-1] { - output = append(output, r) - } - } - i, n, bias := int32(0), initialN, initialBias - for pos < len(encoded) { - oldI, w := i, int32(1) - for k := base; ; k += base { - if pos == len(encoded) { - return "", fmt.Errorf("idna: invalid label %q", encoded) - } - digit, ok := decodeDigit(encoded[pos]) - if !ok { - return "", fmt.Errorf("idna: invalid label %q", encoded) - } - pos++ - i += digit * w - if i < 0 { - return "", fmt.Errorf("idna: invalid label %q", encoded) - } - t := k - bias - if t < tmin { - t = tmin - } else if t > tmax { - t = tmax - } - if digit < t { - break - } - w *= base - t - if w >= math.MaxInt32/base { - return "", fmt.Errorf("idna: invalid label %q", encoded) - } - } - x := int32(len(output) + 1) - bias = adapt(i-oldI, x, oldI == 0) - n += i / x - i %= x - if n > utf8.MaxRune || len(output) >= 1024 { - return "", fmt.Errorf("idna: invalid label %q", encoded) - } - output = append(output, 0) - copy(output[i+1:], output[i:]) - output[i] = n - i++ - } - return string(output), nil -} - -// encode encodes a string as specified in section 6.3 and prepends prefix to -// the result. -// -// The "while h < length(input)" line in the specification becomes "for -// remaining != 0" in the Go code, because len(s) in Go is in bytes, not runes. -func encode(prefix, s string) (string, error) { - output := make([]byte, len(prefix), len(prefix)+1+2*len(s)) - copy(output, prefix) - delta, n, bias := int32(0), initialN, initialBias - b, remaining := int32(0), int32(0) - for _, r := range s { - if r < 0x80 { - b++ - output = append(output, byte(r)) - } else { - remaining++ - } - } - h := b - if b > 0 { - output = append(output, '-') - } - for remaining != 0 { - m := int32(0x7fffffff) - for _, r := range s { - if m > r && r >= n { - m = r - } - } - delta += (m - n) * (h + 1) - if delta < 0 { - return "", fmt.Errorf("idna: invalid label %q", s) - } - n = m - for _, r := range s { - if r < n { - delta++ - if delta < 0 { - return "", fmt.Errorf("idna: invalid label %q", s) - } - continue - } - if r > n { - continue - } - q := delta - for k := base; ; k += base { - t := k - bias - if t < tmin { - t = tmin - } else if t > tmax { - t = tmax - } - if q < t { - break - } - output = append(output, encodeDigit(t+(q-t)%(base-t))) - q = (q - t) / (base - t) - } - output = append(output, encodeDigit(q)) - bias = adapt(delta, h+1, h == b) - delta = 0 - h++ - remaining-- - } - delta++ - n++ - } - return string(output), nil -} - -func decodeDigit(x byte) (digit int32, ok bool) { - switch { - case '0' <= x && x <= '9': - return int32(x - ('0' - 26)), true - case 'A' <= x && x <= 'Z': - return int32(x - 'A'), true - case 'a' <= x && x <= 'z': - return int32(x - 'a'), true - } - return 0, false -} - -func encodeDigit(digit int32) byte { - switch { - case 0 <= digit && digit < 26: - return byte(digit + 'a') - case 26 <= digit && digit < 36: - return byte(digit + ('0' - 26)) - } - panic("idna: internal error in punycode encoding") -} - -// adapt is the bias adaptation function specified in section 6.1. -func adapt(delta, numPoints int32, firstTime bool) int32 { - if firstTime { - delta /= damp - } else { - delta /= 2 - } - delta += delta / numPoints - k := int32(0) - for delta > ((base-tmin)*tmax)/2 { - delta /= base - tmin - k += base - } - return k + (base-tmin+1)*delta/(delta+skew) -} diff --git a/vendor/golang.org/x/net/internal/timeseries/timeseries.go b/vendor/golang.org/x/net/internal/timeseries/timeseries.go new file mode 100644 index 00000000..3f90b730 --- /dev/null +++ b/vendor/golang.org/x/net/internal/timeseries/timeseries.go @@ -0,0 +1,525 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package timeseries implements a time series structure for stats collection. +package timeseries + +import ( + "fmt" + "log" + "time" +) + +const ( + timeSeriesNumBuckets = 64 + minuteHourSeriesNumBuckets = 60 +) + +var timeSeriesResolutions = []time.Duration{ + 1 * time.Second, + 10 * time.Second, + 1 * time.Minute, + 10 * time.Minute, + 1 * time.Hour, + 6 * time.Hour, + 24 * time.Hour, // 1 day + 7 * 24 * time.Hour, // 1 week + 4 * 7 * 24 * time.Hour, // 4 weeks + 16 * 7 * 24 * time.Hour, // 16 weeks +} + +var minuteHourSeriesResolutions = []time.Duration{ + 1 * time.Second, + 1 * time.Minute, +} + +// An Observable is a kind of data that can be aggregated in a time series. +type Observable interface { + Multiply(ratio float64) // Multiplies the data in self by a given ratio + Add(other Observable) // Adds the data from a different observation to self + Clear() // Clears the observation so it can be reused. + CopyFrom(other Observable) // Copies the contents of a given observation to self +} + +// Float attaches the methods of Observable to a float64. +type Float float64 + +// NewFloat returns a Float. +func NewFloat() Observable { + f := Float(0) + return &f +} + +// String returns the float as a string. +func (f *Float) String() string { return fmt.Sprintf("%g", f.Value()) } + +// Value returns the float's value. +func (f *Float) Value() float64 { return float64(*f) } + +func (f *Float) Multiply(ratio float64) { *f *= Float(ratio) } + +func (f *Float) Add(other Observable) { + o := other.(*Float) + *f += *o +} + +func (f *Float) Clear() { *f = 0 } + +func (f *Float) CopyFrom(other Observable) { + o := other.(*Float) + *f = *o +} + +// A Clock tells the current time. +type Clock interface { + Time() time.Time +} + +type defaultClock int + +var defaultClockInstance defaultClock + +func (defaultClock) Time() time.Time { return time.Now() } + +// Information kept per level. Each level consists of a circular list of +// observations. The start of the level may be derived from end and the +// len(buckets) * sizeInMillis. +type tsLevel struct { + oldest int // index to oldest bucketed Observable + newest int // index to newest bucketed Observable + end time.Time // end timestamp for this level + size time.Duration // duration of the bucketed Observable + buckets []Observable // collections of observations + provider func() Observable // used for creating new Observable +} + +func (l *tsLevel) Clear() { + l.oldest = 0 + l.newest = len(l.buckets) - 1 + l.end = time.Time{} + for i := range l.buckets { + if l.buckets[i] != nil { + l.buckets[i].Clear() + l.buckets[i] = nil + } + } +} + +func (l *tsLevel) InitLevel(size time.Duration, numBuckets int, f func() Observable) { + l.size = size + l.provider = f + l.buckets = make([]Observable, numBuckets) +} + +// Keeps a sequence of levels. Each level is responsible for storing data at +// a given resolution. For example, the first level stores data at a one +// minute resolution while the second level stores data at a one hour +// resolution. + +// Each level is represented by a sequence of buckets. Each bucket spans an +// interval equal to the resolution of the level. New observations are added +// to the last bucket. +type timeSeries struct { + provider func() Observable // make more Observable + numBuckets int // number of buckets in each level + levels []*tsLevel // levels of bucketed Observable + lastAdd time.Time // time of last Observable tracked + total Observable // convenient aggregation of all Observable + clock Clock // Clock for getting current time + pending Observable // observations not yet bucketed + pendingTime time.Time // what time are we keeping in pending + dirty bool // if there are pending observations +} + +// init initializes a level according to the supplied criteria. +func (ts *timeSeries) init(resolutions []time.Duration, f func() Observable, numBuckets int, clock Clock) { + ts.provider = f + ts.numBuckets = numBuckets + ts.clock = clock + ts.levels = make([]*tsLevel, len(resolutions)) + + for i := range resolutions { + if i > 0 && resolutions[i-1] >= resolutions[i] { + log.Print("timeseries: resolutions must be monotonically increasing") + break + } + newLevel := new(tsLevel) + newLevel.InitLevel(resolutions[i], ts.numBuckets, ts.provider) + ts.levels[i] = newLevel + } + + ts.Clear() +} + +// Clear removes all observations from the time series. +func (ts *timeSeries) Clear() { + ts.lastAdd = time.Time{} + ts.total = ts.resetObservation(ts.total) + ts.pending = ts.resetObservation(ts.pending) + ts.pendingTime = time.Time{} + ts.dirty = false + + for i := range ts.levels { + ts.levels[i].Clear() + } +} + +// Add records an observation at the current time. +func (ts *timeSeries) Add(observation Observable) { + ts.AddWithTime(observation, ts.clock.Time()) +} + +// AddWithTime records an observation at the specified time. +func (ts *timeSeries) AddWithTime(observation Observable, t time.Time) { + + smallBucketDuration := ts.levels[0].size + + if t.After(ts.lastAdd) { + ts.lastAdd = t + } + + if t.After(ts.pendingTime) { + ts.advance(t) + ts.mergePendingUpdates() + ts.pendingTime = ts.levels[0].end + ts.pending.CopyFrom(observation) + ts.dirty = true + } else if t.After(ts.pendingTime.Add(-1 * smallBucketDuration)) { + // The observation is close enough to go into the pending bucket. + // This compensates for clock skewing and small scheduling delays + // by letting the update stay in the fast path. + ts.pending.Add(observation) + ts.dirty = true + } else { + ts.mergeValue(observation, t) + } +} + +// mergeValue inserts the observation at the specified time in the past into all levels. +func (ts *timeSeries) mergeValue(observation Observable, t time.Time) { + for _, level := range ts.levels { + index := (ts.numBuckets - 1) - int(level.end.Sub(t)/level.size) + if 0 <= index && index < ts.numBuckets { + bucketNumber := (level.oldest + index) % ts.numBuckets + if level.buckets[bucketNumber] == nil { + level.buckets[bucketNumber] = level.provider() + } + level.buckets[bucketNumber].Add(observation) + } + } + ts.total.Add(observation) +} + +// mergePendingUpdates applies the pending updates into all levels. +func (ts *timeSeries) mergePendingUpdates() { + if ts.dirty { + ts.mergeValue(ts.pending, ts.pendingTime) + ts.pending = ts.resetObservation(ts.pending) + ts.dirty = false + } +} + +// advance cycles the buckets at each level until the latest bucket in +// each level can hold the time specified. +func (ts *timeSeries) advance(t time.Time) { + if !t.After(ts.levels[0].end) { + return + } + for i := 0; i < len(ts.levels); i++ { + level := ts.levels[i] + if !level.end.Before(t) { + break + } + + // If the time is sufficiently far, just clear the level and advance + // directly. + if !t.Before(level.end.Add(level.size * time.Duration(ts.numBuckets))) { + for _, b := range level.buckets { + ts.resetObservation(b) + } + level.end = time.Unix(0, (t.UnixNano()/level.size.Nanoseconds())*level.size.Nanoseconds()) + } + + for t.After(level.end) { + level.end = level.end.Add(level.size) + level.newest = level.oldest + level.oldest = (level.oldest + 1) % ts.numBuckets + ts.resetObservation(level.buckets[level.newest]) + } + + t = level.end + } +} + +// Latest returns the sum of the num latest buckets from the level. +func (ts *timeSeries) Latest(level, num int) Observable { + now := ts.clock.Time() + if ts.levels[0].end.Before(now) { + ts.advance(now) + } + + ts.mergePendingUpdates() + + result := ts.provider() + l := ts.levels[level] + index := l.newest + + for i := 0; i < num; i++ { + if l.buckets[index] != nil { + result.Add(l.buckets[index]) + } + if index == 0 { + index = ts.numBuckets + } + index-- + } + + return result +} + +// LatestBuckets returns a copy of the num latest buckets from level. +func (ts *timeSeries) LatestBuckets(level, num int) []Observable { + if level < 0 || level > len(ts.levels) { + log.Print("timeseries: bad level argument: ", level) + return nil + } + if num < 0 || num >= ts.numBuckets { + log.Print("timeseries: bad num argument: ", num) + return nil + } + + results := make([]Observable, num) + now := ts.clock.Time() + if ts.levels[0].end.Before(now) { + ts.advance(now) + } + + ts.mergePendingUpdates() + + l := ts.levels[level] + index := l.newest + + for i := 0; i < num; i++ { + result := ts.provider() + results[i] = result + if l.buckets[index] != nil { + result.CopyFrom(l.buckets[index]) + } + + if index == 0 { + index = ts.numBuckets + } + index -= 1 + } + return results +} + +// ScaleBy updates observations by scaling by factor. +func (ts *timeSeries) ScaleBy(factor float64) { + for _, l := range ts.levels { + for i := 0; i < ts.numBuckets; i++ { + l.buckets[i].Multiply(factor) + } + } + + ts.total.Multiply(factor) + ts.pending.Multiply(factor) +} + +// Range returns the sum of observations added over the specified time range. +// If start or finish times don't fall on bucket boundaries of the same +// level, then return values are approximate answers. +func (ts *timeSeries) Range(start, finish time.Time) Observable { + return ts.ComputeRange(start, finish, 1)[0] +} + +// Recent returns the sum of observations from the last delta. +func (ts *timeSeries) Recent(delta time.Duration) Observable { + now := ts.clock.Time() + return ts.Range(now.Add(-delta), now) +} + +// Total returns the total of all observations. +func (ts *timeSeries) Total() Observable { + ts.mergePendingUpdates() + return ts.total +} + +// ComputeRange computes a specified number of values into a slice using +// the observations recorded over the specified time period. The return +// values are approximate if the start or finish times don't fall on the +// bucket boundaries at the same level or if the number of buckets spanning +// the range is not an integral multiple of num. +func (ts *timeSeries) ComputeRange(start, finish time.Time, num int) []Observable { + if start.After(finish) { + log.Printf("timeseries: start > finish, %v>%v", start, finish) + return nil + } + + if num < 0 { + log.Printf("timeseries: num < 0, %v", num) + return nil + } + + results := make([]Observable, num) + + for _, l := range ts.levels { + if !start.Before(l.end.Add(-l.size * time.Duration(ts.numBuckets))) { + ts.extract(l, start, finish, num, results) + return results + } + } + + // Failed to find a level that covers the desired range. So just + // extract from the last level, even if it doesn't cover the entire + // desired range. + ts.extract(ts.levels[len(ts.levels)-1], start, finish, num, results) + + return results +} + +// RecentList returns the specified number of values in slice over the most +// recent time period of the specified range. +func (ts *timeSeries) RecentList(delta time.Duration, num int) []Observable { + if delta < 0 { + return nil + } + now := ts.clock.Time() + return ts.ComputeRange(now.Add(-delta), now, num) +} + +// extract returns a slice of specified number of observations from a given +// level over a given range. +func (ts *timeSeries) extract(l *tsLevel, start, finish time.Time, num int, results []Observable) { + ts.mergePendingUpdates() + + srcInterval := l.size + dstInterval := finish.Sub(start) / time.Duration(num) + dstStart := start + srcStart := l.end.Add(-srcInterval * time.Duration(ts.numBuckets)) + + srcIndex := 0 + + // Where should scanning start? + if dstStart.After(srcStart) { + advance := dstStart.Sub(srcStart) / srcInterval + srcIndex += int(advance) + srcStart = srcStart.Add(advance * srcInterval) + } + + // The i'th value is computed as show below. + // interval = (finish/start)/num + // i'th value = sum of observation in range + // [ start + i * interval, + // start + (i + 1) * interval ) + for i := 0; i < num; i++ { + results[i] = ts.resetObservation(results[i]) + dstEnd := dstStart.Add(dstInterval) + for srcIndex < ts.numBuckets && srcStart.Before(dstEnd) { + srcEnd := srcStart.Add(srcInterval) + if srcEnd.After(ts.lastAdd) { + srcEnd = ts.lastAdd + } + + if !srcEnd.Before(dstStart) { + srcValue := l.buckets[(srcIndex+l.oldest)%ts.numBuckets] + if !srcStart.Before(dstStart) && !srcEnd.After(dstEnd) { + // dst completely contains src. + if srcValue != nil { + results[i].Add(srcValue) + } + } else { + // dst partially overlaps src. + overlapStart := maxTime(srcStart, dstStart) + overlapEnd := minTime(srcEnd, dstEnd) + base := srcEnd.Sub(srcStart) + fraction := overlapEnd.Sub(overlapStart).Seconds() / base.Seconds() + + used := ts.provider() + if srcValue != nil { + used.CopyFrom(srcValue) + } + used.Multiply(fraction) + results[i].Add(used) + } + + if srcEnd.After(dstEnd) { + break + } + } + srcIndex++ + srcStart = srcStart.Add(srcInterval) + } + dstStart = dstStart.Add(dstInterval) + } +} + +// resetObservation clears the content so the struct may be reused. +func (ts *timeSeries) resetObservation(observation Observable) Observable { + if observation == nil { + observation = ts.provider() + } else { + observation.Clear() + } + return observation +} + +// TimeSeries tracks data at granularities from 1 second to 16 weeks. +type TimeSeries struct { + timeSeries +} + +// NewTimeSeries creates a new TimeSeries using the function provided for creating new Observable. +func NewTimeSeries(f func() Observable) *TimeSeries { + return NewTimeSeriesWithClock(f, defaultClockInstance) +} + +// NewTimeSeriesWithClock creates a new TimeSeries using the function provided for creating new Observable and the clock for +// assigning timestamps. +func NewTimeSeriesWithClock(f func() Observable, clock Clock) *TimeSeries { + ts := new(TimeSeries) + ts.timeSeries.init(timeSeriesResolutions, f, timeSeriesNumBuckets, clock) + return ts +} + +// MinuteHourSeries tracks data at granularities of 1 minute and 1 hour. +type MinuteHourSeries struct { + timeSeries +} + +// NewMinuteHourSeries creates a new MinuteHourSeries using the function provided for creating new Observable. +func NewMinuteHourSeries(f func() Observable) *MinuteHourSeries { + return NewMinuteHourSeriesWithClock(f, defaultClockInstance) +} + +// NewMinuteHourSeriesWithClock creates a new MinuteHourSeries using the function provided for creating new Observable and the clock for +// assigning timestamps. +func NewMinuteHourSeriesWithClock(f func() Observable, clock Clock) *MinuteHourSeries { + ts := new(MinuteHourSeries) + ts.timeSeries.init(minuteHourSeriesResolutions, f, + minuteHourSeriesNumBuckets, clock) + return ts +} + +func (ts *MinuteHourSeries) Minute() Observable { + return ts.timeSeries.Latest(0, 60) +} + +func (ts *MinuteHourSeries) Hour() Observable { + return ts.timeSeries.Latest(1, 60) +} + +func minTime(a, b time.Time) time.Time { + if a.Before(b) { + return a + } + return b +} + +func maxTime(a, b time.Time) time.Time { + if a.After(b) { + return a + } + return b +} diff --git a/vendor/golang.org/x/net/lex/httplex/httplex.go b/vendor/golang.org/x/net/lex/httplex/httplex.go index 20f2b894..bd0ec24f 100644 --- a/vendor/golang.org/x/net/lex/httplex/httplex.go +++ b/vendor/golang.org/x/net/lex/httplex/httplex.go @@ -10,11 +10,8 @@ package httplex import ( - "net" "strings" "unicode/utf8" - - "golang.org/x/net/idna" ) var isTokenTable = [127]bool{ @@ -313,39 +310,3 @@ func ValidHeaderFieldValue(v string) bool { } return true } - -func isASCII(s string) bool { - for i := 0; i < len(s); i++ { - if s[i] >= utf8.RuneSelf { - return false - } - } - return true -} - -// PunycodeHostPort returns the IDNA Punycode version -// of the provided "host" or "host:port" string. -func PunycodeHostPort(v string) (string, error) { - if isASCII(v) { - return v, nil - } - - host, port, err := net.SplitHostPort(v) - if err != nil { - // The input 'v' argument was just a "host" argument, - // without a port. This error should not be returned - // to the caller. - host = v - port = "" - } - host, err = idna.ToASCII(host) - if err != nil { - // Non-UTF-8? Not representable in Punycode, in any - // case. - return "", err - } - if port == "" { - return host, nil - } - return net.JoinHostPort(host, port), nil -} diff --git a/vendor/golang.org/x/net/trace/events.go b/vendor/golang.org/x/net/trace/events.go new file mode 100644 index 00000000..e66c7e32 --- /dev/null +++ b/vendor/golang.org/x/net/trace/events.go @@ -0,0 +1,524 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +import ( + "bytes" + "fmt" + "html/template" + "io" + "log" + "net/http" + "runtime" + "sort" + "strconv" + "strings" + "sync" + "sync/atomic" + "text/tabwriter" + "time" +) + +var eventsTmpl = template.Must(template.New("events").Funcs(template.FuncMap{ + "elapsed": elapsed, + "trimSpace": strings.TrimSpace, +}).Parse(eventsHTML)) + +const maxEventsPerLog = 100 + +type bucket struct { + MaxErrAge time.Duration + String string +} + +var buckets = []bucket{ + {0, "total"}, + {10 * time.Second, "errs<10s"}, + {1 * time.Minute, "errs<1m"}, + {10 * time.Minute, "errs<10m"}, + {1 * time.Hour, "errs<1h"}, + {10 * time.Hour, "errs<10h"}, + {24000 * time.Hour, "errors"}, +} + +// RenderEvents renders the HTML page typically served at /debug/events. +// It does not do any auth checking; see AuthRequest for the default auth check +// used by the handler registered on http.DefaultServeMux. +// req may be nil. +func RenderEvents(w http.ResponseWriter, req *http.Request, sensitive bool) { + now := time.Now() + data := &struct { + Families []string // family names + Buckets []bucket + Counts [][]int // eventLog count per family/bucket + + // Set when a bucket has been selected. + Family string + Bucket int + EventLogs eventLogs + Expanded bool + }{ + Buckets: buckets, + } + + data.Families = make([]string, 0, len(families)) + famMu.RLock() + for name := range families { + data.Families = append(data.Families, name) + } + famMu.RUnlock() + sort.Strings(data.Families) + + // Count the number of eventLogs in each family for each error age. + data.Counts = make([][]int, len(data.Families)) + for i, name := range data.Families { + // TODO(sameer): move this loop under the family lock. + f := getEventFamily(name) + data.Counts[i] = make([]int, len(data.Buckets)) + for j, b := range data.Buckets { + data.Counts[i][j] = f.Count(now, b.MaxErrAge) + } + } + + if req != nil { + var ok bool + data.Family, data.Bucket, ok = parseEventsArgs(req) + if !ok { + // No-op + } else { + data.EventLogs = getEventFamily(data.Family).Copy(now, buckets[data.Bucket].MaxErrAge) + } + if data.EventLogs != nil { + defer data.EventLogs.Free() + sort.Sort(data.EventLogs) + } + if exp, err := strconv.ParseBool(req.FormValue("exp")); err == nil { + data.Expanded = exp + } + } + + famMu.RLock() + defer famMu.RUnlock() + if err := eventsTmpl.Execute(w, data); err != nil { + log.Printf("net/trace: Failed executing template: %v", err) + } +} + +func parseEventsArgs(req *http.Request) (fam string, b int, ok bool) { + fam, bStr := req.FormValue("fam"), req.FormValue("b") + if fam == "" || bStr == "" { + return "", 0, false + } + b, err := strconv.Atoi(bStr) + if err != nil || b < 0 || b >= len(buckets) { + return "", 0, false + } + return fam, b, true +} + +// An EventLog provides a log of events associated with a specific object. +type EventLog interface { + // Printf formats its arguments with fmt.Sprintf and adds the + // result to the event log. + Printf(format string, a ...interface{}) + + // Errorf is like Printf, but it marks this event as an error. + Errorf(format string, a ...interface{}) + + // Finish declares that this event log is complete. + // The event log should not be used after calling this method. + Finish() +} + +// NewEventLog returns a new EventLog with the specified family name +// and title. +func NewEventLog(family, title string) EventLog { + el := newEventLog() + el.ref() + el.Family, el.Title = family, title + el.Start = time.Now() + el.events = make([]logEntry, 0, maxEventsPerLog) + el.stack = make([]uintptr, 32) + n := runtime.Callers(2, el.stack) + el.stack = el.stack[:n] + + getEventFamily(family).add(el) + return el +} + +func (el *eventLog) Finish() { + getEventFamily(el.Family).remove(el) + el.unref() // matches ref in New +} + +var ( + famMu sync.RWMutex + families = make(map[string]*eventFamily) // family name => family +) + +func getEventFamily(fam string) *eventFamily { + famMu.Lock() + defer famMu.Unlock() + f := families[fam] + if f == nil { + f = &eventFamily{} + families[fam] = f + } + return f +} + +type eventFamily struct { + mu sync.RWMutex + eventLogs eventLogs +} + +func (f *eventFamily) add(el *eventLog) { + f.mu.Lock() + f.eventLogs = append(f.eventLogs, el) + f.mu.Unlock() +} + +func (f *eventFamily) remove(el *eventLog) { + f.mu.Lock() + defer f.mu.Unlock() + for i, el0 := range f.eventLogs { + if el == el0 { + copy(f.eventLogs[i:], f.eventLogs[i+1:]) + f.eventLogs = f.eventLogs[:len(f.eventLogs)-1] + return + } + } +} + +func (f *eventFamily) Count(now time.Time, maxErrAge time.Duration) (n int) { + f.mu.RLock() + defer f.mu.RUnlock() + for _, el := range f.eventLogs { + if el.hasRecentError(now, maxErrAge) { + n++ + } + } + return +} + +func (f *eventFamily) Copy(now time.Time, maxErrAge time.Duration) (els eventLogs) { + f.mu.RLock() + defer f.mu.RUnlock() + els = make(eventLogs, 0, len(f.eventLogs)) + for _, el := range f.eventLogs { + if el.hasRecentError(now, maxErrAge) { + el.ref() + els = append(els, el) + } + } + return +} + +type eventLogs []*eventLog + +// Free calls unref on each element of the list. +func (els eventLogs) Free() { + for _, el := range els { + el.unref() + } +} + +// eventLogs may be sorted in reverse chronological order. +func (els eventLogs) Len() int { return len(els) } +func (els eventLogs) Less(i, j int) bool { return els[i].Start.After(els[j].Start) } +func (els eventLogs) Swap(i, j int) { els[i], els[j] = els[j], els[i] } + +// A logEntry is a timestamped log entry in an event log. +type logEntry struct { + When time.Time + Elapsed time.Duration // since previous event in log + NewDay bool // whether this event is on a different day to the previous event + What string + IsErr bool +} + +// WhenString returns a string representation of the elapsed time of the event. +// It will include the date if midnight was crossed. +func (e logEntry) WhenString() string { + if e.NewDay { + return e.When.Format("2006/01/02 15:04:05.000000") + } + return e.When.Format("15:04:05.000000") +} + +// An eventLog represents an active event log. +type eventLog struct { + // Family is the top-level grouping of event logs to which this belongs. + Family string + + // Title is the title of this event log. + Title string + + // Timing information. + Start time.Time + + // Call stack where this event log was created. + stack []uintptr + + // Append-only sequence of events. + // + // TODO(sameer): change this to a ring buffer to avoid the array copy + // when we hit maxEventsPerLog. + mu sync.RWMutex + events []logEntry + LastErrorTime time.Time + discarded int + + refs int32 // how many buckets this is in +} + +func (el *eventLog) reset() { + // Clear all but the mutex. Mutexes may not be copied, even when unlocked. + el.Family = "" + el.Title = "" + el.Start = time.Time{} + el.stack = nil + el.events = nil + el.LastErrorTime = time.Time{} + el.discarded = 0 + el.refs = 0 +} + +func (el *eventLog) hasRecentError(now time.Time, maxErrAge time.Duration) bool { + if maxErrAge == 0 { + return true + } + el.mu.RLock() + defer el.mu.RUnlock() + return now.Sub(el.LastErrorTime) < maxErrAge +} + +// delta returns the elapsed time since the last event or the log start, +// and whether it spans midnight. +// L >= el.mu +func (el *eventLog) delta(t time.Time) (time.Duration, bool) { + if len(el.events) == 0 { + return t.Sub(el.Start), false + } + prev := el.events[len(el.events)-1].When + return t.Sub(prev), prev.Day() != t.Day() + +} + +func (el *eventLog) Printf(format string, a ...interface{}) { + el.printf(false, format, a...) +} + +func (el *eventLog) Errorf(format string, a ...interface{}) { + el.printf(true, format, a...) +} + +func (el *eventLog) printf(isErr bool, format string, a ...interface{}) { + e := logEntry{When: time.Now(), IsErr: isErr, What: fmt.Sprintf(format, a...)} + el.mu.Lock() + e.Elapsed, e.NewDay = el.delta(e.When) + if len(el.events) < maxEventsPerLog { + el.events = append(el.events, e) + } else { + // Discard the oldest event. + if el.discarded == 0 { + // el.discarded starts at two to count for the event it + // is replacing, plus the next one that we are about to + // drop. + el.discarded = 2 + } else { + el.discarded++ + } + // TODO(sameer): if this causes allocations on a critical path, + // change eventLog.What to be a fmt.Stringer, as in trace.go. + el.events[0].What = fmt.Sprintf("(%d events discarded)", el.discarded) + // The timestamp of the discarded meta-event should be + // the time of the last event it is representing. + el.events[0].When = el.events[1].When + copy(el.events[1:], el.events[2:]) + el.events[maxEventsPerLog-1] = e + } + if e.IsErr { + el.LastErrorTime = e.When + } + el.mu.Unlock() +} + +func (el *eventLog) ref() { + atomic.AddInt32(&el.refs, 1) +} + +func (el *eventLog) unref() { + if atomic.AddInt32(&el.refs, -1) == 0 { + freeEventLog(el) + } +} + +func (el *eventLog) When() string { + return el.Start.Format("2006/01/02 15:04:05.000000") +} + +func (el *eventLog) ElapsedTime() string { + elapsed := time.Since(el.Start) + return fmt.Sprintf("%.6f", elapsed.Seconds()) +} + +func (el *eventLog) Stack() string { + buf := new(bytes.Buffer) + tw := tabwriter.NewWriter(buf, 1, 8, 1, '\t', 0) + printStackRecord(tw, el.stack) + tw.Flush() + return buf.String() +} + +// printStackRecord prints the function + source line information +// for a single stack trace. +// Adapted from runtime/pprof/pprof.go. +func printStackRecord(w io.Writer, stk []uintptr) { + for _, pc := range stk { + f := runtime.FuncForPC(pc) + if f == nil { + continue + } + file, line := f.FileLine(pc) + name := f.Name() + // Hide runtime.goexit and any runtime functions at the beginning. + if strings.HasPrefix(name, "runtime.") { + continue + } + fmt.Fprintf(w, "# %s\t%s:%d\n", name, file, line) + } +} + +func (el *eventLog) Events() []logEntry { + el.mu.RLock() + defer el.mu.RUnlock() + return el.events +} + +// freeEventLogs is a freelist of *eventLog +var freeEventLogs = make(chan *eventLog, 1000) + +// newEventLog returns a event log ready to use. +func newEventLog() *eventLog { + select { + case el := <-freeEventLogs: + return el + default: + return new(eventLog) + } +} + +// freeEventLog adds el to freeEventLogs if there's room. +// This is non-blocking. +func freeEventLog(el *eventLog) { + el.reset() + select { + case freeEventLogs <- el: + default: + } +} + +const eventsHTML = ` + + + events + + + + +

/debug/events

+ + + {{range $i, $fam := .Families}} + + + + {{range $j, $bucket := $.Buckets}} + {{$n := index $.Counts $i $j}} + + {{end}} + + {{end}} +
{{$fam}} + {{if $n}}{{end}} + [{{$n}} {{$bucket.String}}] + {{if $n}}{{end}} +
+ +{{if $.EventLogs}} +
+

Family: {{$.Family}}

+ +{{if $.Expanded}}{{end}} +[Summary]{{if $.Expanded}}{{end}} + +{{if not $.Expanded}}{{end}} +[Expanded]{{if not $.Expanded}}{{end}} + + + + {{range $el := $.EventLogs}} + + + + + {{if $.Expanded}} + + + + + + {{range $el.Events}} + + + + + + {{end}} + {{end}} + {{end}} +
WhenElapsed
{{$el.When}}{{$el.ElapsedTime}}{{$el.Title}} +
{{$el.Stack|trimSpace}}
{{.WhenString}}{{elapsed .Elapsed}}.{{if .IsErr}}E{{else}}.{{end}}. {{.What}}
+{{end}} + + +` diff --git a/vendor/golang.org/x/net/trace/histogram.go b/vendor/golang.org/x/net/trace/histogram.go new file mode 100644 index 00000000..bb42aa53 --- /dev/null +++ b/vendor/golang.org/x/net/trace/histogram.go @@ -0,0 +1,356 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package trace + +// This file implements histogramming for RPC statistics collection. + +import ( + "bytes" + "fmt" + "html/template" + "log" + "math" + + "golang.org/x/net/internal/timeseries" +) + +const ( + bucketCount = 38 +) + +// histogram keeps counts of values in buckets that are spaced +// out in powers of 2: 0-1, 2-3, 4-7... +// histogram implements timeseries.Observable +type histogram struct { + sum int64 // running total of measurements + sumOfSquares float64 // square of running total + buckets []int64 // bucketed values for histogram + value int // holds a single value as an optimization + valueCount int64 // number of values recorded for single value +} + +// AddMeasurement records a value measurement observation to the histogram. +func (h *histogram) addMeasurement(value int64) { + // TODO: assert invariant + h.sum += value + h.sumOfSquares += float64(value) * float64(value) + + bucketIndex := getBucket(value) + + if h.valueCount == 0 || (h.valueCount > 0 && h.value == bucketIndex) { + h.value = bucketIndex + h.valueCount++ + } else { + h.allocateBuckets() + h.buckets[bucketIndex]++ + } +} + +func (h *histogram) allocateBuckets() { + if h.buckets == nil { + h.buckets = make([]int64, bucketCount) + h.buckets[h.value] = h.valueCount + h.value = 0 + h.valueCount = -1 + } +} + +func log2(i int64) int { + n := 0 + for ; i >= 0x100; i >>= 8 { + n += 8 + } + for ; i > 0; i >>= 1 { + n += 1 + } + return n +} + +func getBucket(i int64) (index int) { + index = log2(i) - 1 + if index < 0 { + index = 0 + } + if index >= bucketCount { + index = bucketCount - 1 + } + return +} + +// Total returns the number of recorded observations. +func (h *histogram) total() (total int64) { + if h.valueCount >= 0 { + total = h.valueCount + } + for _, val := range h.buckets { + total += int64(val) + } + return +} + +// Average returns the average value of recorded observations. +func (h *histogram) average() float64 { + t := h.total() + if t == 0 { + return 0 + } + return float64(h.sum) / float64(t) +} + +// Variance returns the variance of recorded observations. +func (h *histogram) variance() float64 { + t := float64(h.total()) + if t == 0 { + return 0 + } + s := float64(h.sum) / t + return h.sumOfSquares/t - s*s +} + +// StandardDeviation returns the standard deviation of recorded observations. +func (h *histogram) standardDeviation() float64 { + return math.Sqrt(h.variance()) +} + +// PercentileBoundary estimates the value that the given fraction of recorded +// observations are less than. +func (h *histogram) percentileBoundary(percentile float64) int64 { + total := h.total() + + // Corner cases (make sure result is strictly less than Total()) + if total == 0 { + return 0 + } else if total == 1 { + return int64(h.average()) + } + + percentOfTotal := round(float64(total) * percentile) + var runningTotal int64 + + for i := range h.buckets { + value := h.buckets[i] + runningTotal += value + if runningTotal == percentOfTotal { + // We hit an exact bucket boundary. If the next bucket has data, it is a + // good estimate of the value. If the bucket is empty, we interpolate the + // midpoint between the next bucket's boundary and the next non-zero + // bucket. If the remaining buckets are all empty, then we use the + // boundary for the next bucket as the estimate. + j := uint8(i + 1) + min := bucketBoundary(j) + if runningTotal < total { + for h.buckets[j] == 0 { + j++ + } + } + max := bucketBoundary(j) + return min + round(float64(max-min)/2) + } else if runningTotal > percentOfTotal { + // The value is in this bucket. Interpolate the value. + delta := runningTotal - percentOfTotal + percentBucket := float64(value-delta) / float64(value) + bucketMin := bucketBoundary(uint8(i)) + nextBucketMin := bucketBoundary(uint8(i + 1)) + bucketSize := nextBucketMin - bucketMin + return bucketMin + round(percentBucket*float64(bucketSize)) + } + } + return bucketBoundary(bucketCount - 1) +} + +// Median returns the estimated median of the observed values. +func (h *histogram) median() int64 { + return h.percentileBoundary(0.5) +} + +// Add adds other to h. +func (h *histogram) Add(other timeseries.Observable) { + o := other.(*histogram) + if o.valueCount == 0 { + // Other histogram is empty + } else if h.valueCount >= 0 && o.valueCount > 0 && h.value == o.value { + // Both have a single bucketed value, aggregate them + h.valueCount += o.valueCount + } else { + // Two different values necessitate buckets in this histogram + h.allocateBuckets() + if o.valueCount >= 0 { + h.buckets[o.value] += o.valueCount + } else { + for i := range h.buckets { + h.buckets[i] += o.buckets[i] + } + } + } + h.sumOfSquares += o.sumOfSquares + h.sum += o.sum +} + +// Clear resets the histogram to an empty state, removing all observed values. +func (h *histogram) Clear() { + h.buckets = nil + h.value = 0 + h.valueCount = 0 + h.sum = 0 + h.sumOfSquares = 0 +} + +// CopyFrom copies from other, which must be a *histogram, into h. +func (h *histogram) CopyFrom(other timeseries.Observable) { + o := other.(*histogram) + if o.valueCount == -1 { + h.allocateBuckets() + copy(h.buckets, o.buckets) + } + h.sum = o.sum + h.sumOfSquares = o.sumOfSquares + h.value = o.value + h.valueCount = o.valueCount +} + +// Multiply scales the histogram by the specified ratio. +func (h *histogram) Multiply(ratio float64) { + if h.valueCount == -1 { + for i := range h.buckets { + h.buckets[i] = int64(float64(h.buckets[i]) * ratio) + } + } else { + h.valueCount = int64(float64(h.valueCount) * ratio) + } + h.sum = int64(float64(h.sum) * ratio) + h.sumOfSquares = h.sumOfSquares * ratio +} + +// New creates a new histogram. +func (h *histogram) New() timeseries.Observable { + r := new(histogram) + r.Clear() + return r +} + +func (h *histogram) String() string { + return fmt.Sprintf("%d, %f, %d, %d, %v", + h.sum, h.sumOfSquares, h.value, h.valueCount, h.buckets) +} + +// round returns the closest int64 to the argument +func round(in float64) int64 { + return int64(math.Floor(in + 0.5)) +} + +// bucketBoundary returns the first value in the bucket. +func bucketBoundary(bucket uint8) int64 { + if bucket == 0 { + return 0 + } + return 1 << bucket +} + +// bucketData holds data about a specific bucket for use in distTmpl. +type bucketData struct { + Lower, Upper int64 + N int64 + Pct, CumulativePct float64 + GraphWidth int +} + +// data holds data about a Distribution for use in distTmpl. +type data struct { + Buckets []*bucketData + Count, Median int64 + Mean, StandardDeviation float64 +} + +// maxHTMLBarWidth is the maximum width of the HTML bar for visualizing buckets. +const maxHTMLBarWidth = 350.0 + +// newData returns data representing h for use in distTmpl. +func (h *histogram) newData() *data { + // Force the allocation of buckets to simplify the rendering implementation + h.allocateBuckets() + // We scale the bars on the right so that the largest bar is + // maxHTMLBarWidth pixels in width. + maxBucket := int64(0) + for _, n := range h.buckets { + if n > maxBucket { + maxBucket = n + } + } + total := h.total() + barsizeMult := maxHTMLBarWidth / float64(maxBucket) + var pctMult float64 + if total == 0 { + pctMult = 1.0 + } else { + pctMult = 100.0 / float64(total) + } + + buckets := make([]*bucketData, len(h.buckets)) + runningTotal := int64(0) + for i, n := range h.buckets { + if n == 0 { + continue + } + runningTotal += n + var upperBound int64 + if i < bucketCount-1 { + upperBound = bucketBoundary(uint8(i + 1)) + } else { + upperBound = math.MaxInt64 + } + buckets[i] = &bucketData{ + Lower: bucketBoundary(uint8(i)), + Upper: upperBound, + N: n, + Pct: float64(n) * pctMult, + CumulativePct: float64(runningTotal) * pctMult, + GraphWidth: int(float64(n) * barsizeMult), + } + } + return &data{ + Buckets: buckets, + Count: total, + Median: h.median(), + Mean: h.average(), + StandardDeviation: h.standardDeviation(), + } +} + +func (h *histogram) html() template.HTML { + buf := new(bytes.Buffer) + if err := distTmpl.Execute(buf, h.newData()); err != nil { + buf.Reset() + log.Printf("net/trace: couldn't execute template: %v", err) + } + return template.HTML(buf.String()) +} + +// Input: data +var distTmpl = template.Must(template.New("distTmpl").Parse(` + + + + + + + +
Count: {{.Count}}Mean: {{printf "%.0f" .Mean}}StdDev: {{printf "%.0f" .StandardDeviation}}Median: {{.Median}}
+
+ +{{range $b := .Buckets}} +{{if $b}} + + + + + + + + + +{{end}} +{{end}} +
[{{.Lower}},{{.Upper}}){{.N}}{{printf "%#.3f" .Pct}}%{{printf "%#.3f" .CumulativePct}}%
+`)) diff --git a/vendor/golang.org/x/net/trace/trace.go b/vendor/golang.org/x/net/trace/trace.go new file mode 100644 index 00000000..877dfb32 --- /dev/null +++ b/vendor/golang.org/x/net/trace/trace.go @@ -0,0 +1,1063 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package trace implements tracing of requests and long-lived objects. +It exports HTTP interfaces on /debug/requests and /debug/events. + +A trace.Trace provides tracing for short-lived objects, usually requests. +A request handler might be implemented like this: + + func fooHandler(w http.ResponseWriter, req *http.Request) { + tr := trace.New("mypkg.Foo", req.URL.Path) + defer tr.Finish() + ... + tr.LazyPrintf("some event %q happened", str) + ... + if err := somethingImportant(); err != nil { + tr.LazyPrintf("somethingImportant failed: %v", err) + tr.SetError() + } + } + +The /debug/requests HTTP endpoint organizes the traces by family, +errors, and duration. It also provides histogram of request duration +for each family. + +A trace.EventLog provides tracing for long-lived objects, such as RPC +connections. + + // A Fetcher fetches URL paths for a single domain. + type Fetcher struct { + domain string + events trace.EventLog + } + + func NewFetcher(domain string) *Fetcher { + return &Fetcher{ + domain, + trace.NewEventLog("mypkg.Fetcher", domain), + } + } + + func (f *Fetcher) Fetch(path string) (string, error) { + resp, err := http.Get("http://" + f.domain + "/" + path) + if err != nil { + f.events.Errorf("Get(%q) = %v", path, err) + return "", err + } + f.events.Printf("Get(%q) = %s", path, resp.Status) + ... + } + + func (f *Fetcher) Close() error { + f.events.Finish() + return nil + } + +The /debug/events HTTP endpoint organizes the event logs by family and +by time since the last error. The expanded view displays recent log +entries and the log's call stack. +*/ +package trace + +import ( + "bytes" + "fmt" + "html/template" + "io" + "log" + "net" + "net/http" + "runtime" + "sort" + "strconv" + "sync" + "sync/atomic" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/internal/timeseries" +) + +// DebugUseAfterFinish controls whether to debug uses of Trace values after finishing. +// FOR DEBUGGING ONLY. This will slow down the program. +var DebugUseAfterFinish = false + +// AuthRequest determines whether a specific request is permitted to load the +// /debug/requests or /debug/events pages. +// +// It returns two bools; the first indicates whether the page may be viewed at all, +// and the second indicates whether sensitive events will be shown. +// +// AuthRequest may be replaced by a program to customise its authorisation requirements. +// +// The default AuthRequest function returns (true, true) if and only if the request +// comes from localhost/127.0.0.1/[::1]. +var AuthRequest = func(req *http.Request) (any, sensitive bool) { + // RemoteAddr is commonly in the form "IP" or "IP:port". + // If it is in the form "IP:port", split off the port. + host, _, err := net.SplitHostPort(req.RemoteAddr) + if err != nil { + host = req.RemoteAddr + } + switch host { + case "localhost", "127.0.0.1", "::1": + return true, true + default: + return false, false + } +} + +func init() { + http.HandleFunc("/debug/requests", func(w http.ResponseWriter, req *http.Request) { + any, sensitive := AuthRequest(req) + if !any { + http.Error(w, "not allowed", http.StatusUnauthorized) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + Render(w, req, sensitive) + }) + http.HandleFunc("/debug/events", func(w http.ResponseWriter, req *http.Request) { + any, sensitive := AuthRequest(req) + if !any { + http.Error(w, "not allowed", http.StatusUnauthorized) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + RenderEvents(w, req, sensitive) + }) +} + +// Render renders the HTML page typically served at /debug/requests. +// It does not do any auth checking; see AuthRequest for the default auth check +// used by the handler registered on http.DefaultServeMux. +// req may be nil. +func Render(w io.Writer, req *http.Request, sensitive bool) { + data := &struct { + Families []string + ActiveTraceCount map[string]int + CompletedTraces map[string]*family + + // Set when a bucket has been selected. + Traces traceList + Family string + Bucket int + Expanded bool + Traced bool + Active bool + ShowSensitive bool // whether to show sensitive events + + Histogram template.HTML + HistogramWindow string // e.g. "last minute", "last hour", "all time" + + // If non-zero, the set of traces is a partial set, + // and this is the total number. + Total int + }{ + CompletedTraces: completedTraces, + } + + data.ShowSensitive = sensitive + if req != nil { + // Allow show_sensitive=0 to force hiding of sensitive data for testing. + // This only goes one way; you can't use show_sensitive=1 to see things. + if req.FormValue("show_sensitive") == "0" { + data.ShowSensitive = false + } + + if exp, err := strconv.ParseBool(req.FormValue("exp")); err == nil { + data.Expanded = exp + } + if exp, err := strconv.ParseBool(req.FormValue("rtraced")); err == nil { + data.Traced = exp + } + } + + completedMu.RLock() + data.Families = make([]string, 0, len(completedTraces)) + for fam := range completedTraces { + data.Families = append(data.Families, fam) + } + completedMu.RUnlock() + sort.Strings(data.Families) + + // We are careful here to minimize the time spent locking activeMu, + // since that lock is required every time an RPC starts and finishes. + data.ActiveTraceCount = make(map[string]int, len(data.Families)) + activeMu.RLock() + for fam, s := range activeTraces { + data.ActiveTraceCount[fam] = s.Len() + } + activeMu.RUnlock() + + var ok bool + data.Family, data.Bucket, ok = parseArgs(req) + switch { + case !ok: + // No-op + case data.Bucket == -1: + data.Active = true + n := data.ActiveTraceCount[data.Family] + data.Traces = getActiveTraces(data.Family) + if len(data.Traces) < n { + data.Total = n + } + case data.Bucket < bucketsPerFamily: + if b := lookupBucket(data.Family, data.Bucket); b != nil { + data.Traces = b.Copy(data.Traced) + } + default: + if f := getFamily(data.Family, false); f != nil { + var obs timeseries.Observable + f.LatencyMu.RLock() + switch o := data.Bucket - bucketsPerFamily; o { + case 0: + obs = f.Latency.Minute() + data.HistogramWindow = "last minute" + case 1: + obs = f.Latency.Hour() + data.HistogramWindow = "last hour" + case 2: + obs = f.Latency.Total() + data.HistogramWindow = "all time" + } + f.LatencyMu.RUnlock() + if obs != nil { + data.Histogram = obs.(*histogram).html() + } + } + } + + if data.Traces != nil { + defer data.Traces.Free() + sort.Sort(data.Traces) + } + + completedMu.RLock() + defer completedMu.RUnlock() + if err := pageTmpl.ExecuteTemplate(w, "Page", data); err != nil { + log.Printf("net/trace: Failed executing template: %v", err) + } +} + +func parseArgs(req *http.Request) (fam string, b int, ok bool) { + if req == nil { + return "", 0, false + } + fam, bStr := req.FormValue("fam"), req.FormValue("b") + if fam == "" || bStr == "" { + return "", 0, false + } + b, err := strconv.Atoi(bStr) + if err != nil || b < -1 { + return "", 0, false + } + + return fam, b, true +} + +func lookupBucket(fam string, b int) *traceBucket { + f := getFamily(fam, false) + if f == nil || b < 0 || b >= len(f.Buckets) { + return nil + } + return f.Buckets[b] +} + +type contextKeyT string + +var contextKey = contextKeyT("golang.org/x/net/trace.Trace") + +// NewContext returns a copy of the parent context +// and associates it with a Trace. +func NewContext(ctx context.Context, tr Trace) context.Context { + return context.WithValue(ctx, contextKey, tr) +} + +// FromContext returns the Trace bound to the context, if any. +func FromContext(ctx context.Context) (tr Trace, ok bool) { + tr, ok = ctx.Value(contextKey).(Trace) + return +} + +// Trace represents an active request. +type Trace interface { + // LazyLog adds x to the event log. It will be evaluated each time the + // /debug/requests page is rendered. Any memory referenced by x will be + // pinned until the trace is finished and later discarded. + LazyLog(x fmt.Stringer, sensitive bool) + + // LazyPrintf evaluates its arguments with fmt.Sprintf each time the + // /debug/requests page is rendered. Any memory referenced by a will be + // pinned until the trace is finished and later discarded. + LazyPrintf(format string, a ...interface{}) + + // SetError declares that this trace resulted in an error. + SetError() + + // SetRecycler sets a recycler for the trace. + // f will be called for each event passed to LazyLog at a time when + // it is no longer required, whether while the trace is still active + // and the event is discarded, or when a completed trace is discarded. + SetRecycler(f func(interface{})) + + // SetTraceInfo sets the trace info for the trace. + // This is currently unused. + SetTraceInfo(traceID, spanID uint64) + + // SetMaxEvents sets the maximum number of events that will be stored + // in the trace. This has no effect if any events have already been + // added to the trace. + SetMaxEvents(m int) + + // Finish declares that this trace is complete. + // The trace should not be used after calling this method. + Finish() +} + +type lazySprintf struct { + format string + a []interface{} +} + +func (l *lazySprintf) String() string { + return fmt.Sprintf(l.format, l.a...) +} + +// New returns a new Trace with the specified family and title. +func New(family, title string) Trace { + tr := newTrace() + tr.ref() + tr.Family, tr.Title = family, title + tr.Start = time.Now() + tr.events = make([]event, 0, maxEventsPerTrace) + + activeMu.RLock() + s := activeTraces[tr.Family] + activeMu.RUnlock() + if s == nil { + activeMu.Lock() + s = activeTraces[tr.Family] // check again + if s == nil { + s = new(traceSet) + activeTraces[tr.Family] = s + } + activeMu.Unlock() + } + s.Add(tr) + + // Trigger allocation of the completed trace structure for this family. + // This will cause the family to be present in the request page during + // the first trace of this family. We don't care about the return value, + // nor is there any need for this to run inline, so we execute it in its + // own goroutine, but only if the family isn't allocated yet. + completedMu.RLock() + if _, ok := completedTraces[tr.Family]; !ok { + go allocFamily(tr.Family) + } + completedMu.RUnlock() + + return tr +} + +func (tr *trace) Finish() { + tr.Elapsed = time.Now().Sub(tr.Start) + if DebugUseAfterFinish { + buf := make([]byte, 4<<10) // 4 KB should be enough + n := runtime.Stack(buf, false) + tr.finishStack = buf[:n] + } + + activeMu.RLock() + m := activeTraces[tr.Family] + activeMu.RUnlock() + m.Remove(tr) + + f := getFamily(tr.Family, true) + for _, b := range f.Buckets { + if b.Cond.match(tr) { + b.Add(tr) + } + } + // Add a sample of elapsed time as microseconds to the family's timeseries + h := new(histogram) + h.addMeasurement(tr.Elapsed.Nanoseconds() / 1e3) + f.LatencyMu.Lock() + f.Latency.Add(h) + f.LatencyMu.Unlock() + + tr.unref() // matches ref in New +} + +const ( + bucketsPerFamily = 9 + tracesPerBucket = 10 + maxActiveTraces = 20 // Maximum number of active traces to show. + maxEventsPerTrace = 10 + numHistogramBuckets = 38 +) + +var ( + // The active traces. + activeMu sync.RWMutex + activeTraces = make(map[string]*traceSet) // family -> traces + + // Families of completed traces. + completedMu sync.RWMutex + completedTraces = make(map[string]*family) // family -> traces +) + +type traceSet struct { + mu sync.RWMutex + m map[*trace]bool + + // We could avoid the entire map scan in FirstN by having a slice of all the traces + // ordered by start time, and an index into that from the trace struct, with a periodic + // repack of the slice after enough traces finish; we could also use a skip list or similar. + // However, that would shift some of the expense from /debug/requests time to RPC time, + // which is probably the wrong trade-off. +} + +func (ts *traceSet) Len() int { + ts.mu.RLock() + defer ts.mu.RUnlock() + return len(ts.m) +} + +func (ts *traceSet) Add(tr *trace) { + ts.mu.Lock() + if ts.m == nil { + ts.m = make(map[*trace]bool) + } + ts.m[tr] = true + ts.mu.Unlock() +} + +func (ts *traceSet) Remove(tr *trace) { + ts.mu.Lock() + delete(ts.m, tr) + ts.mu.Unlock() +} + +// FirstN returns the first n traces ordered by time. +func (ts *traceSet) FirstN(n int) traceList { + ts.mu.RLock() + defer ts.mu.RUnlock() + + if n > len(ts.m) { + n = len(ts.m) + } + trl := make(traceList, 0, n) + + // Fast path for when no selectivity is needed. + if n == len(ts.m) { + for tr := range ts.m { + tr.ref() + trl = append(trl, tr) + } + sort.Sort(trl) + return trl + } + + // Pick the oldest n traces. + // This is inefficient. See the comment in the traceSet struct. + for tr := range ts.m { + // Put the first n traces into trl in the order they occur. + // When we have n, sort trl, and thereafter maintain its order. + if len(trl) < n { + tr.ref() + trl = append(trl, tr) + if len(trl) == n { + // This is guaranteed to happen exactly once during this loop. + sort.Sort(trl) + } + continue + } + if tr.Start.After(trl[n-1].Start) { + continue + } + + // Find where to insert this one. + tr.ref() + i := sort.Search(n, func(i int) bool { return trl[i].Start.After(tr.Start) }) + trl[n-1].unref() + copy(trl[i+1:], trl[i:]) + trl[i] = tr + } + + return trl +} + +func getActiveTraces(fam string) traceList { + activeMu.RLock() + s := activeTraces[fam] + activeMu.RUnlock() + if s == nil { + return nil + } + return s.FirstN(maxActiveTraces) +} + +func getFamily(fam string, allocNew bool) *family { + completedMu.RLock() + f := completedTraces[fam] + completedMu.RUnlock() + if f == nil && allocNew { + f = allocFamily(fam) + } + return f +} + +func allocFamily(fam string) *family { + completedMu.Lock() + defer completedMu.Unlock() + f := completedTraces[fam] + if f == nil { + f = newFamily() + completedTraces[fam] = f + } + return f +} + +// family represents a set of trace buckets and associated latency information. +type family struct { + // traces may occur in multiple buckets. + Buckets [bucketsPerFamily]*traceBucket + + // latency time series + LatencyMu sync.RWMutex + Latency *timeseries.MinuteHourSeries +} + +func newFamily() *family { + return &family{ + Buckets: [bucketsPerFamily]*traceBucket{ + {Cond: minCond(0)}, + {Cond: minCond(50 * time.Millisecond)}, + {Cond: minCond(100 * time.Millisecond)}, + {Cond: minCond(200 * time.Millisecond)}, + {Cond: minCond(500 * time.Millisecond)}, + {Cond: minCond(1 * time.Second)}, + {Cond: minCond(10 * time.Second)}, + {Cond: minCond(100 * time.Second)}, + {Cond: errorCond{}}, + }, + Latency: timeseries.NewMinuteHourSeries(func() timeseries.Observable { return new(histogram) }), + } +} + +// traceBucket represents a size-capped bucket of historic traces, +// along with a condition for a trace to belong to the bucket. +type traceBucket struct { + Cond cond + + // Ring buffer implementation of a fixed-size FIFO queue. + mu sync.RWMutex + buf [tracesPerBucket]*trace + start int // < tracesPerBucket + length int // <= tracesPerBucket +} + +func (b *traceBucket) Add(tr *trace) { + b.mu.Lock() + defer b.mu.Unlock() + + i := b.start + b.length + if i >= tracesPerBucket { + i -= tracesPerBucket + } + if b.length == tracesPerBucket { + // "Remove" an element from the bucket. + b.buf[i].unref() + b.start++ + if b.start == tracesPerBucket { + b.start = 0 + } + } + b.buf[i] = tr + if b.length < tracesPerBucket { + b.length++ + } + tr.ref() +} + +// Copy returns a copy of the traces in the bucket. +// If tracedOnly is true, only the traces with trace information will be returned. +// The logs will be ref'd before returning; the caller should call +// the Free method when it is done with them. +// TODO(dsymonds): keep track of traced requests in separate buckets. +func (b *traceBucket) Copy(tracedOnly bool) traceList { + b.mu.RLock() + defer b.mu.RUnlock() + + trl := make(traceList, 0, b.length) + for i, x := 0, b.start; i < b.length; i++ { + tr := b.buf[x] + if !tracedOnly || tr.spanID != 0 { + tr.ref() + trl = append(trl, tr) + } + x++ + if x == b.length { + x = 0 + } + } + return trl +} + +func (b *traceBucket) Empty() bool { + b.mu.RLock() + defer b.mu.RUnlock() + return b.length == 0 +} + +// cond represents a condition on a trace. +type cond interface { + match(t *trace) bool + String() string +} + +type minCond time.Duration + +func (m minCond) match(t *trace) bool { return t.Elapsed >= time.Duration(m) } +func (m minCond) String() string { return fmt.Sprintf("≥%gs", time.Duration(m).Seconds()) } + +type errorCond struct{} + +func (e errorCond) match(t *trace) bool { return t.IsError } +func (e errorCond) String() string { return "errors" } + +type traceList []*trace + +// Free calls unref on each element of the list. +func (trl traceList) Free() { + for _, t := range trl { + t.unref() + } +} + +// traceList may be sorted in reverse chronological order. +func (trl traceList) Len() int { return len(trl) } +func (trl traceList) Less(i, j int) bool { return trl[i].Start.After(trl[j].Start) } +func (trl traceList) Swap(i, j int) { trl[i], trl[j] = trl[j], trl[i] } + +// An event is a timestamped log entry in a trace. +type event struct { + When time.Time + Elapsed time.Duration // since previous event in trace + NewDay bool // whether this event is on a different day to the previous event + Recyclable bool // whether this event was passed via LazyLog + What interface{} // string or fmt.Stringer + Sensitive bool // whether this event contains sensitive information +} + +// WhenString returns a string representation of the elapsed time of the event. +// It will include the date if midnight was crossed. +func (e event) WhenString() string { + if e.NewDay { + return e.When.Format("2006/01/02 15:04:05.000000") + } + return e.When.Format("15:04:05.000000") +} + +// discarded represents a number of discarded events. +// It is stored as *discarded to make it easier to update in-place. +type discarded int + +func (d *discarded) String() string { + return fmt.Sprintf("(%d events discarded)", int(*d)) +} + +// trace represents an active or complete request, +// either sent or received by this program. +type trace struct { + // Family is the top-level grouping of traces to which this belongs. + Family string + + // Title is the title of this trace. + Title string + + // Timing information. + Start time.Time + Elapsed time.Duration // zero while active + + // Trace information if non-zero. + traceID uint64 + spanID uint64 + + // Whether this trace resulted in an error. + IsError bool + + // Append-only sequence of events (modulo discards). + mu sync.RWMutex + events []event + + refs int32 // how many buckets this is in + recycler func(interface{}) + disc discarded // scratch space to avoid allocation + + finishStack []byte // where finish was called, if DebugUseAfterFinish is set +} + +func (tr *trace) reset() { + // Clear all but the mutex. Mutexes may not be copied, even when unlocked. + tr.Family = "" + tr.Title = "" + tr.Start = time.Time{} + tr.Elapsed = 0 + tr.traceID = 0 + tr.spanID = 0 + tr.IsError = false + tr.events = nil + tr.refs = 0 + tr.recycler = nil + tr.disc = 0 + tr.finishStack = nil +} + +// delta returns the elapsed time since the last event or the trace start, +// and whether it spans midnight. +// L >= tr.mu +func (tr *trace) delta(t time.Time) (time.Duration, bool) { + if len(tr.events) == 0 { + return t.Sub(tr.Start), false + } + prev := tr.events[len(tr.events)-1].When + return t.Sub(prev), prev.Day() != t.Day() +} + +func (tr *trace) addEvent(x interface{}, recyclable, sensitive bool) { + if DebugUseAfterFinish && tr.finishStack != nil { + buf := make([]byte, 4<<10) // 4 KB should be enough + n := runtime.Stack(buf, false) + log.Printf("net/trace: trace used after finish:\nFinished at:\n%s\nUsed at:\n%s", tr.finishStack, buf[:n]) + } + + /* + NOTE TO DEBUGGERS + + If you are here because your program panicked in this code, + it is almost definitely the fault of code using this package, + and very unlikely to be the fault of this code. + + The most likely scenario is that some code elsewhere is using + a requestz.Trace after its Finish method is called. + You can temporarily set the DebugUseAfterFinish var + to help discover where that is; do not leave that var set, + since it makes this package much less efficient. + */ + + e := event{When: time.Now(), What: x, Recyclable: recyclable, Sensitive: sensitive} + tr.mu.Lock() + e.Elapsed, e.NewDay = tr.delta(e.When) + if len(tr.events) < cap(tr.events) { + tr.events = append(tr.events, e) + } else { + // Discard the middle events. + di := int((cap(tr.events) - 1) / 2) + if d, ok := tr.events[di].What.(*discarded); ok { + (*d)++ + } else { + // disc starts at two to count for the event it is replacing, + // plus the next one that we are about to drop. + tr.disc = 2 + if tr.recycler != nil && tr.events[di].Recyclable { + go tr.recycler(tr.events[di].What) + } + tr.events[di].What = &tr.disc + } + // The timestamp of the discarded meta-event should be + // the time of the last event it is representing. + tr.events[di].When = tr.events[di+1].When + + if tr.recycler != nil && tr.events[di+1].Recyclable { + go tr.recycler(tr.events[di+1].What) + } + copy(tr.events[di+1:], tr.events[di+2:]) + tr.events[cap(tr.events)-1] = e + } + tr.mu.Unlock() +} + +func (tr *trace) LazyLog(x fmt.Stringer, sensitive bool) { + tr.addEvent(x, true, sensitive) +} + +func (tr *trace) LazyPrintf(format string, a ...interface{}) { + tr.addEvent(&lazySprintf{format, a}, false, false) +} + +func (tr *trace) SetError() { tr.IsError = true } + +func (tr *trace) SetRecycler(f func(interface{})) { + tr.recycler = f +} + +func (tr *trace) SetTraceInfo(traceID, spanID uint64) { + tr.traceID, tr.spanID = traceID, spanID +} + +func (tr *trace) SetMaxEvents(m int) { + // Always keep at least three events: first, discarded count, last. + if len(tr.events) == 0 && m > 3 { + tr.events = make([]event, 0, m) + } +} + +func (tr *trace) ref() { + atomic.AddInt32(&tr.refs, 1) +} + +func (tr *trace) unref() { + if atomic.AddInt32(&tr.refs, -1) == 0 { + if tr.recycler != nil { + // freeTrace clears tr, so we hold tr.recycler and tr.events here. + go func(f func(interface{}), es []event) { + for _, e := range es { + if e.Recyclable { + f(e.What) + } + } + }(tr.recycler, tr.events) + } + + freeTrace(tr) + } +} + +func (tr *trace) When() string { + return tr.Start.Format("2006/01/02 15:04:05.000000") +} + +func (tr *trace) ElapsedTime() string { + t := tr.Elapsed + if t == 0 { + // Active trace. + t = time.Since(tr.Start) + } + return fmt.Sprintf("%.6f", t.Seconds()) +} + +func (tr *trace) Events() []event { + tr.mu.RLock() + defer tr.mu.RUnlock() + return tr.events +} + +var traceFreeList = make(chan *trace, 1000) // TODO(dsymonds): Use sync.Pool? + +// newTrace returns a trace ready to use. +func newTrace() *trace { + select { + case tr := <-traceFreeList: + return tr + default: + return new(trace) + } +} + +// freeTrace adds tr to traceFreeList if there's room. +// This is non-blocking. +func freeTrace(tr *trace) { + if DebugUseAfterFinish { + return // never reuse + } + tr.reset() + select { + case traceFreeList <- tr: + default: + } +} + +func elapsed(d time.Duration) string { + b := []byte(fmt.Sprintf("%.6f", d.Seconds())) + + // For subsecond durations, blank all zeros before decimal point, + // and all zeros between the decimal point and the first non-zero digit. + if d < time.Second { + dot := bytes.IndexByte(b, '.') + for i := 0; i < dot; i++ { + b[i] = ' ' + } + for i := dot + 1; i < len(b); i++ { + if b[i] == '0' { + b[i] = ' ' + } else { + break + } + } + } + + return string(b) +} + +var pageTmpl = template.Must(template.New("Page").Funcs(template.FuncMap{ + "elapsed": elapsed, + "add": func(a, b int) int { return a + b }, +}).Parse(pageHTML)) + +const pageHTML = ` +{{template "Prolog" .}} +{{template "StatusTable" .}} +{{template "Epilog" .}} + +{{define "Prolog"}} + + + /debug/requests + + + + +

/debug/requests

+{{end}} {{/* end of Prolog */}} + +{{define "StatusTable"}} + + {{range $fam := .Families}} + + + + {{$n := index $.ActiveTraceCount $fam}} + + + {{$f := index $.CompletedTraces $fam}} + {{range $i, $b := $f.Buckets}} + {{$empty := $b.Empty}} + + {{end}} + + {{$nb := len $f.Buckets}} + + + + + + {{end}} +
{{$fam}} + {{if $n}}{{end}} + [{{$n}} active] + {{if $n}}{{end}} + + {{if not $empty}}{{end}} + [{{.Cond}}] + {{if not $empty}}{{end}} + + [minute] + + [hour] + + [total] +
+{{end}} {{/* end of StatusTable */}} + +{{define "Epilog"}} +{{if $.Traces}} +
+

Family: {{$.Family}}

+ +{{if or $.Expanded $.Traced}} + [Normal/Summary] +{{else}} + [Normal/Summary] +{{end}} + +{{if or (not $.Expanded) $.Traced}} + [Normal/Expanded] +{{else}} + [Normal/Expanded] +{{end}} + +{{if not $.Active}} + {{if or $.Expanded (not $.Traced)}} + [Traced/Summary] + {{else}} + [Traced/Summary] + {{end}} + {{if or (not $.Expanded) (not $.Traced)}} + [Traced/Expanded] + {{else}} + [Traced/Expanded] + {{end}} +{{end}} + +{{if $.Total}} +

Showing {{len $.Traces}} of {{$.Total}} traces.

+{{end}} + + + + + {{range $tr := $.Traces}} + + + + + {{/* TODO: include traceID/spanID */}} + + {{if $.Expanded}} + {{range $tr.Events}} + + + + + + {{end}} + {{end}} + {{end}} +
+ {{if $.Active}}Active{{else}}Completed{{end}} Requests +
WhenElapsed (s)
{{$tr.When}}{{$tr.ElapsedTime}}{{$tr.Title}}
{{.WhenString}}{{elapsed .Elapsed}}{{if or $.ShowSensitive (not .Sensitive)}}... {{.What}}{{else}}[redacted]{{end}}
+{{end}} {{/* if $.Traces */}} + +{{if $.Histogram}} +

Latency (µs) of {{$.Family}} over {{$.HistogramWindow}}

+{{$.Histogram}} +{{end}} {{/* if $.Histogram */}} + + + +{{end}} {{/* end of Epilog */}} +` diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 5048e563..d3ee5d2c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -86,8 +86,8 @@ func Unlink(path string) error { //sys unlinkat(dirfd int, path string, flags int) (err error) -func Unlinkat(dirfd int, path string, flags int) error { - return unlinkat(dirfd, path, flags) +func Unlinkat(dirfd int, path string) error { + return unlinkat(dirfd, path, 0) } //sys utimes(path string, times *[2]Timeval) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index eb489b15..00837326 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -649,7 +649,7 @@ func IoctlGetTermio(fd int, req int) (*Termio, error) { //sysnb Uname(buf *Utsname) (err error) //sys Unmount(target string, flags int) (err error) = libc.umount //sys Unlink(path string) (err error) -//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unlinkat(dirfd int, path string) (err error) //sys Ustat(dev int, ubuf *Ustat_t) (err error) //sys Utime(path string, buf *Utimbuf) (err error) //sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.bind diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index 43264278..8d2a8365 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -1401,13 +1401,13 @@ func Unlink(path string) (err error) { return } -func Unlinkat(dirfd int, path string, flags int) (err error) { +func Unlinkat(dirfd int, path string) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) if err != nil { return } - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0) + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 2, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0) use(unsafe.Pointer(_p0)) if e1 != 0 { err = e1 diff --git a/vendor/google.golang.org/grpc/.travis.yml b/vendor/google.golang.org/grpc/.travis.yml new file mode 100644 index 00000000..d7108cd6 --- /dev/null +++ b/vendor/google.golang.org/grpc/.travis.yml @@ -0,0 +1,21 @@ +language: go + +go: + - 1.5.4 + - 1.6.3 + +go_import_path: google.golang.org/grpc + +before_install: + - go get golang.org/x/tools/cmd/goimports + - go get github.com/golang/lint/golint + - go get github.com/axw/gocov/gocov + - go get github.com/mattn/goveralls + - go get golang.org/x/tools/cmd/cover + +script: + - '! gofmt -s -d -l . 2>&1 | read' + - '! goimports -l . | read' + - '! golint ./... | grep -vE "(_string|\.pb)\.go:"' + - '! go tool vet -all . 2>&1 | grep -vE "constant [0-9]+ not a string in call to Errorf"' + - make test testrace diff --git a/vendor/google.golang.org/grpc/CONTRIBUTING.md b/vendor/google.golang.org/grpc/CONTRIBUTING.md new file mode 100644 index 00000000..36cd6f75 --- /dev/null +++ b/vendor/google.golang.org/grpc/CONTRIBUTING.md @@ -0,0 +1,46 @@ +# How to contribute + +We definitely welcome patches and contribution to grpc! Here are some guidelines +and information about how to do so. + +## Sending patches + +### Getting started + +1. Check out the code: + + $ go get google.golang.org/grpc + $ cd $GOPATH/src/google.golang.org/grpc + +1. Create a fork of the grpc-go repository. +1. Add your fork as a remote: + + $ git remote add fork git@github.com:$YOURGITHUBUSERNAME/grpc-go.git + +1. Make changes, commit them. +1. Run the test suite: + + $ make test + +1. Push your changes to your fork: + + $ git push fork ... + +1. Open a pull request. + +## Legal requirements + +In order to protect both you and ourselves, you will need to sign the +[Contributor License Agreement](https://cla.developers.google.com/clas). + +## Filing Issues +When filing an issue, make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +### Contributing code +Unless otherwise noted, the Go source files are distributed under the BSD-style license found in the LICENSE file. diff --git a/vendor/k8s.io/kubernetes/third_party/forked/json/LICENSE b/vendor/google.golang.org/grpc/LICENSE similarity index 83% rename from vendor/k8s.io/kubernetes/third_party/forked/json/LICENSE rename to vendor/google.golang.org/grpc/LICENSE index 74487567..f4988b45 100644 --- a/vendor/k8s.io/kubernetes/third_party/forked/json/LICENSE +++ b/vendor/google.golang.org/grpc/LICENSE @@ -1,16 +1,17 @@ -Copyright (c) 2012 The Go Authors. All rights reserved. +Copyright 2014, Google Inc. +All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/google.golang.org/grpc/Makefile b/vendor/google.golang.org/grpc/Makefile new file mode 100644 index 00000000..03bb01f0 --- /dev/null +++ b/vendor/google.golang.org/grpc/Makefile @@ -0,0 +1,52 @@ +all: test testrace + +deps: + go get -d -v google.golang.org/grpc/... + +updatedeps: + go get -d -v -u -f google.golang.org/grpc/... + +testdeps: + go get -d -v -t google.golang.org/grpc/... + +updatetestdeps: + go get -d -v -t -u -f google.golang.org/grpc/... + +build: deps + go build google.golang.org/grpc/... + +proto: + @ if ! which protoc > /dev/null; then \ + echo "error: protoc not installed" >&2; \ + exit 1; \ + fi + go get -u -v github.com/golang/protobuf/protoc-gen-go + # use $$dir as the root for all proto files in the same directory + for dir in $$(git ls-files '*.proto' | xargs -n1 dirname | uniq); do \ + protoc -I $$dir --go_out=plugins=grpc:$$dir $$dir/*.proto; \ + done + +test: testdeps + go test -v -cpu 1,4 google.golang.org/grpc/... + +testrace: testdeps + go test -v -race -cpu 1,4 google.golang.org/grpc/... + +clean: + go clean -i google.golang.org/grpc/... + +coverage: testdeps + ./coverage.sh --coveralls + +.PHONY: \ + all \ + deps \ + updatedeps \ + testdeps \ + updatetestdeps \ + build \ + proto \ + test \ + testrace \ + clean \ + coverage diff --git a/vendor/google.golang.org/grpc/PATENTS b/vendor/google.golang.org/grpc/PATENTS new file mode 100644 index 00000000..69b47959 --- /dev/null +++ b/vendor/google.golang.org/grpc/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the gRPC project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of gRPC, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of gRPC. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of gRPC or any code incorporated within this +implementation of gRPC constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of gRPC +shall terminate as of the date such litigation is filed. diff --git a/vendor/google.golang.org/grpc/README.md b/vendor/google.golang.org/grpc/README.md new file mode 100644 index 00000000..90e9453d --- /dev/null +++ b/vendor/google.golang.org/grpc/README.md @@ -0,0 +1,32 @@ +#gRPC-Go + +[![Build Status](https://travis-ci.org/grpc/grpc-go.svg)](https://travis-ci.org/grpc/grpc-go) [![GoDoc](https://godoc.org/google.golang.org/grpc?status.svg)](https://godoc.org/google.golang.org/grpc) + +The Go implementation of [gRPC](http://www.grpc.io/): A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. For more information see the [gRPC Quick Start](http://www.grpc.io/docs/) guide. + +Installation +------------ + +To install this package, you need to install Go and setup your Go workspace on your computer. The simplest way to install the library is to run: + +``` +$ go get google.golang.org/grpc +``` + +Prerequisites +------------- + +This requires Go 1.5 or later . + +Constraints +----------- +The grpc package should only depend on standard Go packages and a small number of exceptions. If your contribution introduces new dependencies which are NOT in the [list](http://godoc.org/google.golang.org/grpc?imports), you need a discussion with gRPC-Go authors and consultants. + +Documentation +------------- +See [API documentation](https://godoc.org/google.golang.org/grpc) for package and API descriptions and find examples in the [examples directory](examples/). + +Status +------ +Beta release + diff --git a/vendor/google.golang.org/grpc/backoff.go b/vendor/google.golang.org/grpc/backoff.go new file mode 100644 index 00000000..52f4f10f --- /dev/null +++ b/vendor/google.golang.org/grpc/backoff.go @@ -0,0 +1,80 @@ +package grpc + +import ( + "math/rand" + "time" +) + +// DefaultBackoffConfig uses values specified for backoff in +// https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md. +var ( + DefaultBackoffConfig = BackoffConfig{ + MaxDelay: 120 * time.Second, + baseDelay: 1.0 * time.Second, + factor: 1.6, + jitter: 0.2, + } +) + +// backoffStrategy defines the methodology for backing off after a grpc +// connection failure. +// +// This is unexported until the gRPC project decides whether or not to allow +// alternative backoff strategies. Once a decision is made, this type and its +// method may be exported. +type backoffStrategy interface { + // backoff returns the amount of time to wait before the next retry given + // the number of consecutive failures. + backoff(retries int) time.Duration +} + +// BackoffConfig defines the parameters for the default gRPC backoff strategy. +type BackoffConfig struct { + // MaxDelay is the upper bound of backoff delay. + MaxDelay time.Duration + + // TODO(stevvooe): The following fields are not exported, as allowing + // changes would violate the current gRPC specification for backoff. If + // gRPC decides to allow more interesting backoff strategies, these fields + // may be opened up in the future. + + // baseDelay is the amount of time to wait before retrying after the first + // failure. + baseDelay time.Duration + + // factor is applied to the backoff after each retry. + factor float64 + + // jitter provides a range to randomize backoff delays. + jitter float64 +} + +func setDefaults(bc *BackoffConfig) { + md := bc.MaxDelay + *bc = DefaultBackoffConfig + + if md > 0 { + bc.MaxDelay = md + } +} + +func (bc BackoffConfig) backoff(retries int) (t time.Duration) { + if retries == 0 { + return bc.baseDelay + } + backoff, max := float64(bc.baseDelay), float64(bc.MaxDelay) + for backoff < max && retries > 0 { + backoff *= bc.factor + retries-- + } + if backoff > max { + backoff = max + } + // Randomize backoff delays so that if a cluster of requests start at + // the same time, they won't operate in lockstep. + backoff *= 1 + bc.jitter*(rand.Float64()*2-1) + if backoff < 0 { + return 0 + } + return time.Duration(backoff) +} diff --git a/vendor/google.golang.org/grpc/balancer.go b/vendor/google.golang.org/grpc/balancer.go new file mode 100644 index 00000000..419e2146 --- /dev/null +++ b/vendor/google.golang.org/grpc/balancer.go @@ -0,0 +1,385 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "fmt" + "sync" + + "golang.org/x/net/context" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/naming" +) + +// Address represents a server the client connects to. +// This is the EXPERIMENTAL API and may be changed or extended in the future. +type Address struct { + // Addr is the server address on which a connection will be established. + Addr string + // Metadata is the information associated with Addr, which may be used + // to make load balancing decision. + Metadata interface{} +} + +// BalancerGetOptions configures a Get call. +// This is the EXPERIMENTAL API and may be changed or extended in the future. +type BalancerGetOptions struct { + // BlockingWait specifies whether Get should block when there is no + // connected address. + BlockingWait bool +} + +// Balancer chooses network addresses for RPCs. +// This is the EXPERIMENTAL API and may be changed or extended in the future. +type Balancer interface { + // Start does the initialization work to bootstrap a Balancer. For example, + // this function may start the name resolution and watch the updates. It will + // be called when dialing. + Start(target string) error + // Up informs the Balancer that gRPC has a connection to the server at + // addr. It returns down which is called once the connection to addr gets + // lost or closed. + // TODO: It is not clear how to construct and take advantage the meaningful error + // parameter for down. Need realistic demands to guide. + Up(addr Address) (down func(error)) + // Get gets the address of a server for the RPC corresponding to ctx. + // i) If it returns a connected address, gRPC internals issues the RPC on the + // connection to this address; + // ii) If it returns an address on which the connection is under construction + // (initiated by Notify(...)) but not connected, gRPC internals + // * fails RPC if the RPC is fail-fast and connection is in the TransientFailure or + // Shutdown state; + // or + // * issues RPC on the connection otherwise. + // iii) If it returns an address on which the connection does not exist, gRPC + // internals treats it as an error and will fail the corresponding RPC. + // + // Therefore, the following is the recommended rule when writing a custom Balancer. + // If opts.BlockingWait is true, it should return a connected address or + // block if there is no connected address. It should respect the timeout or + // cancellation of ctx when blocking. If opts.BlockingWait is false (for fail-fast + // RPCs), it should return an address it has notified via Notify(...) immediately + // instead of blocking. + // + // The function returns put which is called once the rpc has completed or failed. + // put can collect and report RPC stats to a remote load balancer. + // + // This function should only return the errors Balancer cannot recover by itself. + // gRPC internals will fail the RPC if an error is returned. + Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error) + // Notify returns a channel that is used by gRPC internals to watch the addresses + // gRPC needs to connect. The addresses might be from a name resolver or remote + // load balancer. gRPC internals will compare it with the existing connected + // addresses. If the address Balancer notified is not in the existing connected + // addresses, gRPC starts to connect the address. If an address in the existing + // connected addresses is not in the notification list, the corresponding connection + // is shutdown gracefully. Otherwise, there are no operations to take. Note that + // the Address slice must be the full list of the Addresses which should be connected. + // It is NOT delta. + Notify() <-chan []Address + // Close shuts down the balancer. + Close() error +} + +// downErr implements net.Error. It is constructed by gRPC internals and passed to the down +// call of Balancer. +type downErr struct { + timeout bool + temporary bool + desc string +} + +func (e downErr) Error() string { return e.desc } +func (e downErr) Timeout() bool { return e.timeout } +func (e downErr) Temporary() bool { return e.temporary } + +func downErrorf(timeout, temporary bool, format string, a ...interface{}) downErr { + return downErr{ + timeout: timeout, + temporary: temporary, + desc: fmt.Sprintf(format, a...), + } +} + +// RoundRobin returns a Balancer that selects addresses round-robin. It uses r to watch +// the name resolution updates and updates the addresses available correspondingly. +func RoundRobin(r naming.Resolver) Balancer { + return &roundRobin{r: r} +} + +type addrInfo struct { + addr Address + connected bool +} + +type roundRobin struct { + r naming.Resolver + w naming.Watcher + addrs []*addrInfo // all the addresses the client should potentially connect + mu sync.Mutex + addrCh chan []Address // the channel to notify gRPC internals the list of addresses the client should connect to. + next int // index of the next address to return for Get() + waitCh chan struct{} // the channel to block when there is no connected address available + done bool // The Balancer is closed. +} + +func (rr *roundRobin) watchAddrUpdates() error { + updates, err := rr.w.Next() + if err != nil { + grpclog.Printf("grpc: the naming watcher stops working due to %v.\n", err) + return err + } + rr.mu.Lock() + defer rr.mu.Unlock() + for _, update := range updates { + addr := Address{ + Addr: update.Addr, + Metadata: update.Metadata, + } + switch update.Op { + case naming.Add: + var exist bool + for _, v := range rr.addrs { + if addr == v.addr { + exist = true + grpclog.Println("grpc: The name resolver wanted to add an existing address: ", addr) + break + } + } + if exist { + continue + } + rr.addrs = append(rr.addrs, &addrInfo{addr: addr}) + case naming.Delete: + for i, v := range rr.addrs { + if addr == v.addr { + copy(rr.addrs[i:], rr.addrs[i+1:]) + rr.addrs = rr.addrs[:len(rr.addrs)-1] + break + } + } + default: + grpclog.Println("Unknown update.Op ", update.Op) + } + } + // Make a copy of rr.addrs and write it onto rr.addrCh so that gRPC internals gets notified. + open := make([]Address, len(rr.addrs)) + for i, v := range rr.addrs { + open[i] = v.addr + } + if rr.done { + return ErrClientConnClosing + } + rr.addrCh <- open + return nil +} + +func (rr *roundRobin) Start(target string) error { + if rr.r == nil { + // If there is no name resolver installed, it is not needed to + // do name resolution. In this case, target is added into rr.addrs + // as the only address available and rr.addrCh stays nil. + rr.addrs = append(rr.addrs, &addrInfo{addr: Address{Addr: target}}) + return nil + } + w, err := rr.r.Resolve(target) + if err != nil { + return err + } + rr.w = w + rr.addrCh = make(chan []Address) + go func() { + for { + if err := rr.watchAddrUpdates(); err != nil { + return + } + } + }() + return nil +} + +// Up sets the connected state of addr and sends notification if there are pending +// Get() calls. +func (rr *roundRobin) Up(addr Address) func(error) { + rr.mu.Lock() + defer rr.mu.Unlock() + var cnt int + for _, a := range rr.addrs { + if a.addr == addr { + if a.connected { + return nil + } + a.connected = true + } + if a.connected { + cnt++ + } + } + // addr is only one which is connected. Notify the Get() callers who are blocking. + if cnt == 1 && rr.waitCh != nil { + close(rr.waitCh) + rr.waitCh = nil + } + return func(err error) { + rr.down(addr, err) + } +} + +// down unsets the connected state of addr. +func (rr *roundRobin) down(addr Address, err error) { + rr.mu.Lock() + defer rr.mu.Unlock() + for _, a := range rr.addrs { + if addr == a.addr { + a.connected = false + break + } + } +} + +// Get returns the next addr in the rotation. +func (rr *roundRobin) Get(ctx context.Context, opts BalancerGetOptions) (addr Address, put func(), err error) { + var ch chan struct{} + rr.mu.Lock() + if rr.done { + rr.mu.Unlock() + err = ErrClientConnClosing + return + } + + if len(rr.addrs) > 0 { + if rr.next >= len(rr.addrs) { + rr.next = 0 + } + next := rr.next + for { + a := rr.addrs[next] + next = (next + 1) % len(rr.addrs) + if a.connected { + addr = a.addr + rr.next = next + rr.mu.Unlock() + return + } + if next == rr.next { + // Has iterated all the possible address but none is connected. + break + } + } + } + if !opts.BlockingWait { + if len(rr.addrs) == 0 { + rr.mu.Unlock() + err = fmt.Errorf("there is no address available") + return + } + // Returns the next addr on rr.addrs for failfast RPCs. + addr = rr.addrs[rr.next].addr + rr.next++ + rr.mu.Unlock() + return + } + // Wait on rr.waitCh for non-failfast RPCs. + if rr.waitCh == nil { + ch = make(chan struct{}) + rr.waitCh = ch + } else { + ch = rr.waitCh + } + rr.mu.Unlock() + for { + select { + case <-ctx.Done(): + err = ctx.Err() + return + case <-ch: + rr.mu.Lock() + if rr.done { + rr.mu.Unlock() + err = ErrClientConnClosing + return + } + + if len(rr.addrs) > 0 { + if rr.next >= len(rr.addrs) { + rr.next = 0 + } + next := rr.next + for { + a := rr.addrs[next] + next = (next + 1) % len(rr.addrs) + if a.connected { + addr = a.addr + rr.next = next + rr.mu.Unlock() + return + } + if next == rr.next { + // Has iterated all the possible address but none is connected. + break + } + } + } + // The newly added addr got removed by Down() again. + if rr.waitCh == nil { + ch = make(chan struct{}) + rr.waitCh = ch + } else { + ch = rr.waitCh + } + rr.mu.Unlock() + } + } +} + +func (rr *roundRobin) Notify() <-chan []Address { + return rr.addrCh +} + +func (rr *roundRobin) Close() error { + rr.mu.Lock() + defer rr.mu.Unlock() + rr.done = true + if rr.w != nil { + rr.w.Close() + } + if rr.waitCh != nil { + close(rr.waitCh) + rr.waitCh = nil + } + if rr.addrCh != nil { + close(rr.addrCh) + } + return nil +} diff --git a/vendor/google.golang.org/grpc/call.go b/vendor/google.golang.org/grpc/call.go new file mode 100644 index 00000000..fea07998 --- /dev/null +++ b/vendor/google.golang.org/grpc/call.go @@ -0,0 +1,226 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "io" + "math" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/trace" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/transport" +) + +// recvResponse receives and parses an RPC response. +// On error, it returns the error and indicates whether the call should be retried. +// +// TODO(zhaoq): Check whether the received message sequence is valid. +func recvResponse(dopts dialOptions, t transport.ClientTransport, c *callInfo, stream *transport.Stream, reply interface{}) error { + // Try to acquire header metadata from the server if there is any. + var err error + defer func() { + if err != nil { + if _, ok := err.(transport.ConnectionError); !ok { + t.CloseStream(stream, err) + } + } + }() + c.headerMD, err = stream.Header() + if err != nil { + return err + } + p := &parser{r: stream} + for { + if err = recv(p, dopts.codec, stream, dopts.dc, reply, math.MaxInt32); err != nil { + if err == io.EOF { + break + } + return err + } + } + c.trailerMD = stream.Trailer() + return nil +} + +// sendRequest writes out various information of an RPC such as Context and Message. +func sendRequest(ctx context.Context, codec Codec, compressor Compressor, callHdr *transport.CallHdr, t transport.ClientTransport, args interface{}, opts *transport.Options) (_ *transport.Stream, err error) { + stream, err := t.NewStream(ctx, callHdr) + if err != nil { + return nil, err + } + defer func() { + if err != nil { + // If err is connection error, t will be closed, no need to close stream here. + if _, ok := err.(transport.ConnectionError); !ok { + t.CloseStream(stream, err) + } + } + }() + var cbuf *bytes.Buffer + if compressor != nil { + cbuf = new(bytes.Buffer) + } + outBuf, err := encode(codec, args, compressor, cbuf) + if err != nil { + return nil, transport.StreamErrorf(codes.Internal, "grpc: %v", err) + } + err = t.Write(stream, outBuf, opts) + // t.NewStream(...) could lead to an early rejection of the RPC (e.g., the service/method + // does not exist.) so that t.Write could get io.EOF from wait(...). Leave the following + // recvResponse to get the final status. + if err != nil && err != io.EOF { + return nil, err + } + // Sent successfully. + return stream, nil +} + +// Invoke sends the RPC request on the wire and returns after response is received. +// Invoke is called by generated code. Also users can call Invoke directly when it +// is really needed in their use cases. +func Invoke(ctx context.Context, method string, args, reply interface{}, cc *ClientConn, opts ...CallOption) (err error) { + c := defaultCallInfo + for _, o := range opts { + if err := o.before(&c); err != nil { + return toRPCErr(err) + } + } + defer func() { + for _, o := range opts { + o.after(&c) + } + }() + if EnableTracing { + c.traceInfo.tr = trace.New("grpc.Sent."+methodFamily(method), method) + defer c.traceInfo.tr.Finish() + c.traceInfo.firstLine.client = true + if deadline, ok := ctx.Deadline(); ok { + c.traceInfo.firstLine.deadline = deadline.Sub(time.Now()) + } + c.traceInfo.tr.LazyLog(&c.traceInfo.firstLine, false) + // TODO(dsymonds): Arrange for c.traceInfo.firstLine.remoteAddr to be set. + defer func() { + if err != nil { + c.traceInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + c.traceInfo.tr.SetError() + } + }() + } + topts := &transport.Options{ + Last: true, + Delay: false, + } + for { + var ( + err error + t transport.ClientTransport + stream *transport.Stream + // Record the put handler from Balancer.Get(...). It is called once the + // RPC has completed or failed. + put func() + ) + // TODO(zhaoq): Need a formal spec of fail-fast. + callHdr := &transport.CallHdr{ + Host: cc.authority, + Method: method, + } + if cc.dopts.cp != nil { + callHdr.SendCompress = cc.dopts.cp.Type() + } + gopts := BalancerGetOptions{ + BlockingWait: !c.failFast, + } + t, put, err = cc.getTransport(ctx, gopts) + if err != nil { + // TODO(zhaoq): Probably revisit the error handling. + if _, ok := err.(*rpcError); ok { + return err + } + if err == errConnClosing || err == errConnUnavailable { + if c.failFast { + return Errorf(codes.Unavailable, "%v", err) + } + continue + } + // All the other errors are treated as Internal errors. + return Errorf(codes.Internal, "%v", err) + } + if c.traceInfo.tr != nil { + c.traceInfo.tr.LazyLog(&payload{sent: true, msg: args}, true) + } + stream, err = sendRequest(ctx, cc.dopts.codec, cc.dopts.cp, callHdr, t, args, topts) + if err != nil { + if put != nil { + put() + put = nil + } + // Retry a non-failfast RPC when + // i) there is a connection error; or + // ii) the server started to drain before this RPC was initiated. + if _, ok := err.(transport.ConnectionError); ok || err == transport.ErrStreamDrain { + if c.failFast { + return toRPCErr(err) + } + continue + } + return toRPCErr(err) + } + err = recvResponse(cc.dopts, t, &c, stream, reply) + if err != nil { + if put != nil { + put() + put = nil + } + if _, ok := err.(transport.ConnectionError); ok || err == transport.ErrStreamDrain { + if c.failFast { + return toRPCErr(err) + } + continue + } + return toRPCErr(err) + } + if c.traceInfo.tr != nil { + c.traceInfo.tr.LazyLog(&payload{sent: false, msg: reply}, true) + } + t.CloseStream(stream, nil) + if put != nil { + put() + put = nil + } + return Errorf(stream.StatusCode(), "%s", stream.StatusDesc()) + } +} diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go new file mode 100644 index 00000000..27e74e6f --- /dev/null +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -0,0 +1,845 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "errors" + "fmt" + "net" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/trace" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/transport" +) + +var ( + // ErrClientConnClosing indicates that the operation is illegal because + // the ClientConn is closing. + ErrClientConnClosing = errors.New("grpc: the client connection is closing") + // ErrClientConnTimeout indicates that the ClientConn cannot establish the + // underlying connections within the specified timeout. + ErrClientConnTimeout = errors.New("grpc: timed out when dialing") + + // errNoTransportSecurity indicates that there is no transport security + // being set for ClientConn. Users should either set one or explicitly + // call WithInsecure DialOption to disable security. + errNoTransportSecurity = errors.New("grpc: no transport security set (use grpc.WithInsecure() explicitly or set credentials)") + // errTransportCredentialsMissing indicates that users want to transmit security + // information (e.g., oauth2 token) which requires secure connection on an insecure + // connection. + errTransportCredentialsMissing = errors.New("grpc: the credentials require transport level security (use grpc.WithTransportCredentials() to set)") + // errCredentialsConflict indicates that grpc.WithTransportCredentials() + // and grpc.WithInsecure() are both called for a connection. + errCredentialsConflict = errors.New("grpc: transport credentials are set for an insecure connection (grpc.WithTransportCredentials() and grpc.WithInsecure() are both called)") + // errNetworkIO indicates that the connection is down due to some network I/O error. + errNetworkIO = errors.New("grpc: failed with network I/O error") + // errConnDrain indicates that the connection starts to be drained and does not accept any new RPCs. + errConnDrain = errors.New("grpc: the connection is drained") + // errConnClosing indicates that the connection is closing. + errConnClosing = errors.New("grpc: the connection is closing") + // errConnUnavailable indicates that the connection is unavailable. + errConnUnavailable = errors.New("grpc: the connection is unavailable") + errNoAddr = errors.New("grpc: there is no address available to dial") + // minimum time to give a connection to complete + minConnectTimeout = 20 * time.Second +) + +// dialOptions configure a Dial call. dialOptions are set by the DialOption +// values passed to Dial. +type dialOptions struct { + codec Codec + cp Compressor + dc Decompressor + bs backoffStrategy + balancer Balancer + block bool + insecure bool + timeout time.Duration + copts transport.ConnectOptions +} + +// DialOption configures how we set up the connection. +type DialOption func(*dialOptions) + +// WithCodec returns a DialOption which sets a codec for message marshaling and unmarshaling. +func WithCodec(c Codec) DialOption { + return func(o *dialOptions) { + o.codec = c + } +} + +// WithCompressor returns a DialOption which sets a CompressorGenerator for generating message +// compressor. +func WithCompressor(cp Compressor) DialOption { + return func(o *dialOptions) { + o.cp = cp + } +} + +// WithDecompressor returns a DialOption which sets a DecompressorGenerator for generating +// message decompressor. +func WithDecompressor(dc Decompressor) DialOption { + return func(o *dialOptions) { + o.dc = dc + } +} + +// WithBalancer returns a DialOption which sets a load balancer. +func WithBalancer(b Balancer) DialOption { + return func(o *dialOptions) { + o.balancer = b + } +} + +// WithBackoffMaxDelay configures the dialer to use the provided maximum delay +// when backing off after failed connection attempts. +func WithBackoffMaxDelay(md time.Duration) DialOption { + return WithBackoffConfig(BackoffConfig{MaxDelay: md}) +} + +// WithBackoffConfig configures the dialer to use the provided backoff +// parameters after connection failures. +// +// Use WithBackoffMaxDelay until more parameters on BackoffConfig are opened up +// for use. +func WithBackoffConfig(b BackoffConfig) DialOption { + // Set defaults to ensure that provided BackoffConfig is valid and + // unexported fields get default values. + setDefaults(&b) + return withBackoff(b) +} + +// withBackoff sets the backoff strategy used for retries after a +// failed connection attempt. +// +// This can be exported if arbitrary backoff strategies are allowed by gRPC. +func withBackoff(bs backoffStrategy) DialOption { + return func(o *dialOptions) { + o.bs = bs + } +} + +// WithBlock returns a DialOption which makes caller of Dial blocks until the underlying +// connection is up. Without this, Dial returns immediately and connecting the server +// happens in background. +func WithBlock() DialOption { + return func(o *dialOptions) { + o.block = true + } +} + +// WithInsecure returns a DialOption which disables transport security for this ClientConn. +// Note that transport security is required unless WithInsecure is set. +func WithInsecure() DialOption { + return func(o *dialOptions) { + o.insecure = true + } +} + +// WithTransportCredentials returns a DialOption which configures a +// connection level security credentials (e.g., TLS/SSL). +func WithTransportCredentials(creds credentials.TransportCredentials) DialOption { + return func(o *dialOptions) { + o.copts.TransportCredentials = creds + } +} + +// WithPerRPCCredentials returns a DialOption which sets +// credentials which will place auth state on each outbound RPC. +func WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption { + return func(o *dialOptions) { + o.copts.PerRPCCredentials = append(o.copts.PerRPCCredentials, creds) + } +} + +// WithTimeout returns a DialOption that configures a timeout for dialing a ClientConn +// initially. This is valid if and only if WithBlock() is present. +func WithTimeout(d time.Duration) DialOption { + return func(o *dialOptions) { + o.timeout = d + } +} + +// WithDialer returns a DialOption that specifies a function to use for dialing network addresses. +func WithDialer(f func(string, time.Duration) (net.Conn, error)) DialOption { + return func(o *dialOptions) { + o.copts.Dialer = func(ctx context.Context, addr string) (net.Conn, error) { + if deadline, ok := ctx.Deadline(); ok { + return f(addr, deadline.Sub(time.Now())) + } + return f(addr, 0) + } + } +} + +// WithUserAgent returns a DialOption that specifies a user agent string for all the RPCs. +func WithUserAgent(s string) DialOption { + return func(o *dialOptions) { + o.copts.UserAgent = s + } +} + +// Dial creates a client connection to the given target. +func Dial(target string, opts ...DialOption) (*ClientConn, error) { + return DialContext(context.Background(), target, opts...) +} + +// DialContext creates a client connection to the given target +// using the supplied context. +func DialContext(ctx context.Context, target string, opts ...DialOption) (*ClientConn, error) { + cc := &ClientConn{ + target: target, + conns: make(map[Address]*addrConn), + } + cc.ctx, cc.cancel = context.WithCancel(ctx) + for _, opt := range opts { + opt(&cc.dopts) + } + + // Set defaults. + if cc.dopts.codec == nil { + cc.dopts.codec = protoCodec{} + } + if cc.dopts.bs == nil { + cc.dopts.bs = DefaultBackoffConfig + } + + var ( + ok bool + addrs []Address + ) + if cc.dopts.balancer == nil { + // Connect to target directly if balancer is nil. + addrs = append(addrs, Address{Addr: target}) + } else { + if err := cc.dopts.balancer.Start(target); err != nil { + return nil, err + } + ch := cc.dopts.balancer.Notify() + if ch == nil { + // There is no name resolver installed. + addrs = append(addrs, Address{Addr: target}) + } else { + addrs, ok = <-ch + if !ok || len(addrs) == 0 { + return nil, errNoAddr + } + } + } + waitC := make(chan error, 1) + go func() { + for _, a := range addrs { + if err := cc.resetAddrConn(a, false, nil); err != nil { + waitC <- err + return + } + } + close(waitC) + }() + var timeoutCh <-chan time.Time + if cc.dopts.timeout > 0 { + timeoutCh = time.After(cc.dopts.timeout) + } + select { + case err := <-waitC: + if err != nil { + cc.Close() + return nil, err + } + case <-cc.ctx.Done(): + cc.Close() + return nil, cc.ctx.Err() + case <-timeoutCh: + cc.Close() + return nil, ErrClientConnTimeout + } + // If balancer is nil or balancer.Notify() is nil, ok will be false here. + // The lbWatcher goroutine will not be created. + if ok { + go cc.lbWatcher() + } + colonPos := strings.LastIndex(target, ":") + if colonPos == -1 { + colonPos = len(target) + } + cc.authority = target[:colonPos] + return cc, nil +} + +// ConnectivityState indicates the state of a client connection. +type ConnectivityState int + +const ( + // Idle indicates the ClientConn is idle. + Idle ConnectivityState = iota + // Connecting indicates the ClienConn is connecting. + Connecting + // Ready indicates the ClientConn is ready for work. + Ready + // TransientFailure indicates the ClientConn has seen a failure but expects to recover. + TransientFailure + // Shutdown indicates the ClientConn has started shutting down. + Shutdown +) + +func (s ConnectivityState) String() string { + switch s { + case Idle: + return "IDLE" + case Connecting: + return "CONNECTING" + case Ready: + return "READY" + case TransientFailure: + return "TRANSIENT_FAILURE" + case Shutdown: + return "SHUTDOWN" + default: + panic(fmt.Sprintf("unknown connectivity state: %d", s)) + } +} + +// ClientConn represents a client connection to an RPC server. +type ClientConn struct { + ctx context.Context + cancel context.CancelFunc + + target string + authority string + dopts dialOptions + + mu sync.RWMutex + conns map[Address]*addrConn +} + +func (cc *ClientConn) lbWatcher() { + for addrs := range cc.dopts.balancer.Notify() { + var ( + add []Address // Addresses need to setup connections. + del []*addrConn // Connections need to tear down. + ) + cc.mu.Lock() + for _, a := range addrs { + if _, ok := cc.conns[a]; !ok { + add = append(add, a) + } + } + for k, c := range cc.conns { + var keep bool + for _, a := range addrs { + if k == a { + keep = true + break + } + } + if !keep { + del = append(del, c) + delete(cc.conns, c.addr) + } + } + cc.mu.Unlock() + for _, a := range add { + cc.resetAddrConn(a, true, nil) + } + for _, c := range del { + c.tearDown(errConnDrain) + } + } +} + +// resetAddrConn creates an addrConn for addr and adds it to cc.conns. +// If there is an old addrConn for addr, it will be torn down, using tearDownErr as the reason. +// If tearDownErr is nil, errConnDrain will be used instead. +func (cc *ClientConn) resetAddrConn(addr Address, skipWait bool, tearDownErr error) error { + ac := &addrConn{ + cc: cc, + addr: addr, + dopts: cc.dopts, + } + ac.ctx, ac.cancel = context.WithCancel(cc.ctx) + ac.stateCV = sync.NewCond(&ac.mu) + if EnableTracing { + ac.events = trace.NewEventLog("grpc.ClientConn", ac.addr.Addr) + } + if !ac.dopts.insecure { + if ac.dopts.copts.TransportCredentials == nil { + return errNoTransportSecurity + } + } else { + if ac.dopts.copts.TransportCredentials != nil { + return errCredentialsConflict + } + for _, cd := range ac.dopts.copts.PerRPCCredentials { + if cd.RequireTransportSecurity() { + return errTransportCredentialsMissing + } + } + } + // Track ac in cc. This needs to be done before any getTransport(...) is called. + cc.mu.Lock() + if cc.conns == nil { + cc.mu.Unlock() + return ErrClientConnClosing + } + stale := cc.conns[ac.addr] + cc.conns[ac.addr] = ac + cc.mu.Unlock() + if stale != nil { + // There is an addrConn alive on ac.addr already. This could be due to + // 1) a buggy Balancer notifies duplicated Addresses; + // 2) goaway was received, a new ac will replace the old ac. + // The old ac should be deleted from cc.conns, but the + // underlying transport should drain rather than close. + if tearDownErr == nil { + // tearDownErr is nil if resetAddrConn is called by + // 1) Dial + // 2) lbWatcher + // In both cases, the stale ac should drain, not close. + stale.tearDown(errConnDrain) + } else { + stale.tearDown(tearDownErr) + } + } + // skipWait may overwrite the decision in ac.dopts.block. + if ac.dopts.block && !skipWait { + if err := ac.resetTransport(false); err != nil { + if err != errConnClosing { + // Tear down ac and delete it from cc.conns. + cc.mu.Lock() + delete(cc.conns, ac.addr) + cc.mu.Unlock() + ac.tearDown(err) + } + if e, ok := err.(transport.ConnectionError); ok && !e.Temporary() { + return e.Origin() + } + return err + } + // Start to monitor the error status of transport. + go ac.transportMonitor() + } else { + // Start a goroutine connecting to the server asynchronously. + go func() { + if err := ac.resetTransport(false); err != nil { + grpclog.Printf("Failed to dial %s: %v; please retry.", ac.addr.Addr, err) + if err != errConnClosing { + // Keep this ac in cc.conns, to get the reason it's torn down. + ac.tearDown(err) + } + return + } + ac.transportMonitor() + }() + } + return nil +} + +func (cc *ClientConn) getTransport(ctx context.Context, opts BalancerGetOptions) (transport.ClientTransport, func(), error) { + var ( + ac *addrConn + ok bool + put func() + ) + if cc.dopts.balancer == nil { + // If balancer is nil, there should be only one addrConn available. + cc.mu.RLock() + if cc.conns == nil { + cc.mu.RUnlock() + return nil, nil, toRPCErr(ErrClientConnClosing) + } + for _, ac = range cc.conns { + // Break after the first iteration to get the first addrConn. + ok = true + break + } + cc.mu.RUnlock() + } else { + var ( + addr Address + err error + ) + addr, put, err = cc.dopts.balancer.Get(ctx, opts) + if err != nil { + return nil, nil, toRPCErr(err) + } + cc.mu.RLock() + if cc.conns == nil { + cc.mu.RUnlock() + return nil, nil, toRPCErr(ErrClientConnClosing) + } + ac, ok = cc.conns[addr] + cc.mu.RUnlock() + } + if !ok { + if put != nil { + put() + } + return nil, nil, errConnClosing + } + t, err := ac.wait(ctx, cc.dopts.balancer != nil, !opts.BlockingWait) + if err != nil { + if put != nil { + put() + } + return nil, nil, err + } + return t, put, nil +} + +// Close tears down the ClientConn and all underlying connections. +func (cc *ClientConn) Close() error { + cc.cancel() + + cc.mu.Lock() + if cc.conns == nil { + cc.mu.Unlock() + return ErrClientConnClosing + } + conns := cc.conns + cc.conns = nil + cc.mu.Unlock() + if cc.dopts.balancer != nil { + cc.dopts.balancer.Close() + } + for _, ac := range conns { + ac.tearDown(ErrClientConnClosing) + } + return nil +} + +// addrConn is a network connection to a given address. +type addrConn struct { + ctx context.Context + cancel context.CancelFunc + + cc *ClientConn + addr Address + dopts dialOptions + events trace.EventLog + + mu sync.Mutex + state ConnectivityState + stateCV *sync.Cond + down func(error) // the handler called when a connection is down. + // ready is closed and becomes nil when a new transport is up or failed + // due to timeout. + ready chan struct{} + transport transport.ClientTransport + + // The reason this addrConn is torn down. + tearDownErr error +} + +// printf records an event in ac's event log, unless ac has been closed. +// REQUIRES ac.mu is held. +func (ac *addrConn) printf(format string, a ...interface{}) { + if ac.events != nil { + ac.events.Printf(format, a...) + } +} + +// errorf records an error in ac's event log, unless ac has been closed. +// REQUIRES ac.mu is held. +func (ac *addrConn) errorf(format string, a ...interface{}) { + if ac.events != nil { + ac.events.Errorf(format, a...) + } +} + +// getState returns the connectivity state of the Conn +func (ac *addrConn) getState() ConnectivityState { + ac.mu.Lock() + defer ac.mu.Unlock() + return ac.state +} + +// waitForStateChange blocks until the state changes to something other than the sourceState. +func (ac *addrConn) waitForStateChange(ctx context.Context, sourceState ConnectivityState) (ConnectivityState, error) { + ac.mu.Lock() + defer ac.mu.Unlock() + if sourceState != ac.state { + return ac.state, nil + } + done := make(chan struct{}) + var err error + go func() { + select { + case <-ctx.Done(): + ac.mu.Lock() + err = ctx.Err() + ac.stateCV.Broadcast() + ac.mu.Unlock() + case <-done: + } + }() + defer close(done) + for sourceState == ac.state { + ac.stateCV.Wait() + if err != nil { + return ac.state, err + } + } + return ac.state, nil +} + +func (ac *addrConn) resetTransport(closeTransport bool) error { + for retries := 0; ; retries++ { + ac.mu.Lock() + ac.printf("connecting") + if ac.state == Shutdown { + // ac.tearDown(...) has been invoked. + ac.mu.Unlock() + return errConnClosing + } + if ac.down != nil { + ac.down(downErrorf(false, true, "%v", errNetworkIO)) + ac.down = nil + } + ac.state = Connecting + ac.stateCV.Broadcast() + t := ac.transport + ac.mu.Unlock() + if closeTransport && t != nil { + t.Close() + } + sleepTime := ac.dopts.bs.backoff(retries) + timeout := minConnectTimeout + if timeout < sleepTime { + timeout = sleepTime + } + ctx, cancel := context.WithTimeout(ac.ctx, timeout) + connectTime := time.Now() + newTransport, err := transport.NewClientTransport(ctx, ac.addr.Addr, ac.dopts.copts) + if err != nil { + cancel() + + if e, ok := err.(transport.ConnectionError); ok && !e.Temporary() { + return err + } + grpclog.Printf("grpc: addrConn.resetTransport failed to create client transport: %v; Reconnecting to %q", err, ac.addr) + ac.mu.Lock() + if ac.state == Shutdown { + // ac.tearDown(...) has been invoked. + ac.mu.Unlock() + return errConnClosing + } + ac.errorf("transient failure: %v", err) + ac.state = TransientFailure + ac.stateCV.Broadcast() + if ac.ready != nil { + close(ac.ready) + ac.ready = nil + } + ac.mu.Unlock() + closeTransport = false + select { + case <-time.After(sleepTime - time.Since(connectTime)): + case <-ac.ctx.Done(): + return ac.ctx.Err() + } + continue + } + ac.mu.Lock() + ac.printf("ready") + if ac.state == Shutdown { + // ac.tearDown(...) has been invoked. + ac.mu.Unlock() + newTransport.Close() + return errConnClosing + } + ac.state = Ready + ac.stateCV.Broadcast() + ac.transport = newTransport + if ac.ready != nil { + close(ac.ready) + ac.ready = nil + } + if ac.cc.dopts.balancer != nil { + ac.down = ac.cc.dopts.balancer.Up(ac.addr) + } + ac.mu.Unlock() + return nil + } +} + +// Run in a goroutine to track the error in transport and create the +// new transport if an error happens. It returns when the channel is closing. +func (ac *addrConn) transportMonitor() { + for { + ac.mu.Lock() + t := ac.transport + ac.mu.Unlock() + select { + // This is needed to detect the teardown when + // the addrConn is idle (i.e., no RPC in flight). + case <-ac.ctx.Done(): + select { + case <-t.Error(): + t.Close() + default: + } + return + case <-t.GoAway(): + // If GoAway happens without any network I/O error, ac is closed without shutting down the + // underlying transport (the transport will be closed when all the pending RPCs finished or + // failed.). + // If GoAway and some network I/O error happen concurrently, ac and its underlying transport + // are closed. + // In both cases, a new ac is created. + select { + case <-t.Error(): + ac.cc.resetAddrConn(ac.addr, true, errNetworkIO) + default: + ac.cc.resetAddrConn(ac.addr, true, errConnDrain) + } + return + case <-t.Error(): + select { + case <-ac.ctx.Done(): + t.Close() + return + case <-t.GoAway(): + ac.cc.resetAddrConn(ac.addr, true, errNetworkIO) + return + default: + } + ac.mu.Lock() + if ac.state == Shutdown { + // ac has been shutdown. + ac.mu.Unlock() + return + } + ac.state = TransientFailure + ac.stateCV.Broadcast() + ac.mu.Unlock() + if err := ac.resetTransport(true); err != nil { + ac.mu.Lock() + ac.printf("transport exiting: %v", err) + ac.mu.Unlock() + grpclog.Printf("grpc: addrConn.transportMonitor exits due to: %v", err) + if err != errConnClosing { + // Keep this ac in cc.conns, to get the reason it's torn down. + ac.tearDown(err) + } + return + } + } + } +} + +// wait blocks until i) the new transport is up or ii) ctx is done or iii) ac is closed or +// iv) transport is in TransientFailure and there's no balancer/failfast is true. +func (ac *addrConn) wait(ctx context.Context, hasBalancer, failfast bool) (transport.ClientTransport, error) { + for { + ac.mu.Lock() + switch { + case ac.state == Shutdown: + if failfast || !hasBalancer { + // RPC is failfast or balancer is nil. This RPC should fail with ac.tearDownErr. + err := ac.tearDownErr + ac.mu.Unlock() + return nil, err + } + ac.mu.Unlock() + return nil, errConnClosing + case ac.state == Ready: + ct := ac.transport + ac.mu.Unlock() + return ct, nil + case ac.state == TransientFailure: + if failfast || hasBalancer { + ac.mu.Unlock() + return nil, errConnUnavailable + } + } + ready := ac.ready + if ready == nil { + ready = make(chan struct{}) + ac.ready = ready + } + ac.mu.Unlock() + select { + case <-ctx.Done(): + return nil, toRPCErr(ctx.Err()) + // Wait until the new transport is ready or failed. + case <-ready: + } + } +} + +// tearDown starts to tear down the addrConn. +// TODO(zhaoq): Make this synchronous to avoid unbounded memory consumption in +// some edge cases (e.g., the caller opens and closes many addrConn's in a +// tight loop. +// tearDown doesn't remove ac from ac.cc.conns. +func (ac *addrConn) tearDown(err error) { + ac.cancel() + + ac.mu.Lock() + defer ac.mu.Unlock() + if ac.down != nil { + ac.down(downErrorf(false, false, "%v", err)) + ac.down = nil + } + if err == errConnDrain && ac.transport != nil { + // GracefulClose(...) may be executed multiple times when + // i) receiving multiple GoAway frames from the server; or + // ii) there are concurrent name resolver/Balancer triggered + // address removal and GoAway. + ac.transport.GracefulClose() + } + if ac.state == Shutdown { + return + } + ac.state = Shutdown + ac.tearDownErr = err + ac.stateCV.Broadcast() + if ac.events != nil { + ac.events.Finish() + ac.events = nil + } + if ac.ready != nil { + close(ac.ready) + ac.ready = nil + } + if ac.transport != nil && err != errConnDrain { + ac.transport.Close() + } + return +} diff --git a/vendor/google.golang.org/grpc/codegen.sh b/vendor/google.golang.org/grpc/codegen.sh new file mode 100755 index 00000000..b0094888 --- /dev/null +++ b/vendor/google.golang.org/grpc/codegen.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# This script serves as an example to demonstrate how to generate the gRPC-Go +# interface and the related messages from .proto file. +# +# It assumes the installation of i) Google proto buffer compiler at +# https://github.com/google/protobuf (after v2.6.1) and ii) the Go codegen +# plugin at https://github.com/golang/protobuf (after 2015-02-20). If you have +# not, please install them first. +# +# We recommend running this script at $GOPATH/src. +# +# If this is not what you need, feel free to make your own scripts. Again, this +# script is for demonstration purpose. +# +proto=$1 +protoc --go_out=plugins=grpc:. $proto diff --git a/vendor/google.golang.org/grpc/codes/code_string.go b/vendor/google.golang.org/grpc/codes/code_string.go new file mode 100644 index 00000000..e6762d08 --- /dev/null +++ b/vendor/google.golang.org/grpc/codes/code_string.go @@ -0,0 +1,16 @@ +// generated by stringer -type=Code; DO NOT EDIT + +package codes + +import "fmt" + +const _Code_name = "OKCanceledUnknownInvalidArgumentDeadlineExceededNotFoundAlreadyExistsPermissionDeniedResourceExhaustedFailedPreconditionAbortedOutOfRangeUnimplementedInternalUnavailableDataLossUnauthenticated" + +var _Code_index = [...]uint8{0, 2, 10, 17, 32, 48, 56, 69, 85, 102, 120, 127, 137, 150, 158, 169, 177, 192} + +func (i Code) String() string { + if i+1 >= Code(len(_Code_index)) { + return fmt.Sprintf("Code(%d)", i) + } + return _Code_name[_Code_index[i]:_Code_index[i+1]] +} diff --git a/vendor/google.golang.org/grpc/codes/codes.go b/vendor/google.golang.org/grpc/codes/codes.go new file mode 100644 index 00000000..37c5b860 --- /dev/null +++ b/vendor/google.golang.org/grpc/codes/codes.go @@ -0,0 +1,159 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package codes defines the canonical error codes used by gRPC. It is +// consistent across various languages. +package codes + +// A Code is an unsigned 32-bit error code as defined in the gRPC spec. +type Code uint32 + +//go:generate stringer -type=Code + +const ( + // OK is returned on success. + OK Code = 0 + + // Canceled indicates the operation was cancelled (typically by the caller). + Canceled Code = 1 + + // Unknown error. An example of where this error may be returned is + // if a Status value received from another address space belongs to + // an error-space that is not known in this address space. Also + // errors raised by APIs that do not return enough error information + // may be converted to this error. + Unknown Code = 2 + + // InvalidArgument indicates client specified an invalid argument. + // Note that this differs from FailedPrecondition. It indicates arguments + // that are problematic regardless of the state of the system + // (e.g., a malformed file name). + InvalidArgument Code = 3 + + // DeadlineExceeded means operation expired before completion. + // For operations that change the state of the system, this error may be + // returned even if the operation has completed successfully. For + // example, a successful response from a server could have been delayed + // long enough for the deadline to expire. + DeadlineExceeded Code = 4 + + // NotFound means some requested entity (e.g., file or directory) was + // not found. + NotFound Code = 5 + + // AlreadyExists means an attempt to create an entity failed because one + // already exists. + AlreadyExists Code = 6 + + // PermissionDenied indicates the caller does not have permission to + // execute the specified operation. It must not be used for rejections + // caused by exhausting some resource (use ResourceExhausted + // instead for those errors). It must not be + // used if the caller cannot be identified (use Unauthenticated + // instead for those errors). + PermissionDenied Code = 7 + + // Unauthenticated indicates the request does not have valid + // authentication credentials for the operation. + Unauthenticated Code = 16 + + // ResourceExhausted indicates some resource has been exhausted, perhaps + // a per-user quota, or perhaps the entire file system is out of space. + ResourceExhausted Code = 8 + + // FailedPrecondition indicates operation was rejected because the + // system is not in a state required for the operation's execution. + // For example, directory to be deleted may be non-empty, an rmdir + // operation is applied to a non-directory, etc. + // + // A litmus test that may help a service implementor in deciding + // between FailedPrecondition, Aborted, and Unavailable: + // (a) Use Unavailable if the client can retry just the failing call. + // (b) Use Aborted if the client should retry at a higher-level + // (e.g., restarting a read-modify-write sequence). + // (c) Use FailedPrecondition if the client should not retry until + // the system state has been explicitly fixed. E.g., if an "rmdir" + // fails because the directory is non-empty, FailedPrecondition + // should be returned since the client should not retry unless + // they have first fixed up the directory by deleting files from it. + // (d) Use FailedPrecondition if the client performs conditional + // REST Get/Update/Delete on a resource and the resource on the + // server does not match the condition. E.g., conflicting + // read-modify-write on the same resource. + FailedPrecondition Code = 9 + + // Aborted indicates the operation was aborted, typically due to a + // concurrency issue like sequencer check failures, transaction aborts, + // etc. + // + // See litmus test above for deciding between FailedPrecondition, + // Aborted, and Unavailable. + Aborted Code = 10 + + // OutOfRange means operation was attempted past the valid range. + // E.g., seeking or reading past end of file. + // + // Unlike InvalidArgument, this error indicates a problem that may + // be fixed if the system state changes. For example, a 32-bit file + // system will generate InvalidArgument if asked to read at an + // offset that is not in the range [0,2^32-1], but it will generate + // OutOfRange if asked to read from an offset past the current + // file size. + // + // There is a fair bit of overlap between FailedPrecondition and + // OutOfRange. We recommend using OutOfRange (the more specific + // error) when it applies so that callers who are iterating through + // a space can easily look for an OutOfRange error to detect when + // they are done. + OutOfRange Code = 11 + + // Unimplemented indicates operation is not implemented or not + // supported/enabled in this service. + Unimplemented Code = 12 + + // Internal errors. Means some invariants expected by underlying + // system has been broken. If you see one of these errors, + // something is very broken. + Internal Code = 13 + + // Unavailable indicates the service is currently unavailable. + // This is a most likely a transient condition and may be corrected + // by retrying with a backoff. + // + // See litmus test above for deciding between FailedPrecondition, + // Aborted, and Unavailable. + Unavailable Code = 14 + + // DataLoss indicates unrecoverable data loss or corruption. + DataLoss Code = 15 +) diff --git a/vendor/google.golang.org/grpc/coverage.sh b/vendor/google.golang.org/grpc/coverage.sh new file mode 100755 index 00000000..12023537 --- /dev/null +++ b/vendor/google.golang.org/grpc/coverage.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +set -e + +workdir=.cover +profile="$workdir/cover.out" +mode=set +end2endtest="google.golang.org/grpc/test" + +generate_cover_data() { + rm -rf "$workdir" + mkdir "$workdir" + + for pkg in "$@"; do + if [ $pkg == "google.golang.org/grpc" -o $pkg == "google.golang.org/grpc/transport" -o $pkg == "google.golang.org/grpc/metadata" -o $pkg == "google.golang.org/grpc/credentials" ] + then + f="$workdir/$(echo $pkg | tr / -)" + go test -covermode="$mode" -coverprofile="$f.cover" "$pkg" + go test -covermode="$mode" -coverpkg "$pkg" -coverprofile="$f.e2e.cover" "$end2endtest" + fi + done + + echo "mode: $mode" >"$profile" + grep -h -v "^mode:" "$workdir"/*.cover >>"$profile" +} + +show_cover_report() { + go tool cover -${1}="$profile" +} + +push_to_coveralls() { + goveralls -coverprofile="$profile" +} + +generate_cover_data $(go list ./...) +show_cover_report func +case "$1" in +"") + ;; +--html) + show_cover_report html ;; +--coveralls) + push_to_coveralls ;; +*) + echo >&2 "error: invalid option: $1" ;; +esac +rm -rf "$workdir" diff --git a/vendor/google.golang.org/grpc/credentials/credentials.go b/vendor/google.golang.org/grpc/credentials/credentials.go new file mode 100644 index 00000000..001f134d --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/credentials.go @@ -0,0 +1,213 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package credentials implements various credentials supported by gRPC library, +// which encapsulate all the state needed by a client to authenticate with a +// server and make various assertions, e.g., about the client's identity, role, +// or whether it is authorized to make a particular call. +package credentials + +import ( + "crypto/tls" + "crypto/x509" + "fmt" + "io/ioutil" + "net" + "strings" + + "golang.org/x/net/context" +) + +var ( + // alpnProtoStr are the specified application level protocols for gRPC. + alpnProtoStr = []string{"h2"} +) + +// PerRPCCredentials defines the common interface for the credentials which need to +// attach security information to every RPC (e.g., oauth2). +type PerRPCCredentials interface { + // GetRequestMetadata gets the current request metadata, refreshing + // tokens if required. This should be called by the transport layer on + // each request, and the data should be populated in headers or other + // context. uri is the URI of the entry point for the request. When + // supported by the underlying implementation, ctx can be used for + // timeout and cancellation. + // TODO(zhaoq): Define the set of the qualified keys instead of leaving + // it as an arbitrary string. + GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) + // RequireTransportSecurity indicates whether the credentials requires + // transport security. + RequireTransportSecurity() bool +} + +// ProtocolInfo provides information regarding the gRPC wire protocol version, +// security protocol, security protocol version in use, etc. +type ProtocolInfo struct { + // ProtocolVersion is the gRPC wire protocol version. + ProtocolVersion string + // SecurityProtocol is the security protocol in use. + SecurityProtocol string + // SecurityVersion is the security protocol version. + SecurityVersion string +} + +// AuthInfo defines the common interface for the auth information the users are interested in. +type AuthInfo interface { + AuthType() string +} + +// TransportCredentials defines the common interface for all the live gRPC wire +// protocols and supported transport security protocols (e.g., TLS, SSL). +type TransportCredentials interface { + // ClientHandshake does the authentication handshake specified by the corresponding + // authentication protocol on rawConn for clients. It returns the authenticated + // connection and the corresponding auth information about the connection. + // Implementations must use the provided context to implement timely cancellation. + ClientHandshake(context.Context, string, net.Conn) (net.Conn, AuthInfo, error) + // ServerHandshake does the authentication handshake for servers. It returns + // the authenticated connection and the corresponding auth information about + // the connection. + ServerHandshake(net.Conn) (net.Conn, AuthInfo, error) + // Info provides the ProtocolInfo of this TransportCredentials. + Info() ProtocolInfo +} + +// TLSInfo contains the auth information for a TLS authenticated connection. +// It implements the AuthInfo interface. +type TLSInfo struct { + State tls.ConnectionState +} + +// AuthType returns the type of TLSInfo as a string. +func (t TLSInfo) AuthType() string { + return "tls" +} + +// tlsCreds is the credentials required for authenticating a connection using TLS. +type tlsCreds struct { + // TLS configuration + config *tls.Config +} + +func (c tlsCreds) Info() ProtocolInfo { + return ProtocolInfo{ + SecurityProtocol: "tls", + SecurityVersion: "1.2", + } +} + +// GetRequestMetadata returns nil, nil since TLS credentials does not have +// metadata. +func (c *tlsCreds) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { + return nil, nil +} + +func (c *tlsCreds) RequireTransportSecurity() bool { + return true +} + +func (c *tlsCreds) ClientHandshake(ctx context.Context, addr string, rawConn net.Conn) (_ net.Conn, _ AuthInfo, err error) { + // use local cfg to avoid clobbering ServerName if using multiple endpoints + cfg := cloneTLSConfig(c.config) + if cfg.ServerName == "" { + colonPos := strings.LastIndex(addr, ":") + if colonPos == -1 { + colonPos = len(addr) + } + cfg.ServerName = addr[:colonPos] + } + conn := tls.Client(rawConn, cfg) + errChannel := make(chan error, 1) + go func() { + errChannel <- conn.Handshake() + }() + select { + case err := <-errChannel: + if err != nil { + return nil, nil, err + } + case <-ctx.Done(): + return nil, nil, ctx.Err() + } + // TODO(zhaoq): Omit the auth info for client now. It is more for + // information than anything else. + return conn, nil, nil +} + +func (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) { + conn := tls.Server(rawConn, c.config) + if err := conn.Handshake(); err != nil { + return nil, nil, err + } + return conn, TLSInfo{conn.ConnectionState()}, nil +} + +// NewTLS uses c to construct a TransportCredentials based on TLS. +func NewTLS(c *tls.Config) TransportCredentials { + tc := &tlsCreds{cloneTLSConfig(c)} + tc.config.NextProtos = alpnProtoStr + return tc +} + +// NewClientTLSFromCert constructs a TLS from the input certificate for client. +func NewClientTLSFromCert(cp *x509.CertPool, serverName string) TransportCredentials { + return NewTLS(&tls.Config{ServerName: serverName, RootCAs: cp}) +} + +// NewClientTLSFromFile constructs a TLS from the input certificate file for client. +func NewClientTLSFromFile(certFile, serverName string) (TransportCredentials, error) { + b, err := ioutil.ReadFile(certFile) + if err != nil { + return nil, err + } + cp := x509.NewCertPool() + if !cp.AppendCertsFromPEM(b) { + return nil, fmt.Errorf("credentials: failed to append certificates") + } + return NewTLS(&tls.Config{ServerName: serverName, RootCAs: cp}), nil +} + +// NewServerTLSFromCert constructs a TLS from the input certificate for server. +func NewServerTLSFromCert(cert *tls.Certificate) TransportCredentials { + return NewTLS(&tls.Config{Certificates: []tls.Certificate{*cert}}) +} + +// NewServerTLSFromFile constructs a TLS from the input certificate file and key +// file for server. +func NewServerTLSFromFile(certFile, keyFile string) (TransportCredentials, error) { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return nil, err + } + return NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}), nil +} diff --git a/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go b/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go new file mode 100644 index 00000000..9647b9ec --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/credentials_util_go17.go @@ -0,0 +1,76 @@ +// +build go1.7 + +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package credentials + +import ( + "crypto/tls" +) + +// cloneTLSConfig returns a shallow clone of the exported +// fields of cfg, ignoring the unexported sync.Once, which +// contains a mutex and must not be copied. +// +// If cfg is nil, a new zero tls.Config is returned. +// +// TODO replace this function with official clone function. +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return &tls.Config{ + Rand: cfg.Rand, + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + SessionTicketsDisabled: cfg.SessionTicketsDisabled, + SessionTicketKey: cfg.SessionTicketKey, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + DynamicRecordSizingDisabled: cfg.DynamicRecordSizingDisabled, + Renegotiation: cfg.Renegotiation, + } +} diff --git a/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go b/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go new file mode 100644 index 00000000..09b8d12c --- /dev/null +++ b/vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go @@ -0,0 +1,74 @@ +// +build !go1.7 + +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package credentials + +import ( + "crypto/tls" +) + +// cloneTLSConfig returns a shallow clone of the exported +// fields of cfg, ignoring the unexported sync.Once, which +// contains a mutex and must not be copied. +// +// If cfg is nil, a new zero tls.Config is returned. +// +// TODO replace this function with official clone function. +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return &tls.Config{ + Rand: cfg.Rand, + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + SessionTicketsDisabled: cfg.SessionTicketsDisabled, + SessionTicketKey: cfg.SessionTicketKey, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + } +} diff --git a/vendor/google.golang.org/grpc/doc.go b/vendor/google.golang.org/grpc/doc.go new file mode 100644 index 00000000..b4c0e740 --- /dev/null +++ b/vendor/google.golang.org/grpc/doc.go @@ -0,0 +1,6 @@ +/* +Package grpc implements an RPC system called gRPC. + +See www.grpc.io for more information about gRPC. +*/ +package grpc diff --git a/vendor/google.golang.org/grpc/grpclog/logger.go b/vendor/google.golang.org/grpc/grpclog/logger.go new file mode 100644 index 00000000..2cc09be4 --- /dev/null +++ b/vendor/google.golang.org/grpc/grpclog/logger.go @@ -0,0 +1,93 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* +Package grpclog defines logging for grpc. +*/ +package grpclog + +import ( + "log" + "os" +) + +// Use golang's standard logger by default. +// Access is not mutex-protected: do not modify except in init() +// functions. +var logger Logger = log.New(os.Stderr, "", log.LstdFlags) + +// Logger mimics golang's standard Logger as an interface. +type Logger interface { + Fatal(args ...interface{}) + Fatalf(format string, args ...interface{}) + Fatalln(args ...interface{}) + Print(args ...interface{}) + Printf(format string, args ...interface{}) + Println(args ...interface{}) +} + +// SetLogger sets the logger that is used in grpc. Call only from +// init() functions. +func SetLogger(l Logger) { + logger = l +} + +// Fatal is equivalent to Print() followed by a call to os.Exit() with a non-zero exit code. +func Fatal(args ...interface{}) { + logger.Fatal(args...) +} + +// Fatalf is equivalent to Printf() followed by a call to os.Exit() with a non-zero exit code. +func Fatalf(format string, args ...interface{}) { + logger.Fatalf(format, args...) +} + +// Fatalln is equivalent to Println() followed by a call to os.Exit()) with a non-zero exit code. +func Fatalln(args ...interface{}) { + logger.Fatalln(args...) +} + +// Print prints to the logger. Arguments are handled in the manner of fmt.Print. +func Print(args ...interface{}) { + logger.Print(args...) +} + +// Printf prints to the logger. Arguments are handled in the manner of fmt.Printf. +func Printf(format string, args ...interface{}) { + logger.Printf(format, args...) +} + +// Println prints to the logger. Arguments are handled in the manner of fmt.Println. +func Println(args ...interface{}) { + logger.Println(args...) +} diff --git a/vendor/google.golang.org/grpc/interceptor.go b/vendor/google.golang.org/grpc/interceptor.go new file mode 100644 index 00000000..588f59e5 --- /dev/null +++ b/vendor/google.golang.org/grpc/interceptor.go @@ -0,0 +1,74 @@ +/* + * + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "golang.org/x/net/context" +) + +// UnaryServerInfo consists of various information about a unary RPC on +// server side. All per-rpc information may be mutated by the interceptor. +type UnaryServerInfo struct { + // Server is the service implementation the user provides. This is read-only. + Server interface{} + // FullMethod is the full RPC method string, i.e., /package.service/method. + FullMethod string +} + +// UnaryHandler defines the handler invoked by UnaryServerInterceptor to complete the normal +// execution of a unary RPC. +type UnaryHandler func(ctx context.Context, req interface{}) (interface{}, error) + +// UnaryServerInterceptor provides a hook to intercept the execution of a unary RPC on the server. info +// contains all the information of this RPC the interceptor can operate on. And handler is the wrapper +// of the service method implementation. It is the responsibility of the interceptor to invoke handler +// to complete the RPC. +type UnaryServerInterceptor func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (resp interface{}, err error) + +// StreamServerInfo consists of various information about a streaming RPC on +// server side. All per-rpc information may be mutated by the interceptor. +type StreamServerInfo struct { + // FullMethod is the full RPC method string, i.e., /package.service/method. + FullMethod string + // IsClientStream indicates whether the RPC is a client streaming RPC. + IsClientStream bool + // IsServerStream indicates whether the RPC is a server streaming RPC. + IsServerStream bool +} + +// StreamServerInterceptor provides a hook to intercept the execution of a streaming RPC on the server. +// info contains all the information of this RPC the interceptor can operate on. And handler is the +// service method implementation. It is the responsibility of the interceptor to invoke handler to +// complete the RPC. +type StreamServerInterceptor func(srv interface{}, ss ServerStream, info *StreamServerInfo, handler StreamHandler) error diff --git a/vendor/google.golang.org/grpc/internal/internal.go b/vendor/google.golang.org/grpc/internal/internal.go new file mode 100644 index 00000000..5489143a --- /dev/null +++ b/vendor/google.golang.org/grpc/internal/internal.go @@ -0,0 +1,49 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package internal contains gRPC-internal code for testing, to avoid polluting +// the godoc of the top-level grpc package. +package internal + +// TestingCloseConns closes all existing transports but keeps +// grpcServer.lis accepting new connections. +// +// The provided grpcServer must be of type *grpc.Server. It is untyped +// for circular dependency reasons. +var TestingCloseConns func(grpcServer interface{}) + +// TestingUseHandlerImpl enables the http.Handler-based server implementation. +// It must be called before Serve and requires TLS credentials. +// +// The provided grpcServer must be of type *grpc.Server. It is untyped +// for circular dependency reasons. +var TestingUseHandlerImpl func(grpcServer interface{}) diff --git a/vendor/google.golang.org/grpc/metadata/metadata.go b/vendor/google.golang.org/grpc/metadata/metadata.go new file mode 100644 index 00000000..b3200156 --- /dev/null +++ b/vendor/google.golang.org/grpc/metadata/metadata.go @@ -0,0 +1,140 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package metadata define the structure of the metadata supported by gRPC library. +package metadata + +import ( + "encoding/base64" + "fmt" + "strings" + + "golang.org/x/net/context" +) + +const ( + binHdrSuffix = "-bin" +) + +// encodeKeyValue encodes key and value qualified for transmission via gRPC. +// Transmitting binary headers violates HTTP/2 spec. +// TODO(zhaoq): Maybe check if k is ASCII also. +func encodeKeyValue(k, v string) (string, string) { + k = strings.ToLower(k) + if strings.HasSuffix(k, binHdrSuffix) { + val := base64.StdEncoding.EncodeToString([]byte(v)) + v = string(val) + } + return k, v +} + +// DecodeKeyValue returns the original key and value corresponding to the +// encoded data in k, v. +// If k is a binary header and v contains comma, v is split on comma before decoded, +// and the decoded v will be joined with comma before returned. +func DecodeKeyValue(k, v string) (string, string, error) { + if !strings.HasSuffix(k, binHdrSuffix) { + return k, v, nil + } + vvs := strings.Split(v, ",") + for i, vv := range vvs { + val, err := base64.StdEncoding.DecodeString(vv) + if err != nil { + return "", "", err + } + vvs[i] = string(val) + } + return k, strings.Join(vvs, ","), nil +} + +// MD is a mapping from metadata keys to values. Users should use the following +// two convenience functions New and Pairs to generate MD. +type MD map[string][]string + +// New creates a MD from given key-value map. +func New(m map[string]string) MD { + md := MD{} + for k, v := range m { + key, val := encodeKeyValue(k, v) + md[key] = append(md[key], val) + } + return md +} + +// Pairs returns an MD formed by the mapping of key, value ... +// Pairs panics if len(kv) is odd. +func Pairs(kv ...string) MD { + if len(kv)%2 == 1 { + panic(fmt.Sprintf("metadata: Pairs got the odd number of input pairs for metadata: %d", len(kv))) + } + md := MD{} + var k string + for i, s := range kv { + if i%2 == 0 { + k = s + continue + } + key, val := encodeKeyValue(k, s) + md[key] = append(md[key], val) + } + return md +} + +// Len returns the number of items in md. +func (md MD) Len() int { + return len(md) +} + +// Copy returns a copy of md. +func (md MD) Copy() MD { + out := MD{} + for k, v := range md { + for _, i := range v { + out[k] = append(out[k], i) + } + } + return out +} + +type mdKey struct{} + +// NewContext creates a new context with md attached. +func NewContext(ctx context.Context, md MD) context.Context { + return context.WithValue(ctx, mdKey{}, md) +} + +// FromContext returns the MD in ctx if it exists. +func FromContext(ctx context.Context) (md MD, ok bool) { + md, ok = ctx.Value(mdKey{}).(MD) + return +} diff --git a/vendor/google.golang.org/grpc/naming/naming.go b/vendor/google.golang.org/grpc/naming/naming.go new file mode 100644 index 00000000..c2e0871e --- /dev/null +++ b/vendor/google.golang.org/grpc/naming/naming.go @@ -0,0 +1,74 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package naming defines the naming API and related data structures for gRPC. +// The interface is EXPERIMENTAL and may be suject to change. +package naming + +// Operation defines the corresponding operations for a name resolution change. +type Operation uint8 + +const ( + // Add indicates a new address is added. + Add Operation = iota + // Delete indicates an exisiting address is deleted. + Delete +) + +// Update defines a name resolution update. Notice that it is not valid having both +// empty string Addr and nil Metadata in an Update. +type Update struct { + // Op indicates the operation of the update. + Op Operation + // Addr is the updated address. It is empty string if there is no address update. + Addr string + // Metadata is the updated metadata. It is nil if there is no metadata update. + // Metadata is not required for a custom naming implementation. + Metadata interface{} +} + +// Resolver creates a Watcher for a target to track its resolution changes. +type Resolver interface { + // Resolve creates a Watcher for target. + Resolve(target string) (Watcher, error) +} + +// Watcher watches for the updates on the specified target. +type Watcher interface { + // Next blocks until an update or error happens. It may return one or more + // updates. The first call should get the full set of the results. It should + // return an error if and only if Watcher cannot recover. + Next() ([]*Update, error) + // Close closes the Watcher. + Close() +} diff --git a/vendor/google.golang.org/grpc/peer/peer.go b/vendor/google.golang.org/grpc/peer/peer.go new file mode 100644 index 00000000..bfa6205b --- /dev/null +++ b/vendor/google.golang.org/grpc/peer/peer.go @@ -0,0 +1,65 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// Package peer defines various peer information associated with RPCs and +// corresponding utils. +package peer + +import ( + "net" + + "golang.org/x/net/context" + "google.golang.org/grpc/credentials" +) + +// Peer contains the information of the peer for an RPC. +type Peer struct { + // Addr is the peer address. + Addr net.Addr + // AuthInfo is the authentication information of the transport. + // It is nil if there is no transport security being used. + AuthInfo credentials.AuthInfo +} + +type peerKey struct{} + +// NewContext creates a new context with peer information attached. +func NewContext(ctx context.Context, p *Peer) context.Context { + return context.WithValue(ctx, peerKey{}, p) +} + +// FromContext returns the peer information in ctx if it exists. +func FromContext(ctx context.Context) (p *Peer, ok bool) { + p, ok = ctx.Value(peerKey{}).(*Peer) + return +} diff --git a/vendor/google.golang.org/grpc/rpc_util.go b/vendor/google.golang.org/grpc/rpc_util.go new file mode 100644 index 00000000..35ac9cc7 --- /dev/null +++ b/vendor/google.golang.org/grpc/rpc_util.go @@ -0,0 +1,457 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "compress/gzip" + "encoding/binary" + "fmt" + "io" + "io/ioutil" + "math" + "os" + + "github.com/golang/protobuf/proto" + "golang.org/x/net/context" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/transport" +) + +// Codec defines the interface gRPC uses to encode and decode messages. +type Codec interface { + // Marshal returns the wire format of v. + Marshal(v interface{}) ([]byte, error) + // Unmarshal parses the wire format into v. + Unmarshal(data []byte, v interface{}) error + // String returns the name of the Codec implementation. The returned + // string will be used as part of content type in transmission. + String() string +} + +// protoCodec is a Codec implementation with protobuf. It is the default codec for gRPC. +type protoCodec struct{} + +func (protoCodec) Marshal(v interface{}) ([]byte, error) { + return proto.Marshal(v.(proto.Message)) +} + +func (protoCodec) Unmarshal(data []byte, v interface{}) error { + return proto.Unmarshal(data, v.(proto.Message)) +} + +func (protoCodec) String() string { + return "proto" +} + +// Compressor defines the interface gRPC uses to compress a message. +type Compressor interface { + // Do compresses p into w. + Do(w io.Writer, p []byte) error + // Type returns the compression algorithm the Compressor uses. + Type() string +} + +// NewGZIPCompressor creates a Compressor based on GZIP. +func NewGZIPCompressor() Compressor { + return &gzipCompressor{} +} + +type gzipCompressor struct { +} + +func (c *gzipCompressor) Do(w io.Writer, p []byte) error { + z := gzip.NewWriter(w) + if _, err := z.Write(p); err != nil { + return err + } + return z.Close() +} + +func (c *gzipCompressor) Type() string { + return "gzip" +} + +// Decompressor defines the interface gRPC uses to decompress a message. +type Decompressor interface { + // Do reads the data from r and uncompress them. + Do(r io.Reader) ([]byte, error) + // Type returns the compression algorithm the Decompressor uses. + Type() string +} + +type gzipDecompressor struct { +} + +// NewGZIPDecompressor creates a Decompressor based on GZIP. +func NewGZIPDecompressor() Decompressor { + return &gzipDecompressor{} +} + +func (d *gzipDecompressor) Do(r io.Reader) ([]byte, error) { + z, err := gzip.NewReader(r) + if err != nil { + return nil, err + } + defer z.Close() + return ioutil.ReadAll(z) +} + +func (d *gzipDecompressor) Type() string { + return "gzip" +} + +// callInfo contains all related configuration and information about an RPC. +type callInfo struct { + failFast bool + headerMD metadata.MD + trailerMD metadata.MD + traceInfo traceInfo // in trace.go +} + +var defaultCallInfo = callInfo{failFast: true} + +// CallOption configures a Call before it starts or extracts information from +// a Call after it completes. +type CallOption interface { + // before is called before the call is sent to any server. If before + // returns a non-nil error, the RPC fails with that error. + before(*callInfo) error + + // after is called after the call has completed. after cannot return an + // error, so any failures should be reported via output parameters. + after(*callInfo) +} + +type beforeCall func(c *callInfo) error + +func (o beforeCall) before(c *callInfo) error { return o(c) } +func (o beforeCall) after(c *callInfo) {} + +type afterCall func(c *callInfo) + +func (o afterCall) before(c *callInfo) error { return nil } +func (o afterCall) after(c *callInfo) { o(c) } + +// Header returns a CallOptions that retrieves the header metadata +// for a unary RPC. +func Header(md *metadata.MD) CallOption { + return afterCall(func(c *callInfo) { + *md = c.headerMD + }) +} + +// Trailer returns a CallOptions that retrieves the trailer metadata +// for a unary RPC. +func Trailer(md *metadata.MD) CallOption { + return afterCall(func(c *callInfo) { + *md = c.trailerMD + }) +} + +// FailFast configures the action to take when an RPC is attempted on broken +// connections or unreachable servers. If failfast is true, the RPC will fail +// immediately. Otherwise, the RPC client will block the call until a +// connection is available (or the call is canceled or times out) and will retry +// the call if it fails due to a transient error. Please refer to +// https://github.com/grpc/grpc/blob/master/doc/fail_fast.md +func FailFast(failFast bool) CallOption { + return beforeCall(func(c *callInfo) error { + c.failFast = failFast + return nil + }) +} + +// The format of the payload: compressed or not? +type payloadFormat uint8 + +const ( + compressionNone payloadFormat = iota // no compression + compressionMade +) + +// parser reads complete gRPC messages from the underlying reader. +type parser struct { + // r is the underlying reader. + // See the comment on recvMsg for the permissible + // error types. + r io.Reader + + // The header of a gRPC message. Find more detail + // at http://www.grpc.io/docs/guides/wire.html. + header [5]byte +} + +// recvMsg reads a complete gRPC message from the stream. +// +// It returns the message and its payload (compression/encoding) +// format. The caller owns the returned msg memory. +// +// If there is an error, possible values are: +// * io.EOF, when no messages remain +// * io.ErrUnexpectedEOF +// * of type transport.ConnectionError +// * of type transport.StreamError +// No other error values or types must be returned, which also means +// that the underlying io.Reader must not return an incompatible +// error. +func (p *parser) recvMsg(maxMsgSize int) (pf payloadFormat, msg []byte, err error) { + if _, err := io.ReadFull(p.r, p.header[:]); err != nil { + return 0, nil, err + } + + pf = payloadFormat(p.header[0]) + length := binary.BigEndian.Uint32(p.header[1:]) + + if length == 0 { + return pf, nil, nil + } + if length > uint32(maxMsgSize) { + return 0, nil, Errorf(codes.Internal, "grpc: received message length %d exceeding the max size %d", length, maxMsgSize) + } + // TODO(bradfitz,zhaoq): garbage. reuse buffer after proto decoding instead + // of making it for each message: + msg = make([]byte, int(length)) + if _, err := io.ReadFull(p.r, msg); err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return 0, nil, err + } + return pf, msg, nil +} + +// encode serializes msg and prepends the message header. If msg is nil, it +// generates the message header of 0 message length. +func encode(c Codec, msg interface{}, cp Compressor, cbuf *bytes.Buffer) ([]byte, error) { + var b []byte + var length uint + if msg != nil { + var err error + // TODO(zhaoq): optimize to reduce memory alloc and copying. + b, err = c.Marshal(msg) + if err != nil { + return nil, err + } + if cp != nil { + if err := cp.Do(cbuf, b); err != nil { + return nil, err + } + b = cbuf.Bytes() + } + length = uint(len(b)) + } + if length > math.MaxUint32 { + return nil, Errorf(codes.InvalidArgument, "grpc: message too large (%d bytes)", length) + } + + const ( + payloadLen = 1 + sizeLen = 4 + ) + + var buf = make([]byte, payloadLen+sizeLen+len(b)) + + // Write payload format + if cp == nil { + buf[0] = byte(compressionNone) + } else { + buf[0] = byte(compressionMade) + } + // Write length of b into buf + binary.BigEndian.PutUint32(buf[1:], uint32(length)) + // Copy encoded msg to buf + copy(buf[5:], b) + + return buf, nil +} + +func checkRecvPayload(pf payloadFormat, recvCompress string, dc Decompressor) error { + switch pf { + case compressionNone: + case compressionMade: + if dc == nil || recvCompress != dc.Type() { + return transport.StreamErrorf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress) + } + default: + return transport.StreamErrorf(codes.Internal, "grpc: received unexpected payload format %d", pf) + } + return nil +} + +func recv(p *parser, c Codec, s *transport.Stream, dc Decompressor, m interface{}, maxMsgSize int) error { + pf, d, err := p.recvMsg(maxMsgSize) + if err != nil { + return err + } + if err := checkRecvPayload(pf, s.RecvCompress(), dc); err != nil { + return err + } + if pf == compressionMade { + d, err = dc.Do(bytes.NewReader(d)) + if err != nil { + return Errorf(codes.Internal, "grpc: failed to decompress the received message %v", err) + } + } + if len(d) > maxMsgSize { + // TODO: Revisit the error code. Currently keep it consistent with java + // implementation. + return Errorf(codes.Internal, "grpc: received a message of %d bytes exceeding %d limit", len(d), maxMsgSize) + } + if err := c.Unmarshal(d, m); err != nil { + return Errorf(codes.Internal, "grpc: failed to unmarshal the received message %v", err) + } + return nil +} + +// rpcError defines the status from an RPC. +type rpcError struct { + code codes.Code + desc string +} + +func (e *rpcError) Error() string { + return fmt.Sprintf("rpc error: code = %d desc = %s", e.code, e.desc) +} + +// Code returns the error code for err if it was produced by the rpc system. +// Otherwise, it returns codes.Unknown. +func Code(err error) codes.Code { + if err == nil { + return codes.OK + } + if e, ok := err.(*rpcError); ok { + return e.code + } + return codes.Unknown +} + +// ErrorDesc returns the error description of err if it was produced by the rpc system. +// Otherwise, it returns err.Error() or empty string when err is nil. +func ErrorDesc(err error) string { + if err == nil { + return "" + } + if e, ok := err.(*rpcError); ok { + return e.desc + } + return err.Error() +} + +// Errorf returns an error containing an error code and a description; +// Errorf returns nil if c is OK. +func Errorf(c codes.Code, format string, a ...interface{}) error { + if c == codes.OK { + return nil + } + return &rpcError{ + code: c, + desc: fmt.Sprintf(format, a...), + } +} + +// toRPCErr converts an error into a rpcError. +func toRPCErr(err error) error { + switch e := err.(type) { + case *rpcError: + return err + case transport.StreamError: + return &rpcError{ + code: e.Code, + desc: e.Desc, + } + case transport.ConnectionError: + return &rpcError{ + code: codes.Internal, + desc: e.Desc, + } + default: + switch err { + case context.DeadlineExceeded: + return &rpcError{ + code: codes.DeadlineExceeded, + desc: err.Error(), + } + case context.Canceled: + return &rpcError{ + code: codes.Canceled, + desc: err.Error(), + } + case ErrClientConnClosing: + return &rpcError{ + code: codes.FailedPrecondition, + desc: err.Error(), + } + } + + } + return Errorf(codes.Unknown, "%v", err) +} + +// convertCode converts a standard Go error into its canonical code. Note that +// this is only used to translate the error returned by the server applications. +func convertCode(err error) codes.Code { + switch err { + case nil: + return codes.OK + case io.EOF: + return codes.OutOfRange + case io.ErrClosedPipe, io.ErrNoProgress, io.ErrShortBuffer, io.ErrShortWrite, io.ErrUnexpectedEOF: + return codes.FailedPrecondition + case os.ErrInvalid: + return codes.InvalidArgument + case context.Canceled: + return codes.Canceled + case context.DeadlineExceeded: + return codes.DeadlineExceeded + } + switch { + case os.IsExist(err): + return codes.AlreadyExists + case os.IsNotExist(err): + return codes.NotFound + case os.IsPermission(err): + return codes.PermissionDenied + } + return codes.Unknown +} + +// SupportPackageIsVersion3 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the grpc package. +// +// This constant may be renamed in the future if a change in the generated code +// requires a synchronised update of grpc-go and protoc-gen-go. This constant +// should not be referenced from any other code. +const SupportPackageIsVersion3 = true diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go new file mode 100644 index 00000000..1ed8aac9 --- /dev/null +++ b/vendor/google.golang.org/grpc/server.go @@ -0,0 +1,894 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "errors" + "fmt" + "io" + "net" + "net/http" + "reflect" + "runtime" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "golang.org/x/net/trace" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/internal" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/transport" +) + +type methodHandler func(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor UnaryServerInterceptor) (interface{}, error) + +// MethodDesc represents an RPC service's method specification. +type MethodDesc struct { + MethodName string + Handler methodHandler +} + +// ServiceDesc represents an RPC service's specification. +type ServiceDesc struct { + ServiceName string + // The pointer to the service interface. Used to check whether the user + // provided implementation satisfies the interface requirements. + HandlerType interface{} + Methods []MethodDesc + Streams []StreamDesc + Metadata interface{} +} + +// service consists of the information of the server serving this service and +// the methods in this service. +type service struct { + server interface{} // the server for service methods + md map[string]*MethodDesc + sd map[string]*StreamDesc + mdata interface{} +} + +// Server is a gRPC server to serve RPC requests. +type Server struct { + opts options + + mu sync.Mutex // guards following + lis map[net.Listener]bool + conns map[io.Closer]bool + drain bool + // A CondVar to let GracefulStop() blocks until all the pending RPCs are finished + // and all the transport goes away. + cv *sync.Cond + m map[string]*service // service name -> service info + events trace.EventLog +} + +type options struct { + creds credentials.TransportCredentials + codec Codec + cp Compressor + dc Decompressor + maxMsgSize int + unaryInt UnaryServerInterceptor + streamInt StreamServerInterceptor + maxConcurrentStreams uint32 + useHandlerImpl bool // use http.Handler-based server +} + +var defaultMaxMsgSize = 1024 * 1024 * 4 // use 4MB as the default message size limit + +// A ServerOption sets options. +type ServerOption func(*options) + +// CustomCodec returns a ServerOption that sets a codec for message marshaling and unmarshaling. +func CustomCodec(codec Codec) ServerOption { + return func(o *options) { + o.codec = codec + } +} + +// RPCCompressor returns a ServerOption that sets a compressor for outbound messages. +func RPCCompressor(cp Compressor) ServerOption { + return func(o *options) { + o.cp = cp + } +} + +// RPCDecompressor returns a ServerOption that sets a decompressor for inbound messages. +func RPCDecompressor(dc Decompressor) ServerOption { + return func(o *options) { + o.dc = dc + } +} + +// MaxMsgSize returns a ServerOption to set the max message size in bytes for inbound mesages. +// If this is not set, gRPC uses the default 4MB. +func MaxMsgSize(m int) ServerOption { + return func(o *options) { + o.maxMsgSize = m + } +} + +// MaxConcurrentStreams returns a ServerOption that will apply a limit on the number +// of concurrent streams to each ServerTransport. +func MaxConcurrentStreams(n uint32) ServerOption { + return func(o *options) { + o.maxConcurrentStreams = n + } +} + +// Creds returns a ServerOption that sets credentials for server connections. +func Creds(c credentials.TransportCredentials) ServerOption { + return func(o *options) { + o.creds = c + } +} + +// UnaryInterceptor returns a ServerOption that sets the UnaryServerInterceptor for the +// server. Only one unary interceptor can be installed. The construction of multiple +// interceptors (e.g., chaining) can be implemented at the caller. +func UnaryInterceptor(i UnaryServerInterceptor) ServerOption { + return func(o *options) { + if o.unaryInt != nil { + panic("The unary server interceptor has been set.") + } + o.unaryInt = i + } +} + +// StreamInterceptor returns a ServerOption that sets the StreamServerInterceptor for the +// server. Only one stream interceptor can be installed. +func StreamInterceptor(i StreamServerInterceptor) ServerOption { + return func(o *options) { + if o.streamInt != nil { + panic("The stream server interceptor has been set.") + } + o.streamInt = i + } +} + +// NewServer creates a gRPC server which has no service registered and has not +// started to accept requests yet. +func NewServer(opt ...ServerOption) *Server { + var opts options + opts.maxMsgSize = defaultMaxMsgSize + for _, o := range opt { + o(&opts) + } + if opts.codec == nil { + // Set the default codec. + opts.codec = protoCodec{} + } + s := &Server{ + lis: make(map[net.Listener]bool), + opts: opts, + conns: make(map[io.Closer]bool), + m: make(map[string]*service), + } + s.cv = sync.NewCond(&s.mu) + if EnableTracing { + _, file, line, _ := runtime.Caller(1) + s.events = trace.NewEventLog("grpc.Server", fmt.Sprintf("%s:%d", file, line)) + } + return s +} + +// printf records an event in s's event log, unless s has been stopped. +// REQUIRES s.mu is held. +func (s *Server) printf(format string, a ...interface{}) { + if s.events != nil { + s.events.Printf(format, a...) + } +} + +// errorf records an error in s's event log, unless s has been stopped. +// REQUIRES s.mu is held. +func (s *Server) errorf(format string, a ...interface{}) { + if s.events != nil { + s.events.Errorf(format, a...) + } +} + +// RegisterService register a service and its implementation to the gRPC +// server. Called from the IDL generated code. This must be called before +// invoking Serve. +func (s *Server) RegisterService(sd *ServiceDesc, ss interface{}) { + ht := reflect.TypeOf(sd.HandlerType).Elem() + st := reflect.TypeOf(ss) + if !st.Implements(ht) { + grpclog.Fatalf("grpc: Server.RegisterService found the handler of type %v that does not satisfy %v", st, ht) + } + s.register(sd, ss) +} + +func (s *Server) register(sd *ServiceDesc, ss interface{}) { + s.mu.Lock() + defer s.mu.Unlock() + s.printf("RegisterService(%q)", sd.ServiceName) + if _, ok := s.m[sd.ServiceName]; ok { + grpclog.Fatalf("grpc: Server.RegisterService found duplicate service registration for %q", sd.ServiceName) + } + srv := &service{ + server: ss, + md: make(map[string]*MethodDesc), + sd: make(map[string]*StreamDesc), + mdata: sd.Metadata, + } + for i := range sd.Methods { + d := &sd.Methods[i] + srv.md[d.MethodName] = d + } + for i := range sd.Streams { + d := &sd.Streams[i] + srv.sd[d.StreamName] = d + } + s.m[sd.ServiceName] = srv +} + +// MethodInfo contains the information of an RPC including its method name and type. +type MethodInfo struct { + // Name is the method name only, without the service name or package name. + Name string + // IsClientStream indicates whether the RPC is a client streaming RPC. + IsClientStream bool + // IsServerStream indicates whether the RPC is a server streaming RPC. + IsServerStream bool +} + +// ServiceInfo contains unary RPC method info, streaming RPC methid info and metadata for a service. +type ServiceInfo struct { + Methods []MethodInfo + // Metadata is the metadata specified in ServiceDesc when registering service. + Metadata interface{} +} + +// GetServiceInfo returns a map from service names to ServiceInfo. +// Service names include the package names, in the form of .. +func (s *Server) GetServiceInfo() map[string]ServiceInfo { + ret := make(map[string]ServiceInfo) + for n, srv := range s.m { + methods := make([]MethodInfo, 0, len(srv.md)+len(srv.sd)) + for m := range srv.md { + methods = append(methods, MethodInfo{ + Name: m, + IsClientStream: false, + IsServerStream: false, + }) + } + for m, d := range srv.sd { + methods = append(methods, MethodInfo{ + Name: m, + IsClientStream: d.ClientStreams, + IsServerStream: d.ServerStreams, + }) + } + + ret[n] = ServiceInfo{ + Methods: methods, + Metadata: srv.mdata, + } + } + return ret +} + +var ( + // ErrServerStopped indicates that the operation is now illegal because of + // the server being stopped. + ErrServerStopped = errors.New("grpc: the server has been stopped") +) + +func (s *Server) useTransportAuthenticator(rawConn net.Conn) (net.Conn, credentials.AuthInfo, error) { + if s.opts.creds == nil { + return rawConn, nil, nil + } + return s.opts.creds.ServerHandshake(rawConn) +} + +// Serve accepts incoming connections on the listener lis, creating a new +// ServerTransport and service goroutine for each. The service goroutines +// read gRPC requests and then call the registered handlers to reply to them. +// Service returns when lis.Accept fails. lis will be closed when +// this method returns. +func (s *Server) Serve(lis net.Listener) error { + s.mu.Lock() + s.printf("serving") + if s.lis == nil { + s.mu.Unlock() + lis.Close() + return ErrServerStopped + } + s.lis[lis] = true + s.mu.Unlock() + defer func() { + s.mu.Lock() + if s.lis != nil && s.lis[lis] { + lis.Close() + delete(s.lis, lis) + } + s.mu.Unlock() + }() + for { + rawConn, err := lis.Accept() + if err != nil { + s.mu.Lock() + s.printf("done serving; Accept = %v", err) + s.mu.Unlock() + return err + } + // Start a new goroutine to deal with rawConn + // so we don't stall this Accept loop goroutine. + go s.handleRawConn(rawConn) + } +} + +// handleRawConn is run in its own goroutine and handles a just-accepted +// connection that has not had any I/O performed on it yet. +func (s *Server) handleRawConn(rawConn net.Conn) { + conn, authInfo, err := s.useTransportAuthenticator(rawConn) + if err != nil { + s.mu.Lock() + s.errorf("ServerHandshake(%q) failed: %v", rawConn.RemoteAddr(), err) + s.mu.Unlock() + grpclog.Printf("grpc: Server.Serve failed to complete security handshake from %q: %v", rawConn.RemoteAddr(), err) + rawConn.Close() + return + } + + s.mu.Lock() + if s.conns == nil { + s.mu.Unlock() + conn.Close() + return + } + s.mu.Unlock() + + if s.opts.useHandlerImpl { + s.serveUsingHandler(conn) + } else { + s.serveNewHTTP2Transport(conn, authInfo) + } +} + +// serveNewHTTP2Transport sets up a new http/2 transport (using the +// gRPC http2 server transport in transport/http2_server.go) and +// serves streams on it. +// This is run in its own goroutine (it does network I/O in +// transport.NewServerTransport). +func (s *Server) serveNewHTTP2Transport(c net.Conn, authInfo credentials.AuthInfo) { + st, err := transport.NewServerTransport("http2", c, s.opts.maxConcurrentStreams, authInfo) + if err != nil { + s.mu.Lock() + s.errorf("NewServerTransport(%q) failed: %v", c.RemoteAddr(), err) + s.mu.Unlock() + c.Close() + grpclog.Println("grpc: Server.Serve failed to create ServerTransport: ", err) + return + } + if !s.addConn(st) { + st.Close() + return + } + s.serveStreams(st) +} + +func (s *Server) serveStreams(st transport.ServerTransport) { + defer s.removeConn(st) + defer st.Close() + var wg sync.WaitGroup + st.HandleStreams(func(stream *transport.Stream) { + wg.Add(1) + go func() { + defer wg.Done() + s.handleStream(st, stream, s.traceInfo(st, stream)) + }() + }) + wg.Wait() +} + +var _ http.Handler = (*Server)(nil) + +// serveUsingHandler is called from handleRawConn when s is configured +// to handle requests via the http.Handler interface. It sets up a +// net/http.Server to handle the just-accepted conn. The http.Server +// is configured to route all incoming requests (all HTTP/2 streams) +// to ServeHTTP, which creates a new ServerTransport for each stream. +// serveUsingHandler blocks until conn closes. +// +// This codepath is only used when Server.TestingUseHandlerImpl has +// been configured. This lets the end2end tests exercise the ServeHTTP +// method as one of the environment types. +// +// conn is the *tls.Conn that's already been authenticated. +func (s *Server) serveUsingHandler(conn net.Conn) { + if !s.addConn(conn) { + conn.Close() + return + } + defer s.removeConn(conn) + h2s := &http2.Server{ + MaxConcurrentStreams: s.opts.maxConcurrentStreams, + } + h2s.ServeConn(conn, &http2.ServeConnOpts{ + Handler: s, + }) +} + +func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { + st, err := transport.NewServerHandlerTransport(w, r) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + if !s.addConn(st) { + st.Close() + return + } + defer s.removeConn(st) + s.serveStreams(st) +} + +// traceInfo returns a traceInfo and associates it with stream, if tracing is enabled. +// If tracing is not enabled, it returns nil. +func (s *Server) traceInfo(st transport.ServerTransport, stream *transport.Stream) (trInfo *traceInfo) { + if !EnableTracing { + return nil + } + trInfo = &traceInfo{ + tr: trace.New("grpc.Recv."+methodFamily(stream.Method()), stream.Method()), + } + trInfo.firstLine.client = false + trInfo.firstLine.remoteAddr = st.RemoteAddr() + stream.TraceContext(trInfo.tr) + if dl, ok := stream.Context().Deadline(); ok { + trInfo.firstLine.deadline = dl.Sub(time.Now()) + } + return trInfo +} + +func (s *Server) addConn(c io.Closer) bool { + s.mu.Lock() + defer s.mu.Unlock() + if s.conns == nil || s.drain { + return false + } + s.conns[c] = true + return true +} + +func (s *Server) removeConn(c io.Closer) { + s.mu.Lock() + defer s.mu.Unlock() + if s.conns != nil { + delete(s.conns, c) + s.cv.Signal() + } +} + +func (s *Server) sendResponse(t transport.ServerTransport, stream *transport.Stream, msg interface{}, cp Compressor, opts *transport.Options) error { + var cbuf *bytes.Buffer + if cp != nil { + cbuf = new(bytes.Buffer) + } + p, err := encode(s.opts.codec, msg, cp, cbuf) + if err != nil { + // This typically indicates a fatal issue (e.g., memory + // corruption or hardware faults) the application program + // cannot handle. + // + // TODO(zhaoq): There exist other options also such as only closing the + // faulty stream locally and remotely (Other streams can keep going). Find + // the optimal option. + grpclog.Fatalf("grpc: Server failed to encode response %v", err) + } + return t.Write(stream, p, opts) +} + +func (s *Server) processUnaryRPC(t transport.ServerTransport, stream *transport.Stream, srv *service, md *MethodDesc, trInfo *traceInfo) (err error) { + if trInfo != nil { + defer trInfo.tr.Finish() + trInfo.firstLine.client = false + trInfo.tr.LazyLog(&trInfo.firstLine, false) + defer func() { + if err != nil && err != io.EOF { + trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.SetError() + } + }() + } + if s.opts.cp != nil { + // NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. + stream.SetSendCompress(s.opts.cp.Type()) + } + p := &parser{r: stream} + for { + pf, req, err := p.recvMsg(s.opts.maxMsgSize) + if err == io.EOF { + // The entire stream is done (for unary RPC only). + return err + } + if err == io.ErrUnexpectedEOF { + err = transport.StreamError{Code: codes.Internal, Desc: "io.ErrUnexpectedEOF"} + } + if err != nil { + switch err := err.(type) { + case *rpcError: + if err := t.WriteStatus(stream, err.code, err.desc); err != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", err) + } + case transport.ConnectionError: + // Nothing to do here. + case transport.StreamError: + if err := t.WriteStatus(stream, err.Code, err.Desc); err != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", err) + } + default: + panic(fmt.Sprintf("grpc: Unexpected error (%T) from recvMsg: %v", err, err)) + } + return err + } + + if err := checkRecvPayload(pf, stream.RecvCompress(), s.opts.dc); err != nil { + switch err := err.(type) { + case transport.StreamError: + if err := t.WriteStatus(stream, err.Code, err.Desc); err != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", err) + } + default: + if err := t.WriteStatus(stream, codes.Internal, err.Error()); err != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", err) + } + + } + return err + } + statusCode := codes.OK + statusDesc := "" + df := func(v interface{}) error { + if pf == compressionMade { + var err error + req, err = s.opts.dc.Do(bytes.NewReader(req)) + if err != nil { + if err := t.WriteStatus(stream, codes.Internal, err.Error()); err != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status %v", err) + } + return err + } + } + if len(req) > s.opts.maxMsgSize { + // TODO: Revisit the error code. Currently keep it consistent with + // java implementation. + statusCode = codes.Internal + statusDesc = fmt.Sprintf("grpc: server received a message of %d bytes exceeding %d limit", len(req), s.opts.maxMsgSize) + } + if err := s.opts.codec.Unmarshal(req, v); err != nil { + return err + } + if trInfo != nil { + trInfo.tr.LazyLog(&payload{sent: false, msg: v}, true) + } + return nil + } + reply, appErr := md.Handler(srv.server, stream.Context(), df, s.opts.unaryInt) + if appErr != nil { + if err, ok := appErr.(*rpcError); ok { + statusCode = err.code + statusDesc = err.desc + } else { + statusCode = convertCode(appErr) + statusDesc = appErr.Error() + } + if trInfo != nil && statusCode != codes.OK { + trInfo.tr.LazyLog(stringer(statusDesc), true) + trInfo.tr.SetError() + } + if err := t.WriteStatus(stream, statusCode, statusDesc); err != nil { + grpclog.Printf("grpc: Server.processUnaryRPC failed to write status: %v", err) + return err + } + return nil + } + if trInfo != nil { + trInfo.tr.LazyLog(stringer("OK"), false) + } + opts := &transport.Options{ + Last: true, + Delay: false, + } + if err := s.sendResponse(t, stream, reply, s.opts.cp, opts); err != nil { + switch err := err.(type) { + case transport.ConnectionError: + // Nothing to do here. + case transport.StreamError: + statusCode = err.Code + statusDesc = err.Desc + default: + statusCode = codes.Unknown + statusDesc = err.Error() + } + return err + } + if trInfo != nil { + trInfo.tr.LazyLog(&payload{sent: true, msg: reply}, true) + } + return t.WriteStatus(stream, statusCode, statusDesc) + } +} + +func (s *Server) processStreamingRPC(t transport.ServerTransport, stream *transport.Stream, srv *service, sd *StreamDesc, trInfo *traceInfo) (err error) { + if s.opts.cp != nil { + stream.SetSendCompress(s.opts.cp.Type()) + } + ss := &serverStream{ + t: t, + s: stream, + p: &parser{r: stream}, + codec: s.opts.codec, + cp: s.opts.cp, + dc: s.opts.dc, + maxMsgSize: s.opts.maxMsgSize, + trInfo: trInfo, + } + if ss.cp != nil { + ss.cbuf = new(bytes.Buffer) + } + if trInfo != nil { + trInfo.tr.LazyLog(&trInfo.firstLine, false) + defer func() { + ss.mu.Lock() + if err != nil && err != io.EOF { + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.SetError() + } + ss.trInfo.tr.Finish() + ss.trInfo.tr = nil + ss.mu.Unlock() + }() + } + var appErr error + if s.opts.streamInt == nil { + appErr = sd.Handler(srv.server, ss) + } else { + info := &StreamServerInfo{ + FullMethod: stream.Method(), + IsClientStream: sd.ClientStreams, + IsServerStream: sd.ServerStreams, + } + appErr = s.opts.streamInt(srv.server, ss, info, sd.Handler) + } + if appErr != nil { + if err, ok := appErr.(*rpcError); ok { + ss.statusCode = err.code + ss.statusDesc = err.desc + } else if err, ok := appErr.(transport.StreamError); ok { + ss.statusCode = err.Code + ss.statusDesc = err.Desc + } else { + ss.statusCode = convertCode(appErr) + ss.statusDesc = appErr.Error() + } + } + if trInfo != nil { + ss.mu.Lock() + if ss.statusCode != codes.OK { + ss.trInfo.tr.LazyLog(stringer(ss.statusDesc), true) + ss.trInfo.tr.SetError() + } else { + ss.trInfo.tr.LazyLog(stringer("OK"), false) + } + ss.mu.Unlock() + } + return t.WriteStatus(ss.s, ss.statusCode, ss.statusDesc) + +} + +func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Stream, trInfo *traceInfo) { + sm := stream.Method() + if sm != "" && sm[0] == '/' { + sm = sm[1:] + } + pos := strings.LastIndex(sm, "/") + if pos == -1 { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"Malformed method name %q", []interface{}{sm}}, true) + trInfo.tr.SetError() + } + if err := t.WriteStatus(stream, codes.InvalidArgument, fmt.Sprintf("malformed method name: %q", stream.Method())); err != nil { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.SetError() + } + grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + } + if trInfo != nil { + trInfo.tr.Finish() + } + return + } + service := sm[:pos] + method := sm[pos+1:] + srv, ok := s.m[service] + if !ok { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"Unknown service %v", []interface{}{service}}, true) + trInfo.tr.SetError() + } + if err := t.WriteStatus(stream, codes.Unimplemented, fmt.Sprintf("unknown service %v", service)); err != nil { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.SetError() + } + grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + } + if trInfo != nil { + trInfo.tr.Finish() + } + return + } + // Unary RPC or Streaming RPC? + if md, ok := srv.md[method]; ok { + s.processUnaryRPC(t, stream, srv, md, trInfo) + return + } + if sd, ok := srv.sd[method]; ok { + s.processStreamingRPC(t, stream, srv, sd, trInfo) + return + } + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"Unknown method %v", []interface{}{method}}, true) + trInfo.tr.SetError() + } + if err := t.WriteStatus(stream, codes.Unimplemented, fmt.Sprintf("unknown method %v", method)); err != nil { + if trInfo != nil { + trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + trInfo.tr.SetError() + } + grpclog.Printf("grpc: Server.handleStream failed to write status: %v", err) + } + if trInfo != nil { + trInfo.tr.Finish() + } +} + +// Stop stops the gRPC server. It immediately closes all open +// connections and listeners. +// It cancels all active RPCs on the server side and the corresponding +// pending RPCs on the client side will get notified by connection +// errors. +func (s *Server) Stop() { + s.mu.Lock() + listeners := s.lis + s.lis = nil + st := s.conns + s.conns = nil + // interrupt GracefulStop if Stop and GracefulStop are called concurrently. + s.cv.Signal() + s.mu.Unlock() + + for lis := range listeners { + lis.Close() + } + for c := range st { + c.Close() + } + + s.mu.Lock() + if s.events != nil { + s.events.Finish() + s.events = nil + } + s.mu.Unlock() +} + +// GracefulStop stops the gRPC server gracefully. It stops the server to accept new +// connections and RPCs and blocks until all the pending RPCs are finished. +func (s *Server) GracefulStop() { + s.mu.Lock() + defer s.mu.Unlock() + if s.drain == true || s.conns == nil { + return + } + s.drain = true + for lis := range s.lis { + lis.Close() + } + s.lis = nil + for c := range s.conns { + c.(transport.ServerTransport).Drain() + } + for len(s.conns) != 0 { + s.cv.Wait() + } + s.conns = nil + if s.events != nil { + s.events.Finish() + s.events = nil + } +} + +func init() { + internal.TestingCloseConns = func(arg interface{}) { + arg.(*Server).testingCloseConns() + } + internal.TestingUseHandlerImpl = func(arg interface{}) { + arg.(*Server).opts.useHandlerImpl = true + } +} + +// testingCloseConns closes all existing transports but keeps s.lis +// accepting new connections. +func (s *Server) testingCloseConns() { + s.mu.Lock() + for c := range s.conns { + c.Close() + delete(s.conns, c) + } + s.mu.Unlock() +} + +// SendHeader sends header metadata. It may be called at most once from a unary +// RPC handler. The ctx is the RPC handler's Context or one derived from it. +func SendHeader(ctx context.Context, md metadata.MD) error { + if md.Len() == 0 { + return nil + } + stream, ok := transport.StreamFromContext(ctx) + if !ok { + return fmt.Errorf("grpc: failed to fetch the stream from the context %v", ctx) + } + t := stream.ServerTransport() + if t == nil { + grpclog.Fatalf("grpc: SendHeader: %v has no ServerTransport to send header metadata.", stream) + } + return t.WriteHeader(stream, md) +} + +// SetTrailer sets the trailer metadata that will be sent when an RPC returns. +// It may be called at most once from a unary RPC handler. The ctx is the RPC +// handler's Context or one derived from it. +func SetTrailer(ctx context.Context, md metadata.MD) error { + if md.Len() == 0 { + return nil + } + stream, ok := transport.StreamFromContext(ctx) + if !ok { + return fmt.Errorf("grpc: failed to fetch the stream from the context %v", ctx) + } + return stream.SetTrailer(md) +} diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go new file mode 100644 index 00000000..51df3f01 --- /dev/null +++ b/vendor/google.golang.org/grpc/stream.go @@ -0,0 +1,493 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "errors" + "io" + "math" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/trace" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/transport" +) + +// StreamHandler defines the handler called by gRPC server to complete the +// execution of a streaming RPC. +type StreamHandler func(srv interface{}, stream ServerStream) error + +// StreamDesc represents a streaming RPC service's method specification. +type StreamDesc struct { + StreamName string + Handler StreamHandler + + // At least one of these is true. + ServerStreams bool + ClientStreams bool +} + +// Stream defines the common interface a client or server stream has to satisfy. +type Stream interface { + // Context returns the context for this stream. + Context() context.Context + // SendMsg blocks until it sends m, the stream is done or the stream + // breaks. + // On error, it aborts the stream and returns an RPC status on client + // side. On server side, it simply returns the error to the caller. + // SendMsg is called by generated code. Also Users can call SendMsg + // directly when it is really needed in their use cases. + SendMsg(m interface{}) error + // RecvMsg blocks until it receives a message or the stream is + // done. On client side, it returns io.EOF when the stream is done. On + // any other error, it aborts the stream and returns an RPC status. On + // server side, it simply returns the error to the caller. + RecvMsg(m interface{}) error +} + +// ClientStream defines the interface a client stream has to satisfy. +type ClientStream interface { + // Header returns the header metadata received from the server if there + // is any. It blocks if the metadata is not ready to read. + Header() (metadata.MD, error) + // Trailer returns the trailer metadata from the server, if there is any. + // It must only be called after stream.CloseAndRecv has returned, or + // stream.Recv has returned a non-nil error (including io.EOF). + Trailer() metadata.MD + // CloseSend closes the send direction of the stream. It closes the stream + // when non-nil error is met. + CloseSend() error + Stream +} + +// NewClientStream creates a new Stream for the client side. This is called +// by generated code. +func NewClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, opts ...CallOption) (_ ClientStream, err error) { + var ( + t transport.ClientTransport + s *transport.Stream + put func() + ) + c := defaultCallInfo + for _, o := range opts { + if err := o.before(&c); err != nil { + return nil, toRPCErr(err) + } + } + callHdr := &transport.CallHdr{ + Host: cc.authority, + Method: method, + Flush: desc.ServerStreams && desc.ClientStreams, + } + if cc.dopts.cp != nil { + callHdr.SendCompress = cc.dopts.cp.Type() + } + var trInfo traceInfo + if EnableTracing { + trInfo.tr = trace.New("grpc.Sent."+methodFamily(method), method) + trInfo.firstLine.client = true + if deadline, ok := ctx.Deadline(); ok { + trInfo.firstLine.deadline = deadline.Sub(time.Now()) + } + trInfo.tr.LazyLog(&trInfo.firstLine, false) + ctx = trace.NewContext(ctx, trInfo.tr) + defer func() { + if err != nil { + // Need to call tr.finish() if error is returned. + // Because tr will not be returned to caller. + trInfo.tr.LazyPrintf("RPC: [%v]", err) + trInfo.tr.SetError() + trInfo.tr.Finish() + } + }() + } + gopts := BalancerGetOptions{ + BlockingWait: !c.failFast, + } + for { + t, put, err = cc.getTransport(ctx, gopts) + if err != nil { + // TODO(zhaoq): Probably revisit the error handling. + if _, ok := err.(*rpcError); ok { + return nil, err + } + if err == errConnClosing || err == errConnUnavailable { + if c.failFast { + return nil, Errorf(codes.Unavailable, "%v", err) + } + continue + } + // All the other errors are treated as Internal errors. + return nil, Errorf(codes.Internal, "%v", err) + } + + s, err = t.NewStream(ctx, callHdr) + if err != nil { + if put != nil { + put() + put = nil + } + if _, ok := err.(transport.ConnectionError); ok || err == transport.ErrStreamDrain { + if c.failFast { + return nil, toRPCErr(err) + } + continue + } + return nil, toRPCErr(err) + } + break + } + cs := &clientStream{ + opts: opts, + c: c, + desc: desc, + codec: cc.dopts.codec, + cp: cc.dopts.cp, + dc: cc.dopts.dc, + + put: put, + t: t, + s: s, + p: &parser{r: s}, + + tracing: EnableTracing, + trInfo: trInfo, + } + if cc.dopts.cp != nil { + cs.cbuf = new(bytes.Buffer) + } + // Listen on ctx.Done() to detect cancellation and s.Done() to detect normal termination + // when there is no pending I/O operations on this stream. + go func() { + select { + case <-t.Error(): + // Incur transport error, simply exit. + case <-s.Done(): + // TODO: The trace of the RPC is terminated here when there is no pending + // I/O, which is probably not the optimal solution. + if s.StatusCode() == codes.OK { + cs.finish(nil) + } else { + cs.finish(Errorf(s.StatusCode(), "%s", s.StatusDesc())) + } + cs.closeTransportStream(nil) + case <-s.GoAway(): + cs.finish(errConnDrain) + cs.closeTransportStream(errConnDrain) + case <-s.Context().Done(): + err := s.Context().Err() + cs.finish(err) + cs.closeTransportStream(transport.ContextErr(err)) + } + }() + return cs, nil +} + +// clientStream implements a client side Stream. +type clientStream struct { + opts []CallOption + c callInfo + t transport.ClientTransport + s *transport.Stream + p *parser + desc *StreamDesc + codec Codec + cp Compressor + cbuf *bytes.Buffer + dc Decompressor + + tracing bool // set to EnableTracing when the clientStream is created. + + mu sync.Mutex + put func() + closed bool + // trInfo.tr is set when the clientStream is created (if EnableTracing is true), + // and is set to nil when the clientStream's finish method is called. + trInfo traceInfo +} + +func (cs *clientStream) Context() context.Context { + return cs.s.Context() +} + +func (cs *clientStream) Header() (metadata.MD, error) { + m, err := cs.s.Header() + if err != nil { + if _, ok := err.(transport.ConnectionError); !ok { + cs.closeTransportStream(err) + } + } + return m, err +} + +func (cs *clientStream) Trailer() metadata.MD { + return cs.s.Trailer() +} + +func (cs *clientStream) SendMsg(m interface{}) (err error) { + if cs.tracing { + cs.mu.Lock() + if cs.trInfo.tr != nil { + cs.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) + } + cs.mu.Unlock() + } + defer func() { + if err != nil { + cs.finish(err) + } + if err == nil { + return + } + if err == io.EOF { + // Specialize the process for server streaming. SendMesg is only called + // once when creating the stream object. io.EOF needs to be skipped when + // the rpc is early finished (before the stream object is created.). + // TODO: It is probably better to move this into the generated code. + if !cs.desc.ClientStreams && cs.desc.ServerStreams { + err = nil + } + return + } + if _, ok := err.(transport.ConnectionError); !ok { + cs.closeTransportStream(err) + } + err = toRPCErr(err) + }() + out, err := encode(cs.codec, m, cs.cp, cs.cbuf) + defer func() { + if cs.cbuf != nil { + cs.cbuf.Reset() + } + }() + if err != nil { + return transport.StreamErrorf(codes.Internal, "grpc: %v", err) + } + return cs.t.Write(cs.s, out, &transport.Options{Last: false}) +} + +func (cs *clientStream) RecvMsg(m interface{}) (err error) { + err = recv(cs.p, cs.codec, cs.s, cs.dc, m, math.MaxInt32) + defer func() { + // err != nil indicates the termination of the stream. + if err != nil { + cs.finish(err) + } + }() + if err == nil { + if cs.tracing { + cs.mu.Lock() + if cs.trInfo.tr != nil { + cs.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) + } + cs.mu.Unlock() + } + if !cs.desc.ClientStreams || cs.desc.ServerStreams { + return + } + // Special handling for client streaming rpc. + err = recv(cs.p, cs.codec, cs.s, cs.dc, m, math.MaxInt32) + cs.closeTransportStream(err) + if err == nil { + return toRPCErr(errors.New("grpc: client streaming protocol violation: get , want ")) + } + if err == io.EOF { + if cs.s.StatusCode() == codes.OK { + cs.finish(err) + return nil + } + return Errorf(cs.s.StatusCode(), "%s", cs.s.StatusDesc()) + } + return toRPCErr(err) + } + if _, ok := err.(transport.ConnectionError); !ok { + cs.closeTransportStream(err) + } + if err == io.EOF { + if cs.s.StatusCode() == codes.OK { + // Returns io.EOF to indicate the end of the stream. + return + } + return Errorf(cs.s.StatusCode(), "%s", cs.s.StatusDesc()) + } + return toRPCErr(err) +} + +func (cs *clientStream) CloseSend() (err error) { + err = cs.t.Write(cs.s, nil, &transport.Options{Last: true}) + defer func() { + if err != nil { + cs.finish(err) + } + }() + if err == nil || err == io.EOF { + return nil + } + if _, ok := err.(transport.ConnectionError); !ok { + cs.closeTransportStream(err) + } + err = toRPCErr(err) + return +} + +func (cs *clientStream) closeTransportStream(err error) { + cs.mu.Lock() + if cs.closed { + cs.mu.Unlock() + return + } + cs.closed = true + cs.mu.Unlock() + cs.t.CloseStream(cs.s, err) +} + +func (cs *clientStream) finish(err error) { + cs.mu.Lock() + defer cs.mu.Unlock() + for _, o := range cs.opts { + o.after(&cs.c) + } + if cs.put != nil { + cs.put() + cs.put = nil + } + if !cs.tracing { + return + } + if cs.trInfo.tr != nil { + if err == nil || err == io.EOF { + cs.trInfo.tr.LazyPrintf("RPC: [OK]") + } else { + cs.trInfo.tr.LazyPrintf("RPC: [%v]", err) + cs.trInfo.tr.SetError() + } + cs.trInfo.tr.Finish() + cs.trInfo.tr = nil + } +} + +// ServerStream defines the interface a server stream has to satisfy. +type ServerStream interface { + // SendHeader sends the header metadata. It should not be called + // after SendProto. It fails if called multiple times or if + // called after SendProto. + SendHeader(metadata.MD) error + // SetTrailer sets the trailer metadata which will be sent with the + // RPC status. + SetTrailer(metadata.MD) + Stream +} + +// serverStream implements a server side Stream. +type serverStream struct { + t transport.ServerTransport + s *transport.Stream + p *parser + codec Codec + cp Compressor + dc Decompressor + cbuf *bytes.Buffer + maxMsgSize int + statusCode codes.Code + statusDesc string + trInfo *traceInfo + + mu sync.Mutex // protects trInfo.tr after the service handler runs. +} + +func (ss *serverStream) Context() context.Context { + return ss.s.Context() +} + +func (ss *serverStream) SendHeader(md metadata.MD) error { + return ss.t.WriteHeader(ss.s, md) +} + +func (ss *serverStream) SetTrailer(md metadata.MD) { + if md.Len() == 0 { + return + } + ss.s.SetTrailer(md) + return +} + +func (ss *serverStream) SendMsg(m interface{}) (err error) { + defer func() { + if ss.trInfo != nil { + ss.mu.Lock() + if ss.trInfo.tr != nil { + if err == nil { + ss.trInfo.tr.LazyLog(&payload{sent: true, msg: m}, true) + } else { + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.SetError() + } + } + ss.mu.Unlock() + } + }() + out, err := encode(ss.codec, m, ss.cp, ss.cbuf) + defer func() { + if ss.cbuf != nil { + ss.cbuf.Reset() + } + }() + if err != nil { + err = transport.StreamErrorf(codes.Internal, "grpc: %v", err) + return err + } + return ss.t.Write(ss.s, out, &transport.Options{Last: false}) +} + +func (ss *serverStream) RecvMsg(m interface{}) (err error) { + defer func() { + if ss.trInfo != nil { + ss.mu.Lock() + if ss.trInfo.tr != nil { + if err == nil { + ss.trInfo.tr.LazyLog(&payload{sent: false, msg: m}, true) + } else if err != io.EOF { + ss.trInfo.tr.LazyLog(&fmtStringer{"%v", []interface{}{err}}, true) + ss.trInfo.tr.SetError() + } + } + ss.mu.Unlock() + } + }() + return recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxMsgSize) +} diff --git a/vendor/google.golang.org/grpc/trace.go b/vendor/google.golang.org/grpc/trace.go new file mode 100644 index 00000000..f6747e1d --- /dev/null +++ b/vendor/google.golang.org/grpc/trace.go @@ -0,0 +1,119 @@ +/* + * + * Copyright 2015, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package grpc + +import ( + "bytes" + "fmt" + "io" + "net" + "strings" + "time" + + "golang.org/x/net/trace" +) + +// EnableTracing controls whether to trace RPCs using the golang.org/x/net/trace package. +// This should only be set before any RPCs are sent or received by this program. +var EnableTracing = true + +// methodFamily returns the trace family for the given method. +// It turns "/pkg.Service/GetFoo" into "pkg.Service". +func methodFamily(m string) string { + m = strings.TrimPrefix(m, "/") // remove leading slash + if i := strings.Index(m, "/"); i >= 0 { + m = m[:i] // remove everything from second slash + } + if i := strings.LastIndex(m, "."); i >= 0 { + m = m[i+1:] // cut down to last dotted component + } + return m +} + +// traceInfo contains tracing information for an RPC. +type traceInfo struct { + tr trace.Trace + firstLine firstLine +} + +// firstLine is the first line of an RPC trace. +type firstLine struct { + client bool // whether this is a client (outgoing) RPC + remoteAddr net.Addr + deadline time.Duration // may be zero +} + +func (f *firstLine) String() string { + var line bytes.Buffer + io.WriteString(&line, "RPC: ") + if f.client { + io.WriteString(&line, "to") + } else { + io.WriteString(&line, "from") + } + fmt.Fprintf(&line, " %v deadline:", f.remoteAddr) + if f.deadline != 0 { + fmt.Fprint(&line, f.deadline) + } else { + io.WriteString(&line, "none") + } + return line.String() +} + +// payload represents an RPC request or response payload. +type payload struct { + sent bool // whether this is an outgoing payload + msg interface{} // e.g. a proto.Message + // TODO(dsymonds): add stringifying info to codec, and limit how much we hold here? +} + +func (p payload) String() string { + if p.sent { + return fmt.Sprintf("sent: %v", p.msg) + } + return fmt.Sprintf("recv: %v", p.msg) +} + +type fmtStringer struct { + format string + a []interface{} +} + +func (f *fmtStringer) String() string { + return fmt.Sprintf(f.format, f.a...) +} + +type stringer string + +func (s stringer) String() string { return string(s) } diff --git a/vendor/google.golang.org/grpc/transport/control.go b/vendor/google.golang.org/grpc/transport/control.go new file mode 100644 index 00000000..4ef0830b --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/control.go @@ -0,0 +1,215 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "fmt" + "sync" + + "golang.org/x/net/http2" +) + +const ( + // The default value of flow control window size in HTTP2 spec. + defaultWindowSize = 65535 + // The initial window size for flow control. + initialWindowSize = defaultWindowSize // for an RPC + initialConnWindowSize = defaultWindowSize * 16 // for a connection +) + +// The following defines various control items which could flow through +// the control buffer of transport. They represent different aspects of +// control tasks, e.g., flow control, settings, streaming resetting, etc. +type windowUpdate struct { + streamID uint32 + increment uint32 +} + +func (*windowUpdate) item() {} + +type settings struct { + ack bool + ss []http2.Setting +} + +func (*settings) item() {} + +type resetStream struct { + streamID uint32 + code http2.ErrCode +} + +func (*resetStream) item() {} + +type goAway struct { +} + +func (*goAway) item() {} + +type flushIO struct { +} + +func (*flushIO) item() {} + +type ping struct { + ack bool + data [8]byte +} + +func (*ping) item() {} + +// quotaPool is a pool which accumulates the quota and sends it to acquire() +// when it is available. +type quotaPool struct { + c chan int + + mu sync.Mutex + quota int +} + +// newQuotaPool creates a quotaPool which has quota q available to consume. +func newQuotaPool(q int) *quotaPool { + qb := "aPool{ + c: make(chan int, 1), + } + if q > 0 { + qb.c <- q + } else { + qb.quota = q + } + return qb +} + +// add adds n to the available quota and tries to send it on acquire. +func (qb *quotaPool) add(n int) { + qb.mu.Lock() + defer qb.mu.Unlock() + qb.quota += n + if qb.quota <= 0 { + return + } + select { + case qb.c <- qb.quota: + qb.quota = 0 + default: + } +} + +// cancel cancels the pending quota sent on acquire, if any. +func (qb *quotaPool) cancel() { + qb.mu.Lock() + defer qb.mu.Unlock() + select { + case n := <-qb.c: + qb.quota += n + default: + } +} + +// reset cancels the pending quota sent on acquired, incremented by v and sends +// it back on acquire. +func (qb *quotaPool) reset(v int) { + qb.mu.Lock() + defer qb.mu.Unlock() + select { + case n := <-qb.c: + qb.quota += n + default: + } + qb.quota += v + if qb.quota <= 0 { + return + } + select { + case qb.c <- qb.quota: + qb.quota = 0 + default: + } +} + +// acquire returns the channel on which available quota amounts are sent. +func (qb *quotaPool) acquire() <-chan int { + return qb.c +} + +// inFlow deals with inbound flow control +type inFlow struct { + // The inbound flow control limit for pending data. + limit uint32 + + mu sync.Mutex + // pendingData is the overall data which have been received but not been + // consumed by applications. + pendingData uint32 + // The amount of data the application has consumed but grpc has not sent + // window update for them. Used to reduce window update frequency. + pendingUpdate uint32 +} + +// onData is invoked when some data frame is received. It updates pendingData. +func (f *inFlow) onData(n uint32) error { + f.mu.Lock() + defer f.mu.Unlock() + f.pendingData += n + if f.pendingData+f.pendingUpdate > f.limit { + return fmt.Errorf("received %d-bytes data exceeding the limit %d bytes", f.pendingData+f.pendingUpdate, f.limit) + } + return nil +} + +// onRead is invoked when the application reads the data. It returns the window size +// to be sent to the peer. +func (f *inFlow) onRead(n uint32) uint32 { + f.mu.Lock() + defer f.mu.Unlock() + if f.pendingData == 0 { + return 0 + } + f.pendingData -= n + f.pendingUpdate += n + if f.pendingUpdate >= f.limit/4 { + wu := f.pendingUpdate + f.pendingUpdate = 0 + return wu + } + return 0 +} + +func (f *inFlow) resetPendingData() uint32 { + f.mu.Lock() + defer f.mu.Unlock() + n := f.pendingData + f.pendingData = 0 + return n +} diff --git a/vendor/google.golang.org/grpc/transport/go16.go b/vendor/google.golang.org/grpc/transport/go16.go new file mode 100644 index 00000000..ee1c46ba --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/go16.go @@ -0,0 +1,46 @@ +// +build go1.6,!go1.7 + +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "net" + + "golang.org/x/net/context" +) + +// dialContext connects to the address on the named network. +func dialContext(ctx context.Context, network, address string) (net.Conn, error) { + return (&net.Dialer{Cancel: ctx.Done()}).Dial(network, address) +} diff --git a/vendor/google.golang.org/grpc/transport/go17.go b/vendor/google.golang.org/grpc/transport/go17.go new file mode 100644 index 00000000..356f13ff --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/go17.go @@ -0,0 +1,46 @@ +// +build go1.7 + +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "net" + + "golang.org/x/net/context" +) + +// dialContext connects to the address on the named network. +func dialContext(ctx context.Context, network, address string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, network, address) +} diff --git a/vendor/google.golang.org/grpc/transport/handler_server.go b/vendor/google.golang.org/grpc/transport/handler_server.go new file mode 100644 index 00000000..30e21ac0 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/handler_server.go @@ -0,0 +1,397 @@ +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +// This file is the implementation of a gRPC server using HTTP/2 which +// uses the standard Go http2 Server implementation (via the +// http.Handler interface), rather than speaking low-level HTTP/2 +// frames itself. It is the implementation of *grpc.Server.ServeHTTP. + +package transport + +import ( + "errors" + "fmt" + "io" + "net" + "net/http" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" +) + +// NewServerHandlerTransport returns a ServerTransport handling gRPC +// from inside an http.Handler. It requires that the http Server +// supports HTTP/2. +func NewServerHandlerTransport(w http.ResponseWriter, r *http.Request) (ServerTransport, error) { + if r.ProtoMajor != 2 { + return nil, errors.New("gRPC requires HTTP/2") + } + if r.Method != "POST" { + return nil, errors.New("invalid gRPC request method") + } + if !validContentType(r.Header.Get("Content-Type")) { + return nil, errors.New("invalid gRPC request content-type") + } + if _, ok := w.(http.Flusher); !ok { + return nil, errors.New("gRPC requires a ResponseWriter supporting http.Flusher") + } + if _, ok := w.(http.CloseNotifier); !ok { + return nil, errors.New("gRPC requires a ResponseWriter supporting http.CloseNotifier") + } + + st := &serverHandlerTransport{ + rw: w, + req: r, + closedCh: make(chan struct{}), + writes: make(chan func()), + } + + if v := r.Header.Get("grpc-timeout"); v != "" { + to, err := decodeTimeout(v) + if err != nil { + return nil, StreamErrorf(codes.Internal, "malformed time-out: %v", err) + } + st.timeoutSet = true + st.timeout = to + } + + var metakv []string + if r.Host != "" { + metakv = append(metakv, ":authority", r.Host) + } + for k, vv := range r.Header { + k = strings.ToLower(k) + if isReservedHeader(k) && !isWhitelistedPseudoHeader(k) { + continue + } + for _, v := range vv { + if k == "user-agent" { + // user-agent is special. Copying logic of http_util.go. + if i := strings.LastIndex(v, " "); i == -1 { + // There is no application user agent string being set + continue + } else { + v = v[:i] + } + } + metakv = append(metakv, k, v) + } + } + st.headerMD = metadata.Pairs(metakv...) + + return st, nil +} + +// serverHandlerTransport is an implementation of ServerTransport +// which replies to exactly one gRPC request (exactly one HTTP request), +// using the net/http.Handler interface. This http.Handler is guaranteed +// at this point to be speaking over HTTP/2, so it's able to speak valid +// gRPC. +type serverHandlerTransport struct { + rw http.ResponseWriter + req *http.Request + timeoutSet bool + timeout time.Duration + didCommonHeaders bool + + headerMD metadata.MD + + closeOnce sync.Once + closedCh chan struct{} // closed on Close + + // writes is a channel of code to run serialized in the + // ServeHTTP (HandleStreams) goroutine. The channel is closed + // when WriteStatus is called. + writes chan func() +} + +func (ht *serverHandlerTransport) Close() error { + ht.closeOnce.Do(ht.closeCloseChanOnce) + return nil +} + +func (ht *serverHandlerTransport) closeCloseChanOnce() { close(ht.closedCh) } + +func (ht *serverHandlerTransport) RemoteAddr() net.Addr { return strAddr(ht.req.RemoteAddr) } + +// strAddr is a net.Addr backed by either a TCP "ip:port" string, or +// the empty string if unknown. +type strAddr string + +func (a strAddr) Network() string { + if a != "" { + // Per the documentation on net/http.Request.RemoteAddr, if this is + // set, it's set to the IP:port of the peer (hence, TCP): + // https://golang.org/pkg/net/http/#Request + // + // If we want to support Unix sockets later, we can + // add our own grpc-specific convention within the + // grpc codebase to set RemoteAddr to a different + // format, or probably better: we can attach it to the + // context and use that from serverHandlerTransport.RemoteAddr. + return "tcp" + } + return "" +} + +func (a strAddr) String() string { return string(a) } + +// do runs fn in the ServeHTTP goroutine. +func (ht *serverHandlerTransport) do(fn func()) error { + select { + case ht.writes <- fn: + return nil + case <-ht.closedCh: + return ErrConnClosing + } +} + +func (ht *serverHandlerTransport) WriteStatus(s *Stream, statusCode codes.Code, statusDesc string) error { + err := ht.do(func() { + ht.writeCommonHeaders(s) + + // And flush, in case no header or body has been sent yet. + // This forces a separation of headers and trailers if this is the + // first call (for example, in end2end tests's TestNoService). + ht.rw.(http.Flusher).Flush() + + h := ht.rw.Header() + h.Set("Grpc-Status", fmt.Sprintf("%d", statusCode)) + if statusDesc != "" { + h.Set("Grpc-Message", encodeGrpcMessage(statusDesc)) + } + if md := s.Trailer(); len(md) > 0 { + for k, vv := range md { + // Clients don't tolerate reading restricted headers after some non restricted ones were sent. + if isReservedHeader(k) { + continue + } + for _, v := range vv { + // http2 ResponseWriter mechanism to + // send undeclared Trailers after the + // headers have possibly been written. + h.Add(http2.TrailerPrefix+k, v) + } + } + } + }) + close(ht.writes) + return err +} + +// writeCommonHeaders sets common headers on the first write +// call (Write, WriteHeader, or WriteStatus). +func (ht *serverHandlerTransport) writeCommonHeaders(s *Stream) { + if ht.didCommonHeaders { + return + } + ht.didCommonHeaders = true + + h := ht.rw.Header() + h["Date"] = nil // suppress Date to make tests happy; TODO: restore + h.Set("Content-Type", "application/grpc") + + // Predeclare trailers we'll set later in WriteStatus (after the body). + // This is a SHOULD in the HTTP RFC, and the way you add (known) + // Trailers per the net/http.ResponseWriter contract. + // See https://golang.org/pkg/net/http/#ResponseWriter + // and https://golang.org/pkg/net/http/#example_ResponseWriter_trailers + h.Add("Trailer", "Grpc-Status") + h.Add("Trailer", "Grpc-Message") + + if s.sendCompress != "" { + h.Set("Grpc-Encoding", s.sendCompress) + } +} + +func (ht *serverHandlerTransport) Write(s *Stream, data []byte, opts *Options) error { + return ht.do(func() { + ht.writeCommonHeaders(s) + ht.rw.Write(data) + if !opts.Delay { + ht.rw.(http.Flusher).Flush() + } + }) +} + +func (ht *serverHandlerTransport) WriteHeader(s *Stream, md metadata.MD) error { + return ht.do(func() { + ht.writeCommonHeaders(s) + h := ht.rw.Header() + for k, vv := range md { + // Clients don't tolerate reading restricted headers after some non restricted ones were sent. + if isReservedHeader(k) { + continue + } + for _, v := range vv { + h.Add(k, v) + } + } + ht.rw.WriteHeader(200) + ht.rw.(http.Flusher).Flush() + }) +} + +func (ht *serverHandlerTransport) HandleStreams(startStream func(*Stream)) { + // With this transport type there will be exactly 1 stream: this HTTP request. + + var ctx context.Context + var cancel context.CancelFunc + if ht.timeoutSet { + ctx, cancel = context.WithTimeout(context.Background(), ht.timeout) + } else { + ctx, cancel = context.WithCancel(context.Background()) + } + + // requestOver is closed when either the request's context is done + // or the status has been written via WriteStatus. + requestOver := make(chan struct{}) + + // clientGone receives a single value if peer is gone, either + // because the underlying connection is dead or because the + // peer sends an http2 RST_STREAM. + clientGone := ht.rw.(http.CloseNotifier).CloseNotify() + go func() { + select { + case <-requestOver: + return + case <-ht.closedCh: + case <-clientGone: + } + cancel() + }() + + req := ht.req + + s := &Stream{ + id: 0, // irrelevant + windowHandler: func(int) {}, // nothing + cancel: cancel, + buf: newRecvBuffer(), + st: ht, + method: req.URL.Path, + recvCompress: req.Header.Get("grpc-encoding"), + } + pr := &peer.Peer{ + Addr: ht.RemoteAddr(), + } + if req.TLS != nil { + pr.AuthInfo = credentials.TLSInfo{State: *req.TLS} + } + ctx = metadata.NewContext(ctx, ht.headerMD) + ctx = peer.NewContext(ctx, pr) + s.ctx = newContextWithStream(ctx, s) + s.dec = &recvBufferReader{ctx: s.ctx, recv: s.buf} + + // readerDone is closed when the Body.Read-ing goroutine exits. + readerDone := make(chan struct{}) + go func() { + defer close(readerDone) + + // TODO: minimize garbage, optimize recvBuffer code/ownership + const readSize = 8196 + for buf := make([]byte, readSize); ; { + n, err := req.Body.Read(buf) + if n > 0 { + s.buf.put(&recvMsg{data: buf[:n:n]}) + buf = buf[n:] + } + if err != nil { + s.buf.put(&recvMsg{err: mapRecvMsgError(err)}) + return + } + if len(buf) == 0 { + buf = make([]byte, readSize) + } + } + }() + + // startStream is provided by the *grpc.Server's serveStreams. + // It starts a goroutine serving s and exits immediately. + // The goroutine that is started is the one that then calls + // into ht, calling WriteHeader, Write, WriteStatus, Close, etc. + startStream(s) + + ht.runStream() + close(requestOver) + + // Wait for reading goroutine to finish. + req.Body.Close() + <-readerDone +} + +func (ht *serverHandlerTransport) runStream() { + for { + select { + case fn, ok := <-ht.writes: + if !ok { + return + } + fn() + case <-ht.closedCh: + return + } + } +} + +func (ht *serverHandlerTransport) Drain() { + panic("Drain() is not implemented") +} + +// mapRecvMsgError returns the non-nil err into the appropriate +// error value as expected by callers of *grpc.parser.recvMsg. +// In particular, in can only be: +// * io.EOF +// * io.ErrUnexpectedEOF +// * of type transport.ConnectionError +// * of type transport.StreamError +func mapRecvMsgError(err error) error { + if err == io.EOF || err == io.ErrUnexpectedEOF { + return err + } + if se, ok := err.(http2.StreamError); ok { + if code, ok := http2ErrConvTab[se.Code]; ok { + return StreamError{ + Code: code, + Desc: se.Error(), + } + } + } + return ConnectionError{Desc: err.Error()} +} diff --git a/vendor/google.golang.org/grpc/transport/http2_client.go b/vendor/google.golang.org/grpc/transport/http2_client.go new file mode 100644 index 00000000..5819cb8a --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/http2_client.go @@ -0,0 +1,1027 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "bytes" + "fmt" + "io" + "math" + "net" + "strings" + "sync" + "time" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" +) + +// http2Client implements the ClientTransport interface with HTTP2. +type http2Client struct { + target string // server name/addr + userAgent string + conn net.Conn // underlying communication channel + authInfo credentials.AuthInfo // auth info about the connection + nextID uint32 // the next stream ID to be used + + // writableChan synchronizes write access to the transport. + // A writer acquires the write lock by sending a value on writableChan + // and releases it by receiving from writableChan. + writableChan chan int + // shutdownChan is closed when Close is called. + // Blocking operations should select on shutdownChan to avoid + // blocking forever after Close. + // TODO(zhaoq): Maybe have a channel context? + shutdownChan chan struct{} + // errorChan is closed to notify the I/O error to the caller. + errorChan chan struct{} + // goAway is closed to notify the upper layer (i.e., addrConn.transportMonitor) + // that the server sent GoAway on this transport. + goAway chan struct{} + + framer *framer + hBuf *bytes.Buffer // the buffer for HPACK encoding + hEnc *hpack.Encoder // HPACK encoder + + // controlBuf delivers all the control related tasks (e.g., window + // updates, reset streams, and various settings) to the controller. + controlBuf *recvBuffer + fc *inFlow + // sendQuotaPool provides flow control to outbound message. + sendQuotaPool *quotaPool + // streamsQuota limits the max number of concurrent streams. + streamsQuota *quotaPool + + // The scheme used: https if TLS is on, http otherwise. + scheme string + + creds []credentials.PerRPCCredentials + + mu sync.Mutex // guard the following variables + state transportState // the state of underlying connection + activeStreams map[uint32]*Stream + // The max number of concurrent streams + maxStreams int + // the per-stream outbound flow control window size set by the peer. + streamSendQuota uint32 + // goAwayID records the Last-Stream-ID in the GoAway frame from the server. + goAwayID uint32 + // prevGoAway ID records the Last-Stream-ID in the previous GOAway frame. + prevGoAwayID uint32 +} + +func dial(fn func(context.Context, string) (net.Conn, error), ctx context.Context, addr string) (net.Conn, error) { + if fn != nil { + return fn(ctx, addr) + } + return dialContext(ctx, "tcp", addr) +} + +// newHTTP2Client constructs a connected ClientTransport to addr based on HTTP2 +// and starts to receive messages on it. Non-nil error returns if construction +// fails. +func newHTTP2Client(ctx context.Context, addr string, opts ConnectOptions) (_ ClientTransport, err error) { + scheme := "http" + conn, connErr := dial(opts.Dialer, ctx, addr) + if connErr != nil { + return nil, ConnectionErrorf(true, connErr, "transport: %v", connErr) + } + // Any further errors will close the underlying connection + defer func(conn net.Conn) { + if err != nil { + conn.Close() + } + }(conn) + var authInfo credentials.AuthInfo + if creds := opts.TransportCredentials; creds != nil { + scheme = "https" + conn, authInfo, connErr = creds.ClientHandshake(ctx, addr, conn) + } + if connErr != nil { + // Credentials handshake error is not a temporary error (unless the error + // was the connection closing). + return nil, ConnectionErrorf(connErr == io.EOF, connErr, "transport: %v", connErr) + } + ua := primaryUA + if opts.UserAgent != "" { + ua = opts.UserAgent + " " + ua + } + var buf bytes.Buffer + t := &http2Client{ + target: addr, + userAgent: ua, + conn: conn, + authInfo: authInfo, + // The client initiated stream id is odd starting from 1. + nextID: 1, + writableChan: make(chan int, 1), + shutdownChan: make(chan struct{}), + errorChan: make(chan struct{}), + goAway: make(chan struct{}), + framer: newFramer(conn), + hBuf: &buf, + hEnc: hpack.NewEncoder(&buf), + controlBuf: newRecvBuffer(), + fc: &inFlow{limit: initialConnWindowSize}, + sendQuotaPool: newQuotaPool(defaultWindowSize), + scheme: scheme, + state: reachable, + activeStreams: make(map[uint32]*Stream), + creds: opts.PerRPCCredentials, + maxStreams: math.MaxInt32, + streamSendQuota: defaultWindowSize, + } + // Start the reader goroutine for incoming message. Each transport has + // a dedicated goroutine which reads HTTP2 frame from network. Then it + // dispatches the frame to the corresponding stream entity. + go t.reader() + // Send connection preface to server. + n, err := t.conn.Write(clientPreface) + if err != nil { + t.Close() + return nil, ConnectionErrorf(true, err, "transport: %v", err) + } + if n != len(clientPreface) { + t.Close() + return nil, ConnectionErrorf(true, err, "transport: preface mismatch, wrote %d bytes; want %d", n, len(clientPreface)) + } + if initialWindowSize != defaultWindowSize { + err = t.framer.writeSettings(true, http2.Setting{ + ID: http2.SettingInitialWindowSize, + Val: uint32(initialWindowSize), + }) + } else { + err = t.framer.writeSettings(true) + } + if err != nil { + t.Close() + return nil, ConnectionErrorf(true, err, "transport: %v", err) + } + // Adjust the connection flow control window if needed. + if delta := uint32(initialConnWindowSize - defaultWindowSize); delta > 0 { + if err := t.framer.writeWindowUpdate(true, 0, delta); err != nil { + t.Close() + return nil, ConnectionErrorf(true, err, "transport: %v", err) + } + } + go t.controller() + t.writableChan <- 0 + return t, nil +} + +func (t *http2Client) newStream(ctx context.Context, callHdr *CallHdr) *Stream { + // TODO(zhaoq): Handle uint32 overflow of Stream.id. + s := &Stream{ + id: t.nextID, + done: make(chan struct{}), + goAway: make(chan struct{}), + method: callHdr.Method, + sendCompress: callHdr.SendCompress, + buf: newRecvBuffer(), + fc: &inFlow{limit: initialWindowSize}, + sendQuotaPool: newQuotaPool(int(t.streamSendQuota)), + headerChan: make(chan struct{}), + } + t.nextID += 2 + s.windowHandler = func(n int) { + t.updateWindow(s, uint32(n)) + } + // Make a stream be able to cancel the pending operations by itself. + s.ctx, s.cancel = context.WithCancel(ctx) + s.dec = &recvBufferReader{ + ctx: s.ctx, + goAway: s.goAway, + recv: s.buf, + } + return s +} + +// NewStream creates a stream and register it into the transport as "active" +// streams. +func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (_ *Stream, err error) { + // Record the timeout value on the context. + var timeout time.Duration + if dl, ok := ctx.Deadline(); ok { + timeout = dl.Sub(time.Now()) + } + select { + case <-ctx.Done(): + return nil, ContextErr(ctx.Err()) + default: + } + pr := &peer.Peer{ + Addr: t.conn.RemoteAddr(), + } + // Attach Auth info if there is any. + if t.authInfo != nil { + pr.AuthInfo = t.authInfo + } + ctx = peer.NewContext(ctx, pr) + authData := make(map[string]string) + for _, c := range t.creds { + // Construct URI required to get auth request metadata. + var port string + if pos := strings.LastIndex(t.target, ":"); pos != -1 { + // Omit port if it is the default one. + if t.target[pos+1:] != "443" { + port = ":" + t.target[pos+1:] + } + } + pos := strings.LastIndex(callHdr.Method, "/") + if pos == -1 { + return nil, StreamErrorf(codes.InvalidArgument, "transport: malformed method name: %q", callHdr.Method) + } + audience := "https://" + callHdr.Host + port + callHdr.Method[:pos] + data, err := c.GetRequestMetadata(ctx, audience) + if err != nil { + return nil, StreamErrorf(codes.InvalidArgument, "transport: %v", err) + } + for k, v := range data { + authData[k] = v + } + } + t.mu.Lock() + if t.activeStreams == nil { + t.mu.Unlock() + return nil, ErrConnClosing + } + if t.state == draining { + t.mu.Unlock() + return nil, ErrStreamDrain + } + if t.state != reachable { + t.mu.Unlock() + return nil, ErrConnClosing + } + checkStreamsQuota := t.streamsQuota != nil + t.mu.Unlock() + if checkStreamsQuota { + sq, err := wait(ctx, nil, nil, t.shutdownChan, t.streamsQuota.acquire()) + if err != nil { + return nil, err + } + // Returns the quota balance back. + if sq > 1 { + t.streamsQuota.add(sq - 1) + } + } + if _, err := wait(ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + // Return the quota back now because there is no stream returned to the caller. + if _, ok := err.(StreamError); ok && checkStreamsQuota { + t.streamsQuota.add(1) + } + return nil, err + } + t.mu.Lock() + if t.state == draining { + t.mu.Unlock() + if checkStreamsQuota { + t.streamsQuota.add(1) + } + // Need to make t writable again so that the rpc in flight can still proceed. + t.writableChan <- 0 + return nil, ErrStreamDrain + } + if t.state != reachable { + t.mu.Unlock() + return nil, ErrConnClosing + } + s := t.newStream(ctx, callHdr) + t.activeStreams[s.id] = s + + // This stream is not counted when applySetings(...) initialize t.streamsQuota. + // Reset t.streamsQuota to the right value. + var reset bool + if !checkStreamsQuota && t.streamsQuota != nil { + reset = true + } + t.mu.Unlock() + if reset { + t.streamsQuota.reset(-1) + } + + // HPACK encodes various headers. Note that once WriteField(...) is + // called, the corresponding headers/continuation frame has to be sent + // because hpack.Encoder is stateful. + t.hBuf.Reset() + t.hEnc.WriteField(hpack.HeaderField{Name: ":method", Value: "POST"}) + t.hEnc.WriteField(hpack.HeaderField{Name: ":scheme", Value: t.scheme}) + t.hEnc.WriteField(hpack.HeaderField{Name: ":path", Value: callHdr.Method}) + t.hEnc.WriteField(hpack.HeaderField{Name: ":authority", Value: callHdr.Host}) + t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + t.hEnc.WriteField(hpack.HeaderField{Name: "user-agent", Value: t.userAgent}) + t.hEnc.WriteField(hpack.HeaderField{Name: "te", Value: "trailers"}) + + if callHdr.SendCompress != "" { + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-encoding", Value: callHdr.SendCompress}) + } + if timeout > 0 { + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-timeout", Value: encodeTimeout(timeout)}) + } + for k, v := range authData { + // Capital header names are illegal in HTTP/2. + k = strings.ToLower(k) + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: v}) + } + var ( + hasMD bool + endHeaders bool + ) + if md, ok := metadata.FromContext(ctx); ok { + hasMD = true + for k, v := range md { + // HTTP doesn't allow you to set pseudoheaders after non pseudoheaders were set. + if isReservedHeader(k) { + continue + } + for _, entry := range v { + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: entry}) + } + } + } + first := true + // Sends the headers in a single batch even when they span multiple frames. + for !endHeaders { + size := t.hBuf.Len() + if size > http2MaxFrameLen { + size = http2MaxFrameLen + } else { + endHeaders = true + } + var flush bool + if endHeaders && (hasMD || callHdr.Flush) { + flush = true + } + if first { + // Sends a HeadersFrame to server to start a new stream. + p := http2.HeadersFrameParam{ + StreamID: s.id, + BlockFragment: t.hBuf.Next(size), + EndStream: false, + EndHeaders: endHeaders, + } + // Do a force flush for the buffered frames iff it is the last headers frame + // and there is header metadata to be sent. Otherwise, there is flushing until + // the corresponding data frame is written. + err = t.framer.writeHeaders(flush, p) + first = false + } else { + // Sends Continuation frames for the leftover headers. + err = t.framer.writeContinuation(flush, s.id, endHeaders, t.hBuf.Next(size)) + } + if err != nil { + t.notifyError(err) + return nil, ConnectionErrorf(true, err, "transport: %v", err) + } + } + t.writableChan <- 0 + return s, nil +} + +// CloseStream clears the footprint of a stream when the stream is not needed any more. +// This must not be executed in reader's goroutine. +func (t *http2Client) CloseStream(s *Stream, err error) { + var updateStreams bool + t.mu.Lock() + if t.activeStreams == nil { + t.mu.Unlock() + return + } + if t.streamsQuota != nil { + updateStreams = true + } + delete(t.activeStreams, s.id) + if t.state == draining && len(t.activeStreams) == 0 { + // The transport is draining and s is the last live stream on t. + t.mu.Unlock() + t.Close() + return + } + t.mu.Unlock() + if updateStreams { + t.streamsQuota.add(1) + } + s.mu.Lock() + if q := s.fc.resetPendingData(); q > 0 { + if n := t.fc.onRead(q); n > 0 { + t.controlBuf.put(&windowUpdate{0, n}) + } + } + if s.state == streamDone { + s.mu.Unlock() + return + } + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.state = streamDone + s.mu.Unlock() + if _, ok := err.(StreamError); ok { + t.controlBuf.put(&resetStream{s.id, http2.ErrCodeCancel}) + } +} + +// Close kicks off the shutdown process of the transport. This should be called +// only once on a transport. Once it is called, the transport should not be +// accessed any more. +func (t *http2Client) Close() (err error) { + t.mu.Lock() + if t.state == closing { + t.mu.Unlock() + return + } + if t.state == reachable || t.state == draining { + close(t.errorChan) + } + t.state = closing + t.mu.Unlock() + close(t.shutdownChan) + err = t.conn.Close() + t.mu.Lock() + streams := t.activeStreams + t.activeStreams = nil + t.mu.Unlock() + // Notify all active streams. + for _, s := range streams { + s.mu.Lock() + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.mu.Unlock() + s.write(recvMsg{err: ErrConnClosing}) + } + return +} + +func (t *http2Client) GracefulClose() error { + t.mu.Lock() + switch t.state { + case unreachable: + // The server may close the connection concurrently. t is not available for + // any streams. Close it now. + t.mu.Unlock() + t.Close() + return nil + case closing: + t.mu.Unlock() + return nil + } + // Notify the streams which were initiated after the server sent GOAWAY. + select { + case <-t.goAway: + n := t.prevGoAwayID + if n == 0 && t.nextID > 1 { + n = t.nextID - 2 + } + m := t.goAwayID + 2 + if m == 2 { + m = 1 + } + for i := m; i <= n; i += 2 { + if s, ok := t.activeStreams[i]; ok { + close(s.goAway) + } + } + default: + } + if t.state == draining { + t.mu.Unlock() + return nil + } + t.state = draining + active := len(t.activeStreams) + t.mu.Unlock() + if active == 0 { + return t.Close() + } + return nil +} + +// Write formats the data into HTTP2 data frame(s) and sends it out. The caller +// should proceed only if Write returns nil. +// TODO(zhaoq): opts.Delay is ignored in this implementation. Support it later +// if it improves the performance. +func (t *http2Client) Write(s *Stream, data []byte, opts *Options) error { + r := bytes.NewBuffer(data) + for { + var p []byte + if r.Len() > 0 { + size := http2MaxFrameLen + s.sendQuotaPool.add(0) + // Wait until the stream has some quota to send the data. + sq, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, s.sendQuotaPool.acquire()) + if err != nil { + return err + } + t.sendQuotaPool.add(0) + // Wait until the transport has some quota to send the data. + tq, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, t.sendQuotaPool.acquire()) + if err != nil { + if _, ok := err.(StreamError); ok || err == io.EOF { + t.sendQuotaPool.cancel() + } + return err + } + if sq < size { + size = sq + } + if tq < size { + size = tq + } + p = r.Next(size) + ps := len(p) + if ps < sq { + // Overbooked stream quota. Return it back. + s.sendQuotaPool.add(sq - ps) + } + if ps < tq { + // Overbooked transport quota. Return it back. + t.sendQuotaPool.add(tq - ps) + } + } + var ( + endStream bool + forceFlush bool + ) + if opts.Last && r.Len() == 0 { + endStream = true + } + // Indicate there is a writer who is about to write a data frame. + t.framer.adjustNumWriters(1) + // Got some quota. Try to acquire writing privilege on the transport. + if _, err := wait(s.ctx, s.done, s.goAway, t.shutdownChan, t.writableChan); err != nil { + if _, ok := err.(StreamError); ok || err == io.EOF { + // Return the connection quota back. + t.sendQuotaPool.add(len(p)) + } + if t.framer.adjustNumWriters(-1) == 0 { + // This writer is the last one in this batch and has the + // responsibility to flush the buffered frames. It queues + // a flush request to controlBuf instead of flushing directly + // in order to avoid the race with other writing or flushing. + t.controlBuf.put(&flushIO{}) + } + return err + } + select { + case <-s.ctx.Done(): + t.sendQuotaPool.add(len(p)) + if t.framer.adjustNumWriters(-1) == 0 { + t.controlBuf.put(&flushIO{}) + } + t.writableChan <- 0 + return ContextErr(s.ctx.Err()) + default: + } + if r.Len() == 0 && t.framer.adjustNumWriters(0) == 1 { + // Do a force flush iff this is last frame for the entire gRPC message + // and the caller is the only writer at this moment. + forceFlush = true + } + // If WriteData fails, all the pending streams will be handled + // by http2Client.Close(). No explicit CloseStream() needs to be + // invoked. + if err := t.framer.writeData(forceFlush, s.id, endStream, p); err != nil { + t.notifyError(err) + return ConnectionErrorf(true, err, "transport: %v", err) + } + if t.framer.adjustNumWriters(-1) == 0 { + t.framer.flushWrite() + } + t.writableChan <- 0 + if r.Len() == 0 { + break + } + } + if !opts.Last { + return nil + } + s.mu.Lock() + if s.state != streamDone { + s.state = streamWriteDone + } + s.mu.Unlock() + return nil +} + +func (t *http2Client) getStream(f http2.Frame) (*Stream, bool) { + t.mu.Lock() + defer t.mu.Unlock() + s, ok := t.activeStreams[f.Header().StreamID] + return s, ok +} + +// updateWindow adjusts the inbound quota for the stream and the transport. +// Window updates will deliver to the controller for sending when +// the cumulative quota exceeds the corresponding threshold. +func (t *http2Client) updateWindow(s *Stream, n uint32) { + s.mu.Lock() + defer s.mu.Unlock() + if s.state == streamDone { + return + } + if w := t.fc.onRead(n); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + if w := s.fc.onRead(n); w > 0 { + t.controlBuf.put(&windowUpdate{s.id, w}) + } +} + +func (t *http2Client) handleData(f *http2.DataFrame) { + size := len(f.Data()) + if err := t.fc.onData(uint32(size)); err != nil { + t.notifyError(ConnectionErrorf(true, err, "%v", err)) + return + } + // Select the right stream to dispatch. + s, ok := t.getStream(f) + if !ok { + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + return + } + if size > 0 { + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + // The stream has been closed. Release the corresponding quota. + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + return + } + if err := s.fc.onData(uint32(size)); err != nil { + s.state = streamDone + s.statusCode = codes.Internal + s.statusDesc = err.Error() + close(s.done) + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) + t.controlBuf.put(&resetStream{s.id, http2.ErrCodeFlowControl}) + return + } + s.mu.Unlock() + // TODO(bradfitz, zhaoq): A copy is required here because there is no + // guarantee f.Data() is consumed before the arrival of next frame. + // Can this copy be eliminated? + data := make([]byte, size) + copy(data, f.Data()) + s.write(recvMsg{data: data}) + } + // The server has closed the stream without sending trailers. Record that + // the read direction is closed, and set the status appropriately. + if f.FrameHeader.Flags.Has(http2.FlagDataEndStream) { + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + return + } + s.state = streamDone + s.statusCode = codes.Internal + s.statusDesc = "server closed the stream without sending trailers" + close(s.done) + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) + } +} + +func (t *http2Client) handleRSTStream(f *http2.RSTStreamFrame) { + s, ok := t.getStream(f) + if !ok { + return + } + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + return + } + s.state = streamDone + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.statusCode, ok = http2ErrConvTab[http2.ErrCode(f.ErrCode)] + if !ok { + grpclog.Println("transport: http2Client.handleRSTStream found no mapped gRPC status for the received http2 error ", f.ErrCode) + s.statusCode = codes.Unknown + } + s.statusDesc = fmt.Sprintf("stream terminated by RST_STREAM with error code: %d", f.ErrCode) + close(s.done) + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) +} + +func (t *http2Client) handleSettings(f *http2.SettingsFrame) { + if f.IsAck() { + return + } + var ss []http2.Setting + f.ForeachSetting(func(s http2.Setting) error { + ss = append(ss, s) + return nil + }) + // The settings will be applied once the ack is sent. + t.controlBuf.put(&settings{ack: true, ss: ss}) +} + +func (t *http2Client) handlePing(f *http2.PingFrame) { + pingAck := &ping{ack: true} + copy(pingAck.data[:], f.Data[:]) + t.controlBuf.put(pingAck) +} + +func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) { + t.mu.Lock() + if t.state == reachable || t.state == draining { + if f.LastStreamID > 0 && f.LastStreamID%2 != 1 { + t.mu.Unlock() + t.notifyError(ConnectionErrorf(true, nil, "received illegal http2 GOAWAY frame: stream ID %d is even", f.LastStreamID)) + return + } + select { + case <-t.goAway: + id := t.goAwayID + // t.goAway has been closed (i.e.,multiple GoAways). + if id < f.LastStreamID { + t.mu.Unlock() + t.notifyError(ConnectionErrorf(true, nil, "received illegal http2 GOAWAY frame: previously recv GOAWAY frame with LastStramID %d, currently recv %d", id, f.LastStreamID)) + return + } + t.prevGoAwayID = id + t.goAwayID = f.LastStreamID + t.mu.Unlock() + return + default: + } + t.goAwayID = f.LastStreamID + close(t.goAway) + } + t.mu.Unlock() +} + +func (t *http2Client) handleWindowUpdate(f *http2.WindowUpdateFrame) { + id := f.Header().StreamID + incr := f.Increment + if id == 0 { + t.sendQuotaPool.add(int(incr)) + return + } + if s, ok := t.getStream(f); ok { + s.sendQuotaPool.add(int(incr)) + } +} + +// operateHeaders takes action on the decoded headers. +func (t *http2Client) operateHeaders(frame *http2.MetaHeadersFrame) { + s, ok := t.getStream(frame) + if !ok { + return + } + var state decodeState + for _, hf := range frame.Fields { + state.processHeaderField(hf) + } + if state.err != nil { + s.write(recvMsg{err: state.err}) + // Something wrong. Stops reading even when there is remaining. + return + } + + endStream := frame.StreamEnded() + + s.mu.Lock() + if !endStream { + s.recvCompress = state.encoding + } + if !s.headerDone { + if !endStream && len(state.mdata) > 0 { + s.header = state.mdata + } + close(s.headerChan) + s.headerDone = true + } + if !endStream || s.state == streamDone { + s.mu.Unlock() + return + } + + if len(state.mdata) > 0 { + s.trailer = state.mdata + } + s.statusCode = state.statusCode + s.statusDesc = state.statusDesc + close(s.done) + s.state = streamDone + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) +} + +func handleMalformedHTTP2(s *Stream, err error) { + s.mu.Lock() + if !s.headerDone { + close(s.headerChan) + s.headerDone = true + } + s.mu.Unlock() + s.write(recvMsg{err: err}) +} + +// reader runs as a separate goroutine in charge of reading data from network +// connection. +// +// TODO(zhaoq): currently one reader per transport. Investigate whether this is +// optimal. +// TODO(zhaoq): Check the validity of the incoming frame sequence. +func (t *http2Client) reader() { + // Check the validity of server preface. + frame, err := t.framer.readFrame() + if err != nil { + t.notifyError(err) + return + } + sf, ok := frame.(*http2.SettingsFrame) + if !ok { + t.notifyError(err) + return + } + t.handleSettings(sf) + + // loop to keep reading incoming messages on this transport. + for { + frame, err := t.framer.readFrame() + if err != nil { + // Abort an active stream if the http2.Framer returns a + // http2.StreamError. This can happen only if the server's response + // is malformed http2. + if se, ok := err.(http2.StreamError); ok { + t.mu.Lock() + s := t.activeStreams[se.StreamID] + t.mu.Unlock() + if s != nil { + // use error detail to provide better err message + handleMalformedHTTP2(s, StreamErrorf(http2ErrConvTab[se.Code], "%v", t.framer.errorDetail())) + } + continue + } else { + // Transport error. + t.notifyError(err) + return + } + } + switch frame := frame.(type) { + case *http2.MetaHeadersFrame: + t.operateHeaders(frame) + case *http2.DataFrame: + t.handleData(frame) + case *http2.RSTStreamFrame: + t.handleRSTStream(frame) + case *http2.SettingsFrame: + t.handleSettings(frame) + case *http2.PingFrame: + t.handlePing(frame) + case *http2.GoAwayFrame: + t.handleGoAway(frame) + case *http2.WindowUpdateFrame: + t.handleWindowUpdate(frame) + default: + grpclog.Printf("transport: http2Client.reader got unhandled frame type %v.", frame) + } + } +} + +func (t *http2Client) applySettings(ss []http2.Setting) { + for _, s := range ss { + switch s.ID { + case http2.SettingMaxConcurrentStreams: + // TODO(zhaoq): This is a hack to avoid significant refactoring of the + // code to deal with the unrealistic int32 overflow. Probably will try + // to find a better way to handle this later. + if s.Val > math.MaxInt32 { + s.Val = math.MaxInt32 + } + t.mu.Lock() + reset := t.streamsQuota != nil + if !reset { + t.streamsQuota = newQuotaPool(int(s.Val) - len(t.activeStreams)) + } + ms := t.maxStreams + t.maxStreams = int(s.Val) + t.mu.Unlock() + if reset { + t.streamsQuota.reset(int(s.Val) - ms) + } + case http2.SettingInitialWindowSize: + t.mu.Lock() + for _, stream := range t.activeStreams { + // Adjust the sending quota for each stream. + stream.sendQuotaPool.reset(int(s.Val - t.streamSendQuota)) + } + t.streamSendQuota = s.Val + t.mu.Unlock() + } + } +} + +// controller running in a separate goroutine takes charge of sending control +// frames (e.g., window update, reset stream, setting, etc.) to the server. +func (t *http2Client) controller() { + for { + select { + case i := <-t.controlBuf.get(): + t.controlBuf.load() + select { + case <-t.writableChan: + switch i := i.(type) { + case *windowUpdate: + t.framer.writeWindowUpdate(true, i.streamID, i.increment) + case *settings: + if i.ack { + t.framer.writeSettingsAck(true) + t.applySettings(i.ss) + } else { + t.framer.writeSettings(true, i.ss...) + } + case *resetStream: + t.framer.writeRSTStream(true, i.streamID, i.code) + case *flushIO: + t.framer.flushWrite() + case *ping: + t.framer.writePing(true, i.ack, i.data) + default: + grpclog.Printf("transport: http2Client.controller got unexpected item type %v\n", i) + } + t.writableChan <- 0 + continue + case <-t.shutdownChan: + return + } + case <-t.shutdownChan: + return + } + } +} + +func (t *http2Client) Error() <-chan struct{} { + return t.errorChan +} + +func (t *http2Client) GoAway() <-chan struct{} { + return t.goAway +} + +func (t *http2Client) notifyError(err error) { + t.mu.Lock() + // make sure t.errorChan is closed only once. + if t.state == draining { + t.mu.Unlock() + t.Close() + return + } + if t.state == reachable { + t.state = unreachable + close(t.errorChan) + grpclog.Printf("transport: http2Client.notifyError got notified that the client transport was broken %v.", err) + } + t.mu.Unlock() +} diff --git a/vendor/google.golang.org/grpc/transport/http2_server.go b/vendor/google.golang.org/grpc/transport/http2_server.go new file mode 100644 index 00000000..16010d55 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/http2_server.go @@ -0,0 +1,774 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "bytes" + "errors" + "io" + "math" + "net" + "strconv" + "sync" + + "golang.org/x/net/context" + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/peer" +) + +// ErrIllegalHeaderWrite indicates that setting header is illegal because of +// the stream's state. +var ErrIllegalHeaderWrite = errors.New("transport: the stream is done or WriteHeader was already called") + +// http2Server implements the ServerTransport interface with HTTP2. +type http2Server struct { + conn net.Conn + maxStreamID uint32 // max stream ID ever seen + authInfo credentials.AuthInfo // auth info about the connection + // writableChan synchronizes write access to the transport. + // A writer acquires the write lock by receiving a value on writableChan + // and releases it by sending on writableChan. + writableChan chan int + // shutdownChan is closed when Close is called. + // Blocking operations should select on shutdownChan to avoid + // blocking forever after Close. + shutdownChan chan struct{} + framer *framer + hBuf *bytes.Buffer // the buffer for HPACK encoding + hEnc *hpack.Encoder // HPACK encoder + + // The max number of concurrent streams. + maxStreams uint32 + // controlBuf delivers all the control related tasks (e.g., window + // updates, reset streams, and various settings) to the controller. + controlBuf *recvBuffer + fc *inFlow + // sendQuotaPool provides flow control to outbound message. + sendQuotaPool *quotaPool + + mu sync.Mutex // guard the following + state transportState + activeStreams map[uint32]*Stream + // the per-stream outbound flow control window size set by the peer. + streamSendQuota uint32 +} + +// newHTTP2Server constructs a ServerTransport based on HTTP2. ConnectionError is +// returned if something goes wrong. +func newHTTP2Server(conn net.Conn, maxStreams uint32, authInfo credentials.AuthInfo) (_ ServerTransport, err error) { + framer := newFramer(conn) + // Send initial settings as connection preface to client. + var settings []http2.Setting + // TODO(zhaoq): Have a better way to signal "no limit" because 0 is + // permitted in the HTTP2 spec. + if maxStreams == 0 { + maxStreams = math.MaxUint32 + } else { + settings = append(settings, http2.Setting{ + ID: http2.SettingMaxConcurrentStreams, + Val: maxStreams, + }) + } + if initialWindowSize != defaultWindowSize { + settings = append(settings, http2.Setting{ + ID: http2.SettingInitialWindowSize, + Val: uint32(initialWindowSize)}) + } + if err := framer.writeSettings(true, settings...); err != nil { + return nil, ConnectionErrorf(true, err, "transport: %v", err) + } + // Adjust the connection flow control window if needed. + if delta := uint32(initialConnWindowSize - defaultWindowSize); delta > 0 { + if err := framer.writeWindowUpdate(true, 0, delta); err != nil { + return nil, ConnectionErrorf(true, err, "transport: %v", err) + } + } + var buf bytes.Buffer + t := &http2Server{ + conn: conn, + authInfo: authInfo, + framer: framer, + hBuf: &buf, + hEnc: hpack.NewEncoder(&buf), + maxStreams: maxStreams, + controlBuf: newRecvBuffer(), + fc: &inFlow{limit: initialConnWindowSize}, + sendQuotaPool: newQuotaPool(defaultWindowSize), + state: reachable, + writableChan: make(chan int, 1), + shutdownChan: make(chan struct{}), + activeStreams: make(map[uint32]*Stream), + streamSendQuota: defaultWindowSize, + } + go t.controller() + t.writableChan <- 0 + return t, nil +} + +// operateHeader takes action on the decoded headers. +func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func(*Stream)) (close bool) { + buf := newRecvBuffer() + s := &Stream{ + id: frame.Header().StreamID, + st: t, + buf: buf, + fc: &inFlow{limit: initialWindowSize}, + } + + var state decodeState + for _, hf := range frame.Fields { + state.processHeaderField(hf) + } + if err := state.err; err != nil { + if se, ok := err.(StreamError); ok { + t.controlBuf.put(&resetStream{s.id, statusCodeConvTab[se.Code]}) + } + return + } + + if frame.StreamEnded() { + // s is just created by the caller. No lock needed. + s.state = streamReadDone + } + s.recvCompress = state.encoding + if state.timeoutSet { + s.ctx, s.cancel = context.WithTimeout(context.TODO(), state.timeout) + } else { + s.ctx, s.cancel = context.WithCancel(context.TODO()) + } + pr := &peer.Peer{ + Addr: t.conn.RemoteAddr(), + } + // Attach Auth info if there is any. + if t.authInfo != nil { + pr.AuthInfo = t.authInfo + } + s.ctx = peer.NewContext(s.ctx, pr) + // Cache the current stream to the context so that the server application + // can find out. Required when the server wants to send some metadata + // back to the client (unary call only). + s.ctx = newContextWithStream(s.ctx, s) + // Attach the received metadata to the context. + if len(state.mdata) > 0 { + s.ctx = metadata.NewContext(s.ctx, state.mdata) + } + + s.dec = &recvBufferReader{ + ctx: s.ctx, + recv: s.buf, + } + s.recvCompress = state.encoding + s.method = state.method + t.mu.Lock() + if t.state != reachable { + t.mu.Unlock() + return + } + if uint32(len(t.activeStreams)) >= t.maxStreams { + t.mu.Unlock() + t.controlBuf.put(&resetStream{s.id, http2.ErrCodeRefusedStream}) + return + } + if s.id%2 != 1 || s.id <= t.maxStreamID { + t.mu.Unlock() + // illegal gRPC stream id. + grpclog.Println("transport: http2Server.HandleStreams received an illegal stream id: ", s.id) + return true + } + t.maxStreamID = s.id + s.sendQuotaPool = newQuotaPool(int(t.streamSendQuota)) + t.activeStreams[s.id] = s + t.mu.Unlock() + s.windowHandler = func(n int) { + t.updateWindow(s, uint32(n)) + } + handle(s) + return +} + +// HandleStreams receives incoming streams using the given handler. This is +// typically run in a separate goroutine. +func (t *http2Server) HandleStreams(handle func(*Stream)) { + // Check the validity of client preface. + preface := make([]byte, len(clientPreface)) + if _, err := io.ReadFull(t.conn, preface); err != nil { + grpclog.Printf("transport: http2Server.HandleStreams failed to receive the preface from client: %v", err) + t.Close() + return + } + if !bytes.Equal(preface, clientPreface) { + grpclog.Printf("transport: http2Server.HandleStreams received bogus greeting from client: %q", preface) + t.Close() + return + } + + frame, err := t.framer.readFrame() + if err == io.EOF || err == io.ErrUnexpectedEOF { + t.Close() + return + } + if err != nil { + grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err) + t.Close() + return + } + sf, ok := frame.(*http2.SettingsFrame) + if !ok { + grpclog.Printf("transport: http2Server.HandleStreams saw invalid preface type %T from client", frame) + t.Close() + return + } + t.handleSettings(sf) + + for { + frame, err := t.framer.readFrame() + if err != nil { + if se, ok := err.(http2.StreamError); ok { + t.mu.Lock() + s := t.activeStreams[se.StreamID] + t.mu.Unlock() + if s != nil { + t.closeStream(s) + } + t.controlBuf.put(&resetStream{se.StreamID, se.Code}) + continue + } + if err == io.EOF || err == io.ErrUnexpectedEOF { + t.Close() + return + } + grpclog.Printf("transport: http2Server.HandleStreams failed to read frame: %v", err) + t.Close() + return + } + switch frame := frame.(type) { + case *http2.MetaHeadersFrame: + if t.operateHeaders(frame, handle) { + t.Close() + break + } + case *http2.DataFrame: + t.handleData(frame) + case *http2.RSTStreamFrame: + t.handleRSTStream(frame) + case *http2.SettingsFrame: + t.handleSettings(frame) + case *http2.PingFrame: + t.handlePing(frame) + case *http2.WindowUpdateFrame: + t.handleWindowUpdate(frame) + case *http2.GoAwayFrame: + // TODO: Handle GoAway from the client appropriately. + default: + grpclog.Printf("transport: http2Server.HandleStreams found unhandled frame type %v.", frame) + } + } +} + +func (t *http2Server) getStream(f http2.Frame) (*Stream, bool) { + t.mu.Lock() + defer t.mu.Unlock() + if t.activeStreams == nil { + // The transport is closing. + return nil, false + } + s, ok := t.activeStreams[f.Header().StreamID] + if !ok { + // The stream is already done. + return nil, false + } + return s, true +} + +// updateWindow adjusts the inbound quota for the stream and the transport. +// Window updates will deliver to the controller for sending when +// the cumulative quota exceeds the corresponding threshold. +func (t *http2Server) updateWindow(s *Stream, n uint32) { + s.mu.Lock() + defer s.mu.Unlock() + if s.state == streamDone { + return + } + if w := t.fc.onRead(n); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + if w := s.fc.onRead(n); w > 0 { + t.controlBuf.put(&windowUpdate{s.id, w}) + } +} + +func (t *http2Server) handleData(f *http2.DataFrame) { + size := len(f.Data()) + if err := t.fc.onData(uint32(size)); err != nil { + grpclog.Printf("transport: http2Server %v", err) + t.Close() + return + } + // Select the right stream to dispatch. + s, ok := t.getStream(f) + if !ok { + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + return + } + if size > 0 { + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + // The stream has been closed. Release the corresponding quota. + if w := t.fc.onRead(uint32(size)); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + return + } + if err := s.fc.onData(uint32(size)); err != nil { + s.mu.Unlock() + t.closeStream(s) + t.controlBuf.put(&resetStream{s.id, http2.ErrCodeFlowControl}) + return + } + s.mu.Unlock() + // TODO(bradfitz, zhaoq): A copy is required here because there is no + // guarantee f.Data() is consumed before the arrival of next frame. + // Can this copy be eliminated? + data := make([]byte, size) + copy(data, f.Data()) + s.write(recvMsg{data: data}) + } + if f.Header().Flags.Has(http2.FlagDataEndStream) { + // Received the end of stream from the client. + s.mu.Lock() + if s.state != streamDone { + s.state = streamReadDone + } + s.mu.Unlock() + s.write(recvMsg{err: io.EOF}) + } +} + +func (t *http2Server) handleRSTStream(f *http2.RSTStreamFrame) { + s, ok := t.getStream(f) + if !ok { + return + } + t.closeStream(s) +} + +func (t *http2Server) handleSettings(f *http2.SettingsFrame) { + if f.IsAck() { + return + } + var ss []http2.Setting + f.ForeachSetting(func(s http2.Setting) error { + ss = append(ss, s) + return nil + }) + // The settings will be applied once the ack is sent. + t.controlBuf.put(&settings{ack: true, ss: ss}) +} + +func (t *http2Server) handlePing(f *http2.PingFrame) { + pingAck := &ping{ack: true} + copy(pingAck.data[:], f.Data[:]) + t.controlBuf.put(pingAck) +} + +func (t *http2Server) handleWindowUpdate(f *http2.WindowUpdateFrame) { + id := f.Header().StreamID + incr := f.Increment + if id == 0 { + t.sendQuotaPool.add(int(incr)) + return + } + if s, ok := t.getStream(f); ok { + s.sendQuotaPool.add(int(incr)) + } +} + +func (t *http2Server) writeHeaders(s *Stream, b *bytes.Buffer, endStream bool) error { + first := true + endHeaders := false + var err error + // Sends the headers in a single batch. + for !endHeaders { + size := t.hBuf.Len() + if size > http2MaxFrameLen { + size = http2MaxFrameLen + } else { + endHeaders = true + } + if first { + p := http2.HeadersFrameParam{ + StreamID: s.id, + BlockFragment: b.Next(size), + EndStream: endStream, + EndHeaders: endHeaders, + } + err = t.framer.writeHeaders(endHeaders, p) + first = false + } else { + err = t.framer.writeContinuation(endHeaders, s.id, endHeaders, b.Next(size)) + } + if err != nil { + t.Close() + return ConnectionErrorf(true, err, "transport: %v", err) + } + } + return nil +} + +// WriteHeader sends the header metedata md back to the client. +func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { + s.mu.Lock() + if s.headerOk || s.state == streamDone { + s.mu.Unlock() + return ErrIllegalHeaderWrite + } + s.headerOk = true + s.mu.Unlock() + if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + return err + } + t.hBuf.Reset() + t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + if s.sendCompress != "" { + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-encoding", Value: s.sendCompress}) + } + for k, v := range md { + if isReservedHeader(k) { + // Clients don't tolerate reading restricted headers after some non restricted ones were sent. + continue + } + for _, entry := range v { + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: entry}) + } + } + if err := t.writeHeaders(s, t.hBuf, false); err != nil { + return err + } + t.writableChan <- 0 + return nil +} + +// WriteStatus sends stream status to the client and terminates the stream. +// There is no further I/O operations being able to perform on this stream. +// TODO(zhaoq): Now it indicates the end of entire stream. Revisit if early +// OK is adopted. +func (t *http2Server) WriteStatus(s *Stream, statusCode codes.Code, statusDesc string) error { + var headersSent bool + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + return nil + } + if s.headerOk { + headersSent = true + } + s.mu.Unlock() + if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + return err + } + t.hBuf.Reset() + if !headersSent { + t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + } + t.hEnc.WriteField( + hpack.HeaderField{ + Name: "grpc-status", + Value: strconv.Itoa(int(statusCode)), + }) + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-message", Value: encodeGrpcMessage(statusDesc)}) + // Attach the trailer metadata. + for k, v := range s.trailer { + // Clients don't tolerate reading restricted headers after some non restricted ones were sent. + if isReservedHeader(k) { + continue + } + for _, entry := range v { + t.hEnc.WriteField(hpack.HeaderField{Name: k, Value: entry}) + } + } + if err := t.writeHeaders(s, t.hBuf, true); err != nil { + t.Close() + return err + } + t.closeStream(s) + t.writableChan <- 0 + return nil +} + +// Write converts the data into HTTP2 data frame and sends it out. Non-nil error +// is returns if it fails (e.g., framing error, transport error). +func (t *http2Server) Write(s *Stream, data []byte, opts *Options) error { + // TODO(zhaoq): Support multi-writers for a single stream. + var writeHeaderFrame bool + s.mu.Lock() + if s.state == streamDone { + s.mu.Unlock() + return StreamErrorf(codes.Unknown, "the stream has been done") + } + if !s.headerOk { + writeHeaderFrame = true + s.headerOk = true + } + s.mu.Unlock() + if writeHeaderFrame { + if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + return err + } + t.hBuf.Reset() + t.hEnc.WriteField(hpack.HeaderField{Name: ":status", Value: "200"}) + t.hEnc.WriteField(hpack.HeaderField{Name: "content-type", Value: "application/grpc"}) + if s.sendCompress != "" { + t.hEnc.WriteField(hpack.HeaderField{Name: "grpc-encoding", Value: s.sendCompress}) + } + p := http2.HeadersFrameParam{ + StreamID: s.id, + BlockFragment: t.hBuf.Bytes(), + EndHeaders: true, + } + if err := t.framer.writeHeaders(false, p); err != nil { + t.Close() + return ConnectionErrorf(true, err, "transport: %v", err) + } + t.writableChan <- 0 + } + r := bytes.NewBuffer(data) + for { + if r.Len() == 0 { + return nil + } + size := http2MaxFrameLen + s.sendQuotaPool.add(0) + // Wait until the stream has some quota to send the data. + sq, err := wait(s.ctx, nil, nil, t.shutdownChan, s.sendQuotaPool.acquire()) + if err != nil { + return err + } + t.sendQuotaPool.add(0) + // Wait until the transport has some quota to send the data. + tq, err := wait(s.ctx, nil, nil, t.shutdownChan, t.sendQuotaPool.acquire()) + if err != nil { + if _, ok := err.(StreamError); ok { + t.sendQuotaPool.cancel() + } + return err + } + if sq < size { + size = sq + } + if tq < size { + size = tq + } + p := r.Next(size) + ps := len(p) + if ps < sq { + // Overbooked stream quota. Return it back. + s.sendQuotaPool.add(sq - ps) + } + if ps < tq { + // Overbooked transport quota. Return it back. + t.sendQuotaPool.add(tq - ps) + } + t.framer.adjustNumWriters(1) + // Got some quota. Try to acquire writing privilege on the + // transport. + if _, err := wait(s.ctx, nil, nil, t.shutdownChan, t.writableChan); err != nil { + if _, ok := err.(StreamError); ok { + // Return the connection quota back. + t.sendQuotaPool.add(ps) + } + if t.framer.adjustNumWriters(-1) == 0 { + // This writer is the last one in this batch and has the + // responsibility to flush the buffered frames. It queues + // a flush request to controlBuf instead of flushing directly + // in order to avoid the race with other writing or flushing. + t.controlBuf.put(&flushIO{}) + } + return err + } + select { + case <-s.ctx.Done(): + t.sendQuotaPool.add(ps) + if t.framer.adjustNumWriters(-1) == 0 { + t.controlBuf.put(&flushIO{}) + } + t.writableChan <- 0 + return ContextErr(s.ctx.Err()) + default: + } + var forceFlush bool + if r.Len() == 0 && t.framer.adjustNumWriters(0) == 1 && !opts.Last { + forceFlush = true + } + if err := t.framer.writeData(forceFlush, s.id, false, p); err != nil { + t.Close() + return ConnectionErrorf(true, err, "transport: %v", err) + } + if t.framer.adjustNumWriters(-1) == 0 { + t.framer.flushWrite() + } + t.writableChan <- 0 + } + +} + +func (t *http2Server) applySettings(ss []http2.Setting) { + for _, s := range ss { + if s.ID == http2.SettingInitialWindowSize { + t.mu.Lock() + defer t.mu.Unlock() + for _, stream := range t.activeStreams { + stream.sendQuotaPool.reset(int(s.Val - t.streamSendQuota)) + } + t.streamSendQuota = s.Val + } + + } +} + +// controller running in a separate goroutine takes charge of sending control +// frames (e.g., window update, reset stream, setting, etc.) to the server. +func (t *http2Server) controller() { + for { + select { + case i := <-t.controlBuf.get(): + t.controlBuf.load() + select { + case <-t.writableChan: + switch i := i.(type) { + case *windowUpdate: + t.framer.writeWindowUpdate(true, i.streamID, i.increment) + case *settings: + if i.ack { + t.framer.writeSettingsAck(true) + t.applySettings(i.ss) + } else { + t.framer.writeSettings(true, i.ss...) + } + case *resetStream: + t.framer.writeRSTStream(true, i.streamID, i.code) + case *goAway: + t.mu.Lock() + if t.state == closing { + t.mu.Unlock() + // The transport is closing. + return + } + sid := t.maxStreamID + t.state = draining + t.mu.Unlock() + t.framer.writeGoAway(true, sid, http2.ErrCodeNo, nil) + case *flushIO: + t.framer.flushWrite() + case *ping: + t.framer.writePing(true, i.ack, i.data) + default: + grpclog.Printf("transport: http2Server.controller got unexpected item type %v\n", i) + } + t.writableChan <- 0 + continue + case <-t.shutdownChan: + return + } + case <-t.shutdownChan: + return + } + } +} + +// Close starts shutting down the http2Server transport. +// TODO(zhaoq): Now the destruction is not blocked on any pending streams. This +// could cause some resource issue. Revisit this later. +func (t *http2Server) Close() (err error) { + t.mu.Lock() + if t.state == closing { + t.mu.Unlock() + return errors.New("transport: Close() was already called") + } + t.state = closing + streams := t.activeStreams + t.activeStreams = nil + t.mu.Unlock() + close(t.shutdownChan) + err = t.conn.Close() + // Cancel all active streams. + for _, s := range streams { + s.cancel() + } + return +} + +// closeStream clears the footprint of a stream when the stream is not needed +// any more. +func (t *http2Server) closeStream(s *Stream) { + t.mu.Lock() + delete(t.activeStreams, s.id) + if t.state == draining && len(t.activeStreams) == 0 { + defer t.Close() + } + t.mu.Unlock() + // In case stream sending and receiving are invoked in separate + // goroutines (e.g., bi-directional streaming), cancel needs to be + // called to interrupt the potential blocking on other goroutines. + s.cancel() + s.mu.Lock() + if q := s.fc.resetPendingData(); q > 0 { + if w := t.fc.onRead(q); w > 0 { + t.controlBuf.put(&windowUpdate{0, w}) + } + } + if s.state == streamDone { + s.mu.Unlock() + return + } + s.state = streamDone + s.mu.Unlock() +} + +func (t *http2Server) RemoteAddr() net.Addr { + return t.conn.RemoteAddr() +} + +func (t *http2Server) Drain() { + t.controlBuf.put(&goAway{}) +} diff --git a/vendor/google.golang.org/grpc/transport/http_util.go b/vendor/google.golang.org/grpc/transport/http_util.go new file mode 100644 index 00000000..3e16e4df --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/http_util.go @@ -0,0 +1,510 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "bufio" + "bytes" + "fmt" + "io" + "net" + "strconv" + "strings" + "sync/atomic" + "time" + + "golang.org/x/net/http2" + "golang.org/x/net/http2/hpack" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" +) + +const ( + // The primary user agent + primaryUA = "grpc-go/0.11" + // http2MaxFrameLen specifies the max length of a HTTP2 frame. + http2MaxFrameLen = 16384 // 16KB frame + // http://http2.github.io/http2-spec/#SettingValues + http2InitHeaderTableSize = 4096 + // http2IOBufSize specifies the buffer size for sending frames. + http2IOBufSize = 32 * 1024 +) + +var ( + clientPreface = []byte(http2.ClientPreface) + http2ErrConvTab = map[http2.ErrCode]codes.Code{ + http2.ErrCodeNo: codes.Internal, + http2.ErrCodeProtocol: codes.Internal, + http2.ErrCodeInternal: codes.Internal, + http2.ErrCodeFlowControl: codes.ResourceExhausted, + http2.ErrCodeSettingsTimeout: codes.Internal, + http2.ErrCodeStreamClosed: codes.Internal, + http2.ErrCodeFrameSize: codes.Internal, + http2.ErrCodeRefusedStream: codes.Unavailable, + http2.ErrCodeCancel: codes.Canceled, + http2.ErrCodeCompression: codes.Internal, + http2.ErrCodeConnect: codes.Internal, + http2.ErrCodeEnhanceYourCalm: codes.ResourceExhausted, + http2.ErrCodeInadequateSecurity: codes.PermissionDenied, + http2.ErrCodeHTTP11Required: codes.FailedPrecondition, + } + statusCodeConvTab = map[codes.Code]http2.ErrCode{ + codes.Internal: http2.ErrCodeInternal, + codes.Canceled: http2.ErrCodeCancel, + codes.Unavailable: http2.ErrCodeRefusedStream, + codes.ResourceExhausted: http2.ErrCodeEnhanceYourCalm, + codes.PermissionDenied: http2.ErrCodeInadequateSecurity, + } +) + +// Records the states during HPACK decoding. Must be reset once the +// decoding of the entire headers are finished. +type decodeState struct { + err error // first error encountered decoding + + encoding string + // statusCode caches the stream status received from the trailer + // the server sent. Client side only. + statusCode codes.Code + statusDesc string + // Server side only fields. + timeoutSet bool + timeout time.Duration + method string + // key-value metadata map from the peer. + mdata map[string][]string +} + +// isReservedHeader checks whether hdr belongs to HTTP2 headers +// reserved by gRPC protocol. Any other headers are classified as the +// user-specified metadata. +func isReservedHeader(hdr string) bool { + if hdr != "" && hdr[0] == ':' { + return true + } + switch hdr { + case "content-type", + "grpc-message-type", + "grpc-encoding", + "grpc-message", + "grpc-status", + "grpc-timeout", + "te": + return true + default: + return false + } +} + +// isWhitelistedPseudoHeader checks whether hdr belongs to HTTP2 pseudoheaders +// that should be propagated into metadata visible to users. +func isWhitelistedPseudoHeader(hdr string) bool { + switch hdr { + case ":authority": + return true + default: + return false + } +} + +func (d *decodeState) setErr(err error) { + if d.err == nil { + d.err = err + } +} + +func validContentType(t string) bool { + e := "application/grpc" + if !strings.HasPrefix(t, e) { + return false + } + // Support variations on the content-type + // (e.g. "application/grpc+blah", "application/grpc;blah"). + if len(t) > len(e) && t[len(e)] != '+' && t[len(e)] != ';' { + return false + } + return true +} + +func (d *decodeState) processHeaderField(f hpack.HeaderField) { + switch f.Name { + case "content-type": + if !validContentType(f.Value) { + d.setErr(StreamErrorf(codes.FailedPrecondition, "transport: received the unexpected content-type %q", f.Value)) + return + } + case "grpc-encoding": + d.encoding = f.Value + case "grpc-status": + code, err := strconv.Atoi(f.Value) + if err != nil { + d.setErr(StreamErrorf(codes.Internal, "transport: malformed grpc-status: %v", err)) + return + } + d.statusCode = codes.Code(code) + case "grpc-message": + d.statusDesc = decodeGrpcMessage(f.Value) + case "grpc-timeout": + d.timeoutSet = true + var err error + d.timeout, err = decodeTimeout(f.Value) + if err != nil { + d.setErr(StreamErrorf(codes.Internal, "transport: malformed time-out: %v", err)) + return + } + case ":path": + d.method = f.Value + default: + if !isReservedHeader(f.Name) || isWhitelistedPseudoHeader(f.Name) { + if f.Name == "user-agent" { + i := strings.LastIndex(f.Value, " ") + if i == -1 { + // There is no application user agent string being set. + return + } + // Extract the application user agent string. + f.Value = f.Value[:i] + } + if d.mdata == nil { + d.mdata = make(map[string][]string) + } + k, v, err := metadata.DecodeKeyValue(f.Name, f.Value) + if err != nil { + grpclog.Printf("Failed to decode (%q, %q): %v", f.Name, f.Value, err) + return + } + d.mdata[k] = append(d.mdata[k], v) + } + } +} + +type timeoutUnit uint8 + +const ( + hour timeoutUnit = 'H' + minute timeoutUnit = 'M' + second timeoutUnit = 'S' + millisecond timeoutUnit = 'm' + microsecond timeoutUnit = 'u' + nanosecond timeoutUnit = 'n' +) + +func timeoutUnitToDuration(u timeoutUnit) (d time.Duration, ok bool) { + switch u { + case hour: + return time.Hour, true + case minute: + return time.Minute, true + case second: + return time.Second, true + case millisecond: + return time.Millisecond, true + case microsecond: + return time.Microsecond, true + case nanosecond: + return time.Nanosecond, true + default: + } + return +} + +const maxTimeoutValue int64 = 100000000 - 1 + +// div does integer division and round-up the result. Note that this is +// equivalent to (d+r-1)/r but has less chance to overflow. +func div(d, r time.Duration) int64 { + if m := d % r; m > 0 { + return int64(d/r + 1) + } + return int64(d / r) +} + +// TODO(zhaoq): It is the simplistic and not bandwidth efficient. Improve it. +func encodeTimeout(t time.Duration) string { + if d := div(t, time.Nanosecond); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "n" + } + if d := div(t, time.Microsecond); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "u" + } + if d := div(t, time.Millisecond); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "m" + } + if d := div(t, time.Second); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "S" + } + if d := div(t, time.Minute); d <= maxTimeoutValue { + return strconv.FormatInt(d, 10) + "M" + } + // Note that maxTimeoutValue * time.Hour > MaxInt64. + return strconv.FormatInt(div(t, time.Hour), 10) + "H" +} + +func decodeTimeout(s string) (time.Duration, error) { + size := len(s) + if size < 2 { + return 0, fmt.Errorf("transport: timeout string is too short: %q", s) + } + unit := timeoutUnit(s[size-1]) + d, ok := timeoutUnitToDuration(unit) + if !ok { + return 0, fmt.Errorf("transport: timeout unit is not recognized: %q", s) + } + t, err := strconv.ParseInt(s[:size-1], 10, 64) + if err != nil { + return 0, err + } + return d * time.Duration(t), nil +} + +const ( + spaceByte = ' ' + tildaByte = '~' + percentByte = '%' +) + +// encodeGrpcMessage is used to encode status code in header field +// "grpc-message". +// It checks to see if each individual byte in msg is an +// allowable byte, and then either percent encoding or passing it through. +// When percent encoding, the byte is converted into hexadecimal notation +// with a '%' prepended. +func encodeGrpcMessage(msg string) string { + if msg == "" { + return "" + } + lenMsg := len(msg) + for i := 0; i < lenMsg; i++ { + c := msg[i] + if !(c >= spaceByte && c < tildaByte && c != percentByte) { + return encodeGrpcMessageUnchecked(msg) + } + } + return msg +} + +func encodeGrpcMessageUnchecked(msg string) string { + var buf bytes.Buffer + lenMsg := len(msg) + for i := 0; i < lenMsg; i++ { + c := msg[i] + if c >= spaceByte && c < tildaByte && c != percentByte { + buf.WriteByte(c) + } else { + buf.WriteString(fmt.Sprintf("%%%02X", c)) + } + } + return buf.String() +} + +// decodeGrpcMessage decodes the msg encoded by encodeGrpcMessage. +func decodeGrpcMessage(msg string) string { + if msg == "" { + return "" + } + lenMsg := len(msg) + for i := 0; i < lenMsg; i++ { + if msg[i] == percentByte && i+2 < lenMsg { + return decodeGrpcMessageUnchecked(msg) + } + } + return msg +} + +func decodeGrpcMessageUnchecked(msg string) string { + var buf bytes.Buffer + lenMsg := len(msg) + for i := 0; i < lenMsg; i++ { + c := msg[i] + if c == percentByte && i+2 < lenMsg { + parsed, err := strconv.ParseInt(msg[i+1:i+3], 16, 8) + if err != nil { + buf.WriteByte(c) + } else { + buf.WriteByte(byte(parsed)) + i += 2 + } + } else { + buf.WriteByte(c) + } + } + return buf.String() +} + +type framer struct { + numWriters int32 + reader io.Reader + writer *bufio.Writer + fr *http2.Framer +} + +func newFramer(conn net.Conn) *framer { + f := &framer{ + reader: bufio.NewReaderSize(conn, http2IOBufSize), + writer: bufio.NewWriterSize(conn, http2IOBufSize), + } + f.fr = http2.NewFramer(f.writer, f.reader) + f.fr.ReadMetaHeaders = hpack.NewDecoder(http2InitHeaderTableSize, nil) + return f +} + +func (f *framer) adjustNumWriters(i int32) int32 { + return atomic.AddInt32(&f.numWriters, i) +} + +// The following writeXXX functions can only be called when the caller gets +// unblocked from writableChan channel (i.e., owns the privilege to write). + +func (f *framer) writeContinuation(forceFlush bool, streamID uint32, endHeaders bool, headerBlockFragment []byte) error { + if err := f.fr.WriteContinuation(streamID, endHeaders, headerBlockFragment); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeData(forceFlush bool, streamID uint32, endStream bool, data []byte) error { + if err := f.fr.WriteData(streamID, endStream, data); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeGoAway(forceFlush bool, maxStreamID uint32, code http2.ErrCode, debugData []byte) error { + if err := f.fr.WriteGoAway(maxStreamID, code, debugData); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeHeaders(forceFlush bool, p http2.HeadersFrameParam) error { + if err := f.fr.WriteHeaders(p); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writePing(forceFlush, ack bool, data [8]byte) error { + if err := f.fr.WritePing(ack, data); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writePriority(forceFlush bool, streamID uint32, p http2.PriorityParam) error { + if err := f.fr.WritePriority(streamID, p); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writePushPromise(forceFlush bool, p http2.PushPromiseParam) error { + if err := f.fr.WritePushPromise(p); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeRSTStream(forceFlush bool, streamID uint32, code http2.ErrCode) error { + if err := f.fr.WriteRSTStream(streamID, code); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeSettings(forceFlush bool, settings ...http2.Setting) error { + if err := f.fr.WriteSettings(settings...); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeSettingsAck(forceFlush bool) error { + if err := f.fr.WriteSettingsAck(); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) writeWindowUpdate(forceFlush bool, streamID, incr uint32) error { + if err := f.fr.WriteWindowUpdate(streamID, incr); err != nil { + return err + } + if forceFlush { + return f.writer.Flush() + } + return nil +} + +func (f *framer) flushWrite() error { + return f.writer.Flush() +} + +func (f *framer) readFrame() (http2.Frame, error) { + return f.fr.ReadFrame() +} + +func (f *framer) errorDetail() error { + return f.fr.ErrorDetail() +} diff --git a/vendor/google.golang.org/grpc/transport/pre_go16.go b/vendor/google.golang.org/grpc/transport/pre_go16.go new file mode 100644 index 00000000..33d91c17 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/pre_go16.go @@ -0,0 +1,51 @@ +// +build !go1.6 + +/* + * Copyright 2016, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +package transport + +import ( + "net" + "time" + + "golang.org/x/net/context" +) + +// dialContext connects to the address on the named network. +func dialContext(ctx context.Context, network, address string) (net.Conn, error) { + var dialer net.Dialer + if deadline, ok := ctx.Deadline(); ok { + dialer.Timeout = deadline.Sub(time.Now()) + } + return dialer.Dial(network, address) +} diff --git a/vendor/google.golang.org/grpc/transport/transport.go b/vendor/google.golang.org/grpc/transport/transport.go new file mode 100644 index 00000000..f0885da2 --- /dev/null +++ b/vendor/google.golang.org/grpc/transport/transport.go @@ -0,0 +1,578 @@ +/* + * + * Copyright 2014, Google Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +/* +Package transport defines and implements message oriented communication channel +to complete various transactions (e.g., an RPC). +*/ +package transport + +import ( + "bytes" + "errors" + "fmt" + "io" + "net" + "sync" + + "golang.org/x/net/context" + "golang.org/x/net/trace" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" + "google.golang.org/grpc/metadata" +) + +// recvMsg represents the received msg from the transport. All transport +// protocol specific info has been removed. +type recvMsg struct { + data []byte + // nil: received some data + // io.EOF: stream is completed. data is nil. + // other non-nil error: transport failure. data is nil. + err error +} + +func (*recvMsg) item() {} + +// All items in an out of a recvBuffer should be the same type. +type item interface { + item() +} + +// recvBuffer is an unbounded channel of item. +type recvBuffer struct { + c chan item + mu sync.Mutex + backlog []item +} + +func newRecvBuffer() *recvBuffer { + b := &recvBuffer{ + c: make(chan item, 1), + } + return b +} + +func (b *recvBuffer) put(r item) { + b.mu.Lock() + defer b.mu.Unlock() + if len(b.backlog) == 0 { + select { + case b.c <- r: + return + default: + } + } + b.backlog = append(b.backlog, r) +} + +func (b *recvBuffer) load() { + b.mu.Lock() + defer b.mu.Unlock() + if len(b.backlog) > 0 { + select { + case b.c <- b.backlog[0]: + b.backlog = b.backlog[1:] + default: + } + } +} + +// get returns the channel that receives an item in the buffer. +// +// Upon receipt of an item, the caller should call load to send another +// item onto the channel if there is any. +func (b *recvBuffer) get() <-chan item { + return b.c +} + +// recvBufferReader implements io.Reader interface to read the data from +// recvBuffer. +type recvBufferReader struct { + ctx context.Context + goAway chan struct{} + recv *recvBuffer + last *bytes.Reader // Stores the remaining data in the previous calls. + err error +} + +// Read reads the next len(p) bytes from last. If last is drained, it tries to +// read additional data from recv. It blocks if there no additional data available +// in recv. If Read returns any non-nil error, it will continue to return that error. +func (r *recvBufferReader) Read(p []byte) (n int, err error) { + if r.err != nil { + return 0, r.err + } + defer func() { r.err = err }() + if r.last != nil && r.last.Len() > 0 { + // Read remaining data left in last call. + return r.last.Read(p) + } + select { + case <-r.ctx.Done(): + return 0, ContextErr(r.ctx.Err()) + case <-r.goAway: + return 0, ErrStreamDrain + case i := <-r.recv.get(): + r.recv.load() + m := i.(*recvMsg) + if m.err != nil { + return 0, m.err + } + r.last = bytes.NewReader(m.data) + return r.last.Read(p) + } +} + +type streamState uint8 + +const ( + streamActive streamState = iota + streamWriteDone // EndStream sent + streamReadDone // EndStream received + streamDone // the entire stream is finished. +) + +// Stream represents an RPC in the transport layer. +type Stream struct { + id uint32 + // nil for client side Stream. + st ServerTransport + // ctx is the associated context of the stream. + ctx context.Context + cancel context.CancelFunc + // done is closed when the final status arrives. + done chan struct{} + // goAway is closed when the server sent GoAways signal before this stream was initiated. + goAway chan struct{} + // method records the associated RPC method of the stream. + method string + recvCompress string + sendCompress string + buf *recvBuffer + dec io.Reader + fc *inFlow + recvQuota uint32 + // The accumulated inbound quota pending for window update. + updateQuota uint32 + // The handler to control the window update procedure for both this + // particular stream and the associated transport. + windowHandler func(int) + + sendQuotaPool *quotaPool + // Close headerChan to indicate the end of reception of header metadata. + headerChan chan struct{} + // header caches the received header metadata. + header metadata.MD + // The key-value map of trailer metadata. + trailer metadata.MD + + mu sync.RWMutex // guard the following + // headerOK becomes true from the first header is about to send. + headerOk bool + state streamState + // true iff headerChan is closed. Used to avoid closing headerChan + // multiple times. + headerDone bool + // the status received from the server. + statusCode codes.Code + statusDesc string +} + +// RecvCompress returns the compression algorithm applied to the inbound +// message. It is empty string if there is no compression applied. +func (s *Stream) RecvCompress() string { + return s.recvCompress +} + +// SetSendCompress sets the compression algorithm to the stream. +func (s *Stream) SetSendCompress(str string) { + s.sendCompress = str +} + +// Done returns a chanel which is closed when it receives the final status +// from the server. +func (s *Stream) Done() <-chan struct{} { + return s.done +} + +// GoAway returns a channel which is closed when the server sent GoAways signal +// before this stream was initiated. +func (s *Stream) GoAway() <-chan struct{} { + return s.goAway +} + +// Header acquires the key-value pairs of header metadata once it +// is available. It blocks until i) the metadata is ready or ii) there is no +// header metadata or iii) the stream is cancelled/expired. +func (s *Stream) Header() (metadata.MD, error) { + select { + case <-s.ctx.Done(): + return nil, ContextErr(s.ctx.Err()) + case <-s.goAway: + return nil, ErrStreamDrain + case <-s.headerChan: + return s.header.Copy(), nil + } +} + +// Trailer returns the cached trailer metedata. Note that if it is not called +// after the entire stream is done, it could return an empty MD. Client +// side only. +func (s *Stream) Trailer() metadata.MD { + s.mu.RLock() + defer s.mu.RUnlock() + return s.trailer.Copy() +} + +// ServerTransport returns the underlying ServerTransport for the stream. +// The client side stream always returns nil. +func (s *Stream) ServerTransport() ServerTransport { + return s.st +} + +// Context returns the context of the stream. +func (s *Stream) Context() context.Context { + return s.ctx +} + +// TraceContext recreates the context of s with a trace.Trace. +func (s *Stream) TraceContext(tr trace.Trace) { + s.ctx = trace.NewContext(s.ctx, tr) +} + +// Method returns the method for the stream. +func (s *Stream) Method() string { + return s.method +} + +// StatusCode returns statusCode received from the server. +func (s *Stream) StatusCode() codes.Code { + return s.statusCode +} + +// StatusDesc returns statusDesc received from the server. +func (s *Stream) StatusDesc() string { + return s.statusDesc +} + +// ErrIllegalTrailerSet indicates that the trailer has already been set or it +// is too late to do so. +var ErrIllegalTrailerSet = errors.New("transport: trailer has been set") + +// SetTrailer sets the trailer metadata which will be sent with the RPC status +// by the server. This can only be called at most once. Server side only. +func (s *Stream) SetTrailer(md metadata.MD) error { + s.mu.Lock() + defer s.mu.Unlock() + if s.trailer != nil { + return ErrIllegalTrailerSet + } + s.trailer = md.Copy() + return nil +} + +func (s *Stream) write(m recvMsg) { + s.buf.put(&m) +} + +// Read reads all the data available for this Stream from the transport and +// passes them into the decoder, which converts them into a gRPC message stream. +// The error is io.EOF when the stream is done or another non-nil error if +// the stream broke. +func (s *Stream) Read(p []byte) (n int, err error) { + n, err = s.dec.Read(p) + if err != nil { + return + } + s.windowHandler(n) + return +} + +// The key to save transport.Stream in the context. +type streamKey struct{} + +// newContextWithStream creates a new context from ctx and attaches stream +// to it. +func newContextWithStream(ctx context.Context, stream *Stream) context.Context { + return context.WithValue(ctx, streamKey{}, stream) +} + +// StreamFromContext returns the stream saved in ctx. +func StreamFromContext(ctx context.Context) (s *Stream, ok bool) { + s, ok = ctx.Value(streamKey{}).(*Stream) + return +} + +// state of transport +type transportState int + +const ( + reachable transportState = iota + unreachable + closing + draining +) + +// NewServerTransport creates a ServerTransport with conn or non-nil error +// if it fails. +func NewServerTransport(protocol string, conn net.Conn, maxStreams uint32, authInfo credentials.AuthInfo) (ServerTransport, error) { + return newHTTP2Server(conn, maxStreams, authInfo) +} + +// ConnectOptions covers all relevant options for dialing a server. +type ConnectOptions struct { + // UserAgent is the application user agent. + UserAgent string + // Dialer specifies how to dial a network address. + Dialer func(context.Context, string) (net.Conn, error) + // PerRPCCredentials stores the PerRPCCredentials required to issue RPCs. + PerRPCCredentials []credentials.PerRPCCredentials + // TransportCredentials stores the Authenticator required to setup a client connection. + TransportCredentials credentials.TransportCredentials +} + +// NewClientTransport establishes the transport with the required ConnectOptions +// and returns it to the caller. +func NewClientTransport(ctx context.Context, target string, opts ConnectOptions) (ClientTransport, error) { + return newHTTP2Client(ctx, target, opts) +} + +// Options provides additional hints and information for message +// transmission. +type Options struct { + // Last indicates whether this write is the last piece for + // this stream. + Last bool + + // Delay is a hint to the transport implementation for whether + // the data could be buffered for a batching write. The + // Transport implementation may ignore the hint. + Delay bool +} + +// CallHdr carries the information of a particular RPC. +type CallHdr struct { + // Host specifies the peer's host. + Host string + + // Method specifies the operation to perform. + Method string + + // RecvCompress specifies the compression algorithm applied on + // inbound messages. + RecvCompress string + + // SendCompress specifies the compression algorithm applied on + // outbound message. + SendCompress string + + // Flush indicates whether a new stream command should be sent + // to the peer without waiting for the first data. This is + // only a hint. The transport may modify the flush decision + // for performance purposes. + Flush bool +} + +// ClientTransport is the common interface for all gRPC client-side transport +// implementations. +type ClientTransport interface { + // Close tears down this transport. Once it returns, the transport + // should not be accessed any more. The caller must make sure this + // is called only once. + Close() error + + // GracefulClose starts to tear down the transport. It stops accepting + // new RPCs and wait the completion of the pending RPCs. + GracefulClose() error + + // Write sends the data for the given stream. A nil stream indicates + // the write is to be performed on the transport as a whole. + Write(s *Stream, data []byte, opts *Options) error + + // NewStream creates a Stream for an RPC. + NewStream(ctx context.Context, callHdr *CallHdr) (*Stream, error) + + // CloseStream clears the footprint of a stream when the stream is + // not needed any more. The err indicates the error incurred when + // CloseStream is called. Must be called when a stream is finished + // unless the associated transport is closing. + CloseStream(stream *Stream, err error) + + // Error returns a channel that is closed when some I/O error + // happens. Typically the caller should have a goroutine to monitor + // this in order to take action (e.g., close the current transport + // and create a new one) in error case. It should not return nil + // once the transport is initiated. + Error() <-chan struct{} + + // GoAway returns a channel that is closed when ClientTranspor + // receives the draining signal from the server (e.g., GOAWAY frame in + // HTTP/2). + GoAway() <-chan struct{} +} + +// ServerTransport is the common interface for all gRPC server-side transport +// implementations. +// +// Methods may be called concurrently from multiple goroutines, but +// Write methods for a given Stream will be called serially. +type ServerTransport interface { + // HandleStreams receives incoming streams using the given handler. + HandleStreams(func(*Stream)) + + // WriteHeader sends the header metadata for the given stream. + // WriteHeader may not be called on all streams. + WriteHeader(s *Stream, md metadata.MD) error + + // Write sends the data for the given stream. + // Write may not be called on all streams. + Write(s *Stream, data []byte, opts *Options) error + + // WriteStatus sends the status of a stream to the client. + // WriteStatus is the final call made on a stream and always + // occurs. + WriteStatus(s *Stream, statusCode codes.Code, statusDesc string) error + + // Close tears down the transport. Once it is called, the transport + // should not be accessed any more. All the pending streams and their + // handlers will be terminated asynchronously. + Close() error + + // RemoteAddr returns the remote network address. + RemoteAddr() net.Addr + + // Drain notifies the client this ServerTransport stops accepting new RPCs. + Drain() +} + +// StreamErrorf creates an StreamError with the specified error code and description. +func StreamErrorf(c codes.Code, format string, a ...interface{}) StreamError { + return StreamError{ + Code: c, + Desc: fmt.Sprintf(format, a...), + } +} + +// ConnectionErrorf creates an ConnectionError with the specified error description. +func ConnectionErrorf(temp bool, e error, format string, a ...interface{}) ConnectionError { + return ConnectionError{ + Desc: fmt.Sprintf(format, a...), + temp: temp, + err: e, + } +} + +// ConnectionError is an error that results in the termination of the +// entire connection and the retry of all the active streams. +type ConnectionError struct { + Desc string + temp bool + err error +} + +func (e ConnectionError) Error() string { + return fmt.Sprintf("connection error: desc = %q", e.Desc) +} + +// Temporary indicates if this connection error is temporary or fatal. +func (e ConnectionError) Temporary() bool { + return e.temp +} + +// Origin returns the original error of this connection error. +func (e ConnectionError) Origin() error { + // Never return nil error here. + // If the original error is nil, return itself. + if e.err == nil { + return e + } + return e.err +} + +var ( + // ErrConnClosing indicates that the transport is closing. + ErrConnClosing = ConnectionError{Desc: "transport is closing", temp: true} + // ErrStreamDrain indicates that the stream is rejected by the server because + // the server stops accepting new RPCs. + ErrStreamDrain = StreamErrorf(codes.Unavailable, "the server stops accepting new RPCs") +) + +// StreamError is an error that only affects one stream within a connection. +type StreamError struct { + Code codes.Code + Desc string +} + +func (e StreamError) Error() string { + return fmt.Sprintf("stream error: code = %d desc = %q", e.Code, e.Desc) +} + +// ContextErr converts the error from context package into a StreamError. +func ContextErr(err error) StreamError { + switch err { + case context.DeadlineExceeded: + return StreamErrorf(codes.DeadlineExceeded, "%v", err) + case context.Canceled: + return StreamErrorf(codes.Canceled, "%v", err) + } + panic(fmt.Sprintf("Unexpected error from context packet: %v", err)) +} + +// wait blocks until it can receive from ctx.Done, closing, or proceed. +// If it receives from ctx.Done, it returns 0, the StreamError for ctx.Err. +// If it receives from done, it returns 0, io.EOF if ctx is not done; otherwise +// it return the StreamError for ctx.Err. +// If it receives from goAway, it returns 0, ErrStreamDrain. +// If it receives from closing, it returns 0, ErrConnClosing. +// If it receives from proceed, it returns the received integer, nil. +func wait(ctx context.Context, done, goAway, closing <-chan struct{}, proceed <-chan int) (int, error) { + select { + case <-ctx.Done(): + return 0, ContextErr(ctx.Err()) + case <-done: + // User cancellation has precedence. + select { + case <-ctx.Done(): + return 0, ContextErr(ctx.Err()) + default: + } + return 0, io.EOF + case <-goAway: + return 0, ErrStreamDrain + case <-closing: + return 0, ErrConnClosing + case i := <-proceed: + return i, nil + } +} diff --git a/vendor/gopkg.in/yaml.v2/LICENSE b/vendor/gopkg.in/yaml.v2/LICENSE index 866d74a7..a68e67f0 100644 --- a/vendor/gopkg.in/yaml.v2/LICENSE +++ b/vendor/gopkg.in/yaml.v2/LICENSE @@ -1,13 +1,188 @@ -Copyright 2011-2016 Canonical Ltd. -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at +Copyright (c) 2011-2014 - Canonical Inc. - http://www.apache.org/licenses/LICENSE-2.0 +This software is licensed under the LGPLv3, included below. -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. +As a special exception to the GNU Lesser General Public License version 3 +("LGPL3"), the copyright holders of this Library give you permission to +convey to a third party a Combined Work that links statically or dynamically +to this Library without providing any Minimal Corresponding Source or +Minimal Application Code as set out in 4d or providing the installation +information set out in section 4e, provided that you comply with the other +provisions of LGPL3 and provided that you meet, for the Application the +terms and conditions of the license(s) which apply to the Application. + +Except as stated in this special exception, the provisions of LGPL3 will +continue to comply in full to this Library. If you modify this Library, you +may apply this exception to your version of this Library, but you are not +obliged to do so. If you do not wish to do so, delete this exception +statement from your version. This exception does not (and cannot) modify any +license terms which apply to the Application, with which you must still +comply. + + + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/OWNERS b/vendor/k8s.io/client-go/1.4/pkg/api/OWNERS new file mode 100644 index 00000000..d28472e0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/OWNERS @@ -0,0 +1,6 @@ +assignees: + - bgrant0607 + - erictune + - lavalamp + - smarterclayton + - thockin diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/context.go b/vendor/k8s.io/client-go/1.4/pkg/api/context.go new file mode 100644 index 00000000..3356ce78 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/context.go @@ -0,0 +1,152 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + stderrs "errors" + "time" + + "golang.org/x/net/context" + "k8s.io/client-go/1.4/pkg/auth/user" + "k8s.io/client-go/1.4/pkg/types" +) + +// Context carries values across API boundaries. +// This context matches the context.Context interface +// (https://blog.golang.org/context), for the purposes +// of passing the api.Context through to the storage tier. +// TODO: Determine the extent that this abstraction+interface +// is used by the api, and whether we can remove. +type Context interface { + // Value returns the value associated with key or nil if none. + Value(key interface{}) interface{} + + // Deadline returns the time when this Context will be canceled, if any. + Deadline() (deadline time.Time, ok bool) + + // Done returns a channel that is closed when this Context is canceled + // or times out. + Done() <-chan struct{} + + // Err indicates why this context was canceled, after the Done channel + // is closed. + Err() error +} + +// The key type is unexported to prevent collisions +type key int + +const ( + // namespaceKey is the context key for the request namespace. + namespaceKey key = iota + + // userKey is the context key for the request user. + userKey + + // uidKey is the context key for the uid to assign to an object on create. + uidKey + + // userAgentKey is the context key for the request user agent. + userAgentKey +) + +// NewContext instantiates a base context object for request flows. +func NewContext() Context { + return context.TODO() +} + +// NewDefaultContext instantiates a base context object for request flows in the default namespace +func NewDefaultContext() Context { + return WithNamespace(NewContext(), NamespaceDefault) +} + +// WithValue returns a copy of parent in which the value associated with key is val. +func WithValue(parent Context, key interface{}, val interface{}) Context { + internalCtx, ok := parent.(context.Context) + if !ok { + panic(stderrs.New("Invalid context type")) + } + return context.WithValue(internalCtx, key, val) +} + +// WithNamespace returns a copy of parent in which the namespace value is set +func WithNamespace(parent Context, namespace string) Context { + return WithValue(parent, namespaceKey, namespace) +} + +// NamespaceFrom returns the value of the namespace key on the ctx +func NamespaceFrom(ctx Context) (string, bool) { + namespace, ok := ctx.Value(namespaceKey).(string) + return namespace, ok +} + +// NamespaceValue returns the value of the namespace key on the ctx, or the empty string if none +func NamespaceValue(ctx Context) string { + namespace, _ := NamespaceFrom(ctx) + return namespace +} + +// ValidNamespace returns false if the namespace on the context differs from the resource. If the resource has no namespace, it is set to the value in the context. +func ValidNamespace(ctx Context, resource *ObjectMeta) bool { + ns, ok := NamespaceFrom(ctx) + if len(resource.Namespace) == 0 { + resource.Namespace = ns + } + return ns == resource.Namespace && ok +} + +// WithNamespaceDefaultIfNone returns a context whose namespace is the default if and only if the parent context has no namespace value +func WithNamespaceDefaultIfNone(parent Context) Context { + namespace, ok := NamespaceFrom(parent) + if !ok || len(namespace) == 0 { + return WithNamespace(parent, NamespaceDefault) + } + return parent +} + +// WithUser returns a copy of parent in which the user value is set +func WithUser(parent Context, user user.Info) Context { + return WithValue(parent, userKey, user) +} + +// UserFrom returns the value of the user key on the ctx +func UserFrom(ctx Context) (user.Info, bool) { + user, ok := ctx.Value(userKey).(user.Info) + return user, ok +} + +// WithUID returns a copy of parent in which the uid value is set +func WithUID(parent Context, uid types.UID) Context { + return WithValue(parent, uidKey, uid) +} + +// UIDFrom returns the value of the uid key on the ctx +func UIDFrom(ctx Context) (types.UID, bool) { + uid, ok := ctx.Value(uidKey).(types.UID) + return uid, ok +} + +// WithUserAgent returns a copy of parent in which the user value is set +func WithUserAgent(parent Context, userAgent string) Context { + return WithValue(parent, userAgentKey, userAgent) +} + +// UserAgentFrom returns the value of the userAgent key on the ctx +func UserAgentFrom(ctx Context) (string, bool) { + userAgent, ok := ctx.Value(userAgentKey).(string) + return userAgent, ok +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/conversion.go b/vendor/k8s.io/client-go/1.4/pkg/api/conversion.go new file mode 100644 index 00000000..ff7960ed --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/conversion.go @@ -0,0 +1,245 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "fmt" + + "k8s.io/client-go/1.4/pkg/api/resource" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion" + "k8s.io/client-go/1.4/pkg/fields" + "k8s.io/client-go/1.4/pkg/labels" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/util/intstr" + utillabels "k8s.io/client-go/1.4/pkg/util/labels" + "k8s.io/client-go/1.4/pkg/util/validation/field" +) + +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddConversionFuncs( + Convert_unversioned_TypeMeta_To_unversioned_TypeMeta, + + Convert_unversioned_ListMeta_To_unversioned_ListMeta, + + Convert_intstr_IntOrString_To_intstr_IntOrString, + + Convert_unversioned_Time_To_unversioned_Time, + + Convert_Slice_string_To_unversioned_Time, + + Convert_resource_Quantity_To_resource_Quantity, + + Convert_string_To_labels_Selector, + Convert_labels_Selector_To_string, + + Convert_string_To_fields_Selector, + Convert_fields_Selector_To_string, + + Convert_Pointer_bool_To_bool, + Convert_bool_To_Pointer_bool, + + Convert_Pointer_string_To_string, + Convert_string_To_Pointer_string, + + Convert_Pointer_int64_To_int, + Convert_int_To_Pointer_int64, + + Convert_Pointer_int32_To_int32, + Convert_int32_To_Pointer_int32, + + Convert_Pointer_float64_To_float64, + Convert_float64_To_Pointer_float64, + + Convert_map_to_unversioned_LabelSelector, + Convert_unversioned_LabelSelector_to_map, + ) +} + +func Convert_Pointer_float64_To_float64(in **float64, out *float64, s conversion.Scope) error { + if *in == nil { + *out = 0 + return nil + } + *out = float64(**in) + return nil +} + +func Convert_float64_To_Pointer_float64(in *float64, out **float64, s conversion.Scope) error { + temp := float64(*in) + *out = &temp + return nil +} + +func Convert_Pointer_int32_To_int32(in **int32, out *int32, s conversion.Scope) error { + if *in == nil { + *out = 0 + return nil + } + *out = int32(**in) + return nil +} + +func Convert_int32_To_Pointer_int32(in *int32, out **int32, s conversion.Scope) error { + temp := int32(*in) + *out = &temp + return nil +} + +func Convert_Pointer_int64_To_int(in **int64, out *int, s conversion.Scope) error { + if *in == nil { + *out = 0 + return nil + } + *out = int(**in) + return nil +} + +func Convert_int_To_Pointer_int64(in *int, out **int64, s conversion.Scope) error { + temp := int64(*in) + *out = &temp + return nil +} + +func Convert_Pointer_string_To_string(in **string, out *string, s conversion.Scope) error { + if *in == nil { + *out = "" + return nil + } + *out = **in + return nil +} + +func Convert_string_To_Pointer_string(in *string, out **string, s conversion.Scope) error { + if in == nil { + stringVar := "" + *out = &stringVar + return nil + } + *out = in + return nil +} + +func Convert_Pointer_bool_To_bool(in **bool, out *bool, s conversion.Scope) error { + if *in == nil { + *out = false + return nil + } + *out = **in + return nil +} + +func Convert_bool_To_Pointer_bool(in *bool, out **bool, s conversion.Scope) error { + if in == nil { + boolVar := false + *out = &boolVar + return nil + } + *out = in + return nil +} + +func Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(in, out *unversioned.TypeMeta, s conversion.Scope) error { + // These values are explicitly not copied + //out.APIVersion = in.APIVersion + //out.Kind = in.Kind + return nil +} + +func Convert_unversioned_ListMeta_To_unversioned_ListMeta(in, out *unversioned.ListMeta, s conversion.Scope) error { + *out = *in + return nil +} + +func Convert_intstr_IntOrString_To_intstr_IntOrString(in, out *intstr.IntOrString, s conversion.Scope) error { + *out = *in + return nil +} + +func Convert_unversioned_Time_To_unversioned_Time(in *unversioned.Time, out *unversioned.Time, s conversion.Scope) error { + // Cannot deep copy these, because time.Time has unexported fields. + *out = *in + return nil +} + +// Convert_Slice_string_To_unversioned_Time allows converting a URL query parameter value +func Convert_Slice_string_To_unversioned_Time(input *[]string, out *unversioned.Time, s conversion.Scope) error { + str := "" + if len(*input) > 0 { + str = (*input)[0] + } + return out.UnmarshalQueryParameter(str) +} + +func Convert_string_To_labels_Selector(in *string, out *labels.Selector, s conversion.Scope) error { + selector, err := labels.Parse(*in) + if err != nil { + return err + } + *out = selector + return nil +} + +func Convert_string_To_fields_Selector(in *string, out *fields.Selector, s conversion.Scope) error { + selector, err := fields.ParseSelector(*in) + if err != nil { + return err + } + *out = selector + return nil +} + +func Convert_labels_Selector_To_string(in *labels.Selector, out *string, s conversion.Scope) error { + if *in == nil { + return nil + } + *out = (*in).String() + return nil +} + +func Convert_fields_Selector_To_string(in *fields.Selector, out *string, s conversion.Scope) error { + if *in == nil { + return nil + } + *out = (*in).String() + return nil +} + +func Convert_resource_Quantity_To_resource_Quantity(in *resource.Quantity, out *resource.Quantity, s conversion.Scope) error { + *out = *in + return nil +} + +func Convert_map_to_unversioned_LabelSelector(in *map[string]string, out *unversioned.LabelSelector, s conversion.Scope) error { + if in == nil { + return nil + } + out = new(unversioned.LabelSelector) + for labelKey, labelValue := range *in { + utillabels.AddLabelToSelector(out, labelKey, labelValue) + } + return nil +} + +func Convert_unversioned_LabelSelector_to_map(in *unversioned.LabelSelector, out *map[string]string, s conversion.Scope) error { + var err error + *out, err = unversioned.LabelSelectorAsMap(in) + if err != nil { + err = field.Invalid(field.NewPath("labelSelector"), *in, fmt.Sprintf("cannot convert to old selector: %v", err)) + } + return err +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/defaults.go b/vendor/k8s.io/client-go/1.4/pkg/api/defaults.go new file mode 100644 index 00000000..860c18d0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/defaults.go @@ -0,0 +1,36 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/client-go/1.4/pkg/fields" + "k8s.io/client-go/1.4/pkg/labels" + "k8s.io/client-go/1.4/pkg/runtime" +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( + func(obj *ListOptions) { + if obj.LabelSelector == nil { + obj.LabelSelector = labels.Everything() + } + if obj.FieldSelector == nil { + obj.FieldSelector = fields.Everything() + } + }, + ) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/doc.go b/vendor/k8s.io/client-go/1.4/pkg/api/doc.go new file mode 100644 index 00000000..1507a882 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/doc.go @@ -0,0 +1,24 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +// Package api contains the latest (or "internal") version of the +// Kubernetes API objects. This is the API objects as represented in memory. +// The contract presented to clients is located in the versioned packages, +// which are sub-directories. The first one is "v1". Those packages +// describe how a particular version is serialized to storage/network. +package api diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/endpoints/util.go b/vendor/k8s.io/client-go/1.4/pkg/api/endpoints/util.go new file mode 100644 index 00000000..5edacdd2 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/endpoints/util.go @@ -0,0 +1,238 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package endpoints + +import ( + "bytes" + "crypto/md5" + "encoding/hex" + "hash" + "sort" + + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/types" + hashutil "k8s.io/client-go/1.4/pkg/util/hash" +) + +const ( + // TODO: to be deleted after v1.3 is released + // Its value is the json representation of map[string(IP)][HostRecord] + // example: '{"10.245.1.6":{"HostName":"my-webserver"}}' + PodHostnamesAnnotation = "endpoints.beta.kubernetes.io/hostnames-map" +) + +// TODO: to be deleted after v1.3 is released +type HostRecord struct { + HostName string +} + +// RepackSubsets takes a slice of EndpointSubset objects, expands it to the full +// representation, and then repacks that into the canonical layout. This +// ensures that code which operates on these objects can rely on the common +// form for things like comparison. The result is a newly allocated slice. +func RepackSubsets(subsets []api.EndpointSubset) []api.EndpointSubset { + // First map each unique port definition to the sets of hosts that + // offer it. + allAddrs := map[addressKey]*api.EndpointAddress{} + portToAddrReadyMap := map[api.EndpointPort]addressSet{} + for i := range subsets { + for _, port := range subsets[i].Ports { + for k := range subsets[i].Addresses { + mapAddressByPort(&subsets[i].Addresses[k], port, true, allAddrs, portToAddrReadyMap) + } + for k := range subsets[i].NotReadyAddresses { + mapAddressByPort(&subsets[i].NotReadyAddresses[k], port, false, allAddrs, portToAddrReadyMap) + } + } + } + + // Next, map the sets of hosts to the sets of ports they offer. + // Go does not allow maps or slices as keys to maps, so we have + // to synthesize an artificial key and do a sort of 2-part + // associative entity. + type keyString string + keyToAddrReadyMap := map[keyString]addressSet{} + addrReadyMapKeyToPorts := map[keyString][]api.EndpointPort{} + for port, addrs := range portToAddrReadyMap { + key := keyString(hashAddresses(addrs)) + keyToAddrReadyMap[key] = addrs + addrReadyMapKeyToPorts[key] = append(addrReadyMapKeyToPorts[key], port) + } + + // Next, build the N-to-M association the API wants. + final := []api.EndpointSubset{} + for key, ports := range addrReadyMapKeyToPorts { + var readyAddrs, notReadyAddrs []api.EndpointAddress + for addr, ready := range keyToAddrReadyMap[key] { + if ready { + readyAddrs = append(readyAddrs, *addr) + } else { + notReadyAddrs = append(notReadyAddrs, *addr) + } + } + final = append(final, api.EndpointSubset{Addresses: readyAddrs, NotReadyAddresses: notReadyAddrs, Ports: ports}) + } + + // Finally, sort it. + return SortSubsets(final) +} + +// The sets of hosts must be de-duped, using IP+UID as the key. +type addressKey struct { + ip string + uid types.UID +} + +// mapAddressByPort adds an address into a map by its ports, registering the address with a unique pointer, and preserving +// any existing ready state. +func mapAddressByPort(addr *api.EndpointAddress, port api.EndpointPort, ready bool, allAddrs map[addressKey]*api.EndpointAddress, portToAddrReadyMap map[api.EndpointPort]addressSet) *api.EndpointAddress { + // use addressKey to distinguish between two endpoints that are identical addresses + // but may have come from different hosts, for attribution. For instance, Mesos + // assigns pods the node IP, but the pods are distinct. + key := addressKey{ip: addr.IP} + if addr.TargetRef != nil { + key.uid = addr.TargetRef.UID + } + + // Accumulate the address. The full EndpointAddress structure is preserved for use when + // we rebuild the subsets so that the final TargetRef has all of the necessary data. + existingAddress := allAddrs[key] + if existingAddress == nil { + // Make a copy so we don't write to the + // input args of this function. + existingAddress = &api.EndpointAddress{} + *existingAddress = *addr + allAddrs[key] = existingAddress + } + + // Remember that this port maps to this address. + if _, found := portToAddrReadyMap[port]; !found { + portToAddrReadyMap[port] = addressSet{} + } + // if we have not yet recorded this port for this address, or if the previous + // state was ready, write the current ready state. not ready always trumps + // ready. + if wasReady, found := portToAddrReadyMap[port][existingAddress]; !found || wasReady { + portToAddrReadyMap[port][existingAddress] = ready + } + return existingAddress +} + +type addressSet map[*api.EndpointAddress]bool + +type addrReady struct { + addr *api.EndpointAddress + ready bool +} + +func hashAddresses(addrs addressSet) string { + // Flatten the list of addresses into a string so it can be used as a + // map key. Unfortunately, DeepHashObject is implemented in terms of + // spew, and spew does not handle non-primitive map keys well. So + // first we collapse it into a slice, sort the slice, then hash that. + slice := make([]addrReady, 0, len(addrs)) + for k, ready := range addrs { + slice = append(slice, addrReady{k, ready}) + } + sort.Sort(addrsReady(slice)) + hasher := md5.New() + hashutil.DeepHashObject(hasher, slice) + return hex.EncodeToString(hasher.Sum(nil)[0:]) +} + +func lessAddrReady(a, b addrReady) bool { + // ready is not significant to hashing since we can't have duplicate addresses + return LessEndpointAddress(a.addr, b.addr) +} + +type addrsReady []addrReady + +func (sl addrsReady) Len() int { return len(sl) } +func (sl addrsReady) Swap(i, j int) { sl[i], sl[j] = sl[j], sl[i] } +func (sl addrsReady) Less(i, j int) bool { + return lessAddrReady(sl[i], sl[j]) +} + +func LessEndpointAddress(a, b *api.EndpointAddress) bool { + ipComparison := bytes.Compare([]byte(a.IP), []byte(b.IP)) + if ipComparison != 0 { + return ipComparison < 0 + } + if b.TargetRef == nil { + return false + } + if a.TargetRef == nil { + return true + } + return a.TargetRef.UID < b.TargetRef.UID +} + +type addrPtrsByIpAndUID []*api.EndpointAddress + +func (sl addrPtrsByIpAndUID) Len() int { return len(sl) } +func (sl addrPtrsByIpAndUID) Swap(i, j int) { sl[i], sl[j] = sl[j], sl[i] } +func (sl addrPtrsByIpAndUID) Less(i, j int) bool { + return LessEndpointAddress(sl[i], sl[j]) +} + +// SortSubsets sorts an array of EndpointSubset objects in place. For ease of +// use it returns the input slice. +func SortSubsets(subsets []api.EndpointSubset) []api.EndpointSubset { + for i := range subsets { + ss := &subsets[i] + sort.Sort(addrsByIpAndUID(ss.Addresses)) + sort.Sort(addrsByIpAndUID(ss.NotReadyAddresses)) + sort.Sort(portsByHash(ss.Ports)) + } + sort.Sort(subsetsByHash(subsets)) + return subsets +} + +func hashObject(hasher hash.Hash, obj interface{}) []byte { + hashutil.DeepHashObject(hasher, obj) + return hasher.Sum(nil) +} + +type subsetsByHash []api.EndpointSubset + +func (sl subsetsByHash) Len() int { return len(sl) } +func (sl subsetsByHash) Swap(i, j int) { sl[i], sl[j] = sl[j], sl[i] } +func (sl subsetsByHash) Less(i, j int) bool { + hasher := md5.New() + h1 := hashObject(hasher, sl[i]) + h2 := hashObject(hasher, sl[j]) + return bytes.Compare(h1, h2) < 0 +} + +type addrsByIpAndUID []api.EndpointAddress + +func (sl addrsByIpAndUID) Len() int { return len(sl) } +func (sl addrsByIpAndUID) Swap(i, j int) { sl[i], sl[j] = sl[j], sl[i] } +func (sl addrsByIpAndUID) Less(i, j int) bool { + return LessEndpointAddress(&sl[i], &sl[j]) +} + +type portsByHash []api.EndpointPort + +func (sl portsByHash) Len() int { return len(sl) } +func (sl portsByHash) Swap(i, j int) { sl[i], sl[j] = sl[j], sl[i] } +func (sl portsByHash) Less(i, j int) bool { + hasher := md5.New() + h1 := hashObject(hasher, sl[i]) + h2 := hashObject(hasher, sl[j]) + return bytes.Compare(h1, h2) < 0 +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/errors/doc.go b/vendor/k8s.io/client-go/1.4/pkg/api/errors/doc.go new file mode 100644 index 00000000..58751ed0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/errors/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package errors provides detailed error types for api field validation. +package errors diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/errors/errors.go b/vendor/k8s.io/client-go/1.4/pkg/api/errors/errors.go new file mode 100644 index 00000000..1cc3ad7d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/errors/errors.go @@ -0,0 +1,456 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package errors + +import ( + "encoding/json" + "fmt" + "net/http" + "strings" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/util/validation/field" +) + +// HTTP Status codes not in the golang http package. +const ( + StatusUnprocessableEntity = 422 + StatusTooManyRequests = 429 + // HTTP recommendations are for servers to define 5xx error codes + // for scenarios not covered by behavior. In this case, ServerTimeout + // is an indication that a transient server error has occurred and the + // client *should* retry, with an optional Retry-After header to specify + // the back off window. + StatusServerTimeout = 504 +) + +// StatusError is an error intended for consumption by a REST API server; it can also be +// reconstructed by clients from a REST response. Public to allow easy type switches. +type StatusError struct { + ErrStatus unversioned.Status +} + +// APIStatus is exposed by errors that can be converted to an api.Status object +// for finer grained details. +type APIStatus interface { + Status() unversioned.Status +} + +var _ error = &StatusError{} + +// Error implements the Error interface. +func (e *StatusError) Error() string { + return e.ErrStatus.Message +} + +// Status allows access to e's status without having to know the detailed workings +// of StatusError. Used by pkg/apiserver. +func (e *StatusError) Status() unversioned.Status { + return e.ErrStatus +} + +// DebugError reports extended info about the error to debug output. +func (e *StatusError) DebugError() (string, []interface{}) { + if out, err := json.MarshalIndent(e.ErrStatus, "", " "); err == nil { + return "server response object: %s", []interface{}{string(out)} + } + return "server response object: %#v", []interface{}{e.ErrStatus} +} + +// UnexpectedObjectError can be returned by FromObject if it's passed a non-status object. +type UnexpectedObjectError struct { + Object runtime.Object +} + +// Error returns an error message describing 'u'. +func (u *UnexpectedObjectError) Error() string { + return fmt.Sprintf("unexpected object: %v", u.Object) +} + +// FromObject generates an StatusError from an unversioned.Status, if that is the type of obj; otherwise, +// returns an UnexpecteObjectError. +func FromObject(obj runtime.Object) error { + switch t := obj.(type) { + case *unversioned.Status: + return &StatusError{*t} + } + return &UnexpectedObjectError{obj} +} + +// NewNotFound returns a new error which indicates that the resource of the kind and the name was not found. +func NewNotFound(qualifiedResource unversioned.GroupResource, name string) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusNotFound, + Reason: unversioned.StatusReasonNotFound, + Details: &unversioned.StatusDetails{ + Group: qualifiedResource.Group, + Kind: qualifiedResource.Resource, + Name: name, + }, + Message: fmt.Sprintf("%s %q not found", qualifiedResource.String(), name), + }} +} + +// NewAlreadyExists returns an error indicating the item requested exists by that identifier. +func NewAlreadyExists(qualifiedResource unversioned.GroupResource, name string) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusConflict, + Reason: unversioned.StatusReasonAlreadyExists, + Details: &unversioned.StatusDetails{ + Group: qualifiedResource.Group, + Kind: qualifiedResource.Resource, + Name: name, + }, + Message: fmt.Sprintf("%s %q already exists", qualifiedResource.String(), name), + }} +} + +// NewUnauthorized returns an error indicating the client is not authorized to perform the requested +// action. +func NewUnauthorized(reason string) *StatusError { + message := reason + if len(message) == 0 { + message = "not authorized" + } + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusUnauthorized, + Reason: unversioned.StatusReasonUnauthorized, + Message: message, + }} +} + +// NewForbidden returns an error indicating the requested action was forbidden +func NewForbidden(qualifiedResource unversioned.GroupResource, name string, err error) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusForbidden, + Reason: unversioned.StatusReasonForbidden, + Details: &unversioned.StatusDetails{ + Group: qualifiedResource.Group, + Kind: qualifiedResource.Resource, + Name: name, + }, + Message: fmt.Sprintf("%s %q is forbidden: %v", qualifiedResource.String(), name, err), + }} +} + +// NewConflict returns an error indicating the item can't be updated as provided. +func NewConflict(qualifiedResource unversioned.GroupResource, name string, err error) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusConflict, + Reason: unversioned.StatusReasonConflict, + Details: &unversioned.StatusDetails{ + Group: qualifiedResource.Group, + Kind: qualifiedResource.Resource, + Name: name, + }, + Message: fmt.Sprintf("Operation cannot be fulfilled on %s %q: %v", qualifiedResource.String(), name, err), + }} +} + +// NewGone returns an error indicating the item no longer available at the server and no forwarding address is known. +func NewGone(message string) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusGone, + Reason: unversioned.StatusReasonGone, + Message: message, + }} +} + +// NewInvalid returns an error indicating the item is invalid and cannot be processed. +func NewInvalid(qualifiedKind unversioned.GroupKind, name string, errs field.ErrorList) *StatusError { + causes := make([]unversioned.StatusCause, 0, len(errs)) + for i := range errs { + err := errs[i] + causes = append(causes, unversioned.StatusCause{ + Type: unversioned.CauseType(err.Type), + Message: err.ErrorBody(), + Field: err.Field, + }) + } + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: StatusUnprocessableEntity, // RFC 4918: StatusUnprocessableEntity + Reason: unversioned.StatusReasonInvalid, + Details: &unversioned.StatusDetails{ + Group: qualifiedKind.Group, + Kind: qualifiedKind.Kind, + Name: name, + Causes: causes, + }, + Message: fmt.Sprintf("%s %q is invalid: %v", qualifiedKind.String(), name, errs.ToAggregate()), + }} +} + +// NewBadRequest creates an error that indicates that the request is invalid and can not be processed. +func NewBadRequest(reason string) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusBadRequest, + Reason: unversioned.StatusReasonBadRequest, + Message: reason, + }} +} + +// NewServiceUnavailable creates an error that indicates that the requested service is unavailable. +func NewServiceUnavailable(reason string) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusServiceUnavailable, + Reason: unversioned.StatusReasonServiceUnavailable, + Message: reason, + }} +} + +// NewMethodNotSupported returns an error indicating the requested action is not supported on this kind. +func NewMethodNotSupported(qualifiedResource unversioned.GroupResource, action string) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusMethodNotAllowed, + Reason: unversioned.StatusReasonMethodNotAllowed, + Details: &unversioned.StatusDetails{ + Group: qualifiedResource.Group, + Kind: qualifiedResource.Resource, + }, + Message: fmt.Sprintf("%s is not supported on resources of kind %q", action, qualifiedResource.String()), + }} +} + +// NewServerTimeout returns an error indicating the requested action could not be completed due to a +// transient error, and the client should try again. +func NewServerTimeout(qualifiedResource unversioned.GroupResource, operation string, retryAfterSeconds int) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusInternalServerError, + Reason: unversioned.StatusReasonServerTimeout, + Details: &unversioned.StatusDetails{ + Group: qualifiedResource.Group, + Kind: qualifiedResource.Resource, + Name: operation, + RetryAfterSeconds: int32(retryAfterSeconds), + }, + Message: fmt.Sprintf("The %s operation against %s could not be completed at this time, please try again.", operation, qualifiedResource.String()), + }} +} + +// NewServerTimeoutForKind should not exist. Server timeouts happen when accessing resources, the Kind is just what we +// happened to be looking at when the request failed. This delegates to keep code sane, but we should work towards removing this. +func NewServerTimeoutForKind(qualifiedKind unversioned.GroupKind, operation string, retryAfterSeconds int) *StatusError { + return NewServerTimeout(unversioned.GroupResource{Group: qualifiedKind.Group, Resource: qualifiedKind.Kind}, operation, retryAfterSeconds) +} + +// NewInternalError returns an error indicating the item is invalid and cannot be processed. +func NewInternalError(err error) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: http.StatusInternalServerError, + Reason: unversioned.StatusReasonInternalError, + Details: &unversioned.StatusDetails{ + Causes: []unversioned.StatusCause{{Message: err.Error()}}, + }, + Message: fmt.Sprintf("Internal error occurred: %v", err), + }} +} + +// NewTimeoutError returns an error indicating that a timeout occurred before the request +// could be completed. Clients may retry, but the operation may still complete. +func NewTimeoutError(message string, retryAfterSeconds int) *StatusError { + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: StatusServerTimeout, + Reason: unversioned.StatusReasonTimeout, + Message: fmt.Sprintf("Timeout: %s", message), + Details: &unversioned.StatusDetails{ + RetryAfterSeconds: int32(retryAfterSeconds), + }, + }} +} + +// NewGenericServerResponse returns a new error for server responses that are not in a recognizable form. +func NewGenericServerResponse(code int, verb string, qualifiedResource unversioned.GroupResource, name, serverMessage string, retryAfterSeconds int, isUnexpectedResponse bool) *StatusError { + reason := unversioned.StatusReasonUnknown + message := fmt.Sprintf("the server responded with the status code %d but did not return more information", code) + switch code { + case http.StatusConflict: + if verb == "POST" { + reason = unversioned.StatusReasonAlreadyExists + } else { + reason = unversioned.StatusReasonConflict + } + message = "the server reported a conflict" + case http.StatusNotFound: + reason = unversioned.StatusReasonNotFound + message = "the server could not find the requested resource" + case http.StatusBadRequest: + reason = unversioned.StatusReasonBadRequest + message = "the server rejected our request for an unknown reason" + case http.StatusUnauthorized: + reason = unversioned.StatusReasonUnauthorized + message = "the server has asked for the client to provide credentials" + case http.StatusForbidden: + reason = unversioned.StatusReasonForbidden + message = "the server does not allow access to the requested resource" + case http.StatusMethodNotAllowed: + reason = unversioned.StatusReasonMethodNotAllowed + message = "the server does not allow this method on the requested resource" + case StatusUnprocessableEntity: + reason = unversioned.StatusReasonInvalid + message = "the server rejected our request due to an error in our request" + case StatusServerTimeout: + reason = unversioned.StatusReasonServerTimeout + message = "the server cannot complete the requested operation at this time, try again later" + case StatusTooManyRequests: + reason = unversioned.StatusReasonTimeout + message = "the server has received too many requests and has asked us to try again later" + default: + if code >= 500 { + reason = unversioned.StatusReasonInternalError + message = fmt.Sprintf("an error on the server (%q) has prevented the request from succeeding", serverMessage) + } + } + switch { + case !qualifiedResource.Empty() && len(name) > 0: + message = fmt.Sprintf("%s (%s %s %s)", message, strings.ToLower(verb), qualifiedResource.String(), name) + case !qualifiedResource.Empty(): + message = fmt.Sprintf("%s (%s %s)", message, strings.ToLower(verb), qualifiedResource.String()) + } + var causes []unversioned.StatusCause + if isUnexpectedResponse { + causes = []unversioned.StatusCause{ + { + Type: unversioned.CauseTypeUnexpectedServerResponse, + Message: serverMessage, + }, + } + } else { + causes = nil + } + return &StatusError{unversioned.Status{ + Status: unversioned.StatusFailure, + Code: int32(code), + Reason: reason, + Details: &unversioned.StatusDetails{ + Group: qualifiedResource.Group, + Kind: qualifiedResource.Resource, + Name: name, + + Causes: causes, + RetryAfterSeconds: int32(retryAfterSeconds), + }, + Message: message, + }} +} + +// IsNotFound returns true if the specified error was created by NewNotFound. +func IsNotFound(err error) bool { + return reasonForError(err) == unversioned.StatusReasonNotFound +} + +// IsAlreadyExists determines if the err is an error which indicates that a specified resource already exists. +func IsAlreadyExists(err error) bool { + return reasonForError(err) == unversioned.StatusReasonAlreadyExists +} + +// IsConflict determines if the err is an error which indicates the provided update conflicts. +func IsConflict(err error) bool { + return reasonForError(err) == unversioned.StatusReasonConflict +} + +// IsInvalid determines if the err is an error which indicates the provided resource is not valid. +func IsInvalid(err error) bool { + return reasonForError(err) == unversioned.StatusReasonInvalid +} + +// IsMethodNotSupported determines if the err is an error which indicates the provided action could not +// be performed because it is not supported by the server. +func IsMethodNotSupported(err error) bool { + return reasonForError(err) == unversioned.StatusReasonMethodNotAllowed +} + +// IsBadRequest determines if err is an error which indicates that the request is invalid. +func IsBadRequest(err error) bool { + return reasonForError(err) == unversioned.StatusReasonBadRequest +} + +// IsUnauthorized determines if err is an error which indicates that the request is unauthorized and +// requires authentication by the user. +func IsUnauthorized(err error) bool { + return reasonForError(err) == unversioned.StatusReasonUnauthorized +} + +// IsForbidden determines if err is an error which indicates that the request is forbidden and cannot +// be completed as requested. +func IsForbidden(err error) bool { + return reasonForError(err) == unversioned.StatusReasonForbidden +} + +// IsServerTimeout determines if err is an error which indicates that the request needs to be retried +// by the client. +func IsServerTimeout(err error) bool { + return reasonForError(err) == unversioned.StatusReasonServerTimeout +} + +// IsUnexpectedServerError returns true if the server response was not in the expected API format, +// and may be the result of another HTTP actor. +func IsUnexpectedServerError(err error) bool { + switch t := err.(type) { + case APIStatus: + if d := t.Status().Details; d != nil { + for _, cause := range d.Causes { + if cause.Type == unversioned.CauseTypeUnexpectedServerResponse { + return true + } + } + } + } + return false +} + +// IsUnexpectedObjectError determines if err is due to an unexpected object from the master. +func IsUnexpectedObjectError(err error) bool { + _, ok := err.(*UnexpectedObjectError) + return err != nil && ok +} + +// SuggestsClientDelay returns true if this error suggests a client delay as well as the +// suggested seconds to wait, or false if the error does not imply a wait. +func SuggestsClientDelay(err error) (int, bool) { + switch t := err.(type) { + case APIStatus: + if t.Status().Details != nil { + switch t.Status().Reason { + case unversioned.StatusReasonServerTimeout, unversioned.StatusReasonTimeout: + return int(t.Status().Details.RetryAfterSeconds), true + } + } + } + return 0, false +} + +func reasonForError(err error) unversioned.StatusReason { + switch t := err.(type) { + case APIStatus: + return t.Status().Reason + } + return unversioned.StatusReasonUnknown +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/field_constants.go b/vendor/k8s.io/client-go/1.4/pkg/api/field_constants.go new file mode 100644 index 00000000..5ead0f13 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/field_constants.go @@ -0,0 +1,38 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +// Field path constants that are specific to the internal API +// representation. +const ( + NodeUnschedulableField = "spec.unschedulable" + ObjectNameField = "metadata.name" + PodHostField = "spec.nodeName" + PodStatusField = "status.phase" + SecretTypeField = "type" + + EventReasonField = "reason" + EventSourceField = "source" + EventTypeField = "type" + EventInvolvedKindField = "involvedObject.kind" + EventInvolvedNamespaceField = "involvedObject.namespace" + EventInvolvedNameField = "involvedObject.name" + EventInvolvedUIDField = "involvedObject.uid" + EventInvolvedAPIVersionField = "involvedObject.apiVersion" + EventInvolvedResourceVersionField = "involvedObject.resourceVersion" + EventInvolvedFieldPathField = "involvedObject.fieldPath" +) diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/generate.go b/vendor/k8s.io/client-go/1.4/pkg/api/generate.go new file mode 100644 index 00000000..11cb6c9f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/generate.go @@ -0,0 +1,64 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "fmt" + + utilrand "k8s.io/client-go/1.4/pkg/util/rand" +) + +// NameGenerator generates names for objects. Some backends may have more information +// available to guide selection of new names and this interface hides those details. +type NameGenerator interface { + // GenerateName generates a valid name from the base name, adding a random suffix to the + // the base. If base is valid, the returned name must also be valid. The generator is + // responsible for knowing the maximum valid name length. + GenerateName(base string) string +} + +// GenerateName will resolve the object name of the provided ObjectMeta to a generated version if +// necessary. It expects that validation for ObjectMeta has already completed (that Base is a +// valid name) and that the NameGenerator generates a name that is also valid. +func GenerateName(u NameGenerator, meta *ObjectMeta) { + if len(meta.GenerateName) == 0 || len(meta.Name) != 0 { + return + } + meta.Name = u.GenerateName(meta.GenerateName) +} + +// simpleNameGenerator generates random names. +type simpleNameGenerator struct{} + +// SimpleNameGenerator is a generator that returns the name plus a random suffix of five alphanumerics +// when a name is requested. The string is guaranteed to not exceed the length of a standard Kubernetes +// name (63 characters) +var SimpleNameGenerator NameGenerator = simpleNameGenerator{} + +const ( + // TODO: make this flexible for non-core resources with alternate naming rules. + maxNameLength = 63 + randomLength = 5 + maxGeneratedNameLength = maxNameLength - randomLength +) + +func (simpleNameGenerator) GenerateName(base string) string { + if len(base) > maxGeneratedNameLength { + base = base[:maxGeneratedNameLength] + } + return fmt.Sprintf("%s%s", base, utilrand.String(randomLength)) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/helpers.go b/vendor/k8s.io/client-go/1.4/pkg/api/helpers.go new file mode 100644 index 00000000..103e7745 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/helpers.go @@ -0,0 +1,600 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "crypto/md5" + "encoding/json" + "fmt" + "reflect" + "strings" + "time" + + "k8s.io/client-go/1.4/pkg/api/resource" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion" + "k8s.io/client-go/1.4/pkg/fields" + "k8s.io/client-go/1.4/pkg/labels" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/selection" + "k8s.io/client-go/1.4/pkg/types" + "k8s.io/client-go/1.4/pkg/util/sets" + + "github.com/davecgh/go-spew/spew" +) + +// Conversion error conveniently packages up errors in conversions. +type ConversionError struct { + In, Out interface{} + Message string +} + +// Return a helpful string about the error +func (c *ConversionError) Error() string { + return spew.Sprintf( + "Conversion error: %s. (in: %v(%+v) out: %v)", + c.Message, reflect.TypeOf(c.In), c.In, reflect.TypeOf(c.Out), + ) +} + +// Semantic can do semantic deep equality checks for api objects. +// Example: api.Semantic.DeepEqual(aPod, aPodWithNonNilButEmptyMaps) == true +var Semantic = conversion.EqualitiesOrDie( + func(a, b resource.Quantity) bool { + // Ignore formatting, only care that numeric value stayed the same. + // TODO: if we decide it's important, it should be safe to start comparing the format. + // + // Uninitialized quantities are equivalent to 0 quantities. + return a.Cmp(b) == 0 + }, + func(a, b unversioned.Time) bool { + return a.UTC() == b.UTC() + }, + func(a, b labels.Selector) bool { + return a.String() == b.String() + }, + func(a, b fields.Selector) bool { + return a.String() == b.String() + }, +) + +var standardResourceQuotaScopes = sets.NewString( + string(ResourceQuotaScopeTerminating), + string(ResourceQuotaScopeNotTerminating), + string(ResourceQuotaScopeBestEffort), + string(ResourceQuotaScopeNotBestEffort), +) + +// IsStandardResourceQuotaScope returns true if the scope is a standard value +func IsStandardResourceQuotaScope(str string) bool { + return standardResourceQuotaScopes.Has(str) +} + +var podObjectCountQuotaResources = sets.NewString( + string(ResourcePods), +) + +var podComputeQuotaResources = sets.NewString( + string(ResourceCPU), + string(ResourceMemory), + string(ResourceLimitsCPU), + string(ResourceLimitsMemory), + string(ResourceRequestsCPU), + string(ResourceRequestsMemory), +) + +// IsResourceQuotaScopeValidForResource returns true if the resource applies to the specified scope +func IsResourceQuotaScopeValidForResource(scope ResourceQuotaScope, resource string) bool { + switch scope { + case ResourceQuotaScopeTerminating, ResourceQuotaScopeNotTerminating, ResourceQuotaScopeNotBestEffort: + return podObjectCountQuotaResources.Has(resource) || podComputeQuotaResources.Has(resource) + case ResourceQuotaScopeBestEffort: + return podObjectCountQuotaResources.Has(resource) + default: + return true + } +} + +var standardContainerResources = sets.NewString( + string(ResourceCPU), + string(ResourceMemory), +) + +// IsStandardContainerResourceName returns true if the container can make a resource request +// for the specified resource +func IsStandardContainerResourceName(str string) bool { + return standardContainerResources.Has(str) +} + +var standardLimitRangeTypes = sets.NewString( + string(LimitTypePod), + string(LimitTypeContainer), +) + +// IsStandardLimitRangeType returns true if the type is Pod or Container +func IsStandardLimitRangeType(str string) bool { + return standardLimitRangeTypes.Has(str) +} + +var standardQuotaResources = sets.NewString( + string(ResourceCPU), + string(ResourceMemory), + string(ResourceRequestsCPU), + string(ResourceRequestsMemory), + string(ResourceRequestsStorage), + string(ResourceLimitsCPU), + string(ResourceLimitsMemory), + string(ResourcePods), + string(ResourceQuotas), + string(ResourceServices), + string(ResourceReplicationControllers), + string(ResourceSecrets), + string(ResourcePersistentVolumeClaims), + string(ResourceConfigMaps), + string(ResourceServicesNodePorts), + string(ResourceServicesLoadBalancers), +) + +// IsStandardQuotaResourceName returns true if the resource is known to +// the quota tracking system +func IsStandardQuotaResourceName(str string) bool { + return standardQuotaResources.Has(str) +} + +var standardResources = sets.NewString( + string(ResourceCPU), + string(ResourceMemory), + string(ResourceRequestsCPU), + string(ResourceRequestsMemory), + string(ResourceLimitsCPU), + string(ResourceLimitsMemory), + string(ResourcePods), + string(ResourceQuotas), + string(ResourceServices), + string(ResourceReplicationControllers), + string(ResourceSecrets), + string(ResourceConfigMaps), + string(ResourcePersistentVolumeClaims), + string(ResourceStorage), +) + +// IsStandardResourceName returns true if the resource is known to the system +func IsStandardResourceName(str string) bool { + return standardResources.Has(str) +} + +var integerResources = sets.NewString( + string(ResourcePods), + string(ResourceQuotas), + string(ResourceServices), + string(ResourceReplicationControllers), + string(ResourceSecrets), + string(ResourceConfigMaps), + string(ResourcePersistentVolumeClaims), + string(ResourceServicesNodePorts), + string(ResourceServicesLoadBalancers), +) + +// IsIntegerResourceName returns true if the resource is measured in integer values +func IsIntegerResourceName(str string) bool { + return integerResources.Has(str) +} + +// NewDeleteOptions returns a DeleteOptions indicating the resource should +// be deleted within the specified grace period. Use zero to indicate +// immediate deletion. If you would prefer to use the default grace period, +// use &api.DeleteOptions{} directly. +func NewDeleteOptions(grace int64) *DeleteOptions { + return &DeleteOptions{GracePeriodSeconds: &grace} +} + +// NewPreconditionDeleteOptions returns a DeleteOptions with a UID precondition set. +func NewPreconditionDeleteOptions(uid string) *DeleteOptions { + u := types.UID(uid) + p := Preconditions{UID: &u} + return &DeleteOptions{Preconditions: &p} +} + +// NewUIDPreconditions returns a Preconditions with UID set. +func NewUIDPreconditions(uid string) *Preconditions { + u := types.UID(uid) + return &Preconditions{UID: &u} +} + +// this function aims to check if the service's ClusterIP is set or not +// the objective is not to perform validation here +func IsServiceIPSet(service *Service) bool { + return service.Spec.ClusterIP != ClusterIPNone && service.Spec.ClusterIP != "" +} + +// this function aims to check if the service's cluster IP is requested or not +func IsServiceIPRequested(service *Service) bool { + // ExternalName services are CNAME aliases to external ones. Ignore the IP. + if service.Spec.Type == ServiceTypeExternalName { + return false + } + return service.Spec.ClusterIP == "" +} + +var standardFinalizers = sets.NewString( + string(FinalizerKubernetes), + FinalizerOrphan, +) + +func IsStandardFinalizerName(str string) bool { + return standardFinalizers.Has(str) +} + +// SingleObject returns a ListOptions for watching a single object. +func SingleObject(meta ObjectMeta) ListOptions { + return ListOptions{ + FieldSelector: fields.OneTermEqualSelector("metadata.name", meta.Name), + ResourceVersion: meta.ResourceVersion, + } +} + +// AddToNodeAddresses appends the NodeAddresses to the passed-by-pointer slice, +// only if they do not already exist +func AddToNodeAddresses(addresses *[]NodeAddress, addAddresses ...NodeAddress) { + for _, add := range addAddresses { + exists := false + for _, existing := range *addresses { + if existing.Address == add.Address && existing.Type == add.Type { + exists = true + break + } + } + if !exists { + *addresses = append(*addresses, add) + } + } +} + +func HashObject(obj runtime.Object, codec runtime.Codec) (string, error) { + data, err := runtime.Encode(codec, obj) + if err != nil { + return "", err + } + return fmt.Sprintf("%x", md5.Sum(data)), nil +} + +// TODO: make method on LoadBalancerStatus? +func LoadBalancerStatusEqual(l, r *LoadBalancerStatus) bool { + return ingressSliceEqual(l.Ingress, r.Ingress) +} + +func ingressSliceEqual(lhs, rhs []LoadBalancerIngress) bool { + if len(lhs) != len(rhs) { + return false + } + for i := range lhs { + if !ingressEqual(&lhs[i], &rhs[i]) { + return false + } + } + return true +} + +func ingressEqual(lhs, rhs *LoadBalancerIngress) bool { + if lhs.IP != rhs.IP { + return false + } + if lhs.Hostname != rhs.Hostname { + return false + } + return true +} + +// TODO: make method on LoadBalancerStatus? +func LoadBalancerStatusDeepCopy(lb *LoadBalancerStatus) *LoadBalancerStatus { + c := &LoadBalancerStatus{} + c.Ingress = make([]LoadBalancerIngress, len(lb.Ingress)) + for i := range lb.Ingress { + c.Ingress[i] = lb.Ingress[i] + } + return c +} + +// GetAccessModesAsString returns a string representation of an array of access modes. +// modes, when present, are always in the same order: RWO,ROX,RWX. +func GetAccessModesAsString(modes []PersistentVolumeAccessMode) string { + modes = removeDuplicateAccessModes(modes) + modesStr := []string{} + if containsAccessMode(modes, ReadWriteOnce) { + modesStr = append(modesStr, "RWO") + } + if containsAccessMode(modes, ReadOnlyMany) { + modesStr = append(modesStr, "ROX") + } + if containsAccessMode(modes, ReadWriteMany) { + modesStr = append(modesStr, "RWX") + } + return strings.Join(modesStr, ",") +} + +// GetAccessModesAsString returns an array of AccessModes from a string created by GetAccessModesAsString +func GetAccessModesFromString(modes string) []PersistentVolumeAccessMode { + strmodes := strings.Split(modes, ",") + accessModes := []PersistentVolumeAccessMode{} + for _, s := range strmodes { + s = strings.Trim(s, " ") + switch { + case s == "RWO": + accessModes = append(accessModes, ReadWriteOnce) + case s == "ROX": + accessModes = append(accessModes, ReadOnlyMany) + case s == "RWX": + accessModes = append(accessModes, ReadWriteMany) + } + } + return accessModes +} + +// removeDuplicateAccessModes returns an array of access modes without any duplicates +func removeDuplicateAccessModes(modes []PersistentVolumeAccessMode) []PersistentVolumeAccessMode { + accessModes := []PersistentVolumeAccessMode{} + for _, m := range modes { + if !containsAccessMode(accessModes, m) { + accessModes = append(accessModes, m) + } + } + return accessModes +} + +func containsAccessMode(modes []PersistentVolumeAccessMode, mode PersistentVolumeAccessMode) bool { + for _, m := range modes { + if m == mode { + return true + } + } + return false +} + +// ParseRFC3339 parses an RFC3339 date in either RFC3339Nano or RFC3339 format. +func ParseRFC3339(s string, nowFn func() unversioned.Time) (unversioned.Time, error) { + if t, timeErr := time.Parse(time.RFC3339Nano, s); timeErr == nil { + return unversioned.Time{Time: t}, nil + } + t, err := time.Parse(time.RFC3339, s) + if err != nil { + return unversioned.Time{}, err + } + return unversioned.Time{Time: t}, nil +} + +// NodeSelectorRequirementsAsSelector converts the []NodeSelectorRequirement api type into a struct that implements +// labels.Selector. +func NodeSelectorRequirementsAsSelector(nsm []NodeSelectorRequirement) (labels.Selector, error) { + if len(nsm) == 0 { + return labels.Nothing(), nil + } + selector := labels.NewSelector() + for _, expr := range nsm { + var op selection.Operator + switch expr.Operator { + case NodeSelectorOpIn: + op = selection.In + case NodeSelectorOpNotIn: + op = selection.NotIn + case NodeSelectorOpExists: + op = selection.Exists + case NodeSelectorOpDoesNotExist: + op = selection.DoesNotExist + case NodeSelectorOpGt: + op = selection.GreaterThan + case NodeSelectorOpLt: + op = selection.LessThan + default: + return nil, fmt.Errorf("%q is not a valid node selector operator", expr.Operator) + } + r, err := labels.NewRequirement(expr.Key, op, sets.NewString(expr.Values...)) + if err != nil { + return nil, err + } + selector = selector.Add(*r) + } + return selector, nil +} + +const ( + // AffinityAnnotationKey represents the key of affinity data (json serialized) + // in the Annotations of a Pod. + AffinityAnnotationKey string = "scheduler.alpha.kubernetes.io/affinity" + + // TolerationsAnnotationKey represents the key of tolerations data (json serialized) + // in the Annotations of a Pod. + TolerationsAnnotationKey string = "scheduler.alpha.kubernetes.io/tolerations" + + // TaintsAnnotationKey represents the key of taints data (json serialized) + // in the Annotations of a Node. + TaintsAnnotationKey string = "scheduler.alpha.kubernetes.io/taints" + + // SeccompPodAnnotationKey represents the key of a seccomp profile applied + // to all containers of a pod. + SeccompPodAnnotationKey string = "seccomp.security.alpha.kubernetes.io/pod" + + // SeccompContainerAnnotationKeyPrefix represents the key of a seccomp profile applied + // to one container of a pod. + SeccompContainerAnnotationKeyPrefix string = "container.seccomp.security.alpha.kubernetes.io/" + + // CreatedByAnnotation represents the key used to store the spec(json) + // used to create the resource. + CreatedByAnnotation = "kubernetes.io/created-by" + + // PreferAvoidPodsAnnotationKey represents the key of preferAvoidPods data (json serialized) + // in the Annotations of a Node. + PreferAvoidPodsAnnotationKey string = "scheduler.alpha.kubernetes.io/preferAvoidPods" + + // SysctlsPodAnnotationKey represents the key of sysctls which are set for the infrastructure + // container of a pod. The annotation value is a comma separated list of sysctl_name=value + // key-value pairs. Only a limited set of whitelisted and isolated sysctls is supported by + // the kubelet. Pods with other sysctls will fail to launch. + SysctlsPodAnnotationKey string = "security.alpha.kubernetes.io/sysctls" + + // UnsafeSysctlsPodAnnotationKey represents the key of sysctls which are set for the infrastructure + // container of a pod. The annotation value is a comma separated list of sysctl_name=value + // key-value pairs. Unsafe sysctls must be explicitly enabled for a kubelet. They are properly + // namespaced to a pod or a container, but their isolation is usually unclear or weak. Their use + // is at-your-own-risk. Pods that attempt to set an unsafe sysctl that is not enabled for a kubelet + // will fail to launch. + UnsafeSysctlsPodAnnotationKey string = "security.alpha.kubernetes.io/unsafe-sysctls" +) + +// GetAffinityFromPod gets the json serialized affinity data from Pod.Annotations +// and converts it to the Affinity type in api. +func GetAffinityFromPodAnnotations(annotations map[string]string) (*Affinity, error) { + if len(annotations) > 0 && annotations[AffinityAnnotationKey] != "" { + var affinity Affinity + err := json.Unmarshal([]byte(annotations[AffinityAnnotationKey]), &affinity) + if err != nil { + return nil, err + } + return &affinity, nil + } + return nil, nil +} + +// GetTolerationsFromPodAnnotations gets the json serialized tolerations data from Pod.Annotations +// and converts it to the []Toleration type in api. +func GetTolerationsFromPodAnnotations(annotations map[string]string) ([]Toleration, error) { + var tolerations []Toleration + if len(annotations) > 0 && annotations[TolerationsAnnotationKey] != "" { + err := json.Unmarshal([]byte(annotations[TolerationsAnnotationKey]), &tolerations) + if err != nil { + return tolerations, err + } + } + return tolerations, nil +} + +// GetTaintsFromNodeAnnotations gets the json serialized taints data from Pod.Annotations +// and converts it to the []Taint type in api. +func GetTaintsFromNodeAnnotations(annotations map[string]string) ([]Taint, error) { + var taints []Taint + if len(annotations) > 0 && annotations[TaintsAnnotationKey] != "" { + err := json.Unmarshal([]byte(annotations[TaintsAnnotationKey]), &taints) + if err != nil { + return []Taint{}, err + } + } + return taints, nil +} + +// TolerationToleratesTaint checks if the toleration tolerates the taint. +func TolerationToleratesTaint(toleration *Toleration, taint *Taint) bool { + if len(toleration.Effect) != 0 && toleration.Effect != taint.Effect { + return false + } + + if toleration.Key != taint.Key { + return false + } + // TODO: Use proper defaulting when Toleration becomes a field of PodSpec + if (len(toleration.Operator) == 0 || toleration.Operator == TolerationOpEqual) && toleration.Value == taint.Value { + return true + } + if toleration.Operator == TolerationOpExists { + return true + } + return false + +} + +// TaintToleratedByTolerations checks if taint is tolerated by any of the tolerations. +func TaintToleratedByTolerations(taint *Taint, tolerations []Toleration) bool { + tolerated := false + for i := range tolerations { + if TolerationToleratesTaint(&tolerations[i], taint) { + tolerated = true + break + } + } + return tolerated +} + +// MatchTaint checks if the taint matches taintToMatch. Taints are unique by key:effect, +// if the two taints have same key:effect, regard as they match. +func (t *Taint) MatchTaint(taintToMatch Taint) bool { + return t.Key == taintToMatch.Key && t.Effect == taintToMatch.Effect +} + +// taint.ToString() converts taint struct to string in format key=value:effect or key:effect. +func (t *Taint) ToString() string { + if len(t.Value) == 0 { + return fmt.Sprintf("%v:%v", t.Key, t.Effect) + } + return fmt.Sprintf("%v=%v:%v", t.Key, t.Value, t.Effect) +} + +func GetAvoidPodsFromNodeAnnotations(annotations map[string]string) (AvoidPods, error) { + var avoidPods AvoidPods + if len(annotations) > 0 && annotations[PreferAvoidPodsAnnotationKey] != "" { + err := json.Unmarshal([]byte(annotations[PreferAvoidPodsAnnotationKey]), &avoidPods) + if err != nil { + return avoidPods, err + } + } + return avoidPods, nil +} + +// SysctlsFromPodAnnotations parses the sysctl annotations into a slice of safe Sysctls +// and a slice of unsafe Sysctls. This is only a convenience wrapper around +// SysctlsFromPodAnnotation. +func SysctlsFromPodAnnotations(a map[string]string) ([]Sysctl, []Sysctl, error) { + safe, err := SysctlsFromPodAnnotation(a[SysctlsPodAnnotationKey]) + if err != nil { + return nil, nil, err + } + unsafe, err := SysctlsFromPodAnnotation(a[UnsafeSysctlsPodAnnotationKey]) + if err != nil { + return nil, nil, err + } + + return safe, unsafe, nil +} + +// SysctlsFromPodAnnotation parses an annotation value into a slice of Sysctls. +func SysctlsFromPodAnnotation(annotation string) ([]Sysctl, error) { + if len(annotation) == 0 { + return nil, nil + } + + kvs := strings.Split(annotation, ",") + sysctls := make([]Sysctl, len(kvs)) + for i, kv := range kvs { + cs := strings.Split(kv, "=") + if len(cs) != 2 { + return nil, fmt.Errorf("sysctl %q not of the format sysctl_name=value", kv) + } + sysctls[i].Name = cs[0] + sysctls[i].Value = cs[1] + } + return sysctls, nil +} + +// PodAnnotationsFromSysctls creates an annotation value for a slice of Sysctls. +func PodAnnotationsFromSysctls(sysctls []Sysctl) string { + if len(sysctls) == 0 { + return "" + } + + kvs := make([]string, len(sysctls)) + for i := range sysctls { + kvs[i] = fmt.Sprintf("%s=%s", sysctls[i].Name, sysctls[i].Value) + } + return strings.Join(kvs, ",") +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/mapper.go b/vendor/k8s.io/client-go/1.4/pkg/api/mapper.go new file mode 100644 index 00000000..96c4ac4d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/mapper.go @@ -0,0 +1,68 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "strings" + + "k8s.io/client-go/1.4/pkg/api/meta" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/util/sets" +) + +var RESTMapper meta.RESTMapper + +func init() { + RESTMapper = meta.MultiRESTMapper{} +} + +func RegisterRESTMapper(m meta.RESTMapper) { + RESTMapper = append(RESTMapper.(meta.MultiRESTMapper), m) +} + +// Instantiates a DefaultRESTMapper based on types registered in api.Scheme +func NewDefaultRESTMapper(defaultGroupVersions []unversioned.GroupVersion, interfacesFunc meta.VersionInterfacesFunc, + importPathPrefix string, ignoredKinds, rootScoped sets.String) *meta.DefaultRESTMapper { + return NewDefaultRESTMapperFromScheme(defaultGroupVersions, interfacesFunc, importPathPrefix, ignoredKinds, rootScoped, Scheme) +} + +// Instantiates a DefaultRESTMapper based on types registered in the given scheme. +func NewDefaultRESTMapperFromScheme(defaultGroupVersions []unversioned.GroupVersion, interfacesFunc meta.VersionInterfacesFunc, + importPathPrefix string, ignoredKinds, rootScoped sets.String, scheme *runtime.Scheme) *meta.DefaultRESTMapper { + + mapper := meta.NewDefaultRESTMapper(defaultGroupVersions, interfacesFunc) + // enumerate all supported versions, get the kinds, and register with the mapper how to address + // our resources. + for _, gv := range defaultGroupVersions { + for kind, oType := range scheme.KnownTypes(gv) { + gvk := gv.WithKind(kind) + // TODO: Remove import path check. + // We check the import path because we currently stuff both "api" and "extensions" objects + // into the same group within Scheme since Scheme has no notion of groups yet. + if !strings.Contains(oType.PkgPath(), importPathPrefix) || ignoredKinds.Has(kind) { + continue + } + scope := meta.RESTScopeNamespace + if rootScoped.Has(kind) { + scope = meta.RESTScopeRoot + } + mapper.Add(gvk, scope) + } + } + return mapper +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta.go new file mode 100644 index 00000000..7647679d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta.go @@ -0,0 +1,140 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/client-go/1.4/pkg/api/meta" + "k8s.io/client-go/1.4/pkg/api/meta/metatypes" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/types" + "k8s.io/client-go/1.4/pkg/util/uuid" +) + +// FillObjectMetaSystemFields populates fields that are managed by the system on ObjectMeta. +func FillObjectMetaSystemFields(ctx Context, meta *ObjectMeta) { + meta.CreationTimestamp = unversioned.Now() + // allows admission controllers to assign a UID earlier in the request processing + // to support tracking resources pending creation. + uid, found := UIDFrom(ctx) + if !found { + uid = uuid.NewUUID() + } + meta.UID = uid + meta.SelfLink = "" +} + +// HasObjectMetaSystemFieldValues returns true if fields that are managed by the system on ObjectMeta have values. +func HasObjectMetaSystemFieldValues(meta *ObjectMeta) bool { + return !meta.CreationTimestamp.Time.IsZero() || + len(meta.UID) != 0 +} + +// ObjectMetaFor returns a pointer to a provided object's ObjectMeta. +// TODO: allow runtime.Unknown to extract this object +// TODO: Remove this function and use meta.Accessor() instead. +func ObjectMetaFor(obj runtime.Object) (*ObjectMeta, error) { + v, err := conversion.EnforcePtr(obj) + if err != nil { + return nil, err + } + var meta *ObjectMeta + err = runtime.FieldPtr(v, "ObjectMeta", &meta) + return meta, err +} + +// ListMetaFor returns a pointer to a provided object's ListMeta, +// or an error if the object does not have that pointer. +// TODO: allow runtime.Unknown to extract this object +func ListMetaFor(obj runtime.Object) (*unversioned.ListMeta, error) { + v, err := conversion.EnforcePtr(obj) + if err != nil { + return nil, err + } + var meta *unversioned.ListMeta + err = runtime.FieldPtr(v, "ListMeta", &meta) + return meta, err +} + +func (obj *ObjectMeta) GetObjectMeta() meta.Object { return obj } + +// Namespace implements meta.Object for any object with an ObjectMeta typed field. Allows +// fast, direct access to metadata fields for API objects. +func (meta *ObjectMeta) GetNamespace() string { return meta.Namespace } +func (meta *ObjectMeta) SetNamespace(namespace string) { meta.Namespace = namespace } +func (meta *ObjectMeta) GetName() string { return meta.Name } +func (meta *ObjectMeta) SetName(name string) { meta.Name = name } +func (meta *ObjectMeta) GetGenerateName() string { return meta.GenerateName } +func (meta *ObjectMeta) SetGenerateName(generateName string) { meta.GenerateName = generateName } +func (meta *ObjectMeta) GetUID() types.UID { return meta.UID } +func (meta *ObjectMeta) SetUID(uid types.UID) { meta.UID = uid } +func (meta *ObjectMeta) GetResourceVersion() string { return meta.ResourceVersion } +func (meta *ObjectMeta) SetResourceVersion(version string) { meta.ResourceVersion = version } +func (meta *ObjectMeta) GetSelfLink() string { return meta.SelfLink } +func (meta *ObjectMeta) SetSelfLink(selfLink string) { meta.SelfLink = selfLink } +func (meta *ObjectMeta) GetCreationTimestamp() unversioned.Time { return meta.CreationTimestamp } +func (meta *ObjectMeta) SetCreationTimestamp(creationTimestamp unversioned.Time) { + meta.CreationTimestamp = creationTimestamp +} +func (meta *ObjectMeta) GetDeletionTimestamp() *unversioned.Time { return meta.DeletionTimestamp } +func (meta *ObjectMeta) SetDeletionTimestamp(deletionTimestamp *unversioned.Time) { + meta.DeletionTimestamp = deletionTimestamp +} +func (meta *ObjectMeta) GetLabels() map[string]string { return meta.Labels } +func (meta *ObjectMeta) SetLabels(labels map[string]string) { meta.Labels = labels } +func (meta *ObjectMeta) GetAnnotations() map[string]string { return meta.Annotations } +func (meta *ObjectMeta) SetAnnotations(annotations map[string]string) { meta.Annotations = annotations } +func (meta *ObjectMeta) GetFinalizers() []string { return meta.Finalizers } +func (meta *ObjectMeta) SetFinalizers(finalizers []string) { meta.Finalizers = finalizers } + +func (meta *ObjectMeta) GetOwnerReferences() []metatypes.OwnerReference { + ret := make([]metatypes.OwnerReference, len(meta.OwnerReferences)) + for i := 0; i < len(meta.OwnerReferences); i++ { + ret[i].Kind = meta.OwnerReferences[i].Kind + ret[i].Name = meta.OwnerReferences[i].Name + ret[i].UID = meta.OwnerReferences[i].UID + ret[i].APIVersion = meta.OwnerReferences[i].APIVersion + if meta.OwnerReferences[i].Controller != nil { + value := *meta.OwnerReferences[i].Controller + ret[i].Controller = &value + } + } + return ret +} + +func (meta *ObjectMeta) SetOwnerReferences(references []metatypes.OwnerReference) { + newReferences := make([]OwnerReference, len(references)) + for i := 0; i < len(references); i++ { + newReferences[i].Kind = references[i].Kind + newReferences[i].Name = references[i].Name + newReferences[i].UID = references[i].UID + newReferences[i].APIVersion = references[i].APIVersion + if references[i].Controller != nil { + value := *references[i].Controller + newReferences[i].Controller = &value + } + } + meta.OwnerReferences = newReferences +} + +func (meta *ObjectMeta) GetClusterName() string { + return meta.ClusterName +} +func (meta *ObjectMeta) SetClusterName(clusterName string) { + meta.ClusterName = clusterName +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/doc.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/doc.go new file mode 100644 index 00000000..a3b18a5c --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package meta provides functions for retrieving API metadata from objects +// belonging to the Kubernetes API +package meta diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/errors.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/errors.go new file mode 100644 index 00000000..95679f16 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/errors.go @@ -0,0 +1,105 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package meta + +import ( + "fmt" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// AmbiguousResourceError is returned if the RESTMapper finds multiple matches for a resource +type AmbiguousResourceError struct { + PartialResource unversioned.GroupVersionResource + + MatchingResources []unversioned.GroupVersionResource + MatchingKinds []unversioned.GroupVersionKind +} + +func (e *AmbiguousResourceError) Error() string { + switch { + case len(e.MatchingKinds) > 0 && len(e.MatchingResources) > 0: + return fmt.Sprintf("%v matches multiple resources %v and kinds %v", e.PartialResource, e.MatchingResources, e.MatchingKinds) + case len(e.MatchingKinds) > 0: + return fmt.Sprintf("%v matches multiple kinds %v", e.PartialResource, e.MatchingKinds) + case len(e.MatchingResources) > 0: + return fmt.Sprintf("%v matches multiple resources %v", e.PartialResource, e.MatchingResources) + } + return fmt.Sprintf("%v matches multiple resources or kinds", e.PartialResource) +} + +// AmbiguousKindError is returned if the RESTMapper finds multiple matches for a kind +type AmbiguousKindError struct { + PartialKind unversioned.GroupVersionKind + + MatchingResources []unversioned.GroupVersionResource + MatchingKinds []unversioned.GroupVersionKind +} + +func (e *AmbiguousKindError) Error() string { + switch { + case len(e.MatchingKinds) > 0 && len(e.MatchingResources) > 0: + return fmt.Sprintf("%v matches multiple resources %v and kinds %v", e.PartialKind, e.MatchingResources, e.MatchingKinds) + case len(e.MatchingKinds) > 0: + return fmt.Sprintf("%v matches multiple kinds %v", e.PartialKind, e.MatchingKinds) + case len(e.MatchingResources) > 0: + return fmt.Sprintf("%v matches multiple resources %v", e.PartialKind, e.MatchingResources) + } + return fmt.Sprintf("%v matches multiple resources or kinds", e.PartialKind) +} + +func IsAmbiguousError(err error) bool { + if err == nil { + return false + } + switch err.(type) { + case *AmbiguousResourceError, *AmbiguousKindError: + return true + default: + return false + } +} + +// NoResourceMatchError is returned if the RESTMapper can't find any match for a resource +type NoResourceMatchError struct { + PartialResource unversioned.GroupVersionResource +} + +func (e *NoResourceMatchError) Error() string { + return fmt.Sprintf("no matches for %v", e.PartialResource) +} + +// NoKindMatchError is returned if the RESTMapper can't find any match for a kind +type NoKindMatchError struct { + PartialKind unversioned.GroupVersionKind +} + +func (e *NoKindMatchError) Error() string { + return fmt.Sprintf("no matches for %v", e.PartialKind) +} + +func IsNoMatchError(err error) bool { + if err == nil { + return false + } + switch err.(type) { + case *NoResourceMatchError, *NoKindMatchError: + return true + default: + return false + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/help.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/help.go new file mode 100644 index 00000000..8fa91cf1 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/help.go @@ -0,0 +1,134 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package meta + +import ( + "fmt" + "reflect" + + "k8s.io/client-go/1.4/pkg/conversion" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// IsListType returns true if the provided Object has a slice called Items +func IsListType(obj runtime.Object) bool { + _, err := GetItemsPtr(obj) + return err == nil +} + +// GetItemsPtr returns a pointer to the list object's Items member. +// If 'list' doesn't have an Items member, it's not really a list type +// and an error will be returned. +// This function will either return a pointer to a slice, or an error, but not both. +func GetItemsPtr(list runtime.Object) (interface{}, error) { + v, err := conversion.EnforcePtr(list) + if err != nil { + return nil, err + } + items := v.FieldByName("Items") + if !items.IsValid() { + return nil, fmt.Errorf("no Items field in %#v", list) + } + switch items.Kind() { + case reflect.Interface, reflect.Ptr: + target := reflect.TypeOf(items.Interface()).Elem() + if target.Kind() != reflect.Slice { + return nil, fmt.Errorf("items: Expected slice, got %s", target.Kind()) + } + return items.Interface(), nil + case reflect.Slice: + return items.Addr().Interface(), nil + default: + return nil, fmt.Errorf("items: Expected slice, got %s", items.Kind()) + } +} + +// ExtractList returns obj's Items element as an array of runtime.Objects. +// Returns an error if obj is not a List type (does not have an Items member). +func ExtractList(obj runtime.Object) ([]runtime.Object, error) { + itemsPtr, err := GetItemsPtr(obj) + if err != nil { + return nil, err + } + items, err := conversion.EnforcePtr(itemsPtr) + if err != nil { + return nil, err + } + list := make([]runtime.Object, items.Len()) + for i := range list { + raw := items.Index(i) + switch item := raw.Interface().(type) { + case runtime.RawExtension: + switch { + case item.Object != nil: + list[i] = item.Object + case item.Raw != nil: + // TODO: Set ContentEncoding and ContentType correctly. + list[i] = &runtime.Unknown{Raw: item.Raw} + default: + list[i] = nil + } + case runtime.Object: + list[i] = item + default: + var found bool + if list[i], found = raw.Addr().Interface().(runtime.Object); !found { + return nil, fmt.Errorf("%v: item[%v]: Expected object, got %#v(%s)", obj, i, raw.Interface(), raw.Kind()) + } + } + } + return list, nil +} + +// objectSliceType is the type of a slice of Objects +var objectSliceType = reflect.TypeOf([]runtime.Object{}) + +// SetList sets the given list object's Items member have the elements given in +// objects. +// Returns an error if list is not a List type (does not have an Items member), +// or if any of the objects are not of the right type. +func SetList(list runtime.Object, objects []runtime.Object) error { + itemsPtr, err := GetItemsPtr(list) + if err != nil { + return err + } + items, err := conversion.EnforcePtr(itemsPtr) + if err != nil { + return err + } + if items.Type() == objectSliceType { + items.Set(reflect.ValueOf(objects)) + return nil + } + slice := reflect.MakeSlice(items.Type(), len(objects), len(objects)) + for i := range objects { + dest := slice.Index(i) + src, err := conversion.EnforcePtr(objects[i]) + if err != nil { + return err + } + if src.Type().AssignableTo(dest.Type()) { + dest.Set(src) + } else if src.Type().ConvertibleTo(dest.Type()) { + dest.Set(src.Convert(dest.Type())) + } else { + return fmt.Errorf("item[%d]: can't assign or convert %v into %v", i, src.Type(), dest.Type()) + } + } + items.Set(slice) + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/interfaces.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/interfaces.go new file mode 100644 index 00000000..652c379a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/interfaces.go @@ -0,0 +1,185 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package meta + +import ( + "k8s.io/client-go/1.4/pkg/api/meta/metatypes" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/types" +) + +// VersionInterfaces contains the interfaces one should use for dealing with types of a particular version. +type VersionInterfaces struct { + runtime.ObjectConvertor + MetadataAccessor +} + +type ObjectMetaAccessor interface { + GetObjectMeta() Object +} + +// Object lets you work with object metadata from any of the versioned or +// internal API objects. Attempting to set or retrieve a field on an object that does +// not support that field (Name, UID, Namespace on lists) will be a no-op and return +// a default value. +type Object interface { + GetNamespace() string + SetNamespace(namespace string) + GetName() string + SetName(name string) + GetGenerateName() string + SetGenerateName(name string) + GetUID() types.UID + SetUID(uid types.UID) + GetResourceVersion() string + SetResourceVersion(version string) + GetSelfLink() string + SetSelfLink(selfLink string) + GetCreationTimestamp() unversioned.Time + SetCreationTimestamp(timestamp unversioned.Time) + GetDeletionTimestamp() *unversioned.Time + SetDeletionTimestamp(timestamp *unversioned.Time) + GetLabels() map[string]string + SetLabels(labels map[string]string) + GetAnnotations() map[string]string + SetAnnotations(annotations map[string]string) + GetFinalizers() []string + SetFinalizers(finalizers []string) + GetOwnerReferences() []metatypes.OwnerReference + SetOwnerReferences([]metatypes.OwnerReference) + GetClusterName() string + SetClusterName(clusterName string) +} + +var _ Object = &runtime.Unstructured{} + +type ListMetaAccessor interface { + GetListMeta() List +} + +// List lets you work with list metadata from any of the versioned or +// internal API objects. Attempting to set or retrieve a field on an object that does +// not support that field will be a no-op and return a default value. +type List unversioned.List + +// Type exposes the type and APIVersion of versioned or internal API objects. +type Type unversioned.Type + +// MetadataAccessor lets you work with object and list metadata from any of the versioned or +// internal API objects. Attempting to set or retrieve a field on an object that does +// not support that field (Name, UID, Namespace on lists) will be a no-op and return +// a default value. +// +// MetadataAccessor exposes Interface in a way that can be used with multiple objects. +type MetadataAccessor interface { + APIVersion(obj runtime.Object) (string, error) + SetAPIVersion(obj runtime.Object, version string) error + + Kind(obj runtime.Object) (string, error) + SetKind(obj runtime.Object, kind string) error + + Namespace(obj runtime.Object) (string, error) + SetNamespace(obj runtime.Object, namespace string) error + + Name(obj runtime.Object) (string, error) + SetName(obj runtime.Object, name string) error + + GenerateName(obj runtime.Object) (string, error) + SetGenerateName(obj runtime.Object, name string) error + + UID(obj runtime.Object) (types.UID, error) + SetUID(obj runtime.Object, uid types.UID) error + + SelfLink(obj runtime.Object) (string, error) + SetSelfLink(obj runtime.Object, selfLink string) error + + Labels(obj runtime.Object) (map[string]string, error) + SetLabels(obj runtime.Object, labels map[string]string) error + + Annotations(obj runtime.Object) (map[string]string, error) + SetAnnotations(obj runtime.Object, annotations map[string]string) error + + runtime.ResourceVersioner +} + +type RESTScopeName string + +const ( + RESTScopeNameNamespace RESTScopeName = "namespace" + RESTScopeNameRoot RESTScopeName = "root" +) + +// RESTScope contains the information needed to deal with REST resources that are in a resource hierarchy +type RESTScope interface { + // Name of the scope + Name() RESTScopeName + // ParamName is the optional name of the parameter that should be inserted in the resource url + // If empty, no param will be inserted + ParamName() string + // ArgumentName is the optional name that should be used for the variable holding the value. + ArgumentName() string + // ParamDescription is the optional description to use to document the parameter in api documentation + ParamDescription() string +} + +// RESTMapping contains the information needed to deal with objects of a specific +// resource and kind in a RESTful manner. +type RESTMapping struct { + // Resource is a string representing the name of this resource as a REST client would see it + Resource string + + GroupVersionKind unversioned.GroupVersionKind + + // Scope contains the information needed to deal with REST Resources that are in a resource hierarchy + Scope RESTScope + + runtime.ObjectConvertor + MetadataAccessor +} + +// RESTMapper allows clients to map resources to kind, and map kind and version +// to interfaces for manipulating those objects. It is primarily intended for +// consumers of Kubernetes compatible REST APIs as defined in docs/devel/api-conventions.md. +// +// The Kubernetes API provides versioned resources and object kinds which are scoped +// to API groups. In other words, kinds and resources should not be assumed to be +// unique across groups. +// +// TODO(caesarxuchao): Add proper multi-group support so that kinds & resources are +// scoped to groups. See http://issues.k8s.io/12413 and http://issues.k8s.io/10009. +type RESTMapper interface { + // KindFor takes a partial resource and returns the single match. Returns an error if there are multiple matches + KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) + + // KindsFor takes a partial resource and returns the list of potential kinds in priority order + KindsFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) + + // ResourceFor takes a partial resource and returns the single match. Returns an error if there are multiple matches + ResourceFor(input unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) + + // ResourcesFor takes a partial resource and returns the list of potential resource in priority order + ResourcesFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) + + // RESTMapping identifies a preferred resource mapping for the provided group kind. + RESTMapping(gk unversioned.GroupKind, versions ...string) (*RESTMapping, error) + // RESTMappings returns all resource mappings for the provided group kind. + RESTMappings(gk unversioned.GroupKind) ([]*RESTMapping, error) + + AliasesForResource(resource string) ([]string, bool) + ResourceSingularizer(resource string) (singular string, err error) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/meta.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/meta.go new file mode 100644 index 00000000..aa69818f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/meta.go @@ -0,0 +1,567 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package meta + +import ( + "fmt" + "reflect" + + "k8s.io/client-go/1.4/pkg/api/meta/metatypes" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/types" + + "github.com/golang/glog" +) + +// errNotList is returned when an object implements the Object style interfaces but not the List style +// interfaces. +var errNotList = fmt.Errorf("object does not implement the List interfaces") + +// ListAccessor returns a List interface for the provided object or an error if the object does +// not provide List. +// IMPORTANT: Objects are a superset of lists, so all Objects return List metadata. Do not use this +// check to determine whether an object *is* a List. +// TODO: return bool instead of error +func ListAccessor(obj interface{}) (List, error) { + switch t := obj.(type) { + case List: + return t, nil + case unversioned.List: + return t, nil + case ListMetaAccessor: + if m := t.GetListMeta(); m != nil { + return m, nil + } + return nil, errNotList + case unversioned.ListMetaAccessor: + if m := t.GetListMeta(); m != nil { + return m, nil + } + return nil, errNotList + case Object: + return t, nil + case ObjectMetaAccessor: + if m := t.GetObjectMeta(); m != nil { + return m, nil + } + return nil, errNotList + default: + return nil, errNotList + } +} + +// errNotObject is returned when an object implements the List style interfaces but not the Object style +// interfaces. +var errNotObject = fmt.Errorf("object does not implement the Object interfaces") + +// Accessor takes an arbitrary object pointer and returns meta.Interface. +// obj must be a pointer to an API type. An error is returned if the minimum +// required fields are missing. Fields that are not required return the default +// value and are a no-op if set. +// TODO: return bool instead of error +func Accessor(obj interface{}) (Object, error) { + switch t := obj.(type) { + case Object: + return t, nil + case ObjectMetaAccessor: + if m := t.GetObjectMeta(); m != nil { + return m, nil + } + return nil, errNotObject + case List, unversioned.List, ListMetaAccessor, unversioned.ListMetaAccessor: + return nil, errNotObject + default: + return nil, errNotObject + } +} + +// TypeAccessor returns an interface that allows retrieving and modifying the APIVersion +// and Kind of an in-memory internal object. +// TODO: this interface is used to test code that does not have ObjectMeta or ListMeta +// in round tripping (objects which can use apiVersion/kind, but do not fit the Kube +// api conventions). +func TypeAccessor(obj interface{}) (Type, error) { + if typed, ok := obj.(runtime.Object); ok { + return objectAccessor{typed}, nil + } + v, err := conversion.EnforcePtr(obj) + if err != nil { + return nil, err + } + t := v.Type() + if v.Kind() != reflect.Struct { + return nil, fmt.Errorf("expected struct, but got %v: %v (%#v)", v.Kind(), t, v.Interface()) + } + + typeMeta := v.FieldByName("TypeMeta") + if !typeMeta.IsValid() { + return nil, fmt.Errorf("struct %v lacks embedded TypeMeta type", t) + } + a := &genericAccessor{} + if err := extractFromTypeMeta(typeMeta, a); err != nil { + return nil, fmt.Errorf("unable to find type fields on %#v: %v", typeMeta, err) + } + return a, nil +} + +type objectAccessor struct { + runtime.Object +} + +func (obj objectAccessor) GetKind() string { + return obj.GetObjectKind().GroupVersionKind().Kind +} + +func (obj objectAccessor) SetKind(kind string) { + gvk := obj.GetObjectKind().GroupVersionKind() + gvk.Kind = kind + obj.GetObjectKind().SetGroupVersionKind(gvk) +} + +func (obj objectAccessor) GetAPIVersion() string { + return obj.GetObjectKind().GroupVersionKind().GroupVersion().String() +} + +func (obj objectAccessor) SetAPIVersion(version string) { + gvk := obj.GetObjectKind().GroupVersionKind() + gv, err := unversioned.ParseGroupVersion(version) + if err != nil { + gv = unversioned.GroupVersion{Version: version} + } + gvk.Group, gvk.Version = gv.Group, gv.Version + obj.GetObjectKind().SetGroupVersionKind(gvk) +} + +// NewAccessor returns a MetadataAccessor that can retrieve +// or manipulate resource version on objects derived from core API +// metadata concepts. +func NewAccessor() MetadataAccessor { + return resourceAccessor{} +} + +// resourceAccessor implements ResourceVersioner and SelfLinker. +type resourceAccessor struct{} + +func (resourceAccessor) Kind(obj runtime.Object) (string, error) { + return objectAccessor{obj}.GetKind(), nil +} + +func (resourceAccessor) SetKind(obj runtime.Object, kind string) error { + objectAccessor{obj}.SetKind(kind) + return nil +} + +func (resourceAccessor) APIVersion(obj runtime.Object) (string, error) { + return objectAccessor{obj}.GetAPIVersion(), nil +} + +func (resourceAccessor) SetAPIVersion(obj runtime.Object, version string) error { + objectAccessor{obj}.SetAPIVersion(version) + return nil +} + +func (resourceAccessor) Namespace(obj runtime.Object) (string, error) { + accessor, err := Accessor(obj) + if err != nil { + return "", err + } + return accessor.GetNamespace(), nil +} + +func (resourceAccessor) SetNamespace(obj runtime.Object, namespace string) error { + accessor, err := Accessor(obj) + if err != nil { + return err + } + accessor.SetNamespace(namespace) + return nil +} + +func (resourceAccessor) Name(obj runtime.Object) (string, error) { + accessor, err := Accessor(obj) + if err != nil { + return "", err + } + return accessor.GetName(), nil +} + +func (resourceAccessor) SetName(obj runtime.Object, name string) error { + accessor, err := Accessor(obj) + if err != nil { + return err + } + accessor.SetName(name) + return nil +} + +func (resourceAccessor) GenerateName(obj runtime.Object) (string, error) { + accessor, err := Accessor(obj) + if err != nil { + return "", err + } + return accessor.GetGenerateName(), nil +} + +func (resourceAccessor) SetGenerateName(obj runtime.Object, name string) error { + accessor, err := Accessor(obj) + if err != nil { + return err + } + accessor.SetGenerateName(name) + return nil +} + +func (resourceAccessor) UID(obj runtime.Object) (types.UID, error) { + accessor, err := Accessor(obj) + if err != nil { + return "", err + } + return accessor.GetUID(), nil +} + +func (resourceAccessor) SetUID(obj runtime.Object, uid types.UID) error { + accessor, err := Accessor(obj) + if err != nil { + return err + } + accessor.SetUID(uid) + return nil +} + +func (resourceAccessor) SelfLink(obj runtime.Object) (string, error) { + accessor, err := ListAccessor(obj) + if err != nil { + return "", err + } + return accessor.GetSelfLink(), nil +} + +func (resourceAccessor) SetSelfLink(obj runtime.Object, selfLink string) error { + accessor, err := ListAccessor(obj) + if err != nil { + return err + } + accessor.SetSelfLink(selfLink) + return nil +} + +func (resourceAccessor) Labels(obj runtime.Object) (map[string]string, error) { + accessor, err := Accessor(obj) + if err != nil { + return nil, err + } + return accessor.GetLabels(), nil +} + +func (resourceAccessor) SetLabels(obj runtime.Object, labels map[string]string) error { + accessor, err := Accessor(obj) + if err != nil { + return err + } + accessor.SetLabels(labels) + return nil +} + +func (resourceAccessor) Annotations(obj runtime.Object) (map[string]string, error) { + accessor, err := Accessor(obj) + if err != nil { + return nil, err + } + return accessor.GetAnnotations(), nil +} + +func (resourceAccessor) SetAnnotations(obj runtime.Object, annotations map[string]string) error { + accessor, err := Accessor(obj) + if err != nil { + return err + } + accessor.SetAnnotations(annotations) + return nil +} + +func (resourceAccessor) ResourceVersion(obj runtime.Object) (string, error) { + accessor, err := ListAccessor(obj) + if err != nil { + return "", err + } + return accessor.GetResourceVersion(), nil +} + +func (resourceAccessor) SetResourceVersion(obj runtime.Object, version string) error { + accessor, err := ListAccessor(obj) + if err != nil { + return err + } + accessor.SetResourceVersion(version) + return nil +} + +// extractFromOwnerReference extracts v to o. v is the OwnerReferences field of an object. +func extractFromOwnerReference(v reflect.Value, o *metatypes.OwnerReference) error { + if err := runtime.Field(v, "APIVersion", &o.APIVersion); err != nil { + return err + } + if err := runtime.Field(v, "Kind", &o.Kind); err != nil { + return err + } + if err := runtime.Field(v, "Name", &o.Name); err != nil { + return err + } + if err := runtime.Field(v, "UID", &o.UID); err != nil { + return err + } + var controllerPtr *bool + if err := runtime.Field(v, "Controller", &controllerPtr); err != nil { + return err + } + if controllerPtr != nil { + controller := *controllerPtr + o.Controller = &controller + } + return nil +} + +// setOwnerReference sets v to o. v is the OwnerReferences field of an object. +func setOwnerReference(v reflect.Value, o *metatypes.OwnerReference) error { + if err := runtime.SetField(o.APIVersion, v, "APIVersion"); err != nil { + return err + } + if err := runtime.SetField(o.Kind, v, "Kind"); err != nil { + return err + } + if err := runtime.SetField(o.Name, v, "Name"); err != nil { + return err + } + if err := runtime.SetField(o.UID, v, "UID"); err != nil { + return err + } + if o.Controller != nil { + controller := *(o.Controller) + if err := runtime.SetField(&controller, v, "Controller"); err != nil { + return err + } + } + return nil +} + +// genericAccessor contains pointers to strings that can modify an arbitrary +// struct and implements the Accessor interface. +type genericAccessor struct { + namespace *string + name *string + generateName *string + uid *types.UID + apiVersion *string + kind *string + resourceVersion *string + selfLink *string + creationTimestamp *unversioned.Time + deletionTimestamp **unversioned.Time + labels *map[string]string + annotations *map[string]string + ownerReferences reflect.Value + finalizers *[]string +} + +func (a genericAccessor) GetNamespace() string { + if a.namespace == nil { + return "" + } + return *a.namespace +} + +func (a genericAccessor) SetNamespace(namespace string) { + if a.namespace == nil { + return + } + *a.namespace = namespace +} + +func (a genericAccessor) GetName() string { + if a.name == nil { + return "" + } + return *a.name +} + +func (a genericAccessor) SetName(name string) { + if a.name == nil { + return + } + *a.name = name +} + +func (a genericAccessor) GetGenerateName() string { + if a.generateName == nil { + return "" + } + return *a.generateName +} + +func (a genericAccessor) SetGenerateName(generateName string) { + if a.generateName == nil { + return + } + *a.generateName = generateName +} + +func (a genericAccessor) GetUID() types.UID { + if a.uid == nil { + return "" + } + return *a.uid +} + +func (a genericAccessor) SetUID(uid types.UID) { + if a.uid == nil { + return + } + *a.uid = uid +} + +func (a genericAccessor) GetAPIVersion() string { + return *a.apiVersion +} + +func (a genericAccessor) SetAPIVersion(version string) { + *a.apiVersion = version +} + +func (a genericAccessor) GetKind() string { + return *a.kind +} + +func (a genericAccessor) SetKind(kind string) { + *a.kind = kind +} + +func (a genericAccessor) GetResourceVersion() string { + return *a.resourceVersion +} + +func (a genericAccessor) SetResourceVersion(version string) { + *a.resourceVersion = version +} + +func (a genericAccessor) GetSelfLink() string { + return *a.selfLink +} + +func (a genericAccessor) SetSelfLink(selfLink string) { + *a.selfLink = selfLink +} + +func (a genericAccessor) GetCreationTimestamp() unversioned.Time { + return *a.creationTimestamp +} + +func (a genericAccessor) SetCreationTimestamp(timestamp unversioned.Time) { + *a.creationTimestamp = timestamp +} + +func (a genericAccessor) GetDeletionTimestamp() *unversioned.Time { + return *a.deletionTimestamp +} + +func (a genericAccessor) SetDeletionTimestamp(timestamp *unversioned.Time) { + *a.deletionTimestamp = timestamp +} + +func (a genericAccessor) GetLabels() map[string]string { + if a.labels == nil { + return nil + } + return *a.labels +} + +func (a genericAccessor) SetLabels(labels map[string]string) { + *a.labels = labels +} + +func (a genericAccessor) GetAnnotations() map[string]string { + if a.annotations == nil { + return nil + } + return *a.annotations +} + +func (a genericAccessor) SetAnnotations(annotations map[string]string) { + if a.annotations == nil { + emptyAnnotations := make(map[string]string) + a.annotations = &emptyAnnotations + } + *a.annotations = annotations +} + +func (a genericAccessor) GetFinalizers() []string { + if a.finalizers == nil { + return nil + } + return *a.finalizers +} + +func (a genericAccessor) SetFinalizers(finalizers []string) { + *a.finalizers = finalizers +} + +func (a genericAccessor) GetOwnerReferences() []metatypes.OwnerReference { + var ret []metatypes.OwnerReference + s := a.ownerReferences + if s.Kind() != reflect.Ptr || s.Elem().Kind() != reflect.Slice { + glog.Errorf("expect %v to be a pointer to slice", s) + return ret + } + s = s.Elem() + // Set the capacity to one element greater to avoid copy if the caller later append an element. + ret = make([]metatypes.OwnerReference, s.Len(), s.Len()+1) + for i := 0; i < s.Len(); i++ { + if err := extractFromOwnerReference(s.Index(i), &ret[i]); err != nil { + glog.Errorf("extractFromOwnerReference failed: %v", err) + return ret + } + } + return ret +} + +func (a genericAccessor) SetOwnerReferences(references []metatypes.OwnerReference) { + s := a.ownerReferences + if s.Kind() != reflect.Ptr || s.Elem().Kind() != reflect.Slice { + glog.Errorf("expect %v to be a pointer to slice", s) + } + s = s.Elem() + newReferences := reflect.MakeSlice(s.Type(), len(references), len(references)) + for i := 0; i < len(references); i++ { + if err := setOwnerReference(newReferences.Index(i), &references[i]); err != nil { + glog.Errorf("setOwnerReference failed: %v", err) + return + } + } + s.Set(newReferences) +} + +// extractFromTypeMeta extracts pointers to version and kind fields from an object +func extractFromTypeMeta(v reflect.Value, a *genericAccessor) error { + if err := runtime.FieldPtr(v, "APIVersion", &a.apiVersion); err != nil { + return err + } + if err := runtime.FieldPtr(v, "Kind", &a.kind); err != nil { + return err + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/intstr/deep_copy_generated.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/metatypes/types.go similarity index 55% rename from vendor/k8s.io/kubernetes/pkg/util/intstr/deep_copy_generated.go rename to vendor/k8s.io/client-go/1.4/pkg/api/meta/metatypes/types.go index 29aef022..a7341cac 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/intstr/deep_copy_generated.go +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/metatypes/types.go @@ -1,7 +1,5 @@ -// +build !ignore_autogenerated - /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,17 +14,17 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This file was autogenerated by deepcopy-gen. Do not edit it manually! +// The types defined in this package are used by the meta package to represent +// the in-memory version of objects. We cannot reuse the __internal version of +// API objects because it causes import cycle. +package metatypes -package intstr +import "k8s.io/client-go/1.4/pkg/types" -import ( - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func DeepCopy_intstr_IntOrString(in IntOrString, out *IntOrString, c *conversion.Cloner) error { - out.Type = in.Type - out.IntVal = in.IntVal - out.StrVal = in.StrVal - return nil +type OwnerReference struct { + APIVersion string + Kind string + UID types.UID + Name string + Controller *bool } diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/multirestmapper.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/multirestmapper.go new file mode 100644 index 00000000..aa94e53a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/multirestmapper.go @@ -0,0 +1,231 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package meta + +import ( + "fmt" + "strings" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + utilerrors "k8s.io/client-go/1.4/pkg/util/errors" + "k8s.io/client-go/1.4/pkg/util/sets" +) + +// MultiRESTMapper is a wrapper for multiple RESTMappers. +type MultiRESTMapper []RESTMapper + +func (m MultiRESTMapper) String() string { + nested := []string{} + for _, t := range m { + currString := fmt.Sprintf("%v", t) + splitStrings := strings.Split(currString, "\n") + nested = append(nested, strings.Join(splitStrings, "\n\t")) + } + + return fmt.Sprintf("MultiRESTMapper{\n\t%s\n}", strings.Join(nested, "\n\t")) +} + +// ResourceSingularizer converts a REST resource name from plural to singular (e.g., from pods to pod) +// This implementation supports multiple REST schemas and return the first match. +func (m MultiRESTMapper) ResourceSingularizer(resource string) (singular string, err error) { + for _, t := range m { + singular, err = t.ResourceSingularizer(resource) + if err == nil { + return + } + } + return +} + +func (m MultiRESTMapper) ResourcesFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) { + allGVRs := []unversioned.GroupVersionResource{} + for _, t := range m { + gvrs, err := t.ResourcesFor(resource) + // ignore "no match" errors, but any other error percolates back up + if IsNoMatchError(err) { + continue + } + if err != nil { + return nil, err + } + + // walk the existing values to de-dup + for _, curr := range gvrs { + found := false + for _, existing := range allGVRs { + if curr == existing { + found = true + break + } + } + + if !found { + allGVRs = append(allGVRs, curr) + } + } + } + + if len(allGVRs) == 0 { + return nil, &NoResourceMatchError{PartialResource: resource} + } + + return allGVRs, nil +} + +func (m MultiRESTMapper) KindsFor(resource unversioned.GroupVersionResource) (gvk []unversioned.GroupVersionKind, err error) { + allGVKs := []unversioned.GroupVersionKind{} + for _, t := range m { + gvks, err := t.KindsFor(resource) + // ignore "no match" errors, but any other error percolates back up + if IsNoMatchError(err) { + continue + } + if err != nil { + return nil, err + } + + // walk the existing values to de-dup + for _, curr := range gvks { + found := false + for _, existing := range allGVKs { + if curr == existing { + found = true + break + } + } + + if !found { + allGVKs = append(allGVKs, curr) + } + } + } + + if len(allGVKs) == 0 { + return nil, &NoResourceMatchError{PartialResource: resource} + } + + return allGVKs, nil +} + +func (m MultiRESTMapper) ResourceFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) { + resources, err := m.ResourcesFor(resource) + if err != nil { + return unversioned.GroupVersionResource{}, err + } + if len(resources) == 1 { + return resources[0], nil + } + + return unversioned.GroupVersionResource{}, &AmbiguousResourceError{PartialResource: resource, MatchingResources: resources} +} + +func (m MultiRESTMapper) KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) { + kinds, err := m.KindsFor(resource) + if err != nil { + return unversioned.GroupVersionKind{}, err + } + if len(kinds) == 1 { + return kinds[0], nil + } + + return unversioned.GroupVersionKind{}, &AmbiguousResourceError{PartialResource: resource, MatchingKinds: kinds} +} + +// RESTMapping provides the REST mapping for the resource based on the +// kind and version. This implementation supports multiple REST schemas and +// return the first match. +func (m MultiRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...string) (*RESTMapping, error) { + allMappings := []*RESTMapping{} + errors := []error{} + + for _, t := range m { + currMapping, err := t.RESTMapping(gk, versions...) + // ignore "no match" errors, but any other error percolates back up + if IsNoMatchError(err) { + continue + } + if err != nil { + errors = append(errors, err) + continue + } + + allMappings = append(allMappings, currMapping) + } + + // if we got exactly one mapping, then use it even if other requested failed + if len(allMappings) == 1 { + return allMappings[0], nil + } + if len(allMappings) > 1 { + var kinds []unversioned.GroupVersionKind + for _, m := range allMappings { + kinds = append(kinds, m.GroupVersionKind) + } + return nil, &AmbiguousKindError{PartialKind: gk.WithVersion(""), MatchingKinds: kinds} + } + if len(errors) > 0 { + return nil, utilerrors.NewAggregate(errors) + } + return nil, &NoKindMatchError{PartialKind: gk.WithVersion("")} +} + +// RESTMappings returns all possible RESTMappings for the provided group kind, or an error +// if the type is not recognized. +func (m MultiRESTMapper) RESTMappings(gk unversioned.GroupKind) ([]*RESTMapping, error) { + var allMappings []*RESTMapping + var errors []error + + for _, t := range m { + currMappings, err := t.RESTMappings(gk) + // ignore "no match" errors, but any other error percolates back up + if IsNoMatchError(err) { + continue + } + if err != nil { + errors = append(errors, err) + continue + } + allMappings = append(allMappings, currMappings...) + } + if len(errors) > 0 { + return nil, utilerrors.NewAggregate(errors) + } + if len(allMappings) == 0 { + return nil, &NoKindMatchError{PartialKind: gk.WithVersion("")} + } + return allMappings, nil +} + +// AliasesForResource finds the first alias response for the provided mappers. +func (m MultiRESTMapper) AliasesForResource(alias string) ([]string, bool) { + seenAliases := sets.NewString() + allAliases := []string{} + handled := false + + for _, t := range m { + if currAliases, currOk := t.AliasesForResource(alias); currOk { + for _, currAlias := range currAliases { + if !seenAliases.Has(currAlias) { + allAliases = append(allAliases, currAlias) + seenAliases.Insert(currAlias) + } + } + handled = true + } + } + return allAliases, handled +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/priority.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/priority.go new file mode 100644 index 00000000..0e8168b6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/priority.go @@ -0,0 +1,226 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package meta + +import ( + "fmt" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +const ( + AnyGroup = "*" + AnyVersion = "*" + AnyResource = "*" + AnyKind = "*" +) + +// PriorityRESTMapper is a wrapper for automatically choosing a particular Resource or Kind +// when multiple matches are possible +type PriorityRESTMapper struct { + // Delegate is the RESTMapper to use to locate all the Kind and Resource matches + Delegate RESTMapper + + // ResourcePriority is a list of priority patterns to apply to matching resources. + // The list of all matching resources is narrowed based on the patterns until only one remains. + // A pattern with no matches is skipped. A pattern with more than one match uses its + // matches as the list to continue matching against. + ResourcePriority []unversioned.GroupVersionResource + + // KindPriority is a list of priority patterns to apply to matching kinds. + // The list of all matching kinds is narrowed based on the patterns until only one remains. + // A pattern with no matches is skipped. A pattern with more than one match uses its + // matches as the list to continue matching against. + KindPriority []unversioned.GroupVersionKind +} + +func (m PriorityRESTMapper) String() string { + return fmt.Sprintf("PriorityRESTMapper{\n\t%v\n\t%v\n\t%v\n}", m.ResourcePriority, m.KindPriority, m.Delegate) +} + +// ResourceFor finds all resources, then passes them through the ResourcePriority patterns to find a single matching hit. +func (m PriorityRESTMapper) ResourceFor(partiallySpecifiedResource unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) { + originalGVRs, err := m.Delegate.ResourcesFor(partiallySpecifiedResource) + if err != nil { + return unversioned.GroupVersionResource{}, err + } + if len(originalGVRs) == 1 { + return originalGVRs[0], nil + } + + remainingGVRs := append([]unversioned.GroupVersionResource{}, originalGVRs...) + for _, pattern := range m.ResourcePriority { + matchedGVRs := []unversioned.GroupVersionResource{} + for _, gvr := range remainingGVRs { + if resourceMatches(pattern, gvr) { + matchedGVRs = append(matchedGVRs, gvr) + } + } + + switch len(matchedGVRs) { + case 0: + // if you have no matches, then nothing matched this pattern just move to the next + continue + case 1: + // one match, return + return matchedGVRs[0], nil + default: + // more than one match, use the matched hits as the list moving to the next pattern. + // this way you can have a series of selection criteria + remainingGVRs = matchedGVRs + } + } + + return unversioned.GroupVersionResource{}, &AmbiguousResourceError{PartialResource: partiallySpecifiedResource, MatchingResources: originalGVRs} +} + +// KindFor finds all kinds, then passes them through the KindPriority patterns to find a single matching hit. +func (m PriorityRESTMapper) KindFor(partiallySpecifiedResource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) { + originalGVKs, err := m.Delegate.KindsFor(partiallySpecifiedResource) + if err != nil { + return unversioned.GroupVersionKind{}, err + } + if len(originalGVKs) == 1 { + return originalGVKs[0], nil + } + + remainingGVKs := append([]unversioned.GroupVersionKind{}, originalGVKs...) + for _, pattern := range m.KindPriority { + matchedGVKs := []unversioned.GroupVersionKind{} + for _, gvr := range remainingGVKs { + if kindMatches(pattern, gvr) { + matchedGVKs = append(matchedGVKs, gvr) + } + } + + switch len(matchedGVKs) { + case 0: + // if you have no matches, then nothing matched this pattern just move to the next + continue + case 1: + // one match, return + return matchedGVKs[0], nil + default: + // more than one match, use the matched hits as the list moving to the next pattern. + // this way you can have a series of selection criteria + remainingGVKs = matchedGVKs + } + } + + return unversioned.GroupVersionKind{}, &AmbiguousResourceError{PartialResource: partiallySpecifiedResource, MatchingKinds: originalGVKs} +} + +func resourceMatches(pattern unversioned.GroupVersionResource, resource unversioned.GroupVersionResource) bool { + if pattern.Group != AnyGroup && pattern.Group != resource.Group { + return false + } + if pattern.Version != AnyVersion && pattern.Version != resource.Version { + return false + } + if pattern.Resource != AnyResource && pattern.Resource != resource.Resource { + return false + } + + return true +} + +func kindMatches(pattern unversioned.GroupVersionKind, kind unversioned.GroupVersionKind) bool { + if pattern.Group != AnyGroup && pattern.Group != kind.Group { + return false + } + if pattern.Version != AnyVersion && pattern.Version != kind.Version { + return false + } + if pattern.Kind != AnyKind && pattern.Kind != kind.Kind { + return false + } + + return true +} + +func (m PriorityRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...string) (mapping *RESTMapping, err error) { + mappings, err := m.Delegate.RESTMappings(gk) + if err != nil { + return nil, err + } + + // any versions the user provides take priority + priorities := m.KindPriority + if len(versions) > 0 { + priorities = make([]unversioned.GroupVersionKind, 0, len(m.KindPriority)+len(versions)) + for _, version := range versions { + gv, err := unversioned.ParseGroupVersion(version) + if err != nil { + return nil, err + } + priorities = append(priorities, gv.WithKind(AnyKind)) + } + priorities = append(priorities, m.KindPriority...) + } + + remaining := append([]*RESTMapping{}, mappings...) + for _, pattern := range priorities { + var matching []*RESTMapping + for _, m := range remaining { + if kindMatches(pattern, m.GroupVersionKind) { + matching = append(matching, m) + } + } + + switch len(matching) { + case 0: + // if you have no matches, then nothing matched this pattern just move to the next + continue + case 1: + // one match, return + return matching[0], nil + default: + // more than one match, use the matched hits as the list moving to the next pattern. + // this way you can have a series of selection criteria + remaining = matching + } + } + if len(remaining) == 1 { + return remaining[0], nil + } + + var kinds []unversioned.GroupVersionKind + for _, m := range mappings { + kinds = append(kinds, m.GroupVersionKind) + } + return nil, &AmbiguousKindError{PartialKind: gk.WithVersion(""), MatchingKinds: kinds} +} + +func (m PriorityRESTMapper) RESTMappings(gk unversioned.GroupKind) ([]*RESTMapping, error) { + return m.Delegate.RESTMappings(gk) +} + +func (m PriorityRESTMapper) AliasesForResource(alias string) (aliases []string, ok bool) { + return m.Delegate.AliasesForResource(alias) +} + +func (m PriorityRESTMapper) ResourceSingularizer(resource string) (singular string, err error) { + return m.Delegate.ResourceSingularizer(resource) +} + +func (m PriorityRESTMapper) ResourcesFor(partiallySpecifiedResource unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) { + return m.Delegate.ResourcesFor(partiallySpecifiedResource) +} + +func (m PriorityRESTMapper) KindsFor(partiallySpecifiedResource unversioned.GroupVersionResource) (gvk []unversioned.GroupVersionKind, err error) { + return m.Delegate.KindsFor(partiallySpecifiedResource) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/restmapper.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/restmapper.go new file mode 100644 index 00000000..94279255 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/restmapper.go @@ -0,0 +1,564 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// TODO: move everything in this file to pkg/api/rest +package meta + +import ( + "fmt" + "sort" + "strings" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// Implements RESTScope interface +type restScope struct { + name RESTScopeName + paramName string + argumentName string + paramDescription string +} + +func (r *restScope) Name() RESTScopeName { + return r.name +} +func (r *restScope) ParamName() string { + return r.paramName +} +func (r *restScope) ArgumentName() string { + return r.argumentName +} +func (r *restScope) ParamDescription() string { + return r.paramDescription +} + +var RESTScopeNamespace = &restScope{ + name: RESTScopeNameNamespace, + paramName: "namespaces", + argumentName: "namespace", + paramDescription: "object name and auth scope, such as for teams and projects", +} + +var RESTScopeRoot = &restScope{ + name: RESTScopeNameRoot, +} + +// DefaultRESTMapper exposes mappings between the types defined in a +// runtime.Scheme. It assumes that all types defined the provided scheme +// can be mapped with the provided MetadataAccessor and Codec interfaces. +// +// The resource name of a Kind is defined as the lowercase, +// English-plural version of the Kind string. +// When converting from resource to Kind, the singular version of the +// resource name is also accepted for convenience. +// +// TODO: Only accept plural for some operations for increased control? +// (`get pod bar` vs `get pods bar`) +type DefaultRESTMapper struct { + defaultGroupVersions []unversioned.GroupVersion + + resourceToKind map[unversioned.GroupVersionResource]unversioned.GroupVersionKind + kindToPluralResource map[unversioned.GroupVersionKind]unversioned.GroupVersionResource + kindToScope map[unversioned.GroupVersionKind]RESTScope + singularToPlural map[unversioned.GroupVersionResource]unversioned.GroupVersionResource + pluralToSingular map[unversioned.GroupVersionResource]unversioned.GroupVersionResource + + interfacesFunc VersionInterfacesFunc + + // aliasToResource is used for mapping aliases to resources + aliasToResource map[string][]string +} + +func (m *DefaultRESTMapper) String() string { + return fmt.Sprintf("DefaultRESTMapper{kindToPluralResource=%v}", m.kindToPluralResource) +} + +var _ RESTMapper = &DefaultRESTMapper{} + +// VersionInterfacesFunc returns the appropriate typer, and metadata accessor for a +// given api version, or an error if no such api version exists. +type VersionInterfacesFunc func(version unversioned.GroupVersion) (*VersionInterfaces, error) + +// NewDefaultRESTMapper initializes a mapping between Kind and APIVersion +// to a resource name and back based on the objects in a runtime.Scheme +// and the Kubernetes API conventions. Takes a group name, a priority list of the versions +// to search when an object has no default version (set empty to return an error), +// and a function that retrieves the correct metadata for a given version. +func NewDefaultRESTMapper(defaultGroupVersions []unversioned.GroupVersion, f VersionInterfacesFunc) *DefaultRESTMapper { + resourceToKind := make(map[unversioned.GroupVersionResource]unversioned.GroupVersionKind) + kindToPluralResource := make(map[unversioned.GroupVersionKind]unversioned.GroupVersionResource) + kindToScope := make(map[unversioned.GroupVersionKind]RESTScope) + singularToPlural := make(map[unversioned.GroupVersionResource]unversioned.GroupVersionResource) + pluralToSingular := make(map[unversioned.GroupVersionResource]unversioned.GroupVersionResource) + aliasToResource := make(map[string][]string) + // TODO: verify name mappings work correctly when versions differ + + return &DefaultRESTMapper{ + resourceToKind: resourceToKind, + kindToPluralResource: kindToPluralResource, + kindToScope: kindToScope, + defaultGroupVersions: defaultGroupVersions, + singularToPlural: singularToPlural, + pluralToSingular: pluralToSingular, + aliasToResource: aliasToResource, + interfacesFunc: f, + } +} + +func (m *DefaultRESTMapper) Add(kind unversioned.GroupVersionKind, scope RESTScope) { + plural, singular := KindToResource(kind) + + m.singularToPlural[singular] = plural + m.pluralToSingular[plural] = singular + + m.resourceToKind[singular] = kind + m.resourceToKind[plural] = kind + + m.kindToPluralResource[kind] = plural + m.kindToScope[kind] = scope +} + +// unpluralizedSuffixes is a list of resource suffixes that are the same plural and singular +// This is only is only necessary because some bits of code are lazy and don't actually use the RESTMapper like they should. +// TODO eliminate this so that different callers can correctly map to resources. This probably means updating all +// callers to use the RESTMapper they mean. +var unpluralizedSuffixes = []string{ + "endpoints", +} + +// KindToResource converts Kind to a resource name. +// Broken. This method only "sort of" works when used outside of this package. It assumes that Kinds and Resources match +// and they aren't guaranteed to do so. +func KindToResource(kind unversioned.GroupVersionKind) ( /*plural*/ unversioned.GroupVersionResource /*singular*/, unversioned.GroupVersionResource) { + kindName := kind.Kind + if len(kindName) == 0 { + return unversioned.GroupVersionResource{}, unversioned.GroupVersionResource{} + } + singularName := strings.ToLower(kindName) + singular := kind.GroupVersion().WithResource(singularName) + + for _, skip := range unpluralizedSuffixes { + if strings.HasSuffix(singularName, skip) { + return singular, singular + } + } + + switch string(singularName[len(singularName)-1]) { + case "s": + return kind.GroupVersion().WithResource(singularName + "es"), singular + case "y": + return kind.GroupVersion().WithResource(strings.TrimSuffix(singularName, "y") + "ies"), singular + } + + return kind.GroupVersion().WithResource(singularName + "s"), singular +} + +// ResourceSingularizer implements RESTMapper +// It converts a resource name from plural to singular (e.g., from pods to pod) +func (m *DefaultRESTMapper) ResourceSingularizer(resourceType string) (string, error) { + partialResource := unversioned.GroupVersionResource{Resource: resourceType} + resources, err := m.ResourcesFor(partialResource) + if err != nil { + return resourceType, err + } + + singular := unversioned.GroupVersionResource{} + for _, curr := range resources { + currSingular, ok := m.pluralToSingular[curr] + if !ok { + continue + } + if singular.Empty() { + singular = currSingular + continue + } + + if currSingular.Resource != singular.Resource { + return resourceType, fmt.Errorf("multiple possible singular resources (%v) found for %v", resources, resourceType) + } + } + + if singular.Empty() { + return resourceType, fmt.Errorf("no singular of resource %v has been defined", resourceType) + } + + return singular.Resource, nil +} + +// coerceResourceForMatching makes the resource lower case and converts internal versions to unspecified (legacy behavior) +func coerceResourceForMatching(resource unversioned.GroupVersionResource) unversioned.GroupVersionResource { + resource.Resource = strings.ToLower(resource.Resource) + if resource.Version == runtime.APIVersionInternal { + resource.Version = "" + } + + return resource +} + +func (m *DefaultRESTMapper) ResourcesFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) { + resource := coerceResourceForMatching(input) + + hasResource := len(resource.Resource) > 0 + hasGroup := len(resource.Group) > 0 + hasVersion := len(resource.Version) > 0 + + if !hasResource { + return nil, fmt.Errorf("a resource must be present, got: %v", resource) + } + + ret := []unversioned.GroupVersionResource{} + switch { + // fully qualified. Find the exact match + case hasGroup && hasVersion: + for plural, singular := range m.pluralToSingular { + if singular == resource { + ret = append(ret, plural) + break + } + if plural == resource { + ret = append(ret, plural) + break + } + } + + case hasGroup: + requestedGroupResource := resource.GroupResource() + for plural, singular := range m.pluralToSingular { + if singular.GroupResource() == requestedGroupResource { + ret = append(ret, plural) + } + if plural.GroupResource() == requestedGroupResource { + ret = append(ret, plural) + } + } + + case hasVersion: + for plural, singular := range m.pluralToSingular { + if singular.Version == resource.Version && singular.Resource == resource.Resource { + ret = append(ret, plural) + } + if plural.Version == resource.Version && plural.Resource == resource.Resource { + ret = append(ret, plural) + } + } + + default: + for plural, singular := range m.pluralToSingular { + if singular.Resource == resource.Resource { + ret = append(ret, plural) + } + if plural.Resource == resource.Resource { + ret = append(ret, plural) + } + } + } + + if len(ret) == 0 { + return nil, &NoResourceMatchError{PartialResource: resource} + } + + sort.Sort(resourceByPreferredGroupVersion{ret, m.defaultGroupVersions}) + return ret, nil +} + +func (m *DefaultRESTMapper) ResourceFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) { + resources, err := m.ResourcesFor(resource) + if err != nil { + return unversioned.GroupVersionResource{}, err + } + if len(resources) == 1 { + return resources[0], nil + } + + return unversioned.GroupVersionResource{}, &AmbiguousResourceError{PartialResource: resource, MatchingResources: resources} +} + +func (m *DefaultRESTMapper) KindsFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) { + resource := coerceResourceForMatching(input) + + hasResource := len(resource.Resource) > 0 + hasGroup := len(resource.Group) > 0 + hasVersion := len(resource.Version) > 0 + + if !hasResource { + return nil, fmt.Errorf("a resource must be present, got: %v", resource) + } + + ret := []unversioned.GroupVersionKind{} + switch { + // fully qualified. Find the exact match + case hasGroup && hasVersion: + kind, exists := m.resourceToKind[resource] + if exists { + ret = append(ret, kind) + } + + case hasGroup: + requestedGroupResource := resource.GroupResource() + for currResource, currKind := range m.resourceToKind { + if currResource.GroupResource() == requestedGroupResource { + ret = append(ret, currKind) + } + } + + case hasVersion: + for currResource, currKind := range m.resourceToKind { + if currResource.Version == resource.Version && currResource.Resource == resource.Resource { + ret = append(ret, currKind) + } + } + + default: + for currResource, currKind := range m.resourceToKind { + if currResource.Resource == resource.Resource { + ret = append(ret, currKind) + } + } + } + + if len(ret) == 0 { + return nil, &NoResourceMatchError{PartialResource: input} + } + + sort.Sort(kindByPreferredGroupVersion{ret, m.defaultGroupVersions}) + return ret, nil +} + +func (m *DefaultRESTMapper) KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) { + kinds, err := m.KindsFor(resource) + if err != nil { + return unversioned.GroupVersionKind{}, err + } + if len(kinds) == 1 { + return kinds[0], nil + } + + return unversioned.GroupVersionKind{}, &AmbiguousResourceError{PartialResource: resource, MatchingKinds: kinds} +} + +type kindByPreferredGroupVersion struct { + list []unversioned.GroupVersionKind + sortOrder []unversioned.GroupVersion +} + +func (o kindByPreferredGroupVersion) Len() int { return len(o.list) } +func (o kindByPreferredGroupVersion) Swap(i, j int) { o.list[i], o.list[j] = o.list[j], o.list[i] } +func (o kindByPreferredGroupVersion) Less(i, j int) bool { + lhs := o.list[i] + rhs := o.list[j] + if lhs == rhs { + return false + } + + if lhs.GroupVersion() == rhs.GroupVersion() { + return lhs.Kind < rhs.Kind + } + + // otherwise, the difference is in the GroupVersion, so we need to sort with respect to the preferred order + lhsIndex := -1 + rhsIndex := -1 + + for i := range o.sortOrder { + if o.sortOrder[i] == lhs.GroupVersion() { + lhsIndex = i + } + if o.sortOrder[i] == rhs.GroupVersion() { + rhsIndex = i + } + } + + if rhsIndex == -1 { + return true + } + + return lhsIndex < rhsIndex +} + +type resourceByPreferredGroupVersion struct { + list []unversioned.GroupVersionResource + sortOrder []unversioned.GroupVersion +} + +func (o resourceByPreferredGroupVersion) Len() int { return len(o.list) } +func (o resourceByPreferredGroupVersion) Swap(i, j int) { o.list[i], o.list[j] = o.list[j], o.list[i] } +func (o resourceByPreferredGroupVersion) Less(i, j int) bool { + lhs := o.list[i] + rhs := o.list[j] + if lhs == rhs { + return false + } + + if lhs.GroupVersion() == rhs.GroupVersion() { + return lhs.Resource < rhs.Resource + } + + // otherwise, the difference is in the GroupVersion, so we need to sort with respect to the preferred order + lhsIndex := -1 + rhsIndex := -1 + + for i := range o.sortOrder { + if o.sortOrder[i] == lhs.GroupVersion() { + lhsIndex = i + } + if o.sortOrder[i] == rhs.GroupVersion() { + rhsIndex = i + } + } + + if rhsIndex == -1 { + return true + } + + return lhsIndex < rhsIndex +} + +// RESTMapping returns a struct representing the resource path and conversion interfaces a +// RESTClient should use to operate on the provided group/kind in order of versions. If a version search +// order is not provided, the search order provided to DefaultRESTMapper will be used to resolve which +// version should be used to access the named group/kind. +// TODO: consider refactoring to use RESTMappings in a way that preserves version ordering and preference +func (m *DefaultRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...string) (*RESTMapping, error) { + // Pick an appropriate version + var gvk *unversioned.GroupVersionKind + hadVersion := false + for _, version := range versions { + if len(version) == 0 || version == runtime.APIVersionInternal { + continue + } + + currGVK := gk.WithVersion(version) + hadVersion = true + if _, ok := m.kindToPluralResource[currGVK]; ok { + gvk = &currGVK + break + } + } + // Use the default preferred versions + if !hadVersion && (gvk == nil) { + for _, gv := range m.defaultGroupVersions { + if gv.Group != gk.Group { + continue + } + + currGVK := gk.WithVersion(gv.Version) + if _, ok := m.kindToPluralResource[currGVK]; ok { + gvk = &currGVK + break + } + } + } + if gvk == nil { + return nil, &NoKindMatchError{PartialKind: gk.WithVersion("")} + } + + // Ensure we have a REST mapping + resource, ok := m.kindToPluralResource[*gvk] + if !ok { + found := []unversioned.GroupVersion{} + for _, gv := range m.defaultGroupVersions { + if _, ok := m.kindToPluralResource[*gvk]; ok { + found = append(found, gv) + } + } + if len(found) > 0 { + return nil, fmt.Errorf("object with kind %q exists in versions %v, not %v", gvk.Kind, found, gvk.GroupVersion().String()) + } + return nil, fmt.Errorf("the provided version %q and kind %q cannot be mapped to a supported object", gvk.GroupVersion().String(), gvk.Kind) + } + + // Ensure we have a REST scope + scope, ok := m.kindToScope[*gvk] + if !ok { + return nil, fmt.Errorf("the provided version %q and kind %q cannot be mapped to a supported scope", gvk.GroupVersion().String(), gvk.Kind) + } + + interfaces, err := m.interfacesFunc(gvk.GroupVersion()) + if err != nil { + return nil, fmt.Errorf("the provided version %q has no relevant versions", gvk.GroupVersion().String()) + } + + retVal := &RESTMapping{ + Resource: resource.Resource, + GroupVersionKind: *gvk, + Scope: scope, + + ObjectConvertor: interfaces.ObjectConvertor, + MetadataAccessor: interfaces.MetadataAccessor, + } + + return retVal, nil +} + +// RESTMappings returns the RESTMappings for the provided group kind in a rough internal preferred order. If no +// kind is found it will return a NoResourceMatchError. +func (m *DefaultRESTMapper) RESTMappings(gk unversioned.GroupKind) ([]*RESTMapping, error) { + // Use the default preferred versions + var mappings []*RESTMapping + for _, gv := range m.defaultGroupVersions { + if gv.Group != gk.Group { + continue + } + + gvk := gk.WithVersion(gv.Version) + gvr, ok := m.kindToPluralResource[gvk] + if !ok { + continue + } + + // Ensure we have a REST scope + scope, ok := m.kindToScope[gvk] + if !ok { + return nil, fmt.Errorf("the provided version %q and kind %q cannot be mapped to a supported scope", gvk.GroupVersion(), gvk.Kind) + } + + interfaces, err := m.interfacesFunc(gvk.GroupVersion()) + if err != nil { + return nil, fmt.Errorf("the provided version %q has no relevant versions", gvk.GroupVersion().String()) + } + + mappings = append(mappings, &RESTMapping{ + Resource: gvr.Resource, + GroupVersionKind: gvk, + Scope: scope, + + ObjectConvertor: interfaces.ObjectConvertor, + MetadataAccessor: interfaces.MetadataAccessor, + }) + } + + if len(mappings) == 0 { + return nil, &NoResourceMatchError{PartialResource: unversioned.GroupVersionResource{Group: gk.Group, Resource: gk.Kind}} + } + return mappings, nil +} + +// AddResourceAlias maps aliases to resources +func (m *DefaultRESTMapper) AddResourceAlias(alias string, resources ...string) { + if len(resources) == 0 { + return + } + m.aliasToResource[alias] = resources +} + +// AliasesForResource returns whether a resource has an alias or not +func (m *DefaultRESTMapper) AliasesForResource(alias string) ([]string, bool) { + if res, ok := m.aliasToResource[alias]; ok { + return res, true + } + return nil, false +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/meta/unstructured.go b/vendor/k8s.io/client-go/1.4/pkg/api/meta/unstructured.go new file mode 100644 index 00000000..7b905496 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/meta/unstructured.go @@ -0,0 +1,31 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package meta + +import ( + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// InterfacesForUnstructured returns VersionInterfaces suitable for +// dealing with runtime.Unstructured objects. +func InterfacesForUnstructured(unversioned.GroupVersion) (*VersionInterfaces, error) { + return &VersionInterfaces{ + ObjectConvertor: &runtime.UnstructuredObjectConverter{}, + MetadataAccessor: NewAccessor(), + }, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/node_example.json b/vendor/k8s.io/client-go/1.4/pkg/api/node_example.json new file mode 100644 index 00000000..26018348 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/node_example.json @@ -0,0 +1,49 @@ +{ + "kind": "Node", + "apiVersion": "v1", + "metadata": { + "name": "e2e-test-wojtekt-minion-etd6", + "selfLink": "/api/v1/nodes/e2e-test-wojtekt-minion-etd6", + "uid": "a7e89222-e8e5-11e4-8fde-42010af09327", + "resourceVersion": "379", + "creationTimestamp": "2015-04-22T11:49:39Z" + }, + "spec": { + "externalID": "15488322946290398375" + }, + "status": { + "capacity": { + "cpu": "1", + "memory": "1745152Ki" + }, + "conditions": [ + { + "type": "Ready", + "status": "True", + "lastHeartbeatTime": "2015-04-22T11:58:17Z", + "lastTransitionTime": "2015-04-22T11:49:52Z", + "reason": "kubelet is posting ready status" + } + ], + "addresses": [ + { + "type": "ExternalIP", + "address": "104.197.49.213" + }, + { + "type": "LegacyHostIP", + "address": "104.197.20.11" + } + ], + "nodeInfo": { + "machineID": "", + "systemUUID": "D59FA3FA-7B5B-7287-5E1A-1D79F13CB577", + "bootID": "44a832f3-8cfb-4de5-b7d2-d66030b6cd95", + "kernelVersion": "3.16.0-0.bpo.4-amd64", + "osImage": "Debian GNU/Linux 7 (wheezy)", + "containerRuntimeVersion": "docker://1.5.0", + "kubeletVersion": "v0.15.0-484-g0c8ee980d705a3-dirty", + "kubeProxyVersion": "v0.15.0-484-g0c8ee980d705a3-dirty" + } + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/pod/util.go b/vendor/k8s.io/client-go/1.4/pkg/api/pod/util.go new file mode 100644 index 00000000..584d0dfd --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/pod/util.go @@ -0,0 +1,61 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package pod + +import ( + "fmt" + + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/util/intstr" +) + +const ( + // TODO: to be de!eted after v1.3 is released. PodSpec has a dedicated Hostname field. + // The annotation value is a string specifying the hostname to be used for the pod e.g 'my-webserver-1' + PodHostnameAnnotation = "pod.beta.kubernetes.io/hostname" + + // TODO: to be de!eted after v1.3 is released. PodSpec has a dedicated Subdomain field. + // The annotation value is a string specifying the subdomain e.g. "my-web-service" + // If specified, on the pod itself, ".my-web-service..svc." would resolve to + // the pod's IP. + // If there is a headless service named "my-web-service" in the same namespace as the pod, then, + // .my-web-service..svc." would be resolved by the cluster DNS Server. + PodSubdomainAnnotation = "pod.beta.kubernetes.io/subdomain" +) + +// FindPort locates the container port for the given pod and portName. If the +// targetPort is a number, use that. If the targetPort is a string, look that +// string up in all named ports in all containers in the target pod. If no +// match is found, fail. +func FindPort(pod *api.Pod, svcPort *api.ServicePort) (int, error) { + portName := svcPort.TargetPort + switch portName.Type { + case intstr.String: + name := portName.StrVal + for _, container := range pod.Spec.Containers { + for _, port := range container.Ports { + if port.Name == name && port.Protocol == svcPort.Protocol { + return int(port.ContainerPort), nil + } + } + } + case intstr.Int: + return portName.IntValue(), nil + } + + return 0, fmt.Errorf("no suitable port for manifest: %s", pod.UID) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/ref.go b/vendor/k8s.io/client-go/1.4/pkg/api/ref.go new file mode 100644 index 00000000..3e49540a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/ref.go @@ -0,0 +1,132 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "errors" + "fmt" + "net/url" + "strings" + + "k8s.io/client-go/1.4/pkg/api/meta" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +var ( + // Errors that could be returned by GetReference. + ErrNilObject = errors.New("can't reference a nil object") + ErrNoSelfLink = errors.New("selfLink was empty, can't make reference") +) + +// GetReference returns an ObjectReference which refers to the given +// object, or an error if the object doesn't follow the conventions +// that would allow this. +// TODO: should take a meta.Interface see http://issue.k8s.io/7127 +func GetReference(obj runtime.Object) (*ObjectReference, error) { + if obj == nil { + return nil, ErrNilObject + } + if ref, ok := obj.(*ObjectReference); ok { + // Don't make a reference to a reference. + return ref, nil + } + + gvk := obj.GetObjectKind().GroupVersionKind() + + // if the object referenced is actually persisted, we can just get kind from meta + // if we are building an object reference to something not yet persisted, we should fallback to scheme + kind := gvk.Kind + if len(kind) == 0 { + // TODO: this is wrong + gvks, _, err := Scheme.ObjectKinds(obj) + if err != nil { + return nil, err + } + kind = gvks[0].Kind + } + + // An object that implements only List has enough metadata to build a reference + var listMeta meta.List + objectMeta, err := meta.Accessor(obj) + if err != nil { + listMeta, err = meta.ListAccessor(obj) + if err != nil { + return nil, err + } + } else { + listMeta = objectMeta + } + + // if the object referenced is actually persisted, we can also get version from meta + version := gvk.GroupVersion().String() + if len(version) == 0 { + selfLink := listMeta.GetSelfLink() + if len(selfLink) == 0 { + return nil, ErrNoSelfLink + } + selfLinkUrl, err := url.Parse(selfLink) + if err != nil { + return nil, err + } + // example paths: ///* + parts := strings.Split(selfLinkUrl.Path, "/") + if len(parts) < 3 { + return nil, fmt.Errorf("unexpected self link format: '%v'; got version '%v'", selfLink, version) + } + version = parts[2] + } + + // only has list metadata + if objectMeta == nil { + return &ObjectReference{ + Kind: kind, + APIVersion: version, + ResourceVersion: listMeta.GetResourceVersion(), + }, nil + } + + return &ObjectReference{ + Kind: kind, + APIVersion: version, + Name: objectMeta.GetName(), + Namespace: objectMeta.GetNamespace(), + UID: objectMeta.GetUID(), + ResourceVersion: objectMeta.GetResourceVersion(), + }, nil +} + +// GetPartialReference is exactly like GetReference, but allows you to set the FieldPath. +func GetPartialReference(obj runtime.Object, fieldPath string) (*ObjectReference, error) { + ref, err := GetReference(obj) + if err != nil { + return nil, err + } + ref.FieldPath = fieldPath + return ref, nil +} + +// IsAnAPIObject allows clients to preemptively get a reference to an API object and pass it to places that +// intend only to get a reference to that object. This simplifies the event recording interface. +func (obj *ObjectReference) SetGroupVersionKind(gvk unversioned.GroupVersionKind) { + obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind() +} +func (obj *ObjectReference) GroupVersionKind() unversioned.GroupVersionKind { + return unversioned.FromAPIVersionAndKind(obj.APIVersion, obj.Kind) +} + +func (obj *ObjectReference) GetObjectKind() unversioned.ObjectKind { return obj } diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/register.go b/vendor/k8s.io/client-go/1.4/pkg/api/register.go new file mode 100644 index 00000000..1f57414d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/register.go @@ -0,0 +1,139 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/runtime/serializer" +) + +// Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. +// NOTE: If you are copying this file to start a new api group, STOP! Copy the +// extensions group instead. This Scheme is special and should appear ONLY in +// the api group, unless you really know what you're doing. +// TODO(lavalamp): make the above error impossible. +var Scheme = runtime.NewScheme() + +// Codecs provides access to encoding and decoding for the scheme +var Codecs = serializer.NewCodecFactory(Scheme) + +// GroupName is the group name use in this package +const GroupName = "" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Unversioned is group version for unversioned API objects +// TODO: this should be v1 probably +var Unversioned = unversioned.GroupVersion{Group: "", Version: "v1"} + +// ParameterCodec handles versioning of objects that are converted to query parameters. +var ParameterCodec = runtime.NewParameterCodec(Scheme) + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) unversioned.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) unversioned.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +func init() { + // TODO(lavalamp): move this call to scheme builder above. Can't + // remove it from here because lots of people inappropriately rely on it + // (specifically the unversioned time conversion). Can't have it in + // both places because then it gets double registered. Consequence of + // current state is that it only ever gets registered in the main + // api.Scheme, even though everyone that uses anything from unversioned + // needs these. + if err := addConversionFuncs(Scheme); err != nil { + // Programmer error. + panic(err) + } +} + +func addKnownTypes(scheme *runtime.Scheme) error { + if err := scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { + return err + } + scheme.AddKnownTypes(SchemeGroupVersion, + &Pod{}, + &PodList{}, + &PodStatusResult{}, + &PodTemplate{}, + &PodTemplateList{}, + &ReplicationControllerList{}, + &ReplicationController{}, + &ServiceList{}, + &Service{}, + &ServiceProxyOptions{}, + &NodeList{}, + &Node{}, + &NodeProxyOptions{}, + &Endpoints{}, + &EndpointsList{}, + &Binding{}, + &Event{}, + &EventList{}, + &List{}, + &LimitRange{}, + &LimitRangeList{}, + &ResourceQuota{}, + &ResourceQuotaList{}, + &Namespace{}, + &NamespaceList{}, + &ServiceAccount{}, + &ServiceAccountList{}, + &Secret{}, + &SecretList{}, + &PersistentVolume{}, + &PersistentVolumeList{}, + &PersistentVolumeClaim{}, + &PersistentVolumeClaimList{}, + &DeleteOptions{}, + &ListOptions{}, + &PodAttachOptions{}, + &PodLogOptions{}, + &PodExecOptions{}, + &PodProxyOptions{}, + &ComponentStatus{}, + &ComponentStatusList{}, + &SerializedReference{}, + &RangeAllocation{}, + &ConfigMap{}, + &ConfigMapList{}, + ) + + // Register Unversioned types under their own special group + scheme.AddUnversionedTypes(Unversioned, + &unversioned.ExportOptions{}, + &unversioned.Status{}, + &unversioned.APIVersions{}, + &unversioned.APIGroupList{}, + &unversioned.APIGroup{}, + &unversioned.APIResourceList{}, + ) + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/replication_controller_example.json b/vendor/k8s.io/client-go/1.4/pkg/api/replication_controller_example.json new file mode 100644 index 00000000..70eef1cf --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/replication_controller_example.json @@ -0,0 +1,83 @@ +{ + "kind": "ReplicationController", + "apiVersion": "v1", + "metadata": { + "name": "elasticsearch-logging-controller", + "namespace": "default", + "selfLink": "/api/v1/namespaces/default/replicationcontrollers/elasticsearch-logging-controller", + "uid": "aa76f162-e8e5-11e4-8fde-42010af09327", + "resourceVersion": "98", + "creationTimestamp": "2015-04-22T11:49:43Z", + "labels": { + "kubernetes.io/cluster-service": "true", + "name": "elasticsearch-logging" + } + }, + "spec": { + "replicas": 1, + "selector": { + "name": "elasticsearch-logging" + }, + "template": { + "metadata": { + "creationTimestamp": null, + "labels": { + "kubernetes.io/cluster-service": "true", + "name": "elasticsearch-logging" + } + }, + "spec": { + "volumes": [ + { + "name": "es-persistent-storage", + "hostPath": null, + "emptyDir": { + "medium": "" + }, + "gcePersistentDisk": null, + "awsElasticBlockStore": null, + "gitRepo": null, + "secret": null, + "nfs": null, + "iscsi": null, + "glusterfs": null, + "quobyte": null + } + ], + "containers": [ + { + "name": "elasticsearch-logging", + "image": "gcr.io/google_containers/elasticsearch:1.0", + "ports": [ + { + "name": "db", + "containerPort": 9200, + "protocol": "TCP" + }, + { + "name": "transport", + "containerPort": 9300, + "protocol": "TCP" + } + ], + "resources": {}, + "volumeMounts": [ + { + "name": "es-persistent-storage", + "mountPath": "/data" + } + ], + "terminationMessagePath": "/dev/termination-log", + "imagePullPolicy": "IfNotPresent", + "capabilities": {} + } + ], + "restartPolicy": "Always", + "dnsPolicy": "ClusterFirst" + } + } + }, + "status": { + "replicas": 1 + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/requestcontext.go b/vendor/k8s.io/client-go/1.4/pkg/api/requestcontext.go new file mode 100644 index 00000000..14983b2d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/requestcontext.go @@ -0,0 +1,115 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "errors" + "net/http" + "sync" +) + +// RequestContextMapper keeps track of the context associated with a particular request +type RequestContextMapper interface { + // Get returns the context associated with the given request (if any), and true if the request has an associated context, and false if it does not. + Get(req *http.Request) (Context, bool) + // Update maps the request to the given context. If no context was previously associated with the request, an error is returned. + // Update should only be called with a descendant context of the previously associated context. + // Updating to an unrelated context may return an error in the future. + // The context associated with a request should only be updated by a limited set of callers. + // Valid examples include the authentication layer, or an audit/tracing layer. + Update(req *http.Request, context Context) error +} + +type requestContextMap struct { + contexts map[*http.Request]Context + lock sync.Mutex +} + +// NewRequestContextMapper returns a new RequestContextMapper. +// The returned mapper must be added as a request filter using NewRequestContextFilter. +func NewRequestContextMapper() RequestContextMapper { + return &requestContextMap{ + contexts: make(map[*http.Request]Context), + } +} + +// Get returns the context associated with the given request (if any), and true if the request has an associated context, and false if it does not. +// Get will only return a valid context when called from inside the filter chain set up by NewRequestContextFilter() +func (c *requestContextMap) Get(req *http.Request) (Context, bool) { + c.lock.Lock() + defer c.lock.Unlock() + context, ok := c.contexts[req] + return context, ok +} + +// Update maps the request to the given context. +// If no context was previously associated with the request, an error is returned and the context is ignored. +func (c *requestContextMap) Update(req *http.Request, context Context) error { + c.lock.Lock() + defer c.lock.Unlock() + if _, ok := c.contexts[req]; !ok { + return errors.New("No context associated") + } + // TODO: ensure the new context is a descendant of the existing one + c.contexts[req] = context + return nil +} + +// init maps the request to the given context and returns true if there was no context associated with the request already. +// if a context was already associated with the request, it ignores the given context and returns false. +// init is intentionally unexported to ensure that all init calls are paired with a remove after a request is handled +func (c *requestContextMap) init(req *http.Request, context Context) bool { + c.lock.Lock() + defer c.lock.Unlock() + if _, exists := c.contexts[req]; exists { + return false + } + c.contexts[req] = context + return true +} + +// remove is intentionally unexported to ensure that the context is not removed until a request is handled +func (c *requestContextMap) remove(req *http.Request) { + c.lock.Lock() + defer c.lock.Unlock() + delete(c.contexts, req) +} + +// NewRequestContextFilter ensures there is a Context object associated with the request before calling the passed handler. +// After the passed handler runs, the context is cleaned up. +func NewRequestContextFilter(mapper RequestContextMapper, handler http.Handler) (http.Handler, error) { + if mapper, ok := mapper.(*requestContextMap); ok { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + if mapper.init(req, NewContext()) { + // If we were the ones to successfully initialize, pair with a remove + defer mapper.remove(req) + } + handler.ServeHTTP(w, req) + }), nil + } else { + return handler, errors.New("Unknown RequestContextMapper implementation.") + } + +} + +// IsEmpty returns true if there are no contexts registered, or an error if it could not be determined. Intended for use by tests. +func IsEmpty(requestsToContexts RequestContextMapper) (bool, error) { + if requestsToContexts, ok := requestsToContexts.(*requestContextMap); ok { + return len(requestsToContexts.contexts) == 0, nil + } + return true, errors.New("Unknown RequestContextMapper implementation") +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource/amount.go b/vendor/k8s.io/client-go/1.4/pkg/api/resource/amount.go new file mode 100644 index 00000000..2d3012c8 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource/amount.go @@ -0,0 +1,298 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resource + +import ( + "math/big" + "strconv" + + inf "gopkg.in/inf.v0" +) + +// Scale is used for getting and setting the base-10 scaled value. +// Base-2 scales are omitted for mathematical simplicity. +// See Quantity.ScaledValue for more details. +type Scale int32 + +// infScale adapts a Scale value to an inf.Scale value. +func (s Scale) infScale() inf.Scale { + return inf.Scale(-s) // inf.Scale is upside-down +} + +const ( + Nano Scale = -9 + Micro Scale = -6 + Milli Scale = -3 + Kilo Scale = 3 + Mega Scale = 6 + Giga Scale = 9 + Tera Scale = 12 + Peta Scale = 15 + Exa Scale = 18 +) + +var ( + Zero = int64Amount{} + + // Used by quantity strings - treat as read only + zeroBytes = []byte("0") +) + +// int64Amount represents a fixed precision numerator and arbitrary scale exponent. It is faster +// than operations on inf.Dec for values that can be represented as int64. +type int64Amount struct { + value int64 + scale Scale +} + +// Sign returns 0 if the value is zero, -1 if it is less than 0, or 1 if it is greater than 0. +func (a int64Amount) Sign() int { + switch { + case a.value == 0: + return 0 + case a.value > 0: + return 1 + default: + return -1 + } +} + +// AsInt64 returns the current amount as an int64 at scale 0, or false if the value cannot be +// represented in an int64 OR would result in a loss of precision. This method is intended as +// an optimization to avoid calling AsDec. +func (a int64Amount) AsInt64() (int64, bool) { + if a.scale == 0 { + return a.value, true + } + if a.scale < 0 { + // TODO: attempt to reduce factors, although it is assumed that factors are reduced prior + // to the int64Amount being created. + return 0, false + } + return positiveScaleInt64(a.value, a.scale) +} + +// AsScaledInt64 returns an int64 representing the value of this amount at the specified scale, +// rounding up, or false if that would result in overflow. (1e20).AsScaledInt64(1) would result +// in overflow because 1e19 is not representable as an int64. Note that setting a scale larger +// than the current value may result in loss of precision - i.e. (1e-6).AsScaledInt64(0) would +// return 1, because 0.000001 is rounded up to 1. +func (a int64Amount) AsScaledInt64(scale Scale) (result int64, ok bool) { + if a.scale < scale { + result, _ = negativeScaleInt64(a.value, scale-a.scale) + return result, true + } + return positiveScaleInt64(a.value, a.scale-scale) +} + +// AsDec returns an inf.Dec representation of this value. +func (a int64Amount) AsDec() *inf.Dec { + var base inf.Dec + base.SetUnscaled(a.value) + base.SetScale(inf.Scale(-a.scale)) + return &base +} + +// Cmp returns 0 if a and b are equal, 1 if a is greater than b, or -1 if a is less than b. +func (a int64Amount) Cmp(b int64Amount) int { + switch { + case a.scale == b.scale: + // compare only the unscaled portion + case a.scale > b.scale: + result, remainder, exact := divideByScaleInt64(b.value, a.scale-b.scale) + if !exact { + return a.AsDec().Cmp(b.AsDec()) + } + if result == a.value { + switch { + case remainder == 0: + return 0 + case remainder > 0: + return -1 + default: + return 1 + } + } + b.value = result + default: + result, remainder, exact := divideByScaleInt64(a.value, b.scale-a.scale) + if !exact { + return a.AsDec().Cmp(b.AsDec()) + } + if result == b.value { + switch { + case remainder == 0: + return 0 + case remainder > 0: + return 1 + default: + return -1 + } + } + a.value = result + } + + switch { + case a.value == b.value: + return 0 + case a.value < b.value: + return -1 + default: + return 1 + } +} + +// Add adds two int64Amounts together, matching scales. It will return false and not mutate +// a if overflow or underflow would result. +func (a *int64Amount) Add(b int64Amount) bool { + switch { + case b.value == 0: + return true + case a.value == 0: + a.value = b.value + a.scale = b.scale + return true + case a.scale == b.scale: + c, ok := int64Add(a.value, b.value) + if !ok { + return false + } + a.value = c + case a.scale > b.scale: + c, ok := positiveScaleInt64(a.value, a.scale-b.scale) + if !ok { + return false + } + c, ok = int64Add(c, b.value) + if !ok { + return false + } + a.scale = b.scale + a.value = c + default: + c, ok := positiveScaleInt64(b.value, b.scale-a.scale) + if !ok { + return false + } + c, ok = int64Add(a.value, c) + if !ok { + return false + } + a.value = c + } + return true +} + +// Sub removes the value of b from the current amount, or returns false if underflow would result. +func (a *int64Amount) Sub(b int64Amount) bool { + return a.Add(int64Amount{value: -b.value, scale: b.scale}) +} + +// AsScale adjusts this amount to set a minimum scale, rounding up, and returns true iff no precision +// was lost. (1.1e5).AsScale(5) would return 1.1e5, but (1.1e5).AsScale(6) would return 1e6. +func (a int64Amount) AsScale(scale Scale) (int64Amount, bool) { + if a.scale >= scale { + return a, true + } + result, exact := negativeScaleInt64(a.value, scale-a.scale) + return int64Amount{value: result, scale: scale}, exact +} + +// AsCanonicalBytes accepts a buffer to write the base-10 string value of this field to, and returns +// either that buffer or a larger buffer and the current exponent of the value. The value is adjusted +// until the exponent is a multiple of 3 - i.e. 1.1e5 would return "110", 3. +func (a int64Amount) AsCanonicalBytes(out []byte) (result []byte, exponent int32) { + mantissa := a.value + exponent = int32(a.scale) + + amount, times := removeInt64Factors(mantissa, 10) + exponent += int32(times) + + // make sure exponent is a multiple of 3 + var ok bool + switch exponent % 3 { + case 1, -2: + amount, ok = int64MultiplyScale10(amount) + if !ok { + return infDecAmount{a.AsDec()}.AsCanonicalBytes(out) + } + exponent = exponent - 1 + case 2, -1: + amount, ok = int64MultiplyScale100(amount) + if !ok { + return infDecAmount{a.AsDec()}.AsCanonicalBytes(out) + } + exponent = exponent - 2 + } + return strconv.AppendInt(out, amount, 10), exponent +} + +// AsCanonicalBase1024Bytes accepts a buffer to write the base-1024 string value of this field to, and returns +// either that buffer or a larger buffer and the current exponent of the value. 2048 is 2 * 1024 ^ 1 and would +// return []byte("2048"), 1. +func (a int64Amount) AsCanonicalBase1024Bytes(out []byte) (result []byte, exponent int32) { + value, ok := a.AsScaledInt64(0) + if !ok { + return infDecAmount{a.AsDec()}.AsCanonicalBase1024Bytes(out) + } + amount, exponent := removeInt64Factors(value, 1024) + return strconv.AppendInt(out, amount, 10), exponent +} + +// infDecAmount implements common operations over an inf.Dec that are specific to the quantity +// representation. +type infDecAmount struct { + *inf.Dec +} + +// AsScale adjusts this amount to set a minimum scale, rounding up, and returns true iff no precision +// was lost. (1.1e5).AsScale(5) would return 1.1e5, but (1.1e5).AsScale(6) would return 1e6. +func (a infDecAmount) AsScale(scale Scale) (infDecAmount, bool) { + tmp := &inf.Dec{} + tmp.Round(a.Dec, scale.infScale(), inf.RoundUp) + return infDecAmount{tmp}, tmp.Cmp(a.Dec) == 0 +} + +// AsCanonicalBytes accepts a buffer to write the base-10 string value of this field to, and returns +// either that buffer or a larger buffer and the current exponent of the value. The value is adjusted +// until the exponent is a multiple of 3 - i.e. 1.1e5 would return "110", 3. +func (a infDecAmount) AsCanonicalBytes(out []byte) (result []byte, exponent int32) { + mantissa := a.Dec.UnscaledBig() + exponent = int32(-a.Dec.Scale()) + amount := big.NewInt(0).Set(mantissa) + // move all factors of 10 into the exponent for easy reasoning + amount, times := removeBigIntFactors(amount, bigTen) + exponent += times + + // make sure exponent is a multiple of 3 + for exponent%3 != 0 { + amount.Mul(amount, bigTen) + exponent-- + } + + return append(out, amount.String()...), exponent +} + +// AsCanonicalBase1024Bytes accepts a buffer to write the base-1024 string value of this field to, and returns +// either that buffer or a larger buffer and the current exponent of the value. 2048 is 2 * 1024 ^ 1 and would +// return []byte("2048"), 1. +func (a infDecAmount) AsCanonicalBase1024Bytes(out []byte) (result []byte, exponent int32) { + tmp := &inf.Dec{} + tmp.Round(a.Dec, 0, inf.RoundUp) + amount, exponent := removeBigIntFactors(tmp.UnscaledBig(), big1024) + return append(out, amount.String()...), exponent +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource/generated.pb.go b/vendor/k8s.io/client-go/1.4/pkg/api/resource/generated.pb.go new file mode 100644 index 00000000..76f7204e --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource/generated.pb.go @@ -0,0 +1,69 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/api/resource/generated.proto +// DO NOT EDIT! + +/* + Package resource is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/api/resource/generated.proto + + It has these top-level messages: + Quantity +*/ +package resource + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *Quantity) Reset() { *m = Quantity{} } +func (*Quantity) ProtoMessage() {} +func (*Quantity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func init() { + proto.RegisterType((*Quantity)(nil), "k8s.io.client-go.1.4.pkg.api.resource.Quantity") +} + +var fileDescriptorGenerated = []byte{ + // 222 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x32, 0xca, 0xb6, 0x28, 0xd6, + 0xcb, 0xcc, 0xd7, 0xcf, 0x2e, 0x4d, 0x4a, 0x2d, 0xca, 0x4b, 0x2d, 0x49, 0x2d, 0xd6, 0x2f, 0xc8, + 0x4e, 0xd7, 0x4f, 0x2c, 0xc8, 0xd4, 0x2f, 0x4a, 0x2d, 0xce, 0x2f, 0x2d, 0x4a, 0x4e, 0xd5, 0x4f, + 0x4f, 0xcd, 0x4b, 0x2d, 0x4a, 0x2c, 0x49, 0x4d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x52, + 0x82, 0xe8, 0xd1, 0x43, 0xe8, 0xd1, 0x03, 0xea, 0xd1, 0x03, 0xea, 0xd1, 0x83, 0xe9, 0x91, 0xd2, + 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0x4f, 0xcf, 0xd7, + 0x07, 0x6b, 0x4d, 0x2a, 0x4d, 0x03, 0xf3, 0xc0, 0x1c, 0x30, 0x0b, 0x62, 0xa4, 0x94, 0x21, 0x76, + 0x67, 0x94, 0x96, 0x64, 0xe6, 0xe8, 0x67, 0xe6, 0x95, 0x14, 0x97, 0x14, 0xa1, 0xbb, 0x42, 0xc9, + 0x82, 0x8b, 0x23, 0xb0, 0x34, 0x31, 0xaf, 0x24, 0xb3, 0xa4, 0x52, 0x48, 0x8c, 0x8b, 0x0d, 0xa8, + 0x24, 0x33, 0x2f, 0x5d, 0x82, 0x51, 0x81, 0x51, 0x83, 0x33, 0x08, 0xca, 0xb3, 0x12, 0x99, 0xb1, + 0x40, 0x9e, 0xa1, 0x63, 0xa1, 0x3c, 0xc3, 0x04, 0x20, 0x5e, 0x00, 0xc4, 0x0d, 0x77, 0x14, 0x18, + 0x9c, 0xb4, 0x4e, 0x3c, 0x94, 0x63, 0xb8, 0x00, 0xc4, 0x37, 0x80, 0xb8, 0xe1, 0x91, 0x1c, 0xe3, + 0x09, 0x20, 0xbe, 0x00, 0xc4, 0x0f, 0x80, 0x78, 0xc2, 0x63, 0x39, 0x86, 0x28, 0x0e, 0x98, 0x3f, + 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x90, 0x1c, 0x7f, 0xff, 0x20, 0x01, 0x00, 0x00, +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource/generated.proto b/vendor/k8s.io/client-go/1.4/pkg/api/resource/generated.proto new file mode 100644 index 00000000..bdc091d9 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource/generated.proto @@ -0,0 +1,93 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.api.resource; + +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "resource"; + +// Quantity is a fixed-point representation of a number. +// It provides convenient marshaling/unmarshaling in JSON and YAML, +// in addition to String() and Int64() accessors. +// +// The serialization format is: +// +// ::= +// (Note that may be empty, from the "" case in .) +// ::= 0 | 1 | ... | 9 +// ::= | +// ::= | . | . | . +// ::= "+" | "-" +// ::= | +// ::= | | +// ::= Ki | Mi | Gi | Ti | Pi | Ei +// (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html) +// ::= m | "" | k | M | G | T | P | E +// (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.) +// ::= "e" | "E" +// +// No matter which of the three exponent forms is used, no quantity may represent +// a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal +// places. Numbers larger or more precise will be capped or rounded up. +// (E.g.: 0.1m will rounded up to 1m.) +// This may be extended in the future if we require larger or smaller quantities. +// +// When a Quantity is parsed from a string, it will remember the type of suffix +// it had, and will use the same type again when it is serialized. +// +// Before serializing, Quantity will be put in "canonical form". +// This means that Exponent/suffix will be adjusted up or down (with a +// corresponding increase or decrease in Mantissa) such that: +// a. No precision is lost +// b. No fractional digits will be emitted +// c. The exponent (or suffix) is as large as possible. +// The sign will be omitted unless the number is negative. +// +// Examples: +// 1.5 will be serialized as "1500m" +// 1.5Gi will be serialized as "1536Mi" +// +// NOTE: We reserve the right to amend this canonical format, perhaps to +// allow 1.5 to be canonical. +// TODO: Remove above disclaimer after all bikeshedding about format is over, +// or after March 2015. +// +// Note that the quantity will NEVER be internally represented by a +// floating point number. That is the whole point of this exercise. +// +// Non-canonical values will still parse as long as they are well formed, +// but will be re-emitted in their canonical form. (So always use canonical +// form, or don't diff.) +// +// This format is intended to make it difficult to use these numbers without +// writing some sort of special handling code in the hopes that that will +// cause implementors to also use a fixed point implementation. +// +// +protobuf=true +// +protobuf.embed=string +// +protobuf.options.marshal=false +// +protobuf.options.(gogoproto.goproto_stringer)=false +message Quantity { + optional string string = 1; +} + diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource/math.go b/vendor/k8s.io/client-go/1.4/pkg/api/resource/math.go new file mode 100644 index 00000000..887ac74c --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource/math.go @@ -0,0 +1,327 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resource + +import ( + "math/big" + + inf "gopkg.in/inf.v0" +) + +const ( + // maxInt64Factors is the highest value that will be checked when removing factors of 10 from an int64. + // It is also the maximum decimal digits that can be represented with an int64. + maxInt64Factors = 18 +) + +var ( + // Commonly needed big.Int values-- treat as read only! + bigTen = big.NewInt(10) + bigZero = big.NewInt(0) + bigOne = big.NewInt(1) + bigThousand = big.NewInt(1000) + big1024 = big.NewInt(1024) + + // Commonly needed inf.Dec values-- treat as read only! + decZero = inf.NewDec(0, 0) + decOne = inf.NewDec(1, 0) + decMinusOne = inf.NewDec(-1, 0) + decThousand = inf.NewDec(1000, 0) + dec1024 = inf.NewDec(1024, 0) + decMinus1024 = inf.NewDec(-1024, 0) + + // Largest (in magnitude) number allowed. + maxAllowed = infDecAmount{inf.NewDec((1<<63)-1, 0)} // == max int64 + + // The maximum value we can represent milli-units for. + // Compare with the return value of Quantity.Value() to + // see if it's safe to use Quantity.MilliValue(). + MaxMilliValue = int64(((1 << 63) - 1) / 1000) +) + +const mostNegative = -(mostPositive + 1) +const mostPositive = 1<<63 - 1 + +// int64Add returns a+b, or false if that would overflow int64. +func int64Add(a, b int64) (int64, bool) { + c := a + b + switch { + case a > 0 && b > 0: + if c < 0 { + return 0, false + } + case a < 0 && b < 0: + if c > 0 { + return 0, false + } + if a == mostNegative && b == mostNegative { + return 0, false + } + } + return c, true +} + +// int64Multiply returns a*b, or false if that would overflow or underflow int64. +func int64Multiply(a, b int64) (int64, bool) { + if a == 0 || b == 0 || a == 1 || b == 1 { + return a * b, true + } + if a == mostNegative || b == mostNegative { + return 0, false + } + c := a * b + return c, c/b == a +} + +// int64MultiplyScale returns a*b, assuming b is greater than one, or false if that would overflow or underflow int64. +// Use when b is known to be greater than one. +func int64MultiplyScale(a int64, b int64) (int64, bool) { + if a == 0 || a == 1 { + return a * b, true + } + if a == mostNegative && b != 1 { + return 0, false + } + c := a * b + return c, c/b == a +} + +// int64MultiplyScale10 multiplies a by 10, or returns false if that would overflow. This method is faster than +// int64Multiply(a, 10) because the compiler can optimize constant factor multiplication. +func int64MultiplyScale10(a int64) (int64, bool) { + if a == 0 || a == 1 { + return a * 10, true + } + if a == mostNegative { + return 0, false + } + c := a * 10 + return c, c/10 == a +} + +// int64MultiplyScale100 multiplies a by 100, or returns false if that would overflow. This method is faster than +// int64Multiply(a, 100) because the compiler can optimize constant factor multiplication. +func int64MultiplyScale100(a int64) (int64, bool) { + if a == 0 || a == 1 { + return a * 100, true + } + if a == mostNegative { + return 0, false + } + c := a * 100 + return c, c/100 == a +} + +// int64MultiplyScale1000 multiplies a by 1000, or returns false if that would overflow. This method is faster than +// int64Multiply(a, 1000) because the compiler can optimize constant factor multiplication. +func int64MultiplyScale1000(a int64) (int64, bool) { + if a == 0 || a == 1 { + return a * 1000, true + } + if a == mostNegative { + return 0, false + } + c := a * 1000 + return c, c/1000 == a +} + +// positiveScaleInt64 multiplies base by 10^scale, returning false if the +// value overflows. Passing a negative scale is undefined. +func positiveScaleInt64(base int64, scale Scale) (int64, bool) { + switch scale { + case 0: + return base, true + case 1: + return int64MultiplyScale10(base) + case 2: + return int64MultiplyScale100(base) + case 3: + return int64MultiplyScale1000(base) + case 6: + return int64MultiplyScale(base, 1000000) + case 9: + return int64MultiplyScale(base, 1000000000) + default: + value := base + var ok bool + for i := Scale(0); i < scale; i++ { + if value, ok = int64MultiplyScale(value, 10); !ok { + return 0, false + } + } + return value, true + } +} + +// negativeScaleInt64 reduces base by the provided scale, rounding up, until the +// value is zero or the scale is reached. Passing a negative scale is undefined. +// The value returned, if not exact, is rounded away from zero. +func negativeScaleInt64(base int64, scale Scale) (result int64, exact bool) { + if scale == 0 { + return base, true + } + + value := base + var fraction bool + for i := Scale(0); i < scale; i++ { + if !fraction && value%10 != 0 { + fraction = true + } + value = value / 10 + if value == 0 { + if fraction { + if base > 0 { + return 1, false + } + return -1, false + } + return 0, true + } + } + if fraction { + if base > 0 { + value += 1 + } else { + value += -1 + } + } + return value, !fraction +} + +func pow10Int64(b int64) int64 { + switch b { + case 0: + return 1 + case 1: + return 10 + case 2: + return 100 + case 3: + return 1000 + case 4: + return 10000 + case 5: + return 100000 + case 6: + return 1000000 + case 7: + return 10000000 + case 8: + return 100000000 + case 9: + return 1000000000 + case 10: + return 10000000000 + case 11: + return 100000000000 + case 12: + return 1000000000000 + case 13: + return 10000000000000 + case 14: + return 100000000000000 + case 15: + return 1000000000000000 + case 16: + return 10000000000000000 + case 17: + return 100000000000000000 + case 18: + return 1000000000000000000 + default: + return 0 + } +} + +// powInt64 raises a to the bth power. Is not overflow aware. +func powInt64(a, b int64) int64 { + p := int64(1) + for b > 0 { + if b&1 != 0 { + p *= a + } + b >>= 1 + a *= a + } + return p +} + +// negativeScaleInt64 returns the result of dividing base by scale * 10 and the remainder, or +// false if no such division is possible. Dividing by negative scales is undefined. +func divideByScaleInt64(base int64, scale Scale) (result, remainder int64, exact bool) { + if scale == 0 { + return base, 0, true + } + // the max scale representable in base 10 in an int64 is 18 decimal places + if scale >= 18 { + return 0, base, false + } + divisor := pow10Int64(int64(scale)) + return base / divisor, base % divisor, true +} + +// removeInt64Factors divides in a loop; the return values have the property that +// value == result * base ^ scale +func removeInt64Factors(value int64, base int64) (result int64, times int32) { + times = 0 + result = value + negative := result < 0 + if negative { + result = -result + } + switch base { + // allow the compiler to optimize the common cases + case 10: + for result >= 10 && result%10 == 0 { + times++ + result = result / 10 + } + // allow the compiler to optimize the common cases + case 1024: + for result >= 1024 && result%1024 == 0 { + times++ + result = result / 1024 + } + default: + for result >= base && result%base == 0 { + times++ + result = result / base + } + } + if negative { + result = -result + } + return result, times +} + +// removeBigIntFactors divides in a loop; the return values have the property that +// d == result * factor ^ times +// d may be modified in place. +// If d == 0, then the return values will be (0, 0) +func removeBigIntFactors(d, factor *big.Int) (result *big.Int, times int32) { + q := big.NewInt(0) + m := big.NewInt(0) + for d.Cmp(bigZero) != 0 { + q.DivMod(d, factor, m) + if m.Cmp(bigZero) != 0 { + break + } + times++ + d, q = q, d + } + return d, times +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource/quantity.go b/vendor/k8s.io/client-go/1.4/pkg/api/resource/quantity.go new file mode 100644 index 00000000..823dd5ef --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource/quantity.go @@ -0,0 +1,777 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resource + +import ( + "bytes" + "errors" + "fmt" + "math/big" + "regexp" + "strconv" + "strings" + + flag "github.com/spf13/pflag" + + inf "gopkg.in/inf.v0" +) + +// Quantity is a fixed-point representation of a number. +// It provides convenient marshaling/unmarshaling in JSON and YAML, +// in addition to String() and Int64() accessors. +// +// The serialization format is: +// +// ::= +// (Note that may be empty, from the "" case in .) +// ::= 0 | 1 | ... | 9 +// ::= | +// ::= | . | . | . +// ::= "+" | "-" +// ::= | +// ::= | | +// ::= Ki | Mi | Gi | Ti | Pi | Ei +// (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html) +// ::= m | "" | k | M | G | T | P | E +// (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.) +// ::= "e" | "E" +// +// No matter which of the three exponent forms is used, no quantity may represent +// a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal +// places. Numbers larger or more precise will be capped or rounded up. +// (E.g.: 0.1m will rounded up to 1m.) +// This may be extended in the future if we require larger or smaller quantities. +// +// When a Quantity is parsed from a string, it will remember the type of suffix +// it had, and will use the same type again when it is serialized. +// +// Before serializing, Quantity will be put in "canonical form". +// This means that Exponent/suffix will be adjusted up or down (with a +// corresponding increase or decrease in Mantissa) such that: +// a. No precision is lost +// b. No fractional digits will be emitted +// c. The exponent (or suffix) is as large as possible. +// The sign will be omitted unless the number is negative. +// +// Examples: +// 1.5 will be serialized as "1500m" +// 1.5Gi will be serialized as "1536Mi" +// +// NOTE: We reserve the right to amend this canonical format, perhaps to +// allow 1.5 to be canonical. +// TODO: Remove above disclaimer after all bikeshedding about format is over, +// or after March 2015. +// +// Note that the quantity will NEVER be internally represented by a +// floating point number. That is the whole point of this exercise. +// +// Non-canonical values will still parse as long as they are well formed, +// but will be re-emitted in their canonical form. (So always use canonical +// form, or don't diff.) +// +// This format is intended to make it difficult to use these numbers without +// writing some sort of special handling code in the hopes that that will +// cause implementors to also use a fixed point implementation. +// +// +protobuf=true +// +protobuf.embed=string +// +protobuf.options.marshal=false +// +protobuf.options.(gogoproto.goproto_stringer)=false +type Quantity struct { + // i is the quantity in int64 scaled form, if d.Dec == nil + i int64Amount + // d is the quantity in inf.Dec form if d.Dec != nil + d infDecAmount + // s is the generated value of this quantity to avoid recalculation + s string + + // Change Format at will. See the comment for Canonicalize for + // more details. + Format +} + +// CanonicalValue allows a quantity amount to be converted to a string. +type CanonicalValue interface { + // AsCanonicalBytes returns a byte array representing the string representation + // of the value mantissa and an int32 representing its exponent in base-10. Callers may + // pass a byte slice to the method to avoid allocations. + AsCanonicalBytes(out []byte) ([]byte, int32) + // AsCanonicalBase1024Bytes returns a byte array representing the string representation + // of the value mantissa and an int32 representing its exponent in base-1024. Callers + // may pass a byte slice to the method to avoid allocations. + AsCanonicalBase1024Bytes(out []byte) ([]byte, int32) +} + +// Format lists the three possible formattings of a quantity. +type Format string + +const ( + DecimalExponent = Format("DecimalExponent") // e.g., 12e6 + BinarySI = Format("BinarySI") // e.g., 12Mi (12 * 2^20) + DecimalSI = Format("DecimalSI") // e.g., 12M (12 * 10^6) +) + +// MustParse turns the given string into a quantity or panics; for tests +// or others cases where you know the string is valid. +func MustParse(str string) Quantity { + q, err := ParseQuantity(str) + if err != nil { + panic(fmt.Errorf("cannot parse '%v': %v", str, err)) + } + return q +} + +const ( + // splitREString is used to separate a number from its suffix; as such, + // this is overly permissive, but that's OK-- it will be checked later. + splitREString = "^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" +) + +var ( + // splitRE is used to get the various parts of a number. + splitRE = regexp.MustCompile(splitREString) + + // Errors that could happen while parsing a string. + ErrFormatWrong = errors.New("quantities must match the regular expression '" + splitREString + "'") + ErrNumeric = errors.New("unable to parse numeric part of quantity") + ErrSuffix = errors.New("unable to parse quantity's suffix") +) + +// parseQuantityString is a fast scanner for quantity values. +func parseQuantityString(str string) (positive bool, value, num, denom, suffix string, err error) { + positive = true + pos := 0 + end := len(str) + + // handle leading sign + if pos < end { + switch str[0] { + case '-': + positive = false + pos++ + case '+': + pos++ + } + } + + // strip leading zeros +Zeroes: + for i := pos; ; i++ { + if i >= end { + num = "0" + value = num + return + } + switch str[i] { + case '0': + pos++ + default: + break Zeroes + } + } + + // extract the numerator +Num: + for i := pos; ; i++ { + if i >= end { + num = str[pos:end] + value = str[0:end] + return + } + switch str[i] { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + default: + num = str[pos:i] + pos = i + break Num + } + } + + // if we stripped all numerator positions, always return 0 + if len(num) == 0 { + num = "0" + } + + // handle a denominator + if pos < end && str[pos] == '.' { + pos++ + Denom: + for i := pos; ; i++ { + if i >= end { + denom = str[pos:end] + value = str[0:end] + return + } + switch str[i] { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + default: + denom = str[pos:i] + pos = i + break Denom + } + } + // TODO: we currently allow 1.G, but we may not want to in the future. + // if len(denom) == 0 { + // err = ErrFormatWrong + // return + // } + } + value = str[0:pos] + + // grab the elements of the suffix + suffixStart := pos + for i := pos; ; i++ { + if i >= end { + suffix = str[suffixStart:end] + return + } + if !strings.ContainsAny(str[i:i+1], "eEinumkKMGTP") { + pos = i + break + } + } + if pos < end { + switch str[pos] { + case '-', '+': + pos++ + } + } +Suffix: + for i := pos; ; i++ { + if i >= end { + suffix = str[suffixStart:end] + return + } + switch str[i] { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': + default: + break Suffix + } + } + // we encountered a non decimal in the Suffix loop, but the last character + // was not a valid exponent + err = ErrFormatWrong + return +} + +// ParseQuantity turns str into a Quantity, or returns an error. +func ParseQuantity(str string) (Quantity, error) { + if len(str) == 0 { + return Quantity{}, ErrFormatWrong + } + if str == "0" { + return Quantity{Format: DecimalSI, s: str}, nil + } + + positive, value, num, denom, suf, err := parseQuantityString(str) + if err != nil { + return Quantity{}, err + } + + base, exponent, format, ok := quantitySuffixer.interpret(suffix(suf)) + if !ok { + return Quantity{}, ErrSuffix + } + + precision := int32(0) + scale := int32(0) + mantissa := int64(1) + switch format { + case DecimalExponent, DecimalSI: + scale = exponent + precision = maxInt64Factors - int32(len(num)+len(denom)) + case BinarySI: + scale = 0 + switch { + case exponent >= 0 && len(denom) == 0: + // only handle positive binary numbers with the fast path + mantissa = int64(int64(mantissa) << uint64(exponent)) + // 1Mi (2^20) has ~6 digits of decimal precision, so exponent*3/10 -1 is roughly the precision + precision = 15 - int32(len(num)) - int32(float32(exponent)*3/10) - 1 + default: + precision = -1 + } + } + + if precision >= 0 { + // if we have a denominator, shift the entire value to the left by the number of places in the + // denominator + scale -= int32(len(denom)) + if scale >= int32(Nano) { + shifted := num + denom + + var value int64 + value, err := strconv.ParseInt(shifted, 10, 64) + if err != nil { + return Quantity{}, ErrNumeric + } + if result, ok := int64Multiply(value, int64(mantissa)); ok { + if !positive { + result = -result + } + // if the number is in canonical form, reuse the string + switch format { + case BinarySI: + if exponent%10 == 0 && (value&0x07 != 0) { + return Quantity{i: int64Amount{value: result, scale: Scale(scale)}, Format: format, s: str}, nil + } + default: + if scale%3 == 0 && !strings.HasSuffix(shifted, "000") && shifted[0] != '0' { + return Quantity{i: int64Amount{value: result, scale: Scale(scale)}, Format: format, s: str}, nil + } + } + return Quantity{i: int64Amount{value: result, scale: Scale(scale)}, Format: format}, nil + } + } + } + + amount := new(inf.Dec) + if _, ok := amount.SetString(value); !ok { + return Quantity{}, ErrNumeric + } + + // So that no one but us has to think about suffixes, remove it. + if base == 10 { + amount.SetScale(amount.Scale() + Scale(exponent).infScale()) + } else if base == 2 { + // numericSuffix = 2 ** exponent + numericSuffix := big.NewInt(1).Lsh(bigOne, uint(exponent)) + ub := amount.UnscaledBig() + amount.SetUnscaledBig(ub.Mul(ub, numericSuffix)) + } + + // Cap at min/max bounds. + sign := amount.Sign() + if sign == -1 { + amount.Neg(amount) + } + + // This rounds non-zero values up to the minimum representable value, under the theory that + // if you want some resources, you should get some resources, even if you asked for way too small + // of an amount. Arguably, this should be inf.RoundHalfUp (normal rounding), but that would have + // the side effect of rounding values < .5n to zero. + if v, ok := amount.Unscaled(); v != int64(0) || !ok { + amount.Round(amount, Nano.infScale(), inf.RoundUp) + } + + // The max is just a simple cap. + // TODO: this prevents accumulating quantities greater than int64, for instance quota across a cluster + if format == BinarySI && amount.Cmp(maxAllowed.Dec) > 0 { + amount.Set(maxAllowed.Dec) + } + + if format == BinarySI && amount.Cmp(decOne) < 0 && amount.Cmp(decZero) > 0 { + // This avoids rounding and hopefully confusion, too. + format = DecimalSI + } + if sign == -1 { + amount.Neg(amount) + } + + return Quantity{d: infDecAmount{amount}, Format: format}, nil +} + +// DeepCopy returns a deep-copy of the Quantity value. Note that the method +// receiver is a value, so we can mutate it in-place and return it. +func (q Quantity) DeepCopy() Quantity { + if q.d.Dec != nil { + tmp := &inf.Dec{} + q.d.Dec = tmp.Set(q.d.Dec) + } + return q +} + +// CanonicalizeBytes returns the canonical form of q and its suffix (see comment on Quantity). +// +// Note about BinarySI: +// * If q.Format is set to BinarySI and q.Amount represents a non-zero value between +// -1 and +1, it will be emitted as if q.Format were DecimalSI. +// * Otherwise, if q.Format is set to BinarySI, frational parts of q.Amount will be +// rounded up. (1.1i becomes 2i.) +func (q *Quantity) CanonicalizeBytes(out []byte) (result, suffix []byte) { + if q.IsZero() { + return zeroBytes, nil + } + + var rounded CanonicalValue + format := q.Format + switch format { + case DecimalExponent, DecimalSI: + case BinarySI: + if q.CmpInt64(-1024) > 0 && q.CmpInt64(1024) < 0 { + // This avoids rounding and hopefully confusion, too. + format = DecimalSI + } else { + var exact bool + if rounded, exact = q.AsScale(0); !exact { + // Don't lose precision-- show as DecimalSI + format = DecimalSI + } + } + default: + format = DecimalExponent + } + + // TODO: If BinarySI formatting is requested but would cause rounding, upgrade to + // one of the other formats. + switch format { + case DecimalExponent, DecimalSI: + number, exponent := q.AsCanonicalBytes(out) + suffix, _ := quantitySuffixer.constructBytes(10, exponent, format) + return number, suffix + default: + // format must be BinarySI + number, exponent := rounded.AsCanonicalBase1024Bytes(out) + suffix, _ := quantitySuffixer.constructBytes(2, exponent*10, format) + return number, suffix + } +} + +// AsInt64 returns a representation of the current value as an int64 if a fast conversion +// is possible. If false is returned, callers must use the inf.Dec form of this quantity. +func (q *Quantity) AsInt64() (int64, bool) { + if q.d.Dec != nil { + return 0, false + } + return q.i.AsInt64() +} + +// ToDec promotes the quantity in place to use an inf.Dec representation and returns itself. +func (q *Quantity) ToDec() *Quantity { + if q.d.Dec == nil { + q.d.Dec = q.i.AsDec() + q.i = int64Amount{} + } + return q +} + +// AsDec returns the quantity as represented by a scaled inf.Dec. +func (q *Quantity) AsDec() *inf.Dec { + if q.d.Dec != nil { + return q.d.Dec + } + q.d.Dec = q.i.AsDec() + q.i = int64Amount{} + return q.d.Dec +} + +// AsCanonicalBytes returns the canonical byte representation of this quantity as a mantissa +// and base 10 exponent. The out byte slice may be passed to the method to avoid an extra +// allocation. +func (q *Quantity) AsCanonicalBytes(out []byte) (result []byte, exponent int32) { + if q.d.Dec != nil { + return q.d.AsCanonicalBytes(out) + } + return q.i.AsCanonicalBytes(out) +} + +// IsZero returns true if the quantity is equal to zero. +func (q *Quantity) IsZero() bool { + if q.d.Dec != nil { + return q.d.Dec.Sign() == 0 + } + return q.i.value == 0 +} + +// Sign returns 0 if the quantity is zero, -1 if the quantity is less than zero, or 1 if the +// quantity is greater than zero. +func (q *Quantity) Sign() int { + if q.d.Dec != nil { + return q.d.Dec.Sign() + } + return q.i.Sign() +} + +// AsScaled returns the current value, rounded up to the provided scale, and returns +// false if the scale resulted in a loss of precision. +func (q *Quantity) AsScale(scale Scale) (CanonicalValue, bool) { + if q.d.Dec != nil { + return q.d.AsScale(scale) + } + return q.i.AsScale(scale) +} + +// RoundUp updates the quantity to the provided scale, ensuring that the value is at +// least 1. False is returned if the rounding operation resulted in a loss of precision. +// Negative numbers are rounded away from zero (-9 scale 1 rounds to -10). +func (q *Quantity) RoundUp(scale Scale) bool { + if q.d.Dec != nil { + q.s = "" + d, exact := q.d.AsScale(scale) + q.d = d + return exact + } + // avoid clearing the string value if we have already calculated it + if q.i.scale >= scale { + return true + } + q.s = "" + i, exact := q.i.AsScale(scale) + q.i = i + return exact +} + +// Add adds the provide y quantity to the current value. If the current value is zero, +// the format of the quantity will be updated to the format of y. +func (q *Quantity) Add(y Quantity) { + q.s = "" + if q.d.Dec == nil && y.d.Dec == nil { + if q.i.value == 0 { + q.Format = y.Format + } + if q.i.Add(y.i) { + return + } + } else if q.IsZero() { + q.Format = y.Format + } + q.ToDec().d.Dec.Add(q.d.Dec, y.AsDec()) +} + +// Sub subtracts the provided quantity from the current value in place. If the current +// value is zero, the format of the quantity will be updated to the format of y. +func (q *Quantity) Sub(y Quantity) { + q.s = "" + if q.IsZero() { + q.Format = y.Format + } + if q.d.Dec == nil && y.d.Dec == nil && q.i.Sub(y.i) { + return + } + q.ToDec().d.Dec.Sub(q.d.Dec, y.AsDec()) +} + +// Cmp returns 0 if the quantity is equal to y, -1 if the quantity is less than y, or 1 if the +// quantity is greater than y. +func (q *Quantity) Cmp(y Quantity) int { + if q.d.Dec == nil && y.d.Dec == nil { + return q.i.Cmp(y.i) + } + return q.AsDec().Cmp(y.AsDec()) +} + +// CmpInt64 returns 0 if the quantity is equal to y, -1 if the quantity is less than y, or 1 if the +// quantity is greater than y. +func (q *Quantity) CmpInt64(y int64) int { + if q.d.Dec != nil { + return q.d.Dec.Cmp(inf.NewDec(y, inf.Scale(0))) + } + return q.i.Cmp(int64Amount{value: y}) +} + +// Neg sets quantity to be the negative value of itself. +func (q *Quantity) Neg() { + q.s = "" + if q.d.Dec == nil { + q.i.value = -q.i.value + return + } + q.d.Dec.Neg(q.d.Dec) +} + +// int64QuantityExpectedBytes is the expected width in bytes of the canonical string representation +// of most Quantity values. +const int64QuantityExpectedBytes = 18 + +// String formats the Quantity as a string, caching the result if not calculated. +// String is an expensive operation and caching this result significantly reduces the cost of +// normal parse / marshal operations on Quantity. +func (q *Quantity) String() string { + if len(q.s) == 0 { + result := make([]byte, 0, int64QuantityExpectedBytes) + number, suffix := q.CanonicalizeBytes(result) + number = append(number, suffix...) + q.s = string(number) + } + return q.s +} + +// MarshalJSON implements the json.Marshaller interface. +func (q Quantity) MarshalJSON() ([]byte, error) { + if len(q.s) > 0 { + out := make([]byte, len(q.s)+2) + out[0], out[len(out)-1] = '"', '"' + copy(out[1:], q.s) + return out, nil + } + result := make([]byte, int64QuantityExpectedBytes, int64QuantityExpectedBytes) + result[0] = '"' + number, suffix := q.CanonicalizeBytes(result[1:1]) + // if the same slice was returned to us that we passed in, avoid another allocation by copying number into + // the source slice and returning that + if len(number) > 0 && &number[0] == &result[1] && (len(number)+len(suffix)+2) <= int64QuantityExpectedBytes { + number = append(number, suffix...) + number = append(number, '"') + return result[:1+len(number)], nil + } + // if CanonicalizeBytes needed more space than our slice provided, we may need to allocate again so use + // append + result = result[:1] + result = append(result, number...) + result = append(result, suffix...) + result = append(result, '"') + return result, nil +} + +// UnmarshalJSON implements the json.Unmarshaller interface. +// TODO: Remove support for leading/trailing whitespace +func (q *Quantity) UnmarshalJSON(value []byte) error { + l := len(value) + if l == 4 && bytes.Equal(value, []byte("null")) { + q.d.Dec = nil + q.i = int64Amount{} + return nil + } + if l >= 2 && value[0] == '"' && value[l-1] == '"' { + value = value[1 : l-1] + } + + parsed, err := ParseQuantity(strings.TrimSpace(string(value))) + if err != nil { + return err + } + + // This copy is safe because parsed will not be referred to again. + *q = parsed + return nil +} + +// NewQuantity returns a new Quantity representing the given +// value in the given format. +func NewQuantity(value int64, format Format) *Quantity { + return &Quantity{ + i: int64Amount{value: value}, + Format: format, + } +} + +// NewMilliQuantity returns a new Quantity representing the given +// value * 1/1000 in the given format. Note that BinarySI formatting +// will round fractional values, and will be changed to DecimalSI for +// values x where (-1 < x < 1) && (x != 0). +func NewMilliQuantity(value int64, format Format) *Quantity { + return &Quantity{ + i: int64Amount{value: value, scale: -3}, + Format: format, + } +} + +// NewScaledQuantity returns a new Quantity representing the given +// value * 10^scale in DecimalSI format. +func NewScaledQuantity(value int64, scale Scale) *Quantity { + return &Quantity{ + i: int64Amount{value: value, scale: scale}, + Format: DecimalSI, + } +} + +// Value returns the value of q; any fractional part will be lost. +func (q *Quantity) Value() int64 { + return q.ScaledValue(0) +} + +// MilliValue returns the value of ceil(q * 1000); this could overflow an int64; +// if that's a concern, call Value() first to verify the number is small enough. +func (q *Quantity) MilliValue() int64 { + return q.ScaledValue(Milli) +} + +// ScaledValue returns the value of ceil(q * 10^scale); this could overflow an int64. +// To detect overflow, call Value() first and verify the expected magnitude. +func (q *Quantity) ScaledValue(scale Scale) int64 { + if q.d.Dec == nil { + i, _ := q.i.AsScaledInt64(scale) + return i + } + dec := q.d.Dec + return scaledValue(dec.UnscaledBig(), int(dec.Scale()), int(scale.infScale())) +} + +// Set sets q's value to be value. +func (q *Quantity) Set(value int64) { + q.SetScaled(value, 0) +} + +// SetMilli sets q's value to be value * 1/1000. +func (q *Quantity) SetMilli(value int64) { + q.SetScaled(value, Milli) +} + +// SetScaled sets q's value to be value * 10^scale +func (q *Quantity) SetScaled(value int64, scale Scale) { + q.s = "" + q.d.Dec = nil + q.i = int64Amount{value: value, scale: scale} +} + +// Copy is a convenience function that makes a deep copy for you. Non-deep +// copies of quantities share pointers and you will regret that. +func (q *Quantity) Copy() *Quantity { + if q.d.Dec == nil { + return &Quantity{ + s: q.s, + i: q.i, + Format: q.Format, + } + } + tmp := &inf.Dec{} + return &Quantity{ + s: q.s, + d: infDecAmount{tmp.Set(q.d.Dec)}, + Format: q.Format, + } +} + +// qFlag is a helper type for the Flag function +type qFlag struct { + dest *Quantity +} + +// Sets the value of the internal Quantity. (used by flag & pflag) +func (qf qFlag) Set(val string) error { + q, err := ParseQuantity(val) + if err != nil { + return err + } + // This copy is OK because q will not be referenced again. + *qf.dest = q + return nil +} + +// Converts the value of the internal Quantity to a string. (used by flag & pflag) +func (qf qFlag) String() string { + return qf.dest.String() +} + +// States the type of flag this is (Quantity). (used by pflag) +func (qf qFlag) Type() string { + return "quantity" +} + +// QuantityFlag is a helper that makes a quantity flag (using standard flag package). +// Will panic if defaultValue is not a valid quantity. +func QuantityFlag(flagName, defaultValue, description string) *Quantity { + q := MustParse(defaultValue) + flag.Var(NewQuantityFlagValue(&q), flagName, description) + return &q +} + +// NewQuantityFlagValue returns an object that can be used to back a flag, +// pointing at the given Quantity variable. +func NewQuantityFlagValue(q *Quantity) flag.Value { + return qFlag{q} +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource/quantity_proto.go b/vendor/k8s.io/client-go/1.4/pkg/api/resource/quantity_proto.go new file mode 100644 index 00000000..74dfb4e4 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource/quantity_proto.go @@ -0,0 +1,284 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resource + +import ( + "fmt" + "io" + + "github.com/gogo/protobuf/proto" +) + +var _ proto.Sizer = &Quantity{} + +func (m *Quantity) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +// MarshalTo is a customized version of the generated Protobuf unmarshaler for a struct +// with a single string field. +func (m *Quantity) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + + data[i] = 0xa + i++ + // BEGIN CUSTOM MARSHAL + out := m.String() + i = encodeVarintGenerated(data, i, uint64(len(out))) + i += copy(data[i:], out) + // END CUSTOM MARSHAL + + return i, nil +} + +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} + +func (m *Quantity) Size() (n int) { + var l int + _ = l + + // BEGIN CUSTOM SIZE + l = len(m.String()) + // END CUSTOM SIZE + + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} + +// Unmarshal is a customized version of the generated Protobuf unmarshaler for a struct +// with a single string field. +func (m *Quantity) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Quantity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Quantity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field String_", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + + // BEGIN CUSTOM DECODE + p, err := ParseQuantity(s) + if err != nil { + return err + } + *m = p + // END CUSTOM DECODE + + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} + +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource/scale_int.go b/vendor/k8s.io/client-go/1.4/pkg/api/resource/scale_int.go new file mode 100644 index 00000000..55e177b0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource/scale_int.go @@ -0,0 +1,95 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resource + +import ( + "math" + "math/big" + "sync" +) + +var ( + // A sync pool to reduce allocation. + intPool sync.Pool + maxInt64 = big.NewInt(math.MaxInt64) +) + +func init() { + intPool.New = func() interface{} { + return &big.Int{} + } +} + +// scaledValue scales given unscaled value from scale to new Scale and returns +// an int64. It ALWAYS rounds up the result when scale down. The final result might +// overflow. +// +// scale, newScale represents the scale of the unscaled decimal. +// The mathematical value of the decimal is unscaled * 10**(-scale). +func scaledValue(unscaled *big.Int, scale, newScale int) int64 { + dif := scale - newScale + if dif == 0 { + return unscaled.Int64() + } + + // Handle scale up + // This is an easy case, we do not need to care about rounding and overflow. + // If any intermediate operation causes overflow, the result will overflow. + if dif < 0 { + return unscaled.Int64() * int64(math.Pow10(-dif)) + } + + // Handle scale down + // We have to be careful about the intermediate operations. + + // fast path when unscaled < max.Int64 and exp(10,dif) < max.Int64 + const log10MaxInt64 = 19 + if unscaled.Cmp(maxInt64) < 0 && dif < log10MaxInt64 { + divide := int64(math.Pow10(dif)) + result := unscaled.Int64() / divide + mod := unscaled.Int64() % divide + if mod != 0 { + return result + 1 + } + return result + } + + // We should only convert back to int64 when getting the result. + divisor := intPool.Get().(*big.Int) + exp := intPool.Get().(*big.Int) + result := intPool.Get().(*big.Int) + defer func() { + intPool.Put(divisor) + intPool.Put(exp) + intPool.Put(result) + }() + + // divisor = 10^(dif) + // TODO: create loop up table if exp costs too much. + divisor.Exp(bigTen, exp.SetInt64(int64(dif)), nil) + // reuse exp + remainder := exp + + // result = unscaled / divisor + // remainder = unscaled % divisor + result.DivMod(unscaled, divisor, remainder) + if remainder.Sign() != 0 { + return result.Int64() + 1 + } + + return result.Int64() +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource/suffix.go b/vendor/k8s.io/client-go/1.4/pkg/api/resource/suffix.go new file mode 100644 index 00000000..5ed7abe6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource/suffix.go @@ -0,0 +1,198 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resource + +import ( + "strconv" +) + +type suffix string + +// suffixer can interpret and construct suffixes. +type suffixer interface { + interpret(suffix) (base, exponent int32, fmt Format, ok bool) + construct(base, exponent int32, fmt Format) (s suffix, ok bool) + constructBytes(base, exponent int32, fmt Format) (s []byte, ok bool) +} + +// quantitySuffixer handles suffixes for all three formats that quantity +// can handle. +var quantitySuffixer = newSuffixer() + +type bePair struct { + base, exponent int32 +} + +type listSuffixer struct { + suffixToBE map[suffix]bePair + beToSuffix map[bePair]suffix + beToSuffixBytes map[bePair][]byte +} + +func (ls *listSuffixer) addSuffix(s suffix, pair bePair) { + if ls.suffixToBE == nil { + ls.suffixToBE = map[suffix]bePair{} + } + if ls.beToSuffix == nil { + ls.beToSuffix = map[bePair]suffix{} + } + if ls.beToSuffixBytes == nil { + ls.beToSuffixBytes = map[bePair][]byte{} + } + ls.suffixToBE[s] = pair + ls.beToSuffix[pair] = s + ls.beToSuffixBytes[pair] = []byte(s) +} + +func (ls *listSuffixer) lookup(s suffix) (base, exponent int32, ok bool) { + pair, ok := ls.suffixToBE[s] + if !ok { + return 0, 0, false + } + return pair.base, pair.exponent, true +} + +func (ls *listSuffixer) construct(base, exponent int32) (s suffix, ok bool) { + s, ok = ls.beToSuffix[bePair{base, exponent}] + return +} + +func (ls *listSuffixer) constructBytes(base, exponent int32) (s []byte, ok bool) { + s, ok = ls.beToSuffixBytes[bePair{base, exponent}] + return +} + +type suffixHandler struct { + decSuffixes listSuffixer + binSuffixes listSuffixer +} + +type fastLookup struct { + *suffixHandler +} + +func (l fastLookup) interpret(s suffix) (base, exponent int32, format Format, ok bool) { + switch s { + case "": + return 10, 0, DecimalSI, true + case "n": + return 10, -9, DecimalSI, true + case "u": + return 10, -6, DecimalSI, true + case "m": + return 10, -3, DecimalSI, true + case "k": + return 10, 3, DecimalSI, true + case "M": + return 10, 6, DecimalSI, true + case "G": + return 10, 9, DecimalSI, true + } + return l.suffixHandler.interpret(s) +} + +func newSuffixer() suffixer { + sh := &suffixHandler{} + + // IMPORTANT: if you change this section you must change fastLookup + + sh.binSuffixes.addSuffix("Ki", bePair{2, 10}) + sh.binSuffixes.addSuffix("Mi", bePair{2, 20}) + sh.binSuffixes.addSuffix("Gi", bePair{2, 30}) + sh.binSuffixes.addSuffix("Ti", bePair{2, 40}) + sh.binSuffixes.addSuffix("Pi", bePair{2, 50}) + sh.binSuffixes.addSuffix("Ei", bePair{2, 60}) + // Don't emit an error when trying to produce + // a suffix for 2^0. + sh.decSuffixes.addSuffix("", bePair{2, 0}) + + sh.decSuffixes.addSuffix("n", bePair{10, -9}) + sh.decSuffixes.addSuffix("u", bePair{10, -6}) + sh.decSuffixes.addSuffix("m", bePair{10, -3}) + sh.decSuffixes.addSuffix("", bePair{10, 0}) + sh.decSuffixes.addSuffix("k", bePair{10, 3}) + sh.decSuffixes.addSuffix("M", bePair{10, 6}) + sh.decSuffixes.addSuffix("G", bePair{10, 9}) + sh.decSuffixes.addSuffix("T", bePair{10, 12}) + sh.decSuffixes.addSuffix("P", bePair{10, 15}) + sh.decSuffixes.addSuffix("E", bePair{10, 18}) + + return fastLookup{sh} +} + +func (sh *suffixHandler) construct(base, exponent int32, fmt Format) (s suffix, ok bool) { + switch fmt { + case DecimalSI: + return sh.decSuffixes.construct(base, exponent) + case BinarySI: + return sh.binSuffixes.construct(base, exponent) + case DecimalExponent: + if base != 10 { + return "", false + } + if exponent == 0 { + return "", true + } + return suffix("e" + strconv.FormatInt(int64(exponent), 10)), true + } + return "", false +} + +func (sh *suffixHandler) constructBytes(base, exponent int32, format Format) (s []byte, ok bool) { + switch format { + case DecimalSI: + return sh.decSuffixes.constructBytes(base, exponent) + case BinarySI: + return sh.binSuffixes.constructBytes(base, exponent) + case DecimalExponent: + if base != 10 { + return nil, false + } + if exponent == 0 { + return nil, true + } + result := make([]byte, 8, 8) + result[0] = 'e' + number := strconv.AppendInt(result[1:1], int64(exponent), 10) + if &result[1] == &number[0] { + return result[:1+len(number)], true + } + result = append(result[:1], number...) + return result, true + } + return nil, false +} + +func (sh *suffixHandler) interpret(suffix suffix) (base, exponent int32, fmt Format, ok bool) { + // Try lookup tables first + if b, e, ok := sh.decSuffixes.lookup(suffix); ok { + return b, e, DecimalSI, true + } + if b, e, ok := sh.binSuffixes.lookup(suffix); ok { + return b, e, BinarySI, true + } + + if len(suffix) > 1 && (suffix[0] == 'E' || suffix[0] == 'e') { + parsed, err := strconv.ParseInt(string(suffix[1:]), 10, 64) + if err != nil { + return 0, 0, DecimalExponent, false + } + return 10, int32(parsed), DecimalExponent, true + } + + return 0, 0, DecimalExponent, false +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/resource_helpers.go b/vendor/k8s.io/client-go/1.4/pkg/api/resource_helpers.go new file mode 100644 index 00000000..c334c805 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/resource_helpers.go @@ -0,0 +1,209 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/client-go/1.4/pkg/api/resource" + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// Returns string version of ResourceName. +func (self ResourceName) String() string { + return string(self) +} + +// Returns the CPU limit if specified. +func (self *ResourceList) Cpu() *resource.Quantity { + if val, ok := (*self)[ResourceCPU]; ok { + return &val + } + return &resource.Quantity{Format: resource.DecimalSI} +} + +// Returns the Memory limit if specified. +func (self *ResourceList) Memory() *resource.Quantity { + if val, ok := (*self)[ResourceMemory]; ok { + return &val + } + return &resource.Quantity{Format: resource.BinarySI} +} + +func (self *ResourceList) Pods() *resource.Quantity { + if val, ok := (*self)[ResourcePods]; ok { + return &val + } + return &resource.Quantity{} +} + +func (self *ResourceList) NvidiaGPU() *resource.Quantity { + if val, ok := (*self)[ResourceNvidiaGPU]; ok { + return &val + } + return &resource.Quantity{} +} + +func GetContainerStatus(statuses []ContainerStatus, name string) (ContainerStatus, bool) { + for i := range statuses { + if statuses[i].Name == name { + return statuses[i], true + } + } + return ContainerStatus{}, false +} + +func GetExistingContainerStatus(statuses []ContainerStatus, name string) ContainerStatus { + for i := range statuses { + if statuses[i].Name == name { + return statuses[i] + } + } + return ContainerStatus{} +} + +// IsPodReady returns true if a pod is ready; false otherwise. +func IsPodReady(pod *Pod) bool { + return IsPodReadyConditionTrue(pod.Status) +} + +// IsPodReady retruns true if a pod is ready; false otherwise. +func IsPodReadyConditionTrue(status PodStatus) bool { + condition := GetPodReadyCondition(status) + return condition != nil && condition.Status == ConditionTrue +} + +// Extracts the pod ready condition from the given status and returns that. +// Returns nil if the condition is not present. +func GetPodReadyCondition(status PodStatus) *PodCondition { + _, condition := GetPodCondition(&status, PodReady) + return condition +} + +// GetPodCondition extracts the provided condition from the given status and returns that. +// Returns nil and -1 if the condition is not present, and the index of the located condition. +func GetPodCondition(status *PodStatus, conditionType PodConditionType) (int, *PodCondition) { + if status == nil { + return -1, nil + } + for i := range status.Conditions { + if status.Conditions[i].Type == conditionType { + return i, &status.Conditions[i] + } + } + return -1, nil +} + +// GetNodeCondition extracts the provided condition from the given status and returns that. +// Returns nil and -1 if the condition is not present, and the index of the located condition. +func GetNodeCondition(status *NodeStatus, conditionType NodeConditionType) (int, *NodeCondition) { + if status == nil { + return -1, nil + } + for i := range status.Conditions { + if status.Conditions[i].Type == conditionType { + return i, &status.Conditions[i] + } + } + return -1, nil +} + +// Updates existing pod condition or creates a new one. Sets LastTransitionTime to now if the +// status has changed. +// Returns true if pod condition has changed or has been added. +func UpdatePodCondition(status *PodStatus, condition *PodCondition) bool { + condition.LastTransitionTime = unversioned.Now() + // Try to find this pod condition. + conditionIndex, oldCondition := GetPodCondition(status, condition.Type) + + if oldCondition == nil { + // We are adding new pod condition. + status.Conditions = append(status.Conditions, *condition) + return true + } else { + // We are updating an existing condition, so we need to check if it has changed. + if condition.Status == oldCondition.Status { + condition.LastTransitionTime = oldCondition.LastTransitionTime + } + + isEqual := condition.Status == oldCondition.Status && + condition.Reason == oldCondition.Reason && + condition.Message == oldCondition.Message && + condition.LastProbeTime.Equal(oldCondition.LastProbeTime) && + condition.LastTransitionTime.Equal(oldCondition.LastTransitionTime) + + status.Conditions[conditionIndex] = *condition + // Return true if one of the fields have changed. + return !isEqual + } +} + +// IsNodeReady returns true if a node is ready; false otherwise. +func IsNodeReady(node *Node) bool { + for _, c := range node.Status.Conditions { + if c.Type == NodeReady { + return c.Status == ConditionTrue + } + } + return false +} + +// PodRequestsAndLimits returns a dictionary of all defined resources summed up for all +// containers of the pod. +func PodRequestsAndLimits(pod *Pod) (reqs map[ResourceName]resource.Quantity, limits map[ResourceName]resource.Quantity, err error) { + reqs, limits = map[ResourceName]resource.Quantity{}, map[ResourceName]resource.Quantity{} + for _, container := range pod.Spec.Containers { + for name, quantity := range container.Resources.Requests { + if value, ok := reqs[name]; !ok { + reqs[name] = *quantity.Copy() + } else { + value.Add(quantity) + reqs[name] = value + } + } + for name, quantity := range container.Resources.Limits { + if value, ok := limits[name]; !ok { + limits[name] = *quantity.Copy() + } else { + value.Add(quantity) + limits[name] = value + } + } + } + // init containers define the minimum of any resource + for _, container := range pod.Spec.InitContainers { + for name, quantity := range container.Resources.Requests { + value, ok := reqs[name] + if !ok { + reqs[name] = *quantity.Copy() + continue + } + if quantity.Cmp(value) > 0 { + reqs[name] = *quantity.Copy() + } + } + for name, quantity := range container.Resources.Limits { + value, ok := limits[name] + if !ok { + limits[name] = *quantity.Copy() + continue + } + if quantity.Cmp(value) > 0 { + limits[name] = *quantity.Copy() + } + } + } + return +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/service/annotations.go b/vendor/k8s.io/client-go/1.4/pkg/api/service/annotations.go new file mode 100644 index 00000000..8cf38247 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/service/annotations.go @@ -0,0 +1,89 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package service + +import ( + "strconv" + + "github.com/golang/glog" + "k8s.io/client-go/1.4/pkg/api" +) + +const ( + // AnnotationLoadBalancerSourceRangesKey is the key of the annotation on a service to set allowed ingress ranges on their LoadBalancers + // + // It should be a comma-separated list of CIDRs, e.g. `0.0.0.0/0` to + // allow full access (the default) or `18.0.0.0/8,56.0.0.0/8` to allow + // access only from the CIDRs currently allocated to MIT & the USPS. + // + // Not all cloud providers support this annotation, though AWS & GCE do. + AnnotationLoadBalancerSourceRangesKey = "service.beta.kubernetes.io/load-balancer-source-ranges" + + // AnnotationExternalTraffic An annotation that denotes if this Service desires to route external traffic to local + // endpoints only. This preserves Source IP and avoids a second hop. + AnnotationExternalTraffic = "service.alpha.kubernetes.io/external-traffic" + // AnnotationValueExternalTrafficLocal Value of annotation to specify local endpoints behaviour + AnnotationValueExternalTrafficLocal = "OnlyLocal" + // AnnotationValueExternalTrafficGlobal Value of annotation to specify global (legacy) behaviour + AnnotationValueExternalTrafficGlobal = "Global" + // AnnotationHealthCheckNodePort Annotation specifying the healthcheck nodePort for the service + // If not specified, annotation is created by the service api backend with the allocated nodePort + // Will use user-specified nodePort value if specified by the client + AnnotationHealthCheckNodePort = "service.alpha.kubernetes.io/healthcheck-nodeport" +) + +// NeedsHealthCheck Check service for health check annotations +func NeedsHealthCheck(service *api.Service) bool { + if l, ok := service.Annotations[AnnotationExternalTraffic]; ok { + if l == AnnotationValueExternalTrafficLocal { + return true + } else if l == AnnotationValueExternalTrafficGlobal { + return false + } else { + glog.Errorf("Invalid value for annotation %v", AnnotationExternalTraffic) + return false + } + } + return false +} + +// GetServiceHealthCheckNodePort Return health check node port annotation for service, if one exists +func GetServiceHealthCheckNodePort(service *api.Service) int32 { + if NeedsHealthCheck(service) { + if l, ok := service.Annotations[AnnotationHealthCheckNodePort]; ok { + p, err := strconv.Atoi(l) + if err != nil { + glog.Errorf("Failed to parse annotation %v: %v", AnnotationHealthCheckNodePort, err) + return 0 + } + return int32(p) + } + } + return 0 +} + +// GetServiceHealthCheckPathPort Return the path and nodePort programmed into the Cloud LB Health Check +func GetServiceHealthCheckPathPort(service *api.Service) (string, int32) { + if !NeedsHealthCheck(service) { + return "", 0 + } + port := GetServiceHealthCheckNodePort(service) + if port == 0 { + return "", 0 + } + return "/healthz", port +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/service/util.go b/vendor/k8s.io/client-go/1.4/pkg/api/service/util.go new file mode 100644 index 00000000..ef4d6fa0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/service/util.go @@ -0,0 +1,68 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package service + +import ( + "fmt" + "strings" + + "k8s.io/client-go/1.4/pkg/api" + netsets "k8s.io/client-go/1.4/pkg/util/net/sets" +) + +const ( + defaultLoadBalancerSourceRanges = "0.0.0.0/0" +) + +// IsAllowAll checks whether the netsets.IPNet allows traffic from 0.0.0.0/0 +func IsAllowAll(ipnets netsets.IPNet) bool { + for _, s := range ipnets.StringSlice() { + if s == "0.0.0.0/0" { + return true + } + } + return false +} + +// GetLoadBalancerSourceRanges first try to parse and verify LoadBalancerSourceRanges field from a service. +// If the field is not specified, turn to parse and verify the AnnotationLoadBalancerSourceRangesKey annotation from a service, +// extracting the source ranges to allow, and if not present returns a default (allow-all) value. +func GetLoadBalancerSourceRanges(service *api.Service) (netsets.IPNet, error) { + var ipnets netsets.IPNet + var err error + // if SourceRange field is specified, ignore sourceRange annotation + if len(service.Spec.LoadBalancerSourceRanges) > 0 { + specs := service.Spec.LoadBalancerSourceRanges + ipnets, err = netsets.ParseIPNets(specs...) + + if err != nil { + return nil, fmt.Errorf("service.Spec.LoadBalancerSourceRanges: %v is not valid. Expecting a list of IP ranges. For example, 10.0.0.0/24. Error msg: %v", specs, err) + } + } else { + val := service.Annotations[AnnotationLoadBalancerSourceRangesKey] + val = strings.TrimSpace(val) + if val == "" { + val = defaultLoadBalancerSourceRanges + } + specs := strings.Split(val, ",") + ipnets, err = netsets.ParseIPNets(specs...) + if err != nil { + return nil, fmt.Errorf("%s: %s is not valid. Expecting a comma-separated list of source IP ranges. For example, 10.0.0.0/24,192.168.2.0/24", AnnotationLoadBalancerSourceRangesKey, val) + } + } + return ipnets, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/types.generated.go b/vendor/k8s.io/client-go/1.4/pkg/api/types.generated.go new file mode 100644 index 00000000..15601840 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/types.generated.go @@ -0,0 +1,62430 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// ************************************************************ +// DO NOT EDIT. +// THIS FILE IS AUTO-GENERATED BY codecgen. +// ************************************************************ + +package api + +import ( + "errors" + "fmt" + codec1978 "github.com/ugorji/go/codec" + pkg3_resource "k8s.io/client-go/1.4/pkg/api/resource" + pkg2_unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + pkg6_fields "k8s.io/client-go/1.4/pkg/fields" + pkg5_labels "k8s.io/client-go/1.4/pkg/labels" + pkg7_runtime "k8s.io/client-go/1.4/pkg/runtime" + pkg1_types "k8s.io/client-go/1.4/pkg/types" + pkg4_intstr "k8s.io/client-go/1.4/pkg/util/intstr" + "reflect" + "runtime" + time "time" +) + +const ( + // ----- content types ---- + codecSelferC_UTF81234 = 1 + codecSelferC_RAW1234 = 0 + // ----- value types used ---- + codecSelferValueTypeArray1234 = 10 + codecSelferValueTypeMap1234 = 9 + // ----- containerStateValues ---- + codecSelfer_containerMapKey1234 = 2 + codecSelfer_containerMapValue1234 = 3 + codecSelfer_containerMapEnd1234 = 4 + codecSelfer_containerArrayElem1234 = 6 + codecSelfer_containerArrayEnd1234 = 7 +) + +var ( + codecSelferBitsize1234 = uint8(reflect.TypeOf(uint(0)).Bits()) + codecSelferOnlyMapOrArrayEncodeToStructErr1234 = errors.New(`only encoded map or array can be decoded into a struct`) +) + +type codecSelfer1234 struct{} + +func init() { + if codec1978.GenVersion != 5 { + _, file, _, _ := runtime.Caller(0) + err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", + 5, codec1978.GenVersion, file) + panic(err) + } + if false { // reference the types, but skip this branch at build/run time + var v0 pkg3_resource.Quantity + var v1 pkg2_unversioned.Time + var v2 pkg6_fields.Selector + var v3 pkg5_labels.Selector + var v4 pkg7_runtime.Object + var v5 pkg1_types.UID + var v6 pkg4_intstr.IntOrString + var v7 time.Time + _, _, _, _, _, _, _, _ = v0, v1, v2, v3, v4, v5, v6, v7 + } +} + +func (x *ObjectMeta) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [15]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.Name != "" + yyq2[1] = x.GenerateName != "" + yyq2[2] = x.Namespace != "" + yyq2[3] = x.SelfLink != "" + yyq2[4] = x.UID != "" + yyq2[5] = x.ResourceVersion != "" + yyq2[6] = x.Generation != 0 + yyq2[7] = true + yyq2[8] = x.DeletionTimestamp != nil + yyq2[9] = x.DeletionGracePeriodSeconds != nil + yyq2[10] = len(x.Labels) != 0 + yyq2[11] = len(x.Annotations) != 0 + yyq2[12] = len(x.OwnerReferences) != 0 + yyq2[13] = len(x.Finalizers) != 0 + yyq2[14] = x.ClusterName != "" + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(15) + } else { + yynn2 = 0 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[0] { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.GenerateName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("generateName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.GenerateName)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Namespace)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("namespace")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[3] { + yym13 := z.EncBinary() + _ = yym13 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SelfLink)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selfLink")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym14 := z.EncBinary() + _ = yym14 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SelfLink)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[4] { + yym16 := z.EncBinary() + _ = yym16 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("uid")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym17 := z.EncBinary() + _ = yym17 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[5] { + yym19 := z.EncBinary() + _ = yym19 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym20 := z.EncBinary() + _ = yym20 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[6] { + yym22 := z.EncBinary() + _ = yym22 + if false { + } else { + r.EncodeInt(int64(x.Generation)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("generation")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym23 := z.EncBinary() + _ = yym23 + if false { + } else { + r.EncodeInt(int64(x.Generation)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[7] { + yy25 := &x.CreationTimestamp + yym26 := z.EncBinary() + _ = yym26 + if false { + } else if z.HasExtensions() && z.EncExt(yy25) { + } else if yym26 { + z.EncBinaryMarshal(yy25) + } else if !yym26 && z.IsJSONHandle() { + z.EncJSONMarshal(yy25) + } else { + z.EncFallback(yy25) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("creationTimestamp")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy27 := &x.CreationTimestamp + yym28 := z.EncBinary() + _ = yym28 + if false { + } else if z.HasExtensions() && z.EncExt(yy27) { + } else if yym28 { + z.EncBinaryMarshal(yy27) + } else if !yym28 && z.IsJSONHandle() { + z.EncJSONMarshal(yy27) + } else { + z.EncFallback(yy27) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[8] { + if x.DeletionTimestamp == nil { + r.EncodeNil() + } else { + yym30 := z.EncBinary() + _ = yym30 + if false { + } else if z.HasExtensions() && z.EncExt(x.DeletionTimestamp) { + } else if yym30 { + z.EncBinaryMarshal(x.DeletionTimestamp) + } else if !yym30 && z.IsJSONHandle() { + z.EncJSONMarshal(x.DeletionTimestamp) + } else { + z.EncFallback(x.DeletionTimestamp) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("deletionTimestamp")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DeletionTimestamp == nil { + r.EncodeNil() + } else { + yym31 := z.EncBinary() + _ = yym31 + if false { + } else if z.HasExtensions() && z.EncExt(x.DeletionTimestamp) { + } else if yym31 { + z.EncBinaryMarshal(x.DeletionTimestamp) + } else if !yym31 && z.IsJSONHandle() { + z.EncJSONMarshal(x.DeletionTimestamp) + } else { + z.EncFallback(x.DeletionTimestamp) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[9] { + if x.DeletionGracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy33 := *x.DeletionGracePeriodSeconds + yym34 := z.EncBinary() + _ = yym34 + if false { + } else { + r.EncodeInt(int64(yy33)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("deletionGracePeriodSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DeletionGracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy35 := *x.DeletionGracePeriodSeconds + yym36 := z.EncBinary() + _ = yym36 + if false { + } else { + r.EncodeInt(int64(yy35)) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[10] { + if x.Labels == nil { + r.EncodeNil() + } else { + yym38 := z.EncBinary() + _ = yym38 + if false { + } else { + z.F.EncMapStringStringV(x.Labels, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("labels")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Labels == nil { + r.EncodeNil() + } else { + yym39 := z.EncBinary() + _ = yym39 + if false { + } else { + z.F.EncMapStringStringV(x.Labels, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[11] { + if x.Annotations == nil { + r.EncodeNil() + } else { + yym41 := z.EncBinary() + _ = yym41 + if false { + } else { + z.F.EncMapStringStringV(x.Annotations, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("annotations")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Annotations == nil { + r.EncodeNil() + } else { + yym42 := z.EncBinary() + _ = yym42 + if false { + } else { + z.F.EncMapStringStringV(x.Annotations, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[12] { + if x.OwnerReferences == nil { + r.EncodeNil() + } else { + yym44 := z.EncBinary() + _ = yym44 + if false { + } else { + h.encSliceOwnerReference(([]OwnerReference)(x.OwnerReferences), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ownerReferences")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.OwnerReferences == nil { + r.EncodeNil() + } else { + yym45 := z.EncBinary() + _ = yym45 + if false { + } else { + h.encSliceOwnerReference(([]OwnerReference)(x.OwnerReferences), e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[13] { + if x.Finalizers == nil { + r.EncodeNil() + } else { + yym47 := z.EncBinary() + _ = yym47 + if false { + } else { + z.F.EncSliceStringV(x.Finalizers, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("finalizers")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Finalizers == nil { + r.EncodeNil() + } else { + yym48 := z.EncBinary() + _ = yym48 + if false { + } else { + z.F.EncSliceStringV(x.Finalizers, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[14] { + yym50 := z.EncBinary() + _ = yym50 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClusterName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("clusterName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym51 := z.EncBinary() + _ = yym51 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClusterName)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ObjectMeta) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym52 := z.DecBinary() + _ = yym52 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct53 := r.ContainerType() + if yyct53 == codecSelferValueTypeMap1234 { + yyl53 := r.ReadMapStart() + if yyl53 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl53, d) + } + } else if yyct53 == codecSelferValueTypeArray1234 { + yyl53 := r.ReadArrayStart() + if yyl53 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl53, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ObjectMeta) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys54Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys54Slc + var yyhl54 bool = l >= 0 + for yyj54 := 0; ; yyj54++ { + if yyhl54 { + if yyj54 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys54Slc = r.DecodeBytes(yys54Slc, true, true) + yys54 := string(yys54Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys54 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "generateName": + if r.TryDecodeAsNil() { + x.GenerateName = "" + } else { + x.GenerateName = string(r.DecodeString()) + } + case "namespace": + if r.TryDecodeAsNil() { + x.Namespace = "" + } else { + x.Namespace = string(r.DecodeString()) + } + case "selfLink": + if r.TryDecodeAsNil() { + x.SelfLink = "" + } else { + x.SelfLink = string(r.DecodeString()) + } + case "uid": + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + case "resourceVersion": + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + case "generation": + if r.TryDecodeAsNil() { + x.Generation = 0 + } else { + x.Generation = int64(r.DecodeInt(64)) + } + case "creationTimestamp": + if r.TryDecodeAsNil() { + x.CreationTimestamp = pkg2_unversioned.Time{} + } else { + yyv62 := &x.CreationTimestamp + yym63 := z.DecBinary() + _ = yym63 + if false { + } else if z.HasExtensions() && z.DecExt(yyv62) { + } else if yym63 { + z.DecBinaryUnmarshal(yyv62) + } else if !yym63 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv62) + } else { + z.DecFallback(yyv62, false) + } + } + case "deletionTimestamp": + if r.TryDecodeAsNil() { + if x.DeletionTimestamp != nil { + x.DeletionTimestamp = nil + } + } else { + if x.DeletionTimestamp == nil { + x.DeletionTimestamp = new(pkg2_unversioned.Time) + } + yym65 := z.DecBinary() + _ = yym65 + if false { + } else if z.HasExtensions() && z.DecExt(x.DeletionTimestamp) { + } else if yym65 { + z.DecBinaryUnmarshal(x.DeletionTimestamp) + } else if !yym65 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.DeletionTimestamp) + } else { + z.DecFallback(x.DeletionTimestamp, false) + } + } + case "deletionGracePeriodSeconds": + if r.TryDecodeAsNil() { + if x.DeletionGracePeriodSeconds != nil { + x.DeletionGracePeriodSeconds = nil + } + } else { + if x.DeletionGracePeriodSeconds == nil { + x.DeletionGracePeriodSeconds = new(int64) + } + yym67 := z.DecBinary() + _ = yym67 + if false { + } else { + *((*int64)(x.DeletionGracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + case "labels": + if r.TryDecodeAsNil() { + x.Labels = nil + } else { + yyv68 := &x.Labels + yym69 := z.DecBinary() + _ = yym69 + if false { + } else { + z.F.DecMapStringStringX(yyv68, false, d) + } + } + case "annotations": + if r.TryDecodeAsNil() { + x.Annotations = nil + } else { + yyv70 := &x.Annotations + yym71 := z.DecBinary() + _ = yym71 + if false { + } else { + z.F.DecMapStringStringX(yyv70, false, d) + } + } + case "ownerReferences": + if r.TryDecodeAsNil() { + x.OwnerReferences = nil + } else { + yyv72 := &x.OwnerReferences + yym73 := z.DecBinary() + _ = yym73 + if false { + } else { + h.decSliceOwnerReference((*[]OwnerReference)(yyv72), d) + } + } + case "finalizers": + if r.TryDecodeAsNil() { + x.Finalizers = nil + } else { + yyv74 := &x.Finalizers + yym75 := z.DecBinary() + _ = yym75 + if false { + } else { + z.F.DecSliceStringX(yyv74, false, d) + } + } + case "clusterName": + if r.TryDecodeAsNil() { + x.ClusterName = "" + } else { + x.ClusterName = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys54) + } // end switch yys54 + } // end for yyj54 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ObjectMeta) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj77 int + var yyb77 bool + var yyhl77 bool = l >= 0 + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.GenerateName = "" + } else { + x.GenerateName = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Namespace = "" + } else { + x.Namespace = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SelfLink = "" + } else { + x.SelfLink = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Generation = 0 + } else { + x.Generation = int64(r.DecodeInt(64)) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CreationTimestamp = pkg2_unversioned.Time{} + } else { + yyv85 := &x.CreationTimestamp + yym86 := z.DecBinary() + _ = yym86 + if false { + } else if z.HasExtensions() && z.DecExt(yyv85) { + } else if yym86 { + z.DecBinaryUnmarshal(yyv85) + } else if !yym86 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv85) + } else { + z.DecFallback(yyv85, false) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DeletionTimestamp != nil { + x.DeletionTimestamp = nil + } + } else { + if x.DeletionTimestamp == nil { + x.DeletionTimestamp = new(pkg2_unversioned.Time) + } + yym88 := z.DecBinary() + _ = yym88 + if false { + } else if z.HasExtensions() && z.DecExt(x.DeletionTimestamp) { + } else if yym88 { + z.DecBinaryUnmarshal(x.DeletionTimestamp) + } else if !yym88 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.DeletionTimestamp) + } else { + z.DecFallback(x.DeletionTimestamp, false) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DeletionGracePeriodSeconds != nil { + x.DeletionGracePeriodSeconds = nil + } + } else { + if x.DeletionGracePeriodSeconds == nil { + x.DeletionGracePeriodSeconds = new(int64) + } + yym90 := z.DecBinary() + _ = yym90 + if false { + } else { + *((*int64)(x.DeletionGracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Labels = nil + } else { + yyv91 := &x.Labels + yym92 := z.DecBinary() + _ = yym92 + if false { + } else { + z.F.DecMapStringStringX(yyv91, false, d) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Annotations = nil + } else { + yyv93 := &x.Annotations + yym94 := z.DecBinary() + _ = yym94 + if false { + } else { + z.F.DecMapStringStringX(yyv93, false, d) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.OwnerReferences = nil + } else { + yyv95 := &x.OwnerReferences + yym96 := z.DecBinary() + _ = yym96 + if false { + } else { + h.decSliceOwnerReference((*[]OwnerReference)(yyv95), d) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Finalizers = nil + } else { + yyv97 := &x.Finalizers + yym98 := z.DecBinary() + _ = yym98 + if false { + } else { + z.F.DecSliceStringX(yyv97, false, d) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ClusterName = "" + } else { + x.ClusterName = string(r.DecodeString()) + } + for { + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj77-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Volume) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym100 := z.EncBinary() + _ = yym100 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep101 := !z.EncBinary() + yy2arr101 := z.EncBasicHandle().StructToArray + var yyq101 [23]bool + _, _, _ = yysep101, yyq101, yy2arr101 + const yyr101 bool = false + yyq101[1] = x.VolumeSource.HostPath != nil && x.HostPath != nil + yyq101[2] = x.VolumeSource.EmptyDir != nil && x.EmptyDir != nil + yyq101[3] = x.VolumeSource.GCEPersistentDisk != nil && x.GCEPersistentDisk != nil + yyq101[4] = x.VolumeSource.AWSElasticBlockStore != nil && x.AWSElasticBlockStore != nil + yyq101[5] = x.VolumeSource.GitRepo != nil && x.GitRepo != nil + yyq101[6] = x.VolumeSource.Secret != nil && x.Secret != nil + yyq101[7] = x.VolumeSource.NFS != nil && x.NFS != nil + yyq101[8] = x.VolumeSource.ISCSI != nil && x.ISCSI != nil + yyq101[9] = x.VolumeSource.Glusterfs != nil && x.Glusterfs != nil + yyq101[10] = x.VolumeSource.PersistentVolumeClaim != nil && x.PersistentVolumeClaim != nil + yyq101[11] = x.VolumeSource.RBD != nil && x.RBD != nil + yyq101[12] = x.VolumeSource.Quobyte != nil && x.Quobyte != nil + yyq101[13] = x.VolumeSource.FlexVolume != nil && x.FlexVolume != nil + yyq101[14] = x.VolumeSource.Cinder != nil && x.Cinder != nil + yyq101[15] = x.VolumeSource.CephFS != nil && x.CephFS != nil + yyq101[16] = x.VolumeSource.Flocker != nil && x.Flocker != nil + yyq101[17] = x.VolumeSource.DownwardAPI != nil && x.DownwardAPI != nil + yyq101[18] = x.VolumeSource.FC != nil && x.FC != nil + yyq101[19] = x.VolumeSource.AzureFile != nil && x.AzureFile != nil + yyq101[20] = x.VolumeSource.ConfigMap != nil && x.ConfigMap != nil + yyq101[21] = x.VolumeSource.VsphereVolume != nil && x.VsphereVolume != nil + yyq101[22] = x.VolumeSource.AzureDisk != nil && x.AzureDisk != nil + var yynn101 int + if yyr101 || yy2arr101 { + r.EncodeArrayStart(23) + } else { + yynn101 = 1 + for _, b := range yyq101 { + if b { + yynn101++ + } + } + r.EncodeMapStart(yynn101) + yynn101 = 0 + } + if yyr101 || yy2arr101 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym103 := z.EncBinary() + _ = yym103 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym104 := z.EncBinary() + _ = yym104 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + var yyn105 bool + if x.VolumeSource.HostPath == nil { + yyn105 = true + goto LABEL105 + } + LABEL105: + if yyr101 || yy2arr101 { + if yyn105 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[1] { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn105 { + r.EncodeNil() + } else { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } + } + } + var yyn106 bool + if x.VolumeSource.EmptyDir == nil { + yyn106 = true + goto LABEL106 + } + LABEL106: + if yyr101 || yy2arr101 { + if yyn106 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[2] { + if x.EmptyDir == nil { + r.EncodeNil() + } else { + x.EmptyDir.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("emptyDir")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn106 { + r.EncodeNil() + } else { + if x.EmptyDir == nil { + r.EncodeNil() + } else { + x.EmptyDir.CodecEncodeSelf(e) + } + } + } + } + var yyn107 bool + if x.VolumeSource.GCEPersistentDisk == nil { + yyn107 = true + goto LABEL107 + } + LABEL107: + if yyr101 || yy2arr101 { + if yyn107 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[3] { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gcePersistentDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn107 { + r.EncodeNil() + } else { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } + } + } + var yyn108 bool + if x.VolumeSource.AWSElasticBlockStore == nil { + yyn108 = true + goto LABEL108 + } + LABEL108: + if yyr101 || yy2arr101 { + if yyn108 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[4] { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("awsElasticBlockStore")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn108 { + r.EncodeNil() + } else { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } + } + } + var yyn109 bool + if x.VolumeSource.GitRepo == nil { + yyn109 = true + goto LABEL109 + } + LABEL109: + if yyr101 || yy2arr101 { + if yyn109 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[5] { + if x.GitRepo == nil { + r.EncodeNil() + } else { + x.GitRepo.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gitRepo")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn109 { + r.EncodeNil() + } else { + if x.GitRepo == nil { + r.EncodeNil() + } else { + x.GitRepo.CodecEncodeSelf(e) + } + } + } + } + var yyn110 bool + if x.VolumeSource.Secret == nil { + yyn110 = true + goto LABEL110 + } + LABEL110: + if yyr101 || yy2arr101 { + if yyn110 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[6] { + if x.Secret == nil { + r.EncodeNil() + } else { + x.Secret.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secret")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn110 { + r.EncodeNil() + } else { + if x.Secret == nil { + r.EncodeNil() + } else { + x.Secret.CodecEncodeSelf(e) + } + } + } + } + var yyn111 bool + if x.VolumeSource.NFS == nil { + yyn111 = true + goto LABEL111 + } + LABEL111: + if yyr101 || yy2arr101 { + if yyn111 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[7] { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn111 { + r.EncodeNil() + } else { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } + } + } + var yyn112 bool + if x.VolumeSource.ISCSI == nil { + yyn112 = true + goto LABEL112 + } + LABEL112: + if yyr101 || yy2arr101 { + if yyn112 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[8] { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsi")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn112 { + r.EncodeNil() + } else { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } + } + } + var yyn113 bool + if x.VolumeSource.Glusterfs == nil { + yyn113 = true + goto LABEL113 + } + LABEL113: + if yyr101 || yy2arr101 { + if yyn113 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[9] { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("glusterfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn113 { + r.EncodeNil() + } else { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } + } + } + var yyn114 bool + if x.VolumeSource.PersistentVolumeClaim == nil { + yyn114 = true + goto LABEL114 + } + LABEL114: + if yyr101 || yy2arr101 { + if yyn114 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[10] { + if x.PersistentVolumeClaim == nil { + r.EncodeNil() + } else { + x.PersistentVolumeClaim.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("persistentVolumeClaim")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn114 { + r.EncodeNil() + } else { + if x.PersistentVolumeClaim == nil { + r.EncodeNil() + } else { + x.PersistentVolumeClaim.CodecEncodeSelf(e) + } + } + } + } + var yyn115 bool + if x.VolumeSource.RBD == nil { + yyn115 = true + goto LABEL115 + } + LABEL115: + if yyr101 || yy2arr101 { + if yyn115 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[11] { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rbd")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn115 { + r.EncodeNil() + } else { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } + } + } + var yyn116 bool + if x.VolumeSource.Quobyte == nil { + yyn116 = true + goto LABEL116 + } + LABEL116: + if yyr101 || yy2arr101 { + if yyn116 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[12] { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("quobyte")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn116 { + r.EncodeNil() + } else { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } + } + } + var yyn117 bool + if x.VolumeSource.FlexVolume == nil { + yyn117 = true + goto LABEL117 + } + LABEL117: + if yyr101 || yy2arr101 { + if yyn117 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[13] { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flexVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn117 { + r.EncodeNil() + } else { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } + } + } + var yyn118 bool + if x.VolumeSource.Cinder == nil { + yyn118 = true + goto LABEL118 + } + LABEL118: + if yyr101 || yy2arr101 { + if yyn118 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[14] { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cinder")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn118 { + r.EncodeNil() + } else { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } + } + } + var yyn119 bool + if x.VolumeSource.CephFS == nil { + yyn119 = true + goto LABEL119 + } + LABEL119: + if yyr101 || yy2arr101 { + if yyn119 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[15] { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cephfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn119 { + r.EncodeNil() + } else { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } + } + } + var yyn120 bool + if x.VolumeSource.Flocker == nil { + yyn120 = true + goto LABEL120 + } + LABEL120: + if yyr101 || yy2arr101 { + if yyn120 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[16] { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flocker")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn120 { + r.EncodeNil() + } else { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } + } + } + var yyn121 bool + if x.VolumeSource.DownwardAPI == nil { + yyn121 = true + goto LABEL121 + } + LABEL121: + if yyr101 || yy2arr101 { + if yyn121 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[17] { + if x.DownwardAPI == nil { + r.EncodeNil() + } else { + x.DownwardAPI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("downwardAPI")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn121 { + r.EncodeNil() + } else { + if x.DownwardAPI == nil { + r.EncodeNil() + } else { + x.DownwardAPI.CodecEncodeSelf(e) + } + } + } + } + var yyn122 bool + if x.VolumeSource.FC == nil { + yyn122 = true + goto LABEL122 + } + LABEL122: + if yyr101 || yy2arr101 { + if yyn122 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[18] { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[18] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fc")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn122 { + r.EncodeNil() + } else { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } + } + } + var yyn123 bool + if x.VolumeSource.AzureFile == nil { + yyn123 = true + goto LABEL123 + } + LABEL123: + if yyr101 || yy2arr101 { + if yyn123 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[19] { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[19] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn123 { + r.EncodeNil() + } else { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } + } + } + var yyn124 bool + if x.VolumeSource.ConfigMap == nil { + yyn124 = true + goto LABEL124 + } + LABEL124: + if yyr101 || yy2arr101 { + if yyn124 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[20] { + if x.ConfigMap == nil { + r.EncodeNil() + } else { + x.ConfigMap.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[20] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("configMap")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn124 { + r.EncodeNil() + } else { + if x.ConfigMap == nil { + r.EncodeNil() + } else { + x.ConfigMap.CodecEncodeSelf(e) + } + } + } + } + var yyn125 bool + if x.VolumeSource.VsphereVolume == nil { + yyn125 = true + goto LABEL125 + } + LABEL125: + if yyr101 || yy2arr101 { + if yyn125 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[21] { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[21] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("vsphereVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn125 { + r.EncodeNil() + } else { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } + } + } + var yyn126 bool + if x.VolumeSource.AzureDisk == nil { + yyn126 = true + goto LABEL126 + } + LABEL126: + if yyr101 || yy2arr101 { + if yyn126 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[22] { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[22] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn126 { + r.EncodeNil() + } else { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } + } + } + if yyr101 || yy2arr101 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Volume) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym127 := z.DecBinary() + _ = yym127 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct128 := r.ContainerType() + if yyct128 == codecSelferValueTypeMap1234 { + yyl128 := r.ReadMapStart() + if yyl128 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl128, d) + } + } else if yyct128 == codecSelferValueTypeArray1234 { + yyl128 := r.ReadArrayStart() + if yyl128 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl128, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Volume) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys129Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys129Slc + var yyhl129 bool = l >= 0 + for yyj129 := 0; ; yyj129++ { + if yyhl129 { + if yyj129 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys129Slc = r.DecodeBytes(yys129Slc, true, true) + yys129 := string(yys129Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys129 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "hostPath": + if x.VolumeSource.HostPath == nil { + x.VolumeSource.HostPath = new(HostPathVolumeSource) + } + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + case "emptyDir": + if x.VolumeSource.EmptyDir == nil { + x.VolumeSource.EmptyDir = new(EmptyDirVolumeSource) + } + if r.TryDecodeAsNil() { + if x.EmptyDir != nil { + x.EmptyDir = nil + } + } else { + if x.EmptyDir == nil { + x.EmptyDir = new(EmptyDirVolumeSource) + } + x.EmptyDir.CodecDecodeSelf(d) + } + case "gcePersistentDisk": + if x.VolumeSource.GCEPersistentDisk == nil { + x.VolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + case "awsElasticBlockStore": + if x.VolumeSource.AWSElasticBlockStore == nil { + x.VolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + case "gitRepo": + if x.VolumeSource.GitRepo == nil { + x.VolumeSource.GitRepo = new(GitRepoVolumeSource) + } + if r.TryDecodeAsNil() { + if x.GitRepo != nil { + x.GitRepo = nil + } + } else { + if x.GitRepo == nil { + x.GitRepo = new(GitRepoVolumeSource) + } + x.GitRepo.CodecDecodeSelf(d) + } + case "secret": + if x.VolumeSource.Secret == nil { + x.VolumeSource.Secret = new(SecretVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Secret != nil { + x.Secret = nil + } + } else { + if x.Secret == nil { + x.Secret = new(SecretVolumeSource) + } + x.Secret.CodecDecodeSelf(d) + } + case "nfs": + if x.VolumeSource.NFS == nil { + x.VolumeSource.NFS = new(NFSVolumeSource) + } + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + case "iscsi": + if x.VolumeSource.ISCSI == nil { + x.VolumeSource.ISCSI = new(ISCSIVolumeSource) + } + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + case "glusterfs": + if x.VolumeSource.Glusterfs == nil { + x.VolumeSource.Glusterfs = new(GlusterfsVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + case "persistentVolumeClaim": + if x.VolumeSource.PersistentVolumeClaim == nil { + x.VolumeSource.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + if r.TryDecodeAsNil() { + if x.PersistentVolumeClaim != nil { + x.PersistentVolumeClaim = nil + } + } else { + if x.PersistentVolumeClaim == nil { + x.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + x.PersistentVolumeClaim.CodecDecodeSelf(d) + } + case "rbd": + if x.VolumeSource.RBD == nil { + x.VolumeSource.RBD = new(RBDVolumeSource) + } + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + case "quobyte": + if x.VolumeSource.Quobyte == nil { + x.VolumeSource.Quobyte = new(QuobyteVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + case "flexVolume": + if x.VolumeSource.FlexVolume == nil { + x.VolumeSource.FlexVolume = new(FlexVolumeSource) + } + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + case "cinder": + if x.VolumeSource.Cinder == nil { + x.VolumeSource.Cinder = new(CinderVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + case "cephfs": + if x.VolumeSource.CephFS == nil { + x.VolumeSource.CephFS = new(CephFSVolumeSource) + } + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + case "flocker": + if x.VolumeSource.Flocker == nil { + x.VolumeSource.Flocker = new(FlockerVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + case "downwardAPI": + if x.VolumeSource.DownwardAPI == nil { + x.VolumeSource.DownwardAPI = new(DownwardAPIVolumeSource) + } + if r.TryDecodeAsNil() { + if x.DownwardAPI != nil { + x.DownwardAPI = nil + } + } else { + if x.DownwardAPI == nil { + x.DownwardAPI = new(DownwardAPIVolumeSource) + } + x.DownwardAPI.CodecDecodeSelf(d) + } + case "fc": + if x.VolumeSource.FC == nil { + x.VolumeSource.FC = new(FCVolumeSource) + } + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + case "azureFile": + if x.VolumeSource.AzureFile == nil { + x.VolumeSource.AzureFile = new(AzureFileVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + case "configMap": + if x.VolumeSource.ConfigMap == nil { + x.VolumeSource.ConfigMap = new(ConfigMapVolumeSource) + } + if r.TryDecodeAsNil() { + if x.ConfigMap != nil { + x.ConfigMap = nil + } + } else { + if x.ConfigMap == nil { + x.ConfigMap = new(ConfigMapVolumeSource) + } + x.ConfigMap.CodecDecodeSelf(d) + } + case "vsphereVolume": + if x.VolumeSource.VsphereVolume == nil { + x.VolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + case "azureDisk": + if x.VolumeSource.AzureDisk == nil { + x.VolumeSource.AzureDisk = new(AzureDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys129) + } // end switch yys129 + } // end for yyj129 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj153 int + var yyb153 bool + var yyhl153 bool = l >= 0 + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + if x.VolumeSource.HostPath == nil { + x.VolumeSource.HostPath = new(HostPathVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + if x.VolumeSource.EmptyDir == nil { + x.VolumeSource.EmptyDir = new(EmptyDirVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.EmptyDir != nil { + x.EmptyDir = nil + } + } else { + if x.EmptyDir == nil { + x.EmptyDir = new(EmptyDirVolumeSource) + } + x.EmptyDir.CodecDecodeSelf(d) + } + if x.VolumeSource.GCEPersistentDisk == nil { + x.VolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + if x.VolumeSource.AWSElasticBlockStore == nil { + x.VolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + if x.VolumeSource.GitRepo == nil { + x.VolumeSource.GitRepo = new(GitRepoVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GitRepo != nil { + x.GitRepo = nil + } + } else { + if x.GitRepo == nil { + x.GitRepo = new(GitRepoVolumeSource) + } + x.GitRepo.CodecDecodeSelf(d) + } + if x.VolumeSource.Secret == nil { + x.VolumeSource.Secret = new(SecretVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Secret != nil { + x.Secret = nil + } + } else { + if x.Secret == nil { + x.Secret = new(SecretVolumeSource) + } + x.Secret.CodecDecodeSelf(d) + } + if x.VolumeSource.NFS == nil { + x.VolumeSource.NFS = new(NFSVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + if x.VolumeSource.ISCSI == nil { + x.VolumeSource.ISCSI = new(ISCSIVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + if x.VolumeSource.Glusterfs == nil { + x.VolumeSource.Glusterfs = new(GlusterfsVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + if x.VolumeSource.PersistentVolumeClaim == nil { + x.VolumeSource.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PersistentVolumeClaim != nil { + x.PersistentVolumeClaim = nil + } + } else { + if x.PersistentVolumeClaim == nil { + x.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + x.PersistentVolumeClaim.CodecDecodeSelf(d) + } + if x.VolumeSource.RBD == nil { + x.VolumeSource.RBD = new(RBDVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + if x.VolumeSource.Quobyte == nil { + x.VolumeSource.Quobyte = new(QuobyteVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + if x.VolumeSource.FlexVolume == nil { + x.VolumeSource.FlexVolume = new(FlexVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + if x.VolumeSource.Cinder == nil { + x.VolumeSource.Cinder = new(CinderVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + if x.VolumeSource.CephFS == nil { + x.VolumeSource.CephFS = new(CephFSVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + if x.VolumeSource.Flocker == nil { + x.VolumeSource.Flocker = new(FlockerVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + if x.VolumeSource.DownwardAPI == nil { + x.VolumeSource.DownwardAPI = new(DownwardAPIVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DownwardAPI != nil { + x.DownwardAPI = nil + } + } else { + if x.DownwardAPI == nil { + x.DownwardAPI = new(DownwardAPIVolumeSource) + } + x.DownwardAPI.CodecDecodeSelf(d) + } + if x.VolumeSource.FC == nil { + x.VolumeSource.FC = new(FCVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + if x.VolumeSource.AzureFile == nil { + x.VolumeSource.AzureFile = new(AzureFileVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + if x.VolumeSource.ConfigMap == nil { + x.VolumeSource.ConfigMap = new(ConfigMapVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ConfigMap != nil { + x.ConfigMap = nil + } + } else { + if x.ConfigMap == nil { + x.ConfigMap = new(ConfigMapVolumeSource) + } + x.ConfigMap.CodecDecodeSelf(d) + } + if x.VolumeSource.VsphereVolume == nil { + x.VolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + if x.VolumeSource.AzureDisk == nil { + x.VolumeSource.AzureDisk = new(AzureDiskVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + for { + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj153-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *VolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym177 := z.EncBinary() + _ = yym177 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep178 := !z.EncBinary() + yy2arr178 := z.EncBasicHandle().StructToArray + var yyq178 [22]bool + _, _, _ = yysep178, yyq178, yy2arr178 + const yyr178 bool = false + yyq178[0] = x.HostPath != nil + yyq178[1] = x.EmptyDir != nil + yyq178[2] = x.GCEPersistentDisk != nil + yyq178[3] = x.AWSElasticBlockStore != nil + yyq178[4] = x.GitRepo != nil + yyq178[5] = x.Secret != nil + yyq178[6] = x.NFS != nil + yyq178[7] = x.ISCSI != nil + yyq178[8] = x.Glusterfs != nil + yyq178[9] = x.PersistentVolumeClaim != nil + yyq178[10] = x.RBD != nil + yyq178[11] = x.Quobyte != nil + yyq178[12] = x.FlexVolume != nil + yyq178[13] = x.Cinder != nil + yyq178[14] = x.CephFS != nil + yyq178[15] = x.Flocker != nil + yyq178[16] = x.DownwardAPI != nil + yyq178[17] = x.FC != nil + yyq178[18] = x.AzureFile != nil + yyq178[19] = x.ConfigMap != nil + yyq178[20] = x.VsphereVolume != nil + yyq178[21] = x.AzureDisk != nil + var yynn178 int + if yyr178 || yy2arr178 { + r.EncodeArrayStart(22) + } else { + yynn178 = 0 + for _, b := range yyq178 { + if b { + yynn178++ + } + } + r.EncodeMapStart(yynn178) + yynn178 = 0 + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[0] { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[1] { + if x.EmptyDir == nil { + r.EncodeNil() + } else { + x.EmptyDir.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("emptyDir")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.EmptyDir == nil { + r.EncodeNil() + } else { + x.EmptyDir.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[2] { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gcePersistentDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[3] { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("awsElasticBlockStore")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[4] { + if x.GitRepo == nil { + r.EncodeNil() + } else { + x.GitRepo.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gitRepo")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.GitRepo == nil { + r.EncodeNil() + } else { + x.GitRepo.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[5] { + if x.Secret == nil { + r.EncodeNil() + } else { + x.Secret.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secret")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Secret == nil { + r.EncodeNil() + } else { + x.Secret.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[6] { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[7] { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsi")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[8] { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("glusterfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[9] { + if x.PersistentVolumeClaim == nil { + r.EncodeNil() + } else { + x.PersistentVolumeClaim.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("persistentVolumeClaim")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PersistentVolumeClaim == nil { + r.EncodeNil() + } else { + x.PersistentVolumeClaim.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[10] { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rbd")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[11] { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("quobyte")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[12] { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flexVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[13] { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cinder")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[14] { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cephfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[15] { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flocker")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[16] { + if x.DownwardAPI == nil { + r.EncodeNil() + } else { + x.DownwardAPI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("downwardAPI")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DownwardAPI == nil { + r.EncodeNil() + } else { + x.DownwardAPI.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[17] { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fc")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[18] { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[18] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[19] { + if x.ConfigMap == nil { + r.EncodeNil() + } else { + x.ConfigMap.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[19] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("configMap")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ConfigMap == nil { + r.EncodeNil() + } else { + x.ConfigMap.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[20] { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[20] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("vsphereVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[21] { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[21] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *VolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym201 := z.DecBinary() + _ = yym201 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct202 := r.ContainerType() + if yyct202 == codecSelferValueTypeMap1234 { + yyl202 := r.ReadMapStart() + if yyl202 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl202, d) + } + } else if yyct202 == codecSelferValueTypeArray1234 { + yyl202 := r.ReadArrayStart() + if yyl202 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl202, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *VolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys203Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys203Slc + var yyhl203 bool = l >= 0 + for yyj203 := 0; ; yyj203++ { + if yyhl203 { + if yyj203 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys203Slc = r.DecodeBytes(yys203Slc, true, true) + yys203 := string(yys203Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys203 { + case "hostPath": + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + case "emptyDir": + if r.TryDecodeAsNil() { + if x.EmptyDir != nil { + x.EmptyDir = nil + } + } else { + if x.EmptyDir == nil { + x.EmptyDir = new(EmptyDirVolumeSource) + } + x.EmptyDir.CodecDecodeSelf(d) + } + case "gcePersistentDisk": + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + case "awsElasticBlockStore": + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + case "gitRepo": + if r.TryDecodeAsNil() { + if x.GitRepo != nil { + x.GitRepo = nil + } + } else { + if x.GitRepo == nil { + x.GitRepo = new(GitRepoVolumeSource) + } + x.GitRepo.CodecDecodeSelf(d) + } + case "secret": + if r.TryDecodeAsNil() { + if x.Secret != nil { + x.Secret = nil + } + } else { + if x.Secret == nil { + x.Secret = new(SecretVolumeSource) + } + x.Secret.CodecDecodeSelf(d) + } + case "nfs": + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + case "iscsi": + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + case "glusterfs": + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + case "persistentVolumeClaim": + if r.TryDecodeAsNil() { + if x.PersistentVolumeClaim != nil { + x.PersistentVolumeClaim = nil + } + } else { + if x.PersistentVolumeClaim == nil { + x.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + x.PersistentVolumeClaim.CodecDecodeSelf(d) + } + case "rbd": + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + case "quobyte": + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + case "flexVolume": + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + case "cinder": + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + case "cephfs": + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + case "flocker": + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + case "downwardAPI": + if r.TryDecodeAsNil() { + if x.DownwardAPI != nil { + x.DownwardAPI = nil + } + } else { + if x.DownwardAPI == nil { + x.DownwardAPI = new(DownwardAPIVolumeSource) + } + x.DownwardAPI.CodecDecodeSelf(d) + } + case "fc": + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + case "azureFile": + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + case "configMap": + if r.TryDecodeAsNil() { + if x.ConfigMap != nil { + x.ConfigMap = nil + } + } else { + if x.ConfigMap == nil { + x.ConfigMap = new(ConfigMapVolumeSource) + } + x.ConfigMap.CodecDecodeSelf(d) + } + case "vsphereVolume": + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + case "azureDisk": + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys203) + } // end switch yys203 + } // end for yyj203 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj226 int + var yyb226 bool + var yyhl226 bool = l >= 0 + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.EmptyDir != nil { + x.EmptyDir = nil + } + } else { + if x.EmptyDir == nil { + x.EmptyDir = new(EmptyDirVolumeSource) + } + x.EmptyDir.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GitRepo != nil { + x.GitRepo = nil + } + } else { + if x.GitRepo == nil { + x.GitRepo = new(GitRepoVolumeSource) + } + x.GitRepo.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Secret != nil { + x.Secret = nil + } + } else { + if x.Secret == nil { + x.Secret = new(SecretVolumeSource) + } + x.Secret.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PersistentVolumeClaim != nil { + x.PersistentVolumeClaim = nil + } + } else { + if x.PersistentVolumeClaim == nil { + x.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + x.PersistentVolumeClaim.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DownwardAPI != nil { + x.DownwardAPI = nil + } + } else { + if x.DownwardAPI == nil { + x.DownwardAPI = new(DownwardAPIVolumeSource) + } + x.DownwardAPI.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ConfigMap != nil { + x.ConfigMap = nil + } + } else { + if x.ConfigMap == nil { + x.ConfigMap = new(ConfigMapVolumeSource) + } + x.ConfigMap.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + for { + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj226-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym249 := z.EncBinary() + _ = yym249 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep250 := !z.EncBinary() + yy2arr250 := z.EncBasicHandle().StructToArray + var yyq250 [16]bool + _, _, _ = yysep250, yyq250, yy2arr250 + const yyr250 bool = false + yyq250[0] = x.GCEPersistentDisk != nil + yyq250[1] = x.AWSElasticBlockStore != nil + yyq250[2] = x.HostPath != nil + yyq250[3] = x.Glusterfs != nil + yyq250[4] = x.NFS != nil + yyq250[5] = x.RBD != nil + yyq250[6] = x.Quobyte != nil + yyq250[7] = x.ISCSI != nil + yyq250[8] = x.FlexVolume != nil + yyq250[9] = x.Cinder != nil + yyq250[10] = x.CephFS != nil + yyq250[11] = x.FC != nil + yyq250[12] = x.Flocker != nil + yyq250[13] = x.AzureFile != nil + yyq250[14] = x.VsphereVolume != nil + yyq250[15] = x.AzureDisk != nil + var yynn250 int + if yyr250 || yy2arr250 { + r.EncodeArrayStart(16) + } else { + yynn250 = 0 + for _, b := range yyq250 { + if b { + yynn250++ + } + } + r.EncodeMapStart(yynn250) + yynn250 = 0 + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[0] { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gcePersistentDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[1] { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("awsElasticBlockStore")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[2] { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[3] { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("glusterfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[4] { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[5] { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rbd")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[6] { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("quobyte")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[7] { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsi")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[8] { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flexVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[9] { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cinder")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[10] { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cephfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[11] { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fc")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[12] { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flocker")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[13] { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[14] { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("vsphereVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[15] { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq250[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym267 := z.DecBinary() + _ = yym267 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct268 := r.ContainerType() + if yyct268 == codecSelferValueTypeMap1234 { + yyl268 := r.ReadMapStart() + if yyl268 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl268, d) + } + } else if yyct268 == codecSelferValueTypeArray1234 { + yyl268 := r.ReadArrayStart() + if yyl268 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl268, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys269Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys269Slc + var yyhl269 bool = l >= 0 + for yyj269 := 0; ; yyj269++ { + if yyhl269 { + if yyj269 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys269Slc = r.DecodeBytes(yys269Slc, true, true) + yys269 := string(yys269Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys269 { + case "gcePersistentDisk": + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + case "awsElasticBlockStore": + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + case "hostPath": + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + case "glusterfs": + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + case "nfs": + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + case "rbd": + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + case "quobyte": + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + case "iscsi": + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + case "flexVolume": + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + case "cinder": + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + case "cephfs": + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + case "fc": + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + case "flocker": + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + case "azureFile": + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + case "vsphereVolume": + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + case "azureDisk": + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys269) + } // end switch yys269 + } // end for yyj269 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj286 int + var yyb286 bool + var yyhl286 bool = l >= 0 + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + for { + yyj286++ + if yyhl286 { + yyb286 = yyj286 > l + } else { + yyb286 = r.CheckBreak() + } + if yyb286 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj286-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaimVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym303 := z.EncBinary() + _ = yym303 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep304 := !z.EncBinary() + yy2arr304 := z.EncBasicHandle().StructToArray + var yyq304 [2]bool + _, _, _ = yysep304, yyq304, yy2arr304 + const yyr304 bool = false + yyq304[1] = x.ReadOnly != false + var yynn304 int + if yyr304 || yy2arr304 { + r.EncodeArrayStart(2) + } else { + yynn304 = 1 + for _, b := range yyq304 { + if b { + yynn304++ + } + } + r.EncodeMapStart(yynn304) + yynn304 = 0 + } + if yyr304 || yy2arr304 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym306 := z.EncBinary() + _ = yym306 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClaimName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("claimName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym307 := z.EncBinary() + _ = yym307 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClaimName)) + } + } + if yyr304 || yy2arr304 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq304[1] { + yym309 := z.EncBinary() + _ = yym309 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq304[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym310 := z.EncBinary() + _ = yym310 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr304 || yy2arr304 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaimVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym311 := z.DecBinary() + _ = yym311 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct312 := r.ContainerType() + if yyct312 == codecSelferValueTypeMap1234 { + yyl312 := r.ReadMapStart() + if yyl312 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl312, d) + } + } else if yyct312 == codecSelferValueTypeArray1234 { + yyl312 := r.ReadArrayStart() + if yyl312 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl312, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaimVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys313Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys313Slc + var yyhl313 bool = l >= 0 + for yyj313 := 0; ; yyj313++ { + if yyhl313 { + if yyj313 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys313Slc = r.DecodeBytes(yys313Slc, true, true) + yys313 := string(yys313Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys313 { + case "claimName": + if r.TryDecodeAsNil() { + x.ClaimName = "" + } else { + x.ClaimName = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys313) + } // end switch yys313 + } // end for yyj313 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaimVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj316 int + var yyb316 bool + var yyhl316 bool = l >= 0 + yyj316++ + if yyhl316 { + yyb316 = yyj316 > l + } else { + yyb316 = r.CheckBreak() + } + if yyb316 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ClaimName = "" + } else { + x.ClaimName = string(r.DecodeString()) + } + yyj316++ + if yyhl316 { + yyb316 = yyj316 > l + } else { + yyb316 = r.CheckBreak() + } + if yyb316 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj316++ + if yyhl316 { + yyb316 = yyj316 > l + } else { + yyb316 = r.CheckBreak() + } + if yyb316 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj316-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolume) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym319 := z.EncBinary() + _ = yym319 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep320 := !z.EncBinary() + yy2arr320 := z.EncBasicHandle().StructToArray + var yyq320 [5]bool + _, _, _ = yysep320, yyq320, yy2arr320 + const yyr320 bool = false + yyq320[0] = x.Kind != "" + yyq320[1] = x.APIVersion != "" + yyq320[2] = true + yyq320[3] = true + yyq320[4] = true + var yynn320 int + if yyr320 || yy2arr320 { + r.EncodeArrayStart(5) + } else { + yynn320 = 0 + for _, b := range yyq320 { + if b { + yynn320++ + } + } + r.EncodeMapStart(yynn320) + yynn320 = 0 + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[0] { + yym322 := z.EncBinary() + _ = yym322 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq320[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym323 := z.EncBinary() + _ = yym323 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[1] { + yym325 := z.EncBinary() + _ = yym325 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq320[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym326 := z.EncBinary() + _ = yym326 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[2] { + yy328 := &x.ObjectMeta + yy328.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq320[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy329 := &x.ObjectMeta + yy329.CodecEncodeSelf(e) + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[3] { + yy331 := &x.Spec + yy331.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq320[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy332 := &x.Spec + yy332.CodecEncodeSelf(e) + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[4] { + yy334 := &x.Status + yy334.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq320[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy335 := &x.Status + yy335.CodecEncodeSelf(e) + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolume) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym336 := z.DecBinary() + _ = yym336 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct337 := r.ContainerType() + if yyct337 == codecSelferValueTypeMap1234 { + yyl337 := r.ReadMapStart() + if yyl337 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl337, d) + } + } else if yyct337 == codecSelferValueTypeArray1234 { + yyl337 := r.ReadArrayStart() + if yyl337 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl337, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolume) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys338Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys338Slc + var yyhl338 bool = l >= 0 + for yyj338 := 0; ; yyj338++ { + if yyhl338 { + if yyj338 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys338Slc = r.DecodeBytes(yys338Slc, true, true) + yys338 := string(yys338Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys338 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv341 := &x.ObjectMeta + yyv341.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PersistentVolumeSpec{} + } else { + yyv342 := &x.Spec + yyv342.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = PersistentVolumeStatus{} + } else { + yyv343 := &x.Status + yyv343.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys338) + } // end switch yys338 + } // end for yyj338 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj344 int + var yyb344 bool + var yyhl344 bool = l >= 0 + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv347 := &x.ObjectMeta + yyv347.CodecDecodeSelf(d) + } + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PersistentVolumeSpec{} + } else { + yyv348 := &x.Spec + yyv348.CodecDecodeSelf(d) + } + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = PersistentVolumeStatus{} + } else { + yyv349 := &x.Status + yyv349.CodecDecodeSelf(d) + } + for { + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj344-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym350 := z.EncBinary() + _ = yym350 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep351 := !z.EncBinary() + yy2arr351 := z.EncBasicHandle().StructToArray + var yyq351 [20]bool + _, _, _ = yysep351, yyq351, yy2arr351 + const yyr351 bool = false + yyq351[1] = x.PersistentVolumeSource.GCEPersistentDisk != nil && x.GCEPersistentDisk != nil + yyq351[2] = x.PersistentVolumeSource.AWSElasticBlockStore != nil && x.AWSElasticBlockStore != nil + yyq351[3] = x.PersistentVolumeSource.HostPath != nil && x.HostPath != nil + yyq351[4] = x.PersistentVolumeSource.Glusterfs != nil && x.Glusterfs != nil + yyq351[5] = x.PersistentVolumeSource.NFS != nil && x.NFS != nil + yyq351[6] = x.PersistentVolumeSource.RBD != nil && x.RBD != nil + yyq351[7] = x.PersistentVolumeSource.Quobyte != nil && x.Quobyte != nil + yyq351[8] = x.PersistentVolumeSource.ISCSI != nil && x.ISCSI != nil + yyq351[9] = x.PersistentVolumeSource.FlexVolume != nil && x.FlexVolume != nil + yyq351[10] = x.PersistentVolumeSource.Cinder != nil && x.Cinder != nil + yyq351[11] = x.PersistentVolumeSource.CephFS != nil && x.CephFS != nil + yyq351[12] = x.PersistentVolumeSource.FC != nil && x.FC != nil + yyq351[13] = x.PersistentVolumeSource.Flocker != nil && x.Flocker != nil + yyq351[14] = x.PersistentVolumeSource.AzureFile != nil && x.AzureFile != nil + yyq351[15] = x.PersistentVolumeSource.VsphereVolume != nil && x.VsphereVolume != nil + yyq351[16] = x.PersistentVolumeSource.AzureDisk != nil && x.AzureDisk != nil + yyq351[17] = len(x.AccessModes) != 0 + yyq351[18] = x.ClaimRef != nil + yyq351[19] = x.PersistentVolumeReclaimPolicy != "" + var yynn351 int + if yyr351 || yy2arr351 { + r.EncodeArrayStart(20) + } else { + yynn351 = 1 + for _, b := range yyq351 { + if b { + yynn351++ + } + } + r.EncodeMapStart(yynn351) + yynn351 = 0 + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capacity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } + var yyn353 bool + if x.PersistentVolumeSource.GCEPersistentDisk == nil { + yyn353 = true + goto LABEL353 + } + LABEL353: + if yyr351 || yy2arr351 { + if yyn353 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[1] { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gcePersistentDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn353 { + r.EncodeNil() + } else { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } + } + } + var yyn354 bool + if x.PersistentVolumeSource.AWSElasticBlockStore == nil { + yyn354 = true + goto LABEL354 + } + LABEL354: + if yyr351 || yy2arr351 { + if yyn354 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[2] { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("awsElasticBlockStore")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn354 { + r.EncodeNil() + } else { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } + } + } + var yyn355 bool + if x.PersistentVolumeSource.HostPath == nil { + yyn355 = true + goto LABEL355 + } + LABEL355: + if yyr351 || yy2arr351 { + if yyn355 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[3] { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn355 { + r.EncodeNil() + } else { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } + } + } + var yyn356 bool + if x.PersistentVolumeSource.Glusterfs == nil { + yyn356 = true + goto LABEL356 + } + LABEL356: + if yyr351 || yy2arr351 { + if yyn356 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[4] { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("glusterfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn356 { + r.EncodeNil() + } else { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } + } + } + var yyn357 bool + if x.PersistentVolumeSource.NFS == nil { + yyn357 = true + goto LABEL357 + } + LABEL357: + if yyr351 || yy2arr351 { + if yyn357 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[5] { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn357 { + r.EncodeNil() + } else { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } + } + } + var yyn358 bool + if x.PersistentVolumeSource.RBD == nil { + yyn358 = true + goto LABEL358 + } + LABEL358: + if yyr351 || yy2arr351 { + if yyn358 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[6] { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rbd")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn358 { + r.EncodeNil() + } else { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } + } + } + var yyn359 bool + if x.PersistentVolumeSource.Quobyte == nil { + yyn359 = true + goto LABEL359 + } + LABEL359: + if yyr351 || yy2arr351 { + if yyn359 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[7] { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("quobyte")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn359 { + r.EncodeNil() + } else { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } + } + } + var yyn360 bool + if x.PersistentVolumeSource.ISCSI == nil { + yyn360 = true + goto LABEL360 + } + LABEL360: + if yyr351 || yy2arr351 { + if yyn360 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[8] { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsi")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn360 { + r.EncodeNil() + } else { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } + } + } + var yyn361 bool + if x.PersistentVolumeSource.FlexVolume == nil { + yyn361 = true + goto LABEL361 + } + LABEL361: + if yyr351 || yy2arr351 { + if yyn361 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[9] { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flexVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn361 { + r.EncodeNil() + } else { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } + } + } + var yyn362 bool + if x.PersistentVolumeSource.Cinder == nil { + yyn362 = true + goto LABEL362 + } + LABEL362: + if yyr351 || yy2arr351 { + if yyn362 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[10] { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cinder")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn362 { + r.EncodeNil() + } else { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } + } + } + var yyn363 bool + if x.PersistentVolumeSource.CephFS == nil { + yyn363 = true + goto LABEL363 + } + LABEL363: + if yyr351 || yy2arr351 { + if yyn363 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[11] { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cephfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn363 { + r.EncodeNil() + } else { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } + } + } + var yyn364 bool + if x.PersistentVolumeSource.FC == nil { + yyn364 = true + goto LABEL364 + } + LABEL364: + if yyr351 || yy2arr351 { + if yyn364 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[12] { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fc")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn364 { + r.EncodeNil() + } else { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } + } + } + var yyn365 bool + if x.PersistentVolumeSource.Flocker == nil { + yyn365 = true + goto LABEL365 + } + LABEL365: + if yyr351 || yy2arr351 { + if yyn365 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[13] { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flocker")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn365 { + r.EncodeNil() + } else { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } + } + } + var yyn366 bool + if x.PersistentVolumeSource.AzureFile == nil { + yyn366 = true + goto LABEL366 + } + LABEL366: + if yyr351 || yy2arr351 { + if yyn366 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[14] { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn366 { + r.EncodeNil() + } else { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } + } + } + var yyn367 bool + if x.PersistentVolumeSource.VsphereVolume == nil { + yyn367 = true + goto LABEL367 + } + LABEL367: + if yyr351 || yy2arr351 { + if yyn367 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[15] { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("vsphereVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn367 { + r.EncodeNil() + } else { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } + } + } + var yyn368 bool + if x.PersistentVolumeSource.AzureDisk == nil { + yyn368 = true + goto LABEL368 + } + LABEL368: + if yyr351 || yy2arr351 { + if yyn368 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[16] { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn368 { + r.EncodeNil() + } else { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } + } + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[17] { + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym370 := z.EncBinary() + _ = yym370 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq351[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("accessModes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym371 := z.EncBinary() + _ = yym371 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[18] { + if x.ClaimRef == nil { + r.EncodeNil() + } else { + x.ClaimRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq351[18] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("claimRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ClaimRef == nil { + r.EncodeNil() + } else { + x.ClaimRef.CodecEncodeSelf(e) + } + } + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[19] { + x.PersistentVolumeReclaimPolicy.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq351[19] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("persistentVolumeReclaimPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.PersistentVolumeReclaimPolicy.CodecEncodeSelf(e) + } + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym374 := z.DecBinary() + _ = yym374 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct375 := r.ContainerType() + if yyct375 == codecSelferValueTypeMap1234 { + yyl375 := r.ReadMapStart() + if yyl375 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl375, d) + } + } else if yyct375 == codecSelferValueTypeArray1234 { + yyl375 := r.ReadArrayStart() + if yyl375 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl375, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys376Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys376Slc + var yyhl376 bool = l >= 0 + for yyj376 := 0; ; yyj376++ { + if yyhl376 { + if yyj376 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys376Slc = r.DecodeBytes(yys376Slc, true, true) + yys376 := string(yys376Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys376 { + case "capacity": + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv377 := &x.Capacity + yyv377.CodecDecodeSelf(d) + } + case "gcePersistentDisk": + if x.PersistentVolumeSource.GCEPersistentDisk == nil { + x.PersistentVolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + case "awsElasticBlockStore": + if x.PersistentVolumeSource.AWSElasticBlockStore == nil { + x.PersistentVolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + case "hostPath": + if x.PersistentVolumeSource.HostPath == nil { + x.PersistentVolumeSource.HostPath = new(HostPathVolumeSource) + } + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + case "glusterfs": + if x.PersistentVolumeSource.Glusterfs == nil { + x.PersistentVolumeSource.Glusterfs = new(GlusterfsVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + case "nfs": + if x.PersistentVolumeSource.NFS == nil { + x.PersistentVolumeSource.NFS = new(NFSVolumeSource) + } + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + case "rbd": + if x.PersistentVolumeSource.RBD == nil { + x.PersistentVolumeSource.RBD = new(RBDVolumeSource) + } + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + case "quobyte": + if x.PersistentVolumeSource.Quobyte == nil { + x.PersistentVolumeSource.Quobyte = new(QuobyteVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + case "iscsi": + if x.PersistentVolumeSource.ISCSI == nil { + x.PersistentVolumeSource.ISCSI = new(ISCSIVolumeSource) + } + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + case "flexVolume": + if x.PersistentVolumeSource.FlexVolume == nil { + x.PersistentVolumeSource.FlexVolume = new(FlexVolumeSource) + } + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + case "cinder": + if x.PersistentVolumeSource.Cinder == nil { + x.PersistentVolumeSource.Cinder = new(CinderVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + case "cephfs": + if x.PersistentVolumeSource.CephFS == nil { + x.PersistentVolumeSource.CephFS = new(CephFSVolumeSource) + } + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + case "fc": + if x.PersistentVolumeSource.FC == nil { + x.PersistentVolumeSource.FC = new(FCVolumeSource) + } + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + case "flocker": + if x.PersistentVolumeSource.Flocker == nil { + x.PersistentVolumeSource.Flocker = new(FlockerVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + case "azureFile": + if x.PersistentVolumeSource.AzureFile == nil { + x.PersistentVolumeSource.AzureFile = new(AzureFileVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + case "vsphereVolume": + if x.PersistentVolumeSource.VsphereVolume == nil { + x.PersistentVolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + case "azureDisk": + if x.PersistentVolumeSource.AzureDisk == nil { + x.PersistentVolumeSource.AzureDisk = new(AzureDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + case "accessModes": + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv394 := &x.AccessModes + yym395 := z.DecBinary() + _ = yym395 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv394), d) + } + } + case "claimRef": + if r.TryDecodeAsNil() { + if x.ClaimRef != nil { + x.ClaimRef = nil + } + } else { + if x.ClaimRef == nil { + x.ClaimRef = new(ObjectReference) + } + x.ClaimRef.CodecDecodeSelf(d) + } + case "persistentVolumeReclaimPolicy": + if r.TryDecodeAsNil() { + x.PersistentVolumeReclaimPolicy = "" + } else { + x.PersistentVolumeReclaimPolicy = PersistentVolumeReclaimPolicy(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys376) + } // end switch yys376 + } // end for yyj376 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj398 int + var yyb398 bool + var yyhl398 bool = l >= 0 + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv399 := &x.Capacity + yyv399.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.GCEPersistentDisk == nil { + x.PersistentVolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.AWSElasticBlockStore == nil { + x.PersistentVolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.HostPath == nil { + x.PersistentVolumeSource.HostPath = new(HostPathVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.Glusterfs == nil { + x.PersistentVolumeSource.Glusterfs = new(GlusterfsVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.NFS == nil { + x.PersistentVolumeSource.NFS = new(NFSVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.RBD == nil { + x.PersistentVolumeSource.RBD = new(RBDVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.Quobyte == nil { + x.PersistentVolumeSource.Quobyte = new(QuobyteVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.ISCSI == nil { + x.PersistentVolumeSource.ISCSI = new(ISCSIVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.FlexVolume == nil { + x.PersistentVolumeSource.FlexVolume = new(FlexVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.Cinder == nil { + x.PersistentVolumeSource.Cinder = new(CinderVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.CephFS == nil { + x.PersistentVolumeSource.CephFS = new(CephFSVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.FC == nil { + x.PersistentVolumeSource.FC = new(FCVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.Flocker == nil { + x.PersistentVolumeSource.Flocker = new(FlockerVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.AzureFile == nil { + x.PersistentVolumeSource.AzureFile = new(AzureFileVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.VsphereVolume == nil { + x.PersistentVolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.AzureDisk == nil { + x.PersistentVolumeSource.AzureDisk = new(AzureDiskVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv416 := &x.AccessModes + yym417 := z.DecBinary() + _ = yym417 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv416), d) + } + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ClaimRef != nil { + x.ClaimRef = nil + } + } else { + if x.ClaimRef == nil { + x.ClaimRef = new(ObjectReference) + } + x.ClaimRef.CodecDecodeSelf(d) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PersistentVolumeReclaimPolicy = "" + } else { + x.PersistentVolumeReclaimPolicy = PersistentVolumeReclaimPolicy(r.DecodeString()) + } + for { + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj398-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PersistentVolumeReclaimPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym420 := z.EncBinary() + _ = yym420 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PersistentVolumeReclaimPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym421 := z.DecBinary() + _ = yym421 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *PersistentVolumeStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym422 := z.EncBinary() + _ = yym422 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep423 := !z.EncBinary() + yy2arr423 := z.EncBasicHandle().StructToArray + var yyq423 [3]bool + _, _, _ = yysep423, yyq423, yy2arr423 + const yyr423 bool = false + yyq423[0] = x.Phase != "" + yyq423[1] = x.Message != "" + yyq423[2] = x.Reason != "" + var yynn423 int + if yyr423 || yy2arr423 { + r.EncodeArrayStart(3) + } else { + yynn423 = 0 + for _, b := range yyq423 { + if b { + yynn423++ + } + } + r.EncodeMapStart(yynn423) + yynn423 = 0 + } + if yyr423 || yy2arr423 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq423[0] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq423[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr423 || yy2arr423 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq423[1] { + yym426 := z.EncBinary() + _ = yym426 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq423[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym427 := z.EncBinary() + _ = yym427 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr423 || yy2arr423 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq423[2] { + yym429 := z.EncBinary() + _ = yym429 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq423[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym430 := z.EncBinary() + _ = yym430 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr423 || yy2arr423 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym431 := z.DecBinary() + _ = yym431 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct432 := r.ContainerType() + if yyct432 == codecSelferValueTypeMap1234 { + yyl432 := r.ReadMapStart() + if yyl432 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl432, d) + } + } else if yyct432 == codecSelferValueTypeArray1234 { + yyl432 := r.ReadArrayStart() + if yyl432 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl432, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys433Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys433Slc + var yyhl433 bool = l >= 0 + for yyj433 := 0; ; yyj433++ { + if yyhl433 { + if yyj433 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys433Slc = r.DecodeBytes(yys433Slc, true, true) + yys433 := string(yys433Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys433 { + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PersistentVolumePhase(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys433) + } // end switch yys433 + } // end for yyj433 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj437 int + var yyb437 bool + var yyhl437 bool = l >= 0 + yyj437++ + if yyhl437 { + yyb437 = yyj437 > l + } else { + yyb437 = r.CheckBreak() + } + if yyb437 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PersistentVolumePhase(r.DecodeString()) + } + yyj437++ + if yyhl437 { + yyb437 = yyj437 > l + } else { + yyb437 = r.CheckBreak() + } + if yyb437 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj437++ + if yyhl437 { + yyb437 = yyj437 > l + } else { + yyb437 = r.CheckBreak() + } + if yyb437 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + for { + yyj437++ + if yyhl437 { + yyb437 = yyj437 > l + } else { + yyb437 = r.CheckBreak() + } + if yyb437 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj437-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym441 := z.EncBinary() + _ = yym441 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep442 := !z.EncBinary() + yy2arr442 := z.EncBasicHandle().StructToArray + var yyq442 [4]bool + _, _, _ = yysep442, yyq442, yy2arr442 + const yyr442 bool = false + yyq442[0] = x.Kind != "" + yyq442[1] = x.APIVersion != "" + yyq442[2] = true + var yynn442 int + if yyr442 || yy2arr442 { + r.EncodeArrayStart(4) + } else { + yynn442 = 1 + for _, b := range yyq442 { + if b { + yynn442++ + } + } + r.EncodeMapStart(yynn442) + yynn442 = 0 + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[0] { + yym444 := z.EncBinary() + _ = yym444 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq442[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym445 := z.EncBinary() + _ = yym445 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[1] { + yym447 := z.EncBinary() + _ = yym447 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq442[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym448 := z.EncBinary() + _ = yym448 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[2] { + yy450 := &x.ListMeta + yym451 := z.EncBinary() + _ = yym451 + if false { + } else if z.HasExtensions() && z.EncExt(yy450) { + } else { + z.EncFallback(yy450) + } + } else { + r.EncodeNil() + } + } else { + if yyq442[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy452 := &x.ListMeta + yym453 := z.EncBinary() + _ = yym453 + if false { + } else if z.HasExtensions() && z.EncExt(yy452) { + } else { + z.EncFallback(yy452) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym455 := z.EncBinary() + _ = yym455 + if false { + } else { + h.encSlicePersistentVolume(([]PersistentVolume)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym456 := z.EncBinary() + _ = yym456 + if false { + } else { + h.encSlicePersistentVolume(([]PersistentVolume)(x.Items), e) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym457 := z.DecBinary() + _ = yym457 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct458 := r.ContainerType() + if yyct458 == codecSelferValueTypeMap1234 { + yyl458 := r.ReadMapStart() + if yyl458 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl458, d) + } + } else if yyct458 == codecSelferValueTypeArray1234 { + yyl458 := r.ReadArrayStart() + if yyl458 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl458, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys459Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys459Slc + var yyhl459 bool = l >= 0 + for yyj459 := 0; ; yyj459++ { + if yyhl459 { + if yyj459 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys459Slc = r.DecodeBytes(yys459Slc, true, true) + yys459 := string(yys459Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys459 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv462 := &x.ListMeta + yym463 := z.DecBinary() + _ = yym463 + if false { + } else if z.HasExtensions() && z.DecExt(yyv462) { + } else { + z.DecFallback(yyv462, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv464 := &x.Items + yym465 := z.DecBinary() + _ = yym465 + if false { + } else { + h.decSlicePersistentVolume((*[]PersistentVolume)(yyv464), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys459) + } // end switch yys459 + } // end for yyj459 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj466 int + var yyb466 bool + var yyhl466 bool = l >= 0 + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv469 := &x.ListMeta + yym470 := z.DecBinary() + _ = yym470 + if false { + } else if z.HasExtensions() && z.DecExt(yyv469) { + } else { + z.DecFallback(yyv469, false) + } + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv471 := &x.Items + yym472 := z.DecBinary() + _ = yym472 + if false { + } else { + h.decSlicePersistentVolume((*[]PersistentVolume)(yyv471), d) + } + } + for { + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj466-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaim) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym473 := z.EncBinary() + _ = yym473 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep474 := !z.EncBinary() + yy2arr474 := z.EncBasicHandle().StructToArray + var yyq474 [5]bool + _, _, _ = yysep474, yyq474, yy2arr474 + const yyr474 bool = false + yyq474[0] = x.Kind != "" + yyq474[1] = x.APIVersion != "" + yyq474[2] = true + yyq474[3] = true + yyq474[4] = true + var yynn474 int + if yyr474 || yy2arr474 { + r.EncodeArrayStart(5) + } else { + yynn474 = 0 + for _, b := range yyq474 { + if b { + yynn474++ + } + } + r.EncodeMapStart(yynn474) + yynn474 = 0 + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[0] { + yym476 := z.EncBinary() + _ = yym476 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq474[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym477 := z.EncBinary() + _ = yym477 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[1] { + yym479 := z.EncBinary() + _ = yym479 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq474[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym480 := z.EncBinary() + _ = yym480 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[2] { + yy482 := &x.ObjectMeta + yy482.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq474[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy483 := &x.ObjectMeta + yy483.CodecEncodeSelf(e) + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[3] { + yy485 := &x.Spec + yy485.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq474[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy486 := &x.Spec + yy486.CodecEncodeSelf(e) + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[4] { + yy488 := &x.Status + yy488.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq474[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy489 := &x.Status + yy489.CodecEncodeSelf(e) + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaim) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym490 := z.DecBinary() + _ = yym490 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct491 := r.ContainerType() + if yyct491 == codecSelferValueTypeMap1234 { + yyl491 := r.ReadMapStart() + if yyl491 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl491, d) + } + } else if yyct491 == codecSelferValueTypeArray1234 { + yyl491 := r.ReadArrayStart() + if yyl491 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl491, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaim) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys492Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys492Slc + var yyhl492 bool = l >= 0 + for yyj492 := 0; ; yyj492++ { + if yyhl492 { + if yyj492 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys492Slc = r.DecodeBytes(yys492Slc, true, true) + yys492 := string(yys492Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys492 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv495 := &x.ObjectMeta + yyv495.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PersistentVolumeClaimSpec{} + } else { + yyv496 := &x.Spec + yyv496.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = PersistentVolumeClaimStatus{} + } else { + yyv497 := &x.Status + yyv497.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys492) + } // end switch yys492 + } // end for yyj492 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaim) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj498 int + var yyb498 bool + var yyhl498 bool = l >= 0 + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv501 := &x.ObjectMeta + yyv501.CodecDecodeSelf(d) + } + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PersistentVolumeClaimSpec{} + } else { + yyv502 := &x.Spec + yyv502.CodecDecodeSelf(d) + } + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = PersistentVolumeClaimStatus{} + } else { + yyv503 := &x.Status + yyv503.CodecDecodeSelf(d) + } + for { + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj498-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaimList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym504 := z.EncBinary() + _ = yym504 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep505 := !z.EncBinary() + yy2arr505 := z.EncBasicHandle().StructToArray + var yyq505 [4]bool + _, _, _ = yysep505, yyq505, yy2arr505 + const yyr505 bool = false + yyq505[0] = x.Kind != "" + yyq505[1] = x.APIVersion != "" + yyq505[2] = true + var yynn505 int + if yyr505 || yy2arr505 { + r.EncodeArrayStart(4) + } else { + yynn505 = 1 + for _, b := range yyq505 { + if b { + yynn505++ + } + } + r.EncodeMapStart(yynn505) + yynn505 = 0 + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq505[0] { + yym507 := z.EncBinary() + _ = yym507 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq505[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym508 := z.EncBinary() + _ = yym508 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq505[1] { + yym510 := z.EncBinary() + _ = yym510 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq505[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym511 := z.EncBinary() + _ = yym511 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq505[2] { + yy513 := &x.ListMeta + yym514 := z.EncBinary() + _ = yym514 + if false { + } else if z.HasExtensions() && z.EncExt(yy513) { + } else { + z.EncFallback(yy513) + } + } else { + r.EncodeNil() + } + } else { + if yyq505[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy515 := &x.ListMeta + yym516 := z.EncBinary() + _ = yym516 + if false { + } else if z.HasExtensions() && z.EncExt(yy515) { + } else { + z.EncFallback(yy515) + } + } + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym518 := z.EncBinary() + _ = yym518 + if false { + } else { + h.encSlicePersistentVolumeClaim(([]PersistentVolumeClaim)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym519 := z.EncBinary() + _ = yym519 + if false { + } else { + h.encSlicePersistentVolumeClaim(([]PersistentVolumeClaim)(x.Items), e) + } + } + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaimList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym520 := z.DecBinary() + _ = yym520 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct521 := r.ContainerType() + if yyct521 == codecSelferValueTypeMap1234 { + yyl521 := r.ReadMapStart() + if yyl521 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl521, d) + } + } else if yyct521 == codecSelferValueTypeArray1234 { + yyl521 := r.ReadArrayStart() + if yyl521 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl521, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaimList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys522Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys522Slc + var yyhl522 bool = l >= 0 + for yyj522 := 0; ; yyj522++ { + if yyhl522 { + if yyj522 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys522Slc = r.DecodeBytes(yys522Slc, true, true) + yys522 := string(yys522Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys522 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv525 := &x.ListMeta + yym526 := z.DecBinary() + _ = yym526 + if false { + } else if z.HasExtensions() && z.DecExt(yyv525) { + } else { + z.DecFallback(yyv525, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv527 := &x.Items + yym528 := z.DecBinary() + _ = yym528 + if false { + } else { + h.decSlicePersistentVolumeClaim((*[]PersistentVolumeClaim)(yyv527), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys522) + } // end switch yys522 + } // end for yyj522 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaimList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj529 int + var yyb529 bool + var yyhl529 bool = l >= 0 + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv532 := &x.ListMeta + yym533 := z.DecBinary() + _ = yym533 + if false { + } else if z.HasExtensions() && z.DecExt(yyv532) { + } else { + z.DecFallback(yyv532, false) + } + } + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv534 := &x.Items + yym535 := z.DecBinary() + _ = yym535 + if false { + } else { + h.decSlicePersistentVolumeClaim((*[]PersistentVolumeClaim)(yyv534), d) + } + } + for { + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj529-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaimSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym536 := z.EncBinary() + _ = yym536 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep537 := !z.EncBinary() + yy2arr537 := z.EncBasicHandle().StructToArray + var yyq537 [4]bool + _, _, _ = yysep537, yyq537, yy2arr537 + const yyr537 bool = false + yyq537[0] = len(x.AccessModes) != 0 + yyq537[1] = x.Selector != nil + yyq537[2] = true + yyq537[3] = x.VolumeName != "" + var yynn537 int + if yyr537 || yy2arr537 { + r.EncodeArrayStart(4) + } else { + yynn537 = 0 + for _, b := range yyq537 { + if b { + yynn537++ + } + } + r.EncodeMapStart(yynn537) + yynn537 = 0 + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq537[0] { + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym539 := z.EncBinary() + _ = yym539 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq537[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("accessModes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym540 := z.EncBinary() + _ = yym540 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq537[1] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym542 := z.EncBinary() + _ = yym542 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq537[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym543 := z.EncBinary() + _ = yym543 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq537[2] { + yy545 := &x.Resources + yy545.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq537[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resources")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy546 := &x.Resources + yy546.CodecEncodeSelf(e) + } + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq537[3] { + yym548 := z.EncBinary() + _ = yym548 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq537[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym549 := z.EncBinary() + _ = yym549 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeName)) + } + } + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaimSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym550 := z.DecBinary() + _ = yym550 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct551 := r.ContainerType() + if yyct551 == codecSelferValueTypeMap1234 { + yyl551 := r.ReadMapStart() + if yyl551 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl551, d) + } + } else if yyct551 == codecSelferValueTypeArray1234 { + yyl551 := r.ReadArrayStart() + if yyl551 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl551, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaimSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys552Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys552Slc + var yyhl552 bool = l >= 0 + for yyj552 := 0; ; yyj552++ { + if yyhl552 { + if yyj552 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys552Slc = r.DecodeBytes(yys552Slc, true, true) + yys552 := string(yys552Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys552 { + case "accessModes": + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv553 := &x.AccessModes + yym554 := z.DecBinary() + _ = yym554 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv553), d) + } + } + case "selector": + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg2_unversioned.LabelSelector) + } + yym556 := z.DecBinary() + _ = yym556 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + case "resources": + if r.TryDecodeAsNil() { + x.Resources = ResourceRequirements{} + } else { + yyv557 := &x.Resources + yyv557.CodecDecodeSelf(d) + } + case "volumeName": + if r.TryDecodeAsNil() { + x.VolumeName = "" + } else { + x.VolumeName = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys552) + } // end switch yys552 + } // end for yyj552 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaimSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj559 int + var yyb559 bool + var yyhl559 bool = l >= 0 + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv560 := &x.AccessModes + yym561 := z.DecBinary() + _ = yym561 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv560), d) + } + } + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg2_unversioned.LabelSelector) + } + yym563 := z.DecBinary() + _ = yym563 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Resources = ResourceRequirements{} + } else { + yyv564 := &x.Resources + yyv564.CodecDecodeSelf(d) + } + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeName = "" + } else { + x.VolumeName = string(r.DecodeString()) + } + for { + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj559-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaimStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym566 := z.EncBinary() + _ = yym566 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep567 := !z.EncBinary() + yy2arr567 := z.EncBasicHandle().StructToArray + var yyq567 [3]bool + _, _, _ = yysep567, yyq567, yy2arr567 + const yyr567 bool = false + yyq567[0] = x.Phase != "" + yyq567[1] = len(x.AccessModes) != 0 + yyq567[2] = len(x.Capacity) != 0 + var yynn567 int + if yyr567 || yy2arr567 { + r.EncodeArrayStart(3) + } else { + yynn567 = 0 + for _, b := range yyq567 { + if b { + yynn567++ + } + } + r.EncodeMapStart(yynn567) + yynn567 = 0 + } + if yyr567 || yy2arr567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq567[0] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq567[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr567 || yy2arr567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq567[1] { + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym570 := z.EncBinary() + _ = yym570 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq567[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("accessModes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym571 := z.EncBinary() + _ = yym571 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } + } + if yyr567 || yy2arr567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq567[2] { + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq567[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capacity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } + } + if yyr567 || yy2arr567 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaimStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym573 := z.DecBinary() + _ = yym573 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct574 := r.ContainerType() + if yyct574 == codecSelferValueTypeMap1234 { + yyl574 := r.ReadMapStart() + if yyl574 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl574, d) + } + } else if yyct574 == codecSelferValueTypeArray1234 { + yyl574 := r.ReadArrayStart() + if yyl574 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl574, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaimStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys575Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys575Slc + var yyhl575 bool = l >= 0 + for yyj575 := 0; ; yyj575++ { + if yyhl575 { + if yyj575 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys575Slc = r.DecodeBytes(yys575Slc, true, true) + yys575 := string(yys575Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys575 { + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PersistentVolumeClaimPhase(r.DecodeString()) + } + case "accessModes": + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv577 := &x.AccessModes + yym578 := z.DecBinary() + _ = yym578 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv577), d) + } + } + case "capacity": + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv579 := &x.Capacity + yyv579.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys575) + } // end switch yys575 + } // end for yyj575 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaimStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj580 int + var yyb580 bool + var yyhl580 bool = l >= 0 + yyj580++ + if yyhl580 { + yyb580 = yyj580 > l + } else { + yyb580 = r.CheckBreak() + } + if yyb580 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PersistentVolumeClaimPhase(r.DecodeString()) + } + yyj580++ + if yyhl580 { + yyb580 = yyj580 > l + } else { + yyb580 = r.CheckBreak() + } + if yyb580 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv582 := &x.AccessModes + yym583 := z.DecBinary() + _ = yym583 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv582), d) + } + } + yyj580++ + if yyhl580 { + yyb580 = yyj580 > l + } else { + yyb580 = r.CheckBreak() + } + if yyb580 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv584 := &x.Capacity + yyv584.CodecDecodeSelf(d) + } + for { + yyj580++ + if yyhl580 { + yyb580 = yyj580 > l + } else { + yyb580 = r.CheckBreak() + } + if yyb580 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj580-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PersistentVolumeAccessMode) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym585 := z.EncBinary() + _ = yym585 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PersistentVolumeAccessMode) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym586 := z.DecBinary() + _ = yym586 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x PersistentVolumePhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym587 := z.EncBinary() + _ = yym587 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PersistentVolumePhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym588 := z.DecBinary() + _ = yym588 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x PersistentVolumeClaimPhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym589 := z.EncBinary() + _ = yym589 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PersistentVolumeClaimPhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym590 := z.DecBinary() + _ = yym590 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *HostPathVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym591 := z.EncBinary() + _ = yym591 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep592 := !z.EncBinary() + yy2arr592 := z.EncBasicHandle().StructToArray + var yyq592 [1]bool + _, _, _ = yysep592, yyq592, yy2arr592 + const yyr592 bool = false + var yynn592 int + if yyr592 || yy2arr592 { + r.EncodeArrayStart(1) + } else { + yynn592 = 1 + for _, b := range yyq592 { + if b { + yynn592++ + } + } + r.EncodeMapStart(yynn592) + yynn592 = 0 + } + if yyr592 || yy2arr592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym594 := z.EncBinary() + _ = yym594 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym595 := z.EncBinary() + _ = yym595 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr592 || yy2arr592 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HostPathVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym596 := z.DecBinary() + _ = yym596 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct597 := r.ContainerType() + if yyct597 == codecSelferValueTypeMap1234 { + yyl597 := r.ReadMapStart() + if yyl597 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl597, d) + } + } else if yyct597 == codecSelferValueTypeArray1234 { + yyl597 := r.ReadArrayStart() + if yyl597 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl597, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HostPathVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys598Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys598Slc + var yyhl598 bool = l >= 0 + for yyj598 := 0; ; yyj598++ { + if yyhl598 { + if yyj598 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys598Slc = r.DecodeBytes(yys598Slc, true, true) + yys598 := string(yys598Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys598 { + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys598) + } // end switch yys598 + } // end for yyj598 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HostPathVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj600 int + var yyb600 bool + var yyhl600 bool = l >= 0 + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + for { + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj600-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EmptyDirVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym602 := z.EncBinary() + _ = yym602 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep603 := !z.EncBinary() + yy2arr603 := z.EncBasicHandle().StructToArray + var yyq603 [1]bool + _, _, _ = yysep603, yyq603, yy2arr603 + const yyr603 bool = false + yyq603[0] = x.Medium != "" + var yynn603 int + if yyr603 || yy2arr603 { + r.EncodeArrayStart(1) + } else { + yynn603 = 0 + for _, b := range yyq603 { + if b { + yynn603++ + } + } + r.EncodeMapStart(yynn603) + yynn603 = 0 + } + if yyr603 || yy2arr603 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq603[0] { + x.Medium.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq603[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("medium")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Medium.CodecEncodeSelf(e) + } + } + if yyr603 || yy2arr603 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EmptyDirVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym605 := z.DecBinary() + _ = yym605 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct606 := r.ContainerType() + if yyct606 == codecSelferValueTypeMap1234 { + yyl606 := r.ReadMapStart() + if yyl606 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl606, d) + } + } else if yyct606 == codecSelferValueTypeArray1234 { + yyl606 := r.ReadArrayStart() + if yyl606 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl606, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EmptyDirVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys607Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys607Slc + var yyhl607 bool = l >= 0 + for yyj607 := 0; ; yyj607++ { + if yyhl607 { + if yyj607 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys607Slc = r.DecodeBytes(yys607Slc, true, true) + yys607 := string(yys607Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys607 { + case "medium": + if r.TryDecodeAsNil() { + x.Medium = "" + } else { + x.Medium = StorageMedium(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys607) + } // end switch yys607 + } // end for yyj607 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EmptyDirVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj609 int + var yyb609 bool + var yyhl609 bool = l >= 0 + yyj609++ + if yyhl609 { + yyb609 = yyj609 > l + } else { + yyb609 = r.CheckBreak() + } + if yyb609 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Medium = "" + } else { + x.Medium = StorageMedium(r.DecodeString()) + } + for { + yyj609++ + if yyhl609 { + yyb609 = yyj609 > l + } else { + yyb609 = r.CheckBreak() + } + if yyb609 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj609-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x StorageMedium) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym611 := z.EncBinary() + _ = yym611 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *StorageMedium) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym612 := z.DecBinary() + _ = yym612 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x Protocol) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym613 := z.EncBinary() + _ = yym613 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *Protocol) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym614 := z.DecBinary() + _ = yym614 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *GCEPersistentDiskVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym615 := z.EncBinary() + _ = yym615 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep616 := !z.EncBinary() + yy2arr616 := z.EncBasicHandle().StructToArray + var yyq616 [4]bool + _, _, _ = yysep616, yyq616, yy2arr616 + const yyr616 bool = false + yyq616[1] = x.FSType != "" + yyq616[2] = x.Partition != 0 + yyq616[3] = x.ReadOnly != false + var yynn616 int + if yyr616 || yy2arr616 { + r.EncodeArrayStart(4) + } else { + yynn616 = 1 + for _, b := range yyq616 { + if b { + yynn616++ + } + } + r.EncodeMapStart(yynn616) + yynn616 = 0 + } + if yyr616 || yy2arr616 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym618 := z.EncBinary() + _ = yym618 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PDName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("pdName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym619 := z.EncBinary() + _ = yym619 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PDName)) + } + } + if yyr616 || yy2arr616 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq616[1] { + yym621 := z.EncBinary() + _ = yym621 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq616[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym622 := z.EncBinary() + _ = yym622 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr616 || yy2arr616 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq616[2] { + yym624 := z.EncBinary() + _ = yym624 + if false { + } else { + r.EncodeInt(int64(x.Partition)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq616[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("partition")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym625 := z.EncBinary() + _ = yym625 + if false { + } else { + r.EncodeInt(int64(x.Partition)) + } + } + } + if yyr616 || yy2arr616 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq616[3] { + yym627 := z.EncBinary() + _ = yym627 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq616[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym628 := z.EncBinary() + _ = yym628 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr616 || yy2arr616 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *GCEPersistentDiskVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym629 := z.DecBinary() + _ = yym629 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct630 := r.ContainerType() + if yyct630 == codecSelferValueTypeMap1234 { + yyl630 := r.ReadMapStart() + if yyl630 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl630, d) + } + } else if yyct630 == codecSelferValueTypeArray1234 { + yyl630 := r.ReadArrayStart() + if yyl630 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl630, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *GCEPersistentDiskVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys631Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys631Slc + var yyhl631 bool = l >= 0 + for yyj631 := 0; ; yyj631++ { + if yyhl631 { + if yyj631 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys631Slc = r.DecodeBytes(yys631Slc, true, true) + yys631 := string(yys631Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys631 { + case "pdName": + if r.TryDecodeAsNil() { + x.PDName = "" + } else { + x.PDName = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "partition": + if r.TryDecodeAsNil() { + x.Partition = 0 + } else { + x.Partition = int32(r.DecodeInt(32)) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys631) + } // end switch yys631 + } // end for yyj631 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *GCEPersistentDiskVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj636 int + var yyb636 bool + var yyhl636 bool = l >= 0 + yyj636++ + if yyhl636 { + yyb636 = yyj636 > l + } else { + yyb636 = r.CheckBreak() + } + if yyb636 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PDName = "" + } else { + x.PDName = string(r.DecodeString()) + } + yyj636++ + if yyhl636 { + yyb636 = yyj636 > l + } else { + yyb636 = r.CheckBreak() + } + if yyb636 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj636++ + if yyhl636 { + yyb636 = yyj636 > l + } else { + yyb636 = r.CheckBreak() + } + if yyb636 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Partition = 0 + } else { + x.Partition = int32(r.DecodeInt(32)) + } + yyj636++ + if yyhl636 { + yyb636 = yyj636 > l + } else { + yyb636 = r.CheckBreak() + } + if yyb636 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj636++ + if yyhl636 { + yyb636 = yyj636 > l + } else { + yyb636 = r.CheckBreak() + } + if yyb636 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj636-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ISCSIVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym641 := z.EncBinary() + _ = yym641 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep642 := !z.EncBinary() + yy2arr642 := z.EncBasicHandle().StructToArray + var yyq642 [6]bool + _, _, _ = yysep642, yyq642, yy2arr642 + const yyr642 bool = false + yyq642[0] = x.TargetPortal != "" + yyq642[1] = x.IQN != "" + yyq642[2] = x.Lun != 0 + yyq642[3] = x.ISCSIInterface != "" + yyq642[4] = x.FSType != "" + yyq642[5] = x.ReadOnly != false + var yynn642 int + if yyr642 || yy2arr642 { + r.EncodeArrayStart(6) + } else { + yynn642 = 0 + for _, b := range yyq642 { + if b { + yynn642++ + } + } + r.EncodeMapStart(yynn642) + yynn642 = 0 + } + if yyr642 || yy2arr642 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq642[0] { + yym644 := z.EncBinary() + _ = yym644 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TargetPortal)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq642[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("targetPortal")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym645 := z.EncBinary() + _ = yym645 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TargetPortal)) + } + } + } + if yyr642 || yy2arr642 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq642[1] { + yym647 := z.EncBinary() + _ = yym647 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IQN)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq642[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iqn")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym648 := z.EncBinary() + _ = yym648 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IQN)) + } + } + } + if yyr642 || yy2arr642 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq642[2] { + yym650 := z.EncBinary() + _ = yym650 + if false { + } else { + r.EncodeInt(int64(x.Lun)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq642[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lun")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym651 := z.EncBinary() + _ = yym651 + if false { + } else { + r.EncodeInt(int64(x.Lun)) + } + } + } + if yyr642 || yy2arr642 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq642[3] { + yym653 := z.EncBinary() + _ = yym653 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ISCSIInterface)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq642[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsiInterface")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym654 := z.EncBinary() + _ = yym654 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ISCSIInterface)) + } + } + } + if yyr642 || yy2arr642 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq642[4] { + yym656 := z.EncBinary() + _ = yym656 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq642[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym657 := z.EncBinary() + _ = yym657 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr642 || yy2arr642 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq642[5] { + yym659 := z.EncBinary() + _ = yym659 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq642[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym660 := z.EncBinary() + _ = yym660 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr642 || yy2arr642 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ISCSIVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym661 := z.DecBinary() + _ = yym661 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct662 := r.ContainerType() + if yyct662 == codecSelferValueTypeMap1234 { + yyl662 := r.ReadMapStart() + if yyl662 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl662, d) + } + } else if yyct662 == codecSelferValueTypeArray1234 { + yyl662 := r.ReadArrayStart() + if yyl662 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl662, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ISCSIVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys663Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys663Slc + var yyhl663 bool = l >= 0 + for yyj663 := 0; ; yyj663++ { + if yyhl663 { + if yyj663 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys663Slc = r.DecodeBytes(yys663Slc, true, true) + yys663 := string(yys663Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys663 { + case "targetPortal": + if r.TryDecodeAsNil() { + x.TargetPortal = "" + } else { + x.TargetPortal = string(r.DecodeString()) + } + case "iqn": + if r.TryDecodeAsNil() { + x.IQN = "" + } else { + x.IQN = string(r.DecodeString()) + } + case "lun": + if r.TryDecodeAsNil() { + x.Lun = 0 + } else { + x.Lun = int32(r.DecodeInt(32)) + } + case "iscsiInterface": + if r.TryDecodeAsNil() { + x.ISCSIInterface = "" + } else { + x.ISCSIInterface = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys663) + } // end switch yys663 + } // end for yyj663 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ISCSIVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj670 int + var yyb670 bool + var yyhl670 bool = l >= 0 + yyj670++ + if yyhl670 { + yyb670 = yyj670 > l + } else { + yyb670 = r.CheckBreak() + } + if yyb670 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TargetPortal = "" + } else { + x.TargetPortal = string(r.DecodeString()) + } + yyj670++ + if yyhl670 { + yyb670 = yyj670 > l + } else { + yyb670 = r.CheckBreak() + } + if yyb670 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.IQN = "" + } else { + x.IQN = string(r.DecodeString()) + } + yyj670++ + if yyhl670 { + yyb670 = yyj670 > l + } else { + yyb670 = r.CheckBreak() + } + if yyb670 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Lun = 0 + } else { + x.Lun = int32(r.DecodeInt(32)) + } + yyj670++ + if yyhl670 { + yyb670 = yyj670 > l + } else { + yyb670 = r.CheckBreak() + } + if yyb670 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ISCSIInterface = "" + } else { + x.ISCSIInterface = string(r.DecodeString()) + } + yyj670++ + if yyhl670 { + yyb670 = yyj670 > l + } else { + yyb670 = r.CheckBreak() + } + if yyb670 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj670++ + if yyhl670 { + yyb670 = yyj670 > l + } else { + yyb670 = r.CheckBreak() + } + if yyb670 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj670++ + if yyhl670 { + yyb670 = yyj670 > l + } else { + yyb670 = r.CheckBreak() + } + if yyb670 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj670-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *FCVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym677 := z.EncBinary() + _ = yym677 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep678 := !z.EncBinary() + yy2arr678 := z.EncBasicHandle().StructToArray + var yyq678 [4]bool + _, _, _ = yysep678, yyq678, yy2arr678 + const yyr678 bool = false + yyq678[2] = x.FSType != "" + yyq678[3] = x.ReadOnly != false + var yynn678 int + if yyr678 || yy2arr678 { + r.EncodeArrayStart(4) + } else { + yynn678 = 2 + for _, b := range yyq678 { + if b { + yynn678++ + } + } + r.EncodeMapStart(yynn678) + yynn678 = 0 + } + if yyr678 || yy2arr678 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.TargetWWNs == nil { + r.EncodeNil() + } else { + yym680 := z.EncBinary() + _ = yym680 + if false { + } else { + z.F.EncSliceStringV(x.TargetWWNs, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("targetWWNs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TargetWWNs == nil { + r.EncodeNil() + } else { + yym681 := z.EncBinary() + _ = yym681 + if false { + } else { + z.F.EncSliceStringV(x.TargetWWNs, false, e) + } + } + } + if yyr678 || yy2arr678 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Lun == nil { + r.EncodeNil() + } else { + yy683 := *x.Lun + yym684 := z.EncBinary() + _ = yym684 + if false { + } else { + r.EncodeInt(int64(yy683)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lun")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Lun == nil { + r.EncodeNil() + } else { + yy685 := *x.Lun + yym686 := z.EncBinary() + _ = yym686 + if false { + } else { + r.EncodeInt(int64(yy685)) + } + } + } + if yyr678 || yy2arr678 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq678[2] { + yym688 := z.EncBinary() + _ = yym688 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq678[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym689 := z.EncBinary() + _ = yym689 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr678 || yy2arr678 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq678[3] { + yym691 := z.EncBinary() + _ = yym691 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq678[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym692 := z.EncBinary() + _ = yym692 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr678 || yy2arr678 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *FCVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym693 := z.DecBinary() + _ = yym693 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct694 := r.ContainerType() + if yyct694 == codecSelferValueTypeMap1234 { + yyl694 := r.ReadMapStart() + if yyl694 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl694, d) + } + } else if yyct694 == codecSelferValueTypeArray1234 { + yyl694 := r.ReadArrayStart() + if yyl694 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl694, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *FCVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys695Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys695Slc + var yyhl695 bool = l >= 0 + for yyj695 := 0; ; yyj695++ { + if yyhl695 { + if yyj695 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys695Slc = r.DecodeBytes(yys695Slc, true, true) + yys695 := string(yys695Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys695 { + case "targetWWNs": + if r.TryDecodeAsNil() { + x.TargetWWNs = nil + } else { + yyv696 := &x.TargetWWNs + yym697 := z.DecBinary() + _ = yym697 + if false { + } else { + z.F.DecSliceStringX(yyv696, false, d) + } + } + case "lun": + if r.TryDecodeAsNil() { + if x.Lun != nil { + x.Lun = nil + } + } else { + if x.Lun == nil { + x.Lun = new(int32) + } + yym699 := z.DecBinary() + _ = yym699 + if false { + } else { + *((*int32)(x.Lun)) = int32(r.DecodeInt(32)) + } + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys695) + } // end switch yys695 + } // end for yyj695 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *FCVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj702 int + var yyb702 bool + var yyhl702 bool = l >= 0 + yyj702++ + if yyhl702 { + yyb702 = yyj702 > l + } else { + yyb702 = r.CheckBreak() + } + if yyb702 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TargetWWNs = nil + } else { + yyv703 := &x.TargetWWNs + yym704 := z.DecBinary() + _ = yym704 + if false { + } else { + z.F.DecSliceStringX(yyv703, false, d) + } + } + yyj702++ + if yyhl702 { + yyb702 = yyj702 > l + } else { + yyb702 = r.CheckBreak() + } + if yyb702 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Lun != nil { + x.Lun = nil + } + } else { + if x.Lun == nil { + x.Lun = new(int32) + } + yym706 := z.DecBinary() + _ = yym706 + if false { + } else { + *((*int32)(x.Lun)) = int32(r.DecodeInt(32)) + } + } + yyj702++ + if yyhl702 { + yyb702 = yyj702 > l + } else { + yyb702 = r.CheckBreak() + } + if yyb702 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj702++ + if yyhl702 { + yyb702 = yyj702 > l + } else { + yyb702 = r.CheckBreak() + } + if yyb702 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj702++ + if yyhl702 { + yyb702 = yyj702 > l + } else { + yyb702 = r.CheckBreak() + } + if yyb702 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj702-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *FlexVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym709 := z.EncBinary() + _ = yym709 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep710 := !z.EncBinary() + yy2arr710 := z.EncBasicHandle().StructToArray + var yyq710 [5]bool + _, _, _ = yysep710, yyq710, yy2arr710 + const yyr710 bool = false + yyq710[1] = x.FSType != "" + yyq710[2] = x.SecretRef != nil + yyq710[3] = x.ReadOnly != false + yyq710[4] = len(x.Options) != 0 + var yynn710 int + if yyr710 || yy2arr710 { + r.EncodeArrayStart(5) + } else { + yynn710 = 1 + for _, b := range yyq710 { + if b { + yynn710++ + } + } + r.EncodeMapStart(yynn710) + yynn710 = 0 + } + if yyr710 || yy2arr710 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym712 := z.EncBinary() + _ = yym712 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Driver)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("driver")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym713 := z.EncBinary() + _ = yym713 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Driver)) + } + } + if yyr710 || yy2arr710 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq710[1] { + yym715 := z.EncBinary() + _ = yym715 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq710[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym716 := z.EncBinary() + _ = yym716 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr710 || yy2arr710 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq710[2] { + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq710[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } + } + if yyr710 || yy2arr710 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq710[3] { + yym719 := z.EncBinary() + _ = yym719 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq710[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym720 := z.EncBinary() + _ = yym720 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr710 || yy2arr710 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq710[4] { + if x.Options == nil { + r.EncodeNil() + } else { + yym722 := z.EncBinary() + _ = yym722 + if false { + } else { + z.F.EncMapStringStringV(x.Options, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq710[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("options")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Options == nil { + r.EncodeNil() + } else { + yym723 := z.EncBinary() + _ = yym723 + if false { + } else { + z.F.EncMapStringStringV(x.Options, false, e) + } + } + } + } + if yyr710 || yy2arr710 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *FlexVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym724 := z.DecBinary() + _ = yym724 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct725 := r.ContainerType() + if yyct725 == codecSelferValueTypeMap1234 { + yyl725 := r.ReadMapStart() + if yyl725 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl725, d) + } + } else if yyct725 == codecSelferValueTypeArray1234 { + yyl725 := r.ReadArrayStart() + if yyl725 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl725, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *FlexVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys726Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys726Slc + var yyhl726 bool = l >= 0 + for yyj726 := 0; ; yyj726++ { + if yyhl726 { + if yyj726 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys726Slc = r.DecodeBytes(yys726Slc, true, true) + yys726 := string(yys726Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys726 { + case "driver": + if r.TryDecodeAsNil() { + x.Driver = "" + } else { + x.Driver = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "secretRef": + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + case "options": + if r.TryDecodeAsNil() { + x.Options = nil + } else { + yyv731 := &x.Options + yym732 := z.DecBinary() + _ = yym732 + if false { + } else { + z.F.DecMapStringStringX(yyv731, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys726) + } // end switch yys726 + } // end for yyj726 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *FlexVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj733 int + var yyb733 bool + var yyhl733 bool = l >= 0 + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Driver = "" + } else { + x.Driver = string(r.DecodeString()) + } + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Options = nil + } else { + yyv738 := &x.Options + yym739 := z.DecBinary() + _ = yym739 + if false { + } else { + z.F.DecMapStringStringX(yyv738, false, d) + } + } + for { + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj733-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *AWSElasticBlockStoreVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym740 := z.EncBinary() + _ = yym740 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep741 := !z.EncBinary() + yy2arr741 := z.EncBasicHandle().StructToArray + var yyq741 [4]bool + _, _, _ = yysep741, yyq741, yy2arr741 + const yyr741 bool = false + yyq741[1] = x.FSType != "" + yyq741[2] = x.Partition != 0 + yyq741[3] = x.ReadOnly != false + var yynn741 int + if yyr741 || yy2arr741 { + r.EncodeArrayStart(4) + } else { + yynn741 = 1 + for _, b := range yyq741 { + if b { + yynn741++ + } + } + r.EncodeMapStart(yynn741) + yynn741 = 0 + } + if yyr741 || yy2arr741 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym743 := z.EncBinary() + _ = yym743 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym744 := z.EncBinary() + _ = yym744 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } + if yyr741 || yy2arr741 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq741[1] { + yym746 := z.EncBinary() + _ = yym746 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq741[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym747 := z.EncBinary() + _ = yym747 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr741 || yy2arr741 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq741[2] { + yym749 := z.EncBinary() + _ = yym749 + if false { + } else { + r.EncodeInt(int64(x.Partition)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq741[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("partition")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym750 := z.EncBinary() + _ = yym750 + if false { + } else { + r.EncodeInt(int64(x.Partition)) + } + } + } + if yyr741 || yy2arr741 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq741[3] { + yym752 := z.EncBinary() + _ = yym752 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq741[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym753 := z.EncBinary() + _ = yym753 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr741 || yy2arr741 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AWSElasticBlockStoreVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym754 := z.DecBinary() + _ = yym754 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct755 := r.ContainerType() + if yyct755 == codecSelferValueTypeMap1234 { + yyl755 := r.ReadMapStart() + if yyl755 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl755, d) + } + } else if yyct755 == codecSelferValueTypeArray1234 { + yyl755 := r.ReadArrayStart() + if yyl755 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl755, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AWSElasticBlockStoreVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys756Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys756Slc + var yyhl756 bool = l >= 0 + for yyj756 := 0; ; yyj756++ { + if yyhl756 { + if yyj756 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys756Slc = r.DecodeBytes(yys756Slc, true, true) + yys756 := string(yys756Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys756 { + case "volumeID": + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + x.VolumeID = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "partition": + if r.TryDecodeAsNil() { + x.Partition = 0 + } else { + x.Partition = int32(r.DecodeInt(32)) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys756) + } // end switch yys756 + } // end for yyj756 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AWSElasticBlockStoreVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj761 int + var yyb761 bool + var yyhl761 bool = l >= 0 + yyj761++ + if yyhl761 { + yyb761 = yyj761 > l + } else { + yyb761 = r.CheckBreak() + } + if yyb761 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + x.VolumeID = string(r.DecodeString()) + } + yyj761++ + if yyhl761 { + yyb761 = yyj761 > l + } else { + yyb761 = r.CheckBreak() + } + if yyb761 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj761++ + if yyhl761 { + yyb761 = yyj761 > l + } else { + yyb761 = r.CheckBreak() + } + if yyb761 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Partition = 0 + } else { + x.Partition = int32(r.DecodeInt(32)) + } + yyj761++ + if yyhl761 { + yyb761 = yyj761 > l + } else { + yyb761 = r.CheckBreak() + } + if yyb761 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj761++ + if yyhl761 { + yyb761 = yyj761 > l + } else { + yyb761 = r.CheckBreak() + } + if yyb761 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj761-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *GitRepoVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym766 := z.EncBinary() + _ = yym766 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep767 := !z.EncBinary() + yy2arr767 := z.EncBasicHandle().StructToArray + var yyq767 [3]bool + _, _, _ = yysep767, yyq767, yy2arr767 + const yyr767 bool = false + yyq767[1] = x.Revision != "" + yyq767[2] = x.Directory != "" + var yynn767 int + if yyr767 || yy2arr767 { + r.EncodeArrayStart(3) + } else { + yynn767 = 1 + for _, b := range yyq767 { + if b { + yynn767++ + } + } + r.EncodeMapStart(yynn767) + yynn767 = 0 + } + if yyr767 || yy2arr767 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym769 := z.EncBinary() + _ = yym769 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Repository)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("repository")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym770 := z.EncBinary() + _ = yym770 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Repository)) + } + } + if yyr767 || yy2arr767 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq767[1] { + yym772 := z.EncBinary() + _ = yym772 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Revision)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq767[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("revision")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym773 := z.EncBinary() + _ = yym773 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Revision)) + } + } + } + if yyr767 || yy2arr767 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq767[2] { + yym775 := z.EncBinary() + _ = yym775 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Directory)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq767[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("directory")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym776 := z.EncBinary() + _ = yym776 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Directory)) + } + } + } + if yyr767 || yy2arr767 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *GitRepoVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym777 := z.DecBinary() + _ = yym777 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct778 := r.ContainerType() + if yyct778 == codecSelferValueTypeMap1234 { + yyl778 := r.ReadMapStart() + if yyl778 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl778, d) + } + } else if yyct778 == codecSelferValueTypeArray1234 { + yyl778 := r.ReadArrayStart() + if yyl778 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl778, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *GitRepoVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys779Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys779Slc + var yyhl779 bool = l >= 0 + for yyj779 := 0; ; yyj779++ { + if yyhl779 { + if yyj779 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys779Slc = r.DecodeBytes(yys779Slc, true, true) + yys779 := string(yys779Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys779 { + case "repository": + if r.TryDecodeAsNil() { + x.Repository = "" + } else { + x.Repository = string(r.DecodeString()) + } + case "revision": + if r.TryDecodeAsNil() { + x.Revision = "" + } else { + x.Revision = string(r.DecodeString()) + } + case "directory": + if r.TryDecodeAsNil() { + x.Directory = "" + } else { + x.Directory = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys779) + } // end switch yys779 + } // end for yyj779 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *GitRepoVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj783 int + var yyb783 bool + var yyhl783 bool = l >= 0 + yyj783++ + if yyhl783 { + yyb783 = yyj783 > l + } else { + yyb783 = r.CheckBreak() + } + if yyb783 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Repository = "" + } else { + x.Repository = string(r.DecodeString()) + } + yyj783++ + if yyhl783 { + yyb783 = yyj783 > l + } else { + yyb783 = r.CheckBreak() + } + if yyb783 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Revision = "" + } else { + x.Revision = string(r.DecodeString()) + } + yyj783++ + if yyhl783 { + yyb783 = yyj783 > l + } else { + yyb783 = r.CheckBreak() + } + if yyb783 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Directory = "" + } else { + x.Directory = string(r.DecodeString()) + } + for { + yyj783++ + if yyhl783 { + yyb783 = yyj783 > l + } else { + yyb783 = r.CheckBreak() + } + if yyb783 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj783-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SecretVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym787 := z.EncBinary() + _ = yym787 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep788 := !z.EncBinary() + yy2arr788 := z.EncBasicHandle().StructToArray + var yyq788 [3]bool + _, _, _ = yysep788, yyq788, yy2arr788 + const yyr788 bool = false + yyq788[0] = x.SecretName != "" + yyq788[1] = len(x.Items) != 0 + yyq788[2] = x.DefaultMode != nil + var yynn788 int + if yyr788 || yy2arr788 { + r.EncodeArrayStart(3) + } else { + yynn788 = 0 + for _, b := range yyq788 { + if b { + yynn788++ + } + } + r.EncodeMapStart(yynn788) + yynn788 = 0 + } + if yyr788 || yy2arr788 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq788[0] { + yym790 := z.EncBinary() + _ = yym790 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq788[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym791 := z.EncBinary() + _ = yym791 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } + } + if yyr788 || yy2arr788 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq788[1] { + if x.Items == nil { + r.EncodeNil() + } else { + yym793 := z.EncBinary() + _ = yym793 + if false { + } else { + h.encSliceKeyToPath(([]KeyToPath)(x.Items), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq788[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym794 := z.EncBinary() + _ = yym794 + if false { + } else { + h.encSliceKeyToPath(([]KeyToPath)(x.Items), e) + } + } + } + } + if yyr788 || yy2arr788 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq788[2] { + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy796 := *x.DefaultMode + yym797 := z.EncBinary() + _ = yym797 + if false { + } else { + r.EncodeInt(int64(yy796)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq788[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultMode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy798 := *x.DefaultMode + yym799 := z.EncBinary() + _ = yym799 + if false { + } else { + r.EncodeInt(int64(yy798)) + } + } + } + } + if yyr788 || yy2arr788 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecretVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym800 := z.DecBinary() + _ = yym800 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct801 := r.ContainerType() + if yyct801 == codecSelferValueTypeMap1234 { + yyl801 := r.ReadMapStart() + if yyl801 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl801, d) + } + } else if yyct801 == codecSelferValueTypeArray1234 { + yyl801 := r.ReadArrayStart() + if yyl801 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl801, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecretVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys802Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys802Slc + var yyhl802 bool = l >= 0 + for yyj802 := 0; ; yyj802++ { + if yyhl802 { + if yyj802 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys802Slc = r.DecodeBytes(yys802Slc, true, true) + yys802 := string(yys802Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys802 { + case "secretName": + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv804 := &x.Items + yym805 := z.DecBinary() + _ = yym805 + if false { + } else { + h.decSliceKeyToPath((*[]KeyToPath)(yyv804), d) + } + } + case "defaultMode": + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym807 := z.DecBinary() + _ = yym807 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys802) + } // end switch yys802 + } // end for yyj802 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecretVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj808 int + var yyb808 bool + var yyhl808 bool = l >= 0 + yyj808++ + if yyhl808 { + yyb808 = yyj808 > l + } else { + yyb808 = r.CheckBreak() + } + if yyb808 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + yyj808++ + if yyhl808 { + yyb808 = yyj808 > l + } else { + yyb808 = r.CheckBreak() + } + if yyb808 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv810 := &x.Items + yym811 := z.DecBinary() + _ = yym811 + if false { + } else { + h.decSliceKeyToPath((*[]KeyToPath)(yyv810), d) + } + } + yyj808++ + if yyhl808 { + yyb808 = yyj808 > l + } else { + yyb808 = r.CheckBreak() + } + if yyb808 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym813 := z.DecBinary() + _ = yym813 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj808++ + if yyhl808 { + yyb808 = yyj808 > l + } else { + yyb808 = r.CheckBreak() + } + if yyb808 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj808-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NFSVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym814 := z.EncBinary() + _ = yym814 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep815 := !z.EncBinary() + yy2arr815 := z.EncBasicHandle().StructToArray + var yyq815 [3]bool + _, _, _ = yysep815, yyq815, yy2arr815 + const yyr815 bool = false + yyq815[2] = x.ReadOnly != false + var yynn815 int + if yyr815 || yy2arr815 { + r.EncodeArrayStart(3) + } else { + yynn815 = 2 + for _, b := range yyq815 { + if b { + yynn815++ + } + } + r.EncodeMapStart(yynn815) + yynn815 = 0 + } + if yyr815 || yy2arr815 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym817 := z.EncBinary() + _ = yym817 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Server)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("server")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym818 := z.EncBinary() + _ = yym818 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Server)) + } + } + if yyr815 || yy2arr815 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym820 := z.EncBinary() + _ = yym820 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym821 := z.EncBinary() + _ = yym821 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr815 || yy2arr815 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq815[2] { + yym823 := z.EncBinary() + _ = yym823 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq815[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym824 := z.EncBinary() + _ = yym824 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr815 || yy2arr815 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NFSVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym825 := z.DecBinary() + _ = yym825 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct826 := r.ContainerType() + if yyct826 == codecSelferValueTypeMap1234 { + yyl826 := r.ReadMapStart() + if yyl826 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl826, d) + } + } else if yyct826 == codecSelferValueTypeArray1234 { + yyl826 := r.ReadArrayStart() + if yyl826 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl826, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NFSVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys827Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys827Slc + var yyhl827 bool = l >= 0 + for yyj827 := 0; ; yyj827++ { + if yyhl827 { + if yyj827 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys827Slc = r.DecodeBytes(yys827Slc, true, true) + yys827 := string(yys827Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys827 { + case "server": + if r.TryDecodeAsNil() { + x.Server = "" + } else { + x.Server = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys827) + } // end switch yys827 + } // end for yyj827 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NFSVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj831 int + var yyb831 bool + var yyhl831 bool = l >= 0 + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Server = "" + } else { + x.Server = string(r.DecodeString()) + } + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj831-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *QuobyteVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym835 := z.EncBinary() + _ = yym835 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep836 := !z.EncBinary() + yy2arr836 := z.EncBasicHandle().StructToArray + var yyq836 [5]bool + _, _, _ = yysep836, yyq836, yy2arr836 + const yyr836 bool = false + yyq836[2] = x.ReadOnly != false + yyq836[3] = x.User != "" + yyq836[4] = x.Group != "" + var yynn836 int + if yyr836 || yy2arr836 { + r.EncodeArrayStart(5) + } else { + yynn836 = 2 + for _, b := range yyq836 { + if b { + yynn836++ + } + } + r.EncodeMapStart(yynn836) + yynn836 = 0 + } + if yyr836 || yy2arr836 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym838 := z.EncBinary() + _ = yym838 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Registry)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("registry")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym839 := z.EncBinary() + _ = yym839 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Registry)) + } + } + if yyr836 || yy2arr836 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym841 := z.EncBinary() + _ = yym841 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Volume)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym842 := z.EncBinary() + _ = yym842 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Volume)) + } + } + if yyr836 || yy2arr836 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq836[2] { + yym844 := z.EncBinary() + _ = yym844 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq836[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym845 := z.EncBinary() + _ = yym845 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr836 || yy2arr836 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq836[3] { + yym847 := z.EncBinary() + _ = yym847 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq836[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym848 := z.EncBinary() + _ = yym848 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } + } + if yyr836 || yy2arr836 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq836[4] { + yym850 := z.EncBinary() + _ = yym850 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Group)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq836[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("group")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym851 := z.EncBinary() + _ = yym851 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Group)) + } + } + } + if yyr836 || yy2arr836 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *QuobyteVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym852 := z.DecBinary() + _ = yym852 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct853 := r.ContainerType() + if yyct853 == codecSelferValueTypeMap1234 { + yyl853 := r.ReadMapStart() + if yyl853 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl853, d) + } + } else if yyct853 == codecSelferValueTypeArray1234 { + yyl853 := r.ReadArrayStart() + if yyl853 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl853, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *QuobyteVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys854Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys854Slc + var yyhl854 bool = l >= 0 + for yyj854 := 0; ; yyj854++ { + if yyhl854 { + if yyj854 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys854Slc = r.DecodeBytes(yys854Slc, true, true) + yys854 := string(yys854Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys854 { + case "registry": + if r.TryDecodeAsNil() { + x.Registry = "" + } else { + x.Registry = string(r.DecodeString()) + } + case "volume": + if r.TryDecodeAsNil() { + x.Volume = "" + } else { + x.Volume = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + case "user": + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + case "group": + if r.TryDecodeAsNil() { + x.Group = "" + } else { + x.Group = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys854) + } // end switch yys854 + } // end for yyj854 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *QuobyteVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj860 int + var yyb860 bool + var yyhl860 bool = l >= 0 + yyj860++ + if yyhl860 { + yyb860 = yyj860 > l + } else { + yyb860 = r.CheckBreak() + } + if yyb860 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Registry = "" + } else { + x.Registry = string(r.DecodeString()) + } + yyj860++ + if yyhl860 { + yyb860 = yyj860 > l + } else { + yyb860 = r.CheckBreak() + } + if yyb860 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Volume = "" + } else { + x.Volume = string(r.DecodeString()) + } + yyj860++ + if yyhl860 { + yyb860 = yyj860 > l + } else { + yyb860 = r.CheckBreak() + } + if yyb860 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + yyj860++ + if yyhl860 { + yyb860 = yyj860 > l + } else { + yyb860 = r.CheckBreak() + } + if yyb860 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + yyj860++ + if yyhl860 { + yyb860 = yyj860 > l + } else { + yyb860 = r.CheckBreak() + } + if yyb860 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Group = "" + } else { + x.Group = string(r.DecodeString()) + } + for { + yyj860++ + if yyhl860 { + yyb860 = yyj860 > l + } else { + yyb860 = r.CheckBreak() + } + if yyb860 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj860-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *GlusterfsVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym866 := z.EncBinary() + _ = yym866 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep867 := !z.EncBinary() + yy2arr867 := z.EncBasicHandle().StructToArray + var yyq867 [3]bool + _, _, _ = yysep867, yyq867, yy2arr867 + const yyr867 bool = false + yyq867[2] = x.ReadOnly != false + var yynn867 int + if yyr867 || yy2arr867 { + r.EncodeArrayStart(3) + } else { + yynn867 = 2 + for _, b := range yyq867 { + if b { + yynn867++ + } + } + r.EncodeMapStart(yynn867) + yynn867 = 0 + } + if yyr867 || yy2arr867 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym869 := z.EncBinary() + _ = yym869 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.EndpointsName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("endpoints")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym870 := z.EncBinary() + _ = yym870 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.EndpointsName)) + } + } + if yyr867 || yy2arr867 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym872 := z.EncBinary() + _ = yym872 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym873 := z.EncBinary() + _ = yym873 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr867 || yy2arr867 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq867[2] { + yym875 := z.EncBinary() + _ = yym875 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq867[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym876 := z.EncBinary() + _ = yym876 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr867 || yy2arr867 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *GlusterfsVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym877 := z.DecBinary() + _ = yym877 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct878 := r.ContainerType() + if yyct878 == codecSelferValueTypeMap1234 { + yyl878 := r.ReadMapStart() + if yyl878 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl878, d) + } + } else if yyct878 == codecSelferValueTypeArray1234 { + yyl878 := r.ReadArrayStart() + if yyl878 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl878, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *GlusterfsVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys879Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys879Slc + var yyhl879 bool = l >= 0 + for yyj879 := 0; ; yyj879++ { + if yyhl879 { + if yyj879 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys879Slc = r.DecodeBytes(yys879Slc, true, true) + yys879 := string(yys879Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys879 { + case "endpoints": + if r.TryDecodeAsNil() { + x.EndpointsName = "" + } else { + x.EndpointsName = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys879) + } // end switch yys879 + } // end for yyj879 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *GlusterfsVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj883 int + var yyb883 bool + var yyhl883 bool = l >= 0 + yyj883++ + if yyhl883 { + yyb883 = yyj883 > l + } else { + yyb883 = r.CheckBreak() + } + if yyb883 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.EndpointsName = "" + } else { + x.EndpointsName = string(r.DecodeString()) + } + yyj883++ + if yyhl883 { + yyb883 = yyj883 > l + } else { + yyb883 = r.CheckBreak() + } + if yyb883 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj883++ + if yyhl883 { + yyb883 = yyj883 > l + } else { + yyb883 = r.CheckBreak() + } + if yyb883 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj883++ + if yyhl883 { + yyb883 = yyj883 > l + } else { + yyb883 = r.CheckBreak() + } + if yyb883 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj883-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *RBDVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym887 := z.EncBinary() + _ = yym887 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep888 := !z.EncBinary() + yy2arr888 := z.EncBasicHandle().StructToArray + var yyq888 [8]bool + _, _, _ = yysep888, yyq888, yy2arr888 + const yyr888 bool = false + yyq888[2] = x.FSType != "" + yyq888[3] = x.RBDPool != "" + yyq888[4] = x.RadosUser != "" + yyq888[5] = x.Keyring != "" + yyq888[6] = x.SecretRef != nil + yyq888[7] = x.ReadOnly != false + var yynn888 int + if yyr888 || yy2arr888 { + r.EncodeArrayStart(8) + } else { + yynn888 = 2 + for _, b := range yyq888 { + if b { + yynn888++ + } + } + r.EncodeMapStart(yynn888) + yynn888 = 0 + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.CephMonitors == nil { + r.EncodeNil() + } else { + yym890 := z.EncBinary() + _ = yym890 + if false { + } else { + z.F.EncSliceStringV(x.CephMonitors, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("monitors")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CephMonitors == nil { + r.EncodeNil() + } else { + yym891 := z.EncBinary() + _ = yym891 + if false { + } else { + z.F.EncSliceStringV(x.CephMonitors, false, e) + } + } + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym893 := z.EncBinary() + _ = yym893 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RBDImage)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("image")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym894 := z.EncBinary() + _ = yym894 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RBDImage)) + } + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq888[2] { + yym896 := z.EncBinary() + _ = yym896 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq888[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym897 := z.EncBinary() + _ = yym897 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq888[3] { + yym899 := z.EncBinary() + _ = yym899 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RBDPool)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq888[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("pool")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym900 := z.EncBinary() + _ = yym900 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RBDPool)) + } + } + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq888[4] { + yym902 := z.EncBinary() + _ = yym902 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RadosUser)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq888[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym903 := z.EncBinary() + _ = yym903 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RadosUser)) + } + } + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq888[5] { + yym905 := z.EncBinary() + _ = yym905 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Keyring)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq888[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("keyring")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym906 := z.EncBinary() + _ = yym906 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Keyring)) + } + } + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq888[6] { + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq888[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq888[7] { + yym909 := z.EncBinary() + _ = yym909 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq888[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym910 := z.EncBinary() + _ = yym910 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr888 || yy2arr888 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *RBDVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym911 := z.DecBinary() + _ = yym911 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct912 := r.ContainerType() + if yyct912 == codecSelferValueTypeMap1234 { + yyl912 := r.ReadMapStart() + if yyl912 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl912, d) + } + } else if yyct912 == codecSelferValueTypeArray1234 { + yyl912 := r.ReadArrayStart() + if yyl912 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl912, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *RBDVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys913Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys913Slc + var yyhl913 bool = l >= 0 + for yyj913 := 0; ; yyj913++ { + if yyhl913 { + if yyj913 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys913Slc = r.DecodeBytes(yys913Slc, true, true) + yys913 := string(yys913Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys913 { + case "monitors": + if r.TryDecodeAsNil() { + x.CephMonitors = nil + } else { + yyv914 := &x.CephMonitors + yym915 := z.DecBinary() + _ = yym915 + if false { + } else { + z.F.DecSliceStringX(yyv914, false, d) + } + } + case "image": + if r.TryDecodeAsNil() { + x.RBDImage = "" + } else { + x.RBDImage = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "pool": + if r.TryDecodeAsNil() { + x.RBDPool = "" + } else { + x.RBDPool = string(r.DecodeString()) + } + case "user": + if r.TryDecodeAsNil() { + x.RadosUser = "" + } else { + x.RadosUser = string(r.DecodeString()) + } + case "keyring": + if r.TryDecodeAsNil() { + x.Keyring = "" + } else { + x.Keyring = string(r.DecodeString()) + } + case "secretRef": + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys913) + } // end switch yys913 + } // end for yyj913 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *RBDVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj923 int + var yyb923 bool + var yyhl923 bool = l >= 0 + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CephMonitors = nil + } else { + yyv924 := &x.CephMonitors + yym925 := z.DecBinary() + _ = yym925 + if false { + } else { + z.F.DecSliceStringX(yyv924, false, d) + } + } + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RBDImage = "" + } else { + x.RBDImage = string(r.DecodeString()) + } + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RBDPool = "" + } else { + x.RBDPool = string(r.DecodeString()) + } + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RadosUser = "" + } else { + x.RadosUser = string(r.DecodeString()) + } + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Keyring = "" + } else { + x.Keyring = string(r.DecodeString()) + } + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj923++ + if yyhl923 { + yyb923 = yyj923 > l + } else { + yyb923 = r.CheckBreak() + } + if yyb923 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj923-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CinderVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym933 := z.EncBinary() + _ = yym933 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep934 := !z.EncBinary() + yy2arr934 := z.EncBasicHandle().StructToArray + var yyq934 [3]bool + _, _, _ = yysep934, yyq934, yy2arr934 + const yyr934 bool = false + yyq934[1] = x.FSType != "" + yyq934[2] = x.ReadOnly != false + var yynn934 int + if yyr934 || yy2arr934 { + r.EncodeArrayStart(3) + } else { + yynn934 = 1 + for _, b := range yyq934 { + if b { + yynn934++ + } + } + r.EncodeMapStart(yynn934) + yynn934 = 0 + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym936 := z.EncBinary() + _ = yym936 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym937 := z.EncBinary() + _ = yym937 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq934[1] { + yym939 := z.EncBinary() + _ = yym939 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq934[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym940 := z.EncBinary() + _ = yym940 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq934[2] { + yym942 := z.EncBinary() + _ = yym942 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq934[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym943 := z.EncBinary() + _ = yym943 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CinderVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym944 := z.DecBinary() + _ = yym944 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct945 := r.ContainerType() + if yyct945 == codecSelferValueTypeMap1234 { + yyl945 := r.ReadMapStart() + if yyl945 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl945, d) + } + } else if yyct945 == codecSelferValueTypeArray1234 { + yyl945 := r.ReadArrayStart() + if yyl945 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl945, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CinderVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys946Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys946Slc + var yyhl946 bool = l >= 0 + for yyj946 := 0; ; yyj946++ { + if yyhl946 { + if yyj946 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys946Slc = r.DecodeBytes(yys946Slc, true, true) + yys946 := string(yys946Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys946 { + case "volumeID": + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + x.VolumeID = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys946) + } // end switch yys946 + } // end for yyj946 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CinderVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj950 int + var yyb950 bool + var yyhl950 bool = l >= 0 + yyj950++ + if yyhl950 { + yyb950 = yyj950 > l + } else { + yyb950 = r.CheckBreak() + } + if yyb950 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + x.VolumeID = string(r.DecodeString()) + } + yyj950++ + if yyhl950 { + yyb950 = yyj950 > l + } else { + yyb950 = r.CheckBreak() + } + if yyb950 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj950++ + if yyhl950 { + yyb950 = yyj950 > l + } else { + yyb950 = r.CheckBreak() + } + if yyb950 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj950++ + if yyhl950 { + yyb950 = yyj950 > l + } else { + yyb950 = r.CheckBreak() + } + if yyb950 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj950-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CephFSVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym954 := z.EncBinary() + _ = yym954 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep955 := !z.EncBinary() + yy2arr955 := z.EncBasicHandle().StructToArray + var yyq955 [6]bool + _, _, _ = yysep955, yyq955, yy2arr955 + const yyr955 bool = false + yyq955[1] = x.Path != "" + yyq955[2] = x.User != "" + yyq955[3] = x.SecretFile != "" + yyq955[4] = x.SecretRef != nil + yyq955[5] = x.ReadOnly != false + var yynn955 int + if yyr955 || yy2arr955 { + r.EncodeArrayStart(6) + } else { + yynn955 = 1 + for _, b := range yyq955 { + if b { + yynn955++ + } + } + r.EncodeMapStart(yynn955) + yynn955 = 0 + } + if yyr955 || yy2arr955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Monitors == nil { + r.EncodeNil() + } else { + yym957 := z.EncBinary() + _ = yym957 + if false { + } else { + z.F.EncSliceStringV(x.Monitors, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("monitors")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Monitors == nil { + r.EncodeNil() + } else { + yym958 := z.EncBinary() + _ = yym958 + if false { + } else { + z.F.EncSliceStringV(x.Monitors, false, e) + } + } + } + if yyr955 || yy2arr955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq955[1] { + yym960 := z.EncBinary() + _ = yym960 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq955[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym961 := z.EncBinary() + _ = yym961 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + } + if yyr955 || yy2arr955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq955[2] { + yym963 := z.EncBinary() + _ = yym963 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq955[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym964 := z.EncBinary() + _ = yym964 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } + } + if yyr955 || yy2arr955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq955[3] { + yym966 := z.EncBinary() + _ = yym966 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretFile)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq955[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym967 := z.EncBinary() + _ = yym967 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretFile)) + } + } + } + if yyr955 || yy2arr955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq955[4] { + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq955[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } + } + if yyr955 || yy2arr955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq955[5] { + yym970 := z.EncBinary() + _ = yym970 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq955[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym971 := z.EncBinary() + _ = yym971 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr955 || yy2arr955 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CephFSVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym972 := z.DecBinary() + _ = yym972 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct973 := r.ContainerType() + if yyct973 == codecSelferValueTypeMap1234 { + yyl973 := r.ReadMapStart() + if yyl973 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl973, d) + } + } else if yyct973 == codecSelferValueTypeArray1234 { + yyl973 := r.ReadArrayStart() + if yyl973 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl973, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CephFSVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys974Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys974Slc + var yyhl974 bool = l >= 0 + for yyj974 := 0; ; yyj974++ { + if yyhl974 { + if yyj974 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys974Slc = r.DecodeBytes(yys974Slc, true, true) + yys974 := string(yys974Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys974 { + case "monitors": + if r.TryDecodeAsNil() { + x.Monitors = nil + } else { + yyv975 := &x.Monitors + yym976 := z.DecBinary() + _ = yym976 + if false { + } else { + z.F.DecSliceStringX(yyv975, false, d) + } + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "user": + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + case "secretFile": + if r.TryDecodeAsNil() { + x.SecretFile = "" + } else { + x.SecretFile = string(r.DecodeString()) + } + case "secretRef": + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys974) + } // end switch yys974 + } // end for yyj974 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CephFSVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj982 int + var yyb982 bool + var yyhl982 bool = l >= 0 + yyj982++ + if yyhl982 { + yyb982 = yyj982 > l + } else { + yyb982 = r.CheckBreak() + } + if yyb982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Monitors = nil + } else { + yyv983 := &x.Monitors + yym984 := z.DecBinary() + _ = yym984 + if false { + } else { + z.F.DecSliceStringX(yyv983, false, d) + } + } + yyj982++ + if yyhl982 { + yyb982 = yyj982 > l + } else { + yyb982 = r.CheckBreak() + } + if yyb982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj982++ + if yyhl982 { + yyb982 = yyj982 > l + } else { + yyb982 = r.CheckBreak() + } + if yyb982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + yyj982++ + if yyhl982 { + yyb982 = yyj982 > l + } else { + yyb982 = r.CheckBreak() + } + if yyb982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SecretFile = "" + } else { + x.SecretFile = string(r.DecodeString()) + } + yyj982++ + if yyhl982 { + yyb982 = yyj982 > l + } else { + yyb982 = r.CheckBreak() + } + if yyb982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + yyj982++ + if yyhl982 { + yyb982 = yyj982 > l + } else { + yyb982 = r.CheckBreak() + } + if yyb982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj982++ + if yyhl982 { + yyb982 = yyj982 > l + } else { + yyb982 = r.CheckBreak() + } + if yyb982 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj982-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *FlockerVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym990 := z.EncBinary() + _ = yym990 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep991 := !z.EncBinary() + yy2arr991 := z.EncBasicHandle().StructToArray + var yyq991 [1]bool + _, _, _ = yysep991, yyq991, yy2arr991 + const yyr991 bool = false + var yynn991 int + if yyr991 || yy2arr991 { + r.EncodeArrayStart(1) + } else { + yynn991 = 1 + for _, b := range yyq991 { + if b { + yynn991++ + } + } + r.EncodeMapStart(yynn991) + yynn991 = 0 + } + if yyr991 || yy2arr991 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym993 := z.EncBinary() + _ = yym993 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DatasetName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("datasetName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym994 := z.EncBinary() + _ = yym994 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DatasetName)) + } + } + if yyr991 || yy2arr991 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *FlockerVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym995 := z.DecBinary() + _ = yym995 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct996 := r.ContainerType() + if yyct996 == codecSelferValueTypeMap1234 { + yyl996 := r.ReadMapStart() + if yyl996 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl996, d) + } + } else if yyct996 == codecSelferValueTypeArray1234 { + yyl996 := r.ReadArrayStart() + if yyl996 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl996, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *FlockerVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys997Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys997Slc + var yyhl997 bool = l >= 0 + for yyj997 := 0; ; yyj997++ { + if yyhl997 { + if yyj997 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys997Slc = r.DecodeBytes(yys997Slc, true, true) + yys997 := string(yys997Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys997 { + case "datasetName": + if r.TryDecodeAsNil() { + x.DatasetName = "" + } else { + x.DatasetName = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys997) + } // end switch yys997 + } // end for yyj997 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *FlockerVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj999 int + var yyb999 bool + var yyhl999 bool = l >= 0 + yyj999++ + if yyhl999 { + yyb999 = yyj999 > l + } else { + yyb999 = r.CheckBreak() + } + if yyb999 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DatasetName = "" + } else { + x.DatasetName = string(r.DecodeString()) + } + for { + yyj999++ + if yyhl999 { + yyb999 = yyj999 > l + } else { + yyb999 = r.CheckBreak() + } + if yyb999 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj999-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DownwardAPIVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1001 := z.EncBinary() + _ = yym1001 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1002 := !z.EncBinary() + yy2arr1002 := z.EncBasicHandle().StructToArray + var yyq1002 [2]bool + _, _, _ = yysep1002, yyq1002, yy2arr1002 + const yyr1002 bool = false + yyq1002[0] = len(x.Items) != 0 + yyq1002[1] = x.DefaultMode != nil + var yynn1002 int + if yyr1002 || yy2arr1002 { + r.EncodeArrayStart(2) + } else { + yynn1002 = 0 + for _, b := range yyq1002 { + if b { + yynn1002++ + } + } + r.EncodeMapStart(yynn1002) + yynn1002 = 0 + } + if yyr1002 || yy2arr1002 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1002[0] { + if x.Items == nil { + r.EncodeNil() + } else { + yym1004 := z.EncBinary() + _ = yym1004 + if false { + } else { + h.encSliceDownwardAPIVolumeFile(([]DownwardAPIVolumeFile)(x.Items), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1002[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1005 := z.EncBinary() + _ = yym1005 + if false { + } else { + h.encSliceDownwardAPIVolumeFile(([]DownwardAPIVolumeFile)(x.Items), e) + } + } + } + } + if yyr1002 || yy2arr1002 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1002[1] { + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy1007 := *x.DefaultMode + yym1008 := z.EncBinary() + _ = yym1008 + if false { + } else { + r.EncodeInt(int64(yy1007)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1002[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultMode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy1009 := *x.DefaultMode + yym1010 := z.EncBinary() + _ = yym1010 + if false { + } else { + r.EncodeInt(int64(yy1009)) + } + } + } + } + if yyr1002 || yy2arr1002 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DownwardAPIVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1011 := z.DecBinary() + _ = yym1011 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1012 := r.ContainerType() + if yyct1012 == codecSelferValueTypeMap1234 { + yyl1012 := r.ReadMapStart() + if yyl1012 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1012, d) + } + } else if yyct1012 == codecSelferValueTypeArray1234 { + yyl1012 := r.ReadArrayStart() + if yyl1012 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1012, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DownwardAPIVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1013Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1013Slc + var yyhl1013 bool = l >= 0 + for yyj1013 := 0; ; yyj1013++ { + if yyhl1013 { + if yyj1013 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1013Slc = r.DecodeBytes(yys1013Slc, true, true) + yys1013 := string(yys1013Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1013 { + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1014 := &x.Items + yym1015 := z.DecBinary() + _ = yym1015 + if false { + } else { + h.decSliceDownwardAPIVolumeFile((*[]DownwardAPIVolumeFile)(yyv1014), d) + } + } + case "defaultMode": + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym1017 := z.DecBinary() + _ = yym1017 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys1013) + } // end switch yys1013 + } // end for yyj1013 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DownwardAPIVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1018 int + var yyb1018 bool + var yyhl1018 bool = l >= 0 + yyj1018++ + if yyhl1018 { + yyb1018 = yyj1018 > l + } else { + yyb1018 = r.CheckBreak() + } + if yyb1018 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1019 := &x.Items + yym1020 := z.DecBinary() + _ = yym1020 + if false { + } else { + h.decSliceDownwardAPIVolumeFile((*[]DownwardAPIVolumeFile)(yyv1019), d) + } + } + yyj1018++ + if yyhl1018 { + yyb1018 = yyj1018 > l + } else { + yyb1018 = r.CheckBreak() + } + if yyb1018 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym1022 := z.DecBinary() + _ = yym1022 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj1018++ + if yyhl1018 { + yyb1018 = yyj1018 > l + } else { + yyb1018 = r.CheckBreak() + } + if yyb1018 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1018-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DownwardAPIVolumeFile) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1023 := z.EncBinary() + _ = yym1023 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1024 := !z.EncBinary() + yy2arr1024 := z.EncBasicHandle().StructToArray + var yyq1024 [4]bool + _, _, _ = yysep1024, yyq1024, yy2arr1024 + const yyr1024 bool = false + yyq1024[1] = x.FieldRef != nil + yyq1024[2] = x.ResourceFieldRef != nil + yyq1024[3] = x.Mode != nil + var yynn1024 int + if yyr1024 || yy2arr1024 { + r.EncodeArrayStart(4) + } else { + yynn1024 = 1 + for _, b := range yyq1024 { + if b { + yynn1024++ + } + } + r.EncodeMapStart(yynn1024) + yynn1024 = 0 + } + if yyr1024 || yy2arr1024 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1026 := z.EncBinary() + _ = yym1026 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1027 := z.EncBinary() + _ = yym1027 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr1024 || yy2arr1024 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1024[1] { + if x.FieldRef == nil { + r.EncodeNil() + } else { + x.FieldRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1024[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FieldRef == nil { + r.EncodeNil() + } else { + x.FieldRef.CodecEncodeSelf(e) + } + } + } + if yyr1024 || yy2arr1024 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1024[2] { + if x.ResourceFieldRef == nil { + r.EncodeNil() + } else { + x.ResourceFieldRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1024[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceFieldRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ResourceFieldRef == nil { + r.EncodeNil() + } else { + x.ResourceFieldRef.CodecEncodeSelf(e) + } + } + } + if yyr1024 || yy2arr1024 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1024[3] { + if x.Mode == nil { + r.EncodeNil() + } else { + yy1031 := *x.Mode + yym1032 := z.EncBinary() + _ = yym1032 + if false { + } else { + r.EncodeInt(int64(yy1031)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1024[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("mode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Mode == nil { + r.EncodeNil() + } else { + yy1033 := *x.Mode + yym1034 := z.EncBinary() + _ = yym1034 + if false { + } else { + r.EncodeInt(int64(yy1033)) + } + } + } + } + if yyr1024 || yy2arr1024 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DownwardAPIVolumeFile) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1035 := z.DecBinary() + _ = yym1035 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1036 := r.ContainerType() + if yyct1036 == codecSelferValueTypeMap1234 { + yyl1036 := r.ReadMapStart() + if yyl1036 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1036, d) + } + } else if yyct1036 == codecSelferValueTypeArray1234 { + yyl1036 := r.ReadArrayStart() + if yyl1036 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1036, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DownwardAPIVolumeFile) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1037Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1037Slc + var yyhl1037 bool = l >= 0 + for yyj1037 := 0; ; yyj1037++ { + if yyhl1037 { + if yyj1037 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1037Slc = r.DecodeBytes(yys1037Slc, true, true) + yys1037 := string(yys1037Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1037 { + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "fieldRef": + if r.TryDecodeAsNil() { + if x.FieldRef != nil { + x.FieldRef = nil + } + } else { + if x.FieldRef == nil { + x.FieldRef = new(ObjectFieldSelector) + } + x.FieldRef.CodecDecodeSelf(d) + } + case "resourceFieldRef": + if r.TryDecodeAsNil() { + if x.ResourceFieldRef != nil { + x.ResourceFieldRef = nil + } + } else { + if x.ResourceFieldRef == nil { + x.ResourceFieldRef = new(ResourceFieldSelector) + } + x.ResourceFieldRef.CodecDecodeSelf(d) + } + case "mode": + if r.TryDecodeAsNil() { + if x.Mode != nil { + x.Mode = nil + } + } else { + if x.Mode == nil { + x.Mode = new(int32) + } + yym1042 := z.DecBinary() + _ = yym1042 + if false { + } else { + *((*int32)(x.Mode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys1037) + } // end switch yys1037 + } // end for yyj1037 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DownwardAPIVolumeFile) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1043 int + var yyb1043 bool + var yyhl1043 bool = l >= 0 + yyj1043++ + if yyhl1043 { + yyb1043 = yyj1043 > l + } else { + yyb1043 = r.CheckBreak() + } + if yyb1043 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj1043++ + if yyhl1043 { + yyb1043 = yyj1043 > l + } else { + yyb1043 = r.CheckBreak() + } + if yyb1043 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FieldRef != nil { + x.FieldRef = nil + } + } else { + if x.FieldRef == nil { + x.FieldRef = new(ObjectFieldSelector) + } + x.FieldRef.CodecDecodeSelf(d) + } + yyj1043++ + if yyhl1043 { + yyb1043 = yyj1043 > l + } else { + yyb1043 = r.CheckBreak() + } + if yyb1043 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ResourceFieldRef != nil { + x.ResourceFieldRef = nil + } + } else { + if x.ResourceFieldRef == nil { + x.ResourceFieldRef = new(ResourceFieldSelector) + } + x.ResourceFieldRef.CodecDecodeSelf(d) + } + yyj1043++ + if yyhl1043 { + yyb1043 = yyj1043 > l + } else { + yyb1043 = r.CheckBreak() + } + if yyb1043 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Mode != nil { + x.Mode = nil + } + } else { + if x.Mode == nil { + x.Mode = new(int32) + } + yym1048 := z.DecBinary() + _ = yym1048 + if false { + } else { + *((*int32)(x.Mode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj1043++ + if yyhl1043 { + yyb1043 = yyj1043 > l + } else { + yyb1043 = r.CheckBreak() + } + if yyb1043 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1043-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *AzureFileVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1049 := z.EncBinary() + _ = yym1049 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1050 := !z.EncBinary() + yy2arr1050 := z.EncBasicHandle().StructToArray + var yyq1050 [3]bool + _, _, _ = yysep1050, yyq1050, yy2arr1050 + const yyr1050 bool = false + yyq1050[2] = x.ReadOnly != false + var yynn1050 int + if yyr1050 || yy2arr1050 { + r.EncodeArrayStart(3) + } else { + yynn1050 = 2 + for _, b := range yyq1050 { + if b { + yynn1050++ + } + } + r.EncodeMapStart(yynn1050) + yynn1050 = 0 + } + if yyr1050 || yy2arr1050 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1052 := z.EncBinary() + _ = yym1052 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1053 := z.EncBinary() + _ = yym1053 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } + if yyr1050 || yy2arr1050 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1055 := z.EncBinary() + _ = yym1055 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ShareName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("shareName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1056 := z.EncBinary() + _ = yym1056 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ShareName)) + } + } + if yyr1050 || yy2arr1050 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1050[2] { + yym1058 := z.EncBinary() + _ = yym1058 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1050[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1059 := z.EncBinary() + _ = yym1059 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr1050 || yy2arr1050 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AzureFileVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1060 := z.DecBinary() + _ = yym1060 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1061 := r.ContainerType() + if yyct1061 == codecSelferValueTypeMap1234 { + yyl1061 := r.ReadMapStart() + if yyl1061 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1061, d) + } + } else if yyct1061 == codecSelferValueTypeArray1234 { + yyl1061 := r.ReadArrayStart() + if yyl1061 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1061, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AzureFileVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1062Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1062Slc + var yyhl1062 bool = l >= 0 + for yyj1062 := 0; ; yyj1062++ { + if yyhl1062 { + if yyj1062 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1062Slc = r.DecodeBytes(yys1062Slc, true, true) + yys1062 := string(yys1062Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1062 { + case "secretName": + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + case "shareName": + if r.TryDecodeAsNil() { + x.ShareName = "" + } else { + x.ShareName = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys1062) + } // end switch yys1062 + } // end for yyj1062 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AzureFileVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1066 int + var yyb1066 bool + var yyhl1066 bool = l >= 0 + yyj1066++ + if yyhl1066 { + yyb1066 = yyj1066 > l + } else { + yyb1066 = r.CheckBreak() + } + if yyb1066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + yyj1066++ + if yyhl1066 { + yyb1066 = yyj1066 > l + } else { + yyb1066 = r.CheckBreak() + } + if yyb1066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ShareName = "" + } else { + x.ShareName = string(r.DecodeString()) + } + yyj1066++ + if yyhl1066 { + yyb1066 = yyj1066 > l + } else { + yyb1066 = r.CheckBreak() + } + if yyb1066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj1066++ + if yyhl1066 { + yyb1066 = yyj1066 > l + } else { + yyb1066 = r.CheckBreak() + } + if yyb1066 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1066-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *VsphereVirtualDiskVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1070 := z.EncBinary() + _ = yym1070 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1071 := !z.EncBinary() + yy2arr1071 := z.EncBasicHandle().StructToArray + var yyq1071 [2]bool + _, _, _ = yysep1071, yyq1071, yy2arr1071 + const yyr1071 bool = false + yyq1071[1] = x.FSType != "" + var yynn1071 int + if yyr1071 || yy2arr1071 { + r.EncodeArrayStart(2) + } else { + yynn1071 = 1 + for _, b := range yyq1071 { + if b { + yynn1071++ + } + } + r.EncodeMapStart(yynn1071) + yynn1071 = 0 + } + if yyr1071 || yy2arr1071 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1073 := z.EncBinary() + _ = yym1073 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumePath)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumePath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1074 := z.EncBinary() + _ = yym1074 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumePath)) + } + } + if yyr1071 || yy2arr1071 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1071[1] { + yym1076 := z.EncBinary() + _ = yym1076 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1071[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1077 := z.EncBinary() + _ = yym1077 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr1071 || yy2arr1071 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *VsphereVirtualDiskVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1078 := z.DecBinary() + _ = yym1078 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1079 := r.ContainerType() + if yyct1079 == codecSelferValueTypeMap1234 { + yyl1079 := r.ReadMapStart() + if yyl1079 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1079, d) + } + } else if yyct1079 == codecSelferValueTypeArray1234 { + yyl1079 := r.ReadArrayStart() + if yyl1079 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1079, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *VsphereVirtualDiskVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1080Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1080Slc + var yyhl1080 bool = l >= 0 + for yyj1080 := 0; ; yyj1080++ { + if yyhl1080 { + if yyj1080 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1080Slc = r.DecodeBytes(yys1080Slc, true, true) + yys1080 := string(yys1080Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1080 { + case "volumePath": + if r.TryDecodeAsNil() { + x.VolumePath = "" + } else { + x.VolumePath = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1080) + } // end switch yys1080 + } // end for yyj1080 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *VsphereVirtualDiskVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1083 int + var yyb1083 bool + var yyhl1083 bool = l >= 0 + yyj1083++ + if yyhl1083 { + yyb1083 = yyj1083 > l + } else { + yyb1083 = r.CheckBreak() + } + if yyb1083 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumePath = "" + } else { + x.VolumePath = string(r.DecodeString()) + } + yyj1083++ + if yyhl1083 { + yyb1083 = yyj1083 > l + } else { + yyb1083 = r.CheckBreak() + } + if yyb1083 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + for { + yyj1083++ + if yyhl1083 { + yyb1083 = yyj1083 > l + } else { + yyb1083 = r.CheckBreak() + } + if yyb1083 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1083-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x AzureDataDiskCachingMode) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1086 := z.EncBinary() + _ = yym1086 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *AzureDataDiskCachingMode) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1087 := z.DecBinary() + _ = yym1087 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *AzureDiskVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1088 := z.EncBinary() + _ = yym1088 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1089 := !z.EncBinary() + yy2arr1089 := z.EncBasicHandle().StructToArray + var yyq1089 [5]bool + _, _, _ = yysep1089, yyq1089, yy2arr1089 + const yyr1089 bool = false + yyq1089[2] = x.CachingMode != nil + yyq1089[3] = x.FSType != nil + yyq1089[4] = x.ReadOnly != nil + var yynn1089 int + if yyr1089 || yy2arr1089 { + r.EncodeArrayStart(5) + } else { + yynn1089 = 2 + for _, b := range yyq1089 { + if b { + yynn1089++ + } + } + r.EncodeMapStart(yynn1089) + yynn1089 = 0 + } + if yyr1089 || yy2arr1089 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1091 := z.EncBinary() + _ = yym1091 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DiskName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("diskName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1092 := z.EncBinary() + _ = yym1092 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DiskName)) + } + } + if yyr1089 || yy2arr1089 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1094 := z.EncBinary() + _ = yym1094 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DataDiskURI)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("diskURI")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1095 := z.EncBinary() + _ = yym1095 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DataDiskURI)) + } + } + if yyr1089 || yy2arr1089 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1089[2] { + if x.CachingMode == nil { + r.EncodeNil() + } else { + yy1097 := *x.CachingMode + yy1097.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1089[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cachingMode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CachingMode == nil { + r.EncodeNil() + } else { + yy1098 := *x.CachingMode + yy1098.CodecEncodeSelf(e) + } + } + } + if yyr1089 || yy2arr1089 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1089[3] { + if x.FSType == nil { + r.EncodeNil() + } else { + yy1100 := *x.FSType + yym1101 := z.EncBinary() + _ = yym1101 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy1100)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1089[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FSType == nil { + r.EncodeNil() + } else { + yy1102 := *x.FSType + yym1103 := z.EncBinary() + _ = yym1103 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy1102)) + } + } + } + } + if yyr1089 || yy2arr1089 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1089[4] { + if x.ReadOnly == nil { + r.EncodeNil() + } else { + yy1105 := *x.ReadOnly + yym1106 := z.EncBinary() + _ = yym1106 + if false { + } else { + r.EncodeBool(bool(yy1105)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1089[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ReadOnly == nil { + r.EncodeNil() + } else { + yy1107 := *x.ReadOnly + yym1108 := z.EncBinary() + _ = yym1108 + if false { + } else { + r.EncodeBool(bool(yy1107)) + } + } + } + } + if yyr1089 || yy2arr1089 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AzureDiskVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1109 := z.DecBinary() + _ = yym1109 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1110 := r.ContainerType() + if yyct1110 == codecSelferValueTypeMap1234 { + yyl1110 := r.ReadMapStart() + if yyl1110 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1110, d) + } + } else if yyct1110 == codecSelferValueTypeArray1234 { + yyl1110 := r.ReadArrayStart() + if yyl1110 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1110, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AzureDiskVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1111Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1111Slc + var yyhl1111 bool = l >= 0 + for yyj1111 := 0; ; yyj1111++ { + if yyhl1111 { + if yyj1111 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1111Slc = r.DecodeBytes(yys1111Slc, true, true) + yys1111 := string(yys1111Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1111 { + case "diskName": + if r.TryDecodeAsNil() { + x.DiskName = "" + } else { + x.DiskName = string(r.DecodeString()) + } + case "diskURI": + if r.TryDecodeAsNil() { + x.DataDiskURI = "" + } else { + x.DataDiskURI = string(r.DecodeString()) + } + case "cachingMode": + if r.TryDecodeAsNil() { + if x.CachingMode != nil { + x.CachingMode = nil + } + } else { + if x.CachingMode == nil { + x.CachingMode = new(AzureDataDiskCachingMode) + } + x.CachingMode.CodecDecodeSelf(d) + } + case "fsType": + if r.TryDecodeAsNil() { + if x.FSType != nil { + x.FSType = nil + } + } else { + if x.FSType == nil { + x.FSType = new(string) + } + yym1116 := z.DecBinary() + _ = yym1116 + if false { + } else { + *((*string)(x.FSType)) = r.DecodeString() + } + } + case "readOnly": + if r.TryDecodeAsNil() { + if x.ReadOnly != nil { + x.ReadOnly = nil + } + } else { + if x.ReadOnly == nil { + x.ReadOnly = new(bool) + } + yym1118 := z.DecBinary() + _ = yym1118 + if false { + } else { + *((*bool)(x.ReadOnly)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys1111) + } // end switch yys1111 + } // end for yyj1111 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AzureDiskVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1119 int + var yyb1119 bool + var yyhl1119 bool = l >= 0 + yyj1119++ + if yyhl1119 { + yyb1119 = yyj1119 > l + } else { + yyb1119 = r.CheckBreak() + } + if yyb1119 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DiskName = "" + } else { + x.DiskName = string(r.DecodeString()) + } + yyj1119++ + if yyhl1119 { + yyb1119 = yyj1119 > l + } else { + yyb1119 = r.CheckBreak() + } + if yyb1119 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DataDiskURI = "" + } else { + x.DataDiskURI = string(r.DecodeString()) + } + yyj1119++ + if yyhl1119 { + yyb1119 = yyj1119 > l + } else { + yyb1119 = r.CheckBreak() + } + if yyb1119 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CachingMode != nil { + x.CachingMode = nil + } + } else { + if x.CachingMode == nil { + x.CachingMode = new(AzureDataDiskCachingMode) + } + x.CachingMode.CodecDecodeSelf(d) + } + yyj1119++ + if yyhl1119 { + yyb1119 = yyj1119 > l + } else { + yyb1119 = r.CheckBreak() + } + if yyb1119 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FSType != nil { + x.FSType = nil + } + } else { + if x.FSType == nil { + x.FSType = new(string) + } + yym1124 := z.DecBinary() + _ = yym1124 + if false { + } else { + *((*string)(x.FSType)) = r.DecodeString() + } + } + yyj1119++ + if yyhl1119 { + yyb1119 = yyj1119 > l + } else { + yyb1119 = r.CheckBreak() + } + if yyb1119 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ReadOnly != nil { + x.ReadOnly = nil + } + } else { + if x.ReadOnly == nil { + x.ReadOnly = new(bool) + } + yym1126 := z.DecBinary() + _ = yym1126 + if false { + } else { + *((*bool)(x.ReadOnly)) = r.DecodeBool() + } + } + for { + yyj1119++ + if yyhl1119 { + yyb1119 = yyj1119 > l + } else { + yyb1119 = r.CheckBreak() + } + if yyb1119 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1119-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ConfigMapVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1127 := z.EncBinary() + _ = yym1127 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1128 := !z.EncBinary() + yy2arr1128 := z.EncBasicHandle().StructToArray + var yyq1128 [3]bool + _, _, _ = yysep1128, yyq1128, yy2arr1128 + const yyr1128 bool = false + yyq1128[1] = len(x.Items) != 0 + yyq1128[2] = x.DefaultMode != nil + var yynn1128 int + if yyr1128 || yy2arr1128 { + r.EncodeArrayStart(3) + } else { + yynn1128 = 1 + for _, b := range yyq1128 { + if b { + yynn1128++ + } + } + r.EncodeMapStart(yynn1128) + yynn1128 = 0 + } + if yyr1128 || yy2arr1128 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1130 := z.EncBinary() + _ = yym1130 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1131 := z.EncBinary() + _ = yym1131 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1128 || yy2arr1128 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1128[1] { + if x.Items == nil { + r.EncodeNil() + } else { + yym1133 := z.EncBinary() + _ = yym1133 + if false { + } else { + h.encSliceKeyToPath(([]KeyToPath)(x.Items), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1128[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1134 := z.EncBinary() + _ = yym1134 + if false { + } else { + h.encSliceKeyToPath(([]KeyToPath)(x.Items), e) + } + } + } + } + if yyr1128 || yy2arr1128 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1128[2] { + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy1136 := *x.DefaultMode + yym1137 := z.EncBinary() + _ = yym1137 + if false { + } else { + r.EncodeInt(int64(yy1136)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1128[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultMode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy1138 := *x.DefaultMode + yym1139 := z.EncBinary() + _ = yym1139 + if false { + } else { + r.EncodeInt(int64(yy1138)) + } + } + } + } + if yyr1128 || yy2arr1128 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ConfigMapVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1140 := z.DecBinary() + _ = yym1140 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1141 := r.ContainerType() + if yyct1141 == codecSelferValueTypeMap1234 { + yyl1141 := r.ReadMapStart() + if yyl1141 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1141, d) + } + } else if yyct1141 == codecSelferValueTypeArray1234 { + yyl1141 := r.ReadArrayStart() + if yyl1141 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1141, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ConfigMapVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1142Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1142Slc + var yyhl1142 bool = l >= 0 + for yyj1142 := 0; ; yyj1142++ { + if yyhl1142 { + if yyj1142 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1142Slc = r.DecodeBytes(yys1142Slc, true, true) + yys1142 := string(yys1142Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1142 { + case "Name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1144 := &x.Items + yym1145 := z.DecBinary() + _ = yym1145 + if false { + } else { + h.decSliceKeyToPath((*[]KeyToPath)(yyv1144), d) + } + } + case "defaultMode": + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym1147 := z.DecBinary() + _ = yym1147 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys1142) + } // end switch yys1142 + } // end for yyj1142 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ConfigMapVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1148 int + var yyb1148 bool + var yyhl1148 bool = l >= 0 + yyj1148++ + if yyhl1148 { + yyb1148 = yyj1148 > l + } else { + yyb1148 = r.CheckBreak() + } + if yyb1148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1148++ + if yyhl1148 { + yyb1148 = yyj1148 > l + } else { + yyb1148 = r.CheckBreak() + } + if yyb1148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1150 := &x.Items + yym1151 := z.DecBinary() + _ = yym1151 + if false { + } else { + h.decSliceKeyToPath((*[]KeyToPath)(yyv1150), d) + } + } + yyj1148++ + if yyhl1148 { + yyb1148 = yyj1148 > l + } else { + yyb1148 = r.CheckBreak() + } + if yyb1148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym1153 := z.DecBinary() + _ = yym1153 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj1148++ + if yyhl1148 { + yyb1148 = yyj1148 > l + } else { + yyb1148 = r.CheckBreak() + } + if yyb1148 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1148-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *KeyToPath) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1154 := z.EncBinary() + _ = yym1154 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1155 := !z.EncBinary() + yy2arr1155 := z.EncBasicHandle().StructToArray + var yyq1155 [3]bool + _, _, _ = yysep1155, yyq1155, yy2arr1155 + const yyr1155 bool = false + yyq1155[2] = x.Mode != nil + var yynn1155 int + if yyr1155 || yy2arr1155 { + r.EncodeArrayStart(3) + } else { + yynn1155 = 2 + for _, b := range yyq1155 { + if b { + yynn1155++ + } + } + r.EncodeMapStart(yynn1155) + yynn1155 = 0 + } + if yyr1155 || yy2arr1155 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1157 := z.EncBinary() + _ = yym1157 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1158 := z.EncBinary() + _ = yym1158 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1155 || yy2arr1155 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1160 := z.EncBinary() + _ = yym1160 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1161 := z.EncBinary() + _ = yym1161 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr1155 || yy2arr1155 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1155[2] { + if x.Mode == nil { + r.EncodeNil() + } else { + yy1163 := *x.Mode + yym1164 := z.EncBinary() + _ = yym1164 + if false { + } else { + r.EncodeInt(int64(yy1163)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1155[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("mode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Mode == nil { + r.EncodeNil() + } else { + yy1165 := *x.Mode + yym1166 := z.EncBinary() + _ = yym1166 + if false { + } else { + r.EncodeInt(int64(yy1165)) + } + } + } + } + if yyr1155 || yy2arr1155 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *KeyToPath) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1167 := z.DecBinary() + _ = yym1167 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1168 := r.ContainerType() + if yyct1168 == codecSelferValueTypeMap1234 { + yyl1168 := r.ReadMapStart() + if yyl1168 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1168, d) + } + } else if yyct1168 == codecSelferValueTypeArray1234 { + yyl1168 := r.ReadArrayStart() + if yyl1168 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1168, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *KeyToPath) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1169Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1169Slc + var yyhl1169 bool = l >= 0 + for yyj1169 := 0; ; yyj1169++ { + if yyhl1169 { + if yyj1169 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1169Slc = r.DecodeBytes(yys1169Slc, true, true) + yys1169 := string(yys1169Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1169 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "mode": + if r.TryDecodeAsNil() { + if x.Mode != nil { + x.Mode = nil + } + } else { + if x.Mode == nil { + x.Mode = new(int32) + } + yym1173 := z.DecBinary() + _ = yym1173 + if false { + } else { + *((*int32)(x.Mode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys1169) + } // end switch yys1169 + } // end for yyj1169 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *KeyToPath) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1174 int + var yyb1174 bool + var yyhl1174 bool = l >= 0 + yyj1174++ + if yyhl1174 { + yyb1174 = yyj1174 > l + } else { + yyb1174 = r.CheckBreak() + } + if yyb1174 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj1174++ + if yyhl1174 { + yyb1174 = yyj1174 > l + } else { + yyb1174 = r.CheckBreak() + } + if yyb1174 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj1174++ + if yyhl1174 { + yyb1174 = yyj1174 > l + } else { + yyb1174 = r.CheckBreak() + } + if yyb1174 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Mode != nil { + x.Mode = nil + } + } else { + if x.Mode == nil { + x.Mode = new(int32) + } + yym1178 := z.DecBinary() + _ = yym1178 + if false { + } else { + *((*int32)(x.Mode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj1174++ + if yyhl1174 { + yyb1174 = yyj1174 > l + } else { + yyb1174 = r.CheckBreak() + } + if yyb1174 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1174-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerPort) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1179 := z.EncBinary() + _ = yym1179 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1180 := !z.EncBinary() + yy2arr1180 := z.EncBasicHandle().StructToArray + var yyq1180 [5]bool + _, _, _ = yysep1180, yyq1180, yy2arr1180 + const yyr1180 bool = false + yyq1180[0] = x.Name != "" + yyq1180[1] = x.HostPort != 0 + yyq1180[3] = x.Protocol != "" + yyq1180[4] = x.HostIP != "" + var yynn1180 int + if yyr1180 || yy2arr1180 { + r.EncodeArrayStart(5) + } else { + yynn1180 = 1 + for _, b := range yyq1180 { + if b { + yynn1180++ + } + } + r.EncodeMapStart(yynn1180) + yynn1180 = 0 + } + if yyr1180 || yy2arr1180 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1180[0] { + yym1182 := z.EncBinary() + _ = yym1182 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1180[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1183 := z.EncBinary() + _ = yym1183 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr1180 || yy2arr1180 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1180[1] { + yym1185 := z.EncBinary() + _ = yym1185 + if false { + } else { + r.EncodeInt(int64(x.HostPort)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1180[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1186 := z.EncBinary() + _ = yym1186 + if false { + } else { + r.EncodeInt(int64(x.HostPort)) + } + } + } + if yyr1180 || yy2arr1180 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1188 := z.EncBinary() + _ = yym1188 + if false { + } else { + r.EncodeInt(int64(x.ContainerPort)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerPort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1189 := z.EncBinary() + _ = yym1189 + if false { + } else { + r.EncodeInt(int64(x.ContainerPort)) + } + } + if yyr1180 || yy2arr1180 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1180[3] { + x.Protocol.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1180[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("protocol")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Protocol.CodecEncodeSelf(e) + } + } + if yyr1180 || yy2arr1180 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1180[4] { + yym1192 := z.EncBinary() + _ = yym1192 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.HostIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1180[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1193 := z.EncBinary() + _ = yym1193 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.HostIP)) + } + } + } + if yyr1180 || yy2arr1180 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerPort) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1194 := z.DecBinary() + _ = yym1194 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1195 := r.ContainerType() + if yyct1195 == codecSelferValueTypeMap1234 { + yyl1195 := r.ReadMapStart() + if yyl1195 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1195, d) + } + } else if yyct1195 == codecSelferValueTypeArray1234 { + yyl1195 := r.ReadArrayStart() + if yyl1195 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1195, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerPort) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1196Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1196Slc + var yyhl1196 bool = l >= 0 + for yyj1196 := 0; ; yyj1196++ { + if yyhl1196 { + if yyj1196 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1196Slc = r.DecodeBytes(yys1196Slc, true, true) + yys1196 := string(yys1196Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1196 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "hostPort": + if r.TryDecodeAsNil() { + x.HostPort = 0 + } else { + x.HostPort = int32(r.DecodeInt(32)) + } + case "containerPort": + if r.TryDecodeAsNil() { + x.ContainerPort = 0 + } else { + x.ContainerPort = int32(r.DecodeInt(32)) + } + case "protocol": + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + case "hostIP": + if r.TryDecodeAsNil() { + x.HostIP = "" + } else { + x.HostIP = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1196) + } // end switch yys1196 + } // end for yyj1196 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerPort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1202 int + var yyb1202 bool + var yyhl1202 bool = l >= 0 + yyj1202++ + if yyhl1202 { + yyb1202 = yyj1202 > l + } else { + yyb1202 = r.CheckBreak() + } + if yyb1202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1202++ + if yyhl1202 { + yyb1202 = yyj1202 > l + } else { + yyb1202 = r.CheckBreak() + } + if yyb1202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostPort = 0 + } else { + x.HostPort = int32(r.DecodeInt(32)) + } + yyj1202++ + if yyhl1202 { + yyb1202 = yyj1202 > l + } else { + yyb1202 = r.CheckBreak() + } + if yyb1202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerPort = 0 + } else { + x.ContainerPort = int32(r.DecodeInt(32)) + } + yyj1202++ + if yyhl1202 { + yyb1202 = yyj1202 > l + } else { + yyb1202 = r.CheckBreak() + } + if yyb1202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + yyj1202++ + if yyhl1202 { + yyb1202 = yyj1202 > l + } else { + yyb1202 = r.CheckBreak() + } + if yyb1202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostIP = "" + } else { + x.HostIP = string(r.DecodeString()) + } + for { + yyj1202++ + if yyhl1202 { + yyb1202 = yyj1202 > l + } else { + yyb1202 = r.CheckBreak() + } + if yyb1202 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1202-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *VolumeMount) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1208 := z.EncBinary() + _ = yym1208 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1209 := !z.EncBinary() + yy2arr1209 := z.EncBasicHandle().StructToArray + var yyq1209 [4]bool + _, _, _ = yysep1209, yyq1209, yy2arr1209 + const yyr1209 bool = false + yyq1209[1] = x.ReadOnly != false + yyq1209[3] = x.SubPath != "" + var yynn1209 int + if yyr1209 || yy2arr1209 { + r.EncodeArrayStart(4) + } else { + yynn1209 = 2 + for _, b := range yyq1209 { + if b { + yynn1209++ + } + } + r.EncodeMapStart(yynn1209) + yynn1209 = 0 + } + if yyr1209 || yy2arr1209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1211 := z.EncBinary() + _ = yym1211 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1212 := z.EncBinary() + _ = yym1212 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1209 || yy2arr1209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1209[1] { + yym1214 := z.EncBinary() + _ = yym1214 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1209[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1215 := z.EncBinary() + _ = yym1215 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr1209 || yy2arr1209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1217 := z.EncBinary() + _ = yym1217 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.MountPath)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("mountPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1218 := z.EncBinary() + _ = yym1218 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.MountPath)) + } + } + if yyr1209 || yy2arr1209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1209[3] { + yym1220 := z.EncBinary() + _ = yym1220 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SubPath)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1209[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("subPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1221 := z.EncBinary() + _ = yym1221 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SubPath)) + } + } + } + if yyr1209 || yy2arr1209 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *VolumeMount) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1222 := z.DecBinary() + _ = yym1222 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1223 := r.ContainerType() + if yyct1223 == codecSelferValueTypeMap1234 { + yyl1223 := r.ReadMapStart() + if yyl1223 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1223, d) + } + } else if yyct1223 == codecSelferValueTypeArray1234 { + yyl1223 := r.ReadArrayStart() + if yyl1223 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1223, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *VolumeMount) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1224Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1224Slc + var yyhl1224 bool = l >= 0 + for yyj1224 := 0; ; yyj1224++ { + if yyhl1224 { + if yyj1224 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1224Slc = r.DecodeBytes(yys1224Slc, true, true) + yys1224 := string(yys1224Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1224 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + case "mountPath": + if r.TryDecodeAsNil() { + x.MountPath = "" + } else { + x.MountPath = string(r.DecodeString()) + } + case "subPath": + if r.TryDecodeAsNil() { + x.SubPath = "" + } else { + x.SubPath = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1224) + } // end switch yys1224 + } // end for yyj1224 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *VolumeMount) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1229 int + var yyb1229 bool + var yyhl1229 bool = l >= 0 + yyj1229++ + if yyhl1229 { + yyb1229 = yyj1229 > l + } else { + yyb1229 = r.CheckBreak() + } + if yyb1229 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1229++ + if yyhl1229 { + yyb1229 = yyj1229 > l + } else { + yyb1229 = r.CheckBreak() + } + if yyb1229 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + yyj1229++ + if yyhl1229 { + yyb1229 = yyj1229 > l + } else { + yyb1229 = r.CheckBreak() + } + if yyb1229 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MountPath = "" + } else { + x.MountPath = string(r.DecodeString()) + } + yyj1229++ + if yyhl1229 { + yyb1229 = yyj1229 > l + } else { + yyb1229 = r.CheckBreak() + } + if yyb1229 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SubPath = "" + } else { + x.SubPath = string(r.DecodeString()) + } + for { + yyj1229++ + if yyhl1229 { + yyb1229 = yyj1229 > l + } else { + yyb1229 = r.CheckBreak() + } + if yyb1229 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1229-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EnvVar) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1234 := z.EncBinary() + _ = yym1234 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1235 := !z.EncBinary() + yy2arr1235 := z.EncBasicHandle().StructToArray + var yyq1235 [3]bool + _, _, _ = yysep1235, yyq1235, yy2arr1235 + const yyr1235 bool = false + yyq1235[1] = x.Value != "" + yyq1235[2] = x.ValueFrom != nil + var yynn1235 int + if yyr1235 || yy2arr1235 { + r.EncodeArrayStart(3) + } else { + yynn1235 = 1 + for _, b := range yyq1235 { + if b { + yynn1235++ + } + } + r.EncodeMapStart(yynn1235) + yynn1235 = 0 + } + if yyr1235 || yy2arr1235 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1237 := z.EncBinary() + _ = yym1237 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1238 := z.EncBinary() + _ = yym1238 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1235 || yy2arr1235 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1235[1] { + yym1240 := z.EncBinary() + _ = yym1240 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1235[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1241 := z.EncBinary() + _ = yym1241 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + } + if yyr1235 || yy2arr1235 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1235[2] { + if x.ValueFrom == nil { + r.EncodeNil() + } else { + x.ValueFrom.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1235[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("valueFrom")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ValueFrom == nil { + r.EncodeNil() + } else { + x.ValueFrom.CodecEncodeSelf(e) + } + } + } + if yyr1235 || yy2arr1235 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EnvVar) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1243 := z.DecBinary() + _ = yym1243 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1244 := r.ContainerType() + if yyct1244 == codecSelferValueTypeMap1234 { + yyl1244 := r.ReadMapStart() + if yyl1244 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1244, d) + } + } else if yyct1244 == codecSelferValueTypeArray1234 { + yyl1244 := r.ReadArrayStart() + if yyl1244 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1244, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EnvVar) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1245Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1245Slc + var yyhl1245 bool = l >= 0 + for yyj1245 := 0; ; yyj1245++ { + if yyhl1245 { + if yyj1245 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1245Slc = r.DecodeBytes(yys1245Slc, true, true) + yys1245 := string(yys1245Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1245 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + case "valueFrom": + if r.TryDecodeAsNil() { + if x.ValueFrom != nil { + x.ValueFrom = nil + } + } else { + if x.ValueFrom == nil { + x.ValueFrom = new(EnvVarSource) + } + x.ValueFrom.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1245) + } // end switch yys1245 + } // end for yyj1245 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EnvVar) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1249 int + var yyb1249 bool + var yyhl1249 bool = l >= 0 + yyj1249++ + if yyhl1249 { + yyb1249 = yyj1249 > l + } else { + yyb1249 = r.CheckBreak() + } + if yyb1249 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1249++ + if yyhl1249 { + yyb1249 = yyj1249 > l + } else { + yyb1249 = r.CheckBreak() + } + if yyb1249 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + yyj1249++ + if yyhl1249 { + yyb1249 = yyj1249 > l + } else { + yyb1249 = r.CheckBreak() + } + if yyb1249 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ValueFrom != nil { + x.ValueFrom = nil + } + } else { + if x.ValueFrom == nil { + x.ValueFrom = new(EnvVarSource) + } + x.ValueFrom.CodecDecodeSelf(d) + } + for { + yyj1249++ + if yyhl1249 { + yyb1249 = yyj1249 > l + } else { + yyb1249 = r.CheckBreak() + } + if yyb1249 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1249-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EnvVarSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1253 := z.EncBinary() + _ = yym1253 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1254 := !z.EncBinary() + yy2arr1254 := z.EncBasicHandle().StructToArray + var yyq1254 [4]bool + _, _, _ = yysep1254, yyq1254, yy2arr1254 + const yyr1254 bool = false + yyq1254[0] = x.FieldRef != nil + yyq1254[1] = x.ResourceFieldRef != nil + yyq1254[2] = x.ConfigMapKeyRef != nil + yyq1254[3] = x.SecretKeyRef != nil + var yynn1254 int + if yyr1254 || yy2arr1254 { + r.EncodeArrayStart(4) + } else { + yynn1254 = 0 + for _, b := range yyq1254 { + if b { + yynn1254++ + } + } + r.EncodeMapStart(yynn1254) + yynn1254 = 0 + } + if yyr1254 || yy2arr1254 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1254[0] { + if x.FieldRef == nil { + r.EncodeNil() + } else { + x.FieldRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1254[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FieldRef == nil { + r.EncodeNil() + } else { + x.FieldRef.CodecEncodeSelf(e) + } + } + } + if yyr1254 || yy2arr1254 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1254[1] { + if x.ResourceFieldRef == nil { + r.EncodeNil() + } else { + x.ResourceFieldRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1254[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceFieldRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ResourceFieldRef == nil { + r.EncodeNil() + } else { + x.ResourceFieldRef.CodecEncodeSelf(e) + } + } + } + if yyr1254 || yy2arr1254 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1254[2] { + if x.ConfigMapKeyRef == nil { + r.EncodeNil() + } else { + x.ConfigMapKeyRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1254[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("configMapKeyRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ConfigMapKeyRef == nil { + r.EncodeNil() + } else { + x.ConfigMapKeyRef.CodecEncodeSelf(e) + } + } + } + if yyr1254 || yy2arr1254 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1254[3] { + if x.SecretKeyRef == nil { + r.EncodeNil() + } else { + x.SecretKeyRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1254[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretKeyRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretKeyRef == nil { + r.EncodeNil() + } else { + x.SecretKeyRef.CodecEncodeSelf(e) + } + } + } + if yyr1254 || yy2arr1254 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EnvVarSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1259 := z.DecBinary() + _ = yym1259 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1260 := r.ContainerType() + if yyct1260 == codecSelferValueTypeMap1234 { + yyl1260 := r.ReadMapStart() + if yyl1260 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1260, d) + } + } else if yyct1260 == codecSelferValueTypeArray1234 { + yyl1260 := r.ReadArrayStart() + if yyl1260 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1260, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EnvVarSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1261Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1261Slc + var yyhl1261 bool = l >= 0 + for yyj1261 := 0; ; yyj1261++ { + if yyhl1261 { + if yyj1261 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1261Slc = r.DecodeBytes(yys1261Slc, true, true) + yys1261 := string(yys1261Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1261 { + case "fieldRef": + if r.TryDecodeAsNil() { + if x.FieldRef != nil { + x.FieldRef = nil + } + } else { + if x.FieldRef == nil { + x.FieldRef = new(ObjectFieldSelector) + } + x.FieldRef.CodecDecodeSelf(d) + } + case "resourceFieldRef": + if r.TryDecodeAsNil() { + if x.ResourceFieldRef != nil { + x.ResourceFieldRef = nil + } + } else { + if x.ResourceFieldRef == nil { + x.ResourceFieldRef = new(ResourceFieldSelector) + } + x.ResourceFieldRef.CodecDecodeSelf(d) + } + case "configMapKeyRef": + if r.TryDecodeAsNil() { + if x.ConfigMapKeyRef != nil { + x.ConfigMapKeyRef = nil + } + } else { + if x.ConfigMapKeyRef == nil { + x.ConfigMapKeyRef = new(ConfigMapKeySelector) + } + x.ConfigMapKeyRef.CodecDecodeSelf(d) + } + case "secretKeyRef": + if r.TryDecodeAsNil() { + if x.SecretKeyRef != nil { + x.SecretKeyRef = nil + } + } else { + if x.SecretKeyRef == nil { + x.SecretKeyRef = new(SecretKeySelector) + } + x.SecretKeyRef.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1261) + } // end switch yys1261 + } // end for yyj1261 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EnvVarSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1266 int + var yyb1266 bool + var yyhl1266 bool = l >= 0 + yyj1266++ + if yyhl1266 { + yyb1266 = yyj1266 > l + } else { + yyb1266 = r.CheckBreak() + } + if yyb1266 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FieldRef != nil { + x.FieldRef = nil + } + } else { + if x.FieldRef == nil { + x.FieldRef = new(ObjectFieldSelector) + } + x.FieldRef.CodecDecodeSelf(d) + } + yyj1266++ + if yyhl1266 { + yyb1266 = yyj1266 > l + } else { + yyb1266 = r.CheckBreak() + } + if yyb1266 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ResourceFieldRef != nil { + x.ResourceFieldRef = nil + } + } else { + if x.ResourceFieldRef == nil { + x.ResourceFieldRef = new(ResourceFieldSelector) + } + x.ResourceFieldRef.CodecDecodeSelf(d) + } + yyj1266++ + if yyhl1266 { + yyb1266 = yyj1266 > l + } else { + yyb1266 = r.CheckBreak() + } + if yyb1266 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ConfigMapKeyRef != nil { + x.ConfigMapKeyRef = nil + } + } else { + if x.ConfigMapKeyRef == nil { + x.ConfigMapKeyRef = new(ConfigMapKeySelector) + } + x.ConfigMapKeyRef.CodecDecodeSelf(d) + } + yyj1266++ + if yyhl1266 { + yyb1266 = yyj1266 > l + } else { + yyb1266 = r.CheckBreak() + } + if yyb1266 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretKeyRef != nil { + x.SecretKeyRef = nil + } + } else { + if x.SecretKeyRef == nil { + x.SecretKeyRef = new(SecretKeySelector) + } + x.SecretKeyRef.CodecDecodeSelf(d) + } + for { + yyj1266++ + if yyhl1266 { + yyb1266 = yyj1266 > l + } else { + yyb1266 = r.CheckBreak() + } + if yyb1266 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1266-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ObjectFieldSelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1271 := z.EncBinary() + _ = yym1271 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1272 := !z.EncBinary() + yy2arr1272 := z.EncBasicHandle().StructToArray + var yyq1272 [2]bool + _, _, _ = yysep1272, yyq1272, yy2arr1272 + const yyr1272 bool = false + var yynn1272 int + if yyr1272 || yy2arr1272 { + r.EncodeArrayStart(2) + } else { + yynn1272 = 2 + for _, b := range yyq1272 { + if b { + yynn1272++ + } + } + r.EncodeMapStart(yynn1272) + yynn1272 = 0 + } + if yyr1272 || yy2arr1272 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1274 := z.EncBinary() + _ = yym1274 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1275 := z.EncBinary() + _ = yym1275 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + if yyr1272 || yy2arr1272 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1277 := z.EncBinary() + _ = yym1277 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldPath)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1278 := z.EncBinary() + _ = yym1278 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldPath)) + } + } + if yyr1272 || yy2arr1272 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ObjectFieldSelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1279 := z.DecBinary() + _ = yym1279 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1280 := r.ContainerType() + if yyct1280 == codecSelferValueTypeMap1234 { + yyl1280 := r.ReadMapStart() + if yyl1280 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1280, d) + } + } else if yyct1280 == codecSelferValueTypeArray1234 { + yyl1280 := r.ReadArrayStart() + if yyl1280 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1280, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ObjectFieldSelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1281Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1281Slc + var yyhl1281 bool = l >= 0 + for yyj1281 := 0; ; yyj1281++ { + if yyhl1281 { + if yyj1281 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1281Slc = r.DecodeBytes(yys1281Slc, true, true) + yys1281 := string(yys1281Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1281 { + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "fieldPath": + if r.TryDecodeAsNil() { + x.FieldPath = "" + } else { + x.FieldPath = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1281) + } // end switch yys1281 + } // end for yyj1281 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ObjectFieldSelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1284 int + var yyb1284 bool + var yyhl1284 bool = l >= 0 + yyj1284++ + if yyhl1284 { + yyb1284 = yyj1284 > l + } else { + yyb1284 = r.CheckBreak() + } + if yyb1284 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj1284++ + if yyhl1284 { + yyb1284 = yyj1284 > l + } else { + yyb1284 = r.CheckBreak() + } + if yyb1284 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FieldPath = "" + } else { + x.FieldPath = string(r.DecodeString()) + } + for { + yyj1284++ + if yyhl1284 { + yyb1284 = yyj1284 > l + } else { + yyb1284 = r.CheckBreak() + } + if yyb1284 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1284-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceFieldSelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1287 := z.EncBinary() + _ = yym1287 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1288 := !z.EncBinary() + yy2arr1288 := z.EncBasicHandle().StructToArray + var yyq1288 [3]bool + _, _, _ = yysep1288, yyq1288, yy2arr1288 + const yyr1288 bool = false + yyq1288[0] = x.ContainerName != "" + yyq1288[2] = true + var yynn1288 int + if yyr1288 || yy2arr1288 { + r.EncodeArrayStart(3) + } else { + yynn1288 = 1 + for _, b := range yyq1288 { + if b { + yynn1288++ + } + } + r.EncodeMapStart(yynn1288) + yynn1288 = 0 + } + if yyr1288 || yy2arr1288 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1288[0] { + yym1290 := z.EncBinary() + _ = yym1290 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1288[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1291 := z.EncBinary() + _ = yym1291 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerName)) + } + } + } + if yyr1288 || yy2arr1288 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1293 := z.EncBinary() + _ = yym1293 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Resource)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resource")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1294 := z.EncBinary() + _ = yym1294 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Resource)) + } + } + if yyr1288 || yy2arr1288 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1288[2] { + yy1296 := &x.Divisor + yym1297 := z.EncBinary() + _ = yym1297 + if false { + } else if z.HasExtensions() && z.EncExt(yy1296) { + } else if !yym1297 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1296) + } else { + z.EncFallback(yy1296) + } + } else { + r.EncodeNil() + } + } else { + if yyq1288[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("divisor")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1298 := &x.Divisor + yym1299 := z.EncBinary() + _ = yym1299 + if false { + } else if z.HasExtensions() && z.EncExt(yy1298) { + } else if !yym1299 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1298) + } else { + z.EncFallback(yy1298) + } + } + } + if yyr1288 || yy2arr1288 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceFieldSelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1300 := z.DecBinary() + _ = yym1300 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1301 := r.ContainerType() + if yyct1301 == codecSelferValueTypeMap1234 { + yyl1301 := r.ReadMapStart() + if yyl1301 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1301, d) + } + } else if yyct1301 == codecSelferValueTypeArray1234 { + yyl1301 := r.ReadArrayStart() + if yyl1301 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1301, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceFieldSelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1302Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1302Slc + var yyhl1302 bool = l >= 0 + for yyj1302 := 0; ; yyj1302++ { + if yyhl1302 { + if yyj1302 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1302Slc = r.DecodeBytes(yys1302Slc, true, true) + yys1302 := string(yys1302Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1302 { + case "containerName": + if r.TryDecodeAsNil() { + x.ContainerName = "" + } else { + x.ContainerName = string(r.DecodeString()) + } + case "resource": + if r.TryDecodeAsNil() { + x.Resource = "" + } else { + x.Resource = string(r.DecodeString()) + } + case "divisor": + if r.TryDecodeAsNil() { + x.Divisor = pkg3_resource.Quantity{} + } else { + yyv1305 := &x.Divisor + yym1306 := z.DecBinary() + _ = yym1306 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1305) { + } else if !yym1306 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1305) + } else { + z.DecFallback(yyv1305, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys1302) + } // end switch yys1302 + } // end for yyj1302 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceFieldSelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1307 int + var yyb1307 bool + var yyhl1307 bool = l >= 0 + yyj1307++ + if yyhl1307 { + yyb1307 = yyj1307 > l + } else { + yyb1307 = r.CheckBreak() + } + if yyb1307 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerName = "" + } else { + x.ContainerName = string(r.DecodeString()) + } + yyj1307++ + if yyhl1307 { + yyb1307 = yyj1307 > l + } else { + yyb1307 = r.CheckBreak() + } + if yyb1307 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Resource = "" + } else { + x.Resource = string(r.DecodeString()) + } + yyj1307++ + if yyhl1307 { + yyb1307 = yyj1307 > l + } else { + yyb1307 = r.CheckBreak() + } + if yyb1307 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Divisor = pkg3_resource.Quantity{} + } else { + yyv1310 := &x.Divisor + yym1311 := z.DecBinary() + _ = yym1311 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1310) { + } else if !yym1311 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1310) + } else { + z.DecFallback(yyv1310, false) + } + } + for { + yyj1307++ + if yyhl1307 { + yyb1307 = yyj1307 > l + } else { + yyb1307 = r.CheckBreak() + } + if yyb1307 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1307-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ConfigMapKeySelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1312 := z.EncBinary() + _ = yym1312 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1313 := !z.EncBinary() + yy2arr1313 := z.EncBasicHandle().StructToArray + var yyq1313 [2]bool + _, _, _ = yysep1313, yyq1313, yy2arr1313 + const yyr1313 bool = false + var yynn1313 int + if yyr1313 || yy2arr1313 { + r.EncodeArrayStart(2) + } else { + yynn1313 = 2 + for _, b := range yyq1313 { + if b { + yynn1313++ + } + } + r.EncodeMapStart(yynn1313) + yynn1313 = 0 + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1315 := z.EncBinary() + _ = yym1315 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1316 := z.EncBinary() + _ = yym1316 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1318 := z.EncBinary() + _ = yym1318 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1319 := z.EncBinary() + _ = yym1319 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ConfigMapKeySelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1320 := z.DecBinary() + _ = yym1320 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1321 := r.ContainerType() + if yyct1321 == codecSelferValueTypeMap1234 { + yyl1321 := r.ReadMapStart() + if yyl1321 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1321, d) + } + } else if yyct1321 == codecSelferValueTypeArray1234 { + yyl1321 := r.ReadArrayStart() + if yyl1321 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1321, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ConfigMapKeySelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1322Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1322Slc + var yyhl1322 bool = l >= 0 + for yyj1322 := 0; ; yyj1322++ { + if yyhl1322 { + if yyj1322 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1322Slc = r.DecodeBytes(yys1322Slc, true, true) + yys1322 := string(yys1322Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1322 { + case "Name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1322) + } // end switch yys1322 + } // end for yyj1322 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ConfigMapKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1325 int + var yyb1325 bool + var yyhl1325 bool = l >= 0 + yyj1325++ + if yyhl1325 { + yyb1325 = yyj1325 > l + } else { + yyb1325 = r.CheckBreak() + } + if yyb1325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1325++ + if yyhl1325 { + yyb1325 = yyj1325 > l + } else { + yyb1325 = r.CheckBreak() + } + if yyb1325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + for { + yyj1325++ + if yyhl1325 { + yyb1325 = yyj1325 > l + } else { + yyb1325 = r.CheckBreak() + } + if yyb1325 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1325-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SecretKeySelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1328 := z.EncBinary() + _ = yym1328 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1329 := !z.EncBinary() + yy2arr1329 := z.EncBasicHandle().StructToArray + var yyq1329 [2]bool + _, _, _ = yysep1329, yyq1329, yy2arr1329 + const yyr1329 bool = false + var yynn1329 int + if yyr1329 || yy2arr1329 { + r.EncodeArrayStart(2) + } else { + yynn1329 = 2 + for _, b := range yyq1329 { + if b { + yynn1329++ + } + } + r.EncodeMapStart(yynn1329) + yynn1329 = 0 + } + if yyr1329 || yy2arr1329 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1331 := z.EncBinary() + _ = yym1331 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1332 := z.EncBinary() + _ = yym1332 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1329 || yy2arr1329 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1334 := z.EncBinary() + _ = yym1334 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1335 := z.EncBinary() + _ = yym1335 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1329 || yy2arr1329 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecretKeySelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1336 := z.DecBinary() + _ = yym1336 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1337 := r.ContainerType() + if yyct1337 == codecSelferValueTypeMap1234 { + yyl1337 := r.ReadMapStart() + if yyl1337 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1337, d) + } + } else if yyct1337 == codecSelferValueTypeArray1234 { + yyl1337 := r.ReadArrayStart() + if yyl1337 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1337, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecretKeySelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1338Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1338Slc + var yyhl1338 bool = l >= 0 + for yyj1338 := 0; ; yyj1338++ { + if yyhl1338 { + if yyj1338 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1338Slc = r.DecodeBytes(yys1338Slc, true, true) + yys1338 := string(yys1338Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1338 { + case "Name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1338) + } // end switch yys1338 + } // end for yyj1338 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecretKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1341 int + var yyb1341 bool + var yyhl1341 bool = l >= 0 + yyj1341++ + if yyhl1341 { + yyb1341 = yyj1341 > l + } else { + yyb1341 = r.CheckBreak() + } + if yyb1341 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1341++ + if yyhl1341 { + yyb1341 = yyj1341 > l + } else { + yyb1341 = r.CheckBreak() + } + if yyb1341 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + for { + yyj1341++ + if yyhl1341 { + yyb1341 = yyj1341 > l + } else { + yyb1341 = r.CheckBreak() + } + if yyb1341 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1341-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HTTPHeader) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1344 := z.EncBinary() + _ = yym1344 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1345 := !z.EncBinary() + yy2arr1345 := z.EncBasicHandle().StructToArray + var yyq1345 [2]bool + _, _, _ = yysep1345, yyq1345, yy2arr1345 + const yyr1345 bool = false + var yynn1345 int + if yyr1345 || yy2arr1345 { + r.EncodeArrayStart(2) + } else { + yynn1345 = 2 + for _, b := range yyq1345 { + if b { + yynn1345++ + } + } + r.EncodeMapStart(yynn1345) + yynn1345 = 0 + } + if yyr1345 || yy2arr1345 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1347 := z.EncBinary() + _ = yym1347 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1348 := z.EncBinary() + _ = yym1348 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1345 || yy2arr1345 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1350 := z.EncBinary() + _ = yym1350 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1351 := z.EncBinary() + _ = yym1351 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + if yyr1345 || yy2arr1345 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HTTPHeader) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1352 := z.DecBinary() + _ = yym1352 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1353 := r.ContainerType() + if yyct1353 == codecSelferValueTypeMap1234 { + yyl1353 := r.ReadMapStart() + if yyl1353 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1353, d) + } + } else if yyct1353 == codecSelferValueTypeArray1234 { + yyl1353 := r.ReadArrayStart() + if yyl1353 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1353, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HTTPHeader) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1354Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1354Slc + var yyhl1354 bool = l >= 0 + for yyj1354 := 0; ; yyj1354++ { + if yyhl1354 { + if yyj1354 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1354Slc = r.DecodeBytes(yys1354Slc, true, true) + yys1354 := string(yys1354Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1354 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1354) + } // end switch yys1354 + } // end for yyj1354 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HTTPHeader) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1357 int + var yyb1357 bool + var yyhl1357 bool = l >= 0 + yyj1357++ + if yyhl1357 { + yyb1357 = yyj1357 > l + } else { + yyb1357 = r.CheckBreak() + } + if yyb1357 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1357++ + if yyhl1357 { + yyb1357 = yyj1357 > l + } else { + yyb1357 = r.CheckBreak() + } + if yyb1357 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + for { + yyj1357++ + if yyhl1357 { + yyb1357 = yyj1357 > l + } else { + yyb1357 = r.CheckBreak() + } + if yyb1357 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1357-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HTTPGetAction) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1360 := z.EncBinary() + _ = yym1360 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1361 := !z.EncBinary() + yy2arr1361 := z.EncBasicHandle().StructToArray + var yyq1361 [5]bool + _, _, _ = yysep1361, yyq1361, yy2arr1361 + const yyr1361 bool = false + yyq1361[0] = x.Path != "" + yyq1361[1] = true + yyq1361[2] = x.Host != "" + yyq1361[3] = x.Scheme != "" + yyq1361[4] = len(x.HTTPHeaders) != 0 + var yynn1361 int + if yyr1361 || yy2arr1361 { + r.EncodeArrayStart(5) + } else { + yynn1361 = 0 + for _, b := range yyq1361 { + if b { + yynn1361++ + } + } + r.EncodeMapStart(yynn1361) + yynn1361 = 0 + } + if yyr1361 || yy2arr1361 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1361[0] { + yym1363 := z.EncBinary() + _ = yym1363 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1361[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1364 := z.EncBinary() + _ = yym1364 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + } + if yyr1361 || yy2arr1361 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1361[1] { + yy1366 := &x.Port + yym1367 := z.EncBinary() + _ = yym1367 + if false { + } else if z.HasExtensions() && z.EncExt(yy1366) { + } else if !yym1367 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1366) + } else { + z.EncFallback(yy1366) + } + } else { + r.EncodeNil() + } + } else { + if yyq1361[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1368 := &x.Port + yym1369 := z.EncBinary() + _ = yym1369 + if false { + } else if z.HasExtensions() && z.EncExt(yy1368) { + } else if !yym1369 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1368) + } else { + z.EncFallback(yy1368) + } + } + } + if yyr1361 || yy2arr1361 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1361[2] { + yym1371 := z.EncBinary() + _ = yym1371 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1361[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("host")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1372 := z.EncBinary() + _ = yym1372 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } + } + if yyr1361 || yy2arr1361 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1361[3] { + x.Scheme.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1361[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("scheme")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Scheme.CodecEncodeSelf(e) + } + } + if yyr1361 || yy2arr1361 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1361[4] { + if x.HTTPHeaders == nil { + r.EncodeNil() + } else { + yym1375 := z.EncBinary() + _ = yym1375 + if false { + } else { + h.encSliceHTTPHeader(([]HTTPHeader)(x.HTTPHeaders), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1361[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("httpHeaders")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HTTPHeaders == nil { + r.EncodeNil() + } else { + yym1376 := z.EncBinary() + _ = yym1376 + if false { + } else { + h.encSliceHTTPHeader(([]HTTPHeader)(x.HTTPHeaders), e) + } + } + } + } + if yyr1361 || yy2arr1361 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HTTPGetAction) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1377 := z.DecBinary() + _ = yym1377 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1378 := r.ContainerType() + if yyct1378 == codecSelferValueTypeMap1234 { + yyl1378 := r.ReadMapStart() + if yyl1378 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1378, d) + } + } else if yyct1378 == codecSelferValueTypeArray1234 { + yyl1378 := r.ReadArrayStart() + if yyl1378 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1378, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HTTPGetAction) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1379Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1379Slc + var yyhl1379 bool = l >= 0 + for yyj1379 := 0; ; yyj1379++ { + if yyhl1379 { + if yyj1379 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1379Slc = r.DecodeBytes(yys1379Slc, true, true) + yys1379 := string(yys1379Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1379 { + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "port": + if r.TryDecodeAsNil() { + x.Port = pkg4_intstr.IntOrString{} + } else { + yyv1381 := &x.Port + yym1382 := z.DecBinary() + _ = yym1382 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1381) { + } else if !yym1382 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1381) + } else { + z.DecFallback(yyv1381, false) + } + } + case "host": + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + case "scheme": + if r.TryDecodeAsNil() { + x.Scheme = "" + } else { + x.Scheme = URIScheme(r.DecodeString()) + } + case "httpHeaders": + if r.TryDecodeAsNil() { + x.HTTPHeaders = nil + } else { + yyv1385 := &x.HTTPHeaders + yym1386 := z.DecBinary() + _ = yym1386 + if false { + } else { + h.decSliceHTTPHeader((*[]HTTPHeader)(yyv1385), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1379) + } // end switch yys1379 + } // end for yyj1379 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HTTPGetAction) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1387 int + var yyb1387 bool + var yyhl1387 bool = l >= 0 + yyj1387++ + if yyhl1387 { + yyb1387 = yyj1387 > l + } else { + yyb1387 = r.CheckBreak() + } + if yyb1387 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj1387++ + if yyhl1387 { + yyb1387 = yyj1387 > l + } else { + yyb1387 = r.CheckBreak() + } + if yyb1387 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = pkg4_intstr.IntOrString{} + } else { + yyv1389 := &x.Port + yym1390 := z.DecBinary() + _ = yym1390 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1389) { + } else if !yym1390 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1389) + } else { + z.DecFallback(yyv1389, false) + } + } + yyj1387++ + if yyhl1387 { + yyb1387 = yyj1387 > l + } else { + yyb1387 = r.CheckBreak() + } + if yyb1387 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + yyj1387++ + if yyhl1387 { + yyb1387 = yyj1387 > l + } else { + yyb1387 = r.CheckBreak() + } + if yyb1387 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Scheme = "" + } else { + x.Scheme = URIScheme(r.DecodeString()) + } + yyj1387++ + if yyhl1387 { + yyb1387 = yyj1387 > l + } else { + yyb1387 = r.CheckBreak() + } + if yyb1387 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HTTPHeaders = nil + } else { + yyv1393 := &x.HTTPHeaders + yym1394 := z.DecBinary() + _ = yym1394 + if false { + } else { + h.decSliceHTTPHeader((*[]HTTPHeader)(yyv1393), d) + } + } + for { + yyj1387++ + if yyhl1387 { + yyb1387 = yyj1387 > l + } else { + yyb1387 = r.CheckBreak() + } + if yyb1387 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1387-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x URIScheme) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1395 := z.EncBinary() + _ = yym1395 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *URIScheme) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1396 := z.DecBinary() + _ = yym1396 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *TCPSocketAction) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1397 := z.EncBinary() + _ = yym1397 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1398 := !z.EncBinary() + yy2arr1398 := z.EncBasicHandle().StructToArray + var yyq1398 [1]bool + _, _, _ = yysep1398, yyq1398, yy2arr1398 + const yyr1398 bool = false + yyq1398[0] = true + var yynn1398 int + if yyr1398 || yy2arr1398 { + r.EncodeArrayStart(1) + } else { + yynn1398 = 0 + for _, b := range yyq1398 { + if b { + yynn1398++ + } + } + r.EncodeMapStart(yynn1398) + yynn1398 = 0 + } + if yyr1398 || yy2arr1398 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1398[0] { + yy1400 := &x.Port + yym1401 := z.EncBinary() + _ = yym1401 + if false { + } else if z.HasExtensions() && z.EncExt(yy1400) { + } else if !yym1401 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1400) + } else { + z.EncFallback(yy1400) + } + } else { + r.EncodeNil() + } + } else { + if yyq1398[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1402 := &x.Port + yym1403 := z.EncBinary() + _ = yym1403 + if false { + } else if z.HasExtensions() && z.EncExt(yy1402) { + } else if !yym1403 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1402) + } else { + z.EncFallback(yy1402) + } + } + } + if yyr1398 || yy2arr1398 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *TCPSocketAction) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1404 := z.DecBinary() + _ = yym1404 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1405 := r.ContainerType() + if yyct1405 == codecSelferValueTypeMap1234 { + yyl1405 := r.ReadMapStart() + if yyl1405 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1405, d) + } + } else if yyct1405 == codecSelferValueTypeArray1234 { + yyl1405 := r.ReadArrayStart() + if yyl1405 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1405, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *TCPSocketAction) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1406Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1406Slc + var yyhl1406 bool = l >= 0 + for yyj1406 := 0; ; yyj1406++ { + if yyhl1406 { + if yyj1406 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1406Slc = r.DecodeBytes(yys1406Slc, true, true) + yys1406 := string(yys1406Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1406 { + case "port": + if r.TryDecodeAsNil() { + x.Port = pkg4_intstr.IntOrString{} + } else { + yyv1407 := &x.Port + yym1408 := z.DecBinary() + _ = yym1408 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1407) { + } else if !yym1408 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1407) + } else { + z.DecFallback(yyv1407, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys1406) + } // end switch yys1406 + } // end for yyj1406 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *TCPSocketAction) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1409 int + var yyb1409 bool + var yyhl1409 bool = l >= 0 + yyj1409++ + if yyhl1409 { + yyb1409 = yyj1409 > l + } else { + yyb1409 = r.CheckBreak() + } + if yyb1409 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = pkg4_intstr.IntOrString{} + } else { + yyv1410 := &x.Port + yym1411 := z.DecBinary() + _ = yym1411 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1410) { + } else if !yym1411 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1410) + } else { + z.DecFallback(yyv1410, false) + } + } + for { + yyj1409++ + if yyhl1409 { + yyb1409 = yyj1409 > l + } else { + yyb1409 = r.CheckBreak() + } + if yyb1409 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1409-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ExecAction) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1412 := z.EncBinary() + _ = yym1412 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1413 := !z.EncBinary() + yy2arr1413 := z.EncBasicHandle().StructToArray + var yyq1413 [1]bool + _, _, _ = yysep1413, yyq1413, yy2arr1413 + const yyr1413 bool = false + yyq1413[0] = len(x.Command) != 0 + var yynn1413 int + if yyr1413 || yy2arr1413 { + r.EncodeArrayStart(1) + } else { + yynn1413 = 0 + for _, b := range yyq1413 { + if b { + yynn1413++ + } + } + r.EncodeMapStart(yynn1413) + yynn1413 = 0 + } + if yyr1413 || yy2arr1413 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1413[0] { + if x.Command == nil { + r.EncodeNil() + } else { + yym1415 := z.EncBinary() + _ = yym1415 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1413[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("command")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Command == nil { + r.EncodeNil() + } else { + yym1416 := z.EncBinary() + _ = yym1416 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } + } + if yyr1413 || yy2arr1413 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ExecAction) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1417 := z.DecBinary() + _ = yym1417 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1418 := r.ContainerType() + if yyct1418 == codecSelferValueTypeMap1234 { + yyl1418 := r.ReadMapStart() + if yyl1418 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1418, d) + } + } else if yyct1418 == codecSelferValueTypeArray1234 { + yyl1418 := r.ReadArrayStart() + if yyl1418 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1418, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ExecAction) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1419Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1419Slc + var yyhl1419 bool = l >= 0 + for yyj1419 := 0; ; yyj1419++ { + if yyhl1419 { + if yyj1419 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1419Slc = r.DecodeBytes(yys1419Slc, true, true) + yys1419 := string(yys1419Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1419 { + case "command": + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv1420 := &x.Command + yym1421 := z.DecBinary() + _ = yym1421 + if false { + } else { + z.F.DecSliceStringX(yyv1420, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1419) + } // end switch yys1419 + } // end for yyj1419 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ExecAction) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1422 int + var yyb1422 bool + var yyhl1422 bool = l >= 0 + yyj1422++ + if yyhl1422 { + yyb1422 = yyj1422 > l + } else { + yyb1422 = r.CheckBreak() + } + if yyb1422 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv1423 := &x.Command + yym1424 := z.DecBinary() + _ = yym1424 + if false { + } else { + z.F.DecSliceStringX(yyv1423, false, d) + } + } + for { + yyj1422++ + if yyhl1422 { + yyb1422 = yyj1422 > l + } else { + yyb1422 = r.CheckBreak() + } + if yyb1422 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1422-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Probe) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1425 := z.EncBinary() + _ = yym1425 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1426 := !z.EncBinary() + yy2arr1426 := z.EncBasicHandle().StructToArray + var yyq1426 [8]bool + _, _, _ = yysep1426, yyq1426, yy2arr1426 + const yyr1426 bool = false + yyq1426[0] = x.Handler.Exec != nil && x.Exec != nil + yyq1426[1] = x.Handler.HTTPGet != nil && x.HTTPGet != nil + yyq1426[2] = x.Handler.TCPSocket != nil && x.TCPSocket != nil + yyq1426[3] = x.InitialDelaySeconds != 0 + yyq1426[4] = x.TimeoutSeconds != 0 + yyq1426[5] = x.PeriodSeconds != 0 + yyq1426[6] = x.SuccessThreshold != 0 + yyq1426[7] = x.FailureThreshold != 0 + var yynn1426 int + if yyr1426 || yy2arr1426 { + r.EncodeArrayStart(8) + } else { + yynn1426 = 0 + for _, b := range yyq1426 { + if b { + yynn1426++ + } + } + r.EncodeMapStart(yynn1426) + yynn1426 = 0 + } + var yyn1427 bool + if x.Handler.Exec == nil { + yyn1427 = true + goto LABEL1427 + } + LABEL1427: + if yyr1426 || yy2arr1426 { + if yyn1427 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1426[0] { + if x.Exec == nil { + r.EncodeNil() + } else { + x.Exec.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq1426[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("exec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn1427 { + r.EncodeNil() + } else { + if x.Exec == nil { + r.EncodeNil() + } else { + x.Exec.CodecEncodeSelf(e) + } + } + } + } + var yyn1428 bool + if x.Handler.HTTPGet == nil { + yyn1428 = true + goto LABEL1428 + } + LABEL1428: + if yyr1426 || yy2arr1426 { + if yyn1428 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1426[1] { + if x.HTTPGet == nil { + r.EncodeNil() + } else { + x.HTTPGet.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq1426[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("httpGet")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn1428 { + r.EncodeNil() + } else { + if x.HTTPGet == nil { + r.EncodeNil() + } else { + x.HTTPGet.CodecEncodeSelf(e) + } + } + } + } + var yyn1429 bool + if x.Handler.TCPSocket == nil { + yyn1429 = true + goto LABEL1429 + } + LABEL1429: + if yyr1426 || yy2arr1426 { + if yyn1429 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1426[2] { + if x.TCPSocket == nil { + r.EncodeNil() + } else { + x.TCPSocket.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq1426[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tcpSocket")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn1429 { + r.EncodeNil() + } else { + if x.TCPSocket == nil { + r.EncodeNil() + } else { + x.TCPSocket.CodecEncodeSelf(e) + } + } + } + } + if yyr1426 || yy2arr1426 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1426[3] { + yym1431 := z.EncBinary() + _ = yym1431 + if false { + } else { + r.EncodeInt(int64(x.InitialDelaySeconds)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1426[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("initialDelaySeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1432 := z.EncBinary() + _ = yym1432 + if false { + } else { + r.EncodeInt(int64(x.InitialDelaySeconds)) + } + } + } + if yyr1426 || yy2arr1426 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1426[4] { + yym1434 := z.EncBinary() + _ = yym1434 + if false { + } else { + r.EncodeInt(int64(x.TimeoutSeconds)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1426[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("timeoutSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1435 := z.EncBinary() + _ = yym1435 + if false { + } else { + r.EncodeInt(int64(x.TimeoutSeconds)) + } + } + } + if yyr1426 || yy2arr1426 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1426[5] { + yym1437 := z.EncBinary() + _ = yym1437 + if false { + } else { + r.EncodeInt(int64(x.PeriodSeconds)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1426[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("periodSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1438 := z.EncBinary() + _ = yym1438 + if false { + } else { + r.EncodeInt(int64(x.PeriodSeconds)) + } + } + } + if yyr1426 || yy2arr1426 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1426[6] { + yym1440 := z.EncBinary() + _ = yym1440 + if false { + } else { + r.EncodeInt(int64(x.SuccessThreshold)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1426[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("successThreshold")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1441 := z.EncBinary() + _ = yym1441 + if false { + } else { + r.EncodeInt(int64(x.SuccessThreshold)) + } + } + } + if yyr1426 || yy2arr1426 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1426[7] { + yym1443 := z.EncBinary() + _ = yym1443 + if false { + } else { + r.EncodeInt(int64(x.FailureThreshold)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1426[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("failureThreshold")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1444 := z.EncBinary() + _ = yym1444 + if false { + } else { + r.EncodeInt(int64(x.FailureThreshold)) + } + } + } + if yyr1426 || yy2arr1426 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Probe) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1445 := z.DecBinary() + _ = yym1445 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1446 := r.ContainerType() + if yyct1446 == codecSelferValueTypeMap1234 { + yyl1446 := r.ReadMapStart() + if yyl1446 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1446, d) + } + } else if yyct1446 == codecSelferValueTypeArray1234 { + yyl1446 := r.ReadArrayStart() + if yyl1446 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1446, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Probe) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1447Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1447Slc + var yyhl1447 bool = l >= 0 + for yyj1447 := 0; ; yyj1447++ { + if yyhl1447 { + if yyj1447 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1447Slc = r.DecodeBytes(yys1447Slc, true, true) + yys1447 := string(yys1447Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1447 { + case "exec": + if x.Handler.Exec == nil { + x.Handler.Exec = new(ExecAction) + } + if r.TryDecodeAsNil() { + if x.Exec != nil { + x.Exec = nil + } + } else { + if x.Exec == nil { + x.Exec = new(ExecAction) + } + x.Exec.CodecDecodeSelf(d) + } + case "httpGet": + if x.Handler.HTTPGet == nil { + x.Handler.HTTPGet = new(HTTPGetAction) + } + if r.TryDecodeAsNil() { + if x.HTTPGet != nil { + x.HTTPGet = nil + } + } else { + if x.HTTPGet == nil { + x.HTTPGet = new(HTTPGetAction) + } + x.HTTPGet.CodecDecodeSelf(d) + } + case "tcpSocket": + if x.Handler.TCPSocket == nil { + x.Handler.TCPSocket = new(TCPSocketAction) + } + if r.TryDecodeAsNil() { + if x.TCPSocket != nil { + x.TCPSocket = nil + } + } else { + if x.TCPSocket == nil { + x.TCPSocket = new(TCPSocketAction) + } + x.TCPSocket.CodecDecodeSelf(d) + } + case "initialDelaySeconds": + if r.TryDecodeAsNil() { + x.InitialDelaySeconds = 0 + } else { + x.InitialDelaySeconds = int32(r.DecodeInt(32)) + } + case "timeoutSeconds": + if r.TryDecodeAsNil() { + x.TimeoutSeconds = 0 + } else { + x.TimeoutSeconds = int32(r.DecodeInt(32)) + } + case "periodSeconds": + if r.TryDecodeAsNil() { + x.PeriodSeconds = 0 + } else { + x.PeriodSeconds = int32(r.DecodeInt(32)) + } + case "successThreshold": + if r.TryDecodeAsNil() { + x.SuccessThreshold = 0 + } else { + x.SuccessThreshold = int32(r.DecodeInt(32)) + } + case "failureThreshold": + if r.TryDecodeAsNil() { + x.FailureThreshold = 0 + } else { + x.FailureThreshold = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys1447) + } // end switch yys1447 + } // end for yyj1447 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Probe) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1456 int + var yyb1456 bool + var yyhl1456 bool = l >= 0 + if x.Handler.Exec == nil { + x.Handler.Exec = new(ExecAction) + } + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Exec != nil { + x.Exec = nil + } + } else { + if x.Exec == nil { + x.Exec = new(ExecAction) + } + x.Exec.CodecDecodeSelf(d) + } + if x.Handler.HTTPGet == nil { + x.Handler.HTTPGet = new(HTTPGetAction) + } + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HTTPGet != nil { + x.HTTPGet = nil + } + } else { + if x.HTTPGet == nil { + x.HTTPGet = new(HTTPGetAction) + } + x.HTTPGet.CodecDecodeSelf(d) + } + if x.Handler.TCPSocket == nil { + x.Handler.TCPSocket = new(TCPSocketAction) + } + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TCPSocket != nil { + x.TCPSocket = nil + } + } else { + if x.TCPSocket == nil { + x.TCPSocket = new(TCPSocketAction) + } + x.TCPSocket.CodecDecodeSelf(d) + } + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.InitialDelaySeconds = 0 + } else { + x.InitialDelaySeconds = int32(r.DecodeInt(32)) + } + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TimeoutSeconds = 0 + } else { + x.TimeoutSeconds = int32(r.DecodeInt(32)) + } + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PeriodSeconds = 0 + } else { + x.PeriodSeconds = int32(r.DecodeInt(32)) + } + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SuccessThreshold = 0 + } else { + x.SuccessThreshold = int32(r.DecodeInt(32)) + } + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FailureThreshold = 0 + } else { + x.FailureThreshold = int32(r.DecodeInt(32)) + } + for { + yyj1456++ + if yyhl1456 { + yyb1456 = yyj1456 > l + } else { + yyb1456 = r.CheckBreak() + } + if yyb1456 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1456-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PullPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1465 := z.EncBinary() + _ = yym1465 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PullPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1466 := z.DecBinary() + _ = yym1466 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x Capability) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1467 := z.EncBinary() + _ = yym1467 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *Capability) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1468 := z.DecBinary() + _ = yym1468 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *Capabilities) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1469 := z.EncBinary() + _ = yym1469 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1470 := !z.EncBinary() + yy2arr1470 := z.EncBasicHandle().StructToArray + var yyq1470 [2]bool + _, _, _ = yysep1470, yyq1470, yy2arr1470 + const yyr1470 bool = false + yyq1470[0] = len(x.Add) != 0 + yyq1470[1] = len(x.Drop) != 0 + var yynn1470 int + if yyr1470 || yy2arr1470 { + r.EncodeArrayStart(2) + } else { + yynn1470 = 0 + for _, b := range yyq1470 { + if b { + yynn1470++ + } + } + r.EncodeMapStart(yynn1470) + yynn1470 = 0 + } + if yyr1470 || yy2arr1470 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1470[0] { + if x.Add == nil { + r.EncodeNil() + } else { + yym1472 := z.EncBinary() + _ = yym1472 + if false { + } else { + h.encSliceCapability(([]Capability)(x.Add), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1470[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("add")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Add == nil { + r.EncodeNil() + } else { + yym1473 := z.EncBinary() + _ = yym1473 + if false { + } else { + h.encSliceCapability(([]Capability)(x.Add), e) + } + } + } + } + if yyr1470 || yy2arr1470 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1470[1] { + if x.Drop == nil { + r.EncodeNil() + } else { + yym1475 := z.EncBinary() + _ = yym1475 + if false { + } else { + h.encSliceCapability(([]Capability)(x.Drop), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1470[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("drop")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Drop == nil { + r.EncodeNil() + } else { + yym1476 := z.EncBinary() + _ = yym1476 + if false { + } else { + h.encSliceCapability(([]Capability)(x.Drop), e) + } + } + } + } + if yyr1470 || yy2arr1470 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Capabilities) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1477 := z.DecBinary() + _ = yym1477 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1478 := r.ContainerType() + if yyct1478 == codecSelferValueTypeMap1234 { + yyl1478 := r.ReadMapStart() + if yyl1478 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1478, d) + } + } else if yyct1478 == codecSelferValueTypeArray1234 { + yyl1478 := r.ReadArrayStart() + if yyl1478 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1478, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Capabilities) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1479Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1479Slc + var yyhl1479 bool = l >= 0 + for yyj1479 := 0; ; yyj1479++ { + if yyhl1479 { + if yyj1479 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1479Slc = r.DecodeBytes(yys1479Slc, true, true) + yys1479 := string(yys1479Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1479 { + case "add": + if r.TryDecodeAsNil() { + x.Add = nil + } else { + yyv1480 := &x.Add + yym1481 := z.DecBinary() + _ = yym1481 + if false { + } else { + h.decSliceCapability((*[]Capability)(yyv1480), d) + } + } + case "drop": + if r.TryDecodeAsNil() { + x.Drop = nil + } else { + yyv1482 := &x.Drop + yym1483 := z.DecBinary() + _ = yym1483 + if false { + } else { + h.decSliceCapability((*[]Capability)(yyv1482), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1479) + } // end switch yys1479 + } // end for yyj1479 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Capabilities) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1484 int + var yyb1484 bool + var yyhl1484 bool = l >= 0 + yyj1484++ + if yyhl1484 { + yyb1484 = yyj1484 > l + } else { + yyb1484 = r.CheckBreak() + } + if yyb1484 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Add = nil + } else { + yyv1485 := &x.Add + yym1486 := z.DecBinary() + _ = yym1486 + if false { + } else { + h.decSliceCapability((*[]Capability)(yyv1485), d) + } + } + yyj1484++ + if yyhl1484 { + yyb1484 = yyj1484 > l + } else { + yyb1484 = r.CheckBreak() + } + if yyb1484 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Drop = nil + } else { + yyv1487 := &x.Drop + yym1488 := z.DecBinary() + _ = yym1488 + if false { + } else { + h.decSliceCapability((*[]Capability)(yyv1487), d) + } + } + for { + yyj1484++ + if yyhl1484 { + yyb1484 = yyj1484 > l + } else { + yyb1484 = r.CheckBreak() + } + if yyb1484 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1484-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceRequirements) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1489 := z.EncBinary() + _ = yym1489 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1490 := !z.EncBinary() + yy2arr1490 := z.EncBasicHandle().StructToArray + var yyq1490 [2]bool + _, _, _ = yysep1490, yyq1490, yy2arr1490 + const yyr1490 bool = false + yyq1490[0] = len(x.Limits) != 0 + yyq1490[1] = len(x.Requests) != 0 + var yynn1490 int + if yyr1490 || yy2arr1490 { + r.EncodeArrayStart(2) + } else { + yynn1490 = 0 + for _, b := range yyq1490 { + if b { + yynn1490++ + } + } + r.EncodeMapStart(yynn1490) + yynn1490 = 0 + } + if yyr1490 || yy2arr1490 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1490[0] { + if x.Limits == nil { + r.EncodeNil() + } else { + x.Limits.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1490[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("limits")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Limits == nil { + r.EncodeNil() + } else { + x.Limits.CodecEncodeSelf(e) + } + } + } + if yyr1490 || yy2arr1490 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1490[1] { + if x.Requests == nil { + r.EncodeNil() + } else { + x.Requests.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1490[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requests")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Requests == nil { + r.EncodeNil() + } else { + x.Requests.CodecEncodeSelf(e) + } + } + } + if yyr1490 || yy2arr1490 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceRequirements) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1493 := z.DecBinary() + _ = yym1493 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1494 := r.ContainerType() + if yyct1494 == codecSelferValueTypeMap1234 { + yyl1494 := r.ReadMapStart() + if yyl1494 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1494, d) + } + } else if yyct1494 == codecSelferValueTypeArray1234 { + yyl1494 := r.ReadArrayStart() + if yyl1494 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1494, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceRequirements) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1495Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1495Slc + var yyhl1495 bool = l >= 0 + for yyj1495 := 0; ; yyj1495++ { + if yyhl1495 { + if yyj1495 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1495Slc = r.DecodeBytes(yys1495Slc, true, true) + yys1495 := string(yys1495Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1495 { + case "limits": + if r.TryDecodeAsNil() { + x.Limits = nil + } else { + yyv1496 := &x.Limits + yyv1496.CodecDecodeSelf(d) + } + case "requests": + if r.TryDecodeAsNil() { + x.Requests = nil + } else { + yyv1497 := &x.Requests + yyv1497.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1495) + } // end switch yys1495 + } // end for yyj1495 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceRequirements) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1498 int + var yyb1498 bool + var yyhl1498 bool = l >= 0 + yyj1498++ + if yyhl1498 { + yyb1498 = yyj1498 > l + } else { + yyb1498 = r.CheckBreak() + } + if yyb1498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Limits = nil + } else { + yyv1499 := &x.Limits + yyv1499.CodecDecodeSelf(d) + } + yyj1498++ + if yyhl1498 { + yyb1498 = yyj1498 > l + } else { + yyb1498 = r.CheckBreak() + } + if yyb1498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Requests = nil + } else { + yyv1500 := &x.Requests + yyv1500.CodecDecodeSelf(d) + } + for { + yyj1498++ + if yyhl1498 { + yyb1498 = yyj1498 > l + } else { + yyb1498 = r.CheckBreak() + } + if yyb1498 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1498-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Container) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1501 := z.EncBinary() + _ = yym1501 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1502 := !z.EncBinary() + yy2arr1502 := z.EncBasicHandle().StructToArray + var yyq1502 [18]bool + _, _, _ = yysep1502, yyq1502, yy2arr1502 + const yyr1502 bool = false + yyq1502[2] = len(x.Command) != 0 + yyq1502[3] = len(x.Args) != 0 + yyq1502[4] = x.WorkingDir != "" + yyq1502[5] = len(x.Ports) != 0 + yyq1502[6] = len(x.Env) != 0 + yyq1502[7] = true + yyq1502[8] = len(x.VolumeMounts) != 0 + yyq1502[9] = x.LivenessProbe != nil + yyq1502[10] = x.ReadinessProbe != nil + yyq1502[11] = x.Lifecycle != nil + yyq1502[12] = x.TerminationMessagePath != "" + yyq1502[14] = x.SecurityContext != nil + yyq1502[15] = x.Stdin != false + yyq1502[16] = x.StdinOnce != false + yyq1502[17] = x.TTY != false + var yynn1502 int + if yyr1502 || yy2arr1502 { + r.EncodeArrayStart(18) + } else { + yynn1502 = 3 + for _, b := range yyq1502 { + if b { + yynn1502++ + } + } + r.EncodeMapStart(yynn1502) + yynn1502 = 0 + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1504 := z.EncBinary() + _ = yym1504 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1505 := z.EncBinary() + _ = yym1505 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1507 := z.EncBinary() + _ = yym1507 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Image)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("image")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1508 := z.EncBinary() + _ = yym1508 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Image)) + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[2] { + if x.Command == nil { + r.EncodeNil() + } else { + yym1510 := z.EncBinary() + _ = yym1510 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("command")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Command == nil { + r.EncodeNil() + } else { + yym1511 := z.EncBinary() + _ = yym1511 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[3] { + if x.Args == nil { + r.EncodeNil() + } else { + yym1513 := z.EncBinary() + _ = yym1513 + if false { + } else { + z.F.EncSliceStringV(x.Args, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("args")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Args == nil { + r.EncodeNil() + } else { + yym1514 := z.EncBinary() + _ = yym1514 + if false { + } else { + z.F.EncSliceStringV(x.Args, false, e) + } + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[4] { + yym1516 := z.EncBinary() + _ = yym1516 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.WorkingDir)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1502[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("workingDir")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1517 := z.EncBinary() + _ = yym1517 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.WorkingDir)) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[5] { + if x.Ports == nil { + r.EncodeNil() + } else { + yym1519 := z.EncBinary() + _ = yym1519 + if false { + } else { + h.encSliceContainerPort(([]ContainerPort)(x.Ports), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ports")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym1520 := z.EncBinary() + _ = yym1520 + if false { + } else { + h.encSliceContainerPort(([]ContainerPort)(x.Ports), e) + } + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[6] { + if x.Env == nil { + r.EncodeNil() + } else { + yym1522 := z.EncBinary() + _ = yym1522 + if false { + } else { + h.encSliceEnvVar(([]EnvVar)(x.Env), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("env")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Env == nil { + r.EncodeNil() + } else { + yym1523 := z.EncBinary() + _ = yym1523 + if false { + } else { + h.encSliceEnvVar(([]EnvVar)(x.Env), e) + } + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[7] { + yy1525 := &x.Resources + yy1525.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq1502[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resources")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1526 := &x.Resources + yy1526.CodecEncodeSelf(e) + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[8] { + if x.VolumeMounts == nil { + r.EncodeNil() + } else { + yym1528 := z.EncBinary() + _ = yym1528 + if false { + } else { + h.encSliceVolumeMount(([]VolumeMount)(x.VolumeMounts), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeMounts")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VolumeMounts == nil { + r.EncodeNil() + } else { + yym1529 := z.EncBinary() + _ = yym1529 + if false { + } else { + h.encSliceVolumeMount(([]VolumeMount)(x.VolumeMounts), e) + } + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[9] { + if x.LivenessProbe == nil { + r.EncodeNil() + } else { + x.LivenessProbe.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("livenessProbe")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LivenessProbe == nil { + r.EncodeNil() + } else { + x.LivenessProbe.CodecEncodeSelf(e) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[10] { + if x.ReadinessProbe == nil { + r.EncodeNil() + } else { + x.ReadinessProbe.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readinessProbe")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ReadinessProbe == nil { + r.EncodeNil() + } else { + x.ReadinessProbe.CodecEncodeSelf(e) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[11] { + if x.Lifecycle == nil { + r.EncodeNil() + } else { + x.Lifecycle.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lifecycle")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Lifecycle == nil { + r.EncodeNil() + } else { + x.Lifecycle.CodecEncodeSelf(e) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[12] { + yym1534 := z.EncBinary() + _ = yym1534 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TerminationMessagePath)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1502[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("terminationMessagePath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1535 := z.EncBinary() + _ = yym1535 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TerminationMessagePath)) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.ImagePullPolicy.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("imagePullPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.ImagePullPolicy.CodecEncodeSelf(e) + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[14] { + if x.SecurityContext == nil { + r.EncodeNil() + } else { + x.SecurityContext.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1502[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("securityContext")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecurityContext == nil { + r.EncodeNil() + } else { + x.SecurityContext.CodecEncodeSelf(e) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[15] { + yym1539 := z.EncBinary() + _ = yym1539 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1502[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdin")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1540 := z.EncBinary() + _ = yym1540 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[16] { + yym1542 := z.EncBinary() + _ = yym1542 + if false { + } else { + r.EncodeBool(bool(x.StdinOnce)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1502[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdinOnce")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1543 := z.EncBinary() + _ = yym1543 + if false { + } else { + r.EncodeBool(bool(x.StdinOnce)) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1502[17] { + yym1545 := z.EncBinary() + _ = yym1545 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1502[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tty")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1546 := z.EncBinary() + _ = yym1546 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } + } + if yyr1502 || yy2arr1502 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Container) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1547 := z.DecBinary() + _ = yym1547 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1548 := r.ContainerType() + if yyct1548 == codecSelferValueTypeMap1234 { + yyl1548 := r.ReadMapStart() + if yyl1548 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1548, d) + } + } else if yyct1548 == codecSelferValueTypeArray1234 { + yyl1548 := r.ReadArrayStart() + if yyl1548 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1548, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Container) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1549Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1549Slc + var yyhl1549 bool = l >= 0 + for yyj1549 := 0; ; yyj1549++ { + if yyhl1549 { + if yyj1549 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1549Slc = r.DecodeBytes(yys1549Slc, true, true) + yys1549 := string(yys1549Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1549 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "image": + if r.TryDecodeAsNil() { + x.Image = "" + } else { + x.Image = string(r.DecodeString()) + } + case "command": + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv1552 := &x.Command + yym1553 := z.DecBinary() + _ = yym1553 + if false { + } else { + z.F.DecSliceStringX(yyv1552, false, d) + } + } + case "args": + if r.TryDecodeAsNil() { + x.Args = nil + } else { + yyv1554 := &x.Args + yym1555 := z.DecBinary() + _ = yym1555 + if false { + } else { + z.F.DecSliceStringX(yyv1554, false, d) + } + } + case "workingDir": + if r.TryDecodeAsNil() { + x.WorkingDir = "" + } else { + x.WorkingDir = string(r.DecodeString()) + } + case "ports": + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv1557 := &x.Ports + yym1558 := z.DecBinary() + _ = yym1558 + if false { + } else { + h.decSliceContainerPort((*[]ContainerPort)(yyv1557), d) + } + } + case "env": + if r.TryDecodeAsNil() { + x.Env = nil + } else { + yyv1559 := &x.Env + yym1560 := z.DecBinary() + _ = yym1560 + if false { + } else { + h.decSliceEnvVar((*[]EnvVar)(yyv1559), d) + } + } + case "resources": + if r.TryDecodeAsNil() { + x.Resources = ResourceRequirements{} + } else { + yyv1561 := &x.Resources + yyv1561.CodecDecodeSelf(d) + } + case "volumeMounts": + if r.TryDecodeAsNil() { + x.VolumeMounts = nil + } else { + yyv1562 := &x.VolumeMounts + yym1563 := z.DecBinary() + _ = yym1563 + if false { + } else { + h.decSliceVolumeMount((*[]VolumeMount)(yyv1562), d) + } + } + case "livenessProbe": + if r.TryDecodeAsNil() { + if x.LivenessProbe != nil { + x.LivenessProbe = nil + } + } else { + if x.LivenessProbe == nil { + x.LivenessProbe = new(Probe) + } + x.LivenessProbe.CodecDecodeSelf(d) + } + case "readinessProbe": + if r.TryDecodeAsNil() { + if x.ReadinessProbe != nil { + x.ReadinessProbe = nil + } + } else { + if x.ReadinessProbe == nil { + x.ReadinessProbe = new(Probe) + } + x.ReadinessProbe.CodecDecodeSelf(d) + } + case "lifecycle": + if r.TryDecodeAsNil() { + if x.Lifecycle != nil { + x.Lifecycle = nil + } + } else { + if x.Lifecycle == nil { + x.Lifecycle = new(Lifecycle) + } + x.Lifecycle.CodecDecodeSelf(d) + } + case "terminationMessagePath": + if r.TryDecodeAsNil() { + x.TerminationMessagePath = "" + } else { + x.TerminationMessagePath = string(r.DecodeString()) + } + case "imagePullPolicy": + if r.TryDecodeAsNil() { + x.ImagePullPolicy = "" + } else { + x.ImagePullPolicy = PullPolicy(r.DecodeString()) + } + case "securityContext": + if r.TryDecodeAsNil() { + if x.SecurityContext != nil { + x.SecurityContext = nil + } + } else { + if x.SecurityContext == nil { + x.SecurityContext = new(SecurityContext) + } + x.SecurityContext.CodecDecodeSelf(d) + } + case "stdin": + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + case "stdinOnce": + if r.TryDecodeAsNil() { + x.StdinOnce = false + } else { + x.StdinOnce = bool(r.DecodeBool()) + } + case "tty": + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys1549) + } // end switch yys1549 + } // end for yyj1549 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Container) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1573 int + var yyb1573 bool + var yyhl1573 bool = l >= 0 + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Image = "" + } else { + x.Image = string(r.DecodeString()) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv1576 := &x.Command + yym1577 := z.DecBinary() + _ = yym1577 + if false { + } else { + z.F.DecSliceStringX(yyv1576, false, d) + } + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Args = nil + } else { + yyv1578 := &x.Args + yym1579 := z.DecBinary() + _ = yym1579 + if false { + } else { + z.F.DecSliceStringX(yyv1578, false, d) + } + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.WorkingDir = "" + } else { + x.WorkingDir = string(r.DecodeString()) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv1581 := &x.Ports + yym1582 := z.DecBinary() + _ = yym1582 + if false { + } else { + h.decSliceContainerPort((*[]ContainerPort)(yyv1581), d) + } + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Env = nil + } else { + yyv1583 := &x.Env + yym1584 := z.DecBinary() + _ = yym1584 + if false { + } else { + h.decSliceEnvVar((*[]EnvVar)(yyv1583), d) + } + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Resources = ResourceRequirements{} + } else { + yyv1585 := &x.Resources + yyv1585.CodecDecodeSelf(d) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeMounts = nil + } else { + yyv1586 := &x.VolumeMounts + yym1587 := z.DecBinary() + _ = yym1587 + if false { + } else { + h.decSliceVolumeMount((*[]VolumeMount)(yyv1586), d) + } + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.LivenessProbe != nil { + x.LivenessProbe = nil + } + } else { + if x.LivenessProbe == nil { + x.LivenessProbe = new(Probe) + } + x.LivenessProbe.CodecDecodeSelf(d) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ReadinessProbe != nil { + x.ReadinessProbe = nil + } + } else { + if x.ReadinessProbe == nil { + x.ReadinessProbe = new(Probe) + } + x.ReadinessProbe.CodecDecodeSelf(d) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Lifecycle != nil { + x.Lifecycle = nil + } + } else { + if x.Lifecycle == nil { + x.Lifecycle = new(Lifecycle) + } + x.Lifecycle.CodecDecodeSelf(d) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TerminationMessagePath = "" + } else { + x.TerminationMessagePath = string(r.DecodeString()) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ImagePullPolicy = "" + } else { + x.ImagePullPolicy = PullPolicy(r.DecodeString()) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecurityContext != nil { + x.SecurityContext = nil + } + } else { + if x.SecurityContext == nil { + x.SecurityContext = new(SecurityContext) + } + x.SecurityContext.CodecDecodeSelf(d) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.StdinOnce = false + } else { + x.StdinOnce = bool(r.DecodeBool()) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + for { + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1573-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Handler) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1597 := z.EncBinary() + _ = yym1597 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1598 := !z.EncBinary() + yy2arr1598 := z.EncBasicHandle().StructToArray + var yyq1598 [3]bool + _, _, _ = yysep1598, yyq1598, yy2arr1598 + const yyr1598 bool = false + yyq1598[0] = x.Exec != nil + yyq1598[1] = x.HTTPGet != nil + yyq1598[2] = x.TCPSocket != nil + var yynn1598 int + if yyr1598 || yy2arr1598 { + r.EncodeArrayStart(3) + } else { + yynn1598 = 0 + for _, b := range yyq1598 { + if b { + yynn1598++ + } + } + r.EncodeMapStart(yynn1598) + yynn1598 = 0 + } + if yyr1598 || yy2arr1598 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1598[0] { + if x.Exec == nil { + r.EncodeNil() + } else { + x.Exec.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1598[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("exec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Exec == nil { + r.EncodeNil() + } else { + x.Exec.CodecEncodeSelf(e) + } + } + } + if yyr1598 || yy2arr1598 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1598[1] { + if x.HTTPGet == nil { + r.EncodeNil() + } else { + x.HTTPGet.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1598[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("httpGet")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HTTPGet == nil { + r.EncodeNil() + } else { + x.HTTPGet.CodecEncodeSelf(e) + } + } + } + if yyr1598 || yy2arr1598 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1598[2] { + if x.TCPSocket == nil { + r.EncodeNil() + } else { + x.TCPSocket.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1598[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tcpSocket")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TCPSocket == nil { + r.EncodeNil() + } else { + x.TCPSocket.CodecEncodeSelf(e) + } + } + } + if yyr1598 || yy2arr1598 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Handler) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1602 := z.DecBinary() + _ = yym1602 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1603 := r.ContainerType() + if yyct1603 == codecSelferValueTypeMap1234 { + yyl1603 := r.ReadMapStart() + if yyl1603 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1603, d) + } + } else if yyct1603 == codecSelferValueTypeArray1234 { + yyl1603 := r.ReadArrayStart() + if yyl1603 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1603, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Handler) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1604Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1604Slc + var yyhl1604 bool = l >= 0 + for yyj1604 := 0; ; yyj1604++ { + if yyhl1604 { + if yyj1604 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1604Slc = r.DecodeBytes(yys1604Slc, true, true) + yys1604 := string(yys1604Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1604 { + case "exec": + if r.TryDecodeAsNil() { + if x.Exec != nil { + x.Exec = nil + } + } else { + if x.Exec == nil { + x.Exec = new(ExecAction) + } + x.Exec.CodecDecodeSelf(d) + } + case "httpGet": + if r.TryDecodeAsNil() { + if x.HTTPGet != nil { + x.HTTPGet = nil + } + } else { + if x.HTTPGet == nil { + x.HTTPGet = new(HTTPGetAction) + } + x.HTTPGet.CodecDecodeSelf(d) + } + case "tcpSocket": + if r.TryDecodeAsNil() { + if x.TCPSocket != nil { + x.TCPSocket = nil + } + } else { + if x.TCPSocket == nil { + x.TCPSocket = new(TCPSocketAction) + } + x.TCPSocket.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1604) + } // end switch yys1604 + } // end for yyj1604 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Handler) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1608 int + var yyb1608 bool + var yyhl1608 bool = l >= 0 + yyj1608++ + if yyhl1608 { + yyb1608 = yyj1608 > l + } else { + yyb1608 = r.CheckBreak() + } + if yyb1608 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Exec != nil { + x.Exec = nil + } + } else { + if x.Exec == nil { + x.Exec = new(ExecAction) + } + x.Exec.CodecDecodeSelf(d) + } + yyj1608++ + if yyhl1608 { + yyb1608 = yyj1608 > l + } else { + yyb1608 = r.CheckBreak() + } + if yyb1608 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HTTPGet != nil { + x.HTTPGet = nil + } + } else { + if x.HTTPGet == nil { + x.HTTPGet = new(HTTPGetAction) + } + x.HTTPGet.CodecDecodeSelf(d) + } + yyj1608++ + if yyhl1608 { + yyb1608 = yyj1608 > l + } else { + yyb1608 = r.CheckBreak() + } + if yyb1608 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TCPSocket != nil { + x.TCPSocket = nil + } + } else { + if x.TCPSocket == nil { + x.TCPSocket = new(TCPSocketAction) + } + x.TCPSocket.CodecDecodeSelf(d) + } + for { + yyj1608++ + if yyhl1608 { + yyb1608 = yyj1608 > l + } else { + yyb1608 = r.CheckBreak() + } + if yyb1608 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1608-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Lifecycle) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1612 := z.EncBinary() + _ = yym1612 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1613 := !z.EncBinary() + yy2arr1613 := z.EncBasicHandle().StructToArray + var yyq1613 [2]bool + _, _, _ = yysep1613, yyq1613, yy2arr1613 + const yyr1613 bool = false + yyq1613[0] = x.PostStart != nil + yyq1613[1] = x.PreStop != nil + var yynn1613 int + if yyr1613 || yy2arr1613 { + r.EncodeArrayStart(2) + } else { + yynn1613 = 0 + for _, b := range yyq1613 { + if b { + yynn1613++ + } + } + r.EncodeMapStart(yynn1613) + yynn1613 = 0 + } + if yyr1613 || yy2arr1613 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1613[0] { + if x.PostStart == nil { + r.EncodeNil() + } else { + x.PostStart.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1613[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("postStart")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PostStart == nil { + r.EncodeNil() + } else { + x.PostStart.CodecEncodeSelf(e) + } + } + } + if yyr1613 || yy2arr1613 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1613[1] { + if x.PreStop == nil { + r.EncodeNil() + } else { + x.PreStop.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1613[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preStop")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreStop == nil { + r.EncodeNil() + } else { + x.PreStop.CodecEncodeSelf(e) + } + } + } + if yyr1613 || yy2arr1613 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Lifecycle) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1616 := z.DecBinary() + _ = yym1616 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1617 := r.ContainerType() + if yyct1617 == codecSelferValueTypeMap1234 { + yyl1617 := r.ReadMapStart() + if yyl1617 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1617, d) + } + } else if yyct1617 == codecSelferValueTypeArray1234 { + yyl1617 := r.ReadArrayStart() + if yyl1617 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1617, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Lifecycle) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1618Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1618Slc + var yyhl1618 bool = l >= 0 + for yyj1618 := 0; ; yyj1618++ { + if yyhl1618 { + if yyj1618 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1618Slc = r.DecodeBytes(yys1618Slc, true, true) + yys1618 := string(yys1618Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1618 { + case "postStart": + if r.TryDecodeAsNil() { + if x.PostStart != nil { + x.PostStart = nil + } + } else { + if x.PostStart == nil { + x.PostStart = new(Handler) + } + x.PostStart.CodecDecodeSelf(d) + } + case "preStop": + if r.TryDecodeAsNil() { + if x.PreStop != nil { + x.PreStop = nil + } + } else { + if x.PreStop == nil { + x.PreStop = new(Handler) + } + x.PreStop.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1618) + } // end switch yys1618 + } // end for yyj1618 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Lifecycle) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1621 int + var yyb1621 bool + var yyhl1621 bool = l >= 0 + yyj1621++ + if yyhl1621 { + yyb1621 = yyj1621 > l + } else { + yyb1621 = r.CheckBreak() + } + if yyb1621 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PostStart != nil { + x.PostStart = nil + } + } else { + if x.PostStart == nil { + x.PostStart = new(Handler) + } + x.PostStart.CodecDecodeSelf(d) + } + yyj1621++ + if yyhl1621 { + yyb1621 = yyj1621 > l + } else { + yyb1621 = r.CheckBreak() + } + if yyb1621 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PreStop != nil { + x.PreStop = nil + } + } else { + if x.PreStop == nil { + x.PreStop = new(Handler) + } + x.PreStop.CodecDecodeSelf(d) + } + for { + yyj1621++ + if yyhl1621 { + yyb1621 = yyj1621 > l + } else { + yyb1621 = r.CheckBreak() + } + if yyb1621 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1621-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ConditionStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1624 := z.EncBinary() + _ = yym1624 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ConditionStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1625 := z.DecBinary() + _ = yym1625 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ContainerStateWaiting) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1626 := z.EncBinary() + _ = yym1626 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1627 := !z.EncBinary() + yy2arr1627 := z.EncBasicHandle().StructToArray + var yyq1627 [2]bool + _, _, _ = yysep1627, yyq1627, yy2arr1627 + const yyr1627 bool = false + yyq1627[0] = x.Reason != "" + yyq1627[1] = x.Message != "" + var yynn1627 int + if yyr1627 || yy2arr1627 { + r.EncodeArrayStart(2) + } else { + yynn1627 = 0 + for _, b := range yyq1627 { + if b { + yynn1627++ + } + } + r.EncodeMapStart(yynn1627) + yynn1627 = 0 + } + if yyr1627 || yy2arr1627 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1627[0] { + yym1629 := z.EncBinary() + _ = yym1629 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1627[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1630 := z.EncBinary() + _ = yym1630 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr1627 || yy2arr1627 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1627[1] { + yym1632 := z.EncBinary() + _ = yym1632 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1627[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1633 := z.EncBinary() + _ = yym1633 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr1627 || yy2arr1627 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerStateWaiting) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1634 := z.DecBinary() + _ = yym1634 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1635 := r.ContainerType() + if yyct1635 == codecSelferValueTypeMap1234 { + yyl1635 := r.ReadMapStart() + if yyl1635 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1635, d) + } + } else if yyct1635 == codecSelferValueTypeArray1234 { + yyl1635 := r.ReadArrayStart() + if yyl1635 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1635, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerStateWaiting) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1636Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1636Slc + var yyhl1636 bool = l >= 0 + for yyj1636 := 0; ; yyj1636++ { + if yyhl1636 { + if yyj1636 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1636Slc = r.DecodeBytes(yys1636Slc, true, true) + yys1636 := string(yys1636Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1636 { + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1636) + } // end switch yys1636 + } // end for yyj1636 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerStateWaiting) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1639 int + var yyb1639 bool + var yyhl1639 bool = l >= 0 + yyj1639++ + if yyhl1639 { + yyb1639 = yyj1639 > l + } else { + yyb1639 = r.CheckBreak() + } + if yyb1639 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj1639++ + if yyhl1639 { + yyb1639 = yyj1639 > l + } else { + yyb1639 = r.CheckBreak() + } + if yyb1639 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj1639++ + if yyhl1639 { + yyb1639 = yyj1639 > l + } else { + yyb1639 = r.CheckBreak() + } + if yyb1639 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1639-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerStateRunning) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1642 := z.EncBinary() + _ = yym1642 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1643 := !z.EncBinary() + yy2arr1643 := z.EncBasicHandle().StructToArray + var yyq1643 [1]bool + _, _, _ = yysep1643, yyq1643, yy2arr1643 + const yyr1643 bool = false + yyq1643[0] = true + var yynn1643 int + if yyr1643 || yy2arr1643 { + r.EncodeArrayStart(1) + } else { + yynn1643 = 0 + for _, b := range yyq1643 { + if b { + yynn1643++ + } + } + r.EncodeMapStart(yynn1643) + yynn1643 = 0 + } + if yyr1643 || yy2arr1643 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1643[0] { + yy1645 := &x.StartedAt + yym1646 := z.EncBinary() + _ = yym1646 + if false { + } else if z.HasExtensions() && z.EncExt(yy1645) { + } else if yym1646 { + z.EncBinaryMarshal(yy1645) + } else if !yym1646 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1645) + } else { + z.EncFallback(yy1645) + } + } else { + r.EncodeNil() + } + } else { + if yyq1643[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("startedAt")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1647 := &x.StartedAt + yym1648 := z.EncBinary() + _ = yym1648 + if false { + } else if z.HasExtensions() && z.EncExt(yy1647) { + } else if yym1648 { + z.EncBinaryMarshal(yy1647) + } else if !yym1648 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1647) + } else { + z.EncFallback(yy1647) + } + } + } + if yyr1643 || yy2arr1643 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerStateRunning) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1649 := z.DecBinary() + _ = yym1649 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1650 := r.ContainerType() + if yyct1650 == codecSelferValueTypeMap1234 { + yyl1650 := r.ReadMapStart() + if yyl1650 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1650, d) + } + } else if yyct1650 == codecSelferValueTypeArray1234 { + yyl1650 := r.ReadArrayStart() + if yyl1650 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1650, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerStateRunning) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1651Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1651Slc + var yyhl1651 bool = l >= 0 + for yyj1651 := 0; ; yyj1651++ { + if yyhl1651 { + if yyj1651 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1651Slc = r.DecodeBytes(yys1651Slc, true, true) + yys1651 := string(yys1651Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1651 { + case "startedAt": + if r.TryDecodeAsNil() { + x.StartedAt = pkg2_unversioned.Time{} + } else { + yyv1652 := &x.StartedAt + yym1653 := z.DecBinary() + _ = yym1653 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1652) { + } else if yym1653 { + z.DecBinaryUnmarshal(yyv1652) + } else if !yym1653 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1652) + } else { + z.DecFallback(yyv1652, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys1651) + } // end switch yys1651 + } // end for yyj1651 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerStateRunning) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1654 int + var yyb1654 bool + var yyhl1654 bool = l >= 0 + yyj1654++ + if yyhl1654 { + yyb1654 = yyj1654 > l + } else { + yyb1654 = r.CheckBreak() + } + if yyb1654 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.StartedAt = pkg2_unversioned.Time{} + } else { + yyv1655 := &x.StartedAt + yym1656 := z.DecBinary() + _ = yym1656 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1655) { + } else if yym1656 { + z.DecBinaryUnmarshal(yyv1655) + } else if !yym1656 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1655) + } else { + z.DecFallback(yyv1655, false) + } + } + for { + yyj1654++ + if yyhl1654 { + yyb1654 = yyj1654 > l + } else { + yyb1654 = r.CheckBreak() + } + if yyb1654 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1654-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerStateTerminated) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1657 := z.EncBinary() + _ = yym1657 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1658 := !z.EncBinary() + yy2arr1658 := z.EncBasicHandle().StructToArray + var yyq1658 [7]bool + _, _, _ = yysep1658, yyq1658, yy2arr1658 + const yyr1658 bool = false + yyq1658[1] = x.Signal != 0 + yyq1658[2] = x.Reason != "" + yyq1658[3] = x.Message != "" + yyq1658[4] = true + yyq1658[5] = true + yyq1658[6] = x.ContainerID != "" + var yynn1658 int + if yyr1658 || yy2arr1658 { + r.EncodeArrayStart(7) + } else { + yynn1658 = 1 + for _, b := range yyq1658 { + if b { + yynn1658++ + } + } + r.EncodeMapStart(yynn1658) + yynn1658 = 0 + } + if yyr1658 || yy2arr1658 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1660 := z.EncBinary() + _ = yym1660 + if false { + } else { + r.EncodeInt(int64(x.ExitCode)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("exitCode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1661 := z.EncBinary() + _ = yym1661 + if false { + } else { + r.EncodeInt(int64(x.ExitCode)) + } + } + if yyr1658 || yy2arr1658 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1658[1] { + yym1663 := z.EncBinary() + _ = yym1663 + if false { + } else { + r.EncodeInt(int64(x.Signal)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1658[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("signal")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1664 := z.EncBinary() + _ = yym1664 + if false { + } else { + r.EncodeInt(int64(x.Signal)) + } + } + } + if yyr1658 || yy2arr1658 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1658[2] { + yym1666 := z.EncBinary() + _ = yym1666 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1658[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1667 := z.EncBinary() + _ = yym1667 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr1658 || yy2arr1658 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1658[3] { + yym1669 := z.EncBinary() + _ = yym1669 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1658[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1670 := z.EncBinary() + _ = yym1670 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr1658 || yy2arr1658 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1658[4] { + yy1672 := &x.StartedAt + yym1673 := z.EncBinary() + _ = yym1673 + if false { + } else if z.HasExtensions() && z.EncExt(yy1672) { + } else if yym1673 { + z.EncBinaryMarshal(yy1672) + } else if !yym1673 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1672) + } else { + z.EncFallback(yy1672) + } + } else { + r.EncodeNil() + } + } else { + if yyq1658[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("startedAt")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1674 := &x.StartedAt + yym1675 := z.EncBinary() + _ = yym1675 + if false { + } else if z.HasExtensions() && z.EncExt(yy1674) { + } else if yym1675 { + z.EncBinaryMarshal(yy1674) + } else if !yym1675 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1674) + } else { + z.EncFallback(yy1674) + } + } + } + if yyr1658 || yy2arr1658 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1658[5] { + yy1677 := &x.FinishedAt + yym1678 := z.EncBinary() + _ = yym1678 + if false { + } else if z.HasExtensions() && z.EncExt(yy1677) { + } else if yym1678 { + z.EncBinaryMarshal(yy1677) + } else if !yym1678 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1677) + } else { + z.EncFallback(yy1677) + } + } else { + r.EncodeNil() + } + } else { + if yyq1658[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("finishedAt")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1679 := &x.FinishedAt + yym1680 := z.EncBinary() + _ = yym1680 + if false { + } else if z.HasExtensions() && z.EncExt(yy1679) { + } else if yym1680 { + z.EncBinaryMarshal(yy1679) + } else if !yym1680 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1679) + } else { + z.EncFallback(yy1679) + } + } + } + if yyr1658 || yy2arr1658 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1658[6] { + yym1682 := z.EncBinary() + _ = yym1682 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1658[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1683 := z.EncBinary() + _ = yym1683 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerID)) + } + } + } + if yyr1658 || yy2arr1658 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerStateTerminated) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1684 := z.DecBinary() + _ = yym1684 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1685 := r.ContainerType() + if yyct1685 == codecSelferValueTypeMap1234 { + yyl1685 := r.ReadMapStart() + if yyl1685 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1685, d) + } + } else if yyct1685 == codecSelferValueTypeArray1234 { + yyl1685 := r.ReadArrayStart() + if yyl1685 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1685, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerStateTerminated) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1686Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1686Slc + var yyhl1686 bool = l >= 0 + for yyj1686 := 0; ; yyj1686++ { + if yyhl1686 { + if yyj1686 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1686Slc = r.DecodeBytes(yys1686Slc, true, true) + yys1686 := string(yys1686Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1686 { + case "exitCode": + if r.TryDecodeAsNil() { + x.ExitCode = 0 + } else { + x.ExitCode = int32(r.DecodeInt(32)) + } + case "signal": + if r.TryDecodeAsNil() { + x.Signal = 0 + } else { + x.Signal = int32(r.DecodeInt(32)) + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "startedAt": + if r.TryDecodeAsNil() { + x.StartedAt = pkg2_unversioned.Time{} + } else { + yyv1691 := &x.StartedAt + yym1692 := z.DecBinary() + _ = yym1692 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1691) { + } else if yym1692 { + z.DecBinaryUnmarshal(yyv1691) + } else if !yym1692 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1691) + } else { + z.DecFallback(yyv1691, false) + } + } + case "finishedAt": + if r.TryDecodeAsNil() { + x.FinishedAt = pkg2_unversioned.Time{} + } else { + yyv1693 := &x.FinishedAt + yym1694 := z.DecBinary() + _ = yym1694 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1693) { + } else if yym1694 { + z.DecBinaryUnmarshal(yyv1693) + } else if !yym1694 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1693) + } else { + z.DecFallback(yyv1693, false) + } + } + case "containerID": + if r.TryDecodeAsNil() { + x.ContainerID = "" + } else { + x.ContainerID = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1686) + } // end switch yys1686 + } // end for yyj1686 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerStateTerminated) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1696 int + var yyb1696 bool + var yyhl1696 bool = l >= 0 + yyj1696++ + if yyhl1696 { + yyb1696 = yyj1696 > l + } else { + yyb1696 = r.CheckBreak() + } + if yyb1696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ExitCode = 0 + } else { + x.ExitCode = int32(r.DecodeInt(32)) + } + yyj1696++ + if yyhl1696 { + yyb1696 = yyj1696 > l + } else { + yyb1696 = r.CheckBreak() + } + if yyb1696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Signal = 0 + } else { + x.Signal = int32(r.DecodeInt(32)) + } + yyj1696++ + if yyhl1696 { + yyb1696 = yyj1696 > l + } else { + yyb1696 = r.CheckBreak() + } + if yyb1696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj1696++ + if yyhl1696 { + yyb1696 = yyj1696 > l + } else { + yyb1696 = r.CheckBreak() + } + if yyb1696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj1696++ + if yyhl1696 { + yyb1696 = yyj1696 > l + } else { + yyb1696 = r.CheckBreak() + } + if yyb1696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.StartedAt = pkg2_unversioned.Time{} + } else { + yyv1701 := &x.StartedAt + yym1702 := z.DecBinary() + _ = yym1702 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1701) { + } else if yym1702 { + z.DecBinaryUnmarshal(yyv1701) + } else if !yym1702 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1701) + } else { + z.DecFallback(yyv1701, false) + } + } + yyj1696++ + if yyhl1696 { + yyb1696 = yyj1696 > l + } else { + yyb1696 = r.CheckBreak() + } + if yyb1696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FinishedAt = pkg2_unversioned.Time{} + } else { + yyv1703 := &x.FinishedAt + yym1704 := z.DecBinary() + _ = yym1704 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1703) { + } else if yym1704 { + z.DecBinaryUnmarshal(yyv1703) + } else if !yym1704 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1703) + } else { + z.DecFallback(yyv1703, false) + } + } + yyj1696++ + if yyhl1696 { + yyb1696 = yyj1696 > l + } else { + yyb1696 = r.CheckBreak() + } + if yyb1696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerID = "" + } else { + x.ContainerID = string(r.DecodeString()) + } + for { + yyj1696++ + if yyhl1696 { + yyb1696 = yyj1696 > l + } else { + yyb1696 = r.CheckBreak() + } + if yyb1696 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1696-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerState) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1706 := z.EncBinary() + _ = yym1706 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1707 := !z.EncBinary() + yy2arr1707 := z.EncBasicHandle().StructToArray + var yyq1707 [3]bool + _, _, _ = yysep1707, yyq1707, yy2arr1707 + const yyr1707 bool = false + yyq1707[0] = x.Waiting != nil + yyq1707[1] = x.Running != nil + yyq1707[2] = x.Terminated != nil + var yynn1707 int + if yyr1707 || yy2arr1707 { + r.EncodeArrayStart(3) + } else { + yynn1707 = 0 + for _, b := range yyq1707 { + if b { + yynn1707++ + } + } + r.EncodeMapStart(yynn1707) + yynn1707 = 0 + } + if yyr1707 || yy2arr1707 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1707[0] { + if x.Waiting == nil { + r.EncodeNil() + } else { + x.Waiting.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1707[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("waiting")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Waiting == nil { + r.EncodeNil() + } else { + x.Waiting.CodecEncodeSelf(e) + } + } + } + if yyr1707 || yy2arr1707 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1707[1] { + if x.Running == nil { + r.EncodeNil() + } else { + x.Running.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1707[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("running")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Running == nil { + r.EncodeNil() + } else { + x.Running.CodecEncodeSelf(e) + } + } + } + if yyr1707 || yy2arr1707 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1707[2] { + if x.Terminated == nil { + r.EncodeNil() + } else { + x.Terminated.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1707[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("terminated")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Terminated == nil { + r.EncodeNil() + } else { + x.Terminated.CodecEncodeSelf(e) + } + } + } + if yyr1707 || yy2arr1707 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerState) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1711 := z.DecBinary() + _ = yym1711 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1712 := r.ContainerType() + if yyct1712 == codecSelferValueTypeMap1234 { + yyl1712 := r.ReadMapStart() + if yyl1712 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1712, d) + } + } else if yyct1712 == codecSelferValueTypeArray1234 { + yyl1712 := r.ReadArrayStart() + if yyl1712 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1712, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerState) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1713Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1713Slc + var yyhl1713 bool = l >= 0 + for yyj1713 := 0; ; yyj1713++ { + if yyhl1713 { + if yyj1713 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1713Slc = r.DecodeBytes(yys1713Slc, true, true) + yys1713 := string(yys1713Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1713 { + case "waiting": + if r.TryDecodeAsNil() { + if x.Waiting != nil { + x.Waiting = nil + } + } else { + if x.Waiting == nil { + x.Waiting = new(ContainerStateWaiting) + } + x.Waiting.CodecDecodeSelf(d) + } + case "running": + if r.TryDecodeAsNil() { + if x.Running != nil { + x.Running = nil + } + } else { + if x.Running == nil { + x.Running = new(ContainerStateRunning) + } + x.Running.CodecDecodeSelf(d) + } + case "terminated": + if r.TryDecodeAsNil() { + if x.Terminated != nil { + x.Terminated = nil + } + } else { + if x.Terminated == nil { + x.Terminated = new(ContainerStateTerminated) + } + x.Terminated.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1713) + } // end switch yys1713 + } // end for yyj1713 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerState) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1717 int + var yyb1717 bool + var yyhl1717 bool = l >= 0 + yyj1717++ + if yyhl1717 { + yyb1717 = yyj1717 > l + } else { + yyb1717 = r.CheckBreak() + } + if yyb1717 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Waiting != nil { + x.Waiting = nil + } + } else { + if x.Waiting == nil { + x.Waiting = new(ContainerStateWaiting) + } + x.Waiting.CodecDecodeSelf(d) + } + yyj1717++ + if yyhl1717 { + yyb1717 = yyj1717 > l + } else { + yyb1717 = r.CheckBreak() + } + if yyb1717 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Running != nil { + x.Running = nil + } + } else { + if x.Running == nil { + x.Running = new(ContainerStateRunning) + } + x.Running.CodecDecodeSelf(d) + } + yyj1717++ + if yyhl1717 { + yyb1717 = yyj1717 > l + } else { + yyb1717 = r.CheckBreak() + } + if yyb1717 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Terminated != nil { + x.Terminated = nil + } + } else { + if x.Terminated == nil { + x.Terminated = new(ContainerStateTerminated) + } + x.Terminated.CodecDecodeSelf(d) + } + for { + yyj1717++ + if yyhl1717 { + yyb1717 = yyj1717 > l + } else { + yyb1717 = r.CheckBreak() + } + if yyb1717 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1717-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1721 := z.EncBinary() + _ = yym1721 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1722 := !z.EncBinary() + yy2arr1722 := z.EncBasicHandle().StructToArray + var yyq1722 [8]bool + _, _, _ = yysep1722, yyq1722, yy2arr1722 + const yyr1722 bool = false + yyq1722[1] = true + yyq1722[2] = true + yyq1722[7] = x.ContainerID != "" + var yynn1722 int + if yyr1722 || yy2arr1722 { + r.EncodeArrayStart(8) + } else { + yynn1722 = 5 + for _, b := range yyq1722 { + if b { + yynn1722++ + } + } + r.EncodeMapStart(yynn1722) + yynn1722 = 0 + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1724 := z.EncBinary() + _ = yym1724 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1725 := z.EncBinary() + _ = yym1725 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1722[1] { + yy1727 := &x.State + yy1727.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq1722[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("state")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1728 := &x.State + yy1728.CodecEncodeSelf(e) + } + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1722[2] { + yy1730 := &x.LastTerminationState + yy1730.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq1722[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastState")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1731 := &x.LastTerminationState + yy1731.CodecEncodeSelf(e) + } + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1733 := z.EncBinary() + _ = yym1733 + if false { + } else { + r.EncodeBool(bool(x.Ready)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ready")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1734 := z.EncBinary() + _ = yym1734 + if false { + } else { + r.EncodeBool(bool(x.Ready)) + } + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1736 := z.EncBinary() + _ = yym1736 + if false { + } else { + r.EncodeInt(int64(x.RestartCount)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("restartCount")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1737 := z.EncBinary() + _ = yym1737 + if false { + } else { + r.EncodeInt(int64(x.RestartCount)) + } + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1739 := z.EncBinary() + _ = yym1739 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Image)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("image")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1740 := z.EncBinary() + _ = yym1740 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Image)) + } + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1742 := z.EncBinary() + _ = yym1742 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ImageID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("imageID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1743 := z.EncBinary() + _ = yym1743 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ImageID)) + } + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1722[7] { + yym1745 := z.EncBinary() + _ = yym1745 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1722[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1746 := z.EncBinary() + _ = yym1746 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerID)) + } + } + } + if yyr1722 || yy2arr1722 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1747 := z.DecBinary() + _ = yym1747 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1748 := r.ContainerType() + if yyct1748 == codecSelferValueTypeMap1234 { + yyl1748 := r.ReadMapStart() + if yyl1748 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1748, d) + } + } else if yyct1748 == codecSelferValueTypeArray1234 { + yyl1748 := r.ReadArrayStart() + if yyl1748 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1748, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1749Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1749Slc + var yyhl1749 bool = l >= 0 + for yyj1749 := 0; ; yyj1749++ { + if yyhl1749 { + if yyj1749 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1749Slc = r.DecodeBytes(yys1749Slc, true, true) + yys1749 := string(yys1749Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1749 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "state": + if r.TryDecodeAsNil() { + x.State = ContainerState{} + } else { + yyv1751 := &x.State + yyv1751.CodecDecodeSelf(d) + } + case "lastState": + if r.TryDecodeAsNil() { + x.LastTerminationState = ContainerState{} + } else { + yyv1752 := &x.LastTerminationState + yyv1752.CodecDecodeSelf(d) + } + case "ready": + if r.TryDecodeAsNil() { + x.Ready = false + } else { + x.Ready = bool(r.DecodeBool()) + } + case "restartCount": + if r.TryDecodeAsNil() { + x.RestartCount = 0 + } else { + x.RestartCount = int32(r.DecodeInt(32)) + } + case "image": + if r.TryDecodeAsNil() { + x.Image = "" + } else { + x.Image = string(r.DecodeString()) + } + case "imageID": + if r.TryDecodeAsNil() { + x.ImageID = "" + } else { + x.ImageID = string(r.DecodeString()) + } + case "containerID": + if r.TryDecodeAsNil() { + x.ContainerID = "" + } else { + x.ContainerID = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1749) + } // end switch yys1749 + } // end for yyj1749 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1758 int + var yyb1758 bool + var yyhl1758 bool = l >= 0 + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.State = ContainerState{} + } else { + yyv1760 := &x.State + yyv1760.CodecDecodeSelf(d) + } + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTerminationState = ContainerState{} + } else { + yyv1761 := &x.LastTerminationState + yyv1761.CodecDecodeSelf(d) + } + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ready = false + } else { + x.Ready = bool(r.DecodeBool()) + } + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RestartCount = 0 + } else { + x.RestartCount = int32(r.DecodeInt(32)) + } + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Image = "" + } else { + x.Image = string(r.DecodeString()) + } + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ImageID = "" + } else { + x.ImageID = string(r.DecodeString()) + } + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerID = "" + } else { + x.ContainerID = string(r.DecodeString()) + } + for { + yyj1758++ + if yyhl1758 { + yyb1758 = yyj1758 > l + } else { + yyb1758 = r.CheckBreak() + } + if yyb1758 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1758-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PodPhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1767 := z.EncBinary() + _ = yym1767 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PodPhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1768 := z.DecBinary() + _ = yym1768 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x PodConditionType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1769 := z.EncBinary() + _ = yym1769 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PodConditionType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1770 := z.DecBinary() + _ = yym1770 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *PodCondition) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1771 := z.EncBinary() + _ = yym1771 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1772 := !z.EncBinary() + yy2arr1772 := z.EncBasicHandle().StructToArray + var yyq1772 [6]bool + _, _, _ = yysep1772, yyq1772, yy2arr1772 + const yyr1772 bool = false + yyq1772[2] = true + yyq1772[3] = true + yyq1772[4] = x.Reason != "" + yyq1772[5] = x.Message != "" + var yynn1772 int + if yyr1772 || yy2arr1772 { + r.EncodeArrayStart(6) + } else { + yynn1772 = 2 + for _, b := range yyq1772 { + if b { + yynn1772++ + } + } + r.EncodeMapStart(yynn1772) + yynn1772 = 0 + } + if yyr1772 || yy2arr1772 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr1772 || yy2arr1772 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Status.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Status.CodecEncodeSelf(e) + } + if yyr1772 || yy2arr1772 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1772[2] { + yy1776 := &x.LastProbeTime + yym1777 := z.EncBinary() + _ = yym1777 + if false { + } else if z.HasExtensions() && z.EncExt(yy1776) { + } else if yym1777 { + z.EncBinaryMarshal(yy1776) + } else if !yym1777 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1776) + } else { + z.EncFallback(yy1776) + } + } else { + r.EncodeNil() + } + } else { + if yyq1772[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastProbeTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1778 := &x.LastProbeTime + yym1779 := z.EncBinary() + _ = yym1779 + if false { + } else if z.HasExtensions() && z.EncExt(yy1778) { + } else if yym1779 { + z.EncBinaryMarshal(yy1778) + } else if !yym1779 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1778) + } else { + z.EncFallback(yy1778) + } + } + } + if yyr1772 || yy2arr1772 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1772[3] { + yy1781 := &x.LastTransitionTime + yym1782 := z.EncBinary() + _ = yym1782 + if false { + } else if z.HasExtensions() && z.EncExt(yy1781) { + } else if yym1782 { + z.EncBinaryMarshal(yy1781) + } else if !yym1782 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1781) + } else { + z.EncFallback(yy1781) + } + } else { + r.EncodeNil() + } + } else { + if yyq1772[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastTransitionTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1783 := &x.LastTransitionTime + yym1784 := z.EncBinary() + _ = yym1784 + if false { + } else if z.HasExtensions() && z.EncExt(yy1783) { + } else if yym1784 { + z.EncBinaryMarshal(yy1783) + } else if !yym1784 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1783) + } else { + z.EncFallback(yy1783) + } + } + } + if yyr1772 || yy2arr1772 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1772[4] { + yym1786 := z.EncBinary() + _ = yym1786 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1772[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1787 := z.EncBinary() + _ = yym1787 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr1772 || yy2arr1772 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1772[5] { + yym1789 := z.EncBinary() + _ = yym1789 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1772[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1790 := z.EncBinary() + _ = yym1790 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr1772 || yy2arr1772 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodCondition) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1791 := z.DecBinary() + _ = yym1791 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1792 := r.ContainerType() + if yyct1792 == codecSelferValueTypeMap1234 { + yyl1792 := r.ReadMapStart() + if yyl1792 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1792, d) + } + } else if yyct1792 == codecSelferValueTypeArray1234 { + yyl1792 := r.ReadArrayStart() + if yyl1792 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1792, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodCondition) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1793Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1793Slc + var yyhl1793 bool = l >= 0 + for yyj1793 := 0; ; yyj1793++ { + if yyhl1793 { + if yyj1793 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1793Slc = r.DecodeBytes(yys1793Slc, true, true) + yys1793 := string(yys1793Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1793 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = PodConditionType(r.DecodeString()) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + case "lastProbeTime": + if r.TryDecodeAsNil() { + x.LastProbeTime = pkg2_unversioned.Time{} + } else { + yyv1796 := &x.LastProbeTime + yym1797 := z.DecBinary() + _ = yym1797 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1796) { + } else if yym1797 { + z.DecBinaryUnmarshal(yyv1796) + } else if !yym1797 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1796) + } else { + z.DecFallback(yyv1796, false) + } + } + case "lastTransitionTime": + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg2_unversioned.Time{} + } else { + yyv1798 := &x.LastTransitionTime + yym1799 := z.DecBinary() + _ = yym1799 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1798) { + } else if yym1799 { + z.DecBinaryUnmarshal(yyv1798) + } else if !yym1799 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1798) + } else { + z.DecFallback(yyv1798, false) + } + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1793) + } // end switch yys1793 + } // end for yyj1793 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodCondition) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1802 int + var yyb1802 bool + var yyhl1802 bool = l >= 0 + yyj1802++ + if yyhl1802 { + yyb1802 = yyj1802 > l + } else { + yyb1802 = r.CheckBreak() + } + if yyb1802 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = PodConditionType(r.DecodeString()) + } + yyj1802++ + if yyhl1802 { + yyb1802 = yyj1802 > l + } else { + yyb1802 = r.CheckBreak() + } + if yyb1802 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + yyj1802++ + if yyhl1802 { + yyb1802 = yyj1802 > l + } else { + yyb1802 = r.CheckBreak() + } + if yyb1802 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastProbeTime = pkg2_unversioned.Time{} + } else { + yyv1805 := &x.LastProbeTime + yym1806 := z.DecBinary() + _ = yym1806 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1805) { + } else if yym1806 { + z.DecBinaryUnmarshal(yyv1805) + } else if !yym1806 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1805) + } else { + z.DecFallback(yyv1805, false) + } + } + yyj1802++ + if yyhl1802 { + yyb1802 = yyj1802 > l + } else { + yyb1802 = r.CheckBreak() + } + if yyb1802 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg2_unversioned.Time{} + } else { + yyv1807 := &x.LastTransitionTime + yym1808 := z.DecBinary() + _ = yym1808 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1807) { + } else if yym1808 { + z.DecBinaryUnmarshal(yyv1807) + } else if !yym1808 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1807) + } else { + z.DecFallback(yyv1807, false) + } + } + yyj1802++ + if yyhl1802 { + yyb1802 = yyj1802 > l + } else { + yyb1802 = r.CheckBreak() + } + if yyb1802 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj1802++ + if yyhl1802 { + yyb1802 = yyj1802 > l + } else { + yyb1802 = r.CheckBreak() + } + if yyb1802 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj1802++ + if yyhl1802 { + yyb1802 = yyj1802 > l + } else { + yyb1802 = r.CheckBreak() + } + if yyb1802 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1802-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x RestartPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1811 := z.EncBinary() + _ = yym1811 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *RestartPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1812 := z.DecBinary() + _ = yym1812 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *PodList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1813 := z.EncBinary() + _ = yym1813 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1814 := !z.EncBinary() + yy2arr1814 := z.EncBasicHandle().StructToArray + var yyq1814 [4]bool + _, _, _ = yysep1814, yyq1814, yy2arr1814 + const yyr1814 bool = false + yyq1814[0] = x.Kind != "" + yyq1814[1] = x.APIVersion != "" + yyq1814[2] = true + var yynn1814 int + if yyr1814 || yy2arr1814 { + r.EncodeArrayStart(4) + } else { + yynn1814 = 1 + for _, b := range yyq1814 { + if b { + yynn1814++ + } + } + r.EncodeMapStart(yynn1814) + yynn1814 = 0 + } + if yyr1814 || yy2arr1814 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1814[0] { + yym1816 := z.EncBinary() + _ = yym1816 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1814[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1817 := z.EncBinary() + _ = yym1817 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr1814 || yy2arr1814 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1814[1] { + yym1819 := z.EncBinary() + _ = yym1819 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1814[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1820 := z.EncBinary() + _ = yym1820 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr1814 || yy2arr1814 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1814[2] { + yy1822 := &x.ListMeta + yym1823 := z.EncBinary() + _ = yym1823 + if false { + } else if z.HasExtensions() && z.EncExt(yy1822) { + } else { + z.EncFallback(yy1822) + } + } else { + r.EncodeNil() + } + } else { + if yyq1814[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1824 := &x.ListMeta + yym1825 := z.EncBinary() + _ = yym1825 + if false { + } else if z.HasExtensions() && z.EncExt(yy1824) { + } else { + z.EncFallback(yy1824) + } + } + } + if yyr1814 || yy2arr1814 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1827 := z.EncBinary() + _ = yym1827 + if false { + } else { + h.encSlicePod(([]Pod)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1828 := z.EncBinary() + _ = yym1828 + if false { + } else { + h.encSlicePod(([]Pod)(x.Items), e) + } + } + } + if yyr1814 || yy2arr1814 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1829 := z.DecBinary() + _ = yym1829 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1830 := r.ContainerType() + if yyct1830 == codecSelferValueTypeMap1234 { + yyl1830 := r.ReadMapStart() + if yyl1830 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1830, d) + } + } else if yyct1830 == codecSelferValueTypeArray1234 { + yyl1830 := r.ReadArrayStart() + if yyl1830 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1830, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1831Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1831Slc + var yyhl1831 bool = l >= 0 + for yyj1831 := 0; ; yyj1831++ { + if yyhl1831 { + if yyj1831 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1831Slc = r.DecodeBytes(yys1831Slc, true, true) + yys1831 := string(yys1831Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1831 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv1834 := &x.ListMeta + yym1835 := z.DecBinary() + _ = yym1835 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1834) { + } else { + z.DecFallback(yyv1834, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1836 := &x.Items + yym1837 := z.DecBinary() + _ = yym1837 + if false { + } else { + h.decSlicePod((*[]Pod)(yyv1836), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1831) + } // end switch yys1831 + } // end for yyj1831 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1838 int + var yyb1838 bool + var yyhl1838 bool = l >= 0 + yyj1838++ + if yyhl1838 { + yyb1838 = yyj1838 > l + } else { + yyb1838 = r.CheckBreak() + } + if yyb1838 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj1838++ + if yyhl1838 { + yyb1838 = yyj1838 > l + } else { + yyb1838 = r.CheckBreak() + } + if yyb1838 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj1838++ + if yyhl1838 { + yyb1838 = yyj1838 > l + } else { + yyb1838 = r.CheckBreak() + } + if yyb1838 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv1841 := &x.ListMeta + yym1842 := z.DecBinary() + _ = yym1842 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1841) { + } else { + z.DecFallback(yyv1841, false) + } + } + yyj1838++ + if yyhl1838 { + yyb1838 = yyj1838 > l + } else { + yyb1838 = r.CheckBreak() + } + if yyb1838 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1843 := &x.Items + yym1844 := z.DecBinary() + _ = yym1844 + if false { + } else { + h.decSlicePod((*[]Pod)(yyv1843), d) + } + } + for { + yyj1838++ + if yyhl1838 { + yyb1838 = yyj1838 > l + } else { + yyb1838 = r.CheckBreak() + } + if yyb1838 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1838-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x DNSPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1845 := z.EncBinary() + _ = yym1845 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *DNSPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1846 := z.DecBinary() + _ = yym1846 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *NodeSelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1847 := z.EncBinary() + _ = yym1847 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1848 := !z.EncBinary() + yy2arr1848 := z.EncBasicHandle().StructToArray + var yyq1848 [1]bool + _, _, _ = yysep1848, yyq1848, yy2arr1848 + const yyr1848 bool = false + var yynn1848 int + if yyr1848 || yy2arr1848 { + r.EncodeArrayStart(1) + } else { + yynn1848 = 1 + for _, b := range yyq1848 { + if b { + yynn1848++ + } + } + r.EncodeMapStart(yynn1848) + yynn1848 = 0 + } + if yyr1848 || yy2arr1848 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.NodeSelectorTerms == nil { + r.EncodeNil() + } else { + yym1850 := z.EncBinary() + _ = yym1850 + if false { + } else { + h.encSliceNodeSelectorTerm(([]NodeSelectorTerm)(x.NodeSelectorTerms), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeSelectorTerms")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NodeSelectorTerms == nil { + r.EncodeNil() + } else { + yym1851 := z.EncBinary() + _ = yym1851 + if false { + } else { + h.encSliceNodeSelectorTerm(([]NodeSelectorTerm)(x.NodeSelectorTerms), e) + } + } + } + if yyr1848 || yy2arr1848 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1852 := z.DecBinary() + _ = yym1852 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1853 := r.ContainerType() + if yyct1853 == codecSelferValueTypeMap1234 { + yyl1853 := r.ReadMapStart() + if yyl1853 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1853, d) + } + } else if yyct1853 == codecSelferValueTypeArray1234 { + yyl1853 := r.ReadArrayStart() + if yyl1853 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1853, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1854Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1854Slc + var yyhl1854 bool = l >= 0 + for yyj1854 := 0; ; yyj1854++ { + if yyhl1854 { + if yyj1854 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1854Slc = r.DecodeBytes(yys1854Slc, true, true) + yys1854 := string(yys1854Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1854 { + case "nodeSelectorTerms": + if r.TryDecodeAsNil() { + x.NodeSelectorTerms = nil + } else { + yyv1855 := &x.NodeSelectorTerms + yym1856 := z.DecBinary() + _ = yym1856 + if false { + } else { + h.decSliceNodeSelectorTerm((*[]NodeSelectorTerm)(yyv1855), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1854) + } // end switch yys1854 + } // end for yyj1854 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1857 int + var yyb1857 bool + var yyhl1857 bool = l >= 0 + yyj1857++ + if yyhl1857 { + yyb1857 = yyj1857 > l + } else { + yyb1857 = r.CheckBreak() + } + if yyb1857 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodeSelectorTerms = nil + } else { + yyv1858 := &x.NodeSelectorTerms + yym1859 := z.DecBinary() + _ = yym1859 + if false { + } else { + h.decSliceNodeSelectorTerm((*[]NodeSelectorTerm)(yyv1858), d) + } + } + for { + yyj1857++ + if yyhl1857 { + yyb1857 = yyj1857 > l + } else { + yyb1857 = r.CheckBreak() + } + if yyb1857 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1857-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeSelectorTerm) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1860 := z.EncBinary() + _ = yym1860 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1861 := !z.EncBinary() + yy2arr1861 := z.EncBasicHandle().StructToArray + var yyq1861 [1]bool + _, _, _ = yysep1861, yyq1861, yy2arr1861 + const yyr1861 bool = false + var yynn1861 int + if yyr1861 || yy2arr1861 { + r.EncodeArrayStart(1) + } else { + yynn1861 = 1 + for _, b := range yyq1861 { + if b { + yynn1861++ + } + } + r.EncodeMapStart(yynn1861) + yynn1861 = 0 + } + if yyr1861 || yy2arr1861 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.MatchExpressions == nil { + r.EncodeNil() + } else { + yym1863 := z.EncBinary() + _ = yym1863 + if false { + } else { + h.encSliceNodeSelectorRequirement(([]NodeSelectorRequirement)(x.MatchExpressions), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("matchExpressions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.MatchExpressions == nil { + r.EncodeNil() + } else { + yym1864 := z.EncBinary() + _ = yym1864 + if false { + } else { + h.encSliceNodeSelectorRequirement(([]NodeSelectorRequirement)(x.MatchExpressions), e) + } + } + } + if yyr1861 || yy2arr1861 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSelectorTerm) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1865 := z.DecBinary() + _ = yym1865 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1866 := r.ContainerType() + if yyct1866 == codecSelferValueTypeMap1234 { + yyl1866 := r.ReadMapStart() + if yyl1866 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1866, d) + } + } else if yyct1866 == codecSelferValueTypeArray1234 { + yyl1866 := r.ReadArrayStart() + if yyl1866 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1866, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSelectorTerm) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1867Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1867Slc + var yyhl1867 bool = l >= 0 + for yyj1867 := 0; ; yyj1867++ { + if yyhl1867 { + if yyj1867 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1867Slc = r.DecodeBytes(yys1867Slc, true, true) + yys1867 := string(yys1867Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1867 { + case "matchExpressions": + if r.TryDecodeAsNil() { + x.MatchExpressions = nil + } else { + yyv1868 := &x.MatchExpressions + yym1869 := z.DecBinary() + _ = yym1869 + if false { + } else { + h.decSliceNodeSelectorRequirement((*[]NodeSelectorRequirement)(yyv1868), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1867) + } // end switch yys1867 + } // end for yyj1867 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSelectorTerm) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1870 int + var yyb1870 bool + var yyhl1870 bool = l >= 0 + yyj1870++ + if yyhl1870 { + yyb1870 = yyj1870 > l + } else { + yyb1870 = r.CheckBreak() + } + if yyb1870 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MatchExpressions = nil + } else { + yyv1871 := &x.MatchExpressions + yym1872 := z.DecBinary() + _ = yym1872 + if false { + } else { + h.decSliceNodeSelectorRequirement((*[]NodeSelectorRequirement)(yyv1871), d) + } + } + for { + yyj1870++ + if yyhl1870 { + yyb1870 = yyj1870 > l + } else { + yyb1870 = r.CheckBreak() + } + if yyb1870 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1870-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeSelectorRequirement) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1873 := z.EncBinary() + _ = yym1873 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1874 := !z.EncBinary() + yy2arr1874 := z.EncBasicHandle().StructToArray + var yyq1874 [3]bool + _, _, _ = yysep1874, yyq1874, yy2arr1874 + const yyr1874 bool = false + yyq1874[2] = len(x.Values) != 0 + var yynn1874 int + if yyr1874 || yy2arr1874 { + r.EncodeArrayStart(3) + } else { + yynn1874 = 2 + for _, b := range yyq1874 { + if b { + yynn1874++ + } + } + r.EncodeMapStart(yynn1874) + yynn1874 = 0 + } + if yyr1874 || yy2arr1874 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1876 := z.EncBinary() + _ = yym1876 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1877 := z.EncBinary() + _ = yym1877 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1874 || yy2arr1874 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Operator.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("operator")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Operator.CodecEncodeSelf(e) + } + if yyr1874 || yy2arr1874 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1874[2] { + if x.Values == nil { + r.EncodeNil() + } else { + yym1880 := z.EncBinary() + _ = yym1880 + if false { + } else { + z.F.EncSliceStringV(x.Values, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1874[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("values")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Values == nil { + r.EncodeNil() + } else { + yym1881 := z.EncBinary() + _ = yym1881 + if false { + } else { + z.F.EncSliceStringV(x.Values, false, e) + } + } + } + } + if yyr1874 || yy2arr1874 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSelectorRequirement) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1882 := z.DecBinary() + _ = yym1882 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1883 := r.ContainerType() + if yyct1883 == codecSelferValueTypeMap1234 { + yyl1883 := r.ReadMapStart() + if yyl1883 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1883, d) + } + } else if yyct1883 == codecSelferValueTypeArray1234 { + yyl1883 := r.ReadArrayStart() + if yyl1883 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1883, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSelectorRequirement) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1884Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1884Slc + var yyhl1884 bool = l >= 0 + for yyj1884 := 0; ; yyj1884++ { + if yyhl1884 { + if yyj1884 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1884Slc = r.DecodeBytes(yys1884Slc, true, true) + yys1884 := string(yys1884Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1884 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "operator": + if r.TryDecodeAsNil() { + x.Operator = "" + } else { + x.Operator = NodeSelectorOperator(r.DecodeString()) + } + case "values": + if r.TryDecodeAsNil() { + x.Values = nil + } else { + yyv1887 := &x.Values + yym1888 := z.DecBinary() + _ = yym1888 + if false { + } else { + z.F.DecSliceStringX(yyv1887, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1884) + } // end switch yys1884 + } // end for yyj1884 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSelectorRequirement) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1889 int + var yyb1889 bool + var yyhl1889 bool = l >= 0 + yyj1889++ + if yyhl1889 { + yyb1889 = yyj1889 > l + } else { + yyb1889 = r.CheckBreak() + } + if yyb1889 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj1889++ + if yyhl1889 { + yyb1889 = yyj1889 > l + } else { + yyb1889 = r.CheckBreak() + } + if yyb1889 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Operator = "" + } else { + x.Operator = NodeSelectorOperator(r.DecodeString()) + } + yyj1889++ + if yyhl1889 { + yyb1889 = yyj1889 > l + } else { + yyb1889 = r.CheckBreak() + } + if yyb1889 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Values = nil + } else { + yyv1892 := &x.Values + yym1893 := z.DecBinary() + _ = yym1893 + if false { + } else { + z.F.DecSliceStringX(yyv1892, false, d) + } + } + for { + yyj1889++ + if yyhl1889 { + yyb1889 = yyj1889 > l + } else { + yyb1889 = r.CheckBreak() + } + if yyb1889 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1889-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x NodeSelectorOperator) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1894 := z.EncBinary() + _ = yym1894 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NodeSelectorOperator) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1895 := z.DecBinary() + _ = yym1895 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *Affinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1896 := z.EncBinary() + _ = yym1896 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1897 := !z.EncBinary() + yy2arr1897 := z.EncBasicHandle().StructToArray + var yyq1897 [3]bool + _, _, _ = yysep1897, yyq1897, yy2arr1897 + const yyr1897 bool = false + yyq1897[0] = x.NodeAffinity != nil + yyq1897[1] = x.PodAffinity != nil + yyq1897[2] = x.PodAntiAffinity != nil + var yynn1897 int + if yyr1897 || yy2arr1897 { + r.EncodeArrayStart(3) + } else { + yynn1897 = 0 + for _, b := range yyq1897 { + if b { + yynn1897++ + } + } + r.EncodeMapStart(yynn1897) + yynn1897 = 0 + } + if yyr1897 || yy2arr1897 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1897[0] { + if x.NodeAffinity == nil { + r.EncodeNil() + } else { + x.NodeAffinity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1897[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeAffinity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NodeAffinity == nil { + r.EncodeNil() + } else { + x.NodeAffinity.CodecEncodeSelf(e) + } + } + } + if yyr1897 || yy2arr1897 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1897[1] { + if x.PodAffinity == nil { + r.EncodeNil() + } else { + x.PodAffinity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1897[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podAffinity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PodAffinity == nil { + r.EncodeNil() + } else { + x.PodAffinity.CodecEncodeSelf(e) + } + } + } + if yyr1897 || yy2arr1897 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1897[2] { + if x.PodAntiAffinity == nil { + r.EncodeNil() + } else { + x.PodAntiAffinity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1897[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podAntiAffinity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PodAntiAffinity == nil { + r.EncodeNil() + } else { + x.PodAntiAffinity.CodecEncodeSelf(e) + } + } + } + if yyr1897 || yy2arr1897 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Affinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1901 := z.DecBinary() + _ = yym1901 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1902 := r.ContainerType() + if yyct1902 == codecSelferValueTypeMap1234 { + yyl1902 := r.ReadMapStart() + if yyl1902 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1902, d) + } + } else if yyct1902 == codecSelferValueTypeArray1234 { + yyl1902 := r.ReadArrayStart() + if yyl1902 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1902, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Affinity) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1903Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1903Slc + var yyhl1903 bool = l >= 0 + for yyj1903 := 0; ; yyj1903++ { + if yyhl1903 { + if yyj1903 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1903Slc = r.DecodeBytes(yys1903Slc, true, true) + yys1903 := string(yys1903Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1903 { + case "nodeAffinity": + if r.TryDecodeAsNil() { + if x.NodeAffinity != nil { + x.NodeAffinity = nil + } + } else { + if x.NodeAffinity == nil { + x.NodeAffinity = new(NodeAffinity) + } + x.NodeAffinity.CodecDecodeSelf(d) + } + case "podAffinity": + if r.TryDecodeAsNil() { + if x.PodAffinity != nil { + x.PodAffinity = nil + } + } else { + if x.PodAffinity == nil { + x.PodAffinity = new(PodAffinity) + } + x.PodAffinity.CodecDecodeSelf(d) + } + case "podAntiAffinity": + if r.TryDecodeAsNil() { + if x.PodAntiAffinity != nil { + x.PodAntiAffinity = nil + } + } else { + if x.PodAntiAffinity == nil { + x.PodAntiAffinity = new(PodAntiAffinity) + } + x.PodAntiAffinity.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1903) + } // end switch yys1903 + } // end for yyj1903 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Affinity) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1907 int + var yyb1907 bool + var yyhl1907 bool = l >= 0 + yyj1907++ + if yyhl1907 { + yyb1907 = yyj1907 > l + } else { + yyb1907 = r.CheckBreak() + } + if yyb1907 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NodeAffinity != nil { + x.NodeAffinity = nil + } + } else { + if x.NodeAffinity == nil { + x.NodeAffinity = new(NodeAffinity) + } + x.NodeAffinity.CodecDecodeSelf(d) + } + yyj1907++ + if yyhl1907 { + yyb1907 = yyj1907 > l + } else { + yyb1907 = r.CheckBreak() + } + if yyb1907 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PodAffinity != nil { + x.PodAffinity = nil + } + } else { + if x.PodAffinity == nil { + x.PodAffinity = new(PodAffinity) + } + x.PodAffinity.CodecDecodeSelf(d) + } + yyj1907++ + if yyhl1907 { + yyb1907 = yyj1907 > l + } else { + yyb1907 = r.CheckBreak() + } + if yyb1907 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PodAntiAffinity != nil { + x.PodAntiAffinity = nil + } + } else { + if x.PodAntiAffinity == nil { + x.PodAntiAffinity = new(PodAntiAffinity) + } + x.PodAntiAffinity.CodecDecodeSelf(d) + } + for { + yyj1907++ + if yyhl1907 { + yyb1907 = yyj1907 > l + } else { + yyb1907 = r.CheckBreak() + } + if yyb1907 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1907-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodAffinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1911 := z.EncBinary() + _ = yym1911 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1912 := !z.EncBinary() + yy2arr1912 := z.EncBasicHandle().StructToArray + var yyq1912 [2]bool + _, _, _ = yysep1912, yyq1912, yy2arr1912 + const yyr1912 bool = false + yyq1912[0] = len(x.RequiredDuringSchedulingIgnoredDuringExecution) != 0 + yyq1912[1] = len(x.PreferredDuringSchedulingIgnoredDuringExecution) != 0 + var yynn1912 int + if yyr1912 || yy2arr1912 { + r.EncodeArrayStart(2) + } else { + yynn1912 = 0 + for _, b := range yyq1912 { + if b { + yynn1912++ + } + } + r.EncodeMapStart(yynn1912) + yynn1912 = 0 + } + if yyr1912 || yy2arr1912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1912[0] { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1914 := z.EncBinary() + _ = yym1914 + if false { + } else { + h.encSlicePodAffinityTerm(([]PodAffinityTerm)(x.RequiredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1912[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requiredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1915 := z.EncBinary() + _ = yym1915 + if false { + } else { + h.encSlicePodAffinityTerm(([]PodAffinityTerm)(x.RequiredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1912 || yy2arr1912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1912[1] { + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1917 := z.EncBinary() + _ = yym1917 + if false { + } else { + h.encSliceWeightedPodAffinityTerm(([]WeightedPodAffinityTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1912[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preferredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1918 := z.EncBinary() + _ = yym1918 + if false { + } else { + h.encSliceWeightedPodAffinityTerm(([]WeightedPodAffinityTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1912 || yy2arr1912 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodAffinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1919 := z.DecBinary() + _ = yym1919 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1920 := r.ContainerType() + if yyct1920 == codecSelferValueTypeMap1234 { + yyl1920 := r.ReadMapStart() + if yyl1920 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1920, d) + } + } else if yyct1920 == codecSelferValueTypeArray1234 { + yyl1920 := r.ReadArrayStart() + if yyl1920 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1920, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodAffinity) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1921Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1921Slc + var yyhl1921 bool = l >= 0 + for yyj1921 := 0; ; yyj1921++ { + if yyhl1921 { + if yyj1921 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1921Slc = r.DecodeBytes(yys1921Slc, true, true) + yys1921 := string(yys1921Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1921 { + case "requiredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1922 := &x.RequiredDuringSchedulingIgnoredDuringExecution + yym1923 := z.DecBinary() + _ = yym1923 + if false { + } else { + h.decSlicePodAffinityTerm((*[]PodAffinityTerm)(yyv1922), d) + } + } + case "preferredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1924 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1925 := z.DecBinary() + _ = yym1925 + if false { + } else { + h.decSliceWeightedPodAffinityTerm((*[]WeightedPodAffinityTerm)(yyv1924), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1921) + } // end switch yys1921 + } // end for yyj1921 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodAffinity) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1926 int + var yyb1926 bool + var yyhl1926 bool = l >= 0 + yyj1926++ + if yyhl1926 { + yyb1926 = yyj1926 > l + } else { + yyb1926 = r.CheckBreak() + } + if yyb1926 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1927 := &x.RequiredDuringSchedulingIgnoredDuringExecution + yym1928 := z.DecBinary() + _ = yym1928 + if false { + } else { + h.decSlicePodAffinityTerm((*[]PodAffinityTerm)(yyv1927), d) + } + } + yyj1926++ + if yyhl1926 { + yyb1926 = yyj1926 > l + } else { + yyb1926 = r.CheckBreak() + } + if yyb1926 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1929 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1930 := z.DecBinary() + _ = yym1930 + if false { + } else { + h.decSliceWeightedPodAffinityTerm((*[]WeightedPodAffinityTerm)(yyv1929), d) + } + } + for { + yyj1926++ + if yyhl1926 { + yyb1926 = yyj1926 > l + } else { + yyb1926 = r.CheckBreak() + } + if yyb1926 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1926-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodAntiAffinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1931 := z.EncBinary() + _ = yym1931 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1932 := !z.EncBinary() + yy2arr1932 := z.EncBasicHandle().StructToArray + var yyq1932 [2]bool + _, _, _ = yysep1932, yyq1932, yy2arr1932 + const yyr1932 bool = false + yyq1932[0] = len(x.RequiredDuringSchedulingIgnoredDuringExecution) != 0 + yyq1932[1] = len(x.PreferredDuringSchedulingIgnoredDuringExecution) != 0 + var yynn1932 int + if yyr1932 || yy2arr1932 { + r.EncodeArrayStart(2) + } else { + yynn1932 = 0 + for _, b := range yyq1932 { + if b { + yynn1932++ + } + } + r.EncodeMapStart(yynn1932) + yynn1932 = 0 + } + if yyr1932 || yy2arr1932 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1932[0] { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1934 := z.EncBinary() + _ = yym1934 + if false { + } else { + h.encSlicePodAffinityTerm(([]PodAffinityTerm)(x.RequiredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1932[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requiredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1935 := z.EncBinary() + _ = yym1935 + if false { + } else { + h.encSlicePodAffinityTerm(([]PodAffinityTerm)(x.RequiredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1932 || yy2arr1932 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1932[1] { + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1937 := z.EncBinary() + _ = yym1937 + if false { + } else { + h.encSliceWeightedPodAffinityTerm(([]WeightedPodAffinityTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1932[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preferredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1938 := z.EncBinary() + _ = yym1938 + if false { + } else { + h.encSliceWeightedPodAffinityTerm(([]WeightedPodAffinityTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1932 || yy2arr1932 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodAntiAffinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1939 := z.DecBinary() + _ = yym1939 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1940 := r.ContainerType() + if yyct1940 == codecSelferValueTypeMap1234 { + yyl1940 := r.ReadMapStart() + if yyl1940 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1940, d) + } + } else if yyct1940 == codecSelferValueTypeArray1234 { + yyl1940 := r.ReadArrayStart() + if yyl1940 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1940, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodAntiAffinity) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1941Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1941Slc + var yyhl1941 bool = l >= 0 + for yyj1941 := 0; ; yyj1941++ { + if yyhl1941 { + if yyj1941 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1941Slc = r.DecodeBytes(yys1941Slc, true, true) + yys1941 := string(yys1941Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1941 { + case "requiredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1942 := &x.RequiredDuringSchedulingIgnoredDuringExecution + yym1943 := z.DecBinary() + _ = yym1943 + if false { + } else { + h.decSlicePodAffinityTerm((*[]PodAffinityTerm)(yyv1942), d) + } + } + case "preferredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1944 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1945 := z.DecBinary() + _ = yym1945 + if false { + } else { + h.decSliceWeightedPodAffinityTerm((*[]WeightedPodAffinityTerm)(yyv1944), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1941) + } // end switch yys1941 + } // end for yyj1941 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodAntiAffinity) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1946 int + var yyb1946 bool + var yyhl1946 bool = l >= 0 + yyj1946++ + if yyhl1946 { + yyb1946 = yyj1946 > l + } else { + yyb1946 = r.CheckBreak() + } + if yyb1946 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1947 := &x.RequiredDuringSchedulingIgnoredDuringExecution + yym1948 := z.DecBinary() + _ = yym1948 + if false { + } else { + h.decSlicePodAffinityTerm((*[]PodAffinityTerm)(yyv1947), d) + } + } + yyj1946++ + if yyhl1946 { + yyb1946 = yyj1946 > l + } else { + yyb1946 = r.CheckBreak() + } + if yyb1946 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1949 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1950 := z.DecBinary() + _ = yym1950 + if false { + } else { + h.decSliceWeightedPodAffinityTerm((*[]WeightedPodAffinityTerm)(yyv1949), d) + } + } + for { + yyj1946++ + if yyhl1946 { + yyb1946 = yyj1946 > l + } else { + yyb1946 = r.CheckBreak() + } + if yyb1946 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1946-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *WeightedPodAffinityTerm) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1951 := z.EncBinary() + _ = yym1951 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1952 := !z.EncBinary() + yy2arr1952 := z.EncBasicHandle().StructToArray + var yyq1952 [2]bool + _, _, _ = yysep1952, yyq1952, yy2arr1952 + const yyr1952 bool = false + var yynn1952 int + if yyr1952 || yy2arr1952 { + r.EncodeArrayStart(2) + } else { + yynn1952 = 2 + for _, b := range yyq1952 { + if b { + yynn1952++ + } + } + r.EncodeMapStart(yynn1952) + yynn1952 = 0 + } + if yyr1952 || yy2arr1952 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1954 := z.EncBinary() + _ = yym1954 + if false { + } else { + r.EncodeInt(int64(x.Weight)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("weight")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1955 := z.EncBinary() + _ = yym1955 + if false { + } else { + r.EncodeInt(int64(x.Weight)) + } + } + if yyr1952 || yy2arr1952 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1957 := &x.PodAffinityTerm + yy1957.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podAffinityTerm")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1958 := &x.PodAffinityTerm + yy1958.CodecEncodeSelf(e) + } + if yyr1952 || yy2arr1952 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *WeightedPodAffinityTerm) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1959 := z.DecBinary() + _ = yym1959 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1960 := r.ContainerType() + if yyct1960 == codecSelferValueTypeMap1234 { + yyl1960 := r.ReadMapStart() + if yyl1960 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1960, d) + } + } else if yyct1960 == codecSelferValueTypeArray1234 { + yyl1960 := r.ReadArrayStart() + if yyl1960 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1960, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *WeightedPodAffinityTerm) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1961Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1961Slc + var yyhl1961 bool = l >= 0 + for yyj1961 := 0; ; yyj1961++ { + if yyhl1961 { + if yyj1961 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1961Slc = r.DecodeBytes(yys1961Slc, true, true) + yys1961 := string(yys1961Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1961 { + case "weight": + if r.TryDecodeAsNil() { + x.Weight = 0 + } else { + x.Weight = int(r.DecodeInt(codecSelferBitsize1234)) + } + case "podAffinityTerm": + if r.TryDecodeAsNil() { + x.PodAffinityTerm = PodAffinityTerm{} + } else { + yyv1963 := &x.PodAffinityTerm + yyv1963.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1961) + } // end switch yys1961 + } // end for yyj1961 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *WeightedPodAffinityTerm) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1964 int + var yyb1964 bool + var yyhl1964 bool = l >= 0 + yyj1964++ + if yyhl1964 { + yyb1964 = yyj1964 > l + } else { + yyb1964 = r.CheckBreak() + } + if yyb1964 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Weight = 0 + } else { + x.Weight = int(r.DecodeInt(codecSelferBitsize1234)) + } + yyj1964++ + if yyhl1964 { + yyb1964 = yyj1964 > l + } else { + yyb1964 = r.CheckBreak() + } + if yyb1964 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodAffinityTerm = PodAffinityTerm{} + } else { + yyv1966 := &x.PodAffinityTerm + yyv1966.CodecDecodeSelf(d) + } + for { + yyj1964++ + if yyhl1964 { + yyb1964 = yyj1964 > l + } else { + yyb1964 = r.CheckBreak() + } + if yyb1964 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1964-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodAffinityTerm) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1967 := z.EncBinary() + _ = yym1967 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1968 := !z.EncBinary() + yy2arr1968 := z.EncBasicHandle().StructToArray + var yyq1968 [3]bool + _, _, _ = yysep1968, yyq1968, yy2arr1968 + const yyr1968 bool = false + yyq1968[0] = x.LabelSelector != nil + yyq1968[2] = x.TopologyKey != "" + var yynn1968 int + if yyr1968 || yy2arr1968 { + r.EncodeArrayStart(3) + } else { + yynn1968 = 1 + for _, b := range yyq1968 { + if b { + yynn1968++ + } + } + r.EncodeMapStart(yynn1968) + yynn1968 = 0 + } + if yyr1968 || yy2arr1968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1968[0] { + if x.LabelSelector == nil { + r.EncodeNil() + } else { + yym1970 := z.EncBinary() + _ = yym1970 + if false { + } else if z.HasExtensions() && z.EncExt(x.LabelSelector) { + } else { + z.EncFallback(x.LabelSelector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1968[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("labelSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LabelSelector == nil { + r.EncodeNil() + } else { + yym1971 := z.EncBinary() + _ = yym1971 + if false { + } else if z.HasExtensions() && z.EncExt(x.LabelSelector) { + } else { + z.EncFallback(x.LabelSelector) + } + } + } + } + if yyr1968 || yy2arr1968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Namespaces == nil { + r.EncodeNil() + } else { + yym1973 := z.EncBinary() + _ = yym1973 + if false { + } else { + z.F.EncSliceStringV(x.Namespaces, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("namespaces")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Namespaces == nil { + r.EncodeNil() + } else { + yym1974 := z.EncBinary() + _ = yym1974 + if false { + } else { + z.F.EncSliceStringV(x.Namespaces, false, e) + } + } + } + if yyr1968 || yy2arr1968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1968[2] { + yym1976 := z.EncBinary() + _ = yym1976 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TopologyKey)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1968[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("topologyKey")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1977 := z.EncBinary() + _ = yym1977 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TopologyKey)) + } + } + } + if yyr1968 || yy2arr1968 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodAffinityTerm) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1978 := z.DecBinary() + _ = yym1978 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1979 := r.ContainerType() + if yyct1979 == codecSelferValueTypeMap1234 { + yyl1979 := r.ReadMapStart() + if yyl1979 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1979, d) + } + } else if yyct1979 == codecSelferValueTypeArray1234 { + yyl1979 := r.ReadArrayStart() + if yyl1979 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1979, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodAffinityTerm) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1980Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1980Slc + var yyhl1980 bool = l >= 0 + for yyj1980 := 0; ; yyj1980++ { + if yyhl1980 { + if yyj1980 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1980Slc = r.DecodeBytes(yys1980Slc, true, true) + yys1980 := string(yys1980Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1980 { + case "labelSelector": + if r.TryDecodeAsNil() { + if x.LabelSelector != nil { + x.LabelSelector = nil + } + } else { + if x.LabelSelector == nil { + x.LabelSelector = new(pkg2_unversioned.LabelSelector) + } + yym1982 := z.DecBinary() + _ = yym1982 + if false { + } else if z.HasExtensions() && z.DecExt(x.LabelSelector) { + } else { + z.DecFallback(x.LabelSelector, false) + } + } + case "namespaces": + if r.TryDecodeAsNil() { + x.Namespaces = nil + } else { + yyv1983 := &x.Namespaces + yym1984 := z.DecBinary() + _ = yym1984 + if false { + } else { + z.F.DecSliceStringX(yyv1983, false, d) + } + } + case "topologyKey": + if r.TryDecodeAsNil() { + x.TopologyKey = "" + } else { + x.TopologyKey = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1980) + } // end switch yys1980 + } // end for yyj1980 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodAffinityTerm) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1986 int + var yyb1986 bool + var yyhl1986 bool = l >= 0 + yyj1986++ + if yyhl1986 { + yyb1986 = yyj1986 > l + } else { + yyb1986 = r.CheckBreak() + } + if yyb1986 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.LabelSelector != nil { + x.LabelSelector = nil + } + } else { + if x.LabelSelector == nil { + x.LabelSelector = new(pkg2_unversioned.LabelSelector) + } + yym1988 := z.DecBinary() + _ = yym1988 + if false { + } else if z.HasExtensions() && z.DecExt(x.LabelSelector) { + } else { + z.DecFallback(x.LabelSelector, false) + } + } + yyj1986++ + if yyhl1986 { + yyb1986 = yyj1986 > l + } else { + yyb1986 = r.CheckBreak() + } + if yyb1986 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Namespaces = nil + } else { + yyv1989 := &x.Namespaces + yym1990 := z.DecBinary() + _ = yym1990 + if false { + } else { + z.F.DecSliceStringX(yyv1989, false, d) + } + } + yyj1986++ + if yyhl1986 { + yyb1986 = yyj1986 > l + } else { + yyb1986 = r.CheckBreak() + } + if yyb1986 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TopologyKey = "" + } else { + x.TopologyKey = string(r.DecodeString()) + } + for { + yyj1986++ + if yyhl1986 { + yyb1986 = yyj1986 > l + } else { + yyb1986 = r.CheckBreak() + } + if yyb1986 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1986-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeAffinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1992 := z.EncBinary() + _ = yym1992 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1993 := !z.EncBinary() + yy2arr1993 := z.EncBasicHandle().StructToArray + var yyq1993 [2]bool + _, _, _ = yysep1993, yyq1993, yy2arr1993 + const yyr1993 bool = false + yyq1993[0] = x.RequiredDuringSchedulingIgnoredDuringExecution != nil + yyq1993[1] = len(x.PreferredDuringSchedulingIgnoredDuringExecution) != 0 + var yynn1993 int + if yyr1993 || yy2arr1993 { + r.EncodeArrayStart(2) + } else { + yynn1993 = 0 + for _, b := range yyq1993 { + if b { + yynn1993++ + } + } + r.EncodeMapStart(yynn1993) + yynn1993 = 0 + } + if yyr1993 || yy2arr1993 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1993[0] { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + x.RequiredDuringSchedulingIgnoredDuringExecution.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1993[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requiredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + x.RequiredDuringSchedulingIgnoredDuringExecution.CodecEncodeSelf(e) + } + } + } + if yyr1993 || yy2arr1993 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1993[1] { + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1996 := z.EncBinary() + _ = yym1996 + if false { + } else { + h.encSlicePreferredSchedulingTerm(([]PreferredSchedulingTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1993[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preferredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1997 := z.EncBinary() + _ = yym1997 + if false { + } else { + h.encSlicePreferredSchedulingTerm(([]PreferredSchedulingTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1993 || yy2arr1993 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeAffinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1998 := z.DecBinary() + _ = yym1998 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1999 := r.ContainerType() + if yyct1999 == codecSelferValueTypeMap1234 { + yyl1999 := r.ReadMapStart() + if yyl1999 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1999, d) + } + } else if yyct1999 == codecSelferValueTypeArray1234 { + yyl1999 := r.ReadArrayStart() + if yyl1999 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1999, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeAffinity) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2000Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2000Slc + var yyhl2000 bool = l >= 0 + for yyj2000 := 0; ; yyj2000++ { + if yyhl2000 { + if yyj2000 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2000Slc = r.DecodeBytes(yys2000Slc, true, true) + yys2000 := string(yys2000Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2000 { + case "requiredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + if x.RequiredDuringSchedulingIgnoredDuringExecution != nil { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + } else { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + x.RequiredDuringSchedulingIgnoredDuringExecution = new(NodeSelector) + } + x.RequiredDuringSchedulingIgnoredDuringExecution.CodecDecodeSelf(d) + } + case "preferredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv2002 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym2003 := z.DecBinary() + _ = yym2003 + if false { + } else { + h.decSlicePreferredSchedulingTerm((*[]PreferredSchedulingTerm)(yyv2002), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2000) + } // end switch yys2000 + } // end for yyj2000 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeAffinity) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2004 int + var yyb2004 bool + var yyhl2004 bool = l >= 0 + yyj2004++ + if yyhl2004 { + yyb2004 = yyj2004 > l + } else { + yyb2004 = r.CheckBreak() + } + if yyb2004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RequiredDuringSchedulingIgnoredDuringExecution != nil { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + } else { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + x.RequiredDuringSchedulingIgnoredDuringExecution = new(NodeSelector) + } + x.RequiredDuringSchedulingIgnoredDuringExecution.CodecDecodeSelf(d) + } + yyj2004++ + if yyhl2004 { + yyb2004 = yyj2004 > l + } else { + yyb2004 = r.CheckBreak() + } + if yyb2004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv2006 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym2007 := z.DecBinary() + _ = yym2007 + if false { + } else { + h.decSlicePreferredSchedulingTerm((*[]PreferredSchedulingTerm)(yyv2006), d) + } + } + for { + yyj2004++ + if yyhl2004 { + yyb2004 = yyj2004 > l + } else { + yyb2004 = r.CheckBreak() + } + if yyb2004 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2004-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PreferredSchedulingTerm) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2008 := z.EncBinary() + _ = yym2008 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2009 := !z.EncBinary() + yy2arr2009 := z.EncBasicHandle().StructToArray + var yyq2009 [2]bool + _, _, _ = yysep2009, yyq2009, yy2arr2009 + const yyr2009 bool = false + var yynn2009 int + if yyr2009 || yy2arr2009 { + r.EncodeArrayStart(2) + } else { + yynn2009 = 2 + for _, b := range yyq2009 { + if b { + yynn2009++ + } + } + r.EncodeMapStart(yynn2009) + yynn2009 = 0 + } + if yyr2009 || yy2arr2009 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2011 := z.EncBinary() + _ = yym2011 + if false { + } else { + r.EncodeInt(int64(x.Weight)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("weight")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2012 := z.EncBinary() + _ = yym2012 + if false { + } else { + r.EncodeInt(int64(x.Weight)) + } + } + if yyr2009 || yy2arr2009 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy2014 := &x.Preference + yy2014.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preference")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2015 := &x.Preference + yy2015.CodecEncodeSelf(e) + } + if yyr2009 || yy2arr2009 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PreferredSchedulingTerm) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2016 := z.DecBinary() + _ = yym2016 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2017 := r.ContainerType() + if yyct2017 == codecSelferValueTypeMap1234 { + yyl2017 := r.ReadMapStart() + if yyl2017 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2017, d) + } + } else if yyct2017 == codecSelferValueTypeArray1234 { + yyl2017 := r.ReadArrayStart() + if yyl2017 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2017, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PreferredSchedulingTerm) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2018Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2018Slc + var yyhl2018 bool = l >= 0 + for yyj2018 := 0; ; yyj2018++ { + if yyhl2018 { + if yyj2018 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2018Slc = r.DecodeBytes(yys2018Slc, true, true) + yys2018 := string(yys2018Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2018 { + case "weight": + if r.TryDecodeAsNil() { + x.Weight = 0 + } else { + x.Weight = int32(r.DecodeInt(32)) + } + case "preference": + if r.TryDecodeAsNil() { + x.Preference = NodeSelectorTerm{} + } else { + yyv2020 := &x.Preference + yyv2020.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2018) + } // end switch yys2018 + } // end for yyj2018 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PreferredSchedulingTerm) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2021 int + var yyb2021 bool + var yyhl2021 bool = l >= 0 + yyj2021++ + if yyhl2021 { + yyb2021 = yyj2021 > l + } else { + yyb2021 = r.CheckBreak() + } + if yyb2021 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Weight = 0 + } else { + x.Weight = int32(r.DecodeInt(32)) + } + yyj2021++ + if yyhl2021 { + yyb2021 = yyj2021 > l + } else { + yyb2021 = r.CheckBreak() + } + if yyb2021 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Preference = NodeSelectorTerm{} + } else { + yyv2023 := &x.Preference + yyv2023.CodecDecodeSelf(d) + } + for { + yyj2021++ + if yyhl2021 { + yyb2021 = yyj2021 > l + } else { + yyb2021 = r.CheckBreak() + } + if yyb2021 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2021-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Taint) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2024 := z.EncBinary() + _ = yym2024 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2025 := !z.EncBinary() + yy2arr2025 := z.EncBasicHandle().StructToArray + var yyq2025 [3]bool + _, _, _ = yysep2025, yyq2025, yy2arr2025 + const yyr2025 bool = false + yyq2025[1] = x.Value != "" + var yynn2025 int + if yyr2025 || yy2arr2025 { + r.EncodeArrayStart(3) + } else { + yynn2025 = 2 + for _, b := range yyq2025 { + if b { + yynn2025++ + } + } + r.EncodeMapStart(yynn2025) + yynn2025 = 0 + } + if yyr2025 || yy2arr2025 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2027 := z.EncBinary() + _ = yym2027 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2028 := z.EncBinary() + _ = yym2028 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr2025 || yy2arr2025 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2025[1] { + yym2030 := z.EncBinary() + _ = yym2030 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2025[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2031 := z.EncBinary() + _ = yym2031 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + } + if yyr2025 || yy2arr2025 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Effect.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("effect")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Effect.CodecEncodeSelf(e) + } + if yyr2025 || yy2arr2025 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Taint) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2033 := z.DecBinary() + _ = yym2033 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2034 := r.ContainerType() + if yyct2034 == codecSelferValueTypeMap1234 { + yyl2034 := r.ReadMapStart() + if yyl2034 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2034, d) + } + } else if yyct2034 == codecSelferValueTypeArray1234 { + yyl2034 := r.ReadArrayStart() + if yyl2034 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2034, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Taint) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2035Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2035Slc + var yyhl2035 bool = l >= 0 + for yyj2035 := 0; ; yyj2035++ { + if yyhl2035 { + if yyj2035 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2035Slc = r.DecodeBytes(yys2035Slc, true, true) + yys2035 := string(yys2035Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2035 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + case "effect": + if r.TryDecodeAsNil() { + x.Effect = "" + } else { + x.Effect = TaintEffect(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2035) + } // end switch yys2035 + } // end for yyj2035 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Taint) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2039 int + var yyb2039 bool + var yyhl2039 bool = l >= 0 + yyj2039++ + if yyhl2039 { + yyb2039 = yyj2039 > l + } else { + yyb2039 = r.CheckBreak() + } + if yyb2039 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj2039++ + if yyhl2039 { + yyb2039 = yyj2039 > l + } else { + yyb2039 = r.CheckBreak() + } + if yyb2039 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + yyj2039++ + if yyhl2039 { + yyb2039 = yyj2039 > l + } else { + yyb2039 = r.CheckBreak() + } + if yyb2039 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Effect = "" + } else { + x.Effect = TaintEffect(r.DecodeString()) + } + for { + yyj2039++ + if yyhl2039 { + yyb2039 = yyj2039 > l + } else { + yyb2039 = r.CheckBreak() + } + if yyb2039 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2039-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x TaintEffect) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym2043 := z.EncBinary() + _ = yym2043 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *TaintEffect) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2044 := z.DecBinary() + _ = yym2044 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *Toleration) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2045 := z.EncBinary() + _ = yym2045 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2046 := !z.EncBinary() + yy2arr2046 := z.EncBasicHandle().StructToArray + var yyq2046 [4]bool + _, _, _ = yysep2046, yyq2046, yy2arr2046 + const yyr2046 bool = false + yyq2046[0] = x.Key != "" + yyq2046[1] = x.Operator != "" + yyq2046[2] = x.Value != "" + yyq2046[3] = x.Effect != "" + var yynn2046 int + if yyr2046 || yy2arr2046 { + r.EncodeArrayStart(4) + } else { + yynn2046 = 0 + for _, b := range yyq2046 { + if b { + yynn2046++ + } + } + r.EncodeMapStart(yynn2046) + yynn2046 = 0 + } + if yyr2046 || yy2arr2046 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2046[0] { + yym2048 := z.EncBinary() + _ = yym2048 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2046[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2049 := z.EncBinary() + _ = yym2049 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + } + if yyr2046 || yy2arr2046 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2046[1] { + x.Operator.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2046[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("operator")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Operator.CodecEncodeSelf(e) + } + } + if yyr2046 || yy2arr2046 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2046[2] { + yym2052 := z.EncBinary() + _ = yym2052 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2046[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2053 := z.EncBinary() + _ = yym2053 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + } + if yyr2046 || yy2arr2046 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2046[3] { + x.Effect.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2046[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("effect")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Effect.CodecEncodeSelf(e) + } + } + if yyr2046 || yy2arr2046 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Toleration) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2055 := z.DecBinary() + _ = yym2055 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2056 := r.ContainerType() + if yyct2056 == codecSelferValueTypeMap1234 { + yyl2056 := r.ReadMapStart() + if yyl2056 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2056, d) + } + } else if yyct2056 == codecSelferValueTypeArray1234 { + yyl2056 := r.ReadArrayStart() + if yyl2056 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2056, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Toleration) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2057Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2057Slc + var yyhl2057 bool = l >= 0 + for yyj2057 := 0; ; yyj2057++ { + if yyhl2057 { + if yyj2057 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2057Slc = r.DecodeBytes(yys2057Slc, true, true) + yys2057 := string(yys2057Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2057 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "operator": + if r.TryDecodeAsNil() { + x.Operator = "" + } else { + x.Operator = TolerationOperator(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + case "effect": + if r.TryDecodeAsNil() { + x.Effect = "" + } else { + x.Effect = TaintEffect(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2057) + } // end switch yys2057 + } // end for yyj2057 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Toleration) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2062 int + var yyb2062 bool + var yyhl2062 bool = l >= 0 + yyj2062++ + if yyhl2062 { + yyb2062 = yyj2062 > l + } else { + yyb2062 = r.CheckBreak() + } + if yyb2062 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj2062++ + if yyhl2062 { + yyb2062 = yyj2062 > l + } else { + yyb2062 = r.CheckBreak() + } + if yyb2062 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Operator = "" + } else { + x.Operator = TolerationOperator(r.DecodeString()) + } + yyj2062++ + if yyhl2062 { + yyb2062 = yyj2062 > l + } else { + yyb2062 = r.CheckBreak() + } + if yyb2062 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + yyj2062++ + if yyhl2062 { + yyb2062 = yyj2062 > l + } else { + yyb2062 = r.CheckBreak() + } + if yyb2062 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Effect = "" + } else { + x.Effect = TaintEffect(r.DecodeString()) + } + for { + yyj2062++ + if yyhl2062 { + yyb2062 = yyj2062 > l + } else { + yyb2062 = r.CheckBreak() + } + if yyb2062 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2062-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x TolerationOperator) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym2067 := z.EncBinary() + _ = yym2067 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *TolerationOperator) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2068 := z.DecBinary() + _ = yym2068 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *PodSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2069 := z.EncBinary() + _ = yym2069 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2070 := !z.EncBinary() + yy2arr2070 := z.EncBasicHandle().StructToArray + var yyq2070 [13]bool + _, _, _ = yysep2070, yyq2070, yy2arr2070 + const yyr2070 bool = false + yyq2070[2] = x.RestartPolicy != "" + yyq2070[3] = x.TerminationGracePeriodSeconds != nil + yyq2070[4] = x.ActiveDeadlineSeconds != nil + yyq2070[5] = x.DNSPolicy != "" + yyq2070[6] = len(x.NodeSelector) != 0 + yyq2070[8] = x.NodeName != "" + yyq2070[9] = x.SecurityContext != nil + yyq2070[10] = len(x.ImagePullSecrets) != 0 + yyq2070[11] = x.Hostname != "" + yyq2070[12] = x.Subdomain != "" + var yynn2070 int + if yyr2070 || yy2arr2070 { + r.EncodeArrayStart(13) + } else { + yynn2070 = 3 + for _, b := range yyq2070 { + if b { + yynn2070++ + } + } + r.EncodeMapStart(yynn2070) + yynn2070 = 0 + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Volumes == nil { + r.EncodeNil() + } else { + yym2072 := z.EncBinary() + _ = yym2072 + if false { + } else { + h.encSliceVolume(([]Volume)(x.Volumes), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Volumes == nil { + r.EncodeNil() + } else { + yym2073 := z.EncBinary() + _ = yym2073 + if false { + } else { + h.encSliceVolume(([]Volume)(x.Volumes), e) + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Containers == nil { + r.EncodeNil() + } else { + yym2075 := z.EncBinary() + _ = yym2075 + if false { + } else { + h.encSliceContainer(([]Container)(x.Containers), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containers")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Containers == nil { + r.EncodeNil() + } else { + yym2076 := z.EncBinary() + _ = yym2076 + if false { + } else { + h.encSliceContainer(([]Container)(x.Containers), e) + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[2] { + x.RestartPolicy.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2070[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("restartPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.RestartPolicy.CodecEncodeSelf(e) + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[3] { + if x.TerminationGracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy2079 := *x.TerminationGracePeriodSeconds + yym2080 := z.EncBinary() + _ = yym2080 + if false { + } else { + r.EncodeInt(int64(yy2079)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2070[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("terminationGracePeriodSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TerminationGracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy2081 := *x.TerminationGracePeriodSeconds + yym2082 := z.EncBinary() + _ = yym2082 + if false { + } else { + r.EncodeInt(int64(yy2081)) + } + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[4] { + if x.ActiveDeadlineSeconds == nil { + r.EncodeNil() + } else { + yy2084 := *x.ActiveDeadlineSeconds + yym2085 := z.EncBinary() + _ = yym2085 + if false { + } else { + r.EncodeInt(int64(yy2084)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2070[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("activeDeadlineSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ActiveDeadlineSeconds == nil { + r.EncodeNil() + } else { + yy2086 := *x.ActiveDeadlineSeconds + yym2087 := z.EncBinary() + _ = yym2087 + if false { + } else { + r.EncodeInt(int64(yy2086)) + } + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[5] { + x.DNSPolicy.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2070[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("dnsPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.DNSPolicy.CodecEncodeSelf(e) + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[6] { + if x.NodeSelector == nil { + r.EncodeNil() + } else { + yym2090 := z.EncBinary() + _ = yym2090 + if false { + } else { + z.F.EncMapStringStringV(x.NodeSelector, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2070[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NodeSelector == nil { + r.EncodeNil() + } else { + yym2091 := z.EncBinary() + _ = yym2091 + if false { + } else { + z.F.EncMapStringStringV(x.NodeSelector, false, e) + } + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2093 := z.EncBinary() + _ = yym2093 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ServiceAccountName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("serviceAccountName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2094 := z.EncBinary() + _ = yym2094 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ServiceAccountName)) + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[8] { + yym2096 := z.EncBinary() + _ = yym2096 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.NodeName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2070[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2097 := z.EncBinary() + _ = yym2097 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.NodeName)) + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[9] { + if x.SecurityContext == nil { + r.EncodeNil() + } else { + x.SecurityContext.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2070[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("securityContext")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecurityContext == nil { + r.EncodeNil() + } else { + x.SecurityContext.CodecEncodeSelf(e) + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[10] { + if x.ImagePullSecrets == nil { + r.EncodeNil() + } else { + yym2100 := z.EncBinary() + _ = yym2100 + if false { + } else { + h.encSliceLocalObjectReference(([]LocalObjectReference)(x.ImagePullSecrets), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2070[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("imagePullSecrets")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ImagePullSecrets == nil { + r.EncodeNil() + } else { + yym2101 := z.EncBinary() + _ = yym2101 + if false { + } else { + h.encSliceLocalObjectReference(([]LocalObjectReference)(x.ImagePullSecrets), e) + } + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[11] { + yym2103 := z.EncBinary() + _ = yym2103 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2070[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostname")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2104 := z.EncBinary() + _ = yym2104 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2070[12] { + yym2106 := z.EncBinary() + _ = yym2106 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Subdomain)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2070[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("subdomain")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2107 := z.EncBinary() + _ = yym2107 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Subdomain)) + } + } + } + if yyr2070 || yy2arr2070 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2108 := z.DecBinary() + _ = yym2108 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2109 := r.ContainerType() + if yyct2109 == codecSelferValueTypeMap1234 { + yyl2109 := r.ReadMapStart() + if yyl2109 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2109, d) + } + } else if yyct2109 == codecSelferValueTypeArray1234 { + yyl2109 := r.ReadArrayStart() + if yyl2109 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2109, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2110Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2110Slc + var yyhl2110 bool = l >= 0 + for yyj2110 := 0; ; yyj2110++ { + if yyhl2110 { + if yyj2110 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2110Slc = r.DecodeBytes(yys2110Slc, true, true) + yys2110 := string(yys2110Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2110 { + case "volumes": + if r.TryDecodeAsNil() { + x.Volumes = nil + } else { + yyv2111 := &x.Volumes + yym2112 := z.DecBinary() + _ = yym2112 + if false { + } else { + h.decSliceVolume((*[]Volume)(yyv2111), d) + } + } + case "containers": + if r.TryDecodeAsNil() { + x.Containers = nil + } else { + yyv2113 := &x.Containers + yym2114 := z.DecBinary() + _ = yym2114 + if false { + } else { + h.decSliceContainer((*[]Container)(yyv2113), d) + } + } + case "restartPolicy": + if r.TryDecodeAsNil() { + x.RestartPolicy = "" + } else { + x.RestartPolicy = RestartPolicy(r.DecodeString()) + } + case "terminationGracePeriodSeconds": + if r.TryDecodeAsNil() { + if x.TerminationGracePeriodSeconds != nil { + x.TerminationGracePeriodSeconds = nil + } + } else { + if x.TerminationGracePeriodSeconds == nil { + x.TerminationGracePeriodSeconds = new(int64) + } + yym2117 := z.DecBinary() + _ = yym2117 + if false { + } else { + *((*int64)(x.TerminationGracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + case "activeDeadlineSeconds": + if r.TryDecodeAsNil() { + if x.ActiveDeadlineSeconds != nil { + x.ActiveDeadlineSeconds = nil + } + } else { + if x.ActiveDeadlineSeconds == nil { + x.ActiveDeadlineSeconds = new(int64) + } + yym2119 := z.DecBinary() + _ = yym2119 + if false { + } else { + *((*int64)(x.ActiveDeadlineSeconds)) = int64(r.DecodeInt(64)) + } + } + case "dnsPolicy": + if r.TryDecodeAsNil() { + x.DNSPolicy = "" + } else { + x.DNSPolicy = DNSPolicy(r.DecodeString()) + } + case "nodeSelector": + if r.TryDecodeAsNil() { + x.NodeSelector = nil + } else { + yyv2121 := &x.NodeSelector + yym2122 := z.DecBinary() + _ = yym2122 + if false { + } else { + z.F.DecMapStringStringX(yyv2121, false, d) + } + } + case "serviceAccountName": + if r.TryDecodeAsNil() { + x.ServiceAccountName = "" + } else { + x.ServiceAccountName = string(r.DecodeString()) + } + case "nodeName": + if r.TryDecodeAsNil() { + x.NodeName = "" + } else { + x.NodeName = string(r.DecodeString()) + } + case "securityContext": + if r.TryDecodeAsNil() { + if x.SecurityContext != nil { + x.SecurityContext = nil + } + } else { + if x.SecurityContext == nil { + x.SecurityContext = new(PodSecurityContext) + } + x.SecurityContext.CodecDecodeSelf(d) + } + case "imagePullSecrets": + if r.TryDecodeAsNil() { + x.ImagePullSecrets = nil + } else { + yyv2126 := &x.ImagePullSecrets + yym2127 := z.DecBinary() + _ = yym2127 + if false { + } else { + h.decSliceLocalObjectReference((*[]LocalObjectReference)(yyv2126), d) + } + } + case "hostname": + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + case "subdomain": + if r.TryDecodeAsNil() { + x.Subdomain = "" + } else { + x.Subdomain = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2110) + } // end switch yys2110 + } // end for yyj2110 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2130 int + var yyb2130 bool + var yyhl2130 bool = l >= 0 + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Volumes = nil + } else { + yyv2131 := &x.Volumes + yym2132 := z.DecBinary() + _ = yym2132 + if false { + } else { + h.decSliceVolume((*[]Volume)(yyv2131), d) + } + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Containers = nil + } else { + yyv2133 := &x.Containers + yym2134 := z.DecBinary() + _ = yym2134 + if false { + } else { + h.decSliceContainer((*[]Container)(yyv2133), d) + } + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RestartPolicy = "" + } else { + x.RestartPolicy = RestartPolicy(r.DecodeString()) + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TerminationGracePeriodSeconds != nil { + x.TerminationGracePeriodSeconds = nil + } + } else { + if x.TerminationGracePeriodSeconds == nil { + x.TerminationGracePeriodSeconds = new(int64) + } + yym2137 := z.DecBinary() + _ = yym2137 + if false { + } else { + *((*int64)(x.TerminationGracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ActiveDeadlineSeconds != nil { + x.ActiveDeadlineSeconds = nil + } + } else { + if x.ActiveDeadlineSeconds == nil { + x.ActiveDeadlineSeconds = new(int64) + } + yym2139 := z.DecBinary() + _ = yym2139 + if false { + } else { + *((*int64)(x.ActiveDeadlineSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DNSPolicy = "" + } else { + x.DNSPolicy = DNSPolicy(r.DecodeString()) + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodeSelector = nil + } else { + yyv2141 := &x.NodeSelector + yym2142 := z.DecBinary() + _ = yym2142 + if false { + } else { + z.F.DecMapStringStringX(yyv2141, false, d) + } + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ServiceAccountName = "" + } else { + x.ServiceAccountName = string(r.DecodeString()) + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodeName = "" + } else { + x.NodeName = string(r.DecodeString()) + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecurityContext != nil { + x.SecurityContext = nil + } + } else { + if x.SecurityContext == nil { + x.SecurityContext = new(PodSecurityContext) + } + x.SecurityContext.CodecDecodeSelf(d) + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ImagePullSecrets = nil + } else { + yyv2146 := &x.ImagePullSecrets + yym2147 := z.DecBinary() + _ = yym2147 + if false { + } else { + h.decSliceLocalObjectReference((*[]LocalObjectReference)(yyv2146), d) + } + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Subdomain = "" + } else { + x.Subdomain = string(r.DecodeString()) + } + for { + yyj2130++ + if yyhl2130 { + yyb2130 = yyj2130 > l + } else { + yyb2130 = r.CheckBreak() + } + if yyb2130 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2130-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Sysctl) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2150 := z.EncBinary() + _ = yym2150 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2151 := !z.EncBinary() + yy2arr2151 := z.EncBasicHandle().StructToArray + var yyq2151 [2]bool + _, _, _ = yysep2151, yyq2151, yy2arr2151 + const yyr2151 bool = false + var yynn2151 int + if yyr2151 || yy2arr2151 { + r.EncodeArrayStart(2) + } else { + yynn2151 = 2 + for _, b := range yyq2151 { + if b { + yynn2151++ + } + } + r.EncodeMapStart(yynn2151) + yynn2151 = 0 + } + if yyr2151 || yy2arr2151 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2153 := z.EncBinary() + _ = yym2153 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2154 := z.EncBinary() + _ = yym2154 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr2151 || yy2arr2151 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2156 := z.EncBinary() + _ = yym2156 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2157 := z.EncBinary() + _ = yym2157 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + if yyr2151 || yy2arr2151 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Sysctl) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2158 := z.DecBinary() + _ = yym2158 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2159 := r.ContainerType() + if yyct2159 == codecSelferValueTypeMap1234 { + yyl2159 := r.ReadMapStart() + if yyl2159 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2159, d) + } + } else if yyct2159 == codecSelferValueTypeArray1234 { + yyl2159 := r.ReadArrayStart() + if yyl2159 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2159, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Sysctl) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2160Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2160Slc + var yyhl2160 bool = l >= 0 + for yyj2160 := 0; ; yyj2160++ { + if yyhl2160 { + if yyj2160 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2160Slc = r.DecodeBytes(yys2160Slc, true, true) + yys2160 := string(yys2160Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2160 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2160) + } // end switch yys2160 + } // end for yyj2160 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Sysctl) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2163 int + var yyb2163 bool + var yyhl2163 bool = l >= 0 + yyj2163++ + if yyhl2163 { + yyb2163 = yyj2163 > l + } else { + yyb2163 = r.CheckBreak() + } + if yyb2163 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj2163++ + if yyhl2163 { + yyb2163 = yyj2163 > l + } else { + yyb2163 = r.CheckBreak() + } + if yyb2163 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + for { + yyj2163++ + if yyhl2163 { + yyb2163 = yyj2163 > l + } else { + yyb2163 = r.CheckBreak() + } + if yyb2163 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2163-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2166 := z.EncBinary() + _ = yym2166 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2167 := !z.EncBinary() + yy2arr2167 := z.EncBasicHandle().StructToArray + var yyq2167 [8]bool + _, _, _ = yysep2167, yyq2167, yy2arr2167 + const yyr2167 bool = false + yyq2167[0] = x.HostNetwork != false + yyq2167[1] = x.HostPID != false + yyq2167[2] = x.HostIPC != false + yyq2167[3] = x.SELinuxOptions != nil + yyq2167[4] = x.RunAsUser != nil + yyq2167[5] = x.RunAsNonRoot != nil + yyq2167[6] = len(x.SupplementalGroups) != 0 + yyq2167[7] = x.FSGroup != nil + var yynn2167 int + if yyr2167 || yy2arr2167 { + r.EncodeArrayStart(8) + } else { + yynn2167 = 0 + for _, b := range yyq2167 { + if b { + yynn2167++ + } + } + r.EncodeMapStart(yynn2167) + yynn2167 = 0 + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2167[0] { + yym2169 := z.EncBinary() + _ = yym2169 + if false { + } else { + r.EncodeBool(bool(x.HostNetwork)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq2167[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostNetwork")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2170 := z.EncBinary() + _ = yym2170 + if false { + } else { + r.EncodeBool(bool(x.HostNetwork)) + } + } + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2167[1] { + yym2172 := z.EncBinary() + _ = yym2172 + if false { + } else { + r.EncodeBool(bool(x.HostPID)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq2167[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2173 := z.EncBinary() + _ = yym2173 + if false { + } else { + r.EncodeBool(bool(x.HostPID)) + } + } + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2167[2] { + yym2175 := z.EncBinary() + _ = yym2175 + if false { + } else { + r.EncodeBool(bool(x.HostIPC)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq2167[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostIPC")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2176 := z.EncBinary() + _ = yym2176 + if false { + } else { + r.EncodeBool(bool(x.HostIPC)) + } + } + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2167[3] { + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2167[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("seLinuxOptions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2167[4] { + if x.RunAsUser == nil { + r.EncodeNil() + } else { + yy2179 := *x.RunAsUser + yym2180 := z.EncBinary() + _ = yym2180 + if false { + } else { + r.EncodeInt(int64(yy2179)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2167[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsUser")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RunAsUser == nil { + r.EncodeNil() + } else { + yy2181 := *x.RunAsUser + yym2182 := z.EncBinary() + _ = yym2182 + if false { + } else { + r.EncodeInt(int64(yy2181)) + } + } + } + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2167[5] { + if x.RunAsNonRoot == nil { + r.EncodeNil() + } else { + yy2184 := *x.RunAsNonRoot + yym2185 := z.EncBinary() + _ = yym2185 + if false { + } else { + r.EncodeBool(bool(yy2184)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2167[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsNonRoot")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RunAsNonRoot == nil { + r.EncodeNil() + } else { + yy2186 := *x.RunAsNonRoot + yym2187 := z.EncBinary() + _ = yym2187 + if false { + } else { + r.EncodeBool(bool(yy2186)) + } + } + } + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2167[6] { + if x.SupplementalGroups == nil { + r.EncodeNil() + } else { + yym2189 := z.EncBinary() + _ = yym2189 + if false { + } else { + z.F.EncSliceInt64V(x.SupplementalGroups, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2167[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("supplementalGroups")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SupplementalGroups == nil { + r.EncodeNil() + } else { + yym2190 := z.EncBinary() + _ = yym2190 + if false { + } else { + z.F.EncSliceInt64V(x.SupplementalGroups, false, e) + } + } + } + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2167[7] { + if x.FSGroup == nil { + r.EncodeNil() + } else { + yy2192 := *x.FSGroup + yym2193 := z.EncBinary() + _ = yym2193 + if false { + } else { + r.EncodeInt(int64(yy2192)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2167[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsGroup")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FSGroup == nil { + r.EncodeNil() + } else { + yy2194 := *x.FSGroup + yym2195 := z.EncBinary() + _ = yym2195 + if false { + } else { + r.EncodeInt(int64(yy2194)) + } + } + } + } + if yyr2167 || yy2arr2167 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSecurityContext) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2196 := z.DecBinary() + _ = yym2196 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2197 := r.ContainerType() + if yyct2197 == codecSelferValueTypeMap1234 { + yyl2197 := r.ReadMapStart() + if yyl2197 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2197, d) + } + } else if yyct2197 == codecSelferValueTypeArray1234 { + yyl2197 := r.ReadArrayStart() + if yyl2197 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2197, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2198Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2198Slc + var yyhl2198 bool = l >= 0 + for yyj2198 := 0; ; yyj2198++ { + if yyhl2198 { + if yyj2198 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2198Slc = r.DecodeBytes(yys2198Slc, true, true) + yys2198 := string(yys2198Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2198 { + case "hostNetwork": + if r.TryDecodeAsNil() { + x.HostNetwork = false + } else { + x.HostNetwork = bool(r.DecodeBool()) + } + case "hostPID": + if r.TryDecodeAsNil() { + x.HostPID = false + } else { + x.HostPID = bool(r.DecodeBool()) + } + case "hostIPC": + if r.TryDecodeAsNil() { + x.HostIPC = false + } else { + x.HostIPC = bool(r.DecodeBool()) + } + case "seLinuxOptions": + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + case "runAsUser": + if r.TryDecodeAsNil() { + if x.RunAsUser != nil { + x.RunAsUser = nil + } + } else { + if x.RunAsUser == nil { + x.RunAsUser = new(int64) + } + yym2204 := z.DecBinary() + _ = yym2204 + if false { + } else { + *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) + } + } + case "runAsNonRoot": + if r.TryDecodeAsNil() { + if x.RunAsNonRoot != nil { + x.RunAsNonRoot = nil + } + } else { + if x.RunAsNonRoot == nil { + x.RunAsNonRoot = new(bool) + } + yym2206 := z.DecBinary() + _ = yym2206 + if false { + } else { + *((*bool)(x.RunAsNonRoot)) = r.DecodeBool() + } + } + case "supplementalGroups": + if r.TryDecodeAsNil() { + x.SupplementalGroups = nil + } else { + yyv2207 := &x.SupplementalGroups + yym2208 := z.DecBinary() + _ = yym2208 + if false { + } else { + z.F.DecSliceInt64X(yyv2207, false, d) + } + } + case "fsGroup": + if r.TryDecodeAsNil() { + if x.FSGroup != nil { + x.FSGroup = nil + } + } else { + if x.FSGroup == nil { + x.FSGroup = new(int64) + } + yym2210 := z.DecBinary() + _ = yym2210 + if false { + } else { + *((*int64)(x.FSGroup)) = int64(r.DecodeInt(64)) + } + } + default: + z.DecStructFieldNotFound(-1, yys2198) + } // end switch yys2198 + } // end for yyj2198 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2211 int + var yyb2211 bool + var yyhl2211 bool = l >= 0 + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostNetwork = false + } else { + x.HostNetwork = bool(r.DecodeBool()) + } + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostPID = false + } else { + x.HostPID = bool(r.DecodeBool()) + } + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostIPC = false + } else { + x.HostIPC = bool(r.DecodeBool()) + } + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RunAsUser != nil { + x.RunAsUser = nil + } + } else { + if x.RunAsUser == nil { + x.RunAsUser = new(int64) + } + yym2217 := z.DecBinary() + _ = yym2217 + if false { + } else { + *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) + } + } + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RunAsNonRoot != nil { + x.RunAsNonRoot = nil + } + } else { + if x.RunAsNonRoot == nil { + x.RunAsNonRoot = new(bool) + } + yym2219 := z.DecBinary() + _ = yym2219 + if false { + } else { + *((*bool)(x.RunAsNonRoot)) = r.DecodeBool() + } + } + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SupplementalGroups = nil + } else { + yyv2220 := &x.SupplementalGroups + yym2221 := z.DecBinary() + _ = yym2221 + if false { + } else { + z.F.DecSliceInt64X(yyv2220, false, d) + } + } + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FSGroup != nil { + x.FSGroup = nil + } + } else { + if x.FSGroup == nil { + x.FSGroup = new(int64) + } + yym2223 := z.DecBinary() + _ = yym2223 + if false { + } else { + *((*int64)(x.FSGroup)) = int64(r.DecodeInt(64)) + } + } + for { + yyj2211++ + if yyhl2211 { + yyb2211 = yyj2211 > l + } else { + yyb2211 = r.CheckBreak() + } + if yyb2211 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2211-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2224 := z.EncBinary() + _ = yym2224 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2225 := !z.EncBinary() + yy2arr2225 := z.EncBasicHandle().StructToArray + var yyq2225 [8]bool + _, _, _ = yysep2225, yyq2225, yy2arr2225 + const yyr2225 bool = false + yyq2225[0] = x.Phase != "" + yyq2225[1] = len(x.Conditions) != 0 + yyq2225[2] = x.Message != "" + yyq2225[3] = x.Reason != "" + yyq2225[4] = x.HostIP != "" + yyq2225[5] = x.PodIP != "" + yyq2225[6] = x.StartTime != nil + yyq2225[7] = len(x.ContainerStatuses) != 0 + var yynn2225 int + if yyr2225 || yy2arr2225 { + r.EncodeArrayStart(8) + } else { + yynn2225 = 0 + for _, b := range yyq2225 { + if b { + yynn2225++ + } + } + r.EncodeMapStart(yynn2225) + yynn2225 = 0 + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2225[0] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2225[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2225[1] { + if x.Conditions == nil { + r.EncodeNil() + } else { + yym2228 := z.EncBinary() + _ = yym2228 + if false { + } else { + h.encSlicePodCondition(([]PodCondition)(x.Conditions), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2225[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("conditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Conditions == nil { + r.EncodeNil() + } else { + yym2229 := z.EncBinary() + _ = yym2229 + if false { + } else { + h.encSlicePodCondition(([]PodCondition)(x.Conditions), e) + } + } + } + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2225[2] { + yym2231 := z.EncBinary() + _ = yym2231 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2225[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2232 := z.EncBinary() + _ = yym2232 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2225[3] { + yym2234 := z.EncBinary() + _ = yym2234 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2225[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2235 := z.EncBinary() + _ = yym2235 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2225[4] { + yym2237 := z.EncBinary() + _ = yym2237 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.HostIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2225[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2238 := z.EncBinary() + _ = yym2238 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.HostIP)) + } + } + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2225[5] { + yym2240 := z.EncBinary() + _ = yym2240 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PodIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2225[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2241 := z.EncBinary() + _ = yym2241 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PodIP)) + } + } + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2225[6] { + if x.StartTime == nil { + r.EncodeNil() + } else { + yym2243 := z.EncBinary() + _ = yym2243 + if false { + } else if z.HasExtensions() && z.EncExt(x.StartTime) { + } else if yym2243 { + z.EncBinaryMarshal(x.StartTime) + } else if !yym2243 && z.IsJSONHandle() { + z.EncJSONMarshal(x.StartTime) + } else { + z.EncFallback(x.StartTime) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2225[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("startTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.StartTime == nil { + r.EncodeNil() + } else { + yym2244 := z.EncBinary() + _ = yym2244 + if false { + } else if z.HasExtensions() && z.EncExt(x.StartTime) { + } else if yym2244 { + z.EncBinaryMarshal(x.StartTime) + } else if !yym2244 && z.IsJSONHandle() { + z.EncJSONMarshal(x.StartTime) + } else { + z.EncFallback(x.StartTime) + } + } + } + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2225[7] { + if x.ContainerStatuses == nil { + r.EncodeNil() + } else { + yym2246 := z.EncBinary() + _ = yym2246 + if false { + } else { + h.encSliceContainerStatus(([]ContainerStatus)(x.ContainerStatuses), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2225[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerStatuses")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ContainerStatuses == nil { + r.EncodeNil() + } else { + yym2247 := z.EncBinary() + _ = yym2247 + if false { + } else { + h.encSliceContainerStatus(([]ContainerStatus)(x.ContainerStatuses), e) + } + } + } + } + if yyr2225 || yy2arr2225 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2248 := z.DecBinary() + _ = yym2248 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2249 := r.ContainerType() + if yyct2249 == codecSelferValueTypeMap1234 { + yyl2249 := r.ReadMapStart() + if yyl2249 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2249, d) + } + } else if yyct2249 == codecSelferValueTypeArray1234 { + yyl2249 := r.ReadArrayStart() + if yyl2249 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2249, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2250Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2250Slc + var yyhl2250 bool = l >= 0 + for yyj2250 := 0; ; yyj2250++ { + if yyhl2250 { + if yyj2250 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2250Slc = r.DecodeBytes(yys2250Slc, true, true) + yys2250 := string(yys2250Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2250 { + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PodPhase(r.DecodeString()) + } + case "conditions": + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv2252 := &x.Conditions + yym2253 := z.DecBinary() + _ = yym2253 + if false { + } else { + h.decSlicePodCondition((*[]PodCondition)(yyv2252), d) + } + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "hostIP": + if r.TryDecodeAsNil() { + x.HostIP = "" + } else { + x.HostIP = string(r.DecodeString()) + } + case "podIP": + if r.TryDecodeAsNil() { + x.PodIP = "" + } else { + x.PodIP = string(r.DecodeString()) + } + case "startTime": + if r.TryDecodeAsNil() { + if x.StartTime != nil { + x.StartTime = nil + } + } else { + if x.StartTime == nil { + x.StartTime = new(pkg2_unversioned.Time) + } + yym2259 := z.DecBinary() + _ = yym2259 + if false { + } else if z.HasExtensions() && z.DecExt(x.StartTime) { + } else if yym2259 { + z.DecBinaryUnmarshal(x.StartTime) + } else if !yym2259 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.StartTime) + } else { + z.DecFallback(x.StartTime, false) + } + } + case "containerStatuses": + if r.TryDecodeAsNil() { + x.ContainerStatuses = nil + } else { + yyv2260 := &x.ContainerStatuses + yym2261 := z.DecBinary() + _ = yym2261 + if false { + } else { + h.decSliceContainerStatus((*[]ContainerStatus)(yyv2260), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2250) + } // end switch yys2250 + } // end for yyj2250 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2262 int + var yyb2262 bool + var yyhl2262 bool = l >= 0 + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PodPhase(r.DecodeString()) + } + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv2264 := &x.Conditions + yym2265 := z.DecBinary() + _ = yym2265 + if false { + } else { + h.decSlicePodCondition((*[]PodCondition)(yyv2264), d) + } + } + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostIP = "" + } else { + x.HostIP = string(r.DecodeString()) + } + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodIP = "" + } else { + x.PodIP = string(r.DecodeString()) + } + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.StartTime != nil { + x.StartTime = nil + } + } else { + if x.StartTime == nil { + x.StartTime = new(pkg2_unversioned.Time) + } + yym2271 := z.DecBinary() + _ = yym2271 + if false { + } else if z.HasExtensions() && z.DecExt(x.StartTime) { + } else if yym2271 { + z.DecBinaryUnmarshal(x.StartTime) + } else if !yym2271 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.StartTime) + } else { + z.DecFallback(x.StartTime, false) + } + } + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerStatuses = nil + } else { + yyv2272 := &x.ContainerStatuses + yym2273 := z.DecBinary() + _ = yym2273 + if false { + } else { + h.decSliceContainerStatus((*[]ContainerStatus)(yyv2272), d) + } + } + for { + yyj2262++ + if yyhl2262 { + yyb2262 = yyj2262 > l + } else { + yyb2262 = r.CheckBreak() + } + if yyb2262 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2262-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodStatusResult) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2274 := z.EncBinary() + _ = yym2274 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2275 := !z.EncBinary() + yy2arr2275 := z.EncBasicHandle().StructToArray + var yyq2275 [4]bool + _, _, _ = yysep2275, yyq2275, yy2arr2275 + const yyr2275 bool = false + yyq2275[0] = x.Kind != "" + yyq2275[1] = x.APIVersion != "" + yyq2275[2] = true + yyq2275[3] = true + var yynn2275 int + if yyr2275 || yy2arr2275 { + r.EncodeArrayStart(4) + } else { + yynn2275 = 0 + for _, b := range yyq2275 { + if b { + yynn2275++ + } + } + r.EncodeMapStart(yynn2275) + yynn2275 = 0 + } + if yyr2275 || yy2arr2275 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2275[0] { + yym2277 := z.EncBinary() + _ = yym2277 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2275[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2278 := z.EncBinary() + _ = yym2278 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2275 || yy2arr2275 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2275[1] { + yym2280 := z.EncBinary() + _ = yym2280 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2275[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2281 := z.EncBinary() + _ = yym2281 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2275 || yy2arr2275 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2275[2] { + yy2283 := &x.ObjectMeta + yy2283.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2275[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2284 := &x.ObjectMeta + yy2284.CodecEncodeSelf(e) + } + } + if yyr2275 || yy2arr2275 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2275[3] { + yy2286 := &x.Status + yy2286.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2275[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2287 := &x.Status + yy2287.CodecEncodeSelf(e) + } + } + if yyr2275 || yy2arr2275 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodStatusResult) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2288 := z.DecBinary() + _ = yym2288 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2289 := r.ContainerType() + if yyct2289 == codecSelferValueTypeMap1234 { + yyl2289 := r.ReadMapStart() + if yyl2289 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2289, d) + } + } else if yyct2289 == codecSelferValueTypeArray1234 { + yyl2289 := r.ReadArrayStart() + if yyl2289 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2289, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodStatusResult) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2290Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2290Slc + var yyhl2290 bool = l >= 0 + for yyj2290 := 0; ; yyj2290++ { + if yyhl2290 { + if yyj2290 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2290Slc = r.DecodeBytes(yys2290Slc, true, true) + yys2290 := string(yys2290Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2290 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2293 := &x.ObjectMeta + yyv2293.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = PodStatus{} + } else { + yyv2294 := &x.Status + yyv2294.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2290) + } // end switch yys2290 + } // end for yyj2290 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodStatusResult) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2295 int + var yyb2295 bool + var yyhl2295 bool = l >= 0 + yyj2295++ + if yyhl2295 { + yyb2295 = yyj2295 > l + } else { + yyb2295 = r.CheckBreak() + } + if yyb2295 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2295++ + if yyhl2295 { + yyb2295 = yyj2295 > l + } else { + yyb2295 = r.CheckBreak() + } + if yyb2295 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2295++ + if yyhl2295 { + yyb2295 = yyj2295 > l + } else { + yyb2295 = r.CheckBreak() + } + if yyb2295 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2298 := &x.ObjectMeta + yyv2298.CodecDecodeSelf(d) + } + yyj2295++ + if yyhl2295 { + yyb2295 = yyj2295 > l + } else { + yyb2295 = r.CheckBreak() + } + if yyb2295 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = PodStatus{} + } else { + yyv2299 := &x.Status + yyv2299.CodecDecodeSelf(d) + } + for { + yyj2295++ + if yyhl2295 { + yyb2295 = yyj2295 > l + } else { + yyb2295 = r.CheckBreak() + } + if yyb2295 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2295-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Pod) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2300 := z.EncBinary() + _ = yym2300 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2301 := !z.EncBinary() + yy2arr2301 := z.EncBasicHandle().StructToArray + var yyq2301 [5]bool + _, _, _ = yysep2301, yyq2301, yy2arr2301 + const yyr2301 bool = false + yyq2301[0] = x.Kind != "" + yyq2301[1] = x.APIVersion != "" + yyq2301[2] = true + yyq2301[3] = true + yyq2301[4] = true + var yynn2301 int + if yyr2301 || yy2arr2301 { + r.EncodeArrayStart(5) + } else { + yynn2301 = 0 + for _, b := range yyq2301 { + if b { + yynn2301++ + } + } + r.EncodeMapStart(yynn2301) + yynn2301 = 0 + } + if yyr2301 || yy2arr2301 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2301[0] { + yym2303 := z.EncBinary() + _ = yym2303 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2301[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2304 := z.EncBinary() + _ = yym2304 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2301 || yy2arr2301 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2301[1] { + yym2306 := z.EncBinary() + _ = yym2306 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2301[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2307 := z.EncBinary() + _ = yym2307 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2301 || yy2arr2301 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2301[2] { + yy2309 := &x.ObjectMeta + yy2309.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2301[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2310 := &x.ObjectMeta + yy2310.CodecEncodeSelf(e) + } + } + if yyr2301 || yy2arr2301 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2301[3] { + yy2312 := &x.Spec + yy2312.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2301[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2313 := &x.Spec + yy2313.CodecEncodeSelf(e) + } + } + if yyr2301 || yy2arr2301 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2301[4] { + yy2315 := &x.Status + yy2315.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2301[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2316 := &x.Status + yy2316.CodecEncodeSelf(e) + } + } + if yyr2301 || yy2arr2301 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Pod) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2317 := z.DecBinary() + _ = yym2317 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2318 := r.ContainerType() + if yyct2318 == codecSelferValueTypeMap1234 { + yyl2318 := r.ReadMapStart() + if yyl2318 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2318, d) + } + } else if yyct2318 == codecSelferValueTypeArray1234 { + yyl2318 := r.ReadArrayStart() + if yyl2318 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2318, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Pod) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2319Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2319Slc + var yyhl2319 bool = l >= 0 + for yyj2319 := 0; ; yyj2319++ { + if yyhl2319 { + if yyj2319 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2319Slc = r.DecodeBytes(yys2319Slc, true, true) + yys2319 := string(yys2319Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2319 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2322 := &x.ObjectMeta + yyv2322.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PodSpec{} + } else { + yyv2323 := &x.Spec + yyv2323.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = PodStatus{} + } else { + yyv2324 := &x.Status + yyv2324.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2319) + } // end switch yys2319 + } // end for yyj2319 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Pod) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2325 int + var yyb2325 bool + var yyhl2325 bool = l >= 0 + yyj2325++ + if yyhl2325 { + yyb2325 = yyj2325 > l + } else { + yyb2325 = r.CheckBreak() + } + if yyb2325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2325++ + if yyhl2325 { + yyb2325 = yyj2325 > l + } else { + yyb2325 = r.CheckBreak() + } + if yyb2325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2325++ + if yyhl2325 { + yyb2325 = yyj2325 > l + } else { + yyb2325 = r.CheckBreak() + } + if yyb2325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2328 := &x.ObjectMeta + yyv2328.CodecDecodeSelf(d) + } + yyj2325++ + if yyhl2325 { + yyb2325 = yyj2325 > l + } else { + yyb2325 = r.CheckBreak() + } + if yyb2325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PodSpec{} + } else { + yyv2329 := &x.Spec + yyv2329.CodecDecodeSelf(d) + } + yyj2325++ + if yyhl2325 { + yyb2325 = yyj2325 > l + } else { + yyb2325 = r.CheckBreak() + } + if yyb2325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = PodStatus{} + } else { + yyv2330 := &x.Status + yyv2330.CodecDecodeSelf(d) + } + for { + yyj2325++ + if yyhl2325 { + yyb2325 = yyj2325 > l + } else { + yyb2325 = r.CheckBreak() + } + if yyb2325 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2325-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodTemplateSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2331 := z.EncBinary() + _ = yym2331 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2332 := !z.EncBinary() + yy2arr2332 := z.EncBasicHandle().StructToArray + var yyq2332 [2]bool + _, _, _ = yysep2332, yyq2332, yy2arr2332 + const yyr2332 bool = false + yyq2332[0] = true + yyq2332[1] = true + var yynn2332 int + if yyr2332 || yy2arr2332 { + r.EncodeArrayStart(2) + } else { + yynn2332 = 0 + for _, b := range yyq2332 { + if b { + yynn2332++ + } + } + r.EncodeMapStart(yynn2332) + yynn2332 = 0 + } + if yyr2332 || yy2arr2332 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2332[0] { + yy2334 := &x.ObjectMeta + yy2334.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2332[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2335 := &x.ObjectMeta + yy2335.CodecEncodeSelf(e) + } + } + if yyr2332 || yy2arr2332 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2332[1] { + yy2337 := &x.Spec + yy2337.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2332[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2338 := &x.Spec + yy2338.CodecEncodeSelf(e) + } + } + if yyr2332 || yy2arr2332 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodTemplateSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2339 := z.DecBinary() + _ = yym2339 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2340 := r.ContainerType() + if yyct2340 == codecSelferValueTypeMap1234 { + yyl2340 := r.ReadMapStart() + if yyl2340 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2340, d) + } + } else if yyct2340 == codecSelferValueTypeArray1234 { + yyl2340 := r.ReadArrayStart() + if yyl2340 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2340, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodTemplateSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2341Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2341Slc + var yyhl2341 bool = l >= 0 + for yyj2341 := 0; ; yyj2341++ { + if yyhl2341 { + if yyj2341 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2341Slc = r.DecodeBytes(yys2341Slc, true, true) + yys2341 := string(yys2341Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2341 { + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2342 := &x.ObjectMeta + yyv2342.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PodSpec{} + } else { + yyv2343 := &x.Spec + yyv2343.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2341) + } // end switch yys2341 + } // end for yyj2341 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodTemplateSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2344 int + var yyb2344 bool + var yyhl2344 bool = l >= 0 + yyj2344++ + if yyhl2344 { + yyb2344 = yyj2344 > l + } else { + yyb2344 = r.CheckBreak() + } + if yyb2344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2345 := &x.ObjectMeta + yyv2345.CodecDecodeSelf(d) + } + yyj2344++ + if yyhl2344 { + yyb2344 = yyj2344 > l + } else { + yyb2344 = r.CheckBreak() + } + if yyb2344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PodSpec{} + } else { + yyv2346 := &x.Spec + yyv2346.CodecDecodeSelf(d) + } + for { + yyj2344++ + if yyhl2344 { + yyb2344 = yyj2344 > l + } else { + yyb2344 = r.CheckBreak() + } + if yyb2344 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2344-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodTemplate) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2347 := z.EncBinary() + _ = yym2347 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2348 := !z.EncBinary() + yy2arr2348 := z.EncBasicHandle().StructToArray + var yyq2348 [4]bool + _, _, _ = yysep2348, yyq2348, yy2arr2348 + const yyr2348 bool = false + yyq2348[0] = x.Kind != "" + yyq2348[1] = x.APIVersion != "" + yyq2348[2] = true + yyq2348[3] = true + var yynn2348 int + if yyr2348 || yy2arr2348 { + r.EncodeArrayStart(4) + } else { + yynn2348 = 0 + for _, b := range yyq2348 { + if b { + yynn2348++ + } + } + r.EncodeMapStart(yynn2348) + yynn2348 = 0 + } + if yyr2348 || yy2arr2348 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2348[0] { + yym2350 := z.EncBinary() + _ = yym2350 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2348[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2351 := z.EncBinary() + _ = yym2351 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2348 || yy2arr2348 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2348[1] { + yym2353 := z.EncBinary() + _ = yym2353 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2348[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2354 := z.EncBinary() + _ = yym2354 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2348 || yy2arr2348 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2348[2] { + yy2356 := &x.ObjectMeta + yy2356.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2348[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2357 := &x.ObjectMeta + yy2357.CodecEncodeSelf(e) + } + } + if yyr2348 || yy2arr2348 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2348[3] { + yy2359 := &x.Template + yy2359.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2348[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2360 := &x.Template + yy2360.CodecEncodeSelf(e) + } + } + if yyr2348 || yy2arr2348 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodTemplate) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2361 := z.DecBinary() + _ = yym2361 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2362 := r.ContainerType() + if yyct2362 == codecSelferValueTypeMap1234 { + yyl2362 := r.ReadMapStart() + if yyl2362 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2362, d) + } + } else if yyct2362 == codecSelferValueTypeArray1234 { + yyl2362 := r.ReadArrayStart() + if yyl2362 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2362, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodTemplate) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2363Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2363Slc + var yyhl2363 bool = l >= 0 + for yyj2363 := 0; ; yyj2363++ { + if yyhl2363 { + if yyj2363 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2363Slc = r.DecodeBytes(yys2363Slc, true, true) + yys2363 := string(yys2363Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2363 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2366 := &x.ObjectMeta + yyv2366.CodecDecodeSelf(d) + } + case "template": + if r.TryDecodeAsNil() { + x.Template = PodTemplateSpec{} + } else { + yyv2367 := &x.Template + yyv2367.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2363) + } // end switch yys2363 + } // end for yyj2363 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodTemplate) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2368 int + var yyb2368 bool + var yyhl2368 bool = l >= 0 + yyj2368++ + if yyhl2368 { + yyb2368 = yyj2368 > l + } else { + yyb2368 = r.CheckBreak() + } + if yyb2368 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2368++ + if yyhl2368 { + yyb2368 = yyj2368 > l + } else { + yyb2368 = r.CheckBreak() + } + if yyb2368 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2368++ + if yyhl2368 { + yyb2368 = yyj2368 > l + } else { + yyb2368 = r.CheckBreak() + } + if yyb2368 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2371 := &x.ObjectMeta + yyv2371.CodecDecodeSelf(d) + } + yyj2368++ + if yyhl2368 { + yyb2368 = yyj2368 > l + } else { + yyb2368 = r.CheckBreak() + } + if yyb2368 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Template = PodTemplateSpec{} + } else { + yyv2372 := &x.Template + yyv2372.CodecDecodeSelf(d) + } + for { + yyj2368++ + if yyhl2368 { + yyb2368 = yyj2368 > l + } else { + yyb2368 = r.CheckBreak() + } + if yyb2368 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2368-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodTemplateList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2373 := z.EncBinary() + _ = yym2373 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2374 := !z.EncBinary() + yy2arr2374 := z.EncBasicHandle().StructToArray + var yyq2374 [4]bool + _, _, _ = yysep2374, yyq2374, yy2arr2374 + const yyr2374 bool = false + yyq2374[0] = x.Kind != "" + yyq2374[1] = x.APIVersion != "" + yyq2374[2] = true + var yynn2374 int + if yyr2374 || yy2arr2374 { + r.EncodeArrayStart(4) + } else { + yynn2374 = 1 + for _, b := range yyq2374 { + if b { + yynn2374++ + } + } + r.EncodeMapStart(yynn2374) + yynn2374 = 0 + } + if yyr2374 || yy2arr2374 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2374[0] { + yym2376 := z.EncBinary() + _ = yym2376 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2374[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2377 := z.EncBinary() + _ = yym2377 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2374 || yy2arr2374 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2374[1] { + yym2379 := z.EncBinary() + _ = yym2379 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2374[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2380 := z.EncBinary() + _ = yym2380 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2374 || yy2arr2374 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2374[2] { + yy2382 := &x.ListMeta + yym2383 := z.EncBinary() + _ = yym2383 + if false { + } else if z.HasExtensions() && z.EncExt(yy2382) { + } else { + z.EncFallback(yy2382) + } + } else { + r.EncodeNil() + } + } else { + if yyq2374[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2384 := &x.ListMeta + yym2385 := z.EncBinary() + _ = yym2385 + if false { + } else if z.HasExtensions() && z.EncExt(yy2384) { + } else { + z.EncFallback(yy2384) + } + } + } + if yyr2374 || yy2arr2374 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2387 := z.EncBinary() + _ = yym2387 + if false { + } else { + h.encSlicePodTemplate(([]PodTemplate)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2388 := z.EncBinary() + _ = yym2388 + if false { + } else { + h.encSlicePodTemplate(([]PodTemplate)(x.Items), e) + } + } + } + if yyr2374 || yy2arr2374 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodTemplateList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2389 := z.DecBinary() + _ = yym2389 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2390 := r.ContainerType() + if yyct2390 == codecSelferValueTypeMap1234 { + yyl2390 := r.ReadMapStart() + if yyl2390 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2390, d) + } + } else if yyct2390 == codecSelferValueTypeArray1234 { + yyl2390 := r.ReadArrayStart() + if yyl2390 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2390, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodTemplateList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2391Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2391Slc + var yyhl2391 bool = l >= 0 + for yyj2391 := 0; ; yyj2391++ { + if yyhl2391 { + if yyj2391 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2391Slc = r.DecodeBytes(yys2391Slc, true, true) + yys2391 := string(yys2391Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2391 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2394 := &x.ListMeta + yym2395 := z.DecBinary() + _ = yym2395 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2394) { + } else { + z.DecFallback(yyv2394, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2396 := &x.Items + yym2397 := z.DecBinary() + _ = yym2397 + if false { + } else { + h.decSlicePodTemplate((*[]PodTemplate)(yyv2396), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2391) + } // end switch yys2391 + } // end for yyj2391 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodTemplateList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2398 int + var yyb2398 bool + var yyhl2398 bool = l >= 0 + yyj2398++ + if yyhl2398 { + yyb2398 = yyj2398 > l + } else { + yyb2398 = r.CheckBreak() + } + if yyb2398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2398++ + if yyhl2398 { + yyb2398 = yyj2398 > l + } else { + yyb2398 = r.CheckBreak() + } + if yyb2398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2398++ + if yyhl2398 { + yyb2398 = yyj2398 > l + } else { + yyb2398 = r.CheckBreak() + } + if yyb2398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2401 := &x.ListMeta + yym2402 := z.DecBinary() + _ = yym2402 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2401) { + } else { + z.DecFallback(yyv2401, false) + } + } + yyj2398++ + if yyhl2398 { + yyb2398 = yyj2398 > l + } else { + yyb2398 = r.CheckBreak() + } + if yyb2398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2403 := &x.Items + yym2404 := z.DecBinary() + _ = yym2404 + if false { + } else { + h.decSlicePodTemplate((*[]PodTemplate)(yyv2403), d) + } + } + for { + yyj2398++ + if yyhl2398 { + yyb2398 = yyj2398 > l + } else { + yyb2398 = r.CheckBreak() + } + if yyb2398 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2398-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationControllerSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2405 := z.EncBinary() + _ = yym2405 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2406 := !z.EncBinary() + yy2arr2406 := z.EncBasicHandle().StructToArray + var yyq2406 [3]bool + _, _, _ = yysep2406, yyq2406, yy2arr2406 + const yyr2406 bool = false + yyq2406[2] = x.Template != nil + var yynn2406 int + if yyr2406 || yy2arr2406 { + r.EncodeArrayStart(3) + } else { + yynn2406 = 2 + for _, b := range yyq2406 { + if b { + yynn2406++ + } + } + r.EncodeMapStart(yynn2406) + yynn2406 = 0 + } + if yyr2406 || yy2arr2406 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2408 := z.EncBinary() + _ = yym2408 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2409 := z.EncBinary() + _ = yym2409 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + if yyr2406 || yy2arr2406 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym2411 := z.EncBinary() + _ = yym2411 + if false { + } else { + z.F.EncMapStringStringV(x.Selector, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym2412 := z.EncBinary() + _ = yym2412 + if false { + } else { + z.F.EncMapStringStringV(x.Selector, false, e) + } + } + } + if yyr2406 || yy2arr2406 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2406[2] { + if x.Template == nil { + r.EncodeNil() + } else { + x.Template.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2406[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Template == nil { + r.EncodeNil() + } else { + x.Template.CodecEncodeSelf(e) + } + } + } + if yyr2406 || yy2arr2406 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationControllerSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2414 := z.DecBinary() + _ = yym2414 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2415 := r.ContainerType() + if yyct2415 == codecSelferValueTypeMap1234 { + yyl2415 := r.ReadMapStart() + if yyl2415 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2415, d) + } + } else if yyct2415 == codecSelferValueTypeArray1234 { + yyl2415 := r.ReadArrayStart() + if yyl2415 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2415, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationControllerSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2416Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2416Slc + var yyhl2416 bool = l >= 0 + for yyj2416 := 0; ; yyj2416++ { + if yyhl2416 { + if yyj2416 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2416Slc = r.DecodeBytes(yys2416Slc, true, true) + yys2416 := string(yys2416Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2416 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "selector": + if r.TryDecodeAsNil() { + x.Selector = nil + } else { + yyv2418 := &x.Selector + yym2419 := z.DecBinary() + _ = yym2419 + if false { + } else { + z.F.DecMapStringStringX(yyv2418, false, d) + } + } + case "template": + if r.TryDecodeAsNil() { + if x.Template != nil { + x.Template = nil + } + } else { + if x.Template == nil { + x.Template = new(PodTemplateSpec) + } + x.Template.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2416) + } // end switch yys2416 + } // end for yyj2416 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationControllerSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2421 int + var yyb2421 bool + var yyhl2421 bool = l >= 0 + yyj2421++ + if yyhl2421 { + yyb2421 = yyj2421 > l + } else { + yyb2421 = r.CheckBreak() + } + if yyb2421 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj2421++ + if yyhl2421 { + yyb2421 = yyj2421 > l + } else { + yyb2421 = r.CheckBreak() + } + if yyb2421 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Selector = nil + } else { + yyv2423 := &x.Selector + yym2424 := z.DecBinary() + _ = yym2424 + if false { + } else { + z.F.DecMapStringStringX(yyv2423, false, d) + } + } + yyj2421++ + if yyhl2421 { + yyb2421 = yyj2421 > l + } else { + yyb2421 = r.CheckBreak() + } + if yyb2421 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Template != nil { + x.Template = nil + } + } else { + if x.Template == nil { + x.Template = new(PodTemplateSpec) + } + x.Template.CodecDecodeSelf(d) + } + for { + yyj2421++ + if yyhl2421 { + yyb2421 = yyj2421 > l + } else { + yyb2421 = r.CheckBreak() + } + if yyb2421 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2421-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationControllerStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2426 := z.EncBinary() + _ = yym2426 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2427 := !z.EncBinary() + yy2arr2427 := z.EncBasicHandle().StructToArray + var yyq2427 [4]bool + _, _, _ = yysep2427, yyq2427, yy2arr2427 + const yyr2427 bool = false + yyq2427[1] = x.FullyLabeledReplicas != 0 + yyq2427[2] = x.ReadyReplicas != 0 + yyq2427[3] = x.ObservedGeneration != 0 + var yynn2427 int + if yyr2427 || yy2arr2427 { + r.EncodeArrayStart(4) + } else { + yynn2427 = 1 + for _, b := range yyq2427 { + if b { + yynn2427++ + } + } + r.EncodeMapStart(yynn2427) + yynn2427 = 0 + } + if yyr2427 || yy2arr2427 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2429 := z.EncBinary() + _ = yym2429 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2430 := z.EncBinary() + _ = yym2430 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + if yyr2427 || yy2arr2427 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2427[1] { + yym2432 := z.EncBinary() + _ = yym2432 + if false { + } else { + r.EncodeInt(int64(x.FullyLabeledReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2427[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fullyLabeledReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2433 := z.EncBinary() + _ = yym2433 + if false { + } else { + r.EncodeInt(int64(x.FullyLabeledReplicas)) + } + } + } + if yyr2427 || yy2arr2427 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2427[2] { + yym2435 := z.EncBinary() + _ = yym2435 + if false { + } else { + r.EncodeInt(int64(x.ReadyReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2427[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readyReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2436 := z.EncBinary() + _ = yym2436 + if false { + } else { + r.EncodeInt(int64(x.ReadyReplicas)) + } + } + } + if yyr2427 || yy2arr2427 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2427[3] { + yym2438 := z.EncBinary() + _ = yym2438 + if false { + } else { + r.EncodeInt(int64(x.ObservedGeneration)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2427[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("observedGeneration")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2439 := z.EncBinary() + _ = yym2439 + if false { + } else { + r.EncodeInt(int64(x.ObservedGeneration)) + } + } + } + if yyr2427 || yy2arr2427 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationControllerStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2440 := z.DecBinary() + _ = yym2440 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2441 := r.ContainerType() + if yyct2441 == codecSelferValueTypeMap1234 { + yyl2441 := r.ReadMapStart() + if yyl2441 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2441, d) + } + } else if yyct2441 == codecSelferValueTypeArray1234 { + yyl2441 := r.ReadArrayStart() + if yyl2441 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2441, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationControllerStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2442Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2442Slc + var yyhl2442 bool = l >= 0 + for yyj2442 := 0; ; yyj2442++ { + if yyhl2442 { + if yyj2442 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2442Slc = r.DecodeBytes(yys2442Slc, true, true) + yys2442 := string(yys2442Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2442 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "fullyLabeledReplicas": + if r.TryDecodeAsNil() { + x.FullyLabeledReplicas = 0 + } else { + x.FullyLabeledReplicas = int32(r.DecodeInt(32)) + } + case "readyReplicas": + if r.TryDecodeAsNil() { + x.ReadyReplicas = 0 + } else { + x.ReadyReplicas = int32(r.DecodeInt(32)) + } + case "observedGeneration": + if r.TryDecodeAsNil() { + x.ObservedGeneration = 0 + } else { + x.ObservedGeneration = int64(r.DecodeInt(64)) + } + default: + z.DecStructFieldNotFound(-1, yys2442) + } // end switch yys2442 + } // end for yyj2442 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationControllerStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2447 int + var yyb2447 bool + var yyhl2447 bool = l >= 0 + yyj2447++ + if yyhl2447 { + yyb2447 = yyj2447 > l + } else { + yyb2447 = r.CheckBreak() + } + if yyb2447 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj2447++ + if yyhl2447 { + yyb2447 = yyj2447 > l + } else { + yyb2447 = r.CheckBreak() + } + if yyb2447 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FullyLabeledReplicas = 0 + } else { + x.FullyLabeledReplicas = int32(r.DecodeInt(32)) + } + yyj2447++ + if yyhl2447 { + yyb2447 = yyj2447 > l + } else { + yyb2447 = r.CheckBreak() + } + if yyb2447 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadyReplicas = 0 + } else { + x.ReadyReplicas = int32(r.DecodeInt(32)) + } + yyj2447++ + if yyhl2447 { + yyb2447 = yyj2447 > l + } else { + yyb2447 = r.CheckBreak() + } + if yyb2447 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObservedGeneration = 0 + } else { + x.ObservedGeneration = int64(r.DecodeInt(64)) + } + for { + yyj2447++ + if yyhl2447 { + yyb2447 = yyj2447 > l + } else { + yyb2447 = r.CheckBreak() + } + if yyb2447 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2447-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationController) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2452 := z.EncBinary() + _ = yym2452 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2453 := !z.EncBinary() + yy2arr2453 := z.EncBasicHandle().StructToArray + var yyq2453 [5]bool + _, _, _ = yysep2453, yyq2453, yy2arr2453 + const yyr2453 bool = false + yyq2453[0] = x.Kind != "" + yyq2453[1] = x.APIVersion != "" + yyq2453[2] = true + yyq2453[3] = true + yyq2453[4] = true + var yynn2453 int + if yyr2453 || yy2arr2453 { + r.EncodeArrayStart(5) + } else { + yynn2453 = 0 + for _, b := range yyq2453 { + if b { + yynn2453++ + } + } + r.EncodeMapStart(yynn2453) + yynn2453 = 0 + } + if yyr2453 || yy2arr2453 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2453[0] { + yym2455 := z.EncBinary() + _ = yym2455 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2453[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2456 := z.EncBinary() + _ = yym2456 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2453 || yy2arr2453 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2453[1] { + yym2458 := z.EncBinary() + _ = yym2458 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2453[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2459 := z.EncBinary() + _ = yym2459 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2453 || yy2arr2453 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2453[2] { + yy2461 := &x.ObjectMeta + yy2461.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2453[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2462 := &x.ObjectMeta + yy2462.CodecEncodeSelf(e) + } + } + if yyr2453 || yy2arr2453 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2453[3] { + yy2464 := &x.Spec + yy2464.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2453[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2465 := &x.Spec + yy2465.CodecEncodeSelf(e) + } + } + if yyr2453 || yy2arr2453 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2453[4] { + yy2467 := &x.Status + yy2467.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2453[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2468 := &x.Status + yy2468.CodecEncodeSelf(e) + } + } + if yyr2453 || yy2arr2453 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationController) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2469 := z.DecBinary() + _ = yym2469 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2470 := r.ContainerType() + if yyct2470 == codecSelferValueTypeMap1234 { + yyl2470 := r.ReadMapStart() + if yyl2470 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2470, d) + } + } else if yyct2470 == codecSelferValueTypeArray1234 { + yyl2470 := r.ReadArrayStart() + if yyl2470 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2470, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationController) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2471Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2471Slc + var yyhl2471 bool = l >= 0 + for yyj2471 := 0; ; yyj2471++ { + if yyhl2471 { + if yyj2471 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2471Slc = r.DecodeBytes(yys2471Slc, true, true) + yys2471 := string(yys2471Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2471 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2474 := &x.ObjectMeta + yyv2474.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ReplicationControllerSpec{} + } else { + yyv2475 := &x.Spec + yyv2475.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ReplicationControllerStatus{} + } else { + yyv2476 := &x.Status + yyv2476.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2471) + } // end switch yys2471 + } // end for yyj2471 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationController) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2477 int + var yyb2477 bool + var yyhl2477 bool = l >= 0 + yyj2477++ + if yyhl2477 { + yyb2477 = yyj2477 > l + } else { + yyb2477 = r.CheckBreak() + } + if yyb2477 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2477++ + if yyhl2477 { + yyb2477 = yyj2477 > l + } else { + yyb2477 = r.CheckBreak() + } + if yyb2477 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2477++ + if yyhl2477 { + yyb2477 = yyj2477 > l + } else { + yyb2477 = r.CheckBreak() + } + if yyb2477 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2480 := &x.ObjectMeta + yyv2480.CodecDecodeSelf(d) + } + yyj2477++ + if yyhl2477 { + yyb2477 = yyj2477 > l + } else { + yyb2477 = r.CheckBreak() + } + if yyb2477 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ReplicationControllerSpec{} + } else { + yyv2481 := &x.Spec + yyv2481.CodecDecodeSelf(d) + } + yyj2477++ + if yyhl2477 { + yyb2477 = yyj2477 > l + } else { + yyb2477 = r.CheckBreak() + } + if yyb2477 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ReplicationControllerStatus{} + } else { + yyv2482 := &x.Status + yyv2482.CodecDecodeSelf(d) + } + for { + yyj2477++ + if yyhl2477 { + yyb2477 = yyj2477 > l + } else { + yyb2477 = r.CheckBreak() + } + if yyb2477 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2477-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationControllerList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2483 := z.EncBinary() + _ = yym2483 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2484 := !z.EncBinary() + yy2arr2484 := z.EncBasicHandle().StructToArray + var yyq2484 [4]bool + _, _, _ = yysep2484, yyq2484, yy2arr2484 + const yyr2484 bool = false + yyq2484[0] = x.Kind != "" + yyq2484[1] = x.APIVersion != "" + yyq2484[2] = true + var yynn2484 int + if yyr2484 || yy2arr2484 { + r.EncodeArrayStart(4) + } else { + yynn2484 = 1 + for _, b := range yyq2484 { + if b { + yynn2484++ + } + } + r.EncodeMapStart(yynn2484) + yynn2484 = 0 + } + if yyr2484 || yy2arr2484 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2484[0] { + yym2486 := z.EncBinary() + _ = yym2486 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2484[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2487 := z.EncBinary() + _ = yym2487 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2484 || yy2arr2484 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2484[1] { + yym2489 := z.EncBinary() + _ = yym2489 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2484[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2490 := z.EncBinary() + _ = yym2490 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2484 || yy2arr2484 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2484[2] { + yy2492 := &x.ListMeta + yym2493 := z.EncBinary() + _ = yym2493 + if false { + } else if z.HasExtensions() && z.EncExt(yy2492) { + } else { + z.EncFallback(yy2492) + } + } else { + r.EncodeNil() + } + } else { + if yyq2484[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2494 := &x.ListMeta + yym2495 := z.EncBinary() + _ = yym2495 + if false { + } else if z.HasExtensions() && z.EncExt(yy2494) { + } else { + z.EncFallback(yy2494) + } + } + } + if yyr2484 || yy2arr2484 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2497 := z.EncBinary() + _ = yym2497 + if false { + } else { + h.encSliceReplicationController(([]ReplicationController)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2498 := z.EncBinary() + _ = yym2498 + if false { + } else { + h.encSliceReplicationController(([]ReplicationController)(x.Items), e) + } + } + } + if yyr2484 || yy2arr2484 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationControllerList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2499 := z.DecBinary() + _ = yym2499 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2500 := r.ContainerType() + if yyct2500 == codecSelferValueTypeMap1234 { + yyl2500 := r.ReadMapStart() + if yyl2500 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2500, d) + } + } else if yyct2500 == codecSelferValueTypeArray1234 { + yyl2500 := r.ReadArrayStart() + if yyl2500 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2500, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationControllerList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2501Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2501Slc + var yyhl2501 bool = l >= 0 + for yyj2501 := 0; ; yyj2501++ { + if yyhl2501 { + if yyj2501 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2501Slc = r.DecodeBytes(yys2501Slc, true, true) + yys2501 := string(yys2501Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2501 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2504 := &x.ListMeta + yym2505 := z.DecBinary() + _ = yym2505 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2504) { + } else { + z.DecFallback(yyv2504, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2506 := &x.Items + yym2507 := z.DecBinary() + _ = yym2507 + if false { + } else { + h.decSliceReplicationController((*[]ReplicationController)(yyv2506), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2501) + } // end switch yys2501 + } // end for yyj2501 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationControllerList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2508 int + var yyb2508 bool + var yyhl2508 bool = l >= 0 + yyj2508++ + if yyhl2508 { + yyb2508 = yyj2508 > l + } else { + yyb2508 = r.CheckBreak() + } + if yyb2508 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2508++ + if yyhl2508 { + yyb2508 = yyj2508 > l + } else { + yyb2508 = r.CheckBreak() + } + if yyb2508 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2508++ + if yyhl2508 { + yyb2508 = yyj2508 > l + } else { + yyb2508 = r.CheckBreak() + } + if yyb2508 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2511 := &x.ListMeta + yym2512 := z.DecBinary() + _ = yym2512 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2511) { + } else { + z.DecFallback(yyv2511, false) + } + } + yyj2508++ + if yyhl2508 { + yyb2508 = yyj2508 > l + } else { + yyb2508 = r.CheckBreak() + } + if yyb2508 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2513 := &x.Items + yym2514 := z.DecBinary() + _ = yym2514 + if false { + } else { + h.decSliceReplicationController((*[]ReplicationController)(yyv2513), d) + } + } + for { + yyj2508++ + if yyhl2508 { + yyb2508 = yyj2508 > l + } else { + yyb2508 = r.CheckBreak() + } + if yyb2508 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2508-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2515 := z.EncBinary() + _ = yym2515 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2516 := !z.EncBinary() + yy2arr2516 := z.EncBasicHandle().StructToArray + var yyq2516 [4]bool + _, _, _ = yysep2516, yyq2516, yy2arr2516 + const yyr2516 bool = false + yyq2516[0] = x.Kind != "" + yyq2516[1] = x.APIVersion != "" + yyq2516[2] = true + var yynn2516 int + if yyr2516 || yy2arr2516 { + r.EncodeArrayStart(4) + } else { + yynn2516 = 1 + for _, b := range yyq2516 { + if b { + yynn2516++ + } + } + r.EncodeMapStart(yynn2516) + yynn2516 = 0 + } + if yyr2516 || yy2arr2516 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2516[0] { + yym2518 := z.EncBinary() + _ = yym2518 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2516[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2519 := z.EncBinary() + _ = yym2519 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2516 || yy2arr2516 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2516[1] { + yym2521 := z.EncBinary() + _ = yym2521 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2516[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2522 := z.EncBinary() + _ = yym2522 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2516 || yy2arr2516 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2516[2] { + yy2524 := &x.ListMeta + yym2525 := z.EncBinary() + _ = yym2525 + if false { + } else if z.HasExtensions() && z.EncExt(yy2524) { + } else { + z.EncFallback(yy2524) + } + } else { + r.EncodeNil() + } + } else { + if yyq2516[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2526 := &x.ListMeta + yym2527 := z.EncBinary() + _ = yym2527 + if false { + } else if z.HasExtensions() && z.EncExt(yy2526) { + } else { + z.EncFallback(yy2526) + } + } + } + if yyr2516 || yy2arr2516 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2529 := z.EncBinary() + _ = yym2529 + if false { + } else { + h.encSliceService(([]Service)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2530 := z.EncBinary() + _ = yym2530 + if false { + } else { + h.encSliceService(([]Service)(x.Items), e) + } + } + } + if yyr2516 || yy2arr2516 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2531 := z.DecBinary() + _ = yym2531 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2532 := r.ContainerType() + if yyct2532 == codecSelferValueTypeMap1234 { + yyl2532 := r.ReadMapStart() + if yyl2532 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2532, d) + } + } else if yyct2532 == codecSelferValueTypeArray1234 { + yyl2532 := r.ReadArrayStart() + if yyl2532 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2532, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2533Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2533Slc + var yyhl2533 bool = l >= 0 + for yyj2533 := 0; ; yyj2533++ { + if yyhl2533 { + if yyj2533 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2533Slc = r.DecodeBytes(yys2533Slc, true, true) + yys2533 := string(yys2533Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2533 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2536 := &x.ListMeta + yym2537 := z.DecBinary() + _ = yym2537 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2536) { + } else { + z.DecFallback(yyv2536, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2538 := &x.Items + yym2539 := z.DecBinary() + _ = yym2539 + if false { + } else { + h.decSliceService((*[]Service)(yyv2538), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2533) + } // end switch yys2533 + } // end for yyj2533 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2540 int + var yyb2540 bool + var yyhl2540 bool = l >= 0 + yyj2540++ + if yyhl2540 { + yyb2540 = yyj2540 > l + } else { + yyb2540 = r.CheckBreak() + } + if yyb2540 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2540++ + if yyhl2540 { + yyb2540 = yyj2540 > l + } else { + yyb2540 = r.CheckBreak() + } + if yyb2540 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2540++ + if yyhl2540 { + yyb2540 = yyj2540 > l + } else { + yyb2540 = r.CheckBreak() + } + if yyb2540 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2543 := &x.ListMeta + yym2544 := z.DecBinary() + _ = yym2544 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2543) { + } else { + z.DecFallback(yyv2543, false) + } + } + yyj2540++ + if yyhl2540 { + yyb2540 = yyj2540 > l + } else { + yyb2540 = r.CheckBreak() + } + if yyb2540 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2545 := &x.Items + yym2546 := z.DecBinary() + _ = yym2546 + if false { + } else { + h.decSliceService((*[]Service)(yyv2545), d) + } + } + for { + yyj2540++ + if yyhl2540 { + yyb2540 = yyj2540 > l + } else { + yyb2540 = r.CheckBreak() + } + if yyb2540 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2540-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ServiceAffinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym2547 := z.EncBinary() + _ = yym2547 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ServiceAffinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2548 := z.DecBinary() + _ = yym2548 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x ServiceType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym2549 := z.EncBinary() + _ = yym2549 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ServiceType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2550 := z.DecBinary() + _ = yym2550 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ServiceStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2551 := z.EncBinary() + _ = yym2551 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2552 := !z.EncBinary() + yy2arr2552 := z.EncBasicHandle().StructToArray + var yyq2552 [1]bool + _, _, _ = yysep2552, yyq2552, yy2arr2552 + const yyr2552 bool = false + yyq2552[0] = true + var yynn2552 int + if yyr2552 || yy2arr2552 { + r.EncodeArrayStart(1) + } else { + yynn2552 = 0 + for _, b := range yyq2552 { + if b { + yynn2552++ + } + } + r.EncodeMapStart(yynn2552) + yynn2552 = 0 + } + if yyr2552 || yy2arr2552 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2552[0] { + yy2554 := &x.LoadBalancer + yy2554.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2552[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("loadBalancer")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2555 := &x.LoadBalancer + yy2555.CodecEncodeSelf(e) + } + } + if yyr2552 || yy2arr2552 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2556 := z.DecBinary() + _ = yym2556 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2557 := r.ContainerType() + if yyct2557 == codecSelferValueTypeMap1234 { + yyl2557 := r.ReadMapStart() + if yyl2557 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2557, d) + } + } else if yyct2557 == codecSelferValueTypeArray1234 { + yyl2557 := r.ReadArrayStart() + if yyl2557 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2557, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2558Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2558Slc + var yyhl2558 bool = l >= 0 + for yyj2558 := 0; ; yyj2558++ { + if yyhl2558 { + if yyj2558 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2558Slc = r.DecodeBytes(yys2558Slc, true, true) + yys2558 := string(yys2558Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2558 { + case "loadBalancer": + if r.TryDecodeAsNil() { + x.LoadBalancer = LoadBalancerStatus{} + } else { + yyv2559 := &x.LoadBalancer + yyv2559.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2558) + } // end switch yys2558 + } // end for yyj2558 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2560 int + var yyb2560 bool + var yyhl2560 bool = l >= 0 + yyj2560++ + if yyhl2560 { + yyb2560 = yyj2560 > l + } else { + yyb2560 = r.CheckBreak() + } + if yyb2560 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LoadBalancer = LoadBalancerStatus{} + } else { + yyv2561 := &x.LoadBalancer + yyv2561.CodecDecodeSelf(d) + } + for { + yyj2560++ + if yyhl2560 { + yyb2560 = yyj2560 > l + } else { + yyb2560 = r.CheckBreak() + } + if yyb2560 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2560-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LoadBalancerStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2562 := z.EncBinary() + _ = yym2562 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2563 := !z.EncBinary() + yy2arr2563 := z.EncBasicHandle().StructToArray + var yyq2563 [1]bool + _, _, _ = yysep2563, yyq2563, yy2arr2563 + const yyr2563 bool = false + yyq2563[0] = len(x.Ingress) != 0 + var yynn2563 int + if yyr2563 || yy2arr2563 { + r.EncodeArrayStart(1) + } else { + yynn2563 = 0 + for _, b := range yyq2563 { + if b { + yynn2563++ + } + } + r.EncodeMapStart(yynn2563) + yynn2563 = 0 + } + if yyr2563 || yy2arr2563 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2563[0] { + if x.Ingress == nil { + r.EncodeNil() + } else { + yym2565 := z.EncBinary() + _ = yym2565 + if false { + } else { + h.encSliceLoadBalancerIngress(([]LoadBalancerIngress)(x.Ingress), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2563[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ingress")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ingress == nil { + r.EncodeNil() + } else { + yym2566 := z.EncBinary() + _ = yym2566 + if false { + } else { + h.encSliceLoadBalancerIngress(([]LoadBalancerIngress)(x.Ingress), e) + } + } + } + } + if yyr2563 || yy2arr2563 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LoadBalancerStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2567 := z.DecBinary() + _ = yym2567 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2568 := r.ContainerType() + if yyct2568 == codecSelferValueTypeMap1234 { + yyl2568 := r.ReadMapStart() + if yyl2568 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2568, d) + } + } else if yyct2568 == codecSelferValueTypeArray1234 { + yyl2568 := r.ReadArrayStart() + if yyl2568 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2568, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LoadBalancerStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2569Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2569Slc + var yyhl2569 bool = l >= 0 + for yyj2569 := 0; ; yyj2569++ { + if yyhl2569 { + if yyj2569 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2569Slc = r.DecodeBytes(yys2569Slc, true, true) + yys2569 := string(yys2569Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2569 { + case "ingress": + if r.TryDecodeAsNil() { + x.Ingress = nil + } else { + yyv2570 := &x.Ingress + yym2571 := z.DecBinary() + _ = yym2571 + if false { + } else { + h.decSliceLoadBalancerIngress((*[]LoadBalancerIngress)(yyv2570), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2569) + } // end switch yys2569 + } // end for yyj2569 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LoadBalancerStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2572 int + var yyb2572 bool + var yyhl2572 bool = l >= 0 + yyj2572++ + if yyhl2572 { + yyb2572 = yyj2572 > l + } else { + yyb2572 = r.CheckBreak() + } + if yyb2572 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ingress = nil + } else { + yyv2573 := &x.Ingress + yym2574 := z.DecBinary() + _ = yym2574 + if false { + } else { + h.decSliceLoadBalancerIngress((*[]LoadBalancerIngress)(yyv2573), d) + } + } + for { + yyj2572++ + if yyhl2572 { + yyb2572 = yyj2572 > l + } else { + yyb2572 = r.CheckBreak() + } + if yyb2572 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2572-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LoadBalancerIngress) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2575 := z.EncBinary() + _ = yym2575 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2576 := !z.EncBinary() + yy2arr2576 := z.EncBasicHandle().StructToArray + var yyq2576 [2]bool + _, _, _ = yysep2576, yyq2576, yy2arr2576 + const yyr2576 bool = false + yyq2576[0] = x.IP != "" + yyq2576[1] = x.Hostname != "" + var yynn2576 int + if yyr2576 || yy2arr2576 { + r.EncodeArrayStart(2) + } else { + yynn2576 = 0 + for _, b := range yyq2576 { + if b { + yynn2576++ + } + } + r.EncodeMapStart(yynn2576) + yynn2576 = 0 + } + if yyr2576 || yy2arr2576 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2576[0] { + yym2578 := z.EncBinary() + _ = yym2578 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2576[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ip")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2579 := z.EncBinary() + _ = yym2579 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IP)) + } + } + } + if yyr2576 || yy2arr2576 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2576[1] { + yym2581 := z.EncBinary() + _ = yym2581 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2576[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostname")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2582 := z.EncBinary() + _ = yym2582 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } + } + if yyr2576 || yy2arr2576 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LoadBalancerIngress) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2583 := z.DecBinary() + _ = yym2583 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2584 := r.ContainerType() + if yyct2584 == codecSelferValueTypeMap1234 { + yyl2584 := r.ReadMapStart() + if yyl2584 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2584, d) + } + } else if yyct2584 == codecSelferValueTypeArray1234 { + yyl2584 := r.ReadArrayStart() + if yyl2584 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2584, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LoadBalancerIngress) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2585Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2585Slc + var yyhl2585 bool = l >= 0 + for yyj2585 := 0; ; yyj2585++ { + if yyhl2585 { + if yyj2585 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2585Slc = r.DecodeBytes(yys2585Slc, true, true) + yys2585 := string(yys2585Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2585 { + case "ip": + if r.TryDecodeAsNil() { + x.IP = "" + } else { + x.IP = string(r.DecodeString()) + } + case "hostname": + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2585) + } // end switch yys2585 + } // end for yyj2585 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LoadBalancerIngress) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2588 int + var yyb2588 bool + var yyhl2588 bool = l >= 0 + yyj2588++ + if yyhl2588 { + yyb2588 = yyj2588 > l + } else { + yyb2588 = r.CheckBreak() + } + if yyb2588 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.IP = "" + } else { + x.IP = string(r.DecodeString()) + } + yyj2588++ + if yyhl2588 { + yyb2588 = yyj2588 > l + } else { + yyb2588 = r.CheckBreak() + } + if yyb2588 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + for { + yyj2588++ + if yyhl2588 { + yyb2588 = yyj2588 > l + } else { + yyb2588 = r.CheckBreak() + } + if yyb2588 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2588-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2591 := z.EncBinary() + _ = yym2591 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2592 := !z.EncBinary() + yy2arr2592 := z.EncBasicHandle().StructToArray + var yyq2592 [9]bool + _, _, _ = yysep2592, yyq2592, yy2arr2592 + const yyr2592 bool = false + yyq2592[0] = x.Type != "" + yyq2592[3] = x.ClusterIP != "" + yyq2592[5] = len(x.ExternalIPs) != 0 + yyq2592[6] = x.LoadBalancerIP != "" + yyq2592[7] = x.SessionAffinity != "" + yyq2592[8] = len(x.LoadBalancerSourceRanges) != 0 + var yynn2592 int + if yyr2592 || yy2arr2592 { + r.EncodeArrayStart(9) + } else { + yynn2592 = 3 + for _, b := range yyq2592 { + if b { + yynn2592++ + } + } + r.EncodeMapStart(yynn2592) + yynn2592 = 0 + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2592[0] { + x.Type.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2592[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym2595 := z.EncBinary() + _ = yym2595 + if false { + } else { + h.encSliceServicePort(([]ServicePort)(x.Ports), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ports")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym2596 := z.EncBinary() + _ = yym2596 + if false { + } else { + h.encSliceServicePort(([]ServicePort)(x.Ports), e) + } + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym2598 := z.EncBinary() + _ = yym2598 + if false { + } else { + z.F.EncMapStringStringV(x.Selector, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym2599 := z.EncBinary() + _ = yym2599 + if false { + } else { + z.F.EncMapStringStringV(x.Selector, false, e) + } + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2592[3] { + yym2601 := z.EncBinary() + _ = yym2601 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClusterIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2592[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("clusterIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2602 := z.EncBinary() + _ = yym2602 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClusterIP)) + } + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2604 := z.EncBinary() + _ = yym2604 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ExternalName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ExternalName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2605 := z.EncBinary() + _ = yym2605 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ExternalName)) + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2592[5] { + if x.ExternalIPs == nil { + r.EncodeNil() + } else { + yym2607 := z.EncBinary() + _ = yym2607 + if false { + } else { + z.F.EncSliceStringV(x.ExternalIPs, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2592[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("externalIPs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ExternalIPs == nil { + r.EncodeNil() + } else { + yym2608 := z.EncBinary() + _ = yym2608 + if false { + } else { + z.F.EncSliceStringV(x.ExternalIPs, false, e) + } + } + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2592[6] { + yym2610 := z.EncBinary() + _ = yym2610 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.LoadBalancerIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2592[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("loadBalancerIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2611 := z.EncBinary() + _ = yym2611 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.LoadBalancerIP)) + } + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2592[7] { + x.SessionAffinity.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2592[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("sessionAffinity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.SessionAffinity.CodecEncodeSelf(e) + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2592[8] { + if x.LoadBalancerSourceRanges == nil { + r.EncodeNil() + } else { + yym2614 := z.EncBinary() + _ = yym2614 + if false { + } else { + z.F.EncSliceStringV(x.LoadBalancerSourceRanges, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2592[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("loadBalancerSourceRanges")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LoadBalancerSourceRanges == nil { + r.EncodeNil() + } else { + yym2615 := z.EncBinary() + _ = yym2615 + if false { + } else { + z.F.EncSliceStringV(x.LoadBalancerSourceRanges, false, e) + } + } + } + } + if yyr2592 || yy2arr2592 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2616 := z.DecBinary() + _ = yym2616 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2617 := r.ContainerType() + if yyct2617 == codecSelferValueTypeMap1234 { + yyl2617 := r.ReadMapStart() + if yyl2617 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2617, d) + } + } else if yyct2617 == codecSelferValueTypeArray1234 { + yyl2617 := r.ReadArrayStart() + if yyl2617 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2617, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2618Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2618Slc + var yyhl2618 bool = l >= 0 + for yyj2618 := 0; ; yyj2618++ { + if yyhl2618 { + if yyj2618 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2618Slc = r.DecodeBytes(yys2618Slc, true, true) + yys2618 := string(yys2618Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2618 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = ServiceType(r.DecodeString()) + } + case "ports": + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv2620 := &x.Ports + yym2621 := z.DecBinary() + _ = yym2621 + if false { + } else { + h.decSliceServicePort((*[]ServicePort)(yyv2620), d) + } + } + case "selector": + if r.TryDecodeAsNil() { + x.Selector = nil + } else { + yyv2622 := &x.Selector + yym2623 := z.DecBinary() + _ = yym2623 + if false { + } else { + z.F.DecMapStringStringX(yyv2622, false, d) + } + } + case "clusterIP": + if r.TryDecodeAsNil() { + x.ClusterIP = "" + } else { + x.ClusterIP = string(r.DecodeString()) + } + case "ExternalName": + if r.TryDecodeAsNil() { + x.ExternalName = "" + } else { + x.ExternalName = string(r.DecodeString()) + } + case "externalIPs": + if r.TryDecodeAsNil() { + x.ExternalIPs = nil + } else { + yyv2626 := &x.ExternalIPs + yym2627 := z.DecBinary() + _ = yym2627 + if false { + } else { + z.F.DecSliceStringX(yyv2626, false, d) + } + } + case "loadBalancerIP": + if r.TryDecodeAsNil() { + x.LoadBalancerIP = "" + } else { + x.LoadBalancerIP = string(r.DecodeString()) + } + case "sessionAffinity": + if r.TryDecodeAsNil() { + x.SessionAffinity = "" + } else { + x.SessionAffinity = ServiceAffinity(r.DecodeString()) + } + case "loadBalancerSourceRanges": + if r.TryDecodeAsNil() { + x.LoadBalancerSourceRanges = nil + } else { + yyv2630 := &x.LoadBalancerSourceRanges + yym2631 := z.DecBinary() + _ = yym2631 + if false { + } else { + z.F.DecSliceStringX(yyv2630, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2618) + } // end switch yys2618 + } // end for yyj2618 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2632 int + var yyb2632 bool + var yyhl2632 bool = l >= 0 + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = ServiceType(r.DecodeString()) + } + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv2634 := &x.Ports + yym2635 := z.DecBinary() + _ = yym2635 + if false { + } else { + h.decSliceServicePort((*[]ServicePort)(yyv2634), d) + } + } + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Selector = nil + } else { + yyv2636 := &x.Selector + yym2637 := z.DecBinary() + _ = yym2637 + if false { + } else { + z.F.DecMapStringStringX(yyv2636, false, d) + } + } + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ClusterIP = "" + } else { + x.ClusterIP = string(r.DecodeString()) + } + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ExternalName = "" + } else { + x.ExternalName = string(r.DecodeString()) + } + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ExternalIPs = nil + } else { + yyv2640 := &x.ExternalIPs + yym2641 := z.DecBinary() + _ = yym2641 + if false { + } else { + z.F.DecSliceStringX(yyv2640, false, d) + } + } + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LoadBalancerIP = "" + } else { + x.LoadBalancerIP = string(r.DecodeString()) + } + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SessionAffinity = "" + } else { + x.SessionAffinity = ServiceAffinity(r.DecodeString()) + } + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LoadBalancerSourceRanges = nil + } else { + yyv2644 := &x.LoadBalancerSourceRanges + yym2645 := z.DecBinary() + _ = yym2645 + if false { + } else { + z.F.DecSliceStringX(yyv2644, false, d) + } + } + for { + yyj2632++ + if yyhl2632 { + yyb2632 = yyj2632 > l + } else { + yyb2632 = r.CheckBreak() + } + if yyb2632 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2632-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServicePort) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2646 := z.EncBinary() + _ = yym2646 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2647 := !z.EncBinary() + yy2arr2647 := z.EncBasicHandle().StructToArray + var yyq2647 [5]bool + _, _, _ = yysep2647, yyq2647, yy2arr2647 + const yyr2647 bool = false + var yynn2647 int + if yyr2647 || yy2arr2647 { + r.EncodeArrayStart(5) + } else { + yynn2647 = 5 + for _, b := range yyq2647 { + if b { + yynn2647++ + } + } + r.EncodeMapStart(yynn2647) + yynn2647 = 0 + } + if yyr2647 || yy2arr2647 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2649 := z.EncBinary() + _ = yym2649 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2650 := z.EncBinary() + _ = yym2650 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr2647 || yy2arr2647 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Protocol.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("protocol")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Protocol.CodecEncodeSelf(e) + } + if yyr2647 || yy2arr2647 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2653 := z.EncBinary() + _ = yym2653 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2654 := z.EncBinary() + _ = yym2654 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } + if yyr2647 || yy2arr2647 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy2656 := &x.TargetPort + yym2657 := z.EncBinary() + _ = yym2657 + if false { + } else if z.HasExtensions() && z.EncExt(yy2656) { + } else if !yym2657 && z.IsJSONHandle() { + z.EncJSONMarshal(yy2656) + } else { + z.EncFallback(yy2656) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("targetPort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2658 := &x.TargetPort + yym2659 := z.EncBinary() + _ = yym2659 + if false { + } else if z.HasExtensions() && z.EncExt(yy2658) { + } else if !yym2659 && z.IsJSONHandle() { + z.EncJSONMarshal(yy2658) + } else { + z.EncFallback(yy2658) + } + } + if yyr2647 || yy2arr2647 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2661 := z.EncBinary() + _ = yym2661 + if false { + } else { + r.EncodeInt(int64(x.NodePort)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodePort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2662 := z.EncBinary() + _ = yym2662 + if false { + } else { + r.EncodeInt(int64(x.NodePort)) + } + } + if yyr2647 || yy2arr2647 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServicePort) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2663 := z.DecBinary() + _ = yym2663 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2664 := r.ContainerType() + if yyct2664 == codecSelferValueTypeMap1234 { + yyl2664 := r.ReadMapStart() + if yyl2664 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2664, d) + } + } else if yyct2664 == codecSelferValueTypeArray1234 { + yyl2664 := r.ReadArrayStart() + if yyl2664 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2664, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServicePort) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2665Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2665Slc + var yyhl2665 bool = l >= 0 + for yyj2665 := 0; ; yyj2665++ { + if yyhl2665 { + if yyj2665 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2665Slc = r.DecodeBytes(yys2665Slc, true, true) + yys2665 := string(yys2665Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2665 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "protocol": + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + case "port": + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + case "targetPort": + if r.TryDecodeAsNil() { + x.TargetPort = pkg4_intstr.IntOrString{} + } else { + yyv2669 := &x.TargetPort + yym2670 := z.DecBinary() + _ = yym2670 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2669) { + } else if !yym2670 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv2669) + } else { + z.DecFallback(yyv2669, false) + } + } + case "nodePort": + if r.TryDecodeAsNil() { + x.NodePort = 0 + } else { + x.NodePort = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys2665) + } // end switch yys2665 + } // end for yyj2665 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServicePort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2672 int + var yyb2672 bool + var yyhl2672 bool = l >= 0 + yyj2672++ + if yyhl2672 { + yyb2672 = yyj2672 > l + } else { + yyb2672 = r.CheckBreak() + } + if yyb2672 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj2672++ + if yyhl2672 { + yyb2672 = yyj2672 > l + } else { + yyb2672 = r.CheckBreak() + } + if yyb2672 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + yyj2672++ + if yyhl2672 { + yyb2672 = yyj2672 > l + } else { + yyb2672 = r.CheckBreak() + } + if yyb2672 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + yyj2672++ + if yyhl2672 { + yyb2672 = yyj2672 > l + } else { + yyb2672 = r.CheckBreak() + } + if yyb2672 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TargetPort = pkg4_intstr.IntOrString{} + } else { + yyv2676 := &x.TargetPort + yym2677 := z.DecBinary() + _ = yym2677 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2676) { + } else if !yym2677 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv2676) + } else { + z.DecFallback(yyv2676, false) + } + } + yyj2672++ + if yyhl2672 { + yyb2672 = yyj2672 > l + } else { + yyb2672 = r.CheckBreak() + } + if yyb2672 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodePort = 0 + } else { + x.NodePort = int32(r.DecodeInt(32)) + } + for { + yyj2672++ + if yyhl2672 { + yyb2672 = yyj2672 > l + } else { + yyb2672 = r.CheckBreak() + } + if yyb2672 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2672-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Service) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2679 := z.EncBinary() + _ = yym2679 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2680 := !z.EncBinary() + yy2arr2680 := z.EncBasicHandle().StructToArray + var yyq2680 [5]bool + _, _, _ = yysep2680, yyq2680, yy2arr2680 + const yyr2680 bool = false + yyq2680[0] = x.Kind != "" + yyq2680[1] = x.APIVersion != "" + yyq2680[2] = true + yyq2680[3] = true + yyq2680[4] = true + var yynn2680 int + if yyr2680 || yy2arr2680 { + r.EncodeArrayStart(5) + } else { + yynn2680 = 0 + for _, b := range yyq2680 { + if b { + yynn2680++ + } + } + r.EncodeMapStart(yynn2680) + yynn2680 = 0 + } + if yyr2680 || yy2arr2680 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2680[0] { + yym2682 := z.EncBinary() + _ = yym2682 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2680[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2683 := z.EncBinary() + _ = yym2683 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2680 || yy2arr2680 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2680[1] { + yym2685 := z.EncBinary() + _ = yym2685 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2680[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2686 := z.EncBinary() + _ = yym2686 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2680 || yy2arr2680 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2680[2] { + yy2688 := &x.ObjectMeta + yy2688.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2680[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2689 := &x.ObjectMeta + yy2689.CodecEncodeSelf(e) + } + } + if yyr2680 || yy2arr2680 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2680[3] { + yy2691 := &x.Spec + yy2691.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2680[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2692 := &x.Spec + yy2692.CodecEncodeSelf(e) + } + } + if yyr2680 || yy2arr2680 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2680[4] { + yy2694 := &x.Status + yy2694.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2680[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2695 := &x.Status + yy2695.CodecEncodeSelf(e) + } + } + if yyr2680 || yy2arr2680 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Service) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2696 := z.DecBinary() + _ = yym2696 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2697 := r.ContainerType() + if yyct2697 == codecSelferValueTypeMap1234 { + yyl2697 := r.ReadMapStart() + if yyl2697 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2697, d) + } + } else if yyct2697 == codecSelferValueTypeArray1234 { + yyl2697 := r.ReadArrayStart() + if yyl2697 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2697, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Service) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2698Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2698Slc + var yyhl2698 bool = l >= 0 + for yyj2698 := 0; ; yyj2698++ { + if yyhl2698 { + if yyj2698 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2698Slc = r.DecodeBytes(yys2698Slc, true, true) + yys2698 := string(yys2698Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2698 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2701 := &x.ObjectMeta + yyv2701.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ServiceSpec{} + } else { + yyv2702 := &x.Spec + yyv2702.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ServiceStatus{} + } else { + yyv2703 := &x.Status + yyv2703.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2698) + } // end switch yys2698 + } // end for yyj2698 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Service) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2704 int + var yyb2704 bool + var yyhl2704 bool = l >= 0 + yyj2704++ + if yyhl2704 { + yyb2704 = yyj2704 > l + } else { + yyb2704 = r.CheckBreak() + } + if yyb2704 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2704++ + if yyhl2704 { + yyb2704 = yyj2704 > l + } else { + yyb2704 = r.CheckBreak() + } + if yyb2704 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2704++ + if yyhl2704 { + yyb2704 = yyj2704 > l + } else { + yyb2704 = r.CheckBreak() + } + if yyb2704 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2707 := &x.ObjectMeta + yyv2707.CodecDecodeSelf(d) + } + yyj2704++ + if yyhl2704 { + yyb2704 = yyj2704 > l + } else { + yyb2704 = r.CheckBreak() + } + if yyb2704 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ServiceSpec{} + } else { + yyv2708 := &x.Spec + yyv2708.CodecDecodeSelf(d) + } + yyj2704++ + if yyhl2704 { + yyb2704 = yyj2704 > l + } else { + yyb2704 = r.CheckBreak() + } + if yyb2704 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ServiceStatus{} + } else { + yyv2709 := &x.Status + yyv2709.CodecDecodeSelf(d) + } + for { + yyj2704++ + if yyhl2704 { + yyb2704 = yyj2704 > l + } else { + yyb2704 = r.CheckBreak() + } + if yyb2704 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2704-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceAccount) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2710 := z.EncBinary() + _ = yym2710 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2711 := !z.EncBinary() + yy2arr2711 := z.EncBasicHandle().StructToArray + var yyq2711 [5]bool + _, _, _ = yysep2711, yyq2711, yy2arr2711 + const yyr2711 bool = false + yyq2711[0] = x.Kind != "" + yyq2711[1] = x.APIVersion != "" + yyq2711[2] = true + yyq2711[4] = len(x.ImagePullSecrets) != 0 + var yynn2711 int + if yyr2711 || yy2arr2711 { + r.EncodeArrayStart(5) + } else { + yynn2711 = 1 + for _, b := range yyq2711 { + if b { + yynn2711++ + } + } + r.EncodeMapStart(yynn2711) + yynn2711 = 0 + } + if yyr2711 || yy2arr2711 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2711[0] { + yym2713 := z.EncBinary() + _ = yym2713 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2711[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2714 := z.EncBinary() + _ = yym2714 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2711 || yy2arr2711 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2711[1] { + yym2716 := z.EncBinary() + _ = yym2716 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2711[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2717 := z.EncBinary() + _ = yym2717 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2711 || yy2arr2711 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2711[2] { + yy2719 := &x.ObjectMeta + yy2719.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2711[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2720 := &x.ObjectMeta + yy2720.CodecEncodeSelf(e) + } + } + if yyr2711 || yy2arr2711 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Secrets == nil { + r.EncodeNil() + } else { + yym2722 := z.EncBinary() + _ = yym2722 + if false { + } else { + h.encSliceObjectReference(([]ObjectReference)(x.Secrets), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secrets")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Secrets == nil { + r.EncodeNil() + } else { + yym2723 := z.EncBinary() + _ = yym2723 + if false { + } else { + h.encSliceObjectReference(([]ObjectReference)(x.Secrets), e) + } + } + } + if yyr2711 || yy2arr2711 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2711[4] { + if x.ImagePullSecrets == nil { + r.EncodeNil() + } else { + yym2725 := z.EncBinary() + _ = yym2725 + if false { + } else { + h.encSliceLocalObjectReference(([]LocalObjectReference)(x.ImagePullSecrets), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2711[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("imagePullSecrets")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ImagePullSecrets == nil { + r.EncodeNil() + } else { + yym2726 := z.EncBinary() + _ = yym2726 + if false { + } else { + h.encSliceLocalObjectReference(([]LocalObjectReference)(x.ImagePullSecrets), e) + } + } + } + } + if yyr2711 || yy2arr2711 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceAccount) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2727 := z.DecBinary() + _ = yym2727 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2728 := r.ContainerType() + if yyct2728 == codecSelferValueTypeMap1234 { + yyl2728 := r.ReadMapStart() + if yyl2728 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2728, d) + } + } else if yyct2728 == codecSelferValueTypeArray1234 { + yyl2728 := r.ReadArrayStart() + if yyl2728 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2728, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceAccount) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2729Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2729Slc + var yyhl2729 bool = l >= 0 + for yyj2729 := 0; ; yyj2729++ { + if yyhl2729 { + if yyj2729 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2729Slc = r.DecodeBytes(yys2729Slc, true, true) + yys2729 := string(yys2729Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2729 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2732 := &x.ObjectMeta + yyv2732.CodecDecodeSelf(d) + } + case "secrets": + if r.TryDecodeAsNil() { + x.Secrets = nil + } else { + yyv2733 := &x.Secrets + yym2734 := z.DecBinary() + _ = yym2734 + if false { + } else { + h.decSliceObjectReference((*[]ObjectReference)(yyv2733), d) + } + } + case "imagePullSecrets": + if r.TryDecodeAsNil() { + x.ImagePullSecrets = nil + } else { + yyv2735 := &x.ImagePullSecrets + yym2736 := z.DecBinary() + _ = yym2736 + if false { + } else { + h.decSliceLocalObjectReference((*[]LocalObjectReference)(yyv2735), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2729) + } // end switch yys2729 + } // end for yyj2729 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceAccount) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2737 int + var yyb2737 bool + var yyhl2737 bool = l >= 0 + yyj2737++ + if yyhl2737 { + yyb2737 = yyj2737 > l + } else { + yyb2737 = r.CheckBreak() + } + if yyb2737 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2737++ + if yyhl2737 { + yyb2737 = yyj2737 > l + } else { + yyb2737 = r.CheckBreak() + } + if yyb2737 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2737++ + if yyhl2737 { + yyb2737 = yyj2737 > l + } else { + yyb2737 = r.CheckBreak() + } + if yyb2737 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2740 := &x.ObjectMeta + yyv2740.CodecDecodeSelf(d) + } + yyj2737++ + if yyhl2737 { + yyb2737 = yyj2737 > l + } else { + yyb2737 = r.CheckBreak() + } + if yyb2737 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Secrets = nil + } else { + yyv2741 := &x.Secrets + yym2742 := z.DecBinary() + _ = yym2742 + if false { + } else { + h.decSliceObjectReference((*[]ObjectReference)(yyv2741), d) + } + } + yyj2737++ + if yyhl2737 { + yyb2737 = yyj2737 > l + } else { + yyb2737 = r.CheckBreak() + } + if yyb2737 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ImagePullSecrets = nil + } else { + yyv2743 := &x.ImagePullSecrets + yym2744 := z.DecBinary() + _ = yym2744 + if false { + } else { + h.decSliceLocalObjectReference((*[]LocalObjectReference)(yyv2743), d) + } + } + for { + yyj2737++ + if yyhl2737 { + yyb2737 = yyj2737 > l + } else { + yyb2737 = r.CheckBreak() + } + if yyb2737 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2737-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceAccountList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2745 := z.EncBinary() + _ = yym2745 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2746 := !z.EncBinary() + yy2arr2746 := z.EncBasicHandle().StructToArray + var yyq2746 [4]bool + _, _, _ = yysep2746, yyq2746, yy2arr2746 + const yyr2746 bool = false + yyq2746[0] = x.Kind != "" + yyq2746[1] = x.APIVersion != "" + yyq2746[2] = true + var yynn2746 int + if yyr2746 || yy2arr2746 { + r.EncodeArrayStart(4) + } else { + yynn2746 = 1 + for _, b := range yyq2746 { + if b { + yynn2746++ + } + } + r.EncodeMapStart(yynn2746) + yynn2746 = 0 + } + if yyr2746 || yy2arr2746 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2746[0] { + yym2748 := z.EncBinary() + _ = yym2748 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2746[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2749 := z.EncBinary() + _ = yym2749 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2746 || yy2arr2746 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2746[1] { + yym2751 := z.EncBinary() + _ = yym2751 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2746[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2752 := z.EncBinary() + _ = yym2752 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2746 || yy2arr2746 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2746[2] { + yy2754 := &x.ListMeta + yym2755 := z.EncBinary() + _ = yym2755 + if false { + } else if z.HasExtensions() && z.EncExt(yy2754) { + } else { + z.EncFallback(yy2754) + } + } else { + r.EncodeNil() + } + } else { + if yyq2746[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2756 := &x.ListMeta + yym2757 := z.EncBinary() + _ = yym2757 + if false { + } else if z.HasExtensions() && z.EncExt(yy2756) { + } else { + z.EncFallback(yy2756) + } + } + } + if yyr2746 || yy2arr2746 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2759 := z.EncBinary() + _ = yym2759 + if false { + } else { + h.encSliceServiceAccount(([]ServiceAccount)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2760 := z.EncBinary() + _ = yym2760 + if false { + } else { + h.encSliceServiceAccount(([]ServiceAccount)(x.Items), e) + } + } + } + if yyr2746 || yy2arr2746 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceAccountList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2761 := z.DecBinary() + _ = yym2761 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2762 := r.ContainerType() + if yyct2762 == codecSelferValueTypeMap1234 { + yyl2762 := r.ReadMapStart() + if yyl2762 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2762, d) + } + } else if yyct2762 == codecSelferValueTypeArray1234 { + yyl2762 := r.ReadArrayStart() + if yyl2762 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2762, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceAccountList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2763Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2763Slc + var yyhl2763 bool = l >= 0 + for yyj2763 := 0; ; yyj2763++ { + if yyhl2763 { + if yyj2763 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2763Slc = r.DecodeBytes(yys2763Slc, true, true) + yys2763 := string(yys2763Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2763 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2766 := &x.ListMeta + yym2767 := z.DecBinary() + _ = yym2767 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2766) { + } else { + z.DecFallback(yyv2766, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2768 := &x.Items + yym2769 := z.DecBinary() + _ = yym2769 + if false { + } else { + h.decSliceServiceAccount((*[]ServiceAccount)(yyv2768), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2763) + } // end switch yys2763 + } // end for yyj2763 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceAccountList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2770 int + var yyb2770 bool + var yyhl2770 bool = l >= 0 + yyj2770++ + if yyhl2770 { + yyb2770 = yyj2770 > l + } else { + yyb2770 = r.CheckBreak() + } + if yyb2770 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2770++ + if yyhl2770 { + yyb2770 = yyj2770 > l + } else { + yyb2770 = r.CheckBreak() + } + if yyb2770 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2770++ + if yyhl2770 { + yyb2770 = yyj2770 > l + } else { + yyb2770 = r.CheckBreak() + } + if yyb2770 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2773 := &x.ListMeta + yym2774 := z.DecBinary() + _ = yym2774 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2773) { + } else { + z.DecFallback(yyv2773, false) + } + } + yyj2770++ + if yyhl2770 { + yyb2770 = yyj2770 > l + } else { + yyb2770 = r.CheckBreak() + } + if yyb2770 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2775 := &x.Items + yym2776 := z.DecBinary() + _ = yym2776 + if false { + } else { + h.decSliceServiceAccount((*[]ServiceAccount)(yyv2775), d) + } + } + for { + yyj2770++ + if yyhl2770 { + yyb2770 = yyj2770 > l + } else { + yyb2770 = r.CheckBreak() + } + if yyb2770 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2770-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Endpoints) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2777 := z.EncBinary() + _ = yym2777 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2778 := !z.EncBinary() + yy2arr2778 := z.EncBasicHandle().StructToArray + var yyq2778 [4]bool + _, _, _ = yysep2778, yyq2778, yy2arr2778 + const yyr2778 bool = false + yyq2778[0] = x.Kind != "" + yyq2778[1] = x.APIVersion != "" + yyq2778[2] = true + var yynn2778 int + if yyr2778 || yy2arr2778 { + r.EncodeArrayStart(4) + } else { + yynn2778 = 1 + for _, b := range yyq2778 { + if b { + yynn2778++ + } + } + r.EncodeMapStart(yynn2778) + yynn2778 = 0 + } + if yyr2778 || yy2arr2778 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2778[0] { + yym2780 := z.EncBinary() + _ = yym2780 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2778[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2781 := z.EncBinary() + _ = yym2781 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2778 || yy2arr2778 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2778[1] { + yym2783 := z.EncBinary() + _ = yym2783 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2778[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2784 := z.EncBinary() + _ = yym2784 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2778 || yy2arr2778 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2778[2] { + yy2786 := &x.ObjectMeta + yy2786.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2778[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2787 := &x.ObjectMeta + yy2787.CodecEncodeSelf(e) + } + } + if yyr2778 || yy2arr2778 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Subsets == nil { + r.EncodeNil() + } else { + yym2789 := z.EncBinary() + _ = yym2789 + if false { + } else { + h.encSliceEndpointSubset(([]EndpointSubset)(x.Subsets), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Subsets")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Subsets == nil { + r.EncodeNil() + } else { + yym2790 := z.EncBinary() + _ = yym2790 + if false { + } else { + h.encSliceEndpointSubset(([]EndpointSubset)(x.Subsets), e) + } + } + } + if yyr2778 || yy2arr2778 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Endpoints) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2791 := z.DecBinary() + _ = yym2791 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2792 := r.ContainerType() + if yyct2792 == codecSelferValueTypeMap1234 { + yyl2792 := r.ReadMapStart() + if yyl2792 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2792, d) + } + } else if yyct2792 == codecSelferValueTypeArray1234 { + yyl2792 := r.ReadArrayStart() + if yyl2792 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2792, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Endpoints) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2793Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2793Slc + var yyhl2793 bool = l >= 0 + for yyj2793 := 0; ; yyj2793++ { + if yyhl2793 { + if yyj2793 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2793Slc = r.DecodeBytes(yys2793Slc, true, true) + yys2793 := string(yys2793Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2793 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2796 := &x.ObjectMeta + yyv2796.CodecDecodeSelf(d) + } + case "Subsets": + if r.TryDecodeAsNil() { + x.Subsets = nil + } else { + yyv2797 := &x.Subsets + yym2798 := z.DecBinary() + _ = yym2798 + if false { + } else { + h.decSliceEndpointSubset((*[]EndpointSubset)(yyv2797), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2793) + } // end switch yys2793 + } // end for yyj2793 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Endpoints) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2799 int + var yyb2799 bool + var yyhl2799 bool = l >= 0 + yyj2799++ + if yyhl2799 { + yyb2799 = yyj2799 > l + } else { + yyb2799 = r.CheckBreak() + } + if yyb2799 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2799++ + if yyhl2799 { + yyb2799 = yyj2799 > l + } else { + yyb2799 = r.CheckBreak() + } + if yyb2799 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2799++ + if yyhl2799 { + yyb2799 = yyj2799 > l + } else { + yyb2799 = r.CheckBreak() + } + if yyb2799 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2802 := &x.ObjectMeta + yyv2802.CodecDecodeSelf(d) + } + yyj2799++ + if yyhl2799 { + yyb2799 = yyj2799 > l + } else { + yyb2799 = r.CheckBreak() + } + if yyb2799 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Subsets = nil + } else { + yyv2803 := &x.Subsets + yym2804 := z.DecBinary() + _ = yym2804 + if false { + } else { + h.decSliceEndpointSubset((*[]EndpointSubset)(yyv2803), d) + } + } + for { + yyj2799++ + if yyhl2799 { + yyb2799 = yyj2799 > l + } else { + yyb2799 = r.CheckBreak() + } + if yyb2799 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2799-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EndpointSubset) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2805 := z.EncBinary() + _ = yym2805 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2806 := !z.EncBinary() + yy2arr2806 := z.EncBasicHandle().StructToArray + var yyq2806 [3]bool + _, _, _ = yysep2806, yyq2806, yy2arr2806 + const yyr2806 bool = false + var yynn2806 int + if yyr2806 || yy2arr2806 { + r.EncodeArrayStart(3) + } else { + yynn2806 = 3 + for _, b := range yyq2806 { + if b { + yynn2806++ + } + } + r.EncodeMapStart(yynn2806) + yynn2806 = 0 + } + if yyr2806 || yy2arr2806 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Addresses == nil { + r.EncodeNil() + } else { + yym2808 := z.EncBinary() + _ = yym2808 + if false { + } else { + h.encSliceEndpointAddress(([]EndpointAddress)(x.Addresses), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Addresses")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Addresses == nil { + r.EncodeNil() + } else { + yym2809 := z.EncBinary() + _ = yym2809 + if false { + } else { + h.encSliceEndpointAddress(([]EndpointAddress)(x.Addresses), e) + } + } + } + if yyr2806 || yy2arr2806 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.NotReadyAddresses == nil { + r.EncodeNil() + } else { + yym2811 := z.EncBinary() + _ = yym2811 + if false { + } else { + h.encSliceEndpointAddress(([]EndpointAddress)(x.NotReadyAddresses), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("NotReadyAddresses")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NotReadyAddresses == nil { + r.EncodeNil() + } else { + yym2812 := z.EncBinary() + _ = yym2812 + if false { + } else { + h.encSliceEndpointAddress(([]EndpointAddress)(x.NotReadyAddresses), e) + } + } + } + if yyr2806 || yy2arr2806 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym2814 := z.EncBinary() + _ = yym2814 + if false { + } else { + h.encSliceEndpointPort(([]EndpointPort)(x.Ports), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Ports")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym2815 := z.EncBinary() + _ = yym2815 + if false { + } else { + h.encSliceEndpointPort(([]EndpointPort)(x.Ports), e) + } + } + } + if yyr2806 || yy2arr2806 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EndpointSubset) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2816 := z.DecBinary() + _ = yym2816 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2817 := r.ContainerType() + if yyct2817 == codecSelferValueTypeMap1234 { + yyl2817 := r.ReadMapStart() + if yyl2817 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2817, d) + } + } else if yyct2817 == codecSelferValueTypeArray1234 { + yyl2817 := r.ReadArrayStart() + if yyl2817 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2817, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EndpointSubset) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2818Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2818Slc + var yyhl2818 bool = l >= 0 + for yyj2818 := 0; ; yyj2818++ { + if yyhl2818 { + if yyj2818 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2818Slc = r.DecodeBytes(yys2818Slc, true, true) + yys2818 := string(yys2818Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2818 { + case "Addresses": + if r.TryDecodeAsNil() { + x.Addresses = nil + } else { + yyv2819 := &x.Addresses + yym2820 := z.DecBinary() + _ = yym2820 + if false { + } else { + h.decSliceEndpointAddress((*[]EndpointAddress)(yyv2819), d) + } + } + case "NotReadyAddresses": + if r.TryDecodeAsNil() { + x.NotReadyAddresses = nil + } else { + yyv2821 := &x.NotReadyAddresses + yym2822 := z.DecBinary() + _ = yym2822 + if false { + } else { + h.decSliceEndpointAddress((*[]EndpointAddress)(yyv2821), d) + } + } + case "Ports": + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv2823 := &x.Ports + yym2824 := z.DecBinary() + _ = yym2824 + if false { + } else { + h.decSliceEndpointPort((*[]EndpointPort)(yyv2823), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2818) + } // end switch yys2818 + } // end for yyj2818 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EndpointSubset) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2825 int + var yyb2825 bool + var yyhl2825 bool = l >= 0 + yyj2825++ + if yyhl2825 { + yyb2825 = yyj2825 > l + } else { + yyb2825 = r.CheckBreak() + } + if yyb2825 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Addresses = nil + } else { + yyv2826 := &x.Addresses + yym2827 := z.DecBinary() + _ = yym2827 + if false { + } else { + h.decSliceEndpointAddress((*[]EndpointAddress)(yyv2826), d) + } + } + yyj2825++ + if yyhl2825 { + yyb2825 = yyj2825 > l + } else { + yyb2825 = r.CheckBreak() + } + if yyb2825 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NotReadyAddresses = nil + } else { + yyv2828 := &x.NotReadyAddresses + yym2829 := z.DecBinary() + _ = yym2829 + if false { + } else { + h.decSliceEndpointAddress((*[]EndpointAddress)(yyv2828), d) + } + } + yyj2825++ + if yyhl2825 { + yyb2825 = yyj2825 > l + } else { + yyb2825 = r.CheckBreak() + } + if yyb2825 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv2830 := &x.Ports + yym2831 := z.DecBinary() + _ = yym2831 + if false { + } else { + h.decSliceEndpointPort((*[]EndpointPort)(yyv2830), d) + } + } + for { + yyj2825++ + if yyhl2825 { + yyb2825 = yyj2825 > l + } else { + yyb2825 = r.CheckBreak() + } + if yyb2825 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2825-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EndpointAddress) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2832 := z.EncBinary() + _ = yym2832 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2833 := !z.EncBinary() + yy2arr2833 := z.EncBasicHandle().StructToArray + var yyq2833 [4]bool + _, _, _ = yysep2833, yyq2833, yy2arr2833 + const yyr2833 bool = false + yyq2833[1] = x.Hostname != "" + yyq2833[2] = x.NodeName != nil + var yynn2833 int + if yyr2833 || yy2arr2833 { + r.EncodeArrayStart(4) + } else { + yynn2833 = 2 + for _, b := range yyq2833 { + if b { + yynn2833++ + } + } + r.EncodeMapStart(yynn2833) + yynn2833 = 0 + } + if yyr2833 || yy2arr2833 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2835 := z.EncBinary() + _ = yym2835 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IP)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("IP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2836 := z.EncBinary() + _ = yym2836 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IP)) + } + } + if yyr2833 || yy2arr2833 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2833[1] { + yym2838 := z.EncBinary() + _ = yym2838 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2833[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostname")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2839 := z.EncBinary() + _ = yym2839 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } + } + if yyr2833 || yy2arr2833 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2833[2] { + if x.NodeName == nil { + r.EncodeNil() + } else { + yy2841 := *x.NodeName + yym2842 := z.EncBinary() + _ = yym2842 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy2841)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2833[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NodeName == nil { + r.EncodeNil() + } else { + yy2843 := *x.NodeName + yym2844 := z.EncBinary() + _ = yym2844 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy2843)) + } + } + } + } + if yyr2833 || yy2arr2833 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.TargetRef == nil { + r.EncodeNil() + } else { + x.TargetRef.CodecEncodeSelf(e) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("TargetRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TargetRef == nil { + r.EncodeNil() + } else { + x.TargetRef.CodecEncodeSelf(e) + } + } + if yyr2833 || yy2arr2833 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EndpointAddress) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2846 := z.DecBinary() + _ = yym2846 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2847 := r.ContainerType() + if yyct2847 == codecSelferValueTypeMap1234 { + yyl2847 := r.ReadMapStart() + if yyl2847 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2847, d) + } + } else if yyct2847 == codecSelferValueTypeArray1234 { + yyl2847 := r.ReadArrayStart() + if yyl2847 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2847, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EndpointAddress) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2848Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2848Slc + var yyhl2848 bool = l >= 0 + for yyj2848 := 0; ; yyj2848++ { + if yyhl2848 { + if yyj2848 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2848Slc = r.DecodeBytes(yys2848Slc, true, true) + yys2848 := string(yys2848Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2848 { + case "IP": + if r.TryDecodeAsNil() { + x.IP = "" + } else { + x.IP = string(r.DecodeString()) + } + case "hostname": + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + case "nodeName": + if r.TryDecodeAsNil() { + if x.NodeName != nil { + x.NodeName = nil + } + } else { + if x.NodeName == nil { + x.NodeName = new(string) + } + yym2852 := z.DecBinary() + _ = yym2852 + if false { + } else { + *((*string)(x.NodeName)) = r.DecodeString() + } + } + case "TargetRef": + if r.TryDecodeAsNil() { + if x.TargetRef != nil { + x.TargetRef = nil + } + } else { + if x.TargetRef == nil { + x.TargetRef = new(ObjectReference) + } + x.TargetRef.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2848) + } // end switch yys2848 + } // end for yyj2848 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EndpointAddress) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2854 int + var yyb2854 bool + var yyhl2854 bool = l >= 0 + yyj2854++ + if yyhl2854 { + yyb2854 = yyj2854 > l + } else { + yyb2854 = r.CheckBreak() + } + if yyb2854 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.IP = "" + } else { + x.IP = string(r.DecodeString()) + } + yyj2854++ + if yyhl2854 { + yyb2854 = yyj2854 > l + } else { + yyb2854 = r.CheckBreak() + } + if yyb2854 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + yyj2854++ + if yyhl2854 { + yyb2854 = yyj2854 > l + } else { + yyb2854 = r.CheckBreak() + } + if yyb2854 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NodeName != nil { + x.NodeName = nil + } + } else { + if x.NodeName == nil { + x.NodeName = new(string) + } + yym2858 := z.DecBinary() + _ = yym2858 + if false { + } else { + *((*string)(x.NodeName)) = r.DecodeString() + } + } + yyj2854++ + if yyhl2854 { + yyb2854 = yyj2854 > l + } else { + yyb2854 = r.CheckBreak() + } + if yyb2854 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TargetRef != nil { + x.TargetRef = nil + } + } else { + if x.TargetRef == nil { + x.TargetRef = new(ObjectReference) + } + x.TargetRef.CodecDecodeSelf(d) + } + for { + yyj2854++ + if yyhl2854 { + yyb2854 = yyj2854 > l + } else { + yyb2854 = r.CheckBreak() + } + if yyb2854 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2854-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EndpointPort) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2860 := z.EncBinary() + _ = yym2860 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2861 := !z.EncBinary() + yy2arr2861 := z.EncBasicHandle().StructToArray + var yyq2861 [3]bool + _, _, _ = yysep2861, yyq2861, yy2arr2861 + const yyr2861 bool = false + var yynn2861 int + if yyr2861 || yy2arr2861 { + r.EncodeArrayStart(3) + } else { + yynn2861 = 3 + for _, b := range yyq2861 { + if b { + yynn2861++ + } + } + r.EncodeMapStart(yynn2861) + yynn2861 = 0 + } + if yyr2861 || yy2arr2861 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2863 := z.EncBinary() + _ = yym2863 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2864 := z.EncBinary() + _ = yym2864 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr2861 || yy2arr2861 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2866 := z.EncBinary() + _ = yym2866 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2867 := z.EncBinary() + _ = yym2867 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } + if yyr2861 || yy2arr2861 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Protocol.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Protocol")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Protocol.CodecEncodeSelf(e) + } + if yyr2861 || yy2arr2861 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EndpointPort) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2869 := z.DecBinary() + _ = yym2869 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2870 := r.ContainerType() + if yyct2870 == codecSelferValueTypeMap1234 { + yyl2870 := r.ReadMapStart() + if yyl2870 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2870, d) + } + } else if yyct2870 == codecSelferValueTypeArray1234 { + yyl2870 := r.ReadArrayStart() + if yyl2870 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2870, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EndpointPort) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2871Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2871Slc + var yyhl2871 bool = l >= 0 + for yyj2871 := 0; ; yyj2871++ { + if yyhl2871 { + if yyj2871 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2871Slc = r.DecodeBytes(yys2871Slc, true, true) + yys2871 := string(yys2871Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2871 { + case "Name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "Port": + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + case "Protocol": + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2871) + } // end switch yys2871 + } // end for yyj2871 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EndpointPort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2875 int + var yyb2875 bool + var yyhl2875 bool = l >= 0 + yyj2875++ + if yyhl2875 { + yyb2875 = yyj2875 > l + } else { + yyb2875 = r.CheckBreak() + } + if yyb2875 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj2875++ + if yyhl2875 { + yyb2875 = yyj2875 > l + } else { + yyb2875 = r.CheckBreak() + } + if yyb2875 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + yyj2875++ + if yyhl2875 { + yyb2875 = yyj2875 > l + } else { + yyb2875 = r.CheckBreak() + } + if yyb2875 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + for { + yyj2875++ + if yyhl2875 { + yyb2875 = yyj2875 > l + } else { + yyb2875 = r.CheckBreak() + } + if yyb2875 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2875-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EndpointsList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2879 := z.EncBinary() + _ = yym2879 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2880 := !z.EncBinary() + yy2arr2880 := z.EncBasicHandle().StructToArray + var yyq2880 [4]bool + _, _, _ = yysep2880, yyq2880, yy2arr2880 + const yyr2880 bool = false + yyq2880[0] = x.Kind != "" + yyq2880[1] = x.APIVersion != "" + yyq2880[2] = true + var yynn2880 int + if yyr2880 || yy2arr2880 { + r.EncodeArrayStart(4) + } else { + yynn2880 = 1 + for _, b := range yyq2880 { + if b { + yynn2880++ + } + } + r.EncodeMapStart(yynn2880) + yynn2880 = 0 + } + if yyr2880 || yy2arr2880 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2880[0] { + yym2882 := z.EncBinary() + _ = yym2882 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2880[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2883 := z.EncBinary() + _ = yym2883 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2880 || yy2arr2880 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2880[1] { + yym2885 := z.EncBinary() + _ = yym2885 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2880[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2886 := z.EncBinary() + _ = yym2886 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2880 || yy2arr2880 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2880[2] { + yy2888 := &x.ListMeta + yym2889 := z.EncBinary() + _ = yym2889 + if false { + } else if z.HasExtensions() && z.EncExt(yy2888) { + } else { + z.EncFallback(yy2888) + } + } else { + r.EncodeNil() + } + } else { + if yyq2880[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2890 := &x.ListMeta + yym2891 := z.EncBinary() + _ = yym2891 + if false { + } else if z.HasExtensions() && z.EncExt(yy2890) { + } else { + z.EncFallback(yy2890) + } + } + } + if yyr2880 || yy2arr2880 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2893 := z.EncBinary() + _ = yym2893 + if false { + } else { + h.encSliceEndpoints(([]Endpoints)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2894 := z.EncBinary() + _ = yym2894 + if false { + } else { + h.encSliceEndpoints(([]Endpoints)(x.Items), e) + } + } + } + if yyr2880 || yy2arr2880 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EndpointsList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2895 := z.DecBinary() + _ = yym2895 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2896 := r.ContainerType() + if yyct2896 == codecSelferValueTypeMap1234 { + yyl2896 := r.ReadMapStart() + if yyl2896 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2896, d) + } + } else if yyct2896 == codecSelferValueTypeArray1234 { + yyl2896 := r.ReadArrayStart() + if yyl2896 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2896, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EndpointsList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2897Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2897Slc + var yyhl2897 bool = l >= 0 + for yyj2897 := 0; ; yyj2897++ { + if yyhl2897 { + if yyj2897 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2897Slc = r.DecodeBytes(yys2897Slc, true, true) + yys2897 := string(yys2897Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2897 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2900 := &x.ListMeta + yym2901 := z.DecBinary() + _ = yym2901 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2900) { + } else { + z.DecFallback(yyv2900, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2902 := &x.Items + yym2903 := z.DecBinary() + _ = yym2903 + if false { + } else { + h.decSliceEndpoints((*[]Endpoints)(yyv2902), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2897) + } // end switch yys2897 + } // end for yyj2897 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EndpointsList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2904 int + var yyb2904 bool + var yyhl2904 bool = l >= 0 + yyj2904++ + if yyhl2904 { + yyb2904 = yyj2904 > l + } else { + yyb2904 = r.CheckBreak() + } + if yyb2904 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2904++ + if yyhl2904 { + yyb2904 = yyj2904 > l + } else { + yyb2904 = r.CheckBreak() + } + if yyb2904 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2904++ + if yyhl2904 { + yyb2904 = yyj2904 > l + } else { + yyb2904 = r.CheckBreak() + } + if yyb2904 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2907 := &x.ListMeta + yym2908 := z.DecBinary() + _ = yym2908 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2907) { + } else { + z.DecFallback(yyv2907, false) + } + } + yyj2904++ + if yyhl2904 { + yyb2904 = yyj2904 > l + } else { + yyb2904 = r.CheckBreak() + } + if yyb2904 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2909 := &x.Items + yym2910 := z.DecBinary() + _ = yym2910 + if false { + } else { + h.decSliceEndpoints((*[]Endpoints)(yyv2909), d) + } + } + for { + yyj2904++ + if yyhl2904 { + yyb2904 = yyj2904 > l + } else { + yyb2904 = r.CheckBreak() + } + if yyb2904 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2904-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2911 := z.EncBinary() + _ = yym2911 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2912 := !z.EncBinary() + yy2arr2912 := z.EncBasicHandle().StructToArray + var yyq2912 [4]bool + _, _, _ = yysep2912, yyq2912, yy2arr2912 + const yyr2912 bool = false + yyq2912[0] = x.PodCIDR != "" + yyq2912[1] = x.ExternalID != "" + yyq2912[2] = x.ProviderID != "" + yyq2912[3] = x.Unschedulable != false + var yynn2912 int + if yyr2912 || yy2arr2912 { + r.EncodeArrayStart(4) + } else { + yynn2912 = 0 + for _, b := range yyq2912 { + if b { + yynn2912++ + } + } + r.EncodeMapStart(yynn2912) + yynn2912 = 0 + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2912[0] { + yym2914 := z.EncBinary() + _ = yym2914 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PodCIDR)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2912[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podCIDR")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2915 := z.EncBinary() + _ = yym2915 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PodCIDR)) + } + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2912[1] { + yym2917 := z.EncBinary() + _ = yym2917 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ExternalID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2912[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("externalID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2918 := z.EncBinary() + _ = yym2918 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ExternalID)) + } + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2912[2] { + yym2920 := z.EncBinary() + _ = yym2920 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ProviderID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2912[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("providerID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2921 := z.EncBinary() + _ = yym2921 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ProviderID)) + } + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2912[3] { + yym2923 := z.EncBinary() + _ = yym2923 + if false { + } else { + r.EncodeBool(bool(x.Unschedulable)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq2912[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("unschedulable")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2924 := z.EncBinary() + _ = yym2924 + if false { + } else { + r.EncodeBool(bool(x.Unschedulable)) + } + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2925 := z.DecBinary() + _ = yym2925 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2926 := r.ContainerType() + if yyct2926 == codecSelferValueTypeMap1234 { + yyl2926 := r.ReadMapStart() + if yyl2926 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2926, d) + } + } else if yyct2926 == codecSelferValueTypeArray1234 { + yyl2926 := r.ReadArrayStart() + if yyl2926 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2926, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2927Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2927Slc + var yyhl2927 bool = l >= 0 + for yyj2927 := 0; ; yyj2927++ { + if yyhl2927 { + if yyj2927 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2927Slc = r.DecodeBytes(yys2927Slc, true, true) + yys2927 := string(yys2927Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2927 { + case "podCIDR": + if r.TryDecodeAsNil() { + x.PodCIDR = "" + } else { + x.PodCIDR = string(r.DecodeString()) + } + case "externalID": + if r.TryDecodeAsNil() { + x.ExternalID = "" + } else { + x.ExternalID = string(r.DecodeString()) + } + case "providerID": + if r.TryDecodeAsNil() { + x.ProviderID = "" + } else { + x.ProviderID = string(r.DecodeString()) + } + case "unschedulable": + if r.TryDecodeAsNil() { + x.Unschedulable = false + } else { + x.Unschedulable = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys2927) + } // end switch yys2927 + } // end for yyj2927 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2932 int + var yyb2932 bool + var yyhl2932 bool = l >= 0 + yyj2932++ + if yyhl2932 { + yyb2932 = yyj2932 > l + } else { + yyb2932 = r.CheckBreak() + } + if yyb2932 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodCIDR = "" + } else { + x.PodCIDR = string(r.DecodeString()) + } + yyj2932++ + if yyhl2932 { + yyb2932 = yyj2932 > l + } else { + yyb2932 = r.CheckBreak() + } + if yyb2932 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ExternalID = "" + } else { + x.ExternalID = string(r.DecodeString()) + } + yyj2932++ + if yyhl2932 { + yyb2932 = yyj2932 > l + } else { + yyb2932 = r.CheckBreak() + } + if yyb2932 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ProviderID = "" + } else { + x.ProviderID = string(r.DecodeString()) + } + yyj2932++ + if yyhl2932 { + yyb2932 = yyj2932 > l + } else { + yyb2932 = r.CheckBreak() + } + if yyb2932 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Unschedulable = false + } else { + x.Unschedulable = bool(r.DecodeBool()) + } + for { + yyj2932++ + if yyhl2932 { + yyb2932 = yyj2932 > l + } else { + yyb2932 = r.CheckBreak() + } + if yyb2932 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2932-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DaemonEndpoint) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2937 := z.EncBinary() + _ = yym2937 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2938 := !z.EncBinary() + yy2arr2938 := z.EncBasicHandle().StructToArray + var yyq2938 [1]bool + _, _, _ = yysep2938, yyq2938, yy2arr2938 + const yyr2938 bool = false + var yynn2938 int + if yyr2938 || yy2arr2938 { + r.EncodeArrayStart(1) + } else { + yynn2938 = 1 + for _, b := range yyq2938 { + if b { + yynn2938++ + } + } + r.EncodeMapStart(yynn2938) + yynn2938 = 0 + } + if yyr2938 || yy2arr2938 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2940 := z.EncBinary() + _ = yym2940 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2941 := z.EncBinary() + _ = yym2941 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } + if yyr2938 || yy2arr2938 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DaemonEndpoint) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2942 := z.DecBinary() + _ = yym2942 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2943 := r.ContainerType() + if yyct2943 == codecSelferValueTypeMap1234 { + yyl2943 := r.ReadMapStart() + if yyl2943 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2943, d) + } + } else if yyct2943 == codecSelferValueTypeArray1234 { + yyl2943 := r.ReadArrayStart() + if yyl2943 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2943, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DaemonEndpoint) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2944Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2944Slc + var yyhl2944 bool = l >= 0 + for yyj2944 := 0; ; yyj2944++ { + if yyhl2944 { + if yyj2944 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2944Slc = r.DecodeBytes(yys2944Slc, true, true) + yys2944 := string(yys2944Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2944 { + case "Port": + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys2944) + } // end switch yys2944 + } // end for yyj2944 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DaemonEndpoint) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2946 int + var yyb2946 bool + var yyhl2946 bool = l >= 0 + yyj2946++ + if yyhl2946 { + yyb2946 = yyj2946 > l + } else { + yyb2946 = r.CheckBreak() + } + if yyb2946 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + for { + yyj2946++ + if yyhl2946 { + yyb2946 = yyj2946 > l + } else { + yyb2946 = r.CheckBreak() + } + if yyb2946 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2946-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeDaemonEndpoints) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2948 := z.EncBinary() + _ = yym2948 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2949 := !z.EncBinary() + yy2arr2949 := z.EncBasicHandle().StructToArray + var yyq2949 [1]bool + _, _, _ = yysep2949, yyq2949, yy2arr2949 + const yyr2949 bool = false + yyq2949[0] = true + var yynn2949 int + if yyr2949 || yy2arr2949 { + r.EncodeArrayStart(1) + } else { + yynn2949 = 0 + for _, b := range yyq2949 { + if b { + yynn2949++ + } + } + r.EncodeMapStart(yynn2949) + yynn2949 = 0 + } + if yyr2949 || yy2arr2949 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2949[0] { + yy2951 := &x.KubeletEndpoint + yy2951.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2949[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kubeletEndpoint")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2952 := &x.KubeletEndpoint + yy2952.CodecEncodeSelf(e) + } + } + if yyr2949 || yy2arr2949 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeDaemonEndpoints) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2953 := z.DecBinary() + _ = yym2953 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2954 := r.ContainerType() + if yyct2954 == codecSelferValueTypeMap1234 { + yyl2954 := r.ReadMapStart() + if yyl2954 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2954, d) + } + } else if yyct2954 == codecSelferValueTypeArray1234 { + yyl2954 := r.ReadArrayStart() + if yyl2954 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2954, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeDaemonEndpoints) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2955Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2955Slc + var yyhl2955 bool = l >= 0 + for yyj2955 := 0; ; yyj2955++ { + if yyhl2955 { + if yyj2955 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2955Slc = r.DecodeBytes(yys2955Slc, true, true) + yys2955 := string(yys2955Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2955 { + case "kubeletEndpoint": + if r.TryDecodeAsNil() { + x.KubeletEndpoint = DaemonEndpoint{} + } else { + yyv2956 := &x.KubeletEndpoint + yyv2956.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2955) + } // end switch yys2955 + } // end for yyj2955 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeDaemonEndpoints) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2957 int + var yyb2957 bool + var yyhl2957 bool = l >= 0 + yyj2957++ + if yyhl2957 { + yyb2957 = yyj2957 > l + } else { + yyb2957 = r.CheckBreak() + } + if yyb2957 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.KubeletEndpoint = DaemonEndpoint{} + } else { + yyv2958 := &x.KubeletEndpoint + yyv2958.CodecDecodeSelf(d) + } + for { + yyj2957++ + if yyhl2957 { + yyb2957 = yyj2957 > l + } else { + yyb2957 = r.CheckBreak() + } + if yyb2957 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2957-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeSystemInfo) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2959 := z.EncBinary() + _ = yym2959 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2960 := !z.EncBinary() + yy2arr2960 := z.EncBasicHandle().StructToArray + var yyq2960 [10]bool + _, _, _ = yysep2960, yyq2960, yy2arr2960 + const yyr2960 bool = false + var yynn2960 int + if yyr2960 || yy2arr2960 { + r.EncodeArrayStart(10) + } else { + yynn2960 = 10 + for _, b := range yyq2960 { + if b { + yynn2960++ + } + } + r.EncodeMapStart(yynn2960) + yynn2960 = 0 + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2962 := z.EncBinary() + _ = yym2962 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.MachineID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("machineID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2963 := z.EncBinary() + _ = yym2963 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.MachineID)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2965 := z.EncBinary() + _ = yym2965 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SystemUUID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("systemUUID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2966 := z.EncBinary() + _ = yym2966 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SystemUUID)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2968 := z.EncBinary() + _ = yym2968 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.BootID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("bootID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2969 := z.EncBinary() + _ = yym2969 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.BootID)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2971 := z.EncBinary() + _ = yym2971 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KernelVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kernelVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2972 := z.EncBinary() + _ = yym2972 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KernelVersion)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2974 := z.EncBinary() + _ = yym2974 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.OSImage)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("osImage")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2975 := z.EncBinary() + _ = yym2975 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.OSImage)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2977 := z.EncBinary() + _ = yym2977 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerRuntimeVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerRuntimeVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2978 := z.EncBinary() + _ = yym2978 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerRuntimeVersion)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2980 := z.EncBinary() + _ = yym2980 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KubeletVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kubeletVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2981 := z.EncBinary() + _ = yym2981 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KubeletVersion)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2983 := z.EncBinary() + _ = yym2983 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KubeProxyVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kubeProxyVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2984 := z.EncBinary() + _ = yym2984 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KubeProxyVersion)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2986 := z.EncBinary() + _ = yym2986 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.OperatingSystem)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("operatingSystem")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2987 := z.EncBinary() + _ = yym2987 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.OperatingSystem)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2989 := z.EncBinary() + _ = yym2989 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Architecture)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("architecture")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2990 := z.EncBinary() + _ = yym2990 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Architecture)) + } + } + if yyr2960 || yy2arr2960 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSystemInfo) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2991 := z.DecBinary() + _ = yym2991 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2992 := r.ContainerType() + if yyct2992 == codecSelferValueTypeMap1234 { + yyl2992 := r.ReadMapStart() + if yyl2992 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2992, d) + } + } else if yyct2992 == codecSelferValueTypeArray1234 { + yyl2992 := r.ReadArrayStart() + if yyl2992 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2992, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSystemInfo) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2993Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2993Slc + var yyhl2993 bool = l >= 0 + for yyj2993 := 0; ; yyj2993++ { + if yyhl2993 { + if yyj2993 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2993Slc = r.DecodeBytes(yys2993Slc, true, true) + yys2993 := string(yys2993Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2993 { + case "machineID": + if r.TryDecodeAsNil() { + x.MachineID = "" + } else { + x.MachineID = string(r.DecodeString()) + } + case "systemUUID": + if r.TryDecodeAsNil() { + x.SystemUUID = "" + } else { + x.SystemUUID = string(r.DecodeString()) + } + case "bootID": + if r.TryDecodeAsNil() { + x.BootID = "" + } else { + x.BootID = string(r.DecodeString()) + } + case "kernelVersion": + if r.TryDecodeAsNil() { + x.KernelVersion = "" + } else { + x.KernelVersion = string(r.DecodeString()) + } + case "osImage": + if r.TryDecodeAsNil() { + x.OSImage = "" + } else { + x.OSImage = string(r.DecodeString()) + } + case "containerRuntimeVersion": + if r.TryDecodeAsNil() { + x.ContainerRuntimeVersion = "" + } else { + x.ContainerRuntimeVersion = string(r.DecodeString()) + } + case "kubeletVersion": + if r.TryDecodeAsNil() { + x.KubeletVersion = "" + } else { + x.KubeletVersion = string(r.DecodeString()) + } + case "kubeProxyVersion": + if r.TryDecodeAsNil() { + x.KubeProxyVersion = "" + } else { + x.KubeProxyVersion = string(r.DecodeString()) + } + case "operatingSystem": + if r.TryDecodeAsNil() { + x.OperatingSystem = "" + } else { + x.OperatingSystem = string(r.DecodeString()) + } + case "architecture": + if r.TryDecodeAsNil() { + x.Architecture = "" + } else { + x.Architecture = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2993) + } // end switch yys2993 + } // end for yyj2993 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSystemInfo) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3004 int + var yyb3004 bool + var yyhl3004 bool = l >= 0 + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MachineID = "" + } else { + x.MachineID = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SystemUUID = "" + } else { + x.SystemUUID = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.BootID = "" + } else { + x.BootID = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.KernelVersion = "" + } else { + x.KernelVersion = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.OSImage = "" + } else { + x.OSImage = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerRuntimeVersion = "" + } else { + x.ContainerRuntimeVersion = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.KubeletVersion = "" + } else { + x.KubeletVersion = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.KubeProxyVersion = "" + } else { + x.KubeProxyVersion = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.OperatingSystem = "" + } else { + x.OperatingSystem = string(r.DecodeString()) + } + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Architecture = "" + } else { + x.Architecture = string(r.DecodeString()) + } + for { + yyj3004++ + if yyhl3004 { + yyb3004 = yyj3004 > l + } else { + yyb3004 = r.CheckBreak() + } + if yyb3004 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3004-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3015 := z.EncBinary() + _ = yym3015 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3016 := !z.EncBinary() + yy2arr3016 := z.EncBasicHandle().StructToArray + var yyq3016 [10]bool + _, _, _ = yysep3016, yyq3016, yy2arr3016 + const yyr3016 bool = false + yyq3016[0] = len(x.Capacity) != 0 + yyq3016[1] = len(x.Allocatable) != 0 + yyq3016[2] = x.Phase != "" + yyq3016[3] = len(x.Conditions) != 0 + yyq3016[4] = len(x.Addresses) != 0 + yyq3016[5] = true + yyq3016[6] = true + yyq3016[7] = len(x.Images) != 0 + yyq3016[8] = len(x.VolumesInUse) != 0 + yyq3016[9] = len(x.VolumesAttached) != 0 + var yynn3016 int + if yyr3016 || yy2arr3016 { + r.EncodeArrayStart(10) + } else { + yynn3016 = 0 + for _, b := range yyq3016 { + if b { + yynn3016++ + } + } + r.EncodeMapStart(yynn3016) + yynn3016 = 0 + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[0] { + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3016[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capacity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[1] { + if x.Allocatable == nil { + r.EncodeNil() + } else { + x.Allocatable.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3016[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("allocatable")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Allocatable == nil { + r.EncodeNil() + } else { + x.Allocatable.CodecEncodeSelf(e) + } + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[2] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3016[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[3] { + if x.Conditions == nil { + r.EncodeNil() + } else { + yym3021 := z.EncBinary() + _ = yym3021 + if false { + } else { + h.encSliceNodeCondition(([]NodeCondition)(x.Conditions), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3016[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("conditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Conditions == nil { + r.EncodeNil() + } else { + yym3022 := z.EncBinary() + _ = yym3022 + if false { + } else { + h.encSliceNodeCondition(([]NodeCondition)(x.Conditions), e) + } + } + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[4] { + if x.Addresses == nil { + r.EncodeNil() + } else { + yym3024 := z.EncBinary() + _ = yym3024 + if false { + } else { + h.encSliceNodeAddress(([]NodeAddress)(x.Addresses), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3016[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("addresses")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Addresses == nil { + r.EncodeNil() + } else { + yym3025 := z.EncBinary() + _ = yym3025 + if false { + } else { + h.encSliceNodeAddress(([]NodeAddress)(x.Addresses), e) + } + } + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[5] { + yy3027 := &x.DaemonEndpoints + yy3027.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3016[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("daemonEndpoints")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3028 := &x.DaemonEndpoints + yy3028.CodecEncodeSelf(e) + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[6] { + yy3030 := &x.NodeInfo + yy3030.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3016[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeInfo")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3031 := &x.NodeInfo + yy3031.CodecEncodeSelf(e) + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[7] { + if x.Images == nil { + r.EncodeNil() + } else { + yym3033 := z.EncBinary() + _ = yym3033 + if false { + } else { + h.encSliceContainerImage(([]ContainerImage)(x.Images), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3016[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("images")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Images == nil { + r.EncodeNil() + } else { + yym3034 := z.EncBinary() + _ = yym3034 + if false { + } else { + h.encSliceContainerImage(([]ContainerImage)(x.Images), e) + } + } + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[8] { + if x.VolumesInUse == nil { + r.EncodeNil() + } else { + yym3036 := z.EncBinary() + _ = yym3036 + if false { + } else { + h.encSliceUniqueVolumeName(([]UniqueVolumeName)(x.VolumesInUse), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3016[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumesInUse")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VolumesInUse == nil { + r.EncodeNil() + } else { + yym3037 := z.EncBinary() + _ = yym3037 + if false { + } else { + h.encSliceUniqueVolumeName(([]UniqueVolumeName)(x.VolumesInUse), e) + } + } + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3016[9] { + if x.VolumesAttached == nil { + r.EncodeNil() + } else { + yym3039 := z.EncBinary() + _ = yym3039 + if false { + } else { + h.encSliceAttachedVolume(([]AttachedVolume)(x.VolumesAttached), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3016[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumesAttached")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VolumesAttached == nil { + r.EncodeNil() + } else { + yym3040 := z.EncBinary() + _ = yym3040 + if false { + } else { + h.encSliceAttachedVolume(([]AttachedVolume)(x.VolumesAttached), e) + } + } + } + } + if yyr3016 || yy2arr3016 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3041 := z.DecBinary() + _ = yym3041 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3042 := r.ContainerType() + if yyct3042 == codecSelferValueTypeMap1234 { + yyl3042 := r.ReadMapStart() + if yyl3042 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3042, d) + } + } else if yyct3042 == codecSelferValueTypeArray1234 { + yyl3042 := r.ReadArrayStart() + if yyl3042 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3042, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3043Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3043Slc + var yyhl3043 bool = l >= 0 + for yyj3043 := 0; ; yyj3043++ { + if yyhl3043 { + if yyj3043 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3043Slc = r.DecodeBytes(yys3043Slc, true, true) + yys3043 := string(yys3043Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3043 { + case "capacity": + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv3044 := &x.Capacity + yyv3044.CodecDecodeSelf(d) + } + case "allocatable": + if r.TryDecodeAsNil() { + x.Allocatable = nil + } else { + yyv3045 := &x.Allocatable + yyv3045.CodecDecodeSelf(d) + } + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = NodePhase(r.DecodeString()) + } + case "conditions": + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv3047 := &x.Conditions + yym3048 := z.DecBinary() + _ = yym3048 + if false { + } else { + h.decSliceNodeCondition((*[]NodeCondition)(yyv3047), d) + } + } + case "addresses": + if r.TryDecodeAsNil() { + x.Addresses = nil + } else { + yyv3049 := &x.Addresses + yym3050 := z.DecBinary() + _ = yym3050 + if false { + } else { + h.decSliceNodeAddress((*[]NodeAddress)(yyv3049), d) + } + } + case "daemonEndpoints": + if r.TryDecodeAsNil() { + x.DaemonEndpoints = NodeDaemonEndpoints{} + } else { + yyv3051 := &x.DaemonEndpoints + yyv3051.CodecDecodeSelf(d) + } + case "nodeInfo": + if r.TryDecodeAsNil() { + x.NodeInfo = NodeSystemInfo{} + } else { + yyv3052 := &x.NodeInfo + yyv3052.CodecDecodeSelf(d) + } + case "images": + if r.TryDecodeAsNil() { + x.Images = nil + } else { + yyv3053 := &x.Images + yym3054 := z.DecBinary() + _ = yym3054 + if false { + } else { + h.decSliceContainerImage((*[]ContainerImage)(yyv3053), d) + } + } + case "volumesInUse": + if r.TryDecodeAsNil() { + x.VolumesInUse = nil + } else { + yyv3055 := &x.VolumesInUse + yym3056 := z.DecBinary() + _ = yym3056 + if false { + } else { + h.decSliceUniqueVolumeName((*[]UniqueVolumeName)(yyv3055), d) + } + } + case "volumesAttached": + if r.TryDecodeAsNil() { + x.VolumesAttached = nil + } else { + yyv3057 := &x.VolumesAttached + yym3058 := z.DecBinary() + _ = yym3058 + if false { + } else { + h.decSliceAttachedVolume((*[]AttachedVolume)(yyv3057), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3043) + } // end switch yys3043 + } // end for yyj3043 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3059 int + var yyb3059 bool + var yyhl3059 bool = l >= 0 + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv3060 := &x.Capacity + yyv3060.CodecDecodeSelf(d) + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Allocatable = nil + } else { + yyv3061 := &x.Allocatable + yyv3061.CodecDecodeSelf(d) + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = NodePhase(r.DecodeString()) + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv3063 := &x.Conditions + yym3064 := z.DecBinary() + _ = yym3064 + if false { + } else { + h.decSliceNodeCondition((*[]NodeCondition)(yyv3063), d) + } + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Addresses = nil + } else { + yyv3065 := &x.Addresses + yym3066 := z.DecBinary() + _ = yym3066 + if false { + } else { + h.decSliceNodeAddress((*[]NodeAddress)(yyv3065), d) + } + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DaemonEndpoints = NodeDaemonEndpoints{} + } else { + yyv3067 := &x.DaemonEndpoints + yyv3067.CodecDecodeSelf(d) + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodeInfo = NodeSystemInfo{} + } else { + yyv3068 := &x.NodeInfo + yyv3068.CodecDecodeSelf(d) + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Images = nil + } else { + yyv3069 := &x.Images + yym3070 := z.DecBinary() + _ = yym3070 + if false { + } else { + h.decSliceContainerImage((*[]ContainerImage)(yyv3069), d) + } + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumesInUse = nil + } else { + yyv3071 := &x.VolumesInUse + yym3072 := z.DecBinary() + _ = yym3072 + if false { + } else { + h.decSliceUniqueVolumeName((*[]UniqueVolumeName)(yyv3071), d) + } + } + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumesAttached = nil + } else { + yyv3073 := &x.VolumesAttached + yym3074 := z.DecBinary() + _ = yym3074 + if false { + } else { + h.decSliceAttachedVolume((*[]AttachedVolume)(yyv3073), d) + } + } + for { + yyj3059++ + if yyhl3059 { + yyb3059 = yyj3059 > l + } else { + yyb3059 = r.CheckBreak() + } + if yyb3059 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3059-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x UniqueVolumeName) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3075 := z.EncBinary() + _ = yym3075 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *UniqueVolumeName) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3076 := z.DecBinary() + _ = yym3076 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *AttachedVolume) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3077 := z.EncBinary() + _ = yym3077 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3078 := !z.EncBinary() + yy2arr3078 := z.EncBasicHandle().StructToArray + var yyq3078 [2]bool + _, _, _ = yysep3078, yyq3078, yy2arr3078 + const yyr3078 bool = false + var yynn3078 int + if yyr3078 || yy2arr3078 { + r.EncodeArrayStart(2) + } else { + yynn3078 = 2 + for _, b := range yyq3078 { + if b { + yynn3078++ + } + } + r.EncodeMapStart(yynn3078) + yynn3078 = 0 + } + if yyr3078 || yy2arr3078 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Name.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Name.CodecEncodeSelf(e) + } + if yyr3078 || yy2arr3078 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3081 := z.EncBinary() + _ = yym3081 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DevicePath)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("devicePath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3082 := z.EncBinary() + _ = yym3082 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DevicePath)) + } + } + if yyr3078 || yy2arr3078 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AttachedVolume) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3083 := z.DecBinary() + _ = yym3083 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3084 := r.ContainerType() + if yyct3084 == codecSelferValueTypeMap1234 { + yyl3084 := r.ReadMapStart() + if yyl3084 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3084, d) + } + } else if yyct3084 == codecSelferValueTypeArray1234 { + yyl3084 := r.ReadArrayStart() + if yyl3084 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3084, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AttachedVolume) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3085Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3085Slc + var yyhl3085 bool = l >= 0 + for yyj3085 := 0; ; yyj3085++ { + if yyhl3085 { + if yyj3085 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3085Slc = r.DecodeBytes(yys3085Slc, true, true) + yys3085 := string(yys3085Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3085 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = UniqueVolumeName(r.DecodeString()) + } + case "devicePath": + if r.TryDecodeAsNil() { + x.DevicePath = "" + } else { + x.DevicePath = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3085) + } // end switch yys3085 + } // end for yyj3085 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AttachedVolume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3088 int + var yyb3088 bool + var yyhl3088 bool = l >= 0 + yyj3088++ + if yyhl3088 { + yyb3088 = yyj3088 > l + } else { + yyb3088 = r.CheckBreak() + } + if yyb3088 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = UniqueVolumeName(r.DecodeString()) + } + yyj3088++ + if yyhl3088 { + yyb3088 = yyj3088 > l + } else { + yyb3088 = r.CheckBreak() + } + if yyb3088 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DevicePath = "" + } else { + x.DevicePath = string(r.DecodeString()) + } + for { + yyj3088++ + if yyhl3088 { + yyb3088 = yyj3088 > l + } else { + yyb3088 = r.CheckBreak() + } + if yyb3088 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3088-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *AvoidPods) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3091 := z.EncBinary() + _ = yym3091 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3092 := !z.EncBinary() + yy2arr3092 := z.EncBasicHandle().StructToArray + var yyq3092 [1]bool + _, _, _ = yysep3092, yyq3092, yy2arr3092 + const yyr3092 bool = false + yyq3092[0] = len(x.PreferAvoidPods) != 0 + var yynn3092 int + if yyr3092 || yy2arr3092 { + r.EncodeArrayStart(1) + } else { + yynn3092 = 0 + for _, b := range yyq3092 { + if b { + yynn3092++ + } + } + r.EncodeMapStart(yynn3092) + yynn3092 = 0 + } + if yyr3092 || yy2arr3092 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3092[0] { + if x.PreferAvoidPods == nil { + r.EncodeNil() + } else { + yym3094 := z.EncBinary() + _ = yym3094 + if false { + } else { + h.encSlicePreferAvoidPodsEntry(([]PreferAvoidPodsEntry)(x.PreferAvoidPods), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3092[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preferAvoidPods")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreferAvoidPods == nil { + r.EncodeNil() + } else { + yym3095 := z.EncBinary() + _ = yym3095 + if false { + } else { + h.encSlicePreferAvoidPodsEntry(([]PreferAvoidPodsEntry)(x.PreferAvoidPods), e) + } + } + } + } + if yyr3092 || yy2arr3092 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AvoidPods) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3096 := z.DecBinary() + _ = yym3096 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3097 := r.ContainerType() + if yyct3097 == codecSelferValueTypeMap1234 { + yyl3097 := r.ReadMapStart() + if yyl3097 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3097, d) + } + } else if yyct3097 == codecSelferValueTypeArray1234 { + yyl3097 := r.ReadArrayStart() + if yyl3097 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3097, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AvoidPods) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3098Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3098Slc + var yyhl3098 bool = l >= 0 + for yyj3098 := 0; ; yyj3098++ { + if yyhl3098 { + if yyj3098 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3098Slc = r.DecodeBytes(yys3098Slc, true, true) + yys3098 := string(yys3098Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3098 { + case "preferAvoidPods": + if r.TryDecodeAsNil() { + x.PreferAvoidPods = nil + } else { + yyv3099 := &x.PreferAvoidPods + yym3100 := z.DecBinary() + _ = yym3100 + if false { + } else { + h.decSlicePreferAvoidPodsEntry((*[]PreferAvoidPodsEntry)(yyv3099), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3098) + } // end switch yys3098 + } // end for yyj3098 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AvoidPods) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3101 int + var yyb3101 bool + var yyhl3101 bool = l >= 0 + yyj3101++ + if yyhl3101 { + yyb3101 = yyj3101 > l + } else { + yyb3101 = r.CheckBreak() + } + if yyb3101 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PreferAvoidPods = nil + } else { + yyv3102 := &x.PreferAvoidPods + yym3103 := z.DecBinary() + _ = yym3103 + if false { + } else { + h.decSlicePreferAvoidPodsEntry((*[]PreferAvoidPodsEntry)(yyv3102), d) + } + } + for { + yyj3101++ + if yyhl3101 { + yyb3101 = yyj3101 > l + } else { + yyb3101 = r.CheckBreak() + } + if yyb3101 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3101-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PreferAvoidPodsEntry) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3104 := z.EncBinary() + _ = yym3104 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3105 := !z.EncBinary() + yy2arr3105 := z.EncBasicHandle().StructToArray + var yyq3105 [4]bool + _, _, _ = yysep3105, yyq3105, yy2arr3105 + const yyr3105 bool = false + yyq3105[1] = true + yyq3105[2] = x.Reason != "" + yyq3105[3] = x.Message != "" + var yynn3105 int + if yyr3105 || yy2arr3105 { + r.EncodeArrayStart(4) + } else { + yynn3105 = 1 + for _, b := range yyq3105 { + if b { + yynn3105++ + } + } + r.EncodeMapStart(yynn3105) + yynn3105 = 0 + } + if yyr3105 || yy2arr3105 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy3107 := &x.PodSignature + yy3107.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podSignature")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3108 := &x.PodSignature + yy3108.CodecEncodeSelf(e) + } + if yyr3105 || yy2arr3105 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3105[1] { + yy3110 := &x.EvictionTime + yym3111 := z.EncBinary() + _ = yym3111 + if false { + } else if z.HasExtensions() && z.EncExt(yy3110) { + } else if yym3111 { + z.EncBinaryMarshal(yy3110) + } else if !yym3111 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3110) + } else { + z.EncFallback(yy3110) + } + } else { + r.EncodeNil() + } + } else { + if yyq3105[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("evictionTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3112 := &x.EvictionTime + yym3113 := z.EncBinary() + _ = yym3113 + if false { + } else if z.HasExtensions() && z.EncExt(yy3112) { + } else if yym3113 { + z.EncBinaryMarshal(yy3112) + } else if !yym3113 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3112) + } else { + z.EncFallback(yy3112) + } + } + } + if yyr3105 || yy2arr3105 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3105[2] { + yym3115 := z.EncBinary() + _ = yym3115 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3105[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3116 := z.EncBinary() + _ = yym3116 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr3105 || yy2arr3105 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3105[3] { + yym3118 := z.EncBinary() + _ = yym3118 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3105[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3119 := z.EncBinary() + _ = yym3119 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr3105 || yy2arr3105 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PreferAvoidPodsEntry) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3120 := z.DecBinary() + _ = yym3120 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3121 := r.ContainerType() + if yyct3121 == codecSelferValueTypeMap1234 { + yyl3121 := r.ReadMapStart() + if yyl3121 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3121, d) + } + } else if yyct3121 == codecSelferValueTypeArray1234 { + yyl3121 := r.ReadArrayStart() + if yyl3121 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3121, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PreferAvoidPodsEntry) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3122Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3122Slc + var yyhl3122 bool = l >= 0 + for yyj3122 := 0; ; yyj3122++ { + if yyhl3122 { + if yyj3122 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3122Slc = r.DecodeBytes(yys3122Slc, true, true) + yys3122 := string(yys3122Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3122 { + case "podSignature": + if r.TryDecodeAsNil() { + x.PodSignature = PodSignature{} + } else { + yyv3123 := &x.PodSignature + yyv3123.CodecDecodeSelf(d) + } + case "evictionTime": + if r.TryDecodeAsNil() { + x.EvictionTime = pkg2_unversioned.Time{} + } else { + yyv3124 := &x.EvictionTime + yym3125 := z.DecBinary() + _ = yym3125 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3124) { + } else if yym3125 { + z.DecBinaryUnmarshal(yyv3124) + } else if !yym3125 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3124) + } else { + z.DecFallback(yyv3124, false) + } + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3122) + } // end switch yys3122 + } // end for yyj3122 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PreferAvoidPodsEntry) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3128 int + var yyb3128 bool + var yyhl3128 bool = l >= 0 + yyj3128++ + if yyhl3128 { + yyb3128 = yyj3128 > l + } else { + yyb3128 = r.CheckBreak() + } + if yyb3128 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodSignature = PodSignature{} + } else { + yyv3129 := &x.PodSignature + yyv3129.CodecDecodeSelf(d) + } + yyj3128++ + if yyhl3128 { + yyb3128 = yyj3128 > l + } else { + yyb3128 = r.CheckBreak() + } + if yyb3128 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.EvictionTime = pkg2_unversioned.Time{} + } else { + yyv3130 := &x.EvictionTime + yym3131 := z.DecBinary() + _ = yym3131 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3130) { + } else if yym3131 { + z.DecBinaryUnmarshal(yyv3130) + } else if !yym3131 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3130) + } else { + z.DecFallback(yyv3130, false) + } + } + yyj3128++ + if yyhl3128 { + yyb3128 = yyj3128 > l + } else { + yyb3128 = r.CheckBreak() + } + if yyb3128 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj3128++ + if yyhl3128 { + yyb3128 = yyj3128 > l + } else { + yyb3128 = r.CheckBreak() + } + if yyb3128 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj3128++ + if yyhl3128 { + yyb3128 = yyj3128 > l + } else { + yyb3128 = r.CheckBreak() + } + if yyb3128 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3128-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodSignature) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3134 := z.EncBinary() + _ = yym3134 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3135 := !z.EncBinary() + yy2arr3135 := z.EncBasicHandle().StructToArray + var yyq3135 [1]bool + _, _, _ = yysep3135, yyq3135, yy2arr3135 + const yyr3135 bool = false + yyq3135[0] = x.PodController != nil + var yynn3135 int + if yyr3135 || yy2arr3135 { + r.EncodeArrayStart(1) + } else { + yynn3135 = 0 + for _, b := range yyq3135 { + if b { + yynn3135++ + } + } + r.EncodeMapStart(yynn3135) + yynn3135 = 0 + } + if yyr3135 || yy2arr3135 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3135[0] { + if x.PodController == nil { + r.EncodeNil() + } else { + x.PodController.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3135[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podController")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PodController == nil { + r.EncodeNil() + } else { + x.PodController.CodecEncodeSelf(e) + } + } + } + if yyr3135 || yy2arr3135 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSignature) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3137 := z.DecBinary() + _ = yym3137 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3138 := r.ContainerType() + if yyct3138 == codecSelferValueTypeMap1234 { + yyl3138 := r.ReadMapStart() + if yyl3138 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3138, d) + } + } else if yyct3138 == codecSelferValueTypeArray1234 { + yyl3138 := r.ReadArrayStart() + if yyl3138 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3138, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSignature) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3139Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3139Slc + var yyhl3139 bool = l >= 0 + for yyj3139 := 0; ; yyj3139++ { + if yyhl3139 { + if yyj3139 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3139Slc = r.DecodeBytes(yys3139Slc, true, true) + yys3139 := string(yys3139Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3139 { + case "podController": + if r.TryDecodeAsNil() { + if x.PodController != nil { + x.PodController = nil + } + } else { + if x.PodController == nil { + x.PodController = new(OwnerReference) + } + x.PodController.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3139) + } // end switch yys3139 + } // end for yyj3139 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSignature) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3141 int + var yyb3141 bool + var yyhl3141 bool = l >= 0 + yyj3141++ + if yyhl3141 { + yyb3141 = yyj3141 > l + } else { + yyb3141 = r.CheckBreak() + } + if yyb3141 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PodController != nil { + x.PodController = nil + } + } else { + if x.PodController == nil { + x.PodController = new(OwnerReference) + } + x.PodController.CodecDecodeSelf(d) + } + for { + yyj3141++ + if yyhl3141 { + yyb3141 = yyj3141 > l + } else { + yyb3141 = r.CheckBreak() + } + if yyb3141 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3141-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerImage) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3143 := z.EncBinary() + _ = yym3143 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3144 := !z.EncBinary() + yy2arr3144 := z.EncBasicHandle().StructToArray + var yyq3144 [2]bool + _, _, _ = yysep3144, yyq3144, yy2arr3144 + const yyr3144 bool = false + yyq3144[1] = x.SizeBytes != 0 + var yynn3144 int + if yyr3144 || yy2arr3144 { + r.EncodeArrayStart(2) + } else { + yynn3144 = 1 + for _, b := range yyq3144 { + if b { + yynn3144++ + } + } + r.EncodeMapStart(yynn3144) + yynn3144 = 0 + } + if yyr3144 || yy2arr3144 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Names == nil { + r.EncodeNil() + } else { + yym3146 := z.EncBinary() + _ = yym3146 + if false { + } else { + z.F.EncSliceStringV(x.Names, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("names")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Names == nil { + r.EncodeNil() + } else { + yym3147 := z.EncBinary() + _ = yym3147 + if false { + } else { + z.F.EncSliceStringV(x.Names, false, e) + } + } + } + if yyr3144 || yy2arr3144 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3144[1] { + yym3149 := z.EncBinary() + _ = yym3149 + if false { + } else { + r.EncodeInt(int64(x.SizeBytes)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq3144[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("sizeBytes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3150 := z.EncBinary() + _ = yym3150 + if false { + } else { + r.EncodeInt(int64(x.SizeBytes)) + } + } + } + if yyr3144 || yy2arr3144 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerImage) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3151 := z.DecBinary() + _ = yym3151 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3152 := r.ContainerType() + if yyct3152 == codecSelferValueTypeMap1234 { + yyl3152 := r.ReadMapStart() + if yyl3152 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3152, d) + } + } else if yyct3152 == codecSelferValueTypeArray1234 { + yyl3152 := r.ReadArrayStart() + if yyl3152 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3152, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerImage) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3153Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3153Slc + var yyhl3153 bool = l >= 0 + for yyj3153 := 0; ; yyj3153++ { + if yyhl3153 { + if yyj3153 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3153Slc = r.DecodeBytes(yys3153Slc, true, true) + yys3153 := string(yys3153Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3153 { + case "names": + if r.TryDecodeAsNil() { + x.Names = nil + } else { + yyv3154 := &x.Names + yym3155 := z.DecBinary() + _ = yym3155 + if false { + } else { + z.F.DecSliceStringX(yyv3154, false, d) + } + } + case "sizeBytes": + if r.TryDecodeAsNil() { + x.SizeBytes = 0 + } else { + x.SizeBytes = int64(r.DecodeInt(64)) + } + default: + z.DecStructFieldNotFound(-1, yys3153) + } // end switch yys3153 + } // end for yyj3153 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerImage) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3157 int + var yyb3157 bool + var yyhl3157 bool = l >= 0 + yyj3157++ + if yyhl3157 { + yyb3157 = yyj3157 > l + } else { + yyb3157 = r.CheckBreak() + } + if yyb3157 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Names = nil + } else { + yyv3158 := &x.Names + yym3159 := z.DecBinary() + _ = yym3159 + if false { + } else { + z.F.DecSliceStringX(yyv3158, false, d) + } + } + yyj3157++ + if yyhl3157 { + yyb3157 = yyj3157 > l + } else { + yyb3157 = r.CheckBreak() + } + if yyb3157 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SizeBytes = 0 + } else { + x.SizeBytes = int64(r.DecodeInt(64)) + } + for { + yyj3157++ + if yyhl3157 { + yyb3157 = yyj3157 > l + } else { + yyb3157 = r.CheckBreak() + } + if yyb3157 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3157-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x NodePhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3161 := z.EncBinary() + _ = yym3161 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NodePhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3162 := z.DecBinary() + _ = yym3162 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x NodeConditionType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3163 := z.EncBinary() + _ = yym3163 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NodeConditionType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3164 := z.DecBinary() + _ = yym3164 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *NodeCondition) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3165 := z.EncBinary() + _ = yym3165 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3166 := !z.EncBinary() + yy2arr3166 := z.EncBasicHandle().StructToArray + var yyq3166 [6]bool + _, _, _ = yysep3166, yyq3166, yy2arr3166 + const yyr3166 bool = false + yyq3166[2] = true + yyq3166[3] = true + yyq3166[4] = x.Reason != "" + yyq3166[5] = x.Message != "" + var yynn3166 int + if yyr3166 || yy2arr3166 { + r.EncodeArrayStart(6) + } else { + yynn3166 = 2 + for _, b := range yyq3166 { + if b { + yynn3166++ + } + } + r.EncodeMapStart(yynn3166) + yynn3166 = 0 + } + if yyr3166 || yy2arr3166 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr3166 || yy2arr3166 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Status.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Status.CodecEncodeSelf(e) + } + if yyr3166 || yy2arr3166 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3166[2] { + yy3170 := &x.LastHeartbeatTime + yym3171 := z.EncBinary() + _ = yym3171 + if false { + } else if z.HasExtensions() && z.EncExt(yy3170) { + } else if yym3171 { + z.EncBinaryMarshal(yy3170) + } else if !yym3171 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3170) + } else { + z.EncFallback(yy3170) + } + } else { + r.EncodeNil() + } + } else { + if yyq3166[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastHeartbeatTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3172 := &x.LastHeartbeatTime + yym3173 := z.EncBinary() + _ = yym3173 + if false { + } else if z.HasExtensions() && z.EncExt(yy3172) { + } else if yym3173 { + z.EncBinaryMarshal(yy3172) + } else if !yym3173 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3172) + } else { + z.EncFallback(yy3172) + } + } + } + if yyr3166 || yy2arr3166 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3166[3] { + yy3175 := &x.LastTransitionTime + yym3176 := z.EncBinary() + _ = yym3176 + if false { + } else if z.HasExtensions() && z.EncExt(yy3175) { + } else if yym3176 { + z.EncBinaryMarshal(yy3175) + } else if !yym3176 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3175) + } else { + z.EncFallback(yy3175) + } + } else { + r.EncodeNil() + } + } else { + if yyq3166[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastTransitionTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3177 := &x.LastTransitionTime + yym3178 := z.EncBinary() + _ = yym3178 + if false { + } else if z.HasExtensions() && z.EncExt(yy3177) { + } else if yym3178 { + z.EncBinaryMarshal(yy3177) + } else if !yym3178 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3177) + } else { + z.EncFallback(yy3177) + } + } + } + if yyr3166 || yy2arr3166 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3166[4] { + yym3180 := z.EncBinary() + _ = yym3180 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3166[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3181 := z.EncBinary() + _ = yym3181 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr3166 || yy2arr3166 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3166[5] { + yym3183 := z.EncBinary() + _ = yym3183 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3166[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3184 := z.EncBinary() + _ = yym3184 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr3166 || yy2arr3166 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeCondition) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3185 := z.DecBinary() + _ = yym3185 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3186 := r.ContainerType() + if yyct3186 == codecSelferValueTypeMap1234 { + yyl3186 := r.ReadMapStart() + if yyl3186 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3186, d) + } + } else if yyct3186 == codecSelferValueTypeArray1234 { + yyl3186 := r.ReadArrayStart() + if yyl3186 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3186, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeCondition) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3187Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3187Slc + var yyhl3187 bool = l >= 0 + for yyj3187 := 0; ; yyj3187++ { + if yyhl3187 { + if yyj3187 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3187Slc = r.DecodeBytes(yys3187Slc, true, true) + yys3187 := string(yys3187Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3187 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = NodeConditionType(r.DecodeString()) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + case "lastHeartbeatTime": + if r.TryDecodeAsNil() { + x.LastHeartbeatTime = pkg2_unversioned.Time{} + } else { + yyv3190 := &x.LastHeartbeatTime + yym3191 := z.DecBinary() + _ = yym3191 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3190) { + } else if yym3191 { + z.DecBinaryUnmarshal(yyv3190) + } else if !yym3191 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3190) + } else { + z.DecFallback(yyv3190, false) + } + } + case "lastTransitionTime": + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg2_unversioned.Time{} + } else { + yyv3192 := &x.LastTransitionTime + yym3193 := z.DecBinary() + _ = yym3193 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3192) { + } else if yym3193 { + z.DecBinaryUnmarshal(yyv3192) + } else if !yym3193 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3192) + } else { + z.DecFallback(yyv3192, false) + } + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3187) + } // end switch yys3187 + } // end for yyj3187 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeCondition) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3196 int + var yyb3196 bool + var yyhl3196 bool = l >= 0 + yyj3196++ + if yyhl3196 { + yyb3196 = yyj3196 > l + } else { + yyb3196 = r.CheckBreak() + } + if yyb3196 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = NodeConditionType(r.DecodeString()) + } + yyj3196++ + if yyhl3196 { + yyb3196 = yyj3196 > l + } else { + yyb3196 = r.CheckBreak() + } + if yyb3196 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + yyj3196++ + if yyhl3196 { + yyb3196 = yyj3196 > l + } else { + yyb3196 = r.CheckBreak() + } + if yyb3196 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastHeartbeatTime = pkg2_unversioned.Time{} + } else { + yyv3199 := &x.LastHeartbeatTime + yym3200 := z.DecBinary() + _ = yym3200 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3199) { + } else if yym3200 { + z.DecBinaryUnmarshal(yyv3199) + } else if !yym3200 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3199) + } else { + z.DecFallback(yyv3199, false) + } + } + yyj3196++ + if yyhl3196 { + yyb3196 = yyj3196 > l + } else { + yyb3196 = r.CheckBreak() + } + if yyb3196 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg2_unversioned.Time{} + } else { + yyv3201 := &x.LastTransitionTime + yym3202 := z.DecBinary() + _ = yym3202 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3201) { + } else if yym3202 { + z.DecBinaryUnmarshal(yyv3201) + } else if !yym3202 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3201) + } else { + z.DecFallback(yyv3201, false) + } + } + yyj3196++ + if yyhl3196 { + yyb3196 = yyj3196 > l + } else { + yyb3196 = r.CheckBreak() + } + if yyb3196 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj3196++ + if yyhl3196 { + yyb3196 = yyj3196 > l + } else { + yyb3196 = r.CheckBreak() + } + if yyb3196 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj3196++ + if yyhl3196 { + yyb3196 = yyj3196 > l + } else { + yyb3196 = r.CheckBreak() + } + if yyb3196 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3196-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x NodeAddressType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3205 := z.EncBinary() + _ = yym3205 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NodeAddressType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3206 := z.DecBinary() + _ = yym3206 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *NodeAddress) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3207 := z.EncBinary() + _ = yym3207 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3208 := !z.EncBinary() + yy2arr3208 := z.EncBasicHandle().StructToArray + var yyq3208 [2]bool + _, _, _ = yysep3208, yyq3208, yy2arr3208 + const yyr3208 bool = false + var yynn3208 int + if yyr3208 || yy2arr3208 { + r.EncodeArrayStart(2) + } else { + yynn3208 = 2 + for _, b := range yyq3208 { + if b { + yynn3208++ + } + } + r.EncodeMapStart(yynn3208) + yynn3208 = 0 + } + if yyr3208 || yy2arr3208 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr3208 || yy2arr3208 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3211 := z.EncBinary() + _ = yym3211 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Address)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("address")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3212 := z.EncBinary() + _ = yym3212 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Address)) + } + } + if yyr3208 || yy2arr3208 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeAddress) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3213 := z.DecBinary() + _ = yym3213 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3214 := r.ContainerType() + if yyct3214 == codecSelferValueTypeMap1234 { + yyl3214 := r.ReadMapStart() + if yyl3214 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3214, d) + } + } else if yyct3214 == codecSelferValueTypeArray1234 { + yyl3214 := r.ReadArrayStart() + if yyl3214 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3214, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeAddress) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3215Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3215Slc + var yyhl3215 bool = l >= 0 + for yyj3215 := 0; ; yyj3215++ { + if yyhl3215 { + if yyj3215 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3215Slc = r.DecodeBytes(yys3215Slc, true, true) + yys3215 := string(yys3215Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3215 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = NodeAddressType(r.DecodeString()) + } + case "address": + if r.TryDecodeAsNil() { + x.Address = "" + } else { + x.Address = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3215) + } // end switch yys3215 + } // end for yyj3215 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeAddress) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3218 int + var yyb3218 bool + var yyhl3218 bool = l >= 0 + yyj3218++ + if yyhl3218 { + yyb3218 = yyj3218 > l + } else { + yyb3218 = r.CheckBreak() + } + if yyb3218 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = NodeAddressType(r.DecodeString()) + } + yyj3218++ + if yyhl3218 { + yyb3218 = yyj3218 > l + } else { + yyb3218 = r.CheckBreak() + } + if yyb3218 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Address = "" + } else { + x.Address = string(r.DecodeString()) + } + for { + yyj3218++ + if yyhl3218 { + yyb3218 = yyj3218 > l + } else { + yyb3218 = r.CheckBreak() + } + if yyb3218 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3218-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeResources) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3221 := z.EncBinary() + _ = yym3221 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3222 := !z.EncBinary() + yy2arr3222 := z.EncBasicHandle().StructToArray + var yyq3222 [1]bool + _, _, _ = yysep3222, yyq3222, yy2arr3222 + const yyr3222 bool = false + yyq3222[0] = len(x.Capacity) != 0 + var yynn3222 int + if yyr3222 || yy2arr3222 { + r.EncodeArrayStart(1) + } else { + yynn3222 = 0 + for _, b := range yyq3222 { + if b { + yynn3222++ + } + } + r.EncodeMapStart(yynn3222) + yynn3222 = 0 + } + if yyr3222 || yy2arr3222 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3222[0] { + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3222[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capacity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } + } + if yyr3222 || yy2arr3222 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeResources) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3224 := z.DecBinary() + _ = yym3224 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3225 := r.ContainerType() + if yyct3225 == codecSelferValueTypeMap1234 { + yyl3225 := r.ReadMapStart() + if yyl3225 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3225, d) + } + } else if yyct3225 == codecSelferValueTypeArray1234 { + yyl3225 := r.ReadArrayStart() + if yyl3225 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3225, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeResources) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3226Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3226Slc + var yyhl3226 bool = l >= 0 + for yyj3226 := 0; ; yyj3226++ { + if yyhl3226 { + if yyj3226 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3226Slc = r.DecodeBytes(yys3226Slc, true, true) + yys3226 := string(yys3226Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3226 { + case "capacity": + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv3227 := &x.Capacity + yyv3227.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3226) + } // end switch yys3226 + } // end for yyj3226 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeResources) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3228 int + var yyb3228 bool + var yyhl3228 bool = l >= 0 + yyj3228++ + if yyhl3228 { + yyb3228 = yyj3228 > l + } else { + yyb3228 = r.CheckBreak() + } + if yyb3228 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv3229 := &x.Capacity + yyv3229.CodecDecodeSelf(d) + } + for { + yyj3228++ + if yyhl3228 { + yyb3228 = yyj3228 > l + } else { + yyb3228 = r.CheckBreak() + } + if yyb3228 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3228-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ResourceName) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3230 := z.EncBinary() + _ = yym3230 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ResourceName) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3231 := z.DecBinary() + _ = yym3231 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x ResourceList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3232 := z.EncBinary() + _ = yym3232 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + h.encResourceList((ResourceList)(x), e) + } + } +} + +func (x *ResourceList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3233 := z.DecBinary() + _ = yym3233 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + h.decResourceList((*ResourceList)(x), d) + } +} + +func (x *Node) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3234 := z.EncBinary() + _ = yym3234 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3235 := !z.EncBinary() + yy2arr3235 := z.EncBasicHandle().StructToArray + var yyq3235 [5]bool + _, _, _ = yysep3235, yyq3235, yy2arr3235 + const yyr3235 bool = false + yyq3235[0] = x.Kind != "" + yyq3235[1] = x.APIVersion != "" + yyq3235[2] = true + yyq3235[3] = true + yyq3235[4] = true + var yynn3235 int + if yyr3235 || yy2arr3235 { + r.EncodeArrayStart(5) + } else { + yynn3235 = 0 + for _, b := range yyq3235 { + if b { + yynn3235++ + } + } + r.EncodeMapStart(yynn3235) + yynn3235 = 0 + } + if yyr3235 || yy2arr3235 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3235[0] { + yym3237 := z.EncBinary() + _ = yym3237 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3235[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3238 := z.EncBinary() + _ = yym3238 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3235 || yy2arr3235 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3235[1] { + yym3240 := z.EncBinary() + _ = yym3240 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3235[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3241 := z.EncBinary() + _ = yym3241 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3235 || yy2arr3235 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3235[2] { + yy3243 := &x.ObjectMeta + yy3243.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3235[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3244 := &x.ObjectMeta + yy3244.CodecEncodeSelf(e) + } + } + if yyr3235 || yy2arr3235 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3235[3] { + yy3246 := &x.Spec + yy3246.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3235[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3247 := &x.Spec + yy3247.CodecEncodeSelf(e) + } + } + if yyr3235 || yy2arr3235 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3235[4] { + yy3249 := &x.Status + yy3249.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3235[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3250 := &x.Status + yy3250.CodecEncodeSelf(e) + } + } + if yyr3235 || yy2arr3235 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Node) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3251 := z.DecBinary() + _ = yym3251 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3252 := r.ContainerType() + if yyct3252 == codecSelferValueTypeMap1234 { + yyl3252 := r.ReadMapStart() + if yyl3252 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3252, d) + } + } else if yyct3252 == codecSelferValueTypeArray1234 { + yyl3252 := r.ReadArrayStart() + if yyl3252 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3252, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Node) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3253Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3253Slc + var yyhl3253 bool = l >= 0 + for yyj3253 := 0; ; yyj3253++ { + if yyhl3253 { + if yyj3253 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3253Slc = r.DecodeBytes(yys3253Slc, true, true) + yys3253 := string(yys3253Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3253 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3256 := &x.ObjectMeta + yyv3256.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = NodeSpec{} + } else { + yyv3257 := &x.Spec + yyv3257.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = NodeStatus{} + } else { + yyv3258 := &x.Status + yyv3258.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3253) + } // end switch yys3253 + } // end for yyj3253 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Node) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3259 int + var yyb3259 bool + var yyhl3259 bool = l >= 0 + yyj3259++ + if yyhl3259 { + yyb3259 = yyj3259 > l + } else { + yyb3259 = r.CheckBreak() + } + if yyb3259 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3259++ + if yyhl3259 { + yyb3259 = yyj3259 > l + } else { + yyb3259 = r.CheckBreak() + } + if yyb3259 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3259++ + if yyhl3259 { + yyb3259 = yyj3259 > l + } else { + yyb3259 = r.CheckBreak() + } + if yyb3259 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3262 := &x.ObjectMeta + yyv3262.CodecDecodeSelf(d) + } + yyj3259++ + if yyhl3259 { + yyb3259 = yyj3259 > l + } else { + yyb3259 = r.CheckBreak() + } + if yyb3259 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = NodeSpec{} + } else { + yyv3263 := &x.Spec + yyv3263.CodecDecodeSelf(d) + } + yyj3259++ + if yyhl3259 { + yyb3259 = yyj3259 > l + } else { + yyb3259 = r.CheckBreak() + } + if yyb3259 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = NodeStatus{} + } else { + yyv3264 := &x.Status + yyv3264.CodecDecodeSelf(d) + } + for { + yyj3259++ + if yyhl3259 { + yyb3259 = yyj3259 > l + } else { + yyb3259 = r.CheckBreak() + } + if yyb3259 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3259-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3265 := z.EncBinary() + _ = yym3265 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3266 := !z.EncBinary() + yy2arr3266 := z.EncBasicHandle().StructToArray + var yyq3266 [4]bool + _, _, _ = yysep3266, yyq3266, yy2arr3266 + const yyr3266 bool = false + yyq3266[0] = x.Kind != "" + yyq3266[1] = x.APIVersion != "" + yyq3266[2] = true + var yynn3266 int + if yyr3266 || yy2arr3266 { + r.EncodeArrayStart(4) + } else { + yynn3266 = 1 + for _, b := range yyq3266 { + if b { + yynn3266++ + } + } + r.EncodeMapStart(yynn3266) + yynn3266 = 0 + } + if yyr3266 || yy2arr3266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3266[0] { + yym3268 := z.EncBinary() + _ = yym3268 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3266[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3269 := z.EncBinary() + _ = yym3269 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3266 || yy2arr3266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3266[1] { + yym3271 := z.EncBinary() + _ = yym3271 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3266[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3272 := z.EncBinary() + _ = yym3272 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3266 || yy2arr3266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3266[2] { + yy3274 := &x.ListMeta + yym3275 := z.EncBinary() + _ = yym3275 + if false { + } else if z.HasExtensions() && z.EncExt(yy3274) { + } else { + z.EncFallback(yy3274) + } + } else { + r.EncodeNil() + } + } else { + if yyq3266[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3276 := &x.ListMeta + yym3277 := z.EncBinary() + _ = yym3277 + if false { + } else if z.HasExtensions() && z.EncExt(yy3276) { + } else { + z.EncFallback(yy3276) + } + } + } + if yyr3266 || yy2arr3266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3279 := z.EncBinary() + _ = yym3279 + if false { + } else { + h.encSliceNode(([]Node)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3280 := z.EncBinary() + _ = yym3280 + if false { + } else { + h.encSliceNode(([]Node)(x.Items), e) + } + } + } + if yyr3266 || yy2arr3266 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3281 := z.DecBinary() + _ = yym3281 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3282 := r.ContainerType() + if yyct3282 == codecSelferValueTypeMap1234 { + yyl3282 := r.ReadMapStart() + if yyl3282 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3282, d) + } + } else if yyct3282 == codecSelferValueTypeArray1234 { + yyl3282 := r.ReadArrayStart() + if yyl3282 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3282, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3283Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3283Slc + var yyhl3283 bool = l >= 0 + for yyj3283 := 0; ; yyj3283++ { + if yyhl3283 { + if yyj3283 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3283Slc = r.DecodeBytes(yys3283Slc, true, true) + yys3283 := string(yys3283Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3283 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3286 := &x.ListMeta + yym3287 := z.DecBinary() + _ = yym3287 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3286) { + } else { + z.DecFallback(yyv3286, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3288 := &x.Items + yym3289 := z.DecBinary() + _ = yym3289 + if false { + } else { + h.decSliceNode((*[]Node)(yyv3288), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3283) + } // end switch yys3283 + } // end for yyj3283 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3290 int + var yyb3290 bool + var yyhl3290 bool = l >= 0 + yyj3290++ + if yyhl3290 { + yyb3290 = yyj3290 > l + } else { + yyb3290 = r.CheckBreak() + } + if yyb3290 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3290++ + if yyhl3290 { + yyb3290 = yyj3290 > l + } else { + yyb3290 = r.CheckBreak() + } + if yyb3290 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3290++ + if yyhl3290 { + yyb3290 = yyj3290 > l + } else { + yyb3290 = r.CheckBreak() + } + if yyb3290 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3293 := &x.ListMeta + yym3294 := z.DecBinary() + _ = yym3294 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3293) { + } else { + z.DecFallback(yyv3293, false) + } + } + yyj3290++ + if yyhl3290 { + yyb3290 = yyj3290 > l + } else { + yyb3290 = r.CheckBreak() + } + if yyb3290 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3295 := &x.Items + yym3296 := z.DecBinary() + _ = yym3296 + if false { + } else { + h.decSliceNode((*[]Node)(yyv3295), d) + } + } + for { + yyj3290++ + if yyhl3290 { + yyb3290 = yyj3290 > l + } else { + yyb3290 = r.CheckBreak() + } + if yyb3290 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3290-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NamespaceSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3297 := z.EncBinary() + _ = yym3297 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3298 := !z.EncBinary() + yy2arr3298 := z.EncBasicHandle().StructToArray + var yyq3298 [1]bool + _, _, _ = yysep3298, yyq3298, yy2arr3298 + const yyr3298 bool = false + var yynn3298 int + if yyr3298 || yy2arr3298 { + r.EncodeArrayStart(1) + } else { + yynn3298 = 1 + for _, b := range yyq3298 { + if b { + yynn3298++ + } + } + r.EncodeMapStart(yynn3298) + yynn3298 = 0 + } + if yyr3298 || yy2arr3298 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Finalizers == nil { + r.EncodeNil() + } else { + yym3300 := z.EncBinary() + _ = yym3300 + if false { + } else { + h.encSliceFinalizerName(([]FinalizerName)(x.Finalizers), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Finalizers")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Finalizers == nil { + r.EncodeNil() + } else { + yym3301 := z.EncBinary() + _ = yym3301 + if false { + } else { + h.encSliceFinalizerName(([]FinalizerName)(x.Finalizers), e) + } + } + } + if yyr3298 || yy2arr3298 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NamespaceSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3302 := z.DecBinary() + _ = yym3302 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3303 := r.ContainerType() + if yyct3303 == codecSelferValueTypeMap1234 { + yyl3303 := r.ReadMapStart() + if yyl3303 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3303, d) + } + } else if yyct3303 == codecSelferValueTypeArray1234 { + yyl3303 := r.ReadArrayStart() + if yyl3303 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3303, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NamespaceSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3304Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3304Slc + var yyhl3304 bool = l >= 0 + for yyj3304 := 0; ; yyj3304++ { + if yyhl3304 { + if yyj3304 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3304Slc = r.DecodeBytes(yys3304Slc, true, true) + yys3304 := string(yys3304Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3304 { + case "Finalizers": + if r.TryDecodeAsNil() { + x.Finalizers = nil + } else { + yyv3305 := &x.Finalizers + yym3306 := z.DecBinary() + _ = yym3306 + if false { + } else { + h.decSliceFinalizerName((*[]FinalizerName)(yyv3305), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3304) + } // end switch yys3304 + } // end for yyj3304 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NamespaceSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3307 int + var yyb3307 bool + var yyhl3307 bool = l >= 0 + yyj3307++ + if yyhl3307 { + yyb3307 = yyj3307 > l + } else { + yyb3307 = r.CheckBreak() + } + if yyb3307 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Finalizers = nil + } else { + yyv3308 := &x.Finalizers + yym3309 := z.DecBinary() + _ = yym3309 + if false { + } else { + h.decSliceFinalizerName((*[]FinalizerName)(yyv3308), d) + } + } + for { + yyj3307++ + if yyhl3307 { + yyb3307 = yyj3307 > l + } else { + yyb3307 = r.CheckBreak() + } + if yyb3307 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3307-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x FinalizerName) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3310 := z.EncBinary() + _ = yym3310 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *FinalizerName) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3311 := z.DecBinary() + _ = yym3311 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *NamespaceStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3312 := z.EncBinary() + _ = yym3312 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3313 := !z.EncBinary() + yy2arr3313 := z.EncBasicHandle().StructToArray + var yyq3313 [1]bool + _, _, _ = yysep3313, yyq3313, yy2arr3313 + const yyr3313 bool = false + yyq3313[0] = x.Phase != "" + var yynn3313 int + if yyr3313 || yy2arr3313 { + r.EncodeArrayStart(1) + } else { + yynn3313 = 0 + for _, b := range yyq3313 { + if b { + yynn3313++ + } + } + r.EncodeMapStart(yynn3313) + yynn3313 = 0 + } + if yyr3313 || yy2arr3313 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3313[0] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3313[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr3313 || yy2arr3313 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NamespaceStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3315 := z.DecBinary() + _ = yym3315 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3316 := r.ContainerType() + if yyct3316 == codecSelferValueTypeMap1234 { + yyl3316 := r.ReadMapStart() + if yyl3316 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3316, d) + } + } else if yyct3316 == codecSelferValueTypeArray1234 { + yyl3316 := r.ReadArrayStart() + if yyl3316 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3316, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NamespaceStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3317Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3317Slc + var yyhl3317 bool = l >= 0 + for yyj3317 := 0; ; yyj3317++ { + if yyhl3317 { + if yyj3317 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3317Slc = r.DecodeBytes(yys3317Slc, true, true) + yys3317 := string(yys3317Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3317 { + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = NamespacePhase(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3317) + } // end switch yys3317 + } // end for yyj3317 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NamespaceStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3319 int + var yyb3319 bool + var yyhl3319 bool = l >= 0 + yyj3319++ + if yyhl3319 { + yyb3319 = yyj3319 > l + } else { + yyb3319 = r.CheckBreak() + } + if yyb3319 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = NamespacePhase(r.DecodeString()) + } + for { + yyj3319++ + if yyhl3319 { + yyb3319 = yyj3319 > l + } else { + yyb3319 = r.CheckBreak() + } + if yyb3319 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3319-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x NamespacePhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3321 := z.EncBinary() + _ = yym3321 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NamespacePhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3322 := z.DecBinary() + _ = yym3322 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *Namespace) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3323 := z.EncBinary() + _ = yym3323 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3324 := !z.EncBinary() + yy2arr3324 := z.EncBasicHandle().StructToArray + var yyq3324 [5]bool + _, _, _ = yysep3324, yyq3324, yy2arr3324 + const yyr3324 bool = false + yyq3324[0] = x.Kind != "" + yyq3324[1] = x.APIVersion != "" + yyq3324[2] = true + yyq3324[3] = true + yyq3324[4] = true + var yynn3324 int + if yyr3324 || yy2arr3324 { + r.EncodeArrayStart(5) + } else { + yynn3324 = 0 + for _, b := range yyq3324 { + if b { + yynn3324++ + } + } + r.EncodeMapStart(yynn3324) + yynn3324 = 0 + } + if yyr3324 || yy2arr3324 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3324[0] { + yym3326 := z.EncBinary() + _ = yym3326 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3324[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3327 := z.EncBinary() + _ = yym3327 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3324 || yy2arr3324 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3324[1] { + yym3329 := z.EncBinary() + _ = yym3329 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3324[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3330 := z.EncBinary() + _ = yym3330 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3324 || yy2arr3324 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3324[2] { + yy3332 := &x.ObjectMeta + yy3332.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3324[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3333 := &x.ObjectMeta + yy3333.CodecEncodeSelf(e) + } + } + if yyr3324 || yy2arr3324 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3324[3] { + yy3335 := &x.Spec + yy3335.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3324[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3336 := &x.Spec + yy3336.CodecEncodeSelf(e) + } + } + if yyr3324 || yy2arr3324 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3324[4] { + yy3338 := &x.Status + yy3338.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3324[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3339 := &x.Status + yy3339.CodecEncodeSelf(e) + } + } + if yyr3324 || yy2arr3324 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Namespace) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3340 := z.DecBinary() + _ = yym3340 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3341 := r.ContainerType() + if yyct3341 == codecSelferValueTypeMap1234 { + yyl3341 := r.ReadMapStart() + if yyl3341 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3341, d) + } + } else if yyct3341 == codecSelferValueTypeArray1234 { + yyl3341 := r.ReadArrayStart() + if yyl3341 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3341, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Namespace) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3342Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3342Slc + var yyhl3342 bool = l >= 0 + for yyj3342 := 0; ; yyj3342++ { + if yyhl3342 { + if yyj3342 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3342Slc = r.DecodeBytes(yys3342Slc, true, true) + yys3342 := string(yys3342Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3342 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3345 := &x.ObjectMeta + yyv3345.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = NamespaceSpec{} + } else { + yyv3346 := &x.Spec + yyv3346.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = NamespaceStatus{} + } else { + yyv3347 := &x.Status + yyv3347.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3342) + } // end switch yys3342 + } // end for yyj3342 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Namespace) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3348 int + var yyb3348 bool + var yyhl3348 bool = l >= 0 + yyj3348++ + if yyhl3348 { + yyb3348 = yyj3348 > l + } else { + yyb3348 = r.CheckBreak() + } + if yyb3348 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3348++ + if yyhl3348 { + yyb3348 = yyj3348 > l + } else { + yyb3348 = r.CheckBreak() + } + if yyb3348 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3348++ + if yyhl3348 { + yyb3348 = yyj3348 > l + } else { + yyb3348 = r.CheckBreak() + } + if yyb3348 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3351 := &x.ObjectMeta + yyv3351.CodecDecodeSelf(d) + } + yyj3348++ + if yyhl3348 { + yyb3348 = yyj3348 > l + } else { + yyb3348 = r.CheckBreak() + } + if yyb3348 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = NamespaceSpec{} + } else { + yyv3352 := &x.Spec + yyv3352.CodecDecodeSelf(d) + } + yyj3348++ + if yyhl3348 { + yyb3348 = yyj3348 > l + } else { + yyb3348 = r.CheckBreak() + } + if yyb3348 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = NamespaceStatus{} + } else { + yyv3353 := &x.Status + yyv3353.CodecDecodeSelf(d) + } + for { + yyj3348++ + if yyhl3348 { + yyb3348 = yyj3348 > l + } else { + yyb3348 = r.CheckBreak() + } + if yyb3348 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3348-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NamespaceList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3354 := z.EncBinary() + _ = yym3354 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3355 := !z.EncBinary() + yy2arr3355 := z.EncBasicHandle().StructToArray + var yyq3355 [4]bool + _, _, _ = yysep3355, yyq3355, yy2arr3355 + const yyr3355 bool = false + yyq3355[0] = x.Kind != "" + yyq3355[1] = x.APIVersion != "" + yyq3355[2] = true + var yynn3355 int + if yyr3355 || yy2arr3355 { + r.EncodeArrayStart(4) + } else { + yynn3355 = 1 + for _, b := range yyq3355 { + if b { + yynn3355++ + } + } + r.EncodeMapStart(yynn3355) + yynn3355 = 0 + } + if yyr3355 || yy2arr3355 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3355[0] { + yym3357 := z.EncBinary() + _ = yym3357 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3355[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3358 := z.EncBinary() + _ = yym3358 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3355 || yy2arr3355 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3355[1] { + yym3360 := z.EncBinary() + _ = yym3360 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3355[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3361 := z.EncBinary() + _ = yym3361 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3355 || yy2arr3355 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3355[2] { + yy3363 := &x.ListMeta + yym3364 := z.EncBinary() + _ = yym3364 + if false { + } else if z.HasExtensions() && z.EncExt(yy3363) { + } else { + z.EncFallback(yy3363) + } + } else { + r.EncodeNil() + } + } else { + if yyq3355[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3365 := &x.ListMeta + yym3366 := z.EncBinary() + _ = yym3366 + if false { + } else if z.HasExtensions() && z.EncExt(yy3365) { + } else { + z.EncFallback(yy3365) + } + } + } + if yyr3355 || yy2arr3355 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3368 := z.EncBinary() + _ = yym3368 + if false { + } else { + h.encSliceNamespace(([]Namespace)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3369 := z.EncBinary() + _ = yym3369 + if false { + } else { + h.encSliceNamespace(([]Namespace)(x.Items), e) + } + } + } + if yyr3355 || yy2arr3355 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NamespaceList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3370 := z.DecBinary() + _ = yym3370 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3371 := r.ContainerType() + if yyct3371 == codecSelferValueTypeMap1234 { + yyl3371 := r.ReadMapStart() + if yyl3371 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3371, d) + } + } else if yyct3371 == codecSelferValueTypeArray1234 { + yyl3371 := r.ReadArrayStart() + if yyl3371 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3371, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NamespaceList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3372Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3372Slc + var yyhl3372 bool = l >= 0 + for yyj3372 := 0; ; yyj3372++ { + if yyhl3372 { + if yyj3372 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3372Slc = r.DecodeBytes(yys3372Slc, true, true) + yys3372 := string(yys3372Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3372 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3375 := &x.ListMeta + yym3376 := z.DecBinary() + _ = yym3376 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3375) { + } else { + z.DecFallback(yyv3375, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3377 := &x.Items + yym3378 := z.DecBinary() + _ = yym3378 + if false { + } else { + h.decSliceNamespace((*[]Namespace)(yyv3377), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3372) + } // end switch yys3372 + } // end for yyj3372 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NamespaceList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3379 int + var yyb3379 bool + var yyhl3379 bool = l >= 0 + yyj3379++ + if yyhl3379 { + yyb3379 = yyj3379 > l + } else { + yyb3379 = r.CheckBreak() + } + if yyb3379 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3379++ + if yyhl3379 { + yyb3379 = yyj3379 > l + } else { + yyb3379 = r.CheckBreak() + } + if yyb3379 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3379++ + if yyhl3379 { + yyb3379 = yyj3379 > l + } else { + yyb3379 = r.CheckBreak() + } + if yyb3379 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3382 := &x.ListMeta + yym3383 := z.DecBinary() + _ = yym3383 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3382) { + } else { + z.DecFallback(yyv3382, false) + } + } + yyj3379++ + if yyhl3379 { + yyb3379 = yyj3379 > l + } else { + yyb3379 = r.CheckBreak() + } + if yyb3379 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3384 := &x.Items + yym3385 := z.DecBinary() + _ = yym3385 + if false { + } else { + h.decSliceNamespace((*[]Namespace)(yyv3384), d) + } + } + for { + yyj3379++ + if yyhl3379 { + yyb3379 = yyj3379 > l + } else { + yyb3379 = r.CheckBreak() + } + if yyb3379 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3379-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Binding) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3386 := z.EncBinary() + _ = yym3386 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3387 := !z.EncBinary() + yy2arr3387 := z.EncBasicHandle().StructToArray + var yyq3387 [4]bool + _, _, _ = yysep3387, yyq3387, yy2arr3387 + const yyr3387 bool = false + yyq3387[0] = x.Kind != "" + yyq3387[1] = x.APIVersion != "" + yyq3387[2] = true + var yynn3387 int + if yyr3387 || yy2arr3387 { + r.EncodeArrayStart(4) + } else { + yynn3387 = 1 + for _, b := range yyq3387 { + if b { + yynn3387++ + } + } + r.EncodeMapStart(yynn3387) + yynn3387 = 0 + } + if yyr3387 || yy2arr3387 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3387[0] { + yym3389 := z.EncBinary() + _ = yym3389 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3387[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3390 := z.EncBinary() + _ = yym3390 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3387 || yy2arr3387 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3387[1] { + yym3392 := z.EncBinary() + _ = yym3392 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3387[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3393 := z.EncBinary() + _ = yym3393 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3387 || yy2arr3387 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3387[2] { + yy3395 := &x.ObjectMeta + yy3395.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3387[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3396 := &x.ObjectMeta + yy3396.CodecEncodeSelf(e) + } + } + if yyr3387 || yy2arr3387 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy3398 := &x.Target + yy3398.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("target")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3399 := &x.Target + yy3399.CodecEncodeSelf(e) + } + if yyr3387 || yy2arr3387 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Binding) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3400 := z.DecBinary() + _ = yym3400 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3401 := r.ContainerType() + if yyct3401 == codecSelferValueTypeMap1234 { + yyl3401 := r.ReadMapStart() + if yyl3401 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3401, d) + } + } else if yyct3401 == codecSelferValueTypeArray1234 { + yyl3401 := r.ReadArrayStart() + if yyl3401 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3401, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Binding) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3402Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3402Slc + var yyhl3402 bool = l >= 0 + for yyj3402 := 0; ; yyj3402++ { + if yyhl3402 { + if yyj3402 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3402Slc = r.DecodeBytes(yys3402Slc, true, true) + yys3402 := string(yys3402Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3402 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3405 := &x.ObjectMeta + yyv3405.CodecDecodeSelf(d) + } + case "target": + if r.TryDecodeAsNil() { + x.Target = ObjectReference{} + } else { + yyv3406 := &x.Target + yyv3406.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3402) + } // end switch yys3402 + } // end for yyj3402 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Binding) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3407 int + var yyb3407 bool + var yyhl3407 bool = l >= 0 + yyj3407++ + if yyhl3407 { + yyb3407 = yyj3407 > l + } else { + yyb3407 = r.CheckBreak() + } + if yyb3407 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3407++ + if yyhl3407 { + yyb3407 = yyj3407 > l + } else { + yyb3407 = r.CheckBreak() + } + if yyb3407 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3407++ + if yyhl3407 { + yyb3407 = yyj3407 > l + } else { + yyb3407 = r.CheckBreak() + } + if yyb3407 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3410 := &x.ObjectMeta + yyv3410.CodecDecodeSelf(d) + } + yyj3407++ + if yyhl3407 { + yyb3407 = yyj3407 > l + } else { + yyb3407 = r.CheckBreak() + } + if yyb3407 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Target = ObjectReference{} + } else { + yyv3411 := &x.Target + yyv3411.CodecDecodeSelf(d) + } + for { + yyj3407++ + if yyhl3407 { + yyb3407 = yyj3407 > l + } else { + yyb3407 = r.CheckBreak() + } + if yyb3407 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3407-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Preconditions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3412 := z.EncBinary() + _ = yym3412 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3413 := !z.EncBinary() + yy2arr3413 := z.EncBasicHandle().StructToArray + var yyq3413 [1]bool + _, _, _ = yysep3413, yyq3413, yy2arr3413 + const yyr3413 bool = false + yyq3413[0] = x.UID != nil + var yynn3413 int + if yyr3413 || yy2arr3413 { + r.EncodeArrayStart(1) + } else { + yynn3413 = 0 + for _, b := range yyq3413 { + if b { + yynn3413++ + } + } + r.EncodeMapStart(yynn3413) + yynn3413 = 0 + } + if yyr3413 || yy2arr3413 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3413[0] { + if x.UID == nil { + r.EncodeNil() + } else { + yy3415 := *x.UID + yym3416 := z.EncBinary() + _ = yym3416 + if false { + } else if z.HasExtensions() && z.EncExt(yy3415) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy3415)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3413[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("uid")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.UID == nil { + r.EncodeNil() + } else { + yy3417 := *x.UID + yym3418 := z.EncBinary() + _ = yym3418 + if false { + } else if z.HasExtensions() && z.EncExt(yy3417) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy3417)) + } + } + } + } + if yyr3413 || yy2arr3413 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Preconditions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3419 := z.DecBinary() + _ = yym3419 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3420 := r.ContainerType() + if yyct3420 == codecSelferValueTypeMap1234 { + yyl3420 := r.ReadMapStart() + if yyl3420 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3420, d) + } + } else if yyct3420 == codecSelferValueTypeArray1234 { + yyl3420 := r.ReadArrayStart() + if yyl3420 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3420, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Preconditions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3421Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3421Slc + var yyhl3421 bool = l >= 0 + for yyj3421 := 0; ; yyj3421++ { + if yyhl3421 { + if yyj3421 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3421Slc = r.DecodeBytes(yys3421Slc, true, true) + yys3421 := string(yys3421Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3421 { + case "uid": + if r.TryDecodeAsNil() { + if x.UID != nil { + x.UID = nil + } + } else { + if x.UID == nil { + x.UID = new(pkg1_types.UID) + } + yym3423 := z.DecBinary() + _ = yym3423 + if false { + } else if z.HasExtensions() && z.DecExt(x.UID) { + } else { + *((*string)(x.UID)) = r.DecodeString() + } + } + default: + z.DecStructFieldNotFound(-1, yys3421) + } // end switch yys3421 + } // end for yyj3421 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Preconditions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3424 int + var yyb3424 bool + var yyhl3424 bool = l >= 0 + yyj3424++ + if yyhl3424 { + yyb3424 = yyj3424 > l + } else { + yyb3424 = r.CheckBreak() + } + if yyb3424 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.UID != nil { + x.UID = nil + } + } else { + if x.UID == nil { + x.UID = new(pkg1_types.UID) + } + yym3426 := z.DecBinary() + _ = yym3426 + if false { + } else if z.HasExtensions() && z.DecExt(x.UID) { + } else { + *((*string)(x.UID)) = r.DecodeString() + } + } + for { + yyj3424++ + if yyhl3424 { + yyb3424 = yyj3424 > l + } else { + yyb3424 = r.CheckBreak() + } + if yyb3424 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3424-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3427 := z.EncBinary() + _ = yym3427 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3428 := !z.EncBinary() + yy2arr3428 := z.EncBasicHandle().StructToArray + var yyq3428 [5]bool + _, _, _ = yysep3428, yyq3428, yy2arr3428 + const yyr3428 bool = false + yyq3428[0] = x.Kind != "" + yyq3428[1] = x.APIVersion != "" + yyq3428[2] = x.GracePeriodSeconds != nil + yyq3428[3] = x.Preconditions != nil + yyq3428[4] = x.OrphanDependents != nil + var yynn3428 int + if yyr3428 || yy2arr3428 { + r.EncodeArrayStart(5) + } else { + yynn3428 = 0 + for _, b := range yyq3428 { + if b { + yynn3428++ + } + } + r.EncodeMapStart(yynn3428) + yynn3428 = 0 + } + if yyr3428 || yy2arr3428 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3428[0] { + yym3430 := z.EncBinary() + _ = yym3430 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3428[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3431 := z.EncBinary() + _ = yym3431 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3428 || yy2arr3428 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3428[1] { + yym3433 := z.EncBinary() + _ = yym3433 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3428[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3434 := z.EncBinary() + _ = yym3434 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3428 || yy2arr3428 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3428[2] { + if x.GracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy3436 := *x.GracePeriodSeconds + yym3437 := z.EncBinary() + _ = yym3437 + if false { + } else { + r.EncodeInt(int64(yy3436)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3428[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gracePeriodSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.GracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy3438 := *x.GracePeriodSeconds + yym3439 := z.EncBinary() + _ = yym3439 + if false { + } else { + r.EncodeInt(int64(yy3438)) + } + } + } + } + if yyr3428 || yy2arr3428 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3428[3] { + if x.Preconditions == nil { + r.EncodeNil() + } else { + x.Preconditions.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3428[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preconditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Preconditions == nil { + r.EncodeNil() + } else { + x.Preconditions.CodecEncodeSelf(e) + } + } + } + if yyr3428 || yy2arr3428 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3428[4] { + if x.OrphanDependents == nil { + r.EncodeNil() + } else { + yy3442 := *x.OrphanDependents + yym3443 := z.EncBinary() + _ = yym3443 + if false { + } else { + r.EncodeBool(bool(yy3442)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3428[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("orphanDependents")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.OrphanDependents == nil { + r.EncodeNil() + } else { + yy3444 := *x.OrphanDependents + yym3445 := z.EncBinary() + _ = yym3445 + if false { + } else { + r.EncodeBool(bool(yy3444)) + } + } + } + } + if yyr3428 || yy2arr3428 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DeleteOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3446 := z.DecBinary() + _ = yym3446 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3447 := r.ContainerType() + if yyct3447 == codecSelferValueTypeMap1234 { + yyl3447 := r.ReadMapStart() + if yyl3447 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3447, d) + } + } else if yyct3447 == codecSelferValueTypeArray1234 { + yyl3447 := r.ReadArrayStart() + if yyl3447 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3447, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DeleteOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3448Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3448Slc + var yyhl3448 bool = l >= 0 + for yyj3448 := 0; ; yyj3448++ { + if yyhl3448 { + if yyj3448 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3448Slc = r.DecodeBytes(yys3448Slc, true, true) + yys3448 := string(yys3448Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3448 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "gracePeriodSeconds": + if r.TryDecodeAsNil() { + if x.GracePeriodSeconds != nil { + x.GracePeriodSeconds = nil + } + } else { + if x.GracePeriodSeconds == nil { + x.GracePeriodSeconds = new(int64) + } + yym3452 := z.DecBinary() + _ = yym3452 + if false { + } else { + *((*int64)(x.GracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + case "preconditions": + if r.TryDecodeAsNil() { + if x.Preconditions != nil { + x.Preconditions = nil + } + } else { + if x.Preconditions == nil { + x.Preconditions = new(Preconditions) + } + x.Preconditions.CodecDecodeSelf(d) + } + case "orphanDependents": + if r.TryDecodeAsNil() { + if x.OrphanDependents != nil { + x.OrphanDependents = nil + } + } else { + if x.OrphanDependents == nil { + x.OrphanDependents = new(bool) + } + yym3455 := z.DecBinary() + _ = yym3455 + if false { + } else { + *((*bool)(x.OrphanDependents)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys3448) + } // end switch yys3448 + } // end for yyj3448 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3456 int + var yyb3456 bool + var yyhl3456 bool = l >= 0 + yyj3456++ + if yyhl3456 { + yyb3456 = yyj3456 > l + } else { + yyb3456 = r.CheckBreak() + } + if yyb3456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3456++ + if yyhl3456 { + yyb3456 = yyj3456 > l + } else { + yyb3456 = r.CheckBreak() + } + if yyb3456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3456++ + if yyhl3456 { + yyb3456 = yyj3456 > l + } else { + yyb3456 = r.CheckBreak() + } + if yyb3456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GracePeriodSeconds != nil { + x.GracePeriodSeconds = nil + } + } else { + if x.GracePeriodSeconds == nil { + x.GracePeriodSeconds = new(int64) + } + yym3460 := z.DecBinary() + _ = yym3460 + if false { + } else { + *((*int64)(x.GracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj3456++ + if yyhl3456 { + yyb3456 = yyj3456 > l + } else { + yyb3456 = r.CheckBreak() + } + if yyb3456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Preconditions != nil { + x.Preconditions = nil + } + } else { + if x.Preconditions == nil { + x.Preconditions = new(Preconditions) + } + x.Preconditions.CodecDecodeSelf(d) + } + yyj3456++ + if yyhl3456 { + yyb3456 = yyj3456 > l + } else { + yyb3456 = r.CheckBreak() + } + if yyb3456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.OrphanDependents != nil { + x.OrphanDependents = nil + } + } else { + if x.OrphanDependents == nil { + x.OrphanDependents = new(bool) + } + yym3463 := z.DecBinary() + _ = yym3463 + if false { + } else { + *((*bool)(x.OrphanDependents)) = r.DecodeBool() + } + } + for { + yyj3456++ + if yyhl3456 { + yyb3456 = yyj3456 > l + } else { + yyb3456 = r.CheckBreak() + } + if yyb3456 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3456-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ExportOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3464 := z.EncBinary() + _ = yym3464 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3465 := !z.EncBinary() + yy2arr3465 := z.EncBasicHandle().StructToArray + var yyq3465 [4]bool + _, _, _ = yysep3465, yyq3465, yy2arr3465 + const yyr3465 bool = false + yyq3465[0] = x.Kind != "" + yyq3465[1] = x.APIVersion != "" + var yynn3465 int + if yyr3465 || yy2arr3465 { + r.EncodeArrayStart(4) + } else { + yynn3465 = 2 + for _, b := range yyq3465 { + if b { + yynn3465++ + } + } + r.EncodeMapStart(yynn3465) + yynn3465 = 0 + } + if yyr3465 || yy2arr3465 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3465[0] { + yym3467 := z.EncBinary() + _ = yym3467 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3465[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3468 := z.EncBinary() + _ = yym3468 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3465 || yy2arr3465 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3465[1] { + yym3470 := z.EncBinary() + _ = yym3470 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3465[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3471 := z.EncBinary() + _ = yym3471 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3465 || yy2arr3465 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3473 := z.EncBinary() + _ = yym3473 + if false { + } else { + r.EncodeBool(bool(x.Export)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("export")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3474 := z.EncBinary() + _ = yym3474 + if false { + } else { + r.EncodeBool(bool(x.Export)) + } + } + if yyr3465 || yy2arr3465 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3476 := z.EncBinary() + _ = yym3476 + if false { + } else { + r.EncodeBool(bool(x.Exact)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("exact")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3477 := z.EncBinary() + _ = yym3477 + if false { + } else { + r.EncodeBool(bool(x.Exact)) + } + } + if yyr3465 || yy2arr3465 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ExportOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3478 := z.DecBinary() + _ = yym3478 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3479 := r.ContainerType() + if yyct3479 == codecSelferValueTypeMap1234 { + yyl3479 := r.ReadMapStart() + if yyl3479 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3479, d) + } + } else if yyct3479 == codecSelferValueTypeArray1234 { + yyl3479 := r.ReadArrayStart() + if yyl3479 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3479, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ExportOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3480Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3480Slc + var yyhl3480 bool = l >= 0 + for yyj3480 := 0; ; yyj3480++ { + if yyhl3480 { + if yyj3480 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3480Slc = r.DecodeBytes(yys3480Slc, true, true) + yys3480 := string(yys3480Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3480 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "export": + if r.TryDecodeAsNil() { + x.Export = false + } else { + x.Export = bool(r.DecodeBool()) + } + case "exact": + if r.TryDecodeAsNil() { + x.Exact = false + } else { + x.Exact = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3480) + } // end switch yys3480 + } // end for yyj3480 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ExportOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3485 int + var yyb3485 bool + var yyhl3485 bool = l >= 0 + yyj3485++ + if yyhl3485 { + yyb3485 = yyj3485 > l + } else { + yyb3485 = r.CheckBreak() + } + if yyb3485 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3485++ + if yyhl3485 { + yyb3485 = yyj3485 > l + } else { + yyb3485 = r.CheckBreak() + } + if yyb3485 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3485++ + if yyhl3485 { + yyb3485 = yyj3485 > l + } else { + yyb3485 = r.CheckBreak() + } + if yyb3485 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Export = false + } else { + x.Export = bool(r.DecodeBool()) + } + yyj3485++ + if yyhl3485 { + yyb3485 = yyj3485 > l + } else { + yyb3485 = r.CheckBreak() + } + if yyb3485 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Exact = false + } else { + x.Exact = bool(r.DecodeBool()) + } + for { + yyj3485++ + if yyhl3485 { + yyb3485 = yyj3485 > l + } else { + yyb3485 = r.CheckBreak() + } + if yyb3485 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3485-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ListOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3490 := z.EncBinary() + _ = yym3490 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3491 := !z.EncBinary() + yy2arr3491 := z.EncBasicHandle().StructToArray + var yyq3491 [7]bool + _, _, _ = yysep3491, yyq3491, yy2arr3491 + const yyr3491 bool = false + yyq3491[0] = x.Kind != "" + yyq3491[1] = x.APIVersion != "" + var yynn3491 int + if yyr3491 || yy2arr3491 { + r.EncodeArrayStart(7) + } else { + yynn3491 = 5 + for _, b := range yyq3491 { + if b { + yynn3491++ + } + } + r.EncodeMapStart(yynn3491) + yynn3491 = 0 + } + if yyr3491 || yy2arr3491 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3491[0] { + yym3493 := z.EncBinary() + _ = yym3493 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3491[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3494 := z.EncBinary() + _ = yym3494 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3491 || yy2arr3491 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3491[1] { + yym3496 := z.EncBinary() + _ = yym3496 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3491[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3497 := z.EncBinary() + _ = yym3497 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3491 || yy2arr3491 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.LabelSelector == nil { + r.EncodeNil() + } else { + yym3499 := z.EncBinary() + _ = yym3499 + if false { + } else if z.HasExtensions() && z.EncExt(x.LabelSelector) { + } else { + z.EncFallback(x.LabelSelector) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("LabelSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LabelSelector == nil { + r.EncodeNil() + } else { + yym3500 := z.EncBinary() + _ = yym3500 + if false { + } else if z.HasExtensions() && z.EncExt(x.LabelSelector) { + } else { + z.EncFallback(x.LabelSelector) + } + } + } + if yyr3491 || yy2arr3491 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.FieldSelector == nil { + r.EncodeNil() + } else { + yym3502 := z.EncBinary() + _ = yym3502 + if false { + } else if z.HasExtensions() && z.EncExt(x.FieldSelector) { + } else { + z.EncFallback(x.FieldSelector) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("FieldSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FieldSelector == nil { + r.EncodeNil() + } else { + yym3503 := z.EncBinary() + _ = yym3503 + if false { + } else if z.HasExtensions() && z.EncExt(x.FieldSelector) { + } else { + z.EncFallback(x.FieldSelector) + } + } + } + if yyr3491 || yy2arr3491 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3505 := z.EncBinary() + _ = yym3505 + if false { + } else { + r.EncodeBool(bool(x.Watch)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Watch")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3506 := z.EncBinary() + _ = yym3506 + if false { + } else { + r.EncodeBool(bool(x.Watch)) + } + } + if yyr3491 || yy2arr3491 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3508 := z.EncBinary() + _ = yym3508 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ResourceVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3509 := z.EncBinary() + _ = yym3509 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } + if yyr3491 || yy2arr3491 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.TimeoutSeconds == nil { + r.EncodeNil() + } else { + yy3511 := *x.TimeoutSeconds + yym3512 := z.EncBinary() + _ = yym3512 + if false { + } else { + r.EncodeInt(int64(yy3511)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("TimeoutSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TimeoutSeconds == nil { + r.EncodeNil() + } else { + yy3513 := *x.TimeoutSeconds + yym3514 := z.EncBinary() + _ = yym3514 + if false { + } else { + r.EncodeInt(int64(yy3513)) + } + } + } + if yyr3491 || yy2arr3491 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ListOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3515 := z.DecBinary() + _ = yym3515 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3516 := r.ContainerType() + if yyct3516 == codecSelferValueTypeMap1234 { + yyl3516 := r.ReadMapStart() + if yyl3516 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3516, d) + } + } else if yyct3516 == codecSelferValueTypeArray1234 { + yyl3516 := r.ReadArrayStart() + if yyl3516 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3516, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ListOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3517Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3517Slc + var yyhl3517 bool = l >= 0 + for yyj3517 := 0; ; yyj3517++ { + if yyhl3517 { + if yyj3517 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3517Slc = r.DecodeBytes(yys3517Slc, true, true) + yys3517 := string(yys3517Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3517 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "LabelSelector": + if r.TryDecodeAsNil() { + x.LabelSelector = nil + } else { + yyv3520 := &x.LabelSelector + yym3521 := z.DecBinary() + _ = yym3521 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3520) { + } else { + z.DecFallback(yyv3520, true) + } + } + case "FieldSelector": + if r.TryDecodeAsNil() { + x.FieldSelector = nil + } else { + yyv3522 := &x.FieldSelector + yym3523 := z.DecBinary() + _ = yym3523 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3522) { + } else { + z.DecFallback(yyv3522, true) + } + } + case "Watch": + if r.TryDecodeAsNil() { + x.Watch = false + } else { + x.Watch = bool(r.DecodeBool()) + } + case "ResourceVersion": + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + case "TimeoutSeconds": + if r.TryDecodeAsNil() { + if x.TimeoutSeconds != nil { + x.TimeoutSeconds = nil + } + } else { + if x.TimeoutSeconds == nil { + x.TimeoutSeconds = new(int64) + } + yym3527 := z.DecBinary() + _ = yym3527 + if false { + } else { + *((*int64)(x.TimeoutSeconds)) = int64(r.DecodeInt(64)) + } + } + default: + z.DecStructFieldNotFound(-1, yys3517) + } // end switch yys3517 + } // end for yyj3517 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ListOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3528 int + var yyb3528 bool + var yyhl3528 bool = l >= 0 + yyj3528++ + if yyhl3528 { + yyb3528 = yyj3528 > l + } else { + yyb3528 = r.CheckBreak() + } + if yyb3528 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3528++ + if yyhl3528 { + yyb3528 = yyj3528 > l + } else { + yyb3528 = r.CheckBreak() + } + if yyb3528 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3528++ + if yyhl3528 { + yyb3528 = yyj3528 > l + } else { + yyb3528 = r.CheckBreak() + } + if yyb3528 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LabelSelector = nil + } else { + yyv3531 := &x.LabelSelector + yym3532 := z.DecBinary() + _ = yym3532 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3531) { + } else { + z.DecFallback(yyv3531, true) + } + } + yyj3528++ + if yyhl3528 { + yyb3528 = yyj3528 > l + } else { + yyb3528 = r.CheckBreak() + } + if yyb3528 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FieldSelector = nil + } else { + yyv3533 := &x.FieldSelector + yym3534 := z.DecBinary() + _ = yym3534 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3533) { + } else { + z.DecFallback(yyv3533, true) + } + } + yyj3528++ + if yyhl3528 { + yyb3528 = yyj3528 > l + } else { + yyb3528 = r.CheckBreak() + } + if yyb3528 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Watch = false + } else { + x.Watch = bool(r.DecodeBool()) + } + yyj3528++ + if yyhl3528 { + yyb3528 = yyj3528 > l + } else { + yyb3528 = r.CheckBreak() + } + if yyb3528 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + yyj3528++ + if yyhl3528 { + yyb3528 = yyj3528 > l + } else { + yyb3528 = r.CheckBreak() + } + if yyb3528 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TimeoutSeconds != nil { + x.TimeoutSeconds = nil + } + } else { + if x.TimeoutSeconds == nil { + x.TimeoutSeconds = new(int64) + } + yym3538 := z.DecBinary() + _ = yym3538 + if false { + } else { + *((*int64)(x.TimeoutSeconds)) = int64(r.DecodeInt(64)) + } + } + for { + yyj3528++ + if yyhl3528 { + yyb3528 = yyj3528 > l + } else { + yyb3528 = r.CheckBreak() + } + if yyb3528 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3528-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodLogOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3539 := z.EncBinary() + _ = yym3539 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3540 := !z.EncBinary() + yy2arr3540 := z.EncBasicHandle().StructToArray + var yyq3540 [10]bool + _, _, _ = yysep3540, yyq3540, yy2arr3540 + const yyr3540 bool = false + yyq3540[0] = x.Kind != "" + yyq3540[1] = x.APIVersion != "" + var yynn3540 int + if yyr3540 || yy2arr3540 { + r.EncodeArrayStart(10) + } else { + yynn3540 = 8 + for _, b := range yyq3540 { + if b { + yynn3540++ + } + } + r.EncodeMapStart(yynn3540) + yynn3540 = 0 + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3540[0] { + yym3542 := z.EncBinary() + _ = yym3542 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3540[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3543 := z.EncBinary() + _ = yym3543 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3540[1] { + yym3545 := z.EncBinary() + _ = yym3545 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3540[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3546 := z.EncBinary() + _ = yym3546 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3548 := z.EncBinary() + _ = yym3548 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Container")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3549 := z.EncBinary() + _ = yym3549 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3551 := z.EncBinary() + _ = yym3551 + if false { + } else { + r.EncodeBool(bool(x.Follow)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Follow")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3552 := z.EncBinary() + _ = yym3552 + if false { + } else { + r.EncodeBool(bool(x.Follow)) + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3554 := z.EncBinary() + _ = yym3554 + if false { + } else { + r.EncodeBool(bool(x.Previous)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Previous")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3555 := z.EncBinary() + _ = yym3555 + if false { + } else { + r.EncodeBool(bool(x.Previous)) + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.SinceSeconds == nil { + r.EncodeNil() + } else { + yy3557 := *x.SinceSeconds + yym3558 := z.EncBinary() + _ = yym3558 + if false { + } else { + r.EncodeInt(int64(yy3557)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("SinceSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SinceSeconds == nil { + r.EncodeNil() + } else { + yy3559 := *x.SinceSeconds + yym3560 := z.EncBinary() + _ = yym3560 + if false { + } else { + r.EncodeInt(int64(yy3559)) + } + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.SinceTime == nil { + r.EncodeNil() + } else { + yym3562 := z.EncBinary() + _ = yym3562 + if false { + } else if z.HasExtensions() && z.EncExt(x.SinceTime) { + } else if yym3562 { + z.EncBinaryMarshal(x.SinceTime) + } else if !yym3562 && z.IsJSONHandle() { + z.EncJSONMarshal(x.SinceTime) + } else { + z.EncFallback(x.SinceTime) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("SinceTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SinceTime == nil { + r.EncodeNil() + } else { + yym3563 := z.EncBinary() + _ = yym3563 + if false { + } else if z.HasExtensions() && z.EncExt(x.SinceTime) { + } else if yym3563 { + z.EncBinaryMarshal(x.SinceTime) + } else if !yym3563 && z.IsJSONHandle() { + z.EncJSONMarshal(x.SinceTime) + } else { + z.EncFallback(x.SinceTime) + } + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3565 := z.EncBinary() + _ = yym3565 + if false { + } else { + r.EncodeBool(bool(x.Timestamps)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Timestamps")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3566 := z.EncBinary() + _ = yym3566 + if false { + } else { + r.EncodeBool(bool(x.Timestamps)) + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.TailLines == nil { + r.EncodeNil() + } else { + yy3568 := *x.TailLines + yym3569 := z.EncBinary() + _ = yym3569 + if false { + } else { + r.EncodeInt(int64(yy3568)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("TailLines")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TailLines == nil { + r.EncodeNil() + } else { + yy3570 := *x.TailLines + yym3571 := z.EncBinary() + _ = yym3571 + if false { + } else { + r.EncodeInt(int64(yy3570)) + } + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.LimitBytes == nil { + r.EncodeNil() + } else { + yy3573 := *x.LimitBytes + yym3574 := z.EncBinary() + _ = yym3574 + if false { + } else { + r.EncodeInt(int64(yy3573)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("LimitBytes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LimitBytes == nil { + r.EncodeNil() + } else { + yy3575 := *x.LimitBytes + yym3576 := z.EncBinary() + _ = yym3576 + if false { + } else { + r.EncodeInt(int64(yy3575)) + } + } + } + if yyr3540 || yy2arr3540 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodLogOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3577 := z.DecBinary() + _ = yym3577 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3578 := r.ContainerType() + if yyct3578 == codecSelferValueTypeMap1234 { + yyl3578 := r.ReadMapStart() + if yyl3578 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3578, d) + } + } else if yyct3578 == codecSelferValueTypeArray1234 { + yyl3578 := r.ReadArrayStart() + if yyl3578 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3578, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodLogOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3579Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3579Slc + var yyhl3579 bool = l >= 0 + for yyj3579 := 0; ; yyj3579++ { + if yyhl3579 { + if yyj3579 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3579Slc = r.DecodeBytes(yys3579Slc, true, true) + yys3579 := string(yys3579Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3579 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "Container": + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + case "Follow": + if r.TryDecodeAsNil() { + x.Follow = false + } else { + x.Follow = bool(r.DecodeBool()) + } + case "Previous": + if r.TryDecodeAsNil() { + x.Previous = false + } else { + x.Previous = bool(r.DecodeBool()) + } + case "SinceSeconds": + if r.TryDecodeAsNil() { + if x.SinceSeconds != nil { + x.SinceSeconds = nil + } + } else { + if x.SinceSeconds == nil { + x.SinceSeconds = new(int64) + } + yym3586 := z.DecBinary() + _ = yym3586 + if false { + } else { + *((*int64)(x.SinceSeconds)) = int64(r.DecodeInt(64)) + } + } + case "SinceTime": + if r.TryDecodeAsNil() { + if x.SinceTime != nil { + x.SinceTime = nil + } + } else { + if x.SinceTime == nil { + x.SinceTime = new(pkg2_unversioned.Time) + } + yym3588 := z.DecBinary() + _ = yym3588 + if false { + } else if z.HasExtensions() && z.DecExt(x.SinceTime) { + } else if yym3588 { + z.DecBinaryUnmarshal(x.SinceTime) + } else if !yym3588 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.SinceTime) + } else { + z.DecFallback(x.SinceTime, false) + } + } + case "Timestamps": + if r.TryDecodeAsNil() { + x.Timestamps = false + } else { + x.Timestamps = bool(r.DecodeBool()) + } + case "TailLines": + if r.TryDecodeAsNil() { + if x.TailLines != nil { + x.TailLines = nil + } + } else { + if x.TailLines == nil { + x.TailLines = new(int64) + } + yym3591 := z.DecBinary() + _ = yym3591 + if false { + } else { + *((*int64)(x.TailLines)) = int64(r.DecodeInt(64)) + } + } + case "LimitBytes": + if r.TryDecodeAsNil() { + if x.LimitBytes != nil { + x.LimitBytes = nil + } + } else { + if x.LimitBytes == nil { + x.LimitBytes = new(int64) + } + yym3593 := z.DecBinary() + _ = yym3593 + if false { + } else { + *((*int64)(x.LimitBytes)) = int64(r.DecodeInt(64)) + } + } + default: + z.DecStructFieldNotFound(-1, yys3579) + } // end switch yys3579 + } // end for yyj3579 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodLogOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3594 int + var yyb3594 bool + var yyhl3594 bool = l >= 0 + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Follow = false + } else { + x.Follow = bool(r.DecodeBool()) + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Previous = false + } else { + x.Previous = bool(r.DecodeBool()) + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SinceSeconds != nil { + x.SinceSeconds = nil + } + } else { + if x.SinceSeconds == nil { + x.SinceSeconds = new(int64) + } + yym3601 := z.DecBinary() + _ = yym3601 + if false { + } else { + *((*int64)(x.SinceSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SinceTime != nil { + x.SinceTime = nil + } + } else { + if x.SinceTime == nil { + x.SinceTime = new(pkg2_unversioned.Time) + } + yym3603 := z.DecBinary() + _ = yym3603 + if false { + } else if z.HasExtensions() && z.DecExt(x.SinceTime) { + } else if yym3603 { + z.DecBinaryUnmarshal(x.SinceTime) + } else if !yym3603 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.SinceTime) + } else { + z.DecFallback(x.SinceTime, false) + } + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Timestamps = false + } else { + x.Timestamps = bool(r.DecodeBool()) + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TailLines != nil { + x.TailLines = nil + } + } else { + if x.TailLines == nil { + x.TailLines = new(int64) + } + yym3606 := z.DecBinary() + _ = yym3606 + if false { + } else { + *((*int64)(x.TailLines)) = int64(r.DecodeInt(64)) + } + } + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.LimitBytes != nil { + x.LimitBytes = nil + } + } else { + if x.LimitBytes == nil { + x.LimitBytes = new(int64) + } + yym3608 := z.DecBinary() + _ = yym3608 + if false { + } else { + *((*int64)(x.LimitBytes)) = int64(r.DecodeInt(64)) + } + } + for { + yyj3594++ + if yyhl3594 { + yyb3594 = yyj3594 > l + } else { + yyb3594 = r.CheckBreak() + } + if yyb3594 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3594-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodAttachOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3609 := z.EncBinary() + _ = yym3609 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3610 := !z.EncBinary() + yy2arr3610 := z.EncBasicHandle().StructToArray + var yyq3610 [7]bool + _, _, _ = yysep3610, yyq3610, yy2arr3610 + const yyr3610 bool = false + yyq3610[0] = x.Kind != "" + yyq3610[1] = x.APIVersion != "" + yyq3610[2] = x.Stdin != false + yyq3610[3] = x.Stdout != false + yyq3610[4] = x.Stderr != false + yyq3610[5] = x.TTY != false + yyq3610[6] = x.Container != "" + var yynn3610 int + if yyr3610 || yy2arr3610 { + r.EncodeArrayStart(7) + } else { + yynn3610 = 0 + for _, b := range yyq3610 { + if b { + yynn3610++ + } + } + r.EncodeMapStart(yynn3610) + yynn3610 = 0 + } + if yyr3610 || yy2arr3610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3610[0] { + yym3612 := z.EncBinary() + _ = yym3612 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3610[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3613 := z.EncBinary() + _ = yym3613 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3610 || yy2arr3610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3610[1] { + yym3615 := z.EncBinary() + _ = yym3615 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3610[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3616 := z.EncBinary() + _ = yym3616 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3610 || yy2arr3610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3610[2] { + yym3618 := z.EncBinary() + _ = yym3618 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3610[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdin")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3619 := z.EncBinary() + _ = yym3619 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } + } + if yyr3610 || yy2arr3610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3610[3] { + yym3621 := z.EncBinary() + _ = yym3621 + if false { + } else { + r.EncodeBool(bool(x.Stdout)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3610[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdout")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3622 := z.EncBinary() + _ = yym3622 + if false { + } else { + r.EncodeBool(bool(x.Stdout)) + } + } + } + if yyr3610 || yy2arr3610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3610[4] { + yym3624 := z.EncBinary() + _ = yym3624 + if false { + } else { + r.EncodeBool(bool(x.Stderr)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3610[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stderr")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3625 := z.EncBinary() + _ = yym3625 + if false { + } else { + r.EncodeBool(bool(x.Stderr)) + } + } + } + if yyr3610 || yy2arr3610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3610[5] { + yym3627 := z.EncBinary() + _ = yym3627 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3610[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tty")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3628 := z.EncBinary() + _ = yym3628 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } + } + if yyr3610 || yy2arr3610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3610[6] { + yym3630 := z.EncBinary() + _ = yym3630 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3610[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("container")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3631 := z.EncBinary() + _ = yym3631 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } + } + if yyr3610 || yy2arr3610 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodAttachOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3632 := z.DecBinary() + _ = yym3632 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3633 := r.ContainerType() + if yyct3633 == codecSelferValueTypeMap1234 { + yyl3633 := r.ReadMapStart() + if yyl3633 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3633, d) + } + } else if yyct3633 == codecSelferValueTypeArray1234 { + yyl3633 := r.ReadArrayStart() + if yyl3633 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3633, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodAttachOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3634Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3634Slc + var yyhl3634 bool = l >= 0 + for yyj3634 := 0; ; yyj3634++ { + if yyhl3634 { + if yyj3634 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3634Slc = r.DecodeBytes(yys3634Slc, true, true) + yys3634 := string(yys3634Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3634 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "stdin": + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + case "stdout": + if r.TryDecodeAsNil() { + x.Stdout = false + } else { + x.Stdout = bool(r.DecodeBool()) + } + case "stderr": + if r.TryDecodeAsNil() { + x.Stderr = false + } else { + x.Stderr = bool(r.DecodeBool()) + } + case "tty": + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + case "container": + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3634) + } // end switch yys3634 + } // end for yyj3634 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodAttachOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3642 int + var yyb3642 bool + var yyhl3642 bool = l >= 0 + yyj3642++ + if yyhl3642 { + yyb3642 = yyj3642 > l + } else { + yyb3642 = r.CheckBreak() + } + if yyb3642 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3642++ + if yyhl3642 { + yyb3642 = yyj3642 > l + } else { + yyb3642 = r.CheckBreak() + } + if yyb3642 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3642++ + if yyhl3642 { + yyb3642 = yyj3642 > l + } else { + yyb3642 = r.CheckBreak() + } + if yyb3642 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + yyj3642++ + if yyhl3642 { + yyb3642 = yyj3642 > l + } else { + yyb3642 = r.CheckBreak() + } + if yyb3642 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdout = false + } else { + x.Stdout = bool(r.DecodeBool()) + } + yyj3642++ + if yyhl3642 { + yyb3642 = yyj3642 > l + } else { + yyb3642 = r.CheckBreak() + } + if yyb3642 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stderr = false + } else { + x.Stderr = bool(r.DecodeBool()) + } + yyj3642++ + if yyhl3642 { + yyb3642 = yyj3642 > l + } else { + yyb3642 = r.CheckBreak() + } + if yyb3642 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + yyj3642++ + if yyhl3642 { + yyb3642 = yyj3642 > l + } else { + yyb3642 = r.CheckBreak() + } + if yyb3642 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + for { + yyj3642++ + if yyhl3642 { + yyb3642 = yyj3642 > l + } else { + yyb3642 = r.CheckBreak() + } + if yyb3642 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3642-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodExecOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3650 := z.EncBinary() + _ = yym3650 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3651 := !z.EncBinary() + yy2arr3651 := z.EncBasicHandle().StructToArray + var yyq3651 [8]bool + _, _, _ = yysep3651, yyq3651, yy2arr3651 + const yyr3651 bool = false + yyq3651[0] = x.Kind != "" + yyq3651[1] = x.APIVersion != "" + var yynn3651 int + if yyr3651 || yy2arr3651 { + r.EncodeArrayStart(8) + } else { + yynn3651 = 6 + for _, b := range yyq3651 { + if b { + yynn3651++ + } + } + r.EncodeMapStart(yynn3651) + yynn3651 = 0 + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3651[0] { + yym3653 := z.EncBinary() + _ = yym3653 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3651[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3654 := z.EncBinary() + _ = yym3654 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3651[1] { + yym3656 := z.EncBinary() + _ = yym3656 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3651[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3657 := z.EncBinary() + _ = yym3657 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3659 := z.EncBinary() + _ = yym3659 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Stdin")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3660 := z.EncBinary() + _ = yym3660 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3662 := z.EncBinary() + _ = yym3662 + if false { + } else { + r.EncodeBool(bool(x.Stdout)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Stdout")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3663 := z.EncBinary() + _ = yym3663 + if false { + } else { + r.EncodeBool(bool(x.Stdout)) + } + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3665 := z.EncBinary() + _ = yym3665 + if false { + } else { + r.EncodeBool(bool(x.Stderr)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Stderr")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3666 := z.EncBinary() + _ = yym3666 + if false { + } else { + r.EncodeBool(bool(x.Stderr)) + } + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3668 := z.EncBinary() + _ = yym3668 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("TTY")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3669 := z.EncBinary() + _ = yym3669 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3671 := z.EncBinary() + _ = yym3671 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Container")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3672 := z.EncBinary() + _ = yym3672 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Command == nil { + r.EncodeNil() + } else { + yym3674 := z.EncBinary() + _ = yym3674 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Command")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Command == nil { + r.EncodeNil() + } else { + yym3675 := z.EncBinary() + _ = yym3675 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } + if yyr3651 || yy2arr3651 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodExecOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3676 := z.DecBinary() + _ = yym3676 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3677 := r.ContainerType() + if yyct3677 == codecSelferValueTypeMap1234 { + yyl3677 := r.ReadMapStart() + if yyl3677 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3677, d) + } + } else if yyct3677 == codecSelferValueTypeArray1234 { + yyl3677 := r.ReadArrayStart() + if yyl3677 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3677, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodExecOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3678Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3678Slc + var yyhl3678 bool = l >= 0 + for yyj3678 := 0; ; yyj3678++ { + if yyhl3678 { + if yyj3678 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3678Slc = r.DecodeBytes(yys3678Slc, true, true) + yys3678 := string(yys3678Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3678 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "Stdin": + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + case "Stdout": + if r.TryDecodeAsNil() { + x.Stdout = false + } else { + x.Stdout = bool(r.DecodeBool()) + } + case "Stderr": + if r.TryDecodeAsNil() { + x.Stderr = false + } else { + x.Stderr = bool(r.DecodeBool()) + } + case "TTY": + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + case "Container": + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + case "Command": + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv3686 := &x.Command + yym3687 := z.DecBinary() + _ = yym3687 + if false { + } else { + z.F.DecSliceStringX(yyv3686, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3678) + } // end switch yys3678 + } // end for yyj3678 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodExecOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3688 int + var yyb3688 bool + var yyhl3688 bool = l >= 0 + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdout = false + } else { + x.Stdout = bool(r.DecodeBool()) + } + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stderr = false + } else { + x.Stderr = bool(r.DecodeBool()) + } + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv3696 := &x.Command + yym3697 := z.DecBinary() + _ = yym3697 + if false { + } else { + z.F.DecSliceStringX(yyv3696, false, d) + } + } + for { + yyj3688++ + if yyhl3688 { + yyb3688 = yyj3688 > l + } else { + yyb3688 = r.CheckBreak() + } + if yyb3688 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3688-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodProxyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3698 := z.EncBinary() + _ = yym3698 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3699 := !z.EncBinary() + yy2arr3699 := z.EncBasicHandle().StructToArray + var yyq3699 [3]bool + _, _, _ = yysep3699, yyq3699, yy2arr3699 + const yyr3699 bool = false + yyq3699[0] = x.Kind != "" + yyq3699[1] = x.APIVersion != "" + var yynn3699 int + if yyr3699 || yy2arr3699 { + r.EncodeArrayStart(3) + } else { + yynn3699 = 1 + for _, b := range yyq3699 { + if b { + yynn3699++ + } + } + r.EncodeMapStart(yynn3699) + yynn3699 = 0 + } + if yyr3699 || yy2arr3699 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3699[0] { + yym3701 := z.EncBinary() + _ = yym3701 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3699[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3702 := z.EncBinary() + _ = yym3702 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3699 || yy2arr3699 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3699[1] { + yym3704 := z.EncBinary() + _ = yym3704 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3699[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3705 := z.EncBinary() + _ = yym3705 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3699 || yy2arr3699 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3707 := z.EncBinary() + _ = yym3707 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3708 := z.EncBinary() + _ = yym3708 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr3699 || yy2arr3699 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodProxyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3709 := z.DecBinary() + _ = yym3709 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3710 := r.ContainerType() + if yyct3710 == codecSelferValueTypeMap1234 { + yyl3710 := r.ReadMapStart() + if yyl3710 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3710, d) + } + } else if yyct3710 == codecSelferValueTypeArray1234 { + yyl3710 := r.ReadArrayStart() + if yyl3710 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3710, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodProxyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3711Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3711Slc + var yyhl3711 bool = l >= 0 + for yyj3711 := 0; ; yyj3711++ { + if yyhl3711 { + if yyj3711 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3711Slc = r.DecodeBytes(yys3711Slc, true, true) + yys3711 := string(yys3711Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3711 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "Path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3711) + } // end switch yys3711 + } // end for yyj3711 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodProxyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3715 int + var yyb3715 bool + var yyhl3715 bool = l >= 0 + yyj3715++ + if yyhl3715 { + yyb3715 = yyj3715 > l + } else { + yyb3715 = r.CheckBreak() + } + if yyb3715 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3715++ + if yyhl3715 { + yyb3715 = yyj3715 > l + } else { + yyb3715 = r.CheckBreak() + } + if yyb3715 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3715++ + if yyhl3715 { + yyb3715 = yyj3715 > l + } else { + yyb3715 = r.CheckBreak() + } + if yyb3715 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + for { + yyj3715++ + if yyhl3715 { + yyb3715 = yyj3715 > l + } else { + yyb3715 = r.CheckBreak() + } + if yyb3715 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3715-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeProxyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3719 := z.EncBinary() + _ = yym3719 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3720 := !z.EncBinary() + yy2arr3720 := z.EncBasicHandle().StructToArray + var yyq3720 [3]bool + _, _, _ = yysep3720, yyq3720, yy2arr3720 + const yyr3720 bool = false + yyq3720[0] = x.Kind != "" + yyq3720[1] = x.APIVersion != "" + var yynn3720 int + if yyr3720 || yy2arr3720 { + r.EncodeArrayStart(3) + } else { + yynn3720 = 1 + for _, b := range yyq3720 { + if b { + yynn3720++ + } + } + r.EncodeMapStart(yynn3720) + yynn3720 = 0 + } + if yyr3720 || yy2arr3720 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3720[0] { + yym3722 := z.EncBinary() + _ = yym3722 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3720[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3723 := z.EncBinary() + _ = yym3723 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3720 || yy2arr3720 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3720[1] { + yym3725 := z.EncBinary() + _ = yym3725 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3720[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3726 := z.EncBinary() + _ = yym3726 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3720 || yy2arr3720 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3728 := z.EncBinary() + _ = yym3728 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3729 := z.EncBinary() + _ = yym3729 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr3720 || yy2arr3720 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeProxyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3730 := z.DecBinary() + _ = yym3730 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3731 := r.ContainerType() + if yyct3731 == codecSelferValueTypeMap1234 { + yyl3731 := r.ReadMapStart() + if yyl3731 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3731, d) + } + } else if yyct3731 == codecSelferValueTypeArray1234 { + yyl3731 := r.ReadArrayStart() + if yyl3731 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3731, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeProxyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3732Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3732Slc + var yyhl3732 bool = l >= 0 + for yyj3732 := 0; ; yyj3732++ { + if yyhl3732 { + if yyj3732 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3732Slc = r.DecodeBytes(yys3732Slc, true, true) + yys3732 := string(yys3732Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3732 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "Path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3732) + } // end switch yys3732 + } // end for yyj3732 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeProxyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3736 int + var yyb3736 bool + var yyhl3736 bool = l >= 0 + yyj3736++ + if yyhl3736 { + yyb3736 = yyj3736 > l + } else { + yyb3736 = r.CheckBreak() + } + if yyb3736 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3736++ + if yyhl3736 { + yyb3736 = yyj3736 > l + } else { + yyb3736 = r.CheckBreak() + } + if yyb3736 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3736++ + if yyhl3736 { + yyb3736 = yyj3736 > l + } else { + yyb3736 = r.CheckBreak() + } + if yyb3736 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + for { + yyj3736++ + if yyhl3736 { + yyb3736 = yyj3736 > l + } else { + yyb3736 = r.CheckBreak() + } + if yyb3736 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3736-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceProxyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3740 := z.EncBinary() + _ = yym3740 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3741 := !z.EncBinary() + yy2arr3741 := z.EncBasicHandle().StructToArray + var yyq3741 [3]bool + _, _, _ = yysep3741, yyq3741, yy2arr3741 + const yyr3741 bool = false + yyq3741[0] = x.Kind != "" + yyq3741[1] = x.APIVersion != "" + var yynn3741 int + if yyr3741 || yy2arr3741 { + r.EncodeArrayStart(3) + } else { + yynn3741 = 1 + for _, b := range yyq3741 { + if b { + yynn3741++ + } + } + r.EncodeMapStart(yynn3741) + yynn3741 = 0 + } + if yyr3741 || yy2arr3741 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3741[0] { + yym3743 := z.EncBinary() + _ = yym3743 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3741[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3744 := z.EncBinary() + _ = yym3744 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3741 || yy2arr3741 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3741[1] { + yym3746 := z.EncBinary() + _ = yym3746 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3741[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3747 := z.EncBinary() + _ = yym3747 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3741 || yy2arr3741 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3749 := z.EncBinary() + _ = yym3749 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3750 := z.EncBinary() + _ = yym3750 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr3741 || yy2arr3741 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceProxyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3751 := z.DecBinary() + _ = yym3751 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3752 := r.ContainerType() + if yyct3752 == codecSelferValueTypeMap1234 { + yyl3752 := r.ReadMapStart() + if yyl3752 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3752, d) + } + } else if yyct3752 == codecSelferValueTypeArray1234 { + yyl3752 := r.ReadArrayStart() + if yyl3752 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3752, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceProxyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3753Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3753Slc + var yyhl3753 bool = l >= 0 + for yyj3753 := 0; ; yyj3753++ { + if yyhl3753 { + if yyj3753 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3753Slc = r.DecodeBytes(yys3753Slc, true, true) + yys3753 := string(yys3753Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3753 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "Path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3753) + } // end switch yys3753 + } // end for yyj3753 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceProxyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3757 int + var yyb3757 bool + var yyhl3757 bool = l >= 0 + yyj3757++ + if yyhl3757 { + yyb3757 = yyj3757 > l + } else { + yyb3757 = r.CheckBreak() + } + if yyb3757 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3757++ + if yyhl3757 { + yyb3757 = yyj3757 > l + } else { + yyb3757 = r.CheckBreak() + } + if yyb3757 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3757++ + if yyhl3757 { + yyb3757 = yyj3757 > l + } else { + yyb3757 = r.CheckBreak() + } + if yyb3757 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + for { + yyj3757++ + if yyhl3757 { + yyb3757 = yyj3757 > l + } else { + yyb3757 = r.CheckBreak() + } + if yyb3757 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3757-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *OwnerReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3761 := z.EncBinary() + _ = yym3761 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3762 := !z.EncBinary() + yy2arr3762 := z.EncBasicHandle().StructToArray + var yyq3762 [5]bool + _, _, _ = yysep3762, yyq3762, yy2arr3762 + const yyr3762 bool = false + yyq3762[4] = x.Controller != nil + var yynn3762 int + if yyr3762 || yy2arr3762 { + r.EncodeArrayStart(5) + } else { + yynn3762 = 4 + for _, b := range yyq3762 { + if b { + yynn3762++ + } + } + r.EncodeMapStart(yynn3762) + yynn3762 = 0 + } + if yyr3762 || yy2arr3762 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3764 := z.EncBinary() + _ = yym3764 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3765 := z.EncBinary() + _ = yym3765 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + if yyr3762 || yy2arr3762 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3767 := z.EncBinary() + _ = yym3767 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3768 := z.EncBinary() + _ = yym3768 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + if yyr3762 || yy2arr3762 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3770 := z.EncBinary() + _ = yym3770 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3771 := z.EncBinary() + _ = yym3771 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr3762 || yy2arr3762 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3773 := z.EncBinary() + _ = yym3773 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("uid")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3774 := z.EncBinary() + _ = yym3774 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } + if yyr3762 || yy2arr3762 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3762[4] { + if x.Controller == nil { + r.EncodeNil() + } else { + yy3776 := *x.Controller + yym3777 := z.EncBinary() + _ = yym3777 + if false { + } else { + r.EncodeBool(bool(yy3776)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3762[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("controller")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Controller == nil { + r.EncodeNil() + } else { + yy3778 := *x.Controller + yym3779 := z.EncBinary() + _ = yym3779 + if false { + } else { + r.EncodeBool(bool(yy3778)) + } + } + } + } + if yyr3762 || yy2arr3762 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *OwnerReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3780 := z.DecBinary() + _ = yym3780 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3781 := r.ContainerType() + if yyct3781 == codecSelferValueTypeMap1234 { + yyl3781 := r.ReadMapStart() + if yyl3781 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3781, d) + } + } else if yyct3781 == codecSelferValueTypeArray1234 { + yyl3781 := r.ReadArrayStart() + if yyl3781 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3781, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *OwnerReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3782Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3782Slc + var yyhl3782 bool = l >= 0 + for yyj3782 := 0; ; yyj3782++ { + if yyhl3782 { + if yyj3782 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3782Slc = r.DecodeBytes(yys3782Slc, true, true) + yys3782 := string(yys3782Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3782 { + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "uid": + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + case "controller": + if r.TryDecodeAsNil() { + if x.Controller != nil { + x.Controller = nil + } + } else { + if x.Controller == nil { + x.Controller = new(bool) + } + yym3788 := z.DecBinary() + _ = yym3788 + if false { + } else { + *((*bool)(x.Controller)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys3782) + } // end switch yys3782 + } // end for yyj3782 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *OwnerReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3789 int + var yyb3789 bool + var yyhl3789 bool = l >= 0 + yyj3789++ + if yyhl3789 { + yyb3789 = yyj3789 > l + } else { + yyb3789 = r.CheckBreak() + } + if yyb3789 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3789++ + if yyhl3789 { + yyb3789 = yyj3789 > l + } else { + yyb3789 = r.CheckBreak() + } + if yyb3789 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3789++ + if yyhl3789 { + yyb3789 = yyj3789 > l + } else { + yyb3789 = r.CheckBreak() + } + if yyb3789 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj3789++ + if yyhl3789 { + yyb3789 = yyj3789 > l + } else { + yyb3789 = r.CheckBreak() + } + if yyb3789 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + yyj3789++ + if yyhl3789 { + yyb3789 = yyj3789 > l + } else { + yyb3789 = r.CheckBreak() + } + if yyb3789 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Controller != nil { + x.Controller = nil + } + } else { + if x.Controller == nil { + x.Controller = new(bool) + } + yym3795 := z.DecBinary() + _ = yym3795 + if false { + } else { + *((*bool)(x.Controller)) = r.DecodeBool() + } + } + for { + yyj3789++ + if yyhl3789 { + yyb3789 = yyj3789 > l + } else { + yyb3789 = r.CheckBreak() + } + if yyb3789 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3789-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ObjectReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3796 := z.EncBinary() + _ = yym3796 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3797 := !z.EncBinary() + yy2arr3797 := z.EncBasicHandle().StructToArray + var yyq3797 [7]bool + _, _, _ = yysep3797, yyq3797, yy2arr3797 + const yyr3797 bool = false + yyq3797[0] = x.Kind != "" + yyq3797[1] = x.Namespace != "" + yyq3797[2] = x.Name != "" + yyq3797[3] = x.UID != "" + yyq3797[4] = x.APIVersion != "" + yyq3797[5] = x.ResourceVersion != "" + yyq3797[6] = x.FieldPath != "" + var yynn3797 int + if yyr3797 || yy2arr3797 { + r.EncodeArrayStart(7) + } else { + yynn3797 = 0 + for _, b := range yyq3797 { + if b { + yynn3797++ + } + } + r.EncodeMapStart(yynn3797) + yynn3797 = 0 + } + if yyr3797 || yy2arr3797 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3797[0] { + yym3799 := z.EncBinary() + _ = yym3799 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3797[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3800 := z.EncBinary() + _ = yym3800 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3797 || yy2arr3797 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3797[1] { + yym3802 := z.EncBinary() + _ = yym3802 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Namespace)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3797[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("namespace")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3803 := z.EncBinary() + _ = yym3803 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Namespace)) + } + } + } + if yyr3797 || yy2arr3797 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3797[2] { + yym3805 := z.EncBinary() + _ = yym3805 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3797[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3806 := z.EncBinary() + _ = yym3806 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr3797 || yy2arr3797 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3797[3] { + yym3808 := z.EncBinary() + _ = yym3808 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3797[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("uid")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3809 := z.EncBinary() + _ = yym3809 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } + } + if yyr3797 || yy2arr3797 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3797[4] { + yym3811 := z.EncBinary() + _ = yym3811 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3797[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3812 := z.EncBinary() + _ = yym3812 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3797 || yy2arr3797 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3797[5] { + yym3814 := z.EncBinary() + _ = yym3814 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3797[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3815 := z.EncBinary() + _ = yym3815 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } + } + if yyr3797 || yy2arr3797 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3797[6] { + yym3817 := z.EncBinary() + _ = yym3817 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldPath)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3797[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3818 := z.EncBinary() + _ = yym3818 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldPath)) + } + } + } + if yyr3797 || yy2arr3797 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ObjectReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3819 := z.DecBinary() + _ = yym3819 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3820 := r.ContainerType() + if yyct3820 == codecSelferValueTypeMap1234 { + yyl3820 := r.ReadMapStart() + if yyl3820 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3820, d) + } + } else if yyct3820 == codecSelferValueTypeArray1234 { + yyl3820 := r.ReadArrayStart() + if yyl3820 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3820, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ObjectReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3821Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3821Slc + var yyhl3821 bool = l >= 0 + for yyj3821 := 0; ; yyj3821++ { + if yyhl3821 { + if yyj3821 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3821Slc = r.DecodeBytes(yys3821Slc, true, true) + yys3821 := string(yys3821Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3821 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "namespace": + if r.TryDecodeAsNil() { + x.Namespace = "" + } else { + x.Namespace = string(r.DecodeString()) + } + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "uid": + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "resourceVersion": + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + case "fieldPath": + if r.TryDecodeAsNil() { + x.FieldPath = "" + } else { + x.FieldPath = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3821) + } // end switch yys3821 + } // end for yyj3821 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ObjectReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3829 int + var yyb3829 bool + var yyhl3829 bool = l >= 0 + yyj3829++ + if yyhl3829 { + yyb3829 = yyj3829 > l + } else { + yyb3829 = r.CheckBreak() + } + if yyb3829 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3829++ + if yyhl3829 { + yyb3829 = yyj3829 > l + } else { + yyb3829 = r.CheckBreak() + } + if yyb3829 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Namespace = "" + } else { + x.Namespace = string(r.DecodeString()) + } + yyj3829++ + if yyhl3829 { + yyb3829 = yyj3829 > l + } else { + yyb3829 = r.CheckBreak() + } + if yyb3829 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj3829++ + if yyhl3829 { + yyb3829 = yyj3829 > l + } else { + yyb3829 = r.CheckBreak() + } + if yyb3829 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + yyj3829++ + if yyhl3829 { + yyb3829 = yyj3829 > l + } else { + yyb3829 = r.CheckBreak() + } + if yyb3829 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3829++ + if yyhl3829 { + yyb3829 = yyj3829 > l + } else { + yyb3829 = r.CheckBreak() + } + if yyb3829 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + yyj3829++ + if yyhl3829 { + yyb3829 = yyj3829 > l + } else { + yyb3829 = r.CheckBreak() + } + if yyb3829 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FieldPath = "" + } else { + x.FieldPath = string(r.DecodeString()) + } + for { + yyj3829++ + if yyhl3829 { + yyb3829 = yyj3829 > l + } else { + yyb3829 = r.CheckBreak() + } + if yyb3829 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3829-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LocalObjectReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3837 := z.EncBinary() + _ = yym3837 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3838 := !z.EncBinary() + yy2arr3838 := z.EncBasicHandle().StructToArray + var yyq3838 [1]bool + _, _, _ = yysep3838, yyq3838, yy2arr3838 + const yyr3838 bool = false + var yynn3838 int + if yyr3838 || yy2arr3838 { + r.EncodeArrayStart(1) + } else { + yynn3838 = 1 + for _, b := range yyq3838 { + if b { + yynn3838++ + } + } + r.EncodeMapStart(yynn3838) + yynn3838 = 0 + } + if yyr3838 || yy2arr3838 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3840 := z.EncBinary() + _ = yym3840 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3841 := z.EncBinary() + _ = yym3841 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr3838 || yy2arr3838 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LocalObjectReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3842 := z.DecBinary() + _ = yym3842 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3843 := r.ContainerType() + if yyct3843 == codecSelferValueTypeMap1234 { + yyl3843 := r.ReadMapStart() + if yyl3843 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3843, d) + } + } else if yyct3843 == codecSelferValueTypeArray1234 { + yyl3843 := r.ReadArrayStart() + if yyl3843 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3843, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LocalObjectReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3844Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3844Slc + var yyhl3844 bool = l >= 0 + for yyj3844 := 0; ; yyj3844++ { + if yyhl3844 { + if yyj3844 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3844Slc = r.DecodeBytes(yys3844Slc, true, true) + yys3844 := string(yys3844Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3844 { + case "Name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3844) + } // end switch yys3844 + } // end for yyj3844 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LocalObjectReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3846 int + var yyb3846 bool + var yyhl3846 bool = l >= 0 + yyj3846++ + if yyhl3846 { + yyb3846 = yyj3846 > l + } else { + yyb3846 = r.CheckBreak() + } + if yyb3846 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + for { + yyj3846++ + if yyhl3846 { + yyb3846 = yyj3846 > l + } else { + yyb3846 = r.CheckBreak() + } + if yyb3846 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3846-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SerializedReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3848 := z.EncBinary() + _ = yym3848 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3849 := !z.EncBinary() + yy2arr3849 := z.EncBasicHandle().StructToArray + var yyq3849 [3]bool + _, _, _ = yysep3849, yyq3849, yy2arr3849 + const yyr3849 bool = false + yyq3849[0] = x.Kind != "" + yyq3849[1] = x.APIVersion != "" + yyq3849[2] = true + var yynn3849 int + if yyr3849 || yy2arr3849 { + r.EncodeArrayStart(3) + } else { + yynn3849 = 0 + for _, b := range yyq3849 { + if b { + yynn3849++ + } + } + r.EncodeMapStart(yynn3849) + yynn3849 = 0 + } + if yyr3849 || yy2arr3849 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3849[0] { + yym3851 := z.EncBinary() + _ = yym3851 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3849[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3852 := z.EncBinary() + _ = yym3852 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3849 || yy2arr3849 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3849[1] { + yym3854 := z.EncBinary() + _ = yym3854 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3849[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3855 := z.EncBinary() + _ = yym3855 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3849 || yy2arr3849 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3849[2] { + yy3857 := &x.Reference + yy3857.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3849[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reference")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3858 := &x.Reference + yy3858.CodecEncodeSelf(e) + } + } + if yyr3849 || yy2arr3849 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SerializedReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3859 := z.DecBinary() + _ = yym3859 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3860 := r.ContainerType() + if yyct3860 == codecSelferValueTypeMap1234 { + yyl3860 := r.ReadMapStart() + if yyl3860 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3860, d) + } + } else if yyct3860 == codecSelferValueTypeArray1234 { + yyl3860 := r.ReadArrayStart() + if yyl3860 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3860, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SerializedReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3861Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3861Slc + var yyhl3861 bool = l >= 0 + for yyj3861 := 0; ; yyj3861++ { + if yyhl3861 { + if yyj3861 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3861Slc = r.DecodeBytes(yys3861Slc, true, true) + yys3861 := string(yys3861Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3861 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "reference": + if r.TryDecodeAsNil() { + x.Reference = ObjectReference{} + } else { + yyv3864 := &x.Reference + yyv3864.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3861) + } // end switch yys3861 + } // end for yyj3861 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SerializedReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3865 int + var yyb3865 bool + var yyhl3865 bool = l >= 0 + yyj3865++ + if yyhl3865 { + yyb3865 = yyj3865 > l + } else { + yyb3865 = r.CheckBreak() + } + if yyb3865 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3865++ + if yyhl3865 { + yyb3865 = yyj3865 > l + } else { + yyb3865 = r.CheckBreak() + } + if yyb3865 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3865++ + if yyhl3865 { + yyb3865 = yyj3865 > l + } else { + yyb3865 = r.CheckBreak() + } + if yyb3865 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reference = ObjectReference{} + } else { + yyv3868 := &x.Reference + yyv3868.CodecDecodeSelf(d) + } + for { + yyj3865++ + if yyhl3865 { + yyb3865 = yyj3865 > l + } else { + yyb3865 = r.CheckBreak() + } + if yyb3865 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3865-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EventSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3869 := z.EncBinary() + _ = yym3869 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3870 := !z.EncBinary() + yy2arr3870 := z.EncBasicHandle().StructToArray + var yyq3870 [2]bool + _, _, _ = yysep3870, yyq3870, yy2arr3870 + const yyr3870 bool = false + yyq3870[0] = x.Component != "" + yyq3870[1] = x.Host != "" + var yynn3870 int + if yyr3870 || yy2arr3870 { + r.EncodeArrayStart(2) + } else { + yynn3870 = 0 + for _, b := range yyq3870 { + if b { + yynn3870++ + } + } + r.EncodeMapStart(yynn3870) + yynn3870 = 0 + } + if yyr3870 || yy2arr3870 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3870[0] { + yym3872 := z.EncBinary() + _ = yym3872 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Component)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3870[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("component")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3873 := z.EncBinary() + _ = yym3873 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Component)) + } + } + } + if yyr3870 || yy2arr3870 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3870[1] { + yym3875 := z.EncBinary() + _ = yym3875 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3870[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("host")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3876 := z.EncBinary() + _ = yym3876 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } + } + if yyr3870 || yy2arr3870 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EventSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3877 := z.DecBinary() + _ = yym3877 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3878 := r.ContainerType() + if yyct3878 == codecSelferValueTypeMap1234 { + yyl3878 := r.ReadMapStart() + if yyl3878 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3878, d) + } + } else if yyct3878 == codecSelferValueTypeArray1234 { + yyl3878 := r.ReadArrayStart() + if yyl3878 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3878, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EventSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3879Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3879Slc + var yyhl3879 bool = l >= 0 + for yyj3879 := 0; ; yyj3879++ { + if yyhl3879 { + if yyj3879 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3879Slc = r.DecodeBytes(yys3879Slc, true, true) + yys3879 := string(yys3879Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3879 { + case "component": + if r.TryDecodeAsNil() { + x.Component = "" + } else { + x.Component = string(r.DecodeString()) + } + case "host": + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3879) + } // end switch yys3879 + } // end for yyj3879 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EventSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3882 int + var yyb3882 bool + var yyhl3882 bool = l >= 0 + yyj3882++ + if yyhl3882 { + yyb3882 = yyj3882 > l + } else { + yyb3882 = r.CheckBreak() + } + if yyb3882 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Component = "" + } else { + x.Component = string(r.DecodeString()) + } + yyj3882++ + if yyhl3882 { + yyb3882 = yyj3882 > l + } else { + yyb3882 = r.CheckBreak() + } + if yyb3882 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + for { + yyj3882++ + if yyhl3882 { + yyb3882 = yyj3882 > l + } else { + yyb3882 = r.CheckBreak() + } + if yyb3882 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3882-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Event) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3885 := z.EncBinary() + _ = yym3885 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3886 := !z.EncBinary() + yy2arr3886 := z.EncBasicHandle().StructToArray + var yyq3886 [11]bool + _, _, _ = yysep3886, yyq3886, yy2arr3886 + const yyr3886 bool = false + yyq3886[0] = x.Kind != "" + yyq3886[1] = x.APIVersion != "" + yyq3886[2] = true + yyq3886[3] = true + yyq3886[4] = x.Reason != "" + yyq3886[5] = x.Message != "" + yyq3886[6] = true + yyq3886[7] = true + yyq3886[8] = true + yyq3886[9] = x.Count != 0 + yyq3886[10] = x.Type != "" + var yynn3886 int + if yyr3886 || yy2arr3886 { + r.EncodeArrayStart(11) + } else { + yynn3886 = 0 + for _, b := range yyq3886 { + if b { + yynn3886++ + } + } + r.EncodeMapStart(yynn3886) + yynn3886 = 0 + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[0] { + yym3888 := z.EncBinary() + _ = yym3888 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3886[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3889 := z.EncBinary() + _ = yym3889 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[1] { + yym3891 := z.EncBinary() + _ = yym3891 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3886[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3892 := z.EncBinary() + _ = yym3892 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[2] { + yy3894 := &x.ObjectMeta + yy3894.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3886[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3895 := &x.ObjectMeta + yy3895.CodecEncodeSelf(e) + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[3] { + yy3897 := &x.InvolvedObject + yy3897.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3886[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("involvedObject")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3898 := &x.InvolvedObject + yy3898.CodecEncodeSelf(e) + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[4] { + yym3900 := z.EncBinary() + _ = yym3900 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3886[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3901 := z.EncBinary() + _ = yym3901 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[5] { + yym3903 := z.EncBinary() + _ = yym3903 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3886[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3904 := z.EncBinary() + _ = yym3904 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[6] { + yy3906 := &x.Source + yy3906.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3886[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("source")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3907 := &x.Source + yy3907.CodecEncodeSelf(e) + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[7] { + yy3909 := &x.FirstTimestamp + yym3910 := z.EncBinary() + _ = yym3910 + if false { + } else if z.HasExtensions() && z.EncExt(yy3909) { + } else if yym3910 { + z.EncBinaryMarshal(yy3909) + } else if !yym3910 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3909) + } else { + z.EncFallback(yy3909) + } + } else { + r.EncodeNil() + } + } else { + if yyq3886[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("firstTimestamp")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3911 := &x.FirstTimestamp + yym3912 := z.EncBinary() + _ = yym3912 + if false { + } else if z.HasExtensions() && z.EncExt(yy3911) { + } else if yym3912 { + z.EncBinaryMarshal(yy3911) + } else if !yym3912 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3911) + } else { + z.EncFallback(yy3911) + } + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[8] { + yy3914 := &x.LastTimestamp + yym3915 := z.EncBinary() + _ = yym3915 + if false { + } else if z.HasExtensions() && z.EncExt(yy3914) { + } else if yym3915 { + z.EncBinaryMarshal(yy3914) + } else if !yym3915 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3914) + } else { + z.EncFallback(yy3914) + } + } else { + r.EncodeNil() + } + } else { + if yyq3886[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastTimestamp")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3916 := &x.LastTimestamp + yym3917 := z.EncBinary() + _ = yym3917 + if false { + } else if z.HasExtensions() && z.EncExt(yy3916) { + } else if yym3917 { + z.EncBinaryMarshal(yy3916) + } else if !yym3917 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3916) + } else { + z.EncFallback(yy3916) + } + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[9] { + yym3919 := z.EncBinary() + _ = yym3919 + if false { + } else { + r.EncodeInt(int64(x.Count)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq3886[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("count")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3920 := z.EncBinary() + _ = yym3920 + if false { + } else { + r.EncodeInt(int64(x.Count)) + } + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3886[10] { + yym3922 := z.EncBinary() + _ = yym3922 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Type)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3886[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3923 := z.EncBinary() + _ = yym3923 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Type)) + } + } + } + if yyr3886 || yy2arr3886 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Event) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3924 := z.DecBinary() + _ = yym3924 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3925 := r.ContainerType() + if yyct3925 == codecSelferValueTypeMap1234 { + yyl3925 := r.ReadMapStart() + if yyl3925 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3925, d) + } + } else if yyct3925 == codecSelferValueTypeArray1234 { + yyl3925 := r.ReadArrayStart() + if yyl3925 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3925, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Event) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3926Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3926Slc + var yyhl3926 bool = l >= 0 + for yyj3926 := 0; ; yyj3926++ { + if yyhl3926 { + if yyj3926 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3926Slc = r.DecodeBytes(yys3926Slc, true, true) + yys3926 := string(yys3926Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3926 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3929 := &x.ObjectMeta + yyv3929.CodecDecodeSelf(d) + } + case "involvedObject": + if r.TryDecodeAsNil() { + x.InvolvedObject = ObjectReference{} + } else { + yyv3930 := &x.InvolvedObject + yyv3930.CodecDecodeSelf(d) + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "source": + if r.TryDecodeAsNil() { + x.Source = EventSource{} + } else { + yyv3933 := &x.Source + yyv3933.CodecDecodeSelf(d) + } + case "firstTimestamp": + if r.TryDecodeAsNil() { + x.FirstTimestamp = pkg2_unversioned.Time{} + } else { + yyv3934 := &x.FirstTimestamp + yym3935 := z.DecBinary() + _ = yym3935 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3934) { + } else if yym3935 { + z.DecBinaryUnmarshal(yyv3934) + } else if !yym3935 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3934) + } else { + z.DecFallback(yyv3934, false) + } + } + case "lastTimestamp": + if r.TryDecodeAsNil() { + x.LastTimestamp = pkg2_unversioned.Time{} + } else { + yyv3936 := &x.LastTimestamp + yym3937 := z.DecBinary() + _ = yym3937 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3936) { + } else if yym3937 { + z.DecBinaryUnmarshal(yyv3936) + } else if !yym3937 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3936) + } else { + z.DecFallback(yyv3936, false) + } + } + case "count": + if r.TryDecodeAsNil() { + x.Count = 0 + } else { + x.Count = int32(r.DecodeInt(32)) + } + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3926) + } // end switch yys3926 + } // end for yyj3926 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Event) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3940 int + var yyb3940 bool + var yyhl3940 bool = l >= 0 + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3943 := &x.ObjectMeta + yyv3943.CodecDecodeSelf(d) + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.InvolvedObject = ObjectReference{} + } else { + yyv3944 := &x.InvolvedObject + yyv3944.CodecDecodeSelf(d) + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Source = EventSource{} + } else { + yyv3947 := &x.Source + yyv3947.CodecDecodeSelf(d) + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FirstTimestamp = pkg2_unversioned.Time{} + } else { + yyv3948 := &x.FirstTimestamp + yym3949 := z.DecBinary() + _ = yym3949 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3948) { + } else if yym3949 { + z.DecBinaryUnmarshal(yyv3948) + } else if !yym3949 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3948) + } else { + z.DecFallback(yyv3948, false) + } + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTimestamp = pkg2_unversioned.Time{} + } else { + yyv3950 := &x.LastTimestamp + yym3951 := z.DecBinary() + _ = yym3951 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3950) { + } else if yym3951 { + z.DecBinaryUnmarshal(yyv3950) + } else if !yym3951 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3950) + } else { + z.DecFallback(yyv3950, false) + } + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Count = 0 + } else { + x.Count = int32(r.DecodeInt(32)) + } + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = string(r.DecodeString()) + } + for { + yyj3940++ + if yyhl3940 { + yyb3940 = yyj3940 > l + } else { + yyb3940 = r.CheckBreak() + } + if yyb3940 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3940-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EventList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3954 := z.EncBinary() + _ = yym3954 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3955 := !z.EncBinary() + yy2arr3955 := z.EncBasicHandle().StructToArray + var yyq3955 [4]bool + _, _, _ = yysep3955, yyq3955, yy2arr3955 + const yyr3955 bool = false + yyq3955[0] = x.Kind != "" + yyq3955[1] = x.APIVersion != "" + yyq3955[2] = true + var yynn3955 int + if yyr3955 || yy2arr3955 { + r.EncodeArrayStart(4) + } else { + yynn3955 = 1 + for _, b := range yyq3955 { + if b { + yynn3955++ + } + } + r.EncodeMapStart(yynn3955) + yynn3955 = 0 + } + if yyr3955 || yy2arr3955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3955[0] { + yym3957 := z.EncBinary() + _ = yym3957 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3955[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3958 := z.EncBinary() + _ = yym3958 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3955 || yy2arr3955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3955[1] { + yym3960 := z.EncBinary() + _ = yym3960 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3955[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3961 := z.EncBinary() + _ = yym3961 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3955 || yy2arr3955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3955[2] { + yy3963 := &x.ListMeta + yym3964 := z.EncBinary() + _ = yym3964 + if false { + } else if z.HasExtensions() && z.EncExt(yy3963) { + } else { + z.EncFallback(yy3963) + } + } else { + r.EncodeNil() + } + } else { + if yyq3955[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3965 := &x.ListMeta + yym3966 := z.EncBinary() + _ = yym3966 + if false { + } else if z.HasExtensions() && z.EncExt(yy3965) { + } else { + z.EncFallback(yy3965) + } + } + } + if yyr3955 || yy2arr3955 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3968 := z.EncBinary() + _ = yym3968 + if false { + } else { + h.encSliceEvent(([]Event)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3969 := z.EncBinary() + _ = yym3969 + if false { + } else { + h.encSliceEvent(([]Event)(x.Items), e) + } + } + } + if yyr3955 || yy2arr3955 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EventList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3970 := z.DecBinary() + _ = yym3970 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3971 := r.ContainerType() + if yyct3971 == codecSelferValueTypeMap1234 { + yyl3971 := r.ReadMapStart() + if yyl3971 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3971, d) + } + } else if yyct3971 == codecSelferValueTypeArray1234 { + yyl3971 := r.ReadArrayStart() + if yyl3971 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3971, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EventList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3972Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3972Slc + var yyhl3972 bool = l >= 0 + for yyj3972 := 0; ; yyj3972++ { + if yyhl3972 { + if yyj3972 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3972Slc = r.DecodeBytes(yys3972Slc, true, true) + yys3972 := string(yys3972Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3972 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3975 := &x.ListMeta + yym3976 := z.DecBinary() + _ = yym3976 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3975) { + } else { + z.DecFallback(yyv3975, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3977 := &x.Items + yym3978 := z.DecBinary() + _ = yym3978 + if false { + } else { + h.decSliceEvent((*[]Event)(yyv3977), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3972) + } // end switch yys3972 + } // end for yyj3972 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EventList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3979 int + var yyb3979 bool + var yyhl3979 bool = l >= 0 + yyj3979++ + if yyhl3979 { + yyb3979 = yyj3979 > l + } else { + yyb3979 = r.CheckBreak() + } + if yyb3979 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3979++ + if yyhl3979 { + yyb3979 = yyj3979 > l + } else { + yyb3979 = r.CheckBreak() + } + if yyb3979 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3979++ + if yyhl3979 { + yyb3979 = yyj3979 > l + } else { + yyb3979 = r.CheckBreak() + } + if yyb3979 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3982 := &x.ListMeta + yym3983 := z.DecBinary() + _ = yym3983 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3982) { + } else { + z.DecFallback(yyv3982, false) + } + } + yyj3979++ + if yyhl3979 { + yyb3979 = yyj3979 > l + } else { + yyb3979 = r.CheckBreak() + } + if yyb3979 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3984 := &x.Items + yym3985 := z.DecBinary() + _ = yym3985 + if false { + } else { + h.decSliceEvent((*[]Event)(yyv3984), d) + } + } + for { + yyj3979++ + if yyhl3979 { + yyb3979 = yyj3979 > l + } else { + yyb3979 = r.CheckBreak() + } + if yyb3979 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3979-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *List) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3986 := z.EncBinary() + _ = yym3986 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3987 := !z.EncBinary() + yy2arr3987 := z.EncBasicHandle().StructToArray + var yyq3987 [4]bool + _, _, _ = yysep3987, yyq3987, yy2arr3987 + const yyr3987 bool = false + yyq3987[0] = x.Kind != "" + yyq3987[1] = x.APIVersion != "" + yyq3987[2] = true + var yynn3987 int + if yyr3987 || yy2arr3987 { + r.EncodeArrayStart(4) + } else { + yynn3987 = 1 + for _, b := range yyq3987 { + if b { + yynn3987++ + } + } + r.EncodeMapStart(yynn3987) + yynn3987 = 0 + } + if yyr3987 || yy2arr3987 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3987[0] { + yym3989 := z.EncBinary() + _ = yym3989 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3987[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3990 := z.EncBinary() + _ = yym3990 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3987 || yy2arr3987 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3987[1] { + yym3992 := z.EncBinary() + _ = yym3992 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3987[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3993 := z.EncBinary() + _ = yym3993 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3987 || yy2arr3987 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3987[2] { + yy3995 := &x.ListMeta + yym3996 := z.EncBinary() + _ = yym3996 + if false { + } else if z.HasExtensions() && z.EncExt(yy3995) { + } else { + z.EncFallback(yy3995) + } + } else { + r.EncodeNil() + } + } else { + if yyq3987[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3997 := &x.ListMeta + yym3998 := z.EncBinary() + _ = yym3998 + if false { + } else if z.HasExtensions() && z.EncExt(yy3997) { + } else { + z.EncFallback(yy3997) + } + } + } + if yyr3987 || yy2arr3987 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4000 := z.EncBinary() + _ = yym4000 + if false { + } else { + h.encSliceruntime_Object(([]pkg7_runtime.Object)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4001 := z.EncBinary() + _ = yym4001 + if false { + } else { + h.encSliceruntime_Object(([]pkg7_runtime.Object)(x.Items), e) + } + } + } + if yyr3987 || yy2arr3987 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *List) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4002 := z.DecBinary() + _ = yym4002 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4003 := r.ContainerType() + if yyct4003 == codecSelferValueTypeMap1234 { + yyl4003 := r.ReadMapStart() + if yyl4003 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4003, d) + } + } else if yyct4003 == codecSelferValueTypeArray1234 { + yyl4003 := r.ReadArrayStart() + if yyl4003 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4003, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *List) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4004Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4004Slc + var yyhl4004 bool = l >= 0 + for yyj4004 := 0; ; yyj4004++ { + if yyhl4004 { + if yyj4004 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4004Slc = r.DecodeBytes(yys4004Slc, true, true) + yys4004 := string(yys4004Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4004 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4007 := &x.ListMeta + yym4008 := z.DecBinary() + _ = yym4008 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4007) { + } else { + z.DecFallback(yyv4007, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4009 := &x.Items + yym4010 := z.DecBinary() + _ = yym4010 + if false { + } else { + h.decSliceruntime_Object((*[]pkg7_runtime.Object)(yyv4009), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4004) + } // end switch yys4004 + } // end for yyj4004 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *List) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4011 int + var yyb4011 bool + var yyhl4011 bool = l >= 0 + yyj4011++ + if yyhl4011 { + yyb4011 = yyj4011 > l + } else { + yyb4011 = r.CheckBreak() + } + if yyb4011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4011++ + if yyhl4011 { + yyb4011 = yyj4011 > l + } else { + yyb4011 = r.CheckBreak() + } + if yyb4011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4011++ + if yyhl4011 { + yyb4011 = yyj4011 > l + } else { + yyb4011 = r.CheckBreak() + } + if yyb4011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4014 := &x.ListMeta + yym4015 := z.DecBinary() + _ = yym4015 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4014) { + } else { + z.DecFallback(yyv4014, false) + } + } + yyj4011++ + if yyhl4011 { + yyb4011 = yyj4011 > l + } else { + yyb4011 = r.CheckBreak() + } + if yyb4011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4016 := &x.Items + yym4017 := z.DecBinary() + _ = yym4017 + if false { + } else { + h.decSliceruntime_Object((*[]pkg7_runtime.Object)(yyv4016), d) + } + } + for { + yyj4011++ + if yyhl4011 { + yyb4011 = yyj4011 > l + } else { + yyb4011 = r.CheckBreak() + } + if yyb4011 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4011-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x LimitType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym4018 := z.EncBinary() + _ = yym4018 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *LimitType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4019 := z.DecBinary() + _ = yym4019 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *LimitRangeItem) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4020 := z.EncBinary() + _ = yym4020 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4021 := !z.EncBinary() + yy2arr4021 := z.EncBasicHandle().StructToArray + var yyq4021 [6]bool + _, _, _ = yysep4021, yyq4021, yy2arr4021 + const yyr4021 bool = false + yyq4021[0] = x.Type != "" + yyq4021[1] = len(x.Max) != 0 + yyq4021[2] = len(x.Min) != 0 + yyq4021[3] = len(x.Default) != 0 + yyq4021[4] = len(x.DefaultRequest) != 0 + yyq4021[5] = len(x.MaxLimitRequestRatio) != 0 + var yynn4021 int + if yyr4021 || yy2arr4021 { + r.EncodeArrayStart(6) + } else { + yynn4021 = 0 + for _, b := range yyq4021 { + if b { + yynn4021++ + } + } + r.EncodeMapStart(yynn4021) + yynn4021 = 0 + } + if yyr4021 || yy2arr4021 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4021[0] { + x.Type.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4021[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + } + if yyr4021 || yy2arr4021 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4021[1] { + if x.Max == nil { + r.EncodeNil() + } else { + x.Max.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4021[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("max")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Max == nil { + r.EncodeNil() + } else { + x.Max.CodecEncodeSelf(e) + } + } + } + if yyr4021 || yy2arr4021 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4021[2] { + if x.Min == nil { + r.EncodeNil() + } else { + x.Min.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4021[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("min")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Min == nil { + r.EncodeNil() + } else { + x.Min.CodecEncodeSelf(e) + } + } + } + if yyr4021 || yy2arr4021 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4021[3] { + if x.Default == nil { + r.EncodeNil() + } else { + x.Default.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4021[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("default")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Default == nil { + r.EncodeNil() + } else { + x.Default.CodecEncodeSelf(e) + } + } + } + if yyr4021 || yy2arr4021 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4021[4] { + if x.DefaultRequest == nil { + r.EncodeNil() + } else { + x.DefaultRequest.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4021[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultRequest")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultRequest == nil { + r.EncodeNil() + } else { + x.DefaultRequest.CodecEncodeSelf(e) + } + } + } + if yyr4021 || yy2arr4021 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4021[5] { + if x.MaxLimitRequestRatio == nil { + r.EncodeNil() + } else { + x.MaxLimitRequestRatio.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4021[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("maxLimitRequestRatio")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.MaxLimitRequestRatio == nil { + r.EncodeNil() + } else { + x.MaxLimitRequestRatio.CodecEncodeSelf(e) + } + } + } + if yyr4021 || yy2arr4021 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LimitRangeItem) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4028 := z.DecBinary() + _ = yym4028 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4029 := r.ContainerType() + if yyct4029 == codecSelferValueTypeMap1234 { + yyl4029 := r.ReadMapStart() + if yyl4029 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4029, d) + } + } else if yyct4029 == codecSelferValueTypeArray1234 { + yyl4029 := r.ReadArrayStart() + if yyl4029 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4029, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LimitRangeItem) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4030Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4030Slc + var yyhl4030 bool = l >= 0 + for yyj4030 := 0; ; yyj4030++ { + if yyhl4030 { + if yyj4030 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4030Slc = r.DecodeBytes(yys4030Slc, true, true) + yys4030 := string(yys4030Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4030 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = LimitType(r.DecodeString()) + } + case "max": + if r.TryDecodeAsNil() { + x.Max = nil + } else { + yyv4032 := &x.Max + yyv4032.CodecDecodeSelf(d) + } + case "min": + if r.TryDecodeAsNil() { + x.Min = nil + } else { + yyv4033 := &x.Min + yyv4033.CodecDecodeSelf(d) + } + case "default": + if r.TryDecodeAsNil() { + x.Default = nil + } else { + yyv4034 := &x.Default + yyv4034.CodecDecodeSelf(d) + } + case "defaultRequest": + if r.TryDecodeAsNil() { + x.DefaultRequest = nil + } else { + yyv4035 := &x.DefaultRequest + yyv4035.CodecDecodeSelf(d) + } + case "maxLimitRequestRatio": + if r.TryDecodeAsNil() { + x.MaxLimitRequestRatio = nil + } else { + yyv4036 := &x.MaxLimitRequestRatio + yyv4036.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys4030) + } // end switch yys4030 + } // end for yyj4030 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LimitRangeItem) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4037 int + var yyb4037 bool + var yyhl4037 bool = l >= 0 + yyj4037++ + if yyhl4037 { + yyb4037 = yyj4037 > l + } else { + yyb4037 = r.CheckBreak() + } + if yyb4037 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = LimitType(r.DecodeString()) + } + yyj4037++ + if yyhl4037 { + yyb4037 = yyj4037 > l + } else { + yyb4037 = r.CheckBreak() + } + if yyb4037 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Max = nil + } else { + yyv4039 := &x.Max + yyv4039.CodecDecodeSelf(d) + } + yyj4037++ + if yyhl4037 { + yyb4037 = yyj4037 > l + } else { + yyb4037 = r.CheckBreak() + } + if yyb4037 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Min = nil + } else { + yyv4040 := &x.Min + yyv4040.CodecDecodeSelf(d) + } + yyj4037++ + if yyhl4037 { + yyb4037 = yyj4037 > l + } else { + yyb4037 = r.CheckBreak() + } + if yyb4037 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Default = nil + } else { + yyv4041 := &x.Default + yyv4041.CodecDecodeSelf(d) + } + yyj4037++ + if yyhl4037 { + yyb4037 = yyj4037 > l + } else { + yyb4037 = r.CheckBreak() + } + if yyb4037 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DefaultRequest = nil + } else { + yyv4042 := &x.DefaultRequest + yyv4042.CodecDecodeSelf(d) + } + yyj4037++ + if yyhl4037 { + yyb4037 = yyj4037 > l + } else { + yyb4037 = r.CheckBreak() + } + if yyb4037 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MaxLimitRequestRatio = nil + } else { + yyv4043 := &x.MaxLimitRequestRatio + yyv4043.CodecDecodeSelf(d) + } + for { + yyj4037++ + if yyhl4037 { + yyb4037 = yyj4037 > l + } else { + yyb4037 = r.CheckBreak() + } + if yyb4037 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4037-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LimitRangeSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4044 := z.EncBinary() + _ = yym4044 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4045 := !z.EncBinary() + yy2arr4045 := z.EncBasicHandle().StructToArray + var yyq4045 [1]bool + _, _, _ = yysep4045, yyq4045, yy2arr4045 + const yyr4045 bool = false + var yynn4045 int + if yyr4045 || yy2arr4045 { + r.EncodeArrayStart(1) + } else { + yynn4045 = 1 + for _, b := range yyq4045 { + if b { + yynn4045++ + } + } + r.EncodeMapStart(yynn4045) + yynn4045 = 0 + } + if yyr4045 || yy2arr4045 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Limits == nil { + r.EncodeNil() + } else { + yym4047 := z.EncBinary() + _ = yym4047 + if false { + } else { + h.encSliceLimitRangeItem(([]LimitRangeItem)(x.Limits), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("limits")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Limits == nil { + r.EncodeNil() + } else { + yym4048 := z.EncBinary() + _ = yym4048 + if false { + } else { + h.encSliceLimitRangeItem(([]LimitRangeItem)(x.Limits), e) + } + } + } + if yyr4045 || yy2arr4045 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LimitRangeSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4049 := z.DecBinary() + _ = yym4049 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4050 := r.ContainerType() + if yyct4050 == codecSelferValueTypeMap1234 { + yyl4050 := r.ReadMapStart() + if yyl4050 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4050, d) + } + } else if yyct4050 == codecSelferValueTypeArray1234 { + yyl4050 := r.ReadArrayStart() + if yyl4050 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4050, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LimitRangeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4051Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4051Slc + var yyhl4051 bool = l >= 0 + for yyj4051 := 0; ; yyj4051++ { + if yyhl4051 { + if yyj4051 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4051Slc = r.DecodeBytes(yys4051Slc, true, true) + yys4051 := string(yys4051Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4051 { + case "limits": + if r.TryDecodeAsNil() { + x.Limits = nil + } else { + yyv4052 := &x.Limits + yym4053 := z.DecBinary() + _ = yym4053 + if false { + } else { + h.decSliceLimitRangeItem((*[]LimitRangeItem)(yyv4052), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4051) + } // end switch yys4051 + } // end for yyj4051 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LimitRangeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4054 int + var yyb4054 bool + var yyhl4054 bool = l >= 0 + yyj4054++ + if yyhl4054 { + yyb4054 = yyj4054 > l + } else { + yyb4054 = r.CheckBreak() + } + if yyb4054 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Limits = nil + } else { + yyv4055 := &x.Limits + yym4056 := z.DecBinary() + _ = yym4056 + if false { + } else { + h.decSliceLimitRangeItem((*[]LimitRangeItem)(yyv4055), d) + } + } + for { + yyj4054++ + if yyhl4054 { + yyb4054 = yyj4054 > l + } else { + yyb4054 = r.CheckBreak() + } + if yyb4054 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4054-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LimitRange) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4057 := z.EncBinary() + _ = yym4057 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4058 := !z.EncBinary() + yy2arr4058 := z.EncBasicHandle().StructToArray + var yyq4058 [4]bool + _, _, _ = yysep4058, yyq4058, yy2arr4058 + const yyr4058 bool = false + yyq4058[0] = x.Kind != "" + yyq4058[1] = x.APIVersion != "" + yyq4058[2] = true + yyq4058[3] = true + var yynn4058 int + if yyr4058 || yy2arr4058 { + r.EncodeArrayStart(4) + } else { + yynn4058 = 0 + for _, b := range yyq4058 { + if b { + yynn4058++ + } + } + r.EncodeMapStart(yynn4058) + yynn4058 = 0 + } + if yyr4058 || yy2arr4058 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4058[0] { + yym4060 := z.EncBinary() + _ = yym4060 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4058[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4061 := z.EncBinary() + _ = yym4061 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4058 || yy2arr4058 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4058[1] { + yym4063 := z.EncBinary() + _ = yym4063 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4058[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4064 := z.EncBinary() + _ = yym4064 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4058 || yy2arr4058 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4058[2] { + yy4066 := &x.ObjectMeta + yy4066.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4058[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4067 := &x.ObjectMeta + yy4067.CodecEncodeSelf(e) + } + } + if yyr4058 || yy2arr4058 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4058[3] { + yy4069 := &x.Spec + yy4069.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4058[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4070 := &x.Spec + yy4070.CodecEncodeSelf(e) + } + } + if yyr4058 || yy2arr4058 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LimitRange) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4071 := z.DecBinary() + _ = yym4071 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4072 := r.ContainerType() + if yyct4072 == codecSelferValueTypeMap1234 { + yyl4072 := r.ReadMapStart() + if yyl4072 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4072, d) + } + } else if yyct4072 == codecSelferValueTypeArray1234 { + yyl4072 := r.ReadArrayStart() + if yyl4072 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4072, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LimitRange) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4073Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4073Slc + var yyhl4073 bool = l >= 0 + for yyj4073 := 0; ; yyj4073++ { + if yyhl4073 { + if yyj4073 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4073Slc = r.DecodeBytes(yys4073Slc, true, true) + yys4073 := string(yys4073Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4073 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4076 := &x.ObjectMeta + yyv4076.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = LimitRangeSpec{} + } else { + yyv4077 := &x.Spec + yyv4077.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys4073) + } // end switch yys4073 + } // end for yyj4073 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LimitRange) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4078 int + var yyb4078 bool + var yyhl4078 bool = l >= 0 + yyj4078++ + if yyhl4078 { + yyb4078 = yyj4078 > l + } else { + yyb4078 = r.CheckBreak() + } + if yyb4078 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4078++ + if yyhl4078 { + yyb4078 = yyj4078 > l + } else { + yyb4078 = r.CheckBreak() + } + if yyb4078 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4078++ + if yyhl4078 { + yyb4078 = yyj4078 > l + } else { + yyb4078 = r.CheckBreak() + } + if yyb4078 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4081 := &x.ObjectMeta + yyv4081.CodecDecodeSelf(d) + } + yyj4078++ + if yyhl4078 { + yyb4078 = yyj4078 > l + } else { + yyb4078 = r.CheckBreak() + } + if yyb4078 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = LimitRangeSpec{} + } else { + yyv4082 := &x.Spec + yyv4082.CodecDecodeSelf(d) + } + for { + yyj4078++ + if yyhl4078 { + yyb4078 = yyj4078 > l + } else { + yyb4078 = r.CheckBreak() + } + if yyb4078 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4078-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LimitRangeList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4083 := z.EncBinary() + _ = yym4083 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4084 := !z.EncBinary() + yy2arr4084 := z.EncBasicHandle().StructToArray + var yyq4084 [4]bool + _, _, _ = yysep4084, yyq4084, yy2arr4084 + const yyr4084 bool = false + yyq4084[0] = x.Kind != "" + yyq4084[1] = x.APIVersion != "" + yyq4084[2] = true + var yynn4084 int + if yyr4084 || yy2arr4084 { + r.EncodeArrayStart(4) + } else { + yynn4084 = 1 + for _, b := range yyq4084 { + if b { + yynn4084++ + } + } + r.EncodeMapStart(yynn4084) + yynn4084 = 0 + } + if yyr4084 || yy2arr4084 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4084[0] { + yym4086 := z.EncBinary() + _ = yym4086 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4084[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4087 := z.EncBinary() + _ = yym4087 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4084 || yy2arr4084 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4084[1] { + yym4089 := z.EncBinary() + _ = yym4089 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4084[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4090 := z.EncBinary() + _ = yym4090 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4084 || yy2arr4084 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4084[2] { + yy4092 := &x.ListMeta + yym4093 := z.EncBinary() + _ = yym4093 + if false { + } else if z.HasExtensions() && z.EncExt(yy4092) { + } else { + z.EncFallback(yy4092) + } + } else { + r.EncodeNil() + } + } else { + if yyq4084[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4094 := &x.ListMeta + yym4095 := z.EncBinary() + _ = yym4095 + if false { + } else if z.HasExtensions() && z.EncExt(yy4094) { + } else { + z.EncFallback(yy4094) + } + } + } + if yyr4084 || yy2arr4084 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4097 := z.EncBinary() + _ = yym4097 + if false { + } else { + h.encSliceLimitRange(([]LimitRange)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4098 := z.EncBinary() + _ = yym4098 + if false { + } else { + h.encSliceLimitRange(([]LimitRange)(x.Items), e) + } + } + } + if yyr4084 || yy2arr4084 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LimitRangeList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4099 := z.DecBinary() + _ = yym4099 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4100 := r.ContainerType() + if yyct4100 == codecSelferValueTypeMap1234 { + yyl4100 := r.ReadMapStart() + if yyl4100 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4100, d) + } + } else if yyct4100 == codecSelferValueTypeArray1234 { + yyl4100 := r.ReadArrayStart() + if yyl4100 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4100, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LimitRangeList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4101Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4101Slc + var yyhl4101 bool = l >= 0 + for yyj4101 := 0; ; yyj4101++ { + if yyhl4101 { + if yyj4101 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4101Slc = r.DecodeBytes(yys4101Slc, true, true) + yys4101 := string(yys4101Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4101 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4104 := &x.ListMeta + yym4105 := z.DecBinary() + _ = yym4105 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4104) { + } else { + z.DecFallback(yyv4104, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4106 := &x.Items + yym4107 := z.DecBinary() + _ = yym4107 + if false { + } else { + h.decSliceLimitRange((*[]LimitRange)(yyv4106), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4101) + } // end switch yys4101 + } // end for yyj4101 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LimitRangeList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4108 int + var yyb4108 bool + var yyhl4108 bool = l >= 0 + yyj4108++ + if yyhl4108 { + yyb4108 = yyj4108 > l + } else { + yyb4108 = r.CheckBreak() + } + if yyb4108 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4108++ + if yyhl4108 { + yyb4108 = yyj4108 > l + } else { + yyb4108 = r.CheckBreak() + } + if yyb4108 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4108++ + if yyhl4108 { + yyb4108 = yyj4108 > l + } else { + yyb4108 = r.CheckBreak() + } + if yyb4108 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4111 := &x.ListMeta + yym4112 := z.DecBinary() + _ = yym4112 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4111) { + } else { + z.DecFallback(yyv4111, false) + } + } + yyj4108++ + if yyhl4108 { + yyb4108 = yyj4108 > l + } else { + yyb4108 = r.CheckBreak() + } + if yyb4108 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4113 := &x.Items + yym4114 := z.DecBinary() + _ = yym4114 + if false { + } else { + h.decSliceLimitRange((*[]LimitRange)(yyv4113), d) + } + } + for { + yyj4108++ + if yyhl4108 { + yyb4108 = yyj4108 > l + } else { + yyb4108 = r.CheckBreak() + } + if yyb4108 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4108-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ResourceQuotaScope) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym4115 := z.EncBinary() + _ = yym4115 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ResourceQuotaScope) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4116 := z.DecBinary() + _ = yym4116 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ResourceQuotaSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4117 := z.EncBinary() + _ = yym4117 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4118 := !z.EncBinary() + yy2arr4118 := z.EncBasicHandle().StructToArray + var yyq4118 [2]bool + _, _, _ = yysep4118, yyq4118, yy2arr4118 + const yyr4118 bool = false + yyq4118[0] = len(x.Hard) != 0 + yyq4118[1] = len(x.Scopes) != 0 + var yynn4118 int + if yyr4118 || yy2arr4118 { + r.EncodeArrayStart(2) + } else { + yynn4118 = 0 + for _, b := range yyq4118 { + if b { + yynn4118++ + } + } + r.EncodeMapStart(yynn4118) + yynn4118 = 0 + } + if yyr4118 || yy2arr4118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4118[0] { + if x.Hard == nil { + r.EncodeNil() + } else { + x.Hard.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4118[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hard")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Hard == nil { + r.EncodeNil() + } else { + x.Hard.CodecEncodeSelf(e) + } + } + } + if yyr4118 || yy2arr4118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4118[1] { + if x.Scopes == nil { + r.EncodeNil() + } else { + yym4121 := z.EncBinary() + _ = yym4121 + if false { + } else { + h.encSliceResourceQuotaScope(([]ResourceQuotaScope)(x.Scopes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4118[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("scopes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Scopes == nil { + r.EncodeNil() + } else { + yym4122 := z.EncBinary() + _ = yym4122 + if false { + } else { + h.encSliceResourceQuotaScope(([]ResourceQuotaScope)(x.Scopes), e) + } + } + } + } + if yyr4118 || yy2arr4118 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceQuotaSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4123 := z.DecBinary() + _ = yym4123 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4124 := r.ContainerType() + if yyct4124 == codecSelferValueTypeMap1234 { + yyl4124 := r.ReadMapStart() + if yyl4124 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4124, d) + } + } else if yyct4124 == codecSelferValueTypeArray1234 { + yyl4124 := r.ReadArrayStart() + if yyl4124 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4124, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceQuotaSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4125Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4125Slc + var yyhl4125 bool = l >= 0 + for yyj4125 := 0; ; yyj4125++ { + if yyhl4125 { + if yyj4125 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4125Slc = r.DecodeBytes(yys4125Slc, true, true) + yys4125 := string(yys4125Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4125 { + case "hard": + if r.TryDecodeAsNil() { + x.Hard = nil + } else { + yyv4126 := &x.Hard + yyv4126.CodecDecodeSelf(d) + } + case "scopes": + if r.TryDecodeAsNil() { + x.Scopes = nil + } else { + yyv4127 := &x.Scopes + yym4128 := z.DecBinary() + _ = yym4128 + if false { + } else { + h.decSliceResourceQuotaScope((*[]ResourceQuotaScope)(yyv4127), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4125) + } // end switch yys4125 + } // end for yyj4125 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceQuotaSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4129 int + var yyb4129 bool + var yyhl4129 bool = l >= 0 + yyj4129++ + if yyhl4129 { + yyb4129 = yyj4129 > l + } else { + yyb4129 = r.CheckBreak() + } + if yyb4129 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hard = nil + } else { + yyv4130 := &x.Hard + yyv4130.CodecDecodeSelf(d) + } + yyj4129++ + if yyhl4129 { + yyb4129 = yyj4129 > l + } else { + yyb4129 = r.CheckBreak() + } + if yyb4129 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Scopes = nil + } else { + yyv4131 := &x.Scopes + yym4132 := z.DecBinary() + _ = yym4132 + if false { + } else { + h.decSliceResourceQuotaScope((*[]ResourceQuotaScope)(yyv4131), d) + } + } + for { + yyj4129++ + if yyhl4129 { + yyb4129 = yyj4129 > l + } else { + yyb4129 = r.CheckBreak() + } + if yyb4129 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4129-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceQuotaStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4133 := z.EncBinary() + _ = yym4133 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4134 := !z.EncBinary() + yy2arr4134 := z.EncBasicHandle().StructToArray + var yyq4134 [2]bool + _, _, _ = yysep4134, yyq4134, yy2arr4134 + const yyr4134 bool = false + yyq4134[0] = len(x.Hard) != 0 + yyq4134[1] = len(x.Used) != 0 + var yynn4134 int + if yyr4134 || yy2arr4134 { + r.EncodeArrayStart(2) + } else { + yynn4134 = 0 + for _, b := range yyq4134 { + if b { + yynn4134++ + } + } + r.EncodeMapStart(yynn4134) + yynn4134 = 0 + } + if yyr4134 || yy2arr4134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4134[0] { + if x.Hard == nil { + r.EncodeNil() + } else { + x.Hard.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4134[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hard")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Hard == nil { + r.EncodeNil() + } else { + x.Hard.CodecEncodeSelf(e) + } + } + } + if yyr4134 || yy2arr4134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4134[1] { + if x.Used == nil { + r.EncodeNil() + } else { + x.Used.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4134[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("used")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Used == nil { + r.EncodeNil() + } else { + x.Used.CodecEncodeSelf(e) + } + } + } + if yyr4134 || yy2arr4134 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceQuotaStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4137 := z.DecBinary() + _ = yym4137 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4138 := r.ContainerType() + if yyct4138 == codecSelferValueTypeMap1234 { + yyl4138 := r.ReadMapStart() + if yyl4138 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4138, d) + } + } else if yyct4138 == codecSelferValueTypeArray1234 { + yyl4138 := r.ReadArrayStart() + if yyl4138 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4138, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceQuotaStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4139Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4139Slc + var yyhl4139 bool = l >= 0 + for yyj4139 := 0; ; yyj4139++ { + if yyhl4139 { + if yyj4139 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4139Slc = r.DecodeBytes(yys4139Slc, true, true) + yys4139 := string(yys4139Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4139 { + case "hard": + if r.TryDecodeAsNil() { + x.Hard = nil + } else { + yyv4140 := &x.Hard + yyv4140.CodecDecodeSelf(d) + } + case "used": + if r.TryDecodeAsNil() { + x.Used = nil + } else { + yyv4141 := &x.Used + yyv4141.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys4139) + } // end switch yys4139 + } // end for yyj4139 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceQuotaStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4142 int + var yyb4142 bool + var yyhl4142 bool = l >= 0 + yyj4142++ + if yyhl4142 { + yyb4142 = yyj4142 > l + } else { + yyb4142 = r.CheckBreak() + } + if yyb4142 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hard = nil + } else { + yyv4143 := &x.Hard + yyv4143.CodecDecodeSelf(d) + } + yyj4142++ + if yyhl4142 { + yyb4142 = yyj4142 > l + } else { + yyb4142 = r.CheckBreak() + } + if yyb4142 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Used = nil + } else { + yyv4144 := &x.Used + yyv4144.CodecDecodeSelf(d) + } + for { + yyj4142++ + if yyhl4142 { + yyb4142 = yyj4142 > l + } else { + yyb4142 = r.CheckBreak() + } + if yyb4142 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4142-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceQuota) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4145 := z.EncBinary() + _ = yym4145 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4146 := !z.EncBinary() + yy2arr4146 := z.EncBasicHandle().StructToArray + var yyq4146 [5]bool + _, _, _ = yysep4146, yyq4146, yy2arr4146 + const yyr4146 bool = false + yyq4146[0] = x.Kind != "" + yyq4146[1] = x.APIVersion != "" + yyq4146[2] = true + yyq4146[3] = true + yyq4146[4] = true + var yynn4146 int + if yyr4146 || yy2arr4146 { + r.EncodeArrayStart(5) + } else { + yynn4146 = 0 + for _, b := range yyq4146 { + if b { + yynn4146++ + } + } + r.EncodeMapStart(yynn4146) + yynn4146 = 0 + } + if yyr4146 || yy2arr4146 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4146[0] { + yym4148 := z.EncBinary() + _ = yym4148 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4146[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4149 := z.EncBinary() + _ = yym4149 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4146 || yy2arr4146 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4146[1] { + yym4151 := z.EncBinary() + _ = yym4151 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4146[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4152 := z.EncBinary() + _ = yym4152 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4146 || yy2arr4146 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4146[2] { + yy4154 := &x.ObjectMeta + yy4154.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4146[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4155 := &x.ObjectMeta + yy4155.CodecEncodeSelf(e) + } + } + if yyr4146 || yy2arr4146 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4146[3] { + yy4157 := &x.Spec + yy4157.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4146[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4158 := &x.Spec + yy4158.CodecEncodeSelf(e) + } + } + if yyr4146 || yy2arr4146 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4146[4] { + yy4160 := &x.Status + yy4160.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4146[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4161 := &x.Status + yy4161.CodecEncodeSelf(e) + } + } + if yyr4146 || yy2arr4146 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceQuota) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4162 := z.DecBinary() + _ = yym4162 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4163 := r.ContainerType() + if yyct4163 == codecSelferValueTypeMap1234 { + yyl4163 := r.ReadMapStart() + if yyl4163 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4163, d) + } + } else if yyct4163 == codecSelferValueTypeArray1234 { + yyl4163 := r.ReadArrayStart() + if yyl4163 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4163, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceQuota) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4164Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4164Slc + var yyhl4164 bool = l >= 0 + for yyj4164 := 0; ; yyj4164++ { + if yyhl4164 { + if yyj4164 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4164Slc = r.DecodeBytes(yys4164Slc, true, true) + yys4164 := string(yys4164Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4164 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4167 := &x.ObjectMeta + yyv4167.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ResourceQuotaSpec{} + } else { + yyv4168 := &x.Spec + yyv4168.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ResourceQuotaStatus{} + } else { + yyv4169 := &x.Status + yyv4169.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys4164) + } // end switch yys4164 + } // end for yyj4164 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceQuota) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4170 int + var yyb4170 bool + var yyhl4170 bool = l >= 0 + yyj4170++ + if yyhl4170 { + yyb4170 = yyj4170 > l + } else { + yyb4170 = r.CheckBreak() + } + if yyb4170 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4170++ + if yyhl4170 { + yyb4170 = yyj4170 > l + } else { + yyb4170 = r.CheckBreak() + } + if yyb4170 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4170++ + if yyhl4170 { + yyb4170 = yyj4170 > l + } else { + yyb4170 = r.CheckBreak() + } + if yyb4170 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4173 := &x.ObjectMeta + yyv4173.CodecDecodeSelf(d) + } + yyj4170++ + if yyhl4170 { + yyb4170 = yyj4170 > l + } else { + yyb4170 = r.CheckBreak() + } + if yyb4170 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ResourceQuotaSpec{} + } else { + yyv4174 := &x.Spec + yyv4174.CodecDecodeSelf(d) + } + yyj4170++ + if yyhl4170 { + yyb4170 = yyj4170 > l + } else { + yyb4170 = r.CheckBreak() + } + if yyb4170 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ResourceQuotaStatus{} + } else { + yyv4175 := &x.Status + yyv4175.CodecDecodeSelf(d) + } + for { + yyj4170++ + if yyhl4170 { + yyb4170 = yyj4170 > l + } else { + yyb4170 = r.CheckBreak() + } + if yyb4170 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4170-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceQuotaList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4176 := z.EncBinary() + _ = yym4176 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4177 := !z.EncBinary() + yy2arr4177 := z.EncBasicHandle().StructToArray + var yyq4177 [4]bool + _, _, _ = yysep4177, yyq4177, yy2arr4177 + const yyr4177 bool = false + yyq4177[0] = x.Kind != "" + yyq4177[1] = x.APIVersion != "" + yyq4177[2] = true + var yynn4177 int + if yyr4177 || yy2arr4177 { + r.EncodeArrayStart(4) + } else { + yynn4177 = 1 + for _, b := range yyq4177 { + if b { + yynn4177++ + } + } + r.EncodeMapStart(yynn4177) + yynn4177 = 0 + } + if yyr4177 || yy2arr4177 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4177[0] { + yym4179 := z.EncBinary() + _ = yym4179 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4177[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4180 := z.EncBinary() + _ = yym4180 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4177 || yy2arr4177 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4177[1] { + yym4182 := z.EncBinary() + _ = yym4182 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4177[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4183 := z.EncBinary() + _ = yym4183 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4177 || yy2arr4177 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4177[2] { + yy4185 := &x.ListMeta + yym4186 := z.EncBinary() + _ = yym4186 + if false { + } else if z.HasExtensions() && z.EncExt(yy4185) { + } else { + z.EncFallback(yy4185) + } + } else { + r.EncodeNil() + } + } else { + if yyq4177[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4187 := &x.ListMeta + yym4188 := z.EncBinary() + _ = yym4188 + if false { + } else if z.HasExtensions() && z.EncExt(yy4187) { + } else { + z.EncFallback(yy4187) + } + } + } + if yyr4177 || yy2arr4177 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4190 := z.EncBinary() + _ = yym4190 + if false { + } else { + h.encSliceResourceQuota(([]ResourceQuota)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4191 := z.EncBinary() + _ = yym4191 + if false { + } else { + h.encSliceResourceQuota(([]ResourceQuota)(x.Items), e) + } + } + } + if yyr4177 || yy2arr4177 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceQuotaList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4192 := z.DecBinary() + _ = yym4192 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4193 := r.ContainerType() + if yyct4193 == codecSelferValueTypeMap1234 { + yyl4193 := r.ReadMapStart() + if yyl4193 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4193, d) + } + } else if yyct4193 == codecSelferValueTypeArray1234 { + yyl4193 := r.ReadArrayStart() + if yyl4193 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4193, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceQuotaList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4194Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4194Slc + var yyhl4194 bool = l >= 0 + for yyj4194 := 0; ; yyj4194++ { + if yyhl4194 { + if yyj4194 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4194Slc = r.DecodeBytes(yys4194Slc, true, true) + yys4194 := string(yys4194Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4194 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4197 := &x.ListMeta + yym4198 := z.DecBinary() + _ = yym4198 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4197) { + } else { + z.DecFallback(yyv4197, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4199 := &x.Items + yym4200 := z.DecBinary() + _ = yym4200 + if false { + } else { + h.decSliceResourceQuota((*[]ResourceQuota)(yyv4199), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4194) + } // end switch yys4194 + } // end for yyj4194 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceQuotaList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4201 int + var yyb4201 bool + var yyhl4201 bool = l >= 0 + yyj4201++ + if yyhl4201 { + yyb4201 = yyj4201 > l + } else { + yyb4201 = r.CheckBreak() + } + if yyb4201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4201++ + if yyhl4201 { + yyb4201 = yyj4201 > l + } else { + yyb4201 = r.CheckBreak() + } + if yyb4201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4201++ + if yyhl4201 { + yyb4201 = yyj4201 > l + } else { + yyb4201 = r.CheckBreak() + } + if yyb4201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4204 := &x.ListMeta + yym4205 := z.DecBinary() + _ = yym4205 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4204) { + } else { + z.DecFallback(yyv4204, false) + } + } + yyj4201++ + if yyhl4201 { + yyb4201 = yyj4201 > l + } else { + yyb4201 = r.CheckBreak() + } + if yyb4201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4206 := &x.Items + yym4207 := z.DecBinary() + _ = yym4207 + if false { + } else { + h.decSliceResourceQuota((*[]ResourceQuota)(yyv4206), d) + } + } + for { + yyj4201++ + if yyhl4201 { + yyb4201 = yyj4201 > l + } else { + yyb4201 = r.CheckBreak() + } + if yyb4201 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4201-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Secret) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4208 := z.EncBinary() + _ = yym4208 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4209 := !z.EncBinary() + yy2arr4209 := z.EncBasicHandle().StructToArray + var yyq4209 [5]bool + _, _, _ = yysep4209, yyq4209, yy2arr4209 + const yyr4209 bool = false + yyq4209[0] = x.Kind != "" + yyq4209[1] = x.APIVersion != "" + yyq4209[2] = true + yyq4209[3] = len(x.Data) != 0 + yyq4209[4] = x.Type != "" + var yynn4209 int + if yyr4209 || yy2arr4209 { + r.EncodeArrayStart(5) + } else { + yynn4209 = 0 + for _, b := range yyq4209 { + if b { + yynn4209++ + } + } + r.EncodeMapStart(yynn4209) + yynn4209 = 0 + } + if yyr4209 || yy2arr4209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4209[0] { + yym4211 := z.EncBinary() + _ = yym4211 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4209[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4212 := z.EncBinary() + _ = yym4212 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4209 || yy2arr4209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4209[1] { + yym4214 := z.EncBinary() + _ = yym4214 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4209[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4215 := z.EncBinary() + _ = yym4215 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4209 || yy2arr4209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4209[2] { + yy4217 := &x.ObjectMeta + yy4217.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4209[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4218 := &x.ObjectMeta + yy4218.CodecEncodeSelf(e) + } + } + if yyr4209 || yy2arr4209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4209[3] { + if x.Data == nil { + r.EncodeNil() + } else { + yym4220 := z.EncBinary() + _ = yym4220 + if false { + } else { + h.encMapstringSliceuint8((map[string][]uint8)(x.Data), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4209[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("data")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym4221 := z.EncBinary() + _ = yym4221 + if false { + } else { + h.encMapstringSliceuint8((map[string][]uint8)(x.Data), e) + } + } + } + } + if yyr4209 || yy2arr4209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4209[4] { + x.Type.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4209[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + } + if yyr4209 || yy2arr4209 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Secret) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4223 := z.DecBinary() + _ = yym4223 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4224 := r.ContainerType() + if yyct4224 == codecSelferValueTypeMap1234 { + yyl4224 := r.ReadMapStart() + if yyl4224 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4224, d) + } + } else if yyct4224 == codecSelferValueTypeArray1234 { + yyl4224 := r.ReadArrayStart() + if yyl4224 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4224, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Secret) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4225Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4225Slc + var yyhl4225 bool = l >= 0 + for yyj4225 := 0; ; yyj4225++ { + if yyhl4225 { + if yyj4225 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4225Slc = r.DecodeBytes(yys4225Slc, true, true) + yys4225 := string(yys4225Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4225 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4228 := &x.ObjectMeta + yyv4228.CodecDecodeSelf(d) + } + case "data": + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4229 := &x.Data + yym4230 := z.DecBinary() + _ = yym4230 + if false { + } else { + h.decMapstringSliceuint8((*map[string][]uint8)(yyv4229), d) + } + } + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = SecretType(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys4225) + } // end switch yys4225 + } // end for yyj4225 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Secret) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4232 int + var yyb4232 bool + var yyhl4232 bool = l >= 0 + yyj4232++ + if yyhl4232 { + yyb4232 = yyj4232 > l + } else { + yyb4232 = r.CheckBreak() + } + if yyb4232 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4232++ + if yyhl4232 { + yyb4232 = yyj4232 > l + } else { + yyb4232 = r.CheckBreak() + } + if yyb4232 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4232++ + if yyhl4232 { + yyb4232 = yyj4232 > l + } else { + yyb4232 = r.CheckBreak() + } + if yyb4232 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4235 := &x.ObjectMeta + yyv4235.CodecDecodeSelf(d) + } + yyj4232++ + if yyhl4232 { + yyb4232 = yyj4232 > l + } else { + yyb4232 = r.CheckBreak() + } + if yyb4232 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4236 := &x.Data + yym4237 := z.DecBinary() + _ = yym4237 + if false { + } else { + h.decMapstringSliceuint8((*map[string][]uint8)(yyv4236), d) + } + } + yyj4232++ + if yyhl4232 { + yyb4232 = yyj4232 > l + } else { + yyb4232 = r.CheckBreak() + } + if yyb4232 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = SecretType(r.DecodeString()) + } + for { + yyj4232++ + if yyhl4232 { + yyb4232 = yyj4232 > l + } else { + yyb4232 = r.CheckBreak() + } + if yyb4232 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4232-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x SecretType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym4239 := z.EncBinary() + _ = yym4239 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *SecretType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4240 := z.DecBinary() + _ = yym4240 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *SecretList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4241 := z.EncBinary() + _ = yym4241 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4242 := !z.EncBinary() + yy2arr4242 := z.EncBasicHandle().StructToArray + var yyq4242 [4]bool + _, _, _ = yysep4242, yyq4242, yy2arr4242 + const yyr4242 bool = false + yyq4242[0] = x.Kind != "" + yyq4242[1] = x.APIVersion != "" + yyq4242[2] = true + var yynn4242 int + if yyr4242 || yy2arr4242 { + r.EncodeArrayStart(4) + } else { + yynn4242 = 1 + for _, b := range yyq4242 { + if b { + yynn4242++ + } + } + r.EncodeMapStart(yynn4242) + yynn4242 = 0 + } + if yyr4242 || yy2arr4242 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4242[0] { + yym4244 := z.EncBinary() + _ = yym4244 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4242[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4245 := z.EncBinary() + _ = yym4245 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4242 || yy2arr4242 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4242[1] { + yym4247 := z.EncBinary() + _ = yym4247 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4242[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4248 := z.EncBinary() + _ = yym4248 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4242 || yy2arr4242 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4242[2] { + yy4250 := &x.ListMeta + yym4251 := z.EncBinary() + _ = yym4251 + if false { + } else if z.HasExtensions() && z.EncExt(yy4250) { + } else { + z.EncFallback(yy4250) + } + } else { + r.EncodeNil() + } + } else { + if yyq4242[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4252 := &x.ListMeta + yym4253 := z.EncBinary() + _ = yym4253 + if false { + } else if z.HasExtensions() && z.EncExt(yy4252) { + } else { + z.EncFallback(yy4252) + } + } + } + if yyr4242 || yy2arr4242 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4255 := z.EncBinary() + _ = yym4255 + if false { + } else { + h.encSliceSecret(([]Secret)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4256 := z.EncBinary() + _ = yym4256 + if false { + } else { + h.encSliceSecret(([]Secret)(x.Items), e) + } + } + } + if yyr4242 || yy2arr4242 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecretList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4257 := z.DecBinary() + _ = yym4257 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4258 := r.ContainerType() + if yyct4258 == codecSelferValueTypeMap1234 { + yyl4258 := r.ReadMapStart() + if yyl4258 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4258, d) + } + } else if yyct4258 == codecSelferValueTypeArray1234 { + yyl4258 := r.ReadArrayStart() + if yyl4258 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4258, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecretList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4259Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4259Slc + var yyhl4259 bool = l >= 0 + for yyj4259 := 0; ; yyj4259++ { + if yyhl4259 { + if yyj4259 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4259Slc = r.DecodeBytes(yys4259Slc, true, true) + yys4259 := string(yys4259Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4259 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4262 := &x.ListMeta + yym4263 := z.DecBinary() + _ = yym4263 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4262) { + } else { + z.DecFallback(yyv4262, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4264 := &x.Items + yym4265 := z.DecBinary() + _ = yym4265 + if false { + } else { + h.decSliceSecret((*[]Secret)(yyv4264), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4259) + } // end switch yys4259 + } // end for yyj4259 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecretList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4266 int + var yyb4266 bool + var yyhl4266 bool = l >= 0 + yyj4266++ + if yyhl4266 { + yyb4266 = yyj4266 > l + } else { + yyb4266 = r.CheckBreak() + } + if yyb4266 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4266++ + if yyhl4266 { + yyb4266 = yyj4266 > l + } else { + yyb4266 = r.CheckBreak() + } + if yyb4266 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4266++ + if yyhl4266 { + yyb4266 = yyj4266 > l + } else { + yyb4266 = r.CheckBreak() + } + if yyb4266 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4269 := &x.ListMeta + yym4270 := z.DecBinary() + _ = yym4270 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4269) { + } else { + z.DecFallback(yyv4269, false) + } + } + yyj4266++ + if yyhl4266 { + yyb4266 = yyj4266 > l + } else { + yyb4266 = r.CheckBreak() + } + if yyb4266 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4271 := &x.Items + yym4272 := z.DecBinary() + _ = yym4272 + if false { + } else { + h.decSliceSecret((*[]Secret)(yyv4271), d) + } + } + for { + yyj4266++ + if yyhl4266 { + yyb4266 = yyj4266 > l + } else { + yyb4266 = r.CheckBreak() + } + if yyb4266 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4266-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ConfigMap) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4273 := z.EncBinary() + _ = yym4273 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4274 := !z.EncBinary() + yy2arr4274 := z.EncBasicHandle().StructToArray + var yyq4274 [4]bool + _, _, _ = yysep4274, yyq4274, yy2arr4274 + const yyr4274 bool = false + yyq4274[0] = x.Kind != "" + yyq4274[1] = x.APIVersion != "" + yyq4274[2] = true + yyq4274[3] = len(x.Data) != 0 + var yynn4274 int + if yyr4274 || yy2arr4274 { + r.EncodeArrayStart(4) + } else { + yynn4274 = 0 + for _, b := range yyq4274 { + if b { + yynn4274++ + } + } + r.EncodeMapStart(yynn4274) + yynn4274 = 0 + } + if yyr4274 || yy2arr4274 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4274[0] { + yym4276 := z.EncBinary() + _ = yym4276 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4274[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4277 := z.EncBinary() + _ = yym4277 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4274 || yy2arr4274 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4274[1] { + yym4279 := z.EncBinary() + _ = yym4279 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4274[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4280 := z.EncBinary() + _ = yym4280 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4274 || yy2arr4274 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4274[2] { + yy4282 := &x.ObjectMeta + yy4282.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4274[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4283 := &x.ObjectMeta + yy4283.CodecEncodeSelf(e) + } + } + if yyr4274 || yy2arr4274 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4274[3] { + if x.Data == nil { + r.EncodeNil() + } else { + yym4285 := z.EncBinary() + _ = yym4285 + if false { + } else { + z.F.EncMapStringStringV(x.Data, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4274[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("data")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym4286 := z.EncBinary() + _ = yym4286 + if false { + } else { + z.F.EncMapStringStringV(x.Data, false, e) + } + } + } + } + if yyr4274 || yy2arr4274 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ConfigMap) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4287 := z.DecBinary() + _ = yym4287 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4288 := r.ContainerType() + if yyct4288 == codecSelferValueTypeMap1234 { + yyl4288 := r.ReadMapStart() + if yyl4288 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4288, d) + } + } else if yyct4288 == codecSelferValueTypeArray1234 { + yyl4288 := r.ReadArrayStart() + if yyl4288 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4288, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ConfigMap) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4289Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4289Slc + var yyhl4289 bool = l >= 0 + for yyj4289 := 0; ; yyj4289++ { + if yyhl4289 { + if yyj4289 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4289Slc = r.DecodeBytes(yys4289Slc, true, true) + yys4289 := string(yys4289Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4289 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4292 := &x.ObjectMeta + yyv4292.CodecDecodeSelf(d) + } + case "data": + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4293 := &x.Data + yym4294 := z.DecBinary() + _ = yym4294 + if false { + } else { + z.F.DecMapStringStringX(yyv4293, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4289) + } // end switch yys4289 + } // end for yyj4289 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ConfigMap) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4295 int + var yyb4295 bool + var yyhl4295 bool = l >= 0 + yyj4295++ + if yyhl4295 { + yyb4295 = yyj4295 > l + } else { + yyb4295 = r.CheckBreak() + } + if yyb4295 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4295++ + if yyhl4295 { + yyb4295 = yyj4295 > l + } else { + yyb4295 = r.CheckBreak() + } + if yyb4295 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4295++ + if yyhl4295 { + yyb4295 = yyj4295 > l + } else { + yyb4295 = r.CheckBreak() + } + if yyb4295 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4298 := &x.ObjectMeta + yyv4298.CodecDecodeSelf(d) + } + yyj4295++ + if yyhl4295 { + yyb4295 = yyj4295 > l + } else { + yyb4295 = r.CheckBreak() + } + if yyb4295 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4299 := &x.Data + yym4300 := z.DecBinary() + _ = yym4300 + if false { + } else { + z.F.DecMapStringStringX(yyv4299, false, d) + } + } + for { + yyj4295++ + if yyhl4295 { + yyb4295 = yyj4295 > l + } else { + yyb4295 = r.CheckBreak() + } + if yyb4295 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4295-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ConfigMapList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4301 := z.EncBinary() + _ = yym4301 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4302 := !z.EncBinary() + yy2arr4302 := z.EncBasicHandle().StructToArray + var yyq4302 [4]bool + _, _, _ = yysep4302, yyq4302, yy2arr4302 + const yyr4302 bool = false + yyq4302[0] = x.Kind != "" + yyq4302[1] = x.APIVersion != "" + yyq4302[2] = true + var yynn4302 int + if yyr4302 || yy2arr4302 { + r.EncodeArrayStart(4) + } else { + yynn4302 = 1 + for _, b := range yyq4302 { + if b { + yynn4302++ + } + } + r.EncodeMapStart(yynn4302) + yynn4302 = 0 + } + if yyr4302 || yy2arr4302 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4302[0] { + yym4304 := z.EncBinary() + _ = yym4304 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4302[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4305 := z.EncBinary() + _ = yym4305 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4302 || yy2arr4302 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4302[1] { + yym4307 := z.EncBinary() + _ = yym4307 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4302[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4308 := z.EncBinary() + _ = yym4308 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4302 || yy2arr4302 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4302[2] { + yy4310 := &x.ListMeta + yym4311 := z.EncBinary() + _ = yym4311 + if false { + } else if z.HasExtensions() && z.EncExt(yy4310) { + } else { + z.EncFallback(yy4310) + } + } else { + r.EncodeNil() + } + } else { + if yyq4302[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4312 := &x.ListMeta + yym4313 := z.EncBinary() + _ = yym4313 + if false { + } else if z.HasExtensions() && z.EncExt(yy4312) { + } else { + z.EncFallback(yy4312) + } + } + } + if yyr4302 || yy2arr4302 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4315 := z.EncBinary() + _ = yym4315 + if false { + } else { + h.encSliceConfigMap(([]ConfigMap)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4316 := z.EncBinary() + _ = yym4316 + if false { + } else { + h.encSliceConfigMap(([]ConfigMap)(x.Items), e) + } + } + } + if yyr4302 || yy2arr4302 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ConfigMapList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4317 := z.DecBinary() + _ = yym4317 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4318 := r.ContainerType() + if yyct4318 == codecSelferValueTypeMap1234 { + yyl4318 := r.ReadMapStart() + if yyl4318 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4318, d) + } + } else if yyct4318 == codecSelferValueTypeArray1234 { + yyl4318 := r.ReadArrayStart() + if yyl4318 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4318, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ConfigMapList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4319Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4319Slc + var yyhl4319 bool = l >= 0 + for yyj4319 := 0; ; yyj4319++ { + if yyhl4319 { + if yyj4319 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4319Slc = r.DecodeBytes(yys4319Slc, true, true) + yys4319 := string(yys4319Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4319 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4322 := &x.ListMeta + yym4323 := z.DecBinary() + _ = yym4323 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4322) { + } else { + z.DecFallback(yyv4322, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4324 := &x.Items + yym4325 := z.DecBinary() + _ = yym4325 + if false { + } else { + h.decSliceConfigMap((*[]ConfigMap)(yyv4324), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4319) + } // end switch yys4319 + } // end for yyj4319 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ConfigMapList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4326 int + var yyb4326 bool + var yyhl4326 bool = l >= 0 + yyj4326++ + if yyhl4326 { + yyb4326 = yyj4326 > l + } else { + yyb4326 = r.CheckBreak() + } + if yyb4326 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4326++ + if yyhl4326 { + yyb4326 = yyj4326 > l + } else { + yyb4326 = r.CheckBreak() + } + if yyb4326 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4326++ + if yyhl4326 { + yyb4326 = yyj4326 > l + } else { + yyb4326 = r.CheckBreak() + } + if yyb4326 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4329 := &x.ListMeta + yym4330 := z.DecBinary() + _ = yym4330 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4329) { + } else { + z.DecFallback(yyv4329, false) + } + } + yyj4326++ + if yyhl4326 { + yyb4326 = yyj4326 > l + } else { + yyb4326 = r.CheckBreak() + } + if yyb4326 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4331 := &x.Items + yym4332 := z.DecBinary() + _ = yym4332 + if false { + } else { + h.decSliceConfigMap((*[]ConfigMap)(yyv4331), d) + } + } + for { + yyj4326++ + if yyhl4326 { + yyb4326 = yyj4326 > l + } else { + yyb4326 = r.CheckBreak() + } + if yyb4326 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4326-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PatchType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym4333 := z.EncBinary() + _ = yym4333 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PatchType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4334 := z.DecBinary() + _ = yym4334 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x ComponentConditionType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym4335 := z.EncBinary() + _ = yym4335 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ComponentConditionType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4336 := z.DecBinary() + _ = yym4336 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ComponentCondition) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4337 := z.EncBinary() + _ = yym4337 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4338 := !z.EncBinary() + yy2arr4338 := z.EncBasicHandle().StructToArray + var yyq4338 [4]bool + _, _, _ = yysep4338, yyq4338, yy2arr4338 + const yyr4338 bool = false + yyq4338[2] = x.Message != "" + yyq4338[3] = x.Error != "" + var yynn4338 int + if yyr4338 || yy2arr4338 { + r.EncodeArrayStart(4) + } else { + yynn4338 = 2 + for _, b := range yyq4338 { + if b { + yynn4338++ + } + } + r.EncodeMapStart(yynn4338) + yynn4338 = 0 + } + if yyr4338 || yy2arr4338 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr4338 || yy2arr4338 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Status.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Status.CodecEncodeSelf(e) + } + if yyr4338 || yy2arr4338 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4338[2] { + yym4342 := z.EncBinary() + _ = yym4342 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4338[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4343 := z.EncBinary() + _ = yym4343 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr4338 || yy2arr4338 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4338[3] { + yym4345 := z.EncBinary() + _ = yym4345 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Error)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4338[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("error")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4346 := z.EncBinary() + _ = yym4346 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Error)) + } + } + } + if yyr4338 || yy2arr4338 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ComponentCondition) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4347 := z.DecBinary() + _ = yym4347 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4348 := r.ContainerType() + if yyct4348 == codecSelferValueTypeMap1234 { + yyl4348 := r.ReadMapStart() + if yyl4348 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4348, d) + } + } else if yyct4348 == codecSelferValueTypeArray1234 { + yyl4348 := r.ReadArrayStart() + if yyl4348 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4348, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ComponentCondition) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4349Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4349Slc + var yyhl4349 bool = l >= 0 + for yyj4349 := 0; ; yyj4349++ { + if yyhl4349 { + if yyj4349 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4349Slc = r.DecodeBytes(yys4349Slc, true, true) + yys4349 := string(yys4349Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4349 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = ComponentConditionType(r.DecodeString()) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "error": + if r.TryDecodeAsNil() { + x.Error = "" + } else { + x.Error = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys4349) + } // end switch yys4349 + } // end for yyj4349 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ComponentCondition) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4354 int + var yyb4354 bool + var yyhl4354 bool = l >= 0 + yyj4354++ + if yyhl4354 { + yyb4354 = yyj4354 > l + } else { + yyb4354 = r.CheckBreak() + } + if yyb4354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = ComponentConditionType(r.DecodeString()) + } + yyj4354++ + if yyhl4354 { + yyb4354 = yyj4354 > l + } else { + yyb4354 = r.CheckBreak() + } + if yyb4354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + yyj4354++ + if yyhl4354 { + yyb4354 = yyj4354 > l + } else { + yyb4354 = r.CheckBreak() + } + if yyb4354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj4354++ + if yyhl4354 { + yyb4354 = yyj4354 > l + } else { + yyb4354 = r.CheckBreak() + } + if yyb4354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Error = "" + } else { + x.Error = string(r.DecodeString()) + } + for { + yyj4354++ + if yyhl4354 { + yyb4354 = yyj4354 > l + } else { + yyb4354 = r.CheckBreak() + } + if yyb4354 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4354-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ComponentStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4359 := z.EncBinary() + _ = yym4359 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4360 := !z.EncBinary() + yy2arr4360 := z.EncBasicHandle().StructToArray + var yyq4360 [4]bool + _, _, _ = yysep4360, yyq4360, yy2arr4360 + const yyr4360 bool = false + yyq4360[0] = x.Kind != "" + yyq4360[1] = x.APIVersion != "" + yyq4360[2] = true + yyq4360[3] = len(x.Conditions) != 0 + var yynn4360 int + if yyr4360 || yy2arr4360 { + r.EncodeArrayStart(4) + } else { + yynn4360 = 0 + for _, b := range yyq4360 { + if b { + yynn4360++ + } + } + r.EncodeMapStart(yynn4360) + yynn4360 = 0 + } + if yyr4360 || yy2arr4360 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4360[0] { + yym4362 := z.EncBinary() + _ = yym4362 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4360[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4363 := z.EncBinary() + _ = yym4363 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4360 || yy2arr4360 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4360[1] { + yym4365 := z.EncBinary() + _ = yym4365 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4360[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4366 := z.EncBinary() + _ = yym4366 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4360 || yy2arr4360 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4360[2] { + yy4368 := &x.ObjectMeta + yy4368.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4360[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4369 := &x.ObjectMeta + yy4369.CodecEncodeSelf(e) + } + } + if yyr4360 || yy2arr4360 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4360[3] { + if x.Conditions == nil { + r.EncodeNil() + } else { + yym4371 := z.EncBinary() + _ = yym4371 + if false { + } else { + h.encSliceComponentCondition(([]ComponentCondition)(x.Conditions), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4360[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("conditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Conditions == nil { + r.EncodeNil() + } else { + yym4372 := z.EncBinary() + _ = yym4372 + if false { + } else { + h.encSliceComponentCondition(([]ComponentCondition)(x.Conditions), e) + } + } + } + } + if yyr4360 || yy2arr4360 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ComponentStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4373 := z.DecBinary() + _ = yym4373 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4374 := r.ContainerType() + if yyct4374 == codecSelferValueTypeMap1234 { + yyl4374 := r.ReadMapStart() + if yyl4374 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4374, d) + } + } else if yyct4374 == codecSelferValueTypeArray1234 { + yyl4374 := r.ReadArrayStart() + if yyl4374 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4374, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ComponentStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4375Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4375Slc + var yyhl4375 bool = l >= 0 + for yyj4375 := 0; ; yyj4375++ { + if yyhl4375 { + if yyj4375 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4375Slc = r.DecodeBytes(yys4375Slc, true, true) + yys4375 := string(yys4375Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4375 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4378 := &x.ObjectMeta + yyv4378.CodecDecodeSelf(d) + } + case "conditions": + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv4379 := &x.Conditions + yym4380 := z.DecBinary() + _ = yym4380 + if false { + } else { + h.decSliceComponentCondition((*[]ComponentCondition)(yyv4379), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4375) + } // end switch yys4375 + } // end for yyj4375 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ComponentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4381 int + var yyb4381 bool + var yyhl4381 bool = l >= 0 + yyj4381++ + if yyhl4381 { + yyb4381 = yyj4381 > l + } else { + yyb4381 = r.CheckBreak() + } + if yyb4381 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4381++ + if yyhl4381 { + yyb4381 = yyj4381 > l + } else { + yyb4381 = r.CheckBreak() + } + if yyb4381 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4381++ + if yyhl4381 { + yyb4381 = yyj4381 > l + } else { + yyb4381 = r.CheckBreak() + } + if yyb4381 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4384 := &x.ObjectMeta + yyv4384.CodecDecodeSelf(d) + } + yyj4381++ + if yyhl4381 { + yyb4381 = yyj4381 > l + } else { + yyb4381 = r.CheckBreak() + } + if yyb4381 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv4385 := &x.Conditions + yym4386 := z.DecBinary() + _ = yym4386 + if false { + } else { + h.decSliceComponentCondition((*[]ComponentCondition)(yyv4385), d) + } + } + for { + yyj4381++ + if yyhl4381 { + yyb4381 = yyj4381 > l + } else { + yyb4381 = r.CheckBreak() + } + if yyb4381 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4381-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ComponentStatusList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4387 := z.EncBinary() + _ = yym4387 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4388 := !z.EncBinary() + yy2arr4388 := z.EncBasicHandle().StructToArray + var yyq4388 [4]bool + _, _, _ = yysep4388, yyq4388, yy2arr4388 + const yyr4388 bool = false + yyq4388[0] = x.Kind != "" + yyq4388[1] = x.APIVersion != "" + yyq4388[2] = true + var yynn4388 int + if yyr4388 || yy2arr4388 { + r.EncodeArrayStart(4) + } else { + yynn4388 = 1 + for _, b := range yyq4388 { + if b { + yynn4388++ + } + } + r.EncodeMapStart(yynn4388) + yynn4388 = 0 + } + if yyr4388 || yy2arr4388 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4388[0] { + yym4390 := z.EncBinary() + _ = yym4390 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4388[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4391 := z.EncBinary() + _ = yym4391 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4388 || yy2arr4388 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4388[1] { + yym4393 := z.EncBinary() + _ = yym4393 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4388[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4394 := z.EncBinary() + _ = yym4394 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4388 || yy2arr4388 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4388[2] { + yy4396 := &x.ListMeta + yym4397 := z.EncBinary() + _ = yym4397 + if false { + } else if z.HasExtensions() && z.EncExt(yy4396) { + } else { + z.EncFallback(yy4396) + } + } else { + r.EncodeNil() + } + } else { + if yyq4388[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4398 := &x.ListMeta + yym4399 := z.EncBinary() + _ = yym4399 + if false { + } else if z.HasExtensions() && z.EncExt(yy4398) { + } else { + z.EncFallback(yy4398) + } + } + } + if yyr4388 || yy2arr4388 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4401 := z.EncBinary() + _ = yym4401 + if false { + } else { + h.encSliceComponentStatus(([]ComponentStatus)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4402 := z.EncBinary() + _ = yym4402 + if false { + } else { + h.encSliceComponentStatus(([]ComponentStatus)(x.Items), e) + } + } + } + if yyr4388 || yy2arr4388 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ComponentStatusList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4403 := z.DecBinary() + _ = yym4403 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4404 := r.ContainerType() + if yyct4404 == codecSelferValueTypeMap1234 { + yyl4404 := r.ReadMapStart() + if yyl4404 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4404, d) + } + } else if yyct4404 == codecSelferValueTypeArray1234 { + yyl4404 := r.ReadArrayStart() + if yyl4404 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4404, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ComponentStatusList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4405Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4405Slc + var yyhl4405 bool = l >= 0 + for yyj4405 := 0; ; yyj4405++ { + if yyhl4405 { + if yyj4405 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4405Slc = r.DecodeBytes(yys4405Slc, true, true) + yys4405 := string(yys4405Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4405 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4408 := &x.ListMeta + yym4409 := z.DecBinary() + _ = yym4409 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4408) { + } else { + z.DecFallback(yyv4408, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4410 := &x.Items + yym4411 := z.DecBinary() + _ = yym4411 + if false { + } else { + h.decSliceComponentStatus((*[]ComponentStatus)(yyv4410), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4405) + } // end switch yys4405 + } // end for yyj4405 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ComponentStatusList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4412 int + var yyb4412 bool + var yyhl4412 bool = l >= 0 + yyj4412++ + if yyhl4412 { + yyb4412 = yyj4412 > l + } else { + yyb4412 = r.CheckBreak() + } + if yyb4412 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4412++ + if yyhl4412 { + yyb4412 = yyj4412 > l + } else { + yyb4412 = r.CheckBreak() + } + if yyb4412 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4412++ + if yyhl4412 { + yyb4412 = yyj4412 > l + } else { + yyb4412 = r.CheckBreak() + } + if yyb4412 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4415 := &x.ListMeta + yym4416 := z.DecBinary() + _ = yym4416 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4415) { + } else { + z.DecFallback(yyv4415, false) + } + } + yyj4412++ + if yyhl4412 { + yyb4412 = yyj4412 > l + } else { + yyb4412 = r.CheckBreak() + } + if yyb4412 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4417 := &x.Items + yym4418 := z.DecBinary() + _ = yym4418 + if false { + } else { + h.decSliceComponentStatus((*[]ComponentStatus)(yyv4417), d) + } + } + for { + yyj4412++ + if yyhl4412 { + yyb4412 = yyj4412 > l + } else { + yyb4412 = r.CheckBreak() + } + if yyb4412 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4412-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4419 := z.EncBinary() + _ = yym4419 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4420 := !z.EncBinary() + yy2arr4420 := z.EncBasicHandle().StructToArray + var yyq4420 [6]bool + _, _, _ = yysep4420, yyq4420, yy2arr4420 + const yyr4420 bool = false + yyq4420[0] = x.Capabilities != nil + yyq4420[1] = x.Privileged != nil + yyq4420[2] = x.SELinuxOptions != nil + yyq4420[3] = x.RunAsUser != nil + yyq4420[4] = x.RunAsNonRoot != nil + yyq4420[5] = x.ReadOnlyRootFilesystem != nil + var yynn4420 int + if yyr4420 || yy2arr4420 { + r.EncodeArrayStart(6) + } else { + yynn4420 = 0 + for _, b := range yyq4420 { + if b { + yynn4420++ + } + } + r.EncodeMapStart(yynn4420) + yynn4420 = 0 + } + if yyr4420 || yy2arr4420 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4420[0] { + if x.Capabilities == nil { + r.EncodeNil() + } else { + x.Capabilities.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4420[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capabilities")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capabilities == nil { + r.EncodeNil() + } else { + x.Capabilities.CodecEncodeSelf(e) + } + } + } + if yyr4420 || yy2arr4420 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4420[1] { + if x.Privileged == nil { + r.EncodeNil() + } else { + yy4423 := *x.Privileged + yym4424 := z.EncBinary() + _ = yym4424 + if false { + } else { + r.EncodeBool(bool(yy4423)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4420[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("privileged")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Privileged == nil { + r.EncodeNil() + } else { + yy4425 := *x.Privileged + yym4426 := z.EncBinary() + _ = yym4426 + if false { + } else { + r.EncodeBool(bool(yy4425)) + } + } + } + } + if yyr4420 || yy2arr4420 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4420[2] { + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4420[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("seLinuxOptions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } + } + if yyr4420 || yy2arr4420 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4420[3] { + if x.RunAsUser == nil { + r.EncodeNil() + } else { + yy4429 := *x.RunAsUser + yym4430 := z.EncBinary() + _ = yym4430 + if false { + } else { + r.EncodeInt(int64(yy4429)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4420[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsUser")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RunAsUser == nil { + r.EncodeNil() + } else { + yy4431 := *x.RunAsUser + yym4432 := z.EncBinary() + _ = yym4432 + if false { + } else { + r.EncodeInt(int64(yy4431)) + } + } + } + } + if yyr4420 || yy2arr4420 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4420[4] { + if x.RunAsNonRoot == nil { + r.EncodeNil() + } else { + yy4434 := *x.RunAsNonRoot + yym4435 := z.EncBinary() + _ = yym4435 + if false { + } else { + r.EncodeBool(bool(yy4434)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4420[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsNonRoot")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RunAsNonRoot == nil { + r.EncodeNil() + } else { + yy4436 := *x.RunAsNonRoot + yym4437 := z.EncBinary() + _ = yym4437 + if false { + } else { + r.EncodeBool(bool(yy4436)) + } + } + } + } + if yyr4420 || yy2arr4420 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4420[5] { + if x.ReadOnlyRootFilesystem == nil { + r.EncodeNil() + } else { + yy4439 := *x.ReadOnlyRootFilesystem + yym4440 := z.EncBinary() + _ = yym4440 + if false { + } else { + r.EncodeBool(bool(yy4439)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4420[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnlyRootFilesystem")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ReadOnlyRootFilesystem == nil { + r.EncodeNil() + } else { + yy4441 := *x.ReadOnlyRootFilesystem + yym4442 := z.EncBinary() + _ = yym4442 + if false { + } else { + r.EncodeBool(bool(yy4441)) + } + } + } + } + if yyr4420 || yy2arr4420 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecurityContext) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4443 := z.DecBinary() + _ = yym4443 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4444 := r.ContainerType() + if yyct4444 == codecSelferValueTypeMap1234 { + yyl4444 := r.ReadMapStart() + if yyl4444 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4444, d) + } + } else if yyct4444 == codecSelferValueTypeArray1234 { + yyl4444 := r.ReadArrayStart() + if yyl4444 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4444, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4445Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4445Slc + var yyhl4445 bool = l >= 0 + for yyj4445 := 0; ; yyj4445++ { + if yyhl4445 { + if yyj4445 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4445Slc = r.DecodeBytes(yys4445Slc, true, true) + yys4445 := string(yys4445Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4445 { + case "capabilities": + if r.TryDecodeAsNil() { + if x.Capabilities != nil { + x.Capabilities = nil + } + } else { + if x.Capabilities == nil { + x.Capabilities = new(Capabilities) + } + x.Capabilities.CodecDecodeSelf(d) + } + case "privileged": + if r.TryDecodeAsNil() { + if x.Privileged != nil { + x.Privileged = nil + } + } else { + if x.Privileged == nil { + x.Privileged = new(bool) + } + yym4448 := z.DecBinary() + _ = yym4448 + if false { + } else { + *((*bool)(x.Privileged)) = r.DecodeBool() + } + } + case "seLinuxOptions": + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + case "runAsUser": + if r.TryDecodeAsNil() { + if x.RunAsUser != nil { + x.RunAsUser = nil + } + } else { + if x.RunAsUser == nil { + x.RunAsUser = new(int64) + } + yym4451 := z.DecBinary() + _ = yym4451 + if false { + } else { + *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) + } + } + case "runAsNonRoot": + if r.TryDecodeAsNil() { + if x.RunAsNonRoot != nil { + x.RunAsNonRoot = nil + } + } else { + if x.RunAsNonRoot == nil { + x.RunAsNonRoot = new(bool) + } + yym4453 := z.DecBinary() + _ = yym4453 + if false { + } else { + *((*bool)(x.RunAsNonRoot)) = r.DecodeBool() + } + } + case "readOnlyRootFilesystem": + if r.TryDecodeAsNil() { + if x.ReadOnlyRootFilesystem != nil { + x.ReadOnlyRootFilesystem = nil + } + } else { + if x.ReadOnlyRootFilesystem == nil { + x.ReadOnlyRootFilesystem = new(bool) + } + yym4455 := z.DecBinary() + _ = yym4455 + if false { + } else { + *((*bool)(x.ReadOnlyRootFilesystem)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys4445) + } // end switch yys4445 + } // end for yyj4445 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4456 int + var yyb4456 bool + var yyhl4456 bool = l >= 0 + yyj4456++ + if yyhl4456 { + yyb4456 = yyj4456 > l + } else { + yyb4456 = r.CheckBreak() + } + if yyb4456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Capabilities != nil { + x.Capabilities = nil + } + } else { + if x.Capabilities == nil { + x.Capabilities = new(Capabilities) + } + x.Capabilities.CodecDecodeSelf(d) + } + yyj4456++ + if yyhl4456 { + yyb4456 = yyj4456 > l + } else { + yyb4456 = r.CheckBreak() + } + if yyb4456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Privileged != nil { + x.Privileged = nil + } + } else { + if x.Privileged == nil { + x.Privileged = new(bool) + } + yym4459 := z.DecBinary() + _ = yym4459 + if false { + } else { + *((*bool)(x.Privileged)) = r.DecodeBool() + } + } + yyj4456++ + if yyhl4456 { + yyb4456 = yyj4456 > l + } else { + yyb4456 = r.CheckBreak() + } + if yyb4456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + yyj4456++ + if yyhl4456 { + yyb4456 = yyj4456 > l + } else { + yyb4456 = r.CheckBreak() + } + if yyb4456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RunAsUser != nil { + x.RunAsUser = nil + } + } else { + if x.RunAsUser == nil { + x.RunAsUser = new(int64) + } + yym4462 := z.DecBinary() + _ = yym4462 + if false { + } else { + *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) + } + } + yyj4456++ + if yyhl4456 { + yyb4456 = yyj4456 > l + } else { + yyb4456 = r.CheckBreak() + } + if yyb4456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RunAsNonRoot != nil { + x.RunAsNonRoot = nil + } + } else { + if x.RunAsNonRoot == nil { + x.RunAsNonRoot = new(bool) + } + yym4464 := z.DecBinary() + _ = yym4464 + if false { + } else { + *((*bool)(x.RunAsNonRoot)) = r.DecodeBool() + } + } + yyj4456++ + if yyhl4456 { + yyb4456 = yyj4456 > l + } else { + yyb4456 = r.CheckBreak() + } + if yyb4456 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ReadOnlyRootFilesystem != nil { + x.ReadOnlyRootFilesystem = nil + } + } else { + if x.ReadOnlyRootFilesystem == nil { + x.ReadOnlyRootFilesystem = new(bool) + } + yym4466 := z.DecBinary() + _ = yym4466 + if false { + } else { + *((*bool)(x.ReadOnlyRootFilesystem)) = r.DecodeBool() + } + } + for { + yyj4456++ + if yyhl4456 { + yyb4456 = yyj4456 > l + } else { + yyb4456 = r.CheckBreak() + } + if yyb4456 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4456-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SELinuxOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4467 := z.EncBinary() + _ = yym4467 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4468 := !z.EncBinary() + yy2arr4468 := z.EncBasicHandle().StructToArray + var yyq4468 [4]bool + _, _, _ = yysep4468, yyq4468, yy2arr4468 + const yyr4468 bool = false + yyq4468[0] = x.User != "" + yyq4468[1] = x.Role != "" + yyq4468[2] = x.Type != "" + yyq4468[3] = x.Level != "" + var yynn4468 int + if yyr4468 || yy2arr4468 { + r.EncodeArrayStart(4) + } else { + yynn4468 = 0 + for _, b := range yyq4468 { + if b { + yynn4468++ + } + } + r.EncodeMapStart(yynn4468) + yynn4468 = 0 + } + if yyr4468 || yy2arr4468 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4468[0] { + yym4470 := z.EncBinary() + _ = yym4470 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4468[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4471 := z.EncBinary() + _ = yym4471 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } + } + if yyr4468 || yy2arr4468 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4468[1] { + yym4473 := z.EncBinary() + _ = yym4473 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Role)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4468[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("role")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4474 := z.EncBinary() + _ = yym4474 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Role)) + } + } + } + if yyr4468 || yy2arr4468 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4468[2] { + yym4476 := z.EncBinary() + _ = yym4476 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Type)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4468[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4477 := z.EncBinary() + _ = yym4477 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Type)) + } + } + } + if yyr4468 || yy2arr4468 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4468[3] { + yym4479 := z.EncBinary() + _ = yym4479 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Level)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4468[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("level")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4480 := z.EncBinary() + _ = yym4480 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Level)) + } + } + } + if yyr4468 || yy2arr4468 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SELinuxOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4481 := z.DecBinary() + _ = yym4481 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4482 := r.ContainerType() + if yyct4482 == codecSelferValueTypeMap1234 { + yyl4482 := r.ReadMapStart() + if yyl4482 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4482, d) + } + } else if yyct4482 == codecSelferValueTypeArray1234 { + yyl4482 := r.ReadArrayStart() + if yyl4482 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4482, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SELinuxOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4483Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4483Slc + var yyhl4483 bool = l >= 0 + for yyj4483 := 0; ; yyj4483++ { + if yyhl4483 { + if yyj4483 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4483Slc = r.DecodeBytes(yys4483Slc, true, true) + yys4483 := string(yys4483Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4483 { + case "user": + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + case "role": + if r.TryDecodeAsNil() { + x.Role = "" + } else { + x.Role = string(r.DecodeString()) + } + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = string(r.DecodeString()) + } + case "level": + if r.TryDecodeAsNil() { + x.Level = "" + } else { + x.Level = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys4483) + } // end switch yys4483 + } // end for yyj4483 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SELinuxOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4488 int + var yyb4488 bool + var yyhl4488 bool = l >= 0 + yyj4488++ + if yyhl4488 { + yyb4488 = yyj4488 > l + } else { + yyb4488 = r.CheckBreak() + } + if yyb4488 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + yyj4488++ + if yyhl4488 { + yyb4488 = yyj4488 > l + } else { + yyb4488 = r.CheckBreak() + } + if yyb4488 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Role = "" + } else { + x.Role = string(r.DecodeString()) + } + yyj4488++ + if yyhl4488 { + yyb4488 = yyj4488 > l + } else { + yyb4488 = r.CheckBreak() + } + if yyb4488 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = string(r.DecodeString()) + } + yyj4488++ + if yyhl4488 { + yyb4488 = yyj4488 > l + } else { + yyb4488 = r.CheckBreak() + } + if yyb4488 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Level = "" + } else { + x.Level = string(r.DecodeString()) + } + for { + yyj4488++ + if yyhl4488 { + yyb4488 = yyj4488 > l + } else { + yyb4488 = r.CheckBreak() + } + if yyb4488 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4488-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *RangeAllocation) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4493 := z.EncBinary() + _ = yym4493 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4494 := !z.EncBinary() + yy2arr4494 := z.EncBasicHandle().StructToArray + var yyq4494 [5]bool + _, _, _ = yysep4494, yyq4494, yy2arr4494 + const yyr4494 bool = false + yyq4494[0] = x.Kind != "" + yyq4494[1] = x.APIVersion != "" + yyq4494[2] = true + var yynn4494 int + if yyr4494 || yy2arr4494 { + r.EncodeArrayStart(5) + } else { + yynn4494 = 2 + for _, b := range yyq4494 { + if b { + yynn4494++ + } + } + r.EncodeMapStart(yynn4494) + yynn4494 = 0 + } + if yyr4494 || yy2arr4494 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4494[0] { + yym4496 := z.EncBinary() + _ = yym4496 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4494[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4497 := z.EncBinary() + _ = yym4497 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4494 || yy2arr4494 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4494[1] { + yym4499 := z.EncBinary() + _ = yym4499 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4494[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4500 := z.EncBinary() + _ = yym4500 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4494 || yy2arr4494 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4494[2] { + yy4502 := &x.ObjectMeta + yy4502.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4494[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4503 := &x.ObjectMeta + yy4503.CodecEncodeSelf(e) + } + } + if yyr4494 || yy2arr4494 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym4505 := z.EncBinary() + _ = yym4505 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Range)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("range")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4506 := z.EncBinary() + _ = yym4506 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Range)) + } + } + if yyr4494 || yy2arr4494 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym4508 := z.EncBinary() + _ = yym4508 + if false { + } else { + r.EncodeStringBytes(codecSelferC_RAW1234, []byte(x.Data)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("data")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym4509 := z.EncBinary() + _ = yym4509 + if false { + } else { + r.EncodeStringBytes(codecSelferC_RAW1234, []byte(x.Data)) + } + } + } + if yyr4494 || yy2arr4494 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *RangeAllocation) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4510 := z.DecBinary() + _ = yym4510 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4511 := r.ContainerType() + if yyct4511 == codecSelferValueTypeMap1234 { + yyl4511 := r.ReadMapStart() + if yyl4511 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4511, d) + } + } else if yyct4511 == codecSelferValueTypeArray1234 { + yyl4511 := r.ReadArrayStart() + if yyl4511 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4511, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *RangeAllocation) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4512Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4512Slc + var yyhl4512 bool = l >= 0 + for yyj4512 := 0; ; yyj4512++ { + if yyhl4512 { + if yyj4512 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4512Slc = r.DecodeBytes(yys4512Slc, true, true) + yys4512 := string(yys4512Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4512 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4515 := &x.ObjectMeta + yyv4515.CodecDecodeSelf(d) + } + case "range": + if r.TryDecodeAsNil() { + x.Range = "" + } else { + x.Range = string(r.DecodeString()) + } + case "data": + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4517 := &x.Data + yym4518 := z.DecBinary() + _ = yym4518 + if false { + } else { + *yyv4517 = r.DecodeBytes(*(*[]byte)(yyv4517), false, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys4512) + } // end switch yys4512 + } // end for yyj4512 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *RangeAllocation) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4519 int + var yyb4519 bool + var yyhl4519 bool = l >= 0 + yyj4519++ + if yyhl4519 { + yyb4519 = yyj4519 > l + } else { + yyb4519 = r.CheckBreak() + } + if yyb4519 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4519++ + if yyhl4519 { + yyb4519 = yyj4519 > l + } else { + yyb4519 = r.CheckBreak() + } + if yyb4519 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4519++ + if yyhl4519 { + yyb4519 = yyj4519 > l + } else { + yyb4519 = r.CheckBreak() + } + if yyb4519 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4522 := &x.ObjectMeta + yyv4522.CodecDecodeSelf(d) + } + yyj4519++ + if yyhl4519 { + yyb4519 = yyj4519 > l + } else { + yyb4519 = r.CheckBreak() + } + if yyb4519 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Range = "" + } else { + x.Range = string(r.DecodeString()) + } + yyj4519++ + if yyhl4519 { + yyb4519 = yyj4519 > l + } else { + yyb4519 = r.CheckBreak() + } + if yyb4519 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4524 := &x.Data + yym4525 := z.DecBinary() + _ = yym4525 + if false { + } else { + *yyv4524 = r.DecodeBytes(*(*[]byte)(yyv4524), false, false) + } + } + for { + yyj4519++ + if yyhl4519 { + yyb4519 = yyj4519 > l + } else { + yyb4519 = r.CheckBreak() + } + if yyb4519 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4519-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) encSliceOwnerReference(v []OwnerReference, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4526 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4527 := &yyv4526 + yy4527.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceOwnerReference(v *[]OwnerReference, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4528 := *v + yyh4528, yyl4528 := z.DecSliceHelperStart() + var yyc4528 bool + if yyl4528 == 0 { + if yyv4528 == nil { + yyv4528 = []OwnerReference{} + yyc4528 = true + } else if len(yyv4528) != 0 { + yyv4528 = yyv4528[:0] + yyc4528 = true + } + } else if yyl4528 > 0 { + var yyrr4528, yyrl4528 int + var yyrt4528 bool + if yyl4528 > cap(yyv4528) { + + yyrg4528 := len(yyv4528) > 0 + yyv24528 := yyv4528 + yyrl4528, yyrt4528 = z.DecInferLen(yyl4528, z.DecBasicHandle().MaxInitLen, 72) + if yyrt4528 { + if yyrl4528 <= cap(yyv4528) { + yyv4528 = yyv4528[:yyrl4528] + } else { + yyv4528 = make([]OwnerReference, yyrl4528) + } + } else { + yyv4528 = make([]OwnerReference, yyrl4528) + } + yyc4528 = true + yyrr4528 = len(yyv4528) + if yyrg4528 { + copy(yyv4528, yyv24528) + } + } else if yyl4528 != len(yyv4528) { + yyv4528 = yyv4528[:yyl4528] + yyc4528 = true + } + yyj4528 := 0 + for ; yyj4528 < yyrr4528; yyj4528++ { + yyh4528.ElemContainerState(yyj4528) + if r.TryDecodeAsNil() { + yyv4528[yyj4528] = OwnerReference{} + } else { + yyv4529 := &yyv4528[yyj4528] + yyv4529.CodecDecodeSelf(d) + } + + } + if yyrt4528 { + for ; yyj4528 < yyl4528; yyj4528++ { + yyv4528 = append(yyv4528, OwnerReference{}) + yyh4528.ElemContainerState(yyj4528) + if r.TryDecodeAsNil() { + yyv4528[yyj4528] = OwnerReference{} + } else { + yyv4530 := &yyv4528[yyj4528] + yyv4530.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4528 := 0 + for ; !r.CheckBreak(); yyj4528++ { + + if yyj4528 >= len(yyv4528) { + yyv4528 = append(yyv4528, OwnerReference{}) // var yyz4528 OwnerReference + yyc4528 = true + } + yyh4528.ElemContainerState(yyj4528) + if yyj4528 < len(yyv4528) { + if r.TryDecodeAsNil() { + yyv4528[yyj4528] = OwnerReference{} + } else { + yyv4531 := &yyv4528[yyj4528] + yyv4531.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4528 < len(yyv4528) { + yyv4528 = yyv4528[:yyj4528] + yyc4528 = true + } else if yyj4528 == 0 && yyv4528 == nil { + yyv4528 = []OwnerReference{} + yyc4528 = true + } + } + yyh4528.End() + if yyc4528 { + *v = yyv4528 + } +} + +func (x codecSelfer1234) encSlicePersistentVolumeAccessMode(v []PersistentVolumeAccessMode, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4532 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4532.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePersistentVolumeAccessMode(v *[]PersistentVolumeAccessMode, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4533 := *v + yyh4533, yyl4533 := z.DecSliceHelperStart() + var yyc4533 bool + if yyl4533 == 0 { + if yyv4533 == nil { + yyv4533 = []PersistentVolumeAccessMode{} + yyc4533 = true + } else if len(yyv4533) != 0 { + yyv4533 = yyv4533[:0] + yyc4533 = true + } + } else if yyl4533 > 0 { + var yyrr4533, yyrl4533 int + var yyrt4533 bool + if yyl4533 > cap(yyv4533) { + + yyrl4533, yyrt4533 = z.DecInferLen(yyl4533, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4533 { + if yyrl4533 <= cap(yyv4533) { + yyv4533 = yyv4533[:yyrl4533] + } else { + yyv4533 = make([]PersistentVolumeAccessMode, yyrl4533) + } + } else { + yyv4533 = make([]PersistentVolumeAccessMode, yyrl4533) + } + yyc4533 = true + yyrr4533 = len(yyv4533) + } else if yyl4533 != len(yyv4533) { + yyv4533 = yyv4533[:yyl4533] + yyc4533 = true + } + yyj4533 := 0 + for ; yyj4533 < yyrr4533; yyj4533++ { + yyh4533.ElemContainerState(yyj4533) + if r.TryDecodeAsNil() { + yyv4533[yyj4533] = "" + } else { + yyv4533[yyj4533] = PersistentVolumeAccessMode(r.DecodeString()) + } + + } + if yyrt4533 { + for ; yyj4533 < yyl4533; yyj4533++ { + yyv4533 = append(yyv4533, "") + yyh4533.ElemContainerState(yyj4533) + if r.TryDecodeAsNil() { + yyv4533[yyj4533] = "" + } else { + yyv4533[yyj4533] = PersistentVolumeAccessMode(r.DecodeString()) + } + + } + } + + } else { + yyj4533 := 0 + for ; !r.CheckBreak(); yyj4533++ { + + if yyj4533 >= len(yyv4533) { + yyv4533 = append(yyv4533, "") // var yyz4533 PersistentVolumeAccessMode + yyc4533 = true + } + yyh4533.ElemContainerState(yyj4533) + if yyj4533 < len(yyv4533) { + if r.TryDecodeAsNil() { + yyv4533[yyj4533] = "" + } else { + yyv4533[yyj4533] = PersistentVolumeAccessMode(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4533 < len(yyv4533) { + yyv4533 = yyv4533[:yyj4533] + yyc4533 = true + } else if yyj4533 == 0 && yyv4533 == nil { + yyv4533 = []PersistentVolumeAccessMode{} + yyc4533 = true + } + } + yyh4533.End() + if yyc4533 { + *v = yyv4533 + } +} + +func (x codecSelfer1234) encSlicePersistentVolume(v []PersistentVolume, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4537 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4538 := &yyv4537 + yy4538.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePersistentVolume(v *[]PersistentVolume, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4539 := *v + yyh4539, yyl4539 := z.DecSliceHelperStart() + var yyc4539 bool + if yyl4539 == 0 { + if yyv4539 == nil { + yyv4539 = []PersistentVolume{} + yyc4539 = true + } else if len(yyv4539) != 0 { + yyv4539 = yyv4539[:0] + yyc4539 = true + } + } else if yyl4539 > 0 { + var yyrr4539, yyrl4539 int + var yyrt4539 bool + if yyl4539 > cap(yyv4539) { + + yyrg4539 := len(yyv4539) > 0 + yyv24539 := yyv4539 + yyrl4539, yyrt4539 = z.DecInferLen(yyl4539, z.DecBasicHandle().MaxInitLen, 488) + if yyrt4539 { + if yyrl4539 <= cap(yyv4539) { + yyv4539 = yyv4539[:yyrl4539] + } else { + yyv4539 = make([]PersistentVolume, yyrl4539) + } + } else { + yyv4539 = make([]PersistentVolume, yyrl4539) + } + yyc4539 = true + yyrr4539 = len(yyv4539) + if yyrg4539 { + copy(yyv4539, yyv24539) + } + } else if yyl4539 != len(yyv4539) { + yyv4539 = yyv4539[:yyl4539] + yyc4539 = true + } + yyj4539 := 0 + for ; yyj4539 < yyrr4539; yyj4539++ { + yyh4539.ElemContainerState(yyj4539) + if r.TryDecodeAsNil() { + yyv4539[yyj4539] = PersistentVolume{} + } else { + yyv4540 := &yyv4539[yyj4539] + yyv4540.CodecDecodeSelf(d) + } + + } + if yyrt4539 { + for ; yyj4539 < yyl4539; yyj4539++ { + yyv4539 = append(yyv4539, PersistentVolume{}) + yyh4539.ElemContainerState(yyj4539) + if r.TryDecodeAsNil() { + yyv4539[yyj4539] = PersistentVolume{} + } else { + yyv4541 := &yyv4539[yyj4539] + yyv4541.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4539 := 0 + for ; !r.CheckBreak(); yyj4539++ { + + if yyj4539 >= len(yyv4539) { + yyv4539 = append(yyv4539, PersistentVolume{}) // var yyz4539 PersistentVolume + yyc4539 = true + } + yyh4539.ElemContainerState(yyj4539) + if yyj4539 < len(yyv4539) { + if r.TryDecodeAsNil() { + yyv4539[yyj4539] = PersistentVolume{} + } else { + yyv4542 := &yyv4539[yyj4539] + yyv4542.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4539 < len(yyv4539) { + yyv4539 = yyv4539[:yyj4539] + yyc4539 = true + } else if yyj4539 == 0 && yyv4539 == nil { + yyv4539 = []PersistentVolume{} + yyc4539 = true + } + } + yyh4539.End() + if yyc4539 { + *v = yyv4539 + } +} + +func (x codecSelfer1234) encSlicePersistentVolumeClaim(v []PersistentVolumeClaim, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4543 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4544 := &yyv4543 + yy4544.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePersistentVolumeClaim(v *[]PersistentVolumeClaim, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4545 := *v + yyh4545, yyl4545 := z.DecSliceHelperStart() + var yyc4545 bool + if yyl4545 == 0 { + if yyv4545 == nil { + yyv4545 = []PersistentVolumeClaim{} + yyc4545 = true + } else if len(yyv4545) != 0 { + yyv4545 = yyv4545[:0] + yyc4545 = true + } + } else if yyl4545 > 0 { + var yyrr4545, yyrl4545 int + var yyrt4545 bool + if yyl4545 > cap(yyv4545) { + + yyrg4545 := len(yyv4545) > 0 + yyv24545 := yyv4545 + yyrl4545, yyrt4545 = z.DecInferLen(yyl4545, z.DecBasicHandle().MaxInitLen, 368) + if yyrt4545 { + if yyrl4545 <= cap(yyv4545) { + yyv4545 = yyv4545[:yyrl4545] + } else { + yyv4545 = make([]PersistentVolumeClaim, yyrl4545) + } + } else { + yyv4545 = make([]PersistentVolumeClaim, yyrl4545) + } + yyc4545 = true + yyrr4545 = len(yyv4545) + if yyrg4545 { + copy(yyv4545, yyv24545) + } + } else if yyl4545 != len(yyv4545) { + yyv4545 = yyv4545[:yyl4545] + yyc4545 = true + } + yyj4545 := 0 + for ; yyj4545 < yyrr4545; yyj4545++ { + yyh4545.ElemContainerState(yyj4545) + if r.TryDecodeAsNil() { + yyv4545[yyj4545] = PersistentVolumeClaim{} + } else { + yyv4546 := &yyv4545[yyj4545] + yyv4546.CodecDecodeSelf(d) + } + + } + if yyrt4545 { + for ; yyj4545 < yyl4545; yyj4545++ { + yyv4545 = append(yyv4545, PersistentVolumeClaim{}) + yyh4545.ElemContainerState(yyj4545) + if r.TryDecodeAsNil() { + yyv4545[yyj4545] = PersistentVolumeClaim{} + } else { + yyv4547 := &yyv4545[yyj4545] + yyv4547.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4545 := 0 + for ; !r.CheckBreak(); yyj4545++ { + + if yyj4545 >= len(yyv4545) { + yyv4545 = append(yyv4545, PersistentVolumeClaim{}) // var yyz4545 PersistentVolumeClaim + yyc4545 = true + } + yyh4545.ElemContainerState(yyj4545) + if yyj4545 < len(yyv4545) { + if r.TryDecodeAsNil() { + yyv4545[yyj4545] = PersistentVolumeClaim{} + } else { + yyv4548 := &yyv4545[yyj4545] + yyv4548.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4545 < len(yyv4545) { + yyv4545 = yyv4545[:yyj4545] + yyc4545 = true + } else if yyj4545 == 0 && yyv4545 == nil { + yyv4545 = []PersistentVolumeClaim{} + yyc4545 = true + } + } + yyh4545.End() + if yyc4545 { + *v = yyv4545 + } +} + +func (x codecSelfer1234) encSliceKeyToPath(v []KeyToPath, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4549 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4550 := &yyv4549 + yy4550.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceKeyToPath(v *[]KeyToPath, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4551 := *v + yyh4551, yyl4551 := z.DecSliceHelperStart() + var yyc4551 bool + if yyl4551 == 0 { + if yyv4551 == nil { + yyv4551 = []KeyToPath{} + yyc4551 = true + } else if len(yyv4551) != 0 { + yyv4551 = yyv4551[:0] + yyc4551 = true + } + } else if yyl4551 > 0 { + var yyrr4551, yyrl4551 int + var yyrt4551 bool + if yyl4551 > cap(yyv4551) { + + yyrg4551 := len(yyv4551) > 0 + yyv24551 := yyv4551 + yyrl4551, yyrt4551 = z.DecInferLen(yyl4551, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4551 { + if yyrl4551 <= cap(yyv4551) { + yyv4551 = yyv4551[:yyrl4551] + } else { + yyv4551 = make([]KeyToPath, yyrl4551) + } + } else { + yyv4551 = make([]KeyToPath, yyrl4551) + } + yyc4551 = true + yyrr4551 = len(yyv4551) + if yyrg4551 { + copy(yyv4551, yyv24551) + } + } else if yyl4551 != len(yyv4551) { + yyv4551 = yyv4551[:yyl4551] + yyc4551 = true + } + yyj4551 := 0 + for ; yyj4551 < yyrr4551; yyj4551++ { + yyh4551.ElemContainerState(yyj4551) + if r.TryDecodeAsNil() { + yyv4551[yyj4551] = KeyToPath{} + } else { + yyv4552 := &yyv4551[yyj4551] + yyv4552.CodecDecodeSelf(d) + } + + } + if yyrt4551 { + for ; yyj4551 < yyl4551; yyj4551++ { + yyv4551 = append(yyv4551, KeyToPath{}) + yyh4551.ElemContainerState(yyj4551) + if r.TryDecodeAsNil() { + yyv4551[yyj4551] = KeyToPath{} + } else { + yyv4553 := &yyv4551[yyj4551] + yyv4553.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4551 := 0 + for ; !r.CheckBreak(); yyj4551++ { + + if yyj4551 >= len(yyv4551) { + yyv4551 = append(yyv4551, KeyToPath{}) // var yyz4551 KeyToPath + yyc4551 = true + } + yyh4551.ElemContainerState(yyj4551) + if yyj4551 < len(yyv4551) { + if r.TryDecodeAsNil() { + yyv4551[yyj4551] = KeyToPath{} + } else { + yyv4554 := &yyv4551[yyj4551] + yyv4554.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4551 < len(yyv4551) { + yyv4551 = yyv4551[:yyj4551] + yyc4551 = true + } else if yyj4551 == 0 && yyv4551 == nil { + yyv4551 = []KeyToPath{} + yyc4551 = true + } + } + yyh4551.End() + if yyc4551 { + *v = yyv4551 + } +} + +func (x codecSelfer1234) encSliceDownwardAPIVolumeFile(v []DownwardAPIVolumeFile, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4555 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4556 := &yyv4555 + yy4556.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceDownwardAPIVolumeFile(v *[]DownwardAPIVolumeFile, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4557 := *v + yyh4557, yyl4557 := z.DecSliceHelperStart() + var yyc4557 bool + if yyl4557 == 0 { + if yyv4557 == nil { + yyv4557 = []DownwardAPIVolumeFile{} + yyc4557 = true + } else if len(yyv4557) != 0 { + yyv4557 = yyv4557[:0] + yyc4557 = true + } + } else if yyl4557 > 0 { + var yyrr4557, yyrl4557 int + var yyrt4557 bool + if yyl4557 > cap(yyv4557) { + + yyrg4557 := len(yyv4557) > 0 + yyv24557 := yyv4557 + yyrl4557, yyrt4557 = z.DecInferLen(yyl4557, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4557 { + if yyrl4557 <= cap(yyv4557) { + yyv4557 = yyv4557[:yyrl4557] + } else { + yyv4557 = make([]DownwardAPIVolumeFile, yyrl4557) + } + } else { + yyv4557 = make([]DownwardAPIVolumeFile, yyrl4557) + } + yyc4557 = true + yyrr4557 = len(yyv4557) + if yyrg4557 { + copy(yyv4557, yyv24557) + } + } else if yyl4557 != len(yyv4557) { + yyv4557 = yyv4557[:yyl4557] + yyc4557 = true + } + yyj4557 := 0 + for ; yyj4557 < yyrr4557; yyj4557++ { + yyh4557.ElemContainerState(yyj4557) + if r.TryDecodeAsNil() { + yyv4557[yyj4557] = DownwardAPIVolumeFile{} + } else { + yyv4558 := &yyv4557[yyj4557] + yyv4558.CodecDecodeSelf(d) + } + + } + if yyrt4557 { + for ; yyj4557 < yyl4557; yyj4557++ { + yyv4557 = append(yyv4557, DownwardAPIVolumeFile{}) + yyh4557.ElemContainerState(yyj4557) + if r.TryDecodeAsNil() { + yyv4557[yyj4557] = DownwardAPIVolumeFile{} + } else { + yyv4559 := &yyv4557[yyj4557] + yyv4559.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4557 := 0 + for ; !r.CheckBreak(); yyj4557++ { + + if yyj4557 >= len(yyv4557) { + yyv4557 = append(yyv4557, DownwardAPIVolumeFile{}) // var yyz4557 DownwardAPIVolumeFile + yyc4557 = true + } + yyh4557.ElemContainerState(yyj4557) + if yyj4557 < len(yyv4557) { + if r.TryDecodeAsNil() { + yyv4557[yyj4557] = DownwardAPIVolumeFile{} + } else { + yyv4560 := &yyv4557[yyj4557] + yyv4560.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4557 < len(yyv4557) { + yyv4557 = yyv4557[:yyj4557] + yyc4557 = true + } else if yyj4557 == 0 && yyv4557 == nil { + yyv4557 = []DownwardAPIVolumeFile{} + yyc4557 = true + } + } + yyh4557.End() + if yyc4557 { + *v = yyv4557 + } +} + +func (x codecSelfer1234) encSliceHTTPHeader(v []HTTPHeader, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4561 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4562 := &yyv4561 + yy4562.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceHTTPHeader(v *[]HTTPHeader, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4563 := *v + yyh4563, yyl4563 := z.DecSliceHelperStart() + var yyc4563 bool + if yyl4563 == 0 { + if yyv4563 == nil { + yyv4563 = []HTTPHeader{} + yyc4563 = true + } else if len(yyv4563) != 0 { + yyv4563 = yyv4563[:0] + yyc4563 = true + } + } else if yyl4563 > 0 { + var yyrr4563, yyrl4563 int + var yyrt4563 bool + if yyl4563 > cap(yyv4563) { + + yyrg4563 := len(yyv4563) > 0 + yyv24563 := yyv4563 + yyrl4563, yyrt4563 = z.DecInferLen(yyl4563, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4563 { + if yyrl4563 <= cap(yyv4563) { + yyv4563 = yyv4563[:yyrl4563] + } else { + yyv4563 = make([]HTTPHeader, yyrl4563) + } + } else { + yyv4563 = make([]HTTPHeader, yyrl4563) + } + yyc4563 = true + yyrr4563 = len(yyv4563) + if yyrg4563 { + copy(yyv4563, yyv24563) + } + } else if yyl4563 != len(yyv4563) { + yyv4563 = yyv4563[:yyl4563] + yyc4563 = true + } + yyj4563 := 0 + for ; yyj4563 < yyrr4563; yyj4563++ { + yyh4563.ElemContainerState(yyj4563) + if r.TryDecodeAsNil() { + yyv4563[yyj4563] = HTTPHeader{} + } else { + yyv4564 := &yyv4563[yyj4563] + yyv4564.CodecDecodeSelf(d) + } + + } + if yyrt4563 { + for ; yyj4563 < yyl4563; yyj4563++ { + yyv4563 = append(yyv4563, HTTPHeader{}) + yyh4563.ElemContainerState(yyj4563) + if r.TryDecodeAsNil() { + yyv4563[yyj4563] = HTTPHeader{} + } else { + yyv4565 := &yyv4563[yyj4563] + yyv4565.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4563 := 0 + for ; !r.CheckBreak(); yyj4563++ { + + if yyj4563 >= len(yyv4563) { + yyv4563 = append(yyv4563, HTTPHeader{}) // var yyz4563 HTTPHeader + yyc4563 = true + } + yyh4563.ElemContainerState(yyj4563) + if yyj4563 < len(yyv4563) { + if r.TryDecodeAsNil() { + yyv4563[yyj4563] = HTTPHeader{} + } else { + yyv4566 := &yyv4563[yyj4563] + yyv4566.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4563 < len(yyv4563) { + yyv4563 = yyv4563[:yyj4563] + yyc4563 = true + } else if yyj4563 == 0 && yyv4563 == nil { + yyv4563 = []HTTPHeader{} + yyc4563 = true + } + } + yyh4563.End() + if yyc4563 { + *v = yyv4563 + } +} + +func (x codecSelfer1234) encSliceCapability(v []Capability, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4567 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4567.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceCapability(v *[]Capability, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4568 := *v + yyh4568, yyl4568 := z.DecSliceHelperStart() + var yyc4568 bool + if yyl4568 == 0 { + if yyv4568 == nil { + yyv4568 = []Capability{} + yyc4568 = true + } else if len(yyv4568) != 0 { + yyv4568 = yyv4568[:0] + yyc4568 = true + } + } else if yyl4568 > 0 { + var yyrr4568, yyrl4568 int + var yyrt4568 bool + if yyl4568 > cap(yyv4568) { + + yyrl4568, yyrt4568 = z.DecInferLen(yyl4568, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4568 { + if yyrl4568 <= cap(yyv4568) { + yyv4568 = yyv4568[:yyrl4568] + } else { + yyv4568 = make([]Capability, yyrl4568) + } + } else { + yyv4568 = make([]Capability, yyrl4568) + } + yyc4568 = true + yyrr4568 = len(yyv4568) + } else if yyl4568 != len(yyv4568) { + yyv4568 = yyv4568[:yyl4568] + yyc4568 = true + } + yyj4568 := 0 + for ; yyj4568 < yyrr4568; yyj4568++ { + yyh4568.ElemContainerState(yyj4568) + if r.TryDecodeAsNil() { + yyv4568[yyj4568] = "" + } else { + yyv4568[yyj4568] = Capability(r.DecodeString()) + } + + } + if yyrt4568 { + for ; yyj4568 < yyl4568; yyj4568++ { + yyv4568 = append(yyv4568, "") + yyh4568.ElemContainerState(yyj4568) + if r.TryDecodeAsNil() { + yyv4568[yyj4568] = "" + } else { + yyv4568[yyj4568] = Capability(r.DecodeString()) + } + + } + } + + } else { + yyj4568 := 0 + for ; !r.CheckBreak(); yyj4568++ { + + if yyj4568 >= len(yyv4568) { + yyv4568 = append(yyv4568, "") // var yyz4568 Capability + yyc4568 = true + } + yyh4568.ElemContainerState(yyj4568) + if yyj4568 < len(yyv4568) { + if r.TryDecodeAsNil() { + yyv4568[yyj4568] = "" + } else { + yyv4568[yyj4568] = Capability(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4568 < len(yyv4568) { + yyv4568 = yyv4568[:yyj4568] + yyc4568 = true + } else if yyj4568 == 0 && yyv4568 == nil { + yyv4568 = []Capability{} + yyc4568 = true + } + } + yyh4568.End() + if yyc4568 { + *v = yyv4568 + } +} + +func (x codecSelfer1234) encSliceContainerPort(v []ContainerPort, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4572 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4573 := &yyv4572 + yy4573.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceContainerPort(v *[]ContainerPort, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4574 := *v + yyh4574, yyl4574 := z.DecSliceHelperStart() + var yyc4574 bool + if yyl4574 == 0 { + if yyv4574 == nil { + yyv4574 = []ContainerPort{} + yyc4574 = true + } else if len(yyv4574) != 0 { + yyv4574 = yyv4574[:0] + yyc4574 = true + } + } else if yyl4574 > 0 { + var yyrr4574, yyrl4574 int + var yyrt4574 bool + if yyl4574 > cap(yyv4574) { + + yyrg4574 := len(yyv4574) > 0 + yyv24574 := yyv4574 + yyrl4574, yyrt4574 = z.DecInferLen(yyl4574, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4574 { + if yyrl4574 <= cap(yyv4574) { + yyv4574 = yyv4574[:yyrl4574] + } else { + yyv4574 = make([]ContainerPort, yyrl4574) + } + } else { + yyv4574 = make([]ContainerPort, yyrl4574) + } + yyc4574 = true + yyrr4574 = len(yyv4574) + if yyrg4574 { + copy(yyv4574, yyv24574) + } + } else if yyl4574 != len(yyv4574) { + yyv4574 = yyv4574[:yyl4574] + yyc4574 = true + } + yyj4574 := 0 + for ; yyj4574 < yyrr4574; yyj4574++ { + yyh4574.ElemContainerState(yyj4574) + if r.TryDecodeAsNil() { + yyv4574[yyj4574] = ContainerPort{} + } else { + yyv4575 := &yyv4574[yyj4574] + yyv4575.CodecDecodeSelf(d) + } + + } + if yyrt4574 { + for ; yyj4574 < yyl4574; yyj4574++ { + yyv4574 = append(yyv4574, ContainerPort{}) + yyh4574.ElemContainerState(yyj4574) + if r.TryDecodeAsNil() { + yyv4574[yyj4574] = ContainerPort{} + } else { + yyv4576 := &yyv4574[yyj4574] + yyv4576.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4574 := 0 + for ; !r.CheckBreak(); yyj4574++ { + + if yyj4574 >= len(yyv4574) { + yyv4574 = append(yyv4574, ContainerPort{}) // var yyz4574 ContainerPort + yyc4574 = true + } + yyh4574.ElemContainerState(yyj4574) + if yyj4574 < len(yyv4574) { + if r.TryDecodeAsNil() { + yyv4574[yyj4574] = ContainerPort{} + } else { + yyv4577 := &yyv4574[yyj4574] + yyv4577.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4574 < len(yyv4574) { + yyv4574 = yyv4574[:yyj4574] + yyc4574 = true + } else if yyj4574 == 0 && yyv4574 == nil { + yyv4574 = []ContainerPort{} + yyc4574 = true + } + } + yyh4574.End() + if yyc4574 { + *v = yyv4574 + } +} + +func (x codecSelfer1234) encSliceEnvVar(v []EnvVar, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4578 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4579 := &yyv4578 + yy4579.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEnvVar(v *[]EnvVar, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4580 := *v + yyh4580, yyl4580 := z.DecSliceHelperStart() + var yyc4580 bool + if yyl4580 == 0 { + if yyv4580 == nil { + yyv4580 = []EnvVar{} + yyc4580 = true + } else if len(yyv4580) != 0 { + yyv4580 = yyv4580[:0] + yyc4580 = true + } + } else if yyl4580 > 0 { + var yyrr4580, yyrl4580 int + var yyrt4580 bool + if yyl4580 > cap(yyv4580) { + + yyrg4580 := len(yyv4580) > 0 + yyv24580 := yyv4580 + yyrl4580, yyrt4580 = z.DecInferLen(yyl4580, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4580 { + if yyrl4580 <= cap(yyv4580) { + yyv4580 = yyv4580[:yyrl4580] + } else { + yyv4580 = make([]EnvVar, yyrl4580) + } + } else { + yyv4580 = make([]EnvVar, yyrl4580) + } + yyc4580 = true + yyrr4580 = len(yyv4580) + if yyrg4580 { + copy(yyv4580, yyv24580) + } + } else if yyl4580 != len(yyv4580) { + yyv4580 = yyv4580[:yyl4580] + yyc4580 = true + } + yyj4580 := 0 + for ; yyj4580 < yyrr4580; yyj4580++ { + yyh4580.ElemContainerState(yyj4580) + if r.TryDecodeAsNil() { + yyv4580[yyj4580] = EnvVar{} + } else { + yyv4581 := &yyv4580[yyj4580] + yyv4581.CodecDecodeSelf(d) + } + + } + if yyrt4580 { + for ; yyj4580 < yyl4580; yyj4580++ { + yyv4580 = append(yyv4580, EnvVar{}) + yyh4580.ElemContainerState(yyj4580) + if r.TryDecodeAsNil() { + yyv4580[yyj4580] = EnvVar{} + } else { + yyv4582 := &yyv4580[yyj4580] + yyv4582.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4580 := 0 + for ; !r.CheckBreak(); yyj4580++ { + + if yyj4580 >= len(yyv4580) { + yyv4580 = append(yyv4580, EnvVar{}) // var yyz4580 EnvVar + yyc4580 = true + } + yyh4580.ElemContainerState(yyj4580) + if yyj4580 < len(yyv4580) { + if r.TryDecodeAsNil() { + yyv4580[yyj4580] = EnvVar{} + } else { + yyv4583 := &yyv4580[yyj4580] + yyv4583.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4580 < len(yyv4580) { + yyv4580 = yyv4580[:yyj4580] + yyc4580 = true + } else if yyj4580 == 0 && yyv4580 == nil { + yyv4580 = []EnvVar{} + yyc4580 = true + } + } + yyh4580.End() + if yyc4580 { + *v = yyv4580 + } +} + +func (x codecSelfer1234) encSliceVolumeMount(v []VolumeMount, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4584 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4585 := &yyv4584 + yy4585.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceVolumeMount(v *[]VolumeMount, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4586 := *v + yyh4586, yyl4586 := z.DecSliceHelperStart() + var yyc4586 bool + if yyl4586 == 0 { + if yyv4586 == nil { + yyv4586 = []VolumeMount{} + yyc4586 = true + } else if len(yyv4586) != 0 { + yyv4586 = yyv4586[:0] + yyc4586 = true + } + } else if yyl4586 > 0 { + var yyrr4586, yyrl4586 int + var yyrt4586 bool + if yyl4586 > cap(yyv4586) { + + yyrg4586 := len(yyv4586) > 0 + yyv24586 := yyv4586 + yyrl4586, yyrt4586 = z.DecInferLen(yyl4586, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4586 { + if yyrl4586 <= cap(yyv4586) { + yyv4586 = yyv4586[:yyrl4586] + } else { + yyv4586 = make([]VolumeMount, yyrl4586) + } + } else { + yyv4586 = make([]VolumeMount, yyrl4586) + } + yyc4586 = true + yyrr4586 = len(yyv4586) + if yyrg4586 { + copy(yyv4586, yyv24586) + } + } else if yyl4586 != len(yyv4586) { + yyv4586 = yyv4586[:yyl4586] + yyc4586 = true + } + yyj4586 := 0 + for ; yyj4586 < yyrr4586; yyj4586++ { + yyh4586.ElemContainerState(yyj4586) + if r.TryDecodeAsNil() { + yyv4586[yyj4586] = VolumeMount{} + } else { + yyv4587 := &yyv4586[yyj4586] + yyv4587.CodecDecodeSelf(d) + } + + } + if yyrt4586 { + for ; yyj4586 < yyl4586; yyj4586++ { + yyv4586 = append(yyv4586, VolumeMount{}) + yyh4586.ElemContainerState(yyj4586) + if r.TryDecodeAsNil() { + yyv4586[yyj4586] = VolumeMount{} + } else { + yyv4588 := &yyv4586[yyj4586] + yyv4588.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4586 := 0 + for ; !r.CheckBreak(); yyj4586++ { + + if yyj4586 >= len(yyv4586) { + yyv4586 = append(yyv4586, VolumeMount{}) // var yyz4586 VolumeMount + yyc4586 = true + } + yyh4586.ElemContainerState(yyj4586) + if yyj4586 < len(yyv4586) { + if r.TryDecodeAsNil() { + yyv4586[yyj4586] = VolumeMount{} + } else { + yyv4589 := &yyv4586[yyj4586] + yyv4589.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4586 < len(yyv4586) { + yyv4586 = yyv4586[:yyj4586] + yyc4586 = true + } else if yyj4586 == 0 && yyv4586 == nil { + yyv4586 = []VolumeMount{} + yyc4586 = true + } + } + yyh4586.End() + if yyc4586 { + *v = yyv4586 + } +} + +func (x codecSelfer1234) encSlicePod(v []Pod, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4590 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4591 := &yyv4590 + yy4591.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePod(v *[]Pod, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4592 := *v + yyh4592, yyl4592 := z.DecSliceHelperStart() + var yyc4592 bool + if yyl4592 == 0 { + if yyv4592 == nil { + yyv4592 = []Pod{} + yyc4592 = true + } else if len(yyv4592) != 0 { + yyv4592 = yyv4592[:0] + yyc4592 = true + } + } else if yyl4592 > 0 { + var yyrr4592, yyrl4592 int + var yyrt4592 bool + if yyl4592 > cap(yyv4592) { + + yyrg4592 := len(yyv4592) > 0 + yyv24592 := yyv4592 + yyrl4592, yyrt4592 = z.DecInferLen(yyl4592, z.DecBasicHandle().MaxInitLen, 640) + if yyrt4592 { + if yyrl4592 <= cap(yyv4592) { + yyv4592 = yyv4592[:yyrl4592] + } else { + yyv4592 = make([]Pod, yyrl4592) + } + } else { + yyv4592 = make([]Pod, yyrl4592) + } + yyc4592 = true + yyrr4592 = len(yyv4592) + if yyrg4592 { + copy(yyv4592, yyv24592) + } + } else if yyl4592 != len(yyv4592) { + yyv4592 = yyv4592[:yyl4592] + yyc4592 = true + } + yyj4592 := 0 + for ; yyj4592 < yyrr4592; yyj4592++ { + yyh4592.ElemContainerState(yyj4592) + if r.TryDecodeAsNil() { + yyv4592[yyj4592] = Pod{} + } else { + yyv4593 := &yyv4592[yyj4592] + yyv4593.CodecDecodeSelf(d) + } + + } + if yyrt4592 { + for ; yyj4592 < yyl4592; yyj4592++ { + yyv4592 = append(yyv4592, Pod{}) + yyh4592.ElemContainerState(yyj4592) + if r.TryDecodeAsNil() { + yyv4592[yyj4592] = Pod{} + } else { + yyv4594 := &yyv4592[yyj4592] + yyv4594.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4592 := 0 + for ; !r.CheckBreak(); yyj4592++ { + + if yyj4592 >= len(yyv4592) { + yyv4592 = append(yyv4592, Pod{}) // var yyz4592 Pod + yyc4592 = true + } + yyh4592.ElemContainerState(yyj4592) + if yyj4592 < len(yyv4592) { + if r.TryDecodeAsNil() { + yyv4592[yyj4592] = Pod{} + } else { + yyv4595 := &yyv4592[yyj4592] + yyv4595.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4592 < len(yyv4592) { + yyv4592 = yyv4592[:yyj4592] + yyc4592 = true + } else if yyj4592 == 0 && yyv4592 == nil { + yyv4592 = []Pod{} + yyc4592 = true + } + } + yyh4592.End() + if yyc4592 { + *v = yyv4592 + } +} + +func (x codecSelfer1234) encSliceNodeSelectorTerm(v []NodeSelectorTerm, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4596 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4597 := &yyv4596 + yy4597.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNodeSelectorTerm(v *[]NodeSelectorTerm, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4598 := *v + yyh4598, yyl4598 := z.DecSliceHelperStart() + var yyc4598 bool + if yyl4598 == 0 { + if yyv4598 == nil { + yyv4598 = []NodeSelectorTerm{} + yyc4598 = true + } else if len(yyv4598) != 0 { + yyv4598 = yyv4598[:0] + yyc4598 = true + } + } else if yyl4598 > 0 { + var yyrr4598, yyrl4598 int + var yyrt4598 bool + if yyl4598 > cap(yyv4598) { + + yyrg4598 := len(yyv4598) > 0 + yyv24598 := yyv4598 + yyrl4598, yyrt4598 = z.DecInferLen(yyl4598, z.DecBasicHandle().MaxInitLen, 24) + if yyrt4598 { + if yyrl4598 <= cap(yyv4598) { + yyv4598 = yyv4598[:yyrl4598] + } else { + yyv4598 = make([]NodeSelectorTerm, yyrl4598) + } + } else { + yyv4598 = make([]NodeSelectorTerm, yyrl4598) + } + yyc4598 = true + yyrr4598 = len(yyv4598) + if yyrg4598 { + copy(yyv4598, yyv24598) + } + } else if yyl4598 != len(yyv4598) { + yyv4598 = yyv4598[:yyl4598] + yyc4598 = true + } + yyj4598 := 0 + for ; yyj4598 < yyrr4598; yyj4598++ { + yyh4598.ElemContainerState(yyj4598) + if r.TryDecodeAsNil() { + yyv4598[yyj4598] = NodeSelectorTerm{} + } else { + yyv4599 := &yyv4598[yyj4598] + yyv4599.CodecDecodeSelf(d) + } + + } + if yyrt4598 { + for ; yyj4598 < yyl4598; yyj4598++ { + yyv4598 = append(yyv4598, NodeSelectorTerm{}) + yyh4598.ElemContainerState(yyj4598) + if r.TryDecodeAsNil() { + yyv4598[yyj4598] = NodeSelectorTerm{} + } else { + yyv4600 := &yyv4598[yyj4598] + yyv4600.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4598 := 0 + for ; !r.CheckBreak(); yyj4598++ { + + if yyj4598 >= len(yyv4598) { + yyv4598 = append(yyv4598, NodeSelectorTerm{}) // var yyz4598 NodeSelectorTerm + yyc4598 = true + } + yyh4598.ElemContainerState(yyj4598) + if yyj4598 < len(yyv4598) { + if r.TryDecodeAsNil() { + yyv4598[yyj4598] = NodeSelectorTerm{} + } else { + yyv4601 := &yyv4598[yyj4598] + yyv4601.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4598 < len(yyv4598) { + yyv4598 = yyv4598[:yyj4598] + yyc4598 = true + } else if yyj4598 == 0 && yyv4598 == nil { + yyv4598 = []NodeSelectorTerm{} + yyc4598 = true + } + } + yyh4598.End() + if yyc4598 { + *v = yyv4598 + } +} + +func (x codecSelfer1234) encSliceNodeSelectorRequirement(v []NodeSelectorRequirement, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4602 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4603 := &yyv4602 + yy4603.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNodeSelectorRequirement(v *[]NodeSelectorRequirement, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4604 := *v + yyh4604, yyl4604 := z.DecSliceHelperStart() + var yyc4604 bool + if yyl4604 == 0 { + if yyv4604 == nil { + yyv4604 = []NodeSelectorRequirement{} + yyc4604 = true + } else if len(yyv4604) != 0 { + yyv4604 = yyv4604[:0] + yyc4604 = true + } + } else if yyl4604 > 0 { + var yyrr4604, yyrl4604 int + var yyrt4604 bool + if yyl4604 > cap(yyv4604) { + + yyrg4604 := len(yyv4604) > 0 + yyv24604 := yyv4604 + yyrl4604, yyrt4604 = z.DecInferLen(yyl4604, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4604 { + if yyrl4604 <= cap(yyv4604) { + yyv4604 = yyv4604[:yyrl4604] + } else { + yyv4604 = make([]NodeSelectorRequirement, yyrl4604) + } + } else { + yyv4604 = make([]NodeSelectorRequirement, yyrl4604) + } + yyc4604 = true + yyrr4604 = len(yyv4604) + if yyrg4604 { + copy(yyv4604, yyv24604) + } + } else if yyl4604 != len(yyv4604) { + yyv4604 = yyv4604[:yyl4604] + yyc4604 = true + } + yyj4604 := 0 + for ; yyj4604 < yyrr4604; yyj4604++ { + yyh4604.ElemContainerState(yyj4604) + if r.TryDecodeAsNil() { + yyv4604[yyj4604] = NodeSelectorRequirement{} + } else { + yyv4605 := &yyv4604[yyj4604] + yyv4605.CodecDecodeSelf(d) + } + + } + if yyrt4604 { + for ; yyj4604 < yyl4604; yyj4604++ { + yyv4604 = append(yyv4604, NodeSelectorRequirement{}) + yyh4604.ElemContainerState(yyj4604) + if r.TryDecodeAsNil() { + yyv4604[yyj4604] = NodeSelectorRequirement{} + } else { + yyv4606 := &yyv4604[yyj4604] + yyv4606.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4604 := 0 + for ; !r.CheckBreak(); yyj4604++ { + + if yyj4604 >= len(yyv4604) { + yyv4604 = append(yyv4604, NodeSelectorRequirement{}) // var yyz4604 NodeSelectorRequirement + yyc4604 = true + } + yyh4604.ElemContainerState(yyj4604) + if yyj4604 < len(yyv4604) { + if r.TryDecodeAsNil() { + yyv4604[yyj4604] = NodeSelectorRequirement{} + } else { + yyv4607 := &yyv4604[yyj4604] + yyv4607.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4604 < len(yyv4604) { + yyv4604 = yyv4604[:yyj4604] + yyc4604 = true + } else if yyj4604 == 0 && yyv4604 == nil { + yyv4604 = []NodeSelectorRequirement{} + yyc4604 = true + } + } + yyh4604.End() + if yyc4604 { + *v = yyv4604 + } +} + +func (x codecSelfer1234) encSlicePodAffinityTerm(v []PodAffinityTerm, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4608 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4609 := &yyv4608 + yy4609.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePodAffinityTerm(v *[]PodAffinityTerm, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4610 := *v + yyh4610, yyl4610 := z.DecSliceHelperStart() + var yyc4610 bool + if yyl4610 == 0 { + if yyv4610 == nil { + yyv4610 = []PodAffinityTerm{} + yyc4610 = true + } else if len(yyv4610) != 0 { + yyv4610 = yyv4610[:0] + yyc4610 = true + } + } else if yyl4610 > 0 { + var yyrr4610, yyrl4610 int + var yyrt4610 bool + if yyl4610 > cap(yyv4610) { + + yyrg4610 := len(yyv4610) > 0 + yyv24610 := yyv4610 + yyrl4610, yyrt4610 = z.DecInferLen(yyl4610, z.DecBasicHandle().MaxInitLen, 48) + if yyrt4610 { + if yyrl4610 <= cap(yyv4610) { + yyv4610 = yyv4610[:yyrl4610] + } else { + yyv4610 = make([]PodAffinityTerm, yyrl4610) + } + } else { + yyv4610 = make([]PodAffinityTerm, yyrl4610) + } + yyc4610 = true + yyrr4610 = len(yyv4610) + if yyrg4610 { + copy(yyv4610, yyv24610) + } + } else if yyl4610 != len(yyv4610) { + yyv4610 = yyv4610[:yyl4610] + yyc4610 = true + } + yyj4610 := 0 + for ; yyj4610 < yyrr4610; yyj4610++ { + yyh4610.ElemContainerState(yyj4610) + if r.TryDecodeAsNil() { + yyv4610[yyj4610] = PodAffinityTerm{} + } else { + yyv4611 := &yyv4610[yyj4610] + yyv4611.CodecDecodeSelf(d) + } + + } + if yyrt4610 { + for ; yyj4610 < yyl4610; yyj4610++ { + yyv4610 = append(yyv4610, PodAffinityTerm{}) + yyh4610.ElemContainerState(yyj4610) + if r.TryDecodeAsNil() { + yyv4610[yyj4610] = PodAffinityTerm{} + } else { + yyv4612 := &yyv4610[yyj4610] + yyv4612.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4610 := 0 + for ; !r.CheckBreak(); yyj4610++ { + + if yyj4610 >= len(yyv4610) { + yyv4610 = append(yyv4610, PodAffinityTerm{}) // var yyz4610 PodAffinityTerm + yyc4610 = true + } + yyh4610.ElemContainerState(yyj4610) + if yyj4610 < len(yyv4610) { + if r.TryDecodeAsNil() { + yyv4610[yyj4610] = PodAffinityTerm{} + } else { + yyv4613 := &yyv4610[yyj4610] + yyv4613.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4610 < len(yyv4610) { + yyv4610 = yyv4610[:yyj4610] + yyc4610 = true + } else if yyj4610 == 0 && yyv4610 == nil { + yyv4610 = []PodAffinityTerm{} + yyc4610 = true + } + } + yyh4610.End() + if yyc4610 { + *v = yyv4610 + } +} + +func (x codecSelfer1234) encSliceWeightedPodAffinityTerm(v []WeightedPodAffinityTerm, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4614 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4615 := &yyv4614 + yy4615.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceWeightedPodAffinityTerm(v *[]WeightedPodAffinityTerm, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4616 := *v + yyh4616, yyl4616 := z.DecSliceHelperStart() + var yyc4616 bool + if yyl4616 == 0 { + if yyv4616 == nil { + yyv4616 = []WeightedPodAffinityTerm{} + yyc4616 = true + } else if len(yyv4616) != 0 { + yyv4616 = yyv4616[:0] + yyc4616 = true + } + } else if yyl4616 > 0 { + var yyrr4616, yyrl4616 int + var yyrt4616 bool + if yyl4616 > cap(yyv4616) { + + yyrg4616 := len(yyv4616) > 0 + yyv24616 := yyv4616 + yyrl4616, yyrt4616 = z.DecInferLen(yyl4616, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4616 { + if yyrl4616 <= cap(yyv4616) { + yyv4616 = yyv4616[:yyrl4616] + } else { + yyv4616 = make([]WeightedPodAffinityTerm, yyrl4616) + } + } else { + yyv4616 = make([]WeightedPodAffinityTerm, yyrl4616) + } + yyc4616 = true + yyrr4616 = len(yyv4616) + if yyrg4616 { + copy(yyv4616, yyv24616) + } + } else if yyl4616 != len(yyv4616) { + yyv4616 = yyv4616[:yyl4616] + yyc4616 = true + } + yyj4616 := 0 + for ; yyj4616 < yyrr4616; yyj4616++ { + yyh4616.ElemContainerState(yyj4616) + if r.TryDecodeAsNil() { + yyv4616[yyj4616] = WeightedPodAffinityTerm{} + } else { + yyv4617 := &yyv4616[yyj4616] + yyv4617.CodecDecodeSelf(d) + } + + } + if yyrt4616 { + for ; yyj4616 < yyl4616; yyj4616++ { + yyv4616 = append(yyv4616, WeightedPodAffinityTerm{}) + yyh4616.ElemContainerState(yyj4616) + if r.TryDecodeAsNil() { + yyv4616[yyj4616] = WeightedPodAffinityTerm{} + } else { + yyv4618 := &yyv4616[yyj4616] + yyv4618.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4616 := 0 + for ; !r.CheckBreak(); yyj4616++ { + + if yyj4616 >= len(yyv4616) { + yyv4616 = append(yyv4616, WeightedPodAffinityTerm{}) // var yyz4616 WeightedPodAffinityTerm + yyc4616 = true + } + yyh4616.ElemContainerState(yyj4616) + if yyj4616 < len(yyv4616) { + if r.TryDecodeAsNil() { + yyv4616[yyj4616] = WeightedPodAffinityTerm{} + } else { + yyv4619 := &yyv4616[yyj4616] + yyv4619.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4616 < len(yyv4616) { + yyv4616 = yyv4616[:yyj4616] + yyc4616 = true + } else if yyj4616 == 0 && yyv4616 == nil { + yyv4616 = []WeightedPodAffinityTerm{} + yyc4616 = true + } + } + yyh4616.End() + if yyc4616 { + *v = yyv4616 + } +} + +func (x codecSelfer1234) encSlicePreferredSchedulingTerm(v []PreferredSchedulingTerm, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4620 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4621 := &yyv4620 + yy4621.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePreferredSchedulingTerm(v *[]PreferredSchedulingTerm, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4622 := *v + yyh4622, yyl4622 := z.DecSliceHelperStart() + var yyc4622 bool + if yyl4622 == 0 { + if yyv4622 == nil { + yyv4622 = []PreferredSchedulingTerm{} + yyc4622 = true + } else if len(yyv4622) != 0 { + yyv4622 = yyv4622[:0] + yyc4622 = true + } + } else if yyl4622 > 0 { + var yyrr4622, yyrl4622 int + var yyrt4622 bool + if yyl4622 > cap(yyv4622) { + + yyrg4622 := len(yyv4622) > 0 + yyv24622 := yyv4622 + yyrl4622, yyrt4622 = z.DecInferLen(yyl4622, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4622 { + if yyrl4622 <= cap(yyv4622) { + yyv4622 = yyv4622[:yyrl4622] + } else { + yyv4622 = make([]PreferredSchedulingTerm, yyrl4622) + } + } else { + yyv4622 = make([]PreferredSchedulingTerm, yyrl4622) + } + yyc4622 = true + yyrr4622 = len(yyv4622) + if yyrg4622 { + copy(yyv4622, yyv24622) + } + } else if yyl4622 != len(yyv4622) { + yyv4622 = yyv4622[:yyl4622] + yyc4622 = true + } + yyj4622 := 0 + for ; yyj4622 < yyrr4622; yyj4622++ { + yyh4622.ElemContainerState(yyj4622) + if r.TryDecodeAsNil() { + yyv4622[yyj4622] = PreferredSchedulingTerm{} + } else { + yyv4623 := &yyv4622[yyj4622] + yyv4623.CodecDecodeSelf(d) + } + + } + if yyrt4622 { + for ; yyj4622 < yyl4622; yyj4622++ { + yyv4622 = append(yyv4622, PreferredSchedulingTerm{}) + yyh4622.ElemContainerState(yyj4622) + if r.TryDecodeAsNil() { + yyv4622[yyj4622] = PreferredSchedulingTerm{} + } else { + yyv4624 := &yyv4622[yyj4622] + yyv4624.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4622 := 0 + for ; !r.CheckBreak(); yyj4622++ { + + if yyj4622 >= len(yyv4622) { + yyv4622 = append(yyv4622, PreferredSchedulingTerm{}) // var yyz4622 PreferredSchedulingTerm + yyc4622 = true + } + yyh4622.ElemContainerState(yyj4622) + if yyj4622 < len(yyv4622) { + if r.TryDecodeAsNil() { + yyv4622[yyj4622] = PreferredSchedulingTerm{} + } else { + yyv4625 := &yyv4622[yyj4622] + yyv4625.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4622 < len(yyv4622) { + yyv4622 = yyv4622[:yyj4622] + yyc4622 = true + } else if yyj4622 == 0 && yyv4622 == nil { + yyv4622 = []PreferredSchedulingTerm{} + yyc4622 = true + } + } + yyh4622.End() + if yyc4622 { + *v = yyv4622 + } +} + +func (x codecSelfer1234) encSliceVolume(v []Volume, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4626 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4627 := &yyv4626 + yy4627.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceVolume(v *[]Volume, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4628 := *v + yyh4628, yyl4628 := z.DecSliceHelperStart() + var yyc4628 bool + if yyl4628 == 0 { + if yyv4628 == nil { + yyv4628 = []Volume{} + yyc4628 = true + } else if len(yyv4628) != 0 { + yyv4628 = yyv4628[:0] + yyc4628 = true + } + } else if yyl4628 > 0 { + var yyrr4628, yyrl4628 int + var yyrt4628 bool + if yyl4628 > cap(yyv4628) { + + yyrg4628 := len(yyv4628) > 0 + yyv24628 := yyv4628 + yyrl4628, yyrt4628 = z.DecInferLen(yyl4628, z.DecBasicHandle().MaxInitLen, 192) + if yyrt4628 { + if yyrl4628 <= cap(yyv4628) { + yyv4628 = yyv4628[:yyrl4628] + } else { + yyv4628 = make([]Volume, yyrl4628) + } + } else { + yyv4628 = make([]Volume, yyrl4628) + } + yyc4628 = true + yyrr4628 = len(yyv4628) + if yyrg4628 { + copy(yyv4628, yyv24628) + } + } else if yyl4628 != len(yyv4628) { + yyv4628 = yyv4628[:yyl4628] + yyc4628 = true + } + yyj4628 := 0 + for ; yyj4628 < yyrr4628; yyj4628++ { + yyh4628.ElemContainerState(yyj4628) + if r.TryDecodeAsNil() { + yyv4628[yyj4628] = Volume{} + } else { + yyv4629 := &yyv4628[yyj4628] + yyv4629.CodecDecodeSelf(d) + } + + } + if yyrt4628 { + for ; yyj4628 < yyl4628; yyj4628++ { + yyv4628 = append(yyv4628, Volume{}) + yyh4628.ElemContainerState(yyj4628) + if r.TryDecodeAsNil() { + yyv4628[yyj4628] = Volume{} + } else { + yyv4630 := &yyv4628[yyj4628] + yyv4630.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4628 := 0 + for ; !r.CheckBreak(); yyj4628++ { + + if yyj4628 >= len(yyv4628) { + yyv4628 = append(yyv4628, Volume{}) // var yyz4628 Volume + yyc4628 = true + } + yyh4628.ElemContainerState(yyj4628) + if yyj4628 < len(yyv4628) { + if r.TryDecodeAsNil() { + yyv4628[yyj4628] = Volume{} + } else { + yyv4631 := &yyv4628[yyj4628] + yyv4631.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4628 < len(yyv4628) { + yyv4628 = yyv4628[:yyj4628] + yyc4628 = true + } else if yyj4628 == 0 && yyv4628 == nil { + yyv4628 = []Volume{} + yyc4628 = true + } + } + yyh4628.End() + if yyc4628 { + *v = yyv4628 + } +} + +func (x codecSelfer1234) encSliceContainer(v []Container, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4632 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4633 := &yyv4632 + yy4633.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceContainer(v *[]Container, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4634 := *v + yyh4634, yyl4634 := z.DecSliceHelperStart() + var yyc4634 bool + if yyl4634 == 0 { + if yyv4634 == nil { + yyv4634 = []Container{} + yyc4634 = true + } else if len(yyv4634) != 0 { + yyv4634 = yyv4634[:0] + yyc4634 = true + } + } else if yyl4634 > 0 { + var yyrr4634, yyrl4634 int + var yyrt4634 bool + if yyl4634 > cap(yyv4634) { + + yyrg4634 := len(yyv4634) > 0 + yyv24634 := yyv4634 + yyrl4634, yyrt4634 = z.DecInferLen(yyl4634, z.DecBasicHandle().MaxInitLen, 256) + if yyrt4634 { + if yyrl4634 <= cap(yyv4634) { + yyv4634 = yyv4634[:yyrl4634] + } else { + yyv4634 = make([]Container, yyrl4634) + } + } else { + yyv4634 = make([]Container, yyrl4634) + } + yyc4634 = true + yyrr4634 = len(yyv4634) + if yyrg4634 { + copy(yyv4634, yyv24634) + } + } else if yyl4634 != len(yyv4634) { + yyv4634 = yyv4634[:yyl4634] + yyc4634 = true + } + yyj4634 := 0 + for ; yyj4634 < yyrr4634; yyj4634++ { + yyh4634.ElemContainerState(yyj4634) + if r.TryDecodeAsNil() { + yyv4634[yyj4634] = Container{} + } else { + yyv4635 := &yyv4634[yyj4634] + yyv4635.CodecDecodeSelf(d) + } + + } + if yyrt4634 { + for ; yyj4634 < yyl4634; yyj4634++ { + yyv4634 = append(yyv4634, Container{}) + yyh4634.ElemContainerState(yyj4634) + if r.TryDecodeAsNil() { + yyv4634[yyj4634] = Container{} + } else { + yyv4636 := &yyv4634[yyj4634] + yyv4636.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4634 := 0 + for ; !r.CheckBreak(); yyj4634++ { + + if yyj4634 >= len(yyv4634) { + yyv4634 = append(yyv4634, Container{}) // var yyz4634 Container + yyc4634 = true + } + yyh4634.ElemContainerState(yyj4634) + if yyj4634 < len(yyv4634) { + if r.TryDecodeAsNil() { + yyv4634[yyj4634] = Container{} + } else { + yyv4637 := &yyv4634[yyj4634] + yyv4637.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4634 < len(yyv4634) { + yyv4634 = yyv4634[:yyj4634] + yyc4634 = true + } else if yyj4634 == 0 && yyv4634 == nil { + yyv4634 = []Container{} + yyc4634 = true + } + } + yyh4634.End() + if yyc4634 { + *v = yyv4634 + } +} + +func (x codecSelfer1234) encSliceLocalObjectReference(v []LocalObjectReference, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4638 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4639 := &yyv4638 + yy4639.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceLocalObjectReference(v *[]LocalObjectReference, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4640 := *v + yyh4640, yyl4640 := z.DecSliceHelperStart() + var yyc4640 bool + if yyl4640 == 0 { + if yyv4640 == nil { + yyv4640 = []LocalObjectReference{} + yyc4640 = true + } else if len(yyv4640) != 0 { + yyv4640 = yyv4640[:0] + yyc4640 = true + } + } else if yyl4640 > 0 { + var yyrr4640, yyrl4640 int + var yyrt4640 bool + if yyl4640 > cap(yyv4640) { + + yyrg4640 := len(yyv4640) > 0 + yyv24640 := yyv4640 + yyrl4640, yyrt4640 = z.DecInferLen(yyl4640, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4640 { + if yyrl4640 <= cap(yyv4640) { + yyv4640 = yyv4640[:yyrl4640] + } else { + yyv4640 = make([]LocalObjectReference, yyrl4640) + } + } else { + yyv4640 = make([]LocalObjectReference, yyrl4640) + } + yyc4640 = true + yyrr4640 = len(yyv4640) + if yyrg4640 { + copy(yyv4640, yyv24640) + } + } else if yyl4640 != len(yyv4640) { + yyv4640 = yyv4640[:yyl4640] + yyc4640 = true + } + yyj4640 := 0 + for ; yyj4640 < yyrr4640; yyj4640++ { + yyh4640.ElemContainerState(yyj4640) + if r.TryDecodeAsNil() { + yyv4640[yyj4640] = LocalObjectReference{} + } else { + yyv4641 := &yyv4640[yyj4640] + yyv4641.CodecDecodeSelf(d) + } + + } + if yyrt4640 { + for ; yyj4640 < yyl4640; yyj4640++ { + yyv4640 = append(yyv4640, LocalObjectReference{}) + yyh4640.ElemContainerState(yyj4640) + if r.TryDecodeAsNil() { + yyv4640[yyj4640] = LocalObjectReference{} + } else { + yyv4642 := &yyv4640[yyj4640] + yyv4642.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4640 := 0 + for ; !r.CheckBreak(); yyj4640++ { + + if yyj4640 >= len(yyv4640) { + yyv4640 = append(yyv4640, LocalObjectReference{}) // var yyz4640 LocalObjectReference + yyc4640 = true + } + yyh4640.ElemContainerState(yyj4640) + if yyj4640 < len(yyv4640) { + if r.TryDecodeAsNil() { + yyv4640[yyj4640] = LocalObjectReference{} + } else { + yyv4643 := &yyv4640[yyj4640] + yyv4643.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4640 < len(yyv4640) { + yyv4640 = yyv4640[:yyj4640] + yyc4640 = true + } else if yyj4640 == 0 && yyv4640 == nil { + yyv4640 = []LocalObjectReference{} + yyc4640 = true + } + } + yyh4640.End() + if yyc4640 { + *v = yyv4640 + } +} + +func (x codecSelfer1234) encSlicePodCondition(v []PodCondition, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4644 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4645 := &yyv4644 + yy4645.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePodCondition(v *[]PodCondition, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4646 := *v + yyh4646, yyl4646 := z.DecSliceHelperStart() + var yyc4646 bool + if yyl4646 == 0 { + if yyv4646 == nil { + yyv4646 = []PodCondition{} + yyc4646 = true + } else if len(yyv4646) != 0 { + yyv4646 = yyv4646[:0] + yyc4646 = true + } + } else if yyl4646 > 0 { + var yyrr4646, yyrl4646 int + var yyrt4646 bool + if yyl4646 > cap(yyv4646) { + + yyrg4646 := len(yyv4646) > 0 + yyv24646 := yyv4646 + yyrl4646, yyrt4646 = z.DecInferLen(yyl4646, z.DecBasicHandle().MaxInitLen, 112) + if yyrt4646 { + if yyrl4646 <= cap(yyv4646) { + yyv4646 = yyv4646[:yyrl4646] + } else { + yyv4646 = make([]PodCondition, yyrl4646) + } + } else { + yyv4646 = make([]PodCondition, yyrl4646) + } + yyc4646 = true + yyrr4646 = len(yyv4646) + if yyrg4646 { + copy(yyv4646, yyv24646) + } + } else if yyl4646 != len(yyv4646) { + yyv4646 = yyv4646[:yyl4646] + yyc4646 = true + } + yyj4646 := 0 + for ; yyj4646 < yyrr4646; yyj4646++ { + yyh4646.ElemContainerState(yyj4646) + if r.TryDecodeAsNil() { + yyv4646[yyj4646] = PodCondition{} + } else { + yyv4647 := &yyv4646[yyj4646] + yyv4647.CodecDecodeSelf(d) + } + + } + if yyrt4646 { + for ; yyj4646 < yyl4646; yyj4646++ { + yyv4646 = append(yyv4646, PodCondition{}) + yyh4646.ElemContainerState(yyj4646) + if r.TryDecodeAsNil() { + yyv4646[yyj4646] = PodCondition{} + } else { + yyv4648 := &yyv4646[yyj4646] + yyv4648.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4646 := 0 + for ; !r.CheckBreak(); yyj4646++ { + + if yyj4646 >= len(yyv4646) { + yyv4646 = append(yyv4646, PodCondition{}) // var yyz4646 PodCondition + yyc4646 = true + } + yyh4646.ElemContainerState(yyj4646) + if yyj4646 < len(yyv4646) { + if r.TryDecodeAsNil() { + yyv4646[yyj4646] = PodCondition{} + } else { + yyv4649 := &yyv4646[yyj4646] + yyv4649.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4646 < len(yyv4646) { + yyv4646 = yyv4646[:yyj4646] + yyc4646 = true + } else if yyj4646 == 0 && yyv4646 == nil { + yyv4646 = []PodCondition{} + yyc4646 = true + } + } + yyh4646.End() + if yyc4646 { + *v = yyv4646 + } +} + +func (x codecSelfer1234) encSliceContainerStatus(v []ContainerStatus, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4650 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4651 := &yyv4650 + yy4651.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceContainerStatus(v *[]ContainerStatus, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4652 := *v + yyh4652, yyl4652 := z.DecSliceHelperStart() + var yyc4652 bool + if yyl4652 == 0 { + if yyv4652 == nil { + yyv4652 = []ContainerStatus{} + yyc4652 = true + } else if len(yyv4652) != 0 { + yyv4652 = yyv4652[:0] + yyc4652 = true + } + } else if yyl4652 > 0 { + var yyrr4652, yyrl4652 int + var yyrt4652 bool + if yyl4652 > cap(yyv4652) { + + yyrg4652 := len(yyv4652) > 0 + yyv24652 := yyv4652 + yyrl4652, yyrt4652 = z.DecInferLen(yyl4652, z.DecBasicHandle().MaxInitLen, 120) + if yyrt4652 { + if yyrl4652 <= cap(yyv4652) { + yyv4652 = yyv4652[:yyrl4652] + } else { + yyv4652 = make([]ContainerStatus, yyrl4652) + } + } else { + yyv4652 = make([]ContainerStatus, yyrl4652) + } + yyc4652 = true + yyrr4652 = len(yyv4652) + if yyrg4652 { + copy(yyv4652, yyv24652) + } + } else if yyl4652 != len(yyv4652) { + yyv4652 = yyv4652[:yyl4652] + yyc4652 = true + } + yyj4652 := 0 + for ; yyj4652 < yyrr4652; yyj4652++ { + yyh4652.ElemContainerState(yyj4652) + if r.TryDecodeAsNil() { + yyv4652[yyj4652] = ContainerStatus{} + } else { + yyv4653 := &yyv4652[yyj4652] + yyv4653.CodecDecodeSelf(d) + } + + } + if yyrt4652 { + for ; yyj4652 < yyl4652; yyj4652++ { + yyv4652 = append(yyv4652, ContainerStatus{}) + yyh4652.ElemContainerState(yyj4652) + if r.TryDecodeAsNil() { + yyv4652[yyj4652] = ContainerStatus{} + } else { + yyv4654 := &yyv4652[yyj4652] + yyv4654.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4652 := 0 + for ; !r.CheckBreak(); yyj4652++ { + + if yyj4652 >= len(yyv4652) { + yyv4652 = append(yyv4652, ContainerStatus{}) // var yyz4652 ContainerStatus + yyc4652 = true + } + yyh4652.ElemContainerState(yyj4652) + if yyj4652 < len(yyv4652) { + if r.TryDecodeAsNil() { + yyv4652[yyj4652] = ContainerStatus{} + } else { + yyv4655 := &yyv4652[yyj4652] + yyv4655.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4652 < len(yyv4652) { + yyv4652 = yyv4652[:yyj4652] + yyc4652 = true + } else if yyj4652 == 0 && yyv4652 == nil { + yyv4652 = []ContainerStatus{} + yyc4652 = true + } + } + yyh4652.End() + if yyc4652 { + *v = yyv4652 + } +} + +func (x codecSelfer1234) encSlicePodTemplate(v []PodTemplate, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4656 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4657 := &yyv4656 + yy4657.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePodTemplate(v *[]PodTemplate, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4658 := *v + yyh4658, yyl4658 := z.DecSliceHelperStart() + var yyc4658 bool + if yyl4658 == 0 { + if yyv4658 == nil { + yyv4658 = []PodTemplate{} + yyc4658 = true + } else if len(yyv4658) != 0 { + yyv4658 = yyv4658[:0] + yyc4658 = true + } + } else if yyl4658 > 0 { + var yyrr4658, yyrl4658 int + var yyrt4658 bool + if yyl4658 > cap(yyv4658) { + + yyrg4658 := len(yyv4658) > 0 + yyv24658 := yyv4658 + yyrl4658, yyrt4658 = z.DecInferLen(yyl4658, z.DecBasicHandle().MaxInitLen, 704) + if yyrt4658 { + if yyrl4658 <= cap(yyv4658) { + yyv4658 = yyv4658[:yyrl4658] + } else { + yyv4658 = make([]PodTemplate, yyrl4658) + } + } else { + yyv4658 = make([]PodTemplate, yyrl4658) + } + yyc4658 = true + yyrr4658 = len(yyv4658) + if yyrg4658 { + copy(yyv4658, yyv24658) + } + } else if yyl4658 != len(yyv4658) { + yyv4658 = yyv4658[:yyl4658] + yyc4658 = true + } + yyj4658 := 0 + for ; yyj4658 < yyrr4658; yyj4658++ { + yyh4658.ElemContainerState(yyj4658) + if r.TryDecodeAsNil() { + yyv4658[yyj4658] = PodTemplate{} + } else { + yyv4659 := &yyv4658[yyj4658] + yyv4659.CodecDecodeSelf(d) + } + + } + if yyrt4658 { + for ; yyj4658 < yyl4658; yyj4658++ { + yyv4658 = append(yyv4658, PodTemplate{}) + yyh4658.ElemContainerState(yyj4658) + if r.TryDecodeAsNil() { + yyv4658[yyj4658] = PodTemplate{} + } else { + yyv4660 := &yyv4658[yyj4658] + yyv4660.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4658 := 0 + for ; !r.CheckBreak(); yyj4658++ { + + if yyj4658 >= len(yyv4658) { + yyv4658 = append(yyv4658, PodTemplate{}) // var yyz4658 PodTemplate + yyc4658 = true + } + yyh4658.ElemContainerState(yyj4658) + if yyj4658 < len(yyv4658) { + if r.TryDecodeAsNil() { + yyv4658[yyj4658] = PodTemplate{} + } else { + yyv4661 := &yyv4658[yyj4658] + yyv4661.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4658 < len(yyv4658) { + yyv4658 = yyv4658[:yyj4658] + yyc4658 = true + } else if yyj4658 == 0 && yyv4658 == nil { + yyv4658 = []PodTemplate{} + yyc4658 = true + } + } + yyh4658.End() + if yyc4658 { + *v = yyv4658 + } +} + +func (x codecSelfer1234) encSliceReplicationController(v []ReplicationController, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4662 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4663 := &yyv4662 + yy4663.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceReplicationController(v *[]ReplicationController, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4664 := *v + yyh4664, yyl4664 := z.DecSliceHelperStart() + var yyc4664 bool + if yyl4664 == 0 { + if yyv4664 == nil { + yyv4664 = []ReplicationController{} + yyc4664 = true + } else if len(yyv4664) != 0 { + yyv4664 = yyv4664[:0] + yyc4664 = true + } + } else if yyl4664 > 0 { + var yyrr4664, yyrl4664 int + var yyrt4664 bool + if yyl4664 > cap(yyv4664) { + + yyrg4664 := len(yyv4664) > 0 + yyv24664 := yyv4664 + yyrl4664, yyrt4664 = z.DecInferLen(yyl4664, z.DecBasicHandle().MaxInitLen, 304) + if yyrt4664 { + if yyrl4664 <= cap(yyv4664) { + yyv4664 = yyv4664[:yyrl4664] + } else { + yyv4664 = make([]ReplicationController, yyrl4664) + } + } else { + yyv4664 = make([]ReplicationController, yyrl4664) + } + yyc4664 = true + yyrr4664 = len(yyv4664) + if yyrg4664 { + copy(yyv4664, yyv24664) + } + } else if yyl4664 != len(yyv4664) { + yyv4664 = yyv4664[:yyl4664] + yyc4664 = true + } + yyj4664 := 0 + for ; yyj4664 < yyrr4664; yyj4664++ { + yyh4664.ElemContainerState(yyj4664) + if r.TryDecodeAsNil() { + yyv4664[yyj4664] = ReplicationController{} + } else { + yyv4665 := &yyv4664[yyj4664] + yyv4665.CodecDecodeSelf(d) + } + + } + if yyrt4664 { + for ; yyj4664 < yyl4664; yyj4664++ { + yyv4664 = append(yyv4664, ReplicationController{}) + yyh4664.ElemContainerState(yyj4664) + if r.TryDecodeAsNil() { + yyv4664[yyj4664] = ReplicationController{} + } else { + yyv4666 := &yyv4664[yyj4664] + yyv4666.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4664 := 0 + for ; !r.CheckBreak(); yyj4664++ { + + if yyj4664 >= len(yyv4664) { + yyv4664 = append(yyv4664, ReplicationController{}) // var yyz4664 ReplicationController + yyc4664 = true + } + yyh4664.ElemContainerState(yyj4664) + if yyj4664 < len(yyv4664) { + if r.TryDecodeAsNil() { + yyv4664[yyj4664] = ReplicationController{} + } else { + yyv4667 := &yyv4664[yyj4664] + yyv4667.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4664 < len(yyv4664) { + yyv4664 = yyv4664[:yyj4664] + yyc4664 = true + } else if yyj4664 == 0 && yyv4664 == nil { + yyv4664 = []ReplicationController{} + yyc4664 = true + } + } + yyh4664.End() + if yyc4664 { + *v = yyv4664 + } +} + +func (x codecSelfer1234) encSliceService(v []Service, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4668 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4669 := &yyv4668 + yy4669.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceService(v *[]Service, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4670 := *v + yyh4670, yyl4670 := z.DecSliceHelperStart() + var yyc4670 bool + if yyl4670 == 0 { + if yyv4670 == nil { + yyv4670 = []Service{} + yyc4670 = true + } else if len(yyv4670) != 0 { + yyv4670 = yyv4670[:0] + yyc4670 = true + } + } else if yyl4670 > 0 { + var yyrr4670, yyrl4670 int + var yyrt4670 bool + if yyl4670 > cap(yyv4670) { + + yyrg4670 := len(yyv4670) > 0 + yyv24670 := yyv4670 + yyrl4670, yyrt4670 = z.DecInferLen(yyl4670, z.DecBasicHandle().MaxInitLen, 440) + if yyrt4670 { + if yyrl4670 <= cap(yyv4670) { + yyv4670 = yyv4670[:yyrl4670] + } else { + yyv4670 = make([]Service, yyrl4670) + } + } else { + yyv4670 = make([]Service, yyrl4670) + } + yyc4670 = true + yyrr4670 = len(yyv4670) + if yyrg4670 { + copy(yyv4670, yyv24670) + } + } else if yyl4670 != len(yyv4670) { + yyv4670 = yyv4670[:yyl4670] + yyc4670 = true + } + yyj4670 := 0 + for ; yyj4670 < yyrr4670; yyj4670++ { + yyh4670.ElemContainerState(yyj4670) + if r.TryDecodeAsNil() { + yyv4670[yyj4670] = Service{} + } else { + yyv4671 := &yyv4670[yyj4670] + yyv4671.CodecDecodeSelf(d) + } + + } + if yyrt4670 { + for ; yyj4670 < yyl4670; yyj4670++ { + yyv4670 = append(yyv4670, Service{}) + yyh4670.ElemContainerState(yyj4670) + if r.TryDecodeAsNil() { + yyv4670[yyj4670] = Service{} + } else { + yyv4672 := &yyv4670[yyj4670] + yyv4672.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4670 := 0 + for ; !r.CheckBreak(); yyj4670++ { + + if yyj4670 >= len(yyv4670) { + yyv4670 = append(yyv4670, Service{}) // var yyz4670 Service + yyc4670 = true + } + yyh4670.ElemContainerState(yyj4670) + if yyj4670 < len(yyv4670) { + if r.TryDecodeAsNil() { + yyv4670[yyj4670] = Service{} + } else { + yyv4673 := &yyv4670[yyj4670] + yyv4673.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4670 < len(yyv4670) { + yyv4670 = yyv4670[:yyj4670] + yyc4670 = true + } else if yyj4670 == 0 && yyv4670 == nil { + yyv4670 = []Service{} + yyc4670 = true + } + } + yyh4670.End() + if yyc4670 { + *v = yyv4670 + } +} + +func (x codecSelfer1234) encSliceLoadBalancerIngress(v []LoadBalancerIngress, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4674 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4675 := &yyv4674 + yy4675.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceLoadBalancerIngress(v *[]LoadBalancerIngress, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4676 := *v + yyh4676, yyl4676 := z.DecSliceHelperStart() + var yyc4676 bool + if yyl4676 == 0 { + if yyv4676 == nil { + yyv4676 = []LoadBalancerIngress{} + yyc4676 = true + } else if len(yyv4676) != 0 { + yyv4676 = yyv4676[:0] + yyc4676 = true + } + } else if yyl4676 > 0 { + var yyrr4676, yyrl4676 int + var yyrt4676 bool + if yyl4676 > cap(yyv4676) { + + yyrg4676 := len(yyv4676) > 0 + yyv24676 := yyv4676 + yyrl4676, yyrt4676 = z.DecInferLen(yyl4676, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4676 { + if yyrl4676 <= cap(yyv4676) { + yyv4676 = yyv4676[:yyrl4676] + } else { + yyv4676 = make([]LoadBalancerIngress, yyrl4676) + } + } else { + yyv4676 = make([]LoadBalancerIngress, yyrl4676) + } + yyc4676 = true + yyrr4676 = len(yyv4676) + if yyrg4676 { + copy(yyv4676, yyv24676) + } + } else if yyl4676 != len(yyv4676) { + yyv4676 = yyv4676[:yyl4676] + yyc4676 = true + } + yyj4676 := 0 + for ; yyj4676 < yyrr4676; yyj4676++ { + yyh4676.ElemContainerState(yyj4676) + if r.TryDecodeAsNil() { + yyv4676[yyj4676] = LoadBalancerIngress{} + } else { + yyv4677 := &yyv4676[yyj4676] + yyv4677.CodecDecodeSelf(d) + } + + } + if yyrt4676 { + for ; yyj4676 < yyl4676; yyj4676++ { + yyv4676 = append(yyv4676, LoadBalancerIngress{}) + yyh4676.ElemContainerState(yyj4676) + if r.TryDecodeAsNil() { + yyv4676[yyj4676] = LoadBalancerIngress{} + } else { + yyv4678 := &yyv4676[yyj4676] + yyv4678.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4676 := 0 + for ; !r.CheckBreak(); yyj4676++ { + + if yyj4676 >= len(yyv4676) { + yyv4676 = append(yyv4676, LoadBalancerIngress{}) // var yyz4676 LoadBalancerIngress + yyc4676 = true + } + yyh4676.ElemContainerState(yyj4676) + if yyj4676 < len(yyv4676) { + if r.TryDecodeAsNil() { + yyv4676[yyj4676] = LoadBalancerIngress{} + } else { + yyv4679 := &yyv4676[yyj4676] + yyv4679.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4676 < len(yyv4676) { + yyv4676 = yyv4676[:yyj4676] + yyc4676 = true + } else if yyj4676 == 0 && yyv4676 == nil { + yyv4676 = []LoadBalancerIngress{} + yyc4676 = true + } + } + yyh4676.End() + if yyc4676 { + *v = yyv4676 + } +} + +func (x codecSelfer1234) encSliceServicePort(v []ServicePort, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4680 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4681 := &yyv4680 + yy4681.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceServicePort(v *[]ServicePort, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4682 := *v + yyh4682, yyl4682 := z.DecSliceHelperStart() + var yyc4682 bool + if yyl4682 == 0 { + if yyv4682 == nil { + yyv4682 = []ServicePort{} + yyc4682 = true + } else if len(yyv4682) != 0 { + yyv4682 = yyv4682[:0] + yyc4682 = true + } + } else if yyl4682 > 0 { + var yyrr4682, yyrl4682 int + var yyrt4682 bool + if yyl4682 > cap(yyv4682) { + + yyrg4682 := len(yyv4682) > 0 + yyv24682 := yyv4682 + yyrl4682, yyrt4682 = z.DecInferLen(yyl4682, z.DecBasicHandle().MaxInitLen, 80) + if yyrt4682 { + if yyrl4682 <= cap(yyv4682) { + yyv4682 = yyv4682[:yyrl4682] + } else { + yyv4682 = make([]ServicePort, yyrl4682) + } + } else { + yyv4682 = make([]ServicePort, yyrl4682) + } + yyc4682 = true + yyrr4682 = len(yyv4682) + if yyrg4682 { + copy(yyv4682, yyv24682) + } + } else if yyl4682 != len(yyv4682) { + yyv4682 = yyv4682[:yyl4682] + yyc4682 = true + } + yyj4682 := 0 + for ; yyj4682 < yyrr4682; yyj4682++ { + yyh4682.ElemContainerState(yyj4682) + if r.TryDecodeAsNil() { + yyv4682[yyj4682] = ServicePort{} + } else { + yyv4683 := &yyv4682[yyj4682] + yyv4683.CodecDecodeSelf(d) + } + + } + if yyrt4682 { + for ; yyj4682 < yyl4682; yyj4682++ { + yyv4682 = append(yyv4682, ServicePort{}) + yyh4682.ElemContainerState(yyj4682) + if r.TryDecodeAsNil() { + yyv4682[yyj4682] = ServicePort{} + } else { + yyv4684 := &yyv4682[yyj4682] + yyv4684.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4682 := 0 + for ; !r.CheckBreak(); yyj4682++ { + + if yyj4682 >= len(yyv4682) { + yyv4682 = append(yyv4682, ServicePort{}) // var yyz4682 ServicePort + yyc4682 = true + } + yyh4682.ElemContainerState(yyj4682) + if yyj4682 < len(yyv4682) { + if r.TryDecodeAsNil() { + yyv4682[yyj4682] = ServicePort{} + } else { + yyv4685 := &yyv4682[yyj4682] + yyv4685.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4682 < len(yyv4682) { + yyv4682 = yyv4682[:yyj4682] + yyc4682 = true + } else if yyj4682 == 0 && yyv4682 == nil { + yyv4682 = []ServicePort{} + yyc4682 = true + } + } + yyh4682.End() + if yyc4682 { + *v = yyv4682 + } +} + +func (x codecSelfer1234) encSliceObjectReference(v []ObjectReference, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4686 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4687 := &yyv4686 + yy4687.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceObjectReference(v *[]ObjectReference, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4688 := *v + yyh4688, yyl4688 := z.DecSliceHelperStart() + var yyc4688 bool + if yyl4688 == 0 { + if yyv4688 == nil { + yyv4688 = []ObjectReference{} + yyc4688 = true + } else if len(yyv4688) != 0 { + yyv4688 = yyv4688[:0] + yyc4688 = true + } + } else if yyl4688 > 0 { + var yyrr4688, yyrl4688 int + var yyrt4688 bool + if yyl4688 > cap(yyv4688) { + + yyrg4688 := len(yyv4688) > 0 + yyv24688 := yyv4688 + yyrl4688, yyrt4688 = z.DecInferLen(yyl4688, z.DecBasicHandle().MaxInitLen, 112) + if yyrt4688 { + if yyrl4688 <= cap(yyv4688) { + yyv4688 = yyv4688[:yyrl4688] + } else { + yyv4688 = make([]ObjectReference, yyrl4688) + } + } else { + yyv4688 = make([]ObjectReference, yyrl4688) + } + yyc4688 = true + yyrr4688 = len(yyv4688) + if yyrg4688 { + copy(yyv4688, yyv24688) + } + } else if yyl4688 != len(yyv4688) { + yyv4688 = yyv4688[:yyl4688] + yyc4688 = true + } + yyj4688 := 0 + for ; yyj4688 < yyrr4688; yyj4688++ { + yyh4688.ElemContainerState(yyj4688) + if r.TryDecodeAsNil() { + yyv4688[yyj4688] = ObjectReference{} + } else { + yyv4689 := &yyv4688[yyj4688] + yyv4689.CodecDecodeSelf(d) + } + + } + if yyrt4688 { + for ; yyj4688 < yyl4688; yyj4688++ { + yyv4688 = append(yyv4688, ObjectReference{}) + yyh4688.ElemContainerState(yyj4688) + if r.TryDecodeAsNil() { + yyv4688[yyj4688] = ObjectReference{} + } else { + yyv4690 := &yyv4688[yyj4688] + yyv4690.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4688 := 0 + for ; !r.CheckBreak(); yyj4688++ { + + if yyj4688 >= len(yyv4688) { + yyv4688 = append(yyv4688, ObjectReference{}) // var yyz4688 ObjectReference + yyc4688 = true + } + yyh4688.ElemContainerState(yyj4688) + if yyj4688 < len(yyv4688) { + if r.TryDecodeAsNil() { + yyv4688[yyj4688] = ObjectReference{} + } else { + yyv4691 := &yyv4688[yyj4688] + yyv4691.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4688 < len(yyv4688) { + yyv4688 = yyv4688[:yyj4688] + yyc4688 = true + } else if yyj4688 == 0 && yyv4688 == nil { + yyv4688 = []ObjectReference{} + yyc4688 = true + } + } + yyh4688.End() + if yyc4688 { + *v = yyv4688 + } +} + +func (x codecSelfer1234) encSliceServiceAccount(v []ServiceAccount, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4692 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4693 := &yyv4692 + yy4693.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceServiceAccount(v *[]ServiceAccount, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4694 := *v + yyh4694, yyl4694 := z.DecSliceHelperStart() + var yyc4694 bool + if yyl4694 == 0 { + if yyv4694 == nil { + yyv4694 = []ServiceAccount{} + yyc4694 = true + } else if len(yyv4694) != 0 { + yyv4694 = yyv4694[:0] + yyc4694 = true + } + } else if yyl4694 > 0 { + var yyrr4694, yyrl4694 int + var yyrt4694 bool + if yyl4694 > cap(yyv4694) { + + yyrg4694 := len(yyv4694) > 0 + yyv24694 := yyv4694 + yyrl4694, yyrt4694 = z.DecInferLen(yyl4694, z.DecBasicHandle().MaxInitLen, 304) + if yyrt4694 { + if yyrl4694 <= cap(yyv4694) { + yyv4694 = yyv4694[:yyrl4694] + } else { + yyv4694 = make([]ServiceAccount, yyrl4694) + } + } else { + yyv4694 = make([]ServiceAccount, yyrl4694) + } + yyc4694 = true + yyrr4694 = len(yyv4694) + if yyrg4694 { + copy(yyv4694, yyv24694) + } + } else if yyl4694 != len(yyv4694) { + yyv4694 = yyv4694[:yyl4694] + yyc4694 = true + } + yyj4694 := 0 + for ; yyj4694 < yyrr4694; yyj4694++ { + yyh4694.ElemContainerState(yyj4694) + if r.TryDecodeAsNil() { + yyv4694[yyj4694] = ServiceAccount{} + } else { + yyv4695 := &yyv4694[yyj4694] + yyv4695.CodecDecodeSelf(d) + } + + } + if yyrt4694 { + for ; yyj4694 < yyl4694; yyj4694++ { + yyv4694 = append(yyv4694, ServiceAccount{}) + yyh4694.ElemContainerState(yyj4694) + if r.TryDecodeAsNil() { + yyv4694[yyj4694] = ServiceAccount{} + } else { + yyv4696 := &yyv4694[yyj4694] + yyv4696.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4694 := 0 + for ; !r.CheckBreak(); yyj4694++ { + + if yyj4694 >= len(yyv4694) { + yyv4694 = append(yyv4694, ServiceAccount{}) // var yyz4694 ServiceAccount + yyc4694 = true + } + yyh4694.ElemContainerState(yyj4694) + if yyj4694 < len(yyv4694) { + if r.TryDecodeAsNil() { + yyv4694[yyj4694] = ServiceAccount{} + } else { + yyv4697 := &yyv4694[yyj4694] + yyv4697.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4694 < len(yyv4694) { + yyv4694 = yyv4694[:yyj4694] + yyc4694 = true + } else if yyj4694 == 0 && yyv4694 == nil { + yyv4694 = []ServiceAccount{} + yyc4694 = true + } + } + yyh4694.End() + if yyc4694 { + *v = yyv4694 + } +} + +func (x codecSelfer1234) encSliceEndpointSubset(v []EndpointSubset, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4698 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4699 := &yyv4698 + yy4699.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEndpointSubset(v *[]EndpointSubset, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4700 := *v + yyh4700, yyl4700 := z.DecSliceHelperStart() + var yyc4700 bool + if yyl4700 == 0 { + if yyv4700 == nil { + yyv4700 = []EndpointSubset{} + yyc4700 = true + } else if len(yyv4700) != 0 { + yyv4700 = yyv4700[:0] + yyc4700 = true + } + } else if yyl4700 > 0 { + var yyrr4700, yyrl4700 int + var yyrt4700 bool + if yyl4700 > cap(yyv4700) { + + yyrg4700 := len(yyv4700) > 0 + yyv24700 := yyv4700 + yyrl4700, yyrt4700 = z.DecInferLen(yyl4700, z.DecBasicHandle().MaxInitLen, 72) + if yyrt4700 { + if yyrl4700 <= cap(yyv4700) { + yyv4700 = yyv4700[:yyrl4700] + } else { + yyv4700 = make([]EndpointSubset, yyrl4700) + } + } else { + yyv4700 = make([]EndpointSubset, yyrl4700) + } + yyc4700 = true + yyrr4700 = len(yyv4700) + if yyrg4700 { + copy(yyv4700, yyv24700) + } + } else if yyl4700 != len(yyv4700) { + yyv4700 = yyv4700[:yyl4700] + yyc4700 = true + } + yyj4700 := 0 + for ; yyj4700 < yyrr4700; yyj4700++ { + yyh4700.ElemContainerState(yyj4700) + if r.TryDecodeAsNil() { + yyv4700[yyj4700] = EndpointSubset{} + } else { + yyv4701 := &yyv4700[yyj4700] + yyv4701.CodecDecodeSelf(d) + } + + } + if yyrt4700 { + for ; yyj4700 < yyl4700; yyj4700++ { + yyv4700 = append(yyv4700, EndpointSubset{}) + yyh4700.ElemContainerState(yyj4700) + if r.TryDecodeAsNil() { + yyv4700[yyj4700] = EndpointSubset{} + } else { + yyv4702 := &yyv4700[yyj4700] + yyv4702.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4700 := 0 + for ; !r.CheckBreak(); yyj4700++ { + + if yyj4700 >= len(yyv4700) { + yyv4700 = append(yyv4700, EndpointSubset{}) // var yyz4700 EndpointSubset + yyc4700 = true + } + yyh4700.ElemContainerState(yyj4700) + if yyj4700 < len(yyv4700) { + if r.TryDecodeAsNil() { + yyv4700[yyj4700] = EndpointSubset{} + } else { + yyv4703 := &yyv4700[yyj4700] + yyv4703.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4700 < len(yyv4700) { + yyv4700 = yyv4700[:yyj4700] + yyc4700 = true + } else if yyj4700 == 0 && yyv4700 == nil { + yyv4700 = []EndpointSubset{} + yyc4700 = true + } + } + yyh4700.End() + if yyc4700 { + *v = yyv4700 + } +} + +func (x codecSelfer1234) encSliceEndpointAddress(v []EndpointAddress, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4704 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4705 := &yyv4704 + yy4705.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEndpointAddress(v *[]EndpointAddress, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4706 := *v + yyh4706, yyl4706 := z.DecSliceHelperStart() + var yyc4706 bool + if yyl4706 == 0 { + if yyv4706 == nil { + yyv4706 = []EndpointAddress{} + yyc4706 = true + } else if len(yyv4706) != 0 { + yyv4706 = yyv4706[:0] + yyc4706 = true + } + } else if yyl4706 > 0 { + var yyrr4706, yyrl4706 int + var yyrt4706 bool + if yyl4706 > cap(yyv4706) { + + yyrg4706 := len(yyv4706) > 0 + yyv24706 := yyv4706 + yyrl4706, yyrt4706 = z.DecInferLen(yyl4706, z.DecBasicHandle().MaxInitLen, 48) + if yyrt4706 { + if yyrl4706 <= cap(yyv4706) { + yyv4706 = yyv4706[:yyrl4706] + } else { + yyv4706 = make([]EndpointAddress, yyrl4706) + } + } else { + yyv4706 = make([]EndpointAddress, yyrl4706) + } + yyc4706 = true + yyrr4706 = len(yyv4706) + if yyrg4706 { + copy(yyv4706, yyv24706) + } + } else if yyl4706 != len(yyv4706) { + yyv4706 = yyv4706[:yyl4706] + yyc4706 = true + } + yyj4706 := 0 + for ; yyj4706 < yyrr4706; yyj4706++ { + yyh4706.ElemContainerState(yyj4706) + if r.TryDecodeAsNil() { + yyv4706[yyj4706] = EndpointAddress{} + } else { + yyv4707 := &yyv4706[yyj4706] + yyv4707.CodecDecodeSelf(d) + } + + } + if yyrt4706 { + for ; yyj4706 < yyl4706; yyj4706++ { + yyv4706 = append(yyv4706, EndpointAddress{}) + yyh4706.ElemContainerState(yyj4706) + if r.TryDecodeAsNil() { + yyv4706[yyj4706] = EndpointAddress{} + } else { + yyv4708 := &yyv4706[yyj4706] + yyv4708.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4706 := 0 + for ; !r.CheckBreak(); yyj4706++ { + + if yyj4706 >= len(yyv4706) { + yyv4706 = append(yyv4706, EndpointAddress{}) // var yyz4706 EndpointAddress + yyc4706 = true + } + yyh4706.ElemContainerState(yyj4706) + if yyj4706 < len(yyv4706) { + if r.TryDecodeAsNil() { + yyv4706[yyj4706] = EndpointAddress{} + } else { + yyv4709 := &yyv4706[yyj4706] + yyv4709.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4706 < len(yyv4706) { + yyv4706 = yyv4706[:yyj4706] + yyc4706 = true + } else if yyj4706 == 0 && yyv4706 == nil { + yyv4706 = []EndpointAddress{} + yyc4706 = true + } + } + yyh4706.End() + if yyc4706 { + *v = yyv4706 + } +} + +func (x codecSelfer1234) encSliceEndpointPort(v []EndpointPort, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4710 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4711 := &yyv4710 + yy4711.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEndpointPort(v *[]EndpointPort, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4712 := *v + yyh4712, yyl4712 := z.DecSliceHelperStart() + var yyc4712 bool + if yyl4712 == 0 { + if yyv4712 == nil { + yyv4712 = []EndpointPort{} + yyc4712 = true + } else if len(yyv4712) != 0 { + yyv4712 = yyv4712[:0] + yyc4712 = true + } + } else if yyl4712 > 0 { + var yyrr4712, yyrl4712 int + var yyrt4712 bool + if yyl4712 > cap(yyv4712) { + + yyrg4712 := len(yyv4712) > 0 + yyv24712 := yyv4712 + yyrl4712, yyrt4712 = z.DecInferLen(yyl4712, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4712 { + if yyrl4712 <= cap(yyv4712) { + yyv4712 = yyv4712[:yyrl4712] + } else { + yyv4712 = make([]EndpointPort, yyrl4712) + } + } else { + yyv4712 = make([]EndpointPort, yyrl4712) + } + yyc4712 = true + yyrr4712 = len(yyv4712) + if yyrg4712 { + copy(yyv4712, yyv24712) + } + } else if yyl4712 != len(yyv4712) { + yyv4712 = yyv4712[:yyl4712] + yyc4712 = true + } + yyj4712 := 0 + for ; yyj4712 < yyrr4712; yyj4712++ { + yyh4712.ElemContainerState(yyj4712) + if r.TryDecodeAsNil() { + yyv4712[yyj4712] = EndpointPort{} + } else { + yyv4713 := &yyv4712[yyj4712] + yyv4713.CodecDecodeSelf(d) + } + + } + if yyrt4712 { + for ; yyj4712 < yyl4712; yyj4712++ { + yyv4712 = append(yyv4712, EndpointPort{}) + yyh4712.ElemContainerState(yyj4712) + if r.TryDecodeAsNil() { + yyv4712[yyj4712] = EndpointPort{} + } else { + yyv4714 := &yyv4712[yyj4712] + yyv4714.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4712 := 0 + for ; !r.CheckBreak(); yyj4712++ { + + if yyj4712 >= len(yyv4712) { + yyv4712 = append(yyv4712, EndpointPort{}) // var yyz4712 EndpointPort + yyc4712 = true + } + yyh4712.ElemContainerState(yyj4712) + if yyj4712 < len(yyv4712) { + if r.TryDecodeAsNil() { + yyv4712[yyj4712] = EndpointPort{} + } else { + yyv4715 := &yyv4712[yyj4712] + yyv4715.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4712 < len(yyv4712) { + yyv4712 = yyv4712[:yyj4712] + yyc4712 = true + } else if yyj4712 == 0 && yyv4712 == nil { + yyv4712 = []EndpointPort{} + yyc4712 = true + } + } + yyh4712.End() + if yyc4712 { + *v = yyv4712 + } +} + +func (x codecSelfer1234) encSliceEndpoints(v []Endpoints, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4716 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4717 := &yyv4716 + yy4717.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEndpoints(v *[]Endpoints, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4718 := *v + yyh4718, yyl4718 := z.DecSliceHelperStart() + var yyc4718 bool + if yyl4718 == 0 { + if yyv4718 == nil { + yyv4718 = []Endpoints{} + yyc4718 = true + } else if len(yyv4718) != 0 { + yyv4718 = yyv4718[:0] + yyc4718 = true + } + } else if yyl4718 > 0 { + var yyrr4718, yyrl4718 int + var yyrt4718 bool + if yyl4718 > cap(yyv4718) { + + yyrg4718 := len(yyv4718) > 0 + yyv24718 := yyv4718 + yyrl4718, yyrt4718 = z.DecInferLen(yyl4718, z.DecBasicHandle().MaxInitLen, 280) + if yyrt4718 { + if yyrl4718 <= cap(yyv4718) { + yyv4718 = yyv4718[:yyrl4718] + } else { + yyv4718 = make([]Endpoints, yyrl4718) + } + } else { + yyv4718 = make([]Endpoints, yyrl4718) + } + yyc4718 = true + yyrr4718 = len(yyv4718) + if yyrg4718 { + copy(yyv4718, yyv24718) + } + } else if yyl4718 != len(yyv4718) { + yyv4718 = yyv4718[:yyl4718] + yyc4718 = true + } + yyj4718 := 0 + for ; yyj4718 < yyrr4718; yyj4718++ { + yyh4718.ElemContainerState(yyj4718) + if r.TryDecodeAsNil() { + yyv4718[yyj4718] = Endpoints{} + } else { + yyv4719 := &yyv4718[yyj4718] + yyv4719.CodecDecodeSelf(d) + } + + } + if yyrt4718 { + for ; yyj4718 < yyl4718; yyj4718++ { + yyv4718 = append(yyv4718, Endpoints{}) + yyh4718.ElemContainerState(yyj4718) + if r.TryDecodeAsNil() { + yyv4718[yyj4718] = Endpoints{} + } else { + yyv4720 := &yyv4718[yyj4718] + yyv4720.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4718 := 0 + for ; !r.CheckBreak(); yyj4718++ { + + if yyj4718 >= len(yyv4718) { + yyv4718 = append(yyv4718, Endpoints{}) // var yyz4718 Endpoints + yyc4718 = true + } + yyh4718.ElemContainerState(yyj4718) + if yyj4718 < len(yyv4718) { + if r.TryDecodeAsNil() { + yyv4718[yyj4718] = Endpoints{} + } else { + yyv4721 := &yyv4718[yyj4718] + yyv4721.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4718 < len(yyv4718) { + yyv4718 = yyv4718[:yyj4718] + yyc4718 = true + } else if yyj4718 == 0 && yyv4718 == nil { + yyv4718 = []Endpoints{} + yyc4718 = true + } + } + yyh4718.End() + if yyc4718 { + *v = yyv4718 + } +} + +func (x codecSelfer1234) encSliceNodeCondition(v []NodeCondition, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4722 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4723 := &yyv4722 + yy4723.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNodeCondition(v *[]NodeCondition, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4724 := *v + yyh4724, yyl4724 := z.DecSliceHelperStart() + var yyc4724 bool + if yyl4724 == 0 { + if yyv4724 == nil { + yyv4724 = []NodeCondition{} + yyc4724 = true + } else if len(yyv4724) != 0 { + yyv4724 = yyv4724[:0] + yyc4724 = true + } + } else if yyl4724 > 0 { + var yyrr4724, yyrl4724 int + var yyrt4724 bool + if yyl4724 > cap(yyv4724) { + + yyrg4724 := len(yyv4724) > 0 + yyv24724 := yyv4724 + yyrl4724, yyrt4724 = z.DecInferLen(yyl4724, z.DecBasicHandle().MaxInitLen, 112) + if yyrt4724 { + if yyrl4724 <= cap(yyv4724) { + yyv4724 = yyv4724[:yyrl4724] + } else { + yyv4724 = make([]NodeCondition, yyrl4724) + } + } else { + yyv4724 = make([]NodeCondition, yyrl4724) + } + yyc4724 = true + yyrr4724 = len(yyv4724) + if yyrg4724 { + copy(yyv4724, yyv24724) + } + } else if yyl4724 != len(yyv4724) { + yyv4724 = yyv4724[:yyl4724] + yyc4724 = true + } + yyj4724 := 0 + for ; yyj4724 < yyrr4724; yyj4724++ { + yyh4724.ElemContainerState(yyj4724) + if r.TryDecodeAsNil() { + yyv4724[yyj4724] = NodeCondition{} + } else { + yyv4725 := &yyv4724[yyj4724] + yyv4725.CodecDecodeSelf(d) + } + + } + if yyrt4724 { + for ; yyj4724 < yyl4724; yyj4724++ { + yyv4724 = append(yyv4724, NodeCondition{}) + yyh4724.ElemContainerState(yyj4724) + if r.TryDecodeAsNil() { + yyv4724[yyj4724] = NodeCondition{} + } else { + yyv4726 := &yyv4724[yyj4724] + yyv4726.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4724 := 0 + for ; !r.CheckBreak(); yyj4724++ { + + if yyj4724 >= len(yyv4724) { + yyv4724 = append(yyv4724, NodeCondition{}) // var yyz4724 NodeCondition + yyc4724 = true + } + yyh4724.ElemContainerState(yyj4724) + if yyj4724 < len(yyv4724) { + if r.TryDecodeAsNil() { + yyv4724[yyj4724] = NodeCondition{} + } else { + yyv4727 := &yyv4724[yyj4724] + yyv4727.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4724 < len(yyv4724) { + yyv4724 = yyv4724[:yyj4724] + yyc4724 = true + } else if yyj4724 == 0 && yyv4724 == nil { + yyv4724 = []NodeCondition{} + yyc4724 = true + } + } + yyh4724.End() + if yyc4724 { + *v = yyv4724 + } +} + +func (x codecSelfer1234) encSliceNodeAddress(v []NodeAddress, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4728 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4729 := &yyv4728 + yy4729.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNodeAddress(v *[]NodeAddress, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4730 := *v + yyh4730, yyl4730 := z.DecSliceHelperStart() + var yyc4730 bool + if yyl4730 == 0 { + if yyv4730 == nil { + yyv4730 = []NodeAddress{} + yyc4730 = true + } else if len(yyv4730) != 0 { + yyv4730 = yyv4730[:0] + yyc4730 = true + } + } else if yyl4730 > 0 { + var yyrr4730, yyrl4730 int + var yyrt4730 bool + if yyl4730 > cap(yyv4730) { + + yyrg4730 := len(yyv4730) > 0 + yyv24730 := yyv4730 + yyrl4730, yyrt4730 = z.DecInferLen(yyl4730, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4730 { + if yyrl4730 <= cap(yyv4730) { + yyv4730 = yyv4730[:yyrl4730] + } else { + yyv4730 = make([]NodeAddress, yyrl4730) + } + } else { + yyv4730 = make([]NodeAddress, yyrl4730) + } + yyc4730 = true + yyrr4730 = len(yyv4730) + if yyrg4730 { + copy(yyv4730, yyv24730) + } + } else if yyl4730 != len(yyv4730) { + yyv4730 = yyv4730[:yyl4730] + yyc4730 = true + } + yyj4730 := 0 + for ; yyj4730 < yyrr4730; yyj4730++ { + yyh4730.ElemContainerState(yyj4730) + if r.TryDecodeAsNil() { + yyv4730[yyj4730] = NodeAddress{} + } else { + yyv4731 := &yyv4730[yyj4730] + yyv4731.CodecDecodeSelf(d) + } + + } + if yyrt4730 { + for ; yyj4730 < yyl4730; yyj4730++ { + yyv4730 = append(yyv4730, NodeAddress{}) + yyh4730.ElemContainerState(yyj4730) + if r.TryDecodeAsNil() { + yyv4730[yyj4730] = NodeAddress{} + } else { + yyv4732 := &yyv4730[yyj4730] + yyv4732.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4730 := 0 + for ; !r.CheckBreak(); yyj4730++ { + + if yyj4730 >= len(yyv4730) { + yyv4730 = append(yyv4730, NodeAddress{}) // var yyz4730 NodeAddress + yyc4730 = true + } + yyh4730.ElemContainerState(yyj4730) + if yyj4730 < len(yyv4730) { + if r.TryDecodeAsNil() { + yyv4730[yyj4730] = NodeAddress{} + } else { + yyv4733 := &yyv4730[yyj4730] + yyv4733.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4730 < len(yyv4730) { + yyv4730 = yyv4730[:yyj4730] + yyc4730 = true + } else if yyj4730 == 0 && yyv4730 == nil { + yyv4730 = []NodeAddress{} + yyc4730 = true + } + } + yyh4730.End() + if yyc4730 { + *v = yyv4730 + } +} + +func (x codecSelfer1234) encSliceContainerImage(v []ContainerImage, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4734 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4735 := &yyv4734 + yy4735.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceContainerImage(v *[]ContainerImage, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4736 := *v + yyh4736, yyl4736 := z.DecSliceHelperStart() + var yyc4736 bool + if yyl4736 == 0 { + if yyv4736 == nil { + yyv4736 = []ContainerImage{} + yyc4736 = true + } else if len(yyv4736) != 0 { + yyv4736 = yyv4736[:0] + yyc4736 = true + } + } else if yyl4736 > 0 { + var yyrr4736, yyrl4736 int + var yyrt4736 bool + if yyl4736 > cap(yyv4736) { + + yyrg4736 := len(yyv4736) > 0 + yyv24736 := yyv4736 + yyrl4736, yyrt4736 = z.DecInferLen(yyl4736, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4736 { + if yyrl4736 <= cap(yyv4736) { + yyv4736 = yyv4736[:yyrl4736] + } else { + yyv4736 = make([]ContainerImage, yyrl4736) + } + } else { + yyv4736 = make([]ContainerImage, yyrl4736) + } + yyc4736 = true + yyrr4736 = len(yyv4736) + if yyrg4736 { + copy(yyv4736, yyv24736) + } + } else if yyl4736 != len(yyv4736) { + yyv4736 = yyv4736[:yyl4736] + yyc4736 = true + } + yyj4736 := 0 + for ; yyj4736 < yyrr4736; yyj4736++ { + yyh4736.ElemContainerState(yyj4736) + if r.TryDecodeAsNil() { + yyv4736[yyj4736] = ContainerImage{} + } else { + yyv4737 := &yyv4736[yyj4736] + yyv4737.CodecDecodeSelf(d) + } + + } + if yyrt4736 { + for ; yyj4736 < yyl4736; yyj4736++ { + yyv4736 = append(yyv4736, ContainerImage{}) + yyh4736.ElemContainerState(yyj4736) + if r.TryDecodeAsNil() { + yyv4736[yyj4736] = ContainerImage{} + } else { + yyv4738 := &yyv4736[yyj4736] + yyv4738.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4736 := 0 + for ; !r.CheckBreak(); yyj4736++ { + + if yyj4736 >= len(yyv4736) { + yyv4736 = append(yyv4736, ContainerImage{}) // var yyz4736 ContainerImage + yyc4736 = true + } + yyh4736.ElemContainerState(yyj4736) + if yyj4736 < len(yyv4736) { + if r.TryDecodeAsNil() { + yyv4736[yyj4736] = ContainerImage{} + } else { + yyv4739 := &yyv4736[yyj4736] + yyv4739.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4736 < len(yyv4736) { + yyv4736 = yyv4736[:yyj4736] + yyc4736 = true + } else if yyj4736 == 0 && yyv4736 == nil { + yyv4736 = []ContainerImage{} + yyc4736 = true + } + } + yyh4736.End() + if yyc4736 { + *v = yyv4736 + } +} + +func (x codecSelfer1234) encSliceUniqueVolumeName(v []UniqueVolumeName, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4740 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4740.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceUniqueVolumeName(v *[]UniqueVolumeName, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4741 := *v + yyh4741, yyl4741 := z.DecSliceHelperStart() + var yyc4741 bool + if yyl4741 == 0 { + if yyv4741 == nil { + yyv4741 = []UniqueVolumeName{} + yyc4741 = true + } else if len(yyv4741) != 0 { + yyv4741 = yyv4741[:0] + yyc4741 = true + } + } else if yyl4741 > 0 { + var yyrr4741, yyrl4741 int + var yyrt4741 bool + if yyl4741 > cap(yyv4741) { + + yyrl4741, yyrt4741 = z.DecInferLen(yyl4741, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4741 { + if yyrl4741 <= cap(yyv4741) { + yyv4741 = yyv4741[:yyrl4741] + } else { + yyv4741 = make([]UniqueVolumeName, yyrl4741) + } + } else { + yyv4741 = make([]UniqueVolumeName, yyrl4741) + } + yyc4741 = true + yyrr4741 = len(yyv4741) + } else if yyl4741 != len(yyv4741) { + yyv4741 = yyv4741[:yyl4741] + yyc4741 = true + } + yyj4741 := 0 + for ; yyj4741 < yyrr4741; yyj4741++ { + yyh4741.ElemContainerState(yyj4741) + if r.TryDecodeAsNil() { + yyv4741[yyj4741] = "" + } else { + yyv4741[yyj4741] = UniqueVolumeName(r.DecodeString()) + } + + } + if yyrt4741 { + for ; yyj4741 < yyl4741; yyj4741++ { + yyv4741 = append(yyv4741, "") + yyh4741.ElemContainerState(yyj4741) + if r.TryDecodeAsNil() { + yyv4741[yyj4741] = "" + } else { + yyv4741[yyj4741] = UniqueVolumeName(r.DecodeString()) + } + + } + } + + } else { + yyj4741 := 0 + for ; !r.CheckBreak(); yyj4741++ { + + if yyj4741 >= len(yyv4741) { + yyv4741 = append(yyv4741, "") // var yyz4741 UniqueVolumeName + yyc4741 = true + } + yyh4741.ElemContainerState(yyj4741) + if yyj4741 < len(yyv4741) { + if r.TryDecodeAsNil() { + yyv4741[yyj4741] = "" + } else { + yyv4741[yyj4741] = UniqueVolumeName(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4741 < len(yyv4741) { + yyv4741 = yyv4741[:yyj4741] + yyc4741 = true + } else if yyj4741 == 0 && yyv4741 == nil { + yyv4741 = []UniqueVolumeName{} + yyc4741 = true + } + } + yyh4741.End() + if yyc4741 { + *v = yyv4741 + } +} + +func (x codecSelfer1234) encSliceAttachedVolume(v []AttachedVolume, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4745 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4746 := &yyv4745 + yy4746.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceAttachedVolume(v *[]AttachedVolume, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4747 := *v + yyh4747, yyl4747 := z.DecSliceHelperStart() + var yyc4747 bool + if yyl4747 == 0 { + if yyv4747 == nil { + yyv4747 = []AttachedVolume{} + yyc4747 = true + } else if len(yyv4747) != 0 { + yyv4747 = yyv4747[:0] + yyc4747 = true + } + } else if yyl4747 > 0 { + var yyrr4747, yyrl4747 int + var yyrt4747 bool + if yyl4747 > cap(yyv4747) { + + yyrg4747 := len(yyv4747) > 0 + yyv24747 := yyv4747 + yyrl4747, yyrt4747 = z.DecInferLen(yyl4747, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4747 { + if yyrl4747 <= cap(yyv4747) { + yyv4747 = yyv4747[:yyrl4747] + } else { + yyv4747 = make([]AttachedVolume, yyrl4747) + } + } else { + yyv4747 = make([]AttachedVolume, yyrl4747) + } + yyc4747 = true + yyrr4747 = len(yyv4747) + if yyrg4747 { + copy(yyv4747, yyv24747) + } + } else if yyl4747 != len(yyv4747) { + yyv4747 = yyv4747[:yyl4747] + yyc4747 = true + } + yyj4747 := 0 + for ; yyj4747 < yyrr4747; yyj4747++ { + yyh4747.ElemContainerState(yyj4747) + if r.TryDecodeAsNil() { + yyv4747[yyj4747] = AttachedVolume{} + } else { + yyv4748 := &yyv4747[yyj4747] + yyv4748.CodecDecodeSelf(d) + } + + } + if yyrt4747 { + for ; yyj4747 < yyl4747; yyj4747++ { + yyv4747 = append(yyv4747, AttachedVolume{}) + yyh4747.ElemContainerState(yyj4747) + if r.TryDecodeAsNil() { + yyv4747[yyj4747] = AttachedVolume{} + } else { + yyv4749 := &yyv4747[yyj4747] + yyv4749.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4747 := 0 + for ; !r.CheckBreak(); yyj4747++ { + + if yyj4747 >= len(yyv4747) { + yyv4747 = append(yyv4747, AttachedVolume{}) // var yyz4747 AttachedVolume + yyc4747 = true + } + yyh4747.ElemContainerState(yyj4747) + if yyj4747 < len(yyv4747) { + if r.TryDecodeAsNil() { + yyv4747[yyj4747] = AttachedVolume{} + } else { + yyv4750 := &yyv4747[yyj4747] + yyv4750.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4747 < len(yyv4747) { + yyv4747 = yyv4747[:yyj4747] + yyc4747 = true + } else if yyj4747 == 0 && yyv4747 == nil { + yyv4747 = []AttachedVolume{} + yyc4747 = true + } + } + yyh4747.End() + if yyc4747 { + *v = yyv4747 + } +} + +func (x codecSelfer1234) encSlicePreferAvoidPodsEntry(v []PreferAvoidPodsEntry, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4751 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4752 := &yyv4751 + yy4752.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePreferAvoidPodsEntry(v *[]PreferAvoidPodsEntry, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4753 := *v + yyh4753, yyl4753 := z.DecSliceHelperStart() + var yyc4753 bool + if yyl4753 == 0 { + if yyv4753 == nil { + yyv4753 = []PreferAvoidPodsEntry{} + yyc4753 = true + } else if len(yyv4753) != 0 { + yyv4753 = yyv4753[:0] + yyc4753 = true + } + } else if yyl4753 > 0 { + var yyrr4753, yyrl4753 int + var yyrt4753 bool + if yyl4753 > cap(yyv4753) { + + yyrg4753 := len(yyv4753) > 0 + yyv24753 := yyv4753 + yyrl4753, yyrt4753 = z.DecInferLen(yyl4753, z.DecBasicHandle().MaxInitLen, 64) + if yyrt4753 { + if yyrl4753 <= cap(yyv4753) { + yyv4753 = yyv4753[:yyrl4753] + } else { + yyv4753 = make([]PreferAvoidPodsEntry, yyrl4753) + } + } else { + yyv4753 = make([]PreferAvoidPodsEntry, yyrl4753) + } + yyc4753 = true + yyrr4753 = len(yyv4753) + if yyrg4753 { + copy(yyv4753, yyv24753) + } + } else if yyl4753 != len(yyv4753) { + yyv4753 = yyv4753[:yyl4753] + yyc4753 = true + } + yyj4753 := 0 + for ; yyj4753 < yyrr4753; yyj4753++ { + yyh4753.ElemContainerState(yyj4753) + if r.TryDecodeAsNil() { + yyv4753[yyj4753] = PreferAvoidPodsEntry{} + } else { + yyv4754 := &yyv4753[yyj4753] + yyv4754.CodecDecodeSelf(d) + } + + } + if yyrt4753 { + for ; yyj4753 < yyl4753; yyj4753++ { + yyv4753 = append(yyv4753, PreferAvoidPodsEntry{}) + yyh4753.ElemContainerState(yyj4753) + if r.TryDecodeAsNil() { + yyv4753[yyj4753] = PreferAvoidPodsEntry{} + } else { + yyv4755 := &yyv4753[yyj4753] + yyv4755.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4753 := 0 + for ; !r.CheckBreak(); yyj4753++ { + + if yyj4753 >= len(yyv4753) { + yyv4753 = append(yyv4753, PreferAvoidPodsEntry{}) // var yyz4753 PreferAvoidPodsEntry + yyc4753 = true + } + yyh4753.ElemContainerState(yyj4753) + if yyj4753 < len(yyv4753) { + if r.TryDecodeAsNil() { + yyv4753[yyj4753] = PreferAvoidPodsEntry{} + } else { + yyv4756 := &yyv4753[yyj4753] + yyv4756.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4753 < len(yyv4753) { + yyv4753 = yyv4753[:yyj4753] + yyc4753 = true + } else if yyj4753 == 0 && yyv4753 == nil { + yyv4753 = []PreferAvoidPodsEntry{} + yyc4753 = true + } + } + yyh4753.End() + if yyc4753 { + *v = yyv4753 + } +} + +func (x codecSelfer1234) encResourceList(v ResourceList, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeMapStart(len(v)) + for yyk4757, yyv4757 := range v { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + yyk4757.CodecEncodeSelf(e) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4758 := &yyv4757 + yym4759 := z.EncBinary() + _ = yym4759 + if false { + } else if z.HasExtensions() && z.EncExt(yy4758) { + } else if !yym4759 && z.IsJSONHandle() { + z.EncJSONMarshal(yy4758) + } else { + z.EncFallback(yy4758) + } + } + z.EncSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x codecSelfer1234) decResourceList(v *ResourceList, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4760 := *v + yyl4760 := r.ReadMapStart() + yybh4760 := z.DecBasicHandle() + if yyv4760 == nil { + yyrl4760, _ := z.DecInferLen(yyl4760, yybh4760.MaxInitLen, 72) + yyv4760 = make(map[ResourceName]pkg3_resource.Quantity, yyrl4760) + *v = yyv4760 + } + var yymk4760 ResourceName + var yymv4760 pkg3_resource.Quantity + var yymg4760 bool + if yybh4760.MapValueReset { + yymg4760 = true + } + if yyl4760 > 0 { + for yyj4760 := 0; yyj4760 < yyl4760; yyj4760++ { + z.DecSendContainerState(codecSelfer_containerMapKey1234) + if r.TryDecodeAsNil() { + yymk4760 = "" + } else { + yymk4760 = ResourceName(r.DecodeString()) + } + + if yymg4760 { + yymv4760 = yyv4760[yymk4760] + } else { + yymv4760 = pkg3_resource.Quantity{} + } + z.DecSendContainerState(codecSelfer_containerMapValue1234) + if r.TryDecodeAsNil() { + yymv4760 = pkg3_resource.Quantity{} + } else { + yyv4762 := &yymv4760 + yym4763 := z.DecBinary() + _ = yym4763 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4762) { + } else if !yym4763 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv4762) + } else { + z.DecFallback(yyv4762, false) + } + } + + if yyv4760 != nil { + yyv4760[yymk4760] = yymv4760 + } + } + } else if yyl4760 < 0 { + for yyj4760 := 0; !r.CheckBreak(); yyj4760++ { + z.DecSendContainerState(codecSelfer_containerMapKey1234) + if r.TryDecodeAsNil() { + yymk4760 = "" + } else { + yymk4760 = ResourceName(r.DecodeString()) + } + + if yymg4760 { + yymv4760 = yyv4760[yymk4760] + } else { + yymv4760 = pkg3_resource.Quantity{} + } + z.DecSendContainerState(codecSelfer_containerMapValue1234) + if r.TryDecodeAsNil() { + yymv4760 = pkg3_resource.Quantity{} + } else { + yyv4765 := &yymv4760 + yym4766 := z.DecBinary() + _ = yym4766 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4765) { + } else if !yym4766 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv4765) + } else { + z.DecFallback(yyv4765, false) + } + } + + if yyv4760 != nil { + yyv4760[yymk4760] = yymv4760 + } + } + } // else len==0: TODO: Should we clear map entries? + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x codecSelfer1234) encSliceNode(v []Node, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4767 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4768 := &yyv4767 + yy4768.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNode(v *[]Node, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4769 := *v + yyh4769, yyl4769 := z.DecSliceHelperStart() + var yyc4769 bool + if yyl4769 == 0 { + if yyv4769 == nil { + yyv4769 = []Node{} + yyc4769 = true + } else if len(yyv4769) != 0 { + yyv4769 = yyv4769[:0] + yyc4769 = true + } + } else if yyl4769 > 0 { + var yyrr4769, yyrl4769 int + var yyrt4769 bool + if yyl4769 > cap(yyv4769) { + + yyrg4769 := len(yyv4769) > 0 + yyv24769 := yyv4769 + yyrl4769, yyrt4769 = z.DecInferLen(yyl4769, z.DecBasicHandle().MaxInitLen, 632) + if yyrt4769 { + if yyrl4769 <= cap(yyv4769) { + yyv4769 = yyv4769[:yyrl4769] + } else { + yyv4769 = make([]Node, yyrl4769) + } + } else { + yyv4769 = make([]Node, yyrl4769) + } + yyc4769 = true + yyrr4769 = len(yyv4769) + if yyrg4769 { + copy(yyv4769, yyv24769) + } + } else if yyl4769 != len(yyv4769) { + yyv4769 = yyv4769[:yyl4769] + yyc4769 = true + } + yyj4769 := 0 + for ; yyj4769 < yyrr4769; yyj4769++ { + yyh4769.ElemContainerState(yyj4769) + if r.TryDecodeAsNil() { + yyv4769[yyj4769] = Node{} + } else { + yyv4770 := &yyv4769[yyj4769] + yyv4770.CodecDecodeSelf(d) + } + + } + if yyrt4769 { + for ; yyj4769 < yyl4769; yyj4769++ { + yyv4769 = append(yyv4769, Node{}) + yyh4769.ElemContainerState(yyj4769) + if r.TryDecodeAsNil() { + yyv4769[yyj4769] = Node{} + } else { + yyv4771 := &yyv4769[yyj4769] + yyv4771.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4769 := 0 + for ; !r.CheckBreak(); yyj4769++ { + + if yyj4769 >= len(yyv4769) { + yyv4769 = append(yyv4769, Node{}) // var yyz4769 Node + yyc4769 = true + } + yyh4769.ElemContainerState(yyj4769) + if yyj4769 < len(yyv4769) { + if r.TryDecodeAsNil() { + yyv4769[yyj4769] = Node{} + } else { + yyv4772 := &yyv4769[yyj4769] + yyv4772.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4769 < len(yyv4769) { + yyv4769 = yyv4769[:yyj4769] + yyc4769 = true + } else if yyj4769 == 0 && yyv4769 == nil { + yyv4769 = []Node{} + yyc4769 = true + } + } + yyh4769.End() + if yyc4769 { + *v = yyv4769 + } +} + +func (x codecSelfer1234) encSliceFinalizerName(v []FinalizerName, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4773 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4773.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceFinalizerName(v *[]FinalizerName, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4774 := *v + yyh4774, yyl4774 := z.DecSliceHelperStart() + var yyc4774 bool + if yyl4774 == 0 { + if yyv4774 == nil { + yyv4774 = []FinalizerName{} + yyc4774 = true + } else if len(yyv4774) != 0 { + yyv4774 = yyv4774[:0] + yyc4774 = true + } + } else if yyl4774 > 0 { + var yyrr4774, yyrl4774 int + var yyrt4774 bool + if yyl4774 > cap(yyv4774) { + + yyrl4774, yyrt4774 = z.DecInferLen(yyl4774, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4774 { + if yyrl4774 <= cap(yyv4774) { + yyv4774 = yyv4774[:yyrl4774] + } else { + yyv4774 = make([]FinalizerName, yyrl4774) + } + } else { + yyv4774 = make([]FinalizerName, yyrl4774) + } + yyc4774 = true + yyrr4774 = len(yyv4774) + } else if yyl4774 != len(yyv4774) { + yyv4774 = yyv4774[:yyl4774] + yyc4774 = true + } + yyj4774 := 0 + for ; yyj4774 < yyrr4774; yyj4774++ { + yyh4774.ElemContainerState(yyj4774) + if r.TryDecodeAsNil() { + yyv4774[yyj4774] = "" + } else { + yyv4774[yyj4774] = FinalizerName(r.DecodeString()) + } + + } + if yyrt4774 { + for ; yyj4774 < yyl4774; yyj4774++ { + yyv4774 = append(yyv4774, "") + yyh4774.ElemContainerState(yyj4774) + if r.TryDecodeAsNil() { + yyv4774[yyj4774] = "" + } else { + yyv4774[yyj4774] = FinalizerName(r.DecodeString()) + } + + } + } + + } else { + yyj4774 := 0 + for ; !r.CheckBreak(); yyj4774++ { + + if yyj4774 >= len(yyv4774) { + yyv4774 = append(yyv4774, "") // var yyz4774 FinalizerName + yyc4774 = true + } + yyh4774.ElemContainerState(yyj4774) + if yyj4774 < len(yyv4774) { + if r.TryDecodeAsNil() { + yyv4774[yyj4774] = "" + } else { + yyv4774[yyj4774] = FinalizerName(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4774 < len(yyv4774) { + yyv4774 = yyv4774[:yyj4774] + yyc4774 = true + } else if yyj4774 == 0 && yyv4774 == nil { + yyv4774 = []FinalizerName{} + yyc4774 = true + } + } + yyh4774.End() + if yyc4774 { + *v = yyv4774 + } +} + +func (x codecSelfer1234) encSliceNamespace(v []Namespace, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4778 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4779 := &yyv4778 + yy4779.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNamespace(v *[]Namespace, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4780 := *v + yyh4780, yyl4780 := z.DecSliceHelperStart() + var yyc4780 bool + if yyl4780 == 0 { + if yyv4780 == nil { + yyv4780 = []Namespace{} + yyc4780 = true + } else if len(yyv4780) != 0 { + yyv4780 = yyv4780[:0] + yyc4780 = true + } + } else if yyl4780 > 0 { + var yyrr4780, yyrl4780 int + var yyrt4780 bool + if yyl4780 > cap(yyv4780) { + + yyrg4780 := len(yyv4780) > 0 + yyv24780 := yyv4780 + yyrl4780, yyrt4780 = z.DecInferLen(yyl4780, z.DecBasicHandle().MaxInitLen, 296) + if yyrt4780 { + if yyrl4780 <= cap(yyv4780) { + yyv4780 = yyv4780[:yyrl4780] + } else { + yyv4780 = make([]Namespace, yyrl4780) + } + } else { + yyv4780 = make([]Namespace, yyrl4780) + } + yyc4780 = true + yyrr4780 = len(yyv4780) + if yyrg4780 { + copy(yyv4780, yyv24780) + } + } else if yyl4780 != len(yyv4780) { + yyv4780 = yyv4780[:yyl4780] + yyc4780 = true + } + yyj4780 := 0 + for ; yyj4780 < yyrr4780; yyj4780++ { + yyh4780.ElemContainerState(yyj4780) + if r.TryDecodeAsNil() { + yyv4780[yyj4780] = Namespace{} + } else { + yyv4781 := &yyv4780[yyj4780] + yyv4781.CodecDecodeSelf(d) + } + + } + if yyrt4780 { + for ; yyj4780 < yyl4780; yyj4780++ { + yyv4780 = append(yyv4780, Namespace{}) + yyh4780.ElemContainerState(yyj4780) + if r.TryDecodeAsNil() { + yyv4780[yyj4780] = Namespace{} + } else { + yyv4782 := &yyv4780[yyj4780] + yyv4782.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4780 := 0 + for ; !r.CheckBreak(); yyj4780++ { + + if yyj4780 >= len(yyv4780) { + yyv4780 = append(yyv4780, Namespace{}) // var yyz4780 Namespace + yyc4780 = true + } + yyh4780.ElemContainerState(yyj4780) + if yyj4780 < len(yyv4780) { + if r.TryDecodeAsNil() { + yyv4780[yyj4780] = Namespace{} + } else { + yyv4783 := &yyv4780[yyj4780] + yyv4783.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4780 < len(yyv4780) { + yyv4780 = yyv4780[:yyj4780] + yyc4780 = true + } else if yyj4780 == 0 && yyv4780 == nil { + yyv4780 = []Namespace{} + yyc4780 = true + } + } + yyh4780.End() + if yyc4780 { + *v = yyv4780 + } +} + +func (x codecSelfer1234) encSliceEvent(v []Event, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4784 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4785 := &yyv4784 + yy4785.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEvent(v *[]Event, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4786 := *v + yyh4786, yyl4786 := z.DecSliceHelperStart() + var yyc4786 bool + if yyl4786 == 0 { + if yyv4786 == nil { + yyv4786 = []Event{} + yyc4786 = true + } else if len(yyv4786) != 0 { + yyv4786 = yyv4786[:0] + yyc4786 = true + } + } else if yyl4786 > 0 { + var yyrr4786, yyrl4786 int + var yyrt4786 bool + if yyl4786 > cap(yyv4786) { + + yyrg4786 := len(yyv4786) > 0 + yyv24786 := yyv4786 + yyrl4786, yyrt4786 = z.DecInferLen(yyl4786, z.DecBasicHandle().MaxInitLen, 504) + if yyrt4786 { + if yyrl4786 <= cap(yyv4786) { + yyv4786 = yyv4786[:yyrl4786] + } else { + yyv4786 = make([]Event, yyrl4786) + } + } else { + yyv4786 = make([]Event, yyrl4786) + } + yyc4786 = true + yyrr4786 = len(yyv4786) + if yyrg4786 { + copy(yyv4786, yyv24786) + } + } else if yyl4786 != len(yyv4786) { + yyv4786 = yyv4786[:yyl4786] + yyc4786 = true + } + yyj4786 := 0 + for ; yyj4786 < yyrr4786; yyj4786++ { + yyh4786.ElemContainerState(yyj4786) + if r.TryDecodeAsNil() { + yyv4786[yyj4786] = Event{} + } else { + yyv4787 := &yyv4786[yyj4786] + yyv4787.CodecDecodeSelf(d) + } + + } + if yyrt4786 { + for ; yyj4786 < yyl4786; yyj4786++ { + yyv4786 = append(yyv4786, Event{}) + yyh4786.ElemContainerState(yyj4786) + if r.TryDecodeAsNil() { + yyv4786[yyj4786] = Event{} + } else { + yyv4788 := &yyv4786[yyj4786] + yyv4788.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4786 := 0 + for ; !r.CheckBreak(); yyj4786++ { + + if yyj4786 >= len(yyv4786) { + yyv4786 = append(yyv4786, Event{}) // var yyz4786 Event + yyc4786 = true + } + yyh4786.ElemContainerState(yyj4786) + if yyj4786 < len(yyv4786) { + if r.TryDecodeAsNil() { + yyv4786[yyj4786] = Event{} + } else { + yyv4789 := &yyv4786[yyj4786] + yyv4789.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4786 < len(yyv4786) { + yyv4786 = yyv4786[:yyj4786] + yyc4786 = true + } else if yyj4786 == 0 && yyv4786 == nil { + yyv4786 = []Event{} + yyc4786 = true + } + } + yyh4786.End() + if yyc4786 { + *v = yyv4786 + } +} + +func (x codecSelfer1234) encSliceruntime_Object(v []pkg7_runtime.Object, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4790 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyv4790 == nil { + r.EncodeNil() + } else { + yym4791 := z.EncBinary() + _ = yym4791 + if false { + } else if z.HasExtensions() && z.EncExt(yyv4790) { + } else { + z.EncFallback(yyv4790) + } + } + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceruntime_Object(v *[]pkg7_runtime.Object, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4792 := *v + yyh4792, yyl4792 := z.DecSliceHelperStart() + var yyc4792 bool + if yyl4792 == 0 { + if yyv4792 == nil { + yyv4792 = []pkg7_runtime.Object{} + yyc4792 = true + } else if len(yyv4792) != 0 { + yyv4792 = yyv4792[:0] + yyc4792 = true + } + } else if yyl4792 > 0 { + var yyrr4792, yyrl4792 int + var yyrt4792 bool + if yyl4792 > cap(yyv4792) { + + yyrg4792 := len(yyv4792) > 0 + yyv24792 := yyv4792 + yyrl4792, yyrt4792 = z.DecInferLen(yyl4792, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4792 { + if yyrl4792 <= cap(yyv4792) { + yyv4792 = yyv4792[:yyrl4792] + } else { + yyv4792 = make([]pkg7_runtime.Object, yyrl4792) + } + } else { + yyv4792 = make([]pkg7_runtime.Object, yyrl4792) + } + yyc4792 = true + yyrr4792 = len(yyv4792) + if yyrg4792 { + copy(yyv4792, yyv24792) + } + } else if yyl4792 != len(yyv4792) { + yyv4792 = yyv4792[:yyl4792] + yyc4792 = true + } + yyj4792 := 0 + for ; yyj4792 < yyrr4792; yyj4792++ { + yyh4792.ElemContainerState(yyj4792) + if r.TryDecodeAsNil() { + yyv4792[yyj4792] = nil + } else { + yyv4793 := &yyv4792[yyj4792] + yym4794 := z.DecBinary() + _ = yym4794 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4793) { + } else { + z.DecFallback(yyv4793, true) + } + } + + } + if yyrt4792 { + for ; yyj4792 < yyl4792; yyj4792++ { + yyv4792 = append(yyv4792, nil) + yyh4792.ElemContainerState(yyj4792) + if r.TryDecodeAsNil() { + yyv4792[yyj4792] = nil + } else { + yyv4795 := &yyv4792[yyj4792] + yym4796 := z.DecBinary() + _ = yym4796 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4795) { + } else { + z.DecFallback(yyv4795, true) + } + } + + } + } + + } else { + yyj4792 := 0 + for ; !r.CheckBreak(); yyj4792++ { + + if yyj4792 >= len(yyv4792) { + yyv4792 = append(yyv4792, nil) // var yyz4792 pkg7_runtime.Object + yyc4792 = true + } + yyh4792.ElemContainerState(yyj4792) + if yyj4792 < len(yyv4792) { + if r.TryDecodeAsNil() { + yyv4792[yyj4792] = nil + } else { + yyv4797 := &yyv4792[yyj4792] + yym4798 := z.DecBinary() + _ = yym4798 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4797) { + } else { + z.DecFallback(yyv4797, true) + } + } + + } else { + z.DecSwallow() + } + + } + if yyj4792 < len(yyv4792) { + yyv4792 = yyv4792[:yyj4792] + yyc4792 = true + } else if yyj4792 == 0 && yyv4792 == nil { + yyv4792 = []pkg7_runtime.Object{} + yyc4792 = true + } + } + yyh4792.End() + if yyc4792 { + *v = yyv4792 + } +} + +func (x codecSelfer1234) encSliceLimitRangeItem(v []LimitRangeItem, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4799 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4800 := &yyv4799 + yy4800.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceLimitRangeItem(v *[]LimitRangeItem, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4801 := *v + yyh4801, yyl4801 := z.DecSliceHelperStart() + var yyc4801 bool + if yyl4801 == 0 { + if yyv4801 == nil { + yyv4801 = []LimitRangeItem{} + yyc4801 = true + } else if len(yyv4801) != 0 { + yyv4801 = yyv4801[:0] + yyc4801 = true + } + } else if yyl4801 > 0 { + var yyrr4801, yyrl4801 int + var yyrt4801 bool + if yyl4801 > cap(yyv4801) { + + yyrg4801 := len(yyv4801) > 0 + yyv24801 := yyv4801 + yyrl4801, yyrt4801 = z.DecInferLen(yyl4801, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4801 { + if yyrl4801 <= cap(yyv4801) { + yyv4801 = yyv4801[:yyrl4801] + } else { + yyv4801 = make([]LimitRangeItem, yyrl4801) + } + } else { + yyv4801 = make([]LimitRangeItem, yyrl4801) + } + yyc4801 = true + yyrr4801 = len(yyv4801) + if yyrg4801 { + copy(yyv4801, yyv24801) + } + } else if yyl4801 != len(yyv4801) { + yyv4801 = yyv4801[:yyl4801] + yyc4801 = true + } + yyj4801 := 0 + for ; yyj4801 < yyrr4801; yyj4801++ { + yyh4801.ElemContainerState(yyj4801) + if r.TryDecodeAsNil() { + yyv4801[yyj4801] = LimitRangeItem{} + } else { + yyv4802 := &yyv4801[yyj4801] + yyv4802.CodecDecodeSelf(d) + } + + } + if yyrt4801 { + for ; yyj4801 < yyl4801; yyj4801++ { + yyv4801 = append(yyv4801, LimitRangeItem{}) + yyh4801.ElemContainerState(yyj4801) + if r.TryDecodeAsNil() { + yyv4801[yyj4801] = LimitRangeItem{} + } else { + yyv4803 := &yyv4801[yyj4801] + yyv4803.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4801 := 0 + for ; !r.CheckBreak(); yyj4801++ { + + if yyj4801 >= len(yyv4801) { + yyv4801 = append(yyv4801, LimitRangeItem{}) // var yyz4801 LimitRangeItem + yyc4801 = true + } + yyh4801.ElemContainerState(yyj4801) + if yyj4801 < len(yyv4801) { + if r.TryDecodeAsNil() { + yyv4801[yyj4801] = LimitRangeItem{} + } else { + yyv4804 := &yyv4801[yyj4801] + yyv4804.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4801 < len(yyv4801) { + yyv4801 = yyv4801[:yyj4801] + yyc4801 = true + } else if yyj4801 == 0 && yyv4801 == nil { + yyv4801 = []LimitRangeItem{} + yyc4801 = true + } + } + yyh4801.End() + if yyc4801 { + *v = yyv4801 + } +} + +func (x codecSelfer1234) encSliceLimitRange(v []LimitRange, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4805 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4806 := &yyv4805 + yy4806.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceLimitRange(v *[]LimitRange, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4807 := *v + yyh4807, yyl4807 := z.DecSliceHelperStart() + var yyc4807 bool + if yyl4807 == 0 { + if yyv4807 == nil { + yyv4807 = []LimitRange{} + yyc4807 = true + } else if len(yyv4807) != 0 { + yyv4807 = yyv4807[:0] + yyc4807 = true + } + } else if yyl4807 > 0 { + var yyrr4807, yyrl4807 int + var yyrt4807 bool + if yyl4807 > cap(yyv4807) { + + yyrg4807 := len(yyv4807) > 0 + yyv24807 := yyv4807 + yyrl4807, yyrt4807 = z.DecInferLen(yyl4807, z.DecBasicHandle().MaxInitLen, 280) + if yyrt4807 { + if yyrl4807 <= cap(yyv4807) { + yyv4807 = yyv4807[:yyrl4807] + } else { + yyv4807 = make([]LimitRange, yyrl4807) + } + } else { + yyv4807 = make([]LimitRange, yyrl4807) + } + yyc4807 = true + yyrr4807 = len(yyv4807) + if yyrg4807 { + copy(yyv4807, yyv24807) + } + } else if yyl4807 != len(yyv4807) { + yyv4807 = yyv4807[:yyl4807] + yyc4807 = true + } + yyj4807 := 0 + for ; yyj4807 < yyrr4807; yyj4807++ { + yyh4807.ElemContainerState(yyj4807) + if r.TryDecodeAsNil() { + yyv4807[yyj4807] = LimitRange{} + } else { + yyv4808 := &yyv4807[yyj4807] + yyv4808.CodecDecodeSelf(d) + } + + } + if yyrt4807 { + for ; yyj4807 < yyl4807; yyj4807++ { + yyv4807 = append(yyv4807, LimitRange{}) + yyh4807.ElemContainerState(yyj4807) + if r.TryDecodeAsNil() { + yyv4807[yyj4807] = LimitRange{} + } else { + yyv4809 := &yyv4807[yyj4807] + yyv4809.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4807 := 0 + for ; !r.CheckBreak(); yyj4807++ { + + if yyj4807 >= len(yyv4807) { + yyv4807 = append(yyv4807, LimitRange{}) // var yyz4807 LimitRange + yyc4807 = true + } + yyh4807.ElemContainerState(yyj4807) + if yyj4807 < len(yyv4807) { + if r.TryDecodeAsNil() { + yyv4807[yyj4807] = LimitRange{} + } else { + yyv4810 := &yyv4807[yyj4807] + yyv4810.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4807 < len(yyv4807) { + yyv4807 = yyv4807[:yyj4807] + yyc4807 = true + } else if yyj4807 == 0 && yyv4807 == nil { + yyv4807 = []LimitRange{} + yyc4807 = true + } + } + yyh4807.End() + if yyc4807 { + *v = yyv4807 + } +} + +func (x codecSelfer1234) encSliceResourceQuotaScope(v []ResourceQuotaScope, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4811 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4811.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceResourceQuotaScope(v *[]ResourceQuotaScope, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4812 := *v + yyh4812, yyl4812 := z.DecSliceHelperStart() + var yyc4812 bool + if yyl4812 == 0 { + if yyv4812 == nil { + yyv4812 = []ResourceQuotaScope{} + yyc4812 = true + } else if len(yyv4812) != 0 { + yyv4812 = yyv4812[:0] + yyc4812 = true + } + } else if yyl4812 > 0 { + var yyrr4812, yyrl4812 int + var yyrt4812 bool + if yyl4812 > cap(yyv4812) { + + yyrl4812, yyrt4812 = z.DecInferLen(yyl4812, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4812 { + if yyrl4812 <= cap(yyv4812) { + yyv4812 = yyv4812[:yyrl4812] + } else { + yyv4812 = make([]ResourceQuotaScope, yyrl4812) + } + } else { + yyv4812 = make([]ResourceQuotaScope, yyrl4812) + } + yyc4812 = true + yyrr4812 = len(yyv4812) + } else if yyl4812 != len(yyv4812) { + yyv4812 = yyv4812[:yyl4812] + yyc4812 = true + } + yyj4812 := 0 + for ; yyj4812 < yyrr4812; yyj4812++ { + yyh4812.ElemContainerState(yyj4812) + if r.TryDecodeAsNil() { + yyv4812[yyj4812] = "" + } else { + yyv4812[yyj4812] = ResourceQuotaScope(r.DecodeString()) + } + + } + if yyrt4812 { + for ; yyj4812 < yyl4812; yyj4812++ { + yyv4812 = append(yyv4812, "") + yyh4812.ElemContainerState(yyj4812) + if r.TryDecodeAsNil() { + yyv4812[yyj4812] = "" + } else { + yyv4812[yyj4812] = ResourceQuotaScope(r.DecodeString()) + } + + } + } + + } else { + yyj4812 := 0 + for ; !r.CheckBreak(); yyj4812++ { + + if yyj4812 >= len(yyv4812) { + yyv4812 = append(yyv4812, "") // var yyz4812 ResourceQuotaScope + yyc4812 = true + } + yyh4812.ElemContainerState(yyj4812) + if yyj4812 < len(yyv4812) { + if r.TryDecodeAsNil() { + yyv4812[yyj4812] = "" + } else { + yyv4812[yyj4812] = ResourceQuotaScope(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4812 < len(yyv4812) { + yyv4812 = yyv4812[:yyj4812] + yyc4812 = true + } else if yyj4812 == 0 && yyv4812 == nil { + yyv4812 = []ResourceQuotaScope{} + yyc4812 = true + } + } + yyh4812.End() + if yyc4812 { + *v = yyv4812 + } +} + +func (x codecSelfer1234) encSliceResourceQuota(v []ResourceQuota, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4816 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4817 := &yyv4816 + yy4817.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceResourceQuota(v *[]ResourceQuota, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4818 := *v + yyh4818, yyl4818 := z.DecSliceHelperStart() + var yyc4818 bool + if yyl4818 == 0 { + if yyv4818 == nil { + yyv4818 = []ResourceQuota{} + yyc4818 = true + } else if len(yyv4818) != 0 { + yyv4818 = yyv4818[:0] + yyc4818 = true + } + } else if yyl4818 > 0 { + var yyrr4818, yyrl4818 int + var yyrt4818 bool + if yyl4818 > cap(yyv4818) { + + yyrg4818 := len(yyv4818) > 0 + yyv24818 := yyv4818 + yyrl4818, yyrt4818 = z.DecInferLen(yyl4818, z.DecBasicHandle().MaxInitLen, 304) + if yyrt4818 { + if yyrl4818 <= cap(yyv4818) { + yyv4818 = yyv4818[:yyrl4818] + } else { + yyv4818 = make([]ResourceQuota, yyrl4818) + } + } else { + yyv4818 = make([]ResourceQuota, yyrl4818) + } + yyc4818 = true + yyrr4818 = len(yyv4818) + if yyrg4818 { + copy(yyv4818, yyv24818) + } + } else if yyl4818 != len(yyv4818) { + yyv4818 = yyv4818[:yyl4818] + yyc4818 = true + } + yyj4818 := 0 + for ; yyj4818 < yyrr4818; yyj4818++ { + yyh4818.ElemContainerState(yyj4818) + if r.TryDecodeAsNil() { + yyv4818[yyj4818] = ResourceQuota{} + } else { + yyv4819 := &yyv4818[yyj4818] + yyv4819.CodecDecodeSelf(d) + } + + } + if yyrt4818 { + for ; yyj4818 < yyl4818; yyj4818++ { + yyv4818 = append(yyv4818, ResourceQuota{}) + yyh4818.ElemContainerState(yyj4818) + if r.TryDecodeAsNil() { + yyv4818[yyj4818] = ResourceQuota{} + } else { + yyv4820 := &yyv4818[yyj4818] + yyv4820.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4818 := 0 + for ; !r.CheckBreak(); yyj4818++ { + + if yyj4818 >= len(yyv4818) { + yyv4818 = append(yyv4818, ResourceQuota{}) // var yyz4818 ResourceQuota + yyc4818 = true + } + yyh4818.ElemContainerState(yyj4818) + if yyj4818 < len(yyv4818) { + if r.TryDecodeAsNil() { + yyv4818[yyj4818] = ResourceQuota{} + } else { + yyv4821 := &yyv4818[yyj4818] + yyv4821.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4818 < len(yyv4818) { + yyv4818 = yyv4818[:yyj4818] + yyc4818 = true + } else if yyj4818 == 0 && yyv4818 == nil { + yyv4818 = []ResourceQuota{} + yyc4818 = true + } + } + yyh4818.End() + if yyc4818 { + *v = yyv4818 + } +} + +func (x codecSelfer1234) encMapstringSliceuint8(v map[string][]uint8, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeMapStart(len(v)) + for yyk4822, yyv4822 := range v { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + yym4823 := z.EncBinary() + _ = yym4823 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yyk4822)) + } + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyv4822 == nil { + r.EncodeNil() + } else { + yym4824 := z.EncBinary() + _ = yym4824 + if false { + } else { + r.EncodeStringBytes(codecSelferC_RAW1234, []byte(yyv4822)) + } + } + } + z.EncSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x codecSelfer1234) decMapstringSliceuint8(v *map[string][]uint8, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4825 := *v + yyl4825 := r.ReadMapStart() + yybh4825 := z.DecBasicHandle() + if yyv4825 == nil { + yyrl4825, _ := z.DecInferLen(yyl4825, yybh4825.MaxInitLen, 40) + yyv4825 = make(map[string][]uint8, yyrl4825) + *v = yyv4825 + } + var yymk4825 string + var yymv4825 []uint8 + var yymg4825 bool + if yybh4825.MapValueReset { + yymg4825 = true + } + if yyl4825 > 0 { + for yyj4825 := 0; yyj4825 < yyl4825; yyj4825++ { + z.DecSendContainerState(codecSelfer_containerMapKey1234) + if r.TryDecodeAsNil() { + yymk4825 = "" + } else { + yymk4825 = string(r.DecodeString()) + } + + if yymg4825 { + yymv4825 = yyv4825[yymk4825] + } else { + yymv4825 = nil + } + z.DecSendContainerState(codecSelfer_containerMapValue1234) + if r.TryDecodeAsNil() { + yymv4825 = nil + } else { + yyv4827 := &yymv4825 + yym4828 := z.DecBinary() + _ = yym4828 + if false { + } else { + *yyv4827 = r.DecodeBytes(*(*[]byte)(yyv4827), false, false) + } + } + + if yyv4825 != nil { + yyv4825[yymk4825] = yymv4825 + } + } + } else if yyl4825 < 0 { + for yyj4825 := 0; !r.CheckBreak(); yyj4825++ { + z.DecSendContainerState(codecSelfer_containerMapKey1234) + if r.TryDecodeAsNil() { + yymk4825 = "" + } else { + yymk4825 = string(r.DecodeString()) + } + + if yymg4825 { + yymv4825 = yyv4825[yymk4825] + } else { + yymv4825 = nil + } + z.DecSendContainerState(codecSelfer_containerMapValue1234) + if r.TryDecodeAsNil() { + yymv4825 = nil + } else { + yyv4830 := &yymv4825 + yym4831 := z.DecBinary() + _ = yym4831 + if false { + } else { + *yyv4830 = r.DecodeBytes(*(*[]byte)(yyv4830), false, false) + } + } + + if yyv4825 != nil { + yyv4825[yymk4825] = yymv4825 + } + } + } // else len==0: TODO: Should we clear map entries? + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x codecSelfer1234) encSliceSecret(v []Secret, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4832 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4833 := &yyv4832 + yy4833.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceSecret(v *[]Secret, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4834 := *v + yyh4834, yyl4834 := z.DecSliceHelperStart() + var yyc4834 bool + if yyl4834 == 0 { + if yyv4834 == nil { + yyv4834 = []Secret{} + yyc4834 = true + } else if len(yyv4834) != 0 { + yyv4834 = yyv4834[:0] + yyc4834 = true + } + } else if yyl4834 > 0 { + var yyrr4834, yyrl4834 int + var yyrt4834 bool + if yyl4834 > cap(yyv4834) { + + yyrg4834 := len(yyv4834) > 0 + yyv24834 := yyv4834 + yyrl4834, yyrt4834 = z.DecInferLen(yyl4834, z.DecBasicHandle().MaxInitLen, 280) + if yyrt4834 { + if yyrl4834 <= cap(yyv4834) { + yyv4834 = yyv4834[:yyrl4834] + } else { + yyv4834 = make([]Secret, yyrl4834) + } + } else { + yyv4834 = make([]Secret, yyrl4834) + } + yyc4834 = true + yyrr4834 = len(yyv4834) + if yyrg4834 { + copy(yyv4834, yyv24834) + } + } else if yyl4834 != len(yyv4834) { + yyv4834 = yyv4834[:yyl4834] + yyc4834 = true + } + yyj4834 := 0 + for ; yyj4834 < yyrr4834; yyj4834++ { + yyh4834.ElemContainerState(yyj4834) + if r.TryDecodeAsNil() { + yyv4834[yyj4834] = Secret{} + } else { + yyv4835 := &yyv4834[yyj4834] + yyv4835.CodecDecodeSelf(d) + } + + } + if yyrt4834 { + for ; yyj4834 < yyl4834; yyj4834++ { + yyv4834 = append(yyv4834, Secret{}) + yyh4834.ElemContainerState(yyj4834) + if r.TryDecodeAsNil() { + yyv4834[yyj4834] = Secret{} + } else { + yyv4836 := &yyv4834[yyj4834] + yyv4836.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4834 := 0 + for ; !r.CheckBreak(); yyj4834++ { + + if yyj4834 >= len(yyv4834) { + yyv4834 = append(yyv4834, Secret{}) // var yyz4834 Secret + yyc4834 = true + } + yyh4834.ElemContainerState(yyj4834) + if yyj4834 < len(yyv4834) { + if r.TryDecodeAsNil() { + yyv4834[yyj4834] = Secret{} + } else { + yyv4837 := &yyv4834[yyj4834] + yyv4837.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4834 < len(yyv4834) { + yyv4834 = yyv4834[:yyj4834] + yyc4834 = true + } else if yyj4834 == 0 && yyv4834 == nil { + yyv4834 = []Secret{} + yyc4834 = true + } + } + yyh4834.End() + if yyc4834 { + *v = yyv4834 + } +} + +func (x codecSelfer1234) encSliceConfigMap(v []ConfigMap, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4838 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4839 := &yyv4838 + yy4839.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceConfigMap(v *[]ConfigMap, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4840 := *v + yyh4840, yyl4840 := z.DecSliceHelperStart() + var yyc4840 bool + if yyl4840 == 0 { + if yyv4840 == nil { + yyv4840 = []ConfigMap{} + yyc4840 = true + } else if len(yyv4840) != 0 { + yyv4840 = yyv4840[:0] + yyc4840 = true + } + } else if yyl4840 > 0 { + var yyrr4840, yyrl4840 int + var yyrt4840 bool + if yyl4840 > cap(yyv4840) { + + yyrg4840 := len(yyv4840) > 0 + yyv24840 := yyv4840 + yyrl4840, yyrt4840 = z.DecInferLen(yyl4840, z.DecBasicHandle().MaxInitLen, 264) + if yyrt4840 { + if yyrl4840 <= cap(yyv4840) { + yyv4840 = yyv4840[:yyrl4840] + } else { + yyv4840 = make([]ConfigMap, yyrl4840) + } + } else { + yyv4840 = make([]ConfigMap, yyrl4840) + } + yyc4840 = true + yyrr4840 = len(yyv4840) + if yyrg4840 { + copy(yyv4840, yyv24840) + } + } else if yyl4840 != len(yyv4840) { + yyv4840 = yyv4840[:yyl4840] + yyc4840 = true + } + yyj4840 := 0 + for ; yyj4840 < yyrr4840; yyj4840++ { + yyh4840.ElemContainerState(yyj4840) + if r.TryDecodeAsNil() { + yyv4840[yyj4840] = ConfigMap{} + } else { + yyv4841 := &yyv4840[yyj4840] + yyv4841.CodecDecodeSelf(d) + } + + } + if yyrt4840 { + for ; yyj4840 < yyl4840; yyj4840++ { + yyv4840 = append(yyv4840, ConfigMap{}) + yyh4840.ElemContainerState(yyj4840) + if r.TryDecodeAsNil() { + yyv4840[yyj4840] = ConfigMap{} + } else { + yyv4842 := &yyv4840[yyj4840] + yyv4842.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4840 := 0 + for ; !r.CheckBreak(); yyj4840++ { + + if yyj4840 >= len(yyv4840) { + yyv4840 = append(yyv4840, ConfigMap{}) // var yyz4840 ConfigMap + yyc4840 = true + } + yyh4840.ElemContainerState(yyj4840) + if yyj4840 < len(yyv4840) { + if r.TryDecodeAsNil() { + yyv4840[yyj4840] = ConfigMap{} + } else { + yyv4843 := &yyv4840[yyj4840] + yyv4843.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4840 < len(yyv4840) { + yyv4840 = yyv4840[:yyj4840] + yyc4840 = true + } else if yyj4840 == 0 && yyv4840 == nil { + yyv4840 = []ConfigMap{} + yyc4840 = true + } + } + yyh4840.End() + if yyc4840 { + *v = yyv4840 + } +} + +func (x codecSelfer1234) encSliceComponentCondition(v []ComponentCondition, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4844 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4845 := &yyv4844 + yy4845.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceComponentCondition(v *[]ComponentCondition, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4846 := *v + yyh4846, yyl4846 := z.DecSliceHelperStart() + var yyc4846 bool + if yyl4846 == 0 { + if yyv4846 == nil { + yyv4846 = []ComponentCondition{} + yyc4846 = true + } else if len(yyv4846) != 0 { + yyv4846 = yyv4846[:0] + yyc4846 = true + } + } else if yyl4846 > 0 { + var yyrr4846, yyrl4846 int + var yyrt4846 bool + if yyl4846 > cap(yyv4846) { + + yyrg4846 := len(yyv4846) > 0 + yyv24846 := yyv4846 + yyrl4846, yyrt4846 = z.DecInferLen(yyl4846, z.DecBasicHandle().MaxInitLen, 64) + if yyrt4846 { + if yyrl4846 <= cap(yyv4846) { + yyv4846 = yyv4846[:yyrl4846] + } else { + yyv4846 = make([]ComponentCondition, yyrl4846) + } + } else { + yyv4846 = make([]ComponentCondition, yyrl4846) + } + yyc4846 = true + yyrr4846 = len(yyv4846) + if yyrg4846 { + copy(yyv4846, yyv24846) + } + } else if yyl4846 != len(yyv4846) { + yyv4846 = yyv4846[:yyl4846] + yyc4846 = true + } + yyj4846 := 0 + for ; yyj4846 < yyrr4846; yyj4846++ { + yyh4846.ElemContainerState(yyj4846) + if r.TryDecodeAsNil() { + yyv4846[yyj4846] = ComponentCondition{} + } else { + yyv4847 := &yyv4846[yyj4846] + yyv4847.CodecDecodeSelf(d) + } + + } + if yyrt4846 { + for ; yyj4846 < yyl4846; yyj4846++ { + yyv4846 = append(yyv4846, ComponentCondition{}) + yyh4846.ElemContainerState(yyj4846) + if r.TryDecodeAsNil() { + yyv4846[yyj4846] = ComponentCondition{} + } else { + yyv4848 := &yyv4846[yyj4846] + yyv4848.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4846 := 0 + for ; !r.CheckBreak(); yyj4846++ { + + if yyj4846 >= len(yyv4846) { + yyv4846 = append(yyv4846, ComponentCondition{}) // var yyz4846 ComponentCondition + yyc4846 = true + } + yyh4846.ElemContainerState(yyj4846) + if yyj4846 < len(yyv4846) { + if r.TryDecodeAsNil() { + yyv4846[yyj4846] = ComponentCondition{} + } else { + yyv4849 := &yyv4846[yyj4846] + yyv4849.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4846 < len(yyv4846) { + yyv4846 = yyv4846[:yyj4846] + yyc4846 = true + } else if yyj4846 == 0 && yyv4846 == nil { + yyv4846 = []ComponentCondition{} + yyc4846 = true + } + } + yyh4846.End() + if yyc4846 { + *v = yyv4846 + } +} + +func (x codecSelfer1234) encSliceComponentStatus(v []ComponentStatus, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4850 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4851 := &yyv4850 + yy4851.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceComponentStatus(v *[]ComponentStatus, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4852 := *v + yyh4852, yyl4852 := z.DecSliceHelperStart() + var yyc4852 bool + if yyl4852 == 0 { + if yyv4852 == nil { + yyv4852 = []ComponentStatus{} + yyc4852 = true + } else if len(yyv4852) != 0 { + yyv4852 = yyv4852[:0] + yyc4852 = true + } + } else if yyl4852 > 0 { + var yyrr4852, yyrl4852 int + var yyrt4852 bool + if yyl4852 > cap(yyv4852) { + + yyrg4852 := len(yyv4852) > 0 + yyv24852 := yyv4852 + yyrl4852, yyrt4852 = z.DecInferLen(yyl4852, z.DecBasicHandle().MaxInitLen, 280) + if yyrt4852 { + if yyrl4852 <= cap(yyv4852) { + yyv4852 = yyv4852[:yyrl4852] + } else { + yyv4852 = make([]ComponentStatus, yyrl4852) + } + } else { + yyv4852 = make([]ComponentStatus, yyrl4852) + } + yyc4852 = true + yyrr4852 = len(yyv4852) + if yyrg4852 { + copy(yyv4852, yyv24852) + } + } else if yyl4852 != len(yyv4852) { + yyv4852 = yyv4852[:yyl4852] + yyc4852 = true + } + yyj4852 := 0 + for ; yyj4852 < yyrr4852; yyj4852++ { + yyh4852.ElemContainerState(yyj4852) + if r.TryDecodeAsNil() { + yyv4852[yyj4852] = ComponentStatus{} + } else { + yyv4853 := &yyv4852[yyj4852] + yyv4853.CodecDecodeSelf(d) + } + + } + if yyrt4852 { + for ; yyj4852 < yyl4852; yyj4852++ { + yyv4852 = append(yyv4852, ComponentStatus{}) + yyh4852.ElemContainerState(yyj4852) + if r.TryDecodeAsNil() { + yyv4852[yyj4852] = ComponentStatus{} + } else { + yyv4854 := &yyv4852[yyj4852] + yyv4854.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4852 := 0 + for ; !r.CheckBreak(); yyj4852++ { + + if yyj4852 >= len(yyv4852) { + yyv4852 = append(yyv4852, ComponentStatus{}) // var yyz4852 ComponentStatus + yyc4852 = true + } + yyh4852.ElemContainerState(yyj4852) + if yyj4852 < len(yyv4852) { + if r.TryDecodeAsNil() { + yyv4852[yyj4852] = ComponentStatus{} + } else { + yyv4855 := &yyv4852[yyj4852] + yyv4855.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4852 < len(yyv4852) { + yyv4852 = yyv4852[:yyj4852] + yyc4852 = true + } else if yyj4852 == 0 && yyv4852 == nil { + yyv4852 = []ComponentStatus{} + yyc4852 = true + } + } + yyh4852.End() + if yyc4852 { + *v = yyv4852 + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/types.go b/vendor/k8s.io/client-go/1.4/pkg/api/types.go new file mode 100644 index 00000000..5dffaef6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/types.go @@ -0,0 +1,3064 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/client-go/1.4/pkg/api/resource" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/fields" + "k8s.io/client-go/1.4/pkg/labels" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/types" + "k8s.io/client-go/1.4/pkg/util/intstr" +) + +// Common string formats +// --------------------- +// Many fields in this API have formatting requirements. The commonly used +// formats are defined here. +// +// C_IDENTIFIER: This is a string that conforms to the definition of an "identifier" +// in the C language. This is captured by the following regex: +// [A-Za-z_][A-Za-z0-9_]* +// This defines the format, but not the length restriction, which should be +// specified at the definition of any field of this type. +// +// DNS_LABEL: This is a string, no more than 63 characters long, that conforms +// to the definition of a "label" in RFCs 1035 and 1123. This is captured +// by the following regex: +// [a-z0-9]([-a-z0-9]*[a-z0-9])? +// +// DNS_SUBDOMAIN: This is a string, no more than 253 characters long, that conforms +// to the definition of a "subdomain" in RFCs 1035 and 1123. This is captured +// by the following regex: +// [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)* +// or more simply: +// DNS_LABEL(\.DNS_LABEL)* +// +// IANA_SVC_NAME: This is a string, no more than 15 characters long, that +// conforms to the definition of IANA service name in RFC 6335. +// It must contains at least one letter [a-z] and it must contains only [a-z0-9-]. +// Hypens ('-') cannot be leading or trailing character of the string +// and cannot be adjacent to other hyphens. + +// ObjectMeta is metadata that all persisted resources must have, which includes all objects +// users must create. +type ObjectMeta struct { + // Name is unique within a namespace. Name is required when creating resources, although + // some resources may allow a client to request the generation of an appropriate name + // automatically. Name is primarily intended for creation idempotence and configuration + // definition. + Name string `json:"name,omitempty"` + + // GenerateName indicates that the name should be made unique by the server prior to persisting + // it. A non-empty value for the field indicates the name will be made unique (and the name + // returned to the client will be different than the name passed). The value of this field will + // be combined with a unique suffix on the server if the Name field has not been provided. + // The provided value must be valid within the rules for Name, and may be truncated by the length + // of the suffix required to make the value unique on the server. + // + // If this field is specified, and Name is not present, the server will NOT return a 409 if the + // generated name exists - instead, it will either return 201 Created or 500 with Reason + // ServerTimeout indicating a unique name could not be found in the time allotted, and the client + // should retry (optionally after the time indicated in the Retry-After header). + GenerateName string `json:"generateName,omitempty"` + + // Namespace defines the space within which name must be unique. An empty namespace is + // equivalent to the "default" namespace, but "default" is the canonical representation. + // Not all objects are required to be scoped to a namespace - the value of this field for + // those objects will be empty. + Namespace string `json:"namespace,omitempty"` + + // SelfLink is a URL representing this object. + SelfLink string `json:"selfLink,omitempty"` + + // UID is the unique in time and space value for this object. It is typically generated by + // the server on successful creation of a resource and is not allowed to change on PUT + // operations. + UID types.UID `json:"uid,omitempty"` + + // An opaque value that represents the version of this resource. May be used for optimistic + // concurrency, change detection, and the watch operation on a resource or set of resources. + // Clients must treat these values as opaque and values may only be valid for a particular + // resource or set of resources. Only servers will generate resource versions. + ResourceVersion string `json:"resourceVersion,omitempty"` + + // A sequence number representing a specific generation of the desired state. + // Populated by the system. Read-only. + Generation int64 `json:"generation,omitempty"` + + // CreationTimestamp is a timestamp representing the server time when this object was + // created. It is not guaranteed to be set in happens-before order across separate operations. + // Clients may not set this value. It is represented in RFC3339 form and is in UTC. + CreationTimestamp unversioned.Time `json:"creationTimestamp,omitempty"` + + // DeletionTimestamp is the time after which this resource will be deleted. This + // field is set by the server when a graceful deletion is requested by the user, and is not + // directly settable by a client. The resource will be deleted (no longer visible from + // resource lists, and not reachable by name) after the time in this field. Once set, this + // value may not be unset or be set further into the future, although it may be shortened + // or the resource may be deleted prior to this time. For example, a user may request that + // a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination + // signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet + // will send a hard termination signal to the container. + DeletionTimestamp *unversioned.Time `json:"deletionTimestamp,omitempty"` + + // DeletionGracePeriodSeconds records the graceful deletion value set when graceful deletion + // was requested. Represents the most recent grace period, and may only be shortened once set. + DeletionGracePeriodSeconds *int64 `json:"deletionGracePeriodSeconds,omitempty"` + + // Labels are key value pairs that may be used to scope and select individual resources. + // Label keys are of the form: + // label-key ::= prefixed-name | name + // prefixed-name ::= prefix '/' name + // prefix ::= DNS_SUBDOMAIN + // name ::= DNS_LABEL + // The prefix is optional. If the prefix is not specified, the key is assumed to be private + // to the user. Other system components that wish to use labels must specify a prefix. The + // "kubernetes.io/" prefix is reserved for use by kubernetes components. + Labels map[string]string `json:"labels,omitempty"` + + // Annotations are unstructured key value data stored with a resource that may be set by + // external tooling. They are not queryable and should be preserved when modifying + // objects. Annotation keys have the same formatting restrictions as Label keys. See the + // comments on Labels for details. + Annotations map[string]string `json:"annotations,omitempty"` + + // List of objects depended by this object. If ALL objects in the list have + // been deleted, this object will be garbage collected. If this object is managed by a controller, + // then an entry in this list will point to this controller, with the controller field set to true. + // There cannot be more than one managing controller. + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty"` + + // Must be empty before the object is deleted from the registry. Each entry + // is an identifier for the responsible component that will remove the entry + // from the list. If the deletionTimestamp of the object is non-nil, entries + // in this list can only be removed. + Finalizers []string `json:"finalizers,omitempty"` + + // The name of the cluster which the object belongs to. + // This is used to distinguish resources with same name and namespace in different clusters. + // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. + ClusterName string `json:"clusterName,omitempty"` +} + +const ( + // NamespaceDefault means the object is in the default namespace which is applied when not specified by clients + NamespaceDefault string = "default" + // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces + NamespaceAll string = "" + // NamespaceNone is the argument for a context when there is no namespace. + NamespaceNone string = "" + // NamespaceSystem is the system namespace where we place system components. + NamespaceSystem string = "kube-system" + // TerminationMessagePathDefault means the default path to capture the application termination message running in a container + TerminationMessagePathDefault string = "/dev/termination-log" +) + +// Volume represents a named volume in a pod that may be accessed by any containers in the pod. +type Volume struct { + // Required: This must be a DNS_LABEL. Each volume in a pod must have + // a unique name. + Name string `json:"name"` + // The VolumeSource represents the location and type of a volume to mount. + // This is optional for now. If not specified, the Volume is implied to be an EmptyDir. + // This implied behavior is deprecated and will be removed in a future version. + VolumeSource `json:",inline,omitempty"` +} + +// VolumeSource represents the source location of a volume to mount. +// Only one of its members may be specified. +type VolumeSource struct { + // HostPath represents file or directory on the host machine that is + // directly exposed to the container. This is generally used for system + // agents or other privileged things that are allowed to see the host + // machine. Most containers will NOT need this. + // --- + // TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not + // mount host directories as read/write. + HostPath *HostPathVolumeSource `json:"hostPath,omitempty"` + // EmptyDir represents a temporary directory that shares a pod's lifetime. + EmptyDir *EmptyDirVolumeSource `json:"emptyDir,omitempty"` + // GCEPersistentDisk represents a GCE Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + GCEPersistentDisk *GCEPersistentDiskVolumeSource `json:"gcePersistentDisk,omitempty"` + // AWSElasticBlockStore represents an AWS EBS disk that is attached to a + // kubelet's host machine and then exposed to the pod. + AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource `json:"awsElasticBlockStore,omitempty"` + // GitRepo represents a git repository at a particular revision. + GitRepo *GitRepoVolumeSource `json:"gitRepo,omitempty"` + // Secret represents a secret that should populate this volume. + Secret *SecretVolumeSource `json:"secret,omitempty"` + // NFS represents an NFS mount on the host that shares a pod's lifetime + NFS *NFSVolumeSource `json:"nfs,omitempty"` + // ISCSIVolumeSource represents an ISCSI Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty"` + // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime + Glusterfs *GlusterfsVolumeSource `json:"glusterfs,omitempty"` + // PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace + PersistentVolumeClaim *PersistentVolumeClaimVolumeSource `json:"persistentVolumeClaim,omitempty"` + // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime + RBD *RBDVolumeSource `json:"rbd,omitempty"` + + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty"` + + // FlexVolume represents a generic volume resource that is + // provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. + FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty"` + + // Cinder represents a cinder volume attached and mounted on kubelets host machine + Cinder *CinderVolumeSource `json:"cinder,omitempty"` + + // CephFS represents a Cephfs mount on the host that shares a pod's lifetime + CephFS *CephFSVolumeSource `json:"cephfs,omitempty"` + + // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running + Flocker *FlockerVolumeSource `json:"flocker,omitempty"` + + // DownwardAPI represents metadata about the pod that should populate this volume + DownwardAPI *DownwardAPIVolumeSource `json:"downwardAPI,omitempty"` + // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. + FC *FCVolumeSource `json:"fc,omitempty"` + // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. + AzureFile *AzureFileVolumeSource `json:"azureFile,omitempty"` + // ConfigMap represents a configMap that should populate this volume + ConfigMap *ConfigMapVolumeSource `json:"configMap,omitempty"` + // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine + VsphereVolume *VsphereVirtualDiskVolumeSource `json:"vsphereVolume,omitempty"` + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty"` +} + +// Similar to VolumeSource but meant for the administrator who creates PVs. +// Exactly one of its members must be set. +type PersistentVolumeSource struct { + // GCEPersistentDisk represents a GCE Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + GCEPersistentDisk *GCEPersistentDiskVolumeSource `json:"gcePersistentDisk,omitempty"` + // AWSElasticBlockStore represents an AWS EBS disk that is attached to a + // kubelet's host machine and then exposed to the pod. + AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource `json:"awsElasticBlockStore,omitempty"` + // HostPath represents a directory on the host. + // Provisioned by a developer or tester. + // This is useful for single-node development and testing only! + // On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. + HostPath *HostPathVolumeSource `json:"hostPath,omitempty"` + // Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod + Glusterfs *GlusterfsVolumeSource `json:"glusterfs,omitempty"` + // NFS represents an NFS mount on the host that shares a pod's lifetime + NFS *NFSVolumeSource `json:"nfs,omitempty"` + // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime + RBD *RBDVolumeSource `json:"rbd,omitempty"` + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty"` + // ISCSIVolumeSource represents an ISCSI resource that is attached to a + // kubelet's host machine and then exposed to the pod. + ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty"` + // FlexVolume represents a generic volume resource that is + // provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. + FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty"` + // Cinder represents a cinder volume attached and mounted on kubelets host machine + Cinder *CinderVolumeSource `json:"cinder,omitempty"` + // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime + CephFS *CephFSVolumeSource `json:"cephfs,omitempty"` + // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. + FC *FCVolumeSource `json:"fc,omitempty"` + // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running + Flocker *FlockerVolumeSource `json:"flocker,omitempty"` + // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. + AzureFile *AzureFileVolumeSource `json:"azureFile,omitempty"` + // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine + VsphereVolume *VsphereVirtualDiskVolumeSource `json:"vsphereVolume,omitempty"` + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty"` +} + +type PersistentVolumeClaimVolumeSource struct { + // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume + ClaimName string `json:"claimName"` + // Optional: Defaults to false (read/write). ReadOnly here + // will force the ReadOnly setting in VolumeMounts + ReadOnly bool `json:"readOnly,omitempty"` +} + +// +genclient=true +// +nonNamespaced=true + +type PersistentVolume struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + //Spec defines a persistent volume owned by the cluster + Spec PersistentVolumeSpec `json:"spec,omitempty"` + + // Status represents the current information about persistent volume. + Status PersistentVolumeStatus `json:"status,omitempty"` +} + +type PersistentVolumeSpec struct { + // Resources represents the actual resources of the volume + Capacity ResourceList `json:"capacity"` + // Source represents the location and type of a volume to mount. + PersistentVolumeSource `json:",inline"` + // AccessModes contains all ways the volume can be mounted + AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty"` + // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. + // ClaimRef is expected to be non-nil when bound. + // claim.VolumeName is the authoritative bind between PV and PVC. + // When set to non-nil value, PVC.Spec.Selector of the referenced PVC is + // ignored, i.e. labels of this PV do not need to match PVC selector. + ClaimRef *ObjectReference `json:"claimRef,omitempty"` + // Optional: what happens to a persistent volume when released from its claim. + PersistentVolumeReclaimPolicy PersistentVolumeReclaimPolicy `json:"persistentVolumeReclaimPolicy,omitempty"` +} + +// PersistentVolumeReclaimPolicy describes a policy for end-of-life maintenance of persistent volumes +type PersistentVolumeReclaimPolicy string + +const ( + // PersistentVolumeReclaimRecycle means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim. + // The volume plugin must support Recycling. + PersistentVolumeReclaimRecycle PersistentVolumeReclaimPolicy = "Recycle" + // PersistentVolumeReclaimDelete means the volume will be deleted from Kubernetes on release from its claim. + // The volume plugin must support Deletion. + PersistentVolumeReclaimDelete PersistentVolumeReclaimPolicy = "Delete" + // PersistentVolumeReclaimRetain means the volume will be left in its current phase (Released) for manual reclamation by the administrator. + // The default policy is Retain. + PersistentVolumeReclaimRetain PersistentVolumeReclaimPolicy = "Retain" +) + +type PersistentVolumeStatus struct { + // Phase indicates if a volume is available, bound to a claim, or released by a claim + Phase PersistentVolumePhase `json:"phase,omitempty"` + // A human-readable message indicating details about why the volume is in this state. + Message string `json:"message,omitempty"` + // Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI + Reason string `json:"reason,omitempty"` +} + +type PersistentVolumeList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + Items []PersistentVolume `json:"items"` +} + +// +genclient=true + +// PersistentVolumeClaim is a user's request for and claim to a persistent volume +type PersistentVolumeClaim struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the volume requested by a pod author + Spec PersistentVolumeClaimSpec `json:"spec,omitempty"` + + // Status represents the current information about a claim + Status PersistentVolumeClaimStatus `json:"status,omitempty"` +} + +type PersistentVolumeClaimList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + Items []PersistentVolumeClaim `json:"items"` +} + +// PersistentVolumeClaimSpec describes the common attributes of storage devices +// and allows a Source for provider-specific attributes +type PersistentVolumeClaimSpec struct { + // Contains the types of access modes required + AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty"` + // A label query over volumes to consider for binding. This selector is + // ignored when VolumeName is set + Selector *unversioned.LabelSelector `json:"selector,omitempty"` + // Resources represents the minimum resources required + Resources ResourceRequirements `json:"resources,omitempty"` + // VolumeName is the binding reference to the PersistentVolume backing this + // claim. When set to non-empty value Selector is not evaluated + VolumeName string `json:"volumeName,omitempty"` +} + +type PersistentVolumeClaimStatus struct { + // Phase represents the current phase of PersistentVolumeClaim + Phase PersistentVolumeClaimPhase `json:"phase,omitempty"` + // AccessModes contains all ways the volume backing the PVC can be mounted + AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty"` + // Represents the actual resources of the underlying volume + Capacity ResourceList `json:"capacity,omitempty"` +} + +type PersistentVolumeAccessMode string + +const ( + // can be mounted read/write mode to exactly 1 host + ReadWriteOnce PersistentVolumeAccessMode = "ReadWriteOnce" + // can be mounted in read-only mode to many hosts + ReadOnlyMany PersistentVolumeAccessMode = "ReadOnlyMany" + // can be mounted in read/write mode to many hosts + ReadWriteMany PersistentVolumeAccessMode = "ReadWriteMany" +) + +type PersistentVolumePhase string + +const ( + // used for PersistentVolumes that are not available + VolumePending PersistentVolumePhase = "Pending" + // used for PersistentVolumes that are not yet bound + // Available volumes are held by the binder and matched to PersistentVolumeClaims + VolumeAvailable PersistentVolumePhase = "Available" + // used for PersistentVolumes that are bound + VolumeBound PersistentVolumePhase = "Bound" + // used for PersistentVolumes where the bound PersistentVolumeClaim was deleted + // released volumes must be recycled before becoming available again + // this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource + VolumeReleased PersistentVolumePhase = "Released" + // used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim + VolumeFailed PersistentVolumePhase = "Failed" +) + +type PersistentVolumeClaimPhase string + +const ( + // used for PersistentVolumeClaims that are not yet bound + ClaimPending PersistentVolumeClaimPhase = "Pending" + // used for PersistentVolumeClaims that are bound + ClaimBound PersistentVolumeClaimPhase = "Bound" + // used for PersistentVolumeClaims that lost their underlying + // PersistentVolume. The claim was bound to a PersistentVolume and this + // volume does not exist any longer and all data on it was lost. + ClaimLost PersistentVolumeClaimPhase = "Lost" +) + +// Represents a host path mapped into a pod. +// Host path volumes do not support ownership management or SELinux relabeling. +type HostPathVolumeSource struct { + Path string `json:"path"` +} + +// Represents an empty directory for a pod. +// Empty directory volumes support ownership management and SELinux relabeling. +type EmptyDirVolumeSource struct { + // TODO: Longer term we want to represent the selection of underlying + // media more like a scheduling problem - user says what traits they + // need, we give them a backing store that satisfies that. For now + // this will cover the most common needs. + // Optional: what type of storage medium should back this directory. + // The default is "" which means to use the node's default medium. + Medium StorageMedium `json:"medium,omitempty"` +} + +// StorageMedium defines ways that storage can be allocated to a volume. +type StorageMedium string + +const ( + StorageMediumDefault StorageMedium = "" // use whatever the default is for the node + StorageMediumMemory StorageMedium = "Memory" // use memory (tmpfs) +) + +// Protocol defines network protocols supported for things like container ports. +type Protocol string + +const ( + // ProtocolTCP is the TCP protocol. + ProtocolTCP Protocol = "TCP" + // ProtocolUDP is the UDP protocol. + ProtocolUDP Protocol = "UDP" +) + +// Represents a Persistent Disk resource in Google Compute Engine. +// +// A GCE PD must exist before mounting to a container. The disk must +// also be in the same GCE project and zone as the kubelet. A GCE PD +// can only be mounted as read/write once or read-only many times. GCE +// PDs support ownership management and SELinux relabeling. +type GCEPersistentDiskVolumeSource struct { + // Unique name of the PD resource. Used to identify the disk in GCE + PDName string `json:"pdName"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty"` + // Optional: Partition on the disk to mount. + // If omitted, kubelet will attempt to mount the device name. + // Ex. For /dev/sda1, this field is "1", for /dev/sda, this field is 0 or empty. + Partition int32 `json:"partition,omitempty"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents an ISCSI disk. +// ISCSI volumes can only be mounted as read/write once. +// ISCSI volumes support ownership management and SELinux relabeling. +type ISCSIVolumeSource struct { + // Required: iSCSI target portal + // the portal is either an IP or ip_addr:port if port is other than default (typically TCP ports 860 and 3260) + TargetPortal string `json:"targetPortal,omitempty"` + // Required: target iSCSI Qualified Name + IQN string `json:"iqn,omitempty"` + // Required: iSCSI target lun number + Lun int32 `json:"lun,omitempty"` + // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. + ISCSIInterface string `json:"iscsiInterface,omitempty"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents a Fibre Channel volume. +// Fibre Channel volumes can only be mounted as read/write once. +// Fibre Channel volumes support ownership management and SELinux relabeling. +type FCVolumeSource struct { + // Required: FC target worldwide names (WWNs) + TargetWWNs []string `json:"targetWWNs"` + // Required: FC target lun number + Lun *int32 `json:"lun"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` +} + +// FlexVolume represents a generic volume resource that is +// provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. +type FlexVolumeSource struct { + // Driver is the name of the driver to use for this volume. + Driver string `json:"driver"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. + FSType string `json:"fsType,omitempty"` + // Optional: SecretRef is reference to the secret object containing + // sensitive information to pass to the plugin scripts. This may be + // empty if no secret object is specified. If the secret object + // contains more than one secret, all secrets are passed to the plugin + // scripts. + SecretRef *LocalObjectReference `json:"secretRef,omitempty"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` + // Optional: Extra driver options if any. + Options map[string]string `json:"options,omitempty"` +} + +// Represents a Persistent Disk resource in AWS. +// +// An AWS EBS disk must exist before mounting to a container. The disk +// must also be in the same AWS zone as the kubelet. An AWS EBS disk +// can only be mounted as read/write once. AWS EBS volumes support +// ownership management and SELinux relabeling. +type AWSElasticBlockStoreVolumeSource struct { + // Unique id of the persistent disk resource. Used to identify the disk in AWS + VolumeID string `json:"volumeID"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty"` + // Optional: Partition on the disk to mount. + // If omitted, kubelet will attempt to mount the device name. + // Ex. For /dev/sda1, this field is "1", for /dev/sda, this field is 0 or empty. + Partition int32 `json:"partition,omitempty"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents a volume that is populated with the contents of a git repository. +// Git repo volumes do not support ownership management. +// Git repo volumes support SELinux relabeling. +type GitRepoVolumeSource struct { + // Repository URL + Repository string `json:"repository"` + // Commit hash, this is optional + Revision string `json:"revision,omitempty"` + // Clone target, this is optional + // Must not contain or start with '..'. If '.' is supplied, the volume directory will be the + // git repository. Otherwise, if specified, the volume will contain the git repository in + // the subdirectory with the given name. + Directory string `json:"directory,omitempty"` + // TODO: Consider credentials here. +} + +// Adapts a Secret into a volume. +// +// The contents of the target Secret's Data field will be presented in a volume +// as files using the keys in the Data field as the file names. +// Secret volumes support ownership management and SELinux relabeling. +type SecretVolumeSource struct { + // Name of the secret in the pod's namespace to use. + SecretName string `json:"secretName,omitempty"` + // If unspecified, each key-value pair in the Data field of the referenced + // Secret will be projected into the volume as a file whose name is the + // key and content is the value. If specified, the listed keys will be + // projected into the specified paths, and unlisted keys will not be + // present. If a key is specified which is not present in the Secret, + // the volume setup will error. Paths must be relative and may not contain + // the '..' path or start with '..'. + Items []KeyToPath `json:"items,omitempty"` + // Mode bits to use on created files by default. Must be a value between + // 0 and 0777. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty"` +} + +// Represents an NFS mount that lasts the lifetime of a pod. +// NFS volumes do not support ownership management or SELinux relabeling. +type NFSVolumeSource struct { + // Server is the hostname or IP address of the NFS server + Server string `json:"server"` + + // Path is the exported NFS share + Path string `json:"path"` + + // Optional: Defaults to false (read/write). ReadOnly here will force + // the NFS export to be mounted with read-only permissions + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents a Quobyte mount that lasts the lifetime of a pod. +// Quobyte volumes do not support ownership management or SELinux relabeling. +type QuobyteVolumeSource struct { + // Registry represents a single or multiple Quobyte Registry services + // specified as a string as host:port pair (multiple entries are separated with commas) + // which acts as the central registry for volumes + Registry string `json:"registry"` + + // Volume is a string that references an already created Quobyte volume by name. + Volume string `json:"volume"` + + // Defaults to false (read/write). ReadOnly here will force + // the Quobyte to be mounted with read-only permissions + ReadOnly bool `json:"readOnly,omitempty"` + + // User to map volume access to + // Defaults to the root user + User string `json:"user,omitempty"` + + // Group to map volume access to + // Default is no group + Group string `json:"group,omitempty"` +} + +// Represents a Glusterfs mount that lasts the lifetime of a pod. +// Glusterfs volumes do not support ownership management or SELinux relabeling. +type GlusterfsVolumeSource struct { + // Required: EndpointsName is the endpoint name that details Glusterfs topology + EndpointsName string `json:"endpoints"` + + // Required: Path is the Glusterfs volume path + Path string `json:"path"` + + // Optional: Defaults to false (read/write). ReadOnly here will force + // the Glusterfs to be mounted with read-only permissions + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents a Rados Block Device mount that lasts the lifetime of a pod. +// RBD volumes support ownership management and SELinux relabeling. +type RBDVolumeSource struct { + // Required: CephMonitors is a collection of Ceph monitors + CephMonitors []string `json:"monitors"` + // Required: RBDImage is the rados image name + RBDImage string `json:"image"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty"` + // Optional: RadosPool is the rados pool name,default is rbd + RBDPool string `json:"pool,omitempty"` + // Optional: RBDUser is the rados user name, default is admin + RadosUser string `json:"user,omitempty"` + // Optional: Keyring is the path to key ring for RBDUser, default is /etc/ceph/keyring + Keyring string `json:"keyring,omitempty"` + // Optional: SecretRef is name of the authentication secret for RBDUser, default is nil. + SecretRef *LocalObjectReference `json:"secretRef,omitempty"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents a cinder volume resource in Openstack. A Cinder volume +// must exist before mounting to a container. The volume must also be +// in the same region as the kubelet. Cinder volumes support ownership +// management and SELinux relabeling. +type CinderVolumeSource struct { + // Unique id of the volume used to identify the cinder volume + VolumeID string `json:"volumeID"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + FSType string `json:"fsType,omitempty"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents a Ceph Filesystem mount that lasts the lifetime of a pod +// Cephfs volumes do not support ownership management or SELinux relabeling. +type CephFSVolumeSource struct { + // Required: Monitors is a collection of Ceph monitors + Monitors []string `json:"monitors"` + // Optional: Used as the mounted root, rather than the full Ceph tree, default is / + Path string `json:"path,omitempty"` + // Optional: User is the rados user name, default is admin + User string `json:"user,omitempty"` + // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret + SecretFile string `json:"secretFile,omitempty"` + // Optional: SecretRef is reference to the authentication secret for User, default is empty. + SecretRef *LocalObjectReference `json:"secretRef,omitempty"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents a Flocker volume mounted by the Flocker agent. +// Flocker volumes do not support ownership management or SELinux relabeling. +type FlockerVolumeSource struct { + // Required: the volume name. This is going to be store on metadata -> name on the payload for Flocker + DatasetName string `json:"datasetName"` +} + +// Represents a volume containing downward API info. +// Downward API volumes support ownership management and SELinux relabeling. +type DownwardAPIVolumeSource struct { + // Items is a list of DownwardAPIVolume file + Items []DownwardAPIVolumeFile `json:"items,omitempty"` + // Mode bits to use on created files by default. Must be a value between + // 0 and 0777. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty"` +} + +// Represents a single file containing information from the downward API +type DownwardAPIVolumeFile struct { + // Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..' + Path string `json:"path"` + // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported. + FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty"` + // Selects a resource of the container: only resources limits and requests + // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. + ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty"` + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty"` +} + +// AzureFile represents an Azure File Service mount on the host and bind mount to the pod. +type AzureFileVolumeSource struct { + // the name of secret that contains Azure Storage Account Name and Key + SecretName string `json:"secretName"` + // Share Name + ShareName string `json:"shareName"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty"` +} + +// Represents a vSphere volume resource. +type VsphereVirtualDiskVolumeSource struct { + // Path that identifies vSphere volume vmdk + VolumePath string `json:"volumePath"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + FSType string `json:"fsType,omitempty"` +} + +type AzureDataDiskCachingMode string + +const ( + AzureDataDiskCachingNone AzureDataDiskCachingMode = "None" + AzureDataDiskCachingReadOnly AzureDataDiskCachingMode = "ReadOnly" + AzureDataDiskCachingReadWrite AzureDataDiskCachingMode = "ReadWrite" +) + +// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. +type AzureDiskVolumeSource struct { + // The Name of the data disk in the blob storage + DiskName string `json:"diskName"` + // The URI the the data disk in the blob storage + DataDiskURI string `json:"diskURI"` + // Host Caching mode: None, Read Only, Read Write. + CachingMode *AzureDataDiskCachingMode `json:"cachingMode,omitempty"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + FSType *string `json:"fsType,omitempty"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly *bool `json:"readOnly,omitempty"` +} + +// Adapts a ConfigMap into a volume. +// +// The contents of the target ConfigMap's Data field will be presented in a +// volume as files using the keys in the Data field as the file names, unless +// the items element is populated with specific mappings of keys to paths. +// ConfigMap volumes support ownership management and SELinux relabeling. +type ConfigMapVolumeSource struct { + LocalObjectReference `json:",inline"` + // If unspecified, each key-value pair in the Data field of the referenced + // ConfigMap will be projected into the volume as a file whose name is the + // key and content is the value. If specified, the listed keys will be + // projected into the specified paths, and unlisted keys will not be + // present. If a key is specified which is not present in the ConfigMap, + // the volume setup will error. Paths must be relative and may not contain + // the '..' path or start with '..'. + Items []KeyToPath `json:"items,omitempty"` + // Mode bits to use on created files by default. Must be a value between + // 0 and 0777. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty"` +} + +// Maps a string key to a path within a volume. +type KeyToPath struct { + // The key to project. + Key string `json:"key"` + + // The relative path of the file to map the key to. + // May not be an absolute path. + // May not contain the path element '..'. + // May not start with the string '..'. + Path string `json:"path"` + // Optional: mode bits to use on this file, should be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty"` +} + +// ContainerPort represents a network port in a single container +type ContainerPort struct { + // Optional: If specified, this must be an IANA_SVC_NAME Each named port + // in a pod must have a unique name. + Name string `json:"name,omitempty"` + // Optional: If specified, this must be a valid port number, 0 < x < 65536. + // If HostNetwork is specified, this must match ContainerPort. + HostPort int32 `json:"hostPort,omitempty"` + // Required: This must be a valid port number, 0 < x < 65536. + ContainerPort int32 `json:"containerPort"` + // Required: Supports "TCP" and "UDP". + Protocol Protocol `json:"protocol,omitempty"` + // Optional: What host IP to bind the external port to. + HostIP string `json:"hostIP,omitempty"` +} + +// VolumeMount describes a mounting of a Volume within a container. +type VolumeMount struct { + // Required: This must match the Name of a Volume [above]. + Name string `json:"name"` + // Optional: Defaults to false (read-write). + ReadOnly bool `json:"readOnly,omitempty"` + // Required. Must not contain ':'. + MountPath string `json:"mountPath"` + // Path within the volume from which the container's volume should be mounted. + // Defaults to "" (volume's root). + SubPath string `json:"subPath,omitempty"` +} + +// EnvVar represents an environment variable present in a Container. +type EnvVar struct { + // Required: This must be a C_IDENTIFIER. + Name string `json:"name"` + // Optional: no more than one of the following may be specified. + // Optional: Defaults to ""; variable references $(VAR_NAME) are expanded + // using the previous defined environment variables in the container and + // any service environment variables. If a variable cannot be resolved, + // the reference in the input string will be unchanged. The $(VAR_NAME) + // syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped + // references will never be expanded, regardless of whether the variable + // exists or not. + Value string `json:"value,omitempty"` + // Optional: Specifies a source the value of this var should come from. + ValueFrom *EnvVarSource `json:"valueFrom,omitempty"` +} + +// EnvVarSource represents a source for the value of an EnvVar. +// Only one of its fields may be set. +type EnvVarSource struct { + // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, + // spec.nodeName, spec.serviceAccountName, status.podIP. + FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty"` + // Selects a resource of the container: only resources limits and requests + // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. + ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty"` + // Selects a key of a ConfigMap. + ConfigMapKeyRef *ConfigMapKeySelector `json:"configMapKeyRef,omitempty"` + // Selects a key of a secret in the pod's namespace. + SecretKeyRef *SecretKeySelector `json:"secretKeyRef,omitempty"` +} + +// ObjectFieldSelector selects an APIVersioned field of an object. +type ObjectFieldSelector struct { + // Required: Version of the schema the FieldPath is written in terms of. + // If no value is specified, it will be defaulted to the APIVersion of the + // enclosing object. + APIVersion string `json:"apiVersion"` + // Required: Path of the field to select in the specified API version + FieldPath string `json:"fieldPath"` +} + +// ResourceFieldSelector represents container resources (cpu, memory) and their output format +type ResourceFieldSelector struct { + // Container name: required for volumes, optional for env vars + ContainerName string `json:"containerName,omitempty"` + // Required: resource to select + Resource string `json:"resource"` + // Specifies the output format of the exposed resources, defaults to "1" + Divisor resource.Quantity `json:"divisor,omitempty"` +} + +// Selects a key from a ConfigMap. +type ConfigMapKeySelector struct { + // The ConfigMap to select from. + LocalObjectReference `json:",inline"` + // The key to select. + Key string `json:"key"` +} + +// SecretKeySelector selects a key of a Secret. +type SecretKeySelector struct { + // The name of the secret in the pod's namespace to select from. + LocalObjectReference `json:",inline"` + // The key of the secret to select from. Must be a valid secret key. + Key string `json:"key"` +} + +// HTTPHeader describes a custom header to be used in HTTP probes +type HTTPHeader struct { + // The header field name + Name string `json:"name"` + // The header field value + Value string `json:"value"` +} + +// HTTPGetAction describes an action based on HTTP Get requests. +type HTTPGetAction struct { + // Optional: Path to access on the HTTP server. + Path string `json:"path,omitempty"` + // Required: Name or number of the port to access on the container. + Port intstr.IntOrString `json:"port,omitempty"` + // Optional: Host name to connect to, defaults to the pod IP. You + // probably want to set "Host" in httpHeaders instead. + Host string `json:"host,omitempty"` + // Optional: Scheme to use for connecting to the host, defaults to HTTP. + Scheme URIScheme `json:"scheme,omitempty"` + // Optional: Custom headers to set in the request. HTTP allows repeated headers. + HTTPHeaders []HTTPHeader `json:"httpHeaders,omitempty"` +} + +// URIScheme identifies the scheme used for connection to a host for Get actions +type URIScheme string + +const ( + // URISchemeHTTP means that the scheme used will be http:// + URISchemeHTTP URIScheme = "HTTP" + // URISchemeHTTPS means that the scheme used will be https:// + URISchemeHTTPS URIScheme = "HTTPS" +) + +// TCPSocketAction describes an action based on opening a socket +type TCPSocketAction struct { + // Required: Port to connect to. + Port intstr.IntOrString `json:"port,omitempty"` +} + +// ExecAction describes a "run in container" action. +type ExecAction struct { + // Command is the command line to execute inside the container, the working directory for the + // command is root ('/') in the container's filesystem. The command is simply exec'd, it is + // not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use + // a shell, you need to explicitly call out to that shell. + Command []string `json:"command,omitempty"` +} + +// Probe describes a health check to be performed against a container to determine whether it is +// alive or ready to receive traffic. +type Probe struct { + // The action taken to determine the health of a container + Handler `json:",inline"` + // Length of time before health checking is activated. In seconds. + InitialDelaySeconds int32 `json:"initialDelaySeconds,omitempty"` + // Length of time before health checking times out. In seconds. + TimeoutSeconds int32 `json:"timeoutSeconds,omitempty"` + // How often (in seconds) to perform the probe. + PeriodSeconds int32 `json:"periodSeconds,omitempty"` + // Minimum consecutive successes for the probe to be considered successful after having failed. + // Must be 1 for liveness. + SuccessThreshold int32 `json:"successThreshold,omitempty"` + // Minimum consecutive failures for the probe to be considered failed after having succeeded. + FailureThreshold int32 `json:"failureThreshold,omitempty"` +} + +// PullPolicy describes a policy for if/when to pull a container image +type PullPolicy string + +const ( + // PullAlways means that kubelet always attempts to pull the latest image. Container will fail If the pull fails. + PullAlways PullPolicy = "Always" + // PullNever means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present + PullNever PullPolicy = "Never" + // PullIfNotPresent means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails. + PullIfNotPresent PullPolicy = "IfNotPresent" +) + +// Capability represent POSIX capabilities type +type Capability string + +// Capabilities represent POSIX capabilities that can be added or removed to a running container. +type Capabilities struct { + // Added capabilities + Add []Capability `json:"add,omitempty"` + // Removed capabilities + Drop []Capability `json:"drop,omitempty"` +} + +// ResourceRequirements describes the compute resource requirements. +type ResourceRequirements struct { + // Limits describes the maximum amount of compute resources allowed. + Limits ResourceList `json:"limits,omitempty"` + // Requests describes the minimum amount of compute resources required. + // If Request is omitted for a container, it defaults to Limits if that is explicitly specified, + // otherwise to an implementation-defined value + Requests ResourceList `json:"requests,omitempty"` +} + +// Container represents a single container that is expected to be run on the host. +type Container struct { + // Required: This must be a DNS_LABEL. Each container in a pod must + // have a unique name. + Name string `json:"name"` + // Required. + Image string `json:"image"` + // Optional: The docker image's entrypoint is used if this is not provided; cannot be updated. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + Command []string `json:"command,omitempty"` + // Optional: The docker image's cmd is used if this is not provided; cannot be updated. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + Args []string `json:"args,omitempty"` + // Optional: Defaults to Docker's default. + WorkingDir string `json:"workingDir,omitempty"` + Ports []ContainerPort `json:"ports,omitempty"` + Env []EnvVar `json:"env,omitempty"` + // Compute resource requirements. + Resources ResourceRequirements `json:"resources,omitempty"` + VolumeMounts []VolumeMount `json:"volumeMounts,omitempty"` + LivenessProbe *Probe `json:"livenessProbe,omitempty"` + ReadinessProbe *Probe `json:"readinessProbe,omitempty"` + Lifecycle *Lifecycle `json:"lifecycle,omitempty"` + // Required. + TerminationMessagePath string `json:"terminationMessagePath,omitempty"` + // Required: Policy for pulling images for this container + ImagePullPolicy PullPolicy `json:"imagePullPolicy"` + // Optional: SecurityContext defines the security options the container should be run with. + // If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext. + SecurityContext *SecurityContext `json:"securityContext,omitempty"` + + // Variables for interactive containers, these have very specialized use-cases (e.g. debugging) + // and shouldn't be used for general purpose containers. + Stdin bool `json:"stdin,omitempty"` + StdinOnce bool `json:"stdinOnce,omitempty"` + TTY bool `json:"tty,omitempty"` +} + +// Handler defines a specific action that should be taken +// TODO: pass structured data to these actions, and document that data here. +type Handler struct { + // One and only one of the following should be specified. + // Exec specifies the action to take. + Exec *ExecAction `json:"exec,omitempty"` + // HTTPGet specifies the http request to perform. + HTTPGet *HTTPGetAction `json:"httpGet,omitempty"` + // TCPSocket specifies an action involving a TCP port. + // TODO: implement a realistic TCP lifecycle hook + TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty"` +} + +// Lifecycle describes actions that the management system should take in response to container lifecycle +// events. For the PostStart and PreStop lifecycle handlers, management of the container blocks +// until the action is complete, unless the container process fails, in which case the handler is aborted. +type Lifecycle struct { + // PostStart is called immediately after a container is created. If the handler fails, the container + // is terminated and restarted. + PostStart *Handler `json:"postStart,omitempty"` + // PreStop is called immediately before a container is terminated. The reason for termination is + // passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. + PreStop *Handler `json:"preStop,omitempty"` +} + +// The below types are used by kube_client and api_server. + +type ConditionStatus string + +// These are valid condition statuses. "ConditionTrue" means a resource is in the condition; +// "ConditionFalse" means a resource is not in the condition; "ConditionUnknown" means kubernetes +// can't decide if a resource is in the condition or not. In the future, we could add other +// intermediate conditions, e.g. ConditionDegraded. +const ( + ConditionTrue ConditionStatus = "True" + ConditionFalse ConditionStatus = "False" + ConditionUnknown ConditionStatus = "Unknown" +) + +type ContainerStateWaiting struct { + // A brief CamelCase string indicating details about why the container is in waiting state. + Reason string `json:"reason,omitempty"` + // A human-readable message indicating details about why the container is in waiting state. + Message string `json:"message,omitempty"` +} + +type ContainerStateRunning struct { + StartedAt unversioned.Time `json:"startedAt,omitempty"` +} + +type ContainerStateTerminated struct { + ExitCode int32 `json:"exitCode"` + Signal int32 `json:"signal,omitempty"` + Reason string `json:"reason,omitempty"` + Message string `json:"message,omitempty"` + StartedAt unversioned.Time `json:"startedAt,omitempty"` + FinishedAt unversioned.Time `json:"finishedAt,omitempty"` + ContainerID string `json:"containerID,omitempty"` +} + +// ContainerState holds a possible state of container. +// Only one of its members may be specified. +// If none of them is specified, the default one is ContainerStateWaiting. +type ContainerState struct { + Waiting *ContainerStateWaiting `json:"waiting,omitempty"` + Running *ContainerStateRunning `json:"running,omitempty"` + Terminated *ContainerStateTerminated `json:"terminated,omitempty"` +} + +type ContainerStatus struct { + // Each container in a pod must have a unique name. + Name string `json:"name"` + State ContainerState `json:"state,omitempty"` + LastTerminationState ContainerState `json:"lastState,omitempty"` + // Ready specifies whether the container has passed its readiness check. + Ready bool `json:"ready"` + // Note that this is calculated from dead containers. But those containers are subject to + // garbage collection. This value will get capped at 5 by GC. + RestartCount int32 `json:"restartCount"` + Image string `json:"image"` + ImageID string `json:"imageID"` + ContainerID string `json:"containerID,omitempty"` +} + +// PodPhase is a label for the condition of a pod at the current time. +type PodPhase string + +// These are the valid statuses of pods. +const ( + // PodPending means the pod has been accepted by the system, but one or more of the containers + // has not been started. This includes time before being bound to a node, as well as time spent + // pulling images onto the host. + PodPending PodPhase = "Pending" + // PodRunning means the pod has been bound to a node and all of the containers have been started. + // At least one container is still running or is in the process of being restarted. + PodRunning PodPhase = "Running" + // PodSucceeded means that all containers in the pod have voluntarily terminated + // with a container exit code of 0, and the system is not going to restart any of these containers. + PodSucceeded PodPhase = "Succeeded" + // PodFailed means that all containers in the pod have terminated, and at least one container has + // terminated in a failure (exited with a non-zero exit code or was stopped by the system). + PodFailed PodPhase = "Failed" + // PodUnknown means that for some reason the state of the pod could not be obtained, typically due + // to an error in communicating with the host of the pod. + PodUnknown PodPhase = "Unknown" +) + +type PodConditionType string + +// These are valid conditions of pod. +const ( + // PodScheduled represents status of the scheduling process for this pod. + PodScheduled PodConditionType = "PodScheduled" + // PodReady means the pod is able to service requests and should be added to the + // load balancing pools of all matching services. + PodReady PodConditionType = "Ready" + // PodInitialized means that all init containers in the pod have started successfully. + PodInitialized PodConditionType = "Initialized" +) + +type PodCondition struct { + Type PodConditionType `json:"type"` + Status ConditionStatus `json:"status"` + LastProbeTime unversioned.Time `json:"lastProbeTime,omitempty"` + LastTransitionTime unversioned.Time `json:"lastTransitionTime,omitempty"` + Reason string `json:"reason,omitempty"` + Message string `json:"message,omitempty"` +} + +// RestartPolicy describes how the container should be restarted. +// Only one of the following restart policies may be specified. +// If none of the following policies is specified, the default one +// is RestartPolicyAlways. +type RestartPolicy string + +const ( + RestartPolicyAlways RestartPolicy = "Always" + RestartPolicyOnFailure RestartPolicy = "OnFailure" + RestartPolicyNever RestartPolicy = "Never" +) + +// PodList is a list of Pods. +type PodList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []Pod `json:"items"` +} + +// DNSPolicy defines how a pod's DNS will be configured. +type DNSPolicy string + +const ( + // DNSClusterFirst indicates that the pod should use cluster DNS + // first, if it is available, then fall back on the default (as + // determined by kubelet) DNS settings. + DNSClusterFirst DNSPolicy = "ClusterFirst" + + // DNSDefault indicates that the pod should use the default (as + // determined by kubelet) DNS settings. + DNSDefault DNSPolicy = "Default" +) + +// A node selector represents the union of the results of one or more label queries +// over a set of nodes; that is, it represents the OR of the selectors represented +// by the node selector terms. +type NodeSelector struct { + //Required. A list of node selector terms. The terms are ORed. + NodeSelectorTerms []NodeSelectorTerm `json:"nodeSelectorTerms"` +} + +// A null or empty node selector term matches no objects. +type NodeSelectorTerm struct { + //Required. A list of node selector requirements. The requirements are ANDed. + MatchExpressions []NodeSelectorRequirement `json:"matchExpressions"` +} + +// A node selector requirement is a selector that contains values, a key, and an operator +// that relates the key and values. +type NodeSelectorRequirement struct { + // The label key that the selector applies to. + Key string `json:"key" patchStrategy:"merge" patchMergeKey:"key"` + // Represents a key's relationship to a set of values. + // Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + Operator NodeSelectorOperator `json:"operator"` + // An array of string values. If the operator is In or NotIn, + // the values array must be non-empty. If the operator is Exists or DoesNotExist, + // the values array must be empty. If the operator is Gt or Lt, the values + // array must have a single element, which will be interpreted as an integer. + // This array is replaced during a strategic merge patch. + Values []string `json:"values,omitempty"` +} + +// A node selector operator is the set of operators that can be used in +// a node selector requirement. +type NodeSelectorOperator string + +const ( + NodeSelectorOpIn NodeSelectorOperator = "In" + NodeSelectorOpNotIn NodeSelectorOperator = "NotIn" + NodeSelectorOpExists NodeSelectorOperator = "Exists" + NodeSelectorOpDoesNotExist NodeSelectorOperator = "DoesNotExist" + NodeSelectorOpGt NodeSelectorOperator = "Gt" + NodeSelectorOpLt NodeSelectorOperator = "Lt" +) + +// Affinity is a group of affinity scheduling rules. +type Affinity struct { + // Describes node affinity scheduling rules for the pod. + NodeAffinity *NodeAffinity `json:"nodeAffinity,omitempty"` + // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). + PodAffinity *PodAffinity `json:"podAffinity,omitempty"` + // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). + PodAntiAffinity *PodAntiAffinity `json:"podAntiAffinity,omitempty"` +} + +// Pod affinity is a group of inter pod affinity scheduling rules. +type PodAffinity struct { + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system will try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system may or may not try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + RequiredDuringSchedulingIgnoredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty"` + // The scheduler will prefer to schedule pods to nodes that satisfy + // the affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the + // node(s) with the highest sum are the most preferred. + PreferredDuringSchedulingIgnoredDuringExecution []WeightedPodAffinityTerm `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty"` +} + +// Pod anti affinity is a group of inter pod anti affinity scheduling rules. +type PodAntiAffinity struct { + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // If the anti-affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the anti-affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system will try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` + // If the anti-affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the anti-affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system may or may not try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + RequiredDuringSchedulingIgnoredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty"` + // The scheduler will prefer to schedule pods to nodes that satisfy + // the anti-affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling anti-affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the + // node(s) with the highest sum are the most preferred. + PreferredDuringSchedulingIgnoredDuringExecution []WeightedPodAffinityTerm `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty"` +} + +// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) +type WeightedPodAffinityTerm struct { + // weight associated with matching the corresponding podAffinityTerm, + // in the range 1-100. + Weight int `json:"weight"` + // Required. A pod affinity term, associated with the corresponding weight. + PodAffinityTerm PodAffinityTerm `json:"podAffinityTerm"` +} + +// Defines a set of pods (namely those matching the labelSelector +// relative to the given namespace(s)) that this pod should be +// co-located (affinity) or not co-located (anti-affinity) with, +// where co-located is defined as running on a node whose value of +// the label with key matches that of any node on which +// a pod of the set of pods is running. +type PodAffinityTerm struct { + // A label query over a set of resources, in this case pods. + LabelSelector *unversioned.LabelSelector `json:"labelSelector,omitempty"` + // namespaces specifies which namespaces the labelSelector applies to (matches against); + // nil list means "this pod's namespace," empty list means "all namespaces" + // The json tag here is not "omitempty" since we need to distinguish nil and empty. + // See https://golang.org/pkg/encoding/json/#Marshal for more details. + Namespaces []string `json:"namespaces"` + // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching + // the labelSelector in the specified namespaces, where co-located is defined as running on a node + // whose value of the label with key topologyKey matches that of any node on which any of the + // selected pods is running. + // For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as "all topologies" + // ("all topologies" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); + // for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed. + TopologyKey string `json:"topologyKey,omitempty"` +} + +// Node affinity is a group of node affinity scheduling rules. +type NodeAffinity struct { + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to an update), the system + // will try to eventually evict the pod from its node. + // RequiredDuringSchedulingRequiredDuringExecution *NodeSelector `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` + + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to an update), the system + // may or may not try to eventually evict the pod from its node. + RequiredDuringSchedulingIgnoredDuringExecution *NodeSelector `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty"` + // The scheduler will prefer to schedule pods to nodes that satisfy + // the affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node matches the corresponding matchExpressions; the + // node(s) with the highest sum are the most preferred. + PreferredDuringSchedulingIgnoredDuringExecution []PreferredSchedulingTerm `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty"` +} + +// An empty preferred scheduling term matches all objects with implicit weight 0 +// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). +type PreferredSchedulingTerm struct { + // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. + Weight int32 `json:"weight"` + // A node selector term, associated with the corresponding weight. + Preference NodeSelectorTerm `json:"preference"` +} + +// The node this Taint is attached to has the effect "effect" on +// any pod that that does not tolerate the Taint. +type Taint struct { + // Required. The taint key to be applied to a node. + Key string `json:"key" patchStrategy:"merge" patchMergeKey:"key"` + // Required. The taint value corresponding to the taint key. + Value string `json:"value,omitempty"` + // Required. The effect of the taint on pods + // that do not tolerate the taint. + // Valid effects are NoSchedule and PreferNoSchedule. + Effect TaintEffect `json:"effect"` +} + +type TaintEffect string + +const ( + // Do not allow new pods to schedule onto the node unless they tolerate the taint, + // but allow all pods submitted to Kubelet without going through the scheduler + // to start, and allow all already-running pods to continue running. + // Enforced by the scheduler. + TaintEffectNoSchedule TaintEffect = "NoSchedule" + // Like TaintEffectNoSchedule, but the scheduler tries not to schedule + // new pods onto the node, rather than prohibiting new pods from scheduling + // onto the node entirely. Enforced by the scheduler. + TaintEffectPreferNoSchedule TaintEffect = "PreferNoSchedule" + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // Do not allow new pods to schedule onto the node unless they tolerate the taint, + // do not allow pods to start on Kubelet unless they tolerate the taint, + // but allow all already-running pods to continue running. + // Enforced by the scheduler and Kubelet. + // TaintEffectNoScheduleNoAdmit TaintEffect = "NoScheduleNoAdmit" + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // Do not allow new pods to schedule onto the node unless they tolerate the taint, + // do not allow pods to start on Kubelet unless they tolerate the taint, + // and evict any already-running pods that do not tolerate the taint. + // Enforced by the scheduler and Kubelet. + // TaintEffectNoScheduleNoAdmitNoExecute = "NoScheduleNoAdmitNoExecute" +) + +// The pod this Toleration is attached to tolerates any taint that matches +// the triple using the matching operator . +type Toleration struct { + // Required. Key is the taint key that the toleration applies to. + Key string `json:"key,omitempty" patchStrategy:"merge" patchMergeKey:"key"` + // operator represents a key's relationship to the value. + // Valid operators are Exists and Equal. Defaults to Equal. + // Exists is equivalent to wildcard for value, so that a pod can + // tolerate all taints of a particular category. + Operator TolerationOperator `json:"operator,omitempty"` + // Value is the taint value the toleration matches to. + // If the operator is Exists, the value should be empty, otherwise just a regular string. + Value string `json:"value,omitempty"` + // Effect indicates the taint effect to match. Empty means match all taint effects. + // When specified, allowed values are NoSchedule and PreferNoSchedule. + Effect TaintEffect `json:"effect,omitempty"` + // TODO: For forgiveness (#1574), we'd eventually add at least a grace period + // here, and possibly an occurrence threshold and period. +} + +// A toleration operator is the set of operators that can be used in a toleration. +type TolerationOperator string + +const ( + TolerationOpExists TolerationOperator = "Exists" + TolerationOpEqual TolerationOperator = "Equal" +) + +// PodSpec is a description of a pod +type PodSpec struct { + Volumes []Volume `json:"volumes"` + // List of initialization containers belonging to the pod. + InitContainers []Container `json:"-"` + // List of containers belonging to the pod. + Containers []Container `json:"containers"` + RestartPolicy RestartPolicy `json:"restartPolicy,omitempty"` + // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. + // Value must be non-negative integer. The value zero indicates delete immediately. + // If this value is nil, the default grace period will be used instead. + // The grace period is the duration in seconds after the processes running in the pod are sent + // a termination signal and the time when the processes are forcibly halted with a kill signal. + // Set this value longer than the expected cleanup time for your process. + TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"` + // Optional duration in seconds relative to the StartTime that the pod may be active on a node + // before the system actively tries to terminate the pod; value must be positive integer + ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty"` + // Required: Set DNS policy. + DNSPolicy DNSPolicy `json:"dnsPolicy,omitempty"` + // NodeSelector is a selector which must be true for the pod to fit on a node + NodeSelector map[string]string `json:"nodeSelector,omitempty"` + + // ServiceAccountName is the name of the ServiceAccount to use to run this pod + // The pod will be allowed to use secrets referenced by the ServiceAccount + ServiceAccountName string `json:"serviceAccountName"` + + // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, + // the scheduler simply schedules this pod onto that node, assuming that it fits resource + // requirements. + NodeName string `json:"nodeName,omitempty"` + // SecurityContext holds pod-level security attributes and common container settings. + // Optional: Defaults to empty. See type description for default values of each field. + SecurityContext *PodSecurityContext `json:"securityContext,omitempty"` + // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. + // If specified, these secrets will be passed to individual puller implementations for them to use. For example, + // in the case of docker, only DockerConfig type secrets are honored. + ImagePullSecrets []LocalObjectReference `json:"imagePullSecrets,omitempty"` + // Specifies the hostname of the Pod. + // If not specified, the pod's hostname will be set to a system-defined value. + Hostname string `json:"hostname,omitempty"` + // If specified, the fully qualified Pod hostname will be "...svc.". + // If not specified, the pod will not have a domainname at all. + Subdomain string `json:"subdomain,omitempty"` +} + +// Sysctl defines a kernel parameter to be set +type Sysctl struct { + // Name of a property to set + Name string `json:"name"` + // Value of a property to set + Value string `json:"value"` +} + +// PodSecurityContext holds pod-level security attributes and common container settings. +// Some fields are also present in container.securityContext. Field values of +// container.securityContext take precedence over field values of PodSecurityContext. +type PodSecurityContext struct { + // Use the host's network namespace. If this option is set, the ports that will be + // used must be specified. + // Optional: Default to false + // +k8s:conversion-gen=false + HostNetwork bool `json:"hostNetwork,omitempty"` + // Use the host's pid namespace. + // Optional: Default to false. + // +k8s:conversion-gen=false + HostPID bool `json:"hostPID,omitempty"` + // Use the host's ipc namespace. + // Optional: Default to false. + // +k8s:conversion-gen=false + HostIPC bool `json:"hostIPC,omitempty"` + // The SELinux context to be applied to all containers. + // If unspecified, the container runtime will allocate a random SELinux context for each + // container. May also be set in SecurityContext. If set in + // both SecurityContext and PodSecurityContext, the value specified in SecurityContext + // takes precedence for that container. + SELinuxOptions *SELinuxOptions `json:"seLinuxOptions,omitempty"` + // The UID to run the entrypoint of the container process. + // Defaults to user specified in image metadata if unspecified. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence + // for that container. + RunAsUser *int64 `json:"runAsUser,omitempty"` + // Indicates that the container must run as a non-root user. + // If true, the Kubelet will validate the image at runtime to ensure that it + // does not run as UID 0 (root) and fail to start the container if it does. + // If unset or false, no such validation will be performed. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + RunAsNonRoot *bool `json:"runAsNonRoot,omitempty"` + // A list of groups applied to the first process run in each container, in addition + // to the container's primary GID. If unspecified, no groups will be added to + // any container. + SupplementalGroups []int64 `json:"supplementalGroups,omitempty"` + // A special supplemental group that applies to all containers in a pod. + // Some volume types allow the Kubelet to change the ownership of that volume + // to be owned by the pod: + // + // 1. The owning GID will be the FSGroup + // 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) + // 3. The permission bits are OR'd with rw-rw---- + // + // If unset, the Kubelet will not modify the ownership and permissions of any volume. + FSGroup *int64 `json:"fsGroup,omitempty"` +} + +// PodStatus represents information about the status of a pod. Status may trail the actual +// state of a system. +type PodStatus struct { + Phase PodPhase `json:"phase,omitempty"` + Conditions []PodCondition `json:"conditions,omitempty"` + // A human readable message indicating details about why the pod is in this state. + Message string `json:"message,omitempty"` + // A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk' + Reason string `json:"reason,omitempty"` + + HostIP string `json:"hostIP,omitempty"` + PodIP string `json:"podIP,omitempty"` + + // Date and time at which the object was acknowledged by the Kubelet. + // This is before the Kubelet pulled the container image(s) for the pod. + StartTime *unversioned.Time `json:"startTime,omitempty"` + + // The list has one entry per init container in the manifest. The most recent successful + // init container will have ready = true, the most recently started container will have + // startTime set. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/pod-states.md#container-statuses + InitContainerStatuses []ContainerStatus `json:"-"` + // The list has one entry per container in the manifest. Each entry is + // currently the output of `docker inspect`. This output format is *not* + // final and should not be relied upon. + // TODO: Make real decisions about what our info should look like. Re-enable fuzz test + // when we have done this. + ContainerStatuses []ContainerStatus `json:"containerStatuses,omitempty"` +} + +// PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded +type PodStatusResult struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + // Status represents the current information about a pod. This data may not be up + // to date. + Status PodStatus `json:"status,omitempty"` +} + +// +genclient=true + +// Pod is a collection of containers, used as either input (create, update) or as output (list, get). +type Pod struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the behavior of a pod. + Spec PodSpec `json:"spec,omitempty"` + + // Status represents the current information about a pod. This data may not be up + // to date. + Status PodStatus `json:"status,omitempty"` +} + +// PodTemplateSpec describes the data a pod should have when created from a template +type PodTemplateSpec struct { + // Metadata of the pods created from this template. + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the behavior of a pod. + Spec PodSpec `json:"spec,omitempty"` +} + +// +genclient=true + +// PodTemplate describes a template for creating copies of a predefined pod. +type PodTemplate struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Template defines the pods that will be created from this pod template + Template PodTemplateSpec `json:"template,omitempty"` +} + +// PodTemplateList is a list of PodTemplates. +type PodTemplateList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []PodTemplate `json:"items"` +} + +// ReplicationControllerSpec is the specification of a replication controller. +// As the internal representation of a replication controller, it may have either +// a TemplateRef or a Template set. +type ReplicationControllerSpec struct { + // Replicas is the number of desired replicas. + Replicas int32 `json:"replicas"` + + // Selector is a label query over pods that should match the Replicas count. + Selector map[string]string `json:"selector"` + + // TemplateRef is a reference to an object that describes the pod that will be created if + // insufficient replicas are detected. This reference is ignored if a Template is set. + // Must be set before converting to a versioned API object + //TemplateRef *ObjectReference `json:"templateRef,omitempty"` + + // Template is the object that describes the pod that will be created if + // insufficient replicas are detected. Internally, this takes precedence over a + // TemplateRef. + Template *PodTemplateSpec `json:"template,omitempty"` +} + +// ReplicationControllerStatus represents the current status of a replication +// controller. +type ReplicationControllerStatus struct { + // Replicas is the number of actual replicas. + Replicas int32 `json:"replicas"` + + // The number of pods that have labels matching the labels of the pod template of the replication controller. + FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty"` + + // The number of ready replicas for this replication controller. + ReadyReplicas int32 `json:"readyReplicas,omitempty"` + + // ObservedGeneration is the most recent generation observed by the controller. + ObservedGeneration int64 `json:"observedGeneration,omitempty"` +} + +// +genclient=true + +// ReplicationController represents the configuration of a replication controller. +type ReplicationController struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the desired behavior of this replication controller. + Spec ReplicationControllerSpec `json:"spec,omitempty"` + + // Status is the current status of this replication controller. This data may be + // out of date by some window of time. + Status ReplicationControllerStatus `json:"status,omitempty"` +} + +// ReplicationControllerList is a collection of replication controllers. +type ReplicationControllerList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []ReplicationController `json:"items"` +} + +const ( + // ClusterIPNone - do not assign a cluster IP + // no proxying required and no environment variables should be created for pods + ClusterIPNone = "None" +) + +// ServiceList holds a list of services. +type ServiceList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []Service `json:"items"` +} + +// Session Affinity Type string +type ServiceAffinity string + +const ( + // ServiceAffinityClientIP is the Client IP based. + ServiceAffinityClientIP ServiceAffinity = "ClientIP" + + // ServiceAffinityNone - no session affinity. + ServiceAffinityNone ServiceAffinity = "None" +) + +// Service Type string describes ingress methods for a service +type ServiceType string + +const ( + // ServiceTypeClusterIP means a service will only be accessible inside the + // cluster, via the ClusterIP. + ServiceTypeClusterIP ServiceType = "ClusterIP" + + // ServiceTypeNodePort means a service will be exposed on one port of + // every node, in addition to 'ClusterIP' type. + ServiceTypeNodePort ServiceType = "NodePort" + + // ServiceTypeLoadBalancer means a service will be exposed via an + // external load balancer (if the cloud provider supports it), in addition + // to 'NodePort' type. + ServiceTypeLoadBalancer ServiceType = "LoadBalancer" + + // ServiceTypeExternalName means a service consists of only a reference to + // an external name that kubedns or equivalent will return as a CNAME + // record, with no exposing or proxying of any pods involved. + ServiceTypeExternalName ServiceType = "ExternalName" +) + +// ServiceStatus represents the current status of a service +type ServiceStatus struct { + // LoadBalancer contains the current status of the load-balancer, + // if one is present. + LoadBalancer LoadBalancerStatus `json:"loadBalancer,omitempty"` +} + +// LoadBalancerStatus represents the status of a load-balancer +type LoadBalancerStatus struct { + // Ingress is a list containing ingress points for the load-balancer; + // traffic intended for the service should be sent to these ingress points. + Ingress []LoadBalancerIngress `json:"ingress,omitempty"` +} + +// LoadBalancerIngress represents the status of a load-balancer ingress point: +// traffic intended for the service should be sent to an ingress point. +type LoadBalancerIngress struct { + // IP is set for load-balancer ingress points that are IP based + // (typically GCE or OpenStack load-balancers) + IP string `json:"ip,omitempty"` + + // Hostname is set for load-balancer ingress points that are DNS based + // (typically AWS load-balancers) + Hostname string `json:"hostname,omitempty"` +} + +// ServiceSpec describes the attributes that a user creates on a service +type ServiceSpec struct { + // Type determines how the Service is exposed. Defaults to ClusterIP. Valid + // options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + // "ExternalName" maps to the specified externalName. + // "ClusterIP" allocates a cluster-internal IP address for load-balancing to + // endpoints. Endpoints are determined by the selector or if that is not + // specified, by manual construction of an Endpoints object. If clusterIP is + // "None", no virtual IP is allocated and the endpoints are published as a + // set of endpoints rather than a stable IP. + // "NodePort" builds on ClusterIP and allocates a port on every node which + // routes to the clusterIP. + // "LoadBalancer" builds on NodePort and creates an + // external load-balancer (if supported in the current cloud) which routes + // to the clusterIP. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#overview + Type ServiceType `json:"type,omitempty"` + + // Required: The list of ports that are exposed by this service. + Ports []ServicePort `json:"ports"` + + // Route service traffic to pods with label keys and values matching this + // selector. If empty or not present, the service is assumed to have an + // external process managing its endpoints, which Kubernetes will not + // modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. + // Ignored if type is ExternalName. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#overview + Selector map[string]string `json:"selector"` + + // ClusterIP is the IP address of the service and is usually assigned + // randomly by the master. If an address is specified manually and is not in + // use by others, it will be allocated to the service; otherwise, creation + // of the service will fail. This field can not be changed through updates. + // Valid values are "None", empty string (""), or a valid IP address. "None" + // can be specified for headless services when proxying is not required. + // Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if + // type is ExternalName. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies + ClusterIP string `json:"clusterIP,omitempty"` + + // ExternalName is the external reference that kubedns or equivalent will + // return as a CNAME record for this service. No proxying will be involved. + // Must be a valid DNS name and requires Type to be ExternalName. + ExternalName string + + // ExternalIPs are used by external load balancers, or can be set by + // users to handle external traffic that arrives at a node. + ExternalIPs []string `json:"externalIPs,omitempty"` + + // Only applies to Service Type: LoadBalancer + // LoadBalancer will get created with the IP specified in this field. + // This feature depends on whether the underlying cloud-provider supports specifying + // the loadBalancerIP when a load balancer is created. + // This field will be ignored if the cloud-provider does not support the feature. + LoadBalancerIP string `json:"loadBalancerIP,omitempty"` + + // Optional: Supports "ClientIP" and "None". Used to maintain session affinity. + SessionAffinity ServiceAffinity `json:"sessionAffinity,omitempty"` + + // Optional: If specified and supported by the platform, this will restrict traffic through the cloud-provider + // load-balancer will be restricted to the specified client IPs. This field will be ignored if the + // cloud-provider does not support the feature." + LoadBalancerSourceRanges []string `json:"loadBalancerSourceRanges,omitempty"` +} + +type ServicePort struct { + // Optional if only one ServicePort is defined on this service: The + // name of this port within the service. This must be a DNS_LABEL. + // All ports within a ServiceSpec must have unique names. This maps to + // the 'Name' field in EndpointPort objects. + Name string `json:"name"` + + // The IP protocol for this port. Supports "TCP" and "UDP". + Protocol Protocol `json:"protocol"` + + // The port that will be exposed on the service. + Port int32 `json:"port"` + + // Optional: The target port on pods selected by this service. If this + // is a string, it will be looked up as a named port in the target + // Pod's container ports. If this is not specified, the value + // of the 'port' field is used (an identity map). + // This field is ignored for services with clusterIP=None, and should be + // omitted or set equal to the 'port' field. + TargetPort intstr.IntOrString `json:"targetPort"` + + // The port on each node on which this service is exposed. + // Default is to auto-allocate a port if the ServiceType of this Service requires one. + NodePort int32 `json:"nodePort"` +} + +// +genclient=true + +// Service is a named abstraction of software service (for example, mysql) consisting of local port +// (for example 3306) that the proxy listens on, and the selector that determines which pods +// will answer requests sent through the proxy. +type Service struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the behavior of a service. + Spec ServiceSpec `json:"spec,omitempty"` + + // Status represents the current status of a service. + Status ServiceStatus `json:"status,omitempty"` +} + +// +genclient=true + +// ServiceAccount binds together: +// * a name, understood by users, and perhaps by peripheral systems, for an identity +// * a principal that can be authenticated and authorized +// * a set of secrets +type ServiceAccount struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount + Secrets []ObjectReference `json:"secrets"` + + // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images + // in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets + // can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. + ImagePullSecrets []LocalObjectReference `json:"imagePullSecrets,omitempty"` +} + +// ServiceAccountList is a list of ServiceAccount objects +type ServiceAccountList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []ServiceAccount `json:"items"` +} + +// +genclient=true + +// Endpoints is a collection of endpoints that implement the actual service. Example: +// Name: "mysvc", +// Subsets: [ +// { +// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], +// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] +// }, +// { +// Addresses: [{"ip": "10.10.3.3"}], +// Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}] +// }, +// ] +type Endpoints struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // The set of all endpoints is the union of all subsets. + Subsets []EndpointSubset +} + +// EndpointSubset is a group of addresses with a common set of ports. The +// expanded set of endpoints is the Cartesian product of Addresses x Ports. +// For example, given: +// { +// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], +// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] +// } +// The resulting set of endpoints can be viewed as: +// a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], +// b: [ 10.10.1.1:309, 10.10.2.2:309 ] +type EndpointSubset struct { + Addresses []EndpointAddress + NotReadyAddresses []EndpointAddress + Ports []EndpointPort +} + +// EndpointAddress is a tuple that describes single IP address. +type EndpointAddress struct { + // The IP of this endpoint. + // IPv6 is also accepted but not fully supported on all platforms. Also, certain + // kubernetes components, like kube-proxy, are not IPv6 ready. + // TODO: This should allow hostname or IP, see #4447. + IP string + // Optional: Hostname of this endpoint + // Meant to be used by DNS servers etc. + Hostname string `json:"hostname,omitempty"` + // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node. + NodeName *string `json:"nodeName,omitempty"` + // Optional: The kubernetes object related to the entry point. + TargetRef *ObjectReference +} + +// EndpointPort is a tuple that describes a single port. +type EndpointPort struct { + // The name of this port (corresponds to ServicePort.Name). Optional + // if only one port is defined. Must be a DNS_LABEL. + Name string + + // The port number. + Port int32 + + // The IP protocol for this port. + Protocol Protocol +} + +// EndpointsList is a list of endpoints. +type EndpointsList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []Endpoints `json:"items"` +} + +// NodeSpec describes the attributes that a node is created with. +type NodeSpec struct { + // PodCIDR represents the pod IP range assigned to the node + // Note: assigning IP ranges to nodes might need to be revisited when we support migratable IPs. + PodCIDR string `json:"podCIDR,omitempty"` + + // External ID of the node assigned by some machine database (e.g. a cloud provider) + ExternalID string `json:"externalID,omitempty"` + + // ID of the node assigned by the cloud provider + // Note: format is "://" + ProviderID string `json:"providerID,omitempty"` + + // Unschedulable controls node schedulability of new pods. By default node is schedulable. + Unschedulable bool `json:"unschedulable,omitempty"` +} + +// DaemonEndpoint contains information about a single Daemon endpoint. +type DaemonEndpoint struct { + /* + The port tag was not properly in quotes in earlier releases, so it must be + uppercased for backwards compat (since it was falling back to var name of + 'Port'). + */ + + // Port number of the given endpoint. + Port int32 `json:"Port"` +} + +// NodeDaemonEndpoints lists ports opened by daemons running on the Node. +type NodeDaemonEndpoints struct { + // Endpoint on which Kubelet is listening. + KubeletEndpoint DaemonEndpoint `json:"kubeletEndpoint,omitempty"` +} + +// NodeSystemInfo is a set of ids/uuids to uniquely identify the node. +type NodeSystemInfo struct { + // Machine ID reported by the node. + MachineID string `json:"machineID"` + // System UUID reported by the node. + SystemUUID string `json:"systemUUID"` + // Boot ID reported by the node. + BootID string `json:"bootID"` + // Kernel Version reported by the node. + KernelVersion string `json:"kernelVersion"` + // OS Image reported by the node. + OSImage string `json:"osImage"` + // ContainerRuntime Version reported by the node. + ContainerRuntimeVersion string `json:"containerRuntimeVersion"` + // Kubelet Version reported by the node. + KubeletVersion string `json:"kubeletVersion"` + // KubeProxy Version reported by the node. + KubeProxyVersion string `json:"kubeProxyVersion"` + // The Operating System reported by the node + OperatingSystem string `json:"operatingSystem"` + // The Architecture reported by the node + Architecture string `json:"architecture"` +} + +// NodeStatus is information about the current status of a node. +type NodeStatus struct { + // Capacity represents the total resources of a node. + Capacity ResourceList `json:"capacity,omitempty"` + // Allocatable represents the resources of a node that are available for scheduling. + Allocatable ResourceList `json:"allocatable,omitempty"` + // NodePhase is the current lifecycle phase of the node. + Phase NodePhase `json:"phase,omitempty"` + // Conditions is an array of current node conditions. + Conditions []NodeCondition `json:"conditions,omitempty"` + // Queried from cloud provider, if available. + Addresses []NodeAddress `json:"addresses,omitempty"` + // Endpoints of daemons running on the Node. + DaemonEndpoints NodeDaemonEndpoints `json:"daemonEndpoints,omitempty"` + // Set of ids/uuids to uniquely identify the node. + NodeInfo NodeSystemInfo `json:"nodeInfo,omitempty"` + // List of container images on this node + Images []ContainerImage `json:"images,omitempty"` + // List of attachable volumes in use (mounted) by the node. + VolumesInUse []UniqueVolumeName `json:"volumesInUse,omitempty"` + // List of volumes that are attached to the node. + VolumesAttached []AttachedVolume `json:"volumesAttached,omitempty"` +} + +type UniqueVolumeName string + +// AttachedVolume describes a volume attached to a node +type AttachedVolume struct { + // Name of the attached volume + Name UniqueVolumeName `json:"name"` + + // DevicePath represents the device path where the volume should be available + DevicePath string `json:"devicePath"` +} + +// AvoidPods describes pods that should avoid this node. This is the value for a +// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and +// will eventually become a field of NodeStatus. +type AvoidPods struct { + // Bounded-sized list of signatures of pods that should avoid this node, sorted + // in timestamp order from oldest to newest. Size of the slice is unspecified. + PreferAvoidPods []PreferAvoidPodsEntry `json:"preferAvoidPods,omitempty"` +} + +// Describes a class of pods that should avoid this node. +type PreferAvoidPodsEntry struct { + // The class of pods. + PodSignature PodSignature `json:"podSignature"` + // Time at which this entry was added to the list. + EvictionTime unversioned.Time `json:"evictionTime,omitempty"` + // (brief) reason why this entry was added to the list. + Reason string `json:"reason,omitempty"` + // Human readable message indicating why this entry was added to the list. + Message string `json:"message,omitempty"` +} + +// Describes the class of pods that should avoid this node. +// Exactly one field should be set. +type PodSignature struct { + // Reference to controller whose pods should avoid this node. + PodController *OwnerReference `json:"podController,omitempty"` +} + +// Describe a container image +type ContainerImage struct { + // Names by which this image is known. + Names []string `json:"names"` + // The size of the image in bytes. + SizeBytes int64 `json:"sizeBytes,omitempty"` +} + +type NodePhase string + +// These are the valid phases of node. +const ( + // NodePending means the node has been created/added by the system, but not configured. + NodePending NodePhase = "Pending" + // NodeRunning means the node has been configured and has Kubernetes components running. + NodeRunning NodePhase = "Running" + // NodeTerminated means the node has been removed from the cluster. + NodeTerminated NodePhase = "Terminated" +) + +type NodeConditionType string + +// These are valid conditions of node. Currently, we don't have enough information to decide +// node condition. In the future, we will add more. The proposed set of conditions are: +// NodeReady, NodeReachable +const ( + // NodeReady means kubelet is healthy and ready to accept pods. + NodeReady NodeConditionType = "Ready" + // NodeOutOfDisk means the kubelet will not accept new pods due to insufficient free disk + // space on the node. + NodeOutOfDisk NodeConditionType = "OutOfDisk" + // NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory. + NodeMemoryPressure NodeConditionType = "MemoryPressure" + // NodeDiskPressure means the kubelet is under pressure due to insufficient available disk. + NodeDiskPressure NodeConditionType = "DiskPressure" + // NodeNetworkUnavailable means that network for the node is not correctly configured. + NodeNetworkUnavailable NodeConditionType = "NetworkUnavailable" +) + +type NodeCondition struct { + Type NodeConditionType `json:"type"` + Status ConditionStatus `json:"status"` + LastHeartbeatTime unversioned.Time `json:"lastHeartbeatTime,omitempty"` + LastTransitionTime unversioned.Time `json:"lastTransitionTime,omitempty"` + Reason string `json:"reason,omitempty"` + Message string `json:"message,omitempty"` +} + +type NodeAddressType string + +// These are valid address types of node. NodeLegacyHostIP is used to transit +// from out-dated HostIP field to NodeAddress. +const ( + NodeLegacyHostIP NodeAddressType = "LegacyHostIP" + NodeHostName NodeAddressType = "Hostname" + NodeExternalIP NodeAddressType = "ExternalIP" + NodeInternalIP NodeAddressType = "InternalIP" +) + +type NodeAddress struct { + Type NodeAddressType `json:"type"` + Address string `json:"address"` +} + +// NodeResources is an object for conveying resource information about a node. +// see http://releases.k8s.io/HEAD/docs/design/resources.md for more details. +type NodeResources struct { + // Capacity represents the available resources of a node + Capacity ResourceList `json:"capacity,omitempty"` +} + +// ResourceName is the name identifying various resources in a ResourceList. +type ResourceName string + +// Resource names must be not more than 63 characters, consisting of upper- or lower-case alphanumeric characters, +// with the -, _, and . characters allowed anywhere, except the first or last character. +// The default convention, matching that for annotations, is to use lower-case names, with dashes, rather than +// camel case, separating compound words. +// Fully-qualified resource typenames are constructed from a DNS-style subdomain, followed by a slash `/` and a name. +const ( + // CPU, in cores. (500m = .5 cores) + ResourceCPU ResourceName = "cpu" + // Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) + ResourceMemory ResourceName = "memory" + // Volume size, in bytes (e,g. 5Gi = 5GiB = 5 * 1024 * 1024 * 1024) + ResourceStorage ResourceName = "storage" + // NVIDIA GPU, in devices. Alpha, might change: although fractional and allowing values >1, only one whole device per node is assigned. + ResourceNvidiaGPU ResourceName = "alpha.kubernetes.io/nvidia-gpu" + // Number of Pods that may be running on this Node: see ResourcePods +) + +// ResourceList is a set of (resource name, quantity) pairs. +type ResourceList map[ResourceName]resource.Quantity + +// +genclient=true +// +nonNamespaced=true + +// Node is a worker node in Kubernetes +// The name of the node according to etcd is in ObjectMeta.Name. +type Node struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the behavior of a node. + Spec NodeSpec `json:"spec,omitempty"` + + // Status describes the current status of a Node + Status NodeStatus `json:"status,omitempty"` +} + +// NodeList is a list of nodes. +type NodeList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []Node `json:"items"` +} + +// NamespaceSpec describes the attributes on a Namespace +type NamespaceSpec struct { + // Finalizers is an opaque list of values that must be empty to permanently remove object from storage + Finalizers []FinalizerName +} + +type FinalizerName string + +// These are internal finalizer values to Kubernetes, must be qualified name unless defined here +const ( + FinalizerKubernetes FinalizerName = "kubernetes" + FinalizerOrphan string = "orphan" +) + +// NamespaceStatus is information about the current status of a Namespace. +type NamespaceStatus struct { + // Phase is the current lifecycle phase of the namespace. + Phase NamespacePhase `json:"phase,omitempty"` +} + +type NamespacePhase string + +// These are the valid phases of a namespace. +const ( + // NamespaceActive means the namespace is available for use in the system + NamespaceActive NamespacePhase = "Active" + // NamespaceTerminating means the namespace is undergoing graceful termination + NamespaceTerminating NamespacePhase = "Terminating" +) + +// +genclient=true +// +nonNamespaced=true + +// A namespace provides a scope for Names. +// Use of multiple namespaces is optional +type Namespace struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the behavior of the Namespace. + Spec NamespaceSpec `json:"spec,omitempty"` + + // Status describes the current status of a Namespace + Status NamespaceStatus `json:"status,omitempty"` +} + +// NamespaceList is a list of Namespaces. +type NamespaceList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []Namespace `json:"items"` +} + +// Binding ties one object to another - for example, a pod is bound to a node by a scheduler. +type Binding struct { + unversioned.TypeMeta `json:",inline"` + // ObjectMeta describes the object that is being bound. + ObjectMeta `json:"metadata,omitempty"` + + // Target is the object to bind to. + Target ObjectReference `json:"target"` +} + +// Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. +type Preconditions struct { + // Specifies the target UID. + UID *types.UID `json:"uid,omitempty"` +} + +// DeleteOptions may be provided when deleting an API object +type DeleteOptions struct { + unversioned.TypeMeta `json:",inline"` + + // Optional duration in seconds before the object should be deleted. Value must be non-negative integer. + // The value zero indicates delete immediately. If this value is nil, the default grace period for the + // specified type will be used. + GracePeriodSeconds *int64 `json:"gracePeriodSeconds,omitempty"` + + // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be + // returned. + Preconditions *Preconditions `json:"preconditions,omitempty"` + + // Should the dependent objects be orphaned. If true/false, the "orphan" + // finalizer will be added to/removed from the object's finalizers list. + OrphanDependents *bool `json:"orphanDependents,omitempty"` +} + +// ExportOptions is the query options to the standard REST get call. +type ExportOptions struct { + unversioned.TypeMeta `json:",inline"` + // Should this value be exported. Export strips fields that a user can not specify. + Export bool `json:"export"` + // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace' + Exact bool `json:"exact"` +} + +// ListOptions is the query options to a standard REST list call, and has future support for +// watch calls. +type ListOptions struct { + unversioned.TypeMeta `json:",inline"` + + // A selector based on labels + LabelSelector labels.Selector + // A selector based on fields + FieldSelector fields.Selector + // If true, watch for changes to this list + Watch bool + // For watch, it's the resource version to watch. + // For list, + // - if unset, then the result is returned from remote storage based on quorum-read flag; + // - if it's 0, then we simply return what we currently have in cache, no guarantee; + // - if set to non zero, then the result is as fresh as given rv. + ResourceVersion string + // Timeout for the list/watch call. + TimeoutSeconds *int64 +} + +// PodLogOptions is the query options for a Pod's logs REST call +type PodLogOptions struct { + unversioned.TypeMeta + + // Container for which to return logs + Container string + // If true, follow the logs for the pod + Follow bool + // If true, return previous terminated container logs + Previous bool + // A relative time in seconds before the current time from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + SinceSeconds *int64 + // An RFC3339 timestamp from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + SinceTime *unversioned.Time + // If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line + // of log output. + Timestamps bool + // If set, the number of lines from the end of the logs to show. If not specified, + // logs are shown from the creation of the container or sinceSeconds or sinceTime + TailLines *int64 + // If set, the number of bytes to read from the server before terminating the + // log output. This may not display a complete final line of logging, and may return + // slightly more or slightly less than the specified limit. + LimitBytes *int64 +} + +// PodAttachOptions is the query options to a Pod's remote attach call +// TODO: merge w/ PodExecOptions below for stdin, stdout, etc +type PodAttachOptions struct { + unversioned.TypeMeta `json:",inline"` + + // Stdin if true indicates that stdin is to be redirected for the attach call + Stdin bool `json:"stdin,omitempty"` + + // Stdout if true indicates that stdout is to be redirected for the attach call + Stdout bool `json:"stdout,omitempty"` + + // Stderr if true indicates that stderr is to be redirected for the attach call + Stderr bool `json:"stderr,omitempty"` + + // TTY if true indicates that a tty will be allocated for the attach call + TTY bool `json:"tty,omitempty"` + + // Container to attach to. + Container string `json:"container,omitempty"` +} + +// PodExecOptions is the query options to a Pod's remote exec call +type PodExecOptions struct { + unversioned.TypeMeta + + // Stdin if true indicates that stdin is to be redirected for the exec call + Stdin bool + + // Stdout if true indicates that stdout is to be redirected for the exec call + Stdout bool + + // Stderr if true indicates that stderr is to be redirected for the exec call + Stderr bool + + // TTY if true indicates that a tty will be allocated for the exec call + TTY bool + + // Container in which to execute the command. + Container string + + // Command is the remote command to execute; argv array; not executed within a shell. + Command []string +} + +// PodProxyOptions is the query options to a Pod's proxy call +type PodProxyOptions struct { + unversioned.TypeMeta + + // Path is the URL path to use for the current proxy request + Path string +} + +// NodeProxyOptions is the query options to a Node's proxy call +type NodeProxyOptions struct { + unversioned.TypeMeta + + // Path is the URL path to use for the current proxy request + Path string +} + +// ServiceProxyOptions is the query options to a Service's proxy call. +type ServiceProxyOptions struct { + unversioned.TypeMeta + + // Path is the part of URLs that include service endpoints, suffixes, + // and parameters to use for the current proxy request to service. + // For example, the whole request URL is + // http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. + // Path is _search?q=user:kimchy. + Path string +} + +// OwnerReference contains enough information to let you identify an owning +// object. Currently, an owning object must be in the same namespace, so there +// is no namespace field. +type OwnerReference struct { + // API version of the referent. + APIVersion string `json:"apiVersion"` + // Kind of the referent. + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds + Kind string `json:"kind"` + // Name of the referent. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names + Name string `json:"name"` + // UID of the referent. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#uids + UID types.UID `json:"uid"` + // If true, this reference points to the managing controller. + Controller *bool `json:"controller,omitempty"` +} + +// ObjectReference contains enough information to let you inspect or modify the referred object. +type ObjectReference struct { + Kind string `json:"kind,omitempty"` + Namespace string `json:"namespace,omitempty"` + Name string `json:"name,omitempty"` + UID types.UID `json:"uid,omitempty"` + APIVersion string `json:"apiVersion,omitempty"` + ResourceVersion string `json:"resourceVersion,omitempty"` + + // Optional. If referring to a piece of an object instead of an entire object, this string + // should contain information to identify the sub-object. For example, if the object + // reference is to a container within a pod, this would take on a value like: + // "spec.containers{name}" (where "name" refers to the name of the container that triggered + // the event) or if no container name is specified "spec.containers[2]" (container with + // index 2 in this pod). This syntax is chosen only to have some well-defined way of + // referencing a part of an object. + // TODO: this design is not final and this field is subject to change in the future. + FieldPath string `json:"fieldPath,omitempty"` +} + +// LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. +type LocalObjectReference struct { + //TODO: Add other useful fields. apiVersion, kind, uid? + Name string +} + +type SerializedReference struct { + unversioned.TypeMeta `json:",inline"` + Reference ObjectReference `json:"reference,omitempty"` +} + +type EventSource struct { + // Component from which the event is generated. + Component string `json:"component,omitempty"` + // Host name on which the event is generated. + Host string `json:"host,omitempty"` +} + +// Valid values for event types (new types could be added in future) +const ( + // Information only and will not cause any problems + EventTypeNormal string = "Normal" + // These events are to warn that something might go wrong + EventTypeWarning string = "Warning" +) + +// +genclient=true + +// Event is a report of an event somewhere in the cluster. +// TODO: Decide whether to store these separately or with the object they apply to. +type Event struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Required. The object that this event is about. + InvolvedObject ObjectReference `json:"involvedObject,omitempty"` + + // Optional; this should be a short, machine understandable string that gives the reason + // for this event being generated. For example, if the event is reporting that a container + // can't start, the Reason might be "ImageNotFound". + // TODO: provide exact specification for format. + Reason string `json:"reason,omitempty"` + + // Optional. A human-readable description of the status of this operation. + // TODO: decide on maximum length. + Message string `json:"message,omitempty"` + + // Optional. The component reporting this event. Should be a short machine understandable string. + Source EventSource `json:"source,omitempty"` + + // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.) + FirstTimestamp unversioned.Time `json:"firstTimestamp,omitempty"` + + // The time at which the most recent occurrence of this event was recorded. + LastTimestamp unversioned.Time `json:"lastTimestamp,omitempty"` + + // The number of times this event has occurred. + Count int32 `json:"count,omitempty"` + + // Type of this event (Normal, Warning), new types could be added in the future. + Type string `json:"type,omitempty"` +} + +// EventList is a list of events. +type EventList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []Event `json:"items"` +} + +// List holds a list of objects, which may not be known by the server. +type List struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []runtime.Object `json:"items"` +} + +// A type of object that is limited +type LimitType string + +const ( + // Limit that applies to all pods in a namespace + LimitTypePod LimitType = "Pod" + // Limit that applies to all containers in a namespace + LimitTypeContainer LimitType = "Container" +) + +// LimitRangeItem defines a min/max usage limit for any resource that matches on kind +type LimitRangeItem struct { + // Type of resource that this limit applies to + Type LimitType `json:"type,omitempty"` + // Max usage constraints on this kind by resource name + Max ResourceList `json:"max,omitempty"` + // Min usage constraints on this kind by resource name + Min ResourceList `json:"min,omitempty"` + // Default resource requirement limit value by resource name. + Default ResourceList `json:"default,omitempty"` + // DefaultRequest resource requirement request value by resource name. + DefaultRequest ResourceList `json:"defaultRequest,omitempty"` + // MaxLimitRequestRatio represents the max burst value for the named resource + MaxLimitRequestRatio ResourceList `json:"maxLimitRequestRatio,omitempty"` +} + +// LimitRangeSpec defines a min/max usage limit for resources that match on kind +type LimitRangeSpec struct { + // Limits is the list of LimitRangeItem objects that are enforced + Limits []LimitRangeItem `json:"limits"` +} + +// +genclient=true + +// LimitRange sets resource usage limits for each kind of resource in a Namespace +type LimitRange struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the limits enforced + Spec LimitRangeSpec `json:"spec,omitempty"` +} + +// LimitRangeList is a list of LimitRange items. +type LimitRangeList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is a list of LimitRange objects + Items []LimitRange `json:"items"` +} + +// The following identify resource constants for Kubernetes object types +const ( + // Pods, number + ResourcePods ResourceName = "pods" + // Services, number + ResourceServices ResourceName = "services" + // ReplicationControllers, number + ResourceReplicationControllers ResourceName = "replicationcontrollers" + // ResourceQuotas, number + ResourceQuotas ResourceName = "resourcequotas" + // ResourceSecrets, number + ResourceSecrets ResourceName = "secrets" + // ResourceConfigMaps, number + ResourceConfigMaps ResourceName = "configmaps" + // ResourcePersistentVolumeClaims, number + ResourcePersistentVolumeClaims ResourceName = "persistentvolumeclaims" + // ResourceServicesNodePorts, number + ResourceServicesNodePorts ResourceName = "services.nodeports" + // ResourceServicesLoadBalancers, number + ResourceServicesLoadBalancers ResourceName = "services.loadbalancers" + // CPU request, in cores. (500m = .5 cores) + ResourceRequestsCPU ResourceName = "requests.cpu" + // Memory request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) + ResourceRequestsMemory ResourceName = "requests.memory" + // Storage request, in bytes + ResourceRequestsStorage ResourceName = "requests.storage" + // CPU limit, in cores. (500m = .5 cores) + ResourceLimitsCPU ResourceName = "limits.cpu" + // Memory limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) + ResourceLimitsMemory ResourceName = "limits.memory" +) + +// A ResourceQuotaScope defines a filter that must match each object tracked by a quota +type ResourceQuotaScope string + +const ( + // Match all pod objects where spec.activeDeadlineSeconds + ResourceQuotaScopeTerminating ResourceQuotaScope = "Terminating" + // Match all pod objects where !spec.activeDeadlineSeconds + ResourceQuotaScopeNotTerminating ResourceQuotaScope = "NotTerminating" + // Match all pod objects that have best effort quality of service + ResourceQuotaScopeBestEffort ResourceQuotaScope = "BestEffort" + // Match all pod objects that do not have best effort quality of service + ResourceQuotaScopeNotBestEffort ResourceQuotaScope = "NotBestEffort" +) + +// ResourceQuotaSpec defines the desired hard limits to enforce for Quota +type ResourceQuotaSpec struct { + // Hard is the set of desired hard limits for each named resource + Hard ResourceList `json:"hard,omitempty"` + // A collection of filters that must match each object tracked by a quota. + // If not specified, the quota matches all objects. + Scopes []ResourceQuotaScope `json:"scopes,omitempty"` +} + +// ResourceQuotaStatus defines the enforced hard limits and observed use +type ResourceQuotaStatus struct { + // Hard is the set of enforced hard limits for each named resource + Hard ResourceList `json:"hard,omitempty"` + // Used is the current observed total usage of the resource in the namespace + Used ResourceList `json:"used,omitempty"` +} + +// +genclient=true + +// ResourceQuota sets aggregate quota restrictions enforced per namespace +type ResourceQuota struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the desired quota + Spec ResourceQuotaSpec `json:"spec,omitempty"` + + // Status defines the actual enforced quota and its current usage + Status ResourceQuotaStatus `json:"status,omitempty"` +} + +// ResourceQuotaList is a list of ResourceQuota items +type ResourceQuotaList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is a list of ResourceQuota objects + Items []ResourceQuota `json:"items"` +} + +// +genclient=true + +// Secret holds secret data of a certain type. The total bytes of the values in +// the Data field must be less than MaxSecretSize bytes. +type Secret struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN + // or leading dot followed by valid DNS_SUBDOMAIN. + // The serialized form of the secret data is a base64 encoded string, + // representing the arbitrary (possibly non-string) data value here. + Data map[string][]byte `json:"data,omitempty"` + + // Used to facilitate programmatic handling of secret data. + Type SecretType `json:"type,omitempty"` +} + +const MaxSecretSize = 1 * 1024 * 1024 + +type SecretType string + +const ( + // SecretTypeOpaque is the default; arbitrary user-defined data + SecretTypeOpaque SecretType = "Opaque" + + // SecretTypeServiceAccountToken contains a token that identifies a service account to the API + // + // Required fields: + // - Secret.Annotations["kubernetes.io/service-account.name"] - the name of the ServiceAccount the token identifies + // - Secret.Annotations["kubernetes.io/service-account.uid"] - the UID of the ServiceAccount the token identifies + // - Secret.Data["token"] - a token that identifies the service account to the API + SecretTypeServiceAccountToken SecretType = "kubernetes.io/service-account-token" + + // ServiceAccountNameKey is the key of the required annotation for SecretTypeServiceAccountToken secrets + ServiceAccountNameKey = "kubernetes.io/service-account.name" + // ServiceAccountUIDKey is the key of the required annotation for SecretTypeServiceAccountToken secrets + ServiceAccountUIDKey = "kubernetes.io/service-account.uid" + // ServiceAccountTokenKey is the key of the required data for SecretTypeServiceAccountToken secrets + ServiceAccountTokenKey = "token" + // ServiceAccountKubeconfigKey is the key of the optional kubeconfig data for SecretTypeServiceAccountToken secrets + ServiceAccountKubeconfigKey = "kubernetes.kubeconfig" + // ServiceAccountRootCAKey is the key of the optional root certificate authority for SecretTypeServiceAccountToken secrets + ServiceAccountRootCAKey = "ca.crt" + // ServiceAccountNamespaceKey is the key of the optional namespace to use as the default for namespaced API calls + ServiceAccountNamespaceKey = "namespace" + + // SecretTypeDockercfg contains a dockercfg file that follows the same format rules as ~/.dockercfg + // + // Required fields: + // - Secret.Data[".dockercfg"] - a serialized ~/.dockercfg file + SecretTypeDockercfg SecretType = "kubernetes.io/dockercfg" + + // DockerConfigKey is the key of the required data for SecretTypeDockercfg secrets + DockerConfigKey = ".dockercfg" + + // SecretTypeDockerConfigJson contains a dockercfg file that follows the same format rules as ~/.docker/config.json + // + // Required fields: + // - Secret.Data[".dockerconfigjson"] - a serialized ~/.docker/config.json file + SecretTypeDockerConfigJson SecretType = "kubernetes.io/dockerconfigjson" + + // DockerConfigJsonKey is the key of the required data for SecretTypeDockerConfigJson secrets + DockerConfigJsonKey = ".dockerconfigjson" + + // SecretTypeBasicAuth contains data needed for basic authentication. + // + // Required at least one of fields: + // - Secret.Data["username"] - username used for authentication + // - Secret.Data["password"] - password or token needed for authentication + SecretTypeBasicAuth SecretType = "kubernetes.io/basic-auth" + + // BasicAuthUsernameKey is the key of the username for SecretTypeBasicAuth secrets + BasicAuthUsernameKey = "username" + // BasicAuthPasswordKey is the key of the password or token for SecretTypeBasicAuth secrets + BasicAuthPasswordKey = "password" + + // SecretTypeSSHAuth contains data needed for SSH authetication. + // + // Required field: + // - Secret.Data["ssh-privatekey"] - private SSH key needed for authentication + SecretTypeSSHAuth SecretType = "kubernetes.io/ssh-auth" + + // SSHAuthPrivateKey is the key of the required SSH private key for SecretTypeSSHAuth secrets + SSHAuthPrivateKey = "ssh-privatekey" + + // SecretTypeTLS contains information about a TLS client or server secret. It + // is primarily used with TLS termination of the Ingress resource, but may be + // used in other types. + // + // Required fields: + // - Secret.Data["tls.key"] - TLS private key. + // Secret.Data["tls.crt"] - TLS certificate. + // TODO: Consider supporting different formats, specifying CA/destinationCA. + SecretTypeTLS SecretType = "kubernetes.io/tls" + + // TLSCertKey is the key for tls certificates in a TLS secret. + TLSCertKey = "tls.crt" + // TLSPrivateKeyKey is the key for the private key field in a TLS secret. + TLSPrivateKeyKey = "tls.key" +) + +type SecretList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []Secret `json:"items"` +} + +// +genclient=true + +// ConfigMap holds configuration data for components or applications to consume. +type ConfigMap struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + // Data contains the configuration data. + // Each key must be a valid DNS_SUBDOMAIN with an optional leading dot. + Data map[string]string `json:"data,omitempty"` +} + +// ConfigMapList is a resource containing a list of ConfigMap objects. +type ConfigMapList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is the list of ConfigMaps. + Items []ConfigMap `json:"items"` +} + +// These constants are for remote command execution and port forwarding and are +// used by both the client side and server side components. +// +// This is probably not the ideal place for them, but it didn't seem worth it +// to create pkg/exec and pkg/portforward just to contain a single file with +// constants in it. Suggestions for more appropriate alternatives are +// definitely welcome! +const ( + // Enable stdin for remote command execution + ExecStdinParam = "input" + // Enable stdout for remote command execution + ExecStdoutParam = "output" + // Enable stderr for remote command execution + ExecStderrParam = "error" + // Enable TTY for remote command execution + ExecTTYParam = "tty" + // Command to run for remote command execution + ExecCommandParamm = "command" + + // Name of header that specifies stream type + StreamType = "streamType" + // Value for streamType header for stdin stream + StreamTypeStdin = "stdin" + // Value for streamType header for stdout stream + StreamTypeStdout = "stdout" + // Value for streamType header for stderr stream + StreamTypeStderr = "stderr" + // Value for streamType header for data stream + StreamTypeData = "data" + // Value for streamType header for error stream + StreamTypeError = "error" + // Value for streamType header for terminal resize stream + StreamTypeResize = "resize" + + // Name of header that specifies the port being forwarded + PortHeader = "port" + // Name of header that specifies a request ID used to associate the error + // and data streams for a single forwarded connection + PortForwardRequestIDHeader = "requestID" +) + +// Similarly to above, these are constants to support HTTP PATCH utilized by +// both the client and server that didn't make sense for a whole package to be +// dedicated to. +type PatchType string + +const ( + JSONPatchType PatchType = "application/json-patch+json" + MergePatchType PatchType = "application/merge-patch+json" + StrategicMergePatchType PatchType = "application/strategic-merge-patch+json" +) + +// Type and constants for component health validation. +type ComponentConditionType string + +// These are the valid conditions for the component. +const ( + ComponentHealthy ComponentConditionType = "Healthy" +) + +type ComponentCondition struct { + Type ComponentConditionType `json:"type"` + Status ConditionStatus `json:"status"` + Message string `json:"message,omitempty"` + Error string `json:"error,omitempty"` +} + +// +genclient=true +// +nonNamespaced=true + +// ComponentStatus (and ComponentStatusList) holds the cluster validation info. +type ComponentStatus struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + + Conditions []ComponentCondition `json:"conditions,omitempty"` +} + +type ComponentStatusList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []ComponentStatus `json:"items"` +} + +// SecurityContext holds security configuration that will be applied to a container. +// Some fields are present in both SecurityContext and PodSecurityContext. When both +// are set, the values in SecurityContext take precedence. +type SecurityContext struct { + // The capabilities to add/drop when running containers. + // Defaults to the default set of capabilities granted by the container runtime. + Capabilities *Capabilities `json:"capabilities,omitempty"` + // Run container in privileged mode. + // Processes in privileged containers are essentially equivalent to root on the host. + // Defaults to false. + Privileged *bool `json:"privileged,omitempty"` + // The SELinux context to be applied to the container. + // If unspecified, the container runtime will allocate a random SELinux context for each + // container. May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + SELinuxOptions *SELinuxOptions `json:"seLinuxOptions,omitempty"` + // The UID to run the entrypoint of the container process. + // Defaults to user specified in image metadata if unspecified. + // May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + RunAsUser *int64 `json:"runAsUser,omitempty"` + // Indicates that the container must run as a non-root user. + // If true, the Kubelet will validate the image at runtime to ensure that it + // does not run as UID 0 (root) and fail to start the container if it does. + // If unset or false, no such validation will be performed. + // May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + RunAsNonRoot *bool `json:"runAsNonRoot,omitempty"` + // The read-only root filesystem allows you to restrict the locations that an application can write + // files to, ensuring the persistent data can only be written to mounts. + ReadOnlyRootFilesystem *bool `json:"readOnlyRootFilesystem,omitempty"` +} + +// SELinuxOptions are the labels to be applied to the container. +type SELinuxOptions struct { + // SELinux user label + User string `json:"user,omitempty"` + // SELinux role label + Role string `json:"role,omitempty"` + // SELinux type label + Type string `json:"type,omitempty"` + // SELinux level label. + Level string `json:"level,omitempty"` +} + +// RangeAllocation is an opaque API object (not exposed to end users) that can be persisted to record +// the global allocation state of the cluster. The schema of Range and Data generic, in that Range +// should be a string representation of the inputs to a range (for instance, for IP allocation it +// might be a CIDR) and Data is an opaque blob understood by an allocator which is typically a +// binary range. Consumers should use annotations to record additional information (schema version, +// data encoding hints). A range allocation should *ALWAYS* be recreatable at any time by observation +// of the cluster, thus the object is less strongly typed than most. +type RangeAllocation struct { + unversioned.TypeMeta `json:",inline"` + ObjectMeta `json:"metadata,omitempty"` + // A string representing a unique label for a range of resources, such as a CIDR "10.0.0.0/8" or + // port range "10000-30000". Range is not strongly schema'd here. The Range is expected to define + // a start and end unless there is an implicit end. + Range string `json:"range"` + // A byte array representing the serialized state of a range allocation. Additional clarifiers on + // the type or format of data should be represented with annotations. For IP allocations, this is + // represented as a bit array starting at the base IP of the CIDR in Range, with each bit representing + // a single allocated address (the fifth bit on CIDR 10.0.0.0/8 is 10.0.0.4). + Data []byte `json:"data"` +} + +const ( + // "default-scheduler" is the name of default scheduler. + DefaultSchedulerName = "default-scheduler" + + // RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule + // corresponding to every RequiredDuringScheduling affinity rule. + // When the --hard-pod-affinity-weight scheduler flag is not specified, + // DefaultHardPodAffinityWeight defines the weight of the implicit PreferredDuringScheduling affinity rule. + DefaultHardPodAffinitySymmetricWeight int = 1 + + // When the --failure-domains scheduler flag is not specified, + // DefaultFailureDomains defines the set of label keys used when TopologyKey is empty in PreferredDuringScheduling anti-affinity. + DefaultFailureDomains string = unversioned.LabelHostname + "," + unversioned.LabelZoneFailureDomain + "," + unversioned.LabelZoneRegion +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/doc.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/doc.go similarity index 84% rename from vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/doc.go rename to vendor/k8s.io/client-go/1.4/pkg/api/unversioned/doc.go index cfdb87c5..d0ffc332 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true -package v1beta1 +// +k8s:deepcopy-gen=package + +package unversioned diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/duration.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/duration.go new file mode 100644 index 00000000..ed54e515 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/duration.go @@ -0,0 +1,47 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "encoding/json" + "time" +) + +// Duration is a wrapper around time.Duration which supports correct +// marshaling to YAML and JSON. In particular, it marshals into strings, which +// can be used as map keys in json. +type Duration struct { + time.Duration `protobuf:"varint,1,opt,name=duration,casttype=time.Duration"` +} + +// UnmarshalJSON implements the json.Unmarshaller interface. +func (d *Duration) UnmarshalJSON(b []byte) error { + var str string + json.Unmarshal(b, &str) + + pd, err := time.ParseDuration(str) + if err != nil { + return err + } + d.Duration = pd + return nil +} + +// MarshalJSON implements the json.Marshaler interface. +func (d Duration) MarshalJSON() ([]byte, error) { + return json.Marshal(d.Duration.String()) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/generated.pb.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/generated.pb.go new file mode 100644 index 00000000..d33d510f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/generated.pb.go @@ -0,0 +1,4536 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/api/unversioned/generated.proto +// DO NOT EDIT! + +/* + Package unversioned is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/api/unversioned/generated.proto + + It has these top-level messages: + APIGroup + APIGroupList + APIResource + APIResourceList + APIVersions + Duration + ExportOptions + GroupKind + GroupResource + GroupVersion + GroupVersionForDiscovery + GroupVersionKind + GroupVersionResource + LabelSelector + LabelSelectorRequirement + ListMeta + RootPaths + ServerAddressByClientCIDR + Status + StatusCause + StatusDetails + Time + Timestamp + TypeMeta +*/ +package unversioned + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import time "time" + +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *APIGroup) Reset() { *m = APIGroup{} } +func (*APIGroup) ProtoMessage() {} +func (*APIGroup) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *APIGroupList) Reset() { *m = APIGroupList{} } +func (*APIGroupList) ProtoMessage() {} +func (*APIGroupList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *APIResource) Reset() { *m = APIResource{} } +func (*APIResource) ProtoMessage() {} +func (*APIResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *APIResourceList) Reset() { *m = APIResourceList{} } +func (*APIResourceList) ProtoMessage() {} +func (*APIResourceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *APIVersions) Reset() { *m = APIVersions{} } +func (*APIVersions) ProtoMessage() {} +func (*APIVersions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *Duration) Reset() { *m = Duration{} } +func (*Duration) ProtoMessage() {} +func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } + +func (m *ExportOptions) Reset() { *m = ExportOptions{} } +func (*ExportOptions) ProtoMessage() {} +func (*ExportOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } + +func (m *GroupKind) Reset() { *m = GroupKind{} } +func (*GroupKind) ProtoMessage() {} +func (*GroupKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } + +func (m *GroupResource) Reset() { *m = GroupResource{} } +func (*GroupResource) ProtoMessage() {} +func (*GroupResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } + +func (m *GroupVersion) Reset() { *m = GroupVersion{} } +func (*GroupVersion) ProtoMessage() {} +func (*GroupVersion) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } + +func (m *GroupVersionForDiscovery) Reset() { *m = GroupVersionForDiscovery{} } +func (*GroupVersionForDiscovery) ProtoMessage() {} +func (*GroupVersionForDiscovery) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{10} +} + +func (m *GroupVersionKind) Reset() { *m = GroupVersionKind{} } +func (*GroupVersionKind) ProtoMessage() {} +func (*GroupVersionKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } + +func (m *GroupVersionResource) Reset() { *m = GroupVersionResource{} } +func (*GroupVersionResource) ProtoMessage() {} +func (*GroupVersionResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } + +func (m *LabelSelector) Reset() { *m = LabelSelector{} } +func (*LabelSelector) ProtoMessage() {} +func (*LabelSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } + +func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } +func (*LabelSelectorRequirement) ProtoMessage() {} +func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{14} +} + +func (m *ListMeta) Reset() { *m = ListMeta{} } +func (*ListMeta) ProtoMessage() {} +func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } + +func (m *RootPaths) Reset() { *m = RootPaths{} } +func (*RootPaths) ProtoMessage() {} +func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } + +func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } +func (*ServerAddressByClientCIDR) ProtoMessage() {} +func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{17} +} + +func (m *Status) Reset() { *m = Status{} } +func (*Status) ProtoMessage() {} +func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } + +func (m *StatusCause) Reset() { *m = StatusCause{} } +func (*StatusCause) ProtoMessage() {} +func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } + +func (m *StatusDetails) Reset() { *m = StatusDetails{} } +func (*StatusDetails) ProtoMessage() {} +func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } + +func (m *Time) Reset() { *m = Time{} } +func (*Time) ProtoMessage() {} +func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } + +func (m *Timestamp) Reset() { *m = Timestamp{} } +func (*Timestamp) ProtoMessage() {} +func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } + +func (m *TypeMeta) Reset() { *m = TypeMeta{} } +func (*TypeMeta) ProtoMessage() {} +func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } + +func init() { + proto.RegisterType((*APIGroup)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.APIGroup") + proto.RegisterType((*APIGroupList)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.APIGroupList") + proto.RegisterType((*APIResource)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.APIResource") + proto.RegisterType((*APIResourceList)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.APIResourceList") + proto.RegisterType((*APIVersions)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.APIVersions") + proto.RegisterType((*Duration)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.Duration") + proto.RegisterType((*ExportOptions)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.ExportOptions") + proto.RegisterType((*GroupKind)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.GroupKind") + proto.RegisterType((*GroupResource)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.GroupResource") + proto.RegisterType((*GroupVersion)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.GroupVersion") + proto.RegisterType((*GroupVersionForDiscovery)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.GroupVersionForDiscovery") + proto.RegisterType((*GroupVersionKind)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.GroupVersionKind") + proto.RegisterType((*GroupVersionResource)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.GroupVersionResource") + proto.RegisterType((*LabelSelector)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.LabelSelector") + proto.RegisterType((*LabelSelectorRequirement)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.LabelSelectorRequirement") + proto.RegisterType((*ListMeta)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.ListMeta") + proto.RegisterType((*RootPaths)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.RootPaths") + proto.RegisterType((*ServerAddressByClientCIDR)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.ServerAddressByClientCIDR") + proto.RegisterType((*Status)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.Status") + proto.RegisterType((*StatusCause)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.StatusCause") + proto.RegisterType((*StatusDetails)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.StatusDetails") + proto.RegisterType((*Time)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.Time") + proto.RegisterType((*Timestamp)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.Timestamp") + proto.RegisterType((*TypeMeta)(nil), "k8s.io.client-go.1.4.pkg.api.unversioned.TypeMeta") +} +func (m *APIGroup) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *APIGroup) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + if len(m.Versions) > 0 { + for _, msg := range m.Versions { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.PreferredVersion.Size())) + n1, err := m.PreferredVersion.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + if len(m.ServerAddressByClientCIDRs) > 0 { + for _, msg := range m.ServerAddressByClientCIDRs { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *APIGroupList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *APIGroupList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Groups) > 0 { + for _, msg := range m.Groups { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *APIResource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *APIResource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x10 + i++ + if m.Namespaced { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Kind))) + i += copy(data[i:], m.Kind) + return i, nil +} + +func (m *APIResourceList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *APIResourceList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.GroupVersion))) + i += copy(data[i:], m.GroupVersion) + if len(m.APIResources) > 0 { + for _, msg := range m.APIResources { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *APIVersions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *APIVersions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Versions) > 0 { + for _, s := range m.Versions { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.ServerAddressByClientCIDRs) > 0 { + for _, msg := range m.ServerAddressByClientCIDRs { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *Duration) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Duration) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Duration)) + return i, nil +} + +func (m *ExportOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ExportOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + if m.Export { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x10 + i++ + if m.Exact { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *GroupKind) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GroupKind) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Kind))) + i += copy(data[i:], m.Kind) + return i, nil +} + +func (m *GroupResource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GroupResource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Resource))) + i += copy(data[i:], m.Resource) + return i, nil +} + +func (m *GroupVersion) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GroupVersion) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Version))) + i += copy(data[i:], m.Version) + return i, nil +} + +func (m *GroupVersionForDiscovery) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GroupVersionForDiscovery) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.GroupVersion))) + i += copy(data[i:], m.GroupVersion) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Version))) + i += copy(data[i:], m.Version) + return i, nil +} + +func (m *GroupVersionKind) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GroupVersionKind) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Version))) + i += copy(data[i:], m.Version) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Kind))) + i += copy(data[i:], m.Kind) + return i, nil +} + +func (m *GroupVersionResource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GroupVersionResource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Version))) + i += copy(data[i:], m.Version) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Resource))) + i += copy(data[i:], m.Resource) + return i, nil +} + +func (m *LabelSelector) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LabelSelector) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.MatchLabels) > 0 { + for k := range m.MatchLabels { + data[i] = 0xa + i++ + v := m.MatchLabels[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + if len(m.MatchExpressions) > 0 { + for _, msg := range m.MatchExpressions { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *LabelSelectorRequirement) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LabelSelectorRequirement) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Operator))) + i += copy(data[i:], m.Operator) + if len(m.Values) > 0 { + for _, s := range m.Values { + data[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *ListMeta) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ListMeta) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.SelfLink))) + i += copy(data[i:], m.SelfLink) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ResourceVersion))) + i += copy(data[i:], m.ResourceVersion) + return i, nil +} + +func (m *RootPaths) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *RootPaths) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Paths) > 0 { + for _, s := range m.Paths { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *ServerAddressByClientCIDR) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ServerAddressByClientCIDR) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ClientCIDR))) + i += copy(data[i:], m.ClientCIDR) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ServerAddress))) + i += copy(data[i:], m.ServerAddress) + return i, nil +} + +func (m *Status) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Status) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n2, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Status))) + i += copy(data[i:], m.Status) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + if m.Details != nil { + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Details.Size())) + n3, err := m.Details.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n3 + } + data[i] = 0x30 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Code)) + return i, nil +} + +func (m *StatusCause) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *StatusCause) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Field))) + i += copy(data[i:], m.Field) + return i, nil +} + +func (m *StatusDetails) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *StatusDetails) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Kind))) + i += copy(data[i:], m.Kind) + if len(m.Causes) > 0 { + for _, msg := range m.Causes { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + data[i] = 0x28 + i++ + i = encodeVarintGenerated(data, i, uint64(m.RetryAfterSeconds)) + return i, nil +} + +func (m *Timestamp) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Timestamp) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Seconds)) + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Nanos)) + return i, nil +} + +func (m *TypeMeta) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *TypeMeta) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Kind))) + i += copy(data[i:], m.Kind) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.APIVersion))) + i += copy(data[i:], m.APIVersion) + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *APIGroup) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Versions) > 0 { + for _, e := range m.Versions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.PreferredVersion.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.ServerAddressByClientCIDRs) > 0 { + for _, e := range m.ServerAddressByClientCIDRs { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *APIGroupList) Size() (n int) { + var l int + _ = l + if len(m.Groups) > 0 { + for _, e := range m.Groups { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *APIResource) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *APIResourceList) Size() (n int) { + var l int + _ = l + l = len(m.GroupVersion) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.APIResources) > 0 { + for _, e := range m.APIResources { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *APIVersions) Size() (n int) { + var l int + _ = l + if len(m.Versions) > 0 { + for _, s := range m.Versions { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.ServerAddressByClientCIDRs) > 0 { + for _, e := range m.ServerAddressByClientCIDRs { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Duration) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Duration)) + return n +} + +func (m *ExportOptions) Size() (n int) { + var l int + _ = l + n += 2 + n += 2 + return n +} + +func (m *GroupKind) Size() (n int) { + var l int + _ = l + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GroupResource) Size() (n int) { + var l int + _ = l + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Resource) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GroupVersion) Size() (n int) { + var l int + _ = l + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Version) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GroupVersionForDiscovery) Size() (n int) { + var l int + _ = l + l = len(m.GroupVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Version) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GroupVersionKind) Size() (n int) { + var l int + _ = l + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Version) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GroupVersionResource) Size() (n int) { + var l int + _ = l + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Version) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Resource) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LabelSelector) Size() (n int) { + var l int + _ = l + if len(m.MatchLabels) > 0 { + for k, v := range m.MatchLabels { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.MatchExpressions) > 0 { + for _, e := range m.MatchExpressions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LabelSelectorRequirement) Size() (n int) { + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operator) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for _, s := range m.Values { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ListMeta) Size() (n int) { + var l int + _ = l + l = len(m.SelfLink) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RootPaths) Size() (n int) { + var l int + _ = l + if len(m.Paths) > 0 { + for _, s := range m.Paths { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ServerAddressByClientCIDR) Size() (n int) { + var l int + _ = l + l = len(m.ClientCIDR) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ServerAddress) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Status) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + if m.Details != nil { + l = m.Details.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 1 + sovGenerated(uint64(m.Code)) + return n +} + +func (m *StatusCause) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Field) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *StatusDetails) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Causes) > 0 { + for _, e := range m.Causes { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 1 + sovGenerated(uint64(m.RetryAfterSeconds)) + return n +} + +func (m *Timestamp) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Seconds)) + n += 1 + sovGenerated(uint64(m.Nanos)) + return n +} + +func (m *TypeMeta) Size() (n int) { + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *APIGroup) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIGroup{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Versions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Versions), "GroupVersionForDiscovery", "GroupVersionForDiscovery", 1), `&`, ``, 1) + `,`, + `PreferredVersion:` + strings.Replace(strings.Replace(this.PreferredVersion.String(), "GroupVersionForDiscovery", "GroupVersionForDiscovery", 1), `&`, ``, 1) + `,`, + `ServerAddressByClientCIDRs:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ServerAddressByClientCIDRs), "ServerAddressByClientCIDR", "ServerAddressByClientCIDR", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *APIGroupList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIGroupList{`, + `Groups:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Groups), "APIGroup", "APIGroup", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *APIResource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIResource{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Namespaced:` + fmt.Sprintf("%v", this.Namespaced) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `}`, + }, "") + return s +} +func (this *APIResourceList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIResourceList{`, + `GroupVersion:` + fmt.Sprintf("%v", this.GroupVersion) + `,`, + `APIResources:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.APIResources), "APIResource", "APIResource", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Duration) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Duration{`, + `Duration:` + fmt.Sprintf("%v", this.Duration) + `,`, + `}`, + }, "") + return s +} +func (this *ExportOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExportOptions{`, + `Export:` + fmt.Sprintf("%v", this.Export) + `,`, + `Exact:` + fmt.Sprintf("%v", this.Exact) + `,`, + `}`, + }, "") + return s +} +func (this *GroupVersionForDiscovery) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GroupVersionForDiscovery{`, + `GroupVersion:` + fmt.Sprintf("%v", this.GroupVersion) + `,`, + `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelector) String() string { + if this == nil { + return "nil" + } + keysForMatchLabels := make([]string, 0, len(this.MatchLabels)) + for k := range this.MatchLabels { + keysForMatchLabels = append(keysForMatchLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMatchLabels) + mapStringForMatchLabels := "map[string]string{" + for _, k := range keysForMatchLabels { + mapStringForMatchLabels += fmt.Sprintf("%v: %v,", k, this.MatchLabels[k]) + } + mapStringForMatchLabels += "}" + s := strings.Join([]string{`&LabelSelector{`, + `MatchLabels:` + mapStringForMatchLabels + `,`, + `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "LabelSelectorRequirement", "LabelSelectorRequirement", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LabelSelectorRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *ListMeta) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ListMeta{`, + `SelfLink:` + fmt.Sprintf("%v", this.SelfLink) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `}`, + }, "") + return s +} +func (this *RootPaths) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RootPaths{`, + `Paths:` + fmt.Sprintf("%v", this.Paths) + `,`, + `}`, + }, "") + return s +} +func (this *ServerAddressByClientCIDR) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServerAddressByClientCIDR{`, + `ClientCIDR:` + fmt.Sprintf("%v", this.ClientCIDR) + `,`, + `ServerAddress:` + fmt.Sprintf("%v", this.ServerAddress) + `,`, + `}`, + }, "") + return s +} +func (this *Status) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Status{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "ListMeta", 1), `&`, ``, 1) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Details:` + strings.Replace(fmt.Sprintf("%v", this.Details), "StatusDetails", "StatusDetails", 1) + `,`, + `Code:` + fmt.Sprintf("%v", this.Code) + `,`, + `}`, + }, "") + return s +} +func (this *StatusCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StatusCause{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Field:` + fmt.Sprintf("%v", this.Field) + `,`, + `}`, + }, "") + return s +} +func (this *StatusDetails) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StatusDetails{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Causes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Causes), "StatusCause", "StatusCause", 1), `&`, ``, 1) + `,`, + `RetryAfterSeconds:` + fmt.Sprintf("%v", this.RetryAfterSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *Timestamp) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Timestamp{`, + `Seconds:` + fmt.Sprintf("%v", this.Seconds) + `,`, + `Nanos:` + fmt.Sprintf("%v", this.Nanos) + `,`, + `}`, + }, "") + return s +} +func (this *TypeMeta) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TypeMeta{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *APIGroup) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: APIGroup: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: APIGroup: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Versions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Versions = append(m.Versions, GroupVersionForDiscovery{}) + if err := m.Versions[len(m.Versions)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreferredVersion", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PreferredVersion.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServerAddressByClientCIDRs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServerAddressByClientCIDRs = append(m.ServerAddressByClientCIDRs, ServerAddressByClientCIDR{}) + if err := m.ServerAddressByClientCIDRs[len(m.ServerAddressByClientCIDRs)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *APIGroupList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: APIGroupList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: APIGroupList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, APIGroup{}) + if err := m.Groups[len(m.Groups)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *APIResource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: APIResource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: APIResource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespaced", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Namespaced = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *APIResourceList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: APIResourceList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: APIResourceList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIResources", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIResources = append(m.APIResources, APIResource{}) + if err := m.APIResources[len(m.APIResources)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *APIVersions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: APIVersions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: APIVersions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Versions", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Versions = append(m.Versions, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServerAddressByClientCIDRs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServerAddressByClientCIDRs = append(m.ServerAddressByClientCIDRs, ServerAddressByClientCIDR{}) + if err := m.ServerAddressByClientCIDRs[len(m.ServerAddressByClientCIDRs)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Duration) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Duration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Duration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + m.Duration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Duration |= (time.Duration(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExportOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExportOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExportOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Export", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Export = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Exact", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Exact = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GroupKind) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GroupKind: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupKind: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GroupResource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GroupResource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupResource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Resource = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GroupVersion) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GroupVersion: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupVersion: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GroupVersionForDiscovery) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GroupVersionForDiscovery: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupVersionForDiscovery: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GroupVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GroupVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GroupVersionKind) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GroupVersionKind: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupVersionKind: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GroupVersionResource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GroupVersionResource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GroupVersionResource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Resource = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LabelSelector) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LabelSelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LabelSelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchLabels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.MatchLabels == nil { + m.MatchLabels = make(map[string]string) + } + m.MatchLabels[mapkey] = mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchExpressions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MatchExpressions = append(m.MatchExpressions, LabelSelectorRequirement{}) + if err := m.MatchExpressions[len(m.MatchExpressions)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LabelSelectorRequirement) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LabelSelectorRequirement: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LabelSelectorRequirement: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = LabelSelectorOperator(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Values = append(m.Values, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListMeta) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SelfLink", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SelfLink = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RootPaths) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RootPaths: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RootPaths: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Paths", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Paths = append(m.Paths, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServerAddressByClientCIDR) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServerAddressByClientCIDR: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServerAddressByClientCIDR: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientCIDR", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientCIDR = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServerAddress = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Status) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Status: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Status: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = StatusReason(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Details == nil { + m.Details = &StatusDetails{} + } + if err := m.Details.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Code |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StatusCause) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StatusCause: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StatusCause: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = CauseType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Field", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Field = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StatusDetails) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StatusDetails: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StatusDetails: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Causes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Causes = append(m.Causes, StatusCause{}) + if err := m.Causes[len(m.Causes)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RetryAfterSeconds", wireType) + } + m.RetryAfterSeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.RetryAfterSeconds |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Timestamp) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Timestamp: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Timestamp: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Seconds", wireType) + } + m.Seconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Seconds |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Nanos", wireType) + } + m.Nanos = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Nanos |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TypeMeta) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TypeMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TypeMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 1376 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x57, 0xcd, 0x6f, 0x1b, 0x45, + 0x14, 0xf7, 0x47, 0xec, 0xae, 0x9f, 0x63, 0x92, 0x0e, 0xa9, 0x70, 0x2d, 0x11, 0x87, 0x45, 0xa0, + 0x54, 0x6a, 0x6d, 0x35, 0x02, 0x54, 0x15, 0xf1, 0x11, 0x27, 0x69, 0x15, 0x35, 0x49, 0xa3, 0x49, + 0x15, 0xa4, 0x16, 0x24, 0x36, 0xde, 0xb1, 0xb3, 0xb2, 0xbd, 0xbb, 0xec, 0xec, 0x56, 0x8d, 0x40, + 0xa2, 0x17, 0x24, 0x0e, 0x08, 0xe5, 0xc8, 0x05, 0xd4, 0x4a, 0xfc, 0x07, 0xfc, 0x13, 0x11, 0xa7, + 0x5e, 0x90, 0x38, 0xa0, 0x08, 0xca, 0x85, 0x2b, 0x57, 0x4e, 0xcc, 0xcc, 0xce, 0xec, 0x87, 0x53, + 0x93, 0x0d, 0xf4, 0xc0, 0x61, 0x15, 0xcf, 0xfb, 0x9e, 0xf7, 0x7e, 0xf3, 0xde, 0x0b, 0xbc, 0x39, + 0xb8, 0x46, 0x5b, 0x96, 0xd3, 0x1e, 0x04, 0x7b, 0xc4, 0xb3, 0x89, 0x4f, 0x68, 0xdb, 0x1d, 0xf4, + 0xdb, 0x86, 0x6b, 0xb5, 0x03, 0xfb, 0x3e, 0xf1, 0xa8, 0xe5, 0xd8, 0xc4, 0x6c, 0xf7, 0x89, 0x4d, + 0x3c, 0xc3, 0x27, 0x66, 0xcb, 0xf5, 0x1c, 0xdf, 0x41, 0xaf, 0x85, 0x6a, 0xad, 0x58, 0xad, 0xc5, + 0xd4, 0x5a, 0x4c, 0xad, 0x95, 0x50, 0x6b, 0x5c, 0xe9, 0x5b, 0xfe, 0x7e, 0xb0, 0xd7, 0xea, 0x3a, + 0xa3, 0x76, 0xdf, 0xe9, 0x3b, 0x6d, 0xa1, 0xbd, 0x17, 0xf4, 0xc4, 0x49, 0x1c, 0xc4, 0xaf, 0xd0, + 0x6a, 0xe3, 0xca, 0xb3, 0x83, 0xf1, 0x02, 0xdb, 0xb7, 0x46, 0x64, 0x3c, 0x88, 0xc6, 0xd5, 0x67, + 0x8b, 0x07, 0xbe, 0x35, 0x6c, 0x5b, 0xb6, 0x4f, 0x7d, 0x6f, 0x5c, 0x45, 0xff, 0xb1, 0x08, 0xda, + 0xf2, 0xf6, 0xfa, 0x4d, 0xcf, 0x09, 0x5c, 0xb4, 0x00, 0x53, 0xb6, 0x31, 0x22, 0xf5, 0xfc, 0x42, + 0x7e, 0xb1, 0xd2, 0x99, 0x3e, 0x3a, 0x6e, 0xe6, 0x9e, 0x1e, 0x37, 0xa7, 0xb6, 0x18, 0x0d, 0x0b, + 0x0e, 0x1a, 0x81, 0x26, 0x2f, 0x43, 0xeb, 0x85, 0x85, 0xe2, 0x62, 0x75, 0xe9, 0xbd, 0x56, 0xa6, + 0x9b, 0xb7, 0x84, 0x87, 0xdd, 0xf0, 0x78, 0xc3, 0xf1, 0x56, 0x2d, 0xda, 0x75, 0x18, 0xf7, 0xa0, + 0x33, 0x2b, 0xdd, 0x68, 0x92, 0x49, 0x71, 0xe4, 0x02, 0x7d, 0x91, 0x87, 0x59, 0xd7, 0x23, 0x3d, + 0xe2, 0x79, 0xc4, 0x94, 0xfc, 0x7a, 0x91, 0x45, 0xf7, 0x1c, 0xfc, 0xd6, 0xa5, 0xdf, 0xd9, 0xed, + 0x31, 0x07, 0xf8, 0x84, 0x4b, 0xf4, 0x7d, 0x1e, 0x1a, 0x94, 0x78, 0x4c, 0x6f, 0xd9, 0x34, 0x3d, + 0x42, 0x69, 0xe7, 0x60, 0x65, 0x68, 0x11, 0xdb, 0x5f, 0x59, 0x5f, 0xc5, 0xb4, 0x3e, 0x25, 0x32, + 0xf1, 0x7e, 0xc6, 0x88, 0x76, 0x26, 0x19, 0xea, 0xe8, 0x32, 0xa4, 0xc6, 0x44, 0x11, 0x8a, 0xff, + 0x21, 0x0e, 0xbd, 0x0f, 0xd3, 0xaa, 0x96, 0x1b, 0x16, 0xf5, 0xd1, 0x07, 0x50, 0xee, 0xf3, 0x03, + 0x65, 0x15, 0xe5, 0x11, 0xb6, 0x33, 0x46, 0xa8, 0x8c, 0x74, 0x5e, 0x90, 0x01, 0x95, 0xc5, 0x91, + 0x62, 0x69, 0x4e, 0x67, 0x75, 0xa9, 0x32, 0x21, 0x4c, 0xa8, 0x13, 0x78, 0x5d, 0x92, 0x01, 0x38, + 0x4b, 0x00, 0xfc, 0x2f, 0x75, 0x8d, 0x2e, 0x31, 0x19, 0x74, 0xf2, 0x8b, 0x5a, 0x07, 0x49, 0x39, + 0xd8, 0x8a, 0x38, 0x38, 0x21, 0xc5, 0xad, 0x0e, 0x2c, 0xdb, 0x14, 0x05, 0x4f, 0x58, 0xbd, 0xc5, + 0x68, 0x58, 0x70, 0xf4, 0x1f, 0xf2, 0x30, 0x93, 0x88, 0x43, 0x5c, 0xfa, 0x1a, 0x4c, 0xf7, 0x13, + 0x35, 0x97, 0x31, 0xcd, 0x49, 0xed, 0xe9, 0x24, 0x1e, 0x70, 0x4a, 0x12, 0xf5, 0xa0, 0xe2, 0x49, + 0x4b, 0x0a, 0xdd, 0x4b, 0xd9, 0x33, 0xa6, 0x82, 0x88, 0x5d, 0x25, 0x88, 0x14, 0xc7, 0xa6, 0xf5, + 0x3f, 0xc2, 0xec, 0x29, 0xbc, 0xa3, 0xc5, 0xc4, 0xa3, 0xe2, 0x85, 0x62, 0x77, 0x9d, 0xf0, 0x1e, + 0x4e, 0xc1, 0x61, 0xe1, 0xff, 0x81, 0xc3, 0xeb, 0xda, 0x37, 0x8f, 0x9a, 0xb9, 0x87, 0xbf, 0x2c, + 0xe4, 0xf4, 0x75, 0xd0, 0x56, 0x03, 0xd6, 0x6f, 0x78, 0x7a, 0xdf, 0x01, 0xcd, 0x94, 0xbf, 0x45, + 0x51, 0x8a, 0x9d, 0x57, 0xd4, 0xd3, 0x57, 0x32, 0x7f, 0x1d, 0x37, 0x6b, 0xbc, 0xb3, 0xb5, 0x14, + 0x01, 0x47, 0x2a, 0xfa, 0x87, 0x50, 0x5b, 0x7b, 0xe0, 0x3a, 0x9e, 0x7f, 0xdb, 0xf5, 0x45, 0x32, + 0x5e, 0x87, 0x32, 0x11, 0x04, 0x61, 0x4d, 0x8b, 0xc1, 0x1a, 0x8a, 0x61, 0xc9, 0x45, 0xaf, 0x42, + 0x89, 0x3c, 0x30, 0xba, 0xbe, 0x44, 0x5d, 0x4d, 0x8a, 0x95, 0xd6, 0x38, 0x11, 0x87, 0x3c, 0x66, + 0xbd, 0x22, 0x90, 0xc1, 0xc1, 0xc5, 0x35, 0x04, 0x30, 0x24, 0x76, 0x22, 0x0d, 0x21, 0x81, 0x43, + 0x5e, 0x84, 0xce, 0xc2, 0x24, 0x74, 0x26, 0xd2, 0x30, 0x84, 0x5a, 0xa8, 0xab, 0x1e, 0x4c, 0x26, + 0x0f, 0x97, 0x41, 0x53, 0xa0, 0x91, 0x5e, 0xa2, 0x5e, 0xa9, 0x0c, 0xe1, 0x48, 0x22, 0xe1, 0x6d, + 0x1f, 0x52, 0x28, 0xcf, 0xe6, 0xec, 0x12, 0x9c, 0x93, 0xd0, 0x90, 0xbe, 0x66, 0xa4, 0xd8, 0x39, + 0xf5, 0x58, 0x14, 0x3f, 0xe1, 0xe9, 0x73, 0xa8, 0x4f, 0xea, 0xaf, 0xff, 0xe1, 0x1d, 0x66, 0x0f, + 0x45, 0xff, 0x9a, 0x0d, 0x88, 0xa4, 0xa5, 0xec, 0xe5, 0xcb, 0xee, 0xe4, 0xf4, 0x3e, 0x94, 0xc8, + 0xc8, 0x77, 0x79, 0x98, 0x4b, 0x5d, 0xed, 0x4c, 0x15, 0x3f, 0x43, 0x50, 0x49, 0x70, 0x14, 0xcf, + 0x00, 0x8e, 0x9f, 0x0a, 0x50, 0xdb, 0x30, 0xf6, 0xc8, 0x70, 0x87, 0x0c, 0x49, 0xd7, 0x77, 0x3c, + 0xf4, 0x19, 0x54, 0x47, 0x86, 0xdf, 0xdd, 0x17, 0x54, 0x35, 0x2a, 0xd6, 0x32, 0x36, 0x91, 0x94, + 0xa9, 0xd6, 0x66, 0x6c, 0x67, 0xcd, 0xf6, 0xd9, 0x90, 0x7d, 0x51, 0xc6, 0x54, 0x4d, 0x70, 0x70, + 0xd2, 0x9d, 0x18, 0xf1, 0xe2, 0xcc, 0x5e, 0x2d, 0xef, 0x24, 0xff, 0x62, 0xb5, 0x48, 0xc5, 0x80, + 0xc9, 0x27, 0x81, 0xe5, 0x91, 0x11, 0x6b, 0x46, 0xf1, 0x88, 0xdf, 0x1c, 0x73, 0x80, 0x4f, 0xb8, + 0x6c, 0xbc, 0x0b, 0xb3, 0xe3, 0xd1, 0xa3, 0x59, 0x28, 0x0e, 0xc8, 0x41, 0x58, 0x31, 0xcc, 0x7f, + 0xa2, 0x39, 0x28, 0xdd, 0x37, 0x86, 0x81, 0x7c, 0x8f, 0x38, 0x3c, 0x5c, 0x2f, 0x5c, 0xcb, 0xeb, + 0xac, 0x35, 0xd7, 0x27, 0x05, 0x82, 0x5e, 0x4e, 0x18, 0xea, 0x54, 0x65, 0x54, 0xc5, 0x5b, 0xe4, + 0x20, 0xb4, 0xba, 0x06, 0x9a, 0xe3, 0xf2, 0xb5, 0xcc, 0xf1, 0x64, 0xdd, 0x2f, 0xa9, 0x5a, 0xde, + 0x96, 0x74, 0xd6, 0x19, 0x2f, 0xa4, 0xcc, 0x2b, 0x06, 0x8e, 0x54, 0x91, 0x0e, 0x65, 0x11, 0x0f, + 0x65, 0x80, 0xe0, 0x53, 0x04, 0x78, 0x33, 0xdc, 0x15, 0x14, 0x2c, 0x39, 0xfa, 0xa7, 0xa0, 0xf1, + 0x29, 0xb9, 0x49, 0x7c, 0x83, 0x43, 0x88, 0x92, 0x61, 0x6f, 0xc3, 0xb2, 0x07, 0x32, 0xb4, 0x08, + 0x42, 0x3b, 0x92, 0x8e, 0x23, 0x09, 0xb4, 0x0c, 0x33, 0x0a, 0x4e, 0xbb, 0x29, 0x8c, 0xbe, 0x24, + 0x95, 0x66, 0x70, 0x9a, 0x8d, 0xc7, 0xe5, 0xf5, 0xcb, 0x50, 0xc1, 0x8e, 0xe3, 0x6f, 0x1b, 0xfe, + 0x3e, 0x45, 0x4d, 0x28, 0xb9, 0xfc, 0x87, 0x1c, 0x79, 0x15, 0xfe, 0x18, 0x04, 0x07, 0x87, 0x74, + 0xfd, 0xab, 0x3c, 0x5c, 0x9c, 0x38, 0x80, 0xf8, 0x42, 0xd1, 0x8d, 0x4e, 0x32, 0xfc, 0x68, 0xa1, + 0x88, 0xe5, 0x70, 0x42, 0x0a, 0xbd, 0x0d, 0xb5, 0xd4, 0xd4, 0x92, 0x17, 0xb8, 0x20, 0xd5, 0x6a, + 0x29, 0x6f, 0x38, 0x2d, 0xab, 0xff, 0x59, 0x80, 0xf2, 0x8e, 0x6f, 0xf8, 0x01, 0x45, 0x1f, 0x81, + 0x36, 0x62, 0x09, 0x34, 0x0d, 0xdf, 0x10, 0x9e, 0xb3, 0x6f, 0x56, 0x2a, 0xf7, 0x71, 0xa6, 0x15, + 0x05, 0x47, 0x26, 0xf9, 0x60, 0xa3, 0xc2, 0x91, 0x8c, 0x2f, 0x1a, 0x6c, 0xa1, 0x7b, 0x2c, 0xb9, + 0xbc, 0x5b, 0xb0, 0x5d, 0x89, 0x1a, 0x7d, 0xd5, 0x01, 0xa2, 0x6e, 0xb1, 0x19, 0x92, 0xb1, 0xe2, + 0xa3, 0xb7, 0xa0, 0xec, 0x11, 0x83, 0xb2, 0x9a, 0x4d, 0x09, 0xc9, 0x79, 0x65, 0x12, 0x0b, 0x2a, + 0x43, 0xd7, 0xb4, 0x34, 0x2e, 0xce, 0x58, 0x4a, 0xa3, 0x7b, 0x70, 0xce, 0x64, 0x61, 0x59, 0xac, + 0x2f, 0x94, 0xc4, 0x45, 0xdf, 0xc8, 0xba, 0x5c, 0x08, 0x6b, 0xab, 0xa1, 0x6e, 0xa7, 0xca, 0x83, + 0x92, 0x07, 0xac, 0x2c, 0xf2, 0xbe, 0xda, 0x75, 0x4c, 0x52, 0x2f, 0x33, 0xcb, 0xa5, 0xb8, 0xaf, + 0xae, 0x30, 0x1a, 0x16, 0x1c, 0xfd, 0x90, 0x6d, 0x4a, 0xa1, 0xa5, 0x15, 0x23, 0xa0, 0x04, 0x5d, + 0x8d, 0xae, 0x11, 0x16, 0xfc, 0xa2, 0xd2, 0xb9, 0x73, 0xe0, 0x12, 0x76, 0x89, 0x8a, 0x10, 0xe3, + 0x87, 0xe8, 0x06, 0x89, 0x24, 0x15, 0x4e, 0x49, 0x12, 0x6b, 0xd1, 0x3d, 0x8b, 0x0c, 0x55, 0xa3, + 0x8f, 0x5a, 0xf4, 0x0d, 0x4e, 0xc4, 0x21, 0x4f, 0xff, 0x96, 0xf5, 0xcf, 0xd4, 0xe5, 0x32, 0x2c, + 0xbf, 0x51, 0xef, 0x2f, 0x64, 0xd8, 0x27, 0x26, 0x4e, 0x19, 0x74, 0x17, 0xca, 0x5d, 0x7e, 0x3f, + 0xf5, 0x0f, 0xc7, 0xd2, 0x99, 0x6a, 0x21, 0x52, 0x13, 0x63, 0x49, 0x1c, 0x19, 0x96, 0x42, 0x8b, + 0xe8, 0x26, 0x9c, 0xf7, 0x08, 0xeb, 0x79, 0xcb, 0x3d, 0x9f, 0x78, 0x3b, 0xa4, 0xeb, 0xd8, 0x66, + 0x58, 0xf2, 0x52, 0x94, 0xe4, 0xf3, 0x78, 0x5c, 0x00, 0x9f, 0xd4, 0x61, 0xab, 0xce, 0xd4, 0x1d, + 0xb6, 0xc1, 0xf1, 0xbc, 0x53, 0x69, 0x26, 0x5c, 0xf6, 0xa2, 0xbc, 0x2b, 0x65, 0xc5, 0xe7, 0xe9, + 0xb1, 0x0d, 0xdb, 0x09, 0xe1, 0x5e, 0x8a, 0xd3, 0xb3, 0xc5, 0x89, 0x38, 0xe4, 0x5d, 0x9f, 0xe3, + 0x13, 0xec, 0xcb, 0xc7, 0xcd, 0xdc, 0x21, 0xfb, 0x1e, 0x3d, 0x96, 0xd3, 0xec, 0x1e, 0x54, 0xb8, + 0x37, 0xf6, 0x20, 0x46, 0xee, 0xf3, 0x76, 0xa9, 0x7f, 0x0c, 0x1a, 0x87, 0x92, 0xe8, 0x95, 0xaa, + 0x3a, 0xf9, 0x89, 0xd5, 0x61, 0x0d, 0x89, 0x25, 0x3e, 0xdd, 0x1a, 0xa3, 0x86, 0x14, 0xaf, 0xfb, + 0x38, 0x21, 0xd5, 0xb9, 0x72, 0xf4, 0xdb, 0x7c, 0xee, 0x09, 0xfb, 0x7e, 0x66, 0xdf, 0xc3, 0xa7, + 0xf3, 0xf9, 0x23, 0xf6, 0x3d, 0x61, 0xdf, 0xaf, 0xec, 0x3b, 0xfc, 0x7d, 0x3e, 0x77, 0xb7, 0x9a, + 0x28, 0xe4, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x22, 0x00, 0xde, 0x9c, 0x10, 0x00, 0x00, +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/generated.proto b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/generated.proto new file mode 100644 index 00000000..bd72ad34 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/generated.proto @@ -0,0 +1,378 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.api.unversioned; + +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "unversioned"; + +// APIGroup contains the name, the supported versions, and the preferred version +// of a group. +message APIGroup { + // name is the name of the group. + optional string name = 1; + + // versions are the versions supported in this group. + repeated GroupVersionForDiscovery versions = 2; + + // preferredVersion is the version preferred by the API server, which + // probably is the storage version. + optional GroupVersionForDiscovery preferredVersion = 3; + + // a map of client CIDR to server address that is serving this group. + // This is to help clients reach servers in the most network-efficient way possible. + // Clients can use the appropriate server address as per the CIDR that they match. + // In case of multiple matches, clients should use the longest matching CIDR. + // The server returns only those CIDRs that it thinks that the client can match. + // For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. + // Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP. + repeated ServerAddressByClientCIDR serverAddressByClientCIDRs = 4; +} + +// APIGroupList is a list of APIGroup, to allow clients to discover the API at +// /apis. +message APIGroupList { + // groups is a list of APIGroup. + repeated APIGroup groups = 1; +} + +// APIResource specifies the name of a resource and whether it is namespaced. +message APIResource { + // name is the name of the resource. + optional string name = 1; + + // namespaced indicates if a resource is namespaced or not. + optional bool namespaced = 2; + + // kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') + optional string kind = 3; +} + +// APIResourceList is a list of APIResource, it is used to expose the name of the +// resources supported in a specific group and version, and if the resource +// is namespaced. +message APIResourceList { + // groupVersion is the group and version this APIResourceList is for. + optional string groupVersion = 1; + + // resources contains the name of the resources and if they are namespaced. + repeated APIResource resources = 2; +} + +// APIVersions lists the versions that are available, to allow clients to +// discover the API at /api, which is the root path of the legacy v1 API. +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +message APIVersions { + // versions are the api versions that are available. + repeated string versions = 1; + + // a map of client CIDR to server address that is serving this group. + // This is to help clients reach servers in the most network-efficient way possible. + // Clients can use the appropriate server address as per the CIDR that they match. + // In case of multiple matches, clients should use the longest matching CIDR. + // The server returns only those CIDRs that it thinks that the client can match. + // For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. + // Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP. + repeated ServerAddressByClientCIDR serverAddressByClientCIDRs = 2; +} + +// Duration is a wrapper around time.Duration which supports correct +// marshaling to YAML and JSON. In particular, it marshals into strings, which +// can be used as map keys in json. +message Duration { + optional int64 duration = 1; +} + +// ExportOptions is the query options to the standard REST get call. +message ExportOptions { + // Should this value be exported. Export strips fields that a user can not specify.` + optional bool export = 1; + + // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace' + optional bool exact = 2; +} + +// GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying +// concepts during lookup stages without having partially valid types +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +message GroupKind { + optional string group = 1; + + optional string kind = 2; +} + +// GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying +// concepts during lookup stages without having partially valid types +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +message GroupResource { + optional string group = 1; + + optional string resource = 2; +} + +// GroupVersion contains the "group" and the "version", which uniquely identifies the API. +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +message GroupVersion { + optional string group = 1; + + optional string version = 2; +} + +// GroupVersion contains the "group/version" and "version" string of a version. +// It is made a struct to keep extensibility. +message GroupVersionForDiscovery { + // groupVersion specifies the API group and version in the form "group/version" + optional string groupVersion = 1; + + // version specifies the version in the form of "version". This is to save + // the clients the trouble of splitting the GroupVersion. + optional string version = 2; +} + +// GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion +// to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +message GroupVersionKind { + optional string group = 1; + + optional string version = 2; + + optional string kind = 3; +} + +// GroupVersionResource unambiguously identifies a resource. It doesn't anonymously include GroupVersion +// to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +message GroupVersionResource { + optional string group = 1; + + optional string version = 2; + + optional string resource = 3; +} + +// A label selector is a label query over a set of resources. The result of matchLabels and +// matchExpressions are ANDed. An empty label selector matches all objects. A null +// label selector matches no objects. +message LabelSelector { + // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + // map is equivalent to an element of matchExpressions, whose key field is "key", the + // operator is "In", and the values array contains only "value". The requirements are ANDed. + map matchLabels = 1; + + // matchExpressions is a list of label selector requirements. The requirements are ANDed. + repeated LabelSelectorRequirement matchExpressions = 2; +} + +// A label selector requirement is a selector that contains values, a key, and an operator that +// relates the key and values. +message LabelSelectorRequirement { + // key is the label key that the selector applies to. + optional string key = 1; + + // operator represents a key's relationship to a set of values. + // Valid operators ard In, NotIn, Exists and DoesNotExist. + optional string operator = 2; + + // values is an array of string values. If the operator is In or NotIn, + // the values array must be non-empty. If the operator is Exists or DoesNotExist, + // the values array must be empty. This array is replaced during a strategic + // merge patch. + repeated string values = 3; +} + +// ListMeta describes metadata that synthetic resources must have, including lists and +// various status objects. A resource may have only one of {ObjectMeta, ListMeta}. +message ListMeta { + // SelfLink is a URL representing this object. + // Populated by the system. + // Read-only. + optional string selfLink = 1; + + // String that identifies the server's internal version of this object that + // can be used by clients to determine when objects have changed. + // Value must be treated as opaque by clients and passed unmodified back to the server. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency + optional string resourceVersion = 2; +} + +// RootPaths lists the paths available at root. +// For example: "/healthz", "/apis". +message RootPaths { + // paths are the paths available at root. + repeated string paths = 1; +} + +// ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match. +message ServerAddressByClientCIDR { + // The CIDR with which clients can match their IP to figure out the server address that they should use. + optional string clientCIDR = 1; + + // Address of this server, suitable for a client that matches the above CIDR. + // This can be a hostname, hostname:port, IP or IP:port. + optional string serverAddress = 2; +} + +// Status is a return value for calls that don't return other objects. +message Status { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional ListMeta metadata = 1; + + // Status of the operation. + // One of: "Success" or "Failure". + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional string status = 2; + + // A human-readable description of the status of this operation. + optional string message = 3; + + // A machine-readable description of why this operation is in the + // "Failure" status. If this value is empty there + // is no information available. A Reason clarifies an HTTP status + // code but does not override it. + optional string reason = 4; + + // Extended data associated with the reason. Each reason may define its + // own extended details. This field is optional and the data returned + // is not guaranteed to conform to any schema except that defined by + // the reason type. + optional StatusDetails details = 5; + + // Suggested HTTP return code for this status, 0 if not set. + optional int32 code = 6; +} + +// StatusCause provides more information about an api.Status failure, including +// cases when multiple errors are encountered. +message StatusCause { + // A machine-readable description of the cause of the error. If this value is + // empty there is no information available. + optional string reason = 1; + + // A human-readable description of the cause of the error. This field may be + // presented as-is to a reader. + optional string message = 2; + + // The field of the resource that has caused this error, as named by its JSON + // serialization. May include dot and postfix notation for nested attributes. + // Arrays are zero-indexed. Fields may appear more than once in an array of + // causes due to fields having multiple errors. + // Optional. + // + // Examples: + // "name" - the field "name" on the current resource + // "items[0].name" - the field "name" on the first array entry in "items" + optional string field = 3; +} + +// StatusDetails is a set of additional properties that MAY be set by the +// server to provide additional information about a response. The Reason +// field of a Status object defines what attributes will be set. Clients +// must ignore fields that do not match the defined type of each attribute, +// and should assume that any attribute may be empty, invalid, or under +// defined. +message StatusDetails { + // The name attribute of the resource associated with the status StatusReason + // (when there is a single name which can be described). + optional string name = 1; + + // The group attribute of the resource associated with the status StatusReason. + optional string group = 2; + + // The kind attribute of the resource associated with the status StatusReason. + // On some operations may differ from the requested resource Kind. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional string kind = 3; + + // The Causes array includes more details associated with the StatusReason + // failure. Not all StatusReasons may provide detailed causes. + repeated StatusCause causes = 4; + + // If specified, the time in seconds before the operation should be retried. + optional int32 retryAfterSeconds = 5; +} + +// Time is a wrapper around time.Time which supports correct +// marshaling to YAML and JSON. Wrappers are provided for many +// of the factory methods that the time package offers. +// +// +protobuf.options.marshal=false +// +protobuf.as=Timestamp +// +protobuf.options.(gogoproto.goproto_stringer)=false +message Time { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + optional int64 seconds = 1; + + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. This field may be limited in precision depending on context. + optional int32 nanos = 2; +} + +// Timestamp is a struct that is equivalent to Time, but intended for +// protobuf marshalling/unmarshalling. It is generated into a serialization +// that matches Time. Do not use in Go structs. +message Timestamp { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + optional int64 seconds = 1; + + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. This field may be limited in precision depending on context. + optional int32 nanos = 2; +} + +// TypeMeta describes an individual object in an API response or request +// with strings representing the type of the object and its API schema version. +// Structures that are versioned or persisted should inline TypeMeta. +message TypeMeta { + // Kind is a string value representing the REST resource this object represents. + // Servers may infer this from the endpoint the client submits requests to. + // Cannot be updated. + // In CamelCase. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional string kind = 1; + + // APIVersion defines the versioned schema of this representation of an object. + // Servers should convert recognized schemas to the latest internal value, and + // may reject unrecognized values. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#resources + optional string apiVersion = 2; +} + diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/group_version.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/group_version.go new file mode 100644 index 00000000..dfbfe3a3 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/group_version.go @@ -0,0 +1,325 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "encoding/json" + "fmt" + "strings" +) + +// ParseResourceArg takes the common style of string which may be either `resource.group.com` or `resource.version.group.com` +// and parses it out into both possibilities. This code takes no responsibility for knowing which representation was intended +// but with a knowledge of all GroupVersions, calling code can take a very good guess. If there are only two segments, then +// `*GroupVersionResource` is nil. +// `resource.group.com` -> `group=com, version=group, resource=resource` and `group=group.com, resource=resource` +func ParseResourceArg(arg string) (*GroupVersionResource, GroupResource) { + var gvr *GroupVersionResource + if strings.Count(arg, ".") >= 2 { + s := strings.SplitN(arg, ".", 3) + gvr = &GroupVersionResource{Group: s[2], Version: s[1], Resource: s[0]} + } + + return gvr, ParseGroupResource(arg) +} + +// GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying +// concepts during lookup stages without having partially valid types +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +type GroupResource struct { + Group string `protobuf:"bytes,1,opt,name=group"` + Resource string `protobuf:"bytes,2,opt,name=resource"` +} + +func (gr GroupResource) WithVersion(version string) GroupVersionResource { + return GroupVersionResource{Group: gr.Group, Version: version, Resource: gr.Resource} +} + +func (gr GroupResource) Empty() bool { + return len(gr.Group) == 0 && len(gr.Resource) == 0 +} + +func (gr *GroupResource) String() string { + if len(gr.Group) == 0 { + return gr.Resource + } + return gr.Resource + "." + gr.Group +} + +// ParseGroupResource turns "resource.group" string into a GroupResource struct. Empty strings are allowed +// for each field. +func ParseGroupResource(gr string) GroupResource { + if i := strings.Index(gr, "."); i == -1 { + return GroupResource{Resource: gr} + } else { + return GroupResource{Group: gr[i+1:], Resource: gr[:i]} + } +} + +// GroupVersionResource unambiguously identifies a resource. It doesn't anonymously include GroupVersion +// to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +type GroupVersionResource struct { + Group string `protobuf:"bytes,1,opt,name=group"` + Version string `protobuf:"bytes,2,opt,name=version"` + Resource string `protobuf:"bytes,3,opt,name=resource"` +} + +func (gvr GroupVersionResource) Empty() bool { + return len(gvr.Group) == 0 && len(gvr.Version) == 0 && len(gvr.Resource) == 0 +} + +func (gvr GroupVersionResource) GroupResource() GroupResource { + return GroupResource{Group: gvr.Group, Resource: gvr.Resource} +} + +func (gvr GroupVersionResource) GroupVersion() GroupVersion { + return GroupVersion{Group: gvr.Group, Version: gvr.Version} +} + +func (gvr *GroupVersionResource) String() string { + return strings.Join([]string{gvr.Group, "/", gvr.Version, ", Resource=", gvr.Resource}, "") +} + +// GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying +// concepts during lookup stages without having partially valid types +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +type GroupKind struct { + Group string `protobuf:"bytes,1,opt,name=group"` + Kind string `protobuf:"bytes,2,opt,name=kind"` +} + +func (gk GroupKind) Empty() bool { + return len(gk.Group) == 0 && len(gk.Kind) == 0 +} + +func (gk GroupKind) WithVersion(version string) GroupVersionKind { + return GroupVersionKind{Group: gk.Group, Version: version, Kind: gk.Kind} +} + +func (gk *GroupKind) String() string { + if len(gk.Group) == 0 { + return gk.Kind + } + return gk.Kind + "." + gk.Group +} + +// GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion +// to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +type GroupVersionKind struct { + Group string `protobuf:"bytes,1,opt,name=group"` + Version string `protobuf:"bytes,2,opt,name=version"` + Kind string `protobuf:"bytes,3,opt,name=kind"` +} + +// Empty returns true if group, version, and kind are empty +func (gvk GroupVersionKind) Empty() bool { + return len(gvk.Group) == 0 && len(gvk.Version) == 0 && len(gvk.Kind) == 0 +} + +func (gvk GroupVersionKind) GroupKind() GroupKind { + return GroupKind{Group: gvk.Group, Kind: gvk.Kind} +} + +func (gvk GroupVersionKind) GroupVersion() GroupVersion { + return GroupVersion{Group: gvk.Group, Version: gvk.Version} +} + +func (gvk GroupVersionKind) String() string { + return gvk.Group + "/" + gvk.Version + ", Kind=" + gvk.Kind +} + +// GroupVersion contains the "group" and the "version", which uniquely identifies the API. +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +type GroupVersion struct { + Group string `protobuf:"bytes,1,opt,name=group"` + Version string `protobuf:"bytes,2,opt,name=version"` +} + +// Empty returns true if group and version are empty +func (gv GroupVersion) Empty() bool { + return len(gv.Group) == 0 && len(gv.Version) == 0 +} + +// String puts "group" and "version" into a single "group/version" string. For the legacy v1 +// it returns "v1". +func (gv GroupVersion) String() string { + // special case the internal apiVersion for the legacy kube types + if gv.Empty() { + return "" + } + + // special case of "v1" for backward compatibility + if len(gv.Group) == 0 && gv.Version == "v1" { + return gv.Version + } + if len(gv.Group) > 0 { + return gv.Group + "/" + gv.Version + } + return gv.Version +} + +// KindForGroupVersionKinds identifies the preferred GroupVersionKind out of a list. It returns ok false +// if none of the options match the group. It prefers a match to group and version over just group. +// TODO: Move GroupVersion to a package under pkg/runtime, since it's used by scheme. +// TODO: Introduce an adapter type between GroupVersion and runtime.GroupVersioner, and use LegacyCodec(GroupVersion) +// in fewer places. +func (gv GroupVersion) KindForGroupVersionKinds(kinds []GroupVersionKind) (target GroupVersionKind, ok bool) { + for _, gvk := range kinds { + if gvk.Group == gv.Group && gvk.Version == gv.Version { + return gvk, true + } + } + for _, gvk := range kinds { + if gvk.Group == gv.Group { + return gv.WithKind(gvk.Kind), true + } + } + return GroupVersionKind{}, false +} + +// ParseGroupVersion turns "group/version" string into a GroupVersion struct. It reports error +// if it cannot parse the string. +func ParseGroupVersion(gv string) (GroupVersion, error) { + // this can be the internal version for the legacy kube types + // TODO once we've cleared the last uses as strings, this special case should be removed. + if (len(gv) == 0) || (gv == "/") { + return GroupVersion{}, nil + } + + switch strings.Count(gv, "/") { + case 0: + return GroupVersion{"", gv}, nil + case 1: + i := strings.Index(gv, "/") + return GroupVersion{gv[:i], gv[i+1:]}, nil + default: + return GroupVersion{}, fmt.Errorf("unexpected GroupVersion string: %v", gv) + } +} + +// WithKind creates a GroupVersionKind based on the method receiver's GroupVersion and the passed Kind. +func (gv GroupVersion) WithKind(kind string) GroupVersionKind { + return GroupVersionKind{Group: gv.Group, Version: gv.Version, Kind: kind} +} + +// WithResource creates a GroupVersionResource based on the method receiver's GroupVersion and the passed Resource. +func (gv GroupVersion) WithResource(resource string) GroupVersionResource { + return GroupVersionResource{Group: gv.Group, Version: gv.Version, Resource: resource} +} + +// MarshalJSON implements the json.Marshaller interface. +func (gv GroupVersion) MarshalJSON() ([]byte, error) { + s := gv.String() + if strings.Count(s, "/") > 1 { + return []byte{}, fmt.Errorf("illegal GroupVersion %v: contains more than one /", s) + } + return json.Marshal(s) +} + +func (gv *GroupVersion) unmarshal(value []byte) error { + var s string + if err := json.Unmarshal(value, &s); err != nil { + return err + } + parsed, err := ParseGroupVersion(s) + if err != nil { + return err + } + *gv = parsed + return nil +} + +// UnmarshalJSON implements the json.Unmarshaller interface. +func (gv *GroupVersion) UnmarshalJSON(value []byte) error { + return gv.unmarshal(value) +} + +// UnmarshalTEXT implements the Ugorji's encoding.TextUnmarshaler interface. +func (gv *GroupVersion) UnmarshalText(value []byte) error { + return gv.unmarshal(value) +} + +// GroupVersions can be used to represent a set of desired group versions. +// TODO: Move GroupVersions to a package under pkg/runtime, since it's used by scheme. +// TODO: Introduce an adapter type between GroupVersions and runtime.GroupVersioner, and use LegacyCodec(GroupVersion) +// in fewer places. +type GroupVersions []GroupVersion + +// KindForGroupVersionKinds identifies the preferred GroupVersionKind out of a list. It returns ok false +// if none of the options match the group. +func (gvs GroupVersions) KindForGroupVersionKinds(kinds []GroupVersionKind) (target GroupVersionKind, ok bool) { + for _, gv := range gvs { + target, ok := gv.KindForGroupVersionKinds(kinds) + if !ok { + continue + } + return target, true + } + return GroupVersionKind{}, false +} + +// ToAPIVersionAndKind is a convenience method for satisfying runtime.Object on types that +// do not use TypeMeta. +func (gvk *GroupVersionKind) ToAPIVersionAndKind() (string, string) { + if gvk == nil { + return "", "" + } + return gvk.GroupVersion().String(), gvk.Kind +} + +// FromAPIVersionAndKind returns a GVK representing the provided fields for types that +// do not use TypeMeta. This method exists to support test types and legacy serializations +// that have a distinct group and kind. +// TODO: further reduce usage of this method. +func FromAPIVersionAndKind(apiVersion, kind string) GroupVersionKind { + if gv, err := ParseGroupVersion(apiVersion); err == nil { + return GroupVersionKind{Group: gv.Group, Version: gv.Version, Kind: kind} + } + return GroupVersionKind{Kind: kind} +} + +// All objects that are serialized from a Scheme encode their type information. This interface is used +// by serialization to set type information from the Scheme onto the serialized version of an object. +// For objects that cannot be serialized or have unique requirements, this interface may be a no-op. +// TODO: this belongs in pkg/runtime, move unversioned.GVK into runtime. +type ObjectKind interface { + // SetGroupVersionKind sets or clears the intended serialized kind of an object. Passing kind nil + // should clear the current setting. + SetGroupVersionKind(kind GroupVersionKind) + // GroupVersionKind returns the stored group, version, and kind of an object, or nil if the object does + // not expose or provide these fields. + GroupVersionKind() GroupVersionKind +} + +// EmptyObjectKind implements the ObjectKind interface as a noop +// TODO: this belongs in pkg/runtime, move unversioned.GVK into runtime. +var EmptyObjectKind = emptyObjectKind{} + +type emptyObjectKind struct{} + +// SetGroupVersionKind implements the ObjectKind interface +func (emptyObjectKind) SetGroupVersionKind(gvk GroupVersionKind) {} + +// GroupVersionKind implements the ObjectKind interface +func (emptyObjectKind) GroupVersionKind() GroupVersionKind { return GroupVersionKind{} } diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/helpers.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/helpers.go new file mode 100644 index 00000000..c0cbd18b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/helpers.go @@ -0,0 +1,184 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "fmt" + + "k8s.io/client-go/1.4/pkg/labels" + "k8s.io/client-go/1.4/pkg/selection" + "k8s.io/client-go/1.4/pkg/util/sets" +) + +// LabelSelectorAsSelector converts the LabelSelector api type into a struct that implements +// labels.Selector +// Note: This function should be kept in sync with the selector methods in pkg/labels/selector.go +func LabelSelectorAsSelector(ps *LabelSelector) (labels.Selector, error) { + if ps == nil { + return labels.Nothing(), nil + } + if len(ps.MatchLabels)+len(ps.MatchExpressions) == 0 { + return labels.Everything(), nil + } + selector := labels.NewSelector() + for k, v := range ps.MatchLabels { + r, err := labels.NewRequirement(k, selection.Equals, sets.NewString(v)) + if err != nil { + return nil, err + } + selector = selector.Add(*r) + } + for _, expr := range ps.MatchExpressions { + var op selection.Operator + switch expr.Operator { + case LabelSelectorOpIn: + op = selection.In + case LabelSelectorOpNotIn: + op = selection.NotIn + case LabelSelectorOpExists: + op = selection.Exists + case LabelSelectorOpDoesNotExist: + op = selection.DoesNotExist + default: + return nil, fmt.Errorf("%q is not a valid pod selector operator", expr.Operator) + } + r, err := labels.NewRequirement(expr.Key, op, sets.NewString(expr.Values...)) + if err != nil { + return nil, err + } + selector = selector.Add(*r) + } + return selector, nil +} + +// LabelSelectorAsMap converts the LabelSelector api type into a map of strings, ie. the +// original structure of a label selector. Operators that cannot be converted into plain +// labels (Exists, DoesNotExist, NotIn, and In with more than one value) will result in +// an error. +func LabelSelectorAsMap(ps *LabelSelector) (map[string]string, error) { + if ps == nil { + return nil, nil + } + selector := map[string]string{} + for k, v := range ps.MatchLabels { + selector[k] = v + } + for _, expr := range ps.MatchExpressions { + switch expr.Operator { + case LabelSelectorOpIn: + if len(expr.Values) != 1 { + return selector, fmt.Errorf("operator %q without a single value cannot be converted into the old label selector format", expr.Operator) + } + // Should we do anything in case this will override a previous key-value pair? + selector[expr.Key] = expr.Values[0] + case LabelSelectorOpNotIn, LabelSelectorOpExists, LabelSelectorOpDoesNotExist: + return selector, fmt.Errorf("operator %q cannot be converted into the old label selector format", expr.Operator) + default: + return selector, fmt.Errorf("%q is not a valid selector operator", expr.Operator) + } + } + return selector, nil +} + +// ParseToLabelSelector parses a string representing a selector into a LabelSelector object. +// Note: This function should be kept in sync with the parser in pkg/labels/selector.go +func ParseToLabelSelector(selector string) (*LabelSelector, error) { + reqs, err := labels.ParseToRequirements(selector) + if err != nil { + return nil, fmt.Errorf("couldn't parse the selector string \"%s\": %v", selector, err) + } + + labelSelector := &LabelSelector{ + MatchLabels: map[string]string{}, + MatchExpressions: []LabelSelectorRequirement{}, + } + for _, req := range reqs { + var op LabelSelectorOperator + switch req.Operator() { + case selection.Equals, selection.DoubleEquals: + vals := req.Values() + if vals.Len() != 1 { + return nil, fmt.Errorf("equals operator must have exactly one value") + } + val, ok := vals.PopAny() + if !ok { + return nil, fmt.Errorf("equals operator has exactly one value but it cannot be retrieved") + } + labelSelector.MatchLabels[req.Key()] = val + continue + case selection.In: + op = LabelSelectorOpIn + case selection.NotIn: + op = LabelSelectorOpNotIn + case selection.Exists: + op = LabelSelectorOpExists + case selection.DoesNotExist: + op = LabelSelectorOpDoesNotExist + case selection.GreaterThan, selection.LessThan: + // Adding a separate case for these operators to indicate that this is deliberate + return nil, fmt.Errorf("%q isn't supported in label selectors", req.Operator()) + default: + return nil, fmt.Errorf("%q is not a valid label selector operator", req.Operator()) + } + labelSelector.MatchExpressions = append(labelSelector.MatchExpressions, LabelSelectorRequirement{ + Key: req.Key(), + Operator: op, + Values: req.Values().List(), + }) + } + return labelSelector, nil +} + +// SetAsLabelSelector converts the labels.Set object into a LabelSelector api object. +func SetAsLabelSelector(ls labels.Set) *LabelSelector { + if ls == nil { + return nil + } + + selector := &LabelSelector{ + MatchLabels: make(map[string]string), + } + for label, value := range ls { + selector.MatchLabels[label] = value + } + + return selector +} + +// FormatLabelSelector convert labelSelector into plain string +func FormatLabelSelector(labelSelector *LabelSelector) string { + selector, err := LabelSelectorAsSelector(labelSelector) + if err != nil { + return "" + } + + l := selector.String() + if len(l) == 0 { + l = "" + } + return l +} + +func ExtractGroupVersions(l *APIGroupList) []string { + var groupVersions []string + for _, g := range l.Groups { + for _, gv := range g.Versions { + groupVersions = append(groupVersions, gv.GroupVersion) + } + } + return groupVersions +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/meta.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/meta.go new file mode 100644 index 00000000..48009da1 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/meta.go @@ -0,0 +1,62 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +// ListMetaAccessor retrieves the list interface from an object +// TODO: move this, and TypeMeta and ListMeta, to a different package +type ListMetaAccessor interface { + GetListMeta() List +} + +// List lets you work with list metadata from any of the versioned or +// internal API objects. Attempting to set or retrieve a field on an object that does +// not support that field will be a no-op and return a default value. +// TODO: move this, and TypeMeta and ListMeta, to a different package +type List interface { + GetResourceVersion() string + SetResourceVersion(version string) + GetSelfLink() string + SetSelfLink(selfLink string) +} + +// Type exposes the type and APIVersion of versioned or internal API objects. +// TODO: move this, and TypeMeta and ListMeta, to a different package +type Type interface { + GetAPIVersion() string + SetAPIVersion(version string) + GetKind() string + SetKind(kind string) +} + +func (meta *ListMeta) GetResourceVersion() string { return meta.ResourceVersion } +func (meta *ListMeta) SetResourceVersion(version string) { meta.ResourceVersion = version } +func (meta *ListMeta) GetSelfLink() string { return meta.SelfLink } +func (meta *ListMeta) SetSelfLink(selfLink string) { meta.SelfLink = selfLink } + +func (obj *TypeMeta) GetObjectKind() ObjectKind { return obj } + +// SetGroupVersionKind satisfies the ObjectKind interface for all objects that embed TypeMeta +func (obj *TypeMeta) SetGroupVersionKind(gvk GroupVersionKind) { + obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind() +} + +// GroupVersionKind satisfies the ObjectKind interface for all objects that embed TypeMeta +func (obj *TypeMeta) GroupVersionKind() GroupVersionKind { + return FromAPIVersionAndKind(obj.APIVersion, obj.Kind) +} + +func (obj *ListMeta) GetListMeta() List { return obj } diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/register.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/register.go new file mode 100644 index 00000000..907188bc --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/register.go @@ -0,0 +1,25 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = GroupVersion{Group: "", Version: ""} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/time.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/time.go new file mode 100644 index 00000000..7e6281a2 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/time.go @@ -0,0 +1,166 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "encoding/json" + "time" + + "github.com/google/gofuzz" +) + +// Time is a wrapper around time.Time which supports correct +// marshaling to YAML and JSON. Wrappers are provided for many +// of the factory methods that the time package offers. +// +// +protobuf.options.marshal=false +// +protobuf.as=Timestamp +// +protobuf.options.(gogoproto.goproto_stringer)=false +type Time struct { + time.Time `protobuf:"-"` +} + +// DeepCopy returns a deep-copy of the Time value. The underlying time.Time +// type is effectively immutable in the time API, so it is safe to +// copy-by-assign, despite the presence of (unexported) Pointer fields. +func (t Time) DeepCopy() Time { + return t +} + +// String returns the representation of the time. +func (t Time) String() string { + return t.Time.String() +} + +// NewTime returns a wrapped instance of the provided time +func NewTime(time time.Time) Time { + return Time{time} +} + +// Date returns the Time corresponding to the supplied parameters +// by wrapping time.Date. +func Date(year int, month time.Month, day, hour, min, sec, nsec int, loc *time.Location) Time { + return Time{time.Date(year, month, day, hour, min, sec, nsec, loc)} +} + +// Now returns the current local time. +func Now() Time { + return Time{time.Now()} +} + +// IsZero returns true if the value is nil or time is zero. +func (t *Time) IsZero() bool { + if t == nil { + return true + } + return t.Time.IsZero() +} + +// Before reports whether the time instant t is before u. +func (t Time) Before(u Time) bool { + return t.Time.Before(u.Time) +} + +// Equal reports whether the time instant t is equal to u. +func (t Time) Equal(u Time) bool { + return t.Time.Equal(u.Time) +} + +// Unix returns the local time corresponding to the given Unix time +// by wrapping time.Unix. +func Unix(sec int64, nsec int64) Time { + return Time{time.Unix(sec, nsec)} +} + +// Rfc3339Copy returns a copy of the Time at second-level precision. +func (t Time) Rfc3339Copy() Time { + copied, _ := time.Parse(time.RFC3339, t.Format(time.RFC3339)) + return Time{copied} +} + +// UnmarshalJSON implements the json.Unmarshaller interface. +func (t *Time) UnmarshalJSON(b []byte) error { + if len(b) == 4 && string(b) == "null" { + t.Time = time.Time{} + return nil + } + + var str string + json.Unmarshal(b, &str) + + pt, err := time.Parse(time.RFC3339, str) + if err != nil { + return err + } + + t.Time = pt.Local() + return nil +} + +// UnmarshalQueryParameter converts from a URL query parameter value to an object +func (t *Time) UnmarshalQueryParameter(str string) error { + if len(str) == 0 { + t.Time = time.Time{} + return nil + } + // Tolerate requests from older clients that used JSON serialization to build query params + if len(str) == 4 && str == "null" { + t.Time = time.Time{} + return nil + } + + pt, err := time.Parse(time.RFC3339, str) + if err != nil { + return err + } + + t.Time = pt.Local() + return nil +} + +// MarshalJSON implements the json.Marshaler interface. +func (t Time) MarshalJSON() ([]byte, error) { + if t.IsZero() { + // Encode unset/nil objects as JSON's "null". + return []byte("null"), nil + } + + return json.Marshal(t.UTC().Format(time.RFC3339)) +} + +// MarshalQueryParameter converts to a URL query parameter value +func (t Time) MarshalQueryParameter() (string, error) { + if t.IsZero() { + // Encode unset/nil objects as an empty string + return "", nil + } + + return t.UTC().Format(time.RFC3339), nil +} + +// Fuzz satisfies fuzz.Interface. +func (t *Time) Fuzz(c fuzz.Continue) { + if t == nil { + return + } + // Allow for about 1000 years of randomness. Leave off nanoseconds + // because JSON doesn't represent them so they can't round-trip + // properly. + t.Time = time.Unix(c.Rand.Int63n(1000*365*24*60*60), 0) +} + +var _ fuzz.Interface = &Time{} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/time_proto.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/time_proto.go new file mode 100644 index 00000000..ba25e916 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/time_proto.go @@ -0,0 +1,85 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "time" +) + +// Timestamp is a struct that is equivalent to Time, but intended for +// protobuf marshalling/unmarshalling. It is generated into a serialization +// that matches Time. Do not use in Go structs. +type Timestamp struct { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + Seconds int64 `json:"seconds" protobuf:"varint,1,opt,name=seconds"` + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. This field may be limited in precision depending on context. + Nanos int32 `json:"nanos" protobuf:"varint,2,opt,name=nanos"` +} + +// Timestamp returns the Time as a new Timestamp value. +func (m *Time) ProtoTime() *Timestamp { + if m == nil { + return &Timestamp{} + } + return &Timestamp{ + Seconds: m.Time.Unix(), + Nanos: int32(m.Time.Nanosecond()), + } +} + +// Size implements the protobuf marshalling interface. +func (m *Time) Size() (n int) { + if m == nil || m.Time.IsZero() { + return 0 + } + return m.ProtoTime().Size() +} + +// Reset implements the protobuf marshalling interface. +func (m *Time) Unmarshal(data []byte) error { + if len(data) == 0 { + m.Time = time.Time{} + return nil + } + p := Timestamp{} + if err := p.Unmarshal(data); err != nil { + return err + } + m.Time = time.Unix(p.Seconds, int64(p.Nanos)).Local() + return nil +} + +// Marshal implements the protobuf marshalling interface. +func (m *Time) Marshal() (data []byte, err error) { + if m == nil || m.Time.IsZero() { + return nil, nil + } + return m.ProtoTime().Marshal() +} + +// MarshalTo implements the protobuf marshalling interface. +func (m *Time) MarshalTo(data []byte) (int, error) { + if m == nil || m.Time.IsZero() { + return 0, nil + } + return m.ProtoTime().MarshalTo(data) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/types.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/types.go new file mode 100644 index 00000000..18882a21 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/types.go @@ -0,0 +1,460 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package unversioned contains API types that are common to all versions. +// +// The package contains two categories of types: +// - external (serialized) types that lack their own version (e.g TypeMeta) +// - internal (never-serialized) types that are needed by several different +// api groups, and so live here, to avoid duplication and/or import loops +// (e.g. LabelSelector). +// In the future, we will probably move these categories of objects into +// separate packages. +package unversioned + +import "strings" + +// TypeMeta describes an individual object in an API response or request +// with strings representing the type of the object and its API schema version. +// Structures that are versioned or persisted should inline TypeMeta. +type TypeMeta struct { + // Kind is a string value representing the REST resource this object represents. + // Servers may infer this from the endpoint the client submits requests to. + // Cannot be updated. + // In CamelCase. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` + + // APIVersion defines the versioned schema of this representation of an object. + // Servers should convert recognized schemas to the latest internal value, and + // may reject unrecognized values. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#resources + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,2,opt,name=apiVersion"` +} + +// ListMeta describes metadata that synthetic resources must have, including lists and +// various status objects. A resource may have only one of {ObjectMeta, ListMeta}. +type ListMeta struct { + // SelfLink is a URL representing this object. + // Populated by the system. + // Read-only. + SelfLink string `json:"selfLink,omitempty" protobuf:"bytes,1,opt,name=selfLink"` + + // String that identifies the server's internal version of this object that + // can be used by clients to determine when objects have changed. + // Value must be treated as opaque by clients and passed unmodified back to the server. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency + ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,2,opt,name=resourceVersion"` +} + +// ExportOptions is the query options to the standard REST get call. +type ExportOptions struct { + TypeMeta `json:",inline"` + // Should this value be exported. Export strips fields that a user can not specify.` + Export bool `json:"export" protobuf:"varint,1,opt,name=export"` + // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace' + Exact bool `json:"exact" protobuf:"varint,2,opt,name=exact"` +} + +// Status is a return value for calls that don't return other objects. +type Status struct { + TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Status of the operation. + // One of: "Success" or "Failure". + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status string `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` + // A human-readable description of the status of this operation. + Message string `json:"message,omitempty" protobuf:"bytes,3,opt,name=message"` + // A machine-readable description of why this operation is in the + // "Failure" status. If this value is empty there + // is no information available. A Reason clarifies an HTTP status + // code but does not override it. + Reason StatusReason `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason,casttype=StatusReason"` + // Extended data associated with the reason. Each reason may define its + // own extended details. This field is optional and the data returned + // is not guaranteed to conform to any schema except that defined by + // the reason type. + Details *StatusDetails `json:"details,omitempty" protobuf:"bytes,5,opt,name=details"` + // Suggested HTTP return code for this status, 0 if not set. + Code int32 `json:"code,omitempty" protobuf:"varint,6,opt,name=code"` +} + +// StatusDetails is a set of additional properties that MAY be set by the +// server to provide additional information about a response. The Reason +// field of a Status object defines what attributes will be set. Clients +// must ignore fields that do not match the defined type of each attribute, +// and should assume that any attribute may be empty, invalid, or under +// defined. +type StatusDetails struct { + // The name attribute of the resource associated with the status StatusReason + // (when there is a single name which can be described). + Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + // The group attribute of the resource associated with the status StatusReason. + Group string `json:"group,omitempty" protobuf:"bytes,2,opt,name=group"` + // The kind attribute of the resource associated with the status StatusReason. + // On some operations may differ from the requested resource Kind. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + Kind string `json:"kind,omitempty" protobuf:"bytes,3,opt,name=kind"` + // The Causes array includes more details associated with the StatusReason + // failure. Not all StatusReasons may provide detailed causes. + Causes []StatusCause `json:"causes,omitempty" protobuf:"bytes,4,rep,name=causes"` + // If specified, the time in seconds before the operation should be retried. + RetryAfterSeconds int32 `json:"retryAfterSeconds,omitempty" protobuf:"varint,5,opt,name=retryAfterSeconds"` +} + +// Values of Status.Status +const ( + StatusSuccess = "Success" + StatusFailure = "Failure" +) + +// StatusReason is an enumeration of possible failure causes. Each StatusReason +// must map to a single HTTP status code, but multiple reasons may map +// to the same HTTP status code. +// TODO: move to apiserver +type StatusReason string + +const ( + // StatusReasonUnknown means the server has declined to indicate a specific reason. + // The details field may contain other information about this error. + // Status code 500. + StatusReasonUnknown StatusReason = "" + + // StatusReasonUnauthorized means the server can be reached and understood the request, but requires + // the user to present appropriate authorization credentials (identified by the WWW-Authenticate header) + // in order for the action to be completed. If the user has specified credentials on the request, the + // server considers them insufficient. + // Status code 401 + StatusReasonUnauthorized StatusReason = "Unauthorized" + + // StatusReasonForbidden means the server can be reached and understood the request, but refuses + // to take any further action. It is the result of the server being configured to deny access for some reason + // to the requested resource by the client. + // Details (optional): + // "kind" string - the kind attribute of the forbidden resource + // on some operations may differ from the requested + // resource. + // "id" string - the identifier of the forbidden resource + // Status code 403 + StatusReasonForbidden StatusReason = "Forbidden" + + // StatusReasonNotFound means one or more resources required for this operation + // could not be found. + // Details (optional): + // "kind" string - the kind attribute of the missing resource + // on some operations may differ from the requested + // resource. + // "id" string - the identifier of the missing resource + // Status code 404 + StatusReasonNotFound StatusReason = "NotFound" + + // StatusReasonAlreadyExists means the resource you are creating already exists. + // Details (optional): + // "kind" string - the kind attribute of the conflicting resource + // "id" string - the identifier of the conflicting resource + // Status code 409 + StatusReasonAlreadyExists StatusReason = "AlreadyExists" + + // StatusReasonConflict means the requested operation cannot be completed + // due to a conflict in the operation. The client may need to alter the + // request. Each resource may define custom details that indicate the + // nature of the conflict. + // Status code 409 + StatusReasonConflict StatusReason = "Conflict" + + // StatusReasonGone means the item is no longer available at the server and no + // forwarding address is known. + // Status code 410 + StatusReasonGone StatusReason = "Gone" + + // StatusReasonInvalid means the requested create or update operation cannot be + // completed due to invalid data provided as part of the request. The client may + // need to alter the request. When set, the client may use the StatusDetails + // message field as a summary of the issues encountered. + // Details (optional): + // "kind" string - the kind attribute of the invalid resource + // "id" string - the identifier of the invalid resource + // "causes" - one or more StatusCause entries indicating the data in the + // provided resource that was invalid. The code, message, and + // field attributes will be set. + // Status code 422 + StatusReasonInvalid StatusReason = "Invalid" + + // StatusReasonServerTimeout means the server can be reached and understood the request, + // but cannot complete the action in a reasonable time. The client should retry the request. + // This is may be due to temporary server load or a transient communication issue with + // another server. Status code 500 is used because the HTTP spec provides no suitable + // server-requested client retry and the 5xx class represents actionable errors. + // Details (optional): + // "kind" string - the kind attribute of the resource being acted on. + // "id" string - the operation that is being attempted. + // "retryAfterSeconds" int32 - the number of seconds before the operation should be retried + // Status code 500 + StatusReasonServerTimeout StatusReason = "ServerTimeout" + + // StatusReasonTimeout means that the request could not be completed within the given time. + // Clients can get this response only when they specified a timeout param in the request, + // or if the server cannot complete the operation within a reasonable amount of time. + // The request might succeed with an increased value of timeout param. The client *should* + // wait at least the number of seconds specified by the retryAfterSeconds field. + // Details (optional): + // "retryAfterSeconds" int32 - the number of seconds before the operation should be retried + // Status code 504 + StatusReasonTimeout StatusReason = "Timeout" + + // StatusReasonBadRequest means that the request itself was invalid, because the request + // doesn't make any sense, for example deleting a read-only object. This is different than + // StatusReasonInvalid above which indicates that the API call could possibly succeed, but the + // data was invalid. API calls that return BadRequest can never succeed. + StatusReasonBadRequest StatusReason = "BadRequest" + + // StatusReasonMethodNotAllowed means that the action the client attempted to perform on the + // resource was not supported by the code - for instance, attempting to delete a resource that + // can only be created. API calls that return MethodNotAllowed can never succeed. + StatusReasonMethodNotAllowed StatusReason = "MethodNotAllowed" + + // StatusReasonInternalError indicates that an internal error occurred, it is unexpected + // and the outcome of the call is unknown. + // Details (optional): + // "causes" - The original error + // Status code 500 + StatusReasonInternalError StatusReason = "InternalError" + + // StatusReasonExpired indicates that the request is invalid because the content you are requesting + // has expired and is no longer available. It is typically associated with watches that can't be + // serviced. + // Status code 410 (gone) + StatusReasonExpired StatusReason = "Expired" + + // StatusReasonServiceUnavailable means that the request itself was valid, + // but the requested service is unavailable at this time. + // Retrying the request after some time might succeed. + // Status code 503 + StatusReasonServiceUnavailable StatusReason = "ServiceUnavailable" +) + +// StatusCause provides more information about an api.Status failure, including +// cases when multiple errors are encountered. +type StatusCause struct { + // A machine-readable description of the cause of the error. If this value is + // empty there is no information available. + Type CauseType `json:"reason,omitempty" protobuf:"bytes,1,opt,name=reason,casttype=CauseType"` + // A human-readable description of the cause of the error. This field may be + // presented as-is to a reader. + Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` + // The field of the resource that has caused this error, as named by its JSON + // serialization. May include dot and postfix notation for nested attributes. + // Arrays are zero-indexed. Fields may appear more than once in an array of + // causes due to fields having multiple errors. + // Optional. + // + // Examples: + // "name" - the field "name" on the current resource + // "items[0].name" - the field "name" on the first array entry in "items" + Field string `json:"field,omitempty" protobuf:"bytes,3,opt,name=field"` +} + +// CauseType is a machine readable value providing more detail about what +// occurred in a status response. An operation may have multiple causes for a +// status (whether Failure or Success). +type CauseType string + +const ( + // CauseTypeFieldValueNotFound is used to report failure to find a requested value + // (e.g. looking up an ID). + CauseTypeFieldValueNotFound CauseType = "FieldValueNotFound" + // CauseTypeFieldValueRequired is used to report required values that are not + // provided (e.g. empty strings, null values, or empty arrays). + CauseTypeFieldValueRequired CauseType = "FieldValueRequired" + // CauseTypeFieldValueDuplicate is used to report collisions of values that must be + // unique (e.g. unique IDs). + CauseTypeFieldValueDuplicate CauseType = "FieldValueDuplicate" + // CauseTypeFieldValueInvalid is used to report malformed values (e.g. failed regex + // match). + CauseTypeFieldValueInvalid CauseType = "FieldValueInvalid" + // CauseTypeFieldValueNotSupported is used to report valid (as per formatting rules) + // values that can not be handled (e.g. an enumerated string). + CauseTypeFieldValueNotSupported CauseType = "FieldValueNotSupported" + // CauseTypeUnexpectedServerResponse is used to report when the server responded to the client + // without the expected return type. The presence of this cause indicates the error may be + // due to an intervening proxy or the server software malfunctioning. + CauseTypeUnexpectedServerResponse CauseType = "UnexpectedServerResponse" +) + +// APIVersions lists the versions that are available, to allow clients to +// discover the API at /api, which is the root path of the legacy v1 API. +// +// +protobuf.options.(gogoproto.goproto_stringer)=false +type APIVersions struct { + TypeMeta `json:",inline"` + // versions are the api versions that are available. + Versions []string `json:"versions" protobuf:"bytes,1,rep,name=versions"` + // a map of client CIDR to server address that is serving this group. + // This is to help clients reach servers in the most network-efficient way possible. + // Clients can use the appropriate server address as per the CIDR that they match. + // In case of multiple matches, clients should use the longest matching CIDR. + // The server returns only those CIDRs that it thinks that the client can match. + // For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. + // Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP. + ServerAddressByClientCIDRs []ServerAddressByClientCIDR `json:"serverAddressByClientCIDRs" protobuf:"bytes,2,rep,name=serverAddressByClientCIDRs"` +} + +// APIGroupList is a list of APIGroup, to allow clients to discover the API at +// /apis. +type APIGroupList struct { + TypeMeta `json:",inline"` + // groups is a list of APIGroup. + Groups []APIGroup `json:"groups" protobuf:"bytes,1,rep,name=groups"` +} + +// APIGroup contains the name, the supported versions, and the preferred version +// of a group. +type APIGroup struct { + TypeMeta `json:",inline"` + // name is the name of the group. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // versions are the versions supported in this group. + Versions []GroupVersionForDiscovery `json:"versions" protobuf:"bytes,2,rep,name=versions"` + // preferredVersion is the version preferred by the API server, which + // probably is the storage version. + PreferredVersion GroupVersionForDiscovery `json:"preferredVersion,omitempty" protobuf:"bytes,3,opt,name=preferredVersion"` + // a map of client CIDR to server address that is serving this group. + // This is to help clients reach servers in the most network-efficient way possible. + // Clients can use the appropriate server address as per the CIDR that they match. + // In case of multiple matches, clients should use the longest matching CIDR. + // The server returns only those CIDRs that it thinks that the client can match. + // For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. + // Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP. + ServerAddressByClientCIDRs []ServerAddressByClientCIDR `json:"serverAddressByClientCIDRs" protobuf:"bytes,4,rep,name=serverAddressByClientCIDRs"` +} + +// ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match. +type ServerAddressByClientCIDR struct { + // The CIDR with which clients can match their IP to figure out the server address that they should use. + ClientCIDR string `json:"clientCIDR" protobuf:"bytes,1,opt,name=clientCIDR"` + // Address of this server, suitable for a client that matches the above CIDR. + // This can be a hostname, hostname:port, IP or IP:port. + ServerAddress string `json:"serverAddress" protobuf:"bytes,2,opt,name=serverAddress"` +} + +// GroupVersion contains the "group/version" and "version" string of a version. +// It is made a struct to keep extensibility. +type GroupVersionForDiscovery struct { + // groupVersion specifies the API group and version in the form "group/version" + GroupVersion string `json:"groupVersion" protobuf:"bytes,1,opt,name=groupVersion"` + // version specifies the version in the form of "version". This is to save + // the clients the trouble of splitting the GroupVersion. + Version string `json:"version" protobuf:"bytes,2,opt,name=version"` +} + +// APIResource specifies the name of a resource and whether it is namespaced. +type APIResource struct { + // name is the name of the resource. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // namespaced indicates if a resource is namespaced or not. + Namespaced bool `json:"namespaced" protobuf:"varint,2,opt,name=namespaced"` + // kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo') + Kind string `json:"kind" protobuf:"bytes,3,opt,name=kind"` +} + +// APIResourceList is a list of APIResource, it is used to expose the name of the +// resources supported in a specific group and version, and if the resource +// is namespaced. +type APIResourceList struct { + TypeMeta `json:",inline"` + // groupVersion is the group and version this APIResourceList is for. + GroupVersion string `json:"groupVersion" protobuf:"bytes,1,opt,name=groupVersion"` + // resources contains the name of the resources and if they are namespaced. + APIResources []APIResource `json:"resources" protobuf:"bytes,2,rep,name=resources"` +} + +// RootPaths lists the paths available at root. +// For example: "/healthz", "/apis". +type RootPaths struct { + // paths are the paths available at root. + Paths []string `json:"paths" protobuf:"bytes,1,rep,name=paths"` +} + +// TODO: remove me when watch is refactored +func LabelSelectorQueryParam(version string) string { + return "labelSelector" +} + +// TODO: remove me when watch is refactored +func FieldSelectorQueryParam(version string) string { + return "fieldSelector" +} + +// String returns available api versions as a human-friendly version string. +func (apiVersions APIVersions) String() string { + return strings.Join(apiVersions.Versions, ",") +} + +func (apiVersions APIVersions) GoString() string { + return apiVersions.String() +} + +// Patch is provided to give a concrete name and type to the Kubernetes PATCH request body. +type Patch struct{} + +// Note: +// There are two different styles of label selectors used in versioned types: +// an older style which is represented as just a string in versioned types, and a +// newer style that is structured. LabelSelector is an internal representation for the +// latter style. + +// A label selector is a label query over a set of resources. The result of matchLabels and +// matchExpressions are ANDed. An empty label selector matches all objects. A null +// label selector matches no objects. +type LabelSelector struct { + // matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + // map is equivalent to an element of matchExpressions, whose key field is "key", the + // operator is "In", and the values array contains only "value". The requirements are ANDed. + MatchLabels map[string]string `json:"matchLabels,omitempty" protobuf:"bytes,1,rep,name=matchLabels"` + // matchExpressions is a list of label selector requirements. The requirements are ANDed. + MatchExpressions []LabelSelectorRequirement `json:"matchExpressions,omitempty" protobuf:"bytes,2,rep,name=matchExpressions"` +} + +// A label selector requirement is a selector that contains values, a key, and an operator that +// relates the key and values. +type LabelSelectorRequirement struct { + // key is the label key that the selector applies to. + Key string `json:"key" patchStrategy:"merge" patchMergeKey:"key" protobuf:"bytes,1,opt,name=key"` + // operator represents a key's relationship to a set of values. + // Valid operators ard In, NotIn, Exists and DoesNotExist. + Operator LabelSelectorOperator `json:"operator" protobuf:"bytes,2,opt,name=operator,casttype=LabelSelectorOperator"` + // values is an array of string values. If the operator is In or NotIn, + // the values array must be non-empty. If the operator is Exists or DoesNotExist, + // the values array must be empty. This array is replaced during a strategic + // merge patch. + Values []string `json:"values,omitempty" protobuf:"bytes,3,rep,name=values"` +} + +// A label selector operator is the set of operators that can be used in a selector requirement. +type LabelSelectorOperator string + +const ( + LabelSelectorOpIn LabelSelectorOperator = "In" + LabelSelectorOpNotIn LabelSelectorOperator = "NotIn" + LabelSelectorOpExists LabelSelectorOperator = "Exists" + LabelSelectorOpDoesNotExist LabelSelectorOperator = "DoesNotExist" +) diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/types_swagger_doc_generated.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/types_swagger_doc_generated.go new file mode 100644 index 00000000..e0355f51 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/types_swagger_doc_generated.go @@ -0,0 +1,208 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_APIGroup = map[string]string{ + "": "APIGroup contains the name, the supported versions, and the preferred version of a group.", + "name": "name is the name of the group.", + "versions": "versions are the versions supported in this group.", + "preferredVersion": "preferredVersion is the version preferred by the API server, which probably is the storage version.", + "serverAddressByClientCIDRs": "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", +} + +func (APIGroup) SwaggerDoc() map[string]string { + return map_APIGroup +} + +var map_APIGroupList = map[string]string{ + "": "APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.", + "groups": "groups is a list of APIGroup.", +} + +func (APIGroupList) SwaggerDoc() map[string]string { + return map_APIGroupList +} + +var map_APIResource = map[string]string{ + "": "APIResource specifies the name of a resource and whether it is namespaced.", + "name": "name is the name of the resource.", + "namespaced": "namespaced indicates if a resource is namespaced or not.", + "kind": "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", +} + +func (APIResource) SwaggerDoc() map[string]string { + return map_APIResource +} + +var map_APIResourceList = map[string]string{ + "": "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", + "groupVersion": "groupVersion is the group and version this APIResourceList is for.", + "resources": "resources contains the name of the resources and if they are namespaced.", +} + +func (APIResourceList) SwaggerDoc() map[string]string { + return map_APIResourceList +} + +var map_APIVersions = map[string]string{ + "": "APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.", + "versions": "versions are the api versions that are available.", + "serverAddressByClientCIDRs": "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", +} + +func (APIVersions) SwaggerDoc() map[string]string { + return map_APIVersions +} + +var map_ExportOptions = map[string]string{ + "": "ExportOptions is the query options to the standard REST get call.", + "export": "Should this value be exported. Export strips fields that a user can not specify.`", + "exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'", +} + +func (ExportOptions) SwaggerDoc() map[string]string { + return map_ExportOptions +} + +var map_GroupVersionForDiscovery = map[string]string{ + "": "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.", + "groupVersion": "groupVersion specifies the API group and version in the form \"group/version\"", + "version": "version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.", +} + +func (GroupVersionForDiscovery) SwaggerDoc() map[string]string { + return map_GroupVersionForDiscovery +} + +var map_LabelSelector = map[string]string{ + "": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "matchLabels": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "matchExpressions": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", +} + +func (LabelSelector) SwaggerDoc() map[string]string { + return map_LabelSelector +} + +var map_LabelSelectorRequirement = map[string]string{ + "": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "key": "key is the label key that the selector applies to.", + "operator": "operator represents a key's relationship to a set of values. Valid operators ard In, NotIn, Exists and DoesNotExist.", + "values": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", +} + +func (LabelSelectorRequirement) SwaggerDoc() map[string]string { + return map_LabelSelectorRequirement +} + +var map_ListMeta = map[string]string{ + "": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "selfLink": "SelfLink is a URL representing this object. Populated by the system. Read-only.", + "resourceVersion": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency", +} + +func (ListMeta) SwaggerDoc() map[string]string { + return map_ListMeta +} + +var map_Patch = map[string]string{ + "": "Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.", +} + +func (Patch) SwaggerDoc() map[string]string { + return map_Patch +} + +var map_RootPaths = map[string]string{ + "": "RootPaths lists the paths available at root. For example: \"/healthz\", \"/apis\".", + "paths": "paths are the paths available at root.", +} + +func (RootPaths) SwaggerDoc() map[string]string { + return map_RootPaths +} + +var map_ServerAddressByClientCIDR = map[string]string{ + "": "ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.", + "clientCIDR": "The CIDR with which clients can match their IP to figure out the server address that they should use.", + "serverAddress": "Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.", +} + +func (ServerAddressByClientCIDR) SwaggerDoc() map[string]string { + return map_ServerAddressByClientCIDR +} + +var map_Status = map[string]string{ + "": "Status is a return value for calls that don't return other objects.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "status": "Status of the operation. One of: \"Success\" or \"Failure\". More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "message": "A human-readable description of the status of this operation.", + "reason": "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.", + "details": "Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.", + "code": "Suggested HTTP return code for this status, 0 if not set.", +} + +func (Status) SwaggerDoc() map[string]string { + return map_Status +} + +var map_StatusCause = map[string]string{ + "": "StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.", + "reason": "A machine-readable description of the cause of the error. If this value is empty there is no information available.", + "message": "A human-readable description of the cause of the error. This field may be presented as-is to a reader.", + "field": "The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n\nExamples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\"", +} + +func (StatusCause) SwaggerDoc() map[string]string { + return map_StatusCause +} + +var map_StatusDetails = map[string]string{ + "": "StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.", + "name": "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", + "group": "The group attribute of the resource associated with the status StatusReason.", + "kind": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "causes": "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", + "retryAfterSeconds": "If specified, the time in seconds before the operation should be retried.", +} + +func (StatusDetails) SwaggerDoc() map[string]string { + return map_StatusDetails +} + +var map_TypeMeta = map[string]string{ + "": "TypeMeta describes an individual object in an API response or request with strings representing the type of the object and its API schema version. Structures that are versioned or persisted should inline TypeMeta.", + "kind": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "apiVersion": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#resources", +} + +func (TypeMeta) SwaggerDoc() map[string]string { + return map_TypeMeta +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/validation/validation.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/validation/validation.go new file mode 100644 index 00000000..6276fdc8 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/validation/validation.go @@ -0,0 +1,74 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/util/validation" + "k8s.io/client-go/1.4/pkg/util/validation/field" +) + +func ValidateLabelSelector(ps *unversioned.LabelSelector, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if ps == nil { + return allErrs + } + allErrs = append(allErrs, ValidateLabels(ps.MatchLabels, fldPath.Child("matchLabels"))...) + for i, expr := range ps.MatchExpressions { + allErrs = append(allErrs, ValidateLabelSelectorRequirement(expr, fldPath.Child("matchExpressions").Index(i))...) + } + return allErrs +} + +func ValidateLabelSelectorRequirement(sr unversioned.LabelSelectorRequirement, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + switch sr.Operator { + case unversioned.LabelSelectorOpIn, unversioned.LabelSelectorOpNotIn: + if len(sr.Values) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("values"), "must be specified when `operator` is 'In' or 'NotIn'")) + } + case unversioned.LabelSelectorOpExists, unversioned.LabelSelectorOpDoesNotExist: + if len(sr.Values) > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("values"), "may not be specified when `operator` is 'Exists' or 'DoesNotExist'")) + } + default: + allErrs = append(allErrs, field.Invalid(fldPath.Child("operator"), sr.Operator, "not a valid selector operator")) + } + allErrs = append(allErrs, ValidateLabelName(sr.Key, fldPath.Child("key"))...) + return allErrs +} + +// ValidateLabelName validates that the label name is correctly defined. +func ValidateLabelName(labelName string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsQualifiedName(labelName) { + allErrs = append(allErrs, field.Invalid(fldPath, labelName, msg)) + } + return allErrs +} + +// ValidateLabels validates that a set of labels are correctly defined. +func ValidateLabels(labels map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for k, v := range labels { + allErrs = append(allErrs, ValidateLabelName(k, fldPath)...) + for _, msg := range validation.IsValidLabelValue(v) { + allErrs = append(allErrs, field.Invalid(fldPath, v, msg)) + } + } + return allErrs +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/well_known_labels.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/well_known_labels.go new file mode 100644 index 00000000..318c6eeb --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/well_known_labels.go @@ -0,0 +1,30 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +const ( + // If you add a new topology domain here, also consider adding it to the set of default values + // for the scheduler's --failure-domain command-line argument. + LabelHostname = "kubernetes.io/hostname" + LabelZoneFailureDomain = "failure-domain.beta.kubernetes.io/zone" + LabelZoneRegion = "failure-domain.beta.kubernetes.io/region" + + LabelInstanceType = "beta.kubernetes.io/instance-type" + + LabelOS = "beta.kubernetes.io/os" + LabelArch = "beta.kubernetes.io/arch" +) diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/zz_generated.deepcopy.go new file mode 100644 index 00000000..c732daaa --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/unversioned/zz_generated.deepcopy.go @@ -0,0 +1,390 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package unversioned + +import ( + conversion "k8s.io/client-go/1.4/pkg/conversion" + time "time" +) + +func DeepCopy_unversioned_APIGroup(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIGroup) + out := out.(*APIGroup) + out.TypeMeta = in.TypeMeta + out.Name = in.Name + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]GroupVersionForDiscovery, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Versions = nil + } + out.PreferredVersion = in.PreferredVersion + if in.ServerAddressByClientCIDRs != nil { + in, out := &in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs + *out = make([]ServerAddressByClientCIDR, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ServerAddressByClientCIDRs = nil + } + return nil + } +} + +func DeepCopy_unversioned_APIGroupList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIGroupList) + out := out.(*APIGroupList) + out.TypeMeta = in.TypeMeta + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]APIGroup, len(*in)) + for i := range *in { + if err := DeepCopy_unversioned_APIGroup(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Groups = nil + } + return nil + } +} + +func DeepCopy_unversioned_APIResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIResource) + out := out.(*APIResource) + out.Name = in.Name + out.Namespaced = in.Namespaced + out.Kind = in.Kind + return nil + } +} + +func DeepCopy_unversioned_APIResourceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIResourceList) + out := out.(*APIResourceList) + out.TypeMeta = in.TypeMeta + out.GroupVersion = in.GroupVersion + if in.APIResources != nil { + in, out := &in.APIResources, &out.APIResources + *out = make([]APIResource, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.APIResources = nil + } + return nil + } +} + +func DeepCopy_unversioned_APIVersions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIVersions) + out := out.(*APIVersions) + out.TypeMeta = in.TypeMeta + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Versions = nil + } + if in.ServerAddressByClientCIDRs != nil { + in, out := &in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs + *out = make([]ServerAddressByClientCIDR, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ServerAddressByClientCIDRs = nil + } + return nil + } +} + +func DeepCopy_unversioned_Duration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Duration) + out := out.(*Duration) + out.Duration = in.Duration + return nil + } +} + +func DeepCopy_unversioned_ExportOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExportOptions) + out := out.(*ExportOptions) + out.TypeMeta = in.TypeMeta + out.Export = in.Export + out.Exact = in.Exact + return nil + } +} + +func DeepCopy_unversioned_GroupKind(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupKind) + out := out.(*GroupKind) + out.Group = in.Group + out.Kind = in.Kind + return nil + } +} + +func DeepCopy_unversioned_GroupResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupResource) + out := out.(*GroupResource) + out.Group = in.Group + out.Resource = in.Resource + return nil + } +} + +func DeepCopy_unversioned_GroupVersion(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupVersion) + out := out.(*GroupVersion) + out.Group = in.Group + out.Version = in.Version + return nil + } +} + +func DeepCopy_unversioned_GroupVersionForDiscovery(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupVersionForDiscovery) + out := out.(*GroupVersionForDiscovery) + out.GroupVersion = in.GroupVersion + out.Version = in.Version + return nil + } +} + +func DeepCopy_unversioned_GroupVersionKind(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupVersionKind) + out := out.(*GroupVersionKind) + out.Group = in.Group + out.Version = in.Version + out.Kind = in.Kind + return nil + } +} + +func DeepCopy_unversioned_GroupVersionResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupVersionResource) + out := out.(*GroupVersionResource) + out.Group = in.Group + out.Version = in.Version + out.Resource = in.Resource + return nil + } +} + +func DeepCopy_unversioned_LabelSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelector) + out := out.(*LabelSelector) + if in.MatchLabels != nil { + in, out := &in.MatchLabels, &out.MatchLabels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.MatchLabels = nil + } + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]LabelSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_unversioned_LabelSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_unversioned_LabelSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelectorRequirement) + out := out.(*LabelSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} + +func DeepCopy_unversioned_ListMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ListMeta) + out := out.(*ListMeta) + out.SelfLink = in.SelfLink + out.ResourceVersion = in.ResourceVersion + return nil + } +} + +func DeepCopy_unversioned_Patch(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Patch) + out := out.(*Patch) + _ = in + _ = out + return nil + } +} + +func DeepCopy_unversioned_RootPaths(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RootPaths) + out := out.(*RootPaths) + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Paths = nil + } + return nil + } +} + +func DeepCopy_unversioned_ServerAddressByClientCIDR(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServerAddressByClientCIDR) + out := out.(*ServerAddressByClientCIDR) + out.ClientCIDR = in.ClientCIDR + out.ServerAddress = in.ServerAddress + return nil + } +} + +func DeepCopy_unversioned_Status(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Status) + out := out.(*Status) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + out.Status = in.Status + out.Message = in.Message + out.Reason = in.Reason + if in.Details != nil { + in, out := &in.Details, &out.Details + *out = new(StatusDetails) + if err := DeepCopy_unversioned_StatusDetails(*in, *out, c); err != nil { + return err + } + } else { + out.Details = nil + } + out.Code = in.Code + return nil + } +} + +func DeepCopy_unversioned_StatusCause(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*StatusCause) + out := out.(*StatusCause) + out.Type = in.Type + out.Message = in.Message + out.Field = in.Field + return nil + } +} + +func DeepCopy_unversioned_StatusDetails(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*StatusDetails) + out := out.(*StatusDetails) + out.Name = in.Name + out.Group = in.Group + out.Kind = in.Kind + if in.Causes != nil { + in, out := &in.Causes, &out.Causes + *out = make([]StatusCause, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Causes = nil + } + out.RetryAfterSeconds = in.RetryAfterSeconds + return nil + } +} + +func DeepCopy_unversioned_Time(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Time) + out := out.(*Time) + if newVal, err := c.DeepCopy(&in.Time); err != nil { + return err + } else { + out.Time = *newVal.(*time.Time) + } + return nil + } +} + +func DeepCopy_unversioned_Timestamp(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Timestamp) + out := out.(*Timestamp) + out.Seconds = in.Seconds + out.Nanos = in.Nanos + return nil + } +} + +func DeepCopy_unversioned_TypeMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TypeMeta) + out := out.(*TypeMeta) + out.Kind = in.Kind + out.APIVersion = in.APIVersion + return nil + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/util/group_version.go b/vendor/k8s.io/client-go/1.4/pkg/api/util/group_version.go new file mode 100644 index 00000000..fea2f17f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/util/group_version.go @@ -0,0 +1,48 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// TODO: This GetVersion/GetGroup arrangement is temporary and will be replaced +// with a GroupAndVersion type. +package util + +import "strings" + +func GetVersion(groupVersion string) string { + s := strings.Split(groupVersion, "/") + if len(s) != 2 { + // e.g. return "v1" for groupVersion="v1" + return s[len(s)-1] + } + return s[1] +} + +func GetGroup(groupVersion string) string { + s := strings.Split(groupVersion, "/") + if len(s) == 1 { + // e.g. return "" for groupVersion="v1" + return "" + } + return s[0] +} + +// GetGroupVersion returns the "group/version". It returns "version" is if group +// is empty. It returns "group/" if version is empty. +func GetGroupVersion(group, version string) string { + if len(group) == 0 { + return version + } + return group + "/" + version +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/conversion.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/conversion.go new file mode 100644 index 00000000..86b075a3 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/conversion.go @@ -0,0 +1,814 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + "encoding/json" + "fmt" + "reflect" + + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/apis/extensions" + "k8s.io/client-go/1.4/pkg/conversion" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/util/validation/field" + "k8s.io/client-go/1.4/pkg/watch/versioned" +) + +const ( + // Annotation key used to identify mirror pods. + mirrorAnnotationKey = "kubernetes.io/config.mirror" + + // Value used to identify mirror pods from pre-v1.1 kubelet. + mirrorAnnotationValue_1_0 = "mirror" + + // annotation key prefix used to identify non-convertible json paths. + NonConvertibleAnnotationPrefix = "kubernetes.io/non-convertible" +) + +// This is a "fast-path" that avoids reflection for common types. It focuses on the objects that are +// converted the most in the cluster. +// TODO: generate one of these for every external API group - this is to prove the impact +func addFastPathConversionFuncs(scheme *runtime.Scheme) error { + scheme.AddGenericConversionFunc(func(objA, objB interface{}, s conversion.Scope) (bool, error) { + switch a := objA.(type) { + case *Pod: + switch b := objB.(type) { + case *api.Pod: + return true, Convert_v1_Pod_To_api_Pod(a, b, s) + } + case *api.Pod: + switch b := objB.(type) { + case *Pod: + return true, Convert_api_Pod_To_v1_Pod(a, b, s) + } + + case *Event: + switch b := objB.(type) { + case *api.Event: + return true, Convert_v1_Event_To_api_Event(a, b, s) + } + case *api.Event: + switch b := objB.(type) { + case *Event: + return true, Convert_api_Event_To_v1_Event(a, b, s) + } + + case *ReplicationController: + switch b := objB.(type) { + case *api.ReplicationController: + return true, Convert_v1_ReplicationController_To_api_ReplicationController(a, b, s) + } + case *api.ReplicationController: + switch b := objB.(type) { + case *ReplicationController: + return true, Convert_api_ReplicationController_To_v1_ReplicationController(a, b, s) + } + + case *Node: + switch b := objB.(type) { + case *api.Node: + return true, Convert_v1_Node_To_api_Node(a, b, s) + } + case *api.Node: + switch b := objB.(type) { + case *Node: + return true, Convert_api_Node_To_v1_Node(a, b, s) + } + + case *Namespace: + switch b := objB.(type) { + case *api.Namespace: + return true, Convert_v1_Namespace_To_api_Namespace(a, b, s) + } + case *api.Namespace: + switch b := objB.(type) { + case *Namespace: + return true, Convert_api_Namespace_To_v1_Namespace(a, b, s) + } + + case *Service: + switch b := objB.(type) { + case *api.Service: + return true, Convert_v1_Service_To_api_Service(a, b, s) + } + case *api.Service: + switch b := objB.(type) { + case *Service: + return true, Convert_api_Service_To_v1_Service(a, b, s) + } + + case *Endpoints: + switch b := objB.(type) { + case *api.Endpoints: + return true, Convert_v1_Endpoints_To_api_Endpoints(a, b, s) + } + case *api.Endpoints: + switch b := objB.(type) { + case *Endpoints: + return true, Convert_api_Endpoints_To_v1_Endpoints(a, b, s) + } + + case *versioned.Event: + switch b := objB.(type) { + case *versioned.InternalEvent: + return true, versioned.Convert_versioned_Event_to_versioned_InternalEvent(a, b, s) + } + case *versioned.InternalEvent: + switch b := objB.(type) { + case *versioned.Event: + return true, versioned.Convert_versioned_InternalEvent_to_versioned_Event(a, b, s) + } + } + return false, nil + }) + return nil +} + +func addConversionFuncs(scheme *runtime.Scheme) error { + // Add non-generated conversion functions + err := scheme.AddConversionFuncs( + Convert_api_Pod_To_v1_Pod, + Convert_api_PodSpec_To_v1_PodSpec, + Convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec, + Convert_api_ServiceSpec_To_v1_ServiceSpec, + Convert_v1_Pod_To_api_Pod, + Convert_v1_PodSpec_To_api_PodSpec, + Convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec, + Convert_v1_Secret_To_api_Secret, + Convert_v1_ServiceSpec_To_api_ServiceSpec, + Convert_v1_ResourceList_To_api_ResourceList, + Convert_v1_ReplicationController_to_extensions_ReplicaSet, + Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec, + Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus, + Convert_extensions_ReplicaSet_to_v1_ReplicationController, + Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec, + Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus, + ) + if err != nil { + return err + } + + // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. + for _, k := range []string{ + "Endpoints", + "ResourceQuota", + "PersistentVolumeClaim", + "Service", + "ServiceAccount", + "ConfigMap", + } { + kind := k // don't close over range variables + err = scheme.AddFieldLabelConversionFunc("v1", kind, + func(label, value string) (string, string, error) { + switch label { + case "metadata.namespace", + "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label %q not supported for %q", label, kind) + } + }, + ) + if err != nil { + return err + } + } + + // Add field conversion funcs. + err = scheme.AddFieldLabelConversionFunc("v1", "Pod", + func(label, value string) (string, string, error) { + switch label { + case "metadata.annotations", + "metadata.labels", + "metadata.name", + "metadata.namespace", + "spec.nodeName", + "spec.restartPolicy", + "spec.serviceAccountName", + "status.phase", + "status.podIP": + return label, value, nil + // This is for backwards compatibility with old v1 clients which send spec.host + case "spec.host": + return "spec.nodeName", value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }, + ) + if err != nil { + return err + } + err = scheme.AddFieldLabelConversionFunc("v1", "Node", + func(label, value string) (string, string, error) { + switch label { + case "metadata.name": + return label, value, nil + case "spec.unschedulable": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }, + ) + if err != nil { + return err + } + err = scheme.AddFieldLabelConversionFunc("v1", "ReplicationController", + func(label, value string) (string, string, error) { + switch label { + case "metadata.name", + "metadata.namespace", + "status.replicas": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }) + if err != nil { + return err + } + err = scheme.AddFieldLabelConversionFunc("v1", "PersistentVolume", + func(label, value string) (string, string, error) { + switch label { + case "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }, + ) + if err != nil { + return err + } + if err := AddFieldLabelConversionsForEvent(scheme); err != nil { + return err + } + if err := AddFieldLabelConversionsForNamespace(scheme); err != nil { + return err + } + if err := AddFieldLabelConversionsForSecret(scheme); err != nil { + return err + } + return nil +} + +func Convert_v1_ReplicationController_to_extensions_ReplicaSet(in *ReplicationController, out *extensions.ReplicaSet, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ReplicationController))(in) + } + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec(in *ReplicationControllerSpec, out *extensions.ReplicaSetSpec, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ReplicationControllerSpec))(in) + } + out.Replicas = *in.Replicas + if in.Selector != nil { + api.Convert_map_to_unversioned_LabelSelector(&in.Selector, out.Selector, s) + } + if in.Template != nil { + if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, &out.Template, s); err != nil { + return err + } + } + return nil +} + +func Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus(in *ReplicationControllerStatus, out *extensions.ReplicaSetStatus, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ReplicationControllerStatus))(in) + } + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil +} + +func Convert_extensions_ReplicaSet_to_v1_ReplicationController(in *extensions.ReplicaSet, out *ReplicationController, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*extensions.ReplicaSet))(in) + } + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec(&in.Spec, &out.Spec, s); err != nil { + fieldErr, ok := err.(*field.Error) + if !ok { + return err + } + if out.Annotations == nil { + out.Annotations = make(map[string]string) + } + out.Annotations[NonConvertibleAnnotationPrefix+"/"+fieldErr.Field] = reflect.ValueOf(fieldErr.BadValue).String() + } + if err := Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec(in *extensions.ReplicaSetSpec, out *ReplicationControllerSpec, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*extensions.ReplicaSetSpec))(in) + } + out.Replicas = new(int32) + *out.Replicas = in.Replicas + var invalidErr error + if in.Selector != nil { + invalidErr = api.Convert_unversioned_LabelSelector_to_map(in.Selector, &out.Selector, s) + } + out.Template = new(PodTemplateSpec) + if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, out.Template, s); err != nil { + return err + } + return invalidErr +} + +func Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus(in *extensions.ReplicaSetStatus, out *ReplicationControllerStatus, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*extensions.ReplicaSetStatus))(in) + } + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil +} + +func Convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(in *api.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error { + out.Replicas = &in.Replicas + out.Selector = in.Selector + if in.Template != nil { + out.Template = new(PodTemplateSpec) + if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in.Template, out.Template, s); err != nil { + return err + } + } else { + out.Template = nil + } + return nil +} + +func Convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *api.ReplicationControllerSpec, s conversion.Scope) error { + out.Replicas = *in.Replicas + out.Selector = in.Selector + if in.Template != nil { + out.Template = new(api.PodTemplateSpec) + if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, out.Template, s); err != nil { + return err + } + } else { + out.Template = nil + } + return nil +} + +func Convert_api_PodStatusResult_To_v1_PodStatusResult(in *api.PodStatusResult, out *PodStatusResult, s conversion.Scope) error { + if err := autoConvert_api_PodStatusResult_To_v1_PodStatusResult(in, out, s); err != nil { + return err + } + + if old := out.Annotations; old != nil { + out.Annotations = make(map[string]string, len(old)) + for k, v := range old { + out.Annotations[k] = v + } + } + if len(out.Status.InitContainerStatuses) > 0 { + if out.Annotations == nil { + out.Annotations = make(map[string]string) + } + value, err := json.Marshal(out.Status.InitContainerStatuses) + if err != nil { + return err + } + out.Annotations[PodInitContainerStatusesAnnotationKey] = string(value) + out.Annotations[PodInitContainerStatusesBetaAnnotationKey] = string(value) + } else { + delete(out.Annotations, PodInitContainerStatusesAnnotationKey) + delete(out.Annotations, PodInitContainerStatusesBetaAnnotationKey) + } + return nil +} + +func Convert_v1_PodStatusResult_To_api_PodStatusResult(in *PodStatusResult, out *api.PodStatusResult, s conversion.Scope) error { + // TODO: sometime after we move init container to stable, remove these conversions + // If there is a beta annotation, copy to alpha key. + // See commit log for PR #31026 for why we do this. + if valueBeta, okBeta := in.Annotations[PodInitContainerStatusesBetaAnnotationKey]; okBeta { + in.Annotations[PodInitContainerStatusesAnnotationKey] = valueBeta + } + // Move the annotation to the internal repr. field + if value, ok := in.Annotations[PodInitContainerStatusesAnnotationKey]; ok { + var values []ContainerStatus + if err := json.Unmarshal([]byte(value), &values); err != nil { + return err + } + // Conversion from external to internal version exists more to + // satisfy the needs of the decoder than it does to be a general + // purpose tool. And Decode always creates an intermediate object + // to decode to. Thus the caller of UnsafeConvertToVersion is + // taking responsibility to ensure mutation of in is not exposed + // back to the caller. + in.Status.InitContainerStatuses = values + } + + if err := autoConvert_v1_PodStatusResult_To_api_PodStatusResult(in, out, s); err != nil { + return err + } + if len(out.Annotations) > 0 { + old := out.Annotations + out.Annotations = make(map[string]string, len(old)) + for k, v := range old { + out.Annotations[k] = v + } + delete(out.Annotations, PodInitContainerStatusesAnnotationKey) + delete(out.Annotations, PodInitContainerStatusesBetaAnnotationKey) + } + return nil +} + +func Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in *api.PodTemplateSpec, out *PodTemplateSpec, s conversion.Scope) error { + if err := autoConvert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in, out, s); err != nil { + return err + } + + // TODO: sometime after we move init container to stable, remove these conversions. + if old := out.Annotations; old != nil { + out.Annotations = make(map[string]string, len(old)) + for k, v := range old { + out.Annotations[k] = v + } + } + if len(out.Spec.InitContainers) > 0 { + if out.Annotations == nil { + out.Annotations = make(map[string]string) + } + value, err := json.Marshal(out.Spec.InitContainers) + if err != nil { + return err + } + out.Annotations[PodInitContainersAnnotationKey] = string(value) + out.Annotations[PodInitContainersBetaAnnotationKey] = string(value) + } else { + delete(out.Annotations, PodInitContainersAnnotationKey) + delete(out.Annotations, PodInitContainersBetaAnnotationKey) + } + return nil +} + +func Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out *api.PodTemplateSpec, s conversion.Scope) error { + // TODO: sometime after we move init container to stable, remove these conversions + // If there is a beta annotation, copy to alpha key. + // See commit log for PR #31026 for why we do this. + if valueBeta, okBeta := in.Annotations[PodInitContainersBetaAnnotationKey]; okBeta { + in.Annotations[PodInitContainersAnnotationKey] = valueBeta + } + // Move the annotation to the internal repr. field + if value, ok := in.Annotations[PodInitContainersAnnotationKey]; ok { + var values []Container + if err := json.Unmarshal([]byte(value), &values); err != nil { + return err + } + // Conversion from external to internal version exists more to + // satisfy the needs of the decoder than it does to be a general + // purpose tool. And Decode always creates an intermediate object + // to decode to. Thus the caller of UnsafeConvertToVersion is + // taking responsibility to ensure mutation of in is not exposed + // back to the caller. + in.Spec.InitContainers = values + } + + if err := autoConvert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in, out, s); err != nil { + return err + } + if len(out.Annotations) > 0 { + old := out.Annotations + out.Annotations = make(map[string]string, len(old)) + for k, v := range old { + out.Annotations[k] = v + } + delete(out.Annotations, PodInitContainersAnnotationKey) + delete(out.Annotations, PodInitContainersBetaAnnotationKey) + } + return nil +} + +// The following two PodSpec conversions are done here to support ServiceAccount +// as an alias for ServiceAccountName. +func Convert_api_PodSpec_To_v1_PodSpec(in *api.PodSpec, out *PodSpec, s conversion.Scope) error { + if err := autoConvert_api_PodSpec_To_v1_PodSpec(in, out, s); err != nil { + return err + } + + // DeprecatedServiceAccount is an alias for ServiceAccountName. + out.DeprecatedServiceAccount = in.ServiceAccountName + + if in.SecurityContext != nil { + // the host namespace fields have to be handled here for backward compatibility + // with v1.0.0 + out.HostPID = in.SecurityContext.HostPID + out.HostNetwork = in.SecurityContext.HostNetwork + out.HostIPC = in.SecurityContext.HostIPC + } + + return nil +} + +func Convert_v1_PodSpec_To_api_PodSpec(in *PodSpec, out *api.PodSpec, s conversion.Scope) error { + if err := autoConvert_v1_PodSpec_To_api_PodSpec(in, out, s); err != nil { + return err + } + + // We support DeprecatedServiceAccount as an alias for ServiceAccountName. + // If both are specified, ServiceAccountName (the new field) wins. + if in.ServiceAccountName == "" { + out.ServiceAccountName = in.DeprecatedServiceAccount + } + + // the host namespace fields have to be handled specially for backward compatibility + // with v1.0.0 + if out.SecurityContext == nil { + out.SecurityContext = new(api.PodSecurityContext) + } + out.SecurityContext.HostNetwork = in.HostNetwork + out.SecurityContext.HostPID = in.HostPID + out.SecurityContext.HostIPC = in.HostIPC + + return nil +} + +func Convert_api_Pod_To_v1_Pod(in *api.Pod, out *Pod, s conversion.Scope) error { + if err := autoConvert_api_Pod_To_v1_Pod(in, out, s); err != nil { + return err + } + + // TODO: sometime after we move init container to stable, remove these conversions + if len(out.Spec.InitContainers) > 0 || len(out.Status.InitContainerStatuses) > 0 { + old := out.Annotations + out.Annotations = make(map[string]string, len(old)) + for k, v := range old { + out.Annotations[k] = v + } + delete(out.Annotations, PodInitContainersAnnotationKey) + delete(out.Annotations, PodInitContainersBetaAnnotationKey) + delete(out.Annotations, PodInitContainerStatusesAnnotationKey) + delete(out.Annotations, PodInitContainerStatusesBetaAnnotationKey) + } + if len(out.Spec.InitContainers) > 0 { + value, err := json.Marshal(out.Spec.InitContainers) + if err != nil { + return err + } + out.Annotations[PodInitContainersAnnotationKey] = string(value) + out.Annotations[PodInitContainersBetaAnnotationKey] = string(value) + } + if len(out.Status.InitContainerStatuses) > 0 { + value, err := json.Marshal(out.Status.InitContainerStatuses) + if err != nil { + return err + } + out.Annotations[PodInitContainerStatusesAnnotationKey] = string(value) + out.Annotations[PodInitContainerStatusesBetaAnnotationKey] = string(value) + } + + // We need to reset certain fields for mirror pods from pre-v1.1 kubelet + // (#15960). + // TODO: Remove this code after we drop support for v1.0 kubelets. + if value, ok := in.Annotations[mirrorAnnotationKey]; ok && value == mirrorAnnotationValue_1_0 { + // Reset the TerminationGracePeriodSeconds. + out.Spec.TerminationGracePeriodSeconds = nil + // Reset the resource requests. + for i := range out.Spec.Containers { + out.Spec.Containers[i].Resources.Requests = nil + } + } + return nil +} + +func Convert_v1_Pod_To_api_Pod(in *Pod, out *api.Pod, s conversion.Scope) error { + // If there is a beta annotation, copy to alpha key. + // See commit log for PR #31026 for why we do this. + if valueBeta, okBeta := in.Annotations[PodInitContainersBetaAnnotationKey]; okBeta { + in.Annotations[PodInitContainersAnnotationKey] = valueBeta + } + // TODO: sometime after we move init container to stable, remove these conversions + // Move the annotation to the internal repr. field + if value, ok := in.Annotations[PodInitContainersAnnotationKey]; ok { + var values []Container + if err := json.Unmarshal([]byte(value), &values); err != nil { + return err + } + // Conversion from external to internal version exists more to + // satisfy the needs of the decoder than it does to be a general + // purpose tool. And Decode always creates an intermediate object + // to decode to. Thus the caller of UnsafeConvertToVersion is + // taking responsibility to ensure mutation of in is not exposed + // back to the caller. + in.Spec.InitContainers = values + } + // If there is a beta annotation, copy to alpha key. + // See commit log for PR #31026 for why we do this. + if valueBeta, okBeta := in.Annotations[PodInitContainerStatusesBetaAnnotationKey]; okBeta { + in.Annotations[PodInitContainerStatusesAnnotationKey] = valueBeta + } + if value, ok := in.Annotations[PodInitContainerStatusesAnnotationKey]; ok { + var values []ContainerStatus + if err := json.Unmarshal([]byte(value), &values); err != nil { + return err + } + // Conversion from external to internal version exists more to + // satisfy the needs of the decoder than it does to be a general + // purpose tool. And Decode always creates an intermediate object + // to decode to. Thus the caller of UnsafeConvertToVersion is + // taking responsibility to ensure mutation of in is not exposed + // back to the caller. + in.Status.InitContainerStatuses = values + } + + if err := autoConvert_v1_Pod_To_api_Pod(in, out, s); err != nil { + return err + } + if len(out.Annotations) > 0 { + old := out.Annotations + out.Annotations = make(map[string]string, len(old)) + for k, v := range old { + out.Annotations[k] = v + } + delete(out.Annotations, PodInitContainersAnnotationKey) + delete(out.Annotations, PodInitContainersBetaAnnotationKey) + delete(out.Annotations, PodInitContainerStatusesAnnotationKey) + delete(out.Annotations, PodInitContainerStatusesBetaAnnotationKey) + } + return nil +} + +func Convert_api_ServiceSpec_To_v1_ServiceSpec(in *api.ServiceSpec, out *ServiceSpec, s conversion.Scope) error { + if err := autoConvert_api_ServiceSpec_To_v1_ServiceSpec(in, out, s); err != nil { + return err + } + // Publish both externalIPs and deprecatedPublicIPs fields in v1. + out.DeprecatedPublicIPs = in.ExternalIPs + return nil +} + +func Convert_v1_Secret_To_api_Secret(in *Secret, out *api.Secret, s conversion.Scope) error { + if err := autoConvert_v1_Secret_To_api_Secret(in, out, s); err != nil { + return err + } + + // StringData overwrites Data + if len(in.StringData) > 0 { + if out.Data == nil { + out.Data = map[string][]byte{} + } + for k, v := range in.StringData { + out.Data[k] = []byte(v) + } + } + + return nil +} + +func Convert_v1_ServiceSpec_To_api_ServiceSpec(in *ServiceSpec, out *api.ServiceSpec, s conversion.Scope) error { + if err := autoConvert_v1_ServiceSpec_To_api_ServiceSpec(in, out, s); err != nil { + return err + } + // Prefer the legacy deprecatedPublicIPs field, if provided. + if len(in.DeprecatedPublicIPs) > 0 { + out.ExternalIPs = in.DeprecatedPublicIPs + } + return nil +} + +func Convert_api_PodSecurityContext_To_v1_PodSecurityContext(in *api.PodSecurityContext, out *PodSecurityContext, s conversion.Scope) error { + out.SupplementalGroups = in.SupplementalGroups + if in.SELinuxOptions != nil { + out.SELinuxOptions = new(SELinuxOptions) + if err := Convert_api_SELinuxOptions_To_v1_SELinuxOptions(in.SELinuxOptions, out.SELinuxOptions, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + out.RunAsUser = in.RunAsUser + out.RunAsNonRoot = in.RunAsNonRoot + out.FSGroup = in.FSGroup + return nil +} + +func Convert_v1_PodSecurityContext_To_api_PodSecurityContext(in *PodSecurityContext, out *api.PodSecurityContext, s conversion.Scope) error { + out.SupplementalGroups = in.SupplementalGroups + if in.SELinuxOptions != nil { + out.SELinuxOptions = new(api.SELinuxOptions) + if err := Convert_v1_SELinuxOptions_To_api_SELinuxOptions(in.SELinuxOptions, out.SELinuxOptions, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + out.RunAsUser = in.RunAsUser + out.RunAsNonRoot = in.RunAsNonRoot + out.FSGroup = in.FSGroup + return nil +} + +func Convert_v1_ResourceList_To_api_ResourceList(in *ResourceList, out *api.ResourceList, s conversion.Scope) error { + if *in == nil { + return nil + } + + if *out == nil { + *out = make(api.ResourceList, len(*in)) + } + for key, val := range *in { + // TODO(#18538): We round up resource values to milli scale to maintain API compatibility. + // In the future, we should instead reject values that need rounding. + const milliScale = -3 + val.RoundUp(milliScale) + + (*out)[api.ResourceName(key)] = val + } + return nil +} + +func AddFieldLabelConversionsForEvent(scheme *runtime.Scheme) error { + return scheme.AddFieldLabelConversionFunc("v1", "Event", + func(label, value string) (string, string, error) { + switch label { + case "involvedObject.kind", + "involvedObject.namespace", + "involvedObject.name", + "involvedObject.uid", + "involvedObject.apiVersion", + "involvedObject.resourceVersion", + "involvedObject.fieldPath", + "reason", + "source", + "type", + "metadata.namespace", + "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }) +} + +func AddFieldLabelConversionsForNamespace(scheme *runtime.Scheme) error { + return scheme.AddFieldLabelConversionFunc("v1", "Namespace", + func(label, value string) (string, string, error) { + switch label { + case "status.phase", + "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }) +} + +func AddFieldLabelConversionsForSecret(scheme *runtime.Scheme) error { + return scheme.AddFieldLabelConversionFunc("v1", "Secret", + func(label, value string) (string, string, error) { + switch label { + case "type", + "metadata.namespace", + "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/defaults.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/defaults.go new file mode 100644 index 00000000..f6f5f428 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/defaults.go @@ -0,0 +1,336 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/util" + "k8s.io/client-go/1.4/pkg/util/intstr" + "k8s.io/client-go/1.4/pkg/util/parsers" +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( + SetDefaults_PodExecOptions, + SetDefaults_PodAttachOptions, + SetDefaults_ReplicationController, + SetDefaults_Volume, + SetDefaults_ContainerPort, + SetDefaults_Container, + SetDefaults_ServiceSpec, + SetDefaults_Pod, + SetDefaults_PodSpec, + SetDefaults_Probe, + SetDefaults_SecretVolumeSource, + SetDefaults_ConfigMapVolumeSource, + SetDefaults_DownwardAPIVolumeSource, + SetDefaults_Secret, + SetDefaults_PersistentVolume, + SetDefaults_PersistentVolumeClaim, + SetDefaults_ISCSIVolumeSource, + SetDefaults_Endpoints, + SetDefaults_HTTPGetAction, + SetDefaults_NamespaceStatus, + SetDefaults_Node, + SetDefaults_NodeStatus, + SetDefaults_ObjectFieldSelector, + SetDefaults_LimitRangeItem, + SetDefaults_ConfigMap, + SetDefaults_RBDVolumeSource, + ) +} + +func SetDefaults_PodExecOptions(obj *PodExecOptions) { + obj.Stdout = true + obj.Stderr = true +} +func SetDefaults_PodAttachOptions(obj *PodAttachOptions) { + obj.Stdout = true + obj.Stderr = true +} +func SetDefaults_ReplicationController(obj *ReplicationController) { + var labels map[string]string + if obj.Spec.Template != nil { + labels = obj.Spec.Template.Labels + } + // TODO: support templates defined elsewhere when we support them in the API + if labels != nil { + if len(obj.Spec.Selector) == 0 { + obj.Spec.Selector = labels + } + if len(obj.Labels) == 0 { + obj.Labels = labels + } + } + if obj.Spec.Replicas == nil { + obj.Spec.Replicas = new(int32) + *obj.Spec.Replicas = 1 + } +} +func SetDefaults_Volume(obj *Volume) { + if util.AllPtrFieldsNil(&obj.VolumeSource) { + obj.VolumeSource = VolumeSource{ + EmptyDir: &EmptyDirVolumeSource{}, + } + } +} +func SetDefaults_ContainerPort(obj *ContainerPort) { + if obj.Protocol == "" { + obj.Protocol = ProtocolTCP + } +} +func SetDefaults_Container(obj *Container) { + if obj.ImagePullPolicy == "" { + // Ignore error and assume it has been validated elsewhere + _, tag, _, _ := parsers.ParseImageName(obj.Image) + + // Check image tag + + if tag == "latest" { + obj.ImagePullPolicy = PullAlways + } else { + obj.ImagePullPolicy = PullIfNotPresent + } + } + if obj.TerminationMessagePath == "" { + obj.TerminationMessagePath = TerminationMessagePathDefault + } +} +func SetDefaults_ServiceSpec(obj *ServiceSpec) { + if obj.SessionAffinity == "" { + obj.SessionAffinity = ServiceAffinityNone + } + if obj.Type == "" { + obj.Type = ServiceTypeClusterIP + } + for i := range obj.Ports { + sp := &obj.Ports[i] + if sp.Protocol == "" { + sp.Protocol = ProtocolTCP + } + if sp.TargetPort == intstr.FromInt(0) || sp.TargetPort == intstr.FromString("") { + sp.TargetPort = intstr.FromInt(int(sp.Port)) + } + } +} +func SetDefaults_Pod(obj *Pod) { + // If limits are specified, but requests are not, default requests to limits + // This is done here rather than a more specific defaulting pass on ResourceRequirements + // because we only want this defaulting semantic to take place on a Pod and not a PodTemplate + for i := range obj.Spec.Containers { + // set requests to limits if requests are not specified, but limits are + if obj.Spec.Containers[i].Resources.Limits != nil { + if obj.Spec.Containers[i].Resources.Requests == nil { + obj.Spec.Containers[i].Resources.Requests = make(ResourceList) + } + for key, value := range obj.Spec.Containers[i].Resources.Limits { + if _, exists := obj.Spec.Containers[i].Resources.Requests[key]; !exists { + obj.Spec.Containers[i].Resources.Requests[key] = *(value.Copy()) + } + } + } + } +} +func SetDefaults_PodSpec(obj *PodSpec) { + if obj.DNSPolicy == "" { + obj.DNSPolicy = DNSClusterFirst + } + if obj.RestartPolicy == "" { + obj.RestartPolicy = RestartPolicyAlways + } + if obj.HostNetwork { + defaultHostNetworkPorts(&obj.Containers) + } + if obj.SecurityContext == nil { + obj.SecurityContext = &PodSecurityContext{} + } + if obj.TerminationGracePeriodSeconds == nil { + period := int64(DefaultTerminationGracePeriodSeconds) + obj.TerminationGracePeriodSeconds = &period + } +} +func SetDefaults_Probe(obj *Probe) { + if obj.TimeoutSeconds == 0 { + obj.TimeoutSeconds = 1 + } + if obj.PeriodSeconds == 0 { + obj.PeriodSeconds = 10 + } + if obj.SuccessThreshold == 0 { + obj.SuccessThreshold = 1 + } + if obj.FailureThreshold == 0 { + obj.FailureThreshold = 3 + } +} +func SetDefaults_SecretVolumeSource(obj *SecretVolumeSource) { + if obj.DefaultMode == nil { + perm := int32(SecretVolumeSourceDefaultMode) + obj.DefaultMode = &perm + } +} +func SetDefaults_ConfigMapVolumeSource(obj *ConfigMapVolumeSource) { + if obj.DefaultMode == nil { + perm := int32(ConfigMapVolumeSourceDefaultMode) + obj.DefaultMode = &perm + } +} +func SetDefaults_DownwardAPIVolumeSource(obj *DownwardAPIVolumeSource) { + if obj.DefaultMode == nil { + perm := int32(DownwardAPIVolumeSourceDefaultMode) + obj.DefaultMode = &perm + } +} +func SetDefaults_Secret(obj *Secret) { + if obj.Type == "" { + obj.Type = SecretTypeOpaque + } +} +func SetDefaults_PersistentVolume(obj *PersistentVolume) { + if obj.Status.Phase == "" { + obj.Status.Phase = VolumePending + } + if obj.Spec.PersistentVolumeReclaimPolicy == "" { + obj.Spec.PersistentVolumeReclaimPolicy = PersistentVolumeReclaimRetain + } +} +func SetDefaults_PersistentVolumeClaim(obj *PersistentVolumeClaim) { + if obj.Status.Phase == "" { + obj.Status.Phase = ClaimPending + } +} +func SetDefaults_ISCSIVolumeSource(obj *ISCSIVolumeSource) { + if obj.ISCSIInterface == "" { + obj.ISCSIInterface = "default" + } +} +func SetDefaults_AzureDiskVolumeSource(obj *AzureDiskVolumeSource) { + if obj.CachingMode == nil { + obj.CachingMode = new(AzureDataDiskCachingMode) + *obj.CachingMode = AzureDataDiskCachingNone + } + if obj.FSType == nil { + obj.FSType = new(string) + *obj.FSType = "ext4" + } + if obj.ReadOnly == nil { + obj.ReadOnly = new(bool) + *obj.ReadOnly = false + } +} +func SetDefaults_Endpoints(obj *Endpoints) { + for i := range obj.Subsets { + ss := &obj.Subsets[i] + for i := range ss.Ports { + ep := &ss.Ports[i] + if ep.Protocol == "" { + ep.Protocol = ProtocolTCP + } + } + } +} +func SetDefaults_HTTPGetAction(obj *HTTPGetAction) { + if obj.Path == "" { + obj.Path = "/" + } + if obj.Scheme == "" { + obj.Scheme = URISchemeHTTP + } +} +func SetDefaults_NamespaceStatus(obj *NamespaceStatus) { + if obj.Phase == "" { + obj.Phase = NamespaceActive + } +} +func SetDefaults_Node(obj *Node) { + if obj.Spec.ExternalID == "" { + obj.Spec.ExternalID = obj.Name + } +} +func SetDefaults_NodeStatus(obj *NodeStatus) { + if obj.Allocatable == nil && obj.Capacity != nil { + obj.Allocatable = make(ResourceList, len(obj.Capacity)) + for key, value := range obj.Capacity { + obj.Allocatable[key] = *(value.Copy()) + } + obj.Allocatable = obj.Capacity + } +} +func SetDefaults_ObjectFieldSelector(obj *ObjectFieldSelector) { + if obj.APIVersion == "" { + obj.APIVersion = "v1" + } +} +func SetDefaults_LimitRangeItem(obj *LimitRangeItem) { + // for container limits, we apply default values + if obj.Type == LimitTypeContainer { + + if obj.Default == nil { + obj.Default = make(ResourceList) + } + if obj.DefaultRequest == nil { + obj.DefaultRequest = make(ResourceList) + } + + // If a default limit is unspecified, but the max is specified, default the limit to the max + for key, value := range obj.Max { + if _, exists := obj.Default[key]; !exists { + obj.Default[key] = *(value.Copy()) + } + } + // If a default limit is specified, but the default request is not, default request to limit + for key, value := range obj.Default { + if _, exists := obj.DefaultRequest[key]; !exists { + obj.DefaultRequest[key] = *(value.Copy()) + } + } + // If a default request is not specified, but the min is provided, default request to the min + for key, value := range obj.Min { + if _, exists := obj.DefaultRequest[key]; !exists { + obj.DefaultRequest[key] = *(value.Copy()) + } + } + } +} +func SetDefaults_ConfigMap(obj *ConfigMap) { + if obj.Data == nil { + obj.Data = make(map[string]string) + } +} + +// With host networking default all container ports to host ports. +func defaultHostNetworkPorts(containers *[]Container) { + for i := range *containers { + for j := range (*containers)[i].Ports { + if (*containers)[i].Ports[j].HostPort == 0 { + (*containers)[i].Ports[j].HostPort = (*containers)[i].Ports[j].ContainerPort + } + } + } +} + +func SetDefaults_RBDVolumeSource(obj *RBDVolumeSource) { + if obj.RBDPool == "" { + obj.RBDPool = "rbd" + } + if obj.RadosUser == "" { + obj.RadosUser = "admin" + } + if obj.Keyring == "" { + obj.Keyring = "/etc/ceph/keyring" + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/doc.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/doc.go new file mode 100644 index 00000000..8849ee1c --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/api + +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/generated.pb.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/generated.pb.go new file mode 100644 index 00000000..13901c90 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/generated.pb.go @@ -0,0 +1,39094 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/api/v1/generated.proto +// DO NOT EDIT! + +/* + Package v1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/api/v1/generated.proto + + It has these top-level messages: + AWSElasticBlockStoreVolumeSource + Affinity + AttachedVolume + AvoidPods + AzureDiskVolumeSource + AzureFileVolumeSource + Binding + Capabilities + CephFSVolumeSource + CinderVolumeSource + ComponentCondition + ComponentStatus + ComponentStatusList + ConfigMap + ConfigMapKeySelector + ConfigMapList + ConfigMapVolumeSource + Container + ContainerImage + ContainerPort + ContainerState + ContainerStateRunning + ContainerStateTerminated + ContainerStateWaiting + ContainerStatus + DaemonEndpoint + DeleteOptions + DownwardAPIVolumeFile + DownwardAPIVolumeSource + EmptyDirVolumeSource + EndpointAddress + EndpointPort + EndpointSubset + Endpoints + EndpointsList + EnvVar + EnvVarSource + Event + EventList + EventSource + ExecAction + ExportOptions + FCVolumeSource + FlexVolumeSource + FlockerVolumeSource + GCEPersistentDiskVolumeSource + GitRepoVolumeSource + GlusterfsVolumeSource + HTTPGetAction + HTTPHeader + Handler + HostPathVolumeSource + ISCSIVolumeSource + KeyToPath + Lifecycle + LimitRange + LimitRangeItem + LimitRangeList + LimitRangeSpec + List + ListOptions + LoadBalancerIngress + LoadBalancerStatus + LocalObjectReference + NFSVolumeSource + Namespace + NamespaceList + NamespaceSpec + NamespaceStatus + Node + NodeAddress + NodeAffinity + NodeCondition + NodeDaemonEndpoints + NodeList + NodeProxyOptions + NodeSelector + NodeSelectorRequirement + NodeSelectorTerm + NodeSpec + NodeStatus + NodeSystemInfo + ObjectFieldSelector + ObjectMeta + ObjectReference + OwnerReference + PersistentVolume + PersistentVolumeClaim + PersistentVolumeClaimList + PersistentVolumeClaimSpec + PersistentVolumeClaimStatus + PersistentVolumeClaimVolumeSource + PersistentVolumeList + PersistentVolumeSource + PersistentVolumeSpec + PersistentVolumeStatus + Pod + PodAffinity + PodAffinityTerm + PodAntiAffinity + PodAttachOptions + PodCondition + PodExecOptions + PodList + PodLogOptions + PodProxyOptions + PodSecurityContext + PodSignature + PodSpec + PodStatus + PodStatusResult + PodTemplate + PodTemplateList + PodTemplateSpec + Preconditions + PreferAvoidPodsEntry + PreferredSchedulingTerm + Probe + QuobyteVolumeSource + RBDVolumeSource + RangeAllocation + ReplicationController + ReplicationControllerList + ReplicationControllerSpec + ReplicationControllerStatus + ResourceFieldSelector + ResourceQuota + ResourceQuotaList + ResourceQuotaSpec + ResourceQuotaStatus + ResourceRequirements + SELinuxOptions + Secret + SecretKeySelector + SecretList + SecretVolumeSource + SecurityContext + SerializedReference + Service + ServiceAccount + ServiceAccountList + ServiceList + ServicePort + ServiceProxyOptions + ServiceSpec + ServiceStatus + TCPSocketAction + Taint + Toleration + Volume + VolumeMount + VolumeSource + VsphereVirtualDiskVolumeSource + WeightedPodAffinityTerm +*/ +package v1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import k8s_io_kubernetes_pkg_api_resource "k8s.io/client-go/1.4/pkg/api/resource" +import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" +import k8s_io_kubernetes_pkg_runtime "k8s.io/client-go/1.4/pkg/runtime" + +import k8s_io_kubernetes_pkg_types "k8s.io/client-go/1.4/pkg/types" + +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *AWSElasticBlockStoreVolumeSource) Reset() { *m = AWSElasticBlockStoreVolumeSource{} } +func (*AWSElasticBlockStoreVolumeSource) ProtoMessage() {} +func (*AWSElasticBlockStoreVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{0} +} + +func (m *Affinity) Reset() { *m = Affinity{} } +func (*Affinity) ProtoMessage() {} +func (*Affinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *AttachedVolume) Reset() { *m = AttachedVolume{} } +func (*AttachedVolume) ProtoMessage() {} +func (*AttachedVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *AvoidPods) Reset() { *m = AvoidPods{} } +func (*AvoidPods) ProtoMessage() {} +func (*AvoidPods) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *AzureDiskVolumeSource) Reset() { *m = AzureDiskVolumeSource{} } +func (*AzureDiskVolumeSource) ProtoMessage() {} +func (*AzureDiskVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *AzureFileVolumeSource) Reset() { *m = AzureFileVolumeSource{} } +func (*AzureFileVolumeSource) ProtoMessage() {} +func (*AzureFileVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } + +func (m *Binding) Reset() { *m = Binding{} } +func (*Binding) ProtoMessage() {} +func (*Binding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } + +func (m *Capabilities) Reset() { *m = Capabilities{} } +func (*Capabilities) ProtoMessage() {} +func (*Capabilities) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } + +func (m *CephFSVolumeSource) Reset() { *m = CephFSVolumeSource{} } +func (*CephFSVolumeSource) ProtoMessage() {} +func (*CephFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } + +func (m *CinderVolumeSource) Reset() { *m = CinderVolumeSource{} } +func (*CinderVolumeSource) ProtoMessage() {} +func (*CinderVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } + +func (m *ComponentCondition) Reset() { *m = ComponentCondition{} } +func (*ComponentCondition) ProtoMessage() {} +func (*ComponentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } + +func (m *ComponentStatus) Reset() { *m = ComponentStatus{} } +func (*ComponentStatus) ProtoMessage() {} +func (*ComponentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } + +func (m *ComponentStatusList) Reset() { *m = ComponentStatusList{} } +func (*ComponentStatusList) ProtoMessage() {} +func (*ComponentStatusList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } + +func (m *ConfigMap) Reset() { *m = ConfigMap{} } +func (*ConfigMap) ProtoMessage() {} +func (*ConfigMap) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } + +func (m *ConfigMapKeySelector) Reset() { *m = ConfigMapKeySelector{} } +func (*ConfigMapKeySelector) ProtoMessage() {} +func (*ConfigMapKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } + +func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } +func (*ConfigMapList) ProtoMessage() {} +func (*ConfigMapList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } + +func (m *ConfigMapVolumeSource) Reset() { *m = ConfigMapVolumeSource{} } +func (*ConfigMapVolumeSource) ProtoMessage() {} +func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } + +func (m *Container) Reset() { *m = Container{} } +func (*Container) ProtoMessage() {} +func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } + +func (m *ContainerImage) Reset() { *m = ContainerImage{} } +func (*ContainerImage) ProtoMessage() {} +func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } + +func (m *ContainerPort) Reset() { *m = ContainerPort{} } +func (*ContainerPort) ProtoMessage() {} +func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } + +func (m *ContainerState) Reset() { *m = ContainerState{} } +func (*ContainerState) ProtoMessage() {} +func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } + +func (m *ContainerStateRunning) Reset() { *m = ContainerStateRunning{} } +func (*ContainerStateRunning) ProtoMessage() {} +func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } + +func (m *ContainerStateTerminated) Reset() { *m = ContainerStateTerminated{} } +func (*ContainerStateTerminated) ProtoMessage() {} +func (*ContainerStateTerminated) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{22} +} + +func (m *ContainerStateWaiting) Reset() { *m = ContainerStateWaiting{} } +func (*ContainerStateWaiting) ProtoMessage() {} +func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } + +func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } +func (*ContainerStatus) ProtoMessage() {} +func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } + +func (m *DaemonEndpoint) Reset() { *m = DaemonEndpoint{} } +func (*DaemonEndpoint) ProtoMessage() {} +func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } + +func (m *DeleteOptions) Reset() { *m = DeleteOptions{} } +func (*DeleteOptions) ProtoMessage() {} +func (*DeleteOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } + +func (m *DownwardAPIVolumeFile) Reset() { *m = DownwardAPIVolumeFile{} } +func (*DownwardAPIVolumeFile) ProtoMessage() {} +func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } + +func (m *DownwardAPIVolumeSource) Reset() { *m = DownwardAPIVolumeSource{} } +func (*DownwardAPIVolumeSource) ProtoMessage() {} +func (*DownwardAPIVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{28} +} + +func (m *EmptyDirVolumeSource) Reset() { *m = EmptyDirVolumeSource{} } +func (*EmptyDirVolumeSource) ProtoMessage() {} +func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } + +func (m *EndpointAddress) Reset() { *m = EndpointAddress{} } +func (*EndpointAddress) ProtoMessage() {} +func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } + +func (m *EndpointPort) Reset() { *m = EndpointPort{} } +func (*EndpointPort) ProtoMessage() {} +func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } + +func (m *EndpointSubset) Reset() { *m = EndpointSubset{} } +func (*EndpointSubset) ProtoMessage() {} +func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } + +func (m *Endpoints) Reset() { *m = Endpoints{} } +func (*Endpoints) ProtoMessage() {} +func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } + +func (m *EndpointsList) Reset() { *m = EndpointsList{} } +func (*EndpointsList) ProtoMessage() {} +func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } + +func (m *EnvVar) Reset() { *m = EnvVar{} } +func (*EnvVar) ProtoMessage() {} +func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } + +func (m *EnvVarSource) Reset() { *m = EnvVarSource{} } +func (*EnvVarSource) ProtoMessage() {} +func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } + +func (m *Event) Reset() { *m = Event{} } +func (*Event) ProtoMessage() {} +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } + +func (m *EventList) Reset() { *m = EventList{} } +func (*EventList) ProtoMessage() {} +func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } + +func (m *EventSource) Reset() { *m = EventSource{} } +func (*EventSource) ProtoMessage() {} +func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } + +func (m *ExecAction) Reset() { *m = ExecAction{} } +func (*ExecAction) ProtoMessage() {} +func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } + +func (m *ExportOptions) Reset() { *m = ExportOptions{} } +func (*ExportOptions) ProtoMessage() {} +func (*ExportOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } + +func (m *FCVolumeSource) Reset() { *m = FCVolumeSource{} } +func (*FCVolumeSource) ProtoMessage() {} +func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } + +func (m *FlexVolumeSource) Reset() { *m = FlexVolumeSource{} } +func (*FlexVolumeSource) ProtoMessage() {} +func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } + +func (m *FlockerVolumeSource) Reset() { *m = FlockerVolumeSource{} } +func (*FlockerVolumeSource) ProtoMessage() {} +func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } + +func (m *GCEPersistentDiskVolumeSource) Reset() { *m = GCEPersistentDiskVolumeSource{} } +func (*GCEPersistentDiskVolumeSource) ProtoMessage() {} +func (*GCEPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{45} +} + +func (m *GitRepoVolumeSource) Reset() { *m = GitRepoVolumeSource{} } +func (*GitRepoVolumeSource) ProtoMessage() {} +func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } + +func (m *GlusterfsVolumeSource) Reset() { *m = GlusterfsVolumeSource{} } +func (*GlusterfsVolumeSource) ProtoMessage() {} +func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } + +func (m *HTTPGetAction) Reset() { *m = HTTPGetAction{} } +func (*HTTPGetAction) ProtoMessage() {} +func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } + +func (m *HTTPHeader) Reset() { *m = HTTPHeader{} } +func (*HTTPHeader) ProtoMessage() {} +func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } + +func (m *Handler) Reset() { *m = Handler{} } +func (*Handler) ProtoMessage() {} +func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } + +func (m *HostPathVolumeSource) Reset() { *m = HostPathVolumeSource{} } +func (*HostPathVolumeSource) ProtoMessage() {} +func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } + +func (m *ISCSIVolumeSource) Reset() { *m = ISCSIVolumeSource{} } +func (*ISCSIVolumeSource) ProtoMessage() {} +func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } + +func (m *KeyToPath) Reset() { *m = KeyToPath{} } +func (*KeyToPath) ProtoMessage() {} +func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } + +func (m *Lifecycle) Reset() { *m = Lifecycle{} } +func (*Lifecycle) ProtoMessage() {} +func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } + +func (m *LimitRange) Reset() { *m = LimitRange{} } +func (*LimitRange) ProtoMessage() {} +func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } + +func (m *LimitRangeItem) Reset() { *m = LimitRangeItem{} } +func (*LimitRangeItem) ProtoMessage() {} +func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } + +func (m *LimitRangeList) Reset() { *m = LimitRangeList{} } +func (*LimitRangeList) ProtoMessage() {} +func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } + +func (m *LimitRangeSpec) Reset() { *m = LimitRangeSpec{} } +func (*LimitRangeSpec) ProtoMessage() {} +func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } + +func (m *List) Reset() { *m = List{} } +func (*List) ProtoMessage() {} +func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } + +func (m *ListOptions) Reset() { *m = ListOptions{} } +func (*ListOptions) ProtoMessage() {} +func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } + +func (m *LoadBalancerIngress) Reset() { *m = LoadBalancerIngress{} } +func (*LoadBalancerIngress) ProtoMessage() {} +func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} } + +func (m *LoadBalancerStatus) Reset() { *m = LoadBalancerStatus{} } +func (*LoadBalancerStatus) ProtoMessage() {} +func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } + +func (m *LocalObjectReference) Reset() { *m = LocalObjectReference{} } +func (*LocalObjectReference) ProtoMessage() {} +func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} } + +func (m *NFSVolumeSource) Reset() { *m = NFSVolumeSource{} } +func (*NFSVolumeSource) ProtoMessage() {} +func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{64} } + +func (m *Namespace) Reset() { *m = Namespace{} } +func (*Namespace) ProtoMessage() {} +func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } + +func (m *NamespaceList) Reset() { *m = NamespaceList{} } +func (*NamespaceList) ProtoMessage() {} +func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} } + +func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } +func (*NamespaceSpec) ProtoMessage() {} +func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } + +func (m *NamespaceStatus) Reset() { *m = NamespaceStatus{} } +func (*NamespaceStatus) ProtoMessage() {} +func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } + +func (m *Node) Reset() { *m = Node{} } +func (*Node) ProtoMessage() {} +func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } + +func (m *NodeAddress) Reset() { *m = NodeAddress{} } +func (*NodeAddress) ProtoMessage() {} +func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } + +func (m *NodeAffinity) Reset() { *m = NodeAffinity{} } +func (*NodeAffinity) ProtoMessage() {} +func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } + +func (m *NodeCondition) Reset() { *m = NodeCondition{} } +func (*NodeCondition) ProtoMessage() {} +func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } + +func (m *NodeDaemonEndpoints) Reset() { *m = NodeDaemonEndpoints{} } +func (*NodeDaemonEndpoints) ProtoMessage() {} +func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} } + +func (m *NodeList) Reset() { *m = NodeList{} } +func (*NodeList) ProtoMessage() {} +func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } + +func (m *NodeProxyOptions) Reset() { *m = NodeProxyOptions{} } +func (*NodeProxyOptions) ProtoMessage() {} +func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} } + +func (m *NodeSelector) Reset() { *m = NodeSelector{} } +func (*NodeSelector) ProtoMessage() {} +func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } + +func (m *NodeSelectorRequirement) Reset() { *m = NodeSelectorRequirement{} } +func (*NodeSelectorRequirement) ProtoMessage() {} +func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{77} +} + +func (m *NodeSelectorTerm) Reset() { *m = NodeSelectorTerm{} } +func (*NodeSelectorTerm) ProtoMessage() {} +func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } + +func (m *NodeSpec) Reset() { *m = NodeSpec{} } +func (*NodeSpec) ProtoMessage() {} +func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } + +func (m *NodeStatus) Reset() { *m = NodeStatus{} } +func (*NodeStatus) ProtoMessage() {} +func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } + +func (m *NodeSystemInfo) Reset() { *m = NodeSystemInfo{} } +func (*NodeSystemInfo) ProtoMessage() {} +func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} } + +func (m *ObjectFieldSelector) Reset() { *m = ObjectFieldSelector{} } +func (*ObjectFieldSelector) ProtoMessage() {} +func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } + +func (m *ObjectMeta) Reset() { *m = ObjectMeta{} } +func (*ObjectMeta) ProtoMessage() {} +func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } + +func (m *ObjectReference) Reset() { *m = ObjectReference{} } +func (*ObjectReference) ProtoMessage() {} +func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } + +func (m *OwnerReference) Reset() { *m = OwnerReference{} } +func (*OwnerReference) ProtoMessage() {} +func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } + +func (m *PersistentVolume) Reset() { *m = PersistentVolume{} } +func (*PersistentVolume) ProtoMessage() {} +func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } + +func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolumeClaim{} } +func (*PersistentVolumeClaim) ProtoMessage() {} +func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } + +func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} } +func (*PersistentVolumeClaimList) ProtoMessage() {} +func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{88} +} + +func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} } +func (*PersistentVolumeClaimSpec) ProtoMessage() {} +func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{89} +} + +func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} } +func (*PersistentVolumeClaimStatus) ProtoMessage() {} +func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{90} +} + +func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} } +func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {} +func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{91} +} + +func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} } +func (*PersistentVolumeList) ProtoMessage() {} +func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{92} } + +func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} } +func (*PersistentVolumeSource) ProtoMessage() {} +func (*PersistentVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{93} } + +func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} } +func (*PersistentVolumeSpec) ProtoMessage() {} +func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} } + +func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} } +func (*PersistentVolumeStatus) ProtoMessage() {} +func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} } + +func (m *Pod) Reset() { *m = Pod{} } +func (*Pod) ProtoMessage() {} +func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } + +func (m *PodAffinity) Reset() { *m = PodAffinity{} } +func (*PodAffinity) ProtoMessage() {} +func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } + +func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} } +func (*PodAffinityTerm) ProtoMessage() {} +func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} } + +func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} } +func (*PodAntiAffinity) ProtoMessage() {} +func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} } + +func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} } +func (*PodAttachOptions) ProtoMessage() {} +func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} } + +func (m *PodCondition) Reset() { *m = PodCondition{} } +func (*PodCondition) ProtoMessage() {} +func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{101} } + +func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } +func (*PodExecOptions) ProtoMessage() {} +func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{102} } + +func (m *PodList) Reset() { *m = PodList{} } +func (*PodList) ProtoMessage() {} +func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{103} } + +func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } +func (*PodLogOptions) ProtoMessage() {} +func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{104} } + +func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } +func (*PodProxyOptions) ProtoMessage() {} +func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{105} } + +func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } +func (*PodSecurityContext) ProtoMessage() {} +func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{106} } + +func (m *PodSignature) Reset() { *m = PodSignature{} } +func (*PodSignature) ProtoMessage() {} +func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} } + +func (m *PodSpec) Reset() { *m = PodSpec{} } +func (*PodSpec) ProtoMessage() {} +func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } + +func (m *PodStatus) Reset() { *m = PodStatus{} } +func (*PodStatus) ProtoMessage() {} +func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } + +func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } +func (*PodStatusResult) ProtoMessage() {} +func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } + +func (m *PodTemplate) Reset() { *m = PodTemplate{} } +func (*PodTemplate) ProtoMessage() {} +func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } + +func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } +func (*PodTemplateList) ProtoMessage() {} +func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } + +func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } +func (*PodTemplateSpec) ProtoMessage() {} +func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } + +func (m *Preconditions) Reset() { *m = Preconditions{} } +func (*Preconditions) ProtoMessage() {} +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } + +func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } +func (*PreferAvoidPodsEntry) ProtoMessage() {} +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } + +func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } +func (*PreferredSchedulingTerm) ProtoMessage() {} +func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{116} +} + +func (m *Probe) Reset() { *m = Probe{} } +func (*Probe) ProtoMessage() {} +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } + +func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } +func (*QuobyteVolumeSource) ProtoMessage() {} +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } + +func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } +func (*RBDVolumeSource) ProtoMessage() {} +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } + +func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } +func (*RangeAllocation) ProtoMessage() {} +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } + +func (m *ReplicationController) Reset() { *m = ReplicationController{} } +func (*ReplicationController) ProtoMessage() {} +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } + +func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } +func (*ReplicationControllerList) ProtoMessage() {} +func (*ReplicationControllerList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{122} +} + +func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } +func (*ReplicationControllerSpec) ProtoMessage() {} +func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{123} +} + +func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } +func (*ReplicationControllerStatus) ProtoMessage() {} +func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{124} +} + +func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } +func (*ResourceFieldSelector) ProtoMessage() {} +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } + +func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } +func (*ResourceQuota) ProtoMessage() {} +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } + +func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } +func (*ResourceQuotaList) ProtoMessage() {} +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } + +func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } +func (*ResourceQuotaSpec) ProtoMessage() {} +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } + +func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } +func (*ResourceQuotaStatus) ProtoMessage() {} +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } + +func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } +func (*ResourceRequirements) ProtoMessage() {} +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } + +func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } +func (*SELinuxOptions) ProtoMessage() {} +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } + +func (m *Secret) Reset() { *m = Secret{} } +func (*Secret) ProtoMessage() {} +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } + +func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } +func (*SecretKeySelector) ProtoMessage() {} +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } + +func (m *SecretList) Reset() { *m = SecretList{} } +func (*SecretList) ProtoMessage() {} +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } + +func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } +func (*SecretVolumeSource) ProtoMessage() {} +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } + +func (m *SecurityContext) Reset() { *m = SecurityContext{} } +func (*SecurityContext) ProtoMessage() {} +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } + +func (m *SerializedReference) Reset() { *m = SerializedReference{} } +func (*SerializedReference) ProtoMessage() {} +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } + +func (m *Service) Reset() { *m = Service{} } +func (*Service) ProtoMessage() {} +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } + +func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } +func (*ServiceAccount) ProtoMessage() {} +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } + +func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } +func (*ServiceAccountList) ProtoMessage() {} +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } + +func (m *ServiceList) Reset() { *m = ServiceList{} } +func (*ServiceList) ProtoMessage() {} +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } + +func (m *ServicePort) Reset() { *m = ServicePort{} } +func (*ServicePort) ProtoMessage() {} +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } + +func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } +func (*ServiceProxyOptions) ProtoMessage() {} +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } + +func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } +func (*ServiceSpec) ProtoMessage() {} +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } + +func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } +func (*ServiceStatus) ProtoMessage() {} +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } + +func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } +func (*TCPSocketAction) ProtoMessage() {} +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } + +func (m *Taint) Reset() { *m = Taint{} } +func (*Taint) ProtoMessage() {} +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } + +func (m *Toleration) Reset() { *m = Toleration{} } +func (*Toleration) ProtoMessage() {} +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } + +func (m *Volume) Reset() { *m = Volume{} } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } + +func (m *VolumeMount) Reset() { *m = VolumeMount{} } +func (*VolumeMount) ProtoMessage() {} +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } + +func (m *VolumeSource) Reset() { *m = VolumeSource{} } +func (*VolumeSource) ProtoMessage() {} +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } + +func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } +func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} +func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{152} +} + +func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } +func (*WeightedPodAffinityTerm) ProtoMessage() {} +func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{153} +} + +func init() { + proto.RegisterType((*AWSElasticBlockStoreVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.AWSElasticBlockStoreVolumeSource") + proto.RegisterType((*Affinity)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Affinity") + proto.RegisterType((*AttachedVolume)(nil), "k8s.io.client-go.1.4.pkg.api.v1.AttachedVolume") + proto.RegisterType((*AvoidPods)(nil), "k8s.io.client-go.1.4.pkg.api.v1.AvoidPods") + proto.RegisterType((*AzureDiskVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.AzureDiskVolumeSource") + proto.RegisterType((*AzureFileVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.AzureFileVolumeSource") + proto.RegisterType((*Binding)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Binding") + proto.RegisterType((*Capabilities)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Capabilities") + proto.RegisterType((*CephFSVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.CephFSVolumeSource") + proto.RegisterType((*CinderVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.CinderVolumeSource") + proto.RegisterType((*ComponentCondition)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ComponentCondition") + proto.RegisterType((*ComponentStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ComponentStatus") + proto.RegisterType((*ComponentStatusList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ComponentStatusList") + proto.RegisterType((*ConfigMap)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ConfigMap") + proto.RegisterType((*ConfigMapKeySelector)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ConfigMapKeySelector") + proto.RegisterType((*ConfigMapList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ConfigMapList") + proto.RegisterType((*ConfigMapVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ConfigMapVolumeSource") + proto.RegisterType((*Container)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Container") + proto.RegisterType((*ContainerImage)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ContainerImage") + proto.RegisterType((*ContainerPort)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ContainerPort") + proto.RegisterType((*ContainerState)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ContainerState") + proto.RegisterType((*ContainerStateRunning)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ContainerStateRunning") + proto.RegisterType((*ContainerStateTerminated)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ContainerStateTerminated") + proto.RegisterType((*ContainerStateWaiting)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ContainerStateWaiting") + proto.RegisterType((*ContainerStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ContainerStatus") + proto.RegisterType((*DaemonEndpoint)(nil), "k8s.io.client-go.1.4.pkg.api.v1.DaemonEndpoint") + proto.RegisterType((*DeleteOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.DeleteOptions") + proto.RegisterType((*DownwardAPIVolumeFile)(nil), "k8s.io.client-go.1.4.pkg.api.v1.DownwardAPIVolumeFile") + proto.RegisterType((*DownwardAPIVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.DownwardAPIVolumeSource") + proto.RegisterType((*EmptyDirVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EmptyDirVolumeSource") + proto.RegisterType((*EndpointAddress)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EndpointAddress") + proto.RegisterType((*EndpointPort)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EndpointPort") + proto.RegisterType((*EndpointSubset)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EndpointSubset") + proto.RegisterType((*Endpoints)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Endpoints") + proto.RegisterType((*EndpointsList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EndpointsList") + proto.RegisterType((*EnvVar)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EnvVar") + proto.RegisterType((*EnvVarSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EnvVarSource") + proto.RegisterType((*Event)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Event") + proto.RegisterType((*EventList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EventList") + proto.RegisterType((*EventSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.EventSource") + proto.RegisterType((*ExecAction)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ExecAction") + proto.RegisterType((*ExportOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ExportOptions") + proto.RegisterType((*FCVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.FCVolumeSource") + proto.RegisterType((*FlexVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.FlexVolumeSource") + proto.RegisterType((*FlockerVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.FlockerVolumeSource") + proto.RegisterType((*GCEPersistentDiskVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.GCEPersistentDiskVolumeSource") + proto.RegisterType((*GitRepoVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.GitRepoVolumeSource") + proto.RegisterType((*GlusterfsVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.GlusterfsVolumeSource") + proto.RegisterType((*HTTPGetAction)(nil), "k8s.io.client-go.1.4.pkg.api.v1.HTTPGetAction") + proto.RegisterType((*HTTPHeader)(nil), "k8s.io.client-go.1.4.pkg.api.v1.HTTPHeader") + proto.RegisterType((*Handler)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Handler") + proto.RegisterType((*HostPathVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.HostPathVolumeSource") + proto.RegisterType((*ISCSIVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ISCSIVolumeSource") + proto.RegisterType((*KeyToPath)(nil), "k8s.io.client-go.1.4.pkg.api.v1.KeyToPath") + proto.RegisterType((*Lifecycle)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Lifecycle") + proto.RegisterType((*LimitRange)(nil), "k8s.io.client-go.1.4.pkg.api.v1.LimitRange") + proto.RegisterType((*LimitRangeItem)(nil), "k8s.io.client-go.1.4.pkg.api.v1.LimitRangeItem") + proto.RegisterType((*LimitRangeList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.LimitRangeList") + proto.RegisterType((*LimitRangeSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.LimitRangeSpec") + proto.RegisterType((*List)(nil), "k8s.io.client-go.1.4.pkg.api.v1.List") + proto.RegisterType((*ListOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ListOptions") + proto.RegisterType((*LoadBalancerIngress)(nil), "k8s.io.client-go.1.4.pkg.api.v1.LoadBalancerIngress") + proto.RegisterType((*LoadBalancerStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.LoadBalancerStatus") + proto.RegisterType((*LocalObjectReference)(nil), "k8s.io.client-go.1.4.pkg.api.v1.LocalObjectReference") + proto.RegisterType((*NFSVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NFSVolumeSource") + proto.RegisterType((*Namespace)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Namespace") + proto.RegisterType((*NamespaceList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NamespaceList") + proto.RegisterType((*NamespaceSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NamespaceSpec") + proto.RegisterType((*NamespaceStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NamespaceStatus") + proto.RegisterType((*Node)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Node") + proto.RegisterType((*NodeAddress)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeAddress") + proto.RegisterType((*NodeAffinity)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeAffinity") + proto.RegisterType((*NodeCondition)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeCondition") + proto.RegisterType((*NodeDaemonEndpoints)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeDaemonEndpoints") + proto.RegisterType((*NodeList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeList") + proto.RegisterType((*NodeProxyOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeProxyOptions") + proto.RegisterType((*NodeSelector)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeSelector") + proto.RegisterType((*NodeSelectorRequirement)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeSelectorRequirement") + proto.RegisterType((*NodeSelectorTerm)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeSelectorTerm") + proto.RegisterType((*NodeSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeSpec") + proto.RegisterType((*NodeStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeStatus") + proto.RegisterType((*NodeSystemInfo)(nil), "k8s.io.client-go.1.4.pkg.api.v1.NodeSystemInfo") + proto.RegisterType((*ObjectFieldSelector)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ObjectFieldSelector") + proto.RegisterType((*ObjectMeta)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ObjectMeta") + proto.RegisterType((*ObjectReference)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ObjectReference") + proto.RegisterType((*OwnerReference)(nil), "k8s.io.client-go.1.4.pkg.api.v1.OwnerReference") + proto.RegisterType((*PersistentVolume)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolume") + proto.RegisterType((*PersistentVolumeClaim)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeClaim") + proto.RegisterType((*PersistentVolumeClaimList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeClaimList") + proto.RegisterType((*PersistentVolumeClaimSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeClaimSpec") + proto.RegisterType((*PersistentVolumeClaimStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeClaimStatus") + proto.RegisterType((*PersistentVolumeClaimVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeClaimVolumeSource") + proto.RegisterType((*PersistentVolumeList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeList") + proto.RegisterType((*PersistentVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeSource") + proto.RegisterType((*PersistentVolumeSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeSpec") + proto.RegisterType((*PersistentVolumeStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PersistentVolumeStatus") + proto.RegisterType((*Pod)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Pod") + proto.RegisterType((*PodAffinity)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodAffinity") + proto.RegisterType((*PodAffinityTerm)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodAffinityTerm") + proto.RegisterType((*PodAntiAffinity)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodAntiAffinity") + proto.RegisterType((*PodAttachOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodAttachOptions") + proto.RegisterType((*PodCondition)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodCondition") + proto.RegisterType((*PodExecOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodExecOptions") + proto.RegisterType((*PodList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodList") + proto.RegisterType((*PodLogOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodLogOptions") + proto.RegisterType((*PodProxyOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodProxyOptions") + proto.RegisterType((*PodSecurityContext)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodSecurityContext") + proto.RegisterType((*PodSignature)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodSignature") + proto.RegisterType((*PodSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodSpec") + proto.RegisterType((*PodStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodStatus") + proto.RegisterType((*PodStatusResult)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodStatusResult") + proto.RegisterType((*PodTemplate)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodTemplate") + proto.RegisterType((*PodTemplateList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodTemplateList") + proto.RegisterType((*PodTemplateSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PodTemplateSpec") + proto.RegisterType((*Preconditions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Preconditions") + proto.RegisterType((*PreferAvoidPodsEntry)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PreferAvoidPodsEntry") + proto.RegisterType((*PreferredSchedulingTerm)(nil), "k8s.io.client-go.1.4.pkg.api.v1.PreferredSchedulingTerm") + proto.RegisterType((*Probe)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Probe") + proto.RegisterType((*QuobyteVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.QuobyteVolumeSource") + proto.RegisterType((*RBDVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.RBDVolumeSource") + proto.RegisterType((*RangeAllocation)(nil), "k8s.io.client-go.1.4.pkg.api.v1.RangeAllocation") + proto.RegisterType((*ReplicationController)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ReplicationController") + proto.RegisterType((*ReplicationControllerList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ReplicationControllerList") + proto.RegisterType((*ReplicationControllerSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ReplicationControllerSpec") + proto.RegisterType((*ReplicationControllerStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ReplicationControllerStatus") + proto.RegisterType((*ResourceFieldSelector)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ResourceFieldSelector") + proto.RegisterType((*ResourceQuota)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ResourceQuota") + proto.RegisterType((*ResourceQuotaList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ResourceQuotaList") + proto.RegisterType((*ResourceQuotaSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ResourceQuotaSpec") + proto.RegisterType((*ResourceQuotaStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ResourceQuotaStatus") + proto.RegisterType((*ResourceRequirements)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ResourceRequirements") + proto.RegisterType((*SELinuxOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.SELinuxOptions") + proto.RegisterType((*Secret)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Secret") + proto.RegisterType((*SecretKeySelector)(nil), "k8s.io.client-go.1.4.pkg.api.v1.SecretKeySelector") + proto.RegisterType((*SecretList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.SecretList") + proto.RegisterType((*SecretVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.SecretVolumeSource") + proto.RegisterType((*SecurityContext)(nil), "k8s.io.client-go.1.4.pkg.api.v1.SecurityContext") + proto.RegisterType((*SerializedReference)(nil), "k8s.io.client-go.1.4.pkg.api.v1.SerializedReference") + proto.RegisterType((*Service)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Service") + proto.RegisterType((*ServiceAccount)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ServiceAccount") + proto.RegisterType((*ServiceAccountList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ServiceAccountList") + proto.RegisterType((*ServiceList)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ServiceList") + proto.RegisterType((*ServicePort)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ServicePort") + proto.RegisterType((*ServiceProxyOptions)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ServiceProxyOptions") + proto.RegisterType((*ServiceSpec)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ServiceSpec") + proto.RegisterType((*ServiceStatus)(nil), "k8s.io.client-go.1.4.pkg.api.v1.ServiceStatus") + proto.RegisterType((*TCPSocketAction)(nil), "k8s.io.client-go.1.4.pkg.api.v1.TCPSocketAction") + proto.RegisterType((*Taint)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Taint") + proto.RegisterType((*Toleration)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Toleration") + proto.RegisterType((*Volume)(nil), "k8s.io.client-go.1.4.pkg.api.v1.Volume") + proto.RegisterType((*VolumeMount)(nil), "k8s.io.client-go.1.4.pkg.api.v1.VolumeMount") + proto.RegisterType((*VolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.VolumeSource") + proto.RegisterType((*VsphereVirtualDiskVolumeSource)(nil), "k8s.io.client-go.1.4.pkg.api.v1.VsphereVirtualDiskVolumeSource") + proto.RegisterType((*WeightedPodAffinityTerm)(nil), "k8s.io.client-go.1.4.pkg.api.v1.WeightedPodAffinityTerm") +} +func (m *AWSElasticBlockStoreVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AWSElasticBlockStoreVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.VolumeID))) + i += copy(data[i:], m.VolumeID) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Partition)) + data[i] = 0x20 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *Affinity) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Affinity) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.NodeAffinity != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.NodeAffinity.Size())) + n1, err := m.NodeAffinity.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + } + if m.PodAffinity != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PodAffinity.Size())) + n2, err := m.PodAffinity.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + } + if m.PodAntiAffinity != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.PodAntiAffinity.Size())) + n3, err := m.PodAntiAffinity.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n3 + } + return i, nil +} + +func (m *AttachedVolume) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AttachedVolume) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.DevicePath))) + i += copy(data[i:], m.DevicePath) + return i, nil +} + +func (m *AvoidPods) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AvoidPods) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.PreferAvoidPods) > 0 { + for _, msg := range m.PreferAvoidPods { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *AzureDiskVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AzureDiskVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.DiskName))) + i += copy(data[i:], m.DiskName) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.DataDiskURI))) + i += copy(data[i:], m.DataDiskURI) + if m.CachingMode != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(*m.CachingMode))) + i += copy(data[i:], *m.CachingMode) + } + if m.FSType != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(*m.FSType))) + i += copy(data[i:], *m.FSType) + } + if m.ReadOnly != nil { + data[i] = 0x28 + i++ + if *m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + +func (m *AzureFileVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AzureFileVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.SecretName))) + i += copy(data[i:], m.SecretName) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ShareName))) + i += copy(data[i:], m.ShareName) + data[i] = 0x18 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *Binding) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Binding) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n4, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n4 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Target.Size())) + n5, err := m.Target.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n5 + return i, nil +} + +func (m *Capabilities) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Capabilities) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Add) > 0 { + for _, s := range m.Add { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.Drop) > 0 { + for _, s := range m.Drop { + data[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *CephFSVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CephFSVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Monitors) > 0 { + for _, s := range m.Monitors { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.User))) + i += copy(data[i:], m.User) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.SecretFile))) + i += copy(data[i:], m.SecretFile) + if m.SecretRef != nil { + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) + n6, err := m.SecretRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n6 + } + data[i] = 0x30 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *CinderVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CinderVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.VolumeID))) + i += copy(data[i:], m.VolumeID) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + data[i] = 0x18 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *ComponentCondition) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ComponentCondition) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Status))) + i += copy(data[i:], m.Status) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Error))) + i += copy(data[i:], m.Error) + return i, nil +} + +func (m *ComponentStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ComponentStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n7, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n7 + if len(m.Conditions) > 0 { + for _, msg := range m.Conditions { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ComponentStatusList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ComponentStatusList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n8, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n8 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ConfigMap) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ConfigMap) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n9, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n9 + if len(m.Data) > 0 { + for k := range m.Data { + data[i] = 0x12 + i++ + v := m.Data[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + return i, nil +} + +func (m *ConfigMapKeySelector) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ConfigMapKeySelector) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) + n10, err := m.LocalObjectReference.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n10 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + return i, nil +} + +func (m *ConfigMapList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ConfigMapList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n11, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n11 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ConfigMapVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ConfigMapVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) + n12, err := m.LocalObjectReference.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n12 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.DefaultMode != nil { + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) + } + return i, nil +} + +func (m *Container) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Container) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Image))) + i += copy(data[i:], m.Image) + if len(m.Command) > 0 { + for _, s := range m.Command { + data[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.Args) > 0 { + for _, s := range m.Args { + data[i] = 0x22 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.WorkingDir))) + i += copy(data[i:], m.WorkingDir) + if len(m.Ports) > 0 { + for _, msg := range m.Ports { + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Env) > 0 { + for _, msg := range m.Env { + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Resources.Size())) + n13, err := m.Resources.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n13 + if len(m.VolumeMounts) > 0 { + for _, msg := range m.VolumeMounts { + data[i] = 0x4a + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.LivenessProbe != nil { + data[i] = 0x52 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LivenessProbe.Size())) + n14, err := m.LivenessProbe.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n14 + } + if m.ReadinessProbe != nil { + data[i] = 0x5a + i++ + i = encodeVarintGenerated(data, i, uint64(m.ReadinessProbe.Size())) + n15, err := m.ReadinessProbe.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n15 + } + if m.Lifecycle != nil { + data[i] = 0x62 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Lifecycle.Size())) + n16, err := m.Lifecycle.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n16 + } + data[i] = 0x6a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.TerminationMessagePath))) + i += copy(data[i:], m.TerminationMessagePath) + data[i] = 0x72 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ImagePullPolicy))) + i += copy(data[i:], m.ImagePullPolicy) + if m.SecurityContext != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.SecurityContext.Size())) + n17, err := m.SecurityContext.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n17 + } + data[i] = 0x80 + i++ + data[i] = 0x1 + i++ + if m.Stdin { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x88 + i++ + data[i] = 0x1 + i++ + if m.StdinOnce { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x90 + i++ + data[i] = 0x1 + i++ + if m.TTY { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *ContainerImage) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ContainerImage) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Names) > 0 { + for _, s := range m.Names { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(m.SizeBytes)) + return i, nil +} + +func (m *ContainerPort) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ContainerPort) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(m.HostPort)) + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ContainerPort)) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Protocol))) + i += copy(data[i:], m.Protocol) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.HostIP))) + i += copy(data[i:], m.HostIP) + return i, nil +} + +func (m *ContainerState) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ContainerState) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Waiting != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.Waiting.Size())) + n18, err := m.Waiting.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n18 + } + if m.Running != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Running.Size())) + n19, err := m.Running.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n19 + } + if m.Terminated != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Terminated.Size())) + n20, err := m.Terminated.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n20 + } + return i, nil +} + +func (m *ContainerStateRunning) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ContainerStateRunning) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.StartedAt.Size())) + n21, err := m.StartedAt.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n21 + return i, nil +} + +func (m *ContainerStateTerminated) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ContainerStateTerminated) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ExitCode)) + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Signal)) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(m.StartedAt.Size())) + n22, err := m.StartedAt.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n22 + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FinishedAt.Size())) + n23, err := m.FinishedAt.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n23 + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ContainerID))) + i += copy(data[i:], m.ContainerID) + return i, nil +} + +func (m *ContainerStateWaiting) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ContainerStateWaiting) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + return i, nil +} + +func (m *ContainerStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ContainerStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.State.Size())) + n24, err := m.State.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n24 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTerminationState.Size())) + n25, err := m.LastTerminationState.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n25 + data[i] = 0x20 + i++ + if m.Ready { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x28 + i++ + i = encodeVarintGenerated(data, i, uint64(m.RestartCount)) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Image))) + i += copy(data[i:], m.Image) + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ImageID))) + i += copy(data[i:], m.ImageID) + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ContainerID))) + i += copy(data[i:], m.ContainerID) + return i, nil +} + +func (m *DaemonEndpoint) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *DaemonEndpoint) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Port)) + return i, nil +} + +func (m *DeleteOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *DeleteOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.GracePeriodSeconds != nil { + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.GracePeriodSeconds)) + } + if m.Preconditions != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Preconditions.Size())) + n26, err := m.Preconditions.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n26 + } + if m.OrphanDependents != nil { + data[i] = 0x18 + i++ + if *m.OrphanDependents { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + +func (m *DownwardAPIVolumeFile) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *DownwardAPIVolumeFile) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + if m.FieldRef != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FieldRef.Size())) + n27, err := m.FieldRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n27 + } + if m.ResourceFieldRef != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.ResourceFieldRef.Size())) + n28, err := m.ResourceFieldRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n28 + } + if m.Mode != nil { + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.Mode)) + } + return i, nil +} + +func (m *DownwardAPIVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *DownwardAPIVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.DefaultMode != nil { + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) + } + return i, nil +} + +func (m *EmptyDirVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EmptyDirVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Medium))) + i += copy(data[i:], m.Medium) + return i, nil +} + +func (m *EndpointAddress) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EndpointAddress) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.IP))) + i += copy(data[i:], m.IP) + if m.TargetRef != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.TargetRef.Size())) + n29, err := m.TargetRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n29 + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Hostname))) + i += copy(data[i:], m.Hostname) + if m.NodeName != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(*m.NodeName))) + i += copy(data[i:], *m.NodeName) + } + return i, nil +} + +func (m *EndpointPort) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EndpointPort) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Port)) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Protocol))) + i += copy(data[i:], m.Protocol) + return i, nil +} + +func (m *EndpointSubset) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EndpointSubset) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Addresses) > 0 { + for _, msg := range m.Addresses { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.NotReadyAddresses) > 0 { + for _, msg := range m.NotReadyAddresses { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Ports) > 0 { + for _, msg := range m.Ports { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *Endpoints) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Endpoints) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n30, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n30 + if len(m.Subsets) > 0 { + for _, msg := range m.Subsets { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *EndpointsList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EndpointsList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n31, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n31 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *EnvVar) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EnvVar) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Value))) + i += copy(data[i:], m.Value) + if m.ValueFrom != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.ValueFrom.Size())) + n32, err := m.ValueFrom.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n32 + } + return i, nil +} + +func (m *EnvVarSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EnvVarSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.FieldRef != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.FieldRef.Size())) + n33, err := m.FieldRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n33 + } + if m.ResourceFieldRef != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ResourceFieldRef.Size())) + n34, err := m.ResourceFieldRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n34 + } + if m.ConfigMapKeyRef != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.ConfigMapKeyRef.Size())) + n35, err := m.ConfigMapKeyRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n35 + } + if m.SecretKeyRef != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.SecretKeyRef.Size())) + n36, err := m.SecretKeyRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n36 + } + return i, nil +} + +func (m *Event) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Event) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n37, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n37 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.InvolvedObject.Size())) + n38, err := m.InvolvedObject.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n38 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Source.Size())) + n39, err := m.Source.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n39 + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FirstTimestamp.Size())) + n40, err := m.FirstTimestamp.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n40 + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTimestamp.Size())) + n41, err := m.LastTimestamp.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n41 + data[i] = 0x40 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Count)) + data[i] = 0x4a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + return i, nil +} + +func (m *EventList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EventList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n42, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n42 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *EventSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *EventSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Component))) + i += copy(data[i:], m.Component) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Host))) + i += copy(data[i:], m.Host) + return i, nil +} + +func (m *ExecAction) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ExecAction) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Command) > 0 { + for _, s := range m.Command { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *ExportOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ExportOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + if m.Export { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x10 + i++ + if m.Exact { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *FCVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *FCVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.TargetWWNs) > 0 { + for _, s := range m.TargetWWNs { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if m.Lun != nil { + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.Lun)) + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + data[i] = 0x20 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *FlexVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *FlexVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Driver))) + i += copy(data[i:], m.Driver) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + if m.SecretRef != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) + n43, err := m.SecretRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n43 + } + data[i] = 0x20 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + if len(m.Options) > 0 { + for k := range m.Options { + data[i] = 0x2a + i++ + v := m.Options[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + return i, nil +} + +func (m *FlockerVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *FlockerVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.DatasetName))) + i += copy(data[i:], m.DatasetName) + return i, nil +} + +func (m *GCEPersistentDiskVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GCEPersistentDiskVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.PDName))) + i += copy(data[i:], m.PDName) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Partition)) + data[i] = 0x20 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *GitRepoVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GitRepoVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Repository))) + i += copy(data[i:], m.Repository) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Revision))) + i += copy(data[i:], m.Revision) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Directory))) + i += copy(data[i:], m.Directory) + return i, nil +} + +func (m *GlusterfsVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *GlusterfsVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.EndpointsName))) + i += copy(data[i:], m.EndpointsName) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + data[i] = 0x18 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *HTTPGetAction) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *HTTPGetAction) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Port.Size())) + n44, err := m.Port.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n44 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Host))) + i += copy(data[i:], m.Host) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Scheme))) + i += copy(data[i:], m.Scheme) + if len(m.HTTPHeaders) > 0 { + for _, msg := range m.HTTPHeaders { + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *HTTPHeader) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *HTTPHeader) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Value))) + i += copy(data[i:], m.Value) + return i, nil +} + +func (m *Handler) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Handler) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Exec != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.Exec.Size())) + n45, err := m.Exec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n45 + } + if m.HTTPGet != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.HTTPGet.Size())) + n46, err := m.HTTPGet.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n46 + } + if m.TCPSocket != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.TCPSocket.Size())) + n47, err := m.TCPSocket.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n47 + } + return i, nil +} + +func (m *HostPathVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *HostPathVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + return i, nil +} + +func (m *ISCSIVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ISCSIVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.TargetPortal))) + i += copy(data[i:], m.TargetPortal) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.IQN))) + i += copy(data[i:], m.IQN) + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Lun)) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ISCSIInterface))) + i += copy(data[i:], m.ISCSIInterface) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + data[i] = 0x30 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *KeyToPath) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *KeyToPath) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + if m.Mode != nil { + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.Mode)) + } + return i, nil +} + +func (m *Lifecycle) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Lifecycle) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.PostStart != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.PostStart.Size())) + n48, err := m.PostStart.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n48 + } + if m.PreStop != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PreStop.Size())) + n49, err := m.PreStop.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n49 + } + return i, nil +} + +func (m *LimitRange) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LimitRange) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n50, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n50 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n51, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n51 + return i, nil +} + +func (m *LimitRangeItem) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LimitRangeItem) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + if len(m.Max) > 0 { + for k := range m.Max { + data[i] = 0x12 + i++ + v := m.Max[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n52, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n52 + } + } + if len(m.Min) > 0 { + for k := range m.Min { + data[i] = 0x1a + i++ + v := m.Min[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n53, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n53 + } + } + if len(m.Default) > 0 { + for k := range m.Default { + data[i] = 0x22 + i++ + v := m.Default[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n54, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n54 + } + } + if len(m.DefaultRequest) > 0 { + for k := range m.DefaultRequest { + data[i] = 0x2a + i++ + v := m.DefaultRequest[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n55, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n55 + } + } + if len(m.MaxLimitRequestRatio) > 0 { + for k := range m.MaxLimitRequestRatio { + data[i] = 0x32 + i++ + v := m.MaxLimitRequestRatio[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n56, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n56 + } + } + return i, nil +} + +func (m *LimitRangeList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LimitRangeList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n57, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n57 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *LimitRangeSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LimitRangeSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Limits) > 0 { + for _, msg := range m.Limits { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *List) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *List) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n58, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n58 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ListOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ListOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.LabelSelector))) + i += copy(data[i:], m.LabelSelector) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FieldSelector))) + i += copy(data[i:], m.FieldSelector) + data[i] = 0x18 + i++ + if m.Watch { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ResourceVersion))) + i += copy(data[i:], m.ResourceVersion) + if m.TimeoutSeconds != nil { + data[i] = 0x28 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.TimeoutSeconds)) + } + return i, nil +} + +func (m *LoadBalancerIngress) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LoadBalancerIngress) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.IP))) + i += copy(data[i:], m.IP) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Hostname))) + i += copy(data[i:], m.Hostname) + return i, nil +} + +func (m *LoadBalancerStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LoadBalancerStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Ingress) > 0 { + for _, msg := range m.Ingress { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *LocalObjectReference) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LocalObjectReference) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + return i, nil +} + +func (m *NFSVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NFSVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Server))) + i += copy(data[i:], m.Server) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + data[i] = 0x18 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *Namespace) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Namespace) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n59, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n59 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n60, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n60 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n61, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n61 + return i, nil +} + +func (m *NamespaceList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NamespaceList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n62, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n62 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *NamespaceSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NamespaceSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Finalizers) > 0 { + for _, s := range m.Finalizers { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *NamespaceStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NamespaceStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Phase))) + i += copy(data[i:], m.Phase) + return i, nil +} + +func (m *Node) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Node) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n63, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n63 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n64, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n64 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n65, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n65 + return i, nil +} + +func (m *NodeAddress) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeAddress) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Address))) + i += copy(data[i:], m.Address) + return i, nil +} + +func (m *NodeAffinity) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeAffinity) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.RequiredDuringSchedulingIgnoredDuringExecution != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.RequiredDuringSchedulingIgnoredDuringExecution.Size())) + n66, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n66 + } + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *NodeCondition) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeCondition) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Status))) + i += copy(data[i:], m.Status) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastHeartbeatTime.Size())) + n67, err := m.LastHeartbeatTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n67 + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) + n68, err := m.LastTransitionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n68 + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + return i, nil +} + +func (m *NodeDaemonEndpoints) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeDaemonEndpoints) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.KubeletEndpoint.Size())) + n69, err := m.KubeletEndpoint.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n69 + return i, nil +} + +func (m *NodeList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n70, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n70 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *NodeProxyOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeProxyOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + return i, nil +} + +func (m *NodeSelector) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeSelector) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.NodeSelectorTerms) > 0 { + for _, msg := range m.NodeSelectorTerms { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *NodeSelectorRequirement) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeSelectorRequirement) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Operator))) + i += copy(data[i:], m.Operator) + if len(m.Values) > 0 { + for _, s := range m.Values { + data[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *NodeSelectorTerm) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeSelectorTerm) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.MatchExpressions) > 0 { + for _, msg := range m.MatchExpressions { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *NodeSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.PodCIDR))) + i += copy(data[i:], m.PodCIDR) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ExternalID))) + i += copy(data[i:], m.ExternalID) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ProviderID))) + i += copy(data[i:], m.ProviderID) + data[i] = 0x20 + i++ + if m.Unschedulable { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *NodeStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Capacity) > 0 { + for k := range m.Capacity { + data[i] = 0xa + i++ + v := m.Capacity[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n71, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n71 + } + } + if len(m.Allocatable) > 0 { + for k := range m.Allocatable { + data[i] = 0x12 + i++ + v := m.Allocatable[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n72, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n72 + } + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Phase))) + i += copy(data[i:], m.Phase) + if len(m.Conditions) > 0 { + for _, msg := range m.Conditions { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Addresses) > 0 { + for _, msg := range m.Addresses { + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(m.DaemonEndpoints.Size())) + n73, err := m.DaemonEndpoints.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n73 + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(m.NodeInfo.Size())) + n74, err := m.NodeInfo.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n74 + if len(m.Images) > 0 { + for _, msg := range m.Images { + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.VolumesInUse) > 0 { + for _, s := range m.VolumesInUse { + data[i] = 0x4a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.VolumesAttached) > 0 { + for _, msg := range m.VolumesAttached { + data[i] = 0x52 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *NodeSystemInfo) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NodeSystemInfo) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.MachineID))) + i += copy(data[i:], m.MachineID) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.SystemUUID))) + i += copy(data[i:], m.SystemUUID) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.BootID))) + i += copy(data[i:], m.BootID) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.KernelVersion))) + i += copy(data[i:], m.KernelVersion) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.OSImage))) + i += copy(data[i:], m.OSImage) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ContainerRuntimeVersion))) + i += copy(data[i:], m.ContainerRuntimeVersion) + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.KubeletVersion))) + i += copy(data[i:], m.KubeletVersion) + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.KubeProxyVersion))) + i += copy(data[i:], m.KubeProxyVersion) + data[i] = 0x4a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.OperatingSystem))) + i += copy(data[i:], m.OperatingSystem) + data[i] = 0x52 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Architecture))) + i += copy(data[i:], m.Architecture) + return i, nil +} + +func (m *ObjectFieldSelector) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ObjectFieldSelector) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.APIVersion))) + i += copy(data[i:], m.APIVersion) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FieldPath))) + i += copy(data[i:], m.FieldPath) + return i, nil +} + +func (m *ObjectMeta) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ObjectMeta) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.GenerateName))) + i += copy(data[i:], m.GenerateName) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Namespace))) + i += copy(data[i:], m.Namespace) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.SelfLink))) + i += copy(data[i:], m.SelfLink) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.UID))) + i += copy(data[i:], m.UID) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ResourceVersion))) + i += copy(data[i:], m.ResourceVersion) + data[i] = 0x38 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Generation)) + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(m.CreationTimestamp.Size())) + n75, err := m.CreationTimestamp.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n75 + if m.DeletionTimestamp != nil { + data[i] = 0x4a + i++ + i = encodeVarintGenerated(data, i, uint64(m.DeletionTimestamp.Size())) + n76, err := m.DeletionTimestamp.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n76 + } + if m.DeletionGracePeriodSeconds != nil { + data[i] = 0x50 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.DeletionGracePeriodSeconds)) + } + if len(m.Labels) > 0 { + for k := range m.Labels { + data[i] = 0x5a + i++ + v := m.Labels[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + if len(m.Annotations) > 0 { + for k := range m.Annotations { + data[i] = 0x62 + i++ + v := m.Annotations[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + if len(m.OwnerReferences) > 0 { + for _, msg := range m.OwnerReferences { + data[i] = 0x6a + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Finalizers) > 0 { + for _, s := range m.Finalizers { + data[i] = 0x72 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ClusterName))) + i += copy(data[i:], m.ClusterName) + return i, nil +} + +func (m *ObjectReference) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ObjectReference) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Kind))) + i += copy(data[i:], m.Kind) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Namespace))) + i += copy(data[i:], m.Namespace) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.UID))) + i += copy(data[i:], m.UID) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.APIVersion))) + i += copy(data[i:], m.APIVersion) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ResourceVersion))) + i += copy(data[i:], m.ResourceVersion) + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FieldPath))) + i += copy(data[i:], m.FieldPath) + return i, nil +} + +func (m *OwnerReference) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *OwnerReference) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Kind))) + i += copy(data[i:], m.Kind) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.UID))) + i += copy(data[i:], m.UID) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.APIVersion))) + i += copy(data[i:], m.APIVersion) + if m.Controller != nil { + data[i] = 0x30 + i++ + if *m.Controller { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + +func (m *PersistentVolume) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolume) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n77, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n77 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n78, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n78 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n79, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n79 + return i, nil +} + +func (m *PersistentVolumeClaim) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeClaim) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n80, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n80 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n81, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n81 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n82, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n82 + return i, nil +} + +func (m *PersistentVolumeClaimList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeClaimList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n83, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n83 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *PersistentVolumeClaimSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeClaimSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Resources.Size())) + n84, err := m.Resources.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n84 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.VolumeName))) + i += copy(data[i:], m.VolumeName) + if m.Selector != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Selector.Size())) + n85, err := m.Selector.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n85 + } + return i, nil +} + +func (m *PersistentVolumeClaimStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeClaimStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Phase))) + i += copy(data[i:], m.Phase) + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + data[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.Capacity) > 0 { + for k := range m.Capacity { + data[i] = 0x1a + i++ + v := m.Capacity[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n86, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n86 + } + } + return i, nil +} + +func (m *PersistentVolumeClaimVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeClaimVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ClaimName))) + i += copy(data[i:], m.ClaimName) + data[i] = 0x10 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *PersistentVolumeList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n87, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n87 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *PersistentVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.GCEPersistentDisk != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) + n88, err := m.GCEPersistentDisk.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n88 + } + if m.AWSElasticBlockStore != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) + n89, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n89 + } + if m.HostPath != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.HostPath.Size())) + n90, err := m.HostPath.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n90 + } + if m.Glusterfs != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) + n91, err := m.Glusterfs.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n91 + } + if m.NFS != nil { + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) + n92, err := m.NFS.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n92 + } + if m.RBD != nil { + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) + n93, err := m.RBD.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n93 + } + if m.ISCSI != nil { + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) + n94, err := m.ISCSI.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n94 + } + if m.Cinder != nil { + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) + n95, err := m.Cinder.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n95 + } + if m.CephFS != nil { + data[i] = 0x4a + i++ + i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) + n96, err := m.CephFS.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n96 + } + if m.FC != nil { + data[i] = 0x52 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FC.Size())) + n97, err := m.FC.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n97 + } + if m.Flocker != nil { + data[i] = 0x5a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) + n98, err := m.Flocker.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n98 + } + if m.FlexVolume != nil { + data[i] = 0x62 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) + n99, err := m.FlexVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n99 + } + if m.AzureFile != nil { + data[i] = 0x6a + i++ + i = encodeVarintGenerated(data, i, uint64(m.AzureFile.Size())) + n100, err := m.AzureFile.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n100 + } + if m.VsphereVolume != nil { + data[i] = 0x72 + i++ + i = encodeVarintGenerated(data, i, uint64(m.VsphereVolume.Size())) + n101, err := m.VsphereVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n101 + } + if m.Quobyte != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) + n102, err := m.Quobyte.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n102 + } + if m.AzureDisk != nil { + data[i] = 0x82 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.AzureDisk.Size())) + n103, err := m.AzureDisk.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n103 + } + return i, nil +} + +func (m *PersistentVolumeSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Capacity) > 0 { + for k := range m.Capacity { + data[i] = 0xa + i++ + v := m.Capacity[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n104, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n104 + } + } + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeSource.Size())) + n105, err := m.PersistentVolumeSource.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n105 + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + data[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if m.ClaimRef != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ClaimRef.Size())) + n106, err := m.ClaimRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n106 + } + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.PersistentVolumeReclaimPolicy))) + i += copy(data[i:], m.PersistentVolumeReclaimPolicy) + return i, nil +} + +func (m *PersistentVolumeStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PersistentVolumeStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Phase))) + i += copy(data[i:], m.Phase) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + return i, nil +} + +func (m *Pod) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Pod) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n107, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n107 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n108, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n108 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n109, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n109 + return i, nil +} + +func (m *PodAffinity) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodAffinity) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, msg := range m.RequiredDuringSchedulingIgnoredDuringExecution { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *PodAffinityTerm) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodAffinityTerm) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.LabelSelector != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.LabelSelector.Size())) + n110, err := m.LabelSelector.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n110 + } + if len(m.Namespaces) > 0 { + for _, s := range m.Namespaces { + data[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.TopologyKey))) + i += copy(data[i:], m.TopologyKey) + return i, nil +} + +func (m *PodAntiAffinity) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodAntiAffinity) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, msg := range m.RequiredDuringSchedulingIgnoredDuringExecution { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *PodAttachOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodAttachOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + if m.Stdin { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x10 + i++ + if m.Stdout { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x18 + i++ + if m.Stderr { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x20 + i++ + if m.TTY { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Container))) + i += copy(data[i:], m.Container) + return i, nil +} + +func (m *PodCondition) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodCondition) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Status))) + i += copy(data[i:], m.Status) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastProbeTime.Size())) + n111, err := m.LastProbeTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n111 + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) + n112, err := m.LastTransitionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n112 + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + return i, nil +} + +func (m *PodExecOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodExecOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + if m.Stdin { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x10 + i++ + if m.Stdout { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x18 + i++ + if m.Stderr { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x20 + i++ + if m.TTY { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Container))) + i += copy(data[i:], m.Container) + if len(m.Command) > 0 { + for _, s := range m.Command { + data[i] = 0x32 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *PodList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n113, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n113 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *PodLogOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodLogOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Container))) + i += copy(data[i:], m.Container) + data[i] = 0x10 + i++ + if m.Follow { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x18 + i++ + if m.Previous { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + if m.SinceSeconds != nil { + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.SinceSeconds)) + } + if m.SinceTime != nil { + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(m.SinceTime.Size())) + n114, err := m.SinceTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n114 + } + data[i] = 0x30 + i++ + if m.Timestamps { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + if m.TailLines != nil { + data[i] = 0x38 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.TailLines)) + } + if m.LimitBytes != nil { + data[i] = 0x40 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.LimitBytes)) + } + return i, nil +} + +func (m *PodProxyOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodProxyOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + return i, nil +} + +func (m *PodSecurityContext) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodSecurityContext) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.SELinuxOptions != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) + n115, err := m.SELinuxOptions.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n115 + } + if m.RunAsUser != nil { + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.RunAsUser)) + } + if m.RunAsNonRoot != nil { + data[i] = 0x18 + i++ + if *m.RunAsNonRoot { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if len(m.SupplementalGroups) > 0 { + for _, num := range m.SupplementalGroups { + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(num)) + } + } + if m.FSGroup != nil { + data[i] = 0x28 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.FSGroup)) + } + return i, nil +} + +func (m *PodSignature) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodSignature) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.PodController != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.PodController.Size())) + n116, err := m.PodController.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n116 + } + return i, nil +} + +func (m *PodSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Volumes) > 0 { + for _, msg := range m.Volumes { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Containers) > 0 { + for _, msg := range m.Containers { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.RestartPolicy))) + i += copy(data[i:], m.RestartPolicy) + if m.TerminationGracePeriodSeconds != nil { + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.TerminationGracePeriodSeconds)) + } + if m.ActiveDeadlineSeconds != nil { + data[i] = 0x28 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.ActiveDeadlineSeconds)) + } + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.DNSPolicy))) + i += copy(data[i:], m.DNSPolicy) + if len(m.NodeSelector) > 0 { + for k := range m.NodeSelector { + data[i] = 0x3a + i++ + v := m.NodeSelector[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ServiceAccountName))) + i += copy(data[i:], m.ServiceAccountName) + data[i] = 0x4a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.DeprecatedServiceAccount))) + i += copy(data[i:], m.DeprecatedServiceAccount) + data[i] = 0x52 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.NodeName))) + i += copy(data[i:], m.NodeName) + data[i] = 0x58 + i++ + if m.HostNetwork { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x60 + i++ + if m.HostPID { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x68 + i++ + if m.HostIPC { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + if m.SecurityContext != nil { + data[i] = 0x72 + i++ + i = encodeVarintGenerated(data, i, uint64(m.SecurityContext.Size())) + n117, err := m.SecurityContext.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n117 + } + if len(m.ImagePullSecrets) > 0 { + for _, msg := range m.ImagePullSecrets { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + data[i] = 0x82 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Hostname))) + i += copy(data[i:], m.Hostname) + data[i] = 0x8a + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Subdomain))) + i += copy(data[i:], m.Subdomain) + return i, nil +} + +func (m *PodStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Phase))) + i += copy(data[i:], m.Phase) + if len(m.Conditions) > 0 { + for _, msg := range m.Conditions { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.HostIP))) + i += copy(data[i:], m.HostIP) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.PodIP))) + i += copy(data[i:], m.PodIP) + if m.StartTime != nil { + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(m.StartTime.Size())) + n118, err := m.StartTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n118 + } + if len(m.ContainerStatuses) > 0 { + for _, msg := range m.ContainerStatuses { + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *PodStatusResult) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodStatusResult) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n119, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n119 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n120, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n120 + return i, nil +} + +func (m *PodTemplate) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodTemplate) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n121, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n121 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) + n122, err := m.Template.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n122 + return i, nil +} + +func (m *PodTemplateList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodTemplateList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n123, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n123 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *PodTemplateSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodTemplateSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n124, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n124 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n125, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n125 + return i, nil +} + +func (m *Preconditions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Preconditions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.UID != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(*m.UID))) + i += copy(data[i:], *m.UID) + } + return i, nil +} + +func (m *PreferAvoidPodsEntry) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PreferAvoidPodsEntry) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.PodSignature.Size())) + n126, err := m.PodSignature.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n126 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.EvictionTime.Size())) + n127, err := m.EvictionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n127 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + return i, nil +} + +func (m *PreferredSchedulingTerm) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PreferredSchedulingTerm) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Weight)) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Preference.Size())) + n128, err := m.Preference.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n128 + return i, nil +} + +func (m *Probe) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Probe) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.Handler.Size())) + n129, err := m.Handler.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n129 + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(m.InitialDelaySeconds)) + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(m.TimeoutSeconds)) + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PeriodSeconds)) + data[i] = 0x28 + i++ + i = encodeVarintGenerated(data, i, uint64(m.SuccessThreshold)) + data[i] = 0x30 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FailureThreshold)) + return i, nil +} + +func (m *QuobyteVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *QuobyteVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Registry))) + i += copy(data[i:], m.Registry) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Volume))) + i += copy(data[i:], m.Volume) + data[i] = 0x18 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.User))) + i += copy(data[i:], m.User) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + return i, nil +} + +func (m *RBDVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *RBDVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.CephMonitors) > 0 { + for _, s := range m.CephMonitors { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.RBDImage))) + i += copy(data[i:], m.RBDImage) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.RBDPool))) + i += copy(data[i:], m.RBDPool) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.RadosUser))) + i += copy(data[i:], m.RadosUser) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Keyring))) + i += copy(data[i:], m.Keyring) + if m.SecretRef != nil { + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) + n130, err := m.SecretRef.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n130 + } + data[i] = 0x40 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + return i, nil +} + +func (m *RangeAllocation) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *RangeAllocation) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n131, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n131 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Range))) + i += copy(data[i:], m.Range) + if m.Data != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Data))) + i += copy(data[i:], m.Data) + } + return i, nil +} + +func (m *ReplicationController) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ReplicationController) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n132, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n132 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n133, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n133 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n134, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n134 + return i, nil +} + +func (m *ReplicationControllerList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ReplicationControllerList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n135, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n135 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ReplicationControllerSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ReplicationControllerSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Replicas != nil { + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.Replicas)) + } + if len(m.Selector) > 0 { + for k := range m.Selector { + data[i] = 0x12 + i++ + v := m.Selector[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + if m.Template != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) + n136, err := m.Template.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n136 + } + return i, nil +} + +func (m *ReplicationControllerStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ReplicationControllerStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Replicas)) + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FullyLabeledReplicas)) + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObservedGeneration)) + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ReadyReplicas)) + return i, nil +} + +func (m *ResourceFieldSelector) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResourceFieldSelector) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ContainerName))) + i += copy(data[i:], m.ContainerName) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Resource))) + i += copy(data[i:], m.Resource) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Divisor.Size())) + n137, err := m.Divisor.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n137 + return i, nil +} + +func (m *ResourceQuota) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResourceQuota) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n138, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n138 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n139, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n139 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n140, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n140 + return i, nil +} + +func (m *ResourceQuotaList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResourceQuotaList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n141, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n141 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ResourceQuotaSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResourceQuotaSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Hard) > 0 { + for k := range m.Hard { + data[i] = 0xa + i++ + v := m.Hard[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n142, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n142 + } + } + if len(m.Scopes) > 0 { + for _, s := range m.Scopes { + data[i] = 0x12 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *ResourceQuotaStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Hard) > 0 { + for k := range m.Hard { + data[i] = 0xa + i++ + v := m.Hard[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n143, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n143 + } + } + if len(m.Used) > 0 { + for k := range m.Used { + data[i] = 0x12 + i++ + v := m.Used[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n144, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n144 + } + } + return i, nil +} + +func (m *ResourceRequirements) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Limits) > 0 { + for k := range m.Limits { + data[i] = 0xa + i++ + v := m.Limits[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n145, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n145 + } + } + if len(m.Requests) > 0 { + for k := range m.Requests { + data[i] = 0x12 + i++ + v := m.Requests[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n146, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n146 + } + } + return i, nil +} + +func (m *SELinuxOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SELinuxOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.User))) + i += copy(data[i:], m.User) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Role))) + i += copy(data[i:], m.Role) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Level))) + i += copy(data[i:], m.Level) + return i, nil +} + +func (m *Secret) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Secret) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n147, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n147 + if len(m.Data) > 0 { + for k := range m.Data { + data[i] = 0x12 + i++ + v := m.Data[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + if len(m.StringData) > 0 { + for k := range m.StringData { + data[i] = 0x22 + i++ + v := m.StringData[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + return i, nil +} + +func (m *SecretKeySelector) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SecretKeySelector) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) + n148, err := m.LocalObjectReference.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n148 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + return i, nil +} + +func (m *SecretList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SecretList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n149, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n149 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *SecretVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SecretVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.SecretName))) + i += copy(data[i:], m.SecretName) + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.DefaultMode != nil { + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) + } + return i, nil +} + +func (m *SecurityContext) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SecurityContext) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Capabilities != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.Capabilities.Size())) + n150, err := m.Capabilities.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n150 + } + if m.Privileged != nil { + data[i] = 0x10 + i++ + if *m.Privileged { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if m.SELinuxOptions != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) + n151, err := m.SELinuxOptions.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n151 + } + if m.RunAsUser != nil { + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.RunAsUser)) + } + if m.RunAsNonRoot != nil { + data[i] = 0x28 + i++ + if *m.RunAsNonRoot { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + if m.ReadOnlyRootFilesystem != nil { + data[i] = 0x30 + i++ + if *m.ReadOnlyRootFilesystem { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + +func (m *SerializedReference) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SerializedReference) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.Reference.Size())) + n152, err := m.Reference.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n152 + return i, nil +} + +func (m *Service) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Service) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n153, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n153 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n154, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n154 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n155, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n155 + return i, nil +} + +func (m *ServiceAccount) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ServiceAccount) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n156, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n156 + if len(m.Secrets) > 0 { + for _, msg := range m.Secrets { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.ImagePullSecrets) > 0 { + for _, msg := range m.ImagePullSecrets { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ServiceAccountList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ServiceAccountList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n157, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n157 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ServiceList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ServiceList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n158, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n158 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *ServicePort) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ServicePort) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Protocol))) + i += copy(data[i:], m.Protocol) + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Port)) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.TargetPort.Size())) + n159, err := m.TargetPort.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n159 + data[i] = 0x28 + i++ + i = encodeVarintGenerated(data, i, uint64(m.NodePort)) + return i, nil +} + +func (m *ServiceProxyOptions) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ServiceProxyOptions) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + return i, nil +} + +func (m *ServiceSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ServiceSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Ports) > 0 { + for _, msg := range m.Ports { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if len(m.Selector) > 0 { + for k := range m.Selector { + data[i] = 0x12 + i++ + v := m.Selector[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ClusterIP))) + i += copy(data[i:], m.ClusterIP) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + if len(m.ExternalIPs) > 0 { + for _, s := range m.ExternalIPs { + data[i] = 0x2a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.DeprecatedPublicIPs) > 0 { + for _, s := range m.DeprecatedPublicIPs { + data[i] = 0x32 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.SessionAffinity))) + i += copy(data[i:], m.SessionAffinity) + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.LoadBalancerIP))) + i += copy(data[i:], m.LoadBalancerIP) + if len(m.LoadBalancerSourceRanges) > 0 { + for _, s := range m.LoadBalancerSourceRanges { + data[i] = 0x4a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + data[i] = 0x52 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ExternalName))) + i += copy(data[i:], m.ExternalName) + return i, nil +} + +func (m *ServiceStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ServiceStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.LoadBalancer.Size())) + n160, err := m.LoadBalancer.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n160 + return i, nil +} + +func (m *TCPSocketAction) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *TCPSocketAction) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.Port.Size())) + n161, err := m.Port.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n161 + return i, nil +} + +func (m *Taint) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Taint) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Value))) + i += copy(data[i:], m.Value) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Effect))) + i += copy(data[i:], m.Effect) + return i, nil +} + +func (m *Toleration) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Toleration) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Key))) + i += copy(data[i:], m.Key) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Operator))) + i += copy(data[i:], m.Operator) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Value))) + i += copy(data[i:], m.Value) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Effect))) + i += copy(data[i:], m.Effect) + return i, nil +} + +func (m *Volume) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Volume) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.VolumeSource.Size())) + n162, err := m.VolumeSource.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n162 + return i, nil +} + +func (m *VolumeMount) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *VolumeMount) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + data[i] = 0x10 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.MountPath))) + i += copy(data[i:], m.MountPath) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.SubPath))) + i += copy(data[i:], m.SubPath) + return i, nil +} + +func (m *VolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *VolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.HostPath != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.HostPath.Size())) + n163, err := m.HostPath.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n163 + } + if m.EmptyDir != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) + n164, err := m.EmptyDir.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n164 + } + if m.GCEPersistentDisk != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) + n165, err := m.GCEPersistentDisk.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n165 + } + if m.AWSElasticBlockStore != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) + n166, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n166 + } + if m.GitRepo != nil { + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) + n167, err := m.GitRepo.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n167 + } + if m.Secret != nil { + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) + n168, err := m.Secret.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n168 + } + if m.NFS != nil { + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) + n169, err := m.NFS.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n169 + } + if m.ISCSI != nil { + data[i] = 0x42 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) + n170, err := m.ISCSI.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n170 + } + if m.Glusterfs != nil { + data[i] = 0x4a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) + n171, err := m.Glusterfs.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n171 + } + if m.PersistentVolumeClaim != nil { + data[i] = 0x52 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) + n172, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n172 + } + if m.RBD != nil { + data[i] = 0x5a + i++ + i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) + n173, err := m.RBD.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n173 + } + if m.FlexVolume != nil { + data[i] = 0x62 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) + n174, err := m.FlexVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n174 + } + if m.Cinder != nil { + data[i] = 0x6a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) + n175, err := m.Cinder.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n175 + } + if m.CephFS != nil { + data[i] = 0x72 + i++ + i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) + n176, err := m.CephFS.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n176 + } + if m.Flocker != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) + n177, err := m.Flocker.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n177 + } + if m.DownwardAPI != nil { + data[i] = 0x82 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) + n178, err := m.DownwardAPI.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n178 + } + if m.FC != nil { + data[i] = 0x8a + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FC.Size())) + n179, err := m.FC.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n179 + } + if m.AzureFile != nil { + data[i] = 0x92 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.AzureFile.Size())) + n180, err := m.AzureFile.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n180 + } + if m.ConfigMap != nil { + data[i] = 0x9a + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) + n181, err := m.ConfigMap.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n181 + } + if m.VsphereVolume != nil { + data[i] = 0xa2 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.VsphereVolume.Size())) + n182, err := m.VsphereVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n182 + } + if m.Quobyte != nil { + data[i] = 0xaa + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) + n183, err := m.Quobyte.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n183 + } + if m.AzureDisk != nil { + data[i] = 0xb2 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.AzureDisk.Size())) + n184, err := m.AzureDisk.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n184 + } + return i, nil +} + +func (m *VsphereVirtualDiskVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *VsphereVirtualDiskVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.VolumePath))) + i += copy(data[i:], m.VolumePath) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + return i, nil +} + +func (m *WeightedPodAffinityTerm) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *WeightedPodAffinityTerm) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Weight)) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PodAffinityTerm.Size())) + n185, err := m.PodAffinityTerm.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n185 + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *AWSElasticBlockStoreVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.VolumeID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Partition)) + n += 2 + return n +} + +func (m *Affinity) Size() (n int) { + var l int + _ = l + if m.NodeAffinity != nil { + l = m.NodeAffinity.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.PodAffinity != nil { + l = m.PodAffinity.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.PodAntiAffinity != nil { + l = m.PodAntiAffinity.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *AttachedVolume) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DevicePath) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *AvoidPods) Size() (n int) { + var l int + _ = l + if len(m.PreferAvoidPods) > 0 { + for _, e := range m.PreferAvoidPods { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *AzureDiskVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.DiskName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DataDiskURI) + n += 1 + l + sovGenerated(uint64(l)) + if m.CachingMode != nil { + l = len(*m.CachingMode) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.FSType != nil { + l = len(*m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ReadOnly != nil { + n += 2 + } + return n +} + +func (m *AzureFileVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.SecretName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ShareName) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *Binding) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Target.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Capabilities) Size() (n int) { + var l int + _ = l + if len(m.Add) > 0 { + for _, s := range m.Add { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Drop) > 0 { + for _, s := range m.Drop { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CephFSVolumeSource) Size() (n int) { + var l int + _ = l + if len(m.Monitors) > 0 { + for _, s := range m.Monitors { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.SecretFile) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + return n +} + +func (m *CinderVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.VolumeID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *ComponentCondition) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Error) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ComponentStatus) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ComponentStatusList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ConfigMap) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Data) > 0 { + for k, v := range m.Data { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *ConfigMapKeySelector) Size() (n int) { + var l int + _ = l + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ConfigMapList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ConfigMapVolumeSource) Size() (n int) { + var l int + _ = l + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } + return n +} + +func (m *Container) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Image) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Args) > 0 { + for _, s := range m.Args { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.WorkingDir) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Ports) > 0 { + for _, e := range m.Ports { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Env) > 0 { + for _, e := range m.Env { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.Resources.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.VolumeMounts) > 0 { + for _, e := range m.VolumeMounts { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.LivenessProbe != nil { + l = m.LivenessProbe.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ReadinessProbe != nil { + l = m.ReadinessProbe.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Lifecycle != nil { + l = m.Lifecycle.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.TerminationMessagePath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ImagePullPolicy) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecurityContext != nil { + l = m.SecurityContext.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 3 + n += 3 + n += 3 + return n +} + +func (m *ContainerImage) Size() (n int) { + var l int + _ = l + if len(m.Names) > 0 { + for _, s := range m.Names { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + n += 1 + sovGenerated(uint64(m.SizeBytes)) + return n +} + +func (m *ContainerPort) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.HostPort)) + n += 1 + sovGenerated(uint64(m.ContainerPort)) + l = len(m.Protocol) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.HostIP) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ContainerState) Size() (n int) { + var l int + _ = l + if m.Waiting != nil { + l = m.Waiting.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Running != nil { + l = m.Running.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Terminated != nil { + l = m.Terminated.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ContainerStateRunning) Size() (n int) { + var l int + _ = l + l = m.StartedAt.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ContainerStateTerminated) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.ExitCode)) + n += 1 + sovGenerated(uint64(m.Signal)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = m.StartedAt.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.FinishedAt.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ContainerID) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ContainerStateWaiting) Size() (n int) { + var l int + _ = l + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ContainerStatus) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.State.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTerminationState.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 1 + sovGenerated(uint64(m.RestartCount)) + l = len(m.Image) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ImageID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ContainerID) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DaemonEndpoint) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Port)) + return n +} + +func (m *DeleteOptions) Size() (n int) { + var l int + _ = l + if m.GracePeriodSeconds != nil { + n += 1 + sovGenerated(uint64(*m.GracePeriodSeconds)) + } + if m.Preconditions != nil { + l = m.Preconditions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.OrphanDependents != nil { + n += 2 + } + return n +} + +func (m *DownwardAPIVolumeFile) Size() (n int) { + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + if m.FieldRef != nil { + l = m.FieldRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ResourceFieldRef != nil { + l = m.ResourceFieldRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Mode != nil { + n += 1 + sovGenerated(uint64(*m.Mode)) + } + return n +} + +func (m *DownwardAPIVolumeSource) Size() (n int) { + var l int + _ = l + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } + return n +} + +func (m *EmptyDirVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Medium) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *EndpointAddress) Size() (n int) { + var l int + _ = l + l = len(m.IP) + n += 1 + l + sovGenerated(uint64(l)) + if m.TargetRef != nil { + l = m.TargetRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Hostname) + n += 1 + l + sovGenerated(uint64(l)) + if m.NodeName != nil { + l = len(*m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *EndpointPort) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Port)) + l = len(m.Protocol) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *EndpointSubset) Size() (n int) { + var l int + _ = l + if len(m.Addresses) > 0 { + for _, e := range m.Addresses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.NotReadyAddresses) > 0 { + for _, e := range m.NotReadyAddresses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Ports) > 0 { + for _, e := range m.Ports { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *Endpoints) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Subsets) > 0 { + for _, e := range m.Subsets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *EndpointsList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *EnvVar) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + if m.ValueFrom != nil { + l = m.ValueFrom.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *EnvVarSource) Size() (n int) { + var l int + _ = l + if m.FieldRef != nil { + l = m.FieldRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ResourceFieldRef != nil { + l = m.ResourceFieldRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ConfigMapKeyRef != nil { + l = m.ConfigMapKeyRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.SecretKeyRef != nil { + l = m.SecretKeyRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *Event) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.InvolvedObject.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Source.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.FirstTimestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTimestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Count)) + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *EventList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *EventSource) Size() (n int) { + var l int + _ = l + l = len(m.Component) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ExecAction) Size() (n int) { + var l int + _ = l + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ExportOptions) Size() (n int) { + var l int + _ = l + n += 2 + n += 2 + return n +} + +func (m *FCVolumeSource) Size() (n int) { + var l int + _ = l + if len(m.TargetWWNs) > 0 { + for _, s := range m.TargetWWNs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Lun != nil { + n += 1 + sovGenerated(uint64(*m.Lun)) + } + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *FlexVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Driver) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + if len(m.Options) > 0 { + for k, v := range m.Options { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *FlockerVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.DatasetName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GCEPersistentDiskVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.PDName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Partition)) + n += 2 + return n +} + +func (m *GitRepoVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Repository) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Revision) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Directory) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *GlusterfsVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.EndpointsName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *HTTPGetAction) Size() (n int) { + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Port.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Host) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Scheme) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.HTTPHeaders) > 0 { + for _, e := range m.HTTPHeaders { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *HTTPHeader) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Handler) Size() (n int) { + var l int + _ = l + if m.Exec != nil { + l = m.Exec.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.HTTPGet != nil { + l = m.HTTPGet.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.TCPSocket != nil { + l = m.TCPSocket.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *HostPathVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ISCSIVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.TargetPortal) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.IQN) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Lun)) + l = len(m.ISCSIInterface) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *KeyToPath) Size() (n int) { + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + if m.Mode != nil { + n += 1 + sovGenerated(uint64(*m.Mode)) + } + return n +} + +func (m *Lifecycle) Size() (n int) { + var l int + _ = l + if m.PostStart != nil { + l = m.PostStart.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.PreStop != nil { + l = m.PreStop.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *LimitRange) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LimitRangeItem) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Max) > 0 { + for k, v := range m.Max { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Min) > 0 { + for k, v := range m.Min { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Default) > 0 { + for k, v := range m.Default { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.DefaultRequest) > 0 { + for k, v := range m.DefaultRequest { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.MaxLimitRequestRatio) > 0 { + for k, v := range m.MaxLimitRequestRatio { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *LimitRangeList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LimitRangeSpec) Size() (n int) { + var l int + _ = l + if len(m.Limits) > 0 { + for _, e := range m.Limits { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *List) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ListOptions) Size() (n int) { + var l int + _ = l + l = len(m.LabelSelector) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FieldSelector) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + if m.TimeoutSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TimeoutSeconds)) + } + return n +} + +func (m *LoadBalancerIngress) Size() (n int) { + var l int + _ = l + l = len(m.IP) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Hostname) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *LoadBalancerStatus) Size() (n int) { + var l int + _ = l + if len(m.Ingress) > 0 { + for _, e := range m.Ingress { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LocalObjectReference) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NFSVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Server) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *Namespace) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NamespaceList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NamespaceSpec) Size() (n int) { + var l int + _ = l + if len(m.Finalizers) > 0 { + for _, s := range m.Finalizers { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NamespaceStatus) Size() (n int) { + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Node) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NodeAddress) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Address) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NodeAffinity) Size() (n int) { + var l int + _ = l + if m.RequiredDuringSchedulingIgnoredDuringExecution != nil { + l = m.RequiredDuringSchedulingIgnoredDuringExecution.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NodeCondition) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastHeartbeatTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NodeDaemonEndpoints) Size() (n int) { + var l int + _ = l + l = m.KubeletEndpoint.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NodeList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NodeProxyOptions) Size() (n int) { + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NodeSelector) Size() (n int) { + var l int + _ = l + if len(m.NodeSelectorTerms) > 0 { + for _, e := range m.NodeSelectorTerms { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NodeSelectorRequirement) Size() (n int) { + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operator) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Values) > 0 { + for _, s := range m.Values { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NodeSelectorTerm) Size() (n int) { + var l int + _ = l + if len(m.MatchExpressions) > 0 { + for _, e := range m.MatchExpressions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NodeSpec) Size() (n int) { + var l int + _ = l + l = len(m.PodCIDR) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ExternalID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ProviderID) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *NodeStatus) Size() (n int) { + var l int + _ = l + if len(m.Capacity) > 0 { + for k, v := range m.Capacity { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Allocatable) > 0 { + for k, v := range m.Allocatable { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Addresses) > 0 { + for _, e := range m.Addresses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.DaemonEndpoints.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.NodeInfo.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Images) > 0 { + for _, e := range m.Images { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.VolumesInUse) > 0 { + for _, s := range m.VolumesInUse { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.VolumesAttached) > 0 { + for _, e := range m.VolumesAttached { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *NodeSystemInfo) Size() (n int) { + var l int + _ = l + l = len(m.MachineID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.SystemUUID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.BootID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.KernelVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.OSImage) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ContainerRuntimeVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.KubeletVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.KubeProxyVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.OperatingSystem) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Architecture) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ObjectFieldSelector) Size() (n int) { + var l int + _ = l + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FieldPath) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ObjectMeta) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.GenerateName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.SelfLink) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Generation)) + l = m.CreationTimestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.DeletionTimestamp != nil { + l = m.DeletionTimestamp.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.DeletionGracePeriodSeconds != nil { + n += 1 + sovGenerated(uint64(*m.DeletionGracePeriodSeconds)) + } + if len(m.Labels) > 0 { + for k, v := range m.Labels { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Annotations) > 0 { + for k, v := range m.Annotations { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.OwnerReferences) > 0 { + for _, e := range m.OwnerReferences { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Finalizers) > 0 { + for _, s := range m.Finalizers { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.ClusterName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ObjectReference) Size() (n int) { + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ResourceVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FieldPath) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *OwnerReference) Size() (n int) { + var l int + _ = l + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + if m.Controller != nil { + n += 2 + } + return n +} + +func (m *PersistentVolume) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PersistentVolumeClaim) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PersistentVolumeClaimList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PersistentVolumeClaimSpec) Size() (n int) { + var l int + _ = l + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = m.Resources.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.VolumeName) + n += 1 + l + sovGenerated(uint64(l)) + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PersistentVolumeClaimStatus) Size() (n int) { + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Capacity) > 0 { + for k, v := range m.Capacity { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *PersistentVolumeClaimVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.ClaimName) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + +func (m *PersistentVolumeList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PersistentVolumeSource) Size() (n int) { + var l int + _ = l + if m.GCEPersistentDisk != nil { + l = m.GCEPersistentDisk.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AWSElasticBlockStore != nil { + l = m.AWSElasticBlockStore.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.HostPath != nil { + l = m.HostPath.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Glusterfs != nil { + l = m.Glusterfs.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NFS != nil { + l = m.NFS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RBD != nil { + l = m.RBD.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ISCSI != nil { + l = m.ISCSI.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Cinder != nil { + l = m.Cinder.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CephFS != nil { + l = m.CephFS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.FC != nil { + l = m.FC.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Flocker != nil { + l = m.Flocker.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.FlexVolume != nil { + l = m.FlexVolume.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AzureFile != nil { + l = m.AzureFile.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.VsphereVolume != nil { + l = m.VsphereVolume.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Quobyte != nil { + l = m.Quobyte.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AzureDisk != nil { + l = m.AzureDisk.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PersistentVolumeSpec) Size() (n int) { + var l int + _ = l + if len(m.Capacity) > 0 { + for k, v := range m.Capacity { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = m.PersistentVolumeSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.AccessModes) > 0 { + for _, s := range m.AccessModes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.ClaimRef != nil { + l = m.ClaimRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.PersistentVolumeReclaimPolicy) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PersistentVolumeStatus) Size() (n int) { + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Pod) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodAffinity) Size() (n int) { + var l int + _ = l + if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.RequiredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodAffinityTerm) Size() (n int) { + var l int + _ = l + if m.LabelSelector != nil { + l = m.LabelSelector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.Namespaces) > 0 { + for _, s := range m.Namespaces { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.TopologyKey) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodAntiAffinity) Size() (n int) { + var l int + _ = l + if len(m.RequiredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.RequiredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + for _, e := range m.PreferredDuringSchedulingIgnoredDuringExecution { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodAttachOptions) Size() (n int) { + var l int + _ = l + n += 2 + n += 2 + n += 2 + n += 2 + l = len(m.Container) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodCondition) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Status) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastProbeTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastTransitionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodExecOptions) Size() (n int) { + var l int + _ = l + n += 2 + n += 2 + n += 2 + n += 2 + l = len(m.Container) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Command) > 0 { + for _, s := range m.Command { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodLogOptions) Size() (n int) { + var l int + _ = l + l = len(m.Container) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 2 + if m.SinceSeconds != nil { + n += 1 + sovGenerated(uint64(*m.SinceSeconds)) + } + if m.SinceTime != nil { + l = m.SinceTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + if m.TailLines != nil { + n += 1 + sovGenerated(uint64(*m.TailLines)) + } + if m.LimitBytes != nil { + n += 1 + sovGenerated(uint64(*m.LimitBytes)) + } + return n +} + +func (m *PodProxyOptions) Size() (n int) { + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodSecurityContext) Size() (n int) { + var l int + _ = l + if m.SELinuxOptions != nil { + l = m.SELinuxOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RunAsUser != nil { + n += 1 + sovGenerated(uint64(*m.RunAsUser)) + } + if m.RunAsNonRoot != nil { + n += 2 + } + if len(m.SupplementalGroups) > 0 { + for _, e := range m.SupplementalGroups { + n += 1 + sovGenerated(uint64(e)) + } + } + if m.FSGroup != nil { + n += 1 + sovGenerated(uint64(*m.FSGroup)) + } + return n +} + +func (m *PodSignature) Size() (n int) { + var l int + _ = l + if m.PodController != nil { + l = m.PodController.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PodSpec) Size() (n int) { + var l int + _ = l + if len(m.Volumes) > 0 { + for _, e := range m.Volumes { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Containers) > 0 { + for _, e := range m.Containers { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RestartPolicy) + n += 1 + l + sovGenerated(uint64(l)) + if m.TerminationGracePeriodSeconds != nil { + n += 1 + sovGenerated(uint64(*m.TerminationGracePeriodSeconds)) + } + if m.ActiveDeadlineSeconds != nil { + n += 1 + sovGenerated(uint64(*m.ActiveDeadlineSeconds)) + } + l = len(m.DNSPolicy) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.NodeSelector) > 0 { + for k, v := range m.NodeSelector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = len(m.ServiceAccountName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DeprecatedServiceAccount) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + n += 2 + n += 2 + if m.SecurityContext != nil { + l = m.SecurityContext.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.ImagePullSecrets) > 0 { + for _, e := range m.ImagePullSecrets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Hostname) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.Subdomain) + n += 2 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodStatus) Size() (n int) { + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.HostIP) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.PodIP) + n += 1 + l + sovGenerated(uint64(l)) + if m.StartTime != nil { + l = m.StartTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if len(m.ContainerStatuses) > 0 { + for _, e := range m.ContainerStatuses { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodStatusResult) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodTemplate) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PodTemplateList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *PodTemplateSpec) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Preconditions) Size() (n int) { + var l int + _ = l + if m.UID != nil { + l = len(*m.UID) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *PreferAvoidPodsEntry) Size() (n int) { + var l int + _ = l + l = m.PodSignature.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.EvictionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *PreferredSchedulingTerm) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Weight)) + l = m.Preference.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Probe) Size() (n int) { + var l int + _ = l + l = m.Handler.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.InitialDelaySeconds)) + n += 1 + sovGenerated(uint64(m.TimeoutSeconds)) + n += 1 + sovGenerated(uint64(m.PeriodSeconds)) + n += 1 + sovGenerated(uint64(m.SuccessThreshold)) + n += 1 + sovGenerated(uint64(m.FailureThreshold)) + return n +} + +func (m *QuobyteVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Registry) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Volume) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *RBDVolumeSource) Size() (n int) { + var l int + _ = l + if len(m.CephMonitors) > 0 { + for _, s := range m.CephMonitors { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RBDImage) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RBDPool) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RadosUser) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Keyring) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + return n +} + +func (m *RangeAllocation) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Range) + n += 1 + l + sovGenerated(uint64(l)) + if m.Data != nil { + l = len(m.Data) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ReplicationController) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ReplicationControllerList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ReplicationControllerSpec) Size() (n int) { + var l int + _ = l + if m.Replicas != nil { + n += 1 + sovGenerated(uint64(*m.Replicas)) + } + if len(m.Selector) > 0 { + for k, v := range m.Selector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if m.Template != nil { + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ReplicationControllerStatus) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Replicas)) + n += 1 + sovGenerated(uint64(m.FullyLabeledReplicas)) + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + n += 1 + sovGenerated(uint64(m.ReadyReplicas)) + return n +} + +func (m *ResourceFieldSelector) Size() (n int) { + var l int + _ = l + l = len(m.ContainerName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Resource) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Divisor.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ResourceQuota) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ResourceQuotaList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ResourceQuotaSpec) Size() (n int) { + var l int + _ = l + if len(m.Hard) > 0 { + for k, v := range m.Hard { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Scopes) > 0 { + for _, s := range m.Scopes { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ResourceQuotaStatus) Size() (n int) { + var l int + _ = l + if len(m.Hard) > 0 { + for k, v := range m.Hard { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Used) > 0 { + for k, v := range m.Used { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *ResourceRequirements) Size() (n int) { + var l int + _ = l + if len(m.Limits) > 0 { + for k, v := range m.Limits { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + if len(m.Requests) > 0 { + for k, v := range m.Requests { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *SELinuxOptions) Size() (n int) { + var l int + _ = l + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Role) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Level) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Secret) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Data) > 0 { + for k, v := range m.Data { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.StringData) > 0 { + for k, v := range m.StringData { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *SecretKeySelector) Size() (n int) { + var l int + _ = l + l = m.LocalObjectReference.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SecretList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *SecretVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.SecretName) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } + return n +} + +func (m *SecurityContext) Size() (n int) { + var l int + _ = l + if m.Capabilities != nil { + l = m.Capabilities.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Privileged != nil { + n += 2 + } + if m.SELinuxOptions != nil { + l = m.SELinuxOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RunAsUser != nil { + n += 1 + sovGenerated(uint64(*m.RunAsUser)) + } + if m.RunAsNonRoot != nil { + n += 2 + } + if m.ReadOnlyRootFilesystem != nil { + n += 2 + } + return n +} + +func (m *SerializedReference) Size() (n int) { + var l int + _ = l + l = m.Reference.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Service) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ServiceAccount) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Secrets) > 0 { + for _, e := range m.Secrets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.ImagePullSecrets) > 0 { + for _, e := range m.ImagePullSecrets { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ServiceAccountList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ServiceList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *ServicePort) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Protocol) + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.Port)) + l = m.TargetPort.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.NodePort)) + return n +} + +func (m *ServiceProxyOptions) Size() (n int) { + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ServiceSpec) Size() (n int) { + var l int + _ = l + if len(m.Ports) > 0 { + for _, e := range m.Ports { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Selector) > 0 { + for k, v := range m.Selector { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + l = len(m.ClusterIP) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.ExternalIPs) > 0 { + for _, s := range m.ExternalIPs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.DeprecatedPublicIPs) > 0 { + for _, s := range m.DeprecatedPublicIPs { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.SessionAffinity) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.LoadBalancerIP) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.LoadBalancerSourceRanges) > 0 { + for _, s := range m.LoadBalancerSourceRanges { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.ExternalName) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ServiceStatus) Size() (n int) { + var l int + _ = l + l = m.LoadBalancer.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TCPSocketAction) Size() (n int) { + var l int + _ = l + l = m.Port.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Taint) Size() (n int) { + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Effect) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Toleration) Size() (n int) { + var l int + _ = l + l = len(m.Key) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Operator) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Value) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Effect) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Volume) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + l = m.VolumeSource.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeMount) Size() (n int) { + var l int + _ = l + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.MountPath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.SubPath) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *VolumeSource) Size() (n int) { + var l int + _ = l + if m.HostPath != nil { + l = m.HostPath.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.EmptyDir != nil { + l = m.EmptyDir.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GCEPersistentDisk != nil { + l = m.GCEPersistentDisk.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AWSElasticBlockStore != nil { + l = m.AWSElasticBlockStore.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.GitRepo != nil { + l = m.GitRepo.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Secret != nil { + l = m.Secret.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NFS != nil { + l = m.NFS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ISCSI != nil { + l = m.ISCSI.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Glusterfs != nil { + l = m.Glusterfs.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.PersistentVolumeClaim != nil { + l = m.PersistentVolumeClaim.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.RBD != nil { + l = m.RBD.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.FlexVolume != nil { + l = m.FlexVolume.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Cinder != nil { + l = m.Cinder.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.CephFS != nil { + l = m.CephFS.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Flocker != nil { + l = m.Flocker.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.DownwardAPI != nil { + l = m.DownwardAPI.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.FC != nil { + l = m.FC.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.AzureFile != nil { + l = m.AzureFile.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.ConfigMap != nil { + l = m.ConfigMap.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.VsphereVolume != nil { + l = m.VsphereVolume.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.Quobyte != nil { + l = m.Quobyte.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.AzureDisk != nil { + l = m.AzureDisk.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *VsphereVirtualDiskVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.VolumePath) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *WeightedPodAffinityTerm) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Weight)) + l = m.PodAffinityTerm.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *AWSElasticBlockStoreVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AWSElasticBlockStoreVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `Partition:` + fmt.Sprintf("%v", this.Partition) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Affinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Affinity{`, + `NodeAffinity:` + strings.Replace(fmt.Sprintf("%v", this.NodeAffinity), "NodeAffinity", "NodeAffinity", 1) + `,`, + `PodAffinity:` + strings.Replace(fmt.Sprintf("%v", this.PodAffinity), "PodAffinity", "PodAffinity", 1) + `,`, + `PodAntiAffinity:` + strings.Replace(fmt.Sprintf("%v", this.PodAntiAffinity), "PodAntiAffinity", "PodAntiAffinity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *AttachedVolume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AttachedVolume{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `DevicePath:` + fmt.Sprintf("%v", this.DevicePath) + `,`, + `}`, + }, "") + return s +} +func (this *AvoidPods) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AvoidPods{`, + `PreferAvoidPods:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferAvoidPods), "PreferAvoidPodsEntry", "PreferAvoidPodsEntry", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *AzureDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AzureDiskVolumeSource{`, + `DiskName:` + fmt.Sprintf("%v", this.DiskName) + `,`, + `DataDiskURI:` + fmt.Sprintf("%v", this.DataDiskURI) + `,`, + `CachingMode:` + valueToStringGenerated(this.CachingMode) + `,`, + `FSType:` + valueToStringGenerated(this.FSType) + `,`, + `ReadOnly:` + valueToStringGenerated(this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *AzureFileVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AzureFileVolumeSource{`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `ShareName:` + fmt.Sprintf("%v", this.ShareName) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Binding) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Binding{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Capabilities) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Capabilities{`, + `Add:` + fmt.Sprintf("%v", this.Add) + `,`, + `Drop:` + fmt.Sprintf("%v", this.Drop) + `,`, + `}`, + }, "") + return s +} +func (this *CephFSVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CephFSVolumeSource{`, + `Monitors:` + fmt.Sprintf("%v", this.Monitors) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `SecretFile:` + fmt.Sprintf("%v", this.SecretFile) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *CinderVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CinderVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *ComponentCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ComponentCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Error:` + fmt.Sprintf("%v", this.Error) + `,`, + `}`, + }, "") + return s +} +func (this *ComponentStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ComponentStatus{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "ComponentCondition", "ComponentCondition", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ComponentStatusList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ComponentStatusList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ComponentStatus", "ComponentStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMap) String() string { + if this == nil { + return "nil" + } + keysForData := make([]string, 0, len(this.Data)) + for k := range this.Data { + keysForData = append(keysForData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForData) + mapStringForData := "map[string]string{" + for _, k := range keysForData { + mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) + } + mapStringForData += "}" + s := strings.Join([]string{`&ConfigMap{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + mapStringForData + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapKeySelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapKeySelector{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ConfigMap", "ConfigMap", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapVolumeSource{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *Container) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Container{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `Args:` + fmt.Sprintf("%v", this.Args) + `,`, + `WorkingDir:` + fmt.Sprintf("%v", this.WorkingDir) + `,`, + `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "ContainerPort", "ContainerPort", 1), `&`, ``, 1) + `,`, + `Env:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Env), "EnvVar", "EnvVar", 1), `&`, ``, 1) + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, + `VolumeMounts:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeMounts), "VolumeMount", "VolumeMount", 1), `&`, ``, 1) + `,`, + `LivenessProbe:` + strings.Replace(fmt.Sprintf("%v", this.LivenessProbe), "Probe", "Probe", 1) + `,`, + `ReadinessProbe:` + strings.Replace(fmt.Sprintf("%v", this.ReadinessProbe), "Probe", "Probe", 1) + `,`, + `Lifecycle:` + strings.Replace(fmt.Sprintf("%v", this.Lifecycle), "Lifecycle", "Lifecycle", 1) + `,`, + `TerminationMessagePath:` + fmt.Sprintf("%v", this.TerminationMessagePath) + `,`, + `ImagePullPolicy:` + fmt.Sprintf("%v", this.ImagePullPolicy) + `,`, + `SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "SecurityContext", "SecurityContext", 1) + `,`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `StdinOnce:` + fmt.Sprintf("%v", this.StdinOnce) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerImage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerImage{`, + `Names:` + fmt.Sprintf("%v", this.Names) + `,`, + `SizeBytes:` + fmt.Sprintf("%v", this.SizeBytes) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerPort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerPort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `HostPort:` + fmt.Sprintf("%v", this.HostPort) + `,`, + `ContainerPort:` + fmt.Sprintf("%v", this.ContainerPort) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerState) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerState{`, + `Waiting:` + strings.Replace(fmt.Sprintf("%v", this.Waiting), "ContainerStateWaiting", "ContainerStateWaiting", 1) + `,`, + `Running:` + strings.Replace(fmt.Sprintf("%v", this.Running), "ContainerStateRunning", "ContainerStateRunning", 1) + `,`, + `Terminated:` + strings.Replace(fmt.Sprintf("%v", this.Terminated), "ContainerStateTerminated", "ContainerStateTerminated", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateRunning) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateRunning{`, + `StartedAt:` + strings.Replace(strings.Replace(this.StartedAt.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateTerminated) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateTerminated{`, + `ExitCode:` + fmt.Sprintf("%v", this.ExitCode) + `,`, + `Signal:` + fmt.Sprintf("%v", this.Signal) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `StartedAt:` + strings.Replace(strings.Replace(this.StartedAt.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `FinishedAt:` + strings.Replace(strings.Replace(this.FinishedAt.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateWaiting) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateWaiting{`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStatus{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `State:` + strings.Replace(strings.Replace(this.State.String(), "ContainerState", "ContainerState", 1), `&`, ``, 1) + `,`, + `LastTerminationState:` + strings.Replace(strings.Replace(this.LastTerminationState.String(), "ContainerState", "ContainerState", 1), `&`, ``, 1) + `,`, + `Ready:` + fmt.Sprintf("%v", this.Ready) + `,`, + `RestartCount:` + fmt.Sprintf("%v", this.RestartCount) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `ImageID:` + fmt.Sprintf("%v", this.ImageID) + `,`, + `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonEndpoint) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonEndpoint{`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `}`, + }, "") + return s +} +func (this *DeleteOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeleteOptions{`, + `GracePeriodSeconds:` + valueToStringGenerated(this.GracePeriodSeconds) + `,`, + `Preconditions:` + strings.Replace(fmt.Sprintf("%v", this.Preconditions), "Preconditions", "Preconditions", 1) + `,`, + `OrphanDependents:` + valueToStringGenerated(this.OrphanDependents) + `,`, + `}`, + }, "") + return s +} +func (this *DownwardAPIVolumeFile) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DownwardAPIVolumeFile{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `FieldRef:` + strings.Replace(fmt.Sprintf("%v", this.FieldRef), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, + `ResourceFieldRef:` + strings.Replace(fmt.Sprintf("%v", this.ResourceFieldRef), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, + `Mode:` + valueToStringGenerated(this.Mode) + `,`, + `}`, + }, "") + return s +} +func (this *DownwardAPIVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DownwardAPIVolumeSource{`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DownwardAPIVolumeFile", "DownwardAPIVolumeFile", 1), `&`, ``, 1) + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *EmptyDirVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EmptyDirVolumeSource{`, + `Medium:` + fmt.Sprintf("%v", this.Medium) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointAddress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointAddress{`, + `IP:` + fmt.Sprintf("%v", this.IP) + `,`, + `TargetRef:` + strings.Replace(fmt.Sprintf("%v", this.TargetRef), "ObjectReference", "ObjectReference", 1) + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `NodeName:` + valueToStringGenerated(this.NodeName) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointPort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointPort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointSubset) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointSubset{`, + `Addresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Addresses), "EndpointAddress", "EndpointAddress", 1), `&`, ``, 1) + `,`, + `NotReadyAddresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.NotReadyAddresses), "EndpointAddress", "EndpointAddress", 1), `&`, ``, 1) + `,`, + `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "EndpointPort", "EndpointPort", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Endpoints) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Endpoints{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subsets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subsets), "EndpointSubset", "EndpointSubset", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointsList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointsList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Endpoints", "Endpoints", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *EnvVar) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EnvVar{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `ValueFrom:` + strings.Replace(fmt.Sprintf("%v", this.ValueFrom), "EnvVarSource", "EnvVarSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *EnvVarSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EnvVarSource{`, + `FieldRef:` + strings.Replace(fmt.Sprintf("%v", this.FieldRef), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, + `ResourceFieldRef:` + strings.Replace(fmt.Sprintf("%v", this.ResourceFieldRef), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, + `ConfigMapKeyRef:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMapKeyRef), "ConfigMapKeySelector", "ConfigMapKeySelector", 1) + `,`, + `SecretKeyRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretKeyRef), "SecretKeySelector", "SecretKeySelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Event) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Event{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `InvolvedObject:` + strings.Replace(strings.Replace(this.InvolvedObject.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Source:` + strings.Replace(strings.Replace(this.Source.String(), "EventSource", "EventSource", 1), `&`, ``, 1) + `,`, + `FirstTimestamp:` + strings.Replace(strings.Replace(this.FirstTimestamp.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTimestamp:` + strings.Replace(strings.Replace(this.LastTimestamp.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Count:` + fmt.Sprintf("%v", this.Count) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `}`, + }, "") + return s +} +func (this *EventList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EventList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Event", "Event", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *EventSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EventSource{`, + `Component:` + fmt.Sprintf("%v", this.Component) + `,`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `}`, + }, "") + return s +} +func (this *ExecAction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExecAction{`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `}`, + }, "") + return s +} +func (this *ExportOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExportOptions{`, + `Export:` + fmt.Sprintf("%v", this.Export) + `,`, + `Exact:` + fmt.Sprintf("%v", this.Exact) + `,`, + `}`, + }, "") + return s +} +func (this *FCVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FCVolumeSource{`, + `TargetWWNs:` + fmt.Sprintf("%v", this.TargetWWNs) + `,`, + `Lun:` + valueToStringGenerated(this.Lun) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *FlexVolumeSource) String() string { + if this == nil { + return "nil" + } + keysForOptions := make([]string, 0, len(this.Options)) + for k := range this.Options { + keysForOptions = append(keysForOptions, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) + mapStringForOptions := "map[string]string{" + for _, k := range keysForOptions { + mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) + } + mapStringForOptions += "}" + s := strings.Join([]string{`&FlexVolumeSource{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `Options:` + mapStringForOptions + `,`, + `}`, + }, "") + return s +} +func (this *FlockerVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FlockerVolumeSource{`, + `DatasetName:` + fmt.Sprintf("%v", this.DatasetName) + `,`, + `}`, + }, "") + return s +} +func (this *GCEPersistentDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GCEPersistentDiskVolumeSource{`, + `PDName:` + fmt.Sprintf("%v", this.PDName) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `Partition:` + fmt.Sprintf("%v", this.Partition) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *GitRepoVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GitRepoVolumeSource{`, + `Repository:` + fmt.Sprintf("%v", this.Repository) + `,`, + `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, + `Directory:` + fmt.Sprintf("%v", this.Directory) + `,`, + `}`, + }, "") + return s +} +func (this *GlusterfsVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GlusterfsVolumeSource{`, + `EndpointsName:` + fmt.Sprintf("%v", this.EndpointsName) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPGetAction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPGetAction{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Port:` + strings.Replace(strings.Replace(this.Port.String(), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `Scheme:` + fmt.Sprintf("%v", this.Scheme) + `,`, + `HTTPHeaders:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.HTTPHeaders), "HTTPHeader", "HTTPHeader", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPHeader) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPHeader{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `}`, + }, "") + return s +} +func (this *Handler) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Handler{`, + `Exec:` + strings.Replace(fmt.Sprintf("%v", this.Exec), "ExecAction", "ExecAction", 1) + `,`, + `HTTPGet:` + strings.Replace(fmt.Sprintf("%v", this.HTTPGet), "HTTPGetAction", "HTTPGetAction", 1) + `,`, + `TCPSocket:` + strings.Replace(fmt.Sprintf("%v", this.TCPSocket), "TCPSocketAction", "TCPSocketAction", 1) + `,`, + `}`, + }, "") + return s +} +func (this *HostPathVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HostPathVolumeSource{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *ISCSIVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ISCSIVolumeSource{`, + `TargetPortal:` + fmt.Sprintf("%v", this.TargetPortal) + `,`, + `IQN:` + fmt.Sprintf("%v", this.IQN) + `,`, + `Lun:` + fmt.Sprintf("%v", this.Lun) + `,`, + `ISCSIInterface:` + fmt.Sprintf("%v", this.ISCSIInterface) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *KeyToPath) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KeyToPath{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Mode:` + valueToStringGenerated(this.Mode) + `,`, + `}`, + }, "") + return s +} +func (this *Lifecycle) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Lifecycle{`, + `PostStart:` + strings.Replace(fmt.Sprintf("%v", this.PostStart), "Handler", "Handler", 1) + `,`, + `PreStop:` + strings.Replace(fmt.Sprintf("%v", this.PreStop), "Handler", "Handler", 1) + `,`, + `}`, + }, "") + return s +} +func (this *LimitRange) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LimitRange{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "LimitRangeSpec", "LimitRangeSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeItem) String() string { + if this == nil { + return "nil" + } + keysForMax := make([]string, 0, len(this.Max)) + for k := range this.Max { + keysForMax = append(keysForMax, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMax) + mapStringForMax := "ResourceList{" + for _, k := range keysForMax { + mapStringForMax += fmt.Sprintf("%v: %v,", k, this.Max[ResourceName(k)]) + } + mapStringForMax += "}" + keysForMin := make([]string, 0, len(this.Min)) + for k := range this.Min { + keysForMin = append(keysForMin, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMin) + mapStringForMin := "ResourceList{" + for _, k := range keysForMin { + mapStringForMin += fmt.Sprintf("%v: %v,", k, this.Min[ResourceName(k)]) + } + mapStringForMin += "}" + keysForDefault := make([]string, 0, len(this.Default)) + for k := range this.Default { + keysForDefault = append(keysForDefault, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDefault) + mapStringForDefault := "ResourceList{" + for _, k := range keysForDefault { + mapStringForDefault += fmt.Sprintf("%v: %v,", k, this.Default[ResourceName(k)]) + } + mapStringForDefault += "}" + keysForDefaultRequest := make([]string, 0, len(this.DefaultRequest)) + for k := range this.DefaultRequest { + keysForDefaultRequest = append(keysForDefaultRequest, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDefaultRequest) + mapStringForDefaultRequest := "ResourceList{" + for _, k := range keysForDefaultRequest { + mapStringForDefaultRequest += fmt.Sprintf("%v: %v,", k, this.DefaultRequest[ResourceName(k)]) + } + mapStringForDefaultRequest += "}" + keysForMaxLimitRequestRatio := make([]string, 0, len(this.MaxLimitRequestRatio)) + for k := range this.MaxLimitRequestRatio { + keysForMaxLimitRequestRatio = append(keysForMaxLimitRequestRatio, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMaxLimitRequestRatio) + mapStringForMaxLimitRequestRatio := "ResourceList{" + for _, k := range keysForMaxLimitRequestRatio { + mapStringForMaxLimitRequestRatio += fmt.Sprintf("%v: %v,", k, this.MaxLimitRequestRatio[ResourceName(k)]) + } + mapStringForMaxLimitRequestRatio += "}" + s := strings.Join([]string{`&LimitRangeItem{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Max:` + mapStringForMax + `,`, + `Min:` + mapStringForMin + `,`, + `Default:` + mapStringForDefault + `,`, + `DefaultRequest:` + mapStringForDefaultRequest + `,`, + `MaxLimitRequestRatio:` + mapStringForMaxLimitRequestRatio + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LimitRangeList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "LimitRange", "LimitRange", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LimitRangeSpec{`, + `Limits:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Limits), "LimitRangeItem", "LimitRangeItem", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *List) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&List{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RawExtension", "k8s_io_kubernetes_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ListOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ListOptions{`, + `LabelSelector:` + fmt.Sprintf("%v", this.LabelSelector) + `,`, + `FieldSelector:` + fmt.Sprintf("%v", this.FieldSelector) + `,`, + `Watch:` + fmt.Sprintf("%v", this.Watch) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *LoadBalancerIngress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LoadBalancerIngress{`, + `IP:` + fmt.Sprintf("%v", this.IP) + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `}`, + }, "") + return s +} +func (this *LoadBalancerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LoadBalancerStatus{`, + `Ingress:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ingress), "LoadBalancerIngress", "LoadBalancerIngress", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LocalObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LocalObjectReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *NFSVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NFSVolumeSource{`, + `Server:` + fmt.Sprintf("%v", this.Server) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Namespace) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Namespace{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NamespaceSpec", "NamespaceSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NamespaceStatus", "NamespaceStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespaceList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Namespace", "Namespace", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespaceSpec{`, + `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespaceStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `}`, + }, "") + return s +} +func (this *Node) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Node{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NodeSpec", "NodeSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NodeStatus", "NodeStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeAddress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeAddress{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Address:` + fmt.Sprintf("%v", this.Address) + `,`, + `}`, + }, "") + return s +} +func (this *NodeAffinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "NodeSelector", "NodeSelector", 1) + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "PreferredSchedulingTerm", "PreferredSchedulingTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastHeartbeatTime:` + strings.Replace(strings.Replace(this.LastHeartbeatTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *NodeDaemonEndpoints) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeDaemonEndpoints{`, + `KubeletEndpoint:` + strings.Replace(strings.Replace(this.KubeletEndpoint.String(), "DaemonEndpoint", "DaemonEndpoint", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Node", "Node", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSelector{`, + `NodeSelectorTerms:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.NodeSelectorTerms), "NodeSelectorTerm", "NodeSelectorTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSelectorRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelectorTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSelectorTerm{`, + `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "NodeSelectorRequirement", "NodeSelectorRequirement", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSpec{`, + `PodCIDR:` + fmt.Sprintf("%v", this.PodCIDR) + `,`, + `ExternalID:` + fmt.Sprintf("%v", this.ExternalID) + `,`, + `ProviderID:` + fmt.Sprintf("%v", this.ProviderID) + `,`, + `Unschedulable:` + fmt.Sprintf("%v", this.Unschedulable) + `,`, + `}`, + }, "") + return s +} +func (this *NodeStatus) String() string { + if this == nil { + return "nil" + } + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + keysForAllocatable := make([]string, 0, len(this.Allocatable)) + for k := range this.Allocatable { + keysForAllocatable = append(keysForAllocatable, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) + mapStringForAllocatable := "ResourceList{" + for _, k := range keysForAllocatable { + mapStringForAllocatable += fmt.Sprintf("%v: %v,", k, this.Allocatable[ResourceName(k)]) + } + mapStringForAllocatable += "}" + s := strings.Join([]string{`&NodeStatus{`, + `Capacity:` + mapStringForCapacity + `,`, + `Allocatable:` + mapStringForAllocatable + `,`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "NodeCondition", "NodeCondition", 1), `&`, ``, 1) + `,`, + `Addresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Addresses), "NodeAddress", "NodeAddress", 1), `&`, ``, 1) + `,`, + `DaemonEndpoints:` + strings.Replace(strings.Replace(this.DaemonEndpoints.String(), "NodeDaemonEndpoints", "NodeDaemonEndpoints", 1), `&`, ``, 1) + `,`, + `NodeInfo:` + strings.Replace(strings.Replace(this.NodeInfo.String(), "NodeSystemInfo", "NodeSystemInfo", 1), `&`, ``, 1) + `,`, + `Images:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Images), "ContainerImage", "ContainerImage", 1), `&`, ``, 1) + `,`, + `VolumesInUse:` + fmt.Sprintf("%v", this.VolumesInUse) + `,`, + `VolumesAttached:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumesAttached), "AttachedVolume", "AttachedVolume", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSystemInfo) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSystemInfo{`, + `MachineID:` + fmt.Sprintf("%v", this.MachineID) + `,`, + `SystemUUID:` + fmt.Sprintf("%v", this.SystemUUID) + `,`, + `BootID:` + fmt.Sprintf("%v", this.BootID) + `,`, + `KernelVersion:` + fmt.Sprintf("%v", this.KernelVersion) + `,`, + `OSImage:` + fmt.Sprintf("%v", this.OSImage) + `,`, + `ContainerRuntimeVersion:` + fmt.Sprintf("%v", this.ContainerRuntimeVersion) + `,`, + `KubeletVersion:` + fmt.Sprintf("%v", this.KubeletVersion) + `,`, + `KubeProxyVersion:` + fmt.Sprintf("%v", this.KubeProxyVersion) + `,`, + `OperatingSystem:` + fmt.Sprintf("%v", this.OperatingSystem) + `,`, + `Architecture:` + fmt.Sprintf("%v", this.Architecture) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectFieldSelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectFieldSelector{`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `FieldPath:` + fmt.Sprintf("%v", this.FieldPath) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectMeta) String() string { + if this == nil { + return "nil" + } + keysForLabels := make([]string, 0, len(this.Labels)) + for k := range this.Labels { + keysForLabels = append(keysForLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + mapStringForLabels := "map[string]string{" + for _, k := range keysForLabels { + mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) + } + mapStringForLabels += "}" + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" + s := strings.Join([]string{`&ObjectMeta{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `GenerateName:` + fmt.Sprintf("%v", this.GenerateName) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `SelfLink:` + fmt.Sprintf("%v", this.SelfLink) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, + `CreationTimestamp:` + strings.Replace(strings.Replace(this.CreationTimestamp.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `DeletionTimestamp:` + strings.Replace(fmt.Sprintf("%v", this.DeletionTimestamp), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `DeletionGracePeriodSeconds:` + valueToStringGenerated(this.DeletionGracePeriodSeconds) + `,`, + `Labels:` + mapStringForLabels + `,`, + `Annotations:` + mapStringForAnnotations + `,`, + `OwnerReferences:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.OwnerReferences), "OwnerReference", "OwnerReference", 1), `&`, ``, 1) + `,`, + `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, + `ClusterName:` + fmt.Sprintf("%v", this.ClusterName) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `FieldPath:` + fmt.Sprintf("%v", this.FieldPath) + `,`, + `}`, + }, "") + return s +} +func (this *OwnerReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&OwnerReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Controller:` + valueToStringGenerated(this.Controller) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolume{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PersistentVolumeSpec", "PersistentVolumeSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PersistentVolumeStatus", "PersistentVolumeStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaim) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaim{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PersistentVolumeClaimSpec", "PersistentVolumeClaimSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PersistentVolumeClaimStatus", "PersistentVolumeClaimStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PersistentVolumeClaim", "PersistentVolumeClaim", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimSpec{`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, + `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_kubernetes_pkg_api_unversioned.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimStatus) String() string { + if this == nil { + return "nil" + } + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + s := strings.Join([]string{`&PersistentVolumeClaimStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `Capacity:` + mapStringForCapacity + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimVolumeSource{`, + `ClaimName:` + fmt.Sprintf("%v", this.ClaimName) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PersistentVolume", "PersistentVolume", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeSource{`, + `GCEPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.GCEPersistentDisk), "GCEPersistentDiskVolumeSource", "GCEPersistentDiskVolumeSource", 1) + `,`, + `AWSElasticBlockStore:` + strings.Replace(fmt.Sprintf("%v", this.AWSElasticBlockStore), "AWSElasticBlockStoreVolumeSource", "AWSElasticBlockStoreVolumeSource", 1) + `,`, + `HostPath:` + strings.Replace(fmt.Sprintf("%v", this.HostPath), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, + `Glusterfs:` + strings.Replace(fmt.Sprintf("%v", this.Glusterfs), "GlusterfsVolumeSource", "GlusterfsVolumeSource", 1) + `,`, + `NFS:` + strings.Replace(fmt.Sprintf("%v", this.NFS), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, + `RBD:` + strings.Replace(fmt.Sprintf("%v", this.RBD), "RBDVolumeSource", "RBDVolumeSource", 1) + `,`, + `ISCSI:` + strings.Replace(fmt.Sprintf("%v", this.ISCSI), "ISCSIVolumeSource", "ISCSIVolumeSource", 1) + `,`, + `Cinder:` + strings.Replace(fmt.Sprintf("%v", this.Cinder), "CinderVolumeSource", "CinderVolumeSource", 1) + `,`, + `CephFS:` + strings.Replace(fmt.Sprintf("%v", this.CephFS), "CephFSVolumeSource", "CephFSVolumeSource", 1) + `,`, + `FC:` + strings.Replace(fmt.Sprintf("%v", this.FC), "FCVolumeSource", "FCVolumeSource", 1) + `,`, + `Flocker:` + strings.Replace(fmt.Sprintf("%v", this.Flocker), "FlockerVolumeSource", "FlockerVolumeSource", 1) + `,`, + `FlexVolume:` + strings.Replace(fmt.Sprintf("%v", this.FlexVolume), "FlexVolumeSource", "FlexVolumeSource", 1) + `,`, + `AzureFile:` + strings.Replace(fmt.Sprintf("%v", this.AzureFile), "AzureFileVolumeSource", "AzureFileVolumeSource", 1) + `,`, + `VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`, + `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, + `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeSpec) String() string { + if this == nil { + return "nil" + } + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + s := strings.Join([]string{`&PersistentVolumeSpec{`, + `Capacity:` + mapStringForCapacity + `,`, + `PersistentVolumeSource:` + strings.Replace(strings.Replace(this.PersistentVolumeSource.String(), "PersistentVolumeSource", "PersistentVolumeSource", 1), `&`, ``, 1) + `,`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `ClaimRef:` + strings.Replace(fmt.Sprintf("%v", this.ClaimRef), "ObjectReference", "ObjectReference", 1) + `,`, + `PersistentVolumeReclaimPolicy:` + fmt.Sprintf("%v", this.PersistentVolumeReclaimPolicy) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `}`, + }, "") + return s +} +func (this *Pod) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Pod{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSpec", "PodSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodStatus", "PodStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodAffinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "WeightedPodAffinityTerm", "WeightedPodAffinityTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodAffinityTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAffinityTerm{`, + `LabelSelector:` + strings.Replace(fmt.Sprintf("%v", this.LabelSelector), "LabelSelector", "k8s_io_kubernetes_pkg_api_unversioned.LabelSelector", 1) + `,`, + `Namespaces:` + fmt.Sprintf("%v", this.Namespaces) + `,`, + `TopologyKey:` + fmt.Sprintf("%v", this.TopologyKey) + `,`, + `}`, + }, "") + return s +} +func (this *PodAntiAffinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAntiAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "WeightedPodAffinityTerm", "WeightedPodAffinityTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodAttachOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAttachOptions{`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, + `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `}`, + }, "") + return s +} +func (this *PodCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *PodExecOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodExecOptions{`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, + `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `}`, + }, "") + return s +} +func (this *PodList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Pod", "Pod", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodLogOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodLogOptions{`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Follow:` + fmt.Sprintf("%v", this.Follow) + `,`, + `Previous:` + fmt.Sprintf("%v", this.Previous) + `,`, + `SinceSeconds:` + valueToStringGenerated(this.SinceSeconds) + `,`, + `SinceTime:` + strings.Replace(fmt.Sprintf("%v", this.SinceTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `Timestamps:` + fmt.Sprintf("%v", this.Timestamps) + `,`, + `TailLines:` + valueToStringGenerated(this.TailLines) + `,`, + `LimitBytes:` + valueToStringGenerated(this.LimitBytes) + `,`, + `}`, + }, "") + return s +} +func (this *PodProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityContext) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityContext{`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "SELinuxOptions", 1) + `,`, + `RunAsUser:` + valueToStringGenerated(this.RunAsUser) + `,`, + `RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`, + `SupplementalGroups:` + fmt.Sprintf("%v", this.SupplementalGroups) + `,`, + `FSGroup:` + valueToStringGenerated(this.FSGroup) + `,`, + `}`, + }, "") + return s +} +func (this *PodSignature) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSignature{`, + `PodController:` + strings.Replace(fmt.Sprintf("%v", this.PodController), "OwnerReference", "OwnerReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSpec) String() string { + if this == nil { + return "nil" + } + keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) + for k := range this.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + mapStringForNodeSelector := "map[string]string{" + for _, k := range keysForNodeSelector { + mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) + } + mapStringForNodeSelector += "}" + s := strings.Join([]string{`&PodSpec{`, + `Volumes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Volumes), "Volume", "Volume", 1), `&`, ``, 1) + `,`, + `Containers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Containers), "Container", "Container", 1), `&`, ``, 1) + `,`, + `RestartPolicy:` + fmt.Sprintf("%v", this.RestartPolicy) + `,`, + `TerminationGracePeriodSeconds:` + valueToStringGenerated(this.TerminationGracePeriodSeconds) + `,`, + `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, + `DNSPolicy:` + fmt.Sprintf("%v", this.DNSPolicy) + `,`, + `NodeSelector:` + mapStringForNodeSelector + `,`, + `ServiceAccountName:` + fmt.Sprintf("%v", this.ServiceAccountName) + `,`, + `DeprecatedServiceAccount:` + fmt.Sprintf("%v", this.DeprecatedServiceAccount) + `,`, + `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, + `HostNetwork:` + fmt.Sprintf("%v", this.HostNetwork) + `,`, + `HostPID:` + fmt.Sprintf("%v", this.HostPID) + `,`, + `HostIPC:` + fmt.Sprintf("%v", this.HostIPC) + `,`, + `SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "PodSecurityContext", "PodSecurityContext", 1) + `,`, + `ImagePullSecrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ImagePullSecrets), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `Subdomain:` + fmt.Sprintf("%v", this.Subdomain) + `,`, + `}`, + }, "") + return s +} +func (this *PodStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "PodCondition", "PodCondition", 1), `&`, ``, 1) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, + `PodIP:` + fmt.Sprintf("%v", this.PodIP) + `,`, + `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `ContainerStatuses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ContainerStatuses), "ContainerStatus", "ContainerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodStatusResult) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodStatusResult{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodStatus", "PodStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplate) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodTemplate{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplateList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodTemplateList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodTemplate", "PodTemplate", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplateSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodTemplateSpec{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSpec", "PodSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Preconditions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Preconditions{`, + `UID:` + valueToStringGenerated(this.UID) + `,`, + `}`, + }, "") + return s +} +func (this *PreferAvoidPodsEntry) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PreferAvoidPodsEntry{`, + `PodSignature:` + strings.Replace(strings.Replace(this.PodSignature.String(), "PodSignature", "PodSignature", 1), `&`, ``, 1) + `,`, + `EvictionTime:` + strings.Replace(strings.Replace(this.EvictionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *PreferredSchedulingTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PreferredSchedulingTerm{`, + `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, + `Preference:` + strings.Replace(strings.Replace(this.Preference.String(), "NodeSelectorTerm", "NodeSelectorTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Probe) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Probe{`, + `Handler:` + strings.Replace(strings.Replace(this.Handler.String(), "Handler", "Handler", 1), `&`, ``, 1) + `,`, + `InitialDelaySeconds:` + fmt.Sprintf("%v", this.InitialDelaySeconds) + `,`, + `TimeoutSeconds:` + fmt.Sprintf("%v", this.TimeoutSeconds) + `,`, + `PeriodSeconds:` + fmt.Sprintf("%v", this.PeriodSeconds) + `,`, + `SuccessThreshold:` + fmt.Sprintf("%v", this.SuccessThreshold) + `,`, + `FailureThreshold:` + fmt.Sprintf("%v", this.FailureThreshold) + `,`, + `}`, + }, "") + return s +} +func (this *QuobyteVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&QuobyteVolumeSource{`, + `Registry:` + fmt.Sprintf("%v", this.Registry) + `,`, + `Volume:` + fmt.Sprintf("%v", this.Volume) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `}`, + }, "") + return s +} +func (this *RBDVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RBDVolumeSource{`, + `CephMonitors:` + fmt.Sprintf("%v", this.CephMonitors) + `,`, + `RBDImage:` + fmt.Sprintf("%v", this.RBDImage) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `RBDPool:` + fmt.Sprintf("%v", this.RBDPool) + `,`, + `RadosUser:` + fmt.Sprintf("%v", this.RadosUser) + `,`, + `Keyring:` + fmt.Sprintf("%v", this.Keyring) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *RangeAllocation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RangeAllocation{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Range:` + fmt.Sprintf("%v", this.Range) + `,`, + `Data:` + valueToStringGenerated(this.Data) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationController) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationController{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ReplicationControllerSpec", "ReplicationControllerSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ReplicationControllerStatus", "ReplicationControllerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationControllerList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ReplicationController", "ReplicationController", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerSpec) String() string { + if this == nil { + return "nil" + } + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&ReplicationControllerSpec{`, + `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, + `Selector:` + mapStringForSelector + `,`, + `Template:` + strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "PodTemplateSpec", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationControllerStatus{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `FullyLabeledReplicas:` + fmt.Sprintf("%v", this.FullyLabeledReplicas) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceFieldSelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceFieldSelector{`, + `ContainerName:` + fmt.Sprintf("%v", this.ContainerName) + `,`, + `Resource:` + fmt.Sprintf("%v", this.Resource) + `,`, + `Divisor:` + strings.Replace(strings.Replace(this.Divisor.String(), "Quantity", "k8s_io_kubernetes_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuota) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceQuota{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ResourceQuotaSpec", "ResourceQuotaSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ResourceQuotaStatus", "ResourceQuotaStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceQuotaList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ResourceQuota", "ResourceQuota", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaSpec) String() string { + if this == nil { + return "nil" + } + keysForHard := make([]string, 0, len(this.Hard)) + for k := range this.Hard { + keysForHard = append(keysForHard, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) + mapStringForHard := "ResourceList{" + for _, k := range keysForHard { + mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) + } + mapStringForHard += "}" + s := strings.Join([]string{`&ResourceQuotaSpec{`, + `Hard:` + mapStringForHard + `,`, + `Scopes:` + fmt.Sprintf("%v", this.Scopes) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaStatus) String() string { + if this == nil { + return "nil" + } + keysForHard := make([]string, 0, len(this.Hard)) + for k := range this.Hard { + keysForHard = append(keysForHard, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) + mapStringForHard := "ResourceList{" + for _, k := range keysForHard { + mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) + } + mapStringForHard += "}" + keysForUsed := make([]string, 0, len(this.Used)) + for k := range this.Used { + keysForUsed = append(keysForUsed, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForUsed) + mapStringForUsed := "ResourceList{" + for _, k := range keysForUsed { + mapStringForUsed += fmt.Sprintf("%v: %v,", k, this.Used[ResourceName(k)]) + } + mapStringForUsed += "}" + s := strings.Join([]string{`&ResourceQuotaStatus{`, + `Hard:` + mapStringForHard + `,`, + `Used:` + mapStringForUsed + `,`, + `}`, + }, "") + return s +} +func (this *ResourceRequirements) String() string { + if this == nil { + return "nil" + } + keysForLimits := make([]string, 0, len(this.Limits)) + for k := range this.Limits { + keysForLimits = append(keysForLimits, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) + mapStringForLimits := "ResourceList{" + for _, k := range keysForLimits { + mapStringForLimits += fmt.Sprintf("%v: %v,", k, this.Limits[ResourceName(k)]) + } + mapStringForLimits += "}" + keysForRequests := make([]string, 0, len(this.Requests)) + for k := range this.Requests { + keysForRequests = append(keysForRequests, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) + mapStringForRequests := "ResourceList{" + for _, k := range keysForRequests { + mapStringForRequests += fmt.Sprintf("%v: %v,", k, this.Requests[ResourceName(k)]) + } + mapStringForRequests += "}" + s := strings.Join([]string{`&ResourceRequirements{`, + `Limits:` + mapStringForLimits + `,`, + `Requests:` + mapStringForRequests + `,`, + `}`, + }, "") + return s +} +func (this *SELinuxOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SELinuxOptions{`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Role:` + fmt.Sprintf("%v", this.Role) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Level:` + fmt.Sprintf("%v", this.Level) + `,`, + `}`, + }, "") + return s +} +func (this *Secret) String() string { + if this == nil { + return "nil" + } + keysForData := make([]string, 0, len(this.Data)) + for k := range this.Data { + keysForData = append(keysForData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForData) + mapStringForData := "map[string][]byte{" + for _, k := range keysForData { + mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) + } + mapStringForData += "}" + keysForStringData := make([]string, 0, len(this.StringData)) + for k := range this.StringData { + keysForStringData = append(keysForStringData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForStringData) + mapStringForStringData := "map[string]string{" + for _, k := range keysForStringData { + mapStringForStringData += fmt.Sprintf("%v: %v,", k, this.StringData[k]) + } + mapStringForStringData += "}" + s := strings.Join([]string{`&Secret{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + mapStringForData + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `StringData:` + mapStringForStringData + `,`, + `}`, + }, "") + return s +} +func (this *SecretKeySelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretKeySelector{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `}`, + }, "") + return s +} +func (this *SecretList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Secret", "Secret", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SecretVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretVolumeSource{`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *SecurityContext) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecurityContext{`, + `Capabilities:` + strings.Replace(fmt.Sprintf("%v", this.Capabilities), "Capabilities", "Capabilities", 1) + `,`, + `Privileged:` + valueToStringGenerated(this.Privileged) + `,`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "SELinuxOptions", 1) + `,`, + `RunAsUser:` + valueToStringGenerated(this.RunAsUser) + `,`, + `RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`, + `ReadOnlyRootFilesystem:` + valueToStringGenerated(this.ReadOnlyRootFilesystem) + `,`, + `}`, + }, "") + return s +} +func (this *SerializedReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SerializedReference{`, + `Reference:` + strings.Replace(strings.Replace(this.Reference.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Service) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Service{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ServiceSpec", "ServiceSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ServiceStatus", "ServiceStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccount) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceAccount{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Secrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Secrets), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `ImagePullSecrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ImagePullSecrets), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccountList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceAccountList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ServiceAccount", "ServiceAccount", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Service", "Service", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServicePort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServicePort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `TargetPort:` + strings.Replace(strings.Replace(this.TargetPort.String(), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `NodePort:` + fmt.Sprintf("%v", this.NodePort) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceSpec) String() string { + if this == nil { + return "nil" + } + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&ServiceSpec{`, + `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "ServicePort", "ServicePort", 1), `&`, ``, 1) + `,`, + `Selector:` + mapStringForSelector + `,`, + `ClusterIP:` + fmt.Sprintf("%v", this.ClusterIP) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `ExternalIPs:` + fmt.Sprintf("%v", this.ExternalIPs) + `,`, + `DeprecatedPublicIPs:` + fmt.Sprintf("%v", this.DeprecatedPublicIPs) + `,`, + `SessionAffinity:` + fmt.Sprintf("%v", this.SessionAffinity) + `,`, + `LoadBalancerIP:` + fmt.Sprintf("%v", this.LoadBalancerIP) + `,`, + `LoadBalancerSourceRanges:` + fmt.Sprintf("%v", this.LoadBalancerSourceRanges) + `,`, + `ExternalName:` + fmt.Sprintf("%v", this.ExternalName) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceStatus{`, + `LoadBalancer:` + strings.Replace(strings.Replace(this.LoadBalancer.String(), "LoadBalancerStatus", "LoadBalancerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *TCPSocketAction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TCPSocketAction{`, + `Port:` + strings.Replace(strings.Replace(this.Port.String(), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Taint) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Taint{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, + `}`, + }, "") + return s +} +func (this *Toleration) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Toleration{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, + `}`, + }, "") + return s +} +func (this *Volume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Volume{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `VolumeSource:` + strings.Replace(strings.Replace(this.VolumeSource.String(), "VolumeSource", "VolumeSource", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeMount) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeMount{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `MountPath:` + fmt.Sprintf("%v", this.MountPath) + `,`, + `SubPath:` + fmt.Sprintf("%v", this.SubPath) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeSource{`, + `HostPath:` + strings.Replace(fmt.Sprintf("%v", this.HostPath), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, + `EmptyDir:` + strings.Replace(fmt.Sprintf("%v", this.EmptyDir), "EmptyDirVolumeSource", "EmptyDirVolumeSource", 1) + `,`, + `GCEPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.GCEPersistentDisk), "GCEPersistentDiskVolumeSource", "GCEPersistentDiskVolumeSource", 1) + `,`, + `AWSElasticBlockStore:` + strings.Replace(fmt.Sprintf("%v", this.AWSElasticBlockStore), "AWSElasticBlockStoreVolumeSource", "AWSElasticBlockStoreVolumeSource", 1) + `,`, + `GitRepo:` + strings.Replace(fmt.Sprintf("%v", this.GitRepo), "GitRepoVolumeSource", "GitRepoVolumeSource", 1) + `,`, + `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "SecretVolumeSource", "SecretVolumeSource", 1) + `,`, + `NFS:` + strings.Replace(fmt.Sprintf("%v", this.NFS), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, + `ISCSI:` + strings.Replace(fmt.Sprintf("%v", this.ISCSI), "ISCSIVolumeSource", "ISCSIVolumeSource", 1) + `,`, + `Glusterfs:` + strings.Replace(fmt.Sprintf("%v", this.Glusterfs), "GlusterfsVolumeSource", "GlusterfsVolumeSource", 1) + `,`, + `PersistentVolumeClaim:` + strings.Replace(fmt.Sprintf("%v", this.PersistentVolumeClaim), "PersistentVolumeClaimVolumeSource", "PersistentVolumeClaimVolumeSource", 1) + `,`, + `RBD:` + strings.Replace(fmt.Sprintf("%v", this.RBD), "RBDVolumeSource", "RBDVolumeSource", 1) + `,`, + `FlexVolume:` + strings.Replace(fmt.Sprintf("%v", this.FlexVolume), "FlexVolumeSource", "FlexVolumeSource", 1) + `,`, + `Cinder:` + strings.Replace(fmt.Sprintf("%v", this.Cinder), "CinderVolumeSource", "CinderVolumeSource", 1) + `,`, + `CephFS:` + strings.Replace(fmt.Sprintf("%v", this.CephFS), "CephFSVolumeSource", "CephFSVolumeSource", 1) + `,`, + `Flocker:` + strings.Replace(fmt.Sprintf("%v", this.Flocker), "FlockerVolumeSource", "FlockerVolumeSource", 1) + `,`, + `DownwardAPI:` + strings.Replace(fmt.Sprintf("%v", this.DownwardAPI), "DownwardAPIVolumeSource", "DownwardAPIVolumeSource", 1) + `,`, + `FC:` + strings.Replace(fmt.Sprintf("%v", this.FC), "FCVolumeSource", "FCVolumeSource", 1) + `,`, + `AzureFile:` + strings.Replace(fmt.Sprintf("%v", this.AzureFile), "AzureFileVolumeSource", "AzureFileVolumeSource", 1) + `,`, + `ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapVolumeSource", "ConfigMapVolumeSource", 1) + `,`, + `VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`, + `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, + `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VsphereVirtualDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VsphereVirtualDiskVolumeSource{`, + `VolumePath:` + fmt.Sprintf("%v", this.VolumePath) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `}`, + }, "") + return s +} +func (this *WeightedPodAffinityTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WeightedPodAffinityTerm{`, + `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, + `PodAffinityTerm:` + strings.Replace(strings.Replace(this.PodAffinityTerm.String(), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *AWSElasticBlockStoreVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AWSElasticBlockStoreVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AWSElasticBlockStoreVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Partition", wireType) + } + m.Partition = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Partition |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Affinity) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Affinity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Affinity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeAffinity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NodeAffinity == nil { + m.NodeAffinity = &NodeAffinity{} + } + if err := m.NodeAffinity.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodAffinity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PodAffinity == nil { + m.PodAffinity = &PodAffinity{} + } + if err := m.PodAffinity.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodAntiAffinity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PodAntiAffinity == nil { + m.PodAntiAffinity = &PodAntiAffinity{} + } + if err := m.PodAntiAffinity.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AttachedVolume) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AttachedVolume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AttachedVolume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = UniqueVolumeName(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DevicePath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DevicePath = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AvoidPods) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AvoidPods: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AvoidPods: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreferAvoidPods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PreferAvoidPods = append(m.PreferAvoidPods, PreferAvoidPodsEntry{}) + if err := m.PreferAvoidPods[len(m.PreferAvoidPods)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AzureDiskVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AzureDiskVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AzureDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DiskName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DiskName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DataDiskURI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DataDiskURI = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CachingMode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := AzureDataDiskCachingMode(data[iNdEx:postIndex]) + m.CachingMode = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.FSType = &s + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.ReadOnly = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AzureFileVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AzureFileVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AzureFileVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ShareName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ShareName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Binding) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Binding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Binding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Target.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Capabilities) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Capabilities: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Capabilities: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Add", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Add = append(m.Add, Capability(data[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Drop", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Drop = append(m.Drop, Capability(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CephFSVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CephFSVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CephFSVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Monitors", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Monitors = append(m.Monitors, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretFile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretFile = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &LocalObjectReference{} + } + if err := m.SecretRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CinderVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CinderVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CinderVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ComponentCondition) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ComponentCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ComponentCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = ComponentConditionType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = ConditionStatus(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Error = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ComponentStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ComponentStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ComponentStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, ComponentCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ComponentStatusList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ComponentStatusList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ComponentStatusList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ComponentStatus{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConfigMap) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConfigMap: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConfigMap: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.Data == nil { + m.Data = make(map[string]string) + } + m.Data[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConfigMapKeySelector) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConfigMapKeySelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConfigMapKeySelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LocalObjectReference.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConfigMapList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConfigMapList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConfigMapList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ConfigMap{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ConfigMapVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ConfigMapVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ConfigMapVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LocalObjectReference.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, KeyToPath{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DefaultMode = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Container) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Container: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Container: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Image = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Command = append(m.Command, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Args", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Args = append(m.Args, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkingDir", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WorkingDir = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ports = append(m.Ports, ContainerPort{}) + if err := m.Ports[len(m.Ports)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Env", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Env = append(m.Env, EnvVar{}) + if err := m.Env[len(m.Env)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Resources.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeMounts", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeMounts = append(m.VolumeMounts, VolumeMount{}) + if err := m.VolumeMounts[len(m.VolumeMounts)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LivenessProbe", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LivenessProbe == nil { + m.LivenessProbe = &Probe{} + } + if err := m.LivenessProbe.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadinessProbe", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ReadinessProbe == nil { + m.ReadinessProbe = &Probe{} + } + if err := m.ReadinessProbe.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Lifecycle", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Lifecycle == nil { + m.Lifecycle = &Lifecycle{} + } + if err := m.Lifecycle.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TerminationMessagePath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TerminationMessagePath = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImagePullPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImagePullPolicy = PullPolicy(data[iNdEx:postIndex]) + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecurityContext == nil { + m.SecurityContext = &SecurityContext{} + } + if err := m.SecurityContext.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stdin = bool(v != 0) + case 17: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StdinOnce", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.StdinOnce = bool(v != 0) + case 18: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTY", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TTY = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerImage) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerImage: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerImage: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Names", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Names = append(m.Names, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SizeBytes", wireType) + } + m.SizeBytes = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.SizeBytes |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerPort) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerPort: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerPort: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostPort", wireType) + } + m.HostPort = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.HostPort |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerPort", wireType) + } + m.ContainerPort = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ContainerPort |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Protocol = Protocol(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostIP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostIP = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerState) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Waiting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Waiting == nil { + m.Waiting = &ContainerStateWaiting{} + } + if err := m.Waiting.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Running", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Running == nil { + m.Running = &ContainerStateRunning{} + } + if err := m.Running.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Terminated", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Terminated == nil { + m.Terminated = &ContainerStateTerminated{} + } + if err := m.Terminated.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerStateRunning) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerStateRunning: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerStateRunning: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StartedAt.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerStateTerminated) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerStateTerminated: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerStateTerminated: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ExitCode", wireType) + } + m.ExitCode = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ExitCode |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Signal", wireType) + } + m.Signal = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Signal |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartedAt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StartedAt.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FinishedAt", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.FinishedAt.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerStateWaiting) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerStateWaiting: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerStateWaiting: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ContainerStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ContainerStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ContainerStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.State.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTerminationState", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTerminationState.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Ready", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Ready = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RestartCount", wireType) + } + m.RestartCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.RestartCount |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Image", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Image = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImageID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImageID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DaemonEndpoint) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DaemonEndpoint: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DaemonEndpoint: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + m.Port = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Port |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DeleteOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DeleteOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DeleteOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field GracePeriodSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.GracePeriodSeconds = &v + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Preconditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Preconditions == nil { + m.Preconditions = &Preconditions{} + } + if err := m.Preconditions.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OrphanDependents", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.OrphanDependents = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DownwardAPIVolumeFile) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DownwardAPIVolumeFile: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DownwardAPIVolumeFile: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FieldRef == nil { + m.FieldRef = &ObjectFieldSelector{} + } + if err := m.FieldRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceFieldRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ResourceFieldRef == nil { + m.ResourceFieldRef = &ResourceFieldSelector{} + } + if err := m.ResourceFieldRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Mode = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DownwardAPIVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DownwardAPIVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DownwardAPIVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, DownwardAPIVolumeFile{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DefaultMode = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EmptyDirVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EmptyDirVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EmptyDirVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Medium", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Medium = StorageMedium(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointAddress) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IP = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TargetRef == nil { + m.TargetRef = &ObjectReference{} + } + if err := m.TargetRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hostname = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.NodeName = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointPort) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointPort: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointPort: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + m.Port = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Port |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Protocol = Protocol(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointSubset) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointSubset: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointSubset: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addresses = append(m.Addresses, EndpointAddress{}) + if err := m.Addresses[len(m.Addresses)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NotReadyAddresses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NotReadyAddresses = append(m.NotReadyAddresses, EndpointAddress{}) + if err := m.NotReadyAddresses[len(m.NotReadyAddresses)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ports = append(m.Ports, EndpointPort{}) + if err := m.Ports[len(m.Ports)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Endpoints) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Endpoints: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Endpoints: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subsets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Subsets = append(m.Subsets, EndpointSubset{}) + if err := m.Subsets[len(m.Subsets)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EndpointsList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EndpointsList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EndpointsList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Endpoints{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EnvVar) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EnvVar: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EnvVar: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValueFrom", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ValueFrom == nil { + m.ValueFrom = &EnvVarSource{} + } + if err := m.ValueFrom.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EnvVarSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EnvVarSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EnvVarSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FieldRef == nil { + m.FieldRef = &ObjectFieldSelector{} + } + if err := m.FieldRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceFieldRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ResourceFieldRef == nil { + m.ResourceFieldRef = &ResourceFieldSelector{} + } + if err := m.ResourceFieldRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMapKeyRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ConfigMapKeyRef == nil { + m.ConfigMapKeyRef = &ConfigMapKeySelector{} + } + if err := m.ConfigMapKeyRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretKeyRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretKeyRef == nil { + m.SecretKeyRef = &SecretKeySelector{} + } + if err := m.SecretKeyRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Event) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Event: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InvolvedObject", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InvolvedObject.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Source.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FirstTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.FirstTimestamp.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTimestamp.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) + } + m.Count = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Count |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EventList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Event{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EventSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EventSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EventSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Component", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Component = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Host = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExecAction) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExecAction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExecAction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Command = append(m.Command, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ExportOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExportOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExportOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Export", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Export = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Exact", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Exact = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FCVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FCVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FCVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetWWNs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetWWNs = append(m.TargetWWNs, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Lun", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Lun = &v + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FlexVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FlexVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FlexVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Driver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Driver = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &LocalObjectReference{} + } + if err := m.SecretRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Options", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.Options == nil { + m.Options = make(map[string]string) + } + m.Options[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FlockerVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FlockerVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FlockerVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DatasetName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DatasetName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GCEPersistentDiskVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GCEPersistentDiskVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GCEPersistentDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PDName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PDName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Partition", wireType) + } + m.Partition = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Partition |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GitRepoVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GitRepoVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GitRepoVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Repository", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Repository = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Revision", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Revision = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Directory", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Directory = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GlusterfsVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GlusterfsVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GlusterfsVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndpointsName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EndpointsName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HTTPGetAction) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HTTPGetAction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HTTPGetAction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Port.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Host = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scheme", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Scheme = URIScheme(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HTTPHeaders", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HTTPHeaders = append(m.HTTPHeaders, HTTPHeader{}) + if err := m.HTTPHeaders[len(m.HTTPHeaders)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HTTPHeader) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HTTPHeader: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HTTPHeader: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Handler) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Handler: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Handler: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Exec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Exec == nil { + m.Exec = &ExecAction{} + } + if err := m.Exec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HTTPGet", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.HTTPGet == nil { + m.HTTPGet = &HTTPGetAction{} + } + if err := m.HTTPGet.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TCPSocket", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.TCPSocket == nil { + m.TCPSocket = &TCPSocketAction{} + } + if err := m.TCPSocket.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HostPathVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HostPathVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HostPathVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ISCSIVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ISCSIVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ISCSIVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetPortal", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetPortal = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IQN", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IQN = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Lun", wireType) + } + m.Lun = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Lun |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ISCSIInterface", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ISCSIInterface = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KeyToPath) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KeyToPath: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KeyToPath: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Mode = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Lifecycle) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Lifecycle: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Lifecycle: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PostStart", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PostStart == nil { + m.PostStart = &Handler{} + } + if err := m.PostStart.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreStop", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PreStop == nil { + m.PreStop = &Handler{} + } + if err := m.PreStop.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LimitRange) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LimitRange: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LimitRange: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LimitRangeItem) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LimitRangeItem: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LimitRangeItem: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = LimitType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Max", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Max == nil { + m.Max = make(ResourceList) + } + m.Max[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Min", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Min == nil { + m.Min = make(ResourceList) + } + m.Min[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Default", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Default == nil { + m.Default = make(ResourceList) + } + m.Default[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultRequest", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.DefaultRequest == nil { + m.DefaultRequest = make(ResourceList) + } + m.DefaultRequest[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxLimitRequestRatio", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.MaxLimitRequestRatio == nil { + m.MaxLimitRequestRatio = make(ResourceList) + } + m.MaxLimitRequestRatio[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LimitRangeList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LimitRangeList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LimitRangeList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, LimitRange{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LimitRangeSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LimitRangeSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LimitRangeSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Limits", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Limits = append(m.Limits, LimitRangeItem{}) + if err := m.Limits[len(m.Limits)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *List) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: List: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: List: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, k8s_io_kubernetes_pkg_runtime.RawExtension{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ListOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ListOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ListOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LabelSelector = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldSelector", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldSelector = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Watch", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Watch = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TimeoutSeconds = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LoadBalancerIngress) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LoadBalancerIngress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LoadBalancerIngress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IP = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hostname = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LoadBalancerStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LoadBalancerStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LoadBalancerStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ingress", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ingress = append(m.Ingress, LoadBalancerIngress{}) + if err := m.Ingress[len(m.Ingress)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LocalObjectReference) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LocalObjectReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LocalObjectReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NFSVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NFSVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NFSVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Server", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Server = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Namespace) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Namespace: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Namespace: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamespaceList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamespaceList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamespaceList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Namespace{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamespaceSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamespaceSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamespaceSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Finalizers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Finalizers = append(m.Finalizers, FinalizerName(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NamespaceStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NamespaceStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NamespaceStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = NamespacePhase(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Node) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Node: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Node: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeAddress) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeAddress: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeAddress: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = NodeAddressType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeAffinity) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeAffinity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeAffinity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequiredDuringSchedulingIgnoredDuringExecution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RequiredDuringSchedulingIgnoredDuringExecution == nil { + m.RequiredDuringSchedulingIgnoredDuringExecution = &NodeSelector{} + } + if err := m.RequiredDuringSchedulingIgnoredDuringExecution.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreferredDuringSchedulingIgnoredDuringExecution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PreferredDuringSchedulingIgnoredDuringExecution = append(m.PreferredDuringSchedulingIgnoredDuringExecution, PreferredSchedulingTerm{}) + if err := m.PreferredDuringSchedulingIgnoredDuringExecution[len(m.PreferredDuringSchedulingIgnoredDuringExecution)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeCondition) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = NodeConditionType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = ConditionStatus(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastHeartbeatTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastHeartbeatTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeDaemonEndpoints) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeDaemonEndpoints: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeDaemonEndpoints: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubeletEndpoint", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.KubeletEndpoint.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Node{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeProxyOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeProxyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeProxyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeSelector) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeSelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeSelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeSelectorTerms", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NodeSelectorTerms = append(m.NodeSelectorTerms, NodeSelectorTerm{}) + if err := m.NodeSelectorTerms[len(m.NodeSelectorTerms)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeSelectorRequirement) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeSelectorRequirement: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeSelectorRequirement: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = NodeSelectorOperator(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Values", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Values = append(m.Values, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeSelectorTerm) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeSelectorTerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeSelectorTerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MatchExpressions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MatchExpressions = append(m.MatchExpressions, NodeSelectorRequirement{}) + if err := m.MatchExpressions[len(m.MatchExpressions)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodCIDR", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PodCIDR = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExternalID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExternalID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProviderID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProviderID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Unschedulable", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Unschedulable = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Capacity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Capacity == nil { + m.Capacity = make(ResourceList) + } + m.Capacity[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Allocatable", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Allocatable == nil { + m.Allocatable = make(ResourceList) + } + m.Allocatable[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = NodePhase(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, NodeCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addresses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addresses = append(m.Addresses, NodeAddress{}) + if err := m.Addresses[len(m.Addresses)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DaemonEndpoints", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DaemonEndpoints.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NodeInfo.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Images", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Images = append(m.Images, ContainerImage{}) + if err := m.Images[len(m.Images)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumesInUse", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumesInUse = append(m.VolumesInUse, UniqueVolumeName(data[iNdEx:postIndex])) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumesAttached", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumesAttached = append(m.VolumesAttached, AttachedVolume{}) + if err := m.VolumesAttached[len(m.VolumesAttached)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NodeSystemInfo) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NodeSystemInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NodeSystemInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MachineID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MachineID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SystemUUID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SystemUUID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BootID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BootID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KernelVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.KernelVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OSImage", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OSImage = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerRuntimeVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerRuntimeVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubeletVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.KubeletVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubeProxyVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.KubeProxyVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OperatingSystem", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OperatingSystem = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Architecture", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Architecture = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ObjectFieldSelector) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ObjectFieldSelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ObjectFieldSelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldPath = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ObjectMeta) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ObjectMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ObjectMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GenerateName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GenerateName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SelfLink", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SelfLink = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UID = k8s_io_kubernetes_pkg_types.UID(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Generation", wireType) + } + m.Generation = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Generation |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CreationTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CreationTimestamp.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeletionTimestamp", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DeletionTimestamp == nil { + m.DeletionTimestamp = &k8s_io_kubernetes_pkg_api_unversioned.Time{} + } + if err := m.DeletionTimestamp.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DeletionGracePeriodSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DeletionGracePeriodSeconds = &v + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Labels", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.Labels == nil { + m.Labels = make(map[string]string) + } + m.Labels[mapkey] = mapvalue + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.Annotations == nil { + m.Annotations = make(map[string]string) + } + m.Annotations[mapkey] = mapvalue + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OwnerReferences", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OwnerReferences = append(m.OwnerReferences, OwnerReference{}) + if err := m.OwnerReferences[len(m.OwnerReferences)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Finalizers", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Finalizers = append(m.Finalizers, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClusterName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ObjectReference) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ObjectReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ObjectReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UID = k8s_io_kubernetes_pkg_types.UID(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FieldPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FieldPath = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *OwnerReference) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OwnerReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OwnerReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UID = k8s_io_kubernetes_pkg_types.UID(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Controller", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Controller = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolume) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeClaim) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeClaim: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeClaim: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeClaimList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeClaimList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeClaimList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, PersistentVolumeClaim{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeClaimSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeClaimSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeClaimSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessModes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AccessModes = append(m.AccessModes, PersistentVolumeAccessMode(data[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resources", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Resources.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Selector == nil { + m.Selector = &k8s_io_kubernetes_pkg_api_unversioned.LabelSelector{} + } + if err := m.Selector.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeClaimStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeClaimStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeClaimStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = PersistentVolumeClaimPhase(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessModes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AccessModes = append(m.AccessModes, PersistentVolumeAccessMode(data[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Capacity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Capacity == nil { + m.Capacity = make(ResourceList) + } + m.Capacity[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeClaimVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeClaimVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeClaimVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClaimName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, PersistentVolume{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GCEPersistentDisk", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GCEPersistentDisk == nil { + m.GCEPersistentDisk = &GCEPersistentDiskVolumeSource{} + } + if err := m.GCEPersistentDisk.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AWSElasticBlockStore", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AWSElasticBlockStore == nil { + m.AWSElasticBlockStore = &AWSElasticBlockStoreVolumeSource{} + } + if err := m.AWSElasticBlockStore.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostPath", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.HostPath == nil { + m.HostPath = &HostPathVolumeSource{} + } + if err := m.HostPath.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Glusterfs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Glusterfs == nil { + m.Glusterfs = &GlusterfsVolumeSource{} + } + if err := m.Glusterfs.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NFS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NFS == nil { + m.NFS = &NFSVolumeSource{} + } + if err := m.NFS.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RBD", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RBD == nil { + m.RBD = &RBDVolumeSource{} + } + if err := m.RBD.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ISCSI", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ISCSI == nil { + m.ISCSI = &ISCSIVolumeSource{} + } + if err := m.ISCSI.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Cinder", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Cinder == nil { + m.Cinder = &CinderVolumeSource{} + } + if err := m.Cinder.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CephFS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CephFS == nil { + m.CephFS = &CephFSVolumeSource{} + } + if err := m.CephFS.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FC", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FC == nil { + m.FC = &FCVolumeSource{} + } + if err := m.FC.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Flocker", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Flocker == nil { + m.Flocker = &FlockerVolumeSource{} + } + if err := m.Flocker.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FlexVolume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FlexVolume == nil { + m.FlexVolume = &FlexVolumeSource{} + } + if err := m.FlexVolume.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureFile", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AzureFile == nil { + m.AzureFile = &AzureFileVolumeSource{} + } + if err := m.AzureFile.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VsphereVolume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.VsphereVolume == nil { + m.VsphereVolume = &VsphereVirtualDiskVolumeSource{} + } + if err := m.VsphereVolume.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Quobyte", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Quobyte == nil { + m.Quobyte = &QuobyteVolumeSource{} + } + if err := m.Quobyte.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureDisk", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AzureDisk == nil { + m.AzureDisk = &AzureDiskVolumeSource{} + } + if err := m.AzureDisk.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Capacity", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Capacity == nil { + m.Capacity = make(ResourceList) + } + m.Capacity[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PersistentVolumeSource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PersistentVolumeSource.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccessModes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AccessModes = append(m.AccessModes, PersistentVolumeAccessMode(data[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ClaimRef == nil { + m.ClaimRef = &ObjectReference{} + } + if err := m.ClaimRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PersistentVolumeReclaimPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PersistentVolumeReclaimPolicy = PersistentVolumeReclaimPolicy(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PersistentVolumeStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PersistentVolumeStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PersistentVolumeStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = PersistentVolumePhase(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Pod) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Pod: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Pod: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodAffinity) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodAffinity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodAffinity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequiredDuringSchedulingIgnoredDuringExecution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RequiredDuringSchedulingIgnoredDuringExecution = append(m.RequiredDuringSchedulingIgnoredDuringExecution, PodAffinityTerm{}) + if err := m.RequiredDuringSchedulingIgnoredDuringExecution[len(m.RequiredDuringSchedulingIgnoredDuringExecution)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreferredDuringSchedulingIgnoredDuringExecution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PreferredDuringSchedulingIgnoredDuringExecution = append(m.PreferredDuringSchedulingIgnoredDuringExecution, WeightedPodAffinityTerm{}) + if err := m.PreferredDuringSchedulingIgnoredDuringExecution[len(m.PreferredDuringSchedulingIgnoredDuringExecution)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodAffinityTerm) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodAffinityTerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodAffinityTerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LabelSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LabelSelector == nil { + m.LabelSelector = &k8s_io_kubernetes_pkg_api_unversioned.LabelSelector{} + } + if err := m.LabelSelector.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespaces", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespaces = append(m.Namespaces, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TopologyKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TopologyKey = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodAntiAffinity) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodAntiAffinity: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodAntiAffinity: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequiredDuringSchedulingIgnoredDuringExecution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RequiredDuringSchedulingIgnoredDuringExecution = append(m.RequiredDuringSchedulingIgnoredDuringExecution, PodAffinityTerm{}) + if err := m.RequiredDuringSchedulingIgnoredDuringExecution[len(m.RequiredDuringSchedulingIgnoredDuringExecution)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreferredDuringSchedulingIgnoredDuringExecution", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PreferredDuringSchedulingIgnoredDuringExecution = append(m.PreferredDuringSchedulingIgnoredDuringExecution, WeightedPodAffinityTerm{}) + if err := m.PreferredDuringSchedulingIgnoredDuringExecution[len(m.PreferredDuringSchedulingIgnoredDuringExecution)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodAttachOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodAttachOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodAttachOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stdin = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stdout", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stdout = bool(v != 0) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stderr", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stderr = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTY", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TTY = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Container", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Container = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodCondition) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = PodConditionType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = ConditionStatus(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastProbeTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastProbeTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastTransitionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastTransitionTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodExecOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodExecOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodExecOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stdin", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stdin = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stdout", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stdout = bool(v != 0) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stderr", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stderr = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TTY", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TTY = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Container", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Container = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Command", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Command = append(m.Command, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Pod{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodLogOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodLogOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodLogOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Container", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Container = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Follow", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Follow = bool(v != 0) + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Previous", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Previous = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SinceSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.SinceSeconds = &v + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SinceTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SinceTime == nil { + m.SinceTime = &k8s_io_kubernetes_pkg_api_unversioned.Time{} + } + if err := m.SinceTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Timestamps", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Timestamps = bool(v != 0) + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TailLines", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TailLines = &v + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LimitBytes", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.LimitBytes = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodProxyOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodProxyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodProxyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSecurityContext) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSecurityContext: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSecurityContext: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SELinuxOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SELinuxOptions == nil { + m.SELinuxOptions = &SELinuxOptions{} + } + if err := m.SELinuxOptions.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.RunAsUser = &v + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RunAsNonRoot", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.RunAsNonRoot = &b + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SupplementalGroups", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.SupplementalGroups = append(m.SupplementalGroups, v) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FSGroup", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.FSGroup = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSignature) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSignature: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSignature: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodController", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PodController == nil { + m.PodController = &OwnerReference{} + } + if err := m.PodController.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volumes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Volumes = append(m.Volumes, Volume{}) + if err := m.Volumes[len(m.Volumes)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Containers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Containers = append(m.Containers, Container{}) + if err := m.Containers[len(m.Containers)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RestartPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RestartPolicy = RestartPolicy(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TerminationGracePeriodSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.TerminationGracePeriodSeconds = &v + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActiveDeadlineSeconds", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ActiveDeadlineSeconds = &v + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DNSPolicy", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DNSPolicy = DNSPolicy(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeSelector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.NodeSelector == nil { + m.NodeSelector = make(map[string]string) + } + m.NodeSelector[mapkey] = mapvalue + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceAccountName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedServiceAccount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DeprecatedServiceAccount = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NodeName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostNetwork", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.HostNetwork = bool(v != 0) + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostPID", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.HostPID = bool(v != 0) + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HostIPC", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.HostIPC = bool(v != 0) + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecurityContext", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecurityContext == nil { + m.SecurityContext = &PodSecurityContext{} + } + if err := m.SecurityContext.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImagePullSecrets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImagePullSecrets = append(m.ImagePullSecrets, LocalObjectReference{}) + if err := m.ImagePullSecrets[len(m.ImagePullSecrets)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hostname", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Hostname = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subdomain", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Subdomain = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Phase = PodPhase(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, PodCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostIP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostIP = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodIP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PodIP = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.StartTime == nil { + m.StartTime = &k8s_io_kubernetes_pkg_api_unversioned.Time{} + } + if err := m.StartTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerStatuses", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerStatuses = append(m.ContainerStatuses, ContainerStatus{}) + if err := m.ContainerStatuses[len(m.ContainerStatuses)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodStatusResult) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodStatusResult: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodStatusResult: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodTemplate) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodTemplate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodTemplate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Template.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodTemplateList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodTemplateList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodTemplateList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, PodTemplate{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PodTemplateSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodTemplateSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodTemplateSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Preconditions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Preconditions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Preconditions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := k8s_io_kubernetes_pkg_types.UID(data[iNdEx:postIndex]) + m.UID = &s + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PreferAvoidPodsEntry) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PreferAvoidPodsEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PreferAvoidPodsEntry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodSignature", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PodSignature.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvictionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.EvictionTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PreferredSchedulingTerm) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PreferredSchedulingTerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PreferredSchedulingTerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + m.Weight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Weight |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Preference", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Preference.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Probe) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Probe: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Probe: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Handler", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Handler.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field InitialDelaySeconds", wireType) + } + m.InitialDelaySeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.InitialDelaySeconds |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutSeconds", wireType) + } + m.TimeoutSeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.TimeoutSeconds |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PeriodSeconds", wireType) + } + m.PeriodSeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.PeriodSeconds |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SuccessThreshold", wireType) + } + m.SuccessThreshold = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.SuccessThreshold |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FailureThreshold", wireType) + } + m.FailureThreshold = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.FailureThreshold |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QuobyteVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuobyteVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuobyteVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Registry", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Registry = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Volume = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RBDVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RBDVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RBDVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CephMonitors", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CephMonitors = append(m.CephMonitors, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RBDImage", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RBDImage = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RBDPool", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RBDPool = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RadosUser", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RadosUser = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyring", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Keyring = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &LocalObjectReference{} + } + if err := m.SecretRef.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RangeAllocation) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RangeAllocation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RangeAllocation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Range", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Range = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], data[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ReplicationController) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReplicationController: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReplicationController: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ReplicationControllerList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReplicationControllerList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReplicationControllerList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ReplicationController{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ReplicationControllerSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReplicationControllerSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReplicationControllerSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Replicas", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Replicas = &v + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.Selector == nil { + m.Selector = make(map[string]string) + } + m.Selector[mapkey] = mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Template == nil { + m.Template = &PodTemplateSpec{} + } + if err := m.Template.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ReplicationControllerStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReplicationControllerStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReplicationControllerStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Replicas", wireType) + } + m.Replicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Replicas |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FullyLabeledReplicas", wireType) + } + m.FullyLabeledReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.FullyLabeledReplicas |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + } + m.ObservedGeneration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ObservedGeneration |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadyReplicas", wireType) + } + m.ReadyReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ReadyReplicas |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceFieldSelector) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceFieldSelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceFieldSelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Resource = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Divisor", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Divisor.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceQuota) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceQuota: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceQuota: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceQuotaList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceQuotaList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceQuotaList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ResourceQuota{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceQuotaSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceQuotaSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceQuotaSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hard", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Hard == nil { + m.Hard = make(ResourceList) + } + m.Hard[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Scopes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Scopes = append(m.Scopes, ResourceQuotaScope(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceQuotaStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceQuotaStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceQuotaStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Hard", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Hard == nil { + m.Hard = make(ResourceList) + } + m.Hard[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Used", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Used == nil { + m.Used = make(ResourceList) + } + m.Used[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceRequirements) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceRequirements: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceRequirements: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Limits", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Limits == nil { + m.Limits = make(ResourceList) + } + m.Limits[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Requests", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := ResourceName(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &k8s_io_kubernetes_pkg_api_resource.Quantity{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Requests == nil { + m.Requests = make(ResourceList) + } + m.Requests[ResourceName(mapkey)] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SELinuxOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SELinuxOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SELinuxOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Role", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Role = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Level", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Level = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Secret) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Secret: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Secret: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapbyteLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapbyteLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intMapbyteLen := int(mapbyteLen) + if intMapbyteLen < 0 { + return ErrInvalidLengthGenerated + } + postbytesIndex := iNdEx + intMapbyteLen + if postbytesIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := make([]byte, mapbyteLen) + copy(mapvalue, data[iNdEx:postbytesIndex]) + iNdEx = postbytesIndex + if m.Data == nil { + m.Data = make(map[string][]byte) + } + m.Data[mapkey] = mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = SecretType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StringData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.StringData == nil { + m.StringData = make(map[string]string) + } + m.StringData[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecretKeySelector) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecretKeySelector: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecretKeySelector: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LocalObjectReference", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LocalObjectReference.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecretList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecretList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecretList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Secret{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecretVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecretVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecretVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SecretName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, KeyToPath{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DefaultMode = &v + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SecurityContext) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SecurityContext: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SecurityContext: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Capabilities", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Capabilities == nil { + m.Capabilities = &Capabilities{} + } + if err := m.Capabilities.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Privileged", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.Privileged = &b + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SELinuxOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SELinuxOptions == nil { + m.SELinuxOptions = &SELinuxOptions{} + } + if err := m.SELinuxOptions.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) + } + var v int64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.RunAsUser = &v + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RunAsNonRoot", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.RunAsNonRoot = &b + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnlyRootFilesystem", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.ReadOnlyRootFilesystem = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SerializedReference) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SerializedReference: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SerializedReference: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reference", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Reference.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Service) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Service: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Service: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceAccount) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secrets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Secrets = append(m.Secrets, ObjectReference{}) + if err := m.Secrets[len(m.Secrets)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ImagePullSecrets", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ImagePullSecrets = append(m.ImagePullSecrets, LocalObjectReference{}) + if err := m.ImagePullSecrets[len(m.ImagePullSecrets)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceAccountList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceAccountList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceAccountList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, ServiceAccount{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, Service{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServicePort) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServicePort: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServicePort: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Protocol", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Protocol = Protocol(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + m.Port = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Port |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetPort", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TargetPort.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NodePort", wireType) + } + m.NodePort = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.NodePort |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceProxyOptions) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceProxyOptions: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceProxyOptions: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ports", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ports = append(m.Ports, ServicePort{}) + if err := m.Ports[len(m.Ports)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.Selector == nil { + m.Selector = make(map[string]string) + } + m.Selector[mapkey] = mapvalue + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterIP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClusterIP = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = ServiceType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExternalIPs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExternalIPs = append(m.ExternalIPs, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedPublicIPs", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DeprecatedPublicIPs = append(m.DeprecatedPublicIPs, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SessionAffinity", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SessionAffinity = ServiceAffinity(data[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LoadBalancerIP", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LoadBalancerIP = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LoadBalancerSourceRanges", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LoadBalancerSourceRanges = append(m.LoadBalancerSourceRanges, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ExternalName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ExternalName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ServiceStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ServiceStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ServiceStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LoadBalancer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LoadBalancer.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TCPSocketAction) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TCPSocketAction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TCPSocketAction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Port.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Taint) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Taint: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Taint: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Effect", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Effect = TaintEffect(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Toleration) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Toleration: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Toleration: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Operator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Operator = TolerationOperator(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Effect", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Effect = TaintEffect(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Volume) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Volume: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Volume: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeSource", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.VolumeSource.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VolumeMount) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VolumeMount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VolumeMount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MountPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MountPath = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SubPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SubPath = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostPath", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.HostPath == nil { + m.HostPath = &HostPathVolumeSource{} + } + if err := m.HostPath.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EmptyDir", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.EmptyDir == nil { + m.EmptyDir = &EmptyDirVolumeSource{} + } + if err := m.EmptyDir.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GCEPersistentDisk", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GCEPersistentDisk == nil { + m.GCEPersistentDisk = &GCEPersistentDiskVolumeSource{} + } + if err := m.GCEPersistentDisk.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AWSElasticBlockStore", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AWSElasticBlockStore == nil { + m.AWSElasticBlockStore = &AWSElasticBlockStoreVolumeSource{} + } + if err := m.AWSElasticBlockStore.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitRepo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.GitRepo == nil { + m.GitRepo = &GitRepoVolumeSource{} + } + if err := m.GitRepo.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Secret", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Secret == nil { + m.Secret = &SecretVolumeSource{} + } + if err := m.Secret.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NFS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NFS == nil { + m.NFS = &NFSVolumeSource{} + } + if err := m.NFS.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ISCSI", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ISCSI == nil { + m.ISCSI = &ISCSIVolumeSource{} + } + if err := m.ISCSI.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Glusterfs", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Glusterfs == nil { + m.Glusterfs = &GlusterfsVolumeSource{} + } + if err := m.Glusterfs.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PersistentVolumeClaim", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PersistentVolumeClaim == nil { + m.PersistentVolumeClaim = &PersistentVolumeClaimVolumeSource{} + } + if err := m.PersistentVolumeClaim.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RBD", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RBD == nil { + m.RBD = &RBDVolumeSource{} + } + if err := m.RBD.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FlexVolume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FlexVolume == nil { + m.FlexVolume = &FlexVolumeSource{} + } + if err := m.FlexVolume.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Cinder", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Cinder == nil { + m.Cinder = &CinderVolumeSource{} + } + if err := m.Cinder.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CephFS", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CephFS == nil { + m.CephFS = &CephFSVolumeSource{} + } + if err := m.CephFS.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Flocker", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Flocker == nil { + m.Flocker = &FlockerVolumeSource{} + } + if err := m.Flocker.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DownwardAPI", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DownwardAPI == nil { + m.DownwardAPI = &DownwardAPIVolumeSource{} + } + if err := m.DownwardAPI.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FC", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FC == nil { + m.FC = &FCVolumeSource{} + } + if err := m.FC.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureFile", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AzureFile == nil { + m.AzureFile = &AzureFileVolumeSource{} + } + if err := m.AzureFile.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConfigMap", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ConfigMap == nil { + m.ConfigMap = &ConfigMapVolumeSource{} + } + if err := m.ConfigMap.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VsphereVolume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.VsphereVolume == nil { + m.VsphereVolume = &VsphereVirtualDiskVolumeSource{} + } + if err := m.VsphereVolume.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Quobyte", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Quobyte == nil { + m.Quobyte = &QuobyteVolumeSource{} + } + if err := m.Quobyte.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureDisk", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AzureDisk == nil { + m.AzureDisk = &AzureDiskVolumeSource{} + } + if err := m.AzureDisk.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VsphereVirtualDiskVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VsphereVirtualDiskVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VsphereVirtualDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumePath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumePath = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *WeightedPodAffinityTerm) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: WeightedPodAffinityTerm: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: WeightedPodAffinityTerm: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + m.Weight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Weight |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodAffinityTerm", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PodAffinityTerm.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 9750 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x8c, 0x24, 0xc7, + 0x75, 0x98, 0x66, 0x66, 0xbf, 0xa6, 0xf6, 0xf3, 0xfa, 0x8e, 0xc7, 0xe5, 0x4a, 0xfc, 0x50, 0x8b, + 0xa4, 0xc8, 0x23, 0x6f, 0x8f, 0x77, 0x24, 0x4d, 0x52, 0x52, 0x24, 0xee, 0xee, 0xec, 0xde, 0xad, + 0x6f, 0xef, 0x6e, 0xf8, 0x66, 0xef, 0x4e, 0xb2, 0x18, 0x99, 0xbd, 0x33, 0xbd, 0xbb, 0xad, 0x9b, + 0x9d, 0x1e, 0x76, 0xf7, 0xec, 0xdd, 0x52, 0x31, 0xe0, 0x18, 0x8e, 0x83, 0xc0, 0x86, 0x23, 0x03, + 0x31, 0x12, 0x20, 0x09, 0xe2, 0x04, 0x88, 0x91, 0xc4, 0x88, 0x63, 0x39, 0x8a, 0x2d, 0x25, 0x86, + 0x11, 0x20, 0x8e, 0xa0, 0x7c, 0x38, 0x90, 0x81, 0x20, 0x36, 0x6c, 0x40, 0xb1, 0x6c, 0x04, 0xf9, + 0x91, 0x3f, 0x01, 0x92, 0x3f, 0x21, 0x8c, 0x24, 0xf5, 0xea, 0xbb, 0x7a, 0x7a, 0xb6, 0x7b, 0x96, + 0x37, 0x9b, 0xb3, 0x91, 0x1f, 0x0b, 0xec, 0xbc, 0xf7, 0xea, 0xd5, 0x47, 0x57, 0xbd, 0x7a, 0xef, + 0xd5, 0xab, 0x57, 0xe4, 0xe5, 0x7b, 0x6f, 0xc6, 0xcb, 0x41, 0x78, 0xe9, 0x5e, 0x6f, 0xc7, 0x8f, + 0x3a, 0x7e, 0xe2, 0xc7, 0x97, 0xba, 0xf7, 0xf6, 0x2e, 0x79, 0xdd, 0xe0, 0xd2, 0xe1, 0xe5, 0x4b, + 0x7b, 0x7e, 0xc7, 0x8f, 0xbc, 0xc4, 0x6f, 0x2d, 0x77, 0xa3, 0x30, 0x09, 0x9d, 0x4f, 0x70, 0xea, + 0x65, 0x4d, 0xbd, 0x4c, 0xa9, 0x97, 0x29, 0xf5, 0xf2, 0xe1, 0xe5, 0xa5, 0x8b, 0x7b, 0x41, 0xb2, + 0xdf, 0xdb, 0x59, 0x6e, 0x86, 0x07, 0x97, 0xf6, 0xc2, 0xbd, 0xf0, 0x12, 0x2b, 0xb4, 0xd3, 0xdb, + 0x65, 0xbf, 0xd8, 0x0f, 0xf6, 0x1f, 0x67, 0xb6, 0x74, 0x65, 0x70, 0xd5, 0x91, 0x1f, 0x87, 0xbd, + 0xa8, 0xe9, 0xa7, 0x1b, 0xb0, 0xf4, 0xfa, 0xe0, 0x32, 0xbd, 0xce, 0xa1, 0x1f, 0xc5, 0x41, 0xd8, + 0xf1, 0x5b, 0x7d, 0xc5, 0x2e, 0x66, 0x17, 0x8b, 0x7a, 0x9d, 0x24, 0x38, 0xe8, 0xaf, 0xe5, 0x72, + 0x36, 0x79, 0x2f, 0x09, 0xda, 0x97, 0x82, 0x4e, 0x12, 0x27, 0x51, 0xba, 0x88, 0xfb, 0xbb, 0x25, + 0xf2, 0xcc, 0xca, 0xdd, 0xc6, 0x7a, 0xdb, 0x8b, 0x93, 0xa0, 0xb9, 0xda, 0x0e, 0x9b, 0xf7, 0x1a, + 0x49, 0x18, 0xf9, 0x77, 0xc2, 0x76, 0xef, 0xc0, 0x6f, 0xb0, 0xde, 0x38, 0x2f, 0x93, 0xa9, 0x43, + 0xf6, 0x7b, 0xb3, 0xb6, 0x58, 0x7a, 0xa6, 0xf4, 0x42, 0x75, 0x75, 0xe1, 0xbb, 0xdf, 0x7f, 0xfa, + 0x63, 0x7f, 0xf4, 0xfd, 0xa7, 0xa7, 0xee, 0x08, 0x38, 0x28, 0x0a, 0xe7, 0x79, 0x32, 0xb1, 0x1b, + 0x6f, 0x1f, 0x75, 0xfd, 0xc5, 0x32, 0xa3, 0x9d, 0x13, 0xb4, 0x13, 0x1b, 0x0d, 0x84, 0x82, 0xc0, + 0x3a, 0x97, 0x48, 0xb5, 0xeb, 0x45, 0x49, 0x90, 0xd0, 0xbe, 0x2f, 0x56, 0x28, 0xe9, 0xf8, 0xea, + 0x19, 0x41, 0x5a, 0xad, 0x4b, 0x04, 0x68, 0x1a, 0x6c, 0x46, 0xe4, 0x7b, 0xad, 0x5b, 0x9d, 0xf6, + 0xd1, 0xe2, 0x18, 0xa5, 0x9f, 0xd2, 0xcd, 0x00, 0x01, 0x07, 0x45, 0xe1, 0x7e, 0xab, 0x4c, 0xa6, + 0x56, 0x76, 0x77, 0x83, 0x4e, 0x90, 0x1c, 0x39, 0xef, 0x91, 0x99, 0x4e, 0xd8, 0xf2, 0xe5, 0x6f, + 0xd6, 0x8b, 0xe9, 0x2b, 0x17, 0x96, 0x8f, 0x9b, 0x17, 0xcb, 0x37, 0x8d, 0x12, 0xab, 0x0b, 0xb4, + 0x9a, 0x19, 0x13, 0x02, 0x16, 0x47, 0xe7, 0x5d, 0x32, 0xdd, 0x0d, 0x5b, 0xaa, 0x82, 0x32, 0xab, + 0xe0, 0xc5, 0xe3, 0x2b, 0xa8, 0xeb, 0x02, 0xab, 0xf3, 0x94, 0xff, 0xb4, 0x01, 0x00, 0x93, 0x9d, + 0xd3, 0x26, 0xf3, 0xf8, 0x93, 0x7e, 0x76, 0x55, 0x43, 0x85, 0xd5, 0x70, 0x31, 0xbf, 0x06, 0xa3, + 0xd0, 0xea, 0x59, 0x5a, 0xcb, 0x7c, 0x0a, 0x08, 0x69, 0xd6, 0xee, 0x07, 0x64, 0x6e, 0x25, 0x49, + 0xbc, 0xe6, 0xbe, 0xdf, 0xe2, 0xdf, 0xd7, 0x79, 0x8d, 0x8c, 0x75, 0xbc, 0x03, 0x5f, 0x7c, 0xfd, + 0x67, 0xc4, 0xb0, 0x8f, 0xdd, 0xa4, 0xb0, 0x0f, 0xbf, 0xff, 0xf4, 0xc2, 0xed, 0x4e, 0xf0, 0x7e, + 0x4f, 0xcc, 0x19, 0x84, 0x01, 0xa3, 0x76, 0xae, 0x10, 0xd2, 0xf2, 0x0f, 0x83, 0xa6, 0x5f, 0xf7, + 0x92, 0x7d, 0x31, 0x1b, 0x1c, 0x51, 0x96, 0xd4, 0x14, 0x06, 0x0c, 0x2a, 0xf7, 0x27, 0x4a, 0xa4, + 0xba, 0x72, 0x18, 0x06, 0x2d, 0xda, 0xca, 0xd8, 0xe9, 0xd1, 0x7e, 0x47, 0xfe, 0xae, 0x1f, 0x29, + 0x10, 0x6d, 0x42, 0x85, 0xf6, 0xfb, 0x4a, 0x4e, 0xbf, 0xed, 0x42, 0xeb, 0x9d, 0x24, 0x3a, 0x5a, + 0x7d, 0x5c, 0x54, 0x3d, 0x9f, 0xc2, 0x42, 0xba, 0x0e, 0xf7, 0xe7, 0xca, 0xe4, 0xb1, 0x95, 0x0f, + 0x7a, 0x91, 0x5f, 0x0b, 0xe2, 0x7b, 0xe9, 0xa5, 0xd0, 0xa2, 0xb0, 0x9b, 0x7a, 0x30, 0xd4, 0x1c, + 0xac, 0x09, 0x38, 0x28, 0x0a, 0xe7, 0x22, 0x99, 0xc4, 0xff, 0x6f, 0xc3, 0xa6, 0xe8, 0xfd, 0x59, + 0x41, 0x3c, 0x5d, 0xf3, 0x12, 0xaf, 0xc6, 0x51, 0x20, 0x69, 0x9c, 0x1b, 0x64, 0xba, 0x49, 0x47, + 0x3d, 0xe8, 0xec, 0xdd, 0xa0, 0x53, 0x8b, 0x7d, 0xe1, 0xea, 0xea, 0x4b, 0x48, 0xbe, 0xa6, 0xc1, + 0x74, 0xbc, 0x17, 0x79, 0xdb, 0x04, 0x0b, 0x03, 0x07, 0x66, 0x79, 0xc7, 0x55, 0x0b, 0x71, 0x8c, + 0x71, 0x22, 0x19, 0x8b, 0xf0, 0x05, 0x63, 0x4d, 0x8d, 0xb3, 0x35, 0x35, 0x33, 0x60, 0x3d, 0xfd, + 0xa3, 0x92, 0x18, 0x93, 0x8d, 0xa0, 0x6d, 0x8b, 0x07, 0xfa, 0x99, 0x63, 0xbf, 0x19, 0xf9, 0x89, + 0x31, 0x2a, 0xea, 0x33, 0x37, 0x14, 0x06, 0x0c, 0x2a, 0x5c, 0xfc, 0xf1, 0xbe, 0x17, 0xb1, 0xd9, + 0x22, 0xc6, 0x46, 0x2d, 0xfe, 0x86, 0x44, 0x80, 0xa6, 0xb1, 0x16, 0x7f, 0x25, 0x77, 0xf1, 0xff, + 0xf3, 0x12, 0x99, 0x5c, 0x0d, 0x3a, 0x2d, 0x3a, 0x14, 0xce, 0x17, 0xc9, 0xd4, 0x81, 0x9f, 0x78, + 0x2d, 0x3a, 0x5c, 0x62, 0xdd, 0xbf, 0x70, 0xfc, 0xe4, 0xb9, 0xb5, 0xf3, 0x55, 0xbf, 0x99, 0xdc, + 0xa0, 0x65, 0x74, 0x37, 0x34, 0x0c, 0x14, 0x37, 0xe7, 0x36, 0x99, 0x48, 0xbc, 0x68, 0xcf, 0x4f, + 0xc4, 0x72, 0xbf, 0x58, 0x84, 0x2f, 0xe0, 0x54, 0xf3, 0x3b, 0x4d, 0x5f, 0x0b, 0xc6, 0x6d, 0xc6, + 0x04, 0x04, 0x33, 0xb7, 0x49, 0x66, 0xd6, 0xbc, 0xae, 0xb7, 0x13, 0xb4, 0xa9, 0xdc, 0xf3, 0x63, + 0xe7, 0xd3, 0xa4, 0xe2, 0xb5, 0x5a, 0x6c, 0xe2, 0x57, 0x57, 0x1f, 0xa3, 0x05, 0x2a, 0x2b, 0xad, + 0x16, 0x9d, 0x06, 0x44, 0x51, 0x1d, 0x01, 0x52, 0x38, 0x17, 0xc8, 0x58, 0x2b, 0x0a, 0xbb, 0xb4, + 0x35, 0x48, 0x79, 0x1e, 0x57, 0x68, 0x8d, 0xfe, 0x4e, 0x91, 0x32, 0x1a, 0xf7, 0x5f, 0x97, 0x89, + 0xb3, 0xe6, 0x77, 0xf7, 0x37, 0x1a, 0xd6, 0xb7, 0xa4, 0xf3, 0xe1, 0x20, 0xa4, 0x42, 0x20, 0x8c, + 0x62, 0x51, 0x21, 0x9b, 0x0f, 0x37, 0x04, 0x0c, 0x14, 0xd6, 0x79, 0x86, 0x8c, 0x75, 0xf5, 0xb2, + 0x9e, 0x91, 0x22, 0x81, 0x2d, 0x68, 0x86, 0x41, 0x8a, 0x5e, 0xec, 0x47, 0x62, 0x1e, 0x2b, 0x8a, + 0xdb, 0x14, 0x06, 0x0c, 0xa3, 0x67, 0x0e, 0xce, 0x29, 0x31, 0x4b, 0x53, 0x33, 0x07, 0x31, 0x60, + 0x50, 0x39, 0x3f, 0x4a, 0x67, 0x0e, 0xfb, 0x45, 0x07, 0x92, 0x4d, 0xd9, 0x5c, 0x61, 0xb0, 0x15, + 0x36, 0xbd, 0x76, 0x7a, 0xf0, 0x67, 0xd9, 0x4c, 0x93, 0x8c, 0x40, 0xf3, 0xb4, 0x66, 0xda, 0x44, + 0xee, 0x4c, 0xfb, 0x1b, 0x25, 0x3a, 0x8e, 0x74, 0xa6, 0xf9, 0xd1, 0x29, 0x6c, 0x99, 0xc3, 0x2d, + 0x82, 0x3f, 0xc0, 0xa6, 0x85, 0x07, 0x5d, 0xaa, 0x5a, 0x74, 0x92, 0xb5, 0x90, 0xae, 0x06, 0xb6, + 0x8d, 0x7e, 0x86, 0x8c, 0x25, 0x58, 0x15, 0x6f, 0xd6, 0xf3, 0xf2, 0xb3, 0x60, 0x05, 0x74, 0xa6, + 0x9c, 0xef, 0x2f, 0xc1, 0x9a, 0xc0, 0xca, 0x38, 0x6f, 0x91, 0x89, 0x38, 0xf1, 0x92, 0x5e, 0x2c, + 0x1a, 0xfa, 0x49, 0xd9, 0xd0, 0x06, 0x83, 0xd2, 0xf2, 0xf3, 0xaa, 0x18, 0x07, 0x81, 0x28, 0xe0, + 0xbc, 0x48, 0x26, 0x0f, 0xfc, 0x38, 0xf6, 0xf6, 0xa4, 0x60, 0x9b, 0x17, 0x65, 0x27, 0x6f, 0x70, + 0x30, 0x48, 0xbc, 0xf3, 0x29, 0x32, 0xee, 0x47, 0x51, 0x18, 0x89, 0x19, 0x31, 0x2b, 0x08, 0xc7, + 0xd7, 0x11, 0x08, 0x1c, 0xe7, 0xfe, 0x4e, 0x89, 0xcc, 0xab, 0xb6, 0xf2, 0xba, 0x46, 0xb8, 0xd4, + 0x5b, 0x84, 0x34, 0x65, 0xc7, 0x62, 0xb6, 0xc0, 0xa6, 0xaf, 0xbc, 0x72, 0x3c, 0xef, 0xfe, 0x81, + 0xd4, 0x75, 0x28, 0x50, 0x0c, 0x06, 0x5f, 0xf7, 0xbb, 0x25, 0x72, 0x36, 0xd5, 0xa7, 0xad, 0x20, + 0x4e, 0x9c, 0x3f, 0xdf, 0xd7, 0xaf, 0x4b, 0xc7, 0xd4, 0x6d, 0x68, 0x94, 0xcb, 0x58, 0x9c, 0x75, + 0x4f, 0x4d, 0x14, 0x09, 0x31, 0x3a, 0x07, 0x64, 0x3c, 0x48, 0xfc, 0x03, 0xd9, 0xaf, 0x8b, 0x05, + 0xfb, 0xc5, 0x1b, 0xa8, 0x3f, 0xcf, 0x26, 0xf2, 0x00, 0xce, 0xca, 0xfd, 0x1f, 0x74, 0x1f, 0xa7, + 0xbd, 0xdc, 0x0d, 0xf6, 0x6e, 0x78, 0xdd, 0x11, 0x7e, 0x98, 0x06, 0x95, 0x79, 0xc8, 0x95, 0x37, + 0xfd, 0x72, 0x5e, 0xd3, 0x45, 0x83, 0x96, 0x71, 0xf3, 0xe4, 0x5a, 0x81, 0x92, 0x4b, 0x08, 0x02, + 0xc6, 0x6c, 0xe9, 0x0d, 0x52, 0x55, 0x04, 0xce, 0x02, 0xa9, 0xdc, 0xf3, 0xb9, 0xca, 0x58, 0x05, + 0xfc, 0xd7, 0x39, 0x47, 0xc6, 0x0f, 0xbd, 0x76, 0x4f, 0xac, 0x56, 0xe0, 0x3f, 0x3e, 0x53, 0x7e, + 0xb3, 0xe4, 0xfe, 0x46, 0x89, 0x9c, 0x53, 0x95, 0x5c, 0xf7, 0x8f, 0x1a, 0x7e, 0x9b, 0x36, 0x39, + 0x8c, 0x9c, 0x9f, 0xa4, 0x88, 0x76, 0x86, 0x1c, 0x12, 0xa3, 0x71, 0x12, 0x09, 0xf6, 0x09, 0xd1, + 0xf0, 0x73, 0x59, 0x58, 0xc8, 0xac, 0xcd, 0x79, 0x92, 0xf7, 0x85, 0x2f, 0xde, 0x69, 0xc1, 0xa0, + 0x42, 0x1b, 0xca, 0x3a, 0x86, 0xcd, 0x9f, 0x55, 0xcd, 0x3f, 0x8d, 0x99, 0xb7, 0x65, 0xcf, 0xbc, + 0x4f, 0x17, 0xfc, 0x7c, 0x03, 0xe6, 0xdc, 0xdf, 0xa1, 0x6a, 0x9b, 0xa2, 0xb1, 0xc4, 0xf1, 0x23, + 0x32, 0xfc, 0xc3, 0x75, 0x97, 0x7e, 0x96, 0xed, 0x10, 0xf7, 0xd3, 0xec, 0xee, 0x3a, 0x97, 0xc9, + 0x74, 0xcb, 0xdf, 0xf5, 0x7a, 0xed, 0x44, 0xa9, 0x8b, 0xe3, 0xdc, 0x8e, 0xa8, 0x69, 0x30, 0x98, + 0x34, 0xee, 0x6f, 0x57, 0xd9, 0xaa, 0x4c, 0xbc, 0x80, 0x9a, 0x81, 0xb8, 0x41, 0x1b, 0x5a, 0xfd, + 0x8c, 0xa9, 0xd5, 0x0b, 0x0d, 0x9e, 0x4a, 0xe2, 0xe0, 0x00, 0x45, 0x76, 0xd9, 0x96, 0xc4, 0x9b, + 0x08, 0x04, 0x8e, 0x73, 0x9e, 0x23, 0x93, 0xd4, 0x74, 0x3e, 0xf0, 0x3a, 0x2d, 0xda, 0x06, 0x54, + 0x19, 0xa6, 0x51, 0xaa, 0xaf, 0x71, 0x10, 0x48, 0x9c, 0xf3, 0x09, 0x32, 0x46, 0xf5, 0x9b, 0x98, + 0x0a, 0x75, 0xa4, 0x99, 0xc2, 0x9a, 0x56, 0xe8, 0x6f, 0x60, 0x50, 0x54, 0x05, 0xee, 0x87, 0xd1, + 0x3d, 0xaa, 0xb0, 0xd5, 0x82, 0x88, 0xed, 0xeb, 0x86, 0x2a, 0x70, 0x57, 0x61, 0xc0, 0xa0, 0x72, + 0xea, 0x64, 0xbc, 0x1b, 0x46, 0x49, 0x4c, 0xb7, 0x69, 0x1c, 0xce, 0x97, 0x72, 0x67, 0x0f, 0xef, + 0x77, 0x9d, 0x96, 0xd1, 0x5d, 0xc1, 0x5f, 0x74, 0x48, 0x19, 0x23, 0x67, 0x8d, 0x54, 0xfc, 0xce, + 0xe1, 0xe2, 0x24, 0xe3, 0xf7, 0xec, 0xf1, 0xfc, 0xd6, 0x3b, 0x87, 0x77, 0xbc, 0x48, 0xaf, 0x22, + 0xfa, 0x1b, 0xb0, 0xb4, 0xd3, 0x24, 0x55, 0xe9, 0x08, 0x88, 0x17, 0xa7, 0x8a, 0x4c, 0x30, 0x10, + 0xe4, 0xe0, 0xbf, 0xdf, 0x0b, 0x22, 0xff, 0x80, 0x0a, 0xd7, 0x58, 0xeb, 0xc3, 0x12, 0x1b, 0x83, + 0xe6, 0x4b, 0x2b, 0x99, 0xe1, 0xea, 0xc3, 0x8d, 0xb0, 0x47, 0xa9, 0x17, 0xab, 0xac, 0xc9, 0x39, + 0x06, 0xe7, 0x1d, 0x5d, 0x62, 0xf5, 0x9c, 0x60, 0x3f, 0x63, 0x00, 0x63, 0xb0, 0x98, 0x52, 0xa3, + 0x76, 0xb6, 0x1d, 0x1c, 0xfa, 0x1d, 0xba, 0x2f, 0xd7, 0xa3, 0x70, 0xc7, 0x5f, 0x24, 0xac, 0x37, + 0x9f, 0xca, 0x33, 0xbe, 0x28, 0xe9, 0xea, 0x19, 0xca, 0x7b, 0x76, 0xcb, 0x2c, 0x0d, 0x36, 0x33, + 0xaa, 0xc9, 0xcd, 0xa1, 0xae, 0x12, 0x68, 0xf6, 0xd3, 0xc5, 0xd9, 0x3b, 0x94, 0xfd, 0x1c, 0x58, + 0xc5, 0x21, 0xc5, 0xce, 0xd9, 0x26, 0xd5, 0x76, 0xb0, 0xeb, 0x37, 0x8f, 0x9a, 0x54, 0xbb, 0x9c, + 0x61, 0xbc, 0x73, 0x96, 0xdc, 0x96, 0x24, 0xe7, 0xfa, 0xa1, 0xfa, 0x09, 0x9a, 0x91, 0x73, 0x87, + 0x9c, 0x4f, 0xfc, 0xe8, 0x20, 0xe8, 0x78, 0xb8, 0x69, 0x0b, 0xe5, 0x85, 0x59, 0xb8, 0xb3, 0x6c, + 0xd6, 0x3e, 0x25, 0x06, 0xf6, 0xfc, 0x76, 0x26, 0x15, 0x0c, 0x28, 0xed, 0xdc, 0x22, 0xf3, 0x6c, + 0x3d, 0xd5, 0x7b, 0xed, 0x76, 0x3d, 0x6c, 0x07, 0xcd, 0xa3, 0xc5, 0x39, 0xc6, 0xf0, 0x39, 0x69, + 0xb7, 0x6e, 0xda, 0x68, 0xd4, 0xeb, 0xf5, 0x2f, 0x48, 0x97, 0x46, 0xa7, 0x01, 0xd5, 0x6a, 0x7b, + 0x11, 0x55, 0xfa, 0x71, 0xee, 0xfb, 0x0f, 0x92, 0xc5, 0xf9, 0x22, 0x76, 0x4a, 0xc3, 0x2e, 0xc4, + 0x9d, 0x06, 0x29, 0x20, 0xa4, 0x59, 0xa3, 0xa8, 0x88, 0x13, 0x3a, 0xfa, 0x8b, 0x0b, 0x4c, 0x31, + 0x55, 0xeb, 0xab, 0x81, 0x40, 0xe0, 0x38, 0x66, 0xf6, 0xe1, 0x3f, 0xb7, 0x50, 0xf6, 0x9e, 0x61, + 0x84, 0xda, 0xec, 0x93, 0x08, 0xd0, 0x34, 0xb8, 0x61, 0x25, 0xc9, 0xd1, 0xa2, 0xc3, 0x48, 0xd5, + 0x52, 0xdb, 0xde, 0xfe, 0x12, 0x20, 0xdc, 0xdd, 0x21, 0x73, 0x6a, 0x59, 0xb3, 0xd1, 0x71, 0x9e, + 0x26, 0xe3, 0x28, 0xb9, 0xa4, 0xf5, 0x52, 0xc5, 0x26, 0xa0, 0x40, 0xa3, 0x4b, 0x9c, 0xc1, 0x59, + 0x13, 0x82, 0x0f, 0xfc, 0xd5, 0x23, 0xda, 0x6b, 0x26, 0xd6, 0x2a, 0x46, 0x13, 0x24, 0x02, 0x34, + 0x8d, 0xfb, 0xbf, 0xf9, 0xa6, 0xa8, 0x65, 0x47, 0x01, 0xb9, 0x49, 0x15, 0xf5, 0xfd, 0x30, 0x4e, + 0x90, 0x9a, 0xd5, 0x31, 0xae, 0x77, 0xc1, 0x6b, 0x02, 0x0e, 0x8a, 0xc2, 0xf9, 0x2c, 0x99, 0x6d, + 0x9a, 0x15, 0x08, 0x51, 0xfe, 0x98, 0x28, 0x62, 0xd7, 0x0e, 0x36, 0xad, 0xf3, 0x26, 0x99, 0x62, + 0xae, 0xbc, 0x66, 0xd8, 0x16, 0xfa, 0xb2, 0xdc, 0x99, 0xa6, 0xea, 0x02, 0xfe, 0xa1, 0xf1, 0x3f, + 0x28, 0x6a, 0xb4, 0x3a, 0xb0, 0x09, 0x9b, 0x75, 0x21, 0x6e, 0x95, 0xd5, 0x71, 0x8d, 0x41, 0x41, + 0x60, 0xdd, 0x5f, 0x29, 0x1b, 0xa3, 0x8c, 0x4a, 0x9f, 0xef, 0xfc, 0x08, 0x99, 0xbc, 0xef, 0x51, + 0xa5, 0xb5, 0xb3, 0x27, 0x76, 0xd0, 0x57, 0x0b, 0xca, 0x5e, 0x56, 0xfc, 0x2e, 0x2f, 0xca, 0xf7, + 0x09, 0xf1, 0x03, 0x24, 0x43, 0xe4, 0x1d, 0xf5, 0x3a, 0x1d, 0xe4, 0x5d, 0x1e, 0x9e, 0x37, 0xf0, + 0xa2, 0x9c, 0xb7, 0xf8, 0x01, 0x92, 0xa1, 0xb3, 0x4b, 0x88, 0x5c, 0x7d, 0x7e, 0x4b, 0xb8, 0xd0, + 0x7e, 0x68, 0x18, 0xf6, 0xdb, 0xaa, 0xf4, 0xea, 0x1c, 0xee, 0x4c, 0xfa, 0x37, 0x18, 0x9c, 0xdd, + 0x1e, 0x53, 0x44, 0xfa, 0x9b, 0x45, 0x25, 0x2a, 0x9d, 0xdc, 0x5e, 0x44, 0x69, 0x56, 0x12, 0x31, + 0x74, 0x2f, 0x15, 0x54, 0xa8, 0xb6, 0x83, 0x03, 0xdf, 0x5c, 0x2d, 0x82, 0x0b, 0x68, 0x86, 0xee, + 0xb7, 0x2b, 0x64, 0x71, 0x50, 0x7b, 0x71, 0x4e, 0xfa, 0x0f, 0x02, 0x6a, 0x8d, 0xb4, 0xf8, 0xcc, + 0x35, 0xe6, 0xe4, 0xba, 0x80, 0x83, 0xa2, 0xc0, 0xc9, 0x11, 0x07, 0x7b, 0x1d, 0xaf, 0x2d, 0xe6, + 0xaf, 0x9a, 0x1c, 0x0d, 0x06, 0x05, 0x81, 0x45, 0x3a, 0x2a, 0x75, 0x63, 0xe1, 0xc2, 0x35, 0x26, + 0x11, 0x30, 0x28, 0x08, 0xac, 0x69, 0xfe, 0x8d, 0xe5, 0x98, 0x7f, 0xd6, 0x18, 0x8d, 0x3f, 0xe4, + 0x31, 0xa2, 0xbb, 0x0e, 0x41, 0x37, 0x67, 0xbc, 0xcf, 0xd8, 0x4f, 0x0c, 0xcf, 0x5e, 0x69, 0x25, + 0x1b, 0x8a, 0x0d, 0x18, 0x2c, 0x9d, 0xd7, 0xc9, 0xb4, 0x5a, 0xa1, 0xd4, 0xfa, 0x9f, 0xb4, 0x1d, + 0x7f, 0x5a, 0x5c, 0xd5, 0xc0, 0xa4, 0x73, 0xbf, 0x9a, 0x9e, 0x32, 0x62, 0x61, 0x18, 0x23, 0x5c, + 0x2a, 0x3a, 0xc2, 0xe5, 0xe3, 0x47, 0xd8, 0xfd, 0x4f, 0x15, 0xb4, 0x9d, 0x8d, 0xca, 0x7a, 0x71, + 0x01, 0xa1, 0xf6, 0x0e, 0x4a, 0x78, 0xda, 0x30, 0xb1, 0x2c, 0x5f, 0x1e, 0x66, 0xdd, 0x98, 0xfb, + 0x01, 0x2e, 0x07, 0xce, 0xc9, 0xd9, 0xa7, 0x3b, 0xb4, 0x17, 0x33, 0x4b, 0xd2, 0x17, 0xcb, 0x71, + 0x38, 0xb6, 0x5a, 0x0b, 0xa7, 0x6c, 0x8c, 0x0d, 0x97, 0xd7, 0xa2, 0x99, 0xe3, 0xf6, 0x84, 0xda, + 0x81, 0x3c, 0x39, 0x50, 0xcd, 0x41, 0x15, 0xe2, 0x08, 0x38, 0x8e, 0xca, 0xd2, 0x19, 0xaa, 0x61, + 0xe1, 0x54, 0x59, 0x43, 0x05, 0x88, 0x4d, 0xbe, 0x71, 0xad, 0x29, 0x81, 0x81, 0x03, 0x8b, 0x52, + 0x2b, 0xca, 0x13, 0xc7, 0x28, 0xca, 0xf4, 0x0b, 0xb1, 0x7f, 0xd4, 0xac, 0x50, 0x5f, 0x68, 0x93, + 0x83, 0x41, 0xe2, 0xd3, 0x93, 0x68, 0xaa, 0xe0, 0x24, 0xba, 0x40, 0xe6, 0x6a, 0x9e, 0x7f, 0x10, + 0x76, 0xd6, 0x3b, 0xad, 0x6e, 0x18, 0xd0, 0x86, 0x2d, 0x92, 0x31, 0xb6, 0xa5, 0xf0, 0x15, 0x3f, + 0x86, 0x1c, 0x60, 0x0c, 0x95, 0x5d, 0xf7, 0xff, 0xd0, 0x7d, 0xad, 0x46, 0xed, 0xd3, 0xc4, 0xbf, + 0xd5, 0x65, 0xee, 0x07, 0x67, 0x83, 0x38, 0x7b, 0x91, 0xd7, 0xf4, 0xeb, 0x7e, 0x14, 0x84, 0x2d, + 0xba, 0xe3, 0x87, 0x1d, 0xe6, 0x70, 0xc7, 0x3d, 0x12, 0xbd, 0x89, 0xce, 0xd5, 0x3e, 0x2c, 0x64, + 0x94, 0x70, 0x5a, 0x64, 0xb6, 0x1b, 0xf9, 0x96, 0xbf, 0xa4, 0x94, 0xaf, 0x9f, 0xd7, 0xcd, 0x22, + 0x5c, 0x7d, 0xb4, 0x40, 0x60, 0x33, 0x75, 0xde, 0x26, 0x0b, 0x61, 0xd4, 0xdd, 0xf7, 0x3a, 0x35, + 0xbf, 0xeb, 0x77, 0x5a, 0xa8, 0x33, 0x0b, 0xa7, 0xd8, 0x39, 0x5a, 0x76, 0xe1, 0x56, 0x0a, 0x07, + 0x7d, 0xd4, 0xee, 0x2f, 0x51, 0x7b, 0xb1, 0x16, 0xde, 0xef, 0xdc, 0xf7, 0xa2, 0xd6, 0x4a, 0x7d, + 0x93, 0x2b, 0xc2, 0xcc, 0xc9, 0x28, 0x9d, 0x9b, 0xa5, 0x81, 0xce, 0xcd, 0x2f, 0x93, 0xa9, 0xdd, + 0xc0, 0x6f, 0xb7, 0xd0, 0x0b, 0xc9, 0xbb, 0x77, 0xb9, 0x88, 0x47, 0x63, 0x03, 0xcb, 0x48, 0xaf, + 0x00, 0xf7, 0xad, 0x6e, 0x08, 0x36, 0xa0, 0x18, 0x3a, 0x3d, 0xb2, 0x20, 0x35, 0x7d, 0x89, 0x15, + 0xab, 0xe3, 0xd5, 0x62, 0x86, 0x84, 0x5d, 0x0d, 0x1b, 0x0f, 0x48, 0x31, 0x84, 0xbe, 0x2a, 0xd0, + 0x42, 0x3b, 0xc0, 0xdd, 0x61, 0x8c, 0xcd, 0x15, 0x66, 0xa1, 0x31, 0x13, 0x92, 0x41, 0xdd, 0x5f, + 0x2c, 0x91, 0xc7, 0xfb, 0x46, 0x4b, 0xd8, 0xd7, 0x5f, 0x94, 0x86, 0x2d, 0x3f, 0x9d, 0xc9, 0x69, + 0x65, 0xe6, 0x98, 0x17, 0x33, 0x72, 0xcb, 0x05, 0x8c, 0xdc, 0x5b, 0xe4, 0xdc, 0xfa, 0x41, 0x37, + 0x39, 0xa2, 0x26, 0xa2, 0xd5, 0xc8, 0x37, 0xc8, 0xc4, 0x81, 0xdf, 0x0a, 0x7a, 0x07, 0xe2, 0xb3, + 0x3e, 0x2d, 0x05, 0xe9, 0x0d, 0x06, 0xa5, 0x5a, 0xd2, 0x2c, 0x9e, 0x7d, 0xd2, 0x05, 0xc8, 0x01, + 0x20, 0xc8, 0xdd, 0x1f, 0x94, 0xc8, 0xbc, 0x5c, 0x50, 0x2b, 0xad, 0x16, 0x1d, 0xb7, 0xd8, 0x59, + 0x22, 0xe5, 0xa0, 0x2b, 0x18, 0x11, 0xc1, 0xa8, 0x4c, 0x95, 0x26, 0x0a, 0xa5, 0x1a, 0x4c, 0x95, + 0xbb, 0xf2, 0xf5, 0xe4, 0x18, 0xf2, 0x68, 0x80, 0x59, 0x1f, 0xdb, 0x92, 0x07, 0x68, 0x76, 0x52, + 0xb3, 0x64, 0xa2, 0xba, 0x62, 0x3b, 0x96, 0xaf, 0x09, 0x38, 0x28, 0x0a, 0x74, 0xe7, 0xe3, 0x29, + 0x25, 0x3b, 0x65, 0xe1, 0xdb, 0x2e, 0x9b, 0x72, 0x37, 0x05, 0x0c, 0x14, 0xd6, 0xfd, 0x99, 0x12, + 0x99, 0x91, 0x7d, 0x2c, 0xa8, 0xe4, 0xe2, 0x22, 0xd1, 0x0a, 0xae, 0x5e, 0x24, 0xa8, 0xa4, 0x32, + 0x8c, 0xa5, 0x9b, 0x56, 0x86, 0xd1, 0x4d, 0xdd, 0x6f, 0x53, 0x9d, 0x53, 0x36, 0xa7, 0xd1, 0xdb, + 0x89, 0xfd, 0xc4, 0xf9, 0x0a, 0xa9, 0x7a, 0x7c, 0xf0, 0x7d, 0x39, 0xcf, 0x2e, 0xe6, 0x59, 0xe8, + 0xd6, 0x37, 0xd3, 0x8a, 0xc1, 0x8a, 0xe4, 0x03, 0x9a, 0xa5, 0x73, 0x48, 0xce, 0x74, 0xc2, 0x84, + 0xed, 0x07, 0x0a, 0x5f, 0xcc, 0x23, 0x9a, 0xae, 0xe7, 0x09, 0x51, 0xcf, 0x99, 0x9b, 0x69, 0x7e, + 0xd0, 0x5f, 0x05, 0xb5, 0xfb, 0x84, 0x17, 0xa3, 0xc2, 0xea, 0xba, 0x50, 0xac, 0xae, 0xc1, 0x4e, + 0x0c, 0xf7, 0x37, 0x4b, 0xa4, 0x2a, 0xc9, 0x46, 0xe9, 0x13, 0xbf, 0x4b, 0x26, 0x63, 0xf6, 0x69, + 0xe4, 0x30, 0xbd, 0x5c, 0xac, 0xe9, 0xfc, 0x7b, 0xea, 0xcd, 0x8f, 0xff, 0x8e, 0x41, 0x72, 0x63, + 0x6e, 0x48, 0xd5, 0x81, 0x47, 0xcf, 0x0d, 0xa9, 0x9a, 0x36, 0xc0, 0x0d, 0xf9, 0x0f, 0x4a, 0x64, + 0x82, 0x3b, 0x87, 0x8a, 0x79, 0xd8, 0x0c, 0x5f, 0xb2, 0xe6, 0x78, 0x07, 0x81, 0xc2, 0xb5, 0x4c, + 0x47, 0xba, 0xca, 0xfe, 0xd9, 0x88, 0xc2, 0x03, 0xb1, 0x11, 0x5c, 0x28, 0xe2, 0x9c, 0xe2, 0x82, + 0x8f, 0x4b, 0x93, 0x3b, 0x92, 0x01, 0x68, 0x5e, 0xee, 0x6f, 0x54, 0x70, 0xd5, 0x6b, 0x52, 0x6b, + 0x5b, 0x2b, 0x9d, 0xc6, 0xb6, 0x56, 0x1e, 0xfd, 0xb6, 0xf6, 0x3e, 0x99, 0x6f, 0x1a, 0x3e, 0x79, + 0xbd, 0x99, 0x5e, 0x29, 0xe8, 0x6e, 0x36, 0x1c, 0xf9, 0xdc, 0x19, 0xb2, 0x66, 0xb3, 0x83, 0x34, + 0x7f, 0xc7, 0x27, 0x33, 0xfc, 0x40, 0x51, 0xd4, 0x37, 0x96, 0x3b, 0x67, 0xb9, 0xdf, 0x85, 0x97, + 0x50, 0x95, 0xb1, 0xa0, 0x93, 0x86, 0xc1, 0x08, 0x2c, 0xb6, 0xee, 0x5f, 0x1b, 0x27, 0xe3, 0xeb, + 0x87, 0x54, 0x97, 0x19, 0xe1, 0x2a, 0x3f, 0x20, 0x73, 0x41, 0xe7, 0x30, 0x6c, 0x1f, 0xfa, 0x2d, + 0x8e, 0x3f, 0xd9, 0x8e, 0x76, 0x5e, 0x54, 0x32, 0xb7, 0x69, 0x31, 0x83, 0x14, 0xf3, 0x51, 0xd8, + 0x93, 0xef, 0x50, 0x53, 0x96, 0xcd, 0x08, 0x61, 0x4c, 0xe6, 0x38, 0x49, 0xd9, 0x80, 0x8a, 0x95, + 0xa3, 0xad, 0x5e, 0xee, 0x9f, 0x15, 0x8c, 0x9c, 0x7b, 0x64, 0x6e, 0x37, 0x88, 0xa8, 0xc5, 0x41, + 0x0d, 0x42, 0x6a, 0x05, 0x1c, 0x74, 0x4f, 0x62, 0x48, 0xaa, 0x21, 0xd9, 0xb0, 0x58, 0x41, 0x8a, + 0x35, 0x35, 0x92, 0x66, 0xd1, 0x8e, 0xd1, 0x75, 0x4d, 0x0e, 0x5f, 0x97, 0xf2, 0x25, 0x6d, 0x99, + 0x9c, 0xc0, 0x66, 0x8c, 0xc2, 0xa8, 0xc9, 0x0c, 0x9f, 0x29, 0xb6, 0xa5, 0x2b, 0x61, 0xc4, 0x2d, + 0x1e, 0x8e, 0x43, 0x99, 0xc6, 0xce, 0x8f, 0xab, 0xb6, 0x4c, 0xd3, 0xa7, 0xc4, 0xee, 0x37, 0x71, + 0x03, 0xc2, 0x51, 0x3c, 0x0d, 0xd9, 0x7d, 0xcd, 0x96, 0xdd, 0x9f, 0x2a, 0xf0, 0x71, 0x07, 0xc8, + 0xed, 0xf7, 0xc8, 0xb4, 0xf1, 0xed, 0xd1, 0x51, 0xd8, 0x94, 0x47, 0x9d, 0x42, 0x80, 0x2b, 0x05, + 0x42, 0x9d, 0x81, 0x82, 0xa6, 0xc1, 0x81, 0x41, 0xc5, 0x2b, 0x1d, 0x11, 0x81, 0x6a, 0x19, 0x30, + 0x8c, 0xfb, 0x2a, 0x21, 0xeb, 0x0f, 0xfc, 0xe6, 0x4a, 0x93, 0x1d, 0xc4, 0x1b, 0xe7, 0x26, 0xa5, + 0xc1, 0xe7, 0x26, 0xee, 0xbb, 0x74, 0x33, 0x7c, 0x80, 0x3b, 0xbb, 0x34, 0xd3, 0xe8, 0x12, 0xf1, + 0x19, 0x80, 0xb5, 0x6a, 0x4a, 0x4f, 0x52, 0x4e, 0x06, 0x02, 0xcb, 0x8e, 0xd1, 0x1f, 0x78, 0x62, + 0xc1, 0x1a, 0x26, 0xef, 0x3a, 0x02, 0x81, 0xe3, 0xdc, 0x6f, 0x94, 0xc8, 0xdc, 0xc6, 0x9a, 0xa5, + 0x27, 0x2f, 0x13, 0xc2, 0xf5, 0xcd, 0xbb, 0x77, 0x6f, 0x4a, 0x3f, 0x2a, 0x77, 0x76, 0x29, 0x28, + 0x18, 0x14, 0xce, 0x13, 0xa4, 0xd2, 0xee, 0x75, 0x84, 0x1a, 0x38, 0x89, 0xfe, 0xd9, 0xad, 0x5e, + 0x07, 0x10, 0x66, 0x04, 0x36, 0x54, 0x0a, 0x07, 0x36, 0xe4, 0x87, 0xf6, 0xfd, 0x7c, 0x85, 0x2c, + 0x6c, 0xb4, 0xfd, 0x07, 0x56, 0xab, 0x69, 0x55, 0xad, 0x28, 0xa0, 0x93, 0x27, 0xed, 0x26, 0xa9, + 0x31, 0x28, 0x08, 0x6c, 0xe1, 0x58, 0x0b, 0x2b, 0xce, 0xa4, 0x32, 0xe2, 0x38, 0x93, 0xdc, 0x3e, + 0x3b, 0xbb, 0x64, 0x32, 0xe4, 0xdf, 0x9f, 0x4a, 0x31, 0x9c, 0xe8, 0x9f, 0x3d, 0xbe, 0x31, 0xe9, + 0xf1, 0x59, 0x16, 0xb3, 0x87, 0x1f, 0x7a, 0x2b, 0x61, 0x29, 0xa0, 0x20, 0x99, 0x2f, 0x7d, 0x86, + 0xcc, 0x98, 0x94, 0x43, 0x9d, 0x7e, 0x6f, 0x91, 0xb3, 0x1b, 0x18, 0x41, 0x9a, 0x8a, 0x85, 0x79, + 0x9d, 0x9a, 0x70, 0x74, 0xa5, 0xc6, 0x56, 0x80, 0x98, 0x15, 0x09, 0x27, 0x50, 0x60, 0xd2, 0xb9, + 0xff, 0xa1, 0x44, 0x9e, 0xbc, 0xba, 0xb6, 0x5e, 0x47, 0x71, 0x10, 0x27, 0x74, 0x81, 0xf5, 0x05, + 0xe3, 0xd1, 0x4f, 0xd9, 0x6d, 0x19, 0x3c, 0xd5, 0xa7, 0xac, 0xd7, 0x18, 0x3b, 0x81, 0x7d, 0x54, + 0x22, 0x52, 0xa9, 0x5e, 0x78, 0xf6, 0x6a, 0x40, 0xbf, 0x7d, 0x37, 0x4c, 0xc7, 0xcf, 0x45, 0x14, + 0x16, 0x63, 0x5c, 0xd5, 0x51, 0x3a, 0x7e, 0x0e, 0x14, 0x06, 0x0c, 0x2a, 0x5e, 0xf3, 0x61, 0x80, + 0x82, 0x52, 0x74, 0xca, 0xa8, 0x99, 0xc3, 0x41, 0x51, 0x60, 0xc7, 0x5a, 0x41, 0xc4, 0x74, 0x8a, + 0x23, 0xb1, 0x12, 0x55, 0xc7, 0x6a, 0x12, 0x01, 0x9a, 0xc6, 0xfd, 0x5b, 0x25, 0xf2, 0xd8, 0xd5, + 0x76, 0x8f, 0x0e, 0x7b, 0xb4, 0x1b, 0x5b, 0x8d, 0x7d, 0x95, 0x54, 0x7d, 0xa9, 0xff, 0x8a, 0xb6, + 0xaa, 0xbd, 0x45, 0x29, 0xc6, 0x3c, 0x78, 0x4f, 0xd1, 0x15, 0x88, 0x15, 0x1b, 0x2e, 0xb2, 0xe9, + 0x5f, 0x94, 0xc9, 0xec, 0xb5, 0xed, 0xed, 0xfa, 0x55, 0x3f, 0x11, 0xb2, 0x34, 0xdf, 0x61, 0x53, + 0x37, 0xac, 0xd5, 0xe9, 0x2b, 0xcb, 0x03, 0x56, 0x0f, 0xc6, 0x4a, 0x2f, 0xf3, 0x58, 0xe9, 0xe5, + 0xcd, 0x4e, 0x72, 0x2b, 0x6a, 0x24, 0x11, 0x1e, 0x27, 0x64, 0x59, 0xb7, 0x52, 0xde, 0x57, 0x06, + 0xc9, 0x7b, 0x3a, 0x58, 0x13, 0x71, 0x73, 0xdf, 0x57, 0xc6, 0xf7, 0xc7, 0x95, 0x3a, 0xc1, 0xa0, + 0xd4, 0xf6, 0xad, 0xde, 0x86, 0x4d, 0xfe, 0x03, 0x04, 0x29, 0x15, 0x3c, 0xd3, 0xfb, 0x49, 0xd2, + 0xbd, 0x46, 0x3b, 0x4b, 0xa7, 0xbe, 0x58, 0xed, 0x39, 0xda, 0x1c, 0x0e, 0x06, 0x2f, 0xa0, 0x17, + 0x96, 0x86, 0xc5, 0x60, 0x72, 0x74, 0x1b, 0x84, 0x68, 0xdc, 0x43, 0x32, 0x51, 0xdc, 0xbf, 0x58, + 0x26, 0x93, 0xd7, 0xe8, 0x76, 0xd5, 0xa6, 0x2c, 0x37, 0xc8, 0x98, 0x4f, 0xb7, 0xb9, 0x62, 0x8a, + 0xa8, 0xde, 0x10, 0xb9, 0xc7, 0x09, 0x7f, 0x03, 0x2b, 0xef, 0x00, 0x99, 0xc4, 0x76, 0x5f, 0x55, + 0x01, 0x96, 0x2f, 0xe5, 0x8f, 0x82, 0x9a, 0x12, 0x7c, 0x37, 0x15, 0x20, 0x90, 0x8c, 0x98, 0x6f, + 0xa6, 0xd9, 0x6d, 0xa0, 0x94, 0x4a, 0x8a, 0xc5, 0x50, 0x6f, 0xaf, 0xd5, 0x39, 0xb9, 0xe0, 0xcb, + 0x7d, 0x33, 0x12, 0x08, 0x9a, 0x9d, 0xfb, 0x26, 0x39, 0xc7, 0x4e, 0xf7, 0xe8, 0x74, 0xb3, 0xd6, + 0x4c, 0xee, 0xe4, 0x74, 0xff, 0x6e, 0x99, 0x9c, 0xd9, 0x6c, 0xac, 0x35, 0x6c, 0xaf, 0xda, 0x9b, + 0x64, 0x86, 0x6f, 0xb3, 0x38, 0xe9, 0xbc, 0xb6, 0x28, 0xaf, 0xdc, 0xd1, 0xdb, 0x06, 0x0e, 0x2c, + 0x4a, 0x3c, 0x36, 0x0d, 0xde, 0xef, 0xa4, 0xe3, 0x7c, 0x36, 0xdf, 0xb9, 0x09, 0x08, 0x47, 0x34, + 0xee, 0xd8, 0x5c, 0xc4, 0x29, 0xb4, 0xda, 0xb5, 0x3f, 0x4f, 0x55, 0xfe, 0xb8, 0x19, 0x07, 0x74, + 0x01, 0xd0, 0xf5, 0xef, 0x35, 0xe5, 0xf4, 0xd5, 0x3a, 0x3c, 0x36, 0x55, 0x61, 0x21, 0x45, 0x6d, + 0xc8, 0xdb, 0xf1, 0xc2, 0xbb, 0x7e, 0x7e, 0xa4, 0xe5, 0x57, 0x49, 0x55, 0x45, 0xc4, 0xc8, 0x40, + 0xa6, 0x52, 0x76, 0x20, 0x53, 0x01, 0x81, 0x23, 0x7d, 0x9d, 0x95, 0x4c, 0x5f, 0xe7, 0x3f, 0xa6, + 0x1a, 0xac, 0x3a, 0xfc, 0xa7, 0xf3, 0xb0, 0x4a, 0x05, 0x6f, 0xc2, 0x8e, 0x93, 0xc4, 0xa4, 0x7e, + 0x2e, 0x67, 0x26, 0xf2, 0x95, 0xc0, 0xe7, 0x4a, 0x5d, 0x96, 0x05, 0xcd, 0xc6, 0xd9, 0x22, 0x93, + 0xdd, 0xc8, 0x6f, 0x24, 0x2c, 0x5c, 0x77, 0x08, 0x8e, 0x6c, 0x56, 0xd7, 0x79, 0x49, 0x90, 0x2c, + 0xdc, 0x5f, 0x2b, 0x11, 0xb2, 0x15, 0x1c, 0xd0, 0xcd, 0xc5, 0xeb, 0xec, 0xf9, 0x23, 0xb4, 0x06, + 0x6f, 0x92, 0xb1, 0xb8, 0x4b, 0x97, 0x76, 0xa1, 0x23, 0x20, 0xdd, 0xa2, 0x06, 0x2d, 0xa3, 0x3f, + 0x03, 0xfe, 0x02, 0xc6, 0xc7, 0xfd, 0x65, 0x42, 0xe6, 0x34, 0x19, 0xaa, 0xe3, 0xce, 0x45, 0x2b, + 0x3e, 0xf5, 0x89, 0x54, 0x7c, 0x6a, 0x95, 0x51, 0x1b, 0x21, 0xa9, 0x09, 0xa9, 0x1c, 0x78, 0x0f, + 0x84, 0xf6, 0xff, 0x7a, 0xd1, 0x06, 0x61, 0x4d, 0xcb, 0x37, 0xbc, 0x07, 0x5c, 0x1d, 0x7a, 0x49, + 0x4e, 0x20, 0x0a, 0xf9, 0x90, 0x1f, 0xf4, 0xb0, 0x15, 0x88, 0xe6, 0xc6, 0x4f, 0xfc, 0x67, 0xfd, + 0x9b, 0x09, 0x45, 0xac, 0x8e, 0xd5, 0x1a, 0x74, 0x84, 0xcb, 0x6e, 0xc8, 0x5a, 0x83, 0x4e, 0xba, + 0xd6, 0xa0, 0x53, 0xa0, 0xd6, 0xa0, 0x83, 0x61, 0x6c, 0x93, 0xc2, 0xd3, 0xcd, 0xc2, 0xa8, 0xa6, + 0xaf, 0xbc, 0x35, 0x54, 0xd5, 0xc2, 0x65, 0xce, 0xab, 0xbf, 0x24, 0x75, 0x40, 0x01, 0xcd, 0x6d, + 0x82, 0xac, 0xda, 0xf9, 0x05, 0x6a, 0x33, 0x88, 0xff, 0x31, 0x62, 0x89, 0x1a, 0x8f, 0x62, 0x97, + 0x7a, 0xfb, 0x24, 0xad, 0x11, 0x2c, 0x78, 0xa3, 0x7e, 0x48, 0x8a, 0x18, 0x1b, 0x99, 0xdb, 0xb6, + 0x54, 0x7b, 0x9c, 0x6f, 0x95, 0xc8, 0x39, 0xfa, 0x9d, 0x78, 0x8d, 0x1c, 0x06, 0x78, 0x30, 0x28, + 0x42, 0xc5, 0x36, 0x86, 0x9d, 0x27, 0x7d, 0x8c, 0x78, 0x73, 0x3f, 0x27, 0x8f, 0x1f, 0xb3, 0x48, + 0x72, 0x1b, 0x9d, 0xd9, 0xc2, 0xa5, 0x16, 0x99, 0x92, 0x13, 0x33, 0x43, 0xfb, 0x5e, 0x35, 0x37, + 0xe3, 0xe3, 0x57, 0xa0, 0x74, 0x84, 0x2d, 0xbf, 0xd3, 0xf3, 0x3a, 0x09, 0x86, 0xfe, 0x6b, 0x5d, + 0x9d, 0xd5, 0x22, 0x26, 0xe2, 0x08, 0x6b, 0xd9, 0x27, 0x33, 0xe6, 0x9c, 0x1b, 0x61, 0x4d, 0x21, + 0x39, 0x9b, 0x31, 0x9f, 0x46, 0x58, 0x61, 0x8f, 0x3c, 0x31, 0x70, 0x5e, 0x8c, 0xae, 0x5a, 0x74, + 0xee, 0x1b, 0x02, 0xf3, 0x34, 0x1c, 0x2c, 0x37, 0x6c, 0x07, 0xcb, 0x0b, 0x45, 0x97, 0xce, 0x00, + 0x2f, 0xcb, 0xae, 0xd9, 0x7e, 0xdc, 0x09, 0x9c, 0x6d, 0x32, 0xd1, 0x46, 0x88, 0x3c, 0xd5, 0x79, + 0x79, 0x98, 0xc5, 0xa9, 0x95, 0x0b, 0x06, 0x8f, 0x41, 0xf0, 0x72, 0x7f, 0xbd, 0x44, 0xc6, 0x4e, + 0x63, 0x78, 0xea, 0xf6, 0xf0, 0x0c, 0x52, 0x51, 0xc5, 0x9d, 0xcd, 0x65, 0xf0, 0xee, 0xaf, 0x3f, + 0xa0, 0xd6, 0x6c, 0xcc, 0x54, 0xc9, 0xcc, 0x11, 0xfa, 0xa5, 0x32, 0x99, 0xc6, 0x8a, 0xa4, 0xbf, + 0xe7, 0xb3, 0xe8, 0xff, 0xdb, 0xf1, 0xdb, 0xd2, 0x2d, 0x9c, 0x36, 0xbb, 0xb6, 0x4c, 0x24, 0xd8, + 0xb4, 0x58, 0x78, 0xd7, 0xf4, 0x9a, 0x0b, 0x95, 0x48, 0x15, 0xb6, 0x5c, 0xea, 0x60, 0xd3, 0xa2, + 0xe6, 0x7f, 0xdf, 0x4b, 0x9a, 0xfb, 0xc2, 0x24, 0x53, 0xcd, 0xbd, 0x8b, 0x40, 0xe0, 0x38, 0x67, + 0x85, 0xcc, 0xcb, 0x19, 0x7b, 0x87, 0x0f, 0x9d, 0x50, 0x17, 0xd5, 0x7d, 0x3b, 0xb0, 0xd1, 0x90, + 0xa6, 0x77, 0x3e, 0x43, 0xe6, 0x70, 0x70, 0xc2, 0x5e, 0x22, 0x83, 0x0e, 0xc6, 0x59, 0xd0, 0x01, + 0x0b, 0xf2, 0xdc, 0xb6, 0x30, 0x90, 0xa2, 0x74, 0x7f, 0x94, 0x9c, 0xdd, 0x0a, 0xbd, 0xd6, 0xaa, + 0xd7, 0xf6, 0x3a, 0x4d, 0x3f, 0xda, 0xec, 0xec, 0xe5, 0x9e, 0xcf, 0x9a, 0x67, 0xa8, 0xe5, 0xbc, + 0x33, 0x54, 0x37, 0x22, 0x8e, 0x59, 0x81, 0x08, 0x97, 0x79, 0x97, 0x4c, 0x06, 0xbc, 0x2a, 0x31, + 0x6b, 0x2f, 0xe7, 0x39, 0x87, 0xfa, 0xda, 0x68, 0x84, 0x7f, 0x70, 0x00, 0x48, 0x96, 0x68, 0x49, + 0x64, 0x79, 0x93, 0xf2, 0x8d, 0x35, 0xf7, 0xaf, 0x94, 0xc8, 0xfc, 0xcd, 0xd4, 0xa5, 0x2e, 0x8c, + 0xe5, 0xf2, 0xa3, 0x0c, 0xd7, 0x58, 0x83, 0x41, 0x41, 0x60, 0x1f, 0xba, 0x99, 0xfe, 0xd3, 0x65, + 0x52, 0x65, 0xb1, 0x97, 0x5d, 0xaf, 0x39, 0x4a, 0xa5, 0xf4, 0x86, 0xa5, 0x94, 0xe6, 0x18, 0x89, + 0xaa, 0x41, 0x83, 0x74, 0x52, 0xbc, 0xd6, 0x27, 0x2e, 0x39, 0x15, 0xb2, 0x0f, 0x35, 0x43, 0x7e, + 0x1f, 0x66, 0xce, 0xbe, 0x13, 0x25, 0x2f, 0x40, 0xb1, 0x53, 0x4d, 0x45, 0xfb, 0xe8, 0x9d, 0x6a, + 0xaa, 0xa6, 0x0d, 0x90, 0x4a, 0x75, 0xa3, 0xf5, 0x4c, 0x6c, 0x7f, 0x81, 0x05, 0xd2, 0x79, 0xed, + 0xe0, 0x03, 0x5f, 0x5d, 0x16, 0x7c, 0x5a, 0xc4, 0xc5, 0x09, 0xe8, 0x87, 0x4c, 0xc0, 0x88, 0x5f, + 0xfc, 0x0e, 0xa8, 0x2e, 0xe2, 0x5e, 0xa3, 0x33, 0xd5, 0x1e, 0x3b, 0xe7, 0x75, 0x32, 0xde, 0xdd, + 0xf7, 0x62, 0x3f, 0x15, 0xa1, 0x31, 0x5e, 0x47, 0x20, 0xe5, 0x36, 0xa7, 0x0a, 0x30, 0x08, 0x70, + 0x6a, 0xf7, 0x4f, 0xa8, 0xac, 0xc7, 0x98, 0x86, 0x11, 0xce, 0xb1, 0x6b, 0xd6, 0x1c, 0x7b, 0x3e, + 0xff, 0xe6, 0xf8, 0xc0, 0xe9, 0x55, 0x4f, 0x4d, 0xaf, 0x17, 0x0a, 0xf0, 0x3a, 0x7e, 0x66, 0x1d, + 0x90, 0x69, 0x76, 0x33, 0x5d, 0x84, 0xa6, 0xbc, 0x6a, 0x19, 0x50, 0x4f, 0xa7, 0x0c, 0xa8, 0x79, + 0x83, 0xd4, 0x30, 0xa3, 0x5e, 0x24, 0x93, 0x22, 0x14, 0x22, 0x1d, 0x3d, 0x28, 0x68, 0x41, 0xe2, + 0xdd, 0x5f, 0xad, 0x10, 0xeb, 0x26, 0xbc, 0xf3, 0x9d, 0x12, 0xa1, 0x4a, 0x0b, 0xbb, 0xba, 0xd0, + 0xaa, 0xf5, 0xd0, 0x5f, 0x86, 0x2e, 0xad, 0x56, 0xaf, 0x4d, 0xff, 0xdb, 0xdc, 0xeb, 0x84, 0x0a, + 0x8c, 0xbe, 0x9d, 0x1e, 0xf3, 0xae, 0x16, 0xbe, 0x80, 0xaf, 0xce, 0x42, 0xaf, 0xd0, 0xb6, 0x2c, + 0xc3, 0x50, 0xb5, 0xc0, 0x90, 0xad, 0x72, 0x7e, 0xaf, 0x44, 0x2e, 0xf1, 0xbb, 0xe0, 0xc5, 0x7b, + 0x52, 0xc8, 0xf0, 0xac, 0x4b, 0xa6, 0x9a, 0x1d, 0x06, 0x2b, 0xae, 0xbe, 0x21, 0x06, 0xf9, 0x52, + 0x7d, 0xb8, 0x5a, 0x61, 0xd8, 0x66, 0xba, 0xff, 0xaa, 0x42, 0xd7, 0x2f, 0x1d, 0x4f, 0x7d, 0x0f, + 0xf4, 0x75, 0x6b, 0x9a, 0x7c, 0x32, 0x35, 0x4d, 0xce, 0x58, 0xc4, 0x0f, 0xe7, 0x0a, 0x68, 0x42, + 0xce, 0xe0, 0x79, 0xe3, 0x35, 0xdf, 0x8b, 0x92, 0x1d, 0xdf, 0x63, 0x07, 0x8f, 0x62, 0x11, 0x0c, + 0x75, 0x98, 0xa9, 0xe2, 0x6b, 0xb6, 0xd2, 0xdc, 0xa0, 0xbf, 0x02, 0xe7, 0x3e, 0x71, 0xd8, 0x29, + 0x67, 0xe4, 0x51, 0xa5, 0x8b, 0x75, 0x26, 0x10, 0x0e, 0xd9, 0x21, 0xab, 0x5d, 0x12, 0xd5, 0x3a, + 0x5b, 0x7d, 0xec, 0x20, 0xa3, 0x0a, 0xe3, 0x28, 0x7b, 0xbc, 0xe8, 0x51, 0xf6, 0x44, 0x4e, 0xe0, + 0xee, 0x4f, 0x95, 0xc8, 0x59, 0xfc, 0x30, 0x76, 0x90, 0x67, 0xec, 0x84, 0x64, 0x1e, 0x7b, 0xd0, + 0xf6, 0x13, 0x09, 0x13, 0x2b, 0x2c, 0x47, 0x97, 0xb6, 0xf9, 0x68, 0x8d, 0xed, 0xba, 0xcd, 0x0c, + 0xd2, 0xdc, 0xdd, 0x5f, 0x2d, 0x11, 0x16, 0x45, 0x76, 0x1a, 0xfb, 0xd8, 0x55, 0x7b, 0x1f, 0x73, + 0xf3, 0x85, 0xc6, 0x80, 0x2d, 0xec, 0x35, 0xb2, 0x80, 0xd8, 0x7a, 0x14, 0x3e, 0x38, 0x92, 0xca, + 0x75, 0xbe, 0x6f, 0xf6, 0x2f, 0x97, 0xb8, 0xb8, 0x53, 0x5a, 0xf1, 0x7d, 0x0c, 0x14, 0xd3, 0xbf, + 0x71, 0x21, 0x4b, 0x25, 0x70, 0xb9, 0xb8, 0x40, 0x63, 0xeb, 0xdf, 0x88, 0x14, 0x4b, 0x31, 0x84, + 0xfe, 0x3a, 0xdc, 0xbf, 0x57, 0x22, 0x8f, 0x9b, 0x84, 0xc6, 0x75, 0xb1, 0x3c, 0x87, 0x68, 0x8d, + 0x4c, 0x85, 0x5d, 0xcc, 0xfc, 0xa2, 0x2c, 0x80, 0x17, 0xe4, 0x88, 0xdf, 0x12, 0x70, 0xba, 0x72, + 0xcf, 0x99, 0xdc, 0x25, 0x1c, 0x54, 0x49, 0xcc, 0x28, 0xc1, 0x2c, 0xd1, 0x58, 0x5c, 0xf4, 0x63, + 0x19, 0x25, 0xd8, 0x31, 0x00, 0x5d, 0xe4, 0x1c, 0xe3, 0xfe, 0xd5, 0x12, 0x1f, 0x65, 0xb3, 0xe9, + 0xce, 0xd7, 0xc8, 0xc2, 0x01, 0x1a, 0x0b, 0xeb, 0x0f, 0xba, 0xb8, 0x85, 0xb0, 0x63, 0xcc, 0x52, + 0x11, 0xc1, 0x39, 0xa0, 0xbb, 0xab, 0x8b, 0xa2, 0xf5, 0x0b, 0x37, 0x52, 0x6c, 0xa1, 0xaf, 0x22, + 0xf7, 0xf7, 0xc5, 0x5c, 0x65, 0x5a, 0x0b, 0x5d, 0x6c, 0xdd, 0xb0, 0xb5, 0xb6, 0x59, 0x03, 0x31, + 0x56, 0x6a, 0xb1, 0xd5, 0x39, 0x18, 0x24, 0x1e, 0xcf, 0xe5, 0x7c, 0x6a, 0xaa, 0x45, 0x54, 0x61, + 0xd9, 0xac, 0xa5, 0xd3, 0x97, 0xac, 0x2b, 0x0c, 0x18, 0x54, 0x58, 0xa6, 0x1b, 0x85, 0x87, 0x41, + 0x8b, 0x85, 0x6d, 0x57, 0xec, 0x32, 0x75, 0x85, 0x01, 0x83, 0x0a, 0x4d, 0xb4, 0x5e, 0x27, 0xe6, + 0x02, 0xdc, 0xdb, 0x11, 0x89, 0x10, 0xa6, 0xb4, 0x89, 0x76, 0xdb, 0x44, 0x82, 0x4d, 0xeb, 0xfe, + 0x4e, 0x95, 0x10, 0xad, 0x22, 0xa0, 0x87, 0x70, 0xaa, 0xe9, 0x51, 0x05, 0x89, 0x67, 0xb9, 0xa9, + 0xe4, 0xdf, 0x6f, 0xd1, 0x85, 0x97, 0xd7, 0x44, 0x41, 0xee, 0xdb, 0x7a, 0x45, 0x4e, 0x10, 0x09, + 0xce, 0xf5, 0x67, 0xa9, 0x9a, 0x9d, 0xaf, 0x97, 0xc8, 0xb4, 0xd7, 0xc6, 0x3b, 0xb0, 0x09, 0xeb, + 0x51, 0xb9, 0x88, 0xb3, 0xd2, 0x68, 0xc9, 0x8a, 0x2e, 0xcb, 0x1b, 0xf3, 0xaa, 0x3c, 0xd5, 0x32, + 0x30, 0xb9, 0xed, 0x31, 0x9b, 0xe0, 0xbc, 0x22, 0x55, 0x4b, 0xfe, 0x51, 0x96, 0xd2, 0xaa, 0x65, + 0x95, 0x89, 0x06, 0x43, 0xab, 0xc4, 0x9b, 0x22, 0x46, 0x0c, 0xfb, 0x58, 0x91, 0x3b, 0xa6, 0xd6, + 0xa6, 0x99, 0x77, 0xdd, 0x1f, 0xcf, 0xa2, 0x74, 0x44, 0xeb, 0x78, 0x91, 0x0b, 0x9c, 0x86, 0xee, + 0x96, 0x13, 0xcd, 0x9a, 0x90, 0xf9, 0x96, 0xbd, 0x49, 0x88, 0x10, 0xa5, 0xcb, 0xf9, 0x35, 0xa4, + 0x76, 0x17, 0xbd, 0x2d, 0xa4, 0x10, 0x90, 0xae, 0x82, 0xf6, 0x88, 0x45, 0x14, 0x6f, 0x76, 0x76, + 0x43, 0x11, 0xa5, 0xf4, 0x72, 0x81, 0x6f, 0x7e, 0x14, 0x53, 0xf1, 0x8c, 0x65, 0xf4, 0x36, 0x70, + 0x53, 0x70, 0x01, 0xc5, 0x0f, 0xdd, 0x44, 0xec, 0x76, 0x04, 0xde, 0xa9, 0xad, 0x0c, 0x71, 0x51, + 0x84, 0xdd, 0xad, 0xd0, 0x9b, 0x2f, 0xfb, 0x49, 0xc5, 0x15, 0xe7, 0x45, 0xf5, 0x7a, 0x71, 0xe5, + 0x35, 0xde, 0xec, 0xdc, 0x8e, 0x7d, 0x76, 0x8f, 0xb6, 0xba, 0xfa, 0xac, 0xbe, 0x18, 0xcb, 0xe1, + 0x99, 0x59, 0x8e, 0xac, 0x92, 0xb8, 0x07, 0x8b, 0xdf, 0x32, 0x79, 0xd2, 0x22, 0x29, 0xd2, 0x50, + 0x3b, 0xd5, 0x92, 0x1e, 0xec, 0x3b, 0x36, 0x33, 0x48, 0x73, 0x5f, 0x0a, 0xc8, 0xac, 0xb5, 0x62, + 0x47, 0xe8, 0xec, 0x6c, 0x93, 0x85, 0xf4, 0x92, 0x1c, 0xa1, 0x8f, 0xf3, 0x8f, 0xc7, 0xc8, 0x9c, + 0x3d, 0x31, 0x30, 0x82, 0xe1, 0x80, 0xa5, 0x36, 0xd2, 0x09, 0x55, 0xd4, 0xfc, 0xbf, 0x21, 0x11, + 0xa0, 0x69, 0x58, 0x6a, 0x19, 0x56, 0xfc, 0xf6, 0xed, 0x7e, 0xe1, 0xdd, 0x50, 0x18, 0x30, 0xa8, + 0x50, 0x61, 0xdb, 0x09, 0xc3, 0x44, 0x09, 0x6e, 0x35, 0x67, 0x56, 0x19, 0x14, 0x04, 0x16, 0x05, + 0xf6, 0x3d, 0xec, 0x50, 0xdb, 0xf6, 0x77, 0x29, 0x81, 0x7d, 0xdd, 0x44, 0x82, 0x4d, 0x8b, 0x1b, + 0x50, 0x18, 0xb3, 0x49, 0x28, 0xd4, 0x42, 0x1d, 0x8b, 0xd3, 0xe0, 0xb7, 0x85, 0x24, 0xde, 0xf9, + 0x12, 0x79, 0x5c, 0x5d, 0xee, 0x01, 0xee, 0x3f, 0x94, 0x35, 0x4e, 0x58, 0xb6, 0xdd, 0xe3, 0x6b, + 0xd9, 0x64, 0x30, 0xa8, 0x3c, 0x1e, 0xf1, 0x0a, 0x95, 0x4e, 0x72, 0x9c, 0xb4, 0x8f, 0x78, 0xaf, + 0x5b, 0x58, 0x48, 0x51, 0x53, 0x7d, 0x62, 0x01, 0x21, 0x4c, 0x95, 0x92, 0x1c, 0xf8, 0x25, 0x25, + 0xb5, 0x33, 0x5f, 0x4f, 0xe1, 0xa1, 0xaf, 0x04, 0xba, 0x0e, 0xb9, 0x6e, 0x81, 0x16, 0x0c, 0xfb, + 0x0e, 0x22, 0xaa, 0x50, 0x2d, 0x82, 0x5b, 0x36, 0x1a, 0xd2, 0xf4, 0x78, 0x46, 0xee, 0x45, 0xf4, + 0xa3, 0x27, 0x54, 0x45, 0xe8, 0x45, 0xfc, 0x86, 0xba, 0x71, 0x46, 0xbe, 0x62, 0xe0, 0xc0, 0xa2, + 0x74, 0x3f, 0x20, 0x67, 0x33, 0x82, 0x97, 0x71, 0xe2, 0xd0, 0x09, 0x2a, 0xfb, 0x94, 0x8a, 0xc6, + 0xc1, 0x1b, 0x2b, 0xa2, 0x37, 0x06, 0x15, 0xce, 0x4e, 0xe6, 0x38, 0x35, 0xf2, 0x9c, 0xa9, 0xd9, + 0xb9, 0x21, 0x11, 0xa0, 0x69, 0xdc, 0xff, 0x46, 0x77, 0x6d, 0xed, 0x66, 0x28, 0x10, 0x83, 0x41, + 0xbb, 0x29, 0x53, 0xf7, 0x19, 0x29, 0xb3, 0x54, 0x37, 0xaf, 0x1a, 0x38, 0xb0, 0x28, 0xb1, 0x6d, + 0x1d, 0xe9, 0x34, 0x49, 0xc7, 0xfe, 0x28, 0x6f, 0x0a, 0x68, 0x1a, 0xf4, 0xf1, 0xc5, 0x7e, 0x7b, + 0x77, 0x2b, 0xe8, 0xdc, 0x13, 0x13, 0x5b, 0x49, 0xe5, 0x86, 0x80, 0x83, 0xa2, 0x70, 0xde, 0x26, + 0x95, 0x5e, 0xd0, 0x12, 0x53, 0x79, 0x59, 0xea, 0x9d, 0x74, 0x35, 0x51, 0x89, 0xf9, 0x74, 0x76, + 0x3e, 0x42, 0x34, 0x23, 0xe3, 0x65, 0x5c, 0x7c, 0x58, 0x34, 0xcb, 0x7f, 0x3c, 0x31, 0xa4, 0xff, + 0x98, 0x7e, 0x33, 0xd1, 0x67, 0x39, 0x93, 0x2b, 0xfa, 0x9b, 0x5d, 0x55, 0x18, 0x30, 0xa8, 0xd0, + 0x18, 0x6d, 0x52, 0x03, 0x4c, 0x5a, 0x6b, 0x3c, 0xb2, 0x76, 0xea, 0x23, 0x18, 0xa3, 0x6b, 0x69, + 0x6e, 0xd0, 0x5f, 0x81, 0xd3, 0x25, 0x67, 0x5a, 0xb8, 0x8e, 0xac, 0x5a, 0xab, 0x27, 0x88, 0xe7, + 0xc5, 0x1a, 0x6b, 0x69, 0x4e, 0xd0, 0xcf, 0xdc, 0xf9, 0x0a, 0x59, 0x92, 0xc0, 0xfe, 0xeb, 0x7b, + 0x6c, 0xb9, 0x54, 0x56, 0x9f, 0xa2, 0xdc, 0x96, 0x6a, 0x03, 0xa9, 0xe0, 0x18, 0x0e, 0xce, 0xbb, + 0x64, 0x82, 0x9d, 0x38, 0xc4, 0x8b, 0xd3, 0x6c, 0xb7, 0x7b, 0xad, 0xa8, 0xc3, 0x6d, 0x99, 0x9d, + 0x5b, 0x88, 0x80, 0x44, 0x7d, 0x8a, 0xc3, 0x80, 0x20, 0x78, 0xd2, 0xf1, 0x9a, 0xf6, 0x3a, 0x9d, + 0x30, 0xf1, 0xb8, 0x12, 0x36, 0x53, 0x44, 0x8f, 0x34, 0xaa, 0x58, 0xd1, 0x65, 0x79, 0x3d, 0x2a, + 0x3a, 0xca, 0xc0, 0x80, 0x59, 0x05, 0x6e, 0xe3, 0xe1, 0x7d, 0x14, 0x98, 0xd2, 0xe9, 0x1e, 0x2f, + 0xce, 0x16, 0xd9, 0xc6, 0x6f, 0x59, 0x85, 0x0c, 0x09, 0x66, 0x33, 0x83, 0x34, 0x77, 0x0c, 0xb7, + 0x35, 0xfc, 0xa8, 0x73, 0x3a, 0xdc, 0x56, 0xfb, 0x51, 0x4d, 0xb7, 0x29, 0xbb, 0x1a, 0xca, 0x43, + 0xf3, 0x98, 0x24, 0x98, 0x4f, 0x5d, 0x0d, 0xd5, 0x28, 0x30, 0xe9, 0x96, 0xde, 0x22, 0xd3, 0xc6, + 0x80, 0x0f, 0x13, 0xd7, 0xb9, 0xf4, 0x79, 0xba, 0xfb, 0xa7, 0x06, 0x72, 0xa8, 0xb8, 0xd0, 0xff, + 0x5e, 0x26, 0xf3, 0x19, 0x27, 0x19, 0xf7, 0x02, 0x16, 0xf9, 0x6c, 0x89, 0xbc, 0xeb, 0x14, 0x06, + 0x0c, 0x63, 0x0b, 0xae, 0x72, 0x01, 0xc1, 0x25, 0xa5, 0x68, 0x65, 0xa0, 0x14, 0x15, 0xc2, 0x6a, + 0xec, 0xe4, 0xc2, 0xca, 0xde, 0x1d, 0xc6, 0x0b, 0xed, 0x0e, 0x0f, 0x41, 0xc0, 0x59, 0x1b, 0xcc, + 0x64, 0x81, 0x0d, 0xe6, 0xc3, 0x12, 0x99, 0xb3, 0x67, 0x5e, 0x81, 0x11, 0x7f, 0x54, 0x07, 0x70, + 0x99, 0x19, 0x62, 0x49, 0x14, 0xb6, 0xdb, 0x7e, 0x24, 0x22, 0xc5, 0xe6, 0x84, 0x5d, 0x25, 0xa0, + 0x60, 0x50, 0xb8, 0xbf, 0x50, 0x26, 0x0b, 0x3a, 0x6c, 0x58, 0xa4, 0x30, 0x1d, 0xdd, 0xd1, 0xc0, + 0xb6, 0x75, 0x34, 0x90, 0x97, 0x99, 0x34, 0xd5, 0xae, 0x81, 0xc7, 0x04, 0xef, 0xa6, 0x8e, 0x09, + 0x5e, 0x1b, 0x92, 0xef, 0xf1, 0x47, 0x06, 0xff, 0xa4, 0x4c, 0x1e, 0x4b, 0x17, 0x59, 0x6b, 0x7b, + 0xc1, 0xc1, 0x08, 0xc7, 0xe9, 0x4b, 0xd6, 0x38, 0xbd, 0x31, 0x5c, 0x7f, 0x58, 0xe3, 0x06, 0x0e, + 0x96, 0x97, 0x1a, 0xac, 0xb7, 0x4e, 0xc2, 0xfc, 0xf8, 0x11, 0xfb, 0x8f, 0x25, 0xf2, 0x44, 0x66, + 0xb9, 0xd3, 0x70, 0x81, 0x7e, 0xd1, 0x76, 0x81, 0xbe, 0x7a, 0x82, 0xee, 0x0d, 0xf0, 0x89, 0xfe, + 0x97, 0xf2, 0x80, 0x6e, 0x31, 0x6f, 0xd9, 0x2d, 0xba, 0xfd, 0x36, 0xe9, 0x26, 0x15, 0x63, 0x6c, + 0xa4, 0x3c, 0xe4, 0xbb, 0xc8, 0xf6, 0x4f, 0x0d, 0xa6, 0x6b, 0x7f, 0x29, 0xcd, 0x42, 0xa3, 0xc1, + 0xe4, 0x60, 0xe7, 0xc6, 0x2a, 0x8f, 0x28, 0x37, 0x16, 0x95, 0x31, 0x87, 0xca, 0x4a, 0x4f, 0x3b, + 0xe1, 0x0c, 0xfb, 0xdd, 0xa0, 0xa2, 0x6a, 0x12, 0xea, 0xb4, 0x3c, 0x44, 0x62, 0x2c, 0x77, 0xc1, + 0x59, 0x1f, 0xd0, 0x8c, 0xb7, 0xe0, 0x77, 0x1f, 0x95, 0xc7, 0x52, 0xf1, 0x74, 0xbf, 0x59, 0x21, + 0x1f, 0x3f, 0x66, 0xda, 0xd1, 0x4d, 0xc2, 0x3a, 0xf9, 0x7c, 0x29, 0xed, 0x9e, 0x5a, 0xca, 0x2c, + 0x6c, 0xf9, 0xab, 0x52, 0x1f, 0xab, 0xfc, 0x91, 0x3f, 0xd6, 0xcf, 0x9b, 0xce, 0x44, 0x1e, 0xea, + 0x78, 0xf5, 0xc4, 0x0b, 0xeb, 0xe1, 0x79, 0x17, 0x4f, 0xd1, 0xf1, 0x81, 0xe9, 0xa8, 0x3f, 0x99, + 0xd9, 0x29, 0x2b, 0xc0, 0x02, 0xaf, 0x8a, 0x21, 0xd0, 0xb8, 0x8b, 0xa2, 0xaf, 0x8a, 0x49, 0x04, + 0x68, 0x1a, 0x2b, 0x8e, 0xa2, 0x9c, 0x1b, 0x47, 0xf1, 0x6f, 0x4b, 0xe4, 0x5c, 0xba, 0x11, 0xa7, + 0x21, 0x75, 0x1a, 0xb6, 0xd4, 0x59, 0x1e, 0xee, 0xdb, 0x0f, 0x10, 0x38, 0x3f, 0x37, 0x43, 0xce, + 0xf7, 0x6d, 0x56, 0x7c, 0x18, 0x7f, 0xbc, 0x44, 0xce, 0xec, 0x31, 0xfb, 0xc2, 0xb8, 0xf1, 0x23, + 0x3a, 0x96, 0x73, 0xdd, 0xe9, 0xd8, 0x8b, 0x42, 0xdc, 0x5a, 0xea, 0x23, 0x81, 0xfe, 0xca, 0x9c, + 0x9f, 0xa1, 0x43, 0xed, 0xdd, 0x8f, 0xfb, 0xf2, 0xe1, 0x8b, 0x79, 0xf4, 0xf9, 0x1c, 0x57, 0x5e, + 0x4e, 0x26, 0xfd, 0xd5, 0x45, 0x8c, 0x15, 0xcd, 0xa2, 0x82, 0xcc, 0x5a, 0xa9, 0x12, 0xc0, 0xb3, + 0x84, 0xa1, 0xda, 0x57, 0xe8, 0x0e, 0x5a, 0xd6, 0xfd, 0x03, 0x2e, 0x93, 0x24, 0x06, 0x14, 0x47, + 0xe7, 0x3d, 0x52, 0xdd, 0x93, 0x97, 0x7c, 0x84, 0xd0, 0xcb, 0xd9, 0x59, 0x32, 0xef, 0x04, 0xf1, + 0x28, 0x77, 0x85, 0x02, 0xcd, 0xd4, 0xb9, 0x46, 0x2a, 0x9d, 0xdd, 0x58, 0xdc, 0xbb, 0xcd, 0x8b, + 0xa3, 0xb1, 0xa3, 0x96, 0xf8, 0x4d, 0x42, 0x0a, 0x04, 0x64, 0x81, 0x9c, 0xa2, 0x9d, 0x96, 0xf0, + 0x61, 0xe7, 0x70, 0x82, 0xd5, 0x5a, 0x3f, 0x27, 0x0a, 0x04, 0x64, 0xc1, 0x02, 0xf6, 0xf0, 0xbe, + 0x82, 0x70, 0x50, 0xe7, 0x5c, 0xca, 0xee, 0xbb, 0x95, 0xc1, 0x53, 0xca, 0x31, 0x30, 0x70, 0x46, + 0xe8, 0x99, 0x6e, 0xb2, 0x14, 0xd0, 0xc2, 0x7f, 0x90, 0x97, 0x18, 0xb8, 0x2f, 0x5d, 0x34, 0x3f, + 0x48, 0xe3, 0x70, 0x10, 0xbc, 0x18, 0x57, 0xbf, 0xbb, 0xbf, 0x1b, 0x0b, 0xff, 0x40, 0x1e, 0xd7, + 0xbe, 0x64, 0xde, 0x82, 0x2b, 0x83, 0x83, 0xe0, 0xe5, 0xd4, 0x48, 0x79, 0xb7, 0x29, 0xf2, 0x38, + 0xe6, 0x58, 0xb4, 0xf6, 0xb5, 0xd0, 0xd5, 0x09, 0x8c, 0xa0, 0xdb, 0x58, 0x03, 0x5a, 0x9e, 0xea, + 0x23, 0x93, 0xbb, 0xfc, 0xa6, 0x9f, 0xc8, 0xd9, 0x78, 0x39, 0xef, 0x36, 0x62, 0xdf, 0xb5, 0x40, + 0x7e, 0x93, 0x41, 0x20, 0x40, 0xb2, 0xa3, 0xfb, 0x30, 0xd9, 0x55, 0x57, 0x17, 0x45, 0xd2, 0xc6, + 0xe5, 0xe1, 0xae, 0x3a, 0x0a, 0xeb, 0x59, 0x41, 0xc1, 0xe0, 0x88, 0x73, 0xde, 0x93, 0x59, 0xec, + 0x59, 0xc2, 0xc6, 0xdc, 0x39, 0x9f, 0x99, 0xf4, 0x9e, 0xcf, 0x79, 0x85, 0x02, 0xcd, 0xd4, 0xe9, + 0x91, 0xd9, 0xc3, 0xb8, 0xbb, 0xef, 0xcb, 0xa5, 0xcf, 0xb2, 0x38, 0x4e, 0x5f, 0xf9, 0x5c, 0x4e, + 0x6a, 0x4e, 0x51, 0x24, 0x88, 0x92, 0x9e, 0xd7, 0xee, 0x93, 0x60, 0x2c, 0x1d, 0xd2, 0x1d, 0x93, + 0x2d, 0xd8, 0xb5, 0xe0, 0x27, 0x79, 0xbf, 0x17, 0xee, 0x1c, 0x25, 0xbe, 0xc8, 0xf2, 0x98, 0xf3, + 0x49, 0xde, 0xe1, 0xc4, 0xfd, 0x9f, 0x44, 0x20, 0x40, 0xb2, 0x53, 0x43, 0xc6, 0xa4, 0xf1, 0x42, + 0xe1, 0x21, 0xeb, 0xeb, 0x83, 0x1e, 0x32, 0x26, 0x7d, 0x35, 0x53, 0xf7, 0xf7, 0xc7, 0xfb, 0x37, + 0x38, 0xa6, 0x7f, 0xfe, 0x6c, 0xff, 0x71, 0xe6, 0xdb, 0xc3, 0xdb, 0x57, 0x0f, 0xf1, 0x60, 0x93, + 0xee, 0x0f, 0xe7, 0xbb, 0x99, 0xbb, 0x97, 0xd8, 0x21, 0x86, 0x35, 0xd3, 0xf8, 0xd0, 0xa8, 0x9c, + 0xa1, 0xd9, 0x78, 0x18, 0x50, 0x67, 0x5a, 0xe5, 0xab, 0x7c, 0x64, 0x95, 0xef, 0x2e, 0x1d, 0x6f, + 0xd4, 0x52, 0x74, 0xd2, 0x8a, 0x21, 0xf3, 0x3c, 0xb0, 0xbd, 0x66, 0x4d, 0xb0, 0x00, 0xc5, 0x0c, + 0x07, 0xee, 0xc9, 0x74, 0x27, 0xc0, 0x67, 0x68, 0x91, 0xec, 0x94, 0xfb, 0x02, 0x36, 0xc4, 0x48, + 0x3c, 0x59, 0x3f, 0x8e, 0xf8, 0xc3, 0x3c, 0x02, 0x38, 0xbe, 0xb2, 0xd3, 0x54, 0x21, 0xff, 0x61, + 0x29, 0x43, 0xe1, 0xe1, 0x4a, 0xff, 0xe7, 0x6c, 0xa5, 0xff, 0xf9, 0xb4, 0xd2, 0xdf, 0x67, 0xa2, + 0x5b, 0xfa, 0x7e, 0xf1, 0x84, 0x7f, 0x45, 0xb3, 0x6a, 0xb8, 0xff, 0xab, 0x44, 0x2a, 0xf5, 0xb0, + 0x35, 0x42, 0x27, 0xc0, 0x55, 0xcb, 0x09, 0xf0, 0x5c, 0xee, 0xf3, 0x35, 0x03, 0x4d, 0xfe, 0x5b, + 0x29, 0x93, 0xff, 0xd3, 0xf9, 0xac, 0x8e, 0x37, 0xf0, 0xbf, 0x55, 0x21, 0xe6, 0x03, 0x3c, 0xce, + 0x6f, 0x9f, 0x24, 0xaa, 0xb1, 0x52, 0xec, 0x4d, 0x1e, 0x51, 0x07, 0x8b, 0x01, 0x92, 0x57, 0x9e, + 0xfe, 0xd4, 0x06, 0x37, 0xde, 0xf5, 0x83, 0xbd, 0xfd, 0xc4, 0x6f, 0xa5, 0x3b, 0x76, 0x7a, 0xc1, + 0x8d, 0xff, 0xb5, 0x44, 0xe6, 0x53, 0xb5, 0x3b, 0x07, 0x59, 0xb7, 0x26, 0x4e, 0x6a, 0xd5, 0x9f, + 0xc9, 0xbd, 0x67, 0xb1, 0x4c, 0x88, 0xf2, 0x44, 0x4b, 0xdb, 0x9b, 0xe9, 0x21, 0xca, 0x55, 0x1d, + 0x83, 0x41, 0x81, 0x5e, 0xfc, 0x24, 0xec, 0x86, 0xed, 0x70, 0xef, 0xe8, 0xba, 0x2f, 0x2f, 0xe5, + 0x2b, 0x2f, 0xfe, 0xb6, 0x46, 0x81, 0x49, 0x87, 0x09, 0x9b, 0xd2, 0xef, 0x37, 0xfd, 0xff, 0x89, + 0xfa, 0xa7, 0x67, 0xa2, 0xfe, 0x6e, 0x89, 0x2c, 0x60, 0xed, 0x2c, 0x84, 0x43, 0x86, 0x20, 0xaa, + 0xcc, 0xd9, 0xa5, 0x63, 0x32, 0x67, 0xe3, 0x1d, 0x8e, 0xa4, 0x15, 0xf6, 0x64, 0x36, 0x17, 0x43, + 0x8a, 0x21, 0x14, 0x04, 0x56, 0xd0, 0xd1, 0x36, 0x89, 0xfb, 0x19, 0x26, 0x1d, 0x85, 0x82, 0xc0, + 0xca, 0xc4, 0xda, 0x63, 0xd9, 0x89, 0xb5, 0x79, 0xf2, 0x1b, 0x11, 0x3a, 0x20, 0x76, 0x66, 0x23, + 0xf9, 0x8d, 0x8c, 0x29, 0xd0, 0x34, 0xee, 0x3f, 0xab, 0x90, 0x19, 0x8c, 0xa0, 0x53, 0xe1, 0xc5, + 0xaf, 0x59, 0xe1, 0xc5, 0xcf, 0xa4, 0xc2, 0x8b, 0x17, 0x4c, 0xda, 0x87, 0x13, 0x5d, 0x2c, 0xd2, + 0x24, 0xb1, 0xd4, 0xef, 0x27, 0x8d, 0x2c, 0xb6, 0xd2, 0x24, 0x29, 0x4e, 0x60, 0x33, 0xfe, 0x33, + 0x15, 0x51, 0xfc, 0x27, 0x25, 0x32, 0x47, 0xbf, 0x05, 0x4e, 0xd1, 0x3f, 0x4b, 0xf3, 0xd1, 0x4c, + 0xae, 0x34, 0x71, 0x4c, 0x72, 0xa5, 0x5f, 0x29, 0x11, 0x0c, 0xfc, 0x3c, 0x0d, 0x6f, 0xda, 0x86, + 0xed, 0x4d, 0xfb, 0x64, 0xae, 0xf0, 0x1d, 0xe0, 0x40, 0xfb, 0xf5, 0x0a, 0x99, 0xc5, 0x26, 0x87, + 0x7b, 0xf2, 0x83, 0x59, 0x83, 0x53, 0x2a, 0x30, 0x38, 0x98, 0xa0, 0x21, 0x6c, 0xb7, 0xc3, 0xfb, + 0xe9, 0x8f, 0xb7, 0xc1, 0xa0, 0x20, 0xb0, 0xe8, 0xa6, 0xec, 0x62, 0x12, 0x99, 0xb0, 0x17, 0xa7, + 0xaf, 0x7b, 0xd5, 0x05, 0x1c, 0x14, 0x05, 0x5d, 0xf1, 0x33, 0x71, 0x40, 0x6d, 0x00, 0x19, 0x5b, + 0x30, 0xc6, 0x62, 0x0b, 0x78, 0x0e, 0x3b, 0x03, 0x0e, 0x16, 0x15, 0x55, 0x35, 0xab, 0xec, 0x37, + 0x5b, 0x43, 0x27, 0xc8, 0xf6, 0xcd, 0x13, 0x2c, 0x49, 0x0e, 0xa0, 0x99, 0xe1, 0x31, 0x40, 0x22, + 0xc3, 0x20, 0x62, 0x71, 0x6c, 0xa8, 0x94, 0x53, 0x15, 0x20, 0x81, 0xb9, 0xac, 0xd4, 0xff, 0xce, + 0x4b, 0x98, 0xba, 0x35, 0x68, 0x6f, 0xe1, 0x2b, 0x12, 0x22, 0x90, 0x44, 0xe4, 0x62, 0x15, 0x40, + 0xd0, 0x78, 0xdc, 0xf3, 0xd9, 0x65, 0x53, 0xfe, 0x96, 0xc0, 0x14, 0xa3, 0x66, 0x7b, 0xfe, 0x96, + 0x82, 0x82, 0x41, 0xe1, 0xbe, 0xca, 0xf6, 0xee, 0x21, 0xc3, 0xcf, 0xbf, 0x57, 0x26, 0x4e, 0x9d, + 0x85, 0x5b, 0x58, 0xcf, 0x2d, 0xec, 0x93, 0xb9, 0x98, 0x1a, 0xab, 0x9d, 0xde, 0x03, 0xc1, 0xaa, + 0x58, 0xc0, 0x7f, 0x63, 0xdd, 0x2c, 0xc3, 0x2f, 0x58, 0xda, 0x30, 0x48, 0xf1, 0xc5, 0x21, 0x89, + 0x7a, 0x9d, 0x95, 0x18, 0xdf, 0x6d, 0x13, 0x0f, 0x26, 0xb0, 0x21, 0x01, 0x09, 0x04, 0x8d, 0xc7, + 0x39, 0xc0, 0x7e, 0xdc, 0xa4, 0xd2, 0x28, 0x0c, 0x13, 0x39, 0x6b, 0x58, 0xf6, 0x6c, 0x03, 0x0e, + 0x16, 0x15, 0x26, 0x9e, 0x8e, 0x7b, 0xdd, 0x6e, 0x9b, 0x9d, 0xee, 0x78, 0xed, 0xab, 0x51, 0xd8, + 0xeb, 0xf2, 0x88, 0x5b, 0x91, 0x78, 0xba, 0xd1, 0x87, 0x85, 0x8c, 0x12, 0xb8, 0xe8, 0x77, 0x63, + 0xf6, 0xbf, 0xb8, 0x40, 0xca, 0x7d, 0x4c, 0x0d, 0x06, 0x02, 0x89, 0x73, 0x7b, 0x6c, 0xab, 0x62, + 0x89, 0xec, 0x31, 0x12, 0xcc, 0xf1, 0xc9, 0x6c, 0x97, 0x6d, 0x47, 0xf2, 0x88, 0xb9, 0xd0, 0x50, + 0xa6, 0x02, 0x3e, 0x78, 0xc2, 0x6a, 0x93, 0x0d, 0xd8, 0x5c, 0xdd, 0x7f, 0x4f, 0x98, 0xac, 0x11, + 0x07, 0x6b, 0x93, 0x22, 0x9c, 0x53, 0xe8, 0x62, 0xcf, 0x16, 0x79, 0xb9, 0x45, 0xcb, 0x71, 0x11, + 0x1c, 0x0a, 0x92, 0x8b, 0xf3, 0x65, 0x7e, 0x46, 0xce, 0xd6, 0x77, 0xf1, 0xe7, 0x94, 0x38, 0xbd, + 0x15, 0xa8, 0x2c, 0x58, 0x80, 0xc1, 0xce, 0xd9, 0x22, 0xb3, 0x22, 0xdb, 0xb9, 0xb0, 0xd5, 0x2b, + 0x96, 0xbd, 0x3a, 0x0b, 0x26, 0xf2, 0xc3, 0x34, 0x00, 0xec, 0xc2, 0xce, 0x1e, 0x79, 0xd2, 0x78, + 0x02, 0x25, 0x23, 0x28, 0x89, 0x0b, 0x8e, 0x4f, 0xa2, 0x17, 0x60, 0xfb, 0x38, 0x42, 0x38, 0x9e, + 0x0f, 0x1d, 0xe4, 0xc7, 0xbc, 0x66, 0x12, 0x1c, 0xfa, 0x35, 0xdf, 0x6b, 0x51, 0xad, 0xcc, 0xb7, + 0x6f, 0x17, 0x3f, 0x41, 0x2b, 0x78, 0x6c, 0x25, 0x8b, 0x00, 0xb2, 0xcb, 0x51, 0x7b, 0xbd, 0xda, + 0xea, 0xc4, 0x62, 0x0c, 0x26, 0xac, 0xd7, 0x5e, 0xaa, 0xb5, 0x9b, 0x0d, 0xd5, 0x7f, 0xfd, 0x03, + 0x74, 0x01, 0xe7, 0x7d, 0xfe, 0x08, 0xad, 0x32, 0x48, 0xf8, 0x2b, 0x43, 0x6f, 0x14, 0x32, 0x81, + 0xad, 0x8b, 0x10, 0xdc, 0x8d, 0xa5, 0x82, 0xff, 0xac, 0x3b, 0x12, 0x56, 0x15, 0xce, 0x0f, 0xd3, + 0x85, 0xe5, 0x47, 0xf8, 0xb8, 0xea, 0x4a, 0x93, 0x65, 0x6f, 0x64, 0x27, 0x54, 0x53, 0x56, 0x04, + 0xbc, 0xd3, 0xe8, 0xa3, 0x80, 0x8c, 0x52, 0xce, 0x35, 0x94, 0x38, 0x26, 0x54, 0xc4, 0x6a, 0x4a, + 0xd5, 0x6e, 0xb1, 0xe6, 0x63, 0x82, 0x76, 0x7c, 0x6b, 0xc2, 0xe6, 0x08, 0xa9, 0x72, 0xb8, 0xad, + 0xa8, 0xac, 0xd4, 0xc4, 0x8e, 0x30, 0xec, 0xcf, 0x4c, 0x8d, 0x96, 0x12, 0x9e, 0x58, 0xdc, 0xf4, + 0x13, 0x7c, 0xfa, 0x89, 0xf9, 0x9b, 0xa7, 0x8c, 0x2c, 0x57, 0x1a, 0x05, 0x26, 0x1d, 0xea, 0x40, + 0xec, 0xa0, 0x63, 0xb3, 0xc6, 0xbc, 0xc8, 0x53, 0x7a, 0xed, 0x5c, 0xe3, 0x60, 0x90, 0x78, 0x49, + 0xba, 0x59, 0x5f, 0x63, 0x1e, 0xe1, 0x14, 0x29, 0x05, 0x83, 0xc4, 0x63, 0x74, 0x58, 0xfa, 0x4d, + 0x9d, 0xb9, 0x22, 0xde, 0xf9, 0x7e, 0x09, 0x5e, 0xf0, 0x59, 0x9d, 0x07, 0x64, 0x41, 0xbd, 0xeb, + 0xc3, 0xd3, 0x08, 0xc6, 0x8b, 0xf3, 0x45, 0x9e, 0xc0, 0xcd, 0xcc, 0x46, 0xa8, 0x82, 0x73, 0x37, + 0x53, 0x3c, 0xa1, 0xaf, 0x16, 0xeb, 0x96, 0xfc, 0x42, 0x6e, 0xa6, 0x71, 0x7c, 0x56, 0xa7, 0xb7, + 0xd3, 0x0a, 0x0f, 0xa8, 0xc8, 0x60, 0x2f, 0xfb, 0x98, 0x0f, 0xba, 0x4a, 0x04, 0x68, 0x9a, 0xa5, + 0x2f, 0x90, 0x33, 0x7d, 0x73, 0x7a, 0xa8, 0xa8, 0xb2, 0x9f, 0x1d, 0x23, 0x55, 0xe5, 0xd5, 0xa1, + 0xf5, 0x5b, 0xae, 0xb4, 0x27, 0xd2, 0xae, 0xb4, 0x29, 0xdc, 0x79, 0x4d, 0xef, 0xd9, 0x57, 0x32, + 0x5e, 0x74, 0xbc, 0x90, 0xfb, 0x11, 0x8b, 0x5f, 0xee, 0x18, 0xe2, 0xbd, 0x4b, 0xad, 0xd6, 0x8f, + 0x1d, 0xab, 0xd6, 0x17, 0x7c, 0xb0, 0x07, 0x15, 0x78, 0xba, 0xf3, 0x50, 0xb2, 0xd4, 0x63, 0x14, + 0x75, 0x04, 0x02, 0xc7, 0x31, 0xbd, 0x0b, 0x85, 0x32, 0xd3, 0xbb, 0x26, 0x4f, 0xaa, 0x77, 0x49, + 0x0e, 0xa0, 0x99, 0x61, 0x22, 0xf5, 0xa6, 0xfd, 0xb8, 0x88, 0xba, 0xb3, 0x71, 0x71, 0x88, 0xc7, + 0x3d, 0x7a, 0x46, 0x22, 0xf5, 0xb5, 0x34, 0x3f, 0xe8, 0xaf, 0x02, 0x2f, 0xd8, 0xcf, 0xab, 0x09, + 0x41, 0x77, 0x20, 0x4c, 0x55, 0x34, 0x3a, 0x47, 0xe6, 0x2d, 0xcb, 0x52, 0x7d, 0x08, 0xfe, 0xc7, + 0xdf, 0x2a, 0x31, 0xff, 0xe3, 0xb6, 0x7f, 0xd0, 0x6d, 0xe3, 0x8b, 0x25, 0xa3, 0x6b, 0xfa, 0x97, + 0xc9, 0x54, 0x22, 0x6a, 0x29, 0x96, 0xcc, 0xd9, 0x68, 0x16, 0xf3, 0xc7, 0x2a, 0x41, 0x20, 0xa1, + 0xa0, 0x18, 0xba, 0xff, 0x92, 0x7f, 0x05, 0x89, 0x39, 0x0d, 0xcb, 0xea, 0xa6, 0x6d, 0x59, 0xbd, + 0x58, 0xb8, 0x33, 0x03, 0x2c, 0xac, 0x6f, 0xda, 0x5d, 0x60, 0x0a, 0xdb, 0xa3, 0xef, 0x11, 0x77, + 0x6f, 0x10, 0xfb, 0xc1, 0x14, 0xaa, 0xae, 0xb0, 0x68, 0x4d, 0x2e, 0x11, 0x2f, 0x0c, 0x19, 0xa9, + 0xe9, 0xfe, 0x5a, 0x99, 0x9c, 0xcb, 0x7a, 0x47, 0xdd, 0x69, 0x91, 0x99, 0xae, 0xa1, 0x3e, 0x17, + 0xbb, 0xcb, 0x6f, 0x2a, 0xdc, 0x5a, 0x75, 0x31, 0xa1, 0x60, 0x71, 0xc5, 0x14, 0xea, 0xf8, 0x2a, + 0xbc, 0x72, 0xaf, 0x94, 0x87, 0x17, 0x51, 0xaa, 0x9a, 0x75, 0x83, 0x11, 0x58, 0x6c, 0x47, 0x90, + 0x6f, 0xdc, 0xfd, 0xfb, 0x25, 0xf2, 0xf8, 0x80, 0x0b, 0xff, 0x58, 0xdd, 0x7d, 0xe6, 0x85, 0x14, + 0x0f, 0xf2, 0xa8, 0xea, 0xb8, 0x6f, 0x12, 0x04, 0xd6, 0xd9, 0xc1, 0x7b, 0xa4, 0xea, 0x95, 0xd2, + 0x72, 0x91, 0x63, 0xf0, 0xbe, 0xcb, 0xc5, 0xc6, 0xbd, 0x53, 0xf5, 0x2e, 0xa9, 0xc1, 0xd5, 0xfd, + 0x46, 0x85, 0x8c, 0xf3, 0x87, 0x12, 0xeb, 0x54, 0x01, 0xe2, 0xf9, 0x05, 0x87, 0x4b, 0x6f, 0xa8, + 0xf5, 0x24, 0x0e, 0x00, 0xc9, 0xc6, 0xb9, 0x41, 0xce, 0xa2, 0x7f, 0x35, 0xf0, 0xda, 0x35, 0xbf, + 0xed, 0x1d, 0x49, 0xc5, 0x9b, 0xe7, 0x88, 0x96, 0x69, 0x50, 0xcf, 0x6e, 0xf6, 0x93, 0x40, 0x56, + 0x39, 0xbc, 0xae, 0x94, 0x4a, 0x10, 0xc4, 0xf3, 0x36, 0xaa, 0xeb, 0x4a, 0xc7, 0x27, 0x09, 0xc2, + 0x1b, 0x5b, 0xdd, 0x3e, 0x13, 0xc3, 0x78, 0x61, 0xcf, 0x36, 0x2b, 0x6c, 0x5a, 0xbc, 0xeb, 0x14, + 0xf7, 0xd8, 0x19, 0xe9, 0xf6, 0x3e, 0xb5, 0x64, 0xf6, 0xc3, 0x76, 0x4b, 0xbc, 0x0c, 0xa5, 0xd4, + 0xa9, 0x46, 0x0a, 0x0f, 0x7d, 0x25, 0x90, 0xcb, 0xae, 0x17, 0xb4, 0xe9, 0xd4, 0xd6, 0x5c, 0x26, + 0x6c, 0x2e, 0x1b, 0x29, 0x3c, 0xf4, 0x95, 0x70, 0xff, 0xb0, 0x44, 0xce, 0x66, 0x9c, 0xdc, 0xf3, + 0x80, 0xb2, 0x3d, 0x2a, 0x1a, 0x55, 0x06, 0x61, 0x23, 0xa0, 0x8c, 0xc3, 0x41, 0x51, 0xe0, 0x2c, + 0xe4, 0x76, 0x63, 0x3a, 0x21, 0xb2, 0x38, 0x2a, 0x15, 0xd8, 0xe1, 0xd2, 0xfd, 0xa8, 0xf7, 0xde, + 0xc7, 0x06, 0xbe, 0xf7, 0x4e, 0x15, 0x93, 0x3d, 0x65, 0x9d, 0x1b, 0x8a, 0x09, 0xb7, 0xcf, 0x39, + 0x0e, 0xb3, 0x7b, 0xcf, 0xa7, 0x22, 0x78, 0xb0, 0x21, 0xa9, 0x67, 0xe9, 0x99, 0x4b, 0x01, 0x63, + 0x5b, 0x32, 0x9e, 0xa6, 0x7f, 0xde, 0x7e, 0xb5, 0x56, 0xb7, 0x79, 0xb5, 0x66, 0xbd, 0xc7, 0x55, + 0x34, 0x3b, 0xf9, 0xa7, 0x30, 0x75, 0xb0, 0x7a, 0x5e, 0x51, 0x4d, 0x7a, 0xca, 0xae, 0x4e, 0xc1, + 0xc0, 0x90, 0xce, 0x73, 0xa2, 0xf7, 0x29, 0xe7, 0x24, 0x78, 0xad, 0x30, 0x36, 0x86, 0x80, 0xca, + 0x11, 0xaa, 0xd6, 0xe2, 0xa9, 0x40, 0xda, 0x35, 0x7b, 0x9d, 0x83, 0x41, 0xe2, 0xed, 0x0c, 0xe4, + 0x93, 0x23, 0xce, 0x40, 0x3e, 0x95, 0x1b, 0x85, 0xf8, 0xcb, 0x74, 0x57, 0x64, 0x69, 0xd7, 0xc4, + 0x4d, 0x50, 0x74, 0xf2, 0x8f, 0x6e, 0x57, 0xc4, 0xf7, 0xda, 0xb0, 0xb2, 0x74, 0xd2, 0x61, 0xd6, + 0x02, 0xe0, 0x38, 0x4c, 0xe2, 0xca, 0xaa, 0xc6, 0xcf, 0x37, 0xc3, 0x93, 0xb8, 0xea, 0x57, 0xbc, + 0x59, 0x8c, 0x3b, 0xf8, 0x5d, 0x6a, 0x7b, 0xb3, 0xc6, 0x6a, 0x4f, 0xcc, 0xa3, 0x12, 0xe3, 0x9e, + 0xd9, 0xb8, 0x87, 0x15, 0xe3, 0x9e, 0xcd, 0x3c, 0x3f, 0xc6, 0x3d, 0xb3, 0xdc, 0xa3, 0x17, 0xe3, + 0x9e, 0xd9, 0xcc, 0x01, 0xfa, 0xdc, 0xf7, 0xca, 0x03, 0xba, 0xc5, 0x34, 0xbb, 0x17, 0x70, 0x15, + 0x30, 0x64, 0x2c, 0x36, 0xe5, 0x19, 0xbe, 0x02, 0x38, 0x0c, 0x14, 0xd6, 0x89, 0x8d, 0x18, 0x71, + 0xde, 0xc8, 0xf5, 0x13, 0x7e, 0xe0, 0x65, 0xdb, 0x95, 0x63, 0x5e, 0xb0, 0x4c, 0x05, 0x8e, 0x63, + 0x44, 0x8e, 0x52, 0xd6, 0x2b, 0x27, 0x51, 0xd6, 0x67, 0xb2, 0x15, 0xf5, 0x25, 0xba, 0x27, 0x9e, + 0xdc, 0xf8, 0xfe, 0xc5, 0x32, 0xf9, 0xf8, 0x31, 0x33, 0x8c, 0x8b, 0x16, 0x6b, 0x50, 0x0d, 0xd1, + 0xd2, 0x37, 0xb0, 0x75, 0x72, 0x6e, 0xb7, 0xd7, 0x6e, 0x1f, 0xb1, 0x13, 0x76, 0xbf, 0x25, 0x29, + 0x84, 0xba, 0xa0, 0xde, 0x78, 0xdc, 0xc8, 0xa0, 0x81, 0xcc, 0x92, 0xe8, 0xf8, 0x0a, 0x77, 0x58, + 0x5a, 0xbb, 0x96, 0xbe, 0xff, 0xc9, 0xc6, 0xaf, 0xa2, 0x1d, 0x5f, 0xb7, 0xfa, 0x28, 0x20, 0xa3, + 0x14, 0x2a, 0x0f, 0xec, 0x79, 0x48, 0xd5, 0xac, 0x94, 0xf2, 0x00, 0x26, 0x12, 0x6c, 0x5a, 0xf7, + 0x0f, 0x4a, 0x28, 0x84, 0x32, 0x9e, 0x2f, 0xb2, 0x5e, 0xfd, 0x35, 0x02, 0xc7, 0xfb, 0x5f, 0xfd, + 0x65, 0xfe, 0x30, 0x9b, 0x96, 0x8f, 0x6f, 0xac, 0x03, 0xcf, 0xac, 0xfd, 0x5e, 0x5c, 0x98, 0x50, + 0x14, 0xf8, 0x52, 0x57, 0x2b, 0x38, 0x0c, 0xe2, 0x30, 0x2a, 0xf0, 0xc8, 0x66, 0x5f, 0x30, 0x93, + 0xde, 0xa2, 0x6a, 0x9c, 0x09, 0x48, 0x6e, 0xee, 0x5f, 0x2f, 0x93, 0x59, 0x59, 0x1f, 0x55, 0x4b, + 0xd8, 0x2a, 0x1e, 0x95, 0x68, 0x7d, 0xc7, 0x12, 0xad, 0x97, 0x8a, 0xdd, 0x1a, 0x61, 0x8d, 0x1a, + 0x28, 0x52, 0xbf, 0x94, 0x12, 0xa9, 0x97, 0x87, 0x61, 0x9a, 0x6b, 0xcd, 0x9f, 0xb1, 0xe8, 0x1f, + 0xa1, 0x5c, 0xa4, 0x59, 0xdd, 0x19, 0x20, 0x3a, 0xbf, 0x51, 0x4e, 0x75, 0x83, 0x89, 0xcc, 0xaf, + 0x91, 0xb1, 0x7d, 0x2f, 0x6a, 0x89, 0xa3, 0x8b, 0xb7, 0x86, 0xfc, 0x14, 0xd4, 0x7c, 0x88, 0x5a, + 0x5c, 0xf0, 0xbd, 0xac, 0x1e, 0x4d, 0xa0, 0xa0, 0xdc, 0x30, 0x4c, 0x56, 0xa9, 0xf3, 0x26, 0x3e, + 0xaa, 0x10, 0x76, 0x55, 0x94, 0xcd, 0x33, 0xfc, 0x41, 0x05, 0x84, 0x50, 0x0e, 0x8e, 0x5d, 0x1d, + 0x82, 0x41, 0xd0, 0x2f, 0xf9, 0xa4, 0xaa, 0xaa, 0x1e, 0x61, 0xc0, 0xdf, 0x0f, 0x2a, 0xe4, 0x6c, + 0xc6, 0x54, 0x71, 0x7e, 0xcc, 0x1a, 0xb5, 0xcf, 0x0e, 0x3d, 0xd7, 0x3e, 0xe2, 0xb8, 0xfd, 0x18, + 0x53, 0x50, 0x5b, 0x62, 0x6e, 0x9c, 0xa0, 0x7a, 0xaa, 0xc5, 0xa6, 0xab, 0x47, 0x50, 0x7e, 0xf5, + 0x58, 0xed, 0x29, 0x0d, 0x3e, 0x56, 0xa3, 0xda, 0x39, 0xc2, 0x6f, 0xfc, 0x93, 0x63, 0xe4, 0x5c, + 0xd6, 0xcd, 0x34, 0xe7, 0xa7, 0x4a, 0xa9, 0x6c, 0xc6, 0x9f, 0x1f, 0xfe, 0x7a, 0x1b, 0x4f, 0x71, + 0x2c, 0x6e, 0xac, 0x2f, 0xdb, 0xf9, 0x8d, 0x73, 0x47, 0x5b, 0xd4, 0xce, 0x42, 0xa7, 0x23, 0x9e, + 0x98, 0x5a, 0xca, 0x83, 0xb7, 0x4f, 0xd0, 0x14, 0x91, 0xdb, 0x3a, 0x4e, 0x85, 0x4e, 0x4b, 0x70, + 0x7e, 0xe8, 0xb4, 0x6c, 0xc3, 0xd2, 0x1e, 0x66, 0x35, 0x56, 0xfd, 0x1a, 0xe1, 0x14, 0x08, 0x70, + 0x4f, 0x32, 0x5a, 0x3d, 0xc2, 0x69, 0xf0, 0x37, 0x4b, 0x24, 0x75, 0x7c, 0xae, 0xac, 0xe0, 0xd2, + 0x40, 0x2b, 0x98, 0x52, 0x50, 0x5d, 0xc9, 0x4f, 0xa7, 0xd9, 0x05, 0x0a, 0x03, 0x86, 0x51, 0x4f, + 0xac, 0x55, 0x06, 0x3d, 0xb1, 0x86, 0xe6, 0x51, 0xdb, 0x3f, 0xf4, 0xa5, 0x4d, 0xaa, 0x84, 0xf7, + 0x16, 0x02, 0x81, 0xe3, 0xdc, 0xef, 0x54, 0xc8, 0x04, 0x37, 0xfc, 0x46, 0xb8, 0x2d, 0xd7, 0x85, + 0x0d, 0x56, 0xe8, 0x8e, 0x18, 0x6f, 0xcd, 0x32, 0x1a, 0x69, 0x7c, 0x42, 0xa9, 0xbe, 0x69, 0xbb, + 0xcd, 0x59, 0xb6, 0x7a, 0xbf, 0x94, 0x8a, 0x1c, 0x23, 0x9c, 0x87, 0x31, 0x16, 0xfb, 0x84, 0xc4, + 0xec, 0x95, 0x1e, 0xe4, 0x21, 0xf2, 0x74, 0xbd, 0x56, 0xa8, 0x1d, 0x0d, 0x55, 0x8c, 0xb7, 0x46, + 0x27, 0x08, 0x52, 0x08, 0x30, 0x78, 0x2f, 0xbd, 0x41, 0xaa, 0x8a, 0x38, 0x4f, 0x5d, 0x9e, 0x31, + 0xa7, 0xe4, 0x9f, 0x23, 0xf3, 0xa9, 0xba, 0x86, 0xd2, 0xb6, 0xbf, 0x4d, 0x95, 0x89, 0xbe, 0xd7, + 0x21, 0x31, 0xd7, 0xdb, 0xb9, 0x76, 0x86, 0xc5, 0x2f, 0x3e, 0xf0, 0x49, 0x7c, 0x05, 0xfa, 0x39, + 0xf5, 0x0c, 0x2c, 0x64, 0xd6, 0x26, 0x33, 0x0f, 0x96, 0xb3, 0x33, 0x0f, 0xb2, 0xa7, 0x49, 0x78, + 0xdb, 0x4f, 0x43, 0x03, 0xda, 0xb4, 0x35, 0xa0, 0x67, 0x8b, 0x4c, 0x83, 0x01, 0xaa, 0xcf, 0xbf, + 0x29, 0x11, 0x87, 0x13, 0xa4, 0x5f, 0xeb, 0xe2, 0x1e, 0x14, 0x43, 0x67, 0xd7, 0xf3, 0x46, 0x61, + 0xc0, 0xa0, 0x1a, 0x32, 0x13, 0xb3, 0x7a, 0xe5, 0xa6, 0xd8, 0x93, 0xd8, 0x95, 0x02, 0x4f, 0x62, + 0xff, 0x56, 0x85, 0xa4, 0x8f, 0x9a, 0x9d, 0xf7, 0xc8, 0x0c, 0x5e, 0x6b, 0xd9, 0x09, 0xda, 0x41, + 0x12, 0xf8, 0x71, 0x31, 0x37, 0xfe, 0x9a, 0x51, 0x42, 0xf8, 0xe0, 0x0c, 0x08, 0x58, 0x1c, 0x31, + 0x3e, 0xaa, 0x1b, 0x51, 0x4b, 0xa1, 0xed, 0xef, 0x31, 0xbd, 0x43, 0xe5, 0x6d, 0xa8, 0x2b, 0x28, + 0x18, 0x14, 0x19, 0x31, 0x4d, 0x95, 0xd3, 0x88, 0x69, 0x1a, 0x1b, 0x32, 0xa6, 0x69, 0xbc, 0x50, + 0x4c, 0x13, 0x90, 0xf3, 0xd2, 0x75, 0x86, 0xbf, 0xf1, 0x6a, 0x18, 0x4f, 0x35, 0x26, 0x22, 0xd1, + 0x96, 0xf0, 0xba, 0x0f, 0x64, 0x52, 0xc0, 0x80, 0x92, 0x6e, 0x8f, 0x9c, 0x6d, 0xf8, 0x51, 0xc0, + 0x32, 0xc1, 0xb4, 0xf4, 0x0a, 0xfc, 0x0a, 0x5e, 0xaa, 0xb7, 0x17, 0xff, 0x90, 0xb7, 0x76, 0x8c, + 0xfb, 0xf4, 0x72, 0xb1, 0x6b, 0x96, 0xee, 0x5f, 0x2a, 0x93, 0x49, 0x11, 0xd2, 0x31, 0xc2, 0x8d, + 0xe4, 0xba, 0x65, 0xdf, 0xbd, 0x98, 0xb7, 0x72, 0x59, 0x73, 0x06, 0x5a, 0x76, 0x8d, 0x94, 0x65, + 0xf7, 0x52, 0x31, 0x76, 0xc7, 0xdb, 0x74, 0xbf, 0x59, 0xa6, 0xbb, 0xbd, 0x1d, 0xca, 0x32, 0xba, + 0xe1, 0xf8, 0x22, 0x99, 0x8c, 0x45, 0xbc, 0x47, 0xa1, 0x47, 0xc8, 0xd3, 0x9f, 0x54, 0x3f, 0xaf, + 0x2d, 0x22, 0x3c, 0x24, 0xbb, 0xcc, 0x90, 0x92, 0xca, 0x69, 0x84, 0x94, 0xb8, 0xdf, 0x61, 0x22, + 0xd5, 0x1c, 0xc0, 0xd3, 0xd8, 0x13, 0xde, 0xb1, 0xa5, 0xef, 0xcb, 0x85, 0xa6, 0x82, 0x68, 0xdf, + 0x80, 0xbd, 0xe1, 0x5b, 0x25, 0x32, 0x2d, 0x08, 0x4f, 0xa3, 0x07, 0x3f, 0x6c, 0xf7, 0xe0, 0xb9, + 0x42, 0x3d, 0x18, 0xd0, 0xf4, 0xbf, 0x5d, 0x56, 0x4d, 0x2f, 0xf8, 0xce, 0xbf, 0xf9, 0x8a, 0x7f, + 0x79, 0x98, 0x57, 0xfc, 0x59, 0x74, 0x2b, 0xbe, 0xb9, 0xc8, 0xb7, 0xa8, 0xac, 0x37, 0x14, 0x77, + 0xe4, 0x5b, 0xb3, 0x08, 0x13, 0x21, 0xf4, 0xc3, 0xbe, 0xcd, 0xa8, 0x63, 0x7a, 0x15, 0x27, 0x30, + 0xb8, 0xca, 0x70, 0x33, 0x56, 0xc3, 0xb8, 0xed, 0x8b, 0xbc, 0x29, 0xe0, 0xa0, 0x28, 0xdc, 0x37, + 0x98, 0x8c, 0x65, 0xc3, 0x33, 0x5c, 0xa0, 0xee, 0x4f, 0x4f, 0xa8, 0x81, 0x65, 0x4e, 0x92, 0x9b, + 0xf2, 0x5d, 0xff, 0x52, 0x91, 0xa8, 0x04, 0xe3, 0x93, 0x64, 0x3f, 0xeb, 0xef, 0xf8, 0x7d, 0xde, + 0xe7, 0x37, 0x0a, 0xcb, 0xc8, 0x21, 0xfc, 0xcd, 0x2c, 0x97, 0x05, 0xbb, 0xbf, 0xbf, 0x59, 0x4f, + 0xe7, 0x0b, 0x5c, 0x93, 0x08, 0xd0, 0x34, 0xb4, 0x00, 0x57, 0xd7, 0xed, 0x27, 0x2e, 0xa5, 0xba, + 0x2e, 0x87, 0xc4, 0xd0, 0xd7, 0xa9, 0xfe, 0xa2, 0x32, 0x26, 0xd7, 0x79, 0xe2, 0xdb, 0x2a, 0xd7, + 0x5f, 0xd6, 0x35, 0x18, 0x4c, 0x1a, 0xaa, 0xd6, 0x9d, 0x6d, 0xa9, 0xe8, 0xc2, 0x7a, 0x6f, 0xa7, + 0x1d, 0x34, 0xb1, 0x28, 0x8f, 0xec, 0x7f, 0x1c, 0x8f, 0x92, 0x6b, 0xfd, 0x68, 0xc8, 0x2a, 0xe3, + 0x6c, 0x63, 0x04, 0x1f, 0xcb, 0x0c, 0x2d, 0xef, 0x00, 0x89, 0x84, 0x5a, 0x17, 0x64, 0x36, 0xae, + 0x86, 0x8d, 0xfe, 0x90, 0x81, 0xb8, 0x50, 0x10, 0x20, 0x48, 0xb3, 0xc0, 0x03, 0xea, 0xb6, 0xf9, + 0xc2, 0x4b, 0x5d, 0x04, 0x59, 0xaa, 0x03, 0x6a, 0xeb, 0xfd, 0x97, 0x3a, 0xa4, 0xa8, 0xa9, 0xb4, + 0x5f, 0x34, 0x21, 0xe2, 0xda, 0x2f, 0x1e, 0x72, 0xc5, 0x22, 0x25, 0xed, 0x27, 0x30, 0xc4, 0x72, + 0x6b, 0x00, 0x0d, 0x0c, 0x2c, 0x8d, 0x99, 0x23, 0xe5, 0x48, 0x1a, 0x01, 0x97, 0x3a, 0x34, 0xc2, + 0xc0, 0x81, 0x45, 0xf9, 0xd1, 0x0e, 0x08, 0xbe, 0x86, 0x85, 0x8d, 0x4d, 0xd5, 0xf9, 0x2a, 0x99, + 0x31, 0xdb, 0x28, 0xc4, 0xe4, 0x2b, 0xc5, 0x5f, 0xcd, 0x11, 0x9b, 0xb3, 0x6a, 0xb9, 0x89, 0x03, + 0x8b, 0xb7, 0xdb, 0x24, 0xf3, 0xa9, 0x57, 0x3b, 0xd5, 0xf3, 0xaf, 0xa5, 0x87, 0xf5, 0xfc, 0x2b, + 0xa6, 0x86, 0x19, 0xdf, 0xf6, 0x82, 0xfc, 0xdc, 0xeb, 0x45, 0xde, 0x4f, 0x75, 0x5e, 0x27, 0x13, + 0xfe, 0xee, 0x2e, 0x3e, 0xaf, 0xcf, 0xd7, 0xdc, 0x93, 0xea, 0x51, 0x6f, 0x06, 0xc5, 0x95, 0xc4, + 0x2a, 0xe3, 0x3f, 0x41, 0x10, 0xbb, 0xff, 0x8e, 0x5a, 0x57, 0xdb, 0x61, 0x5b, 0x1e, 0x55, 0xe4, + 0xb4, 0x64, 0xb5, 0x2f, 0x0b, 0xfc, 0xf3, 0x19, 0x59, 0xe0, 0x1d, 0xcd, 0x30, 0x23, 0x07, 0xbc, + 0xea, 0x4d, 0xa5, 0x50, 0x6f, 0xc6, 0x86, 0xe9, 0xcd, 0xd7, 0x4b, 0x44, 0x84, 0x20, 0x14, 0xd8, + 0x96, 0x5a, 0x32, 0x73, 0xb3, 0x75, 0xff, 0xfe, 0x42, 0x91, 0x38, 0x7a, 0x71, 0xeb, 0x5e, 0x4d, + 0x25, 0xeb, 0xae, 0xbd, 0xc5, 0x15, 0x4d, 0xef, 0x69, 0x8e, 0xbe, 0x21, 0x5f, 0xbf, 0xcf, 0x69, + 0xd7, 0x50, 0xb9, 0x7d, 0x58, 0x62, 0x63, 0x64, 0xac, 0x52, 0xbc, 0x98, 0x89, 0x8d, 0x25, 0x02, + 0x34, 0x0d, 0x06, 0x10, 0xc4, 0xbd, 0x1d, 0x46, 0x9e, 0x8a, 0x47, 0x68, 0x70, 0x30, 0x48, 0xbc, + 0xfb, 0x3f, 0x17, 0x88, 0xd5, 0x35, 0x2b, 0x9d, 0x4c, 0xe9, 0xa1, 0xa7, 0x93, 0xa1, 0xdc, 0xfd, + 0x83, 0x6e, 0x72, 0x54, 0x0b, 0xa2, 0x62, 0xa9, 0xbd, 0xd6, 0x05, 0x75, 0x3f, 0x77, 0x89, 0x01, + 0xc5, 0x71, 0x40, 0x72, 0xa0, 0xca, 0x23, 0x91, 0x1c, 0x68, 0xec, 0xff, 0x49, 0x72, 0x20, 0x6a, + 0x21, 0xec, 0xf1, 0xe7, 0xc4, 0xc5, 0xbd, 0xa9, 0x9c, 0xe3, 0xab, 0x8c, 0xb7, 0xc7, 0xf9, 0x05, + 0x19, 0x81, 0x00, 0xc9, 0x0e, 0x53, 0xcf, 0x70, 0x63, 0x41, 0xe4, 0xdb, 0x79, 0xa5, 0x88, 0x1b, + 0xa5, 0x3f, 0xf5, 0x8c, 0x08, 0x3a, 0x11, 0xbc, 0x64, 0x32, 0xa0, 0xc9, 0x8f, 0x9e, 0x0c, 0x48, + 0xa5, 0xf0, 0x99, 0x7a, 0x58, 0x29, 0x7c, 0xac, 0x54, 0x48, 0xd5, 0x51, 0xa4, 0x42, 0xa2, 0xb2, + 0xed, 0xb1, 0x6e, 0x56, 0x26, 0x31, 0x91, 0x8c, 0xe7, 0x0b, 0x27, 0xc8, 0xac, 0x66, 0x55, 0xcd, + 0xae, 0xb3, 0x64, 0x92, 0x41, 0x76, 0xc5, 0x32, 0xa7, 0xd2, 0xf4, 0x47, 0xcf, 0xa9, 0x34, 0xea, + 0xac, 0x3d, 0x3a, 0xc3, 0xd2, 0xec, 0x48, 0x32, 0x2c, 0xcd, 0x3d, 0xc4, 0x0c, 0x4b, 0x46, 0x6e, + 0xa4, 0xf9, 0x87, 0x9b, 0x1b, 0x69, 0x9f, 0x4c, 0xb7, 0xc2, 0xfb, 0x9d, 0xfb, 0x5e, 0xd4, 0x5a, + 0xa9, 0x6f, 0x8a, 0x54, 0x3c, 0x39, 0x77, 0xde, 0x6b, 0xba, 0x80, 0x55, 0x03, 0xf7, 0x17, 0x6a, + 0x24, 0x98, 0xac, 0x45, 0x96, 0xa8, 0x33, 0x1f, 0x31, 0x4b, 0x94, 0x95, 0x6b, 0xc9, 0x19, 0x45, + 0xae, 0xa5, 0xf7, 0xd8, 0xcd, 0xd7, 0xdd, 0x60, 0xef, 0x86, 0xd7, 0x5d, 0x3c, 0x5b, 0xa4, 0x86, + 0x35, 0x49, 0xde, 0x5f, 0x83, 0x42, 0x81, 0x66, 0xda, 0x9f, 0xcd, 0xe9, 0xdc, 0x69, 0x67, 0x73, + 0x7a, 0x6c, 0x84, 0xd9, 0x9c, 0xce, 0x8f, 0x22, 0x9b, 0xd3, 0x5f, 0x20, 0x4f, 0x1d, 0xdf, 0x7f, + 0x9d, 0xa0, 0xb3, 0xae, 0x4d, 0xea, 0x54, 0x82, 0x4e, 0xa6, 0x5b, 0x18, 0x54, 0x46, 0xb0, 0x66, + 0xf9, 0xb8, 0x60, 0x4d, 0xf7, 0x9f, 0x96, 0xc8, 0xe3, 0x03, 0x12, 0x3d, 0x14, 0x8e, 0xbe, 0xee, + 0x92, 0xf9, 0xae, 0x5d, 0xb4, 0xf0, 0x3d, 0x09, 0x2b, 0xb1, 0x84, 0x4a, 0xf0, 0x9c, 0x42, 0x40, + 0x9a, 0xfd, 0xea, 0xb3, 0xdf, 0xfd, 0xc1, 0x53, 0x1f, 0xfb, 0x1e, 0xfd, 0xfb, 0x3d, 0xfa, 0xf7, + 0xe3, 0x7f, 0xf4, 0x54, 0xe9, 0xbb, 0xf4, 0xef, 0x7b, 0xf4, 0xef, 0x0f, 0xe9, 0xdf, 0xd7, 0xff, + 0xf8, 0xa9, 0x8f, 0xfd, 0x48, 0xf9, 0xf0, 0xf2, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xf4, 0x77, + 0x02, 0x29, 0xf6, 0xb0, 0x00, 0x00, +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/generated.proto b/vendor/k8s.io/client-go/1.4/pkg/api/v1/generated.proto new file mode 100644 index 00000000..06da5fcc --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/generated.proto @@ -0,0 +1,3088 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.api.v1; + +import "k8s.io/kubernetes/pkg/api/resource/generated.proto"; +import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// Represents a Persistent Disk resource in AWS. +// +// An AWS EBS disk must exist before mounting to a container. The disk +// must also be in the same AWS zone as the kubelet. An AWS EBS disk +// can only be mounted as read/write once. AWS EBS volumes support +// ownership management and SELinux relabeling. +message AWSElasticBlockStoreVolumeSource { + // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + optional string volumeID = 1; + + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + // TODO: how do we prevent errors in the filesystem from compromising the machine + optional string fsType = 2; + + // The partition in the volume that you want to mount. + // If omitted, the default is to mount by volume name. + // Examples: For volume /dev/sda1, you specify the partition as "1". + // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). + optional int32 partition = 3; + + // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". + // If omitted, the default is "false". + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + optional bool readOnly = 4; +} + +// Affinity is a group of affinity scheduling rules. +message Affinity { + // Describes node affinity scheduling rules for the pod. + optional NodeAffinity nodeAffinity = 1; + + // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). + optional PodAffinity podAffinity = 2; + + // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). + optional PodAntiAffinity podAntiAffinity = 3; +} + +// AttachedVolume describes a volume attached to a node +message AttachedVolume { + // Name of the attached volume + optional string name = 1; + + // DevicePath represents the device path where the volume should be avilable + optional string devicePath = 2; +} + +// AvoidPods describes pods that should avoid this node. This is the value for a +// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and +// will eventually become a field of NodeStatus. +message AvoidPods { + // Bounded-sized list of signatures of pods that should avoid this node, sorted + // in timestamp order from oldest to newest. Size of the slice is unspecified. + repeated PreferAvoidPodsEntry preferAvoidPods = 1; +} + +// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. +message AzureDiskVolumeSource { + // The Name of the data disk in the blob storage + optional string diskName = 1; + + // The URI the data disk in the blob storage + optional string diskURI = 2; + + // Host Caching mode: None, Read Only, Read Write. + optional string cachingMode = 3; + + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + optional string fsType = 4; + + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + optional bool readOnly = 5; +} + +// AzureFile represents an Azure File Service mount on the host and bind mount to the pod. +message AzureFileVolumeSource { + // the name of secret that contains Azure Storage Account Name and Key + optional string secretName = 1; + + // Share Name + optional string shareName = 2; + + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + optional bool readOnly = 3; +} + +// Binding ties one object to another. +// For example, a pod is bound to a node by a scheduler. +message Binding { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // The target object that you want to bind to the standard object. + optional ObjectReference target = 2; +} + +// Adds and removes POSIX capabilities from running containers. +message Capabilities { + // Added capabilities + repeated string add = 1; + + // Removed capabilities + repeated string drop = 2; +} + +// Represents a Ceph Filesystem mount that lasts the lifetime of a pod +// Cephfs volumes do not support ownership management or SELinux relabeling. +message CephFSVolumeSource { + // Required: Monitors is a collection of Ceph monitors + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + repeated string monitors = 1; + + // Optional: Used as the mounted root, rather than the full Ceph tree, default is / + optional string path = 2; + + // Optional: User is the rados user name, default is admin + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + optional string user = 3; + + // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + optional string secretFile = 4; + + // Optional: SecretRef is reference to the authentication secret for User, default is empty. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + optional LocalObjectReference secretRef = 5; + + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + optional bool readOnly = 6; +} + +// Represents a cinder volume resource in Openstack. +// A Cinder volume must exist before mounting to a container. +// The volume must also be in the same region as the kubelet. +// Cinder volumes support ownership management and SELinux relabeling. +message CinderVolumeSource { + // volume id used to identify the volume in cinder + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + optional string volumeID = 1; + + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + optional string fsType = 2; + + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + optional bool readOnly = 3; +} + +// Information about the condition of a component. +message ComponentCondition { + // Type of condition for a component. + // Valid value: "Healthy" + optional string type = 1; + + // Status of the condition for a component. + // Valid values for "Healthy": "True", "False", or "Unknown". + optional string status = 2; + + // Message about the condition for a component. + // For example, information about a health check. + optional string message = 3; + + // Condition error code for a component. + // For example, a health check error code. + optional string error = 4; +} + +// ComponentStatus (and ComponentStatusList) holds the cluster validation info. +message ComponentStatus { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // List of component conditions observed + repeated ComponentCondition conditions = 2; +} + +// Status of all the conditions for the component as a list of ComponentStatus objects. +message ComponentStatusList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of ComponentStatus objects. + repeated ComponentStatus items = 2; +} + +// ConfigMap holds configuration data for pods to consume. +message ConfigMap { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Data contains the configuration data. + // Each key must be a valid DNS_SUBDOMAIN with an optional leading dot. + map data = 2; +} + +// Selects a key from a ConfigMap. +message ConfigMapKeySelector { + // The ConfigMap to select from. + optional LocalObjectReference localObjectReference = 1; + + // The key to select. + optional string key = 2; +} + +// ConfigMapList is a resource containing a list of ConfigMap objects. +message ConfigMapList { + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // Items is the list of ConfigMaps. + repeated ConfigMap items = 2; +} + +// Adapts a ConfigMap into a volume. +// +// The contents of the target ConfigMap's Data field will be presented in a +// volume as files using the keys in the Data field as the file names, unless +// the items element is populated with specific mappings of keys to paths. +// ConfigMap volumes support ownership management and SELinux relabeling. +message ConfigMapVolumeSource { + optional LocalObjectReference localObjectReference = 1; + + // If unspecified, each key-value pair in the Data field of the referenced + // ConfigMap will be projected into the volume as a file whose name is the + // key and content is the value. If specified, the listed keys will be + // projected into the specified paths, and unlisted keys will not be + // present. If a key is specified which is not present in the ConfigMap, + // the volume setup will error. Paths must be relative and may not contain + // the '..' path or start with '..'. + repeated KeyToPath items = 2; + + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 defaultMode = 3; +} + +// A single application container that you want to run within a pod. +message Container { + // Name of the container specified as a DNS_LABEL. + // Each container in a pod must have a unique name (DNS_LABEL). + // Cannot be updated. + optional string name = 1; + + // Docker image name. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md + optional string image = 2; + + // Entrypoint array. Not executed within a shell. + // The docker image's ENTRYPOINT is used if this is not provided. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands + repeated string command = 3; + + // Arguments to the entrypoint. + // The docker image's CMD is used if this is not provided. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands + repeated string args = 4; + + // Container's working directory. + // If not specified, the container runtime's default will be used, which + // might be configured in the container image. + // Cannot be updated. + optional string workingDir = 5; + + // List of ports to expose from the container. Exposing a port here gives + // the system additional information about the network connections a + // container uses, but is primarily informational. Not specifying a port here + // DOES NOT prevent that port from being exposed. Any port which is + // listening on the default "0.0.0.0" address inside a container will be + // accessible from the network. + // Cannot be updated. + repeated ContainerPort ports = 6; + + // List of environment variables to set in the container. + // Cannot be updated. + repeated EnvVar env = 7; + + // Compute Resources required by this container. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources + optional ResourceRequirements resources = 8; + + // Pod volumes to mount into the container's filesystem. + // Cannot be updated. + repeated VolumeMount volumeMounts = 9; + + // Periodic probe of container liveness. + // Container will be restarted if the probe fails. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes + optional Probe livenessProbe = 10; + + // Periodic probe of container service readiness. + // Container will be removed from service endpoints if the probe fails. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes + optional Probe readinessProbe = 11; + + // Actions that the management system should take in response to container lifecycle events. + // Cannot be updated. + optional Lifecycle lifecycle = 12; + + // Optional: Path at which the file to which the container's termination message + // will be written is mounted into the container's filesystem. + // Message written is intended to be brief final status, such as an assertion failure message. + // Defaults to /dev/termination-log. + // Cannot be updated. + optional string terminationMessagePath = 13; + + // Image pull policy. + // One of Always, Never, IfNotPresent. + // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#updating-images + optional string imagePullPolicy = 14; + + // Security options the pod should run with. + // More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md + optional SecurityContext securityContext = 15; + + // Whether this container should allocate a buffer for stdin in the container runtime. If this + // is not set, reads from stdin in the container will always result in EOF. + // Default is false. + optional bool stdin = 16; + + // Whether the container runtime should close the stdin channel after it has been opened by + // a single attach. When stdin is true the stdin stream will remain open across multiple attach + // sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the + // first client attaches to stdin, and then remains open and accepts data until the client disconnects, + // at which time stdin is closed and remains closed until the container is restarted. If this + // flag is false, a container processes that reads from stdin will never receive an EOF. + // Default is false + optional bool stdinOnce = 17; + + // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. + // Default is false. + optional bool tty = 18; +} + +// Describe a container image +message ContainerImage { + // Names by which this image is known. + // e.g. ["gcr.io/google_containers/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"] + repeated string names = 1; + + // The size of the image in bytes. + optional int64 sizeBytes = 2; +} + +// ContainerPort represents a network port in a single container. +message ContainerPort { + // If specified, this must be an IANA_SVC_NAME and unique within the pod. Each + // named port in a pod must have a unique name. Name for the port that can be + // referred to by services. + optional string name = 1; + + // Number of port to expose on the host. + // If specified, this must be a valid port number, 0 < x < 65536. + // If HostNetwork is specified, this must match ContainerPort. + // Most containers do not need this. + optional int32 hostPort = 2; + + // Number of port to expose on the pod's IP address. + // This must be a valid port number, 0 < x < 65536. + optional int32 containerPort = 3; + + // Protocol for port. Must be UDP or TCP. + // Defaults to "TCP". + optional string protocol = 4; + + // What host IP to bind the external port to. + optional string hostIP = 5; +} + +// ContainerState holds a possible state of container. +// Only one of its members may be specified. +// If none of them is specified, the default one is ContainerStateWaiting. +message ContainerState { + // Details about a waiting container + optional ContainerStateWaiting waiting = 1; + + // Details about a running container + optional ContainerStateRunning running = 2; + + // Details about a terminated container + optional ContainerStateTerminated terminated = 3; +} + +// ContainerStateRunning is a running state of a container. +message ContainerStateRunning { + // Time at which the container was last (re-)started + optional k8s.io.kubernetes.pkg.api.unversioned.Time startedAt = 1; +} + +// ContainerStateTerminated is a terminated state of a container. +message ContainerStateTerminated { + // Exit status from the last termination of the container + optional int32 exitCode = 1; + + // Signal from the last termination of the container + optional int32 signal = 2; + + // (brief) reason from the last termination of the container + optional string reason = 3; + + // Message regarding the last termination of the container + optional string message = 4; + + // Time at which previous execution of the container started + optional k8s.io.kubernetes.pkg.api.unversioned.Time startedAt = 5; + + // Time at which the container last terminated + optional k8s.io.kubernetes.pkg.api.unversioned.Time finishedAt = 6; + + // Container's ID in the format 'docker://' + optional string containerID = 7; +} + +// ContainerStateWaiting is a waiting state of a container. +message ContainerStateWaiting { + // (brief) reason the container is not yet running. + optional string reason = 1; + + // Message regarding why the container is not yet running. + optional string message = 2; +} + +// ContainerStatus contains details for the current status of this container. +message ContainerStatus { + // This must be a DNS_LABEL. Each container in a pod must have a unique name. + // Cannot be updated. + optional string name = 1; + + // Details about the container's current condition. + optional ContainerState state = 2; + + // Details about the container's last termination condition. + optional ContainerState lastState = 3; + + // Specifies whether the container has passed its readiness probe. + optional bool ready = 4; + + // The number of times the container has been restarted, currently based on + // the number of dead containers that have not yet been removed. + // Note that this is calculated from dead containers. But those containers are subject to + // garbage collection. This value will get capped at 5 by GC. + optional int32 restartCount = 5; + + // The image the container is running. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md + // TODO(dchen1107): Which image the container is running with? + optional string image = 6; + + // ImageID of the container's image. + optional string imageID = 7; + + // Container's ID in the format 'docker://'. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#container-information + optional string containerID = 8; +} + +// DaemonEndpoint contains information about a single Daemon endpoint. +message DaemonEndpoint { + // Port number of the given endpoint. + optional int32 Port = 1; +} + +// DeleteOptions may be provided when deleting an API object +message DeleteOptions { + // The duration in seconds before the object should be deleted. Value must be non-negative integer. + // The value zero indicates delete immediately. If this value is nil, the default grace period for the + // specified type will be used. + // Defaults to a per object value if not specified. zero means delete immediately. + optional int64 gracePeriodSeconds = 1; + + // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be + // returned. + optional Preconditions preconditions = 2; + + // Should the dependent objects be orphaned. If true/false, the "orphan" + // finalizer will be added to/removed from the object's finalizers list. + optional bool orphanDependents = 3; +} + +// DownwardAPIVolumeFile represents information to create the file containing the pod field +message DownwardAPIVolumeFile { + // Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..' + optional string path = 1; + + // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported. + optional ObjectFieldSelector fieldRef = 2; + + // Selects a resource of the container: only resources limits and requests + // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. + optional ResourceFieldSelector resourceFieldRef = 3; + + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 mode = 4; +} + +// DownwardAPIVolumeSource represents a volume containing downward API info. +// Downward API volumes support ownership management and SELinux relabeling. +message DownwardAPIVolumeSource { + // Items is a list of downward API volume file + repeated DownwardAPIVolumeFile items = 1; + + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 defaultMode = 2; +} + +// Represents an empty directory for a pod. +// Empty directory volumes support ownership management and SELinux relabeling. +message EmptyDirVolumeSource { + // What type of storage medium should back this directory. + // The default is "" which means to use the node's default medium. + // Must be an empty string (default) or Memory. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir + optional string medium = 1; +} + +// EndpointAddress is a tuple that describes single IP address. +message EndpointAddress { + // The IP of this endpoint. + // May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), + // or link-local multicast ((224.0.0.0/24). + // IPv6 is also accepted but not fully supported on all platforms. Also, certain + // kubernetes components, like kube-proxy, are not IPv6 ready. + // TODO: This should allow hostname or IP, See #4447. + optional string ip = 1; + + // The Hostname of this endpoint + optional string hostname = 3; + + // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node. + optional string nodeName = 4; + + // Reference to object providing the endpoint. + optional ObjectReference targetRef = 2; +} + +// EndpointPort is a tuple that describes a single port. +message EndpointPort { + // The name of this port (corresponds to ServicePort.Name). + // Must be a DNS_LABEL. + // Optional only if one port is defined. + optional string name = 1; + + // The port number of the endpoint. + optional int32 port = 2; + + // The IP protocol for this port. + // Must be UDP or TCP. + // Default is TCP. + optional string protocol = 3; +} + +// EndpointSubset is a group of addresses with a common set of ports. The +// expanded set of endpoints is the Cartesian product of Addresses x Ports. +// For example, given: +// { +// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], +// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] +// } +// The resulting set of endpoints can be viewed as: +// a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], +// b: [ 10.10.1.1:309, 10.10.2.2:309 ] +message EndpointSubset { + // IP addresses which offer the related ports that are marked as ready. These endpoints + // should be considered safe for load balancers and clients to utilize. + repeated EndpointAddress addresses = 1; + + // IP addresses which offer the related ports but are not currently marked as ready + // because they have not yet finished starting, have recently failed a readiness check, + // or have recently failed a liveness check. + repeated EndpointAddress notReadyAddresses = 2; + + // Port numbers available on the related IP addresses. + repeated EndpointPort ports = 3; +} + +// Endpoints is a collection of endpoints that implement the actual service. Example: +// Name: "mysvc", +// Subsets: [ +// { +// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], +// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] +// }, +// { +// Addresses: [{"ip": "10.10.3.3"}], +// Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}] +// }, +// ] +message Endpoints { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // The set of all endpoints is the union of all subsets. Addresses are placed into + // subsets according to the IPs they share. A single address with multiple ports, + // some of which are ready and some of which are not (because they come from + // different containers) will result in the address being displayed in different + // subsets for the different ports. No address will appear in both Addresses and + // NotReadyAddresses in the same subset. + // Sets of addresses and ports that comprise a service. + repeated EndpointSubset subsets = 2; +} + +// EndpointsList is a list of endpoints. +message EndpointsList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of endpoints. + repeated Endpoints items = 2; +} + +// EnvVar represents an environment variable present in a Container. +message EnvVar { + // Name of the environment variable. Must be a C_IDENTIFIER. + optional string name = 1; + + // Variable references $(VAR_NAME) are expanded + // using the previous defined environment variables in the container and + // any service environment variables. If a variable cannot be resolved, + // the reference in the input string will be unchanged. The $(VAR_NAME) + // syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped + // references will never be expanded, regardless of whether the variable + // exists or not. + // Defaults to "". + optional string value = 2; + + // Source for the environment variable's value. Cannot be used if value is not empty. + optional EnvVarSource valueFrom = 3; +} + +// EnvVarSource represents a source for the value of an EnvVar. +message EnvVarSource { + // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, + // spec.nodeName, spec.serviceAccountName, status.podIP. + optional ObjectFieldSelector fieldRef = 1; + + // Selects a resource of the container: only resources limits and requests + // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. + optional ResourceFieldSelector resourceFieldRef = 2; + + // Selects a key of a ConfigMap. + optional ConfigMapKeySelector configMapKeyRef = 3; + + // Selects a key of a secret in the pod's namespace + optional SecretKeySelector secretKeyRef = 4; +} + +// Event is a report of an event somewhere in the cluster. +// TODO: Decide whether to store these separately or with the object they apply to. +message Event { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // The object that this event is about. + optional ObjectReference involvedObject = 2; + + // This should be a short, machine understandable string that gives the reason + // for the transition into the object's current status. + // TODO: provide exact specification for format. + optional string reason = 3; + + // A human-readable description of the status of this operation. + // TODO: decide on maximum length. + optional string message = 4; + + // The component reporting this event. Should be a short machine understandable string. + optional EventSource source = 5; + + // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.) + optional k8s.io.kubernetes.pkg.api.unversioned.Time firstTimestamp = 6; + + // The time at which the most recent occurrence of this event was recorded. + optional k8s.io.kubernetes.pkg.api.unversioned.Time lastTimestamp = 7; + + // The number of times this event has occurred. + optional int32 count = 8; + + // Type of this event (Normal, Warning), new types could be added in the future + optional string type = 9; +} + +// EventList is a list of events. +message EventList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of events + repeated Event items = 2; +} + +// EventSource contains information for an event. +message EventSource { + // Component from which the event is generated. + optional string component = 1; + + // Host name on which the event is generated. + optional string host = 2; +} + +// ExecAction describes a "run in container" action. +message ExecAction { + // Command is the command line to execute inside the container, the working directory for the + // command is root ('/') in the container's filesystem. The command is simply exec'd, it is + // not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use + // a shell, you need to explicitly call out to that shell. + // Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + repeated string command = 1; +} + +// ExportOptions is the query options to the standard REST get call. +message ExportOptions { + // Should this value be exported. Export strips fields that a user can not specify. + optional bool export = 1; + + // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace' + optional bool exact = 2; +} + +// Represents a Fibre Channel volume. +// Fibre Channel volumes can only be mounted as read/write once. +// Fibre Channel volumes support ownership management and SELinux relabeling. +message FCVolumeSource { + // Required: FC target worldwide names (WWNs) + repeated string targetWWNs = 1; + + // Required: FC target lun number + optional int32 lun = 2; + + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // TODO: how do we prevent errors in the filesystem from compromising the machine + optional string fsType = 3; + + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + optional bool readOnly = 4; +} + +// FlexVolume represents a generic volume resource that is +// provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. +message FlexVolumeSource { + // Driver is the name of the driver to use for this volume. + optional string driver = 1; + + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. + optional string fsType = 2; + + // Optional: SecretRef is reference to the secret object containing + // sensitive information to pass to the plugin scripts. This may be + // empty if no secret object is specified. If the secret object + // contains more than one secret, all secrets are passed to the plugin + // scripts. + optional LocalObjectReference secretRef = 3; + + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + optional bool readOnly = 4; + + // Optional: Extra command options if any. + map options = 5; +} + +// Represents a Flocker volume mounted by the Flocker agent. +// Flocker volumes do not support ownership management or SELinux relabeling. +message FlockerVolumeSource { + // Required: the volume name. This is going to be store on metadata -> name on the payload for Flocker + optional string datasetName = 1; +} + +// Represents a Persistent Disk resource in Google Compute Engine. +// +// A GCE PD must exist before mounting to a container. The disk must +// also be in the same GCE project and zone as the kubelet. A GCE PD +// can only be mounted as read/write once or read-only many times. GCE +// PDs support ownership management and SELinux relabeling. +message GCEPersistentDiskVolumeSource { + // Unique name of the PD resource in GCE. Used to identify the disk in GCE. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + optional string pdName = 1; + + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + // TODO: how do we prevent errors in the filesystem from compromising the machine + optional string fsType = 2; + + // The partition in the volume that you want to mount. + // If omitted, the default is to mount by volume name. + // Examples: For volume /dev/sda1, you specify the partition as "1". + // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + optional int32 partition = 3; + + // ReadOnly here will force the ReadOnly setting in VolumeMounts. + // Defaults to false. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + optional bool readOnly = 4; +} + +// Represents a volume that is populated with the contents of a git repository. +// Git repo volumes do not support ownership management. +// Git repo volumes support SELinux relabeling. +message GitRepoVolumeSource { + // Repository URL + optional string repository = 1; + + // Commit hash for the specified revision. + optional string revision = 2; + + // Target directory name. + // Must not contain or start with '..'. If '.' is supplied, the volume directory will be the + // git repository. Otherwise, if specified, the volume will contain the git repository in + // the subdirectory with the given name. + optional string directory = 3; +} + +// Represents a Glusterfs mount that lasts the lifetime of a pod. +// Glusterfs volumes do not support ownership management or SELinux relabeling. +message GlusterfsVolumeSource { + // EndpointsName is the endpoint name that details Glusterfs topology. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod + optional string endpoints = 1; + + // Path is the Glusterfs volume path. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod + optional string path = 2; + + // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. + // Defaults to false. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod + optional bool readOnly = 3; +} + +// HTTPGetAction describes an action based on HTTP Get requests. +message HTTPGetAction { + // Path to access on the HTTP server. + optional string path = 1; + + // Name or number of the port to access on the container. + // Number must be in the range 1 to 65535. + // Name must be an IANA_SVC_NAME. + optional k8s.io.kubernetes.pkg.util.intstr.IntOrString port = 2; + + // Host name to connect to, defaults to the pod IP. You probably want to set + // "Host" in httpHeaders instead. + optional string host = 3; + + // Scheme to use for connecting to the host. + // Defaults to HTTP. + optional string scheme = 4; + + // Custom headers to set in the request. HTTP allows repeated headers. + repeated HTTPHeader httpHeaders = 5; +} + +// HTTPHeader describes a custom header to be used in HTTP probes +message HTTPHeader { + // The header field name + optional string name = 1; + + // The header field value + optional string value = 2; +} + +// Handler defines a specific action that should be taken +// TODO: pass structured data to these actions, and document that data here. +message Handler { + // One and only one of the following should be specified. + // Exec specifies the action to take. + optional ExecAction exec = 1; + + // HTTPGet specifies the http request to perform. + optional HTTPGetAction httpGet = 2; + + // TCPSocket specifies an action involving a TCP port. + // TCP hooks not yet supported + // TODO: implement a realistic TCP lifecycle hook + optional TCPSocketAction tcpSocket = 3; +} + +// Represents a host path mapped into a pod. +// Host path volumes do not support ownership management or SELinux relabeling. +message HostPathVolumeSource { + // Path of the directory on the host. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath + optional string path = 1; +} + +// Represents an ISCSI disk. +// ISCSI volumes can only be mounted as read/write once. +// ISCSI volumes support ownership management and SELinux relabeling. +message ISCSIVolumeSource { + // iSCSI target portal. The portal is either an IP or ip_addr:port if the port + // is other than default (typically TCP ports 860 and 3260). + optional string targetPortal = 1; + + // Target iSCSI Qualified Name. + optional string iqn = 2; + + // iSCSI target lun number. + optional int32 lun = 3; + + // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. + optional string iscsiInterface = 4; + + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#iscsi + // TODO: how do we prevent errors in the filesystem from compromising the machine + optional string fsType = 5; + + // ReadOnly here will force the ReadOnly setting in VolumeMounts. + // Defaults to false. + optional bool readOnly = 6; +} + +// Maps a string key to a path within a volume. +message KeyToPath { + // The key to project. + optional string key = 1; + + // The relative path of the file to map the key to. + // May not be an absolute path. + // May not contain the path element '..'. + // May not start with the string '..'. + optional string path = 2; + + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 mode = 3; +} + +// Lifecycle describes actions that the management system should take in response to container lifecycle +// events. For the PostStart and PreStop lifecycle handlers, management of the container blocks +// until the action is complete, unless the container process fails, in which case the handler is aborted. +message Lifecycle { + // PostStart is called immediately after a container is created. If the handler fails, + // the container is terminated and restarted according to its restart policy. + // Other management of the container blocks until the hook completes. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details + optional Handler postStart = 1; + + // PreStop is called immediately before a container is terminated. + // The container is terminated after the handler completes. + // The reason for termination is passed to the handler. + // Regardless of the outcome of the handler, the container is eventually terminated. + // Other management of the container blocks until the hook completes. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details + optional Handler preStop = 2; +} + +// LimitRange sets resource usage limits for each kind of resource in a Namespace. +message LimitRange { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Spec defines the limits enforced. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional LimitRangeSpec spec = 2; +} + +// LimitRangeItem defines a min/max usage limit for any resource that matches on kind. +message LimitRangeItem { + // Type of resource that this limit applies to. + optional string type = 1; + + // Max usage constraints on this kind by resource name. + map max = 2; + + // Min usage constraints on this kind by resource name. + map min = 3; + + // Default resource requirement limit value by resource name if resource limit is omitted. + map default = 4; + + // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted. + map defaultRequest = 5; + + // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource. + map maxLimitRequestRatio = 6; +} + +// LimitRangeList is a list of LimitRange items. +message LimitRangeList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // Items is a list of LimitRange objects. + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_limit_range.md + repeated LimitRange items = 2; +} + +// LimitRangeSpec defines a min/max usage limit for resources that match on kind. +message LimitRangeSpec { + // Limits is the list of LimitRangeItem objects that are enforced. + repeated LimitRangeItem limits = 1; +} + +// List holds a list of objects, which may not be known by the server. +message List { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of objects + repeated k8s.io.kubernetes.pkg.runtime.RawExtension items = 2; +} + +// ListOptions is the query options to a standard REST list call. +message ListOptions { + // A selector to restrict the list of returned objects by their labels. + // Defaults to everything. + optional string labelSelector = 1; + + // A selector to restrict the list of returned objects by their fields. + // Defaults to everything. + optional string fieldSelector = 2; + + // Watch for changes to the described resources and return them as a stream of + // add, update, and remove notifications. Specify resourceVersion. + optional bool watch = 3; + + // When specified with a watch call, shows changes that occur after that particular version of a resource. + // Defaults to changes from the beginning of history. + optional string resourceVersion = 4; + + // Timeout for the list/watch call. + optional int64 timeoutSeconds = 5; +} + +// LoadBalancerIngress represents the status of a load-balancer ingress point: +// traffic intended for the service should be sent to an ingress point. +message LoadBalancerIngress { + // IP is set for load-balancer ingress points that are IP based + // (typically GCE or OpenStack load-balancers) + optional string ip = 1; + + // Hostname is set for load-balancer ingress points that are DNS based + // (typically AWS load-balancers) + optional string hostname = 2; +} + +// LoadBalancerStatus represents the status of a load-balancer. +message LoadBalancerStatus { + // Ingress is a list containing ingress points for the load-balancer. + // Traffic intended for the service should be sent to these ingress points. + repeated LoadBalancerIngress ingress = 1; +} + +// LocalObjectReference contains enough information to let you locate the +// referenced object inside the same namespace. +message LocalObjectReference { + // Name of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + // TODO: Add other useful fields. apiVersion, kind, uid? + optional string name = 1; +} + +// Represents an NFS mount that lasts the lifetime of a pod. +// NFS volumes do not support ownership management or SELinux relabeling. +message NFSVolumeSource { + // Server is the hostname or IP address of the NFS server. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + optional string server = 1; + + // Path that is exported by the NFS server. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + optional string path = 2; + + // ReadOnly here will force + // the NFS export to be mounted with read-only permissions. + // Defaults to false. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + optional bool readOnly = 3; +} + +// Namespace provides a scope for Names. +// Use of multiple namespaces is optional. +message Namespace { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Spec defines the behavior of the Namespace. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional NamespaceSpec spec = 2; + + // Status describes the current status of a Namespace. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional NamespaceStatus status = 3; +} + +// NamespaceList is a list of Namespaces. +message NamespaceList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // Items is the list of Namespace objects in the list. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md + repeated Namespace items = 2; +} + +// NamespaceSpec describes the attributes on a Namespace. +message NamespaceSpec { + // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. + // More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#finalizers + repeated string finalizers = 1; +} + +// NamespaceStatus is information about the current status of a Namespace. +message NamespaceStatus { + // Phase is the current lifecycle phase of the namespace. + // More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#phases + optional string phase = 1; +} + +// Node is a worker node in Kubernetes, formerly known as minion. +// Each node will have a unique identifier in the cache (i.e. in etcd). +message Node { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Spec defines the behavior of a node. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional NodeSpec spec = 2; + + // Most recently observed status of the node. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional NodeStatus status = 3; +} + +// NodeAddress contains information for the node's address. +message NodeAddress { + // Node address type, one of Hostname, ExternalIP or InternalIP. + optional string type = 1; + + // The node address. + optional string address = 2; +} + +// Node affinity is a group of node affinity scheduling rules. +message NodeAffinity { + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to an update), the system + // may or may not try to eventually evict the pod from its node. + optional NodeSelector requiredDuringSchedulingIgnoredDuringExecution = 1; + + // The scheduler will prefer to schedule pods to nodes that satisfy + // the affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node matches the corresponding matchExpressions; the + // node(s) with the highest sum are the most preferred. + repeated PreferredSchedulingTerm preferredDuringSchedulingIgnoredDuringExecution = 2; +} + +// NodeCondition contains condition information for a node. +message NodeCondition { + // Type of node condition. + optional string type = 1; + + // Status of the condition, one of True, False, Unknown. + optional string status = 2; + + // Last time we got an update on a given condition. + optional k8s.io.kubernetes.pkg.api.unversioned.Time lastHeartbeatTime = 3; + + // Last time the condition transit from one status to another. + optional k8s.io.kubernetes.pkg.api.unversioned.Time lastTransitionTime = 4; + + // (brief) reason for the condition's last transition. + optional string reason = 5; + + // Human readable message indicating details about last transition. + optional string message = 6; +} + +// NodeDaemonEndpoints lists ports opened by daemons running on the Node. +message NodeDaemonEndpoints { + // Endpoint on which Kubelet is listening. + optional DaemonEndpoint kubeletEndpoint = 1; +} + +// NodeList is the whole list of all Nodes which have been registered with master. +message NodeList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of nodes + repeated Node items = 2; +} + +// NodeProxyOptions is the query options to a Node's proxy call. +message NodeProxyOptions { + // Path is the URL path to use for the current proxy request to node. + optional string path = 1; +} + +// A node selector represents the union of the results of one or more label queries +// over a set of nodes; that is, it represents the OR of the selectors represented +// by the node selector terms. +message NodeSelector { + // Required. A list of node selector terms. The terms are ORed. + repeated NodeSelectorTerm nodeSelectorTerms = 1; +} + +// A node selector requirement is a selector that contains values, a key, and an operator +// that relates the key and values. +message NodeSelectorRequirement { + // The label key that the selector applies to. + optional string key = 1; + + // Represents a key's relationship to a set of values. + // Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + optional string operator = 2; + + // An array of string values. If the operator is In or NotIn, + // the values array must be non-empty. If the operator is Exists or DoesNotExist, + // the values array must be empty. If the operator is Gt or Lt, the values + // array must have a single element, which will be interpreted as an integer. + // This array is replaced during a strategic merge patch. + repeated string values = 3; +} + +// A null or empty node selector term matches no objects. +message NodeSelectorTerm { + // Required. A list of node selector requirements. The requirements are ANDed. + repeated NodeSelectorRequirement matchExpressions = 1; +} + +// NodeSpec describes the attributes that a node is created with. +message NodeSpec { + // PodCIDR represents the pod IP range assigned to the node. + optional string podCIDR = 1; + + // External ID of the node assigned by some machine database (e.g. a cloud provider). + // Deprecated. + optional string externalID = 2; + + // ID of the node assigned by the cloud provider in the format: :// + optional string providerID = 3; + + // Unschedulable controls node schedulability of new pods. By default, node is schedulable. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#manual-node-administration"` + optional bool unschedulable = 4; +} + +// NodeStatus is information about the current status of a node. +message NodeStatus { + // Capacity represents the total resources of a node. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity for more details. + map capacity = 1; + + // Allocatable represents the resources of a node that are available for scheduling. + // Defaults to Capacity. + map allocatable = 2; + + // NodePhase is the recently observed lifecycle phase of the node. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-phase + // The field is never populated, and now is deprecated. + optional string phase = 3; + + // Conditions is an array of current observed node conditions. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-condition + repeated NodeCondition conditions = 4; + + // List of addresses reachable to the node. + // Queried from cloud provider, if available. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-addresses + repeated NodeAddress addresses = 5; + + // Endpoints of daemons running on the Node. + optional NodeDaemonEndpoints daemonEndpoints = 6; + + // Set of ids/uuids to uniquely identify the node. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-info + optional NodeSystemInfo nodeInfo = 7; + + // List of container images on this node + repeated ContainerImage images = 8; + + // List of attachable volumes in use (mounted) by the node. + repeated string volumesInUse = 9; + + // List of volumes that are attached to the node. + repeated AttachedVolume volumesAttached = 10; +} + +// NodeSystemInfo is a set of ids/uuids to uniquely identify the node. +message NodeSystemInfo { + // Machine ID reported by the node. + optional string machineID = 1; + + // System UUID reported by the node. + optional string systemUUID = 2; + + // Boot ID reported by the node. + optional string bootID = 3; + + // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64). + optional string kernelVersion = 4; + + // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)). + optional string osImage = 5; + + // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0). + optional string containerRuntimeVersion = 6; + + // Kubelet Version reported by the node. + optional string kubeletVersion = 7; + + // KubeProxy Version reported by the node. + optional string kubeProxyVersion = 8; + + // The Operating System reported by the node + optional string operatingSystem = 9; + + // The Architecture reported by the node + optional string architecture = 10; +} + +// ObjectFieldSelector selects an APIVersioned field of an object. +message ObjectFieldSelector { + // Version of the schema the FieldPath is written in terms of, defaults to "v1". + optional string apiVersion = 1; + + // Path of the field to select in the specified API version. + optional string fieldPath = 2; +} + +// ObjectMeta is metadata that all persisted resources must have, which includes all objects +// users must create. +message ObjectMeta { + // Name must be unique within a namespace. Is required when creating resources, although + // some resources may allow a client to request the generation of an appropriate name + // automatically. Name is primarily intended for creation idempotence and configuration + // definition. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + optional string name = 1; + + // GenerateName is an optional prefix, used by the server, to generate a unique + // name ONLY IF the Name field has not been provided. + // If this field is used, the name returned to the client will be different + // than the name passed. This value will also be combined with a unique suffix. + // The provided value has the same validation rules as the Name field, + // and may be truncated by the length of the suffix required to make the value + // unique on the server. + // + // If this field is specified and the generated name exists, the server will + // NOT return a 409 - instead, it will either return 201 Created or 500 with Reason + // ServerTimeout indicating a unique name could not be found in the time allotted, and the client + // should retry (optionally after the time indicated in the Retry-After header). + // + // Applied only if Name is not specified. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#idempotency + optional string generateName = 2; + + // Namespace defines the space within each name must be unique. An empty namespace is + // equivalent to the "default" namespace, but "default" is the canonical representation. + // Not all objects are required to be scoped to a namespace - the value of this field for + // those objects will be empty. + // + // Must be a DNS_LABEL. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md + optional string namespace = 3; + + // SelfLink is a URL representing this object. + // Populated by the system. + // Read-only. + optional string selfLink = 4; + + // UID is the unique in time and space value for this object. It is typically generated by + // the server on successful creation of a resource and is not allowed to change on PUT + // operations. + // + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids + optional string uid = 5; + + // An opaque value that represents the internal version of this object that can + // be used by clients to determine when objects have changed. May be used for optimistic + // concurrency, change detection, and the watch operation on a resource or set of resources. + // Clients must treat these values as opaque and passed unmodified back to the server. + // They may only be valid for a particular resource or set of resources. + // + // Populated by the system. + // Read-only. + // Value must be treated as opaque by clients and . + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency + optional string resourceVersion = 6; + + // A sequence number representing a specific generation of the desired state. + // Populated by the system. Read-only. + optional int64 generation = 7; + + // CreationTimestamp is a timestamp representing the server time when this object was + // created. It is not guaranteed to be set in happens-before order across separate operations. + // Clients may not set this value. It is represented in RFC3339 form and is in UTC. + // + // Populated by the system. + // Read-only. + // Null for lists. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional k8s.io.kubernetes.pkg.api.unversioned.Time creationTimestamp = 8; + + // DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This + // field is set by the server when a graceful deletion is requested by the user, and is not + // directly settable by a client. The resource will be deleted (no longer visible from + // resource lists, and not reachable by name) after the time in this field. Once set, this + // value may not be unset or be set further into the future, although it may be shortened + // or the resource may be deleted prior to this time. For example, a user may request that + // a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination + // signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet + // will send a hard termination signal to the container. + // If not set, graceful deletion of the object has not been requested. + // + // Populated by the system when a graceful deletion is requested. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional k8s.io.kubernetes.pkg.api.unversioned.Time deletionTimestamp = 9; + + // Number of seconds allowed for this object to gracefully terminate before + // it will be removed from the system. Only set when deletionTimestamp is also set. + // May only be shortened. + // Read-only. + optional int64 deletionGracePeriodSeconds = 10; + + // Map of string keys and values that can be used to organize and categorize + // (scope and select) objects. May match selectors of replication controllers + // and services. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md + map labels = 11; + + // Annotations is an unstructured key value map stored with a resource that may be + // set by external tools to store and retrieve arbitrary metadata. They are not + // queryable and should be preserved when modifying objects. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/annotations.md + map annotations = 12; + + // List of objects depended by this object. If ALL objects in the list have + // been deleted, this object will be garbage collected. If this object is managed by a controller, + // then an entry in this list will point to this controller, with the controller field set to true. + // There cannot be more than one managing controller. + repeated OwnerReference ownerReferences = 13; + + // Must be empty before the object is deleted from the registry. Each entry + // is an identifier for the responsible component that will remove the entry + // from the list. If the deletionTimestamp of the object is non-nil, entries + // in this list can only be removed. + repeated string finalizers = 14; + + // The name of the cluster which the object belongs to. + // This is used to distinguish resources with same name and namespace in different clusters. + // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. + optional string clusterName = 15; +} + +// ObjectReference contains enough information to let you inspect or modify the referred object. +message ObjectReference { + // Kind of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional string kind = 1; + + // Namespace of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md + optional string namespace = 2; + + // Name of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + optional string name = 3; + + // UID of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids + optional string uid = 4; + + // API version of the referent. + optional string apiVersion = 5; + + // Specific resourceVersion to which this reference is made, if any. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency + optional string resourceVersion = 6; + + // If referring to a piece of an object instead of an entire object, this string + // should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + // For example, if the object reference is to a container within a pod, this would take on a value like: + // "spec.containers{name}" (where "name" refers to the name of the container that triggered + // the event) or if no container name is specified "spec.containers[2]" (container with + // index 2 in this pod). This syntax is chosen only to have some well-defined way of + // referencing a part of an object. + // TODO: this design is not final and this field is subject to change in the future. + optional string fieldPath = 7; +} + +// OwnerReference contains enough information to let you identify an owning +// object. Currently, an owning object must be in the same namespace, so there +// is no namespace field. +message OwnerReference { + // API version of the referent. + optional string apiVersion = 5; + + // Kind of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional string kind = 1; + + // Name of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + optional string name = 3; + + // UID of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids + optional string uid = 4; + + // If true, this reference points to the managing controller. + optional bool controller = 6; +} + +// PersistentVolume (PV) is a storage resource provisioned by an administrator. +// It is analogous to a node. +// More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md +message PersistentVolume { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Spec defines a specification of a persistent volume owned by the cluster. + // Provisioned by an administrator. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes + optional PersistentVolumeSpec spec = 2; + + // Status represents the current information/status for the persistent volume. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes + optional PersistentVolumeStatus status = 3; +} + +// PersistentVolumeClaim is a user's request for and claim to a persistent volume +message PersistentVolumeClaim { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Spec defines the desired characteristics of a volume requested by a pod author. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + optional PersistentVolumeClaimSpec spec = 2; + + // Status represents the current information/status of a persistent volume claim. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + optional PersistentVolumeClaimStatus status = 3; +} + +// PersistentVolumeClaimList is a list of PersistentVolumeClaim items. +message PersistentVolumeClaimList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // A list of persistent volume claims. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + repeated PersistentVolumeClaim items = 2; +} + +// PersistentVolumeClaimSpec describes the common attributes of storage devices +// and allows a Source for provider-specific attributes +message PersistentVolumeClaimSpec { + // AccessModes contains the desired access modes the volume should have. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1 + repeated string accessModes = 1; + + // A label query over volumes to consider for binding. + optional k8s.io.kubernetes.pkg.api.unversioned.LabelSelector selector = 4; + + // Resources represents the minimum resources the volume should have. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources + optional ResourceRequirements resources = 2; + + // VolumeName is the binding reference to the PersistentVolume backing this claim. + optional string volumeName = 3; +} + +// PersistentVolumeClaimStatus is the current status of a persistent volume claim. +message PersistentVolumeClaimStatus { + // Phase represents the current phase of PersistentVolumeClaim. + optional string phase = 1; + + // AccessModes contains the actual access modes the volume backing the PVC has. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1 + repeated string accessModes = 2; + + // Represents the actual resources of the underlying volume. + map capacity = 3; +} + +// PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. +// This volume finds the bound PV and mounts that volume for the pod. A +// PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another +// type of volume that is owned by someone else (the system). +message PersistentVolumeClaimVolumeSource { + // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + optional string claimName = 1; + + // Will force the ReadOnly setting in VolumeMounts. + // Default false. + optional bool readOnly = 2; +} + +// PersistentVolumeList is a list of PersistentVolume items. +message PersistentVolumeList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of persistent volumes. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md + repeated PersistentVolume items = 2; +} + +// PersistentVolumeSource is similar to VolumeSource but meant for the +// administrator who creates PVs. Exactly one of its members must be set. +message PersistentVolumeSource { + // GCEPersistentDisk represents a GCE Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. Provisioned by an admin. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + optional GCEPersistentDiskVolumeSource gcePersistentDisk = 1; + + // AWSElasticBlockStore represents an AWS Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + optional AWSElasticBlockStoreVolumeSource awsElasticBlockStore = 2; + + // HostPath represents a directory on the host. + // Provisioned by a developer or tester. + // This is useful for single-node development and testing only! + // On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath + optional HostPathVolumeSource hostPath = 3; + + // Glusterfs represents a Glusterfs volume that is attached to a host and + // exposed to the pod. Provisioned by an admin. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md + optional GlusterfsVolumeSource glusterfs = 4; + + // NFS represents an NFS mount on the host. Provisioned by an admin. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + optional NFSVolumeSource nfs = 5; + + // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md + optional RBDVolumeSource rbd = 6; + + // ISCSI represents an ISCSI Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. Provisioned by an admin. + optional ISCSIVolumeSource iscsi = 7; + + // Cinder represents a cinder volume attached and mounted on kubelets host machine + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + optional CinderVolumeSource cinder = 8; + + // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime + optional CephFSVolumeSource cephfs = 9; + + // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. + optional FCVolumeSource fc = 10; + + // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running + optional FlockerVolumeSource flocker = 11; + + // FlexVolume represents a generic volume resource that is + // provisioned/attached using an exec based plugin. This is an + // alpha feature and may change in future. + optional FlexVolumeSource flexVolume = 12; + + // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. + optional AzureFileVolumeSource azureFile = 13; + + // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine + optional VsphereVirtualDiskVolumeSource vsphereVolume = 14; + + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + optional QuobyteVolumeSource quobyte = 15; + + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + optional AzureDiskVolumeSource azureDisk = 16; +} + +// PersistentVolumeSpec is the specification of a persistent volume. +message PersistentVolumeSpec { + // A description of the persistent volume's resources and capacity. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity + map capacity = 1; + + // The actual volume backing the persistent volume. + optional PersistentVolumeSource persistentVolumeSource = 2; + + // AccessModes contains all ways the volume can be mounted. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes + repeated string accessModes = 3; + + // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. + // Expected to be non-nil when bound. + // claim.VolumeName is the authoritative bind between PV and PVC. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#binding + optional ObjectReference claimRef = 4; + + // What happens to a persistent volume when released from its claim. + // Valid options are Retain (default) and Recycle. + // Recycling must be supported by the volume plugin underlying this persistent volume. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#recycling-policy + optional string persistentVolumeReclaimPolicy = 5; +} + +// PersistentVolumeStatus is the current status of a persistent volume. +message PersistentVolumeStatus { + // Phase indicates if a volume is available, bound to a claim, or released by a claim. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#phase + optional string phase = 1; + + // A human-readable message indicating details about why the volume is in this state. + optional string message = 2; + + // Reason is a brief CamelCase string that describes any failure and is meant + // for machine parsing and tidy display in the CLI. + optional string reason = 3; +} + +// Pod is a collection of containers that can run on a host. This resource is created +// by clients and scheduled onto hosts. +message Pod { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Specification of the desired behavior of the pod. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional PodSpec spec = 2; + + // Most recently observed status of the pod. + // This data may not be up to date. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional PodStatus status = 3; +} + +// Pod affinity is a group of inter pod affinity scheduling rules. +message PodAffinity { + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system will try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system may or may not try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + repeated PodAffinityTerm requiredDuringSchedulingIgnoredDuringExecution = 1; + + // The scheduler will prefer to schedule pods to nodes that satisfy + // the affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the + // node(s) with the highest sum are the most preferred. + repeated WeightedPodAffinityTerm preferredDuringSchedulingIgnoredDuringExecution = 2; +} + +// Defines a set of pods (namely those matching the labelSelector +// relative to the given namespace(s)) that this pod should be +// co-located (affinity) or not co-located (anti-affinity) with, +// where co-located is defined as running on a node whose value of +// the label with key tches that of any node on which +// a pod of the set of pods is running +message PodAffinityTerm { + // A label query over a set of resources, in this case pods. + optional k8s.io.kubernetes.pkg.api.unversioned.LabelSelector labelSelector = 1; + + // namespaces specifies which namespaces the labelSelector applies to (matches against); + // nil list means "this pod's namespace," empty list means "all namespaces" + // The json tag here is not "omitempty" since we need to distinguish nil and empty. + // See https://golang.org/pkg/encoding/json/#Marshal for more details. + repeated string namespaces = 2; + + // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching + // the labelSelector in the specified namespaces, where co-located is defined as running on a node + // whose value of the label with key topologyKey matches that of any node on which any of the + // selected pods is running. + // For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as "all topologies" + // ("all topologies" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); + // for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed. + optional string topologyKey = 3; +} + +// Pod anti affinity is a group of inter pod anti affinity scheduling rules. +message PodAntiAffinity { + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // If the anti-affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the anti-affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system will try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` + // If the anti-affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the anti-affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system may or may not try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + repeated PodAffinityTerm requiredDuringSchedulingIgnoredDuringExecution = 1; + + // The scheduler will prefer to schedule pods to nodes that satisfy + // the anti-affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling anti-affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the + // node(s) with the highest sum are the most preferred. + repeated WeightedPodAffinityTerm preferredDuringSchedulingIgnoredDuringExecution = 2; +} + +// PodAttachOptions is the query options to a Pod's remote attach call. +// --- +// TODO: merge w/ PodExecOptions below for stdin, stdout, etc +// and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY +message PodAttachOptions { + // Stdin if true, redirects the standard input stream of the pod for this call. + // Defaults to false. + optional bool stdin = 1; + + // Stdout if true indicates that stdout is to be redirected for the attach call. + // Defaults to true. + optional bool stdout = 2; + + // Stderr if true indicates that stderr is to be redirected for the attach call. + // Defaults to true. + optional bool stderr = 3; + + // TTY if true indicates that a tty will be allocated for the attach call. + // This is passed through the container runtime so the tty + // is allocated on the worker node by the container runtime. + // Defaults to false. + optional bool tty = 4; + + // The container in which to execute the command. + // Defaults to only container if there is only one container in the pod. + optional string container = 5; +} + +// PodCondition contains details for the current condition of this pod. +message PodCondition { + // Type is the type of the condition. + // Currently only Ready. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions + optional string type = 1; + + // Status is the status of the condition. + // Can be True, False, Unknown. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions + optional string status = 2; + + // Last time we probed the condition. + optional k8s.io.kubernetes.pkg.api.unversioned.Time lastProbeTime = 3; + + // Last time the condition transitioned from one status to another. + optional k8s.io.kubernetes.pkg.api.unversioned.Time lastTransitionTime = 4; + + // Unique, one-word, CamelCase reason for the condition's last transition. + optional string reason = 5; + + // Human-readable message indicating details about last transition. + optional string message = 6; +} + +// PodExecOptions is the query options to a Pod's remote exec call. +// --- +// TODO: This is largely identical to PodAttachOptions above, make sure they stay in sync and see about merging +// and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY +message PodExecOptions { + // Redirect the standard input stream of the pod for this call. + // Defaults to false. + optional bool stdin = 1; + + // Redirect the standard output stream of the pod for this call. + // Defaults to true. + optional bool stdout = 2; + + // Redirect the standard error stream of the pod for this call. + // Defaults to true. + optional bool stderr = 3; + + // TTY if true indicates that a tty will be allocated for the exec call. + // Defaults to false. + optional bool tty = 4; + + // Container in which to execute the command. + // Defaults to only container if there is only one container in the pod. + optional string container = 5; + + // Command is the remote command to execute. argv array. Not executed within a shell. + repeated string command = 6; +} + +// PodList is a list of Pods. +message PodList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of pods. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pods.md + repeated Pod items = 2; +} + +// PodLogOptions is the query options for a Pod's logs REST call. +message PodLogOptions { + // The container for which to stream logs. Defaults to only container if there is one container in the pod. + optional string container = 1; + + // Follow the log stream of the pod. Defaults to false. + optional bool follow = 2; + + // Return previous terminated container logs. Defaults to false. + optional bool previous = 3; + + // A relative time in seconds before the current time from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + optional int64 sinceSeconds = 4; + + // An RFC3339 timestamp from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + optional k8s.io.kubernetes.pkg.api.unversioned.Time sinceTime = 5; + + // If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line + // of log output. Defaults to false. + optional bool timestamps = 6; + + // If set, the number of lines from the end of the logs to show. If not specified, + // logs are shown from the creation of the container or sinceSeconds or sinceTime + optional int64 tailLines = 7; + + // If set, the number of bytes to read from the server before terminating the + // log output. This may not display a complete final line of logging, and may return + // slightly more or slightly less than the specified limit. + optional int64 limitBytes = 8; +} + +// PodProxyOptions is the query options to a Pod's proxy call. +message PodProxyOptions { + // Path is the URL path to use for the current proxy request to pod. + optional string path = 1; +} + +// PodSecurityContext holds pod-level security attributes and common container settings. +// Some fields are also present in container.securityContext. Field values of +// container.securityContext take precedence over field values of PodSecurityContext. +message PodSecurityContext { + // The SELinux context to be applied to all containers. + // If unspecified, the container runtime will allocate a random SELinux context for each + // container. May also be set in SecurityContext. If set in + // both SecurityContext and PodSecurityContext, the value specified in SecurityContext + // takes precedence for that container. + optional SELinuxOptions seLinuxOptions = 1; + + // The UID to run the entrypoint of the container process. + // Defaults to user specified in image metadata if unspecified. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence + // for that container. + optional int64 runAsUser = 2; + + // Indicates that the container must run as a non-root user. + // If true, the Kubelet will validate the image at runtime to ensure that it + // does not run as UID 0 (root) and fail to start the container if it does. + // If unset or false, no such validation will be performed. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + optional bool runAsNonRoot = 3; + + // A list of groups applied to the first process run in each container, in addition + // to the container's primary GID. If unspecified, no groups will be added to + // any container. + repeated int64 supplementalGroups = 4; + + // A special supplemental group that applies to all containers in a pod. + // Some volume types allow the Kubelet to change the ownership of that volume + // to be owned by the pod: + // + // 1. The owning GID will be the FSGroup + // 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) + // 3. The permission bits are OR'd with rw-rw---- + // + // If unset, the Kubelet will not modify the ownership and permissions of any volume. + optional int64 fsGroup = 5; +} + +// Describes the class of pods that should avoid this node. +// Exactly one field should be set. +message PodSignature { + // Reference to controller whose pods should avoid this node. + optional OwnerReference podController = 1; +} + +// PodSpec is a description of a pod. +message PodSpec { + // List of volumes that can be mounted by containers belonging to the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md + repeated Volume volumes = 1; + + // List of containers belonging to the pod. + // Containers cannot currently be added or removed. + // There must be at least one container in a Pod. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md + repeated Container containers = 2; + + // Restart policy for all containers within the pod. + // One of Always, OnFailure, Never. + // Default to Always. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#restartpolicy + optional string restartPolicy = 3; + + // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. + // Value must be non-negative integer. The value zero indicates delete immediately. + // If this value is nil, the default grace period will be used instead. + // The grace period is the duration in seconds after the processes running in the pod are sent + // a termination signal and the time when the processes are forcibly halted with a kill signal. + // Set this value longer than the expected cleanup time for your process. + // Defaults to 30 seconds. + optional int64 terminationGracePeriodSeconds = 4; + + // Optional duration in seconds the pod may be active on the node relative to + // StartTime before the system will actively try to mark it failed and kill associated containers. + // Value must be a positive integer. + optional int64 activeDeadlineSeconds = 5; + + // Set DNS policy for containers within the pod. + // One of 'ClusterFirst' or 'Default'. + // Defaults to "ClusterFirst". + optional string dnsPolicy = 6; + + // NodeSelector is a selector which must be true for the pod to fit on a node. + // Selector which must match a node's labels for the pod to be scheduled on that node. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/node-selection/README.md + map nodeSelector = 7; + + // ServiceAccountName is the name of the ServiceAccount to use to run this pod. + // More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md + optional string serviceAccountName = 8; + + // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. + // Deprecated: Use serviceAccountName instead. + // +k8s:conversion-gen=false + optional string serviceAccount = 9; + + // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, + // the scheduler simply schedules this pod onto that node, assuming that it fits resource + // requirements. + optional string nodeName = 10; + + // Host networking requested for this pod. Use the host's network namespace. + // If this option is set, the ports that will be used must be specified. + // Default to false. + // +k8s:conversion-gen=false + optional bool hostNetwork = 11; + + // Use the host's pid namespace. + // Optional: Default to false. + // +k8s:conversion-gen=false + optional bool hostPID = 12; + + // Use the host's ipc namespace. + // Optional: Default to false. + // +k8s:conversion-gen=false + optional bool hostIPC = 13; + + // SecurityContext holds pod-level security attributes and common container settings. + // Optional: Defaults to empty. See type description for default values of each field. + optional PodSecurityContext securityContext = 14; + + // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. + // If specified, these secrets will be passed to individual puller implementations for them to use. For example, + // in the case of docker, only DockerConfig type secrets are honored. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod + repeated LocalObjectReference imagePullSecrets = 15; + + // Specifies the hostname of the Pod + // If not specified, the pod's hostname will be set to a system-defined value. + optional string hostname = 16; + + // If specified, the fully qualified Pod hostname will be "...svc.". + // If not specified, the pod will not have a domainname at all. + optional string subdomain = 17; +} + +// PodStatus represents information about the status of a pod. Status may trail the actual +// state of a system. +message PodStatus { + // Current condition of the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-phase + optional string phase = 1; + + // Current service state of pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions + repeated PodCondition conditions = 2; + + // A human readable message indicating details about why the pod is in this condition. + optional string message = 3; + + // A brief CamelCase message indicating details about why the pod is in this state. + // e.g. 'OutOfDisk' + optional string reason = 4; + + // IP address of the host to which the pod is assigned. Empty if not yet scheduled. + optional string hostIP = 5; + + // IP address allocated to the pod. Routable at least within the cluster. + // Empty if not yet allocated. + optional string podIP = 6; + + // RFC 3339 date and time at which the object was acknowledged by the Kubelet. + // This is before the Kubelet pulled the container image(s) for the pod. + optional k8s.io.kubernetes.pkg.api.unversioned.Time startTime = 7; + + // The list has one entry per container in the manifest. Each entry is currently the output + // of `docker inspect`. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-statuses + repeated ContainerStatus containerStatuses = 8; +} + +// PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded +message PodStatusResult { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Most recently observed status of the pod. + // This data may not be up to date. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional PodStatus status = 2; +} + +// PodTemplate describes a template for creating copies of a predefined pod. +message PodTemplate { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Template defines the pods that will be created from this pod template. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional PodTemplateSpec template = 2; +} + +// PodTemplateList is a list of PodTemplates. +message PodTemplateList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of pod templates + repeated PodTemplate items = 2; +} + +// PodTemplateSpec describes the data a pod should have when created from a template +message PodTemplateSpec { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Specification of the desired behavior of the pod. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional PodSpec spec = 2; +} + +// Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. +message Preconditions { + // Specifies the target UID. + optional string uid = 1; +} + +// Describes a class of pods that should avoid this node. +message PreferAvoidPodsEntry { + // The class of pods. + optional PodSignature podSignature = 1; + + // Time at which this entry was added to the list. + optional k8s.io.kubernetes.pkg.api.unversioned.Time evictionTime = 2; + + // (brief) reason why this entry was added to the list. + optional string reason = 3; + + // Human readable message indicating why this entry was added to the list. + optional string message = 4; +} + +// An empty preferred scheduling term matches all objects with implicit weight 0 +// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). +message PreferredSchedulingTerm { + // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. + optional int32 weight = 1; + + // A node selector term, associated with the corresponding weight. + optional NodeSelectorTerm preference = 2; +} + +// Probe describes a health check to be performed against a container to determine whether it is +// alive or ready to receive traffic. +message Probe { + // The action taken to determine the health of a container + optional Handler handler = 1; + + // Number of seconds after the container has started before liveness probes are initiated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes + optional int32 initialDelaySeconds = 2; + + // Number of seconds after which the probe times out. + // Defaults to 1 second. Minimum value is 1. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes + optional int32 timeoutSeconds = 3; + + // How often (in seconds) to perform the probe. + // Default to 10 seconds. Minimum value is 1. + optional int32 periodSeconds = 4; + + // Minimum consecutive successes for the probe to be considered successful after having failed. + // Defaults to 1. Must be 1 for liveness. Minimum value is 1. + optional int32 successThreshold = 5; + + // Minimum consecutive failures for the probe to be considered failed after having succeeded. + // Defaults to 3. Minimum value is 1. + optional int32 failureThreshold = 6; +} + +// Represents a Quobyte mount that lasts the lifetime of a pod. +// Quobyte volumes do not support ownership management or SELinux relabeling. +message QuobyteVolumeSource { + // Registry represents a single or multiple Quobyte Registry services + // specified as a string as host:port pair (multiple entries are separated with commas) + // which acts as the central registry for volumes + optional string registry = 1; + + // Volume is a string that references an already created Quobyte volume by name. + optional string volume = 2; + + // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. + // Defaults to false. + optional bool readOnly = 3; + + // User to map volume access to + // Defaults to serivceaccount user + optional string user = 4; + + // Group to map volume access to + // Default is no group + optional string group = 5; +} + +// Represents a Rados Block Device mount that lasts the lifetime of a pod. +// RBD volumes support ownership management and SELinux relabeling. +message RBDVolumeSource { + // A collection of Ceph monitors. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + repeated string monitors = 1; + + // The rados image name. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + optional string image = 2; + + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#rbd + // TODO: how do we prevent errors in the filesystem from compromising the machine + optional string fsType = 3; + + // The rados pool name. + // Default is rbd. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it. + optional string pool = 4; + + // The rados user name. + // Default is admin. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + optional string user = 5; + + // Keyring is the path to key ring for RBDUser. + // Default is /etc/ceph/keyring. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + optional string keyring = 6; + + // SecretRef is name of the authentication secret for RBDUser. If provided + // overrides keyring. + // Default is nil. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + optional LocalObjectReference secretRef = 7; + + // ReadOnly here will force the ReadOnly setting in VolumeMounts. + // Defaults to false. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + optional bool readOnly = 8; +} + +// RangeAllocation is not a public type. +message RangeAllocation { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Range is string that identifies the range represented by 'data'. + optional string range = 2; + + // Data is a bit array containing all allocated addresses in the previous segment. + optional bytes data = 3; +} + +// ReplicationController represents the configuration of a replication controller. +message ReplicationController { + // If the Labels of a ReplicationController are empty, they are defaulted to + // be the same as the Pod(s) that the replication controller manages. + // Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Spec defines the specification of the desired behavior of the replication controller. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional ReplicationControllerSpec spec = 2; + + // Status is the most recently observed status of the replication controller. + // This data may be out of date by some window of time. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional ReplicationControllerStatus status = 3; +} + +// ReplicationControllerList is a collection of replication controllers. +message ReplicationControllerList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of replication controllers. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md + repeated ReplicationController items = 2; +} + +// ReplicationControllerSpec is the specification of a replication controller. +message ReplicationControllerSpec { + // Replicas is the number of desired replicas. + // This is a pointer to distinguish between explicit zero and unspecified. + // Defaults to 1. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller + optional int32 replicas = 1; + + // Selector is a label query over pods that should match the Replicas count. + // If Selector is empty, it is defaulted to the labels present on the Pod template. + // Label keys and values that must match in order to be controlled by this replication + // controller, if empty defaulted to labels on Pod template. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors + map selector = 2; + + // Template is the object that describes the pod that will be created if + // insufficient replicas are detected. This takes precedence over a TemplateRef. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template + optional PodTemplateSpec template = 3; +} + +// ReplicationControllerStatus represents the current status of a replication +// controller. +message ReplicationControllerStatus { + // Replicas is the most recently oberved number of replicas. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller + optional int32 replicas = 1; + + // The number of pods that have labels matching the labels of the pod template of the replication controller. + optional int32 fullyLabeledReplicas = 2; + + // The number of ready replicas for this replication controller. + optional int32 readyReplicas = 4; + + // ObservedGeneration reflects the generation of the most recently observed replication controller. + optional int64 observedGeneration = 3; +} + +// ResourceFieldSelector represents container resources (cpu, memory) and their output format +message ResourceFieldSelector { + // Container name: required for volumes, optional for env vars + optional string containerName = 1; + + // Required: resource to select + optional string resource = 2; + + // Specifies the output format of the exposed resources, defaults to "1" + optional k8s.io.kubernetes.pkg.api.resource.Quantity divisor = 3; +} + +// ResourceQuota sets aggregate quota restrictions enforced per namespace +message ResourceQuota { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Spec defines the desired quota. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional ResourceQuotaSpec spec = 2; + + // Status defines the actual enforced quota and its current usage. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional ResourceQuotaStatus status = 3; +} + +// ResourceQuotaList is a list of ResourceQuota items. +message ResourceQuotaList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // Items is a list of ResourceQuota objects. + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + repeated ResourceQuota items = 2; +} + +// ResourceQuotaSpec defines the desired hard limits to enforce for Quota. +message ResourceQuotaSpec { + // Hard is the set of desired hard limits for each named resource. + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + map hard = 1; + + // A collection of filters that must match each object tracked by a quota. + // If not specified, the quota matches all objects. + repeated string scopes = 2; +} + +// ResourceQuotaStatus defines the enforced hard limits and observed use. +message ResourceQuotaStatus { + // Hard is the set of enforced hard limits for each named resource. + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + map hard = 1; + + // Used is the current observed total usage of the resource in the namespace. + map used = 2; +} + +// ResourceRequirements describes the compute resource requirements. +message ResourceRequirements { + // Limits describes the maximum amount of compute resources allowed. + // More info: http://kubernetes.io/docs/user-guide/compute-resources/ + map limits = 1; + + // Requests describes the minimum amount of compute resources required. + // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + // otherwise to an implementation-defined value. + // More info: http://kubernetes.io/docs/user-guide/compute-resources/ + map requests = 2; +} + +// SELinuxOptions are the labels to be applied to the container +message SELinuxOptions { + // User is a SELinux user label that applies to the container. + optional string user = 1; + + // Role is a SELinux role label that applies to the container. + optional string role = 2; + + // Type is a SELinux type label that applies to the container. + optional string type = 3; + + // Level is SELinux level label that applies to the container. + optional string level = 4; +} + +// Secret holds secret data of a certain type. The total bytes of the values in +// the Data field must be less than MaxSecretSize bytes. +message Secret { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN + // or leading dot followed by valid DNS_SUBDOMAIN. + // The serialized form of the secret data is a base64 encoded string, + // representing the arbitrary (possibly non-string) data value here. + // Described in https://tools.ietf.org/html/rfc4648#section-4 + map data = 2; + + // stringData allows specifying non-binary secret data in string form. + // It is provided as a write-only convenience method. + // All keys and values are merged into the data field on write, overwriting any existing values. + // It is never output when reading from the API. + // +k8s:conversion-gen=false + map stringData = 4; + + // Used to facilitate programmatic handling of secret data. + optional string type = 3; +} + +// SecretKeySelector selects a key of a Secret. +message SecretKeySelector { + // The name of the secret in the pod's namespace to select from. + optional LocalObjectReference localObjectReference = 1; + + // The key of the secret to select from. Must be a valid secret key. + optional string key = 2; +} + +// SecretList is a list of Secret. +message SecretList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // Items is a list of secret objects. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md + repeated Secret items = 2; +} + +// Adapts a Secret into a volume. +// +// The contents of the target Secret's Data field will be presented in a volume +// as files using the keys in the Data field as the file names. +// Secret volumes support ownership management and SELinux relabeling. +message SecretVolumeSource { + // Name of the secret in the pod's namespace to use. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets + optional string secretName = 1; + + // If unspecified, each key-value pair in the Data field of the referenced + // Secret will be projected into the volume as a file whose name is the + // key and content is the value. If specified, the listed keys will be + // projected into the specified paths, and unlisted keys will not be + // present. If a key is specified which is not present in the Secret, + // the volume setup will error. Paths must be relative and may not contain + // the '..' path or start with '..'. + repeated KeyToPath items = 2; + + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 defaultMode = 3; +} + +// SecurityContext holds security configuration that will be applied to a container. +// Some fields are present in both SecurityContext and PodSecurityContext. When both +// are set, the values in SecurityContext take precedence. +message SecurityContext { + // The capabilities to add/drop when running containers. + // Defaults to the default set of capabilities granted by the container runtime. + optional Capabilities capabilities = 1; + + // Run container in privileged mode. + // Processes in privileged containers are essentially equivalent to root on the host. + // Defaults to false. + optional bool privileged = 2; + + // The SELinux context to be applied to the container. + // If unspecified, the container runtime will allocate a random SELinux context for each + // container. May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + optional SELinuxOptions seLinuxOptions = 3; + + // The UID to run the entrypoint of the container process. + // Defaults to user specified in image metadata if unspecified. + // May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + optional int64 runAsUser = 4; + + // Indicates that the container must run as a non-root user. + // If true, the Kubelet will validate the image at runtime to ensure that it + // does not run as UID 0 (root) and fail to start the container if it does. + // If unset or false, no such validation will be performed. + // May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + optional bool runAsNonRoot = 5; + + // Whether this container has a read-only root filesystem. + // Default is false. + optional bool readOnlyRootFilesystem = 6; +} + +// SerializedReference is a reference to serialized object. +message SerializedReference { + // The reference to an object in the system. + optional ObjectReference reference = 1; +} + +// Service is a named abstraction of software service (for example, mysql) consisting of local port +// (for example 3306) that the proxy listens on, and the selector that determines which pods +// will answer requests sent through the proxy. +message Service { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Spec defines the behavior of a service. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional ServiceSpec spec = 2; + + // Most recently observed status of the service. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + optional ServiceStatus status = 3; +} + +// ServiceAccount binds together: +// * a name, understood by users, and perhaps by peripheral systems, for an identity +// * a principal that can be authenticated and authorized +// * a set of secrets +message ServiceAccount { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + optional ObjectMeta metadata = 1; + + // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md + repeated ObjectReference secrets = 2; + + // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images + // in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets + // can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret + repeated LocalObjectReference imagePullSecrets = 3; +} + +// ServiceAccountList is a list of ServiceAccount objects +message ServiceAccountList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of ServiceAccounts. + // More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md#service-accounts + repeated ServiceAccount items = 2; +} + +// ServiceList holds a list of services. +message ServiceList { + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // List of services + repeated Service items = 2; +} + +// ServicePort contains information on service's port. +message ServicePort { + // The name of this port within the service. This must be a DNS_LABEL. + // All ports within a ServiceSpec must have unique names. This maps to + // the 'Name' field in EndpointPort objects. + // Optional if only one ServicePort is defined on this service. + optional string name = 1; + + // The IP protocol for this port. Supports "TCP" and "UDP". + // Default is TCP. + optional string protocol = 2; + + // The port that will be exposed by this service. + optional int32 port = 3; + + // Number or name of the port to access on the pods targeted by the service. + // Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + // If this is a string, it will be looked up as a named port in the + // target Pod's container ports. If this is not specified, the value + // of the 'port' field is used (an identity map). + // This field is ignored for services with clusterIP=None, and should be + // omitted or set equal to the 'port' field. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#defining-a-service + optional k8s.io.kubernetes.pkg.util.intstr.IntOrString targetPort = 4; + + // The port on each node on which this service is exposed when type=NodePort or LoadBalancer. + // Usually assigned by the system. If specified, it will be allocated to the service + // if unused or else creation of the service will fail. + // Default is to auto-allocate a port if the ServiceType of this Service requires one. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#type--nodeport + optional int32 nodePort = 5; +} + +// ServiceProxyOptions is the query options to a Service's proxy call. +message ServiceProxyOptions { + // Path is the part of URLs that include service endpoints, suffixes, + // and parameters to use for the current proxy request to service. + // For example, the whole request URL is + // http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. + // Path is _search?q=user:kimchy. + optional string path = 1; +} + +// ServiceSpec describes the attributes that a user creates on a service. +message ServiceSpec { + // The list of ports that are exposed by this service. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies + repeated ServicePort ports = 1; + + // Route service traffic to pods with label keys and values matching this + // selector. If empty or not present, the service is assumed to have an + // external process managing its endpoints, which Kubernetes will not + // modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. + // Ignored if type is ExternalName. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview + map selector = 2; + + // clusterIP is the IP address of the service and is usually assigned + // randomly by the master. If an address is specified manually and is not in + // use by others, it will be allocated to the service; otherwise, creation + // of the service will fail. This field can not be changed through updates. + // Valid values are "None", empty string (""), or a valid IP address. "None" + // can be specified for headless services when proxying is not required. + // Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if + // type is ExternalName. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies + optional string clusterIP = 3; + + // type determines how the Service is exposed. Defaults to ClusterIP. Valid + // options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + // "ExternalName" maps to the specified externalName. + // "ClusterIP" allocates a cluster-internal IP address for load-balancing to + // endpoints. Endpoints are determined by the selector or if that is not + // specified, by manual construction of an Endpoints object. If clusterIP is + // "None", no virtual IP is allocated and the endpoints are published as a + // set of endpoints rather than a stable IP. + // "NodePort" builds on ClusterIP and allocates a port on every node which + // routes to the clusterIP. + // "LoadBalancer" builds on NodePort and creates an + // external load-balancer (if supported in the current cloud) which routes + // to the clusterIP. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview + optional string type = 4; + + // externalIPs is a list of IP addresses for which nodes in the cluster + // will also accept traffic for this service. These IPs are not managed by + // Kubernetes. The user is responsible for ensuring that traffic arrives + // at a node with this IP. A common example is external load-balancers + // that are not part of the Kubernetes system. A previous form of this + // functionality exists as the deprecatedPublicIPs field. When using this + // field, callers should also clear the deprecatedPublicIPs field. + repeated string externalIPs = 5; + + // deprecatedPublicIPs is deprecated and replaced by the externalIPs field + // with almost the exact same semantics. This field is retained in the v1 + // API for compatibility until at least 8/20/2016. It will be removed from + // any new API revisions. If both deprecatedPublicIPs *and* externalIPs are + // set, deprecatedPublicIPs is used. + // +k8s:conversion-gen=false + repeated string deprecatedPublicIPs = 6; + + // Supports "ClientIP" and "None". Used to maintain session affinity. + // Enable client IP based session affinity. + // Must be ClientIP or None. + // Defaults to None. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies + optional string sessionAffinity = 7; + + // Only applies to Service Type: LoadBalancer + // LoadBalancer will get created with the IP specified in this field. + // This feature depends on whether the underlying cloud-provider supports specifying + // the loadBalancerIP when a load balancer is created. + // This field will be ignored if the cloud-provider does not support the feature. + optional string loadBalancerIP = 8; + + // If specified and supported by the platform, this will restrict traffic through the cloud-provider + // load-balancer will be restricted to the specified client IPs. This field will be ignored if the + // cloud-provider does not support the feature." + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services-firewalls.md + repeated string loadBalancerSourceRanges = 9; + + // externalName is the external reference that kubedns or equivalent will + // return as a CNAME record for this service. No proxying will be involved. + // Must be a valid DNS name and requires Type to be ExternalName. + optional string externalName = 10; +} + +// ServiceStatus represents the current status of a service. +message ServiceStatus { + // LoadBalancer contains the current status of the load-balancer, + // if one is present. + optional LoadBalancerStatus loadBalancer = 1; +} + +// TCPSocketAction describes an action based on opening a socket +message TCPSocketAction { + // Number or name of the port to access on the container. + // Number must be in the range 1 to 65535. + // Name must be an IANA_SVC_NAME. + optional k8s.io.kubernetes.pkg.util.intstr.IntOrString port = 1; +} + +// The node this Taint is attached to has the effect "effect" on +// any pod that that does not tolerate the Taint. +message Taint { + // Required. The taint key to be applied to a node. + optional string key = 1; + + // Required. The taint value corresponding to the taint key. + optional string value = 2; + + // Required. The effect of the taint on pods + // that do not tolerate the taint. + // Valid effects are NoSchedule and PreferNoSchedule. + optional string effect = 3; +} + +// The pod this Toleration is attached to tolerates any taint that matches +// the triple using the matching operator . +message Toleration { + // Required. Key is the taint key that the toleration applies to. + optional string key = 1; + + // operator represents a key's relationship to the value. + // Valid operators are Exists and Equal. Defaults to Equal. + // Exists is equivalent to wildcard for value, so that a pod can + // tolerate all taints of a particular category. + optional string operator = 2; + + // Value is the taint value the toleration matches to. + // If the operator is Exists, the value should be empty, otherwise just a regular string. + optional string value = 3; + + // Effect indicates the taint effect to match. Empty means match all taint effects. + // When specified, allowed values are NoSchedule and PreferNoSchedule. + optional string effect = 4; +} + +// Volume represents a named volume in a pod that may be accessed by any container in the pod. +message Volume { + // Volume's name. + // Must be a DNS_LABEL and unique within the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + optional string name = 1; + + // VolumeSource represents the location and type of the mounted volume. + // If not specified, the Volume is implied to be an EmptyDir. + // This implied behavior is deprecated and will be removed in a future version. + optional VolumeSource volumeSource = 2; +} + +// VolumeMount describes a mounting of a Volume within a container. +message VolumeMount { + // This must match the Name of a Volume. + optional string name = 1; + + // Mounted read-only if true, read-write otherwise (false or unspecified). + // Defaults to false. + optional bool readOnly = 2; + + // Path within the container at which the volume should be mounted. Must + // not contain ':'. + optional string mountPath = 3; + + // Path within the volume from which the container's volume should be mounted. + // Defaults to "" (volume's root). + optional string subPath = 4; +} + +// Represents the source of a volume to mount. +// Only one of its members may be specified. +message VolumeSource { + // HostPath represents a pre-existing file or directory on the host + // machine that is directly exposed to the container. This is generally + // used for system agents or other privileged things that are allowed + // to see the host machine. Most containers will NOT need this. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath + // --- + // TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not + // mount host directories as read/write. + optional HostPathVolumeSource hostPath = 1; + + // EmptyDir represents a temporary directory that shares a pod's lifetime. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir + optional EmptyDirVolumeSource emptyDir = 2; + + // GCEPersistentDisk represents a GCE Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + optional GCEPersistentDiskVolumeSource gcePersistentDisk = 3; + + // AWSElasticBlockStore represents an AWS Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + optional AWSElasticBlockStoreVolumeSource awsElasticBlockStore = 4; + + // GitRepo represents a git repository at a particular revision. + optional GitRepoVolumeSource gitRepo = 5; + + // Secret represents a secret that should populate this volume. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets + optional SecretVolumeSource secret = 6; + + // NFS represents an NFS mount on the host that shares a pod's lifetime + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + optional NFSVolumeSource nfs = 7; + + // ISCSI represents an ISCSI Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/iscsi/README.md + optional ISCSIVolumeSource iscsi = 8; + + // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md + optional GlusterfsVolumeSource glusterfs = 9; + + // PersistentVolumeClaimVolumeSource represents a reference to a + // PersistentVolumeClaim in the same namespace. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + optional PersistentVolumeClaimVolumeSource persistentVolumeClaim = 10; + + // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md + optional RBDVolumeSource rbd = 11; + + // FlexVolume represents a generic volume resource that is + // provisioned/attached using an exec based plugin. This is an + // alpha feature and may change in future. + optional FlexVolumeSource flexVolume = 12; + + // Cinder represents a cinder volume attached and mounted on kubelets host machine + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + optional CinderVolumeSource cinder = 13; + + // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime + optional CephFSVolumeSource cephfs = 14; + + // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running + optional FlockerVolumeSource flocker = 15; + + // DownwardAPI represents downward API about the pod that should populate this volume + optional DownwardAPIVolumeSource downwardAPI = 16; + + // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. + optional FCVolumeSource fc = 17; + + // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. + optional AzureFileVolumeSource azureFile = 18; + + // ConfigMap represents a configMap that should populate this volume + optional ConfigMapVolumeSource configMap = 19; + + // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine + optional VsphereVirtualDiskVolumeSource vsphereVolume = 20; + + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + optional QuobyteVolumeSource quobyte = 21; + + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + optional AzureDiskVolumeSource azureDisk = 22; +} + +// Represents a vSphere volume resource. +message VsphereVirtualDiskVolumeSource { + // Path that identifies vSphere volume vmdk + optional string volumePath = 1; + + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + optional string fsType = 2; +} + +// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) +message WeightedPodAffinityTerm { + // weight associated with matching the corresponding podAffinityTerm, + // in the range 1-100. + optional int32 weight = 1; + + // Required. A pod affinity term, associated with the corresponding weight. + optional PodAffinityTerm podAffinityTerm = 2; +} + diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/meta.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/meta.go new file mode 100644 index 00000000..0b948fd8 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/meta.go @@ -0,0 +1,92 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + "k8s.io/client-go/1.4/pkg/api/meta" + "k8s.io/client-go/1.4/pkg/api/meta/metatypes" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/types" +) + +func (obj *ObjectMeta) GetObjectMeta() meta.Object { return obj } + +// Namespace implements meta.Object for any object with an ObjectMeta typed field. Allows +// fast, direct access to metadata fields for API objects. +func (meta *ObjectMeta) GetNamespace() string { return meta.Namespace } +func (meta *ObjectMeta) SetNamespace(namespace string) { meta.Namespace = namespace } +func (meta *ObjectMeta) GetName() string { return meta.Name } +func (meta *ObjectMeta) SetName(name string) { meta.Name = name } +func (meta *ObjectMeta) GetGenerateName() string { return meta.GenerateName } +func (meta *ObjectMeta) SetGenerateName(generateName string) { meta.GenerateName = generateName } +func (meta *ObjectMeta) GetUID() types.UID { return meta.UID } +func (meta *ObjectMeta) SetUID(uid types.UID) { meta.UID = uid } +func (meta *ObjectMeta) GetResourceVersion() string { return meta.ResourceVersion } +func (meta *ObjectMeta) SetResourceVersion(version string) { meta.ResourceVersion = version } +func (meta *ObjectMeta) GetSelfLink() string { return meta.SelfLink } +func (meta *ObjectMeta) SetSelfLink(selfLink string) { meta.SelfLink = selfLink } +func (meta *ObjectMeta) GetCreationTimestamp() unversioned.Time { return meta.CreationTimestamp } +func (meta *ObjectMeta) SetCreationTimestamp(creationTimestamp unversioned.Time) { + meta.CreationTimestamp = creationTimestamp +} +func (meta *ObjectMeta) GetDeletionTimestamp() *unversioned.Time { return meta.DeletionTimestamp } +func (meta *ObjectMeta) SetDeletionTimestamp(deletionTimestamp *unversioned.Time) { + meta.DeletionTimestamp = deletionTimestamp +} +func (meta *ObjectMeta) GetLabels() map[string]string { return meta.Labels } +func (meta *ObjectMeta) SetLabels(labels map[string]string) { meta.Labels = labels } +func (meta *ObjectMeta) GetAnnotations() map[string]string { return meta.Annotations } +func (meta *ObjectMeta) SetAnnotations(annotations map[string]string) { meta.Annotations = annotations } +func (meta *ObjectMeta) GetFinalizers() []string { return meta.Finalizers } +func (meta *ObjectMeta) SetFinalizers(finalizers []string) { meta.Finalizers = finalizers } + +func (meta *ObjectMeta) GetOwnerReferences() []metatypes.OwnerReference { + ret := make([]metatypes.OwnerReference, len(meta.OwnerReferences)) + for i := 0; i < len(meta.OwnerReferences); i++ { + ret[i].Kind = meta.OwnerReferences[i].Kind + ret[i].Name = meta.OwnerReferences[i].Name + ret[i].UID = meta.OwnerReferences[i].UID + ret[i].APIVersion = meta.OwnerReferences[i].APIVersion + if meta.OwnerReferences[i].Controller != nil { + value := *meta.OwnerReferences[i].Controller + ret[i].Controller = &value + } + } + return ret +} + +func (meta *ObjectMeta) SetOwnerReferences(references []metatypes.OwnerReference) { + newReferences := make([]OwnerReference, len(references)) + for i := 0; i < len(references); i++ { + newReferences[i].Kind = references[i].Kind + newReferences[i].Name = references[i].Name + newReferences[i].UID = references[i].UID + newReferences[i].APIVersion = references[i].APIVersion + if references[i].Controller != nil { + value := *references[i].Controller + newReferences[i].Controller = &value + } + } + meta.OwnerReferences = newReferences +} + +func (meta *ObjectMeta) GetClusterName() string { + return meta.ClusterName +} +func (meta *ObjectMeta) SetClusterName(clusterName string) { + meta.ClusterName = clusterName +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/ref.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/ref.go new file mode 100644 index 00000000..77fe268b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/ref.go @@ -0,0 +1,133 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + "errors" + "fmt" + "k8s.io/client-go/1.4/pkg/api" + "net/url" + "strings" + + "k8s.io/client-go/1.4/pkg/api/meta" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +var ( + // Errors that could be returned by GetReference. + ErrNilObject = errors.New("can't reference a nil object") + ErrNoSelfLink = errors.New("selfLink was empty, can't make reference") +) + +// GetReference returns an ObjectReference which refers to the given +// object, or an error if the object doesn't follow the conventions +// that would allow this. +// TODO: should take a meta.Interface see http://issue.k8s.io/7127 +func GetReference(obj runtime.Object) (*ObjectReference, error) { + if obj == nil { + return nil, ErrNilObject + } + if ref, ok := obj.(*ObjectReference); ok { + // Don't make a reference to a reference. + return ref, nil + } + + gvk := obj.GetObjectKind().GroupVersionKind() + + // if the object referenced is actually persisted, we can just get kind from meta + // if we are building an object reference to something not yet persisted, we should fallback to scheme + kind := gvk.Kind + if len(kind) == 0 { + // TODO: this is wrong + gvks, _, err := api.Scheme.ObjectKinds(obj) + if err != nil { + return nil, err + } + kind = gvks[0].Kind + } + + // An object that implements only List has enough metadata to build a reference + var listMeta meta.List + objectMeta, err := meta.Accessor(obj) + if err != nil { + listMeta, err = meta.ListAccessor(obj) + if err != nil { + return nil, err + } + } else { + listMeta = objectMeta + } + + // if the object referenced is actually persisted, we can also get version from meta + version := gvk.GroupVersion().String() + if len(version) == 0 { + selfLink := listMeta.GetSelfLink() + if len(selfLink) == 0 { + return nil, ErrNoSelfLink + } + selfLinkUrl, err := url.Parse(selfLink) + if err != nil { + return nil, err + } + // example paths: ///* + parts := strings.Split(selfLinkUrl.Path, "/") + if len(parts) < 3 { + return nil, fmt.Errorf("unexpected self link format: '%v'; got version '%v'", selfLink, version) + } + version = parts[2] + } + + // only has list metadata + if objectMeta == nil { + return &ObjectReference{ + Kind: kind, + APIVersion: version, + ResourceVersion: listMeta.GetResourceVersion(), + }, nil + } + + return &ObjectReference{ + Kind: kind, + APIVersion: version, + Name: objectMeta.GetName(), + Namespace: objectMeta.GetNamespace(), + UID: objectMeta.GetUID(), + ResourceVersion: objectMeta.GetResourceVersion(), + }, nil +} + +// GetPartialReference is exactly like GetReference, but allows you to set the FieldPath. +func GetPartialReference(obj runtime.Object, fieldPath string) (*ObjectReference, error) { + ref, err := GetReference(obj) + if err != nil { + return nil, err + } + ref.FieldPath = fieldPath + return ref, nil +} + +// IsAnAPIObject allows clients to preemptively get a reference to an API object and pass it to places that +// intend only to get a reference to that object. This simplifies the event recording interface. +func (obj *ObjectReference) SetGroupVersionKind(gvk unversioned.GroupVersionKind) { + obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind() +} +func (obj *ObjectReference) GroupVersionKind() unversioned.GroupVersionKind { + return unversioned.FromAPIVersionAndKind(obj.APIVersion, obj.Kind) +} + +func (obj *ObjectReference) GetObjectKind() unversioned.ObjectKind { return obj } diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/register.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/register.go new file mode 100644 index 00000000..0b2f244e --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/register.go @@ -0,0 +1,93 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + versionedwatch "k8s.io/client-go/1.4/pkg/watch/versioned" +) + +// GroupName is the group name use in this package +const GroupName = "" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs, addFastPathConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Pod{}, + &PodList{}, + &PodStatusResult{}, + &PodTemplate{}, + &PodTemplateList{}, + &ReplicationController{}, + &ReplicationControllerList{}, + &Service{}, + &ServiceProxyOptions{}, + &ServiceList{}, + &Endpoints{}, + &EndpointsList{}, + &Node{}, + &NodeList{}, + &NodeProxyOptions{}, + &Binding{}, + &Event{}, + &EventList{}, + &List{}, + &LimitRange{}, + &LimitRangeList{}, + &ResourceQuota{}, + &ResourceQuotaList{}, + &Namespace{}, + &NamespaceList{}, + &Secret{}, + &SecretList{}, + &ServiceAccount{}, + &ServiceAccountList{}, + &PersistentVolume{}, + &PersistentVolumeList{}, + &PersistentVolumeClaim{}, + &PersistentVolumeClaimList{}, + &DeleteOptions{}, + &ExportOptions{}, + &ListOptions{}, + &PodAttachOptions{}, + &PodLogOptions{}, + &PodExecOptions{}, + &PodProxyOptions{}, + &ComponentStatus{}, + &ComponentStatusList{}, + &SerializedReference{}, + &RangeAllocation{}, + &ConfigMap{}, + &ConfigMapList{}, + ) + + // Add common types + scheme.AddKnownTypes(SchemeGroupVersion, &unversioned.Status{}) + + // Add the watch version that applies + versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/types.generated.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/types.generated.go new file mode 100644 index 00000000..ba8b4bea --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/types.generated.go @@ -0,0 +1,62479 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// ************************************************************ +// DO NOT EDIT. +// THIS FILE IS AUTO-GENERATED BY codecgen. +// ************************************************************ + +package v1 + +import ( + "errors" + "fmt" + codec1978 "github.com/ugorji/go/codec" + pkg3_resource "k8s.io/client-go/1.4/pkg/api/resource" + pkg2_unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + pkg5_runtime "k8s.io/client-go/1.4/pkg/runtime" + pkg1_types "k8s.io/client-go/1.4/pkg/types" + pkg4_intstr "k8s.io/client-go/1.4/pkg/util/intstr" + "reflect" + "runtime" + time "time" +) + +const ( + // ----- content types ---- + codecSelferC_UTF81234 = 1 + codecSelferC_RAW1234 = 0 + // ----- value types used ---- + codecSelferValueTypeArray1234 = 10 + codecSelferValueTypeMap1234 = 9 + // ----- containerStateValues ---- + codecSelfer_containerMapKey1234 = 2 + codecSelfer_containerMapValue1234 = 3 + codecSelfer_containerMapEnd1234 = 4 + codecSelfer_containerArrayElem1234 = 6 + codecSelfer_containerArrayEnd1234 = 7 +) + +var ( + codecSelferBitsize1234 = uint8(reflect.TypeOf(uint(0)).Bits()) + codecSelferOnlyMapOrArrayEncodeToStructErr1234 = errors.New(`only encoded map or array can be decoded into a struct`) +) + +type codecSelfer1234 struct{} + +func init() { + if codec1978.GenVersion != 5 { + _, file, _, _ := runtime.Caller(0) + err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", + 5, codec1978.GenVersion, file) + panic(err) + } + if false { // reference the types, but skip this branch at build/run time + var v0 pkg3_resource.Quantity + var v1 pkg2_unversioned.Time + var v2 pkg5_runtime.RawExtension + var v3 pkg1_types.UID + var v4 pkg4_intstr.IntOrString + var v5 time.Time + _, _, _, _, _, _ = v0, v1, v2, v3, v4, v5 + } +} + +func (x *ObjectMeta) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [15]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.Name != "" + yyq2[1] = x.GenerateName != "" + yyq2[2] = x.Namespace != "" + yyq2[3] = x.SelfLink != "" + yyq2[4] = x.UID != "" + yyq2[5] = x.ResourceVersion != "" + yyq2[6] = x.Generation != 0 + yyq2[7] = true + yyq2[8] = x.DeletionTimestamp != nil + yyq2[9] = x.DeletionGracePeriodSeconds != nil + yyq2[10] = len(x.Labels) != 0 + yyq2[11] = len(x.Annotations) != 0 + yyq2[12] = len(x.OwnerReferences) != 0 + yyq2[13] = len(x.Finalizers) != 0 + yyq2[14] = x.ClusterName != "" + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(15) + } else { + yynn2 = 0 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[0] { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.GenerateName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("generateName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.GenerateName)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Namespace)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("namespace")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Namespace)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[3] { + yym13 := z.EncBinary() + _ = yym13 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SelfLink)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selfLink")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym14 := z.EncBinary() + _ = yym14 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SelfLink)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[4] { + yym16 := z.EncBinary() + _ = yym16 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("uid")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym17 := z.EncBinary() + _ = yym17 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[5] { + yym19 := z.EncBinary() + _ = yym19 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym20 := z.EncBinary() + _ = yym20 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[6] { + yym22 := z.EncBinary() + _ = yym22 + if false { + } else { + r.EncodeInt(int64(x.Generation)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("generation")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym23 := z.EncBinary() + _ = yym23 + if false { + } else { + r.EncodeInt(int64(x.Generation)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[7] { + yy25 := &x.CreationTimestamp + yym26 := z.EncBinary() + _ = yym26 + if false { + } else if z.HasExtensions() && z.EncExt(yy25) { + } else if yym26 { + z.EncBinaryMarshal(yy25) + } else if !yym26 && z.IsJSONHandle() { + z.EncJSONMarshal(yy25) + } else { + z.EncFallback(yy25) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("creationTimestamp")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy27 := &x.CreationTimestamp + yym28 := z.EncBinary() + _ = yym28 + if false { + } else if z.HasExtensions() && z.EncExt(yy27) { + } else if yym28 { + z.EncBinaryMarshal(yy27) + } else if !yym28 && z.IsJSONHandle() { + z.EncJSONMarshal(yy27) + } else { + z.EncFallback(yy27) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[8] { + if x.DeletionTimestamp == nil { + r.EncodeNil() + } else { + yym30 := z.EncBinary() + _ = yym30 + if false { + } else if z.HasExtensions() && z.EncExt(x.DeletionTimestamp) { + } else if yym30 { + z.EncBinaryMarshal(x.DeletionTimestamp) + } else if !yym30 && z.IsJSONHandle() { + z.EncJSONMarshal(x.DeletionTimestamp) + } else { + z.EncFallback(x.DeletionTimestamp) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("deletionTimestamp")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DeletionTimestamp == nil { + r.EncodeNil() + } else { + yym31 := z.EncBinary() + _ = yym31 + if false { + } else if z.HasExtensions() && z.EncExt(x.DeletionTimestamp) { + } else if yym31 { + z.EncBinaryMarshal(x.DeletionTimestamp) + } else if !yym31 && z.IsJSONHandle() { + z.EncJSONMarshal(x.DeletionTimestamp) + } else { + z.EncFallback(x.DeletionTimestamp) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[9] { + if x.DeletionGracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy33 := *x.DeletionGracePeriodSeconds + yym34 := z.EncBinary() + _ = yym34 + if false { + } else { + r.EncodeInt(int64(yy33)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("deletionGracePeriodSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DeletionGracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy35 := *x.DeletionGracePeriodSeconds + yym36 := z.EncBinary() + _ = yym36 + if false { + } else { + r.EncodeInt(int64(yy35)) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[10] { + if x.Labels == nil { + r.EncodeNil() + } else { + yym38 := z.EncBinary() + _ = yym38 + if false { + } else { + z.F.EncMapStringStringV(x.Labels, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("labels")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Labels == nil { + r.EncodeNil() + } else { + yym39 := z.EncBinary() + _ = yym39 + if false { + } else { + z.F.EncMapStringStringV(x.Labels, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[11] { + if x.Annotations == nil { + r.EncodeNil() + } else { + yym41 := z.EncBinary() + _ = yym41 + if false { + } else { + z.F.EncMapStringStringV(x.Annotations, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("annotations")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Annotations == nil { + r.EncodeNil() + } else { + yym42 := z.EncBinary() + _ = yym42 + if false { + } else { + z.F.EncMapStringStringV(x.Annotations, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[12] { + if x.OwnerReferences == nil { + r.EncodeNil() + } else { + yym44 := z.EncBinary() + _ = yym44 + if false { + } else { + h.encSliceOwnerReference(([]OwnerReference)(x.OwnerReferences), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ownerReferences")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.OwnerReferences == nil { + r.EncodeNil() + } else { + yym45 := z.EncBinary() + _ = yym45 + if false { + } else { + h.encSliceOwnerReference(([]OwnerReference)(x.OwnerReferences), e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[13] { + if x.Finalizers == nil { + r.EncodeNil() + } else { + yym47 := z.EncBinary() + _ = yym47 + if false { + } else { + z.F.EncSliceStringV(x.Finalizers, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("finalizers")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Finalizers == nil { + r.EncodeNil() + } else { + yym48 := z.EncBinary() + _ = yym48 + if false { + } else { + z.F.EncSliceStringV(x.Finalizers, false, e) + } + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[14] { + yym50 := z.EncBinary() + _ = yym50 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClusterName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("clusterName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym51 := z.EncBinary() + _ = yym51 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClusterName)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ObjectMeta) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym52 := z.DecBinary() + _ = yym52 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct53 := r.ContainerType() + if yyct53 == codecSelferValueTypeMap1234 { + yyl53 := r.ReadMapStart() + if yyl53 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl53, d) + } + } else if yyct53 == codecSelferValueTypeArray1234 { + yyl53 := r.ReadArrayStart() + if yyl53 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl53, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ObjectMeta) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys54Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys54Slc + var yyhl54 bool = l >= 0 + for yyj54 := 0; ; yyj54++ { + if yyhl54 { + if yyj54 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys54Slc = r.DecodeBytes(yys54Slc, true, true) + yys54 := string(yys54Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys54 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "generateName": + if r.TryDecodeAsNil() { + x.GenerateName = "" + } else { + x.GenerateName = string(r.DecodeString()) + } + case "namespace": + if r.TryDecodeAsNil() { + x.Namespace = "" + } else { + x.Namespace = string(r.DecodeString()) + } + case "selfLink": + if r.TryDecodeAsNil() { + x.SelfLink = "" + } else { + x.SelfLink = string(r.DecodeString()) + } + case "uid": + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + case "resourceVersion": + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + case "generation": + if r.TryDecodeAsNil() { + x.Generation = 0 + } else { + x.Generation = int64(r.DecodeInt(64)) + } + case "creationTimestamp": + if r.TryDecodeAsNil() { + x.CreationTimestamp = pkg2_unversioned.Time{} + } else { + yyv62 := &x.CreationTimestamp + yym63 := z.DecBinary() + _ = yym63 + if false { + } else if z.HasExtensions() && z.DecExt(yyv62) { + } else if yym63 { + z.DecBinaryUnmarshal(yyv62) + } else if !yym63 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv62) + } else { + z.DecFallback(yyv62, false) + } + } + case "deletionTimestamp": + if r.TryDecodeAsNil() { + if x.DeletionTimestamp != nil { + x.DeletionTimestamp = nil + } + } else { + if x.DeletionTimestamp == nil { + x.DeletionTimestamp = new(pkg2_unversioned.Time) + } + yym65 := z.DecBinary() + _ = yym65 + if false { + } else if z.HasExtensions() && z.DecExt(x.DeletionTimestamp) { + } else if yym65 { + z.DecBinaryUnmarshal(x.DeletionTimestamp) + } else if !yym65 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.DeletionTimestamp) + } else { + z.DecFallback(x.DeletionTimestamp, false) + } + } + case "deletionGracePeriodSeconds": + if r.TryDecodeAsNil() { + if x.DeletionGracePeriodSeconds != nil { + x.DeletionGracePeriodSeconds = nil + } + } else { + if x.DeletionGracePeriodSeconds == nil { + x.DeletionGracePeriodSeconds = new(int64) + } + yym67 := z.DecBinary() + _ = yym67 + if false { + } else { + *((*int64)(x.DeletionGracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + case "labels": + if r.TryDecodeAsNil() { + x.Labels = nil + } else { + yyv68 := &x.Labels + yym69 := z.DecBinary() + _ = yym69 + if false { + } else { + z.F.DecMapStringStringX(yyv68, false, d) + } + } + case "annotations": + if r.TryDecodeAsNil() { + x.Annotations = nil + } else { + yyv70 := &x.Annotations + yym71 := z.DecBinary() + _ = yym71 + if false { + } else { + z.F.DecMapStringStringX(yyv70, false, d) + } + } + case "ownerReferences": + if r.TryDecodeAsNil() { + x.OwnerReferences = nil + } else { + yyv72 := &x.OwnerReferences + yym73 := z.DecBinary() + _ = yym73 + if false { + } else { + h.decSliceOwnerReference((*[]OwnerReference)(yyv72), d) + } + } + case "finalizers": + if r.TryDecodeAsNil() { + x.Finalizers = nil + } else { + yyv74 := &x.Finalizers + yym75 := z.DecBinary() + _ = yym75 + if false { + } else { + z.F.DecSliceStringX(yyv74, false, d) + } + } + case "clusterName": + if r.TryDecodeAsNil() { + x.ClusterName = "" + } else { + x.ClusterName = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys54) + } // end switch yys54 + } // end for yyj54 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ObjectMeta) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj77 int + var yyb77 bool + var yyhl77 bool = l >= 0 + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.GenerateName = "" + } else { + x.GenerateName = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Namespace = "" + } else { + x.Namespace = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SelfLink = "" + } else { + x.SelfLink = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Generation = 0 + } else { + x.Generation = int64(r.DecodeInt(64)) + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CreationTimestamp = pkg2_unversioned.Time{} + } else { + yyv85 := &x.CreationTimestamp + yym86 := z.DecBinary() + _ = yym86 + if false { + } else if z.HasExtensions() && z.DecExt(yyv85) { + } else if yym86 { + z.DecBinaryUnmarshal(yyv85) + } else if !yym86 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv85) + } else { + z.DecFallback(yyv85, false) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DeletionTimestamp != nil { + x.DeletionTimestamp = nil + } + } else { + if x.DeletionTimestamp == nil { + x.DeletionTimestamp = new(pkg2_unversioned.Time) + } + yym88 := z.DecBinary() + _ = yym88 + if false { + } else if z.HasExtensions() && z.DecExt(x.DeletionTimestamp) { + } else if yym88 { + z.DecBinaryUnmarshal(x.DeletionTimestamp) + } else if !yym88 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.DeletionTimestamp) + } else { + z.DecFallback(x.DeletionTimestamp, false) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DeletionGracePeriodSeconds != nil { + x.DeletionGracePeriodSeconds = nil + } + } else { + if x.DeletionGracePeriodSeconds == nil { + x.DeletionGracePeriodSeconds = new(int64) + } + yym90 := z.DecBinary() + _ = yym90 + if false { + } else { + *((*int64)(x.DeletionGracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Labels = nil + } else { + yyv91 := &x.Labels + yym92 := z.DecBinary() + _ = yym92 + if false { + } else { + z.F.DecMapStringStringX(yyv91, false, d) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Annotations = nil + } else { + yyv93 := &x.Annotations + yym94 := z.DecBinary() + _ = yym94 + if false { + } else { + z.F.DecMapStringStringX(yyv93, false, d) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.OwnerReferences = nil + } else { + yyv95 := &x.OwnerReferences + yym96 := z.DecBinary() + _ = yym96 + if false { + } else { + h.decSliceOwnerReference((*[]OwnerReference)(yyv95), d) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Finalizers = nil + } else { + yyv97 := &x.Finalizers + yym98 := z.DecBinary() + _ = yym98 + if false { + } else { + z.F.DecSliceStringX(yyv97, false, d) + } + } + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ClusterName = "" + } else { + x.ClusterName = string(r.DecodeString()) + } + for { + yyj77++ + if yyhl77 { + yyb77 = yyj77 > l + } else { + yyb77 = r.CheckBreak() + } + if yyb77 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj77-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Volume) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym100 := z.EncBinary() + _ = yym100 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep101 := !z.EncBinary() + yy2arr101 := z.EncBasicHandle().StructToArray + var yyq101 [23]bool + _, _, _ = yysep101, yyq101, yy2arr101 + const yyr101 bool = false + yyq101[1] = x.VolumeSource.HostPath != nil && x.HostPath != nil + yyq101[2] = x.VolumeSource.EmptyDir != nil && x.EmptyDir != nil + yyq101[3] = x.VolumeSource.GCEPersistentDisk != nil && x.GCEPersistentDisk != nil + yyq101[4] = x.VolumeSource.AWSElasticBlockStore != nil && x.AWSElasticBlockStore != nil + yyq101[5] = x.VolumeSource.GitRepo != nil && x.GitRepo != nil + yyq101[6] = x.VolumeSource.Secret != nil && x.Secret != nil + yyq101[7] = x.VolumeSource.NFS != nil && x.NFS != nil + yyq101[8] = x.VolumeSource.ISCSI != nil && x.ISCSI != nil + yyq101[9] = x.VolumeSource.Glusterfs != nil && x.Glusterfs != nil + yyq101[10] = x.VolumeSource.PersistentVolumeClaim != nil && x.PersistentVolumeClaim != nil + yyq101[11] = x.VolumeSource.RBD != nil && x.RBD != nil + yyq101[12] = x.VolumeSource.FlexVolume != nil && x.FlexVolume != nil + yyq101[13] = x.VolumeSource.Cinder != nil && x.Cinder != nil + yyq101[14] = x.VolumeSource.CephFS != nil && x.CephFS != nil + yyq101[15] = x.VolumeSource.Flocker != nil && x.Flocker != nil + yyq101[16] = x.VolumeSource.DownwardAPI != nil && x.DownwardAPI != nil + yyq101[17] = x.VolumeSource.FC != nil && x.FC != nil + yyq101[18] = x.VolumeSource.AzureFile != nil && x.AzureFile != nil + yyq101[19] = x.VolumeSource.ConfigMap != nil && x.ConfigMap != nil + yyq101[20] = x.VolumeSource.VsphereVolume != nil && x.VsphereVolume != nil + yyq101[21] = x.VolumeSource.Quobyte != nil && x.Quobyte != nil + yyq101[22] = x.VolumeSource.AzureDisk != nil && x.AzureDisk != nil + var yynn101 int + if yyr101 || yy2arr101 { + r.EncodeArrayStart(23) + } else { + yynn101 = 1 + for _, b := range yyq101 { + if b { + yynn101++ + } + } + r.EncodeMapStart(yynn101) + yynn101 = 0 + } + if yyr101 || yy2arr101 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym103 := z.EncBinary() + _ = yym103 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym104 := z.EncBinary() + _ = yym104 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + var yyn105 bool + if x.VolumeSource.HostPath == nil { + yyn105 = true + goto LABEL105 + } + LABEL105: + if yyr101 || yy2arr101 { + if yyn105 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[1] { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn105 { + r.EncodeNil() + } else { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } + } + } + var yyn106 bool + if x.VolumeSource.EmptyDir == nil { + yyn106 = true + goto LABEL106 + } + LABEL106: + if yyr101 || yy2arr101 { + if yyn106 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[2] { + if x.EmptyDir == nil { + r.EncodeNil() + } else { + x.EmptyDir.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("emptyDir")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn106 { + r.EncodeNil() + } else { + if x.EmptyDir == nil { + r.EncodeNil() + } else { + x.EmptyDir.CodecEncodeSelf(e) + } + } + } + } + var yyn107 bool + if x.VolumeSource.GCEPersistentDisk == nil { + yyn107 = true + goto LABEL107 + } + LABEL107: + if yyr101 || yy2arr101 { + if yyn107 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[3] { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gcePersistentDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn107 { + r.EncodeNil() + } else { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } + } + } + var yyn108 bool + if x.VolumeSource.AWSElasticBlockStore == nil { + yyn108 = true + goto LABEL108 + } + LABEL108: + if yyr101 || yy2arr101 { + if yyn108 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[4] { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("awsElasticBlockStore")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn108 { + r.EncodeNil() + } else { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } + } + } + var yyn109 bool + if x.VolumeSource.GitRepo == nil { + yyn109 = true + goto LABEL109 + } + LABEL109: + if yyr101 || yy2arr101 { + if yyn109 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[5] { + if x.GitRepo == nil { + r.EncodeNil() + } else { + x.GitRepo.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gitRepo")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn109 { + r.EncodeNil() + } else { + if x.GitRepo == nil { + r.EncodeNil() + } else { + x.GitRepo.CodecEncodeSelf(e) + } + } + } + } + var yyn110 bool + if x.VolumeSource.Secret == nil { + yyn110 = true + goto LABEL110 + } + LABEL110: + if yyr101 || yy2arr101 { + if yyn110 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[6] { + if x.Secret == nil { + r.EncodeNil() + } else { + x.Secret.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secret")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn110 { + r.EncodeNil() + } else { + if x.Secret == nil { + r.EncodeNil() + } else { + x.Secret.CodecEncodeSelf(e) + } + } + } + } + var yyn111 bool + if x.VolumeSource.NFS == nil { + yyn111 = true + goto LABEL111 + } + LABEL111: + if yyr101 || yy2arr101 { + if yyn111 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[7] { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn111 { + r.EncodeNil() + } else { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } + } + } + var yyn112 bool + if x.VolumeSource.ISCSI == nil { + yyn112 = true + goto LABEL112 + } + LABEL112: + if yyr101 || yy2arr101 { + if yyn112 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[8] { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsi")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn112 { + r.EncodeNil() + } else { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } + } + } + var yyn113 bool + if x.VolumeSource.Glusterfs == nil { + yyn113 = true + goto LABEL113 + } + LABEL113: + if yyr101 || yy2arr101 { + if yyn113 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[9] { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("glusterfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn113 { + r.EncodeNil() + } else { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } + } + } + var yyn114 bool + if x.VolumeSource.PersistentVolumeClaim == nil { + yyn114 = true + goto LABEL114 + } + LABEL114: + if yyr101 || yy2arr101 { + if yyn114 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[10] { + if x.PersistentVolumeClaim == nil { + r.EncodeNil() + } else { + x.PersistentVolumeClaim.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("persistentVolumeClaim")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn114 { + r.EncodeNil() + } else { + if x.PersistentVolumeClaim == nil { + r.EncodeNil() + } else { + x.PersistentVolumeClaim.CodecEncodeSelf(e) + } + } + } + } + var yyn115 bool + if x.VolumeSource.RBD == nil { + yyn115 = true + goto LABEL115 + } + LABEL115: + if yyr101 || yy2arr101 { + if yyn115 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[11] { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rbd")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn115 { + r.EncodeNil() + } else { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } + } + } + var yyn116 bool + if x.VolumeSource.FlexVolume == nil { + yyn116 = true + goto LABEL116 + } + LABEL116: + if yyr101 || yy2arr101 { + if yyn116 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[12] { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flexVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn116 { + r.EncodeNil() + } else { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } + } + } + var yyn117 bool + if x.VolumeSource.Cinder == nil { + yyn117 = true + goto LABEL117 + } + LABEL117: + if yyr101 || yy2arr101 { + if yyn117 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[13] { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cinder")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn117 { + r.EncodeNil() + } else { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } + } + } + var yyn118 bool + if x.VolumeSource.CephFS == nil { + yyn118 = true + goto LABEL118 + } + LABEL118: + if yyr101 || yy2arr101 { + if yyn118 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[14] { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cephfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn118 { + r.EncodeNil() + } else { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } + } + } + var yyn119 bool + if x.VolumeSource.Flocker == nil { + yyn119 = true + goto LABEL119 + } + LABEL119: + if yyr101 || yy2arr101 { + if yyn119 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[15] { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flocker")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn119 { + r.EncodeNil() + } else { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } + } + } + var yyn120 bool + if x.VolumeSource.DownwardAPI == nil { + yyn120 = true + goto LABEL120 + } + LABEL120: + if yyr101 || yy2arr101 { + if yyn120 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[16] { + if x.DownwardAPI == nil { + r.EncodeNil() + } else { + x.DownwardAPI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("downwardAPI")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn120 { + r.EncodeNil() + } else { + if x.DownwardAPI == nil { + r.EncodeNil() + } else { + x.DownwardAPI.CodecEncodeSelf(e) + } + } + } + } + var yyn121 bool + if x.VolumeSource.FC == nil { + yyn121 = true + goto LABEL121 + } + LABEL121: + if yyr101 || yy2arr101 { + if yyn121 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[17] { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fc")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn121 { + r.EncodeNil() + } else { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } + } + } + var yyn122 bool + if x.VolumeSource.AzureFile == nil { + yyn122 = true + goto LABEL122 + } + LABEL122: + if yyr101 || yy2arr101 { + if yyn122 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[18] { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[18] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn122 { + r.EncodeNil() + } else { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } + } + } + var yyn123 bool + if x.VolumeSource.ConfigMap == nil { + yyn123 = true + goto LABEL123 + } + LABEL123: + if yyr101 || yy2arr101 { + if yyn123 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[19] { + if x.ConfigMap == nil { + r.EncodeNil() + } else { + x.ConfigMap.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[19] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("configMap")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn123 { + r.EncodeNil() + } else { + if x.ConfigMap == nil { + r.EncodeNil() + } else { + x.ConfigMap.CodecEncodeSelf(e) + } + } + } + } + var yyn124 bool + if x.VolumeSource.VsphereVolume == nil { + yyn124 = true + goto LABEL124 + } + LABEL124: + if yyr101 || yy2arr101 { + if yyn124 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[20] { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[20] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("vsphereVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn124 { + r.EncodeNil() + } else { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } + } + } + var yyn125 bool + if x.VolumeSource.Quobyte == nil { + yyn125 = true + goto LABEL125 + } + LABEL125: + if yyr101 || yy2arr101 { + if yyn125 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[21] { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[21] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("quobyte")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn125 { + r.EncodeNil() + } else { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } + } + } + var yyn126 bool + if x.VolumeSource.AzureDisk == nil { + yyn126 = true + goto LABEL126 + } + LABEL126: + if yyr101 || yy2arr101 { + if yyn126 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq101[22] { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq101[22] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn126 { + r.EncodeNil() + } else { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } + } + } + if yyr101 || yy2arr101 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Volume) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym127 := z.DecBinary() + _ = yym127 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct128 := r.ContainerType() + if yyct128 == codecSelferValueTypeMap1234 { + yyl128 := r.ReadMapStart() + if yyl128 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl128, d) + } + } else if yyct128 == codecSelferValueTypeArray1234 { + yyl128 := r.ReadArrayStart() + if yyl128 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl128, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Volume) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys129Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys129Slc + var yyhl129 bool = l >= 0 + for yyj129 := 0; ; yyj129++ { + if yyhl129 { + if yyj129 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys129Slc = r.DecodeBytes(yys129Slc, true, true) + yys129 := string(yys129Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys129 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "hostPath": + if x.VolumeSource.HostPath == nil { + x.VolumeSource.HostPath = new(HostPathVolumeSource) + } + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + case "emptyDir": + if x.VolumeSource.EmptyDir == nil { + x.VolumeSource.EmptyDir = new(EmptyDirVolumeSource) + } + if r.TryDecodeAsNil() { + if x.EmptyDir != nil { + x.EmptyDir = nil + } + } else { + if x.EmptyDir == nil { + x.EmptyDir = new(EmptyDirVolumeSource) + } + x.EmptyDir.CodecDecodeSelf(d) + } + case "gcePersistentDisk": + if x.VolumeSource.GCEPersistentDisk == nil { + x.VolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + case "awsElasticBlockStore": + if x.VolumeSource.AWSElasticBlockStore == nil { + x.VolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + case "gitRepo": + if x.VolumeSource.GitRepo == nil { + x.VolumeSource.GitRepo = new(GitRepoVolumeSource) + } + if r.TryDecodeAsNil() { + if x.GitRepo != nil { + x.GitRepo = nil + } + } else { + if x.GitRepo == nil { + x.GitRepo = new(GitRepoVolumeSource) + } + x.GitRepo.CodecDecodeSelf(d) + } + case "secret": + if x.VolumeSource.Secret == nil { + x.VolumeSource.Secret = new(SecretVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Secret != nil { + x.Secret = nil + } + } else { + if x.Secret == nil { + x.Secret = new(SecretVolumeSource) + } + x.Secret.CodecDecodeSelf(d) + } + case "nfs": + if x.VolumeSource.NFS == nil { + x.VolumeSource.NFS = new(NFSVolumeSource) + } + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + case "iscsi": + if x.VolumeSource.ISCSI == nil { + x.VolumeSource.ISCSI = new(ISCSIVolumeSource) + } + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + case "glusterfs": + if x.VolumeSource.Glusterfs == nil { + x.VolumeSource.Glusterfs = new(GlusterfsVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + case "persistentVolumeClaim": + if x.VolumeSource.PersistentVolumeClaim == nil { + x.VolumeSource.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + if r.TryDecodeAsNil() { + if x.PersistentVolumeClaim != nil { + x.PersistentVolumeClaim = nil + } + } else { + if x.PersistentVolumeClaim == nil { + x.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + x.PersistentVolumeClaim.CodecDecodeSelf(d) + } + case "rbd": + if x.VolumeSource.RBD == nil { + x.VolumeSource.RBD = new(RBDVolumeSource) + } + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + case "flexVolume": + if x.VolumeSource.FlexVolume == nil { + x.VolumeSource.FlexVolume = new(FlexVolumeSource) + } + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + case "cinder": + if x.VolumeSource.Cinder == nil { + x.VolumeSource.Cinder = new(CinderVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + case "cephfs": + if x.VolumeSource.CephFS == nil { + x.VolumeSource.CephFS = new(CephFSVolumeSource) + } + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + case "flocker": + if x.VolumeSource.Flocker == nil { + x.VolumeSource.Flocker = new(FlockerVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + case "downwardAPI": + if x.VolumeSource.DownwardAPI == nil { + x.VolumeSource.DownwardAPI = new(DownwardAPIVolumeSource) + } + if r.TryDecodeAsNil() { + if x.DownwardAPI != nil { + x.DownwardAPI = nil + } + } else { + if x.DownwardAPI == nil { + x.DownwardAPI = new(DownwardAPIVolumeSource) + } + x.DownwardAPI.CodecDecodeSelf(d) + } + case "fc": + if x.VolumeSource.FC == nil { + x.VolumeSource.FC = new(FCVolumeSource) + } + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + case "azureFile": + if x.VolumeSource.AzureFile == nil { + x.VolumeSource.AzureFile = new(AzureFileVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + case "configMap": + if x.VolumeSource.ConfigMap == nil { + x.VolumeSource.ConfigMap = new(ConfigMapVolumeSource) + } + if r.TryDecodeAsNil() { + if x.ConfigMap != nil { + x.ConfigMap = nil + } + } else { + if x.ConfigMap == nil { + x.ConfigMap = new(ConfigMapVolumeSource) + } + x.ConfigMap.CodecDecodeSelf(d) + } + case "vsphereVolume": + if x.VolumeSource.VsphereVolume == nil { + x.VolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + case "quobyte": + if x.VolumeSource.Quobyte == nil { + x.VolumeSource.Quobyte = new(QuobyteVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + case "azureDisk": + if x.VolumeSource.AzureDisk == nil { + x.VolumeSource.AzureDisk = new(AzureDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys129) + } // end switch yys129 + } // end for yyj129 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj153 int + var yyb153 bool + var yyhl153 bool = l >= 0 + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + if x.VolumeSource.HostPath == nil { + x.VolumeSource.HostPath = new(HostPathVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + if x.VolumeSource.EmptyDir == nil { + x.VolumeSource.EmptyDir = new(EmptyDirVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.EmptyDir != nil { + x.EmptyDir = nil + } + } else { + if x.EmptyDir == nil { + x.EmptyDir = new(EmptyDirVolumeSource) + } + x.EmptyDir.CodecDecodeSelf(d) + } + if x.VolumeSource.GCEPersistentDisk == nil { + x.VolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + if x.VolumeSource.AWSElasticBlockStore == nil { + x.VolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + if x.VolumeSource.GitRepo == nil { + x.VolumeSource.GitRepo = new(GitRepoVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GitRepo != nil { + x.GitRepo = nil + } + } else { + if x.GitRepo == nil { + x.GitRepo = new(GitRepoVolumeSource) + } + x.GitRepo.CodecDecodeSelf(d) + } + if x.VolumeSource.Secret == nil { + x.VolumeSource.Secret = new(SecretVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Secret != nil { + x.Secret = nil + } + } else { + if x.Secret == nil { + x.Secret = new(SecretVolumeSource) + } + x.Secret.CodecDecodeSelf(d) + } + if x.VolumeSource.NFS == nil { + x.VolumeSource.NFS = new(NFSVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + if x.VolumeSource.ISCSI == nil { + x.VolumeSource.ISCSI = new(ISCSIVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + if x.VolumeSource.Glusterfs == nil { + x.VolumeSource.Glusterfs = new(GlusterfsVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + if x.VolumeSource.PersistentVolumeClaim == nil { + x.VolumeSource.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PersistentVolumeClaim != nil { + x.PersistentVolumeClaim = nil + } + } else { + if x.PersistentVolumeClaim == nil { + x.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + x.PersistentVolumeClaim.CodecDecodeSelf(d) + } + if x.VolumeSource.RBD == nil { + x.VolumeSource.RBD = new(RBDVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + if x.VolumeSource.FlexVolume == nil { + x.VolumeSource.FlexVolume = new(FlexVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + if x.VolumeSource.Cinder == nil { + x.VolumeSource.Cinder = new(CinderVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + if x.VolumeSource.CephFS == nil { + x.VolumeSource.CephFS = new(CephFSVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + if x.VolumeSource.Flocker == nil { + x.VolumeSource.Flocker = new(FlockerVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + if x.VolumeSource.DownwardAPI == nil { + x.VolumeSource.DownwardAPI = new(DownwardAPIVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DownwardAPI != nil { + x.DownwardAPI = nil + } + } else { + if x.DownwardAPI == nil { + x.DownwardAPI = new(DownwardAPIVolumeSource) + } + x.DownwardAPI.CodecDecodeSelf(d) + } + if x.VolumeSource.FC == nil { + x.VolumeSource.FC = new(FCVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + if x.VolumeSource.AzureFile == nil { + x.VolumeSource.AzureFile = new(AzureFileVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + if x.VolumeSource.ConfigMap == nil { + x.VolumeSource.ConfigMap = new(ConfigMapVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ConfigMap != nil { + x.ConfigMap = nil + } + } else { + if x.ConfigMap == nil { + x.ConfigMap = new(ConfigMapVolumeSource) + } + x.ConfigMap.CodecDecodeSelf(d) + } + if x.VolumeSource.VsphereVolume == nil { + x.VolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + if x.VolumeSource.Quobyte == nil { + x.VolumeSource.Quobyte = new(QuobyteVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + if x.VolumeSource.AzureDisk == nil { + x.VolumeSource.AzureDisk = new(AzureDiskVolumeSource) + } + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + for { + yyj153++ + if yyhl153 { + yyb153 = yyj153 > l + } else { + yyb153 = r.CheckBreak() + } + if yyb153 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj153-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *VolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym177 := z.EncBinary() + _ = yym177 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep178 := !z.EncBinary() + yy2arr178 := z.EncBasicHandle().StructToArray + var yyq178 [22]bool + _, _, _ = yysep178, yyq178, yy2arr178 + const yyr178 bool = false + yyq178[0] = x.HostPath != nil + yyq178[1] = x.EmptyDir != nil + yyq178[2] = x.GCEPersistentDisk != nil + yyq178[3] = x.AWSElasticBlockStore != nil + yyq178[4] = x.GitRepo != nil + yyq178[5] = x.Secret != nil + yyq178[6] = x.NFS != nil + yyq178[7] = x.ISCSI != nil + yyq178[8] = x.Glusterfs != nil + yyq178[9] = x.PersistentVolumeClaim != nil + yyq178[10] = x.RBD != nil + yyq178[11] = x.FlexVolume != nil + yyq178[12] = x.Cinder != nil + yyq178[13] = x.CephFS != nil + yyq178[14] = x.Flocker != nil + yyq178[15] = x.DownwardAPI != nil + yyq178[16] = x.FC != nil + yyq178[17] = x.AzureFile != nil + yyq178[18] = x.ConfigMap != nil + yyq178[19] = x.VsphereVolume != nil + yyq178[20] = x.Quobyte != nil + yyq178[21] = x.AzureDisk != nil + var yynn178 int + if yyr178 || yy2arr178 { + r.EncodeArrayStart(22) + } else { + yynn178 = 0 + for _, b := range yyq178 { + if b { + yynn178++ + } + } + r.EncodeMapStart(yynn178) + yynn178 = 0 + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[0] { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[1] { + if x.EmptyDir == nil { + r.EncodeNil() + } else { + x.EmptyDir.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("emptyDir")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.EmptyDir == nil { + r.EncodeNil() + } else { + x.EmptyDir.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[2] { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gcePersistentDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[3] { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("awsElasticBlockStore")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[4] { + if x.GitRepo == nil { + r.EncodeNil() + } else { + x.GitRepo.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gitRepo")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.GitRepo == nil { + r.EncodeNil() + } else { + x.GitRepo.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[5] { + if x.Secret == nil { + r.EncodeNil() + } else { + x.Secret.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secret")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Secret == nil { + r.EncodeNil() + } else { + x.Secret.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[6] { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[7] { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsi")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[8] { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("glusterfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[9] { + if x.PersistentVolumeClaim == nil { + r.EncodeNil() + } else { + x.PersistentVolumeClaim.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("persistentVolumeClaim")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PersistentVolumeClaim == nil { + r.EncodeNil() + } else { + x.PersistentVolumeClaim.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[10] { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rbd")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[11] { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flexVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[12] { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cinder")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[13] { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cephfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[14] { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flocker")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[15] { + if x.DownwardAPI == nil { + r.EncodeNil() + } else { + x.DownwardAPI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("downwardAPI")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DownwardAPI == nil { + r.EncodeNil() + } else { + x.DownwardAPI.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[16] { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fc")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[17] { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[18] { + if x.ConfigMap == nil { + r.EncodeNil() + } else { + x.ConfigMap.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[18] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("configMap")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ConfigMap == nil { + r.EncodeNil() + } else { + x.ConfigMap.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[19] { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[19] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("vsphereVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[20] { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[20] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("quobyte")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq178[21] { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq178[21] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } + } + if yyr178 || yy2arr178 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *VolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym201 := z.DecBinary() + _ = yym201 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct202 := r.ContainerType() + if yyct202 == codecSelferValueTypeMap1234 { + yyl202 := r.ReadMapStart() + if yyl202 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl202, d) + } + } else if yyct202 == codecSelferValueTypeArray1234 { + yyl202 := r.ReadArrayStart() + if yyl202 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl202, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *VolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys203Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys203Slc + var yyhl203 bool = l >= 0 + for yyj203 := 0; ; yyj203++ { + if yyhl203 { + if yyj203 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys203Slc = r.DecodeBytes(yys203Slc, true, true) + yys203 := string(yys203Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys203 { + case "hostPath": + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + case "emptyDir": + if r.TryDecodeAsNil() { + if x.EmptyDir != nil { + x.EmptyDir = nil + } + } else { + if x.EmptyDir == nil { + x.EmptyDir = new(EmptyDirVolumeSource) + } + x.EmptyDir.CodecDecodeSelf(d) + } + case "gcePersistentDisk": + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + case "awsElasticBlockStore": + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + case "gitRepo": + if r.TryDecodeAsNil() { + if x.GitRepo != nil { + x.GitRepo = nil + } + } else { + if x.GitRepo == nil { + x.GitRepo = new(GitRepoVolumeSource) + } + x.GitRepo.CodecDecodeSelf(d) + } + case "secret": + if r.TryDecodeAsNil() { + if x.Secret != nil { + x.Secret = nil + } + } else { + if x.Secret == nil { + x.Secret = new(SecretVolumeSource) + } + x.Secret.CodecDecodeSelf(d) + } + case "nfs": + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + case "iscsi": + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + case "glusterfs": + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + case "persistentVolumeClaim": + if r.TryDecodeAsNil() { + if x.PersistentVolumeClaim != nil { + x.PersistentVolumeClaim = nil + } + } else { + if x.PersistentVolumeClaim == nil { + x.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + x.PersistentVolumeClaim.CodecDecodeSelf(d) + } + case "rbd": + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + case "flexVolume": + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + case "cinder": + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + case "cephfs": + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + case "flocker": + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + case "downwardAPI": + if r.TryDecodeAsNil() { + if x.DownwardAPI != nil { + x.DownwardAPI = nil + } + } else { + if x.DownwardAPI == nil { + x.DownwardAPI = new(DownwardAPIVolumeSource) + } + x.DownwardAPI.CodecDecodeSelf(d) + } + case "fc": + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + case "azureFile": + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + case "configMap": + if r.TryDecodeAsNil() { + if x.ConfigMap != nil { + x.ConfigMap = nil + } + } else { + if x.ConfigMap == nil { + x.ConfigMap = new(ConfigMapVolumeSource) + } + x.ConfigMap.CodecDecodeSelf(d) + } + case "vsphereVolume": + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + case "quobyte": + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + case "azureDisk": + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys203) + } // end switch yys203 + } // end for yyj203 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj226 int + var yyb226 bool + var yyhl226 bool = l >= 0 + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.EmptyDir != nil { + x.EmptyDir = nil + } + } else { + if x.EmptyDir == nil { + x.EmptyDir = new(EmptyDirVolumeSource) + } + x.EmptyDir.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GitRepo != nil { + x.GitRepo = nil + } + } else { + if x.GitRepo == nil { + x.GitRepo = new(GitRepoVolumeSource) + } + x.GitRepo.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Secret != nil { + x.Secret = nil + } + } else { + if x.Secret == nil { + x.Secret = new(SecretVolumeSource) + } + x.Secret.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PersistentVolumeClaim != nil { + x.PersistentVolumeClaim = nil + } + } else { + if x.PersistentVolumeClaim == nil { + x.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) + } + x.PersistentVolumeClaim.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DownwardAPI != nil { + x.DownwardAPI = nil + } + } else { + if x.DownwardAPI == nil { + x.DownwardAPI = new(DownwardAPIVolumeSource) + } + x.DownwardAPI.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ConfigMap != nil { + x.ConfigMap = nil + } + } else { + if x.ConfigMap == nil { + x.ConfigMap = new(ConfigMapVolumeSource) + } + x.ConfigMap.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + for { + yyj226++ + if yyhl226 { + yyb226 = yyj226 > l + } else { + yyb226 = r.CheckBreak() + } + if yyb226 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj226-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaimVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym249 := z.EncBinary() + _ = yym249 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep250 := !z.EncBinary() + yy2arr250 := z.EncBasicHandle().StructToArray + var yyq250 [2]bool + _, _, _ = yysep250, yyq250, yy2arr250 + const yyr250 bool = false + yyq250[1] = x.ReadOnly != false + var yynn250 int + if yyr250 || yy2arr250 { + r.EncodeArrayStart(2) + } else { + yynn250 = 1 + for _, b := range yyq250 { + if b { + yynn250++ + } + } + r.EncodeMapStart(yynn250) + yynn250 = 0 + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym252 := z.EncBinary() + _ = yym252 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClaimName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("claimName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym253 := z.EncBinary() + _ = yym253 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClaimName)) + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq250[1] { + yym255 := z.EncBinary() + _ = yym255 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq250[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym256 := z.EncBinary() + _ = yym256 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr250 || yy2arr250 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaimVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym257 := z.DecBinary() + _ = yym257 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct258 := r.ContainerType() + if yyct258 == codecSelferValueTypeMap1234 { + yyl258 := r.ReadMapStart() + if yyl258 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl258, d) + } + } else if yyct258 == codecSelferValueTypeArray1234 { + yyl258 := r.ReadArrayStart() + if yyl258 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl258, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaimVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys259Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys259Slc + var yyhl259 bool = l >= 0 + for yyj259 := 0; ; yyj259++ { + if yyhl259 { + if yyj259 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys259Slc = r.DecodeBytes(yys259Slc, true, true) + yys259 := string(yys259Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys259 { + case "claimName": + if r.TryDecodeAsNil() { + x.ClaimName = "" + } else { + x.ClaimName = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys259) + } // end switch yys259 + } // end for yyj259 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaimVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj262 int + var yyb262 bool + var yyhl262 bool = l >= 0 + yyj262++ + if yyhl262 { + yyb262 = yyj262 > l + } else { + yyb262 = r.CheckBreak() + } + if yyb262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ClaimName = "" + } else { + x.ClaimName = string(r.DecodeString()) + } + yyj262++ + if yyhl262 { + yyb262 = yyj262 > l + } else { + yyb262 = r.CheckBreak() + } + if yyb262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj262++ + if yyhl262 { + yyb262 = yyj262 > l + } else { + yyb262 = r.CheckBreak() + } + if yyb262 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj262-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym265 := z.EncBinary() + _ = yym265 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep266 := !z.EncBinary() + yy2arr266 := z.EncBasicHandle().StructToArray + var yyq266 [16]bool + _, _, _ = yysep266, yyq266, yy2arr266 + const yyr266 bool = false + yyq266[0] = x.GCEPersistentDisk != nil + yyq266[1] = x.AWSElasticBlockStore != nil + yyq266[2] = x.HostPath != nil + yyq266[3] = x.Glusterfs != nil + yyq266[4] = x.NFS != nil + yyq266[5] = x.RBD != nil + yyq266[6] = x.ISCSI != nil + yyq266[7] = x.Cinder != nil + yyq266[8] = x.CephFS != nil + yyq266[9] = x.FC != nil + yyq266[10] = x.Flocker != nil + yyq266[11] = x.FlexVolume != nil + yyq266[12] = x.AzureFile != nil + yyq266[13] = x.VsphereVolume != nil + yyq266[14] = x.Quobyte != nil + yyq266[15] = x.AzureDisk != nil + var yynn266 int + if yyr266 || yy2arr266 { + r.EncodeArrayStart(16) + } else { + yynn266 = 0 + for _, b := range yyq266 { + if b { + yynn266++ + } + } + r.EncodeMapStart(yynn266) + yynn266 = 0 + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[0] { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gcePersistentDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[1] { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("awsElasticBlockStore")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[2] { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[3] { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("glusterfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[4] { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[5] { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rbd")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[6] { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsi")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[7] { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cinder")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[8] { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cephfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[9] { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fc")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[10] { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flocker")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[11] { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flexVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[12] { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[13] { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("vsphereVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[14] { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("quobyte")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq266[15] { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq266[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } + } + if yyr266 || yy2arr266 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym283 := z.DecBinary() + _ = yym283 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct284 := r.ContainerType() + if yyct284 == codecSelferValueTypeMap1234 { + yyl284 := r.ReadMapStart() + if yyl284 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl284, d) + } + } else if yyct284 == codecSelferValueTypeArray1234 { + yyl284 := r.ReadArrayStart() + if yyl284 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl284, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys285Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys285Slc + var yyhl285 bool = l >= 0 + for yyj285 := 0; ; yyj285++ { + if yyhl285 { + if yyj285 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys285Slc = r.DecodeBytes(yys285Slc, true, true) + yys285 := string(yys285Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys285 { + case "gcePersistentDisk": + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + case "awsElasticBlockStore": + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + case "hostPath": + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + case "glusterfs": + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + case "nfs": + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + case "rbd": + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + case "iscsi": + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + case "cinder": + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + case "cephfs": + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + case "fc": + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + case "flocker": + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + case "flexVolume": + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + case "azureFile": + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + case "vsphereVolume": + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + case "quobyte": + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + case "azureDisk": + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys285) + } // end switch yys285 + } // end for yyj285 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj302 int + var yyb302 bool + var yyhl302 bool = l >= 0 + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + for { + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj302-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolume) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym319 := z.EncBinary() + _ = yym319 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep320 := !z.EncBinary() + yy2arr320 := z.EncBasicHandle().StructToArray + var yyq320 [5]bool + _, _, _ = yysep320, yyq320, yy2arr320 + const yyr320 bool = false + yyq320[0] = x.Kind != "" + yyq320[1] = x.APIVersion != "" + yyq320[2] = true + yyq320[3] = true + yyq320[4] = true + var yynn320 int + if yyr320 || yy2arr320 { + r.EncodeArrayStart(5) + } else { + yynn320 = 0 + for _, b := range yyq320 { + if b { + yynn320++ + } + } + r.EncodeMapStart(yynn320) + yynn320 = 0 + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[0] { + yym322 := z.EncBinary() + _ = yym322 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq320[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym323 := z.EncBinary() + _ = yym323 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[1] { + yym325 := z.EncBinary() + _ = yym325 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq320[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym326 := z.EncBinary() + _ = yym326 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[2] { + yy328 := &x.ObjectMeta + yy328.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq320[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy329 := &x.ObjectMeta + yy329.CodecEncodeSelf(e) + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[3] { + yy331 := &x.Spec + yy331.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq320[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy332 := &x.Spec + yy332.CodecEncodeSelf(e) + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq320[4] { + yy334 := &x.Status + yy334.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq320[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy335 := &x.Status + yy335.CodecEncodeSelf(e) + } + } + if yyr320 || yy2arr320 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolume) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym336 := z.DecBinary() + _ = yym336 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct337 := r.ContainerType() + if yyct337 == codecSelferValueTypeMap1234 { + yyl337 := r.ReadMapStart() + if yyl337 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl337, d) + } + } else if yyct337 == codecSelferValueTypeArray1234 { + yyl337 := r.ReadArrayStart() + if yyl337 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl337, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolume) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys338Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys338Slc + var yyhl338 bool = l >= 0 + for yyj338 := 0; ; yyj338++ { + if yyhl338 { + if yyj338 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys338Slc = r.DecodeBytes(yys338Slc, true, true) + yys338 := string(yys338Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys338 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv341 := &x.ObjectMeta + yyv341.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PersistentVolumeSpec{} + } else { + yyv342 := &x.Spec + yyv342.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = PersistentVolumeStatus{} + } else { + yyv343 := &x.Status + yyv343.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys338) + } // end switch yys338 + } // end for yyj338 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj344 int + var yyb344 bool + var yyhl344 bool = l >= 0 + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv347 := &x.ObjectMeta + yyv347.CodecDecodeSelf(d) + } + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PersistentVolumeSpec{} + } else { + yyv348 := &x.Spec + yyv348.CodecDecodeSelf(d) + } + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = PersistentVolumeStatus{} + } else { + yyv349 := &x.Status + yyv349.CodecDecodeSelf(d) + } + for { + yyj344++ + if yyhl344 { + yyb344 = yyj344 > l + } else { + yyb344 = r.CheckBreak() + } + if yyb344 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj344-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym350 := z.EncBinary() + _ = yym350 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep351 := !z.EncBinary() + yy2arr351 := z.EncBasicHandle().StructToArray + var yyq351 [20]bool + _, _, _ = yysep351, yyq351, yy2arr351 + const yyr351 bool = false + yyq351[0] = len(x.Capacity) != 0 + yyq351[1] = x.PersistentVolumeSource.GCEPersistentDisk != nil && x.GCEPersistentDisk != nil + yyq351[2] = x.PersistentVolumeSource.AWSElasticBlockStore != nil && x.AWSElasticBlockStore != nil + yyq351[3] = x.PersistentVolumeSource.HostPath != nil && x.HostPath != nil + yyq351[4] = x.PersistentVolumeSource.Glusterfs != nil && x.Glusterfs != nil + yyq351[5] = x.PersistentVolumeSource.NFS != nil && x.NFS != nil + yyq351[6] = x.PersistentVolumeSource.RBD != nil && x.RBD != nil + yyq351[7] = x.PersistentVolumeSource.ISCSI != nil && x.ISCSI != nil + yyq351[8] = x.PersistentVolumeSource.Cinder != nil && x.Cinder != nil + yyq351[9] = x.PersistentVolumeSource.CephFS != nil && x.CephFS != nil + yyq351[10] = x.PersistentVolumeSource.FC != nil && x.FC != nil + yyq351[11] = x.PersistentVolumeSource.Flocker != nil && x.Flocker != nil + yyq351[12] = x.PersistentVolumeSource.FlexVolume != nil && x.FlexVolume != nil + yyq351[13] = x.PersistentVolumeSource.AzureFile != nil && x.AzureFile != nil + yyq351[14] = x.PersistentVolumeSource.VsphereVolume != nil && x.VsphereVolume != nil + yyq351[15] = x.PersistentVolumeSource.Quobyte != nil && x.Quobyte != nil + yyq351[16] = x.PersistentVolumeSource.AzureDisk != nil && x.AzureDisk != nil + yyq351[17] = len(x.AccessModes) != 0 + yyq351[18] = x.ClaimRef != nil + yyq351[19] = x.PersistentVolumeReclaimPolicy != "" + var yynn351 int + if yyr351 || yy2arr351 { + r.EncodeArrayStart(20) + } else { + yynn351 = 0 + for _, b := range yyq351 { + if b { + yynn351++ + } + } + r.EncodeMapStart(yynn351) + yynn351 = 0 + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[0] { + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq351[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capacity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } + } + var yyn353 bool + if x.PersistentVolumeSource.GCEPersistentDisk == nil { + yyn353 = true + goto LABEL353 + } + LABEL353: + if yyr351 || yy2arr351 { + if yyn353 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[1] { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gcePersistentDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn353 { + r.EncodeNil() + } else { + if x.GCEPersistentDisk == nil { + r.EncodeNil() + } else { + x.GCEPersistentDisk.CodecEncodeSelf(e) + } + } + } + } + var yyn354 bool + if x.PersistentVolumeSource.AWSElasticBlockStore == nil { + yyn354 = true + goto LABEL354 + } + LABEL354: + if yyr351 || yy2arr351 { + if yyn354 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[2] { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("awsElasticBlockStore")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn354 { + r.EncodeNil() + } else { + if x.AWSElasticBlockStore == nil { + r.EncodeNil() + } else { + x.AWSElasticBlockStore.CodecEncodeSelf(e) + } + } + } + } + var yyn355 bool + if x.PersistentVolumeSource.HostPath == nil { + yyn355 = true + goto LABEL355 + } + LABEL355: + if yyr351 || yy2arr351 { + if yyn355 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[3] { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn355 { + r.EncodeNil() + } else { + if x.HostPath == nil { + r.EncodeNil() + } else { + x.HostPath.CodecEncodeSelf(e) + } + } + } + } + var yyn356 bool + if x.PersistentVolumeSource.Glusterfs == nil { + yyn356 = true + goto LABEL356 + } + LABEL356: + if yyr351 || yy2arr351 { + if yyn356 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[4] { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("glusterfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn356 { + r.EncodeNil() + } else { + if x.Glusterfs == nil { + r.EncodeNil() + } else { + x.Glusterfs.CodecEncodeSelf(e) + } + } + } + } + var yyn357 bool + if x.PersistentVolumeSource.NFS == nil { + yyn357 = true + goto LABEL357 + } + LABEL357: + if yyr351 || yy2arr351 { + if yyn357 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[5] { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn357 { + r.EncodeNil() + } else { + if x.NFS == nil { + r.EncodeNil() + } else { + x.NFS.CodecEncodeSelf(e) + } + } + } + } + var yyn358 bool + if x.PersistentVolumeSource.RBD == nil { + yyn358 = true + goto LABEL358 + } + LABEL358: + if yyr351 || yy2arr351 { + if yyn358 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[6] { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rbd")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn358 { + r.EncodeNil() + } else { + if x.RBD == nil { + r.EncodeNil() + } else { + x.RBD.CodecEncodeSelf(e) + } + } + } + } + var yyn359 bool + if x.PersistentVolumeSource.ISCSI == nil { + yyn359 = true + goto LABEL359 + } + LABEL359: + if yyr351 || yy2arr351 { + if yyn359 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[7] { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsi")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn359 { + r.EncodeNil() + } else { + if x.ISCSI == nil { + r.EncodeNil() + } else { + x.ISCSI.CodecEncodeSelf(e) + } + } + } + } + var yyn360 bool + if x.PersistentVolumeSource.Cinder == nil { + yyn360 = true + goto LABEL360 + } + LABEL360: + if yyr351 || yy2arr351 { + if yyn360 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[8] { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cinder")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn360 { + r.EncodeNil() + } else { + if x.Cinder == nil { + r.EncodeNil() + } else { + x.Cinder.CodecEncodeSelf(e) + } + } + } + } + var yyn361 bool + if x.PersistentVolumeSource.CephFS == nil { + yyn361 = true + goto LABEL361 + } + LABEL361: + if yyr351 || yy2arr351 { + if yyn361 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[9] { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cephfs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn361 { + r.EncodeNil() + } else { + if x.CephFS == nil { + r.EncodeNil() + } else { + x.CephFS.CodecEncodeSelf(e) + } + } + } + } + var yyn362 bool + if x.PersistentVolumeSource.FC == nil { + yyn362 = true + goto LABEL362 + } + LABEL362: + if yyr351 || yy2arr351 { + if yyn362 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[10] { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fc")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn362 { + r.EncodeNil() + } else { + if x.FC == nil { + r.EncodeNil() + } else { + x.FC.CodecEncodeSelf(e) + } + } + } + } + var yyn363 bool + if x.PersistentVolumeSource.Flocker == nil { + yyn363 = true + goto LABEL363 + } + LABEL363: + if yyr351 || yy2arr351 { + if yyn363 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[11] { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flocker")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn363 { + r.EncodeNil() + } else { + if x.Flocker == nil { + r.EncodeNil() + } else { + x.Flocker.CodecEncodeSelf(e) + } + } + } + } + var yyn364 bool + if x.PersistentVolumeSource.FlexVolume == nil { + yyn364 = true + goto LABEL364 + } + LABEL364: + if yyr351 || yy2arr351 { + if yyn364 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[12] { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("flexVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn364 { + r.EncodeNil() + } else { + if x.FlexVolume == nil { + r.EncodeNil() + } else { + x.FlexVolume.CodecEncodeSelf(e) + } + } + } + } + var yyn365 bool + if x.PersistentVolumeSource.AzureFile == nil { + yyn365 = true + goto LABEL365 + } + LABEL365: + if yyr351 || yy2arr351 { + if yyn365 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[13] { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn365 { + r.EncodeNil() + } else { + if x.AzureFile == nil { + r.EncodeNil() + } else { + x.AzureFile.CodecEncodeSelf(e) + } + } + } + } + var yyn366 bool + if x.PersistentVolumeSource.VsphereVolume == nil { + yyn366 = true + goto LABEL366 + } + LABEL366: + if yyr351 || yy2arr351 { + if yyn366 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[14] { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("vsphereVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn366 { + r.EncodeNil() + } else { + if x.VsphereVolume == nil { + r.EncodeNil() + } else { + x.VsphereVolume.CodecEncodeSelf(e) + } + } + } + } + var yyn367 bool + if x.PersistentVolumeSource.Quobyte == nil { + yyn367 = true + goto LABEL367 + } + LABEL367: + if yyr351 || yy2arr351 { + if yyn367 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[15] { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("quobyte")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn367 { + r.EncodeNil() + } else { + if x.Quobyte == nil { + r.EncodeNil() + } else { + x.Quobyte.CodecEncodeSelf(e) + } + } + } + } + var yyn368 bool + if x.PersistentVolumeSource.AzureDisk == nil { + yyn368 = true + goto LABEL368 + } + LABEL368: + if yyr351 || yy2arr351 { + if yyn368 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[16] { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq351[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("azureDisk")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn368 { + r.EncodeNil() + } else { + if x.AzureDisk == nil { + r.EncodeNil() + } else { + x.AzureDisk.CodecEncodeSelf(e) + } + } + } + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[17] { + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym370 := z.EncBinary() + _ = yym370 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq351[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("accessModes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym371 := z.EncBinary() + _ = yym371 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[18] { + if x.ClaimRef == nil { + r.EncodeNil() + } else { + x.ClaimRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq351[18] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("claimRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ClaimRef == nil { + r.EncodeNil() + } else { + x.ClaimRef.CodecEncodeSelf(e) + } + } + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq351[19] { + x.PersistentVolumeReclaimPolicy.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq351[19] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("persistentVolumeReclaimPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.PersistentVolumeReclaimPolicy.CodecEncodeSelf(e) + } + } + if yyr351 || yy2arr351 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym374 := z.DecBinary() + _ = yym374 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct375 := r.ContainerType() + if yyct375 == codecSelferValueTypeMap1234 { + yyl375 := r.ReadMapStart() + if yyl375 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl375, d) + } + } else if yyct375 == codecSelferValueTypeArray1234 { + yyl375 := r.ReadArrayStart() + if yyl375 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl375, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys376Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys376Slc + var yyhl376 bool = l >= 0 + for yyj376 := 0; ; yyj376++ { + if yyhl376 { + if yyj376 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys376Slc = r.DecodeBytes(yys376Slc, true, true) + yys376 := string(yys376Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys376 { + case "capacity": + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv377 := &x.Capacity + yyv377.CodecDecodeSelf(d) + } + case "gcePersistentDisk": + if x.PersistentVolumeSource.GCEPersistentDisk == nil { + x.PersistentVolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + case "awsElasticBlockStore": + if x.PersistentVolumeSource.AWSElasticBlockStore == nil { + x.PersistentVolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + case "hostPath": + if x.PersistentVolumeSource.HostPath == nil { + x.PersistentVolumeSource.HostPath = new(HostPathVolumeSource) + } + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + case "glusterfs": + if x.PersistentVolumeSource.Glusterfs == nil { + x.PersistentVolumeSource.Glusterfs = new(GlusterfsVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + case "nfs": + if x.PersistentVolumeSource.NFS == nil { + x.PersistentVolumeSource.NFS = new(NFSVolumeSource) + } + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + case "rbd": + if x.PersistentVolumeSource.RBD == nil { + x.PersistentVolumeSource.RBD = new(RBDVolumeSource) + } + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + case "iscsi": + if x.PersistentVolumeSource.ISCSI == nil { + x.PersistentVolumeSource.ISCSI = new(ISCSIVolumeSource) + } + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + case "cinder": + if x.PersistentVolumeSource.Cinder == nil { + x.PersistentVolumeSource.Cinder = new(CinderVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + case "cephfs": + if x.PersistentVolumeSource.CephFS == nil { + x.PersistentVolumeSource.CephFS = new(CephFSVolumeSource) + } + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + case "fc": + if x.PersistentVolumeSource.FC == nil { + x.PersistentVolumeSource.FC = new(FCVolumeSource) + } + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + case "flocker": + if x.PersistentVolumeSource.Flocker == nil { + x.PersistentVolumeSource.Flocker = new(FlockerVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + case "flexVolume": + if x.PersistentVolumeSource.FlexVolume == nil { + x.PersistentVolumeSource.FlexVolume = new(FlexVolumeSource) + } + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + case "azureFile": + if x.PersistentVolumeSource.AzureFile == nil { + x.PersistentVolumeSource.AzureFile = new(AzureFileVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + case "vsphereVolume": + if x.PersistentVolumeSource.VsphereVolume == nil { + x.PersistentVolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + case "quobyte": + if x.PersistentVolumeSource.Quobyte == nil { + x.PersistentVolumeSource.Quobyte = new(QuobyteVolumeSource) + } + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + case "azureDisk": + if x.PersistentVolumeSource.AzureDisk == nil { + x.PersistentVolumeSource.AzureDisk = new(AzureDiskVolumeSource) + } + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + case "accessModes": + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv394 := &x.AccessModes + yym395 := z.DecBinary() + _ = yym395 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv394), d) + } + } + case "claimRef": + if r.TryDecodeAsNil() { + if x.ClaimRef != nil { + x.ClaimRef = nil + } + } else { + if x.ClaimRef == nil { + x.ClaimRef = new(ObjectReference) + } + x.ClaimRef.CodecDecodeSelf(d) + } + case "persistentVolumeReclaimPolicy": + if r.TryDecodeAsNil() { + x.PersistentVolumeReclaimPolicy = "" + } else { + x.PersistentVolumeReclaimPolicy = PersistentVolumeReclaimPolicy(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys376) + } // end switch yys376 + } // end for yyj376 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj398 int + var yyb398 bool + var yyhl398 bool = l >= 0 + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv399 := &x.Capacity + yyv399.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.GCEPersistentDisk == nil { + x.PersistentVolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GCEPersistentDisk != nil { + x.GCEPersistentDisk = nil + } + } else { + if x.GCEPersistentDisk == nil { + x.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) + } + x.GCEPersistentDisk.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.AWSElasticBlockStore == nil { + x.PersistentVolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AWSElasticBlockStore != nil { + x.AWSElasticBlockStore = nil + } + } else { + if x.AWSElasticBlockStore == nil { + x.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) + } + x.AWSElasticBlockStore.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.HostPath == nil { + x.PersistentVolumeSource.HostPath = new(HostPathVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HostPath != nil { + x.HostPath = nil + } + } else { + if x.HostPath == nil { + x.HostPath = new(HostPathVolumeSource) + } + x.HostPath.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.Glusterfs == nil { + x.PersistentVolumeSource.Glusterfs = new(GlusterfsVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Glusterfs != nil { + x.Glusterfs = nil + } + } else { + if x.Glusterfs == nil { + x.Glusterfs = new(GlusterfsVolumeSource) + } + x.Glusterfs.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.NFS == nil { + x.PersistentVolumeSource.NFS = new(NFSVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NFS != nil { + x.NFS = nil + } + } else { + if x.NFS == nil { + x.NFS = new(NFSVolumeSource) + } + x.NFS.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.RBD == nil { + x.PersistentVolumeSource.RBD = new(RBDVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RBD != nil { + x.RBD = nil + } + } else { + if x.RBD == nil { + x.RBD = new(RBDVolumeSource) + } + x.RBD.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.ISCSI == nil { + x.PersistentVolumeSource.ISCSI = new(ISCSIVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ISCSI != nil { + x.ISCSI = nil + } + } else { + if x.ISCSI == nil { + x.ISCSI = new(ISCSIVolumeSource) + } + x.ISCSI.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.Cinder == nil { + x.PersistentVolumeSource.Cinder = new(CinderVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Cinder != nil { + x.Cinder = nil + } + } else { + if x.Cinder == nil { + x.Cinder = new(CinderVolumeSource) + } + x.Cinder.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.CephFS == nil { + x.PersistentVolumeSource.CephFS = new(CephFSVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CephFS != nil { + x.CephFS = nil + } + } else { + if x.CephFS == nil { + x.CephFS = new(CephFSVolumeSource) + } + x.CephFS.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.FC == nil { + x.PersistentVolumeSource.FC = new(FCVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FC != nil { + x.FC = nil + } + } else { + if x.FC == nil { + x.FC = new(FCVolumeSource) + } + x.FC.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.Flocker == nil { + x.PersistentVolumeSource.Flocker = new(FlockerVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Flocker != nil { + x.Flocker = nil + } + } else { + if x.Flocker == nil { + x.Flocker = new(FlockerVolumeSource) + } + x.Flocker.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.FlexVolume == nil { + x.PersistentVolumeSource.FlexVolume = new(FlexVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FlexVolume != nil { + x.FlexVolume = nil + } + } else { + if x.FlexVolume == nil { + x.FlexVolume = new(FlexVolumeSource) + } + x.FlexVolume.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.AzureFile == nil { + x.PersistentVolumeSource.AzureFile = new(AzureFileVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureFile != nil { + x.AzureFile = nil + } + } else { + if x.AzureFile == nil { + x.AzureFile = new(AzureFileVolumeSource) + } + x.AzureFile.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.VsphereVolume == nil { + x.PersistentVolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.VsphereVolume != nil { + x.VsphereVolume = nil + } + } else { + if x.VsphereVolume == nil { + x.VsphereVolume = new(VsphereVirtualDiskVolumeSource) + } + x.VsphereVolume.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.Quobyte == nil { + x.PersistentVolumeSource.Quobyte = new(QuobyteVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Quobyte != nil { + x.Quobyte = nil + } + } else { + if x.Quobyte == nil { + x.Quobyte = new(QuobyteVolumeSource) + } + x.Quobyte.CodecDecodeSelf(d) + } + if x.PersistentVolumeSource.AzureDisk == nil { + x.PersistentVolumeSource.AzureDisk = new(AzureDiskVolumeSource) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.AzureDisk != nil { + x.AzureDisk = nil + } + } else { + if x.AzureDisk == nil { + x.AzureDisk = new(AzureDiskVolumeSource) + } + x.AzureDisk.CodecDecodeSelf(d) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv416 := &x.AccessModes + yym417 := z.DecBinary() + _ = yym417 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv416), d) + } + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ClaimRef != nil { + x.ClaimRef = nil + } + } else { + if x.ClaimRef == nil { + x.ClaimRef = new(ObjectReference) + } + x.ClaimRef.CodecDecodeSelf(d) + } + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PersistentVolumeReclaimPolicy = "" + } else { + x.PersistentVolumeReclaimPolicy = PersistentVolumeReclaimPolicy(r.DecodeString()) + } + for { + yyj398++ + if yyhl398 { + yyb398 = yyj398 > l + } else { + yyb398 = r.CheckBreak() + } + if yyb398 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj398-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PersistentVolumeReclaimPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym420 := z.EncBinary() + _ = yym420 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PersistentVolumeReclaimPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym421 := z.DecBinary() + _ = yym421 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *PersistentVolumeStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym422 := z.EncBinary() + _ = yym422 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep423 := !z.EncBinary() + yy2arr423 := z.EncBasicHandle().StructToArray + var yyq423 [3]bool + _, _, _ = yysep423, yyq423, yy2arr423 + const yyr423 bool = false + yyq423[0] = x.Phase != "" + yyq423[1] = x.Message != "" + yyq423[2] = x.Reason != "" + var yynn423 int + if yyr423 || yy2arr423 { + r.EncodeArrayStart(3) + } else { + yynn423 = 0 + for _, b := range yyq423 { + if b { + yynn423++ + } + } + r.EncodeMapStart(yynn423) + yynn423 = 0 + } + if yyr423 || yy2arr423 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq423[0] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq423[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr423 || yy2arr423 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq423[1] { + yym426 := z.EncBinary() + _ = yym426 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq423[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym427 := z.EncBinary() + _ = yym427 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr423 || yy2arr423 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq423[2] { + yym429 := z.EncBinary() + _ = yym429 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq423[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym430 := z.EncBinary() + _ = yym430 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr423 || yy2arr423 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym431 := z.DecBinary() + _ = yym431 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct432 := r.ContainerType() + if yyct432 == codecSelferValueTypeMap1234 { + yyl432 := r.ReadMapStart() + if yyl432 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl432, d) + } + } else if yyct432 == codecSelferValueTypeArray1234 { + yyl432 := r.ReadArrayStart() + if yyl432 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl432, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys433Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys433Slc + var yyhl433 bool = l >= 0 + for yyj433 := 0; ; yyj433++ { + if yyhl433 { + if yyj433 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys433Slc = r.DecodeBytes(yys433Slc, true, true) + yys433 := string(yys433Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys433 { + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PersistentVolumePhase(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys433) + } // end switch yys433 + } // end for yyj433 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj437 int + var yyb437 bool + var yyhl437 bool = l >= 0 + yyj437++ + if yyhl437 { + yyb437 = yyj437 > l + } else { + yyb437 = r.CheckBreak() + } + if yyb437 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PersistentVolumePhase(r.DecodeString()) + } + yyj437++ + if yyhl437 { + yyb437 = yyj437 > l + } else { + yyb437 = r.CheckBreak() + } + if yyb437 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj437++ + if yyhl437 { + yyb437 = yyj437 > l + } else { + yyb437 = r.CheckBreak() + } + if yyb437 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + for { + yyj437++ + if yyhl437 { + yyb437 = yyj437 > l + } else { + yyb437 = r.CheckBreak() + } + if yyb437 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj437-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym441 := z.EncBinary() + _ = yym441 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep442 := !z.EncBinary() + yy2arr442 := z.EncBasicHandle().StructToArray + var yyq442 [4]bool + _, _, _ = yysep442, yyq442, yy2arr442 + const yyr442 bool = false + yyq442[0] = x.Kind != "" + yyq442[1] = x.APIVersion != "" + yyq442[2] = true + var yynn442 int + if yyr442 || yy2arr442 { + r.EncodeArrayStart(4) + } else { + yynn442 = 1 + for _, b := range yyq442 { + if b { + yynn442++ + } + } + r.EncodeMapStart(yynn442) + yynn442 = 0 + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[0] { + yym444 := z.EncBinary() + _ = yym444 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq442[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym445 := z.EncBinary() + _ = yym445 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[1] { + yym447 := z.EncBinary() + _ = yym447 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq442[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym448 := z.EncBinary() + _ = yym448 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[2] { + yy450 := &x.ListMeta + yym451 := z.EncBinary() + _ = yym451 + if false { + } else if z.HasExtensions() && z.EncExt(yy450) { + } else { + z.EncFallback(yy450) + } + } else { + r.EncodeNil() + } + } else { + if yyq442[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy452 := &x.ListMeta + yym453 := z.EncBinary() + _ = yym453 + if false { + } else if z.HasExtensions() && z.EncExt(yy452) { + } else { + z.EncFallback(yy452) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym455 := z.EncBinary() + _ = yym455 + if false { + } else { + h.encSlicePersistentVolume(([]PersistentVolume)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym456 := z.EncBinary() + _ = yym456 + if false { + } else { + h.encSlicePersistentVolume(([]PersistentVolume)(x.Items), e) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym457 := z.DecBinary() + _ = yym457 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct458 := r.ContainerType() + if yyct458 == codecSelferValueTypeMap1234 { + yyl458 := r.ReadMapStart() + if yyl458 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl458, d) + } + } else if yyct458 == codecSelferValueTypeArray1234 { + yyl458 := r.ReadArrayStart() + if yyl458 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl458, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys459Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys459Slc + var yyhl459 bool = l >= 0 + for yyj459 := 0; ; yyj459++ { + if yyhl459 { + if yyj459 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys459Slc = r.DecodeBytes(yys459Slc, true, true) + yys459 := string(yys459Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys459 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv462 := &x.ListMeta + yym463 := z.DecBinary() + _ = yym463 + if false { + } else if z.HasExtensions() && z.DecExt(yyv462) { + } else { + z.DecFallback(yyv462, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv464 := &x.Items + yym465 := z.DecBinary() + _ = yym465 + if false { + } else { + h.decSlicePersistentVolume((*[]PersistentVolume)(yyv464), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys459) + } // end switch yys459 + } // end for yyj459 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj466 int + var yyb466 bool + var yyhl466 bool = l >= 0 + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv469 := &x.ListMeta + yym470 := z.DecBinary() + _ = yym470 + if false { + } else if z.HasExtensions() && z.DecExt(yyv469) { + } else { + z.DecFallback(yyv469, false) + } + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv471 := &x.Items + yym472 := z.DecBinary() + _ = yym472 + if false { + } else { + h.decSlicePersistentVolume((*[]PersistentVolume)(yyv471), d) + } + } + for { + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj466-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaim) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym473 := z.EncBinary() + _ = yym473 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep474 := !z.EncBinary() + yy2arr474 := z.EncBasicHandle().StructToArray + var yyq474 [5]bool + _, _, _ = yysep474, yyq474, yy2arr474 + const yyr474 bool = false + yyq474[0] = x.Kind != "" + yyq474[1] = x.APIVersion != "" + yyq474[2] = true + yyq474[3] = true + yyq474[4] = true + var yynn474 int + if yyr474 || yy2arr474 { + r.EncodeArrayStart(5) + } else { + yynn474 = 0 + for _, b := range yyq474 { + if b { + yynn474++ + } + } + r.EncodeMapStart(yynn474) + yynn474 = 0 + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[0] { + yym476 := z.EncBinary() + _ = yym476 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq474[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym477 := z.EncBinary() + _ = yym477 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[1] { + yym479 := z.EncBinary() + _ = yym479 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq474[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym480 := z.EncBinary() + _ = yym480 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[2] { + yy482 := &x.ObjectMeta + yy482.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq474[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy483 := &x.ObjectMeta + yy483.CodecEncodeSelf(e) + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[3] { + yy485 := &x.Spec + yy485.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq474[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy486 := &x.Spec + yy486.CodecEncodeSelf(e) + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[4] { + yy488 := &x.Status + yy488.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq474[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy489 := &x.Status + yy489.CodecEncodeSelf(e) + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaim) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym490 := z.DecBinary() + _ = yym490 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct491 := r.ContainerType() + if yyct491 == codecSelferValueTypeMap1234 { + yyl491 := r.ReadMapStart() + if yyl491 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl491, d) + } + } else if yyct491 == codecSelferValueTypeArray1234 { + yyl491 := r.ReadArrayStart() + if yyl491 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl491, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaim) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys492Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys492Slc + var yyhl492 bool = l >= 0 + for yyj492 := 0; ; yyj492++ { + if yyhl492 { + if yyj492 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys492Slc = r.DecodeBytes(yys492Slc, true, true) + yys492 := string(yys492Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys492 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv495 := &x.ObjectMeta + yyv495.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PersistentVolumeClaimSpec{} + } else { + yyv496 := &x.Spec + yyv496.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = PersistentVolumeClaimStatus{} + } else { + yyv497 := &x.Status + yyv497.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys492) + } // end switch yys492 + } // end for yyj492 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaim) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj498 int + var yyb498 bool + var yyhl498 bool = l >= 0 + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv501 := &x.ObjectMeta + yyv501.CodecDecodeSelf(d) + } + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PersistentVolumeClaimSpec{} + } else { + yyv502 := &x.Spec + yyv502.CodecDecodeSelf(d) + } + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = PersistentVolumeClaimStatus{} + } else { + yyv503 := &x.Status + yyv503.CodecDecodeSelf(d) + } + for { + yyj498++ + if yyhl498 { + yyb498 = yyj498 > l + } else { + yyb498 = r.CheckBreak() + } + if yyb498 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj498-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaimList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym504 := z.EncBinary() + _ = yym504 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep505 := !z.EncBinary() + yy2arr505 := z.EncBasicHandle().StructToArray + var yyq505 [4]bool + _, _, _ = yysep505, yyq505, yy2arr505 + const yyr505 bool = false + yyq505[0] = x.Kind != "" + yyq505[1] = x.APIVersion != "" + yyq505[2] = true + var yynn505 int + if yyr505 || yy2arr505 { + r.EncodeArrayStart(4) + } else { + yynn505 = 1 + for _, b := range yyq505 { + if b { + yynn505++ + } + } + r.EncodeMapStart(yynn505) + yynn505 = 0 + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq505[0] { + yym507 := z.EncBinary() + _ = yym507 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq505[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym508 := z.EncBinary() + _ = yym508 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq505[1] { + yym510 := z.EncBinary() + _ = yym510 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq505[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym511 := z.EncBinary() + _ = yym511 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq505[2] { + yy513 := &x.ListMeta + yym514 := z.EncBinary() + _ = yym514 + if false { + } else if z.HasExtensions() && z.EncExt(yy513) { + } else { + z.EncFallback(yy513) + } + } else { + r.EncodeNil() + } + } else { + if yyq505[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy515 := &x.ListMeta + yym516 := z.EncBinary() + _ = yym516 + if false { + } else if z.HasExtensions() && z.EncExt(yy515) { + } else { + z.EncFallback(yy515) + } + } + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym518 := z.EncBinary() + _ = yym518 + if false { + } else { + h.encSlicePersistentVolumeClaim(([]PersistentVolumeClaim)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym519 := z.EncBinary() + _ = yym519 + if false { + } else { + h.encSlicePersistentVolumeClaim(([]PersistentVolumeClaim)(x.Items), e) + } + } + } + if yyr505 || yy2arr505 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaimList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym520 := z.DecBinary() + _ = yym520 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct521 := r.ContainerType() + if yyct521 == codecSelferValueTypeMap1234 { + yyl521 := r.ReadMapStart() + if yyl521 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl521, d) + } + } else if yyct521 == codecSelferValueTypeArray1234 { + yyl521 := r.ReadArrayStart() + if yyl521 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl521, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaimList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys522Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys522Slc + var yyhl522 bool = l >= 0 + for yyj522 := 0; ; yyj522++ { + if yyhl522 { + if yyj522 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys522Slc = r.DecodeBytes(yys522Slc, true, true) + yys522 := string(yys522Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys522 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv525 := &x.ListMeta + yym526 := z.DecBinary() + _ = yym526 + if false { + } else if z.HasExtensions() && z.DecExt(yyv525) { + } else { + z.DecFallback(yyv525, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv527 := &x.Items + yym528 := z.DecBinary() + _ = yym528 + if false { + } else { + h.decSlicePersistentVolumeClaim((*[]PersistentVolumeClaim)(yyv527), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys522) + } // end switch yys522 + } // end for yyj522 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaimList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj529 int + var yyb529 bool + var yyhl529 bool = l >= 0 + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv532 := &x.ListMeta + yym533 := z.DecBinary() + _ = yym533 + if false { + } else if z.HasExtensions() && z.DecExt(yyv532) { + } else { + z.DecFallback(yyv532, false) + } + } + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv534 := &x.Items + yym535 := z.DecBinary() + _ = yym535 + if false { + } else { + h.decSlicePersistentVolumeClaim((*[]PersistentVolumeClaim)(yyv534), d) + } + } + for { + yyj529++ + if yyhl529 { + yyb529 = yyj529 > l + } else { + yyb529 = r.CheckBreak() + } + if yyb529 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj529-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaimSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym536 := z.EncBinary() + _ = yym536 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep537 := !z.EncBinary() + yy2arr537 := z.EncBasicHandle().StructToArray + var yyq537 [4]bool + _, _, _ = yysep537, yyq537, yy2arr537 + const yyr537 bool = false + yyq537[0] = len(x.AccessModes) != 0 + yyq537[1] = x.Selector != nil + yyq537[2] = true + yyq537[3] = x.VolumeName != "" + var yynn537 int + if yyr537 || yy2arr537 { + r.EncodeArrayStart(4) + } else { + yynn537 = 0 + for _, b := range yyq537 { + if b { + yynn537++ + } + } + r.EncodeMapStart(yynn537) + yynn537 = 0 + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq537[0] { + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym539 := z.EncBinary() + _ = yym539 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq537[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("accessModes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym540 := z.EncBinary() + _ = yym540 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq537[1] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym542 := z.EncBinary() + _ = yym542 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq537[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym543 := z.EncBinary() + _ = yym543 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq537[2] { + yy545 := &x.Resources + yy545.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq537[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resources")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy546 := &x.Resources + yy546.CodecEncodeSelf(e) + } + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq537[3] { + yym548 := z.EncBinary() + _ = yym548 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq537[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym549 := z.EncBinary() + _ = yym549 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeName)) + } + } + } + if yyr537 || yy2arr537 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaimSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym550 := z.DecBinary() + _ = yym550 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct551 := r.ContainerType() + if yyct551 == codecSelferValueTypeMap1234 { + yyl551 := r.ReadMapStart() + if yyl551 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl551, d) + } + } else if yyct551 == codecSelferValueTypeArray1234 { + yyl551 := r.ReadArrayStart() + if yyl551 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl551, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaimSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys552Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys552Slc + var yyhl552 bool = l >= 0 + for yyj552 := 0; ; yyj552++ { + if yyhl552 { + if yyj552 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys552Slc = r.DecodeBytes(yys552Slc, true, true) + yys552 := string(yys552Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys552 { + case "accessModes": + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv553 := &x.AccessModes + yym554 := z.DecBinary() + _ = yym554 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv553), d) + } + } + case "selector": + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg2_unversioned.LabelSelector) + } + yym556 := z.DecBinary() + _ = yym556 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + case "resources": + if r.TryDecodeAsNil() { + x.Resources = ResourceRequirements{} + } else { + yyv557 := &x.Resources + yyv557.CodecDecodeSelf(d) + } + case "volumeName": + if r.TryDecodeAsNil() { + x.VolumeName = "" + } else { + x.VolumeName = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys552) + } // end switch yys552 + } // end for yyj552 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaimSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj559 int + var yyb559 bool + var yyhl559 bool = l >= 0 + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv560 := &x.AccessModes + yym561 := z.DecBinary() + _ = yym561 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv560), d) + } + } + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg2_unversioned.LabelSelector) + } + yym563 := z.DecBinary() + _ = yym563 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Resources = ResourceRequirements{} + } else { + yyv564 := &x.Resources + yyv564.CodecDecodeSelf(d) + } + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeName = "" + } else { + x.VolumeName = string(r.DecodeString()) + } + for { + yyj559++ + if yyhl559 { + yyb559 = yyj559 > l + } else { + yyb559 = r.CheckBreak() + } + if yyb559 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj559-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PersistentVolumeClaimStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym566 := z.EncBinary() + _ = yym566 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep567 := !z.EncBinary() + yy2arr567 := z.EncBasicHandle().StructToArray + var yyq567 [3]bool + _, _, _ = yysep567, yyq567, yy2arr567 + const yyr567 bool = false + yyq567[0] = x.Phase != "" + yyq567[1] = len(x.AccessModes) != 0 + yyq567[2] = len(x.Capacity) != 0 + var yynn567 int + if yyr567 || yy2arr567 { + r.EncodeArrayStart(3) + } else { + yynn567 = 0 + for _, b := range yyq567 { + if b { + yynn567++ + } + } + r.EncodeMapStart(yynn567) + yynn567 = 0 + } + if yyr567 || yy2arr567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq567[0] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq567[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr567 || yy2arr567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq567[1] { + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym570 := z.EncBinary() + _ = yym570 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq567[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("accessModes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AccessModes == nil { + r.EncodeNil() + } else { + yym571 := z.EncBinary() + _ = yym571 + if false { + } else { + h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) + } + } + } + } + if yyr567 || yy2arr567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq567[2] { + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq567[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capacity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } + } + if yyr567 || yy2arr567 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PersistentVolumeClaimStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym573 := z.DecBinary() + _ = yym573 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct574 := r.ContainerType() + if yyct574 == codecSelferValueTypeMap1234 { + yyl574 := r.ReadMapStart() + if yyl574 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl574, d) + } + } else if yyct574 == codecSelferValueTypeArray1234 { + yyl574 := r.ReadArrayStart() + if yyl574 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl574, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PersistentVolumeClaimStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys575Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys575Slc + var yyhl575 bool = l >= 0 + for yyj575 := 0; ; yyj575++ { + if yyhl575 { + if yyj575 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys575Slc = r.DecodeBytes(yys575Slc, true, true) + yys575 := string(yys575Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys575 { + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PersistentVolumeClaimPhase(r.DecodeString()) + } + case "accessModes": + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv577 := &x.AccessModes + yym578 := z.DecBinary() + _ = yym578 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv577), d) + } + } + case "capacity": + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv579 := &x.Capacity + yyv579.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys575) + } // end switch yys575 + } // end for yyj575 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PersistentVolumeClaimStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj580 int + var yyb580 bool + var yyhl580 bool = l >= 0 + yyj580++ + if yyhl580 { + yyb580 = yyj580 > l + } else { + yyb580 = r.CheckBreak() + } + if yyb580 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PersistentVolumeClaimPhase(r.DecodeString()) + } + yyj580++ + if yyhl580 { + yyb580 = yyj580 > l + } else { + yyb580 = r.CheckBreak() + } + if yyb580 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.AccessModes = nil + } else { + yyv582 := &x.AccessModes + yym583 := z.DecBinary() + _ = yym583 + if false { + } else { + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv582), d) + } + } + yyj580++ + if yyhl580 { + yyb580 = yyj580 > l + } else { + yyb580 = r.CheckBreak() + } + if yyb580 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv584 := &x.Capacity + yyv584.CodecDecodeSelf(d) + } + for { + yyj580++ + if yyhl580 { + yyb580 = yyj580 > l + } else { + yyb580 = r.CheckBreak() + } + if yyb580 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj580-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PersistentVolumeAccessMode) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym585 := z.EncBinary() + _ = yym585 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PersistentVolumeAccessMode) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym586 := z.DecBinary() + _ = yym586 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x PersistentVolumePhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym587 := z.EncBinary() + _ = yym587 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PersistentVolumePhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym588 := z.DecBinary() + _ = yym588 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x PersistentVolumeClaimPhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym589 := z.EncBinary() + _ = yym589 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PersistentVolumeClaimPhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym590 := z.DecBinary() + _ = yym590 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *HostPathVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym591 := z.EncBinary() + _ = yym591 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep592 := !z.EncBinary() + yy2arr592 := z.EncBasicHandle().StructToArray + var yyq592 [1]bool + _, _, _ = yysep592, yyq592, yy2arr592 + const yyr592 bool = false + var yynn592 int + if yyr592 || yy2arr592 { + r.EncodeArrayStart(1) + } else { + yynn592 = 1 + for _, b := range yyq592 { + if b { + yynn592++ + } + } + r.EncodeMapStart(yynn592) + yynn592 = 0 + } + if yyr592 || yy2arr592 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym594 := z.EncBinary() + _ = yym594 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym595 := z.EncBinary() + _ = yym595 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr592 || yy2arr592 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HostPathVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym596 := z.DecBinary() + _ = yym596 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct597 := r.ContainerType() + if yyct597 == codecSelferValueTypeMap1234 { + yyl597 := r.ReadMapStart() + if yyl597 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl597, d) + } + } else if yyct597 == codecSelferValueTypeArray1234 { + yyl597 := r.ReadArrayStart() + if yyl597 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl597, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HostPathVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys598Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys598Slc + var yyhl598 bool = l >= 0 + for yyj598 := 0; ; yyj598++ { + if yyhl598 { + if yyj598 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys598Slc = r.DecodeBytes(yys598Slc, true, true) + yys598 := string(yys598Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys598 { + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys598) + } // end switch yys598 + } // end for yyj598 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HostPathVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj600 int + var yyb600 bool + var yyhl600 bool = l >= 0 + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + for { + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj600-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EmptyDirVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym602 := z.EncBinary() + _ = yym602 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep603 := !z.EncBinary() + yy2arr603 := z.EncBasicHandle().StructToArray + var yyq603 [1]bool + _, _, _ = yysep603, yyq603, yy2arr603 + const yyr603 bool = false + yyq603[0] = x.Medium != "" + var yynn603 int + if yyr603 || yy2arr603 { + r.EncodeArrayStart(1) + } else { + yynn603 = 0 + for _, b := range yyq603 { + if b { + yynn603++ + } + } + r.EncodeMapStart(yynn603) + yynn603 = 0 + } + if yyr603 || yy2arr603 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq603[0] { + x.Medium.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq603[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("medium")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Medium.CodecEncodeSelf(e) + } + } + if yyr603 || yy2arr603 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EmptyDirVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym605 := z.DecBinary() + _ = yym605 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct606 := r.ContainerType() + if yyct606 == codecSelferValueTypeMap1234 { + yyl606 := r.ReadMapStart() + if yyl606 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl606, d) + } + } else if yyct606 == codecSelferValueTypeArray1234 { + yyl606 := r.ReadArrayStart() + if yyl606 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl606, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EmptyDirVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys607Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys607Slc + var yyhl607 bool = l >= 0 + for yyj607 := 0; ; yyj607++ { + if yyhl607 { + if yyj607 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys607Slc = r.DecodeBytes(yys607Slc, true, true) + yys607 := string(yys607Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys607 { + case "medium": + if r.TryDecodeAsNil() { + x.Medium = "" + } else { + x.Medium = StorageMedium(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys607) + } // end switch yys607 + } // end for yyj607 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EmptyDirVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj609 int + var yyb609 bool + var yyhl609 bool = l >= 0 + yyj609++ + if yyhl609 { + yyb609 = yyj609 > l + } else { + yyb609 = r.CheckBreak() + } + if yyb609 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Medium = "" + } else { + x.Medium = StorageMedium(r.DecodeString()) + } + for { + yyj609++ + if yyhl609 { + yyb609 = yyj609 > l + } else { + yyb609 = r.CheckBreak() + } + if yyb609 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj609-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *GlusterfsVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym611 := z.EncBinary() + _ = yym611 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep612 := !z.EncBinary() + yy2arr612 := z.EncBasicHandle().StructToArray + var yyq612 [3]bool + _, _, _ = yysep612, yyq612, yy2arr612 + const yyr612 bool = false + yyq612[2] = x.ReadOnly != false + var yynn612 int + if yyr612 || yy2arr612 { + r.EncodeArrayStart(3) + } else { + yynn612 = 2 + for _, b := range yyq612 { + if b { + yynn612++ + } + } + r.EncodeMapStart(yynn612) + yynn612 = 0 + } + if yyr612 || yy2arr612 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym614 := z.EncBinary() + _ = yym614 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.EndpointsName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("endpoints")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym615 := z.EncBinary() + _ = yym615 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.EndpointsName)) + } + } + if yyr612 || yy2arr612 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym617 := z.EncBinary() + _ = yym617 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym618 := z.EncBinary() + _ = yym618 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr612 || yy2arr612 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq612[2] { + yym620 := z.EncBinary() + _ = yym620 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq612[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym621 := z.EncBinary() + _ = yym621 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr612 || yy2arr612 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *GlusterfsVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym622 := z.DecBinary() + _ = yym622 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct623 := r.ContainerType() + if yyct623 == codecSelferValueTypeMap1234 { + yyl623 := r.ReadMapStart() + if yyl623 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl623, d) + } + } else if yyct623 == codecSelferValueTypeArray1234 { + yyl623 := r.ReadArrayStart() + if yyl623 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl623, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *GlusterfsVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys624Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys624Slc + var yyhl624 bool = l >= 0 + for yyj624 := 0; ; yyj624++ { + if yyhl624 { + if yyj624 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys624Slc = r.DecodeBytes(yys624Slc, true, true) + yys624 := string(yys624Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys624 { + case "endpoints": + if r.TryDecodeAsNil() { + x.EndpointsName = "" + } else { + x.EndpointsName = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys624) + } // end switch yys624 + } // end for yyj624 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *GlusterfsVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj628 int + var yyb628 bool + var yyhl628 bool = l >= 0 + yyj628++ + if yyhl628 { + yyb628 = yyj628 > l + } else { + yyb628 = r.CheckBreak() + } + if yyb628 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.EndpointsName = "" + } else { + x.EndpointsName = string(r.DecodeString()) + } + yyj628++ + if yyhl628 { + yyb628 = yyj628 > l + } else { + yyb628 = r.CheckBreak() + } + if yyb628 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj628++ + if yyhl628 { + yyb628 = yyj628 > l + } else { + yyb628 = r.CheckBreak() + } + if yyb628 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj628++ + if yyhl628 { + yyb628 = yyj628 > l + } else { + yyb628 = r.CheckBreak() + } + if yyb628 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj628-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *RBDVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym632 := z.EncBinary() + _ = yym632 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep633 := !z.EncBinary() + yy2arr633 := z.EncBasicHandle().StructToArray + var yyq633 [8]bool + _, _, _ = yysep633, yyq633, yy2arr633 + const yyr633 bool = false + yyq633[2] = x.FSType != "" + yyq633[3] = x.RBDPool != "" + yyq633[4] = x.RadosUser != "" + yyq633[5] = x.Keyring != "" + yyq633[6] = x.SecretRef != nil + yyq633[7] = x.ReadOnly != false + var yynn633 int + if yyr633 || yy2arr633 { + r.EncodeArrayStart(8) + } else { + yynn633 = 2 + for _, b := range yyq633 { + if b { + yynn633++ + } + } + r.EncodeMapStart(yynn633) + yynn633 = 0 + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.CephMonitors == nil { + r.EncodeNil() + } else { + yym635 := z.EncBinary() + _ = yym635 + if false { + } else { + z.F.EncSliceStringV(x.CephMonitors, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("monitors")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CephMonitors == nil { + r.EncodeNil() + } else { + yym636 := z.EncBinary() + _ = yym636 + if false { + } else { + z.F.EncSliceStringV(x.CephMonitors, false, e) + } + } + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym638 := z.EncBinary() + _ = yym638 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RBDImage)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("image")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym639 := z.EncBinary() + _ = yym639 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RBDImage)) + } + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq633[2] { + yym641 := z.EncBinary() + _ = yym641 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq633[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym642 := z.EncBinary() + _ = yym642 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq633[3] { + yym644 := z.EncBinary() + _ = yym644 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RBDPool)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq633[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("pool")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym645 := z.EncBinary() + _ = yym645 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RBDPool)) + } + } + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq633[4] { + yym647 := z.EncBinary() + _ = yym647 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RadosUser)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq633[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym648 := z.EncBinary() + _ = yym648 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.RadosUser)) + } + } + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq633[5] { + yym650 := z.EncBinary() + _ = yym650 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Keyring)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq633[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("keyring")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym651 := z.EncBinary() + _ = yym651 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Keyring)) + } + } + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq633[6] { + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq633[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq633[7] { + yym654 := z.EncBinary() + _ = yym654 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq633[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym655 := z.EncBinary() + _ = yym655 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr633 || yy2arr633 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *RBDVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym656 := z.DecBinary() + _ = yym656 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct657 := r.ContainerType() + if yyct657 == codecSelferValueTypeMap1234 { + yyl657 := r.ReadMapStart() + if yyl657 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl657, d) + } + } else if yyct657 == codecSelferValueTypeArray1234 { + yyl657 := r.ReadArrayStart() + if yyl657 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl657, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *RBDVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys658Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys658Slc + var yyhl658 bool = l >= 0 + for yyj658 := 0; ; yyj658++ { + if yyhl658 { + if yyj658 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys658Slc = r.DecodeBytes(yys658Slc, true, true) + yys658 := string(yys658Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys658 { + case "monitors": + if r.TryDecodeAsNil() { + x.CephMonitors = nil + } else { + yyv659 := &x.CephMonitors + yym660 := z.DecBinary() + _ = yym660 + if false { + } else { + z.F.DecSliceStringX(yyv659, false, d) + } + } + case "image": + if r.TryDecodeAsNil() { + x.RBDImage = "" + } else { + x.RBDImage = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "pool": + if r.TryDecodeAsNil() { + x.RBDPool = "" + } else { + x.RBDPool = string(r.DecodeString()) + } + case "user": + if r.TryDecodeAsNil() { + x.RadosUser = "" + } else { + x.RadosUser = string(r.DecodeString()) + } + case "keyring": + if r.TryDecodeAsNil() { + x.Keyring = "" + } else { + x.Keyring = string(r.DecodeString()) + } + case "secretRef": + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys658) + } // end switch yys658 + } // end for yyj658 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *RBDVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj668 int + var yyb668 bool + var yyhl668 bool = l >= 0 + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CephMonitors = nil + } else { + yyv669 := &x.CephMonitors + yym670 := z.DecBinary() + _ = yym670 + if false { + } else { + z.F.DecSliceStringX(yyv669, false, d) + } + } + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RBDImage = "" + } else { + x.RBDImage = string(r.DecodeString()) + } + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RBDPool = "" + } else { + x.RBDPool = string(r.DecodeString()) + } + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RadosUser = "" + } else { + x.RadosUser = string(r.DecodeString()) + } + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Keyring = "" + } else { + x.Keyring = string(r.DecodeString()) + } + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj668++ + if yyhl668 { + yyb668 = yyj668 > l + } else { + yyb668 = r.CheckBreak() + } + if yyb668 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj668-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CinderVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym678 := z.EncBinary() + _ = yym678 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep679 := !z.EncBinary() + yy2arr679 := z.EncBasicHandle().StructToArray + var yyq679 [3]bool + _, _, _ = yysep679, yyq679, yy2arr679 + const yyr679 bool = false + yyq679[1] = x.FSType != "" + yyq679[2] = x.ReadOnly != false + var yynn679 int + if yyr679 || yy2arr679 { + r.EncodeArrayStart(3) + } else { + yynn679 = 1 + for _, b := range yyq679 { + if b { + yynn679++ + } + } + r.EncodeMapStart(yynn679) + yynn679 = 0 + } + if yyr679 || yy2arr679 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym681 := z.EncBinary() + _ = yym681 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym682 := z.EncBinary() + _ = yym682 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } + if yyr679 || yy2arr679 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq679[1] { + yym684 := z.EncBinary() + _ = yym684 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq679[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym685 := z.EncBinary() + _ = yym685 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr679 || yy2arr679 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq679[2] { + yym687 := z.EncBinary() + _ = yym687 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq679[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym688 := z.EncBinary() + _ = yym688 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr679 || yy2arr679 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CinderVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym689 := z.DecBinary() + _ = yym689 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct690 := r.ContainerType() + if yyct690 == codecSelferValueTypeMap1234 { + yyl690 := r.ReadMapStart() + if yyl690 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl690, d) + } + } else if yyct690 == codecSelferValueTypeArray1234 { + yyl690 := r.ReadArrayStart() + if yyl690 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl690, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CinderVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys691Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys691Slc + var yyhl691 bool = l >= 0 + for yyj691 := 0; ; yyj691++ { + if yyhl691 { + if yyj691 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys691Slc = r.DecodeBytes(yys691Slc, true, true) + yys691 := string(yys691Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys691 { + case "volumeID": + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + x.VolumeID = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys691) + } // end switch yys691 + } // end for yyj691 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CinderVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj695 int + var yyb695 bool + var yyhl695 bool = l >= 0 + yyj695++ + if yyhl695 { + yyb695 = yyj695 > l + } else { + yyb695 = r.CheckBreak() + } + if yyb695 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + x.VolumeID = string(r.DecodeString()) + } + yyj695++ + if yyhl695 { + yyb695 = yyj695 > l + } else { + yyb695 = r.CheckBreak() + } + if yyb695 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj695++ + if yyhl695 { + yyb695 = yyj695 > l + } else { + yyb695 = r.CheckBreak() + } + if yyb695 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj695++ + if yyhl695 { + yyb695 = yyj695 > l + } else { + yyb695 = r.CheckBreak() + } + if yyb695 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj695-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CephFSVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym699 := z.EncBinary() + _ = yym699 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep700 := !z.EncBinary() + yy2arr700 := z.EncBasicHandle().StructToArray + var yyq700 [6]bool + _, _, _ = yysep700, yyq700, yy2arr700 + const yyr700 bool = false + yyq700[1] = x.Path != "" + yyq700[2] = x.User != "" + yyq700[3] = x.SecretFile != "" + yyq700[4] = x.SecretRef != nil + yyq700[5] = x.ReadOnly != false + var yynn700 int + if yyr700 || yy2arr700 { + r.EncodeArrayStart(6) + } else { + yynn700 = 1 + for _, b := range yyq700 { + if b { + yynn700++ + } + } + r.EncodeMapStart(yynn700) + yynn700 = 0 + } + if yyr700 || yy2arr700 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Monitors == nil { + r.EncodeNil() + } else { + yym702 := z.EncBinary() + _ = yym702 + if false { + } else { + z.F.EncSliceStringV(x.Monitors, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("monitors")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Monitors == nil { + r.EncodeNil() + } else { + yym703 := z.EncBinary() + _ = yym703 + if false { + } else { + z.F.EncSliceStringV(x.Monitors, false, e) + } + } + } + if yyr700 || yy2arr700 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq700[1] { + yym705 := z.EncBinary() + _ = yym705 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq700[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym706 := z.EncBinary() + _ = yym706 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + } + if yyr700 || yy2arr700 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq700[2] { + yym708 := z.EncBinary() + _ = yym708 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq700[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym709 := z.EncBinary() + _ = yym709 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } + } + if yyr700 || yy2arr700 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq700[3] { + yym711 := z.EncBinary() + _ = yym711 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretFile)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq700[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretFile")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym712 := z.EncBinary() + _ = yym712 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretFile)) + } + } + } + if yyr700 || yy2arr700 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq700[4] { + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq700[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } + } + if yyr700 || yy2arr700 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq700[5] { + yym715 := z.EncBinary() + _ = yym715 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq700[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym716 := z.EncBinary() + _ = yym716 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr700 || yy2arr700 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CephFSVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym717 := z.DecBinary() + _ = yym717 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct718 := r.ContainerType() + if yyct718 == codecSelferValueTypeMap1234 { + yyl718 := r.ReadMapStart() + if yyl718 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl718, d) + } + } else if yyct718 == codecSelferValueTypeArray1234 { + yyl718 := r.ReadArrayStart() + if yyl718 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl718, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CephFSVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys719Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys719Slc + var yyhl719 bool = l >= 0 + for yyj719 := 0; ; yyj719++ { + if yyhl719 { + if yyj719 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys719Slc = r.DecodeBytes(yys719Slc, true, true) + yys719 := string(yys719Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys719 { + case "monitors": + if r.TryDecodeAsNil() { + x.Monitors = nil + } else { + yyv720 := &x.Monitors + yym721 := z.DecBinary() + _ = yym721 + if false { + } else { + z.F.DecSliceStringX(yyv720, false, d) + } + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "user": + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + case "secretFile": + if r.TryDecodeAsNil() { + x.SecretFile = "" + } else { + x.SecretFile = string(r.DecodeString()) + } + case "secretRef": + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys719) + } // end switch yys719 + } // end for yyj719 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CephFSVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj727 int + var yyb727 bool + var yyhl727 bool = l >= 0 + yyj727++ + if yyhl727 { + yyb727 = yyj727 > l + } else { + yyb727 = r.CheckBreak() + } + if yyb727 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Monitors = nil + } else { + yyv728 := &x.Monitors + yym729 := z.DecBinary() + _ = yym729 + if false { + } else { + z.F.DecSliceStringX(yyv728, false, d) + } + } + yyj727++ + if yyhl727 { + yyb727 = yyj727 > l + } else { + yyb727 = r.CheckBreak() + } + if yyb727 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj727++ + if yyhl727 { + yyb727 = yyj727 > l + } else { + yyb727 = r.CheckBreak() + } + if yyb727 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + yyj727++ + if yyhl727 { + yyb727 = yyj727 > l + } else { + yyb727 = r.CheckBreak() + } + if yyb727 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SecretFile = "" + } else { + x.SecretFile = string(r.DecodeString()) + } + yyj727++ + if yyhl727 { + yyb727 = yyj727 > l + } else { + yyb727 = r.CheckBreak() + } + if yyb727 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + yyj727++ + if yyhl727 { + yyb727 = yyj727 > l + } else { + yyb727 = r.CheckBreak() + } + if yyb727 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj727++ + if yyhl727 { + yyb727 = yyj727 > l + } else { + yyb727 = r.CheckBreak() + } + if yyb727 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj727-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *FlockerVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym735 := z.EncBinary() + _ = yym735 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep736 := !z.EncBinary() + yy2arr736 := z.EncBasicHandle().StructToArray + var yyq736 [1]bool + _, _, _ = yysep736, yyq736, yy2arr736 + const yyr736 bool = false + var yynn736 int + if yyr736 || yy2arr736 { + r.EncodeArrayStart(1) + } else { + yynn736 = 1 + for _, b := range yyq736 { + if b { + yynn736++ + } + } + r.EncodeMapStart(yynn736) + yynn736 = 0 + } + if yyr736 || yy2arr736 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym738 := z.EncBinary() + _ = yym738 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DatasetName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("datasetName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym739 := z.EncBinary() + _ = yym739 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DatasetName)) + } + } + if yyr736 || yy2arr736 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *FlockerVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym740 := z.DecBinary() + _ = yym740 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct741 := r.ContainerType() + if yyct741 == codecSelferValueTypeMap1234 { + yyl741 := r.ReadMapStart() + if yyl741 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl741, d) + } + } else if yyct741 == codecSelferValueTypeArray1234 { + yyl741 := r.ReadArrayStart() + if yyl741 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl741, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *FlockerVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys742Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys742Slc + var yyhl742 bool = l >= 0 + for yyj742 := 0; ; yyj742++ { + if yyhl742 { + if yyj742 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys742Slc = r.DecodeBytes(yys742Slc, true, true) + yys742 := string(yys742Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys742 { + case "datasetName": + if r.TryDecodeAsNil() { + x.DatasetName = "" + } else { + x.DatasetName = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys742) + } // end switch yys742 + } // end for yyj742 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *FlockerVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj744 int + var yyb744 bool + var yyhl744 bool = l >= 0 + yyj744++ + if yyhl744 { + yyb744 = yyj744 > l + } else { + yyb744 = r.CheckBreak() + } + if yyb744 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DatasetName = "" + } else { + x.DatasetName = string(r.DecodeString()) + } + for { + yyj744++ + if yyhl744 { + yyb744 = yyj744 > l + } else { + yyb744 = r.CheckBreak() + } + if yyb744 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj744-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x StorageMedium) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym746 := z.EncBinary() + _ = yym746 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *StorageMedium) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym747 := z.DecBinary() + _ = yym747 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x Protocol) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym748 := z.EncBinary() + _ = yym748 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *Protocol) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym749 := z.DecBinary() + _ = yym749 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *GCEPersistentDiskVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym750 := z.EncBinary() + _ = yym750 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep751 := !z.EncBinary() + yy2arr751 := z.EncBasicHandle().StructToArray + var yyq751 [4]bool + _, _, _ = yysep751, yyq751, yy2arr751 + const yyr751 bool = false + yyq751[1] = x.FSType != "" + yyq751[2] = x.Partition != 0 + yyq751[3] = x.ReadOnly != false + var yynn751 int + if yyr751 || yy2arr751 { + r.EncodeArrayStart(4) + } else { + yynn751 = 1 + for _, b := range yyq751 { + if b { + yynn751++ + } + } + r.EncodeMapStart(yynn751) + yynn751 = 0 + } + if yyr751 || yy2arr751 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym753 := z.EncBinary() + _ = yym753 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PDName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("pdName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym754 := z.EncBinary() + _ = yym754 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PDName)) + } + } + if yyr751 || yy2arr751 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq751[1] { + yym756 := z.EncBinary() + _ = yym756 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq751[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym757 := z.EncBinary() + _ = yym757 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr751 || yy2arr751 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq751[2] { + yym759 := z.EncBinary() + _ = yym759 + if false { + } else { + r.EncodeInt(int64(x.Partition)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq751[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("partition")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym760 := z.EncBinary() + _ = yym760 + if false { + } else { + r.EncodeInt(int64(x.Partition)) + } + } + } + if yyr751 || yy2arr751 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq751[3] { + yym762 := z.EncBinary() + _ = yym762 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq751[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym763 := z.EncBinary() + _ = yym763 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr751 || yy2arr751 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *GCEPersistentDiskVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym764 := z.DecBinary() + _ = yym764 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct765 := r.ContainerType() + if yyct765 == codecSelferValueTypeMap1234 { + yyl765 := r.ReadMapStart() + if yyl765 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl765, d) + } + } else if yyct765 == codecSelferValueTypeArray1234 { + yyl765 := r.ReadArrayStart() + if yyl765 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl765, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *GCEPersistentDiskVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys766Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys766Slc + var yyhl766 bool = l >= 0 + for yyj766 := 0; ; yyj766++ { + if yyhl766 { + if yyj766 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys766Slc = r.DecodeBytes(yys766Slc, true, true) + yys766 := string(yys766Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys766 { + case "pdName": + if r.TryDecodeAsNil() { + x.PDName = "" + } else { + x.PDName = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "partition": + if r.TryDecodeAsNil() { + x.Partition = 0 + } else { + x.Partition = int32(r.DecodeInt(32)) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys766) + } // end switch yys766 + } // end for yyj766 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *GCEPersistentDiskVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj771 int + var yyb771 bool + var yyhl771 bool = l >= 0 + yyj771++ + if yyhl771 { + yyb771 = yyj771 > l + } else { + yyb771 = r.CheckBreak() + } + if yyb771 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PDName = "" + } else { + x.PDName = string(r.DecodeString()) + } + yyj771++ + if yyhl771 { + yyb771 = yyj771 > l + } else { + yyb771 = r.CheckBreak() + } + if yyb771 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj771++ + if yyhl771 { + yyb771 = yyj771 > l + } else { + yyb771 = r.CheckBreak() + } + if yyb771 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Partition = 0 + } else { + x.Partition = int32(r.DecodeInt(32)) + } + yyj771++ + if yyhl771 { + yyb771 = yyj771 > l + } else { + yyb771 = r.CheckBreak() + } + if yyb771 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj771++ + if yyhl771 { + yyb771 = yyj771 > l + } else { + yyb771 = r.CheckBreak() + } + if yyb771 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj771-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *QuobyteVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym776 := z.EncBinary() + _ = yym776 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep777 := !z.EncBinary() + yy2arr777 := z.EncBasicHandle().StructToArray + var yyq777 [5]bool + _, _, _ = yysep777, yyq777, yy2arr777 + const yyr777 bool = false + yyq777[2] = x.ReadOnly != false + yyq777[3] = x.User != "" + yyq777[4] = x.Group != "" + var yynn777 int + if yyr777 || yy2arr777 { + r.EncodeArrayStart(5) + } else { + yynn777 = 2 + for _, b := range yyq777 { + if b { + yynn777++ + } + } + r.EncodeMapStart(yynn777) + yynn777 = 0 + } + if yyr777 || yy2arr777 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym779 := z.EncBinary() + _ = yym779 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Registry)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("registry")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym780 := z.EncBinary() + _ = yym780 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Registry)) + } + } + if yyr777 || yy2arr777 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym782 := z.EncBinary() + _ = yym782 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Volume)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym783 := z.EncBinary() + _ = yym783 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Volume)) + } + } + if yyr777 || yy2arr777 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq777[2] { + yym785 := z.EncBinary() + _ = yym785 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq777[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym786 := z.EncBinary() + _ = yym786 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr777 || yy2arr777 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq777[3] { + yym788 := z.EncBinary() + _ = yym788 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq777[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym789 := z.EncBinary() + _ = yym789 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } + } + if yyr777 || yy2arr777 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq777[4] { + yym791 := z.EncBinary() + _ = yym791 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Group)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq777[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("group")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym792 := z.EncBinary() + _ = yym792 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Group)) + } + } + } + if yyr777 || yy2arr777 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *QuobyteVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym793 := z.DecBinary() + _ = yym793 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct794 := r.ContainerType() + if yyct794 == codecSelferValueTypeMap1234 { + yyl794 := r.ReadMapStart() + if yyl794 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl794, d) + } + } else if yyct794 == codecSelferValueTypeArray1234 { + yyl794 := r.ReadArrayStart() + if yyl794 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl794, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *QuobyteVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys795Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys795Slc + var yyhl795 bool = l >= 0 + for yyj795 := 0; ; yyj795++ { + if yyhl795 { + if yyj795 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys795Slc = r.DecodeBytes(yys795Slc, true, true) + yys795 := string(yys795Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys795 { + case "registry": + if r.TryDecodeAsNil() { + x.Registry = "" + } else { + x.Registry = string(r.DecodeString()) + } + case "volume": + if r.TryDecodeAsNil() { + x.Volume = "" + } else { + x.Volume = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + case "user": + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + case "group": + if r.TryDecodeAsNil() { + x.Group = "" + } else { + x.Group = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys795) + } // end switch yys795 + } // end for yyj795 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *QuobyteVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj801 int + var yyb801 bool + var yyhl801 bool = l >= 0 + yyj801++ + if yyhl801 { + yyb801 = yyj801 > l + } else { + yyb801 = r.CheckBreak() + } + if yyb801 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Registry = "" + } else { + x.Registry = string(r.DecodeString()) + } + yyj801++ + if yyhl801 { + yyb801 = yyj801 > l + } else { + yyb801 = r.CheckBreak() + } + if yyb801 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Volume = "" + } else { + x.Volume = string(r.DecodeString()) + } + yyj801++ + if yyhl801 { + yyb801 = yyj801 > l + } else { + yyb801 = r.CheckBreak() + } + if yyb801 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + yyj801++ + if yyhl801 { + yyb801 = yyj801 > l + } else { + yyb801 = r.CheckBreak() + } + if yyb801 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + yyj801++ + if yyhl801 { + yyb801 = yyj801 > l + } else { + yyb801 = r.CheckBreak() + } + if yyb801 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Group = "" + } else { + x.Group = string(r.DecodeString()) + } + for { + yyj801++ + if yyhl801 { + yyb801 = yyj801 > l + } else { + yyb801 = r.CheckBreak() + } + if yyb801 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj801-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *FlexVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym807 := z.EncBinary() + _ = yym807 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep808 := !z.EncBinary() + yy2arr808 := z.EncBasicHandle().StructToArray + var yyq808 [5]bool + _, _, _ = yysep808, yyq808, yy2arr808 + const yyr808 bool = false + yyq808[1] = x.FSType != "" + yyq808[2] = x.SecretRef != nil + yyq808[3] = x.ReadOnly != false + yyq808[4] = len(x.Options) != 0 + var yynn808 int + if yyr808 || yy2arr808 { + r.EncodeArrayStart(5) + } else { + yynn808 = 1 + for _, b := range yyq808 { + if b { + yynn808++ + } + } + r.EncodeMapStart(yynn808) + yynn808 = 0 + } + if yyr808 || yy2arr808 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym810 := z.EncBinary() + _ = yym810 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Driver)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("driver")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym811 := z.EncBinary() + _ = yym811 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Driver)) + } + } + if yyr808 || yy2arr808 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq808[1] { + yym813 := z.EncBinary() + _ = yym813 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq808[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym814 := z.EncBinary() + _ = yym814 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr808 || yy2arr808 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq808[2] { + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq808[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretRef == nil { + r.EncodeNil() + } else { + x.SecretRef.CodecEncodeSelf(e) + } + } + } + if yyr808 || yy2arr808 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq808[3] { + yym817 := z.EncBinary() + _ = yym817 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq808[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym818 := z.EncBinary() + _ = yym818 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr808 || yy2arr808 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq808[4] { + if x.Options == nil { + r.EncodeNil() + } else { + yym820 := z.EncBinary() + _ = yym820 + if false { + } else { + z.F.EncMapStringStringV(x.Options, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq808[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("options")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Options == nil { + r.EncodeNil() + } else { + yym821 := z.EncBinary() + _ = yym821 + if false { + } else { + z.F.EncMapStringStringV(x.Options, false, e) + } + } + } + } + if yyr808 || yy2arr808 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *FlexVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym822 := z.DecBinary() + _ = yym822 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct823 := r.ContainerType() + if yyct823 == codecSelferValueTypeMap1234 { + yyl823 := r.ReadMapStart() + if yyl823 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl823, d) + } + } else if yyct823 == codecSelferValueTypeArray1234 { + yyl823 := r.ReadArrayStart() + if yyl823 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl823, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *FlexVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys824Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys824Slc + var yyhl824 bool = l >= 0 + for yyj824 := 0; ; yyj824++ { + if yyhl824 { + if yyj824 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys824Slc = r.DecodeBytes(yys824Slc, true, true) + yys824 := string(yys824Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys824 { + case "driver": + if r.TryDecodeAsNil() { + x.Driver = "" + } else { + x.Driver = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "secretRef": + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + case "options": + if r.TryDecodeAsNil() { + x.Options = nil + } else { + yyv829 := &x.Options + yym830 := z.DecBinary() + _ = yym830 + if false { + } else { + z.F.DecMapStringStringX(yyv829, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys824) + } // end switch yys824 + } // end for yyj824 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *FlexVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj831 int + var yyb831 bool + var yyhl831 bool = l >= 0 + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Driver = "" + } else { + x.Driver = string(r.DecodeString()) + } + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretRef != nil { + x.SecretRef = nil + } + } else { + if x.SecretRef == nil { + x.SecretRef = new(LocalObjectReference) + } + x.SecretRef.CodecDecodeSelf(d) + } + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Options = nil + } else { + yyv836 := &x.Options + yym837 := z.DecBinary() + _ = yym837 + if false { + } else { + z.F.DecMapStringStringX(yyv836, false, d) + } + } + for { + yyj831++ + if yyhl831 { + yyb831 = yyj831 > l + } else { + yyb831 = r.CheckBreak() + } + if yyb831 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj831-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *AWSElasticBlockStoreVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym838 := z.EncBinary() + _ = yym838 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep839 := !z.EncBinary() + yy2arr839 := z.EncBasicHandle().StructToArray + var yyq839 [4]bool + _, _, _ = yysep839, yyq839, yy2arr839 + const yyr839 bool = false + yyq839[1] = x.FSType != "" + yyq839[2] = x.Partition != 0 + yyq839[3] = x.ReadOnly != false + var yynn839 int + if yyr839 || yy2arr839 { + r.EncodeArrayStart(4) + } else { + yynn839 = 1 + for _, b := range yyq839 { + if b { + yynn839++ + } + } + r.EncodeMapStart(yynn839) + yynn839 = 0 + } + if yyr839 || yy2arr839 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym841 := z.EncBinary() + _ = yym841 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym842 := z.EncBinary() + _ = yym842 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } + if yyr839 || yy2arr839 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq839[1] { + yym844 := z.EncBinary() + _ = yym844 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq839[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym845 := z.EncBinary() + _ = yym845 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr839 || yy2arr839 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq839[2] { + yym847 := z.EncBinary() + _ = yym847 + if false { + } else { + r.EncodeInt(int64(x.Partition)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq839[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("partition")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym848 := z.EncBinary() + _ = yym848 + if false { + } else { + r.EncodeInt(int64(x.Partition)) + } + } + } + if yyr839 || yy2arr839 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq839[3] { + yym850 := z.EncBinary() + _ = yym850 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq839[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym851 := z.EncBinary() + _ = yym851 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr839 || yy2arr839 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AWSElasticBlockStoreVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym852 := z.DecBinary() + _ = yym852 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct853 := r.ContainerType() + if yyct853 == codecSelferValueTypeMap1234 { + yyl853 := r.ReadMapStart() + if yyl853 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl853, d) + } + } else if yyct853 == codecSelferValueTypeArray1234 { + yyl853 := r.ReadArrayStart() + if yyl853 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl853, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AWSElasticBlockStoreVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys854Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys854Slc + var yyhl854 bool = l >= 0 + for yyj854 := 0; ; yyj854++ { + if yyhl854 { + if yyj854 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys854Slc = r.DecodeBytes(yys854Slc, true, true) + yys854 := string(yys854Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys854 { + case "volumeID": + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + x.VolumeID = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "partition": + if r.TryDecodeAsNil() { + x.Partition = 0 + } else { + x.Partition = int32(r.DecodeInt(32)) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys854) + } // end switch yys854 + } // end for yyj854 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AWSElasticBlockStoreVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj859 int + var yyb859 bool + var yyhl859 bool = l >= 0 + yyj859++ + if yyhl859 { + yyb859 = yyj859 > l + } else { + yyb859 = r.CheckBreak() + } + if yyb859 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + x.VolumeID = string(r.DecodeString()) + } + yyj859++ + if yyhl859 { + yyb859 = yyj859 > l + } else { + yyb859 = r.CheckBreak() + } + if yyb859 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj859++ + if yyhl859 { + yyb859 = yyj859 > l + } else { + yyb859 = r.CheckBreak() + } + if yyb859 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Partition = 0 + } else { + x.Partition = int32(r.DecodeInt(32)) + } + yyj859++ + if yyhl859 { + yyb859 = yyj859 > l + } else { + yyb859 = r.CheckBreak() + } + if yyb859 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj859++ + if yyhl859 { + yyb859 = yyj859 > l + } else { + yyb859 = r.CheckBreak() + } + if yyb859 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj859-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *GitRepoVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym864 := z.EncBinary() + _ = yym864 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep865 := !z.EncBinary() + yy2arr865 := z.EncBasicHandle().StructToArray + var yyq865 [3]bool + _, _, _ = yysep865, yyq865, yy2arr865 + const yyr865 bool = false + yyq865[1] = x.Revision != "" + yyq865[2] = x.Directory != "" + var yynn865 int + if yyr865 || yy2arr865 { + r.EncodeArrayStart(3) + } else { + yynn865 = 1 + for _, b := range yyq865 { + if b { + yynn865++ + } + } + r.EncodeMapStart(yynn865) + yynn865 = 0 + } + if yyr865 || yy2arr865 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym867 := z.EncBinary() + _ = yym867 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Repository)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("repository")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym868 := z.EncBinary() + _ = yym868 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Repository)) + } + } + if yyr865 || yy2arr865 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq865[1] { + yym870 := z.EncBinary() + _ = yym870 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Revision)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq865[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("revision")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym871 := z.EncBinary() + _ = yym871 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Revision)) + } + } + } + if yyr865 || yy2arr865 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq865[2] { + yym873 := z.EncBinary() + _ = yym873 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Directory)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq865[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("directory")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym874 := z.EncBinary() + _ = yym874 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Directory)) + } + } + } + if yyr865 || yy2arr865 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *GitRepoVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym875 := z.DecBinary() + _ = yym875 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct876 := r.ContainerType() + if yyct876 == codecSelferValueTypeMap1234 { + yyl876 := r.ReadMapStart() + if yyl876 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl876, d) + } + } else if yyct876 == codecSelferValueTypeArray1234 { + yyl876 := r.ReadArrayStart() + if yyl876 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl876, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *GitRepoVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys877Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys877Slc + var yyhl877 bool = l >= 0 + for yyj877 := 0; ; yyj877++ { + if yyhl877 { + if yyj877 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys877Slc = r.DecodeBytes(yys877Slc, true, true) + yys877 := string(yys877Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys877 { + case "repository": + if r.TryDecodeAsNil() { + x.Repository = "" + } else { + x.Repository = string(r.DecodeString()) + } + case "revision": + if r.TryDecodeAsNil() { + x.Revision = "" + } else { + x.Revision = string(r.DecodeString()) + } + case "directory": + if r.TryDecodeAsNil() { + x.Directory = "" + } else { + x.Directory = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys877) + } // end switch yys877 + } // end for yyj877 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *GitRepoVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj881 int + var yyb881 bool + var yyhl881 bool = l >= 0 + yyj881++ + if yyhl881 { + yyb881 = yyj881 > l + } else { + yyb881 = r.CheckBreak() + } + if yyb881 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Repository = "" + } else { + x.Repository = string(r.DecodeString()) + } + yyj881++ + if yyhl881 { + yyb881 = yyj881 > l + } else { + yyb881 = r.CheckBreak() + } + if yyb881 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Revision = "" + } else { + x.Revision = string(r.DecodeString()) + } + yyj881++ + if yyhl881 { + yyb881 = yyj881 > l + } else { + yyb881 = r.CheckBreak() + } + if yyb881 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Directory = "" + } else { + x.Directory = string(r.DecodeString()) + } + for { + yyj881++ + if yyhl881 { + yyb881 = yyj881 > l + } else { + yyb881 = r.CheckBreak() + } + if yyb881 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj881-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SecretVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym885 := z.EncBinary() + _ = yym885 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep886 := !z.EncBinary() + yy2arr886 := z.EncBasicHandle().StructToArray + var yyq886 [3]bool + _, _, _ = yysep886, yyq886, yy2arr886 + const yyr886 bool = false + yyq886[0] = x.SecretName != "" + yyq886[1] = len(x.Items) != 0 + yyq886[2] = x.DefaultMode != nil + var yynn886 int + if yyr886 || yy2arr886 { + r.EncodeArrayStart(3) + } else { + yynn886 = 0 + for _, b := range yyq886 { + if b { + yynn886++ + } + } + r.EncodeMapStart(yynn886) + yynn886 = 0 + } + if yyr886 || yy2arr886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq886[0] { + yym888 := z.EncBinary() + _ = yym888 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq886[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym889 := z.EncBinary() + _ = yym889 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } + } + if yyr886 || yy2arr886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq886[1] { + if x.Items == nil { + r.EncodeNil() + } else { + yym891 := z.EncBinary() + _ = yym891 + if false { + } else { + h.encSliceKeyToPath(([]KeyToPath)(x.Items), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq886[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym892 := z.EncBinary() + _ = yym892 + if false { + } else { + h.encSliceKeyToPath(([]KeyToPath)(x.Items), e) + } + } + } + } + if yyr886 || yy2arr886 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq886[2] { + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy894 := *x.DefaultMode + yym895 := z.EncBinary() + _ = yym895 + if false { + } else { + r.EncodeInt(int64(yy894)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq886[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultMode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy896 := *x.DefaultMode + yym897 := z.EncBinary() + _ = yym897 + if false { + } else { + r.EncodeInt(int64(yy896)) + } + } + } + } + if yyr886 || yy2arr886 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecretVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym898 := z.DecBinary() + _ = yym898 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct899 := r.ContainerType() + if yyct899 == codecSelferValueTypeMap1234 { + yyl899 := r.ReadMapStart() + if yyl899 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl899, d) + } + } else if yyct899 == codecSelferValueTypeArray1234 { + yyl899 := r.ReadArrayStart() + if yyl899 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl899, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecretVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys900Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys900Slc + var yyhl900 bool = l >= 0 + for yyj900 := 0; ; yyj900++ { + if yyhl900 { + if yyj900 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys900Slc = r.DecodeBytes(yys900Slc, true, true) + yys900 := string(yys900Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys900 { + case "secretName": + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv902 := &x.Items + yym903 := z.DecBinary() + _ = yym903 + if false { + } else { + h.decSliceKeyToPath((*[]KeyToPath)(yyv902), d) + } + } + case "defaultMode": + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym905 := z.DecBinary() + _ = yym905 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys900) + } // end switch yys900 + } // end for yyj900 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecretVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj906 int + var yyb906 bool + var yyhl906 bool = l >= 0 + yyj906++ + if yyhl906 { + yyb906 = yyj906 > l + } else { + yyb906 = r.CheckBreak() + } + if yyb906 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + yyj906++ + if yyhl906 { + yyb906 = yyj906 > l + } else { + yyb906 = r.CheckBreak() + } + if yyb906 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv908 := &x.Items + yym909 := z.DecBinary() + _ = yym909 + if false { + } else { + h.decSliceKeyToPath((*[]KeyToPath)(yyv908), d) + } + } + yyj906++ + if yyhl906 { + yyb906 = yyj906 > l + } else { + yyb906 = r.CheckBreak() + } + if yyb906 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym911 := z.DecBinary() + _ = yym911 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj906++ + if yyhl906 { + yyb906 = yyj906 > l + } else { + yyb906 = r.CheckBreak() + } + if yyb906 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj906-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NFSVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym912 := z.EncBinary() + _ = yym912 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep913 := !z.EncBinary() + yy2arr913 := z.EncBasicHandle().StructToArray + var yyq913 [3]bool + _, _, _ = yysep913, yyq913, yy2arr913 + const yyr913 bool = false + yyq913[2] = x.ReadOnly != false + var yynn913 int + if yyr913 || yy2arr913 { + r.EncodeArrayStart(3) + } else { + yynn913 = 2 + for _, b := range yyq913 { + if b { + yynn913++ + } + } + r.EncodeMapStart(yynn913) + yynn913 = 0 + } + if yyr913 || yy2arr913 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym915 := z.EncBinary() + _ = yym915 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Server)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("server")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym916 := z.EncBinary() + _ = yym916 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Server)) + } + } + if yyr913 || yy2arr913 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym918 := z.EncBinary() + _ = yym918 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym919 := z.EncBinary() + _ = yym919 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr913 || yy2arr913 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq913[2] { + yym921 := z.EncBinary() + _ = yym921 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq913[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym922 := z.EncBinary() + _ = yym922 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr913 || yy2arr913 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NFSVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym923 := z.DecBinary() + _ = yym923 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct924 := r.ContainerType() + if yyct924 == codecSelferValueTypeMap1234 { + yyl924 := r.ReadMapStart() + if yyl924 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl924, d) + } + } else if yyct924 == codecSelferValueTypeArray1234 { + yyl924 := r.ReadArrayStart() + if yyl924 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl924, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NFSVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys925Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys925Slc + var yyhl925 bool = l >= 0 + for yyj925 := 0; ; yyj925++ { + if yyhl925 { + if yyj925 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys925Slc = r.DecodeBytes(yys925Slc, true, true) + yys925 := string(yys925Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys925 { + case "server": + if r.TryDecodeAsNil() { + x.Server = "" + } else { + x.Server = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys925) + } // end switch yys925 + } // end for yyj925 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NFSVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj929 int + var yyb929 bool + var yyhl929 bool = l >= 0 + yyj929++ + if yyhl929 { + yyb929 = yyj929 > l + } else { + yyb929 = r.CheckBreak() + } + if yyb929 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Server = "" + } else { + x.Server = string(r.DecodeString()) + } + yyj929++ + if yyhl929 { + yyb929 = yyj929 > l + } else { + yyb929 = r.CheckBreak() + } + if yyb929 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj929++ + if yyhl929 { + yyb929 = yyj929 > l + } else { + yyb929 = r.CheckBreak() + } + if yyb929 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj929++ + if yyhl929 { + yyb929 = yyj929 > l + } else { + yyb929 = r.CheckBreak() + } + if yyb929 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj929-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ISCSIVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym933 := z.EncBinary() + _ = yym933 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep934 := !z.EncBinary() + yy2arr934 := z.EncBasicHandle().StructToArray + var yyq934 [6]bool + _, _, _ = yysep934, yyq934, yy2arr934 + const yyr934 bool = false + yyq934[3] = x.ISCSIInterface != "" + yyq934[4] = x.FSType != "" + yyq934[5] = x.ReadOnly != false + var yynn934 int + if yyr934 || yy2arr934 { + r.EncodeArrayStart(6) + } else { + yynn934 = 3 + for _, b := range yyq934 { + if b { + yynn934++ + } + } + r.EncodeMapStart(yynn934) + yynn934 = 0 + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym936 := z.EncBinary() + _ = yym936 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TargetPortal)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("targetPortal")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym937 := z.EncBinary() + _ = yym937 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TargetPortal)) + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym939 := z.EncBinary() + _ = yym939 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IQN)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iqn")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym940 := z.EncBinary() + _ = yym940 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IQN)) + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym942 := z.EncBinary() + _ = yym942 + if false { + } else { + r.EncodeInt(int64(x.Lun)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lun")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym943 := z.EncBinary() + _ = yym943 + if false { + } else { + r.EncodeInt(int64(x.Lun)) + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq934[3] { + yym945 := z.EncBinary() + _ = yym945 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ISCSIInterface)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq934[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("iscsiInterface")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym946 := z.EncBinary() + _ = yym946 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ISCSIInterface)) + } + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq934[4] { + yym948 := z.EncBinary() + _ = yym948 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq934[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym949 := z.EncBinary() + _ = yym949 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq934[5] { + yym951 := z.EncBinary() + _ = yym951 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq934[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym952 := z.EncBinary() + _ = yym952 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr934 || yy2arr934 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ISCSIVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym953 := z.DecBinary() + _ = yym953 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct954 := r.ContainerType() + if yyct954 == codecSelferValueTypeMap1234 { + yyl954 := r.ReadMapStart() + if yyl954 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl954, d) + } + } else if yyct954 == codecSelferValueTypeArray1234 { + yyl954 := r.ReadArrayStart() + if yyl954 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl954, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ISCSIVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys955Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys955Slc + var yyhl955 bool = l >= 0 + for yyj955 := 0; ; yyj955++ { + if yyhl955 { + if yyj955 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys955Slc = r.DecodeBytes(yys955Slc, true, true) + yys955 := string(yys955Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys955 { + case "targetPortal": + if r.TryDecodeAsNil() { + x.TargetPortal = "" + } else { + x.TargetPortal = string(r.DecodeString()) + } + case "iqn": + if r.TryDecodeAsNil() { + x.IQN = "" + } else { + x.IQN = string(r.DecodeString()) + } + case "lun": + if r.TryDecodeAsNil() { + x.Lun = 0 + } else { + x.Lun = int32(r.DecodeInt(32)) + } + case "iscsiInterface": + if r.TryDecodeAsNil() { + x.ISCSIInterface = "" + } else { + x.ISCSIInterface = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys955) + } // end switch yys955 + } // end for yyj955 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ISCSIVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj962 int + var yyb962 bool + var yyhl962 bool = l >= 0 + yyj962++ + if yyhl962 { + yyb962 = yyj962 > l + } else { + yyb962 = r.CheckBreak() + } + if yyb962 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TargetPortal = "" + } else { + x.TargetPortal = string(r.DecodeString()) + } + yyj962++ + if yyhl962 { + yyb962 = yyj962 > l + } else { + yyb962 = r.CheckBreak() + } + if yyb962 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.IQN = "" + } else { + x.IQN = string(r.DecodeString()) + } + yyj962++ + if yyhl962 { + yyb962 = yyj962 > l + } else { + yyb962 = r.CheckBreak() + } + if yyb962 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Lun = 0 + } else { + x.Lun = int32(r.DecodeInt(32)) + } + yyj962++ + if yyhl962 { + yyb962 = yyj962 > l + } else { + yyb962 = r.CheckBreak() + } + if yyb962 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ISCSIInterface = "" + } else { + x.ISCSIInterface = string(r.DecodeString()) + } + yyj962++ + if yyhl962 { + yyb962 = yyj962 > l + } else { + yyb962 = r.CheckBreak() + } + if yyb962 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj962++ + if yyhl962 { + yyb962 = yyj962 > l + } else { + yyb962 = r.CheckBreak() + } + if yyb962 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj962++ + if yyhl962 { + yyb962 = yyj962 > l + } else { + yyb962 = r.CheckBreak() + } + if yyb962 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj962-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *FCVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym969 := z.EncBinary() + _ = yym969 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep970 := !z.EncBinary() + yy2arr970 := z.EncBasicHandle().StructToArray + var yyq970 [4]bool + _, _, _ = yysep970, yyq970, yy2arr970 + const yyr970 bool = false + yyq970[2] = x.FSType != "" + yyq970[3] = x.ReadOnly != false + var yynn970 int + if yyr970 || yy2arr970 { + r.EncodeArrayStart(4) + } else { + yynn970 = 2 + for _, b := range yyq970 { + if b { + yynn970++ + } + } + r.EncodeMapStart(yynn970) + yynn970 = 0 + } + if yyr970 || yy2arr970 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.TargetWWNs == nil { + r.EncodeNil() + } else { + yym972 := z.EncBinary() + _ = yym972 + if false { + } else { + z.F.EncSliceStringV(x.TargetWWNs, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("targetWWNs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TargetWWNs == nil { + r.EncodeNil() + } else { + yym973 := z.EncBinary() + _ = yym973 + if false { + } else { + z.F.EncSliceStringV(x.TargetWWNs, false, e) + } + } + } + if yyr970 || yy2arr970 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Lun == nil { + r.EncodeNil() + } else { + yy975 := *x.Lun + yym976 := z.EncBinary() + _ = yym976 + if false { + } else { + r.EncodeInt(int64(yy975)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lun")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Lun == nil { + r.EncodeNil() + } else { + yy977 := *x.Lun + yym978 := z.EncBinary() + _ = yym978 + if false { + } else { + r.EncodeInt(int64(yy977)) + } + } + } + if yyr970 || yy2arr970 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq970[2] { + yym980 := z.EncBinary() + _ = yym980 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq970[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym981 := z.EncBinary() + _ = yym981 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr970 || yy2arr970 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq970[3] { + yym983 := z.EncBinary() + _ = yym983 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq970[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym984 := z.EncBinary() + _ = yym984 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr970 || yy2arr970 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *FCVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym985 := z.DecBinary() + _ = yym985 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct986 := r.ContainerType() + if yyct986 == codecSelferValueTypeMap1234 { + yyl986 := r.ReadMapStart() + if yyl986 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl986, d) + } + } else if yyct986 == codecSelferValueTypeArray1234 { + yyl986 := r.ReadArrayStart() + if yyl986 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl986, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *FCVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys987Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys987Slc + var yyhl987 bool = l >= 0 + for yyj987 := 0; ; yyj987++ { + if yyhl987 { + if yyj987 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys987Slc = r.DecodeBytes(yys987Slc, true, true) + yys987 := string(yys987Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys987 { + case "targetWWNs": + if r.TryDecodeAsNil() { + x.TargetWWNs = nil + } else { + yyv988 := &x.TargetWWNs + yym989 := z.DecBinary() + _ = yym989 + if false { + } else { + z.F.DecSliceStringX(yyv988, false, d) + } + } + case "lun": + if r.TryDecodeAsNil() { + if x.Lun != nil { + x.Lun = nil + } + } else { + if x.Lun == nil { + x.Lun = new(int32) + } + yym991 := z.DecBinary() + _ = yym991 + if false { + } else { + *((*int32)(x.Lun)) = int32(r.DecodeInt(32)) + } + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys987) + } // end switch yys987 + } // end for yyj987 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *FCVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj994 int + var yyb994 bool + var yyhl994 bool = l >= 0 + yyj994++ + if yyhl994 { + yyb994 = yyj994 > l + } else { + yyb994 = r.CheckBreak() + } + if yyb994 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TargetWWNs = nil + } else { + yyv995 := &x.TargetWWNs + yym996 := z.DecBinary() + _ = yym996 + if false { + } else { + z.F.DecSliceStringX(yyv995, false, d) + } + } + yyj994++ + if yyhl994 { + yyb994 = yyj994 > l + } else { + yyb994 = r.CheckBreak() + } + if yyb994 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Lun != nil { + x.Lun = nil + } + } else { + if x.Lun == nil { + x.Lun = new(int32) + } + yym998 := z.DecBinary() + _ = yym998 + if false { + } else { + *((*int32)(x.Lun)) = int32(r.DecodeInt(32)) + } + } + yyj994++ + if yyhl994 { + yyb994 = yyj994 > l + } else { + yyb994 = r.CheckBreak() + } + if yyb994 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + yyj994++ + if yyhl994 { + yyb994 = yyj994 > l + } else { + yyb994 = r.CheckBreak() + } + if yyb994 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj994++ + if yyhl994 { + yyb994 = yyj994 > l + } else { + yyb994 = r.CheckBreak() + } + if yyb994 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj994-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *AzureFileVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1001 := z.EncBinary() + _ = yym1001 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1002 := !z.EncBinary() + yy2arr1002 := z.EncBasicHandle().StructToArray + var yyq1002 [3]bool + _, _, _ = yysep1002, yyq1002, yy2arr1002 + const yyr1002 bool = false + yyq1002[2] = x.ReadOnly != false + var yynn1002 int + if yyr1002 || yy2arr1002 { + r.EncodeArrayStart(3) + } else { + yynn1002 = 2 + for _, b := range yyq1002 { + if b { + yynn1002++ + } + } + r.EncodeMapStart(yynn1002) + yynn1002 = 0 + } + if yyr1002 || yy2arr1002 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1004 := z.EncBinary() + _ = yym1004 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1005 := z.EncBinary() + _ = yym1005 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } + if yyr1002 || yy2arr1002 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1007 := z.EncBinary() + _ = yym1007 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ShareName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("shareName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1008 := z.EncBinary() + _ = yym1008 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ShareName)) + } + } + if yyr1002 || yy2arr1002 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1002[2] { + yym1010 := z.EncBinary() + _ = yym1010 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1002[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1011 := z.EncBinary() + _ = yym1011 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr1002 || yy2arr1002 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AzureFileVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1012 := z.DecBinary() + _ = yym1012 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1013 := r.ContainerType() + if yyct1013 == codecSelferValueTypeMap1234 { + yyl1013 := r.ReadMapStart() + if yyl1013 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1013, d) + } + } else if yyct1013 == codecSelferValueTypeArray1234 { + yyl1013 := r.ReadArrayStart() + if yyl1013 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1013, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AzureFileVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1014Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1014Slc + var yyhl1014 bool = l >= 0 + for yyj1014 := 0; ; yyj1014++ { + if yyhl1014 { + if yyj1014 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1014Slc = r.DecodeBytes(yys1014Slc, true, true) + yys1014 := string(yys1014Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1014 { + case "secretName": + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + case "shareName": + if r.TryDecodeAsNil() { + x.ShareName = "" + } else { + x.ShareName = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys1014) + } // end switch yys1014 + } // end for yyj1014 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AzureFileVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1018 int + var yyb1018 bool + var yyhl1018 bool = l >= 0 + yyj1018++ + if yyhl1018 { + yyb1018 = yyj1018 > l + } else { + yyb1018 = r.CheckBreak() + } + if yyb1018 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + yyj1018++ + if yyhl1018 { + yyb1018 = yyj1018 > l + } else { + yyb1018 = r.CheckBreak() + } + if yyb1018 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ShareName = "" + } else { + x.ShareName = string(r.DecodeString()) + } + yyj1018++ + if yyhl1018 { + yyb1018 = yyj1018 > l + } else { + yyb1018 = r.CheckBreak() + } + if yyb1018 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + for { + yyj1018++ + if yyhl1018 { + yyb1018 = yyj1018 > l + } else { + yyb1018 = r.CheckBreak() + } + if yyb1018 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1018-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *VsphereVirtualDiskVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1022 := z.EncBinary() + _ = yym1022 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1023 := !z.EncBinary() + yy2arr1023 := z.EncBasicHandle().StructToArray + var yyq1023 [2]bool + _, _, _ = yysep1023, yyq1023, yy2arr1023 + const yyr1023 bool = false + yyq1023[1] = x.FSType != "" + var yynn1023 int + if yyr1023 || yy2arr1023 { + r.EncodeArrayStart(2) + } else { + yynn1023 = 1 + for _, b := range yyq1023 { + if b { + yynn1023++ + } + } + r.EncodeMapStart(yynn1023) + yynn1023 = 0 + } + if yyr1023 || yy2arr1023 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1025 := z.EncBinary() + _ = yym1025 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumePath)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumePath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1026 := z.EncBinary() + _ = yym1026 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumePath)) + } + } + if yyr1023 || yy2arr1023 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1023[1] { + yym1028 := z.EncBinary() + _ = yym1028 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1023[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1029 := z.EncBinary() + _ = yym1029 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr1023 || yy2arr1023 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *VsphereVirtualDiskVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1030 := z.DecBinary() + _ = yym1030 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1031 := r.ContainerType() + if yyct1031 == codecSelferValueTypeMap1234 { + yyl1031 := r.ReadMapStart() + if yyl1031 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1031, d) + } + } else if yyct1031 == codecSelferValueTypeArray1234 { + yyl1031 := r.ReadArrayStart() + if yyl1031 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1031, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *VsphereVirtualDiskVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1032Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1032Slc + var yyhl1032 bool = l >= 0 + for yyj1032 := 0; ; yyj1032++ { + if yyhl1032 { + if yyj1032 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1032Slc = r.DecodeBytes(yys1032Slc, true, true) + yys1032 := string(yys1032Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1032 { + case "volumePath": + if r.TryDecodeAsNil() { + x.VolumePath = "" + } else { + x.VolumePath = string(r.DecodeString()) + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1032) + } // end switch yys1032 + } // end for yyj1032 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *VsphereVirtualDiskVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1035 int + var yyb1035 bool + var yyhl1035 bool = l >= 0 + yyj1035++ + if yyhl1035 { + yyb1035 = yyj1035 > l + } else { + yyb1035 = r.CheckBreak() + } + if yyb1035 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumePath = "" + } else { + x.VolumePath = string(r.DecodeString()) + } + yyj1035++ + if yyhl1035 { + yyb1035 = yyj1035 > l + } else { + yyb1035 = r.CheckBreak() + } + if yyb1035 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + x.FSType = string(r.DecodeString()) + } + for { + yyj1035++ + if yyhl1035 { + yyb1035 = yyj1035 > l + } else { + yyb1035 = r.CheckBreak() + } + if yyb1035 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1035-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x AzureDataDiskCachingMode) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1038 := z.EncBinary() + _ = yym1038 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *AzureDataDiskCachingMode) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1039 := z.DecBinary() + _ = yym1039 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *AzureDiskVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1040 := z.EncBinary() + _ = yym1040 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1041 := !z.EncBinary() + yy2arr1041 := z.EncBasicHandle().StructToArray + var yyq1041 [5]bool + _, _, _ = yysep1041, yyq1041, yy2arr1041 + const yyr1041 bool = false + yyq1041[2] = x.CachingMode != nil + yyq1041[3] = x.FSType != nil + yyq1041[4] = x.ReadOnly != nil + var yynn1041 int + if yyr1041 || yy2arr1041 { + r.EncodeArrayStart(5) + } else { + yynn1041 = 2 + for _, b := range yyq1041 { + if b { + yynn1041++ + } + } + r.EncodeMapStart(yynn1041) + yynn1041 = 0 + } + if yyr1041 || yy2arr1041 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1043 := z.EncBinary() + _ = yym1043 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DiskName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("diskName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1044 := z.EncBinary() + _ = yym1044 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DiskName)) + } + } + if yyr1041 || yy2arr1041 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1046 := z.EncBinary() + _ = yym1046 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DataDiskURI)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("diskURI")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1047 := z.EncBinary() + _ = yym1047 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DataDiskURI)) + } + } + if yyr1041 || yy2arr1041 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1041[2] { + if x.CachingMode == nil { + r.EncodeNil() + } else { + yy1049 := *x.CachingMode + yy1049.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1041[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("cachingMode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CachingMode == nil { + r.EncodeNil() + } else { + yy1050 := *x.CachingMode + yy1050.CodecEncodeSelf(e) + } + } + } + if yyr1041 || yy2arr1041 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1041[3] { + if x.FSType == nil { + r.EncodeNil() + } else { + yy1052 := *x.FSType + yym1053 := z.EncBinary() + _ = yym1053 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy1052)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1041[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FSType == nil { + r.EncodeNil() + } else { + yy1054 := *x.FSType + yym1055 := z.EncBinary() + _ = yym1055 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy1054)) + } + } + } + } + if yyr1041 || yy2arr1041 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1041[4] { + if x.ReadOnly == nil { + r.EncodeNil() + } else { + yy1057 := *x.ReadOnly + yym1058 := z.EncBinary() + _ = yym1058 + if false { + } else { + r.EncodeBool(bool(yy1057)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1041[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ReadOnly == nil { + r.EncodeNil() + } else { + yy1059 := *x.ReadOnly + yym1060 := z.EncBinary() + _ = yym1060 + if false { + } else { + r.EncodeBool(bool(yy1059)) + } + } + } + } + if yyr1041 || yy2arr1041 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AzureDiskVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1061 := z.DecBinary() + _ = yym1061 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1062 := r.ContainerType() + if yyct1062 == codecSelferValueTypeMap1234 { + yyl1062 := r.ReadMapStart() + if yyl1062 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1062, d) + } + } else if yyct1062 == codecSelferValueTypeArray1234 { + yyl1062 := r.ReadArrayStart() + if yyl1062 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1062, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AzureDiskVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1063Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1063Slc + var yyhl1063 bool = l >= 0 + for yyj1063 := 0; ; yyj1063++ { + if yyhl1063 { + if yyj1063 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1063Slc = r.DecodeBytes(yys1063Slc, true, true) + yys1063 := string(yys1063Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1063 { + case "diskName": + if r.TryDecodeAsNil() { + x.DiskName = "" + } else { + x.DiskName = string(r.DecodeString()) + } + case "diskURI": + if r.TryDecodeAsNil() { + x.DataDiskURI = "" + } else { + x.DataDiskURI = string(r.DecodeString()) + } + case "cachingMode": + if r.TryDecodeAsNil() { + if x.CachingMode != nil { + x.CachingMode = nil + } + } else { + if x.CachingMode == nil { + x.CachingMode = new(AzureDataDiskCachingMode) + } + x.CachingMode.CodecDecodeSelf(d) + } + case "fsType": + if r.TryDecodeAsNil() { + if x.FSType != nil { + x.FSType = nil + } + } else { + if x.FSType == nil { + x.FSType = new(string) + } + yym1068 := z.DecBinary() + _ = yym1068 + if false { + } else { + *((*string)(x.FSType)) = r.DecodeString() + } + } + case "readOnly": + if r.TryDecodeAsNil() { + if x.ReadOnly != nil { + x.ReadOnly = nil + } + } else { + if x.ReadOnly == nil { + x.ReadOnly = new(bool) + } + yym1070 := z.DecBinary() + _ = yym1070 + if false { + } else { + *((*bool)(x.ReadOnly)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys1063) + } // end switch yys1063 + } // end for yyj1063 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AzureDiskVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1071 int + var yyb1071 bool + var yyhl1071 bool = l >= 0 + yyj1071++ + if yyhl1071 { + yyb1071 = yyj1071 > l + } else { + yyb1071 = r.CheckBreak() + } + if yyb1071 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DiskName = "" + } else { + x.DiskName = string(r.DecodeString()) + } + yyj1071++ + if yyhl1071 { + yyb1071 = yyj1071 > l + } else { + yyb1071 = r.CheckBreak() + } + if yyb1071 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DataDiskURI = "" + } else { + x.DataDiskURI = string(r.DecodeString()) + } + yyj1071++ + if yyhl1071 { + yyb1071 = yyj1071 > l + } else { + yyb1071 = r.CheckBreak() + } + if yyb1071 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CachingMode != nil { + x.CachingMode = nil + } + } else { + if x.CachingMode == nil { + x.CachingMode = new(AzureDataDiskCachingMode) + } + x.CachingMode.CodecDecodeSelf(d) + } + yyj1071++ + if yyhl1071 { + yyb1071 = yyj1071 > l + } else { + yyb1071 = r.CheckBreak() + } + if yyb1071 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FSType != nil { + x.FSType = nil + } + } else { + if x.FSType == nil { + x.FSType = new(string) + } + yym1076 := z.DecBinary() + _ = yym1076 + if false { + } else { + *((*string)(x.FSType)) = r.DecodeString() + } + } + yyj1071++ + if yyhl1071 { + yyb1071 = yyj1071 > l + } else { + yyb1071 = r.CheckBreak() + } + if yyb1071 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ReadOnly != nil { + x.ReadOnly = nil + } + } else { + if x.ReadOnly == nil { + x.ReadOnly = new(bool) + } + yym1078 := z.DecBinary() + _ = yym1078 + if false { + } else { + *((*bool)(x.ReadOnly)) = r.DecodeBool() + } + } + for { + yyj1071++ + if yyhl1071 { + yyb1071 = yyj1071 > l + } else { + yyb1071 = r.CheckBreak() + } + if yyb1071 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1071-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ConfigMapVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1079 := z.EncBinary() + _ = yym1079 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1080 := !z.EncBinary() + yy2arr1080 := z.EncBasicHandle().StructToArray + var yyq1080 [3]bool + _, _, _ = yysep1080, yyq1080, yy2arr1080 + const yyr1080 bool = false + yyq1080[0] = x.Name != "" + yyq1080[1] = len(x.Items) != 0 + yyq1080[2] = x.DefaultMode != nil + var yynn1080 int + if yyr1080 || yy2arr1080 { + r.EncodeArrayStart(3) + } else { + yynn1080 = 0 + for _, b := range yyq1080 { + if b { + yynn1080++ + } + } + r.EncodeMapStart(yynn1080) + yynn1080 = 0 + } + if yyr1080 || yy2arr1080 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1080[0] { + yym1082 := z.EncBinary() + _ = yym1082 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1080[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1083 := z.EncBinary() + _ = yym1083 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr1080 || yy2arr1080 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1080[1] { + if x.Items == nil { + r.EncodeNil() + } else { + yym1085 := z.EncBinary() + _ = yym1085 + if false { + } else { + h.encSliceKeyToPath(([]KeyToPath)(x.Items), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1080[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1086 := z.EncBinary() + _ = yym1086 + if false { + } else { + h.encSliceKeyToPath(([]KeyToPath)(x.Items), e) + } + } + } + } + if yyr1080 || yy2arr1080 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1080[2] { + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy1088 := *x.DefaultMode + yym1089 := z.EncBinary() + _ = yym1089 + if false { + } else { + r.EncodeInt(int64(yy1088)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1080[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultMode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy1090 := *x.DefaultMode + yym1091 := z.EncBinary() + _ = yym1091 + if false { + } else { + r.EncodeInt(int64(yy1090)) + } + } + } + } + if yyr1080 || yy2arr1080 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ConfigMapVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1092 := z.DecBinary() + _ = yym1092 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1093 := r.ContainerType() + if yyct1093 == codecSelferValueTypeMap1234 { + yyl1093 := r.ReadMapStart() + if yyl1093 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1093, d) + } + } else if yyct1093 == codecSelferValueTypeArray1234 { + yyl1093 := r.ReadArrayStart() + if yyl1093 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1093, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ConfigMapVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1094Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1094Slc + var yyhl1094 bool = l >= 0 + for yyj1094 := 0; ; yyj1094++ { + if yyhl1094 { + if yyj1094 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1094Slc = r.DecodeBytes(yys1094Slc, true, true) + yys1094 := string(yys1094Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1094 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1096 := &x.Items + yym1097 := z.DecBinary() + _ = yym1097 + if false { + } else { + h.decSliceKeyToPath((*[]KeyToPath)(yyv1096), d) + } + } + case "defaultMode": + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym1099 := z.DecBinary() + _ = yym1099 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys1094) + } // end switch yys1094 + } // end for yyj1094 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ConfigMapVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1100 int + var yyb1100 bool + var yyhl1100 bool = l >= 0 + yyj1100++ + if yyhl1100 { + yyb1100 = yyj1100 > l + } else { + yyb1100 = r.CheckBreak() + } + if yyb1100 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1100++ + if yyhl1100 { + yyb1100 = yyj1100 > l + } else { + yyb1100 = r.CheckBreak() + } + if yyb1100 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1102 := &x.Items + yym1103 := z.DecBinary() + _ = yym1103 + if false { + } else { + h.decSliceKeyToPath((*[]KeyToPath)(yyv1102), d) + } + } + yyj1100++ + if yyhl1100 { + yyb1100 = yyj1100 > l + } else { + yyb1100 = r.CheckBreak() + } + if yyb1100 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym1105 := z.DecBinary() + _ = yym1105 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj1100++ + if yyhl1100 { + yyb1100 = yyj1100 > l + } else { + yyb1100 = r.CheckBreak() + } + if yyb1100 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1100-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *KeyToPath) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1106 := z.EncBinary() + _ = yym1106 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1107 := !z.EncBinary() + yy2arr1107 := z.EncBasicHandle().StructToArray + var yyq1107 [3]bool + _, _, _ = yysep1107, yyq1107, yy2arr1107 + const yyr1107 bool = false + yyq1107[2] = x.Mode != nil + var yynn1107 int + if yyr1107 || yy2arr1107 { + r.EncodeArrayStart(3) + } else { + yynn1107 = 2 + for _, b := range yyq1107 { + if b { + yynn1107++ + } + } + r.EncodeMapStart(yynn1107) + yynn1107 = 0 + } + if yyr1107 || yy2arr1107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1109 := z.EncBinary() + _ = yym1109 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1110 := z.EncBinary() + _ = yym1110 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1107 || yy2arr1107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1112 := z.EncBinary() + _ = yym1112 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1113 := z.EncBinary() + _ = yym1113 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr1107 || yy2arr1107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1107[2] { + if x.Mode == nil { + r.EncodeNil() + } else { + yy1115 := *x.Mode + yym1116 := z.EncBinary() + _ = yym1116 + if false { + } else { + r.EncodeInt(int64(yy1115)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1107[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("mode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Mode == nil { + r.EncodeNil() + } else { + yy1117 := *x.Mode + yym1118 := z.EncBinary() + _ = yym1118 + if false { + } else { + r.EncodeInt(int64(yy1117)) + } + } + } + } + if yyr1107 || yy2arr1107 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *KeyToPath) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1119 := z.DecBinary() + _ = yym1119 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1120 := r.ContainerType() + if yyct1120 == codecSelferValueTypeMap1234 { + yyl1120 := r.ReadMapStart() + if yyl1120 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1120, d) + } + } else if yyct1120 == codecSelferValueTypeArray1234 { + yyl1120 := r.ReadArrayStart() + if yyl1120 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1120, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *KeyToPath) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1121Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1121Slc + var yyhl1121 bool = l >= 0 + for yyj1121 := 0; ; yyj1121++ { + if yyhl1121 { + if yyj1121 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1121Slc = r.DecodeBytes(yys1121Slc, true, true) + yys1121 := string(yys1121Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1121 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "mode": + if r.TryDecodeAsNil() { + if x.Mode != nil { + x.Mode = nil + } + } else { + if x.Mode == nil { + x.Mode = new(int32) + } + yym1125 := z.DecBinary() + _ = yym1125 + if false { + } else { + *((*int32)(x.Mode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys1121) + } // end switch yys1121 + } // end for yyj1121 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *KeyToPath) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1126 int + var yyb1126 bool + var yyhl1126 bool = l >= 0 + yyj1126++ + if yyhl1126 { + yyb1126 = yyj1126 > l + } else { + yyb1126 = r.CheckBreak() + } + if yyb1126 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj1126++ + if yyhl1126 { + yyb1126 = yyj1126 > l + } else { + yyb1126 = r.CheckBreak() + } + if yyb1126 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj1126++ + if yyhl1126 { + yyb1126 = yyj1126 > l + } else { + yyb1126 = r.CheckBreak() + } + if yyb1126 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Mode != nil { + x.Mode = nil + } + } else { + if x.Mode == nil { + x.Mode = new(int32) + } + yym1130 := z.DecBinary() + _ = yym1130 + if false { + } else { + *((*int32)(x.Mode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj1126++ + if yyhl1126 { + yyb1126 = yyj1126 > l + } else { + yyb1126 = r.CheckBreak() + } + if yyb1126 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1126-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerPort) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1131 := z.EncBinary() + _ = yym1131 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1132 := !z.EncBinary() + yy2arr1132 := z.EncBasicHandle().StructToArray + var yyq1132 [5]bool + _, _, _ = yysep1132, yyq1132, yy2arr1132 + const yyr1132 bool = false + yyq1132[0] = x.Name != "" + yyq1132[1] = x.HostPort != 0 + yyq1132[3] = x.Protocol != "" + yyq1132[4] = x.HostIP != "" + var yynn1132 int + if yyr1132 || yy2arr1132 { + r.EncodeArrayStart(5) + } else { + yynn1132 = 1 + for _, b := range yyq1132 { + if b { + yynn1132++ + } + } + r.EncodeMapStart(yynn1132) + yynn1132 = 0 + } + if yyr1132 || yy2arr1132 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1132[0] { + yym1134 := z.EncBinary() + _ = yym1134 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1132[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1135 := z.EncBinary() + _ = yym1135 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr1132 || yy2arr1132 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1132[1] { + yym1137 := z.EncBinary() + _ = yym1137 + if false { + } else { + r.EncodeInt(int64(x.HostPort)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1132[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1138 := z.EncBinary() + _ = yym1138 + if false { + } else { + r.EncodeInt(int64(x.HostPort)) + } + } + } + if yyr1132 || yy2arr1132 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1140 := z.EncBinary() + _ = yym1140 + if false { + } else { + r.EncodeInt(int64(x.ContainerPort)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerPort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1141 := z.EncBinary() + _ = yym1141 + if false { + } else { + r.EncodeInt(int64(x.ContainerPort)) + } + } + if yyr1132 || yy2arr1132 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1132[3] { + x.Protocol.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1132[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("protocol")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Protocol.CodecEncodeSelf(e) + } + } + if yyr1132 || yy2arr1132 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1132[4] { + yym1144 := z.EncBinary() + _ = yym1144 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.HostIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1132[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1145 := z.EncBinary() + _ = yym1145 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.HostIP)) + } + } + } + if yyr1132 || yy2arr1132 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerPort) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1146 := z.DecBinary() + _ = yym1146 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1147 := r.ContainerType() + if yyct1147 == codecSelferValueTypeMap1234 { + yyl1147 := r.ReadMapStart() + if yyl1147 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1147, d) + } + } else if yyct1147 == codecSelferValueTypeArray1234 { + yyl1147 := r.ReadArrayStart() + if yyl1147 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1147, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerPort) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1148Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1148Slc + var yyhl1148 bool = l >= 0 + for yyj1148 := 0; ; yyj1148++ { + if yyhl1148 { + if yyj1148 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1148Slc = r.DecodeBytes(yys1148Slc, true, true) + yys1148 := string(yys1148Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1148 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "hostPort": + if r.TryDecodeAsNil() { + x.HostPort = 0 + } else { + x.HostPort = int32(r.DecodeInt(32)) + } + case "containerPort": + if r.TryDecodeAsNil() { + x.ContainerPort = 0 + } else { + x.ContainerPort = int32(r.DecodeInt(32)) + } + case "protocol": + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + case "hostIP": + if r.TryDecodeAsNil() { + x.HostIP = "" + } else { + x.HostIP = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1148) + } // end switch yys1148 + } // end for yyj1148 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerPort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1154 int + var yyb1154 bool + var yyhl1154 bool = l >= 0 + yyj1154++ + if yyhl1154 { + yyb1154 = yyj1154 > l + } else { + yyb1154 = r.CheckBreak() + } + if yyb1154 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1154++ + if yyhl1154 { + yyb1154 = yyj1154 > l + } else { + yyb1154 = r.CheckBreak() + } + if yyb1154 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostPort = 0 + } else { + x.HostPort = int32(r.DecodeInt(32)) + } + yyj1154++ + if yyhl1154 { + yyb1154 = yyj1154 > l + } else { + yyb1154 = r.CheckBreak() + } + if yyb1154 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerPort = 0 + } else { + x.ContainerPort = int32(r.DecodeInt(32)) + } + yyj1154++ + if yyhl1154 { + yyb1154 = yyj1154 > l + } else { + yyb1154 = r.CheckBreak() + } + if yyb1154 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + yyj1154++ + if yyhl1154 { + yyb1154 = yyj1154 > l + } else { + yyb1154 = r.CheckBreak() + } + if yyb1154 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostIP = "" + } else { + x.HostIP = string(r.DecodeString()) + } + for { + yyj1154++ + if yyhl1154 { + yyb1154 = yyj1154 > l + } else { + yyb1154 = r.CheckBreak() + } + if yyb1154 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1154-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *VolumeMount) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1160 := z.EncBinary() + _ = yym1160 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1161 := !z.EncBinary() + yy2arr1161 := z.EncBasicHandle().StructToArray + var yyq1161 [4]bool + _, _, _ = yysep1161, yyq1161, yy2arr1161 + const yyr1161 bool = false + yyq1161[1] = x.ReadOnly != false + yyq1161[3] = x.SubPath != "" + var yynn1161 int + if yyr1161 || yy2arr1161 { + r.EncodeArrayStart(4) + } else { + yynn1161 = 2 + for _, b := range yyq1161 { + if b { + yynn1161++ + } + } + r.EncodeMapStart(yynn1161) + yynn1161 = 0 + } + if yyr1161 || yy2arr1161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1163 := z.EncBinary() + _ = yym1163 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1164 := z.EncBinary() + _ = yym1164 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1161 || yy2arr1161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1161[1] { + yym1166 := z.EncBinary() + _ = yym1166 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1161[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1167 := z.EncBinary() + _ = yym1167 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr1161 || yy2arr1161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1169 := z.EncBinary() + _ = yym1169 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.MountPath)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("mountPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1170 := z.EncBinary() + _ = yym1170 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.MountPath)) + } + } + if yyr1161 || yy2arr1161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1161[3] { + yym1172 := z.EncBinary() + _ = yym1172 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SubPath)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1161[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("subPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1173 := z.EncBinary() + _ = yym1173 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SubPath)) + } + } + } + if yyr1161 || yy2arr1161 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *VolumeMount) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1174 := z.DecBinary() + _ = yym1174 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1175 := r.ContainerType() + if yyct1175 == codecSelferValueTypeMap1234 { + yyl1175 := r.ReadMapStart() + if yyl1175 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1175, d) + } + } else if yyct1175 == codecSelferValueTypeArray1234 { + yyl1175 := r.ReadArrayStart() + if yyl1175 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1175, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *VolumeMount) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1176Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1176Slc + var yyhl1176 bool = l >= 0 + for yyj1176 := 0; ; yyj1176++ { + if yyhl1176 { + if yyj1176 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1176Slc = r.DecodeBytes(yys1176Slc, true, true) + yys1176 := string(yys1176Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1176 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + case "mountPath": + if r.TryDecodeAsNil() { + x.MountPath = "" + } else { + x.MountPath = string(r.DecodeString()) + } + case "subPath": + if r.TryDecodeAsNil() { + x.SubPath = "" + } else { + x.SubPath = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1176) + } // end switch yys1176 + } // end for yyj1176 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *VolumeMount) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1181 int + var yyb1181 bool + var yyhl1181 bool = l >= 0 + yyj1181++ + if yyhl1181 { + yyb1181 = yyj1181 > l + } else { + yyb1181 = r.CheckBreak() + } + if yyb1181 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1181++ + if yyhl1181 { + yyb1181 = yyj1181 > l + } else { + yyb1181 = r.CheckBreak() + } + if yyb1181 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + x.ReadOnly = bool(r.DecodeBool()) + } + yyj1181++ + if yyhl1181 { + yyb1181 = yyj1181 > l + } else { + yyb1181 = r.CheckBreak() + } + if yyb1181 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MountPath = "" + } else { + x.MountPath = string(r.DecodeString()) + } + yyj1181++ + if yyhl1181 { + yyb1181 = yyj1181 > l + } else { + yyb1181 = r.CheckBreak() + } + if yyb1181 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SubPath = "" + } else { + x.SubPath = string(r.DecodeString()) + } + for { + yyj1181++ + if yyhl1181 { + yyb1181 = yyj1181 > l + } else { + yyb1181 = r.CheckBreak() + } + if yyb1181 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1181-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EnvVar) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1186 := z.EncBinary() + _ = yym1186 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1187 := !z.EncBinary() + yy2arr1187 := z.EncBasicHandle().StructToArray + var yyq1187 [3]bool + _, _, _ = yysep1187, yyq1187, yy2arr1187 + const yyr1187 bool = false + yyq1187[1] = x.Value != "" + yyq1187[2] = x.ValueFrom != nil + var yynn1187 int + if yyr1187 || yy2arr1187 { + r.EncodeArrayStart(3) + } else { + yynn1187 = 1 + for _, b := range yyq1187 { + if b { + yynn1187++ + } + } + r.EncodeMapStart(yynn1187) + yynn1187 = 0 + } + if yyr1187 || yy2arr1187 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1189 := z.EncBinary() + _ = yym1189 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1190 := z.EncBinary() + _ = yym1190 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1187 || yy2arr1187 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1187[1] { + yym1192 := z.EncBinary() + _ = yym1192 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1187[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1193 := z.EncBinary() + _ = yym1193 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + } + if yyr1187 || yy2arr1187 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1187[2] { + if x.ValueFrom == nil { + r.EncodeNil() + } else { + x.ValueFrom.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1187[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("valueFrom")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ValueFrom == nil { + r.EncodeNil() + } else { + x.ValueFrom.CodecEncodeSelf(e) + } + } + } + if yyr1187 || yy2arr1187 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EnvVar) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1195 := z.DecBinary() + _ = yym1195 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1196 := r.ContainerType() + if yyct1196 == codecSelferValueTypeMap1234 { + yyl1196 := r.ReadMapStart() + if yyl1196 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1196, d) + } + } else if yyct1196 == codecSelferValueTypeArray1234 { + yyl1196 := r.ReadArrayStart() + if yyl1196 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1196, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EnvVar) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1197Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1197Slc + var yyhl1197 bool = l >= 0 + for yyj1197 := 0; ; yyj1197++ { + if yyhl1197 { + if yyj1197 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1197Slc = r.DecodeBytes(yys1197Slc, true, true) + yys1197 := string(yys1197Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1197 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + case "valueFrom": + if r.TryDecodeAsNil() { + if x.ValueFrom != nil { + x.ValueFrom = nil + } + } else { + if x.ValueFrom == nil { + x.ValueFrom = new(EnvVarSource) + } + x.ValueFrom.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1197) + } // end switch yys1197 + } // end for yyj1197 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EnvVar) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1201 int + var yyb1201 bool + var yyhl1201 bool = l >= 0 + yyj1201++ + if yyhl1201 { + yyb1201 = yyj1201 > l + } else { + yyb1201 = r.CheckBreak() + } + if yyb1201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1201++ + if yyhl1201 { + yyb1201 = yyj1201 > l + } else { + yyb1201 = r.CheckBreak() + } + if yyb1201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + yyj1201++ + if yyhl1201 { + yyb1201 = yyj1201 > l + } else { + yyb1201 = r.CheckBreak() + } + if yyb1201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ValueFrom != nil { + x.ValueFrom = nil + } + } else { + if x.ValueFrom == nil { + x.ValueFrom = new(EnvVarSource) + } + x.ValueFrom.CodecDecodeSelf(d) + } + for { + yyj1201++ + if yyhl1201 { + yyb1201 = yyj1201 > l + } else { + yyb1201 = r.CheckBreak() + } + if yyb1201 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1201-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EnvVarSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1205 := z.EncBinary() + _ = yym1205 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1206 := !z.EncBinary() + yy2arr1206 := z.EncBasicHandle().StructToArray + var yyq1206 [4]bool + _, _, _ = yysep1206, yyq1206, yy2arr1206 + const yyr1206 bool = false + yyq1206[0] = x.FieldRef != nil + yyq1206[1] = x.ResourceFieldRef != nil + yyq1206[2] = x.ConfigMapKeyRef != nil + yyq1206[3] = x.SecretKeyRef != nil + var yynn1206 int + if yyr1206 || yy2arr1206 { + r.EncodeArrayStart(4) + } else { + yynn1206 = 0 + for _, b := range yyq1206 { + if b { + yynn1206++ + } + } + r.EncodeMapStart(yynn1206) + yynn1206 = 0 + } + if yyr1206 || yy2arr1206 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1206[0] { + if x.FieldRef == nil { + r.EncodeNil() + } else { + x.FieldRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1206[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FieldRef == nil { + r.EncodeNil() + } else { + x.FieldRef.CodecEncodeSelf(e) + } + } + } + if yyr1206 || yy2arr1206 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1206[1] { + if x.ResourceFieldRef == nil { + r.EncodeNil() + } else { + x.ResourceFieldRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1206[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceFieldRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ResourceFieldRef == nil { + r.EncodeNil() + } else { + x.ResourceFieldRef.CodecEncodeSelf(e) + } + } + } + if yyr1206 || yy2arr1206 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1206[2] { + if x.ConfigMapKeyRef == nil { + r.EncodeNil() + } else { + x.ConfigMapKeyRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1206[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("configMapKeyRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ConfigMapKeyRef == nil { + r.EncodeNil() + } else { + x.ConfigMapKeyRef.CodecEncodeSelf(e) + } + } + } + if yyr1206 || yy2arr1206 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1206[3] { + if x.SecretKeyRef == nil { + r.EncodeNil() + } else { + x.SecretKeyRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1206[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretKeyRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecretKeyRef == nil { + r.EncodeNil() + } else { + x.SecretKeyRef.CodecEncodeSelf(e) + } + } + } + if yyr1206 || yy2arr1206 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EnvVarSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1211 := z.DecBinary() + _ = yym1211 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1212 := r.ContainerType() + if yyct1212 == codecSelferValueTypeMap1234 { + yyl1212 := r.ReadMapStart() + if yyl1212 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1212, d) + } + } else if yyct1212 == codecSelferValueTypeArray1234 { + yyl1212 := r.ReadArrayStart() + if yyl1212 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1212, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EnvVarSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1213Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1213Slc + var yyhl1213 bool = l >= 0 + for yyj1213 := 0; ; yyj1213++ { + if yyhl1213 { + if yyj1213 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1213Slc = r.DecodeBytes(yys1213Slc, true, true) + yys1213 := string(yys1213Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1213 { + case "fieldRef": + if r.TryDecodeAsNil() { + if x.FieldRef != nil { + x.FieldRef = nil + } + } else { + if x.FieldRef == nil { + x.FieldRef = new(ObjectFieldSelector) + } + x.FieldRef.CodecDecodeSelf(d) + } + case "resourceFieldRef": + if r.TryDecodeAsNil() { + if x.ResourceFieldRef != nil { + x.ResourceFieldRef = nil + } + } else { + if x.ResourceFieldRef == nil { + x.ResourceFieldRef = new(ResourceFieldSelector) + } + x.ResourceFieldRef.CodecDecodeSelf(d) + } + case "configMapKeyRef": + if r.TryDecodeAsNil() { + if x.ConfigMapKeyRef != nil { + x.ConfigMapKeyRef = nil + } + } else { + if x.ConfigMapKeyRef == nil { + x.ConfigMapKeyRef = new(ConfigMapKeySelector) + } + x.ConfigMapKeyRef.CodecDecodeSelf(d) + } + case "secretKeyRef": + if r.TryDecodeAsNil() { + if x.SecretKeyRef != nil { + x.SecretKeyRef = nil + } + } else { + if x.SecretKeyRef == nil { + x.SecretKeyRef = new(SecretKeySelector) + } + x.SecretKeyRef.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1213) + } // end switch yys1213 + } // end for yyj1213 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EnvVarSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1218 int + var yyb1218 bool + var yyhl1218 bool = l >= 0 + yyj1218++ + if yyhl1218 { + yyb1218 = yyj1218 > l + } else { + yyb1218 = r.CheckBreak() + } + if yyb1218 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FieldRef != nil { + x.FieldRef = nil + } + } else { + if x.FieldRef == nil { + x.FieldRef = new(ObjectFieldSelector) + } + x.FieldRef.CodecDecodeSelf(d) + } + yyj1218++ + if yyhl1218 { + yyb1218 = yyj1218 > l + } else { + yyb1218 = r.CheckBreak() + } + if yyb1218 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ResourceFieldRef != nil { + x.ResourceFieldRef = nil + } + } else { + if x.ResourceFieldRef == nil { + x.ResourceFieldRef = new(ResourceFieldSelector) + } + x.ResourceFieldRef.CodecDecodeSelf(d) + } + yyj1218++ + if yyhl1218 { + yyb1218 = yyj1218 > l + } else { + yyb1218 = r.CheckBreak() + } + if yyb1218 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ConfigMapKeyRef != nil { + x.ConfigMapKeyRef = nil + } + } else { + if x.ConfigMapKeyRef == nil { + x.ConfigMapKeyRef = new(ConfigMapKeySelector) + } + x.ConfigMapKeyRef.CodecDecodeSelf(d) + } + yyj1218++ + if yyhl1218 { + yyb1218 = yyj1218 > l + } else { + yyb1218 = r.CheckBreak() + } + if yyb1218 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecretKeyRef != nil { + x.SecretKeyRef = nil + } + } else { + if x.SecretKeyRef == nil { + x.SecretKeyRef = new(SecretKeySelector) + } + x.SecretKeyRef.CodecDecodeSelf(d) + } + for { + yyj1218++ + if yyhl1218 { + yyb1218 = yyj1218 > l + } else { + yyb1218 = r.CheckBreak() + } + if yyb1218 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1218-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ObjectFieldSelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1223 := z.EncBinary() + _ = yym1223 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1224 := !z.EncBinary() + yy2arr1224 := z.EncBasicHandle().StructToArray + var yyq1224 [2]bool + _, _, _ = yysep1224, yyq1224, yy2arr1224 + const yyr1224 bool = false + yyq1224[0] = x.APIVersion != "" + var yynn1224 int + if yyr1224 || yy2arr1224 { + r.EncodeArrayStart(2) + } else { + yynn1224 = 1 + for _, b := range yyq1224 { + if b { + yynn1224++ + } + } + r.EncodeMapStart(yynn1224) + yynn1224 = 0 + } + if yyr1224 || yy2arr1224 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1224[0] { + yym1226 := z.EncBinary() + _ = yym1226 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1224[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1227 := z.EncBinary() + _ = yym1227 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr1224 || yy2arr1224 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1229 := z.EncBinary() + _ = yym1229 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldPath)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1230 := z.EncBinary() + _ = yym1230 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldPath)) + } + } + if yyr1224 || yy2arr1224 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ObjectFieldSelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1231 := z.DecBinary() + _ = yym1231 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1232 := r.ContainerType() + if yyct1232 == codecSelferValueTypeMap1234 { + yyl1232 := r.ReadMapStart() + if yyl1232 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1232, d) + } + } else if yyct1232 == codecSelferValueTypeArray1234 { + yyl1232 := r.ReadArrayStart() + if yyl1232 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1232, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ObjectFieldSelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1233Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1233Slc + var yyhl1233 bool = l >= 0 + for yyj1233 := 0; ; yyj1233++ { + if yyhl1233 { + if yyj1233 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1233Slc = r.DecodeBytes(yys1233Slc, true, true) + yys1233 := string(yys1233Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1233 { + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "fieldPath": + if r.TryDecodeAsNil() { + x.FieldPath = "" + } else { + x.FieldPath = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1233) + } // end switch yys1233 + } // end for yyj1233 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ObjectFieldSelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1236 int + var yyb1236 bool + var yyhl1236 bool = l >= 0 + yyj1236++ + if yyhl1236 { + yyb1236 = yyj1236 > l + } else { + yyb1236 = r.CheckBreak() + } + if yyb1236 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj1236++ + if yyhl1236 { + yyb1236 = yyj1236 > l + } else { + yyb1236 = r.CheckBreak() + } + if yyb1236 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FieldPath = "" + } else { + x.FieldPath = string(r.DecodeString()) + } + for { + yyj1236++ + if yyhl1236 { + yyb1236 = yyj1236 > l + } else { + yyb1236 = r.CheckBreak() + } + if yyb1236 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1236-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceFieldSelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1239 := z.EncBinary() + _ = yym1239 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1240 := !z.EncBinary() + yy2arr1240 := z.EncBasicHandle().StructToArray + var yyq1240 [3]bool + _, _, _ = yysep1240, yyq1240, yy2arr1240 + const yyr1240 bool = false + yyq1240[0] = x.ContainerName != "" + yyq1240[2] = true + var yynn1240 int + if yyr1240 || yy2arr1240 { + r.EncodeArrayStart(3) + } else { + yynn1240 = 1 + for _, b := range yyq1240 { + if b { + yynn1240++ + } + } + r.EncodeMapStart(yynn1240) + yynn1240 = 0 + } + if yyr1240 || yy2arr1240 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1240[0] { + yym1242 := z.EncBinary() + _ = yym1242 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1240[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1243 := z.EncBinary() + _ = yym1243 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerName)) + } + } + } + if yyr1240 || yy2arr1240 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1245 := z.EncBinary() + _ = yym1245 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Resource)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resource")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1246 := z.EncBinary() + _ = yym1246 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Resource)) + } + } + if yyr1240 || yy2arr1240 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1240[2] { + yy1248 := &x.Divisor + yym1249 := z.EncBinary() + _ = yym1249 + if false { + } else if z.HasExtensions() && z.EncExt(yy1248) { + } else if !yym1249 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1248) + } else { + z.EncFallback(yy1248) + } + } else { + r.EncodeNil() + } + } else { + if yyq1240[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("divisor")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1250 := &x.Divisor + yym1251 := z.EncBinary() + _ = yym1251 + if false { + } else if z.HasExtensions() && z.EncExt(yy1250) { + } else if !yym1251 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1250) + } else { + z.EncFallback(yy1250) + } + } + } + if yyr1240 || yy2arr1240 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceFieldSelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1252 := z.DecBinary() + _ = yym1252 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1253 := r.ContainerType() + if yyct1253 == codecSelferValueTypeMap1234 { + yyl1253 := r.ReadMapStart() + if yyl1253 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1253, d) + } + } else if yyct1253 == codecSelferValueTypeArray1234 { + yyl1253 := r.ReadArrayStart() + if yyl1253 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1253, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceFieldSelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1254Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1254Slc + var yyhl1254 bool = l >= 0 + for yyj1254 := 0; ; yyj1254++ { + if yyhl1254 { + if yyj1254 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1254Slc = r.DecodeBytes(yys1254Slc, true, true) + yys1254 := string(yys1254Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1254 { + case "containerName": + if r.TryDecodeAsNil() { + x.ContainerName = "" + } else { + x.ContainerName = string(r.DecodeString()) + } + case "resource": + if r.TryDecodeAsNil() { + x.Resource = "" + } else { + x.Resource = string(r.DecodeString()) + } + case "divisor": + if r.TryDecodeAsNil() { + x.Divisor = pkg3_resource.Quantity{} + } else { + yyv1257 := &x.Divisor + yym1258 := z.DecBinary() + _ = yym1258 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1257) { + } else if !yym1258 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1257) + } else { + z.DecFallback(yyv1257, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys1254) + } // end switch yys1254 + } // end for yyj1254 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceFieldSelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1259 int + var yyb1259 bool + var yyhl1259 bool = l >= 0 + yyj1259++ + if yyhl1259 { + yyb1259 = yyj1259 > l + } else { + yyb1259 = r.CheckBreak() + } + if yyb1259 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerName = "" + } else { + x.ContainerName = string(r.DecodeString()) + } + yyj1259++ + if yyhl1259 { + yyb1259 = yyj1259 > l + } else { + yyb1259 = r.CheckBreak() + } + if yyb1259 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Resource = "" + } else { + x.Resource = string(r.DecodeString()) + } + yyj1259++ + if yyhl1259 { + yyb1259 = yyj1259 > l + } else { + yyb1259 = r.CheckBreak() + } + if yyb1259 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Divisor = pkg3_resource.Quantity{} + } else { + yyv1262 := &x.Divisor + yym1263 := z.DecBinary() + _ = yym1263 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1262) { + } else if !yym1263 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1262) + } else { + z.DecFallback(yyv1262, false) + } + } + for { + yyj1259++ + if yyhl1259 { + yyb1259 = yyj1259 > l + } else { + yyb1259 = r.CheckBreak() + } + if yyb1259 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1259-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ConfigMapKeySelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1264 := z.EncBinary() + _ = yym1264 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1265 := !z.EncBinary() + yy2arr1265 := z.EncBasicHandle().StructToArray + var yyq1265 [2]bool + _, _, _ = yysep1265, yyq1265, yy2arr1265 + const yyr1265 bool = false + yyq1265[0] = x.Name != "" + var yynn1265 int + if yyr1265 || yy2arr1265 { + r.EncodeArrayStart(2) + } else { + yynn1265 = 1 + for _, b := range yyq1265 { + if b { + yynn1265++ + } + } + r.EncodeMapStart(yynn1265) + yynn1265 = 0 + } + if yyr1265 || yy2arr1265 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1265[0] { + yym1267 := z.EncBinary() + _ = yym1267 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1265[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1268 := z.EncBinary() + _ = yym1268 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr1265 || yy2arr1265 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1270 := z.EncBinary() + _ = yym1270 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1271 := z.EncBinary() + _ = yym1271 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1265 || yy2arr1265 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ConfigMapKeySelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1272 := z.DecBinary() + _ = yym1272 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1273 := r.ContainerType() + if yyct1273 == codecSelferValueTypeMap1234 { + yyl1273 := r.ReadMapStart() + if yyl1273 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1273, d) + } + } else if yyct1273 == codecSelferValueTypeArray1234 { + yyl1273 := r.ReadArrayStart() + if yyl1273 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1273, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ConfigMapKeySelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1274Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1274Slc + var yyhl1274 bool = l >= 0 + for yyj1274 := 0; ; yyj1274++ { + if yyhl1274 { + if yyj1274 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1274Slc = r.DecodeBytes(yys1274Slc, true, true) + yys1274 := string(yys1274Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1274 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1274) + } // end switch yys1274 + } // end for yyj1274 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ConfigMapKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1277 int + var yyb1277 bool + var yyhl1277 bool = l >= 0 + yyj1277++ + if yyhl1277 { + yyb1277 = yyj1277 > l + } else { + yyb1277 = r.CheckBreak() + } + if yyb1277 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1277++ + if yyhl1277 { + yyb1277 = yyj1277 > l + } else { + yyb1277 = r.CheckBreak() + } + if yyb1277 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + for { + yyj1277++ + if yyhl1277 { + yyb1277 = yyj1277 > l + } else { + yyb1277 = r.CheckBreak() + } + if yyb1277 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1277-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SecretKeySelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1280 := z.EncBinary() + _ = yym1280 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1281 := !z.EncBinary() + yy2arr1281 := z.EncBasicHandle().StructToArray + var yyq1281 [2]bool + _, _, _ = yysep1281, yyq1281, yy2arr1281 + const yyr1281 bool = false + yyq1281[0] = x.Name != "" + var yynn1281 int + if yyr1281 || yy2arr1281 { + r.EncodeArrayStart(2) + } else { + yynn1281 = 1 + for _, b := range yyq1281 { + if b { + yynn1281++ + } + } + r.EncodeMapStart(yynn1281) + yynn1281 = 0 + } + if yyr1281 || yy2arr1281 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1281[0] { + yym1283 := z.EncBinary() + _ = yym1283 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1281[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1284 := z.EncBinary() + _ = yym1284 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr1281 || yy2arr1281 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1286 := z.EncBinary() + _ = yym1286 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1287 := z.EncBinary() + _ = yym1287 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1281 || yy2arr1281 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecretKeySelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1288 := z.DecBinary() + _ = yym1288 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1289 := r.ContainerType() + if yyct1289 == codecSelferValueTypeMap1234 { + yyl1289 := r.ReadMapStart() + if yyl1289 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1289, d) + } + } else if yyct1289 == codecSelferValueTypeArray1234 { + yyl1289 := r.ReadArrayStart() + if yyl1289 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1289, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecretKeySelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1290Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1290Slc + var yyhl1290 bool = l >= 0 + for yyj1290 := 0; ; yyj1290++ { + if yyhl1290 { + if yyj1290 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1290Slc = r.DecodeBytes(yys1290Slc, true, true) + yys1290 := string(yys1290Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1290 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1290) + } // end switch yys1290 + } // end for yyj1290 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecretKeySelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1293 int + var yyb1293 bool + var yyhl1293 bool = l >= 0 + yyj1293++ + if yyhl1293 { + yyb1293 = yyj1293 > l + } else { + yyb1293 = r.CheckBreak() + } + if yyb1293 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1293++ + if yyhl1293 { + yyb1293 = yyj1293 > l + } else { + yyb1293 = r.CheckBreak() + } + if yyb1293 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + for { + yyj1293++ + if yyhl1293 { + yyb1293 = yyj1293 > l + } else { + yyb1293 = r.CheckBreak() + } + if yyb1293 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1293-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HTTPHeader) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1296 := z.EncBinary() + _ = yym1296 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1297 := !z.EncBinary() + yy2arr1297 := z.EncBasicHandle().StructToArray + var yyq1297 [2]bool + _, _, _ = yysep1297, yyq1297, yy2arr1297 + const yyr1297 bool = false + var yynn1297 int + if yyr1297 || yy2arr1297 { + r.EncodeArrayStart(2) + } else { + yynn1297 = 2 + for _, b := range yyq1297 { + if b { + yynn1297++ + } + } + r.EncodeMapStart(yynn1297) + yynn1297 = 0 + } + if yyr1297 || yy2arr1297 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1299 := z.EncBinary() + _ = yym1299 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1300 := z.EncBinary() + _ = yym1300 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1297 || yy2arr1297 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1302 := z.EncBinary() + _ = yym1302 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1303 := z.EncBinary() + _ = yym1303 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + if yyr1297 || yy2arr1297 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HTTPHeader) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1304 := z.DecBinary() + _ = yym1304 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1305 := r.ContainerType() + if yyct1305 == codecSelferValueTypeMap1234 { + yyl1305 := r.ReadMapStart() + if yyl1305 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1305, d) + } + } else if yyct1305 == codecSelferValueTypeArray1234 { + yyl1305 := r.ReadArrayStart() + if yyl1305 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1305, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HTTPHeader) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1306Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1306Slc + var yyhl1306 bool = l >= 0 + for yyj1306 := 0; ; yyj1306++ { + if yyhl1306 { + if yyj1306 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1306Slc = r.DecodeBytes(yys1306Slc, true, true) + yys1306 := string(yys1306Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1306 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1306) + } // end switch yys1306 + } // end for yyj1306 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HTTPHeader) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1309 int + var yyb1309 bool + var yyhl1309 bool = l >= 0 + yyj1309++ + if yyhl1309 { + yyb1309 = yyj1309 > l + } else { + yyb1309 = r.CheckBreak() + } + if yyb1309 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1309++ + if yyhl1309 { + yyb1309 = yyj1309 > l + } else { + yyb1309 = r.CheckBreak() + } + if yyb1309 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + for { + yyj1309++ + if yyhl1309 { + yyb1309 = yyj1309 > l + } else { + yyb1309 = r.CheckBreak() + } + if yyb1309 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1309-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HTTPGetAction) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1312 := z.EncBinary() + _ = yym1312 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1313 := !z.EncBinary() + yy2arr1313 := z.EncBasicHandle().StructToArray + var yyq1313 [5]bool + _, _, _ = yysep1313, yyq1313, yy2arr1313 + const yyr1313 bool = false + yyq1313[0] = x.Path != "" + yyq1313[2] = x.Host != "" + yyq1313[3] = x.Scheme != "" + yyq1313[4] = len(x.HTTPHeaders) != 0 + var yynn1313 int + if yyr1313 || yy2arr1313 { + r.EncodeArrayStart(5) + } else { + yynn1313 = 1 + for _, b := range yyq1313 { + if b { + yynn1313++ + } + } + r.EncodeMapStart(yynn1313) + yynn1313 = 0 + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1313[0] { + yym1315 := z.EncBinary() + _ = yym1315 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1313[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1316 := z.EncBinary() + _ = yym1316 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1318 := &x.Port + yym1319 := z.EncBinary() + _ = yym1319 + if false { + } else if z.HasExtensions() && z.EncExt(yy1318) { + } else if !yym1319 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1318) + } else { + z.EncFallback(yy1318) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1320 := &x.Port + yym1321 := z.EncBinary() + _ = yym1321 + if false { + } else if z.HasExtensions() && z.EncExt(yy1320) { + } else if !yym1321 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1320) + } else { + z.EncFallback(yy1320) + } + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1313[2] { + yym1323 := z.EncBinary() + _ = yym1323 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1313[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("host")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1324 := z.EncBinary() + _ = yym1324 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1313[3] { + x.Scheme.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1313[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("scheme")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Scheme.CodecEncodeSelf(e) + } + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1313[4] { + if x.HTTPHeaders == nil { + r.EncodeNil() + } else { + yym1327 := z.EncBinary() + _ = yym1327 + if false { + } else { + h.encSliceHTTPHeader(([]HTTPHeader)(x.HTTPHeaders), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1313[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("httpHeaders")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HTTPHeaders == nil { + r.EncodeNil() + } else { + yym1328 := z.EncBinary() + _ = yym1328 + if false { + } else { + h.encSliceHTTPHeader(([]HTTPHeader)(x.HTTPHeaders), e) + } + } + } + } + if yyr1313 || yy2arr1313 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HTTPGetAction) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1329 := z.DecBinary() + _ = yym1329 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1330 := r.ContainerType() + if yyct1330 == codecSelferValueTypeMap1234 { + yyl1330 := r.ReadMapStart() + if yyl1330 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1330, d) + } + } else if yyct1330 == codecSelferValueTypeArray1234 { + yyl1330 := r.ReadArrayStart() + if yyl1330 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1330, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HTTPGetAction) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1331Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1331Slc + var yyhl1331 bool = l >= 0 + for yyj1331 := 0; ; yyj1331++ { + if yyhl1331 { + if yyj1331 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1331Slc = r.DecodeBytes(yys1331Slc, true, true) + yys1331 := string(yys1331Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1331 { + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "port": + if r.TryDecodeAsNil() { + x.Port = pkg4_intstr.IntOrString{} + } else { + yyv1333 := &x.Port + yym1334 := z.DecBinary() + _ = yym1334 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1333) { + } else if !yym1334 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1333) + } else { + z.DecFallback(yyv1333, false) + } + } + case "host": + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + case "scheme": + if r.TryDecodeAsNil() { + x.Scheme = "" + } else { + x.Scheme = URIScheme(r.DecodeString()) + } + case "httpHeaders": + if r.TryDecodeAsNil() { + x.HTTPHeaders = nil + } else { + yyv1337 := &x.HTTPHeaders + yym1338 := z.DecBinary() + _ = yym1338 + if false { + } else { + h.decSliceHTTPHeader((*[]HTTPHeader)(yyv1337), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1331) + } // end switch yys1331 + } // end for yyj1331 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HTTPGetAction) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1339 int + var yyb1339 bool + var yyhl1339 bool = l >= 0 + yyj1339++ + if yyhl1339 { + yyb1339 = yyj1339 > l + } else { + yyb1339 = r.CheckBreak() + } + if yyb1339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj1339++ + if yyhl1339 { + yyb1339 = yyj1339 > l + } else { + yyb1339 = r.CheckBreak() + } + if yyb1339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = pkg4_intstr.IntOrString{} + } else { + yyv1341 := &x.Port + yym1342 := z.DecBinary() + _ = yym1342 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1341) { + } else if !yym1342 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1341) + } else { + z.DecFallback(yyv1341, false) + } + } + yyj1339++ + if yyhl1339 { + yyb1339 = yyj1339 > l + } else { + yyb1339 = r.CheckBreak() + } + if yyb1339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + yyj1339++ + if yyhl1339 { + yyb1339 = yyj1339 > l + } else { + yyb1339 = r.CheckBreak() + } + if yyb1339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Scheme = "" + } else { + x.Scheme = URIScheme(r.DecodeString()) + } + yyj1339++ + if yyhl1339 { + yyb1339 = yyj1339 > l + } else { + yyb1339 = r.CheckBreak() + } + if yyb1339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HTTPHeaders = nil + } else { + yyv1345 := &x.HTTPHeaders + yym1346 := z.DecBinary() + _ = yym1346 + if false { + } else { + h.decSliceHTTPHeader((*[]HTTPHeader)(yyv1345), d) + } + } + for { + yyj1339++ + if yyhl1339 { + yyb1339 = yyj1339 > l + } else { + yyb1339 = r.CheckBreak() + } + if yyb1339 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1339-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x URIScheme) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1347 := z.EncBinary() + _ = yym1347 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *URIScheme) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1348 := z.DecBinary() + _ = yym1348 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *TCPSocketAction) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1349 := z.EncBinary() + _ = yym1349 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1350 := !z.EncBinary() + yy2arr1350 := z.EncBasicHandle().StructToArray + var yyq1350 [1]bool + _, _, _ = yysep1350, yyq1350, yy2arr1350 + const yyr1350 bool = false + var yynn1350 int + if yyr1350 || yy2arr1350 { + r.EncodeArrayStart(1) + } else { + yynn1350 = 1 + for _, b := range yyq1350 { + if b { + yynn1350++ + } + } + r.EncodeMapStart(yynn1350) + yynn1350 = 0 + } + if yyr1350 || yy2arr1350 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1352 := &x.Port + yym1353 := z.EncBinary() + _ = yym1353 + if false { + } else if z.HasExtensions() && z.EncExt(yy1352) { + } else if !yym1353 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1352) + } else { + z.EncFallback(yy1352) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1354 := &x.Port + yym1355 := z.EncBinary() + _ = yym1355 + if false { + } else if z.HasExtensions() && z.EncExt(yy1354) { + } else if !yym1355 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1354) + } else { + z.EncFallback(yy1354) + } + } + if yyr1350 || yy2arr1350 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *TCPSocketAction) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1356 := z.DecBinary() + _ = yym1356 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1357 := r.ContainerType() + if yyct1357 == codecSelferValueTypeMap1234 { + yyl1357 := r.ReadMapStart() + if yyl1357 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1357, d) + } + } else if yyct1357 == codecSelferValueTypeArray1234 { + yyl1357 := r.ReadArrayStart() + if yyl1357 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1357, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *TCPSocketAction) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1358Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1358Slc + var yyhl1358 bool = l >= 0 + for yyj1358 := 0; ; yyj1358++ { + if yyhl1358 { + if yyj1358 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1358Slc = r.DecodeBytes(yys1358Slc, true, true) + yys1358 := string(yys1358Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1358 { + case "port": + if r.TryDecodeAsNil() { + x.Port = pkg4_intstr.IntOrString{} + } else { + yyv1359 := &x.Port + yym1360 := z.DecBinary() + _ = yym1360 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1359) { + } else if !yym1360 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1359) + } else { + z.DecFallback(yyv1359, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys1358) + } // end switch yys1358 + } // end for yyj1358 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *TCPSocketAction) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1361 int + var yyb1361 bool + var yyhl1361 bool = l >= 0 + yyj1361++ + if yyhl1361 { + yyb1361 = yyj1361 > l + } else { + yyb1361 = r.CheckBreak() + } + if yyb1361 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = pkg4_intstr.IntOrString{} + } else { + yyv1362 := &x.Port + yym1363 := z.DecBinary() + _ = yym1363 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1362) { + } else if !yym1363 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1362) + } else { + z.DecFallback(yyv1362, false) + } + } + for { + yyj1361++ + if yyhl1361 { + yyb1361 = yyj1361 > l + } else { + yyb1361 = r.CheckBreak() + } + if yyb1361 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1361-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ExecAction) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1364 := z.EncBinary() + _ = yym1364 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1365 := !z.EncBinary() + yy2arr1365 := z.EncBasicHandle().StructToArray + var yyq1365 [1]bool + _, _, _ = yysep1365, yyq1365, yy2arr1365 + const yyr1365 bool = false + yyq1365[0] = len(x.Command) != 0 + var yynn1365 int + if yyr1365 || yy2arr1365 { + r.EncodeArrayStart(1) + } else { + yynn1365 = 0 + for _, b := range yyq1365 { + if b { + yynn1365++ + } + } + r.EncodeMapStart(yynn1365) + yynn1365 = 0 + } + if yyr1365 || yy2arr1365 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1365[0] { + if x.Command == nil { + r.EncodeNil() + } else { + yym1367 := z.EncBinary() + _ = yym1367 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1365[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("command")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Command == nil { + r.EncodeNil() + } else { + yym1368 := z.EncBinary() + _ = yym1368 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } + } + if yyr1365 || yy2arr1365 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ExecAction) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1369 := z.DecBinary() + _ = yym1369 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1370 := r.ContainerType() + if yyct1370 == codecSelferValueTypeMap1234 { + yyl1370 := r.ReadMapStart() + if yyl1370 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1370, d) + } + } else if yyct1370 == codecSelferValueTypeArray1234 { + yyl1370 := r.ReadArrayStart() + if yyl1370 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1370, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ExecAction) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1371Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1371Slc + var yyhl1371 bool = l >= 0 + for yyj1371 := 0; ; yyj1371++ { + if yyhl1371 { + if yyj1371 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1371Slc = r.DecodeBytes(yys1371Slc, true, true) + yys1371 := string(yys1371Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1371 { + case "command": + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv1372 := &x.Command + yym1373 := z.DecBinary() + _ = yym1373 + if false { + } else { + z.F.DecSliceStringX(yyv1372, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1371) + } // end switch yys1371 + } // end for yyj1371 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ExecAction) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1374 int + var yyb1374 bool + var yyhl1374 bool = l >= 0 + yyj1374++ + if yyhl1374 { + yyb1374 = yyj1374 > l + } else { + yyb1374 = r.CheckBreak() + } + if yyb1374 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv1375 := &x.Command + yym1376 := z.DecBinary() + _ = yym1376 + if false { + } else { + z.F.DecSliceStringX(yyv1375, false, d) + } + } + for { + yyj1374++ + if yyhl1374 { + yyb1374 = yyj1374 > l + } else { + yyb1374 = r.CheckBreak() + } + if yyb1374 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1374-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Probe) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1377 := z.EncBinary() + _ = yym1377 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1378 := !z.EncBinary() + yy2arr1378 := z.EncBasicHandle().StructToArray + var yyq1378 [8]bool + _, _, _ = yysep1378, yyq1378, yy2arr1378 + const yyr1378 bool = false + yyq1378[0] = x.Handler.Exec != nil && x.Exec != nil + yyq1378[1] = x.Handler.HTTPGet != nil && x.HTTPGet != nil + yyq1378[2] = x.Handler.TCPSocket != nil && x.TCPSocket != nil + yyq1378[3] = x.InitialDelaySeconds != 0 + yyq1378[4] = x.TimeoutSeconds != 0 + yyq1378[5] = x.PeriodSeconds != 0 + yyq1378[6] = x.SuccessThreshold != 0 + yyq1378[7] = x.FailureThreshold != 0 + var yynn1378 int + if yyr1378 || yy2arr1378 { + r.EncodeArrayStart(8) + } else { + yynn1378 = 0 + for _, b := range yyq1378 { + if b { + yynn1378++ + } + } + r.EncodeMapStart(yynn1378) + yynn1378 = 0 + } + var yyn1379 bool + if x.Handler.Exec == nil { + yyn1379 = true + goto LABEL1379 + } + LABEL1379: + if yyr1378 || yy2arr1378 { + if yyn1379 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1378[0] { + if x.Exec == nil { + r.EncodeNil() + } else { + x.Exec.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq1378[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("exec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn1379 { + r.EncodeNil() + } else { + if x.Exec == nil { + r.EncodeNil() + } else { + x.Exec.CodecEncodeSelf(e) + } + } + } + } + var yyn1380 bool + if x.Handler.HTTPGet == nil { + yyn1380 = true + goto LABEL1380 + } + LABEL1380: + if yyr1378 || yy2arr1378 { + if yyn1380 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1378[1] { + if x.HTTPGet == nil { + r.EncodeNil() + } else { + x.HTTPGet.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq1378[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("httpGet")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn1380 { + r.EncodeNil() + } else { + if x.HTTPGet == nil { + r.EncodeNil() + } else { + x.HTTPGet.CodecEncodeSelf(e) + } + } + } + } + var yyn1381 bool + if x.Handler.TCPSocket == nil { + yyn1381 = true + goto LABEL1381 + } + LABEL1381: + if yyr1378 || yy2arr1378 { + if yyn1381 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1378[2] { + if x.TCPSocket == nil { + r.EncodeNil() + } else { + x.TCPSocket.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq1378[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tcpSocket")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn1381 { + r.EncodeNil() + } else { + if x.TCPSocket == nil { + r.EncodeNil() + } else { + x.TCPSocket.CodecEncodeSelf(e) + } + } + } + } + if yyr1378 || yy2arr1378 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1378[3] { + yym1383 := z.EncBinary() + _ = yym1383 + if false { + } else { + r.EncodeInt(int64(x.InitialDelaySeconds)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1378[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("initialDelaySeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1384 := z.EncBinary() + _ = yym1384 + if false { + } else { + r.EncodeInt(int64(x.InitialDelaySeconds)) + } + } + } + if yyr1378 || yy2arr1378 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1378[4] { + yym1386 := z.EncBinary() + _ = yym1386 + if false { + } else { + r.EncodeInt(int64(x.TimeoutSeconds)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1378[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("timeoutSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1387 := z.EncBinary() + _ = yym1387 + if false { + } else { + r.EncodeInt(int64(x.TimeoutSeconds)) + } + } + } + if yyr1378 || yy2arr1378 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1378[5] { + yym1389 := z.EncBinary() + _ = yym1389 + if false { + } else { + r.EncodeInt(int64(x.PeriodSeconds)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1378[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("periodSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1390 := z.EncBinary() + _ = yym1390 + if false { + } else { + r.EncodeInt(int64(x.PeriodSeconds)) + } + } + } + if yyr1378 || yy2arr1378 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1378[6] { + yym1392 := z.EncBinary() + _ = yym1392 + if false { + } else { + r.EncodeInt(int64(x.SuccessThreshold)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1378[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("successThreshold")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1393 := z.EncBinary() + _ = yym1393 + if false { + } else { + r.EncodeInt(int64(x.SuccessThreshold)) + } + } + } + if yyr1378 || yy2arr1378 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1378[7] { + yym1395 := z.EncBinary() + _ = yym1395 + if false { + } else { + r.EncodeInt(int64(x.FailureThreshold)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1378[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("failureThreshold")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1396 := z.EncBinary() + _ = yym1396 + if false { + } else { + r.EncodeInt(int64(x.FailureThreshold)) + } + } + } + if yyr1378 || yy2arr1378 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Probe) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1397 := z.DecBinary() + _ = yym1397 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1398 := r.ContainerType() + if yyct1398 == codecSelferValueTypeMap1234 { + yyl1398 := r.ReadMapStart() + if yyl1398 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1398, d) + } + } else if yyct1398 == codecSelferValueTypeArray1234 { + yyl1398 := r.ReadArrayStart() + if yyl1398 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1398, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Probe) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1399Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1399Slc + var yyhl1399 bool = l >= 0 + for yyj1399 := 0; ; yyj1399++ { + if yyhl1399 { + if yyj1399 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1399Slc = r.DecodeBytes(yys1399Slc, true, true) + yys1399 := string(yys1399Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1399 { + case "exec": + if x.Handler.Exec == nil { + x.Handler.Exec = new(ExecAction) + } + if r.TryDecodeAsNil() { + if x.Exec != nil { + x.Exec = nil + } + } else { + if x.Exec == nil { + x.Exec = new(ExecAction) + } + x.Exec.CodecDecodeSelf(d) + } + case "httpGet": + if x.Handler.HTTPGet == nil { + x.Handler.HTTPGet = new(HTTPGetAction) + } + if r.TryDecodeAsNil() { + if x.HTTPGet != nil { + x.HTTPGet = nil + } + } else { + if x.HTTPGet == nil { + x.HTTPGet = new(HTTPGetAction) + } + x.HTTPGet.CodecDecodeSelf(d) + } + case "tcpSocket": + if x.Handler.TCPSocket == nil { + x.Handler.TCPSocket = new(TCPSocketAction) + } + if r.TryDecodeAsNil() { + if x.TCPSocket != nil { + x.TCPSocket = nil + } + } else { + if x.TCPSocket == nil { + x.TCPSocket = new(TCPSocketAction) + } + x.TCPSocket.CodecDecodeSelf(d) + } + case "initialDelaySeconds": + if r.TryDecodeAsNil() { + x.InitialDelaySeconds = 0 + } else { + x.InitialDelaySeconds = int32(r.DecodeInt(32)) + } + case "timeoutSeconds": + if r.TryDecodeAsNil() { + x.TimeoutSeconds = 0 + } else { + x.TimeoutSeconds = int32(r.DecodeInt(32)) + } + case "periodSeconds": + if r.TryDecodeAsNil() { + x.PeriodSeconds = 0 + } else { + x.PeriodSeconds = int32(r.DecodeInt(32)) + } + case "successThreshold": + if r.TryDecodeAsNil() { + x.SuccessThreshold = 0 + } else { + x.SuccessThreshold = int32(r.DecodeInt(32)) + } + case "failureThreshold": + if r.TryDecodeAsNil() { + x.FailureThreshold = 0 + } else { + x.FailureThreshold = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys1399) + } // end switch yys1399 + } // end for yyj1399 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Probe) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1408 int + var yyb1408 bool + var yyhl1408 bool = l >= 0 + if x.Handler.Exec == nil { + x.Handler.Exec = new(ExecAction) + } + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Exec != nil { + x.Exec = nil + } + } else { + if x.Exec == nil { + x.Exec = new(ExecAction) + } + x.Exec.CodecDecodeSelf(d) + } + if x.Handler.HTTPGet == nil { + x.Handler.HTTPGet = new(HTTPGetAction) + } + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HTTPGet != nil { + x.HTTPGet = nil + } + } else { + if x.HTTPGet == nil { + x.HTTPGet = new(HTTPGetAction) + } + x.HTTPGet.CodecDecodeSelf(d) + } + if x.Handler.TCPSocket == nil { + x.Handler.TCPSocket = new(TCPSocketAction) + } + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TCPSocket != nil { + x.TCPSocket = nil + } + } else { + if x.TCPSocket == nil { + x.TCPSocket = new(TCPSocketAction) + } + x.TCPSocket.CodecDecodeSelf(d) + } + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.InitialDelaySeconds = 0 + } else { + x.InitialDelaySeconds = int32(r.DecodeInt(32)) + } + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TimeoutSeconds = 0 + } else { + x.TimeoutSeconds = int32(r.DecodeInt(32)) + } + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PeriodSeconds = 0 + } else { + x.PeriodSeconds = int32(r.DecodeInt(32)) + } + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SuccessThreshold = 0 + } else { + x.SuccessThreshold = int32(r.DecodeInt(32)) + } + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FailureThreshold = 0 + } else { + x.FailureThreshold = int32(r.DecodeInt(32)) + } + for { + yyj1408++ + if yyhl1408 { + yyb1408 = yyj1408 > l + } else { + yyb1408 = r.CheckBreak() + } + if yyb1408 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1408-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PullPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1417 := z.EncBinary() + _ = yym1417 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PullPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1418 := z.DecBinary() + _ = yym1418 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x Capability) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1419 := z.EncBinary() + _ = yym1419 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *Capability) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1420 := z.DecBinary() + _ = yym1420 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *Capabilities) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1421 := z.EncBinary() + _ = yym1421 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1422 := !z.EncBinary() + yy2arr1422 := z.EncBasicHandle().StructToArray + var yyq1422 [2]bool + _, _, _ = yysep1422, yyq1422, yy2arr1422 + const yyr1422 bool = false + yyq1422[0] = len(x.Add) != 0 + yyq1422[1] = len(x.Drop) != 0 + var yynn1422 int + if yyr1422 || yy2arr1422 { + r.EncodeArrayStart(2) + } else { + yynn1422 = 0 + for _, b := range yyq1422 { + if b { + yynn1422++ + } + } + r.EncodeMapStart(yynn1422) + yynn1422 = 0 + } + if yyr1422 || yy2arr1422 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1422[0] { + if x.Add == nil { + r.EncodeNil() + } else { + yym1424 := z.EncBinary() + _ = yym1424 + if false { + } else { + h.encSliceCapability(([]Capability)(x.Add), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1422[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("add")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Add == nil { + r.EncodeNil() + } else { + yym1425 := z.EncBinary() + _ = yym1425 + if false { + } else { + h.encSliceCapability(([]Capability)(x.Add), e) + } + } + } + } + if yyr1422 || yy2arr1422 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1422[1] { + if x.Drop == nil { + r.EncodeNil() + } else { + yym1427 := z.EncBinary() + _ = yym1427 + if false { + } else { + h.encSliceCapability(([]Capability)(x.Drop), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1422[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("drop")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Drop == nil { + r.EncodeNil() + } else { + yym1428 := z.EncBinary() + _ = yym1428 + if false { + } else { + h.encSliceCapability(([]Capability)(x.Drop), e) + } + } + } + } + if yyr1422 || yy2arr1422 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Capabilities) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1429 := z.DecBinary() + _ = yym1429 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1430 := r.ContainerType() + if yyct1430 == codecSelferValueTypeMap1234 { + yyl1430 := r.ReadMapStart() + if yyl1430 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1430, d) + } + } else if yyct1430 == codecSelferValueTypeArray1234 { + yyl1430 := r.ReadArrayStart() + if yyl1430 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1430, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Capabilities) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1431Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1431Slc + var yyhl1431 bool = l >= 0 + for yyj1431 := 0; ; yyj1431++ { + if yyhl1431 { + if yyj1431 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1431Slc = r.DecodeBytes(yys1431Slc, true, true) + yys1431 := string(yys1431Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1431 { + case "add": + if r.TryDecodeAsNil() { + x.Add = nil + } else { + yyv1432 := &x.Add + yym1433 := z.DecBinary() + _ = yym1433 + if false { + } else { + h.decSliceCapability((*[]Capability)(yyv1432), d) + } + } + case "drop": + if r.TryDecodeAsNil() { + x.Drop = nil + } else { + yyv1434 := &x.Drop + yym1435 := z.DecBinary() + _ = yym1435 + if false { + } else { + h.decSliceCapability((*[]Capability)(yyv1434), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1431) + } // end switch yys1431 + } // end for yyj1431 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Capabilities) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1436 int + var yyb1436 bool + var yyhl1436 bool = l >= 0 + yyj1436++ + if yyhl1436 { + yyb1436 = yyj1436 > l + } else { + yyb1436 = r.CheckBreak() + } + if yyb1436 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Add = nil + } else { + yyv1437 := &x.Add + yym1438 := z.DecBinary() + _ = yym1438 + if false { + } else { + h.decSliceCapability((*[]Capability)(yyv1437), d) + } + } + yyj1436++ + if yyhl1436 { + yyb1436 = yyj1436 > l + } else { + yyb1436 = r.CheckBreak() + } + if yyb1436 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Drop = nil + } else { + yyv1439 := &x.Drop + yym1440 := z.DecBinary() + _ = yym1440 + if false { + } else { + h.decSliceCapability((*[]Capability)(yyv1439), d) + } + } + for { + yyj1436++ + if yyhl1436 { + yyb1436 = yyj1436 > l + } else { + yyb1436 = r.CheckBreak() + } + if yyb1436 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1436-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceRequirements) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1441 := z.EncBinary() + _ = yym1441 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1442 := !z.EncBinary() + yy2arr1442 := z.EncBasicHandle().StructToArray + var yyq1442 [2]bool + _, _, _ = yysep1442, yyq1442, yy2arr1442 + const yyr1442 bool = false + yyq1442[0] = len(x.Limits) != 0 + yyq1442[1] = len(x.Requests) != 0 + var yynn1442 int + if yyr1442 || yy2arr1442 { + r.EncodeArrayStart(2) + } else { + yynn1442 = 0 + for _, b := range yyq1442 { + if b { + yynn1442++ + } + } + r.EncodeMapStart(yynn1442) + yynn1442 = 0 + } + if yyr1442 || yy2arr1442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1442[0] { + if x.Limits == nil { + r.EncodeNil() + } else { + x.Limits.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1442[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("limits")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Limits == nil { + r.EncodeNil() + } else { + x.Limits.CodecEncodeSelf(e) + } + } + } + if yyr1442 || yy2arr1442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1442[1] { + if x.Requests == nil { + r.EncodeNil() + } else { + x.Requests.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1442[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requests")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Requests == nil { + r.EncodeNil() + } else { + x.Requests.CodecEncodeSelf(e) + } + } + } + if yyr1442 || yy2arr1442 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceRequirements) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1445 := z.DecBinary() + _ = yym1445 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1446 := r.ContainerType() + if yyct1446 == codecSelferValueTypeMap1234 { + yyl1446 := r.ReadMapStart() + if yyl1446 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1446, d) + } + } else if yyct1446 == codecSelferValueTypeArray1234 { + yyl1446 := r.ReadArrayStart() + if yyl1446 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1446, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceRequirements) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1447Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1447Slc + var yyhl1447 bool = l >= 0 + for yyj1447 := 0; ; yyj1447++ { + if yyhl1447 { + if yyj1447 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1447Slc = r.DecodeBytes(yys1447Slc, true, true) + yys1447 := string(yys1447Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1447 { + case "limits": + if r.TryDecodeAsNil() { + x.Limits = nil + } else { + yyv1448 := &x.Limits + yyv1448.CodecDecodeSelf(d) + } + case "requests": + if r.TryDecodeAsNil() { + x.Requests = nil + } else { + yyv1449 := &x.Requests + yyv1449.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1447) + } // end switch yys1447 + } // end for yyj1447 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceRequirements) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1450 int + var yyb1450 bool + var yyhl1450 bool = l >= 0 + yyj1450++ + if yyhl1450 { + yyb1450 = yyj1450 > l + } else { + yyb1450 = r.CheckBreak() + } + if yyb1450 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Limits = nil + } else { + yyv1451 := &x.Limits + yyv1451.CodecDecodeSelf(d) + } + yyj1450++ + if yyhl1450 { + yyb1450 = yyj1450 > l + } else { + yyb1450 = r.CheckBreak() + } + if yyb1450 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Requests = nil + } else { + yyv1452 := &x.Requests + yyv1452.CodecDecodeSelf(d) + } + for { + yyj1450++ + if yyhl1450 { + yyb1450 = yyj1450 > l + } else { + yyb1450 = r.CheckBreak() + } + if yyb1450 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1450-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Container) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1453 := z.EncBinary() + _ = yym1453 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1454 := !z.EncBinary() + yy2arr1454 := z.EncBasicHandle().StructToArray + var yyq1454 [18]bool + _, _, _ = yysep1454, yyq1454, yy2arr1454 + const yyr1454 bool = false + yyq1454[1] = x.Image != "" + yyq1454[2] = len(x.Command) != 0 + yyq1454[3] = len(x.Args) != 0 + yyq1454[4] = x.WorkingDir != "" + yyq1454[5] = len(x.Ports) != 0 + yyq1454[6] = len(x.Env) != 0 + yyq1454[7] = true + yyq1454[8] = len(x.VolumeMounts) != 0 + yyq1454[9] = x.LivenessProbe != nil + yyq1454[10] = x.ReadinessProbe != nil + yyq1454[11] = x.Lifecycle != nil + yyq1454[12] = x.TerminationMessagePath != "" + yyq1454[13] = x.ImagePullPolicy != "" + yyq1454[14] = x.SecurityContext != nil + yyq1454[15] = x.Stdin != false + yyq1454[16] = x.StdinOnce != false + yyq1454[17] = x.TTY != false + var yynn1454 int + if yyr1454 || yy2arr1454 { + r.EncodeArrayStart(18) + } else { + yynn1454 = 1 + for _, b := range yyq1454 { + if b { + yynn1454++ + } + } + r.EncodeMapStart(yynn1454) + yynn1454 = 0 + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1456 := z.EncBinary() + _ = yym1456 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1457 := z.EncBinary() + _ = yym1457 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[1] { + yym1459 := z.EncBinary() + _ = yym1459 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Image)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1454[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("image")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1460 := z.EncBinary() + _ = yym1460 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Image)) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[2] { + if x.Command == nil { + r.EncodeNil() + } else { + yym1462 := z.EncBinary() + _ = yym1462 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("command")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Command == nil { + r.EncodeNil() + } else { + yym1463 := z.EncBinary() + _ = yym1463 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[3] { + if x.Args == nil { + r.EncodeNil() + } else { + yym1465 := z.EncBinary() + _ = yym1465 + if false { + } else { + z.F.EncSliceStringV(x.Args, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("args")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Args == nil { + r.EncodeNil() + } else { + yym1466 := z.EncBinary() + _ = yym1466 + if false { + } else { + z.F.EncSliceStringV(x.Args, false, e) + } + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[4] { + yym1468 := z.EncBinary() + _ = yym1468 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.WorkingDir)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1454[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("workingDir")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1469 := z.EncBinary() + _ = yym1469 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.WorkingDir)) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[5] { + if x.Ports == nil { + r.EncodeNil() + } else { + yym1471 := z.EncBinary() + _ = yym1471 + if false { + } else { + h.encSliceContainerPort(([]ContainerPort)(x.Ports), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ports")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym1472 := z.EncBinary() + _ = yym1472 + if false { + } else { + h.encSliceContainerPort(([]ContainerPort)(x.Ports), e) + } + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[6] { + if x.Env == nil { + r.EncodeNil() + } else { + yym1474 := z.EncBinary() + _ = yym1474 + if false { + } else { + h.encSliceEnvVar(([]EnvVar)(x.Env), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("env")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Env == nil { + r.EncodeNil() + } else { + yym1475 := z.EncBinary() + _ = yym1475 + if false { + } else { + h.encSliceEnvVar(([]EnvVar)(x.Env), e) + } + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[7] { + yy1477 := &x.Resources + yy1477.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq1454[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resources")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1478 := &x.Resources + yy1478.CodecEncodeSelf(e) + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[8] { + if x.VolumeMounts == nil { + r.EncodeNil() + } else { + yym1480 := z.EncBinary() + _ = yym1480 + if false { + } else { + h.encSliceVolumeMount(([]VolumeMount)(x.VolumeMounts), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeMounts")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VolumeMounts == nil { + r.EncodeNil() + } else { + yym1481 := z.EncBinary() + _ = yym1481 + if false { + } else { + h.encSliceVolumeMount(([]VolumeMount)(x.VolumeMounts), e) + } + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[9] { + if x.LivenessProbe == nil { + r.EncodeNil() + } else { + x.LivenessProbe.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("livenessProbe")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LivenessProbe == nil { + r.EncodeNil() + } else { + x.LivenessProbe.CodecEncodeSelf(e) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[10] { + if x.ReadinessProbe == nil { + r.EncodeNil() + } else { + x.ReadinessProbe.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readinessProbe")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ReadinessProbe == nil { + r.EncodeNil() + } else { + x.ReadinessProbe.CodecEncodeSelf(e) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[11] { + if x.Lifecycle == nil { + r.EncodeNil() + } else { + x.Lifecycle.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lifecycle")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Lifecycle == nil { + r.EncodeNil() + } else { + x.Lifecycle.CodecEncodeSelf(e) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[12] { + yym1486 := z.EncBinary() + _ = yym1486 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TerminationMessagePath)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1454[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("terminationMessagePath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1487 := z.EncBinary() + _ = yym1487 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TerminationMessagePath)) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[13] { + x.ImagePullPolicy.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1454[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("imagePullPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.ImagePullPolicy.CodecEncodeSelf(e) + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[14] { + if x.SecurityContext == nil { + r.EncodeNil() + } else { + x.SecurityContext.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1454[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("securityContext")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecurityContext == nil { + r.EncodeNil() + } else { + x.SecurityContext.CodecEncodeSelf(e) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[15] { + yym1491 := z.EncBinary() + _ = yym1491 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1454[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdin")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1492 := z.EncBinary() + _ = yym1492 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[16] { + yym1494 := z.EncBinary() + _ = yym1494 + if false { + } else { + r.EncodeBool(bool(x.StdinOnce)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1454[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdinOnce")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1495 := z.EncBinary() + _ = yym1495 + if false { + } else { + r.EncodeBool(bool(x.StdinOnce)) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1454[17] { + yym1497 := z.EncBinary() + _ = yym1497 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1454[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tty")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1498 := z.EncBinary() + _ = yym1498 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } + } + if yyr1454 || yy2arr1454 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Container) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1499 := z.DecBinary() + _ = yym1499 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1500 := r.ContainerType() + if yyct1500 == codecSelferValueTypeMap1234 { + yyl1500 := r.ReadMapStart() + if yyl1500 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1500, d) + } + } else if yyct1500 == codecSelferValueTypeArray1234 { + yyl1500 := r.ReadArrayStart() + if yyl1500 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1500, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Container) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1501Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1501Slc + var yyhl1501 bool = l >= 0 + for yyj1501 := 0; ; yyj1501++ { + if yyhl1501 { + if yyj1501 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1501Slc = r.DecodeBytes(yys1501Slc, true, true) + yys1501 := string(yys1501Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1501 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "image": + if r.TryDecodeAsNil() { + x.Image = "" + } else { + x.Image = string(r.DecodeString()) + } + case "command": + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv1504 := &x.Command + yym1505 := z.DecBinary() + _ = yym1505 + if false { + } else { + z.F.DecSliceStringX(yyv1504, false, d) + } + } + case "args": + if r.TryDecodeAsNil() { + x.Args = nil + } else { + yyv1506 := &x.Args + yym1507 := z.DecBinary() + _ = yym1507 + if false { + } else { + z.F.DecSliceStringX(yyv1506, false, d) + } + } + case "workingDir": + if r.TryDecodeAsNil() { + x.WorkingDir = "" + } else { + x.WorkingDir = string(r.DecodeString()) + } + case "ports": + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv1509 := &x.Ports + yym1510 := z.DecBinary() + _ = yym1510 + if false { + } else { + h.decSliceContainerPort((*[]ContainerPort)(yyv1509), d) + } + } + case "env": + if r.TryDecodeAsNil() { + x.Env = nil + } else { + yyv1511 := &x.Env + yym1512 := z.DecBinary() + _ = yym1512 + if false { + } else { + h.decSliceEnvVar((*[]EnvVar)(yyv1511), d) + } + } + case "resources": + if r.TryDecodeAsNil() { + x.Resources = ResourceRequirements{} + } else { + yyv1513 := &x.Resources + yyv1513.CodecDecodeSelf(d) + } + case "volumeMounts": + if r.TryDecodeAsNil() { + x.VolumeMounts = nil + } else { + yyv1514 := &x.VolumeMounts + yym1515 := z.DecBinary() + _ = yym1515 + if false { + } else { + h.decSliceVolumeMount((*[]VolumeMount)(yyv1514), d) + } + } + case "livenessProbe": + if r.TryDecodeAsNil() { + if x.LivenessProbe != nil { + x.LivenessProbe = nil + } + } else { + if x.LivenessProbe == nil { + x.LivenessProbe = new(Probe) + } + x.LivenessProbe.CodecDecodeSelf(d) + } + case "readinessProbe": + if r.TryDecodeAsNil() { + if x.ReadinessProbe != nil { + x.ReadinessProbe = nil + } + } else { + if x.ReadinessProbe == nil { + x.ReadinessProbe = new(Probe) + } + x.ReadinessProbe.CodecDecodeSelf(d) + } + case "lifecycle": + if r.TryDecodeAsNil() { + if x.Lifecycle != nil { + x.Lifecycle = nil + } + } else { + if x.Lifecycle == nil { + x.Lifecycle = new(Lifecycle) + } + x.Lifecycle.CodecDecodeSelf(d) + } + case "terminationMessagePath": + if r.TryDecodeAsNil() { + x.TerminationMessagePath = "" + } else { + x.TerminationMessagePath = string(r.DecodeString()) + } + case "imagePullPolicy": + if r.TryDecodeAsNil() { + x.ImagePullPolicy = "" + } else { + x.ImagePullPolicy = PullPolicy(r.DecodeString()) + } + case "securityContext": + if r.TryDecodeAsNil() { + if x.SecurityContext != nil { + x.SecurityContext = nil + } + } else { + if x.SecurityContext == nil { + x.SecurityContext = new(SecurityContext) + } + x.SecurityContext.CodecDecodeSelf(d) + } + case "stdin": + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + case "stdinOnce": + if r.TryDecodeAsNil() { + x.StdinOnce = false + } else { + x.StdinOnce = bool(r.DecodeBool()) + } + case "tty": + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys1501) + } // end switch yys1501 + } // end for yyj1501 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Container) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1525 int + var yyb1525 bool + var yyhl1525 bool = l >= 0 + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Image = "" + } else { + x.Image = string(r.DecodeString()) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv1528 := &x.Command + yym1529 := z.DecBinary() + _ = yym1529 + if false { + } else { + z.F.DecSliceStringX(yyv1528, false, d) + } + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Args = nil + } else { + yyv1530 := &x.Args + yym1531 := z.DecBinary() + _ = yym1531 + if false { + } else { + z.F.DecSliceStringX(yyv1530, false, d) + } + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.WorkingDir = "" + } else { + x.WorkingDir = string(r.DecodeString()) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv1533 := &x.Ports + yym1534 := z.DecBinary() + _ = yym1534 + if false { + } else { + h.decSliceContainerPort((*[]ContainerPort)(yyv1533), d) + } + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Env = nil + } else { + yyv1535 := &x.Env + yym1536 := z.DecBinary() + _ = yym1536 + if false { + } else { + h.decSliceEnvVar((*[]EnvVar)(yyv1535), d) + } + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Resources = ResourceRequirements{} + } else { + yyv1537 := &x.Resources + yyv1537.CodecDecodeSelf(d) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeMounts = nil + } else { + yyv1538 := &x.VolumeMounts + yym1539 := z.DecBinary() + _ = yym1539 + if false { + } else { + h.decSliceVolumeMount((*[]VolumeMount)(yyv1538), d) + } + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.LivenessProbe != nil { + x.LivenessProbe = nil + } + } else { + if x.LivenessProbe == nil { + x.LivenessProbe = new(Probe) + } + x.LivenessProbe.CodecDecodeSelf(d) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ReadinessProbe != nil { + x.ReadinessProbe = nil + } + } else { + if x.ReadinessProbe == nil { + x.ReadinessProbe = new(Probe) + } + x.ReadinessProbe.CodecDecodeSelf(d) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Lifecycle != nil { + x.Lifecycle = nil + } + } else { + if x.Lifecycle == nil { + x.Lifecycle = new(Lifecycle) + } + x.Lifecycle.CodecDecodeSelf(d) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TerminationMessagePath = "" + } else { + x.TerminationMessagePath = string(r.DecodeString()) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ImagePullPolicy = "" + } else { + x.ImagePullPolicy = PullPolicy(r.DecodeString()) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecurityContext != nil { + x.SecurityContext = nil + } + } else { + if x.SecurityContext == nil { + x.SecurityContext = new(SecurityContext) + } + x.SecurityContext.CodecDecodeSelf(d) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.StdinOnce = false + } else { + x.StdinOnce = bool(r.DecodeBool()) + } + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + for { + yyj1525++ + if yyhl1525 { + yyb1525 = yyj1525 > l + } else { + yyb1525 = r.CheckBreak() + } + if yyb1525 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1525-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Handler) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1549 := z.EncBinary() + _ = yym1549 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1550 := !z.EncBinary() + yy2arr1550 := z.EncBasicHandle().StructToArray + var yyq1550 [3]bool + _, _, _ = yysep1550, yyq1550, yy2arr1550 + const yyr1550 bool = false + yyq1550[0] = x.Exec != nil + yyq1550[1] = x.HTTPGet != nil + yyq1550[2] = x.TCPSocket != nil + var yynn1550 int + if yyr1550 || yy2arr1550 { + r.EncodeArrayStart(3) + } else { + yynn1550 = 0 + for _, b := range yyq1550 { + if b { + yynn1550++ + } + } + r.EncodeMapStart(yynn1550) + yynn1550 = 0 + } + if yyr1550 || yy2arr1550 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1550[0] { + if x.Exec == nil { + r.EncodeNil() + } else { + x.Exec.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1550[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("exec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Exec == nil { + r.EncodeNil() + } else { + x.Exec.CodecEncodeSelf(e) + } + } + } + if yyr1550 || yy2arr1550 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1550[1] { + if x.HTTPGet == nil { + r.EncodeNil() + } else { + x.HTTPGet.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1550[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("httpGet")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HTTPGet == nil { + r.EncodeNil() + } else { + x.HTTPGet.CodecEncodeSelf(e) + } + } + } + if yyr1550 || yy2arr1550 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1550[2] { + if x.TCPSocket == nil { + r.EncodeNil() + } else { + x.TCPSocket.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1550[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tcpSocket")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TCPSocket == nil { + r.EncodeNil() + } else { + x.TCPSocket.CodecEncodeSelf(e) + } + } + } + if yyr1550 || yy2arr1550 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Handler) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1554 := z.DecBinary() + _ = yym1554 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1555 := r.ContainerType() + if yyct1555 == codecSelferValueTypeMap1234 { + yyl1555 := r.ReadMapStart() + if yyl1555 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1555, d) + } + } else if yyct1555 == codecSelferValueTypeArray1234 { + yyl1555 := r.ReadArrayStart() + if yyl1555 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1555, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Handler) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1556Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1556Slc + var yyhl1556 bool = l >= 0 + for yyj1556 := 0; ; yyj1556++ { + if yyhl1556 { + if yyj1556 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1556Slc = r.DecodeBytes(yys1556Slc, true, true) + yys1556 := string(yys1556Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1556 { + case "exec": + if r.TryDecodeAsNil() { + if x.Exec != nil { + x.Exec = nil + } + } else { + if x.Exec == nil { + x.Exec = new(ExecAction) + } + x.Exec.CodecDecodeSelf(d) + } + case "httpGet": + if r.TryDecodeAsNil() { + if x.HTTPGet != nil { + x.HTTPGet = nil + } + } else { + if x.HTTPGet == nil { + x.HTTPGet = new(HTTPGetAction) + } + x.HTTPGet.CodecDecodeSelf(d) + } + case "tcpSocket": + if r.TryDecodeAsNil() { + if x.TCPSocket != nil { + x.TCPSocket = nil + } + } else { + if x.TCPSocket == nil { + x.TCPSocket = new(TCPSocketAction) + } + x.TCPSocket.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1556) + } // end switch yys1556 + } // end for yyj1556 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Handler) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1560 int + var yyb1560 bool + var yyhl1560 bool = l >= 0 + yyj1560++ + if yyhl1560 { + yyb1560 = yyj1560 > l + } else { + yyb1560 = r.CheckBreak() + } + if yyb1560 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Exec != nil { + x.Exec = nil + } + } else { + if x.Exec == nil { + x.Exec = new(ExecAction) + } + x.Exec.CodecDecodeSelf(d) + } + yyj1560++ + if yyhl1560 { + yyb1560 = yyj1560 > l + } else { + yyb1560 = r.CheckBreak() + } + if yyb1560 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HTTPGet != nil { + x.HTTPGet = nil + } + } else { + if x.HTTPGet == nil { + x.HTTPGet = new(HTTPGetAction) + } + x.HTTPGet.CodecDecodeSelf(d) + } + yyj1560++ + if yyhl1560 { + yyb1560 = yyj1560 > l + } else { + yyb1560 = r.CheckBreak() + } + if yyb1560 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TCPSocket != nil { + x.TCPSocket = nil + } + } else { + if x.TCPSocket == nil { + x.TCPSocket = new(TCPSocketAction) + } + x.TCPSocket.CodecDecodeSelf(d) + } + for { + yyj1560++ + if yyhl1560 { + yyb1560 = yyj1560 > l + } else { + yyb1560 = r.CheckBreak() + } + if yyb1560 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1560-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Lifecycle) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1564 := z.EncBinary() + _ = yym1564 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1565 := !z.EncBinary() + yy2arr1565 := z.EncBasicHandle().StructToArray + var yyq1565 [2]bool + _, _, _ = yysep1565, yyq1565, yy2arr1565 + const yyr1565 bool = false + yyq1565[0] = x.PostStart != nil + yyq1565[1] = x.PreStop != nil + var yynn1565 int + if yyr1565 || yy2arr1565 { + r.EncodeArrayStart(2) + } else { + yynn1565 = 0 + for _, b := range yyq1565 { + if b { + yynn1565++ + } + } + r.EncodeMapStart(yynn1565) + yynn1565 = 0 + } + if yyr1565 || yy2arr1565 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1565[0] { + if x.PostStart == nil { + r.EncodeNil() + } else { + x.PostStart.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1565[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("postStart")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PostStart == nil { + r.EncodeNil() + } else { + x.PostStart.CodecEncodeSelf(e) + } + } + } + if yyr1565 || yy2arr1565 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1565[1] { + if x.PreStop == nil { + r.EncodeNil() + } else { + x.PreStop.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1565[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preStop")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreStop == nil { + r.EncodeNil() + } else { + x.PreStop.CodecEncodeSelf(e) + } + } + } + if yyr1565 || yy2arr1565 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Lifecycle) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1568 := z.DecBinary() + _ = yym1568 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1569 := r.ContainerType() + if yyct1569 == codecSelferValueTypeMap1234 { + yyl1569 := r.ReadMapStart() + if yyl1569 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1569, d) + } + } else if yyct1569 == codecSelferValueTypeArray1234 { + yyl1569 := r.ReadArrayStart() + if yyl1569 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1569, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Lifecycle) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1570Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1570Slc + var yyhl1570 bool = l >= 0 + for yyj1570 := 0; ; yyj1570++ { + if yyhl1570 { + if yyj1570 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1570Slc = r.DecodeBytes(yys1570Slc, true, true) + yys1570 := string(yys1570Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1570 { + case "postStart": + if r.TryDecodeAsNil() { + if x.PostStart != nil { + x.PostStart = nil + } + } else { + if x.PostStart == nil { + x.PostStart = new(Handler) + } + x.PostStart.CodecDecodeSelf(d) + } + case "preStop": + if r.TryDecodeAsNil() { + if x.PreStop != nil { + x.PreStop = nil + } + } else { + if x.PreStop == nil { + x.PreStop = new(Handler) + } + x.PreStop.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1570) + } // end switch yys1570 + } // end for yyj1570 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Lifecycle) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1573 int + var yyb1573 bool + var yyhl1573 bool = l >= 0 + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PostStart != nil { + x.PostStart = nil + } + } else { + if x.PostStart == nil { + x.PostStart = new(Handler) + } + x.PostStart.CodecDecodeSelf(d) + } + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PreStop != nil { + x.PreStop = nil + } + } else { + if x.PreStop == nil { + x.PreStop = new(Handler) + } + x.PreStop.CodecDecodeSelf(d) + } + for { + yyj1573++ + if yyhl1573 { + yyb1573 = yyj1573 > l + } else { + yyb1573 = r.CheckBreak() + } + if yyb1573 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1573-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ConditionStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1576 := z.EncBinary() + _ = yym1576 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ConditionStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1577 := z.DecBinary() + _ = yym1577 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ContainerStateWaiting) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1578 := z.EncBinary() + _ = yym1578 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1579 := !z.EncBinary() + yy2arr1579 := z.EncBasicHandle().StructToArray + var yyq1579 [2]bool + _, _, _ = yysep1579, yyq1579, yy2arr1579 + const yyr1579 bool = false + yyq1579[0] = x.Reason != "" + yyq1579[1] = x.Message != "" + var yynn1579 int + if yyr1579 || yy2arr1579 { + r.EncodeArrayStart(2) + } else { + yynn1579 = 0 + for _, b := range yyq1579 { + if b { + yynn1579++ + } + } + r.EncodeMapStart(yynn1579) + yynn1579 = 0 + } + if yyr1579 || yy2arr1579 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1579[0] { + yym1581 := z.EncBinary() + _ = yym1581 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1579[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1582 := z.EncBinary() + _ = yym1582 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr1579 || yy2arr1579 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1579[1] { + yym1584 := z.EncBinary() + _ = yym1584 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1579[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1585 := z.EncBinary() + _ = yym1585 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr1579 || yy2arr1579 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerStateWaiting) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1586 := z.DecBinary() + _ = yym1586 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1587 := r.ContainerType() + if yyct1587 == codecSelferValueTypeMap1234 { + yyl1587 := r.ReadMapStart() + if yyl1587 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1587, d) + } + } else if yyct1587 == codecSelferValueTypeArray1234 { + yyl1587 := r.ReadArrayStart() + if yyl1587 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1587, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerStateWaiting) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1588Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1588Slc + var yyhl1588 bool = l >= 0 + for yyj1588 := 0; ; yyj1588++ { + if yyhl1588 { + if yyj1588 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1588Slc = r.DecodeBytes(yys1588Slc, true, true) + yys1588 := string(yys1588Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1588 { + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1588) + } // end switch yys1588 + } // end for yyj1588 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerStateWaiting) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1591 int + var yyb1591 bool + var yyhl1591 bool = l >= 0 + yyj1591++ + if yyhl1591 { + yyb1591 = yyj1591 > l + } else { + yyb1591 = r.CheckBreak() + } + if yyb1591 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj1591++ + if yyhl1591 { + yyb1591 = yyj1591 > l + } else { + yyb1591 = r.CheckBreak() + } + if yyb1591 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj1591++ + if yyhl1591 { + yyb1591 = yyj1591 > l + } else { + yyb1591 = r.CheckBreak() + } + if yyb1591 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1591-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerStateRunning) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1594 := z.EncBinary() + _ = yym1594 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1595 := !z.EncBinary() + yy2arr1595 := z.EncBasicHandle().StructToArray + var yyq1595 [1]bool + _, _, _ = yysep1595, yyq1595, yy2arr1595 + const yyr1595 bool = false + yyq1595[0] = true + var yynn1595 int + if yyr1595 || yy2arr1595 { + r.EncodeArrayStart(1) + } else { + yynn1595 = 0 + for _, b := range yyq1595 { + if b { + yynn1595++ + } + } + r.EncodeMapStart(yynn1595) + yynn1595 = 0 + } + if yyr1595 || yy2arr1595 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1595[0] { + yy1597 := &x.StartedAt + yym1598 := z.EncBinary() + _ = yym1598 + if false { + } else if z.HasExtensions() && z.EncExt(yy1597) { + } else if yym1598 { + z.EncBinaryMarshal(yy1597) + } else if !yym1598 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1597) + } else { + z.EncFallback(yy1597) + } + } else { + r.EncodeNil() + } + } else { + if yyq1595[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("startedAt")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1599 := &x.StartedAt + yym1600 := z.EncBinary() + _ = yym1600 + if false { + } else if z.HasExtensions() && z.EncExt(yy1599) { + } else if yym1600 { + z.EncBinaryMarshal(yy1599) + } else if !yym1600 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1599) + } else { + z.EncFallback(yy1599) + } + } + } + if yyr1595 || yy2arr1595 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerStateRunning) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1601 := z.DecBinary() + _ = yym1601 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1602 := r.ContainerType() + if yyct1602 == codecSelferValueTypeMap1234 { + yyl1602 := r.ReadMapStart() + if yyl1602 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1602, d) + } + } else if yyct1602 == codecSelferValueTypeArray1234 { + yyl1602 := r.ReadArrayStart() + if yyl1602 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1602, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerStateRunning) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1603Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1603Slc + var yyhl1603 bool = l >= 0 + for yyj1603 := 0; ; yyj1603++ { + if yyhl1603 { + if yyj1603 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1603Slc = r.DecodeBytes(yys1603Slc, true, true) + yys1603 := string(yys1603Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1603 { + case "startedAt": + if r.TryDecodeAsNil() { + x.StartedAt = pkg2_unversioned.Time{} + } else { + yyv1604 := &x.StartedAt + yym1605 := z.DecBinary() + _ = yym1605 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1604) { + } else if yym1605 { + z.DecBinaryUnmarshal(yyv1604) + } else if !yym1605 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1604) + } else { + z.DecFallback(yyv1604, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys1603) + } // end switch yys1603 + } // end for yyj1603 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerStateRunning) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1606 int + var yyb1606 bool + var yyhl1606 bool = l >= 0 + yyj1606++ + if yyhl1606 { + yyb1606 = yyj1606 > l + } else { + yyb1606 = r.CheckBreak() + } + if yyb1606 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.StartedAt = pkg2_unversioned.Time{} + } else { + yyv1607 := &x.StartedAt + yym1608 := z.DecBinary() + _ = yym1608 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1607) { + } else if yym1608 { + z.DecBinaryUnmarshal(yyv1607) + } else if !yym1608 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1607) + } else { + z.DecFallback(yyv1607, false) + } + } + for { + yyj1606++ + if yyhl1606 { + yyb1606 = yyj1606 > l + } else { + yyb1606 = r.CheckBreak() + } + if yyb1606 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1606-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerStateTerminated) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1609 := z.EncBinary() + _ = yym1609 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1610 := !z.EncBinary() + yy2arr1610 := z.EncBasicHandle().StructToArray + var yyq1610 [7]bool + _, _, _ = yysep1610, yyq1610, yy2arr1610 + const yyr1610 bool = false + yyq1610[1] = x.Signal != 0 + yyq1610[2] = x.Reason != "" + yyq1610[3] = x.Message != "" + yyq1610[4] = true + yyq1610[5] = true + yyq1610[6] = x.ContainerID != "" + var yynn1610 int + if yyr1610 || yy2arr1610 { + r.EncodeArrayStart(7) + } else { + yynn1610 = 1 + for _, b := range yyq1610 { + if b { + yynn1610++ + } + } + r.EncodeMapStart(yynn1610) + yynn1610 = 0 + } + if yyr1610 || yy2arr1610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1612 := z.EncBinary() + _ = yym1612 + if false { + } else { + r.EncodeInt(int64(x.ExitCode)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("exitCode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1613 := z.EncBinary() + _ = yym1613 + if false { + } else { + r.EncodeInt(int64(x.ExitCode)) + } + } + if yyr1610 || yy2arr1610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1610[1] { + yym1615 := z.EncBinary() + _ = yym1615 + if false { + } else { + r.EncodeInt(int64(x.Signal)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq1610[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("signal")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1616 := z.EncBinary() + _ = yym1616 + if false { + } else { + r.EncodeInt(int64(x.Signal)) + } + } + } + if yyr1610 || yy2arr1610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1610[2] { + yym1618 := z.EncBinary() + _ = yym1618 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1610[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1619 := z.EncBinary() + _ = yym1619 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr1610 || yy2arr1610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1610[3] { + yym1621 := z.EncBinary() + _ = yym1621 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1610[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1622 := z.EncBinary() + _ = yym1622 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr1610 || yy2arr1610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1610[4] { + yy1624 := &x.StartedAt + yym1625 := z.EncBinary() + _ = yym1625 + if false { + } else if z.HasExtensions() && z.EncExt(yy1624) { + } else if yym1625 { + z.EncBinaryMarshal(yy1624) + } else if !yym1625 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1624) + } else { + z.EncFallback(yy1624) + } + } else { + r.EncodeNil() + } + } else { + if yyq1610[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("startedAt")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1626 := &x.StartedAt + yym1627 := z.EncBinary() + _ = yym1627 + if false { + } else if z.HasExtensions() && z.EncExt(yy1626) { + } else if yym1627 { + z.EncBinaryMarshal(yy1626) + } else if !yym1627 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1626) + } else { + z.EncFallback(yy1626) + } + } + } + if yyr1610 || yy2arr1610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1610[5] { + yy1629 := &x.FinishedAt + yym1630 := z.EncBinary() + _ = yym1630 + if false { + } else if z.HasExtensions() && z.EncExt(yy1629) { + } else if yym1630 { + z.EncBinaryMarshal(yy1629) + } else if !yym1630 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1629) + } else { + z.EncFallback(yy1629) + } + } else { + r.EncodeNil() + } + } else { + if yyq1610[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("finishedAt")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1631 := &x.FinishedAt + yym1632 := z.EncBinary() + _ = yym1632 + if false { + } else if z.HasExtensions() && z.EncExt(yy1631) { + } else if yym1632 { + z.EncBinaryMarshal(yy1631) + } else if !yym1632 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1631) + } else { + z.EncFallback(yy1631) + } + } + } + if yyr1610 || yy2arr1610 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1610[6] { + yym1634 := z.EncBinary() + _ = yym1634 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1610[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1635 := z.EncBinary() + _ = yym1635 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerID)) + } + } + } + if yyr1610 || yy2arr1610 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerStateTerminated) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1636 := z.DecBinary() + _ = yym1636 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1637 := r.ContainerType() + if yyct1637 == codecSelferValueTypeMap1234 { + yyl1637 := r.ReadMapStart() + if yyl1637 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1637, d) + } + } else if yyct1637 == codecSelferValueTypeArray1234 { + yyl1637 := r.ReadArrayStart() + if yyl1637 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1637, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerStateTerminated) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1638Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1638Slc + var yyhl1638 bool = l >= 0 + for yyj1638 := 0; ; yyj1638++ { + if yyhl1638 { + if yyj1638 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1638Slc = r.DecodeBytes(yys1638Slc, true, true) + yys1638 := string(yys1638Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1638 { + case "exitCode": + if r.TryDecodeAsNil() { + x.ExitCode = 0 + } else { + x.ExitCode = int32(r.DecodeInt(32)) + } + case "signal": + if r.TryDecodeAsNil() { + x.Signal = 0 + } else { + x.Signal = int32(r.DecodeInt(32)) + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "startedAt": + if r.TryDecodeAsNil() { + x.StartedAt = pkg2_unversioned.Time{} + } else { + yyv1643 := &x.StartedAt + yym1644 := z.DecBinary() + _ = yym1644 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1643) { + } else if yym1644 { + z.DecBinaryUnmarshal(yyv1643) + } else if !yym1644 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1643) + } else { + z.DecFallback(yyv1643, false) + } + } + case "finishedAt": + if r.TryDecodeAsNil() { + x.FinishedAt = pkg2_unversioned.Time{} + } else { + yyv1645 := &x.FinishedAt + yym1646 := z.DecBinary() + _ = yym1646 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1645) { + } else if yym1646 { + z.DecBinaryUnmarshal(yyv1645) + } else if !yym1646 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1645) + } else { + z.DecFallback(yyv1645, false) + } + } + case "containerID": + if r.TryDecodeAsNil() { + x.ContainerID = "" + } else { + x.ContainerID = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1638) + } // end switch yys1638 + } // end for yyj1638 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerStateTerminated) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1648 int + var yyb1648 bool + var yyhl1648 bool = l >= 0 + yyj1648++ + if yyhl1648 { + yyb1648 = yyj1648 > l + } else { + yyb1648 = r.CheckBreak() + } + if yyb1648 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ExitCode = 0 + } else { + x.ExitCode = int32(r.DecodeInt(32)) + } + yyj1648++ + if yyhl1648 { + yyb1648 = yyj1648 > l + } else { + yyb1648 = r.CheckBreak() + } + if yyb1648 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Signal = 0 + } else { + x.Signal = int32(r.DecodeInt(32)) + } + yyj1648++ + if yyhl1648 { + yyb1648 = yyj1648 > l + } else { + yyb1648 = r.CheckBreak() + } + if yyb1648 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj1648++ + if yyhl1648 { + yyb1648 = yyj1648 > l + } else { + yyb1648 = r.CheckBreak() + } + if yyb1648 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj1648++ + if yyhl1648 { + yyb1648 = yyj1648 > l + } else { + yyb1648 = r.CheckBreak() + } + if yyb1648 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.StartedAt = pkg2_unversioned.Time{} + } else { + yyv1653 := &x.StartedAt + yym1654 := z.DecBinary() + _ = yym1654 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1653) { + } else if yym1654 { + z.DecBinaryUnmarshal(yyv1653) + } else if !yym1654 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1653) + } else { + z.DecFallback(yyv1653, false) + } + } + yyj1648++ + if yyhl1648 { + yyb1648 = yyj1648 > l + } else { + yyb1648 = r.CheckBreak() + } + if yyb1648 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FinishedAt = pkg2_unversioned.Time{} + } else { + yyv1655 := &x.FinishedAt + yym1656 := z.DecBinary() + _ = yym1656 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1655) { + } else if yym1656 { + z.DecBinaryUnmarshal(yyv1655) + } else if !yym1656 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1655) + } else { + z.DecFallback(yyv1655, false) + } + } + yyj1648++ + if yyhl1648 { + yyb1648 = yyj1648 > l + } else { + yyb1648 = r.CheckBreak() + } + if yyb1648 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerID = "" + } else { + x.ContainerID = string(r.DecodeString()) + } + for { + yyj1648++ + if yyhl1648 { + yyb1648 = yyj1648 > l + } else { + yyb1648 = r.CheckBreak() + } + if yyb1648 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1648-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerState) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1658 := z.EncBinary() + _ = yym1658 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1659 := !z.EncBinary() + yy2arr1659 := z.EncBasicHandle().StructToArray + var yyq1659 [3]bool + _, _, _ = yysep1659, yyq1659, yy2arr1659 + const yyr1659 bool = false + yyq1659[0] = x.Waiting != nil + yyq1659[1] = x.Running != nil + yyq1659[2] = x.Terminated != nil + var yynn1659 int + if yyr1659 || yy2arr1659 { + r.EncodeArrayStart(3) + } else { + yynn1659 = 0 + for _, b := range yyq1659 { + if b { + yynn1659++ + } + } + r.EncodeMapStart(yynn1659) + yynn1659 = 0 + } + if yyr1659 || yy2arr1659 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1659[0] { + if x.Waiting == nil { + r.EncodeNil() + } else { + x.Waiting.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1659[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("waiting")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Waiting == nil { + r.EncodeNil() + } else { + x.Waiting.CodecEncodeSelf(e) + } + } + } + if yyr1659 || yy2arr1659 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1659[1] { + if x.Running == nil { + r.EncodeNil() + } else { + x.Running.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1659[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("running")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Running == nil { + r.EncodeNil() + } else { + x.Running.CodecEncodeSelf(e) + } + } + } + if yyr1659 || yy2arr1659 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1659[2] { + if x.Terminated == nil { + r.EncodeNil() + } else { + x.Terminated.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1659[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("terminated")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Terminated == nil { + r.EncodeNil() + } else { + x.Terminated.CodecEncodeSelf(e) + } + } + } + if yyr1659 || yy2arr1659 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerState) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1663 := z.DecBinary() + _ = yym1663 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1664 := r.ContainerType() + if yyct1664 == codecSelferValueTypeMap1234 { + yyl1664 := r.ReadMapStart() + if yyl1664 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1664, d) + } + } else if yyct1664 == codecSelferValueTypeArray1234 { + yyl1664 := r.ReadArrayStart() + if yyl1664 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1664, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerState) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1665Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1665Slc + var yyhl1665 bool = l >= 0 + for yyj1665 := 0; ; yyj1665++ { + if yyhl1665 { + if yyj1665 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1665Slc = r.DecodeBytes(yys1665Slc, true, true) + yys1665 := string(yys1665Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1665 { + case "waiting": + if r.TryDecodeAsNil() { + if x.Waiting != nil { + x.Waiting = nil + } + } else { + if x.Waiting == nil { + x.Waiting = new(ContainerStateWaiting) + } + x.Waiting.CodecDecodeSelf(d) + } + case "running": + if r.TryDecodeAsNil() { + if x.Running != nil { + x.Running = nil + } + } else { + if x.Running == nil { + x.Running = new(ContainerStateRunning) + } + x.Running.CodecDecodeSelf(d) + } + case "terminated": + if r.TryDecodeAsNil() { + if x.Terminated != nil { + x.Terminated = nil + } + } else { + if x.Terminated == nil { + x.Terminated = new(ContainerStateTerminated) + } + x.Terminated.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1665) + } // end switch yys1665 + } // end for yyj1665 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerState) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1669 int + var yyb1669 bool + var yyhl1669 bool = l >= 0 + yyj1669++ + if yyhl1669 { + yyb1669 = yyj1669 > l + } else { + yyb1669 = r.CheckBreak() + } + if yyb1669 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Waiting != nil { + x.Waiting = nil + } + } else { + if x.Waiting == nil { + x.Waiting = new(ContainerStateWaiting) + } + x.Waiting.CodecDecodeSelf(d) + } + yyj1669++ + if yyhl1669 { + yyb1669 = yyj1669 > l + } else { + yyb1669 = r.CheckBreak() + } + if yyb1669 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Running != nil { + x.Running = nil + } + } else { + if x.Running == nil { + x.Running = new(ContainerStateRunning) + } + x.Running.CodecDecodeSelf(d) + } + yyj1669++ + if yyhl1669 { + yyb1669 = yyj1669 > l + } else { + yyb1669 = r.CheckBreak() + } + if yyb1669 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Terminated != nil { + x.Terminated = nil + } + } else { + if x.Terminated == nil { + x.Terminated = new(ContainerStateTerminated) + } + x.Terminated.CodecDecodeSelf(d) + } + for { + yyj1669++ + if yyhl1669 { + yyb1669 = yyj1669 > l + } else { + yyb1669 = r.CheckBreak() + } + if yyb1669 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1669-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1673 := z.EncBinary() + _ = yym1673 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1674 := !z.EncBinary() + yy2arr1674 := z.EncBasicHandle().StructToArray + var yyq1674 [8]bool + _, _, _ = yysep1674, yyq1674, yy2arr1674 + const yyr1674 bool = false + yyq1674[1] = true + yyq1674[2] = true + yyq1674[7] = x.ContainerID != "" + var yynn1674 int + if yyr1674 || yy2arr1674 { + r.EncodeArrayStart(8) + } else { + yynn1674 = 5 + for _, b := range yyq1674 { + if b { + yynn1674++ + } + } + r.EncodeMapStart(yynn1674) + yynn1674 = 0 + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1676 := z.EncBinary() + _ = yym1676 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1677 := z.EncBinary() + _ = yym1677 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1674[1] { + yy1679 := &x.State + yy1679.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq1674[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("state")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1680 := &x.State + yy1680.CodecEncodeSelf(e) + } + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1674[2] { + yy1682 := &x.LastTerminationState + yy1682.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq1674[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastState")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1683 := &x.LastTerminationState + yy1683.CodecEncodeSelf(e) + } + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1685 := z.EncBinary() + _ = yym1685 + if false { + } else { + r.EncodeBool(bool(x.Ready)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ready")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1686 := z.EncBinary() + _ = yym1686 + if false { + } else { + r.EncodeBool(bool(x.Ready)) + } + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1688 := z.EncBinary() + _ = yym1688 + if false { + } else { + r.EncodeInt(int64(x.RestartCount)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("restartCount")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1689 := z.EncBinary() + _ = yym1689 + if false { + } else { + r.EncodeInt(int64(x.RestartCount)) + } + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1691 := z.EncBinary() + _ = yym1691 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Image)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("image")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1692 := z.EncBinary() + _ = yym1692 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Image)) + } + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1694 := z.EncBinary() + _ = yym1694 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ImageID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("imageID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1695 := z.EncBinary() + _ = yym1695 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ImageID)) + } + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1674[7] { + yym1697 := z.EncBinary() + _ = yym1697 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1674[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1698 := z.EncBinary() + _ = yym1698 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerID)) + } + } + } + if yyr1674 || yy2arr1674 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1699 := z.DecBinary() + _ = yym1699 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1700 := r.ContainerType() + if yyct1700 == codecSelferValueTypeMap1234 { + yyl1700 := r.ReadMapStart() + if yyl1700 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1700, d) + } + } else if yyct1700 == codecSelferValueTypeArray1234 { + yyl1700 := r.ReadArrayStart() + if yyl1700 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1700, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1701Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1701Slc + var yyhl1701 bool = l >= 0 + for yyj1701 := 0; ; yyj1701++ { + if yyhl1701 { + if yyj1701 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1701Slc = r.DecodeBytes(yys1701Slc, true, true) + yys1701 := string(yys1701Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1701 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "state": + if r.TryDecodeAsNil() { + x.State = ContainerState{} + } else { + yyv1703 := &x.State + yyv1703.CodecDecodeSelf(d) + } + case "lastState": + if r.TryDecodeAsNil() { + x.LastTerminationState = ContainerState{} + } else { + yyv1704 := &x.LastTerminationState + yyv1704.CodecDecodeSelf(d) + } + case "ready": + if r.TryDecodeAsNil() { + x.Ready = false + } else { + x.Ready = bool(r.DecodeBool()) + } + case "restartCount": + if r.TryDecodeAsNil() { + x.RestartCount = 0 + } else { + x.RestartCount = int32(r.DecodeInt(32)) + } + case "image": + if r.TryDecodeAsNil() { + x.Image = "" + } else { + x.Image = string(r.DecodeString()) + } + case "imageID": + if r.TryDecodeAsNil() { + x.ImageID = "" + } else { + x.ImageID = string(r.DecodeString()) + } + case "containerID": + if r.TryDecodeAsNil() { + x.ContainerID = "" + } else { + x.ContainerID = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1701) + } // end switch yys1701 + } // end for yyj1701 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1710 int + var yyb1710 bool + var yyhl1710 bool = l >= 0 + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.State = ContainerState{} + } else { + yyv1712 := &x.State + yyv1712.CodecDecodeSelf(d) + } + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTerminationState = ContainerState{} + } else { + yyv1713 := &x.LastTerminationState + yyv1713.CodecDecodeSelf(d) + } + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ready = false + } else { + x.Ready = bool(r.DecodeBool()) + } + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RestartCount = 0 + } else { + x.RestartCount = int32(r.DecodeInt(32)) + } + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Image = "" + } else { + x.Image = string(r.DecodeString()) + } + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ImageID = "" + } else { + x.ImageID = string(r.DecodeString()) + } + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerID = "" + } else { + x.ContainerID = string(r.DecodeString()) + } + for { + yyj1710++ + if yyhl1710 { + yyb1710 = yyj1710 > l + } else { + yyb1710 = r.CheckBreak() + } + if yyb1710 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1710-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x PodPhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1719 := z.EncBinary() + _ = yym1719 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PodPhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1720 := z.DecBinary() + _ = yym1720 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x PodConditionType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1721 := z.EncBinary() + _ = yym1721 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *PodConditionType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1722 := z.DecBinary() + _ = yym1722 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *PodCondition) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1723 := z.EncBinary() + _ = yym1723 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1724 := !z.EncBinary() + yy2arr1724 := z.EncBasicHandle().StructToArray + var yyq1724 [6]bool + _, _, _ = yysep1724, yyq1724, yy2arr1724 + const yyr1724 bool = false + yyq1724[2] = true + yyq1724[3] = true + yyq1724[4] = x.Reason != "" + yyq1724[5] = x.Message != "" + var yynn1724 int + if yyr1724 || yy2arr1724 { + r.EncodeArrayStart(6) + } else { + yynn1724 = 2 + for _, b := range yyq1724 { + if b { + yynn1724++ + } + } + r.EncodeMapStart(yynn1724) + yynn1724 = 0 + } + if yyr1724 || yy2arr1724 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr1724 || yy2arr1724 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Status.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Status.CodecEncodeSelf(e) + } + if yyr1724 || yy2arr1724 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1724[2] { + yy1728 := &x.LastProbeTime + yym1729 := z.EncBinary() + _ = yym1729 + if false { + } else if z.HasExtensions() && z.EncExt(yy1728) { + } else if yym1729 { + z.EncBinaryMarshal(yy1728) + } else if !yym1729 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1728) + } else { + z.EncFallback(yy1728) + } + } else { + r.EncodeNil() + } + } else { + if yyq1724[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastProbeTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1730 := &x.LastProbeTime + yym1731 := z.EncBinary() + _ = yym1731 + if false { + } else if z.HasExtensions() && z.EncExt(yy1730) { + } else if yym1731 { + z.EncBinaryMarshal(yy1730) + } else if !yym1731 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1730) + } else { + z.EncFallback(yy1730) + } + } + } + if yyr1724 || yy2arr1724 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1724[3] { + yy1733 := &x.LastTransitionTime + yym1734 := z.EncBinary() + _ = yym1734 + if false { + } else if z.HasExtensions() && z.EncExt(yy1733) { + } else if yym1734 { + z.EncBinaryMarshal(yy1733) + } else if !yym1734 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1733) + } else { + z.EncFallback(yy1733) + } + } else { + r.EncodeNil() + } + } else { + if yyq1724[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastTransitionTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1735 := &x.LastTransitionTime + yym1736 := z.EncBinary() + _ = yym1736 + if false { + } else if z.HasExtensions() && z.EncExt(yy1735) { + } else if yym1736 { + z.EncBinaryMarshal(yy1735) + } else if !yym1736 && z.IsJSONHandle() { + z.EncJSONMarshal(yy1735) + } else { + z.EncFallback(yy1735) + } + } + } + if yyr1724 || yy2arr1724 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1724[4] { + yym1738 := z.EncBinary() + _ = yym1738 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1724[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1739 := z.EncBinary() + _ = yym1739 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr1724 || yy2arr1724 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1724[5] { + yym1741 := z.EncBinary() + _ = yym1741 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1724[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1742 := z.EncBinary() + _ = yym1742 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr1724 || yy2arr1724 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodCondition) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1743 := z.DecBinary() + _ = yym1743 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1744 := r.ContainerType() + if yyct1744 == codecSelferValueTypeMap1234 { + yyl1744 := r.ReadMapStart() + if yyl1744 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1744, d) + } + } else if yyct1744 == codecSelferValueTypeArray1234 { + yyl1744 := r.ReadArrayStart() + if yyl1744 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1744, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodCondition) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1745Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1745Slc + var yyhl1745 bool = l >= 0 + for yyj1745 := 0; ; yyj1745++ { + if yyhl1745 { + if yyj1745 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1745Slc = r.DecodeBytes(yys1745Slc, true, true) + yys1745 := string(yys1745Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1745 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = PodConditionType(r.DecodeString()) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + case "lastProbeTime": + if r.TryDecodeAsNil() { + x.LastProbeTime = pkg2_unversioned.Time{} + } else { + yyv1748 := &x.LastProbeTime + yym1749 := z.DecBinary() + _ = yym1749 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1748) { + } else if yym1749 { + z.DecBinaryUnmarshal(yyv1748) + } else if !yym1749 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1748) + } else { + z.DecFallback(yyv1748, false) + } + } + case "lastTransitionTime": + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg2_unversioned.Time{} + } else { + yyv1750 := &x.LastTransitionTime + yym1751 := z.DecBinary() + _ = yym1751 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1750) { + } else if yym1751 { + z.DecBinaryUnmarshal(yyv1750) + } else if !yym1751 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1750) + } else { + z.DecFallback(yyv1750, false) + } + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1745) + } // end switch yys1745 + } // end for yyj1745 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodCondition) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1754 int + var yyb1754 bool + var yyhl1754 bool = l >= 0 + yyj1754++ + if yyhl1754 { + yyb1754 = yyj1754 > l + } else { + yyb1754 = r.CheckBreak() + } + if yyb1754 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = PodConditionType(r.DecodeString()) + } + yyj1754++ + if yyhl1754 { + yyb1754 = yyj1754 > l + } else { + yyb1754 = r.CheckBreak() + } + if yyb1754 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + yyj1754++ + if yyhl1754 { + yyb1754 = yyj1754 > l + } else { + yyb1754 = r.CheckBreak() + } + if yyb1754 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastProbeTime = pkg2_unversioned.Time{} + } else { + yyv1757 := &x.LastProbeTime + yym1758 := z.DecBinary() + _ = yym1758 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1757) { + } else if yym1758 { + z.DecBinaryUnmarshal(yyv1757) + } else if !yym1758 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1757) + } else { + z.DecFallback(yyv1757, false) + } + } + yyj1754++ + if yyhl1754 { + yyb1754 = yyj1754 > l + } else { + yyb1754 = r.CheckBreak() + } + if yyb1754 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg2_unversioned.Time{} + } else { + yyv1759 := &x.LastTransitionTime + yym1760 := z.DecBinary() + _ = yym1760 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1759) { + } else if yym1760 { + z.DecBinaryUnmarshal(yyv1759) + } else if !yym1760 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv1759) + } else { + z.DecFallback(yyv1759, false) + } + } + yyj1754++ + if yyhl1754 { + yyb1754 = yyj1754 > l + } else { + yyb1754 = r.CheckBreak() + } + if yyb1754 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj1754++ + if yyhl1754 { + yyb1754 = yyj1754 > l + } else { + yyb1754 = r.CheckBreak() + } + if yyb1754 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj1754++ + if yyhl1754 { + yyb1754 = yyj1754 > l + } else { + yyb1754 = r.CheckBreak() + } + if yyb1754 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1754-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x RestartPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1763 := z.EncBinary() + _ = yym1763 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *RestartPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1764 := z.DecBinary() + _ = yym1764 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x DNSPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1765 := z.EncBinary() + _ = yym1765 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *DNSPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1766 := z.DecBinary() + _ = yym1766 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *NodeSelector) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1767 := z.EncBinary() + _ = yym1767 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1768 := !z.EncBinary() + yy2arr1768 := z.EncBasicHandle().StructToArray + var yyq1768 [1]bool + _, _, _ = yysep1768, yyq1768, yy2arr1768 + const yyr1768 bool = false + var yynn1768 int + if yyr1768 || yy2arr1768 { + r.EncodeArrayStart(1) + } else { + yynn1768 = 1 + for _, b := range yyq1768 { + if b { + yynn1768++ + } + } + r.EncodeMapStart(yynn1768) + yynn1768 = 0 + } + if yyr1768 || yy2arr1768 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.NodeSelectorTerms == nil { + r.EncodeNil() + } else { + yym1770 := z.EncBinary() + _ = yym1770 + if false { + } else { + h.encSliceNodeSelectorTerm(([]NodeSelectorTerm)(x.NodeSelectorTerms), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeSelectorTerms")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NodeSelectorTerms == nil { + r.EncodeNil() + } else { + yym1771 := z.EncBinary() + _ = yym1771 + if false { + } else { + h.encSliceNodeSelectorTerm(([]NodeSelectorTerm)(x.NodeSelectorTerms), e) + } + } + } + if yyr1768 || yy2arr1768 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSelector) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1772 := z.DecBinary() + _ = yym1772 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1773 := r.ContainerType() + if yyct1773 == codecSelferValueTypeMap1234 { + yyl1773 := r.ReadMapStart() + if yyl1773 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1773, d) + } + } else if yyct1773 == codecSelferValueTypeArray1234 { + yyl1773 := r.ReadArrayStart() + if yyl1773 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1773, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSelector) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1774Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1774Slc + var yyhl1774 bool = l >= 0 + for yyj1774 := 0; ; yyj1774++ { + if yyhl1774 { + if yyj1774 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1774Slc = r.DecodeBytes(yys1774Slc, true, true) + yys1774 := string(yys1774Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1774 { + case "nodeSelectorTerms": + if r.TryDecodeAsNil() { + x.NodeSelectorTerms = nil + } else { + yyv1775 := &x.NodeSelectorTerms + yym1776 := z.DecBinary() + _ = yym1776 + if false { + } else { + h.decSliceNodeSelectorTerm((*[]NodeSelectorTerm)(yyv1775), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1774) + } // end switch yys1774 + } // end for yyj1774 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSelector) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1777 int + var yyb1777 bool + var yyhl1777 bool = l >= 0 + yyj1777++ + if yyhl1777 { + yyb1777 = yyj1777 > l + } else { + yyb1777 = r.CheckBreak() + } + if yyb1777 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodeSelectorTerms = nil + } else { + yyv1778 := &x.NodeSelectorTerms + yym1779 := z.DecBinary() + _ = yym1779 + if false { + } else { + h.decSliceNodeSelectorTerm((*[]NodeSelectorTerm)(yyv1778), d) + } + } + for { + yyj1777++ + if yyhl1777 { + yyb1777 = yyj1777 > l + } else { + yyb1777 = r.CheckBreak() + } + if yyb1777 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1777-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeSelectorTerm) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1780 := z.EncBinary() + _ = yym1780 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1781 := !z.EncBinary() + yy2arr1781 := z.EncBasicHandle().StructToArray + var yyq1781 [1]bool + _, _, _ = yysep1781, yyq1781, yy2arr1781 + const yyr1781 bool = false + var yynn1781 int + if yyr1781 || yy2arr1781 { + r.EncodeArrayStart(1) + } else { + yynn1781 = 1 + for _, b := range yyq1781 { + if b { + yynn1781++ + } + } + r.EncodeMapStart(yynn1781) + yynn1781 = 0 + } + if yyr1781 || yy2arr1781 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.MatchExpressions == nil { + r.EncodeNil() + } else { + yym1783 := z.EncBinary() + _ = yym1783 + if false { + } else { + h.encSliceNodeSelectorRequirement(([]NodeSelectorRequirement)(x.MatchExpressions), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("matchExpressions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.MatchExpressions == nil { + r.EncodeNil() + } else { + yym1784 := z.EncBinary() + _ = yym1784 + if false { + } else { + h.encSliceNodeSelectorRequirement(([]NodeSelectorRequirement)(x.MatchExpressions), e) + } + } + } + if yyr1781 || yy2arr1781 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSelectorTerm) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1785 := z.DecBinary() + _ = yym1785 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1786 := r.ContainerType() + if yyct1786 == codecSelferValueTypeMap1234 { + yyl1786 := r.ReadMapStart() + if yyl1786 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1786, d) + } + } else if yyct1786 == codecSelferValueTypeArray1234 { + yyl1786 := r.ReadArrayStart() + if yyl1786 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1786, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSelectorTerm) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1787Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1787Slc + var yyhl1787 bool = l >= 0 + for yyj1787 := 0; ; yyj1787++ { + if yyhl1787 { + if yyj1787 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1787Slc = r.DecodeBytes(yys1787Slc, true, true) + yys1787 := string(yys1787Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1787 { + case "matchExpressions": + if r.TryDecodeAsNil() { + x.MatchExpressions = nil + } else { + yyv1788 := &x.MatchExpressions + yym1789 := z.DecBinary() + _ = yym1789 + if false { + } else { + h.decSliceNodeSelectorRequirement((*[]NodeSelectorRequirement)(yyv1788), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1787) + } // end switch yys1787 + } // end for yyj1787 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSelectorTerm) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1790 int + var yyb1790 bool + var yyhl1790 bool = l >= 0 + yyj1790++ + if yyhl1790 { + yyb1790 = yyj1790 > l + } else { + yyb1790 = r.CheckBreak() + } + if yyb1790 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MatchExpressions = nil + } else { + yyv1791 := &x.MatchExpressions + yym1792 := z.DecBinary() + _ = yym1792 + if false { + } else { + h.decSliceNodeSelectorRequirement((*[]NodeSelectorRequirement)(yyv1791), d) + } + } + for { + yyj1790++ + if yyhl1790 { + yyb1790 = yyj1790 > l + } else { + yyb1790 = r.CheckBreak() + } + if yyb1790 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1790-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeSelectorRequirement) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1793 := z.EncBinary() + _ = yym1793 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1794 := !z.EncBinary() + yy2arr1794 := z.EncBasicHandle().StructToArray + var yyq1794 [3]bool + _, _, _ = yysep1794, yyq1794, yy2arr1794 + const yyr1794 bool = false + yyq1794[2] = len(x.Values) != 0 + var yynn1794 int + if yyr1794 || yy2arr1794 { + r.EncodeArrayStart(3) + } else { + yynn1794 = 2 + for _, b := range yyq1794 { + if b { + yynn1794++ + } + } + r.EncodeMapStart(yynn1794) + yynn1794 = 0 + } + if yyr1794 || yy2arr1794 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1796 := z.EncBinary() + _ = yym1796 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1797 := z.EncBinary() + _ = yym1797 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1794 || yy2arr1794 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Operator.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("operator")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Operator.CodecEncodeSelf(e) + } + if yyr1794 || yy2arr1794 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1794[2] { + if x.Values == nil { + r.EncodeNil() + } else { + yym1800 := z.EncBinary() + _ = yym1800 + if false { + } else { + z.F.EncSliceStringV(x.Values, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1794[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("values")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Values == nil { + r.EncodeNil() + } else { + yym1801 := z.EncBinary() + _ = yym1801 + if false { + } else { + z.F.EncSliceStringV(x.Values, false, e) + } + } + } + } + if yyr1794 || yy2arr1794 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSelectorRequirement) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1802 := z.DecBinary() + _ = yym1802 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1803 := r.ContainerType() + if yyct1803 == codecSelferValueTypeMap1234 { + yyl1803 := r.ReadMapStart() + if yyl1803 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1803, d) + } + } else if yyct1803 == codecSelferValueTypeArray1234 { + yyl1803 := r.ReadArrayStart() + if yyl1803 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1803, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSelectorRequirement) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1804Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1804Slc + var yyhl1804 bool = l >= 0 + for yyj1804 := 0; ; yyj1804++ { + if yyhl1804 { + if yyj1804 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1804Slc = r.DecodeBytes(yys1804Slc, true, true) + yys1804 := string(yys1804Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1804 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "operator": + if r.TryDecodeAsNil() { + x.Operator = "" + } else { + x.Operator = NodeSelectorOperator(r.DecodeString()) + } + case "values": + if r.TryDecodeAsNil() { + x.Values = nil + } else { + yyv1807 := &x.Values + yym1808 := z.DecBinary() + _ = yym1808 + if false { + } else { + z.F.DecSliceStringX(yyv1807, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1804) + } // end switch yys1804 + } // end for yyj1804 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSelectorRequirement) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1809 int + var yyb1809 bool + var yyhl1809 bool = l >= 0 + yyj1809++ + if yyhl1809 { + yyb1809 = yyj1809 > l + } else { + yyb1809 = r.CheckBreak() + } + if yyb1809 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj1809++ + if yyhl1809 { + yyb1809 = yyj1809 > l + } else { + yyb1809 = r.CheckBreak() + } + if yyb1809 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Operator = "" + } else { + x.Operator = NodeSelectorOperator(r.DecodeString()) + } + yyj1809++ + if yyhl1809 { + yyb1809 = yyj1809 > l + } else { + yyb1809 = r.CheckBreak() + } + if yyb1809 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Values = nil + } else { + yyv1812 := &x.Values + yym1813 := z.DecBinary() + _ = yym1813 + if false { + } else { + z.F.DecSliceStringX(yyv1812, false, d) + } + } + for { + yyj1809++ + if yyhl1809 { + yyb1809 = yyj1809 > l + } else { + yyb1809 = r.CheckBreak() + } + if yyb1809 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1809-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x NodeSelectorOperator) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1814 := z.EncBinary() + _ = yym1814 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NodeSelectorOperator) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1815 := z.DecBinary() + _ = yym1815 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *Affinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1816 := z.EncBinary() + _ = yym1816 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1817 := !z.EncBinary() + yy2arr1817 := z.EncBasicHandle().StructToArray + var yyq1817 [3]bool + _, _, _ = yysep1817, yyq1817, yy2arr1817 + const yyr1817 bool = false + yyq1817[0] = x.NodeAffinity != nil + yyq1817[1] = x.PodAffinity != nil + yyq1817[2] = x.PodAntiAffinity != nil + var yynn1817 int + if yyr1817 || yy2arr1817 { + r.EncodeArrayStart(3) + } else { + yynn1817 = 0 + for _, b := range yyq1817 { + if b { + yynn1817++ + } + } + r.EncodeMapStart(yynn1817) + yynn1817 = 0 + } + if yyr1817 || yy2arr1817 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1817[0] { + if x.NodeAffinity == nil { + r.EncodeNil() + } else { + x.NodeAffinity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1817[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeAffinity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NodeAffinity == nil { + r.EncodeNil() + } else { + x.NodeAffinity.CodecEncodeSelf(e) + } + } + } + if yyr1817 || yy2arr1817 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1817[1] { + if x.PodAffinity == nil { + r.EncodeNil() + } else { + x.PodAffinity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1817[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podAffinity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PodAffinity == nil { + r.EncodeNil() + } else { + x.PodAffinity.CodecEncodeSelf(e) + } + } + } + if yyr1817 || yy2arr1817 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1817[2] { + if x.PodAntiAffinity == nil { + r.EncodeNil() + } else { + x.PodAntiAffinity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1817[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podAntiAffinity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PodAntiAffinity == nil { + r.EncodeNil() + } else { + x.PodAntiAffinity.CodecEncodeSelf(e) + } + } + } + if yyr1817 || yy2arr1817 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Affinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1821 := z.DecBinary() + _ = yym1821 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1822 := r.ContainerType() + if yyct1822 == codecSelferValueTypeMap1234 { + yyl1822 := r.ReadMapStart() + if yyl1822 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1822, d) + } + } else if yyct1822 == codecSelferValueTypeArray1234 { + yyl1822 := r.ReadArrayStart() + if yyl1822 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1822, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Affinity) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1823Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1823Slc + var yyhl1823 bool = l >= 0 + for yyj1823 := 0; ; yyj1823++ { + if yyhl1823 { + if yyj1823 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1823Slc = r.DecodeBytes(yys1823Slc, true, true) + yys1823 := string(yys1823Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1823 { + case "nodeAffinity": + if r.TryDecodeAsNil() { + if x.NodeAffinity != nil { + x.NodeAffinity = nil + } + } else { + if x.NodeAffinity == nil { + x.NodeAffinity = new(NodeAffinity) + } + x.NodeAffinity.CodecDecodeSelf(d) + } + case "podAffinity": + if r.TryDecodeAsNil() { + if x.PodAffinity != nil { + x.PodAffinity = nil + } + } else { + if x.PodAffinity == nil { + x.PodAffinity = new(PodAffinity) + } + x.PodAffinity.CodecDecodeSelf(d) + } + case "podAntiAffinity": + if r.TryDecodeAsNil() { + if x.PodAntiAffinity != nil { + x.PodAntiAffinity = nil + } + } else { + if x.PodAntiAffinity == nil { + x.PodAntiAffinity = new(PodAntiAffinity) + } + x.PodAntiAffinity.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1823) + } // end switch yys1823 + } // end for yyj1823 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Affinity) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1827 int + var yyb1827 bool + var yyhl1827 bool = l >= 0 + yyj1827++ + if yyhl1827 { + yyb1827 = yyj1827 > l + } else { + yyb1827 = r.CheckBreak() + } + if yyb1827 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NodeAffinity != nil { + x.NodeAffinity = nil + } + } else { + if x.NodeAffinity == nil { + x.NodeAffinity = new(NodeAffinity) + } + x.NodeAffinity.CodecDecodeSelf(d) + } + yyj1827++ + if yyhl1827 { + yyb1827 = yyj1827 > l + } else { + yyb1827 = r.CheckBreak() + } + if yyb1827 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PodAffinity != nil { + x.PodAffinity = nil + } + } else { + if x.PodAffinity == nil { + x.PodAffinity = new(PodAffinity) + } + x.PodAffinity.CodecDecodeSelf(d) + } + yyj1827++ + if yyhl1827 { + yyb1827 = yyj1827 > l + } else { + yyb1827 = r.CheckBreak() + } + if yyb1827 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PodAntiAffinity != nil { + x.PodAntiAffinity = nil + } + } else { + if x.PodAntiAffinity == nil { + x.PodAntiAffinity = new(PodAntiAffinity) + } + x.PodAntiAffinity.CodecDecodeSelf(d) + } + for { + yyj1827++ + if yyhl1827 { + yyb1827 = yyj1827 > l + } else { + yyb1827 = r.CheckBreak() + } + if yyb1827 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1827-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodAffinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1831 := z.EncBinary() + _ = yym1831 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1832 := !z.EncBinary() + yy2arr1832 := z.EncBasicHandle().StructToArray + var yyq1832 [2]bool + _, _, _ = yysep1832, yyq1832, yy2arr1832 + const yyr1832 bool = false + yyq1832[0] = len(x.RequiredDuringSchedulingIgnoredDuringExecution) != 0 + yyq1832[1] = len(x.PreferredDuringSchedulingIgnoredDuringExecution) != 0 + var yynn1832 int + if yyr1832 || yy2arr1832 { + r.EncodeArrayStart(2) + } else { + yynn1832 = 0 + for _, b := range yyq1832 { + if b { + yynn1832++ + } + } + r.EncodeMapStart(yynn1832) + yynn1832 = 0 + } + if yyr1832 || yy2arr1832 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1832[0] { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1834 := z.EncBinary() + _ = yym1834 + if false { + } else { + h.encSlicePodAffinityTerm(([]PodAffinityTerm)(x.RequiredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1832[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requiredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1835 := z.EncBinary() + _ = yym1835 + if false { + } else { + h.encSlicePodAffinityTerm(([]PodAffinityTerm)(x.RequiredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1832 || yy2arr1832 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1832[1] { + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1837 := z.EncBinary() + _ = yym1837 + if false { + } else { + h.encSliceWeightedPodAffinityTerm(([]WeightedPodAffinityTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1832[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preferredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1838 := z.EncBinary() + _ = yym1838 + if false { + } else { + h.encSliceWeightedPodAffinityTerm(([]WeightedPodAffinityTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1832 || yy2arr1832 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodAffinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1839 := z.DecBinary() + _ = yym1839 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1840 := r.ContainerType() + if yyct1840 == codecSelferValueTypeMap1234 { + yyl1840 := r.ReadMapStart() + if yyl1840 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1840, d) + } + } else if yyct1840 == codecSelferValueTypeArray1234 { + yyl1840 := r.ReadArrayStart() + if yyl1840 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1840, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodAffinity) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1841Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1841Slc + var yyhl1841 bool = l >= 0 + for yyj1841 := 0; ; yyj1841++ { + if yyhl1841 { + if yyj1841 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1841Slc = r.DecodeBytes(yys1841Slc, true, true) + yys1841 := string(yys1841Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1841 { + case "requiredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1842 := &x.RequiredDuringSchedulingIgnoredDuringExecution + yym1843 := z.DecBinary() + _ = yym1843 + if false { + } else { + h.decSlicePodAffinityTerm((*[]PodAffinityTerm)(yyv1842), d) + } + } + case "preferredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1844 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1845 := z.DecBinary() + _ = yym1845 + if false { + } else { + h.decSliceWeightedPodAffinityTerm((*[]WeightedPodAffinityTerm)(yyv1844), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1841) + } // end switch yys1841 + } // end for yyj1841 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodAffinity) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1846 int + var yyb1846 bool + var yyhl1846 bool = l >= 0 + yyj1846++ + if yyhl1846 { + yyb1846 = yyj1846 > l + } else { + yyb1846 = r.CheckBreak() + } + if yyb1846 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1847 := &x.RequiredDuringSchedulingIgnoredDuringExecution + yym1848 := z.DecBinary() + _ = yym1848 + if false { + } else { + h.decSlicePodAffinityTerm((*[]PodAffinityTerm)(yyv1847), d) + } + } + yyj1846++ + if yyhl1846 { + yyb1846 = yyj1846 > l + } else { + yyb1846 = r.CheckBreak() + } + if yyb1846 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1849 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1850 := z.DecBinary() + _ = yym1850 + if false { + } else { + h.decSliceWeightedPodAffinityTerm((*[]WeightedPodAffinityTerm)(yyv1849), d) + } + } + for { + yyj1846++ + if yyhl1846 { + yyb1846 = yyj1846 > l + } else { + yyb1846 = r.CheckBreak() + } + if yyb1846 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1846-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodAntiAffinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1851 := z.EncBinary() + _ = yym1851 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1852 := !z.EncBinary() + yy2arr1852 := z.EncBasicHandle().StructToArray + var yyq1852 [2]bool + _, _, _ = yysep1852, yyq1852, yy2arr1852 + const yyr1852 bool = false + yyq1852[0] = len(x.RequiredDuringSchedulingIgnoredDuringExecution) != 0 + yyq1852[1] = len(x.PreferredDuringSchedulingIgnoredDuringExecution) != 0 + var yynn1852 int + if yyr1852 || yy2arr1852 { + r.EncodeArrayStart(2) + } else { + yynn1852 = 0 + for _, b := range yyq1852 { + if b { + yynn1852++ + } + } + r.EncodeMapStart(yynn1852) + yynn1852 = 0 + } + if yyr1852 || yy2arr1852 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1852[0] { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1854 := z.EncBinary() + _ = yym1854 + if false { + } else { + h.encSlicePodAffinityTerm(([]PodAffinityTerm)(x.RequiredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1852[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requiredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1855 := z.EncBinary() + _ = yym1855 + if false { + } else { + h.encSlicePodAffinityTerm(([]PodAffinityTerm)(x.RequiredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1852 || yy2arr1852 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1852[1] { + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1857 := z.EncBinary() + _ = yym1857 + if false { + } else { + h.encSliceWeightedPodAffinityTerm(([]WeightedPodAffinityTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1852[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preferredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1858 := z.EncBinary() + _ = yym1858 + if false { + } else { + h.encSliceWeightedPodAffinityTerm(([]WeightedPodAffinityTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1852 || yy2arr1852 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodAntiAffinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1859 := z.DecBinary() + _ = yym1859 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1860 := r.ContainerType() + if yyct1860 == codecSelferValueTypeMap1234 { + yyl1860 := r.ReadMapStart() + if yyl1860 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1860, d) + } + } else if yyct1860 == codecSelferValueTypeArray1234 { + yyl1860 := r.ReadArrayStart() + if yyl1860 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1860, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodAntiAffinity) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1861Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1861Slc + var yyhl1861 bool = l >= 0 + for yyj1861 := 0; ; yyj1861++ { + if yyhl1861 { + if yyj1861 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1861Slc = r.DecodeBytes(yys1861Slc, true, true) + yys1861 := string(yys1861Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1861 { + case "requiredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1862 := &x.RequiredDuringSchedulingIgnoredDuringExecution + yym1863 := z.DecBinary() + _ = yym1863 + if false { + } else { + h.decSlicePodAffinityTerm((*[]PodAffinityTerm)(yyv1862), d) + } + } + case "preferredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1864 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1865 := z.DecBinary() + _ = yym1865 + if false { + } else { + h.decSliceWeightedPodAffinityTerm((*[]WeightedPodAffinityTerm)(yyv1864), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1861) + } // end switch yys1861 + } // end for yyj1861 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodAntiAffinity) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1866 int + var yyb1866 bool + var yyhl1866 bool = l >= 0 + yyj1866++ + if yyhl1866 { + yyb1866 = yyj1866 > l + } else { + yyb1866 = r.CheckBreak() + } + if yyb1866 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1867 := &x.RequiredDuringSchedulingIgnoredDuringExecution + yym1868 := z.DecBinary() + _ = yym1868 + if false { + } else { + h.decSlicePodAffinityTerm((*[]PodAffinityTerm)(yyv1867), d) + } + } + yyj1866++ + if yyhl1866 { + yyb1866 = yyj1866 > l + } else { + yyb1866 = r.CheckBreak() + } + if yyb1866 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1869 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1870 := z.DecBinary() + _ = yym1870 + if false { + } else { + h.decSliceWeightedPodAffinityTerm((*[]WeightedPodAffinityTerm)(yyv1869), d) + } + } + for { + yyj1866++ + if yyhl1866 { + yyb1866 = yyj1866 > l + } else { + yyb1866 = r.CheckBreak() + } + if yyb1866 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1866-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *WeightedPodAffinityTerm) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1871 := z.EncBinary() + _ = yym1871 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1872 := !z.EncBinary() + yy2arr1872 := z.EncBasicHandle().StructToArray + var yyq1872 [2]bool + _, _, _ = yysep1872, yyq1872, yy2arr1872 + const yyr1872 bool = false + var yynn1872 int + if yyr1872 || yy2arr1872 { + r.EncodeArrayStart(2) + } else { + yynn1872 = 2 + for _, b := range yyq1872 { + if b { + yynn1872++ + } + } + r.EncodeMapStart(yynn1872) + yynn1872 = 0 + } + if yyr1872 || yy2arr1872 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1874 := z.EncBinary() + _ = yym1874 + if false { + } else { + r.EncodeInt(int64(x.Weight)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("weight")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1875 := z.EncBinary() + _ = yym1875 + if false { + } else { + r.EncodeInt(int64(x.Weight)) + } + } + if yyr1872 || yy2arr1872 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1877 := &x.PodAffinityTerm + yy1877.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podAffinityTerm")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1878 := &x.PodAffinityTerm + yy1878.CodecEncodeSelf(e) + } + if yyr1872 || yy2arr1872 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *WeightedPodAffinityTerm) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1879 := z.DecBinary() + _ = yym1879 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1880 := r.ContainerType() + if yyct1880 == codecSelferValueTypeMap1234 { + yyl1880 := r.ReadMapStart() + if yyl1880 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1880, d) + } + } else if yyct1880 == codecSelferValueTypeArray1234 { + yyl1880 := r.ReadArrayStart() + if yyl1880 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1880, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *WeightedPodAffinityTerm) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1881Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1881Slc + var yyhl1881 bool = l >= 0 + for yyj1881 := 0; ; yyj1881++ { + if yyhl1881 { + if yyj1881 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1881Slc = r.DecodeBytes(yys1881Slc, true, true) + yys1881 := string(yys1881Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1881 { + case "weight": + if r.TryDecodeAsNil() { + x.Weight = 0 + } else { + x.Weight = int32(r.DecodeInt(32)) + } + case "podAffinityTerm": + if r.TryDecodeAsNil() { + x.PodAffinityTerm = PodAffinityTerm{} + } else { + yyv1883 := &x.PodAffinityTerm + yyv1883.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1881) + } // end switch yys1881 + } // end for yyj1881 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *WeightedPodAffinityTerm) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1884 int + var yyb1884 bool + var yyhl1884 bool = l >= 0 + yyj1884++ + if yyhl1884 { + yyb1884 = yyj1884 > l + } else { + yyb1884 = r.CheckBreak() + } + if yyb1884 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Weight = 0 + } else { + x.Weight = int32(r.DecodeInt(32)) + } + yyj1884++ + if yyhl1884 { + yyb1884 = yyj1884 > l + } else { + yyb1884 = r.CheckBreak() + } + if yyb1884 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodAffinityTerm = PodAffinityTerm{} + } else { + yyv1886 := &x.PodAffinityTerm + yyv1886.CodecDecodeSelf(d) + } + for { + yyj1884++ + if yyhl1884 { + yyb1884 = yyj1884 > l + } else { + yyb1884 = r.CheckBreak() + } + if yyb1884 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1884-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodAffinityTerm) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1887 := z.EncBinary() + _ = yym1887 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1888 := !z.EncBinary() + yy2arr1888 := z.EncBasicHandle().StructToArray + var yyq1888 [3]bool + _, _, _ = yysep1888, yyq1888, yy2arr1888 + const yyr1888 bool = false + yyq1888[0] = x.LabelSelector != nil + yyq1888[2] = x.TopologyKey != "" + var yynn1888 int + if yyr1888 || yy2arr1888 { + r.EncodeArrayStart(3) + } else { + yynn1888 = 1 + for _, b := range yyq1888 { + if b { + yynn1888++ + } + } + r.EncodeMapStart(yynn1888) + yynn1888 = 0 + } + if yyr1888 || yy2arr1888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1888[0] { + if x.LabelSelector == nil { + r.EncodeNil() + } else { + yym1890 := z.EncBinary() + _ = yym1890 + if false { + } else if z.HasExtensions() && z.EncExt(x.LabelSelector) { + } else { + z.EncFallback(x.LabelSelector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1888[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("labelSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LabelSelector == nil { + r.EncodeNil() + } else { + yym1891 := z.EncBinary() + _ = yym1891 + if false { + } else if z.HasExtensions() && z.EncExt(x.LabelSelector) { + } else { + z.EncFallback(x.LabelSelector) + } + } + } + } + if yyr1888 || yy2arr1888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Namespaces == nil { + r.EncodeNil() + } else { + yym1893 := z.EncBinary() + _ = yym1893 + if false { + } else { + z.F.EncSliceStringV(x.Namespaces, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("namespaces")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Namespaces == nil { + r.EncodeNil() + } else { + yym1894 := z.EncBinary() + _ = yym1894 + if false { + } else { + z.F.EncSliceStringV(x.Namespaces, false, e) + } + } + } + if yyr1888 || yy2arr1888 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1888[2] { + yym1896 := z.EncBinary() + _ = yym1896 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TopologyKey)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1888[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("topologyKey")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1897 := z.EncBinary() + _ = yym1897 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.TopologyKey)) + } + } + } + if yyr1888 || yy2arr1888 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodAffinityTerm) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1898 := z.DecBinary() + _ = yym1898 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1899 := r.ContainerType() + if yyct1899 == codecSelferValueTypeMap1234 { + yyl1899 := r.ReadMapStart() + if yyl1899 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1899, d) + } + } else if yyct1899 == codecSelferValueTypeArray1234 { + yyl1899 := r.ReadArrayStart() + if yyl1899 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1899, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodAffinityTerm) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1900Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1900Slc + var yyhl1900 bool = l >= 0 + for yyj1900 := 0; ; yyj1900++ { + if yyhl1900 { + if yyj1900 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1900Slc = r.DecodeBytes(yys1900Slc, true, true) + yys1900 := string(yys1900Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1900 { + case "labelSelector": + if r.TryDecodeAsNil() { + if x.LabelSelector != nil { + x.LabelSelector = nil + } + } else { + if x.LabelSelector == nil { + x.LabelSelector = new(pkg2_unversioned.LabelSelector) + } + yym1902 := z.DecBinary() + _ = yym1902 + if false { + } else if z.HasExtensions() && z.DecExt(x.LabelSelector) { + } else { + z.DecFallback(x.LabelSelector, false) + } + } + case "namespaces": + if r.TryDecodeAsNil() { + x.Namespaces = nil + } else { + yyv1903 := &x.Namespaces + yym1904 := z.DecBinary() + _ = yym1904 + if false { + } else { + z.F.DecSliceStringX(yyv1903, false, d) + } + } + case "topologyKey": + if r.TryDecodeAsNil() { + x.TopologyKey = "" + } else { + x.TopologyKey = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1900) + } // end switch yys1900 + } // end for yyj1900 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodAffinityTerm) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1906 int + var yyb1906 bool + var yyhl1906 bool = l >= 0 + yyj1906++ + if yyhl1906 { + yyb1906 = yyj1906 > l + } else { + yyb1906 = r.CheckBreak() + } + if yyb1906 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.LabelSelector != nil { + x.LabelSelector = nil + } + } else { + if x.LabelSelector == nil { + x.LabelSelector = new(pkg2_unversioned.LabelSelector) + } + yym1908 := z.DecBinary() + _ = yym1908 + if false { + } else if z.HasExtensions() && z.DecExt(x.LabelSelector) { + } else { + z.DecFallback(x.LabelSelector, false) + } + } + yyj1906++ + if yyhl1906 { + yyb1906 = yyj1906 > l + } else { + yyb1906 = r.CheckBreak() + } + if yyb1906 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Namespaces = nil + } else { + yyv1909 := &x.Namespaces + yym1910 := z.DecBinary() + _ = yym1910 + if false { + } else { + z.F.DecSliceStringX(yyv1909, false, d) + } + } + yyj1906++ + if yyhl1906 { + yyb1906 = yyj1906 > l + } else { + yyb1906 = r.CheckBreak() + } + if yyb1906 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TopologyKey = "" + } else { + x.TopologyKey = string(r.DecodeString()) + } + for { + yyj1906++ + if yyhl1906 { + yyb1906 = yyj1906 > l + } else { + yyb1906 = r.CheckBreak() + } + if yyb1906 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1906-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeAffinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1912 := z.EncBinary() + _ = yym1912 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1913 := !z.EncBinary() + yy2arr1913 := z.EncBasicHandle().StructToArray + var yyq1913 [2]bool + _, _, _ = yysep1913, yyq1913, yy2arr1913 + const yyr1913 bool = false + yyq1913[0] = x.RequiredDuringSchedulingIgnoredDuringExecution != nil + yyq1913[1] = len(x.PreferredDuringSchedulingIgnoredDuringExecution) != 0 + var yynn1913 int + if yyr1913 || yy2arr1913 { + r.EncodeArrayStart(2) + } else { + yynn1913 = 0 + for _, b := range yyq1913 { + if b { + yynn1913++ + } + } + r.EncodeMapStart(yynn1913) + yynn1913 = 0 + } + if yyr1913 || yy2arr1913 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1913[0] { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + x.RequiredDuringSchedulingIgnoredDuringExecution.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1913[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requiredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + x.RequiredDuringSchedulingIgnoredDuringExecution.CodecEncodeSelf(e) + } + } + } + if yyr1913 || yy2arr1913 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1913[1] { + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1916 := z.EncBinary() + _ = yym1916 + if false { + } else { + h.encSlicePreferredSchedulingTerm(([]PreferredSchedulingTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1913[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preferredDuringSchedulingIgnoredDuringExecution")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreferredDuringSchedulingIgnoredDuringExecution == nil { + r.EncodeNil() + } else { + yym1917 := z.EncBinary() + _ = yym1917 + if false { + } else { + h.encSlicePreferredSchedulingTerm(([]PreferredSchedulingTerm)(x.PreferredDuringSchedulingIgnoredDuringExecution), e) + } + } + } + } + if yyr1913 || yy2arr1913 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeAffinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1918 := z.DecBinary() + _ = yym1918 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1919 := r.ContainerType() + if yyct1919 == codecSelferValueTypeMap1234 { + yyl1919 := r.ReadMapStart() + if yyl1919 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1919, d) + } + } else if yyct1919 == codecSelferValueTypeArray1234 { + yyl1919 := r.ReadArrayStart() + if yyl1919 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1919, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeAffinity) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1920Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1920Slc + var yyhl1920 bool = l >= 0 + for yyj1920 := 0; ; yyj1920++ { + if yyhl1920 { + if yyj1920 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1920Slc = r.DecodeBytes(yys1920Slc, true, true) + yys1920 := string(yys1920Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1920 { + case "requiredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + if x.RequiredDuringSchedulingIgnoredDuringExecution != nil { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + } else { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + x.RequiredDuringSchedulingIgnoredDuringExecution = new(NodeSelector) + } + x.RequiredDuringSchedulingIgnoredDuringExecution.CodecDecodeSelf(d) + } + case "preferredDuringSchedulingIgnoredDuringExecution": + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1922 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1923 := z.DecBinary() + _ = yym1923 + if false { + } else { + h.decSlicePreferredSchedulingTerm((*[]PreferredSchedulingTerm)(yyv1922), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1920) + } // end switch yys1920 + } // end for yyj1920 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeAffinity) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1924 int + var yyb1924 bool + var yyhl1924 bool = l >= 0 + yyj1924++ + if yyhl1924 { + yyb1924 = yyj1924 > l + } else { + yyb1924 = r.CheckBreak() + } + if yyb1924 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RequiredDuringSchedulingIgnoredDuringExecution != nil { + x.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + } else { + if x.RequiredDuringSchedulingIgnoredDuringExecution == nil { + x.RequiredDuringSchedulingIgnoredDuringExecution = new(NodeSelector) + } + x.RequiredDuringSchedulingIgnoredDuringExecution.CodecDecodeSelf(d) + } + yyj1924++ + if yyhl1924 { + yyb1924 = yyj1924 > l + } else { + yyb1924 = r.CheckBreak() + } + if yyb1924 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PreferredDuringSchedulingIgnoredDuringExecution = nil + } else { + yyv1926 := &x.PreferredDuringSchedulingIgnoredDuringExecution + yym1927 := z.DecBinary() + _ = yym1927 + if false { + } else { + h.decSlicePreferredSchedulingTerm((*[]PreferredSchedulingTerm)(yyv1926), d) + } + } + for { + yyj1924++ + if yyhl1924 { + yyb1924 = yyj1924 > l + } else { + yyb1924 = r.CheckBreak() + } + if yyb1924 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1924-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PreferredSchedulingTerm) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1928 := z.EncBinary() + _ = yym1928 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1929 := !z.EncBinary() + yy2arr1929 := z.EncBasicHandle().StructToArray + var yyq1929 [2]bool + _, _, _ = yysep1929, yyq1929, yy2arr1929 + const yyr1929 bool = false + var yynn1929 int + if yyr1929 || yy2arr1929 { + r.EncodeArrayStart(2) + } else { + yynn1929 = 2 + for _, b := range yyq1929 { + if b { + yynn1929++ + } + } + r.EncodeMapStart(yynn1929) + yynn1929 = 0 + } + if yyr1929 || yy2arr1929 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1931 := z.EncBinary() + _ = yym1931 + if false { + } else { + r.EncodeInt(int64(x.Weight)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("weight")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1932 := z.EncBinary() + _ = yym1932 + if false { + } else { + r.EncodeInt(int64(x.Weight)) + } + } + if yyr1929 || yy2arr1929 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1934 := &x.Preference + yy1934.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preference")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1935 := &x.Preference + yy1935.CodecEncodeSelf(e) + } + if yyr1929 || yy2arr1929 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PreferredSchedulingTerm) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1936 := z.DecBinary() + _ = yym1936 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1937 := r.ContainerType() + if yyct1937 == codecSelferValueTypeMap1234 { + yyl1937 := r.ReadMapStart() + if yyl1937 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1937, d) + } + } else if yyct1937 == codecSelferValueTypeArray1234 { + yyl1937 := r.ReadArrayStart() + if yyl1937 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1937, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PreferredSchedulingTerm) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1938Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1938Slc + var yyhl1938 bool = l >= 0 + for yyj1938 := 0; ; yyj1938++ { + if yyhl1938 { + if yyj1938 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1938Slc = r.DecodeBytes(yys1938Slc, true, true) + yys1938 := string(yys1938Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1938 { + case "weight": + if r.TryDecodeAsNil() { + x.Weight = 0 + } else { + x.Weight = int32(r.DecodeInt(32)) + } + case "preference": + if r.TryDecodeAsNil() { + x.Preference = NodeSelectorTerm{} + } else { + yyv1940 := &x.Preference + yyv1940.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1938) + } // end switch yys1938 + } // end for yyj1938 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PreferredSchedulingTerm) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1941 int + var yyb1941 bool + var yyhl1941 bool = l >= 0 + yyj1941++ + if yyhl1941 { + yyb1941 = yyj1941 > l + } else { + yyb1941 = r.CheckBreak() + } + if yyb1941 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Weight = 0 + } else { + x.Weight = int32(r.DecodeInt(32)) + } + yyj1941++ + if yyhl1941 { + yyb1941 = yyj1941 > l + } else { + yyb1941 = r.CheckBreak() + } + if yyb1941 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Preference = NodeSelectorTerm{} + } else { + yyv1943 := &x.Preference + yyv1943.CodecDecodeSelf(d) + } + for { + yyj1941++ + if yyhl1941 { + yyb1941 = yyj1941 > l + } else { + yyb1941 = r.CheckBreak() + } + if yyb1941 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1941-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Taint) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1944 := z.EncBinary() + _ = yym1944 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1945 := !z.EncBinary() + yy2arr1945 := z.EncBasicHandle().StructToArray + var yyq1945 [3]bool + _, _, _ = yysep1945, yyq1945, yy2arr1945 + const yyr1945 bool = false + yyq1945[1] = x.Value != "" + var yynn1945 int + if yyr1945 || yy2arr1945 { + r.EncodeArrayStart(3) + } else { + yynn1945 = 2 + for _, b := range yyq1945 { + if b { + yynn1945++ + } + } + r.EncodeMapStart(yynn1945) + yynn1945 = 0 + } + if yyr1945 || yy2arr1945 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1947 := z.EncBinary() + _ = yym1947 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1948 := z.EncBinary() + _ = yym1948 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + if yyr1945 || yy2arr1945 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1945[1] { + yym1950 := z.EncBinary() + _ = yym1950 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1945[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1951 := z.EncBinary() + _ = yym1951 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + } + if yyr1945 || yy2arr1945 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Effect.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("effect")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Effect.CodecEncodeSelf(e) + } + if yyr1945 || yy2arr1945 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Taint) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1953 := z.DecBinary() + _ = yym1953 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1954 := r.ContainerType() + if yyct1954 == codecSelferValueTypeMap1234 { + yyl1954 := r.ReadMapStart() + if yyl1954 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1954, d) + } + } else if yyct1954 == codecSelferValueTypeArray1234 { + yyl1954 := r.ReadArrayStart() + if yyl1954 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1954, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Taint) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1955Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1955Slc + var yyhl1955 bool = l >= 0 + for yyj1955 := 0; ; yyj1955++ { + if yyhl1955 { + if yyj1955 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1955Slc = r.DecodeBytes(yys1955Slc, true, true) + yys1955 := string(yys1955Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1955 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + case "effect": + if r.TryDecodeAsNil() { + x.Effect = "" + } else { + x.Effect = TaintEffect(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1955) + } // end switch yys1955 + } // end for yyj1955 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Taint) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1959 int + var yyb1959 bool + var yyhl1959 bool = l >= 0 + yyj1959++ + if yyhl1959 { + yyb1959 = yyj1959 > l + } else { + yyb1959 = r.CheckBreak() + } + if yyb1959 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj1959++ + if yyhl1959 { + yyb1959 = yyj1959 > l + } else { + yyb1959 = r.CheckBreak() + } + if yyb1959 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + yyj1959++ + if yyhl1959 { + yyb1959 = yyj1959 > l + } else { + yyb1959 = r.CheckBreak() + } + if yyb1959 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Effect = "" + } else { + x.Effect = TaintEffect(r.DecodeString()) + } + for { + yyj1959++ + if yyhl1959 { + yyb1959 = yyj1959 > l + } else { + yyb1959 = r.CheckBreak() + } + if yyb1959 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1959-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x TaintEffect) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1963 := z.EncBinary() + _ = yym1963 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *TaintEffect) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1964 := z.DecBinary() + _ = yym1964 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *Toleration) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1965 := z.EncBinary() + _ = yym1965 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1966 := !z.EncBinary() + yy2arr1966 := z.EncBasicHandle().StructToArray + var yyq1966 [4]bool + _, _, _ = yysep1966, yyq1966, yy2arr1966 + const yyr1966 bool = false + yyq1966[0] = x.Key != "" + yyq1966[1] = x.Operator != "" + yyq1966[2] = x.Value != "" + yyq1966[3] = x.Effect != "" + var yynn1966 int + if yyr1966 || yy2arr1966 { + r.EncodeArrayStart(4) + } else { + yynn1966 = 0 + for _, b := range yyq1966 { + if b { + yynn1966++ + } + } + r.EncodeMapStart(yynn1966) + yynn1966 = 0 + } + if yyr1966 || yy2arr1966 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1966[0] { + yym1968 := z.EncBinary() + _ = yym1968 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1966[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("key")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1969 := z.EncBinary() + _ = yym1969 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Key)) + } + } + } + if yyr1966 || yy2arr1966 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1966[1] { + x.Operator.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1966[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("operator")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Operator.CodecEncodeSelf(e) + } + } + if yyr1966 || yy2arr1966 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1966[2] { + yym1972 := z.EncBinary() + _ = yym1972 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1966[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1973 := z.EncBinary() + _ = yym1973 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Value)) + } + } + } + if yyr1966 || yy2arr1966 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1966[3] { + x.Effect.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1966[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("effect")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Effect.CodecEncodeSelf(e) + } + } + if yyr1966 || yy2arr1966 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Toleration) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1975 := z.DecBinary() + _ = yym1975 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1976 := r.ContainerType() + if yyct1976 == codecSelferValueTypeMap1234 { + yyl1976 := r.ReadMapStart() + if yyl1976 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1976, d) + } + } else if yyct1976 == codecSelferValueTypeArray1234 { + yyl1976 := r.ReadArrayStart() + if yyl1976 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1976, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Toleration) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1977Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1977Slc + var yyhl1977 bool = l >= 0 + for yyj1977 := 0; ; yyj1977++ { + if yyhl1977 { + if yyj1977 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1977Slc = r.DecodeBytes(yys1977Slc, true, true) + yys1977 := string(yys1977Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1977 { + case "key": + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + case "operator": + if r.TryDecodeAsNil() { + x.Operator = "" + } else { + x.Operator = TolerationOperator(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + case "effect": + if r.TryDecodeAsNil() { + x.Effect = "" + } else { + x.Effect = TaintEffect(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys1977) + } // end switch yys1977 + } // end for yyj1977 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Toleration) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1982 int + var yyb1982 bool + var yyhl1982 bool = l >= 0 + yyj1982++ + if yyhl1982 { + yyb1982 = yyj1982 > l + } else { + yyb1982 = r.CheckBreak() + } + if yyb1982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Key = "" + } else { + x.Key = string(r.DecodeString()) + } + yyj1982++ + if yyhl1982 { + yyb1982 = yyj1982 > l + } else { + yyb1982 = r.CheckBreak() + } + if yyb1982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Operator = "" + } else { + x.Operator = TolerationOperator(r.DecodeString()) + } + yyj1982++ + if yyhl1982 { + yyb1982 = yyj1982 > l + } else { + yyb1982 = r.CheckBreak() + } + if yyb1982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Value = "" + } else { + x.Value = string(r.DecodeString()) + } + yyj1982++ + if yyhl1982 { + yyb1982 = yyj1982 > l + } else { + yyb1982 = r.CheckBreak() + } + if yyb1982 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Effect = "" + } else { + x.Effect = TaintEffect(r.DecodeString()) + } + for { + yyj1982++ + if yyhl1982 { + yyb1982 = yyj1982 > l + } else { + yyb1982 = r.CheckBreak() + } + if yyb1982 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1982-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x TolerationOperator) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1987 := z.EncBinary() + _ = yym1987 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *TolerationOperator) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1988 := z.DecBinary() + _ = yym1988 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *PodSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1989 := z.EncBinary() + _ = yym1989 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1990 := !z.EncBinary() + yy2arr1990 := z.EncBasicHandle().StructToArray + var yyq1990 [17]bool + _, _, _ = yysep1990, yyq1990, yy2arr1990 + const yyr1990 bool = false + yyq1990[0] = len(x.Volumes) != 0 + yyq1990[2] = x.RestartPolicy != "" + yyq1990[3] = x.TerminationGracePeriodSeconds != nil + yyq1990[4] = x.ActiveDeadlineSeconds != nil + yyq1990[5] = x.DNSPolicy != "" + yyq1990[6] = len(x.NodeSelector) != 0 + yyq1990[7] = x.ServiceAccountName != "" + yyq1990[8] = x.DeprecatedServiceAccount != "" + yyq1990[9] = x.NodeName != "" + yyq1990[10] = x.HostNetwork != false + yyq1990[11] = x.HostPID != false + yyq1990[12] = x.HostIPC != false + yyq1990[13] = x.SecurityContext != nil + yyq1990[14] = len(x.ImagePullSecrets) != 0 + yyq1990[15] = x.Hostname != "" + yyq1990[16] = x.Subdomain != "" + var yynn1990 int + if yyr1990 || yy2arr1990 { + r.EncodeArrayStart(17) + } else { + yynn1990 = 1 + for _, b := range yyq1990 { + if b { + yynn1990++ + } + } + r.EncodeMapStart(yynn1990) + yynn1990 = 0 + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[0] { + if x.Volumes == nil { + r.EncodeNil() + } else { + yym1992 := z.EncBinary() + _ = yym1992 + if false { + } else { + h.encSliceVolume(([]Volume)(x.Volumes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1990[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Volumes == nil { + r.EncodeNil() + } else { + yym1993 := z.EncBinary() + _ = yym1993 + if false { + } else { + h.encSliceVolume(([]Volume)(x.Volumes), e) + } + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Containers == nil { + r.EncodeNil() + } else { + yym1995 := z.EncBinary() + _ = yym1995 + if false { + } else { + h.encSliceContainer(([]Container)(x.Containers), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containers")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Containers == nil { + r.EncodeNil() + } else { + yym1996 := z.EncBinary() + _ = yym1996 + if false { + } else { + h.encSliceContainer(([]Container)(x.Containers), e) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[2] { + x.RestartPolicy.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1990[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("restartPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.RestartPolicy.CodecEncodeSelf(e) + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[3] { + if x.TerminationGracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy1999 := *x.TerminationGracePeriodSeconds + yym2000 := z.EncBinary() + _ = yym2000 + if false { + } else { + r.EncodeInt(int64(yy1999)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1990[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("terminationGracePeriodSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TerminationGracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy2001 := *x.TerminationGracePeriodSeconds + yym2002 := z.EncBinary() + _ = yym2002 + if false { + } else { + r.EncodeInt(int64(yy2001)) + } + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[4] { + if x.ActiveDeadlineSeconds == nil { + r.EncodeNil() + } else { + yy2004 := *x.ActiveDeadlineSeconds + yym2005 := z.EncBinary() + _ = yym2005 + if false { + } else { + r.EncodeInt(int64(yy2004)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1990[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("activeDeadlineSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ActiveDeadlineSeconds == nil { + r.EncodeNil() + } else { + yy2006 := *x.ActiveDeadlineSeconds + yym2007 := z.EncBinary() + _ = yym2007 + if false { + } else { + r.EncodeInt(int64(yy2006)) + } + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[5] { + x.DNSPolicy.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1990[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("dnsPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.DNSPolicy.CodecEncodeSelf(e) + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[6] { + if x.NodeSelector == nil { + r.EncodeNil() + } else { + yym2010 := z.EncBinary() + _ = yym2010 + if false { + } else { + z.F.EncMapStringStringV(x.NodeSelector, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1990[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NodeSelector == nil { + r.EncodeNil() + } else { + yym2011 := z.EncBinary() + _ = yym2011 + if false { + } else { + z.F.EncMapStringStringV(x.NodeSelector, false, e) + } + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[7] { + yym2013 := z.EncBinary() + _ = yym2013 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ServiceAccountName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1990[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("serviceAccountName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2014 := z.EncBinary() + _ = yym2014 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ServiceAccountName)) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[8] { + yym2016 := z.EncBinary() + _ = yym2016 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DeprecatedServiceAccount)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1990[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("serviceAccount")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2017 := z.EncBinary() + _ = yym2017 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DeprecatedServiceAccount)) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[9] { + yym2019 := z.EncBinary() + _ = yym2019 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.NodeName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1990[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2020 := z.EncBinary() + _ = yym2020 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.NodeName)) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[10] { + yym2022 := z.EncBinary() + _ = yym2022 + if false { + } else { + r.EncodeBool(bool(x.HostNetwork)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1990[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostNetwork")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2023 := z.EncBinary() + _ = yym2023 + if false { + } else { + r.EncodeBool(bool(x.HostNetwork)) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[11] { + yym2025 := z.EncBinary() + _ = yym2025 + if false { + } else { + r.EncodeBool(bool(x.HostPID)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1990[11] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2026 := z.EncBinary() + _ = yym2026 + if false { + } else { + r.EncodeBool(bool(x.HostPID)) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[12] { + yym2028 := z.EncBinary() + _ = yym2028 + if false { + } else { + r.EncodeBool(bool(x.HostIPC)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq1990[12] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostIPC")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2029 := z.EncBinary() + _ = yym2029 + if false { + } else { + r.EncodeBool(bool(x.HostIPC)) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[13] { + if x.SecurityContext == nil { + r.EncodeNil() + } else { + x.SecurityContext.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1990[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("securityContext")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SecurityContext == nil { + r.EncodeNil() + } else { + x.SecurityContext.CodecEncodeSelf(e) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[14] { + if x.ImagePullSecrets == nil { + r.EncodeNil() + } else { + yym2032 := z.EncBinary() + _ = yym2032 + if false { + } else { + h.encSliceLocalObjectReference(([]LocalObjectReference)(x.ImagePullSecrets), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1990[14] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("imagePullSecrets")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ImagePullSecrets == nil { + r.EncodeNil() + } else { + yym2033 := z.EncBinary() + _ = yym2033 + if false { + } else { + h.encSliceLocalObjectReference(([]LocalObjectReference)(x.ImagePullSecrets), e) + } + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[15] { + yym2035 := z.EncBinary() + _ = yym2035 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1990[15] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostname")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2036 := z.EncBinary() + _ = yym2036 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1990[16] { + yym2038 := z.EncBinary() + _ = yym2038 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Subdomain)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1990[16] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("subdomain")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2039 := z.EncBinary() + _ = yym2039 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Subdomain)) + } + } + } + if yyr1990 || yy2arr1990 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2040 := z.DecBinary() + _ = yym2040 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2041 := r.ContainerType() + if yyct2041 == codecSelferValueTypeMap1234 { + yyl2041 := r.ReadMapStart() + if yyl2041 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2041, d) + } + } else if yyct2041 == codecSelferValueTypeArray1234 { + yyl2041 := r.ReadArrayStart() + if yyl2041 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2041, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2042Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2042Slc + var yyhl2042 bool = l >= 0 + for yyj2042 := 0; ; yyj2042++ { + if yyhl2042 { + if yyj2042 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2042Slc = r.DecodeBytes(yys2042Slc, true, true) + yys2042 := string(yys2042Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2042 { + case "volumes": + if r.TryDecodeAsNil() { + x.Volumes = nil + } else { + yyv2043 := &x.Volumes + yym2044 := z.DecBinary() + _ = yym2044 + if false { + } else { + h.decSliceVolume((*[]Volume)(yyv2043), d) + } + } + case "containers": + if r.TryDecodeAsNil() { + x.Containers = nil + } else { + yyv2045 := &x.Containers + yym2046 := z.DecBinary() + _ = yym2046 + if false { + } else { + h.decSliceContainer((*[]Container)(yyv2045), d) + } + } + case "restartPolicy": + if r.TryDecodeAsNil() { + x.RestartPolicy = "" + } else { + x.RestartPolicy = RestartPolicy(r.DecodeString()) + } + case "terminationGracePeriodSeconds": + if r.TryDecodeAsNil() { + if x.TerminationGracePeriodSeconds != nil { + x.TerminationGracePeriodSeconds = nil + } + } else { + if x.TerminationGracePeriodSeconds == nil { + x.TerminationGracePeriodSeconds = new(int64) + } + yym2049 := z.DecBinary() + _ = yym2049 + if false { + } else { + *((*int64)(x.TerminationGracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + case "activeDeadlineSeconds": + if r.TryDecodeAsNil() { + if x.ActiveDeadlineSeconds != nil { + x.ActiveDeadlineSeconds = nil + } + } else { + if x.ActiveDeadlineSeconds == nil { + x.ActiveDeadlineSeconds = new(int64) + } + yym2051 := z.DecBinary() + _ = yym2051 + if false { + } else { + *((*int64)(x.ActiveDeadlineSeconds)) = int64(r.DecodeInt(64)) + } + } + case "dnsPolicy": + if r.TryDecodeAsNil() { + x.DNSPolicy = "" + } else { + x.DNSPolicy = DNSPolicy(r.DecodeString()) + } + case "nodeSelector": + if r.TryDecodeAsNil() { + x.NodeSelector = nil + } else { + yyv2053 := &x.NodeSelector + yym2054 := z.DecBinary() + _ = yym2054 + if false { + } else { + z.F.DecMapStringStringX(yyv2053, false, d) + } + } + case "serviceAccountName": + if r.TryDecodeAsNil() { + x.ServiceAccountName = "" + } else { + x.ServiceAccountName = string(r.DecodeString()) + } + case "serviceAccount": + if r.TryDecodeAsNil() { + x.DeprecatedServiceAccount = "" + } else { + x.DeprecatedServiceAccount = string(r.DecodeString()) + } + case "nodeName": + if r.TryDecodeAsNil() { + x.NodeName = "" + } else { + x.NodeName = string(r.DecodeString()) + } + case "hostNetwork": + if r.TryDecodeAsNil() { + x.HostNetwork = false + } else { + x.HostNetwork = bool(r.DecodeBool()) + } + case "hostPID": + if r.TryDecodeAsNil() { + x.HostPID = false + } else { + x.HostPID = bool(r.DecodeBool()) + } + case "hostIPC": + if r.TryDecodeAsNil() { + x.HostIPC = false + } else { + x.HostIPC = bool(r.DecodeBool()) + } + case "securityContext": + if r.TryDecodeAsNil() { + if x.SecurityContext != nil { + x.SecurityContext = nil + } + } else { + if x.SecurityContext == nil { + x.SecurityContext = new(PodSecurityContext) + } + x.SecurityContext.CodecDecodeSelf(d) + } + case "imagePullSecrets": + if r.TryDecodeAsNil() { + x.ImagePullSecrets = nil + } else { + yyv2062 := &x.ImagePullSecrets + yym2063 := z.DecBinary() + _ = yym2063 + if false { + } else { + h.decSliceLocalObjectReference((*[]LocalObjectReference)(yyv2062), d) + } + } + case "hostname": + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + case "subdomain": + if r.TryDecodeAsNil() { + x.Subdomain = "" + } else { + x.Subdomain = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2042) + } // end switch yys2042 + } // end for yyj2042 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2066 int + var yyb2066 bool + var yyhl2066 bool = l >= 0 + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Volumes = nil + } else { + yyv2067 := &x.Volumes + yym2068 := z.DecBinary() + _ = yym2068 + if false { + } else { + h.decSliceVolume((*[]Volume)(yyv2067), d) + } + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Containers = nil + } else { + yyv2069 := &x.Containers + yym2070 := z.DecBinary() + _ = yym2070 + if false { + } else { + h.decSliceContainer((*[]Container)(yyv2069), d) + } + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RestartPolicy = "" + } else { + x.RestartPolicy = RestartPolicy(r.DecodeString()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TerminationGracePeriodSeconds != nil { + x.TerminationGracePeriodSeconds = nil + } + } else { + if x.TerminationGracePeriodSeconds == nil { + x.TerminationGracePeriodSeconds = new(int64) + } + yym2073 := z.DecBinary() + _ = yym2073 + if false { + } else { + *((*int64)(x.TerminationGracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ActiveDeadlineSeconds != nil { + x.ActiveDeadlineSeconds = nil + } + } else { + if x.ActiveDeadlineSeconds == nil { + x.ActiveDeadlineSeconds = new(int64) + } + yym2075 := z.DecBinary() + _ = yym2075 + if false { + } else { + *((*int64)(x.ActiveDeadlineSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DNSPolicy = "" + } else { + x.DNSPolicy = DNSPolicy(r.DecodeString()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodeSelector = nil + } else { + yyv2077 := &x.NodeSelector + yym2078 := z.DecBinary() + _ = yym2078 + if false { + } else { + z.F.DecMapStringStringX(yyv2077, false, d) + } + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ServiceAccountName = "" + } else { + x.ServiceAccountName = string(r.DecodeString()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DeprecatedServiceAccount = "" + } else { + x.DeprecatedServiceAccount = string(r.DecodeString()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodeName = "" + } else { + x.NodeName = string(r.DecodeString()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostNetwork = false + } else { + x.HostNetwork = bool(r.DecodeBool()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostPID = false + } else { + x.HostPID = bool(r.DecodeBool()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostIPC = false + } else { + x.HostIPC = bool(r.DecodeBool()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SecurityContext != nil { + x.SecurityContext = nil + } + } else { + if x.SecurityContext == nil { + x.SecurityContext = new(PodSecurityContext) + } + x.SecurityContext.CodecDecodeSelf(d) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ImagePullSecrets = nil + } else { + yyv2086 := &x.ImagePullSecrets + yym2087 := z.DecBinary() + _ = yym2087 + if false { + } else { + h.decSliceLocalObjectReference((*[]LocalObjectReference)(yyv2086), d) + } + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Subdomain = "" + } else { + x.Subdomain = string(r.DecodeString()) + } + for { + yyj2066++ + if yyhl2066 { + yyb2066 = yyj2066 > l + } else { + yyb2066 = r.CheckBreak() + } + if yyb2066 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2066-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2090 := z.EncBinary() + _ = yym2090 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2091 := !z.EncBinary() + yy2arr2091 := z.EncBasicHandle().StructToArray + var yyq2091 [5]bool + _, _, _ = yysep2091, yyq2091, yy2arr2091 + const yyr2091 bool = false + yyq2091[0] = x.SELinuxOptions != nil + yyq2091[1] = x.RunAsUser != nil + yyq2091[2] = x.RunAsNonRoot != nil + yyq2091[3] = len(x.SupplementalGroups) != 0 + yyq2091[4] = x.FSGroup != nil + var yynn2091 int + if yyr2091 || yy2arr2091 { + r.EncodeArrayStart(5) + } else { + yynn2091 = 0 + for _, b := range yyq2091 { + if b { + yynn2091++ + } + } + r.EncodeMapStart(yynn2091) + yynn2091 = 0 + } + if yyr2091 || yy2arr2091 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2091[0] { + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2091[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("seLinuxOptions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } + } + if yyr2091 || yy2arr2091 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2091[1] { + if x.RunAsUser == nil { + r.EncodeNil() + } else { + yy2094 := *x.RunAsUser + yym2095 := z.EncBinary() + _ = yym2095 + if false { + } else { + r.EncodeInt(int64(yy2094)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2091[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsUser")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RunAsUser == nil { + r.EncodeNil() + } else { + yy2096 := *x.RunAsUser + yym2097 := z.EncBinary() + _ = yym2097 + if false { + } else { + r.EncodeInt(int64(yy2096)) + } + } + } + } + if yyr2091 || yy2arr2091 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2091[2] { + if x.RunAsNonRoot == nil { + r.EncodeNil() + } else { + yy2099 := *x.RunAsNonRoot + yym2100 := z.EncBinary() + _ = yym2100 + if false { + } else { + r.EncodeBool(bool(yy2099)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2091[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsNonRoot")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RunAsNonRoot == nil { + r.EncodeNil() + } else { + yy2101 := *x.RunAsNonRoot + yym2102 := z.EncBinary() + _ = yym2102 + if false { + } else { + r.EncodeBool(bool(yy2101)) + } + } + } + } + if yyr2091 || yy2arr2091 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2091[3] { + if x.SupplementalGroups == nil { + r.EncodeNil() + } else { + yym2104 := z.EncBinary() + _ = yym2104 + if false { + } else { + z.F.EncSliceInt64V(x.SupplementalGroups, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2091[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("supplementalGroups")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SupplementalGroups == nil { + r.EncodeNil() + } else { + yym2105 := z.EncBinary() + _ = yym2105 + if false { + } else { + z.F.EncSliceInt64V(x.SupplementalGroups, false, e) + } + } + } + } + if yyr2091 || yy2arr2091 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2091[4] { + if x.FSGroup == nil { + r.EncodeNil() + } else { + yy2107 := *x.FSGroup + yym2108 := z.EncBinary() + _ = yym2108 + if false { + } else { + r.EncodeInt(int64(yy2107)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2091[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsGroup")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FSGroup == nil { + r.EncodeNil() + } else { + yy2109 := *x.FSGroup + yym2110 := z.EncBinary() + _ = yym2110 + if false { + } else { + r.EncodeInt(int64(yy2109)) + } + } + } + } + if yyr2091 || yy2arr2091 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSecurityContext) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2111 := z.DecBinary() + _ = yym2111 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2112 := r.ContainerType() + if yyct2112 == codecSelferValueTypeMap1234 { + yyl2112 := r.ReadMapStart() + if yyl2112 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2112, d) + } + } else if yyct2112 == codecSelferValueTypeArray1234 { + yyl2112 := r.ReadArrayStart() + if yyl2112 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2112, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2113Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2113Slc + var yyhl2113 bool = l >= 0 + for yyj2113 := 0; ; yyj2113++ { + if yyhl2113 { + if yyj2113 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2113Slc = r.DecodeBytes(yys2113Slc, true, true) + yys2113 := string(yys2113Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2113 { + case "seLinuxOptions": + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + case "runAsUser": + if r.TryDecodeAsNil() { + if x.RunAsUser != nil { + x.RunAsUser = nil + } + } else { + if x.RunAsUser == nil { + x.RunAsUser = new(int64) + } + yym2116 := z.DecBinary() + _ = yym2116 + if false { + } else { + *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) + } + } + case "runAsNonRoot": + if r.TryDecodeAsNil() { + if x.RunAsNonRoot != nil { + x.RunAsNonRoot = nil + } + } else { + if x.RunAsNonRoot == nil { + x.RunAsNonRoot = new(bool) + } + yym2118 := z.DecBinary() + _ = yym2118 + if false { + } else { + *((*bool)(x.RunAsNonRoot)) = r.DecodeBool() + } + } + case "supplementalGroups": + if r.TryDecodeAsNil() { + x.SupplementalGroups = nil + } else { + yyv2119 := &x.SupplementalGroups + yym2120 := z.DecBinary() + _ = yym2120 + if false { + } else { + z.F.DecSliceInt64X(yyv2119, false, d) + } + } + case "fsGroup": + if r.TryDecodeAsNil() { + if x.FSGroup != nil { + x.FSGroup = nil + } + } else { + if x.FSGroup == nil { + x.FSGroup = new(int64) + } + yym2122 := z.DecBinary() + _ = yym2122 + if false { + } else { + *((*int64)(x.FSGroup)) = int64(r.DecodeInt(64)) + } + } + default: + z.DecStructFieldNotFound(-1, yys2113) + } // end switch yys2113 + } // end for yyj2113 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2123 int + var yyb2123 bool + var yyhl2123 bool = l >= 0 + yyj2123++ + if yyhl2123 { + yyb2123 = yyj2123 > l + } else { + yyb2123 = r.CheckBreak() + } + if yyb2123 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + yyj2123++ + if yyhl2123 { + yyb2123 = yyj2123 > l + } else { + yyb2123 = r.CheckBreak() + } + if yyb2123 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RunAsUser != nil { + x.RunAsUser = nil + } + } else { + if x.RunAsUser == nil { + x.RunAsUser = new(int64) + } + yym2126 := z.DecBinary() + _ = yym2126 + if false { + } else { + *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) + } + } + yyj2123++ + if yyhl2123 { + yyb2123 = yyj2123 > l + } else { + yyb2123 = r.CheckBreak() + } + if yyb2123 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RunAsNonRoot != nil { + x.RunAsNonRoot = nil + } + } else { + if x.RunAsNonRoot == nil { + x.RunAsNonRoot = new(bool) + } + yym2128 := z.DecBinary() + _ = yym2128 + if false { + } else { + *((*bool)(x.RunAsNonRoot)) = r.DecodeBool() + } + } + yyj2123++ + if yyhl2123 { + yyb2123 = yyj2123 > l + } else { + yyb2123 = r.CheckBreak() + } + if yyb2123 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SupplementalGroups = nil + } else { + yyv2129 := &x.SupplementalGroups + yym2130 := z.DecBinary() + _ = yym2130 + if false { + } else { + z.F.DecSliceInt64X(yyv2129, false, d) + } + } + yyj2123++ + if yyhl2123 { + yyb2123 = yyj2123 > l + } else { + yyb2123 = r.CheckBreak() + } + if yyb2123 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FSGroup != nil { + x.FSGroup = nil + } + } else { + if x.FSGroup == nil { + x.FSGroup = new(int64) + } + yym2132 := z.DecBinary() + _ = yym2132 + if false { + } else { + *((*int64)(x.FSGroup)) = int64(r.DecodeInt(64)) + } + } + for { + yyj2123++ + if yyhl2123 { + yyb2123 = yyj2123 > l + } else { + yyb2123 = r.CheckBreak() + } + if yyb2123 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2123-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2133 := z.EncBinary() + _ = yym2133 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2134 := !z.EncBinary() + yy2arr2134 := z.EncBasicHandle().StructToArray + var yyq2134 [8]bool + _, _, _ = yysep2134, yyq2134, yy2arr2134 + const yyr2134 bool = false + yyq2134[0] = x.Phase != "" + yyq2134[1] = len(x.Conditions) != 0 + yyq2134[2] = x.Message != "" + yyq2134[3] = x.Reason != "" + yyq2134[4] = x.HostIP != "" + yyq2134[5] = x.PodIP != "" + yyq2134[6] = x.StartTime != nil + yyq2134[7] = len(x.ContainerStatuses) != 0 + var yynn2134 int + if yyr2134 || yy2arr2134 { + r.EncodeArrayStart(8) + } else { + yynn2134 = 0 + for _, b := range yyq2134 { + if b { + yynn2134++ + } + } + r.EncodeMapStart(yynn2134) + yynn2134 = 0 + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2134[0] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2134[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2134[1] { + if x.Conditions == nil { + r.EncodeNil() + } else { + yym2137 := z.EncBinary() + _ = yym2137 + if false { + } else { + h.encSlicePodCondition(([]PodCondition)(x.Conditions), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2134[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("conditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Conditions == nil { + r.EncodeNil() + } else { + yym2138 := z.EncBinary() + _ = yym2138 + if false { + } else { + h.encSlicePodCondition(([]PodCondition)(x.Conditions), e) + } + } + } + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2134[2] { + yym2140 := z.EncBinary() + _ = yym2140 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2134[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2141 := z.EncBinary() + _ = yym2141 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2134[3] { + yym2143 := z.EncBinary() + _ = yym2143 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2134[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2144 := z.EncBinary() + _ = yym2144 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2134[4] { + yym2146 := z.EncBinary() + _ = yym2146 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.HostIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2134[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2147 := z.EncBinary() + _ = yym2147 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.HostIP)) + } + } + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2134[5] { + yym2149 := z.EncBinary() + _ = yym2149 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PodIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2134[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2150 := z.EncBinary() + _ = yym2150 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PodIP)) + } + } + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2134[6] { + if x.StartTime == nil { + r.EncodeNil() + } else { + yym2152 := z.EncBinary() + _ = yym2152 + if false { + } else if z.HasExtensions() && z.EncExt(x.StartTime) { + } else if yym2152 { + z.EncBinaryMarshal(x.StartTime) + } else if !yym2152 && z.IsJSONHandle() { + z.EncJSONMarshal(x.StartTime) + } else { + z.EncFallback(x.StartTime) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2134[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("startTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.StartTime == nil { + r.EncodeNil() + } else { + yym2153 := z.EncBinary() + _ = yym2153 + if false { + } else if z.HasExtensions() && z.EncExt(x.StartTime) { + } else if yym2153 { + z.EncBinaryMarshal(x.StartTime) + } else if !yym2153 && z.IsJSONHandle() { + z.EncJSONMarshal(x.StartTime) + } else { + z.EncFallback(x.StartTime) + } + } + } + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2134[7] { + if x.ContainerStatuses == nil { + r.EncodeNil() + } else { + yym2155 := z.EncBinary() + _ = yym2155 + if false { + } else { + h.encSliceContainerStatus(([]ContainerStatus)(x.ContainerStatuses), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2134[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerStatuses")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ContainerStatuses == nil { + r.EncodeNil() + } else { + yym2156 := z.EncBinary() + _ = yym2156 + if false { + } else { + h.encSliceContainerStatus(([]ContainerStatus)(x.ContainerStatuses), e) + } + } + } + } + if yyr2134 || yy2arr2134 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2157 := z.DecBinary() + _ = yym2157 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2158 := r.ContainerType() + if yyct2158 == codecSelferValueTypeMap1234 { + yyl2158 := r.ReadMapStart() + if yyl2158 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2158, d) + } + } else if yyct2158 == codecSelferValueTypeArray1234 { + yyl2158 := r.ReadArrayStart() + if yyl2158 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2158, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2159Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2159Slc + var yyhl2159 bool = l >= 0 + for yyj2159 := 0; ; yyj2159++ { + if yyhl2159 { + if yyj2159 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2159Slc = r.DecodeBytes(yys2159Slc, true, true) + yys2159 := string(yys2159Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2159 { + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PodPhase(r.DecodeString()) + } + case "conditions": + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv2161 := &x.Conditions + yym2162 := z.DecBinary() + _ = yym2162 + if false { + } else { + h.decSlicePodCondition((*[]PodCondition)(yyv2161), d) + } + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "hostIP": + if r.TryDecodeAsNil() { + x.HostIP = "" + } else { + x.HostIP = string(r.DecodeString()) + } + case "podIP": + if r.TryDecodeAsNil() { + x.PodIP = "" + } else { + x.PodIP = string(r.DecodeString()) + } + case "startTime": + if r.TryDecodeAsNil() { + if x.StartTime != nil { + x.StartTime = nil + } + } else { + if x.StartTime == nil { + x.StartTime = new(pkg2_unversioned.Time) + } + yym2168 := z.DecBinary() + _ = yym2168 + if false { + } else if z.HasExtensions() && z.DecExt(x.StartTime) { + } else if yym2168 { + z.DecBinaryUnmarshal(x.StartTime) + } else if !yym2168 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.StartTime) + } else { + z.DecFallback(x.StartTime, false) + } + } + case "containerStatuses": + if r.TryDecodeAsNil() { + x.ContainerStatuses = nil + } else { + yyv2169 := &x.ContainerStatuses + yym2170 := z.DecBinary() + _ = yym2170 + if false { + } else { + h.decSliceContainerStatus((*[]ContainerStatus)(yyv2169), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2159) + } // end switch yys2159 + } // end for yyj2159 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2171 int + var yyb2171 bool + var yyhl2171 bool = l >= 0 + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = PodPhase(r.DecodeString()) + } + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv2173 := &x.Conditions + yym2174 := z.DecBinary() + _ = yym2174 + if false { + } else { + h.decSlicePodCondition((*[]PodCondition)(yyv2173), d) + } + } + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostIP = "" + } else { + x.HostIP = string(r.DecodeString()) + } + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodIP = "" + } else { + x.PodIP = string(r.DecodeString()) + } + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.StartTime != nil { + x.StartTime = nil + } + } else { + if x.StartTime == nil { + x.StartTime = new(pkg2_unversioned.Time) + } + yym2180 := z.DecBinary() + _ = yym2180 + if false { + } else if z.HasExtensions() && z.DecExt(x.StartTime) { + } else if yym2180 { + z.DecBinaryUnmarshal(x.StartTime) + } else if !yym2180 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.StartTime) + } else { + z.DecFallback(x.StartTime, false) + } + } + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerStatuses = nil + } else { + yyv2181 := &x.ContainerStatuses + yym2182 := z.DecBinary() + _ = yym2182 + if false { + } else { + h.decSliceContainerStatus((*[]ContainerStatus)(yyv2181), d) + } + } + for { + yyj2171++ + if yyhl2171 { + yyb2171 = yyj2171 > l + } else { + yyb2171 = r.CheckBreak() + } + if yyb2171 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2171-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodStatusResult) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2183 := z.EncBinary() + _ = yym2183 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2184 := !z.EncBinary() + yy2arr2184 := z.EncBasicHandle().StructToArray + var yyq2184 [4]bool + _, _, _ = yysep2184, yyq2184, yy2arr2184 + const yyr2184 bool = false + yyq2184[0] = x.Kind != "" + yyq2184[1] = x.APIVersion != "" + yyq2184[2] = true + yyq2184[3] = true + var yynn2184 int + if yyr2184 || yy2arr2184 { + r.EncodeArrayStart(4) + } else { + yynn2184 = 0 + for _, b := range yyq2184 { + if b { + yynn2184++ + } + } + r.EncodeMapStart(yynn2184) + yynn2184 = 0 + } + if yyr2184 || yy2arr2184 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2184[0] { + yym2186 := z.EncBinary() + _ = yym2186 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2184[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2187 := z.EncBinary() + _ = yym2187 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2184 || yy2arr2184 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2184[1] { + yym2189 := z.EncBinary() + _ = yym2189 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2184[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2190 := z.EncBinary() + _ = yym2190 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2184 || yy2arr2184 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2184[2] { + yy2192 := &x.ObjectMeta + yy2192.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2184[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2193 := &x.ObjectMeta + yy2193.CodecEncodeSelf(e) + } + } + if yyr2184 || yy2arr2184 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2184[3] { + yy2195 := &x.Status + yy2195.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2184[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2196 := &x.Status + yy2196.CodecEncodeSelf(e) + } + } + if yyr2184 || yy2arr2184 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodStatusResult) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2197 := z.DecBinary() + _ = yym2197 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2198 := r.ContainerType() + if yyct2198 == codecSelferValueTypeMap1234 { + yyl2198 := r.ReadMapStart() + if yyl2198 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2198, d) + } + } else if yyct2198 == codecSelferValueTypeArray1234 { + yyl2198 := r.ReadArrayStart() + if yyl2198 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2198, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodStatusResult) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2199Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2199Slc + var yyhl2199 bool = l >= 0 + for yyj2199 := 0; ; yyj2199++ { + if yyhl2199 { + if yyj2199 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2199Slc = r.DecodeBytes(yys2199Slc, true, true) + yys2199 := string(yys2199Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2199 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2202 := &x.ObjectMeta + yyv2202.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = PodStatus{} + } else { + yyv2203 := &x.Status + yyv2203.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2199) + } // end switch yys2199 + } // end for yyj2199 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodStatusResult) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2204 int + var yyb2204 bool + var yyhl2204 bool = l >= 0 + yyj2204++ + if yyhl2204 { + yyb2204 = yyj2204 > l + } else { + yyb2204 = r.CheckBreak() + } + if yyb2204 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2204++ + if yyhl2204 { + yyb2204 = yyj2204 > l + } else { + yyb2204 = r.CheckBreak() + } + if yyb2204 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2204++ + if yyhl2204 { + yyb2204 = yyj2204 > l + } else { + yyb2204 = r.CheckBreak() + } + if yyb2204 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2207 := &x.ObjectMeta + yyv2207.CodecDecodeSelf(d) + } + yyj2204++ + if yyhl2204 { + yyb2204 = yyj2204 > l + } else { + yyb2204 = r.CheckBreak() + } + if yyb2204 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = PodStatus{} + } else { + yyv2208 := &x.Status + yyv2208.CodecDecodeSelf(d) + } + for { + yyj2204++ + if yyhl2204 { + yyb2204 = yyj2204 > l + } else { + yyb2204 = r.CheckBreak() + } + if yyb2204 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2204-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Pod) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2209 := z.EncBinary() + _ = yym2209 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2210 := !z.EncBinary() + yy2arr2210 := z.EncBasicHandle().StructToArray + var yyq2210 [5]bool + _, _, _ = yysep2210, yyq2210, yy2arr2210 + const yyr2210 bool = false + yyq2210[0] = x.Kind != "" + yyq2210[1] = x.APIVersion != "" + yyq2210[2] = true + yyq2210[3] = true + yyq2210[4] = true + var yynn2210 int + if yyr2210 || yy2arr2210 { + r.EncodeArrayStart(5) + } else { + yynn2210 = 0 + for _, b := range yyq2210 { + if b { + yynn2210++ + } + } + r.EncodeMapStart(yynn2210) + yynn2210 = 0 + } + if yyr2210 || yy2arr2210 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2210[0] { + yym2212 := z.EncBinary() + _ = yym2212 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2210[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2213 := z.EncBinary() + _ = yym2213 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2210 || yy2arr2210 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2210[1] { + yym2215 := z.EncBinary() + _ = yym2215 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2210[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2216 := z.EncBinary() + _ = yym2216 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2210 || yy2arr2210 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2210[2] { + yy2218 := &x.ObjectMeta + yy2218.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2210[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2219 := &x.ObjectMeta + yy2219.CodecEncodeSelf(e) + } + } + if yyr2210 || yy2arr2210 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2210[3] { + yy2221 := &x.Spec + yy2221.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2210[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2222 := &x.Spec + yy2222.CodecEncodeSelf(e) + } + } + if yyr2210 || yy2arr2210 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2210[4] { + yy2224 := &x.Status + yy2224.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2210[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2225 := &x.Status + yy2225.CodecEncodeSelf(e) + } + } + if yyr2210 || yy2arr2210 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Pod) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2226 := z.DecBinary() + _ = yym2226 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2227 := r.ContainerType() + if yyct2227 == codecSelferValueTypeMap1234 { + yyl2227 := r.ReadMapStart() + if yyl2227 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2227, d) + } + } else if yyct2227 == codecSelferValueTypeArray1234 { + yyl2227 := r.ReadArrayStart() + if yyl2227 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2227, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Pod) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2228Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2228Slc + var yyhl2228 bool = l >= 0 + for yyj2228 := 0; ; yyj2228++ { + if yyhl2228 { + if yyj2228 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2228Slc = r.DecodeBytes(yys2228Slc, true, true) + yys2228 := string(yys2228Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2228 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2231 := &x.ObjectMeta + yyv2231.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PodSpec{} + } else { + yyv2232 := &x.Spec + yyv2232.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = PodStatus{} + } else { + yyv2233 := &x.Status + yyv2233.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2228) + } // end switch yys2228 + } // end for yyj2228 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Pod) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2234 int + var yyb2234 bool + var yyhl2234 bool = l >= 0 + yyj2234++ + if yyhl2234 { + yyb2234 = yyj2234 > l + } else { + yyb2234 = r.CheckBreak() + } + if yyb2234 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2234++ + if yyhl2234 { + yyb2234 = yyj2234 > l + } else { + yyb2234 = r.CheckBreak() + } + if yyb2234 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2234++ + if yyhl2234 { + yyb2234 = yyj2234 > l + } else { + yyb2234 = r.CheckBreak() + } + if yyb2234 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2237 := &x.ObjectMeta + yyv2237.CodecDecodeSelf(d) + } + yyj2234++ + if yyhl2234 { + yyb2234 = yyj2234 > l + } else { + yyb2234 = r.CheckBreak() + } + if yyb2234 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PodSpec{} + } else { + yyv2238 := &x.Spec + yyv2238.CodecDecodeSelf(d) + } + yyj2234++ + if yyhl2234 { + yyb2234 = yyj2234 > l + } else { + yyb2234 = r.CheckBreak() + } + if yyb2234 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = PodStatus{} + } else { + yyv2239 := &x.Status + yyv2239.CodecDecodeSelf(d) + } + for { + yyj2234++ + if yyhl2234 { + yyb2234 = yyj2234 > l + } else { + yyb2234 = r.CheckBreak() + } + if yyb2234 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2234-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2240 := z.EncBinary() + _ = yym2240 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2241 := !z.EncBinary() + yy2arr2241 := z.EncBasicHandle().StructToArray + var yyq2241 [4]bool + _, _, _ = yysep2241, yyq2241, yy2arr2241 + const yyr2241 bool = false + yyq2241[0] = x.Kind != "" + yyq2241[1] = x.APIVersion != "" + yyq2241[2] = true + var yynn2241 int + if yyr2241 || yy2arr2241 { + r.EncodeArrayStart(4) + } else { + yynn2241 = 1 + for _, b := range yyq2241 { + if b { + yynn2241++ + } + } + r.EncodeMapStart(yynn2241) + yynn2241 = 0 + } + if yyr2241 || yy2arr2241 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2241[0] { + yym2243 := z.EncBinary() + _ = yym2243 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2241[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2244 := z.EncBinary() + _ = yym2244 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2241 || yy2arr2241 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2241[1] { + yym2246 := z.EncBinary() + _ = yym2246 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2241[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2247 := z.EncBinary() + _ = yym2247 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2241 || yy2arr2241 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2241[2] { + yy2249 := &x.ListMeta + yym2250 := z.EncBinary() + _ = yym2250 + if false { + } else if z.HasExtensions() && z.EncExt(yy2249) { + } else { + z.EncFallback(yy2249) + } + } else { + r.EncodeNil() + } + } else { + if yyq2241[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2251 := &x.ListMeta + yym2252 := z.EncBinary() + _ = yym2252 + if false { + } else if z.HasExtensions() && z.EncExt(yy2251) { + } else { + z.EncFallback(yy2251) + } + } + } + if yyr2241 || yy2arr2241 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2254 := z.EncBinary() + _ = yym2254 + if false { + } else { + h.encSlicePod(([]Pod)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2255 := z.EncBinary() + _ = yym2255 + if false { + } else { + h.encSlicePod(([]Pod)(x.Items), e) + } + } + } + if yyr2241 || yy2arr2241 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2256 := z.DecBinary() + _ = yym2256 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2257 := r.ContainerType() + if yyct2257 == codecSelferValueTypeMap1234 { + yyl2257 := r.ReadMapStart() + if yyl2257 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2257, d) + } + } else if yyct2257 == codecSelferValueTypeArray1234 { + yyl2257 := r.ReadArrayStart() + if yyl2257 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2257, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2258Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2258Slc + var yyhl2258 bool = l >= 0 + for yyj2258 := 0; ; yyj2258++ { + if yyhl2258 { + if yyj2258 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2258Slc = r.DecodeBytes(yys2258Slc, true, true) + yys2258 := string(yys2258Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2258 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2261 := &x.ListMeta + yym2262 := z.DecBinary() + _ = yym2262 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2261) { + } else { + z.DecFallback(yyv2261, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2263 := &x.Items + yym2264 := z.DecBinary() + _ = yym2264 + if false { + } else { + h.decSlicePod((*[]Pod)(yyv2263), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2258) + } // end switch yys2258 + } // end for yyj2258 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2265 int + var yyb2265 bool + var yyhl2265 bool = l >= 0 + yyj2265++ + if yyhl2265 { + yyb2265 = yyj2265 > l + } else { + yyb2265 = r.CheckBreak() + } + if yyb2265 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2265++ + if yyhl2265 { + yyb2265 = yyj2265 > l + } else { + yyb2265 = r.CheckBreak() + } + if yyb2265 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2265++ + if yyhl2265 { + yyb2265 = yyj2265 > l + } else { + yyb2265 = r.CheckBreak() + } + if yyb2265 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2268 := &x.ListMeta + yym2269 := z.DecBinary() + _ = yym2269 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2268) { + } else { + z.DecFallback(yyv2268, false) + } + } + yyj2265++ + if yyhl2265 { + yyb2265 = yyj2265 > l + } else { + yyb2265 = r.CheckBreak() + } + if yyb2265 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2270 := &x.Items + yym2271 := z.DecBinary() + _ = yym2271 + if false { + } else { + h.decSlicePod((*[]Pod)(yyv2270), d) + } + } + for { + yyj2265++ + if yyhl2265 { + yyb2265 = yyj2265 > l + } else { + yyb2265 = r.CheckBreak() + } + if yyb2265 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2265-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodTemplateSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2272 := z.EncBinary() + _ = yym2272 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2273 := !z.EncBinary() + yy2arr2273 := z.EncBasicHandle().StructToArray + var yyq2273 [2]bool + _, _, _ = yysep2273, yyq2273, yy2arr2273 + const yyr2273 bool = false + yyq2273[0] = true + yyq2273[1] = true + var yynn2273 int + if yyr2273 || yy2arr2273 { + r.EncodeArrayStart(2) + } else { + yynn2273 = 0 + for _, b := range yyq2273 { + if b { + yynn2273++ + } + } + r.EncodeMapStart(yynn2273) + yynn2273 = 0 + } + if yyr2273 || yy2arr2273 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2273[0] { + yy2275 := &x.ObjectMeta + yy2275.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2273[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2276 := &x.ObjectMeta + yy2276.CodecEncodeSelf(e) + } + } + if yyr2273 || yy2arr2273 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2273[1] { + yy2278 := &x.Spec + yy2278.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2273[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2279 := &x.Spec + yy2279.CodecEncodeSelf(e) + } + } + if yyr2273 || yy2arr2273 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodTemplateSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2280 := z.DecBinary() + _ = yym2280 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2281 := r.ContainerType() + if yyct2281 == codecSelferValueTypeMap1234 { + yyl2281 := r.ReadMapStart() + if yyl2281 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2281, d) + } + } else if yyct2281 == codecSelferValueTypeArray1234 { + yyl2281 := r.ReadArrayStart() + if yyl2281 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2281, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodTemplateSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2282Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2282Slc + var yyhl2282 bool = l >= 0 + for yyj2282 := 0; ; yyj2282++ { + if yyhl2282 { + if yyj2282 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2282Slc = r.DecodeBytes(yys2282Slc, true, true) + yys2282 := string(yys2282Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2282 { + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2283 := &x.ObjectMeta + yyv2283.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PodSpec{} + } else { + yyv2284 := &x.Spec + yyv2284.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2282) + } // end switch yys2282 + } // end for yyj2282 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodTemplateSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2285 int + var yyb2285 bool + var yyhl2285 bool = l >= 0 + yyj2285++ + if yyhl2285 { + yyb2285 = yyj2285 > l + } else { + yyb2285 = r.CheckBreak() + } + if yyb2285 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2286 := &x.ObjectMeta + yyv2286.CodecDecodeSelf(d) + } + yyj2285++ + if yyhl2285 { + yyb2285 = yyj2285 > l + } else { + yyb2285 = r.CheckBreak() + } + if yyb2285 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PodSpec{} + } else { + yyv2287 := &x.Spec + yyv2287.CodecDecodeSelf(d) + } + for { + yyj2285++ + if yyhl2285 { + yyb2285 = yyj2285 > l + } else { + yyb2285 = r.CheckBreak() + } + if yyb2285 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2285-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodTemplate) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2288 := z.EncBinary() + _ = yym2288 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2289 := !z.EncBinary() + yy2arr2289 := z.EncBasicHandle().StructToArray + var yyq2289 [4]bool + _, _, _ = yysep2289, yyq2289, yy2arr2289 + const yyr2289 bool = false + yyq2289[0] = x.Kind != "" + yyq2289[1] = x.APIVersion != "" + yyq2289[2] = true + yyq2289[3] = true + var yynn2289 int + if yyr2289 || yy2arr2289 { + r.EncodeArrayStart(4) + } else { + yynn2289 = 0 + for _, b := range yyq2289 { + if b { + yynn2289++ + } + } + r.EncodeMapStart(yynn2289) + yynn2289 = 0 + } + if yyr2289 || yy2arr2289 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2289[0] { + yym2291 := z.EncBinary() + _ = yym2291 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2289[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2292 := z.EncBinary() + _ = yym2292 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2289 || yy2arr2289 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2289[1] { + yym2294 := z.EncBinary() + _ = yym2294 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2289[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2295 := z.EncBinary() + _ = yym2295 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2289 || yy2arr2289 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2289[2] { + yy2297 := &x.ObjectMeta + yy2297.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2289[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2298 := &x.ObjectMeta + yy2298.CodecEncodeSelf(e) + } + } + if yyr2289 || yy2arr2289 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2289[3] { + yy2300 := &x.Template + yy2300.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2289[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2301 := &x.Template + yy2301.CodecEncodeSelf(e) + } + } + if yyr2289 || yy2arr2289 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodTemplate) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2302 := z.DecBinary() + _ = yym2302 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2303 := r.ContainerType() + if yyct2303 == codecSelferValueTypeMap1234 { + yyl2303 := r.ReadMapStart() + if yyl2303 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2303, d) + } + } else if yyct2303 == codecSelferValueTypeArray1234 { + yyl2303 := r.ReadArrayStart() + if yyl2303 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2303, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodTemplate) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2304Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2304Slc + var yyhl2304 bool = l >= 0 + for yyj2304 := 0; ; yyj2304++ { + if yyhl2304 { + if yyj2304 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2304Slc = r.DecodeBytes(yys2304Slc, true, true) + yys2304 := string(yys2304Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2304 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2307 := &x.ObjectMeta + yyv2307.CodecDecodeSelf(d) + } + case "template": + if r.TryDecodeAsNil() { + x.Template = PodTemplateSpec{} + } else { + yyv2308 := &x.Template + yyv2308.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2304) + } // end switch yys2304 + } // end for yyj2304 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodTemplate) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2309 int + var yyb2309 bool + var yyhl2309 bool = l >= 0 + yyj2309++ + if yyhl2309 { + yyb2309 = yyj2309 > l + } else { + yyb2309 = r.CheckBreak() + } + if yyb2309 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2309++ + if yyhl2309 { + yyb2309 = yyj2309 > l + } else { + yyb2309 = r.CheckBreak() + } + if yyb2309 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2309++ + if yyhl2309 { + yyb2309 = yyj2309 > l + } else { + yyb2309 = r.CheckBreak() + } + if yyb2309 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2312 := &x.ObjectMeta + yyv2312.CodecDecodeSelf(d) + } + yyj2309++ + if yyhl2309 { + yyb2309 = yyj2309 > l + } else { + yyb2309 = r.CheckBreak() + } + if yyb2309 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Template = PodTemplateSpec{} + } else { + yyv2313 := &x.Template + yyv2313.CodecDecodeSelf(d) + } + for { + yyj2309++ + if yyhl2309 { + yyb2309 = yyj2309 > l + } else { + yyb2309 = r.CheckBreak() + } + if yyb2309 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2309-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodTemplateList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2314 := z.EncBinary() + _ = yym2314 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2315 := !z.EncBinary() + yy2arr2315 := z.EncBasicHandle().StructToArray + var yyq2315 [4]bool + _, _, _ = yysep2315, yyq2315, yy2arr2315 + const yyr2315 bool = false + yyq2315[0] = x.Kind != "" + yyq2315[1] = x.APIVersion != "" + yyq2315[2] = true + var yynn2315 int + if yyr2315 || yy2arr2315 { + r.EncodeArrayStart(4) + } else { + yynn2315 = 1 + for _, b := range yyq2315 { + if b { + yynn2315++ + } + } + r.EncodeMapStart(yynn2315) + yynn2315 = 0 + } + if yyr2315 || yy2arr2315 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2315[0] { + yym2317 := z.EncBinary() + _ = yym2317 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2315[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2318 := z.EncBinary() + _ = yym2318 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2315 || yy2arr2315 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2315[1] { + yym2320 := z.EncBinary() + _ = yym2320 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2315[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2321 := z.EncBinary() + _ = yym2321 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2315 || yy2arr2315 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2315[2] { + yy2323 := &x.ListMeta + yym2324 := z.EncBinary() + _ = yym2324 + if false { + } else if z.HasExtensions() && z.EncExt(yy2323) { + } else { + z.EncFallback(yy2323) + } + } else { + r.EncodeNil() + } + } else { + if yyq2315[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2325 := &x.ListMeta + yym2326 := z.EncBinary() + _ = yym2326 + if false { + } else if z.HasExtensions() && z.EncExt(yy2325) { + } else { + z.EncFallback(yy2325) + } + } + } + if yyr2315 || yy2arr2315 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2328 := z.EncBinary() + _ = yym2328 + if false { + } else { + h.encSlicePodTemplate(([]PodTemplate)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2329 := z.EncBinary() + _ = yym2329 + if false { + } else { + h.encSlicePodTemplate(([]PodTemplate)(x.Items), e) + } + } + } + if yyr2315 || yy2arr2315 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodTemplateList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2330 := z.DecBinary() + _ = yym2330 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2331 := r.ContainerType() + if yyct2331 == codecSelferValueTypeMap1234 { + yyl2331 := r.ReadMapStart() + if yyl2331 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2331, d) + } + } else if yyct2331 == codecSelferValueTypeArray1234 { + yyl2331 := r.ReadArrayStart() + if yyl2331 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2331, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodTemplateList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2332Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2332Slc + var yyhl2332 bool = l >= 0 + for yyj2332 := 0; ; yyj2332++ { + if yyhl2332 { + if yyj2332 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2332Slc = r.DecodeBytes(yys2332Slc, true, true) + yys2332 := string(yys2332Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2332 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2335 := &x.ListMeta + yym2336 := z.DecBinary() + _ = yym2336 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2335) { + } else { + z.DecFallback(yyv2335, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2337 := &x.Items + yym2338 := z.DecBinary() + _ = yym2338 + if false { + } else { + h.decSlicePodTemplate((*[]PodTemplate)(yyv2337), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2332) + } // end switch yys2332 + } // end for yyj2332 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodTemplateList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2339 int + var yyb2339 bool + var yyhl2339 bool = l >= 0 + yyj2339++ + if yyhl2339 { + yyb2339 = yyj2339 > l + } else { + yyb2339 = r.CheckBreak() + } + if yyb2339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2339++ + if yyhl2339 { + yyb2339 = yyj2339 > l + } else { + yyb2339 = r.CheckBreak() + } + if yyb2339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2339++ + if yyhl2339 { + yyb2339 = yyj2339 > l + } else { + yyb2339 = r.CheckBreak() + } + if yyb2339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2342 := &x.ListMeta + yym2343 := z.DecBinary() + _ = yym2343 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2342) { + } else { + z.DecFallback(yyv2342, false) + } + } + yyj2339++ + if yyhl2339 { + yyb2339 = yyj2339 > l + } else { + yyb2339 = r.CheckBreak() + } + if yyb2339 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2344 := &x.Items + yym2345 := z.DecBinary() + _ = yym2345 + if false { + } else { + h.decSlicePodTemplate((*[]PodTemplate)(yyv2344), d) + } + } + for { + yyj2339++ + if yyhl2339 { + yyb2339 = yyj2339 > l + } else { + yyb2339 = r.CheckBreak() + } + if yyb2339 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2339-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationControllerSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2346 := z.EncBinary() + _ = yym2346 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2347 := !z.EncBinary() + yy2arr2347 := z.EncBasicHandle().StructToArray + var yyq2347 [3]bool + _, _, _ = yysep2347, yyq2347, yy2arr2347 + const yyr2347 bool = false + yyq2347[0] = x.Replicas != nil + yyq2347[1] = len(x.Selector) != 0 + yyq2347[2] = x.Template != nil + var yynn2347 int + if yyr2347 || yy2arr2347 { + r.EncodeArrayStart(3) + } else { + yynn2347 = 0 + for _, b := range yyq2347 { + if b { + yynn2347++ + } + } + r.EncodeMapStart(yynn2347) + yynn2347 = 0 + } + if yyr2347 || yy2arr2347 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2347[0] { + if x.Replicas == nil { + r.EncodeNil() + } else { + yy2349 := *x.Replicas + yym2350 := z.EncBinary() + _ = yym2350 + if false { + } else { + r.EncodeInt(int64(yy2349)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2347[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Replicas == nil { + r.EncodeNil() + } else { + yy2351 := *x.Replicas + yym2352 := z.EncBinary() + _ = yym2352 + if false { + } else { + r.EncodeInt(int64(yy2351)) + } + } + } + } + if yyr2347 || yy2arr2347 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2347[1] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym2354 := z.EncBinary() + _ = yym2354 + if false { + } else { + z.F.EncMapStringStringV(x.Selector, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2347[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym2355 := z.EncBinary() + _ = yym2355 + if false { + } else { + z.F.EncMapStringStringV(x.Selector, false, e) + } + } + } + } + if yyr2347 || yy2arr2347 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2347[2] { + if x.Template == nil { + r.EncodeNil() + } else { + x.Template.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2347[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Template == nil { + r.EncodeNil() + } else { + x.Template.CodecEncodeSelf(e) + } + } + } + if yyr2347 || yy2arr2347 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationControllerSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2357 := z.DecBinary() + _ = yym2357 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2358 := r.ContainerType() + if yyct2358 == codecSelferValueTypeMap1234 { + yyl2358 := r.ReadMapStart() + if yyl2358 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2358, d) + } + } else if yyct2358 == codecSelferValueTypeArray1234 { + yyl2358 := r.ReadArrayStart() + if yyl2358 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2358, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationControllerSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2359Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2359Slc + var yyhl2359 bool = l >= 0 + for yyj2359 := 0; ; yyj2359++ { + if yyhl2359 { + if yyj2359 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2359Slc = r.DecodeBytes(yys2359Slc, true, true) + yys2359 := string(yys2359Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2359 { + case "replicas": + if r.TryDecodeAsNil() { + if x.Replicas != nil { + x.Replicas = nil + } + } else { + if x.Replicas == nil { + x.Replicas = new(int32) + } + yym2361 := z.DecBinary() + _ = yym2361 + if false { + } else { + *((*int32)(x.Replicas)) = int32(r.DecodeInt(32)) + } + } + case "selector": + if r.TryDecodeAsNil() { + x.Selector = nil + } else { + yyv2362 := &x.Selector + yym2363 := z.DecBinary() + _ = yym2363 + if false { + } else { + z.F.DecMapStringStringX(yyv2362, false, d) + } + } + case "template": + if r.TryDecodeAsNil() { + if x.Template != nil { + x.Template = nil + } + } else { + if x.Template == nil { + x.Template = new(PodTemplateSpec) + } + x.Template.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2359) + } // end switch yys2359 + } // end for yyj2359 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationControllerSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2365 int + var yyb2365 bool + var yyhl2365 bool = l >= 0 + yyj2365++ + if yyhl2365 { + yyb2365 = yyj2365 > l + } else { + yyb2365 = r.CheckBreak() + } + if yyb2365 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Replicas != nil { + x.Replicas = nil + } + } else { + if x.Replicas == nil { + x.Replicas = new(int32) + } + yym2367 := z.DecBinary() + _ = yym2367 + if false { + } else { + *((*int32)(x.Replicas)) = int32(r.DecodeInt(32)) + } + } + yyj2365++ + if yyhl2365 { + yyb2365 = yyj2365 > l + } else { + yyb2365 = r.CheckBreak() + } + if yyb2365 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Selector = nil + } else { + yyv2368 := &x.Selector + yym2369 := z.DecBinary() + _ = yym2369 + if false { + } else { + z.F.DecMapStringStringX(yyv2368, false, d) + } + } + yyj2365++ + if yyhl2365 { + yyb2365 = yyj2365 > l + } else { + yyb2365 = r.CheckBreak() + } + if yyb2365 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Template != nil { + x.Template = nil + } + } else { + if x.Template == nil { + x.Template = new(PodTemplateSpec) + } + x.Template.CodecDecodeSelf(d) + } + for { + yyj2365++ + if yyhl2365 { + yyb2365 = yyj2365 > l + } else { + yyb2365 = r.CheckBreak() + } + if yyb2365 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2365-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationControllerStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2371 := z.EncBinary() + _ = yym2371 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2372 := !z.EncBinary() + yy2arr2372 := z.EncBasicHandle().StructToArray + var yyq2372 [4]bool + _, _, _ = yysep2372, yyq2372, yy2arr2372 + const yyr2372 bool = false + yyq2372[1] = x.FullyLabeledReplicas != 0 + yyq2372[2] = x.ReadyReplicas != 0 + yyq2372[3] = x.ObservedGeneration != 0 + var yynn2372 int + if yyr2372 || yy2arr2372 { + r.EncodeArrayStart(4) + } else { + yynn2372 = 1 + for _, b := range yyq2372 { + if b { + yynn2372++ + } + } + r.EncodeMapStart(yynn2372) + yynn2372 = 0 + } + if yyr2372 || yy2arr2372 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2374 := z.EncBinary() + _ = yym2374 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2375 := z.EncBinary() + _ = yym2375 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + if yyr2372 || yy2arr2372 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2372[1] { + yym2377 := z.EncBinary() + _ = yym2377 + if false { + } else { + r.EncodeInt(int64(x.FullyLabeledReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2372[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fullyLabeledReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2378 := z.EncBinary() + _ = yym2378 + if false { + } else { + r.EncodeInt(int64(x.FullyLabeledReplicas)) + } + } + } + if yyr2372 || yy2arr2372 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2372[2] { + yym2380 := z.EncBinary() + _ = yym2380 + if false { + } else { + r.EncodeInt(int64(x.ReadyReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2372[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readyReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2381 := z.EncBinary() + _ = yym2381 + if false { + } else { + r.EncodeInt(int64(x.ReadyReplicas)) + } + } + } + if yyr2372 || yy2arr2372 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2372[3] { + yym2383 := z.EncBinary() + _ = yym2383 + if false { + } else { + r.EncodeInt(int64(x.ObservedGeneration)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2372[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("observedGeneration")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2384 := z.EncBinary() + _ = yym2384 + if false { + } else { + r.EncodeInt(int64(x.ObservedGeneration)) + } + } + } + if yyr2372 || yy2arr2372 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationControllerStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2385 := z.DecBinary() + _ = yym2385 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2386 := r.ContainerType() + if yyct2386 == codecSelferValueTypeMap1234 { + yyl2386 := r.ReadMapStart() + if yyl2386 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2386, d) + } + } else if yyct2386 == codecSelferValueTypeArray1234 { + yyl2386 := r.ReadArrayStart() + if yyl2386 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2386, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationControllerStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2387Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2387Slc + var yyhl2387 bool = l >= 0 + for yyj2387 := 0; ; yyj2387++ { + if yyhl2387 { + if yyj2387 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2387Slc = r.DecodeBytes(yys2387Slc, true, true) + yys2387 := string(yys2387Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2387 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "fullyLabeledReplicas": + if r.TryDecodeAsNil() { + x.FullyLabeledReplicas = 0 + } else { + x.FullyLabeledReplicas = int32(r.DecodeInt(32)) + } + case "readyReplicas": + if r.TryDecodeAsNil() { + x.ReadyReplicas = 0 + } else { + x.ReadyReplicas = int32(r.DecodeInt(32)) + } + case "observedGeneration": + if r.TryDecodeAsNil() { + x.ObservedGeneration = 0 + } else { + x.ObservedGeneration = int64(r.DecodeInt(64)) + } + default: + z.DecStructFieldNotFound(-1, yys2387) + } // end switch yys2387 + } // end for yyj2387 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationControllerStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2392 int + var yyb2392 bool + var yyhl2392 bool = l >= 0 + yyj2392++ + if yyhl2392 { + yyb2392 = yyj2392 > l + } else { + yyb2392 = r.CheckBreak() + } + if yyb2392 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj2392++ + if yyhl2392 { + yyb2392 = yyj2392 > l + } else { + yyb2392 = r.CheckBreak() + } + if yyb2392 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FullyLabeledReplicas = 0 + } else { + x.FullyLabeledReplicas = int32(r.DecodeInt(32)) + } + yyj2392++ + if yyhl2392 { + yyb2392 = yyj2392 > l + } else { + yyb2392 = r.CheckBreak() + } + if yyb2392 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadyReplicas = 0 + } else { + x.ReadyReplicas = int32(r.DecodeInt(32)) + } + yyj2392++ + if yyhl2392 { + yyb2392 = yyj2392 > l + } else { + yyb2392 = r.CheckBreak() + } + if yyb2392 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObservedGeneration = 0 + } else { + x.ObservedGeneration = int64(r.DecodeInt(64)) + } + for { + yyj2392++ + if yyhl2392 { + yyb2392 = yyj2392 > l + } else { + yyb2392 = r.CheckBreak() + } + if yyb2392 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2392-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationController) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2397 := z.EncBinary() + _ = yym2397 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2398 := !z.EncBinary() + yy2arr2398 := z.EncBasicHandle().StructToArray + var yyq2398 [5]bool + _, _, _ = yysep2398, yyq2398, yy2arr2398 + const yyr2398 bool = false + yyq2398[0] = x.Kind != "" + yyq2398[1] = x.APIVersion != "" + yyq2398[2] = true + yyq2398[3] = true + yyq2398[4] = true + var yynn2398 int + if yyr2398 || yy2arr2398 { + r.EncodeArrayStart(5) + } else { + yynn2398 = 0 + for _, b := range yyq2398 { + if b { + yynn2398++ + } + } + r.EncodeMapStart(yynn2398) + yynn2398 = 0 + } + if yyr2398 || yy2arr2398 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2398[0] { + yym2400 := z.EncBinary() + _ = yym2400 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2398[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2401 := z.EncBinary() + _ = yym2401 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2398 || yy2arr2398 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2398[1] { + yym2403 := z.EncBinary() + _ = yym2403 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2398[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2404 := z.EncBinary() + _ = yym2404 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2398 || yy2arr2398 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2398[2] { + yy2406 := &x.ObjectMeta + yy2406.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2398[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2407 := &x.ObjectMeta + yy2407.CodecEncodeSelf(e) + } + } + if yyr2398 || yy2arr2398 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2398[3] { + yy2409 := &x.Spec + yy2409.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2398[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2410 := &x.Spec + yy2410.CodecEncodeSelf(e) + } + } + if yyr2398 || yy2arr2398 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2398[4] { + yy2412 := &x.Status + yy2412.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2398[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2413 := &x.Status + yy2413.CodecEncodeSelf(e) + } + } + if yyr2398 || yy2arr2398 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationController) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2414 := z.DecBinary() + _ = yym2414 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2415 := r.ContainerType() + if yyct2415 == codecSelferValueTypeMap1234 { + yyl2415 := r.ReadMapStart() + if yyl2415 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2415, d) + } + } else if yyct2415 == codecSelferValueTypeArray1234 { + yyl2415 := r.ReadArrayStart() + if yyl2415 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2415, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationController) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2416Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2416Slc + var yyhl2416 bool = l >= 0 + for yyj2416 := 0; ; yyj2416++ { + if yyhl2416 { + if yyj2416 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2416Slc = r.DecodeBytes(yys2416Slc, true, true) + yys2416 := string(yys2416Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2416 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2419 := &x.ObjectMeta + yyv2419.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ReplicationControllerSpec{} + } else { + yyv2420 := &x.Spec + yyv2420.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ReplicationControllerStatus{} + } else { + yyv2421 := &x.Status + yyv2421.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2416) + } // end switch yys2416 + } // end for yyj2416 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationController) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2422 int + var yyb2422 bool + var yyhl2422 bool = l >= 0 + yyj2422++ + if yyhl2422 { + yyb2422 = yyj2422 > l + } else { + yyb2422 = r.CheckBreak() + } + if yyb2422 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2422++ + if yyhl2422 { + yyb2422 = yyj2422 > l + } else { + yyb2422 = r.CheckBreak() + } + if yyb2422 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2422++ + if yyhl2422 { + yyb2422 = yyj2422 > l + } else { + yyb2422 = r.CheckBreak() + } + if yyb2422 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2425 := &x.ObjectMeta + yyv2425.CodecDecodeSelf(d) + } + yyj2422++ + if yyhl2422 { + yyb2422 = yyj2422 > l + } else { + yyb2422 = r.CheckBreak() + } + if yyb2422 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ReplicationControllerSpec{} + } else { + yyv2426 := &x.Spec + yyv2426.CodecDecodeSelf(d) + } + yyj2422++ + if yyhl2422 { + yyb2422 = yyj2422 > l + } else { + yyb2422 = r.CheckBreak() + } + if yyb2422 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ReplicationControllerStatus{} + } else { + yyv2427 := &x.Status + yyv2427.CodecDecodeSelf(d) + } + for { + yyj2422++ + if yyhl2422 { + yyb2422 = yyj2422 > l + } else { + yyb2422 = r.CheckBreak() + } + if yyb2422 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2422-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationControllerList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2428 := z.EncBinary() + _ = yym2428 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2429 := !z.EncBinary() + yy2arr2429 := z.EncBasicHandle().StructToArray + var yyq2429 [4]bool + _, _, _ = yysep2429, yyq2429, yy2arr2429 + const yyr2429 bool = false + yyq2429[0] = x.Kind != "" + yyq2429[1] = x.APIVersion != "" + yyq2429[2] = true + var yynn2429 int + if yyr2429 || yy2arr2429 { + r.EncodeArrayStart(4) + } else { + yynn2429 = 1 + for _, b := range yyq2429 { + if b { + yynn2429++ + } + } + r.EncodeMapStart(yynn2429) + yynn2429 = 0 + } + if yyr2429 || yy2arr2429 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2429[0] { + yym2431 := z.EncBinary() + _ = yym2431 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2429[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2432 := z.EncBinary() + _ = yym2432 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2429 || yy2arr2429 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2429[1] { + yym2434 := z.EncBinary() + _ = yym2434 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2429[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2435 := z.EncBinary() + _ = yym2435 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2429 || yy2arr2429 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2429[2] { + yy2437 := &x.ListMeta + yym2438 := z.EncBinary() + _ = yym2438 + if false { + } else if z.HasExtensions() && z.EncExt(yy2437) { + } else { + z.EncFallback(yy2437) + } + } else { + r.EncodeNil() + } + } else { + if yyq2429[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2439 := &x.ListMeta + yym2440 := z.EncBinary() + _ = yym2440 + if false { + } else if z.HasExtensions() && z.EncExt(yy2439) { + } else { + z.EncFallback(yy2439) + } + } + } + if yyr2429 || yy2arr2429 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2442 := z.EncBinary() + _ = yym2442 + if false { + } else { + h.encSliceReplicationController(([]ReplicationController)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2443 := z.EncBinary() + _ = yym2443 + if false { + } else { + h.encSliceReplicationController(([]ReplicationController)(x.Items), e) + } + } + } + if yyr2429 || yy2arr2429 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationControllerList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2444 := z.DecBinary() + _ = yym2444 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2445 := r.ContainerType() + if yyct2445 == codecSelferValueTypeMap1234 { + yyl2445 := r.ReadMapStart() + if yyl2445 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2445, d) + } + } else if yyct2445 == codecSelferValueTypeArray1234 { + yyl2445 := r.ReadArrayStart() + if yyl2445 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2445, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationControllerList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2446Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2446Slc + var yyhl2446 bool = l >= 0 + for yyj2446 := 0; ; yyj2446++ { + if yyhl2446 { + if yyj2446 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2446Slc = r.DecodeBytes(yys2446Slc, true, true) + yys2446 := string(yys2446Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2446 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2449 := &x.ListMeta + yym2450 := z.DecBinary() + _ = yym2450 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2449) { + } else { + z.DecFallback(yyv2449, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2451 := &x.Items + yym2452 := z.DecBinary() + _ = yym2452 + if false { + } else { + h.decSliceReplicationController((*[]ReplicationController)(yyv2451), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2446) + } // end switch yys2446 + } // end for yyj2446 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationControllerList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2453 int + var yyb2453 bool + var yyhl2453 bool = l >= 0 + yyj2453++ + if yyhl2453 { + yyb2453 = yyj2453 > l + } else { + yyb2453 = r.CheckBreak() + } + if yyb2453 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2453++ + if yyhl2453 { + yyb2453 = yyj2453 > l + } else { + yyb2453 = r.CheckBreak() + } + if yyb2453 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2453++ + if yyhl2453 { + yyb2453 = yyj2453 > l + } else { + yyb2453 = r.CheckBreak() + } + if yyb2453 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2456 := &x.ListMeta + yym2457 := z.DecBinary() + _ = yym2457 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2456) { + } else { + z.DecFallback(yyv2456, false) + } + } + yyj2453++ + if yyhl2453 { + yyb2453 = yyj2453 > l + } else { + yyb2453 = r.CheckBreak() + } + if yyb2453 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2458 := &x.Items + yym2459 := z.DecBinary() + _ = yym2459 + if false { + } else { + h.decSliceReplicationController((*[]ReplicationController)(yyv2458), d) + } + } + for { + yyj2453++ + if yyhl2453 { + yyb2453 = yyj2453 > l + } else { + yyb2453 = r.CheckBreak() + } + if yyb2453 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2453-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ServiceAffinity) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym2460 := z.EncBinary() + _ = yym2460 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ServiceAffinity) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2461 := z.DecBinary() + _ = yym2461 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x ServiceType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym2462 := z.EncBinary() + _ = yym2462 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ServiceType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2463 := z.DecBinary() + _ = yym2463 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ServiceStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2464 := z.EncBinary() + _ = yym2464 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2465 := !z.EncBinary() + yy2arr2465 := z.EncBasicHandle().StructToArray + var yyq2465 [1]bool + _, _, _ = yysep2465, yyq2465, yy2arr2465 + const yyr2465 bool = false + yyq2465[0] = true + var yynn2465 int + if yyr2465 || yy2arr2465 { + r.EncodeArrayStart(1) + } else { + yynn2465 = 0 + for _, b := range yyq2465 { + if b { + yynn2465++ + } + } + r.EncodeMapStart(yynn2465) + yynn2465 = 0 + } + if yyr2465 || yy2arr2465 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2465[0] { + yy2467 := &x.LoadBalancer + yy2467.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2465[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("loadBalancer")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2468 := &x.LoadBalancer + yy2468.CodecEncodeSelf(e) + } + } + if yyr2465 || yy2arr2465 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2469 := z.DecBinary() + _ = yym2469 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2470 := r.ContainerType() + if yyct2470 == codecSelferValueTypeMap1234 { + yyl2470 := r.ReadMapStart() + if yyl2470 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2470, d) + } + } else if yyct2470 == codecSelferValueTypeArray1234 { + yyl2470 := r.ReadArrayStart() + if yyl2470 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2470, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2471Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2471Slc + var yyhl2471 bool = l >= 0 + for yyj2471 := 0; ; yyj2471++ { + if yyhl2471 { + if yyj2471 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2471Slc = r.DecodeBytes(yys2471Slc, true, true) + yys2471 := string(yys2471Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2471 { + case "loadBalancer": + if r.TryDecodeAsNil() { + x.LoadBalancer = LoadBalancerStatus{} + } else { + yyv2472 := &x.LoadBalancer + yyv2472.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2471) + } // end switch yys2471 + } // end for yyj2471 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2473 int + var yyb2473 bool + var yyhl2473 bool = l >= 0 + yyj2473++ + if yyhl2473 { + yyb2473 = yyj2473 > l + } else { + yyb2473 = r.CheckBreak() + } + if yyb2473 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LoadBalancer = LoadBalancerStatus{} + } else { + yyv2474 := &x.LoadBalancer + yyv2474.CodecDecodeSelf(d) + } + for { + yyj2473++ + if yyhl2473 { + yyb2473 = yyj2473 > l + } else { + yyb2473 = r.CheckBreak() + } + if yyb2473 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2473-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LoadBalancerStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2475 := z.EncBinary() + _ = yym2475 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2476 := !z.EncBinary() + yy2arr2476 := z.EncBasicHandle().StructToArray + var yyq2476 [1]bool + _, _, _ = yysep2476, yyq2476, yy2arr2476 + const yyr2476 bool = false + yyq2476[0] = len(x.Ingress) != 0 + var yynn2476 int + if yyr2476 || yy2arr2476 { + r.EncodeArrayStart(1) + } else { + yynn2476 = 0 + for _, b := range yyq2476 { + if b { + yynn2476++ + } + } + r.EncodeMapStart(yynn2476) + yynn2476 = 0 + } + if yyr2476 || yy2arr2476 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2476[0] { + if x.Ingress == nil { + r.EncodeNil() + } else { + yym2478 := z.EncBinary() + _ = yym2478 + if false { + } else { + h.encSliceLoadBalancerIngress(([]LoadBalancerIngress)(x.Ingress), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2476[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ingress")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ingress == nil { + r.EncodeNil() + } else { + yym2479 := z.EncBinary() + _ = yym2479 + if false { + } else { + h.encSliceLoadBalancerIngress(([]LoadBalancerIngress)(x.Ingress), e) + } + } + } + } + if yyr2476 || yy2arr2476 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LoadBalancerStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2480 := z.DecBinary() + _ = yym2480 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2481 := r.ContainerType() + if yyct2481 == codecSelferValueTypeMap1234 { + yyl2481 := r.ReadMapStart() + if yyl2481 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2481, d) + } + } else if yyct2481 == codecSelferValueTypeArray1234 { + yyl2481 := r.ReadArrayStart() + if yyl2481 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2481, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LoadBalancerStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2482Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2482Slc + var yyhl2482 bool = l >= 0 + for yyj2482 := 0; ; yyj2482++ { + if yyhl2482 { + if yyj2482 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2482Slc = r.DecodeBytes(yys2482Slc, true, true) + yys2482 := string(yys2482Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2482 { + case "ingress": + if r.TryDecodeAsNil() { + x.Ingress = nil + } else { + yyv2483 := &x.Ingress + yym2484 := z.DecBinary() + _ = yym2484 + if false { + } else { + h.decSliceLoadBalancerIngress((*[]LoadBalancerIngress)(yyv2483), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2482) + } // end switch yys2482 + } // end for yyj2482 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LoadBalancerStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2485 int + var yyb2485 bool + var yyhl2485 bool = l >= 0 + yyj2485++ + if yyhl2485 { + yyb2485 = yyj2485 > l + } else { + yyb2485 = r.CheckBreak() + } + if yyb2485 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ingress = nil + } else { + yyv2486 := &x.Ingress + yym2487 := z.DecBinary() + _ = yym2487 + if false { + } else { + h.decSliceLoadBalancerIngress((*[]LoadBalancerIngress)(yyv2486), d) + } + } + for { + yyj2485++ + if yyhl2485 { + yyb2485 = yyj2485 > l + } else { + yyb2485 = r.CheckBreak() + } + if yyb2485 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2485-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LoadBalancerIngress) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2488 := z.EncBinary() + _ = yym2488 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2489 := !z.EncBinary() + yy2arr2489 := z.EncBasicHandle().StructToArray + var yyq2489 [2]bool + _, _, _ = yysep2489, yyq2489, yy2arr2489 + const yyr2489 bool = false + yyq2489[0] = x.IP != "" + yyq2489[1] = x.Hostname != "" + var yynn2489 int + if yyr2489 || yy2arr2489 { + r.EncodeArrayStart(2) + } else { + yynn2489 = 0 + for _, b := range yyq2489 { + if b { + yynn2489++ + } + } + r.EncodeMapStart(yynn2489) + yynn2489 = 0 + } + if yyr2489 || yy2arr2489 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2489[0] { + yym2491 := z.EncBinary() + _ = yym2491 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2489[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ip")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2492 := z.EncBinary() + _ = yym2492 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IP)) + } + } + } + if yyr2489 || yy2arr2489 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2489[1] { + yym2494 := z.EncBinary() + _ = yym2494 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2489[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostname")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2495 := z.EncBinary() + _ = yym2495 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } + } + if yyr2489 || yy2arr2489 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LoadBalancerIngress) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2496 := z.DecBinary() + _ = yym2496 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2497 := r.ContainerType() + if yyct2497 == codecSelferValueTypeMap1234 { + yyl2497 := r.ReadMapStart() + if yyl2497 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2497, d) + } + } else if yyct2497 == codecSelferValueTypeArray1234 { + yyl2497 := r.ReadArrayStart() + if yyl2497 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2497, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LoadBalancerIngress) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2498Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2498Slc + var yyhl2498 bool = l >= 0 + for yyj2498 := 0; ; yyj2498++ { + if yyhl2498 { + if yyj2498 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2498Slc = r.DecodeBytes(yys2498Slc, true, true) + yys2498 := string(yys2498Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2498 { + case "ip": + if r.TryDecodeAsNil() { + x.IP = "" + } else { + x.IP = string(r.DecodeString()) + } + case "hostname": + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2498) + } // end switch yys2498 + } // end for yyj2498 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LoadBalancerIngress) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2501 int + var yyb2501 bool + var yyhl2501 bool = l >= 0 + yyj2501++ + if yyhl2501 { + yyb2501 = yyj2501 > l + } else { + yyb2501 = r.CheckBreak() + } + if yyb2501 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.IP = "" + } else { + x.IP = string(r.DecodeString()) + } + yyj2501++ + if yyhl2501 { + yyb2501 = yyj2501 > l + } else { + yyb2501 = r.CheckBreak() + } + if yyb2501 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + for { + yyj2501++ + if yyhl2501 { + yyb2501 = yyj2501 > l + } else { + yyb2501 = r.CheckBreak() + } + if yyb2501 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2501-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2504 := z.EncBinary() + _ = yym2504 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2505 := !z.EncBinary() + yy2arr2505 := z.EncBasicHandle().StructToArray + var yyq2505 [10]bool + _, _, _ = yysep2505, yyq2505, yy2arr2505 + const yyr2505 bool = false + yyq2505[1] = len(x.Selector) != 0 + yyq2505[2] = x.ClusterIP != "" + yyq2505[3] = x.Type != "" + yyq2505[4] = len(x.ExternalIPs) != 0 + yyq2505[5] = len(x.DeprecatedPublicIPs) != 0 + yyq2505[6] = x.SessionAffinity != "" + yyq2505[7] = x.LoadBalancerIP != "" + yyq2505[8] = len(x.LoadBalancerSourceRanges) != 0 + yyq2505[9] = x.ExternalName != "" + var yynn2505 int + if yyr2505 || yy2arr2505 { + r.EncodeArrayStart(10) + } else { + yynn2505 = 1 + for _, b := range yyq2505 { + if b { + yynn2505++ + } + } + r.EncodeMapStart(yynn2505) + yynn2505 = 0 + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym2507 := z.EncBinary() + _ = yym2507 + if false { + } else { + h.encSliceServicePort(([]ServicePort)(x.Ports), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ports")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym2508 := z.EncBinary() + _ = yym2508 + if false { + } else { + h.encSliceServicePort(([]ServicePort)(x.Ports), e) + } + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[1] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym2510 := z.EncBinary() + _ = yym2510 + if false { + } else { + z.F.EncMapStringStringV(x.Selector, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2505[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym2511 := z.EncBinary() + _ = yym2511 + if false { + } else { + z.F.EncMapStringStringV(x.Selector, false, e) + } + } + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[2] { + yym2513 := z.EncBinary() + _ = yym2513 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClusterIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2505[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("clusterIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2514 := z.EncBinary() + _ = yym2514 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ClusterIP)) + } + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[3] { + x.Type.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2505[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[4] { + if x.ExternalIPs == nil { + r.EncodeNil() + } else { + yym2517 := z.EncBinary() + _ = yym2517 + if false { + } else { + z.F.EncSliceStringV(x.ExternalIPs, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2505[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("externalIPs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ExternalIPs == nil { + r.EncodeNil() + } else { + yym2518 := z.EncBinary() + _ = yym2518 + if false { + } else { + z.F.EncSliceStringV(x.ExternalIPs, false, e) + } + } + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[5] { + if x.DeprecatedPublicIPs == nil { + r.EncodeNil() + } else { + yym2520 := z.EncBinary() + _ = yym2520 + if false { + } else { + z.F.EncSliceStringV(x.DeprecatedPublicIPs, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2505[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("deprecatedPublicIPs")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DeprecatedPublicIPs == nil { + r.EncodeNil() + } else { + yym2521 := z.EncBinary() + _ = yym2521 + if false { + } else { + z.F.EncSliceStringV(x.DeprecatedPublicIPs, false, e) + } + } + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[6] { + x.SessionAffinity.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2505[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("sessionAffinity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.SessionAffinity.CodecEncodeSelf(e) + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[7] { + yym2524 := z.EncBinary() + _ = yym2524 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.LoadBalancerIP)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2505[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("loadBalancerIP")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2525 := z.EncBinary() + _ = yym2525 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.LoadBalancerIP)) + } + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[8] { + if x.LoadBalancerSourceRanges == nil { + r.EncodeNil() + } else { + yym2527 := z.EncBinary() + _ = yym2527 + if false { + } else { + z.F.EncSliceStringV(x.LoadBalancerSourceRanges, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2505[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("loadBalancerSourceRanges")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LoadBalancerSourceRanges == nil { + r.EncodeNil() + } else { + yym2528 := z.EncBinary() + _ = yym2528 + if false { + } else { + z.F.EncSliceStringV(x.LoadBalancerSourceRanges, false, e) + } + } + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2505[9] { + yym2530 := z.EncBinary() + _ = yym2530 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ExternalName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2505[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("externalName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2531 := z.EncBinary() + _ = yym2531 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ExternalName)) + } + } + } + if yyr2505 || yy2arr2505 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2532 := z.DecBinary() + _ = yym2532 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2533 := r.ContainerType() + if yyct2533 == codecSelferValueTypeMap1234 { + yyl2533 := r.ReadMapStart() + if yyl2533 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2533, d) + } + } else if yyct2533 == codecSelferValueTypeArray1234 { + yyl2533 := r.ReadArrayStart() + if yyl2533 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2533, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2534Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2534Slc + var yyhl2534 bool = l >= 0 + for yyj2534 := 0; ; yyj2534++ { + if yyhl2534 { + if yyj2534 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2534Slc = r.DecodeBytes(yys2534Slc, true, true) + yys2534 := string(yys2534Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2534 { + case "ports": + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv2535 := &x.Ports + yym2536 := z.DecBinary() + _ = yym2536 + if false { + } else { + h.decSliceServicePort((*[]ServicePort)(yyv2535), d) + } + } + case "selector": + if r.TryDecodeAsNil() { + x.Selector = nil + } else { + yyv2537 := &x.Selector + yym2538 := z.DecBinary() + _ = yym2538 + if false { + } else { + z.F.DecMapStringStringX(yyv2537, false, d) + } + } + case "clusterIP": + if r.TryDecodeAsNil() { + x.ClusterIP = "" + } else { + x.ClusterIP = string(r.DecodeString()) + } + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = ServiceType(r.DecodeString()) + } + case "externalIPs": + if r.TryDecodeAsNil() { + x.ExternalIPs = nil + } else { + yyv2541 := &x.ExternalIPs + yym2542 := z.DecBinary() + _ = yym2542 + if false { + } else { + z.F.DecSliceStringX(yyv2541, false, d) + } + } + case "deprecatedPublicIPs": + if r.TryDecodeAsNil() { + x.DeprecatedPublicIPs = nil + } else { + yyv2543 := &x.DeprecatedPublicIPs + yym2544 := z.DecBinary() + _ = yym2544 + if false { + } else { + z.F.DecSliceStringX(yyv2543, false, d) + } + } + case "sessionAffinity": + if r.TryDecodeAsNil() { + x.SessionAffinity = "" + } else { + x.SessionAffinity = ServiceAffinity(r.DecodeString()) + } + case "loadBalancerIP": + if r.TryDecodeAsNil() { + x.LoadBalancerIP = "" + } else { + x.LoadBalancerIP = string(r.DecodeString()) + } + case "loadBalancerSourceRanges": + if r.TryDecodeAsNil() { + x.LoadBalancerSourceRanges = nil + } else { + yyv2547 := &x.LoadBalancerSourceRanges + yym2548 := z.DecBinary() + _ = yym2548 + if false { + } else { + z.F.DecSliceStringX(yyv2547, false, d) + } + } + case "externalName": + if r.TryDecodeAsNil() { + x.ExternalName = "" + } else { + x.ExternalName = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2534) + } // end switch yys2534 + } // end for yyj2534 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2550 int + var yyb2550 bool + var yyhl2550 bool = l >= 0 + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv2551 := &x.Ports + yym2552 := z.DecBinary() + _ = yym2552 + if false { + } else { + h.decSliceServicePort((*[]ServicePort)(yyv2551), d) + } + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Selector = nil + } else { + yyv2553 := &x.Selector + yym2554 := z.DecBinary() + _ = yym2554 + if false { + } else { + z.F.DecMapStringStringX(yyv2553, false, d) + } + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ClusterIP = "" + } else { + x.ClusterIP = string(r.DecodeString()) + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = ServiceType(r.DecodeString()) + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ExternalIPs = nil + } else { + yyv2557 := &x.ExternalIPs + yym2558 := z.DecBinary() + _ = yym2558 + if false { + } else { + z.F.DecSliceStringX(yyv2557, false, d) + } + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DeprecatedPublicIPs = nil + } else { + yyv2559 := &x.DeprecatedPublicIPs + yym2560 := z.DecBinary() + _ = yym2560 + if false { + } else { + z.F.DecSliceStringX(yyv2559, false, d) + } + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SessionAffinity = "" + } else { + x.SessionAffinity = ServiceAffinity(r.DecodeString()) + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LoadBalancerIP = "" + } else { + x.LoadBalancerIP = string(r.DecodeString()) + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LoadBalancerSourceRanges = nil + } else { + yyv2563 := &x.LoadBalancerSourceRanges + yym2564 := z.DecBinary() + _ = yym2564 + if false { + } else { + z.F.DecSliceStringX(yyv2563, false, d) + } + } + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ExternalName = "" + } else { + x.ExternalName = string(r.DecodeString()) + } + for { + yyj2550++ + if yyhl2550 { + yyb2550 = yyj2550 > l + } else { + yyb2550 = r.CheckBreak() + } + if yyb2550 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2550-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServicePort) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2566 := z.EncBinary() + _ = yym2566 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2567 := !z.EncBinary() + yy2arr2567 := z.EncBasicHandle().StructToArray + var yyq2567 [5]bool + _, _, _ = yysep2567, yyq2567, yy2arr2567 + const yyr2567 bool = false + yyq2567[0] = x.Name != "" + yyq2567[1] = x.Protocol != "" + yyq2567[3] = true + yyq2567[4] = x.NodePort != 0 + var yynn2567 int + if yyr2567 || yy2arr2567 { + r.EncodeArrayStart(5) + } else { + yynn2567 = 1 + for _, b := range yyq2567 { + if b { + yynn2567++ + } + } + r.EncodeMapStart(yynn2567) + yynn2567 = 0 + } + if yyr2567 || yy2arr2567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2567[0] { + yym2569 := z.EncBinary() + _ = yym2569 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2567[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2570 := z.EncBinary() + _ = yym2570 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr2567 || yy2arr2567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2567[1] { + x.Protocol.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2567[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("protocol")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Protocol.CodecEncodeSelf(e) + } + } + if yyr2567 || yy2arr2567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2573 := z.EncBinary() + _ = yym2573 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2574 := z.EncBinary() + _ = yym2574 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } + if yyr2567 || yy2arr2567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2567[3] { + yy2576 := &x.TargetPort + yym2577 := z.EncBinary() + _ = yym2577 + if false { + } else if z.HasExtensions() && z.EncExt(yy2576) { + } else if !yym2577 && z.IsJSONHandle() { + z.EncJSONMarshal(yy2576) + } else { + z.EncFallback(yy2576) + } + } else { + r.EncodeNil() + } + } else { + if yyq2567[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("targetPort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2578 := &x.TargetPort + yym2579 := z.EncBinary() + _ = yym2579 + if false { + } else if z.HasExtensions() && z.EncExt(yy2578) { + } else if !yym2579 && z.IsJSONHandle() { + z.EncJSONMarshal(yy2578) + } else { + z.EncFallback(yy2578) + } + } + } + if yyr2567 || yy2arr2567 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2567[4] { + yym2581 := z.EncBinary() + _ = yym2581 + if false { + } else { + r.EncodeInt(int64(x.NodePort)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2567[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodePort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2582 := z.EncBinary() + _ = yym2582 + if false { + } else { + r.EncodeInt(int64(x.NodePort)) + } + } + } + if yyr2567 || yy2arr2567 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServicePort) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2583 := z.DecBinary() + _ = yym2583 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2584 := r.ContainerType() + if yyct2584 == codecSelferValueTypeMap1234 { + yyl2584 := r.ReadMapStart() + if yyl2584 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2584, d) + } + } else if yyct2584 == codecSelferValueTypeArray1234 { + yyl2584 := r.ReadArrayStart() + if yyl2584 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2584, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServicePort) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2585Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2585Slc + var yyhl2585 bool = l >= 0 + for yyj2585 := 0; ; yyj2585++ { + if yyhl2585 { + if yyj2585 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2585Slc = r.DecodeBytes(yys2585Slc, true, true) + yys2585 := string(yys2585Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2585 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "protocol": + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + case "port": + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + case "targetPort": + if r.TryDecodeAsNil() { + x.TargetPort = pkg4_intstr.IntOrString{} + } else { + yyv2589 := &x.TargetPort + yym2590 := z.DecBinary() + _ = yym2590 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2589) { + } else if !yym2590 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv2589) + } else { + z.DecFallback(yyv2589, false) + } + } + case "nodePort": + if r.TryDecodeAsNil() { + x.NodePort = 0 + } else { + x.NodePort = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys2585) + } // end switch yys2585 + } // end for yyj2585 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServicePort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2592 int + var yyb2592 bool + var yyhl2592 bool = l >= 0 + yyj2592++ + if yyhl2592 { + yyb2592 = yyj2592 > l + } else { + yyb2592 = r.CheckBreak() + } + if yyb2592 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj2592++ + if yyhl2592 { + yyb2592 = yyj2592 > l + } else { + yyb2592 = r.CheckBreak() + } + if yyb2592 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + yyj2592++ + if yyhl2592 { + yyb2592 = yyj2592 > l + } else { + yyb2592 = r.CheckBreak() + } + if yyb2592 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + yyj2592++ + if yyhl2592 { + yyb2592 = yyj2592 > l + } else { + yyb2592 = r.CheckBreak() + } + if yyb2592 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TargetPort = pkg4_intstr.IntOrString{} + } else { + yyv2596 := &x.TargetPort + yym2597 := z.DecBinary() + _ = yym2597 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2596) { + } else if !yym2597 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv2596) + } else { + z.DecFallback(yyv2596, false) + } + } + yyj2592++ + if yyhl2592 { + yyb2592 = yyj2592 > l + } else { + yyb2592 = r.CheckBreak() + } + if yyb2592 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodePort = 0 + } else { + x.NodePort = int32(r.DecodeInt(32)) + } + for { + yyj2592++ + if yyhl2592 { + yyb2592 = yyj2592 > l + } else { + yyb2592 = r.CheckBreak() + } + if yyb2592 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2592-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Service) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2599 := z.EncBinary() + _ = yym2599 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2600 := !z.EncBinary() + yy2arr2600 := z.EncBasicHandle().StructToArray + var yyq2600 [5]bool + _, _, _ = yysep2600, yyq2600, yy2arr2600 + const yyr2600 bool = false + yyq2600[0] = x.Kind != "" + yyq2600[1] = x.APIVersion != "" + yyq2600[2] = true + yyq2600[3] = true + yyq2600[4] = true + var yynn2600 int + if yyr2600 || yy2arr2600 { + r.EncodeArrayStart(5) + } else { + yynn2600 = 0 + for _, b := range yyq2600 { + if b { + yynn2600++ + } + } + r.EncodeMapStart(yynn2600) + yynn2600 = 0 + } + if yyr2600 || yy2arr2600 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2600[0] { + yym2602 := z.EncBinary() + _ = yym2602 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2600[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2603 := z.EncBinary() + _ = yym2603 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2600 || yy2arr2600 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2600[1] { + yym2605 := z.EncBinary() + _ = yym2605 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2600[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2606 := z.EncBinary() + _ = yym2606 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2600 || yy2arr2600 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2600[2] { + yy2608 := &x.ObjectMeta + yy2608.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2600[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2609 := &x.ObjectMeta + yy2609.CodecEncodeSelf(e) + } + } + if yyr2600 || yy2arr2600 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2600[3] { + yy2611 := &x.Spec + yy2611.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2600[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2612 := &x.Spec + yy2612.CodecEncodeSelf(e) + } + } + if yyr2600 || yy2arr2600 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2600[4] { + yy2614 := &x.Status + yy2614.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2600[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2615 := &x.Status + yy2615.CodecEncodeSelf(e) + } + } + if yyr2600 || yy2arr2600 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Service) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2616 := z.DecBinary() + _ = yym2616 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2617 := r.ContainerType() + if yyct2617 == codecSelferValueTypeMap1234 { + yyl2617 := r.ReadMapStart() + if yyl2617 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2617, d) + } + } else if yyct2617 == codecSelferValueTypeArray1234 { + yyl2617 := r.ReadArrayStart() + if yyl2617 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2617, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Service) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2618Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2618Slc + var yyhl2618 bool = l >= 0 + for yyj2618 := 0; ; yyj2618++ { + if yyhl2618 { + if yyj2618 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2618Slc = r.DecodeBytes(yys2618Slc, true, true) + yys2618 := string(yys2618Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2618 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2621 := &x.ObjectMeta + yyv2621.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ServiceSpec{} + } else { + yyv2622 := &x.Spec + yyv2622.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ServiceStatus{} + } else { + yyv2623 := &x.Status + yyv2623.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2618) + } // end switch yys2618 + } // end for yyj2618 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Service) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2624 int + var yyb2624 bool + var yyhl2624 bool = l >= 0 + yyj2624++ + if yyhl2624 { + yyb2624 = yyj2624 > l + } else { + yyb2624 = r.CheckBreak() + } + if yyb2624 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2624++ + if yyhl2624 { + yyb2624 = yyj2624 > l + } else { + yyb2624 = r.CheckBreak() + } + if yyb2624 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2624++ + if yyhl2624 { + yyb2624 = yyj2624 > l + } else { + yyb2624 = r.CheckBreak() + } + if yyb2624 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2627 := &x.ObjectMeta + yyv2627.CodecDecodeSelf(d) + } + yyj2624++ + if yyhl2624 { + yyb2624 = yyj2624 > l + } else { + yyb2624 = r.CheckBreak() + } + if yyb2624 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ServiceSpec{} + } else { + yyv2628 := &x.Spec + yyv2628.CodecDecodeSelf(d) + } + yyj2624++ + if yyhl2624 { + yyb2624 = yyj2624 > l + } else { + yyb2624 = r.CheckBreak() + } + if yyb2624 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ServiceStatus{} + } else { + yyv2629 := &x.Status + yyv2629.CodecDecodeSelf(d) + } + for { + yyj2624++ + if yyhl2624 { + yyb2624 = yyj2624 > l + } else { + yyb2624 = r.CheckBreak() + } + if yyb2624 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2624-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2630 := z.EncBinary() + _ = yym2630 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2631 := !z.EncBinary() + yy2arr2631 := z.EncBasicHandle().StructToArray + var yyq2631 [4]bool + _, _, _ = yysep2631, yyq2631, yy2arr2631 + const yyr2631 bool = false + yyq2631[0] = x.Kind != "" + yyq2631[1] = x.APIVersion != "" + yyq2631[2] = true + var yynn2631 int + if yyr2631 || yy2arr2631 { + r.EncodeArrayStart(4) + } else { + yynn2631 = 1 + for _, b := range yyq2631 { + if b { + yynn2631++ + } + } + r.EncodeMapStart(yynn2631) + yynn2631 = 0 + } + if yyr2631 || yy2arr2631 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2631[0] { + yym2633 := z.EncBinary() + _ = yym2633 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2631[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2634 := z.EncBinary() + _ = yym2634 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2631 || yy2arr2631 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2631[1] { + yym2636 := z.EncBinary() + _ = yym2636 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2631[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2637 := z.EncBinary() + _ = yym2637 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2631 || yy2arr2631 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2631[2] { + yy2639 := &x.ListMeta + yym2640 := z.EncBinary() + _ = yym2640 + if false { + } else if z.HasExtensions() && z.EncExt(yy2639) { + } else { + z.EncFallback(yy2639) + } + } else { + r.EncodeNil() + } + } else { + if yyq2631[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2641 := &x.ListMeta + yym2642 := z.EncBinary() + _ = yym2642 + if false { + } else if z.HasExtensions() && z.EncExt(yy2641) { + } else { + z.EncFallback(yy2641) + } + } + } + if yyr2631 || yy2arr2631 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2644 := z.EncBinary() + _ = yym2644 + if false { + } else { + h.encSliceService(([]Service)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2645 := z.EncBinary() + _ = yym2645 + if false { + } else { + h.encSliceService(([]Service)(x.Items), e) + } + } + } + if yyr2631 || yy2arr2631 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2646 := z.DecBinary() + _ = yym2646 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2647 := r.ContainerType() + if yyct2647 == codecSelferValueTypeMap1234 { + yyl2647 := r.ReadMapStart() + if yyl2647 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2647, d) + } + } else if yyct2647 == codecSelferValueTypeArray1234 { + yyl2647 := r.ReadArrayStart() + if yyl2647 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2647, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2648Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2648Slc + var yyhl2648 bool = l >= 0 + for yyj2648 := 0; ; yyj2648++ { + if yyhl2648 { + if yyj2648 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2648Slc = r.DecodeBytes(yys2648Slc, true, true) + yys2648 := string(yys2648Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2648 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2651 := &x.ListMeta + yym2652 := z.DecBinary() + _ = yym2652 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2651) { + } else { + z.DecFallback(yyv2651, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2653 := &x.Items + yym2654 := z.DecBinary() + _ = yym2654 + if false { + } else { + h.decSliceService((*[]Service)(yyv2653), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2648) + } // end switch yys2648 + } // end for yyj2648 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2655 int + var yyb2655 bool + var yyhl2655 bool = l >= 0 + yyj2655++ + if yyhl2655 { + yyb2655 = yyj2655 > l + } else { + yyb2655 = r.CheckBreak() + } + if yyb2655 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2655++ + if yyhl2655 { + yyb2655 = yyj2655 > l + } else { + yyb2655 = r.CheckBreak() + } + if yyb2655 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2655++ + if yyhl2655 { + yyb2655 = yyj2655 > l + } else { + yyb2655 = r.CheckBreak() + } + if yyb2655 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2658 := &x.ListMeta + yym2659 := z.DecBinary() + _ = yym2659 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2658) { + } else { + z.DecFallback(yyv2658, false) + } + } + yyj2655++ + if yyhl2655 { + yyb2655 = yyj2655 > l + } else { + yyb2655 = r.CheckBreak() + } + if yyb2655 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2660 := &x.Items + yym2661 := z.DecBinary() + _ = yym2661 + if false { + } else { + h.decSliceService((*[]Service)(yyv2660), d) + } + } + for { + yyj2655++ + if yyhl2655 { + yyb2655 = yyj2655 > l + } else { + yyb2655 = r.CheckBreak() + } + if yyb2655 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2655-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceAccount) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2662 := z.EncBinary() + _ = yym2662 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2663 := !z.EncBinary() + yy2arr2663 := z.EncBasicHandle().StructToArray + var yyq2663 [5]bool + _, _, _ = yysep2663, yyq2663, yy2arr2663 + const yyr2663 bool = false + yyq2663[0] = x.Kind != "" + yyq2663[1] = x.APIVersion != "" + yyq2663[2] = true + yyq2663[3] = len(x.Secrets) != 0 + yyq2663[4] = len(x.ImagePullSecrets) != 0 + var yynn2663 int + if yyr2663 || yy2arr2663 { + r.EncodeArrayStart(5) + } else { + yynn2663 = 0 + for _, b := range yyq2663 { + if b { + yynn2663++ + } + } + r.EncodeMapStart(yynn2663) + yynn2663 = 0 + } + if yyr2663 || yy2arr2663 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2663[0] { + yym2665 := z.EncBinary() + _ = yym2665 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2663[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2666 := z.EncBinary() + _ = yym2666 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2663 || yy2arr2663 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2663[1] { + yym2668 := z.EncBinary() + _ = yym2668 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2663[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2669 := z.EncBinary() + _ = yym2669 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2663 || yy2arr2663 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2663[2] { + yy2671 := &x.ObjectMeta + yy2671.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2663[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2672 := &x.ObjectMeta + yy2672.CodecEncodeSelf(e) + } + } + if yyr2663 || yy2arr2663 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2663[3] { + if x.Secrets == nil { + r.EncodeNil() + } else { + yym2674 := z.EncBinary() + _ = yym2674 + if false { + } else { + h.encSliceObjectReference(([]ObjectReference)(x.Secrets), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2663[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secrets")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Secrets == nil { + r.EncodeNil() + } else { + yym2675 := z.EncBinary() + _ = yym2675 + if false { + } else { + h.encSliceObjectReference(([]ObjectReference)(x.Secrets), e) + } + } + } + } + if yyr2663 || yy2arr2663 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2663[4] { + if x.ImagePullSecrets == nil { + r.EncodeNil() + } else { + yym2677 := z.EncBinary() + _ = yym2677 + if false { + } else { + h.encSliceLocalObjectReference(([]LocalObjectReference)(x.ImagePullSecrets), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2663[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("imagePullSecrets")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ImagePullSecrets == nil { + r.EncodeNil() + } else { + yym2678 := z.EncBinary() + _ = yym2678 + if false { + } else { + h.encSliceLocalObjectReference(([]LocalObjectReference)(x.ImagePullSecrets), e) + } + } + } + } + if yyr2663 || yy2arr2663 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceAccount) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2679 := z.DecBinary() + _ = yym2679 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2680 := r.ContainerType() + if yyct2680 == codecSelferValueTypeMap1234 { + yyl2680 := r.ReadMapStart() + if yyl2680 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2680, d) + } + } else if yyct2680 == codecSelferValueTypeArray1234 { + yyl2680 := r.ReadArrayStart() + if yyl2680 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2680, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceAccount) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2681Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2681Slc + var yyhl2681 bool = l >= 0 + for yyj2681 := 0; ; yyj2681++ { + if yyhl2681 { + if yyj2681 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2681Slc = r.DecodeBytes(yys2681Slc, true, true) + yys2681 := string(yys2681Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2681 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2684 := &x.ObjectMeta + yyv2684.CodecDecodeSelf(d) + } + case "secrets": + if r.TryDecodeAsNil() { + x.Secrets = nil + } else { + yyv2685 := &x.Secrets + yym2686 := z.DecBinary() + _ = yym2686 + if false { + } else { + h.decSliceObjectReference((*[]ObjectReference)(yyv2685), d) + } + } + case "imagePullSecrets": + if r.TryDecodeAsNil() { + x.ImagePullSecrets = nil + } else { + yyv2687 := &x.ImagePullSecrets + yym2688 := z.DecBinary() + _ = yym2688 + if false { + } else { + h.decSliceLocalObjectReference((*[]LocalObjectReference)(yyv2687), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2681) + } // end switch yys2681 + } // end for yyj2681 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceAccount) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2689 int + var yyb2689 bool + var yyhl2689 bool = l >= 0 + yyj2689++ + if yyhl2689 { + yyb2689 = yyj2689 > l + } else { + yyb2689 = r.CheckBreak() + } + if yyb2689 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2689++ + if yyhl2689 { + yyb2689 = yyj2689 > l + } else { + yyb2689 = r.CheckBreak() + } + if yyb2689 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2689++ + if yyhl2689 { + yyb2689 = yyj2689 > l + } else { + yyb2689 = r.CheckBreak() + } + if yyb2689 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2692 := &x.ObjectMeta + yyv2692.CodecDecodeSelf(d) + } + yyj2689++ + if yyhl2689 { + yyb2689 = yyj2689 > l + } else { + yyb2689 = r.CheckBreak() + } + if yyb2689 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Secrets = nil + } else { + yyv2693 := &x.Secrets + yym2694 := z.DecBinary() + _ = yym2694 + if false { + } else { + h.decSliceObjectReference((*[]ObjectReference)(yyv2693), d) + } + } + yyj2689++ + if yyhl2689 { + yyb2689 = yyj2689 > l + } else { + yyb2689 = r.CheckBreak() + } + if yyb2689 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ImagePullSecrets = nil + } else { + yyv2695 := &x.ImagePullSecrets + yym2696 := z.DecBinary() + _ = yym2696 + if false { + } else { + h.decSliceLocalObjectReference((*[]LocalObjectReference)(yyv2695), d) + } + } + for { + yyj2689++ + if yyhl2689 { + yyb2689 = yyj2689 > l + } else { + yyb2689 = r.CheckBreak() + } + if yyb2689 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2689-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceAccountList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2697 := z.EncBinary() + _ = yym2697 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2698 := !z.EncBinary() + yy2arr2698 := z.EncBasicHandle().StructToArray + var yyq2698 [4]bool + _, _, _ = yysep2698, yyq2698, yy2arr2698 + const yyr2698 bool = false + yyq2698[0] = x.Kind != "" + yyq2698[1] = x.APIVersion != "" + yyq2698[2] = true + var yynn2698 int + if yyr2698 || yy2arr2698 { + r.EncodeArrayStart(4) + } else { + yynn2698 = 1 + for _, b := range yyq2698 { + if b { + yynn2698++ + } + } + r.EncodeMapStart(yynn2698) + yynn2698 = 0 + } + if yyr2698 || yy2arr2698 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2698[0] { + yym2700 := z.EncBinary() + _ = yym2700 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2698[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2701 := z.EncBinary() + _ = yym2701 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2698 || yy2arr2698 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2698[1] { + yym2703 := z.EncBinary() + _ = yym2703 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2698[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2704 := z.EncBinary() + _ = yym2704 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2698 || yy2arr2698 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2698[2] { + yy2706 := &x.ListMeta + yym2707 := z.EncBinary() + _ = yym2707 + if false { + } else if z.HasExtensions() && z.EncExt(yy2706) { + } else { + z.EncFallback(yy2706) + } + } else { + r.EncodeNil() + } + } else { + if yyq2698[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2708 := &x.ListMeta + yym2709 := z.EncBinary() + _ = yym2709 + if false { + } else if z.HasExtensions() && z.EncExt(yy2708) { + } else { + z.EncFallback(yy2708) + } + } + } + if yyr2698 || yy2arr2698 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2711 := z.EncBinary() + _ = yym2711 + if false { + } else { + h.encSliceServiceAccount(([]ServiceAccount)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2712 := z.EncBinary() + _ = yym2712 + if false { + } else { + h.encSliceServiceAccount(([]ServiceAccount)(x.Items), e) + } + } + } + if yyr2698 || yy2arr2698 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceAccountList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2713 := z.DecBinary() + _ = yym2713 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2714 := r.ContainerType() + if yyct2714 == codecSelferValueTypeMap1234 { + yyl2714 := r.ReadMapStart() + if yyl2714 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2714, d) + } + } else if yyct2714 == codecSelferValueTypeArray1234 { + yyl2714 := r.ReadArrayStart() + if yyl2714 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2714, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceAccountList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2715Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2715Slc + var yyhl2715 bool = l >= 0 + for yyj2715 := 0; ; yyj2715++ { + if yyhl2715 { + if yyj2715 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2715Slc = r.DecodeBytes(yys2715Slc, true, true) + yys2715 := string(yys2715Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2715 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2718 := &x.ListMeta + yym2719 := z.DecBinary() + _ = yym2719 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2718) { + } else { + z.DecFallback(yyv2718, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2720 := &x.Items + yym2721 := z.DecBinary() + _ = yym2721 + if false { + } else { + h.decSliceServiceAccount((*[]ServiceAccount)(yyv2720), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2715) + } // end switch yys2715 + } // end for yyj2715 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceAccountList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2722 int + var yyb2722 bool + var yyhl2722 bool = l >= 0 + yyj2722++ + if yyhl2722 { + yyb2722 = yyj2722 > l + } else { + yyb2722 = r.CheckBreak() + } + if yyb2722 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2722++ + if yyhl2722 { + yyb2722 = yyj2722 > l + } else { + yyb2722 = r.CheckBreak() + } + if yyb2722 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2722++ + if yyhl2722 { + yyb2722 = yyj2722 > l + } else { + yyb2722 = r.CheckBreak() + } + if yyb2722 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2725 := &x.ListMeta + yym2726 := z.DecBinary() + _ = yym2726 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2725) { + } else { + z.DecFallback(yyv2725, false) + } + } + yyj2722++ + if yyhl2722 { + yyb2722 = yyj2722 > l + } else { + yyb2722 = r.CheckBreak() + } + if yyb2722 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2727 := &x.Items + yym2728 := z.DecBinary() + _ = yym2728 + if false { + } else { + h.decSliceServiceAccount((*[]ServiceAccount)(yyv2727), d) + } + } + for { + yyj2722++ + if yyhl2722 { + yyb2722 = yyj2722 > l + } else { + yyb2722 = r.CheckBreak() + } + if yyb2722 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2722-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Endpoints) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2729 := z.EncBinary() + _ = yym2729 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2730 := !z.EncBinary() + yy2arr2730 := z.EncBasicHandle().StructToArray + var yyq2730 [4]bool + _, _, _ = yysep2730, yyq2730, yy2arr2730 + const yyr2730 bool = false + yyq2730[0] = x.Kind != "" + yyq2730[1] = x.APIVersion != "" + yyq2730[2] = true + var yynn2730 int + if yyr2730 || yy2arr2730 { + r.EncodeArrayStart(4) + } else { + yynn2730 = 1 + for _, b := range yyq2730 { + if b { + yynn2730++ + } + } + r.EncodeMapStart(yynn2730) + yynn2730 = 0 + } + if yyr2730 || yy2arr2730 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2730[0] { + yym2732 := z.EncBinary() + _ = yym2732 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2730[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2733 := z.EncBinary() + _ = yym2733 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2730 || yy2arr2730 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2730[1] { + yym2735 := z.EncBinary() + _ = yym2735 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2730[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2736 := z.EncBinary() + _ = yym2736 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2730 || yy2arr2730 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2730[2] { + yy2738 := &x.ObjectMeta + yy2738.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2730[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2739 := &x.ObjectMeta + yy2739.CodecEncodeSelf(e) + } + } + if yyr2730 || yy2arr2730 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Subsets == nil { + r.EncodeNil() + } else { + yym2741 := z.EncBinary() + _ = yym2741 + if false { + } else { + h.encSliceEndpointSubset(([]EndpointSubset)(x.Subsets), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("subsets")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Subsets == nil { + r.EncodeNil() + } else { + yym2742 := z.EncBinary() + _ = yym2742 + if false { + } else { + h.encSliceEndpointSubset(([]EndpointSubset)(x.Subsets), e) + } + } + } + if yyr2730 || yy2arr2730 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Endpoints) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2743 := z.DecBinary() + _ = yym2743 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2744 := r.ContainerType() + if yyct2744 == codecSelferValueTypeMap1234 { + yyl2744 := r.ReadMapStart() + if yyl2744 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2744, d) + } + } else if yyct2744 == codecSelferValueTypeArray1234 { + yyl2744 := r.ReadArrayStart() + if yyl2744 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2744, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Endpoints) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2745Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2745Slc + var yyhl2745 bool = l >= 0 + for yyj2745 := 0; ; yyj2745++ { + if yyhl2745 { + if yyj2745 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2745Slc = r.DecodeBytes(yys2745Slc, true, true) + yys2745 := string(yys2745Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2745 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2748 := &x.ObjectMeta + yyv2748.CodecDecodeSelf(d) + } + case "subsets": + if r.TryDecodeAsNil() { + x.Subsets = nil + } else { + yyv2749 := &x.Subsets + yym2750 := z.DecBinary() + _ = yym2750 + if false { + } else { + h.decSliceEndpointSubset((*[]EndpointSubset)(yyv2749), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2745) + } // end switch yys2745 + } // end for yyj2745 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Endpoints) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2751 int + var yyb2751 bool + var yyhl2751 bool = l >= 0 + yyj2751++ + if yyhl2751 { + yyb2751 = yyj2751 > l + } else { + yyb2751 = r.CheckBreak() + } + if yyb2751 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2751++ + if yyhl2751 { + yyb2751 = yyj2751 > l + } else { + yyb2751 = r.CheckBreak() + } + if yyb2751 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2751++ + if yyhl2751 { + yyb2751 = yyj2751 > l + } else { + yyb2751 = r.CheckBreak() + } + if yyb2751 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv2754 := &x.ObjectMeta + yyv2754.CodecDecodeSelf(d) + } + yyj2751++ + if yyhl2751 { + yyb2751 = yyj2751 > l + } else { + yyb2751 = r.CheckBreak() + } + if yyb2751 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Subsets = nil + } else { + yyv2755 := &x.Subsets + yym2756 := z.DecBinary() + _ = yym2756 + if false { + } else { + h.decSliceEndpointSubset((*[]EndpointSubset)(yyv2755), d) + } + } + for { + yyj2751++ + if yyhl2751 { + yyb2751 = yyj2751 > l + } else { + yyb2751 = r.CheckBreak() + } + if yyb2751 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2751-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EndpointSubset) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2757 := z.EncBinary() + _ = yym2757 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2758 := !z.EncBinary() + yy2arr2758 := z.EncBasicHandle().StructToArray + var yyq2758 [3]bool + _, _, _ = yysep2758, yyq2758, yy2arr2758 + const yyr2758 bool = false + yyq2758[0] = len(x.Addresses) != 0 + yyq2758[1] = len(x.NotReadyAddresses) != 0 + yyq2758[2] = len(x.Ports) != 0 + var yynn2758 int + if yyr2758 || yy2arr2758 { + r.EncodeArrayStart(3) + } else { + yynn2758 = 0 + for _, b := range yyq2758 { + if b { + yynn2758++ + } + } + r.EncodeMapStart(yynn2758) + yynn2758 = 0 + } + if yyr2758 || yy2arr2758 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2758[0] { + if x.Addresses == nil { + r.EncodeNil() + } else { + yym2760 := z.EncBinary() + _ = yym2760 + if false { + } else { + h.encSliceEndpointAddress(([]EndpointAddress)(x.Addresses), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2758[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("addresses")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Addresses == nil { + r.EncodeNil() + } else { + yym2761 := z.EncBinary() + _ = yym2761 + if false { + } else { + h.encSliceEndpointAddress(([]EndpointAddress)(x.Addresses), e) + } + } + } + } + if yyr2758 || yy2arr2758 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2758[1] { + if x.NotReadyAddresses == nil { + r.EncodeNil() + } else { + yym2763 := z.EncBinary() + _ = yym2763 + if false { + } else { + h.encSliceEndpointAddress(([]EndpointAddress)(x.NotReadyAddresses), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2758[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("notReadyAddresses")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NotReadyAddresses == nil { + r.EncodeNil() + } else { + yym2764 := z.EncBinary() + _ = yym2764 + if false { + } else { + h.encSliceEndpointAddress(([]EndpointAddress)(x.NotReadyAddresses), e) + } + } + } + } + if yyr2758 || yy2arr2758 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2758[2] { + if x.Ports == nil { + r.EncodeNil() + } else { + yym2766 := z.EncBinary() + _ = yym2766 + if false { + } else { + h.encSliceEndpointPort(([]EndpointPort)(x.Ports), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2758[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ports")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym2767 := z.EncBinary() + _ = yym2767 + if false { + } else { + h.encSliceEndpointPort(([]EndpointPort)(x.Ports), e) + } + } + } + } + if yyr2758 || yy2arr2758 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EndpointSubset) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2768 := z.DecBinary() + _ = yym2768 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2769 := r.ContainerType() + if yyct2769 == codecSelferValueTypeMap1234 { + yyl2769 := r.ReadMapStart() + if yyl2769 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2769, d) + } + } else if yyct2769 == codecSelferValueTypeArray1234 { + yyl2769 := r.ReadArrayStart() + if yyl2769 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2769, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EndpointSubset) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2770Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2770Slc + var yyhl2770 bool = l >= 0 + for yyj2770 := 0; ; yyj2770++ { + if yyhl2770 { + if yyj2770 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2770Slc = r.DecodeBytes(yys2770Slc, true, true) + yys2770 := string(yys2770Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2770 { + case "addresses": + if r.TryDecodeAsNil() { + x.Addresses = nil + } else { + yyv2771 := &x.Addresses + yym2772 := z.DecBinary() + _ = yym2772 + if false { + } else { + h.decSliceEndpointAddress((*[]EndpointAddress)(yyv2771), d) + } + } + case "notReadyAddresses": + if r.TryDecodeAsNil() { + x.NotReadyAddresses = nil + } else { + yyv2773 := &x.NotReadyAddresses + yym2774 := z.DecBinary() + _ = yym2774 + if false { + } else { + h.decSliceEndpointAddress((*[]EndpointAddress)(yyv2773), d) + } + } + case "ports": + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv2775 := &x.Ports + yym2776 := z.DecBinary() + _ = yym2776 + if false { + } else { + h.decSliceEndpointPort((*[]EndpointPort)(yyv2775), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2770) + } // end switch yys2770 + } // end for yyj2770 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EndpointSubset) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2777 int + var yyb2777 bool + var yyhl2777 bool = l >= 0 + yyj2777++ + if yyhl2777 { + yyb2777 = yyj2777 > l + } else { + yyb2777 = r.CheckBreak() + } + if yyb2777 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Addresses = nil + } else { + yyv2778 := &x.Addresses + yym2779 := z.DecBinary() + _ = yym2779 + if false { + } else { + h.decSliceEndpointAddress((*[]EndpointAddress)(yyv2778), d) + } + } + yyj2777++ + if yyhl2777 { + yyb2777 = yyj2777 > l + } else { + yyb2777 = r.CheckBreak() + } + if yyb2777 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NotReadyAddresses = nil + } else { + yyv2780 := &x.NotReadyAddresses + yym2781 := z.DecBinary() + _ = yym2781 + if false { + } else { + h.decSliceEndpointAddress((*[]EndpointAddress)(yyv2780), d) + } + } + yyj2777++ + if yyhl2777 { + yyb2777 = yyj2777 > l + } else { + yyb2777 = r.CheckBreak() + } + if yyb2777 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv2782 := &x.Ports + yym2783 := z.DecBinary() + _ = yym2783 + if false { + } else { + h.decSliceEndpointPort((*[]EndpointPort)(yyv2782), d) + } + } + for { + yyj2777++ + if yyhl2777 { + yyb2777 = yyj2777 > l + } else { + yyb2777 = r.CheckBreak() + } + if yyb2777 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2777-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EndpointAddress) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2784 := z.EncBinary() + _ = yym2784 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2785 := !z.EncBinary() + yy2arr2785 := z.EncBasicHandle().StructToArray + var yyq2785 [4]bool + _, _, _ = yysep2785, yyq2785, yy2arr2785 + const yyr2785 bool = false + yyq2785[1] = x.Hostname != "" + yyq2785[2] = x.NodeName != nil + yyq2785[3] = x.TargetRef != nil + var yynn2785 int + if yyr2785 || yy2arr2785 { + r.EncodeArrayStart(4) + } else { + yynn2785 = 1 + for _, b := range yyq2785 { + if b { + yynn2785++ + } + } + r.EncodeMapStart(yynn2785) + yynn2785 = 0 + } + if yyr2785 || yy2arr2785 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2787 := z.EncBinary() + _ = yym2787 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IP)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ip")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2788 := z.EncBinary() + _ = yym2788 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.IP)) + } + } + if yyr2785 || yy2arr2785 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2785[1] { + yym2790 := z.EncBinary() + _ = yym2790 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2785[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostname")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2791 := z.EncBinary() + _ = yym2791 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Hostname)) + } + } + } + if yyr2785 || yy2arr2785 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2785[2] { + if x.NodeName == nil { + r.EncodeNil() + } else { + yy2793 := *x.NodeName + yym2794 := z.EncBinary() + _ = yym2794 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy2793)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2785[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NodeName == nil { + r.EncodeNil() + } else { + yy2795 := *x.NodeName + yym2796 := z.EncBinary() + _ = yym2796 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy2795)) + } + } + } + } + if yyr2785 || yy2arr2785 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2785[3] { + if x.TargetRef == nil { + r.EncodeNil() + } else { + x.TargetRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2785[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("targetRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TargetRef == nil { + r.EncodeNil() + } else { + x.TargetRef.CodecEncodeSelf(e) + } + } + } + if yyr2785 || yy2arr2785 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EndpointAddress) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2798 := z.DecBinary() + _ = yym2798 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2799 := r.ContainerType() + if yyct2799 == codecSelferValueTypeMap1234 { + yyl2799 := r.ReadMapStart() + if yyl2799 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2799, d) + } + } else if yyct2799 == codecSelferValueTypeArray1234 { + yyl2799 := r.ReadArrayStart() + if yyl2799 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2799, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EndpointAddress) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2800Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2800Slc + var yyhl2800 bool = l >= 0 + for yyj2800 := 0; ; yyj2800++ { + if yyhl2800 { + if yyj2800 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2800Slc = r.DecodeBytes(yys2800Slc, true, true) + yys2800 := string(yys2800Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2800 { + case "ip": + if r.TryDecodeAsNil() { + x.IP = "" + } else { + x.IP = string(r.DecodeString()) + } + case "hostname": + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + case "nodeName": + if r.TryDecodeAsNil() { + if x.NodeName != nil { + x.NodeName = nil + } + } else { + if x.NodeName == nil { + x.NodeName = new(string) + } + yym2804 := z.DecBinary() + _ = yym2804 + if false { + } else { + *((*string)(x.NodeName)) = r.DecodeString() + } + } + case "targetRef": + if r.TryDecodeAsNil() { + if x.TargetRef != nil { + x.TargetRef = nil + } + } else { + if x.TargetRef == nil { + x.TargetRef = new(ObjectReference) + } + x.TargetRef.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2800) + } // end switch yys2800 + } // end for yyj2800 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EndpointAddress) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2806 int + var yyb2806 bool + var yyhl2806 bool = l >= 0 + yyj2806++ + if yyhl2806 { + yyb2806 = yyj2806 > l + } else { + yyb2806 = r.CheckBreak() + } + if yyb2806 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.IP = "" + } else { + x.IP = string(r.DecodeString()) + } + yyj2806++ + if yyhl2806 { + yyb2806 = yyj2806 > l + } else { + yyb2806 = r.CheckBreak() + } + if yyb2806 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hostname = "" + } else { + x.Hostname = string(r.DecodeString()) + } + yyj2806++ + if yyhl2806 { + yyb2806 = yyj2806 > l + } else { + yyb2806 = r.CheckBreak() + } + if yyb2806 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NodeName != nil { + x.NodeName = nil + } + } else { + if x.NodeName == nil { + x.NodeName = new(string) + } + yym2810 := z.DecBinary() + _ = yym2810 + if false { + } else { + *((*string)(x.NodeName)) = r.DecodeString() + } + } + yyj2806++ + if yyhl2806 { + yyb2806 = yyj2806 > l + } else { + yyb2806 = r.CheckBreak() + } + if yyb2806 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TargetRef != nil { + x.TargetRef = nil + } + } else { + if x.TargetRef == nil { + x.TargetRef = new(ObjectReference) + } + x.TargetRef.CodecDecodeSelf(d) + } + for { + yyj2806++ + if yyhl2806 { + yyb2806 = yyj2806 > l + } else { + yyb2806 = r.CheckBreak() + } + if yyb2806 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2806-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EndpointPort) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2812 := z.EncBinary() + _ = yym2812 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2813 := !z.EncBinary() + yy2arr2813 := z.EncBasicHandle().StructToArray + var yyq2813 [3]bool + _, _, _ = yysep2813, yyq2813, yy2arr2813 + const yyr2813 bool = false + yyq2813[0] = x.Name != "" + yyq2813[2] = x.Protocol != "" + var yynn2813 int + if yyr2813 || yy2arr2813 { + r.EncodeArrayStart(3) + } else { + yynn2813 = 1 + for _, b := range yyq2813 { + if b { + yynn2813++ + } + } + r.EncodeMapStart(yynn2813) + yynn2813 = 0 + } + if yyr2813 || yy2arr2813 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2813[0] { + yym2815 := z.EncBinary() + _ = yym2815 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2813[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2816 := z.EncBinary() + _ = yym2816 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr2813 || yy2arr2813 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2818 := z.EncBinary() + _ = yym2818 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2819 := z.EncBinary() + _ = yym2819 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } + if yyr2813 || yy2arr2813 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2813[2] { + x.Protocol.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2813[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("protocol")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Protocol.CodecEncodeSelf(e) + } + } + if yyr2813 || yy2arr2813 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EndpointPort) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2821 := z.DecBinary() + _ = yym2821 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2822 := r.ContainerType() + if yyct2822 == codecSelferValueTypeMap1234 { + yyl2822 := r.ReadMapStart() + if yyl2822 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2822, d) + } + } else if yyct2822 == codecSelferValueTypeArray1234 { + yyl2822 := r.ReadArrayStart() + if yyl2822 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2822, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EndpointPort) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2823Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2823Slc + var yyhl2823 bool = l >= 0 + for yyj2823 := 0; ; yyj2823++ { + if yyhl2823 { + if yyj2823 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2823Slc = r.DecodeBytes(yys2823Slc, true, true) + yys2823 := string(yys2823Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2823 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "port": + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + case "protocol": + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2823) + } // end switch yys2823 + } // end for yyj2823 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EndpointPort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2827 int + var yyb2827 bool + var yyhl2827 bool = l >= 0 + yyj2827++ + if yyhl2827 { + yyb2827 = yyj2827 > l + } else { + yyb2827 = r.CheckBreak() + } + if yyb2827 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj2827++ + if yyhl2827 { + yyb2827 = yyj2827 > l + } else { + yyb2827 = r.CheckBreak() + } + if yyb2827 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + yyj2827++ + if yyhl2827 { + yyb2827 = yyj2827 > l + } else { + yyb2827 = r.CheckBreak() + } + if yyb2827 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Protocol = "" + } else { + x.Protocol = Protocol(r.DecodeString()) + } + for { + yyj2827++ + if yyhl2827 { + yyb2827 = yyj2827 > l + } else { + yyb2827 = r.CheckBreak() + } + if yyb2827 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2827-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EndpointsList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2831 := z.EncBinary() + _ = yym2831 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2832 := !z.EncBinary() + yy2arr2832 := z.EncBasicHandle().StructToArray + var yyq2832 [4]bool + _, _, _ = yysep2832, yyq2832, yy2arr2832 + const yyr2832 bool = false + yyq2832[0] = x.Kind != "" + yyq2832[1] = x.APIVersion != "" + yyq2832[2] = true + var yynn2832 int + if yyr2832 || yy2arr2832 { + r.EncodeArrayStart(4) + } else { + yynn2832 = 1 + for _, b := range yyq2832 { + if b { + yynn2832++ + } + } + r.EncodeMapStart(yynn2832) + yynn2832 = 0 + } + if yyr2832 || yy2arr2832 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2832[0] { + yym2834 := z.EncBinary() + _ = yym2834 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2832[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2835 := z.EncBinary() + _ = yym2835 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2832 || yy2arr2832 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2832[1] { + yym2837 := z.EncBinary() + _ = yym2837 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2832[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2838 := z.EncBinary() + _ = yym2838 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2832 || yy2arr2832 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2832[2] { + yy2840 := &x.ListMeta + yym2841 := z.EncBinary() + _ = yym2841 + if false { + } else if z.HasExtensions() && z.EncExt(yy2840) { + } else { + z.EncFallback(yy2840) + } + } else { + r.EncodeNil() + } + } else { + if yyq2832[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2842 := &x.ListMeta + yym2843 := z.EncBinary() + _ = yym2843 + if false { + } else if z.HasExtensions() && z.EncExt(yy2842) { + } else { + z.EncFallback(yy2842) + } + } + } + if yyr2832 || yy2arr2832 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2845 := z.EncBinary() + _ = yym2845 + if false { + } else { + h.encSliceEndpoints(([]Endpoints)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym2846 := z.EncBinary() + _ = yym2846 + if false { + } else { + h.encSliceEndpoints(([]Endpoints)(x.Items), e) + } + } + } + if yyr2832 || yy2arr2832 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EndpointsList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2847 := z.DecBinary() + _ = yym2847 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2848 := r.ContainerType() + if yyct2848 == codecSelferValueTypeMap1234 { + yyl2848 := r.ReadMapStart() + if yyl2848 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2848, d) + } + } else if yyct2848 == codecSelferValueTypeArray1234 { + yyl2848 := r.ReadArrayStart() + if yyl2848 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2848, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EndpointsList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2849Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2849Slc + var yyhl2849 bool = l >= 0 + for yyj2849 := 0; ; yyj2849++ { + if yyhl2849 { + if yyj2849 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2849Slc = r.DecodeBytes(yys2849Slc, true, true) + yys2849 := string(yys2849Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2849 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2852 := &x.ListMeta + yym2853 := z.DecBinary() + _ = yym2853 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2852) { + } else { + z.DecFallback(yyv2852, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2854 := &x.Items + yym2855 := z.DecBinary() + _ = yym2855 + if false { + } else { + h.decSliceEndpoints((*[]Endpoints)(yyv2854), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2849) + } // end switch yys2849 + } // end for yyj2849 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EndpointsList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2856 int + var yyb2856 bool + var yyhl2856 bool = l >= 0 + yyj2856++ + if yyhl2856 { + yyb2856 = yyj2856 > l + } else { + yyb2856 = r.CheckBreak() + } + if yyb2856 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj2856++ + if yyhl2856 { + yyb2856 = yyj2856 > l + } else { + yyb2856 = r.CheckBreak() + } + if yyb2856 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj2856++ + if yyhl2856 { + yyb2856 = yyj2856 > l + } else { + yyb2856 = r.CheckBreak() + } + if yyb2856 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv2859 := &x.ListMeta + yym2860 := z.DecBinary() + _ = yym2860 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2859) { + } else { + z.DecFallback(yyv2859, false) + } + } + yyj2856++ + if yyhl2856 { + yyb2856 = yyj2856 > l + } else { + yyb2856 = r.CheckBreak() + } + if yyb2856 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv2861 := &x.Items + yym2862 := z.DecBinary() + _ = yym2862 + if false { + } else { + h.decSliceEndpoints((*[]Endpoints)(yyv2861), d) + } + } + for { + yyj2856++ + if yyhl2856 { + yyb2856 = yyj2856 > l + } else { + yyb2856 = r.CheckBreak() + } + if yyb2856 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2856-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2863 := z.EncBinary() + _ = yym2863 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2864 := !z.EncBinary() + yy2arr2864 := z.EncBasicHandle().StructToArray + var yyq2864 [4]bool + _, _, _ = yysep2864, yyq2864, yy2arr2864 + const yyr2864 bool = false + yyq2864[0] = x.PodCIDR != "" + yyq2864[1] = x.ExternalID != "" + yyq2864[2] = x.ProviderID != "" + yyq2864[3] = x.Unschedulable != false + var yynn2864 int + if yyr2864 || yy2arr2864 { + r.EncodeArrayStart(4) + } else { + yynn2864 = 0 + for _, b := range yyq2864 { + if b { + yynn2864++ + } + } + r.EncodeMapStart(yynn2864) + yynn2864 = 0 + } + if yyr2864 || yy2arr2864 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2864[0] { + yym2866 := z.EncBinary() + _ = yym2866 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PodCIDR)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2864[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podCIDR")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2867 := z.EncBinary() + _ = yym2867 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.PodCIDR)) + } + } + } + if yyr2864 || yy2arr2864 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2864[1] { + yym2869 := z.EncBinary() + _ = yym2869 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ExternalID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2864[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("externalID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2870 := z.EncBinary() + _ = yym2870 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ExternalID)) + } + } + } + if yyr2864 || yy2arr2864 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2864[2] { + yym2872 := z.EncBinary() + _ = yym2872 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ProviderID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2864[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("providerID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2873 := z.EncBinary() + _ = yym2873 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ProviderID)) + } + } + } + if yyr2864 || yy2arr2864 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2864[3] { + yym2875 := z.EncBinary() + _ = yym2875 + if false { + } else { + r.EncodeBool(bool(x.Unschedulable)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq2864[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("unschedulable")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2876 := z.EncBinary() + _ = yym2876 + if false { + } else { + r.EncodeBool(bool(x.Unschedulable)) + } + } + } + if yyr2864 || yy2arr2864 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2877 := z.DecBinary() + _ = yym2877 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2878 := r.ContainerType() + if yyct2878 == codecSelferValueTypeMap1234 { + yyl2878 := r.ReadMapStart() + if yyl2878 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2878, d) + } + } else if yyct2878 == codecSelferValueTypeArray1234 { + yyl2878 := r.ReadArrayStart() + if yyl2878 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2878, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2879Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2879Slc + var yyhl2879 bool = l >= 0 + for yyj2879 := 0; ; yyj2879++ { + if yyhl2879 { + if yyj2879 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2879Slc = r.DecodeBytes(yys2879Slc, true, true) + yys2879 := string(yys2879Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2879 { + case "podCIDR": + if r.TryDecodeAsNil() { + x.PodCIDR = "" + } else { + x.PodCIDR = string(r.DecodeString()) + } + case "externalID": + if r.TryDecodeAsNil() { + x.ExternalID = "" + } else { + x.ExternalID = string(r.DecodeString()) + } + case "providerID": + if r.TryDecodeAsNil() { + x.ProviderID = "" + } else { + x.ProviderID = string(r.DecodeString()) + } + case "unschedulable": + if r.TryDecodeAsNil() { + x.Unschedulable = false + } else { + x.Unschedulable = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys2879) + } // end switch yys2879 + } // end for yyj2879 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2884 int + var yyb2884 bool + var yyhl2884 bool = l >= 0 + yyj2884++ + if yyhl2884 { + yyb2884 = yyj2884 > l + } else { + yyb2884 = r.CheckBreak() + } + if yyb2884 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodCIDR = "" + } else { + x.PodCIDR = string(r.DecodeString()) + } + yyj2884++ + if yyhl2884 { + yyb2884 = yyj2884 > l + } else { + yyb2884 = r.CheckBreak() + } + if yyb2884 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ExternalID = "" + } else { + x.ExternalID = string(r.DecodeString()) + } + yyj2884++ + if yyhl2884 { + yyb2884 = yyj2884 > l + } else { + yyb2884 = r.CheckBreak() + } + if yyb2884 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ProviderID = "" + } else { + x.ProviderID = string(r.DecodeString()) + } + yyj2884++ + if yyhl2884 { + yyb2884 = yyj2884 > l + } else { + yyb2884 = r.CheckBreak() + } + if yyb2884 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Unschedulable = false + } else { + x.Unschedulable = bool(r.DecodeBool()) + } + for { + yyj2884++ + if yyhl2884 { + yyb2884 = yyj2884 > l + } else { + yyb2884 = r.CheckBreak() + } + if yyb2884 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2884-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DaemonEndpoint) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2889 := z.EncBinary() + _ = yym2889 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2890 := !z.EncBinary() + yy2arr2890 := z.EncBasicHandle().StructToArray + var yyq2890 [1]bool + _, _, _ = yysep2890, yyq2890, yy2arr2890 + const yyr2890 bool = false + var yynn2890 int + if yyr2890 || yy2arr2890 { + r.EncodeArrayStart(1) + } else { + yynn2890 = 1 + for _, b := range yyq2890 { + if b { + yynn2890++ + } + } + r.EncodeMapStart(yynn2890) + yynn2890 = 0 + } + if yyr2890 || yy2arr2890 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2892 := z.EncBinary() + _ = yym2892 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("Port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2893 := z.EncBinary() + _ = yym2893 + if false { + } else { + r.EncodeInt(int64(x.Port)) + } + } + if yyr2890 || yy2arr2890 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DaemonEndpoint) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2894 := z.DecBinary() + _ = yym2894 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2895 := r.ContainerType() + if yyct2895 == codecSelferValueTypeMap1234 { + yyl2895 := r.ReadMapStart() + if yyl2895 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2895, d) + } + } else if yyct2895 == codecSelferValueTypeArray1234 { + yyl2895 := r.ReadArrayStart() + if yyl2895 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2895, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DaemonEndpoint) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2896Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2896Slc + var yyhl2896 bool = l >= 0 + for yyj2896 := 0; ; yyj2896++ { + if yyhl2896 { + if yyj2896 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2896Slc = r.DecodeBytes(yys2896Slc, true, true) + yys2896 := string(yys2896Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2896 { + case "Port": + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys2896) + } // end switch yys2896 + } // end for yyj2896 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DaemonEndpoint) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2898 int + var yyb2898 bool + var yyhl2898 bool = l >= 0 + yyj2898++ + if yyhl2898 { + yyb2898 = yyj2898 > l + } else { + yyb2898 = r.CheckBreak() + } + if yyb2898 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Port = 0 + } else { + x.Port = int32(r.DecodeInt(32)) + } + for { + yyj2898++ + if yyhl2898 { + yyb2898 = yyj2898 > l + } else { + yyb2898 = r.CheckBreak() + } + if yyb2898 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2898-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeDaemonEndpoints) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2900 := z.EncBinary() + _ = yym2900 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2901 := !z.EncBinary() + yy2arr2901 := z.EncBasicHandle().StructToArray + var yyq2901 [1]bool + _, _, _ = yysep2901, yyq2901, yy2arr2901 + const yyr2901 bool = false + yyq2901[0] = true + var yynn2901 int + if yyr2901 || yy2arr2901 { + r.EncodeArrayStart(1) + } else { + yynn2901 = 0 + for _, b := range yyq2901 { + if b { + yynn2901++ + } + } + r.EncodeMapStart(yynn2901) + yynn2901 = 0 + } + if yyr2901 || yy2arr2901 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2901[0] { + yy2903 := &x.KubeletEndpoint + yy2903.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2901[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kubeletEndpoint")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2904 := &x.KubeletEndpoint + yy2904.CodecEncodeSelf(e) + } + } + if yyr2901 || yy2arr2901 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeDaemonEndpoints) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2905 := z.DecBinary() + _ = yym2905 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2906 := r.ContainerType() + if yyct2906 == codecSelferValueTypeMap1234 { + yyl2906 := r.ReadMapStart() + if yyl2906 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2906, d) + } + } else if yyct2906 == codecSelferValueTypeArray1234 { + yyl2906 := r.ReadArrayStart() + if yyl2906 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2906, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeDaemonEndpoints) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2907Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2907Slc + var yyhl2907 bool = l >= 0 + for yyj2907 := 0; ; yyj2907++ { + if yyhl2907 { + if yyj2907 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2907Slc = r.DecodeBytes(yys2907Slc, true, true) + yys2907 := string(yys2907Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2907 { + case "kubeletEndpoint": + if r.TryDecodeAsNil() { + x.KubeletEndpoint = DaemonEndpoint{} + } else { + yyv2908 := &x.KubeletEndpoint + yyv2908.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys2907) + } // end switch yys2907 + } // end for yyj2907 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeDaemonEndpoints) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2909 int + var yyb2909 bool + var yyhl2909 bool = l >= 0 + yyj2909++ + if yyhl2909 { + yyb2909 = yyj2909 > l + } else { + yyb2909 = r.CheckBreak() + } + if yyb2909 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.KubeletEndpoint = DaemonEndpoint{} + } else { + yyv2910 := &x.KubeletEndpoint + yyv2910.CodecDecodeSelf(d) + } + for { + yyj2909++ + if yyhl2909 { + yyb2909 = yyj2909 > l + } else { + yyb2909 = r.CheckBreak() + } + if yyb2909 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2909-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeSystemInfo) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2911 := z.EncBinary() + _ = yym2911 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2912 := !z.EncBinary() + yy2arr2912 := z.EncBasicHandle().StructToArray + var yyq2912 [10]bool + _, _, _ = yysep2912, yyq2912, yy2arr2912 + const yyr2912 bool = false + var yynn2912 int + if yyr2912 || yy2arr2912 { + r.EncodeArrayStart(10) + } else { + yynn2912 = 10 + for _, b := range yyq2912 { + if b { + yynn2912++ + } + } + r.EncodeMapStart(yynn2912) + yynn2912 = 0 + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2914 := z.EncBinary() + _ = yym2914 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.MachineID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("machineID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2915 := z.EncBinary() + _ = yym2915 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.MachineID)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2917 := z.EncBinary() + _ = yym2917 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SystemUUID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("systemUUID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2918 := z.EncBinary() + _ = yym2918 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SystemUUID)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2920 := z.EncBinary() + _ = yym2920 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.BootID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("bootID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2921 := z.EncBinary() + _ = yym2921 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.BootID)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2923 := z.EncBinary() + _ = yym2923 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KernelVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kernelVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2924 := z.EncBinary() + _ = yym2924 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KernelVersion)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2926 := z.EncBinary() + _ = yym2926 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.OSImage)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("osImage")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2927 := z.EncBinary() + _ = yym2927 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.OSImage)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2929 := z.EncBinary() + _ = yym2929 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerRuntimeVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("containerRuntimeVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2930 := z.EncBinary() + _ = yym2930 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ContainerRuntimeVersion)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2932 := z.EncBinary() + _ = yym2932 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KubeletVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kubeletVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2933 := z.EncBinary() + _ = yym2933 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KubeletVersion)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2935 := z.EncBinary() + _ = yym2935 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KubeProxyVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kubeProxyVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2936 := z.EncBinary() + _ = yym2936 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.KubeProxyVersion)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2938 := z.EncBinary() + _ = yym2938 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.OperatingSystem)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("operatingSystem")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2939 := z.EncBinary() + _ = yym2939 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.OperatingSystem)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2941 := z.EncBinary() + _ = yym2941 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Architecture)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("architecture")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym2942 := z.EncBinary() + _ = yym2942 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Architecture)) + } + } + if yyr2912 || yy2arr2912 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeSystemInfo) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2943 := z.DecBinary() + _ = yym2943 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2944 := r.ContainerType() + if yyct2944 == codecSelferValueTypeMap1234 { + yyl2944 := r.ReadMapStart() + if yyl2944 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2944, d) + } + } else if yyct2944 == codecSelferValueTypeArray1234 { + yyl2944 := r.ReadArrayStart() + if yyl2944 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2944, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeSystemInfo) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2945Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2945Slc + var yyhl2945 bool = l >= 0 + for yyj2945 := 0; ; yyj2945++ { + if yyhl2945 { + if yyj2945 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2945Slc = r.DecodeBytes(yys2945Slc, true, true) + yys2945 := string(yys2945Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2945 { + case "machineID": + if r.TryDecodeAsNil() { + x.MachineID = "" + } else { + x.MachineID = string(r.DecodeString()) + } + case "systemUUID": + if r.TryDecodeAsNil() { + x.SystemUUID = "" + } else { + x.SystemUUID = string(r.DecodeString()) + } + case "bootID": + if r.TryDecodeAsNil() { + x.BootID = "" + } else { + x.BootID = string(r.DecodeString()) + } + case "kernelVersion": + if r.TryDecodeAsNil() { + x.KernelVersion = "" + } else { + x.KernelVersion = string(r.DecodeString()) + } + case "osImage": + if r.TryDecodeAsNil() { + x.OSImage = "" + } else { + x.OSImage = string(r.DecodeString()) + } + case "containerRuntimeVersion": + if r.TryDecodeAsNil() { + x.ContainerRuntimeVersion = "" + } else { + x.ContainerRuntimeVersion = string(r.DecodeString()) + } + case "kubeletVersion": + if r.TryDecodeAsNil() { + x.KubeletVersion = "" + } else { + x.KubeletVersion = string(r.DecodeString()) + } + case "kubeProxyVersion": + if r.TryDecodeAsNil() { + x.KubeProxyVersion = "" + } else { + x.KubeProxyVersion = string(r.DecodeString()) + } + case "operatingSystem": + if r.TryDecodeAsNil() { + x.OperatingSystem = "" + } else { + x.OperatingSystem = string(r.DecodeString()) + } + case "architecture": + if r.TryDecodeAsNil() { + x.Architecture = "" + } else { + x.Architecture = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys2945) + } // end switch yys2945 + } // end for yyj2945 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeSystemInfo) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj2956 int + var yyb2956 bool + var yyhl2956 bool = l >= 0 + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MachineID = "" + } else { + x.MachineID = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SystemUUID = "" + } else { + x.SystemUUID = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.BootID = "" + } else { + x.BootID = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.KernelVersion = "" + } else { + x.KernelVersion = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.OSImage = "" + } else { + x.OSImage = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ContainerRuntimeVersion = "" + } else { + x.ContainerRuntimeVersion = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.KubeletVersion = "" + } else { + x.KubeletVersion = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.KubeProxyVersion = "" + } else { + x.KubeProxyVersion = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.OperatingSystem = "" + } else { + x.OperatingSystem = string(r.DecodeString()) + } + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Architecture = "" + } else { + x.Architecture = string(r.DecodeString()) + } + for { + yyj2956++ + if yyhl2956 { + yyb2956 = yyj2956 > l + } else { + yyb2956 = r.CheckBreak() + } + if yyb2956 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj2956-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym2967 := z.EncBinary() + _ = yym2967 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2968 := !z.EncBinary() + yy2arr2968 := z.EncBasicHandle().StructToArray + var yyq2968 [10]bool + _, _, _ = yysep2968, yyq2968, yy2arr2968 + const yyr2968 bool = false + yyq2968[0] = len(x.Capacity) != 0 + yyq2968[1] = len(x.Allocatable) != 0 + yyq2968[2] = x.Phase != "" + yyq2968[3] = len(x.Conditions) != 0 + yyq2968[4] = len(x.Addresses) != 0 + yyq2968[5] = true + yyq2968[6] = true + yyq2968[7] = len(x.Images) != 0 + yyq2968[8] = len(x.VolumesInUse) != 0 + yyq2968[9] = len(x.VolumesAttached) != 0 + var yynn2968 int + if yyr2968 || yy2arr2968 { + r.EncodeArrayStart(10) + } else { + yynn2968 = 0 + for _, b := range yyq2968 { + if b { + yynn2968++ + } + } + r.EncodeMapStart(yynn2968) + yynn2968 = 0 + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[0] { + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2968[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capacity")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capacity == nil { + r.EncodeNil() + } else { + x.Capacity.CodecEncodeSelf(e) + } + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[1] { + if x.Allocatable == nil { + r.EncodeNil() + } else { + x.Allocatable.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2968[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("allocatable")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Allocatable == nil { + r.EncodeNil() + } else { + x.Allocatable.CodecEncodeSelf(e) + } + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[2] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2968[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[3] { + if x.Conditions == nil { + r.EncodeNil() + } else { + yym2973 := z.EncBinary() + _ = yym2973 + if false { + } else { + h.encSliceNodeCondition(([]NodeCondition)(x.Conditions), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2968[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("conditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Conditions == nil { + r.EncodeNil() + } else { + yym2974 := z.EncBinary() + _ = yym2974 + if false { + } else { + h.encSliceNodeCondition(([]NodeCondition)(x.Conditions), e) + } + } + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[4] { + if x.Addresses == nil { + r.EncodeNil() + } else { + yym2976 := z.EncBinary() + _ = yym2976 + if false { + } else { + h.encSliceNodeAddress(([]NodeAddress)(x.Addresses), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2968[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("addresses")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Addresses == nil { + r.EncodeNil() + } else { + yym2977 := z.EncBinary() + _ = yym2977 + if false { + } else { + h.encSliceNodeAddress(([]NodeAddress)(x.Addresses), e) + } + } + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[5] { + yy2979 := &x.DaemonEndpoints + yy2979.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2968[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("daemonEndpoints")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2980 := &x.DaemonEndpoints + yy2980.CodecEncodeSelf(e) + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[6] { + yy2982 := &x.NodeInfo + yy2982.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2968[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("nodeInfo")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy2983 := &x.NodeInfo + yy2983.CodecEncodeSelf(e) + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[7] { + if x.Images == nil { + r.EncodeNil() + } else { + yym2985 := z.EncBinary() + _ = yym2985 + if false { + } else { + h.encSliceContainerImage(([]ContainerImage)(x.Images), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2968[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("images")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Images == nil { + r.EncodeNil() + } else { + yym2986 := z.EncBinary() + _ = yym2986 + if false { + } else { + h.encSliceContainerImage(([]ContainerImage)(x.Images), e) + } + } + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[8] { + if x.VolumesInUse == nil { + r.EncodeNil() + } else { + yym2988 := z.EncBinary() + _ = yym2988 + if false { + } else { + h.encSliceUniqueVolumeName(([]UniqueVolumeName)(x.VolumesInUse), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2968[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumesInUse")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VolumesInUse == nil { + r.EncodeNil() + } else { + yym2989 := z.EncBinary() + _ = yym2989 + if false { + } else { + h.encSliceUniqueVolumeName(([]UniqueVolumeName)(x.VolumesInUse), e) + } + } + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2968[9] { + if x.VolumesAttached == nil { + r.EncodeNil() + } else { + yym2991 := z.EncBinary() + _ = yym2991 + if false { + } else { + h.encSliceAttachedVolume(([]AttachedVolume)(x.VolumesAttached), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq2968[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumesAttached")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.VolumesAttached == nil { + r.EncodeNil() + } else { + yym2992 := z.EncBinary() + _ = yym2992 + if false { + } else { + h.encSliceAttachedVolume(([]AttachedVolume)(x.VolumesAttached), e) + } + } + } + } + if yyr2968 || yy2arr2968 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym2993 := z.DecBinary() + _ = yym2993 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2994 := r.ContainerType() + if yyct2994 == codecSelferValueTypeMap1234 { + yyl2994 := r.ReadMapStart() + if yyl2994 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2994, d) + } + } else if yyct2994 == codecSelferValueTypeArray1234 { + yyl2994 := r.ReadArrayStart() + if yyl2994 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2994, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys2995Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys2995Slc + var yyhl2995 bool = l >= 0 + for yyj2995 := 0; ; yyj2995++ { + if yyhl2995 { + if yyj2995 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys2995Slc = r.DecodeBytes(yys2995Slc, true, true) + yys2995 := string(yys2995Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys2995 { + case "capacity": + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv2996 := &x.Capacity + yyv2996.CodecDecodeSelf(d) + } + case "allocatable": + if r.TryDecodeAsNil() { + x.Allocatable = nil + } else { + yyv2997 := &x.Allocatable + yyv2997.CodecDecodeSelf(d) + } + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = NodePhase(r.DecodeString()) + } + case "conditions": + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv2999 := &x.Conditions + yym3000 := z.DecBinary() + _ = yym3000 + if false { + } else { + h.decSliceNodeCondition((*[]NodeCondition)(yyv2999), d) + } + } + case "addresses": + if r.TryDecodeAsNil() { + x.Addresses = nil + } else { + yyv3001 := &x.Addresses + yym3002 := z.DecBinary() + _ = yym3002 + if false { + } else { + h.decSliceNodeAddress((*[]NodeAddress)(yyv3001), d) + } + } + case "daemonEndpoints": + if r.TryDecodeAsNil() { + x.DaemonEndpoints = NodeDaemonEndpoints{} + } else { + yyv3003 := &x.DaemonEndpoints + yyv3003.CodecDecodeSelf(d) + } + case "nodeInfo": + if r.TryDecodeAsNil() { + x.NodeInfo = NodeSystemInfo{} + } else { + yyv3004 := &x.NodeInfo + yyv3004.CodecDecodeSelf(d) + } + case "images": + if r.TryDecodeAsNil() { + x.Images = nil + } else { + yyv3005 := &x.Images + yym3006 := z.DecBinary() + _ = yym3006 + if false { + } else { + h.decSliceContainerImage((*[]ContainerImage)(yyv3005), d) + } + } + case "volumesInUse": + if r.TryDecodeAsNil() { + x.VolumesInUse = nil + } else { + yyv3007 := &x.VolumesInUse + yym3008 := z.DecBinary() + _ = yym3008 + if false { + } else { + h.decSliceUniqueVolumeName((*[]UniqueVolumeName)(yyv3007), d) + } + } + case "volumesAttached": + if r.TryDecodeAsNil() { + x.VolumesAttached = nil + } else { + yyv3009 := &x.VolumesAttached + yym3010 := z.DecBinary() + _ = yym3010 + if false { + } else { + h.decSliceAttachedVolume((*[]AttachedVolume)(yyv3009), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys2995) + } // end switch yys2995 + } // end for yyj2995 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3011 int + var yyb3011 bool + var yyhl3011 bool = l >= 0 + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Capacity = nil + } else { + yyv3012 := &x.Capacity + yyv3012.CodecDecodeSelf(d) + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Allocatable = nil + } else { + yyv3013 := &x.Allocatable + yyv3013.CodecDecodeSelf(d) + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = NodePhase(r.DecodeString()) + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv3015 := &x.Conditions + yym3016 := z.DecBinary() + _ = yym3016 + if false { + } else { + h.decSliceNodeCondition((*[]NodeCondition)(yyv3015), d) + } + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Addresses = nil + } else { + yyv3017 := &x.Addresses + yym3018 := z.DecBinary() + _ = yym3018 + if false { + } else { + h.decSliceNodeAddress((*[]NodeAddress)(yyv3017), d) + } + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DaemonEndpoints = NodeDaemonEndpoints{} + } else { + yyv3019 := &x.DaemonEndpoints + yyv3019.CodecDecodeSelf(d) + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NodeInfo = NodeSystemInfo{} + } else { + yyv3020 := &x.NodeInfo + yyv3020.CodecDecodeSelf(d) + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Images = nil + } else { + yyv3021 := &x.Images + yym3022 := z.DecBinary() + _ = yym3022 + if false { + } else { + h.decSliceContainerImage((*[]ContainerImage)(yyv3021), d) + } + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumesInUse = nil + } else { + yyv3023 := &x.VolumesInUse + yym3024 := z.DecBinary() + _ = yym3024 + if false { + } else { + h.decSliceUniqueVolumeName((*[]UniqueVolumeName)(yyv3023), d) + } + } + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumesAttached = nil + } else { + yyv3025 := &x.VolumesAttached + yym3026 := z.DecBinary() + _ = yym3026 + if false { + } else { + h.decSliceAttachedVolume((*[]AttachedVolume)(yyv3025), d) + } + } + for { + yyj3011++ + if yyhl3011 { + yyb3011 = yyj3011 > l + } else { + yyb3011 = r.CheckBreak() + } + if yyb3011 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3011-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x UniqueVolumeName) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3027 := z.EncBinary() + _ = yym3027 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *UniqueVolumeName) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3028 := z.DecBinary() + _ = yym3028 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *AttachedVolume) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3029 := z.EncBinary() + _ = yym3029 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3030 := !z.EncBinary() + yy2arr3030 := z.EncBasicHandle().StructToArray + var yyq3030 [2]bool + _, _, _ = yysep3030, yyq3030, yy2arr3030 + const yyr3030 bool = false + var yynn3030 int + if yyr3030 || yy2arr3030 { + r.EncodeArrayStart(2) + } else { + yynn3030 = 2 + for _, b := range yyq3030 { + if b { + yynn3030++ + } + } + r.EncodeMapStart(yynn3030) + yynn3030 = 0 + } + if yyr3030 || yy2arr3030 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Name.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Name.CodecEncodeSelf(e) + } + if yyr3030 || yy2arr3030 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3033 := z.EncBinary() + _ = yym3033 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DevicePath)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("devicePath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3034 := z.EncBinary() + _ = yym3034 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.DevicePath)) + } + } + if yyr3030 || yy2arr3030 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AttachedVolume) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3035 := z.DecBinary() + _ = yym3035 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3036 := r.ContainerType() + if yyct3036 == codecSelferValueTypeMap1234 { + yyl3036 := r.ReadMapStart() + if yyl3036 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3036, d) + } + } else if yyct3036 == codecSelferValueTypeArray1234 { + yyl3036 := r.ReadArrayStart() + if yyl3036 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3036, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AttachedVolume) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3037Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3037Slc + var yyhl3037 bool = l >= 0 + for yyj3037 := 0; ; yyj3037++ { + if yyhl3037 { + if yyj3037 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3037Slc = r.DecodeBytes(yys3037Slc, true, true) + yys3037 := string(yys3037Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3037 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = UniqueVolumeName(r.DecodeString()) + } + case "devicePath": + if r.TryDecodeAsNil() { + x.DevicePath = "" + } else { + x.DevicePath = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3037) + } // end switch yys3037 + } // end for yyj3037 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AttachedVolume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3040 int + var yyb3040 bool + var yyhl3040 bool = l >= 0 + yyj3040++ + if yyhl3040 { + yyb3040 = yyj3040 > l + } else { + yyb3040 = r.CheckBreak() + } + if yyb3040 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = UniqueVolumeName(r.DecodeString()) + } + yyj3040++ + if yyhl3040 { + yyb3040 = yyj3040 > l + } else { + yyb3040 = r.CheckBreak() + } + if yyb3040 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DevicePath = "" + } else { + x.DevicePath = string(r.DecodeString()) + } + for { + yyj3040++ + if yyhl3040 { + yyb3040 = yyj3040 > l + } else { + yyb3040 = r.CheckBreak() + } + if yyb3040 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3040-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *AvoidPods) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3043 := z.EncBinary() + _ = yym3043 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3044 := !z.EncBinary() + yy2arr3044 := z.EncBasicHandle().StructToArray + var yyq3044 [1]bool + _, _, _ = yysep3044, yyq3044, yy2arr3044 + const yyr3044 bool = false + yyq3044[0] = len(x.PreferAvoidPods) != 0 + var yynn3044 int + if yyr3044 || yy2arr3044 { + r.EncodeArrayStart(1) + } else { + yynn3044 = 0 + for _, b := range yyq3044 { + if b { + yynn3044++ + } + } + r.EncodeMapStart(yynn3044) + yynn3044 = 0 + } + if yyr3044 || yy2arr3044 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3044[0] { + if x.PreferAvoidPods == nil { + r.EncodeNil() + } else { + yym3046 := z.EncBinary() + _ = yym3046 + if false { + } else { + h.encSlicePreferAvoidPodsEntry(([]PreferAvoidPodsEntry)(x.PreferAvoidPods), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3044[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preferAvoidPods")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PreferAvoidPods == nil { + r.EncodeNil() + } else { + yym3047 := z.EncBinary() + _ = yym3047 + if false { + } else { + h.encSlicePreferAvoidPodsEntry(([]PreferAvoidPodsEntry)(x.PreferAvoidPods), e) + } + } + } + } + if yyr3044 || yy2arr3044 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *AvoidPods) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3048 := z.DecBinary() + _ = yym3048 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3049 := r.ContainerType() + if yyct3049 == codecSelferValueTypeMap1234 { + yyl3049 := r.ReadMapStart() + if yyl3049 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3049, d) + } + } else if yyct3049 == codecSelferValueTypeArray1234 { + yyl3049 := r.ReadArrayStart() + if yyl3049 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3049, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *AvoidPods) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3050Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3050Slc + var yyhl3050 bool = l >= 0 + for yyj3050 := 0; ; yyj3050++ { + if yyhl3050 { + if yyj3050 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3050Slc = r.DecodeBytes(yys3050Slc, true, true) + yys3050 := string(yys3050Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3050 { + case "preferAvoidPods": + if r.TryDecodeAsNil() { + x.PreferAvoidPods = nil + } else { + yyv3051 := &x.PreferAvoidPods + yym3052 := z.DecBinary() + _ = yym3052 + if false { + } else { + h.decSlicePreferAvoidPodsEntry((*[]PreferAvoidPodsEntry)(yyv3051), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3050) + } // end switch yys3050 + } // end for yyj3050 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *AvoidPods) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3053 int + var yyb3053 bool + var yyhl3053 bool = l >= 0 + yyj3053++ + if yyhl3053 { + yyb3053 = yyj3053 > l + } else { + yyb3053 = r.CheckBreak() + } + if yyb3053 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PreferAvoidPods = nil + } else { + yyv3054 := &x.PreferAvoidPods + yym3055 := z.DecBinary() + _ = yym3055 + if false { + } else { + h.decSlicePreferAvoidPodsEntry((*[]PreferAvoidPodsEntry)(yyv3054), d) + } + } + for { + yyj3053++ + if yyhl3053 { + yyb3053 = yyj3053 > l + } else { + yyb3053 = r.CheckBreak() + } + if yyb3053 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3053-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PreferAvoidPodsEntry) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3056 := z.EncBinary() + _ = yym3056 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3057 := !z.EncBinary() + yy2arr3057 := z.EncBasicHandle().StructToArray + var yyq3057 [4]bool + _, _, _ = yysep3057, yyq3057, yy2arr3057 + const yyr3057 bool = false + yyq3057[1] = true + yyq3057[2] = x.Reason != "" + yyq3057[3] = x.Message != "" + var yynn3057 int + if yyr3057 || yy2arr3057 { + r.EncodeArrayStart(4) + } else { + yynn3057 = 1 + for _, b := range yyq3057 { + if b { + yynn3057++ + } + } + r.EncodeMapStart(yynn3057) + yynn3057 = 0 + } + if yyr3057 || yy2arr3057 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy3059 := &x.PodSignature + yy3059.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podSignature")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3060 := &x.PodSignature + yy3060.CodecEncodeSelf(e) + } + if yyr3057 || yy2arr3057 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3057[1] { + yy3062 := &x.EvictionTime + yym3063 := z.EncBinary() + _ = yym3063 + if false { + } else if z.HasExtensions() && z.EncExt(yy3062) { + } else if yym3063 { + z.EncBinaryMarshal(yy3062) + } else if !yym3063 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3062) + } else { + z.EncFallback(yy3062) + } + } else { + r.EncodeNil() + } + } else { + if yyq3057[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("evictionTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3064 := &x.EvictionTime + yym3065 := z.EncBinary() + _ = yym3065 + if false { + } else if z.HasExtensions() && z.EncExt(yy3064) { + } else if yym3065 { + z.EncBinaryMarshal(yy3064) + } else if !yym3065 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3064) + } else { + z.EncFallback(yy3064) + } + } + } + if yyr3057 || yy2arr3057 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3057[2] { + yym3067 := z.EncBinary() + _ = yym3067 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3057[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3068 := z.EncBinary() + _ = yym3068 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr3057 || yy2arr3057 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3057[3] { + yym3070 := z.EncBinary() + _ = yym3070 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3057[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3071 := z.EncBinary() + _ = yym3071 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr3057 || yy2arr3057 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PreferAvoidPodsEntry) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3072 := z.DecBinary() + _ = yym3072 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3073 := r.ContainerType() + if yyct3073 == codecSelferValueTypeMap1234 { + yyl3073 := r.ReadMapStart() + if yyl3073 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3073, d) + } + } else if yyct3073 == codecSelferValueTypeArray1234 { + yyl3073 := r.ReadArrayStart() + if yyl3073 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3073, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PreferAvoidPodsEntry) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3074Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3074Slc + var yyhl3074 bool = l >= 0 + for yyj3074 := 0; ; yyj3074++ { + if yyhl3074 { + if yyj3074 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3074Slc = r.DecodeBytes(yys3074Slc, true, true) + yys3074 := string(yys3074Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3074 { + case "podSignature": + if r.TryDecodeAsNil() { + x.PodSignature = PodSignature{} + } else { + yyv3075 := &x.PodSignature + yyv3075.CodecDecodeSelf(d) + } + case "evictionTime": + if r.TryDecodeAsNil() { + x.EvictionTime = pkg2_unversioned.Time{} + } else { + yyv3076 := &x.EvictionTime + yym3077 := z.DecBinary() + _ = yym3077 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3076) { + } else if yym3077 { + z.DecBinaryUnmarshal(yyv3076) + } else if !yym3077 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3076) + } else { + z.DecFallback(yyv3076, false) + } + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3074) + } // end switch yys3074 + } // end for yyj3074 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PreferAvoidPodsEntry) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3080 int + var yyb3080 bool + var yyhl3080 bool = l >= 0 + yyj3080++ + if yyhl3080 { + yyb3080 = yyj3080 > l + } else { + yyb3080 = r.CheckBreak() + } + if yyb3080 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodSignature = PodSignature{} + } else { + yyv3081 := &x.PodSignature + yyv3081.CodecDecodeSelf(d) + } + yyj3080++ + if yyhl3080 { + yyb3080 = yyj3080 > l + } else { + yyb3080 = r.CheckBreak() + } + if yyb3080 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.EvictionTime = pkg2_unversioned.Time{} + } else { + yyv3082 := &x.EvictionTime + yym3083 := z.DecBinary() + _ = yym3083 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3082) { + } else if yym3083 { + z.DecBinaryUnmarshal(yyv3082) + } else if !yym3083 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3082) + } else { + z.DecFallback(yyv3082, false) + } + } + yyj3080++ + if yyhl3080 { + yyb3080 = yyj3080 > l + } else { + yyb3080 = r.CheckBreak() + } + if yyb3080 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj3080++ + if yyhl3080 { + yyb3080 = yyj3080 > l + } else { + yyb3080 = r.CheckBreak() + } + if yyb3080 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj3080++ + if yyhl3080 { + yyb3080 = yyj3080 > l + } else { + yyb3080 = r.CheckBreak() + } + if yyb3080 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3080-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodSignature) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3086 := z.EncBinary() + _ = yym3086 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3087 := !z.EncBinary() + yy2arr3087 := z.EncBasicHandle().StructToArray + var yyq3087 [1]bool + _, _, _ = yysep3087, yyq3087, yy2arr3087 + const yyr3087 bool = false + yyq3087[0] = x.PodController != nil + var yynn3087 int + if yyr3087 || yy2arr3087 { + r.EncodeArrayStart(1) + } else { + yynn3087 = 0 + for _, b := range yyq3087 { + if b { + yynn3087++ + } + } + r.EncodeMapStart(yynn3087) + yynn3087 = 0 + } + if yyr3087 || yy2arr3087 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3087[0] { + if x.PodController == nil { + r.EncodeNil() + } else { + x.PodController.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3087[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podController")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PodController == nil { + r.EncodeNil() + } else { + x.PodController.CodecEncodeSelf(e) + } + } + } + if yyr3087 || yy2arr3087 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSignature) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3089 := z.DecBinary() + _ = yym3089 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3090 := r.ContainerType() + if yyct3090 == codecSelferValueTypeMap1234 { + yyl3090 := r.ReadMapStart() + if yyl3090 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3090, d) + } + } else if yyct3090 == codecSelferValueTypeArray1234 { + yyl3090 := r.ReadArrayStart() + if yyl3090 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3090, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSignature) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3091Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3091Slc + var yyhl3091 bool = l >= 0 + for yyj3091 := 0; ; yyj3091++ { + if yyhl3091 { + if yyj3091 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3091Slc = r.DecodeBytes(yys3091Slc, true, true) + yys3091 := string(yys3091Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3091 { + case "podController": + if r.TryDecodeAsNil() { + if x.PodController != nil { + x.PodController = nil + } + } else { + if x.PodController == nil { + x.PodController = new(OwnerReference) + } + x.PodController.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3091) + } // end switch yys3091 + } // end for yyj3091 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSignature) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3093 int + var yyb3093 bool + var yyhl3093 bool = l >= 0 + yyj3093++ + if yyhl3093 { + yyb3093 = yyj3093 > l + } else { + yyb3093 = r.CheckBreak() + } + if yyb3093 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PodController != nil { + x.PodController = nil + } + } else { + if x.PodController == nil { + x.PodController = new(OwnerReference) + } + x.PodController.CodecDecodeSelf(d) + } + for { + yyj3093++ + if yyhl3093 { + yyb3093 = yyj3093 > l + } else { + yyb3093 = r.CheckBreak() + } + if yyb3093 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3093-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ContainerImage) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3095 := z.EncBinary() + _ = yym3095 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3096 := !z.EncBinary() + yy2arr3096 := z.EncBasicHandle().StructToArray + var yyq3096 [2]bool + _, _, _ = yysep3096, yyq3096, yy2arr3096 + const yyr3096 bool = false + yyq3096[1] = x.SizeBytes != 0 + var yynn3096 int + if yyr3096 || yy2arr3096 { + r.EncodeArrayStart(2) + } else { + yynn3096 = 1 + for _, b := range yyq3096 { + if b { + yynn3096++ + } + } + r.EncodeMapStart(yynn3096) + yynn3096 = 0 + } + if yyr3096 || yy2arr3096 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Names == nil { + r.EncodeNil() + } else { + yym3098 := z.EncBinary() + _ = yym3098 + if false { + } else { + z.F.EncSliceStringV(x.Names, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("names")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Names == nil { + r.EncodeNil() + } else { + yym3099 := z.EncBinary() + _ = yym3099 + if false { + } else { + z.F.EncSliceStringV(x.Names, false, e) + } + } + } + if yyr3096 || yy2arr3096 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3096[1] { + yym3101 := z.EncBinary() + _ = yym3101 + if false { + } else { + r.EncodeInt(int64(x.SizeBytes)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq3096[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("sizeBytes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3102 := z.EncBinary() + _ = yym3102 + if false { + } else { + r.EncodeInt(int64(x.SizeBytes)) + } + } + } + if yyr3096 || yy2arr3096 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ContainerImage) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3103 := z.DecBinary() + _ = yym3103 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3104 := r.ContainerType() + if yyct3104 == codecSelferValueTypeMap1234 { + yyl3104 := r.ReadMapStart() + if yyl3104 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3104, d) + } + } else if yyct3104 == codecSelferValueTypeArray1234 { + yyl3104 := r.ReadArrayStart() + if yyl3104 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3104, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ContainerImage) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3105Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3105Slc + var yyhl3105 bool = l >= 0 + for yyj3105 := 0; ; yyj3105++ { + if yyhl3105 { + if yyj3105 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3105Slc = r.DecodeBytes(yys3105Slc, true, true) + yys3105 := string(yys3105Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3105 { + case "names": + if r.TryDecodeAsNil() { + x.Names = nil + } else { + yyv3106 := &x.Names + yym3107 := z.DecBinary() + _ = yym3107 + if false { + } else { + z.F.DecSliceStringX(yyv3106, false, d) + } + } + case "sizeBytes": + if r.TryDecodeAsNil() { + x.SizeBytes = 0 + } else { + x.SizeBytes = int64(r.DecodeInt(64)) + } + default: + z.DecStructFieldNotFound(-1, yys3105) + } // end switch yys3105 + } // end for yyj3105 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ContainerImage) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3109 int + var yyb3109 bool + var yyhl3109 bool = l >= 0 + yyj3109++ + if yyhl3109 { + yyb3109 = yyj3109 > l + } else { + yyb3109 = r.CheckBreak() + } + if yyb3109 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Names = nil + } else { + yyv3110 := &x.Names + yym3111 := z.DecBinary() + _ = yym3111 + if false { + } else { + z.F.DecSliceStringX(yyv3110, false, d) + } + } + yyj3109++ + if yyhl3109 { + yyb3109 = yyj3109 > l + } else { + yyb3109 = r.CheckBreak() + } + if yyb3109 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SizeBytes = 0 + } else { + x.SizeBytes = int64(r.DecodeInt(64)) + } + for { + yyj3109++ + if yyhl3109 { + yyb3109 = yyj3109 > l + } else { + yyb3109 = r.CheckBreak() + } + if yyb3109 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3109-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x NodePhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3113 := z.EncBinary() + _ = yym3113 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NodePhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3114 := z.DecBinary() + _ = yym3114 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x NodeConditionType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3115 := z.EncBinary() + _ = yym3115 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NodeConditionType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3116 := z.DecBinary() + _ = yym3116 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *NodeCondition) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3117 := z.EncBinary() + _ = yym3117 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3118 := !z.EncBinary() + yy2arr3118 := z.EncBasicHandle().StructToArray + var yyq3118 [6]bool + _, _, _ = yysep3118, yyq3118, yy2arr3118 + const yyr3118 bool = false + yyq3118[2] = true + yyq3118[3] = true + yyq3118[4] = x.Reason != "" + yyq3118[5] = x.Message != "" + var yynn3118 int + if yyr3118 || yy2arr3118 { + r.EncodeArrayStart(6) + } else { + yynn3118 = 2 + for _, b := range yyq3118 { + if b { + yynn3118++ + } + } + r.EncodeMapStart(yynn3118) + yynn3118 = 0 + } + if yyr3118 || yy2arr3118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr3118 || yy2arr3118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Status.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Status.CodecEncodeSelf(e) + } + if yyr3118 || yy2arr3118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3118[2] { + yy3122 := &x.LastHeartbeatTime + yym3123 := z.EncBinary() + _ = yym3123 + if false { + } else if z.HasExtensions() && z.EncExt(yy3122) { + } else if yym3123 { + z.EncBinaryMarshal(yy3122) + } else if !yym3123 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3122) + } else { + z.EncFallback(yy3122) + } + } else { + r.EncodeNil() + } + } else { + if yyq3118[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastHeartbeatTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3124 := &x.LastHeartbeatTime + yym3125 := z.EncBinary() + _ = yym3125 + if false { + } else if z.HasExtensions() && z.EncExt(yy3124) { + } else if yym3125 { + z.EncBinaryMarshal(yy3124) + } else if !yym3125 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3124) + } else { + z.EncFallback(yy3124) + } + } + } + if yyr3118 || yy2arr3118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3118[3] { + yy3127 := &x.LastTransitionTime + yym3128 := z.EncBinary() + _ = yym3128 + if false { + } else if z.HasExtensions() && z.EncExt(yy3127) { + } else if yym3128 { + z.EncBinaryMarshal(yy3127) + } else if !yym3128 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3127) + } else { + z.EncFallback(yy3127) + } + } else { + r.EncodeNil() + } + } else { + if yyq3118[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastTransitionTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3129 := &x.LastTransitionTime + yym3130 := z.EncBinary() + _ = yym3130 + if false { + } else if z.HasExtensions() && z.EncExt(yy3129) { + } else if yym3130 { + z.EncBinaryMarshal(yy3129) + } else if !yym3130 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3129) + } else { + z.EncFallback(yy3129) + } + } + } + if yyr3118 || yy2arr3118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3118[4] { + yym3132 := z.EncBinary() + _ = yym3132 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3118[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3133 := z.EncBinary() + _ = yym3133 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr3118 || yy2arr3118 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3118[5] { + yym3135 := z.EncBinary() + _ = yym3135 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3118[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3136 := z.EncBinary() + _ = yym3136 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr3118 || yy2arr3118 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeCondition) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3137 := z.DecBinary() + _ = yym3137 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3138 := r.ContainerType() + if yyct3138 == codecSelferValueTypeMap1234 { + yyl3138 := r.ReadMapStart() + if yyl3138 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3138, d) + } + } else if yyct3138 == codecSelferValueTypeArray1234 { + yyl3138 := r.ReadArrayStart() + if yyl3138 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3138, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeCondition) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3139Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3139Slc + var yyhl3139 bool = l >= 0 + for yyj3139 := 0; ; yyj3139++ { + if yyhl3139 { + if yyj3139 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3139Slc = r.DecodeBytes(yys3139Slc, true, true) + yys3139 := string(yys3139Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3139 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = NodeConditionType(r.DecodeString()) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + case "lastHeartbeatTime": + if r.TryDecodeAsNil() { + x.LastHeartbeatTime = pkg2_unversioned.Time{} + } else { + yyv3142 := &x.LastHeartbeatTime + yym3143 := z.DecBinary() + _ = yym3143 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3142) { + } else if yym3143 { + z.DecBinaryUnmarshal(yyv3142) + } else if !yym3143 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3142) + } else { + z.DecFallback(yyv3142, false) + } + } + case "lastTransitionTime": + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg2_unversioned.Time{} + } else { + yyv3144 := &x.LastTransitionTime + yym3145 := z.DecBinary() + _ = yym3145 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3144) { + } else if yym3145 { + z.DecBinaryUnmarshal(yyv3144) + } else if !yym3145 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3144) + } else { + z.DecFallback(yyv3144, false) + } + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3139) + } // end switch yys3139 + } // end for yyj3139 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeCondition) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3148 int + var yyb3148 bool + var yyhl3148 bool = l >= 0 + yyj3148++ + if yyhl3148 { + yyb3148 = yyj3148 > l + } else { + yyb3148 = r.CheckBreak() + } + if yyb3148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = NodeConditionType(r.DecodeString()) + } + yyj3148++ + if yyhl3148 { + yyb3148 = yyj3148 > l + } else { + yyb3148 = r.CheckBreak() + } + if yyb3148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + yyj3148++ + if yyhl3148 { + yyb3148 = yyj3148 > l + } else { + yyb3148 = r.CheckBreak() + } + if yyb3148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastHeartbeatTime = pkg2_unversioned.Time{} + } else { + yyv3151 := &x.LastHeartbeatTime + yym3152 := z.DecBinary() + _ = yym3152 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3151) { + } else if yym3152 { + z.DecBinaryUnmarshal(yyv3151) + } else if !yym3152 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3151) + } else { + z.DecFallback(yyv3151, false) + } + } + yyj3148++ + if yyhl3148 { + yyb3148 = yyj3148 > l + } else { + yyb3148 = r.CheckBreak() + } + if yyb3148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg2_unversioned.Time{} + } else { + yyv3153 := &x.LastTransitionTime + yym3154 := z.DecBinary() + _ = yym3154 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3153) { + } else if yym3154 { + z.DecBinaryUnmarshal(yyv3153) + } else if !yym3154 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3153) + } else { + z.DecFallback(yyv3153, false) + } + } + yyj3148++ + if yyhl3148 { + yyb3148 = yyj3148 > l + } else { + yyb3148 = r.CheckBreak() + } + if yyb3148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj3148++ + if yyhl3148 { + yyb3148 = yyj3148 > l + } else { + yyb3148 = r.CheckBreak() + } + if yyb3148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj3148++ + if yyhl3148 { + yyb3148 = yyj3148 > l + } else { + yyb3148 = r.CheckBreak() + } + if yyb3148 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3148-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x NodeAddressType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3157 := z.EncBinary() + _ = yym3157 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NodeAddressType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3158 := z.DecBinary() + _ = yym3158 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *NodeAddress) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3159 := z.EncBinary() + _ = yym3159 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3160 := !z.EncBinary() + yy2arr3160 := z.EncBasicHandle().StructToArray + var yyq3160 [2]bool + _, _, _ = yysep3160, yyq3160, yy2arr3160 + const yyr3160 bool = false + var yynn3160 int + if yyr3160 || yy2arr3160 { + r.EncodeArrayStart(2) + } else { + yynn3160 = 2 + for _, b := range yyq3160 { + if b { + yynn3160++ + } + } + r.EncodeMapStart(yynn3160) + yynn3160 = 0 + } + if yyr3160 || yy2arr3160 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr3160 || yy2arr3160 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3163 := z.EncBinary() + _ = yym3163 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Address)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("address")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3164 := z.EncBinary() + _ = yym3164 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Address)) + } + } + if yyr3160 || yy2arr3160 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeAddress) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3165 := z.DecBinary() + _ = yym3165 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3166 := r.ContainerType() + if yyct3166 == codecSelferValueTypeMap1234 { + yyl3166 := r.ReadMapStart() + if yyl3166 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3166, d) + } + } else if yyct3166 == codecSelferValueTypeArray1234 { + yyl3166 := r.ReadArrayStart() + if yyl3166 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3166, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeAddress) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3167Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3167Slc + var yyhl3167 bool = l >= 0 + for yyj3167 := 0; ; yyj3167++ { + if yyhl3167 { + if yyj3167 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3167Slc = r.DecodeBytes(yys3167Slc, true, true) + yys3167 := string(yys3167Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3167 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = NodeAddressType(r.DecodeString()) + } + case "address": + if r.TryDecodeAsNil() { + x.Address = "" + } else { + x.Address = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3167) + } // end switch yys3167 + } // end for yyj3167 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeAddress) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3170 int + var yyb3170 bool + var yyhl3170 bool = l >= 0 + yyj3170++ + if yyhl3170 { + yyb3170 = yyj3170 > l + } else { + yyb3170 = r.CheckBreak() + } + if yyb3170 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = NodeAddressType(r.DecodeString()) + } + yyj3170++ + if yyhl3170 { + yyb3170 = yyj3170 > l + } else { + yyb3170 = r.CheckBreak() + } + if yyb3170 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Address = "" + } else { + x.Address = string(r.DecodeString()) + } + for { + yyj3170++ + if yyhl3170 { + yyb3170 = yyj3170 > l + } else { + yyb3170 = r.CheckBreak() + } + if yyb3170 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3170-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ResourceName) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3173 := z.EncBinary() + _ = yym3173 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ResourceName) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3174 := z.DecBinary() + _ = yym3174 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x ResourceList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3175 := z.EncBinary() + _ = yym3175 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + h.encResourceList((ResourceList)(x), e) + } + } +} + +func (x *ResourceList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3176 := z.DecBinary() + _ = yym3176 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + h.decResourceList((*ResourceList)(x), d) + } +} + +func (x *Node) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3177 := z.EncBinary() + _ = yym3177 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3178 := !z.EncBinary() + yy2arr3178 := z.EncBasicHandle().StructToArray + var yyq3178 [5]bool + _, _, _ = yysep3178, yyq3178, yy2arr3178 + const yyr3178 bool = false + yyq3178[0] = x.Kind != "" + yyq3178[1] = x.APIVersion != "" + yyq3178[2] = true + yyq3178[3] = true + yyq3178[4] = true + var yynn3178 int + if yyr3178 || yy2arr3178 { + r.EncodeArrayStart(5) + } else { + yynn3178 = 0 + for _, b := range yyq3178 { + if b { + yynn3178++ + } + } + r.EncodeMapStart(yynn3178) + yynn3178 = 0 + } + if yyr3178 || yy2arr3178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3178[0] { + yym3180 := z.EncBinary() + _ = yym3180 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3178[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3181 := z.EncBinary() + _ = yym3181 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3178 || yy2arr3178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3178[1] { + yym3183 := z.EncBinary() + _ = yym3183 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3178[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3184 := z.EncBinary() + _ = yym3184 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3178 || yy2arr3178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3178[2] { + yy3186 := &x.ObjectMeta + yy3186.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3178[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3187 := &x.ObjectMeta + yy3187.CodecEncodeSelf(e) + } + } + if yyr3178 || yy2arr3178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3178[3] { + yy3189 := &x.Spec + yy3189.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3178[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3190 := &x.Spec + yy3190.CodecEncodeSelf(e) + } + } + if yyr3178 || yy2arr3178 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3178[4] { + yy3192 := &x.Status + yy3192.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3178[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3193 := &x.Status + yy3193.CodecEncodeSelf(e) + } + } + if yyr3178 || yy2arr3178 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Node) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3194 := z.DecBinary() + _ = yym3194 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3195 := r.ContainerType() + if yyct3195 == codecSelferValueTypeMap1234 { + yyl3195 := r.ReadMapStart() + if yyl3195 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3195, d) + } + } else if yyct3195 == codecSelferValueTypeArray1234 { + yyl3195 := r.ReadArrayStart() + if yyl3195 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3195, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Node) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3196Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3196Slc + var yyhl3196 bool = l >= 0 + for yyj3196 := 0; ; yyj3196++ { + if yyhl3196 { + if yyj3196 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3196Slc = r.DecodeBytes(yys3196Slc, true, true) + yys3196 := string(yys3196Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3196 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3199 := &x.ObjectMeta + yyv3199.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = NodeSpec{} + } else { + yyv3200 := &x.Spec + yyv3200.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = NodeStatus{} + } else { + yyv3201 := &x.Status + yyv3201.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3196) + } // end switch yys3196 + } // end for yyj3196 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Node) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3202 int + var yyb3202 bool + var yyhl3202 bool = l >= 0 + yyj3202++ + if yyhl3202 { + yyb3202 = yyj3202 > l + } else { + yyb3202 = r.CheckBreak() + } + if yyb3202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3202++ + if yyhl3202 { + yyb3202 = yyj3202 > l + } else { + yyb3202 = r.CheckBreak() + } + if yyb3202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3202++ + if yyhl3202 { + yyb3202 = yyj3202 > l + } else { + yyb3202 = r.CheckBreak() + } + if yyb3202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3205 := &x.ObjectMeta + yyv3205.CodecDecodeSelf(d) + } + yyj3202++ + if yyhl3202 { + yyb3202 = yyj3202 > l + } else { + yyb3202 = r.CheckBreak() + } + if yyb3202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = NodeSpec{} + } else { + yyv3206 := &x.Spec + yyv3206.CodecDecodeSelf(d) + } + yyj3202++ + if yyhl3202 { + yyb3202 = yyj3202 > l + } else { + yyb3202 = r.CheckBreak() + } + if yyb3202 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = NodeStatus{} + } else { + yyv3207 := &x.Status + yyv3207.CodecDecodeSelf(d) + } + for { + yyj3202++ + if yyhl3202 { + yyb3202 = yyj3202 > l + } else { + yyb3202 = r.CheckBreak() + } + if yyb3202 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3202-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3208 := z.EncBinary() + _ = yym3208 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3209 := !z.EncBinary() + yy2arr3209 := z.EncBasicHandle().StructToArray + var yyq3209 [4]bool + _, _, _ = yysep3209, yyq3209, yy2arr3209 + const yyr3209 bool = false + yyq3209[0] = x.Kind != "" + yyq3209[1] = x.APIVersion != "" + yyq3209[2] = true + var yynn3209 int + if yyr3209 || yy2arr3209 { + r.EncodeArrayStart(4) + } else { + yynn3209 = 1 + for _, b := range yyq3209 { + if b { + yynn3209++ + } + } + r.EncodeMapStart(yynn3209) + yynn3209 = 0 + } + if yyr3209 || yy2arr3209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3209[0] { + yym3211 := z.EncBinary() + _ = yym3211 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3209[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3212 := z.EncBinary() + _ = yym3212 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3209 || yy2arr3209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3209[1] { + yym3214 := z.EncBinary() + _ = yym3214 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3209[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3215 := z.EncBinary() + _ = yym3215 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3209 || yy2arr3209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3209[2] { + yy3217 := &x.ListMeta + yym3218 := z.EncBinary() + _ = yym3218 + if false { + } else if z.HasExtensions() && z.EncExt(yy3217) { + } else { + z.EncFallback(yy3217) + } + } else { + r.EncodeNil() + } + } else { + if yyq3209[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3219 := &x.ListMeta + yym3220 := z.EncBinary() + _ = yym3220 + if false { + } else if z.HasExtensions() && z.EncExt(yy3219) { + } else { + z.EncFallback(yy3219) + } + } + } + if yyr3209 || yy2arr3209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3222 := z.EncBinary() + _ = yym3222 + if false { + } else { + h.encSliceNode(([]Node)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3223 := z.EncBinary() + _ = yym3223 + if false { + } else { + h.encSliceNode(([]Node)(x.Items), e) + } + } + } + if yyr3209 || yy2arr3209 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3224 := z.DecBinary() + _ = yym3224 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3225 := r.ContainerType() + if yyct3225 == codecSelferValueTypeMap1234 { + yyl3225 := r.ReadMapStart() + if yyl3225 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3225, d) + } + } else if yyct3225 == codecSelferValueTypeArray1234 { + yyl3225 := r.ReadArrayStart() + if yyl3225 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3225, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3226Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3226Slc + var yyhl3226 bool = l >= 0 + for yyj3226 := 0; ; yyj3226++ { + if yyhl3226 { + if yyj3226 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3226Slc = r.DecodeBytes(yys3226Slc, true, true) + yys3226 := string(yys3226Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3226 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3229 := &x.ListMeta + yym3230 := z.DecBinary() + _ = yym3230 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3229) { + } else { + z.DecFallback(yyv3229, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3231 := &x.Items + yym3232 := z.DecBinary() + _ = yym3232 + if false { + } else { + h.decSliceNode((*[]Node)(yyv3231), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3226) + } // end switch yys3226 + } // end for yyj3226 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3233 int + var yyb3233 bool + var yyhl3233 bool = l >= 0 + yyj3233++ + if yyhl3233 { + yyb3233 = yyj3233 > l + } else { + yyb3233 = r.CheckBreak() + } + if yyb3233 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3233++ + if yyhl3233 { + yyb3233 = yyj3233 > l + } else { + yyb3233 = r.CheckBreak() + } + if yyb3233 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3233++ + if yyhl3233 { + yyb3233 = yyj3233 > l + } else { + yyb3233 = r.CheckBreak() + } + if yyb3233 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3236 := &x.ListMeta + yym3237 := z.DecBinary() + _ = yym3237 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3236) { + } else { + z.DecFallback(yyv3236, false) + } + } + yyj3233++ + if yyhl3233 { + yyb3233 = yyj3233 > l + } else { + yyb3233 = r.CheckBreak() + } + if yyb3233 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3238 := &x.Items + yym3239 := z.DecBinary() + _ = yym3239 + if false { + } else { + h.decSliceNode((*[]Node)(yyv3238), d) + } + } + for { + yyj3233++ + if yyhl3233 { + yyb3233 = yyj3233 > l + } else { + yyb3233 = r.CheckBreak() + } + if yyb3233 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3233-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x FinalizerName) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3240 := z.EncBinary() + _ = yym3240 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *FinalizerName) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3241 := z.DecBinary() + _ = yym3241 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *NamespaceSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3242 := z.EncBinary() + _ = yym3242 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3243 := !z.EncBinary() + yy2arr3243 := z.EncBasicHandle().StructToArray + var yyq3243 [1]bool + _, _, _ = yysep3243, yyq3243, yy2arr3243 + const yyr3243 bool = false + yyq3243[0] = len(x.Finalizers) != 0 + var yynn3243 int + if yyr3243 || yy2arr3243 { + r.EncodeArrayStart(1) + } else { + yynn3243 = 0 + for _, b := range yyq3243 { + if b { + yynn3243++ + } + } + r.EncodeMapStart(yynn3243) + yynn3243 = 0 + } + if yyr3243 || yy2arr3243 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3243[0] { + if x.Finalizers == nil { + r.EncodeNil() + } else { + yym3245 := z.EncBinary() + _ = yym3245 + if false { + } else { + h.encSliceFinalizerName(([]FinalizerName)(x.Finalizers), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3243[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("finalizers")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Finalizers == nil { + r.EncodeNil() + } else { + yym3246 := z.EncBinary() + _ = yym3246 + if false { + } else { + h.encSliceFinalizerName(([]FinalizerName)(x.Finalizers), e) + } + } + } + } + if yyr3243 || yy2arr3243 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NamespaceSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3247 := z.DecBinary() + _ = yym3247 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3248 := r.ContainerType() + if yyct3248 == codecSelferValueTypeMap1234 { + yyl3248 := r.ReadMapStart() + if yyl3248 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3248, d) + } + } else if yyct3248 == codecSelferValueTypeArray1234 { + yyl3248 := r.ReadArrayStart() + if yyl3248 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3248, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NamespaceSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3249Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3249Slc + var yyhl3249 bool = l >= 0 + for yyj3249 := 0; ; yyj3249++ { + if yyhl3249 { + if yyj3249 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3249Slc = r.DecodeBytes(yys3249Slc, true, true) + yys3249 := string(yys3249Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3249 { + case "finalizers": + if r.TryDecodeAsNil() { + x.Finalizers = nil + } else { + yyv3250 := &x.Finalizers + yym3251 := z.DecBinary() + _ = yym3251 + if false { + } else { + h.decSliceFinalizerName((*[]FinalizerName)(yyv3250), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3249) + } // end switch yys3249 + } // end for yyj3249 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NamespaceSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3252 int + var yyb3252 bool + var yyhl3252 bool = l >= 0 + yyj3252++ + if yyhl3252 { + yyb3252 = yyj3252 > l + } else { + yyb3252 = r.CheckBreak() + } + if yyb3252 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Finalizers = nil + } else { + yyv3253 := &x.Finalizers + yym3254 := z.DecBinary() + _ = yym3254 + if false { + } else { + h.decSliceFinalizerName((*[]FinalizerName)(yyv3253), d) + } + } + for { + yyj3252++ + if yyhl3252 { + yyb3252 = yyj3252 > l + } else { + yyb3252 = r.CheckBreak() + } + if yyb3252 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3252-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NamespaceStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3255 := z.EncBinary() + _ = yym3255 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3256 := !z.EncBinary() + yy2arr3256 := z.EncBasicHandle().StructToArray + var yyq3256 [1]bool + _, _, _ = yysep3256, yyq3256, yy2arr3256 + const yyr3256 bool = false + yyq3256[0] = x.Phase != "" + var yynn3256 int + if yyr3256 || yy2arr3256 { + r.EncodeArrayStart(1) + } else { + yynn3256 = 0 + for _, b := range yyq3256 { + if b { + yynn3256++ + } + } + r.EncodeMapStart(yynn3256) + yynn3256 = 0 + } + if yyr3256 || yy2arr3256 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3256[0] { + x.Phase.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3256[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("phase")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Phase.CodecEncodeSelf(e) + } + } + if yyr3256 || yy2arr3256 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NamespaceStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3258 := z.DecBinary() + _ = yym3258 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3259 := r.ContainerType() + if yyct3259 == codecSelferValueTypeMap1234 { + yyl3259 := r.ReadMapStart() + if yyl3259 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3259, d) + } + } else if yyct3259 == codecSelferValueTypeArray1234 { + yyl3259 := r.ReadArrayStart() + if yyl3259 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3259, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NamespaceStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3260Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3260Slc + var yyhl3260 bool = l >= 0 + for yyj3260 := 0; ; yyj3260++ { + if yyhl3260 { + if yyj3260 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3260Slc = r.DecodeBytes(yys3260Slc, true, true) + yys3260 := string(yys3260Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3260 { + case "phase": + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = NamespacePhase(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3260) + } // end switch yys3260 + } // end for yyj3260 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NamespaceStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3262 int + var yyb3262 bool + var yyhl3262 bool = l >= 0 + yyj3262++ + if yyhl3262 { + yyb3262 = yyj3262 > l + } else { + yyb3262 = r.CheckBreak() + } + if yyb3262 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Phase = "" + } else { + x.Phase = NamespacePhase(r.DecodeString()) + } + for { + yyj3262++ + if yyhl3262 { + yyb3262 = yyj3262 > l + } else { + yyb3262 = r.CheckBreak() + } + if yyb3262 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3262-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x NamespacePhase) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3264 := z.EncBinary() + _ = yym3264 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *NamespacePhase) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3265 := z.DecBinary() + _ = yym3265 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *Namespace) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3266 := z.EncBinary() + _ = yym3266 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3267 := !z.EncBinary() + yy2arr3267 := z.EncBasicHandle().StructToArray + var yyq3267 [5]bool + _, _, _ = yysep3267, yyq3267, yy2arr3267 + const yyr3267 bool = false + yyq3267[0] = x.Kind != "" + yyq3267[1] = x.APIVersion != "" + yyq3267[2] = true + yyq3267[3] = true + yyq3267[4] = true + var yynn3267 int + if yyr3267 || yy2arr3267 { + r.EncodeArrayStart(5) + } else { + yynn3267 = 0 + for _, b := range yyq3267 { + if b { + yynn3267++ + } + } + r.EncodeMapStart(yynn3267) + yynn3267 = 0 + } + if yyr3267 || yy2arr3267 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3267[0] { + yym3269 := z.EncBinary() + _ = yym3269 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3267[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3270 := z.EncBinary() + _ = yym3270 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3267 || yy2arr3267 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3267[1] { + yym3272 := z.EncBinary() + _ = yym3272 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3267[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3273 := z.EncBinary() + _ = yym3273 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3267 || yy2arr3267 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3267[2] { + yy3275 := &x.ObjectMeta + yy3275.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3267[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3276 := &x.ObjectMeta + yy3276.CodecEncodeSelf(e) + } + } + if yyr3267 || yy2arr3267 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3267[3] { + yy3278 := &x.Spec + yy3278.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3267[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3279 := &x.Spec + yy3279.CodecEncodeSelf(e) + } + } + if yyr3267 || yy2arr3267 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3267[4] { + yy3281 := &x.Status + yy3281.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3267[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3282 := &x.Status + yy3282.CodecEncodeSelf(e) + } + } + if yyr3267 || yy2arr3267 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Namespace) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3283 := z.DecBinary() + _ = yym3283 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3284 := r.ContainerType() + if yyct3284 == codecSelferValueTypeMap1234 { + yyl3284 := r.ReadMapStart() + if yyl3284 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3284, d) + } + } else if yyct3284 == codecSelferValueTypeArray1234 { + yyl3284 := r.ReadArrayStart() + if yyl3284 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3284, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Namespace) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3285Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3285Slc + var yyhl3285 bool = l >= 0 + for yyj3285 := 0; ; yyj3285++ { + if yyhl3285 { + if yyj3285 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3285Slc = r.DecodeBytes(yys3285Slc, true, true) + yys3285 := string(yys3285Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3285 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3288 := &x.ObjectMeta + yyv3288.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = NamespaceSpec{} + } else { + yyv3289 := &x.Spec + yyv3289.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = NamespaceStatus{} + } else { + yyv3290 := &x.Status + yyv3290.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3285) + } // end switch yys3285 + } // end for yyj3285 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Namespace) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3291 int + var yyb3291 bool + var yyhl3291 bool = l >= 0 + yyj3291++ + if yyhl3291 { + yyb3291 = yyj3291 > l + } else { + yyb3291 = r.CheckBreak() + } + if yyb3291 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3291++ + if yyhl3291 { + yyb3291 = yyj3291 > l + } else { + yyb3291 = r.CheckBreak() + } + if yyb3291 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3291++ + if yyhl3291 { + yyb3291 = yyj3291 > l + } else { + yyb3291 = r.CheckBreak() + } + if yyb3291 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3294 := &x.ObjectMeta + yyv3294.CodecDecodeSelf(d) + } + yyj3291++ + if yyhl3291 { + yyb3291 = yyj3291 > l + } else { + yyb3291 = r.CheckBreak() + } + if yyb3291 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = NamespaceSpec{} + } else { + yyv3295 := &x.Spec + yyv3295.CodecDecodeSelf(d) + } + yyj3291++ + if yyhl3291 { + yyb3291 = yyj3291 > l + } else { + yyb3291 = r.CheckBreak() + } + if yyb3291 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = NamespaceStatus{} + } else { + yyv3296 := &x.Status + yyv3296.CodecDecodeSelf(d) + } + for { + yyj3291++ + if yyhl3291 { + yyb3291 = yyj3291 > l + } else { + yyb3291 = r.CheckBreak() + } + if yyb3291 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3291-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NamespaceList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3297 := z.EncBinary() + _ = yym3297 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3298 := !z.EncBinary() + yy2arr3298 := z.EncBasicHandle().StructToArray + var yyq3298 [4]bool + _, _, _ = yysep3298, yyq3298, yy2arr3298 + const yyr3298 bool = false + yyq3298[0] = x.Kind != "" + yyq3298[1] = x.APIVersion != "" + yyq3298[2] = true + var yynn3298 int + if yyr3298 || yy2arr3298 { + r.EncodeArrayStart(4) + } else { + yynn3298 = 1 + for _, b := range yyq3298 { + if b { + yynn3298++ + } + } + r.EncodeMapStart(yynn3298) + yynn3298 = 0 + } + if yyr3298 || yy2arr3298 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3298[0] { + yym3300 := z.EncBinary() + _ = yym3300 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3298[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3301 := z.EncBinary() + _ = yym3301 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3298 || yy2arr3298 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3298[1] { + yym3303 := z.EncBinary() + _ = yym3303 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3298[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3304 := z.EncBinary() + _ = yym3304 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3298 || yy2arr3298 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3298[2] { + yy3306 := &x.ListMeta + yym3307 := z.EncBinary() + _ = yym3307 + if false { + } else if z.HasExtensions() && z.EncExt(yy3306) { + } else { + z.EncFallback(yy3306) + } + } else { + r.EncodeNil() + } + } else { + if yyq3298[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3308 := &x.ListMeta + yym3309 := z.EncBinary() + _ = yym3309 + if false { + } else if z.HasExtensions() && z.EncExt(yy3308) { + } else { + z.EncFallback(yy3308) + } + } + } + if yyr3298 || yy2arr3298 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3311 := z.EncBinary() + _ = yym3311 + if false { + } else { + h.encSliceNamespace(([]Namespace)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3312 := z.EncBinary() + _ = yym3312 + if false { + } else { + h.encSliceNamespace(([]Namespace)(x.Items), e) + } + } + } + if yyr3298 || yy2arr3298 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NamespaceList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3313 := z.DecBinary() + _ = yym3313 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3314 := r.ContainerType() + if yyct3314 == codecSelferValueTypeMap1234 { + yyl3314 := r.ReadMapStart() + if yyl3314 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3314, d) + } + } else if yyct3314 == codecSelferValueTypeArray1234 { + yyl3314 := r.ReadArrayStart() + if yyl3314 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3314, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NamespaceList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3315Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3315Slc + var yyhl3315 bool = l >= 0 + for yyj3315 := 0; ; yyj3315++ { + if yyhl3315 { + if yyj3315 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3315Slc = r.DecodeBytes(yys3315Slc, true, true) + yys3315 := string(yys3315Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3315 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3318 := &x.ListMeta + yym3319 := z.DecBinary() + _ = yym3319 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3318) { + } else { + z.DecFallback(yyv3318, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3320 := &x.Items + yym3321 := z.DecBinary() + _ = yym3321 + if false { + } else { + h.decSliceNamespace((*[]Namespace)(yyv3320), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3315) + } // end switch yys3315 + } // end for yyj3315 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NamespaceList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3322 int + var yyb3322 bool + var yyhl3322 bool = l >= 0 + yyj3322++ + if yyhl3322 { + yyb3322 = yyj3322 > l + } else { + yyb3322 = r.CheckBreak() + } + if yyb3322 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3322++ + if yyhl3322 { + yyb3322 = yyj3322 > l + } else { + yyb3322 = r.CheckBreak() + } + if yyb3322 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3322++ + if yyhl3322 { + yyb3322 = yyj3322 > l + } else { + yyb3322 = r.CheckBreak() + } + if yyb3322 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3325 := &x.ListMeta + yym3326 := z.DecBinary() + _ = yym3326 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3325) { + } else { + z.DecFallback(yyv3325, false) + } + } + yyj3322++ + if yyhl3322 { + yyb3322 = yyj3322 > l + } else { + yyb3322 = r.CheckBreak() + } + if yyb3322 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3327 := &x.Items + yym3328 := z.DecBinary() + _ = yym3328 + if false { + } else { + h.decSliceNamespace((*[]Namespace)(yyv3327), d) + } + } + for { + yyj3322++ + if yyhl3322 { + yyb3322 = yyj3322 > l + } else { + yyb3322 = r.CheckBreak() + } + if yyb3322 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3322-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Binding) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3329 := z.EncBinary() + _ = yym3329 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3330 := !z.EncBinary() + yy2arr3330 := z.EncBasicHandle().StructToArray + var yyq3330 [4]bool + _, _, _ = yysep3330, yyq3330, yy2arr3330 + const yyr3330 bool = false + yyq3330[0] = x.Kind != "" + yyq3330[1] = x.APIVersion != "" + yyq3330[2] = true + var yynn3330 int + if yyr3330 || yy2arr3330 { + r.EncodeArrayStart(4) + } else { + yynn3330 = 1 + for _, b := range yyq3330 { + if b { + yynn3330++ + } + } + r.EncodeMapStart(yynn3330) + yynn3330 = 0 + } + if yyr3330 || yy2arr3330 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3330[0] { + yym3332 := z.EncBinary() + _ = yym3332 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3330[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3333 := z.EncBinary() + _ = yym3333 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3330 || yy2arr3330 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3330[1] { + yym3335 := z.EncBinary() + _ = yym3335 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3330[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3336 := z.EncBinary() + _ = yym3336 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3330 || yy2arr3330 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3330[2] { + yy3338 := &x.ObjectMeta + yy3338.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3330[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3339 := &x.ObjectMeta + yy3339.CodecEncodeSelf(e) + } + } + if yyr3330 || yy2arr3330 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy3341 := &x.Target + yy3341.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("target")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3342 := &x.Target + yy3342.CodecEncodeSelf(e) + } + if yyr3330 || yy2arr3330 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Binding) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3343 := z.DecBinary() + _ = yym3343 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3344 := r.ContainerType() + if yyct3344 == codecSelferValueTypeMap1234 { + yyl3344 := r.ReadMapStart() + if yyl3344 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3344, d) + } + } else if yyct3344 == codecSelferValueTypeArray1234 { + yyl3344 := r.ReadArrayStart() + if yyl3344 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3344, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Binding) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3345Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3345Slc + var yyhl3345 bool = l >= 0 + for yyj3345 := 0; ; yyj3345++ { + if yyhl3345 { + if yyj3345 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3345Slc = r.DecodeBytes(yys3345Slc, true, true) + yys3345 := string(yys3345Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3345 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3348 := &x.ObjectMeta + yyv3348.CodecDecodeSelf(d) + } + case "target": + if r.TryDecodeAsNil() { + x.Target = ObjectReference{} + } else { + yyv3349 := &x.Target + yyv3349.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3345) + } // end switch yys3345 + } // end for yyj3345 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Binding) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3350 int + var yyb3350 bool + var yyhl3350 bool = l >= 0 + yyj3350++ + if yyhl3350 { + yyb3350 = yyj3350 > l + } else { + yyb3350 = r.CheckBreak() + } + if yyb3350 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3350++ + if yyhl3350 { + yyb3350 = yyj3350 > l + } else { + yyb3350 = r.CheckBreak() + } + if yyb3350 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3350++ + if yyhl3350 { + yyb3350 = yyj3350 > l + } else { + yyb3350 = r.CheckBreak() + } + if yyb3350 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3353 := &x.ObjectMeta + yyv3353.CodecDecodeSelf(d) + } + yyj3350++ + if yyhl3350 { + yyb3350 = yyj3350 > l + } else { + yyb3350 = r.CheckBreak() + } + if yyb3350 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Target = ObjectReference{} + } else { + yyv3354 := &x.Target + yyv3354.CodecDecodeSelf(d) + } + for { + yyj3350++ + if yyhl3350 { + yyb3350 = yyj3350 > l + } else { + yyb3350 = r.CheckBreak() + } + if yyb3350 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3350-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Preconditions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3355 := z.EncBinary() + _ = yym3355 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3356 := !z.EncBinary() + yy2arr3356 := z.EncBasicHandle().StructToArray + var yyq3356 [1]bool + _, _, _ = yysep3356, yyq3356, yy2arr3356 + const yyr3356 bool = false + yyq3356[0] = x.UID != nil + var yynn3356 int + if yyr3356 || yy2arr3356 { + r.EncodeArrayStart(1) + } else { + yynn3356 = 0 + for _, b := range yyq3356 { + if b { + yynn3356++ + } + } + r.EncodeMapStart(yynn3356) + yynn3356 = 0 + } + if yyr3356 || yy2arr3356 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3356[0] { + if x.UID == nil { + r.EncodeNil() + } else { + yy3358 := *x.UID + yym3359 := z.EncBinary() + _ = yym3359 + if false { + } else if z.HasExtensions() && z.EncExt(yy3358) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy3358)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3356[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("uid")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.UID == nil { + r.EncodeNil() + } else { + yy3360 := *x.UID + yym3361 := z.EncBinary() + _ = yym3361 + if false { + } else if z.HasExtensions() && z.EncExt(yy3360) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy3360)) + } + } + } + } + if yyr3356 || yy2arr3356 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Preconditions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3362 := z.DecBinary() + _ = yym3362 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3363 := r.ContainerType() + if yyct3363 == codecSelferValueTypeMap1234 { + yyl3363 := r.ReadMapStart() + if yyl3363 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3363, d) + } + } else if yyct3363 == codecSelferValueTypeArray1234 { + yyl3363 := r.ReadArrayStart() + if yyl3363 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3363, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Preconditions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3364Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3364Slc + var yyhl3364 bool = l >= 0 + for yyj3364 := 0; ; yyj3364++ { + if yyhl3364 { + if yyj3364 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3364Slc = r.DecodeBytes(yys3364Slc, true, true) + yys3364 := string(yys3364Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3364 { + case "uid": + if r.TryDecodeAsNil() { + if x.UID != nil { + x.UID = nil + } + } else { + if x.UID == nil { + x.UID = new(pkg1_types.UID) + } + yym3366 := z.DecBinary() + _ = yym3366 + if false { + } else if z.HasExtensions() && z.DecExt(x.UID) { + } else { + *((*string)(x.UID)) = r.DecodeString() + } + } + default: + z.DecStructFieldNotFound(-1, yys3364) + } // end switch yys3364 + } // end for yyj3364 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Preconditions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3367 int + var yyb3367 bool + var yyhl3367 bool = l >= 0 + yyj3367++ + if yyhl3367 { + yyb3367 = yyj3367 > l + } else { + yyb3367 = r.CheckBreak() + } + if yyb3367 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.UID != nil { + x.UID = nil + } + } else { + if x.UID == nil { + x.UID = new(pkg1_types.UID) + } + yym3369 := z.DecBinary() + _ = yym3369 + if false { + } else if z.HasExtensions() && z.DecExt(x.UID) { + } else { + *((*string)(x.UID)) = r.DecodeString() + } + } + for { + yyj3367++ + if yyhl3367 { + yyb3367 = yyj3367 > l + } else { + yyb3367 = r.CheckBreak() + } + if yyb3367 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3367-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DeleteOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3370 := z.EncBinary() + _ = yym3370 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3371 := !z.EncBinary() + yy2arr3371 := z.EncBasicHandle().StructToArray + var yyq3371 [5]bool + _, _, _ = yysep3371, yyq3371, yy2arr3371 + const yyr3371 bool = false + yyq3371[0] = x.Kind != "" + yyq3371[1] = x.APIVersion != "" + yyq3371[2] = x.GracePeriodSeconds != nil + yyq3371[3] = x.Preconditions != nil + yyq3371[4] = x.OrphanDependents != nil + var yynn3371 int + if yyr3371 || yy2arr3371 { + r.EncodeArrayStart(5) + } else { + yynn3371 = 0 + for _, b := range yyq3371 { + if b { + yynn3371++ + } + } + r.EncodeMapStart(yynn3371) + yynn3371 = 0 + } + if yyr3371 || yy2arr3371 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3371[0] { + yym3373 := z.EncBinary() + _ = yym3373 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3371[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3374 := z.EncBinary() + _ = yym3374 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3371 || yy2arr3371 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3371[1] { + yym3376 := z.EncBinary() + _ = yym3376 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3371[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3377 := z.EncBinary() + _ = yym3377 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3371 || yy2arr3371 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3371[2] { + if x.GracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy3379 := *x.GracePeriodSeconds + yym3380 := z.EncBinary() + _ = yym3380 + if false { + } else { + r.EncodeInt(int64(yy3379)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3371[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("gracePeriodSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.GracePeriodSeconds == nil { + r.EncodeNil() + } else { + yy3381 := *x.GracePeriodSeconds + yym3382 := z.EncBinary() + _ = yym3382 + if false { + } else { + r.EncodeInt(int64(yy3381)) + } + } + } + } + if yyr3371 || yy2arr3371 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3371[3] { + if x.Preconditions == nil { + r.EncodeNil() + } else { + x.Preconditions.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3371[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("preconditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Preconditions == nil { + r.EncodeNil() + } else { + x.Preconditions.CodecEncodeSelf(e) + } + } + } + if yyr3371 || yy2arr3371 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3371[4] { + if x.OrphanDependents == nil { + r.EncodeNil() + } else { + yy3385 := *x.OrphanDependents + yym3386 := z.EncBinary() + _ = yym3386 + if false { + } else { + r.EncodeBool(bool(yy3385)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3371[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("orphanDependents")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.OrphanDependents == nil { + r.EncodeNil() + } else { + yy3387 := *x.OrphanDependents + yym3388 := z.EncBinary() + _ = yym3388 + if false { + } else { + r.EncodeBool(bool(yy3387)) + } + } + } + } + if yyr3371 || yy2arr3371 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DeleteOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3389 := z.DecBinary() + _ = yym3389 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3390 := r.ContainerType() + if yyct3390 == codecSelferValueTypeMap1234 { + yyl3390 := r.ReadMapStart() + if yyl3390 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3390, d) + } + } else if yyct3390 == codecSelferValueTypeArray1234 { + yyl3390 := r.ReadArrayStart() + if yyl3390 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3390, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DeleteOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3391Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3391Slc + var yyhl3391 bool = l >= 0 + for yyj3391 := 0; ; yyj3391++ { + if yyhl3391 { + if yyj3391 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3391Slc = r.DecodeBytes(yys3391Slc, true, true) + yys3391 := string(yys3391Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3391 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "gracePeriodSeconds": + if r.TryDecodeAsNil() { + if x.GracePeriodSeconds != nil { + x.GracePeriodSeconds = nil + } + } else { + if x.GracePeriodSeconds == nil { + x.GracePeriodSeconds = new(int64) + } + yym3395 := z.DecBinary() + _ = yym3395 + if false { + } else { + *((*int64)(x.GracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + case "preconditions": + if r.TryDecodeAsNil() { + if x.Preconditions != nil { + x.Preconditions = nil + } + } else { + if x.Preconditions == nil { + x.Preconditions = new(Preconditions) + } + x.Preconditions.CodecDecodeSelf(d) + } + case "orphanDependents": + if r.TryDecodeAsNil() { + if x.OrphanDependents != nil { + x.OrphanDependents = nil + } + } else { + if x.OrphanDependents == nil { + x.OrphanDependents = new(bool) + } + yym3398 := z.DecBinary() + _ = yym3398 + if false { + } else { + *((*bool)(x.OrphanDependents)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys3391) + } // end switch yys3391 + } // end for yyj3391 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DeleteOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3399 int + var yyb3399 bool + var yyhl3399 bool = l >= 0 + yyj3399++ + if yyhl3399 { + yyb3399 = yyj3399 > l + } else { + yyb3399 = r.CheckBreak() + } + if yyb3399 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3399++ + if yyhl3399 { + yyb3399 = yyj3399 > l + } else { + yyb3399 = r.CheckBreak() + } + if yyb3399 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3399++ + if yyhl3399 { + yyb3399 = yyj3399 > l + } else { + yyb3399 = r.CheckBreak() + } + if yyb3399 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.GracePeriodSeconds != nil { + x.GracePeriodSeconds = nil + } + } else { + if x.GracePeriodSeconds == nil { + x.GracePeriodSeconds = new(int64) + } + yym3403 := z.DecBinary() + _ = yym3403 + if false { + } else { + *((*int64)(x.GracePeriodSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj3399++ + if yyhl3399 { + yyb3399 = yyj3399 > l + } else { + yyb3399 = r.CheckBreak() + } + if yyb3399 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Preconditions != nil { + x.Preconditions = nil + } + } else { + if x.Preconditions == nil { + x.Preconditions = new(Preconditions) + } + x.Preconditions.CodecDecodeSelf(d) + } + yyj3399++ + if yyhl3399 { + yyb3399 = yyj3399 > l + } else { + yyb3399 = r.CheckBreak() + } + if yyb3399 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.OrphanDependents != nil { + x.OrphanDependents = nil + } + } else { + if x.OrphanDependents == nil { + x.OrphanDependents = new(bool) + } + yym3406 := z.DecBinary() + _ = yym3406 + if false { + } else { + *((*bool)(x.OrphanDependents)) = r.DecodeBool() + } + } + for { + yyj3399++ + if yyhl3399 { + yyb3399 = yyj3399 > l + } else { + yyb3399 = r.CheckBreak() + } + if yyb3399 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3399-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ExportOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3407 := z.EncBinary() + _ = yym3407 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3408 := !z.EncBinary() + yy2arr3408 := z.EncBasicHandle().StructToArray + var yyq3408 [4]bool + _, _, _ = yysep3408, yyq3408, yy2arr3408 + const yyr3408 bool = false + yyq3408[0] = x.Kind != "" + yyq3408[1] = x.APIVersion != "" + var yynn3408 int + if yyr3408 || yy2arr3408 { + r.EncodeArrayStart(4) + } else { + yynn3408 = 2 + for _, b := range yyq3408 { + if b { + yynn3408++ + } + } + r.EncodeMapStart(yynn3408) + yynn3408 = 0 + } + if yyr3408 || yy2arr3408 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3408[0] { + yym3410 := z.EncBinary() + _ = yym3410 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3408[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3411 := z.EncBinary() + _ = yym3411 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3408 || yy2arr3408 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3408[1] { + yym3413 := z.EncBinary() + _ = yym3413 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3408[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3414 := z.EncBinary() + _ = yym3414 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3408 || yy2arr3408 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3416 := z.EncBinary() + _ = yym3416 + if false { + } else { + r.EncodeBool(bool(x.Export)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("export")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3417 := z.EncBinary() + _ = yym3417 + if false { + } else { + r.EncodeBool(bool(x.Export)) + } + } + if yyr3408 || yy2arr3408 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3419 := z.EncBinary() + _ = yym3419 + if false { + } else { + r.EncodeBool(bool(x.Exact)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("exact")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3420 := z.EncBinary() + _ = yym3420 + if false { + } else { + r.EncodeBool(bool(x.Exact)) + } + } + if yyr3408 || yy2arr3408 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ExportOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3421 := z.DecBinary() + _ = yym3421 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3422 := r.ContainerType() + if yyct3422 == codecSelferValueTypeMap1234 { + yyl3422 := r.ReadMapStart() + if yyl3422 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3422, d) + } + } else if yyct3422 == codecSelferValueTypeArray1234 { + yyl3422 := r.ReadArrayStart() + if yyl3422 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3422, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ExportOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3423Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3423Slc + var yyhl3423 bool = l >= 0 + for yyj3423 := 0; ; yyj3423++ { + if yyhl3423 { + if yyj3423 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3423Slc = r.DecodeBytes(yys3423Slc, true, true) + yys3423 := string(yys3423Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3423 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "export": + if r.TryDecodeAsNil() { + x.Export = false + } else { + x.Export = bool(r.DecodeBool()) + } + case "exact": + if r.TryDecodeAsNil() { + x.Exact = false + } else { + x.Exact = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys3423) + } // end switch yys3423 + } // end for yyj3423 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ExportOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3428 int + var yyb3428 bool + var yyhl3428 bool = l >= 0 + yyj3428++ + if yyhl3428 { + yyb3428 = yyj3428 > l + } else { + yyb3428 = r.CheckBreak() + } + if yyb3428 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3428++ + if yyhl3428 { + yyb3428 = yyj3428 > l + } else { + yyb3428 = r.CheckBreak() + } + if yyb3428 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3428++ + if yyhl3428 { + yyb3428 = yyj3428 > l + } else { + yyb3428 = r.CheckBreak() + } + if yyb3428 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Export = false + } else { + x.Export = bool(r.DecodeBool()) + } + yyj3428++ + if yyhl3428 { + yyb3428 = yyj3428 > l + } else { + yyb3428 = r.CheckBreak() + } + if yyb3428 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Exact = false + } else { + x.Exact = bool(r.DecodeBool()) + } + for { + yyj3428++ + if yyhl3428 { + yyb3428 = yyj3428 > l + } else { + yyb3428 = r.CheckBreak() + } + if yyb3428 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3428-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ListOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3433 := z.EncBinary() + _ = yym3433 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3434 := !z.EncBinary() + yy2arr3434 := z.EncBasicHandle().StructToArray + var yyq3434 [7]bool + _, _, _ = yysep3434, yyq3434, yy2arr3434 + const yyr3434 bool = false + yyq3434[0] = x.Kind != "" + yyq3434[1] = x.APIVersion != "" + yyq3434[2] = x.LabelSelector != "" + yyq3434[3] = x.FieldSelector != "" + yyq3434[4] = x.Watch != false + yyq3434[5] = x.ResourceVersion != "" + yyq3434[6] = x.TimeoutSeconds != nil + var yynn3434 int + if yyr3434 || yy2arr3434 { + r.EncodeArrayStart(7) + } else { + yynn3434 = 0 + for _, b := range yyq3434 { + if b { + yynn3434++ + } + } + r.EncodeMapStart(yynn3434) + yynn3434 = 0 + } + if yyr3434 || yy2arr3434 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3434[0] { + yym3436 := z.EncBinary() + _ = yym3436 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3434[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3437 := z.EncBinary() + _ = yym3437 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3434 || yy2arr3434 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3434[1] { + yym3439 := z.EncBinary() + _ = yym3439 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3434[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3440 := z.EncBinary() + _ = yym3440 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3434 || yy2arr3434 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3434[2] { + yym3442 := z.EncBinary() + _ = yym3442 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.LabelSelector)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3434[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("labelSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3443 := z.EncBinary() + _ = yym3443 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.LabelSelector)) + } + } + } + if yyr3434 || yy2arr3434 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3434[3] { + yym3445 := z.EncBinary() + _ = yym3445 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldSelector)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3434[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3446 := z.EncBinary() + _ = yym3446 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldSelector)) + } + } + } + if yyr3434 || yy2arr3434 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3434[4] { + yym3448 := z.EncBinary() + _ = yym3448 + if false { + } else { + r.EncodeBool(bool(x.Watch)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3434[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("watch")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3449 := z.EncBinary() + _ = yym3449 + if false { + } else { + r.EncodeBool(bool(x.Watch)) + } + } + } + if yyr3434 || yy2arr3434 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3434[5] { + yym3451 := z.EncBinary() + _ = yym3451 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3434[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3452 := z.EncBinary() + _ = yym3452 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } + } + if yyr3434 || yy2arr3434 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3434[6] { + if x.TimeoutSeconds == nil { + r.EncodeNil() + } else { + yy3454 := *x.TimeoutSeconds + yym3455 := z.EncBinary() + _ = yym3455 + if false { + } else { + r.EncodeInt(int64(yy3454)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3434[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("timeoutSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TimeoutSeconds == nil { + r.EncodeNil() + } else { + yy3456 := *x.TimeoutSeconds + yym3457 := z.EncBinary() + _ = yym3457 + if false { + } else { + r.EncodeInt(int64(yy3456)) + } + } + } + } + if yyr3434 || yy2arr3434 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ListOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3458 := z.DecBinary() + _ = yym3458 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3459 := r.ContainerType() + if yyct3459 == codecSelferValueTypeMap1234 { + yyl3459 := r.ReadMapStart() + if yyl3459 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3459, d) + } + } else if yyct3459 == codecSelferValueTypeArray1234 { + yyl3459 := r.ReadArrayStart() + if yyl3459 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3459, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ListOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3460Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3460Slc + var yyhl3460 bool = l >= 0 + for yyj3460 := 0; ; yyj3460++ { + if yyhl3460 { + if yyj3460 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3460Slc = r.DecodeBytes(yys3460Slc, true, true) + yys3460 := string(yys3460Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3460 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "labelSelector": + if r.TryDecodeAsNil() { + x.LabelSelector = "" + } else { + x.LabelSelector = string(r.DecodeString()) + } + case "fieldSelector": + if r.TryDecodeAsNil() { + x.FieldSelector = "" + } else { + x.FieldSelector = string(r.DecodeString()) + } + case "watch": + if r.TryDecodeAsNil() { + x.Watch = false + } else { + x.Watch = bool(r.DecodeBool()) + } + case "resourceVersion": + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + case "timeoutSeconds": + if r.TryDecodeAsNil() { + if x.TimeoutSeconds != nil { + x.TimeoutSeconds = nil + } + } else { + if x.TimeoutSeconds == nil { + x.TimeoutSeconds = new(int64) + } + yym3468 := z.DecBinary() + _ = yym3468 + if false { + } else { + *((*int64)(x.TimeoutSeconds)) = int64(r.DecodeInt(64)) + } + } + default: + z.DecStructFieldNotFound(-1, yys3460) + } // end switch yys3460 + } // end for yyj3460 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ListOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3469 int + var yyb3469 bool + var yyhl3469 bool = l >= 0 + yyj3469++ + if yyhl3469 { + yyb3469 = yyj3469 > l + } else { + yyb3469 = r.CheckBreak() + } + if yyb3469 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3469++ + if yyhl3469 { + yyb3469 = yyj3469 > l + } else { + yyb3469 = r.CheckBreak() + } + if yyb3469 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3469++ + if yyhl3469 { + yyb3469 = yyj3469 > l + } else { + yyb3469 = r.CheckBreak() + } + if yyb3469 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LabelSelector = "" + } else { + x.LabelSelector = string(r.DecodeString()) + } + yyj3469++ + if yyhl3469 { + yyb3469 = yyj3469 > l + } else { + yyb3469 = r.CheckBreak() + } + if yyb3469 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FieldSelector = "" + } else { + x.FieldSelector = string(r.DecodeString()) + } + yyj3469++ + if yyhl3469 { + yyb3469 = yyj3469 > l + } else { + yyb3469 = r.CheckBreak() + } + if yyb3469 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Watch = false + } else { + x.Watch = bool(r.DecodeBool()) + } + yyj3469++ + if yyhl3469 { + yyb3469 = yyj3469 > l + } else { + yyb3469 = r.CheckBreak() + } + if yyb3469 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + yyj3469++ + if yyhl3469 { + yyb3469 = yyj3469 > l + } else { + yyb3469 = r.CheckBreak() + } + if yyb3469 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TimeoutSeconds != nil { + x.TimeoutSeconds = nil + } + } else { + if x.TimeoutSeconds == nil { + x.TimeoutSeconds = new(int64) + } + yym3477 := z.DecBinary() + _ = yym3477 + if false { + } else { + *((*int64)(x.TimeoutSeconds)) = int64(r.DecodeInt(64)) + } + } + for { + yyj3469++ + if yyhl3469 { + yyb3469 = yyj3469 > l + } else { + yyb3469 = r.CheckBreak() + } + if yyb3469 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3469-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodLogOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3478 := z.EncBinary() + _ = yym3478 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3479 := !z.EncBinary() + yy2arr3479 := z.EncBasicHandle().StructToArray + var yyq3479 [10]bool + _, _, _ = yysep3479, yyq3479, yy2arr3479 + const yyr3479 bool = false + yyq3479[0] = x.Kind != "" + yyq3479[1] = x.APIVersion != "" + yyq3479[2] = x.Container != "" + yyq3479[3] = x.Follow != false + yyq3479[4] = x.Previous != false + yyq3479[5] = x.SinceSeconds != nil + yyq3479[6] = x.SinceTime != nil + yyq3479[7] = x.Timestamps != false + yyq3479[8] = x.TailLines != nil + yyq3479[9] = x.LimitBytes != nil + var yynn3479 int + if yyr3479 || yy2arr3479 { + r.EncodeArrayStart(10) + } else { + yynn3479 = 0 + for _, b := range yyq3479 { + if b { + yynn3479++ + } + } + r.EncodeMapStart(yynn3479) + yynn3479 = 0 + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[0] { + yym3481 := z.EncBinary() + _ = yym3481 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3479[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3482 := z.EncBinary() + _ = yym3482 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[1] { + yym3484 := z.EncBinary() + _ = yym3484 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3479[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3485 := z.EncBinary() + _ = yym3485 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[2] { + yym3487 := z.EncBinary() + _ = yym3487 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3479[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("container")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3488 := z.EncBinary() + _ = yym3488 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[3] { + yym3490 := z.EncBinary() + _ = yym3490 + if false { + } else { + r.EncodeBool(bool(x.Follow)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3479[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("follow")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3491 := z.EncBinary() + _ = yym3491 + if false { + } else { + r.EncodeBool(bool(x.Follow)) + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[4] { + yym3493 := z.EncBinary() + _ = yym3493 + if false { + } else { + r.EncodeBool(bool(x.Previous)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3479[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("previous")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3494 := z.EncBinary() + _ = yym3494 + if false { + } else { + r.EncodeBool(bool(x.Previous)) + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[5] { + if x.SinceSeconds == nil { + r.EncodeNil() + } else { + yy3496 := *x.SinceSeconds + yym3497 := z.EncBinary() + _ = yym3497 + if false { + } else { + r.EncodeInt(int64(yy3496)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3479[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("sinceSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SinceSeconds == nil { + r.EncodeNil() + } else { + yy3498 := *x.SinceSeconds + yym3499 := z.EncBinary() + _ = yym3499 + if false { + } else { + r.EncodeInt(int64(yy3498)) + } + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[6] { + if x.SinceTime == nil { + r.EncodeNil() + } else { + yym3501 := z.EncBinary() + _ = yym3501 + if false { + } else if z.HasExtensions() && z.EncExt(x.SinceTime) { + } else if yym3501 { + z.EncBinaryMarshal(x.SinceTime) + } else if !yym3501 && z.IsJSONHandle() { + z.EncJSONMarshal(x.SinceTime) + } else { + z.EncFallback(x.SinceTime) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3479[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("sinceTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SinceTime == nil { + r.EncodeNil() + } else { + yym3502 := z.EncBinary() + _ = yym3502 + if false { + } else if z.HasExtensions() && z.EncExt(x.SinceTime) { + } else if yym3502 { + z.EncBinaryMarshal(x.SinceTime) + } else if !yym3502 && z.IsJSONHandle() { + z.EncJSONMarshal(x.SinceTime) + } else { + z.EncFallback(x.SinceTime) + } + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[7] { + yym3504 := z.EncBinary() + _ = yym3504 + if false { + } else { + r.EncodeBool(bool(x.Timestamps)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3479[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("timestamps")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3505 := z.EncBinary() + _ = yym3505 + if false { + } else { + r.EncodeBool(bool(x.Timestamps)) + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[8] { + if x.TailLines == nil { + r.EncodeNil() + } else { + yy3507 := *x.TailLines + yym3508 := z.EncBinary() + _ = yym3508 + if false { + } else { + r.EncodeInt(int64(yy3507)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3479[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tailLines")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TailLines == nil { + r.EncodeNil() + } else { + yy3509 := *x.TailLines + yym3510 := z.EncBinary() + _ = yym3510 + if false { + } else { + r.EncodeInt(int64(yy3509)) + } + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3479[9] { + if x.LimitBytes == nil { + r.EncodeNil() + } else { + yy3512 := *x.LimitBytes + yym3513 := z.EncBinary() + _ = yym3513 + if false { + } else { + r.EncodeInt(int64(yy3512)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3479[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("limitBytes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LimitBytes == nil { + r.EncodeNil() + } else { + yy3514 := *x.LimitBytes + yym3515 := z.EncBinary() + _ = yym3515 + if false { + } else { + r.EncodeInt(int64(yy3514)) + } + } + } + } + if yyr3479 || yy2arr3479 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodLogOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3516 := z.DecBinary() + _ = yym3516 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3517 := r.ContainerType() + if yyct3517 == codecSelferValueTypeMap1234 { + yyl3517 := r.ReadMapStart() + if yyl3517 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3517, d) + } + } else if yyct3517 == codecSelferValueTypeArray1234 { + yyl3517 := r.ReadArrayStart() + if yyl3517 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3517, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodLogOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3518Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3518Slc + var yyhl3518 bool = l >= 0 + for yyj3518 := 0; ; yyj3518++ { + if yyhl3518 { + if yyj3518 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3518Slc = r.DecodeBytes(yys3518Slc, true, true) + yys3518 := string(yys3518Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3518 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "container": + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + case "follow": + if r.TryDecodeAsNil() { + x.Follow = false + } else { + x.Follow = bool(r.DecodeBool()) + } + case "previous": + if r.TryDecodeAsNil() { + x.Previous = false + } else { + x.Previous = bool(r.DecodeBool()) + } + case "sinceSeconds": + if r.TryDecodeAsNil() { + if x.SinceSeconds != nil { + x.SinceSeconds = nil + } + } else { + if x.SinceSeconds == nil { + x.SinceSeconds = new(int64) + } + yym3525 := z.DecBinary() + _ = yym3525 + if false { + } else { + *((*int64)(x.SinceSeconds)) = int64(r.DecodeInt(64)) + } + } + case "sinceTime": + if r.TryDecodeAsNil() { + if x.SinceTime != nil { + x.SinceTime = nil + } + } else { + if x.SinceTime == nil { + x.SinceTime = new(pkg2_unversioned.Time) + } + yym3527 := z.DecBinary() + _ = yym3527 + if false { + } else if z.HasExtensions() && z.DecExt(x.SinceTime) { + } else if yym3527 { + z.DecBinaryUnmarshal(x.SinceTime) + } else if !yym3527 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.SinceTime) + } else { + z.DecFallback(x.SinceTime, false) + } + } + case "timestamps": + if r.TryDecodeAsNil() { + x.Timestamps = false + } else { + x.Timestamps = bool(r.DecodeBool()) + } + case "tailLines": + if r.TryDecodeAsNil() { + if x.TailLines != nil { + x.TailLines = nil + } + } else { + if x.TailLines == nil { + x.TailLines = new(int64) + } + yym3530 := z.DecBinary() + _ = yym3530 + if false { + } else { + *((*int64)(x.TailLines)) = int64(r.DecodeInt(64)) + } + } + case "limitBytes": + if r.TryDecodeAsNil() { + if x.LimitBytes != nil { + x.LimitBytes = nil + } + } else { + if x.LimitBytes == nil { + x.LimitBytes = new(int64) + } + yym3532 := z.DecBinary() + _ = yym3532 + if false { + } else { + *((*int64)(x.LimitBytes)) = int64(r.DecodeInt(64)) + } + } + default: + z.DecStructFieldNotFound(-1, yys3518) + } // end switch yys3518 + } // end for yyj3518 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodLogOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3533 int + var yyb3533 bool + var yyhl3533 bool = l >= 0 + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Follow = false + } else { + x.Follow = bool(r.DecodeBool()) + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Previous = false + } else { + x.Previous = bool(r.DecodeBool()) + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SinceSeconds != nil { + x.SinceSeconds = nil + } + } else { + if x.SinceSeconds == nil { + x.SinceSeconds = new(int64) + } + yym3540 := z.DecBinary() + _ = yym3540 + if false { + } else { + *((*int64)(x.SinceSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SinceTime != nil { + x.SinceTime = nil + } + } else { + if x.SinceTime == nil { + x.SinceTime = new(pkg2_unversioned.Time) + } + yym3542 := z.DecBinary() + _ = yym3542 + if false { + } else if z.HasExtensions() && z.DecExt(x.SinceTime) { + } else if yym3542 { + z.DecBinaryUnmarshal(x.SinceTime) + } else if !yym3542 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.SinceTime) + } else { + z.DecFallback(x.SinceTime, false) + } + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Timestamps = false + } else { + x.Timestamps = bool(r.DecodeBool()) + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TailLines != nil { + x.TailLines = nil + } + } else { + if x.TailLines == nil { + x.TailLines = new(int64) + } + yym3545 := z.DecBinary() + _ = yym3545 + if false { + } else { + *((*int64)(x.TailLines)) = int64(r.DecodeInt(64)) + } + } + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.LimitBytes != nil { + x.LimitBytes = nil + } + } else { + if x.LimitBytes == nil { + x.LimitBytes = new(int64) + } + yym3547 := z.DecBinary() + _ = yym3547 + if false { + } else { + *((*int64)(x.LimitBytes)) = int64(r.DecodeInt(64)) + } + } + for { + yyj3533++ + if yyhl3533 { + yyb3533 = yyj3533 > l + } else { + yyb3533 = r.CheckBreak() + } + if yyb3533 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3533-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodAttachOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3548 := z.EncBinary() + _ = yym3548 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3549 := !z.EncBinary() + yy2arr3549 := z.EncBasicHandle().StructToArray + var yyq3549 [7]bool + _, _, _ = yysep3549, yyq3549, yy2arr3549 + const yyr3549 bool = false + yyq3549[0] = x.Kind != "" + yyq3549[1] = x.APIVersion != "" + yyq3549[2] = x.Stdin != false + yyq3549[3] = x.Stdout != false + yyq3549[4] = x.Stderr != false + yyq3549[5] = x.TTY != false + yyq3549[6] = x.Container != "" + var yynn3549 int + if yyr3549 || yy2arr3549 { + r.EncodeArrayStart(7) + } else { + yynn3549 = 0 + for _, b := range yyq3549 { + if b { + yynn3549++ + } + } + r.EncodeMapStart(yynn3549) + yynn3549 = 0 + } + if yyr3549 || yy2arr3549 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3549[0] { + yym3551 := z.EncBinary() + _ = yym3551 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3549[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3552 := z.EncBinary() + _ = yym3552 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3549 || yy2arr3549 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3549[1] { + yym3554 := z.EncBinary() + _ = yym3554 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3549[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3555 := z.EncBinary() + _ = yym3555 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3549 || yy2arr3549 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3549[2] { + yym3557 := z.EncBinary() + _ = yym3557 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3549[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdin")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3558 := z.EncBinary() + _ = yym3558 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } + } + if yyr3549 || yy2arr3549 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3549[3] { + yym3560 := z.EncBinary() + _ = yym3560 + if false { + } else { + r.EncodeBool(bool(x.Stdout)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3549[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdout")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3561 := z.EncBinary() + _ = yym3561 + if false { + } else { + r.EncodeBool(bool(x.Stdout)) + } + } + } + if yyr3549 || yy2arr3549 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3549[4] { + yym3563 := z.EncBinary() + _ = yym3563 + if false { + } else { + r.EncodeBool(bool(x.Stderr)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3549[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stderr")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3564 := z.EncBinary() + _ = yym3564 + if false { + } else { + r.EncodeBool(bool(x.Stderr)) + } + } + } + if yyr3549 || yy2arr3549 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3549[5] { + yym3566 := z.EncBinary() + _ = yym3566 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3549[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tty")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3567 := z.EncBinary() + _ = yym3567 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } + } + if yyr3549 || yy2arr3549 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3549[6] { + yym3569 := z.EncBinary() + _ = yym3569 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3549[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("container")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3570 := z.EncBinary() + _ = yym3570 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } + } + if yyr3549 || yy2arr3549 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodAttachOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3571 := z.DecBinary() + _ = yym3571 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3572 := r.ContainerType() + if yyct3572 == codecSelferValueTypeMap1234 { + yyl3572 := r.ReadMapStart() + if yyl3572 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3572, d) + } + } else if yyct3572 == codecSelferValueTypeArray1234 { + yyl3572 := r.ReadArrayStart() + if yyl3572 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3572, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodAttachOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3573Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3573Slc + var yyhl3573 bool = l >= 0 + for yyj3573 := 0; ; yyj3573++ { + if yyhl3573 { + if yyj3573 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3573Slc = r.DecodeBytes(yys3573Slc, true, true) + yys3573 := string(yys3573Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3573 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "stdin": + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + case "stdout": + if r.TryDecodeAsNil() { + x.Stdout = false + } else { + x.Stdout = bool(r.DecodeBool()) + } + case "stderr": + if r.TryDecodeAsNil() { + x.Stderr = false + } else { + x.Stderr = bool(r.DecodeBool()) + } + case "tty": + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + case "container": + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3573) + } // end switch yys3573 + } // end for yyj3573 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodAttachOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3581 int + var yyb3581 bool + var yyhl3581 bool = l >= 0 + yyj3581++ + if yyhl3581 { + yyb3581 = yyj3581 > l + } else { + yyb3581 = r.CheckBreak() + } + if yyb3581 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3581++ + if yyhl3581 { + yyb3581 = yyj3581 > l + } else { + yyb3581 = r.CheckBreak() + } + if yyb3581 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3581++ + if yyhl3581 { + yyb3581 = yyj3581 > l + } else { + yyb3581 = r.CheckBreak() + } + if yyb3581 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + yyj3581++ + if yyhl3581 { + yyb3581 = yyj3581 > l + } else { + yyb3581 = r.CheckBreak() + } + if yyb3581 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdout = false + } else { + x.Stdout = bool(r.DecodeBool()) + } + yyj3581++ + if yyhl3581 { + yyb3581 = yyj3581 > l + } else { + yyb3581 = r.CheckBreak() + } + if yyb3581 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stderr = false + } else { + x.Stderr = bool(r.DecodeBool()) + } + yyj3581++ + if yyhl3581 { + yyb3581 = yyj3581 > l + } else { + yyb3581 = r.CheckBreak() + } + if yyb3581 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + yyj3581++ + if yyhl3581 { + yyb3581 = yyj3581 > l + } else { + yyb3581 = r.CheckBreak() + } + if yyb3581 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + for { + yyj3581++ + if yyhl3581 { + yyb3581 = yyj3581 > l + } else { + yyb3581 = r.CheckBreak() + } + if yyb3581 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3581-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodExecOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3589 := z.EncBinary() + _ = yym3589 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3590 := !z.EncBinary() + yy2arr3590 := z.EncBasicHandle().StructToArray + var yyq3590 [8]bool + _, _, _ = yysep3590, yyq3590, yy2arr3590 + const yyr3590 bool = false + yyq3590[0] = x.Kind != "" + yyq3590[1] = x.APIVersion != "" + yyq3590[2] = x.Stdin != false + yyq3590[3] = x.Stdout != false + yyq3590[4] = x.Stderr != false + yyq3590[5] = x.TTY != false + yyq3590[6] = x.Container != "" + var yynn3590 int + if yyr3590 || yy2arr3590 { + r.EncodeArrayStart(8) + } else { + yynn3590 = 1 + for _, b := range yyq3590 { + if b { + yynn3590++ + } + } + r.EncodeMapStart(yynn3590) + yynn3590 = 0 + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3590[0] { + yym3592 := z.EncBinary() + _ = yym3592 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3590[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3593 := z.EncBinary() + _ = yym3593 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3590[1] { + yym3595 := z.EncBinary() + _ = yym3595 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3590[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3596 := z.EncBinary() + _ = yym3596 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3590[2] { + yym3598 := z.EncBinary() + _ = yym3598 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3590[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdin")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3599 := z.EncBinary() + _ = yym3599 + if false { + } else { + r.EncodeBool(bool(x.Stdin)) + } + } + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3590[3] { + yym3601 := z.EncBinary() + _ = yym3601 + if false { + } else { + r.EncodeBool(bool(x.Stdout)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3590[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stdout")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3602 := z.EncBinary() + _ = yym3602 + if false { + } else { + r.EncodeBool(bool(x.Stdout)) + } + } + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3590[4] { + yym3604 := z.EncBinary() + _ = yym3604 + if false { + } else { + r.EncodeBool(bool(x.Stderr)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3590[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stderr")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3605 := z.EncBinary() + _ = yym3605 + if false { + } else { + r.EncodeBool(bool(x.Stderr)) + } + } + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3590[5] { + yym3607 := z.EncBinary() + _ = yym3607 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq3590[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tty")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3608 := z.EncBinary() + _ = yym3608 + if false { + } else { + r.EncodeBool(bool(x.TTY)) + } + } + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3590[6] { + yym3610 := z.EncBinary() + _ = yym3610 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3590[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("container")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3611 := z.EncBinary() + _ = yym3611 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Container)) + } + } + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Command == nil { + r.EncodeNil() + } else { + yym3613 := z.EncBinary() + _ = yym3613 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("command")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Command == nil { + r.EncodeNil() + } else { + yym3614 := z.EncBinary() + _ = yym3614 + if false { + } else { + z.F.EncSliceStringV(x.Command, false, e) + } + } + } + if yyr3590 || yy2arr3590 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodExecOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3615 := z.DecBinary() + _ = yym3615 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3616 := r.ContainerType() + if yyct3616 == codecSelferValueTypeMap1234 { + yyl3616 := r.ReadMapStart() + if yyl3616 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3616, d) + } + } else if yyct3616 == codecSelferValueTypeArray1234 { + yyl3616 := r.ReadArrayStart() + if yyl3616 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3616, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodExecOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3617Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3617Slc + var yyhl3617 bool = l >= 0 + for yyj3617 := 0; ; yyj3617++ { + if yyhl3617 { + if yyj3617 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3617Slc = r.DecodeBytes(yys3617Slc, true, true) + yys3617 := string(yys3617Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3617 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "stdin": + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + case "stdout": + if r.TryDecodeAsNil() { + x.Stdout = false + } else { + x.Stdout = bool(r.DecodeBool()) + } + case "stderr": + if r.TryDecodeAsNil() { + x.Stderr = false + } else { + x.Stderr = bool(r.DecodeBool()) + } + case "tty": + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + case "container": + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + case "command": + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv3625 := &x.Command + yym3626 := z.DecBinary() + _ = yym3626 + if false { + } else { + z.F.DecSliceStringX(yyv3625, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3617) + } // end switch yys3617 + } // end for yyj3617 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodExecOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3627 int + var yyb3627 bool + var yyhl3627 bool = l >= 0 + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdin = false + } else { + x.Stdin = bool(r.DecodeBool()) + } + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stdout = false + } else { + x.Stdout = bool(r.DecodeBool()) + } + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Stderr = false + } else { + x.Stderr = bool(r.DecodeBool()) + } + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TTY = false + } else { + x.TTY = bool(r.DecodeBool()) + } + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Container = "" + } else { + x.Container = string(r.DecodeString()) + } + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Command = nil + } else { + yyv3635 := &x.Command + yym3636 := z.DecBinary() + _ = yym3636 + if false { + } else { + z.F.DecSliceStringX(yyv3635, false, d) + } + } + for { + yyj3627++ + if yyhl3627 { + yyb3627 = yyj3627 > l + } else { + yyb3627 = r.CheckBreak() + } + if yyb3627 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3627-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodProxyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3637 := z.EncBinary() + _ = yym3637 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3638 := !z.EncBinary() + yy2arr3638 := z.EncBasicHandle().StructToArray + var yyq3638 [3]bool + _, _, _ = yysep3638, yyq3638, yy2arr3638 + const yyr3638 bool = false + yyq3638[0] = x.Kind != "" + yyq3638[1] = x.APIVersion != "" + yyq3638[2] = x.Path != "" + var yynn3638 int + if yyr3638 || yy2arr3638 { + r.EncodeArrayStart(3) + } else { + yynn3638 = 0 + for _, b := range yyq3638 { + if b { + yynn3638++ + } + } + r.EncodeMapStart(yynn3638) + yynn3638 = 0 + } + if yyr3638 || yy2arr3638 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3638[0] { + yym3640 := z.EncBinary() + _ = yym3640 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3638[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3641 := z.EncBinary() + _ = yym3641 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3638 || yy2arr3638 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3638[1] { + yym3643 := z.EncBinary() + _ = yym3643 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3638[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3644 := z.EncBinary() + _ = yym3644 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3638 || yy2arr3638 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3638[2] { + yym3646 := z.EncBinary() + _ = yym3646 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3638[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3647 := z.EncBinary() + _ = yym3647 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + } + if yyr3638 || yy2arr3638 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodProxyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3648 := z.DecBinary() + _ = yym3648 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3649 := r.ContainerType() + if yyct3649 == codecSelferValueTypeMap1234 { + yyl3649 := r.ReadMapStart() + if yyl3649 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3649, d) + } + } else if yyct3649 == codecSelferValueTypeArray1234 { + yyl3649 := r.ReadArrayStart() + if yyl3649 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3649, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodProxyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3650Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3650Slc + var yyhl3650 bool = l >= 0 + for yyj3650 := 0; ; yyj3650++ { + if yyhl3650 { + if yyj3650 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3650Slc = r.DecodeBytes(yys3650Slc, true, true) + yys3650 := string(yys3650Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3650 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3650) + } // end switch yys3650 + } // end for yyj3650 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodProxyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3654 int + var yyb3654 bool + var yyhl3654 bool = l >= 0 + yyj3654++ + if yyhl3654 { + yyb3654 = yyj3654 > l + } else { + yyb3654 = r.CheckBreak() + } + if yyb3654 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3654++ + if yyhl3654 { + yyb3654 = yyj3654 > l + } else { + yyb3654 = r.CheckBreak() + } + if yyb3654 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3654++ + if yyhl3654 { + yyb3654 = yyj3654 > l + } else { + yyb3654 = r.CheckBreak() + } + if yyb3654 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + for { + yyj3654++ + if yyhl3654 { + yyb3654 = yyj3654 > l + } else { + yyb3654 = r.CheckBreak() + } + if yyb3654 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3654-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NodeProxyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3658 := z.EncBinary() + _ = yym3658 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3659 := !z.EncBinary() + yy2arr3659 := z.EncBasicHandle().StructToArray + var yyq3659 [3]bool + _, _, _ = yysep3659, yyq3659, yy2arr3659 + const yyr3659 bool = false + yyq3659[0] = x.Kind != "" + yyq3659[1] = x.APIVersion != "" + yyq3659[2] = x.Path != "" + var yynn3659 int + if yyr3659 || yy2arr3659 { + r.EncodeArrayStart(3) + } else { + yynn3659 = 0 + for _, b := range yyq3659 { + if b { + yynn3659++ + } + } + r.EncodeMapStart(yynn3659) + yynn3659 = 0 + } + if yyr3659 || yy2arr3659 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3659[0] { + yym3661 := z.EncBinary() + _ = yym3661 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3659[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3662 := z.EncBinary() + _ = yym3662 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3659 || yy2arr3659 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3659[1] { + yym3664 := z.EncBinary() + _ = yym3664 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3659[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3665 := z.EncBinary() + _ = yym3665 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3659 || yy2arr3659 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3659[2] { + yym3667 := z.EncBinary() + _ = yym3667 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3659[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3668 := z.EncBinary() + _ = yym3668 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + } + if yyr3659 || yy2arr3659 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NodeProxyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3669 := z.DecBinary() + _ = yym3669 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3670 := r.ContainerType() + if yyct3670 == codecSelferValueTypeMap1234 { + yyl3670 := r.ReadMapStart() + if yyl3670 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3670, d) + } + } else if yyct3670 == codecSelferValueTypeArray1234 { + yyl3670 := r.ReadArrayStart() + if yyl3670 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3670, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NodeProxyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3671Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3671Slc + var yyhl3671 bool = l >= 0 + for yyj3671 := 0; ; yyj3671++ { + if yyhl3671 { + if yyj3671 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3671Slc = r.DecodeBytes(yys3671Slc, true, true) + yys3671 := string(yys3671Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3671 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3671) + } // end switch yys3671 + } // end for yyj3671 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NodeProxyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3675 int + var yyb3675 bool + var yyhl3675 bool = l >= 0 + yyj3675++ + if yyhl3675 { + yyb3675 = yyj3675 > l + } else { + yyb3675 = r.CheckBreak() + } + if yyb3675 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3675++ + if yyhl3675 { + yyb3675 = yyj3675 > l + } else { + yyb3675 = r.CheckBreak() + } + if yyb3675 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3675++ + if yyhl3675 { + yyb3675 = yyj3675 > l + } else { + yyb3675 = r.CheckBreak() + } + if yyb3675 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + for { + yyj3675++ + if yyhl3675 { + yyb3675 = yyj3675 > l + } else { + yyb3675 = r.CheckBreak() + } + if yyb3675 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3675-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ServiceProxyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3679 := z.EncBinary() + _ = yym3679 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3680 := !z.EncBinary() + yy2arr3680 := z.EncBasicHandle().StructToArray + var yyq3680 [3]bool + _, _, _ = yysep3680, yyq3680, yy2arr3680 + const yyr3680 bool = false + yyq3680[0] = x.Kind != "" + yyq3680[1] = x.APIVersion != "" + yyq3680[2] = x.Path != "" + var yynn3680 int + if yyr3680 || yy2arr3680 { + r.EncodeArrayStart(3) + } else { + yynn3680 = 0 + for _, b := range yyq3680 { + if b { + yynn3680++ + } + } + r.EncodeMapStart(yynn3680) + yynn3680 = 0 + } + if yyr3680 || yy2arr3680 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3680[0] { + yym3682 := z.EncBinary() + _ = yym3682 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3680[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3683 := z.EncBinary() + _ = yym3683 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3680 || yy2arr3680 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3680[1] { + yym3685 := z.EncBinary() + _ = yym3685 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3680[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3686 := z.EncBinary() + _ = yym3686 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3680 || yy2arr3680 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3680[2] { + yym3688 := z.EncBinary() + _ = yym3688 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3680[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3689 := z.EncBinary() + _ = yym3689 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + } + if yyr3680 || yy2arr3680 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ServiceProxyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3690 := z.DecBinary() + _ = yym3690 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3691 := r.ContainerType() + if yyct3691 == codecSelferValueTypeMap1234 { + yyl3691 := r.ReadMapStart() + if yyl3691 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3691, d) + } + } else if yyct3691 == codecSelferValueTypeArray1234 { + yyl3691 := r.ReadArrayStart() + if yyl3691 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3691, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ServiceProxyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3692Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3692Slc + var yyhl3692 bool = l >= 0 + for yyj3692 := 0; ; yyj3692++ { + if yyhl3692 { + if yyj3692 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3692Slc = r.DecodeBytes(yys3692Slc, true, true) + yys3692 := string(yys3692Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3692 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3692) + } // end switch yys3692 + } // end for yyj3692 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ServiceProxyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3696 int + var yyb3696 bool + var yyhl3696 bool = l >= 0 + yyj3696++ + if yyhl3696 { + yyb3696 = yyj3696 > l + } else { + yyb3696 = r.CheckBreak() + } + if yyb3696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3696++ + if yyhl3696 { + yyb3696 = yyj3696 > l + } else { + yyb3696 = r.CheckBreak() + } + if yyb3696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3696++ + if yyhl3696 { + yyb3696 = yyj3696 > l + } else { + yyb3696 = r.CheckBreak() + } + if yyb3696 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + for { + yyj3696++ + if yyhl3696 { + yyb3696 = yyj3696 > l + } else { + yyb3696 = r.CheckBreak() + } + if yyb3696 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3696-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *OwnerReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3700 := z.EncBinary() + _ = yym3700 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3701 := !z.EncBinary() + yy2arr3701 := z.EncBasicHandle().StructToArray + var yyq3701 [5]bool + _, _, _ = yysep3701, yyq3701, yy2arr3701 + const yyr3701 bool = false + yyq3701[4] = x.Controller != nil + var yynn3701 int + if yyr3701 || yy2arr3701 { + r.EncodeArrayStart(5) + } else { + yynn3701 = 4 + for _, b := range yyq3701 { + if b { + yynn3701++ + } + } + r.EncodeMapStart(yynn3701) + yynn3701 = 0 + } + if yyr3701 || yy2arr3701 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3703 := z.EncBinary() + _ = yym3703 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3704 := z.EncBinary() + _ = yym3704 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + if yyr3701 || yy2arr3701 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3706 := z.EncBinary() + _ = yym3706 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3707 := z.EncBinary() + _ = yym3707 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + if yyr3701 || yy2arr3701 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3709 := z.EncBinary() + _ = yym3709 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3710 := z.EncBinary() + _ = yym3710 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr3701 || yy2arr3701 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym3712 := z.EncBinary() + _ = yym3712 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("uid")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3713 := z.EncBinary() + _ = yym3713 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } + if yyr3701 || yy2arr3701 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3701[4] { + if x.Controller == nil { + r.EncodeNil() + } else { + yy3715 := *x.Controller + yym3716 := z.EncBinary() + _ = yym3716 + if false { + } else { + r.EncodeBool(bool(yy3715)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq3701[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("controller")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Controller == nil { + r.EncodeNil() + } else { + yy3717 := *x.Controller + yym3718 := z.EncBinary() + _ = yym3718 + if false { + } else { + r.EncodeBool(bool(yy3717)) + } + } + } + } + if yyr3701 || yy2arr3701 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *OwnerReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3719 := z.DecBinary() + _ = yym3719 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3720 := r.ContainerType() + if yyct3720 == codecSelferValueTypeMap1234 { + yyl3720 := r.ReadMapStart() + if yyl3720 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3720, d) + } + } else if yyct3720 == codecSelferValueTypeArray1234 { + yyl3720 := r.ReadArrayStart() + if yyl3720 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3720, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *OwnerReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3721Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3721Slc + var yyhl3721 bool = l >= 0 + for yyj3721 := 0; ; yyj3721++ { + if yyhl3721 { + if yyj3721 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3721Slc = r.DecodeBytes(yys3721Slc, true, true) + yys3721 := string(yys3721Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3721 { + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "uid": + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + case "controller": + if r.TryDecodeAsNil() { + if x.Controller != nil { + x.Controller = nil + } + } else { + if x.Controller == nil { + x.Controller = new(bool) + } + yym3727 := z.DecBinary() + _ = yym3727 + if false { + } else { + *((*bool)(x.Controller)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys3721) + } // end switch yys3721 + } // end for yyj3721 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *OwnerReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3728 int + var yyb3728 bool + var yyhl3728 bool = l >= 0 + yyj3728++ + if yyhl3728 { + yyb3728 = yyj3728 > l + } else { + yyb3728 = r.CheckBreak() + } + if yyb3728 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3728++ + if yyhl3728 { + yyb3728 = yyj3728 > l + } else { + yyb3728 = r.CheckBreak() + } + if yyb3728 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3728++ + if yyhl3728 { + yyb3728 = yyj3728 > l + } else { + yyb3728 = r.CheckBreak() + } + if yyb3728 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj3728++ + if yyhl3728 { + yyb3728 = yyj3728 > l + } else { + yyb3728 = r.CheckBreak() + } + if yyb3728 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + yyj3728++ + if yyhl3728 { + yyb3728 = yyj3728 > l + } else { + yyb3728 = r.CheckBreak() + } + if yyb3728 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Controller != nil { + x.Controller = nil + } + } else { + if x.Controller == nil { + x.Controller = new(bool) + } + yym3734 := z.DecBinary() + _ = yym3734 + if false { + } else { + *((*bool)(x.Controller)) = r.DecodeBool() + } + } + for { + yyj3728++ + if yyhl3728 { + yyb3728 = yyj3728 > l + } else { + yyb3728 = r.CheckBreak() + } + if yyb3728 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3728-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ObjectReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3735 := z.EncBinary() + _ = yym3735 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3736 := !z.EncBinary() + yy2arr3736 := z.EncBasicHandle().StructToArray + var yyq3736 [7]bool + _, _, _ = yysep3736, yyq3736, yy2arr3736 + const yyr3736 bool = false + yyq3736[0] = x.Kind != "" + yyq3736[1] = x.Namespace != "" + yyq3736[2] = x.Name != "" + yyq3736[3] = x.UID != "" + yyq3736[4] = x.APIVersion != "" + yyq3736[5] = x.ResourceVersion != "" + yyq3736[6] = x.FieldPath != "" + var yynn3736 int + if yyr3736 || yy2arr3736 { + r.EncodeArrayStart(7) + } else { + yynn3736 = 0 + for _, b := range yyq3736 { + if b { + yynn3736++ + } + } + r.EncodeMapStart(yynn3736) + yynn3736 = 0 + } + if yyr3736 || yy2arr3736 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3736[0] { + yym3738 := z.EncBinary() + _ = yym3738 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3736[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3739 := z.EncBinary() + _ = yym3739 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3736 || yy2arr3736 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3736[1] { + yym3741 := z.EncBinary() + _ = yym3741 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Namespace)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3736[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("namespace")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3742 := z.EncBinary() + _ = yym3742 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Namespace)) + } + } + } + if yyr3736 || yy2arr3736 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3736[2] { + yym3744 := z.EncBinary() + _ = yym3744 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3736[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3745 := z.EncBinary() + _ = yym3745 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr3736 || yy2arr3736 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3736[3] { + yym3747 := z.EncBinary() + _ = yym3747 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3736[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("uid")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3748 := z.EncBinary() + _ = yym3748 + if false { + } else if z.HasExtensions() && z.EncExt(x.UID) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.UID)) + } + } + } + if yyr3736 || yy2arr3736 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3736[4] { + yym3750 := z.EncBinary() + _ = yym3750 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3736[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3751 := z.EncBinary() + _ = yym3751 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3736 || yy2arr3736 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3736[5] { + yym3753 := z.EncBinary() + _ = yym3753 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3736[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3754 := z.EncBinary() + _ = yym3754 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ResourceVersion)) + } + } + } + if yyr3736 || yy2arr3736 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3736[6] { + yym3756 := z.EncBinary() + _ = yym3756 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldPath)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3736[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldPath")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3757 := z.EncBinary() + _ = yym3757 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FieldPath)) + } + } + } + if yyr3736 || yy2arr3736 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ObjectReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3758 := z.DecBinary() + _ = yym3758 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3759 := r.ContainerType() + if yyct3759 == codecSelferValueTypeMap1234 { + yyl3759 := r.ReadMapStart() + if yyl3759 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3759, d) + } + } else if yyct3759 == codecSelferValueTypeArray1234 { + yyl3759 := r.ReadArrayStart() + if yyl3759 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3759, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ObjectReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3760Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3760Slc + var yyhl3760 bool = l >= 0 + for yyj3760 := 0; ; yyj3760++ { + if yyhl3760 { + if yyj3760 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3760Slc = r.DecodeBytes(yys3760Slc, true, true) + yys3760 := string(yys3760Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3760 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "namespace": + if r.TryDecodeAsNil() { + x.Namespace = "" + } else { + x.Namespace = string(r.DecodeString()) + } + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "uid": + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "resourceVersion": + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + case "fieldPath": + if r.TryDecodeAsNil() { + x.FieldPath = "" + } else { + x.FieldPath = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3760) + } // end switch yys3760 + } // end for yyj3760 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ObjectReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3768 int + var yyb3768 bool + var yyhl3768 bool = l >= 0 + yyj3768++ + if yyhl3768 { + yyb3768 = yyj3768 > l + } else { + yyb3768 = r.CheckBreak() + } + if yyb3768 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3768++ + if yyhl3768 { + yyb3768 = yyj3768 > l + } else { + yyb3768 = r.CheckBreak() + } + if yyb3768 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Namespace = "" + } else { + x.Namespace = string(r.DecodeString()) + } + yyj3768++ + if yyhl3768 { + yyb3768 = yyj3768 > l + } else { + yyb3768 = r.CheckBreak() + } + if yyb3768 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj3768++ + if yyhl3768 { + yyb3768 = yyj3768 > l + } else { + yyb3768 = r.CheckBreak() + } + if yyb3768 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UID = "" + } else { + x.UID = pkg1_types.UID(r.DecodeString()) + } + yyj3768++ + if yyhl3768 { + yyb3768 = yyj3768 > l + } else { + yyb3768 = r.CheckBreak() + } + if yyb3768 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3768++ + if yyhl3768 { + yyb3768 = yyj3768 > l + } else { + yyb3768 = r.CheckBreak() + } + if yyb3768 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ResourceVersion = "" + } else { + x.ResourceVersion = string(r.DecodeString()) + } + yyj3768++ + if yyhl3768 { + yyb3768 = yyj3768 > l + } else { + yyb3768 = r.CheckBreak() + } + if yyb3768 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FieldPath = "" + } else { + x.FieldPath = string(r.DecodeString()) + } + for { + yyj3768++ + if yyhl3768 { + yyb3768 = yyj3768 > l + } else { + yyb3768 = r.CheckBreak() + } + if yyb3768 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3768-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LocalObjectReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3776 := z.EncBinary() + _ = yym3776 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3777 := !z.EncBinary() + yy2arr3777 := z.EncBasicHandle().StructToArray + var yyq3777 [1]bool + _, _, _ = yysep3777, yyq3777, yy2arr3777 + const yyr3777 bool = false + yyq3777[0] = x.Name != "" + var yynn3777 int + if yyr3777 || yy2arr3777 { + r.EncodeArrayStart(1) + } else { + yynn3777 = 0 + for _, b := range yyq3777 { + if b { + yynn3777++ + } + } + r.EncodeMapStart(yynn3777) + yynn3777 = 0 + } + if yyr3777 || yy2arr3777 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3777[0] { + yym3779 := z.EncBinary() + _ = yym3779 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3777[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3780 := z.EncBinary() + _ = yym3780 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr3777 || yy2arr3777 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LocalObjectReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3781 := z.DecBinary() + _ = yym3781 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3782 := r.ContainerType() + if yyct3782 == codecSelferValueTypeMap1234 { + yyl3782 := r.ReadMapStart() + if yyl3782 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3782, d) + } + } else if yyct3782 == codecSelferValueTypeArray1234 { + yyl3782 := r.ReadArrayStart() + if yyl3782 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3782, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LocalObjectReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3783Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3783Slc + var yyhl3783 bool = l >= 0 + for yyj3783 := 0; ; yyj3783++ { + if yyhl3783 { + if yyj3783 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3783Slc = r.DecodeBytes(yys3783Slc, true, true) + yys3783 := string(yys3783Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3783 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3783) + } // end switch yys3783 + } // end for yyj3783 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LocalObjectReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3785 int + var yyb3785 bool + var yyhl3785 bool = l >= 0 + yyj3785++ + if yyhl3785 { + yyb3785 = yyj3785 > l + } else { + yyb3785 = r.CheckBreak() + } + if yyb3785 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + for { + yyj3785++ + if yyhl3785 { + yyb3785 = yyj3785 > l + } else { + yyb3785 = r.CheckBreak() + } + if yyb3785 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3785-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SerializedReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3787 := z.EncBinary() + _ = yym3787 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3788 := !z.EncBinary() + yy2arr3788 := z.EncBasicHandle().StructToArray + var yyq3788 [3]bool + _, _, _ = yysep3788, yyq3788, yy2arr3788 + const yyr3788 bool = false + yyq3788[0] = x.Kind != "" + yyq3788[1] = x.APIVersion != "" + yyq3788[2] = true + var yynn3788 int + if yyr3788 || yy2arr3788 { + r.EncodeArrayStart(3) + } else { + yynn3788 = 0 + for _, b := range yyq3788 { + if b { + yynn3788++ + } + } + r.EncodeMapStart(yynn3788) + yynn3788 = 0 + } + if yyr3788 || yy2arr3788 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3788[0] { + yym3790 := z.EncBinary() + _ = yym3790 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3788[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3791 := z.EncBinary() + _ = yym3791 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3788 || yy2arr3788 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3788[1] { + yym3793 := z.EncBinary() + _ = yym3793 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3788[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3794 := z.EncBinary() + _ = yym3794 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3788 || yy2arr3788 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3788[2] { + yy3796 := &x.Reference + yy3796.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3788[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reference")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3797 := &x.Reference + yy3797.CodecEncodeSelf(e) + } + } + if yyr3788 || yy2arr3788 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SerializedReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3798 := z.DecBinary() + _ = yym3798 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3799 := r.ContainerType() + if yyct3799 == codecSelferValueTypeMap1234 { + yyl3799 := r.ReadMapStart() + if yyl3799 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3799, d) + } + } else if yyct3799 == codecSelferValueTypeArray1234 { + yyl3799 := r.ReadArrayStart() + if yyl3799 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3799, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SerializedReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3800Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3800Slc + var yyhl3800 bool = l >= 0 + for yyj3800 := 0; ; yyj3800++ { + if yyhl3800 { + if yyj3800 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3800Slc = r.DecodeBytes(yys3800Slc, true, true) + yys3800 := string(yys3800Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3800 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "reference": + if r.TryDecodeAsNil() { + x.Reference = ObjectReference{} + } else { + yyv3803 := &x.Reference + yyv3803.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3800) + } // end switch yys3800 + } // end for yyj3800 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SerializedReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3804 int + var yyb3804 bool + var yyhl3804 bool = l >= 0 + yyj3804++ + if yyhl3804 { + yyb3804 = yyj3804 > l + } else { + yyb3804 = r.CheckBreak() + } + if yyb3804 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3804++ + if yyhl3804 { + yyb3804 = yyj3804 > l + } else { + yyb3804 = r.CheckBreak() + } + if yyb3804 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3804++ + if yyhl3804 { + yyb3804 = yyj3804 > l + } else { + yyb3804 = r.CheckBreak() + } + if yyb3804 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reference = ObjectReference{} + } else { + yyv3807 := &x.Reference + yyv3807.CodecDecodeSelf(d) + } + for { + yyj3804++ + if yyhl3804 { + yyb3804 = yyj3804 > l + } else { + yyb3804 = r.CheckBreak() + } + if yyb3804 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3804-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EventSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3808 := z.EncBinary() + _ = yym3808 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3809 := !z.EncBinary() + yy2arr3809 := z.EncBasicHandle().StructToArray + var yyq3809 [2]bool + _, _, _ = yysep3809, yyq3809, yy2arr3809 + const yyr3809 bool = false + yyq3809[0] = x.Component != "" + yyq3809[1] = x.Host != "" + var yynn3809 int + if yyr3809 || yy2arr3809 { + r.EncodeArrayStart(2) + } else { + yynn3809 = 0 + for _, b := range yyq3809 { + if b { + yynn3809++ + } + } + r.EncodeMapStart(yynn3809) + yynn3809 = 0 + } + if yyr3809 || yy2arr3809 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3809[0] { + yym3811 := z.EncBinary() + _ = yym3811 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Component)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3809[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("component")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3812 := z.EncBinary() + _ = yym3812 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Component)) + } + } + } + if yyr3809 || yy2arr3809 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3809[1] { + yym3814 := z.EncBinary() + _ = yym3814 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3809[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("host")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3815 := z.EncBinary() + _ = yym3815 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } + } + if yyr3809 || yy2arr3809 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EventSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3816 := z.DecBinary() + _ = yym3816 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3817 := r.ContainerType() + if yyct3817 == codecSelferValueTypeMap1234 { + yyl3817 := r.ReadMapStart() + if yyl3817 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3817, d) + } + } else if yyct3817 == codecSelferValueTypeArray1234 { + yyl3817 := r.ReadArrayStart() + if yyl3817 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3817, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EventSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3818Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3818Slc + var yyhl3818 bool = l >= 0 + for yyj3818 := 0; ; yyj3818++ { + if yyhl3818 { + if yyj3818 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3818Slc = r.DecodeBytes(yys3818Slc, true, true) + yys3818 := string(yys3818Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3818 { + case "component": + if r.TryDecodeAsNil() { + x.Component = "" + } else { + x.Component = string(r.DecodeString()) + } + case "host": + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3818) + } // end switch yys3818 + } // end for yyj3818 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EventSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3821 int + var yyb3821 bool + var yyhl3821 bool = l >= 0 + yyj3821++ + if yyhl3821 { + yyb3821 = yyj3821 > l + } else { + yyb3821 = r.CheckBreak() + } + if yyb3821 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Component = "" + } else { + x.Component = string(r.DecodeString()) + } + yyj3821++ + if yyhl3821 { + yyb3821 = yyj3821 > l + } else { + yyb3821 = r.CheckBreak() + } + if yyb3821 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + for { + yyj3821++ + if yyhl3821 { + yyb3821 = yyj3821 > l + } else { + yyb3821 = r.CheckBreak() + } + if yyb3821 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3821-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Event) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3824 := z.EncBinary() + _ = yym3824 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3825 := !z.EncBinary() + yy2arr3825 := z.EncBasicHandle().StructToArray + var yyq3825 [11]bool + _, _, _ = yysep3825, yyq3825, yy2arr3825 + const yyr3825 bool = false + yyq3825[0] = x.Kind != "" + yyq3825[1] = x.APIVersion != "" + yyq3825[4] = x.Reason != "" + yyq3825[5] = x.Message != "" + yyq3825[6] = true + yyq3825[7] = true + yyq3825[8] = true + yyq3825[9] = x.Count != 0 + yyq3825[10] = x.Type != "" + var yynn3825 int + if yyr3825 || yy2arr3825 { + r.EncodeArrayStart(11) + } else { + yynn3825 = 2 + for _, b := range yyq3825 { + if b { + yynn3825++ + } + } + r.EncodeMapStart(yynn3825) + yynn3825 = 0 + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[0] { + yym3827 := z.EncBinary() + _ = yym3827 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3825[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3828 := z.EncBinary() + _ = yym3828 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[1] { + yym3830 := z.EncBinary() + _ = yym3830 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3825[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3831 := z.EncBinary() + _ = yym3831 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy3833 := &x.ObjectMeta + yy3833.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3834 := &x.ObjectMeta + yy3834.CodecEncodeSelf(e) + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy3836 := &x.InvolvedObject + yy3836.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("involvedObject")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3837 := &x.InvolvedObject + yy3837.CodecEncodeSelf(e) + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[4] { + yym3839 := z.EncBinary() + _ = yym3839 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3825[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3840 := z.EncBinary() + _ = yym3840 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[5] { + yym3842 := z.EncBinary() + _ = yym3842 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3825[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3843 := z.EncBinary() + _ = yym3843 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[6] { + yy3845 := &x.Source + yy3845.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3825[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("source")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3846 := &x.Source + yy3846.CodecEncodeSelf(e) + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[7] { + yy3848 := &x.FirstTimestamp + yym3849 := z.EncBinary() + _ = yym3849 + if false { + } else if z.HasExtensions() && z.EncExt(yy3848) { + } else if yym3849 { + z.EncBinaryMarshal(yy3848) + } else if !yym3849 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3848) + } else { + z.EncFallback(yy3848) + } + } else { + r.EncodeNil() + } + } else { + if yyq3825[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("firstTimestamp")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3850 := &x.FirstTimestamp + yym3851 := z.EncBinary() + _ = yym3851 + if false { + } else if z.HasExtensions() && z.EncExt(yy3850) { + } else if yym3851 { + z.EncBinaryMarshal(yy3850) + } else if !yym3851 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3850) + } else { + z.EncFallback(yy3850) + } + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[8] { + yy3853 := &x.LastTimestamp + yym3854 := z.EncBinary() + _ = yym3854 + if false { + } else if z.HasExtensions() && z.EncExt(yy3853) { + } else if yym3854 { + z.EncBinaryMarshal(yy3853) + } else if !yym3854 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3853) + } else { + z.EncFallback(yy3853) + } + } else { + r.EncodeNil() + } + } else { + if yyq3825[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastTimestamp")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3855 := &x.LastTimestamp + yym3856 := z.EncBinary() + _ = yym3856 + if false { + } else if z.HasExtensions() && z.EncExt(yy3855) { + } else if yym3856 { + z.EncBinaryMarshal(yy3855) + } else if !yym3856 && z.IsJSONHandle() { + z.EncJSONMarshal(yy3855) + } else { + z.EncFallback(yy3855) + } + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[9] { + yym3858 := z.EncBinary() + _ = yym3858 + if false { + } else { + r.EncodeInt(int64(x.Count)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq3825[9] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("count")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3859 := z.EncBinary() + _ = yym3859 + if false { + } else { + r.EncodeInt(int64(x.Count)) + } + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3825[10] { + yym3861 := z.EncBinary() + _ = yym3861 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Type)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3825[10] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3862 := z.EncBinary() + _ = yym3862 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Type)) + } + } + } + if yyr3825 || yy2arr3825 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Event) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3863 := z.DecBinary() + _ = yym3863 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3864 := r.ContainerType() + if yyct3864 == codecSelferValueTypeMap1234 { + yyl3864 := r.ReadMapStart() + if yyl3864 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3864, d) + } + } else if yyct3864 == codecSelferValueTypeArray1234 { + yyl3864 := r.ReadArrayStart() + if yyl3864 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3864, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Event) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3865Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3865Slc + var yyhl3865 bool = l >= 0 + for yyj3865 := 0; ; yyj3865++ { + if yyhl3865 { + if yyj3865 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3865Slc = r.DecodeBytes(yys3865Slc, true, true) + yys3865 := string(yys3865Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3865 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3868 := &x.ObjectMeta + yyv3868.CodecDecodeSelf(d) + } + case "involvedObject": + if r.TryDecodeAsNil() { + x.InvolvedObject = ObjectReference{} + } else { + yyv3869 := &x.InvolvedObject + yyv3869.CodecDecodeSelf(d) + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "source": + if r.TryDecodeAsNil() { + x.Source = EventSource{} + } else { + yyv3872 := &x.Source + yyv3872.CodecDecodeSelf(d) + } + case "firstTimestamp": + if r.TryDecodeAsNil() { + x.FirstTimestamp = pkg2_unversioned.Time{} + } else { + yyv3873 := &x.FirstTimestamp + yym3874 := z.DecBinary() + _ = yym3874 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3873) { + } else if yym3874 { + z.DecBinaryUnmarshal(yyv3873) + } else if !yym3874 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3873) + } else { + z.DecFallback(yyv3873, false) + } + } + case "lastTimestamp": + if r.TryDecodeAsNil() { + x.LastTimestamp = pkg2_unversioned.Time{} + } else { + yyv3875 := &x.LastTimestamp + yym3876 := z.DecBinary() + _ = yym3876 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3875) { + } else if yym3876 { + z.DecBinaryUnmarshal(yyv3875) + } else if !yym3876 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3875) + } else { + z.DecFallback(yyv3875, false) + } + } + case "count": + if r.TryDecodeAsNil() { + x.Count = 0 + } else { + x.Count = int32(r.DecodeInt(32)) + } + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys3865) + } // end switch yys3865 + } // end for yyj3865 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Event) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3879 int + var yyb3879 bool + var yyhl3879 bool = l >= 0 + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv3882 := &x.ObjectMeta + yyv3882.CodecDecodeSelf(d) + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.InvolvedObject = ObjectReference{} + } else { + yyv3883 := &x.InvolvedObject + yyv3883.CodecDecodeSelf(d) + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Source = EventSource{} + } else { + yyv3886 := &x.Source + yyv3886.CodecDecodeSelf(d) + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FirstTimestamp = pkg2_unversioned.Time{} + } else { + yyv3887 := &x.FirstTimestamp + yym3888 := z.DecBinary() + _ = yym3888 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3887) { + } else if yym3888 { + z.DecBinaryUnmarshal(yyv3887) + } else if !yym3888 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3887) + } else { + z.DecFallback(yyv3887, false) + } + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTimestamp = pkg2_unversioned.Time{} + } else { + yyv3889 := &x.LastTimestamp + yym3890 := z.DecBinary() + _ = yym3890 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3889) { + } else if yym3890 { + z.DecBinaryUnmarshal(yyv3889) + } else if !yym3890 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv3889) + } else { + z.DecFallback(yyv3889, false) + } + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Count = 0 + } else { + x.Count = int32(r.DecodeInt(32)) + } + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = string(r.DecodeString()) + } + for { + yyj3879++ + if yyhl3879 { + yyb3879 = yyj3879 > l + } else { + yyb3879 = r.CheckBreak() + } + if yyb3879 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3879-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *EventList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3893 := z.EncBinary() + _ = yym3893 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3894 := !z.EncBinary() + yy2arr3894 := z.EncBasicHandle().StructToArray + var yyq3894 [4]bool + _, _, _ = yysep3894, yyq3894, yy2arr3894 + const yyr3894 bool = false + yyq3894[0] = x.Kind != "" + yyq3894[1] = x.APIVersion != "" + yyq3894[2] = true + var yynn3894 int + if yyr3894 || yy2arr3894 { + r.EncodeArrayStart(4) + } else { + yynn3894 = 1 + for _, b := range yyq3894 { + if b { + yynn3894++ + } + } + r.EncodeMapStart(yynn3894) + yynn3894 = 0 + } + if yyr3894 || yy2arr3894 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3894[0] { + yym3896 := z.EncBinary() + _ = yym3896 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3894[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3897 := z.EncBinary() + _ = yym3897 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3894 || yy2arr3894 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3894[1] { + yym3899 := z.EncBinary() + _ = yym3899 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3894[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3900 := z.EncBinary() + _ = yym3900 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3894 || yy2arr3894 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3894[2] { + yy3902 := &x.ListMeta + yym3903 := z.EncBinary() + _ = yym3903 + if false { + } else if z.HasExtensions() && z.EncExt(yy3902) { + } else { + z.EncFallback(yy3902) + } + } else { + r.EncodeNil() + } + } else { + if yyq3894[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3904 := &x.ListMeta + yym3905 := z.EncBinary() + _ = yym3905 + if false { + } else if z.HasExtensions() && z.EncExt(yy3904) { + } else { + z.EncFallback(yy3904) + } + } + } + if yyr3894 || yy2arr3894 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3907 := z.EncBinary() + _ = yym3907 + if false { + } else { + h.encSliceEvent(([]Event)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3908 := z.EncBinary() + _ = yym3908 + if false { + } else { + h.encSliceEvent(([]Event)(x.Items), e) + } + } + } + if yyr3894 || yy2arr3894 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *EventList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3909 := z.DecBinary() + _ = yym3909 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3910 := r.ContainerType() + if yyct3910 == codecSelferValueTypeMap1234 { + yyl3910 := r.ReadMapStart() + if yyl3910 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3910, d) + } + } else if yyct3910 == codecSelferValueTypeArray1234 { + yyl3910 := r.ReadArrayStart() + if yyl3910 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3910, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *EventList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3911Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3911Slc + var yyhl3911 bool = l >= 0 + for yyj3911 := 0; ; yyj3911++ { + if yyhl3911 { + if yyj3911 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3911Slc = r.DecodeBytes(yys3911Slc, true, true) + yys3911 := string(yys3911Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3911 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3914 := &x.ListMeta + yym3915 := z.DecBinary() + _ = yym3915 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3914) { + } else { + z.DecFallback(yyv3914, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3916 := &x.Items + yym3917 := z.DecBinary() + _ = yym3917 + if false { + } else { + h.decSliceEvent((*[]Event)(yyv3916), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3911) + } // end switch yys3911 + } // end for yyj3911 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *EventList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3918 int + var yyb3918 bool + var yyhl3918 bool = l >= 0 + yyj3918++ + if yyhl3918 { + yyb3918 = yyj3918 > l + } else { + yyb3918 = r.CheckBreak() + } + if yyb3918 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3918++ + if yyhl3918 { + yyb3918 = yyj3918 > l + } else { + yyb3918 = r.CheckBreak() + } + if yyb3918 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3918++ + if yyhl3918 { + yyb3918 = yyj3918 > l + } else { + yyb3918 = r.CheckBreak() + } + if yyb3918 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3921 := &x.ListMeta + yym3922 := z.DecBinary() + _ = yym3922 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3921) { + } else { + z.DecFallback(yyv3921, false) + } + } + yyj3918++ + if yyhl3918 { + yyb3918 = yyj3918 > l + } else { + yyb3918 = r.CheckBreak() + } + if yyb3918 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3923 := &x.Items + yym3924 := z.DecBinary() + _ = yym3924 + if false { + } else { + h.decSliceEvent((*[]Event)(yyv3923), d) + } + } + for { + yyj3918++ + if yyhl3918 { + yyb3918 = yyj3918 > l + } else { + yyb3918 = r.CheckBreak() + } + if yyb3918 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3918-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *List) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3925 := z.EncBinary() + _ = yym3925 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3926 := !z.EncBinary() + yy2arr3926 := z.EncBasicHandle().StructToArray + var yyq3926 [4]bool + _, _, _ = yysep3926, yyq3926, yy2arr3926 + const yyr3926 bool = false + yyq3926[0] = x.Kind != "" + yyq3926[1] = x.APIVersion != "" + yyq3926[2] = true + var yynn3926 int + if yyr3926 || yy2arr3926 { + r.EncodeArrayStart(4) + } else { + yynn3926 = 1 + for _, b := range yyq3926 { + if b { + yynn3926++ + } + } + r.EncodeMapStart(yynn3926) + yynn3926 = 0 + } + if yyr3926 || yy2arr3926 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3926[0] { + yym3928 := z.EncBinary() + _ = yym3928 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3926[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3929 := z.EncBinary() + _ = yym3929 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3926 || yy2arr3926 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3926[1] { + yym3931 := z.EncBinary() + _ = yym3931 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3926[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym3932 := z.EncBinary() + _ = yym3932 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3926 || yy2arr3926 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3926[2] { + yy3934 := &x.ListMeta + yym3935 := z.EncBinary() + _ = yym3935 + if false { + } else if z.HasExtensions() && z.EncExt(yy3934) { + } else { + z.EncFallback(yy3934) + } + } else { + r.EncodeNil() + } + } else { + if yyq3926[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy3936 := &x.ListMeta + yym3937 := z.EncBinary() + _ = yym3937 + if false { + } else if z.HasExtensions() && z.EncExt(yy3936) { + } else { + z.EncFallback(yy3936) + } + } + } + if yyr3926 || yy2arr3926 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3939 := z.EncBinary() + _ = yym3939 + if false { + } else { + h.encSliceruntime_RawExtension(([]pkg5_runtime.RawExtension)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym3940 := z.EncBinary() + _ = yym3940 + if false { + } else { + h.encSliceruntime_RawExtension(([]pkg5_runtime.RawExtension)(x.Items), e) + } + } + } + if yyr3926 || yy2arr3926 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *List) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3941 := z.DecBinary() + _ = yym3941 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3942 := r.ContainerType() + if yyct3942 == codecSelferValueTypeMap1234 { + yyl3942 := r.ReadMapStart() + if yyl3942 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3942, d) + } + } else if yyct3942 == codecSelferValueTypeArray1234 { + yyl3942 := r.ReadArrayStart() + if yyl3942 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3942, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *List) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3943Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3943Slc + var yyhl3943 bool = l >= 0 + for yyj3943 := 0; ; yyj3943++ { + if yyhl3943 { + if yyj3943 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3943Slc = r.DecodeBytes(yys3943Slc, true, true) + yys3943 := string(yys3943Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3943 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3946 := &x.ListMeta + yym3947 := z.DecBinary() + _ = yym3947 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3946) { + } else { + z.DecFallback(yyv3946, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3948 := &x.Items + yym3949 := z.DecBinary() + _ = yym3949 + if false { + } else { + h.decSliceruntime_RawExtension((*[]pkg5_runtime.RawExtension)(yyv3948), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3943) + } // end switch yys3943 + } // end for yyj3943 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *List) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3950 int + var yyb3950 bool + var yyhl3950 bool = l >= 0 + yyj3950++ + if yyhl3950 { + yyb3950 = yyj3950 > l + } else { + yyb3950 = r.CheckBreak() + } + if yyb3950 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj3950++ + if yyhl3950 { + yyb3950 = yyj3950 > l + } else { + yyb3950 = r.CheckBreak() + } + if yyb3950 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj3950++ + if yyhl3950 { + yyb3950 = yyj3950 > l + } else { + yyb3950 = r.CheckBreak() + } + if yyb3950 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv3953 := &x.ListMeta + yym3954 := z.DecBinary() + _ = yym3954 + if false { + } else if z.HasExtensions() && z.DecExt(yyv3953) { + } else { + z.DecFallback(yyv3953, false) + } + } + yyj3950++ + if yyhl3950 { + yyb3950 = yyj3950 > l + } else { + yyb3950 = r.CheckBreak() + } + if yyb3950 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv3955 := &x.Items + yym3956 := z.DecBinary() + _ = yym3956 + if false { + } else { + h.decSliceruntime_RawExtension((*[]pkg5_runtime.RawExtension)(yyv3955), d) + } + } + for { + yyj3950++ + if yyhl3950 { + yyb3950 = yyj3950 > l + } else { + yyb3950 = r.CheckBreak() + } + if yyb3950 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3950-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x LimitType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym3957 := z.EncBinary() + _ = yym3957 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *LimitType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3958 := z.DecBinary() + _ = yym3958 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *LimitRangeItem) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3959 := z.EncBinary() + _ = yym3959 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3960 := !z.EncBinary() + yy2arr3960 := z.EncBasicHandle().StructToArray + var yyq3960 [6]bool + _, _, _ = yysep3960, yyq3960, yy2arr3960 + const yyr3960 bool = false + yyq3960[0] = x.Type != "" + yyq3960[1] = len(x.Max) != 0 + yyq3960[2] = len(x.Min) != 0 + yyq3960[3] = len(x.Default) != 0 + yyq3960[4] = len(x.DefaultRequest) != 0 + yyq3960[5] = len(x.MaxLimitRequestRatio) != 0 + var yynn3960 int + if yyr3960 || yy2arr3960 { + r.EncodeArrayStart(6) + } else { + yynn3960 = 0 + for _, b := range yyq3960 { + if b { + yynn3960++ + } + } + r.EncodeMapStart(yynn3960) + yynn3960 = 0 + } + if yyr3960 || yy2arr3960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3960[0] { + x.Type.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3960[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + } + if yyr3960 || yy2arr3960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3960[1] { + if x.Max == nil { + r.EncodeNil() + } else { + x.Max.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3960[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("max")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Max == nil { + r.EncodeNil() + } else { + x.Max.CodecEncodeSelf(e) + } + } + } + if yyr3960 || yy2arr3960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3960[2] { + if x.Min == nil { + r.EncodeNil() + } else { + x.Min.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3960[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("min")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Min == nil { + r.EncodeNil() + } else { + x.Min.CodecEncodeSelf(e) + } + } + } + if yyr3960 || yy2arr3960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3960[3] { + if x.Default == nil { + r.EncodeNil() + } else { + x.Default.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3960[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("default")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Default == nil { + r.EncodeNil() + } else { + x.Default.CodecEncodeSelf(e) + } + } + } + if yyr3960 || yy2arr3960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3960[4] { + if x.DefaultRequest == nil { + r.EncodeNil() + } else { + x.DefaultRequest.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3960[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultRequest")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultRequest == nil { + r.EncodeNil() + } else { + x.DefaultRequest.CodecEncodeSelf(e) + } + } + } + if yyr3960 || yy2arr3960 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3960[5] { + if x.MaxLimitRequestRatio == nil { + r.EncodeNil() + } else { + x.MaxLimitRequestRatio.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq3960[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("maxLimitRequestRatio")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.MaxLimitRequestRatio == nil { + r.EncodeNil() + } else { + x.MaxLimitRequestRatio.CodecEncodeSelf(e) + } + } + } + if yyr3960 || yy2arr3960 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LimitRangeItem) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3967 := z.DecBinary() + _ = yym3967 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3968 := r.ContainerType() + if yyct3968 == codecSelferValueTypeMap1234 { + yyl3968 := r.ReadMapStart() + if yyl3968 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3968, d) + } + } else if yyct3968 == codecSelferValueTypeArray1234 { + yyl3968 := r.ReadArrayStart() + if yyl3968 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3968, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LimitRangeItem) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3969Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3969Slc + var yyhl3969 bool = l >= 0 + for yyj3969 := 0; ; yyj3969++ { + if yyhl3969 { + if yyj3969 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3969Slc = r.DecodeBytes(yys3969Slc, true, true) + yys3969 := string(yys3969Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3969 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = LimitType(r.DecodeString()) + } + case "max": + if r.TryDecodeAsNil() { + x.Max = nil + } else { + yyv3971 := &x.Max + yyv3971.CodecDecodeSelf(d) + } + case "min": + if r.TryDecodeAsNil() { + x.Min = nil + } else { + yyv3972 := &x.Min + yyv3972.CodecDecodeSelf(d) + } + case "default": + if r.TryDecodeAsNil() { + x.Default = nil + } else { + yyv3973 := &x.Default + yyv3973.CodecDecodeSelf(d) + } + case "defaultRequest": + if r.TryDecodeAsNil() { + x.DefaultRequest = nil + } else { + yyv3974 := &x.DefaultRequest + yyv3974.CodecDecodeSelf(d) + } + case "maxLimitRequestRatio": + if r.TryDecodeAsNil() { + x.MaxLimitRequestRatio = nil + } else { + yyv3975 := &x.MaxLimitRequestRatio + yyv3975.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys3969) + } // end switch yys3969 + } // end for yyj3969 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LimitRangeItem) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3976 int + var yyb3976 bool + var yyhl3976 bool = l >= 0 + yyj3976++ + if yyhl3976 { + yyb3976 = yyj3976 > l + } else { + yyb3976 = r.CheckBreak() + } + if yyb3976 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = LimitType(r.DecodeString()) + } + yyj3976++ + if yyhl3976 { + yyb3976 = yyj3976 > l + } else { + yyb3976 = r.CheckBreak() + } + if yyb3976 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Max = nil + } else { + yyv3978 := &x.Max + yyv3978.CodecDecodeSelf(d) + } + yyj3976++ + if yyhl3976 { + yyb3976 = yyj3976 > l + } else { + yyb3976 = r.CheckBreak() + } + if yyb3976 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Min = nil + } else { + yyv3979 := &x.Min + yyv3979.CodecDecodeSelf(d) + } + yyj3976++ + if yyhl3976 { + yyb3976 = yyj3976 > l + } else { + yyb3976 = r.CheckBreak() + } + if yyb3976 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Default = nil + } else { + yyv3980 := &x.Default + yyv3980.CodecDecodeSelf(d) + } + yyj3976++ + if yyhl3976 { + yyb3976 = yyj3976 > l + } else { + yyb3976 = r.CheckBreak() + } + if yyb3976 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DefaultRequest = nil + } else { + yyv3981 := &x.DefaultRequest + yyv3981.CodecDecodeSelf(d) + } + yyj3976++ + if yyhl3976 { + yyb3976 = yyj3976 > l + } else { + yyb3976 = r.CheckBreak() + } + if yyb3976 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MaxLimitRequestRatio = nil + } else { + yyv3982 := &x.MaxLimitRequestRatio + yyv3982.CodecDecodeSelf(d) + } + for { + yyj3976++ + if yyhl3976 { + yyb3976 = yyj3976 > l + } else { + yyb3976 = r.CheckBreak() + } + if yyb3976 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3976-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LimitRangeSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3983 := z.EncBinary() + _ = yym3983 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3984 := !z.EncBinary() + yy2arr3984 := z.EncBasicHandle().StructToArray + var yyq3984 [1]bool + _, _, _ = yysep3984, yyq3984, yy2arr3984 + const yyr3984 bool = false + var yynn3984 int + if yyr3984 || yy2arr3984 { + r.EncodeArrayStart(1) + } else { + yynn3984 = 1 + for _, b := range yyq3984 { + if b { + yynn3984++ + } + } + r.EncodeMapStart(yynn3984) + yynn3984 = 0 + } + if yyr3984 || yy2arr3984 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Limits == nil { + r.EncodeNil() + } else { + yym3986 := z.EncBinary() + _ = yym3986 + if false { + } else { + h.encSliceLimitRangeItem(([]LimitRangeItem)(x.Limits), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("limits")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Limits == nil { + r.EncodeNil() + } else { + yym3987 := z.EncBinary() + _ = yym3987 + if false { + } else { + h.encSliceLimitRangeItem(([]LimitRangeItem)(x.Limits), e) + } + } + } + if yyr3984 || yy2arr3984 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LimitRangeSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym3988 := z.DecBinary() + _ = yym3988 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct3989 := r.ContainerType() + if yyct3989 == codecSelferValueTypeMap1234 { + yyl3989 := r.ReadMapStart() + if yyl3989 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl3989, d) + } + } else if yyct3989 == codecSelferValueTypeArray1234 { + yyl3989 := r.ReadArrayStart() + if yyl3989 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl3989, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LimitRangeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3990Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3990Slc + var yyhl3990 bool = l >= 0 + for yyj3990 := 0; ; yyj3990++ { + if yyhl3990 { + if yyj3990 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3990Slc = r.DecodeBytes(yys3990Slc, true, true) + yys3990 := string(yys3990Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3990 { + case "limits": + if r.TryDecodeAsNil() { + x.Limits = nil + } else { + yyv3991 := &x.Limits + yym3992 := z.DecBinary() + _ = yym3992 + if false { + } else { + h.decSliceLimitRangeItem((*[]LimitRangeItem)(yyv3991), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys3990) + } // end switch yys3990 + } // end for yyj3990 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LimitRangeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj3993 int + var yyb3993 bool + var yyhl3993 bool = l >= 0 + yyj3993++ + if yyhl3993 { + yyb3993 = yyj3993 > l + } else { + yyb3993 = r.CheckBreak() + } + if yyb3993 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Limits = nil + } else { + yyv3994 := &x.Limits + yym3995 := z.DecBinary() + _ = yym3995 + if false { + } else { + h.decSliceLimitRangeItem((*[]LimitRangeItem)(yyv3994), d) + } + } + for { + yyj3993++ + if yyhl3993 { + yyb3993 = yyj3993 > l + } else { + yyb3993 = r.CheckBreak() + } + if yyb3993 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj3993-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LimitRange) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym3996 := z.EncBinary() + _ = yym3996 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep3997 := !z.EncBinary() + yy2arr3997 := z.EncBasicHandle().StructToArray + var yyq3997 [4]bool + _, _, _ = yysep3997, yyq3997, yy2arr3997 + const yyr3997 bool = false + yyq3997[0] = x.Kind != "" + yyq3997[1] = x.APIVersion != "" + yyq3997[2] = true + yyq3997[3] = true + var yynn3997 int + if yyr3997 || yy2arr3997 { + r.EncodeArrayStart(4) + } else { + yynn3997 = 0 + for _, b := range yyq3997 { + if b { + yynn3997++ + } + } + r.EncodeMapStart(yynn3997) + yynn3997 = 0 + } + if yyr3997 || yy2arr3997 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3997[0] { + yym3999 := z.EncBinary() + _ = yym3999 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3997[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4000 := z.EncBinary() + _ = yym4000 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr3997 || yy2arr3997 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3997[1] { + yym4002 := z.EncBinary() + _ = yym4002 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq3997[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4003 := z.EncBinary() + _ = yym4003 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr3997 || yy2arr3997 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3997[2] { + yy4005 := &x.ObjectMeta + yy4005.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3997[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4006 := &x.ObjectMeta + yy4006.CodecEncodeSelf(e) + } + } + if yyr3997 || yy2arr3997 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq3997[3] { + yy4008 := &x.Spec + yy4008.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq3997[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4009 := &x.Spec + yy4009.CodecEncodeSelf(e) + } + } + if yyr3997 || yy2arr3997 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LimitRange) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4010 := z.DecBinary() + _ = yym4010 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4011 := r.ContainerType() + if yyct4011 == codecSelferValueTypeMap1234 { + yyl4011 := r.ReadMapStart() + if yyl4011 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4011, d) + } + } else if yyct4011 == codecSelferValueTypeArray1234 { + yyl4011 := r.ReadArrayStart() + if yyl4011 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4011, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LimitRange) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4012Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4012Slc + var yyhl4012 bool = l >= 0 + for yyj4012 := 0; ; yyj4012++ { + if yyhl4012 { + if yyj4012 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4012Slc = r.DecodeBytes(yys4012Slc, true, true) + yys4012 := string(yys4012Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4012 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4015 := &x.ObjectMeta + yyv4015.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = LimitRangeSpec{} + } else { + yyv4016 := &x.Spec + yyv4016.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys4012) + } // end switch yys4012 + } // end for yyj4012 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LimitRange) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4017 int + var yyb4017 bool + var yyhl4017 bool = l >= 0 + yyj4017++ + if yyhl4017 { + yyb4017 = yyj4017 > l + } else { + yyb4017 = r.CheckBreak() + } + if yyb4017 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4017++ + if yyhl4017 { + yyb4017 = yyj4017 > l + } else { + yyb4017 = r.CheckBreak() + } + if yyb4017 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4017++ + if yyhl4017 { + yyb4017 = yyj4017 > l + } else { + yyb4017 = r.CheckBreak() + } + if yyb4017 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4020 := &x.ObjectMeta + yyv4020.CodecDecodeSelf(d) + } + yyj4017++ + if yyhl4017 { + yyb4017 = yyj4017 > l + } else { + yyb4017 = r.CheckBreak() + } + if yyb4017 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = LimitRangeSpec{} + } else { + yyv4021 := &x.Spec + yyv4021.CodecDecodeSelf(d) + } + for { + yyj4017++ + if yyhl4017 { + yyb4017 = yyj4017 > l + } else { + yyb4017 = r.CheckBreak() + } + if yyb4017 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4017-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *LimitRangeList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4022 := z.EncBinary() + _ = yym4022 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4023 := !z.EncBinary() + yy2arr4023 := z.EncBasicHandle().StructToArray + var yyq4023 [4]bool + _, _, _ = yysep4023, yyq4023, yy2arr4023 + const yyr4023 bool = false + yyq4023[0] = x.Kind != "" + yyq4023[1] = x.APIVersion != "" + yyq4023[2] = true + var yynn4023 int + if yyr4023 || yy2arr4023 { + r.EncodeArrayStart(4) + } else { + yynn4023 = 1 + for _, b := range yyq4023 { + if b { + yynn4023++ + } + } + r.EncodeMapStart(yynn4023) + yynn4023 = 0 + } + if yyr4023 || yy2arr4023 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4023[0] { + yym4025 := z.EncBinary() + _ = yym4025 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4023[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4026 := z.EncBinary() + _ = yym4026 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4023 || yy2arr4023 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4023[1] { + yym4028 := z.EncBinary() + _ = yym4028 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4023[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4029 := z.EncBinary() + _ = yym4029 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4023 || yy2arr4023 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4023[2] { + yy4031 := &x.ListMeta + yym4032 := z.EncBinary() + _ = yym4032 + if false { + } else if z.HasExtensions() && z.EncExt(yy4031) { + } else { + z.EncFallback(yy4031) + } + } else { + r.EncodeNil() + } + } else { + if yyq4023[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4033 := &x.ListMeta + yym4034 := z.EncBinary() + _ = yym4034 + if false { + } else if z.HasExtensions() && z.EncExt(yy4033) { + } else { + z.EncFallback(yy4033) + } + } + } + if yyr4023 || yy2arr4023 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4036 := z.EncBinary() + _ = yym4036 + if false { + } else { + h.encSliceLimitRange(([]LimitRange)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4037 := z.EncBinary() + _ = yym4037 + if false { + } else { + h.encSliceLimitRange(([]LimitRange)(x.Items), e) + } + } + } + if yyr4023 || yy2arr4023 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *LimitRangeList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4038 := z.DecBinary() + _ = yym4038 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4039 := r.ContainerType() + if yyct4039 == codecSelferValueTypeMap1234 { + yyl4039 := r.ReadMapStart() + if yyl4039 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4039, d) + } + } else if yyct4039 == codecSelferValueTypeArray1234 { + yyl4039 := r.ReadArrayStart() + if yyl4039 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4039, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *LimitRangeList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4040Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4040Slc + var yyhl4040 bool = l >= 0 + for yyj4040 := 0; ; yyj4040++ { + if yyhl4040 { + if yyj4040 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4040Slc = r.DecodeBytes(yys4040Slc, true, true) + yys4040 := string(yys4040Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4040 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4043 := &x.ListMeta + yym4044 := z.DecBinary() + _ = yym4044 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4043) { + } else { + z.DecFallback(yyv4043, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4045 := &x.Items + yym4046 := z.DecBinary() + _ = yym4046 + if false { + } else { + h.decSliceLimitRange((*[]LimitRange)(yyv4045), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4040) + } // end switch yys4040 + } // end for yyj4040 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *LimitRangeList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4047 int + var yyb4047 bool + var yyhl4047 bool = l >= 0 + yyj4047++ + if yyhl4047 { + yyb4047 = yyj4047 > l + } else { + yyb4047 = r.CheckBreak() + } + if yyb4047 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4047++ + if yyhl4047 { + yyb4047 = yyj4047 > l + } else { + yyb4047 = r.CheckBreak() + } + if yyb4047 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4047++ + if yyhl4047 { + yyb4047 = yyj4047 > l + } else { + yyb4047 = r.CheckBreak() + } + if yyb4047 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4050 := &x.ListMeta + yym4051 := z.DecBinary() + _ = yym4051 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4050) { + } else { + z.DecFallback(yyv4050, false) + } + } + yyj4047++ + if yyhl4047 { + yyb4047 = yyj4047 > l + } else { + yyb4047 = r.CheckBreak() + } + if yyb4047 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4052 := &x.Items + yym4053 := z.DecBinary() + _ = yym4053 + if false { + } else { + h.decSliceLimitRange((*[]LimitRange)(yyv4052), d) + } + } + for { + yyj4047++ + if yyhl4047 { + yyb4047 = yyj4047 > l + } else { + yyb4047 = r.CheckBreak() + } + if yyb4047 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4047-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ResourceQuotaScope) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym4054 := z.EncBinary() + _ = yym4054 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ResourceQuotaScope) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4055 := z.DecBinary() + _ = yym4055 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ResourceQuotaSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4056 := z.EncBinary() + _ = yym4056 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4057 := !z.EncBinary() + yy2arr4057 := z.EncBasicHandle().StructToArray + var yyq4057 [2]bool + _, _, _ = yysep4057, yyq4057, yy2arr4057 + const yyr4057 bool = false + yyq4057[0] = len(x.Hard) != 0 + yyq4057[1] = len(x.Scopes) != 0 + var yynn4057 int + if yyr4057 || yy2arr4057 { + r.EncodeArrayStart(2) + } else { + yynn4057 = 0 + for _, b := range yyq4057 { + if b { + yynn4057++ + } + } + r.EncodeMapStart(yynn4057) + yynn4057 = 0 + } + if yyr4057 || yy2arr4057 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4057[0] { + if x.Hard == nil { + r.EncodeNil() + } else { + x.Hard.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4057[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hard")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Hard == nil { + r.EncodeNil() + } else { + x.Hard.CodecEncodeSelf(e) + } + } + } + if yyr4057 || yy2arr4057 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4057[1] { + if x.Scopes == nil { + r.EncodeNil() + } else { + yym4060 := z.EncBinary() + _ = yym4060 + if false { + } else { + h.encSliceResourceQuotaScope(([]ResourceQuotaScope)(x.Scopes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4057[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("scopes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Scopes == nil { + r.EncodeNil() + } else { + yym4061 := z.EncBinary() + _ = yym4061 + if false { + } else { + h.encSliceResourceQuotaScope(([]ResourceQuotaScope)(x.Scopes), e) + } + } + } + } + if yyr4057 || yy2arr4057 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceQuotaSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4062 := z.DecBinary() + _ = yym4062 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4063 := r.ContainerType() + if yyct4063 == codecSelferValueTypeMap1234 { + yyl4063 := r.ReadMapStart() + if yyl4063 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4063, d) + } + } else if yyct4063 == codecSelferValueTypeArray1234 { + yyl4063 := r.ReadArrayStart() + if yyl4063 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4063, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceQuotaSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4064Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4064Slc + var yyhl4064 bool = l >= 0 + for yyj4064 := 0; ; yyj4064++ { + if yyhl4064 { + if yyj4064 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4064Slc = r.DecodeBytes(yys4064Slc, true, true) + yys4064 := string(yys4064Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4064 { + case "hard": + if r.TryDecodeAsNil() { + x.Hard = nil + } else { + yyv4065 := &x.Hard + yyv4065.CodecDecodeSelf(d) + } + case "scopes": + if r.TryDecodeAsNil() { + x.Scopes = nil + } else { + yyv4066 := &x.Scopes + yym4067 := z.DecBinary() + _ = yym4067 + if false { + } else { + h.decSliceResourceQuotaScope((*[]ResourceQuotaScope)(yyv4066), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4064) + } // end switch yys4064 + } // end for yyj4064 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceQuotaSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4068 int + var yyb4068 bool + var yyhl4068 bool = l >= 0 + yyj4068++ + if yyhl4068 { + yyb4068 = yyj4068 > l + } else { + yyb4068 = r.CheckBreak() + } + if yyb4068 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hard = nil + } else { + yyv4069 := &x.Hard + yyv4069.CodecDecodeSelf(d) + } + yyj4068++ + if yyhl4068 { + yyb4068 = yyj4068 > l + } else { + yyb4068 = r.CheckBreak() + } + if yyb4068 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Scopes = nil + } else { + yyv4070 := &x.Scopes + yym4071 := z.DecBinary() + _ = yym4071 + if false { + } else { + h.decSliceResourceQuotaScope((*[]ResourceQuotaScope)(yyv4070), d) + } + } + for { + yyj4068++ + if yyhl4068 { + yyb4068 = yyj4068 > l + } else { + yyb4068 = r.CheckBreak() + } + if yyb4068 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4068-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceQuotaStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4072 := z.EncBinary() + _ = yym4072 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4073 := !z.EncBinary() + yy2arr4073 := z.EncBasicHandle().StructToArray + var yyq4073 [2]bool + _, _, _ = yysep4073, yyq4073, yy2arr4073 + const yyr4073 bool = false + yyq4073[0] = len(x.Hard) != 0 + yyq4073[1] = len(x.Used) != 0 + var yynn4073 int + if yyr4073 || yy2arr4073 { + r.EncodeArrayStart(2) + } else { + yynn4073 = 0 + for _, b := range yyq4073 { + if b { + yynn4073++ + } + } + r.EncodeMapStart(yynn4073) + yynn4073 = 0 + } + if yyr4073 || yy2arr4073 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4073[0] { + if x.Hard == nil { + r.EncodeNil() + } else { + x.Hard.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4073[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hard")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Hard == nil { + r.EncodeNil() + } else { + x.Hard.CodecEncodeSelf(e) + } + } + } + if yyr4073 || yy2arr4073 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4073[1] { + if x.Used == nil { + r.EncodeNil() + } else { + x.Used.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4073[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("used")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Used == nil { + r.EncodeNil() + } else { + x.Used.CodecEncodeSelf(e) + } + } + } + if yyr4073 || yy2arr4073 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceQuotaStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4076 := z.DecBinary() + _ = yym4076 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4077 := r.ContainerType() + if yyct4077 == codecSelferValueTypeMap1234 { + yyl4077 := r.ReadMapStart() + if yyl4077 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4077, d) + } + } else if yyct4077 == codecSelferValueTypeArray1234 { + yyl4077 := r.ReadArrayStart() + if yyl4077 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4077, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceQuotaStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4078Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4078Slc + var yyhl4078 bool = l >= 0 + for yyj4078 := 0; ; yyj4078++ { + if yyhl4078 { + if yyj4078 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4078Slc = r.DecodeBytes(yys4078Slc, true, true) + yys4078 := string(yys4078Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4078 { + case "hard": + if r.TryDecodeAsNil() { + x.Hard = nil + } else { + yyv4079 := &x.Hard + yyv4079.CodecDecodeSelf(d) + } + case "used": + if r.TryDecodeAsNil() { + x.Used = nil + } else { + yyv4080 := &x.Used + yyv4080.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys4078) + } // end switch yys4078 + } // end for yyj4078 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceQuotaStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4081 int + var yyb4081 bool + var yyhl4081 bool = l >= 0 + yyj4081++ + if yyhl4081 { + yyb4081 = yyj4081 > l + } else { + yyb4081 = r.CheckBreak() + } + if yyb4081 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hard = nil + } else { + yyv4082 := &x.Hard + yyv4082.CodecDecodeSelf(d) + } + yyj4081++ + if yyhl4081 { + yyb4081 = yyj4081 > l + } else { + yyb4081 = r.CheckBreak() + } + if yyb4081 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Used = nil + } else { + yyv4083 := &x.Used + yyv4083.CodecDecodeSelf(d) + } + for { + yyj4081++ + if yyhl4081 { + yyb4081 = yyj4081 > l + } else { + yyb4081 = r.CheckBreak() + } + if yyb4081 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4081-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceQuota) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4084 := z.EncBinary() + _ = yym4084 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4085 := !z.EncBinary() + yy2arr4085 := z.EncBasicHandle().StructToArray + var yyq4085 [5]bool + _, _, _ = yysep4085, yyq4085, yy2arr4085 + const yyr4085 bool = false + yyq4085[0] = x.Kind != "" + yyq4085[1] = x.APIVersion != "" + yyq4085[2] = true + yyq4085[3] = true + yyq4085[4] = true + var yynn4085 int + if yyr4085 || yy2arr4085 { + r.EncodeArrayStart(5) + } else { + yynn4085 = 0 + for _, b := range yyq4085 { + if b { + yynn4085++ + } + } + r.EncodeMapStart(yynn4085) + yynn4085 = 0 + } + if yyr4085 || yy2arr4085 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4085[0] { + yym4087 := z.EncBinary() + _ = yym4087 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4085[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4088 := z.EncBinary() + _ = yym4088 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4085 || yy2arr4085 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4085[1] { + yym4090 := z.EncBinary() + _ = yym4090 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4085[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4091 := z.EncBinary() + _ = yym4091 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4085 || yy2arr4085 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4085[2] { + yy4093 := &x.ObjectMeta + yy4093.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4085[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4094 := &x.ObjectMeta + yy4094.CodecEncodeSelf(e) + } + } + if yyr4085 || yy2arr4085 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4085[3] { + yy4096 := &x.Spec + yy4096.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4085[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4097 := &x.Spec + yy4097.CodecEncodeSelf(e) + } + } + if yyr4085 || yy2arr4085 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4085[4] { + yy4099 := &x.Status + yy4099.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4085[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4100 := &x.Status + yy4100.CodecEncodeSelf(e) + } + } + if yyr4085 || yy2arr4085 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceQuota) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4101 := z.DecBinary() + _ = yym4101 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4102 := r.ContainerType() + if yyct4102 == codecSelferValueTypeMap1234 { + yyl4102 := r.ReadMapStart() + if yyl4102 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4102, d) + } + } else if yyct4102 == codecSelferValueTypeArray1234 { + yyl4102 := r.ReadArrayStart() + if yyl4102 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4102, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceQuota) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4103Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4103Slc + var yyhl4103 bool = l >= 0 + for yyj4103 := 0; ; yyj4103++ { + if yyhl4103 { + if yyj4103 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4103Slc = r.DecodeBytes(yys4103Slc, true, true) + yys4103 := string(yys4103Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4103 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4106 := &x.ObjectMeta + yyv4106.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ResourceQuotaSpec{} + } else { + yyv4107 := &x.Spec + yyv4107.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ResourceQuotaStatus{} + } else { + yyv4108 := &x.Status + yyv4108.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys4103) + } // end switch yys4103 + } // end for yyj4103 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceQuota) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4109 int + var yyb4109 bool + var yyhl4109 bool = l >= 0 + yyj4109++ + if yyhl4109 { + yyb4109 = yyj4109 > l + } else { + yyb4109 = r.CheckBreak() + } + if yyb4109 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4109++ + if yyhl4109 { + yyb4109 = yyj4109 > l + } else { + yyb4109 = r.CheckBreak() + } + if yyb4109 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4109++ + if yyhl4109 { + yyb4109 = yyj4109 > l + } else { + yyb4109 = r.CheckBreak() + } + if yyb4109 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4112 := &x.ObjectMeta + yyv4112.CodecDecodeSelf(d) + } + yyj4109++ + if yyhl4109 { + yyb4109 = yyj4109 > l + } else { + yyb4109 = r.CheckBreak() + } + if yyb4109 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ResourceQuotaSpec{} + } else { + yyv4113 := &x.Spec + yyv4113.CodecDecodeSelf(d) + } + yyj4109++ + if yyhl4109 { + yyb4109 = yyj4109 > l + } else { + yyb4109 = r.CheckBreak() + } + if yyb4109 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ResourceQuotaStatus{} + } else { + yyv4114 := &x.Status + yyv4114.CodecDecodeSelf(d) + } + for { + yyj4109++ + if yyhl4109 { + yyb4109 = yyj4109 > l + } else { + yyb4109 = r.CheckBreak() + } + if yyb4109 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4109-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ResourceQuotaList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4115 := z.EncBinary() + _ = yym4115 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4116 := !z.EncBinary() + yy2arr4116 := z.EncBasicHandle().StructToArray + var yyq4116 [4]bool + _, _, _ = yysep4116, yyq4116, yy2arr4116 + const yyr4116 bool = false + yyq4116[0] = x.Kind != "" + yyq4116[1] = x.APIVersion != "" + yyq4116[2] = true + var yynn4116 int + if yyr4116 || yy2arr4116 { + r.EncodeArrayStart(4) + } else { + yynn4116 = 1 + for _, b := range yyq4116 { + if b { + yynn4116++ + } + } + r.EncodeMapStart(yynn4116) + yynn4116 = 0 + } + if yyr4116 || yy2arr4116 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4116[0] { + yym4118 := z.EncBinary() + _ = yym4118 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4116[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4119 := z.EncBinary() + _ = yym4119 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4116 || yy2arr4116 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4116[1] { + yym4121 := z.EncBinary() + _ = yym4121 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4116[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4122 := z.EncBinary() + _ = yym4122 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4116 || yy2arr4116 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4116[2] { + yy4124 := &x.ListMeta + yym4125 := z.EncBinary() + _ = yym4125 + if false { + } else if z.HasExtensions() && z.EncExt(yy4124) { + } else { + z.EncFallback(yy4124) + } + } else { + r.EncodeNil() + } + } else { + if yyq4116[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4126 := &x.ListMeta + yym4127 := z.EncBinary() + _ = yym4127 + if false { + } else if z.HasExtensions() && z.EncExt(yy4126) { + } else { + z.EncFallback(yy4126) + } + } + } + if yyr4116 || yy2arr4116 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4129 := z.EncBinary() + _ = yym4129 + if false { + } else { + h.encSliceResourceQuota(([]ResourceQuota)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4130 := z.EncBinary() + _ = yym4130 + if false { + } else { + h.encSliceResourceQuota(([]ResourceQuota)(x.Items), e) + } + } + } + if yyr4116 || yy2arr4116 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ResourceQuotaList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4131 := z.DecBinary() + _ = yym4131 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4132 := r.ContainerType() + if yyct4132 == codecSelferValueTypeMap1234 { + yyl4132 := r.ReadMapStart() + if yyl4132 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4132, d) + } + } else if yyct4132 == codecSelferValueTypeArray1234 { + yyl4132 := r.ReadArrayStart() + if yyl4132 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4132, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ResourceQuotaList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4133Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4133Slc + var yyhl4133 bool = l >= 0 + for yyj4133 := 0; ; yyj4133++ { + if yyhl4133 { + if yyj4133 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4133Slc = r.DecodeBytes(yys4133Slc, true, true) + yys4133 := string(yys4133Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4133 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4136 := &x.ListMeta + yym4137 := z.DecBinary() + _ = yym4137 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4136) { + } else { + z.DecFallback(yyv4136, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4138 := &x.Items + yym4139 := z.DecBinary() + _ = yym4139 + if false { + } else { + h.decSliceResourceQuota((*[]ResourceQuota)(yyv4138), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4133) + } // end switch yys4133 + } // end for yyj4133 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ResourceQuotaList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4140 int + var yyb4140 bool + var yyhl4140 bool = l >= 0 + yyj4140++ + if yyhl4140 { + yyb4140 = yyj4140 > l + } else { + yyb4140 = r.CheckBreak() + } + if yyb4140 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4140++ + if yyhl4140 { + yyb4140 = yyj4140 > l + } else { + yyb4140 = r.CheckBreak() + } + if yyb4140 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4140++ + if yyhl4140 { + yyb4140 = yyj4140 > l + } else { + yyb4140 = r.CheckBreak() + } + if yyb4140 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4143 := &x.ListMeta + yym4144 := z.DecBinary() + _ = yym4144 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4143) { + } else { + z.DecFallback(yyv4143, false) + } + } + yyj4140++ + if yyhl4140 { + yyb4140 = yyj4140 > l + } else { + yyb4140 = r.CheckBreak() + } + if yyb4140 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4145 := &x.Items + yym4146 := z.DecBinary() + _ = yym4146 + if false { + } else { + h.decSliceResourceQuota((*[]ResourceQuota)(yyv4145), d) + } + } + for { + yyj4140++ + if yyhl4140 { + yyb4140 = yyj4140 > l + } else { + yyb4140 = r.CheckBreak() + } + if yyb4140 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4140-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Secret) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4147 := z.EncBinary() + _ = yym4147 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4148 := !z.EncBinary() + yy2arr4148 := z.EncBasicHandle().StructToArray + var yyq4148 [6]bool + _, _, _ = yysep4148, yyq4148, yy2arr4148 + const yyr4148 bool = false + yyq4148[0] = x.Kind != "" + yyq4148[1] = x.APIVersion != "" + yyq4148[2] = true + yyq4148[3] = len(x.Data) != 0 + yyq4148[4] = len(x.StringData) != 0 + yyq4148[5] = x.Type != "" + var yynn4148 int + if yyr4148 || yy2arr4148 { + r.EncodeArrayStart(6) + } else { + yynn4148 = 0 + for _, b := range yyq4148 { + if b { + yynn4148++ + } + } + r.EncodeMapStart(yynn4148) + yynn4148 = 0 + } + if yyr4148 || yy2arr4148 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4148[0] { + yym4150 := z.EncBinary() + _ = yym4150 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4148[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4151 := z.EncBinary() + _ = yym4151 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4148 || yy2arr4148 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4148[1] { + yym4153 := z.EncBinary() + _ = yym4153 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4148[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4154 := z.EncBinary() + _ = yym4154 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4148 || yy2arr4148 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4148[2] { + yy4156 := &x.ObjectMeta + yy4156.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4148[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4157 := &x.ObjectMeta + yy4157.CodecEncodeSelf(e) + } + } + if yyr4148 || yy2arr4148 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4148[3] { + if x.Data == nil { + r.EncodeNil() + } else { + yym4159 := z.EncBinary() + _ = yym4159 + if false { + } else { + h.encMapstringSliceuint8((map[string][]uint8)(x.Data), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4148[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("data")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym4160 := z.EncBinary() + _ = yym4160 + if false { + } else { + h.encMapstringSliceuint8((map[string][]uint8)(x.Data), e) + } + } + } + } + if yyr4148 || yy2arr4148 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4148[4] { + if x.StringData == nil { + r.EncodeNil() + } else { + yym4162 := z.EncBinary() + _ = yym4162 + if false { + } else { + z.F.EncMapStringStringV(x.StringData, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4148[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("stringData")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.StringData == nil { + r.EncodeNil() + } else { + yym4163 := z.EncBinary() + _ = yym4163 + if false { + } else { + z.F.EncMapStringStringV(x.StringData, false, e) + } + } + } + } + if yyr4148 || yy2arr4148 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4148[5] { + x.Type.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4148[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + } + if yyr4148 || yy2arr4148 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Secret) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4165 := z.DecBinary() + _ = yym4165 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4166 := r.ContainerType() + if yyct4166 == codecSelferValueTypeMap1234 { + yyl4166 := r.ReadMapStart() + if yyl4166 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4166, d) + } + } else if yyct4166 == codecSelferValueTypeArray1234 { + yyl4166 := r.ReadArrayStart() + if yyl4166 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4166, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Secret) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4167Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4167Slc + var yyhl4167 bool = l >= 0 + for yyj4167 := 0; ; yyj4167++ { + if yyhl4167 { + if yyj4167 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4167Slc = r.DecodeBytes(yys4167Slc, true, true) + yys4167 := string(yys4167Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4167 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4170 := &x.ObjectMeta + yyv4170.CodecDecodeSelf(d) + } + case "data": + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4171 := &x.Data + yym4172 := z.DecBinary() + _ = yym4172 + if false { + } else { + h.decMapstringSliceuint8((*map[string][]uint8)(yyv4171), d) + } + } + case "stringData": + if r.TryDecodeAsNil() { + x.StringData = nil + } else { + yyv4173 := &x.StringData + yym4174 := z.DecBinary() + _ = yym4174 + if false { + } else { + z.F.DecMapStringStringX(yyv4173, false, d) + } + } + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = SecretType(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys4167) + } // end switch yys4167 + } // end for yyj4167 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Secret) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4176 int + var yyb4176 bool + var yyhl4176 bool = l >= 0 + yyj4176++ + if yyhl4176 { + yyb4176 = yyj4176 > l + } else { + yyb4176 = r.CheckBreak() + } + if yyb4176 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4176++ + if yyhl4176 { + yyb4176 = yyj4176 > l + } else { + yyb4176 = r.CheckBreak() + } + if yyb4176 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4176++ + if yyhl4176 { + yyb4176 = yyj4176 > l + } else { + yyb4176 = r.CheckBreak() + } + if yyb4176 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4179 := &x.ObjectMeta + yyv4179.CodecDecodeSelf(d) + } + yyj4176++ + if yyhl4176 { + yyb4176 = yyj4176 > l + } else { + yyb4176 = r.CheckBreak() + } + if yyb4176 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4180 := &x.Data + yym4181 := z.DecBinary() + _ = yym4181 + if false { + } else { + h.decMapstringSliceuint8((*map[string][]uint8)(yyv4180), d) + } + } + yyj4176++ + if yyhl4176 { + yyb4176 = yyj4176 > l + } else { + yyb4176 = r.CheckBreak() + } + if yyb4176 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.StringData = nil + } else { + yyv4182 := &x.StringData + yym4183 := z.DecBinary() + _ = yym4183 + if false { + } else { + z.F.DecMapStringStringX(yyv4182, false, d) + } + } + yyj4176++ + if yyhl4176 { + yyb4176 = yyj4176 > l + } else { + yyb4176 = r.CheckBreak() + } + if yyb4176 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = SecretType(r.DecodeString()) + } + for { + yyj4176++ + if yyhl4176 { + yyb4176 = yyj4176 > l + } else { + yyb4176 = r.CheckBreak() + } + if yyb4176 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4176-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x SecretType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym4185 := z.EncBinary() + _ = yym4185 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *SecretType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4186 := z.DecBinary() + _ = yym4186 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *SecretList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4187 := z.EncBinary() + _ = yym4187 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4188 := !z.EncBinary() + yy2arr4188 := z.EncBasicHandle().StructToArray + var yyq4188 [4]bool + _, _, _ = yysep4188, yyq4188, yy2arr4188 + const yyr4188 bool = false + yyq4188[0] = x.Kind != "" + yyq4188[1] = x.APIVersion != "" + yyq4188[2] = true + var yynn4188 int + if yyr4188 || yy2arr4188 { + r.EncodeArrayStart(4) + } else { + yynn4188 = 1 + for _, b := range yyq4188 { + if b { + yynn4188++ + } + } + r.EncodeMapStart(yynn4188) + yynn4188 = 0 + } + if yyr4188 || yy2arr4188 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4188[0] { + yym4190 := z.EncBinary() + _ = yym4190 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4188[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4191 := z.EncBinary() + _ = yym4191 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4188 || yy2arr4188 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4188[1] { + yym4193 := z.EncBinary() + _ = yym4193 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4188[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4194 := z.EncBinary() + _ = yym4194 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4188 || yy2arr4188 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4188[2] { + yy4196 := &x.ListMeta + yym4197 := z.EncBinary() + _ = yym4197 + if false { + } else if z.HasExtensions() && z.EncExt(yy4196) { + } else { + z.EncFallback(yy4196) + } + } else { + r.EncodeNil() + } + } else { + if yyq4188[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4198 := &x.ListMeta + yym4199 := z.EncBinary() + _ = yym4199 + if false { + } else if z.HasExtensions() && z.EncExt(yy4198) { + } else { + z.EncFallback(yy4198) + } + } + } + if yyr4188 || yy2arr4188 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4201 := z.EncBinary() + _ = yym4201 + if false { + } else { + h.encSliceSecret(([]Secret)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4202 := z.EncBinary() + _ = yym4202 + if false { + } else { + h.encSliceSecret(([]Secret)(x.Items), e) + } + } + } + if yyr4188 || yy2arr4188 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecretList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4203 := z.DecBinary() + _ = yym4203 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4204 := r.ContainerType() + if yyct4204 == codecSelferValueTypeMap1234 { + yyl4204 := r.ReadMapStart() + if yyl4204 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4204, d) + } + } else if yyct4204 == codecSelferValueTypeArray1234 { + yyl4204 := r.ReadArrayStart() + if yyl4204 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4204, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecretList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4205Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4205Slc + var yyhl4205 bool = l >= 0 + for yyj4205 := 0; ; yyj4205++ { + if yyhl4205 { + if yyj4205 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4205Slc = r.DecodeBytes(yys4205Slc, true, true) + yys4205 := string(yys4205Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4205 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4208 := &x.ListMeta + yym4209 := z.DecBinary() + _ = yym4209 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4208) { + } else { + z.DecFallback(yyv4208, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4210 := &x.Items + yym4211 := z.DecBinary() + _ = yym4211 + if false { + } else { + h.decSliceSecret((*[]Secret)(yyv4210), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4205) + } // end switch yys4205 + } // end for yyj4205 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecretList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4212 int + var yyb4212 bool + var yyhl4212 bool = l >= 0 + yyj4212++ + if yyhl4212 { + yyb4212 = yyj4212 > l + } else { + yyb4212 = r.CheckBreak() + } + if yyb4212 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4212++ + if yyhl4212 { + yyb4212 = yyj4212 > l + } else { + yyb4212 = r.CheckBreak() + } + if yyb4212 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4212++ + if yyhl4212 { + yyb4212 = yyj4212 > l + } else { + yyb4212 = r.CheckBreak() + } + if yyb4212 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4215 := &x.ListMeta + yym4216 := z.DecBinary() + _ = yym4216 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4215) { + } else { + z.DecFallback(yyv4215, false) + } + } + yyj4212++ + if yyhl4212 { + yyb4212 = yyj4212 > l + } else { + yyb4212 = r.CheckBreak() + } + if yyb4212 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4217 := &x.Items + yym4218 := z.DecBinary() + _ = yym4218 + if false { + } else { + h.decSliceSecret((*[]Secret)(yyv4217), d) + } + } + for { + yyj4212++ + if yyhl4212 { + yyb4212 = yyj4212 > l + } else { + yyb4212 = r.CheckBreak() + } + if yyb4212 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4212-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ConfigMap) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4219 := z.EncBinary() + _ = yym4219 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4220 := !z.EncBinary() + yy2arr4220 := z.EncBasicHandle().StructToArray + var yyq4220 [4]bool + _, _, _ = yysep4220, yyq4220, yy2arr4220 + const yyr4220 bool = false + yyq4220[0] = x.Kind != "" + yyq4220[1] = x.APIVersion != "" + yyq4220[2] = true + yyq4220[3] = len(x.Data) != 0 + var yynn4220 int + if yyr4220 || yy2arr4220 { + r.EncodeArrayStart(4) + } else { + yynn4220 = 0 + for _, b := range yyq4220 { + if b { + yynn4220++ + } + } + r.EncodeMapStart(yynn4220) + yynn4220 = 0 + } + if yyr4220 || yy2arr4220 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4220[0] { + yym4222 := z.EncBinary() + _ = yym4222 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4220[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4223 := z.EncBinary() + _ = yym4223 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4220 || yy2arr4220 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4220[1] { + yym4225 := z.EncBinary() + _ = yym4225 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4220[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4226 := z.EncBinary() + _ = yym4226 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4220 || yy2arr4220 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4220[2] { + yy4228 := &x.ObjectMeta + yy4228.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4220[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4229 := &x.ObjectMeta + yy4229.CodecEncodeSelf(e) + } + } + if yyr4220 || yy2arr4220 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4220[3] { + if x.Data == nil { + r.EncodeNil() + } else { + yym4231 := z.EncBinary() + _ = yym4231 + if false { + } else { + z.F.EncMapStringStringV(x.Data, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4220[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("data")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym4232 := z.EncBinary() + _ = yym4232 + if false { + } else { + z.F.EncMapStringStringV(x.Data, false, e) + } + } + } + } + if yyr4220 || yy2arr4220 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ConfigMap) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4233 := z.DecBinary() + _ = yym4233 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4234 := r.ContainerType() + if yyct4234 == codecSelferValueTypeMap1234 { + yyl4234 := r.ReadMapStart() + if yyl4234 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4234, d) + } + } else if yyct4234 == codecSelferValueTypeArray1234 { + yyl4234 := r.ReadArrayStart() + if yyl4234 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4234, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ConfigMap) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4235Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4235Slc + var yyhl4235 bool = l >= 0 + for yyj4235 := 0; ; yyj4235++ { + if yyhl4235 { + if yyj4235 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4235Slc = r.DecodeBytes(yys4235Slc, true, true) + yys4235 := string(yys4235Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4235 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4238 := &x.ObjectMeta + yyv4238.CodecDecodeSelf(d) + } + case "data": + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4239 := &x.Data + yym4240 := z.DecBinary() + _ = yym4240 + if false { + } else { + z.F.DecMapStringStringX(yyv4239, false, d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4235) + } // end switch yys4235 + } // end for yyj4235 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ConfigMap) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4241 int + var yyb4241 bool + var yyhl4241 bool = l >= 0 + yyj4241++ + if yyhl4241 { + yyb4241 = yyj4241 > l + } else { + yyb4241 = r.CheckBreak() + } + if yyb4241 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4241++ + if yyhl4241 { + yyb4241 = yyj4241 > l + } else { + yyb4241 = r.CheckBreak() + } + if yyb4241 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4241++ + if yyhl4241 { + yyb4241 = yyj4241 > l + } else { + yyb4241 = r.CheckBreak() + } + if yyb4241 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4244 := &x.ObjectMeta + yyv4244.CodecDecodeSelf(d) + } + yyj4241++ + if yyhl4241 { + yyb4241 = yyj4241 > l + } else { + yyb4241 = r.CheckBreak() + } + if yyb4241 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4245 := &x.Data + yym4246 := z.DecBinary() + _ = yym4246 + if false { + } else { + z.F.DecMapStringStringX(yyv4245, false, d) + } + } + for { + yyj4241++ + if yyhl4241 { + yyb4241 = yyj4241 > l + } else { + yyb4241 = r.CheckBreak() + } + if yyb4241 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4241-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ConfigMapList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4247 := z.EncBinary() + _ = yym4247 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4248 := !z.EncBinary() + yy2arr4248 := z.EncBasicHandle().StructToArray + var yyq4248 [4]bool + _, _, _ = yysep4248, yyq4248, yy2arr4248 + const yyr4248 bool = false + yyq4248[0] = x.Kind != "" + yyq4248[1] = x.APIVersion != "" + yyq4248[2] = true + var yynn4248 int + if yyr4248 || yy2arr4248 { + r.EncodeArrayStart(4) + } else { + yynn4248 = 1 + for _, b := range yyq4248 { + if b { + yynn4248++ + } + } + r.EncodeMapStart(yynn4248) + yynn4248 = 0 + } + if yyr4248 || yy2arr4248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4248[0] { + yym4250 := z.EncBinary() + _ = yym4250 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4248[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4251 := z.EncBinary() + _ = yym4251 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4248 || yy2arr4248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4248[1] { + yym4253 := z.EncBinary() + _ = yym4253 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4248[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4254 := z.EncBinary() + _ = yym4254 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4248 || yy2arr4248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4248[2] { + yy4256 := &x.ListMeta + yym4257 := z.EncBinary() + _ = yym4257 + if false { + } else if z.HasExtensions() && z.EncExt(yy4256) { + } else { + z.EncFallback(yy4256) + } + } else { + r.EncodeNil() + } + } else { + if yyq4248[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4258 := &x.ListMeta + yym4259 := z.EncBinary() + _ = yym4259 + if false { + } else if z.HasExtensions() && z.EncExt(yy4258) { + } else { + z.EncFallback(yy4258) + } + } + } + if yyr4248 || yy2arr4248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4261 := z.EncBinary() + _ = yym4261 + if false { + } else { + h.encSliceConfigMap(([]ConfigMap)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4262 := z.EncBinary() + _ = yym4262 + if false { + } else { + h.encSliceConfigMap(([]ConfigMap)(x.Items), e) + } + } + } + if yyr4248 || yy2arr4248 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ConfigMapList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4263 := z.DecBinary() + _ = yym4263 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4264 := r.ContainerType() + if yyct4264 == codecSelferValueTypeMap1234 { + yyl4264 := r.ReadMapStart() + if yyl4264 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4264, d) + } + } else if yyct4264 == codecSelferValueTypeArray1234 { + yyl4264 := r.ReadArrayStart() + if yyl4264 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4264, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ConfigMapList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4265Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4265Slc + var yyhl4265 bool = l >= 0 + for yyj4265 := 0; ; yyj4265++ { + if yyhl4265 { + if yyj4265 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4265Slc = r.DecodeBytes(yys4265Slc, true, true) + yys4265 := string(yys4265Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4265 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4268 := &x.ListMeta + yym4269 := z.DecBinary() + _ = yym4269 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4268) { + } else { + z.DecFallback(yyv4268, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4270 := &x.Items + yym4271 := z.DecBinary() + _ = yym4271 + if false { + } else { + h.decSliceConfigMap((*[]ConfigMap)(yyv4270), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4265) + } // end switch yys4265 + } // end for yyj4265 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ConfigMapList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4272 int + var yyb4272 bool + var yyhl4272 bool = l >= 0 + yyj4272++ + if yyhl4272 { + yyb4272 = yyj4272 > l + } else { + yyb4272 = r.CheckBreak() + } + if yyb4272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4272++ + if yyhl4272 { + yyb4272 = yyj4272 > l + } else { + yyb4272 = r.CheckBreak() + } + if yyb4272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4272++ + if yyhl4272 { + yyb4272 = yyj4272 > l + } else { + yyb4272 = r.CheckBreak() + } + if yyb4272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4275 := &x.ListMeta + yym4276 := z.DecBinary() + _ = yym4276 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4275) { + } else { + z.DecFallback(yyv4275, false) + } + } + yyj4272++ + if yyhl4272 { + yyb4272 = yyj4272 > l + } else { + yyb4272 = r.CheckBreak() + } + if yyb4272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4277 := &x.Items + yym4278 := z.DecBinary() + _ = yym4278 + if false { + } else { + h.decSliceConfigMap((*[]ConfigMap)(yyv4277), d) + } + } + for { + yyj4272++ + if yyhl4272 { + yyb4272 = yyj4272 > l + } else { + yyb4272 = r.CheckBreak() + } + if yyb4272 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4272-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ComponentConditionType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym4279 := z.EncBinary() + _ = yym4279 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ComponentConditionType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4280 := z.DecBinary() + _ = yym4280 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ComponentCondition) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4281 := z.EncBinary() + _ = yym4281 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4282 := !z.EncBinary() + yy2arr4282 := z.EncBasicHandle().StructToArray + var yyq4282 [4]bool + _, _, _ = yysep4282, yyq4282, yy2arr4282 + const yyr4282 bool = false + yyq4282[2] = x.Message != "" + yyq4282[3] = x.Error != "" + var yynn4282 int + if yyr4282 || yy2arr4282 { + r.EncodeArrayStart(4) + } else { + yynn4282 = 2 + for _, b := range yyq4282 { + if b { + yynn4282++ + } + } + r.EncodeMapStart(yynn4282) + yynn4282 = 0 + } + if yyr4282 || yy2arr4282 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr4282 || yy2arr4282 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Status.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Status.CodecEncodeSelf(e) + } + if yyr4282 || yy2arr4282 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4282[2] { + yym4286 := z.EncBinary() + _ = yym4286 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4282[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4287 := z.EncBinary() + _ = yym4287 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr4282 || yy2arr4282 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4282[3] { + yym4289 := z.EncBinary() + _ = yym4289 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Error)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4282[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("error")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4290 := z.EncBinary() + _ = yym4290 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Error)) + } + } + } + if yyr4282 || yy2arr4282 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ComponentCondition) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4291 := z.DecBinary() + _ = yym4291 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4292 := r.ContainerType() + if yyct4292 == codecSelferValueTypeMap1234 { + yyl4292 := r.ReadMapStart() + if yyl4292 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4292, d) + } + } else if yyct4292 == codecSelferValueTypeArray1234 { + yyl4292 := r.ReadArrayStart() + if yyl4292 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4292, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ComponentCondition) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4293Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4293Slc + var yyhl4293 bool = l >= 0 + for yyj4293 := 0; ; yyj4293++ { + if yyhl4293 { + if yyj4293 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4293Slc = r.DecodeBytes(yys4293Slc, true, true) + yys4293 := string(yys4293Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4293 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = ComponentConditionType(r.DecodeString()) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + case "error": + if r.TryDecodeAsNil() { + x.Error = "" + } else { + x.Error = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys4293) + } // end switch yys4293 + } // end for yyj4293 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ComponentCondition) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4298 int + var yyb4298 bool + var yyhl4298 bool = l >= 0 + yyj4298++ + if yyhl4298 { + yyb4298 = yyj4298 > l + } else { + yyb4298 = r.CheckBreak() + } + if yyb4298 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = ComponentConditionType(r.DecodeString()) + } + yyj4298++ + if yyhl4298 { + yyb4298 = yyj4298 > l + } else { + yyb4298 = r.CheckBreak() + } + if yyb4298 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = ConditionStatus(r.DecodeString()) + } + yyj4298++ + if yyhl4298 { + yyb4298 = yyj4298 > l + } else { + yyb4298 = r.CheckBreak() + } + if yyb4298 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + yyj4298++ + if yyhl4298 { + yyb4298 = yyj4298 > l + } else { + yyb4298 = r.CheckBreak() + } + if yyb4298 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Error = "" + } else { + x.Error = string(r.DecodeString()) + } + for { + yyj4298++ + if yyhl4298 { + yyb4298 = yyj4298 > l + } else { + yyb4298 = r.CheckBreak() + } + if yyb4298 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4298-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ComponentStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4303 := z.EncBinary() + _ = yym4303 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4304 := !z.EncBinary() + yy2arr4304 := z.EncBasicHandle().StructToArray + var yyq4304 [4]bool + _, _, _ = yysep4304, yyq4304, yy2arr4304 + const yyr4304 bool = false + yyq4304[0] = x.Kind != "" + yyq4304[1] = x.APIVersion != "" + yyq4304[2] = true + yyq4304[3] = len(x.Conditions) != 0 + var yynn4304 int + if yyr4304 || yy2arr4304 { + r.EncodeArrayStart(4) + } else { + yynn4304 = 0 + for _, b := range yyq4304 { + if b { + yynn4304++ + } + } + r.EncodeMapStart(yynn4304) + yynn4304 = 0 + } + if yyr4304 || yy2arr4304 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4304[0] { + yym4306 := z.EncBinary() + _ = yym4306 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4304[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4307 := z.EncBinary() + _ = yym4307 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4304 || yy2arr4304 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4304[1] { + yym4309 := z.EncBinary() + _ = yym4309 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4304[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4310 := z.EncBinary() + _ = yym4310 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4304 || yy2arr4304 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4304[2] { + yy4312 := &x.ObjectMeta + yy4312.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4304[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4313 := &x.ObjectMeta + yy4313.CodecEncodeSelf(e) + } + } + if yyr4304 || yy2arr4304 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4304[3] { + if x.Conditions == nil { + r.EncodeNil() + } else { + yym4315 := z.EncBinary() + _ = yym4315 + if false { + } else { + h.encSliceComponentCondition(([]ComponentCondition)(x.Conditions), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4304[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("conditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Conditions == nil { + r.EncodeNil() + } else { + yym4316 := z.EncBinary() + _ = yym4316 + if false { + } else { + h.encSliceComponentCondition(([]ComponentCondition)(x.Conditions), e) + } + } + } + } + if yyr4304 || yy2arr4304 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ComponentStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4317 := z.DecBinary() + _ = yym4317 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4318 := r.ContainerType() + if yyct4318 == codecSelferValueTypeMap1234 { + yyl4318 := r.ReadMapStart() + if yyl4318 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4318, d) + } + } else if yyct4318 == codecSelferValueTypeArray1234 { + yyl4318 := r.ReadArrayStart() + if yyl4318 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4318, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ComponentStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4319Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4319Slc + var yyhl4319 bool = l >= 0 + for yyj4319 := 0; ; yyj4319++ { + if yyhl4319 { + if yyj4319 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4319Slc = r.DecodeBytes(yys4319Slc, true, true) + yys4319 := string(yys4319Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4319 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4322 := &x.ObjectMeta + yyv4322.CodecDecodeSelf(d) + } + case "conditions": + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv4323 := &x.Conditions + yym4324 := z.DecBinary() + _ = yym4324 + if false { + } else { + h.decSliceComponentCondition((*[]ComponentCondition)(yyv4323), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4319) + } // end switch yys4319 + } // end for yyj4319 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ComponentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4325 int + var yyb4325 bool + var yyhl4325 bool = l >= 0 + yyj4325++ + if yyhl4325 { + yyb4325 = yyj4325 > l + } else { + yyb4325 = r.CheckBreak() + } + if yyb4325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4325++ + if yyhl4325 { + yyb4325 = yyj4325 > l + } else { + yyb4325 = r.CheckBreak() + } + if yyb4325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4325++ + if yyhl4325 { + yyb4325 = yyj4325 > l + } else { + yyb4325 = r.CheckBreak() + } + if yyb4325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4328 := &x.ObjectMeta + yyv4328.CodecDecodeSelf(d) + } + yyj4325++ + if yyhl4325 { + yyb4325 = yyj4325 > l + } else { + yyb4325 = r.CheckBreak() + } + if yyb4325 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv4329 := &x.Conditions + yym4330 := z.DecBinary() + _ = yym4330 + if false { + } else { + h.decSliceComponentCondition((*[]ComponentCondition)(yyv4329), d) + } + } + for { + yyj4325++ + if yyhl4325 { + yyb4325 = yyj4325 > l + } else { + yyb4325 = r.CheckBreak() + } + if yyb4325 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4325-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ComponentStatusList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4331 := z.EncBinary() + _ = yym4331 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4332 := !z.EncBinary() + yy2arr4332 := z.EncBasicHandle().StructToArray + var yyq4332 [4]bool + _, _, _ = yysep4332, yyq4332, yy2arr4332 + const yyr4332 bool = false + yyq4332[0] = x.Kind != "" + yyq4332[1] = x.APIVersion != "" + yyq4332[2] = true + var yynn4332 int + if yyr4332 || yy2arr4332 { + r.EncodeArrayStart(4) + } else { + yynn4332 = 1 + for _, b := range yyq4332 { + if b { + yynn4332++ + } + } + r.EncodeMapStart(yynn4332) + yynn4332 = 0 + } + if yyr4332 || yy2arr4332 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4332[0] { + yym4334 := z.EncBinary() + _ = yym4334 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4332[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4335 := z.EncBinary() + _ = yym4335 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4332 || yy2arr4332 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4332[1] { + yym4337 := z.EncBinary() + _ = yym4337 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4332[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4338 := z.EncBinary() + _ = yym4338 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4332 || yy2arr4332 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4332[2] { + yy4340 := &x.ListMeta + yym4341 := z.EncBinary() + _ = yym4341 + if false { + } else if z.HasExtensions() && z.EncExt(yy4340) { + } else { + z.EncFallback(yy4340) + } + } else { + r.EncodeNil() + } + } else { + if yyq4332[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4342 := &x.ListMeta + yym4343 := z.EncBinary() + _ = yym4343 + if false { + } else if z.HasExtensions() && z.EncExt(yy4342) { + } else { + z.EncFallback(yy4342) + } + } + } + if yyr4332 || yy2arr4332 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4345 := z.EncBinary() + _ = yym4345 + if false { + } else { + h.encSliceComponentStatus(([]ComponentStatus)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4346 := z.EncBinary() + _ = yym4346 + if false { + } else { + h.encSliceComponentStatus(([]ComponentStatus)(x.Items), e) + } + } + } + if yyr4332 || yy2arr4332 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ComponentStatusList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4347 := z.DecBinary() + _ = yym4347 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4348 := r.ContainerType() + if yyct4348 == codecSelferValueTypeMap1234 { + yyl4348 := r.ReadMapStart() + if yyl4348 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4348, d) + } + } else if yyct4348 == codecSelferValueTypeArray1234 { + yyl4348 := r.ReadArrayStart() + if yyl4348 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4348, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ComponentStatusList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4349Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4349Slc + var yyhl4349 bool = l >= 0 + for yyj4349 := 0; ; yyj4349++ { + if yyhl4349 { + if yyj4349 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4349Slc = r.DecodeBytes(yys4349Slc, true, true) + yys4349 := string(yys4349Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4349 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4352 := &x.ListMeta + yym4353 := z.DecBinary() + _ = yym4353 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4352) { + } else { + z.DecFallback(yyv4352, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4354 := &x.Items + yym4355 := z.DecBinary() + _ = yym4355 + if false { + } else { + h.decSliceComponentStatus((*[]ComponentStatus)(yyv4354), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys4349) + } // end switch yys4349 + } // end for yyj4349 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ComponentStatusList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4356 int + var yyb4356 bool + var yyhl4356 bool = l >= 0 + yyj4356++ + if yyhl4356 { + yyb4356 = yyj4356 > l + } else { + yyb4356 = r.CheckBreak() + } + if yyb4356 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4356++ + if yyhl4356 { + yyb4356 = yyj4356 > l + } else { + yyb4356 = r.CheckBreak() + } + if yyb4356 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4356++ + if yyhl4356 { + yyb4356 = yyj4356 > l + } else { + yyb4356 = r.CheckBreak() + } + if yyb4356 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg2_unversioned.ListMeta{} + } else { + yyv4359 := &x.ListMeta + yym4360 := z.DecBinary() + _ = yym4360 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4359) { + } else { + z.DecFallback(yyv4359, false) + } + } + yyj4356++ + if yyhl4356 { + yyb4356 = yyj4356 > l + } else { + yyb4356 = r.CheckBreak() + } + if yyb4356 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4361 := &x.Items + yym4362 := z.DecBinary() + _ = yym4362 + if false { + } else { + h.decSliceComponentStatus((*[]ComponentStatus)(yyv4361), d) + } + } + for { + yyj4356++ + if yyhl4356 { + yyb4356 = yyj4356 > l + } else { + yyb4356 = r.CheckBreak() + } + if yyb4356 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4356-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DownwardAPIVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4363 := z.EncBinary() + _ = yym4363 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4364 := !z.EncBinary() + yy2arr4364 := z.EncBasicHandle().StructToArray + var yyq4364 [2]bool + _, _, _ = yysep4364, yyq4364, yy2arr4364 + const yyr4364 bool = false + yyq4364[0] = len(x.Items) != 0 + yyq4364[1] = x.DefaultMode != nil + var yynn4364 int + if yyr4364 || yy2arr4364 { + r.EncodeArrayStart(2) + } else { + yynn4364 = 0 + for _, b := range yyq4364 { + if b { + yynn4364++ + } + } + r.EncodeMapStart(yynn4364) + yynn4364 = 0 + } + if yyr4364 || yy2arr4364 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4364[0] { + if x.Items == nil { + r.EncodeNil() + } else { + yym4366 := z.EncBinary() + _ = yym4366 + if false { + } else { + h.encSliceDownwardAPIVolumeFile(([]DownwardAPIVolumeFile)(x.Items), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4364[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym4367 := z.EncBinary() + _ = yym4367 + if false { + } else { + h.encSliceDownwardAPIVolumeFile(([]DownwardAPIVolumeFile)(x.Items), e) + } + } + } + } + if yyr4364 || yy2arr4364 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4364[1] { + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy4369 := *x.DefaultMode + yym4370 := z.EncBinary() + _ = yym4370 + if false { + } else { + r.EncodeInt(int64(yy4369)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4364[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultMode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultMode == nil { + r.EncodeNil() + } else { + yy4371 := *x.DefaultMode + yym4372 := z.EncBinary() + _ = yym4372 + if false { + } else { + r.EncodeInt(int64(yy4371)) + } + } + } + } + if yyr4364 || yy2arr4364 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DownwardAPIVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4373 := z.DecBinary() + _ = yym4373 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4374 := r.ContainerType() + if yyct4374 == codecSelferValueTypeMap1234 { + yyl4374 := r.ReadMapStart() + if yyl4374 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4374, d) + } + } else if yyct4374 == codecSelferValueTypeArray1234 { + yyl4374 := r.ReadArrayStart() + if yyl4374 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4374, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DownwardAPIVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4375Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4375Slc + var yyhl4375 bool = l >= 0 + for yyj4375 := 0; ; yyj4375++ { + if yyhl4375 { + if yyj4375 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4375Slc = r.DecodeBytes(yys4375Slc, true, true) + yys4375 := string(yys4375Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4375 { + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4376 := &x.Items + yym4377 := z.DecBinary() + _ = yym4377 + if false { + } else { + h.decSliceDownwardAPIVolumeFile((*[]DownwardAPIVolumeFile)(yyv4376), d) + } + } + case "defaultMode": + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym4379 := z.DecBinary() + _ = yym4379 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys4375) + } // end switch yys4375 + } // end for yyj4375 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DownwardAPIVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4380 int + var yyb4380 bool + var yyhl4380 bool = l >= 0 + yyj4380++ + if yyhl4380 { + yyb4380 = yyj4380 > l + } else { + yyb4380 = r.CheckBreak() + } + if yyb4380 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv4381 := &x.Items + yym4382 := z.DecBinary() + _ = yym4382 + if false { + } else { + h.decSliceDownwardAPIVolumeFile((*[]DownwardAPIVolumeFile)(yyv4381), d) + } + } + yyj4380++ + if yyhl4380 { + yyb4380 = yyj4380 > l + } else { + yyb4380 = r.CheckBreak() + } + if yyb4380 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.DefaultMode != nil { + x.DefaultMode = nil + } + } else { + if x.DefaultMode == nil { + x.DefaultMode = new(int32) + } + yym4384 := z.DecBinary() + _ = yym4384 + if false { + } else { + *((*int32)(x.DefaultMode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj4380++ + if yyhl4380 { + yyb4380 = yyj4380 > l + } else { + yyb4380 = r.CheckBreak() + } + if yyb4380 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4380-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DownwardAPIVolumeFile) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4385 := z.EncBinary() + _ = yym4385 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4386 := !z.EncBinary() + yy2arr4386 := z.EncBasicHandle().StructToArray + var yyq4386 [4]bool + _, _, _ = yysep4386, yyq4386, yy2arr4386 + const yyr4386 bool = false + yyq4386[1] = x.FieldRef != nil + yyq4386[2] = x.ResourceFieldRef != nil + yyq4386[3] = x.Mode != nil + var yynn4386 int + if yyr4386 || yy2arr4386 { + r.EncodeArrayStart(4) + } else { + yynn4386 = 1 + for _, b := range yyq4386 { + if b { + yynn4386++ + } + } + r.EncodeMapStart(yynn4386) + yynn4386 = 0 + } + if yyr4386 || yy2arr4386 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym4388 := z.EncBinary() + _ = yym4388 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4389 := z.EncBinary() + _ = yym4389 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + if yyr4386 || yy2arr4386 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4386[1] { + if x.FieldRef == nil { + r.EncodeNil() + } else { + x.FieldRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4386[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fieldRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.FieldRef == nil { + r.EncodeNil() + } else { + x.FieldRef.CodecEncodeSelf(e) + } + } + } + if yyr4386 || yy2arr4386 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4386[2] { + if x.ResourceFieldRef == nil { + r.EncodeNil() + } else { + x.ResourceFieldRef.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4386[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("resourceFieldRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ResourceFieldRef == nil { + r.EncodeNil() + } else { + x.ResourceFieldRef.CodecEncodeSelf(e) + } + } + } + if yyr4386 || yy2arr4386 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4386[3] { + if x.Mode == nil { + r.EncodeNil() + } else { + yy4393 := *x.Mode + yym4394 := z.EncBinary() + _ = yym4394 + if false { + } else { + r.EncodeInt(int64(yy4393)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4386[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("mode")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Mode == nil { + r.EncodeNil() + } else { + yy4395 := *x.Mode + yym4396 := z.EncBinary() + _ = yym4396 + if false { + } else { + r.EncodeInt(int64(yy4395)) + } + } + } + } + if yyr4386 || yy2arr4386 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DownwardAPIVolumeFile) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4397 := z.DecBinary() + _ = yym4397 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4398 := r.ContainerType() + if yyct4398 == codecSelferValueTypeMap1234 { + yyl4398 := r.ReadMapStart() + if yyl4398 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4398, d) + } + } else if yyct4398 == codecSelferValueTypeArray1234 { + yyl4398 := r.ReadArrayStart() + if yyl4398 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4398, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DownwardAPIVolumeFile) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4399Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4399Slc + var yyhl4399 bool = l >= 0 + for yyj4399 := 0; ; yyj4399++ { + if yyhl4399 { + if yyj4399 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4399Slc = r.DecodeBytes(yys4399Slc, true, true) + yys4399 := string(yys4399Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4399 { + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "fieldRef": + if r.TryDecodeAsNil() { + if x.FieldRef != nil { + x.FieldRef = nil + } + } else { + if x.FieldRef == nil { + x.FieldRef = new(ObjectFieldSelector) + } + x.FieldRef.CodecDecodeSelf(d) + } + case "resourceFieldRef": + if r.TryDecodeAsNil() { + if x.ResourceFieldRef != nil { + x.ResourceFieldRef = nil + } + } else { + if x.ResourceFieldRef == nil { + x.ResourceFieldRef = new(ResourceFieldSelector) + } + x.ResourceFieldRef.CodecDecodeSelf(d) + } + case "mode": + if r.TryDecodeAsNil() { + if x.Mode != nil { + x.Mode = nil + } + } else { + if x.Mode == nil { + x.Mode = new(int32) + } + yym4404 := z.DecBinary() + _ = yym4404 + if false { + } else { + *((*int32)(x.Mode)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys4399) + } // end switch yys4399 + } // end for yyj4399 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DownwardAPIVolumeFile) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4405 int + var yyb4405 bool + var yyhl4405 bool = l >= 0 + yyj4405++ + if yyhl4405 { + yyb4405 = yyj4405 > l + } else { + yyb4405 = r.CheckBreak() + } + if yyb4405 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj4405++ + if yyhl4405 { + yyb4405 = yyj4405 > l + } else { + yyb4405 = r.CheckBreak() + } + if yyb4405 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.FieldRef != nil { + x.FieldRef = nil + } + } else { + if x.FieldRef == nil { + x.FieldRef = new(ObjectFieldSelector) + } + x.FieldRef.CodecDecodeSelf(d) + } + yyj4405++ + if yyhl4405 { + yyb4405 = yyj4405 > l + } else { + yyb4405 = r.CheckBreak() + } + if yyb4405 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ResourceFieldRef != nil { + x.ResourceFieldRef = nil + } + } else { + if x.ResourceFieldRef == nil { + x.ResourceFieldRef = new(ResourceFieldSelector) + } + x.ResourceFieldRef.CodecDecodeSelf(d) + } + yyj4405++ + if yyhl4405 { + yyb4405 = yyj4405 > l + } else { + yyb4405 = r.CheckBreak() + } + if yyb4405 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Mode != nil { + x.Mode = nil + } + } else { + if x.Mode == nil { + x.Mode = new(int32) + } + yym4410 := z.DecBinary() + _ = yym4410 + if false { + } else { + *((*int32)(x.Mode)) = int32(r.DecodeInt(32)) + } + } + for { + yyj4405++ + if yyhl4405 { + yyb4405 = yyj4405 > l + } else { + yyb4405 = r.CheckBreak() + } + if yyb4405 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4405-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4411 := z.EncBinary() + _ = yym4411 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4412 := !z.EncBinary() + yy2arr4412 := z.EncBasicHandle().StructToArray + var yyq4412 [6]bool + _, _, _ = yysep4412, yyq4412, yy2arr4412 + const yyr4412 bool = false + yyq4412[0] = x.Capabilities != nil + yyq4412[1] = x.Privileged != nil + yyq4412[2] = x.SELinuxOptions != nil + yyq4412[3] = x.RunAsUser != nil + yyq4412[4] = x.RunAsNonRoot != nil + yyq4412[5] = x.ReadOnlyRootFilesystem != nil + var yynn4412 int + if yyr4412 || yy2arr4412 { + r.EncodeArrayStart(6) + } else { + yynn4412 = 0 + for _, b := range yyq4412 { + if b { + yynn4412++ + } + } + r.EncodeMapStart(yynn4412) + yynn4412 = 0 + } + if yyr4412 || yy2arr4412 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4412[0] { + if x.Capabilities == nil { + r.EncodeNil() + } else { + x.Capabilities.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4412[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("capabilities")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Capabilities == nil { + r.EncodeNil() + } else { + x.Capabilities.CodecEncodeSelf(e) + } + } + } + if yyr4412 || yy2arr4412 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4412[1] { + if x.Privileged == nil { + r.EncodeNil() + } else { + yy4415 := *x.Privileged + yym4416 := z.EncBinary() + _ = yym4416 + if false { + } else { + r.EncodeBool(bool(yy4415)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4412[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("privileged")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Privileged == nil { + r.EncodeNil() + } else { + yy4417 := *x.Privileged + yym4418 := z.EncBinary() + _ = yym4418 + if false { + } else { + r.EncodeBool(bool(yy4417)) + } + } + } + } + if yyr4412 || yy2arr4412 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4412[2] { + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq4412[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("seLinuxOptions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } + } + if yyr4412 || yy2arr4412 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4412[3] { + if x.RunAsUser == nil { + r.EncodeNil() + } else { + yy4421 := *x.RunAsUser + yym4422 := z.EncBinary() + _ = yym4422 + if false { + } else { + r.EncodeInt(int64(yy4421)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4412[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsUser")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RunAsUser == nil { + r.EncodeNil() + } else { + yy4423 := *x.RunAsUser + yym4424 := z.EncBinary() + _ = yym4424 + if false { + } else { + r.EncodeInt(int64(yy4423)) + } + } + } + } + if yyr4412 || yy2arr4412 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4412[4] { + if x.RunAsNonRoot == nil { + r.EncodeNil() + } else { + yy4426 := *x.RunAsNonRoot + yym4427 := z.EncBinary() + _ = yym4427 + if false { + } else { + r.EncodeBool(bool(yy4426)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4412[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsNonRoot")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RunAsNonRoot == nil { + r.EncodeNil() + } else { + yy4428 := *x.RunAsNonRoot + yym4429 := z.EncBinary() + _ = yym4429 + if false { + } else { + r.EncodeBool(bool(yy4428)) + } + } + } + } + if yyr4412 || yy2arr4412 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4412[5] { + if x.ReadOnlyRootFilesystem == nil { + r.EncodeNil() + } else { + yy4431 := *x.ReadOnlyRootFilesystem + yym4432 := z.EncBinary() + _ = yym4432 + if false { + } else { + r.EncodeBool(bool(yy4431)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq4412[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnlyRootFilesystem")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ReadOnlyRootFilesystem == nil { + r.EncodeNil() + } else { + yy4433 := *x.ReadOnlyRootFilesystem + yym4434 := z.EncBinary() + _ = yym4434 + if false { + } else { + r.EncodeBool(bool(yy4433)) + } + } + } + } + if yyr4412 || yy2arr4412 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SecurityContext) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4435 := z.DecBinary() + _ = yym4435 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4436 := r.ContainerType() + if yyct4436 == codecSelferValueTypeMap1234 { + yyl4436 := r.ReadMapStart() + if yyl4436 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4436, d) + } + } else if yyct4436 == codecSelferValueTypeArray1234 { + yyl4436 := r.ReadArrayStart() + if yyl4436 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4436, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4437Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4437Slc + var yyhl4437 bool = l >= 0 + for yyj4437 := 0; ; yyj4437++ { + if yyhl4437 { + if yyj4437 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4437Slc = r.DecodeBytes(yys4437Slc, true, true) + yys4437 := string(yys4437Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4437 { + case "capabilities": + if r.TryDecodeAsNil() { + if x.Capabilities != nil { + x.Capabilities = nil + } + } else { + if x.Capabilities == nil { + x.Capabilities = new(Capabilities) + } + x.Capabilities.CodecDecodeSelf(d) + } + case "privileged": + if r.TryDecodeAsNil() { + if x.Privileged != nil { + x.Privileged = nil + } + } else { + if x.Privileged == nil { + x.Privileged = new(bool) + } + yym4440 := z.DecBinary() + _ = yym4440 + if false { + } else { + *((*bool)(x.Privileged)) = r.DecodeBool() + } + } + case "seLinuxOptions": + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + case "runAsUser": + if r.TryDecodeAsNil() { + if x.RunAsUser != nil { + x.RunAsUser = nil + } + } else { + if x.RunAsUser == nil { + x.RunAsUser = new(int64) + } + yym4443 := z.DecBinary() + _ = yym4443 + if false { + } else { + *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) + } + } + case "runAsNonRoot": + if r.TryDecodeAsNil() { + if x.RunAsNonRoot != nil { + x.RunAsNonRoot = nil + } + } else { + if x.RunAsNonRoot == nil { + x.RunAsNonRoot = new(bool) + } + yym4445 := z.DecBinary() + _ = yym4445 + if false { + } else { + *((*bool)(x.RunAsNonRoot)) = r.DecodeBool() + } + } + case "readOnlyRootFilesystem": + if r.TryDecodeAsNil() { + if x.ReadOnlyRootFilesystem != nil { + x.ReadOnlyRootFilesystem = nil + } + } else { + if x.ReadOnlyRootFilesystem == nil { + x.ReadOnlyRootFilesystem = new(bool) + } + yym4447 := z.DecBinary() + _ = yym4447 + if false { + } else { + *((*bool)(x.ReadOnlyRootFilesystem)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys4437) + } // end switch yys4437 + } // end for yyj4437 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4448 int + var yyb4448 bool + var yyhl4448 bool = l >= 0 + yyj4448++ + if yyhl4448 { + yyb4448 = yyj4448 > l + } else { + yyb4448 = r.CheckBreak() + } + if yyb4448 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Capabilities != nil { + x.Capabilities = nil + } + } else { + if x.Capabilities == nil { + x.Capabilities = new(Capabilities) + } + x.Capabilities.CodecDecodeSelf(d) + } + yyj4448++ + if yyhl4448 { + yyb4448 = yyj4448 > l + } else { + yyb4448 = r.CheckBreak() + } + if yyb4448 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Privileged != nil { + x.Privileged = nil + } + } else { + if x.Privileged == nil { + x.Privileged = new(bool) + } + yym4451 := z.DecBinary() + _ = yym4451 + if false { + } else { + *((*bool)(x.Privileged)) = r.DecodeBool() + } + } + yyj4448++ + if yyhl4448 { + yyb4448 = yyj4448 > l + } else { + yyb4448 = r.CheckBreak() + } + if yyb4448 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + yyj4448++ + if yyhl4448 { + yyb4448 = yyj4448 > l + } else { + yyb4448 = r.CheckBreak() + } + if yyb4448 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RunAsUser != nil { + x.RunAsUser = nil + } + } else { + if x.RunAsUser == nil { + x.RunAsUser = new(int64) + } + yym4454 := z.DecBinary() + _ = yym4454 + if false { + } else { + *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) + } + } + yyj4448++ + if yyhl4448 { + yyb4448 = yyj4448 > l + } else { + yyb4448 = r.CheckBreak() + } + if yyb4448 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RunAsNonRoot != nil { + x.RunAsNonRoot = nil + } + } else { + if x.RunAsNonRoot == nil { + x.RunAsNonRoot = new(bool) + } + yym4456 := z.DecBinary() + _ = yym4456 + if false { + } else { + *((*bool)(x.RunAsNonRoot)) = r.DecodeBool() + } + } + yyj4448++ + if yyhl4448 { + yyb4448 = yyj4448 > l + } else { + yyb4448 = r.CheckBreak() + } + if yyb4448 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ReadOnlyRootFilesystem != nil { + x.ReadOnlyRootFilesystem = nil + } + } else { + if x.ReadOnlyRootFilesystem == nil { + x.ReadOnlyRootFilesystem = new(bool) + } + yym4458 := z.DecBinary() + _ = yym4458 + if false { + } else { + *((*bool)(x.ReadOnlyRootFilesystem)) = r.DecodeBool() + } + } + for { + yyj4448++ + if yyhl4448 { + yyb4448 = yyj4448 > l + } else { + yyb4448 = r.CheckBreak() + } + if yyb4448 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4448-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *SELinuxOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4459 := z.EncBinary() + _ = yym4459 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4460 := !z.EncBinary() + yy2arr4460 := z.EncBasicHandle().StructToArray + var yyq4460 [4]bool + _, _, _ = yysep4460, yyq4460, yy2arr4460 + const yyr4460 bool = false + yyq4460[0] = x.User != "" + yyq4460[1] = x.Role != "" + yyq4460[2] = x.Type != "" + yyq4460[3] = x.Level != "" + var yynn4460 int + if yyr4460 || yy2arr4460 { + r.EncodeArrayStart(4) + } else { + yynn4460 = 0 + for _, b := range yyq4460 { + if b { + yynn4460++ + } + } + r.EncodeMapStart(yynn4460) + yynn4460 = 0 + } + if yyr4460 || yy2arr4460 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4460[0] { + yym4462 := z.EncBinary() + _ = yym4462 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4460[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("user")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4463 := z.EncBinary() + _ = yym4463 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.User)) + } + } + } + if yyr4460 || yy2arr4460 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4460[1] { + yym4465 := z.EncBinary() + _ = yym4465 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Role)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4460[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("role")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4466 := z.EncBinary() + _ = yym4466 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Role)) + } + } + } + if yyr4460 || yy2arr4460 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4460[2] { + yym4468 := z.EncBinary() + _ = yym4468 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Type)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4460[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4469 := z.EncBinary() + _ = yym4469 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Type)) + } + } + } + if yyr4460 || yy2arr4460 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4460[3] { + yym4471 := z.EncBinary() + _ = yym4471 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Level)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4460[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("level")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4472 := z.EncBinary() + _ = yym4472 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Level)) + } + } + } + if yyr4460 || yy2arr4460 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SELinuxOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4473 := z.DecBinary() + _ = yym4473 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4474 := r.ContainerType() + if yyct4474 == codecSelferValueTypeMap1234 { + yyl4474 := r.ReadMapStart() + if yyl4474 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4474, d) + } + } else if yyct4474 == codecSelferValueTypeArray1234 { + yyl4474 := r.ReadArrayStart() + if yyl4474 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4474, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SELinuxOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4475Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4475Slc + var yyhl4475 bool = l >= 0 + for yyj4475 := 0; ; yyj4475++ { + if yyhl4475 { + if yyj4475 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4475Slc = r.DecodeBytes(yys4475Slc, true, true) + yys4475 := string(yys4475Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4475 { + case "user": + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + case "role": + if r.TryDecodeAsNil() { + x.Role = "" + } else { + x.Role = string(r.DecodeString()) + } + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = string(r.DecodeString()) + } + case "level": + if r.TryDecodeAsNil() { + x.Level = "" + } else { + x.Level = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys4475) + } // end switch yys4475 + } // end for yyj4475 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SELinuxOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4480 int + var yyb4480 bool + var yyhl4480 bool = l >= 0 + yyj4480++ + if yyhl4480 { + yyb4480 = yyj4480 > l + } else { + yyb4480 = r.CheckBreak() + } + if yyb4480 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.User = "" + } else { + x.User = string(r.DecodeString()) + } + yyj4480++ + if yyhl4480 { + yyb4480 = yyj4480 > l + } else { + yyb4480 = r.CheckBreak() + } + if yyb4480 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Role = "" + } else { + x.Role = string(r.DecodeString()) + } + yyj4480++ + if yyhl4480 { + yyb4480 = yyj4480 > l + } else { + yyb4480 = r.CheckBreak() + } + if yyb4480 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = string(r.DecodeString()) + } + yyj4480++ + if yyhl4480 { + yyb4480 = yyj4480 > l + } else { + yyb4480 = r.CheckBreak() + } + if yyb4480 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Level = "" + } else { + x.Level = string(r.DecodeString()) + } + for { + yyj4480++ + if yyhl4480 { + yyb4480 = yyj4480 > l + } else { + yyb4480 = r.CheckBreak() + } + if yyb4480 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4480-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *RangeAllocation) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym4485 := z.EncBinary() + _ = yym4485 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep4486 := !z.EncBinary() + yy2arr4486 := z.EncBasicHandle().StructToArray + var yyq4486 [5]bool + _, _, _ = yysep4486, yyq4486, yy2arr4486 + const yyr4486 bool = false + yyq4486[0] = x.Kind != "" + yyq4486[1] = x.APIVersion != "" + yyq4486[2] = true + var yynn4486 int + if yyr4486 || yy2arr4486 { + r.EncodeArrayStart(5) + } else { + yynn4486 = 2 + for _, b := range yyq4486 { + if b { + yynn4486++ + } + } + r.EncodeMapStart(yynn4486) + yynn4486 = 0 + } + if yyr4486 || yy2arr4486 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4486[0] { + yym4488 := z.EncBinary() + _ = yym4488 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4486[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4489 := z.EncBinary() + _ = yym4489 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr4486 || yy2arr4486 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4486[1] { + yym4491 := z.EncBinary() + _ = yym4491 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq4486[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4492 := z.EncBinary() + _ = yym4492 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr4486 || yy2arr4486 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq4486[2] { + yy4494 := &x.ObjectMeta + yy4494.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq4486[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4495 := &x.ObjectMeta + yy4495.CodecEncodeSelf(e) + } + } + if yyr4486 || yy2arr4486 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym4497 := z.EncBinary() + _ = yym4497 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Range)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("range")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym4498 := z.EncBinary() + _ = yym4498 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Range)) + } + } + if yyr4486 || yy2arr4486 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym4500 := z.EncBinary() + _ = yym4500 + if false { + } else { + r.EncodeStringBytes(codecSelferC_RAW1234, []byte(x.Data)) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("data")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym4501 := z.EncBinary() + _ = yym4501 + if false { + } else { + r.EncodeStringBytes(codecSelferC_RAW1234, []byte(x.Data)) + } + } + } + if yyr4486 || yy2arr4486 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *RangeAllocation) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym4502 := z.DecBinary() + _ = yym4502 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct4503 := r.ContainerType() + if yyct4503 == codecSelferValueTypeMap1234 { + yyl4503 := r.ReadMapStart() + if yyl4503 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl4503, d) + } + } else if yyct4503 == codecSelferValueTypeArray1234 { + yyl4503 := r.ReadArrayStart() + if yyl4503 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl4503, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *RangeAllocation) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys4504Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys4504Slc + var yyhl4504 bool = l >= 0 + for yyj4504 := 0; ; yyj4504++ { + if yyhl4504 { + if yyj4504 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys4504Slc = r.DecodeBytes(yys4504Slc, true, true) + yys4504 := string(yys4504Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys4504 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4507 := &x.ObjectMeta + yyv4507.CodecDecodeSelf(d) + } + case "range": + if r.TryDecodeAsNil() { + x.Range = "" + } else { + x.Range = string(r.DecodeString()) + } + case "data": + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4509 := &x.Data + yym4510 := z.DecBinary() + _ = yym4510 + if false { + } else { + *yyv4509 = r.DecodeBytes(*(*[]byte)(yyv4509), false, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys4504) + } // end switch yys4504 + } // end for yyj4504 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *RangeAllocation) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj4511 int + var yyb4511 bool + var yyhl4511 bool = l >= 0 + yyj4511++ + if yyhl4511 { + yyb4511 = yyj4511 > l + } else { + yyb4511 = r.CheckBreak() + } + if yyb4511 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj4511++ + if yyhl4511 { + yyb4511 = yyj4511 > l + } else { + yyb4511 = r.CheckBreak() + } + if yyb4511 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj4511++ + if yyhl4511 { + yyb4511 = yyj4511 > l + } else { + yyb4511 = r.CheckBreak() + } + if yyb4511 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = ObjectMeta{} + } else { + yyv4514 := &x.ObjectMeta + yyv4514.CodecDecodeSelf(d) + } + yyj4511++ + if yyhl4511 { + yyb4511 = yyj4511 > l + } else { + yyb4511 = r.CheckBreak() + } + if yyb4511 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Range = "" + } else { + x.Range = string(r.DecodeString()) + } + yyj4511++ + if yyhl4511 { + yyb4511 = yyj4511 > l + } else { + yyb4511 = r.CheckBreak() + } + if yyb4511 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv4516 := &x.Data + yym4517 := z.DecBinary() + _ = yym4517 + if false { + } else { + *yyv4516 = r.DecodeBytes(*(*[]byte)(yyv4516), false, false) + } + } + for { + yyj4511++ + if yyhl4511 { + yyb4511 = yyj4511 > l + } else { + yyb4511 = r.CheckBreak() + } + if yyb4511 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj4511-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) encSliceOwnerReference(v []OwnerReference, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4518 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4519 := &yyv4518 + yy4519.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceOwnerReference(v *[]OwnerReference, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4520 := *v + yyh4520, yyl4520 := z.DecSliceHelperStart() + var yyc4520 bool + if yyl4520 == 0 { + if yyv4520 == nil { + yyv4520 = []OwnerReference{} + yyc4520 = true + } else if len(yyv4520) != 0 { + yyv4520 = yyv4520[:0] + yyc4520 = true + } + } else if yyl4520 > 0 { + var yyrr4520, yyrl4520 int + var yyrt4520 bool + if yyl4520 > cap(yyv4520) { + + yyrg4520 := len(yyv4520) > 0 + yyv24520 := yyv4520 + yyrl4520, yyrt4520 = z.DecInferLen(yyl4520, z.DecBasicHandle().MaxInitLen, 72) + if yyrt4520 { + if yyrl4520 <= cap(yyv4520) { + yyv4520 = yyv4520[:yyrl4520] + } else { + yyv4520 = make([]OwnerReference, yyrl4520) + } + } else { + yyv4520 = make([]OwnerReference, yyrl4520) + } + yyc4520 = true + yyrr4520 = len(yyv4520) + if yyrg4520 { + copy(yyv4520, yyv24520) + } + } else if yyl4520 != len(yyv4520) { + yyv4520 = yyv4520[:yyl4520] + yyc4520 = true + } + yyj4520 := 0 + for ; yyj4520 < yyrr4520; yyj4520++ { + yyh4520.ElemContainerState(yyj4520) + if r.TryDecodeAsNil() { + yyv4520[yyj4520] = OwnerReference{} + } else { + yyv4521 := &yyv4520[yyj4520] + yyv4521.CodecDecodeSelf(d) + } + + } + if yyrt4520 { + for ; yyj4520 < yyl4520; yyj4520++ { + yyv4520 = append(yyv4520, OwnerReference{}) + yyh4520.ElemContainerState(yyj4520) + if r.TryDecodeAsNil() { + yyv4520[yyj4520] = OwnerReference{} + } else { + yyv4522 := &yyv4520[yyj4520] + yyv4522.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4520 := 0 + for ; !r.CheckBreak(); yyj4520++ { + + if yyj4520 >= len(yyv4520) { + yyv4520 = append(yyv4520, OwnerReference{}) // var yyz4520 OwnerReference + yyc4520 = true + } + yyh4520.ElemContainerState(yyj4520) + if yyj4520 < len(yyv4520) { + if r.TryDecodeAsNil() { + yyv4520[yyj4520] = OwnerReference{} + } else { + yyv4523 := &yyv4520[yyj4520] + yyv4523.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4520 < len(yyv4520) { + yyv4520 = yyv4520[:yyj4520] + yyc4520 = true + } else if yyj4520 == 0 && yyv4520 == nil { + yyv4520 = []OwnerReference{} + yyc4520 = true + } + } + yyh4520.End() + if yyc4520 { + *v = yyv4520 + } +} + +func (x codecSelfer1234) encSlicePersistentVolumeAccessMode(v []PersistentVolumeAccessMode, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4524 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4524.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePersistentVolumeAccessMode(v *[]PersistentVolumeAccessMode, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4525 := *v + yyh4525, yyl4525 := z.DecSliceHelperStart() + var yyc4525 bool + if yyl4525 == 0 { + if yyv4525 == nil { + yyv4525 = []PersistentVolumeAccessMode{} + yyc4525 = true + } else if len(yyv4525) != 0 { + yyv4525 = yyv4525[:0] + yyc4525 = true + } + } else if yyl4525 > 0 { + var yyrr4525, yyrl4525 int + var yyrt4525 bool + if yyl4525 > cap(yyv4525) { + + yyrl4525, yyrt4525 = z.DecInferLen(yyl4525, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4525 { + if yyrl4525 <= cap(yyv4525) { + yyv4525 = yyv4525[:yyrl4525] + } else { + yyv4525 = make([]PersistentVolumeAccessMode, yyrl4525) + } + } else { + yyv4525 = make([]PersistentVolumeAccessMode, yyrl4525) + } + yyc4525 = true + yyrr4525 = len(yyv4525) + } else if yyl4525 != len(yyv4525) { + yyv4525 = yyv4525[:yyl4525] + yyc4525 = true + } + yyj4525 := 0 + for ; yyj4525 < yyrr4525; yyj4525++ { + yyh4525.ElemContainerState(yyj4525) + if r.TryDecodeAsNil() { + yyv4525[yyj4525] = "" + } else { + yyv4525[yyj4525] = PersistentVolumeAccessMode(r.DecodeString()) + } + + } + if yyrt4525 { + for ; yyj4525 < yyl4525; yyj4525++ { + yyv4525 = append(yyv4525, "") + yyh4525.ElemContainerState(yyj4525) + if r.TryDecodeAsNil() { + yyv4525[yyj4525] = "" + } else { + yyv4525[yyj4525] = PersistentVolumeAccessMode(r.DecodeString()) + } + + } + } + + } else { + yyj4525 := 0 + for ; !r.CheckBreak(); yyj4525++ { + + if yyj4525 >= len(yyv4525) { + yyv4525 = append(yyv4525, "") // var yyz4525 PersistentVolumeAccessMode + yyc4525 = true + } + yyh4525.ElemContainerState(yyj4525) + if yyj4525 < len(yyv4525) { + if r.TryDecodeAsNil() { + yyv4525[yyj4525] = "" + } else { + yyv4525[yyj4525] = PersistentVolumeAccessMode(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4525 < len(yyv4525) { + yyv4525 = yyv4525[:yyj4525] + yyc4525 = true + } else if yyj4525 == 0 && yyv4525 == nil { + yyv4525 = []PersistentVolumeAccessMode{} + yyc4525 = true + } + } + yyh4525.End() + if yyc4525 { + *v = yyv4525 + } +} + +func (x codecSelfer1234) encSlicePersistentVolume(v []PersistentVolume, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4529 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4530 := &yyv4529 + yy4530.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePersistentVolume(v *[]PersistentVolume, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4531 := *v + yyh4531, yyl4531 := z.DecSliceHelperStart() + var yyc4531 bool + if yyl4531 == 0 { + if yyv4531 == nil { + yyv4531 = []PersistentVolume{} + yyc4531 = true + } else if len(yyv4531) != 0 { + yyv4531 = yyv4531[:0] + yyc4531 = true + } + } else if yyl4531 > 0 { + var yyrr4531, yyrl4531 int + var yyrt4531 bool + if yyl4531 > cap(yyv4531) { + + yyrg4531 := len(yyv4531) > 0 + yyv24531 := yyv4531 + yyrl4531, yyrt4531 = z.DecInferLen(yyl4531, z.DecBasicHandle().MaxInitLen, 488) + if yyrt4531 { + if yyrl4531 <= cap(yyv4531) { + yyv4531 = yyv4531[:yyrl4531] + } else { + yyv4531 = make([]PersistentVolume, yyrl4531) + } + } else { + yyv4531 = make([]PersistentVolume, yyrl4531) + } + yyc4531 = true + yyrr4531 = len(yyv4531) + if yyrg4531 { + copy(yyv4531, yyv24531) + } + } else if yyl4531 != len(yyv4531) { + yyv4531 = yyv4531[:yyl4531] + yyc4531 = true + } + yyj4531 := 0 + for ; yyj4531 < yyrr4531; yyj4531++ { + yyh4531.ElemContainerState(yyj4531) + if r.TryDecodeAsNil() { + yyv4531[yyj4531] = PersistentVolume{} + } else { + yyv4532 := &yyv4531[yyj4531] + yyv4532.CodecDecodeSelf(d) + } + + } + if yyrt4531 { + for ; yyj4531 < yyl4531; yyj4531++ { + yyv4531 = append(yyv4531, PersistentVolume{}) + yyh4531.ElemContainerState(yyj4531) + if r.TryDecodeAsNil() { + yyv4531[yyj4531] = PersistentVolume{} + } else { + yyv4533 := &yyv4531[yyj4531] + yyv4533.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4531 := 0 + for ; !r.CheckBreak(); yyj4531++ { + + if yyj4531 >= len(yyv4531) { + yyv4531 = append(yyv4531, PersistentVolume{}) // var yyz4531 PersistentVolume + yyc4531 = true + } + yyh4531.ElemContainerState(yyj4531) + if yyj4531 < len(yyv4531) { + if r.TryDecodeAsNil() { + yyv4531[yyj4531] = PersistentVolume{} + } else { + yyv4534 := &yyv4531[yyj4531] + yyv4534.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4531 < len(yyv4531) { + yyv4531 = yyv4531[:yyj4531] + yyc4531 = true + } else if yyj4531 == 0 && yyv4531 == nil { + yyv4531 = []PersistentVolume{} + yyc4531 = true + } + } + yyh4531.End() + if yyc4531 { + *v = yyv4531 + } +} + +func (x codecSelfer1234) encSlicePersistentVolumeClaim(v []PersistentVolumeClaim, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4535 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4536 := &yyv4535 + yy4536.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePersistentVolumeClaim(v *[]PersistentVolumeClaim, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4537 := *v + yyh4537, yyl4537 := z.DecSliceHelperStart() + var yyc4537 bool + if yyl4537 == 0 { + if yyv4537 == nil { + yyv4537 = []PersistentVolumeClaim{} + yyc4537 = true + } else if len(yyv4537) != 0 { + yyv4537 = yyv4537[:0] + yyc4537 = true + } + } else if yyl4537 > 0 { + var yyrr4537, yyrl4537 int + var yyrt4537 bool + if yyl4537 > cap(yyv4537) { + + yyrg4537 := len(yyv4537) > 0 + yyv24537 := yyv4537 + yyrl4537, yyrt4537 = z.DecInferLen(yyl4537, z.DecBasicHandle().MaxInitLen, 368) + if yyrt4537 { + if yyrl4537 <= cap(yyv4537) { + yyv4537 = yyv4537[:yyrl4537] + } else { + yyv4537 = make([]PersistentVolumeClaim, yyrl4537) + } + } else { + yyv4537 = make([]PersistentVolumeClaim, yyrl4537) + } + yyc4537 = true + yyrr4537 = len(yyv4537) + if yyrg4537 { + copy(yyv4537, yyv24537) + } + } else if yyl4537 != len(yyv4537) { + yyv4537 = yyv4537[:yyl4537] + yyc4537 = true + } + yyj4537 := 0 + for ; yyj4537 < yyrr4537; yyj4537++ { + yyh4537.ElemContainerState(yyj4537) + if r.TryDecodeAsNil() { + yyv4537[yyj4537] = PersistentVolumeClaim{} + } else { + yyv4538 := &yyv4537[yyj4537] + yyv4538.CodecDecodeSelf(d) + } + + } + if yyrt4537 { + for ; yyj4537 < yyl4537; yyj4537++ { + yyv4537 = append(yyv4537, PersistentVolumeClaim{}) + yyh4537.ElemContainerState(yyj4537) + if r.TryDecodeAsNil() { + yyv4537[yyj4537] = PersistentVolumeClaim{} + } else { + yyv4539 := &yyv4537[yyj4537] + yyv4539.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4537 := 0 + for ; !r.CheckBreak(); yyj4537++ { + + if yyj4537 >= len(yyv4537) { + yyv4537 = append(yyv4537, PersistentVolumeClaim{}) // var yyz4537 PersistentVolumeClaim + yyc4537 = true + } + yyh4537.ElemContainerState(yyj4537) + if yyj4537 < len(yyv4537) { + if r.TryDecodeAsNil() { + yyv4537[yyj4537] = PersistentVolumeClaim{} + } else { + yyv4540 := &yyv4537[yyj4537] + yyv4540.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4537 < len(yyv4537) { + yyv4537 = yyv4537[:yyj4537] + yyc4537 = true + } else if yyj4537 == 0 && yyv4537 == nil { + yyv4537 = []PersistentVolumeClaim{} + yyc4537 = true + } + } + yyh4537.End() + if yyc4537 { + *v = yyv4537 + } +} + +func (x codecSelfer1234) encSliceKeyToPath(v []KeyToPath, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4541 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4542 := &yyv4541 + yy4542.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceKeyToPath(v *[]KeyToPath, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4543 := *v + yyh4543, yyl4543 := z.DecSliceHelperStart() + var yyc4543 bool + if yyl4543 == 0 { + if yyv4543 == nil { + yyv4543 = []KeyToPath{} + yyc4543 = true + } else if len(yyv4543) != 0 { + yyv4543 = yyv4543[:0] + yyc4543 = true + } + } else if yyl4543 > 0 { + var yyrr4543, yyrl4543 int + var yyrt4543 bool + if yyl4543 > cap(yyv4543) { + + yyrg4543 := len(yyv4543) > 0 + yyv24543 := yyv4543 + yyrl4543, yyrt4543 = z.DecInferLen(yyl4543, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4543 { + if yyrl4543 <= cap(yyv4543) { + yyv4543 = yyv4543[:yyrl4543] + } else { + yyv4543 = make([]KeyToPath, yyrl4543) + } + } else { + yyv4543 = make([]KeyToPath, yyrl4543) + } + yyc4543 = true + yyrr4543 = len(yyv4543) + if yyrg4543 { + copy(yyv4543, yyv24543) + } + } else if yyl4543 != len(yyv4543) { + yyv4543 = yyv4543[:yyl4543] + yyc4543 = true + } + yyj4543 := 0 + for ; yyj4543 < yyrr4543; yyj4543++ { + yyh4543.ElemContainerState(yyj4543) + if r.TryDecodeAsNil() { + yyv4543[yyj4543] = KeyToPath{} + } else { + yyv4544 := &yyv4543[yyj4543] + yyv4544.CodecDecodeSelf(d) + } + + } + if yyrt4543 { + for ; yyj4543 < yyl4543; yyj4543++ { + yyv4543 = append(yyv4543, KeyToPath{}) + yyh4543.ElemContainerState(yyj4543) + if r.TryDecodeAsNil() { + yyv4543[yyj4543] = KeyToPath{} + } else { + yyv4545 := &yyv4543[yyj4543] + yyv4545.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4543 := 0 + for ; !r.CheckBreak(); yyj4543++ { + + if yyj4543 >= len(yyv4543) { + yyv4543 = append(yyv4543, KeyToPath{}) // var yyz4543 KeyToPath + yyc4543 = true + } + yyh4543.ElemContainerState(yyj4543) + if yyj4543 < len(yyv4543) { + if r.TryDecodeAsNil() { + yyv4543[yyj4543] = KeyToPath{} + } else { + yyv4546 := &yyv4543[yyj4543] + yyv4546.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4543 < len(yyv4543) { + yyv4543 = yyv4543[:yyj4543] + yyc4543 = true + } else if yyj4543 == 0 && yyv4543 == nil { + yyv4543 = []KeyToPath{} + yyc4543 = true + } + } + yyh4543.End() + if yyc4543 { + *v = yyv4543 + } +} + +func (x codecSelfer1234) encSliceHTTPHeader(v []HTTPHeader, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4547 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4548 := &yyv4547 + yy4548.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceHTTPHeader(v *[]HTTPHeader, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4549 := *v + yyh4549, yyl4549 := z.DecSliceHelperStart() + var yyc4549 bool + if yyl4549 == 0 { + if yyv4549 == nil { + yyv4549 = []HTTPHeader{} + yyc4549 = true + } else if len(yyv4549) != 0 { + yyv4549 = yyv4549[:0] + yyc4549 = true + } + } else if yyl4549 > 0 { + var yyrr4549, yyrl4549 int + var yyrt4549 bool + if yyl4549 > cap(yyv4549) { + + yyrg4549 := len(yyv4549) > 0 + yyv24549 := yyv4549 + yyrl4549, yyrt4549 = z.DecInferLen(yyl4549, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4549 { + if yyrl4549 <= cap(yyv4549) { + yyv4549 = yyv4549[:yyrl4549] + } else { + yyv4549 = make([]HTTPHeader, yyrl4549) + } + } else { + yyv4549 = make([]HTTPHeader, yyrl4549) + } + yyc4549 = true + yyrr4549 = len(yyv4549) + if yyrg4549 { + copy(yyv4549, yyv24549) + } + } else if yyl4549 != len(yyv4549) { + yyv4549 = yyv4549[:yyl4549] + yyc4549 = true + } + yyj4549 := 0 + for ; yyj4549 < yyrr4549; yyj4549++ { + yyh4549.ElemContainerState(yyj4549) + if r.TryDecodeAsNil() { + yyv4549[yyj4549] = HTTPHeader{} + } else { + yyv4550 := &yyv4549[yyj4549] + yyv4550.CodecDecodeSelf(d) + } + + } + if yyrt4549 { + for ; yyj4549 < yyl4549; yyj4549++ { + yyv4549 = append(yyv4549, HTTPHeader{}) + yyh4549.ElemContainerState(yyj4549) + if r.TryDecodeAsNil() { + yyv4549[yyj4549] = HTTPHeader{} + } else { + yyv4551 := &yyv4549[yyj4549] + yyv4551.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4549 := 0 + for ; !r.CheckBreak(); yyj4549++ { + + if yyj4549 >= len(yyv4549) { + yyv4549 = append(yyv4549, HTTPHeader{}) // var yyz4549 HTTPHeader + yyc4549 = true + } + yyh4549.ElemContainerState(yyj4549) + if yyj4549 < len(yyv4549) { + if r.TryDecodeAsNil() { + yyv4549[yyj4549] = HTTPHeader{} + } else { + yyv4552 := &yyv4549[yyj4549] + yyv4552.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4549 < len(yyv4549) { + yyv4549 = yyv4549[:yyj4549] + yyc4549 = true + } else if yyj4549 == 0 && yyv4549 == nil { + yyv4549 = []HTTPHeader{} + yyc4549 = true + } + } + yyh4549.End() + if yyc4549 { + *v = yyv4549 + } +} + +func (x codecSelfer1234) encSliceCapability(v []Capability, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4553 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4553.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceCapability(v *[]Capability, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4554 := *v + yyh4554, yyl4554 := z.DecSliceHelperStart() + var yyc4554 bool + if yyl4554 == 0 { + if yyv4554 == nil { + yyv4554 = []Capability{} + yyc4554 = true + } else if len(yyv4554) != 0 { + yyv4554 = yyv4554[:0] + yyc4554 = true + } + } else if yyl4554 > 0 { + var yyrr4554, yyrl4554 int + var yyrt4554 bool + if yyl4554 > cap(yyv4554) { + + yyrl4554, yyrt4554 = z.DecInferLen(yyl4554, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4554 { + if yyrl4554 <= cap(yyv4554) { + yyv4554 = yyv4554[:yyrl4554] + } else { + yyv4554 = make([]Capability, yyrl4554) + } + } else { + yyv4554 = make([]Capability, yyrl4554) + } + yyc4554 = true + yyrr4554 = len(yyv4554) + } else if yyl4554 != len(yyv4554) { + yyv4554 = yyv4554[:yyl4554] + yyc4554 = true + } + yyj4554 := 0 + for ; yyj4554 < yyrr4554; yyj4554++ { + yyh4554.ElemContainerState(yyj4554) + if r.TryDecodeAsNil() { + yyv4554[yyj4554] = "" + } else { + yyv4554[yyj4554] = Capability(r.DecodeString()) + } + + } + if yyrt4554 { + for ; yyj4554 < yyl4554; yyj4554++ { + yyv4554 = append(yyv4554, "") + yyh4554.ElemContainerState(yyj4554) + if r.TryDecodeAsNil() { + yyv4554[yyj4554] = "" + } else { + yyv4554[yyj4554] = Capability(r.DecodeString()) + } + + } + } + + } else { + yyj4554 := 0 + for ; !r.CheckBreak(); yyj4554++ { + + if yyj4554 >= len(yyv4554) { + yyv4554 = append(yyv4554, "") // var yyz4554 Capability + yyc4554 = true + } + yyh4554.ElemContainerState(yyj4554) + if yyj4554 < len(yyv4554) { + if r.TryDecodeAsNil() { + yyv4554[yyj4554] = "" + } else { + yyv4554[yyj4554] = Capability(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4554 < len(yyv4554) { + yyv4554 = yyv4554[:yyj4554] + yyc4554 = true + } else if yyj4554 == 0 && yyv4554 == nil { + yyv4554 = []Capability{} + yyc4554 = true + } + } + yyh4554.End() + if yyc4554 { + *v = yyv4554 + } +} + +func (x codecSelfer1234) encSliceContainerPort(v []ContainerPort, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4558 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4559 := &yyv4558 + yy4559.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceContainerPort(v *[]ContainerPort, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4560 := *v + yyh4560, yyl4560 := z.DecSliceHelperStart() + var yyc4560 bool + if yyl4560 == 0 { + if yyv4560 == nil { + yyv4560 = []ContainerPort{} + yyc4560 = true + } else if len(yyv4560) != 0 { + yyv4560 = yyv4560[:0] + yyc4560 = true + } + } else if yyl4560 > 0 { + var yyrr4560, yyrl4560 int + var yyrt4560 bool + if yyl4560 > cap(yyv4560) { + + yyrg4560 := len(yyv4560) > 0 + yyv24560 := yyv4560 + yyrl4560, yyrt4560 = z.DecInferLen(yyl4560, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4560 { + if yyrl4560 <= cap(yyv4560) { + yyv4560 = yyv4560[:yyrl4560] + } else { + yyv4560 = make([]ContainerPort, yyrl4560) + } + } else { + yyv4560 = make([]ContainerPort, yyrl4560) + } + yyc4560 = true + yyrr4560 = len(yyv4560) + if yyrg4560 { + copy(yyv4560, yyv24560) + } + } else if yyl4560 != len(yyv4560) { + yyv4560 = yyv4560[:yyl4560] + yyc4560 = true + } + yyj4560 := 0 + for ; yyj4560 < yyrr4560; yyj4560++ { + yyh4560.ElemContainerState(yyj4560) + if r.TryDecodeAsNil() { + yyv4560[yyj4560] = ContainerPort{} + } else { + yyv4561 := &yyv4560[yyj4560] + yyv4561.CodecDecodeSelf(d) + } + + } + if yyrt4560 { + for ; yyj4560 < yyl4560; yyj4560++ { + yyv4560 = append(yyv4560, ContainerPort{}) + yyh4560.ElemContainerState(yyj4560) + if r.TryDecodeAsNil() { + yyv4560[yyj4560] = ContainerPort{} + } else { + yyv4562 := &yyv4560[yyj4560] + yyv4562.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4560 := 0 + for ; !r.CheckBreak(); yyj4560++ { + + if yyj4560 >= len(yyv4560) { + yyv4560 = append(yyv4560, ContainerPort{}) // var yyz4560 ContainerPort + yyc4560 = true + } + yyh4560.ElemContainerState(yyj4560) + if yyj4560 < len(yyv4560) { + if r.TryDecodeAsNil() { + yyv4560[yyj4560] = ContainerPort{} + } else { + yyv4563 := &yyv4560[yyj4560] + yyv4563.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4560 < len(yyv4560) { + yyv4560 = yyv4560[:yyj4560] + yyc4560 = true + } else if yyj4560 == 0 && yyv4560 == nil { + yyv4560 = []ContainerPort{} + yyc4560 = true + } + } + yyh4560.End() + if yyc4560 { + *v = yyv4560 + } +} + +func (x codecSelfer1234) encSliceEnvVar(v []EnvVar, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4564 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4565 := &yyv4564 + yy4565.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEnvVar(v *[]EnvVar, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4566 := *v + yyh4566, yyl4566 := z.DecSliceHelperStart() + var yyc4566 bool + if yyl4566 == 0 { + if yyv4566 == nil { + yyv4566 = []EnvVar{} + yyc4566 = true + } else if len(yyv4566) != 0 { + yyv4566 = yyv4566[:0] + yyc4566 = true + } + } else if yyl4566 > 0 { + var yyrr4566, yyrl4566 int + var yyrt4566 bool + if yyl4566 > cap(yyv4566) { + + yyrg4566 := len(yyv4566) > 0 + yyv24566 := yyv4566 + yyrl4566, yyrt4566 = z.DecInferLen(yyl4566, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4566 { + if yyrl4566 <= cap(yyv4566) { + yyv4566 = yyv4566[:yyrl4566] + } else { + yyv4566 = make([]EnvVar, yyrl4566) + } + } else { + yyv4566 = make([]EnvVar, yyrl4566) + } + yyc4566 = true + yyrr4566 = len(yyv4566) + if yyrg4566 { + copy(yyv4566, yyv24566) + } + } else if yyl4566 != len(yyv4566) { + yyv4566 = yyv4566[:yyl4566] + yyc4566 = true + } + yyj4566 := 0 + for ; yyj4566 < yyrr4566; yyj4566++ { + yyh4566.ElemContainerState(yyj4566) + if r.TryDecodeAsNil() { + yyv4566[yyj4566] = EnvVar{} + } else { + yyv4567 := &yyv4566[yyj4566] + yyv4567.CodecDecodeSelf(d) + } + + } + if yyrt4566 { + for ; yyj4566 < yyl4566; yyj4566++ { + yyv4566 = append(yyv4566, EnvVar{}) + yyh4566.ElemContainerState(yyj4566) + if r.TryDecodeAsNil() { + yyv4566[yyj4566] = EnvVar{} + } else { + yyv4568 := &yyv4566[yyj4566] + yyv4568.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4566 := 0 + for ; !r.CheckBreak(); yyj4566++ { + + if yyj4566 >= len(yyv4566) { + yyv4566 = append(yyv4566, EnvVar{}) // var yyz4566 EnvVar + yyc4566 = true + } + yyh4566.ElemContainerState(yyj4566) + if yyj4566 < len(yyv4566) { + if r.TryDecodeAsNil() { + yyv4566[yyj4566] = EnvVar{} + } else { + yyv4569 := &yyv4566[yyj4566] + yyv4569.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4566 < len(yyv4566) { + yyv4566 = yyv4566[:yyj4566] + yyc4566 = true + } else if yyj4566 == 0 && yyv4566 == nil { + yyv4566 = []EnvVar{} + yyc4566 = true + } + } + yyh4566.End() + if yyc4566 { + *v = yyv4566 + } +} + +func (x codecSelfer1234) encSliceVolumeMount(v []VolumeMount, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4570 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4571 := &yyv4570 + yy4571.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceVolumeMount(v *[]VolumeMount, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4572 := *v + yyh4572, yyl4572 := z.DecSliceHelperStart() + var yyc4572 bool + if yyl4572 == 0 { + if yyv4572 == nil { + yyv4572 = []VolumeMount{} + yyc4572 = true + } else if len(yyv4572) != 0 { + yyv4572 = yyv4572[:0] + yyc4572 = true + } + } else if yyl4572 > 0 { + var yyrr4572, yyrl4572 int + var yyrt4572 bool + if yyl4572 > cap(yyv4572) { + + yyrg4572 := len(yyv4572) > 0 + yyv24572 := yyv4572 + yyrl4572, yyrt4572 = z.DecInferLen(yyl4572, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4572 { + if yyrl4572 <= cap(yyv4572) { + yyv4572 = yyv4572[:yyrl4572] + } else { + yyv4572 = make([]VolumeMount, yyrl4572) + } + } else { + yyv4572 = make([]VolumeMount, yyrl4572) + } + yyc4572 = true + yyrr4572 = len(yyv4572) + if yyrg4572 { + copy(yyv4572, yyv24572) + } + } else if yyl4572 != len(yyv4572) { + yyv4572 = yyv4572[:yyl4572] + yyc4572 = true + } + yyj4572 := 0 + for ; yyj4572 < yyrr4572; yyj4572++ { + yyh4572.ElemContainerState(yyj4572) + if r.TryDecodeAsNil() { + yyv4572[yyj4572] = VolumeMount{} + } else { + yyv4573 := &yyv4572[yyj4572] + yyv4573.CodecDecodeSelf(d) + } + + } + if yyrt4572 { + for ; yyj4572 < yyl4572; yyj4572++ { + yyv4572 = append(yyv4572, VolumeMount{}) + yyh4572.ElemContainerState(yyj4572) + if r.TryDecodeAsNil() { + yyv4572[yyj4572] = VolumeMount{} + } else { + yyv4574 := &yyv4572[yyj4572] + yyv4574.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4572 := 0 + for ; !r.CheckBreak(); yyj4572++ { + + if yyj4572 >= len(yyv4572) { + yyv4572 = append(yyv4572, VolumeMount{}) // var yyz4572 VolumeMount + yyc4572 = true + } + yyh4572.ElemContainerState(yyj4572) + if yyj4572 < len(yyv4572) { + if r.TryDecodeAsNil() { + yyv4572[yyj4572] = VolumeMount{} + } else { + yyv4575 := &yyv4572[yyj4572] + yyv4575.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4572 < len(yyv4572) { + yyv4572 = yyv4572[:yyj4572] + yyc4572 = true + } else if yyj4572 == 0 && yyv4572 == nil { + yyv4572 = []VolumeMount{} + yyc4572 = true + } + } + yyh4572.End() + if yyc4572 { + *v = yyv4572 + } +} + +func (x codecSelfer1234) encSliceNodeSelectorTerm(v []NodeSelectorTerm, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4576 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4577 := &yyv4576 + yy4577.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNodeSelectorTerm(v *[]NodeSelectorTerm, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4578 := *v + yyh4578, yyl4578 := z.DecSliceHelperStart() + var yyc4578 bool + if yyl4578 == 0 { + if yyv4578 == nil { + yyv4578 = []NodeSelectorTerm{} + yyc4578 = true + } else if len(yyv4578) != 0 { + yyv4578 = yyv4578[:0] + yyc4578 = true + } + } else if yyl4578 > 0 { + var yyrr4578, yyrl4578 int + var yyrt4578 bool + if yyl4578 > cap(yyv4578) { + + yyrg4578 := len(yyv4578) > 0 + yyv24578 := yyv4578 + yyrl4578, yyrt4578 = z.DecInferLen(yyl4578, z.DecBasicHandle().MaxInitLen, 24) + if yyrt4578 { + if yyrl4578 <= cap(yyv4578) { + yyv4578 = yyv4578[:yyrl4578] + } else { + yyv4578 = make([]NodeSelectorTerm, yyrl4578) + } + } else { + yyv4578 = make([]NodeSelectorTerm, yyrl4578) + } + yyc4578 = true + yyrr4578 = len(yyv4578) + if yyrg4578 { + copy(yyv4578, yyv24578) + } + } else if yyl4578 != len(yyv4578) { + yyv4578 = yyv4578[:yyl4578] + yyc4578 = true + } + yyj4578 := 0 + for ; yyj4578 < yyrr4578; yyj4578++ { + yyh4578.ElemContainerState(yyj4578) + if r.TryDecodeAsNil() { + yyv4578[yyj4578] = NodeSelectorTerm{} + } else { + yyv4579 := &yyv4578[yyj4578] + yyv4579.CodecDecodeSelf(d) + } + + } + if yyrt4578 { + for ; yyj4578 < yyl4578; yyj4578++ { + yyv4578 = append(yyv4578, NodeSelectorTerm{}) + yyh4578.ElemContainerState(yyj4578) + if r.TryDecodeAsNil() { + yyv4578[yyj4578] = NodeSelectorTerm{} + } else { + yyv4580 := &yyv4578[yyj4578] + yyv4580.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4578 := 0 + for ; !r.CheckBreak(); yyj4578++ { + + if yyj4578 >= len(yyv4578) { + yyv4578 = append(yyv4578, NodeSelectorTerm{}) // var yyz4578 NodeSelectorTerm + yyc4578 = true + } + yyh4578.ElemContainerState(yyj4578) + if yyj4578 < len(yyv4578) { + if r.TryDecodeAsNil() { + yyv4578[yyj4578] = NodeSelectorTerm{} + } else { + yyv4581 := &yyv4578[yyj4578] + yyv4581.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4578 < len(yyv4578) { + yyv4578 = yyv4578[:yyj4578] + yyc4578 = true + } else if yyj4578 == 0 && yyv4578 == nil { + yyv4578 = []NodeSelectorTerm{} + yyc4578 = true + } + } + yyh4578.End() + if yyc4578 { + *v = yyv4578 + } +} + +func (x codecSelfer1234) encSliceNodeSelectorRequirement(v []NodeSelectorRequirement, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4582 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4583 := &yyv4582 + yy4583.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNodeSelectorRequirement(v *[]NodeSelectorRequirement, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4584 := *v + yyh4584, yyl4584 := z.DecSliceHelperStart() + var yyc4584 bool + if yyl4584 == 0 { + if yyv4584 == nil { + yyv4584 = []NodeSelectorRequirement{} + yyc4584 = true + } else if len(yyv4584) != 0 { + yyv4584 = yyv4584[:0] + yyc4584 = true + } + } else if yyl4584 > 0 { + var yyrr4584, yyrl4584 int + var yyrt4584 bool + if yyl4584 > cap(yyv4584) { + + yyrg4584 := len(yyv4584) > 0 + yyv24584 := yyv4584 + yyrl4584, yyrt4584 = z.DecInferLen(yyl4584, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4584 { + if yyrl4584 <= cap(yyv4584) { + yyv4584 = yyv4584[:yyrl4584] + } else { + yyv4584 = make([]NodeSelectorRequirement, yyrl4584) + } + } else { + yyv4584 = make([]NodeSelectorRequirement, yyrl4584) + } + yyc4584 = true + yyrr4584 = len(yyv4584) + if yyrg4584 { + copy(yyv4584, yyv24584) + } + } else if yyl4584 != len(yyv4584) { + yyv4584 = yyv4584[:yyl4584] + yyc4584 = true + } + yyj4584 := 0 + for ; yyj4584 < yyrr4584; yyj4584++ { + yyh4584.ElemContainerState(yyj4584) + if r.TryDecodeAsNil() { + yyv4584[yyj4584] = NodeSelectorRequirement{} + } else { + yyv4585 := &yyv4584[yyj4584] + yyv4585.CodecDecodeSelf(d) + } + + } + if yyrt4584 { + for ; yyj4584 < yyl4584; yyj4584++ { + yyv4584 = append(yyv4584, NodeSelectorRequirement{}) + yyh4584.ElemContainerState(yyj4584) + if r.TryDecodeAsNil() { + yyv4584[yyj4584] = NodeSelectorRequirement{} + } else { + yyv4586 := &yyv4584[yyj4584] + yyv4586.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4584 := 0 + for ; !r.CheckBreak(); yyj4584++ { + + if yyj4584 >= len(yyv4584) { + yyv4584 = append(yyv4584, NodeSelectorRequirement{}) // var yyz4584 NodeSelectorRequirement + yyc4584 = true + } + yyh4584.ElemContainerState(yyj4584) + if yyj4584 < len(yyv4584) { + if r.TryDecodeAsNil() { + yyv4584[yyj4584] = NodeSelectorRequirement{} + } else { + yyv4587 := &yyv4584[yyj4584] + yyv4587.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4584 < len(yyv4584) { + yyv4584 = yyv4584[:yyj4584] + yyc4584 = true + } else if yyj4584 == 0 && yyv4584 == nil { + yyv4584 = []NodeSelectorRequirement{} + yyc4584 = true + } + } + yyh4584.End() + if yyc4584 { + *v = yyv4584 + } +} + +func (x codecSelfer1234) encSlicePodAffinityTerm(v []PodAffinityTerm, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4588 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4589 := &yyv4588 + yy4589.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePodAffinityTerm(v *[]PodAffinityTerm, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4590 := *v + yyh4590, yyl4590 := z.DecSliceHelperStart() + var yyc4590 bool + if yyl4590 == 0 { + if yyv4590 == nil { + yyv4590 = []PodAffinityTerm{} + yyc4590 = true + } else if len(yyv4590) != 0 { + yyv4590 = yyv4590[:0] + yyc4590 = true + } + } else if yyl4590 > 0 { + var yyrr4590, yyrl4590 int + var yyrt4590 bool + if yyl4590 > cap(yyv4590) { + + yyrg4590 := len(yyv4590) > 0 + yyv24590 := yyv4590 + yyrl4590, yyrt4590 = z.DecInferLen(yyl4590, z.DecBasicHandle().MaxInitLen, 48) + if yyrt4590 { + if yyrl4590 <= cap(yyv4590) { + yyv4590 = yyv4590[:yyrl4590] + } else { + yyv4590 = make([]PodAffinityTerm, yyrl4590) + } + } else { + yyv4590 = make([]PodAffinityTerm, yyrl4590) + } + yyc4590 = true + yyrr4590 = len(yyv4590) + if yyrg4590 { + copy(yyv4590, yyv24590) + } + } else if yyl4590 != len(yyv4590) { + yyv4590 = yyv4590[:yyl4590] + yyc4590 = true + } + yyj4590 := 0 + for ; yyj4590 < yyrr4590; yyj4590++ { + yyh4590.ElemContainerState(yyj4590) + if r.TryDecodeAsNil() { + yyv4590[yyj4590] = PodAffinityTerm{} + } else { + yyv4591 := &yyv4590[yyj4590] + yyv4591.CodecDecodeSelf(d) + } + + } + if yyrt4590 { + for ; yyj4590 < yyl4590; yyj4590++ { + yyv4590 = append(yyv4590, PodAffinityTerm{}) + yyh4590.ElemContainerState(yyj4590) + if r.TryDecodeAsNil() { + yyv4590[yyj4590] = PodAffinityTerm{} + } else { + yyv4592 := &yyv4590[yyj4590] + yyv4592.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4590 := 0 + for ; !r.CheckBreak(); yyj4590++ { + + if yyj4590 >= len(yyv4590) { + yyv4590 = append(yyv4590, PodAffinityTerm{}) // var yyz4590 PodAffinityTerm + yyc4590 = true + } + yyh4590.ElemContainerState(yyj4590) + if yyj4590 < len(yyv4590) { + if r.TryDecodeAsNil() { + yyv4590[yyj4590] = PodAffinityTerm{} + } else { + yyv4593 := &yyv4590[yyj4590] + yyv4593.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4590 < len(yyv4590) { + yyv4590 = yyv4590[:yyj4590] + yyc4590 = true + } else if yyj4590 == 0 && yyv4590 == nil { + yyv4590 = []PodAffinityTerm{} + yyc4590 = true + } + } + yyh4590.End() + if yyc4590 { + *v = yyv4590 + } +} + +func (x codecSelfer1234) encSliceWeightedPodAffinityTerm(v []WeightedPodAffinityTerm, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4594 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4595 := &yyv4594 + yy4595.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceWeightedPodAffinityTerm(v *[]WeightedPodAffinityTerm, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4596 := *v + yyh4596, yyl4596 := z.DecSliceHelperStart() + var yyc4596 bool + if yyl4596 == 0 { + if yyv4596 == nil { + yyv4596 = []WeightedPodAffinityTerm{} + yyc4596 = true + } else if len(yyv4596) != 0 { + yyv4596 = yyv4596[:0] + yyc4596 = true + } + } else if yyl4596 > 0 { + var yyrr4596, yyrl4596 int + var yyrt4596 bool + if yyl4596 > cap(yyv4596) { + + yyrg4596 := len(yyv4596) > 0 + yyv24596 := yyv4596 + yyrl4596, yyrt4596 = z.DecInferLen(yyl4596, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4596 { + if yyrl4596 <= cap(yyv4596) { + yyv4596 = yyv4596[:yyrl4596] + } else { + yyv4596 = make([]WeightedPodAffinityTerm, yyrl4596) + } + } else { + yyv4596 = make([]WeightedPodAffinityTerm, yyrl4596) + } + yyc4596 = true + yyrr4596 = len(yyv4596) + if yyrg4596 { + copy(yyv4596, yyv24596) + } + } else if yyl4596 != len(yyv4596) { + yyv4596 = yyv4596[:yyl4596] + yyc4596 = true + } + yyj4596 := 0 + for ; yyj4596 < yyrr4596; yyj4596++ { + yyh4596.ElemContainerState(yyj4596) + if r.TryDecodeAsNil() { + yyv4596[yyj4596] = WeightedPodAffinityTerm{} + } else { + yyv4597 := &yyv4596[yyj4596] + yyv4597.CodecDecodeSelf(d) + } + + } + if yyrt4596 { + for ; yyj4596 < yyl4596; yyj4596++ { + yyv4596 = append(yyv4596, WeightedPodAffinityTerm{}) + yyh4596.ElemContainerState(yyj4596) + if r.TryDecodeAsNil() { + yyv4596[yyj4596] = WeightedPodAffinityTerm{} + } else { + yyv4598 := &yyv4596[yyj4596] + yyv4598.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4596 := 0 + for ; !r.CheckBreak(); yyj4596++ { + + if yyj4596 >= len(yyv4596) { + yyv4596 = append(yyv4596, WeightedPodAffinityTerm{}) // var yyz4596 WeightedPodAffinityTerm + yyc4596 = true + } + yyh4596.ElemContainerState(yyj4596) + if yyj4596 < len(yyv4596) { + if r.TryDecodeAsNil() { + yyv4596[yyj4596] = WeightedPodAffinityTerm{} + } else { + yyv4599 := &yyv4596[yyj4596] + yyv4599.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4596 < len(yyv4596) { + yyv4596 = yyv4596[:yyj4596] + yyc4596 = true + } else if yyj4596 == 0 && yyv4596 == nil { + yyv4596 = []WeightedPodAffinityTerm{} + yyc4596 = true + } + } + yyh4596.End() + if yyc4596 { + *v = yyv4596 + } +} + +func (x codecSelfer1234) encSlicePreferredSchedulingTerm(v []PreferredSchedulingTerm, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4600 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4601 := &yyv4600 + yy4601.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePreferredSchedulingTerm(v *[]PreferredSchedulingTerm, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4602 := *v + yyh4602, yyl4602 := z.DecSliceHelperStart() + var yyc4602 bool + if yyl4602 == 0 { + if yyv4602 == nil { + yyv4602 = []PreferredSchedulingTerm{} + yyc4602 = true + } else if len(yyv4602) != 0 { + yyv4602 = yyv4602[:0] + yyc4602 = true + } + } else if yyl4602 > 0 { + var yyrr4602, yyrl4602 int + var yyrt4602 bool + if yyl4602 > cap(yyv4602) { + + yyrg4602 := len(yyv4602) > 0 + yyv24602 := yyv4602 + yyrl4602, yyrt4602 = z.DecInferLen(yyl4602, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4602 { + if yyrl4602 <= cap(yyv4602) { + yyv4602 = yyv4602[:yyrl4602] + } else { + yyv4602 = make([]PreferredSchedulingTerm, yyrl4602) + } + } else { + yyv4602 = make([]PreferredSchedulingTerm, yyrl4602) + } + yyc4602 = true + yyrr4602 = len(yyv4602) + if yyrg4602 { + copy(yyv4602, yyv24602) + } + } else if yyl4602 != len(yyv4602) { + yyv4602 = yyv4602[:yyl4602] + yyc4602 = true + } + yyj4602 := 0 + for ; yyj4602 < yyrr4602; yyj4602++ { + yyh4602.ElemContainerState(yyj4602) + if r.TryDecodeAsNil() { + yyv4602[yyj4602] = PreferredSchedulingTerm{} + } else { + yyv4603 := &yyv4602[yyj4602] + yyv4603.CodecDecodeSelf(d) + } + + } + if yyrt4602 { + for ; yyj4602 < yyl4602; yyj4602++ { + yyv4602 = append(yyv4602, PreferredSchedulingTerm{}) + yyh4602.ElemContainerState(yyj4602) + if r.TryDecodeAsNil() { + yyv4602[yyj4602] = PreferredSchedulingTerm{} + } else { + yyv4604 := &yyv4602[yyj4602] + yyv4604.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4602 := 0 + for ; !r.CheckBreak(); yyj4602++ { + + if yyj4602 >= len(yyv4602) { + yyv4602 = append(yyv4602, PreferredSchedulingTerm{}) // var yyz4602 PreferredSchedulingTerm + yyc4602 = true + } + yyh4602.ElemContainerState(yyj4602) + if yyj4602 < len(yyv4602) { + if r.TryDecodeAsNil() { + yyv4602[yyj4602] = PreferredSchedulingTerm{} + } else { + yyv4605 := &yyv4602[yyj4602] + yyv4605.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4602 < len(yyv4602) { + yyv4602 = yyv4602[:yyj4602] + yyc4602 = true + } else if yyj4602 == 0 && yyv4602 == nil { + yyv4602 = []PreferredSchedulingTerm{} + yyc4602 = true + } + } + yyh4602.End() + if yyc4602 { + *v = yyv4602 + } +} + +func (x codecSelfer1234) encSliceVolume(v []Volume, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4606 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4607 := &yyv4606 + yy4607.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceVolume(v *[]Volume, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4608 := *v + yyh4608, yyl4608 := z.DecSliceHelperStart() + var yyc4608 bool + if yyl4608 == 0 { + if yyv4608 == nil { + yyv4608 = []Volume{} + yyc4608 = true + } else if len(yyv4608) != 0 { + yyv4608 = yyv4608[:0] + yyc4608 = true + } + } else if yyl4608 > 0 { + var yyrr4608, yyrl4608 int + var yyrt4608 bool + if yyl4608 > cap(yyv4608) { + + yyrg4608 := len(yyv4608) > 0 + yyv24608 := yyv4608 + yyrl4608, yyrt4608 = z.DecInferLen(yyl4608, z.DecBasicHandle().MaxInitLen, 192) + if yyrt4608 { + if yyrl4608 <= cap(yyv4608) { + yyv4608 = yyv4608[:yyrl4608] + } else { + yyv4608 = make([]Volume, yyrl4608) + } + } else { + yyv4608 = make([]Volume, yyrl4608) + } + yyc4608 = true + yyrr4608 = len(yyv4608) + if yyrg4608 { + copy(yyv4608, yyv24608) + } + } else if yyl4608 != len(yyv4608) { + yyv4608 = yyv4608[:yyl4608] + yyc4608 = true + } + yyj4608 := 0 + for ; yyj4608 < yyrr4608; yyj4608++ { + yyh4608.ElemContainerState(yyj4608) + if r.TryDecodeAsNil() { + yyv4608[yyj4608] = Volume{} + } else { + yyv4609 := &yyv4608[yyj4608] + yyv4609.CodecDecodeSelf(d) + } + + } + if yyrt4608 { + for ; yyj4608 < yyl4608; yyj4608++ { + yyv4608 = append(yyv4608, Volume{}) + yyh4608.ElemContainerState(yyj4608) + if r.TryDecodeAsNil() { + yyv4608[yyj4608] = Volume{} + } else { + yyv4610 := &yyv4608[yyj4608] + yyv4610.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4608 := 0 + for ; !r.CheckBreak(); yyj4608++ { + + if yyj4608 >= len(yyv4608) { + yyv4608 = append(yyv4608, Volume{}) // var yyz4608 Volume + yyc4608 = true + } + yyh4608.ElemContainerState(yyj4608) + if yyj4608 < len(yyv4608) { + if r.TryDecodeAsNil() { + yyv4608[yyj4608] = Volume{} + } else { + yyv4611 := &yyv4608[yyj4608] + yyv4611.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4608 < len(yyv4608) { + yyv4608 = yyv4608[:yyj4608] + yyc4608 = true + } else if yyj4608 == 0 && yyv4608 == nil { + yyv4608 = []Volume{} + yyc4608 = true + } + } + yyh4608.End() + if yyc4608 { + *v = yyv4608 + } +} + +func (x codecSelfer1234) encSliceContainer(v []Container, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4612 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4613 := &yyv4612 + yy4613.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceContainer(v *[]Container, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4614 := *v + yyh4614, yyl4614 := z.DecSliceHelperStart() + var yyc4614 bool + if yyl4614 == 0 { + if yyv4614 == nil { + yyv4614 = []Container{} + yyc4614 = true + } else if len(yyv4614) != 0 { + yyv4614 = yyv4614[:0] + yyc4614 = true + } + } else if yyl4614 > 0 { + var yyrr4614, yyrl4614 int + var yyrt4614 bool + if yyl4614 > cap(yyv4614) { + + yyrg4614 := len(yyv4614) > 0 + yyv24614 := yyv4614 + yyrl4614, yyrt4614 = z.DecInferLen(yyl4614, z.DecBasicHandle().MaxInitLen, 256) + if yyrt4614 { + if yyrl4614 <= cap(yyv4614) { + yyv4614 = yyv4614[:yyrl4614] + } else { + yyv4614 = make([]Container, yyrl4614) + } + } else { + yyv4614 = make([]Container, yyrl4614) + } + yyc4614 = true + yyrr4614 = len(yyv4614) + if yyrg4614 { + copy(yyv4614, yyv24614) + } + } else if yyl4614 != len(yyv4614) { + yyv4614 = yyv4614[:yyl4614] + yyc4614 = true + } + yyj4614 := 0 + for ; yyj4614 < yyrr4614; yyj4614++ { + yyh4614.ElemContainerState(yyj4614) + if r.TryDecodeAsNil() { + yyv4614[yyj4614] = Container{} + } else { + yyv4615 := &yyv4614[yyj4614] + yyv4615.CodecDecodeSelf(d) + } + + } + if yyrt4614 { + for ; yyj4614 < yyl4614; yyj4614++ { + yyv4614 = append(yyv4614, Container{}) + yyh4614.ElemContainerState(yyj4614) + if r.TryDecodeAsNil() { + yyv4614[yyj4614] = Container{} + } else { + yyv4616 := &yyv4614[yyj4614] + yyv4616.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4614 := 0 + for ; !r.CheckBreak(); yyj4614++ { + + if yyj4614 >= len(yyv4614) { + yyv4614 = append(yyv4614, Container{}) // var yyz4614 Container + yyc4614 = true + } + yyh4614.ElemContainerState(yyj4614) + if yyj4614 < len(yyv4614) { + if r.TryDecodeAsNil() { + yyv4614[yyj4614] = Container{} + } else { + yyv4617 := &yyv4614[yyj4614] + yyv4617.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4614 < len(yyv4614) { + yyv4614 = yyv4614[:yyj4614] + yyc4614 = true + } else if yyj4614 == 0 && yyv4614 == nil { + yyv4614 = []Container{} + yyc4614 = true + } + } + yyh4614.End() + if yyc4614 { + *v = yyv4614 + } +} + +func (x codecSelfer1234) encSliceLocalObjectReference(v []LocalObjectReference, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4618 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4619 := &yyv4618 + yy4619.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceLocalObjectReference(v *[]LocalObjectReference, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4620 := *v + yyh4620, yyl4620 := z.DecSliceHelperStart() + var yyc4620 bool + if yyl4620 == 0 { + if yyv4620 == nil { + yyv4620 = []LocalObjectReference{} + yyc4620 = true + } else if len(yyv4620) != 0 { + yyv4620 = yyv4620[:0] + yyc4620 = true + } + } else if yyl4620 > 0 { + var yyrr4620, yyrl4620 int + var yyrt4620 bool + if yyl4620 > cap(yyv4620) { + + yyrg4620 := len(yyv4620) > 0 + yyv24620 := yyv4620 + yyrl4620, yyrt4620 = z.DecInferLen(yyl4620, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4620 { + if yyrl4620 <= cap(yyv4620) { + yyv4620 = yyv4620[:yyrl4620] + } else { + yyv4620 = make([]LocalObjectReference, yyrl4620) + } + } else { + yyv4620 = make([]LocalObjectReference, yyrl4620) + } + yyc4620 = true + yyrr4620 = len(yyv4620) + if yyrg4620 { + copy(yyv4620, yyv24620) + } + } else if yyl4620 != len(yyv4620) { + yyv4620 = yyv4620[:yyl4620] + yyc4620 = true + } + yyj4620 := 0 + for ; yyj4620 < yyrr4620; yyj4620++ { + yyh4620.ElemContainerState(yyj4620) + if r.TryDecodeAsNil() { + yyv4620[yyj4620] = LocalObjectReference{} + } else { + yyv4621 := &yyv4620[yyj4620] + yyv4621.CodecDecodeSelf(d) + } + + } + if yyrt4620 { + for ; yyj4620 < yyl4620; yyj4620++ { + yyv4620 = append(yyv4620, LocalObjectReference{}) + yyh4620.ElemContainerState(yyj4620) + if r.TryDecodeAsNil() { + yyv4620[yyj4620] = LocalObjectReference{} + } else { + yyv4622 := &yyv4620[yyj4620] + yyv4622.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4620 := 0 + for ; !r.CheckBreak(); yyj4620++ { + + if yyj4620 >= len(yyv4620) { + yyv4620 = append(yyv4620, LocalObjectReference{}) // var yyz4620 LocalObjectReference + yyc4620 = true + } + yyh4620.ElemContainerState(yyj4620) + if yyj4620 < len(yyv4620) { + if r.TryDecodeAsNil() { + yyv4620[yyj4620] = LocalObjectReference{} + } else { + yyv4623 := &yyv4620[yyj4620] + yyv4623.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4620 < len(yyv4620) { + yyv4620 = yyv4620[:yyj4620] + yyc4620 = true + } else if yyj4620 == 0 && yyv4620 == nil { + yyv4620 = []LocalObjectReference{} + yyc4620 = true + } + } + yyh4620.End() + if yyc4620 { + *v = yyv4620 + } +} + +func (x codecSelfer1234) encSlicePodCondition(v []PodCondition, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4624 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4625 := &yyv4624 + yy4625.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePodCondition(v *[]PodCondition, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4626 := *v + yyh4626, yyl4626 := z.DecSliceHelperStart() + var yyc4626 bool + if yyl4626 == 0 { + if yyv4626 == nil { + yyv4626 = []PodCondition{} + yyc4626 = true + } else if len(yyv4626) != 0 { + yyv4626 = yyv4626[:0] + yyc4626 = true + } + } else if yyl4626 > 0 { + var yyrr4626, yyrl4626 int + var yyrt4626 bool + if yyl4626 > cap(yyv4626) { + + yyrg4626 := len(yyv4626) > 0 + yyv24626 := yyv4626 + yyrl4626, yyrt4626 = z.DecInferLen(yyl4626, z.DecBasicHandle().MaxInitLen, 112) + if yyrt4626 { + if yyrl4626 <= cap(yyv4626) { + yyv4626 = yyv4626[:yyrl4626] + } else { + yyv4626 = make([]PodCondition, yyrl4626) + } + } else { + yyv4626 = make([]PodCondition, yyrl4626) + } + yyc4626 = true + yyrr4626 = len(yyv4626) + if yyrg4626 { + copy(yyv4626, yyv24626) + } + } else if yyl4626 != len(yyv4626) { + yyv4626 = yyv4626[:yyl4626] + yyc4626 = true + } + yyj4626 := 0 + for ; yyj4626 < yyrr4626; yyj4626++ { + yyh4626.ElemContainerState(yyj4626) + if r.TryDecodeAsNil() { + yyv4626[yyj4626] = PodCondition{} + } else { + yyv4627 := &yyv4626[yyj4626] + yyv4627.CodecDecodeSelf(d) + } + + } + if yyrt4626 { + for ; yyj4626 < yyl4626; yyj4626++ { + yyv4626 = append(yyv4626, PodCondition{}) + yyh4626.ElemContainerState(yyj4626) + if r.TryDecodeAsNil() { + yyv4626[yyj4626] = PodCondition{} + } else { + yyv4628 := &yyv4626[yyj4626] + yyv4628.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4626 := 0 + for ; !r.CheckBreak(); yyj4626++ { + + if yyj4626 >= len(yyv4626) { + yyv4626 = append(yyv4626, PodCondition{}) // var yyz4626 PodCondition + yyc4626 = true + } + yyh4626.ElemContainerState(yyj4626) + if yyj4626 < len(yyv4626) { + if r.TryDecodeAsNil() { + yyv4626[yyj4626] = PodCondition{} + } else { + yyv4629 := &yyv4626[yyj4626] + yyv4629.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4626 < len(yyv4626) { + yyv4626 = yyv4626[:yyj4626] + yyc4626 = true + } else if yyj4626 == 0 && yyv4626 == nil { + yyv4626 = []PodCondition{} + yyc4626 = true + } + } + yyh4626.End() + if yyc4626 { + *v = yyv4626 + } +} + +func (x codecSelfer1234) encSliceContainerStatus(v []ContainerStatus, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4630 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4631 := &yyv4630 + yy4631.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceContainerStatus(v *[]ContainerStatus, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4632 := *v + yyh4632, yyl4632 := z.DecSliceHelperStart() + var yyc4632 bool + if yyl4632 == 0 { + if yyv4632 == nil { + yyv4632 = []ContainerStatus{} + yyc4632 = true + } else if len(yyv4632) != 0 { + yyv4632 = yyv4632[:0] + yyc4632 = true + } + } else if yyl4632 > 0 { + var yyrr4632, yyrl4632 int + var yyrt4632 bool + if yyl4632 > cap(yyv4632) { + + yyrg4632 := len(yyv4632) > 0 + yyv24632 := yyv4632 + yyrl4632, yyrt4632 = z.DecInferLen(yyl4632, z.DecBasicHandle().MaxInitLen, 120) + if yyrt4632 { + if yyrl4632 <= cap(yyv4632) { + yyv4632 = yyv4632[:yyrl4632] + } else { + yyv4632 = make([]ContainerStatus, yyrl4632) + } + } else { + yyv4632 = make([]ContainerStatus, yyrl4632) + } + yyc4632 = true + yyrr4632 = len(yyv4632) + if yyrg4632 { + copy(yyv4632, yyv24632) + } + } else if yyl4632 != len(yyv4632) { + yyv4632 = yyv4632[:yyl4632] + yyc4632 = true + } + yyj4632 := 0 + for ; yyj4632 < yyrr4632; yyj4632++ { + yyh4632.ElemContainerState(yyj4632) + if r.TryDecodeAsNil() { + yyv4632[yyj4632] = ContainerStatus{} + } else { + yyv4633 := &yyv4632[yyj4632] + yyv4633.CodecDecodeSelf(d) + } + + } + if yyrt4632 { + for ; yyj4632 < yyl4632; yyj4632++ { + yyv4632 = append(yyv4632, ContainerStatus{}) + yyh4632.ElemContainerState(yyj4632) + if r.TryDecodeAsNil() { + yyv4632[yyj4632] = ContainerStatus{} + } else { + yyv4634 := &yyv4632[yyj4632] + yyv4634.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4632 := 0 + for ; !r.CheckBreak(); yyj4632++ { + + if yyj4632 >= len(yyv4632) { + yyv4632 = append(yyv4632, ContainerStatus{}) // var yyz4632 ContainerStatus + yyc4632 = true + } + yyh4632.ElemContainerState(yyj4632) + if yyj4632 < len(yyv4632) { + if r.TryDecodeAsNil() { + yyv4632[yyj4632] = ContainerStatus{} + } else { + yyv4635 := &yyv4632[yyj4632] + yyv4635.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4632 < len(yyv4632) { + yyv4632 = yyv4632[:yyj4632] + yyc4632 = true + } else if yyj4632 == 0 && yyv4632 == nil { + yyv4632 = []ContainerStatus{} + yyc4632 = true + } + } + yyh4632.End() + if yyc4632 { + *v = yyv4632 + } +} + +func (x codecSelfer1234) encSlicePod(v []Pod, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4636 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4637 := &yyv4636 + yy4637.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePod(v *[]Pod, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4638 := *v + yyh4638, yyl4638 := z.DecSliceHelperStart() + var yyc4638 bool + if yyl4638 == 0 { + if yyv4638 == nil { + yyv4638 = []Pod{} + yyc4638 = true + } else if len(yyv4638) != 0 { + yyv4638 = yyv4638[:0] + yyc4638 = true + } + } else if yyl4638 > 0 { + var yyrr4638, yyrl4638 int + var yyrt4638 bool + if yyl4638 > cap(yyv4638) { + + yyrg4638 := len(yyv4638) > 0 + yyv24638 := yyv4638 + yyrl4638, yyrt4638 = z.DecInferLen(yyl4638, z.DecBasicHandle().MaxInitLen, 664) + if yyrt4638 { + if yyrl4638 <= cap(yyv4638) { + yyv4638 = yyv4638[:yyrl4638] + } else { + yyv4638 = make([]Pod, yyrl4638) + } + } else { + yyv4638 = make([]Pod, yyrl4638) + } + yyc4638 = true + yyrr4638 = len(yyv4638) + if yyrg4638 { + copy(yyv4638, yyv24638) + } + } else if yyl4638 != len(yyv4638) { + yyv4638 = yyv4638[:yyl4638] + yyc4638 = true + } + yyj4638 := 0 + for ; yyj4638 < yyrr4638; yyj4638++ { + yyh4638.ElemContainerState(yyj4638) + if r.TryDecodeAsNil() { + yyv4638[yyj4638] = Pod{} + } else { + yyv4639 := &yyv4638[yyj4638] + yyv4639.CodecDecodeSelf(d) + } + + } + if yyrt4638 { + for ; yyj4638 < yyl4638; yyj4638++ { + yyv4638 = append(yyv4638, Pod{}) + yyh4638.ElemContainerState(yyj4638) + if r.TryDecodeAsNil() { + yyv4638[yyj4638] = Pod{} + } else { + yyv4640 := &yyv4638[yyj4638] + yyv4640.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4638 := 0 + for ; !r.CheckBreak(); yyj4638++ { + + if yyj4638 >= len(yyv4638) { + yyv4638 = append(yyv4638, Pod{}) // var yyz4638 Pod + yyc4638 = true + } + yyh4638.ElemContainerState(yyj4638) + if yyj4638 < len(yyv4638) { + if r.TryDecodeAsNil() { + yyv4638[yyj4638] = Pod{} + } else { + yyv4641 := &yyv4638[yyj4638] + yyv4641.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4638 < len(yyv4638) { + yyv4638 = yyv4638[:yyj4638] + yyc4638 = true + } else if yyj4638 == 0 && yyv4638 == nil { + yyv4638 = []Pod{} + yyc4638 = true + } + } + yyh4638.End() + if yyc4638 { + *v = yyv4638 + } +} + +func (x codecSelfer1234) encSlicePodTemplate(v []PodTemplate, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4642 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4643 := &yyv4642 + yy4643.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePodTemplate(v *[]PodTemplate, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4644 := *v + yyh4644, yyl4644 := z.DecSliceHelperStart() + var yyc4644 bool + if yyl4644 == 0 { + if yyv4644 == nil { + yyv4644 = []PodTemplate{} + yyc4644 = true + } else if len(yyv4644) != 0 { + yyv4644 = yyv4644[:0] + yyc4644 = true + } + } else if yyl4644 > 0 { + var yyrr4644, yyrl4644 int + var yyrt4644 bool + if yyl4644 > cap(yyv4644) { + + yyrg4644 := len(yyv4644) > 0 + yyv24644 := yyv4644 + yyrl4644, yyrt4644 = z.DecInferLen(yyl4644, z.DecBasicHandle().MaxInitLen, 728) + if yyrt4644 { + if yyrl4644 <= cap(yyv4644) { + yyv4644 = yyv4644[:yyrl4644] + } else { + yyv4644 = make([]PodTemplate, yyrl4644) + } + } else { + yyv4644 = make([]PodTemplate, yyrl4644) + } + yyc4644 = true + yyrr4644 = len(yyv4644) + if yyrg4644 { + copy(yyv4644, yyv24644) + } + } else if yyl4644 != len(yyv4644) { + yyv4644 = yyv4644[:yyl4644] + yyc4644 = true + } + yyj4644 := 0 + for ; yyj4644 < yyrr4644; yyj4644++ { + yyh4644.ElemContainerState(yyj4644) + if r.TryDecodeAsNil() { + yyv4644[yyj4644] = PodTemplate{} + } else { + yyv4645 := &yyv4644[yyj4644] + yyv4645.CodecDecodeSelf(d) + } + + } + if yyrt4644 { + for ; yyj4644 < yyl4644; yyj4644++ { + yyv4644 = append(yyv4644, PodTemplate{}) + yyh4644.ElemContainerState(yyj4644) + if r.TryDecodeAsNil() { + yyv4644[yyj4644] = PodTemplate{} + } else { + yyv4646 := &yyv4644[yyj4644] + yyv4646.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4644 := 0 + for ; !r.CheckBreak(); yyj4644++ { + + if yyj4644 >= len(yyv4644) { + yyv4644 = append(yyv4644, PodTemplate{}) // var yyz4644 PodTemplate + yyc4644 = true + } + yyh4644.ElemContainerState(yyj4644) + if yyj4644 < len(yyv4644) { + if r.TryDecodeAsNil() { + yyv4644[yyj4644] = PodTemplate{} + } else { + yyv4647 := &yyv4644[yyj4644] + yyv4647.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4644 < len(yyv4644) { + yyv4644 = yyv4644[:yyj4644] + yyc4644 = true + } else if yyj4644 == 0 && yyv4644 == nil { + yyv4644 = []PodTemplate{} + yyc4644 = true + } + } + yyh4644.End() + if yyc4644 { + *v = yyv4644 + } +} + +func (x codecSelfer1234) encSliceReplicationController(v []ReplicationController, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4648 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4649 := &yyv4648 + yy4649.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceReplicationController(v *[]ReplicationController, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4650 := *v + yyh4650, yyl4650 := z.DecSliceHelperStart() + var yyc4650 bool + if yyl4650 == 0 { + if yyv4650 == nil { + yyv4650 = []ReplicationController{} + yyc4650 = true + } else if len(yyv4650) != 0 { + yyv4650 = yyv4650[:0] + yyc4650 = true + } + } else if yyl4650 > 0 { + var yyrr4650, yyrl4650 int + var yyrt4650 bool + if yyl4650 > cap(yyv4650) { + + yyrg4650 := len(yyv4650) > 0 + yyv24650 := yyv4650 + yyrl4650, yyrt4650 = z.DecInferLen(yyl4650, z.DecBasicHandle().MaxInitLen, 304) + if yyrt4650 { + if yyrl4650 <= cap(yyv4650) { + yyv4650 = yyv4650[:yyrl4650] + } else { + yyv4650 = make([]ReplicationController, yyrl4650) + } + } else { + yyv4650 = make([]ReplicationController, yyrl4650) + } + yyc4650 = true + yyrr4650 = len(yyv4650) + if yyrg4650 { + copy(yyv4650, yyv24650) + } + } else if yyl4650 != len(yyv4650) { + yyv4650 = yyv4650[:yyl4650] + yyc4650 = true + } + yyj4650 := 0 + for ; yyj4650 < yyrr4650; yyj4650++ { + yyh4650.ElemContainerState(yyj4650) + if r.TryDecodeAsNil() { + yyv4650[yyj4650] = ReplicationController{} + } else { + yyv4651 := &yyv4650[yyj4650] + yyv4651.CodecDecodeSelf(d) + } + + } + if yyrt4650 { + for ; yyj4650 < yyl4650; yyj4650++ { + yyv4650 = append(yyv4650, ReplicationController{}) + yyh4650.ElemContainerState(yyj4650) + if r.TryDecodeAsNil() { + yyv4650[yyj4650] = ReplicationController{} + } else { + yyv4652 := &yyv4650[yyj4650] + yyv4652.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4650 := 0 + for ; !r.CheckBreak(); yyj4650++ { + + if yyj4650 >= len(yyv4650) { + yyv4650 = append(yyv4650, ReplicationController{}) // var yyz4650 ReplicationController + yyc4650 = true + } + yyh4650.ElemContainerState(yyj4650) + if yyj4650 < len(yyv4650) { + if r.TryDecodeAsNil() { + yyv4650[yyj4650] = ReplicationController{} + } else { + yyv4653 := &yyv4650[yyj4650] + yyv4653.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4650 < len(yyv4650) { + yyv4650 = yyv4650[:yyj4650] + yyc4650 = true + } else if yyj4650 == 0 && yyv4650 == nil { + yyv4650 = []ReplicationController{} + yyc4650 = true + } + } + yyh4650.End() + if yyc4650 { + *v = yyv4650 + } +} + +func (x codecSelfer1234) encSliceLoadBalancerIngress(v []LoadBalancerIngress, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4654 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4655 := &yyv4654 + yy4655.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceLoadBalancerIngress(v *[]LoadBalancerIngress, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4656 := *v + yyh4656, yyl4656 := z.DecSliceHelperStart() + var yyc4656 bool + if yyl4656 == 0 { + if yyv4656 == nil { + yyv4656 = []LoadBalancerIngress{} + yyc4656 = true + } else if len(yyv4656) != 0 { + yyv4656 = yyv4656[:0] + yyc4656 = true + } + } else if yyl4656 > 0 { + var yyrr4656, yyrl4656 int + var yyrt4656 bool + if yyl4656 > cap(yyv4656) { + + yyrg4656 := len(yyv4656) > 0 + yyv24656 := yyv4656 + yyrl4656, yyrt4656 = z.DecInferLen(yyl4656, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4656 { + if yyrl4656 <= cap(yyv4656) { + yyv4656 = yyv4656[:yyrl4656] + } else { + yyv4656 = make([]LoadBalancerIngress, yyrl4656) + } + } else { + yyv4656 = make([]LoadBalancerIngress, yyrl4656) + } + yyc4656 = true + yyrr4656 = len(yyv4656) + if yyrg4656 { + copy(yyv4656, yyv24656) + } + } else if yyl4656 != len(yyv4656) { + yyv4656 = yyv4656[:yyl4656] + yyc4656 = true + } + yyj4656 := 0 + for ; yyj4656 < yyrr4656; yyj4656++ { + yyh4656.ElemContainerState(yyj4656) + if r.TryDecodeAsNil() { + yyv4656[yyj4656] = LoadBalancerIngress{} + } else { + yyv4657 := &yyv4656[yyj4656] + yyv4657.CodecDecodeSelf(d) + } + + } + if yyrt4656 { + for ; yyj4656 < yyl4656; yyj4656++ { + yyv4656 = append(yyv4656, LoadBalancerIngress{}) + yyh4656.ElemContainerState(yyj4656) + if r.TryDecodeAsNil() { + yyv4656[yyj4656] = LoadBalancerIngress{} + } else { + yyv4658 := &yyv4656[yyj4656] + yyv4658.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4656 := 0 + for ; !r.CheckBreak(); yyj4656++ { + + if yyj4656 >= len(yyv4656) { + yyv4656 = append(yyv4656, LoadBalancerIngress{}) // var yyz4656 LoadBalancerIngress + yyc4656 = true + } + yyh4656.ElemContainerState(yyj4656) + if yyj4656 < len(yyv4656) { + if r.TryDecodeAsNil() { + yyv4656[yyj4656] = LoadBalancerIngress{} + } else { + yyv4659 := &yyv4656[yyj4656] + yyv4659.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4656 < len(yyv4656) { + yyv4656 = yyv4656[:yyj4656] + yyc4656 = true + } else if yyj4656 == 0 && yyv4656 == nil { + yyv4656 = []LoadBalancerIngress{} + yyc4656 = true + } + } + yyh4656.End() + if yyc4656 { + *v = yyv4656 + } +} + +func (x codecSelfer1234) encSliceServicePort(v []ServicePort, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4660 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4661 := &yyv4660 + yy4661.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceServicePort(v *[]ServicePort, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4662 := *v + yyh4662, yyl4662 := z.DecSliceHelperStart() + var yyc4662 bool + if yyl4662 == 0 { + if yyv4662 == nil { + yyv4662 = []ServicePort{} + yyc4662 = true + } else if len(yyv4662) != 0 { + yyv4662 = yyv4662[:0] + yyc4662 = true + } + } else if yyl4662 > 0 { + var yyrr4662, yyrl4662 int + var yyrt4662 bool + if yyl4662 > cap(yyv4662) { + + yyrg4662 := len(yyv4662) > 0 + yyv24662 := yyv4662 + yyrl4662, yyrt4662 = z.DecInferLen(yyl4662, z.DecBasicHandle().MaxInitLen, 80) + if yyrt4662 { + if yyrl4662 <= cap(yyv4662) { + yyv4662 = yyv4662[:yyrl4662] + } else { + yyv4662 = make([]ServicePort, yyrl4662) + } + } else { + yyv4662 = make([]ServicePort, yyrl4662) + } + yyc4662 = true + yyrr4662 = len(yyv4662) + if yyrg4662 { + copy(yyv4662, yyv24662) + } + } else if yyl4662 != len(yyv4662) { + yyv4662 = yyv4662[:yyl4662] + yyc4662 = true + } + yyj4662 := 0 + for ; yyj4662 < yyrr4662; yyj4662++ { + yyh4662.ElemContainerState(yyj4662) + if r.TryDecodeAsNil() { + yyv4662[yyj4662] = ServicePort{} + } else { + yyv4663 := &yyv4662[yyj4662] + yyv4663.CodecDecodeSelf(d) + } + + } + if yyrt4662 { + for ; yyj4662 < yyl4662; yyj4662++ { + yyv4662 = append(yyv4662, ServicePort{}) + yyh4662.ElemContainerState(yyj4662) + if r.TryDecodeAsNil() { + yyv4662[yyj4662] = ServicePort{} + } else { + yyv4664 := &yyv4662[yyj4662] + yyv4664.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4662 := 0 + for ; !r.CheckBreak(); yyj4662++ { + + if yyj4662 >= len(yyv4662) { + yyv4662 = append(yyv4662, ServicePort{}) // var yyz4662 ServicePort + yyc4662 = true + } + yyh4662.ElemContainerState(yyj4662) + if yyj4662 < len(yyv4662) { + if r.TryDecodeAsNil() { + yyv4662[yyj4662] = ServicePort{} + } else { + yyv4665 := &yyv4662[yyj4662] + yyv4665.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4662 < len(yyv4662) { + yyv4662 = yyv4662[:yyj4662] + yyc4662 = true + } else if yyj4662 == 0 && yyv4662 == nil { + yyv4662 = []ServicePort{} + yyc4662 = true + } + } + yyh4662.End() + if yyc4662 { + *v = yyv4662 + } +} + +func (x codecSelfer1234) encSliceService(v []Service, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4666 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4667 := &yyv4666 + yy4667.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceService(v *[]Service, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4668 := *v + yyh4668, yyl4668 := z.DecSliceHelperStart() + var yyc4668 bool + if yyl4668 == 0 { + if yyv4668 == nil { + yyv4668 = []Service{} + yyc4668 = true + } else if len(yyv4668) != 0 { + yyv4668 = yyv4668[:0] + yyc4668 = true + } + } else if yyl4668 > 0 { + var yyrr4668, yyrl4668 int + var yyrt4668 bool + if yyl4668 > cap(yyv4668) { + + yyrg4668 := len(yyv4668) > 0 + yyv24668 := yyv4668 + yyrl4668, yyrt4668 = z.DecInferLen(yyl4668, z.DecBasicHandle().MaxInitLen, 464) + if yyrt4668 { + if yyrl4668 <= cap(yyv4668) { + yyv4668 = yyv4668[:yyrl4668] + } else { + yyv4668 = make([]Service, yyrl4668) + } + } else { + yyv4668 = make([]Service, yyrl4668) + } + yyc4668 = true + yyrr4668 = len(yyv4668) + if yyrg4668 { + copy(yyv4668, yyv24668) + } + } else if yyl4668 != len(yyv4668) { + yyv4668 = yyv4668[:yyl4668] + yyc4668 = true + } + yyj4668 := 0 + for ; yyj4668 < yyrr4668; yyj4668++ { + yyh4668.ElemContainerState(yyj4668) + if r.TryDecodeAsNil() { + yyv4668[yyj4668] = Service{} + } else { + yyv4669 := &yyv4668[yyj4668] + yyv4669.CodecDecodeSelf(d) + } + + } + if yyrt4668 { + for ; yyj4668 < yyl4668; yyj4668++ { + yyv4668 = append(yyv4668, Service{}) + yyh4668.ElemContainerState(yyj4668) + if r.TryDecodeAsNil() { + yyv4668[yyj4668] = Service{} + } else { + yyv4670 := &yyv4668[yyj4668] + yyv4670.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4668 := 0 + for ; !r.CheckBreak(); yyj4668++ { + + if yyj4668 >= len(yyv4668) { + yyv4668 = append(yyv4668, Service{}) // var yyz4668 Service + yyc4668 = true + } + yyh4668.ElemContainerState(yyj4668) + if yyj4668 < len(yyv4668) { + if r.TryDecodeAsNil() { + yyv4668[yyj4668] = Service{} + } else { + yyv4671 := &yyv4668[yyj4668] + yyv4671.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4668 < len(yyv4668) { + yyv4668 = yyv4668[:yyj4668] + yyc4668 = true + } else if yyj4668 == 0 && yyv4668 == nil { + yyv4668 = []Service{} + yyc4668 = true + } + } + yyh4668.End() + if yyc4668 { + *v = yyv4668 + } +} + +func (x codecSelfer1234) encSliceObjectReference(v []ObjectReference, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4672 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4673 := &yyv4672 + yy4673.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceObjectReference(v *[]ObjectReference, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4674 := *v + yyh4674, yyl4674 := z.DecSliceHelperStart() + var yyc4674 bool + if yyl4674 == 0 { + if yyv4674 == nil { + yyv4674 = []ObjectReference{} + yyc4674 = true + } else if len(yyv4674) != 0 { + yyv4674 = yyv4674[:0] + yyc4674 = true + } + } else if yyl4674 > 0 { + var yyrr4674, yyrl4674 int + var yyrt4674 bool + if yyl4674 > cap(yyv4674) { + + yyrg4674 := len(yyv4674) > 0 + yyv24674 := yyv4674 + yyrl4674, yyrt4674 = z.DecInferLen(yyl4674, z.DecBasicHandle().MaxInitLen, 112) + if yyrt4674 { + if yyrl4674 <= cap(yyv4674) { + yyv4674 = yyv4674[:yyrl4674] + } else { + yyv4674 = make([]ObjectReference, yyrl4674) + } + } else { + yyv4674 = make([]ObjectReference, yyrl4674) + } + yyc4674 = true + yyrr4674 = len(yyv4674) + if yyrg4674 { + copy(yyv4674, yyv24674) + } + } else if yyl4674 != len(yyv4674) { + yyv4674 = yyv4674[:yyl4674] + yyc4674 = true + } + yyj4674 := 0 + for ; yyj4674 < yyrr4674; yyj4674++ { + yyh4674.ElemContainerState(yyj4674) + if r.TryDecodeAsNil() { + yyv4674[yyj4674] = ObjectReference{} + } else { + yyv4675 := &yyv4674[yyj4674] + yyv4675.CodecDecodeSelf(d) + } + + } + if yyrt4674 { + for ; yyj4674 < yyl4674; yyj4674++ { + yyv4674 = append(yyv4674, ObjectReference{}) + yyh4674.ElemContainerState(yyj4674) + if r.TryDecodeAsNil() { + yyv4674[yyj4674] = ObjectReference{} + } else { + yyv4676 := &yyv4674[yyj4674] + yyv4676.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4674 := 0 + for ; !r.CheckBreak(); yyj4674++ { + + if yyj4674 >= len(yyv4674) { + yyv4674 = append(yyv4674, ObjectReference{}) // var yyz4674 ObjectReference + yyc4674 = true + } + yyh4674.ElemContainerState(yyj4674) + if yyj4674 < len(yyv4674) { + if r.TryDecodeAsNil() { + yyv4674[yyj4674] = ObjectReference{} + } else { + yyv4677 := &yyv4674[yyj4674] + yyv4677.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4674 < len(yyv4674) { + yyv4674 = yyv4674[:yyj4674] + yyc4674 = true + } else if yyj4674 == 0 && yyv4674 == nil { + yyv4674 = []ObjectReference{} + yyc4674 = true + } + } + yyh4674.End() + if yyc4674 { + *v = yyv4674 + } +} + +func (x codecSelfer1234) encSliceServiceAccount(v []ServiceAccount, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4678 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4679 := &yyv4678 + yy4679.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceServiceAccount(v *[]ServiceAccount, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4680 := *v + yyh4680, yyl4680 := z.DecSliceHelperStart() + var yyc4680 bool + if yyl4680 == 0 { + if yyv4680 == nil { + yyv4680 = []ServiceAccount{} + yyc4680 = true + } else if len(yyv4680) != 0 { + yyv4680 = yyv4680[:0] + yyc4680 = true + } + } else if yyl4680 > 0 { + var yyrr4680, yyrl4680 int + var yyrt4680 bool + if yyl4680 > cap(yyv4680) { + + yyrg4680 := len(yyv4680) > 0 + yyv24680 := yyv4680 + yyrl4680, yyrt4680 = z.DecInferLen(yyl4680, z.DecBasicHandle().MaxInitLen, 304) + if yyrt4680 { + if yyrl4680 <= cap(yyv4680) { + yyv4680 = yyv4680[:yyrl4680] + } else { + yyv4680 = make([]ServiceAccount, yyrl4680) + } + } else { + yyv4680 = make([]ServiceAccount, yyrl4680) + } + yyc4680 = true + yyrr4680 = len(yyv4680) + if yyrg4680 { + copy(yyv4680, yyv24680) + } + } else if yyl4680 != len(yyv4680) { + yyv4680 = yyv4680[:yyl4680] + yyc4680 = true + } + yyj4680 := 0 + for ; yyj4680 < yyrr4680; yyj4680++ { + yyh4680.ElemContainerState(yyj4680) + if r.TryDecodeAsNil() { + yyv4680[yyj4680] = ServiceAccount{} + } else { + yyv4681 := &yyv4680[yyj4680] + yyv4681.CodecDecodeSelf(d) + } + + } + if yyrt4680 { + for ; yyj4680 < yyl4680; yyj4680++ { + yyv4680 = append(yyv4680, ServiceAccount{}) + yyh4680.ElemContainerState(yyj4680) + if r.TryDecodeAsNil() { + yyv4680[yyj4680] = ServiceAccount{} + } else { + yyv4682 := &yyv4680[yyj4680] + yyv4682.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4680 := 0 + for ; !r.CheckBreak(); yyj4680++ { + + if yyj4680 >= len(yyv4680) { + yyv4680 = append(yyv4680, ServiceAccount{}) // var yyz4680 ServiceAccount + yyc4680 = true + } + yyh4680.ElemContainerState(yyj4680) + if yyj4680 < len(yyv4680) { + if r.TryDecodeAsNil() { + yyv4680[yyj4680] = ServiceAccount{} + } else { + yyv4683 := &yyv4680[yyj4680] + yyv4683.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4680 < len(yyv4680) { + yyv4680 = yyv4680[:yyj4680] + yyc4680 = true + } else if yyj4680 == 0 && yyv4680 == nil { + yyv4680 = []ServiceAccount{} + yyc4680 = true + } + } + yyh4680.End() + if yyc4680 { + *v = yyv4680 + } +} + +func (x codecSelfer1234) encSliceEndpointSubset(v []EndpointSubset, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4684 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4685 := &yyv4684 + yy4685.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEndpointSubset(v *[]EndpointSubset, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4686 := *v + yyh4686, yyl4686 := z.DecSliceHelperStart() + var yyc4686 bool + if yyl4686 == 0 { + if yyv4686 == nil { + yyv4686 = []EndpointSubset{} + yyc4686 = true + } else if len(yyv4686) != 0 { + yyv4686 = yyv4686[:0] + yyc4686 = true + } + } else if yyl4686 > 0 { + var yyrr4686, yyrl4686 int + var yyrt4686 bool + if yyl4686 > cap(yyv4686) { + + yyrg4686 := len(yyv4686) > 0 + yyv24686 := yyv4686 + yyrl4686, yyrt4686 = z.DecInferLen(yyl4686, z.DecBasicHandle().MaxInitLen, 72) + if yyrt4686 { + if yyrl4686 <= cap(yyv4686) { + yyv4686 = yyv4686[:yyrl4686] + } else { + yyv4686 = make([]EndpointSubset, yyrl4686) + } + } else { + yyv4686 = make([]EndpointSubset, yyrl4686) + } + yyc4686 = true + yyrr4686 = len(yyv4686) + if yyrg4686 { + copy(yyv4686, yyv24686) + } + } else if yyl4686 != len(yyv4686) { + yyv4686 = yyv4686[:yyl4686] + yyc4686 = true + } + yyj4686 := 0 + for ; yyj4686 < yyrr4686; yyj4686++ { + yyh4686.ElemContainerState(yyj4686) + if r.TryDecodeAsNil() { + yyv4686[yyj4686] = EndpointSubset{} + } else { + yyv4687 := &yyv4686[yyj4686] + yyv4687.CodecDecodeSelf(d) + } + + } + if yyrt4686 { + for ; yyj4686 < yyl4686; yyj4686++ { + yyv4686 = append(yyv4686, EndpointSubset{}) + yyh4686.ElemContainerState(yyj4686) + if r.TryDecodeAsNil() { + yyv4686[yyj4686] = EndpointSubset{} + } else { + yyv4688 := &yyv4686[yyj4686] + yyv4688.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4686 := 0 + for ; !r.CheckBreak(); yyj4686++ { + + if yyj4686 >= len(yyv4686) { + yyv4686 = append(yyv4686, EndpointSubset{}) // var yyz4686 EndpointSubset + yyc4686 = true + } + yyh4686.ElemContainerState(yyj4686) + if yyj4686 < len(yyv4686) { + if r.TryDecodeAsNil() { + yyv4686[yyj4686] = EndpointSubset{} + } else { + yyv4689 := &yyv4686[yyj4686] + yyv4689.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4686 < len(yyv4686) { + yyv4686 = yyv4686[:yyj4686] + yyc4686 = true + } else if yyj4686 == 0 && yyv4686 == nil { + yyv4686 = []EndpointSubset{} + yyc4686 = true + } + } + yyh4686.End() + if yyc4686 { + *v = yyv4686 + } +} + +func (x codecSelfer1234) encSliceEndpointAddress(v []EndpointAddress, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4690 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4691 := &yyv4690 + yy4691.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEndpointAddress(v *[]EndpointAddress, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4692 := *v + yyh4692, yyl4692 := z.DecSliceHelperStart() + var yyc4692 bool + if yyl4692 == 0 { + if yyv4692 == nil { + yyv4692 = []EndpointAddress{} + yyc4692 = true + } else if len(yyv4692) != 0 { + yyv4692 = yyv4692[:0] + yyc4692 = true + } + } else if yyl4692 > 0 { + var yyrr4692, yyrl4692 int + var yyrt4692 bool + if yyl4692 > cap(yyv4692) { + + yyrg4692 := len(yyv4692) > 0 + yyv24692 := yyv4692 + yyrl4692, yyrt4692 = z.DecInferLen(yyl4692, z.DecBasicHandle().MaxInitLen, 48) + if yyrt4692 { + if yyrl4692 <= cap(yyv4692) { + yyv4692 = yyv4692[:yyrl4692] + } else { + yyv4692 = make([]EndpointAddress, yyrl4692) + } + } else { + yyv4692 = make([]EndpointAddress, yyrl4692) + } + yyc4692 = true + yyrr4692 = len(yyv4692) + if yyrg4692 { + copy(yyv4692, yyv24692) + } + } else if yyl4692 != len(yyv4692) { + yyv4692 = yyv4692[:yyl4692] + yyc4692 = true + } + yyj4692 := 0 + for ; yyj4692 < yyrr4692; yyj4692++ { + yyh4692.ElemContainerState(yyj4692) + if r.TryDecodeAsNil() { + yyv4692[yyj4692] = EndpointAddress{} + } else { + yyv4693 := &yyv4692[yyj4692] + yyv4693.CodecDecodeSelf(d) + } + + } + if yyrt4692 { + for ; yyj4692 < yyl4692; yyj4692++ { + yyv4692 = append(yyv4692, EndpointAddress{}) + yyh4692.ElemContainerState(yyj4692) + if r.TryDecodeAsNil() { + yyv4692[yyj4692] = EndpointAddress{} + } else { + yyv4694 := &yyv4692[yyj4692] + yyv4694.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4692 := 0 + for ; !r.CheckBreak(); yyj4692++ { + + if yyj4692 >= len(yyv4692) { + yyv4692 = append(yyv4692, EndpointAddress{}) // var yyz4692 EndpointAddress + yyc4692 = true + } + yyh4692.ElemContainerState(yyj4692) + if yyj4692 < len(yyv4692) { + if r.TryDecodeAsNil() { + yyv4692[yyj4692] = EndpointAddress{} + } else { + yyv4695 := &yyv4692[yyj4692] + yyv4695.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4692 < len(yyv4692) { + yyv4692 = yyv4692[:yyj4692] + yyc4692 = true + } else if yyj4692 == 0 && yyv4692 == nil { + yyv4692 = []EndpointAddress{} + yyc4692 = true + } + } + yyh4692.End() + if yyc4692 { + *v = yyv4692 + } +} + +func (x codecSelfer1234) encSliceEndpointPort(v []EndpointPort, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4696 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4697 := &yyv4696 + yy4697.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEndpointPort(v *[]EndpointPort, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4698 := *v + yyh4698, yyl4698 := z.DecSliceHelperStart() + var yyc4698 bool + if yyl4698 == 0 { + if yyv4698 == nil { + yyv4698 = []EndpointPort{} + yyc4698 = true + } else if len(yyv4698) != 0 { + yyv4698 = yyv4698[:0] + yyc4698 = true + } + } else if yyl4698 > 0 { + var yyrr4698, yyrl4698 int + var yyrt4698 bool + if yyl4698 > cap(yyv4698) { + + yyrg4698 := len(yyv4698) > 0 + yyv24698 := yyv4698 + yyrl4698, yyrt4698 = z.DecInferLen(yyl4698, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4698 { + if yyrl4698 <= cap(yyv4698) { + yyv4698 = yyv4698[:yyrl4698] + } else { + yyv4698 = make([]EndpointPort, yyrl4698) + } + } else { + yyv4698 = make([]EndpointPort, yyrl4698) + } + yyc4698 = true + yyrr4698 = len(yyv4698) + if yyrg4698 { + copy(yyv4698, yyv24698) + } + } else if yyl4698 != len(yyv4698) { + yyv4698 = yyv4698[:yyl4698] + yyc4698 = true + } + yyj4698 := 0 + for ; yyj4698 < yyrr4698; yyj4698++ { + yyh4698.ElemContainerState(yyj4698) + if r.TryDecodeAsNil() { + yyv4698[yyj4698] = EndpointPort{} + } else { + yyv4699 := &yyv4698[yyj4698] + yyv4699.CodecDecodeSelf(d) + } + + } + if yyrt4698 { + for ; yyj4698 < yyl4698; yyj4698++ { + yyv4698 = append(yyv4698, EndpointPort{}) + yyh4698.ElemContainerState(yyj4698) + if r.TryDecodeAsNil() { + yyv4698[yyj4698] = EndpointPort{} + } else { + yyv4700 := &yyv4698[yyj4698] + yyv4700.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4698 := 0 + for ; !r.CheckBreak(); yyj4698++ { + + if yyj4698 >= len(yyv4698) { + yyv4698 = append(yyv4698, EndpointPort{}) // var yyz4698 EndpointPort + yyc4698 = true + } + yyh4698.ElemContainerState(yyj4698) + if yyj4698 < len(yyv4698) { + if r.TryDecodeAsNil() { + yyv4698[yyj4698] = EndpointPort{} + } else { + yyv4701 := &yyv4698[yyj4698] + yyv4701.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4698 < len(yyv4698) { + yyv4698 = yyv4698[:yyj4698] + yyc4698 = true + } else if yyj4698 == 0 && yyv4698 == nil { + yyv4698 = []EndpointPort{} + yyc4698 = true + } + } + yyh4698.End() + if yyc4698 { + *v = yyv4698 + } +} + +func (x codecSelfer1234) encSliceEndpoints(v []Endpoints, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4702 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4703 := &yyv4702 + yy4703.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEndpoints(v *[]Endpoints, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4704 := *v + yyh4704, yyl4704 := z.DecSliceHelperStart() + var yyc4704 bool + if yyl4704 == 0 { + if yyv4704 == nil { + yyv4704 = []Endpoints{} + yyc4704 = true + } else if len(yyv4704) != 0 { + yyv4704 = yyv4704[:0] + yyc4704 = true + } + } else if yyl4704 > 0 { + var yyrr4704, yyrl4704 int + var yyrt4704 bool + if yyl4704 > cap(yyv4704) { + + yyrg4704 := len(yyv4704) > 0 + yyv24704 := yyv4704 + yyrl4704, yyrt4704 = z.DecInferLen(yyl4704, z.DecBasicHandle().MaxInitLen, 280) + if yyrt4704 { + if yyrl4704 <= cap(yyv4704) { + yyv4704 = yyv4704[:yyrl4704] + } else { + yyv4704 = make([]Endpoints, yyrl4704) + } + } else { + yyv4704 = make([]Endpoints, yyrl4704) + } + yyc4704 = true + yyrr4704 = len(yyv4704) + if yyrg4704 { + copy(yyv4704, yyv24704) + } + } else if yyl4704 != len(yyv4704) { + yyv4704 = yyv4704[:yyl4704] + yyc4704 = true + } + yyj4704 := 0 + for ; yyj4704 < yyrr4704; yyj4704++ { + yyh4704.ElemContainerState(yyj4704) + if r.TryDecodeAsNil() { + yyv4704[yyj4704] = Endpoints{} + } else { + yyv4705 := &yyv4704[yyj4704] + yyv4705.CodecDecodeSelf(d) + } + + } + if yyrt4704 { + for ; yyj4704 < yyl4704; yyj4704++ { + yyv4704 = append(yyv4704, Endpoints{}) + yyh4704.ElemContainerState(yyj4704) + if r.TryDecodeAsNil() { + yyv4704[yyj4704] = Endpoints{} + } else { + yyv4706 := &yyv4704[yyj4704] + yyv4706.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4704 := 0 + for ; !r.CheckBreak(); yyj4704++ { + + if yyj4704 >= len(yyv4704) { + yyv4704 = append(yyv4704, Endpoints{}) // var yyz4704 Endpoints + yyc4704 = true + } + yyh4704.ElemContainerState(yyj4704) + if yyj4704 < len(yyv4704) { + if r.TryDecodeAsNil() { + yyv4704[yyj4704] = Endpoints{} + } else { + yyv4707 := &yyv4704[yyj4704] + yyv4707.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4704 < len(yyv4704) { + yyv4704 = yyv4704[:yyj4704] + yyc4704 = true + } else if yyj4704 == 0 && yyv4704 == nil { + yyv4704 = []Endpoints{} + yyc4704 = true + } + } + yyh4704.End() + if yyc4704 { + *v = yyv4704 + } +} + +func (x codecSelfer1234) encSliceNodeCondition(v []NodeCondition, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4708 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4709 := &yyv4708 + yy4709.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNodeCondition(v *[]NodeCondition, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4710 := *v + yyh4710, yyl4710 := z.DecSliceHelperStart() + var yyc4710 bool + if yyl4710 == 0 { + if yyv4710 == nil { + yyv4710 = []NodeCondition{} + yyc4710 = true + } else if len(yyv4710) != 0 { + yyv4710 = yyv4710[:0] + yyc4710 = true + } + } else if yyl4710 > 0 { + var yyrr4710, yyrl4710 int + var yyrt4710 bool + if yyl4710 > cap(yyv4710) { + + yyrg4710 := len(yyv4710) > 0 + yyv24710 := yyv4710 + yyrl4710, yyrt4710 = z.DecInferLen(yyl4710, z.DecBasicHandle().MaxInitLen, 112) + if yyrt4710 { + if yyrl4710 <= cap(yyv4710) { + yyv4710 = yyv4710[:yyrl4710] + } else { + yyv4710 = make([]NodeCondition, yyrl4710) + } + } else { + yyv4710 = make([]NodeCondition, yyrl4710) + } + yyc4710 = true + yyrr4710 = len(yyv4710) + if yyrg4710 { + copy(yyv4710, yyv24710) + } + } else if yyl4710 != len(yyv4710) { + yyv4710 = yyv4710[:yyl4710] + yyc4710 = true + } + yyj4710 := 0 + for ; yyj4710 < yyrr4710; yyj4710++ { + yyh4710.ElemContainerState(yyj4710) + if r.TryDecodeAsNil() { + yyv4710[yyj4710] = NodeCondition{} + } else { + yyv4711 := &yyv4710[yyj4710] + yyv4711.CodecDecodeSelf(d) + } + + } + if yyrt4710 { + for ; yyj4710 < yyl4710; yyj4710++ { + yyv4710 = append(yyv4710, NodeCondition{}) + yyh4710.ElemContainerState(yyj4710) + if r.TryDecodeAsNil() { + yyv4710[yyj4710] = NodeCondition{} + } else { + yyv4712 := &yyv4710[yyj4710] + yyv4712.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4710 := 0 + for ; !r.CheckBreak(); yyj4710++ { + + if yyj4710 >= len(yyv4710) { + yyv4710 = append(yyv4710, NodeCondition{}) // var yyz4710 NodeCondition + yyc4710 = true + } + yyh4710.ElemContainerState(yyj4710) + if yyj4710 < len(yyv4710) { + if r.TryDecodeAsNil() { + yyv4710[yyj4710] = NodeCondition{} + } else { + yyv4713 := &yyv4710[yyj4710] + yyv4713.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4710 < len(yyv4710) { + yyv4710 = yyv4710[:yyj4710] + yyc4710 = true + } else if yyj4710 == 0 && yyv4710 == nil { + yyv4710 = []NodeCondition{} + yyc4710 = true + } + } + yyh4710.End() + if yyc4710 { + *v = yyv4710 + } +} + +func (x codecSelfer1234) encSliceNodeAddress(v []NodeAddress, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4714 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4715 := &yyv4714 + yy4715.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNodeAddress(v *[]NodeAddress, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4716 := *v + yyh4716, yyl4716 := z.DecSliceHelperStart() + var yyc4716 bool + if yyl4716 == 0 { + if yyv4716 == nil { + yyv4716 = []NodeAddress{} + yyc4716 = true + } else if len(yyv4716) != 0 { + yyv4716 = yyv4716[:0] + yyc4716 = true + } + } else if yyl4716 > 0 { + var yyrr4716, yyrl4716 int + var yyrt4716 bool + if yyl4716 > cap(yyv4716) { + + yyrg4716 := len(yyv4716) > 0 + yyv24716 := yyv4716 + yyrl4716, yyrt4716 = z.DecInferLen(yyl4716, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4716 { + if yyrl4716 <= cap(yyv4716) { + yyv4716 = yyv4716[:yyrl4716] + } else { + yyv4716 = make([]NodeAddress, yyrl4716) + } + } else { + yyv4716 = make([]NodeAddress, yyrl4716) + } + yyc4716 = true + yyrr4716 = len(yyv4716) + if yyrg4716 { + copy(yyv4716, yyv24716) + } + } else if yyl4716 != len(yyv4716) { + yyv4716 = yyv4716[:yyl4716] + yyc4716 = true + } + yyj4716 := 0 + for ; yyj4716 < yyrr4716; yyj4716++ { + yyh4716.ElemContainerState(yyj4716) + if r.TryDecodeAsNil() { + yyv4716[yyj4716] = NodeAddress{} + } else { + yyv4717 := &yyv4716[yyj4716] + yyv4717.CodecDecodeSelf(d) + } + + } + if yyrt4716 { + for ; yyj4716 < yyl4716; yyj4716++ { + yyv4716 = append(yyv4716, NodeAddress{}) + yyh4716.ElemContainerState(yyj4716) + if r.TryDecodeAsNil() { + yyv4716[yyj4716] = NodeAddress{} + } else { + yyv4718 := &yyv4716[yyj4716] + yyv4718.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4716 := 0 + for ; !r.CheckBreak(); yyj4716++ { + + if yyj4716 >= len(yyv4716) { + yyv4716 = append(yyv4716, NodeAddress{}) // var yyz4716 NodeAddress + yyc4716 = true + } + yyh4716.ElemContainerState(yyj4716) + if yyj4716 < len(yyv4716) { + if r.TryDecodeAsNil() { + yyv4716[yyj4716] = NodeAddress{} + } else { + yyv4719 := &yyv4716[yyj4716] + yyv4719.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4716 < len(yyv4716) { + yyv4716 = yyv4716[:yyj4716] + yyc4716 = true + } else if yyj4716 == 0 && yyv4716 == nil { + yyv4716 = []NodeAddress{} + yyc4716 = true + } + } + yyh4716.End() + if yyc4716 { + *v = yyv4716 + } +} + +func (x codecSelfer1234) encSliceContainerImage(v []ContainerImage, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4720 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4721 := &yyv4720 + yy4721.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceContainerImage(v *[]ContainerImage, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4722 := *v + yyh4722, yyl4722 := z.DecSliceHelperStart() + var yyc4722 bool + if yyl4722 == 0 { + if yyv4722 == nil { + yyv4722 = []ContainerImage{} + yyc4722 = true + } else if len(yyv4722) != 0 { + yyv4722 = yyv4722[:0] + yyc4722 = true + } + } else if yyl4722 > 0 { + var yyrr4722, yyrl4722 int + var yyrt4722 bool + if yyl4722 > cap(yyv4722) { + + yyrg4722 := len(yyv4722) > 0 + yyv24722 := yyv4722 + yyrl4722, yyrt4722 = z.DecInferLen(yyl4722, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4722 { + if yyrl4722 <= cap(yyv4722) { + yyv4722 = yyv4722[:yyrl4722] + } else { + yyv4722 = make([]ContainerImage, yyrl4722) + } + } else { + yyv4722 = make([]ContainerImage, yyrl4722) + } + yyc4722 = true + yyrr4722 = len(yyv4722) + if yyrg4722 { + copy(yyv4722, yyv24722) + } + } else if yyl4722 != len(yyv4722) { + yyv4722 = yyv4722[:yyl4722] + yyc4722 = true + } + yyj4722 := 0 + for ; yyj4722 < yyrr4722; yyj4722++ { + yyh4722.ElemContainerState(yyj4722) + if r.TryDecodeAsNil() { + yyv4722[yyj4722] = ContainerImage{} + } else { + yyv4723 := &yyv4722[yyj4722] + yyv4723.CodecDecodeSelf(d) + } + + } + if yyrt4722 { + for ; yyj4722 < yyl4722; yyj4722++ { + yyv4722 = append(yyv4722, ContainerImage{}) + yyh4722.ElemContainerState(yyj4722) + if r.TryDecodeAsNil() { + yyv4722[yyj4722] = ContainerImage{} + } else { + yyv4724 := &yyv4722[yyj4722] + yyv4724.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4722 := 0 + for ; !r.CheckBreak(); yyj4722++ { + + if yyj4722 >= len(yyv4722) { + yyv4722 = append(yyv4722, ContainerImage{}) // var yyz4722 ContainerImage + yyc4722 = true + } + yyh4722.ElemContainerState(yyj4722) + if yyj4722 < len(yyv4722) { + if r.TryDecodeAsNil() { + yyv4722[yyj4722] = ContainerImage{} + } else { + yyv4725 := &yyv4722[yyj4722] + yyv4725.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4722 < len(yyv4722) { + yyv4722 = yyv4722[:yyj4722] + yyc4722 = true + } else if yyj4722 == 0 && yyv4722 == nil { + yyv4722 = []ContainerImage{} + yyc4722 = true + } + } + yyh4722.End() + if yyc4722 { + *v = yyv4722 + } +} + +func (x codecSelfer1234) encSliceUniqueVolumeName(v []UniqueVolumeName, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4726 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4726.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceUniqueVolumeName(v *[]UniqueVolumeName, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4727 := *v + yyh4727, yyl4727 := z.DecSliceHelperStart() + var yyc4727 bool + if yyl4727 == 0 { + if yyv4727 == nil { + yyv4727 = []UniqueVolumeName{} + yyc4727 = true + } else if len(yyv4727) != 0 { + yyv4727 = yyv4727[:0] + yyc4727 = true + } + } else if yyl4727 > 0 { + var yyrr4727, yyrl4727 int + var yyrt4727 bool + if yyl4727 > cap(yyv4727) { + + yyrl4727, yyrt4727 = z.DecInferLen(yyl4727, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4727 { + if yyrl4727 <= cap(yyv4727) { + yyv4727 = yyv4727[:yyrl4727] + } else { + yyv4727 = make([]UniqueVolumeName, yyrl4727) + } + } else { + yyv4727 = make([]UniqueVolumeName, yyrl4727) + } + yyc4727 = true + yyrr4727 = len(yyv4727) + } else if yyl4727 != len(yyv4727) { + yyv4727 = yyv4727[:yyl4727] + yyc4727 = true + } + yyj4727 := 0 + for ; yyj4727 < yyrr4727; yyj4727++ { + yyh4727.ElemContainerState(yyj4727) + if r.TryDecodeAsNil() { + yyv4727[yyj4727] = "" + } else { + yyv4727[yyj4727] = UniqueVolumeName(r.DecodeString()) + } + + } + if yyrt4727 { + for ; yyj4727 < yyl4727; yyj4727++ { + yyv4727 = append(yyv4727, "") + yyh4727.ElemContainerState(yyj4727) + if r.TryDecodeAsNil() { + yyv4727[yyj4727] = "" + } else { + yyv4727[yyj4727] = UniqueVolumeName(r.DecodeString()) + } + + } + } + + } else { + yyj4727 := 0 + for ; !r.CheckBreak(); yyj4727++ { + + if yyj4727 >= len(yyv4727) { + yyv4727 = append(yyv4727, "") // var yyz4727 UniqueVolumeName + yyc4727 = true + } + yyh4727.ElemContainerState(yyj4727) + if yyj4727 < len(yyv4727) { + if r.TryDecodeAsNil() { + yyv4727[yyj4727] = "" + } else { + yyv4727[yyj4727] = UniqueVolumeName(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4727 < len(yyv4727) { + yyv4727 = yyv4727[:yyj4727] + yyc4727 = true + } else if yyj4727 == 0 && yyv4727 == nil { + yyv4727 = []UniqueVolumeName{} + yyc4727 = true + } + } + yyh4727.End() + if yyc4727 { + *v = yyv4727 + } +} + +func (x codecSelfer1234) encSliceAttachedVolume(v []AttachedVolume, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4731 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4732 := &yyv4731 + yy4732.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceAttachedVolume(v *[]AttachedVolume, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4733 := *v + yyh4733, yyl4733 := z.DecSliceHelperStart() + var yyc4733 bool + if yyl4733 == 0 { + if yyv4733 == nil { + yyv4733 = []AttachedVolume{} + yyc4733 = true + } else if len(yyv4733) != 0 { + yyv4733 = yyv4733[:0] + yyc4733 = true + } + } else if yyl4733 > 0 { + var yyrr4733, yyrl4733 int + var yyrt4733 bool + if yyl4733 > cap(yyv4733) { + + yyrg4733 := len(yyv4733) > 0 + yyv24733 := yyv4733 + yyrl4733, yyrt4733 = z.DecInferLen(yyl4733, z.DecBasicHandle().MaxInitLen, 32) + if yyrt4733 { + if yyrl4733 <= cap(yyv4733) { + yyv4733 = yyv4733[:yyrl4733] + } else { + yyv4733 = make([]AttachedVolume, yyrl4733) + } + } else { + yyv4733 = make([]AttachedVolume, yyrl4733) + } + yyc4733 = true + yyrr4733 = len(yyv4733) + if yyrg4733 { + copy(yyv4733, yyv24733) + } + } else if yyl4733 != len(yyv4733) { + yyv4733 = yyv4733[:yyl4733] + yyc4733 = true + } + yyj4733 := 0 + for ; yyj4733 < yyrr4733; yyj4733++ { + yyh4733.ElemContainerState(yyj4733) + if r.TryDecodeAsNil() { + yyv4733[yyj4733] = AttachedVolume{} + } else { + yyv4734 := &yyv4733[yyj4733] + yyv4734.CodecDecodeSelf(d) + } + + } + if yyrt4733 { + for ; yyj4733 < yyl4733; yyj4733++ { + yyv4733 = append(yyv4733, AttachedVolume{}) + yyh4733.ElemContainerState(yyj4733) + if r.TryDecodeAsNil() { + yyv4733[yyj4733] = AttachedVolume{} + } else { + yyv4735 := &yyv4733[yyj4733] + yyv4735.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4733 := 0 + for ; !r.CheckBreak(); yyj4733++ { + + if yyj4733 >= len(yyv4733) { + yyv4733 = append(yyv4733, AttachedVolume{}) // var yyz4733 AttachedVolume + yyc4733 = true + } + yyh4733.ElemContainerState(yyj4733) + if yyj4733 < len(yyv4733) { + if r.TryDecodeAsNil() { + yyv4733[yyj4733] = AttachedVolume{} + } else { + yyv4736 := &yyv4733[yyj4733] + yyv4736.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4733 < len(yyv4733) { + yyv4733 = yyv4733[:yyj4733] + yyc4733 = true + } else if yyj4733 == 0 && yyv4733 == nil { + yyv4733 = []AttachedVolume{} + yyc4733 = true + } + } + yyh4733.End() + if yyc4733 { + *v = yyv4733 + } +} + +func (x codecSelfer1234) encSlicePreferAvoidPodsEntry(v []PreferAvoidPodsEntry, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4737 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4738 := &yyv4737 + yy4738.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePreferAvoidPodsEntry(v *[]PreferAvoidPodsEntry, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4739 := *v + yyh4739, yyl4739 := z.DecSliceHelperStart() + var yyc4739 bool + if yyl4739 == 0 { + if yyv4739 == nil { + yyv4739 = []PreferAvoidPodsEntry{} + yyc4739 = true + } else if len(yyv4739) != 0 { + yyv4739 = yyv4739[:0] + yyc4739 = true + } + } else if yyl4739 > 0 { + var yyrr4739, yyrl4739 int + var yyrt4739 bool + if yyl4739 > cap(yyv4739) { + + yyrg4739 := len(yyv4739) > 0 + yyv24739 := yyv4739 + yyrl4739, yyrt4739 = z.DecInferLen(yyl4739, z.DecBasicHandle().MaxInitLen, 64) + if yyrt4739 { + if yyrl4739 <= cap(yyv4739) { + yyv4739 = yyv4739[:yyrl4739] + } else { + yyv4739 = make([]PreferAvoidPodsEntry, yyrl4739) + } + } else { + yyv4739 = make([]PreferAvoidPodsEntry, yyrl4739) + } + yyc4739 = true + yyrr4739 = len(yyv4739) + if yyrg4739 { + copy(yyv4739, yyv24739) + } + } else if yyl4739 != len(yyv4739) { + yyv4739 = yyv4739[:yyl4739] + yyc4739 = true + } + yyj4739 := 0 + for ; yyj4739 < yyrr4739; yyj4739++ { + yyh4739.ElemContainerState(yyj4739) + if r.TryDecodeAsNil() { + yyv4739[yyj4739] = PreferAvoidPodsEntry{} + } else { + yyv4740 := &yyv4739[yyj4739] + yyv4740.CodecDecodeSelf(d) + } + + } + if yyrt4739 { + for ; yyj4739 < yyl4739; yyj4739++ { + yyv4739 = append(yyv4739, PreferAvoidPodsEntry{}) + yyh4739.ElemContainerState(yyj4739) + if r.TryDecodeAsNil() { + yyv4739[yyj4739] = PreferAvoidPodsEntry{} + } else { + yyv4741 := &yyv4739[yyj4739] + yyv4741.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4739 := 0 + for ; !r.CheckBreak(); yyj4739++ { + + if yyj4739 >= len(yyv4739) { + yyv4739 = append(yyv4739, PreferAvoidPodsEntry{}) // var yyz4739 PreferAvoidPodsEntry + yyc4739 = true + } + yyh4739.ElemContainerState(yyj4739) + if yyj4739 < len(yyv4739) { + if r.TryDecodeAsNil() { + yyv4739[yyj4739] = PreferAvoidPodsEntry{} + } else { + yyv4742 := &yyv4739[yyj4739] + yyv4742.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4739 < len(yyv4739) { + yyv4739 = yyv4739[:yyj4739] + yyc4739 = true + } else if yyj4739 == 0 && yyv4739 == nil { + yyv4739 = []PreferAvoidPodsEntry{} + yyc4739 = true + } + } + yyh4739.End() + if yyc4739 { + *v = yyv4739 + } +} + +func (x codecSelfer1234) encResourceList(v ResourceList, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeMapStart(len(v)) + for yyk4743, yyv4743 := range v { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + yyk4743.CodecEncodeSelf(e) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy4744 := &yyv4743 + yym4745 := z.EncBinary() + _ = yym4745 + if false { + } else if z.HasExtensions() && z.EncExt(yy4744) { + } else if !yym4745 && z.IsJSONHandle() { + z.EncJSONMarshal(yy4744) + } else { + z.EncFallback(yy4744) + } + } + z.EncSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x codecSelfer1234) decResourceList(v *ResourceList, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4746 := *v + yyl4746 := r.ReadMapStart() + yybh4746 := z.DecBasicHandle() + if yyv4746 == nil { + yyrl4746, _ := z.DecInferLen(yyl4746, yybh4746.MaxInitLen, 72) + yyv4746 = make(map[ResourceName]pkg3_resource.Quantity, yyrl4746) + *v = yyv4746 + } + var yymk4746 ResourceName + var yymv4746 pkg3_resource.Quantity + var yymg4746 bool + if yybh4746.MapValueReset { + yymg4746 = true + } + if yyl4746 > 0 { + for yyj4746 := 0; yyj4746 < yyl4746; yyj4746++ { + z.DecSendContainerState(codecSelfer_containerMapKey1234) + if r.TryDecodeAsNil() { + yymk4746 = "" + } else { + yymk4746 = ResourceName(r.DecodeString()) + } + + if yymg4746 { + yymv4746 = yyv4746[yymk4746] + } else { + yymv4746 = pkg3_resource.Quantity{} + } + z.DecSendContainerState(codecSelfer_containerMapValue1234) + if r.TryDecodeAsNil() { + yymv4746 = pkg3_resource.Quantity{} + } else { + yyv4748 := &yymv4746 + yym4749 := z.DecBinary() + _ = yym4749 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4748) { + } else if !yym4749 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv4748) + } else { + z.DecFallback(yyv4748, false) + } + } + + if yyv4746 != nil { + yyv4746[yymk4746] = yymv4746 + } + } + } else if yyl4746 < 0 { + for yyj4746 := 0; !r.CheckBreak(); yyj4746++ { + z.DecSendContainerState(codecSelfer_containerMapKey1234) + if r.TryDecodeAsNil() { + yymk4746 = "" + } else { + yymk4746 = ResourceName(r.DecodeString()) + } + + if yymg4746 { + yymv4746 = yyv4746[yymk4746] + } else { + yymv4746 = pkg3_resource.Quantity{} + } + z.DecSendContainerState(codecSelfer_containerMapValue1234) + if r.TryDecodeAsNil() { + yymv4746 = pkg3_resource.Quantity{} + } else { + yyv4751 := &yymv4746 + yym4752 := z.DecBinary() + _ = yym4752 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4751) { + } else if !yym4752 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv4751) + } else { + z.DecFallback(yyv4751, false) + } + } + + if yyv4746 != nil { + yyv4746[yymk4746] = yymv4746 + } + } + } // else len==0: TODO: Should we clear map entries? + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x codecSelfer1234) encSliceNode(v []Node, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4753 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4754 := &yyv4753 + yy4754.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNode(v *[]Node, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4755 := *v + yyh4755, yyl4755 := z.DecSliceHelperStart() + var yyc4755 bool + if yyl4755 == 0 { + if yyv4755 == nil { + yyv4755 = []Node{} + yyc4755 = true + } else if len(yyv4755) != 0 { + yyv4755 = yyv4755[:0] + yyc4755 = true + } + } else if yyl4755 > 0 { + var yyrr4755, yyrl4755 int + var yyrt4755 bool + if yyl4755 > cap(yyv4755) { + + yyrg4755 := len(yyv4755) > 0 + yyv24755 := yyv4755 + yyrl4755, yyrt4755 = z.DecInferLen(yyl4755, z.DecBasicHandle().MaxInitLen, 632) + if yyrt4755 { + if yyrl4755 <= cap(yyv4755) { + yyv4755 = yyv4755[:yyrl4755] + } else { + yyv4755 = make([]Node, yyrl4755) + } + } else { + yyv4755 = make([]Node, yyrl4755) + } + yyc4755 = true + yyrr4755 = len(yyv4755) + if yyrg4755 { + copy(yyv4755, yyv24755) + } + } else if yyl4755 != len(yyv4755) { + yyv4755 = yyv4755[:yyl4755] + yyc4755 = true + } + yyj4755 := 0 + for ; yyj4755 < yyrr4755; yyj4755++ { + yyh4755.ElemContainerState(yyj4755) + if r.TryDecodeAsNil() { + yyv4755[yyj4755] = Node{} + } else { + yyv4756 := &yyv4755[yyj4755] + yyv4756.CodecDecodeSelf(d) + } + + } + if yyrt4755 { + for ; yyj4755 < yyl4755; yyj4755++ { + yyv4755 = append(yyv4755, Node{}) + yyh4755.ElemContainerState(yyj4755) + if r.TryDecodeAsNil() { + yyv4755[yyj4755] = Node{} + } else { + yyv4757 := &yyv4755[yyj4755] + yyv4757.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4755 := 0 + for ; !r.CheckBreak(); yyj4755++ { + + if yyj4755 >= len(yyv4755) { + yyv4755 = append(yyv4755, Node{}) // var yyz4755 Node + yyc4755 = true + } + yyh4755.ElemContainerState(yyj4755) + if yyj4755 < len(yyv4755) { + if r.TryDecodeAsNil() { + yyv4755[yyj4755] = Node{} + } else { + yyv4758 := &yyv4755[yyj4755] + yyv4758.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4755 < len(yyv4755) { + yyv4755 = yyv4755[:yyj4755] + yyc4755 = true + } else if yyj4755 == 0 && yyv4755 == nil { + yyv4755 = []Node{} + yyc4755 = true + } + } + yyh4755.End() + if yyc4755 { + *v = yyv4755 + } +} + +func (x codecSelfer1234) encSliceFinalizerName(v []FinalizerName, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4759 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4759.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceFinalizerName(v *[]FinalizerName, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4760 := *v + yyh4760, yyl4760 := z.DecSliceHelperStart() + var yyc4760 bool + if yyl4760 == 0 { + if yyv4760 == nil { + yyv4760 = []FinalizerName{} + yyc4760 = true + } else if len(yyv4760) != 0 { + yyv4760 = yyv4760[:0] + yyc4760 = true + } + } else if yyl4760 > 0 { + var yyrr4760, yyrl4760 int + var yyrt4760 bool + if yyl4760 > cap(yyv4760) { + + yyrl4760, yyrt4760 = z.DecInferLen(yyl4760, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4760 { + if yyrl4760 <= cap(yyv4760) { + yyv4760 = yyv4760[:yyrl4760] + } else { + yyv4760 = make([]FinalizerName, yyrl4760) + } + } else { + yyv4760 = make([]FinalizerName, yyrl4760) + } + yyc4760 = true + yyrr4760 = len(yyv4760) + } else if yyl4760 != len(yyv4760) { + yyv4760 = yyv4760[:yyl4760] + yyc4760 = true + } + yyj4760 := 0 + for ; yyj4760 < yyrr4760; yyj4760++ { + yyh4760.ElemContainerState(yyj4760) + if r.TryDecodeAsNil() { + yyv4760[yyj4760] = "" + } else { + yyv4760[yyj4760] = FinalizerName(r.DecodeString()) + } + + } + if yyrt4760 { + for ; yyj4760 < yyl4760; yyj4760++ { + yyv4760 = append(yyv4760, "") + yyh4760.ElemContainerState(yyj4760) + if r.TryDecodeAsNil() { + yyv4760[yyj4760] = "" + } else { + yyv4760[yyj4760] = FinalizerName(r.DecodeString()) + } + + } + } + + } else { + yyj4760 := 0 + for ; !r.CheckBreak(); yyj4760++ { + + if yyj4760 >= len(yyv4760) { + yyv4760 = append(yyv4760, "") // var yyz4760 FinalizerName + yyc4760 = true + } + yyh4760.ElemContainerState(yyj4760) + if yyj4760 < len(yyv4760) { + if r.TryDecodeAsNil() { + yyv4760[yyj4760] = "" + } else { + yyv4760[yyj4760] = FinalizerName(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4760 < len(yyv4760) { + yyv4760 = yyv4760[:yyj4760] + yyc4760 = true + } else if yyj4760 == 0 && yyv4760 == nil { + yyv4760 = []FinalizerName{} + yyc4760 = true + } + } + yyh4760.End() + if yyc4760 { + *v = yyv4760 + } +} + +func (x codecSelfer1234) encSliceNamespace(v []Namespace, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4764 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4765 := &yyv4764 + yy4765.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNamespace(v *[]Namespace, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4766 := *v + yyh4766, yyl4766 := z.DecSliceHelperStart() + var yyc4766 bool + if yyl4766 == 0 { + if yyv4766 == nil { + yyv4766 = []Namespace{} + yyc4766 = true + } else if len(yyv4766) != 0 { + yyv4766 = yyv4766[:0] + yyc4766 = true + } + } else if yyl4766 > 0 { + var yyrr4766, yyrl4766 int + var yyrt4766 bool + if yyl4766 > cap(yyv4766) { + + yyrg4766 := len(yyv4766) > 0 + yyv24766 := yyv4766 + yyrl4766, yyrt4766 = z.DecInferLen(yyl4766, z.DecBasicHandle().MaxInitLen, 296) + if yyrt4766 { + if yyrl4766 <= cap(yyv4766) { + yyv4766 = yyv4766[:yyrl4766] + } else { + yyv4766 = make([]Namespace, yyrl4766) + } + } else { + yyv4766 = make([]Namespace, yyrl4766) + } + yyc4766 = true + yyrr4766 = len(yyv4766) + if yyrg4766 { + copy(yyv4766, yyv24766) + } + } else if yyl4766 != len(yyv4766) { + yyv4766 = yyv4766[:yyl4766] + yyc4766 = true + } + yyj4766 := 0 + for ; yyj4766 < yyrr4766; yyj4766++ { + yyh4766.ElemContainerState(yyj4766) + if r.TryDecodeAsNil() { + yyv4766[yyj4766] = Namespace{} + } else { + yyv4767 := &yyv4766[yyj4766] + yyv4767.CodecDecodeSelf(d) + } + + } + if yyrt4766 { + for ; yyj4766 < yyl4766; yyj4766++ { + yyv4766 = append(yyv4766, Namespace{}) + yyh4766.ElemContainerState(yyj4766) + if r.TryDecodeAsNil() { + yyv4766[yyj4766] = Namespace{} + } else { + yyv4768 := &yyv4766[yyj4766] + yyv4768.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4766 := 0 + for ; !r.CheckBreak(); yyj4766++ { + + if yyj4766 >= len(yyv4766) { + yyv4766 = append(yyv4766, Namespace{}) // var yyz4766 Namespace + yyc4766 = true + } + yyh4766.ElemContainerState(yyj4766) + if yyj4766 < len(yyv4766) { + if r.TryDecodeAsNil() { + yyv4766[yyj4766] = Namespace{} + } else { + yyv4769 := &yyv4766[yyj4766] + yyv4769.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4766 < len(yyv4766) { + yyv4766 = yyv4766[:yyj4766] + yyc4766 = true + } else if yyj4766 == 0 && yyv4766 == nil { + yyv4766 = []Namespace{} + yyc4766 = true + } + } + yyh4766.End() + if yyc4766 { + *v = yyv4766 + } +} + +func (x codecSelfer1234) encSliceEvent(v []Event, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4770 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4771 := &yyv4770 + yy4771.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceEvent(v *[]Event, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4772 := *v + yyh4772, yyl4772 := z.DecSliceHelperStart() + var yyc4772 bool + if yyl4772 == 0 { + if yyv4772 == nil { + yyv4772 = []Event{} + yyc4772 = true + } else if len(yyv4772) != 0 { + yyv4772 = yyv4772[:0] + yyc4772 = true + } + } else if yyl4772 > 0 { + var yyrr4772, yyrl4772 int + var yyrt4772 bool + if yyl4772 > cap(yyv4772) { + + yyrg4772 := len(yyv4772) > 0 + yyv24772 := yyv4772 + yyrl4772, yyrt4772 = z.DecInferLen(yyl4772, z.DecBasicHandle().MaxInitLen, 504) + if yyrt4772 { + if yyrl4772 <= cap(yyv4772) { + yyv4772 = yyv4772[:yyrl4772] + } else { + yyv4772 = make([]Event, yyrl4772) + } + } else { + yyv4772 = make([]Event, yyrl4772) + } + yyc4772 = true + yyrr4772 = len(yyv4772) + if yyrg4772 { + copy(yyv4772, yyv24772) + } + } else if yyl4772 != len(yyv4772) { + yyv4772 = yyv4772[:yyl4772] + yyc4772 = true + } + yyj4772 := 0 + for ; yyj4772 < yyrr4772; yyj4772++ { + yyh4772.ElemContainerState(yyj4772) + if r.TryDecodeAsNil() { + yyv4772[yyj4772] = Event{} + } else { + yyv4773 := &yyv4772[yyj4772] + yyv4773.CodecDecodeSelf(d) + } + + } + if yyrt4772 { + for ; yyj4772 < yyl4772; yyj4772++ { + yyv4772 = append(yyv4772, Event{}) + yyh4772.ElemContainerState(yyj4772) + if r.TryDecodeAsNil() { + yyv4772[yyj4772] = Event{} + } else { + yyv4774 := &yyv4772[yyj4772] + yyv4774.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4772 := 0 + for ; !r.CheckBreak(); yyj4772++ { + + if yyj4772 >= len(yyv4772) { + yyv4772 = append(yyv4772, Event{}) // var yyz4772 Event + yyc4772 = true + } + yyh4772.ElemContainerState(yyj4772) + if yyj4772 < len(yyv4772) { + if r.TryDecodeAsNil() { + yyv4772[yyj4772] = Event{} + } else { + yyv4775 := &yyv4772[yyj4772] + yyv4775.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4772 < len(yyv4772) { + yyv4772 = yyv4772[:yyj4772] + yyc4772 = true + } else if yyj4772 == 0 && yyv4772 == nil { + yyv4772 = []Event{} + yyc4772 = true + } + } + yyh4772.End() + if yyc4772 { + *v = yyv4772 + } +} + +func (x codecSelfer1234) encSliceruntime_RawExtension(v []pkg5_runtime.RawExtension, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4776 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4777 := &yyv4776 + yym4778 := z.EncBinary() + _ = yym4778 + if false { + } else if z.HasExtensions() && z.EncExt(yy4777) { + } else if !yym4778 && z.IsJSONHandle() { + z.EncJSONMarshal(yy4777) + } else { + z.EncFallback(yy4777) + } + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceruntime_RawExtension(v *[]pkg5_runtime.RawExtension, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4779 := *v + yyh4779, yyl4779 := z.DecSliceHelperStart() + var yyc4779 bool + if yyl4779 == 0 { + if yyv4779 == nil { + yyv4779 = []pkg5_runtime.RawExtension{} + yyc4779 = true + } else if len(yyv4779) != 0 { + yyv4779 = yyv4779[:0] + yyc4779 = true + } + } else if yyl4779 > 0 { + var yyrr4779, yyrl4779 int + var yyrt4779 bool + if yyl4779 > cap(yyv4779) { + + yyrg4779 := len(yyv4779) > 0 + yyv24779 := yyv4779 + yyrl4779, yyrt4779 = z.DecInferLen(yyl4779, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4779 { + if yyrl4779 <= cap(yyv4779) { + yyv4779 = yyv4779[:yyrl4779] + } else { + yyv4779 = make([]pkg5_runtime.RawExtension, yyrl4779) + } + } else { + yyv4779 = make([]pkg5_runtime.RawExtension, yyrl4779) + } + yyc4779 = true + yyrr4779 = len(yyv4779) + if yyrg4779 { + copy(yyv4779, yyv24779) + } + } else if yyl4779 != len(yyv4779) { + yyv4779 = yyv4779[:yyl4779] + yyc4779 = true + } + yyj4779 := 0 + for ; yyj4779 < yyrr4779; yyj4779++ { + yyh4779.ElemContainerState(yyj4779) + if r.TryDecodeAsNil() { + yyv4779[yyj4779] = pkg5_runtime.RawExtension{} + } else { + yyv4780 := &yyv4779[yyj4779] + yym4781 := z.DecBinary() + _ = yym4781 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4780) { + } else if !yym4781 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv4780) + } else { + z.DecFallback(yyv4780, false) + } + } + + } + if yyrt4779 { + for ; yyj4779 < yyl4779; yyj4779++ { + yyv4779 = append(yyv4779, pkg5_runtime.RawExtension{}) + yyh4779.ElemContainerState(yyj4779) + if r.TryDecodeAsNil() { + yyv4779[yyj4779] = pkg5_runtime.RawExtension{} + } else { + yyv4782 := &yyv4779[yyj4779] + yym4783 := z.DecBinary() + _ = yym4783 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4782) { + } else if !yym4783 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv4782) + } else { + z.DecFallback(yyv4782, false) + } + } + + } + } + + } else { + yyj4779 := 0 + for ; !r.CheckBreak(); yyj4779++ { + + if yyj4779 >= len(yyv4779) { + yyv4779 = append(yyv4779, pkg5_runtime.RawExtension{}) // var yyz4779 pkg5_runtime.RawExtension + yyc4779 = true + } + yyh4779.ElemContainerState(yyj4779) + if yyj4779 < len(yyv4779) { + if r.TryDecodeAsNil() { + yyv4779[yyj4779] = pkg5_runtime.RawExtension{} + } else { + yyv4784 := &yyv4779[yyj4779] + yym4785 := z.DecBinary() + _ = yym4785 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4784) { + } else if !yym4785 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv4784) + } else { + z.DecFallback(yyv4784, false) + } + } + + } else { + z.DecSwallow() + } + + } + if yyj4779 < len(yyv4779) { + yyv4779 = yyv4779[:yyj4779] + yyc4779 = true + } else if yyj4779 == 0 && yyv4779 == nil { + yyv4779 = []pkg5_runtime.RawExtension{} + yyc4779 = true + } + } + yyh4779.End() + if yyc4779 { + *v = yyv4779 + } +} + +func (x codecSelfer1234) encSliceLimitRangeItem(v []LimitRangeItem, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4786 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4787 := &yyv4786 + yy4787.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceLimitRangeItem(v *[]LimitRangeItem, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4788 := *v + yyh4788, yyl4788 := z.DecSliceHelperStart() + var yyc4788 bool + if yyl4788 == 0 { + if yyv4788 == nil { + yyv4788 = []LimitRangeItem{} + yyc4788 = true + } else if len(yyv4788) != 0 { + yyv4788 = yyv4788[:0] + yyc4788 = true + } + } else if yyl4788 > 0 { + var yyrr4788, yyrl4788 int + var yyrt4788 bool + if yyl4788 > cap(yyv4788) { + + yyrg4788 := len(yyv4788) > 0 + yyv24788 := yyv4788 + yyrl4788, yyrt4788 = z.DecInferLen(yyl4788, z.DecBasicHandle().MaxInitLen, 56) + if yyrt4788 { + if yyrl4788 <= cap(yyv4788) { + yyv4788 = yyv4788[:yyrl4788] + } else { + yyv4788 = make([]LimitRangeItem, yyrl4788) + } + } else { + yyv4788 = make([]LimitRangeItem, yyrl4788) + } + yyc4788 = true + yyrr4788 = len(yyv4788) + if yyrg4788 { + copy(yyv4788, yyv24788) + } + } else if yyl4788 != len(yyv4788) { + yyv4788 = yyv4788[:yyl4788] + yyc4788 = true + } + yyj4788 := 0 + for ; yyj4788 < yyrr4788; yyj4788++ { + yyh4788.ElemContainerState(yyj4788) + if r.TryDecodeAsNil() { + yyv4788[yyj4788] = LimitRangeItem{} + } else { + yyv4789 := &yyv4788[yyj4788] + yyv4789.CodecDecodeSelf(d) + } + + } + if yyrt4788 { + for ; yyj4788 < yyl4788; yyj4788++ { + yyv4788 = append(yyv4788, LimitRangeItem{}) + yyh4788.ElemContainerState(yyj4788) + if r.TryDecodeAsNil() { + yyv4788[yyj4788] = LimitRangeItem{} + } else { + yyv4790 := &yyv4788[yyj4788] + yyv4790.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4788 := 0 + for ; !r.CheckBreak(); yyj4788++ { + + if yyj4788 >= len(yyv4788) { + yyv4788 = append(yyv4788, LimitRangeItem{}) // var yyz4788 LimitRangeItem + yyc4788 = true + } + yyh4788.ElemContainerState(yyj4788) + if yyj4788 < len(yyv4788) { + if r.TryDecodeAsNil() { + yyv4788[yyj4788] = LimitRangeItem{} + } else { + yyv4791 := &yyv4788[yyj4788] + yyv4791.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4788 < len(yyv4788) { + yyv4788 = yyv4788[:yyj4788] + yyc4788 = true + } else if yyj4788 == 0 && yyv4788 == nil { + yyv4788 = []LimitRangeItem{} + yyc4788 = true + } + } + yyh4788.End() + if yyc4788 { + *v = yyv4788 + } +} + +func (x codecSelfer1234) encSliceLimitRange(v []LimitRange, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4792 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4793 := &yyv4792 + yy4793.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceLimitRange(v *[]LimitRange, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4794 := *v + yyh4794, yyl4794 := z.DecSliceHelperStart() + var yyc4794 bool + if yyl4794 == 0 { + if yyv4794 == nil { + yyv4794 = []LimitRange{} + yyc4794 = true + } else if len(yyv4794) != 0 { + yyv4794 = yyv4794[:0] + yyc4794 = true + } + } else if yyl4794 > 0 { + var yyrr4794, yyrl4794 int + var yyrt4794 bool + if yyl4794 > cap(yyv4794) { + + yyrg4794 := len(yyv4794) > 0 + yyv24794 := yyv4794 + yyrl4794, yyrt4794 = z.DecInferLen(yyl4794, z.DecBasicHandle().MaxInitLen, 280) + if yyrt4794 { + if yyrl4794 <= cap(yyv4794) { + yyv4794 = yyv4794[:yyrl4794] + } else { + yyv4794 = make([]LimitRange, yyrl4794) + } + } else { + yyv4794 = make([]LimitRange, yyrl4794) + } + yyc4794 = true + yyrr4794 = len(yyv4794) + if yyrg4794 { + copy(yyv4794, yyv24794) + } + } else if yyl4794 != len(yyv4794) { + yyv4794 = yyv4794[:yyl4794] + yyc4794 = true + } + yyj4794 := 0 + for ; yyj4794 < yyrr4794; yyj4794++ { + yyh4794.ElemContainerState(yyj4794) + if r.TryDecodeAsNil() { + yyv4794[yyj4794] = LimitRange{} + } else { + yyv4795 := &yyv4794[yyj4794] + yyv4795.CodecDecodeSelf(d) + } + + } + if yyrt4794 { + for ; yyj4794 < yyl4794; yyj4794++ { + yyv4794 = append(yyv4794, LimitRange{}) + yyh4794.ElemContainerState(yyj4794) + if r.TryDecodeAsNil() { + yyv4794[yyj4794] = LimitRange{} + } else { + yyv4796 := &yyv4794[yyj4794] + yyv4796.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4794 := 0 + for ; !r.CheckBreak(); yyj4794++ { + + if yyj4794 >= len(yyv4794) { + yyv4794 = append(yyv4794, LimitRange{}) // var yyz4794 LimitRange + yyc4794 = true + } + yyh4794.ElemContainerState(yyj4794) + if yyj4794 < len(yyv4794) { + if r.TryDecodeAsNil() { + yyv4794[yyj4794] = LimitRange{} + } else { + yyv4797 := &yyv4794[yyj4794] + yyv4797.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4794 < len(yyv4794) { + yyv4794 = yyv4794[:yyj4794] + yyc4794 = true + } else if yyj4794 == 0 && yyv4794 == nil { + yyv4794 = []LimitRange{} + yyc4794 = true + } + } + yyh4794.End() + if yyc4794 { + *v = yyv4794 + } +} + +func (x codecSelfer1234) encSliceResourceQuotaScope(v []ResourceQuotaScope, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4798 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv4798.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceResourceQuotaScope(v *[]ResourceQuotaScope, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4799 := *v + yyh4799, yyl4799 := z.DecSliceHelperStart() + var yyc4799 bool + if yyl4799 == 0 { + if yyv4799 == nil { + yyv4799 = []ResourceQuotaScope{} + yyc4799 = true + } else if len(yyv4799) != 0 { + yyv4799 = yyv4799[:0] + yyc4799 = true + } + } else if yyl4799 > 0 { + var yyrr4799, yyrl4799 int + var yyrt4799 bool + if yyl4799 > cap(yyv4799) { + + yyrl4799, yyrt4799 = z.DecInferLen(yyl4799, z.DecBasicHandle().MaxInitLen, 16) + if yyrt4799 { + if yyrl4799 <= cap(yyv4799) { + yyv4799 = yyv4799[:yyrl4799] + } else { + yyv4799 = make([]ResourceQuotaScope, yyrl4799) + } + } else { + yyv4799 = make([]ResourceQuotaScope, yyrl4799) + } + yyc4799 = true + yyrr4799 = len(yyv4799) + } else if yyl4799 != len(yyv4799) { + yyv4799 = yyv4799[:yyl4799] + yyc4799 = true + } + yyj4799 := 0 + for ; yyj4799 < yyrr4799; yyj4799++ { + yyh4799.ElemContainerState(yyj4799) + if r.TryDecodeAsNil() { + yyv4799[yyj4799] = "" + } else { + yyv4799[yyj4799] = ResourceQuotaScope(r.DecodeString()) + } + + } + if yyrt4799 { + for ; yyj4799 < yyl4799; yyj4799++ { + yyv4799 = append(yyv4799, "") + yyh4799.ElemContainerState(yyj4799) + if r.TryDecodeAsNil() { + yyv4799[yyj4799] = "" + } else { + yyv4799[yyj4799] = ResourceQuotaScope(r.DecodeString()) + } + + } + } + + } else { + yyj4799 := 0 + for ; !r.CheckBreak(); yyj4799++ { + + if yyj4799 >= len(yyv4799) { + yyv4799 = append(yyv4799, "") // var yyz4799 ResourceQuotaScope + yyc4799 = true + } + yyh4799.ElemContainerState(yyj4799) + if yyj4799 < len(yyv4799) { + if r.TryDecodeAsNil() { + yyv4799[yyj4799] = "" + } else { + yyv4799[yyj4799] = ResourceQuotaScope(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj4799 < len(yyv4799) { + yyv4799 = yyv4799[:yyj4799] + yyc4799 = true + } else if yyj4799 == 0 && yyv4799 == nil { + yyv4799 = []ResourceQuotaScope{} + yyc4799 = true + } + } + yyh4799.End() + if yyc4799 { + *v = yyv4799 + } +} + +func (x codecSelfer1234) encSliceResourceQuota(v []ResourceQuota, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4803 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4804 := &yyv4803 + yy4804.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceResourceQuota(v *[]ResourceQuota, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4805 := *v + yyh4805, yyl4805 := z.DecSliceHelperStart() + var yyc4805 bool + if yyl4805 == 0 { + if yyv4805 == nil { + yyv4805 = []ResourceQuota{} + yyc4805 = true + } else if len(yyv4805) != 0 { + yyv4805 = yyv4805[:0] + yyc4805 = true + } + } else if yyl4805 > 0 { + var yyrr4805, yyrl4805 int + var yyrt4805 bool + if yyl4805 > cap(yyv4805) { + + yyrg4805 := len(yyv4805) > 0 + yyv24805 := yyv4805 + yyrl4805, yyrt4805 = z.DecInferLen(yyl4805, z.DecBasicHandle().MaxInitLen, 304) + if yyrt4805 { + if yyrl4805 <= cap(yyv4805) { + yyv4805 = yyv4805[:yyrl4805] + } else { + yyv4805 = make([]ResourceQuota, yyrl4805) + } + } else { + yyv4805 = make([]ResourceQuota, yyrl4805) + } + yyc4805 = true + yyrr4805 = len(yyv4805) + if yyrg4805 { + copy(yyv4805, yyv24805) + } + } else if yyl4805 != len(yyv4805) { + yyv4805 = yyv4805[:yyl4805] + yyc4805 = true + } + yyj4805 := 0 + for ; yyj4805 < yyrr4805; yyj4805++ { + yyh4805.ElemContainerState(yyj4805) + if r.TryDecodeAsNil() { + yyv4805[yyj4805] = ResourceQuota{} + } else { + yyv4806 := &yyv4805[yyj4805] + yyv4806.CodecDecodeSelf(d) + } + + } + if yyrt4805 { + for ; yyj4805 < yyl4805; yyj4805++ { + yyv4805 = append(yyv4805, ResourceQuota{}) + yyh4805.ElemContainerState(yyj4805) + if r.TryDecodeAsNil() { + yyv4805[yyj4805] = ResourceQuota{} + } else { + yyv4807 := &yyv4805[yyj4805] + yyv4807.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4805 := 0 + for ; !r.CheckBreak(); yyj4805++ { + + if yyj4805 >= len(yyv4805) { + yyv4805 = append(yyv4805, ResourceQuota{}) // var yyz4805 ResourceQuota + yyc4805 = true + } + yyh4805.ElemContainerState(yyj4805) + if yyj4805 < len(yyv4805) { + if r.TryDecodeAsNil() { + yyv4805[yyj4805] = ResourceQuota{} + } else { + yyv4808 := &yyv4805[yyj4805] + yyv4808.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4805 < len(yyv4805) { + yyv4805 = yyv4805[:yyj4805] + yyc4805 = true + } else if yyj4805 == 0 && yyv4805 == nil { + yyv4805 = []ResourceQuota{} + yyc4805 = true + } + } + yyh4805.End() + if yyc4805 { + *v = yyv4805 + } +} + +func (x codecSelfer1234) encMapstringSliceuint8(v map[string][]uint8, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeMapStart(len(v)) + for yyk4809, yyv4809 := range v { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + yym4810 := z.EncBinary() + _ = yym4810 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yyk4809)) + } + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyv4809 == nil { + r.EncodeNil() + } else { + yym4811 := z.EncBinary() + _ = yym4811 + if false { + } else { + r.EncodeStringBytes(codecSelferC_RAW1234, []byte(yyv4809)) + } + } + } + z.EncSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x codecSelfer1234) decMapstringSliceuint8(v *map[string][]uint8, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4812 := *v + yyl4812 := r.ReadMapStart() + yybh4812 := z.DecBasicHandle() + if yyv4812 == nil { + yyrl4812, _ := z.DecInferLen(yyl4812, yybh4812.MaxInitLen, 40) + yyv4812 = make(map[string][]uint8, yyrl4812) + *v = yyv4812 + } + var yymk4812 string + var yymv4812 []uint8 + var yymg4812 bool + if yybh4812.MapValueReset { + yymg4812 = true + } + if yyl4812 > 0 { + for yyj4812 := 0; yyj4812 < yyl4812; yyj4812++ { + z.DecSendContainerState(codecSelfer_containerMapKey1234) + if r.TryDecodeAsNil() { + yymk4812 = "" + } else { + yymk4812 = string(r.DecodeString()) + } + + if yymg4812 { + yymv4812 = yyv4812[yymk4812] + } else { + yymv4812 = nil + } + z.DecSendContainerState(codecSelfer_containerMapValue1234) + if r.TryDecodeAsNil() { + yymv4812 = nil + } else { + yyv4814 := &yymv4812 + yym4815 := z.DecBinary() + _ = yym4815 + if false { + } else { + *yyv4814 = r.DecodeBytes(*(*[]byte)(yyv4814), false, false) + } + } + + if yyv4812 != nil { + yyv4812[yymk4812] = yymv4812 + } + } + } else if yyl4812 < 0 { + for yyj4812 := 0; !r.CheckBreak(); yyj4812++ { + z.DecSendContainerState(codecSelfer_containerMapKey1234) + if r.TryDecodeAsNil() { + yymk4812 = "" + } else { + yymk4812 = string(r.DecodeString()) + } + + if yymg4812 { + yymv4812 = yyv4812[yymk4812] + } else { + yymv4812 = nil + } + z.DecSendContainerState(codecSelfer_containerMapValue1234) + if r.TryDecodeAsNil() { + yymv4812 = nil + } else { + yyv4817 := &yymv4812 + yym4818 := z.DecBinary() + _ = yym4818 + if false { + } else { + *yyv4817 = r.DecodeBytes(*(*[]byte)(yyv4817), false, false) + } + } + + if yyv4812 != nil { + yyv4812[yymk4812] = yymv4812 + } + } + } // else len==0: TODO: Should we clear map entries? + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x codecSelfer1234) encSliceSecret(v []Secret, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4819 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4820 := &yyv4819 + yy4820.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceSecret(v *[]Secret, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4821 := *v + yyh4821, yyl4821 := z.DecSliceHelperStart() + var yyc4821 bool + if yyl4821 == 0 { + if yyv4821 == nil { + yyv4821 = []Secret{} + yyc4821 = true + } else if len(yyv4821) != 0 { + yyv4821 = yyv4821[:0] + yyc4821 = true + } + } else if yyl4821 > 0 { + var yyrr4821, yyrl4821 int + var yyrt4821 bool + if yyl4821 > cap(yyv4821) { + + yyrg4821 := len(yyv4821) > 0 + yyv24821 := yyv4821 + yyrl4821, yyrt4821 = z.DecInferLen(yyl4821, z.DecBasicHandle().MaxInitLen, 288) + if yyrt4821 { + if yyrl4821 <= cap(yyv4821) { + yyv4821 = yyv4821[:yyrl4821] + } else { + yyv4821 = make([]Secret, yyrl4821) + } + } else { + yyv4821 = make([]Secret, yyrl4821) + } + yyc4821 = true + yyrr4821 = len(yyv4821) + if yyrg4821 { + copy(yyv4821, yyv24821) + } + } else if yyl4821 != len(yyv4821) { + yyv4821 = yyv4821[:yyl4821] + yyc4821 = true + } + yyj4821 := 0 + for ; yyj4821 < yyrr4821; yyj4821++ { + yyh4821.ElemContainerState(yyj4821) + if r.TryDecodeAsNil() { + yyv4821[yyj4821] = Secret{} + } else { + yyv4822 := &yyv4821[yyj4821] + yyv4822.CodecDecodeSelf(d) + } + + } + if yyrt4821 { + for ; yyj4821 < yyl4821; yyj4821++ { + yyv4821 = append(yyv4821, Secret{}) + yyh4821.ElemContainerState(yyj4821) + if r.TryDecodeAsNil() { + yyv4821[yyj4821] = Secret{} + } else { + yyv4823 := &yyv4821[yyj4821] + yyv4823.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4821 := 0 + for ; !r.CheckBreak(); yyj4821++ { + + if yyj4821 >= len(yyv4821) { + yyv4821 = append(yyv4821, Secret{}) // var yyz4821 Secret + yyc4821 = true + } + yyh4821.ElemContainerState(yyj4821) + if yyj4821 < len(yyv4821) { + if r.TryDecodeAsNil() { + yyv4821[yyj4821] = Secret{} + } else { + yyv4824 := &yyv4821[yyj4821] + yyv4824.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4821 < len(yyv4821) { + yyv4821 = yyv4821[:yyj4821] + yyc4821 = true + } else if yyj4821 == 0 && yyv4821 == nil { + yyv4821 = []Secret{} + yyc4821 = true + } + } + yyh4821.End() + if yyc4821 { + *v = yyv4821 + } +} + +func (x codecSelfer1234) encSliceConfigMap(v []ConfigMap, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4825 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4826 := &yyv4825 + yy4826.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceConfigMap(v *[]ConfigMap, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4827 := *v + yyh4827, yyl4827 := z.DecSliceHelperStart() + var yyc4827 bool + if yyl4827 == 0 { + if yyv4827 == nil { + yyv4827 = []ConfigMap{} + yyc4827 = true + } else if len(yyv4827) != 0 { + yyv4827 = yyv4827[:0] + yyc4827 = true + } + } else if yyl4827 > 0 { + var yyrr4827, yyrl4827 int + var yyrt4827 bool + if yyl4827 > cap(yyv4827) { + + yyrg4827 := len(yyv4827) > 0 + yyv24827 := yyv4827 + yyrl4827, yyrt4827 = z.DecInferLen(yyl4827, z.DecBasicHandle().MaxInitLen, 264) + if yyrt4827 { + if yyrl4827 <= cap(yyv4827) { + yyv4827 = yyv4827[:yyrl4827] + } else { + yyv4827 = make([]ConfigMap, yyrl4827) + } + } else { + yyv4827 = make([]ConfigMap, yyrl4827) + } + yyc4827 = true + yyrr4827 = len(yyv4827) + if yyrg4827 { + copy(yyv4827, yyv24827) + } + } else if yyl4827 != len(yyv4827) { + yyv4827 = yyv4827[:yyl4827] + yyc4827 = true + } + yyj4827 := 0 + for ; yyj4827 < yyrr4827; yyj4827++ { + yyh4827.ElemContainerState(yyj4827) + if r.TryDecodeAsNil() { + yyv4827[yyj4827] = ConfigMap{} + } else { + yyv4828 := &yyv4827[yyj4827] + yyv4828.CodecDecodeSelf(d) + } + + } + if yyrt4827 { + for ; yyj4827 < yyl4827; yyj4827++ { + yyv4827 = append(yyv4827, ConfigMap{}) + yyh4827.ElemContainerState(yyj4827) + if r.TryDecodeAsNil() { + yyv4827[yyj4827] = ConfigMap{} + } else { + yyv4829 := &yyv4827[yyj4827] + yyv4829.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4827 := 0 + for ; !r.CheckBreak(); yyj4827++ { + + if yyj4827 >= len(yyv4827) { + yyv4827 = append(yyv4827, ConfigMap{}) // var yyz4827 ConfigMap + yyc4827 = true + } + yyh4827.ElemContainerState(yyj4827) + if yyj4827 < len(yyv4827) { + if r.TryDecodeAsNil() { + yyv4827[yyj4827] = ConfigMap{} + } else { + yyv4830 := &yyv4827[yyj4827] + yyv4830.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4827 < len(yyv4827) { + yyv4827 = yyv4827[:yyj4827] + yyc4827 = true + } else if yyj4827 == 0 && yyv4827 == nil { + yyv4827 = []ConfigMap{} + yyc4827 = true + } + } + yyh4827.End() + if yyc4827 { + *v = yyv4827 + } +} + +func (x codecSelfer1234) encSliceComponentCondition(v []ComponentCondition, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4831 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4832 := &yyv4831 + yy4832.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceComponentCondition(v *[]ComponentCondition, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4833 := *v + yyh4833, yyl4833 := z.DecSliceHelperStart() + var yyc4833 bool + if yyl4833 == 0 { + if yyv4833 == nil { + yyv4833 = []ComponentCondition{} + yyc4833 = true + } else if len(yyv4833) != 0 { + yyv4833 = yyv4833[:0] + yyc4833 = true + } + } else if yyl4833 > 0 { + var yyrr4833, yyrl4833 int + var yyrt4833 bool + if yyl4833 > cap(yyv4833) { + + yyrg4833 := len(yyv4833) > 0 + yyv24833 := yyv4833 + yyrl4833, yyrt4833 = z.DecInferLen(yyl4833, z.DecBasicHandle().MaxInitLen, 64) + if yyrt4833 { + if yyrl4833 <= cap(yyv4833) { + yyv4833 = yyv4833[:yyrl4833] + } else { + yyv4833 = make([]ComponentCondition, yyrl4833) + } + } else { + yyv4833 = make([]ComponentCondition, yyrl4833) + } + yyc4833 = true + yyrr4833 = len(yyv4833) + if yyrg4833 { + copy(yyv4833, yyv24833) + } + } else if yyl4833 != len(yyv4833) { + yyv4833 = yyv4833[:yyl4833] + yyc4833 = true + } + yyj4833 := 0 + for ; yyj4833 < yyrr4833; yyj4833++ { + yyh4833.ElemContainerState(yyj4833) + if r.TryDecodeAsNil() { + yyv4833[yyj4833] = ComponentCondition{} + } else { + yyv4834 := &yyv4833[yyj4833] + yyv4834.CodecDecodeSelf(d) + } + + } + if yyrt4833 { + for ; yyj4833 < yyl4833; yyj4833++ { + yyv4833 = append(yyv4833, ComponentCondition{}) + yyh4833.ElemContainerState(yyj4833) + if r.TryDecodeAsNil() { + yyv4833[yyj4833] = ComponentCondition{} + } else { + yyv4835 := &yyv4833[yyj4833] + yyv4835.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4833 := 0 + for ; !r.CheckBreak(); yyj4833++ { + + if yyj4833 >= len(yyv4833) { + yyv4833 = append(yyv4833, ComponentCondition{}) // var yyz4833 ComponentCondition + yyc4833 = true + } + yyh4833.ElemContainerState(yyj4833) + if yyj4833 < len(yyv4833) { + if r.TryDecodeAsNil() { + yyv4833[yyj4833] = ComponentCondition{} + } else { + yyv4836 := &yyv4833[yyj4833] + yyv4836.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4833 < len(yyv4833) { + yyv4833 = yyv4833[:yyj4833] + yyc4833 = true + } else if yyj4833 == 0 && yyv4833 == nil { + yyv4833 = []ComponentCondition{} + yyc4833 = true + } + } + yyh4833.End() + if yyc4833 { + *v = yyv4833 + } +} + +func (x codecSelfer1234) encSliceComponentStatus(v []ComponentStatus, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4837 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4838 := &yyv4837 + yy4838.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceComponentStatus(v *[]ComponentStatus, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4839 := *v + yyh4839, yyl4839 := z.DecSliceHelperStart() + var yyc4839 bool + if yyl4839 == 0 { + if yyv4839 == nil { + yyv4839 = []ComponentStatus{} + yyc4839 = true + } else if len(yyv4839) != 0 { + yyv4839 = yyv4839[:0] + yyc4839 = true + } + } else if yyl4839 > 0 { + var yyrr4839, yyrl4839 int + var yyrt4839 bool + if yyl4839 > cap(yyv4839) { + + yyrg4839 := len(yyv4839) > 0 + yyv24839 := yyv4839 + yyrl4839, yyrt4839 = z.DecInferLen(yyl4839, z.DecBasicHandle().MaxInitLen, 280) + if yyrt4839 { + if yyrl4839 <= cap(yyv4839) { + yyv4839 = yyv4839[:yyrl4839] + } else { + yyv4839 = make([]ComponentStatus, yyrl4839) + } + } else { + yyv4839 = make([]ComponentStatus, yyrl4839) + } + yyc4839 = true + yyrr4839 = len(yyv4839) + if yyrg4839 { + copy(yyv4839, yyv24839) + } + } else if yyl4839 != len(yyv4839) { + yyv4839 = yyv4839[:yyl4839] + yyc4839 = true + } + yyj4839 := 0 + for ; yyj4839 < yyrr4839; yyj4839++ { + yyh4839.ElemContainerState(yyj4839) + if r.TryDecodeAsNil() { + yyv4839[yyj4839] = ComponentStatus{} + } else { + yyv4840 := &yyv4839[yyj4839] + yyv4840.CodecDecodeSelf(d) + } + + } + if yyrt4839 { + for ; yyj4839 < yyl4839; yyj4839++ { + yyv4839 = append(yyv4839, ComponentStatus{}) + yyh4839.ElemContainerState(yyj4839) + if r.TryDecodeAsNil() { + yyv4839[yyj4839] = ComponentStatus{} + } else { + yyv4841 := &yyv4839[yyj4839] + yyv4841.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4839 := 0 + for ; !r.CheckBreak(); yyj4839++ { + + if yyj4839 >= len(yyv4839) { + yyv4839 = append(yyv4839, ComponentStatus{}) // var yyz4839 ComponentStatus + yyc4839 = true + } + yyh4839.ElemContainerState(yyj4839) + if yyj4839 < len(yyv4839) { + if r.TryDecodeAsNil() { + yyv4839[yyj4839] = ComponentStatus{} + } else { + yyv4842 := &yyv4839[yyj4839] + yyv4842.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4839 < len(yyv4839) { + yyv4839 = yyv4839[:yyj4839] + yyc4839 = true + } else if yyj4839 == 0 && yyv4839 == nil { + yyv4839 = []ComponentStatus{} + yyc4839 = true + } + } + yyh4839.End() + if yyc4839 { + *v = yyv4839 + } +} + +func (x codecSelfer1234) encSliceDownwardAPIVolumeFile(v []DownwardAPIVolumeFile, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv4843 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy4844 := &yyv4843 + yy4844.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceDownwardAPIVolumeFile(v *[]DownwardAPIVolumeFile, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv4845 := *v + yyh4845, yyl4845 := z.DecSliceHelperStart() + var yyc4845 bool + if yyl4845 == 0 { + if yyv4845 == nil { + yyv4845 = []DownwardAPIVolumeFile{} + yyc4845 = true + } else if len(yyv4845) != 0 { + yyv4845 = yyv4845[:0] + yyc4845 = true + } + } else if yyl4845 > 0 { + var yyrr4845, yyrl4845 int + var yyrt4845 bool + if yyl4845 > cap(yyv4845) { + + yyrg4845 := len(yyv4845) > 0 + yyv24845 := yyv4845 + yyrl4845, yyrt4845 = z.DecInferLen(yyl4845, z.DecBasicHandle().MaxInitLen, 40) + if yyrt4845 { + if yyrl4845 <= cap(yyv4845) { + yyv4845 = yyv4845[:yyrl4845] + } else { + yyv4845 = make([]DownwardAPIVolumeFile, yyrl4845) + } + } else { + yyv4845 = make([]DownwardAPIVolumeFile, yyrl4845) + } + yyc4845 = true + yyrr4845 = len(yyv4845) + if yyrg4845 { + copy(yyv4845, yyv24845) + } + } else if yyl4845 != len(yyv4845) { + yyv4845 = yyv4845[:yyl4845] + yyc4845 = true + } + yyj4845 := 0 + for ; yyj4845 < yyrr4845; yyj4845++ { + yyh4845.ElemContainerState(yyj4845) + if r.TryDecodeAsNil() { + yyv4845[yyj4845] = DownwardAPIVolumeFile{} + } else { + yyv4846 := &yyv4845[yyj4845] + yyv4846.CodecDecodeSelf(d) + } + + } + if yyrt4845 { + for ; yyj4845 < yyl4845; yyj4845++ { + yyv4845 = append(yyv4845, DownwardAPIVolumeFile{}) + yyh4845.ElemContainerState(yyj4845) + if r.TryDecodeAsNil() { + yyv4845[yyj4845] = DownwardAPIVolumeFile{} + } else { + yyv4847 := &yyv4845[yyj4845] + yyv4847.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj4845 := 0 + for ; !r.CheckBreak(); yyj4845++ { + + if yyj4845 >= len(yyv4845) { + yyv4845 = append(yyv4845, DownwardAPIVolumeFile{}) // var yyz4845 DownwardAPIVolumeFile + yyc4845 = true + } + yyh4845.ElemContainerState(yyj4845) + if yyj4845 < len(yyv4845) { + if r.TryDecodeAsNil() { + yyv4845[yyj4845] = DownwardAPIVolumeFile{} + } else { + yyv4848 := &yyv4845[yyj4845] + yyv4848.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj4845 < len(yyv4845) { + yyv4845 = yyv4845[:yyj4845] + yyc4845 = true + } else if yyj4845 == 0 && yyv4845 == nil { + yyv4845 = []DownwardAPIVolumeFile{} + yyc4845 = true + } + } + yyh4845.End() + if yyc4845 { + *v = yyv4845 + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/types.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/types.go new file mode 100644 index 00000000..2213f4b4 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/types.go @@ -0,0 +1,3503 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +import ( + "k8s.io/client-go/1.4/pkg/api/resource" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/types" + "k8s.io/client-go/1.4/pkg/util/intstr" +) + +// The comments for the structs and fields can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored and not exported to the SwaggerAPI. +// +// The aforementioned methods can be generated by hack/update-generated-swagger-docs.sh + +// Common string formats +// --------------------- +// Many fields in this API have formatting requirements. The commonly used +// formats are defined here. +// +// C_IDENTIFIER: This is a string that conforms to the definition of an "identifier" +// in the C language. This is captured by the following regex: +// [A-Za-z_][A-Za-z0-9_]* +// This defines the format, but not the length restriction, which should be +// specified at the definition of any field of this type. +// +// DNS_LABEL: This is a string, no more than 63 characters long, that conforms +// to the definition of a "label" in RFCs 1035 and 1123. This is captured +// by the following regex: +// [a-z0-9]([-a-z0-9]*[a-z0-9])? +// +// DNS_SUBDOMAIN: This is a string, no more than 253 characters long, that conforms +// to the definition of a "subdomain" in RFCs 1035 and 1123. This is captured +// by the following regex: +// [a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)* +// or more simply: +// DNS_LABEL(\.DNS_LABEL)* +// +// IANA_SVC_NAME: This is a string, no more than 15 characters long, that +// conforms to the definition of IANA service name in RFC 6335. +// It must contains at least one letter [a-z] and it must contains only [a-z0-9-]. +// Hypens ('-') cannot be leading or trailing character of the string +// and cannot be adjacent to other hyphens. + +// ObjectMeta is metadata that all persisted resources must have, which includes all objects +// users must create. +type ObjectMeta struct { + // Name must be unique within a namespace. Is required when creating resources, although + // some resources may allow a client to request the generation of an appropriate name + // automatically. Name is primarily intended for creation idempotence and configuration + // definition. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + + // GenerateName is an optional prefix, used by the server, to generate a unique + // name ONLY IF the Name field has not been provided. + // If this field is used, the name returned to the client will be different + // than the name passed. This value will also be combined with a unique suffix. + // The provided value has the same validation rules as the Name field, + // and may be truncated by the length of the suffix required to make the value + // unique on the server. + // + // If this field is specified and the generated name exists, the server will + // NOT return a 409 - instead, it will either return 201 Created or 500 with Reason + // ServerTimeout indicating a unique name could not be found in the time allotted, and the client + // should retry (optionally after the time indicated in the Retry-After header). + // + // Applied only if Name is not specified. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#idempotency + GenerateName string `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"` + + // Namespace defines the space within each name must be unique. An empty namespace is + // equivalent to the "default" namespace, but "default" is the canonical representation. + // Not all objects are required to be scoped to a namespace - the value of this field for + // those objects will be empty. + // + // Must be a DNS_LABEL. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md + Namespace string `json:"namespace,omitempty" protobuf:"bytes,3,opt,name=namespace"` + + // SelfLink is a URL representing this object. + // Populated by the system. + // Read-only. + SelfLink string `json:"selfLink,omitempty" protobuf:"bytes,4,opt,name=selfLink"` + + // UID is the unique in time and space value for this object. It is typically generated by + // the server on successful creation of a resource and is not allowed to change on PUT + // operations. + // + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids + UID types.UID `json:"uid,omitempty" protobuf:"bytes,5,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"` + + // An opaque value that represents the internal version of this object that can + // be used by clients to determine when objects have changed. May be used for optimistic + // concurrency, change detection, and the watch operation on a resource or set of resources. + // Clients must treat these values as opaque and passed unmodified back to the server. + // They may only be valid for a particular resource or set of resources. + // + // Populated by the system. + // Read-only. + // Value must be treated as opaque by clients and . + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency + ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"` + + // A sequence number representing a specific generation of the desired state. + // Populated by the system. Read-only. + Generation int64 `json:"generation,omitempty" protobuf:"varint,7,opt,name=generation"` + + // CreationTimestamp is a timestamp representing the server time when this object was + // created. It is not guaranteed to be set in happens-before order across separate operations. + // Clients may not set this value. It is represented in RFC3339 form and is in UTC. + // + // Populated by the system. + // Read-only. + // Null for lists. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + CreationTimestamp unversioned.Time `json:"creationTimestamp,omitempty" protobuf:"bytes,8,opt,name=creationTimestamp"` + + // DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This + // field is set by the server when a graceful deletion is requested by the user, and is not + // directly settable by a client. The resource will be deleted (no longer visible from + // resource lists, and not reachable by name) after the time in this field. Once set, this + // value may not be unset or be set further into the future, although it may be shortened + // or the resource may be deleted prior to this time. For example, a user may request that + // a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination + // signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet + // will send a hard termination signal to the container. + // If not set, graceful deletion of the object has not been requested. + // + // Populated by the system when a graceful deletion is requested. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + DeletionTimestamp *unversioned.Time `json:"deletionTimestamp,omitempty" protobuf:"bytes,9,opt,name=deletionTimestamp"` + + // Number of seconds allowed for this object to gracefully terminate before + // it will be removed from the system. Only set when deletionTimestamp is also set. + // May only be shortened. + // Read-only. + DeletionGracePeriodSeconds *int64 `json:"deletionGracePeriodSeconds,omitempty" protobuf:"varint,10,opt,name=deletionGracePeriodSeconds"` + + // Map of string keys and values that can be used to organize and categorize + // (scope and select) objects. May match selectors of replication controllers + // and services. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md + Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"` + + // Annotations is an unstructured key value map stored with a resource that may be + // set by external tools to store and retrieve arbitrary metadata. They are not + // queryable and should be preserved when modifying objects. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/annotations.md + Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"` + + // List of objects depended by this object. If ALL objects in the list have + // been deleted, this object will be garbage collected. If this object is managed by a controller, + // then an entry in this list will point to this controller, with the controller field set to true. + // There cannot be more than one managing controller. + OwnerReferences []OwnerReference `json:"ownerReferences,omitempty" patchStrategy:"merge" patchMergeKey:"uid" protobuf:"bytes,13,rep,name=ownerReferences"` + + // Must be empty before the object is deleted from the registry. Each entry + // is an identifier for the responsible component that will remove the entry + // from the list. If the deletionTimestamp of the object is non-nil, entries + // in this list can only be removed. + Finalizers []string `json:"finalizers,omitempty" patchStrategy:"merge" protobuf:"bytes,14,rep,name=finalizers"` + + // The name of the cluster which the object belongs to. + // This is used to distinguish resources with same name and namespace in different clusters. + // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. + ClusterName string `json:"clusterName,omitempty" protobuf:"bytes,15,opt,name=clusterName"` +} + +const ( + // NamespaceDefault means the object is in the default namespace which is applied when not specified by clients + NamespaceDefault string = "default" + // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces + NamespaceAll string = "" +) + +// Volume represents a named volume in a pod that may be accessed by any container in the pod. +type Volume struct { + // Volume's name. + // Must be a DNS_LABEL and unique within the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // VolumeSource represents the location and type of the mounted volume. + // If not specified, the Volume is implied to be an EmptyDir. + // This implied behavior is deprecated and will be removed in a future version. + VolumeSource `json:",inline" protobuf:"bytes,2,opt,name=volumeSource"` +} + +// Represents the source of a volume to mount. +// Only one of its members may be specified. +type VolumeSource struct { + // HostPath represents a pre-existing file or directory on the host + // machine that is directly exposed to the container. This is generally + // used for system agents or other privileged things that are allowed + // to see the host machine. Most containers will NOT need this. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath + // --- + // TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not + // mount host directories as read/write. + HostPath *HostPathVolumeSource `json:"hostPath,omitempty" protobuf:"bytes,1,opt,name=hostPath"` + // EmptyDir represents a temporary directory that shares a pod's lifetime. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir + EmptyDir *EmptyDirVolumeSource `json:"emptyDir,omitempty" protobuf:"bytes,2,opt,name=emptyDir"` + // GCEPersistentDisk represents a GCE Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + GCEPersistentDisk *GCEPersistentDiskVolumeSource `json:"gcePersistentDisk,omitempty" protobuf:"bytes,3,opt,name=gcePersistentDisk"` + // AWSElasticBlockStore represents an AWS Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource `json:"awsElasticBlockStore,omitempty" protobuf:"bytes,4,opt,name=awsElasticBlockStore"` + // GitRepo represents a git repository at a particular revision. + GitRepo *GitRepoVolumeSource `json:"gitRepo,omitempty" protobuf:"bytes,5,opt,name=gitRepo"` + // Secret represents a secret that should populate this volume. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets + Secret *SecretVolumeSource `json:"secret,omitempty" protobuf:"bytes,6,opt,name=secret"` + // NFS represents an NFS mount on the host that shares a pod's lifetime + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + NFS *NFSVolumeSource `json:"nfs,omitempty" protobuf:"bytes,7,opt,name=nfs"` + // ISCSI represents an ISCSI Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/iscsi/README.md + ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty" protobuf:"bytes,8,opt,name=iscsi"` + // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md + Glusterfs *GlusterfsVolumeSource `json:"glusterfs,omitempty" protobuf:"bytes,9,opt,name=glusterfs"` + // PersistentVolumeClaimVolumeSource represents a reference to a + // PersistentVolumeClaim in the same namespace. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + PersistentVolumeClaim *PersistentVolumeClaimVolumeSource `json:"persistentVolumeClaim,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaim"` + // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md + RBD *RBDVolumeSource `json:"rbd,omitempty" protobuf:"bytes,11,opt,name=rbd"` + // FlexVolume represents a generic volume resource that is + // provisioned/attached using an exec based plugin. This is an + // alpha feature and may change in future. + FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty" protobuf:"bytes,12,opt,name=flexVolume"` + // Cinder represents a cinder volume attached and mounted on kubelets host machine + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + Cinder *CinderVolumeSource `json:"cinder,omitempty" protobuf:"bytes,13,opt,name=cinder"` + // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime + CephFS *CephFSVolumeSource `json:"cephfs,omitempty" protobuf:"bytes,14,opt,name=cephfs"` + // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running + Flocker *FlockerVolumeSource `json:"flocker,omitempty" protobuf:"bytes,15,opt,name=flocker"` + // DownwardAPI represents downward API about the pod that should populate this volume + DownwardAPI *DownwardAPIVolumeSource `json:"downwardAPI,omitempty" protobuf:"bytes,16,opt,name=downwardAPI"` + // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. + FC *FCVolumeSource `json:"fc,omitempty" protobuf:"bytes,17,opt,name=fc"` + // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. + AzureFile *AzureFileVolumeSource `json:"azureFile,omitempty" protobuf:"bytes,18,opt,name=azureFile"` + // ConfigMap represents a configMap that should populate this volume + ConfigMap *ConfigMapVolumeSource `json:"configMap,omitempty" protobuf:"bytes,19,opt,name=configMap"` + // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine + VsphereVolume *VsphereVirtualDiskVolumeSource `json:"vsphereVolume,omitempty" protobuf:"bytes,20,opt,name=vsphereVolume"` + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty" protobuf:"bytes,21,opt,name=quobyte"` + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,22,opt,name=azureDisk"` +} + +// PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. +// This volume finds the bound PV and mounts that volume for the pod. A +// PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another +// type of volume that is owned by someone else (the system). +type PersistentVolumeClaimVolumeSource struct { + // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + ClaimName string `json:"claimName" protobuf:"bytes,1,opt,name=claimName"` + // Will force the ReadOnly setting in VolumeMounts. + // Default false. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` +} + +// PersistentVolumeSource is similar to VolumeSource but meant for the +// administrator who creates PVs. Exactly one of its members must be set. +type PersistentVolumeSource struct { + // GCEPersistentDisk represents a GCE Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. Provisioned by an admin. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + GCEPersistentDisk *GCEPersistentDiskVolumeSource `json:"gcePersistentDisk,omitempty" protobuf:"bytes,1,opt,name=gcePersistentDisk"` + // AWSElasticBlockStore represents an AWS Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource `json:"awsElasticBlockStore,omitempty" protobuf:"bytes,2,opt,name=awsElasticBlockStore"` + // HostPath represents a directory on the host. + // Provisioned by a developer or tester. + // This is useful for single-node development and testing only! + // On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath + HostPath *HostPathVolumeSource `json:"hostPath,omitempty" protobuf:"bytes,3,opt,name=hostPath"` + // Glusterfs represents a Glusterfs volume that is attached to a host and + // exposed to the pod. Provisioned by an admin. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md + Glusterfs *GlusterfsVolumeSource `json:"glusterfs,omitempty" protobuf:"bytes,4,opt,name=glusterfs"` + // NFS represents an NFS mount on the host. Provisioned by an admin. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + NFS *NFSVolumeSource `json:"nfs,omitempty" protobuf:"bytes,5,opt,name=nfs"` + // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md + RBD *RBDVolumeSource `json:"rbd,omitempty" protobuf:"bytes,6,opt,name=rbd"` + // ISCSI represents an ISCSI Disk resource that is attached to a + // kubelet's host machine and then exposed to the pod. Provisioned by an admin. + ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty" protobuf:"bytes,7,opt,name=iscsi"` + // Cinder represents a cinder volume attached and mounted on kubelets host machine + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + Cinder *CinderVolumeSource `json:"cinder,omitempty" protobuf:"bytes,8,opt,name=cinder"` + // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime + CephFS *CephFSVolumeSource `json:"cephfs,omitempty" protobuf:"bytes,9,opt,name=cephfs"` + // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. + FC *FCVolumeSource `json:"fc,omitempty" protobuf:"bytes,10,opt,name=fc"` + // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running + Flocker *FlockerVolumeSource `json:"flocker,omitempty" protobuf:"bytes,11,opt,name=flocker"` + // FlexVolume represents a generic volume resource that is + // provisioned/attached using an exec based plugin. This is an + // alpha feature and may change in future. + FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty" protobuf:"bytes,12,opt,name=flexVolume"` + // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. + AzureFile *AzureFileVolumeSource `json:"azureFile,omitempty" protobuf:"bytes,13,opt,name=azureFile"` + // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine + VsphereVolume *VsphereVirtualDiskVolumeSource `json:"vsphereVolume,omitempty" protobuf:"bytes,14,opt,name=vsphereVolume"` + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty" protobuf:"bytes,15,opt,name=quobyte"` + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,16,opt,name=azureDisk"` +} + +// +genclient=true +// +nonNamespaced=true + +// PersistentVolume (PV) is a storage resource provisioned by an administrator. +// It is analogous to a node. +// More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md +type PersistentVolume struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines a specification of a persistent volume owned by the cluster. + // Provisioned by an administrator. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes + Spec PersistentVolumeSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status represents the current information/status for the persistent volume. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes + Status PersistentVolumeStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// PersistentVolumeSpec is the specification of a persistent volume. +type PersistentVolumeSpec struct { + // A description of the persistent volume's resources and capacity. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity + Capacity ResourceList `json:"capacity,omitempty" protobuf:"bytes,1,rep,name=capacity,casttype=ResourceList,castkey=ResourceName"` + // The actual volume backing the persistent volume. + PersistentVolumeSource `json:",inline" protobuf:"bytes,2,opt,name=persistentVolumeSource"` + // AccessModes contains all ways the volume can be mounted. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes + AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty" protobuf:"bytes,3,rep,name=accessModes,casttype=PersistentVolumeAccessMode"` + // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. + // Expected to be non-nil when bound. + // claim.VolumeName is the authoritative bind between PV and PVC. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#binding + ClaimRef *ObjectReference `json:"claimRef,omitempty" protobuf:"bytes,4,opt,name=claimRef"` + // What happens to a persistent volume when released from its claim. + // Valid options are Retain (default) and Recycle. + // Recycling must be supported by the volume plugin underlying this persistent volume. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#recycling-policy + PersistentVolumeReclaimPolicy PersistentVolumeReclaimPolicy `json:"persistentVolumeReclaimPolicy,omitempty" protobuf:"bytes,5,opt,name=persistentVolumeReclaimPolicy,casttype=PersistentVolumeReclaimPolicy"` +} + +// PersistentVolumeReclaimPolicy describes a policy for end-of-life maintenance of persistent volumes. +type PersistentVolumeReclaimPolicy string + +const ( + // PersistentVolumeReclaimRecycle means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim. + // The volume plugin must support Recycling. + PersistentVolumeReclaimRecycle PersistentVolumeReclaimPolicy = "Recycle" + // PersistentVolumeReclaimDelete means the volume will be deleted from Kubernetes on release from its claim. + // The volume plugin must support Deletion. + PersistentVolumeReclaimDelete PersistentVolumeReclaimPolicy = "Delete" + // PersistentVolumeReclaimRetain means the volume will be left in its current phase (Released) for manual reclamation by the administrator. + // The default policy is Retain. + PersistentVolumeReclaimRetain PersistentVolumeReclaimPolicy = "Retain" +) + +// PersistentVolumeStatus is the current status of a persistent volume. +type PersistentVolumeStatus struct { + // Phase indicates if a volume is available, bound to a claim, or released by a claim. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#phase + Phase PersistentVolumePhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=PersistentVolumePhase"` + // A human-readable message indicating details about why the volume is in this state. + Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` + // Reason is a brief CamelCase string that describes any failure and is meant + // for machine parsing and tidy display in the CLI. + Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` +} + +// PersistentVolumeList is a list of PersistentVolume items. +type PersistentVolumeList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // List of persistent volumes. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md + Items []PersistentVolume `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient=true + +// PersistentVolumeClaim is a user's request for and claim to a persistent volume +type PersistentVolumeClaim struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the desired characteristics of a volume requested by a pod author. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + Spec PersistentVolumeClaimSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status represents the current information/status of a persistent volume claim. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + Status PersistentVolumeClaimStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// PersistentVolumeClaimList is a list of PersistentVolumeClaim items. +type PersistentVolumeClaimList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // A list of persistent volume claims. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + Items []PersistentVolumeClaim `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// PersistentVolumeClaimSpec describes the common attributes of storage devices +// and allows a Source for provider-specific attributes +type PersistentVolumeClaimSpec struct { + // AccessModes contains the desired access modes the volume should have. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1 + AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty" protobuf:"bytes,1,rep,name=accessModes,casttype=PersistentVolumeAccessMode"` + // A label query over volumes to consider for binding. + Selector *unversioned.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,opt,name=selector"` + // Resources represents the minimum resources the volume should have. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources + Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,2,opt,name=resources"` + // VolumeName is the binding reference to the PersistentVolume backing this claim. + VolumeName string `json:"volumeName,omitempty" protobuf:"bytes,3,opt,name=volumeName"` +} + +// PersistentVolumeClaimStatus is the current status of a persistent volume claim. +type PersistentVolumeClaimStatus struct { + // Phase represents the current phase of PersistentVolumeClaim. + Phase PersistentVolumeClaimPhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=PersistentVolumeClaimPhase"` + // AccessModes contains the actual access modes the volume backing the PVC has. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1 + AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty" protobuf:"bytes,2,rep,name=accessModes,casttype=PersistentVolumeAccessMode"` + // Represents the actual resources of the underlying volume. + Capacity ResourceList `json:"capacity,omitempty" protobuf:"bytes,3,rep,name=capacity,casttype=ResourceList,castkey=ResourceName"` +} + +type PersistentVolumeAccessMode string + +const ( + // can be mounted read/write mode to exactly 1 host + ReadWriteOnce PersistentVolumeAccessMode = "ReadWriteOnce" + // can be mounted in read-only mode to many hosts + ReadOnlyMany PersistentVolumeAccessMode = "ReadOnlyMany" + // can be mounted in read/write mode to many hosts + ReadWriteMany PersistentVolumeAccessMode = "ReadWriteMany" +) + +type PersistentVolumePhase string + +const ( + // used for PersistentVolumes that are not available + VolumePending PersistentVolumePhase = "Pending" + // used for PersistentVolumes that are not yet bound + // Available volumes are held by the binder and matched to PersistentVolumeClaims + VolumeAvailable PersistentVolumePhase = "Available" + // used for PersistentVolumes that are bound + VolumeBound PersistentVolumePhase = "Bound" + // used for PersistentVolumes where the bound PersistentVolumeClaim was deleted + // released volumes must be recycled before becoming available again + // this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource + VolumeReleased PersistentVolumePhase = "Released" + // used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim + VolumeFailed PersistentVolumePhase = "Failed" +) + +type PersistentVolumeClaimPhase string + +const ( + // used for PersistentVolumeClaims that are not yet bound + ClaimPending PersistentVolumeClaimPhase = "Pending" + // used for PersistentVolumeClaims that are bound + ClaimBound PersistentVolumeClaimPhase = "Bound" + // used for PersistentVolumeClaims that lost their underlying + // PersistentVolume. The claim was bound to a PersistentVolume and this + // volume does not exist any longer and all data on it was lost. + ClaimLost PersistentVolumeClaimPhase = "Lost" +) + +// Represents a host path mapped into a pod. +// Host path volumes do not support ownership management or SELinux relabeling. +type HostPathVolumeSource struct { + // Path of the directory on the host. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath + Path string `json:"path" protobuf:"bytes,1,opt,name=path"` +} + +// Represents an empty directory for a pod. +// Empty directory volumes support ownership management and SELinux relabeling. +type EmptyDirVolumeSource struct { + // What type of storage medium should back this directory. + // The default is "" which means to use the node's default medium. + // Must be an empty string (default) or Memory. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir + Medium StorageMedium `json:"medium,omitempty" protobuf:"bytes,1,opt,name=medium,casttype=StorageMedium"` +} + +// Represents a Glusterfs mount that lasts the lifetime of a pod. +// Glusterfs volumes do not support ownership management or SELinux relabeling. +type GlusterfsVolumeSource struct { + // EndpointsName is the endpoint name that details Glusterfs topology. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod + EndpointsName string `json:"endpoints" protobuf:"bytes,1,opt,name=endpoints"` + + // Path is the Glusterfs volume path. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod + Path string `json:"path" protobuf:"bytes,2,opt,name=path"` + + // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. + // Defaults to false. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` +} + +// Represents a Rados Block Device mount that lasts the lifetime of a pod. +// RBD volumes support ownership management and SELinux relabeling. +type RBDVolumeSource struct { + // A collection of Ceph monitors. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + CephMonitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` + // The rados image name. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + RBDImage string `json:"image" protobuf:"bytes,2,opt,name=image"` + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#rbd + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty" protobuf:"bytes,3,opt,name=fsType"` + // The rados pool name. + // Default is rbd. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it. + RBDPool string `json:"pool,omitempty" protobuf:"bytes,4,opt,name=pool"` + // The rados user name. + // Default is admin. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + RadosUser string `json:"user,omitempty" protobuf:"bytes,5,opt,name=user"` + // Keyring is the path to key ring for RBDUser. + // Default is /etc/ceph/keyring. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + Keyring string `json:"keyring,omitempty" protobuf:"bytes,6,opt,name=keyring"` + // SecretRef is name of the authentication secret for RBDUser. If provided + // overrides keyring. + // Default is nil. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + SecretRef *LocalObjectReference `json:"secretRef,omitempty" protobuf:"bytes,7,opt,name=secretRef"` + // ReadOnly here will force the ReadOnly setting in VolumeMounts. + // Defaults to false. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,8,opt,name=readOnly"` +} + +// Represents a cinder volume resource in Openstack. +// A Cinder volume must exist before mounting to a container. +// The volume must also be in the same region as the kubelet. +// Cinder volumes support ownership management and SELinux relabeling. +type CinderVolumeSource struct { + // volume id used to identify the volume in cinder + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + VolumeID string `json:"volumeID" protobuf:"bytes,1,opt,name=volumeID"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` +} + +// Represents a Ceph Filesystem mount that lasts the lifetime of a pod +// Cephfs volumes do not support ownership management or SELinux relabeling. +type CephFSVolumeSource struct { + // Required: Monitors is a collection of Ceph monitors + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + Monitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` + // Optional: Used as the mounted root, rather than the full Ceph tree, default is / + Path string `json:"path,omitempty" protobuf:"bytes,2,opt,name=path"` + // Optional: User is the rados user name, default is admin + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + User string `json:"user,omitempty" protobuf:"bytes,3,opt,name=user"` + // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + SecretFile string `json:"secretFile,omitempty" protobuf:"bytes,4,opt,name=secretFile"` + // Optional: SecretRef is reference to the authentication secret for User, default is empty. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + SecretRef *LocalObjectReference `json:"secretRef,omitempty" protobuf:"bytes,5,opt,name=secretRef"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,6,opt,name=readOnly"` +} + +// Represents a Flocker volume mounted by the Flocker agent. +// Flocker volumes do not support ownership management or SELinux relabeling. +type FlockerVolumeSource struct { + // Required: the volume name. This is going to be store on metadata -> name on the payload for Flocker + DatasetName string `json:"datasetName" protobuf:"bytes,1,opt,name=datasetName"` +} + +// StorageMedium defines ways that storage can be allocated to a volume. +type StorageMedium string + +const ( + StorageMediumDefault StorageMedium = "" // use whatever the default is for the node + StorageMediumMemory StorageMedium = "Memory" // use memory (tmpfs) +) + +// Protocol defines network protocols supported for things like container ports. +type Protocol string + +const ( + // ProtocolTCP is the TCP protocol. + ProtocolTCP Protocol = "TCP" + // ProtocolUDP is the UDP protocol. + ProtocolUDP Protocol = "UDP" +) + +// Represents a Persistent Disk resource in Google Compute Engine. +// +// A GCE PD must exist before mounting to a container. The disk must +// also be in the same GCE project and zone as the kubelet. A GCE PD +// can only be mounted as read/write once or read-only many times. GCE +// PDs support ownership management and SELinux relabeling. +type GCEPersistentDiskVolumeSource struct { + // Unique name of the PD resource in GCE. Used to identify the disk in GCE. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + PDName string `json:"pdName" protobuf:"bytes,1,opt,name=pdName"` + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` + // The partition in the volume that you want to mount. + // If omitted, the default is to mount by volume name. + // Examples: For volume /dev/sda1, you specify the partition as "1". + // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + Partition int32 `json:"partition,omitempty" protobuf:"varint,3,opt,name=partition"` + // ReadOnly here will force the ReadOnly setting in VolumeMounts. + // Defaults to false. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,4,opt,name=readOnly"` +} + +// Represents a Quobyte mount that lasts the lifetime of a pod. +// Quobyte volumes do not support ownership management or SELinux relabeling. +type QuobyteVolumeSource struct { + // Registry represents a single or multiple Quobyte Registry services + // specified as a string as host:port pair (multiple entries are separated with commas) + // which acts as the central registry for volumes + Registry string `json:"registry" protobuf:"bytes,1,opt,name=registry"` + + // Volume is a string that references an already created Quobyte volume by name. + Volume string `json:"volume" protobuf:"bytes,2,opt,name=volume"` + + // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. + // Defaults to false. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` + + // User to map volume access to + // Defaults to serivceaccount user + User string `json:"user,omitempty" protobuf:"bytes,4,opt,name=user"` + + // Group to map volume access to + // Default is no group + Group string `json:"group,omitempty" protobuf:"bytes,5,opt,name=group"` +} + +// FlexVolume represents a generic volume resource that is +// provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. +type FlexVolumeSource struct { + // Driver is the name of the driver to use for this volume. + Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. + FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` + // Optional: SecretRef is reference to the secret object containing + // sensitive information to pass to the plugin scripts. This may be + // empty if no secret object is specified. If the secret object + // contains more than one secret, all secrets are passed to the plugin + // scripts. + SecretRef *LocalObjectReference `json:"secretRef,omitempty" protobuf:"bytes,3,opt,name=secretRef"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,4,opt,name=readOnly"` + // Optional: Extra command options if any. + Options map[string]string `json:"options,omitempty" protobuf:"bytes,5,rep,name=options"` +} + +// Represents a Persistent Disk resource in AWS. +// +// An AWS EBS disk must exist before mounting to a container. The disk +// must also be in the same AWS zone as the kubelet. An AWS EBS disk +// can only be mounted as read/write once. AWS EBS volumes support +// ownership management and SELinux relabeling. +type AWSElasticBlockStoreVolumeSource struct { + // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + VolumeID string `json:"volumeID" protobuf:"bytes,1,opt,name=volumeID"` + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` + // The partition in the volume that you want to mount. + // If omitted, the default is to mount by volume name. + // Examples: For volume /dev/sda1, you specify the partition as "1". + // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). + Partition int32 `json:"partition,omitempty" protobuf:"varint,3,opt,name=partition"` + // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". + // If omitted, the default is "false". + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,4,opt,name=readOnly"` +} + +// Represents a volume that is populated with the contents of a git repository. +// Git repo volumes do not support ownership management. +// Git repo volumes support SELinux relabeling. +type GitRepoVolumeSource struct { + // Repository URL + Repository string `json:"repository" protobuf:"bytes,1,opt,name=repository"` + // Commit hash for the specified revision. + Revision string `json:"revision,omitempty" protobuf:"bytes,2,opt,name=revision"` + // Target directory name. + // Must not contain or start with '..'. If '.' is supplied, the volume directory will be the + // git repository. Otherwise, if specified, the volume will contain the git repository in + // the subdirectory with the given name. + Directory string `json:"directory,omitempty" protobuf:"bytes,3,opt,name=directory"` +} + +// Adapts a Secret into a volume. +// +// The contents of the target Secret's Data field will be presented in a volume +// as files using the keys in the Data field as the file names. +// Secret volumes support ownership management and SELinux relabeling. +type SecretVolumeSource struct { + // Name of the secret in the pod's namespace to use. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets + SecretName string `json:"secretName,omitempty" protobuf:"bytes,1,opt,name=secretName"` + // If unspecified, each key-value pair in the Data field of the referenced + // Secret will be projected into the volume as a file whose name is the + // key and content is the value. If specified, the listed keys will be + // projected into the specified paths, and unlisted keys will not be + // present. If a key is specified which is not present in the Secret, + // the volume setup will error. Paths must be relative and may not contain + // the '..' path or start with '..'. + Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"bytes,3,opt,name=defaultMode"` +} + +const ( + SecretVolumeSourceDefaultMode int32 = 0644 +) + +// Represents an NFS mount that lasts the lifetime of a pod. +// NFS volumes do not support ownership management or SELinux relabeling. +type NFSVolumeSource struct { + // Server is the hostname or IP address of the NFS server. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + Server string `json:"server" protobuf:"bytes,1,opt,name=server"` + + // Path that is exported by the NFS server. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + Path string `json:"path" protobuf:"bytes,2,opt,name=path"` + + // ReadOnly here will force + // the NFS export to be mounted with read-only permissions. + // Defaults to false. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` +} + +// Represents an ISCSI disk. +// ISCSI volumes can only be mounted as read/write once. +// ISCSI volumes support ownership management and SELinux relabeling. +type ISCSIVolumeSource struct { + // iSCSI target portal. The portal is either an IP or ip_addr:port if the port + // is other than default (typically TCP ports 860 and 3260). + TargetPortal string `json:"targetPortal" protobuf:"bytes,1,opt,name=targetPortal"` + // Target iSCSI Qualified Name. + IQN string `json:"iqn" protobuf:"bytes,2,opt,name=iqn"` + // iSCSI target lun number. + Lun int32 `json:"lun" protobuf:"varint,3,opt,name=lun"` + // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. + ISCSIInterface string `json:"iscsiInterface,omitempty" protobuf:"bytes,4,opt,name=iscsiInterface"` + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#iscsi + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty" protobuf:"bytes,5,opt,name=fsType"` + // ReadOnly here will force the ReadOnly setting in VolumeMounts. + // Defaults to false. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,6,opt,name=readOnly"` +} + +// Represents a Fibre Channel volume. +// Fibre Channel volumes can only be mounted as read/write once. +// Fibre Channel volumes support ownership management and SELinux relabeling. +type FCVolumeSource struct { + // Required: FC target worldwide names (WWNs) + TargetWWNs []string `json:"targetWWNs" protobuf:"bytes,1,rep,name=targetWWNs"` + // Required: FC target lun number + Lun *int32 `json:"lun" protobuf:"varint,2,opt,name=lun"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // TODO: how do we prevent errors in the filesystem from compromising the machine + FSType string `json:"fsType,omitempty" protobuf:"bytes,3,opt,name=fsType"` + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,4,opt,name=readOnly"` +} + +// AzureFile represents an Azure File Service mount on the host and bind mount to the pod. +type AzureFileVolumeSource struct { + // the name of secret that contains Azure Storage Account Name and Key + SecretName string `json:"secretName" protobuf:"bytes,1,opt,name=secretName"` + // Share Name + ShareName string `json:"shareName" protobuf:"bytes,2,opt,name=shareName"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` +} + +// Represents a vSphere volume resource. +type VsphereVirtualDiskVolumeSource struct { + // Path that identifies vSphere volume vmdk + VolumePath string `json:"volumePath" protobuf:"bytes,1,opt,name=volumePath"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` +} +type AzureDataDiskCachingMode string + +const ( + AzureDataDiskCachingNone AzureDataDiskCachingMode = "None" + AzureDataDiskCachingReadOnly AzureDataDiskCachingMode = "ReadOnly" + AzureDataDiskCachingReadWrite AzureDataDiskCachingMode = "ReadWrite" +) + +// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. +type AzureDiskVolumeSource struct { + // The Name of the data disk in the blob storage + DiskName string `json:"diskName" protobuf:"bytes,1,opt,name=diskName"` + // The URI the data disk in the blob storage + DataDiskURI string `json:"diskURI" protobuf:"bytes,2,opt,name=diskURI"` + // Host Caching mode: None, Read Only, Read Write. + CachingMode *AzureDataDiskCachingMode `json:"cachingMode,omitempty" protobuf:"bytes,3,opt,name=cachingMode,casttype=AzureDataDiskCachingMode"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + FSType *string `json:"fsType,omitempty" protobuf:"bytes,4,opt,name=fsType"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly *bool `json:"readOnly,omitempty" protobuf:"varint,5,opt,name=readOnly"` +} + +// Adapts a ConfigMap into a volume. +// +// The contents of the target ConfigMap's Data field will be presented in a +// volume as files using the keys in the Data field as the file names, unless +// the items element is populated with specific mappings of keys to paths. +// ConfigMap volumes support ownership management and SELinux relabeling. +type ConfigMapVolumeSource struct { + LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` + // If unspecified, each key-value pair in the Data field of the referenced + // ConfigMap will be projected into the volume as a file whose name is the + // key and content is the value. If specified, the listed keys will be + // projected into the specified paths, and unlisted keys will not be + // present. If a key is specified which is not present in the ConfigMap, + // the volume setup will error. Paths must be relative and may not contain + // the '..' path or start with '..'. + Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"varint,3,opt,name=defaultMode"` +} + +const ( + ConfigMapVolumeSourceDefaultMode int32 = 0644 +) + +// Maps a string key to a path within a volume. +type KeyToPath struct { + // The key to project. + Key string `json:"key" protobuf:"bytes,1,opt,name=key"` + + // The relative path of the file to map the key to. + // May not be an absolute path. + // May not contain the path element '..'. + // May not start with the string '..'. + Path string `json:"path" protobuf:"bytes,2,opt,name=path"` + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty" protobuf:"varint,3,opt,name=mode"` +} + +// ContainerPort represents a network port in a single container. +type ContainerPort struct { + // If specified, this must be an IANA_SVC_NAME and unique within the pod. Each + // named port in a pod must have a unique name. Name for the port that can be + // referred to by services. + Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + // Number of port to expose on the host. + // If specified, this must be a valid port number, 0 < x < 65536. + // If HostNetwork is specified, this must match ContainerPort. + // Most containers do not need this. + HostPort int32 `json:"hostPort,omitempty" protobuf:"varint,2,opt,name=hostPort"` + // Number of port to expose on the pod's IP address. + // This must be a valid port number, 0 < x < 65536. + ContainerPort int32 `json:"containerPort" protobuf:"varint,3,opt,name=containerPort"` + // Protocol for port. Must be UDP or TCP. + // Defaults to "TCP". + Protocol Protocol `json:"protocol,omitempty" protobuf:"bytes,4,opt,name=protocol,casttype=Protocol"` + // What host IP to bind the external port to. + HostIP string `json:"hostIP,omitempty" protobuf:"bytes,5,opt,name=hostIP"` +} + +// VolumeMount describes a mounting of a Volume within a container. +type VolumeMount struct { + // This must match the Name of a Volume. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Mounted read-only if true, read-write otherwise (false or unspecified). + // Defaults to false. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,2,opt,name=readOnly"` + // Path within the container at which the volume should be mounted. Must + // not contain ':'. + MountPath string `json:"mountPath" protobuf:"bytes,3,opt,name=mountPath"` + // Path within the volume from which the container's volume should be mounted. + // Defaults to "" (volume's root). + SubPath string `json:"subPath,omitempty" protobuf:"bytes,4,opt,name=subPath"` +} + +// EnvVar represents an environment variable present in a Container. +type EnvVar struct { + // Name of the environment variable. Must be a C_IDENTIFIER. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + + // Optional: no more than one of the following may be specified. + + // Variable references $(VAR_NAME) are expanded + // using the previous defined environment variables in the container and + // any service environment variables. If a variable cannot be resolved, + // the reference in the input string will be unchanged. The $(VAR_NAME) + // syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped + // references will never be expanded, regardless of whether the variable + // exists or not. + // Defaults to "". + Value string `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"` + // Source for the environment variable's value. Cannot be used if value is not empty. + ValueFrom *EnvVarSource `json:"valueFrom,omitempty" protobuf:"bytes,3,opt,name=valueFrom"` +} + +// EnvVarSource represents a source for the value of an EnvVar. +type EnvVarSource struct { + // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, + // spec.nodeName, spec.serviceAccountName, status.podIP. + FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty" protobuf:"bytes,1,opt,name=fieldRef"` + // Selects a resource of the container: only resources limits and requests + // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. + ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty" protobuf:"bytes,2,opt,name=resourceFieldRef"` + // Selects a key of a ConfigMap. + ConfigMapKeyRef *ConfigMapKeySelector `json:"configMapKeyRef,omitempty" protobuf:"bytes,3,opt,name=configMapKeyRef"` + // Selects a key of a secret in the pod's namespace + SecretKeyRef *SecretKeySelector `json:"secretKeyRef,omitempty" protobuf:"bytes,4,opt,name=secretKeyRef"` +} + +// ObjectFieldSelector selects an APIVersioned field of an object. +type ObjectFieldSelector struct { + // Version of the schema the FieldPath is written in terms of, defaults to "v1". + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,1,opt,name=apiVersion"` + // Path of the field to select in the specified API version. + FieldPath string `json:"fieldPath" protobuf:"bytes,2,opt,name=fieldPath"` +} + +// ResourceFieldSelector represents container resources (cpu, memory) and their output format +type ResourceFieldSelector struct { + // Container name: required for volumes, optional for env vars + ContainerName string `json:"containerName,omitempty" protobuf:"bytes,1,opt,name=containerName"` + // Required: resource to select + Resource string `json:"resource" protobuf:"bytes,2,opt,name=resource"` + // Specifies the output format of the exposed resources, defaults to "1" + Divisor resource.Quantity `json:"divisor,omitempty" protobuf:"bytes,3,opt,name=divisor"` +} + +// Selects a key from a ConfigMap. +type ConfigMapKeySelector struct { + // The ConfigMap to select from. + LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` + // The key to select. + Key string `json:"key" protobuf:"bytes,2,opt,name=key"` +} + +// SecretKeySelector selects a key of a Secret. +type SecretKeySelector struct { + // The name of the secret in the pod's namespace to select from. + LocalObjectReference `json:",inline" protobuf:"bytes,1,opt,name=localObjectReference"` + // The key of the secret to select from. Must be a valid secret key. + Key string `json:"key" protobuf:"bytes,2,opt,name=key"` +} + +// HTTPHeader describes a custom header to be used in HTTP probes +type HTTPHeader struct { + // The header field name + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // The header field value + Value string `json:"value" protobuf:"bytes,2,opt,name=value"` +} + +// HTTPGetAction describes an action based on HTTP Get requests. +type HTTPGetAction struct { + // Path to access on the HTTP server. + Path string `json:"path,omitempty" protobuf:"bytes,1,opt,name=path"` + // Name or number of the port to access on the container. + // Number must be in the range 1 to 65535. + // Name must be an IANA_SVC_NAME. + Port intstr.IntOrString `json:"port" protobuf:"bytes,2,opt,name=port"` + // Host name to connect to, defaults to the pod IP. You probably want to set + // "Host" in httpHeaders instead. + Host string `json:"host,omitempty" protobuf:"bytes,3,opt,name=host"` + // Scheme to use for connecting to the host. + // Defaults to HTTP. + Scheme URIScheme `json:"scheme,omitempty" protobuf:"bytes,4,opt,name=scheme,casttype=URIScheme"` + // Custom headers to set in the request. HTTP allows repeated headers. + HTTPHeaders []HTTPHeader `json:"httpHeaders,omitempty" protobuf:"bytes,5,rep,name=httpHeaders"` +} + +// URIScheme identifies the scheme used for connection to a host for Get actions +type URIScheme string + +const ( + // URISchemeHTTP means that the scheme used will be http:// + URISchemeHTTP URIScheme = "HTTP" + // URISchemeHTTPS means that the scheme used will be https:// + URISchemeHTTPS URIScheme = "HTTPS" +) + +// TCPSocketAction describes an action based on opening a socket +type TCPSocketAction struct { + // Number or name of the port to access on the container. + // Number must be in the range 1 to 65535. + // Name must be an IANA_SVC_NAME. + Port intstr.IntOrString `json:"port" protobuf:"bytes,1,opt,name=port"` +} + +// ExecAction describes a "run in container" action. +type ExecAction struct { + // Command is the command line to execute inside the container, the working directory for the + // command is root ('/') in the container's filesystem. The command is simply exec'd, it is + // not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use + // a shell, you need to explicitly call out to that shell. + // Exit status of 0 is treated as live/healthy and non-zero is unhealthy. + Command []string `json:"command,omitempty" protobuf:"bytes,1,rep,name=command"` +} + +// Probe describes a health check to be performed against a container to determine whether it is +// alive or ready to receive traffic. +type Probe struct { + // The action taken to determine the health of a container + Handler `json:",inline" protobuf:"bytes,1,opt,name=handler"` + // Number of seconds after the container has started before liveness probes are initiated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes + InitialDelaySeconds int32 `json:"initialDelaySeconds,omitempty" protobuf:"varint,2,opt,name=initialDelaySeconds"` + // Number of seconds after which the probe times out. + // Defaults to 1 second. Minimum value is 1. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes + TimeoutSeconds int32 `json:"timeoutSeconds,omitempty" protobuf:"varint,3,opt,name=timeoutSeconds"` + // How often (in seconds) to perform the probe. + // Default to 10 seconds. Minimum value is 1. + PeriodSeconds int32 `json:"periodSeconds,omitempty" protobuf:"varint,4,opt,name=periodSeconds"` + // Minimum consecutive successes for the probe to be considered successful after having failed. + // Defaults to 1. Must be 1 for liveness. Minimum value is 1. + SuccessThreshold int32 `json:"successThreshold,omitempty" protobuf:"varint,5,opt,name=successThreshold"` + // Minimum consecutive failures for the probe to be considered failed after having succeeded. + // Defaults to 3. Minimum value is 1. + FailureThreshold int32 `json:"failureThreshold,omitempty" protobuf:"varint,6,opt,name=failureThreshold"` +} + +// PullPolicy describes a policy for if/when to pull a container image +type PullPolicy string + +const ( + // PullAlways means that kubelet always attempts to pull the latest image. Container will fail If the pull fails. + PullAlways PullPolicy = "Always" + // PullNever means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present + PullNever PullPolicy = "Never" + // PullIfNotPresent means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails. + PullIfNotPresent PullPolicy = "IfNotPresent" +) + +// Capability represent POSIX capabilities type +type Capability string + +// Adds and removes POSIX capabilities from running containers. +type Capabilities struct { + // Added capabilities + Add []Capability `json:"add,omitempty" protobuf:"bytes,1,rep,name=add,casttype=Capability"` + // Removed capabilities + Drop []Capability `json:"drop,omitempty" protobuf:"bytes,2,rep,name=drop,casttype=Capability"` +} + +// ResourceRequirements describes the compute resource requirements. +type ResourceRequirements struct { + // Limits describes the maximum amount of compute resources allowed. + // More info: http://kubernetes.io/docs/user-guide/compute-resources/ + Limits ResourceList `json:"limits,omitempty" protobuf:"bytes,1,rep,name=limits,casttype=ResourceList,castkey=ResourceName"` + // Requests describes the minimum amount of compute resources required. + // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + // otherwise to an implementation-defined value. + // More info: http://kubernetes.io/docs/user-guide/compute-resources/ + Requests ResourceList `json:"requests,omitempty" protobuf:"bytes,2,rep,name=requests,casttype=ResourceList,castkey=ResourceName"` +} + +const ( + // TerminationMessagePathDefault means the default path to capture the application termination message running in a container + TerminationMessagePathDefault string = "/dev/termination-log" +) + +// A single application container that you want to run within a pod. +type Container struct { + // Name of the container specified as a DNS_LABEL. + // Each container in a pod must have a unique name (DNS_LABEL). + // Cannot be updated. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Docker image name. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md + Image string `json:"image,omitempty" protobuf:"bytes,2,opt,name=image"` + // Entrypoint array. Not executed within a shell. + // The docker image's ENTRYPOINT is used if this is not provided. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands + Command []string `json:"command,omitempty" protobuf:"bytes,3,rep,name=command"` + // Arguments to the entrypoint. + // The docker image's CMD is used if this is not provided. + // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable + // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax + // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, + // regardless of whether the variable exists or not. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands + Args []string `json:"args,omitempty" protobuf:"bytes,4,rep,name=args"` + // Container's working directory. + // If not specified, the container runtime's default will be used, which + // might be configured in the container image. + // Cannot be updated. + WorkingDir string `json:"workingDir,omitempty" protobuf:"bytes,5,opt,name=workingDir"` + // List of ports to expose from the container. Exposing a port here gives + // the system additional information about the network connections a + // container uses, but is primarily informational. Not specifying a port here + // DOES NOT prevent that port from being exposed. Any port which is + // listening on the default "0.0.0.0" address inside a container will be + // accessible from the network. + // Cannot be updated. + Ports []ContainerPort `json:"ports,omitempty" patchStrategy:"merge" patchMergeKey:"containerPort" protobuf:"bytes,6,rep,name=ports"` + // List of environment variables to set in the container. + // Cannot be updated. + Env []EnvVar `json:"env,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=env"` + // Compute Resources required by this container. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources + Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,8,opt,name=resources"` + // Pod volumes to mount into the container's filesystem. + // Cannot be updated. + VolumeMounts []VolumeMount `json:"volumeMounts,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,9,rep,name=volumeMounts"` + // Periodic probe of container liveness. + // Container will be restarted if the probe fails. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes + LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,10,opt,name=livenessProbe"` + // Periodic probe of container service readiness. + // Container will be removed from service endpoints if the probe fails. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes + ReadinessProbe *Probe `json:"readinessProbe,omitempty" protobuf:"bytes,11,opt,name=readinessProbe"` + // Actions that the management system should take in response to container lifecycle events. + // Cannot be updated. + Lifecycle *Lifecycle `json:"lifecycle,omitempty" protobuf:"bytes,12,opt,name=lifecycle"` + // Optional: Path at which the file to which the container's termination message + // will be written is mounted into the container's filesystem. + // Message written is intended to be brief final status, such as an assertion failure message. + // Defaults to /dev/termination-log. + // Cannot be updated. + TerminationMessagePath string `json:"terminationMessagePath,omitempty" protobuf:"bytes,13,opt,name=terminationMessagePath"` + // Image pull policy. + // One of Always, Never, IfNotPresent. + // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#updating-images + ImagePullPolicy PullPolicy `json:"imagePullPolicy,omitempty" protobuf:"bytes,14,opt,name=imagePullPolicy,casttype=PullPolicy"` + // Security options the pod should run with. + // More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md + SecurityContext *SecurityContext `json:"securityContext,omitempty" protobuf:"bytes,15,opt,name=securityContext"` + + // Variables for interactive containers, these have very specialized use-cases (e.g. debugging) + // and shouldn't be used for general purpose containers. + + // Whether this container should allocate a buffer for stdin in the container runtime. If this + // is not set, reads from stdin in the container will always result in EOF. + // Default is false. + Stdin bool `json:"stdin,omitempty" protobuf:"varint,16,opt,name=stdin"` + // Whether the container runtime should close the stdin channel after it has been opened by + // a single attach. When stdin is true the stdin stream will remain open across multiple attach + // sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the + // first client attaches to stdin, and then remains open and accepts data until the client disconnects, + // at which time stdin is closed and remains closed until the container is restarted. If this + // flag is false, a container processes that reads from stdin will never receive an EOF. + // Default is false + StdinOnce bool `json:"stdinOnce,omitempty" protobuf:"varint,17,opt,name=stdinOnce"` + // Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. + // Default is false. + TTY bool `json:"tty,omitempty" protobuf:"varint,18,opt,name=tty"` +} + +// Handler defines a specific action that should be taken +// TODO: pass structured data to these actions, and document that data here. +type Handler struct { + // One and only one of the following should be specified. + // Exec specifies the action to take. + Exec *ExecAction `json:"exec,omitempty" protobuf:"bytes,1,opt,name=exec"` + // HTTPGet specifies the http request to perform. + HTTPGet *HTTPGetAction `json:"httpGet,omitempty" protobuf:"bytes,2,opt,name=httpGet"` + // TCPSocket specifies an action involving a TCP port. + // TCP hooks not yet supported + // TODO: implement a realistic TCP lifecycle hook + TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty" protobuf:"bytes,3,opt,name=tcpSocket"` +} + +// Lifecycle describes actions that the management system should take in response to container lifecycle +// events. For the PostStart and PreStop lifecycle handlers, management of the container blocks +// until the action is complete, unless the container process fails, in which case the handler is aborted. +type Lifecycle struct { + // PostStart is called immediately after a container is created. If the handler fails, + // the container is terminated and restarted according to its restart policy. + // Other management of the container blocks until the hook completes. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details + PostStart *Handler `json:"postStart,omitempty" protobuf:"bytes,1,opt,name=postStart"` + // PreStop is called immediately before a container is terminated. + // The container is terminated after the handler completes. + // The reason for termination is passed to the handler. + // Regardless of the outcome of the handler, the container is eventually terminated. + // Other management of the container blocks until the hook completes. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details + PreStop *Handler `json:"preStop,omitempty" protobuf:"bytes,2,opt,name=preStop"` +} + +type ConditionStatus string + +// These are valid condition statuses. "ConditionTrue" means a resource is in the condition. +// "ConditionFalse" means a resource is not in the condition. "ConditionUnknown" means kubernetes +// can't decide if a resource is in the condition or not. In the future, we could add other +// intermediate conditions, e.g. ConditionDegraded. +const ( + ConditionTrue ConditionStatus = "True" + ConditionFalse ConditionStatus = "False" + ConditionUnknown ConditionStatus = "Unknown" +) + +// ContainerStateWaiting is a waiting state of a container. +type ContainerStateWaiting struct { + // (brief) reason the container is not yet running. + Reason string `json:"reason,omitempty" protobuf:"bytes,1,opt,name=reason"` + // Message regarding why the container is not yet running. + Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` +} + +// ContainerStateRunning is a running state of a container. +type ContainerStateRunning struct { + // Time at which the container was last (re-)started + StartedAt unversioned.Time `json:"startedAt,omitempty" protobuf:"bytes,1,opt,name=startedAt"` +} + +// ContainerStateTerminated is a terminated state of a container. +type ContainerStateTerminated struct { + // Exit status from the last termination of the container + ExitCode int32 `json:"exitCode" protobuf:"varint,1,opt,name=exitCode"` + // Signal from the last termination of the container + Signal int32 `json:"signal,omitempty" protobuf:"varint,2,opt,name=signal"` + // (brief) reason from the last termination of the container + Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` + // Message regarding the last termination of the container + Message string `json:"message,omitempty" protobuf:"bytes,4,opt,name=message"` + // Time at which previous execution of the container started + StartedAt unversioned.Time `json:"startedAt,omitempty" protobuf:"bytes,5,opt,name=startedAt"` + // Time at which the container last terminated + FinishedAt unversioned.Time `json:"finishedAt,omitempty" protobuf:"bytes,6,opt,name=finishedAt"` + // Container's ID in the format 'docker://' + ContainerID string `json:"containerID,omitempty" protobuf:"bytes,7,opt,name=containerID"` +} + +// ContainerState holds a possible state of container. +// Only one of its members may be specified. +// If none of them is specified, the default one is ContainerStateWaiting. +type ContainerState struct { + // Details about a waiting container + Waiting *ContainerStateWaiting `json:"waiting,omitempty" protobuf:"bytes,1,opt,name=waiting"` + // Details about a running container + Running *ContainerStateRunning `json:"running,omitempty" protobuf:"bytes,2,opt,name=running"` + // Details about a terminated container + Terminated *ContainerStateTerminated `json:"terminated,omitempty" protobuf:"bytes,3,opt,name=terminated"` +} + +// ContainerStatus contains details for the current status of this container. +type ContainerStatus struct { + // This must be a DNS_LABEL. Each container in a pod must have a unique name. + // Cannot be updated. + Name string `json:"name" protobuf:"bytes,1,opt,name=name"` + // Details about the container's current condition. + State ContainerState `json:"state,omitempty" protobuf:"bytes,2,opt,name=state"` + // Details about the container's last termination condition. + LastTerminationState ContainerState `json:"lastState,omitempty" protobuf:"bytes,3,opt,name=lastState"` + // Specifies whether the container has passed its readiness probe. + Ready bool `json:"ready" protobuf:"varint,4,opt,name=ready"` + // The number of times the container has been restarted, currently based on + // the number of dead containers that have not yet been removed. + // Note that this is calculated from dead containers. But those containers are subject to + // garbage collection. This value will get capped at 5 by GC. + RestartCount int32 `json:"restartCount" protobuf:"varint,5,opt,name=restartCount"` + // The image the container is running. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md + // TODO(dchen1107): Which image the container is running with? + Image string `json:"image" protobuf:"bytes,6,opt,name=image"` + // ImageID of the container's image. + ImageID string `json:"imageID" protobuf:"bytes,7,opt,name=imageID"` + // Container's ID in the format 'docker://'. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#container-information + ContainerID string `json:"containerID,omitempty" protobuf:"bytes,8,opt,name=containerID"` +} + +// PodPhase is a label for the condition of a pod at the current time. +type PodPhase string + +// These are the valid statuses of pods. +const ( + // PodPending means the pod has been accepted by the system, but one or more of the containers + // has not been started. This includes time before being bound to a node, as well as time spent + // pulling images onto the host. + PodPending PodPhase = "Pending" + // PodRunning means the pod has been bound to a node and all of the containers have been started. + // At least one container is still running or is in the process of being restarted. + PodRunning PodPhase = "Running" + // PodSucceeded means that all containers in the pod have voluntarily terminated + // with a container exit code of 0, and the system is not going to restart any of these containers. + PodSucceeded PodPhase = "Succeeded" + // PodFailed means that all containers in the pod have terminated, and at least one container has + // terminated in a failure (exited with a non-zero exit code or was stopped by the system). + PodFailed PodPhase = "Failed" + // PodUnknown means that for some reason the state of the pod could not be obtained, typically due + // to an error in communicating with the host of the pod. + PodUnknown PodPhase = "Unknown" +) + +// PodConditionType is a valid value for PodCondition.Type +type PodConditionType string + +// These are valid conditions of pod. +const ( + // PodScheduled represents status of the scheduling process for this pod. + PodScheduled PodConditionType = "PodScheduled" + // PodReady means the pod is able to service requests and should be added to the + // load balancing pools of all matching services. + PodReady PodConditionType = "Ready" +) + +// PodCondition contains details for the current condition of this pod. +type PodCondition struct { + // Type is the type of the condition. + // Currently only Ready. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions + Type PodConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=PodConditionType"` + // Status is the status of the condition. + // Can be True, False, Unknown. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions + Status ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=ConditionStatus"` + // Last time we probed the condition. + LastProbeTime unversioned.Time `json:"lastProbeTime,omitempty" protobuf:"bytes,3,opt,name=lastProbeTime"` + // Last time the condition transitioned from one status to another. + LastTransitionTime unversioned.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"` + // Unique, one-word, CamelCase reason for the condition's last transition. + Reason string `json:"reason,omitempty" protobuf:"bytes,5,opt,name=reason"` + // Human-readable message indicating details about last transition. + Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"` +} + +// RestartPolicy describes how the container should be restarted. +// Only one of the following restart policies may be specified. +// If none of the following policies is specified, the default one +// is RestartPolicyAlways. +type RestartPolicy string + +const ( + RestartPolicyAlways RestartPolicy = "Always" + RestartPolicyOnFailure RestartPolicy = "OnFailure" + RestartPolicyNever RestartPolicy = "Never" +) + +// DNSPolicy defines how a pod's DNS will be configured. +type DNSPolicy string + +const ( + // DNSClusterFirst indicates that the pod should use cluster DNS + // first, if it is available, then fall back on the default (as + // determined by kubelet) DNS settings. + DNSClusterFirst DNSPolicy = "ClusterFirst" + + // DNSDefault indicates that the pod should use the default (as + // determined by kubelet) DNS settings. + DNSDefault DNSPolicy = "Default" + + DefaultTerminationGracePeriodSeconds = 30 +) + +// A node selector represents the union of the results of one or more label queries +// over a set of nodes; that is, it represents the OR of the selectors represented +// by the node selector terms. +type NodeSelector struct { + //Required. A list of node selector terms. The terms are ORed. + NodeSelectorTerms []NodeSelectorTerm `json:"nodeSelectorTerms" protobuf:"bytes,1,rep,name=nodeSelectorTerms"` +} + +// A null or empty node selector term matches no objects. +type NodeSelectorTerm struct { + //Required. A list of node selector requirements. The requirements are ANDed. + MatchExpressions []NodeSelectorRequirement `json:"matchExpressions" protobuf:"bytes,1,rep,name=matchExpressions"` +} + +// A node selector requirement is a selector that contains values, a key, and an operator +// that relates the key and values. +type NodeSelectorRequirement struct { + // The label key that the selector applies to. + Key string `json:"key" patchStrategy:"merge" patchMergeKey:"key" protobuf:"bytes,1,opt,name=key"` + // Represents a key's relationship to a set of values. + // Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. + Operator NodeSelectorOperator `json:"operator" protobuf:"bytes,2,opt,name=operator,casttype=NodeSelectorOperator"` + // An array of string values. If the operator is In or NotIn, + // the values array must be non-empty. If the operator is Exists or DoesNotExist, + // the values array must be empty. If the operator is Gt or Lt, the values + // array must have a single element, which will be interpreted as an integer. + // This array is replaced during a strategic merge patch. + Values []string `json:"values,omitempty" protobuf:"bytes,3,rep,name=values"` +} + +// A node selector operator is the set of operators that can be used in +// a node selector requirement. +type NodeSelectorOperator string + +const ( + NodeSelectorOpIn NodeSelectorOperator = "In" + NodeSelectorOpNotIn NodeSelectorOperator = "NotIn" + NodeSelectorOpExists NodeSelectorOperator = "Exists" + NodeSelectorOpDoesNotExist NodeSelectorOperator = "DoesNotExist" + NodeSelectorOpGt NodeSelectorOperator = "Gt" + NodeSelectorOpLt NodeSelectorOperator = "Lt" +) + +// Affinity is a group of affinity scheduling rules. +type Affinity struct { + // Describes node affinity scheduling rules for the pod. + NodeAffinity *NodeAffinity `json:"nodeAffinity,omitempty" protobuf:"bytes,1,opt,name=nodeAffinity"` + // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). + PodAffinity *PodAffinity `json:"podAffinity,omitempty" protobuf:"bytes,2,opt,name=podAffinity"` + // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). + PodAntiAffinity *PodAntiAffinity `json:"podAntiAffinity,omitempty" protobuf:"bytes,3,opt,name=podAntiAffinity"` +} + +// Pod affinity is a group of inter pod affinity scheduling rules. +type PodAffinity struct { + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system will try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system may or may not try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + RequiredDuringSchedulingIgnoredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,1,rep,name=requiredDuringSchedulingIgnoredDuringExecution"` + // The scheduler will prefer to schedule pods to nodes that satisfy + // the affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the + // node(s) with the highest sum are the most preferred. + PreferredDuringSchedulingIgnoredDuringExecution []WeightedPodAffinityTerm `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,2,rep,name=preferredDuringSchedulingIgnoredDuringExecution"` +} + +// Pod anti affinity is a group of inter pod anti affinity scheduling rules. +type PodAntiAffinity struct { + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // If the anti-affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the anti-affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system will try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` + // If the anti-affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the anti-affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to a pod label update), the + // system may or may not try to eventually evict the pod from its node. + // When there are multiple elements, the lists of nodes corresponding to each + // podAffinityTerm are intersected, i.e. all terms must be satisfied. + RequiredDuringSchedulingIgnoredDuringExecution []PodAffinityTerm `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,1,rep,name=requiredDuringSchedulingIgnoredDuringExecution"` + // The scheduler will prefer to schedule pods to nodes that satisfy + // the anti-affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling anti-affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the + // node(s) with the highest sum are the most preferred. + PreferredDuringSchedulingIgnoredDuringExecution []WeightedPodAffinityTerm `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,2,rep,name=preferredDuringSchedulingIgnoredDuringExecution"` +} + +// The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s) +type WeightedPodAffinityTerm struct { + // weight associated with matching the corresponding podAffinityTerm, + // in the range 1-100. + Weight int32 `json:"weight" protobuf:"varint,1,opt,name=weight"` + // Required. A pod affinity term, associated with the corresponding weight. + PodAffinityTerm PodAffinityTerm `json:"podAffinityTerm" protobuf:"bytes,2,opt,name=podAffinityTerm"` +} + +// Defines a set of pods (namely those matching the labelSelector +// relative to the given namespace(s)) that this pod should be +// co-located (affinity) or not co-located (anti-affinity) with, +// where co-located is defined as running on a node whose value of +// the label with key tches that of any node on which +// a pod of the set of pods is running +type PodAffinityTerm struct { + // A label query over a set of resources, in this case pods. + LabelSelector *unversioned.LabelSelector `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"` + // namespaces specifies which namespaces the labelSelector applies to (matches against); + // nil list means "this pod's namespace," empty list means "all namespaces" + // The json tag here is not "omitempty" since we need to distinguish nil and empty. + // See https://golang.org/pkg/encoding/json/#Marshal for more details. + Namespaces []string `json:"namespaces" protobuf:"bytes,2,rep,name=namespaces"` + // This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching + // the labelSelector in the specified namespaces, where co-located is defined as running on a node + // whose value of the label with key topologyKey matches that of any node on which any of the + // selected pods is running. + // For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as "all topologies" + // ("all topologies" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); + // for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed. + TopologyKey string `json:"topologyKey,omitempty" protobuf:"bytes,3,opt,name=topologyKey"` +} + +// Node affinity is a group of node affinity scheduling rules. +type NodeAffinity struct { + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to an update), the system + // will try to eventually evict the pod from its node. + // RequiredDuringSchedulingRequiredDuringExecution *NodeSelector `json:"requiredDuringSchedulingRequiredDuringExecution,omitempty"` + + // If the affinity requirements specified by this field are not met at + // scheduling time, the pod will not be scheduled onto the node. + // If the affinity requirements specified by this field cease to be met + // at some point during pod execution (e.g. due to an update), the system + // may or may not try to eventually evict the pod from its node. + RequiredDuringSchedulingIgnoredDuringExecution *NodeSelector `json:"requiredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,1,opt,name=requiredDuringSchedulingIgnoredDuringExecution"` + // The scheduler will prefer to schedule pods to nodes that satisfy + // the affinity expressions specified by this field, but it may choose + // a node that violates one or more of the expressions. The node that is + // most preferred is the one with the greatest sum of weights, i.e. + // for each node that meets all of the scheduling requirements (resource + // request, requiredDuringScheduling affinity expressions, etc.), + // compute a sum by iterating through the elements of this field and adding + // "weight" to the sum if the node matches the corresponding matchExpressions; the + // node(s) with the highest sum are the most preferred. + PreferredDuringSchedulingIgnoredDuringExecution []PreferredSchedulingTerm `json:"preferredDuringSchedulingIgnoredDuringExecution,omitempty" protobuf:"bytes,2,rep,name=preferredDuringSchedulingIgnoredDuringExecution"` +} + +// An empty preferred scheduling term matches all objects with implicit weight 0 +// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). +type PreferredSchedulingTerm struct { + // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. + Weight int32 `json:"weight" protobuf:"varint,1,opt,name=weight"` + // A node selector term, associated with the corresponding weight. + Preference NodeSelectorTerm `json:"preference" protobuf:"bytes,2,opt,name=preference"` +} + +// The node this Taint is attached to has the effect "effect" on +// any pod that that does not tolerate the Taint. +type Taint struct { + // Required. The taint key to be applied to a node. + Key string `json:"key" patchStrategy:"merge" patchMergeKey:"key" protobuf:"bytes,1,opt,name=key"` + // Required. The taint value corresponding to the taint key. + Value string `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"` + // Required. The effect of the taint on pods + // that do not tolerate the taint. + // Valid effects are NoSchedule and PreferNoSchedule. + Effect TaintEffect `json:"effect" protobuf:"bytes,3,opt,name=effect,casttype=TaintEffect"` +} + +type TaintEffect string + +const ( + // Do not allow new pods to schedule onto the node unless they tolerate the taint, + // but allow all pods submitted to Kubelet without going through the scheduler + // to start, and allow all already-running pods to continue running. + // Enforced by the scheduler. + TaintEffectNoSchedule TaintEffect = "NoSchedule" + // Like TaintEffectNoSchedule, but the scheduler tries not to schedule + // new pods onto the node, rather than prohibiting new pods from scheduling + // onto the node entirely. Enforced by the scheduler. + TaintEffectPreferNoSchedule TaintEffect = "PreferNoSchedule" + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // Do not allow new pods to schedule onto the node unless they tolerate the taint, + // do not allow pods to start on Kubelet unless they tolerate the taint, + // but allow all already-running pods to continue running. + // Enforced by the scheduler and Kubelet. + // TaintEffectNoScheduleNoAdmit TaintEffect = "NoScheduleNoAdmit" + // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. + // Do not allow new pods to schedule onto the node unless they tolerate the taint, + // do not allow pods to start on Kubelet unless they tolerate the taint, + // and evict any already-running pods that do not tolerate the taint. + // Enforced by the scheduler and Kubelet. + // TaintEffectNoScheduleNoAdmitNoExecute = "NoScheduleNoAdmitNoExecute" +) + +// The pod this Toleration is attached to tolerates any taint that matches +// the triple using the matching operator . +type Toleration struct { + // Required. Key is the taint key that the toleration applies to. + Key string `json:"key,omitempty" patchStrategy:"merge" patchMergeKey:"key" protobuf:"bytes,1,opt,name=key"` + // operator represents a key's relationship to the value. + // Valid operators are Exists and Equal. Defaults to Equal. + // Exists is equivalent to wildcard for value, so that a pod can + // tolerate all taints of a particular category. + Operator TolerationOperator `json:"operator,omitempty" protobuf:"bytes,2,opt,name=operator,casttype=TolerationOperator"` + // Value is the taint value the toleration matches to. + // If the operator is Exists, the value should be empty, otherwise just a regular string. + Value string `json:"value,omitempty" protobuf:"bytes,3,opt,name=value"` + // Effect indicates the taint effect to match. Empty means match all taint effects. + // When specified, allowed values are NoSchedule and PreferNoSchedule. + Effect TaintEffect `json:"effect,omitempty" protobuf:"bytes,4,opt,name=effect,casttype=TaintEffect"` + // TODO: For forgiveness (#1574), we'd eventually add at least a grace period + // here, and possibly an occurrence threshold and period. +} + +// A toleration operator is the set of operators that can be used in a toleration. +type TolerationOperator string + +const ( + TolerationOpExists TolerationOperator = "Exists" + TolerationOpEqual TolerationOperator = "Equal" +) + +const ( + // This annotation key will be used to contain an array of v1 JSON encoded Containers + // for init containers. The annotation will be placed into the internal type and cleared. + // This key is only recognized by version >= 1.4. + PodInitContainersBetaAnnotationKey = "pod.beta.kubernetes.io/init-containers" + // This annotation key will be used to contain an array of v1 JSON encoded Containers + // for init containers. The annotation will be placed into the internal type and cleared. + // This key is recognized by version >= 1.3. For version 1.4 code, this key + // will have its value copied to the beta key. + PodInitContainersAnnotationKey = "pod.alpha.kubernetes.io/init-containers" + // This annotation key will be used to contain an array of v1 JSON encoded + // ContainerStatuses for init containers. The annotation will be placed into the internal + // type and cleared. This key is only recognized by version >= 1.4. + PodInitContainerStatusesBetaAnnotationKey = "pod.beta.kubernetes.io/init-container-statuses" + // This annotation key will be used to contain an array of v1 JSON encoded + // ContainerStatuses for init containers. The annotation will be placed into the internal + // type and cleared. This key is recognized by version >= 1.3. For version 1.4 code, + // this key will have its value copied to the beta key. + PodInitContainerStatusesAnnotationKey = "pod.alpha.kubernetes.io/init-container-statuses" +) + +// PodSpec is a description of a pod. +type PodSpec struct { + // List of volumes that can be mounted by containers belonging to the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md + Volumes []Volume `json:"volumes,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,1,rep,name=volumes"` + // List of initialization containers belonging to the pod. + // Init containers are executed in order prior to containers being started. If any + // init container fails, the pod is considered to have failed and is handled according + // to its restartPolicy. The name for an init container or normal container must be + // unique among all containers. + // Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. + // The resourceRequirements of an init container are taken into account during scheduling + // by finding the highest request/limit for each resource type, and then using the max of + // of that value or the sum of the normal containers. Limits are applied to init containers + // in a similar fashion. + // Init containers cannot currently be added or removed. + // Init containers are in alpha state and may change without notice. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md + InitContainers []Container `json:"-" patchStrategy:"merge" patchMergeKey:"name"` + // List of containers belonging to the pod. + // Containers cannot currently be added or removed. + // There must be at least one container in a Pod. + // Cannot be updated. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md + Containers []Container `json:"containers" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=containers"` + // Restart policy for all containers within the pod. + // One of Always, OnFailure, Never. + // Default to Always. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#restartpolicy + RestartPolicy RestartPolicy `json:"restartPolicy,omitempty" protobuf:"bytes,3,opt,name=restartPolicy,casttype=RestartPolicy"` + // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. + // Value must be non-negative integer. The value zero indicates delete immediately. + // If this value is nil, the default grace period will be used instead. + // The grace period is the duration in seconds after the processes running in the pod are sent + // a termination signal and the time when the processes are forcibly halted with a kill signal. + // Set this value longer than the expected cleanup time for your process. + // Defaults to 30 seconds. + TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty" protobuf:"varint,4,opt,name=terminationGracePeriodSeconds"` + // Optional duration in seconds the pod may be active on the node relative to + // StartTime before the system will actively try to mark it failed and kill associated containers. + // Value must be a positive integer. + ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty" protobuf:"varint,5,opt,name=activeDeadlineSeconds"` + // Set DNS policy for containers within the pod. + // One of 'ClusterFirst' or 'Default'. + // Defaults to "ClusterFirst". + DNSPolicy DNSPolicy `json:"dnsPolicy,omitempty" protobuf:"bytes,6,opt,name=dnsPolicy,casttype=DNSPolicy"` + // NodeSelector is a selector which must be true for the pod to fit on a node. + // Selector which must match a node's labels for the pod to be scheduled on that node. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/node-selection/README.md + NodeSelector map[string]string `json:"nodeSelector,omitempty" protobuf:"bytes,7,rep,name=nodeSelector"` + + // ServiceAccountName is the name of the ServiceAccount to use to run this pod. + // More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md + ServiceAccountName string `json:"serviceAccountName,omitempty" protobuf:"bytes,8,opt,name=serviceAccountName"` + // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. + // Deprecated: Use serviceAccountName instead. + // +k8s:conversion-gen=false + DeprecatedServiceAccount string `json:"serviceAccount,omitempty" protobuf:"bytes,9,opt,name=serviceAccount"` + + // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, + // the scheduler simply schedules this pod onto that node, assuming that it fits resource + // requirements. + NodeName string `json:"nodeName,omitempty" protobuf:"bytes,10,opt,name=nodeName"` + // Host networking requested for this pod. Use the host's network namespace. + // If this option is set, the ports that will be used must be specified. + // Default to false. + // +k8s:conversion-gen=false + HostNetwork bool `json:"hostNetwork,omitempty" protobuf:"varint,11,opt,name=hostNetwork"` + // Use the host's pid namespace. + // Optional: Default to false. + // +k8s:conversion-gen=false + HostPID bool `json:"hostPID,omitempty" protobuf:"varint,12,opt,name=hostPID"` + // Use the host's ipc namespace. + // Optional: Default to false. + // +k8s:conversion-gen=false + HostIPC bool `json:"hostIPC,omitempty" protobuf:"varint,13,opt,name=hostIPC"` + // SecurityContext holds pod-level security attributes and common container settings. + // Optional: Defaults to empty. See type description for default values of each field. + SecurityContext *PodSecurityContext `json:"securityContext,omitempty" protobuf:"bytes,14,opt,name=securityContext"` + // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. + // If specified, these secrets will be passed to individual puller implementations for them to use. For example, + // in the case of docker, only DockerConfig type secrets are honored. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod + ImagePullSecrets []LocalObjectReference `json:"imagePullSecrets,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,15,rep,name=imagePullSecrets"` + // Specifies the hostname of the Pod + // If not specified, the pod's hostname will be set to a system-defined value. + Hostname string `json:"hostname,omitempty" protobuf:"bytes,16,opt,name=hostname"` + // If specified, the fully qualified Pod hostname will be "...svc.". + // If not specified, the pod will not have a domainname at all. + Subdomain string `json:"subdomain,omitempty" protobuf:"bytes,17,opt,name=subdomain"` +} + +// PodSecurityContext holds pod-level security attributes and common container settings. +// Some fields are also present in container.securityContext. Field values of +// container.securityContext take precedence over field values of PodSecurityContext. +type PodSecurityContext struct { + // The SELinux context to be applied to all containers. + // If unspecified, the container runtime will allocate a random SELinux context for each + // container. May also be set in SecurityContext. If set in + // both SecurityContext and PodSecurityContext, the value specified in SecurityContext + // takes precedence for that container. + SELinuxOptions *SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,1,opt,name=seLinuxOptions"` + // The UID to run the entrypoint of the container process. + // Defaults to user specified in image metadata if unspecified. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence + // for that container. + RunAsUser *int64 `json:"runAsUser,omitempty" protobuf:"varint,2,opt,name=runAsUser"` + // Indicates that the container must run as a non-root user. + // If true, the Kubelet will validate the image at runtime to ensure that it + // does not run as UID 0 (root) and fail to start the container if it does. + // If unset or false, no such validation will be performed. + // May also be set in SecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + RunAsNonRoot *bool `json:"runAsNonRoot,omitempty" protobuf:"varint,3,opt,name=runAsNonRoot"` + // A list of groups applied to the first process run in each container, in addition + // to the container's primary GID. If unspecified, no groups will be added to + // any container. + SupplementalGroups []int64 `json:"supplementalGroups,omitempty" protobuf:"varint,4,rep,name=supplementalGroups"` + // A special supplemental group that applies to all containers in a pod. + // Some volume types allow the Kubelet to change the ownership of that volume + // to be owned by the pod: + // + // 1. The owning GID will be the FSGroup + // 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) + // 3. The permission bits are OR'd with rw-rw---- + // + // If unset, the Kubelet will not modify the ownership and permissions of any volume. + FSGroup *int64 `json:"fsGroup,omitempty" protobuf:"varint,5,opt,name=fsGroup"` +} + +// PodStatus represents information about the status of a pod. Status may trail the actual +// state of a system. +type PodStatus struct { + // Current condition of the pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-phase + Phase PodPhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=PodPhase"` + // Current service state of pod. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions + Conditions []PodCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,2,rep,name=conditions"` + // A human readable message indicating details about why the pod is in this condition. + Message string `json:"message,omitempty" protobuf:"bytes,3,opt,name=message"` + // A brief CamelCase message indicating details about why the pod is in this state. + // e.g. 'OutOfDisk' + Reason string `json:"reason,omitempty" protobuf:"bytes,4,opt,name=reason"` + + // IP address of the host to which the pod is assigned. Empty if not yet scheduled. + HostIP string `json:"hostIP,omitempty" protobuf:"bytes,5,opt,name=hostIP"` + // IP address allocated to the pod. Routable at least within the cluster. + // Empty if not yet allocated. + PodIP string `json:"podIP,omitempty" protobuf:"bytes,6,opt,name=podIP"` + + // RFC 3339 date and time at which the object was acknowledged by the Kubelet. + // This is before the Kubelet pulled the container image(s) for the pod. + StartTime *unversioned.Time `json:"startTime,omitempty" protobuf:"bytes,7,opt,name=startTime"` + + // The list has one entry per init container in the manifest. The most recent successful + // init container will have ready = true, the most recently started container will have + // startTime set. + // Init containers are in alpha state and may change without notice. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-statuses + InitContainerStatuses []ContainerStatus `json:"-"` + // The list has one entry per container in the manifest. Each entry is currently the output + // of `docker inspect`. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-statuses + ContainerStatuses []ContainerStatus `json:"containerStatuses,omitempty" protobuf:"bytes,8,rep,name=containerStatuses"` +} + +// PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded +type PodStatusResult struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Most recently observed status of the pod. + // This data may not be up to date. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status PodStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` +} + +// +genclient=true + +// Pod is a collection of containers that can run on a host. This resource is created +// by clients and scheduled onto hosts. +type Pod struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the desired behavior of the pod. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec PodSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Most recently observed status of the pod. + // This data may not be up to date. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status PodStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// PodList is a list of Pods. +type PodList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of pods. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pods.md + Items []Pod `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// PodTemplateSpec describes the data a pod should have when created from a template +type PodTemplateSpec struct { + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Specification of the desired behavior of the pod. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec PodSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// +genclient=true + +// PodTemplate describes a template for creating copies of a predefined pod. +type PodTemplate struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Template defines the pods that will be created from this pod template. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Template PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,2,opt,name=template"` +} + +// PodTemplateList is a list of PodTemplates. +type PodTemplateList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of pod templates + Items []PodTemplate `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// ReplicationControllerSpec is the specification of a replication controller. +type ReplicationControllerSpec struct { + // Replicas is the number of desired replicas. + // This is a pointer to distinguish between explicit zero and unspecified. + // Defaults to 1. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller + Replicas *int32 `json:"replicas,omitempty" protobuf:"varint,1,opt,name=replicas"` + + // Selector is a label query over pods that should match the Replicas count. + // If Selector is empty, it is defaulted to the labels present on the Pod template. + // Label keys and values that must match in order to be controlled by this replication + // controller, if empty defaulted to labels on Pod template. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors + Selector map[string]string `json:"selector,omitempty" protobuf:"bytes,2,rep,name=selector"` + + // TemplateRef is a reference to an object that describes the pod that will be created if + // insufficient replicas are detected. + // Reference to an object that describes the pod that will be created if insufficient replicas are detected. + // TemplateRef *ObjectReference `json:"templateRef,omitempty"` + + // Template is the object that describes the pod that will be created if + // insufficient replicas are detected. This takes precedence over a TemplateRef. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template + Template *PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,3,opt,name=template"` +} + +// ReplicationControllerStatus represents the current status of a replication +// controller. +type ReplicationControllerStatus struct { + // Replicas is the most recently oberved number of replicas. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller + Replicas int32 `json:"replicas" protobuf:"varint,1,opt,name=replicas"` + + // The number of pods that have labels matching the labels of the pod template of the replication controller. + FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty" protobuf:"varint,2,opt,name=fullyLabeledReplicas"` + + // The number of ready replicas for this replication controller. + ReadyReplicas int32 `json:"readyReplicas,omitempty" protobuf:"varint,4,opt,name=readyReplicas"` + + // ObservedGeneration reflects the generation of the most recently observed replication controller. + ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,3,opt,name=observedGeneration"` +} + +// +genclient=true + +// ReplicationController represents the configuration of a replication controller. +type ReplicationController struct { + unversioned.TypeMeta `json:",inline"` + + // If the Labels of a ReplicationController are empty, they are defaulted to + // be the same as the Pod(s) that the replication controller manages. + // Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the specification of the desired behavior of the replication controller. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec ReplicationControllerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status is the most recently observed status of the replication controller. + // This data may be out of date by some window of time. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status ReplicationControllerStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// ReplicationControllerList is a collection of replication controllers. +type ReplicationControllerList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of replication controllers. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md + Items []ReplicationController `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// Session Affinity Type string +type ServiceAffinity string + +const ( + // ServiceAffinityClientIP is the Client IP based. + ServiceAffinityClientIP ServiceAffinity = "ClientIP" + + // ServiceAffinityNone - no session affinity. + ServiceAffinityNone ServiceAffinity = "None" +) + +// Service Type string describes ingress methods for a service +type ServiceType string + +const ( + // ServiceTypeClusterIP means a service will only be accessible inside the + // cluster, via the cluster IP. + ServiceTypeClusterIP ServiceType = "ClusterIP" + + // ServiceTypeNodePort means a service will be exposed on one port of + // every node, in addition to 'ClusterIP' type. + ServiceTypeNodePort ServiceType = "NodePort" + + // ServiceTypeLoadBalancer means a service will be exposed via an + // external load balancer (if the cloud provider supports it), in addition + // to 'NodePort' type. + ServiceTypeLoadBalancer ServiceType = "LoadBalancer" + + // ServiceTypeExternalName means a service consists of only a reference to + // an external name that kubedns or equivalent will return as a CNAME + // record, with no exposing or proxying of any pods involved. + ServiceTypeExternalName ServiceType = "ExternalName" +) + +// ServiceStatus represents the current status of a service. +type ServiceStatus struct { + // LoadBalancer contains the current status of the load-balancer, + // if one is present. + LoadBalancer LoadBalancerStatus `json:"loadBalancer,omitempty" protobuf:"bytes,1,opt,name=loadBalancer"` +} + +// LoadBalancerStatus represents the status of a load-balancer. +type LoadBalancerStatus struct { + // Ingress is a list containing ingress points for the load-balancer. + // Traffic intended for the service should be sent to these ingress points. + Ingress []LoadBalancerIngress `json:"ingress,omitempty" protobuf:"bytes,1,rep,name=ingress"` +} + +// LoadBalancerIngress represents the status of a load-balancer ingress point: +// traffic intended for the service should be sent to an ingress point. +type LoadBalancerIngress struct { + // IP is set for load-balancer ingress points that are IP based + // (typically GCE or OpenStack load-balancers) + IP string `json:"ip,omitempty" protobuf:"bytes,1,opt,name=ip"` + + // Hostname is set for load-balancer ingress points that are DNS based + // (typically AWS load-balancers) + Hostname string `json:"hostname,omitempty" protobuf:"bytes,2,opt,name=hostname"` +} + +// ServiceSpec describes the attributes that a user creates on a service. +type ServiceSpec struct { + // The list of ports that are exposed by this service. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies + Ports []ServicePort `json:"ports" patchStrategy:"merge" patchMergeKey:"port" protobuf:"bytes,1,rep,name=ports"` + + // Route service traffic to pods with label keys and values matching this + // selector. If empty or not present, the service is assumed to have an + // external process managing its endpoints, which Kubernetes will not + // modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. + // Ignored if type is ExternalName. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview + Selector map[string]string `json:"selector,omitempty" protobuf:"bytes,2,rep,name=selector"` + + // clusterIP is the IP address of the service and is usually assigned + // randomly by the master. If an address is specified manually and is not in + // use by others, it will be allocated to the service; otherwise, creation + // of the service will fail. This field can not be changed through updates. + // Valid values are "None", empty string (""), or a valid IP address. "None" + // can be specified for headless services when proxying is not required. + // Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if + // type is ExternalName. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies + ClusterIP string `json:"clusterIP,omitempty" protobuf:"bytes,3,opt,name=clusterIP"` + + // type determines how the Service is exposed. Defaults to ClusterIP. Valid + // options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + // "ExternalName" maps to the specified externalName. + // "ClusterIP" allocates a cluster-internal IP address for load-balancing to + // endpoints. Endpoints are determined by the selector or if that is not + // specified, by manual construction of an Endpoints object. If clusterIP is + // "None", no virtual IP is allocated and the endpoints are published as a + // set of endpoints rather than a stable IP. + // "NodePort" builds on ClusterIP and allocates a port on every node which + // routes to the clusterIP. + // "LoadBalancer" builds on NodePort and creates an + // external load-balancer (if supported in the current cloud) which routes + // to the clusterIP. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview + Type ServiceType `json:"type,omitempty" protobuf:"bytes,4,opt,name=type,casttype=ServiceType"` + + // externalIPs is a list of IP addresses for which nodes in the cluster + // will also accept traffic for this service. These IPs are not managed by + // Kubernetes. The user is responsible for ensuring that traffic arrives + // at a node with this IP. A common example is external load-balancers + // that are not part of the Kubernetes system. A previous form of this + // functionality exists as the deprecatedPublicIPs field. When using this + // field, callers should also clear the deprecatedPublicIPs field. + ExternalIPs []string `json:"externalIPs,omitempty" protobuf:"bytes,5,rep,name=externalIPs"` + + // deprecatedPublicIPs is deprecated and replaced by the externalIPs field + // with almost the exact same semantics. This field is retained in the v1 + // API for compatibility until at least 8/20/2016. It will be removed from + // any new API revisions. If both deprecatedPublicIPs *and* externalIPs are + // set, deprecatedPublicIPs is used. + // +k8s:conversion-gen=false + DeprecatedPublicIPs []string `json:"deprecatedPublicIPs,omitempty" protobuf:"bytes,6,rep,name=deprecatedPublicIPs"` + + // Supports "ClientIP" and "None". Used to maintain session affinity. + // Enable client IP based session affinity. + // Must be ClientIP or None. + // Defaults to None. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies + SessionAffinity ServiceAffinity `json:"sessionAffinity,omitempty" protobuf:"bytes,7,opt,name=sessionAffinity,casttype=ServiceAffinity"` + + // Only applies to Service Type: LoadBalancer + // LoadBalancer will get created with the IP specified in this field. + // This feature depends on whether the underlying cloud-provider supports specifying + // the loadBalancerIP when a load balancer is created. + // This field will be ignored if the cloud-provider does not support the feature. + LoadBalancerIP string `json:"loadBalancerIP,omitempty" protobuf:"bytes,8,opt,name=loadBalancerIP"` + + // If specified and supported by the platform, this will restrict traffic through the cloud-provider + // load-balancer will be restricted to the specified client IPs. This field will be ignored if the + // cloud-provider does not support the feature." + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services-firewalls.md + LoadBalancerSourceRanges []string `json:"loadBalancerSourceRanges,omitempty" protobuf:"bytes,9,opt,name=loadBalancerSourceRanges"` + + // externalName is the external reference that kubedns or equivalent will + // return as a CNAME record for this service. No proxying will be involved. + // Must be a valid DNS name and requires Type to be ExternalName. + ExternalName string `json:"externalName,omitempty" protobuf:"bytes,10,opt,name=externalName"` +} + +// ServicePort contains information on service's port. +type ServicePort struct { + // The name of this port within the service. This must be a DNS_LABEL. + // All ports within a ServiceSpec must have unique names. This maps to + // the 'Name' field in EndpointPort objects. + // Optional if only one ServicePort is defined on this service. + Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + + // The IP protocol for this port. Supports "TCP" and "UDP". + // Default is TCP. + Protocol Protocol `json:"protocol,omitempty" protobuf:"bytes,2,opt,name=protocol,casttype=Protocol"` + + // The port that will be exposed by this service. + Port int32 `json:"port" protobuf:"varint,3,opt,name=port"` + + // Number or name of the port to access on the pods targeted by the service. + // Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. + // If this is a string, it will be looked up as a named port in the + // target Pod's container ports. If this is not specified, the value + // of the 'port' field is used (an identity map). + // This field is ignored for services with clusterIP=None, and should be + // omitted or set equal to the 'port' field. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#defining-a-service + TargetPort intstr.IntOrString `json:"targetPort,omitempty" protobuf:"bytes,4,opt,name=targetPort"` + + // The port on each node on which this service is exposed when type=NodePort or LoadBalancer. + // Usually assigned by the system. If specified, it will be allocated to the service + // if unused or else creation of the service will fail. + // Default is to auto-allocate a port if the ServiceType of this Service requires one. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#type--nodeport + NodePort int32 `json:"nodePort,omitempty" protobuf:"varint,5,opt,name=nodePort"` +} + +// +genclient=true + +// Service is a named abstraction of software service (for example, mysql) consisting of local port +// (for example 3306) that the proxy listens on, and the selector that determines which pods +// will answer requests sent through the proxy. +type Service struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the behavior of a service. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec ServiceSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Most recently observed status of the service. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status ServiceStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +const ( + // ClusterIPNone - do not assign a cluster IP + // no proxying required and no environment variables should be created for pods + ClusterIPNone = "None" +) + +// ServiceList holds a list of services. +type ServiceList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of services + Items []Service `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient=true + +// ServiceAccount binds together: +// * a name, understood by users, and perhaps by peripheral systems, for an identity +// * a principal that can be authenticated and authorized +// * a set of secrets +type ServiceAccount struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md + Secrets []ObjectReference `json:"secrets,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=secrets"` + + // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images + // in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets + // can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret + ImagePullSecrets []LocalObjectReference `json:"imagePullSecrets,omitempty" protobuf:"bytes,3,rep,name=imagePullSecrets"` +} + +// ServiceAccountList is a list of ServiceAccount objects +type ServiceAccountList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of ServiceAccounts. + // More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md#service-accounts + Items []ServiceAccount `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient=true + +// Endpoints is a collection of endpoints that implement the actual service. Example: +// Name: "mysvc", +// Subsets: [ +// { +// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], +// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] +// }, +// { +// Addresses: [{"ip": "10.10.3.3"}], +// Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}] +// }, +// ] +type Endpoints struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // The set of all endpoints is the union of all subsets. Addresses are placed into + // subsets according to the IPs they share. A single address with multiple ports, + // some of which are ready and some of which are not (because they come from + // different containers) will result in the address being displayed in different + // subsets for the different ports. No address will appear in both Addresses and + // NotReadyAddresses in the same subset. + // Sets of addresses and ports that comprise a service. + Subsets []EndpointSubset `json:"subsets" protobuf:"bytes,2,rep,name=subsets"` +} + +// EndpointSubset is a group of addresses with a common set of ports. The +// expanded set of endpoints is the Cartesian product of Addresses x Ports. +// For example, given: +// { +// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], +// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] +// } +// The resulting set of endpoints can be viewed as: +// a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], +// b: [ 10.10.1.1:309, 10.10.2.2:309 ] +type EndpointSubset struct { + // IP addresses which offer the related ports that are marked as ready. These endpoints + // should be considered safe for load balancers and clients to utilize. + Addresses []EndpointAddress `json:"addresses,omitempty" protobuf:"bytes,1,rep,name=addresses"` + // IP addresses which offer the related ports but are not currently marked as ready + // because they have not yet finished starting, have recently failed a readiness check, + // or have recently failed a liveness check. + NotReadyAddresses []EndpointAddress `json:"notReadyAddresses,omitempty" protobuf:"bytes,2,rep,name=notReadyAddresses"` + // Port numbers available on the related IP addresses. + Ports []EndpointPort `json:"ports,omitempty" protobuf:"bytes,3,rep,name=ports"` +} + +// EndpointAddress is a tuple that describes single IP address. +type EndpointAddress struct { + // The IP of this endpoint. + // May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), + // or link-local multicast ((224.0.0.0/24). + // IPv6 is also accepted but not fully supported on all platforms. Also, certain + // kubernetes components, like kube-proxy, are not IPv6 ready. + // TODO: This should allow hostname or IP, See #4447. + IP string `json:"ip" protobuf:"bytes,1,opt,name=ip"` + // The Hostname of this endpoint + Hostname string `json:"hostname,omitempty" protobuf:"bytes,3,opt,name=hostname"` + // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node. + NodeName *string `json:"nodeName,omitempty" protobuf:"bytes,4,opt,name=nodeName"` + // Reference to object providing the endpoint. + TargetRef *ObjectReference `json:"targetRef,omitempty" protobuf:"bytes,2,opt,name=targetRef"` +} + +// EndpointPort is a tuple that describes a single port. +type EndpointPort struct { + // The name of this port (corresponds to ServicePort.Name). + // Must be a DNS_LABEL. + // Optional only if one port is defined. + Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` + + // The port number of the endpoint. + Port int32 `json:"port" protobuf:"varint,2,opt,name=port"` + + // The IP protocol for this port. + // Must be UDP or TCP. + // Default is TCP. + Protocol Protocol `json:"protocol,omitempty" protobuf:"bytes,3,opt,name=protocol,casttype=Protocol"` +} + +// EndpointsList is a list of endpoints. +type EndpointsList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of endpoints. + Items []Endpoints `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// NodeSpec describes the attributes that a node is created with. +type NodeSpec struct { + // PodCIDR represents the pod IP range assigned to the node. + PodCIDR string `json:"podCIDR,omitempty" protobuf:"bytes,1,opt,name=podCIDR"` + // External ID of the node assigned by some machine database (e.g. a cloud provider). + // Deprecated. + ExternalID string `json:"externalID,omitempty" protobuf:"bytes,2,opt,name=externalID"` + // ID of the node assigned by the cloud provider in the format: :// + ProviderID string `json:"providerID,omitempty" protobuf:"bytes,3,opt,name=providerID"` + // Unschedulable controls node schedulability of new pods. By default, node is schedulable. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#manual-node-administration"` + Unschedulable bool `json:"unschedulable,omitempty" protobuf:"varint,4,opt,name=unschedulable"` +} + +// DaemonEndpoint contains information about a single Daemon endpoint. +type DaemonEndpoint struct { + /* + The port tag was not properly in quotes in earlier releases, so it must be + uppercased for backwards compat (since it was falling back to var name of + 'Port'). + */ + + // Port number of the given endpoint. + Port int32 `json:"Port" protobuf:"varint,1,opt,name=Port"` +} + +// NodeDaemonEndpoints lists ports opened by daemons running on the Node. +type NodeDaemonEndpoints struct { + // Endpoint on which Kubelet is listening. + KubeletEndpoint DaemonEndpoint `json:"kubeletEndpoint,omitempty" protobuf:"bytes,1,opt,name=kubeletEndpoint"` +} + +// NodeSystemInfo is a set of ids/uuids to uniquely identify the node. +type NodeSystemInfo struct { + // Machine ID reported by the node. + MachineID string `json:"machineID" protobuf:"bytes,1,opt,name=machineID"` + // System UUID reported by the node. + SystemUUID string `json:"systemUUID" protobuf:"bytes,2,opt,name=systemUUID"` + // Boot ID reported by the node. + BootID string `json:"bootID" protobuf:"bytes,3,opt,name=bootID"` + // Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64). + KernelVersion string `json:"kernelVersion" protobuf:"bytes,4,opt,name=kernelVersion"` + // OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)). + OSImage string `json:"osImage" protobuf:"bytes,5,opt,name=osImage"` + // ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0). + ContainerRuntimeVersion string `json:"containerRuntimeVersion" protobuf:"bytes,6,opt,name=containerRuntimeVersion"` + // Kubelet Version reported by the node. + KubeletVersion string `json:"kubeletVersion" protobuf:"bytes,7,opt,name=kubeletVersion"` + // KubeProxy Version reported by the node. + KubeProxyVersion string `json:"kubeProxyVersion" protobuf:"bytes,8,opt,name=kubeProxyVersion"` + // The Operating System reported by the node + OperatingSystem string `json:"operatingSystem" protobuf:"bytes,9,opt,name=operatingSystem"` + // The Architecture reported by the node + Architecture string `json:"architecture" protobuf:"bytes,10,opt,name=architecture"` +} + +// NodeStatus is information about the current status of a node. +type NodeStatus struct { + // Capacity represents the total resources of a node. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity for more details. + Capacity ResourceList `json:"capacity,omitempty" protobuf:"bytes,1,rep,name=capacity,casttype=ResourceList,castkey=ResourceName"` + // Allocatable represents the resources of a node that are available for scheduling. + // Defaults to Capacity. + Allocatable ResourceList `json:"allocatable,omitempty" protobuf:"bytes,2,rep,name=allocatable,casttype=ResourceList,castkey=ResourceName"` + // NodePhase is the recently observed lifecycle phase of the node. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-phase + // The field is never populated, and now is deprecated. + Phase NodePhase `json:"phase,omitempty" protobuf:"bytes,3,opt,name=phase,casttype=NodePhase"` + // Conditions is an array of current observed node conditions. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-condition + Conditions []NodeCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,4,rep,name=conditions"` + // List of addresses reachable to the node. + // Queried from cloud provider, if available. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-addresses + Addresses []NodeAddress `json:"addresses,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,5,rep,name=addresses"` + // Endpoints of daemons running on the Node. + DaemonEndpoints NodeDaemonEndpoints `json:"daemonEndpoints,omitempty" protobuf:"bytes,6,opt,name=daemonEndpoints"` + // Set of ids/uuids to uniquely identify the node. + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-info + NodeInfo NodeSystemInfo `json:"nodeInfo,omitempty" protobuf:"bytes,7,opt,name=nodeInfo"` + // List of container images on this node + Images []ContainerImage `json:"images,omitempty" protobuf:"bytes,8,rep,name=images"` + // List of attachable volumes in use (mounted) by the node. + VolumesInUse []UniqueVolumeName `json:"volumesInUse,omitempty" protobuf:"bytes,9,rep,name=volumesInUse"` + // List of volumes that are attached to the node. + VolumesAttached []AttachedVolume `json:"volumesAttached,omitempty" protobuf:"bytes,10,rep,name=volumesAttached"` +} + +type UniqueVolumeName string + +// AttachedVolume describes a volume attached to a node +type AttachedVolume struct { + // Name of the attached volume + Name UniqueVolumeName `json:"name" protobuf:"bytes,1,rep,name=name"` + + // DevicePath represents the device path where the volume should be avilable + DevicePath string `json:"devicePath" protobuf:"bytes,2,rep,name=devicePath"` +} + +// AvoidPods describes pods that should avoid this node. This is the value for a +// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and +// will eventually become a field of NodeStatus. +type AvoidPods struct { + // Bounded-sized list of signatures of pods that should avoid this node, sorted + // in timestamp order from oldest to newest. Size of the slice is unspecified. + PreferAvoidPods []PreferAvoidPodsEntry `json:"preferAvoidPods,omitempty" protobuf:"bytes,1,rep,name=preferAvoidPods"` +} + +// Describes a class of pods that should avoid this node. +type PreferAvoidPodsEntry struct { + // The class of pods. + PodSignature PodSignature `json:"podSignature" protobuf:"bytes,1,opt,name=podSignature"` + // Time at which this entry was added to the list. + EvictionTime unversioned.Time `json:"evictionTime,omitempty" protobuf:"bytes,2,opt,name=evictionTime"` + // (brief) reason why this entry was added to the list. + Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` + // Human readable message indicating why this entry was added to the list. + Message string `json:"message,omitempty" protobuf:"bytes,4,opt,name=message"` +} + +// Describes the class of pods that should avoid this node. +// Exactly one field should be set. +type PodSignature struct { + // Reference to controller whose pods should avoid this node. + PodController *OwnerReference `json:"podController,omitempty" protobuf:"bytes,1,opt,name=podController"` +} + +// Describe a container image +type ContainerImage struct { + // Names by which this image is known. + // e.g. ["gcr.io/google_containers/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"] + Names []string `json:"names" protobuf:"bytes,1,rep,name=names"` + // The size of the image in bytes. + SizeBytes int64 `json:"sizeBytes,omitempty" protobuf:"varint,2,opt,name=sizeBytes"` +} + +type NodePhase string + +// These are the valid phases of node. +const ( + // NodePending means the node has been created/added by the system, but not configured. + NodePending NodePhase = "Pending" + // NodeRunning means the node has been configured and has Kubernetes components running. + NodeRunning NodePhase = "Running" + // NodeTerminated means the node has been removed from the cluster. + NodeTerminated NodePhase = "Terminated" +) + +type NodeConditionType string + +// These are valid conditions of node. Currently, we don't have enough information to decide +// node condition. In the future, we will add more. The proposed set of conditions are: +// NodeReachable, NodeLive, NodeReady, NodeSchedulable, NodeRunnable. +const ( + // NodeReady means kubelet is healthy and ready to accept pods. + NodeReady NodeConditionType = "Ready" + // NodeOutOfDisk means the kubelet will not accept new pods due to insufficient free disk + // space on the node. + NodeOutOfDisk NodeConditionType = "OutOfDisk" + // NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory. + NodeMemoryPressure NodeConditionType = "MemoryPressure" + // NodeDiskPressure means the kubelet is under pressure due to insufficient available disk. + NodeDiskPressure NodeConditionType = "DiskPressure" + // NodeNetworkUnavailable means that network for the node is not correctly configured. + NodeNetworkUnavailable NodeConditionType = "NetworkUnavailable" +) + +// NodeCondition contains condition information for a node. +type NodeCondition struct { + // Type of node condition. + Type NodeConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=NodeConditionType"` + // Status of the condition, one of True, False, Unknown. + Status ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=ConditionStatus"` + // Last time we got an update on a given condition. + LastHeartbeatTime unversioned.Time `json:"lastHeartbeatTime,omitempty" protobuf:"bytes,3,opt,name=lastHeartbeatTime"` + // Last time the condition transit from one status to another. + LastTransitionTime unversioned.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"` + // (brief) reason for the condition's last transition. + Reason string `json:"reason,omitempty" protobuf:"bytes,5,opt,name=reason"` + // Human readable message indicating details about last transition. + Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"` +} + +type NodeAddressType string + +// These are valid address type of node. +const ( + NodeHostName NodeAddressType = "Hostname" + NodeExternalIP NodeAddressType = "ExternalIP" + NodeInternalIP NodeAddressType = "InternalIP" +) + +// NodeAddress contains information for the node's address. +type NodeAddress struct { + // Node address type, one of Hostname, ExternalIP or InternalIP. + Type NodeAddressType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=NodeAddressType"` + // The node address. + Address string `json:"address" protobuf:"bytes,2,opt,name=address"` +} + +// ResourceName is the name identifying various resources in a ResourceList. +type ResourceName string + +// Resource names must be not more than 63 characters, consisting of upper- or lower-case alphanumeric characters, +// with the -, _, and . characters allowed anywhere, except the first or last character. +// The default convention, matching that for annotations, is to use lower-case names, with dashes, rather than +// camel case, separating compound words. +// Fully-qualified resource typenames are constructed from a DNS-style subdomain, followed by a slash `/` and a name. +const ( + // CPU, in cores. (500m = .5 cores) + ResourceCPU ResourceName = "cpu" + // Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) + ResourceMemory ResourceName = "memory" + // Volume size, in bytes (e,g. 5Gi = 5GiB = 5 * 1024 * 1024 * 1024) + ResourceStorage ResourceName = "storage" + // NVIDIA GPU, in devices. Alpha, might change: although fractional and allowing values >1, only one whole device per node is assigned. + ResourceNvidiaGPU ResourceName = "alpha.kubernetes.io/nvidia-gpu" + // Number of Pods that may be running on this Node: see ResourcePods +) + +// ResourceList is a set of (resource name, quantity) pairs. +type ResourceList map[ResourceName]resource.Quantity + +// +genclient=true +// +nonNamespaced=true + +// Node is a worker node in Kubernetes, formerly known as minion. +// Each node will have a unique identifier in the cache (i.e. in etcd). +type Node struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the behavior of a node. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec NodeSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Most recently observed status of the node. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status NodeStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// NodeList is the whole list of all Nodes which have been registered with master. +type NodeList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of nodes + Items []Node `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +type FinalizerName string + +// These are internal finalizer values to Kubernetes, must be qualified name unless defined here +const ( + FinalizerKubernetes FinalizerName = "kubernetes" +) + +// NamespaceSpec describes the attributes on a Namespace. +type NamespaceSpec struct { + // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. + // More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#finalizers + Finalizers []FinalizerName `json:"finalizers,omitempty" protobuf:"bytes,1,rep,name=finalizers,casttype=FinalizerName"` +} + +// NamespaceStatus is information about the current status of a Namespace. +type NamespaceStatus struct { + // Phase is the current lifecycle phase of the namespace. + // More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#phases + Phase NamespacePhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=NamespacePhase"` +} + +type NamespacePhase string + +// These are the valid phases of a namespace. +const ( + // NamespaceActive means the namespace is available for use in the system + NamespaceActive NamespacePhase = "Active" + // NamespaceTerminating means the namespace is undergoing graceful termination + NamespaceTerminating NamespacePhase = "Terminating" +) + +// +genclient=true +// +nonNamespaced=true + +// Namespace provides a scope for Names. +// Use of multiple namespaces is optional. +type Namespace struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the behavior of the Namespace. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec NamespaceSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status describes the current status of a Namespace. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status NamespaceStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// NamespaceList is a list of Namespaces. +type NamespaceList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of Namespace objects in the list. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md + Items []Namespace `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// Binding ties one object to another. +// For example, a pod is bound to a node by a scheduler. +type Binding struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // The target object that you want to bind to the standard object. + Target ObjectReference `json:"target" protobuf:"bytes,2,opt,name=target"` +} + +// Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. +type Preconditions struct { + // Specifies the target UID. + UID *types.UID `json:"uid,omitempty" protobuf:"bytes,1,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"` +} + +// DeleteOptions may be provided when deleting an API object +type DeleteOptions struct { + unversioned.TypeMeta `json:",inline"` + + // The duration in seconds before the object should be deleted. Value must be non-negative integer. + // The value zero indicates delete immediately. If this value is nil, the default grace period for the + // specified type will be used. + // Defaults to a per object value if not specified. zero means delete immediately. + GracePeriodSeconds *int64 `json:"gracePeriodSeconds,omitempty" protobuf:"varint,1,opt,name=gracePeriodSeconds"` + + // Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be + // returned. + Preconditions *Preconditions `json:"preconditions,omitempty" protobuf:"bytes,2,opt,name=preconditions"` + + // Should the dependent objects be orphaned. If true/false, the "orphan" + // finalizer will be added to/removed from the object's finalizers list. + OrphanDependents *bool `json:"orphanDependents,omitempty" protobuf:"varint,3,opt,name=orphanDependents"` +} + +// ExportOptions is the query options to the standard REST get call. +type ExportOptions struct { + unversioned.TypeMeta `json:",inline"` + + // Should this value be exported. Export strips fields that a user can not specify. + Export bool `json:"export" protobuf:"varint,1,opt,name=export"` + // Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace' + Exact bool `json:"exact" protobuf:"varint,2,opt,name=exact"` +} + +// ListOptions is the query options to a standard REST list call. +type ListOptions struct { + unversioned.TypeMeta `json:",inline"` + + // A selector to restrict the list of returned objects by their labels. + // Defaults to everything. + LabelSelector string `json:"labelSelector,omitempty" protobuf:"bytes,1,opt,name=labelSelector"` + // A selector to restrict the list of returned objects by their fields. + // Defaults to everything. + FieldSelector string `json:"fieldSelector,omitempty" protobuf:"bytes,2,opt,name=fieldSelector"` + // Watch for changes to the described resources and return them as a stream of + // add, update, and remove notifications. Specify resourceVersion. + Watch bool `json:"watch,omitempty" protobuf:"varint,3,opt,name=watch"` + // When specified with a watch call, shows changes that occur after that particular version of a resource. + // Defaults to changes from the beginning of history. + ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,4,opt,name=resourceVersion"` + // Timeout for the list/watch call. + TimeoutSeconds *int64 `json:"timeoutSeconds,omitempty" protobuf:"varint,5,opt,name=timeoutSeconds"` +} + +// PodLogOptions is the query options for a Pod's logs REST call. +type PodLogOptions struct { + unversioned.TypeMeta `json:",inline"` + + // The container for which to stream logs. Defaults to only container if there is one container in the pod. + Container string `json:"container,omitempty" protobuf:"bytes,1,opt,name=container"` + // Follow the log stream of the pod. Defaults to false. + Follow bool `json:"follow,omitempty" protobuf:"varint,2,opt,name=follow"` + // Return previous terminated container logs. Defaults to false. + Previous bool `json:"previous,omitempty" protobuf:"varint,3,opt,name=previous"` + // A relative time in seconds before the current time from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + SinceSeconds *int64 `json:"sinceSeconds,omitempty" protobuf:"varint,4,opt,name=sinceSeconds"` + // An RFC3339 timestamp from which to show logs. If this value + // precedes the time a pod was started, only logs since the pod start will be returned. + // If this value is in the future, no logs will be returned. + // Only one of sinceSeconds or sinceTime may be specified. + SinceTime *unversioned.Time `json:"sinceTime,omitempty" protobuf:"bytes,5,opt,name=sinceTime"` + // If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line + // of log output. Defaults to false. + Timestamps bool `json:"timestamps,omitempty" protobuf:"varint,6,opt,name=timestamps"` + // If set, the number of lines from the end of the logs to show. If not specified, + // logs are shown from the creation of the container or sinceSeconds or sinceTime + TailLines *int64 `json:"tailLines,omitempty" protobuf:"varint,7,opt,name=tailLines"` + // If set, the number of bytes to read from the server before terminating the + // log output. This may not display a complete final line of logging, and may return + // slightly more or slightly less than the specified limit. + LimitBytes *int64 `json:"limitBytes,omitempty" protobuf:"varint,8,opt,name=limitBytes"` +} + +// PodAttachOptions is the query options to a Pod's remote attach call. +// --- +// TODO: merge w/ PodExecOptions below for stdin, stdout, etc +// and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY +type PodAttachOptions struct { + unversioned.TypeMeta `json:",inline"` + + // Stdin if true, redirects the standard input stream of the pod for this call. + // Defaults to false. + Stdin bool `json:"stdin,omitempty" protobuf:"varint,1,opt,name=stdin"` + + // Stdout if true indicates that stdout is to be redirected for the attach call. + // Defaults to true. + Stdout bool `json:"stdout,omitempty" protobuf:"varint,2,opt,name=stdout"` + + // Stderr if true indicates that stderr is to be redirected for the attach call. + // Defaults to true. + Stderr bool `json:"stderr,omitempty" protobuf:"varint,3,opt,name=stderr"` + + // TTY if true indicates that a tty will be allocated for the attach call. + // This is passed through the container runtime so the tty + // is allocated on the worker node by the container runtime. + // Defaults to false. + TTY bool `json:"tty,omitempty" protobuf:"varint,4,opt,name=tty"` + + // The container in which to execute the command. + // Defaults to only container if there is only one container in the pod. + Container string `json:"container,omitempty" protobuf:"bytes,5,opt,name=container"` +} + +// PodExecOptions is the query options to a Pod's remote exec call. +// --- +// TODO: This is largely identical to PodAttachOptions above, make sure they stay in sync and see about merging +// and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY +type PodExecOptions struct { + unversioned.TypeMeta `json:",inline"` + + // Redirect the standard input stream of the pod for this call. + // Defaults to false. + Stdin bool `json:"stdin,omitempty" protobuf:"varint,1,opt,name=stdin"` + + // Redirect the standard output stream of the pod for this call. + // Defaults to true. + Stdout bool `json:"stdout,omitempty" protobuf:"varint,2,opt,name=stdout"` + + // Redirect the standard error stream of the pod for this call. + // Defaults to true. + Stderr bool `json:"stderr,omitempty" protobuf:"varint,3,opt,name=stderr"` + + // TTY if true indicates that a tty will be allocated for the exec call. + // Defaults to false. + TTY bool `json:"tty,omitempty" protobuf:"varint,4,opt,name=tty"` + + // Container in which to execute the command. + // Defaults to only container if there is only one container in the pod. + Container string `json:"container,omitempty" protobuf:"bytes,5,opt,name=container"` + + // Command is the remote command to execute. argv array. Not executed within a shell. + Command []string `json:"command" protobuf:"bytes,6,rep,name=command"` +} + +// PodProxyOptions is the query options to a Pod's proxy call. +type PodProxyOptions struct { + unversioned.TypeMeta `json:",inline"` + + // Path is the URL path to use for the current proxy request to pod. + Path string `json:"path,omitempty" protobuf:"bytes,1,opt,name=path"` +} + +// NodeProxyOptions is the query options to a Node's proxy call. +type NodeProxyOptions struct { + unversioned.TypeMeta `json:",inline"` + + // Path is the URL path to use for the current proxy request to node. + Path string `json:"path,omitempty" protobuf:"bytes,1,opt,name=path"` +} + +// ServiceProxyOptions is the query options to a Service's proxy call. +type ServiceProxyOptions struct { + unversioned.TypeMeta `json:",inline"` + + // Path is the part of URLs that include service endpoints, suffixes, + // and parameters to use for the current proxy request to service. + // For example, the whole request URL is + // http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. + // Path is _search?q=user:kimchy. + Path string `json:"path,omitempty" protobuf:"bytes,1,opt,name=path"` +} + +// OwnerReference contains enough information to let you identify an owning +// object. Currently, an owning object must be in the same namespace, so there +// is no namespace field. +type OwnerReference struct { + // API version of the referent. + APIVersion string `json:"apiVersion" protobuf:"bytes,5,opt,name=apiVersion"` + // Kind of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` + // Name of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + Name string `json:"name" protobuf:"bytes,3,opt,name=name"` + // UID of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids + UID types.UID `json:"uid" protobuf:"bytes,4,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"` + // If true, this reference points to the managing controller. + Controller *bool `json:"controller,omitempty" protobuf:"varint,6,opt,name=controller"` +} + +// ObjectReference contains enough information to let you inspect or modify the referred object. +type ObjectReference struct { + // Kind of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` + // Namespace of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md + Namespace string `json:"namespace,omitempty" protobuf:"bytes,2,opt,name=namespace"` + // Name of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + Name string `json:"name,omitempty" protobuf:"bytes,3,opt,name=name"` + // UID of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids + UID types.UID `json:"uid,omitempty" protobuf:"bytes,4,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"` + // API version of the referent. + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,5,opt,name=apiVersion"` + // Specific resourceVersion to which this reference is made, if any. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency + ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"` + + // If referring to a piece of an object instead of an entire object, this string + // should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + // For example, if the object reference is to a container within a pod, this would take on a value like: + // "spec.containers{name}" (where "name" refers to the name of the container that triggered + // the event) or if no container name is specified "spec.containers[2]" (container with + // index 2 in this pod). This syntax is chosen only to have some well-defined way of + // referencing a part of an object. + // TODO: this design is not final and this field is subject to change in the future. + FieldPath string `json:"fieldPath,omitempty" protobuf:"bytes,7,opt,name=fieldPath"` +} + +// LocalObjectReference contains enough information to let you locate the +// referenced object inside the same namespace. +type LocalObjectReference struct { + // Name of the referent. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + // TODO: Add other useful fields. apiVersion, kind, uid? + Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` +} + +// SerializedReference is a reference to serialized object. +type SerializedReference struct { + unversioned.TypeMeta `json:",inline"` + // The reference to an object in the system. + Reference ObjectReference `json:"reference,omitempty" protobuf:"bytes,1,opt,name=reference"` +} + +// EventSource contains information for an event. +type EventSource struct { + // Component from which the event is generated. + Component string `json:"component,omitempty" protobuf:"bytes,1,opt,name=component"` + // Host name on which the event is generated. + Host string `json:"host,omitempty" protobuf:"bytes,2,opt,name=host"` +} + +// Valid values for event types (new types could be added in future) +const ( + // Information only and will not cause any problems + EventTypeNormal string = "Normal" + // These events are to warn that something might go wrong + EventTypeWarning string = "Warning" +) + +// +genclient=true + +// Event is a report of an event somewhere in the cluster. +// TODO: Decide whether to store these separately or with the object they apply to. +type Event struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` + + // The object that this event is about. + InvolvedObject ObjectReference `json:"involvedObject" protobuf:"bytes,2,opt,name=involvedObject"` + + // This should be a short, machine understandable string that gives the reason + // for the transition into the object's current status. + // TODO: provide exact specification for format. + Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` + + // A human-readable description of the status of this operation. + // TODO: decide on maximum length. + Message string `json:"message,omitempty" protobuf:"bytes,4,opt,name=message"` + + // The component reporting this event. Should be a short machine understandable string. + Source EventSource `json:"source,omitempty" protobuf:"bytes,5,opt,name=source"` + + // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.) + FirstTimestamp unversioned.Time `json:"firstTimestamp,omitempty" protobuf:"bytes,6,opt,name=firstTimestamp"` + + // The time at which the most recent occurrence of this event was recorded. + LastTimestamp unversioned.Time `json:"lastTimestamp,omitempty" protobuf:"bytes,7,opt,name=lastTimestamp"` + + // The number of times this event has occurred. + Count int32 `json:"count,omitempty" protobuf:"varint,8,opt,name=count"` + + // Type of this event (Normal, Warning), new types could be added in the future + Type string `json:"type,omitempty" protobuf:"bytes,9,opt,name=type"` +} + +// EventList is a list of events. +type EventList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of events + Items []Event `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// List holds a list of objects, which may not be known by the server. +type List struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of objects + Items []runtime.RawExtension `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// LimitType is a type of object that is limited +type LimitType string + +const ( + // Limit that applies to all pods in a namespace + LimitTypePod LimitType = "Pod" + // Limit that applies to all containers in a namespace + LimitTypeContainer LimitType = "Container" +) + +// LimitRangeItem defines a min/max usage limit for any resource that matches on kind. +type LimitRangeItem struct { + // Type of resource that this limit applies to. + Type LimitType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=LimitType"` + // Max usage constraints on this kind by resource name. + Max ResourceList `json:"max,omitempty" protobuf:"bytes,2,rep,name=max,casttype=ResourceList,castkey=ResourceName"` + // Min usage constraints on this kind by resource name. + Min ResourceList `json:"min,omitempty" protobuf:"bytes,3,rep,name=min,casttype=ResourceList,castkey=ResourceName"` + // Default resource requirement limit value by resource name if resource limit is omitted. + Default ResourceList `json:"default,omitempty" protobuf:"bytes,4,rep,name=default,casttype=ResourceList,castkey=ResourceName"` + // DefaultRequest is the default resource requirement request value by resource name if resource request is omitted. + DefaultRequest ResourceList `json:"defaultRequest,omitempty" protobuf:"bytes,5,rep,name=defaultRequest,casttype=ResourceList,castkey=ResourceName"` + // MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource. + MaxLimitRequestRatio ResourceList `json:"maxLimitRequestRatio,omitempty" protobuf:"bytes,6,rep,name=maxLimitRequestRatio,casttype=ResourceList,castkey=ResourceName"` +} + +// LimitRangeSpec defines a min/max usage limit for resources that match on kind. +type LimitRangeSpec struct { + // Limits is the list of LimitRangeItem objects that are enforced. + Limits []LimitRangeItem `json:"limits" protobuf:"bytes,1,rep,name=limits"` +} + +// +genclient=true + +// LimitRange sets resource usage limits for each kind of resource in a Namespace. +type LimitRange struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the limits enforced. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec LimitRangeSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` +} + +// LimitRangeList is a list of LimitRange items. +type LimitRangeList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of LimitRange objects. + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_limit_range.md + Items []LimitRange `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// The following identify resource constants for Kubernetes object types +const ( + // Pods, number + ResourcePods ResourceName = "pods" + // Services, number + ResourceServices ResourceName = "services" + // ReplicationControllers, number + ResourceReplicationControllers ResourceName = "replicationcontrollers" + // ResourceQuotas, number + ResourceQuotas ResourceName = "resourcequotas" + // ResourceSecrets, number + ResourceSecrets ResourceName = "secrets" + // ResourceConfigMaps, number + ResourceConfigMaps ResourceName = "configmaps" + // ResourcePersistentVolumeClaims, number + ResourcePersistentVolumeClaims ResourceName = "persistentvolumeclaims" + // ResourceServicesNodePorts, number + ResourceServicesNodePorts ResourceName = "services.nodeports" + // ResourceServicesLoadBalancers, number + ResourceServicesLoadBalancers ResourceName = "services.loadbalancers" + // CPU request, in cores. (500m = .5 cores) + ResourceRequestsCPU ResourceName = "requests.cpu" + // Memory request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) + ResourceRequestsMemory ResourceName = "requests.memory" + // Storage request, in bytes + ResourceRequestsStorage ResourceName = "requests.storage" + // CPU limit, in cores. (500m = .5 cores) + ResourceLimitsCPU ResourceName = "limits.cpu" + // Memory limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) + ResourceLimitsMemory ResourceName = "limits.memory" +) + +// A ResourceQuotaScope defines a filter that must match each object tracked by a quota +type ResourceQuotaScope string + +const ( + // Match all pod objects where spec.activeDeadlineSeconds + ResourceQuotaScopeTerminating ResourceQuotaScope = "Terminating" + // Match all pod objects where !spec.activeDeadlineSeconds + ResourceQuotaScopeNotTerminating ResourceQuotaScope = "NotTerminating" + // Match all pod objects that have best effort quality of service + ResourceQuotaScopeBestEffort ResourceQuotaScope = "BestEffort" + // Match all pod objects that do not have best effort quality of service + ResourceQuotaScopeNotBestEffort ResourceQuotaScope = "NotBestEffort" +) + +// ResourceQuotaSpec defines the desired hard limits to enforce for Quota. +type ResourceQuotaSpec struct { + // Hard is the set of desired hard limits for each named resource. + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + Hard ResourceList `json:"hard,omitempty" protobuf:"bytes,1,rep,name=hard,casttype=ResourceList,castkey=ResourceName"` + // A collection of filters that must match each object tracked by a quota. + // If not specified, the quota matches all objects. + Scopes []ResourceQuotaScope `json:"scopes,omitempty" protobuf:"bytes,2,rep,name=scopes,casttype=ResourceQuotaScope"` +} + +// ResourceQuotaStatus defines the enforced hard limits and observed use. +type ResourceQuotaStatus struct { + // Hard is the set of enforced hard limits for each named resource. + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + Hard ResourceList `json:"hard,omitempty" protobuf:"bytes,1,rep,name=hard,casttype=ResourceList,castkey=ResourceName"` + // Used is the current observed total usage of the resource in the namespace. + Used ResourceList `json:"used,omitempty" protobuf:"bytes,2,rep,name=used,casttype=ResourceList,castkey=ResourceName"` +} + +// +genclient=true + +// ResourceQuota sets aggregate quota restrictions enforced per namespace +type ResourceQuota struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Spec defines the desired quota. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec ResourceQuotaSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Status defines the actual enforced quota and its current usage. + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status ResourceQuotaStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// ResourceQuotaList is a list of ResourceQuota items. +type ResourceQuotaList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of ResourceQuota objects. + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + Items []ResourceQuota `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient=true + +// Secret holds secret data of a certain type. The total bytes of the values in +// the Data field must be less than MaxSecretSize bytes. +type Secret struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN + // or leading dot followed by valid DNS_SUBDOMAIN. + // The serialized form of the secret data is a base64 encoded string, + // representing the arbitrary (possibly non-string) data value here. + // Described in https://tools.ietf.org/html/rfc4648#section-4 + Data map[string][]byte `json:"data,omitempty" protobuf:"bytes,2,rep,name=data"` + + // stringData allows specifying non-binary secret data in string form. + // It is provided as a write-only convenience method. + // All keys and values are merged into the data field on write, overwriting any existing values. + // It is never output when reading from the API. + // +k8s:conversion-gen=false + StringData map[string]string `json:"stringData,omitempty" protobuf:"bytes,4,rep,name=stringData"` + + // Used to facilitate programmatic handling of secret data. + Type SecretType `json:"type,omitempty" protobuf:"bytes,3,opt,name=type,casttype=SecretType"` +} + +const MaxSecretSize = 1 * 1024 * 1024 + +type SecretType string + +const ( + // SecretTypeOpaque is the default. Arbitrary user-defined data + SecretTypeOpaque SecretType = "Opaque" + + // SecretTypeServiceAccountToken contains a token that identifies a service account to the API + // + // Required fields: + // - Secret.Annotations["kubernetes.io/service-account.name"] - the name of the ServiceAccount the token identifies + // - Secret.Annotations["kubernetes.io/service-account.uid"] - the UID of the ServiceAccount the token identifies + // - Secret.Data["token"] - a token that identifies the service account to the API + SecretTypeServiceAccountToken SecretType = "kubernetes.io/service-account-token" + + // ServiceAccountNameKey is the key of the required annotation for SecretTypeServiceAccountToken secrets + ServiceAccountNameKey = "kubernetes.io/service-account.name" + // ServiceAccountUIDKey is the key of the required annotation for SecretTypeServiceAccountToken secrets + ServiceAccountUIDKey = "kubernetes.io/service-account.uid" + // ServiceAccountTokenKey is the key of the required data for SecretTypeServiceAccountToken secrets + ServiceAccountTokenKey = "token" + // ServiceAccountKubeconfigKey is the key of the optional kubeconfig data for SecretTypeServiceAccountToken secrets + ServiceAccountKubeconfigKey = "kubernetes.kubeconfig" + // ServiceAccountRootCAKey is the key of the optional root certificate authority for SecretTypeServiceAccountToken secrets + ServiceAccountRootCAKey = "ca.crt" + // ServiceAccountNamespaceKey is the key of the optional namespace to use as the default for namespaced API calls + ServiceAccountNamespaceKey = "namespace" + + // SecretTypeDockercfg contains a dockercfg file that follows the same format rules as ~/.dockercfg + // + // Required fields: + // - Secret.Data[".dockercfg"] - a serialized ~/.dockercfg file + SecretTypeDockercfg SecretType = "kubernetes.io/dockercfg" + + // DockerConfigKey is the key of the required data for SecretTypeDockercfg secrets + DockerConfigKey = ".dockercfg" + + // SecretTypeTLS contains information about a TLS client or server secret. It + // is primarily used with TLS termination of the Ingress resource, but may be + // used in other types. + // + // Required fields: + // - Secret.Data["tls.key"] - TLS private key. + // Secret.Data["tls.crt"] - TLS certificate. + // TODO: Consider supporting different formats, specifying CA/destinationCA. + SecretTypeTLS SecretType = "kubernetes.io/tls" + + // TLSCertKey is the key for tls certificates in a TLS secert. + TLSCertKey = "tls.crt" + // TLSPrivateKeyKey is the key for the private key field in a TLS secret. + TLSPrivateKeyKey = "tls.key" +) + +// SecretList is a list of Secret. +type SecretList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is a list of secret objects. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md + Items []Secret `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// +genclient=true + +// ConfigMap holds configuration data for pods to consume. +type ConfigMap struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Data contains the configuration data. + // Each key must be a valid DNS_SUBDOMAIN with an optional leading dot. + Data map[string]string `json:"data,omitempty" protobuf:"bytes,2,rep,name=data"` +} + +// ConfigMapList is a resource containing a list of ConfigMap objects. +type ConfigMapList struct { + unversioned.TypeMeta `json:",inline"` + + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of ConfigMaps. + Items []ConfigMap `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// Type and constants for component health validation. +type ComponentConditionType string + +// These are the valid conditions for the component. +const ( + ComponentHealthy ComponentConditionType = "Healthy" +) + +// Information about the condition of a component. +type ComponentCondition struct { + // Type of condition for a component. + // Valid value: "Healthy" + Type ComponentConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=ComponentConditionType"` + // Status of the condition for a component. + // Valid values for "Healthy": "True", "False", or "Unknown". + Status ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=ConditionStatus"` + // Message about the condition for a component. + // For example, information about a health check. + Message string `json:"message,omitempty" protobuf:"bytes,3,opt,name=message"` + // Condition error code for a component. + // For example, a health check error code. + Error string `json:"error,omitempty" protobuf:"bytes,4,opt,name=error"` +} + +// +genclient=true +// +nonNamespaced=true + +// ComponentStatus (and ComponentStatusList) holds the cluster validation info. +type ComponentStatus struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of component conditions observed + Conditions []ComponentCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,2,rep,name=conditions"` +} + +// Status of all the conditions for the component as a list of ComponentStatus objects. +type ComponentStatusList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of ComponentStatus objects. + Items []ComponentStatus `json:"items" protobuf:"bytes,2,rep,name=items"` +} + +// DownwardAPIVolumeSource represents a volume containing downward API info. +// Downward API volumes support ownership management and SELinux relabeling. +type DownwardAPIVolumeSource struct { + // Items is a list of downward API volume file + Items []DownwardAPIVolumeFile `json:"items,omitempty" protobuf:"bytes,1,rep,name=items"` + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"varint,2,opt,name=defaultMode"` +} + +const ( + DownwardAPIVolumeSourceDefaultMode int32 = 0644 +) + +// DownwardAPIVolumeFile represents information to create the file containing the pod field +type DownwardAPIVolumeFile struct { + // Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..' + Path string `json:"path" protobuf:"bytes,1,opt,name=path"` + // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported. + FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty" protobuf:"bytes,2,opt,name=fieldRef"` + // Selects a resource of the container: only resources limits and requests + // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. + ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty" protobuf:"bytes,3,opt,name=resourceFieldRef"` + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty" protobuf:"varint,4,opt,name=mode"` +} + +// SecurityContext holds security configuration that will be applied to a container. +// Some fields are present in both SecurityContext and PodSecurityContext. When both +// are set, the values in SecurityContext take precedence. +type SecurityContext struct { + // The capabilities to add/drop when running containers. + // Defaults to the default set of capabilities granted by the container runtime. + Capabilities *Capabilities `json:"capabilities,omitempty" protobuf:"bytes,1,opt,name=capabilities"` + // Run container in privileged mode. + // Processes in privileged containers are essentially equivalent to root on the host. + // Defaults to false. + Privileged *bool `json:"privileged,omitempty" protobuf:"varint,2,opt,name=privileged"` + // The SELinux context to be applied to the container. + // If unspecified, the container runtime will allocate a random SELinux context for each + // container. May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + SELinuxOptions *SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,3,opt,name=seLinuxOptions"` + // The UID to run the entrypoint of the container process. + // Defaults to user specified in image metadata if unspecified. + // May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + RunAsUser *int64 `json:"runAsUser,omitempty" protobuf:"varint,4,opt,name=runAsUser"` + // Indicates that the container must run as a non-root user. + // If true, the Kubelet will validate the image at runtime to ensure that it + // does not run as UID 0 (root) and fail to start the container if it does. + // If unset or false, no such validation will be performed. + // May also be set in PodSecurityContext. If set in both SecurityContext and + // PodSecurityContext, the value specified in SecurityContext takes precedence. + RunAsNonRoot *bool `json:"runAsNonRoot,omitempty" protobuf:"varint,5,opt,name=runAsNonRoot"` + // Whether this container has a read-only root filesystem. + // Default is false. + ReadOnlyRootFilesystem *bool `json:"readOnlyRootFilesystem,omitempty" protobuf:"varint,6,opt,name=readOnlyRootFilesystem"` +} + +// SELinuxOptions are the labels to be applied to the container +type SELinuxOptions struct { + // User is a SELinux user label that applies to the container. + User string `json:"user,omitempty" protobuf:"bytes,1,opt,name=user"` + // Role is a SELinux role label that applies to the container. + Role string `json:"role,omitempty" protobuf:"bytes,2,opt,name=role"` + // Type is a SELinux type label that applies to the container. + Type string `json:"type,omitempty" protobuf:"bytes,3,opt,name=type"` + // Level is SELinux level label that applies to the container. + Level string `json:"level,omitempty" protobuf:"bytes,4,opt,name=level"` +} + +// RangeAllocation is not a public type. +type RangeAllocation struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Range is string that identifies the range represented by 'data'. + Range string `json:"range" protobuf:"bytes,2,opt,name=range"` + // Data is a bit array containing all allocated addresses in the previous segment. + Data []byte `json:"data" protobuf:"bytes,3,opt,name=data"` +} + +const ( + // "default-scheduler" is the name of default scheduler. + DefaultSchedulerName = "default-scheduler" +) diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/types_swagger_doc_generated.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/types_swagger_doc_generated.go new file mode 100644 index 00000000..8e895410 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/types_swagger_doc_generated.go @@ -0,0 +1,1811 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_AWSElasticBlockStoreVolumeSource = map[string]string{ + "": "Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.", + "volumeID": "Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", + "partition": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).", + "readOnly": "Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", +} + +func (AWSElasticBlockStoreVolumeSource) SwaggerDoc() map[string]string { + return map_AWSElasticBlockStoreVolumeSource +} + +var map_Affinity = map[string]string{ + "": "Affinity is a group of affinity scheduling rules.", + "nodeAffinity": "Describes node affinity scheduling rules for the pod.", + "podAffinity": "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).", + "podAntiAffinity": "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).", +} + +func (Affinity) SwaggerDoc() map[string]string { + return map_Affinity +} + +var map_AttachedVolume = map[string]string{ + "": "AttachedVolume describes a volume attached to a node", + "name": "Name of the attached volume", + "devicePath": "DevicePath represents the device path where the volume should be avilable", +} + +func (AttachedVolume) SwaggerDoc() map[string]string { + return map_AttachedVolume +} + +var map_AvoidPods = map[string]string{ + "": "AvoidPods describes pods that should avoid this node. This is the value for a Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and will eventually become a field of NodeStatus.", + "preferAvoidPods": "Bounded-sized list of signatures of pods that should avoid this node, sorted in timestamp order from oldest to newest. Size of the slice is unspecified.", +} + +func (AvoidPods) SwaggerDoc() map[string]string { + return map_AvoidPods +} + +var map_AzureDiskVolumeSource = map[string]string{ + "": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", + "diskName": "The Name of the data disk in the blob storage", + "diskURI": "The URI the data disk in the blob storage", + "cachingMode": "Host Caching mode: None, Read Only, Read Write.", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", +} + +func (AzureDiskVolumeSource) SwaggerDoc() map[string]string { + return map_AzureDiskVolumeSource +} + +var map_AzureFileVolumeSource = map[string]string{ + "": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + "secretName": "the name of secret that contains Azure Storage Account Name and Key", + "shareName": "Share Name", + "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", +} + +func (AzureFileVolumeSource) SwaggerDoc() map[string]string { + return map_AzureFileVolumeSource +} + +var map_Binding = map[string]string{ + "": "Binding ties one object to another. For example, a pod is bound to a node by a scheduler.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "target": "The target object that you want to bind to the standard object.", +} + +func (Binding) SwaggerDoc() map[string]string { + return map_Binding +} + +var map_Capabilities = map[string]string{ + "": "Adds and removes POSIX capabilities from running containers.", + "add": "Added capabilities", + "drop": "Removed capabilities", +} + +func (Capabilities) SwaggerDoc() map[string]string { + return map_Capabilities +} + +var map_CephFSVolumeSource = map[string]string{ + "": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", + "monitors": "Required: Monitors is a collection of Ceph monitors More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", + "path": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", + "user": "Optional: User is the rados user name, default is admin More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", + "secretFile": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", + "secretRef": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", +} + +func (CephFSVolumeSource) SwaggerDoc() map[string]string { + return map_CephFSVolumeSource +} + +var map_CinderVolumeSource = map[string]string{ + "": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", + "volumeID": "volume id used to identify the volume in cinder More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", +} + +func (CinderVolumeSource) SwaggerDoc() map[string]string { + return map_CinderVolumeSource +} + +var map_ComponentCondition = map[string]string{ + "": "Information about the condition of a component.", + "type": "Type of condition for a component. Valid value: \"Healthy\"", + "status": "Status of the condition for a component. Valid values for \"Healthy\": \"True\", \"False\", or \"Unknown\".", + "message": "Message about the condition for a component. For example, information about a health check.", + "error": "Condition error code for a component. For example, a health check error code.", +} + +func (ComponentCondition) SwaggerDoc() map[string]string { + return map_ComponentCondition +} + +var map_ComponentStatus = map[string]string{ + "": "ComponentStatus (and ComponentStatusList) holds the cluster validation info.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "conditions": "List of component conditions observed", +} + +func (ComponentStatus) SwaggerDoc() map[string]string { + return map_ComponentStatus +} + +var map_ComponentStatusList = map[string]string{ + "": "Status of all the conditions for the component as a list of ComponentStatus objects.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of ComponentStatus objects.", +} + +func (ComponentStatusList) SwaggerDoc() map[string]string { + return map_ComponentStatusList +} + +var map_ConfigMap = map[string]string{ + "": "ConfigMap holds configuration data for pods to consume.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "data": "Data contains the configuration data. Each key must be a valid DNS_SUBDOMAIN with an optional leading dot.", +} + +func (ConfigMap) SwaggerDoc() map[string]string { + return map_ConfigMap +} + +var map_ConfigMapKeySelector = map[string]string{ + "": "Selects a key from a ConfigMap.", + "key": "The key to select.", +} + +func (ConfigMapKeySelector) SwaggerDoc() map[string]string { + return map_ConfigMapKeySelector +} + +var map_ConfigMapList = map[string]string{ + "": "ConfigMapList is a resource containing a list of ConfigMap objects.", + "metadata": "More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "items": "Items is the list of ConfigMaps.", +} + +func (ConfigMapList) SwaggerDoc() map[string]string { + return map_ConfigMapList +} + +var map_ConfigMapVolumeSource = map[string]string{ + "": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", + "items": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", +} + +func (ConfigMapVolumeSource) SwaggerDoc() map[string]string { + return map_ConfigMapVolumeSource +} + +var map_Container = map[string]string{ + "": "A single application container that you want to run within a pod.", + "name": "Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.", + "image": "Docker image name. More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md", + "command": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands", + "args": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands", + "workingDir": "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", + "ports": "List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.", + "env": "List of environment variables to set in the container. Cannot be updated.", + "resources": "Compute Resources required by this container. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources", + "volumeMounts": "Pod volumes to mount into the container's filesystem. Cannot be updated.", + "livenessProbe": "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes", + "readinessProbe": "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes", + "lifecycle": "Actions that the management system should take in response to container lifecycle events. Cannot be updated.", + "terminationMessagePath": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Defaults to /dev/termination-log. Cannot be updated.", + "imagePullPolicy": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#updating-images", + "securityContext": "Security options the pod should run with. More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md", + "stdin": "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", + "stdinOnce": "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", + "tty": "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", +} + +func (Container) SwaggerDoc() map[string]string { + return map_Container +} + +var map_ContainerImage = map[string]string{ + "": "Describe a container image", + "names": "Names by which this image is known. e.g. [\"gcr.io/google_containers/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]", + "sizeBytes": "The size of the image in bytes.", +} + +func (ContainerImage) SwaggerDoc() map[string]string { + return map_ContainerImage +} + +var map_ContainerPort = map[string]string{ + "": "ContainerPort represents a network port in a single container.", + "name": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "hostPort": "Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.", + "containerPort": "Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.", + "protocol": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "hostIP": "What host IP to bind the external port to.", +} + +func (ContainerPort) SwaggerDoc() map[string]string { + return map_ContainerPort +} + +var map_ContainerState = map[string]string{ + "": "ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.", + "waiting": "Details about a waiting container", + "running": "Details about a running container", + "terminated": "Details about a terminated container", +} + +func (ContainerState) SwaggerDoc() map[string]string { + return map_ContainerState +} + +var map_ContainerStateRunning = map[string]string{ + "": "ContainerStateRunning is a running state of a container.", + "startedAt": "Time at which the container was last (re-)started", +} + +func (ContainerStateRunning) SwaggerDoc() map[string]string { + return map_ContainerStateRunning +} + +var map_ContainerStateTerminated = map[string]string{ + "": "ContainerStateTerminated is a terminated state of a container.", + "exitCode": "Exit status from the last termination of the container", + "signal": "Signal from the last termination of the container", + "reason": "(brief) reason from the last termination of the container", + "message": "Message regarding the last termination of the container", + "startedAt": "Time at which previous execution of the container started", + "finishedAt": "Time at which the container last terminated", + "containerID": "Container's ID in the format 'docker://'", +} + +func (ContainerStateTerminated) SwaggerDoc() map[string]string { + return map_ContainerStateTerminated +} + +var map_ContainerStateWaiting = map[string]string{ + "": "ContainerStateWaiting is a waiting state of a container.", + "reason": "(brief) reason the container is not yet running.", + "message": "Message regarding why the container is not yet running.", +} + +func (ContainerStateWaiting) SwaggerDoc() map[string]string { + return map_ContainerStateWaiting +} + +var map_ContainerStatus = map[string]string{ + "": "ContainerStatus contains details for the current status of this container.", + "name": "This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.", + "state": "Details about the container's current condition.", + "lastState": "Details about the container's last termination condition.", + "ready": "Specifies whether the container has passed its readiness probe.", + "restartCount": "The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.", + "image": "The image the container is running. More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md", + "imageID": "ImageID of the container's image.", + "containerID": "Container's ID in the format 'docker://'. More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#container-information", +} + +func (ContainerStatus) SwaggerDoc() map[string]string { + return map_ContainerStatus +} + +var map_DaemonEndpoint = map[string]string{ + "": "DaemonEndpoint contains information about a single Daemon endpoint.", + "Port": "Port number of the given endpoint.", +} + +func (DaemonEndpoint) SwaggerDoc() map[string]string { + return map_DaemonEndpoint +} + +var map_DeleteOptions = map[string]string{ + "": "DeleteOptions may be provided when deleting an API object", + "gracePeriodSeconds": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", + "preconditions": "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", + "orphanDependents": "Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list.", +} + +func (DeleteOptions) SwaggerDoc() map[string]string { + return map_DeleteOptions +} + +var map_DownwardAPIVolumeFile = map[string]string{ + "": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "path": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "fieldRef": "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.", + "resourceFieldRef": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", + "mode": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", +} + +func (DownwardAPIVolumeFile) SwaggerDoc() map[string]string { + return map_DownwardAPIVolumeFile +} + +var map_DownwardAPIVolumeSource = map[string]string{ + "": "DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.", + "items": "Items is a list of downward API volume file", + "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", +} + +func (DownwardAPIVolumeSource) SwaggerDoc() map[string]string { + return map_DownwardAPIVolumeSource +} + +var map_EmptyDirVolumeSource = map[string]string{ + "": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", + "medium": "What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir", +} + +func (EmptyDirVolumeSource) SwaggerDoc() map[string]string { + return map_EmptyDirVolumeSource +} + +var map_EndpointAddress = map[string]string{ + "": "EndpointAddress is a tuple that describes single IP address.", + "ip": "The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.", + "hostname": "The Hostname of this endpoint", + "nodeName": "Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.", + "targetRef": "Reference to object providing the endpoint.", +} + +func (EndpointAddress) SwaggerDoc() map[string]string { + return map_EndpointAddress +} + +var map_EndpointPort = map[string]string{ + "": "EndpointPort is a tuple that describes a single port.", + "name": "The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.", + "port": "The port number of the endpoint.", + "protocol": "The IP protocol for this port. Must be UDP or TCP. Default is TCP.", +} + +func (EndpointPort) SwaggerDoc() map[string]string { + return map_EndpointPort +} + +var map_EndpointSubset = map[string]string{ + "": "EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n }\nThe resulting set of endpoints can be viewed as:\n a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n b: [ 10.10.1.1:309, 10.10.2.2:309 ]", + "addresses": "IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.", + "notReadyAddresses": "IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.", + "ports": "Port numbers available on the related IP addresses.", +} + +func (EndpointSubset) SwaggerDoc() map[string]string { + return map_EndpointSubset +} + +var map_Endpoints = map[string]string{ + "": "Endpoints is a collection of endpoints that implement the actual service. Example:\n Name: \"mysvc\",\n Subsets: [\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n },\n {\n Addresses: [{\"ip\": \"10.10.3.3\"}],\n Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n },\n ]", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "subsets": "The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.", +} + +func (Endpoints) SwaggerDoc() map[string]string { + return map_Endpoints +} + +var map_EndpointsList = map[string]string{ + "": "EndpointsList is a list of endpoints.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of endpoints.", +} + +func (EndpointsList) SwaggerDoc() map[string]string { + return map_EndpointsList +} + +var map_EnvVar = map[string]string{ + "": "EnvVar represents an environment variable present in a Container.", + "name": "Name of the environment variable. Must be a C_IDENTIFIER.", + "value": "Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".", + "valueFrom": "Source for the environment variable's value. Cannot be used if value is not empty.", +} + +func (EnvVar) SwaggerDoc() map[string]string { + return map_EnvVar +} + +var map_EnvVarSource = map[string]string{ + "": "EnvVarSource represents a source for the value of an EnvVar.", + "fieldRef": "Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.podIP.", + "resourceFieldRef": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", + "configMapKeyRef": "Selects a key of a ConfigMap.", + "secretKeyRef": "Selects a key of a secret in the pod's namespace", +} + +func (EnvVarSource) SwaggerDoc() map[string]string { + return map_EnvVarSource +} + +var map_Event = map[string]string{ + "": "Event is a report of an event somewhere in the cluster.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "involvedObject": "The object that this event is about.", + "reason": "This should be a short, machine understandable string that gives the reason for the transition into the object's current status.", + "message": "A human-readable description of the status of this operation.", + "source": "The component reporting this event. Should be a short machine understandable string.", + "firstTimestamp": "The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)", + "lastTimestamp": "The time at which the most recent occurrence of this event was recorded.", + "count": "The number of times this event has occurred.", + "type": "Type of this event (Normal, Warning), new types could be added in the future", +} + +func (Event) SwaggerDoc() map[string]string { + return map_Event +} + +var map_EventList = map[string]string{ + "": "EventList is a list of events.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of events", +} + +func (EventList) SwaggerDoc() map[string]string { + return map_EventList +} + +var map_EventSource = map[string]string{ + "": "EventSource contains information for an event.", + "component": "Component from which the event is generated.", + "host": "Host name on which the event is generated.", +} + +func (EventSource) SwaggerDoc() map[string]string { + return map_EventSource +} + +var map_ExecAction = map[string]string{ + "": "ExecAction describes a \"run in container\" action.", + "command": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", +} + +func (ExecAction) SwaggerDoc() map[string]string { + return map_ExecAction +} + +var map_ExportOptions = map[string]string{ + "": "ExportOptions is the query options to the standard REST get call.", + "export": "Should this value be exported. Export strips fields that a user can not specify.", + "exact": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'", +} + +func (ExportOptions) SwaggerDoc() map[string]string { + return map_ExportOptions +} + +var map_FCVolumeSource = map[string]string{ + "": "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.", + "targetWWNs": "Required: FC target worldwide names (WWNs)", + "lun": "Required: FC target lun number", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", +} + +func (FCVolumeSource) SwaggerDoc() map[string]string { + return map_FCVolumeSource +} + +var map_FlexVolumeSource = map[string]string{ + "": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", + "driver": "Driver is the name of the driver to use for this volume.", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", + "secretRef": "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + "options": "Optional: Extra command options if any.", +} + +func (FlexVolumeSource) SwaggerDoc() map[string]string { + return map_FlexVolumeSource +} + +var map_FlockerVolumeSource = map[string]string{ + "": "Represents a Flocker volume mounted by the Flocker agent. Flocker volumes do not support ownership management or SELinux relabeling.", + "datasetName": "Required: the volume name. This is going to be store on metadata -> name on the payload for Flocker", +} + +func (FlockerVolumeSource) SwaggerDoc() map[string]string { + return map_FlockerVolumeSource +} + +var map_GCEPersistentDiskVolumeSource = map[string]string{ + "": "Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.", + "pdName": "Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "partition": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", +} + +func (GCEPersistentDiskVolumeSource) SwaggerDoc() map[string]string { + return map_GCEPersistentDiskVolumeSource +} + +var map_GitRepoVolumeSource = map[string]string{ + "": "Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.", + "repository": "Repository URL", + "revision": "Commit hash for the specified revision.", + "directory": "Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.", +} + +func (GitRepoVolumeSource) SwaggerDoc() map[string]string { + return map_GitRepoVolumeSource +} + +var map_GlusterfsVolumeSource = map[string]string{ + "": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", + "endpoints": "EndpointsName is the endpoint name that details Glusterfs topology. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod", + "path": "Path is the Glusterfs volume path. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod", + "readOnly": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod", +} + +func (GlusterfsVolumeSource) SwaggerDoc() map[string]string { + return map_GlusterfsVolumeSource +} + +var map_HTTPGetAction = map[string]string{ + "": "HTTPGetAction describes an action based on HTTP Get requests.", + "path": "Path to access on the HTTP server.", + "port": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "host": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "scheme": "Scheme to use for connecting to the host. Defaults to HTTP.", + "httpHeaders": "Custom headers to set in the request. HTTP allows repeated headers.", +} + +func (HTTPGetAction) SwaggerDoc() map[string]string { + return map_HTTPGetAction +} + +var map_HTTPHeader = map[string]string{ + "": "HTTPHeader describes a custom header to be used in HTTP probes", + "name": "The header field name", + "value": "The header field value", +} + +func (HTTPHeader) SwaggerDoc() map[string]string { + return map_HTTPHeader +} + +var map_Handler = map[string]string{ + "": "Handler defines a specific action that should be taken", + "exec": "One and only one of the following should be specified. Exec specifies the action to take.", + "httpGet": "HTTPGet specifies the http request to perform.", + "tcpSocket": "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", +} + +func (Handler) SwaggerDoc() map[string]string { + return map_Handler +} + +var map_HostPathVolumeSource = map[string]string{ + "": "Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.", + "path": "Path of the directory on the host. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath", +} + +func (HostPathVolumeSource) SwaggerDoc() map[string]string { + return map_HostPathVolumeSource +} + +var map_ISCSIVolumeSource = map[string]string{ + "": "Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.", + "targetPortal": "iSCSI target portal. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", + "iqn": "Target iSCSI Qualified Name.", + "lun": "iSCSI target lun number.", + "iscsiInterface": "Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#iscsi", + "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", +} + +func (ISCSIVolumeSource) SwaggerDoc() map[string]string { + return map_ISCSIVolumeSource +} + +var map_KeyToPath = map[string]string{ + "": "Maps a string key to a path within a volume.", + "key": "The key to project.", + "path": "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.", + "mode": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", +} + +func (KeyToPath) SwaggerDoc() map[string]string { + return map_KeyToPath +} + +var map_Lifecycle = map[string]string{ + "": "Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.", + "postStart": "PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details", + "preStop": "PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details", +} + +func (Lifecycle) SwaggerDoc() map[string]string { + return map_Lifecycle +} + +var map_LimitRange = map[string]string{ + "": "LimitRange sets resource usage limits for each kind of resource in a Namespace.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the limits enforced. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (LimitRange) SwaggerDoc() map[string]string { + return map_LimitRange +} + +var map_LimitRangeItem = map[string]string{ + "": "LimitRangeItem defines a min/max usage limit for any resource that matches on kind.", + "type": "Type of resource that this limit applies to.", + "max": "Max usage constraints on this kind by resource name.", + "min": "Min usage constraints on this kind by resource name.", + "default": "Default resource requirement limit value by resource name if resource limit is omitted.", + "defaultRequest": "DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.", + "maxLimitRequestRatio": "MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.", +} + +func (LimitRangeItem) SwaggerDoc() map[string]string { + return map_LimitRangeItem +} + +var map_LimitRangeList = map[string]string{ + "": "LimitRangeList is a list of LimitRange items.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "Items is a list of LimitRange objects. More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_limit_range.md", +} + +func (LimitRangeList) SwaggerDoc() map[string]string { + return map_LimitRangeList +} + +var map_LimitRangeSpec = map[string]string{ + "": "LimitRangeSpec defines a min/max usage limit for resources that match on kind.", + "limits": "Limits is the list of LimitRangeItem objects that are enforced.", +} + +func (LimitRangeSpec) SwaggerDoc() map[string]string { + return map_LimitRangeSpec +} + +var map_List = map[string]string{ + "": "List holds a list of objects, which may not be known by the server.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of objects", +} + +func (List) SwaggerDoc() map[string]string { + return map_List +} + +var map_ListOptions = map[string]string{ + "": "ListOptions is the query options to a standard REST list call.", + "labelSelector": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "fieldSelector": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "watch": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "resourceVersion": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history.", + "timeoutSeconds": "Timeout for the list/watch call.", +} + +func (ListOptions) SwaggerDoc() map[string]string { + return map_ListOptions +} + +var map_LoadBalancerIngress = map[string]string{ + "": "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.", + "ip": "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)", + "hostname": "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)", +} + +func (LoadBalancerIngress) SwaggerDoc() map[string]string { + return map_LoadBalancerIngress +} + +var map_LoadBalancerStatus = map[string]string{ + "": "LoadBalancerStatus represents the status of a load-balancer.", + "ingress": "Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.", +} + +func (LoadBalancerStatus) SwaggerDoc() map[string]string { + return map_LoadBalancerStatus +} + +var map_LocalObjectReference = map[string]string{ + "": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "name": "Name of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", +} + +func (LocalObjectReference) SwaggerDoc() map[string]string { + return map_LocalObjectReference +} + +var map_NFSVolumeSource = map[string]string{ + "": "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.", + "server": "Server is the hostname or IP address of the NFS server. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", + "path": "Path that is exported by the NFS server. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", + "readOnly": "ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", +} + +func (NFSVolumeSource) SwaggerDoc() map[string]string { + return map_NFSVolumeSource +} + +var map_Namespace = map[string]string{ + "": "Namespace provides a scope for Names. Use of multiple namespaces is optional.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the behavior of the Namespace. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status describes the current status of a Namespace. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (Namespace) SwaggerDoc() map[string]string { + return map_Namespace +} + +var map_NamespaceList = map[string]string{ + "": "NamespaceList is a list of Namespaces.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "Items is the list of Namespace objects in the list. More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md", +} + +func (NamespaceList) SwaggerDoc() map[string]string { + return map_NamespaceList +} + +var map_NamespaceSpec = map[string]string{ + "": "NamespaceSpec describes the attributes on a Namespace.", + "finalizers": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#finalizers", +} + +func (NamespaceSpec) SwaggerDoc() map[string]string { + return map_NamespaceSpec +} + +var map_NamespaceStatus = map[string]string{ + "": "NamespaceStatus is information about the current status of a Namespace.", + "phase": "Phase is the current lifecycle phase of the namespace. More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#phases", +} + +func (NamespaceStatus) SwaggerDoc() map[string]string { + return map_NamespaceStatus +} + +var map_Node = map[string]string{ + "": "Node is a worker node in Kubernetes, formerly known as minion. Each node will have a unique identifier in the cache (i.e. in etcd).", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the behavior of a node. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the node. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (Node) SwaggerDoc() map[string]string { + return map_Node +} + +var map_NodeAddress = map[string]string{ + "": "NodeAddress contains information for the node's address.", + "type": "Node address type, one of Hostname, ExternalIP or InternalIP.", + "address": "The node address.", +} + +func (NodeAddress) SwaggerDoc() map[string]string { + return map_NodeAddress +} + +var map_NodeAffinity = map[string]string{ + "": "Node affinity is a group of node affinity scheduling rules.", + "requiredDuringSchedulingIgnoredDuringExecution": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", + "preferredDuringSchedulingIgnoredDuringExecution": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", +} + +func (NodeAffinity) SwaggerDoc() map[string]string { + return map_NodeAffinity +} + +var map_NodeCondition = map[string]string{ + "": "NodeCondition contains condition information for a node.", + "type": "Type of node condition.", + "status": "Status of the condition, one of True, False, Unknown.", + "lastHeartbeatTime": "Last time we got an update on a given condition.", + "lastTransitionTime": "Last time the condition transit from one status to another.", + "reason": "(brief) reason for the condition's last transition.", + "message": "Human readable message indicating details about last transition.", +} + +func (NodeCondition) SwaggerDoc() map[string]string { + return map_NodeCondition +} + +var map_NodeDaemonEndpoints = map[string]string{ + "": "NodeDaemonEndpoints lists ports opened by daemons running on the Node.", + "kubeletEndpoint": "Endpoint on which Kubelet is listening.", +} + +func (NodeDaemonEndpoints) SwaggerDoc() map[string]string { + return map_NodeDaemonEndpoints +} + +var map_NodeList = map[string]string{ + "": "NodeList is the whole list of all Nodes which have been registered with master.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of nodes", +} + +func (NodeList) SwaggerDoc() map[string]string { + return map_NodeList +} + +var map_NodeProxyOptions = map[string]string{ + "": "NodeProxyOptions is the query options to a Node's proxy call.", + "path": "Path is the URL path to use for the current proxy request to node.", +} + +func (NodeProxyOptions) SwaggerDoc() map[string]string { + return map_NodeProxyOptions +} + +var map_NodeSelector = map[string]string{ + "": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "nodeSelectorTerms": "Required. A list of node selector terms. The terms are ORed.", +} + +func (NodeSelector) SwaggerDoc() map[string]string { + return map_NodeSelector +} + +var map_NodeSelectorRequirement = map[string]string{ + "": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "key": "The label key that the selector applies to.", + "operator": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "values": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", +} + +func (NodeSelectorRequirement) SwaggerDoc() map[string]string { + return map_NodeSelectorRequirement +} + +var map_NodeSelectorTerm = map[string]string{ + "": "A null or empty node selector term matches no objects.", + "matchExpressions": "Required. A list of node selector requirements. The requirements are ANDed.", +} + +func (NodeSelectorTerm) SwaggerDoc() map[string]string { + return map_NodeSelectorTerm +} + +var map_NodeSpec = map[string]string{ + "": "NodeSpec describes the attributes that a node is created with.", + "podCIDR": "PodCIDR represents the pod IP range assigned to the node.", + "externalID": "External ID of the node assigned by some machine database (e.g. a cloud provider). Deprecated.", + "providerID": "ID of the node assigned by the cloud provider in the format: ://", + "unschedulable": "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#manual-node-administration\"`", +} + +func (NodeSpec) SwaggerDoc() map[string]string { + return map_NodeSpec +} + +var map_NodeStatus = map[string]string{ + "": "NodeStatus is information about the current status of a node.", + "capacity": "Capacity represents the total resources of a node. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity for more details.", + "allocatable": "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", + "phase": "NodePhase is the recently observed lifecycle phase of the node. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-phase The field is never populated, and now is deprecated.", + "conditions": "Conditions is an array of current observed node conditions. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-condition", + "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-addresses", + "daemonEndpoints": "Endpoints of daemons running on the Node.", + "nodeInfo": "Set of ids/uuids to uniquely identify the node. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-info", + "images": "List of container images on this node", + "volumesInUse": "List of attachable volumes in use (mounted) by the node.", + "volumesAttached": "List of volumes that are attached to the node.", +} + +func (NodeStatus) SwaggerDoc() map[string]string { + return map_NodeStatus +} + +var map_NodeSystemInfo = map[string]string{ + "": "NodeSystemInfo is a set of ids/uuids to uniquely identify the node.", + "machineID": "Machine ID reported by the node.", + "systemUUID": "System UUID reported by the node.", + "bootID": "Boot ID reported by the node.", + "kernelVersion": "Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).", + "osImage": "OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).", + "containerRuntimeVersion": "ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).", + "kubeletVersion": "Kubelet Version reported by the node.", + "kubeProxyVersion": "KubeProxy Version reported by the node.", + "operatingSystem": "The Operating System reported by the node", + "architecture": "The Architecture reported by the node", +} + +func (NodeSystemInfo) SwaggerDoc() map[string]string { + return map_NodeSystemInfo +} + +var map_ObjectFieldSelector = map[string]string{ + "": "ObjectFieldSelector selects an APIVersioned field of an object.", + "apiVersion": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "fieldPath": "Path of the field to select in the specified API version.", +} + +func (ObjectFieldSelector) SwaggerDoc() map[string]string { + return map_ObjectFieldSelector +} + +var map_ObjectMeta = map[string]string{ + "": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "name": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", + "generateName": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#idempotency", + "namespace": "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md", + "selfLink": "SelfLink is a URL representing this object. Populated by the system. Read-only.", + "uid": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids", + "resourceVersion": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency", + "generation": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "creationTimestamp": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "deletionTimestamp": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource will be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field. Once set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet will send a hard termination signal to the container. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "deletionGracePeriodSeconds": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "labels": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md", + "annotations": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://releases.k8s.io/release-1.4/docs/user-guide/annotations.md", + "ownerReferences": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "finalizers": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.", + "clusterName": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", +} + +func (ObjectMeta) SwaggerDoc() map[string]string { + return map_ObjectMeta +} + +var map_ObjectReference = map[string]string{ + "": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "kind": "Kind of the referent. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "namespace": "Namespace of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md", + "name": "Name of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", + "uid": "UID of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids", + "apiVersion": "API version of the referent.", + "resourceVersion": "Specific resourceVersion to which this reference is made, if any. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency", + "fieldPath": "If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.", +} + +func (ObjectReference) SwaggerDoc() map[string]string { + return map_ObjectReference +} + +var map_OwnerReference = map[string]string{ + "": "OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.", + "apiVersion": "API version of the referent.", + "kind": "Kind of the referent. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "name": "Name of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", + "uid": "UID of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids", + "controller": "If true, this reference points to the managing controller.", +} + +func (OwnerReference) SwaggerDoc() map[string]string { + return map_OwnerReference +} + +var map_PersistentVolume = map[string]string{ + "": "PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes", + "status": "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes", +} + +func (PersistentVolume) SwaggerDoc() map[string]string { + return map_PersistentVolume +} + +var map_PersistentVolumeClaim = map[string]string{ + "": "PersistentVolumeClaim is a user's request for and claim to a persistent volume", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the desired characteristics of a volume requested by a pod author. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "status": "Status represents the current information/status of a persistent volume claim. Read-only. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", +} + +func (PersistentVolumeClaim) SwaggerDoc() map[string]string { + return map_PersistentVolumeClaim +} + +var map_PersistentVolumeClaimList = map[string]string{ + "": "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "A list of persistent volume claims. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", +} + +func (PersistentVolumeClaimList) SwaggerDoc() map[string]string { + return map_PersistentVolumeClaimList +} + +var map_PersistentVolumeClaimSpec = map[string]string{ + "": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "accessModes": "AccessModes contains the desired access modes the volume should have. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1", + "selector": "A label query over volumes to consider for binding.", + "resources": "Resources represents the minimum resources the volume should have. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources", + "volumeName": "VolumeName is the binding reference to the PersistentVolume backing this claim.", +} + +func (PersistentVolumeClaimSpec) SwaggerDoc() map[string]string { + return map_PersistentVolumeClaimSpec +} + +var map_PersistentVolumeClaimStatus = map[string]string{ + "": "PersistentVolumeClaimStatus is the current status of a persistent volume claim.", + "phase": "Phase represents the current phase of PersistentVolumeClaim.", + "accessModes": "AccessModes contains the actual access modes the volume backing the PVC has. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1", + "capacity": "Represents the actual resources of the underlying volume.", +} + +func (PersistentVolumeClaimStatus) SwaggerDoc() map[string]string { + return map_PersistentVolumeClaimStatus +} + +var map_PersistentVolumeClaimVolumeSource = map[string]string{ + "": "PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).", + "claimName": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "readOnly": "Will force the ReadOnly setting in VolumeMounts. Default false.", +} + +func (PersistentVolumeClaimVolumeSource) SwaggerDoc() map[string]string { + return map_PersistentVolumeClaimVolumeSource +} + +var map_PersistentVolumeList = map[string]string{ + "": "PersistentVolumeList is a list of PersistentVolume items.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of persistent volumes. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md", +} + +func (PersistentVolumeList) SwaggerDoc() map[string]string { + return map_PersistentVolumeList +} + +var map_PersistentVolumeSource = map[string]string{ + "": "PersistentVolumeSource is similar to VolumeSource but meant for the administrator who creates PVs. Exactly one of its members must be set.", + "gcePersistentDisk": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "awsElasticBlockStore": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", + "hostPath": "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath", + "glusterfs": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md", + "nfs": "NFS represents an NFS mount on the host. Provisioned by an admin. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", + "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md", + "iscsi": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", + "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", + "cephfs": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", + "fc": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", + "flocker": "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", + "flexVolume": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", + "azureFile": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + "vsphereVolume": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + "quobyte": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", +} + +func (PersistentVolumeSource) SwaggerDoc() map[string]string { + return map_PersistentVolumeSource +} + +var map_PersistentVolumeSpec = map[string]string{ + "": "PersistentVolumeSpec is the specification of a persistent volume.", + "capacity": "A description of the persistent volume's resources and capacity. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity", + "accessModes": "AccessModes contains all ways the volume can be mounted. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes", + "claimRef": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#binding", + "persistentVolumeReclaimPolicy": "What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#recycling-policy", +} + +func (PersistentVolumeSpec) SwaggerDoc() map[string]string { + return map_PersistentVolumeSpec +} + +var map_PersistentVolumeStatus = map[string]string{ + "": "PersistentVolumeStatus is the current status of a persistent volume.", + "phase": "Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#phase", + "message": "A human-readable message indicating details about why the volume is in this state.", + "reason": "Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", +} + +func (PersistentVolumeStatus) SwaggerDoc() map[string]string { + return map_PersistentVolumeStatus +} + +var map_Pod = map[string]string{ + "": "Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the pod. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (Pod) SwaggerDoc() map[string]string { + return map_Pod +} + +var map_PodAffinity = map[string]string{ + "": "Pod affinity is a group of inter pod affinity scheduling rules.", + "requiredDuringSchedulingIgnoredDuringExecution": "NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "preferredDuringSchedulingIgnoredDuringExecution": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", +} + +func (PodAffinity) SwaggerDoc() map[string]string { + return map_PodAffinity +} + +var map_PodAffinityTerm = map[string]string{ + "": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key tches that of any node on which a pod of the set of pods is running", + "labelSelector": "A label query over a set of resources, in this case pods.", + "namespaces": "namespaces specifies which namespaces the labelSelector applies to (matches against); nil list means \"this pod's namespace,\" empty list means \"all namespaces\" The json tag here is not \"omitempty\" since we need to distinguish nil and empty. See https://golang.org/pkg/encoding/json/#Marshal for more details.", + "topologyKey": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as \"all topologies\" (\"all topologies\" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.", +} + +func (PodAffinityTerm) SwaggerDoc() map[string]string { + return map_PodAffinityTerm +} + +var map_PodAntiAffinity = map[string]string{ + "": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "requiredDuringSchedulingIgnoredDuringExecution": "NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm `json:\"requiredDuringSchedulingRequiredDuringExecution,omitempty\"` If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "preferredDuringSchedulingIgnoredDuringExecution": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", +} + +func (PodAntiAffinity) SwaggerDoc() map[string]string { + return map_PodAntiAffinity +} + +var map_PodAttachOptions = map[string]string{ + "": "PodAttachOptions is the query options to a Pod's remote attach call.", + "stdin": "Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false.", + "stdout": "Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true.", + "stderr": "Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true.", + "tty": "TTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false.", + "container": "The container in which to execute the command. Defaults to only container if there is only one container in the pod.", +} + +func (PodAttachOptions) SwaggerDoc() map[string]string { + return map_PodAttachOptions +} + +var map_PodCondition = map[string]string{ + "": "PodCondition contains details for the current condition of this pod.", + "type": "Type is the type of the condition. Currently only Ready. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions", + "status": "Status is the status of the condition. Can be True, False, Unknown. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions", + "lastProbeTime": "Last time we probed the condition.", + "lastTransitionTime": "Last time the condition transitioned from one status to another.", + "reason": "Unique, one-word, CamelCase reason for the condition's last transition.", + "message": "Human-readable message indicating details about last transition.", +} + +func (PodCondition) SwaggerDoc() map[string]string { + return map_PodCondition +} + +var map_PodExecOptions = map[string]string{ + "": "PodExecOptions is the query options to a Pod's remote exec call.", + "stdin": "Redirect the standard input stream of the pod for this call. Defaults to false.", + "stdout": "Redirect the standard output stream of the pod for this call. Defaults to true.", + "stderr": "Redirect the standard error stream of the pod for this call. Defaults to true.", + "tty": "TTY if true indicates that a tty will be allocated for the exec call. Defaults to false.", + "container": "Container in which to execute the command. Defaults to only container if there is only one container in the pod.", + "command": "Command is the remote command to execute. argv array. Not executed within a shell.", +} + +func (PodExecOptions) SwaggerDoc() map[string]string { + return map_PodExecOptions +} + +var map_PodList = map[string]string{ + "": "PodList is a list of Pods.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of pods. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pods.md", +} + +func (PodList) SwaggerDoc() map[string]string { + return map_PodList +} + +var map_PodLogOptions = map[string]string{ + "": "PodLogOptions is the query options for a Pod's logs REST call.", + "container": "The container for which to stream logs. Defaults to only container if there is one container in the pod.", + "follow": "Follow the log stream of the pod. Defaults to false.", + "previous": "Return previous terminated container logs. Defaults to false.", + "sinceSeconds": "A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", + "sinceTime": "An RFC3339 timestamp from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", + "timestamps": "If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.", + "tailLines": "If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime", + "limitBytes": "If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.", +} + +func (PodLogOptions) SwaggerDoc() map[string]string { + return map_PodLogOptions +} + +var map_PodProxyOptions = map[string]string{ + "": "PodProxyOptions is the query options to a Pod's proxy call.", + "path": "Path is the URL path to use for the current proxy request to pod.", +} + +func (PodProxyOptions) SwaggerDoc() map[string]string { + return map_PodProxyOptions +} + +var map_PodSecurityContext = map[string]string{ + "": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", + "seLinuxOptions": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + "runAsUser": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", + "runAsNonRoot": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + "supplementalGroups": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.", + "fsGroup": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw ", +} + +func (PodSecurityContext) SwaggerDoc() map[string]string { + return map_PodSecurityContext +} + +var map_PodSignature = map[string]string{ + "": "Describes the class of pods that should avoid this node. Exactly one field should be set.", + "podController": "Reference to controller whose pods should avoid this node.", +} + +func (PodSignature) SwaggerDoc() map[string]string { + return map_PodSignature +} + +var map_PodSpec = map[string]string{ + "": "PodSpec is a description of a pod.", + "volumes": "List of volumes that can be mounted by containers belonging to the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md", + "containers": "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md", + "restartPolicy": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#restartpolicy", + "terminationGracePeriodSeconds": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", + "activeDeadlineSeconds": "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.", + "dnsPolicy": "Set DNS policy for containers within the pod. One of 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\".", + "nodeSelector": "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: http://releases.k8s.io/release-1.4/docs/user-guide/node-selection/README.md", + "serviceAccountName": "ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md", + "serviceAccount": "DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.", + "nodeName": "NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.", + "hostNetwork": "Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.", + "hostPID": "Use the host's pid namespace. Optional: Default to false.", + "hostIPC": "Use the host's ipc namespace. Optional: Default to false.", + "securityContext": "SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.", + "imagePullSecrets": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod", + "hostname": "Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.", + "subdomain": "If specified, the fully qualified Pod hostname will be \"...svc.\". If not specified, the pod will not have a domainname at all.", +} + +func (PodSpec) SwaggerDoc() map[string]string { + return map_PodSpec +} + +var map_PodStatus = map[string]string{ + "": "PodStatus represents information about the status of a pod. Status may trail the actual state of a system.", + "phase": "Current condition of the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-phase", + "conditions": "Current service state of pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions", + "message": "A human readable message indicating details about why the pod is in this condition.", + "reason": "A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk'", + "hostIP": "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", + "podIP": "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", + "startTime": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", + "containerStatuses": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-statuses", +} + +func (PodStatus) SwaggerDoc() map[string]string { + return map_PodStatus +} + +var map_PodStatusResult = map[string]string{ + "": "PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (PodStatusResult) SwaggerDoc() map[string]string { + return map_PodStatusResult +} + +var map_PodTemplate = map[string]string{ + "": "PodTemplate describes a template for creating copies of a predefined pod.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "template": "Template defines the pods that will be created from this pod template. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (PodTemplate) SwaggerDoc() map[string]string { + return map_PodTemplate +} + +var map_PodTemplateList = map[string]string{ + "": "PodTemplateList is a list of PodTemplates.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of pod templates", +} + +func (PodTemplateList) SwaggerDoc() map[string]string { + return map_PodTemplateList +} + +var map_PodTemplateSpec = map[string]string{ + "": "PodTemplateSpec describes the data a pod should have when created from a template", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the pod. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (PodTemplateSpec) SwaggerDoc() map[string]string { + return map_PodTemplateSpec +} + +var map_Preconditions = map[string]string{ + "": "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", + "uid": "Specifies the target UID.", +} + +func (Preconditions) SwaggerDoc() map[string]string { + return map_Preconditions +} + +var map_PreferAvoidPodsEntry = map[string]string{ + "": "Describes a class of pods that should avoid this node.", + "podSignature": "The class of pods.", + "evictionTime": "Time at which this entry was added to the list.", + "reason": "(brief) reason why this entry was added to the list.", + "message": "Human readable message indicating why this entry was added to the list.", +} + +func (PreferAvoidPodsEntry) SwaggerDoc() map[string]string { + return map_PreferAvoidPodsEntry +} + +var map_PreferredSchedulingTerm = map[string]string{ + "": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "weight": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "preference": "A node selector term, associated with the corresponding weight.", +} + +func (PreferredSchedulingTerm) SwaggerDoc() map[string]string { + return map_PreferredSchedulingTerm +} + +var map_Probe = map[string]string{ + "": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", + "initialDelaySeconds": "Number of seconds after the container has started before liveness probes are initiated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes", + "timeoutSeconds": "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes", + "periodSeconds": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "successThreshold": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "failureThreshold": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", +} + +func (Probe) SwaggerDoc() map[string]string { + return map_Probe +} + +var map_QuobyteVolumeSource = map[string]string{ + "": "Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.", + "registry": "Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes", + "volume": "Volume is a string that references an already created Quobyte volume by name.", + "readOnly": "ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.", + "user": "User to map volume access to Defaults to serivceaccount user", + "group": "Group to map volume access to Default is no group", +} + +func (QuobyteVolumeSource) SwaggerDoc() map[string]string { + return map_QuobyteVolumeSource +} + +var map_RBDVolumeSource = map[string]string{ + "": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", + "monitors": "A collection of Ceph monitors. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "image": "The rados image name. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#rbd", + "pool": "The rados pool name. Default is rbd. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it.", + "user": "The rados user name. Default is admin. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "keyring": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "secretRef": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", +} + +func (RBDVolumeSource) SwaggerDoc() map[string]string { + return map_RBDVolumeSource +} + +var map_RangeAllocation = map[string]string{ + "": "RangeAllocation is not a public type.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "range": "Range is string that identifies the range represented by 'data'.", + "data": "Data is a bit array containing all allocated addresses in the previous segment.", +} + +func (RangeAllocation) SwaggerDoc() map[string]string { + return map_RangeAllocation +} + +var map_ReplicationController = map[string]string{ + "": "ReplicationController represents the configuration of a replication controller.", + "metadata": "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the specification of the desired behavior of the replication controller. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (ReplicationController) SwaggerDoc() map[string]string { + return map_ReplicationController +} + +var map_ReplicationControllerList = map[string]string{ + "": "ReplicationControllerList is a collection of replication controllers.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of replication controllers. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md", +} + +func (ReplicationControllerList) SwaggerDoc() map[string]string { + return map_ReplicationControllerList +} + +var map_ReplicationControllerSpec = map[string]string{ + "": "ReplicationControllerSpec is the specification of a replication controller.", + "replicas": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller", + "selector": "Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", + "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template", +} + +func (ReplicationControllerSpec) SwaggerDoc() map[string]string { + return map_ReplicationControllerSpec +} + +var map_ReplicationControllerStatus = map[string]string{ + "": "ReplicationControllerStatus represents the current status of a replication controller.", + "replicas": "Replicas is the most recently oberved number of replicas. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller", + "fullyLabeledReplicas": "The number of pods that have labels matching the labels of the pod template of the replication controller.", + "readyReplicas": "The number of ready replicas for this replication controller.", + "observedGeneration": "ObservedGeneration reflects the generation of the most recently observed replication controller.", +} + +func (ReplicationControllerStatus) SwaggerDoc() map[string]string { + return map_ReplicationControllerStatus +} + +var map_ResourceFieldSelector = map[string]string{ + "": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "containerName": "Container name: required for volumes, optional for env vars", + "resource": "Required: resource to select", + "divisor": "Specifies the output format of the exposed resources, defaults to \"1\"", +} + +func (ResourceFieldSelector) SwaggerDoc() map[string]string { + return map_ResourceFieldSelector +} + +var map_ResourceQuota = map[string]string{ + "": "ResourceQuota sets aggregate quota restrictions enforced per namespace", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the desired quota. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status defines the actual enforced quota and its current usage. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (ResourceQuota) SwaggerDoc() map[string]string { + return map_ResourceQuota +} + +var map_ResourceQuotaList = map[string]string{ + "": "ResourceQuotaList is a list of ResourceQuota items.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "Items is a list of ResourceQuota objects. More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", +} + +func (ResourceQuotaList) SwaggerDoc() map[string]string { + return map_ResourceQuotaList +} + +var map_ResourceQuotaSpec = map[string]string{ + "": "ResourceQuotaSpec defines the desired hard limits to enforce for Quota.", + "hard": "Hard is the set of desired hard limits for each named resource. More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", + "scopes": "A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.", +} + +func (ResourceQuotaSpec) SwaggerDoc() map[string]string { + return map_ResourceQuotaSpec +} + +var map_ResourceQuotaStatus = map[string]string{ + "": "ResourceQuotaStatus defines the enforced hard limits and observed use.", + "hard": "Hard is the set of enforced hard limits for each named resource. More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", + "used": "Used is the current observed total usage of the resource in the namespace.", +} + +func (ResourceQuotaStatus) SwaggerDoc() map[string]string { + return map_ResourceQuotaStatus +} + +var map_ResourceRequirements = map[string]string{ + "": "ResourceRequirements describes the compute resource requirements.", + "limits": "Limits describes the maximum amount of compute resources allowed. More info: http://kubernetes.io/docs/user-guide/compute-resources/", + "requests": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: http://kubernetes.io/docs/user-guide/compute-resources/", +} + +func (ResourceRequirements) SwaggerDoc() map[string]string { + return map_ResourceRequirements +} + +var map_SELinuxOptions = map[string]string{ + "": "SELinuxOptions are the labels to be applied to the container", + "user": "User is a SELinux user label that applies to the container.", + "role": "Role is a SELinux role label that applies to the container.", + "type": "Type is a SELinux type label that applies to the container.", + "level": "Level is SELinux level label that applies to the container.", +} + +func (SELinuxOptions) SwaggerDoc() map[string]string { + return map_SELinuxOptions +} + +var map_Secret = map[string]string{ + "": "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "data": "Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", + "stringData": "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", + "type": "Used to facilitate programmatic handling of secret data.", +} + +func (Secret) SwaggerDoc() map[string]string { + return map_Secret +} + +var map_SecretKeySelector = map[string]string{ + "": "SecretKeySelector selects a key of a Secret.", + "key": "The key of the secret to select from. Must be a valid secret key.", +} + +func (SecretKeySelector) SwaggerDoc() map[string]string { + return map_SecretKeySelector +} + +var map_SecretList = map[string]string{ + "": "SecretList is a list of Secret.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "Items is a list of secret objects. More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md", +} + +func (SecretList) SwaggerDoc() map[string]string { + return map_SecretList +} + +var map_SecretVolumeSource = map[string]string{ + "": "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", + "secretName": "Name of the secret in the pod's namespace to use. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets", + "items": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", +} + +func (SecretVolumeSource) SwaggerDoc() map[string]string { + return map_SecretVolumeSource +} + +var map_SecurityContext = map[string]string{ + "": "SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.", + "capabilities": "The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.", + "privileged": "Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.", + "seLinuxOptions": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + "runAsUser": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + "runAsNonRoot": "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", + "readOnlyRootFilesystem": "Whether this container has a read-only root filesystem. Default is false.", +} + +func (SecurityContext) SwaggerDoc() map[string]string { + return map_SecurityContext +} + +var map_SerializedReference = map[string]string{ + "": "SerializedReference is a reference to serialized object.", + "reference": "The reference to an object in the system.", +} + +func (SerializedReference) SwaggerDoc() map[string]string { + return map_SerializedReference +} + +var map_Service = map[string]string{ + "": "Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the behavior of a service. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the service. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", +} + +func (Service) SwaggerDoc() map[string]string { + return map_Service +} + +var map_ServiceAccount = map[string]string{ + "": "ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "secrets": "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md", + "imagePullSecrets": "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret", +} + +func (ServiceAccount) SwaggerDoc() map[string]string { + return map_ServiceAccount +} + +var map_ServiceAccountList = map[string]string{ + "": "ServiceAccountList is a list of ServiceAccount objects", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of ServiceAccounts. More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md#service-accounts", +} + +func (ServiceAccountList) SwaggerDoc() map[string]string { + return map_ServiceAccountList +} + +var map_ServiceList = map[string]string{ + "": "ServiceList holds a list of services.", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of services", +} + +func (ServiceList) SwaggerDoc() map[string]string { + return map_ServiceList +} + +var map_ServicePort = map[string]string{ + "": "ServicePort contains information on service's port.", + "name": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.", + "protocol": "The IP protocol for this port. Supports \"TCP\" and \"UDP\". Default is TCP.", + "port": "The port that will be exposed by this service.", + "targetPort": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#defining-a-service", + "nodePort": "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#type--nodeport", +} + +func (ServicePort) SwaggerDoc() map[string]string { + return map_ServicePort +} + +var map_ServiceProxyOptions = map[string]string{ + "": "ServiceProxyOptions is the query options to a Service's proxy call.", + "path": "Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.", +} + +func (ServiceProxyOptions) SwaggerDoc() map[string]string { + return map_ServiceProxyOptions +} + +var map_ServiceSpec = map[string]string{ + "": "ServiceSpec describes the attributes that a user creates on a service.", + "ports": "The list of ports that are exposed by this service. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies", + "selector": "Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview", + "clusterIP": "clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies", + "type": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview", + "externalIPs": "externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. A previous form of this functionality exists as the deprecatedPublicIPs field. When using this field, callers should also clear the deprecatedPublicIPs field.", + "deprecatedPublicIPs": "deprecatedPublicIPs is deprecated and replaced by the externalIPs field with almost the exact same semantics. This field is retained in the v1 API for compatibility until at least 8/20/2016. It will be removed from any new API revisions. If both deprecatedPublicIPs *and* externalIPs are set, deprecatedPublicIPs is used.", + "sessionAffinity": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies", + "loadBalancerIP": "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.", + "loadBalancerSourceRanges": "If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: http://releases.k8s.io/release-1.4/docs/user-guide/services-firewalls.md", + "externalName": "externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName.", +} + +func (ServiceSpec) SwaggerDoc() map[string]string { + return map_ServiceSpec +} + +var map_ServiceStatus = map[string]string{ + "": "ServiceStatus represents the current status of a service.", + "loadBalancer": "LoadBalancer contains the current status of the load-balancer, if one is present.", +} + +func (ServiceStatus) SwaggerDoc() map[string]string { + return map_ServiceStatus +} + +var map_TCPSocketAction = map[string]string{ + "": "TCPSocketAction describes an action based on opening a socket", + "port": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", +} + +func (TCPSocketAction) SwaggerDoc() map[string]string { + return map_TCPSocketAction +} + +var map_Taint = map[string]string{ + "": "The node this Taint is attached to has the effect \"effect\" on any pod that that does not tolerate the Taint.", + "key": "Required. The taint key to be applied to a node.", + "value": "Required. The taint value corresponding to the taint key.", + "effect": "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule and PreferNoSchedule.", +} + +func (Taint) SwaggerDoc() map[string]string { + return map_Taint +} + +var map_Toleration = map[string]string{ + "": "The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator .", + "key": "Required. Key is the taint key that the toleration applies to.", + "operator": "operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "value": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "effect": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule and PreferNoSchedule.", +} + +func (Toleration) SwaggerDoc() map[string]string { + return map_Toleration +} + +var map_Volume = map[string]string{ + "": "Volume represents a named volume in a pod that may be accessed by any container in the pod.", + "name": "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", +} + +func (Volume) SwaggerDoc() map[string]string { + return map_Volume +} + +var map_VolumeMount = map[string]string{ + "": "VolumeMount describes a mounting of a Volume within a container.", + "name": "This must match the Name of a Volume.", + "readOnly": "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.", + "mountPath": "Path within the container at which the volume should be mounted. Must not contain ':'.", + "subPath": "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).", +} + +func (VolumeMount) SwaggerDoc() map[string]string { + return map_VolumeMount +} + +var map_VolumeSource = map[string]string{ + "": "Represents the source of a volume to mount. Only one of its members may be specified.", + "hostPath": "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath", + "emptyDir": "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir", + "gcePersistentDisk": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "awsElasticBlockStore": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", + "gitRepo": "GitRepo represents a git repository at a particular revision.", + "secret": "Secret represents a secret that should populate this volume. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets", + "nfs": "NFS represents an NFS mount on the host that shares a pod's lifetime More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", + "iscsi": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.4/examples/volumes/iscsi/README.md", + "glusterfs": "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md", + "persistentVolumeClaim": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md", + "flexVolume": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", + "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", + "cephfs": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", + "flocker": "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", + "downwardAPI": "DownwardAPI represents downward API about the pod that should populate this volume", + "fc": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", + "azureFile": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", + "configMap": "ConfigMap represents a configMap that should populate this volume", + "vsphereVolume": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + "quobyte": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", +} + +func (VolumeSource) SwaggerDoc() map[string]string { + return map_VolumeSource +} + +var map_VsphereVirtualDiskVolumeSource = map[string]string{ + "": "Represents a vSphere volume resource.", + "volumePath": "Path that identifies vSphere volume vmdk", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", +} + +func (VsphereVirtualDiskVolumeSource) SwaggerDoc() map[string]string { + return map_VsphereVirtualDiskVolumeSource +} + +var map_WeightedPodAffinityTerm = map[string]string{ + "": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "weight": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "podAffinityTerm": "Required. A pod affinity term, associated with the corresponding weight.", +} + +func (WeightedPodAffinityTerm) SwaggerDoc() map[string]string { + return map_WeightedPodAffinityTerm +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/conversion_generated.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/zz_generated.conversion.go similarity index 94% rename from vendor/k8s.io/kubernetes/pkg/api/v1/conversion_generated.go rename to vendor/k8s.io/client-go/1.4/pkg/api/v1/zz_generated.conversion.go index 67eff6d4..b17859fd 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/conversion_generated.go +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,21 +21,31 @@ limitations under the License. package v1 import ( - api "k8s.io/kubernetes/pkg/api" - resource "k8s.io/kubernetes/pkg/api/resource" - conversion "k8s.io/kubernetes/pkg/conversion" - runtime "k8s.io/kubernetes/pkg/runtime" - types "k8s.io/kubernetes/pkg/types" + api "k8s.io/client-go/1.4/pkg/api" + resource "k8s.io/client-go/1.4/pkg/api/resource" + conversion "k8s.io/client-go/1.4/pkg/conversion" + runtime "k8s.io/client-go/1.4/pkg/runtime" + types "k8s.io/client-go/1.4/pkg/types" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource, Convert_api_AWSElasticBlockStoreVolumeSource_To_v1_AWSElasticBlockStoreVolumeSource, Convert_v1_Affinity_To_api_Affinity, Convert_api_Affinity_To_v1_Affinity, Convert_v1_AttachedVolume_To_api_AttachedVolume, Convert_api_AttachedVolume_To_v1_AttachedVolume, + Convert_v1_AvoidPods_To_api_AvoidPods, + Convert_api_AvoidPods_To_v1_AvoidPods, + Convert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource, + Convert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource, Convert_v1_AzureFileVolumeSource_To_api_AzureFileVolumeSource, Convert_api_AzureFileVolumeSource_To_v1_AzureFileVolumeSource, Convert_v1_Binding_To_api_Binding, @@ -112,8 +122,6 @@ func init() { Convert_api_ExportOptions_To_v1_ExportOptions, Convert_v1_FCVolumeSource_To_api_FCVolumeSource, Convert_api_FCVolumeSource_To_v1_FCVolumeSource, - Convert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions, - Convert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions, Convert_v1_FlexVolumeSource_To_api_FlexVolumeSource, Convert_api_FlexVolumeSource_To_v1_FlexVolumeSource, Convert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource, @@ -132,8 +140,6 @@ func init() { Convert_api_Handler_To_v1_Handler, Convert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource, Convert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource, - Convert_v1_IDRange_To_api_IDRange, - Convert_api_IDRange_To_v1_IDRange, Convert_v1_ISCSIVolumeSource_To_api_ISCSIVolumeSource, Convert_api_ISCSIVolumeSource_To_v1_ISCSIVolumeSource, Convert_v1_KeyToPath_To_api_KeyToPath, @@ -244,6 +250,8 @@ func init() { Convert_api_PodProxyOptions_To_v1_PodProxyOptions, Convert_v1_PodSecurityContext_To_api_PodSecurityContext, Convert_api_PodSecurityContext_To_v1_PodSecurityContext, + Convert_v1_PodSignature_To_api_PodSignature, + Convert_api_PodSignature_To_v1_PodSignature, Convert_v1_PodSpec_To_api_PodSpec, Convert_api_PodSpec_To_v1_PodSpec, Convert_v1_PodStatus_To_api_PodStatus, @@ -258,10 +266,14 @@ func init() { Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec, Convert_v1_Preconditions_To_api_Preconditions, Convert_api_Preconditions_To_v1_Preconditions, + Convert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry, + Convert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry, Convert_v1_PreferredSchedulingTerm_To_api_PreferredSchedulingTerm, Convert_api_PreferredSchedulingTerm_To_v1_PreferredSchedulingTerm, Convert_v1_Probe_To_api_Probe, Convert_api_Probe_To_v1_Probe, + Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource, + Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource, Convert_v1_RBDVolumeSource_To_api_RBDVolumeSource, Convert_api_RBDVolumeSource_To_v1_RBDVolumeSource, Convert_v1_RangeAllocation_To_api_RangeAllocation, @@ -286,10 +298,6 @@ func init() { Convert_api_ResourceQuotaStatus_To_v1_ResourceQuotaStatus, Convert_v1_ResourceRequirements_To_api_ResourceRequirements, Convert_api_ResourceRequirements_To_v1_ResourceRequirements, - Convert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions, - Convert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions, - Convert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions, - Convert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions, Convert_v1_SELinuxOptions_To_api_SELinuxOptions, Convert_api_SELinuxOptions_To_v1_SELinuxOptions, Convert_v1_Secret_To_api_Secret, @@ -302,10 +310,6 @@ func init() { Convert_api_SecretVolumeSource_To_v1_SecretVolumeSource, Convert_v1_SecurityContext_To_api_SecurityContext, Convert_api_SecurityContext_To_v1_SecurityContext, - Convert_v1_SecurityContextConstraints_To_api_SecurityContextConstraints, - Convert_api_SecurityContextConstraints_To_v1_SecurityContextConstraints, - Convert_v1_SecurityContextConstraintsList_To_api_SecurityContextConstraintsList, - Convert_api_SecurityContextConstraintsList_To_v1_SecurityContextConstraintsList, Convert_v1_SerializedReference_To_api_SerializedReference, Convert_api_SerializedReference_To_v1_SerializedReference, Convert_v1_Service_To_api_Service, @@ -324,8 +328,6 @@ func init() { Convert_api_ServiceSpec_To_v1_ServiceSpec, Convert_v1_ServiceStatus_To_api_ServiceStatus, Convert_api_ServiceStatus_To_v1_ServiceStatus, - Convert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions, - Convert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions, Convert_v1_TCPSocketAction_To_api_TCPSocketAction, Convert_api_TCPSocketAction_To_v1_TCPSocketAction, Convert_v1_Taint_To_api_Taint, @@ -342,10 +344,7 @@ func init() { Convert_api_VsphereVirtualDiskVolumeSource_To_v1_VsphereVirtualDiskVolumeSource, Convert_v1_WeightedPodAffinityTerm_To_api_WeightedPodAffinityTerm, Convert_api_WeightedPodAffinityTerm_To_v1_WeightedPodAffinityTerm, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource(in *AWSElasticBlockStoreVolumeSource, out *api.AWSElasticBlockStoreVolumeSource, s conversion.Scope) error { @@ -462,6 +461,83 @@ func Convert_api_AttachedVolume_To_v1_AttachedVolume(in *api.AttachedVolume, out return autoConvert_api_AttachedVolume_To_v1_AttachedVolume(in, out, s) } +func autoConvert_v1_AvoidPods_To_api_AvoidPods(in *AvoidPods, out *api.AvoidPods, s conversion.Scope) error { + if in.PreferAvoidPods != nil { + in, out := &in.PreferAvoidPods, &out.PreferAvoidPods + *out = make([]api.PreferAvoidPodsEntry, len(*in)) + for i := range *in { + if err := Convert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferAvoidPods = nil + } + return nil +} + +func Convert_v1_AvoidPods_To_api_AvoidPods(in *AvoidPods, out *api.AvoidPods, s conversion.Scope) error { + return autoConvert_v1_AvoidPods_To_api_AvoidPods(in, out, s) +} + +func autoConvert_api_AvoidPods_To_v1_AvoidPods(in *api.AvoidPods, out *AvoidPods, s conversion.Scope) error { + if in.PreferAvoidPods != nil { + in, out := &in.PreferAvoidPods, &out.PreferAvoidPods + *out = make([]PreferAvoidPodsEntry, len(*in)) + for i := range *in { + if err := Convert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferAvoidPods = nil + } + return nil +} + +func Convert_api_AvoidPods_To_v1_AvoidPods(in *api.AvoidPods, out *AvoidPods, s conversion.Scope) error { + return autoConvert_api_AvoidPods_To_v1_AvoidPods(in, out, s) +} + +func autoConvert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(in *AzureDiskVolumeSource, out *api.AzureDiskVolumeSource, s conversion.Scope) error { + SetDefaults_AzureDiskVolumeSource(in) + out.DiskName = in.DiskName + out.DataDiskURI = in.DataDiskURI + if in.CachingMode != nil { + in, out := &in.CachingMode, &out.CachingMode + *out = new(api.AzureDataDiskCachingMode) + **out = api.AzureDataDiskCachingMode(**in) + } else { + out.CachingMode = nil + } + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(in *AzureDiskVolumeSource, out *api.AzureDiskVolumeSource, s conversion.Scope) error { + return autoConvert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(in, out, s) +} + +func autoConvert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(in *api.AzureDiskVolumeSource, out *AzureDiskVolumeSource, s conversion.Scope) error { + out.DiskName = in.DiskName + out.DataDiskURI = in.DataDiskURI + if in.CachingMode != nil { + in, out := &in.CachingMode, &out.CachingMode + *out = new(AzureDataDiskCachingMode) + **out = AzureDataDiskCachingMode(**in) + } else { + out.CachingMode = nil + } + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(in *api.AzureDiskVolumeSource, out *AzureDiskVolumeSource, s conversion.Scope) error { + return autoConvert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(in, out, s) +} + func autoConvert_v1_AzureFileVolumeSource_To_api_AzureFileVolumeSource(in *AzureFileVolumeSource, out *api.AzureFileVolumeSource, s conversion.Scope) error { out.SecretName = in.SecretName out.ShareName = in.ShareName @@ -866,6 +942,7 @@ func Convert_api_ConfigMapList_To_v1_ConfigMapList(in *api.ConfigMapList, out *C } func autoConvert_v1_ConfigMapVolumeSource_To_api_ConfigMapVolumeSource(in *ConfigMapVolumeSource, out *api.ConfigMapVolumeSource, s conversion.Scope) error { + SetDefaults_ConfigMapVolumeSource(in) if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { return err } @@ -880,6 +957,7 @@ func autoConvert_v1_ConfigMapVolumeSource_To_api_ConfigMapVolumeSource(in *Confi } else { out.Items = nil } + out.DefaultMode = in.DefaultMode return nil } @@ -902,6 +980,7 @@ func autoConvert_api_ConfigMapVolumeSource_To_v1_ConfigMapVolumeSource(in *api.C } else { out.Items = nil } + out.DefaultMode = in.DefaultMode return nil } @@ -1409,6 +1488,7 @@ func autoConvert_v1_DownwardAPIVolumeFile_To_api_DownwardAPIVolumeFile(in *Downw } else { out.ResourceFieldRef = nil } + out.Mode = in.Mode return nil } @@ -1436,6 +1516,7 @@ func autoConvert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile(in *api.D } else { out.ResourceFieldRef = nil } + out.Mode = in.Mode return nil } @@ -1444,6 +1525,7 @@ func Convert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile(in *api.Downw } func autoConvert_v1_DownwardAPIVolumeSource_To_api_DownwardAPIVolumeSource(in *DownwardAPIVolumeSource, out *api.DownwardAPIVolumeSource, s conversion.Scope) error { + SetDefaults_DownwardAPIVolumeSource(in) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]api.DownwardAPIVolumeFile, len(*in)) @@ -1455,6 +1537,7 @@ func autoConvert_v1_DownwardAPIVolumeSource_To_api_DownwardAPIVolumeSource(in *D } else { out.Items = nil } + out.DefaultMode = in.DefaultMode return nil } @@ -1474,6 +1557,7 @@ func autoConvert_api_DownwardAPIVolumeSource_To_v1_DownwardAPIVolumeSource(in *a } else { out.Items = nil } + out.DefaultMode = in.DefaultMode return nil } @@ -1502,6 +1586,7 @@ func Convert_api_EmptyDirVolumeSource_To_v1_EmptyDirVolumeSource(in *api.EmptyDi func autoConvert_v1_EndpointAddress_To_api_EndpointAddress(in *EndpointAddress, out *api.EndpointAddress, s conversion.Scope) error { out.IP = in.IP out.Hostname = in.Hostname + out.NodeName = in.NodeName if in.TargetRef != nil { in, out := &in.TargetRef, &out.TargetRef *out = new(api.ObjectReference) @@ -1521,6 +1606,7 @@ func Convert_v1_EndpointAddress_To_api_EndpointAddress(in *EndpointAddress, out func autoConvert_api_EndpointAddress_To_v1_EndpointAddress(in *api.EndpointAddress, out *EndpointAddress, s conversion.Scope) error { out.IP = in.IP out.Hostname = in.Hostname + out.NodeName = in.NodeName if in.TargetRef != nil { in, out := &in.TargetRef, &out.TargetRef *out = new(ObjectReference) @@ -1538,7 +1624,6 @@ func Convert_api_EndpointAddress_To_v1_EndpointAddress(in *api.EndpointAddress, } func autoConvert_v1_EndpointPort_To_api_EndpointPort(in *EndpointPort, out *api.EndpointPort, s conversion.Scope) error { - SetDefaults_EndpointPort(in) out.Name = in.Name out.Port = in.Port out.Protocol = api.Protocol(in.Protocol) @@ -2067,46 +2152,6 @@ func Convert_api_FCVolumeSource_To_v1_FCVolumeSource(in *api.FCVolumeSource, out return autoConvert_api_FCVolumeSource_To_v1_FCVolumeSource(in, out, s) } -func autoConvert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions(in *FSGroupStrategyOptions, out *api.FSGroupStrategyOptions, s conversion.Scope) error { - out.Type = api.FSGroupStrategyType(in.Type) - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]api.IDRange, len(*in)) - for i := range *in { - if err := Convert_v1_IDRange_To_api_IDRange(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func Convert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions(in *FSGroupStrategyOptions, out *api.FSGroupStrategyOptions, s conversion.Scope) error { - return autoConvert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions(in, out, s) -} - -func autoConvert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions(in *api.FSGroupStrategyOptions, out *FSGroupStrategyOptions, s conversion.Scope) error { - out.Type = FSGroupStrategyType(in.Type) - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - for i := range *in { - if err := Convert_api_IDRange_To_v1_IDRange(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func Convert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions(in *api.FSGroupStrategyOptions, out *FSGroupStrategyOptions, s conversion.Scope) error { - return autoConvert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions(in, out, s) -} - func autoConvert_v1_FlexVolumeSource_To_api_FlexVolumeSource(in *FlexVolumeSource, out *api.FlexVolumeSource, s conversion.Scope) error { out.Driver = in.Driver out.FSType = in.FSType @@ -2394,26 +2439,6 @@ func Convert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource(in *api.HostPat return autoConvert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource(in, out, s) } -func autoConvert_v1_IDRange_To_api_IDRange(in *IDRange, out *api.IDRange, s conversion.Scope) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -func Convert_v1_IDRange_To_api_IDRange(in *IDRange, out *api.IDRange, s conversion.Scope) error { - return autoConvert_v1_IDRange_To_api_IDRange(in, out, s) -} - -func autoConvert_api_IDRange_To_v1_IDRange(in *api.IDRange, out *IDRange, s conversion.Scope) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -func Convert_api_IDRange_To_v1_IDRange(in *api.IDRange, out *IDRange, s conversion.Scope) error { - return autoConvert_api_IDRange_To_v1_IDRange(in, out, s) -} - func autoConvert_v1_ISCSIVolumeSource_To_api_ISCSIVolumeSource(in *ISCSIVolumeSource, out *api.ISCSIVolumeSource, s conversion.Scope) error { SetDefaults_ISCSIVolumeSource(in) out.TargetPortal = in.TargetPortal @@ -2446,6 +2471,7 @@ func Convert_api_ISCSIVolumeSource_To_v1_ISCSIVolumeSource(in *api.ISCSIVolumeSo func autoConvert_v1_KeyToPath_To_api_KeyToPath(in *KeyToPath, out *api.KeyToPath, s conversion.Scope) error { out.Key = in.Key out.Path = in.Path + out.Mode = in.Mode return nil } @@ -2456,6 +2482,7 @@ func Convert_v1_KeyToPath_To_api_KeyToPath(in *KeyToPath, out *api.KeyToPath, s func autoConvert_api_KeyToPath_To_v1_KeyToPath(in *api.KeyToPath, out *KeyToPath, s conversion.Scope) error { out.Key = in.Key out.Path = in.Path + out.Mode = in.Mode return nil } @@ -3691,6 +3718,7 @@ func autoConvert_v1_ObjectMeta_To_api_ObjectMeta(in *ObjectMeta, out *api.Object out.OwnerReferences = nil } out.Finalizers = in.Finalizers + out.ClusterName = in.ClusterName return nil } @@ -3725,6 +3753,7 @@ func autoConvert_api_ObjectMeta_To_v1_ObjectMeta(in *api.ObjectMeta, out *Object out.OwnerReferences = nil } out.Finalizers = in.Finalizers + out.ClusterName = in.ClusterName return nil } @@ -4213,6 +4242,24 @@ func autoConvert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(in *Per } else { out.VsphereVolume = nil } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(api.QuobyteVolumeSource) + if err := Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Quobyte = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(api.AzureDiskVolumeSource) + if err := Convert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureDisk = nil + } return nil } @@ -4275,6 +4322,15 @@ func autoConvert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in *api } else { out.RBD = nil } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + if err := Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Quobyte = nil + } if in.ISCSI != nil { in, out := &in.ISCSI, &out.ISCSI *out = new(ISCSIVolumeSource) @@ -4347,6 +4403,15 @@ func autoConvert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in *api } else { out.VsphereVolume = nil } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := Convert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureDisk = nil + } return nil } @@ -4860,6 +4925,124 @@ func autoConvert_v1_PodSecurityContext_To_api_PodSecurityContext(in *PodSecurity return nil } +func autoConvert_api_PodSecurityContext_To_v1_PodSecurityContext(in *api.PodSecurityContext, out *PodSecurityContext, s conversion.Scope) error { + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + if err := Convert_api_SELinuxOptions_To_v1_SELinuxOptions(*in, *out, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + out.RunAsUser = in.RunAsUser + out.RunAsNonRoot = in.RunAsNonRoot + out.SupplementalGroups = in.SupplementalGroups + out.FSGroup = in.FSGroup + return nil +} + +func autoConvert_v1_PodSignature_To_api_PodSignature(in *PodSignature, out *api.PodSignature, s conversion.Scope) error { + if in.PodController != nil { + in, out := &in.PodController, &out.PodController + *out = new(api.OwnerReference) + if err := Convert_v1_OwnerReference_To_api_OwnerReference(*in, *out, s); err != nil { + return err + } + } else { + out.PodController = nil + } + return nil +} + +func Convert_v1_PodSignature_To_api_PodSignature(in *PodSignature, out *api.PodSignature, s conversion.Scope) error { + return autoConvert_v1_PodSignature_To_api_PodSignature(in, out, s) +} + +func autoConvert_api_PodSignature_To_v1_PodSignature(in *api.PodSignature, out *PodSignature, s conversion.Scope) error { + if in.PodController != nil { + in, out := &in.PodController, &out.PodController + *out = new(OwnerReference) + if err := Convert_api_OwnerReference_To_v1_OwnerReference(*in, *out, s); err != nil { + return err + } + } else { + out.PodController = nil + } + return nil +} + +func Convert_api_PodSignature_To_v1_PodSignature(in *api.PodSignature, out *PodSignature, s conversion.Scope) error { + return autoConvert_api_PodSignature_To_v1_PodSignature(in, out, s) +} + +func autoConvert_v1_PodSpec_To_api_PodSpec(in *PodSpec, out *api.PodSpec, s conversion.Scope) error { + SetDefaults_PodSpec(in) + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]api.Volume, len(*in)) + for i := range *in { + if err := Convert_v1_Volume_To_api_Volume(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Volumes = nil + } + if in.InitContainers != nil { + in, out := &in.InitContainers, &out.InitContainers + *out = make([]api.Container, len(*in)) + for i := range *in { + if err := Convert_v1_Container_To_api_Container(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.InitContainers = nil + } + if in.Containers != nil { + in, out := &in.Containers, &out.Containers + *out = make([]api.Container, len(*in)) + for i := range *in { + if err := Convert_v1_Container_To_api_Container(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Containers = nil + } + out.RestartPolicy = api.RestartPolicy(in.RestartPolicy) + out.TerminationGracePeriodSeconds = in.TerminationGracePeriodSeconds + out.ActiveDeadlineSeconds = in.ActiveDeadlineSeconds + out.DNSPolicy = api.DNSPolicy(in.DNSPolicy) + out.NodeSelector = in.NodeSelector + out.ServiceAccountName = in.ServiceAccountName + out.NodeName = in.NodeName + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(api.PodSecurityContext) + if err := Convert_v1_PodSecurityContext_To_api_PodSecurityContext(*in, *out, s); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]api.LocalObjectReference, len(*in)) + for i := range *in { + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ImagePullSecrets = nil + } + out.Hostname = in.Hostname + out.Subdomain = in.Subdomain + return nil +} + func autoConvert_api_PodSpec_To_v1_PodSpec(in *api.PodSpec, out *PodSpec, s conversion.Scope) error { if in.Volumes != nil { in, out := &in.Volumes, &out.Volumes @@ -5168,6 +5351,38 @@ func Convert_api_Preconditions_To_v1_Preconditions(in *api.Preconditions, out *P return autoConvert_api_Preconditions_To_v1_Preconditions(in, out, s) } +func autoConvert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry(in *PreferAvoidPodsEntry, out *api.PreferAvoidPodsEntry, s conversion.Scope) error { + if err := Convert_v1_PodSignature_To_api_PodSignature(&in.PodSignature, &out.PodSignature, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.EvictionTime, &out.EvictionTime, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry(in *PreferAvoidPodsEntry, out *api.PreferAvoidPodsEntry, s conversion.Scope) error { + return autoConvert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry(in, out, s) +} + +func autoConvert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry(in *api.PreferAvoidPodsEntry, out *PreferAvoidPodsEntry, s conversion.Scope) error { + if err := Convert_api_PodSignature_To_v1_PodSignature(&in.PodSignature, &out.PodSignature, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.EvictionTime, &out.EvictionTime, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry(in *api.PreferAvoidPodsEntry, out *PreferAvoidPodsEntry, s conversion.Scope) error { + return autoConvert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry(in, out, s) +} + func autoConvert_v1_PreferredSchedulingTerm_To_api_PreferredSchedulingTerm(in *PreferredSchedulingTerm, out *api.PreferredSchedulingTerm, s conversion.Scope) error { out.Weight = in.Weight if err := Convert_v1_NodeSelectorTerm_To_api_NodeSelectorTerm(&in.Preference, &out.Preference, s); err != nil { @@ -5225,6 +5440,32 @@ func Convert_api_Probe_To_v1_Probe(in *api.Probe, out *Probe, s conversion.Scope return autoConvert_api_Probe_To_v1_Probe(in, out, s) } +func autoConvert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(in *QuobyteVolumeSource, out *api.QuobyteVolumeSource, s conversion.Scope) error { + out.Registry = in.Registry + out.Volume = in.Volume + out.ReadOnly = in.ReadOnly + out.User = in.User + out.Group = in.Group + return nil +} + +func Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(in *QuobyteVolumeSource, out *api.QuobyteVolumeSource, s conversion.Scope) error { + return autoConvert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(in, out, s) +} + +func autoConvert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in *api.QuobyteVolumeSource, out *QuobyteVolumeSource, s conversion.Scope) error { + out.Registry = in.Registry + out.Volume = in.Volume + out.ReadOnly = in.ReadOnly + out.User = in.User + out.Group = in.Group + return nil +} + +func Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in *api.QuobyteVolumeSource, out *QuobyteVolumeSource, s conversion.Scope) error { + return autoConvert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in, out, s) +} + func autoConvert_v1_RBDVolumeSource_To_api_RBDVolumeSource(in *RBDVolumeSource, out *api.RBDVolumeSource, s conversion.Scope) error { SetDefaults_RBDVolumeSource(in) out.CephMonitors = in.CephMonitors @@ -5401,9 +5642,44 @@ func Convert_api_ReplicationControllerList_To_v1_ReplicationControllerList(in *a return autoConvert_api_ReplicationControllerList_To_v1_ReplicationControllerList(in, out, s) } +func autoConvert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *api.ReplicationControllerSpec, s conversion.Scope) error { + if err := api.Convert_Pointer_int32_To_int32(&in.Replicas, &out.Replicas, s); err != nil { + return err + } + out.Selector = in.Selector + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(api.PodTemplateSpec) + if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(*in, *out, s); err != nil { + return err + } + } else { + out.Template = nil + } + return nil +} + +func autoConvert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(in *api.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error { + if err := api.Convert_int32_To_Pointer_int32(&in.Replicas, &out.Replicas, s); err != nil { + return err + } + out.Selector = in.Selector + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(PodTemplateSpec) + if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(*in, *out, s); err != nil { + return err + } + } else { + out.Template = nil + } + return nil +} + func autoConvert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in *ReplicationControllerStatus, out *api.ReplicationControllerStatus, s conversion.Scope) error { out.Replicas = in.Replicas out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas out.ObservedGeneration = in.ObservedGeneration return nil } @@ -5415,6 +5691,7 @@ func Convert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus(i func autoConvert_api_ReplicationControllerStatus_To_v1_ReplicationControllerStatus(in *api.ReplicationControllerStatus, out *ReplicationControllerStatus, s conversion.Scope) error { out.Replicas = in.Replicas out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas out.ObservedGeneration = in.ObservedGeneration return nil } @@ -5685,66 +5962,6 @@ func Convert_api_ResourceRequirements_To_v1_ResourceRequirements(in *api.Resourc return autoConvert_api_ResourceRequirements_To_v1_ResourceRequirements(in, out, s) } -func autoConvert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions(in *RunAsUserStrategyOptions, out *api.RunAsUserStrategyOptions, s conversion.Scope) error { - out.Type = api.RunAsUserStrategyType(in.Type) - out.UID = in.UID - out.UIDRangeMin = in.UIDRangeMin - out.UIDRangeMax = in.UIDRangeMax - return nil -} - -func Convert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions(in *RunAsUserStrategyOptions, out *api.RunAsUserStrategyOptions, s conversion.Scope) error { - return autoConvert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions(in, out, s) -} - -func autoConvert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions(in *api.RunAsUserStrategyOptions, out *RunAsUserStrategyOptions, s conversion.Scope) error { - out.Type = RunAsUserStrategyType(in.Type) - out.UID = in.UID - out.UIDRangeMin = in.UIDRangeMin - out.UIDRangeMax = in.UIDRangeMax - return nil -} - -func Convert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions(in *api.RunAsUserStrategyOptions, out *RunAsUserStrategyOptions, s conversion.Scope) error { - return autoConvert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions(in, out, s) -} - -func autoConvert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions(in *SELinuxContextStrategyOptions, out *api.SELinuxContextStrategyOptions, s conversion.Scope) error { - out.Type = api.SELinuxContextStrategyType(in.Type) - if in.SELinuxOptions != nil { - in, out := &in.SELinuxOptions, &out.SELinuxOptions - *out = new(api.SELinuxOptions) - if err := Convert_v1_SELinuxOptions_To_api_SELinuxOptions(*in, *out, s); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - return nil -} - -func Convert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions(in *SELinuxContextStrategyOptions, out *api.SELinuxContextStrategyOptions, s conversion.Scope) error { - return autoConvert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions(in, out, s) -} - -func autoConvert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions(in *api.SELinuxContextStrategyOptions, out *SELinuxContextStrategyOptions, s conversion.Scope) error { - out.Type = SELinuxContextStrategyType(in.Type) - if in.SELinuxOptions != nil { - in, out := &in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - if err := Convert_api_SELinuxOptions_To_v1_SELinuxOptions(*in, *out, s); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - return nil -} - -func Convert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions(in *api.SELinuxContextStrategyOptions, out *SELinuxContextStrategyOptions, s conversion.Scope) error { - return autoConvert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions(in, out, s) -} - func autoConvert_v1_SELinuxOptions_To_api_SELinuxOptions(in *SELinuxOptions, out *api.SELinuxOptions, s conversion.Scope) error { out.User = in.User out.Role = in.Role @@ -5782,10 +5999,6 @@ func autoConvert_v1_Secret_To_api_Secret(in *Secret, out *api.Secret, s conversi return nil } -func Convert_v1_Secret_To_api_Secret(in *Secret, out *api.Secret, s conversion.Scope) error { - return autoConvert_v1_Secret_To_api_Secret(in, out, s) -} - func autoConvert_api_Secret_To_v1_Secret(in *api.Secret, out *Secret, s conversion.Scope) error { if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err @@ -5877,6 +6090,7 @@ func Convert_api_SecretList_To_v1_SecretList(in *api.SecretList, out *SecretList } func autoConvert_v1_SecretVolumeSource_To_api_SecretVolumeSource(in *SecretVolumeSource, out *api.SecretVolumeSource, s conversion.Scope) error { + SetDefaults_SecretVolumeSource(in) out.SecretName = in.SecretName if in.Items != nil { in, out := &in.Items, &out.Items @@ -5889,6 +6103,7 @@ func autoConvert_v1_SecretVolumeSource_To_api_SecretVolumeSource(in *SecretVolum } else { out.Items = nil } + out.DefaultMode = in.DefaultMode return nil } @@ -5909,6 +6124,7 @@ func autoConvert_api_SecretVolumeSource_To_v1_SecretVolumeSource(in *api.SecretV } else { out.Items = nil } + out.DefaultMode = in.DefaultMode return nil } @@ -5976,190 +6192,6 @@ func Convert_api_SecurityContext_To_v1_SecurityContext(in *api.SecurityContext, return autoConvert_api_SecurityContext_To_v1_SecurityContext(in, out, s) } -func autoConvert_v1_SecurityContextConstraints_To_api_SecurityContextConstraints(in *SecurityContextConstraints, out *api.SecurityContextConstraints, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { - return err - } - out.Priority = in.Priority - out.AllowPrivilegedContainer = in.AllowPrivilegedContainer - if in.DefaultAddCapabilities != nil { - in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]api.Capability, len(*in)) - for i := range *in { - (*out)[i] = api.Capability((*in)[i]) - } - } else { - out.DefaultAddCapabilities = nil - } - if in.RequiredDropCapabilities != nil { - in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]api.Capability, len(*in)) - for i := range *in { - (*out)[i] = api.Capability((*in)[i]) - } - } else { - out.RequiredDropCapabilities = nil - } - if in.AllowedCapabilities != nil { - in, out := &in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]api.Capability, len(*in)) - for i := range *in { - (*out)[i] = api.Capability((*in)[i]) - } - } else { - out.AllowedCapabilities = nil - } - if in.Volumes != nil { - in, out := &in.Volumes, &out.Volumes - *out = make([]api.FSType, len(*in)) - for i := range *in { - (*out)[i] = api.FSType((*in)[i]) - } - } else { - out.Volumes = nil - } - out.AllowHostNetwork = in.AllowHostNetwork - out.AllowHostPorts = in.AllowHostPorts - out.AllowHostPID = in.AllowHostPID - out.AllowHostIPC = in.AllowHostIPC - if err := Convert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions(&in.SELinuxContext, &out.SELinuxContext, s); err != nil { - return err - } - if err := Convert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, s); err != nil { - return err - } - if err := Convert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, s); err != nil { - return err - } - if err := Convert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, s); err != nil { - return err - } - out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem - out.Users = in.Users - out.Groups = in.Groups - return nil -} - -func autoConvert_api_SecurityContextConstraints_To_v1_SecurityContextConstraints(in *api.SecurityContextConstraints, out *SecurityContextConstraints, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { - return err - } - out.Priority = in.Priority - out.AllowPrivilegedContainer = in.AllowPrivilegedContainer - if in.DefaultAddCapabilities != nil { - in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]Capability, len(*in)) - for i := range *in { - (*out)[i] = Capability((*in)[i]) - } - } else { - out.DefaultAddCapabilities = nil - } - if in.RequiredDropCapabilities != nil { - in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]Capability, len(*in)) - for i := range *in { - (*out)[i] = Capability((*in)[i]) - } - } else { - out.RequiredDropCapabilities = nil - } - if in.AllowedCapabilities != nil { - in, out := &in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]Capability, len(*in)) - for i := range *in { - (*out)[i] = Capability((*in)[i]) - } - } else { - out.AllowedCapabilities = nil - } - if in.Volumes != nil { - in, out := &in.Volumes, &out.Volumes - *out = make([]FSType, len(*in)) - for i := range *in { - (*out)[i] = FSType((*in)[i]) - } - } else { - out.Volumes = nil - } - out.AllowHostNetwork = in.AllowHostNetwork - out.AllowHostPorts = in.AllowHostPorts - out.AllowHostPID = in.AllowHostPID - out.AllowHostIPC = in.AllowHostIPC - if err := Convert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions(&in.SELinuxContext, &out.SELinuxContext, s); err != nil { - return err - } - if err := Convert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, s); err != nil { - return err - } - if err := Convert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, s); err != nil { - return err - } - if err := Convert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, s); err != nil { - return err - } - out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem - out.Users = in.Users - out.Groups = in.Groups - return nil -} - -func autoConvert_v1_SecurityContextConstraintsList_To_api_SecurityContextConstraintsList(in *SecurityContextConstraintsList, out *api.SecurityContextConstraintsList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { - return err - } - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]api.SecurityContextConstraints, len(*in)) - for i := range *in { - if err := Convert_v1_SecurityContextConstraints_To_api_SecurityContextConstraints(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func Convert_v1_SecurityContextConstraintsList_To_api_SecurityContextConstraintsList(in *SecurityContextConstraintsList, out *api.SecurityContextConstraintsList, s conversion.Scope) error { - return autoConvert_v1_SecurityContextConstraintsList_To_api_SecurityContextConstraintsList(in, out, s) -} - -func autoConvert_api_SecurityContextConstraintsList_To_v1_SecurityContextConstraintsList(in *api.SecurityContextConstraintsList, out *SecurityContextConstraintsList, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { - return err - } - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]SecurityContextConstraints, len(*in)) - for i := range *in { - if err := Convert_api_SecurityContextConstraints_To_v1_SecurityContextConstraints(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func Convert_api_SecurityContextConstraintsList_To_v1_SecurityContextConstraintsList(in *api.SecurityContextConstraintsList, out *SecurityContextConstraintsList, s conversion.Scope) error { - return autoConvert_api_SecurityContextConstraintsList_To_v1_SecurityContextConstraintsList(in, out, s) -} - func autoConvert_v1_SerializedReference_To_api_SerializedReference(in *SerializedReference, out *api.SerializedReference, s conversion.Scope) error { if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err @@ -6401,7 +6433,6 @@ func Convert_api_ServiceList_To_v1_ServiceList(in *api.ServiceList, out *Service } func autoConvert_v1_ServicePort_To_api_ServicePort(in *ServicePort, out *api.ServicePort, s conversion.Scope) error { - SetDefaults_ServicePort(in) out.Name = in.Name out.Protocol = api.Protocol(in.Protocol) out.Port = in.Port @@ -6475,6 +6506,7 @@ func autoConvert_v1_ServiceSpec_To_api_ServiceSpec(in *ServiceSpec, out *api.Ser out.SessionAffinity = api.ServiceAffinity(in.SessionAffinity) out.LoadBalancerIP = in.LoadBalancerIP out.LoadBalancerSourceRanges = in.LoadBalancerSourceRanges + out.ExternalName = in.ExternalName return nil } @@ -6493,6 +6525,7 @@ func autoConvert_api_ServiceSpec_To_v1_ServiceSpec(in *api.ServiceSpec, out *Ser } out.Selector = in.Selector out.ClusterIP = in.ClusterIP + out.ExternalName = in.ExternalName out.ExternalIPs = in.ExternalIPs out.LoadBalancerIP = in.LoadBalancerIP out.SessionAffinity = ServiceAffinity(in.SessionAffinity) @@ -6522,46 +6555,6 @@ func Convert_api_ServiceStatus_To_v1_ServiceStatus(in *api.ServiceStatus, out *S return autoConvert_api_ServiceStatus_To_v1_ServiceStatus(in, out, s) } -func autoConvert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions(in *SupplementalGroupsStrategyOptions, out *api.SupplementalGroupsStrategyOptions, s conversion.Scope) error { - out.Type = api.SupplementalGroupsStrategyType(in.Type) - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]api.IDRange, len(*in)) - for i := range *in { - if err := Convert_v1_IDRange_To_api_IDRange(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func Convert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions(in *SupplementalGroupsStrategyOptions, out *api.SupplementalGroupsStrategyOptions, s conversion.Scope) error { - return autoConvert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions(in, out, s) -} - -func autoConvert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions(in *api.SupplementalGroupsStrategyOptions, out *SupplementalGroupsStrategyOptions, s conversion.Scope) error { - out.Type = SupplementalGroupsStrategyType(in.Type) - if in.Ranges != nil { - in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) - for i := range *in { - if err := Convert_api_IDRange_To_v1_IDRange(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func Convert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions(in *api.SupplementalGroupsStrategyOptions, out *SupplementalGroupsStrategyOptions, s conversion.Scope) error { - return autoConvert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions(in, out, s) -} - func autoConvert_v1_TCPSocketAction_To_api_TCPSocketAction(in *TCPSocketAction, out *api.TCPSocketAction, s conversion.Scope) error { if err := api.Convert_intstr_IntOrString_To_intstr_IntOrString(&in.Port, &out.Port, s); err != nil { return err @@ -6860,9 +6853,31 @@ func autoConvert_v1_VolumeSource_To_api_VolumeSource(in *VolumeSource, out *api. } else { out.VsphereVolume = nil } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(api.QuobyteVolumeSource) + if err := Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Quobyte = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(api.AzureDiskVolumeSource) + if err := Convert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureDisk = nil + } return nil } +func Convert_v1_VolumeSource_To_api_VolumeSource(in *VolumeSource, out *api.VolumeSource, s conversion.Scope) error { + return autoConvert_v1_VolumeSource_To_api_VolumeSource(in, out, s) +} + func autoConvert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out *VolumeSource, s conversion.Scope) error { if in.HostPath != nil { in, out := &in.HostPath, &out.HostPath @@ -6963,6 +6978,15 @@ func autoConvert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out * } else { out.RBD = nil } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + if err := Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Quobyte = nil + } if in.FlexVolume != nil { in, out := &in.FlexVolume, &out.FlexVolume *out = new(FlexVolumeSource) @@ -7044,9 +7068,22 @@ func autoConvert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out * } else { out.VsphereVolume = nil } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := Convert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureDisk = nil + } return nil } +func Convert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out *VolumeSource, s conversion.Scope) error { + return autoConvert_api_VolumeSource_To_v1_VolumeSource(in, out, s) +} + func autoConvert_v1_VsphereVirtualDiskVolumeSource_To_api_VsphereVirtualDiskVolumeSource(in *VsphereVirtualDiskVolumeSource, out *api.VsphereVirtualDiskVolumeSource, s conversion.Scope) error { out.VolumePath = in.VolumePath out.FSType = in.FSType diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/v1/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/1.4/pkg/api/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000..b5179518 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/v1/zz_generated.deepcopy.go @@ -0,0 +1,3703 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1 + +import ( + unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + conversion "k8s.io/client-go/1.4/pkg/conversion" + runtime "k8s.io/client-go/1.4/pkg/runtime" + types "k8s.io/client-go/1.4/pkg/types" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AWSElasticBlockStoreVolumeSource, InType: reflect.TypeOf(&AWSElasticBlockStoreVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Affinity, InType: reflect.TypeOf(&Affinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AttachedVolume, InType: reflect.TypeOf(&AttachedVolume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AvoidPods, InType: reflect.TypeOf(&AvoidPods{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AzureDiskVolumeSource, InType: reflect.TypeOf(&AzureDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AzureFileVolumeSource, InType: reflect.TypeOf(&AzureFileVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Binding, InType: reflect.TypeOf(&Binding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Capabilities, InType: reflect.TypeOf(&Capabilities{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_CephFSVolumeSource, InType: reflect.TypeOf(&CephFSVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_CinderVolumeSource, InType: reflect.TypeOf(&CinderVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ComponentCondition, InType: reflect.TypeOf(&ComponentCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ComponentStatus, InType: reflect.TypeOf(&ComponentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ComponentStatusList, InType: reflect.TypeOf(&ComponentStatusList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ConfigMap, InType: reflect.TypeOf(&ConfigMap{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ConfigMapKeySelector, InType: reflect.TypeOf(&ConfigMapKeySelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ConfigMapList, InType: reflect.TypeOf(&ConfigMapList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ConfigMapVolumeSource, InType: reflect.TypeOf(&ConfigMapVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Container, InType: reflect.TypeOf(&Container{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerImage, InType: reflect.TypeOf(&ContainerImage{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerPort, InType: reflect.TypeOf(&ContainerPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerState, InType: reflect.TypeOf(&ContainerState{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerStateRunning, InType: reflect.TypeOf(&ContainerStateRunning{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerStateTerminated, InType: reflect.TypeOf(&ContainerStateTerminated{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerStateWaiting, InType: reflect.TypeOf(&ContainerStateWaiting{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerStatus, InType: reflect.TypeOf(&ContainerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DaemonEndpoint, InType: reflect.TypeOf(&DaemonEndpoint{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeleteOptions, InType: reflect.TypeOf(&DeleteOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DownwardAPIVolumeFile, InType: reflect.TypeOf(&DownwardAPIVolumeFile{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DownwardAPIVolumeSource, InType: reflect.TypeOf(&DownwardAPIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EmptyDirVolumeSource, InType: reflect.TypeOf(&EmptyDirVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EndpointAddress, InType: reflect.TypeOf(&EndpointAddress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EndpointPort, InType: reflect.TypeOf(&EndpointPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EndpointSubset, InType: reflect.TypeOf(&EndpointSubset{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Endpoints, InType: reflect.TypeOf(&Endpoints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EndpointsList, InType: reflect.TypeOf(&EndpointsList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EnvVar, InType: reflect.TypeOf(&EnvVar{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EnvVarSource, InType: reflect.TypeOf(&EnvVarSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Event, InType: reflect.TypeOf(&Event{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EventList, InType: reflect.TypeOf(&EventList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EventSource, InType: reflect.TypeOf(&EventSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ExecAction, InType: reflect.TypeOf(&ExecAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ExportOptions, InType: reflect.TypeOf(&ExportOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_FCVolumeSource, InType: reflect.TypeOf(&FCVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_FlexVolumeSource, InType: reflect.TypeOf(&FlexVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_FlockerVolumeSource, InType: reflect.TypeOf(&FlockerVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_GCEPersistentDiskVolumeSource, InType: reflect.TypeOf(&GCEPersistentDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_GitRepoVolumeSource, InType: reflect.TypeOf(&GitRepoVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_GlusterfsVolumeSource, InType: reflect.TypeOf(&GlusterfsVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HTTPGetAction, InType: reflect.TypeOf(&HTTPGetAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HTTPHeader, InType: reflect.TypeOf(&HTTPHeader{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Handler, InType: reflect.TypeOf(&Handler{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HostPathVolumeSource, InType: reflect.TypeOf(&HostPathVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ISCSIVolumeSource, InType: reflect.TypeOf(&ISCSIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_KeyToPath, InType: reflect.TypeOf(&KeyToPath{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Lifecycle, InType: reflect.TypeOf(&Lifecycle{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LimitRange, InType: reflect.TypeOf(&LimitRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LimitRangeItem, InType: reflect.TypeOf(&LimitRangeItem{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LimitRangeList, InType: reflect.TypeOf(&LimitRangeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LimitRangeSpec, InType: reflect.TypeOf(&LimitRangeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_List, InType: reflect.TypeOf(&List{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ListOptions, InType: reflect.TypeOf(&ListOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LoadBalancerIngress, InType: reflect.TypeOf(&LoadBalancerIngress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LoadBalancerStatus, InType: reflect.TypeOf(&LoadBalancerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LocalObjectReference, InType: reflect.TypeOf(&LocalObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NFSVolumeSource, InType: reflect.TypeOf(&NFSVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Namespace, InType: reflect.TypeOf(&Namespace{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NamespaceList, InType: reflect.TypeOf(&NamespaceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NamespaceSpec, InType: reflect.TypeOf(&NamespaceSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NamespaceStatus, InType: reflect.TypeOf(&NamespaceStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Node, InType: reflect.TypeOf(&Node{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeAddress, InType: reflect.TypeOf(&NodeAddress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeAffinity, InType: reflect.TypeOf(&NodeAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeCondition, InType: reflect.TypeOf(&NodeCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeDaemonEndpoints, InType: reflect.TypeOf(&NodeDaemonEndpoints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeList, InType: reflect.TypeOf(&NodeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeProxyOptions, InType: reflect.TypeOf(&NodeProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSelector, InType: reflect.TypeOf(&NodeSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSelectorRequirement, InType: reflect.TypeOf(&NodeSelectorRequirement{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSelectorTerm, InType: reflect.TypeOf(&NodeSelectorTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSpec, InType: reflect.TypeOf(&NodeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeStatus, InType: reflect.TypeOf(&NodeStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSystemInfo, InType: reflect.TypeOf(&NodeSystemInfo{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ObjectFieldSelector, InType: reflect.TypeOf(&ObjectFieldSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ObjectMeta, InType: reflect.TypeOf(&ObjectMeta{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ObjectReference, InType: reflect.TypeOf(&ObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_OwnerReference, InType: reflect.TypeOf(&OwnerReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolume, InType: reflect.TypeOf(&PersistentVolume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaim, InType: reflect.TypeOf(&PersistentVolumeClaim{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaimList, InType: reflect.TypeOf(&PersistentVolumeClaimList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaimSpec, InType: reflect.TypeOf(&PersistentVolumeClaimSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaimStatus, InType: reflect.TypeOf(&PersistentVolumeClaimStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaimVolumeSource, InType: reflect.TypeOf(&PersistentVolumeClaimVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeList, InType: reflect.TypeOf(&PersistentVolumeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeSource, InType: reflect.TypeOf(&PersistentVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeSpec, InType: reflect.TypeOf(&PersistentVolumeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeStatus, InType: reflect.TypeOf(&PersistentVolumeStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Pod, InType: reflect.TypeOf(&Pod{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodAffinity, InType: reflect.TypeOf(&PodAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodAffinityTerm, InType: reflect.TypeOf(&PodAffinityTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodAntiAffinity, InType: reflect.TypeOf(&PodAntiAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodAttachOptions, InType: reflect.TypeOf(&PodAttachOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodCondition, InType: reflect.TypeOf(&PodCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodExecOptions, InType: reflect.TypeOf(&PodExecOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodList, InType: reflect.TypeOf(&PodList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodLogOptions, InType: reflect.TypeOf(&PodLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodProxyOptions, InType: reflect.TypeOf(&PodProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodSecurityContext, InType: reflect.TypeOf(&PodSecurityContext{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodSignature, InType: reflect.TypeOf(&PodSignature{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodSpec, InType: reflect.TypeOf(&PodSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodStatus, InType: reflect.TypeOf(&PodStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodStatusResult, InType: reflect.TypeOf(&PodStatusResult{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplate, InType: reflect.TypeOf(&PodTemplate{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplateList, InType: reflect.TypeOf(&PodTemplateList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplateSpec, InType: reflect.TypeOf(&PodTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Preconditions, InType: reflect.TypeOf(&Preconditions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PreferAvoidPodsEntry, InType: reflect.TypeOf(&PreferAvoidPodsEntry{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PreferredSchedulingTerm, InType: reflect.TypeOf(&PreferredSchedulingTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Probe, InType: reflect.TypeOf(&Probe{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_QuobyteVolumeSource, InType: reflect.TypeOf(&QuobyteVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RBDVolumeSource, InType: reflect.TypeOf(&RBDVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RangeAllocation, InType: reflect.TypeOf(&RangeAllocation{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ReplicationController, InType: reflect.TypeOf(&ReplicationController{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ReplicationControllerList, InType: reflect.TypeOf(&ReplicationControllerList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ReplicationControllerSpec, InType: reflect.TypeOf(&ReplicationControllerSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ReplicationControllerStatus, InType: reflect.TypeOf(&ReplicationControllerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceFieldSelector, InType: reflect.TypeOf(&ResourceFieldSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceQuota, InType: reflect.TypeOf(&ResourceQuota{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceQuotaList, InType: reflect.TypeOf(&ResourceQuotaList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceQuotaSpec, InType: reflect.TypeOf(&ResourceQuotaSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceQuotaStatus, InType: reflect.TypeOf(&ResourceQuotaStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceRequirements, InType: reflect.TypeOf(&ResourceRequirements{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SELinuxOptions, InType: reflect.TypeOf(&SELinuxOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Secret, InType: reflect.TypeOf(&Secret{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretKeySelector, InType: reflect.TypeOf(&SecretKeySelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretList, InType: reflect.TypeOf(&SecretList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretVolumeSource, InType: reflect.TypeOf(&SecretVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecurityContext, InType: reflect.TypeOf(&SecurityContext{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SerializedReference, InType: reflect.TypeOf(&SerializedReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Service, InType: reflect.TypeOf(&Service{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceAccount, InType: reflect.TypeOf(&ServiceAccount{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceAccountList, InType: reflect.TypeOf(&ServiceAccountList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceList, InType: reflect.TypeOf(&ServiceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServicePort, InType: reflect.TypeOf(&ServicePort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceProxyOptions, InType: reflect.TypeOf(&ServiceProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceSpec, InType: reflect.TypeOf(&ServiceSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceStatus, InType: reflect.TypeOf(&ServiceStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_TCPSocketAction, InType: reflect.TypeOf(&TCPSocketAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Taint, InType: reflect.TypeOf(&Taint{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Toleration, InType: reflect.TypeOf(&Toleration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Volume, InType: reflect.TypeOf(&Volume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_VolumeMount, InType: reflect.TypeOf(&VolumeMount{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_VolumeSource, InType: reflect.TypeOf(&VolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_VsphereVirtualDiskVolumeSource, InType: reflect.TypeOf(&VsphereVirtualDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_WeightedPodAffinityTerm, InType: reflect.TypeOf(&WeightedPodAffinityTerm{})}, + ) +} + +func DeepCopy_v1_AWSElasticBlockStoreVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AWSElasticBlockStoreVolumeSource) + out := out.(*AWSElasticBlockStoreVolumeSource) + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_Affinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Affinity) + out := out.(*Affinity) + if in.NodeAffinity != nil { + in, out := &in.NodeAffinity, &out.NodeAffinity + *out = new(NodeAffinity) + if err := DeepCopy_v1_NodeAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.NodeAffinity = nil + } + if in.PodAffinity != nil { + in, out := &in.PodAffinity, &out.PodAffinity + *out = new(PodAffinity) + if err := DeepCopy_v1_PodAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.PodAffinity = nil + } + if in.PodAntiAffinity != nil { + in, out := &in.PodAntiAffinity, &out.PodAntiAffinity + *out = new(PodAntiAffinity) + if err := DeepCopy_v1_PodAntiAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.PodAntiAffinity = nil + } + return nil + } +} + +func DeepCopy_v1_AttachedVolume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AttachedVolume) + out := out.(*AttachedVolume) + out.Name = in.Name + out.DevicePath = in.DevicePath + return nil + } +} + +func DeepCopy_v1_AvoidPods(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AvoidPods) + out := out.(*AvoidPods) + if in.PreferAvoidPods != nil { + in, out := &in.PreferAvoidPods, &out.PreferAvoidPods + *out = make([]PreferAvoidPodsEntry, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PreferAvoidPodsEntry(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferAvoidPods = nil + } + return nil + } +} + +func DeepCopy_v1_AzureDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AzureDiskVolumeSource) + out := out.(*AzureDiskVolumeSource) + out.DiskName = in.DiskName + out.DataDiskURI = in.DataDiskURI + if in.CachingMode != nil { + in, out := &in.CachingMode, &out.CachingMode + *out = new(AzureDataDiskCachingMode) + **out = **in + } else { + out.CachingMode = nil + } + if in.FSType != nil { + in, out := &in.FSType, &out.FSType + *out = new(string) + **out = **in + } else { + out.FSType = nil + } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } else { + out.ReadOnly = nil + } + return nil + } +} + +func DeepCopy_v1_AzureFileVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AzureFileVolumeSource) + out := out.(*AzureFileVolumeSource) + out.SecretName = in.SecretName + out.ShareName = in.ShareName + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_Binding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Binding) + out := out.(*Binding) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Target = in.Target + return nil + } +} + +func DeepCopy_v1_Capabilities(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Capabilities) + out := out.(*Capabilities) + if in.Add != nil { + in, out := &in.Add, &out.Add + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Add = nil + } + if in.Drop != nil { + in, out := &in.Drop, &out.Drop + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Drop = nil + } + return nil + } +} + +func DeepCopy_v1_CephFSVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CephFSVolumeSource) + out := out.(*CephFSVolumeSource) + if in.Monitors != nil { + in, out := &in.Monitors, &out.Monitors + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Monitors = nil + } + out.Path = in.Path + out.User = in.User + out.SecretFile = in.SecretFile + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_CinderVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CinderVolumeSource) + out := out.(*CinderVolumeSource) + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_ComponentCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentCondition) + out := out.(*ComponentCondition) + out.Type = in.Type + out.Status = in.Status + out.Message = in.Message + out.Error = in.Error + return nil + } +} + +func DeepCopy_v1_ComponentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentStatus) + out := out.(*ComponentStatus) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ComponentCondition, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Conditions = nil + } + return nil + } +} + +func DeepCopy_v1_ComponentStatusList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentStatusList) + out := out.(*ComponentStatusList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ComponentStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ComponentStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ConfigMap(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMap) + out := out.(*ConfigMap) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_v1_ConfigMapKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapKeySelector) + out := out.(*ConfigMapKeySelector) + out.LocalObjectReference = in.LocalObjectReference + out.Key = in.Key + return nil + } +} + +func DeepCopy_v1_ConfigMapList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapList) + out := out.(*ConfigMapList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ConfigMap, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ConfigMap(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ConfigMapVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapVolumeSource) + out := out.(*ConfigMapVolumeSource) + out.LocalObjectReference = in.LocalObjectReference + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := DeepCopy_v1_KeyToPath(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_v1_Container(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Container) + out := out.(*Container) + out.Name = in.Name + out.Image = in.Image + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Args = nil + } + out.WorkingDir = in.WorkingDir + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ContainerPort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]EnvVar, len(*in)) + for i := range *in { + if err := DeepCopy_v1_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + if err := DeepCopy_v1_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + if in.VolumeMounts != nil { + in, out := &in.VolumeMounts, &out.VolumeMounts + *out = make([]VolumeMount, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumeMounts = nil + } + if in.LivenessProbe != nil { + in, out := &in.LivenessProbe, &out.LivenessProbe + *out = new(Probe) + if err := DeepCopy_v1_Probe(*in, *out, c); err != nil { + return err + } + } else { + out.LivenessProbe = nil + } + if in.ReadinessProbe != nil { + in, out := &in.ReadinessProbe, &out.ReadinessProbe + *out = new(Probe) + if err := DeepCopy_v1_Probe(*in, *out, c); err != nil { + return err + } + } else { + out.ReadinessProbe = nil + } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(Lifecycle) + if err := DeepCopy_v1_Lifecycle(*in, *out, c); err != nil { + return err + } + } else { + out.Lifecycle = nil + } + out.TerminationMessagePath = in.TerminationMessagePath + out.ImagePullPolicy = in.ImagePullPolicy + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(SecurityContext) + if err := DeepCopy_v1_SecurityContext(*in, *out, c); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + out.Stdin = in.Stdin + out.StdinOnce = in.StdinOnce + out.TTY = in.TTY + return nil + } +} + +func DeepCopy_v1_ContainerImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerImage) + out := out.(*ContainerImage) + if in.Names != nil { + in, out := &in.Names, &out.Names + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Names = nil + } + out.SizeBytes = in.SizeBytes + return nil + } +} + +func DeepCopy_v1_ContainerPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerPort) + out := out.(*ContainerPort) + out.Name = in.Name + out.HostPort = in.HostPort + out.ContainerPort = in.ContainerPort + out.Protocol = in.Protocol + out.HostIP = in.HostIP + return nil + } +} + +func DeepCopy_v1_ContainerState(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerState) + out := out.(*ContainerState) + if in.Waiting != nil { + in, out := &in.Waiting, &out.Waiting + *out = new(ContainerStateWaiting) + **out = **in + } else { + out.Waiting = nil + } + if in.Running != nil { + in, out := &in.Running, &out.Running + *out = new(ContainerStateRunning) + if err := DeepCopy_v1_ContainerStateRunning(*in, *out, c); err != nil { + return err + } + } else { + out.Running = nil + } + if in.Terminated != nil { + in, out := &in.Terminated, &out.Terminated + *out = new(ContainerStateTerminated) + if err := DeepCopy_v1_ContainerStateTerminated(*in, *out, c); err != nil { + return err + } + } else { + out.Terminated = nil + } + return nil + } +} + +func DeepCopy_v1_ContainerStateRunning(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateRunning) + out := out.(*ContainerStateRunning) + out.StartedAt = in.StartedAt.DeepCopy() + return nil + } +} + +func DeepCopy_v1_ContainerStateTerminated(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateTerminated) + out := out.(*ContainerStateTerminated) + out.ExitCode = in.ExitCode + out.Signal = in.Signal + out.Reason = in.Reason + out.Message = in.Message + out.StartedAt = in.StartedAt.DeepCopy() + out.FinishedAt = in.FinishedAt.DeepCopy() + out.ContainerID = in.ContainerID + return nil + } +} + +func DeepCopy_v1_ContainerStateWaiting(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateWaiting) + out := out.(*ContainerStateWaiting) + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_ContainerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStatus) + out := out.(*ContainerStatus) + out.Name = in.Name + if err := DeepCopy_v1_ContainerState(&in.State, &out.State, c); err != nil { + return err + } + if err := DeepCopy_v1_ContainerState(&in.LastTerminationState, &out.LastTerminationState, c); err != nil { + return err + } + out.Ready = in.Ready + out.RestartCount = in.RestartCount + out.Image = in.Image + out.ImageID = in.ImageID + out.ContainerID = in.ContainerID + return nil + } +} + +func DeepCopy_v1_DaemonEndpoint(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonEndpoint) + out := out.(*DaemonEndpoint) + out.Port = in.Port + return nil + } +} + +func DeepCopy_v1_DeleteOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeleteOptions) + out := out.(*DeleteOptions) + out.TypeMeta = in.TypeMeta + if in.GracePeriodSeconds != nil { + in, out := &in.GracePeriodSeconds, &out.GracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.GracePeriodSeconds = nil + } + if in.Preconditions != nil { + in, out := &in.Preconditions, &out.Preconditions + *out = new(Preconditions) + if err := DeepCopy_v1_Preconditions(*in, *out, c); err != nil { + return err + } + } else { + out.Preconditions = nil + } + if in.OrphanDependents != nil { + in, out := &in.OrphanDependents, &out.OrphanDependents + *out = new(bool) + **out = **in + } else { + out.OrphanDependents = nil + } + return nil + } +} + +func DeepCopy_v1_DownwardAPIVolumeFile(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DownwardAPIVolumeFile) + out := out.(*DownwardAPIVolumeFile) + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_v1_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_v1_DownwardAPIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DownwardAPIVolumeSource) + out := out.(*DownwardAPIVolumeSource) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := DeepCopy_v1_DownwardAPIVolumeFile(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_v1_EmptyDirVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EmptyDirVolumeSource) + out := out.(*EmptyDirVolumeSource) + out.Medium = in.Medium + return nil + } +} + +func DeepCopy_v1_EndpointAddress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointAddress) + out := out.(*EndpointAddress) + out.IP = in.IP + out.Hostname = in.Hostname + if in.NodeName != nil { + in, out := &in.NodeName, &out.NodeName + *out = new(string) + **out = **in + } else { + out.NodeName = nil + } + if in.TargetRef != nil { + in, out := &in.TargetRef, &out.TargetRef + *out = new(ObjectReference) + **out = **in + } else { + out.TargetRef = nil + } + return nil + } +} + +func DeepCopy_v1_EndpointPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointPort) + out := out.(*EndpointPort) + out.Name = in.Name + out.Port = in.Port + out.Protocol = in.Protocol + return nil + } +} + +func DeepCopy_v1_EndpointSubset(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointSubset) + out := out.(*EndpointSubset) + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := DeepCopy_v1_EndpointAddress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Addresses = nil + } + if in.NotReadyAddresses != nil { + in, out := &in.NotReadyAddresses, &out.NotReadyAddresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := DeepCopy_v1_EndpointAddress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.NotReadyAddresses = nil + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]EndpointPort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + return nil + } +} + +func DeepCopy_v1_Endpoints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Endpoints) + out := out.(*Endpoints) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subsets != nil { + in, out := &in.Subsets, &out.Subsets + *out = make([]EndpointSubset, len(*in)) + for i := range *in { + if err := DeepCopy_v1_EndpointSubset(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Subsets = nil + } + return nil + } +} + +func DeepCopy_v1_EndpointsList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointsList) + out := out.(*EndpointsList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Endpoints, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Endpoints(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_EnvVar(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EnvVar) + out := out.(*EnvVar) + out.Name = in.Name + out.Value = in.Value + if in.ValueFrom != nil { + in, out := &in.ValueFrom, &out.ValueFrom + *out = new(EnvVarSource) + if err := DeepCopy_v1_EnvVarSource(*in, *out, c); err != nil { + return err + } + } else { + out.ValueFrom = nil + } + return nil + } +} + +func DeepCopy_v1_EnvVarSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EnvVarSource) + out := out.(*EnvVarSource) + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_v1_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.ConfigMapKeyRef != nil { + in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef + *out = new(ConfigMapKeySelector) + **out = **in + } else { + out.ConfigMapKeyRef = nil + } + if in.SecretKeyRef != nil { + in, out := &in.SecretKeyRef, &out.SecretKeyRef + *out = new(SecretKeySelector) + **out = **in + } else { + out.SecretKeyRef = nil + } + return nil + } +} + +func DeepCopy_v1_Event(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Event) + out := out.(*Event) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.InvolvedObject = in.InvolvedObject + out.Reason = in.Reason + out.Message = in.Message + out.Source = in.Source + out.FirstTimestamp = in.FirstTimestamp.DeepCopy() + out.LastTimestamp = in.LastTimestamp.DeepCopy() + out.Count = in.Count + out.Type = in.Type + return nil + } +} + +func DeepCopy_v1_EventList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EventList) + out := out.(*EventList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Event, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Event(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_EventSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EventSource) + out := out.(*EventSource) + out.Component = in.Component + out.Host = in.Host + return nil + } +} + +func DeepCopy_v1_ExecAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExecAction) + out := out.(*ExecAction) + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_v1_ExportOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExportOptions) + out := out.(*ExportOptions) + out.TypeMeta = in.TypeMeta + out.Export = in.Export + out.Exact = in.Exact + return nil + } +} + +func DeepCopy_v1_FCVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FCVolumeSource) + out := out.(*FCVolumeSource) + if in.TargetWWNs != nil { + in, out := &in.TargetWWNs, &out.TargetWWNs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.TargetWWNs = nil + } + if in.Lun != nil { + in, out := &in.Lun, &out.Lun + *out = new(int32) + **out = **in + } else { + out.Lun = nil + } + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_FlexVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FlexVolumeSource) + out := out.(*FlexVolumeSource) + out.Driver = in.Driver + out.FSType = in.FSType + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Options = nil + } + return nil + } +} + +func DeepCopy_v1_FlockerVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FlockerVolumeSource) + out := out.(*FlockerVolumeSource) + out.DatasetName = in.DatasetName + return nil + } +} + +func DeepCopy_v1_GCEPersistentDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GCEPersistentDiskVolumeSource) + out := out.(*GCEPersistentDiskVolumeSource) + out.PDName = in.PDName + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_GitRepoVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitRepoVolumeSource) + out := out.(*GitRepoVolumeSource) + out.Repository = in.Repository + out.Revision = in.Revision + out.Directory = in.Directory + return nil + } +} + +func DeepCopy_v1_GlusterfsVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GlusterfsVolumeSource) + out := out.(*GlusterfsVolumeSource) + out.EndpointsName = in.EndpointsName + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_HTTPGetAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPGetAction) + out := out.(*HTTPGetAction) + out.Path = in.Path + out.Port = in.Port + out.Host = in.Host + out.Scheme = in.Scheme + if in.HTTPHeaders != nil { + in, out := &in.HTTPHeaders, &out.HTTPHeaders + *out = make([]HTTPHeader, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.HTTPHeaders = nil + } + return nil + } +} + +func DeepCopy_v1_HTTPHeader(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPHeader) + out := out.(*HTTPHeader) + out.Name = in.Name + out.Value = in.Value + return nil + } +} + +func DeepCopy_v1_Handler(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Handler) + out := out.(*Handler) + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + *out = new(ExecAction) + if err := DeepCopy_v1_ExecAction(*in, *out, c); err != nil { + return err + } + } else { + out.Exec = nil + } + if in.HTTPGet != nil { + in, out := &in.HTTPGet, &out.HTTPGet + *out = new(HTTPGetAction) + if err := DeepCopy_v1_HTTPGetAction(*in, *out, c); err != nil { + return err + } + } else { + out.HTTPGet = nil + } + if in.TCPSocket != nil { + in, out := &in.TCPSocket, &out.TCPSocket + *out = new(TCPSocketAction) + **out = **in + } else { + out.TCPSocket = nil + } + return nil + } +} + +func DeepCopy_v1_HostPathVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostPathVolumeSource) + out := out.(*HostPathVolumeSource) + out.Path = in.Path + return nil + } +} + +func DeepCopy_v1_ISCSIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ISCSIVolumeSource) + out := out.(*ISCSIVolumeSource) + out.TargetPortal = in.TargetPortal + out.IQN = in.IQN + out.Lun = in.Lun + out.ISCSIInterface = in.ISCSIInterface + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_KeyToPath(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KeyToPath) + out := out.(*KeyToPath) + out.Key = in.Key + out.Path = in.Path + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_v1_Lifecycle(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Lifecycle) + out := out.(*Lifecycle) + if in.PostStart != nil { + in, out := &in.PostStart, &out.PostStart + *out = new(Handler) + if err := DeepCopy_v1_Handler(*in, *out, c); err != nil { + return err + } + } else { + out.PostStart = nil + } + if in.PreStop != nil { + in, out := &in.PreStop, &out.PreStop + *out = new(Handler) + if err := DeepCopy_v1_Handler(*in, *out, c); err != nil { + return err + } + } else { + out.PreStop = nil + } + return nil + } +} + +func DeepCopy_v1_LimitRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRange) + out := out.(*LimitRange) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_LimitRangeSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_LimitRangeItem(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeItem) + out := out.(*LimitRangeItem) + out.Type = in.Type + if in.Max != nil { + in, out := &in.Max, &out.Max + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Max = nil + } + if in.Min != nil { + in, out := &in.Min, &out.Min + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Min = nil + } + if in.Default != nil { + in, out := &in.Default, &out.Default + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Default = nil + } + if in.DefaultRequest != nil { + in, out := &in.DefaultRequest, &out.DefaultRequest + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.DefaultRequest = nil + } + if in.MaxLimitRequestRatio != nil { + in, out := &in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.MaxLimitRequestRatio = nil + } + return nil + } +} + +func DeepCopy_v1_LimitRangeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeList) + out := out.(*LimitRangeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]LimitRange, len(*in)) + for i := range *in { + if err := DeepCopy_v1_LimitRange(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_LimitRangeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeSpec) + out := out.(*LimitRangeSpec) + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make([]LimitRangeItem, len(*in)) + for i := range *in { + if err := DeepCopy_v1_LimitRangeItem(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Limits = nil + } + return nil + } +} + +func DeepCopy_v1_List(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*List) + out := out.(*List) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]runtime.RawExtension, len(*in)) + for i := range *in { + if err := runtime.DeepCopy_runtime_RawExtension(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ListOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ListOptions) + out := out.(*ListOptions) + out.TypeMeta = in.TypeMeta + out.LabelSelector = in.LabelSelector + out.FieldSelector = in.FieldSelector + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + return nil + } +} + +func DeepCopy_v1_LoadBalancerIngress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LoadBalancerIngress) + out := out.(*LoadBalancerIngress) + out.IP = in.IP + out.Hostname = in.Hostname + return nil + } +} + +func DeepCopy_v1_LoadBalancerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LoadBalancerStatus) + out := out.(*LoadBalancerStatus) + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]LoadBalancerIngress, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ingress = nil + } + return nil + } +} + +func DeepCopy_v1_LocalObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LocalObjectReference) + out := out.(*LocalObjectReference) + out.Name = in.Name + return nil + } +} + +func DeepCopy_v1_NFSVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NFSVolumeSource) + out := out.(*NFSVolumeSource) + out.Server = in.Server + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_Namespace(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Namespace) + out := out.(*Namespace) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_NamespaceSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1_NamespaceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceList) + out := out.(*NamespaceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Namespace, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Namespace(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_NamespaceSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceSpec) + out := out.(*NamespaceSpec) + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]FinalizerName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Finalizers = nil + } + return nil + } +} + +func DeepCopy_v1_NamespaceStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceStatus) + out := out.(*NamespaceStatus) + out.Phase = in.Phase + return nil + } +} + +func DeepCopy_v1_Node(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Node) + out := out.(*Node) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_v1_NodeStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_NodeAddress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeAddress) + out := out.(*NodeAddress) + out.Type = in.Type + out.Address = in.Address + return nil + } +} + +func DeepCopy_v1_NodeAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeAffinity) + out := out.(*NodeAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = new(NodeSelector) + if err := DeepCopy_v1_NodeSelector(*in, *out, c); err != nil { + return err + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]PreferredSchedulingTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PreferredSchedulingTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_v1_NodeCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeCondition) + out := out.(*NodeCondition) + out.Type = in.Type + out.Status = in.Status + out.LastHeartbeatTime = in.LastHeartbeatTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_NodeDaemonEndpoints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeDaemonEndpoints) + out := out.(*NodeDaemonEndpoints) + out.KubeletEndpoint = in.KubeletEndpoint + return nil + } +} + +func DeepCopy_v1_NodeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeList) + out := out.(*NodeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Node, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Node(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_NodeProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeProxyOptions) + out := out.(*NodeProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_v1_NodeSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelector) + out := out.(*NodeSelector) + if in.NodeSelectorTerms != nil { + in, out := &in.NodeSelectorTerms, &out.NodeSelectorTerms + *out = make([]NodeSelectorTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_NodeSelectorTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.NodeSelectorTerms = nil + } + return nil + } +} + +func DeepCopy_v1_NodeSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelectorRequirement) + out := out.(*NodeSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} + +func DeepCopy_v1_NodeSelectorTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelectorTerm) + out := out.(*NodeSelectorTerm) + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]NodeSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_v1_NodeSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_v1_NodeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSpec) + out := out.(*NodeSpec) + out.PodCIDR = in.PodCIDR + out.ExternalID = in.ExternalID + out.ProviderID = in.ProviderID + out.Unschedulable = in.Unschedulable + return nil + } +} + +func DeepCopy_v1_NodeStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeStatus) + out := out.(*NodeStatus) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + if in.Allocatable != nil { + in, out := &in.Allocatable, &out.Allocatable + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Allocatable = nil + } + out.Phase = in.Phase + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]NodeCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1_NodeCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]NodeAddress, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Addresses = nil + } + out.DaemonEndpoints = in.DaemonEndpoints + out.NodeInfo = in.NodeInfo + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ContainerImage, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ContainerImage(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + if in.VolumesInUse != nil { + in, out := &in.VolumesInUse, &out.VolumesInUse + *out = make([]UniqueVolumeName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumesInUse = nil + } + if in.VolumesAttached != nil { + in, out := &in.VolumesAttached, &out.VolumesAttached + *out = make([]AttachedVolume, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumesAttached = nil + } + return nil + } +} + +func DeepCopy_v1_NodeSystemInfo(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSystemInfo) + out := out.(*NodeSystemInfo) + out.MachineID = in.MachineID + out.SystemUUID = in.SystemUUID + out.BootID = in.BootID + out.KernelVersion = in.KernelVersion + out.OSImage = in.OSImage + out.ContainerRuntimeVersion = in.ContainerRuntimeVersion + out.KubeletVersion = in.KubeletVersion + out.KubeProxyVersion = in.KubeProxyVersion + out.OperatingSystem = in.OperatingSystem + out.Architecture = in.Architecture + return nil + } +} + +func DeepCopy_v1_ObjectFieldSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectFieldSelector) + out := out.(*ObjectFieldSelector) + out.APIVersion = in.APIVersion + out.FieldPath = in.FieldPath + return nil + } +} + +func DeepCopy_v1_ObjectMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectMeta) + out := out.(*ObjectMeta) + out.Name = in.Name + out.GenerateName = in.GenerateName + out.Namespace = in.Namespace + out.SelfLink = in.SelfLink + out.UID = in.UID + out.ResourceVersion = in.ResourceVersion + out.Generation = in.Generation + out.CreationTimestamp = in.CreationTimestamp.DeepCopy() + if in.DeletionTimestamp != nil { + in, out := &in.DeletionTimestamp, &out.DeletionTimestamp + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.DeletionTimestamp = nil + } + if in.DeletionGracePeriodSeconds != nil { + in, out := &in.DeletionGracePeriodSeconds, &out.DeletionGracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.DeletionGracePeriodSeconds = nil + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Labels = nil + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Annotations = nil + } + if in.OwnerReferences != nil { + in, out := &in.OwnerReferences, &out.OwnerReferences + *out = make([]OwnerReference, len(*in)) + for i := range *in { + if err := DeepCopy_v1_OwnerReference(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.OwnerReferences = nil + } + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Finalizers = nil + } + out.ClusterName = in.ClusterName + return nil + } +} + +func DeepCopy_v1_ObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectReference) + out := out.(*ObjectReference) + out.Kind = in.Kind + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = in.UID + out.APIVersion = in.APIVersion + out.ResourceVersion = in.ResourceVersion + out.FieldPath = in.FieldPath + return nil + } +} + +func DeepCopy_v1_OwnerReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OwnerReference) + out := out.(*OwnerReference) + out.APIVersion = in.APIVersion + out.Kind = in.Kind + out.Name = in.Name + out.UID = in.UID + if in.Controller != nil { + in, out := &in.Controller, &out.Controller + *out = new(bool) + **out = **in + } else { + out.Controller = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolume) + out := out.(*PersistentVolume) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PersistentVolumeSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaim(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaim) + out := out.(*PersistentVolumeClaim) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PersistentVolumeClaimSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_PersistentVolumeClaimStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaimList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimList) + out := out.(*PersistentVolumeClaimList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolumeClaim, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PersistentVolumeClaim(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaimSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimSpec) + out := out.(*PersistentVolumeClaimSpec) + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := DeepCopy_v1_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + out.VolumeName = in.VolumeName + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaimStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimStatus) + out := out.(*PersistentVolumeClaimStatus) + out.Phase = in.Phase + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaimVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimVolumeSource) + out := out.(*PersistentVolumeClaimVolumeSource) + out.ClaimName = in.ClaimName + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_PersistentVolumeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeList) + out := out.(*PersistentVolumeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolume, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PersistentVolume(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeSource) + out := out.(*PersistentVolumeSource) + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + **out = **in + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in + } else { + out.AWSElasticBlockStore = nil + } + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + **out = **in + } else { + out.HostPath = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + **out = **in + } else { + out.Glusterfs = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + **out = **in + } else { + out.NFS = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := DeepCopy_v1_RBDVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + **out = **in + } else { + out.ISCSI = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + **out = **in + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := DeepCopy_v1_CephFSVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := DeepCopy_v1_FCVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FC = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + **out = **in + } else { + out.Flocker = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := DeepCopy_v1_FlexVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + **out = **in + } else { + out.AzureFile = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in + } else { + out.VsphereVolume = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + **out = **in + } else { + out.Quobyte = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := DeepCopy_v1_AzureDiskVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeSpec) + out := out.(*PersistentVolumeSpec) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + if err := DeepCopy_v1_PersistentVolumeSource(&in.PersistentVolumeSource, &out.PersistentVolumeSource, c); err != nil { + return err + } + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.ClaimRef != nil { + in, out := &in.ClaimRef, &out.ClaimRef + *out = new(ObjectReference) + **out = **in + } else { + out.ClaimRef = nil + } + out.PersistentVolumeReclaimPolicy = in.PersistentVolumeReclaimPolicy + return nil + } +} + +func DeepCopy_v1_PersistentVolumeStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeStatus) + out := out.(*PersistentVolumeStatus) + out.Phase = in.Phase + out.Message = in.Message + out.Reason = in.Reason + return nil + } +} + +func DeepCopy_v1_Pod(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Pod) + out := out.(*Pod) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PodSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_PodStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_PodAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAffinity) + out := out.(*PodAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_v1_PodAffinityTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAffinityTerm) + out := out.(*PodAffinityTerm) + if in.LabelSelector != nil { + in, out := &in.LabelSelector, &out.LabelSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.LabelSelector = nil + } + if in.Namespaces != nil { + in, out := &in.Namespaces, &out.Namespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Namespaces = nil + } + out.TopologyKey = in.TopologyKey + return nil + } +} + +func DeepCopy_v1_PodAntiAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAntiAffinity) + out := out.(*PodAntiAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_v1_PodAttachOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAttachOptions) + out := out.(*PodAttachOptions) + out.TypeMeta = in.TypeMeta + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + return nil + } +} + +func DeepCopy_v1_PodCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodCondition) + out := out.(*PodCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_PodExecOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodExecOptions) + out := out.(*PodExecOptions) + out.TypeMeta = in.TypeMeta + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_v1_PodList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodList) + out := out.(*PodList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Pod, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Pod(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_PodLogOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodLogOptions) + out := out.(*PodLogOptions) + out.TypeMeta = in.TypeMeta + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } else { + out.SinceSeconds = nil + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.SinceTime = nil + } + out.Timestamps = in.Timestamps + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } else { + out.TailLines = nil + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } else { + out.LimitBytes = nil + } + return nil + } +} + +func DeepCopy_v1_PodProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodProxyOptions) + out := out.(*PodProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_v1_PodSecurityContext(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityContext) + out := out.(*PodSecurityContext) + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + if in.RunAsUser != nil { + in, out := &in.RunAsUser, &out.RunAsUser + *out = new(int64) + **out = **in + } else { + out.RunAsUser = nil + } + if in.RunAsNonRoot != nil { + in, out := &in.RunAsNonRoot, &out.RunAsNonRoot + *out = new(bool) + **out = **in + } else { + out.RunAsNonRoot = nil + } + if in.SupplementalGroups != nil { + in, out := &in.SupplementalGroups, &out.SupplementalGroups + *out = make([]int64, len(*in)) + copy(*out, *in) + } else { + out.SupplementalGroups = nil + } + if in.FSGroup != nil { + in, out := &in.FSGroup, &out.FSGroup + *out = new(int64) + **out = **in + } else { + out.FSGroup = nil + } + return nil + } +} + +func DeepCopy_v1_PodSignature(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSignature) + out := out.(*PodSignature) + if in.PodController != nil { + in, out := &in.PodController, &out.PodController + *out = new(OwnerReference) + if err := DeepCopy_v1_OwnerReference(*in, *out, c); err != nil { + return err + } + } else { + out.PodController = nil + } + return nil + } +} + +func DeepCopy_v1_PodSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSpec) + out := out.(*PodSpec) + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]Volume, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Volume(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Volumes = nil + } + if in.InitContainers != nil { + in, out := &in.InitContainers, &out.InitContainers + *out = make([]Container, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Container(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.InitContainers = nil + } + if in.Containers != nil { + in, out := &in.Containers, &out.Containers + *out = make([]Container, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Container(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Containers = nil + } + out.RestartPolicy = in.RestartPolicy + if in.TerminationGracePeriodSeconds != nil { + in, out := &in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.TerminationGracePeriodSeconds = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + out.DNSPolicy = in.DNSPolicy + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.NodeSelector = nil + } + out.ServiceAccountName = in.ServiceAccountName + out.DeprecatedServiceAccount = in.DeprecatedServiceAccount + out.NodeName = in.NodeName + out.HostNetwork = in.HostNetwork + out.HostPID = in.HostPID + out.HostIPC = in.HostIPC + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(PodSecurityContext) + if err := DeepCopy_v1_PodSecurityContext(*in, *out, c); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ImagePullSecrets = nil + } + out.Hostname = in.Hostname + out.Subdomain = in.Subdomain + return nil + } +} + +func DeepCopy_v1_PodStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodStatus) + out := out.(*PodStatus) + out.Phase = in.Phase + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]PodCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PodCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + out.Message = in.Message + out.Reason = in.Reason + out.HostIP = in.HostIP + out.PodIP = in.PodIP + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.InitContainerStatuses != nil { + in, out := &in.InitContainerStatuses, &out.InitContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ContainerStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.InitContainerStatuses = nil + } + if in.ContainerStatuses != nil { + in, out := &in.ContainerStatuses, &out.ContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ContainerStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.ContainerStatuses = nil + } + return nil + } +} + +func DeepCopy_v1_PodStatusResult(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodStatusResult) + out := out.(*PodStatusResult) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PodStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_PodTemplate(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplate) + out := out.(*PodTemplate) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_PodTemplateList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplateList) + out := out.(*PodTemplateList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodTemplate, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PodTemplate(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_PodTemplateSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplateSpec) + out := out.(*PodTemplateSpec) + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PodSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_Preconditions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Preconditions) + out := out.(*Preconditions) + if in.UID != nil { + in, out := &in.UID, &out.UID + *out = new(types.UID) + **out = **in + } else { + out.UID = nil + } + return nil + } +} + +func DeepCopy_v1_PreferAvoidPodsEntry(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PreferAvoidPodsEntry) + out := out.(*PreferAvoidPodsEntry) + if err := DeepCopy_v1_PodSignature(&in.PodSignature, &out.PodSignature, c); err != nil { + return err + } + out.EvictionTime = in.EvictionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_PreferredSchedulingTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PreferredSchedulingTerm) + out := out.(*PreferredSchedulingTerm) + out.Weight = in.Weight + if err := DeepCopy_v1_NodeSelectorTerm(&in.Preference, &out.Preference, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_Probe(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Probe) + out := out.(*Probe) + if err := DeepCopy_v1_Handler(&in.Handler, &out.Handler, c); err != nil { + return err + } + out.InitialDelaySeconds = in.InitialDelaySeconds + out.TimeoutSeconds = in.TimeoutSeconds + out.PeriodSeconds = in.PeriodSeconds + out.SuccessThreshold = in.SuccessThreshold + out.FailureThreshold = in.FailureThreshold + return nil + } +} + +func DeepCopy_v1_QuobyteVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*QuobyteVolumeSource) + out := out.(*QuobyteVolumeSource) + out.Registry = in.Registry + out.Volume = in.Volume + out.ReadOnly = in.ReadOnly + out.User = in.User + out.Group = in.Group + return nil + } +} + +func DeepCopy_v1_RBDVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RBDVolumeSource) + out := out.(*RBDVolumeSource) + if in.CephMonitors != nil { + in, out := &in.CephMonitors, &out.CephMonitors + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.CephMonitors = nil + } + out.RBDImage = in.RBDImage + out.FSType = in.FSType + out.RBDPool = in.RBDPool + out.RadosUser = in.RadosUser + out.Keyring = in.Keyring + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_RangeAllocation(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RangeAllocation) + out := out.(*RangeAllocation) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Range = in.Range + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_v1_ReplicationController(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationController) + out := out.(*ReplicationController) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_ReplicationControllerSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1_ReplicationControllerList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerList) + out := out.(*ReplicationControllerList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReplicationController, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ReplicationController(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ReplicationControllerSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerSpec) + out := out.(*ReplicationControllerSpec) + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } else { + out.Replicas = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(PodTemplateSpec) + if err := DeepCopy_v1_PodTemplateSpec(*in, *out, c); err != nil { + return err + } + } else { + out.Template = nil + } + return nil + } +} + +func DeepCopy_v1_ReplicationControllerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerStatus) + out := out.(*ReplicationControllerStatus) + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil + } +} + +func DeepCopy_v1_ResourceFieldSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceFieldSelector) + out := out.(*ResourceFieldSelector) + out.ContainerName = in.ContainerName + out.Resource = in.Resource + out.Divisor = in.Divisor.DeepCopy() + return nil + } +} + +func DeepCopy_v1_ResourceQuota(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuota) + out := out.(*ResourceQuota) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_ResourceQuotaSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_ResourceQuotaStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_ResourceQuotaList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaList) + out := out.(*ResourceQuotaList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ResourceQuota, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ResourceQuota(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ResourceQuotaSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaSpec) + out := out.(*ResourceQuotaSpec) + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Hard = nil + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]ResourceQuotaScope, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Scopes = nil + } + return nil + } +} + +func DeepCopy_v1_ResourceQuotaStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaStatus) + out := out.(*ResourceQuotaStatus) + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Hard = nil + } + if in.Used != nil { + in, out := &in.Used, &out.Used + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Used = nil + } + return nil + } +} + +func DeepCopy_v1_ResourceRequirements(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceRequirements) + out := out.(*ResourceRequirements) + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Limits = nil + } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Requests = nil + } + return nil + } +} + +func DeepCopy_v1_SELinuxOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxOptions) + out := out.(*SELinuxOptions) + out.User = in.User + out.Role = in.Role + out.Type = in.Type + out.Level = in.Level + return nil + } +} + +func DeepCopy_v1_Secret(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Secret) + out := out.(*Secret) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string][]byte) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(*[]byte) + } + } + } else { + out.Data = nil + } + if in.StringData != nil { + in, out := &in.StringData, &out.StringData + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.StringData = nil + } + out.Type = in.Type + return nil + } +} + +func DeepCopy_v1_SecretKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretKeySelector) + out := out.(*SecretKeySelector) + out.LocalObjectReference = in.LocalObjectReference + out.Key = in.Key + return nil + } +} + +func DeepCopy_v1_SecretList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretList) + out := out.(*SecretList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Secret, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Secret(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_SecretVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretVolumeSource) + out := out.(*SecretVolumeSource) + out.SecretName = in.SecretName + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := DeepCopy_v1_KeyToPath(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_v1_SecurityContext(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecurityContext) + out := out.(*SecurityContext) + if in.Capabilities != nil { + in, out := &in.Capabilities, &out.Capabilities + *out = new(Capabilities) + if err := DeepCopy_v1_Capabilities(*in, *out, c); err != nil { + return err + } + } else { + out.Capabilities = nil + } + if in.Privileged != nil { + in, out := &in.Privileged, &out.Privileged + *out = new(bool) + **out = **in + } else { + out.Privileged = nil + } + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + if in.RunAsUser != nil { + in, out := &in.RunAsUser, &out.RunAsUser + *out = new(int64) + **out = **in + } else { + out.RunAsUser = nil + } + if in.RunAsNonRoot != nil { + in, out := &in.RunAsNonRoot, &out.RunAsNonRoot + *out = new(bool) + **out = **in + } else { + out.RunAsNonRoot = nil + } + if in.ReadOnlyRootFilesystem != nil { + in, out := &in.ReadOnlyRootFilesystem, &out.ReadOnlyRootFilesystem + *out = new(bool) + **out = **in + } else { + out.ReadOnlyRootFilesystem = nil + } + return nil + } +} + +func DeepCopy_v1_SerializedReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SerializedReference) + out := out.(*SerializedReference) + out.TypeMeta = in.TypeMeta + out.Reference = in.Reference + return nil + } +} + +func DeepCopy_v1_Service(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Service) + out := out.(*Service) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_ServiceSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_ServiceStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_ServiceAccount(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccount) + out := out.(*ServiceAccount) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Secrets = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ImagePullSecrets = nil + } + return nil + } +} + +func DeepCopy_v1_ServiceAccountList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccountList) + out := out.(*ServiceAccountList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ServiceAccount, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ServiceAccount(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ServiceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceList) + out := out.(*ServiceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Service, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Service(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ServicePort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServicePort) + out := out.(*ServicePort) + out.Name = in.Name + out.Protocol = in.Protocol + out.Port = in.Port + out.TargetPort = in.TargetPort + out.NodePort = in.NodePort + return nil + } +} + +func DeepCopy_v1_ServiceProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceProxyOptions) + out := out.(*ServiceProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_v1_ServiceSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceSpec) + out := out.(*ServiceSpec) + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ServicePort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + out.ClusterIP = in.ClusterIP + out.Type = in.Type + if in.ExternalIPs != nil { + in, out := &in.ExternalIPs, &out.ExternalIPs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ExternalIPs = nil + } + if in.DeprecatedPublicIPs != nil { + in, out := &in.DeprecatedPublicIPs, &out.DeprecatedPublicIPs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.DeprecatedPublicIPs = nil + } + out.SessionAffinity = in.SessionAffinity + out.LoadBalancerIP = in.LoadBalancerIP + if in.LoadBalancerSourceRanges != nil { + in, out := &in.LoadBalancerSourceRanges, &out.LoadBalancerSourceRanges + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.LoadBalancerSourceRanges = nil + } + out.ExternalName = in.ExternalName + return nil + } +} + +func DeepCopy_v1_ServiceStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceStatus) + out := out.(*ServiceStatus) + if err := DeepCopy_v1_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_TCPSocketAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TCPSocketAction) + out := out.(*TCPSocketAction) + out.Port = in.Port + return nil + } +} + +func DeepCopy_v1_Taint(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Taint) + out := out.(*Taint) + out.Key = in.Key + out.Value = in.Value + out.Effect = in.Effect + return nil + } +} + +func DeepCopy_v1_Toleration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Toleration) + out := out.(*Toleration) + out.Key = in.Key + out.Operator = in.Operator + out.Value = in.Value + out.Effect = in.Effect + return nil + } +} + +func DeepCopy_v1_Volume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Volume) + out := out.(*Volume) + out.Name = in.Name + if err := DeepCopy_v1_VolumeSource(&in.VolumeSource, &out.VolumeSource, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_VolumeMount(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeMount) + out := out.(*VolumeMount) + out.Name = in.Name + out.ReadOnly = in.ReadOnly + out.MountPath = in.MountPath + out.SubPath = in.SubPath + return nil + } +} + +func DeepCopy_v1_VolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeSource) + out := out.(*VolumeSource) + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + **out = **in + } else { + out.HostPath = nil + } + if in.EmptyDir != nil { + in, out := &in.EmptyDir, &out.EmptyDir + *out = new(EmptyDirVolumeSource) + **out = **in + } else { + out.EmptyDir = nil + } + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + **out = **in + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in + } else { + out.AWSElasticBlockStore = nil + } + if in.GitRepo != nil { + in, out := &in.GitRepo, &out.GitRepo + *out = new(GitRepoVolumeSource) + **out = **in + } else { + out.GitRepo = nil + } + if in.Secret != nil { + in, out := &in.Secret, &out.Secret + *out = new(SecretVolumeSource) + if err := DeepCopy_v1_SecretVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.Secret = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + **out = **in + } else { + out.NFS = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + **out = **in + } else { + out.ISCSI = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + **out = **in + } else { + out.Glusterfs = nil + } + if in.PersistentVolumeClaim != nil { + in, out := &in.PersistentVolumeClaim, &out.PersistentVolumeClaim + *out = new(PersistentVolumeClaimVolumeSource) + **out = **in + } else { + out.PersistentVolumeClaim = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := DeepCopy_v1_RBDVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := DeepCopy_v1_FlexVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + **out = **in + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := DeepCopy_v1_CephFSVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + **out = **in + } else { + out.Flocker = nil + } + if in.DownwardAPI != nil { + in, out := &in.DownwardAPI, &out.DownwardAPI + *out = new(DownwardAPIVolumeSource) + if err := DeepCopy_v1_DownwardAPIVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.DownwardAPI = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := DeepCopy_v1_FCVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FC = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + **out = **in + } else { + out.AzureFile = nil + } + if in.ConfigMap != nil { + in, out := &in.ConfigMap, &out.ConfigMap + *out = new(ConfigMapVolumeSource) + if err := DeepCopy_v1_ConfigMapVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.ConfigMap = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in + } else { + out.VsphereVolume = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + **out = **in + } else { + out.Quobyte = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := DeepCopy_v1_AzureDiskVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil + } +} + +func DeepCopy_v1_VsphereVirtualDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VsphereVirtualDiskVolumeSource) + out := out.(*VsphereVirtualDiskVolumeSource) + out.VolumePath = in.VolumePath + out.FSType = in.FSType + return nil + } +} + +func DeepCopy_v1_WeightedPodAffinityTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*WeightedPodAffinityTerm) + out := out.(*WeightedPodAffinityTerm) + out.Weight = in.Weight + if err := DeepCopy_v1_PodAffinityTerm(&in.PodAffinityTerm, &out.PodAffinityTerm, c); err != nil { + return err + } + return nil + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/validation/doc.go b/vendor/k8s.io/client-go/1.4/pkg/api/validation/doc.go new file mode 100644 index 00000000..f17a15cf --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/validation/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package validation has functions for validating the correctness of api +// objects and explaining what is wrong with them when they aren't valid. +package validation diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/validation/events.go b/vendor/k8s.io/client-go/1.4/pkg/api/validation/events.go new file mode 100644 index 00000000..adfbc12a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/validation/events.go @@ -0,0 +1,80 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "fmt" + + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/meta" + "k8s.io/client-go/1.4/pkg/api/unversioned" + apiutil "k8s.io/client-go/1.4/pkg/api/util" + "k8s.io/client-go/1.4/pkg/apimachinery/registered" + "k8s.io/client-go/1.4/pkg/util/validation" + "k8s.io/client-go/1.4/pkg/util/validation/field" +) + +// ValidateEvent makes sure that the event makes sense. +func ValidateEvent(event *api.Event) field.ErrorList { + allErrs := field.ErrorList{} + + // Make sure event.Namespace and the involvedObject.Namespace agree + if len(event.InvolvedObject.Namespace) == 0 { + // event.Namespace must also be empty (or "default", for compatibility with old clients) + if event.Namespace != api.NamespaceNone && event.Namespace != api.NamespaceDefault { + allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) + } + } else { + // event namespace must match + if event.Namespace != event.InvolvedObject.Namespace { + allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) + } + } + + // For kinds we recognize, make sure involvedObject.Namespace is set for namespaced kinds + if namespaced, err := isNamespacedKind(event.InvolvedObject.Kind, event.InvolvedObject.APIVersion); err == nil { + if namespaced && len(event.InvolvedObject.Namespace) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("involvedObject", "namespace"), fmt.Sprintf("required for kind %s", event.InvolvedObject.Kind))) + } + if !namespaced && len(event.InvolvedObject.Namespace) > 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, fmt.Sprintf("not allowed for kind %s", event.InvolvedObject.Kind))) + } + } + + for _, msg := range validation.IsDNS1123Subdomain(event.Namespace) { + allErrs = append(allErrs, field.Invalid(field.NewPath("namespace"), event.Namespace, msg)) + } + return allErrs +} + +// Check whether the kind in groupVersion is scoped at the root of the api hierarchy +func isNamespacedKind(kind, groupVersion string) (bool, error) { + group := apiutil.GetGroup(groupVersion) + g, err := registered.Group(group) + if err != nil { + return false, err + } + restMapping, err := g.RESTMapper.RESTMapping(unversioned.GroupKind{Group: group, Kind: kind}, apiutil.GetVersion(groupVersion)) + if err != nil { + return false, err + } + scopeName := restMapping.Scope.Name() + if scopeName == meta.RESTScopeNameNamespace { + return true, nil + } + return false, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/validation/name.go b/vendor/k8s.io/client-go/1.4/pkg/api/validation/name.go new file mode 100644 index 00000000..1358e6e7 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/validation/name.go @@ -0,0 +1,66 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "fmt" + "strings" +) + +// NameMayNotBe specifies strings that cannot be used as names specified as path segments (like the REST API or etcd store) +var NameMayNotBe = []string{".", ".."} + +// NameMayNotContain specifies substrings that cannot be used in names specified as path segments (like the REST API or etcd store) +var NameMayNotContain = []string{"/", "%"} + +// IsValidPathSegmentName validates the name can be safely encoded as a path segment +func IsValidPathSegmentName(name string) []string { + for _, illegalName := range NameMayNotBe { + if name == illegalName { + return []string{fmt.Sprintf(`may not be '%s'`, illegalName)} + } + } + + for _, illegalContent := range NameMayNotContain { + if strings.Contains(name, illegalContent) { + return []string{fmt.Sprintf(`may not contain '%s'`, illegalContent)} + } + } + + return nil +} + +// IsValidPathSegmentPrefix validates the name can be used as a prefix for a name which will be encoded as a path segment +// It does not check for exact matches with disallowed names, since an arbitrary suffix might make the name valid +func IsValidPathSegmentPrefix(name string) []string { + for _, illegalContent := range NameMayNotContain { + if strings.Contains(name, illegalContent) { + return []string{fmt.Sprintf(`may not contain '%s'`, illegalContent)} + } + } + + return nil +} + +// ValidatePathSegmentName validates the name can be safely encoded as a path segment +func ValidatePathSegmentName(name string, prefix bool) []string { + if prefix { + return IsValidPathSegmentPrefix(name) + } else { + return IsValidPathSegmentName(name) + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/validation/schema.go b/vendor/k8s.io/client-go/1.4/pkg/api/validation/schema.go new file mode 100644 index 00000000..1116bff6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/validation/schema.go @@ -0,0 +1,370 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "encoding/json" + "fmt" + "reflect" + "regexp" + "strings" + + "github.com/emicklei/go-restful/swagger" + "github.com/golang/glog" + apiutil "k8s.io/client-go/1.4/pkg/api/util" + "k8s.io/client-go/1.4/pkg/runtime" + utilerrors "k8s.io/client-go/1.4/pkg/util/errors" + "k8s.io/client-go/1.4/pkg/util/yaml" +) + +type InvalidTypeError struct { + ExpectedKind reflect.Kind + ObservedKind reflect.Kind + FieldName string +} + +func (i *InvalidTypeError) Error() string { + return fmt.Sprintf("expected type %s, for field %s, got %s", i.ExpectedKind.String(), i.FieldName, i.ObservedKind.String()) +} + +func NewInvalidTypeError(expected reflect.Kind, observed reflect.Kind, fieldName string) error { + return &InvalidTypeError{expected, observed, fieldName} +} + +// TypeNotFoundError is returned when specified type +// can not found in schema +type TypeNotFoundError string + +func (tnfe TypeNotFoundError) Error() string { + return fmt.Sprintf("couldn't find type: %s", string(tnfe)) +} + +// Schema is an interface that knows how to validate an API object serialized to a byte array. +type Schema interface { + ValidateBytes(data []byte) error +} + +type NullSchema struct{} + +func (NullSchema) ValidateBytes(data []byte) error { return nil } + +type SwaggerSchema struct { + api swagger.ApiDeclaration + delegate Schema // For delegating to other api groups +} + +func NewSwaggerSchemaFromBytes(data []byte, factory Schema) (Schema, error) { + schema := &SwaggerSchema{} + err := json.Unmarshal(data, &schema.api) + if err != nil { + return nil, err + } + schema.delegate = factory + return schema, nil +} + +// validateList unpacks a list and validate every item in the list. +// It return nil if every item is ok. +// Otherwise it return an error list contain errors of every item. +func (s *SwaggerSchema) validateList(obj map[string]interface{}) []error { + items, exists := obj["items"] + if !exists { + return []error{fmt.Errorf("no items field in %#v", obj)} + } + return s.validateItems(items) +} + +func (s *SwaggerSchema) validateItems(items interface{}) []error { + allErrs := []error{} + itemList, ok := items.([]interface{}) + if !ok { + return append(allErrs, fmt.Errorf("items isn't a slice")) + } + for i, item := range itemList { + fields, ok := item.(map[string]interface{}) + if !ok { + allErrs = append(allErrs, fmt.Errorf("items[%d] isn't a map[string]interface{}", i)) + continue + } + groupVersion := fields["apiVersion"] + if groupVersion == nil { + allErrs = append(allErrs, fmt.Errorf("items[%d].apiVersion not set", i)) + continue + } + itemVersion, ok := groupVersion.(string) + if !ok { + allErrs = append(allErrs, fmt.Errorf("items[%d].apiVersion isn't string type", i)) + continue + } + if len(itemVersion) == 0 { + allErrs = append(allErrs, fmt.Errorf("items[%d].apiVersion is empty", i)) + } + kind := fields["kind"] + if kind == nil { + allErrs = append(allErrs, fmt.Errorf("items[%d].kind not set", i)) + continue + } + itemKind, ok := kind.(string) + if !ok { + allErrs = append(allErrs, fmt.Errorf("items[%d].kind isn't string type", i)) + continue + } + if len(itemKind) == 0 { + allErrs = append(allErrs, fmt.Errorf("items[%d].kind is empty", i)) + } + version := apiutil.GetVersion(itemVersion) + errs := s.ValidateObject(item, "", version+"."+itemKind) + if len(errs) >= 1 { + allErrs = append(allErrs, errs...) + } + } + + return allErrs +} + +func (s *SwaggerSchema) ValidateBytes(data []byte) error { + var obj interface{} + out, err := yaml.ToJSON(data) + if err != nil { + return err + } + data = out + if err := json.Unmarshal(data, &obj); err != nil { + return err + } + fields, ok := obj.(map[string]interface{}) + if !ok { + return fmt.Errorf("error in unmarshaling data %s", string(data)) + } + groupVersion := fields["apiVersion"] + if groupVersion == nil { + return fmt.Errorf("apiVersion not set") + } + if _, ok := groupVersion.(string); !ok { + return fmt.Errorf("apiVersion isn't string type") + } + kind := fields["kind"] + if kind == nil { + return fmt.Errorf("kind not set") + } + if _, ok := kind.(string); !ok { + return fmt.Errorf("kind isn't string type") + } + if strings.HasSuffix(kind.(string), "List") { + return utilerrors.NewAggregate(s.validateList(fields)) + } + version := apiutil.GetVersion(groupVersion.(string)) + allErrs := s.ValidateObject(obj, "", version+"."+kind.(string)) + if len(allErrs) == 1 { + return allErrs[0] + } + return utilerrors.NewAggregate(allErrs) +} + +func (s *SwaggerSchema) ValidateObject(obj interface{}, fieldName, typeName string) []error { + allErrs := []error{} + models := s.api.Models + model, ok := models.At(typeName) + + // Verify the api version matches. This is required for nested types with differing api versions because + // s.api only has schema for 1 api version (the parent object type's version). + // e.g. an extensions/v1beta1 Template embedding a /v1 Service requires the schema for the extensions/v1beta1 + // api to delegate to the schema for the /v1 api. + // Only do this for !ok objects so that cross ApiVersion vendored types take precedence. + if !ok && s.delegate != nil { + fields, mapOk := obj.(map[string]interface{}) + if !mapOk { + return append(allErrs, fmt.Errorf("field %s: expected object of type map[string]interface{}, but the actual type is %T", fieldName, obj)) + } + if delegated, err := s.delegateIfDifferentApiVersion(runtime.Unstructured{Object: fields}); delegated { + if err != nil { + allErrs = append(allErrs, err) + } + return allErrs + } + } + + if !ok { + return append(allErrs, TypeNotFoundError(typeName)) + } + properties := model.Properties + if len(properties.List) == 0 { + // The object does not have any sub-fields. + return nil + } + fields, ok := obj.(map[string]interface{}) + if !ok { + return append(allErrs, fmt.Errorf("field %s: expected object of type map[string]interface{}, but the actual type is %T", fieldName, obj)) + } + if len(fieldName) > 0 { + fieldName = fieldName + "." + } + // handle required fields + for _, requiredKey := range model.Required { + if _, ok := fields[requiredKey]; !ok { + allErrs = append(allErrs, fmt.Errorf("field %s: is required", requiredKey)) + } + } + for key, value := range fields { + details, ok := properties.At(key) + + // Special case for runtime.RawExtension and runtime.Objects because they always fail to validate + // This is because the actual values will be of some sub-type (e.g. Deployment) not the expected + // super-type (RawExtension) + if s.isGenericArray(details) { + errs := s.validateItems(value) + if len(errs) > 0 { + allErrs = append(allErrs, errs...) + } + continue + } + if !ok { + allErrs = append(allErrs, fmt.Errorf("found invalid field %s for %s", key, typeName)) + continue + } + if details.Type == nil && details.Ref == nil { + allErrs = append(allErrs, fmt.Errorf("could not find the type of %s from object: %v", key, details)) + } + var fieldType string + if details.Type != nil { + fieldType = *details.Type + } else { + fieldType = *details.Ref + } + if value == nil { + glog.V(2).Infof("Skipping nil field: %s", key) + continue + } + errs := s.validateField(value, fieldName+key, fieldType, &details) + if len(errs) > 0 { + allErrs = append(allErrs, errs...) + } + } + return allErrs +} + +// delegateIfDifferentApiVersion delegates the validation of an object if its ApiGroup does not match the +// current SwaggerSchema. +// First return value is true if the validation was delegated (by a different ApiGroup SwaggerSchema) +// Second return value is the result of the delegated validation if performed. +func (s *SwaggerSchema) delegateIfDifferentApiVersion(obj runtime.Unstructured) (bool, error) { + // Never delegate objects in the same ApiVersion or we will get infinite recursion + if !s.isDifferentApiVersion(obj) { + return false, nil + } + + // Convert the object back into bytes so that we can pass it to the ValidateBytes function + m, err := json.Marshal(obj.Object) + if err != nil { + return true, err + } + + // Delegate validation of this object to the correct SwaggerSchema for its ApiGroup + return true, s.delegate.ValidateBytes(m) +} + +// isDifferentApiVersion Returns true if obj lives in a different ApiVersion than the SwaggerSchema does. +// The SwaggerSchema will not be able to process objects in different ApiVersions unless they are vendored. +func (s *SwaggerSchema) isDifferentApiVersion(obj runtime.Unstructured) bool { + groupVersion := obj.GetAPIVersion() + return len(groupVersion) > 0 && s.api.ApiVersion != groupVersion +} + +// isGenericArray Returns true if p is an array of generic Objects - either RawExtension or Object. +func (s *SwaggerSchema) isGenericArray(p swagger.ModelProperty) bool { + return p.DataTypeFields.Type != nil && + *p.DataTypeFields.Type == "array" && + p.Items != nil && + p.Items.Ref != nil && + (*p.Items.Ref == "runtime.RawExtension" || *p.Items.Ref == "runtime.Object") +} + +// This matches type name in the swagger spec, such as "v1.Binding". +var versionRegexp = regexp.MustCompile(`^(v.+|unversioned)\..*`) + +func (s *SwaggerSchema) validateField(value interface{}, fieldName, fieldType string, fieldDetails *swagger.ModelProperty) []error { + allErrs := []error{} + if reflect.TypeOf(value) == nil { + return append(allErrs, fmt.Errorf("unexpected nil value for field %v", fieldName)) + } + // TODO: caesarxuchao: because we have multiple group/versions and objects + // may reference objects in other group, the commented out way of checking + // if a filedType is a type defined by us is outdated. We use a hacky way + // for now. + // TODO: the type name in the swagger spec is something like "v1.Binding", + // and the "v1" is generated from the package name, not the groupVersion of + // the type. We need to fix go-restful to embed the group name in the type + // name, otherwise we couldn't handle identically named types in different + // groups correctly. + if versionRegexp.MatchString(fieldType) { + // if strings.HasPrefix(fieldType, apiVersion) { + return s.ValidateObject(value, fieldName, fieldType) + } + switch fieldType { + case "string": + // Be loose about what we accept for 'string' since we use IntOrString in a couple of places + _, isString := value.(string) + _, isNumber := value.(float64) + _, isInteger := value.(int) + if !isString && !isNumber && !isInteger { + return append(allErrs, NewInvalidTypeError(reflect.String, reflect.TypeOf(value).Kind(), fieldName)) + } + case "array": + arr, ok := value.([]interface{}) + if !ok { + return append(allErrs, NewInvalidTypeError(reflect.Array, reflect.TypeOf(value).Kind(), fieldName)) + } + var arrType string + if fieldDetails.Items.Ref == nil && fieldDetails.Items.Type == nil { + return append(allErrs, NewInvalidTypeError(reflect.Array, reflect.TypeOf(value).Kind(), fieldName)) + } + if fieldDetails.Items.Ref != nil { + arrType = *fieldDetails.Items.Ref + } else { + arrType = *fieldDetails.Items.Type + } + for ix := range arr { + errs := s.validateField(arr[ix], fmt.Sprintf("%s[%d]", fieldName, ix), arrType, nil) + if len(errs) > 0 { + allErrs = append(allErrs, errs...) + } + } + case "uint64": + case "int64": + case "integer": + _, isNumber := value.(float64) + _, isInteger := value.(int) + if !isNumber && !isInteger { + return append(allErrs, NewInvalidTypeError(reflect.Int, reflect.TypeOf(value).Kind(), fieldName)) + } + case "float64": + if _, ok := value.(float64); !ok { + return append(allErrs, NewInvalidTypeError(reflect.Float64, reflect.TypeOf(value).Kind(), fieldName)) + } + case "boolean": + if _, ok := value.(bool); !ok { + return append(allErrs, NewInvalidTypeError(reflect.Bool, reflect.TypeOf(value).Kind(), fieldName)) + } + // API servers before release 1.3 produce swagger spec with `type: "any"` as the fallback type, while newer servers produce spec with `type: "object"`. + // We have both here so that kubectl can work with both old and new api servers. + case "object": + case "any": + default: + return append(allErrs, fmt.Errorf("unexpected type: %v", fieldType)) + } + return allErrs +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/validation/validation.go b/vendor/k8s.io/client-go/1.4/pkg/api/validation/validation.go new file mode 100644 index 00000000..27858d6d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/validation/validation.go @@ -0,0 +1,3619 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "encoding/json" + "fmt" + "net" + "os" + "path" + "reflect" + "regexp" + "strings" + + "github.com/golang/glog" + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/endpoints" + utilpod "k8s.io/client-go/1.4/pkg/api/pod" + "k8s.io/client-go/1.4/pkg/api/resource" + apiservice "k8s.io/client-go/1.4/pkg/api/service" + "k8s.io/client-go/1.4/pkg/api/unversioned" + unversionedvalidation "k8s.io/client-go/1.4/pkg/api/unversioned/validation" + "k8s.io/client-go/1.4/pkg/api/v1" + "k8s.io/client-go/1.4/pkg/capabilities" + "k8s.io/client-go/1.4/pkg/labels" + "k8s.io/client-go/1.4/pkg/security/apparmor" + utilconfig "k8s.io/client-go/1.4/pkg/util/config" + "k8s.io/client-go/1.4/pkg/util/intstr" + "k8s.io/client-go/1.4/pkg/util/sets" + "k8s.io/client-go/1.4/pkg/util/validation" + "k8s.io/client-go/1.4/pkg/util/validation/field" +) + +// TODO: delete this global variable when we enable the validation of common +// fields by default. +var RepairMalformedUpdates bool = true + +const isNegativeErrorMsg string = `must be greater than or equal to 0` +const isInvalidQuotaResource string = `must be a standard resource for quota` +const fieldImmutableErrorMsg string = `field is immutable` +const isNotIntegerErrorMsg string = `must be an integer` + +var pdPartitionErrorMsg string = validation.InclusiveRangeError(1, 255) +var volumeModeErrorMsg string = "must be a number between 0 and 0777 (octal), both inclusive" + +const totalAnnotationSizeLimitB int = 256 * (1 << 10) // 256 kB + +// BannedOwners is a black list of object that are not allowed to be owners. +var BannedOwners = map[unversioned.GroupVersionKind]struct{}{ + v1.SchemeGroupVersion.WithKind("Event"): {}, +} + +// ValidateHasLabel requires that api.ObjectMeta has a Label with key and expectedValue +func ValidateHasLabel(meta api.ObjectMeta, fldPath *field.Path, key, expectedValue string) field.ErrorList { + allErrs := field.ErrorList{} + actualValue, found := meta.Labels[key] + if !found { + allErrs = append(allErrs, field.Required(fldPath.Child("labels").Key(key), + fmt.Sprintf("must be '%s'", expectedValue))) + return allErrs + } + if actualValue != expectedValue { + allErrs = append(allErrs, field.Invalid(fldPath.Child("labels").Key(key), meta.Labels, + fmt.Sprintf("must be '%s'", expectedValue))) + } + return allErrs +} + +// ValidateAnnotations validates that a set of annotations are correctly defined. +func ValidateAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + var totalSize int64 + for k, v := range annotations { + for _, msg := range validation.IsQualifiedName(strings.ToLower(k)) { + allErrs = append(allErrs, field.Invalid(fldPath, k, msg)) + } + totalSize += (int64)(len(k)) + (int64)(len(v)) + } + if totalSize > (int64)(totalAnnotationSizeLimitB) { + allErrs = append(allErrs, field.TooLong(fldPath, "", totalAnnotationSizeLimitB)) + } + return allErrs +} + +func ValidateDNS1123Label(value string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsDNS1123Label(value) { + allErrs = append(allErrs, field.Invalid(fldPath, value, msg)) + } + return allErrs +} + +// ValidateDNS1123Subdomain validates that a name is a proper DNS subdomain. +func ValidateDNS1123Subdomain(value string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsDNS1123Subdomain(value) { + allErrs = append(allErrs, field.Invalid(fldPath, value, msg)) + } + return allErrs +} + +func ValidatePodSpecificAnnotations(annotations map[string]string, spec *api.PodSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if annotations[api.AffinityAnnotationKey] != "" { + allErrs = append(allErrs, ValidateAffinityInPodAnnotations(annotations, fldPath)...) + } + + if annotations[api.TolerationsAnnotationKey] != "" { + allErrs = append(allErrs, ValidateTolerationsInPodAnnotations(annotations, fldPath)...) + } + + // TODO: remove these after we EOL the annotations. + if hostname, exists := annotations[utilpod.PodHostnameAnnotation]; exists { + allErrs = append(allErrs, ValidateDNS1123Label(hostname, fldPath.Key(utilpod.PodHostnameAnnotation))...) + } + if subdomain, exists := annotations[utilpod.PodSubdomainAnnotation]; exists { + allErrs = append(allErrs, ValidateDNS1123Label(subdomain, fldPath.Key(utilpod.PodSubdomainAnnotation))...) + } + + allErrs = append(allErrs, ValidateSeccompPodAnnotations(annotations, fldPath)...) + allErrs = append(allErrs, ValidateAppArmorPodAnnotations(annotations, spec, fldPath)...) + + sysctls, err := api.SysctlsFromPodAnnotation(annotations[api.SysctlsPodAnnotationKey]) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Key(api.SysctlsPodAnnotationKey), annotations[api.SysctlsPodAnnotationKey], err.Error())) + } else { + allErrs = append(allErrs, validateSysctls(sysctls, fldPath.Key(api.SysctlsPodAnnotationKey))...) + } + unsafeSysctls, err := api.SysctlsFromPodAnnotation(annotations[api.UnsafeSysctlsPodAnnotationKey]) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Key(api.UnsafeSysctlsPodAnnotationKey), annotations[api.UnsafeSysctlsPodAnnotationKey], err.Error())) + } else { + allErrs = append(allErrs, validateSysctls(unsafeSysctls, fldPath.Key(api.UnsafeSysctlsPodAnnotationKey))...) + } + inBoth := sysctlIntersection(sysctls, unsafeSysctls) + if len(inBoth) > 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Key(api.UnsafeSysctlsPodAnnotationKey), strings.Join(inBoth, ", "), "can not be safe and unsafe")) + } + + return allErrs +} + +func ValidatePodSpecificAnnotationUpdates(newPod, oldPod *api.Pod, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + newAnnotations := newPod.Annotations + oldAnnotations := oldPod.Annotations + for k, oldVal := range oldAnnotations { + if newAnnotations[k] == oldVal { + continue // No change. + } + if strings.HasPrefix(k, apparmor.ContainerAnnotationKeyPrefix) { + allErrs = append(allErrs, field.Forbidden(fldPath.Key(k), "may not update AppArmor annotations")) + } + } + // Check for removals. + for k := range newAnnotations { + if _, ok := oldAnnotations[k]; ok { + continue // No change. + } + if strings.HasPrefix(k, apparmor.ContainerAnnotationKeyPrefix) { + allErrs = append(allErrs, field.Forbidden(fldPath.Key(k), "may not remove AppArmor annotations")) + } + } + allErrs = append(allErrs, ValidatePodSpecificAnnotations(newAnnotations, &newPod.Spec, fldPath)...) + return allErrs +} + +func ValidateEndpointsSpecificAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + // TODO: remove this after we EOL the annotation. + hostnamesMap, exists := annotations[endpoints.PodHostnamesAnnotation] + if exists && !isValidHostnamesMap(hostnamesMap) { + allErrs = append(allErrs, field.Invalid(fldPath, endpoints.PodHostnamesAnnotation, + `must be a valid json representation of map[string(IP)][HostRecord] e.g. "{"10.245.1.6":{"HostName":"my-webserver"}}"`)) + } + + return allErrs +} + +func validateOwnerReference(ownerReference api.OwnerReference, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + gvk := unversioned.FromAPIVersionAndKind(ownerReference.APIVersion, ownerReference.Kind) + // gvk.Group is empty for the legacy group. + if len(gvk.Version) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("apiVersion"), ownerReference.APIVersion, "version must not be empty")) + } + if len(gvk.Kind) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("kind"), ownerReference.Kind, "kind must not be empty")) + } + if len(ownerReference.Name) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), ownerReference.Name, "name must not be empty")) + } + if len(ownerReference.UID) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("uid"), ownerReference.UID, "uid must not be empty")) + } + if _, ok := BannedOwners[gvk]; ok { + allErrs = append(allErrs, field.Invalid(fldPath, ownerReference, fmt.Sprintf("%s is disallowed from being an owner", gvk))) + } + return allErrs +} + +func ValidateOwnerReferences(ownerReferences []api.OwnerReference, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + controllerName := "" + for _, ref := range ownerReferences { + allErrs = append(allErrs, validateOwnerReference(ref, fldPath)...) + if ref.Controller != nil && *ref.Controller { + if controllerName != "" { + allErrs = append(allErrs, field.Invalid(fldPath, ownerReferences, + fmt.Sprintf("Only one reference can have Controller set to true. Found \"true\" in references for %v and %v", controllerName, ref.Name))) + } else { + controllerName = ref.Name + } + } + } + return allErrs +} + +// ValidateNameFunc validates that the provided name is valid for a given resource type. +// Not all resources have the same validation rules for names. Prefix is true +// if the name will have a value appended to it. If the name is not valid, +// this returns a list of descriptions of individual characteristics of the +// value that were not valid. Otherwise this returns an empty list or nil. +type ValidateNameFunc func(name string, prefix bool) []string + +// maskTrailingDash replaces the final character of a string with a subdomain safe +// value if is a dash. +func maskTrailingDash(name string) string { + if strings.HasSuffix(name, "-") { + return name[:len(name)-2] + "a" + } + return name +} + +// ValidatePodName can be used to check whether the given pod name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidatePodName = NameIsDNSSubdomain + +// ValidateReplicationControllerName can be used to check whether the given replication +// controller name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateReplicationControllerName = NameIsDNSSubdomain + +// ValidateServiceName can be used to check whether the given service name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateServiceName = NameIsDNS1035Label + +// ValidateNodeName can be used to check whether the given node name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateNodeName = NameIsDNSSubdomain + +// ValidateNamespaceName can be used to check whether the given namespace name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateNamespaceName = NameIsDNSLabel + +// ValidateLimitRangeName can be used to check whether the given limit range name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateLimitRangeName = NameIsDNSSubdomain + +// ValidateResourceQuotaName can be used to check whether the given +// resource quota name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateResourceQuotaName = NameIsDNSSubdomain + +// ValidateSecretName can be used to check whether the given secret name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateSecretName = NameIsDNSSubdomain + +// ValidateServiceAccountName can be used to check whether the given service account name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateServiceAccountName = NameIsDNSSubdomain + +// ValidateEndpointsName can be used to check whether the given endpoints name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateEndpointsName = NameIsDNSSubdomain + +// ValidateClusterName can be used to check whether the given cluster name is valid. +var ValidateClusterName = NameIsDNS1035Label + +// NameIsDNSSubdomain is a ValidateNameFunc for names that must be a DNS subdomain. +func NameIsDNSSubdomain(name string, prefix bool) []string { + if prefix { + name = maskTrailingDash(name) + } + return validation.IsDNS1123Subdomain(name) +} + +// NameIsDNSLabel is a ValidateNameFunc for names that must be a DNS 1123 label. +func NameIsDNSLabel(name string, prefix bool) []string { + if prefix { + name = maskTrailingDash(name) + } + return validation.IsDNS1123Label(name) +} + +// NameIsDNS1035Label is a ValidateNameFunc for names that must be a DNS 952 label. +func NameIsDNS1035Label(name string, prefix bool) []string { + if prefix { + name = maskTrailingDash(name) + } + return validation.IsDNS1035Label(name) +} + +// Validates that given value is not negative. +func ValidateNonnegativeField(value int64, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if value < 0 { + allErrs = append(allErrs, field.Invalid(fldPath, value, isNegativeErrorMsg)) + } + return allErrs +} + +// Validates that a Quantity is not negative +func ValidateNonnegativeQuantity(value resource.Quantity, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if value.Cmp(resource.Quantity{}) < 0 { + allErrs = append(allErrs, field.Invalid(fldPath, value.String(), isNegativeErrorMsg)) + } + return allErrs +} + +func ValidateImmutableField(newVal, oldVal interface{}, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if !api.Semantic.DeepEqual(oldVal, newVal) { + allErrs = append(allErrs, field.Invalid(fldPath, newVal, fieldImmutableErrorMsg)) + } + return allErrs +} + +// ValidateObjectMeta validates an object's metadata on creation. It expects that name generation has already +// been performed. +// It doesn't return an error for rootscoped resources with namespace, because namespace should already be cleared before. +// TODO: Remove calls to this method scattered in validations of specific resources, e.g., ValidatePodUpdate. +func ValidateObjectMeta(meta *api.ObjectMeta, requiresNamespace bool, nameFn ValidateNameFunc, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(meta.GenerateName) != 0 { + for _, msg := range nameFn(meta.GenerateName, true) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("generateName"), meta.GenerateName, msg)) + } + } + // If the generated name validates, but the calculated value does not, it's a problem with generation, and we + // report it here. This may confuse users, but indicates a programming bug and still must be validated. + // If there are multiple fields out of which one is required then add an or as a separator + if len(meta.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("name"), "name or generateName is required")) + } else { + for _, msg := range nameFn(meta.Name, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), meta.Name, msg)) + } + } + if requiresNamespace { + if len(meta.Namespace) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("namespace"), "")) + } else { + for _, msg := range ValidateNamespaceName(meta.Namespace, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("namespace"), meta.Namespace, msg)) + } + } + } else { + if len(meta.Namespace) != 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("namespace"), "not allowed on this type")) + } + } + if len(meta.ClusterName) != 0 { + for _, msg := range ValidateClusterName(meta.ClusterName, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("clusterName"), meta.ClusterName, msg)) + } + } + allErrs = append(allErrs, ValidateNonnegativeField(meta.Generation, fldPath.Child("generation"))...) + allErrs = append(allErrs, unversionedvalidation.ValidateLabels(meta.Labels, fldPath.Child("labels"))...) + allErrs = append(allErrs, ValidateAnnotations(meta.Annotations, fldPath.Child("annotations"))...) + allErrs = append(allErrs, ValidateOwnerReferences(meta.OwnerReferences, fldPath.Child("ownerReferences"))...) + for _, finalizer := range meta.Finalizers { + allErrs = append(allErrs, validateFinalizerName(finalizer, fldPath.Child("finalizers"))...) + } + return allErrs +} + +// ValidateObjectMetaUpdate validates an object's metadata when updated +func ValidateObjectMetaUpdate(newMeta, oldMeta *api.ObjectMeta, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if !RepairMalformedUpdates && newMeta.UID != oldMeta.UID { + allErrs = append(allErrs, field.Invalid(fldPath.Child("uid"), newMeta.UID, "field is immutable")) + } + // in the event it is left empty, set it, to allow clients more flexibility + // TODO: remove the following code that repairs the update request when we retire the clients that modify the immutable fields. + // Please do not copy this pattern elsewhere; validation functions should not be modifying the objects they are passed! + if RepairMalformedUpdates { + if len(newMeta.UID) == 0 { + newMeta.UID = oldMeta.UID + } + // ignore changes to timestamp + if oldMeta.CreationTimestamp.IsZero() { + oldMeta.CreationTimestamp = newMeta.CreationTimestamp + } else { + newMeta.CreationTimestamp = oldMeta.CreationTimestamp + } + // an object can never remove a deletion timestamp or clear/change grace period seconds + if !oldMeta.DeletionTimestamp.IsZero() { + newMeta.DeletionTimestamp = oldMeta.DeletionTimestamp + } + if oldMeta.DeletionGracePeriodSeconds != nil && newMeta.DeletionGracePeriodSeconds == nil { + newMeta.DeletionGracePeriodSeconds = oldMeta.DeletionGracePeriodSeconds + } + } + + // TODO: needs to check if newMeta==nil && oldMeta !=nil after the repair logic is removed. + if newMeta.DeletionGracePeriodSeconds != nil && (oldMeta.DeletionGracePeriodSeconds == nil || *newMeta.DeletionGracePeriodSeconds != *oldMeta.DeletionGracePeriodSeconds) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("deletionGracePeriodSeconds"), newMeta.DeletionGracePeriodSeconds, "field is immutable; may only be changed via deletion")) + } + if newMeta.DeletionTimestamp != nil && (oldMeta.DeletionTimestamp == nil || !newMeta.DeletionTimestamp.Equal(*oldMeta.DeletionTimestamp)) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("deletionTimestamp"), newMeta.DeletionTimestamp, "field is immutable; may only be changed via deletion")) + } + + // Finalizers cannot be added if the object is already being deleted. + if oldMeta.DeletionTimestamp != nil { + allErrs = append(allErrs, ValidateNoNewFinalizers(newMeta.Finalizers, oldMeta.Finalizers, fldPath.Child("finalizers"))...) + } + + // Reject updates that don't specify a resource version + if len(newMeta.ResourceVersion) == 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceVersion"), newMeta.ResourceVersion, "must be specified for an update")) + } + + // Generation shouldn't be decremented + if newMeta.Generation < oldMeta.Generation { + allErrs = append(allErrs, field.Invalid(fldPath.Child("generation"), newMeta.Generation, "must not be decremented")) + } + + allErrs = append(allErrs, ValidateImmutableField(newMeta.Name, oldMeta.Name, fldPath.Child("name"))...) + allErrs = append(allErrs, ValidateImmutableField(newMeta.Namespace, oldMeta.Namespace, fldPath.Child("namespace"))...) + allErrs = append(allErrs, ValidateImmutableField(newMeta.UID, oldMeta.UID, fldPath.Child("uid"))...) + allErrs = append(allErrs, ValidateImmutableField(newMeta.CreationTimestamp, oldMeta.CreationTimestamp, fldPath.Child("creationTimestamp"))...) + allErrs = append(allErrs, ValidateImmutableField(newMeta.ClusterName, oldMeta.ClusterName, fldPath.Child("clusterName"))...) + + allErrs = append(allErrs, unversionedvalidation.ValidateLabels(newMeta.Labels, fldPath.Child("labels"))...) + allErrs = append(allErrs, ValidateAnnotations(newMeta.Annotations, fldPath.Child("annotations"))...) + allErrs = append(allErrs, ValidateOwnerReferences(newMeta.OwnerReferences, fldPath.Child("ownerReferences"))...) + + return allErrs +} + +func ValidateNoNewFinalizers(newFinalizers []string, oldFinalizers []string, fldPath *field.Path) field.ErrorList { + const newFinalizersErrorMsg string = `no new finalizers can be added if the object is being deleted` + allErrs := field.ErrorList{} + extra := sets.NewString(newFinalizers...).Difference(sets.NewString(oldFinalizers...)) + if len(extra) != 0 { + allErrs = append(allErrs, field.Forbidden(fldPath, fmt.Sprintf("no new finalizers can be added if the object is being deleted, found new finalizers %#v", extra.List()))) + } + return allErrs +} + +func validateVolumes(volumes []api.Volume, fldPath *field.Path) (sets.String, field.ErrorList) { + allErrs := field.ErrorList{} + + allNames := sets.String{} + for i, vol := range volumes { + idxPath := fldPath.Index(i) + namePath := idxPath.Child("name") + el := validateVolumeSource(&vol.VolumeSource, idxPath) + if len(vol.Name) == 0 { + el = append(el, field.Required(namePath, "")) + } else { + el = append(el, ValidateDNS1123Label(vol.Name, namePath)...) + } + if allNames.Has(vol.Name) { + el = append(el, field.Duplicate(namePath, vol.Name)) + } + if len(el) == 0 { + allNames.Insert(vol.Name) + } else { + allErrs = append(allErrs, el...) + } + + } + return allNames, allErrs +} + +func validateVolumeSource(source *api.VolumeSource, fldPath *field.Path) field.ErrorList { + numVolumes := 0 + allErrs := field.ErrorList{} + if source.EmptyDir != nil { + numVolumes++ + // EmptyDirs have nothing to validate + } + if source.HostPath != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("hostPath"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateHostPathVolumeSource(source.HostPath, fldPath.Child("hostPath"))...) + } + } + if source.GitRepo != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("gitRepo"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateGitRepoVolumeSource(source.GitRepo, fldPath.Child("gitRepo"))...) + } + } + if source.GCEPersistentDisk != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("gcePersistentDisk"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateGCEPersistentDiskVolumeSource(source.GCEPersistentDisk, fldPath.Child("persistentDisk"))...) + } + } + if source.AWSElasticBlockStore != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("awsElasticBlockStore"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateAWSElasticBlockStoreVolumeSource(source.AWSElasticBlockStore, fldPath.Child("awsElasticBlockStore"))...) + } + } + if source.Secret != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("secret"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateSecretVolumeSource(source.Secret, fldPath.Child("secret"))...) + } + } + if source.NFS != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("nfs"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateNFSVolumeSource(source.NFS, fldPath.Child("nfs"))...) + } + } + if source.ISCSI != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("iscsi"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateISCSIVolumeSource(source.ISCSI, fldPath.Child("iscsi"))...) + } + } + if source.Glusterfs != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("glusterfs"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateGlusterfs(source.Glusterfs, fldPath.Child("glusterfs"))...) + } + } + if source.Flocker != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("flocker"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateFlockerVolumeSource(source.Flocker, fldPath.Child("flocker"))...) + } + } + if source.PersistentVolumeClaim != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("persistentVolumeClaim"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validatePersistentClaimVolumeSource(source.PersistentVolumeClaim, fldPath.Child("persistentVolumeClaim"))...) + } + } + if source.RBD != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("rbd"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateRBDVolumeSource(source.RBD, fldPath.Child("rbd"))...) + } + } + if source.Cinder != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("cinder"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateCinderVolumeSource(source.Cinder, fldPath.Child("cinder"))...) + } + } + if source.CephFS != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("cephFS"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateCephFSVolumeSource(source.CephFS, fldPath.Child("cephfs"))...) + } + } + if source.Quobyte != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("quobyte"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateQuobyteVolumeSource(source.Quobyte, fldPath.Child("quobyte"))...) + } + } + if source.DownwardAPI != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("downwarAPI"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateDownwardAPIVolumeSource(source.DownwardAPI, fldPath.Child("downwardAPI"))...) + } + } + if source.FC != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("fc"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateFCVolumeSource(source.FC, fldPath.Child("fc"))...) + } + } + if source.FlexVolume != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("flexVolume"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateFlexVolumeSource(source.FlexVolume, fldPath.Child("flexVolume"))...) + } + } + if source.ConfigMap != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("configMap"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateConfigMapVolumeSource(source.ConfigMap, fldPath.Child("configMap"))...) + } + } + if source.AzureFile != nil { + numVolumes++ + allErrs = append(allErrs, validateAzureFile(source.AzureFile, fldPath.Child("azureFile"))...) + } + if source.VsphereVolume != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("vsphereVolume"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateVsphereVolumeSource(source.VsphereVolume, fldPath.Child("vsphereVolume"))...) + } + } + if source.AzureDisk != nil { + numVolumes++ + allErrs = append(allErrs, validateAzureDisk(source.AzureDisk, fldPath.Child("azureDisk"))...) + } + + if numVolumes == 0 { + allErrs = append(allErrs, field.Required(fldPath, "must specify a volume type")) + } + + return allErrs +} + +func validateHostPathVolumeSource(hostPath *api.HostPathVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(hostPath.Path) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("path"), "")) + } + return allErrs +} + +func validateGitRepoVolumeSource(gitRepo *api.GitRepoVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(gitRepo.Repository) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("repository"), "")) + } + + pathErrs := validateLocalDescendingPath(gitRepo.Directory, fldPath.Child("directory")) + allErrs = append(allErrs, pathErrs...) + return allErrs +} + +func validateISCSIVolumeSource(iscsi *api.ISCSIVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(iscsi.TargetPortal) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("targetPortal"), "")) + } + if len(iscsi.IQN) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("iqn"), "")) + } + if iscsi.Lun < 0 || iscsi.Lun > 255 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("lun"), iscsi.Lun, validation.InclusiveRangeError(0, 255))) + } + return allErrs +} + +func validateFCVolumeSource(fc *api.FCVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(fc.TargetWWNs) < 1 { + allErrs = append(allErrs, field.Required(fldPath.Child("targetWWNs"), "")) + } + + if fc.Lun == nil { + allErrs = append(allErrs, field.Required(fldPath.Child("lun"), "")) + } else { + if *fc.Lun < 0 || *fc.Lun > 255 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("lun"), fc.Lun, validation.InclusiveRangeError(0, 255))) + } + } + return allErrs +} + +func validateGCEPersistentDiskVolumeSource(pd *api.GCEPersistentDiskVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(pd.PDName) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("pdName"), "")) + } + if pd.Partition < 0 || pd.Partition > 255 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("partition"), pd.Partition, pdPartitionErrorMsg)) + } + return allErrs +} + +func validateAWSElasticBlockStoreVolumeSource(PD *api.AWSElasticBlockStoreVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(PD.VolumeID) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("volumeID"), "")) + } + if PD.Partition < 0 || PD.Partition > 255 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("partition"), PD.Partition, pdPartitionErrorMsg)) + } + return allErrs +} + +func validateSecretVolumeSource(secretSource *api.SecretVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(secretSource.SecretName) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("secretName"), "")) + } + + secretMode := secretSource.DefaultMode + if secretMode != nil && (*secretMode > 0777 || *secretMode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("defaultMode"), *secretMode, volumeModeErrorMsg)) + } + + itemsPath := fldPath.Child("items") + for i, kp := range secretSource.Items { + itemPath := itemsPath.Index(i) + allErrs = append(allErrs, validateKeyToPath(&kp, itemPath)...) + } + return allErrs +} + +func validateConfigMapVolumeSource(configMapSource *api.ConfigMapVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(configMapSource.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) + } + + configMapMode := configMapSource.DefaultMode + if configMapMode != nil && (*configMapMode > 0777 || *configMapMode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("defaultMode"), *configMapMode, volumeModeErrorMsg)) + } + + itemsPath := fldPath.Child("items") + for i, kp := range configMapSource.Items { + itemPath := itemsPath.Index(i) + allErrs = append(allErrs, validateKeyToPath(&kp, itemPath)...) + } + return allErrs +} + +func validateKeyToPath(kp *api.KeyToPath, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(kp.Key) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("key"), "")) + } + if len(kp.Path) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("path"), "")) + } + allErrs = append(allErrs, validateLocalNonReservedPath(kp.Path, fldPath.Child("path"))...) + if kp.Mode != nil && (*kp.Mode > 0777 || *kp.Mode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("mode"), *kp.Mode, volumeModeErrorMsg)) + } + + return allErrs +} + +func validatePersistentClaimVolumeSource(claim *api.PersistentVolumeClaimVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(claim.ClaimName) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("claimName"), "")) + } + return allErrs +} + +func validateNFSVolumeSource(nfs *api.NFSVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(nfs.Server) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("server"), "")) + } + if len(nfs.Path) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("path"), "")) + } + if !path.IsAbs(nfs.Path) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("path"), nfs.Path, "must be an absolute path")) + } + return allErrs +} + +func validateQuobyteVolumeSource(quobyte *api.QuobyteVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(quobyte.Registry) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("registry"), "must be a host:port pair or multiple pairs separated by commas")) + } else { + for _, hostPortPair := range strings.Split(quobyte.Registry, ",") { + if _, _, err := net.SplitHostPort(hostPortPair); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("registry"), quobyte.Registry, "must be a host:port pair or multiple pairs separated by commas")) + } + } + } + + if len(quobyte.Volume) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("volume"), "")) + } + return allErrs +} + +func validateGlusterfs(glusterfs *api.GlusterfsVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(glusterfs.EndpointsName) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("endpoints"), "")) + } + if len(glusterfs.Path) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("path"), "")) + } + return allErrs +} + +func validateFlockerVolumeSource(flocker *api.FlockerVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(flocker.DatasetName) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("datasetName"), "")) + } + if strings.Contains(flocker.DatasetName, "/") { + allErrs = append(allErrs, field.Invalid(fldPath.Child("datasetName"), flocker.DatasetName, "must not contain '/'")) + } + return allErrs +} + +var validDownwardAPIFieldPathExpressions = sets.NewString( + "metadata.name", + "metadata.namespace", + "metadata.labels", + "metadata.annotations") + +func validateDownwardAPIVolumeSource(downwardAPIVolume *api.DownwardAPIVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + downwardAPIMode := downwardAPIVolume.DefaultMode + if downwardAPIMode != nil && (*downwardAPIMode > 0777 || *downwardAPIMode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("defaultMode"), *downwardAPIMode, volumeModeErrorMsg)) + } + + for _, file := range downwardAPIVolume.Items { + if len(file.Path) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("path"), "")) + } + allErrs = append(allErrs, validateLocalNonReservedPath(file.Path, fldPath.Child("path"))...) + if file.FieldRef != nil { + allErrs = append(allErrs, validateObjectFieldSelector(file.FieldRef, &validDownwardAPIFieldPathExpressions, fldPath.Child("fieldRef"))...) + if file.ResourceFieldRef != nil { + allErrs = append(allErrs, field.Invalid(fldPath, "resource", "fieldRef and resourceFieldRef can not be specified simultaneously")) + } + } else if file.ResourceFieldRef != nil { + allErrs = append(allErrs, validateContainerResourceFieldSelector(file.ResourceFieldRef, &validContainerResourceFieldPathExpressions, fldPath.Child("resourceFieldRef"), true)...) + } else { + allErrs = append(allErrs, field.Required(fldPath, "one of fieldRef and resourceFieldRef is required")) + } + if file.Mode != nil && (*file.Mode > 0777 || *file.Mode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("mode"), *file.Mode, volumeModeErrorMsg)) + } + } + return allErrs +} + +// This validate will make sure targetPath: +// 1. is not abs path +// 2. does not have any element which is ".." +func validateLocalDescendingPath(targetPath string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if path.IsAbs(targetPath) { + allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must be a relative path")) + } + + // TODO: this assumes the OS of apiserver & nodes are the same + parts := strings.Split(targetPath, string(os.PathSeparator)) + for _, item := range parts { + if item == ".." { + allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must not contain '..'")) + break // even for `../../..`, one error is sufficient to make the point + } + } + return allErrs +} + +// This validate will make sure targetPath: +// 1. is not abs path +// 2. does not contain any '..' elements +// 3. does not start with '..' +func validateLocalNonReservedPath(targetPath string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, validateLocalDescendingPath(targetPath, fldPath)...) + // Don't report this error if the check for .. elements already caught it. + if strings.HasPrefix(targetPath, "..") && !strings.HasPrefix(targetPath, "../") { + allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must not start with '..'")) + } + return allErrs +} + +func validateRBDVolumeSource(rbd *api.RBDVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(rbd.CephMonitors) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("monitors"), "")) + } + if len(rbd.RBDImage) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("image"), "")) + } + return allErrs +} + +func validateCinderVolumeSource(cd *api.CinderVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(cd.VolumeID) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("volumeID"), "")) + } + return allErrs +} + +func validateCephFSVolumeSource(cephfs *api.CephFSVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(cephfs.Monitors) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("monitors"), "")) + } + return allErrs +} + +func validateFlexVolumeSource(fv *api.FlexVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(fv.Driver) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("driver"), "")) + } + return allErrs +} + +func validateAzureFile(azure *api.AzureFileVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if azure.SecretName == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("secretName"), "")) + } + if azure.ShareName == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("shareName"), "")) + } + return allErrs +} + +var supportedCachingModes = sets.NewString(string(api.AzureDataDiskCachingNone), string(api.AzureDataDiskCachingReadOnly), string(api.AzureDataDiskCachingReadWrite)) + +func validateAzureDisk(azure *api.AzureDiskVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if azure.DiskName == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("diskName"), "")) + } + if azure.DataDiskURI == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("diskURI"), "")) + } + if azure.CachingMode != nil && !supportedCachingModes.Has(string(*azure.CachingMode)) { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("cachingMode"), *azure.CachingMode, supportedCachingModes.List())) + } + return allErrs +} + +func validateVsphereVolumeSource(cd *api.VsphereVirtualDiskVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(cd.VolumePath) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("volumePath"), "")) + } + return allErrs +} + +// ValidatePersistentVolumeName checks that a name is appropriate for a +// PersistentVolumeName object. +var ValidatePersistentVolumeName = NameIsDNSSubdomain + +var supportedAccessModes = sets.NewString(string(api.ReadWriteOnce), string(api.ReadOnlyMany), string(api.ReadWriteMany)) + +var supportedReclaimPolicy = sets.NewString(string(api.PersistentVolumeReclaimDelete), string(api.PersistentVolumeReclaimRecycle), string(api.PersistentVolumeReclaimRetain)) + +func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { + allErrs := ValidateObjectMeta(&pv.ObjectMeta, false, ValidatePersistentVolumeName, field.NewPath("metadata")) + + specPath := field.NewPath("spec") + if len(pv.Spec.AccessModes) == 0 { + allErrs = append(allErrs, field.Required(specPath.Child("accessModes"), "")) + } + for _, mode := range pv.Spec.AccessModes { + if !supportedAccessModes.Has(string(mode)) { + allErrs = append(allErrs, field.NotSupported(specPath.Child("accessModes"), mode, supportedAccessModes.List())) + } + } + + if len(pv.Spec.Capacity) == 0 { + allErrs = append(allErrs, field.Required(specPath.Child("capacity"), "")) + } + + if _, ok := pv.Spec.Capacity[api.ResourceStorage]; !ok || len(pv.Spec.Capacity) > 1 { + allErrs = append(allErrs, field.NotSupported(specPath.Child("capacity"), pv.Spec.Capacity, []string{string(api.ResourceStorage)})) + } + capPath := specPath.Child("capacity") + for r, qty := range pv.Spec.Capacity { + allErrs = append(allErrs, validateBasicResource(qty, capPath.Key(string(r)))...) + } + if len(string(pv.Spec.PersistentVolumeReclaimPolicy)) > 0 { + if !supportedReclaimPolicy.Has(string(pv.Spec.PersistentVolumeReclaimPolicy)) { + allErrs = append(allErrs, field.NotSupported(specPath.Child("persistentVolumeReclaimPolicy"), pv.Spec.PersistentVolumeReclaimPolicy, supportedReclaimPolicy.List())) + } + } + + numVolumes := 0 + if pv.Spec.HostPath != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("hostPath"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateHostPathVolumeSource(pv.Spec.HostPath, specPath.Child("hostPath"))...) + } + } + if pv.Spec.GCEPersistentDisk != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("gcePersistentDisk"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateGCEPersistentDiskVolumeSource(pv.Spec.GCEPersistentDisk, specPath.Child("persistentDisk"))...) + } + } + if pv.Spec.AWSElasticBlockStore != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("awsElasticBlockStore"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateAWSElasticBlockStoreVolumeSource(pv.Spec.AWSElasticBlockStore, specPath.Child("awsElasticBlockStore"))...) + } + } + if pv.Spec.Glusterfs != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("glusterfs"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateGlusterfs(pv.Spec.Glusterfs, specPath.Child("glusterfs"))...) + } + } + if pv.Spec.Flocker != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("flocker"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateFlockerVolumeSource(pv.Spec.Flocker, specPath.Child("flocker"))...) + } + } + if pv.Spec.NFS != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("nfs"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateNFSVolumeSource(pv.Spec.NFS, specPath.Child("nfs"))...) + } + } + if pv.Spec.RBD != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("rbd"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateRBDVolumeSource(pv.Spec.RBD, specPath.Child("rbd"))...) + } + } + if pv.Spec.Quobyte != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("quobyte"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateQuobyteVolumeSource(pv.Spec.Quobyte, specPath.Child("quobyte"))...) + } + } + if pv.Spec.CephFS != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("cephFS"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateCephFSVolumeSource(pv.Spec.CephFS, specPath.Child("cephfs"))...) + } + } + if pv.Spec.ISCSI != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("iscsi"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateISCSIVolumeSource(pv.Spec.ISCSI, specPath.Child("iscsi"))...) + } + } + if pv.Spec.Cinder != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("cinder"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateCinderVolumeSource(pv.Spec.Cinder, specPath.Child("cinder"))...) + } + } + if pv.Spec.FC != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("fc"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateFCVolumeSource(pv.Spec.FC, specPath.Child("fc"))...) + } + } + if pv.Spec.FlexVolume != nil { + numVolumes++ + allErrs = append(allErrs, validateFlexVolumeSource(pv.Spec.FlexVolume, specPath.Child("flexVolume"))...) + } + if pv.Spec.AzureFile != nil { + numVolumes++ + allErrs = append(allErrs, validateAzureFile(pv.Spec.AzureFile, specPath.Child("azureFile"))...) + } + if pv.Spec.VsphereVolume != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("vsphereVolume"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateVsphereVolumeSource(pv.Spec.VsphereVolume, specPath.Child("vsphereVolume"))...) + } + } + if pv.Spec.AzureDisk != nil { + numVolumes++ + allErrs = append(allErrs, validateAzureDisk(pv.Spec.AzureDisk, specPath.Child("azureDisk"))...) + } + + if numVolumes == 0 { + allErrs = append(allErrs, field.Required(specPath, "must specify a volume type")) + } + + // do not allow hostPath mounts of '/' to have a 'recycle' reclaim policy + if pv.Spec.HostPath != nil && path.Clean(pv.Spec.HostPath.Path) == "/" && pv.Spec.PersistentVolumeReclaimPolicy == api.PersistentVolumeReclaimRecycle { + allErrs = append(allErrs, field.Forbidden(specPath.Child("persistentVolumeReclaimPolicy"), "may not be 'recycle' for a hostPath mount of '/'")) + } + + return allErrs +} + +// ValidatePersistentVolumeUpdate tests to see if the update is legal for an end user to make. +// newPv is updated with fields that cannot be changed. +func ValidatePersistentVolumeUpdate(newPv, oldPv *api.PersistentVolume) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = ValidatePersistentVolume(newPv) + newPv.Status = oldPv.Status + return allErrs +} + +// ValidatePersistentVolumeStatusUpdate tests to see if the status update is legal for an end user to make. +// newPv is updated with fields that cannot be changed. +func ValidatePersistentVolumeStatusUpdate(newPv, oldPv *api.PersistentVolume) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newPv.ObjectMeta, &oldPv.ObjectMeta, field.NewPath("metadata")) + if len(newPv.ResourceVersion) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("resourceVersion"), "")) + } + newPv.Spec = oldPv.Spec + return allErrs +} + +// ValidatePersistentVolumeClaim validates a PersistentVolumeClaim +func ValidatePersistentVolumeClaim(pvc *api.PersistentVolumeClaim) field.ErrorList { + allErrs := ValidateObjectMeta(&pvc.ObjectMeta, true, ValidatePersistentVolumeName, field.NewPath("metadata")) + allErrs = append(allErrs, ValidatePersistentVolumeClaimSpec(&pvc.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidatePersistentVolumeClaimSpec validates a PersistentVolumeClaimSpec +func ValidatePersistentVolumeClaimSpec(spec *api.PersistentVolumeClaimSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(spec.AccessModes) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("accessModes"), "at least 1 access mode is required")) + } + if spec.Selector != nil { + allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) + } + for _, mode := range spec.AccessModes { + if mode != api.ReadWriteOnce && mode != api.ReadOnlyMany && mode != api.ReadWriteMany { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("accessModes"), mode, supportedAccessModes.List())) + } + } + storageValue, ok := spec.Resources.Requests[api.ResourceStorage] + if !ok { + allErrs = append(allErrs, field.Required(fldPath.Child("resources").Key(string(api.ResourceStorage)), "")) + } else { + allErrs = append(allErrs, ValidateResourceQuantityValue(string(api.ResourceStorage), storageValue, fldPath.Child("resources").Key(string(api.ResourceStorage)))...) + } + return allErrs +} + +// ValidatePersistentVolumeClaimUpdate validates an update to a PeristentVolumeClaim +func ValidatePersistentVolumeClaimUpdate(newPvc, oldPvc *api.PersistentVolumeClaim) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newPvc.ObjectMeta, &oldPvc.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidatePersistentVolumeClaim(newPvc)...) + // PVController needs to update PVC.Spec w/ VolumeName. + // Claims are immutable in order to enforce quota, range limits, etc. without gaming the system. + if len(oldPvc.Spec.VolumeName) == 0 { + // volumeName changes are allowed once. + // Reset back to empty string after equality check + oldPvc.Spec.VolumeName = newPvc.Spec.VolumeName + defer func() { oldPvc.Spec.VolumeName = "" }() + } + // changes to Spec are not allowed, but updates to label/annotations are OK. + // no-op updates pass validation. + if !api.Semantic.DeepEqual(newPvc.Spec, oldPvc.Spec) { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "field is immutable after creation")) + } + newPvc.Status = oldPvc.Status + return allErrs +} + +// ValidatePersistentVolumeClaimStatusUpdate validates an update to status of a PeristentVolumeClaim +func ValidatePersistentVolumeClaimStatusUpdate(newPvc, oldPvc *api.PersistentVolumeClaim) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newPvc.ObjectMeta, &oldPvc.ObjectMeta, field.NewPath("metadata")) + if len(newPvc.ResourceVersion) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("resourceVersion"), "")) + } + if len(newPvc.Spec.AccessModes) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("Spec", "accessModes"), "")) + } + capPath := field.NewPath("status", "capacity") + for r, qty := range newPvc.Status.Capacity { + allErrs = append(allErrs, validateBasicResource(qty, capPath.Key(string(r)))...) + } + newPvc.Spec = oldPvc.Spec + return allErrs +} + +var supportedPortProtocols = sets.NewString(string(api.ProtocolTCP), string(api.ProtocolUDP)) + +func validateContainerPorts(ports []api.ContainerPort, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + allNames := sets.String{} + for i, port := range ports { + idxPath := fldPath.Index(i) + if len(port.Name) > 0 { + if msgs := validation.IsValidPortName(port.Name); len(msgs) != 0 { + for i = range msgs { + allErrs = append(allErrs, field.Invalid(idxPath.Child("name"), port.Name, msgs[i])) + } + } else if allNames.Has(port.Name) { + allErrs = append(allErrs, field.Duplicate(idxPath.Child("name"), port.Name)) + } else { + allNames.Insert(port.Name) + } + } + if port.ContainerPort == 0 { + allErrs = append(allErrs, field.Required(idxPath.Child("containerPort"), "")) + } else { + for _, msg := range validation.IsValidPortNum(int(port.ContainerPort)) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("containerPort"), port.ContainerPort, msg)) + } + } + if port.HostPort != 0 { + for _, msg := range validation.IsValidPortNum(int(port.HostPort)) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("hostPort"), port.HostPort, msg)) + } + } + if len(port.Protocol) == 0 { + allErrs = append(allErrs, field.Required(idxPath.Child("protocol"), "")) + } else if !supportedPortProtocols.Has(string(port.Protocol)) { + allErrs = append(allErrs, field.NotSupported(idxPath.Child("protocol"), port.Protocol, supportedPortProtocols.List())) + } + } + return allErrs +} + +func validateEnv(vars []api.EnvVar, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + for i, ev := range vars { + idxPath := fldPath.Index(i) + if len(ev.Name) == 0 { + allErrs = append(allErrs, field.Required(idxPath.Child("name"), "")) + } else { + for _, msg := range validation.IsCIdentifier(ev.Name) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("name"), ev.Name, msg)) + } + } + allErrs = append(allErrs, validateEnvVarValueFrom(ev, idxPath.Child("valueFrom"))...) + } + return allErrs +} + +var validFieldPathExpressionsEnv = sets.NewString("metadata.name", "metadata.namespace", "spec.nodeName", "spec.serviceAccountName", "status.podIP") +var validContainerResourceFieldPathExpressions = sets.NewString("limits.cpu", "limits.memory", "requests.cpu", "requests.memory") + +func validateEnvVarValueFrom(ev api.EnvVar, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if ev.ValueFrom == nil { + return allErrs + } + + numSources := 0 + + if ev.ValueFrom.FieldRef != nil { + numSources++ + allErrs = append(allErrs, validateObjectFieldSelector(ev.ValueFrom.FieldRef, &validFieldPathExpressionsEnv, fldPath.Child("fieldRef"))...) + } + if ev.ValueFrom.ResourceFieldRef != nil { + numSources++ + allErrs = append(allErrs, validateContainerResourceFieldSelector(ev.ValueFrom.ResourceFieldRef, &validContainerResourceFieldPathExpressions, fldPath.Child("resourceFieldRef"), false)...) + } + if ev.ValueFrom.ConfigMapKeyRef != nil { + numSources++ + allErrs = append(allErrs, validateConfigMapKeySelector(ev.ValueFrom.ConfigMapKeyRef, fldPath.Child("configMapKeyRef"))...) + } + if ev.ValueFrom.SecretKeyRef != nil { + numSources++ + allErrs = append(allErrs, validateSecretKeySelector(ev.ValueFrom.SecretKeyRef, fldPath.Child("secretKeyRef"))...) + } + + if len(ev.Value) != 0 { + if numSources != 0 { + allErrs = append(allErrs, field.Invalid(fldPath, "", "may not be specified when `value` is not empty")) + } + } else if numSources != 1 { + allErrs = append(allErrs, field.Invalid(fldPath, "", "may not have more than one field specified at a time")) + } + + return allErrs +} + +func validateObjectFieldSelector(fs *api.ObjectFieldSelector, expressions *sets.String, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(fs.APIVersion) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("apiVersion"), "")) + } else if len(fs.FieldPath) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("fieldPath"), "")) + } else { + internalFieldPath, _, err := api.Scheme.ConvertFieldLabel(fs.APIVersion, "Pod", fs.FieldPath, "") + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("fieldPath"), fs.FieldPath, fmt.Sprintf("error converting fieldPath: %v", err))) + } else if !expressions.Has(internalFieldPath) { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("fieldPath"), internalFieldPath, expressions.List())) + } + } + + return allErrs +} + +func validateContainerResourceFieldSelector(fs *api.ResourceFieldSelector, expressions *sets.String, fldPath *field.Path, volume bool) field.ErrorList { + allErrs := field.ErrorList{} + + if volume && len(fs.ContainerName) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("containerName"), "")) + } else if len(fs.Resource) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("resource"), "")) + } else if !expressions.Has(fs.Resource) { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("resource"), fs.Resource, expressions.List())) + } + allErrs = append(allErrs, validateContainerResourceDivisor(fs.Resource, fs.Divisor, fldPath)...) + return allErrs +} + +var validContainerResourceDivisorForCPU = sets.NewString("1m", "1") +var validContainerResourceDivisorForMemory = sets.NewString("1", "1k", "1M", "1G", "1T", "1P", "1E", "1Ki", "1Mi", "1Gi", "1Ti", "1Pi", "1Ei") + +func validateContainerResourceDivisor(rName string, divisor resource.Quantity, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + unsetDivisor := resource.Quantity{} + if unsetDivisor.Cmp(divisor) == 0 { + return allErrs + } + switch rName { + case "limits.cpu", "requests.cpu": + if !validContainerResourceDivisorForCPU.Has(divisor.String()) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("divisor"), rName, "only divisor's values 1m and 1 are supported with the cpu resource")) + } + case "limits.memory", "requests.memory": + if !validContainerResourceDivisorForMemory.Has(divisor.String()) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("divisor"), rName, "only divisor's values 1, 1k, 1M, 1G, 1T, 1P, 1E, 1Ki, 1Mi, 1Gi, 1Ti, 1Pi, 1Ei are supported with the memory resource")) + } + } + return allErrs +} + +func validateConfigMapKeySelector(s *api.ConfigMapKeySelector, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(s.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) + } + if len(s.Key) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("key"), "")) + } else { + for _, msg := range validation.IsConfigMapKey(s.Key) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("key"), s.Key, msg)) + } + } + + return allErrs +} + +func validateSecretKeySelector(s *api.SecretKeySelector, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(s.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) + } + if len(s.Key) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("key"), "")) + } else { + for _, msg := range validation.IsConfigMapKey(s.Key) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("key"), s.Key, msg)) + } + } + + return allErrs +} + +func validateVolumeMounts(mounts []api.VolumeMount, volumes sets.String, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + mountpoints := sets.NewString() + + for i, mnt := range mounts { + idxPath := fldPath.Index(i) + if len(mnt.Name) == 0 { + allErrs = append(allErrs, field.Required(idxPath.Child("name"), "")) + } else if !volumes.Has(mnt.Name) { + allErrs = append(allErrs, field.NotFound(idxPath.Child("name"), mnt.Name)) + } + if len(mnt.MountPath) == 0 { + allErrs = append(allErrs, field.Required(idxPath.Child("mountPath"), "")) + } else if strings.Contains(mnt.MountPath, ":") { + allErrs = append(allErrs, field.Invalid(idxPath.Child("mountPath"), mnt.MountPath, "must not contain ':'")) + } + if mountpoints.Has(mnt.MountPath) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("mountPath"), mnt.MountPath, "must be unique")) + } + mountpoints.Insert(mnt.MountPath) + if len(mnt.SubPath) > 0 { + allErrs = append(allErrs, validateLocalDescendingPath(mnt.SubPath, fldPath.Child("subPath"))...) + } + } + return allErrs +} + +func validateProbe(probe *api.Probe, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if probe == nil { + return allErrs + } + allErrs = append(allErrs, validateHandler(&probe.Handler, fldPath)...) + + allErrs = append(allErrs, ValidateNonnegativeField(int64(probe.InitialDelaySeconds), fldPath.Child("initialDelaySeconds"))...) + allErrs = append(allErrs, ValidateNonnegativeField(int64(probe.TimeoutSeconds), fldPath.Child("timeoutSeconds"))...) + allErrs = append(allErrs, ValidateNonnegativeField(int64(probe.PeriodSeconds), fldPath.Child("periodSeconds"))...) + allErrs = append(allErrs, ValidateNonnegativeField(int64(probe.SuccessThreshold), fldPath.Child("successThreshold"))...) + allErrs = append(allErrs, ValidateNonnegativeField(int64(probe.FailureThreshold), fldPath.Child("failureThreshold"))...) + return allErrs +} + +// AccumulateUniqueHostPorts extracts each HostPort of each Container, +// accumulating the results and returning an error if any ports conflict. +func AccumulateUniqueHostPorts(containers []api.Container, accumulator *sets.String, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + for ci, ctr := range containers { + idxPath := fldPath.Index(ci) + portsPath := idxPath.Child("ports") + for pi := range ctr.Ports { + idxPath := portsPath.Index(pi) + port := ctr.Ports[pi].HostPort + if port == 0 { + continue + } + str := fmt.Sprintf("%d/%s", port, ctr.Ports[pi].Protocol) + if accumulator.Has(str) { + allErrs = append(allErrs, field.Duplicate(idxPath.Child("hostPort"), str)) + } else { + accumulator.Insert(str) + } + } + } + return allErrs +} + +// checkHostPortConflicts checks for colliding Port.HostPort values across +// a slice of containers. +func checkHostPortConflicts(containers []api.Container, fldPath *field.Path) field.ErrorList { + allPorts := sets.String{} + return AccumulateUniqueHostPorts(containers, &allPorts, fldPath) +} + +func validateExecAction(exec *api.ExecAction, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + if len(exec.Command) == 0 { + allErrors = append(allErrors, field.Required(fldPath.Child("command"), "")) + } + return allErrors +} + +var supportedHTTPSchemes = sets.NewString(string(api.URISchemeHTTP), string(api.URISchemeHTTPS)) + +func validateHTTPGetAction(http *api.HTTPGetAction, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + if len(http.Path) == 0 { + allErrors = append(allErrors, field.Required(fldPath.Child("path"), "")) + } + allErrors = append(allErrors, ValidatePortNumOrName(http.Port, fldPath.Child("port"))...) + if !supportedHTTPSchemes.Has(string(http.Scheme)) { + allErrors = append(allErrors, field.NotSupported(fldPath.Child("scheme"), http.Scheme, supportedHTTPSchemes.List())) + } + for _, header := range http.HTTPHeaders { + for _, msg := range validation.IsHTTPHeaderName(header.Name) { + allErrors = append(allErrors, field.Invalid(fldPath.Child("httpHeaders"), header.Name, msg)) + } + } + return allErrors +} + +func ValidatePortNumOrName(port intstr.IntOrString, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if port.Type == intstr.Int { + for _, msg := range validation.IsValidPortNum(port.IntValue()) { + allErrs = append(allErrs, field.Invalid(fldPath, port.IntValue(), msg)) + } + } else if port.Type == intstr.String { + for _, msg := range validation.IsValidPortName(port.StrVal) { + allErrs = append(allErrs, field.Invalid(fldPath, port.StrVal, msg)) + } + } else { + allErrs = append(allErrs, field.InternalError(fldPath, fmt.Errorf("unknown type: %v", port.Type))) + } + return allErrs +} + +func validateTCPSocketAction(tcp *api.TCPSocketAction, fldPath *field.Path) field.ErrorList { + return ValidatePortNumOrName(tcp.Port, fldPath.Child("port")) +} + +func validateHandler(handler *api.Handler, fldPath *field.Path) field.ErrorList { + numHandlers := 0 + allErrors := field.ErrorList{} + if handler.Exec != nil { + if numHandlers > 0 { + allErrors = append(allErrors, field.Forbidden(fldPath.Child("exec"), "may not specify more than 1 handler type")) + } else { + numHandlers++ + allErrors = append(allErrors, validateExecAction(handler.Exec, fldPath.Child("exec"))...) + } + } + if handler.HTTPGet != nil { + if numHandlers > 0 { + allErrors = append(allErrors, field.Forbidden(fldPath.Child("httpGet"), "may not specify more than 1 handler type")) + } else { + numHandlers++ + allErrors = append(allErrors, validateHTTPGetAction(handler.HTTPGet, fldPath.Child("httpGet"))...) + } + } + if handler.TCPSocket != nil { + if numHandlers > 0 { + allErrors = append(allErrors, field.Forbidden(fldPath.Child("tcpSocket"), "may not specify more than 1 handler type")) + } else { + numHandlers++ + allErrors = append(allErrors, validateTCPSocketAction(handler.TCPSocket, fldPath.Child("tcpSocket"))...) + } + } + if numHandlers == 0 { + allErrors = append(allErrors, field.Required(fldPath, "must specify a handler type")) + } + return allErrors +} + +func validateLifecycle(lifecycle *api.Lifecycle, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if lifecycle.PostStart != nil { + allErrs = append(allErrs, validateHandler(lifecycle.PostStart, fldPath.Child("postStart"))...) + } + if lifecycle.PreStop != nil { + allErrs = append(allErrs, validateHandler(lifecycle.PreStop, fldPath.Child("preStop"))...) + } + return allErrs +} + +var supportedPullPolicies = sets.NewString(string(api.PullAlways), string(api.PullIfNotPresent), string(api.PullNever)) + +func validatePullPolicy(policy api.PullPolicy, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + + switch policy { + case api.PullAlways, api.PullIfNotPresent, api.PullNever: + break + case "": + allErrors = append(allErrors, field.Required(fldPath, "")) + default: + allErrors = append(allErrors, field.NotSupported(fldPath, policy, supportedPullPolicies.List())) + } + + return allErrors +} + +func validateInitContainers(containers, otherContainers []api.Container, volumes sets.String, fldPath *field.Path) field.ErrorList { + var allErrs field.ErrorList + if len(containers) > 0 { + allErrs = append(allErrs, validateContainers(containers, volumes, fldPath)...) + } + + allNames := sets.String{} + for _, ctr := range otherContainers { + allNames.Insert(ctr.Name) + } + for i, ctr := range containers { + idxPath := fldPath.Index(i) + if allNames.Has(ctr.Name) { + allErrs = append(allErrs, field.Duplicate(idxPath.Child("name"), ctr.Name)) + } + if len(ctr.Name) > 0 { + allNames.Insert(ctr.Name) + } + if ctr.Lifecycle != nil { + allErrs = append(allErrs, field.Invalid(idxPath.Child("lifecycle"), ctr.Lifecycle, "must not be set for init containers")) + } + if ctr.LivenessProbe != nil { + allErrs = append(allErrs, field.Invalid(idxPath.Child("livenessProbe"), ctr.LivenessProbe, "must not be set for init containers")) + } + if ctr.ReadinessProbe != nil { + allErrs = append(allErrs, field.Invalid(idxPath.Child("readinessProbe"), ctr.ReadinessProbe, "must not be set for init containers")) + } + } + return allErrs +} + +func validateContainers(containers []api.Container, volumes sets.String, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(containers) == 0 { + return append(allErrs, field.Required(fldPath, "")) + } + + allNames := sets.String{} + for i, ctr := range containers { + idxPath := fldPath.Index(i) + namePath := idxPath.Child("name") + if len(ctr.Name) == 0 { + allErrs = append(allErrs, field.Required(namePath, "")) + } else { + allErrs = append(allErrs, ValidateDNS1123Label(ctr.Name, namePath)...) + } + if allNames.Has(ctr.Name) { + allErrs = append(allErrs, field.Duplicate(namePath, ctr.Name)) + } else { + allNames.Insert(ctr.Name) + } + if len(ctr.Image) == 0 { + allErrs = append(allErrs, field.Required(idxPath.Child("image"), "")) + } + if ctr.Lifecycle != nil { + allErrs = append(allErrs, validateLifecycle(ctr.Lifecycle, idxPath.Child("lifecycle"))...) + } + allErrs = append(allErrs, validateProbe(ctr.LivenessProbe, idxPath.Child("livenessProbe"))...) + // Liveness-specific validation + if ctr.LivenessProbe != nil && ctr.LivenessProbe.SuccessThreshold != 1 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("livenessProbe", "successThreshold"), ctr.LivenessProbe.SuccessThreshold, "must be 1")) + } + + allErrs = append(allErrs, validateProbe(ctr.ReadinessProbe, idxPath.Child("readinessProbe"))...) + allErrs = append(allErrs, validateContainerPorts(ctr.Ports, idxPath.Child("ports"))...) + allErrs = append(allErrs, validateEnv(ctr.Env, idxPath.Child("env"))...) + allErrs = append(allErrs, validateVolumeMounts(ctr.VolumeMounts, volumes, idxPath.Child("volumeMounts"))...) + allErrs = append(allErrs, validatePullPolicy(ctr.ImagePullPolicy, idxPath.Child("imagePullPolicy"))...) + allErrs = append(allErrs, ValidateResourceRequirements(&ctr.Resources, idxPath.Child("resources"))...) + allErrs = append(allErrs, ValidateSecurityContext(ctr.SecurityContext, idxPath.Child("securityContext"))...) + } + // Check for colliding ports across all containers. + allErrs = append(allErrs, checkHostPortConflicts(containers, fldPath)...) + + return allErrs +} + +func validateRestartPolicy(restartPolicy *api.RestartPolicy, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + switch *restartPolicy { + case api.RestartPolicyAlways, api.RestartPolicyOnFailure, api.RestartPolicyNever: + break + case "": + allErrors = append(allErrors, field.Required(fldPath, "")) + default: + validValues := []string{string(api.RestartPolicyAlways), string(api.RestartPolicyOnFailure), string(api.RestartPolicyNever)} + allErrors = append(allErrors, field.NotSupported(fldPath, *restartPolicy, validValues)) + } + + return allErrors +} + +func validateDNSPolicy(dnsPolicy *api.DNSPolicy, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + switch *dnsPolicy { + case api.DNSClusterFirst, api.DNSDefault: + break + case "": + allErrors = append(allErrors, field.Required(fldPath, "")) + default: + validValues := []string{string(api.DNSClusterFirst), string(api.DNSDefault)} + allErrors = append(allErrors, field.NotSupported(fldPath, dnsPolicy, validValues)) + } + return allErrors +} + +func validateHostNetwork(hostNetwork bool, containers []api.Container, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + if hostNetwork { + for i, container := range containers { + portsPath := fldPath.Index(i).Child("ports") + for i, port := range container.Ports { + idxPath := portsPath.Index(i) + if port.HostPort != port.ContainerPort { + allErrors = append(allErrors, field.Invalid(idxPath.Child("containerPort"), port.ContainerPort, "must match `hostPort` when `hostNetwork` is true")) + } + } + } + } + return allErrors +} + +// validateImagePullSecrets checks to make sure the pull secrets are well +// formed. Right now, we only expect name to be set (it's the only field). If +// this ever changes and someone decides to set those fields, we'd like to +// know. +func validateImagePullSecrets(imagePullSecrets []api.LocalObjectReference, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + for i, currPullSecret := range imagePullSecrets { + idxPath := fldPath.Index(i) + strippedRef := api.LocalObjectReference{Name: currPullSecret.Name} + if !reflect.DeepEqual(strippedRef, currPullSecret) { + allErrors = append(allErrors, field.Invalid(idxPath, currPullSecret, "only name may be set")) + } + } + return allErrors +} + +func validateTaintEffect(effect *api.TaintEffect, allowEmpty bool, fldPath *field.Path) field.ErrorList { + if !allowEmpty && len(*effect) == 0 { + return field.ErrorList{field.Required(fldPath, "")} + } + + allErrors := field.ErrorList{} + switch *effect { + // TODO: Replace next line with subsequent commented-out line when implement TaintEffectNoScheduleNoAdmit, TaintEffectNoScheduleNoAdmitNoExecute. + case api.TaintEffectNoSchedule, api.TaintEffectPreferNoSchedule: + // case api.TaintEffectNoSchedule, api.TaintEffectPreferNoSchedule, api.TaintEffectNoScheduleNoAdmit, api.TaintEffectNoScheduleNoAdmitNoExecute: + default: + validValues := []string{ + string(api.TaintEffectNoSchedule), + string(api.TaintEffectPreferNoSchedule), + // TODO: Uncomment this block when implement TaintEffectNoScheduleNoAdmit, TaintEffectNoScheduleNoAdmitNoExecute. + // string(api.TaintEffectNoScheduleNoAdmit), + // string(api.TaintEffectNoScheduleNoAdmitNoExecute), + } + allErrors = append(allErrors, field.NotSupported(fldPath, effect, validValues)) + } + return allErrors +} + +// validateTolerations tests if given tolerations have valid data. +func validateTolerations(tolerations []api.Toleration, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + for i, toleration := range tolerations { + idxPath := fldPath.Index(i) + // validate the toleration key + allErrors = append(allErrors, unversionedvalidation.ValidateLabelName(toleration.Key, idxPath.Child("key"))...) + + // validate toleration operator and value + switch toleration.Operator { + case api.TolerationOpEqual, "": + if errs := validation.IsValidLabelValue(toleration.Value); len(errs) != 0 { + allErrors = append(allErrors, field.Invalid(idxPath.Child("operator"), toleration.Value, strings.Join(errs, ";"))) + } + case api.TolerationOpExists: + if len(toleration.Value) > 0 { + allErrors = append(allErrors, field.Invalid(idxPath.Child("operator"), toleration, "value must be empty when `operator` is 'Exists'")) + } + default: + validValues := []string{string(api.TolerationOpEqual), string(api.TolerationOpExists)} + allErrors = append(allErrors, field.NotSupported(idxPath.Child("operator"), toleration.Operator, validValues)) + } + + // validate toleration effect + if len(toleration.Effect) > 0 { + allErrors = append(allErrors, validateTaintEffect(&toleration.Effect, true, idxPath.Child("effect"))...) + } + } + return allErrors +} + +// ValidatePod tests if required fields in the pod are set. +func ValidatePod(pod *api.Pod) field.ErrorList { + fldPath := field.NewPath("metadata") + allErrs := ValidateObjectMeta(&pod.ObjectMeta, true, ValidatePodName, fldPath) + allErrs = append(allErrs, ValidatePodSpecificAnnotations(pod.ObjectMeta.Annotations, &pod.Spec, fldPath.Child("annotations"))...) + allErrs = append(allErrs, ValidatePodSpec(&pod.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidatePodSpec tests that the specified PodSpec has valid data. +// This includes checking formatting and uniqueness. It also canonicalizes the +// structure by setting default values and implementing any backwards-compatibility +// tricks. +func ValidatePodSpec(spec *api.PodSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + allVolumes, vErrs := validateVolumes(spec.Volumes, fldPath.Child("volumes")) + allErrs = append(allErrs, vErrs...) + allErrs = append(allErrs, validateContainers(spec.Containers, allVolumes, fldPath.Child("containers"))...) + allErrs = append(allErrs, validateInitContainers(spec.InitContainers, spec.Containers, allVolumes, fldPath.Child("initContainers"))...) + allErrs = append(allErrs, validateRestartPolicy(&spec.RestartPolicy, fldPath.Child("restartPolicy"))...) + allErrs = append(allErrs, validateDNSPolicy(&spec.DNSPolicy, fldPath.Child("dnsPolicy"))...) + allErrs = append(allErrs, unversionedvalidation.ValidateLabels(spec.NodeSelector, fldPath.Child("nodeSelector"))...) + allErrs = append(allErrs, ValidatePodSecurityContext(spec.SecurityContext, spec, fldPath, fldPath.Child("securityContext"))...) + allErrs = append(allErrs, validateImagePullSecrets(spec.ImagePullSecrets, fldPath.Child("imagePullSecrets"))...) + if len(spec.ServiceAccountName) > 0 { + for _, msg := range ValidateServiceAccountName(spec.ServiceAccountName, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("serviceAccountName"), spec.ServiceAccountName, msg)) + } + } + + if len(spec.NodeName) > 0 { + for _, msg := range ValidateNodeName(spec.NodeName, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("nodeName"), spec.NodeName, msg)) + } + } + + if spec.ActiveDeadlineSeconds != nil { + if *spec.ActiveDeadlineSeconds <= 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("activeDeadlineSeconds"), spec.ActiveDeadlineSeconds, "must be greater than 0")) + } + } + + if len(spec.Hostname) > 0 { + allErrs = append(allErrs, ValidateDNS1123Label(spec.Hostname, fldPath.Child("hostname"))...) + } + + if len(spec.Subdomain) > 0 { + allErrs = append(allErrs, ValidateDNS1123Label(spec.Subdomain, fldPath.Child("subdomain"))...) + } + + return allErrs +} + +// ValidateNodeSelectorRequirement tests that the specified NodeSelectorRequirement fields has valid data +func ValidateNodeSelectorRequirement(rq api.NodeSelectorRequirement, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + switch rq.Operator { + case api.NodeSelectorOpIn, api.NodeSelectorOpNotIn: + if len(rq.Values) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("values"), "must be specified when `operator` is 'In' or 'NotIn'")) + } + case api.NodeSelectorOpExists, api.NodeSelectorOpDoesNotExist: + if len(rq.Values) > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("values"), "may not be specified when `operator` is 'Exists' or 'DoesNotExist'")) + } + + case api.NodeSelectorOpGt, api.NodeSelectorOpLt: + if len(rq.Values) != 1 { + allErrs = append(allErrs, field.Required(fldPath.Child("values"), "must be specified single value when `operator` is 'Lt' or 'Gt'")) + } + default: + allErrs = append(allErrs, field.Invalid(fldPath.Child("operator"), rq.Operator, "not a valid selector operator")) + } + allErrs = append(allErrs, unversionedvalidation.ValidateLabelName(rq.Key, fldPath.Child("key"))...) + return allErrs +} + +// ValidateNodeSelectorTerm tests that the specified node selector term has valid data +func ValidateNodeSelectorTerm(term api.NodeSelectorTerm, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if len(term.MatchExpressions) == 0 { + return append(allErrs, field.Required(fldPath.Child("matchExpressions"), "must have at least one node selector requirement")) + } + for j, req := range term.MatchExpressions { + allErrs = append(allErrs, ValidateNodeSelectorRequirement(req, fldPath.Child("matchExpressions").Index(j))...) + } + return allErrs +} + +// ValidateNodeSelector tests that the specified nodeSelector fields has valid data +func ValidateNodeSelector(nodeSelector *api.NodeSelector, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + termFldPath := fldPath.Child("nodeSelectorTerms") + if len(nodeSelector.NodeSelectorTerms) == 0 { + return append(allErrs, field.Required(termFldPath, "must have at least one node selector term")) + } + + for i, term := range nodeSelector.NodeSelectorTerms { + allErrs = append(allErrs, ValidateNodeSelectorTerm(term, termFldPath.Index(i))...) + } + + return allErrs +} + +// ValidateAvoidPodsInNodeAnnotations tests that the serialized AvoidPods in Node.Annotations has valid data +func ValidateAvoidPodsInNodeAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + avoids, err := api.GetAvoidPodsFromNodeAnnotations(annotations) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("AvoidPods"), api.PreferAvoidPodsAnnotationKey, err.Error())) + return allErrs + } + + if len(avoids.PreferAvoidPods) != 0 { + for i, pa := range avoids.PreferAvoidPods { + idxPath := fldPath.Child(api.PreferAvoidPodsAnnotationKey).Index(i) + allErrs = append(allErrs, validatePreferAvoidPodsEntry(pa, idxPath)...) + } + } + + return allErrs +} + +// validatePreferAvoidPodsEntry tests if given PreferAvoidPodsEntry has valid data. +func validatePreferAvoidPodsEntry(avoidPodEntry api.PreferAvoidPodsEntry, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + if avoidPodEntry.PodSignature.PodController == nil { + allErrors = append(allErrors, field.Required(fldPath.Child("PodSignature"), "")) + } else { + if *(avoidPodEntry.PodSignature.PodController.Controller) != true { + allErrors = append(allErrors, + field.Invalid(fldPath.Child("PodSignature").Child("PodController").Child("Controller"), + *(avoidPodEntry.PodSignature.PodController.Controller), "must point to a controller")) + } + } + return allErrors +} + +// ValidatePreferredSchedulingTerms tests that the specified SoftNodeAffinity fields has valid data +func ValidatePreferredSchedulingTerms(terms []api.PreferredSchedulingTerm, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + for i, term := range terms { + if term.Weight <= 0 || term.Weight > 100 { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("weight"), term.Weight, "must be in the range 1-100")) + } + + allErrs = append(allErrs, ValidateNodeSelectorTerm(term.Preference, fldPath.Index(i).Child("preference"))...) + } + return allErrs +} + +// validatePodAffinityTerm tests that the specified podAffinityTerm fields have valid data +func validatePodAffinityTerm(podAffinityTerm api.PodAffinityTerm, allowEmptyTopologyKey bool, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(podAffinityTerm.LabelSelector, fldPath.Child("matchExpressions"))...) + for _, name := range podAffinityTerm.Namespaces { + for _, msg := range ValidateNamespaceName(name, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("namespace"), name, msg)) + } + } + if !allowEmptyTopologyKey && len(podAffinityTerm.TopologyKey) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("topologyKey"), "can only be empty for PreferredDuringScheduling pod anti affinity")) + } + if len(podAffinityTerm.TopologyKey) != 0 { + allErrs = append(allErrs, unversionedvalidation.ValidateLabelName(podAffinityTerm.TopologyKey, fldPath.Child("topologyKey"))...) + } + return allErrs +} + +// validatePodAffinityTerms tests that the specified podAffinityTerms fields have valid data +func validatePodAffinityTerms(podAffinityTerms []api.PodAffinityTerm, allowEmptyTopologyKey bool, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for i, podAffinityTerm := range podAffinityTerms { + allErrs = append(allErrs, validatePodAffinityTerm(podAffinityTerm, allowEmptyTopologyKey, fldPath.Index(i))...) + } + return allErrs +} + +// validateWeightedPodAffinityTerms tests that the specified weightedPodAffinityTerms fields have valid data +func validateWeightedPodAffinityTerms(weightedPodAffinityTerms []api.WeightedPodAffinityTerm, allowEmptyTopologyKey bool, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for j, weightedTerm := range weightedPodAffinityTerms { + if weightedTerm.Weight <= 0 || weightedTerm.Weight > 100 { + allErrs = append(allErrs, field.Invalid(fldPath.Index(j).Child("weight"), weightedTerm.Weight, "must be in the range 1-100")) + } + allErrs = append(allErrs, validatePodAffinityTerm(weightedTerm.PodAffinityTerm, allowEmptyTopologyKey, fldPath.Index(j).Child("podAffinityTerm"))...) + } + return allErrs +} + +// validatePodAntiAffinity tests that the specified podAntiAffinity fields have valid data +func validatePodAntiAffinity(podAntiAffinity *api.PodAntiAffinity, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + // TODO:Uncomment below code once RequiredDuringSchedulingRequiredDuringExecution is implemented. + // if podAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution != nil { + // allErrs = append(allErrs, validatePodAffinityTerms(podAntiAffinity.RequiredDuringSchedulingRequiredDuringExecution, false, + // fldPath.Child("requiredDuringSchedulingRequiredDuringExecution"))...) + //} + if podAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution != nil { + // empty topologyKey is not allowed for hard pod anti-affinity + allErrs = append(allErrs, validatePodAffinityTerms(podAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution, false, + fldPath.Child("requiredDuringSchedulingIgnoredDuringExecution"))...) + } + if podAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution != nil { + // empty topologyKey is allowed for soft pod anti-affinity + allErrs = append(allErrs, validateWeightedPodAffinityTerms(podAntiAffinity.PreferredDuringSchedulingIgnoredDuringExecution, true, + fldPath.Child("preferredDuringSchedulingIgnoredDuringExecution"))...) + } + return allErrs +} + +// validatePodAffinity tests that the specified podAffinity fields have valid data +func validatePodAffinity(podAffinity *api.PodAffinity, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + // TODO:Uncomment below code once RequiredDuringSchedulingRequiredDuringExecution is implemented. + // if podAffinity.RequiredDuringSchedulingRequiredDuringExecution != nil { + // allErrs = append(allErrs, validatePodAffinityTerms(podAffinity.RequiredDuringSchedulingRequiredDuringExecution, false, + // fldPath.Child("requiredDuringSchedulingRequiredDuringExecution"))...) + //} + if podAffinity.RequiredDuringSchedulingIgnoredDuringExecution != nil { + // empty topologyKey is not allowed for hard pod affinity + allErrs = append(allErrs, validatePodAffinityTerms(podAffinity.RequiredDuringSchedulingIgnoredDuringExecution, false, + fldPath.Child("requiredDuringSchedulingIgnoredDuringExecution"))...) + } + if podAffinity.PreferredDuringSchedulingIgnoredDuringExecution != nil { + // empty topologyKey is not allowed for soft pod affinity + allErrs = append(allErrs, validateWeightedPodAffinityTerms(podAffinity.PreferredDuringSchedulingIgnoredDuringExecution, false, + fldPath.Child("preferredDuringSchedulingIgnoredDuringExecution"))...) + } + return allErrs +} + +// ValidateAffinityInPodAnnotations tests that the serialized Affinity in Pod.Annotations has valid data +func ValidateAffinityInPodAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + affinity, err := api.GetAffinityFromPodAnnotations(annotations) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath, api.AffinityAnnotationKey, err.Error())) + return allErrs + } + if affinity == nil { + return allErrs + } + + affinityFldPath := fldPath.Child(api.AffinityAnnotationKey) + if affinity.NodeAffinity != nil { + na := affinity.NodeAffinity + naFldPath := affinityFldPath.Child("nodeAffinity") + // TODO: Uncomment the next three lines once RequiredDuringSchedulingRequiredDuringExecution is implemented. + // if na.RequiredDuringSchedulingRequiredDuringExecution != nil { + // allErrs = append(allErrs, ValidateNodeSelector(na.RequiredDuringSchedulingRequiredDuringExecution, naFldPath.Child("requiredDuringSchedulingRequiredDuringExecution"))...) + // } + + if na.RequiredDuringSchedulingIgnoredDuringExecution != nil { + allErrs = append(allErrs, ValidateNodeSelector(na.RequiredDuringSchedulingIgnoredDuringExecution, naFldPath.Child("requiredDuringSchedulingIgnoredDuringExecution"))...) + } + + if len(na.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { + allErrs = append(allErrs, ValidatePreferredSchedulingTerms(na.PreferredDuringSchedulingIgnoredDuringExecution, naFldPath.Child("preferredDuringSchedulingIgnoredDuringExecution"))...) + } + } + if affinity.PodAffinity != nil { + allErrs = append(allErrs, validatePodAffinity(affinity.PodAffinity, affinityFldPath.Child("podAffinity"))...) + } + if affinity.PodAntiAffinity != nil { + allErrs = append(allErrs, validatePodAntiAffinity(affinity.PodAntiAffinity, affinityFldPath.Child("podAntiAffinity"))...) + } + + return allErrs +} + +// ValidateTolerationsInPodAnnotations tests that the serialized tolerations in Pod.Annotations has valid data +func ValidateTolerationsInPodAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + tolerations, err := api.GetTolerationsFromPodAnnotations(annotations) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath, api.TolerationsAnnotationKey, err.Error())) + return allErrs + } + if len(tolerations) > 0 { + allErrs = append(allErrs, validateTolerations(tolerations, fldPath.Child(api.TolerationsAnnotationKey))...) + } + + return allErrs +} + +func validateSeccompProfile(p string, fldPath *field.Path) field.ErrorList { + if p == "docker/default" { + return nil + } + if p == "unconfined" { + return nil + } + if strings.HasPrefix(p, "localhost/") { + return validateLocalDescendingPath(strings.TrimPrefix(p, "localhost/"), fldPath) + } + return field.ErrorList{field.Invalid(fldPath, p, "must be a valid seccomp profile")} +} + +func ValidateSeccompPodAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if p, exists := annotations[api.SeccompPodAnnotationKey]; exists { + allErrs = append(allErrs, validateSeccompProfile(p, fldPath.Child(api.SeccompPodAnnotationKey))...) + } + for k, p := range annotations { + if strings.HasPrefix(k, api.SeccompContainerAnnotationKeyPrefix) { + allErrs = append(allErrs, validateSeccompProfile(p, fldPath.Child(k))...) + } + } + + return allErrs +} + +func ValidateAppArmorPodAnnotations(annotations map[string]string, spec *api.PodSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for k, p := range annotations { + if !strings.HasPrefix(k, apparmor.ContainerAnnotationKeyPrefix) { + continue + } + if !utilconfig.DefaultFeatureGate.AppArmor() { + allErrs = append(allErrs, field.Forbidden(fldPath.Key(k), "AppArmor is disabled by feature-gate")) + continue + } + containerName := strings.TrimPrefix(k, apparmor.ContainerAnnotationKeyPrefix) + if !podSpecHasContainer(spec, containerName) { + allErrs = append(allErrs, field.Invalid(fldPath.Key(k), containerName, "container not found")) + } + + if err := apparmor.ValidateProfileFormat(p); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Key(k), p, err.Error())) + } + } + + return allErrs +} + +func podSpecHasContainer(spec *api.PodSpec, containerName string) bool { + for _, c := range spec.InitContainers { + if c.Name == containerName { + return true + } + } + for _, c := range spec.Containers { + if c.Name == containerName { + return true + } + } + return false +} + +const ( + // a sysctl segment regex, concatenated with dots to form a sysctl name + SysctlSegmentFmt string = "[a-z0-9]([-_a-z0-9]*[a-z0-9])?" + + // a sysctl name regex + SysctlFmt string = "(" + SysctlSegmentFmt + "\\.)*" + SysctlSegmentFmt + + // the maximal length of a sysctl name + SysctlMaxLength int = 253 +) + +var sysctlRegexp = regexp.MustCompile("^" + SysctlFmt + "$") + +// IsValidSysctlName checks that the given string is a valid sysctl name, +// i.e. matches SysctlFmt. +func IsValidSysctlName(name string) bool { + if len(name) > SysctlMaxLength { + return false + } + return sysctlRegexp.MatchString(name) +} + +func validateSysctls(sysctls []api.Sysctl, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for i, s := range sysctls { + if len(s.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Index(i).Child("name"), "")) + } else if !IsValidSysctlName(s.Name) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("name"), s.Name, fmt.Sprintf("must have at most %d characters and match regex %s", SysctlMaxLength, SysctlFmt))) + } + } + return allErrs +} + +// ValidatePodSecurityContext test that the specified PodSecurityContext has valid data. +func ValidatePodSecurityContext(securityContext *api.PodSecurityContext, spec *api.PodSpec, specPath, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if securityContext != nil { + allErrs = append(allErrs, validateHostNetwork(securityContext.HostNetwork, spec.Containers, specPath.Child("containers"))...) + if securityContext.FSGroup != nil { + for _, msg := range validation.IsValidGroupId(*securityContext.FSGroup) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("fsGroup"), *(securityContext.FSGroup), msg)) + } + } + if securityContext.RunAsUser != nil { + for _, msg := range validation.IsValidUserId(*securityContext.RunAsUser) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *(securityContext.RunAsUser), msg)) + } + } + for g, gid := range securityContext.SupplementalGroups { + for _, msg := range validation.IsValidGroupId(gid) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("supplementalGroups").Index(g), gid, msg)) + } + } + } + + return allErrs +} + +func ValidateContainerUpdates(newContainers, oldContainers []api.Container, fldPath *field.Path) (allErrs field.ErrorList, stop bool) { + allErrs = field.ErrorList{} + if len(newContainers) != len(oldContainers) { + //TODO: Pinpoint the specific container that causes the invalid error after we have strategic merge diff + allErrs = append(allErrs, field.Forbidden(fldPath, "pod updates may not add or remove containers")) + return allErrs, true + } + + // validate updated container images + for i, ctr := range newContainers { + if len(ctr.Image) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Index(i).Child("image"), "")) + } + } + return allErrs, false +} + +// ValidatePodUpdate tests to see if the update is legal for an end user to make. newPod is updated with fields +// that cannot be changed. +func ValidatePodUpdate(newPod, oldPod *api.Pod) field.ErrorList { + fldPath := field.NewPath("metadata") + allErrs := ValidateObjectMetaUpdate(&newPod.ObjectMeta, &oldPod.ObjectMeta, fldPath) + allErrs = append(allErrs, ValidatePodSpecificAnnotationUpdates(newPod, oldPod, fldPath.Child("annotations"))...) + specPath := field.NewPath("spec") + + // validate updateable fields: + // 1. containers[*].image + // 2. initContainers[*].image + // 3. spec.activeDeadlineSeconds + + containerErrs, stop := ValidateContainerUpdates(newPod.Spec.Containers, oldPod.Spec.Containers, specPath.Child("containers")) + allErrs = append(allErrs, containerErrs...) + if stop { + return allErrs + } + containerErrs, stop = ValidateContainerUpdates(newPod.Spec.InitContainers, oldPod.Spec.InitContainers, specPath.Child("initContainers")) + allErrs = append(allErrs, containerErrs...) + if stop { + return allErrs + } + + // validate updated spec.activeDeadlineSeconds. two types of updates are allowed: + // 1. from nil to a positive value + // 2. from a positive value to a lesser, non-negative value + if newPod.Spec.ActiveDeadlineSeconds != nil { + newActiveDeadlineSeconds := *newPod.Spec.ActiveDeadlineSeconds + if newActiveDeadlineSeconds < 0 { + allErrs = append(allErrs, field.Invalid(specPath.Child("activeDeadlineSeconds"), newActiveDeadlineSeconds, isNegativeErrorMsg)) + return allErrs + } + if oldPod.Spec.ActiveDeadlineSeconds != nil { + oldActiveDeadlineSeconds := *oldPod.Spec.ActiveDeadlineSeconds + if oldActiveDeadlineSeconds < newActiveDeadlineSeconds { + allErrs = append(allErrs, field.Invalid(specPath.Child("activeDeadlineSeconds"), newActiveDeadlineSeconds, "must be less than or equal to previous value")) + return allErrs + } + } + } else if oldPod.Spec.ActiveDeadlineSeconds != nil { + allErrs = append(allErrs, field.Invalid(specPath.Child("activeDeadlineSeconds"), newPod.Spec.ActiveDeadlineSeconds, "must not update from a positive integer to nil value")) + } + + // handle updateable fields by munging those fields prior to deep equal comparison. + mungedPod := *newPod + // munge containers[*].image + var newContainers []api.Container + for ix, container := range mungedPod.Spec.Containers { + container.Image = oldPod.Spec.Containers[ix].Image + newContainers = append(newContainers, container) + } + mungedPod.Spec.Containers = newContainers + // munge initContainers[*].image + var newInitContainers []api.Container + for ix, container := range mungedPod.Spec.InitContainers { + container.Image = oldPod.Spec.InitContainers[ix].Image + newInitContainers = append(newInitContainers, container) + } + mungedPod.Spec.InitContainers = newInitContainers + // munge spec.activeDeadlineSeconds + mungedPod.Spec.ActiveDeadlineSeconds = nil + if oldPod.Spec.ActiveDeadlineSeconds != nil { + activeDeadlineSeconds := *oldPod.Spec.ActiveDeadlineSeconds + mungedPod.Spec.ActiveDeadlineSeconds = &activeDeadlineSeconds + } + if !api.Semantic.DeepEqual(mungedPod.Spec, oldPod.Spec) { + //TODO: Pinpoint the specific field that causes the invalid error after we have strategic merge diff + allErrs = append(allErrs, field.Forbidden(specPath, "pod updates may not change fields other than `containers[*].image` or `spec.activeDeadlineSeconds`")) + } + + return allErrs +} + +// ValidatePodStatusUpdate tests to see if the update is legal for an end user to make. newPod is updated with fields +// that cannot be changed. +func ValidatePodStatusUpdate(newPod, oldPod *api.Pod) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newPod.ObjectMeta, &oldPod.ObjectMeta, field.NewPath("metadata")) + + // TODO: allow change when bindings are properly decoupled from pods + if newPod.Spec.NodeName != oldPod.Spec.NodeName { + allErrs = append(allErrs, field.Forbidden(field.NewPath("status", "nodeName"), "may not be changed directly")) + } + + // For status update we ignore changes to pod spec. + newPod.Spec = oldPod.Spec + + return allErrs +} + +// ValidatePodBinding tests if required fields in the pod binding are legal. +func ValidatePodBinding(binding *api.Binding) field.ErrorList { + allErrs := field.ErrorList{} + + if len(binding.Target.Kind) != 0 && binding.Target.Kind != "Node" { + // TODO: When validation becomes versioned, this gets more complicated. + allErrs = append(allErrs, field.NotSupported(field.NewPath("target", "kind"), binding.Target.Kind, []string{"Node", ""})) + } + if len(binding.Target.Name) == 0 { + // TODO: When validation becomes versioned, this gets more complicated. + allErrs = append(allErrs, field.Required(field.NewPath("target", "name"), "")) + } + + return allErrs +} + +// ValidatePodTemplate tests if required fields in the pod template are set. +func ValidatePodTemplate(pod *api.PodTemplate) field.ErrorList { + allErrs := ValidateObjectMeta(&pod.ObjectMeta, true, ValidatePodName, field.NewPath("metadata")) + allErrs = append(allErrs, ValidatePodTemplateSpec(&pod.Template, field.NewPath("template"))...) + return allErrs +} + +// ValidatePodTemplateUpdate tests to see if the update is legal for an end user to make. newPod is updated with fields +// that cannot be changed. +func ValidatePodTemplateUpdate(newPod, oldPod *api.PodTemplate) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&oldPod.ObjectMeta, &newPod.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidatePodTemplateSpec(&newPod.Template, field.NewPath("template"))...) + return allErrs +} + +var supportedSessionAffinityType = sets.NewString(string(api.ServiceAffinityClientIP), string(api.ServiceAffinityNone)) +var supportedServiceType = sets.NewString(string(api.ServiceTypeClusterIP), string(api.ServiceTypeNodePort), + string(api.ServiceTypeLoadBalancer), string(api.ServiceTypeExternalName)) + +// ValidateService tests if required fields in the service are set. +func ValidateService(service *api.Service) field.ErrorList { + allErrs := ValidateObjectMeta(&service.ObjectMeta, true, ValidateServiceName, field.NewPath("metadata")) + + specPath := field.NewPath("spec") + isHeadlessService := service.Spec.ClusterIP == api.ClusterIPNone + if len(service.Spec.Ports) == 0 && !isHeadlessService && service.Spec.Type != api.ServiceTypeExternalName { + allErrs = append(allErrs, field.Required(specPath.Child("ports"), "")) + } + switch service.Spec.Type { + case api.ServiceTypeLoadBalancer: + for ix := range service.Spec.Ports { + port := &service.Spec.Ports[ix] + // This is a workaround for broken cloud environments that + // over-open firewalls. Hopefully it can go away when more clouds + // understand containers better. + if port.Port == 10250 { + portPath := specPath.Child("ports").Index(ix) + allErrs = append(allErrs, field.Invalid(portPath, port.Port, "may not expose port 10250 externally since it is used by kubelet")) + } + } + case api.ServiceTypeExternalName: + if service.Spec.ClusterIP != "" { + allErrs = append(allErrs, field.Invalid(specPath.Child("clusterIP"), service.Spec.ClusterIP, "must be empty for ExternalName services")) + } + if len(service.Spec.ExternalName) > 0 { + allErrs = append(allErrs, ValidateDNS1123Subdomain(service.Spec.ExternalName, specPath.Child("externalName"))...) + } else { + allErrs = append(allErrs, field.Required(specPath.Child("externalName"), "")) + } + } + + allPortNames := sets.String{} + portsPath := specPath.Child("ports") + for i := range service.Spec.Ports { + portPath := portsPath.Index(i) + allErrs = append(allErrs, validateServicePort(&service.Spec.Ports[i], len(service.Spec.Ports) > 1, isHeadlessService, &allPortNames, portPath)...) + } + + if service.Spec.Selector != nil { + allErrs = append(allErrs, unversionedvalidation.ValidateLabels(service.Spec.Selector, specPath.Child("selector"))...) + } + + if len(service.Spec.SessionAffinity) == 0 { + allErrs = append(allErrs, field.Required(specPath.Child("sessionAffinity"), "")) + } else if !supportedSessionAffinityType.Has(string(service.Spec.SessionAffinity)) { + allErrs = append(allErrs, field.NotSupported(specPath.Child("sessionAffinity"), service.Spec.SessionAffinity, supportedSessionAffinityType.List())) + } + + if api.IsServiceIPSet(service) { + if ip := net.ParseIP(service.Spec.ClusterIP); ip == nil { + allErrs = append(allErrs, field.Invalid(specPath.Child("clusterIP"), service.Spec.ClusterIP, "must be empty, 'None', or a valid IP address")) + } + } + + ipPath := specPath.Child("externalIPs") + for i, ip := range service.Spec.ExternalIPs { + idxPath := ipPath.Index(i) + if msgs := validation.IsValidIP(ip); len(msgs) != 0 { + for i := range msgs { + allErrs = append(allErrs, field.Invalid(idxPath, ip, msgs[i])) + } + } else { + allErrs = append(allErrs, validateNonSpecialIP(ip, idxPath)...) + } + } + + if len(service.Spec.Type) == 0 { + allErrs = append(allErrs, field.Required(specPath.Child("type"), "")) + } else if !supportedServiceType.Has(string(service.Spec.Type)) { + allErrs = append(allErrs, field.NotSupported(specPath.Child("type"), service.Spec.Type, supportedServiceType.List())) + } + + if service.Spec.Type == api.ServiceTypeLoadBalancer { + portsPath := specPath.Child("ports") + includeProtocols := sets.NewString() + for i := range service.Spec.Ports { + portPath := portsPath.Index(i) + if !supportedPortProtocols.Has(string(service.Spec.Ports[i].Protocol)) { + allErrs = append(allErrs, field.Invalid(portPath.Child("protocol"), service.Spec.Ports[i].Protocol, "cannot create an external load balancer with non-TCP/UDP ports")) + } else { + includeProtocols.Insert(string(service.Spec.Ports[i].Protocol)) + } + } + if includeProtocols.Len() > 1 { + allErrs = append(allErrs, field.Invalid(portsPath, service.Spec.Ports, "cannot create an external load balancer with mix protocols")) + } + } + + if service.Spec.Type == api.ServiceTypeClusterIP { + portsPath := specPath.Child("ports") + for i := range service.Spec.Ports { + portPath := portsPath.Index(i) + if service.Spec.Ports[i].NodePort != 0 { + allErrs = append(allErrs, field.Invalid(portPath.Child("nodePort"), service.Spec.Ports[i].NodePort, "may not be used when `type` is 'ClusterIP'")) + } + } + } + + // Check for duplicate NodePorts, considering (protocol,port) pairs + portsPath = specPath.Child("ports") + nodePorts := make(map[api.ServicePort]bool) + for i := range service.Spec.Ports { + port := &service.Spec.Ports[i] + if port.NodePort == 0 { + continue + } + portPath := portsPath.Index(i) + var key api.ServicePort + key.Protocol = port.Protocol + key.NodePort = port.NodePort + _, found := nodePorts[key] + if found { + allErrs = append(allErrs, field.Duplicate(portPath.Child("nodePort"), port.NodePort)) + } + nodePorts[key] = true + } + + // Validate SourceRange field and annotation + _, ok := service.Annotations[apiservice.AnnotationLoadBalancerSourceRangesKey] + if len(service.Spec.LoadBalancerSourceRanges) > 0 || ok { + var fieldPath *field.Path + var val string + if len(service.Spec.LoadBalancerSourceRanges) > 0 { + fieldPath = specPath.Child("LoadBalancerSourceRanges") + val = fmt.Sprintf("%v", service.Spec.LoadBalancerSourceRanges) + } else { + fieldPath = field.NewPath("metadata", "annotations").Key(apiservice.AnnotationLoadBalancerSourceRangesKey) + val = service.Annotations[apiservice.AnnotationLoadBalancerSourceRangesKey] + } + if service.Spec.Type != api.ServiceTypeLoadBalancer { + allErrs = append(allErrs, field.Invalid(fieldPath, "", "may only be used when `type` is 'LoadBalancer'")) + } + _, err := apiservice.GetLoadBalancerSourceRanges(service) + if err != nil { + allErrs = append(allErrs, field.Invalid(fieldPath, val, "must be a list of IP ranges. For example, 10.240.0.0/24,10.250.0.0/24 ")) + } + } + return allErrs +} + +func validateServicePort(sp *api.ServicePort, requireName, isHeadlessService bool, allNames *sets.String, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if requireName && len(sp.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) + } else if len(sp.Name) != 0 { + allErrs = append(allErrs, ValidateDNS1123Label(sp.Name, fldPath.Child("name"))...) + if allNames.Has(sp.Name) { + allErrs = append(allErrs, field.Duplicate(fldPath.Child("name"), sp.Name)) + } else { + allNames.Insert(sp.Name) + } + } + + for _, msg := range validation.IsValidPortNum(int(sp.Port)) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("port"), sp.Port, msg)) + } + + if len(sp.Protocol) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("protocol"), "")) + } else if !supportedPortProtocols.Has(string(sp.Protocol)) { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("protocol"), sp.Protocol, supportedPortProtocols.List())) + } + + allErrs = append(allErrs, ValidatePortNumOrName(sp.TargetPort, fldPath.Child("targetPort"))...) + + // in the v1 API, targetPorts on headless services were tolerated. + // once we have version-specific validation, we can reject this on newer API versions, but until then, we have to tolerate it for compatibility. + // + // if isHeadlessService { + // if sp.TargetPort.Type == intstr.String || (sp.TargetPort.Type == intstr.Int && sp.Port != sp.TargetPort.IntValue()) { + // allErrs = append(allErrs, field.Invalid(fldPath.Child("targetPort"), sp.TargetPort, "must be equal to the value of 'port' when clusterIP = None")) + // } + // } + + return allErrs +} + +// ValidateServiceUpdate tests if required fields in the service are set during an update +func ValidateServiceUpdate(service, oldService *api.Service) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&service.ObjectMeta, &oldService.ObjectMeta, field.NewPath("metadata")) + + if api.IsServiceIPSet(oldService) { + allErrs = append(allErrs, ValidateImmutableField(service.Spec.ClusterIP, oldService.Spec.ClusterIP, field.NewPath("spec", "clusterIP"))...) + } + + // TODO(freehan): allow user to update loadbalancerSourceRanges + allErrs = append(allErrs, ValidateImmutableField(service.Spec.LoadBalancerSourceRanges, oldService.Spec.LoadBalancerSourceRanges, field.NewPath("spec", "loadBalancerSourceRanges"))...) + + allErrs = append(allErrs, ValidateService(service)...) + return allErrs +} + +// ValidateServiceStatusUpdate tests if required fields in the Service are set when updating status. +func ValidateServiceStatusUpdate(service, oldService *api.Service) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&service.ObjectMeta, &oldService.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateLoadBalancerStatus(&service.Status.LoadBalancer, field.NewPath("status", "loadBalancer"))...) + return allErrs +} + +// ValidateReplicationController tests if required fields in the replication controller are set. +func ValidateReplicationController(controller *api.ReplicationController) field.ErrorList { + allErrs := ValidateObjectMeta(&controller.ObjectMeta, true, ValidateReplicationControllerName, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateReplicationControllerSpec(&controller.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidateReplicationControllerUpdate tests if required fields in the replication controller are set. +func ValidateReplicationControllerUpdate(controller, oldController *api.ReplicationController) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&controller.ObjectMeta, &oldController.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateReplicationControllerSpec(&controller.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidateReplicationControllerStatusUpdate tests if required fields in the replication controller are set. +func ValidateReplicationControllerStatusUpdate(controller, oldController *api.ReplicationController) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&controller.ObjectMeta, &oldController.ObjectMeta, field.NewPath("metadata")) + statusPath := field.NewPath("status") + allErrs = append(allErrs, ValidateNonnegativeField(int64(controller.Status.Replicas), statusPath.Child("replicas"))...) + allErrs = append(allErrs, ValidateNonnegativeField(int64(controller.Status.FullyLabeledReplicas), statusPath.Child("fullyLabeledReplicas"))...) + allErrs = append(allErrs, ValidateNonnegativeField(int64(controller.Status.ObservedGeneration), statusPath.Child("observedGeneration"))...) + return allErrs +} + +// Validates that the given selector is non-empty. +func ValidateNonEmptySelector(selectorMap map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + selector := labels.Set(selectorMap).AsSelector() + if selector.Empty() { + allErrs = append(allErrs, field.Required(fldPath, "")) + } + return allErrs +} + +// Validates the given template and ensures that it is in accordance with the desired selector and replicas. +func ValidatePodTemplateSpecForRC(template *api.PodTemplateSpec, selectorMap map[string]string, replicas int32, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if template == nil { + allErrs = append(allErrs, field.Required(fldPath, "")) + } else { + selector := labels.Set(selectorMap).AsSelector() + if !selector.Empty() { + // Verify that the RC selector matches the labels in template. + labels := labels.Set(template.Labels) + if !selector.Matches(labels) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("metadata", "labels"), template.Labels, "`selector` does not match template `labels`")) + } + } + allErrs = append(allErrs, ValidatePodTemplateSpec(template, fldPath)...) + if replicas > 1 { + allErrs = append(allErrs, ValidateReadOnlyPersistentDisks(template.Spec.Volumes, fldPath.Child("spec", "volumes"))...) + } + // RestartPolicy has already been first-order validated as per ValidatePodTemplateSpec(). + if template.Spec.RestartPolicy != api.RestartPolicyAlways { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("spec", "restartPolicy"), template.Spec.RestartPolicy, []string{string(api.RestartPolicyAlways)})) + } + } + return allErrs +} + +// ValidateReplicationControllerSpec tests if required fields in the replication controller spec are set. +func ValidateReplicationControllerSpec(spec *api.ReplicationControllerSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, ValidateNonEmptySelector(spec.Selector, fldPath.Child("selector"))...) + allErrs = append(allErrs, ValidateNonnegativeField(int64(spec.Replicas), fldPath.Child("replicas"))...) + allErrs = append(allErrs, ValidatePodTemplateSpecForRC(spec.Template, spec.Selector, spec.Replicas, fldPath.Child("template"))...) + return allErrs +} + +// ValidatePodTemplateSpec validates the spec of a pod template +func ValidatePodTemplateSpec(spec *api.PodTemplateSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, unversionedvalidation.ValidateLabels(spec.Labels, fldPath.Child("labels"))...) + allErrs = append(allErrs, ValidateAnnotations(spec.Annotations, fldPath.Child("annotations"))...) + allErrs = append(allErrs, ValidatePodSpecificAnnotations(spec.Annotations, &spec.Spec, fldPath.Child("annotations"))...) + allErrs = append(allErrs, ValidatePodSpec(&spec.Spec, fldPath.Child("spec"))...) + return allErrs +} + +func ValidateReadOnlyPersistentDisks(volumes []api.Volume, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for i := range volumes { + vol := &volumes[i] + idxPath := fldPath.Index(i) + if vol.GCEPersistentDisk != nil { + if vol.GCEPersistentDisk.ReadOnly == false { + allErrs = append(allErrs, field.Invalid(idxPath.Child("gcePersistentDisk", "readOnly"), false, "must be true for replicated pods > 1; GCE PD can only be mounted on multiple machines if it is read-only")) + } + } + // TODO: What to do for AWS? It doesn't support replicas + } + return allErrs +} + +// validateTaints tests if given taints have valid data. +func validateTaints(taints []api.Taint, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + + uniqueTaints := map[api.TaintEffect]sets.String{} + + for i, currTaint := range taints { + idxPath := fldPath.Index(i) + // validate the taint key + allErrors = append(allErrors, unversionedvalidation.ValidateLabelName(currTaint.Key, idxPath.Child("key"))...) + // validate the taint value + if errs := validation.IsValidLabelValue(currTaint.Value); len(errs) != 0 { + allErrors = append(allErrors, field.Invalid(idxPath.Child("value"), currTaint.Value, strings.Join(errs, ";"))) + } + // validate the taint effect + allErrors = append(allErrors, validateTaintEffect(&currTaint.Effect, false, idxPath.Child("effect"))...) + + // validate if taint is unique by + if len(uniqueTaints[currTaint.Effect]) > 0 && uniqueTaints[currTaint.Effect].Has(currTaint.Key) { + duplicatedError := field.Duplicate(idxPath, currTaint) + duplicatedError.Detail = "taints must be unique by key and effect pair" + allErrors = append(allErrors, duplicatedError) + continue + } + + // add taint to existingTaints for uniqueness check + if len(uniqueTaints[currTaint.Effect]) == 0 { + uniqueTaints[currTaint.Effect] = sets.String{} + } + uniqueTaints[currTaint.Effect].Insert(currTaint.Key) + } + return allErrors +} + +// ValidateTaintsInNodeAnnotations tests that the serialized taints in Node.Annotations has valid data +func ValidateTaintsInNodeAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + taints, err := api.GetTaintsFromNodeAnnotations(annotations) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath, api.TaintsAnnotationKey, err.Error())) + return allErrs + } + if len(taints) > 0 { + allErrs = append(allErrs, validateTaints(taints, fldPath.Child(api.TaintsAnnotationKey))...) + } + + return allErrs +} + +func ValidateNodeSpecificAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if annotations[api.PreferAvoidPodsAnnotationKey] != "" { + allErrs = append(allErrs, ValidateAvoidPodsInNodeAnnotations(annotations, fldPath)...) + } + if annotations[api.TaintsAnnotationKey] != "" { + allErrs = append(allErrs, ValidateTaintsInNodeAnnotations(annotations, fldPath)...) + } + return allErrs +} + +// ValidateNode tests if required fields in the node are set. +func ValidateNode(node *api.Node) field.ErrorList { + fldPath := field.NewPath("metadata") + allErrs := ValidateObjectMeta(&node.ObjectMeta, false, ValidateNodeName, fldPath) + allErrs = append(allErrs, ValidateNodeSpecificAnnotations(node.ObjectMeta.Annotations, fldPath.Child("annotations"))...) + + // Only validate spec. All status fields are optional and can be updated later. + + // external ID is required. + if len(node.Spec.ExternalID) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("spec", "externalID"), "")) + } + + // TODO(rjnagal): Ignore PodCIDR till its completely implemented. + return allErrs +} + +// ValidateNodeUpdate tests to make sure a node update can be applied. Modifies oldNode. +func ValidateNodeUpdate(node, oldNode *api.Node) field.ErrorList { + fldPath := field.NewPath("metadata") + allErrs := ValidateObjectMetaUpdate(&node.ObjectMeta, &oldNode.ObjectMeta, fldPath) + allErrs = append(allErrs, ValidateNodeSpecificAnnotations(node.ObjectMeta.Annotations, fldPath.Child("annotations"))...) + + // TODO: Enable the code once we have better api object.status update model. Currently, + // anyone can update node status. + // if !api.Semantic.DeepEqual(node.Status, api.NodeStatus{}) { + // allErrs = append(allErrs, field.Invalid("status", node.Status, "must be empty")) + // } + + // Validte no duplicate addresses in node status. + addresses := make(map[api.NodeAddress]bool) + for i, address := range node.Status.Addresses { + if _, ok := addresses[address]; ok { + allErrs = append(allErrs, field.Duplicate(field.NewPath("status", "addresses").Index(i), address)) + } + addresses[address] = true + } + + if len(oldNode.Spec.PodCIDR) == 0 { + // Allow the controller manager to assign a CIDR to a node if it doesn't have one. + oldNode.Spec.PodCIDR = node.Spec.PodCIDR + } else { + if oldNode.Spec.PodCIDR != node.Spec.PodCIDR { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "podCIDR"), "node updates may not change podCIDR except from \"\" to valid")) + } + } + // TODO: move reset function to its own location + // Ignore metadata changes now that they have been tested + oldNode.ObjectMeta = node.ObjectMeta + // Allow users to update capacity + oldNode.Status.Capacity = node.Status.Capacity + // Allow users to unschedule node + oldNode.Spec.Unschedulable = node.Spec.Unschedulable + // Clear status + oldNode.Status = node.Status + + // TODO: Add a 'real' error type for this error and provide print actual diffs. + if !api.Semantic.DeepEqual(oldNode, node) { + glog.V(4).Infof("Update failed validation %#v vs %#v", oldNode, node) + allErrs = append(allErrs, field.Forbidden(field.NewPath(""), "node updates may only change labels or capacity")) + } + + return allErrs +} + +// Validate compute resource typename. +// Refer to docs/design/resources.md for more details. +func validateResourceName(value string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsQualifiedName(value) { + allErrs = append(allErrs, field.Invalid(fldPath, value, msg)) + } + if len(allErrs) != 0 { + return allErrs + } + + if len(strings.Split(value, "/")) == 1 { + if !api.IsStandardResourceName(value) { + return append(allErrs, field.Invalid(fldPath, value, "must be a standard resource type or fully qualified")) + } + } + + return field.ErrorList{} +} + +// Validate container resource name +// Refer to docs/design/resources.md for more details. +func validateContainerResourceName(value string, fldPath *field.Path) field.ErrorList { + allErrs := validateResourceName(value, fldPath) + if len(strings.Split(value, "/")) == 1 { + if !api.IsStandardContainerResourceName(value) { + return append(allErrs, field.Invalid(fldPath, value, "must be a standard resource for containers")) + } + } + return field.ErrorList{} +} + +// Validate resource names that can go in a resource quota +// Refer to docs/design/resources.md for more details. +func ValidateResourceQuotaResourceName(value string, fldPath *field.Path) field.ErrorList { + allErrs := validateResourceName(value, fldPath) + if len(strings.Split(value, "/")) == 1 { + if !api.IsStandardQuotaResourceName(value) { + return append(allErrs, field.Invalid(fldPath, value, isInvalidQuotaResource)) + } + } + return field.ErrorList{} +} + +// Validate limit range types +func validateLimitRangeTypeName(value string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsQualifiedName(value) { + allErrs = append(allErrs, field.Invalid(fldPath, value, msg)) + } + if len(allErrs) != 0 { + return allErrs + } + + if len(strings.Split(value, "/")) == 1 { + if !api.IsStandardLimitRangeType(value) { + return append(allErrs, field.Invalid(fldPath, value, "must be a standard limit type or fully qualified")) + } + } + + return allErrs +} + +// Validate limit range resource name +// limit types (other than Pod/Container) could contain storage not just cpu or memory +func validateLimitRangeResourceName(limitType api.LimitType, value string, fldPath *field.Path) field.ErrorList { + switch limitType { + case api.LimitTypePod, api.LimitTypeContainer: + return validateContainerResourceName(value, fldPath) + default: + return validateResourceName(value, fldPath) + } +} + +// ValidateLimitRange tests if required fields in the LimitRange are set. +func ValidateLimitRange(limitRange *api.LimitRange) field.ErrorList { + allErrs := ValidateObjectMeta(&limitRange.ObjectMeta, true, ValidateLimitRangeName, field.NewPath("metadata")) + + // ensure resource names are properly qualified per docs/design/resources.md + limitTypeSet := map[api.LimitType]bool{} + fldPath := field.NewPath("spec", "limits") + for i := range limitRange.Spec.Limits { + idxPath := fldPath.Index(i) + limit := &limitRange.Spec.Limits[i] + allErrs = append(allErrs, validateLimitRangeTypeName(string(limit.Type), idxPath.Child("type"))...) + + _, found := limitTypeSet[limit.Type] + if found { + allErrs = append(allErrs, field.Duplicate(idxPath.Child("type"), limit.Type)) + } + limitTypeSet[limit.Type] = true + + keys := sets.String{} + min := map[string]resource.Quantity{} + max := map[string]resource.Quantity{} + defaults := map[string]resource.Quantity{} + defaultRequests := map[string]resource.Quantity{} + maxLimitRequestRatios := map[string]resource.Quantity{} + + for k, q := range limit.Max { + allErrs = append(allErrs, validateLimitRangeResourceName(limit.Type, string(k), idxPath.Child("max").Key(string(k)))...) + keys.Insert(string(k)) + max[string(k)] = q + } + for k, q := range limit.Min { + allErrs = append(allErrs, validateLimitRangeResourceName(limit.Type, string(k), idxPath.Child("min").Key(string(k)))...) + keys.Insert(string(k)) + min[string(k)] = q + } + + if limit.Type == api.LimitTypePod { + if len(limit.Default) > 0 { + allErrs = append(allErrs, field.Forbidden(idxPath.Child("default"), "may not be specified when `type` is 'Pod'")) + } + if len(limit.DefaultRequest) > 0 { + allErrs = append(allErrs, field.Forbidden(idxPath.Child("defaultRequest"), "may not be specified when `type` is 'Pod'")) + } + } else { + for k, q := range limit.Default { + allErrs = append(allErrs, validateLimitRangeResourceName(limit.Type, string(k), idxPath.Child("default").Key(string(k)))...) + keys.Insert(string(k)) + defaults[string(k)] = q + } + for k, q := range limit.DefaultRequest { + allErrs = append(allErrs, validateLimitRangeResourceName(limit.Type, string(k), idxPath.Child("defaultRequest").Key(string(k)))...) + keys.Insert(string(k)) + defaultRequests[string(k)] = q + } + } + + for k, q := range limit.MaxLimitRequestRatio { + allErrs = append(allErrs, validateLimitRangeResourceName(limit.Type, string(k), idxPath.Child("maxLimitRequestRatio").Key(string(k)))...) + keys.Insert(string(k)) + maxLimitRequestRatios[string(k)] = q + } + + for k := range keys { + minQuantity, minQuantityFound := min[k] + maxQuantity, maxQuantityFound := max[k] + defaultQuantity, defaultQuantityFound := defaults[k] + defaultRequestQuantity, defaultRequestQuantityFound := defaultRequests[k] + maxRatio, maxRatioFound := maxLimitRequestRatios[k] + + if minQuantityFound && maxQuantityFound && minQuantity.Cmp(maxQuantity) > 0 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("min").Key(string(k)), minQuantity, fmt.Sprintf("min value %s is greater than max value %s", minQuantity.String(), maxQuantity.String()))) + } + + if defaultRequestQuantityFound && minQuantityFound && minQuantity.Cmp(defaultRequestQuantity) > 0 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("defaultRequest").Key(string(k)), defaultRequestQuantity, fmt.Sprintf("min value %s is greater than default request value %s", minQuantity.String(), defaultRequestQuantity.String()))) + } + + if defaultRequestQuantityFound && maxQuantityFound && defaultRequestQuantity.Cmp(maxQuantity) > 0 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("defaultRequest").Key(string(k)), defaultRequestQuantity, fmt.Sprintf("default request value %s is greater than max value %s", defaultRequestQuantity.String(), maxQuantity.String()))) + } + + if defaultRequestQuantityFound && defaultQuantityFound && defaultRequestQuantity.Cmp(defaultQuantity) > 0 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("defaultRequest").Key(string(k)), defaultRequestQuantity, fmt.Sprintf("default request value %s is greater than default limit value %s", defaultRequestQuantity.String(), defaultQuantity.String()))) + } + + if defaultQuantityFound && minQuantityFound && minQuantity.Cmp(defaultQuantity) > 0 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("default").Key(string(k)), minQuantity, fmt.Sprintf("min value %s is greater than default value %s", minQuantity.String(), defaultQuantity.String()))) + } + + if defaultQuantityFound && maxQuantityFound && defaultQuantity.Cmp(maxQuantity) > 0 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("default").Key(string(k)), maxQuantity, fmt.Sprintf("default value %s is greater than max value %s", defaultQuantity.String(), maxQuantity.String()))) + } + if maxRatioFound && maxRatio.Cmp(*resource.NewQuantity(1, resource.DecimalSI)) < 0 { + allErrs = append(allErrs, field.Invalid(idxPath.Child("maxLimitRequestRatio").Key(string(k)), maxRatio, fmt.Sprintf("ratio %s is less than 1", maxRatio.String()))) + } + if maxRatioFound && minQuantityFound && maxQuantityFound { + maxRatioValue := float64(maxRatio.Value()) + minQuantityValue := minQuantity.Value() + maxQuantityValue := maxQuantity.Value() + if maxRatio.Value() < resource.MaxMilliValue && minQuantityValue < resource.MaxMilliValue && maxQuantityValue < resource.MaxMilliValue { + maxRatioValue = float64(maxRatio.MilliValue()) / 1000 + minQuantityValue = minQuantity.MilliValue() + maxQuantityValue = maxQuantity.MilliValue() + } + maxRatioLimit := float64(maxQuantityValue) / float64(minQuantityValue) + if maxRatioValue > maxRatioLimit { + allErrs = append(allErrs, field.Invalid(idxPath.Child("maxLimitRequestRatio").Key(string(k)), maxRatio, fmt.Sprintf("ratio %s is greater than max/min = %f", maxRatio.String(), maxRatioLimit))) + } + } + } + } + + return allErrs +} + +// ValidateServiceAccount tests if required fields in the ServiceAccount are set. +func ValidateServiceAccount(serviceAccount *api.ServiceAccount) field.ErrorList { + allErrs := ValidateObjectMeta(&serviceAccount.ObjectMeta, true, ValidateServiceAccountName, field.NewPath("metadata")) + return allErrs +} + +// ValidateServiceAccountUpdate tests if required fields in the ServiceAccount are set. +func ValidateServiceAccountUpdate(newServiceAccount, oldServiceAccount *api.ServiceAccount) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newServiceAccount.ObjectMeta, &oldServiceAccount.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateServiceAccount(newServiceAccount)...) + return allErrs +} + +// ValidateSecret tests if required fields in the Secret are set. +func ValidateSecret(secret *api.Secret) field.ErrorList { + allErrs := ValidateObjectMeta(&secret.ObjectMeta, true, ValidateSecretName, field.NewPath("metadata")) + + dataPath := field.NewPath("data") + totalSize := 0 + for key, value := range secret.Data { + for _, msg := range validation.IsConfigMapKey(key) { + allErrs = append(allErrs, field.Invalid(dataPath.Key(key), key, msg)) + } + totalSize += len(value) + } + if totalSize > api.MaxSecretSize { + allErrs = append(allErrs, field.TooLong(dataPath, "", api.MaxSecretSize)) + } + + switch secret.Type { + case api.SecretTypeServiceAccountToken: + // Only require Annotations[kubernetes.io/service-account.name] + // Additional fields (like Annotations[kubernetes.io/service-account.uid] and Data[token]) might be contributed later by a controller loop + if value := secret.Annotations[api.ServiceAccountNameKey]; len(value) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("metadata", "annotations").Key(api.ServiceAccountNameKey), "")) + } + case api.SecretTypeOpaque, "": + // no-op + case api.SecretTypeDockercfg: + dockercfgBytes, exists := secret.Data[api.DockerConfigKey] + if !exists { + allErrs = append(allErrs, field.Required(dataPath.Key(api.DockerConfigKey), "")) + break + } + + // make sure that the content is well-formed json. + if err := json.Unmarshal(dockercfgBytes, &map[string]interface{}{}); err != nil { + allErrs = append(allErrs, field.Invalid(dataPath.Key(api.DockerConfigKey), "", err.Error())) + } + case api.SecretTypeDockerConfigJson: + dockerConfigJsonBytes, exists := secret.Data[api.DockerConfigJsonKey] + if !exists { + allErrs = append(allErrs, field.Required(dataPath.Key(api.DockerConfigJsonKey), "")) + break + } + + // make sure that the content is well-formed json. + if err := json.Unmarshal(dockerConfigJsonBytes, &map[string]interface{}{}); err != nil { + allErrs = append(allErrs, field.Invalid(dataPath.Key(api.DockerConfigJsonKey), "", err.Error())) + } + case api.SecretTypeBasicAuth: + _, usernameFieldExists := secret.Data[api.BasicAuthUsernameKey] + _, passwordFieldExists := secret.Data[api.BasicAuthPasswordKey] + + // username or password might be empty, but the field must be present + if !usernameFieldExists && !passwordFieldExists { + allErrs = append(allErrs, field.Required(field.NewPath("data[%s]").Key(api.BasicAuthUsernameKey), "")) + allErrs = append(allErrs, field.Required(field.NewPath("data[%s]").Key(api.BasicAuthPasswordKey), "")) + break + } + case api.SecretTypeSSHAuth: + if len(secret.Data[api.SSHAuthPrivateKey]) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("data[%s]").Key(api.SSHAuthPrivateKey), "")) + break + } + + case api.SecretTypeTLS: + if _, exists := secret.Data[api.TLSCertKey]; !exists { + allErrs = append(allErrs, field.Required(dataPath.Key(api.TLSCertKey), "")) + } + if _, exists := secret.Data[api.TLSPrivateKeyKey]; !exists { + allErrs = append(allErrs, field.Required(dataPath.Key(api.TLSPrivateKeyKey), "")) + } + // TODO: Verify that the key matches the cert. + default: + // no-op + } + + return allErrs +} + +// ValidateSecretUpdate tests if required fields in the Secret are set. +func ValidateSecretUpdate(newSecret, oldSecret *api.Secret) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newSecret.ObjectMeta, &oldSecret.ObjectMeta, field.NewPath("metadata")) + + if len(newSecret.Type) == 0 { + newSecret.Type = oldSecret.Type + } + + allErrs = append(allErrs, ValidateImmutableField(newSecret.Type, oldSecret.Type, field.NewPath("type"))...) + + allErrs = append(allErrs, ValidateSecret(newSecret)...) + return allErrs +} + +// ValidateConfigMapName can be used to check whether the given ConfigMap name is valid. +// Prefix indicates this name will be used as part of generation, in which case +// trailing dashes are allowed. +var ValidateConfigMapName = NameIsDNSSubdomain + +// ValidateConfigMap tests whether required fields in the ConfigMap are set. +func ValidateConfigMap(cfg *api.ConfigMap) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, ValidateObjectMeta(&cfg.ObjectMeta, true, ValidateConfigMapName, field.NewPath("metadata"))...) + + totalSize := 0 + + for key, value := range cfg.Data { + for _, msg := range validation.IsConfigMapKey(key) { + allErrs = append(allErrs, field.Invalid(field.NewPath("data").Key(key), key, msg)) + } + totalSize += len(value) + } + if totalSize > api.MaxSecretSize { + allErrs = append(allErrs, field.TooLong(field.NewPath("data"), "", api.MaxSecretSize)) + } + + return allErrs +} + +// ValidateConfigMapUpdate tests if required fields in the ConfigMap are set. +func ValidateConfigMapUpdate(newCfg, oldCfg *api.ConfigMap) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, ValidateObjectMetaUpdate(&newCfg.ObjectMeta, &oldCfg.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidateConfigMap(newCfg)...) + + return allErrs +} + +func validateBasicResource(quantity resource.Quantity, fldPath *field.Path) field.ErrorList { + if quantity.Value() < 0 { + return field.ErrorList{field.Invalid(fldPath, quantity.Value(), "must be a valid resource quantity")} + } + return field.ErrorList{} +} + +// Validates resource requirement spec. +func ValidateResourceRequirements(requirements *api.ResourceRequirements, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + limPath := fldPath.Child("limits") + reqPath := fldPath.Child("requests") + for resourceName, quantity := range requirements.Limits { + fldPath := limPath.Key(string(resourceName)) + // Validate resource name. + allErrs = append(allErrs, validateContainerResourceName(string(resourceName), fldPath)...) + if api.IsStandardResourceName(string(resourceName)) { + allErrs = append(allErrs, validateBasicResource(quantity, fldPath.Key(string(resourceName)))...) + } + // Check that request <= limit. + requestQuantity, exists := requirements.Requests[resourceName] + if exists { + // For GPUs, not only requests can't exceed limits, they also can't be lower, i.e. must be equal. + if resourceName == api.ResourceNvidiaGPU && quantity.Cmp(requestQuantity) != 0 { + allErrs = append(allErrs, field.Invalid(reqPath, requestQuantity.String(), fmt.Sprintf("must be equal to %s limit", api.ResourceNvidiaGPU))) + } else if quantity.Cmp(requestQuantity) < 0 { + allErrs = append(allErrs, field.Invalid(limPath, quantity.String(), fmt.Sprintf("must be greater than or equal to %s request", resourceName))) + } + } + } + for resourceName, quantity := range requirements.Requests { + fldPath := reqPath.Key(string(resourceName)) + // Validate resource name. + allErrs = append(allErrs, validateContainerResourceName(string(resourceName), fldPath)...) + if api.IsStandardResourceName(string(resourceName)) { + allErrs = append(allErrs, validateBasicResource(quantity, fldPath.Key(string(resourceName)))...) + } + } + return allErrs +} + +// validateResourceQuotaScopes ensures that each enumerated hard resource constraint is valid for set of scopes +func validateResourceQuotaScopes(resourceQuotaSpec *api.ResourceQuotaSpec, fld *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(resourceQuotaSpec.Scopes) == 0 { + return allErrs + } + hardLimits := sets.NewString() + for k := range resourceQuotaSpec.Hard { + hardLimits.Insert(string(k)) + } + fldPath := fld.Child("scopes") + scopeSet := sets.NewString() + for _, scope := range resourceQuotaSpec.Scopes { + if !api.IsStandardResourceQuotaScope(string(scope)) { + allErrs = append(allErrs, field.Invalid(fldPath, resourceQuotaSpec.Scopes, "unsupported scope")) + } + for _, k := range hardLimits.List() { + if api.IsStandardQuotaResourceName(k) && !api.IsResourceQuotaScopeValidForResource(scope, k) { + allErrs = append(allErrs, field.Invalid(fldPath, resourceQuotaSpec.Scopes, "unsupported scope applied to resource")) + } + } + scopeSet.Insert(string(scope)) + } + invalidScopePairs := []sets.String{ + sets.NewString(string(api.ResourceQuotaScopeBestEffort), string(api.ResourceQuotaScopeNotBestEffort)), + sets.NewString(string(api.ResourceQuotaScopeTerminating), string(api.ResourceQuotaScopeNotTerminating)), + } + for _, invalidScopePair := range invalidScopePairs { + if scopeSet.HasAll(invalidScopePair.List()...) { + allErrs = append(allErrs, field.Invalid(fldPath, resourceQuotaSpec.Scopes, "conflicting scopes")) + } + } + return allErrs +} + +// ValidateResourceQuota tests if required fields in the ResourceQuota are set. +func ValidateResourceQuota(resourceQuota *api.ResourceQuota) field.ErrorList { + allErrs := ValidateObjectMeta(&resourceQuota.ObjectMeta, true, ValidateResourceQuotaName, field.NewPath("metadata")) + + allErrs = append(allErrs, ValidateResourceQuotaSpec(&resourceQuota.Spec, field.NewPath("spec"))...) + allErrs = append(allErrs, ValidateResourceQuotaStatus(&resourceQuota.Status, field.NewPath("status"))...) + + return allErrs +} + +func ValidateResourceQuotaStatus(status *api.ResourceQuotaStatus, fld *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + fldPath := fld.Child("hard") + for k, v := range status.Hard { + resPath := fldPath.Key(string(k)) + allErrs = append(allErrs, ValidateResourceQuotaResourceName(string(k), resPath)...) + allErrs = append(allErrs, ValidateResourceQuantityValue(string(k), v, resPath)...) + } + fldPath = fld.Child("used") + for k, v := range status.Used { + resPath := fldPath.Key(string(k)) + allErrs = append(allErrs, ValidateResourceQuotaResourceName(string(k), resPath)...) + allErrs = append(allErrs, ValidateResourceQuantityValue(string(k), v, resPath)...) + } + + return allErrs +} + +func ValidateResourceQuotaSpec(resourceQuotaSpec *api.ResourceQuotaSpec, fld *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + fldPath := fld.Child("hard") + for k, v := range resourceQuotaSpec.Hard { + resPath := fldPath.Key(string(k)) + allErrs = append(allErrs, ValidateResourceQuotaResourceName(string(k), resPath)...) + allErrs = append(allErrs, ValidateResourceQuantityValue(string(k), v, resPath)...) + } + allErrs = append(allErrs, validateResourceQuotaScopes(resourceQuotaSpec, fld)...) + + return allErrs +} + +// ValidateResourceQuantityValue enforces that specified quantity is valid for specified resource +func ValidateResourceQuantityValue(resource string, value resource.Quantity, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, ValidateNonnegativeQuantity(value, fldPath)...) + if api.IsIntegerResourceName(resource) { + if value.MilliValue()%int64(1000) != int64(0) { + allErrs = append(allErrs, field.Invalid(fldPath, value, isNotIntegerErrorMsg)) + } + } + return allErrs +} + +// ValidateResourceQuotaUpdate tests to see if the update is legal for an end user to make. +// newResourceQuota is updated with fields that cannot be changed. +func ValidateResourceQuotaUpdate(newResourceQuota, oldResourceQuota *api.ResourceQuota) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newResourceQuota.ObjectMeta, &oldResourceQuota.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateResourceQuotaSpec(&newResourceQuota.Spec, field.NewPath("spec"))...) + + // ensure scopes cannot change, and that resources are still valid for scope + fldPath := field.NewPath("spec", "scopes") + oldScopes := sets.NewString() + newScopes := sets.NewString() + for _, scope := range newResourceQuota.Spec.Scopes { + newScopes.Insert(string(scope)) + } + for _, scope := range oldResourceQuota.Spec.Scopes { + oldScopes.Insert(string(scope)) + } + if !oldScopes.Equal(newScopes) { + allErrs = append(allErrs, field.Invalid(fldPath, newResourceQuota.Spec.Scopes, "field is immutable")) + } + + newResourceQuota.Status = oldResourceQuota.Status + return allErrs +} + +// ValidateResourceQuotaStatusUpdate tests to see if the status update is legal for an end user to make. +// newResourceQuota is updated with fields that cannot be changed. +func ValidateResourceQuotaStatusUpdate(newResourceQuota, oldResourceQuota *api.ResourceQuota) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newResourceQuota.ObjectMeta, &oldResourceQuota.ObjectMeta, field.NewPath("metadata")) + if len(newResourceQuota.ResourceVersion) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("resourceVersion"), "")) + } + fldPath := field.NewPath("status", "hard") + for k, v := range newResourceQuota.Status.Hard { + resPath := fldPath.Key(string(k)) + allErrs = append(allErrs, ValidateResourceQuotaResourceName(string(k), resPath)...) + allErrs = append(allErrs, ValidateResourceQuantityValue(string(k), v, resPath)...) + } + fldPath = field.NewPath("status", "used") + for k, v := range newResourceQuota.Status.Used { + resPath := fldPath.Key(string(k)) + allErrs = append(allErrs, ValidateResourceQuotaResourceName(string(k), resPath)...) + allErrs = append(allErrs, ValidateResourceQuantityValue(string(k), v, resPath)...) + } + newResourceQuota.Spec = oldResourceQuota.Spec + return allErrs +} + +// ValidateNamespace tests if required fields are set. +func ValidateNamespace(namespace *api.Namespace) field.ErrorList { + allErrs := ValidateObjectMeta(&namespace.ObjectMeta, false, ValidateNamespaceName, field.NewPath("metadata")) + for i := range namespace.Spec.Finalizers { + allErrs = append(allErrs, validateFinalizerName(string(namespace.Spec.Finalizers[i]), field.NewPath("spec", "finalizers"))...) + } + return allErrs +} + +// Validate finalizer names +func validateFinalizerName(stringValue string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsQualifiedName(stringValue) { + allErrs = append(allErrs, field.Invalid(fldPath, stringValue, msg)) + } + if len(allErrs) != 0 { + return allErrs + } + + if len(strings.Split(stringValue, "/")) == 1 { + if !api.IsStandardFinalizerName(stringValue) { + return append(allErrs, field.Invalid(fldPath, stringValue, "name is neither a standard finalizer name nor is it fully qualified")) + } + } + + return field.ErrorList{} +} + +// ValidateNamespaceUpdate tests to make sure a namespace update can be applied. +// newNamespace is updated with fields that cannot be changed +func ValidateNamespaceUpdate(newNamespace *api.Namespace, oldNamespace *api.Namespace) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newNamespace.ObjectMeta, &oldNamespace.ObjectMeta, field.NewPath("metadata")) + newNamespace.Spec.Finalizers = oldNamespace.Spec.Finalizers + newNamespace.Status = oldNamespace.Status + return allErrs +} + +// ValidateNamespaceStatusUpdate tests to see if the update is legal for an end user to make. newNamespace is updated with fields +// that cannot be changed. +func ValidateNamespaceStatusUpdate(newNamespace, oldNamespace *api.Namespace) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newNamespace.ObjectMeta, &oldNamespace.ObjectMeta, field.NewPath("metadata")) + newNamespace.Spec = oldNamespace.Spec + if newNamespace.DeletionTimestamp.IsZero() { + if newNamespace.Status.Phase != api.NamespaceActive { + allErrs = append(allErrs, field.Invalid(field.NewPath("status", "Phase"), newNamespace.Status.Phase, "may only be 'Active' if `deletionTimestamp` is empty")) + } + } else { + if newNamespace.Status.Phase != api.NamespaceTerminating { + allErrs = append(allErrs, field.Invalid(field.NewPath("status", "Phase"), newNamespace.Status.Phase, "may only be 'Terminating' if `deletionTimestamp` is not empty")) + } + } + return allErrs +} + +// ValidateNamespaceFinalizeUpdate tests to see if the update is legal for an end user to make. +// newNamespace is updated with fields that cannot be changed. +func ValidateNamespaceFinalizeUpdate(newNamespace, oldNamespace *api.Namespace) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newNamespace.ObjectMeta, &oldNamespace.ObjectMeta, field.NewPath("metadata")) + + fldPath := field.NewPath("spec", "finalizers") + for i := range newNamespace.Spec.Finalizers { + idxPath := fldPath.Index(i) + allErrs = append(allErrs, validateFinalizerName(string(newNamespace.Spec.Finalizers[i]), idxPath)...) + } + newNamespace.Status = oldNamespace.Status + return allErrs +} + +// Construct lookup map of old subset IPs to NodeNames. +func updateEpAddrToNodeNameMap(ipToNodeName map[string]string, addresses []api.EndpointAddress) { + for n := range addresses { + if addresses[n].NodeName == nil { + continue + } + ipToNodeName[addresses[n].IP] = *addresses[n].NodeName + } +} + +// Build a map across all subsets of IP -> NodeName +func buildEndpointAddressNodeNameMap(subsets []api.EndpointSubset) map[string]string { + ipToNodeName := make(map[string]string) + for i := range subsets { + updateEpAddrToNodeNameMap(ipToNodeName, subsets[i].Addresses) + updateEpAddrToNodeNameMap(ipToNodeName, subsets[i].NotReadyAddresses) + } + return ipToNodeName +} + +func validateEpAddrNodeNameTransition(addr *api.EndpointAddress, ipToNodeName map[string]string, fldPath *field.Path) field.ErrorList { + errList := field.ErrorList{} + existingNodeName, found := ipToNodeName[addr.IP] + if !found { + return errList + } + if addr.NodeName == nil || *addr.NodeName == existingNodeName { + return errList + } + // NodeName entry found for this endpoint IP, but user is attempting to change NodeName + return append(errList, field.Forbidden(fldPath, fmt.Sprintf("Cannot change NodeName for %s to %s", addr.IP, *addr.NodeName))) +} + +// ValidateEndpoints tests if required fields are set. +func ValidateEndpoints(endpoints *api.Endpoints) field.ErrorList { + allErrs := ValidateObjectMeta(&endpoints.ObjectMeta, true, ValidateEndpointsName, field.NewPath("metadata")) + allErrs = append(allErrs, ValidateEndpointsSpecificAnnotations(endpoints.Annotations, field.NewPath("annotations"))...) + allErrs = append(allErrs, validateEndpointSubsets(endpoints.Subsets, []api.EndpointSubset{}, field.NewPath("subsets"))...) + return allErrs +} + +func validateEndpointSubsets(subsets []api.EndpointSubset, oldSubsets []api.EndpointSubset, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + ipToNodeName := buildEndpointAddressNodeNameMap(oldSubsets) + for i := range subsets { + ss := &subsets[i] + idxPath := fldPath.Index(i) + + if len(ss.Addresses) == 0 && len(ss.NotReadyAddresses) == 0 { + //TODO: consider adding a RequiredOneOf() error for this and similar cases + allErrs = append(allErrs, field.Required(idxPath, "must specify `addresses` or `notReadyAddresses`")) + } + if len(ss.Ports) == 0 { + allErrs = append(allErrs, field.Required(idxPath.Child("ports"), "")) + } + for addr := range ss.Addresses { + allErrs = append(allErrs, validateEndpointAddress(&ss.Addresses[addr], idxPath.Child("addresses").Index(addr), ipToNodeName)...) + } + for addr := range ss.NotReadyAddresses { + allErrs = append(allErrs, validateEndpointAddress(&ss.NotReadyAddresses[addr], idxPath.Child("notReadyAddresses").Index(addr), ipToNodeName)...) + } + for port := range ss.Ports { + allErrs = append(allErrs, validateEndpointPort(&ss.Ports[port], len(ss.Ports) > 1, idxPath.Child("ports").Index(port))...) + } + } + + return allErrs +} + +func validateEndpointAddress(address *api.EndpointAddress, fldPath *field.Path, ipToNodeName map[string]string) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsValidIP(address.IP) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("ip"), address.IP, msg)) + } + if len(address.Hostname) > 0 { + allErrs = append(allErrs, ValidateDNS1123Label(address.Hostname, fldPath.Child("hostname"))...) + } + // During endpoint update, verify that NodeName is a DNS subdomain and transition rules allow the update + if address.NodeName != nil { + for _, msg := range ValidateNodeName(*address.NodeName, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("nodeName"), *address.NodeName, msg)) + } + } + allErrs = append(allErrs, validateEpAddrNodeNameTransition(address, ipToNodeName, fldPath.Child("nodeName"))...) + if len(allErrs) > 0 { + return allErrs + } + allErrs = append(allErrs, validateNonSpecialIP(address.IP, fldPath.Child("ip"))...) + return allErrs +} + +func validateNonSpecialIP(ipAddress string, fldPath *field.Path) field.ErrorList { + // We disallow some IPs as endpoints or external-ips. Specifically, + // unspecified and loopback addresses are nonsensical and link-local + // addresses tend to be used for node-centric purposes (e.g. metadata + // service). + allErrs := field.ErrorList{} + ip := net.ParseIP(ipAddress) + if ip == nil { + allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "must be a valid IP address")) + return allErrs + } + if ip.IsUnspecified() { + allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be unspecified (0.0.0.0)")) + } + if ip.IsLoopback() { + allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the loopback range (127.0.0.0/8)")) + } + if ip.IsLinkLocalUnicast() { + allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the link-local range (169.254.0.0/16)")) + } + if ip.IsLinkLocalMulticast() { + allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the link-local multicast range (224.0.0.0/24)")) + } + return allErrs +} + +func validateEndpointPort(port *api.EndpointPort, requireName bool, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if requireName && len(port.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) + } else if len(port.Name) != 0 { + allErrs = append(allErrs, ValidateDNS1123Label(port.Name, fldPath.Child("name"))...) + } + for _, msg := range validation.IsValidPortNum(int(port.Port)) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("port"), port.Port, msg)) + } + if len(port.Protocol) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("protocol"), "")) + } else if !supportedPortProtocols.Has(string(port.Protocol)) { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("protocol"), port.Protocol, supportedPortProtocols.List())) + } + return allErrs +} + +// ValidateEndpointsUpdate tests to make sure an endpoints update can be applied. +func ValidateEndpointsUpdate(newEndpoints, oldEndpoints *api.Endpoints) field.ErrorList { + allErrs := ValidateObjectMetaUpdate(&newEndpoints.ObjectMeta, &oldEndpoints.ObjectMeta, field.NewPath("metadata")) + allErrs = append(allErrs, validateEndpointSubsets(newEndpoints.Subsets, oldEndpoints.Subsets, field.NewPath("subsets"))...) + allErrs = append(allErrs, ValidateEndpointsSpecificAnnotations(newEndpoints.Annotations, field.NewPath("annotations"))...) + return allErrs +} + +// ValidateSecurityContext ensure the security context contains valid settings +func ValidateSecurityContext(sc *api.SecurityContext, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + //this should only be true for testing since SecurityContext is defaulted by the api + if sc == nil { + return allErrs + } + + if sc.Privileged != nil { + if *sc.Privileged && !capabilities.Get().AllowPrivileged { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("privileged"), "disallowed by policy")) + } + } + + if sc.RunAsUser != nil { + if *sc.RunAsUser < 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *sc.RunAsUser, isNegativeErrorMsg)) + } + } + return allErrs +} + +func ValidatePodLogOptions(opts *api.PodLogOptions) field.ErrorList { + allErrs := field.ErrorList{} + if opts.TailLines != nil && *opts.TailLines < 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath("tailLines"), *opts.TailLines, isNegativeErrorMsg)) + } + if opts.LimitBytes != nil && *opts.LimitBytes < 1 { + allErrs = append(allErrs, field.Invalid(field.NewPath("limitBytes"), *opts.LimitBytes, "must be greater than 0")) + } + switch { + case opts.SinceSeconds != nil && opts.SinceTime != nil: + allErrs = append(allErrs, field.Forbidden(field.NewPath(""), "at most one of `sinceTime` or `sinceSeconds` may be specified")) + case opts.SinceSeconds != nil: + if *opts.SinceSeconds < 1 { + allErrs = append(allErrs, field.Invalid(field.NewPath("sinceSeconds"), *opts.SinceSeconds, "must be greater than 0")) + } + } + return allErrs +} + +// ValidateLoadBalancerStatus validates required fields on a LoadBalancerStatus +func ValidateLoadBalancerStatus(status *api.LoadBalancerStatus, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for i, ingress := range status.Ingress { + idxPath := fldPath.Child("ingress").Index(i) + if len(ingress.IP) > 0 { + if isIP := (net.ParseIP(ingress.IP) != nil); !isIP { + allErrs = append(allErrs, field.Invalid(idxPath.Child("ip"), ingress.IP, "must be a valid IP address")) + } + } + if len(ingress.Hostname) > 0 { + for _, msg := range validation.IsDNS1123Subdomain(ingress.Hostname) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("hostname"), ingress.Hostname, msg)) + } + if isIP := (net.ParseIP(ingress.Hostname) != nil); isIP { + allErrs = append(allErrs, field.Invalid(idxPath.Child("hostname"), ingress.Hostname, "must be a DNS name, not an IP address")) + } + } + } + return allErrs +} + +// TODO: remove this after we EOL the annotation that carries it. +func isValidHostnamesMap(serializedPodHostNames string) bool { + if len(serializedPodHostNames) == 0 { + return false + } + podHostNames := map[string]endpoints.HostRecord{} + err := json.Unmarshal([]byte(serializedPodHostNames), &podHostNames) + if err != nil { + return false + } + + for ip, hostRecord := range podHostNames { + if len(validation.IsDNS1123Label(hostRecord.HostName)) != 0 { + return false + } + if net.ParseIP(ip) == nil { + return false + } + } + return true +} + +func sysctlIntersection(a []api.Sysctl, b []api.Sysctl) []string { + lookup := make(map[string]struct{}, len(a)) + result := []string{} + for i := range a { + lookup[a[i].Name] = struct{}{} + } + for i := range b { + if _, found := lookup[b[i].Name]; found { + result = append(result, b[i].Name) + } + } + return result +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/api/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/1.4/pkg/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..5e8986fe --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/api/zz_generated.deepcopy.go @@ -0,0 +1,3749 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + conversion "k8s.io/client-go/1.4/pkg/conversion" + fields "k8s.io/client-go/1.4/pkg/fields" + labels "k8s.io/client-go/1.4/pkg/labels" + runtime "k8s.io/client-go/1.4/pkg/runtime" + types "k8s.io/client-go/1.4/pkg/types" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AWSElasticBlockStoreVolumeSource, InType: reflect.TypeOf(&AWSElasticBlockStoreVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Affinity, InType: reflect.TypeOf(&Affinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AttachedVolume, InType: reflect.TypeOf(&AttachedVolume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AvoidPods, InType: reflect.TypeOf(&AvoidPods{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AzureDiskVolumeSource, InType: reflect.TypeOf(&AzureDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AzureFileVolumeSource, InType: reflect.TypeOf(&AzureFileVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Binding, InType: reflect.TypeOf(&Binding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Capabilities, InType: reflect.TypeOf(&Capabilities{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_CephFSVolumeSource, InType: reflect.TypeOf(&CephFSVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_CinderVolumeSource, InType: reflect.TypeOf(&CinderVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ComponentCondition, InType: reflect.TypeOf(&ComponentCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ComponentStatus, InType: reflect.TypeOf(&ComponentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ComponentStatusList, InType: reflect.TypeOf(&ComponentStatusList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConfigMap, InType: reflect.TypeOf(&ConfigMap{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConfigMapKeySelector, InType: reflect.TypeOf(&ConfigMapKeySelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConfigMapList, InType: reflect.TypeOf(&ConfigMapList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConfigMapVolumeSource, InType: reflect.TypeOf(&ConfigMapVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Container, InType: reflect.TypeOf(&Container{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerImage, InType: reflect.TypeOf(&ContainerImage{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerPort, InType: reflect.TypeOf(&ContainerPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerState, InType: reflect.TypeOf(&ContainerState{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerStateRunning, InType: reflect.TypeOf(&ContainerStateRunning{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerStateTerminated, InType: reflect.TypeOf(&ContainerStateTerminated{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerStateWaiting, InType: reflect.TypeOf(&ContainerStateWaiting{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerStatus, InType: reflect.TypeOf(&ContainerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConversionError, InType: reflect.TypeOf(&ConversionError{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DaemonEndpoint, InType: reflect.TypeOf(&DaemonEndpoint{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeleteOptions, InType: reflect.TypeOf(&DeleteOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DownwardAPIVolumeFile, InType: reflect.TypeOf(&DownwardAPIVolumeFile{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DownwardAPIVolumeSource, InType: reflect.TypeOf(&DownwardAPIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EmptyDirVolumeSource, InType: reflect.TypeOf(&EmptyDirVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EndpointAddress, InType: reflect.TypeOf(&EndpointAddress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EndpointPort, InType: reflect.TypeOf(&EndpointPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EndpointSubset, InType: reflect.TypeOf(&EndpointSubset{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Endpoints, InType: reflect.TypeOf(&Endpoints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EndpointsList, InType: reflect.TypeOf(&EndpointsList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EnvVar, InType: reflect.TypeOf(&EnvVar{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EnvVarSource, InType: reflect.TypeOf(&EnvVarSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Event, InType: reflect.TypeOf(&Event{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EventList, InType: reflect.TypeOf(&EventList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EventSource, InType: reflect.TypeOf(&EventSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ExecAction, InType: reflect.TypeOf(&ExecAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ExportOptions, InType: reflect.TypeOf(&ExportOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_FCVolumeSource, InType: reflect.TypeOf(&FCVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_FlexVolumeSource, InType: reflect.TypeOf(&FlexVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_FlockerVolumeSource, InType: reflect.TypeOf(&FlockerVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GCEPersistentDiskVolumeSource, InType: reflect.TypeOf(&GCEPersistentDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GitRepoVolumeSource, InType: reflect.TypeOf(&GitRepoVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GlusterfsVolumeSource, InType: reflect.TypeOf(&GlusterfsVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_HTTPGetAction, InType: reflect.TypeOf(&HTTPGetAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_HTTPHeader, InType: reflect.TypeOf(&HTTPHeader{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Handler, InType: reflect.TypeOf(&Handler{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_HostPathVolumeSource, InType: reflect.TypeOf(&HostPathVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ISCSIVolumeSource, InType: reflect.TypeOf(&ISCSIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_KeyToPath, InType: reflect.TypeOf(&KeyToPath{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Lifecycle, InType: reflect.TypeOf(&Lifecycle{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LimitRange, InType: reflect.TypeOf(&LimitRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LimitRangeItem, InType: reflect.TypeOf(&LimitRangeItem{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LimitRangeList, InType: reflect.TypeOf(&LimitRangeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LimitRangeSpec, InType: reflect.TypeOf(&LimitRangeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_List, InType: reflect.TypeOf(&List{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ListOptions, InType: reflect.TypeOf(&ListOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LoadBalancerIngress, InType: reflect.TypeOf(&LoadBalancerIngress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LoadBalancerStatus, InType: reflect.TypeOf(&LoadBalancerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LocalObjectReference, InType: reflect.TypeOf(&LocalObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NFSVolumeSource, InType: reflect.TypeOf(&NFSVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Namespace, InType: reflect.TypeOf(&Namespace{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NamespaceList, InType: reflect.TypeOf(&NamespaceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NamespaceSpec, InType: reflect.TypeOf(&NamespaceSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NamespaceStatus, InType: reflect.TypeOf(&NamespaceStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Node, InType: reflect.TypeOf(&Node{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeAddress, InType: reflect.TypeOf(&NodeAddress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeAffinity, InType: reflect.TypeOf(&NodeAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeCondition, InType: reflect.TypeOf(&NodeCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeDaemonEndpoints, InType: reflect.TypeOf(&NodeDaemonEndpoints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeList, InType: reflect.TypeOf(&NodeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeProxyOptions, InType: reflect.TypeOf(&NodeProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeResources, InType: reflect.TypeOf(&NodeResources{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSelector, InType: reflect.TypeOf(&NodeSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSelectorRequirement, InType: reflect.TypeOf(&NodeSelectorRequirement{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSelectorTerm, InType: reflect.TypeOf(&NodeSelectorTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSpec, InType: reflect.TypeOf(&NodeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeStatus, InType: reflect.TypeOf(&NodeStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSystemInfo, InType: reflect.TypeOf(&NodeSystemInfo{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ObjectFieldSelector, InType: reflect.TypeOf(&ObjectFieldSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ObjectMeta, InType: reflect.TypeOf(&ObjectMeta{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ObjectReference, InType: reflect.TypeOf(&ObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OwnerReference, InType: reflect.TypeOf(&OwnerReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolume, InType: reflect.TypeOf(&PersistentVolume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaim, InType: reflect.TypeOf(&PersistentVolumeClaim{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaimList, InType: reflect.TypeOf(&PersistentVolumeClaimList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaimSpec, InType: reflect.TypeOf(&PersistentVolumeClaimSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaimStatus, InType: reflect.TypeOf(&PersistentVolumeClaimStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaimVolumeSource, InType: reflect.TypeOf(&PersistentVolumeClaimVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeList, InType: reflect.TypeOf(&PersistentVolumeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeSource, InType: reflect.TypeOf(&PersistentVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeSpec, InType: reflect.TypeOf(&PersistentVolumeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeStatus, InType: reflect.TypeOf(&PersistentVolumeStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Pod, InType: reflect.TypeOf(&Pod{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodAffinity, InType: reflect.TypeOf(&PodAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodAffinityTerm, InType: reflect.TypeOf(&PodAffinityTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodAntiAffinity, InType: reflect.TypeOf(&PodAntiAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodAttachOptions, InType: reflect.TypeOf(&PodAttachOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodCondition, InType: reflect.TypeOf(&PodCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodExecOptions, InType: reflect.TypeOf(&PodExecOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodList, InType: reflect.TypeOf(&PodList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodLogOptions, InType: reflect.TypeOf(&PodLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodProxyOptions, InType: reflect.TypeOf(&PodProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityContext, InType: reflect.TypeOf(&PodSecurityContext{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSignature, InType: reflect.TypeOf(&PodSignature{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSpec, InType: reflect.TypeOf(&PodSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodStatus, InType: reflect.TypeOf(&PodStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodStatusResult, InType: reflect.TypeOf(&PodStatusResult{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplate, InType: reflect.TypeOf(&PodTemplate{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplateList, InType: reflect.TypeOf(&PodTemplateList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplateSpec, InType: reflect.TypeOf(&PodTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Preconditions, InType: reflect.TypeOf(&Preconditions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PreferAvoidPodsEntry, InType: reflect.TypeOf(&PreferAvoidPodsEntry{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PreferredSchedulingTerm, InType: reflect.TypeOf(&PreferredSchedulingTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Probe, InType: reflect.TypeOf(&Probe{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_QuobyteVolumeSource, InType: reflect.TypeOf(&QuobyteVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RBDVolumeSource, InType: reflect.TypeOf(&RBDVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RangeAllocation, InType: reflect.TypeOf(&RangeAllocation{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ReplicationController, InType: reflect.TypeOf(&ReplicationController{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ReplicationControllerList, InType: reflect.TypeOf(&ReplicationControllerList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ReplicationControllerSpec, InType: reflect.TypeOf(&ReplicationControllerSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ReplicationControllerStatus, InType: reflect.TypeOf(&ReplicationControllerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceFieldSelector, InType: reflect.TypeOf(&ResourceFieldSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuota, InType: reflect.TypeOf(&ResourceQuota{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuotaList, InType: reflect.TypeOf(&ResourceQuotaList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuotaSpec, InType: reflect.TypeOf(&ResourceQuotaSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuotaStatus, InType: reflect.TypeOf(&ResourceQuotaStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceRequirements, InType: reflect.TypeOf(&ResourceRequirements{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SELinuxOptions, InType: reflect.TypeOf(&SELinuxOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Secret, InType: reflect.TypeOf(&Secret{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretKeySelector, InType: reflect.TypeOf(&SecretKeySelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretList, InType: reflect.TypeOf(&SecretList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretVolumeSource, InType: reflect.TypeOf(&SecretVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecurityContext, InType: reflect.TypeOf(&SecurityContext{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SerializedReference, InType: reflect.TypeOf(&SerializedReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Service, InType: reflect.TypeOf(&Service{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceAccount, InType: reflect.TypeOf(&ServiceAccount{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceAccountList, InType: reflect.TypeOf(&ServiceAccountList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceList, InType: reflect.TypeOf(&ServiceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServicePort, InType: reflect.TypeOf(&ServicePort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceProxyOptions, InType: reflect.TypeOf(&ServiceProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceSpec, InType: reflect.TypeOf(&ServiceSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceStatus, InType: reflect.TypeOf(&ServiceStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Sysctl, InType: reflect.TypeOf(&Sysctl{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TCPSocketAction, InType: reflect.TypeOf(&TCPSocketAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Taint, InType: reflect.TypeOf(&Taint{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Toleration, InType: reflect.TypeOf(&Toleration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Volume, InType: reflect.TypeOf(&Volume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_VolumeMount, InType: reflect.TypeOf(&VolumeMount{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_VolumeSource, InType: reflect.TypeOf(&VolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_VsphereVirtualDiskVolumeSource, InType: reflect.TypeOf(&VsphereVirtualDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_WeightedPodAffinityTerm, InType: reflect.TypeOf(&WeightedPodAffinityTerm{})}, + ) +} + +func DeepCopy_api_AWSElasticBlockStoreVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AWSElasticBlockStoreVolumeSource) + out := out.(*AWSElasticBlockStoreVolumeSource) + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_Affinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Affinity) + out := out.(*Affinity) + if in.NodeAffinity != nil { + in, out := &in.NodeAffinity, &out.NodeAffinity + *out = new(NodeAffinity) + if err := DeepCopy_api_NodeAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.NodeAffinity = nil + } + if in.PodAffinity != nil { + in, out := &in.PodAffinity, &out.PodAffinity + *out = new(PodAffinity) + if err := DeepCopy_api_PodAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.PodAffinity = nil + } + if in.PodAntiAffinity != nil { + in, out := &in.PodAntiAffinity, &out.PodAntiAffinity + *out = new(PodAntiAffinity) + if err := DeepCopy_api_PodAntiAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.PodAntiAffinity = nil + } + return nil + } +} + +func DeepCopy_api_AttachedVolume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AttachedVolume) + out := out.(*AttachedVolume) + out.Name = in.Name + out.DevicePath = in.DevicePath + return nil + } +} + +func DeepCopy_api_AvoidPods(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AvoidPods) + out := out.(*AvoidPods) + if in.PreferAvoidPods != nil { + in, out := &in.PreferAvoidPods, &out.PreferAvoidPods + *out = make([]PreferAvoidPodsEntry, len(*in)) + for i := range *in { + if err := DeepCopy_api_PreferAvoidPodsEntry(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferAvoidPods = nil + } + return nil + } +} + +func DeepCopy_api_AzureDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AzureDiskVolumeSource) + out := out.(*AzureDiskVolumeSource) + out.DiskName = in.DiskName + out.DataDiskURI = in.DataDiskURI + if in.CachingMode != nil { + in, out := &in.CachingMode, &out.CachingMode + *out = new(AzureDataDiskCachingMode) + **out = **in + } else { + out.CachingMode = nil + } + if in.FSType != nil { + in, out := &in.FSType, &out.FSType + *out = new(string) + **out = **in + } else { + out.FSType = nil + } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } else { + out.ReadOnly = nil + } + return nil + } +} + +func DeepCopy_api_AzureFileVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AzureFileVolumeSource) + out := out.(*AzureFileVolumeSource) + out.SecretName = in.SecretName + out.ShareName = in.ShareName + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_Binding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Binding) + out := out.(*Binding) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Target = in.Target + return nil + } +} + +func DeepCopy_api_Capabilities(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Capabilities) + out := out.(*Capabilities) + if in.Add != nil { + in, out := &in.Add, &out.Add + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Add = nil + } + if in.Drop != nil { + in, out := &in.Drop, &out.Drop + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Drop = nil + } + return nil + } +} + +func DeepCopy_api_CephFSVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CephFSVolumeSource) + out := out.(*CephFSVolumeSource) + if in.Monitors != nil { + in, out := &in.Monitors, &out.Monitors + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Monitors = nil + } + out.Path = in.Path + out.User = in.User + out.SecretFile = in.SecretFile + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_CinderVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CinderVolumeSource) + out := out.(*CinderVolumeSource) + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_ComponentCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentCondition) + out := out.(*ComponentCondition) + out.Type = in.Type + out.Status = in.Status + out.Message = in.Message + out.Error = in.Error + return nil + } +} + +func DeepCopy_api_ComponentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentStatus) + out := out.(*ComponentStatus) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ComponentCondition, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Conditions = nil + } + return nil + } +} + +func DeepCopy_api_ComponentStatusList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentStatusList) + out := out.(*ComponentStatusList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ComponentStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ComponentStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ConfigMap(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMap) + out := out.(*ConfigMap) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_api_ConfigMapKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapKeySelector) + out := out.(*ConfigMapKeySelector) + out.LocalObjectReference = in.LocalObjectReference + out.Key = in.Key + return nil + } +} + +func DeepCopy_api_ConfigMapList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapList) + out := out.(*ConfigMapList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ConfigMap, len(*in)) + for i := range *in { + if err := DeepCopy_api_ConfigMap(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ConfigMapVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapVolumeSource) + out := out.(*ConfigMapVolumeSource) + out.LocalObjectReference = in.LocalObjectReference + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := DeepCopy_api_KeyToPath(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_api_Container(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Container) + out := out.(*Container) + out.Name = in.Name + out.Image = in.Image + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Args = nil + } + out.WorkingDir = in.WorkingDir + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ContainerPort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]EnvVar, len(*in)) + for i := range *in { + if err := DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + if err := DeepCopy_api_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + if in.VolumeMounts != nil { + in, out := &in.VolumeMounts, &out.VolumeMounts + *out = make([]VolumeMount, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumeMounts = nil + } + if in.LivenessProbe != nil { + in, out := &in.LivenessProbe, &out.LivenessProbe + *out = new(Probe) + if err := DeepCopy_api_Probe(*in, *out, c); err != nil { + return err + } + } else { + out.LivenessProbe = nil + } + if in.ReadinessProbe != nil { + in, out := &in.ReadinessProbe, &out.ReadinessProbe + *out = new(Probe) + if err := DeepCopy_api_Probe(*in, *out, c); err != nil { + return err + } + } else { + out.ReadinessProbe = nil + } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(Lifecycle) + if err := DeepCopy_api_Lifecycle(*in, *out, c); err != nil { + return err + } + } else { + out.Lifecycle = nil + } + out.TerminationMessagePath = in.TerminationMessagePath + out.ImagePullPolicy = in.ImagePullPolicy + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(SecurityContext) + if err := DeepCopy_api_SecurityContext(*in, *out, c); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + out.Stdin = in.Stdin + out.StdinOnce = in.StdinOnce + out.TTY = in.TTY + return nil + } +} + +func DeepCopy_api_ContainerImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerImage) + out := out.(*ContainerImage) + if in.Names != nil { + in, out := &in.Names, &out.Names + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Names = nil + } + out.SizeBytes = in.SizeBytes + return nil + } +} + +func DeepCopy_api_ContainerPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerPort) + out := out.(*ContainerPort) + out.Name = in.Name + out.HostPort = in.HostPort + out.ContainerPort = in.ContainerPort + out.Protocol = in.Protocol + out.HostIP = in.HostIP + return nil + } +} + +func DeepCopy_api_ContainerState(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerState) + out := out.(*ContainerState) + if in.Waiting != nil { + in, out := &in.Waiting, &out.Waiting + *out = new(ContainerStateWaiting) + **out = **in + } else { + out.Waiting = nil + } + if in.Running != nil { + in, out := &in.Running, &out.Running + *out = new(ContainerStateRunning) + if err := DeepCopy_api_ContainerStateRunning(*in, *out, c); err != nil { + return err + } + } else { + out.Running = nil + } + if in.Terminated != nil { + in, out := &in.Terminated, &out.Terminated + *out = new(ContainerStateTerminated) + if err := DeepCopy_api_ContainerStateTerminated(*in, *out, c); err != nil { + return err + } + } else { + out.Terminated = nil + } + return nil + } +} + +func DeepCopy_api_ContainerStateRunning(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateRunning) + out := out.(*ContainerStateRunning) + out.StartedAt = in.StartedAt.DeepCopy() + return nil + } +} + +func DeepCopy_api_ContainerStateTerminated(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateTerminated) + out := out.(*ContainerStateTerminated) + out.ExitCode = in.ExitCode + out.Signal = in.Signal + out.Reason = in.Reason + out.Message = in.Message + out.StartedAt = in.StartedAt.DeepCopy() + out.FinishedAt = in.FinishedAt.DeepCopy() + out.ContainerID = in.ContainerID + return nil + } +} + +func DeepCopy_api_ContainerStateWaiting(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateWaiting) + out := out.(*ContainerStateWaiting) + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_ContainerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStatus) + out := out.(*ContainerStatus) + out.Name = in.Name + if err := DeepCopy_api_ContainerState(&in.State, &out.State, c); err != nil { + return err + } + if err := DeepCopy_api_ContainerState(&in.LastTerminationState, &out.LastTerminationState, c); err != nil { + return err + } + out.Ready = in.Ready + out.RestartCount = in.RestartCount + out.Image = in.Image + out.ImageID = in.ImageID + out.ContainerID = in.ContainerID + return nil + } +} + +func DeepCopy_api_ConversionError(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConversionError) + out := out.(*ConversionError) + if in.In == nil { + out.In = nil + } else if newVal, err := c.DeepCopy(&in.In); err != nil { + return err + } else { + out.In = *newVal.(*interface{}) + } + if in.Out == nil { + out.Out = nil + } else if newVal, err := c.DeepCopy(&in.Out); err != nil { + return err + } else { + out.Out = *newVal.(*interface{}) + } + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_DaemonEndpoint(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonEndpoint) + out := out.(*DaemonEndpoint) + out.Port = in.Port + return nil + } +} + +func DeepCopy_api_DeleteOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeleteOptions) + out := out.(*DeleteOptions) + out.TypeMeta = in.TypeMeta + if in.GracePeriodSeconds != nil { + in, out := &in.GracePeriodSeconds, &out.GracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.GracePeriodSeconds = nil + } + if in.Preconditions != nil { + in, out := &in.Preconditions, &out.Preconditions + *out = new(Preconditions) + if err := DeepCopy_api_Preconditions(*in, *out, c); err != nil { + return err + } + } else { + out.Preconditions = nil + } + if in.OrphanDependents != nil { + in, out := &in.OrphanDependents, &out.OrphanDependents + *out = new(bool) + **out = **in + } else { + out.OrphanDependents = nil + } + return nil + } +} + +func DeepCopy_api_DownwardAPIVolumeFile(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DownwardAPIVolumeFile) + out := out.(*DownwardAPIVolumeFile) + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_api_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_api_DownwardAPIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DownwardAPIVolumeSource) + out := out.(*DownwardAPIVolumeSource) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := DeepCopy_api_DownwardAPIVolumeFile(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_api_EmptyDirVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EmptyDirVolumeSource) + out := out.(*EmptyDirVolumeSource) + out.Medium = in.Medium + return nil + } +} + +func DeepCopy_api_EndpointAddress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointAddress) + out := out.(*EndpointAddress) + out.IP = in.IP + out.Hostname = in.Hostname + if in.NodeName != nil { + in, out := &in.NodeName, &out.NodeName + *out = new(string) + **out = **in + } else { + out.NodeName = nil + } + if in.TargetRef != nil { + in, out := &in.TargetRef, &out.TargetRef + *out = new(ObjectReference) + **out = **in + } else { + out.TargetRef = nil + } + return nil + } +} + +func DeepCopy_api_EndpointPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointPort) + out := out.(*EndpointPort) + out.Name = in.Name + out.Port = in.Port + out.Protocol = in.Protocol + return nil + } +} + +func DeepCopy_api_EndpointSubset(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointSubset) + out := out.(*EndpointSubset) + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := DeepCopy_api_EndpointAddress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Addresses = nil + } + if in.NotReadyAddresses != nil { + in, out := &in.NotReadyAddresses, &out.NotReadyAddresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := DeepCopy_api_EndpointAddress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.NotReadyAddresses = nil + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]EndpointPort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + return nil + } +} + +func DeepCopy_api_Endpoints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Endpoints) + out := out.(*Endpoints) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subsets != nil { + in, out := &in.Subsets, &out.Subsets + *out = make([]EndpointSubset, len(*in)) + for i := range *in { + if err := DeepCopy_api_EndpointSubset(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Subsets = nil + } + return nil + } +} + +func DeepCopy_api_EndpointsList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointsList) + out := out.(*EndpointsList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Endpoints, len(*in)) + for i := range *in { + if err := DeepCopy_api_Endpoints(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_EnvVar(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EnvVar) + out := out.(*EnvVar) + out.Name = in.Name + out.Value = in.Value + if in.ValueFrom != nil { + in, out := &in.ValueFrom, &out.ValueFrom + *out = new(EnvVarSource) + if err := DeepCopy_api_EnvVarSource(*in, *out, c); err != nil { + return err + } + } else { + out.ValueFrom = nil + } + return nil + } +} + +func DeepCopy_api_EnvVarSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EnvVarSource) + out := out.(*EnvVarSource) + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_api_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.ConfigMapKeyRef != nil { + in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef + *out = new(ConfigMapKeySelector) + **out = **in + } else { + out.ConfigMapKeyRef = nil + } + if in.SecretKeyRef != nil { + in, out := &in.SecretKeyRef, &out.SecretKeyRef + *out = new(SecretKeySelector) + **out = **in + } else { + out.SecretKeyRef = nil + } + return nil + } +} + +func DeepCopy_api_Event(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Event) + out := out.(*Event) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.InvolvedObject = in.InvolvedObject + out.Reason = in.Reason + out.Message = in.Message + out.Source = in.Source + out.FirstTimestamp = in.FirstTimestamp.DeepCopy() + out.LastTimestamp = in.LastTimestamp.DeepCopy() + out.Count = in.Count + out.Type = in.Type + return nil + } +} + +func DeepCopy_api_EventList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EventList) + out := out.(*EventList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Event, len(*in)) + for i := range *in { + if err := DeepCopy_api_Event(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_EventSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EventSource) + out := out.(*EventSource) + out.Component = in.Component + out.Host = in.Host + return nil + } +} + +func DeepCopy_api_ExecAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExecAction) + out := out.(*ExecAction) + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_api_ExportOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExportOptions) + out := out.(*ExportOptions) + out.TypeMeta = in.TypeMeta + out.Export = in.Export + out.Exact = in.Exact + return nil + } +} + +func DeepCopy_api_FCVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FCVolumeSource) + out := out.(*FCVolumeSource) + if in.TargetWWNs != nil { + in, out := &in.TargetWWNs, &out.TargetWWNs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.TargetWWNs = nil + } + if in.Lun != nil { + in, out := &in.Lun, &out.Lun + *out = new(int32) + **out = **in + } else { + out.Lun = nil + } + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_FlexVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FlexVolumeSource) + out := out.(*FlexVolumeSource) + out.Driver = in.Driver + out.FSType = in.FSType + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Options = nil + } + return nil + } +} + +func DeepCopy_api_FlockerVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FlockerVolumeSource) + out := out.(*FlockerVolumeSource) + out.DatasetName = in.DatasetName + return nil + } +} + +func DeepCopy_api_GCEPersistentDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GCEPersistentDiskVolumeSource) + out := out.(*GCEPersistentDiskVolumeSource) + out.PDName = in.PDName + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_GitRepoVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitRepoVolumeSource) + out := out.(*GitRepoVolumeSource) + out.Repository = in.Repository + out.Revision = in.Revision + out.Directory = in.Directory + return nil + } +} + +func DeepCopy_api_GlusterfsVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GlusterfsVolumeSource) + out := out.(*GlusterfsVolumeSource) + out.EndpointsName = in.EndpointsName + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_HTTPGetAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPGetAction) + out := out.(*HTTPGetAction) + out.Path = in.Path + out.Port = in.Port + out.Host = in.Host + out.Scheme = in.Scheme + if in.HTTPHeaders != nil { + in, out := &in.HTTPHeaders, &out.HTTPHeaders + *out = make([]HTTPHeader, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.HTTPHeaders = nil + } + return nil + } +} + +func DeepCopy_api_HTTPHeader(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPHeader) + out := out.(*HTTPHeader) + out.Name = in.Name + out.Value = in.Value + return nil + } +} + +func DeepCopy_api_Handler(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Handler) + out := out.(*Handler) + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + *out = new(ExecAction) + if err := DeepCopy_api_ExecAction(*in, *out, c); err != nil { + return err + } + } else { + out.Exec = nil + } + if in.HTTPGet != nil { + in, out := &in.HTTPGet, &out.HTTPGet + *out = new(HTTPGetAction) + if err := DeepCopy_api_HTTPGetAction(*in, *out, c); err != nil { + return err + } + } else { + out.HTTPGet = nil + } + if in.TCPSocket != nil { + in, out := &in.TCPSocket, &out.TCPSocket + *out = new(TCPSocketAction) + **out = **in + } else { + out.TCPSocket = nil + } + return nil + } +} + +func DeepCopy_api_HostPathVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostPathVolumeSource) + out := out.(*HostPathVolumeSource) + out.Path = in.Path + return nil + } +} + +func DeepCopy_api_ISCSIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ISCSIVolumeSource) + out := out.(*ISCSIVolumeSource) + out.TargetPortal = in.TargetPortal + out.IQN = in.IQN + out.Lun = in.Lun + out.ISCSIInterface = in.ISCSIInterface + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_KeyToPath(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KeyToPath) + out := out.(*KeyToPath) + out.Key = in.Key + out.Path = in.Path + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_api_Lifecycle(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Lifecycle) + out := out.(*Lifecycle) + if in.PostStart != nil { + in, out := &in.PostStart, &out.PostStart + *out = new(Handler) + if err := DeepCopy_api_Handler(*in, *out, c); err != nil { + return err + } + } else { + out.PostStart = nil + } + if in.PreStop != nil { + in, out := &in.PreStop, &out.PreStop + *out = new(Handler) + if err := DeepCopy_api_Handler(*in, *out, c); err != nil { + return err + } + } else { + out.PreStop = nil + } + return nil + } +} + +func DeepCopy_api_LimitRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRange) + out := out.(*LimitRange) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_LimitRangeSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_LimitRangeItem(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeItem) + out := out.(*LimitRangeItem) + out.Type = in.Type + if in.Max != nil { + in, out := &in.Max, &out.Max + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Max = nil + } + if in.Min != nil { + in, out := &in.Min, &out.Min + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Min = nil + } + if in.Default != nil { + in, out := &in.Default, &out.Default + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Default = nil + } + if in.DefaultRequest != nil { + in, out := &in.DefaultRequest, &out.DefaultRequest + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.DefaultRequest = nil + } + if in.MaxLimitRequestRatio != nil { + in, out := &in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.MaxLimitRequestRatio = nil + } + return nil + } +} + +func DeepCopy_api_LimitRangeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeList) + out := out.(*LimitRangeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]LimitRange, len(*in)) + for i := range *in { + if err := DeepCopy_api_LimitRange(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_LimitRangeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeSpec) + out := out.(*LimitRangeSpec) + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make([]LimitRangeItem, len(*in)) + for i := range *in { + if err := DeepCopy_api_LimitRangeItem(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Limits = nil + } + return nil + } +} + +func DeepCopy_api_List(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*List) + out := out.(*List) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]runtime.Object, len(*in)) + for i := range *in { + if newVal, err := c.DeepCopy(&(*in)[i]); err != nil { + return err + } else { + (*out)[i] = *newVal.(*runtime.Object) + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ListOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ListOptions) + out := out.(*ListOptions) + out.TypeMeta = in.TypeMeta + if in.LabelSelector == nil { + out.LabelSelector = nil + } else if newVal, err := c.DeepCopy(&in.LabelSelector); err != nil { + return err + } else { + out.LabelSelector = *newVal.(*labels.Selector) + } + if in.FieldSelector == nil { + out.FieldSelector = nil + } else if newVal, err := c.DeepCopy(&in.FieldSelector); err != nil { + return err + } else { + out.FieldSelector = *newVal.(*fields.Selector) + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + return nil + } +} + +func DeepCopy_api_LoadBalancerIngress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LoadBalancerIngress) + out := out.(*LoadBalancerIngress) + out.IP = in.IP + out.Hostname = in.Hostname + return nil + } +} + +func DeepCopy_api_LoadBalancerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LoadBalancerStatus) + out := out.(*LoadBalancerStatus) + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]LoadBalancerIngress, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ingress = nil + } + return nil + } +} + +func DeepCopy_api_LocalObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LocalObjectReference) + out := out.(*LocalObjectReference) + out.Name = in.Name + return nil + } +} + +func DeepCopy_api_NFSVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NFSVolumeSource) + out := out.(*NFSVolumeSource) + out.Server = in.Server + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_Namespace(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Namespace) + out := out.(*Namespace) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_NamespaceSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_api_NamespaceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceList) + out := out.(*NamespaceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Namespace, len(*in)) + for i := range *in { + if err := DeepCopy_api_Namespace(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_NamespaceSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceSpec) + out := out.(*NamespaceSpec) + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]FinalizerName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Finalizers = nil + } + return nil + } +} + +func DeepCopy_api_NamespaceStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceStatus) + out := out.(*NamespaceStatus) + out.Phase = in.Phase + return nil + } +} + +func DeepCopy_api_Node(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Node) + out := out.(*Node) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_api_NodeStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_NodeAddress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeAddress) + out := out.(*NodeAddress) + out.Type = in.Type + out.Address = in.Address + return nil + } +} + +func DeepCopy_api_NodeAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeAffinity) + out := out.(*NodeAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = new(NodeSelector) + if err := DeepCopy_api_NodeSelector(*in, *out, c); err != nil { + return err + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]PreferredSchedulingTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_PreferredSchedulingTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_api_NodeCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeCondition) + out := out.(*NodeCondition) + out.Type = in.Type + out.Status = in.Status + out.LastHeartbeatTime = in.LastHeartbeatTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_NodeDaemonEndpoints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeDaemonEndpoints) + out := out.(*NodeDaemonEndpoints) + out.KubeletEndpoint = in.KubeletEndpoint + return nil + } +} + +func DeepCopy_api_NodeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeList) + out := out.(*NodeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Node, len(*in)) + for i := range *in { + if err := DeepCopy_api_Node(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_NodeProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeProxyOptions) + out := out.(*NodeProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_api_NodeResources(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeResources) + out := out.(*NodeResources) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + return nil + } +} + +func DeepCopy_api_NodeSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelector) + out := out.(*NodeSelector) + if in.NodeSelectorTerms != nil { + in, out := &in.NodeSelectorTerms, &out.NodeSelectorTerms + *out = make([]NodeSelectorTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_NodeSelectorTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.NodeSelectorTerms = nil + } + return nil + } +} + +func DeepCopy_api_NodeSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelectorRequirement) + out := out.(*NodeSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} + +func DeepCopy_api_NodeSelectorTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelectorTerm) + out := out.(*NodeSelectorTerm) + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]NodeSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_api_NodeSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_api_NodeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSpec) + out := out.(*NodeSpec) + out.PodCIDR = in.PodCIDR + out.ExternalID = in.ExternalID + out.ProviderID = in.ProviderID + out.Unschedulable = in.Unschedulable + return nil + } +} + +func DeepCopy_api_NodeStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeStatus) + out := out.(*NodeStatus) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + if in.Allocatable != nil { + in, out := &in.Allocatable, &out.Allocatable + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Allocatable = nil + } + out.Phase = in.Phase + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]NodeCondition, len(*in)) + for i := range *in { + if err := DeepCopy_api_NodeCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]NodeAddress, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Addresses = nil + } + out.DaemonEndpoints = in.DaemonEndpoints + out.NodeInfo = in.NodeInfo + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ContainerImage, len(*in)) + for i := range *in { + if err := DeepCopy_api_ContainerImage(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + if in.VolumesInUse != nil { + in, out := &in.VolumesInUse, &out.VolumesInUse + *out = make([]UniqueVolumeName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumesInUse = nil + } + if in.VolumesAttached != nil { + in, out := &in.VolumesAttached, &out.VolumesAttached + *out = make([]AttachedVolume, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumesAttached = nil + } + return nil + } +} + +func DeepCopy_api_NodeSystemInfo(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSystemInfo) + out := out.(*NodeSystemInfo) + out.MachineID = in.MachineID + out.SystemUUID = in.SystemUUID + out.BootID = in.BootID + out.KernelVersion = in.KernelVersion + out.OSImage = in.OSImage + out.ContainerRuntimeVersion = in.ContainerRuntimeVersion + out.KubeletVersion = in.KubeletVersion + out.KubeProxyVersion = in.KubeProxyVersion + out.OperatingSystem = in.OperatingSystem + out.Architecture = in.Architecture + return nil + } +} + +func DeepCopy_api_ObjectFieldSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectFieldSelector) + out := out.(*ObjectFieldSelector) + out.APIVersion = in.APIVersion + out.FieldPath = in.FieldPath + return nil + } +} + +func DeepCopy_api_ObjectMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectMeta) + out := out.(*ObjectMeta) + out.Name = in.Name + out.GenerateName = in.GenerateName + out.Namespace = in.Namespace + out.SelfLink = in.SelfLink + out.UID = in.UID + out.ResourceVersion = in.ResourceVersion + out.Generation = in.Generation + out.CreationTimestamp = in.CreationTimestamp.DeepCopy() + if in.DeletionTimestamp != nil { + in, out := &in.DeletionTimestamp, &out.DeletionTimestamp + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.DeletionTimestamp = nil + } + if in.DeletionGracePeriodSeconds != nil { + in, out := &in.DeletionGracePeriodSeconds, &out.DeletionGracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.DeletionGracePeriodSeconds = nil + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Labels = nil + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Annotations = nil + } + if in.OwnerReferences != nil { + in, out := &in.OwnerReferences, &out.OwnerReferences + *out = make([]OwnerReference, len(*in)) + for i := range *in { + if err := DeepCopy_api_OwnerReference(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.OwnerReferences = nil + } + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Finalizers = nil + } + out.ClusterName = in.ClusterName + return nil + } +} + +func DeepCopy_api_ObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectReference) + out := out.(*ObjectReference) + out.Kind = in.Kind + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = in.UID + out.APIVersion = in.APIVersion + out.ResourceVersion = in.ResourceVersion + out.FieldPath = in.FieldPath + return nil + } +} + +func DeepCopy_api_OwnerReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OwnerReference) + out := out.(*OwnerReference) + out.APIVersion = in.APIVersion + out.Kind = in.Kind + out.Name = in.Name + out.UID = in.UID + if in.Controller != nil { + in, out := &in.Controller, &out.Controller + *out = new(bool) + **out = **in + } else { + out.Controller = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolume) + out := out.(*PersistentVolume) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PersistentVolumeSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaim(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaim) + out := out.(*PersistentVolumeClaim) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PersistentVolumeClaimSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_PersistentVolumeClaimStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaimList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimList) + out := out.(*PersistentVolumeClaimList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolumeClaim, len(*in)) + for i := range *in { + if err := DeepCopy_api_PersistentVolumeClaim(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaimSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimSpec) + out := out.(*PersistentVolumeClaimSpec) + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := DeepCopy_api_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + out.VolumeName = in.VolumeName + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaimStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimStatus) + out := out.(*PersistentVolumeClaimStatus) + out.Phase = in.Phase + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaimVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimVolumeSource) + out := out.(*PersistentVolumeClaimVolumeSource) + out.ClaimName = in.ClaimName + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_PersistentVolumeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeList) + out := out.(*PersistentVolumeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolume, len(*in)) + for i := range *in { + if err := DeepCopy_api_PersistentVolume(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeSource) + out := out.(*PersistentVolumeSource) + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + **out = **in + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in + } else { + out.AWSElasticBlockStore = nil + } + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + **out = **in + } else { + out.HostPath = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + **out = **in + } else { + out.Glusterfs = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + **out = **in + } else { + out.NFS = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := DeepCopy_api_RBDVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + **out = **in + } else { + out.Quobyte = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + **out = **in + } else { + out.ISCSI = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := DeepCopy_api_FlexVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + **out = **in + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := DeepCopy_api_CephFSVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := DeepCopy_api_FCVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FC = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + **out = **in + } else { + out.Flocker = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + **out = **in + } else { + out.AzureFile = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in + } else { + out.VsphereVolume = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := DeepCopy_api_AzureDiskVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeSpec) + out := out.(*PersistentVolumeSpec) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + if err := DeepCopy_api_PersistentVolumeSource(&in.PersistentVolumeSource, &out.PersistentVolumeSource, c); err != nil { + return err + } + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.ClaimRef != nil { + in, out := &in.ClaimRef, &out.ClaimRef + *out = new(ObjectReference) + **out = **in + } else { + out.ClaimRef = nil + } + out.PersistentVolumeReclaimPolicy = in.PersistentVolumeReclaimPolicy + return nil + } +} + +func DeepCopy_api_PersistentVolumeStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeStatus) + out := out.(*PersistentVolumeStatus) + out.Phase = in.Phase + out.Message = in.Message + out.Reason = in.Reason + return nil + } +} + +func DeepCopy_api_Pod(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Pod) + out := out.(*Pod) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PodSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_PodStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAffinity) + out := out.(*PodAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_PodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_api_PodAffinityTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAffinityTerm) + out := out.(*PodAffinityTerm) + if in.LabelSelector != nil { + in, out := &in.LabelSelector, &out.LabelSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.LabelSelector = nil + } + if in.Namespaces != nil { + in, out := &in.Namespaces, &out.Namespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Namespaces = nil + } + out.TopologyKey = in.TopologyKey + return nil + } +} + +func DeepCopy_api_PodAntiAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAntiAffinity) + out := out.(*PodAntiAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_PodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_api_PodAttachOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAttachOptions) + out := out.(*PodAttachOptions) + out.TypeMeta = in.TypeMeta + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + return nil + } +} + +func DeepCopy_api_PodCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodCondition) + out := out.(*PodCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_PodExecOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodExecOptions) + out := out.(*PodExecOptions) + out.TypeMeta = in.TypeMeta + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_api_PodList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodList) + out := out.(*PodList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Pod, len(*in)) + for i := range *in { + if err := DeepCopy_api_Pod(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PodLogOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodLogOptions) + out := out.(*PodLogOptions) + out.TypeMeta = in.TypeMeta + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } else { + out.SinceSeconds = nil + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.SinceTime = nil + } + out.Timestamps = in.Timestamps + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } else { + out.TailLines = nil + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } else { + out.LimitBytes = nil + } + return nil + } +} + +func DeepCopy_api_PodProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodProxyOptions) + out := out.(*PodProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_api_PodSecurityContext(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityContext) + out := out.(*PodSecurityContext) + out.HostNetwork = in.HostNetwork + out.HostPID = in.HostPID + out.HostIPC = in.HostIPC + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + if in.RunAsUser != nil { + in, out := &in.RunAsUser, &out.RunAsUser + *out = new(int64) + **out = **in + } else { + out.RunAsUser = nil + } + if in.RunAsNonRoot != nil { + in, out := &in.RunAsNonRoot, &out.RunAsNonRoot + *out = new(bool) + **out = **in + } else { + out.RunAsNonRoot = nil + } + if in.SupplementalGroups != nil { + in, out := &in.SupplementalGroups, &out.SupplementalGroups + *out = make([]int64, len(*in)) + copy(*out, *in) + } else { + out.SupplementalGroups = nil + } + if in.FSGroup != nil { + in, out := &in.FSGroup, &out.FSGroup + *out = new(int64) + **out = **in + } else { + out.FSGroup = nil + } + return nil + } +} + +func DeepCopy_api_PodSignature(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSignature) + out := out.(*PodSignature) + if in.PodController != nil { + in, out := &in.PodController, &out.PodController + *out = new(OwnerReference) + if err := DeepCopy_api_OwnerReference(*in, *out, c); err != nil { + return err + } + } else { + out.PodController = nil + } + return nil + } +} + +func DeepCopy_api_PodSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSpec) + out := out.(*PodSpec) + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]Volume, len(*in)) + for i := range *in { + if err := DeepCopy_api_Volume(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Volumes = nil + } + if in.InitContainers != nil { + in, out := &in.InitContainers, &out.InitContainers + *out = make([]Container, len(*in)) + for i := range *in { + if err := DeepCopy_api_Container(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.InitContainers = nil + } + if in.Containers != nil { + in, out := &in.Containers, &out.Containers + *out = make([]Container, len(*in)) + for i := range *in { + if err := DeepCopy_api_Container(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Containers = nil + } + out.RestartPolicy = in.RestartPolicy + if in.TerminationGracePeriodSeconds != nil { + in, out := &in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.TerminationGracePeriodSeconds = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + out.DNSPolicy = in.DNSPolicy + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.NodeSelector = nil + } + out.ServiceAccountName = in.ServiceAccountName + out.NodeName = in.NodeName + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(PodSecurityContext) + if err := DeepCopy_api_PodSecurityContext(*in, *out, c); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ImagePullSecrets = nil + } + out.Hostname = in.Hostname + out.Subdomain = in.Subdomain + return nil + } +} + +func DeepCopy_api_PodStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodStatus) + out := out.(*PodStatus) + out.Phase = in.Phase + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]PodCondition, len(*in)) + for i := range *in { + if err := DeepCopy_api_PodCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + out.Message = in.Message + out.Reason = in.Reason + out.HostIP = in.HostIP + out.PodIP = in.PodIP + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.InitContainerStatuses != nil { + in, out := &in.InitContainerStatuses, &out.InitContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ContainerStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.InitContainerStatuses = nil + } + if in.ContainerStatuses != nil { + in, out := &in.ContainerStatuses, &out.ContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ContainerStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.ContainerStatuses = nil + } + return nil + } +} + +func DeepCopy_api_PodStatusResult(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodStatusResult) + out := out.(*PodStatusResult) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PodStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodTemplate(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplate) + out := out.(*PodTemplate) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodTemplateList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplateList) + out := out.(*PodTemplateList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodTemplate, len(*in)) + for i := range *in { + if err := DeepCopy_api_PodTemplate(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PodTemplateSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplateSpec) + out := out.(*PodTemplateSpec) + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PodSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_Preconditions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Preconditions) + out := out.(*Preconditions) + if in.UID != nil { + in, out := &in.UID, &out.UID + *out = new(types.UID) + **out = **in + } else { + out.UID = nil + } + return nil + } +} + +func DeepCopy_api_PreferAvoidPodsEntry(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PreferAvoidPodsEntry) + out := out.(*PreferAvoidPodsEntry) + if err := DeepCopy_api_PodSignature(&in.PodSignature, &out.PodSignature, c); err != nil { + return err + } + out.EvictionTime = in.EvictionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_PreferredSchedulingTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PreferredSchedulingTerm) + out := out.(*PreferredSchedulingTerm) + out.Weight = in.Weight + if err := DeepCopy_api_NodeSelectorTerm(&in.Preference, &out.Preference, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_Probe(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Probe) + out := out.(*Probe) + if err := DeepCopy_api_Handler(&in.Handler, &out.Handler, c); err != nil { + return err + } + out.InitialDelaySeconds = in.InitialDelaySeconds + out.TimeoutSeconds = in.TimeoutSeconds + out.PeriodSeconds = in.PeriodSeconds + out.SuccessThreshold = in.SuccessThreshold + out.FailureThreshold = in.FailureThreshold + return nil + } +} + +func DeepCopy_api_QuobyteVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*QuobyteVolumeSource) + out := out.(*QuobyteVolumeSource) + out.Registry = in.Registry + out.Volume = in.Volume + out.ReadOnly = in.ReadOnly + out.User = in.User + out.Group = in.Group + return nil + } +} + +func DeepCopy_api_RBDVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RBDVolumeSource) + out := out.(*RBDVolumeSource) + if in.CephMonitors != nil { + in, out := &in.CephMonitors, &out.CephMonitors + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.CephMonitors = nil + } + out.RBDImage = in.RBDImage + out.FSType = in.FSType + out.RBDPool = in.RBDPool + out.RadosUser = in.RadosUser + out.Keyring = in.Keyring + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_RangeAllocation(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RangeAllocation) + out := out.(*RangeAllocation) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Range = in.Range + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_api_ReplicationController(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationController) + out := out.(*ReplicationController) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ReplicationControllerSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_api_ReplicationControllerList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerList) + out := out.(*ReplicationControllerList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReplicationController, len(*in)) + for i := range *in { + if err := DeepCopy_api_ReplicationController(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ReplicationControllerSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerSpec) + out := out.(*ReplicationControllerSpec) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(PodTemplateSpec) + if err := DeepCopy_api_PodTemplateSpec(*in, *out, c); err != nil { + return err + } + } else { + out.Template = nil + } + return nil + } +} + +func DeepCopy_api_ReplicationControllerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerStatus) + out := out.(*ReplicationControllerStatus) + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil + } +} + +func DeepCopy_api_ResourceFieldSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceFieldSelector) + out := out.(*ResourceFieldSelector) + out.ContainerName = in.ContainerName + out.Resource = in.Resource + out.Divisor = in.Divisor.DeepCopy() + return nil + } +} + +func DeepCopy_api_ResourceQuota(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuota) + out := out.(*ResourceQuota) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ResourceQuotaSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_ResourceQuotaStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ResourceQuotaList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaList) + out := out.(*ResourceQuotaList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ResourceQuota, len(*in)) + for i := range *in { + if err := DeepCopy_api_ResourceQuota(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ResourceQuotaSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaSpec) + out := out.(*ResourceQuotaSpec) + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Hard = nil + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]ResourceQuotaScope, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Scopes = nil + } + return nil + } +} + +func DeepCopy_api_ResourceQuotaStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaStatus) + out := out.(*ResourceQuotaStatus) + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Hard = nil + } + if in.Used != nil { + in, out := &in.Used, &out.Used + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Used = nil + } + return nil + } +} + +func DeepCopy_api_ResourceRequirements(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceRequirements) + out := out.(*ResourceRequirements) + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Limits = nil + } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Requests = nil + } + return nil + } +} + +func DeepCopy_api_SELinuxOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxOptions) + out := out.(*SELinuxOptions) + out.User = in.User + out.Role = in.Role + out.Type = in.Type + out.Level = in.Level + return nil + } +} + +func DeepCopy_api_Secret(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Secret) + out := out.(*Secret) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string][]byte) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(*[]byte) + } + } + } else { + out.Data = nil + } + out.Type = in.Type + return nil + } +} + +func DeepCopy_api_SecretKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretKeySelector) + out := out.(*SecretKeySelector) + out.LocalObjectReference = in.LocalObjectReference + out.Key = in.Key + return nil + } +} + +func DeepCopy_api_SecretList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretList) + out := out.(*SecretList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Secret, len(*in)) + for i := range *in { + if err := DeepCopy_api_Secret(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_SecretVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretVolumeSource) + out := out.(*SecretVolumeSource) + out.SecretName = in.SecretName + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := DeepCopy_api_KeyToPath(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_api_SecurityContext(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecurityContext) + out := out.(*SecurityContext) + if in.Capabilities != nil { + in, out := &in.Capabilities, &out.Capabilities + *out = new(Capabilities) + if err := DeepCopy_api_Capabilities(*in, *out, c); err != nil { + return err + } + } else { + out.Capabilities = nil + } + if in.Privileged != nil { + in, out := &in.Privileged, &out.Privileged + *out = new(bool) + **out = **in + } else { + out.Privileged = nil + } + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + if in.RunAsUser != nil { + in, out := &in.RunAsUser, &out.RunAsUser + *out = new(int64) + **out = **in + } else { + out.RunAsUser = nil + } + if in.RunAsNonRoot != nil { + in, out := &in.RunAsNonRoot, &out.RunAsNonRoot + *out = new(bool) + **out = **in + } else { + out.RunAsNonRoot = nil + } + if in.ReadOnlyRootFilesystem != nil { + in, out := &in.ReadOnlyRootFilesystem, &out.ReadOnlyRootFilesystem + *out = new(bool) + **out = **in + } else { + out.ReadOnlyRootFilesystem = nil + } + return nil + } +} + +func DeepCopy_api_SerializedReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SerializedReference) + out := out.(*SerializedReference) + out.TypeMeta = in.TypeMeta + out.Reference = in.Reference + return nil + } +} + +func DeepCopy_api_Service(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Service) + out := out.(*Service) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ServiceSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_ServiceStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ServiceAccount(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccount) + out := out.(*ServiceAccount) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Secrets = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ImagePullSecrets = nil + } + return nil + } +} + +func DeepCopy_api_ServiceAccountList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccountList) + out := out.(*ServiceAccountList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ServiceAccount, len(*in)) + for i := range *in { + if err := DeepCopy_api_ServiceAccount(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ServiceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceList) + out := out.(*ServiceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Service, len(*in)) + for i := range *in { + if err := DeepCopy_api_Service(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ServicePort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServicePort) + out := out.(*ServicePort) + out.Name = in.Name + out.Protocol = in.Protocol + out.Port = in.Port + out.TargetPort = in.TargetPort + out.NodePort = in.NodePort + return nil + } +} + +func DeepCopy_api_ServiceProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceProxyOptions) + out := out.(*ServiceProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_api_ServiceSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceSpec) + out := out.(*ServiceSpec) + out.Type = in.Type + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ServicePort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + out.ClusterIP = in.ClusterIP + out.ExternalName = in.ExternalName + if in.ExternalIPs != nil { + in, out := &in.ExternalIPs, &out.ExternalIPs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ExternalIPs = nil + } + out.LoadBalancerIP = in.LoadBalancerIP + out.SessionAffinity = in.SessionAffinity + if in.LoadBalancerSourceRanges != nil { + in, out := &in.LoadBalancerSourceRanges, &out.LoadBalancerSourceRanges + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.LoadBalancerSourceRanges = nil + } + return nil + } +} + +func DeepCopy_api_ServiceStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceStatus) + out := out.(*ServiceStatus) + if err := DeepCopy_api_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_Sysctl(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Sysctl) + out := out.(*Sysctl) + out.Name = in.Name + out.Value = in.Value + return nil + } +} + +func DeepCopy_api_TCPSocketAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TCPSocketAction) + out := out.(*TCPSocketAction) + out.Port = in.Port + return nil + } +} + +func DeepCopy_api_Taint(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Taint) + out := out.(*Taint) + out.Key = in.Key + out.Value = in.Value + out.Effect = in.Effect + return nil + } +} + +func DeepCopy_api_Toleration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Toleration) + out := out.(*Toleration) + out.Key = in.Key + out.Operator = in.Operator + out.Value = in.Value + out.Effect = in.Effect + return nil + } +} + +func DeepCopy_api_Volume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Volume) + out := out.(*Volume) + out.Name = in.Name + if err := DeepCopy_api_VolumeSource(&in.VolumeSource, &out.VolumeSource, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_VolumeMount(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeMount) + out := out.(*VolumeMount) + out.Name = in.Name + out.ReadOnly = in.ReadOnly + out.MountPath = in.MountPath + out.SubPath = in.SubPath + return nil + } +} + +func DeepCopy_api_VolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeSource) + out := out.(*VolumeSource) + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + **out = **in + } else { + out.HostPath = nil + } + if in.EmptyDir != nil { + in, out := &in.EmptyDir, &out.EmptyDir + *out = new(EmptyDirVolumeSource) + **out = **in + } else { + out.EmptyDir = nil + } + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + **out = **in + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in + } else { + out.AWSElasticBlockStore = nil + } + if in.GitRepo != nil { + in, out := &in.GitRepo, &out.GitRepo + *out = new(GitRepoVolumeSource) + **out = **in + } else { + out.GitRepo = nil + } + if in.Secret != nil { + in, out := &in.Secret, &out.Secret + *out = new(SecretVolumeSource) + if err := DeepCopy_api_SecretVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.Secret = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + **out = **in + } else { + out.NFS = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + **out = **in + } else { + out.ISCSI = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + **out = **in + } else { + out.Glusterfs = nil + } + if in.PersistentVolumeClaim != nil { + in, out := &in.PersistentVolumeClaim, &out.PersistentVolumeClaim + *out = new(PersistentVolumeClaimVolumeSource) + **out = **in + } else { + out.PersistentVolumeClaim = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := DeepCopy_api_RBDVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + **out = **in + } else { + out.Quobyte = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := DeepCopy_api_FlexVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + **out = **in + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := DeepCopy_api_CephFSVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + **out = **in + } else { + out.Flocker = nil + } + if in.DownwardAPI != nil { + in, out := &in.DownwardAPI, &out.DownwardAPI + *out = new(DownwardAPIVolumeSource) + if err := DeepCopy_api_DownwardAPIVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.DownwardAPI = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := DeepCopy_api_FCVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FC = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + **out = **in + } else { + out.AzureFile = nil + } + if in.ConfigMap != nil { + in, out := &in.ConfigMap, &out.ConfigMap + *out = new(ConfigMapVolumeSource) + if err := DeepCopy_api_ConfigMapVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.ConfigMap = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in + } else { + out.VsphereVolume = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := DeepCopy_api_AzureDiskVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil + } +} + +func DeepCopy_api_VsphereVirtualDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VsphereVirtualDiskVolumeSource) + out := out.(*VsphereVirtualDiskVolumeSource) + out.VolumePath = in.VolumePath + out.FSType = in.FSType + return nil + } +} + +func DeepCopy_api_WeightedPodAffinityTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*WeightedPodAffinityTerm) + out := out.(*WeightedPodAffinityTerm) + out.Weight = in.Weight + if err := DeepCopy_api_PodAffinityTerm(&in.PodAffinityTerm, &out.PodAffinityTerm, c); err != nil { + return err + } + return nil + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apimachinery/doc.go b/vendor/k8s.io/client-go/1.4/pkg/apimachinery/doc.go new file mode 100644 index 00000000..ede22b3d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apimachinery/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package apimachinery contains the generic API machinery code that +// is common to both server and clients. +// This package should never import specific API objects. +package apimachinery diff --git a/vendor/k8s.io/client-go/1.4/pkg/apimachinery/registered/registered.go b/vendor/k8s.io/client-go/1.4/pkg/apimachinery/registered/registered.go new file mode 100644 index 00000000..50810329 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apimachinery/registered/registered.go @@ -0,0 +1,376 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package to keep track of API Versions that can be registered and are enabled in api.Scheme. +package registered + +import ( + "fmt" + "os" + "sort" + "strings" + + "github.com/golang/glog" + + "k8s.io/client-go/1.4/pkg/api/meta" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/apimachinery" + "k8s.io/client-go/1.4/pkg/util/sets" +) + +var ( + DefaultAPIRegistrationManager = NewOrDie(os.Getenv("KUBE_API_VERSIONS")) +) + +// APIRegistrationManager +type APIRegistrationManager struct { + // registeredGroupVersions stores all API group versions for which RegisterGroup is called. + registeredVersions map[unversioned.GroupVersion]struct{} + + // thirdPartyGroupVersions are API versions which are dynamically + // registered (and unregistered) via API calls to the apiserver + thirdPartyGroupVersions []unversioned.GroupVersion + + // enabledVersions represents all enabled API versions. It should be a + // subset of registeredVersions. Please call EnableVersions() to add + // enabled versions. + enabledVersions map[unversioned.GroupVersion]struct{} + + // map of group meta for all groups. + groupMetaMap map[string]*apimachinery.GroupMeta + + // envRequestedVersions represents the versions requested via the + // KUBE_API_VERSIONS environment variable. The install package of each group + // checks this list before add their versions to the latest package and + // Scheme. This list is small and order matters, so represent as a slice + envRequestedVersions []unversioned.GroupVersion +} + +// NewAPIRegistrationManager constructs a new manager. The argument ought to be +// the value of the KUBE_API_VERSIONS env var, or a value of this which you +// wish to test. +func NewAPIRegistrationManager(kubeAPIVersions string) (*APIRegistrationManager, error) { + m := &APIRegistrationManager{ + registeredVersions: map[unversioned.GroupVersion]struct{}{}, + thirdPartyGroupVersions: []unversioned.GroupVersion{}, + enabledVersions: map[unversioned.GroupVersion]struct{}{}, + groupMetaMap: map[string]*apimachinery.GroupMeta{}, + envRequestedVersions: []unversioned.GroupVersion{}, + } + + if len(kubeAPIVersions) != 0 { + for _, version := range strings.Split(kubeAPIVersions, ",") { + gv, err := unversioned.ParseGroupVersion(version) + if err != nil { + return nil, fmt.Errorf("invalid api version: %s in KUBE_API_VERSIONS: %s.", + version, kubeAPIVersions) + } + m.envRequestedVersions = append(m.envRequestedVersions, gv) + } + } + return m, nil +} + +func NewOrDie(kubeAPIVersions string) *APIRegistrationManager { + m, err := NewAPIRegistrationManager(kubeAPIVersions) + if err != nil { + glog.Fatalf("Could not construct version manager: %v (KUBE_API_VERSIONS=%q)", err, kubeAPIVersions) + } + return m +} + +// People are calling global functions. Let them continue to do that (for now). +var ( + ValidateEnvRequestedVersions = DefaultAPIRegistrationManager.ValidateEnvRequestedVersions + AllPreferredGroupVersions = DefaultAPIRegistrationManager.AllPreferredGroupVersions + RESTMapper = DefaultAPIRegistrationManager.RESTMapper + GroupOrDie = DefaultAPIRegistrationManager.GroupOrDie + AddThirdPartyAPIGroupVersions = DefaultAPIRegistrationManager.AddThirdPartyAPIGroupVersions + IsThirdPartyAPIGroupVersion = DefaultAPIRegistrationManager.IsThirdPartyAPIGroupVersion + RegisteredGroupVersions = DefaultAPIRegistrationManager.RegisteredGroupVersions + IsRegisteredVersion = DefaultAPIRegistrationManager.IsRegisteredVersion + IsRegistered = DefaultAPIRegistrationManager.IsRegistered + Group = DefaultAPIRegistrationManager.Group + EnabledVersionsForGroup = DefaultAPIRegistrationManager.EnabledVersionsForGroup + EnabledVersions = DefaultAPIRegistrationManager.EnabledVersions + IsEnabledVersion = DefaultAPIRegistrationManager.IsEnabledVersion + IsAllowedVersion = DefaultAPIRegistrationManager.IsAllowedVersion + EnableVersions = DefaultAPIRegistrationManager.EnableVersions + RegisterGroup = DefaultAPIRegistrationManager.RegisterGroup + RegisterVersions = DefaultAPIRegistrationManager.RegisterVersions +) + +// RegisterVersions adds the given group versions to the list of registered group versions. +func (m *APIRegistrationManager) RegisterVersions(availableVersions []unversioned.GroupVersion) { + for _, v := range availableVersions { + m.registeredVersions[v] = struct{}{} + } +} + +// RegisterGroup adds the given group to the list of registered groups. +func (m *APIRegistrationManager) RegisterGroup(groupMeta apimachinery.GroupMeta) error { + groupName := groupMeta.GroupVersion.Group + if _, found := m.groupMetaMap[groupName]; found { + return fmt.Errorf("group %v is already registered", m.groupMetaMap) + } + m.groupMetaMap[groupName] = &groupMeta + return nil +} + +// EnableVersions adds the versions for the given group to the list of enabled versions. +// Note that the caller should call RegisterGroup before calling this method. +// The caller of this function is responsible to add the versions to scheme and RESTMapper. +func (m *APIRegistrationManager) EnableVersions(versions ...unversioned.GroupVersion) error { + var unregisteredVersions []unversioned.GroupVersion + for _, v := range versions { + if _, found := m.registeredVersions[v]; !found { + unregisteredVersions = append(unregisteredVersions, v) + } + m.enabledVersions[v] = struct{}{} + } + if len(unregisteredVersions) != 0 { + return fmt.Errorf("Please register versions before enabling them: %v", unregisteredVersions) + } + return nil +} + +// IsAllowedVersion returns if the version is allowed by the KUBE_API_VERSIONS +// environment variable. If the environment variable is empty, then it always +// returns true. +func (m *APIRegistrationManager) IsAllowedVersion(v unversioned.GroupVersion) bool { + if len(m.envRequestedVersions) == 0 { + return true + } + for _, envGV := range m.envRequestedVersions { + if v == envGV { + return true + } + } + return false +} + +// IsEnabledVersion returns if a version is enabled. +func (m *APIRegistrationManager) IsEnabledVersion(v unversioned.GroupVersion) bool { + _, found := m.enabledVersions[v] + return found +} + +// EnabledVersions returns all enabled versions. Groups are randomly ordered, but versions within groups +// are priority order from best to worst +func (m *APIRegistrationManager) EnabledVersions() []unversioned.GroupVersion { + ret := []unversioned.GroupVersion{} + for _, groupMeta := range m.groupMetaMap { + ret = append(ret, groupMeta.GroupVersions...) + } + return ret +} + +// EnabledVersionsForGroup returns all enabled versions for a group in order of best to worst +func (m *APIRegistrationManager) EnabledVersionsForGroup(group string) []unversioned.GroupVersion { + groupMeta, ok := m.groupMetaMap[group] + if !ok { + return []unversioned.GroupVersion{} + } + + return append([]unversioned.GroupVersion{}, groupMeta.GroupVersions...) +} + +// Group returns the metadata of a group if the group is registered, otherwise +// an error is returned. +func (m *APIRegistrationManager) Group(group string) (*apimachinery.GroupMeta, error) { + groupMeta, found := m.groupMetaMap[group] + if !found { + return nil, fmt.Errorf("group %v has not been registered", group) + } + groupMetaCopy := *groupMeta + return &groupMetaCopy, nil +} + +// IsRegistered takes a string and determines if it's one of the registered groups +func (m *APIRegistrationManager) IsRegistered(group string) bool { + _, found := m.groupMetaMap[group] + return found +} + +// IsRegisteredVersion returns if a version is registered. +func (m *APIRegistrationManager) IsRegisteredVersion(v unversioned.GroupVersion) bool { + _, found := m.registeredVersions[v] + return found +} + +// RegisteredGroupVersions returns all registered group versions. +func (m *APIRegistrationManager) RegisteredGroupVersions() []unversioned.GroupVersion { + ret := []unversioned.GroupVersion{} + for groupVersion := range m.registeredVersions { + ret = append(ret, groupVersion) + } + return ret +} + +// IsThirdPartyAPIGroupVersion returns true if the api version is a user-registered group/version. +func (m *APIRegistrationManager) IsThirdPartyAPIGroupVersion(gv unversioned.GroupVersion) bool { + for ix := range m.thirdPartyGroupVersions { + if m.thirdPartyGroupVersions[ix] == gv { + return true + } + } + return false +} + +// AddThirdPartyAPIGroupVersions sets the list of third party versions, +// registers them in the API machinery and enables them. +// Skips GroupVersions that are already registered. +// Returns the list of GroupVersions that were skipped. +func (m *APIRegistrationManager) AddThirdPartyAPIGroupVersions(gvs ...unversioned.GroupVersion) []unversioned.GroupVersion { + filteredGVs := []unversioned.GroupVersion{} + skippedGVs := []unversioned.GroupVersion{} + for ix := range gvs { + if !m.IsRegisteredVersion(gvs[ix]) { + filteredGVs = append(filteredGVs, gvs[ix]) + } else { + glog.V(3).Infof("Skipping %s, because its already registered", gvs[ix].String()) + skippedGVs = append(skippedGVs, gvs[ix]) + } + } + if len(filteredGVs) == 0 { + return skippedGVs + } + m.RegisterVersions(filteredGVs) + m.EnableVersions(filteredGVs...) + m.thirdPartyGroupVersions = append(m.thirdPartyGroupVersions, filteredGVs...) + + return skippedGVs +} + +// TODO: This is an expedient function, because we don't check if a Group is +// supported throughout the code base. We will abandon this function and +// checking the error returned by the Group() function. +func (m *APIRegistrationManager) GroupOrDie(group string) *apimachinery.GroupMeta { + groupMeta, found := m.groupMetaMap[group] + if !found { + if group == "" { + panic("The legacy v1 API is not registered.") + } else { + panic(fmt.Sprintf("Group %s is not registered.", group)) + } + } + groupMetaCopy := *groupMeta + return &groupMetaCopy +} + +// RESTMapper returns a union RESTMapper of all known types with priorities chosen in the following order: +// 1. if KUBE_API_VERSIONS is specified, then KUBE_API_VERSIONS in order, OR +// 1. legacy kube group preferred version, extensions preferred version, metrics perferred version, legacy +// kube any version, extensions any version, metrics any version, all other groups alphabetical preferred version, +// all other groups alphabetical. +func (m *APIRegistrationManager) RESTMapper(versionPatterns ...unversioned.GroupVersion) meta.RESTMapper { + unionMapper := meta.MultiRESTMapper{} + unionedGroups := sets.NewString() + for enabledVersion := range m.enabledVersions { + if !unionedGroups.Has(enabledVersion.Group) { + unionedGroups.Insert(enabledVersion.Group) + groupMeta := m.groupMetaMap[enabledVersion.Group] + unionMapper = append(unionMapper, groupMeta.RESTMapper) + } + } + + if len(versionPatterns) != 0 { + resourcePriority := []unversioned.GroupVersionResource{} + kindPriority := []unversioned.GroupVersionKind{} + for _, versionPriority := range versionPatterns { + resourcePriority = append(resourcePriority, versionPriority.WithResource(meta.AnyResource)) + kindPriority = append(kindPriority, versionPriority.WithKind(meta.AnyKind)) + } + + return meta.PriorityRESTMapper{Delegate: unionMapper, ResourcePriority: resourcePriority, KindPriority: kindPriority} + } + + if len(m.envRequestedVersions) != 0 { + resourcePriority := []unversioned.GroupVersionResource{} + kindPriority := []unversioned.GroupVersionKind{} + + for _, versionPriority := range m.envRequestedVersions { + resourcePriority = append(resourcePriority, versionPriority.WithResource(meta.AnyResource)) + kindPriority = append(kindPriority, versionPriority.WithKind(meta.AnyKind)) + } + + return meta.PriorityRESTMapper{Delegate: unionMapper, ResourcePriority: resourcePriority, KindPriority: kindPriority} + } + + prioritizedGroups := []string{"", "extensions", "metrics"} + resourcePriority, kindPriority := m.prioritiesForGroups(prioritizedGroups...) + + prioritizedGroupsSet := sets.NewString(prioritizedGroups...) + remainingGroups := sets.String{} + for enabledVersion := range m.enabledVersions { + if !prioritizedGroupsSet.Has(enabledVersion.Group) { + remainingGroups.Insert(enabledVersion.Group) + } + } + + remainingResourcePriority, remainingKindPriority := m.prioritiesForGroups(remainingGroups.List()...) + resourcePriority = append(resourcePriority, remainingResourcePriority...) + kindPriority = append(kindPriority, remainingKindPriority...) + + return meta.PriorityRESTMapper{Delegate: unionMapper, ResourcePriority: resourcePriority, KindPriority: kindPriority} +} + +// prioritiesForGroups returns the resource and kind priorities for a PriorityRESTMapper, preferring the preferred version of each group first, +// then any non-preferred version of the group second. +func (m *APIRegistrationManager) prioritiesForGroups(groups ...string) ([]unversioned.GroupVersionResource, []unversioned.GroupVersionKind) { + resourcePriority := []unversioned.GroupVersionResource{} + kindPriority := []unversioned.GroupVersionKind{} + + for _, group := range groups { + availableVersions := m.EnabledVersionsForGroup(group) + if len(availableVersions) > 0 { + resourcePriority = append(resourcePriority, availableVersions[0].WithResource(meta.AnyResource)) + kindPriority = append(kindPriority, availableVersions[0].WithKind(meta.AnyKind)) + } + } + for _, group := range groups { + resourcePriority = append(resourcePriority, unversioned.GroupVersionResource{Group: group, Version: meta.AnyVersion, Resource: meta.AnyResource}) + kindPriority = append(kindPriority, unversioned.GroupVersionKind{Group: group, Version: meta.AnyVersion, Kind: meta.AnyKind}) + } + + return resourcePriority, kindPriority +} + +// AllPreferredGroupVersions returns the preferred versions of all registered +// groups in the form of "group1/version1,group2/version2,..." +func (m *APIRegistrationManager) AllPreferredGroupVersions() string { + if len(m.groupMetaMap) == 0 { + return "" + } + var defaults []string + for _, groupMeta := range m.groupMetaMap { + defaults = append(defaults, groupMeta.GroupVersion.String()) + } + sort.Strings(defaults) + return strings.Join(defaults, ",") +} + +// ValidateEnvRequestedVersions returns a list of versions that are requested in +// the KUBE_API_VERSIONS environment variable, but not enabled. +func (m *APIRegistrationManager) ValidateEnvRequestedVersions() []unversioned.GroupVersion { + var missingVersions []unversioned.GroupVersion + for _, v := range m.envRequestedVersions { + if _, found := m.enabledVersions[v]; !found { + missingVersions = append(missingVersions, v) + } + } + return missingVersions +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apimachinery/types.go b/vendor/k8s.io/client-go/1.4/pkg/apimachinery/types.go new file mode 100644 index 00000000..a5eb6848 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apimachinery/types.go @@ -0,0 +1,52 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apimachinery + +import ( + "k8s.io/client-go/1.4/pkg/api/meta" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// GroupMeta stores the metadata of a group. +type GroupMeta struct { + // GroupVersion represents the preferred version of the group. + GroupVersion unversioned.GroupVersion + + // GroupVersions is Group + all versions in that group. + GroupVersions []unversioned.GroupVersion + + // Codec is the default codec for serializing output that should use + // the preferred version. Use this Codec when writing to + // disk, a data store that is not dynamically versioned, or in tests. + // This codec can decode any object that the schema is aware of. + Codec runtime.Codec + + // SelfLinker can set or get the SelfLink field of all API types. + // TODO: when versioning changes, make this part of each API definition. + // TODO(lavalamp): Combine SelfLinker & ResourceVersioner interfaces, force all uses + // to go through the InterfacesFor method below. + SelfLinker runtime.SelfLinker + + // RESTMapper provides the default mapping between REST paths and the objects declared in api.Scheme and all known + // versions. + RESTMapper meta.RESTMapper + + // InterfacesFor returns the default Codec and ResourceVersioner for a given version + // or an error if the version is not known. + InterfacesFor func(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/doc.go b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/doc.go new file mode 100644 index 00000000..2c770186 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package autoscaling diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/register.go b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/register.go new file mode 100644 index 00000000..40a5d2c6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/register.go @@ -0,0 +1,55 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package autoscaling + +import ( + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// GroupName is the group name use in this package +const GroupName = "autoscaling" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) unversioned.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) unversioned.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Scale{}, + &HorizontalPodAutoscaler{}, + &HorizontalPodAutoscalerList{}, + &api.ListOptions{}, + ) + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/types.generated.go b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/types.generated.go new file mode 100644 index 00000000..5ce64bd1 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/types.generated.go @@ -0,0 +1,2656 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// ************************************************************ +// DO NOT EDIT. +// THIS FILE IS AUTO-GENERATED BY codecgen. +// ************************************************************ + +package autoscaling + +import ( + "errors" + "fmt" + codec1978 "github.com/ugorji/go/codec" + pkg2_api "k8s.io/client-go/1.4/pkg/api" + pkg1_unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + pkg3_types "k8s.io/client-go/1.4/pkg/types" + "reflect" + "runtime" + time "time" +) + +const ( + // ----- content types ---- + codecSelferC_UTF81234 = 1 + codecSelferC_RAW1234 = 0 + // ----- value types used ---- + codecSelferValueTypeArray1234 = 10 + codecSelferValueTypeMap1234 = 9 + // ----- containerStateValues ---- + codecSelfer_containerMapKey1234 = 2 + codecSelfer_containerMapValue1234 = 3 + codecSelfer_containerMapEnd1234 = 4 + codecSelfer_containerArrayElem1234 = 6 + codecSelfer_containerArrayEnd1234 = 7 +) + +var ( + codecSelferBitsize1234 = uint8(reflect.TypeOf(uint(0)).Bits()) + codecSelferOnlyMapOrArrayEncodeToStructErr1234 = errors.New(`only encoded map or array can be decoded into a struct`) +) + +type codecSelfer1234 struct{} + +func init() { + if codec1978.GenVersion != 5 { + _, file, _, _ := runtime.Caller(0) + err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", + 5, codec1978.GenVersion, file) + panic(err) + } + if false { // reference the types, but skip this branch at build/run time + var v0 pkg2_api.ObjectMeta + var v1 pkg1_unversioned.TypeMeta + var v2 pkg3_types.UID + var v3 time.Time + _, _, _, _ = v0, v1, v2, v3 + } +} + +func (x *Scale) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [5]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.Kind != "" + yyq2[1] = x.APIVersion != "" + yyq2[2] = true + yyq2[3] = true + yyq2[4] = true + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(5) + } else { + yynn2 = 0 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[0] { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + yy10 := &x.ObjectMeta + yy10.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy11 := &x.ObjectMeta + yy11.CodecEncodeSelf(e) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[3] { + yy13 := &x.Spec + yy13.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy14 := &x.Spec + yy14.CodecEncodeSelf(e) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[4] { + yy16 := &x.Status + yy16.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy17 := &x.Status + yy17.CodecEncodeSelf(e) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Scale) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym18 := z.DecBinary() + _ = yym18 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct19 := r.ContainerType() + if yyct19 == codecSelferValueTypeMap1234 { + yyl19 := r.ReadMapStart() + if yyl19 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl19, d) + } + } else if yyct19 == codecSelferValueTypeArray1234 { + yyl19 := r.ReadArrayStart() + if yyl19 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl19, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Scale) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys20Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys20Slc + var yyhl20 bool = l >= 0 + for yyj20 := 0; ; yyj20++ { + if yyhl20 { + if yyj20 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys20Slc = r.DecodeBytes(yys20Slc, true, true) + yys20 := string(yys20Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys20 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv23 := &x.ObjectMeta + yyv23.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ScaleSpec{} + } else { + yyv24 := &x.Spec + yyv24.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ScaleStatus{} + } else { + yyv25 := &x.Status + yyv25.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys20) + } // end switch yys20 + } // end for yyj20 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Scale) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj26 int + var yyb26 bool + var yyhl26 bool = l >= 0 + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv29 := &x.ObjectMeta + yyv29.CodecDecodeSelf(d) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ScaleSpec{} + } else { + yyv30 := &x.Spec + yyv30.CodecDecodeSelf(d) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ScaleStatus{} + } else { + yyv31 := &x.Status + yyv31.CodecDecodeSelf(d) + } + for { + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj26-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ScaleSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym32 := z.EncBinary() + _ = yym32 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep33 := !z.EncBinary() + yy2arr33 := z.EncBasicHandle().StructToArray + var yyq33 [1]bool + _, _, _ = yysep33, yyq33, yy2arr33 + const yyr33 bool = false + yyq33[0] = x.Replicas != 0 + var yynn33 int + if yyr33 || yy2arr33 { + r.EncodeArrayStart(1) + } else { + yynn33 = 0 + for _, b := range yyq33 { + if b { + yynn33++ + } + } + r.EncodeMapStart(yynn33) + yynn33 = 0 + } + if yyr33 || yy2arr33 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq33[0] { + yym35 := z.EncBinary() + _ = yym35 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq33[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym36 := z.EncBinary() + _ = yym36 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + } + if yyr33 || yy2arr33 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ScaleSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym37 := z.DecBinary() + _ = yym37 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct38 := r.ContainerType() + if yyct38 == codecSelferValueTypeMap1234 { + yyl38 := r.ReadMapStart() + if yyl38 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl38, d) + } + } else if yyct38 == codecSelferValueTypeArray1234 { + yyl38 := r.ReadArrayStart() + if yyl38 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl38, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ScaleSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys39Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys39Slc + var yyhl39 bool = l >= 0 + for yyj39 := 0; ; yyj39++ { + if yyhl39 { + if yyj39 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys39Slc = r.DecodeBytes(yys39Slc, true, true) + yys39 := string(yys39Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys39 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys39) + } // end switch yys39 + } // end for yyj39 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ScaleSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj41 int + var yyb41 bool + var yyhl41 bool = l >= 0 + yyj41++ + if yyhl41 { + yyb41 = yyj41 > l + } else { + yyb41 = r.CheckBreak() + } + if yyb41 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + for { + yyj41++ + if yyhl41 { + yyb41 = yyj41 > l + } else { + yyb41 = r.CheckBreak() + } + if yyb41 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj41-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ScaleStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym43 := z.EncBinary() + _ = yym43 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep44 := !z.EncBinary() + yy2arr44 := z.EncBasicHandle().StructToArray + var yyq44 [2]bool + _, _, _ = yysep44, yyq44, yy2arr44 + const yyr44 bool = false + yyq44[1] = x.Selector != "" + var yynn44 int + if yyr44 || yy2arr44 { + r.EncodeArrayStart(2) + } else { + yynn44 = 1 + for _, b := range yyq44 { + if b { + yynn44++ + } + } + r.EncodeMapStart(yynn44) + yynn44 = 0 + } + if yyr44 || yy2arr44 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym46 := z.EncBinary() + _ = yym46 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym47 := z.EncBinary() + _ = yym47 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + if yyr44 || yy2arr44 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq44[1] { + yym49 := z.EncBinary() + _ = yym49 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Selector)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq44[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym50 := z.EncBinary() + _ = yym50 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Selector)) + } + } + } + if yyr44 || yy2arr44 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ScaleStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym51 := z.DecBinary() + _ = yym51 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct52 := r.ContainerType() + if yyct52 == codecSelferValueTypeMap1234 { + yyl52 := r.ReadMapStart() + if yyl52 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl52, d) + } + } else if yyct52 == codecSelferValueTypeArray1234 { + yyl52 := r.ReadArrayStart() + if yyl52 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl52, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ScaleStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys53Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys53Slc + var yyhl53 bool = l >= 0 + for yyj53 := 0; ; yyj53++ { + if yyhl53 { + if yyj53 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys53Slc = r.DecodeBytes(yys53Slc, true, true) + yys53 := string(yys53Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys53 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "selector": + if r.TryDecodeAsNil() { + x.Selector = "" + } else { + x.Selector = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys53) + } // end switch yys53 + } // end for yyj53 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ScaleStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj56 int + var yyb56 bool + var yyhl56 bool = l >= 0 + yyj56++ + if yyhl56 { + yyb56 = yyj56 > l + } else { + yyb56 = r.CheckBreak() + } + if yyb56 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj56++ + if yyhl56 { + yyb56 = yyj56 > l + } else { + yyb56 = r.CheckBreak() + } + if yyb56 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Selector = "" + } else { + x.Selector = string(r.DecodeString()) + } + for { + yyj56++ + if yyhl56 { + yyb56 = yyj56 > l + } else { + yyb56 = r.CheckBreak() + } + if yyb56 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj56-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CrossVersionObjectReference) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym59 := z.EncBinary() + _ = yym59 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep60 := !z.EncBinary() + yy2arr60 := z.EncBasicHandle().StructToArray + var yyq60 [3]bool + _, _, _ = yysep60, yyq60, yy2arr60 + const yyr60 bool = false + yyq60[2] = x.APIVersion != "" + var yynn60 int + if yyr60 || yy2arr60 { + r.EncodeArrayStart(3) + } else { + yynn60 = 2 + for _, b := range yyq60 { + if b { + yynn60++ + } + } + r.EncodeMapStart(yynn60) + yynn60 = 0 + } + if yyr60 || yy2arr60 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym62 := z.EncBinary() + _ = yym62 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym63 := z.EncBinary() + _ = yym63 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + if yyr60 || yy2arr60 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym65 := z.EncBinary() + _ = yym65 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym66 := z.EncBinary() + _ = yym66 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr60 || yy2arr60 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq60[2] { + yym68 := z.EncBinary() + _ = yym68 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq60[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym69 := z.EncBinary() + _ = yym69 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr60 || yy2arr60 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CrossVersionObjectReference) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym70 := z.DecBinary() + _ = yym70 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct71 := r.ContainerType() + if yyct71 == codecSelferValueTypeMap1234 { + yyl71 := r.ReadMapStart() + if yyl71 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl71, d) + } + } else if yyct71 == codecSelferValueTypeArray1234 { + yyl71 := r.ReadArrayStart() + if yyl71 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl71, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CrossVersionObjectReference) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys72Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys72Slc + var yyhl72 bool = l >= 0 + for yyj72 := 0; ; yyj72++ { + if yyhl72 { + if yyj72 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys72Slc = r.DecodeBytes(yys72Slc, true, true) + yys72 := string(yys72Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys72 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys72) + } // end switch yys72 + } // end for yyj72 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CrossVersionObjectReference) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj76 int + var yyb76 bool + var yyhl76 bool = l >= 0 + yyj76++ + if yyhl76 { + yyb76 = yyj76 > l + } else { + yyb76 = r.CheckBreak() + } + if yyb76 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj76++ + if yyhl76 { + yyb76 = yyj76 > l + } else { + yyb76 = r.CheckBreak() + } + if yyb76 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj76++ + if yyhl76 { + yyb76 = yyj76 > l + } else { + yyb76 = r.CheckBreak() + } + if yyb76 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + for { + yyj76++ + if yyhl76 { + yyb76 = yyj76 > l + } else { + yyb76 = r.CheckBreak() + } + if yyb76 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj76-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HorizontalPodAutoscalerSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym80 := z.EncBinary() + _ = yym80 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep81 := !z.EncBinary() + yy2arr81 := z.EncBasicHandle().StructToArray + var yyq81 [4]bool + _, _, _ = yysep81, yyq81, yy2arr81 + const yyr81 bool = false + yyq81[1] = x.MinReplicas != nil + yyq81[3] = x.TargetCPUUtilizationPercentage != nil + var yynn81 int + if yyr81 || yy2arr81 { + r.EncodeArrayStart(4) + } else { + yynn81 = 2 + for _, b := range yyq81 { + if b { + yynn81++ + } + } + r.EncodeMapStart(yynn81) + yynn81 = 0 + } + if yyr81 || yy2arr81 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy83 := &x.ScaleTargetRef + yy83.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("scaleTargetRef")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy84 := &x.ScaleTargetRef + yy84.CodecEncodeSelf(e) + } + if yyr81 || yy2arr81 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq81[1] { + if x.MinReplicas == nil { + r.EncodeNil() + } else { + yy86 := *x.MinReplicas + yym87 := z.EncBinary() + _ = yym87 + if false { + } else { + r.EncodeInt(int64(yy86)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq81[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("minReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.MinReplicas == nil { + r.EncodeNil() + } else { + yy88 := *x.MinReplicas + yym89 := z.EncBinary() + _ = yym89 + if false { + } else { + r.EncodeInt(int64(yy88)) + } + } + } + } + if yyr81 || yy2arr81 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym91 := z.EncBinary() + _ = yym91 + if false { + } else { + r.EncodeInt(int64(x.MaxReplicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("maxReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym92 := z.EncBinary() + _ = yym92 + if false { + } else { + r.EncodeInt(int64(x.MaxReplicas)) + } + } + if yyr81 || yy2arr81 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq81[3] { + if x.TargetCPUUtilizationPercentage == nil { + r.EncodeNil() + } else { + yy94 := *x.TargetCPUUtilizationPercentage + yym95 := z.EncBinary() + _ = yym95 + if false { + } else { + r.EncodeInt(int64(yy94)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq81[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("targetCPUUtilizationPercentage")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TargetCPUUtilizationPercentage == nil { + r.EncodeNil() + } else { + yy96 := *x.TargetCPUUtilizationPercentage + yym97 := z.EncBinary() + _ = yym97 + if false { + } else { + r.EncodeInt(int64(yy96)) + } + } + } + } + if yyr81 || yy2arr81 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HorizontalPodAutoscalerSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym98 := z.DecBinary() + _ = yym98 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct99 := r.ContainerType() + if yyct99 == codecSelferValueTypeMap1234 { + yyl99 := r.ReadMapStart() + if yyl99 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl99, d) + } + } else if yyct99 == codecSelferValueTypeArray1234 { + yyl99 := r.ReadArrayStart() + if yyl99 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl99, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HorizontalPodAutoscalerSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys100Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys100Slc + var yyhl100 bool = l >= 0 + for yyj100 := 0; ; yyj100++ { + if yyhl100 { + if yyj100 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys100Slc = r.DecodeBytes(yys100Slc, true, true) + yys100 := string(yys100Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys100 { + case "scaleTargetRef": + if r.TryDecodeAsNil() { + x.ScaleTargetRef = CrossVersionObjectReference{} + } else { + yyv101 := &x.ScaleTargetRef + yyv101.CodecDecodeSelf(d) + } + case "minReplicas": + if r.TryDecodeAsNil() { + if x.MinReplicas != nil { + x.MinReplicas = nil + } + } else { + if x.MinReplicas == nil { + x.MinReplicas = new(int32) + } + yym103 := z.DecBinary() + _ = yym103 + if false { + } else { + *((*int32)(x.MinReplicas)) = int32(r.DecodeInt(32)) + } + } + case "maxReplicas": + if r.TryDecodeAsNil() { + x.MaxReplicas = 0 + } else { + x.MaxReplicas = int32(r.DecodeInt(32)) + } + case "targetCPUUtilizationPercentage": + if r.TryDecodeAsNil() { + if x.TargetCPUUtilizationPercentage != nil { + x.TargetCPUUtilizationPercentage = nil + } + } else { + if x.TargetCPUUtilizationPercentage == nil { + x.TargetCPUUtilizationPercentage = new(int32) + } + yym106 := z.DecBinary() + _ = yym106 + if false { + } else { + *((*int32)(x.TargetCPUUtilizationPercentage)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys100) + } // end switch yys100 + } // end for yyj100 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HorizontalPodAutoscalerSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj107 int + var yyb107 bool + var yyhl107 bool = l >= 0 + yyj107++ + if yyhl107 { + yyb107 = yyj107 > l + } else { + yyb107 = r.CheckBreak() + } + if yyb107 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ScaleTargetRef = CrossVersionObjectReference{} + } else { + yyv108 := &x.ScaleTargetRef + yyv108.CodecDecodeSelf(d) + } + yyj107++ + if yyhl107 { + yyb107 = yyj107 > l + } else { + yyb107 = r.CheckBreak() + } + if yyb107 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.MinReplicas != nil { + x.MinReplicas = nil + } + } else { + if x.MinReplicas == nil { + x.MinReplicas = new(int32) + } + yym110 := z.DecBinary() + _ = yym110 + if false { + } else { + *((*int32)(x.MinReplicas)) = int32(r.DecodeInt(32)) + } + } + yyj107++ + if yyhl107 { + yyb107 = yyj107 > l + } else { + yyb107 = r.CheckBreak() + } + if yyb107 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MaxReplicas = 0 + } else { + x.MaxReplicas = int32(r.DecodeInt(32)) + } + yyj107++ + if yyhl107 { + yyb107 = yyj107 > l + } else { + yyb107 = r.CheckBreak() + } + if yyb107 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.TargetCPUUtilizationPercentage != nil { + x.TargetCPUUtilizationPercentage = nil + } + } else { + if x.TargetCPUUtilizationPercentage == nil { + x.TargetCPUUtilizationPercentage = new(int32) + } + yym113 := z.DecBinary() + _ = yym113 + if false { + } else { + *((*int32)(x.TargetCPUUtilizationPercentage)) = int32(r.DecodeInt(32)) + } + } + for { + yyj107++ + if yyhl107 { + yyb107 = yyj107 > l + } else { + yyb107 = r.CheckBreak() + } + if yyb107 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj107-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HorizontalPodAutoscalerStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym114 := z.EncBinary() + _ = yym114 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep115 := !z.EncBinary() + yy2arr115 := z.EncBasicHandle().StructToArray + var yyq115 [5]bool + _, _, _ = yysep115, yyq115, yy2arr115 + const yyr115 bool = false + yyq115[0] = x.ObservedGeneration != nil + yyq115[1] = x.LastScaleTime != nil + yyq115[4] = x.CurrentCPUUtilizationPercentage != nil + var yynn115 int + if yyr115 || yy2arr115 { + r.EncodeArrayStart(5) + } else { + yynn115 = 2 + for _, b := range yyq115 { + if b { + yynn115++ + } + } + r.EncodeMapStart(yynn115) + yynn115 = 0 + } + if yyr115 || yy2arr115 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq115[0] { + if x.ObservedGeneration == nil { + r.EncodeNil() + } else { + yy117 := *x.ObservedGeneration + yym118 := z.EncBinary() + _ = yym118 + if false { + } else { + r.EncodeInt(int64(yy117)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq115[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("observedGeneration")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ObservedGeneration == nil { + r.EncodeNil() + } else { + yy119 := *x.ObservedGeneration + yym120 := z.EncBinary() + _ = yym120 + if false { + } else { + r.EncodeInt(int64(yy119)) + } + } + } + } + if yyr115 || yy2arr115 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq115[1] { + if x.LastScaleTime == nil { + r.EncodeNil() + } else { + yym122 := z.EncBinary() + _ = yym122 + if false { + } else if z.HasExtensions() && z.EncExt(x.LastScaleTime) { + } else if yym122 { + z.EncBinaryMarshal(x.LastScaleTime) + } else if !yym122 && z.IsJSONHandle() { + z.EncJSONMarshal(x.LastScaleTime) + } else { + z.EncFallback(x.LastScaleTime) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq115[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastScaleTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LastScaleTime == nil { + r.EncodeNil() + } else { + yym123 := z.EncBinary() + _ = yym123 + if false { + } else if z.HasExtensions() && z.EncExt(x.LastScaleTime) { + } else if yym123 { + z.EncBinaryMarshal(x.LastScaleTime) + } else if !yym123 && z.IsJSONHandle() { + z.EncJSONMarshal(x.LastScaleTime) + } else { + z.EncFallback(x.LastScaleTime) + } + } + } + } + if yyr115 || yy2arr115 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym125 := z.EncBinary() + _ = yym125 + if false { + } else { + r.EncodeInt(int64(x.CurrentReplicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("currentReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym126 := z.EncBinary() + _ = yym126 + if false { + } else { + r.EncodeInt(int64(x.CurrentReplicas)) + } + } + if yyr115 || yy2arr115 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym128 := z.EncBinary() + _ = yym128 + if false { + } else { + r.EncodeInt(int64(x.DesiredReplicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("desiredReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym129 := z.EncBinary() + _ = yym129 + if false { + } else { + r.EncodeInt(int64(x.DesiredReplicas)) + } + } + if yyr115 || yy2arr115 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq115[4] { + if x.CurrentCPUUtilizationPercentage == nil { + r.EncodeNil() + } else { + yy131 := *x.CurrentCPUUtilizationPercentage + yym132 := z.EncBinary() + _ = yym132 + if false { + } else { + r.EncodeInt(int64(yy131)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq115[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("currentCPUUtilizationPercentage")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CurrentCPUUtilizationPercentage == nil { + r.EncodeNil() + } else { + yy133 := *x.CurrentCPUUtilizationPercentage + yym134 := z.EncBinary() + _ = yym134 + if false { + } else { + r.EncodeInt(int64(yy133)) + } + } + } + } + if yyr115 || yy2arr115 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HorizontalPodAutoscalerStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym135 := z.DecBinary() + _ = yym135 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct136 := r.ContainerType() + if yyct136 == codecSelferValueTypeMap1234 { + yyl136 := r.ReadMapStart() + if yyl136 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl136, d) + } + } else if yyct136 == codecSelferValueTypeArray1234 { + yyl136 := r.ReadArrayStart() + if yyl136 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl136, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HorizontalPodAutoscalerStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys137Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys137Slc + var yyhl137 bool = l >= 0 + for yyj137 := 0; ; yyj137++ { + if yyhl137 { + if yyj137 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys137Slc = r.DecodeBytes(yys137Slc, true, true) + yys137 := string(yys137Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys137 { + case "observedGeneration": + if r.TryDecodeAsNil() { + if x.ObservedGeneration != nil { + x.ObservedGeneration = nil + } + } else { + if x.ObservedGeneration == nil { + x.ObservedGeneration = new(int64) + } + yym139 := z.DecBinary() + _ = yym139 + if false { + } else { + *((*int64)(x.ObservedGeneration)) = int64(r.DecodeInt(64)) + } + } + case "lastScaleTime": + if r.TryDecodeAsNil() { + if x.LastScaleTime != nil { + x.LastScaleTime = nil + } + } else { + if x.LastScaleTime == nil { + x.LastScaleTime = new(pkg1_unversioned.Time) + } + yym141 := z.DecBinary() + _ = yym141 + if false { + } else if z.HasExtensions() && z.DecExt(x.LastScaleTime) { + } else if yym141 { + z.DecBinaryUnmarshal(x.LastScaleTime) + } else if !yym141 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.LastScaleTime) + } else { + z.DecFallback(x.LastScaleTime, false) + } + } + case "currentReplicas": + if r.TryDecodeAsNil() { + x.CurrentReplicas = 0 + } else { + x.CurrentReplicas = int32(r.DecodeInt(32)) + } + case "desiredReplicas": + if r.TryDecodeAsNil() { + x.DesiredReplicas = 0 + } else { + x.DesiredReplicas = int32(r.DecodeInt(32)) + } + case "currentCPUUtilizationPercentage": + if r.TryDecodeAsNil() { + if x.CurrentCPUUtilizationPercentage != nil { + x.CurrentCPUUtilizationPercentage = nil + } + } else { + if x.CurrentCPUUtilizationPercentage == nil { + x.CurrentCPUUtilizationPercentage = new(int32) + } + yym145 := z.DecBinary() + _ = yym145 + if false { + } else { + *((*int32)(x.CurrentCPUUtilizationPercentage)) = int32(r.DecodeInt(32)) + } + } + default: + z.DecStructFieldNotFound(-1, yys137) + } // end switch yys137 + } // end for yyj137 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HorizontalPodAutoscalerStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj146 int + var yyb146 bool + var yyhl146 bool = l >= 0 + yyj146++ + if yyhl146 { + yyb146 = yyj146 > l + } else { + yyb146 = r.CheckBreak() + } + if yyb146 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ObservedGeneration != nil { + x.ObservedGeneration = nil + } + } else { + if x.ObservedGeneration == nil { + x.ObservedGeneration = new(int64) + } + yym148 := z.DecBinary() + _ = yym148 + if false { + } else { + *((*int64)(x.ObservedGeneration)) = int64(r.DecodeInt(64)) + } + } + yyj146++ + if yyhl146 { + yyb146 = yyj146 > l + } else { + yyb146 = r.CheckBreak() + } + if yyb146 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.LastScaleTime != nil { + x.LastScaleTime = nil + } + } else { + if x.LastScaleTime == nil { + x.LastScaleTime = new(pkg1_unversioned.Time) + } + yym150 := z.DecBinary() + _ = yym150 + if false { + } else if z.HasExtensions() && z.DecExt(x.LastScaleTime) { + } else if yym150 { + z.DecBinaryUnmarshal(x.LastScaleTime) + } else if !yym150 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.LastScaleTime) + } else { + z.DecFallback(x.LastScaleTime, false) + } + } + yyj146++ + if yyhl146 { + yyb146 = yyj146 > l + } else { + yyb146 = r.CheckBreak() + } + if yyb146 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CurrentReplicas = 0 + } else { + x.CurrentReplicas = int32(r.DecodeInt(32)) + } + yyj146++ + if yyhl146 { + yyb146 = yyj146 > l + } else { + yyb146 = r.CheckBreak() + } + if yyb146 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DesiredReplicas = 0 + } else { + x.DesiredReplicas = int32(r.DecodeInt(32)) + } + yyj146++ + if yyhl146 { + yyb146 = yyj146 > l + } else { + yyb146 = r.CheckBreak() + } + if yyb146 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CurrentCPUUtilizationPercentage != nil { + x.CurrentCPUUtilizationPercentage = nil + } + } else { + if x.CurrentCPUUtilizationPercentage == nil { + x.CurrentCPUUtilizationPercentage = new(int32) + } + yym154 := z.DecBinary() + _ = yym154 + if false { + } else { + *((*int32)(x.CurrentCPUUtilizationPercentage)) = int32(r.DecodeInt(32)) + } + } + for { + yyj146++ + if yyhl146 { + yyb146 = yyj146 > l + } else { + yyb146 = r.CheckBreak() + } + if yyb146 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj146-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HorizontalPodAutoscaler) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym155 := z.EncBinary() + _ = yym155 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep156 := !z.EncBinary() + yy2arr156 := z.EncBasicHandle().StructToArray + var yyq156 [5]bool + _, _, _ = yysep156, yyq156, yy2arr156 + const yyr156 bool = false + yyq156[0] = x.Kind != "" + yyq156[1] = x.APIVersion != "" + yyq156[2] = true + yyq156[3] = true + yyq156[4] = true + var yynn156 int + if yyr156 || yy2arr156 { + r.EncodeArrayStart(5) + } else { + yynn156 = 0 + for _, b := range yyq156 { + if b { + yynn156++ + } + } + r.EncodeMapStart(yynn156) + yynn156 = 0 + } + if yyr156 || yy2arr156 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq156[0] { + yym158 := z.EncBinary() + _ = yym158 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq156[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym159 := z.EncBinary() + _ = yym159 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr156 || yy2arr156 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq156[1] { + yym161 := z.EncBinary() + _ = yym161 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq156[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym162 := z.EncBinary() + _ = yym162 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr156 || yy2arr156 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq156[2] { + yy164 := &x.ObjectMeta + yy164.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq156[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy165 := &x.ObjectMeta + yy165.CodecEncodeSelf(e) + } + } + if yyr156 || yy2arr156 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq156[3] { + yy167 := &x.Spec + yy167.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq156[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy168 := &x.Spec + yy168.CodecEncodeSelf(e) + } + } + if yyr156 || yy2arr156 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq156[4] { + yy170 := &x.Status + yy170.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq156[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy171 := &x.Status + yy171.CodecEncodeSelf(e) + } + } + if yyr156 || yy2arr156 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HorizontalPodAutoscaler) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym172 := z.DecBinary() + _ = yym172 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct173 := r.ContainerType() + if yyct173 == codecSelferValueTypeMap1234 { + yyl173 := r.ReadMapStart() + if yyl173 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl173, d) + } + } else if yyct173 == codecSelferValueTypeArray1234 { + yyl173 := r.ReadArrayStart() + if yyl173 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl173, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HorizontalPodAutoscaler) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys174Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys174Slc + var yyhl174 bool = l >= 0 + for yyj174 := 0; ; yyj174++ { + if yyhl174 { + if yyj174 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys174Slc = r.DecodeBytes(yys174Slc, true, true) + yys174 := string(yys174Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys174 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv177 := &x.ObjectMeta + yyv177.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = HorizontalPodAutoscalerSpec{} + } else { + yyv178 := &x.Spec + yyv178.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = HorizontalPodAutoscalerStatus{} + } else { + yyv179 := &x.Status + yyv179.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys174) + } // end switch yys174 + } // end for yyj174 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HorizontalPodAutoscaler) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj180 int + var yyb180 bool + var yyhl180 bool = l >= 0 + yyj180++ + if yyhl180 { + yyb180 = yyj180 > l + } else { + yyb180 = r.CheckBreak() + } + if yyb180 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj180++ + if yyhl180 { + yyb180 = yyj180 > l + } else { + yyb180 = r.CheckBreak() + } + if yyb180 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj180++ + if yyhl180 { + yyb180 = yyj180 > l + } else { + yyb180 = r.CheckBreak() + } + if yyb180 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv183 := &x.ObjectMeta + yyv183.CodecDecodeSelf(d) + } + yyj180++ + if yyhl180 { + yyb180 = yyj180 > l + } else { + yyb180 = r.CheckBreak() + } + if yyb180 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = HorizontalPodAutoscalerSpec{} + } else { + yyv184 := &x.Spec + yyv184.CodecDecodeSelf(d) + } + yyj180++ + if yyhl180 { + yyb180 = yyj180 > l + } else { + yyb180 = r.CheckBreak() + } + if yyb180 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = HorizontalPodAutoscalerStatus{} + } else { + yyv185 := &x.Status + yyv185.CodecDecodeSelf(d) + } + for { + yyj180++ + if yyhl180 { + yyb180 = yyj180 > l + } else { + yyb180 = r.CheckBreak() + } + if yyb180 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj180-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HorizontalPodAutoscalerList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym186 := z.EncBinary() + _ = yym186 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep187 := !z.EncBinary() + yy2arr187 := z.EncBasicHandle().StructToArray + var yyq187 [4]bool + _, _, _ = yysep187, yyq187, yy2arr187 + const yyr187 bool = false + yyq187[0] = x.Kind != "" + yyq187[1] = x.APIVersion != "" + yyq187[2] = true + var yynn187 int + if yyr187 || yy2arr187 { + r.EncodeArrayStart(4) + } else { + yynn187 = 1 + for _, b := range yyq187 { + if b { + yynn187++ + } + } + r.EncodeMapStart(yynn187) + yynn187 = 0 + } + if yyr187 || yy2arr187 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq187[0] { + yym189 := z.EncBinary() + _ = yym189 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq187[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym190 := z.EncBinary() + _ = yym190 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr187 || yy2arr187 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq187[1] { + yym192 := z.EncBinary() + _ = yym192 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq187[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym193 := z.EncBinary() + _ = yym193 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr187 || yy2arr187 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq187[2] { + yy195 := &x.ListMeta + yym196 := z.EncBinary() + _ = yym196 + if false { + } else if z.HasExtensions() && z.EncExt(yy195) { + } else { + z.EncFallback(yy195) + } + } else { + r.EncodeNil() + } + } else { + if yyq187[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy197 := &x.ListMeta + yym198 := z.EncBinary() + _ = yym198 + if false { + } else if z.HasExtensions() && z.EncExt(yy197) { + } else { + z.EncFallback(yy197) + } + } + } + if yyr187 || yy2arr187 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym200 := z.EncBinary() + _ = yym200 + if false { + } else { + h.encSliceHorizontalPodAutoscaler(([]HorizontalPodAutoscaler)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym201 := z.EncBinary() + _ = yym201 + if false { + } else { + h.encSliceHorizontalPodAutoscaler(([]HorizontalPodAutoscaler)(x.Items), e) + } + } + } + if yyr187 || yy2arr187 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HorizontalPodAutoscalerList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym202 := z.DecBinary() + _ = yym202 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct203 := r.ContainerType() + if yyct203 == codecSelferValueTypeMap1234 { + yyl203 := r.ReadMapStart() + if yyl203 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl203, d) + } + } else if yyct203 == codecSelferValueTypeArray1234 { + yyl203 := r.ReadArrayStart() + if yyl203 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl203, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HorizontalPodAutoscalerList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys204Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys204Slc + var yyhl204 bool = l >= 0 + for yyj204 := 0; ; yyj204++ { + if yyhl204 { + if yyj204 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys204Slc = r.DecodeBytes(yys204Slc, true, true) + yys204 := string(yys204Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys204 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv207 := &x.ListMeta + yym208 := z.DecBinary() + _ = yym208 + if false { + } else if z.HasExtensions() && z.DecExt(yyv207) { + } else { + z.DecFallback(yyv207, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv209 := &x.Items + yym210 := z.DecBinary() + _ = yym210 + if false { + } else { + h.decSliceHorizontalPodAutoscaler((*[]HorizontalPodAutoscaler)(yyv209), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys204) + } // end switch yys204 + } // end for yyj204 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HorizontalPodAutoscalerList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj211 int + var yyb211 bool + var yyhl211 bool = l >= 0 + yyj211++ + if yyhl211 { + yyb211 = yyj211 > l + } else { + yyb211 = r.CheckBreak() + } + if yyb211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj211++ + if yyhl211 { + yyb211 = yyj211 > l + } else { + yyb211 = r.CheckBreak() + } + if yyb211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj211++ + if yyhl211 { + yyb211 = yyj211 > l + } else { + yyb211 = r.CheckBreak() + } + if yyb211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv214 := &x.ListMeta + yym215 := z.DecBinary() + _ = yym215 + if false { + } else if z.HasExtensions() && z.DecExt(yyv214) { + } else { + z.DecFallback(yyv214, false) + } + } + yyj211++ + if yyhl211 { + yyb211 = yyj211 > l + } else { + yyb211 = r.CheckBreak() + } + if yyb211 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv216 := &x.Items + yym217 := z.DecBinary() + _ = yym217 + if false { + } else { + h.decSliceHorizontalPodAutoscaler((*[]HorizontalPodAutoscaler)(yyv216), d) + } + } + for { + yyj211++ + if yyhl211 { + yyb211 = yyj211 > l + } else { + yyb211 = r.CheckBreak() + } + if yyb211 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj211-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) encSliceHorizontalPodAutoscaler(v []HorizontalPodAutoscaler, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv218 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy219 := &yyv218 + yy219.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceHorizontalPodAutoscaler(v *[]HorizontalPodAutoscaler, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv220 := *v + yyh220, yyl220 := z.DecSliceHelperStart() + var yyc220 bool + if yyl220 == 0 { + if yyv220 == nil { + yyv220 = []HorizontalPodAutoscaler{} + yyc220 = true + } else if len(yyv220) != 0 { + yyv220 = yyv220[:0] + yyc220 = true + } + } else if yyl220 > 0 { + var yyrr220, yyrl220 int + var yyrt220 bool + if yyl220 > cap(yyv220) { + + yyrg220 := len(yyv220) > 0 + yyv2220 := yyv220 + yyrl220, yyrt220 = z.DecInferLen(yyl220, z.DecBasicHandle().MaxInitLen, 360) + if yyrt220 { + if yyrl220 <= cap(yyv220) { + yyv220 = yyv220[:yyrl220] + } else { + yyv220 = make([]HorizontalPodAutoscaler, yyrl220) + } + } else { + yyv220 = make([]HorizontalPodAutoscaler, yyrl220) + } + yyc220 = true + yyrr220 = len(yyv220) + if yyrg220 { + copy(yyv220, yyv2220) + } + } else if yyl220 != len(yyv220) { + yyv220 = yyv220[:yyl220] + yyc220 = true + } + yyj220 := 0 + for ; yyj220 < yyrr220; yyj220++ { + yyh220.ElemContainerState(yyj220) + if r.TryDecodeAsNil() { + yyv220[yyj220] = HorizontalPodAutoscaler{} + } else { + yyv221 := &yyv220[yyj220] + yyv221.CodecDecodeSelf(d) + } + + } + if yyrt220 { + for ; yyj220 < yyl220; yyj220++ { + yyv220 = append(yyv220, HorizontalPodAutoscaler{}) + yyh220.ElemContainerState(yyj220) + if r.TryDecodeAsNil() { + yyv220[yyj220] = HorizontalPodAutoscaler{} + } else { + yyv222 := &yyv220[yyj220] + yyv222.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj220 := 0 + for ; !r.CheckBreak(); yyj220++ { + + if yyj220 >= len(yyv220) { + yyv220 = append(yyv220, HorizontalPodAutoscaler{}) // var yyz220 HorizontalPodAutoscaler + yyc220 = true + } + yyh220.ElemContainerState(yyj220) + if yyj220 < len(yyv220) { + if r.TryDecodeAsNil() { + yyv220[yyj220] = HorizontalPodAutoscaler{} + } else { + yyv223 := &yyv220[yyj220] + yyv223.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj220 < len(yyv220) { + yyv220 = yyv220[:yyj220] + yyc220 = true + } else if yyj220 == 0 && yyv220 == nil { + yyv220 = []HorizontalPodAutoscaler{} + yyc220 = true + } + } + yyh220.End() + if yyc220 { + *v = yyv220 + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/types.go b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/types.go new file mode 100644 index 00000000..04a2874a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/types.go @@ -0,0 +1,120 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package autoscaling + +import ( + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// Scale represents a scaling request for a resource. +type Scale struct { + unversioned.TypeMeta `json:",inline"` + // Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata. + api.ObjectMeta `json:"metadata,omitempty"` + + // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. + Spec ScaleSpec `json:"spec,omitempty"` + + // current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only. + Status ScaleStatus `json:"status,omitempty"` +} + +// ScaleSpec describes the attributes of a scale subresource. +type ScaleSpec struct { + // desired number of instances for the scaled object. + Replicas int32 `json:"replicas,omitempty"` +} + +// ScaleStatus represents the current status of a scale subresource. +type ScaleStatus struct { + // actual number of observed instances of the scaled object. + Replicas int32 `json:"replicas"` + + // label query over pods that should match the replicas count. This is same + // as the label selector but in the string format to avoid introspection + // by clients. The string will be in the same format as the query-param syntax. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors + Selector string `json:"selector,omitempty"` +} + +// CrossVersionObjectReference contains enough information to let you identify the referred resource. +type CrossVersionObjectReference struct { + // Kind of the referent; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds" + Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` + // Name of the referent; More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names + Name string `json:"name" protobuf:"bytes,2,opt,name=name"` + // API version of the referent + APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,3,opt,name=apiVersion"` +} + +// specification of a horizontal pod autoscaler. +type HorizontalPodAutoscalerSpec struct { + // reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption + // and will set the desired number of pods by using its Scale subresource. + ScaleTargetRef CrossVersionObjectReference `json:"scaleTargetRef"` + // lower limit for the number of pods that can be set by the autoscaler, default 1. + MinReplicas *int32 `json:"minReplicas,omitempty"` + // upper limit for the number of pods that can be set by the autoscaler. It cannot be smaller than MinReplicas. + MaxReplicas int32 `json:"maxReplicas"` + // target average CPU utilization (represented as a percentage of requested CPU) over all the pods; + // if not specified the default autoscaling policy will be used. + TargetCPUUtilizationPercentage *int32 `json:"targetCPUUtilizationPercentage,omitempty"` +} + +// current status of a horizontal pod autoscaler +type HorizontalPodAutoscalerStatus struct { + // most recent generation observed by this autoscaler. + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` + + // last time the HorizontalPodAutoscaler scaled the number of pods; + // used by the autoscaler to control how often the number of pods is changed. + LastScaleTime *unversioned.Time `json:"lastScaleTime,omitempty"` + + // current number of replicas of pods managed by this autoscaler. + CurrentReplicas int32 `json:"currentReplicas"` + + // desired number of replicas of pods managed by this autoscaler. + DesiredReplicas int32 `json:"desiredReplicas"` + + // current average CPU utilization over all pods, represented as a percentage of requested CPU, + // e.g. 70 means that an average pod is using now 70% of its requested CPU. + CurrentCPUUtilizationPercentage *int32 `json:"currentCPUUtilizationPercentage,omitempty"` +} + +// +genclient=true + +// configuration of a horizontal pod autoscaler. +type HorizontalPodAutoscaler struct { + unversioned.TypeMeta `json:",inline"` + api.ObjectMeta `json:"metadata,omitempty"` + + // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. + Spec HorizontalPodAutoscalerSpec `json:"spec,omitempty"` + + // current information about the autoscaler. + Status HorizontalPodAutoscalerStatus `json:"status,omitempty"` +} + +// list of horizontal pod autoscaler objects. +type HorizontalPodAutoscalerList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + // list of horizontal pod autoscaler objects. + Items []HorizontalPodAutoscaler `json:"items"` +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/zz_generated.deepcopy.go new file mode 100644 index 00000000..014ec1eb --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/autoscaling/zz_generated.deepcopy.go @@ -0,0 +1,186 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package autoscaling + +import ( + api "k8s.io/client-go/1.4/pkg/api" + unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + conversion "k8s.io/client-go/1.4/pkg/conversion" + runtime "k8s.io/client-go/1.4/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_CrossVersionObjectReference, InType: reflect.TypeOf(&CrossVersionObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_HorizontalPodAutoscaler, InType: reflect.TypeOf(&HorizontalPodAutoscaler{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_HorizontalPodAutoscalerList, InType: reflect.TypeOf(&HorizontalPodAutoscalerList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_HorizontalPodAutoscalerSpec, InType: reflect.TypeOf(&HorizontalPodAutoscalerSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_HorizontalPodAutoscalerStatus, InType: reflect.TypeOf(&HorizontalPodAutoscalerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_Scale, InType: reflect.TypeOf(&Scale{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_ScaleSpec, InType: reflect.TypeOf(&ScaleSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_ScaleStatus, InType: reflect.TypeOf(&ScaleStatus{})}, + ) +} + +func DeepCopy_autoscaling_CrossVersionObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CrossVersionObjectReference) + out := out.(*CrossVersionObjectReference) + out.Kind = in.Kind + out.Name = in.Name + out.APIVersion = in.APIVersion + return nil + } +} + +func DeepCopy_autoscaling_HorizontalPodAutoscaler(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscaler) + out := out.(*HorizontalPodAutoscaler) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_autoscaling_HorizontalPodAutoscalerSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_autoscaling_HorizontalPodAutoscalerStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_autoscaling_HorizontalPodAutoscalerList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerList) + out := out.(*HorizontalPodAutoscalerList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]HorizontalPodAutoscaler, len(*in)) + for i := range *in { + if err := DeepCopy_autoscaling_HorizontalPodAutoscaler(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_autoscaling_HorizontalPodAutoscalerSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerSpec) + out := out.(*HorizontalPodAutoscalerSpec) + out.ScaleTargetRef = in.ScaleTargetRef + if in.MinReplicas != nil { + in, out := &in.MinReplicas, &out.MinReplicas + *out = new(int32) + **out = **in + } else { + out.MinReplicas = nil + } + out.MaxReplicas = in.MaxReplicas + if in.TargetCPUUtilizationPercentage != nil { + in, out := &in.TargetCPUUtilizationPercentage, &out.TargetCPUUtilizationPercentage + *out = new(int32) + **out = **in + } else { + out.TargetCPUUtilizationPercentage = nil + } + return nil + } +} + +func DeepCopy_autoscaling_HorizontalPodAutoscalerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerStatus) + out := out.(*HorizontalPodAutoscalerStatus) + if in.ObservedGeneration != nil { + in, out := &in.ObservedGeneration, &out.ObservedGeneration + *out = new(int64) + **out = **in + } else { + out.ObservedGeneration = nil + } + if in.LastScaleTime != nil { + in, out := &in.LastScaleTime, &out.LastScaleTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.LastScaleTime = nil + } + out.CurrentReplicas = in.CurrentReplicas + out.DesiredReplicas = in.DesiredReplicas + if in.CurrentCPUUtilizationPercentage != nil { + in, out := &in.CurrentCPUUtilizationPercentage, &out.CurrentCPUUtilizationPercentage + *out = new(int32) + **out = **in + } else { + out.CurrentCPUUtilizationPercentage = nil + } + return nil + } +} + +func DeepCopy_autoscaling_Scale(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Scale) + out := out.(*Scale) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + out.Status = in.Status + return nil + } +} + +func DeepCopy_autoscaling_ScaleSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleSpec) + out := out.(*ScaleSpec) + out.Replicas = in.Replicas + return nil + } +} + +func DeepCopy_autoscaling_ScaleStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleStatus) + out := out.(*ScaleStatus) + out.Replicas = in.Replicas + out.Selector = in.Selector + return nil + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/batch/doc.go b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/doc.go new file mode 100644 index 00000000..c6b203cd --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package batch diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/batch/register.go b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/register.go new file mode 100644 index 00000000..f62ea35d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/register.go @@ -0,0 +1,57 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package batch + +import ( + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// GroupName is the group name use in this package +const GroupName = "batch" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) unversioned.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) unversioned.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Job{}, + &JobList{}, + &JobTemplate{}, + &ScheduledJob{}, + &ScheduledJobList{}, + &api.ListOptions{}, + ) + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/batch/types.generated.go b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/types.generated.go new file mode 100644 index 00000000..f22f1007 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/types.generated.go @@ -0,0 +1,4676 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// ************************************************************ +// DO NOT EDIT. +// THIS FILE IS AUTO-GENERATED BY codecgen. +// ************************************************************ + +package batch + +import ( + "errors" + "fmt" + codec1978 "github.com/ugorji/go/codec" + pkg2_api "k8s.io/client-go/1.4/pkg/api" + pkg4_resource "k8s.io/client-go/1.4/pkg/api/resource" + pkg1_unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + pkg3_types "k8s.io/client-go/1.4/pkg/types" + pkg5_intstr "k8s.io/client-go/1.4/pkg/util/intstr" + "reflect" + "runtime" + time "time" +) + +const ( + // ----- content types ---- + codecSelferC_UTF81234 = 1 + codecSelferC_RAW1234 = 0 + // ----- value types used ---- + codecSelferValueTypeArray1234 = 10 + codecSelferValueTypeMap1234 = 9 + // ----- containerStateValues ---- + codecSelfer_containerMapKey1234 = 2 + codecSelfer_containerMapValue1234 = 3 + codecSelfer_containerMapEnd1234 = 4 + codecSelfer_containerArrayElem1234 = 6 + codecSelfer_containerArrayEnd1234 = 7 +) + +var ( + codecSelferBitsize1234 = uint8(reflect.TypeOf(uint(0)).Bits()) + codecSelferOnlyMapOrArrayEncodeToStructErr1234 = errors.New(`only encoded map or array can be decoded into a struct`) +) + +type codecSelfer1234 struct{} + +func init() { + if codec1978.GenVersion != 5 { + _, file, _, _ := runtime.Caller(0) + err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", + 5, codec1978.GenVersion, file) + panic(err) + } + if false { // reference the types, but skip this branch at build/run time + var v0 pkg2_api.ObjectMeta + var v1 pkg4_resource.Quantity + var v2 pkg1_unversioned.TypeMeta + var v3 pkg3_types.UID + var v4 pkg5_intstr.IntOrString + var v5 time.Time + _, _, _, _, _, _ = v0, v1, v2, v3, v4, v5 + } +} + +func (x *Job) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [5]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.Kind != "" + yyq2[1] = x.APIVersion != "" + yyq2[2] = true + yyq2[3] = true + yyq2[4] = true + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(5) + } else { + yynn2 = 0 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[0] { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + yy10 := &x.ObjectMeta + yy10.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy11 := &x.ObjectMeta + yy11.CodecEncodeSelf(e) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[3] { + yy13 := &x.Spec + yy13.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy14 := &x.Spec + yy14.CodecEncodeSelf(e) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[4] { + yy16 := &x.Status + yy16.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq2[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy17 := &x.Status + yy17.CodecEncodeSelf(e) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Job) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym18 := z.DecBinary() + _ = yym18 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct19 := r.ContainerType() + if yyct19 == codecSelferValueTypeMap1234 { + yyl19 := r.ReadMapStart() + if yyl19 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl19, d) + } + } else if yyct19 == codecSelferValueTypeArray1234 { + yyl19 := r.ReadArrayStart() + if yyl19 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl19, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Job) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys20Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys20Slc + var yyhl20 bool = l >= 0 + for yyj20 := 0; ; yyj20++ { + if yyhl20 { + if yyj20 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys20Slc = r.DecodeBytes(yys20Slc, true, true) + yys20 := string(yys20Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys20 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv23 := &x.ObjectMeta + yyv23.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = JobSpec{} + } else { + yyv24 := &x.Spec + yyv24.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = JobStatus{} + } else { + yyv25 := &x.Status + yyv25.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys20) + } // end switch yys20 + } // end for yyj20 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Job) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj26 int + var yyb26 bool + var yyhl26 bool = l >= 0 + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv29 := &x.ObjectMeta + yyv29.CodecDecodeSelf(d) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = JobSpec{} + } else { + yyv30 := &x.Spec + yyv30.CodecDecodeSelf(d) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = JobStatus{} + } else { + yyv31 := &x.Status + yyv31.CodecDecodeSelf(d) + } + for { + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj26-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *JobList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym32 := z.EncBinary() + _ = yym32 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep33 := !z.EncBinary() + yy2arr33 := z.EncBasicHandle().StructToArray + var yyq33 [4]bool + _, _, _ = yysep33, yyq33, yy2arr33 + const yyr33 bool = false + yyq33[0] = x.Kind != "" + yyq33[1] = x.APIVersion != "" + yyq33[2] = true + var yynn33 int + if yyr33 || yy2arr33 { + r.EncodeArrayStart(4) + } else { + yynn33 = 1 + for _, b := range yyq33 { + if b { + yynn33++ + } + } + r.EncodeMapStart(yynn33) + yynn33 = 0 + } + if yyr33 || yy2arr33 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq33[0] { + yym35 := z.EncBinary() + _ = yym35 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq33[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym36 := z.EncBinary() + _ = yym36 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr33 || yy2arr33 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq33[1] { + yym38 := z.EncBinary() + _ = yym38 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq33[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym39 := z.EncBinary() + _ = yym39 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr33 || yy2arr33 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq33[2] { + yy41 := &x.ListMeta + yym42 := z.EncBinary() + _ = yym42 + if false { + } else if z.HasExtensions() && z.EncExt(yy41) { + } else { + z.EncFallback(yy41) + } + } else { + r.EncodeNil() + } + } else { + if yyq33[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy43 := &x.ListMeta + yym44 := z.EncBinary() + _ = yym44 + if false { + } else if z.HasExtensions() && z.EncExt(yy43) { + } else { + z.EncFallback(yy43) + } + } + } + if yyr33 || yy2arr33 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym46 := z.EncBinary() + _ = yym46 + if false { + } else { + h.encSliceJob(([]Job)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym47 := z.EncBinary() + _ = yym47 + if false { + } else { + h.encSliceJob(([]Job)(x.Items), e) + } + } + } + if yyr33 || yy2arr33 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *JobList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym48 := z.DecBinary() + _ = yym48 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct49 := r.ContainerType() + if yyct49 == codecSelferValueTypeMap1234 { + yyl49 := r.ReadMapStart() + if yyl49 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl49, d) + } + } else if yyct49 == codecSelferValueTypeArray1234 { + yyl49 := r.ReadArrayStart() + if yyl49 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl49, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *JobList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys50Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys50Slc + var yyhl50 bool = l >= 0 + for yyj50 := 0; ; yyj50++ { + if yyhl50 { + if yyj50 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys50Slc = r.DecodeBytes(yys50Slc, true, true) + yys50 := string(yys50Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys50 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv53 := &x.ListMeta + yym54 := z.DecBinary() + _ = yym54 + if false { + } else if z.HasExtensions() && z.DecExt(yyv53) { + } else { + z.DecFallback(yyv53, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv55 := &x.Items + yym56 := z.DecBinary() + _ = yym56 + if false { + } else { + h.decSliceJob((*[]Job)(yyv55), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys50) + } // end switch yys50 + } // end for yyj50 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *JobList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj57 int + var yyb57 bool + var yyhl57 bool = l >= 0 + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv60 := &x.ListMeta + yym61 := z.DecBinary() + _ = yym61 + if false { + } else if z.HasExtensions() && z.DecExt(yyv60) { + } else { + z.DecFallback(yyv60, false) + } + } + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv62 := &x.Items + yym63 := z.DecBinary() + _ = yym63 + if false { + } else { + h.decSliceJob((*[]Job)(yyv62), d) + } + } + for { + yyj57++ + if yyhl57 { + yyb57 = yyj57 > l + } else { + yyb57 = r.CheckBreak() + } + if yyb57 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj57-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *JobTemplate) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym64 := z.EncBinary() + _ = yym64 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep65 := !z.EncBinary() + yy2arr65 := z.EncBasicHandle().StructToArray + var yyq65 [4]bool + _, _, _ = yysep65, yyq65, yy2arr65 + const yyr65 bool = false + yyq65[0] = x.Kind != "" + yyq65[1] = x.APIVersion != "" + yyq65[2] = true + yyq65[3] = true + var yynn65 int + if yyr65 || yy2arr65 { + r.EncodeArrayStart(4) + } else { + yynn65 = 0 + for _, b := range yyq65 { + if b { + yynn65++ + } + } + r.EncodeMapStart(yynn65) + yynn65 = 0 + } + if yyr65 || yy2arr65 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq65[0] { + yym67 := z.EncBinary() + _ = yym67 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq65[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym68 := z.EncBinary() + _ = yym68 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr65 || yy2arr65 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq65[1] { + yym70 := z.EncBinary() + _ = yym70 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq65[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym71 := z.EncBinary() + _ = yym71 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr65 || yy2arr65 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq65[2] { + yy73 := &x.ObjectMeta + yy73.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq65[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy74 := &x.ObjectMeta + yy74.CodecEncodeSelf(e) + } + } + if yyr65 || yy2arr65 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq65[3] { + yy76 := &x.Template + yy76.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq65[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy77 := &x.Template + yy77.CodecEncodeSelf(e) + } + } + if yyr65 || yy2arr65 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *JobTemplate) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym78 := z.DecBinary() + _ = yym78 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct79 := r.ContainerType() + if yyct79 == codecSelferValueTypeMap1234 { + yyl79 := r.ReadMapStart() + if yyl79 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl79, d) + } + } else if yyct79 == codecSelferValueTypeArray1234 { + yyl79 := r.ReadArrayStart() + if yyl79 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl79, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *JobTemplate) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys80Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys80Slc + var yyhl80 bool = l >= 0 + for yyj80 := 0; ; yyj80++ { + if yyhl80 { + if yyj80 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys80Slc = r.DecodeBytes(yys80Slc, true, true) + yys80 := string(yys80Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys80 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv83 := &x.ObjectMeta + yyv83.CodecDecodeSelf(d) + } + case "template": + if r.TryDecodeAsNil() { + x.Template = JobTemplateSpec{} + } else { + yyv84 := &x.Template + yyv84.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys80) + } // end switch yys80 + } // end for yyj80 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *JobTemplate) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj85 int + var yyb85 bool + var yyhl85 bool = l >= 0 + yyj85++ + if yyhl85 { + yyb85 = yyj85 > l + } else { + yyb85 = r.CheckBreak() + } + if yyb85 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj85++ + if yyhl85 { + yyb85 = yyj85 > l + } else { + yyb85 = r.CheckBreak() + } + if yyb85 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj85++ + if yyhl85 { + yyb85 = yyj85 > l + } else { + yyb85 = r.CheckBreak() + } + if yyb85 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv88 := &x.ObjectMeta + yyv88.CodecDecodeSelf(d) + } + yyj85++ + if yyhl85 { + yyb85 = yyj85 > l + } else { + yyb85 = r.CheckBreak() + } + if yyb85 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Template = JobTemplateSpec{} + } else { + yyv89 := &x.Template + yyv89.CodecDecodeSelf(d) + } + for { + yyj85++ + if yyhl85 { + yyb85 = yyj85 > l + } else { + yyb85 = r.CheckBreak() + } + if yyb85 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj85-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *JobTemplateSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym90 := z.EncBinary() + _ = yym90 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep91 := !z.EncBinary() + yy2arr91 := z.EncBasicHandle().StructToArray + var yyq91 [2]bool + _, _, _ = yysep91, yyq91, yy2arr91 + const yyr91 bool = false + yyq91[0] = true + yyq91[1] = true + var yynn91 int + if yyr91 || yy2arr91 { + r.EncodeArrayStart(2) + } else { + yynn91 = 0 + for _, b := range yyq91 { + if b { + yynn91++ + } + } + r.EncodeMapStart(yynn91) + yynn91 = 0 + } + if yyr91 || yy2arr91 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq91[0] { + yy93 := &x.ObjectMeta + yy93.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq91[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy94 := &x.ObjectMeta + yy94.CodecEncodeSelf(e) + } + } + if yyr91 || yy2arr91 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq91[1] { + yy96 := &x.Spec + yy96.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq91[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy97 := &x.Spec + yy97.CodecEncodeSelf(e) + } + } + if yyr91 || yy2arr91 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *JobTemplateSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym98 := z.DecBinary() + _ = yym98 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct99 := r.ContainerType() + if yyct99 == codecSelferValueTypeMap1234 { + yyl99 := r.ReadMapStart() + if yyl99 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl99, d) + } + } else if yyct99 == codecSelferValueTypeArray1234 { + yyl99 := r.ReadArrayStart() + if yyl99 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl99, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *JobTemplateSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys100Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys100Slc + var yyhl100 bool = l >= 0 + for yyj100 := 0; ; yyj100++ { + if yyhl100 { + if yyj100 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys100Slc = r.DecodeBytes(yys100Slc, true, true) + yys100 := string(yys100Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys100 { + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv101 := &x.ObjectMeta + yyv101.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = JobSpec{} + } else { + yyv102 := &x.Spec + yyv102.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys100) + } // end switch yys100 + } // end for yyj100 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *JobTemplateSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj103 int + var yyb103 bool + var yyhl103 bool = l >= 0 + yyj103++ + if yyhl103 { + yyb103 = yyj103 > l + } else { + yyb103 = r.CheckBreak() + } + if yyb103 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv104 := &x.ObjectMeta + yyv104.CodecDecodeSelf(d) + } + yyj103++ + if yyhl103 { + yyb103 = yyj103 > l + } else { + yyb103 = r.CheckBreak() + } + if yyb103 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = JobSpec{} + } else { + yyv105 := &x.Spec + yyv105.CodecDecodeSelf(d) + } + for { + yyj103++ + if yyhl103 { + yyb103 = yyj103 > l + } else { + yyb103 = r.CheckBreak() + } + if yyb103 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj103-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *JobSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym106 := z.EncBinary() + _ = yym106 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep107 := !z.EncBinary() + yy2arr107 := z.EncBasicHandle().StructToArray + var yyq107 [6]bool + _, _, _ = yysep107, yyq107, yy2arr107 + const yyr107 bool = false + yyq107[0] = x.Parallelism != nil + yyq107[1] = x.Completions != nil + yyq107[2] = x.ActiveDeadlineSeconds != nil + yyq107[3] = x.Selector != nil + yyq107[4] = x.ManualSelector != nil + var yynn107 int + if yyr107 || yy2arr107 { + r.EncodeArrayStart(6) + } else { + yynn107 = 1 + for _, b := range yyq107 { + if b { + yynn107++ + } + } + r.EncodeMapStart(yynn107) + yynn107 = 0 + } + if yyr107 || yy2arr107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq107[0] { + if x.Parallelism == nil { + r.EncodeNil() + } else { + yy109 := *x.Parallelism + yym110 := z.EncBinary() + _ = yym110 + if false { + } else { + r.EncodeInt(int64(yy109)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq107[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("parallelism")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Parallelism == nil { + r.EncodeNil() + } else { + yy111 := *x.Parallelism + yym112 := z.EncBinary() + _ = yym112 + if false { + } else { + r.EncodeInt(int64(yy111)) + } + } + } + } + if yyr107 || yy2arr107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq107[1] { + if x.Completions == nil { + r.EncodeNil() + } else { + yy114 := *x.Completions + yym115 := z.EncBinary() + _ = yym115 + if false { + } else { + r.EncodeInt(int64(yy114)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq107[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("completions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Completions == nil { + r.EncodeNil() + } else { + yy116 := *x.Completions + yym117 := z.EncBinary() + _ = yym117 + if false { + } else { + r.EncodeInt(int64(yy116)) + } + } + } + } + if yyr107 || yy2arr107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq107[2] { + if x.ActiveDeadlineSeconds == nil { + r.EncodeNil() + } else { + yy119 := *x.ActiveDeadlineSeconds + yym120 := z.EncBinary() + _ = yym120 + if false { + } else { + r.EncodeInt(int64(yy119)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq107[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("activeDeadlineSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ActiveDeadlineSeconds == nil { + r.EncodeNil() + } else { + yy121 := *x.ActiveDeadlineSeconds + yym122 := z.EncBinary() + _ = yym122 + if false { + } else { + r.EncodeInt(int64(yy121)) + } + } + } + } + if yyr107 || yy2arr107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq107[3] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym124 := z.EncBinary() + _ = yym124 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq107[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym125 := z.EncBinary() + _ = yym125 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } + } + if yyr107 || yy2arr107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq107[4] { + if x.ManualSelector == nil { + r.EncodeNil() + } else { + yy127 := *x.ManualSelector + yym128 := z.EncBinary() + _ = yym128 + if false { + } else { + r.EncodeBool(bool(yy127)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq107[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("manualSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.ManualSelector == nil { + r.EncodeNil() + } else { + yy129 := *x.ManualSelector + yym130 := z.EncBinary() + _ = yym130 + if false { + } else { + r.EncodeBool(bool(yy129)) + } + } + } + } + if yyr107 || yy2arr107 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy132 := &x.Template + yy132.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy133 := &x.Template + yy133.CodecEncodeSelf(e) + } + if yyr107 || yy2arr107 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *JobSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym134 := z.DecBinary() + _ = yym134 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct135 := r.ContainerType() + if yyct135 == codecSelferValueTypeMap1234 { + yyl135 := r.ReadMapStart() + if yyl135 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl135, d) + } + } else if yyct135 == codecSelferValueTypeArray1234 { + yyl135 := r.ReadArrayStart() + if yyl135 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl135, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *JobSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys136Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys136Slc + var yyhl136 bool = l >= 0 + for yyj136 := 0; ; yyj136++ { + if yyhl136 { + if yyj136 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys136Slc = r.DecodeBytes(yys136Slc, true, true) + yys136 := string(yys136Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys136 { + case "parallelism": + if r.TryDecodeAsNil() { + if x.Parallelism != nil { + x.Parallelism = nil + } + } else { + if x.Parallelism == nil { + x.Parallelism = new(int32) + } + yym138 := z.DecBinary() + _ = yym138 + if false { + } else { + *((*int32)(x.Parallelism)) = int32(r.DecodeInt(32)) + } + } + case "completions": + if r.TryDecodeAsNil() { + if x.Completions != nil { + x.Completions = nil + } + } else { + if x.Completions == nil { + x.Completions = new(int32) + } + yym140 := z.DecBinary() + _ = yym140 + if false { + } else { + *((*int32)(x.Completions)) = int32(r.DecodeInt(32)) + } + } + case "activeDeadlineSeconds": + if r.TryDecodeAsNil() { + if x.ActiveDeadlineSeconds != nil { + x.ActiveDeadlineSeconds = nil + } + } else { + if x.ActiveDeadlineSeconds == nil { + x.ActiveDeadlineSeconds = new(int64) + } + yym142 := z.DecBinary() + _ = yym142 + if false { + } else { + *((*int64)(x.ActiveDeadlineSeconds)) = int64(r.DecodeInt(64)) + } + } + case "selector": + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym144 := z.DecBinary() + _ = yym144 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + case "manualSelector": + if r.TryDecodeAsNil() { + if x.ManualSelector != nil { + x.ManualSelector = nil + } + } else { + if x.ManualSelector == nil { + x.ManualSelector = new(bool) + } + yym146 := z.DecBinary() + _ = yym146 + if false { + } else { + *((*bool)(x.ManualSelector)) = r.DecodeBool() + } + } + case "template": + if r.TryDecodeAsNil() { + x.Template = pkg2_api.PodTemplateSpec{} + } else { + yyv147 := &x.Template + yyv147.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys136) + } // end switch yys136 + } // end for yyj136 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *JobSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj148 int + var yyb148 bool + var yyhl148 bool = l >= 0 + yyj148++ + if yyhl148 { + yyb148 = yyj148 > l + } else { + yyb148 = r.CheckBreak() + } + if yyb148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Parallelism != nil { + x.Parallelism = nil + } + } else { + if x.Parallelism == nil { + x.Parallelism = new(int32) + } + yym150 := z.DecBinary() + _ = yym150 + if false { + } else { + *((*int32)(x.Parallelism)) = int32(r.DecodeInt(32)) + } + } + yyj148++ + if yyhl148 { + yyb148 = yyj148 > l + } else { + yyb148 = r.CheckBreak() + } + if yyb148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Completions != nil { + x.Completions = nil + } + } else { + if x.Completions == nil { + x.Completions = new(int32) + } + yym152 := z.DecBinary() + _ = yym152 + if false { + } else { + *((*int32)(x.Completions)) = int32(r.DecodeInt(32)) + } + } + yyj148++ + if yyhl148 { + yyb148 = yyj148 > l + } else { + yyb148 = r.CheckBreak() + } + if yyb148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ActiveDeadlineSeconds != nil { + x.ActiveDeadlineSeconds = nil + } + } else { + if x.ActiveDeadlineSeconds == nil { + x.ActiveDeadlineSeconds = new(int64) + } + yym154 := z.DecBinary() + _ = yym154 + if false { + } else { + *((*int64)(x.ActiveDeadlineSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj148++ + if yyhl148 { + yyb148 = yyj148 > l + } else { + yyb148 = r.CheckBreak() + } + if yyb148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym156 := z.DecBinary() + _ = yym156 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + yyj148++ + if yyhl148 { + yyb148 = yyj148 > l + } else { + yyb148 = r.CheckBreak() + } + if yyb148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.ManualSelector != nil { + x.ManualSelector = nil + } + } else { + if x.ManualSelector == nil { + x.ManualSelector = new(bool) + } + yym158 := z.DecBinary() + _ = yym158 + if false { + } else { + *((*bool)(x.ManualSelector)) = r.DecodeBool() + } + } + yyj148++ + if yyhl148 { + yyb148 = yyj148 > l + } else { + yyb148 = r.CheckBreak() + } + if yyb148 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Template = pkg2_api.PodTemplateSpec{} + } else { + yyv159 := &x.Template + yyv159.CodecDecodeSelf(d) + } + for { + yyj148++ + if yyhl148 { + yyb148 = yyj148 > l + } else { + yyb148 = r.CheckBreak() + } + if yyb148 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj148-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *JobStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym160 := z.EncBinary() + _ = yym160 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep161 := !z.EncBinary() + yy2arr161 := z.EncBasicHandle().StructToArray + var yyq161 [6]bool + _, _, _ = yysep161, yyq161, yy2arr161 + const yyr161 bool = false + yyq161[0] = len(x.Conditions) != 0 + yyq161[1] = x.StartTime != nil + yyq161[2] = x.CompletionTime != nil + yyq161[3] = x.Active != 0 + yyq161[4] = x.Succeeded != 0 + yyq161[5] = x.Failed != 0 + var yynn161 int + if yyr161 || yy2arr161 { + r.EncodeArrayStart(6) + } else { + yynn161 = 0 + for _, b := range yyq161 { + if b { + yynn161++ + } + } + r.EncodeMapStart(yynn161) + yynn161 = 0 + } + if yyr161 || yy2arr161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq161[0] { + if x.Conditions == nil { + r.EncodeNil() + } else { + yym163 := z.EncBinary() + _ = yym163 + if false { + } else { + h.encSliceJobCondition(([]JobCondition)(x.Conditions), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq161[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("conditions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Conditions == nil { + r.EncodeNil() + } else { + yym164 := z.EncBinary() + _ = yym164 + if false { + } else { + h.encSliceJobCondition(([]JobCondition)(x.Conditions), e) + } + } + } + } + if yyr161 || yy2arr161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq161[1] { + if x.StartTime == nil { + r.EncodeNil() + } else { + yym166 := z.EncBinary() + _ = yym166 + if false { + } else if z.HasExtensions() && z.EncExt(x.StartTime) { + } else if yym166 { + z.EncBinaryMarshal(x.StartTime) + } else if !yym166 && z.IsJSONHandle() { + z.EncJSONMarshal(x.StartTime) + } else { + z.EncFallback(x.StartTime) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq161[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("startTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.StartTime == nil { + r.EncodeNil() + } else { + yym167 := z.EncBinary() + _ = yym167 + if false { + } else if z.HasExtensions() && z.EncExt(x.StartTime) { + } else if yym167 { + z.EncBinaryMarshal(x.StartTime) + } else if !yym167 && z.IsJSONHandle() { + z.EncJSONMarshal(x.StartTime) + } else { + z.EncFallback(x.StartTime) + } + } + } + } + if yyr161 || yy2arr161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq161[2] { + if x.CompletionTime == nil { + r.EncodeNil() + } else { + yym169 := z.EncBinary() + _ = yym169 + if false { + } else if z.HasExtensions() && z.EncExt(x.CompletionTime) { + } else if yym169 { + z.EncBinaryMarshal(x.CompletionTime) + } else if !yym169 && z.IsJSONHandle() { + z.EncJSONMarshal(x.CompletionTime) + } else { + z.EncFallback(x.CompletionTime) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq161[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("completionTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.CompletionTime == nil { + r.EncodeNil() + } else { + yym170 := z.EncBinary() + _ = yym170 + if false { + } else if z.HasExtensions() && z.EncExt(x.CompletionTime) { + } else if yym170 { + z.EncBinaryMarshal(x.CompletionTime) + } else if !yym170 && z.IsJSONHandle() { + z.EncJSONMarshal(x.CompletionTime) + } else { + z.EncFallback(x.CompletionTime) + } + } + } + } + if yyr161 || yy2arr161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq161[3] { + yym172 := z.EncBinary() + _ = yym172 + if false { + } else { + r.EncodeInt(int64(x.Active)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq161[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("active")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym173 := z.EncBinary() + _ = yym173 + if false { + } else { + r.EncodeInt(int64(x.Active)) + } + } + } + if yyr161 || yy2arr161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq161[4] { + yym175 := z.EncBinary() + _ = yym175 + if false { + } else { + r.EncodeInt(int64(x.Succeeded)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq161[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("succeeded")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym176 := z.EncBinary() + _ = yym176 + if false { + } else { + r.EncodeInt(int64(x.Succeeded)) + } + } + } + if yyr161 || yy2arr161 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq161[5] { + yym178 := z.EncBinary() + _ = yym178 + if false { + } else { + r.EncodeInt(int64(x.Failed)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq161[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("failed")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym179 := z.EncBinary() + _ = yym179 + if false { + } else { + r.EncodeInt(int64(x.Failed)) + } + } + } + if yyr161 || yy2arr161 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *JobStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym180 := z.DecBinary() + _ = yym180 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct181 := r.ContainerType() + if yyct181 == codecSelferValueTypeMap1234 { + yyl181 := r.ReadMapStart() + if yyl181 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl181, d) + } + } else if yyct181 == codecSelferValueTypeArray1234 { + yyl181 := r.ReadArrayStart() + if yyl181 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl181, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *JobStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys182Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys182Slc + var yyhl182 bool = l >= 0 + for yyj182 := 0; ; yyj182++ { + if yyhl182 { + if yyj182 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys182Slc = r.DecodeBytes(yys182Slc, true, true) + yys182 := string(yys182Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys182 { + case "conditions": + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv183 := &x.Conditions + yym184 := z.DecBinary() + _ = yym184 + if false { + } else { + h.decSliceJobCondition((*[]JobCondition)(yyv183), d) + } + } + case "startTime": + if r.TryDecodeAsNil() { + if x.StartTime != nil { + x.StartTime = nil + } + } else { + if x.StartTime == nil { + x.StartTime = new(pkg1_unversioned.Time) + } + yym186 := z.DecBinary() + _ = yym186 + if false { + } else if z.HasExtensions() && z.DecExt(x.StartTime) { + } else if yym186 { + z.DecBinaryUnmarshal(x.StartTime) + } else if !yym186 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.StartTime) + } else { + z.DecFallback(x.StartTime, false) + } + } + case "completionTime": + if r.TryDecodeAsNil() { + if x.CompletionTime != nil { + x.CompletionTime = nil + } + } else { + if x.CompletionTime == nil { + x.CompletionTime = new(pkg1_unversioned.Time) + } + yym188 := z.DecBinary() + _ = yym188 + if false { + } else if z.HasExtensions() && z.DecExt(x.CompletionTime) { + } else if yym188 { + z.DecBinaryUnmarshal(x.CompletionTime) + } else if !yym188 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.CompletionTime) + } else { + z.DecFallback(x.CompletionTime, false) + } + } + case "active": + if r.TryDecodeAsNil() { + x.Active = 0 + } else { + x.Active = int32(r.DecodeInt(32)) + } + case "succeeded": + if r.TryDecodeAsNil() { + x.Succeeded = 0 + } else { + x.Succeeded = int32(r.DecodeInt(32)) + } + case "failed": + if r.TryDecodeAsNil() { + x.Failed = 0 + } else { + x.Failed = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys182) + } // end switch yys182 + } // end for yyj182 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *JobStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj192 int + var yyb192 bool + var yyhl192 bool = l >= 0 + yyj192++ + if yyhl192 { + yyb192 = yyj192 > l + } else { + yyb192 = r.CheckBreak() + } + if yyb192 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Conditions = nil + } else { + yyv193 := &x.Conditions + yym194 := z.DecBinary() + _ = yym194 + if false { + } else { + h.decSliceJobCondition((*[]JobCondition)(yyv193), d) + } + } + yyj192++ + if yyhl192 { + yyb192 = yyj192 > l + } else { + yyb192 = r.CheckBreak() + } + if yyb192 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.StartTime != nil { + x.StartTime = nil + } + } else { + if x.StartTime == nil { + x.StartTime = new(pkg1_unversioned.Time) + } + yym196 := z.DecBinary() + _ = yym196 + if false { + } else if z.HasExtensions() && z.DecExt(x.StartTime) { + } else if yym196 { + z.DecBinaryUnmarshal(x.StartTime) + } else if !yym196 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.StartTime) + } else { + z.DecFallback(x.StartTime, false) + } + } + yyj192++ + if yyhl192 { + yyb192 = yyj192 > l + } else { + yyb192 = r.CheckBreak() + } + if yyb192 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.CompletionTime != nil { + x.CompletionTime = nil + } + } else { + if x.CompletionTime == nil { + x.CompletionTime = new(pkg1_unversioned.Time) + } + yym198 := z.DecBinary() + _ = yym198 + if false { + } else if z.HasExtensions() && z.DecExt(x.CompletionTime) { + } else if yym198 { + z.DecBinaryUnmarshal(x.CompletionTime) + } else if !yym198 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.CompletionTime) + } else { + z.DecFallback(x.CompletionTime, false) + } + } + yyj192++ + if yyhl192 { + yyb192 = yyj192 > l + } else { + yyb192 = r.CheckBreak() + } + if yyb192 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Active = 0 + } else { + x.Active = int32(r.DecodeInt(32)) + } + yyj192++ + if yyhl192 { + yyb192 = yyj192 > l + } else { + yyb192 = r.CheckBreak() + } + if yyb192 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Succeeded = 0 + } else { + x.Succeeded = int32(r.DecodeInt(32)) + } + yyj192++ + if yyhl192 { + yyb192 = yyj192 > l + } else { + yyb192 = r.CheckBreak() + } + if yyb192 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Failed = 0 + } else { + x.Failed = int32(r.DecodeInt(32)) + } + for { + yyj192++ + if yyhl192 { + yyb192 = yyj192 > l + } else { + yyb192 = r.CheckBreak() + } + if yyb192 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj192-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x JobConditionType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym202 := z.EncBinary() + _ = yym202 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *JobConditionType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym203 := z.DecBinary() + _ = yym203 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *JobCondition) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym204 := z.EncBinary() + _ = yym204 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep205 := !z.EncBinary() + yy2arr205 := z.EncBasicHandle().StructToArray + var yyq205 [6]bool + _, _, _ = yysep205, yyq205, yy2arr205 + const yyr205 bool = false + yyq205[2] = true + yyq205[3] = true + yyq205[4] = x.Reason != "" + yyq205[5] = x.Message != "" + var yynn205 int + if yyr205 || yy2arr205 { + r.EncodeArrayStart(6) + } else { + yynn205 = 2 + for _, b := range yyq205 { + if b { + yynn205++ + } + } + r.EncodeMapStart(yynn205) + yynn205 = 0 + } + if yyr205 || yy2arr205 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Type.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + if yyr205 || yy2arr205 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym208 := z.EncBinary() + _ = yym208 + if false { + } else if z.HasExtensions() && z.EncExt(x.Status) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Status)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym209 := z.EncBinary() + _ = yym209 + if false { + } else if z.HasExtensions() && z.EncExt(x.Status) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Status)) + } + } + if yyr205 || yy2arr205 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq205[2] { + yy211 := &x.LastProbeTime + yym212 := z.EncBinary() + _ = yym212 + if false { + } else if z.HasExtensions() && z.EncExt(yy211) { + } else if yym212 { + z.EncBinaryMarshal(yy211) + } else if !yym212 && z.IsJSONHandle() { + z.EncJSONMarshal(yy211) + } else { + z.EncFallback(yy211) + } + } else { + r.EncodeNil() + } + } else { + if yyq205[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastProbeTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy213 := &x.LastProbeTime + yym214 := z.EncBinary() + _ = yym214 + if false { + } else if z.HasExtensions() && z.EncExt(yy213) { + } else if yym214 { + z.EncBinaryMarshal(yy213) + } else if !yym214 && z.IsJSONHandle() { + z.EncJSONMarshal(yy213) + } else { + z.EncFallback(yy213) + } + } + } + if yyr205 || yy2arr205 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq205[3] { + yy216 := &x.LastTransitionTime + yym217 := z.EncBinary() + _ = yym217 + if false { + } else if z.HasExtensions() && z.EncExt(yy216) { + } else if yym217 { + z.EncBinaryMarshal(yy216) + } else if !yym217 && z.IsJSONHandle() { + z.EncJSONMarshal(yy216) + } else { + z.EncFallback(yy216) + } + } else { + r.EncodeNil() + } + } else { + if yyq205[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastTransitionTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy218 := &x.LastTransitionTime + yym219 := z.EncBinary() + _ = yym219 + if false { + } else if z.HasExtensions() && z.EncExt(yy218) { + } else if yym219 { + z.EncBinaryMarshal(yy218) + } else if !yym219 && z.IsJSONHandle() { + z.EncJSONMarshal(yy218) + } else { + z.EncFallback(yy218) + } + } + } + if yyr205 || yy2arr205 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq205[4] { + yym221 := z.EncBinary() + _ = yym221 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq205[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("reason")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym222 := z.EncBinary() + _ = yym222 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Reason)) + } + } + } + if yyr205 || yy2arr205 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq205[5] { + yym224 := z.EncBinary() + _ = yym224 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq205[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("message")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym225 := z.EncBinary() + _ = yym225 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Message)) + } + } + } + if yyr205 || yy2arr205 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *JobCondition) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym226 := z.DecBinary() + _ = yym226 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct227 := r.ContainerType() + if yyct227 == codecSelferValueTypeMap1234 { + yyl227 := r.ReadMapStart() + if yyl227 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl227, d) + } + } else if yyct227 == codecSelferValueTypeArray1234 { + yyl227 := r.ReadArrayStart() + if yyl227 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl227, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *JobCondition) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys228Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys228Slc + var yyhl228 bool = l >= 0 + for yyj228 := 0; ; yyj228++ { + if yyhl228 { + if yyj228 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys228Slc = r.DecodeBytes(yys228Slc, true, true) + yys228 := string(yys228Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys228 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = JobConditionType(r.DecodeString()) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = pkg2_api.ConditionStatus(r.DecodeString()) + } + case "lastProbeTime": + if r.TryDecodeAsNil() { + x.LastProbeTime = pkg1_unversioned.Time{} + } else { + yyv231 := &x.LastProbeTime + yym232 := z.DecBinary() + _ = yym232 + if false { + } else if z.HasExtensions() && z.DecExt(yyv231) { + } else if yym232 { + z.DecBinaryUnmarshal(yyv231) + } else if !yym232 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv231) + } else { + z.DecFallback(yyv231, false) + } + } + case "lastTransitionTime": + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg1_unversioned.Time{} + } else { + yyv233 := &x.LastTransitionTime + yym234 := z.DecBinary() + _ = yym234 + if false { + } else if z.HasExtensions() && z.DecExt(yyv233) { + } else if yym234 { + z.DecBinaryUnmarshal(yyv233) + } else if !yym234 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv233) + } else { + z.DecFallback(yyv233, false) + } + } + case "reason": + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + case "message": + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys228) + } // end switch yys228 + } // end for yyj228 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *JobCondition) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj237 int + var yyb237 bool + var yyhl237 bool = l >= 0 + yyj237++ + if yyhl237 { + yyb237 = yyj237 > l + } else { + yyb237 = r.CheckBreak() + } + if yyb237 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = JobConditionType(r.DecodeString()) + } + yyj237++ + if yyhl237 { + yyb237 = yyj237 > l + } else { + yyb237 = r.CheckBreak() + } + if yyb237 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = "" + } else { + x.Status = pkg2_api.ConditionStatus(r.DecodeString()) + } + yyj237++ + if yyhl237 { + yyb237 = yyj237 > l + } else { + yyb237 = r.CheckBreak() + } + if yyb237 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastProbeTime = pkg1_unversioned.Time{} + } else { + yyv240 := &x.LastProbeTime + yym241 := z.DecBinary() + _ = yym241 + if false { + } else if z.HasExtensions() && z.DecExt(yyv240) { + } else if yym241 { + z.DecBinaryUnmarshal(yyv240) + } else if !yym241 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv240) + } else { + z.DecFallback(yyv240, false) + } + } + yyj237++ + if yyhl237 { + yyb237 = yyj237 > l + } else { + yyb237 = r.CheckBreak() + } + if yyb237 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LastTransitionTime = pkg1_unversioned.Time{} + } else { + yyv242 := &x.LastTransitionTime + yym243 := z.DecBinary() + _ = yym243 + if false { + } else if z.HasExtensions() && z.DecExt(yyv242) { + } else if yym243 { + z.DecBinaryUnmarshal(yyv242) + } else if !yym243 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv242) + } else { + z.DecFallback(yyv242, false) + } + } + yyj237++ + if yyhl237 { + yyb237 = yyj237 > l + } else { + yyb237 = r.CheckBreak() + } + if yyb237 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Reason = "" + } else { + x.Reason = string(r.DecodeString()) + } + yyj237++ + if yyhl237 { + yyb237 = yyj237 > l + } else { + yyb237 = r.CheckBreak() + } + if yyb237 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Message = "" + } else { + x.Message = string(r.DecodeString()) + } + for { + yyj237++ + if yyhl237 { + yyb237 = yyj237 > l + } else { + yyb237 = r.CheckBreak() + } + if yyb237 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj237-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ScheduledJob) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym246 := z.EncBinary() + _ = yym246 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep247 := !z.EncBinary() + yy2arr247 := z.EncBasicHandle().StructToArray + var yyq247 [5]bool + _, _, _ = yysep247, yyq247, yy2arr247 + const yyr247 bool = false + yyq247[0] = x.Kind != "" + yyq247[1] = x.APIVersion != "" + yyq247[2] = true + yyq247[3] = true + yyq247[4] = true + var yynn247 int + if yyr247 || yy2arr247 { + r.EncodeArrayStart(5) + } else { + yynn247 = 0 + for _, b := range yyq247 { + if b { + yynn247++ + } + } + r.EncodeMapStart(yynn247) + yynn247 = 0 + } + if yyr247 || yy2arr247 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq247[0] { + yym249 := z.EncBinary() + _ = yym249 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq247[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym250 := z.EncBinary() + _ = yym250 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr247 || yy2arr247 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq247[1] { + yym252 := z.EncBinary() + _ = yym252 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq247[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym253 := z.EncBinary() + _ = yym253 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr247 || yy2arr247 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq247[2] { + yy255 := &x.ObjectMeta + yy255.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq247[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy256 := &x.ObjectMeta + yy256.CodecEncodeSelf(e) + } + } + if yyr247 || yy2arr247 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq247[3] { + yy258 := &x.Spec + yy258.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq247[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy259 := &x.Spec + yy259.CodecEncodeSelf(e) + } + } + if yyr247 || yy2arr247 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq247[4] { + yy261 := &x.Status + yy261.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq247[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy262 := &x.Status + yy262.CodecEncodeSelf(e) + } + } + if yyr247 || yy2arr247 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ScheduledJob) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym263 := z.DecBinary() + _ = yym263 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct264 := r.ContainerType() + if yyct264 == codecSelferValueTypeMap1234 { + yyl264 := r.ReadMapStart() + if yyl264 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl264, d) + } + } else if yyct264 == codecSelferValueTypeArray1234 { + yyl264 := r.ReadArrayStart() + if yyl264 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl264, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ScheduledJob) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys265Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys265Slc + var yyhl265 bool = l >= 0 + for yyj265 := 0; ; yyj265++ { + if yyhl265 { + if yyj265 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys265Slc = r.DecodeBytes(yys265Slc, true, true) + yys265 := string(yys265Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys265 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv268 := &x.ObjectMeta + yyv268.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ScheduledJobSpec{} + } else { + yyv269 := &x.Spec + yyv269.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ScheduledJobStatus{} + } else { + yyv270 := &x.Status + yyv270.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys265) + } // end switch yys265 + } // end for yyj265 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ScheduledJob) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj271 int + var yyb271 bool + var yyhl271 bool = l >= 0 + yyj271++ + if yyhl271 { + yyb271 = yyj271 > l + } else { + yyb271 = r.CheckBreak() + } + if yyb271 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj271++ + if yyhl271 { + yyb271 = yyj271 > l + } else { + yyb271 = r.CheckBreak() + } + if yyb271 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj271++ + if yyhl271 { + yyb271 = yyj271 > l + } else { + yyb271 = r.CheckBreak() + } + if yyb271 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv274 := &x.ObjectMeta + yyv274.CodecDecodeSelf(d) + } + yyj271++ + if yyhl271 { + yyb271 = yyj271 > l + } else { + yyb271 = r.CheckBreak() + } + if yyb271 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ScheduledJobSpec{} + } else { + yyv275 := &x.Spec + yyv275.CodecDecodeSelf(d) + } + yyj271++ + if yyhl271 { + yyb271 = yyj271 > l + } else { + yyb271 = r.CheckBreak() + } + if yyb271 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ScheduledJobStatus{} + } else { + yyv276 := &x.Status + yyv276.CodecDecodeSelf(d) + } + for { + yyj271++ + if yyhl271 { + yyb271 = yyj271 > l + } else { + yyb271 = r.CheckBreak() + } + if yyb271 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj271-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ScheduledJobList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym277 := z.EncBinary() + _ = yym277 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep278 := !z.EncBinary() + yy2arr278 := z.EncBasicHandle().StructToArray + var yyq278 [4]bool + _, _, _ = yysep278, yyq278, yy2arr278 + const yyr278 bool = false + yyq278[0] = x.Kind != "" + yyq278[1] = x.APIVersion != "" + yyq278[2] = true + var yynn278 int + if yyr278 || yy2arr278 { + r.EncodeArrayStart(4) + } else { + yynn278 = 1 + for _, b := range yyq278 { + if b { + yynn278++ + } + } + r.EncodeMapStart(yynn278) + yynn278 = 0 + } + if yyr278 || yy2arr278 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq278[0] { + yym280 := z.EncBinary() + _ = yym280 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq278[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym281 := z.EncBinary() + _ = yym281 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr278 || yy2arr278 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq278[1] { + yym283 := z.EncBinary() + _ = yym283 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq278[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym284 := z.EncBinary() + _ = yym284 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr278 || yy2arr278 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq278[2] { + yy286 := &x.ListMeta + yym287 := z.EncBinary() + _ = yym287 + if false { + } else if z.HasExtensions() && z.EncExt(yy286) { + } else { + z.EncFallback(yy286) + } + } else { + r.EncodeNil() + } + } else { + if yyq278[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy288 := &x.ListMeta + yym289 := z.EncBinary() + _ = yym289 + if false { + } else if z.HasExtensions() && z.EncExt(yy288) { + } else { + z.EncFallback(yy288) + } + } + } + if yyr278 || yy2arr278 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym291 := z.EncBinary() + _ = yym291 + if false { + } else { + h.encSliceScheduledJob(([]ScheduledJob)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym292 := z.EncBinary() + _ = yym292 + if false { + } else { + h.encSliceScheduledJob(([]ScheduledJob)(x.Items), e) + } + } + } + if yyr278 || yy2arr278 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ScheduledJobList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym293 := z.DecBinary() + _ = yym293 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct294 := r.ContainerType() + if yyct294 == codecSelferValueTypeMap1234 { + yyl294 := r.ReadMapStart() + if yyl294 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl294, d) + } + } else if yyct294 == codecSelferValueTypeArray1234 { + yyl294 := r.ReadArrayStart() + if yyl294 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl294, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ScheduledJobList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys295Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys295Slc + var yyhl295 bool = l >= 0 + for yyj295 := 0; ; yyj295++ { + if yyhl295 { + if yyj295 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys295Slc = r.DecodeBytes(yys295Slc, true, true) + yys295 := string(yys295Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys295 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv298 := &x.ListMeta + yym299 := z.DecBinary() + _ = yym299 + if false { + } else if z.HasExtensions() && z.DecExt(yyv298) { + } else { + z.DecFallback(yyv298, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv300 := &x.Items + yym301 := z.DecBinary() + _ = yym301 + if false { + } else { + h.decSliceScheduledJob((*[]ScheduledJob)(yyv300), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys295) + } // end switch yys295 + } // end for yyj295 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ScheduledJobList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj302 int + var yyb302 bool + var yyhl302 bool = l >= 0 + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv305 := &x.ListMeta + yym306 := z.DecBinary() + _ = yym306 + if false { + } else if z.HasExtensions() && z.DecExt(yyv305) { + } else { + z.DecFallback(yyv305, false) + } + } + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv307 := &x.Items + yym308 := z.DecBinary() + _ = yym308 + if false { + } else { + h.decSliceScheduledJob((*[]ScheduledJob)(yyv307), d) + } + } + for { + yyj302++ + if yyhl302 { + yyb302 = yyj302 > l + } else { + yyb302 = r.CheckBreak() + } + if yyb302 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj302-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ScheduledJobSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym309 := z.EncBinary() + _ = yym309 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep310 := !z.EncBinary() + yy2arr310 := z.EncBasicHandle().StructToArray + var yyq310 [5]bool + _, _, _ = yysep310, yyq310, yy2arr310 + const yyr310 bool = false + yyq310[1] = x.StartingDeadlineSeconds != nil + yyq310[2] = x.ConcurrencyPolicy != "" + yyq310[3] = x.Suspend != nil + var yynn310 int + if yyr310 || yy2arr310 { + r.EncodeArrayStart(5) + } else { + yynn310 = 2 + for _, b := range yyq310 { + if b { + yynn310++ + } + } + r.EncodeMapStart(yynn310) + yynn310 = 0 + } + if yyr310 || yy2arr310 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym312 := z.EncBinary() + _ = yym312 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Schedule)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("schedule")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym313 := z.EncBinary() + _ = yym313 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Schedule)) + } + } + if yyr310 || yy2arr310 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq310[1] { + if x.StartingDeadlineSeconds == nil { + r.EncodeNil() + } else { + yy315 := *x.StartingDeadlineSeconds + yym316 := z.EncBinary() + _ = yym316 + if false { + } else { + r.EncodeInt(int64(yy315)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq310[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("startingDeadlineSeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.StartingDeadlineSeconds == nil { + r.EncodeNil() + } else { + yy317 := *x.StartingDeadlineSeconds + yym318 := z.EncBinary() + _ = yym318 + if false { + } else { + r.EncodeInt(int64(yy317)) + } + } + } + } + if yyr310 || yy2arr310 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq310[2] { + x.ConcurrencyPolicy.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq310[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("concurrencyPolicy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.ConcurrencyPolicy.CodecEncodeSelf(e) + } + } + if yyr310 || yy2arr310 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq310[3] { + if x.Suspend == nil { + r.EncodeNil() + } else { + yy321 := *x.Suspend + yym322 := z.EncBinary() + _ = yym322 + if false { + } else { + r.EncodeBool(bool(yy321)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq310[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("suspend")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Suspend == nil { + r.EncodeNil() + } else { + yy323 := *x.Suspend + yym324 := z.EncBinary() + _ = yym324 + if false { + } else { + r.EncodeBool(bool(yy323)) + } + } + } + } + if yyr310 || yy2arr310 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy326 := &x.JobTemplate + yy326.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("jobTemplate")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy327 := &x.JobTemplate + yy327.CodecEncodeSelf(e) + } + if yyr310 || yy2arr310 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ScheduledJobSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym328 := z.DecBinary() + _ = yym328 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct329 := r.ContainerType() + if yyct329 == codecSelferValueTypeMap1234 { + yyl329 := r.ReadMapStart() + if yyl329 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl329, d) + } + } else if yyct329 == codecSelferValueTypeArray1234 { + yyl329 := r.ReadArrayStart() + if yyl329 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl329, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ScheduledJobSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys330Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys330Slc + var yyhl330 bool = l >= 0 + for yyj330 := 0; ; yyj330++ { + if yyhl330 { + if yyj330 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys330Slc = r.DecodeBytes(yys330Slc, true, true) + yys330 := string(yys330Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys330 { + case "schedule": + if r.TryDecodeAsNil() { + x.Schedule = "" + } else { + x.Schedule = string(r.DecodeString()) + } + case "startingDeadlineSeconds": + if r.TryDecodeAsNil() { + if x.StartingDeadlineSeconds != nil { + x.StartingDeadlineSeconds = nil + } + } else { + if x.StartingDeadlineSeconds == nil { + x.StartingDeadlineSeconds = new(int64) + } + yym333 := z.DecBinary() + _ = yym333 + if false { + } else { + *((*int64)(x.StartingDeadlineSeconds)) = int64(r.DecodeInt(64)) + } + } + case "concurrencyPolicy": + if r.TryDecodeAsNil() { + x.ConcurrencyPolicy = "" + } else { + x.ConcurrencyPolicy = ConcurrencyPolicy(r.DecodeString()) + } + case "suspend": + if r.TryDecodeAsNil() { + if x.Suspend != nil { + x.Suspend = nil + } + } else { + if x.Suspend == nil { + x.Suspend = new(bool) + } + yym336 := z.DecBinary() + _ = yym336 + if false { + } else { + *((*bool)(x.Suspend)) = r.DecodeBool() + } + } + case "jobTemplate": + if r.TryDecodeAsNil() { + x.JobTemplate = JobTemplateSpec{} + } else { + yyv337 := &x.JobTemplate + yyv337.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys330) + } // end switch yys330 + } // end for yyj330 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ScheduledJobSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj338 int + var yyb338 bool + var yyhl338 bool = l >= 0 + yyj338++ + if yyhl338 { + yyb338 = yyj338 > l + } else { + yyb338 = r.CheckBreak() + } + if yyb338 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Schedule = "" + } else { + x.Schedule = string(r.DecodeString()) + } + yyj338++ + if yyhl338 { + yyb338 = yyj338 > l + } else { + yyb338 = r.CheckBreak() + } + if yyb338 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.StartingDeadlineSeconds != nil { + x.StartingDeadlineSeconds = nil + } + } else { + if x.StartingDeadlineSeconds == nil { + x.StartingDeadlineSeconds = new(int64) + } + yym341 := z.DecBinary() + _ = yym341 + if false { + } else { + *((*int64)(x.StartingDeadlineSeconds)) = int64(r.DecodeInt(64)) + } + } + yyj338++ + if yyhl338 { + yyb338 = yyj338 > l + } else { + yyb338 = r.CheckBreak() + } + if yyb338 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ConcurrencyPolicy = "" + } else { + x.ConcurrencyPolicy = ConcurrencyPolicy(r.DecodeString()) + } + yyj338++ + if yyhl338 { + yyb338 = yyj338 > l + } else { + yyb338 = r.CheckBreak() + } + if yyb338 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Suspend != nil { + x.Suspend = nil + } + } else { + if x.Suspend == nil { + x.Suspend = new(bool) + } + yym344 := z.DecBinary() + _ = yym344 + if false { + } else { + *((*bool)(x.Suspend)) = r.DecodeBool() + } + } + yyj338++ + if yyhl338 { + yyb338 = yyj338 > l + } else { + yyb338 = r.CheckBreak() + } + if yyb338 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.JobTemplate = JobTemplateSpec{} + } else { + yyv345 := &x.JobTemplate + yyv345.CodecDecodeSelf(d) + } + for { + yyj338++ + if yyhl338 { + yyb338 = yyj338 > l + } else { + yyb338 = r.CheckBreak() + } + if yyb338 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj338-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x ConcurrencyPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym346 := z.EncBinary() + _ = yym346 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *ConcurrencyPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym347 := z.DecBinary() + _ = yym347 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *ScheduledJobStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym348 := z.EncBinary() + _ = yym348 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep349 := !z.EncBinary() + yy2arr349 := z.EncBasicHandle().StructToArray + var yyq349 [2]bool + _, _, _ = yysep349, yyq349, yy2arr349 + const yyr349 bool = false + yyq349[0] = len(x.Active) != 0 + yyq349[1] = x.LastScheduleTime != nil + var yynn349 int + if yyr349 || yy2arr349 { + r.EncodeArrayStart(2) + } else { + yynn349 = 0 + for _, b := range yyq349 { + if b { + yynn349++ + } + } + r.EncodeMapStart(yynn349) + yynn349 = 0 + } + if yyr349 || yy2arr349 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq349[0] { + if x.Active == nil { + r.EncodeNil() + } else { + yym351 := z.EncBinary() + _ = yym351 + if false { + } else { + h.encSliceapi_ObjectReference(([]pkg2_api.ObjectReference)(x.Active), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq349[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("active")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Active == nil { + r.EncodeNil() + } else { + yym352 := z.EncBinary() + _ = yym352 + if false { + } else { + h.encSliceapi_ObjectReference(([]pkg2_api.ObjectReference)(x.Active), e) + } + } + } + } + if yyr349 || yy2arr349 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq349[1] { + if x.LastScheduleTime == nil { + r.EncodeNil() + } else { + yym354 := z.EncBinary() + _ = yym354 + if false { + } else if z.HasExtensions() && z.EncExt(x.LastScheduleTime) { + } else if yym354 { + z.EncBinaryMarshal(x.LastScheduleTime) + } else if !yym354 && z.IsJSONHandle() { + z.EncJSONMarshal(x.LastScheduleTime) + } else { + z.EncFallback(x.LastScheduleTime) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq349[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("lastScheduleTime")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.LastScheduleTime == nil { + r.EncodeNil() + } else { + yym355 := z.EncBinary() + _ = yym355 + if false { + } else if z.HasExtensions() && z.EncExt(x.LastScheduleTime) { + } else if yym355 { + z.EncBinaryMarshal(x.LastScheduleTime) + } else if !yym355 && z.IsJSONHandle() { + z.EncJSONMarshal(x.LastScheduleTime) + } else { + z.EncFallback(x.LastScheduleTime) + } + } + } + } + if yyr349 || yy2arr349 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ScheduledJobStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym356 := z.DecBinary() + _ = yym356 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct357 := r.ContainerType() + if yyct357 == codecSelferValueTypeMap1234 { + yyl357 := r.ReadMapStart() + if yyl357 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl357, d) + } + } else if yyct357 == codecSelferValueTypeArray1234 { + yyl357 := r.ReadArrayStart() + if yyl357 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl357, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ScheduledJobStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys358Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys358Slc + var yyhl358 bool = l >= 0 + for yyj358 := 0; ; yyj358++ { + if yyhl358 { + if yyj358 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys358Slc = r.DecodeBytes(yys358Slc, true, true) + yys358 := string(yys358Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys358 { + case "active": + if r.TryDecodeAsNil() { + x.Active = nil + } else { + yyv359 := &x.Active + yym360 := z.DecBinary() + _ = yym360 + if false { + } else { + h.decSliceapi_ObjectReference((*[]pkg2_api.ObjectReference)(yyv359), d) + } + } + case "lastScheduleTime": + if r.TryDecodeAsNil() { + if x.LastScheduleTime != nil { + x.LastScheduleTime = nil + } + } else { + if x.LastScheduleTime == nil { + x.LastScheduleTime = new(pkg1_unversioned.Time) + } + yym362 := z.DecBinary() + _ = yym362 + if false { + } else if z.HasExtensions() && z.DecExt(x.LastScheduleTime) { + } else if yym362 { + z.DecBinaryUnmarshal(x.LastScheduleTime) + } else if !yym362 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.LastScheduleTime) + } else { + z.DecFallback(x.LastScheduleTime, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys358) + } // end switch yys358 + } // end for yyj358 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ScheduledJobStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj363 int + var yyb363 bool + var yyhl363 bool = l >= 0 + yyj363++ + if yyhl363 { + yyb363 = yyj363 > l + } else { + yyb363 = r.CheckBreak() + } + if yyb363 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Active = nil + } else { + yyv364 := &x.Active + yym365 := z.DecBinary() + _ = yym365 + if false { + } else { + h.decSliceapi_ObjectReference((*[]pkg2_api.ObjectReference)(yyv364), d) + } + } + yyj363++ + if yyhl363 { + yyb363 = yyj363 > l + } else { + yyb363 = r.CheckBreak() + } + if yyb363 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.LastScheduleTime != nil { + x.LastScheduleTime = nil + } + } else { + if x.LastScheduleTime == nil { + x.LastScheduleTime = new(pkg1_unversioned.Time) + } + yym367 := z.DecBinary() + _ = yym367 + if false { + } else if z.HasExtensions() && z.DecExt(x.LastScheduleTime) { + } else if yym367 { + z.DecBinaryUnmarshal(x.LastScheduleTime) + } else if !yym367 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.LastScheduleTime) + } else { + z.DecFallback(x.LastScheduleTime, false) + } + } + for { + yyj363++ + if yyhl363 { + yyb363 = yyj363 > l + } else { + yyb363 = r.CheckBreak() + } + if yyb363 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj363-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) encSliceJob(v []Job, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv368 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy369 := &yyv368 + yy369.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceJob(v *[]Job, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv370 := *v + yyh370, yyl370 := z.DecSliceHelperStart() + var yyc370 bool + if yyl370 == 0 { + if yyv370 == nil { + yyv370 = []Job{} + yyc370 = true + } else if len(yyv370) != 0 { + yyv370 = yyv370[:0] + yyc370 = true + } + } else if yyl370 > 0 { + var yyrr370, yyrl370 int + var yyrt370 bool + if yyl370 > cap(yyv370) { + + yyrg370 := len(yyv370) > 0 + yyv2370 := yyv370 + yyrl370, yyrt370 = z.DecInferLen(yyl370, z.DecBasicHandle().MaxInitLen, 800) + if yyrt370 { + if yyrl370 <= cap(yyv370) { + yyv370 = yyv370[:yyrl370] + } else { + yyv370 = make([]Job, yyrl370) + } + } else { + yyv370 = make([]Job, yyrl370) + } + yyc370 = true + yyrr370 = len(yyv370) + if yyrg370 { + copy(yyv370, yyv2370) + } + } else if yyl370 != len(yyv370) { + yyv370 = yyv370[:yyl370] + yyc370 = true + } + yyj370 := 0 + for ; yyj370 < yyrr370; yyj370++ { + yyh370.ElemContainerState(yyj370) + if r.TryDecodeAsNil() { + yyv370[yyj370] = Job{} + } else { + yyv371 := &yyv370[yyj370] + yyv371.CodecDecodeSelf(d) + } + + } + if yyrt370 { + for ; yyj370 < yyl370; yyj370++ { + yyv370 = append(yyv370, Job{}) + yyh370.ElemContainerState(yyj370) + if r.TryDecodeAsNil() { + yyv370[yyj370] = Job{} + } else { + yyv372 := &yyv370[yyj370] + yyv372.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj370 := 0 + for ; !r.CheckBreak(); yyj370++ { + + if yyj370 >= len(yyv370) { + yyv370 = append(yyv370, Job{}) // var yyz370 Job + yyc370 = true + } + yyh370.ElemContainerState(yyj370) + if yyj370 < len(yyv370) { + if r.TryDecodeAsNil() { + yyv370[yyj370] = Job{} + } else { + yyv373 := &yyv370[yyj370] + yyv373.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj370 < len(yyv370) { + yyv370 = yyv370[:yyj370] + yyc370 = true + } else if yyj370 == 0 && yyv370 == nil { + yyv370 = []Job{} + yyc370 = true + } + } + yyh370.End() + if yyc370 { + *v = yyv370 + } +} + +func (x codecSelfer1234) encSliceJobCondition(v []JobCondition, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv374 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy375 := &yyv374 + yy375.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceJobCondition(v *[]JobCondition, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv376 := *v + yyh376, yyl376 := z.DecSliceHelperStart() + var yyc376 bool + if yyl376 == 0 { + if yyv376 == nil { + yyv376 = []JobCondition{} + yyc376 = true + } else if len(yyv376) != 0 { + yyv376 = yyv376[:0] + yyc376 = true + } + } else if yyl376 > 0 { + var yyrr376, yyrl376 int + var yyrt376 bool + if yyl376 > cap(yyv376) { + + yyrg376 := len(yyv376) > 0 + yyv2376 := yyv376 + yyrl376, yyrt376 = z.DecInferLen(yyl376, z.DecBasicHandle().MaxInitLen, 112) + if yyrt376 { + if yyrl376 <= cap(yyv376) { + yyv376 = yyv376[:yyrl376] + } else { + yyv376 = make([]JobCondition, yyrl376) + } + } else { + yyv376 = make([]JobCondition, yyrl376) + } + yyc376 = true + yyrr376 = len(yyv376) + if yyrg376 { + copy(yyv376, yyv2376) + } + } else if yyl376 != len(yyv376) { + yyv376 = yyv376[:yyl376] + yyc376 = true + } + yyj376 := 0 + for ; yyj376 < yyrr376; yyj376++ { + yyh376.ElemContainerState(yyj376) + if r.TryDecodeAsNil() { + yyv376[yyj376] = JobCondition{} + } else { + yyv377 := &yyv376[yyj376] + yyv377.CodecDecodeSelf(d) + } + + } + if yyrt376 { + for ; yyj376 < yyl376; yyj376++ { + yyv376 = append(yyv376, JobCondition{}) + yyh376.ElemContainerState(yyj376) + if r.TryDecodeAsNil() { + yyv376[yyj376] = JobCondition{} + } else { + yyv378 := &yyv376[yyj376] + yyv378.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj376 := 0 + for ; !r.CheckBreak(); yyj376++ { + + if yyj376 >= len(yyv376) { + yyv376 = append(yyv376, JobCondition{}) // var yyz376 JobCondition + yyc376 = true + } + yyh376.ElemContainerState(yyj376) + if yyj376 < len(yyv376) { + if r.TryDecodeAsNil() { + yyv376[yyj376] = JobCondition{} + } else { + yyv379 := &yyv376[yyj376] + yyv379.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj376 < len(yyv376) { + yyv376 = yyv376[:yyj376] + yyc376 = true + } else if yyj376 == 0 && yyv376 == nil { + yyv376 = []JobCondition{} + yyc376 = true + } + } + yyh376.End() + if yyc376 { + *v = yyv376 + } +} + +func (x codecSelfer1234) encSliceScheduledJob(v []ScheduledJob, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv380 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy381 := &yyv380 + yy381.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceScheduledJob(v *[]ScheduledJob, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv382 := *v + yyh382, yyl382 := z.DecSliceHelperStart() + var yyc382 bool + if yyl382 == 0 { + if yyv382 == nil { + yyv382 = []ScheduledJob{} + yyc382 = true + } else if len(yyv382) != 0 { + yyv382 = yyv382[:0] + yyc382 = true + } + } else if yyl382 > 0 { + var yyrr382, yyrl382 int + var yyrt382 bool + if yyl382 > cap(yyv382) { + + yyrg382 := len(yyv382) > 0 + yyv2382 := yyv382 + yyrl382, yyrt382 = z.DecInferLen(yyl382, z.DecBasicHandle().MaxInitLen, 1048) + if yyrt382 { + if yyrl382 <= cap(yyv382) { + yyv382 = yyv382[:yyrl382] + } else { + yyv382 = make([]ScheduledJob, yyrl382) + } + } else { + yyv382 = make([]ScheduledJob, yyrl382) + } + yyc382 = true + yyrr382 = len(yyv382) + if yyrg382 { + copy(yyv382, yyv2382) + } + } else if yyl382 != len(yyv382) { + yyv382 = yyv382[:yyl382] + yyc382 = true + } + yyj382 := 0 + for ; yyj382 < yyrr382; yyj382++ { + yyh382.ElemContainerState(yyj382) + if r.TryDecodeAsNil() { + yyv382[yyj382] = ScheduledJob{} + } else { + yyv383 := &yyv382[yyj382] + yyv383.CodecDecodeSelf(d) + } + + } + if yyrt382 { + for ; yyj382 < yyl382; yyj382++ { + yyv382 = append(yyv382, ScheduledJob{}) + yyh382.ElemContainerState(yyj382) + if r.TryDecodeAsNil() { + yyv382[yyj382] = ScheduledJob{} + } else { + yyv384 := &yyv382[yyj382] + yyv384.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj382 := 0 + for ; !r.CheckBreak(); yyj382++ { + + if yyj382 >= len(yyv382) { + yyv382 = append(yyv382, ScheduledJob{}) // var yyz382 ScheduledJob + yyc382 = true + } + yyh382.ElemContainerState(yyj382) + if yyj382 < len(yyv382) { + if r.TryDecodeAsNil() { + yyv382[yyj382] = ScheduledJob{} + } else { + yyv385 := &yyv382[yyj382] + yyv385.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj382 < len(yyv382) { + yyv382 = yyv382[:yyj382] + yyc382 = true + } else if yyj382 == 0 && yyv382 == nil { + yyv382 = []ScheduledJob{} + yyc382 = true + } + } + yyh382.End() + if yyc382 { + *v = yyv382 + } +} + +func (x codecSelfer1234) encSliceapi_ObjectReference(v []pkg2_api.ObjectReference, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv386 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy387 := &yyv386 + yy387.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceapi_ObjectReference(v *[]pkg2_api.ObjectReference, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv388 := *v + yyh388, yyl388 := z.DecSliceHelperStart() + var yyc388 bool + if yyl388 == 0 { + if yyv388 == nil { + yyv388 = []pkg2_api.ObjectReference{} + yyc388 = true + } else if len(yyv388) != 0 { + yyv388 = yyv388[:0] + yyc388 = true + } + } else if yyl388 > 0 { + var yyrr388, yyrl388 int + var yyrt388 bool + if yyl388 > cap(yyv388) { + + yyrg388 := len(yyv388) > 0 + yyv2388 := yyv388 + yyrl388, yyrt388 = z.DecInferLen(yyl388, z.DecBasicHandle().MaxInitLen, 112) + if yyrt388 { + if yyrl388 <= cap(yyv388) { + yyv388 = yyv388[:yyrl388] + } else { + yyv388 = make([]pkg2_api.ObjectReference, yyrl388) + } + } else { + yyv388 = make([]pkg2_api.ObjectReference, yyrl388) + } + yyc388 = true + yyrr388 = len(yyv388) + if yyrg388 { + copy(yyv388, yyv2388) + } + } else if yyl388 != len(yyv388) { + yyv388 = yyv388[:yyl388] + yyc388 = true + } + yyj388 := 0 + for ; yyj388 < yyrr388; yyj388++ { + yyh388.ElemContainerState(yyj388) + if r.TryDecodeAsNil() { + yyv388[yyj388] = pkg2_api.ObjectReference{} + } else { + yyv389 := &yyv388[yyj388] + yyv389.CodecDecodeSelf(d) + } + + } + if yyrt388 { + for ; yyj388 < yyl388; yyj388++ { + yyv388 = append(yyv388, pkg2_api.ObjectReference{}) + yyh388.ElemContainerState(yyj388) + if r.TryDecodeAsNil() { + yyv388[yyj388] = pkg2_api.ObjectReference{} + } else { + yyv390 := &yyv388[yyj388] + yyv390.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj388 := 0 + for ; !r.CheckBreak(); yyj388++ { + + if yyj388 >= len(yyv388) { + yyv388 = append(yyv388, pkg2_api.ObjectReference{}) // var yyz388 pkg2_api.ObjectReference + yyc388 = true + } + yyh388.ElemContainerState(yyj388) + if yyj388 < len(yyv388) { + if r.TryDecodeAsNil() { + yyv388[yyj388] = pkg2_api.ObjectReference{} + } else { + yyv391 := &yyv388[yyj388] + yyv391.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj388 < len(yyv388) { + yyv388 = yyv388[:yyj388] + yyc388 = true + } else if yyj388 == 0 && yyv388 == nil { + yyv388 = []pkg2_api.ObjectReference{} + yyc388 = true + } + } + yyh388.End() + if yyc388 { + *v = yyv388 + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/batch/types.go b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/types.go new file mode 100644 index 00000000..fb5178a1 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/types.go @@ -0,0 +1,244 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package batch + +import ( + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// +genclient=true + +// Job represents the configuration of a single job. +type Job struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + api.ObjectMeta `json:"metadata,omitempty"` + + // Spec is a structure defining the expected behavior of a job. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec JobSpec `json:"spec,omitempty"` + + // Status is a structure describing current status of a job. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status JobStatus `json:"status,omitempty"` +} + +// JobList is a collection of jobs. +type JobList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is the list of Job. + Items []Job `json:"items"` +} + +// JobTemplate describes a template for creating copies of a predefined pod. +type JobTemplate struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + api.ObjectMeta `json:"metadata,omitempty"` + + // Template defines jobs that will be created from this template + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Template JobTemplateSpec `json:"template,omitempty"` +} + +// JobTemplateSpec describes the data a Job should have when created from a template +type JobTemplateSpec struct { + // Standard object's metadata of the jobs created from this template. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + api.ObjectMeta `json:"metadata,omitempty"` + + // Specification of the desired behavior of the job. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec JobSpec `json:"spec,omitempty"` +} + +// JobSpec describes how the job execution will look like. +type JobSpec struct { + + // Parallelism specifies the maximum desired number of pods the job should + // run at any given time. The actual number of pods running in steady state will + // be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), + // i.e. when the work left to do is less than max parallelism. + Parallelism *int32 `json:"parallelism,omitempty"` + + // Completions specifies the desired number of successfully finished pods the + // job should be run with. Setting to nil means that the success of any + // pod signals the success of all pods, and allows parallelism to have any positive + // value. Setting to 1 means that parallelism is limited to 1 and the success of that + // pod signals the success of the job. + Completions *int32 `json:"completions,omitempty"` + + // Optional duration in seconds relative to the startTime that the job may be active + // before the system tries to terminate it; value must be positive integer + ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty"` + + // Selector is a label query over pods that should match the pod count. + // Normally, the system sets this field for you. + Selector *unversioned.LabelSelector `json:"selector,omitempty"` + + // ManualSelector controls generation of pod labels and pod selectors. + // Leave `manualSelector` unset unless you are certain what you are doing. + // When false or unset, the system pick labels unique to this job + // and appends those labels to the pod template. When true, + // the user is responsible for picking unique labels and specifying + // the selector. Failure to pick a unique label may cause this + // and other jobs to not function correctly. However, You may see + // `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` + // API. + ManualSelector *bool `json:"manualSelector,omitempty"` + + // Template is the object that describes the pod that will be created when + // executing a job. + Template api.PodTemplateSpec `json:"template"` +} + +// JobStatus represents the current state of a Job. +type JobStatus struct { + + // Conditions represent the latest available observations of an object's current state. + Conditions []JobCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // StartTime represents time when the job was acknowledged by the Job Manager. + // It is not guaranteed to be set in happens-before order across separate operations. + // It is represented in RFC3339 form and is in UTC. + StartTime *unversioned.Time `json:"startTime,omitempty"` + + // CompletionTime represents time when the job was completed. It is not guaranteed to + // be set in happens-before order across separate operations. + // It is represented in RFC3339 form and is in UTC. + CompletionTime *unversioned.Time `json:"completionTime,omitempty"` + + // Active is the number of actively running pods. + Active int32 `json:"active,omitempty"` + + // Succeeded is the number of pods which reached Phase Succeeded. + Succeeded int32 `json:"succeeded,omitempty"` + + // Failed is the number of pods which reached Phase Failed. + Failed int32 `json:"failed,omitempty"` +} + +type JobConditionType string + +// These are valid conditions of a job. +const ( + // JobComplete means the job has completed its execution. + JobComplete JobConditionType = "Complete" + // JobFailed means the job has failed its execution. + JobFailed JobConditionType = "Failed" +) + +// JobCondition describes current state of a job. +type JobCondition struct { + // Type of job condition, Complete or Failed. + Type JobConditionType `json:"type"` + // Status of the condition, one of True, False, Unknown. + Status api.ConditionStatus `json:"status"` + // Last time the condition was checked. + LastProbeTime unversioned.Time `json:"lastProbeTime,omitempty"` + // Last time the condition transit from one status to another. + LastTransitionTime unversioned.Time `json:"lastTransitionTime,omitempty"` + // (brief) reason for the condition's last transition. + Reason string `json:"reason,omitempty"` + // Human readable message indicating details about last transition. + Message string `json:"message,omitempty"` +} + +// +genclient=true + +// ScheduledJob represents the configuration of a single scheduled job. +type ScheduledJob struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + api.ObjectMeta `json:"metadata,omitempty"` + + // Spec is a structure defining the expected behavior of a job, including the schedule. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec ScheduledJobSpec `json:"spec,omitempty"` + + // Status is a structure describing current status of a job. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status ScheduledJobStatus `json:"status,omitempty"` +} + +// ScheduledJobList is a collection of scheduled jobs. +type ScheduledJobList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is the list of ScheduledJob. + Items []ScheduledJob `json:"items"` +} + +// ScheduledJobSpec describes how the job execution will look like and when it will actually run. +type ScheduledJobSpec struct { + + // Schedule contains the schedule in Cron format, see https://en.wikipedia.org/wiki/Cron. + Schedule string `json:"schedule"` + + // Optional deadline in seconds for starting the job if it misses scheduled + // time for any reason. Missed jobs executions will be counted as failed ones. + StartingDeadlineSeconds *int64 `json:"startingDeadlineSeconds,omitempty"` + + // ConcurrencyPolicy specifies how to treat concurrent executions of a Job. + ConcurrencyPolicy ConcurrencyPolicy `json:"concurrencyPolicy,omitempty"` + + // Suspend flag tells the controller to suspend subsequent executions, it does + // not apply to already started executions. Defaults to false. + Suspend *bool `json:"suspend,omitempty"` + + // JobTemplate is the object that describes the job that will be created when + // executing a ScheduledJob. + JobTemplate JobTemplateSpec `json:"jobTemplate"` +} + +// ConcurrencyPolicy describes how the job will be handled. +// Only one of the following concurrent policies may be specified. +// If none of the following policies is specified, the default one +// is AllowConcurrent. +type ConcurrencyPolicy string + +const ( + // AllowConcurrent allows ScheduledJobs to run concurrently. + AllowConcurrent ConcurrencyPolicy = "Allow" + + // ForbidConcurrent forbids concurrent runs, skipping next run if previous + // hasn't finished yet. + ForbidConcurrent ConcurrencyPolicy = "Forbid" + + // ReplaceConcurrent cancels currently running job and replaces it with a new one. + ReplaceConcurrent ConcurrencyPolicy = "Replace" +) + +// ScheduledJobStatus represents the current state of a Job. +type ScheduledJobStatus struct { + // Active holds pointers to currently running jobs. + Active []api.ObjectReference `json:"active,omitempty"` + + // LastScheduleTime keeps information of when was the last time the job was successfully scheduled. + LastScheduleTime *unversioned.Time `json:"lastScheduleTime,omitempty"` +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/batch/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/zz_generated.deepcopy.go new file mode 100644 index 00000000..c5dfb802 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/batch/zz_generated.deepcopy.go @@ -0,0 +1,307 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package batch + +import ( + api "k8s.io/client-go/1.4/pkg/api" + unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + conversion "k8s.io/client-go/1.4/pkg/conversion" + runtime "k8s.io/client-go/1.4/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_Job, InType: reflect.TypeOf(&Job{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobCondition, InType: reflect.TypeOf(&JobCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobList, InType: reflect.TypeOf(&JobList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobSpec, InType: reflect.TypeOf(&JobSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobStatus, InType: reflect.TypeOf(&JobStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobTemplate, InType: reflect.TypeOf(&JobTemplate{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobTemplateSpec, InType: reflect.TypeOf(&JobTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_ScheduledJob, InType: reflect.TypeOf(&ScheduledJob{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_ScheduledJobList, InType: reflect.TypeOf(&ScheduledJobList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_ScheduledJobSpec, InType: reflect.TypeOf(&ScheduledJobSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_ScheduledJobStatus, InType: reflect.TypeOf(&ScheduledJobStatus{})}, + ) +} + +func DeepCopy_batch_Job(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Job) + out := out.(*Job) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_batch_JobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_batch_JobStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_JobCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobCondition) + out := out.(*JobCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_batch_JobList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobList) + out := out.(*JobList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Job, len(*in)) + for i := range *in { + if err := DeepCopy_batch_Job(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_batch_JobSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobSpec) + out := out.(*JobSpec) + if in.Parallelism != nil { + in, out := &in.Parallelism, &out.Parallelism + *out = new(int32) + **out = **in + } else { + out.Parallelism = nil + } + if in.Completions != nil { + in, out := &in.Completions, &out.Completions + *out = new(int32) + **out = **in + } else { + out.Completions = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if in.ManualSelector != nil { + in, out := &in.ManualSelector, &out.ManualSelector + *out = new(bool) + **out = **in + } else { + out.ManualSelector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_JobStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobStatus) + out := out.(*JobStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]JobCondition, len(*in)) + for i := range *in { + if err := DeepCopy_batch_JobCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.CompletionTime != nil { + in, out := &in.CompletionTime, &out.CompletionTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.CompletionTime = nil + } + out.Active = in.Active + out.Succeeded = in.Succeeded + out.Failed = in.Failed + return nil + } +} + +func DeepCopy_batch_JobTemplate(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobTemplate) + out := out.(*JobTemplate) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_batch_JobTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_JobTemplateSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobTemplateSpec) + out := out.(*JobTemplateSpec) + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_batch_JobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_ScheduledJob(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJob) + out := out.(*ScheduledJob) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_batch_ScheduledJobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_batch_ScheduledJobStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_ScheduledJobList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobList) + out := out.(*ScheduledJobList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ScheduledJob, len(*in)) + for i := range *in { + if err := DeepCopy_batch_ScheduledJob(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_batch_ScheduledJobSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobSpec) + out := out.(*ScheduledJobSpec) + out.Schedule = in.Schedule + if in.StartingDeadlineSeconds != nil { + in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.StartingDeadlineSeconds = nil + } + out.ConcurrencyPolicy = in.ConcurrencyPolicy + if in.Suspend != nil { + in, out := &in.Suspend, &out.Suspend + *out = new(bool) + **out = **in + } else { + out.Suspend = nil + } + if err := DeepCopy_batch_JobTemplateSpec(&in.JobTemplate, &out.JobTemplate, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_ScheduledJobStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobStatus) + out := out.(*ScheduledJobStatus) + if in.Active != nil { + in, out := &in.Active, &out.Active + *out = make([]api.ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Active = nil + } + if in.LastScheduleTime != nil { + in, out := &in.LastScheduleTime, &out.LastScheduleTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.LastScheduleTime = nil + } + return nil + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/doc.go b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/doc.go new file mode 100644 index 00000000..2bbb71d0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package extensions diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/helpers.go b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/helpers.go new file mode 100644 index 00000000..27d3e23a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/helpers.go @@ -0,0 +1,37 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package extensions + +import ( + "strings" +) + +// SysctlsFromPodSecurityPolicyAnnotation parses an annotation value of the key +// SysctlsSecurityPolocyAnnotationKey into a slice of sysctls. An empty slice +// is returned if annotation is the empty string. +func SysctlsFromPodSecurityPolicyAnnotation(annotation string) ([]string, error) { + if len(annotation) == 0 { + return []string{}, nil + } + + return strings.Split(annotation, ","), nil +} + +// PodAnnotationsFromSysctls creates an annotation value for a slice of Sysctls. +func PodAnnotationsFromSysctls(sysctls []string) string { + return strings.Join(sysctls, ",") +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/register.go b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/register.go new file mode 100644 index 00000000..37180c4e --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/register.go @@ -0,0 +1,81 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package extensions + +import ( + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/apis/autoscaling" + "k8s.io/client-go/1.4/pkg/apis/batch" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// GroupName is the group name use in this package +const GroupName = "extensions" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) unversioned.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) unversioned.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + // TODO this gets cleaned up when the types are fixed + scheme.AddKnownTypes(SchemeGroupVersion, + &Deployment{}, + &DeploymentList{}, + &DeploymentRollback{}, + &autoscaling.HorizontalPodAutoscaler{}, + &autoscaling.HorizontalPodAutoscalerList{}, + &batch.Job{}, + &batch.JobList{}, + &batch.JobTemplate{}, + &ReplicationControllerDummy{}, + &Scale{}, + &ThirdPartyResource{}, + &ThirdPartyResourceList{}, + &DaemonSetList{}, + &DaemonSet{}, + &ThirdPartyResourceData{}, + &ThirdPartyResourceDataList{}, + &Ingress{}, + &IngressList{}, + &api.ListOptions{}, + &api.DeleteOptions{}, + &ReplicaSet{}, + &ReplicaSetList{}, + &api.ExportOptions{}, + &PodSecurityPolicy{}, + &PodSecurityPolicyList{}, + &NetworkPolicy{}, + &NetworkPolicyList{}, + ) + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/types.generated.go b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/types.generated.go new file mode 100644 index 00000000..681a3149 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/types.generated.go @@ -0,0 +1,17991 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// ************************************************************ +// DO NOT EDIT. +// THIS FILE IS AUTO-GENERATED BY codecgen. +// ************************************************************ + +package extensions + +import ( + "errors" + "fmt" + codec1978 "github.com/ugorji/go/codec" + pkg2_api "k8s.io/client-go/1.4/pkg/api" + pkg4_resource "k8s.io/client-go/1.4/pkg/api/resource" + pkg1_unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + pkg3_types "k8s.io/client-go/1.4/pkg/types" + pkg5_intstr "k8s.io/client-go/1.4/pkg/util/intstr" + "reflect" + "runtime" + time "time" +) + +const ( + // ----- content types ---- + codecSelferC_UTF81234 = 1 + codecSelferC_RAW1234 = 0 + // ----- value types used ---- + codecSelferValueTypeArray1234 = 10 + codecSelferValueTypeMap1234 = 9 + // ----- containerStateValues ---- + codecSelfer_containerMapKey1234 = 2 + codecSelfer_containerMapValue1234 = 3 + codecSelfer_containerMapEnd1234 = 4 + codecSelfer_containerArrayElem1234 = 6 + codecSelfer_containerArrayEnd1234 = 7 +) + +var ( + codecSelferBitsize1234 = uint8(reflect.TypeOf(uint(0)).Bits()) + codecSelferOnlyMapOrArrayEncodeToStructErr1234 = errors.New(`only encoded map or array can be decoded into a struct`) +) + +type codecSelfer1234 struct{} + +func init() { + if codec1978.GenVersion != 5 { + _, file, _, _ := runtime.Caller(0) + err := fmt.Errorf("codecgen version mismatch: current: %v, need %v. Re-generate file: %v", + 5, codec1978.GenVersion, file) + panic(err) + } + if false { // reference the types, but skip this branch at build/run time + var v0 pkg2_api.ObjectMeta + var v1 pkg4_resource.Quantity + var v2 pkg1_unversioned.LabelSelector + var v3 pkg3_types.UID + var v4 pkg5_intstr.IntOrString + var v5 time.Time + _, _, _, _, _, _ = v0, v1, v2, v3, v4, v5 + } +} + +func (x *ScaleSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [1]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[0] = x.Replicas != 0 + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(1) + } else { + yynn2 = 0 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[0] { + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq2[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ScaleSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym6 := z.DecBinary() + _ = yym6 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct7 := r.ContainerType() + if yyct7 == codecSelferValueTypeMap1234 { + yyl7 := r.ReadMapStart() + if yyl7 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl7, d) + } + } else if yyct7 == codecSelferValueTypeArray1234 { + yyl7 := r.ReadArrayStart() + if yyl7 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl7, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ScaleSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys8Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys8Slc + var yyhl8 bool = l >= 0 + for yyj8 := 0; ; yyj8++ { + if yyhl8 { + if yyj8 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys8Slc = r.DecodeBytes(yys8Slc, true, true) + yys8 := string(yys8Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys8 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys8) + } // end switch yys8 + } // end for yyj8 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ScaleSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj10-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ScaleStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym12 := z.EncBinary() + _ = yym12 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep13 := !z.EncBinary() + yy2arr13 := z.EncBasicHandle().StructToArray + var yyq13 [2]bool + _, _, _ = yysep13, yyq13, yy2arr13 + const yyr13 bool = false + yyq13[1] = x.Selector != nil + var yynn13 int + if yyr13 || yy2arr13 { + r.EncodeArrayStart(2) + } else { + yynn13 = 1 + for _, b := range yyq13 { + if b { + yynn13++ + } + } + r.EncodeMapStart(yynn13) + yynn13 = 0 + } + if yyr13 || yy2arr13 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym15 := z.EncBinary() + _ = yym15 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym16 := z.EncBinary() + _ = yym16 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + if yyr13 || yy2arr13 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq13[1] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym18 := z.EncBinary() + _ = yym18 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq13[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym19 := z.EncBinary() + _ = yym19 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } + } + if yyr13 || yy2arr13 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ScaleStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym20 := z.DecBinary() + _ = yym20 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct21 := r.ContainerType() + if yyct21 == codecSelferValueTypeMap1234 { + yyl21 := r.ReadMapStart() + if yyl21 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl21, d) + } + } else if yyct21 == codecSelferValueTypeArray1234 { + yyl21 := r.ReadArrayStart() + if yyl21 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl21, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ScaleStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys22Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys22Slc + var yyhl22 bool = l >= 0 + for yyj22 := 0; ; yyj22++ { + if yyhl22 { + if yyj22 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys22Slc = r.DecodeBytes(yys22Slc, true, true) + yys22 := string(yys22Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys22 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "selector": + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym25 := z.DecBinary() + _ = yym25 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys22) + } // end switch yys22 + } // end for yyj22 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ScaleStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj26 int + var yyb26 bool + var yyhl26 bool = l >= 0 + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym29 := z.DecBinary() + _ = yym29 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + for { + yyj26++ + if yyhl26 { + yyb26 = yyj26 > l + } else { + yyb26 = r.CheckBreak() + } + if yyb26 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj26-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Scale) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym30 := z.EncBinary() + _ = yym30 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep31 := !z.EncBinary() + yy2arr31 := z.EncBasicHandle().StructToArray + var yyq31 [5]bool + _, _, _ = yysep31, yyq31, yy2arr31 + const yyr31 bool = false + yyq31[0] = x.Kind != "" + yyq31[1] = x.APIVersion != "" + yyq31[2] = true + yyq31[3] = true + yyq31[4] = true + var yynn31 int + if yyr31 || yy2arr31 { + r.EncodeArrayStart(5) + } else { + yynn31 = 0 + for _, b := range yyq31 { + if b { + yynn31++ + } + } + r.EncodeMapStart(yynn31) + yynn31 = 0 + } + if yyr31 || yy2arr31 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq31[0] { + yym33 := z.EncBinary() + _ = yym33 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq31[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym34 := z.EncBinary() + _ = yym34 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr31 || yy2arr31 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq31[1] { + yym36 := z.EncBinary() + _ = yym36 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq31[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym37 := z.EncBinary() + _ = yym37 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr31 || yy2arr31 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq31[2] { + yy39 := &x.ObjectMeta + yy39.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq31[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy40 := &x.ObjectMeta + yy40.CodecEncodeSelf(e) + } + } + if yyr31 || yy2arr31 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq31[3] { + yy42 := &x.Spec + yy42.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq31[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy43 := &x.Spec + yy43.CodecEncodeSelf(e) + } + } + if yyr31 || yy2arr31 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq31[4] { + yy45 := &x.Status + yy45.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq31[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy46 := &x.Status + yy46.CodecEncodeSelf(e) + } + } + if yyr31 || yy2arr31 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Scale) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym47 := z.DecBinary() + _ = yym47 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct48 := r.ContainerType() + if yyct48 == codecSelferValueTypeMap1234 { + yyl48 := r.ReadMapStart() + if yyl48 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl48, d) + } + } else if yyct48 == codecSelferValueTypeArray1234 { + yyl48 := r.ReadArrayStart() + if yyl48 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl48, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Scale) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys49Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys49Slc + var yyhl49 bool = l >= 0 + for yyj49 := 0; ; yyj49++ { + if yyhl49 { + if yyj49 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys49Slc = r.DecodeBytes(yys49Slc, true, true) + yys49 := string(yys49Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys49 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv52 := &x.ObjectMeta + yyv52.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ScaleSpec{} + } else { + yyv53 := &x.Spec + yyv53.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ScaleStatus{} + } else { + yyv54 := &x.Status + yyv54.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys49) + } // end switch yys49 + } // end for yyj49 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Scale) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj55 int + var yyb55 bool + var yyhl55 bool = l >= 0 + yyj55++ + if yyhl55 { + yyb55 = yyj55 > l + } else { + yyb55 = r.CheckBreak() + } + if yyb55 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj55++ + if yyhl55 { + yyb55 = yyj55 > l + } else { + yyb55 = r.CheckBreak() + } + if yyb55 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj55++ + if yyhl55 { + yyb55 = yyj55 > l + } else { + yyb55 = r.CheckBreak() + } + if yyb55 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv58 := &x.ObjectMeta + yyv58.CodecDecodeSelf(d) + } + yyj55++ + if yyhl55 { + yyb55 = yyj55 > l + } else { + yyb55 = r.CheckBreak() + } + if yyb55 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ScaleSpec{} + } else { + yyv59 := &x.Spec + yyv59.CodecDecodeSelf(d) + } + yyj55++ + if yyhl55 { + yyb55 = yyj55 > l + } else { + yyb55 = r.CheckBreak() + } + if yyb55 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ScaleStatus{} + } else { + yyv60 := &x.Status + yyv60.CodecDecodeSelf(d) + } + for { + yyj55++ + if yyhl55 { + yyb55 = yyj55 > l + } else { + yyb55 = r.CheckBreak() + } + if yyb55 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj55-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicationControllerDummy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym61 := z.EncBinary() + _ = yym61 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep62 := !z.EncBinary() + yy2arr62 := z.EncBasicHandle().StructToArray + var yyq62 [2]bool + _, _, _ = yysep62, yyq62, yy2arr62 + const yyr62 bool = false + yyq62[0] = x.Kind != "" + yyq62[1] = x.APIVersion != "" + var yynn62 int + if yyr62 || yy2arr62 { + r.EncodeArrayStart(2) + } else { + yynn62 = 0 + for _, b := range yyq62 { + if b { + yynn62++ + } + } + r.EncodeMapStart(yynn62) + yynn62 = 0 + } + if yyr62 || yy2arr62 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq62[0] { + yym64 := z.EncBinary() + _ = yym64 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq62[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym65 := z.EncBinary() + _ = yym65 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr62 || yy2arr62 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq62[1] { + yym67 := z.EncBinary() + _ = yym67 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq62[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym68 := z.EncBinary() + _ = yym68 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr62 || yy2arr62 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicationControllerDummy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym69 := z.DecBinary() + _ = yym69 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct70 := r.ContainerType() + if yyct70 == codecSelferValueTypeMap1234 { + yyl70 := r.ReadMapStart() + if yyl70 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl70, d) + } + } else if yyct70 == codecSelferValueTypeArray1234 { + yyl70 := r.ReadArrayStart() + if yyl70 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl70, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicationControllerDummy) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys71Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys71Slc + var yyhl71 bool = l >= 0 + for yyj71 := 0; ; yyj71++ { + if yyhl71 { + if yyj71 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys71Slc = r.DecodeBytes(yys71Slc, true, true) + yys71 := string(yys71Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys71 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys71) + } // end switch yys71 + } // end for yyj71 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicationControllerDummy) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj74 int + var yyb74 bool + var yyhl74 bool = l >= 0 + yyj74++ + if yyhl74 { + yyb74 = yyj74 > l + } else { + yyb74 = r.CheckBreak() + } + if yyb74 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj74++ + if yyhl74 { + yyb74 = yyj74 > l + } else { + yyb74 = r.CheckBreak() + } + if yyb74 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + for { + yyj74++ + if yyhl74 { + yyb74 = yyj74 > l + } else { + yyb74 = r.CheckBreak() + } + if yyb74 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj74-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CustomMetricTarget) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym77 := z.EncBinary() + _ = yym77 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep78 := !z.EncBinary() + yy2arr78 := z.EncBasicHandle().StructToArray + var yyq78 [2]bool + _, _, _ = yysep78, yyq78, yy2arr78 + const yyr78 bool = false + var yynn78 int + if yyr78 || yy2arr78 { + r.EncodeArrayStart(2) + } else { + yynn78 = 2 + for _, b := range yyq78 { + if b { + yynn78++ + } + } + r.EncodeMapStart(yynn78) + yynn78 = 0 + } + if yyr78 || yy2arr78 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym80 := z.EncBinary() + _ = yym80 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym81 := z.EncBinary() + _ = yym81 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr78 || yy2arr78 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy83 := &x.TargetValue + yym84 := z.EncBinary() + _ = yym84 + if false { + } else if z.HasExtensions() && z.EncExt(yy83) { + } else if !yym84 && z.IsJSONHandle() { + z.EncJSONMarshal(yy83) + } else { + z.EncFallback(yy83) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy85 := &x.TargetValue + yym86 := z.EncBinary() + _ = yym86 + if false { + } else if z.HasExtensions() && z.EncExt(yy85) { + } else if !yym86 && z.IsJSONHandle() { + z.EncJSONMarshal(yy85) + } else { + z.EncFallback(yy85) + } + } + if yyr78 || yy2arr78 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CustomMetricTarget) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym87 := z.DecBinary() + _ = yym87 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct88 := r.ContainerType() + if yyct88 == codecSelferValueTypeMap1234 { + yyl88 := r.ReadMapStart() + if yyl88 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl88, d) + } + } else if yyct88 == codecSelferValueTypeArray1234 { + yyl88 := r.ReadArrayStart() + if yyl88 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl88, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CustomMetricTarget) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys89Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys89Slc + var yyhl89 bool = l >= 0 + for yyj89 := 0; ; yyj89++ { + if yyhl89 { + if yyj89 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys89Slc = r.DecodeBytes(yys89Slc, true, true) + yys89 := string(yys89Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys89 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.TargetValue = pkg4_resource.Quantity{} + } else { + yyv91 := &x.TargetValue + yym92 := z.DecBinary() + _ = yym92 + if false { + } else if z.HasExtensions() && z.DecExt(yyv91) { + } else if !yym92 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv91) + } else { + z.DecFallback(yyv91, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys89) + } // end switch yys89 + } // end for yyj89 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CustomMetricTarget) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj93 int + var yyb93 bool + var yyhl93 bool = l >= 0 + yyj93++ + if yyhl93 { + yyb93 = yyj93 > l + } else { + yyb93 = r.CheckBreak() + } + if yyb93 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj93++ + if yyhl93 { + yyb93 = yyj93 > l + } else { + yyb93 = r.CheckBreak() + } + if yyb93 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TargetValue = pkg4_resource.Quantity{} + } else { + yyv95 := &x.TargetValue + yym96 := z.DecBinary() + _ = yym96 + if false { + } else if z.HasExtensions() && z.DecExt(yyv95) { + } else if !yym96 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv95) + } else { + z.DecFallback(yyv95, false) + } + } + for { + yyj93++ + if yyhl93 { + yyb93 = yyj93 > l + } else { + yyb93 = r.CheckBreak() + } + if yyb93 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj93-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CustomMetricTargetList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym97 := z.EncBinary() + _ = yym97 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep98 := !z.EncBinary() + yy2arr98 := z.EncBasicHandle().StructToArray + var yyq98 [1]bool + _, _, _ = yysep98, yyq98, yy2arr98 + const yyr98 bool = false + var yynn98 int + if yyr98 || yy2arr98 { + r.EncodeArrayStart(1) + } else { + yynn98 = 1 + for _, b := range yyq98 { + if b { + yynn98++ + } + } + r.EncodeMapStart(yynn98) + yynn98 = 0 + } + if yyr98 || yy2arr98 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym100 := z.EncBinary() + _ = yym100 + if false { + } else { + h.encSliceCustomMetricTarget(([]CustomMetricTarget)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym101 := z.EncBinary() + _ = yym101 + if false { + } else { + h.encSliceCustomMetricTarget(([]CustomMetricTarget)(x.Items), e) + } + } + } + if yyr98 || yy2arr98 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CustomMetricTargetList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym102 := z.DecBinary() + _ = yym102 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct103 := r.ContainerType() + if yyct103 == codecSelferValueTypeMap1234 { + yyl103 := r.ReadMapStart() + if yyl103 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl103, d) + } + } else if yyct103 == codecSelferValueTypeArray1234 { + yyl103 := r.ReadArrayStart() + if yyl103 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl103, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CustomMetricTargetList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys104Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys104Slc + var yyhl104 bool = l >= 0 + for yyj104 := 0; ; yyj104++ { + if yyhl104 { + if yyj104 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys104Slc = r.DecodeBytes(yys104Slc, true, true) + yys104 := string(yys104Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys104 { + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv105 := &x.Items + yym106 := z.DecBinary() + _ = yym106 + if false { + } else { + h.decSliceCustomMetricTarget((*[]CustomMetricTarget)(yyv105), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys104) + } // end switch yys104 + } // end for yyj104 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CustomMetricTargetList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj107 int + var yyb107 bool + var yyhl107 bool = l >= 0 + yyj107++ + if yyhl107 { + yyb107 = yyj107 > l + } else { + yyb107 = r.CheckBreak() + } + if yyb107 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv108 := &x.Items + yym109 := z.DecBinary() + _ = yym109 + if false { + } else { + h.decSliceCustomMetricTarget((*[]CustomMetricTarget)(yyv108), d) + } + } + for { + yyj107++ + if yyhl107 { + yyb107 = yyj107 > l + } else { + yyb107 = r.CheckBreak() + } + if yyb107 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj107-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CustomMetricCurrentStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym110 := z.EncBinary() + _ = yym110 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep111 := !z.EncBinary() + yy2arr111 := z.EncBasicHandle().StructToArray + var yyq111 [2]bool + _, _, _ = yysep111, yyq111, yy2arr111 + const yyr111 bool = false + var yynn111 int + if yyr111 || yy2arr111 { + r.EncodeArrayStart(2) + } else { + yynn111 = 2 + for _, b := range yyq111 { + if b { + yynn111++ + } + } + r.EncodeMapStart(yynn111) + yynn111 = 0 + } + if yyr111 || yy2arr111 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym113 := z.EncBinary() + _ = yym113 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym114 := z.EncBinary() + _ = yym114 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr111 || yy2arr111 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy116 := &x.CurrentValue + yym117 := z.EncBinary() + _ = yym117 + if false { + } else if z.HasExtensions() && z.EncExt(yy116) { + } else if !yym117 && z.IsJSONHandle() { + z.EncJSONMarshal(yy116) + } else { + z.EncFallback(yy116) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("value")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy118 := &x.CurrentValue + yym119 := z.EncBinary() + _ = yym119 + if false { + } else if z.HasExtensions() && z.EncExt(yy118) { + } else if !yym119 && z.IsJSONHandle() { + z.EncJSONMarshal(yy118) + } else { + z.EncFallback(yy118) + } + } + if yyr111 || yy2arr111 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CustomMetricCurrentStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym120 := z.DecBinary() + _ = yym120 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct121 := r.ContainerType() + if yyct121 == codecSelferValueTypeMap1234 { + yyl121 := r.ReadMapStart() + if yyl121 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl121, d) + } + } else if yyct121 == codecSelferValueTypeArray1234 { + yyl121 := r.ReadArrayStart() + if yyl121 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl121, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CustomMetricCurrentStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys122Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys122Slc + var yyhl122 bool = l >= 0 + for yyj122 := 0; ; yyj122++ { + if yyhl122 { + if yyj122 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys122Slc = r.DecodeBytes(yys122Slc, true, true) + yys122 := string(yys122Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys122 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "value": + if r.TryDecodeAsNil() { + x.CurrentValue = pkg4_resource.Quantity{} + } else { + yyv124 := &x.CurrentValue + yym125 := z.DecBinary() + _ = yym125 + if false { + } else if z.HasExtensions() && z.DecExt(yyv124) { + } else if !yym125 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv124) + } else { + z.DecFallback(yyv124, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys122) + } // end switch yys122 + } // end for yyj122 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CustomMetricCurrentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj126 int + var yyb126 bool + var yyhl126 bool = l >= 0 + yyj126++ + if yyhl126 { + yyb126 = yyj126 > l + } else { + yyb126 = r.CheckBreak() + } + if yyb126 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj126++ + if yyhl126 { + yyb126 = yyj126 > l + } else { + yyb126 = r.CheckBreak() + } + if yyb126 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CurrentValue = pkg4_resource.Quantity{} + } else { + yyv128 := &x.CurrentValue + yym129 := z.DecBinary() + _ = yym129 + if false { + } else if z.HasExtensions() && z.DecExt(yyv128) { + } else if !yym129 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv128) + } else { + z.DecFallback(yyv128, false) + } + } + for { + yyj126++ + if yyhl126 { + yyb126 = yyj126 > l + } else { + yyb126 = r.CheckBreak() + } + if yyb126 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj126-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *CustomMetricCurrentStatusList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym130 := z.EncBinary() + _ = yym130 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep131 := !z.EncBinary() + yy2arr131 := z.EncBasicHandle().StructToArray + var yyq131 [1]bool + _, _, _ = yysep131, yyq131, yy2arr131 + const yyr131 bool = false + var yynn131 int + if yyr131 || yy2arr131 { + r.EncodeArrayStart(1) + } else { + yynn131 = 1 + for _, b := range yyq131 { + if b { + yynn131++ + } + } + r.EncodeMapStart(yynn131) + yynn131 = 0 + } + if yyr131 || yy2arr131 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym133 := z.EncBinary() + _ = yym133 + if false { + } else { + h.encSliceCustomMetricCurrentStatus(([]CustomMetricCurrentStatus)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym134 := z.EncBinary() + _ = yym134 + if false { + } else { + h.encSliceCustomMetricCurrentStatus(([]CustomMetricCurrentStatus)(x.Items), e) + } + } + } + if yyr131 || yy2arr131 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *CustomMetricCurrentStatusList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym135 := z.DecBinary() + _ = yym135 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct136 := r.ContainerType() + if yyct136 == codecSelferValueTypeMap1234 { + yyl136 := r.ReadMapStart() + if yyl136 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl136, d) + } + } else if yyct136 == codecSelferValueTypeArray1234 { + yyl136 := r.ReadArrayStart() + if yyl136 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl136, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *CustomMetricCurrentStatusList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys137Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys137Slc + var yyhl137 bool = l >= 0 + for yyj137 := 0; ; yyj137++ { + if yyhl137 { + if yyj137 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys137Slc = r.DecodeBytes(yys137Slc, true, true) + yys137 := string(yys137Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys137 { + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv138 := &x.Items + yym139 := z.DecBinary() + _ = yym139 + if false { + } else { + h.decSliceCustomMetricCurrentStatus((*[]CustomMetricCurrentStatus)(yyv138), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys137) + } // end switch yys137 + } // end for yyj137 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *CustomMetricCurrentStatusList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj140 int + var yyb140 bool + var yyhl140 bool = l >= 0 + yyj140++ + if yyhl140 { + yyb140 = yyj140 > l + } else { + yyb140 = r.CheckBreak() + } + if yyb140 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv141 := &x.Items + yym142 := z.DecBinary() + _ = yym142 + if false { + } else { + h.decSliceCustomMetricCurrentStatus((*[]CustomMetricCurrentStatus)(yyv141), d) + } + } + for { + yyj140++ + if yyhl140 { + yyb140 = yyj140 > l + } else { + yyb140 = r.CheckBreak() + } + if yyb140 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj140-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ThirdPartyResource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym143 := z.EncBinary() + _ = yym143 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep144 := !z.EncBinary() + yy2arr144 := z.EncBasicHandle().StructToArray + var yyq144 [5]bool + _, _, _ = yysep144, yyq144, yy2arr144 + const yyr144 bool = false + yyq144[0] = x.Kind != "" + yyq144[1] = x.APIVersion != "" + yyq144[2] = true + yyq144[3] = x.Description != "" + yyq144[4] = len(x.Versions) != 0 + var yynn144 int + if yyr144 || yy2arr144 { + r.EncodeArrayStart(5) + } else { + yynn144 = 0 + for _, b := range yyq144 { + if b { + yynn144++ + } + } + r.EncodeMapStart(yynn144) + yynn144 = 0 + } + if yyr144 || yy2arr144 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq144[0] { + yym146 := z.EncBinary() + _ = yym146 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq144[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym147 := z.EncBinary() + _ = yym147 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr144 || yy2arr144 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq144[1] { + yym149 := z.EncBinary() + _ = yym149 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq144[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym150 := z.EncBinary() + _ = yym150 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr144 || yy2arr144 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq144[2] { + yy152 := &x.ObjectMeta + yy152.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq144[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy153 := &x.ObjectMeta + yy153.CodecEncodeSelf(e) + } + } + if yyr144 || yy2arr144 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq144[3] { + yym155 := z.EncBinary() + _ = yym155 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Description)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq144[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("description")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym156 := z.EncBinary() + _ = yym156 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Description)) + } + } + } + if yyr144 || yy2arr144 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq144[4] { + if x.Versions == nil { + r.EncodeNil() + } else { + yym158 := z.EncBinary() + _ = yym158 + if false { + } else { + h.encSliceAPIVersion(([]APIVersion)(x.Versions), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq144[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("versions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Versions == nil { + r.EncodeNil() + } else { + yym159 := z.EncBinary() + _ = yym159 + if false { + } else { + h.encSliceAPIVersion(([]APIVersion)(x.Versions), e) + } + } + } + } + if yyr144 || yy2arr144 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ThirdPartyResource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym160 := z.DecBinary() + _ = yym160 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct161 := r.ContainerType() + if yyct161 == codecSelferValueTypeMap1234 { + yyl161 := r.ReadMapStart() + if yyl161 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl161, d) + } + } else if yyct161 == codecSelferValueTypeArray1234 { + yyl161 := r.ReadArrayStart() + if yyl161 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl161, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ThirdPartyResource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys162Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys162Slc + var yyhl162 bool = l >= 0 + for yyj162 := 0; ; yyj162++ { + if yyhl162 { + if yyj162 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys162Slc = r.DecodeBytes(yys162Slc, true, true) + yys162 := string(yys162Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys162 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv165 := &x.ObjectMeta + yyv165.CodecDecodeSelf(d) + } + case "description": + if r.TryDecodeAsNil() { + x.Description = "" + } else { + x.Description = string(r.DecodeString()) + } + case "versions": + if r.TryDecodeAsNil() { + x.Versions = nil + } else { + yyv167 := &x.Versions + yym168 := z.DecBinary() + _ = yym168 + if false { + } else { + h.decSliceAPIVersion((*[]APIVersion)(yyv167), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys162) + } // end switch yys162 + } // end for yyj162 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ThirdPartyResource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj169 int + var yyb169 bool + var yyhl169 bool = l >= 0 + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l + } else { + yyb169 = r.CheckBreak() + } + if yyb169 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l + } else { + yyb169 = r.CheckBreak() + } + if yyb169 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l + } else { + yyb169 = r.CheckBreak() + } + if yyb169 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv172 := &x.ObjectMeta + yyv172.CodecDecodeSelf(d) + } + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l + } else { + yyb169 = r.CheckBreak() + } + if yyb169 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Description = "" + } else { + x.Description = string(r.DecodeString()) + } + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l + } else { + yyb169 = r.CheckBreak() + } + if yyb169 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Versions = nil + } else { + yyv174 := &x.Versions + yym175 := z.DecBinary() + _ = yym175 + if false { + } else { + h.decSliceAPIVersion((*[]APIVersion)(yyv174), d) + } + } + for { + yyj169++ + if yyhl169 { + yyb169 = yyj169 > l + } else { + yyb169 = r.CheckBreak() + } + if yyb169 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj169-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ThirdPartyResourceList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym176 := z.EncBinary() + _ = yym176 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep177 := !z.EncBinary() + yy2arr177 := z.EncBasicHandle().StructToArray + var yyq177 [4]bool + _, _, _ = yysep177, yyq177, yy2arr177 + const yyr177 bool = false + yyq177[0] = x.Kind != "" + yyq177[1] = x.APIVersion != "" + yyq177[2] = true + var yynn177 int + if yyr177 || yy2arr177 { + r.EncodeArrayStart(4) + } else { + yynn177 = 1 + for _, b := range yyq177 { + if b { + yynn177++ + } + } + r.EncodeMapStart(yynn177) + yynn177 = 0 + } + if yyr177 || yy2arr177 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq177[0] { + yym179 := z.EncBinary() + _ = yym179 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq177[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym180 := z.EncBinary() + _ = yym180 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr177 || yy2arr177 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq177[1] { + yym182 := z.EncBinary() + _ = yym182 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq177[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym183 := z.EncBinary() + _ = yym183 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr177 || yy2arr177 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq177[2] { + yy185 := &x.ListMeta + yym186 := z.EncBinary() + _ = yym186 + if false { + } else if z.HasExtensions() && z.EncExt(yy185) { + } else { + z.EncFallback(yy185) + } + } else { + r.EncodeNil() + } + } else { + if yyq177[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy187 := &x.ListMeta + yym188 := z.EncBinary() + _ = yym188 + if false { + } else if z.HasExtensions() && z.EncExt(yy187) { + } else { + z.EncFallback(yy187) + } + } + } + if yyr177 || yy2arr177 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym190 := z.EncBinary() + _ = yym190 + if false { + } else { + h.encSliceThirdPartyResource(([]ThirdPartyResource)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym191 := z.EncBinary() + _ = yym191 + if false { + } else { + h.encSliceThirdPartyResource(([]ThirdPartyResource)(x.Items), e) + } + } + } + if yyr177 || yy2arr177 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ThirdPartyResourceList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym192 := z.DecBinary() + _ = yym192 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct193 := r.ContainerType() + if yyct193 == codecSelferValueTypeMap1234 { + yyl193 := r.ReadMapStart() + if yyl193 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl193, d) + } + } else if yyct193 == codecSelferValueTypeArray1234 { + yyl193 := r.ReadArrayStart() + if yyl193 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl193, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ThirdPartyResourceList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys194Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys194Slc + var yyhl194 bool = l >= 0 + for yyj194 := 0; ; yyj194++ { + if yyhl194 { + if yyj194 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys194Slc = r.DecodeBytes(yys194Slc, true, true) + yys194 := string(yys194Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys194 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv197 := &x.ListMeta + yym198 := z.DecBinary() + _ = yym198 + if false { + } else if z.HasExtensions() && z.DecExt(yyv197) { + } else { + z.DecFallback(yyv197, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv199 := &x.Items + yym200 := z.DecBinary() + _ = yym200 + if false { + } else { + h.decSliceThirdPartyResource((*[]ThirdPartyResource)(yyv199), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys194) + } // end switch yys194 + } // end for yyj194 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ThirdPartyResourceList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj201 int + var yyb201 bool + var yyhl201 bool = l >= 0 + yyj201++ + if yyhl201 { + yyb201 = yyj201 > l + } else { + yyb201 = r.CheckBreak() + } + if yyb201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj201++ + if yyhl201 { + yyb201 = yyj201 > l + } else { + yyb201 = r.CheckBreak() + } + if yyb201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj201++ + if yyhl201 { + yyb201 = yyj201 > l + } else { + yyb201 = r.CheckBreak() + } + if yyb201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv204 := &x.ListMeta + yym205 := z.DecBinary() + _ = yym205 + if false { + } else if z.HasExtensions() && z.DecExt(yyv204) { + } else { + z.DecFallback(yyv204, false) + } + } + yyj201++ + if yyhl201 { + yyb201 = yyj201 > l + } else { + yyb201 = r.CheckBreak() + } + if yyb201 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv206 := &x.Items + yym207 := z.DecBinary() + _ = yym207 + if false { + } else { + h.decSliceThirdPartyResource((*[]ThirdPartyResource)(yyv206), d) + } + } + for { + yyj201++ + if yyhl201 { + yyb201 = yyj201 > l + } else { + yyb201 = r.CheckBreak() + } + if yyb201 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj201-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *APIVersion) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym208 := z.EncBinary() + _ = yym208 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep209 := !z.EncBinary() + yy2arr209 := z.EncBasicHandle().StructToArray + var yyq209 [1]bool + _, _, _ = yysep209, yyq209, yy2arr209 + const yyr209 bool = false + yyq209[0] = x.Name != "" + var yynn209 int + if yyr209 || yy2arr209 { + r.EncodeArrayStart(1) + } else { + yynn209 = 0 + for _, b := range yyq209 { + if b { + yynn209++ + } + } + r.EncodeMapStart(yynn209) + yynn209 = 0 + } + if yyr209 || yy2arr209 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq209[0] { + yym211 := z.EncBinary() + _ = yym211 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq209[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym212 := z.EncBinary() + _ = yym212 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + } + if yyr209 || yy2arr209 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *APIVersion) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym213 := z.DecBinary() + _ = yym213 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct214 := r.ContainerType() + if yyct214 == codecSelferValueTypeMap1234 { + yyl214 := r.ReadMapStart() + if yyl214 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl214, d) + } + } else if yyct214 == codecSelferValueTypeArray1234 { + yyl214 := r.ReadArrayStart() + if yyl214 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl214, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *APIVersion) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys215Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys215Slc + var yyhl215 bool = l >= 0 + for yyj215 := 0; ; yyj215++ { + if yyhl215 { + if yyj215 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys215Slc = r.DecodeBytes(yys215Slc, true, true) + yys215 := string(yys215Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys215 { + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys215) + } // end switch yys215 + } // end for yyj215 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *APIVersion) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj217 int + var yyb217 bool + var yyhl217 bool = l >= 0 + yyj217++ + if yyhl217 { + yyb217 = yyj217 > l + } else { + yyb217 = r.CheckBreak() + } + if yyb217 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + for { + yyj217++ + if yyhl217 { + yyb217 = yyj217 > l + } else { + yyb217 = r.CheckBreak() + } + if yyb217 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj217-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ThirdPartyResourceData) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym219 := z.EncBinary() + _ = yym219 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep220 := !z.EncBinary() + yy2arr220 := z.EncBasicHandle().StructToArray + var yyq220 [4]bool + _, _, _ = yysep220, yyq220, yy2arr220 + const yyr220 bool = false + yyq220[0] = x.Kind != "" + yyq220[1] = x.APIVersion != "" + yyq220[2] = true + yyq220[3] = len(x.Data) != 0 + var yynn220 int + if yyr220 || yy2arr220 { + r.EncodeArrayStart(4) + } else { + yynn220 = 0 + for _, b := range yyq220 { + if b { + yynn220++ + } + } + r.EncodeMapStart(yynn220) + yynn220 = 0 + } + if yyr220 || yy2arr220 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq220[0] { + yym222 := z.EncBinary() + _ = yym222 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq220[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym223 := z.EncBinary() + _ = yym223 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr220 || yy2arr220 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq220[1] { + yym225 := z.EncBinary() + _ = yym225 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq220[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym226 := z.EncBinary() + _ = yym226 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr220 || yy2arr220 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq220[2] { + yy228 := &x.ObjectMeta + yy228.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq220[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy229 := &x.ObjectMeta + yy229.CodecEncodeSelf(e) + } + } + if yyr220 || yy2arr220 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq220[3] { + if x.Data == nil { + r.EncodeNil() + } else { + yym231 := z.EncBinary() + _ = yym231 + if false { + } else { + r.EncodeStringBytes(codecSelferC_RAW1234, []byte(x.Data)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq220[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("data")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Data == nil { + r.EncodeNil() + } else { + yym232 := z.EncBinary() + _ = yym232 + if false { + } else { + r.EncodeStringBytes(codecSelferC_RAW1234, []byte(x.Data)) + } + } + } + } + if yyr220 || yy2arr220 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ThirdPartyResourceData) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym233 := z.DecBinary() + _ = yym233 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct234 := r.ContainerType() + if yyct234 == codecSelferValueTypeMap1234 { + yyl234 := r.ReadMapStart() + if yyl234 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl234, d) + } + } else if yyct234 == codecSelferValueTypeArray1234 { + yyl234 := r.ReadArrayStart() + if yyl234 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl234, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ThirdPartyResourceData) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys235Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys235Slc + var yyhl235 bool = l >= 0 + for yyj235 := 0; ; yyj235++ { + if yyhl235 { + if yyj235 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys235Slc = r.DecodeBytes(yys235Slc, true, true) + yys235 := string(yys235Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys235 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv238 := &x.ObjectMeta + yyv238.CodecDecodeSelf(d) + } + case "data": + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv239 := &x.Data + yym240 := z.DecBinary() + _ = yym240 + if false { + } else { + *yyv239 = r.DecodeBytes(*(*[]byte)(yyv239), false, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys235) + } // end switch yys235 + } // end for yyj235 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ThirdPartyResourceData) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj241 int + var yyb241 bool + var yyhl241 bool = l >= 0 + yyj241++ + if yyhl241 { + yyb241 = yyj241 > l + } else { + yyb241 = r.CheckBreak() + } + if yyb241 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj241++ + if yyhl241 { + yyb241 = yyj241 > l + } else { + yyb241 = r.CheckBreak() + } + if yyb241 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj241++ + if yyhl241 { + yyb241 = yyj241 > l + } else { + yyb241 = r.CheckBreak() + } + if yyb241 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv244 := &x.ObjectMeta + yyv244.CodecDecodeSelf(d) + } + yyj241++ + if yyhl241 { + yyb241 = yyj241 > l + } else { + yyb241 = r.CheckBreak() + } + if yyb241 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Data = nil + } else { + yyv245 := &x.Data + yym246 := z.DecBinary() + _ = yym246 + if false { + } else { + *yyv245 = r.DecodeBytes(*(*[]byte)(yyv245), false, false) + } + } + for { + yyj241++ + if yyhl241 { + yyb241 = yyj241 > l + } else { + yyb241 = r.CheckBreak() + } + if yyb241 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj241-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Deployment) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym247 := z.EncBinary() + _ = yym247 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep248 := !z.EncBinary() + yy2arr248 := z.EncBasicHandle().StructToArray + var yyq248 [5]bool + _, _, _ = yysep248, yyq248, yy2arr248 + const yyr248 bool = false + yyq248[0] = x.Kind != "" + yyq248[1] = x.APIVersion != "" + yyq248[2] = true + yyq248[3] = true + yyq248[4] = true + var yynn248 int + if yyr248 || yy2arr248 { + r.EncodeArrayStart(5) + } else { + yynn248 = 0 + for _, b := range yyq248 { + if b { + yynn248++ + } + } + r.EncodeMapStart(yynn248) + yynn248 = 0 + } + if yyr248 || yy2arr248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq248[0] { + yym250 := z.EncBinary() + _ = yym250 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq248[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym251 := z.EncBinary() + _ = yym251 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr248 || yy2arr248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq248[1] { + yym253 := z.EncBinary() + _ = yym253 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq248[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym254 := z.EncBinary() + _ = yym254 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr248 || yy2arr248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq248[2] { + yy256 := &x.ObjectMeta + yy256.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq248[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy257 := &x.ObjectMeta + yy257.CodecEncodeSelf(e) + } + } + if yyr248 || yy2arr248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq248[3] { + yy259 := &x.Spec + yy259.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq248[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy260 := &x.Spec + yy260.CodecEncodeSelf(e) + } + } + if yyr248 || yy2arr248 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq248[4] { + yy262 := &x.Status + yy262.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq248[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy263 := &x.Status + yy263.CodecEncodeSelf(e) + } + } + if yyr248 || yy2arr248 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Deployment) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym264 := z.DecBinary() + _ = yym264 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct265 := r.ContainerType() + if yyct265 == codecSelferValueTypeMap1234 { + yyl265 := r.ReadMapStart() + if yyl265 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl265, d) + } + } else if yyct265 == codecSelferValueTypeArray1234 { + yyl265 := r.ReadArrayStart() + if yyl265 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl265, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Deployment) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys266Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys266Slc + var yyhl266 bool = l >= 0 + for yyj266 := 0; ; yyj266++ { + if yyhl266 { + if yyj266 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys266Slc = r.DecodeBytes(yys266Slc, true, true) + yys266 := string(yys266Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys266 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv269 := &x.ObjectMeta + yyv269.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = DeploymentSpec{} + } else { + yyv270 := &x.Spec + yyv270.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = DeploymentStatus{} + } else { + yyv271 := &x.Status + yyv271.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys266) + } // end switch yys266 + } // end for yyj266 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Deployment) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj272 int + var yyb272 bool + var yyhl272 bool = l >= 0 + yyj272++ + if yyhl272 { + yyb272 = yyj272 > l + } else { + yyb272 = r.CheckBreak() + } + if yyb272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj272++ + if yyhl272 { + yyb272 = yyj272 > l + } else { + yyb272 = r.CheckBreak() + } + if yyb272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj272++ + if yyhl272 { + yyb272 = yyj272 > l + } else { + yyb272 = r.CheckBreak() + } + if yyb272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv275 := &x.ObjectMeta + yyv275.CodecDecodeSelf(d) + } + yyj272++ + if yyhl272 { + yyb272 = yyj272 > l + } else { + yyb272 = r.CheckBreak() + } + if yyb272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = DeploymentSpec{} + } else { + yyv276 := &x.Spec + yyv276.CodecDecodeSelf(d) + } + yyj272++ + if yyhl272 { + yyb272 = yyj272 > l + } else { + yyb272 = r.CheckBreak() + } + if yyb272 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = DeploymentStatus{} + } else { + yyv277 := &x.Status + yyv277.CodecDecodeSelf(d) + } + for { + yyj272++ + if yyhl272 { + yyb272 = yyj272 > l + } else { + yyb272 = r.CheckBreak() + } + if yyb272 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj272-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DeploymentSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym278 := z.EncBinary() + _ = yym278 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep279 := !z.EncBinary() + yy2arr279 := z.EncBasicHandle().StructToArray + var yyq279 [8]bool + _, _, _ = yysep279, yyq279, yy2arr279 + const yyr279 bool = false + yyq279[0] = x.Replicas != 0 + yyq279[1] = x.Selector != nil + yyq279[3] = true + yyq279[4] = x.MinReadySeconds != 0 + yyq279[5] = x.RevisionHistoryLimit != nil + yyq279[6] = x.Paused != false + yyq279[7] = x.RollbackTo != nil + var yynn279 int + if yyr279 || yy2arr279 { + r.EncodeArrayStart(8) + } else { + yynn279 = 1 + for _, b := range yyq279 { + if b { + yynn279++ + } + } + r.EncodeMapStart(yynn279) + yynn279 = 0 + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq279[0] { + yym281 := z.EncBinary() + _ = yym281 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq279[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym282 := z.EncBinary() + _ = yym282 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq279[1] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym284 := z.EncBinary() + _ = yym284 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq279[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym285 := z.EncBinary() + _ = yym285 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy287 := &x.Template + yy287.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy288 := &x.Template + yy288.CodecEncodeSelf(e) + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq279[3] { + yy290 := &x.Strategy + yy290.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq279[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("strategy")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy291 := &x.Strategy + yy291.CodecEncodeSelf(e) + } + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq279[4] { + yym293 := z.EncBinary() + _ = yym293 + if false { + } else { + r.EncodeInt(int64(x.MinReadySeconds)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq279[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("minReadySeconds")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym294 := z.EncBinary() + _ = yym294 + if false { + } else { + r.EncodeInt(int64(x.MinReadySeconds)) + } + } + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq279[5] { + if x.RevisionHistoryLimit == nil { + r.EncodeNil() + } else { + yy296 := *x.RevisionHistoryLimit + yym297 := z.EncBinary() + _ = yym297 + if false { + } else { + r.EncodeInt(int64(yy296)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq279[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("revisionHistoryLimit")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RevisionHistoryLimit == nil { + r.EncodeNil() + } else { + yy298 := *x.RevisionHistoryLimit + yym299 := z.EncBinary() + _ = yym299 + if false { + } else { + r.EncodeInt(int64(yy298)) + } + } + } + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq279[6] { + yym301 := z.EncBinary() + _ = yym301 + if false { + } else { + r.EncodeBool(bool(x.Paused)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq279[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("paused")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym302 := z.EncBinary() + _ = yym302 + if false { + } else { + r.EncodeBool(bool(x.Paused)) + } + } + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq279[7] { + if x.RollbackTo == nil { + r.EncodeNil() + } else { + x.RollbackTo.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq279[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rollbackTo")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RollbackTo == nil { + r.EncodeNil() + } else { + x.RollbackTo.CodecEncodeSelf(e) + } + } + } + if yyr279 || yy2arr279 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DeploymentSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym304 := z.DecBinary() + _ = yym304 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct305 := r.ContainerType() + if yyct305 == codecSelferValueTypeMap1234 { + yyl305 := r.ReadMapStart() + if yyl305 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl305, d) + } + } else if yyct305 == codecSelferValueTypeArray1234 { + yyl305 := r.ReadArrayStart() + if yyl305 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl305, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DeploymentSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys306Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys306Slc + var yyhl306 bool = l >= 0 + for yyj306 := 0; ; yyj306++ { + if yyhl306 { + if yyj306 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys306Slc = r.DecodeBytes(yys306Slc, true, true) + yys306 := string(yys306Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys306 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "selector": + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym309 := z.DecBinary() + _ = yym309 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + case "template": + if r.TryDecodeAsNil() { + x.Template = pkg2_api.PodTemplateSpec{} + } else { + yyv310 := &x.Template + yyv310.CodecDecodeSelf(d) + } + case "strategy": + if r.TryDecodeAsNil() { + x.Strategy = DeploymentStrategy{} + } else { + yyv311 := &x.Strategy + yyv311.CodecDecodeSelf(d) + } + case "minReadySeconds": + if r.TryDecodeAsNil() { + x.MinReadySeconds = 0 + } else { + x.MinReadySeconds = int32(r.DecodeInt(32)) + } + case "revisionHistoryLimit": + if r.TryDecodeAsNil() { + if x.RevisionHistoryLimit != nil { + x.RevisionHistoryLimit = nil + } + } else { + if x.RevisionHistoryLimit == nil { + x.RevisionHistoryLimit = new(int32) + } + yym314 := z.DecBinary() + _ = yym314 + if false { + } else { + *((*int32)(x.RevisionHistoryLimit)) = int32(r.DecodeInt(32)) + } + } + case "paused": + if r.TryDecodeAsNil() { + x.Paused = false + } else { + x.Paused = bool(r.DecodeBool()) + } + case "rollbackTo": + if r.TryDecodeAsNil() { + if x.RollbackTo != nil { + x.RollbackTo = nil + } + } else { + if x.RollbackTo == nil { + x.RollbackTo = new(RollbackConfig) + } + x.RollbackTo.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys306) + } // end switch yys306 + } // end for yyj306 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DeploymentSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj317 int + var yyb317 bool + var yyhl317 bool = l >= 0 + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym320 := z.DecBinary() + _ = yym320 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Template = pkg2_api.PodTemplateSpec{} + } else { + yyv321 := &x.Template + yyv321.CodecDecodeSelf(d) + } + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Strategy = DeploymentStrategy{} + } else { + yyv322 := &x.Strategy + yyv322.CodecDecodeSelf(d) + } + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MinReadySeconds = 0 + } else { + x.MinReadySeconds = int32(r.DecodeInt(32)) + } + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RevisionHistoryLimit != nil { + x.RevisionHistoryLimit = nil + } + } else { + if x.RevisionHistoryLimit == nil { + x.RevisionHistoryLimit = new(int32) + } + yym325 := z.DecBinary() + _ = yym325 + if false { + } else { + *((*int32)(x.RevisionHistoryLimit)) = int32(r.DecodeInt(32)) + } + } + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Paused = false + } else { + x.Paused = bool(r.DecodeBool()) + } + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RollbackTo != nil { + x.RollbackTo = nil + } + } else { + if x.RollbackTo == nil { + x.RollbackTo = new(RollbackConfig) + } + x.RollbackTo.CodecDecodeSelf(d) + } + for { + yyj317++ + if yyhl317 { + yyb317 = yyj317 > l + } else { + yyb317 = r.CheckBreak() + } + if yyb317 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj317-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DeploymentRollback) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym328 := z.EncBinary() + _ = yym328 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep329 := !z.EncBinary() + yy2arr329 := z.EncBasicHandle().StructToArray + var yyq329 [5]bool + _, _, _ = yysep329, yyq329, yy2arr329 + const yyr329 bool = false + yyq329[0] = x.Kind != "" + yyq329[1] = x.APIVersion != "" + yyq329[3] = len(x.UpdatedAnnotations) != 0 + var yynn329 int + if yyr329 || yy2arr329 { + r.EncodeArrayStart(5) + } else { + yynn329 = 2 + for _, b := range yyq329 { + if b { + yynn329++ + } + } + r.EncodeMapStart(yynn329) + yynn329 = 0 + } + if yyr329 || yy2arr329 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq329[0] { + yym331 := z.EncBinary() + _ = yym331 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq329[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym332 := z.EncBinary() + _ = yym332 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr329 || yy2arr329 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq329[1] { + yym334 := z.EncBinary() + _ = yym334 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq329[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym335 := z.EncBinary() + _ = yym335 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr329 || yy2arr329 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym337 := z.EncBinary() + _ = yym337 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("name")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym338 := z.EncBinary() + _ = yym338 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Name)) + } + } + if yyr329 || yy2arr329 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq329[3] { + if x.UpdatedAnnotations == nil { + r.EncodeNil() + } else { + yym340 := z.EncBinary() + _ = yym340 + if false { + } else { + z.F.EncMapStringStringV(x.UpdatedAnnotations, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq329[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("updatedAnnotations")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.UpdatedAnnotations == nil { + r.EncodeNil() + } else { + yym341 := z.EncBinary() + _ = yym341 + if false { + } else { + z.F.EncMapStringStringV(x.UpdatedAnnotations, false, e) + } + } + } + } + if yyr329 || yy2arr329 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy343 := &x.RollbackTo + yy343.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rollbackTo")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy344 := &x.RollbackTo + yy344.CodecEncodeSelf(e) + } + if yyr329 || yy2arr329 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DeploymentRollback) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym345 := z.DecBinary() + _ = yym345 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct346 := r.ContainerType() + if yyct346 == codecSelferValueTypeMap1234 { + yyl346 := r.ReadMapStart() + if yyl346 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl346, d) + } + } else if yyct346 == codecSelferValueTypeArray1234 { + yyl346 := r.ReadArrayStart() + if yyl346 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl346, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DeploymentRollback) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys347Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys347Slc + var yyhl347 bool = l >= 0 + for yyj347 := 0; ; yyj347++ { + if yyhl347 { + if yyj347 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys347Slc = r.DecodeBytes(yys347Slc, true, true) + yys347 := string(yys347Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys347 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "name": + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + case "updatedAnnotations": + if r.TryDecodeAsNil() { + x.UpdatedAnnotations = nil + } else { + yyv351 := &x.UpdatedAnnotations + yym352 := z.DecBinary() + _ = yym352 + if false { + } else { + z.F.DecMapStringStringX(yyv351, false, d) + } + } + case "rollbackTo": + if r.TryDecodeAsNil() { + x.RollbackTo = RollbackConfig{} + } else { + yyv353 := &x.RollbackTo + yyv353.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys347) + } // end switch yys347 + } // end for yyj347 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DeploymentRollback) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj354 int + var yyb354 bool + var yyhl354 bool = l >= 0 + yyj354++ + if yyhl354 { + yyb354 = yyj354 > l + } else { + yyb354 = r.CheckBreak() + } + if yyb354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj354++ + if yyhl354 { + yyb354 = yyj354 > l + } else { + yyb354 = r.CheckBreak() + } + if yyb354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj354++ + if yyhl354 { + yyb354 = yyj354 > l + } else { + yyb354 = r.CheckBreak() + } + if yyb354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Name = "" + } else { + x.Name = string(r.DecodeString()) + } + yyj354++ + if yyhl354 { + yyb354 = yyj354 > l + } else { + yyb354 = r.CheckBreak() + } + if yyb354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UpdatedAnnotations = nil + } else { + yyv358 := &x.UpdatedAnnotations + yym359 := z.DecBinary() + _ = yym359 + if false { + } else { + z.F.DecMapStringStringX(yyv358, false, d) + } + } + yyj354++ + if yyhl354 { + yyb354 = yyj354 > l + } else { + yyb354 = r.CheckBreak() + } + if yyb354 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RollbackTo = RollbackConfig{} + } else { + yyv360 := &x.RollbackTo + yyv360.CodecDecodeSelf(d) + } + for { + yyj354++ + if yyhl354 { + yyb354 = yyj354 > l + } else { + yyb354 = r.CheckBreak() + } + if yyb354 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj354-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *RollbackConfig) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym361 := z.EncBinary() + _ = yym361 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep362 := !z.EncBinary() + yy2arr362 := z.EncBasicHandle().StructToArray + var yyq362 [1]bool + _, _, _ = yysep362, yyq362, yy2arr362 + const yyr362 bool = false + yyq362[0] = x.Revision != 0 + var yynn362 int + if yyr362 || yy2arr362 { + r.EncodeArrayStart(1) + } else { + yynn362 = 0 + for _, b := range yyq362 { + if b { + yynn362++ + } + } + r.EncodeMapStart(yynn362) + yynn362 = 0 + } + if yyr362 || yy2arr362 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq362[0] { + yym364 := z.EncBinary() + _ = yym364 + if false { + } else { + r.EncodeInt(int64(x.Revision)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq362[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("revision")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym365 := z.EncBinary() + _ = yym365 + if false { + } else { + r.EncodeInt(int64(x.Revision)) + } + } + } + if yyr362 || yy2arr362 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *RollbackConfig) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym366 := z.DecBinary() + _ = yym366 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct367 := r.ContainerType() + if yyct367 == codecSelferValueTypeMap1234 { + yyl367 := r.ReadMapStart() + if yyl367 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl367, d) + } + } else if yyct367 == codecSelferValueTypeArray1234 { + yyl367 := r.ReadArrayStart() + if yyl367 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl367, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *RollbackConfig) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys368Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys368Slc + var yyhl368 bool = l >= 0 + for yyj368 := 0; ; yyj368++ { + if yyhl368 { + if yyj368 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys368Slc = r.DecodeBytes(yys368Slc, true, true) + yys368 := string(yys368Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys368 { + case "revision": + if r.TryDecodeAsNil() { + x.Revision = 0 + } else { + x.Revision = int64(r.DecodeInt(64)) + } + default: + z.DecStructFieldNotFound(-1, yys368) + } // end switch yys368 + } // end for yyj368 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *RollbackConfig) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj370 int + var yyb370 bool + var yyhl370 bool = l >= 0 + yyj370++ + if yyhl370 { + yyb370 = yyj370 > l + } else { + yyb370 = r.CheckBreak() + } + if yyb370 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Revision = 0 + } else { + x.Revision = int64(r.DecodeInt(64)) + } + for { + yyj370++ + if yyhl370 { + yyb370 = yyj370 > l + } else { + yyb370 = r.CheckBreak() + } + if yyb370 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj370-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DeploymentStrategy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym372 := z.EncBinary() + _ = yym372 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep373 := !z.EncBinary() + yy2arr373 := z.EncBasicHandle().StructToArray + var yyq373 [2]bool + _, _, _ = yysep373, yyq373, yy2arr373 + const yyr373 bool = false + yyq373[0] = x.Type != "" + yyq373[1] = x.RollingUpdate != nil + var yynn373 int + if yyr373 || yy2arr373 { + r.EncodeArrayStart(2) + } else { + yynn373 = 0 + for _, b := range yyq373 { + if b { + yynn373++ + } + } + r.EncodeMapStart(yynn373) + yynn373 = 0 + } + if yyr373 || yy2arr373 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq373[0] { + x.Type.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq373[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("type")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Type.CodecEncodeSelf(e) + } + } + if yyr373 || yy2arr373 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq373[1] { + if x.RollingUpdate == nil { + r.EncodeNil() + } else { + x.RollingUpdate.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq373[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rollingUpdate")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RollingUpdate == nil { + r.EncodeNil() + } else { + x.RollingUpdate.CodecEncodeSelf(e) + } + } + } + if yyr373 || yy2arr373 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DeploymentStrategy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym376 := z.DecBinary() + _ = yym376 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct377 := r.ContainerType() + if yyct377 == codecSelferValueTypeMap1234 { + yyl377 := r.ReadMapStart() + if yyl377 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl377, d) + } + } else if yyct377 == codecSelferValueTypeArray1234 { + yyl377 := r.ReadArrayStart() + if yyl377 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl377, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DeploymentStrategy) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys378Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys378Slc + var yyhl378 bool = l >= 0 + for yyj378 := 0; ; yyj378++ { + if yyhl378 { + if yyj378 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys378Slc = r.DecodeBytes(yys378Slc, true, true) + yys378 := string(yys378Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys378 { + case "type": + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = DeploymentStrategyType(r.DecodeString()) + } + case "rollingUpdate": + if r.TryDecodeAsNil() { + if x.RollingUpdate != nil { + x.RollingUpdate = nil + } + } else { + if x.RollingUpdate == nil { + x.RollingUpdate = new(RollingUpdateDeployment) + } + x.RollingUpdate.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys378) + } // end switch yys378 + } // end for yyj378 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DeploymentStrategy) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj381 int + var yyb381 bool + var yyhl381 bool = l >= 0 + yyj381++ + if yyhl381 { + yyb381 = yyj381 > l + } else { + yyb381 = r.CheckBreak() + } + if yyb381 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Type = "" + } else { + x.Type = DeploymentStrategyType(r.DecodeString()) + } + yyj381++ + if yyhl381 { + yyb381 = yyj381 > l + } else { + yyb381 = r.CheckBreak() + } + if yyb381 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.RollingUpdate != nil { + x.RollingUpdate = nil + } + } else { + if x.RollingUpdate == nil { + x.RollingUpdate = new(RollingUpdateDeployment) + } + x.RollingUpdate.CodecDecodeSelf(d) + } + for { + yyj381++ + if yyhl381 { + yyb381 = yyj381 > l + } else { + yyb381 = r.CheckBreak() + } + if yyb381 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj381-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x DeploymentStrategyType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym384 := z.EncBinary() + _ = yym384 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *DeploymentStrategyType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym385 := z.DecBinary() + _ = yym385 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *RollingUpdateDeployment) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym386 := z.EncBinary() + _ = yym386 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep387 := !z.EncBinary() + yy2arr387 := z.EncBasicHandle().StructToArray + var yyq387 [2]bool + _, _, _ = yysep387, yyq387, yy2arr387 + const yyr387 bool = false + yyq387[0] = true + yyq387[1] = true + var yynn387 int + if yyr387 || yy2arr387 { + r.EncodeArrayStart(2) + } else { + yynn387 = 0 + for _, b := range yyq387 { + if b { + yynn387++ + } + } + r.EncodeMapStart(yynn387) + yynn387 = 0 + } + if yyr387 || yy2arr387 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq387[0] { + yy389 := &x.MaxUnavailable + yym390 := z.EncBinary() + _ = yym390 + if false { + } else if z.HasExtensions() && z.EncExt(yy389) { + } else if !yym390 && z.IsJSONHandle() { + z.EncJSONMarshal(yy389) + } else { + z.EncFallback(yy389) + } + } else { + r.EncodeNil() + } + } else { + if yyq387[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("maxUnavailable")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy391 := &x.MaxUnavailable + yym392 := z.EncBinary() + _ = yym392 + if false { + } else if z.HasExtensions() && z.EncExt(yy391) { + } else if !yym392 && z.IsJSONHandle() { + z.EncJSONMarshal(yy391) + } else { + z.EncFallback(yy391) + } + } + } + if yyr387 || yy2arr387 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq387[1] { + yy394 := &x.MaxSurge + yym395 := z.EncBinary() + _ = yym395 + if false { + } else if z.HasExtensions() && z.EncExt(yy394) { + } else if !yym395 && z.IsJSONHandle() { + z.EncJSONMarshal(yy394) + } else { + z.EncFallback(yy394) + } + } else { + r.EncodeNil() + } + } else { + if yyq387[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("maxSurge")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy396 := &x.MaxSurge + yym397 := z.EncBinary() + _ = yym397 + if false { + } else if z.HasExtensions() && z.EncExt(yy396) { + } else if !yym397 && z.IsJSONHandle() { + z.EncJSONMarshal(yy396) + } else { + z.EncFallback(yy396) + } + } + } + if yyr387 || yy2arr387 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *RollingUpdateDeployment) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym398 := z.DecBinary() + _ = yym398 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct399 := r.ContainerType() + if yyct399 == codecSelferValueTypeMap1234 { + yyl399 := r.ReadMapStart() + if yyl399 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl399, d) + } + } else if yyct399 == codecSelferValueTypeArray1234 { + yyl399 := r.ReadArrayStart() + if yyl399 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl399, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *RollingUpdateDeployment) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys400Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys400Slc + var yyhl400 bool = l >= 0 + for yyj400 := 0; ; yyj400++ { + if yyhl400 { + if yyj400 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys400Slc = r.DecodeBytes(yys400Slc, true, true) + yys400 := string(yys400Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys400 { + case "maxUnavailable": + if r.TryDecodeAsNil() { + x.MaxUnavailable = pkg5_intstr.IntOrString{} + } else { + yyv401 := &x.MaxUnavailable + yym402 := z.DecBinary() + _ = yym402 + if false { + } else if z.HasExtensions() && z.DecExt(yyv401) { + } else if !yym402 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv401) + } else { + z.DecFallback(yyv401, false) + } + } + case "maxSurge": + if r.TryDecodeAsNil() { + x.MaxSurge = pkg5_intstr.IntOrString{} + } else { + yyv403 := &x.MaxSurge + yym404 := z.DecBinary() + _ = yym404 + if false { + } else if z.HasExtensions() && z.DecExt(yyv403) { + } else if !yym404 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv403) + } else { + z.DecFallback(yyv403, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys400) + } // end switch yys400 + } // end for yyj400 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *RollingUpdateDeployment) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj405 int + var yyb405 bool + var yyhl405 bool = l >= 0 + yyj405++ + if yyhl405 { + yyb405 = yyj405 > l + } else { + yyb405 = r.CheckBreak() + } + if yyb405 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MaxUnavailable = pkg5_intstr.IntOrString{} + } else { + yyv406 := &x.MaxUnavailable + yym407 := z.DecBinary() + _ = yym407 + if false { + } else if z.HasExtensions() && z.DecExt(yyv406) { + } else if !yym407 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv406) + } else { + z.DecFallback(yyv406, false) + } + } + yyj405++ + if yyhl405 { + yyb405 = yyj405 > l + } else { + yyb405 = r.CheckBreak() + } + if yyb405 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.MaxSurge = pkg5_intstr.IntOrString{} + } else { + yyv408 := &x.MaxSurge + yym409 := z.DecBinary() + _ = yym409 + if false { + } else if z.HasExtensions() && z.DecExt(yyv408) { + } else if !yym409 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv408) + } else { + z.DecFallback(yyv408, false) + } + } + for { + yyj405++ + if yyhl405 { + yyb405 = yyj405 > l + } else { + yyb405 = r.CheckBreak() + } + if yyb405 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj405-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DeploymentStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym410 := z.EncBinary() + _ = yym410 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep411 := !z.EncBinary() + yy2arr411 := z.EncBasicHandle().StructToArray + var yyq411 [5]bool + _, _, _ = yysep411, yyq411, yy2arr411 + const yyr411 bool = false + yyq411[0] = x.ObservedGeneration != 0 + yyq411[1] = x.Replicas != 0 + yyq411[2] = x.UpdatedReplicas != 0 + yyq411[3] = x.AvailableReplicas != 0 + yyq411[4] = x.UnavailableReplicas != 0 + var yynn411 int + if yyr411 || yy2arr411 { + r.EncodeArrayStart(5) + } else { + yynn411 = 0 + for _, b := range yyq411 { + if b { + yynn411++ + } + } + r.EncodeMapStart(yynn411) + yynn411 = 0 + } + if yyr411 || yy2arr411 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq411[0] { + yym413 := z.EncBinary() + _ = yym413 + if false { + } else { + r.EncodeInt(int64(x.ObservedGeneration)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq411[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("observedGeneration")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym414 := z.EncBinary() + _ = yym414 + if false { + } else { + r.EncodeInt(int64(x.ObservedGeneration)) + } + } + } + if yyr411 || yy2arr411 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq411[1] { + yym416 := z.EncBinary() + _ = yym416 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq411[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym417 := z.EncBinary() + _ = yym417 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + } + if yyr411 || yy2arr411 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq411[2] { + yym419 := z.EncBinary() + _ = yym419 + if false { + } else { + r.EncodeInt(int64(x.UpdatedReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq411[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("updatedReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym420 := z.EncBinary() + _ = yym420 + if false { + } else { + r.EncodeInt(int64(x.UpdatedReplicas)) + } + } + } + if yyr411 || yy2arr411 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq411[3] { + yym422 := z.EncBinary() + _ = yym422 + if false { + } else { + r.EncodeInt(int64(x.AvailableReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq411[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("availableReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym423 := z.EncBinary() + _ = yym423 + if false { + } else { + r.EncodeInt(int64(x.AvailableReplicas)) + } + } + } + if yyr411 || yy2arr411 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq411[4] { + yym425 := z.EncBinary() + _ = yym425 + if false { + } else { + r.EncodeInt(int64(x.UnavailableReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq411[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("unavailableReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym426 := z.EncBinary() + _ = yym426 + if false { + } else { + r.EncodeInt(int64(x.UnavailableReplicas)) + } + } + } + if yyr411 || yy2arr411 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DeploymentStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym427 := z.DecBinary() + _ = yym427 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct428 := r.ContainerType() + if yyct428 == codecSelferValueTypeMap1234 { + yyl428 := r.ReadMapStart() + if yyl428 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl428, d) + } + } else if yyct428 == codecSelferValueTypeArray1234 { + yyl428 := r.ReadArrayStart() + if yyl428 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl428, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DeploymentStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys429Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys429Slc + var yyhl429 bool = l >= 0 + for yyj429 := 0; ; yyj429++ { + if yyhl429 { + if yyj429 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys429Slc = r.DecodeBytes(yys429Slc, true, true) + yys429 := string(yys429Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys429 { + case "observedGeneration": + if r.TryDecodeAsNil() { + x.ObservedGeneration = 0 + } else { + x.ObservedGeneration = int64(r.DecodeInt(64)) + } + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "updatedReplicas": + if r.TryDecodeAsNil() { + x.UpdatedReplicas = 0 + } else { + x.UpdatedReplicas = int32(r.DecodeInt(32)) + } + case "availableReplicas": + if r.TryDecodeAsNil() { + x.AvailableReplicas = 0 + } else { + x.AvailableReplicas = int32(r.DecodeInt(32)) + } + case "unavailableReplicas": + if r.TryDecodeAsNil() { + x.UnavailableReplicas = 0 + } else { + x.UnavailableReplicas = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys429) + } // end switch yys429 + } // end for yyj429 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DeploymentStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj435 int + var yyb435 bool + var yyhl435 bool = l >= 0 + yyj435++ + if yyhl435 { + yyb435 = yyj435 > l + } else { + yyb435 = r.CheckBreak() + } + if yyb435 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObservedGeneration = 0 + } else { + x.ObservedGeneration = int64(r.DecodeInt(64)) + } + yyj435++ + if yyhl435 { + yyb435 = yyj435 > l + } else { + yyb435 = r.CheckBreak() + } + if yyb435 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj435++ + if yyhl435 { + yyb435 = yyj435 > l + } else { + yyb435 = r.CheckBreak() + } + if yyb435 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UpdatedReplicas = 0 + } else { + x.UpdatedReplicas = int32(r.DecodeInt(32)) + } + yyj435++ + if yyhl435 { + yyb435 = yyj435 > l + } else { + yyb435 = r.CheckBreak() + } + if yyb435 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.AvailableReplicas = 0 + } else { + x.AvailableReplicas = int32(r.DecodeInt(32)) + } + yyj435++ + if yyhl435 { + yyb435 = yyj435 > l + } else { + yyb435 = r.CheckBreak() + } + if yyb435 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.UnavailableReplicas = 0 + } else { + x.UnavailableReplicas = int32(r.DecodeInt(32)) + } + for { + yyj435++ + if yyhl435 { + yyb435 = yyj435 > l + } else { + yyb435 = r.CheckBreak() + } + if yyb435 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj435-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DeploymentList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym441 := z.EncBinary() + _ = yym441 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep442 := !z.EncBinary() + yy2arr442 := z.EncBasicHandle().StructToArray + var yyq442 [4]bool + _, _, _ = yysep442, yyq442, yy2arr442 + const yyr442 bool = false + yyq442[0] = x.Kind != "" + yyq442[1] = x.APIVersion != "" + yyq442[2] = true + var yynn442 int + if yyr442 || yy2arr442 { + r.EncodeArrayStart(4) + } else { + yynn442 = 1 + for _, b := range yyq442 { + if b { + yynn442++ + } + } + r.EncodeMapStart(yynn442) + yynn442 = 0 + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[0] { + yym444 := z.EncBinary() + _ = yym444 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq442[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym445 := z.EncBinary() + _ = yym445 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[1] { + yym447 := z.EncBinary() + _ = yym447 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq442[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym448 := z.EncBinary() + _ = yym448 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq442[2] { + yy450 := &x.ListMeta + yym451 := z.EncBinary() + _ = yym451 + if false { + } else if z.HasExtensions() && z.EncExt(yy450) { + } else { + z.EncFallback(yy450) + } + } else { + r.EncodeNil() + } + } else { + if yyq442[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy452 := &x.ListMeta + yym453 := z.EncBinary() + _ = yym453 + if false { + } else if z.HasExtensions() && z.EncExt(yy452) { + } else { + z.EncFallback(yy452) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym455 := z.EncBinary() + _ = yym455 + if false { + } else { + h.encSliceDeployment(([]Deployment)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym456 := z.EncBinary() + _ = yym456 + if false { + } else { + h.encSliceDeployment(([]Deployment)(x.Items), e) + } + } + } + if yyr442 || yy2arr442 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DeploymentList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym457 := z.DecBinary() + _ = yym457 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct458 := r.ContainerType() + if yyct458 == codecSelferValueTypeMap1234 { + yyl458 := r.ReadMapStart() + if yyl458 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl458, d) + } + } else if yyct458 == codecSelferValueTypeArray1234 { + yyl458 := r.ReadArrayStart() + if yyl458 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl458, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DeploymentList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys459Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys459Slc + var yyhl459 bool = l >= 0 + for yyj459 := 0; ; yyj459++ { + if yyhl459 { + if yyj459 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys459Slc = r.DecodeBytes(yys459Slc, true, true) + yys459 := string(yys459Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys459 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv462 := &x.ListMeta + yym463 := z.DecBinary() + _ = yym463 + if false { + } else if z.HasExtensions() && z.DecExt(yyv462) { + } else { + z.DecFallback(yyv462, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv464 := &x.Items + yym465 := z.DecBinary() + _ = yym465 + if false { + } else { + h.decSliceDeployment((*[]Deployment)(yyv464), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys459) + } // end switch yys459 + } // end for yyj459 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DeploymentList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj466 int + var yyb466 bool + var yyhl466 bool = l >= 0 + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv469 := &x.ListMeta + yym470 := z.DecBinary() + _ = yym470 + if false { + } else if z.HasExtensions() && z.DecExt(yyv469) { + } else { + z.DecFallback(yyv469, false) + } + } + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv471 := &x.Items + yym472 := z.DecBinary() + _ = yym472 + if false { + } else { + h.decSliceDeployment((*[]Deployment)(yyv471), d) + } + } + for { + yyj466++ + if yyhl466 { + yyb466 = yyj466 > l + } else { + yyb466 = r.CheckBreak() + } + if yyb466 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj466-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DaemonSetSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym473 := z.EncBinary() + _ = yym473 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep474 := !z.EncBinary() + yy2arr474 := z.EncBasicHandle().StructToArray + var yyq474 [2]bool + _, _, _ = yysep474, yyq474, yy2arr474 + const yyr474 bool = false + yyq474[0] = x.Selector != nil + var yynn474 int + if yyr474 || yy2arr474 { + r.EncodeArrayStart(2) + } else { + yynn474 = 1 + for _, b := range yyq474 { + if b { + yynn474++ + } + } + r.EncodeMapStart(yynn474) + yynn474 = 0 + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq474[0] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym476 := z.EncBinary() + _ = yym476 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq474[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym477 := z.EncBinary() + _ = yym477 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy479 := &x.Template + yy479.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy480 := &x.Template + yy480.CodecEncodeSelf(e) + } + if yyr474 || yy2arr474 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DaemonSetSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym481 := z.DecBinary() + _ = yym481 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct482 := r.ContainerType() + if yyct482 == codecSelferValueTypeMap1234 { + yyl482 := r.ReadMapStart() + if yyl482 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl482, d) + } + } else if yyct482 == codecSelferValueTypeArray1234 { + yyl482 := r.ReadArrayStart() + if yyl482 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl482, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DaemonSetSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys483Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys483Slc + var yyhl483 bool = l >= 0 + for yyj483 := 0; ; yyj483++ { + if yyhl483 { + if yyj483 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys483Slc = r.DecodeBytes(yys483Slc, true, true) + yys483 := string(yys483Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys483 { + case "selector": + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym485 := z.DecBinary() + _ = yym485 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + case "template": + if r.TryDecodeAsNil() { + x.Template = pkg2_api.PodTemplateSpec{} + } else { + yyv486 := &x.Template + yyv486.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys483) + } // end switch yys483 + } // end for yyj483 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DaemonSetSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj487 int + var yyb487 bool + var yyhl487 bool = l >= 0 + yyj487++ + if yyhl487 { + yyb487 = yyj487 > l + } else { + yyb487 = r.CheckBreak() + } + if yyb487 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym489 := z.DecBinary() + _ = yym489 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + yyj487++ + if yyhl487 { + yyb487 = yyj487 > l + } else { + yyb487 = r.CheckBreak() + } + if yyb487 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Template = pkg2_api.PodTemplateSpec{} + } else { + yyv490 := &x.Template + yyv490.CodecDecodeSelf(d) + } + for { + yyj487++ + if yyhl487 { + yyb487 = yyj487 > l + } else { + yyb487 = r.CheckBreak() + } + if yyb487 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj487-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DaemonSetStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym491 := z.EncBinary() + _ = yym491 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep492 := !z.EncBinary() + yy2arr492 := z.EncBasicHandle().StructToArray + var yyq492 [3]bool + _, _, _ = yysep492, yyq492, yy2arr492 + const yyr492 bool = false + var yynn492 int + if yyr492 || yy2arr492 { + r.EncodeArrayStart(3) + } else { + yynn492 = 3 + for _, b := range yyq492 { + if b { + yynn492++ + } + } + r.EncodeMapStart(yynn492) + yynn492 = 0 + } + if yyr492 || yy2arr492 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym494 := z.EncBinary() + _ = yym494 + if false { + } else { + r.EncodeInt(int64(x.CurrentNumberScheduled)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("currentNumberScheduled")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym495 := z.EncBinary() + _ = yym495 + if false { + } else { + r.EncodeInt(int64(x.CurrentNumberScheduled)) + } + } + if yyr492 || yy2arr492 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym497 := z.EncBinary() + _ = yym497 + if false { + } else { + r.EncodeInt(int64(x.NumberMisscheduled)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("numberMisscheduled")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym498 := z.EncBinary() + _ = yym498 + if false { + } else { + r.EncodeInt(int64(x.NumberMisscheduled)) + } + } + if yyr492 || yy2arr492 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym500 := z.EncBinary() + _ = yym500 + if false { + } else { + r.EncodeInt(int64(x.DesiredNumberScheduled)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("desiredNumberScheduled")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym501 := z.EncBinary() + _ = yym501 + if false { + } else { + r.EncodeInt(int64(x.DesiredNumberScheduled)) + } + } + if yyr492 || yy2arr492 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DaemonSetStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym502 := z.DecBinary() + _ = yym502 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct503 := r.ContainerType() + if yyct503 == codecSelferValueTypeMap1234 { + yyl503 := r.ReadMapStart() + if yyl503 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl503, d) + } + } else if yyct503 == codecSelferValueTypeArray1234 { + yyl503 := r.ReadArrayStart() + if yyl503 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl503, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DaemonSetStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys504Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys504Slc + var yyhl504 bool = l >= 0 + for yyj504 := 0; ; yyj504++ { + if yyhl504 { + if yyj504 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys504Slc = r.DecodeBytes(yys504Slc, true, true) + yys504 := string(yys504Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys504 { + case "currentNumberScheduled": + if r.TryDecodeAsNil() { + x.CurrentNumberScheduled = 0 + } else { + x.CurrentNumberScheduled = int32(r.DecodeInt(32)) + } + case "numberMisscheduled": + if r.TryDecodeAsNil() { + x.NumberMisscheduled = 0 + } else { + x.NumberMisscheduled = int32(r.DecodeInt(32)) + } + case "desiredNumberScheduled": + if r.TryDecodeAsNil() { + x.DesiredNumberScheduled = 0 + } else { + x.DesiredNumberScheduled = int32(r.DecodeInt(32)) + } + default: + z.DecStructFieldNotFound(-1, yys504) + } // end switch yys504 + } // end for yyj504 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DaemonSetStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj508 int + var yyb508 bool + var yyhl508 bool = l >= 0 + yyj508++ + if yyhl508 { + yyb508 = yyj508 > l + } else { + yyb508 = r.CheckBreak() + } + if yyb508 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.CurrentNumberScheduled = 0 + } else { + x.CurrentNumberScheduled = int32(r.DecodeInt(32)) + } + yyj508++ + if yyhl508 { + yyb508 = yyj508 > l + } else { + yyb508 = r.CheckBreak() + } + if yyb508 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.NumberMisscheduled = 0 + } else { + x.NumberMisscheduled = int32(r.DecodeInt(32)) + } + yyj508++ + if yyhl508 { + yyb508 = yyj508 > l + } else { + yyb508 = r.CheckBreak() + } + if yyb508 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DesiredNumberScheduled = 0 + } else { + x.DesiredNumberScheduled = int32(r.DecodeInt(32)) + } + for { + yyj508++ + if yyhl508 { + yyb508 = yyj508 > l + } else { + yyb508 = r.CheckBreak() + } + if yyb508 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj508-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DaemonSet) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym512 := z.EncBinary() + _ = yym512 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep513 := !z.EncBinary() + yy2arr513 := z.EncBasicHandle().StructToArray + var yyq513 [5]bool + _, _, _ = yysep513, yyq513, yy2arr513 + const yyr513 bool = false + yyq513[0] = x.Kind != "" + yyq513[1] = x.APIVersion != "" + yyq513[2] = true + yyq513[3] = true + yyq513[4] = true + var yynn513 int + if yyr513 || yy2arr513 { + r.EncodeArrayStart(5) + } else { + yynn513 = 0 + for _, b := range yyq513 { + if b { + yynn513++ + } + } + r.EncodeMapStart(yynn513) + yynn513 = 0 + } + if yyr513 || yy2arr513 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq513[0] { + yym515 := z.EncBinary() + _ = yym515 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq513[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym516 := z.EncBinary() + _ = yym516 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr513 || yy2arr513 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq513[1] { + yym518 := z.EncBinary() + _ = yym518 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq513[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym519 := z.EncBinary() + _ = yym519 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr513 || yy2arr513 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq513[2] { + yy521 := &x.ObjectMeta + yy521.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq513[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy522 := &x.ObjectMeta + yy522.CodecEncodeSelf(e) + } + } + if yyr513 || yy2arr513 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq513[3] { + yy524 := &x.Spec + yy524.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq513[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy525 := &x.Spec + yy525.CodecEncodeSelf(e) + } + } + if yyr513 || yy2arr513 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq513[4] { + yy527 := &x.Status + yy527.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq513[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy528 := &x.Status + yy528.CodecEncodeSelf(e) + } + } + if yyr513 || yy2arr513 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DaemonSet) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym529 := z.DecBinary() + _ = yym529 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct530 := r.ContainerType() + if yyct530 == codecSelferValueTypeMap1234 { + yyl530 := r.ReadMapStart() + if yyl530 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl530, d) + } + } else if yyct530 == codecSelferValueTypeArray1234 { + yyl530 := r.ReadArrayStart() + if yyl530 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl530, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DaemonSet) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys531Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys531Slc + var yyhl531 bool = l >= 0 + for yyj531 := 0; ; yyj531++ { + if yyhl531 { + if yyj531 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys531Slc = r.DecodeBytes(yys531Slc, true, true) + yys531 := string(yys531Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys531 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv534 := &x.ObjectMeta + yyv534.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = DaemonSetSpec{} + } else { + yyv535 := &x.Spec + yyv535.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = DaemonSetStatus{} + } else { + yyv536 := &x.Status + yyv536.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys531) + } // end switch yys531 + } // end for yyj531 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DaemonSet) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj537 int + var yyb537 bool + var yyhl537 bool = l >= 0 + yyj537++ + if yyhl537 { + yyb537 = yyj537 > l + } else { + yyb537 = r.CheckBreak() + } + if yyb537 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj537++ + if yyhl537 { + yyb537 = yyj537 > l + } else { + yyb537 = r.CheckBreak() + } + if yyb537 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj537++ + if yyhl537 { + yyb537 = yyj537 > l + } else { + yyb537 = r.CheckBreak() + } + if yyb537 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv540 := &x.ObjectMeta + yyv540.CodecDecodeSelf(d) + } + yyj537++ + if yyhl537 { + yyb537 = yyj537 > l + } else { + yyb537 = r.CheckBreak() + } + if yyb537 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = DaemonSetSpec{} + } else { + yyv541 := &x.Spec + yyv541.CodecDecodeSelf(d) + } + yyj537++ + if yyhl537 { + yyb537 = yyj537 > l + } else { + yyb537 = r.CheckBreak() + } + if yyb537 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = DaemonSetStatus{} + } else { + yyv542 := &x.Status + yyv542.CodecDecodeSelf(d) + } + for { + yyj537++ + if yyhl537 { + yyb537 = yyj537 > l + } else { + yyb537 = r.CheckBreak() + } + if yyb537 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj537-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *DaemonSetList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym543 := z.EncBinary() + _ = yym543 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep544 := !z.EncBinary() + yy2arr544 := z.EncBasicHandle().StructToArray + var yyq544 [4]bool + _, _, _ = yysep544, yyq544, yy2arr544 + const yyr544 bool = false + yyq544[0] = x.Kind != "" + yyq544[1] = x.APIVersion != "" + yyq544[2] = true + var yynn544 int + if yyr544 || yy2arr544 { + r.EncodeArrayStart(4) + } else { + yynn544 = 1 + for _, b := range yyq544 { + if b { + yynn544++ + } + } + r.EncodeMapStart(yynn544) + yynn544 = 0 + } + if yyr544 || yy2arr544 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq544[0] { + yym546 := z.EncBinary() + _ = yym546 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq544[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym547 := z.EncBinary() + _ = yym547 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr544 || yy2arr544 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq544[1] { + yym549 := z.EncBinary() + _ = yym549 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq544[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym550 := z.EncBinary() + _ = yym550 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr544 || yy2arr544 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq544[2] { + yy552 := &x.ListMeta + yym553 := z.EncBinary() + _ = yym553 + if false { + } else if z.HasExtensions() && z.EncExt(yy552) { + } else { + z.EncFallback(yy552) + } + } else { + r.EncodeNil() + } + } else { + if yyq544[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy554 := &x.ListMeta + yym555 := z.EncBinary() + _ = yym555 + if false { + } else if z.HasExtensions() && z.EncExt(yy554) { + } else { + z.EncFallback(yy554) + } + } + } + if yyr544 || yy2arr544 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym557 := z.EncBinary() + _ = yym557 + if false { + } else { + h.encSliceDaemonSet(([]DaemonSet)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym558 := z.EncBinary() + _ = yym558 + if false { + } else { + h.encSliceDaemonSet(([]DaemonSet)(x.Items), e) + } + } + } + if yyr544 || yy2arr544 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *DaemonSetList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym559 := z.DecBinary() + _ = yym559 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct560 := r.ContainerType() + if yyct560 == codecSelferValueTypeMap1234 { + yyl560 := r.ReadMapStart() + if yyl560 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl560, d) + } + } else if yyct560 == codecSelferValueTypeArray1234 { + yyl560 := r.ReadArrayStart() + if yyl560 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl560, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *DaemonSetList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys561Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys561Slc + var yyhl561 bool = l >= 0 + for yyj561 := 0; ; yyj561++ { + if yyhl561 { + if yyj561 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys561Slc = r.DecodeBytes(yys561Slc, true, true) + yys561 := string(yys561Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys561 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv564 := &x.ListMeta + yym565 := z.DecBinary() + _ = yym565 + if false { + } else if z.HasExtensions() && z.DecExt(yyv564) { + } else { + z.DecFallback(yyv564, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv566 := &x.Items + yym567 := z.DecBinary() + _ = yym567 + if false { + } else { + h.decSliceDaemonSet((*[]DaemonSet)(yyv566), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys561) + } // end switch yys561 + } // end for yyj561 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *DaemonSetList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj568 int + var yyb568 bool + var yyhl568 bool = l >= 0 + yyj568++ + if yyhl568 { + yyb568 = yyj568 > l + } else { + yyb568 = r.CheckBreak() + } + if yyb568 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj568++ + if yyhl568 { + yyb568 = yyj568 > l + } else { + yyb568 = r.CheckBreak() + } + if yyb568 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj568++ + if yyhl568 { + yyb568 = yyj568 > l + } else { + yyb568 = r.CheckBreak() + } + if yyb568 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv571 := &x.ListMeta + yym572 := z.DecBinary() + _ = yym572 + if false { + } else if z.HasExtensions() && z.DecExt(yyv571) { + } else { + z.DecFallback(yyv571, false) + } + } + yyj568++ + if yyhl568 { + yyb568 = yyj568 > l + } else { + yyb568 = r.CheckBreak() + } + if yyb568 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv573 := &x.Items + yym574 := z.DecBinary() + _ = yym574 + if false { + } else { + h.decSliceDaemonSet((*[]DaemonSet)(yyv573), d) + } + } + for { + yyj568++ + if yyhl568 { + yyb568 = yyj568 > l + } else { + yyb568 = r.CheckBreak() + } + if yyb568 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj568-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ThirdPartyResourceDataList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym575 := z.EncBinary() + _ = yym575 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep576 := !z.EncBinary() + yy2arr576 := z.EncBasicHandle().StructToArray + var yyq576 [4]bool + _, _, _ = yysep576, yyq576, yy2arr576 + const yyr576 bool = false + yyq576[0] = x.Kind != "" + yyq576[1] = x.APIVersion != "" + yyq576[2] = true + var yynn576 int + if yyr576 || yy2arr576 { + r.EncodeArrayStart(4) + } else { + yynn576 = 1 + for _, b := range yyq576 { + if b { + yynn576++ + } + } + r.EncodeMapStart(yynn576) + yynn576 = 0 + } + if yyr576 || yy2arr576 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq576[0] { + yym578 := z.EncBinary() + _ = yym578 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq576[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym579 := z.EncBinary() + _ = yym579 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr576 || yy2arr576 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq576[1] { + yym581 := z.EncBinary() + _ = yym581 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq576[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym582 := z.EncBinary() + _ = yym582 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr576 || yy2arr576 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq576[2] { + yy584 := &x.ListMeta + yym585 := z.EncBinary() + _ = yym585 + if false { + } else if z.HasExtensions() && z.EncExt(yy584) { + } else { + z.EncFallback(yy584) + } + } else { + r.EncodeNil() + } + } else { + if yyq576[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy586 := &x.ListMeta + yym587 := z.EncBinary() + _ = yym587 + if false { + } else if z.HasExtensions() && z.EncExt(yy586) { + } else { + z.EncFallback(yy586) + } + } + } + if yyr576 || yy2arr576 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym589 := z.EncBinary() + _ = yym589 + if false { + } else { + h.encSliceThirdPartyResourceData(([]ThirdPartyResourceData)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym590 := z.EncBinary() + _ = yym590 + if false { + } else { + h.encSliceThirdPartyResourceData(([]ThirdPartyResourceData)(x.Items), e) + } + } + } + if yyr576 || yy2arr576 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ThirdPartyResourceDataList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym591 := z.DecBinary() + _ = yym591 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct592 := r.ContainerType() + if yyct592 == codecSelferValueTypeMap1234 { + yyl592 := r.ReadMapStart() + if yyl592 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl592, d) + } + } else if yyct592 == codecSelferValueTypeArray1234 { + yyl592 := r.ReadArrayStart() + if yyl592 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl592, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ThirdPartyResourceDataList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys593Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys593Slc + var yyhl593 bool = l >= 0 + for yyj593 := 0; ; yyj593++ { + if yyhl593 { + if yyj593 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys593Slc = r.DecodeBytes(yys593Slc, true, true) + yys593 := string(yys593Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys593 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv596 := &x.ListMeta + yym597 := z.DecBinary() + _ = yym597 + if false { + } else if z.HasExtensions() && z.DecExt(yyv596) { + } else { + z.DecFallback(yyv596, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv598 := &x.Items + yym599 := z.DecBinary() + _ = yym599 + if false { + } else { + h.decSliceThirdPartyResourceData((*[]ThirdPartyResourceData)(yyv598), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys593) + } // end switch yys593 + } // end for yyj593 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ThirdPartyResourceDataList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj600 int + var yyb600 bool + var yyhl600 bool = l >= 0 + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv603 := &x.ListMeta + yym604 := z.DecBinary() + _ = yym604 + if false { + } else if z.HasExtensions() && z.DecExt(yyv603) { + } else { + z.DecFallback(yyv603, false) + } + } + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv605 := &x.Items + yym606 := z.DecBinary() + _ = yym606 + if false { + } else { + h.decSliceThirdPartyResourceData((*[]ThirdPartyResourceData)(yyv605), d) + } + } + for { + yyj600++ + if yyhl600 { + yyb600 = yyj600 > l + } else { + yyb600 = r.CheckBreak() + } + if yyb600 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj600-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *Ingress) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym607 := z.EncBinary() + _ = yym607 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep608 := !z.EncBinary() + yy2arr608 := z.EncBasicHandle().StructToArray + var yyq608 [5]bool + _, _, _ = yysep608, yyq608, yy2arr608 + const yyr608 bool = false + yyq608[0] = x.Kind != "" + yyq608[1] = x.APIVersion != "" + yyq608[2] = true + yyq608[3] = true + yyq608[4] = true + var yynn608 int + if yyr608 || yy2arr608 { + r.EncodeArrayStart(5) + } else { + yynn608 = 0 + for _, b := range yyq608 { + if b { + yynn608++ + } + } + r.EncodeMapStart(yynn608) + yynn608 = 0 + } + if yyr608 || yy2arr608 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq608[0] { + yym610 := z.EncBinary() + _ = yym610 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq608[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym611 := z.EncBinary() + _ = yym611 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr608 || yy2arr608 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq608[1] { + yym613 := z.EncBinary() + _ = yym613 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq608[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym614 := z.EncBinary() + _ = yym614 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr608 || yy2arr608 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq608[2] { + yy616 := &x.ObjectMeta + yy616.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq608[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy617 := &x.ObjectMeta + yy617.CodecEncodeSelf(e) + } + } + if yyr608 || yy2arr608 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq608[3] { + yy619 := &x.Spec + yy619.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq608[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy620 := &x.Spec + yy620.CodecEncodeSelf(e) + } + } + if yyr608 || yy2arr608 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq608[4] { + yy622 := &x.Status + yy622.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq608[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy623 := &x.Status + yy623.CodecEncodeSelf(e) + } + } + if yyr608 || yy2arr608 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *Ingress) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym624 := z.DecBinary() + _ = yym624 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct625 := r.ContainerType() + if yyct625 == codecSelferValueTypeMap1234 { + yyl625 := r.ReadMapStart() + if yyl625 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl625, d) + } + } else if yyct625 == codecSelferValueTypeArray1234 { + yyl625 := r.ReadArrayStart() + if yyl625 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl625, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *Ingress) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys626Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys626Slc + var yyhl626 bool = l >= 0 + for yyj626 := 0; ; yyj626++ { + if yyhl626 { + if yyj626 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys626Slc = r.DecodeBytes(yys626Slc, true, true) + yys626 := string(yys626Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys626 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv629 := &x.ObjectMeta + yyv629.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = IngressSpec{} + } else { + yyv630 := &x.Spec + yyv630.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = IngressStatus{} + } else { + yyv631 := &x.Status + yyv631.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys626) + } // end switch yys626 + } // end for yyj626 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *Ingress) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj632 int + var yyb632 bool + var yyhl632 bool = l >= 0 + yyj632++ + if yyhl632 { + yyb632 = yyj632 > l + } else { + yyb632 = r.CheckBreak() + } + if yyb632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj632++ + if yyhl632 { + yyb632 = yyj632 > l + } else { + yyb632 = r.CheckBreak() + } + if yyb632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj632++ + if yyhl632 { + yyb632 = yyj632 > l + } else { + yyb632 = r.CheckBreak() + } + if yyb632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv635 := &x.ObjectMeta + yyv635.CodecDecodeSelf(d) + } + yyj632++ + if yyhl632 { + yyb632 = yyj632 > l + } else { + yyb632 = r.CheckBreak() + } + if yyb632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = IngressSpec{} + } else { + yyv636 := &x.Spec + yyv636.CodecDecodeSelf(d) + } + yyj632++ + if yyhl632 { + yyb632 = yyj632 > l + } else { + yyb632 = r.CheckBreak() + } + if yyb632 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = IngressStatus{} + } else { + yyv637 := &x.Status + yyv637.CodecDecodeSelf(d) + } + for { + yyj632++ + if yyhl632 { + yyb632 = yyj632 > l + } else { + yyb632 = r.CheckBreak() + } + if yyb632 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj632-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *IngressList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym638 := z.EncBinary() + _ = yym638 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep639 := !z.EncBinary() + yy2arr639 := z.EncBasicHandle().StructToArray + var yyq639 [4]bool + _, _, _ = yysep639, yyq639, yy2arr639 + const yyr639 bool = false + yyq639[0] = x.Kind != "" + yyq639[1] = x.APIVersion != "" + yyq639[2] = true + var yynn639 int + if yyr639 || yy2arr639 { + r.EncodeArrayStart(4) + } else { + yynn639 = 1 + for _, b := range yyq639 { + if b { + yynn639++ + } + } + r.EncodeMapStart(yynn639) + yynn639 = 0 + } + if yyr639 || yy2arr639 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq639[0] { + yym641 := z.EncBinary() + _ = yym641 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq639[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym642 := z.EncBinary() + _ = yym642 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr639 || yy2arr639 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq639[1] { + yym644 := z.EncBinary() + _ = yym644 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq639[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym645 := z.EncBinary() + _ = yym645 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr639 || yy2arr639 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq639[2] { + yy647 := &x.ListMeta + yym648 := z.EncBinary() + _ = yym648 + if false { + } else if z.HasExtensions() && z.EncExt(yy647) { + } else { + z.EncFallback(yy647) + } + } else { + r.EncodeNil() + } + } else { + if yyq639[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy649 := &x.ListMeta + yym650 := z.EncBinary() + _ = yym650 + if false { + } else if z.HasExtensions() && z.EncExt(yy649) { + } else { + z.EncFallback(yy649) + } + } + } + if yyr639 || yy2arr639 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym652 := z.EncBinary() + _ = yym652 + if false { + } else { + h.encSliceIngress(([]Ingress)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym653 := z.EncBinary() + _ = yym653 + if false { + } else { + h.encSliceIngress(([]Ingress)(x.Items), e) + } + } + } + if yyr639 || yy2arr639 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IngressList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym654 := z.DecBinary() + _ = yym654 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct655 := r.ContainerType() + if yyct655 == codecSelferValueTypeMap1234 { + yyl655 := r.ReadMapStart() + if yyl655 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl655, d) + } + } else if yyct655 == codecSelferValueTypeArray1234 { + yyl655 := r.ReadArrayStart() + if yyl655 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl655, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *IngressList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys656Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys656Slc + var yyhl656 bool = l >= 0 + for yyj656 := 0; ; yyj656++ { + if yyhl656 { + if yyj656 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys656Slc = r.DecodeBytes(yys656Slc, true, true) + yys656 := string(yys656Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys656 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv659 := &x.ListMeta + yym660 := z.DecBinary() + _ = yym660 + if false { + } else if z.HasExtensions() && z.DecExt(yyv659) { + } else { + z.DecFallback(yyv659, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv661 := &x.Items + yym662 := z.DecBinary() + _ = yym662 + if false { + } else { + h.decSliceIngress((*[]Ingress)(yyv661), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys656) + } // end switch yys656 + } // end for yyj656 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IngressList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj663 int + var yyb663 bool + var yyhl663 bool = l >= 0 + yyj663++ + if yyhl663 { + yyb663 = yyj663 > l + } else { + yyb663 = r.CheckBreak() + } + if yyb663 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj663++ + if yyhl663 { + yyb663 = yyj663 > l + } else { + yyb663 = r.CheckBreak() + } + if yyb663 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj663++ + if yyhl663 { + yyb663 = yyj663 > l + } else { + yyb663 = r.CheckBreak() + } + if yyb663 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv666 := &x.ListMeta + yym667 := z.DecBinary() + _ = yym667 + if false { + } else if z.HasExtensions() && z.DecExt(yyv666) { + } else { + z.DecFallback(yyv666, false) + } + } + yyj663++ + if yyhl663 { + yyb663 = yyj663 > l + } else { + yyb663 = r.CheckBreak() + } + if yyb663 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv668 := &x.Items + yym669 := z.DecBinary() + _ = yym669 + if false { + } else { + h.decSliceIngress((*[]Ingress)(yyv668), d) + } + } + for { + yyj663++ + if yyhl663 { + yyb663 = yyj663 > l + } else { + yyb663 = r.CheckBreak() + } + if yyb663 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj663-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *IngressSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym670 := z.EncBinary() + _ = yym670 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep671 := !z.EncBinary() + yy2arr671 := z.EncBasicHandle().StructToArray + var yyq671 [3]bool + _, _, _ = yysep671, yyq671, yy2arr671 + const yyr671 bool = false + yyq671[0] = x.Backend != nil + yyq671[1] = len(x.TLS) != 0 + yyq671[2] = len(x.Rules) != 0 + var yynn671 int + if yyr671 || yy2arr671 { + r.EncodeArrayStart(3) + } else { + yynn671 = 0 + for _, b := range yyq671 { + if b { + yynn671++ + } + } + r.EncodeMapStart(yynn671) + yynn671 = 0 + } + if yyr671 || yy2arr671 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq671[0] { + if x.Backend == nil { + r.EncodeNil() + } else { + x.Backend.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq671[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("backend")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Backend == nil { + r.EncodeNil() + } else { + x.Backend.CodecEncodeSelf(e) + } + } + } + if yyr671 || yy2arr671 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq671[1] { + if x.TLS == nil { + r.EncodeNil() + } else { + yym674 := z.EncBinary() + _ = yym674 + if false { + } else { + h.encSliceIngressTLS(([]IngressTLS)(x.TLS), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq671[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("tls")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.TLS == nil { + r.EncodeNil() + } else { + yym675 := z.EncBinary() + _ = yym675 + if false { + } else { + h.encSliceIngressTLS(([]IngressTLS)(x.TLS), e) + } + } + } + } + if yyr671 || yy2arr671 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq671[2] { + if x.Rules == nil { + r.EncodeNil() + } else { + yym677 := z.EncBinary() + _ = yym677 + if false { + } else { + h.encSliceIngressRule(([]IngressRule)(x.Rules), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq671[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rules")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Rules == nil { + r.EncodeNil() + } else { + yym678 := z.EncBinary() + _ = yym678 + if false { + } else { + h.encSliceIngressRule(([]IngressRule)(x.Rules), e) + } + } + } + } + if yyr671 || yy2arr671 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IngressSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym679 := z.DecBinary() + _ = yym679 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct680 := r.ContainerType() + if yyct680 == codecSelferValueTypeMap1234 { + yyl680 := r.ReadMapStart() + if yyl680 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl680, d) + } + } else if yyct680 == codecSelferValueTypeArray1234 { + yyl680 := r.ReadArrayStart() + if yyl680 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl680, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *IngressSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys681Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys681Slc + var yyhl681 bool = l >= 0 + for yyj681 := 0; ; yyj681++ { + if yyhl681 { + if yyj681 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys681Slc = r.DecodeBytes(yys681Slc, true, true) + yys681 := string(yys681Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys681 { + case "backend": + if r.TryDecodeAsNil() { + if x.Backend != nil { + x.Backend = nil + } + } else { + if x.Backend == nil { + x.Backend = new(IngressBackend) + } + x.Backend.CodecDecodeSelf(d) + } + case "tls": + if r.TryDecodeAsNil() { + x.TLS = nil + } else { + yyv683 := &x.TLS + yym684 := z.DecBinary() + _ = yym684 + if false { + } else { + h.decSliceIngressTLS((*[]IngressTLS)(yyv683), d) + } + } + case "rules": + if r.TryDecodeAsNil() { + x.Rules = nil + } else { + yyv685 := &x.Rules + yym686 := z.DecBinary() + _ = yym686 + if false { + } else { + h.decSliceIngressRule((*[]IngressRule)(yyv685), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys681) + } // end switch yys681 + } // end for yyj681 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IngressSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj687 int + var yyb687 bool + var yyhl687 bool = l >= 0 + yyj687++ + if yyhl687 { + yyb687 = yyj687 > l + } else { + yyb687 = r.CheckBreak() + } + if yyb687 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Backend != nil { + x.Backend = nil + } + } else { + if x.Backend == nil { + x.Backend = new(IngressBackend) + } + x.Backend.CodecDecodeSelf(d) + } + yyj687++ + if yyhl687 { + yyb687 = yyj687 > l + } else { + yyb687 = r.CheckBreak() + } + if yyb687 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.TLS = nil + } else { + yyv689 := &x.TLS + yym690 := z.DecBinary() + _ = yym690 + if false { + } else { + h.decSliceIngressTLS((*[]IngressTLS)(yyv689), d) + } + } + yyj687++ + if yyhl687 { + yyb687 = yyj687 > l + } else { + yyb687 = r.CheckBreak() + } + if yyb687 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Rules = nil + } else { + yyv691 := &x.Rules + yym692 := z.DecBinary() + _ = yym692 + if false { + } else { + h.decSliceIngressRule((*[]IngressRule)(yyv691), d) + } + } + for { + yyj687++ + if yyhl687 { + yyb687 = yyj687 > l + } else { + yyb687 = r.CheckBreak() + } + if yyb687 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj687-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *IngressTLS) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym693 := z.EncBinary() + _ = yym693 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep694 := !z.EncBinary() + yy2arr694 := z.EncBasicHandle().StructToArray + var yyq694 [2]bool + _, _, _ = yysep694, yyq694, yy2arr694 + const yyr694 bool = false + yyq694[0] = len(x.Hosts) != 0 + yyq694[1] = x.SecretName != "" + var yynn694 int + if yyr694 || yy2arr694 { + r.EncodeArrayStart(2) + } else { + yynn694 = 0 + for _, b := range yyq694 { + if b { + yynn694++ + } + } + r.EncodeMapStart(yynn694) + yynn694 = 0 + } + if yyr694 || yy2arr694 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq694[0] { + if x.Hosts == nil { + r.EncodeNil() + } else { + yym696 := z.EncBinary() + _ = yym696 + if false { + } else { + z.F.EncSliceStringV(x.Hosts, false, e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq694[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hosts")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Hosts == nil { + r.EncodeNil() + } else { + yym697 := z.EncBinary() + _ = yym697 + if false { + } else { + z.F.EncSliceStringV(x.Hosts, false, e) + } + } + } + } + if yyr694 || yy2arr694 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq694[1] { + yym699 := z.EncBinary() + _ = yym699 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq694[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("secretName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym700 := z.EncBinary() + _ = yym700 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.SecretName)) + } + } + } + if yyr694 || yy2arr694 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IngressTLS) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym701 := z.DecBinary() + _ = yym701 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct702 := r.ContainerType() + if yyct702 == codecSelferValueTypeMap1234 { + yyl702 := r.ReadMapStart() + if yyl702 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl702, d) + } + } else if yyct702 == codecSelferValueTypeArray1234 { + yyl702 := r.ReadArrayStart() + if yyl702 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl702, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *IngressTLS) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys703Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys703Slc + var yyhl703 bool = l >= 0 + for yyj703 := 0; ; yyj703++ { + if yyhl703 { + if yyj703 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys703Slc = r.DecodeBytes(yys703Slc, true, true) + yys703 := string(yys703Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys703 { + case "hosts": + if r.TryDecodeAsNil() { + x.Hosts = nil + } else { + yyv704 := &x.Hosts + yym705 := z.DecBinary() + _ = yym705 + if false { + } else { + z.F.DecSliceStringX(yyv704, false, d) + } + } + case "secretName": + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + default: + z.DecStructFieldNotFound(-1, yys703) + } // end switch yys703 + } // end for yyj703 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IngressTLS) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj707 int + var yyb707 bool + var yyhl707 bool = l >= 0 + yyj707++ + if yyhl707 { + yyb707 = yyj707 > l + } else { + yyb707 = r.CheckBreak() + } + if yyb707 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Hosts = nil + } else { + yyv708 := &x.Hosts + yym709 := z.DecBinary() + _ = yym709 + if false { + } else { + z.F.DecSliceStringX(yyv708, false, d) + } + } + yyj707++ + if yyhl707 { + yyb707 = yyj707 > l + } else { + yyb707 = r.CheckBreak() + } + if yyb707 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SecretName = "" + } else { + x.SecretName = string(r.DecodeString()) + } + for { + yyj707++ + if yyhl707 { + yyb707 = yyj707 > l + } else { + yyb707 = r.CheckBreak() + } + if yyb707 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj707-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *IngressStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym711 := z.EncBinary() + _ = yym711 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep712 := !z.EncBinary() + yy2arr712 := z.EncBasicHandle().StructToArray + var yyq712 [1]bool + _, _, _ = yysep712, yyq712, yy2arr712 + const yyr712 bool = false + yyq712[0] = true + var yynn712 int + if yyr712 || yy2arr712 { + r.EncodeArrayStart(1) + } else { + yynn712 = 0 + for _, b := range yyq712 { + if b { + yynn712++ + } + } + r.EncodeMapStart(yynn712) + yynn712 = 0 + } + if yyr712 || yy2arr712 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq712[0] { + yy714 := &x.LoadBalancer + yy714.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq712[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("loadBalancer")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy715 := &x.LoadBalancer + yy715.CodecEncodeSelf(e) + } + } + if yyr712 || yy2arr712 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IngressStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym716 := z.DecBinary() + _ = yym716 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct717 := r.ContainerType() + if yyct717 == codecSelferValueTypeMap1234 { + yyl717 := r.ReadMapStart() + if yyl717 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl717, d) + } + } else if yyct717 == codecSelferValueTypeArray1234 { + yyl717 := r.ReadArrayStart() + if yyl717 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl717, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *IngressStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys718Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys718Slc + var yyhl718 bool = l >= 0 + for yyj718 := 0; ; yyj718++ { + if yyhl718 { + if yyj718 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys718Slc = r.DecodeBytes(yys718Slc, true, true) + yys718 := string(yys718Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys718 { + case "loadBalancer": + if r.TryDecodeAsNil() { + x.LoadBalancer = pkg2_api.LoadBalancerStatus{} + } else { + yyv719 := &x.LoadBalancer + yyv719.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys718) + } // end switch yys718 + } // end for yyj718 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IngressStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj720 int + var yyb720 bool + var yyhl720 bool = l >= 0 + yyj720++ + if yyhl720 { + yyb720 = yyj720 > l + } else { + yyb720 = r.CheckBreak() + } + if yyb720 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.LoadBalancer = pkg2_api.LoadBalancerStatus{} + } else { + yyv721 := &x.LoadBalancer + yyv721.CodecDecodeSelf(d) + } + for { + yyj720++ + if yyhl720 { + yyb720 = yyj720 > l + } else { + yyb720 = r.CheckBreak() + } + if yyb720 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj720-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *IngressRule) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym722 := z.EncBinary() + _ = yym722 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep723 := !z.EncBinary() + yy2arr723 := z.EncBasicHandle().StructToArray + var yyq723 [2]bool + _, _, _ = yysep723, yyq723, yy2arr723 + const yyr723 bool = false + yyq723[0] = x.Host != "" + yyq723[1] = x.IngressRuleValue.HTTP != nil && x.HTTP != nil + var yynn723 int + if yyr723 || yy2arr723 { + r.EncodeArrayStart(2) + } else { + yynn723 = 0 + for _, b := range yyq723 { + if b { + yynn723++ + } + } + r.EncodeMapStart(yynn723) + yynn723 = 0 + } + if yyr723 || yy2arr723 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq723[0] { + yym725 := z.EncBinary() + _ = yym725 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq723[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("host")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym726 := z.EncBinary() + _ = yym726 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Host)) + } + } + } + var yyn727 bool + if x.IngressRuleValue.HTTP == nil { + yyn727 = true + goto LABEL727 + } + LABEL727: + if yyr723 || yy2arr723 { + if yyn727 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq723[1] { + if x.HTTP == nil { + r.EncodeNil() + } else { + x.HTTP.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq723[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("http")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn727 { + r.EncodeNil() + } else { + if x.HTTP == nil { + r.EncodeNil() + } else { + x.HTTP.CodecEncodeSelf(e) + } + } + } + } + if yyr723 || yy2arr723 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IngressRule) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym728 := z.DecBinary() + _ = yym728 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct729 := r.ContainerType() + if yyct729 == codecSelferValueTypeMap1234 { + yyl729 := r.ReadMapStart() + if yyl729 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl729, d) + } + } else if yyct729 == codecSelferValueTypeArray1234 { + yyl729 := r.ReadArrayStart() + if yyl729 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl729, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *IngressRule) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys730Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys730Slc + var yyhl730 bool = l >= 0 + for yyj730 := 0; ; yyj730++ { + if yyhl730 { + if yyj730 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys730Slc = r.DecodeBytes(yys730Slc, true, true) + yys730 := string(yys730Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys730 { + case "host": + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + case "http": + if x.IngressRuleValue.HTTP == nil { + x.IngressRuleValue.HTTP = new(HTTPIngressRuleValue) + } + if r.TryDecodeAsNil() { + if x.HTTP != nil { + x.HTTP = nil + } + } else { + if x.HTTP == nil { + x.HTTP = new(HTTPIngressRuleValue) + } + x.HTTP.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys730) + } // end switch yys730 + } // end for yyj730 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IngressRule) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj733 int + var yyb733 bool + var yyhl733 bool = l >= 0 + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Host = "" + } else { + x.Host = string(r.DecodeString()) + } + if x.IngressRuleValue.HTTP == nil { + x.IngressRuleValue.HTTP = new(HTTPIngressRuleValue) + } + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HTTP != nil { + x.HTTP = nil + } + } else { + if x.HTTP == nil { + x.HTTP = new(HTTPIngressRuleValue) + } + x.HTTP.CodecDecodeSelf(d) + } + for { + yyj733++ + if yyhl733 { + yyb733 = yyj733 > l + } else { + yyb733 = r.CheckBreak() + } + if yyb733 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj733-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *IngressRuleValue) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym736 := z.EncBinary() + _ = yym736 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep737 := !z.EncBinary() + yy2arr737 := z.EncBasicHandle().StructToArray + var yyq737 [1]bool + _, _, _ = yysep737, yyq737, yy2arr737 + const yyr737 bool = false + yyq737[0] = x.HTTP != nil + var yynn737 int + if yyr737 || yy2arr737 { + r.EncodeArrayStart(1) + } else { + yynn737 = 0 + for _, b := range yyq737 { + if b { + yynn737++ + } + } + r.EncodeMapStart(yynn737) + yynn737 = 0 + } + if yyr737 || yy2arr737 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq737[0] { + if x.HTTP == nil { + r.EncodeNil() + } else { + x.HTTP.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq737[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("http")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HTTP == nil { + r.EncodeNil() + } else { + x.HTTP.CodecEncodeSelf(e) + } + } + } + if yyr737 || yy2arr737 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IngressRuleValue) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym739 := z.DecBinary() + _ = yym739 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct740 := r.ContainerType() + if yyct740 == codecSelferValueTypeMap1234 { + yyl740 := r.ReadMapStart() + if yyl740 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl740, d) + } + } else if yyct740 == codecSelferValueTypeArray1234 { + yyl740 := r.ReadArrayStart() + if yyl740 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl740, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *IngressRuleValue) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys741Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys741Slc + var yyhl741 bool = l >= 0 + for yyj741 := 0; ; yyj741++ { + if yyhl741 { + if yyj741 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys741Slc = r.DecodeBytes(yys741Slc, true, true) + yys741 := string(yys741Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys741 { + case "http": + if r.TryDecodeAsNil() { + if x.HTTP != nil { + x.HTTP = nil + } + } else { + if x.HTTP == nil { + x.HTTP = new(HTTPIngressRuleValue) + } + x.HTTP.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys741) + } // end switch yys741 + } // end for yyj741 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IngressRuleValue) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj743 int + var yyb743 bool + var yyhl743 bool = l >= 0 + yyj743++ + if yyhl743 { + yyb743 = yyj743 > l + } else { + yyb743 = r.CheckBreak() + } + if yyb743 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.HTTP != nil { + x.HTTP = nil + } + } else { + if x.HTTP == nil { + x.HTTP = new(HTTPIngressRuleValue) + } + x.HTTP.CodecDecodeSelf(d) + } + for { + yyj743++ + if yyhl743 { + yyb743 = yyj743 > l + } else { + yyb743 = r.CheckBreak() + } + if yyb743 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj743-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HTTPIngressRuleValue) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym745 := z.EncBinary() + _ = yym745 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep746 := !z.EncBinary() + yy2arr746 := z.EncBasicHandle().StructToArray + var yyq746 [1]bool + _, _, _ = yysep746, yyq746, yy2arr746 + const yyr746 bool = false + var yynn746 int + if yyr746 || yy2arr746 { + r.EncodeArrayStart(1) + } else { + yynn746 = 1 + for _, b := range yyq746 { + if b { + yynn746++ + } + } + r.EncodeMapStart(yynn746) + yynn746 = 0 + } + if yyr746 || yy2arr746 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Paths == nil { + r.EncodeNil() + } else { + yym748 := z.EncBinary() + _ = yym748 + if false { + } else { + h.encSliceHTTPIngressPath(([]HTTPIngressPath)(x.Paths), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("paths")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Paths == nil { + r.EncodeNil() + } else { + yym749 := z.EncBinary() + _ = yym749 + if false { + } else { + h.encSliceHTTPIngressPath(([]HTTPIngressPath)(x.Paths), e) + } + } + } + if yyr746 || yy2arr746 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HTTPIngressRuleValue) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym750 := z.DecBinary() + _ = yym750 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct751 := r.ContainerType() + if yyct751 == codecSelferValueTypeMap1234 { + yyl751 := r.ReadMapStart() + if yyl751 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl751, d) + } + } else if yyct751 == codecSelferValueTypeArray1234 { + yyl751 := r.ReadArrayStart() + if yyl751 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl751, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HTTPIngressRuleValue) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys752Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys752Slc + var yyhl752 bool = l >= 0 + for yyj752 := 0; ; yyj752++ { + if yyhl752 { + if yyj752 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys752Slc = r.DecodeBytes(yys752Slc, true, true) + yys752 := string(yys752Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys752 { + case "paths": + if r.TryDecodeAsNil() { + x.Paths = nil + } else { + yyv753 := &x.Paths + yym754 := z.DecBinary() + _ = yym754 + if false { + } else { + h.decSliceHTTPIngressPath((*[]HTTPIngressPath)(yyv753), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys752) + } // end switch yys752 + } // end for yyj752 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HTTPIngressRuleValue) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj755 int + var yyb755 bool + var yyhl755 bool = l >= 0 + yyj755++ + if yyhl755 { + yyb755 = yyj755 > l + } else { + yyb755 = r.CheckBreak() + } + if yyb755 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Paths = nil + } else { + yyv756 := &x.Paths + yym757 := z.DecBinary() + _ = yym757 + if false { + } else { + h.decSliceHTTPIngressPath((*[]HTTPIngressPath)(yyv756), d) + } + } + for { + yyj755++ + if yyhl755 { + yyb755 = yyj755 > l + } else { + yyb755 = r.CheckBreak() + } + if yyb755 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj755-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HTTPIngressPath) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym758 := z.EncBinary() + _ = yym758 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep759 := !z.EncBinary() + yy2arr759 := z.EncBasicHandle().StructToArray + var yyq759 [2]bool + _, _, _ = yysep759, yyq759, yy2arr759 + const yyr759 bool = false + yyq759[0] = x.Path != "" + var yynn759 int + if yyr759 || yy2arr759 { + r.EncodeArrayStart(2) + } else { + yynn759 = 1 + for _, b := range yyq759 { + if b { + yynn759++ + } + } + r.EncodeMapStart(yynn759) + yynn759 = 0 + } + if yyr759 || yy2arr759 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq759[0] { + yym761 := z.EncBinary() + _ = yym761 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq759[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("path")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym762 := z.EncBinary() + _ = yym762 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Path)) + } + } + } + if yyr759 || yy2arr759 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy764 := &x.Backend + yy764.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("backend")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy765 := &x.Backend + yy765.CodecEncodeSelf(e) + } + if yyr759 || yy2arr759 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HTTPIngressPath) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym766 := z.DecBinary() + _ = yym766 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct767 := r.ContainerType() + if yyct767 == codecSelferValueTypeMap1234 { + yyl767 := r.ReadMapStart() + if yyl767 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl767, d) + } + } else if yyct767 == codecSelferValueTypeArray1234 { + yyl767 := r.ReadArrayStart() + if yyl767 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl767, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HTTPIngressPath) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys768Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys768Slc + var yyhl768 bool = l >= 0 + for yyj768 := 0; ; yyj768++ { + if yyhl768 { + if yyj768 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys768Slc = r.DecodeBytes(yys768Slc, true, true) + yys768 := string(yys768Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys768 { + case "path": + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + case "backend": + if r.TryDecodeAsNil() { + x.Backend = IngressBackend{} + } else { + yyv770 := &x.Backend + yyv770.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys768) + } // end switch yys768 + } // end for yyj768 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HTTPIngressPath) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj771 int + var yyb771 bool + var yyhl771 bool = l >= 0 + yyj771++ + if yyhl771 { + yyb771 = yyj771 > l + } else { + yyb771 = r.CheckBreak() + } + if yyb771 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Path = "" + } else { + x.Path = string(r.DecodeString()) + } + yyj771++ + if yyhl771 { + yyb771 = yyj771 > l + } else { + yyb771 = r.CheckBreak() + } + if yyb771 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Backend = IngressBackend{} + } else { + yyv773 := &x.Backend + yyv773.CodecDecodeSelf(d) + } + for { + yyj771++ + if yyhl771 { + yyb771 = yyj771 > l + } else { + yyb771 = r.CheckBreak() + } + if yyb771 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj771-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *IngressBackend) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym774 := z.EncBinary() + _ = yym774 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep775 := !z.EncBinary() + yy2arr775 := z.EncBasicHandle().StructToArray + var yyq775 [2]bool + _, _, _ = yysep775, yyq775, yy2arr775 + const yyr775 bool = false + var yynn775 int + if yyr775 || yy2arr775 { + r.EncodeArrayStart(2) + } else { + yynn775 = 2 + for _, b := range yyq775 { + if b { + yynn775++ + } + } + r.EncodeMapStart(yynn775) + yynn775 = 0 + } + if yyr775 || yy2arr775 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym777 := z.EncBinary() + _ = yym777 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ServiceName)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("serviceName")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym778 := z.EncBinary() + _ = yym778 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.ServiceName)) + } + } + if yyr775 || yy2arr775 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy780 := &x.ServicePort + yym781 := z.EncBinary() + _ = yym781 + if false { + } else if z.HasExtensions() && z.EncExt(yy780) { + } else if !yym781 && z.IsJSONHandle() { + z.EncJSONMarshal(yy780) + } else { + z.EncFallback(yy780) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("servicePort")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy782 := &x.ServicePort + yym783 := z.EncBinary() + _ = yym783 + if false { + } else if z.HasExtensions() && z.EncExt(yy782) { + } else if !yym783 && z.IsJSONHandle() { + z.EncJSONMarshal(yy782) + } else { + z.EncFallback(yy782) + } + } + if yyr775 || yy2arr775 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IngressBackend) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym784 := z.DecBinary() + _ = yym784 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct785 := r.ContainerType() + if yyct785 == codecSelferValueTypeMap1234 { + yyl785 := r.ReadMapStart() + if yyl785 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl785, d) + } + } else if yyct785 == codecSelferValueTypeArray1234 { + yyl785 := r.ReadArrayStart() + if yyl785 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl785, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *IngressBackend) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys786Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys786Slc + var yyhl786 bool = l >= 0 + for yyj786 := 0; ; yyj786++ { + if yyhl786 { + if yyj786 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys786Slc = r.DecodeBytes(yys786Slc, true, true) + yys786 := string(yys786Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys786 { + case "serviceName": + if r.TryDecodeAsNil() { + x.ServiceName = "" + } else { + x.ServiceName = string(r.DecodeString()) + } + case "servicePort": + if r.TryDecodeAsNil() { + x.ServicePort = pkg5_intstr.IntOrString{} + } else { + yyv788 := &x.ServicePort + yym789 := z.DecBinary() + _ = yym789 + if false { + } else if z.HasExtensions() && z.DecExt(yyv788) { + } else if !yym789 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv788) + } else { + z.DecFallback(yyv788, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys786) + } // end switch yys786 + } // end for yyj786 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IngressBackend) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj790 int + var yyb790 bool + var yyhl790 bool = l >= 0 + yyj790++ + if yyhl790 { + yyb790 = yyj790 > l + } else { + yyb790 = r.CheckBreak() + } + if yyb790 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ServiceName = "" + } else { + x.ServiceName = string(r.DecodeString()) + } + yyj790++ + if yyhl790 { + yyb790 = yyj790 > l + } else { + yyb790 = r.CheckBreak() + } + if yyb790 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ServicePort = pkg5_intstr.IntOrString{} + } else { + yyv792 := &x.ServicePort + yym793 := z.DecBinary() + _ = yym793 + if false { + } else if z.HasExtensions() && z.DecExt(yyv792) { + } else if !yym793 && z.IsJSONHandle() { + z.DecJSONUnmarshal(yyv792) + } else { + z.DecFallback(yyv792, false) + } + } + for { + yyj790++ + if yyhl790 { + yyb790 = yyj790 > l + } else { + yyb790 = r.CheckBreak() + } + if yyb790 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj790-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicaSet) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym794 := z.EncBinary() + _ = yym794 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep795 := !z.EncBinary() + yy2arr795 := z.EncBasicHandle().StructToArray + var yyq795 [5]bool + _, _, _ = yysep795, yyq795, yy2arr795 + const yyr795 bool = false + yyq795[0] = x.Kind != "" + yyq795[1] = x.APIVersion != "" + yyq795[2] = true + yyq795[3] = true + yyq795[4] = true + var yynn795 int + if yyr795 || yy2arr795 { + r.EncodeArrayStart(5) + } else { + yynn795 = 0 + for _, b := range yyq795 { + if b { + yynn795++ + } + } + r.EncodeMapStart(yynn795) + yynn795 = 0 + } + if yyr795 || yy2arr795 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq795[0] { + yym797 := z.EncBinary() + _ = yym797 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq795[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym798 := z.EncBinary() + _ = yym798 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr795 || yy2arr795 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq795[1] { + yym800 := z.EncBinary() + _ = yym800 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq795[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym801 := z.EncBinary() + _ = yym801 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr795 || yy2arr795 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq795[2] { + yy803 := &x.ObjectMeta + yy803.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq795[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy804 := &x.ObjectMeta + yy804.CodecEncodeSelf(e) + } + } + if yyr795 || yy2arr795 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq795[3] { + yy806 := &x.Spec + yy806.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq795[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy807 := &x.Spec + yy807.CodecEncodeSelf(e) + } + } + if yyr795 || yy2arr795 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq795[4] { + yy809 := &x.Status + yy809.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq795[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("status")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy810 := &x.Status + yy810.CodecEncodeSelf(e) + } + } + if yyr795 || yy2arr795 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicaSet) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym811 := z.DecBinary() + _ = yym811 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct812 := r.ContainerType() + if yyct812 == codecSelferValueTypeMap1234 { + yyl812 := r.ReadMapStart() + if yyl812 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl812, d) + } + } else if yyct812 == codecSelferValueTypeArray1234 { + yyl812 := r.ReadArrayStart() + if yyl812 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl812, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicaSet) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys813Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys813Slc + var yyhl813 bool = l >= 0 + for yyj813 := 0; ; yyj813++ { + if yyhl813 { + if yyj813 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys813Slc = r.DecodeBytes(yys813Slc, true, true) + yys813 := string(yys813Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys813 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv816 := &x.ObjectMeta + yyv816.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = ReplicaSetSpec{} + } else { + yyv817 := &x.Spec + yyv817.CodecDecodeSelf(d) + } + case "status": + if r.TryDecodeAsNil() { + x.Status = ReplicaSetStatus{} + } else { + yyv818 := &x.Status + yyv818.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys813) + } // end switch yys813 + } // end for yyj813 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicaSet) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj819 int + var yyb819 bool + var yyhl819 bool = l >= 0 + yyj819++ + if yyhl819 { + yyb819 = yyj819 > l + } else { + yyb819 = r.CheckBreak() + } + if yyb819 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj819++ + if yyhl819 { + yyb819 = yyj819 > l + } else { + yyb819 = r.CheckBreak() + } + if yyb819 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj819++ + if yyhl819 { + yyb819 = yyj819 > l + } else { + yyb819 = r.CheckBreak() + } + if yyb819 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv822 := &x.ObjectMeta + yyv822.CodecDecodeSelf(d) + } + yyj819++ + if yyhl819 { + yyb819 = yyj819 > l + } else { + yyb819 = r.CheckBreak() + } + if yyb819 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = ReplicaSetSpec{} + } else { + yyv823 := &x.Spec + yyv823.CodecDecodeSelf(d) + } + yyj819++ + if yyhl819 { + yyb819 = yyj819 > l + } else { + yyb819 = r.CheckBreak() + } + if yyb819 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Status = ReplicaSetStatus{} + } else { + yyv824 := &x.Status + yyv824.CodecDecodeSelf(d) + } + for { + yyj819++ + if yyhl819 { + yyb819 = yyj819 > l + } else { + yyb819 = r.CheckBreak() + } + if yyb819 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj819-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicaSetList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym825 := z.EncBinary() + _ = yym825 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep826 := !z.EncBinary() + yy2arr826 := z.EncBasicHandle().StructToArray + var yyq826 [4]bool + _, _, _ = yysep826, yyq826, yy2arr826 + const yyr826 bool = false + yyq826[0] = x.Kind != "" + yyq826[1] = x.APIVersion != "" + yyq826[2] = true + var yynn826 int + if yyr826 || yy2arr826 { + r.EncodeArrayStart(4) + } else { + yynn826 = 1 + for _, b := range yyq826 { + if b { + yynn826++ + } + } + r.EncodeMapStart(yynn826) + yynn826 = 0 + } + if yyr826 || yy2arr826 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq826[0] { + yym828 := z.EncBinary() + _ = yym828 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq826[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym829 := z.EncBinary() + _ = yym829 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr826 || yy2arr826 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq826[1] { + yym831 := z.EncBinary() + _ = yym831 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq826[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym832 := z.EncBinary() + _ = yym832 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr826 || yy2arr826 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq826[2] { + yy834 := &x.ListMeta + yym835 := z.EncBinary() + _ = yym835 + if false { + } else if z.HasExtensions() && z.EncExt(yy834) { + } else { + z.EncFallback(yy834) + } + } else { + r.EncodeNil() + } + } else { + if yyq826[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy836 := &x.ListMeta + yym837 := z.EncBinary() + _ = yym837 + if false { + } else if z.HasExtensions() && z.EncExt(yy836) { + } else { + z.EncFallback(yy836) + } + } + } + if yyr826 || yy2arr826 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym839 := z.EncBinary() + _ = yym839 + if false { + } else { + h.encSliceReplicaSet(([]ReplicaSet)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym840 := z.EncBinary() + _ = yym840 + if false { + } else { + h.encSliceReplicaSet(([]ReplicaSet)(x.Items), e) + } + } + } + if yyr826 || yy2arr826 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicaSetList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym841 := z.DecBinary() + _ = yym841 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct842 := r.ContainerType() + if yyct842 == codecSelferValueTypeMap1234 { + yyl842 := r.ReadMapStart() + if yyl842 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl842, d) + } + } else if yyct842 == codecSelferValueTypeArray1234 { + yyl842 := r.ReadArrayStart() + if yyl842 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl842, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicaSetList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys843Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys843Slc + var yyhl843 bool = l >= 0 + for yyj843 := 0; ; yyj843++ { + if yyhl843 { + if yyj843 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys843Slc = r.DecodeBytes(yys843Slc, true, true) + yys843 := string(yys843Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys843 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv846 := &x.ListMeta + yym847 := z.DecBinary() + _ = yym847 + if false { + } else if z.HasExtensions() && z.DecExt(yyv846) { + } else { + z.DecFallback(yyv846, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv848 := &x.Items + yym849 := z.DecBinary() + _ = yym849 + if false { + } else { + h.decSliceReplicaSet((*[]ReplicaSet)(yyv848), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys843) + } // end switch yys843 + } // end for yyj843 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicaSetList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj850 int + var yyb850 bool + var yyhl850 bool = l >= 0 + yyj850++ + if yyhl850 { + yyb850 = yyj850 > l + } else { + yyb850 = r.CheckBreak() + } + if yyb850 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj850++ + if yyhl850 { + yyb850 = yyj850 > l + } else { + yyb850 = r.CheckBreak() + } + if yyb850 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj850++ + if yyhl850 { + yyb850 = yyj850 > l + } else { + yyb850 = r.CheckBreak() + } + if yyb850 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv853 := &x.ListMeta + yym854 := z.DecBinary() + _ = yym854 + if false { + } else if z.HasExtensions() && z.DecExt(yyv853) { + } else { + z.DecFallback(yyv853, false) + } + } + yyj850++ + if yyhl850 { + yyb850 = yyj850 > l + } else { + yyb850 = r.CheckBreak() + } + if yyb850 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv855 := &x.Items + yym856 := z.DecBinary() + _ = yym856 + if false { + } else { + h.decSliceReplicaSet((*[]ReplicaSet)(yyv855), d) + } + } + for { + yyj850++ + if yyhl850 { + yyb850 = yyj850 > l + } else { + yyb850 = r.CheckBreak() + } + if yyb850 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj850-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicaSetSpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym857 := z.EncBinary() + _ = yym857 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep858 := !z.EncBinary() + yy2arr858 := z.EncBasicHandle().StructToArray + var yyq858 [3]bool + _, _, _ = yysep858, yyq858, yy2arr858 + const yyr858 bool = false + yyq858[1] = x.Selector != nil + yyq858[2] = true + var yynn858 int + if yyr858 || yy2arr858 { + r.EncodeArrayStart(3) + } else { + yynn858 = 1 + for _, b := range yyq858 { + if b { + yynn858++ + } + } + r.EncodeMapStart(yynn858) + yynn858 = 0 + } + if yyr858 || yy2arr858 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym860 := z.EncBinary() + _ = yym860 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym861 := z.EncBinary() + _ = yym861 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + if yyr858 || yy2arr858 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq858[1] { + if x.Selector == nil { + r.EncodeNil() + } else { + yym863 := z.EncBinary() + _ = yym863 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq858[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("selector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Selector == nil { + r.EncodeNil() + } else { + yym864 := z.EncBinary() + _ = yym864 + if false { + } else if z.HasExtensions() && z.EncExt(x.Selector) { + } else { + z.EncFallback(x.Selector) + } + } + } + } + if yyr858 || yy2arr858 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq858[2] { + yy866 := &x.Template + yy866.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq858[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("template")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy867 := &x.Template + yy867.CodecEncodeSelf(e) + } + } + if yyr858 || yy2arr858 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicaSetSpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym868 := z.DecBinary() + _ = yym868 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct869 := r.ContainerType() + if yyct869 == codecSelferValueTypeMap1234 { + yyl869 := r.ReadMapStart() + if yyl869 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl869, d) + } + } else if yyct869 == codecSelferValueTypeArray1234 { + yyl869 := r.ReadArrayStart() + if yyl869 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl869, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicaSetSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys870Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys870Slc + var yyhl870 bool = l >= 0 + for yyj870 := 0; ; yyj870++ { + if yyhl870 { + if yyj870 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys870Slc = r.DecodeBytes(yys870Slc, true, true) + yys870 := string(yys870Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys870 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "selector": + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym873 := z.DecBinary() + _ = yym873 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + case "template": + if r.TryDecodeAsNil() { + x.Template = pkg2_api.PodTemplateSpec{} + } else { + yyv874 := &x.Template + yyv874.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys870) + } // end switch yys870 + } // end for yyj870 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicaSetSpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj875 int + var yyb875 bool + var yyhl875 bool = l >= 0 + yyj875++ + if yyhl875 { + yyb875 = yyj875 > l + } else { + yyb875 = r.CheckBreak() + } + if yyb875 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj875++ + if yyhl875 { + yyb875 = yyj875 > l + } else { + yyb875 = r.CheckBreak() + } + if yyb875 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Selector != nil { + x.Selector = nil + } + } else { + if x.Selector == nil { + x.Selector = new(pkg1_unversioned.LabelSelector) + } + yym878 := z.DecBinary() + _ = yym878 + if false { + } else if z.HasExtensions() && z.DecExt(x.Selector) { + } else { + z.DecFallback(x.Selector, false) + } + } + yyj875++ + if yyhl875 { + yyb875 = yyj875 > l + } else { + yyb875 = r.CheckBreak() + } + if yyb875 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Template = pkg2_api.PodTemplateSpec{} + } else { + yyv879 := &x.Template + yyv879.CodecDecodeSelf(d) + } + for { + yyj875++ + if yyhl875 { + yyb875 = yyj875 > l + } else { + yyb875 = r.CheckBreak() + } + if yyb875 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj875-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *ReplicaSetStatus) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym880 := z.EncBinary() + _ = yym880 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep881 := !z.EncBinary() + yy2arr881 := z.EncBasicHandle().StructToArray + var yyq881 [4]bool + _, _, _ = yysep881, yyq881, yy2arr881 + const yyr881 bool = false + yyq881[1] = x.FullyLabeledReplicas != 0 + yyq881[2] = x.ReadyReplicas != 0 + yyq881[3] = x.ObservedGeneration != 0 + var yynn881 int + if yyr881 || yy2arr881 { + r.EncodeArrayStart(4) + } else { + yynn881 = 1 + for _, b := range yyq881 { + if b { + yynn881++ + } + } + r.EncodeMapStart(yynn881) + yynn881 = 0 + } + if yyr881 || yy2arr881 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym883 := z.EncBinary() + _ = yym883 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("replicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym884 := z.EncBinary() + _ = yym884 + if false { + } else { + r.EncodeInt(int64(x.Replicas)) + } + } + if yyr881 || yy2arr881 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq881[1] { + yym886 := z.EncBinary() + _ = yym886 + if false { + } else { + r.EncodeInt(int64(x.FullyLabeledReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq881[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fullyLabeledReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym887 := z.EncBinary() + _ = yym887 + if false { + } else { + r.EncodeInt(int64(x.FullyLabeledReplicas)) + } + } + } + if yyr881 || yy2arr881 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq881[2] { + yym889 := z.EncBinary() + _ = yym889 + if false { + } else { + r.EncodeInt(int64(x.ReadyReplicas)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq881[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readyReplicas")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym890 := z.EncBinary() + _ = yym890 + if false { + } else { + r.EncodeInt(int64(x.ReadyReplicas)) + } + } + } + if yyr881 || yy2arr881 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq881[3] { + yym892 := z.EncBinary() + _ = yym892 + if false { + } else { + r.EncodeInt(int64(x.ObservedGeneration)) + } + } else { + r.EncodeInt(0) + } + } else { + if yyq881[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("observedGeneration")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym893 := z.EncBinary() + _ = yym893 + if false { + } else { + r.EncodeInt(int64(x.ObservedGeneration)) + } + } + } + if yyr881 || yy2arr881 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *ReplicaSetStatus) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym894 := z.DecBinary() + _ = yym894 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct895 := r.ContainerType() + if yyct895 == codecSelferValueTypeMap1234 { + yyl895 := r.ReadMapStart() + if yyl895 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl895, d) + } + } else if yyct895 == codecSelferValueTypeArray1234 { + yyl895 := r.ReadArrayStart() + if yyl895 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl895, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *ReplicaSetStatus) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys896Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys896Slc + var yyhl896 bool = l >= 0 + for yyj896 := 0; ; yyj896++ { + if yyhl896 { + if yyj896 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys896Slc = r.DecodeBytes(yys896Slc, true, true) + yys896 := string(yys896Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys896 { + case "replicas": + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + case "fullyLabeledReplicas": + if r.TryDecodeAsNil() { + x.FullyLabeledReplicas = 0 + } else { + x.FullyLabeledReplicas = int32(r.DecodeInt(32)) + } + case "readyReplicas": + if r.TryDecodeAsNil() { + x.ReadyReplicas = 0 + } else { + x.ReadyReplicas = int32(r.DecodeInt(32)) + } + case "observedGeneration": + if r.TryDecodeAsNil() { + x.ObservedGeneration = 0 + } else { + x.ObservedGeneration = int64(r.DecodeInt(64)) + } + default: + z.DecStructFieldNotFound(-1, yys896) + } // end switch yys896 + } // end for yyj896 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *ReplicaSetStatus) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj901 int + var yyb901 bool + var yyhl901 bool = l >= 0 + yyj901++ + if yyhl901 { + yyb901 = yyj901 > l + } else { + yyb901 = r.CheckBreak() + } + if yyb901 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Replicas = 0 + } else { + x.Replicas = int32(r.DecodeInt(32)) + } + yyj901++ + if yyhl901 { + yyb901 = yyj901 > l + } else { + yyb901 = r.CheckBreak() + } + if yyb901 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FullyLabeledReplicas = 0 + } else { + x.FullyLabeledReplicas = int32(r.DecodeInt(32)) + } + yyj901++ + if yyhl901 { + yyb901 = yyj901 > l + } else { + yyb901 = r.CheckBreak() + } + if yyb901 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadyReplicas = 0 + } else { + x.ReadyReplicas = int32(r.DecodeInt(32)) + } + yyj901++ + if yyhl901 { + yyb901 = yyj901 > l + } else { + yyb901 = r.CheckBreak() + } + if yyb901 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObservedGeneration = 0 + } else { + x.ObservedGeneration = int64(r.DecodeInt(64)) + } + for { + yyj901++ + if yyhl901 { + yyb901 = yyj901 > l + } else { + yyb901 = r.CheckBreak() + } + if yyb901 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj901-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodSecurityPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym906 := z.EncBinary() + _ = yym906 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep907 := !z.EncBinary() + yy2arr907 := z.EncBasicHandle().StructToArray + var yyq907 [4]bool + _, _, _ = yysep907, yyq907, yy2arr907 + const yyr907 bool = false + yyq907[0] = x.Kind != "" + yyq907[1] = x.APIVersion != "" + yyq907[2] = true + yyq907[3] = true + var yynn907 int + if yyr907 || yy2arr907 { + r.EncodeArrayStart(4) + } else { + yynn907 = 0 + for _, b := range yyq907 { + if b { + yynn907++ + } + } + r.EncodeMapStart(yynn907) + yynn907 = 0 + } + if yyr907 || yy2arr907 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq907[0] { + yym909 := z.EncBinary() + _ = yym909 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq907[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym910 := z.EncBinary() + _ = yym910 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr907 || yy2arr907 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq907[1] { + yym912 := z.EncBinary() + _ = yym912 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq907[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym913 := z.EncBinary() + _ = yym913 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr907 || yy2arr907 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq907[2] { + yy915 := &x.ObjectMeta + yy915.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq907[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy916 := &x.ObjectMeta + yy916.CodecEncodeSelf(e) + } + } + if yyr907 || yy2arr907 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq907[3] { + yy918 := &x.Spec + yy918.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq907[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy919 := &x.Spec + yy919.CodecEncodeSelf(e) + } + } + if yyr907 || yy2arr907 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSecurityPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym920 := z.DecBinary() + _ = yym920 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct921 := r.ContainerType() + if yyct921 == codecSelferValueTypeMap1234 { + yyl921 := r.ReadMapStart() + if yyl921 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl921, d) + } + } else if yyct921 == codecSelferValueTypeArray1234 { + yyl921 := r.ReadArrayStart() + if yyl921 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl921, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSecurityPolicy) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys922Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys922Slc + var yyhl922 bool = l >= 0 + for yyj922 := 0; ; yyj922++ { + if yyhl922 { + if yyj922 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys922Slc = r.DecodeBytes(yys922Slc, true, true) + yys922 := string(yys922Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys922 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv925 := &x.ObjectMeta + yyv925.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = PodSecurityPolicySpec{} + } else { + yyv926 := &x.Spec + yyv926.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys922) + } // end switch yys922 + } // end for yyj922 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSecurityPolicy) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj927 int + var yyb927 bool + var yyhl927 bool = l >= 0 + yyj927++ + if yyhl927 { + yyb927 = yyj927 > l + } else { + yyb927 = r.CheckBreak() + } + if yyb927 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj927++ + if yyhl927 { + yyb927 = yyj927 > l + } else { + yyb927 = r.CheckBreak() + } + if yyb927 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj927++ + if yyhl927 { + yyb927 = yyj927 > l + } else { + yyb927 = r.CheckBreak() + } + if yyb927 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv930 := &x.ObjectMeta + yyv930.CodecDecodeSelf(d) + } + yyj927++ + if yyhl927 { + yyb927 = yyj927 > l + } else { + yyb927 = r.CheckBreak() + } + if yyb927 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = PodSecurityPolicySpec{} + } else { + yyv931 := &x.Spec + yyv931.CodecDecodeSelf(d) + } + for { + yyj927++ + if yyhl927 { + yyb927 = yyj927 > l + } else { + yyb927 = r.CheckBreak() + } + if yyb927 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj927-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *PodSecurityPolicySpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym932 := z.EncBinary() + _ = yym932 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep933 := !z.EncBinary() + yy2arr933 := z.EncBasicHandle().StructToArray + var yyq933 [14]bool + _, _, _ = yysep933, yyq933, yy2arr933 + const yyr933 bool = false + yyq933[0] = x.Privileged != false + yyq933[1] = len(x.DefaultAddCapabilities) != 0 + yyq933[2] = len(x.RequiredDropCapabilities) != 0 + yyq933[3] = len(x.AllowedCapabilities) != 0 + yyq933[4] = len(x.Volumes) != 0 + yyq933[5] = x.HostNetwork != false + yyq933[6] = len(x.HostPorts) != 0 + yyq933[7] = x.HostPID != false + yyq933[8] = x.HostIPC != false + yyq933[13] = x.ReadOnlyRootFilesystem != false + var yynn933 int + if yyr933 || yy2arr933 { + r.EncodeArrayStart(14) + } else { + yynn933 = 4 + for _, b := range yyq933 { + if b { + yynn933++ + } + } + r.EncodeMapStart(yynn933) + yynn933 = 0 + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[0] { + yym935 := z.EncBinary() + _ = yym935 + if false { + } else { + r.EncodeBool(bool(x.Privileged)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq933[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("privileged")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym936 := z.EncBinary() + _ = yym936 + if false { + } else { + r.EncodeBool(bool(x.Privileged)) + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[1] { + if x.DefaultAddCapabilities == nil { + r.EncodeNil() + } else { + yym938 := z.EncBinary() + _ = yym938 + if false { + } else { + h.encSliceapi_Capability(([]pkg2_api.Capability)(x.DefaultAddCapabilities), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq933[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("defaultAddCapabilities")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.DefaultAddCapabilities == nil { + r.EncodeNil() + } else { + yym939 := z.EncBinary() + _ = yym939 + if false { + } else { + h.encSliceapi_Capability(([]pkg2_api.Capability)(x.DefaultAddCapabilities), e) + } + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[2] { + if x.RequiredDropCapabilities == nil { + r.EncodeNil() + } else { + yym941 := z.EncBinary() + _ = yym941 + if false { + } else { + h.encSliceapi_Capability(([]pkg2_api.Capability)(x.RequiredDropCapabilities), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq933[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("requiredDropCapabilities")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.RequiredDropCapabilities == nil { + r.EncodeNil() + } else { + yym942 := z.EncBinary() + _ = yym942 + if false { + } else { + h.encSliceapi_Capability(([]pkg2_api.Capability)(x.RequiredDropCapabilities), e) + } + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[3] { + if x.AllowedCapabilities == nil { + r.EncodeNil() + } else { + yym944 := z.EncBinary() + _ = yym944 + if false { + } else { + h.encSliceapi_Capability(([]pkg2_api.Capability)(x.AllowedCapabilities), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq933[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("allowedCapabilities")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.AllowedCapabilities == nil { + r.EncodeNil() + } else { + yym945 := z.EncBinary() + _ = yym945 + if false { + } else { + h.encSliceapi_Capability(([]pkg2_api.Capability)(x.AllowedCapabilities), e) + } + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[4] { + if x.Volumes == nil { + r.EncodeNil() + } else { + yym947 := z.EncBinary() + _ = yym947 + if false { + } else { + h.encSliceFSType(([]FSType)(x.Volumes), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq933[4] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumes")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Volumes == nil { + r.EncodeNil() + } else { + yym948 := z.EncBinary() + _ = yym948 + if false { + } else { + h.encSliceFSType(([]FSType)(x.Volumes), e) + } + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[5] { + yym950 := z.EncBinary() + _ = yym950 + if false { + } else { + r.EncodeBool(bool(x.HostNetwork)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq933[5] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostNetwork")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym951 := z.EncBinary() + _ = yym951 + if false { + } else { + r.EncodeBool(bool(x.HostNetwork)) + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[6] { + if x.HostPorts == nil { + r.EncodeNil() + } else { + yym953 := z.EncBinary() + _ = yym953 + if false { + } else { + h.encSliceHostPortRange(([]HostPortRange)(x.HostPorts), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq933[6] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPorts")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.HostPorts == nil { + r.EncodeNil() + } else { + yym954 := z.EncBinary() + _ = yym954 + if false { + } else { + h.encSliceHostPortRange(([]HostPortRange)(x.HostPorts), e) + } + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[7] { + yym956 := z.EncBinary() + _ = yym956 + if false { + } else { + r.EncodeBool(bool(x.HostPID)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq933[7] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostPID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym957 := z.EncBinary() + _ = yym957 + if false { + } else { + r.EncodeBool(bool(x.HostPID)) + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[8] { + yym959 := z.EncBinary() + _ = yym959 + if false { + } else { + r.EncodeBool(bool(x.HostIPC)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq933[8] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("hostIPC")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym960 := z.EncBinary() + _ = yym960 + if false { + } else { + r.EncodeBool(bool(x.HostIPC)) + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy962 := &x.SELinux + yy962.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("seLinux")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy963 := &x.SELinux + yy963.CodecEncodeSelf(e) + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy965 := &x.RunAsUser + yy965.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("runAsUser")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy966 := &x.RunAsUser + yy966.CodecEncodeSelf(e) + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy968 := &x.SupplementalGroups + yy968.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("supplementalGroups")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy969 := &x.SupplementalGroups + yy969.CodecEncodeSelf(e) + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy971 := &x.FSGroup + yy971.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsGroup")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy972 := &x.FSGroup + yy972.CodecEncodeSelf(e) + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq933[13] { + yym974 := z.EncBinary() + _ = yym974 + if false { + } else { + r.EncodeBool(bool(x.ReadOnlyRootFilesystem)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq933[13] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnlyRootFilesystem")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym975 := z.EncBinary() + _ = yym975 + if false { + } else { + r.EncodeBool(bool(x.ReadOnlyRootFilesystem)) + } + } + } + if yyr933 || yy2arr933 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSecurityPolicySpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym976 := z.DecBinary() + _ = yym976 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct977 := r.ContainerType() + if yyct977 == codecSelferValueTypeMap1234 { + yyl977 := r.ReadMapStart() + if yyl977 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl977, d) + } + } else if yyct977 == codecSelferValueTypeArray1234 { + yyl977 := r.ReadArrayStart() + if yyl977 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl977, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSecurityPolicySpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys978Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys978Slc + var yyhl978 bool = l >= 0 + for yyj978 := 0; ; yyj978++ { + if yyhl978 { + if yyj978 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys978Slc = r.DecodeBytes(yys978Slc, true, true) + yys978 := string(yys978Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys978 { + case "privileged": + if r.TryDecodeAsNil() { + x.Privileged = false + } else { + x.Privileged = bool(r.DecodeBool()) + } + case "defaultAddCapabilities": + if r.TryDecodeAsNil() { + x.DefaultAddCapabilities = nil + } else { + yyv980 := &x.DefaultAddCapabilities + yym981 := z.DecBinary() + _ = yym981 + if false { + } else { + h.decSliceapi_Capability((*[]pkg2_api.Capability)(yyv980), d) + } + } + case "requiredDropCapabilities": + if r.TryDecodeAsNil() { + x.RequiredDropCapabilities = nil + } else { + yyv982 := &x.RequiredDropCapabilities + yym983 := z.DecBinary() + _ = yym983 + if false { + } else { + h.decSliceapi_Capability((*[]pkg2_api.Capability)(yyv982), d) + } + } + case "allowedCapabilities": + if r.TryDecodeAsNil() { + x.AllowedCapabilities = nil + } else { + yyv984 := &x.AllowedCapabilities + yym985 := z.DecBinary() + _ = yym985 + if false { + } else { + h.decSliceapi_Capability((*[]pkg2_api.Capability)(yyv984), d) + } + } + case "volumes": + if r.TryDecodeAsNil() { + x.Volumes = nil + } else { + yyv986 := &x.Volumes + yym987 := z.DecBinary() + _ = yym987 + if false { + } else { + h.decSliceFSType((*[]FSType)(yyv986), d) + } + } + case "hostNetwork": + if r.TryDecodeAsNil() { + x.HostNetwork = false + } else { + x.HostNetwork = bool(r.DecodeBool()) + } + case "hostPorts": + if r.TryDecodeAsNil() { + x.HostPorts = nil + } else { + yyv989 := &x.HostPorts + yym990 := z.DecBinary() + _ = yym990 + if false { + } else { + h.decSliceHostPortRange((*[]HostPortRange)(yyv989), d) + } + } + case "hostPID": + if r.TryDecodeAsNil() { + x.HostPID = false + } else { + x.HostPID = bool(r.DecodeBool()) + } + case "hostIPC": + if r.TryDecodeAsNil() { + x.HostIPC = false + } else { + x.HostIPC = bool(r.DecodeBool()) + } + case "seLinux": + if r.TryDecodeAsNil() { + x.SELinux = SELinuxStrategyOptions{} + } else { + yyv993 := &x.SELinux + yyv993.CodecDecodeSelf(d) + } + case "runAsUser": + if r.TryDecodeAsNil() { + x.RunAsUser = RunAsUserStrategyOptions{} + } else { + yyv994 := &x.RunAsUser + yyv994.CodecDecodeSelf(d) + } + case "supplementalGroups": + if r.TryDecodeAsNil() { + x.SupplementalGroups = SupplementalGroupsStrategyOptions{} + } else { + yyv995 := &x.SupplementalGroups + yyv995.CodecDecodeSelf(d) + } + case "fsGroup": + if r.TryDecodeAsNil() { + x.FSGroup = FSGroupStrategyOptions{} + } else { + yyv996 := &x.FSGroup + yyv996.CodecDecodeSelf(d) + } + case "readOnlyRootFilesystem": + if r.TryDecodeAsNil() { + x.ReadOnlyRootFilesystem = false + } else { + x.ReadOnlyRootFilesystem = bool(r.DecodeBool()) + } + default: + z.DecStructFieldNotFound(-1, yys978) + } // end switch yys978 + } // end for yyj978 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj998 int + var yyb998 bool + var yyhl998 bool = l >= 0 + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Privileged = false + } else { + x.Privileged = bool(r.DecodeBool()) + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.DefaultAddCapabilities = nil + } else { + yyv1000 := &x.DefaultAddCapabilities + yym1001 := z.DecBinary() + _ = yym1001 + if false { + } else { + h.decSliceapi_Capability((*[]pkg2_api.Capability)(yyv1000), d) + } + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RequiredDropCapabilities = nil + } else { + yyv1002 := &x.RequiredDropCapabilities + yym1003 := z.DecBinary() + _ = yym1003 + if false { + } else { + h.decSliceapi_Capability((*[]pkg2_api.Capability)(yyv1002), d) + } + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.AllowedCapabilities = nil + } else { + yyv1004 := &x.AllowedCapabilities + yym1005 := z.DecBinary() + _ = yym1005 + if false { + } else { + h.decSliceapi_Capability((*[]pkg2_api.Capability)(yyv1004), d) + } + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Volumes = nil + } else { + yyv1006 := &x.Volumes + yym1007 := z.DecBinary() + _ = yym1007 + if false { + } else { + h.decSliceFSType((*[]FSType)(yyv1006), d) + } + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostNetwork = false + } else { + x.HostNetwork = bool(r.DecodeBool()) + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostPorts = nil + } else { + yyv1009 := &x.HostPorts + yym1010 := z.DecBinary() + _ = yym1010 + if false { + } else { + h.decSliceHostPortRange((*[]HostPortRange)(yyv1009), d) + } + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostPID = false + } else { + x.HostPID = bool(r.DecodeBool()) + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.HostIPC = false + } else { + x.HostIPC = bool(r.DecodeBool()) + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SELinux = SELinuxStrategyOptions{} + } else { + yyv1013 := &x.SELinux + yyv1013.CodecDecodeSelf(d) + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.RunAsUser = RunAsUserStrategyOptions{} + } else { + yyv1014 := &x.RunAsUser + yyv1014.CodecDecodeSelf(d) + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.SupplementalGroups = SupplementalGroupsStrategyOptions{} + } else { + yyv1015 := &x.SupplementalGroups + yyv1015.CodecDecodeSelf(d) + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSGroup = FSGroupStrategyOptions{} + } else { + yyv1016 := &x.FSGroup + yyv1016.CodecDecodeSelf(d) + } + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnlyRootFilesystem = false + } else { + x.ReadOnlyRootFilesystem = bool(r.DecodeBool()) + } + for { + yyj998++ + if yyhl998 { + yyb998 = yyj998 > l + } else { + yyb998 = r.CheckBreak() + } + if yyb998 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj998-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *HostPortRange) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1018 := z.EncBinary() + _ = yym1018 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1019 := !z.EncBinary() + yy2arr1019 := z.EncBasicHandle().StructToArray + var yyq1019 [2]bool + _, _, _ = yysep1019, yyq1019, yy2arr1019 + const yyr1019 bool = false + var yynn1019 int + if yyr1019 || yy2arr1019 { + r.EncodeArrayStart(2) + } else { + yynn1019 = 2 + for _, b := range yyq1019 { + if b { + yynn1019++ + } + } + r.EncodeMapStart(yynn1019) + yynn1019 = 0 + } + if yyr1019 || yy2arr1019 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1021 := z.EncBinary() + _ = yym1021 + if false { + } else { + r.EncodeInt(int64(x.Min)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("min")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1022 := z.EncBinary() + _ = yym1022 + if false { + } else { + r.EncodeInt(int64(x.Min)) + } + } + if yyr1019 || yy2arr1019 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1024 := z.EncBinary() + _ = yym1024 + if false { + } else { + r.EncodeInt(int64(x.Max)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("max")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1025 := z.EncBinary() + _ = yym1025 + if false { + } else { + r.EncodeInt(int64(x.Max)) + } + } + if yyr1019 || yy2arr1019 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *HostPortRange) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1026 := z.DecBinary() + _ = yym1026 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1027 := r.ContainerType() + if yyct1027 == codecSelferValueTypeMap1234 { + yyl1027 := r.ReadMapStart() + if yyl1027 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1027, d) + } + } else if yyct1027 == codecSelferValueTypeArray1234 { + yyl1027 := r.ReadArrayStart() + if yyl1027 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1027, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *HostPortRange) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1028Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1028Slc + var yyhl1028 bool = l >= 0 + for yyj1028 := 0; ; yyj1028++ { + if yyhl1028 { + if yyj1028 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1028Slc = r.DecodeBytes(yys1028Slc, true, true) + yys1028 := string(yys1028Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1028 { + case "min": + if r.TryDecodeAsNil() { + x.Min = 0 + } else { + x.Min = int(r.DecodeInt(codecSelferBitsize1234)) + } + case "max": + if r.TryDecodeAsNil() { + x.Max = 0 + } else { + x.Max = int(r.DecodeInt(codecSelferBitsize1234)) + } + default: + z.DecStructFieldNotFound(-1, yys1028) + } // end switch yys1028 + } // end for yyj1028 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *HostPortRange) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1031 int + var yyb1031 bool + var yyhl1031 bool = l >= 0 + yyj1031++ + if yyhl1031 { + yyb1031 = yyj1031 > l + } else { + yyb1031 = r.CheckBreak() + } + if yyb1031 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Min = 0 + } else { + x.Min = int(r.DecodeInt(codecSelferBitsize1234)) + } + yyj1031++ + if yyhl1031 { + yyb1031 = yyj1031 > l + } else { + yyb1031 = r.CheckBreak() + } + if yyb1031 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Max = 0 + } else { + x.Max = int(r.DecodeInt(codecSelferBitsize1234)) + } + for { + yyj1031++ + if yyhl1031 { + yyb1031 = yyj1031 > l + } else { + yyb1031 = r.CheckBreak() + } + if yyb1031 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1031-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x FSType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1034 := z.EncBinary() + _ = yym1034 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *FSType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1035 := z.DecBinary() + _ = yym1035 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *SELinuxStrategyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1036 := z.EncBinary() + _ = yym1036 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1037 := !z.EncBinary() + yy2arr1037 := z.EncBasicHandle().StructToArray + var yyq1037 [2]bool + _, _, _ = yysep1037, yyq1037, yy2arr1037 + const yyr1037 bool = false + yyq1037[1] = x.SELinuxOptions != nil + var yynn1037 int + if yyr1037 || yy2arr1037 { + r.EncodeArrayStart(2) + } else { + yynn1037 = 1 + for _, b := range yyq1037 { + if b { + yynn1037++ + } + } + r.EncodeMapStart(yynn1037) + yynn1037 = 0 + } + if yyr1037 || yy2arr1037 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Rule.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rule")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Rule.CodecEncodeSelf(e) + } + if yyr1037 || yy2arr1037 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1037[1] { + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq1037[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("seLinuxOptions")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.SELinuxOptions == nil { + r.EncodeNil() + } else { + x.SELinuxOptions.CodecEncodeSelf(e) + } + } + } + if yyr1037 || yy2arr1037 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SELinuxStrategyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1040 := z.DecBinary() + _ = yym1040 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1041 := r.ContainerType() + if yyct1041 == codecSelferValueTypeMap1234 { + yyl1041 := r.ReadMapStart() + if yyl1041 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1041, d) + } + } else if yyct1041 == codecSelferValueTypeArray1234 { + yyl1041 := r.ReadArrayStart() + if yyl1041 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1041, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SELinuxStrategyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1042Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1042Slc + var yyhl1042 bool = l >= 0 + for yyj1042 := 0; ; yyj1042++ { + if yyhl1042 { + if yyj1042 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1042Slc = r.DecodeBytes(yys1042Slc, true, true) + yys1042 := string(yys1042Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1042 { + case "rule": + if r.TryDecodeAsNil() { + x.Rule = "" + } else { + x.Rule = SELinuxStrategy(r.DecodeString()) + } + case "seLinuxOptions": + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(pkg2_api.SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1042) + } // end switch yys1042 + } // end for yyj1042 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SELinuxStrategyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1045 int + var yyb1045 bool + var yyhl1045 bool = l >= 0 + yyj1045++ + if yyhl1045 { + yyb1045 = yyj1045 > l + } else { + yyb1045 = r.CheckBreak() + } + if yyb1045 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Rule = "" + } else { + x.Rule = SELinuxStrategy(r.DecodeString()) + } + yyj1045++ + if yyhl1045 { + yyb1045 = yyj1045 > l + } else { + yyb1045 = r.CheckBreak() + } + if yyb1045 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.SELinuxOptions != nil { + x.SELinuxOptions = nil + } + } else { + if x.SELinuxOptions == nil { + x.SELinuxOptions = new(pkg2_api.SELinuxOptions) + } + x.SELinuxOptions.CodecDecodeSelf(d) + } + for { + yyj1045++ + if yyhl1045 { + yyb1045 = yyj1045 > l + } else { + yyb1045 = r.CheckBreak() + } + if yyb1045 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1045-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x SELinuxStrategy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1048 := z.EncBinary() + _ = yym1048 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *SELinuxStrategy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1049 := z.DecBinary() + _ = yym1049 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *RunAsUserStrategyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1050 := z.EncBinary() + _ = yym1050 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1051 := !z.EncBinary() + yy2arr1051 := z.EncBasicHandle().StructToArray + var yyq1051 [2]bool + _, _, _ = yysep1051, yyq1051, yy2arr1051 + const yyr1051 bool = false + yyq1051[1] = len(x.Ranges) != 0 + var yynn1051 int + if yyr1051 || yy2arr1051 { + r.EncodeArrayStart(2) + } else { + yynn1051 = 1 + for _, b := range yyq1051 { + if b { + yynn1051++ + } + } + r.EncodeMapStart(yynn1051) + yynn1051 = 0 + } + if yyr1051 || yy2arr1051 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + x.Rule.CodecEncodeSelf(e) + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rule")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Rule.CodecEncodeSelf(e) + } + if yyr1051 || yy2arr1051 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1051[1] { + if x.Ranges == nil { + r.EncodeNil() + } else { + yym1054 := z.EncBinary() + _ = yym1054 + if false { + } else { + h.encSliceIDRange(([]IDRange)(x.Ranges), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1051[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ranges")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ranges == nil { + r.EncodeNil() + } else { + yym1055 := z.EncBinary() + _ = yym1055 + if false { + } else { + h.encSliceIDRange(([]IDRange)(x.Ranges), e) + } + } + } + } + if yyr1051 || yy2arr1051 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *RunAsUserStrategyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1056 := z.DecBinary() + _ = yym1056 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1057 := r.ContainerType() + if yyct1057 == codecSelferValueTypeMap1234 { + yyl1057 := r.ReadMapStart() + if yyl1057 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1057, d) + } + } else if yyct1057 == codecSelferValueTypeArray1234 { + yyl1057 := r.ReadArrayStart() + if yyl1057 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1057, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *RunAsUserStrategyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1058Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1058Slc + var yyhl1058 bool = l >= 0 + for yyj1058 := 0; ; yyj1058++ { + if yyhl1058 { + if yyj1058 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1058Slc = r.DecodeBytes(yys1058Slc, true, true) + yys1058 := string(yys1058Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1058 { + case "rule": + if r.TryDecodeAsNil() { + x.Rule = "" + } else { + x.Rule = RunAsUserStrategy(r.DecodeString()) + } + case "ranges": + if r.TryDecodeAsNil() { + x.Ranges = nil + } else { + yyv1060 := &x.Ranges + yym1061 := z.DecBinary() + _ = yym1061 + if false { + } else { + h.decSliceIDRange((*[]IDRange)(yyv1060), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1058) + } // end switch yys1058 + } // end for yyj1058 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *RunAsUserStrategyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1062 int + var yyb1062 bool + var yyhl1062 bool = l >= 0 + yyj1062++ + if yyhl1062 { + yyb1062 = yyj1062 > l + } else { + yyb1062 = r.CheckBreak() + } + if yyb1062 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Rule = "" + } else { + x.Rule = RunAsUserStrategy(r.DecodeString()) + } + yyj1062++ + if yyhl1062 { + yyb1062 = yyj1062 > l + } else { + yyb1062 = r.CheckBreak() + } + if yyb1062 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ranges = nil + } else { + yyv1064 := &x.Ranges + yym1065 := z.DecBinary() + _ = yym1065 + if false { + } else { + h.decSliceIDRange((*[]IDRange)(yyv1064), d) + } + } + for { + yyj1062++ + if yyhl1062 { + yyb1062 = yyj1062 > l + } else { + yyb1062 = r.CheckBreak() + } + if yyb1062 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1062-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *IDRange) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1066 := z.EncBinary() + _ = yym1066 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1067 := !z.EncBinary() + yy2arr1067 := z.EncBasicHandle().StructToArray + var yyq1067 [2]bool + _, _, _ = yysep1067, yyq1067, yy2arr1067 + const yyr1067 bool = false + var yynn1067 int + if yyr1067 || yy2arr1067 { + r.EncodeArrayStart(2) + } else { + yynn1067 = 2 + for _, b := range yyq1067 { + if b { + yynn1067++ + } + } + r.EncodeMapStart(yynn1067) + yynn1067 = 0 + } + if yyr1067 || yy2arr1067 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1069 := z.EncBinary() + _ = yym1069 + if false { + } else { + r.EncodeInt(int64(x.Min)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("min")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1070 := z.EncBinary() + _ = yym1070 + if false { + } else { + r.EncodeInt(int64(x.Min)) + } + } + if yyr1067 || yy2arr1067 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1072 := z.EncBinary() + _ = yym1072 + if false { + } else { + r.EncodeInt(int64(x.Max)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("max")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1073 := z.EncBinary() + _ = yym1073 + if false { + } else { + r.EncodeInt(int64(x.Max)) + } + } + if yyr1067 || yy2arr1067 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *IDRange) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1074 := z.DecBinary() + _ = yym1074 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1075 := r.ContainerType() + if yyct1075 == codecSelferValueTypeMap1234 { + yyl1075 := r.ReadMapStart() + if yyl1075 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1075, d) + } + } else if yyct1075 == codecSelferValueTypeArray1234 { + yyl1075 := r.ReadArrayStart() + if yyl1075 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1075, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *IDRange) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1076Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1076Slc + var yyhl1076 bool = l >= 0 + for yyj1076 := 0; ; yyj1076++ { + if yyhl1076 { + if yyj1076 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1076Slc = r.DecodeBytes(yys1076Slc, true, true) + yys1076 := string(yys1076Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1076 { + case "min": + if r.TryDecodeAsNil() { + x.Min = 0 + } else { + x.Min = int64(r.DecodeInt(64)) + } + case "max": + if r.TryDecodeAsNil() { + x.Max = 0 + } else { + x.Max = int64(r.DecodeInt(64)) + } + default: + z.DecStructFieldNotFound(-1, yys1076) + } // end switch yys1076 + } // end for yyj1076 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *IDRange) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1079 int + var yyb1079 bool + var yyhl1079 bool = l >= 0 + yyj1079++ + if yyhl1079 { + yyb1079 = yyj1079 > l + } else { + yyb1079 = r.CheckBreak() + } + if yyb1079 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Min = 0 + } else { + x.Min = int64(r.DecodeInt(64)) + } + yyj1079++ + if yyhl1079 { + yyb1079 = yyj1079 > l + } else { + yyb1079 = r.CheckBreak() + } + if yyb1079 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Max = 0 + } else { + x.Max = int64(r.DecodeInt(64)) + } + for { + yyj1079++ + if yyhl1079 { + yyb1079 = yyj1079 > l + } else { + yyb1079 = r.CheckBreak() + } + if yyb1079 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1079-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x RunAsUserStrategy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1082 := z.EncBinary() + _ = yym1082 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *RunAsUserStrategy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1083 := z.DecBinary() + _ = yym1083 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *FSGroupStrategyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1084 := z.EncBinary() + _ = yym1084 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1085 := !z.EncBinary() + yy2arr1085 := z.EncBasicHandle().StructToArray + var yyq1085 [2]bool + _, _, _ = yysep1085, yyq1085, yy2arr1085 + const yyr1085 bool = false + yyq1085[0] = x.Rule != "" + yyq1085[1] = len(x.Ranges) != 0 + var yynn1085 int + if yyr1085 || yy2arr1085 { + r.EncodeArrayStart(2) + } else { + yynn1085 = 0 + for _, b := range yyq1085 { + if b { + yynn1085++ + } + } + r.EncodeMapStart(yynn1085) + yynn1085 = 0 + } + if yyr1085 || yy2arr1085 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1085[0] { + x.Rule.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1085[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rule")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Rule.CodecEncodeSelf(e) + } + } + if yyr1085 || yy2arr1085 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1085[1] { + if x.Ranges == nil { + r.EncodeNil() + } else { + yym1088 := z.EncBinary() + _ = yym1088 + if false { + } else { + h.encSliceIDRange(([]IDRange)(x.Ranges), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1085[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ranges")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ranges == nil { + r.EncodeNil() + } else { + yym1089 := z.EncBinary() + _ = yym1089 + if false { + } else { + h.encSliceIDRange(([]IDRange)(x.Ranges), e) + } + } + } + } + if yyr1085 || yy2arr1085 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *FSGroupStrategyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1090 := z.DecBinary() + _ = yym1090 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1091 := r.ContainerType() + if yyct1091 == codecSelferValueTypeMap1234 { + yyl1091 := r.ReadMapStart() + if yyl1091 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1091, d) + } + } else if yyct1091 == codecSelferValueTypeArray1234 { + yyl1091 := r.ReadArrayStart() + if yyl1091 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1091, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *FSGroupStrategyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1092Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1092Slc + var yyhl1092 bool = l >= 0 + for yyj1092 := 0; ; yyj1092++ { + if yyhl1092 { + if yyj1092 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1092Slc = r.DecodeBytes(yys1092Slc, true, true) + yys1092 := string(yys1092Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1092 { + case "rule": + if r.TryDecodeAsNil() { + x.Rule = "" + } else { + x.Rule = FSGroupStrategyType(r.DecodeString()) + } + case "ranges": + if r.TryDecodeAsNil() { + x.Ranges = nil + } else { + yyv1094 := &x.Ranges + yym1095 := z.DecBinary() + _ = yym1095 + if false { + } else { + h.decSliceIDRange((*[]IDRange)(yyv1094), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1092) + } // end switch yys1092 + } // end for yyj1092 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *FSGroupStrategyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1096 int + var yyb1096 bool + var yyhl1096 bool = l >= 0 + yyj1096++ + if yyhl1096 { + yyb1096 = yyj1096 > l + } else { + yyb1096 = r.CheckBreak() + } + if yyb1096 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Rule = "" + } else { + x.Rule = FSGroupStrategyType(r.DecodeString()) + } + yyj1096++ + if yyhl1096 { + yyb1096 = yyj1096 > l + } else { + yyb1096 = r.CheckBreak() + } + if yyb1096 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ranges = nil + } else { + yyv1098 := &x.Ranges + yym1099 := z.DecBinary() + _ = yym1099 + if false { + } else { + h.decSliceIDRange((*[]IDRange)(yyv1098), d) + } + } + for { + yyj1096++ + if yyhl1096 { + yyb1096 = yyj1096 > l + } else { + yyb1096 = r.CheckBreak() + } + if yyb1096 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1096-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x FSGroupStrategyType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1100 := z.EncBinary() + _ = yym1100 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *FSGroupStrategyType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1101 := z.DecBinary() + _ = yym1101 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *SupplementalGroupsStrategyOptions) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1102 := z.EncBinary() + _ = yym1102 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1103 := !z.EncBinary() + yy2arr1103 := z.EncBasicHandle().StructToArray + var yyq1103 [2]bool + _, _, _ = yysep1103, yyq1103, yy2arr1103 + const yyr1103 bool = false + yyq1103[0] = x.Rule != "" + yyq1103[1] = len(x.Ranges) != 0 + var yynn1103 int + if yyr1103 || yy2arr1103 { + r.EncodeArrayStart(2) + } else { + yynn1103 = 0 + for _, b := range yyq1103 { + if b { + yynn1103++ + } + } + r.EncodeMapStart(yynn1103) + yynn1103 = 0 + } + if yyr1103 || yy2arr1103 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1103[0] { + x.Rule.CodecEncodeSelf(e) + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1103[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("rule")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + x.Rule.CodecEncodeSelf(e) + } + } + if yyr1103 || yy2arr1103 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1103[1] { + if x.Ranges == nil { + r.EncodeNil() + } else { + yym1106 := z.EncBinary() + _ = yym1106 + if false { + } else { + h.encSliceIDRange(([]IDRange)(x.Ranges), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1103[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ranges")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ranges == nil { + r.EncodeNil() + } else { + yym1107 := z.EncBinary() + _ = yym1107 + if false { + } else { + h.encSliceIDRange(([]IDRange)(x.Ranges), e) + } + } + } + } + if yyr1103 || yy2arr1103 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *SupplementalGroupsStrategyOptions) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1108 := z.DecBinary() + _ = yym1108 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1109 := r.ContainerType() + if yyct1109 == codecSelferValueTypeMap1234 { + yyl1109 := r.ReadMapStart() + if yyl1109 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1109, d) + } + } else if yyct1109 == codecSelferValueTypeArray1234 { + yyl1109 := r.ReadArrayStart() + if yyl1109 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1109, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *SupplementalGroupsStrategyOptions) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1110Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1110Slc + var yyhl1110 bool = l >= 0 + for yyj1110 := 0; ; yyj1110++ { + if yyhl1110 { + if yyj1110 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1110Slc = r.DecodeBytes(yys1110Slc, true, true) + yys1110 := string(yys1110Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1110 { + case "rule": + if r.TryDecodeAsNil() { + x.Rule = "" + } else { + x.Rule = SupplementalGroupsStrategyType(r.DecodeString()) + } + case "ranges": + if r.TryDecodeAsNil() { + x.Ranges = nil + } else { + yyv1112 := &x.Ranges + yym1113 := z.DecBinary() + _ = yym1113 + if false { + } else { + h.decSliceIDRange((*[]IDRange)(yyv1112), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1110) + } // end switch yys1110 + } // end for yyj1110 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *SupplementalGroupsStrategyOptions) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1114 int + var yyb1114 bool + var yyhl1114 bool = l >= 0 + yyj1114++ + if yyhl1114 { + yyb1114 = yyj1114 > l + } else { + yyb1114 = r.CheckBreak() + } + if yyb1114 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Rule = "" + } else { + x.Rule = SupplementalGroupsStrategyType(r.DecodeString()) + } + yyj1114++ + if yyhl1114 { + yyb1114 = yyj1114 > l + } else { + yyb1114 = r.CheckBreak() + } + if yyb1114 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ranges = nil + } else { + yyv1116 := &x.Ranges + yym1117 := z.DecBinary() + _ = yym1117 + if false { + } else { + h.decSliceIDRange((*[]IDRange)(yyv1116), d) + } + } + for { + yyj1114++ + if yyhl1114 { + yyb1114 = yyj1114 > l + } else { + yyb1114 = r.CheckBreak() + } + if yyb1114 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1114-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x SupplementalGroupsStrategyType) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + yym1118 := z.EncBinary() + _ = yym1118 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x)) + } +} + +func (x *SupplementalGroupsStrategyType) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1119 := z.DecBinary() + _ = yym1119 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + *((*string)(x)) = r.DecodeString() + } +} + +func (x *PodSecurityPolicyList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1120 := z.EncBinary() + _ = yym1120 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1121 := !z.EncBinary() + yy2arr1121 := z.EncBasicHandle().StructToArray + var yyq1121 [4]bool + _, _, _ = yysep1121, yyq1121, yy2arr1121 + const yyr1121 bool = false + yyq1121[0] = x.Kind != "" + yyq1121[1] = x.APIVersion != "" + yyq1121[2] = true + var yynn1121 int + if yyr1121 || yy2arr1121 { + r.EncodeArrayStart(4) + } else { + yynn1121 = 1 + for _, b := range yyq1121 { + if b { + yynn1121++ + } + } + r.EncodeMapStart(yynn1121) + yynn1121 = 0 + } + if yyr1121 || yy2arr1121 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1121[0] { + yym1123 := z.EncBinary() + _ = yym1123 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1121[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1124 := z.EncBinary() + _ = yym1124 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr1121 || yy2arr1121 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1121[1] { + yym1126 := z.EncBinary() + _ = yym1126 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1121[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1127 := z.EncBinary() + _ = yym1127 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr1121 || yy2arr1121 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1121[2] { + yy1129 := &x.ListMeta + yym1130 := z.EncBinary() + _ = yym1130 + if false { + } else if z.HasExtensions() && z.EncExt(yy1129) { + } else { + z.EncFallback(yy1129) + } + } else { + r.EncodeNil() + } + } else { + if yyq1121[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1131 := &x.ListMeta + yym1132 := z.EncBinary() + _ = yym1132 + if false { + } else if z.HasExtensions() && z.EncExt(yy1131) { + } else { + z.EncFallback(yy1131) + } + } + } + if yyr1121 || yy2arr1121 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1134 := z.EncBinary() + _ = yym1134 + if false { + } else { + h.encSlicePodSecurityPolicy(([]PodSecurityPolicy)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1135 := z.EncBinary() + _ = yym1135 + if false { + } else { + h.encSlicePodSecurityPolicy(([]PodSecurityPolicy)(x.Items), e) + } + } + } + if yyr1121 || yy2arr1121 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PodSecurityPolicyList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1136 := z.DecBinary() + _ = yym1136 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1137 := r.ContainerType() + if yyct1137 == codecSelferValueTypeMap1234 { + yyl1137 := r.ReadMapStart() + if yyl1137 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1137, d) + } + } else if yyct1137 == codecSelferValueTypeArray1234 { + yyl1137 := r.ReadArrayStart() + if yyl1137 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1137, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PodSecurityPolicyList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1138Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1138Slc + var yyhl1138 bool = l >= 0 + for yyj1138 := 0; ; yyj1138++ { + if yyhl1138 { + if yyj1138 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1138Slc = r.DecodeBytes(yys1138Slc, true, true) + yys1138 := string(yys1138Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1138 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv1141 := &x.ListMeta + yym1142 := z.DecBinary() + _ = yym1142 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1141) { + } else { + z.DecFallback(yyv1141, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1143 := &x.Items + yym1144 := z.DecBinary() + _ = yym1144 + if false { + } else { + h.decSlicePodSecurityPolicy((*[]PodSecurityPolicy)(yyv1143), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1138) + } // end switch yys1138 + } // end for yyj1138 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PodSecurityPolicyList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1145 int + var yyb1145 bool + var yyhl1145 bool = l >= 0 + yyj1145++ + if yyhl1145 { + yyb1145 = yyj1145 > l + } else { + yyb1145 = r.CheckBreak() + } + if yyb1145 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj1145++ + if yyhl1145 { + yyb1145 = yyj1145 > l + } else { + yyb1145 = r.CheckBreak() + } + if yyb1145 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj1145++ + if yyhl1145 { + yyb1145 = yyj1145 > l + } else { + yyb1145 = r.CheckBreak() + } + if yyb1145 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv1148 := &x.ListMeta + yym1149 := z.DecBinary() + _ = yym1149 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1148) { + } else { + z.DecFallback(yyv1148, false) + } + } + yyj1145++ + if yyhl1145 { + yyb1145 = yyj1145 > l + } else { + yyb1145 = r.CheckBreak() + } + if yyb1145 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1150 := &x.Items + yym1151 := z.DecBinary() + _ = yym1151 + if false { + } else { + h.decSlicePodSecurityPolicy((*[]PodSecurityPolicy)(yyv1150), d) + } + } + for { + yyj1145++ + if yyhl1145 { + yyb1145 = yyj1145 > l + } else { + yyb1145 = r.CheckBreak() + } + if yyb1145 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1145-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NetworkPolicy) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1152 := z.EncBinary() + _ = yym1152 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1153 := !z.EncBinary() + yy2arr1153 := z.EncBasicHandle().StructToArray + var yyq1153 [4]bool + _, _, _ = yysep1153, yyq1153, yy2arr1153 + const yyr1153 bool = false + yyq1153[0] = x.Kind != "" + yyq1153[1] = x.APIVersion != "" + yyq1153[2] = true + yyq1153[3] = true + var yynn1153 int + if yyr1153 || yy2arr1153 { + r.EncodeArrayStart(4) + } else { + yynn1153 = 0 + for _, b := range yyq1153 { + if b { + yynn1153++ + } + } + r.EncodeMapStart(yynn1153) + yynn1153 = 0 + } + if yyr1153 || yy2arr1153 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1153[0] { + yym1155 := z.EncBinary() + _ = yym1155 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1153[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1156 := z.EncBinary() + _ = yym1156 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr1153 || yy2arr1153 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1153[1] { + yym1158 := z.EncBinary() + _ = yym1158 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1153[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1159 := z.EncBinary() + _ = yym1159 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr1153 || yy2arr1153 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1153[2] { + yy1161 := &x.ObjectMeta + yy1161.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq1153[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1162 := &x.ObjectMeta + yy1162.CodecEncodeSelf(e) + } + } + if yyr1153 || yy2arr1153 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1153[3] { + yy1164 := &x.Spec + yy1164.CodecEncodeSelf(e) + } else { + r.EncodeNil() + } + } else { + if yyq1153[3] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("spec")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1165 := &x.Spec + yy1165.CodecEncodeSelf(e) + } + } + if yyr1153 || yy2arr1153 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NetworkPolicy) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1166 := z.DecBinary() + _ = yym1166 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1167 := r.ContainerType() + if yyct1167 == codecSelferValueTypeMap1234 { + yyl1167 := r.ReadMapStart() + if yyl1167 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1167, d) + } + } else if yyct1167 == codecSelferValueTypeArray1234 { + yyl1167 := r.ReadArrayStart() + if yyl1167 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1167, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NetworkPolicy) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1168Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1168Slc + var yyhl1168 bool = l >= 0 + for yyj1168 := 0; ; yyj1168++ { + if yyhl1168 { + if yyj1168 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1168Slc = r.DecodeBytes(yys1168Slc, true, true) + yys1168 := string(yys1168Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1168 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv1171 := &x.ObjectMeta + yyv1171.CodecDecodeSelf(d) + } + case "spec": + if r.TryDecodeAsNil() { + x.Spec = NetworkPolicySpec{} + } else { + yyv1172 := &x.Spec + yyv1172.CodecDecodeSelf(d) + } + default: + z.DecStructFieldNotFound(-1, yys1168) + } // end switch yys1168 + } // end for yyj1168 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NetworkPolicy) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1173 int + var yyb1173 bool + var yyhl1173 bool = l >= 0 + yyj1173++ + if yyhl1173 { + yyb1173 = yyj1173 > l + } else { + yyb1173 = r.CheckBreak() + } + if yyb1173 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj1173++ + if yyhl1173 { + yyb1173 = yyj1173 > l + } else { + yyb1173 = r.CheckBreak() + } + if yyb1173 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj1173++ + if yyhl1173 { + yyb1173 = yyj1173 > l + } else { + yyb1173 = r.CheckBreak() + } + if yyb1173 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ObjectMeta = pkg2_api.ObjectMeta{} + } else { + yyv1176 := &x.ObjectMeta + yyv1176.CodecDecodeSelf(d) + } + yyj1173++ + if yyhl1173 { + yyb1173 = yyj1173 > l + } else { + yyb1173 = r.CheckBreak() + } + if yyb1173 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Spec = NetworkPolicySpec{} + } else { + yyv1177 := &x.Spec + yyv1177.CodecDecodeSelf(d) + } + for { + yyj1173++ + if yyhl1173 { + yyb1173 = yyj1173 > l + } else { + yyb1173 = r.CheckBreak() + } + if yyb1173 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1173-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NetworkPolicySpec) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1178 := z.EncBinary() + _ = yym1178 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1179 := !z.EncBinary() + yy2arr1179 := z.EncBasicHandle().StructToArray + var yyq1179 [2]bool + _, _, _ = yysep1179, yyq1179, yy2arr1179 + const yyr1179 bool = false + yyq1179[1] = len(x.Ingress) != 0 + var yynn1179 int + if yyr1179 || yy2arr1179 { + r.EncodeArrayStart(2) + } else { + yynn1179 = 1 + for _, b := range yyq1179 { + if b { + yynn1179++ + } + } + r.EncodeMapStart(yynn1179) + yynn1179 = 0 + } + if yyr1179 || yy2arr1179 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1181 := &x.PodSelector + yym1182 := z.EncBinary() + _ = yym1182 + if false { + } else if z.HasExtensions() && z.EncExt(yy1181) { + } else { + z.EncFallback(yy1181) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1183 := &x.PodSelector + yym1184 := z.EncBinary() + _ = yym1184 + if false { + } else if z.HasExtensions() && z.EncExt(yy1183) { + } else { + z.EncFallback(yy1183) + } + } + if yyr1179 || yy2arr1179 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1179[1] { + if x.Ingress == nil { + r.EncodeNil() + } else { + yym1186 := z.EncBinary() + _ = yym1186 + if false { + } else { + h.encSliceNetworkPolicyIngressRule(([]NetworkPolicyIngressRule)(x.Ingress), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1179[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ingress")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ingress == nil { + r.EncodeNil() + } else { + yym1187 := z.EncBinary() + _ = yym1187 + if false { + } else { + h.encSliceNetworkPolicyIngressRule(([]NetworkPolicyIngressRule)(x.Ingress), e) + } + } + } + } + if yyr1179 || yy2arr1179 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NetworkPolicySpec) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1188 := z.DecBinary() + _ = yym1188 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1189 := r.ContainerType() + if yyct1189 == codecSelferValueTypeMap1234 { + yyl1189 := r.ReadMapStart() + if yyl1189 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1189, d) + } + } else if yyct1189 == codecSelferValueTypeArray1234 { + yyl1189 := r.ReadArrayStart() + if yyl1189 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1189, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NetworkPolicySpec) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1190Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1190Slc + var yyhl1190 bool = l >= 0 + for yyj1190 := 0; ; yyj1190++ { + if yyhl1190 { + if yyj1190 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1190Slc = r.DecodeBytes(yys1190Slc, true, true) + yys1190 := string(yys1190Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1190 { + case "podSelector": + if r.TryDecodeAsNil() { + x.PodSelector = pkg1_unversioned.LabelSelector{} + } else { + yyv1191 := &x.PodSelector + yym1192 := z.DecBinary() + _ = yym1192 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1191) { + } else { + z.DecFallback(yyv1191, false) + } + } + case "ingress": + if r.TryDecodeAsNil() { + x.Ingress = nil + } else { + yyv1193 := &x.Ingress + yym1194 := z.DecBinary() + _ = yym1194 + if false { + } else { + h.decSliceNetworkPolicyIngressRule((*[]NetworkPolicyIngressRule)(yyv1193), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1190) + } // end switch yys1190 + } // end for yyj1190 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NetworkPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1195 int + var yyb1195 bool + var yyhl1195 bool = l >= 0 + yyj1195++ + if yyhl1195 { + yyb1195 = yyj1195 > l + } else { + yyb1195 = r.CheckBreak() + } + if yyb1195 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.PodSelector = pkg1_unversioned.LabelSelector{} + } else { + yyv1196 := &x.PodSelector + yym1197 := z.DecBinary() + _ = yym1197 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1196) { + } else { + z.DecFallback(yyv1196, false) + } + } + yyj1195++ + if yyhl1195 { + yyb1195 = yyj1195 > l + } else { + yyb1195 = r.CheckBreak() + } + if yyb1195 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ingress = nil + } else { + yyv1198 := &x.Ingress + yym1199 := z.DecBinary() + _ = yym1199 + if false { + } else { + h.decSliceNetworkPolicyIngressRule((*[]NetworkPolicyIngressRule)(yyv1198), d) + } + } + for { + yyj1195++ + if yyhl1195 { + yyb1195 = yyj1195 > l + } else { + yyb1195 = r.CheckBreak() + } + if yyb1195 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1195-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NetworkPolicyIngressRule) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1200 := z.EncBinary() + _ = yym1200 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1201 := !z.EncBinary() + yy2arr1201 := z.EncBasicHandle().StructToArray + var yyq1201 [2]bool + _, _, _ = yysep1201, yyq1201, yy2arr1201 + const yyr1201 bool = false + yyq1201[0] = len(x.Ports) != 0 + yyq1201[1] = len(x.From) != 0 + var yynn1201 int + if yyr1201 || yy2arr1201 { + r.EncodeArrayStart(2) + } else { + yynn1201 = 0 + for _, b := range yyq1201 { + if b { + yynn1201++ + } + } + r.EncodeMapStart(yynn1201) + yynn1201 = 0 + } + if yyr1201 || yy2arr1201 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1201[0] { + if x.Ports == nil { + r.EncodeNil() + } else { + yym1203 := z.EncBinary() + _ = yym1203 + if false { + } else { + h.encSliceNetworkPolicyPort(([]NetworkPolicyPort)(x.Ports), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1201[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("ports")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Ports == nil { + r.EncodeNil() + } else { + yym1204 := z.EncBinary() + _ = yym1204 + if false { + } else { + h.encSliceNetworkPolicyPort(([]NetworkPolicyPort)(x.Ports), e) + } + } + } + } + if yyr1201 || yy2arr1201 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1201[1] { + if x.From == nil { + r.EncodeNil() + } else { + yym1206 := z.EncBinary() + _ = yym1206 + if false { + } else { + h.encSliceNetworkPolicyPeer(([]NetworkPolicyPeer)(x.From), e) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1201[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("from")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.From == nil { + r.EncodeNil() + } else { + yym1207 := z.EncBinary() + _ = yym1207 + if false { + } else { + h.encSliceNetworkPolicyPeer(([]NetworkPolicyPeer)(x.From), e) + } + } + } + } + if yyr1201 || yy2arr1201 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NetworkPolicyIngressRule) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1208 := z.DecBinary() + _ = yym1208 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1209 := r.ContainerType() + if yyct1209 == codecSelferValueTypeMap1234 { + yyl1209 := r.ReadMapStart() + if yyl1209 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1209, d) + } + } else if yyct1209 == codecSelferValueTypeArray1234 { + yyl1209 := r.ReadArrayStart() + if yyl1209 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1209, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NetworkPolicyIngressRule) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1210Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1210Slc + var yyhl1210 bool = l >= 0 + for yyj1210 := 0; ; yyj1210++ { + if yyhl1210 { + if yyj1210 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1210Slc = r.DecodeBytes(yys1210Slc, true, true) + yys1210 := string(yys1210Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1210 { + case "ports": + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv1211 := &x.Ports + yym1212 := z.DecBinary() + _ = yym1212 + if false { + } else { + h.decSliceNetworkPolicyPort((*[]NetworkPolicyPort)(yyv1211), d) + } + } + case "from": + if r.TryDecodeAsNil() { + x.From = nil + } else { + yyv1213 := &x.From + yym1214 := z.DecBinary() + _ = yym1214 + if false { + } else { + h.decSliceNetworkPolicyPeer((*[]NetworkPolicyPeer)(yyv1213), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1210) + } // end switch yys1210 + } // end for yyj1210 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NetworkPolicyIngressRule) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1215 int + var yyb1215 bool + var yyhl1215 bool = l >= 0 + yyj1215++ + if yyhl1215 { + yyb1215 = yyj1215 > l + } else { + yyb1215 = r.CheckBreak() + } + if yyb1215 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Ports = nil + } else { + yyv1216 := &x.Ports + yym1217 := z.DecBinary() + _ = yym1217 + if false { + } else { + h.decSliceNetworkPolicyPort((*[]NetworkPolicyPort)(yyv1216), d) + } + } + yyj1215++ + if yyhl1215 { + yyb1215 = yyj1215 > l + } else { + yyb1215 = r.CheckBreak() + } + if yyb1215 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.From = nil + } else { + yyv1218 := &x.From + yym1219 := z.DecBinary() + _ = yym1219 + if false { + } else { + h.decSliceNetworkPolicyPeer((*[]NetworkPolicyPeer)(yyv1218), d) + } + } + for { + yyj1215++ + if yyhl1215 { + yyb1215 = yyj1215 > l + } else { + yyb1215 = r.CheckBreak() + } + if yyb1215 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1215-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NetworkPolicyPort) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1220 := z.EncBinary() + _ = yym1220 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1221 := !z.EncBinary() + yy2arr1221 := z.EncBasicHandle().StructToArray + var yyq1221 [2]bool + _, _, _ = yysep1221, yyq1221, yy2arr1221 + const yyr1221 bool = false + yyq1221[0] = x.Protocol != nil + yyq1221[1] = x.Port != nil + var yynn1221 int + if yyr1221 || yy2arr1221 { + r.EncodeArrayStart(2) + } else { + yynn1221 = 0 + for _, b := range yyq1221 { + if b { + yynn1221++ + } + } + r.EncodeMapStart(yynn1221) + yynn1221 = 0 + } + if yyr1221 || yy2arr1221 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1221[0] { + if x.Protocol == nil { + r.EncodeNil() + } else { + yy1223 := *x.Protocol + yym1224 := z.EncBinary() + _ = yym1224 + if false { + } else if z.HasExtensions() && z.EncExt(yy1223) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy1223)) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1221[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("protocol")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Protocol == nil { + r.EncodeNil() + } else { + yy1225 := *x.Protocol + yym1226 := z.EncBinary() + _ = yym1226 + if false { + } else if z.HasExtensions() && z.EncExt(yy1225) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yy1225)) + } + } + } + } + if yyr1221 || yy2arr1221 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1221[1] { + if x.Port == nil { + r.EncodeNil() + } else { + yym1228 := z.EncBinary() + _ = yym1228 + if false { + } else if z.HasExtensions() && z.EncExt(x.Port) { + } else if !yym1228 && z.IsJSONHandle() { + z.EncJSONMarshal(x.Port) + } else { + z.EncFallback(x.Port) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1221[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("port")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Port == nil { + r.EncodeNil() + } else { + yym1229 := z.EncBinary() + _ = yym1229 + if false { + } else if z.HasExtensions() && z.EncExt(x.Port) { + } else if !yym1229 && z.IsJSONHandle() { + z.EncJSONMarshal(x.Port) + } else { + z.EncFallback(x.Port) + } + } + } + } + if yyr1221 || yy2arr1221 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NetworkPolicyPort) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1230 := z.DecBinary() + _ = yym1230 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1231 := r.ContainerType() + if yyct1231 == codecSelferValueTypeMap1234 { + yyl1231 := r.ReadMapStart() + if yyl1231 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1231, d) + } + } else if yyct1231 == codecSelferValueTypeArray1234 { + yyl1231 := r.ReadArrayStart() + if yyl1231 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1231, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NetworkPolicyPort) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1232Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1232Slc + var yyhl1232 bool = l >= 0 + for yyj1232 := 0; ; yyj1232++ { + if yyhl1232 { + if yyj1232 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1232Slc = r.DecodeBytes(yys1232Slc, true, true) + yys1232 := string(yys1232Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1232 { + case "protocol": + if r.TryDecodeAsNil() { + if x.Protocol != nil { + x.Protocol = nil + } + } else { + if x.Protocol == nil { + x.Protocol = new(pkg2_api.Protocol) + } + x.Protocol.CodecDecodeSelf(d) + } + case "port": + if r.TryDecodeAsNil() { + if x.Port != nil { + x.Port = nil + } + } else { + if x.Port == nil { + x.Port = new(pkg5_intstr.IntOrString) + } + yym1235 := z.DecBinary() + _ = yym1235 + if false { + } else if z.HasExtensions() && z.DecExt(x.Port) { + } else if !yym1235 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.Port) + } else { + z.DecFallback(x.Port, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys1232) + } // end switch yys1232 + } // end for yyj1232 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NetworkPolicyPort) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1236 int + var yyb1236 bool + var yyhl1236 bool = l >= 0 + yyj1236++ + if yyhl1236 { + yyb1236 = yyj1236 > l + } else { + yyb1236 = r.CheckBreak() + } + if yyb1236 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Protocol != nil { + x.Protocol = nil + } + } else { + if x.Protocol == nil { + x.Protocol = new(pkg2_api.Protocol) + } + x.Protocol.CodecDecodeSelf(d) + } + yyj1236++ + if yyhl1236 { + yyb1236 = yyj1236 > l + } else { + yyb1236 = r.CheckBreak() + } + if yyb1236 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.Port != nil { + x.Port = nil + } + } else { + if x.Port == nil { + x.Port = new(pkg5_intstr.IntOrString) + } + yym1239 := z.DecBinary() + _ = yym1239 + if false { + } else if z.HasExtensions() && z.DecExt(x.Port) { + } else if !yym1239 && z.IsJSONHandle() { + z.DecJSONUnmarshal(x.Port) + } else { + z.DecFallback(x.Port, false) + } + } + for { + yyj1236++ + if yyhl1236 { + yyb1236 = yyj1236 > l + } else { + yyb1236 = r.CheckBreak() + } + if yyb1236 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1236-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NetworkPolicyPeer) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1240 := z.EncBinary() + _ = yym1240 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1241 := !z.EncBinary() + yy2arr1241 := z.EncBasicHandle().StructToArray + var yyq1241 [2]bool + _, _, _ = yysep1241, yyq1241, yy2arr1241 + const yyr1241 bool = false + yyq1241[0] = x.PodSelector != nil + yyq1241[1] = x.NamespaceSelector != nil + var yynn1241 int + if yyr1241 || yy2arr1241 { + r.EncodeArrayStart(2) + } else { + yynn1241 = 0 + for _, b := range yyq1241 { + if b { + yynn1241++ + } + } + r.EncodeMapStart(yynn1241) + yynn1241 = 0 + } + if yyr1241 || yy2arr1241 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1241[0] { + if x.PodSelector == nil { + r.EncodeNil() + } else { + yym1243 := z.EncBinary() + _ = yym1243 + if false { + } else if z.HasExtensions() && z.EncExt(x.PodSelector) { + } else { + z.EncFallback(x.PodSelector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1241[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("podSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PodSelector == nil { + r.EncodeNil() + } else { + yym1244 := z.EncBinary() + _ = yym1244 + if false { + } else if z.HasExtensions() && z.EncExt(x.PodSelector) { + } else { + z.EncFallback(x.PodSelector) + } + } + } + } + if yyr1241 || yy2arr1241 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1241[1] { + if x.NamespaceSelector == nil { + r.EncodeNil() + } else { + yym1246 := z.EncBinary() + _ = yym1246 + if false { + } else if z.HasExtensions() && z.EncExt(x.NamespaceSelector) { + } else { + z.EncFallback(x.NamespaceSelector) + } + } + } else { + r.EncodeNil() + } + } else { + if yyq1241[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("namespaceSelector")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.NamespaceSelector == nil { + r.EncodeNil() + } else { + yym1247 := z.EncBinary() + _ = yym1247 + if false { + } else if z.HasExtensions() && z.EncExt(x.NamespaceSelector) { + } else { + z.EncFallback(x.NamespaceSelector) + } + } + } + } + if yyr1241 || yy2arr1241 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NetworkPolicyPeer) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1248 := z.DecBinary() + _ = yym1248 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1249 := r.ContainerType() + if yyct1249 == codecSelferValueTypeMap1234 { + yyl1249 := r.ReadMapStart() + if yyl1249 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1249, d) + } + } else if yyct1249 == codecSelferValueTypeArray1234 { + yyl1249 := r.ReadArrayStart() + if yyl1249 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1249, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NetworkPolicyPeer) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1250Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1250Slc + var yyhl1250 bool = l >= 0 + for yyj1250 := 0; ; yyj1250++ { + if yyhl1250 { + if yyj1250 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1250Slc = r.DecodeBytes(yys1250Slc, true, true) + yys1250 := string(yys1250Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1250 { + case "podSelector": + if r.TryDecodeAsNil() { + if x.PodSelector != nil { + x.PodSelector = nil + } + } else { + if x.PodSelector == nil { + x.PodSelector = new(pkg1_unversioned.LabelSelector) + } + yym1252 := z.DecBinary() + _ = yym1252 + if false { + } else if z.HasExtensions() && z.DecExt(x.PodSelector) { + } else { + z.DecFallback(x.PodSelector, false) + } + } + case "namespaceSelector": + if r.TryDecodeAsNil() { + if x.NamespaceSelector != nil { + x.NamespaceSelector = nil + } + } else { + if x.NamespaceSelector == nil { + x.NamespaceSelector = new(pkg1_unversioned.LabelSelector) + } + yym1254 := z.DecBinary() + _ = yym1254 + if false { + } else if z.HasExtensions() && z.DecExt(x.NamespaceSelector) { + } else { + z.DecFallback(x.NamespaceSelector, false) + } + } + default: + z.DecStructFieldNotFound(-1, yys1250) + } // end switch yys1250 + } // end for yyj1250 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NetworkPolicyPeer) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1255 int + var yyb1255 bool + var yyhl1255 bool = l >= 0 + yyj1255++ + if yyhl1255 { + yyb1255 = yyj1255 > l + } else { + yyb1255 = r.CheckBreak() + } + if yyb1255 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PodSelector != nil { + x.PodSelector = nil + } + } else { + if x.PodSelector == nil { + x.PodSelector = new(pkg1_unversioned.LabelSelector) + } + yym1257 := z.DecBinary() + _ = yym1257 + if false { + } else if z.HasExtensions() && z.DecExt(x.PodSelector) { + } else { + z.DecFallback(x.PodSelector, false) + } + } + yyj1255++ + if yyhl1255 { + yyb1255 = yyj1255 > l + } else { + yyb1255 = r.CheckBreak() + } + if yyb1255 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.NamespaceSelector != nil { + x.NamespaceSelector = nil + } + } else { + if x.NamespaceSelector == nil { + x.NamespaceSelector = new(pkg1_unversioned.LabelSelector) + } + yym1259 := z.DecBinary() + _ = yym1259 + if false { + } else if z.HasExtensions() && z.DecExt(x.NamespaceSelector) { + } else { + z.DecFallback(x.NamespaceSelector, false) + } + } + for { + yyj1255++ + if yyhl1255 { + yyb1255 = yyj1255 > l + } else { + yyb1255 = r.CheckBreak() + } + if yyb1255 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1255-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x *NetworkPolicyList) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1260 := z.EncBinary() + _ = yym1260 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep1261 := !z.EncBinary() + yy2arr1261 := z.EncBasicHandle().StructToArray + var yyq1261 [4]bool + _, _, _ = yysep1261, yyq1261, yy2arr1261 + const yyr1261 bool = false + yyq1261[0] = x.Kind != "" + yyq1261[1] = x.APIVersion != "" + yyq1261[2] = true + var yynn1261 int + if yyr1261 || yy2arr1261 { + r.EncodeArrayStart(4) + } else { + yynn1261 = 1 + for _, b := range yyq1261 { + if b { + yynn1261++ + } + } + r.EncodeMapStart(yynn1261) + yynn1261 = 0 + } + if yyr1261 || yy2arr1261 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1261[0] { + yym1263 := z.EncBinary() + _ = yym1263 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1261[0] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("kind")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1264 := z.EncBinary() + _ = yym1264 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.Kind)) + } + } + } + if yyr1261 || yy2arr1261 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1261[1] { + yym1266 := z.EncBinary() + _ = yym1266 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq1261[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("apiVersion")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym1267 := z.EncBinary() + _ = yym1267 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.APIVersion)) + } + } + } + if yyr1261 || yy2arr1261 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq1261[2] { + yy1269 := &x.ListMeta + yym1270 := z.EncBinary() + _ = yym1270 + if false { + } else if z.HasExtensions() && z.EncExt(yy1269) { + } else { + z.EncFallback(yy1269) + } + } else { + r.EncodeNil() + } + } else { + if yyq1261[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("metadata")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yy1271 := &x.ListMeta + yym1272 := z.EncBinary() + _ = yym1272 + if false { + } else if z.HasExtensions() && z.EncExt(yy1271) { + } else { + z.EncFallback(yy1271) + } + } + } + if yyr1261 || yy2arr1261 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1274 := z.EncBinary() + _ = yym1274 + if false { + } else { + h.encSliceNetworkPolicy(([]NetworkPolicy)(x.Items), e) + } + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("items")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.Items == nil { + r.EncodeNil() + } else { + yym1275 := z.EncBinary() + _ = yym1275 + if false { + } else { + h.encSliceNetworkPolicy(([]NetworkPolicy)(x.Items), e) + } + } + } + if yyr1261 || yy2arr1261 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *NetworkPolicyList) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1276 := z.DecBinary() + _ = yym1276 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct1277 := r.ContainerType() + if yyct1277 == codecSelferValueTypeMap1234 { + yyl1277 := r.ReadMapStart() + if yyl1277 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl1277, d) + } + } else if yyct1277 == codecSelferValueTypeArray1234 { + yyl1277 := r.ReadArrayStart() + if yyl1277 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl1277, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *NetworkPolicyList) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys1278Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys1278Slc + var yyhl1278 bool = l >= 0 + for yyj1278 := 0; ; yyj1278++ { + if yyhl1278 { + if yyj1278 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys1278Slc = r.DecodeBytes(yys1278Slc, true, true) + yys1278 := string(yys1278Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys1278 { + case "kind": + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + case "apiVersion": + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + case "metadata": + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv1281 := &x.ListMeta + yym1282 := z.DecBinary() + _ = yym1282 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1281) { + } else { + z.DecFallback(yyv1281, false) + } + } + case "items": + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1283 := &x.Items + yym1284 := z.DecBinary() + _ = yym1284 + if false { + } else { + h.decSliceNetworkPolicy((*[]NetworkPolicy)(yyv1283), d) + } + } + default: + z.DecStructFieldNotFound(-1, yys1278) + } // end switch yys1278 + } // end for yyj1278 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *NetworkPolicyList) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj1285 int + var yyb1285 bool + var yyhl1285 bool = l >= 0 + yyj1285++ + if yyhl1285 { + yyb1285 = yyj1285 > l + } else { + yyb1285 = r.CheckBreak() + } + if yyb1285 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Kind = "" + } else { + x.Kind = string(r.DecodeString()) + } + yyj1285++ + if yyhl1285 { + yyb1285 = yyj1285 > l + } else { + yyb1285 = r.CheckBreak() + } + if yyb1285 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.APIVersion = "" + } else { + x.APIVersion = string(r.DecodeString()) + } + yyj1285++ + if yyhl1285 { + yyb1285 = yyj1285 > l + } else { + yyb1285 = r.CheckBreak() + } + if yyb1285 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ListMeta = pkg1_unversioned.ListMeta{} + } else { + yyv1288 := &x.ListMeta + yym1289 := z.DecBinary() + _ = yym1289 + if false { + } else if z.HasExtensions() && z.DecExt(yyv1288) { + } else { + z.DecFallback(yyv1288, false) + } + } + yyj1285++ + if yyhl1285 { + yyb1285 = yyj1285 > l + } else { + yyb1285 = r.CheckBreak() + } + if yyb1285 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.Items = nil + } else { + yyv1290 := &x.Items + yym1291 := z.DecBinary() + _ = yym1291 + if false { + } else { + h.decSliceNetworkPolicy((*[]NetworkPolicy)(yyv1290), d) + } + } + for { + yyj1285++ + if yyhl1285 { + yyb1285 = yyj1285 > l + } else { + yyb1285 = r.CheckBreak() + } + if yyb1285 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj1285-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) encSliceCustomMetricTarget(v []CustomMetricTarget, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1292 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1293 := &yyv1292 + yy1293.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceCustomMetricTarget(v *[]CustomMetricTarget, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1294 := *v + yyh1294, yyl1294 := z.DecSliceHelperStart() + var yyc1294 bool + if yyl1294 == 0 { + if yyv1294 == nil { + yyv1294 = []CustomMetricTarget{} + yyc1294 = true + } else if len(yyv1294) != 0 { + yyv1294 = yyv1294[:0] + yyc1294 = true + } + } else if yyl1294 > 0 { + var yyrr1294, yyrl1294 int + var yyrt1294 bool + if yyl1294 > cap(yyv1294) { + + yyrg1294 := len(yyv1294) > 0 + yyv21294 := yyv1294 + yyrl1294, yyrt1294 = z.DecInferLen(yyl1294, z.DecBasicHandle().MaxInitLen, 72) + if yyrt1294 { + if yyrl1294 <= cap(yyv1294) { + yyv1294 = yyv1294[:yyrl1294] + } else { + yyv1294 = make([]CustomMetricTarget, yyrl1294) + } + } else { + yyv1294 = make([]CustomMetricTarget, yyrl1294) + } + yyc1294 = true + yyrr1294 = len(yyv1294) + if yyrg1294 { + copy(yyv1294, yyv21294) + } + } else if yyl1294 != len(yyv1294) { + yyv1294 = yyv1294[:yyl1294] + yyc1294 = true + } + yyj1294 := 0 + for ; yyj1294 < yyrr1294; yyj1294++ { + yyh1294.ElemContainerState(yyj1294) + if r.TryDecodeAsNil() { + yyv1294[yyj1294] = CustomMetricTarget{} + } else { + yyv1295 := &yyv1294[yyj1294] + yyv1295.CodecDecodeSelf(d) + } + + } + if yyrt1294 { + for ; yyj1294 < yyl1294; yyj1294++ { + yyv1294 = append(yyv1294, CustomMetricTarget{}) + yyh1294.ElemContainerState(yyj1294) + if r.TryDecodeAsNil() { + yyv1294[yyj1294] = CustomMetricTarget{} + } else { + yyv1296 := &yyv1294[yyj1294] + yyv1296.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1294 := 0 + for ; !r.CheckBreak(); yyj1294++ { + + if yyj1294 >= len(yyv1294) { + yyv1294 = append(yyv1294, CustomMetricTarget{}) // var yyz1294 CustomMetricTarget + yyc1294 = true + } + yyh1294.ElemContainerState(yyj1294) + if yyj1294 < len(yyv1294) { + if r.TryDecodeAsNil() { + yyv1294[yyj1294] = CustomMetricTarget{} + } else { + yyv1297 := &yyv1294[yyj1294] + yyv1297.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1294 < len(yyv1294) { + yyv1294 = yyv1294[:yyj1294] + yyc1294 = true + } else if yyj1294 == 0 && yyv1294 == nil { + yyv1294 = []CustomMetricTarget{} + yyc1294 = true + } + } + yyh1294.End() + if yyc1294 { + *v = yyv1294 + } +} + +func (x codecSelfer1234) encSliceCustomMetricCurrentStatus(v []CustomMetricCurrentStatus, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1298 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1299 := &yyv1298 + yy1299.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceCustomMetricCurrentStatus(v *[]CustomMetricCurrentStatus, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1300 := *v + yyh1300, yyl1300 := z.DecSliceHelperStart() + var yyc1300 bool + if yyl1300 == 0 { + if yyv1300 == nil { + yyv1300 = []CustomMetricCurrentStatus{} + yyc1300 = true + } else if len(yyv1300) != 0 { + yyv1300 = yyv1300[:0] + yyc1300 = true + } + } else if yyl1300 > 0 { + var yyrr1300, yyrl1300 int + var yyrt1300 bool + if yyl1300 > cap(yyv1300) { + + yyrg1300 := len(yyv1300) > 0 + yyv21300 := yyv1300 + yyrl1300, yyrt1300 = z.DecInferLen(yyl1300, z.DecBasicHandle().MaxInitLen, 72) + if yyrt1300 { + if yyrl1300 <= cap(yyv1300) { + yyv1300 = yyv1300[:yyrl1300] + } else { + yyv1300 = make([]CustomMetricCurrentStatus, yyrl1300) + } + } else { + yyv1300 = make([]CustomMetricCurrentStatus, yyrl1300) + } + yyc1300 = true + yyrr1300 = len(yyv1300) + if yyrg1300 { + copy(yyv1300, yyv21300) + } + } else if yyl1300 != len(yyv1300) { + yyv1300 = yyv1300[:yyl1300] + yyc1300 = true + } + yyj1300 := 0 + for ; yyj1300 < yyrr1300; yyj1300++ { + yyh1300.ElemContainerState(yyj1300) + if r.TryDecodeAsNil() { + yyv1300[yyj1300] = CustomMetricCurrentStatus{} + } else { + yyv1301 := &yyv1300[yyj1300] + yyv1301.CodecDecodeSelf(d) + } + + } + if yyrt1300 { + for ; yyj1300 < yyl1300; yyj1300++ { + yyv1300 = append(yyv1300, CustomMetricCurrentStatus{}) + yyh1300.ElemContainerState(yyj1300) + if r.TryDecodeAsNil() { + yyv1300[yyj1300] = CustomMetricCurrentStatus{} + } else { + yyv1302 := &yyv1300[yyj1300] + yyv1302.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1300 := 0 + for ; !r.CheckBreak(); yyj1300++ { + + if yyj1300 >= len(yyv1300) { + yyv1300 = append(yyv1300, CustomMetricCurrentStatus{}) // var yyz1300 CustomMetricCurrentStatus + yyc1300 = true + } + yyh1300.ElemContainerState(yyj1300) + if yyj1300 < len(yyv1300) { + if r.TryDecodeAsNil() { + yyv1300[yyj1300] = CustomMetricCurrentStatus{} + } else { + yyv1303 := &yyv1300[yyj1300] + yyv1303.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1300 < len(yyv1300) { + yyv1300 = yyv1300[:yyj1300] + yyc1300 = true + } else if yyj1300 == 0 && yyv1300 == nil { + yyv1300 = []CustomMetricCurrentStatus{} + yyc1300 = true + } + } + yyh1300.End() + if yyc1300 { + *v = yyv1300 + } +} + +func (x codecSelfer1234) encSliceAPIVersion(v []APIVersion, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1304 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1305 := &yyv1304 + yy1305.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceAPIVersion(v *[]APIVersion, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1306 := *v + yyh1306, yyl1306 := z.DecSliceHelperStart() + var yyc1306 bool + if yyl1306 == 0 { + if yyv1306 == nil { + yyv1306 = []APIVersion{} + yyc1306 = true + } else if len(yyv1306) != 0 { + yyv1306 = yyv1306[:0] + yyc1306 = true + } + } else if yyl1306 > 0 { + var yyrr1306, yyrl1306 int + var yyrt1306 bool + if yyl1306 > cap(yyv1306) { + + yyrg1306 := len(yyv1306) > 0 + yyv21306 := yyv1306 + yyrl1306, yyrt1306 = z.DecInferLen(yyl1306, z.DecBasicHandle().MaxInitLen, 16) + if yyrt1306 { + if yyrl1306 <= cap(yyv1306) { + yyv1306 = yyv1306[:yyrl1306] + } else { + yyv1306 = make([]APIVersion, yyrl1306) + } + } else { + yyv1306 = make([]APIVersion, yyrl1306) + } + yyc1306 = true + yyrr1306 = len(yyv1306) + if yyrg1306 { + copy(yyv1306, yyv21306) + } + } else if yyl1306 != len(yyv1306) { + yyv1306 = yyv1306[:yyl1306] + yyc1306 = true + } + yyj1306 := 0 + for ; yyj1306 < yyrr1306; yyj1306++ { + yyh1306.ElemContainerState(yyj1306) + if r.TryDecodeAsNil() { + yyv1306[yyj1306] = APIVersion{} + } else { + yyv1307 := &yyv1306[yyj1306] + yyv1307.CodecDecodeSelf(d) + } + + } + if yyrt1306 { + for ; yyj1306 < yyl1306; yyj1306++ { + yyv1306 = append(yyv1306, APIVersion{}) + yyh1306.ElemContainerState(yyj1306) + if r.TryDecodeAsNil() { + yyv1306[yyj1306] = APIVersion{} + } else { + yyv1308 := &yyv1306[yyj1306] + yyv1308.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1306 := 0 + for ; !r.CheckBreak(); yyj1306++ { + + if yyj1306 >= len(yyv1306) { + yyv1306 = append(yyv1306, APIVersion{}) // var yyz1306 APIVersion + yyc1306 = true + } + yyh1306.ElemContainerState(yyj1306) + if yyj1306 < len(yyv1306) { + if r.TryDecodeAsNil() { + yyv1306[yyj1306] = APIVersion{} + } else { + yyv1309 := &yyv1306[yyj1306] + yyv1309.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1306 < len(yyv1306) { + yyv1306 = yyv1306[:yyj1306] + yyc1306 = true + } else if yyj1306 == 0 && yyv1306 == nil { + yyv1306 = []APIVersion{} + yyc1306 = true + } + } + yyh1306.End() + if yyc1306 { + *v = yyv1306 + } +} + +func (x codecSelfer1234) encSliceThirdPartyResource(v []ThirdPartyResource, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1310 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1311 := &yyv1310 + yy1311.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceThirdPartyResource(v *[]ThirdPartyResource, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1312 := *v + yyh1312, yyl1312 := z.DecSliceHelperStart() + var yyc1312 bool + if yyl1312 == 0 { + if yyv1312 == nil { + yyv1312 = []ThirdPartyResource{} + yyc1312 = true + } else if len(yyv1312) != 0 { + yyv1312 = yyv1312[:0] + yyc1312 = true + } + } else if yyl1312 > 0 { + var yyrr1312, yyrl1312 int + var yyrt1312 bool + if yyl1312 > cap(yyv1312) { + + yyrg1312 := len(yyv1312) > 0 + yyv21312 := yyv1312 + yyrl1312, yyrt1312 = z.DecInferLen(yyl1312, z.DecBasicHandle().MaxInitLen, 296) + if yyrt1312 { + if yyrl1312 <= cap(yyv1312) { + yyv1312 = yyv1312[:yyrl1312] + } else { + yyv1312 = make([]ThirdPartyResource, yyrl1312) + } + } else { + yyv1312 = make([]ThirdPartyResource, yyrl1312) + } + yyc1312 = true + yyrr1312 = len(yyv1312) + if yyrg1312 { + copy(yyv1312, yyv21312) + } + } else if yyl1312 != len(yyv1312) { + yyv1312 = yyv1312[:yyl1312] + yyc1312 = true + } + yyj1312 := 0 + for ; yyj1312 < yyrr1312; yyj1312++ { + yyh1312.ElemContainerState(yyj1312) + if r.TryDecodeAsNil() { + yyv1312[yyj1312] = ThirdPartyResource{} + } else { + yyv1313 := &yyv1312[yyj1312] + yyv1313.CodecDecodeSelf(d) + } + + } + if yyrt1312 { + for ; yyj1312 < yyl1312; yyj1312++ { + yyv1312 = append(yyv1312, ThirdPartyResource{}) + yyh1312.ElemContainerState(yyj1312) + if r.TryDecodeAsNil() { + yyv1312[yyj1312] = ThirdPartyResource{} + } else { + yyv1314 := &yyv1312[yyj1312] + yyv1314.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1312 := 0 + for ; !r.CheckBreak(); yyj1312++ { + + if yyj1312 >= len(yyv1312) { + yyv1312 = append(yyv1312, ThirdPartyResource{}) // var yyz1312 ThirdPartyResource + yyc1312 = true + } + yyh1312.ElemContainerState(yyj1312) + if yyj1312 < len(yyv1312) { + if r.TryDecodeAsNil() { + yyv1312[yyj1312] = ThirdPartyResource{} + } else { + yyv1315 := &yyv1312[yyj1312] + yyv1315.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1312 < len(yyv1312) { + yyv1312 = yyv1312[:yyj1312] + yyc1312 = true + } else if yyj1312 == 0 && yyv1312 == nil { + yyv1312 = []ThirdPartyResource{} + yyc1312 = true + } + } + yyh1312.End() + if yyc1312 { + *v = yyv1312 + } +} + +func (x codecSelfer1234) encSliceDeployment(v []Deployment, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1316 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1317 := &yyv1316 + yy1317.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceDeployment(v *[]Deployment, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1318 := *v + yyh1318, yyl1318 := z.DecSliceHelperStart() + var yyc1318 bool + if yyl1318 == 0 { + if yyv1318 == nil { + yyv1318 = []Deployment{} + yyc1318 = true + } else if len(yyv1318) != 0 { + yyv1318 = yyv1318[:0] + yyc1318 = true + } + } else if yyl1318 > 0 { + var yyrr1318, yyrl1318 int + var yyrt1318 bool + if yyl1318 > cap(yyv1318) { + + yyrg1318 := len(yyv1318) > 0 + yyv21318 := yyv1318 + yyrl1318, yyrt1318 = z.DecInferLen(yyl1318, z.DecBasicHandle().MaxInitLen, 800) + if yyrt1318 { + if yyrl1318 <= cap(yyv1318) { + yyv1318 = yyv1318[:yyrl1318] + } else { + yyv1318 = make([]Deployment, yyrl1318) + } + } else { + yyv1318 = make([]Deployment, yyrl1318) + } + yyc1318 = true + yyrr1318 = len(yyv1318) + if yyrg1318 { + copy(yyv1318, yyv21318) + } + } else if yyl1318 != len(yyv1318) { + yyv1318 = yyv1318[:yyl1318] + yyc1318 = true + } + yyj1318 := 0 + for ; yyj1318 < yyrr1318; yyj1318++ { + yyh1318.ElemContainerState(yyj1318) + if r.TryDecodeAsNil() { + yyv1318[yyj1318] = Deployment{} + } else { + yyv1319 := &yyv1318[yyj1318] + yyv1319.CodecDecodeSelf(d) + } + + } + if yyrt1318 { + for ; yyj1318 < yyl1318; yyj1318++ { + yyv1318 = append(yyv1318, Deployment{}) + yyh1318.ElemContainerState(yyj1318) + if r.TryDecodeAsNil() { + yyv1318[yyj1318] = Deployment{} + } else { + yyv1320 := &yyv1318[yyj1318] + yyv1320.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1318 := 0 + for ; !r.CheckBreak(); yyj1318++ { + + if yyj1318 >= len(yyv1318) { + yyv1318 = append(yyv1318, Deployment{}) // var yyz1318 Deployment + yyc1318 = true + } + yyh1318.ElemContainerState(yyj1318) + if yyj1318 < len(yyv1318) { + if r.TryDecodeAsNil() { + yyv1318[yyj1318] = Deployment{} + } else { + yyv1321 := &yyv1318[yyj1318] + yyv1321.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1318 < len(yyv1318) { + yyv1318 = yyv1318[:yyj1318] + yyc1318 = true + } else if yyj1318 == 0 && yyv1318 == nil { + yyv1318 = []Deployment{} + yyc1318 = true + } + } + yyh1318.End() + if yyc1318 { + *v = yyv1318 + } +} + +func (x codecSelfer1234) encSliceDaemonSet(v []DaemonSet, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1322 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1323 := &yyv1322 + yy1323.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceDaemonSet(v *[]DaemonSet, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1324 := *v + yyh1324, yyl1324 := z.DecSliceHelperStart() + var yyc1324 bool + if yyl1324 == 0 { + if yyv1324 == nil { + yyv1324 = []DaemonSet{} + yyc1324 = true + } else if len(yyv1324) != 0 { + yyv1324 = yyv1324[:0] + yyc1324 = true + } + } else if yyl1324 > 0 { + var yyrr1324, yyrl1324 int + var yyrt1324 bool + if yyl1324 > cap(yyv1324) { + + yyrg1324 := len(yyv1324) > 0 + yyv21324 := yyv1324 + yyrl1324, yyrt1324 = z.DecInferLen(yyl1324, z.DecBasicHandle().MaxInitLen, 728) + if yyrt1324 { + if yyrl1324 <= cap(yyv1324) { + yyv1324 = yyv1324[:yyrl1324] + } else { + yyv1324 = make([]DaemonSet, yyrl1324) + } + } else { + yyv1324 = make([]DaemonSet, yyrl1324) + } + yyc1324 = true + yyrr1324 = len(yyv1324) + if yyrg1324 { + copy(yyv1324, yyv21324) + } + } else if yyl1324 != len(yyv1324) { + yyv1324 = yyv1324[:yyl1324] + yyc1324 = true + } + yyj1324 := 0 + for ; yyj1324 < yyrr1324; yyj1324++ { + yyh1324.ElemContainerState(yyj1324) + if r.TryDecodeAsNil() { + yyv1324[yyj1324] = DaemonSet{} + } else { + yyv1325 := &yyv1324[yyj1324] + yyv1325.CodecDecodeSelf(d) + } + + } + if yyrt1324 { + for ; yyj1324 < yyl1324; yyj1324++ { + yyv1324 = append(yyv1324, DaemonSet{}) + yyh1324.ElemContainerState(yyj1324) + if r.TryDecodeAsNil() { + yyv1324[yyj1324] = DaemonSet{} + } else { + yyv1326 := &yyv1324[yyj1324] + yyv1326.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1324 := 0 + for ; !r.CheckBreak(); yyj1324++ { + + if yyj1324 >= len(yyv1324) { + yyv1324 = append(yyv1324, DaemonSet{}) // var yyz1324 DaemonSet + yyc1324 = true + } + yyh1324.ElemContainerState(yyj1324) + if yyj1324 < len(yyv1324) { + if r.TryDecodeAsNil() { + yyv1324[yyj1324] = DaemonSet{} + } else { + yyv1327 := &yyv1324[yyj1324] + yyv1327.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1324 < len(yyv1324) { + yyv1324 = yyv1324[:yyj1324] + yyc1324 = true + } else if yyj1324 == 0 && yyv1324 == nil { + yyv1324 = []DaemonSet{} + yyc1324 = true + } + } + yyh1324.End() + if yyc1324 { + *v = yyv1324 + } +} + +func (x codecSelfer1234) encSliceThirdPartyResourceData(v []ThirdPartyResourceData, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1328 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1329 := &yyv1328 + yy1329.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceThirdPartyResourceData(v *[]ThirdPartyResourceData, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1330 := *v + yyh1330, yyl1330 := z.DecSliceHelperStart() + var yyc1330 bool + if yyl1330 == 0 { + if yyv1330 == nil { + yyv1330 = []ThirdPartyResourceData{} + yyc1330 = true + } else if len(yyv1330) != 0 { + yyv1330 = yyv1330[:0] + yyc1330 = true + } + } else if yyl1330 > 0 { + var yyrr1330, yyrl1330 int + var yyrt1330 bool + if yyl1330 > cap(yyv1330) { + + yyrg1330 := len(yyv1330) > 0 + yyv21330 := yyv1330 + yyrl1330, yyrt1330 = z.DecInferLen(yyl1330, z.DecBasicHandle().MaxInitLen, 280) + if yyrt1330 { + if yyrl1330 <= cap(yyv1330) { + yyv1330 = yyv1330[:yyrl1330] + } else { + yyv1330 = make([]ThirdPartyResourceData, yyrl1330) + } + } else { + yyv1330 = make([]ThirdPartyResourceData, yyrl1330) + } + yyc1330 = true + yyrr1330 = len(yyv1330) + if yyrg1330 { + copy(yyv1330, yyv21330) + } + } else if yyl1330 != len(yyv1330) { + yyv1330 = yyv1330[:yyl1330] + yyc1330 = true + } + yyj1330 := 0 + for ; yyj1330 < yyrr1330; yyj1330++ { + yyh1330.ElemContainerState(yyj1330) + if r.TryDecodeAsNil() { + yyv1330[yyj1330] = ThirdPartyResourceData{} + } else { + yyv1331 := &yyv1330[yyj1330] + yyv1331.CodecDecodeSelf(d) + } + + } + if yyrt1330 { + for ; yyj1330 < yyl1330; yyj1330++ { + yyv1330 = append(yyv1330, ThirdPartyResourceData{}) + yyh1330.ElemContainerState(yyj1330) + if r.TryDecodeAsNil() { + yyv1330[yyj1330] = ThirdPartyResourceData{} + } else { + yyv1332 := &yyv1330[yyj1330] + yyv1332.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1330 := 0 + for ; !r.CheckBreak(); yyj1330++ { + + if yyj1330 >= len(yyv1330) { + yyv1330 = append(yyv1330, ThirdPartyResourceData{}) // var yyz1330 ThirdPartyResourceData + yyc1330 = true + } + yyh1330.ElemContainerState(yyj1330) + if yyj1330 < len(yyv1330) { + if r.TryDecodeAsNil() { + yyv1330[yyj1330] = ThirdPartyResourceData{} + } else { + yyv1333 := &yyv1330[yyj1330] + yyv1333.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1330 < len(yyv1330) { + yyv1330 = yyv1330[:yyj1330] + yyc1330 = true + } else if yyj1330 == 0 && yyv1330 == nil { + yyv1330 = []ThirdPartyResourceData{} + yyc1330 = true + } + } + yyh1330.End() + if yyc1330 { + *v = yyv1330 + } +} + +func (x codecSelfer1234) encSliceIngress(v []Ingress, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1334 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1335 := &yyv1334 + yy1335.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceIngress(v *[]Ingress, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1336 := *v + yyh1336, yyl1336 := z.DecSliceHelperStart() + var yyc1336 bool + if yyl1336 == 0 { + if yyv1336 == nil { + yyv1336 = []Ingress{} + yyc1336 = true + } else if len(yyv1336) != 0 { + yyv1336 = yyv1336[:0] + yyc1336 = true + } + } else if yyl1336 > 0 { + var yyrr1336, yyrl1336 int + var yyrt1336 bool + if yyl1336 > cap(yyv1336) { + + yyrg1336 := len(yyv1336) > 0 + yyv21336 := yyv1336 + yyrl1336, yyrt1336 = z.DecInferLen(yyl1336, z.DecBasicHandle().MaxInitLen, 336) + if yyrt1336 { + if yyrl1336 <= cap(yyv1336) { + yyv1336 = yyv1336[:yyrl1336] + } else { + yyv1336 = make([]Ingress, yyrl1336) + } + } else { + yyv1336 = make([]Ingress, yyrl1336) + } + yyc1336 = true + yyrr1336 = len(yyv1336) + if yyrg1336 { + copy(yyv1336, yyv21336) + } + } else if yyl1336 != len(yyv1336) { + yyv1336 = yyv1336[:yyl1336] + yyc1336 = true + } + yyj1336 := 0 + for ; yyj1336 < yyrr1336; yyj1336++ { + yyh1336.ElemContainerState(yyj1336) + if r.TryDecodeAsNil() { + yyv1336[yyj1336] = Ingress{} + } else { + yyv1337 := &yyv1336[yyj1336] + yyv1337.CodecDecodeSelf(d) + } + + } + if yyrt1336 { + for ; yyj1336 < yyl1336; yyj1336++ { + yyv1336 = append(yyv1336, Ingress{}) + yyh1336.ElemContainerState(yyj1336) + if r.TryDecodeAsNil() { + yyv1336[yyj1336] = Ingress{} + } else { + yyv1338 := &yyv1336[yyj1336] + yyv1338.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1336 := 0 + for ; !r.CheckBreak(); yyj1336++ { + + if yyj1336 >= len(yyv1336) { + yyv1336 = append(yyv1336, Ingress{}) // var yyz1336 Ingress + yyc1336 = true + } + yyh1336.ElemContainerState(yyj1336) + if yyj1336 < len(yyv1336) { + if r.TryDecodeAsNil() { + yyv1336[yyj1336] = Ingress{} + } else { + yyv1339 := &yyv1336[yyj1336] + yyv1339.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1336 < len(yyv1336) { + yyv1336 = yyv1336[:yyj1336] + yyc1336 = true + } else if yyj1336 == 0 && yyv1336 == nil { + yyv1336 = []Ingress{} + yyc1336 = true + } + } + yyh1336.End() + if yyc1336 { + *v = yyv1336 + } +} + +func (x codecSelfer1234) encSliceIngressTLS(v []IngressTLS, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1340 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1341 := &yyv1340 + yy1341.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceIngressTLS(v *[]IngressTLS, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1342 := *v + yyh1342, yyl1342 := z.DecSliceHelperStart() + var yyc1342 bool + if yyl1342 == 0 { + if yyv1342 == nil { + yyv1342 = []IngressTLS{} + yyc1342 = true + } else if len(yyv1342) != 0 { + yyv1342 = yyv1342[:0] + yyc1342 = true + } + } else if yyl1342 > 0 { + var yyrr1342, yyrl1342 int + var yyrt1342 bool + if yyl1342 > cap(yyv1342) { + + yyrg1342 := len(yyv1342) > 0 + yyv21342 := yyv1342 + yyrl1342, yyrt1342 = z.DecInferLen(yyl1342, z.DecBasicHandle().MaxInitLen, 40) + if yyrt1342 { + if yyrl1342 <= cap(yyv1342) { + yyv1342 = yyv1342[:yyrl1342] + } else { + yyv1342 = make([]IngressTLS, yyrl1342) + } + } else { + yyv1342 = make([]IngressTLS, yyrl1342) + } + yyc1342 = true + yyrr1342 = len(yyv1342) + if yyrg1342 { + copy(yyv1342, yyv21342) + } + } else if yyl1342 != len(yyv1342) { + yyv1342 = yyv1342[:yyl1342] + yyc1342 = true + } + yyj1342 := 0 + for ; yyj1342 < yyrr1342; yyj1342++ { + yyh1342.ElemContainerState(yyj1342) + if r.TryDecodeAsNil() { + yyv1342[yyj1342] = IngressTLS{} + } else { + yyv1343 := &yyv1342[yyj1342] + yyv1343.CodecDecodeSelf(d) + } + + } + if yyrt1342 { + for ; yyj1342 < yyl1342; yyj1342++ { + yyv1342 = append(yyv1342, IngressTLS{}) + yyh1342.ElemContainerState(yyj1342) + if r.TryDecodeAsNil() { + yyv1342[yyj1342] = IngressTLS{} + } else { + yyv1344 := &yyv1342[yyj1342] + yyv1344.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1342 := 0 + for ; !r.CheckBreak(); yyj1342++ { + + if yyj1342 >= len(yyv1342) { + yyv1342 = append(yyv1342, IngressTLS{}) // var yyz1342 IngressTLS + yyc1342 = true + } + yyh1342.ElemContainerState(yyj1342) + if yyj1342 < len(yyv1342) { + if r.TryDecodeAsNil() { + yyv1342[yyj1342] = IngressTLS{} + } else { + yyv1345 := &yyv1342[yyj1342] + yyv1345.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1342 < len(yyv1342) { + yyv1342 = yyv1342[:yyj1342] + yyc1342 = true + } else if yyj1342 == 0 && yyv1342 == nil { + yyv1342 = []IngressTLS{} + yyc1342 = true + } + } + yyh1342.End() + if yyc1342 { + *v = yyv1342 + } +} + +func (x codecSelfer1234) encSliceIngressRule(v []IngressRule, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1346 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1347 := &yyv1346 + yy1347.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceIngressRule(v *[]IngressRule, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1348 := *v + yyh1348, yyl1348 := z.DecSliceHelperStart() + var yyc1348 bool + if yyl1348 == 0 { + if yyv1348 == nil { + yyv1348 = []IngressRule{} + yyc1348 = true + } else if len(yyv1348) != 0 { + yyv1348 = yyv1348[:0] + yyc1348 = true + } + } else if yyl1348 > 0 { + var yyrr1348, yyrl1348 int + var yyrt1348 bool + if yyl1348 > cap(yyv1348) { + + yyrg1348 := len(yyv1348) > 0 + yyv21348 := yyv1348 + yyrl1348, yyrt1348 = z.DecInferLen(yyl1348, z.DecBasicHandle().MaxInitLen, 24) + if yyrt1348 { + if yyrl1348 <= cap(yyv1348) { + yyv1348 = yyv1348[:yyrl1348] + } else { + yyv1348 = make([]IngressRule, yyrl1348) + } + } else { + yyv1348 = make([]IngressRule, yyrl1348) + } + yyc1348 = true + yyrr1348 = len(yyv1348) + if yyrg1348 { + copy(yyv1348, yyv21348) + } + } else if yyl1348 != len(yyv1348) { + yyv1348 = yyv1348[:yyl1348] + yyc1348 = true + } + yyj1348 := 0 + for ; yyj1348 < yyrr1348; yyj1348++ { + yyh1348.ElemContainerState(yyj1348) + if r.TryDecodeAsNil() { + yyv1348[yyj1348] = IngressRule{} + } else { + yyv1349 := &yyv1348[yyj1348] + yyv1349.CodecDecodeSelf(d) + } + + } + if yyrt1348 { + for ; yyj1348 < yyl1348; yyj1348++ { + yyv1348 = append(yyv1348, IngressRule{}) + yyh1348.ElemContainerState(yyj1348) + if r.TryDecodeAsNil() { + yyv1348[yyj1348] = IngressRule{} + } else { + yyv1350 := &yyv1348[yyj1348] + yyv1350.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1348 := 0 + for ; !r.CheckBreak(); yyj1348++ { + + if yyj1348 >= len(yyv1348) { + yyv1348 = append(yyv1348, IngressRule{}) // var yyz1348 IngressRule + yyc1348 = true + } + yyh1348.ElemContainerState(yyj1348) + if yyj1348 < len(yyv1348) { + if r.TryDecodeAsNil() { + yyv1348[yyj1348] = IngressRule{} + } else { + yyv1351 := &yyv1348[yyj1348] + yyv1351.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1348 < len(yyv1348) { + yyv1348 = yyv1348[:yyj1348] + yyc1348 = true + } else if yyj1348 == 0 && yyv1348 == nil { + yyv1348 = []IngressRule{} + yyc1348 = true + } + } + yyh1348.End() + if yyc1348 { + *v = yyv1348 + } +} + +func (x codecSelfer1234) encSliceHTTPIngressPath(v []HTTPIngressPath, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1352 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1353 := &yyv1352 + yy1353.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceHTTPIngressPath(v *[]HTTPIngressPath, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1354 := *v + yyh1354, yyl1354 := z.DecSliceHelperStart() + var yyc1354 bool + if yyl1354 == 0 { + if yyv1354 == nil { + yyv1354 = []HTTPIngressPath{} + yyc1354 = true + } else if len(yyv1354) != 0 { + yyv1354 = yyv1354[:0] + yyc1354 = true + } + } else if yyl1354 > 0 { + var yyrr1354, yyrl1354 int + var yyrt1354 bool + if yyl1354 > cap(yyv1354) { + + yyrg1354 := len(yyv1354) > 0 + yyv21354 := yyv1354 + yyrl1354, yyrt1354 = z.DecInferLen(yyl1354, z.DecBasicHandle().MaxInitLen, 64) + if yyrt1354 { + if yyrl1354 <= cap(yyv1354) { + yyv1354 = yyv1354[:yyrl1354] + } else { + yyv1354 = make([]HTTPIngressPath, yyrl1354) + } + } else { + yyv1354 = make([]HTTPIngressPath, yyrl1354) + } + yyc1354 = true + yyrr1354 = len(yyv1354) + if yyrg1354 { + copy(yyv1354, yyv21354) + } + } else if yyl1354 != len(yyv1354) { + yyv1354 = yyv1354[:yyl1354] + yyc1354 = true + } + yyj1354 := 0 + for ; yyj1354 < yyrr1354; yyj1354++ { + yyh1354.ElemContainerState(yyj1354) + if r.TryDecodeAsNil() { + yyv1354[yyj1354] = HTTPIngressPath{} + } else { + yyv1355 := &yyv1354[yyj1354] + yyv1355.CodecDecodeSelf(d) + } + + } + if yyrt1354 { + for ; yyj1354 < yyl1354; yyj1354++ { + yyv1354 = append(yyv1354, HTTPIngressPath{}) + yyh1354.ElemContainerState(yyj1354) + if r.TryDecodeAsNil() { + yyv1354[yyj1354] = HTTPIngressPath{} + } else { + yyv1356 := &yyv1354[yyj1354] + yyv1356.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1354 := 0 + for ; !r.CheckBreak(); yyj1354++ { + + if yyj1354 >= len(yyv1354) { + yyv1354 = append(yyv1354, HTTPIngressPath{}) // var yyz1354 HTTPIngressPath + yyc1354 = true + } + yyh1354.ElemContainerState(yyj1354) + if yyj1354 < len(yyv1354) { + if r.TryDecodeAsNil() { + yyv1354[yyj1354] = HTTPIngressPath{} + } else { + yyv1357 := &yyv1354[yyj1354] + yyv1357.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1354 < len(yyv1354) { + yyv1354 = yyv1354[:yyj1354] + yyc1354 = true + } else if yyj1354 == 0 && yyv1354 == nil { + yyv1354 = []HTTPIngressPath{} + yyc1354 = true + } + } + yyh1354.End() + if yyc1354 { + *v = yyv1354 + } +} + +func (x codecSelfer1234) encSliceReplicaSet(v []ReplicaSet, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1358 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1359 := &yyv1358 + yy1359.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceReplicaSet(v *[]ReplicaSet, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1360 := *v + yyh1360, yyl1360 := z.DecSliceHelperStart() + var yyc1360 bool + if yyl1360 == 0 { + if yyv1360 == nil { + yyv1360 = []ReplicaSet{} + yyc1360 = true + } else if len(yyv1360) != 0 { + yyv1360 = yyv1360[:0] + yyc1360 = true + } + } else if yyl1360 > 0 { + var yyrr1360, yyrl1360 int + var yyrt1360 bool + if yyl1360 > cap(yyv1360) { + + yyrg1360 := len(yyv1360) > 0 + yyv21360 := yyv1360 + yyrl1360, yyrt1360 = z.DecInferLen(yyl1360, z.DecBasicHandle().MaxInitLen, 744) + if yyrt1360 { + if yyrl1360 <= cap(yyv1360) { + yyv1360 = yyv1360[:yyrl1360] + } else { + yyv1360 = make([]ReplicaSet, yyrl1360) + } + } else { + yyv1360 = make([]ReplicaSet, yyrl1360) + } + yyc1360 = true + yyrr1360 = len(yyv1360) + if yyrg1360 { + copy(yyv1360, yyv21360) + } + } else if yyl1360 != len(yyv1360) { + yyv1360 = yyv1360[:yyl1360] + yyc1360 = true + } + yyj1360 := 0 + for ; yyj1360 < yyrr1360; yyj1360++ { + yyh1360.ElemContainerState(yyj1360) + if r.TryDecodeAsNil() { + yyv1360[yyj1360] = ReplicaSet{} + } else { + yyv1361 := &yyv1360[yyj1360] + yyv1361.CodecDecodeSelf(d) + } + + } + if yyrt1360 { + for ; yyj1360 < yyl1360; yyj1360++ { + yyv1360 = append(yyv1360, ReplicaSet{}) + yyh1360.ElemContainerState(yyj1360) + if r.TryDecodeAsNil() { + yyv1360[yyj1360] = ReplicaSet{} + } else { + yyv1362 := &yyv1360[yyj1360] + yyv1362.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1360 := 0 + for ; !r.CheckBreak(); yyj1360++ { + + if yyj1360 >= len(yyv1360) { + yyv1360 = append(yyv1360, ReplicaSet{}) // var yyz1360 ReplicaSet + yyc1360 = true + } + yyh1360.ElemContainerState(yyj1360) + if yyj1360 < len(yyv1360) { + if r.TryDecodeAsNil() { + yyv1360[yyj1360] = ReplicaSet{} + } else { + yyv1363 := &yyv1360[yyj1360] + yyv1363.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1360 < len(yyv1360) { + yyv1360 = yyv1360[:yyj1360] + yyc1360 = true + } else if yyj1360 == 0 && yyv1360 == nil { + yyv1360 = []ReplicaSet{} + yyc1360 = true + } + } + yyh1360.End() + if yyc1360 { + *v = yyv1360 + } +} + +func (x codecSelfer1234) encSliceapi_Capability(v []pkg2_api.Capability, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1364 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym1365 := z.EncBinary() + _ = yym1365 + if false { + } else if z.HasExtensions() && z.EncExt(yyv1364) { + } else { + r.EncodeString(codecSelferC_UTF81234, string(yyv1364)) + } + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceapi_Capability(v *[]pkg2_api.Capability, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1366 := *v + yyh1366, yyl1366 := z.DecSliceHelperStart() + var yyc1366 bool + if yyl1366 == 0 { + if yyv1366 == nil { + yyv1366 = []pkg2_api.Capability{} + yyc1366 = true + } else if len(yyv1366) != 0 { + yyv1366 = yyv1366[:0] + yyc1366 = true + } + } else if yyl1366 > 0 { + var yyrr1366, yyrl1366 int + var yyrt1366 bool + if yyl1366 > cap(yyv1366) { + + yyrl1366, yyrt1366 = z.DecInferLen(yyl1366, z.DecBasicHandle().MaxInitLen, 16) + if yyrt1366 { + if yyrl1366 <= cap(yyv1366) { + yyv1366 = yyv1366[:yyrl1366] + } else { + yyv1366 = make([]pkg2_api.Capability, yyrl1366) + } + } else { + yyv1366 = make([]pkg2_api.Capability, yyrl1366) + } + yyc1366 = true + yyrr1366 = len(yyv1366) + } else if yyl1366 != len(yyv1366) { + yyv1366 = yyv1366[:yyl1366] + yyc1366 = true + } + yyj1366 := 0 + for ; yyj1366 < yyrr1366; yyj1366++ { + yyh1366.ElemContainerState(yyj1366) + if r.TryDecodeAsNil() { + yyv1366[yyj1366] = "" + } else { + yyv1366[yyj1366] = pkg2_api.Capability(r.DecodeString()) + } + + } + if yyrt1366 { + for ; yyj1366 < yyl1366; yyj1366++ { + yyv1366 = append(yyv1366, "") + yyh1366.ElemContainerState(yyj1366) + if r.TryDecodeAsNil() { + yyv1366[yyj1366] = "" + } else { + yyv1366[yyj1366] = pkg2_api.Capability(r.DecodeString()) + } + + } + } + + } else { + yyj1366 := 0 + for ; !r.CheckBreak(); yyj1366++ { + + if yyj1366 >= len(yyv1366) { + yyv1366 = append(yyv1366, "") // var yyz1366 pkg2_api.Capability + yyc1366 = true + } + yyh1366.ElemContainerState(yyj1366) + if yyj1366 < len(yyv1366) { + if r.TryDecodeAsNil() { + yyv1366[yyj1366] = "" + } else { + yyv1366[yyj1366] = pkg2_api.Capability(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj1366 < len(yyv1366) { + yyv1366 = yyv1366[:yyj1366] + yyc1366 = true + } else if yyj1366 == 0 && yyv1366 == nil { + yyv1366 = []pkg2_api.Capability{} + yyc1366 = true + } + } + yyh1366.End() + if yyc1366 { + *v = yyv1366 + } +} + +func (x codecSelfer1234) encSliceFSType(v []FSType, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1370 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yyv1370.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceFSType(v *[]FSType, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1371 := *v + yyh1371, yyl1371 := z.DecSliceHelperStart() + var yyc1371 bool + if yyl1371 == 0 { + if yyv1371 == nil { + yyv1371 = []FSType{} + yyc1371 = true + } else if len(yyv1371) != 0 { + yyv1371 = yyv1371[:0] + yyc1371 = true + } + } else if yyl1371 > 0 { + var yyrr1371, yyrl1371 int + var yyrt1371 bool + if yyl1371 > cap(yyv1371) { + + yyrl1371, yyrt1371 = z.DecInferLen(yyl1371, z.DecBasicHandle().MaxInitLen, 16) + if yyrt1371 { + if yyrl1371 <= cap(yyv1371) { + yyv1371 = yyv1371[:yyrl1371] + } else { + yyv1371 = make([]FSType, yyrl1371) + } + } else { + yyv1371 = make([]FSType, yyrl1371) + } + yyc1371 = true + yyrr1371 = len(yyv1371) + } else if yyl1371 != len(yyv1371) { + yyv1371 = yyv1371[:yyl1371] + yyc1371 = true + } + yyj1371 := 0 + for ; yyj1371 < yyrr1371; yyj1371++ { + yyh1371.ElemContainerState(yyj1371) + if r.TryDecodeAsNil() { + yyv1371[yyj1371] = "" + } else { + yyv1371[yyj1371] = FSType(r.DecodeString()) + } + + } + if yyrt1371 { + for ; yyj1371 < yyl1371; yyj1371++ { + yyv1371 = append(yyv1371, "") + yyh1371.ElemContainerState(yyj1371) + if r.TryDecodeAsNil() { + yyv1371[yyj1371] = "" + } else { + yyv1371[yyj1371] = FSType(r.DecodeString()) + } + + } + } + + } else { + yyj1371 := 0 + for ; !r.CheckBreak(); yyj1371++ { + + if yyj1371 >= len(yyv1371) { + yyv1371 = append(yyv1371, "") // var yyz1371 FSType + yyc1371 = true + } + yyh1371.ElemContainerState(yyj1371) + if yyj1371 < len(yyv1371) { + if r.TryDecodeAsNil() { + yyv1371[yyj1371] = "" + } else { + yyv1371[yyj1371] = FSType(r.DecodeString()) + } + + } else { + z.DecSwallow() + } + + } + if yyj1371 < len(yyv1371) { + yyv1371 = yyv1371[:yyj1371] + yyc1371 = true + } else if yyj1371 == 0 && yyv1371 == nil { + yyv1371 = []FSType{} + yyc1371 = true + } + } + yyh1371.End() + if yyc1371 { + *v = yyv1371 + } +} + +func (x codecSelfer1234) encSliceHostPortRange(v []HostPortRange, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1375 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1376 := &yyv1375 + yy1376.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceHostPortRange(v *[]HostPortRange, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1377 := *v + yyh1377, yyl1377 := z.DecSliceHelperStart() + var yyc1377 bool + if yyl1377 == 0 { + if yyv1377 == nil { + yyv1377 = []HostPortRange{} + yyc1377 = true + } else if len(yyv1377) != 0 { + yyv1377 = yyv1377[:0] + yyc1377 = true + } + } else if yyl1377 > 0 { + var yyrr1377, yyrl1377 int + var yyrt1377 bool + if yyl1377 > cap(yyv1377) { + + yyrg1377 := len(yyv1377) > 0 + yyv21377 := yyv1377 + yyrl1377, yyrt1377 = z.DecInferLen(yyl1377, z.DecBasicHandle().MaxInitLen, 16) + if yyrt1377 { + if yyrl1377 <= cap(yyv1377) { + yyv1377 = yyv1377[:yyrl1377] + } else { + yyv1377 = make([]HostPortRange, yyrl1377) + } + } else { + yyv1377 = make([]HostPortRange, yyrl1377) + } + yyc1377 = true + yyrr1377 = len(yyv1377) + if yyrg1377 { + copy(yyv1377, yyv21377) + } + } else if yyl1377 != len(yyv1377) { + yyv1377 = yyv1377[:yyl1377] + yyc1377 = true + } + yyj1377 := 0 + for ; yyj1377 < yyrr1377; yyj1377++ { + yyh1377.ElemContainerState(yyj1377) + if r.TryDecodeAsNil() { + yyv1377[yyj1377] = HostPortRange{} + } else { + yyv1378 := &yyv1377[yyj1377] + yyv1378.CodecDecodeSelf(d) + } + + } + if yyrt1377 { + for ; yyj1377 < yyl1377; yyj1377++ { + yyv1377 = append(yyv1377, HostPortRange{}) + yyh1377.ElemContainerState(yyj1377) + if r.TryDecodeAsNil() { + yyv1377[yyj1377] = HostPortRange{} + } else { + yyv1379 := &yyv1377[yyj1377] + yyv1379.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1377 := 0 + for ; !r.CheckBreak(); yyj1377++ { + + if yyj1377 >= len(yyv1377) { + yyv1377 = append(yyv1377, HostPortRange{}) // var yyz1377 HostPortRange + yyc1377 = true + } + yyh1377.ElemContainerState(yyj1377) + if yyj1377 < len(yyv1377) { + if r.TryDecodeAsNil() { + yyv1377[yyj1377] = HostPortRange{} + } else { + yyv1380 := &yyv1377[yyj1377] + yyv1380.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1377 < len(yyv1377) { + yyv1377 = yyv1377[:yyj1377] + yyc1377 = true + } else if yyj1377 == 0 && yyv1377 == nil { + yyv1377 = []HostPortRange{} + yyc1377 = true + } + } + yyh1377.End() + if yyc1377 { + *v = yyv1377 + } +} + +func (x codecSelfer1234) encSliceIDRange(v []IDRange, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1381 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1382 := &yyv1381 + yy1382.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceIDRange(v *[]IDRange, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1383 := *v + yyh1383, yyl1383 := z.DecSliceHelperStart() + var yyc1383 bool + if yyl1383 == 0 { + if yyv1383 == nil { + yyv1383 = []IDRange{} + yyc1383 = true + } else if len(yyv1383) != 0 { + yyv1383 = yyv1383[:0] + yyc1383 = true + } + } else if yyl1383 > 0 { + var yyrr1383, yyrl1383 int + var yyrt1383 bool + if yyl1383 > cap(yyv1383) { + + yyrg1383 := len(yyv1383) > 0 + yyv21383 := yyv1383 + yyrl1383, yyrt1383 = z.DecInferLen(yyl1383, z.DecBasicHandle().MaxInitLen, 16) + if yyrt1383 { + if yyrl1383 <= cap(yyv1383) { + yyv1383 = yyv1383[:yyrl1383] + } else { + yyv1383 = make([]IDRange, yyrl1383) + } + } else { + yyv1383 = make([]IDRange, yyrl1383) + } + yyc1383 = true + yyrr1383 = len(yyv1383) + if yyrg1383 { + copy(yyv1383, yyv21383) + } + } else if yyl1383 != len(yyv1383) { + yyv1383 = yyv1383[:yyl1383] + yyc1383 = true + } + yyj1383 := 0 + for ; yyj1383 < yyrr1383; yyj1383++ { + yyh1383.ElemContainerState(yyj1383) + if r.TryDecodeAsNil() { + yyv1383[yyj1383] = IDRange{} + } else { + yyv1384 := &yyv1383[yyj1383] + yyv1384.CodecDecodeSelf(d) + } + + } + if yyrt1383 { + for ; yyj1383 < yyl1383; yyj1383++ { + yyv1383 = append(yyv1383, IDRange{}) + yyh1383.ElemContainerState(yyj1383) + if r.TryDecodeAsNil() { + yyv1383[yyj1383] = IDRange{} + } else { + yyv1385 := &yyv1383[yyj1383] + yyv1385.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1383 := 0 + for ; !r.CheckBreak(); yyj1383++ { + + if yyj1383 >= len(yyv1383) { + yyv1383 = append(yyv1383, IDRange{}) // var yyz1383 IDRange + yyc1383 = true + } + yyh1383.ElemContainerState(yyj1383) + if yyj1383 < len(yyv1383) { + if r.TryDecodeAsNil() { + yyv1383[yyj1383] = IDRange{} + } else { + yyv1386 := &yyv1383[yyj1383] + yyv1386.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1383 < len(yyv1383) { + yyv1383 = yyv1383[:yyj1383] + yyc1383 = true + } else if yyj1383 == 0 && yyv1383 == nil { + yyv1383 = []IDRange{} + yyc1383 = true + } + } + yyh1383.End() + if yyc1383 { + *v = yyv1383 + } +} + +func (x codecSelfer1234) encSlicePodSecurityPolicy(v []PodSecurityPolicy, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1387 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1388 := &yyv1387 + yy1388.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicePodSecurityPolicy(v *[]PodSecurityPolicy, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1389 := *v + yyh1389, yyl1389 := z.DecSliceHelperStart() + var yyc1389 bool + if yyl1389 == 0 { + if yyv1389 == nil { + yyv1389 = []PodSecurityPolicy{} + yyc1389 = true + } else if len(yyv1389) != 0 { + yyv1389 = yyv1389[:0] + yyc1389 = true + } + } else if yyl1389 > 0 { + var yyrr1389, yyrl1389 int + var yyrt1389 bool + if yyl1389 > cap(yyv1389) { + + yyrg1389 := len(yyv1389) > 0 + yyv21389 := yyv1389 + yyrl1389, yyrt1389 = z.DecInferLen(yyl1389, z.DecBasicHandle().MaxInitLen, 552) + if yyrt1389 { + if yyrl1389 <= cap(yyv1389) { + yyv1389 = yyv1389[:yyrl1389] + } else { + yyv1389 = make([]PodSecurityPolicy, yyrl1389) + } + } else { + yyv1389 = make([]PodSecurityPolicy, yyrl1389) + } + yyc1389 = true + yyrr1389 = len(yyv1389) + if yyrg1389 { + copy(yyv1389, yyv21389) + } + } else if yyl1389 != len(yyv1389) { + yyv1389 = yyv1389[:yyl1389] + yyc1389 = true + } + yyj1389 := 0 + for ; yyj1389 < yyrr1389; yyj1389++ { + yyh1389.ElemContainerState(yyj1389) + if r.TryDecodeAsNil() { + yyv1389[yyj1389] = PodSecurityPolicy{} + } else { + yyv1390 := &yyv1389[yyj1389] + yyv1390.CodecDecodeSelf(d) + } + + } + if yyrt1389 { + for ; yyj1389 < yyl1389; yyj1389++ { + yyv1389 = append(yyv1389, PodSecurityPolicy{}) + yyh1389.ElemContainerState(yyj1389) + if r.TryDecodeAsNil() { + yyv1389[yyj1389] = PodSecurityPolicy{} + } else { + yyv1391 := &yyv1389[yyj1389] + yyv1391.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1389 := 0 + for ; !r.CheckBreak(); yyj1389++ { + + if yyj1389 >= len(yyv1389) { + yyv1389 = append(yyv1389, PodSecurityPolicy{}) // var yyz1389 PodSecurityPolicy + yyc1389 = true + } + yyh1389.ElemContainerState(yyj1389) + if yyj1389 < len(yyv1389) { + if r.TryDecodeAsNil() { + yyv1389[yyj1389] = PodSecurityPolicy{} + } else { + yyv1392 := &yyv1389[yyj1389] + yyv1392.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1389 < len(yyv1389) { + yyv1389 = yyv1389[:yyj1389] + yyc1389 = true + } else if yyj1389 == 0 && yyv1389 == nil { + yyv1389 = []PodSecurityPolicy{} + yyc1389 = true + } + } + yyh1389.End() + if yyc1389 { + *v = yyv1389 + } +} + +func (x codecSelfer1234) encSliceNetworkPolicyIngressRule(v []NetworkPolicyIngressRule, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1393 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1394 := &yyv1393 + yy1394.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNetworkPolicyIngressRule(v *[]NetworkPolicyIngressRule, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1395 := *v + yyh1395, yyl1395 := z.DecSliceHelperStart() + var yyc1395 bool + if yyl1395 == 0 { + if yyv1395 == nil { + yyv1395 = []NetworkPolicyIngressRule{} + yyc1395 = true + } else if len(yyv1395) != 0 { + yyv1395 = yyv1395[:0] + yyc1395 = true + } + } else if yyl1395 > 0 { + var yyrr1395, yyrl1395 int + var yyrt1395 bool + if yyl1395 > cap(yyv1395) { + + yyrg1395 := len(yyv1395) > 0 + yyv21395 := yyv1395 + yyrl1395, yyrt1395 = z.DecInferLen(yyl1395, z.DecBasicHandle().MaxInitLen, 48) + if yyrt1395 { + if yyrl1395 <= cap(yyv1395) { + yyv1395 = yyv1395[:yyrl1395] + } else { + yyv1395 = make([]NetworkPolicyIngressRule, yyrl1395) + } + } else { + yyv1395 = make([]NetworkPolicyIngressRule, yyrl1395) + } + yyc1395 = true + yyrr1395 = len(yyv1395) + if yyrg1395 { + copy(yyv1395, yyv21395) + } + } else if yyl1395 != len(yyv1395) { + yyv1395 = yyv1395[:yyl1395] + yyc1395 = true + } + yyj1395 := 0 + for ; yyj1395 < yyrr1395; yyj1395++ { + yyh1395.ElemContainerState(yyj1395) + if r.TryDecodeAsNil() { + yyv1395[yyj1395] = NetworkPolicyIngressRule{} + } else { + yyv1396 := &yyv1395[yyj1395] + yyv1396.CodecDecodeSelf(d) + } + + } + if yyrt1395 { + for ; yyj1395 < yyl1395; yyj1395++ { + yyv1395 = append(yyv1395, NetworkPolicyIngressRule{}) + yyh1395.ElemContainerState(yyj1395) + if r.TryDecodeAsNil() { + yyv1395[yyj1395] = NetworkPolicyIngressRule{} + } else { + yyv1397 := &yyv1395[yyj1395] + yyv1397.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1395 := 0 + for ; !r.CheckBreak(); yyj1395++ { + + if yyj1395 >= len(yyv1395) { + yyv1395 = append(yyv1395, NetworkPolicyIngressRule{}) // var yyz1395 NetworkPolicyIngressRule + yyc1395 = true + } + yyh1395.ElemContainerState(yyj1395) + if yyj1395 < len(yyv1395) { + if r.TryDecodeAsNil() { + yyv1395[yyj1395] = NetworkPolicyIngressRule{} + } else { + yyv1398 := &yyv1395[yyj1395] + yyv1398.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1395 < len(yyv1395) { + yyv1395 = yyv1395[:yyj1395] + yyc1395 = true + } else if yyj1395 == 0 && yyv1395 == nil { + yyv1395 = []NetworkPolicyIngressRule{} + yyc1395 = true + } + } + yyh1395.End() + if yyc1395 { + *v = yyv1395 + } +} + +func (x codecSelfer1234) encSliceNetworkPolicyPort(v []NetworkPolicyPort, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1399 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1400 := &yyv1399 + yy1400.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNetworkPolicyPort(v *[]NetworkPolicyPort, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1401 := *v + yyh1401, yyl1401 := z.DecSliceHelperStart() + var yyc1401 bool + if yyl1401 == 0 { + if yyv1401 == nil { + yyv1401 = []NetworkPolicyPort{} + yyc1401 = true + } else if len(yyv1401) != 0 { + yyv1401 = yyv1401[:0] + yyc1401 = true + } + } else if yyl1401 > 0 { + var yyrr1401, yyrl1401 int + var yyrt1401 bool + if yyl1401 > cap(yyv1401) { + + yyrg1401 := len(yyv1401) > 0 + yyv21401 := yyv1401 + yyrl1401, yyrt1401 = z.DecInferLen(yyl1401, z.DecBasicHandle().MaxInitLen, 16) + if yyrt1401 { + if yyrl1401 <= cap(yyv1401) { + yyv1401 = yyv1401[:yyrl1401] + } else { + yyv1401 = make([]NetworkPolicyPort, yyrl1401) + } + } else { + yyv1401 = make([]NetworkPolicyPort, yyrl1401) + } + yyc1401 = true + yyrr1401 = len(yyv1401) + if yyrg1401 { + copy(yyv1401, yyv21401) + } + } else if yyl1401 != len(yyv1401) { + yyv1401 = yyv1401[:yyl1401] + yyc1401 = true + } + yyj1401 := 0 + for ; yyj1401 < yyrr1401; yyj1401++ { + yyh1401.ElemContainerState(yyj1401) + if r.TryDecodeAsNil() { + yyv1401[yyj1401] = NetworkPolicyPort{} + } else { + yyv1402 := &yyv1401[yyj1401] + yyv1402.CodecDecodeSelf(d) + } + + } + if yyrt1401 { + for ; yyj1401 < yyl1401; yyj1401++ { + yyv1401 = append(yyv1401, NetworkPolicyPort{}) + yyh1401.ElemContainerState(yyj1401) + if r.TryDecodeAsNil() { + yyv1401[yyj1401] = NetworkPolicyPort{} + } else { + yyv1403 := &yyv1401[yyj1401] + yyv1403.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1401 := 0 + for ; !r.CheckBreak(); yyj1401++ { + + if yyj1401 >= len(yyv1401) { + yyv1401 = append(yyv1401, NetworkPolicyPort{}) // var yyz1401 NetworkPolicyPort + yyc1401 = true + } + yyh1401.ElemContainerState(yyj1401) + if yyj1401 < len(yyv1401) { + if r.TryDecodeAsNil() { + yyv1401[yyj1401] = NetworkPolicyPort{} + } else { + yyv1404 := &yyv1401[yyj1401] + yyv1404.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1401 < len(yyv1401) { + yyv1401 = yyv1401[:yyj1401] + yyc1401 = true + } else if yyj1401 == 0 && yyv1401 == nil { + yyv1401 = []NetworkPolicyPort{} + yyc1401 = true + } + } + yyh1401.End() + if yyc1401 { + *v = yyv1401 + } +} + +func (x codecSelfer1234) encSliceNetworkPolicyPeer(v []NetworkPolicyPeer, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1405 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1406 := &yyv1405 + yy1406.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNetworkPolicyPeer(v *[]NetworkPolicyPeer, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1407 := *v + yyh1407, yyl1407 := z.DecSliceHelperStart() + var yyc1407 bool + if yyl1407 == 0 { + if yyv1407 == nil { + yyv1407 = []NetworkPolicyPeer{} + yyc1407 = true + } else if len(yyv1407) != 0 { + yyv1407 = yyv1407[:0] + yyc1407 = true + } + } else if yyl1407 > 0 { + var yyrr1407, yyrl1407 int + var yyrt1407 bool + if yyl1407 > cap(yyv1407) { + + yyrg1407 := len(yyv1407) > 0 + yyv21407 := yyv1407 + yyrl1407, yyrt1407 = z.DecInferLen(yyl1407, z.DecBasicHandle().MaxInitLen, 16) + if yyrt1407 { + if yyrl1407 <= cap(yyv1407) { + yyv1407 = yyv1407[:yyrl1407] + } else { + yyv1407 = make([]NetworkPolicyPeer, yyrl1407) + } + } else { + yyv1407 = make([]NetworkPolicyPeer, yyrl1407) + } + yyc1407 = true + yyrr1407 = len(yyv1407) + if yyrg1407 { + copy(yyv1407, yyv21407) + } + } else if yyl1407 != len(yyv1407) { + yyv1407 = yyv1407[:yyl1407] + yyc1407 = true + } + yyj1407 := 0 + for ; yyj1407 < yyrr1407; yyj1407++ { + yyh1407.ElemContainerState(yyj1407) + if r.TryDecodeAsNil() { + yyv1407[yyj1407] = NetworkPolicyPeer{} + } else { + yyv1408 := &yyv1407[yyj1407] + yyv1408.CodecDecodeSelf(d) + } + + } + if yyrt1407 { + for ; yyj1407 < yyl1407; yyj1407++ { + yyv1407 = append(yyv1407, NetworkPolicyPeer{}) + yyh1407.ElemContainerState(yyj1407) + if r.TryDecodeAsNil() { + yyv1407[yyj1407] = NetworkPolicyPeer{} + } else { + yyv1409 := &yyv1407[yyj1407] + yyv1409.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1407 := 0 + for ; !r.CheckBreak(); yyj1407++ { + + if yyj1407 >= len(yyv1407) { + yyv1407 = append(yyv1407, NetworkPolicyPeer{}) // var yyz1407 NetworkPolicyPeer + yyc1407 = true + } + yyh1407.ElemContainerState(yyj1407) + if yyj1407 < len(yyv1407) { + if r.TryDecodeAsNil() { + yyv1407[yyj1407] = NetworkPolicyPeer{} + } else { + yyv1410 := &yyv1407[yyj1407] + yyv1410.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1407 < len(yyv1407) { + yyv1407 = yyv1407[:yyj1407] + yyc1407 = true + } else if yyj1407 == 0 && yyv1407 == nil { + yyv1407 = []NetworkPolicyPeer{} + yyc1407 = true + } + } + yyh1407.End() + if yyc1407 { + *v = yyv1407 + } +} + +func (x codecSelfer1234) encSliceNetworkPolicy(v []NetworkPolicy, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1411 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yy1412 := &yyv1411 + yy1412.CodecEncodeSelf(e) + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSliceNetworkPolicy(v *[]NetworkPolicy, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1413 := *v + yyh1413, yyl1413 := z.DecSliceHelperStart() + var yyc1413 bool + if yyl1413 == 0 { + if yyv1413 == nil { + yyv1413 = []NetworkPolicy{} + yyc1413 = true + } else if len(yyv1413) != 0 { + yyv1413 = yyv1413[:0] + yyc1413 = true + } + } else if yyl1413 > 0 { + var yyrr1413, yyrl1413 int + var yyrt1413 bool + if yyl1413 > cap(yyv1413) { + + yyrg1413 := len(yyv1413) > 0 + yyv21413 := yyv1413 + yyrl1413, yyrt1413 = z.DecInferLen(yyl1413, z.DecBasicHandle().MaxInitLen, 312) + if yyrt1413 { + if yyrl1413 <= cap(yyv1413) { + yyv1413 = yyv1413[:yyrl1413] + } else { + yyv1413 = make([]NetworkPolicy, yyrl1413) + } + } else { + yyv1413 = make([]NetworkPolicy, yyrl1413) + } + yyc1413 = true + yyrr1413 = len(yyv1413) + if yyrg1413 { + copy(yyv1413, yyv21413) + } + } else if yyl1413 != len(yyv1413) { + yyv1413 = yyv1413[:yyl1413] + yyc1413 = true + } + yyj1413 := 0 + for ; yyj1413 < yyrr1413; yyj1413++ { + yyh1413.ElemContainerState(yyj1413) + if r.TryDecodeAsNil() { + yyv1413[yyj1413] = NetworkPolicy{} + } else { + yyv1414 := &yyv1413[yyj1413] + yyv1414.CodecDecodeSelf(d) + } + + } + if yyrt1413 { + for ; yyj1413 < yyl1413; yyj1413++ { + yyv1413 = append(yyv1413, NetworkPolicy{}) + yyh1413.ElemContainerState(yyj1413) + if r.TryDecodeAsNil() { + yyv1413[yyj1413] = NetworkPolicy{} + } else { + yyv1415 := &yyv1413[yyj1413] + yyv1415.CodecDecodeSelf(d) + } + + } + } + + } else { + yyj1413 := 0 + for ; !r.CheckBreak(); yyj1413++ { + + if yyj1413 >= len(yyv1413) { + yyv1413 = append(yyv1413, NetworkPolicy{}) // var yyz1413 NetworkPolicy + yyc1413 = true + } + yyh1413.ElemContainerState(yyj1413) + if yyj1413 < len(yyv1413) { + if r.TryDecodeAsNil() { + yyv1413[yyj1413] = NetworkPolicy{} + } else { + yyv1416 := &yyv1413[yyj1413] + yyv1416.CodecDecodeSelf(d) + } + + } else { + z.DecSwallow() + } + + } + if yyj1413 < len(yyv1413) { + yyv1413 = yyv1413[:yyj1413] + yyc1413 = true + } else if yyj1413 == 0 && yyv1413 == nil { + yyv1413 = []NetworkPolicy{} + yyc1413 = true + } + } + yyh1413.End() + if yyc1413 { + *v = yyv1413 + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/types.go b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/types.go new file mode 100644 index 00000000..864e349b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/types.go @@ -0,0 +1,913 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +/* +This file (together with pkg/apis/extensions/v1beta1/types.go) contain the experimental +types in kubernetes. These API objects are experimental, meaning that the +APIs may be broken at any time by the kubernetes team. + +DISCLAIMER: The implementation of the experimental API group itself is +a temporary one meant as a stopgap solution until kubernetes has proper +support for multiple API groups. The transition may require changes +beyond registration differences. In other words, experimental API group +support is experimental. +*/ + +package extensions + +import ( + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/resource" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/util/intstr" +) + +const ( + // SysctlsPodSecurityPolicyAnnotationKey represents the key of a whitelist of + // allowed safe and unsafe sysctls in a pod spec. It's a comma-separated list of plain sysctl + // names or sysctl patterns (which end in *). The string "*" matches all sysctls. + SysctlsPodSecurityPolicyAnnotationKey string = "security.alpha.kubernetes.io/sysctls" +) + +// describes the attributes of a scale subresource +type ScaleSpec struct { + // desired number of instances for the scaled object. + Replicas int32 `json:"replicas,omitempty"` +} + +// represents the current status of a scale subresource. +type ScaleStatus struct { + // actual number of observed instances of the scaled object. + Replicas int32 `json:"replicas"` + + // label query over pods that should match the replicas count. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors + Selector *unversioned.LabelSelector `json:"selector,omitempty"` +} + +// +genclient=true +// +noMethods=true + +// represents a scaling request for a resource. +type Scale struct { + unversioned.TypeMeta `json:",inline"` + // Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata. + api.ObjectMeta `json:"metadata,omitempty"` + + // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. + Spec ScaleSpec `json:"spec,omitempty"` + + // current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only. + Status ScaleStatus `json:"status,omitempty"` +} + +// Dummy definition +type ReplicationControllerDummy struct { + unversioned.TypeMeta `json:",inline"` +} + +// Alpha-level support for Custom Metrics in HPA (as annotations). +type CustomMetricTarget struct { + // Custom Metric name. + Name string `json:"name"` + // Custom Metric value (average). + TargetValue resource.Quantity `json:"value"` +} + +type CustomMetricTargetList struct { + Items []CustomMetricTarget `json:"items"` +} + +type CustomMetricCurrentStatus struct { + // Custom Metric name. + Name string `json:"name"` + // Custom Metric value (average). + CurrentValue resource.Quantity `json:"value"` +} + +type CustomMetricCurrentStatusList struct { + Items []CustomMetricCurrentStatus `json:"items"` +} + +// +genclient=true +// +nonNamespaced=true + +// A ThirdPartyResource is a generic representation of a resource, it is used by add-ons and plugins to add new resource +// types to the API. It consists of one or more Versions of the api. +type ThirdPartyResource struct { + unversioned.TypeMeta `json:",inline"` + + // Standard object metadata + api.ObjectMeta `json:"metadata,omitempty"` + + // Description is the description of this object. + Description string `json:"description,omitempty"` + + // Versions are versions for this third party object + Versions []APIVersion `json:"versions,omitempty"` +} + +type ThirdPartyResourceList struct { + unversioned.TypeMeta `json:",inline"` + + // Standard list metadata. + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is the list of horizontal pod autoscalers. + Items []ThirdPartyResource `json:"items"` +} + +// An APIVersion represents a single concrete version of an object model. +// TODO: we should consider merge this struct with GroupVersion in unversioned.go +type APIVersion struct { + // Name of this version (e.g. 'v1'). + Name string `json:"name,omitempty"` +} + +// An internal object, used for versioned storage in etcd. Not exposed to the end user. +type ThirdPartyResourceData struct { + unversioned.TypeMeta `json:",inline"` + // Standard object metadata. + api.ObjectMeta `json:"metadata,omitempty"` + + // Data is the raw JSON data for this data. + Data []byte `json:"data,omitempty"` +} + +// +genclient=true + +type Deployment struct { + unversioned.TypeMeta `json:",inline"` + api.ObjectMeta `json:"metadata,omitempty"` + + // Specification of the desired behavior of the Deployment. + Spec DeploymentSpec `json:"spec,omitempty"` + + // Most recently observed status of the Deployment. + Status DeploymentStatus `json:"status,omitempty"` +} + +type DeploymentSpec struct { + // Number of desired pods. This is a pointer to distinguish between explicit + // zero and not specified. Defaults to 1. + Replicas int32 `json:"replicas,omitempty"` + + // Label selector for pods. Existing ReplicaSets whose pods are + // selected by this will be the ones affected by this deployment. + Selector *unversioned.LabelSelector `json:"selector,omitempty"` + + // Template describes the pods that will be created. + Template api.PodTemplateSpec `json:"template"` + + // The deployment strategy to use to replace existing pods with new ones. + Strategy DeploymentStrategy `json:"strategy,omitempty"` + + // Minimum number of seconds for which a newly created pod should be ready + // without any of its container crashing, for it to be considered available. + // Defaults to 0 (pod will be considered available as soon as it is ready) + MinReadySeconds int32 `json:"minReadySeconds,omitempty"` + + // The number of old ReplicaSets to retain to allow rollback. + // This is a pointer to distinguish between explicit zero and not specified. + RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty"` + + // Indicates that the deployment is paused and will not be processed by the + // deployment controller. + Paused bool `json:"paused,omitempty"` + // The config this deployment is rolling back to. Will be cleared after rollback is done. + RollbackTo *RollbackConfig `json:"rollbackTo,omitempty"` +} + +// DeploymentRollback stores the information required to rollback a deployment. +type DeploymentRollback struct { + unversioned.TypeMeta `json:",inline"` + // Required: This must match the Name of a deployment. + Name string `json:"name"` + // The annotations to be updated to a deployment + UpdatedAnnotations map[string]string `json:"updatedAnnotations,omitempty"` + // The config of this deployment rollback. + RollbackTo RollbackConfig `json:"rollbackTo"` +} + +type RollbackConfig struct { + // The revision to rollback to. If set to 0, rollbck to the last revision. + Revision int64 `json:"revision,omitempty"` +} + +const ( + // DefaultDeploymentUniqueLabelKey is the default key of the selector that is added + // to existing RCs (and label key that is added to its pods) to prevent the existing RCs + // to select new pods (and old pods being select by new RC). + DefaultDeploymentUniqueLabelKey string = "pod-template-hash" +) + +type DeploymentStrategy struct { + // Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. + Type DeploymentStrategyType `json:"type,omitempty"` + + // Rolling update config params. Present only if DeploymentStrategyType = + // RollingUpdate. + //--- + // TODO: Update this to follow our convention for oneOf, whatever we decide it + // to be. + RollingUpdate *RollingUpdateDeployment `json:"rollingUpdate,omitempty"` +} + +type DeploymentStrategyType string + +const ( + // Kill all existing pods before creating new ones. + RecreateDeploymentStrategyType DeploymentStrategyType = "Recreate" + + // Replace the old RCs by new one using rolling update i.e gradually scale down the old RCs and scale up the new one. + RollingUpdateDeploymentStrategyType DeploymentStrategyType = "RollingUpdate" +) + +// Spec to control the desired behavior of rolling update. +type RollingUpdateDeployment struct { + // The maximum number of pods that can be unavailable during the update. + // Value can be an absolute number (ex: 5) or a percentage of total pods at the start of update (ex: 10%). + // Absolute number is calculated from percentage by rounding up. + // This can not be 0 if MaxSurge is 0. + // By default, a fixed value of 1 is used. + // Example: when this is set to 30%, the old RC can be scaled down by 30% + // immediately when the rolling update starts. Once new pods are ready, old RC + // can be scaled down further, followed by scaling up the new RC, ensuring + // that at least 70% of original number of pods are available at all times + // during the update. + MaxUnavailable intstr.IntOrString `json:"maxUnavailable,omitempty"` + + // The maximum number of pods that can be scheduled above the original number of + // pods. + // Value can be an absolute number (ex: 5) or a percentage of total pods at + // the start of the update (ex: 10%). This can not be 0 if MaxUnavailable is 0. + // Absolute number is calculated from percentage by rounding up. + // By default, a value of 1 is used. + // Example: when this is set to 30%, the new RC can be scaled up by 30% + // immediately when the rolling update starts. Once old pods have been killed, + // new RC can be scaled up further, ensuring that total number of pods running + // at any time during the update is atmost 130% of original pods. + MaxSurge intstr.IntOrString `json:"maxSurge,omitempty"` +} + +type DeploymentStatus struct { + // The generation observed by the deployment controller. + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + + // Total number of non-terminated pods targeted by this deployment (their labels match the selector). + Replicas int32 `json:"replicas,omitempty"` + + // Total number of non-terminated pods targeted by this deployment that have the desired template spec. + UpdatedReplicas int32 `json:"updatedReplicas,omitempty"` + + // Total number of available pods (ready for at least minReadySeconds) targeted by this deployment. + AvailableReplicas int32 `json:"availableReplicas,omitempty"` + + // Total number of unavailable pods targeted by this deployment. + UnavailableReplicas int32 `json:"unavailableReplicas,omitempty"` +} + +type DeploymentList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is the list of deployments. + Items []Deployment `json:"items"` +} + +// TODO(madhusudancs): Uncomment while implementing DaemonSet updates. +/* Commenting out for v1.2. We are planning to bring these types back with a more robust DaemonSet update implementation in v1.3, hence not deleting but just commenting the types out. +type DaemonSetUpdateStrategy struct { + // Type of daemon set update. Only "RollingUpdate" is supported at this time. Default is RollingUpdate. + Type DaemonSetUpdateStrategyType `json:"type,omitempty"` + + // Rolling update config params. Present only if DaemonSetUpdateStrategy = + // RollingUpdate. + //--- + // TODO: Update this to follow our convention for oneOf, whatever we decide it + // to be. Same as DeploymentStrategy.RollingUpdate. + RollingUpdate *RollingUpdateDaemonSet `json:"rollingUpdate,omitempty"` +} + +type DaemonSetUpdateStrategyType string + +const ( + // Replace the old daemons by new ones using rolling update i.e replace them on each node one after the other. + RollingUpdateDaemonSetStrategyType DaemonSetUpdateStrategyType = "RollingUpdate" +) + +// Spec to control the desired behavior of daemon set rolling update. +type RollingUpdateDaemonSet struct { + // The maximum number of DaemonSet pods that can be unavailable during the + // update. Value can be an absolute number (ex: 5) or a percentage of total + // number of DaemonSet pods at the start of the update (ex: 10%). Absolute + // number is calculated from percentage by rounding up. + // This cannot be 0. + // Default value is 1. + // Example: when this is set to 30%, 30% of the currently running DaemonSet + // pods can be stopped for an update at any given time. The update starts + // by stopping at most 30% of the currently running DaemonSet pods and then + // brings up new DaemonSet pods in their place. Once the new pods are ready, + // it then proceeds onto other DaemonSet pods, thus ensuring that at least + // 70% of original number of DaemonSet pods are available at all times + // during the update. + MaxUnavailable intstr.IntOrString `json:"maxUnavailable,omitempty"` + + // Minimum number of seconds for which a newly created DaemonSet pod should + // be ready without any of its container crashing, for it to be considered + // available. Defaults to 0 (pod will be considered available as soon as it + // is ready). + MinReadySeconds int `json:"minReadySeconds,omitempty"` +} +*/ + +// DaemonSetSpec is the specification of a daemon set. +type DaemonSetSpec struct { + // Selector is a label query over pods that are managed by the daemon set. + // Must match in order to be controlled. + // If empty, defaulted to labels on Pod template. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors + Selector *unversioned.LabelSelector `json:"selector,omitempty"` + + // Template is the object that describes the pod that will be created. + // The DaemonSet will create exactly one copy of this pod on every node + // that matches the template's node selector (or on every node if no node + // selector is specified). + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template + Template api.PodTemplateSpec `json:"template"` + + // TODO(madhusudancs): Uncomment while implementing DaemonSet updates. + /* Commenting out for v1.2. We are planning to bring these fields back with a more robust DaemonSet update implementation in v1.3, hence not deleting but just commenting these fields out. + // Update strategy to replace existing DaemonSet pods with new pods. + UpdateStrategy DaemonSetUpdateStrategy `json:"updateStrategy,omitempty"` + + // Label key that is added to DaemonSet pods to distinguish between old and + // new pod templates during DaemonSet update. + // Users can set this to an empty string to indicate that the system should + // not add any label. If unspecified, system uses + // DefaultDaemonSetUniqueLabelKey("daemonset.kubernetes.io/podTemplateHash"). + // Value of this key is hash of DaemonSetSpec.PodTemplateSpec. + // No label is added if this is set to empty string. + UniqueLabelKey string `json:"uniqueLabelKey,omitempty"` + */ +} + +const ( + // DefaultDaemonSetUniqueLabelKey is the default key of the labels that is added + // to daemon set pods to distinguish between old and new pod templates during + // DaemonSet update. See DaemonSetSpec's UniqueLabelKey field for more information. + DefaultDaemonSetUniqueLabelKey string = "daemonset.kubernetes.io/podTemplateHash" +) + +// DaemonSetStatus represents the current status of a daemon set. +type DaemonSetStatus struct { + // CurrentNumberScheduled is the number of nodes that are running at least 1 + // daemon pod and are supposed to run the daemon pod. + CurrentNumberScheduled int32 `json:"currentNumberScheduled"` + + // NumberMisscheduled is the number of nodes that are running the daemon pod, but are + // not supposed to run the daemon pod. + NumberMisscheduled int32 `json:"numberMisscheduled"` + + // DesiredNumberScheduled is the total number of nodes that should be running the daemon + // pod (including nodes correctly running the daemon pod). + DesiredNumberScheduled int32 `json:"desiredNumberScheduled"` +} + +// +genclient=true + +// DaemonSet represents the configuration of a daemon set. +type DaemonSet struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + api.ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the desired behavior of this daemon set. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec DaemonSetSpec `json:"spec,omitempty"` + + // Status is the current status of this daemon set. This data may be + // out of date by some window of time. + // Populated by the system. + // Read-only. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status DaemonSetStatus `json:"status,omitempty"` +} + +// DaemonSetList is a collection of daemon sets. +type DaemonSetList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is a list of daemon sets. + Items []DaemonSet `json:"items"` +} + +type ThirdPartyResourceDataList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + unversioned.ListMeta `json:"metadata,omitempty"` + // Items is a list of third party objects + Items []ThirdPartyResourceData `json:"items"` +} + +// +genclient=true + +// Ingress is a collection of rules that allow inbound connections to reach the +// endpoints defined by a backend. An Ingress can be configured to give services +// externally-reachable urls, load balance traffic, terminate SSL, offer name +// based virtual hosting etc. +type Ingress struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + api.ObjectMeta `json:"metadata,omitempty"` + + // Spec is the desired state of the Ingress. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Spec IngressSpec `json:"spec,omitempty"` + + // Status is the current state of the Ingress. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status + Status IngressStatus `json:"status,omitempty"` +} + +// IngressList is a collection of Ingress. +type IngressList struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is the list of Ingress. + Items []Ingress `json:"items"` +} + +// IngressSpec describes the Ingress the user wishes to exist. +type IngressSpec struct { + // A default backend capable of servicing requests that don't match any + // rule. At least one of 'backend' or 'rules' must be specified. This field + // is optional to allow the loadbalancer controller or defaulting logic to + // specify a global default. + Backend *IngressBackend `json:"backend,omitempty"` + + // TLS configuration. Currently the Ingress only supports a single TLS + // port, 443. If multiple members of this list specify different hosts, they + // will be multiplexed on the same port according to the hostname specified + // through the SNI TLS extension, if the ingress controller fulfilling the + // ingress supports SNI. + TLS []IngressTLS `json:"tls,omitempty"` + + // A list of host rules used to configure the Ingress. If unspecified, or + // no rule matches, all traffic is sent to the default backend. + Rules []IngressRule `json:"rules,omitempty"` + // TODO: Add the ability to specify load-balancer IP through claims +} + +// IngressTLS describes the transport layer security associated with an Ingress. +type IngressTLS struct { + // Hosts are a list of hosts included in the TLS certificate. The values in + // this list must match the name/s used in the tlsSecret. Defaults to the + // wildcard host setting for the loadbalancer controller fulfilling this + // Ingress, if left unspecified. + Hosts []string `json:"hosts,omitempty"` + // SecretName is the name of the secret used to terminate SSL traffic on 443. + // Field is left optional to allow SSL routing based on SNI hostname alone. + // If the SNI host in a listener conflicts with the "Host" header field used + // by an IngressRule, the SNI host is used for termination and value of the + // Host header is used for routing. + SecretName string `json:"secretName,omitempty"` + // TODO: Consider specifying different modes of termination, protocols etc. +} + +// IngressStatus describe the current state of the Ingress. +type IngressStatus struct { + // LoadBalancer contains the current status of the load-balancer. + LoadBalancer api.LoadBalancerStatus `json:"loadBalancer,omitempty"` +} + +// IngressRule represents the rules mapping the paths under a specified host to +// the related backend services. Incoming requests are first evaluated for a host +// match, then routed to the backend associated with the matching IngressRuleValue. +type IngressRule struct { + // Host is the fully qualified domain name of a network host, as defined + // by RFC 3986. Note the following deviations from the "host" part of the + // URI as defined in the RFC: + // 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the + // IP in the Spec of the parent Ingress. + // 2. The `:` delimiter is not respected because ports are not allowed. + // Currently the port of an Ingress is implicitly :80 for http and + // :443 for https. + // Both these may change in the future. + // Incoming requests are matched against the host before the IngressRuleValue. + // If the host is unspecified, the Ingress routes all traffic based on the + // specified IngressRuleValue. + Host string `json:"host,omitempty"` + // IngressRuleValue represents a rule to route requests for this IngressRule. + // If unspecified, the rule defaults to a http catch-all. Whether that sends + // just traffic matching the host to the default backend or all traffic to the + // default backend, is left to the controller fulfilling the Ingress. Http is + // currently the only supported IngressRuleValue. + IngressRuleValue `json:",inline,omitempty"` +} + +// IngressRuleValue represents a rule to apply against incoming requests. If the +// rule is satisfied, the request is routed to the specified backend. Currently +// mixing different types of rules in a single Ingress is disallowed, so exactly +// one of the following must be set. +type IngressRuleValue struct { + //TODO: + // 1. Consider renaming this resource and the associated rules so they + // aren't tied to Ingress. They can be used to route intra-cluster traffic. + // 2. Consider adding fields for ingress-type specific global options + // usable by a loadbalancer, like http keep-alive. + + HTTP *HTTPIngressRuleValue `json:"http,omitempty"` +} + +// HTTPIngressRuleValue is a list of http selectors pointing to backends. +// In the example: http:///? -> backend where +// where parts of the url correspond to RFC 3986, this resource will be used +// to match against everything after the last '/' and before the first '?' +// or '#'. +type HTTPIngressRuleValue struct { + // A collection of paths that map requests to backends. + Paths []HTTPIngressPath `json:"paths"` + // TODO: Consider adding fields for ingress-type specific global + // options usable by a loadbalancer, like http keep-alive. +} + +// HTTPIngressPath associates a path regex with a backend. Incoming urls matching +// the path are forwarded to the backend. +type HTTPIngressPath struct { + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, + // (i.e this follows the egrep/unix syntax, not the perl syntax) + // matched against the path of an incoming request. Currently it can + // contain characters disallowed from the conventional "path" + // part of a URL as defined by RFC 3986. Paths must begin with + // a '/'. If unspecified, the path defaults to a catch all sending + // traffic to the backend. + Path string `json:"path,omitempty"` + + // Backend defines the referenced service endpoint to which the traffic + // will be forwarded to. + Backend IngressBackend `json:"backend"` +} + +// IngressBackend describes all endpoints for a given service and port. +type IngressBackend struct { + // Specifies the name of the referenced service. + ServiceName string `json:"serviceName"` + + // Specifies the port of the referenced service. + ServicePort intstr.IntOrString `json:"servicePort"` +} + +// +genclient=true + +// ReplicaSet represents the configuration of a replica set. +type ReplicaSet struct { + unversioned.TypeMeta `json:",inline"` + api.ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the desired behavior of this ReplicaSet. + Spec ReplicaSetSpec `json:"spec,omitempty"` + + // Status is the current status of this ReplicaSet. This data may be + // out of date by some window of time. + Status ReplicaSetStatus `json:"status,omitempty"` +} + +// ReplicaSetList is a collection of ReplicaSets. +type ReplicaSetList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []ReplicaSet `json:"items"` +} + +// ReplicaSetSpec is the specification of a ReplicaSet. +// As the internal representation of a ReplicaSet, it must have +// a Template set. +type ReplicaSetSpec struct { + // Replicas is the number of desired replicas. + Replicas int32 `json:"replicas"` + + // Selector is a label query over pods that should match the replica count. + // Must match in order to be controlled. + // If empty, defaulted to labels on pod template. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors + Selector *unversioned.LabelSelector `json:"selector,omitempty"` + + // Template is the object that describes the pod that will be created if + // insufficient replicas are detected. + Template api.PodTemplateSpec `json:"template,omitempty"` +} + +// ReplicaSetStatus represents the current status of a ReplicaSet. +type ReplicaSetStatus struct { + // Replicas is the number of actual replicas. + Replicas int32 `json:"replicas"` + + // The number of pods that have labels matching the labels of the pod template of the replicaset. + FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty"` + + // The number of ready replicas for this replica set. + ReadyReplicas int32 `json:"readyReplicas,omitempty"` + + // ObservedGeneration is the most recent generation observed by the controller. + ObservedGeneration int64 `json:"observedGeneration,omitempty"` +} + +// +genclient=true +// +nonNamespaced=true + +// PodSecurityPolicy governs the ability to make requests that affect the SecurityContext +// that will be applied to a pod and container. +type PodSecurityPolicy struct { + unversioned.TypeMeta `json:",inline"` + api.ObjectMeta `json:"metadata,omitempty"` + + // Spec defines the policy enforced. + Spec PodSecurityPolicySpec `json:"spec,omitempty"` +} + +// PodSecurityPolicySpec defines the policy enforced. +type PodSecurityPolicySpec struct { + // Privileged determines if a pod can request to be run as privileged. + Privileged bool `json:"privileged,omitempty"` + // DefaultAddCapabilities is the default set of capabilities that will be added to the container + // unless the pod spec specifically drops the capability. You may not list a capability in both + // DefaultAddCapabilities and RequiredDropCapabilities. + DefaultAddCapabilities []api.Capability `json:"defaultAddCapabilities,omitempty"` + // RequiredDropCapabilities are the capabilities that will be dropped from the container. These + // are required to be dropped and cannot be added. + RequiredDropCapabilities []api.Capability `json:"requiredDropCapabilities,omitempty"` + // AllowedCapabilities is a list of capabilities that can be requested to add to the container. + // Capabilities in this field may be added at the pod author's discretion. + // You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. + AllowedCapabilities []api.Capability `json:"allowedCapabilities,omitempty"` + // Volumes is a white list of allowed volume plugins. Empty indicates that all plugins + // may be used. + Volumes []FSType `json:"volumes,omitempty"` + // HostNetwork determines if the policy allows the use of HostNetwork in the pod spec. + HostNetwork bool `json:"hostNetwork,omitempty"` + // HostPorts determines which host port ranges are allowed to be exposed. + HostPorts []HostPortRange `json:"hostPorts,omitempty"` + // HostPID determines if the policy allows the use of HostPID in the pod spec. + HostPID bool `json:"hostPID,omitempty"` + // HostIPC determines if the policy allows the use of HostIPC in the pod spec. + HostIPC bool `json:"hostIPC,omitempty"` + // SELinux is the strategy that will dictate the allowable labels that may be set. + SELinux SELinuxStrategyOptions `json:"seLinux"` + // RunAsUser is the strategy that will dictate the allowable RunAsUser values that may be set. + RunAsUser RunAsUserStrategyOptions `json:"runAsUser"` + // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. + SupplementalGroups SupplementalGroupsStrategyOptions `json:"supplementalGroups"` + // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext. + FSGroup FSGroupStrategyOptions `json:"fsGroup"` + // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file + // system. If the container specifically requests to run with a non-read only root file system + // the PSP should deny the pod. + // If set to false the container may run with a read only root file system if it wishes but it + // will not be forced to. + ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem,omitempty"` +} + +// HostPortRange defines a range of host ports that will be enabled by a policy +// for pods to use. It requires both the start and end to be defined. +type HostPortRange struct { + // Min is the start of the range, inclusive. + Min int `json:"min"` + // Max is the end of the range, inclusive. + Max int `json:"max"` +} + +// FSType gives strong typing to different file systems that are used by volumes. +type FSType string + +var ( + AzureFile FSType = "azureFile" + Flocker FSType = "flocker" + FlexVolume FSType = "flexVolume" + HostPath FSType = "hostPath" + EmptyDir FSType = "emptyDir" + GCEPersistentDisk FSType = "gcePersistentDisk" + AWSElasticBlockStore FSType = "awsElasticBlockStore" + GitRepo FSType = "gitRepo" + Secret FSType = "secret" + NFS FSType = "nfs" + ISCSI FSType = "iscsi" + Glusterfs FSType = "glusterfs" + PersistentVolumeClaim FSType = "persistentVolumeClaim" + RBD FSType = "rbd" + Cinder FSType = "cinder" + CephFS FSType = "cephFS" + DownwardAPI FSType = "downwardAPI" + FC FSType = "fc" + ConfigMap FSType = "configMap" + VsphereVolume FSType = "vsphereVolume" + Quobyte FSType = "quobyte" + AzureDisk FSType = "azureDisk" + All FSType = "*" +) + +// SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. +type SELinuxStrategyOptions struct { + // Rule is the strategy that will dictate the allowable labels that may be set. + Rule SELinuxStrategy `json:"rule"` + // seLinuxOptions required to run as; required for MustRunAs + // More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md#security-context + SELinuxOptions *api.SELinuxOptions `json:"seLinuxOptions,omitempty"` +} + +// SELinuxStrategy denotes strategy types for generating SELinux options for a +// Security. +type SELinuxStrategy string + +const ( + // container must have SELinux labels of X applied. + SELinuxStrategyMustRunAs SELinuxStrategy = "MustRunAs" + // container may make requests for any SELinux context labels. + SELinuxStrategyRunAsAny SELinuxStrategy = "RunAsAny" +) + +// RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. +type RunAsUserStrategyOptions struct { + // Rule is the strategy that will dictate the allowable RunAsUser values that may be set. + Rule RunAsUserStrategy `json:"rule"` + // Ranges are the allowed ranges of uids that may be used. + Ranges []IDRange `json:"ranges,omitempty"` +} + +// IDRange provides a min/max of an allowed range of IDs. +type IDRange struct { + // Min is the start of the range, inclusive. + Min int64 `json:"min"` + // Max is the end of the range, inclusive. + Max int64 `json:"max"` +} + +// RunAsUserStrategy denotes strategy types for generating RunAsUser values for a +// SecurityContext. +type RunAsUserStrategy string + +const ( + // container must run as a particular uid. + RunAsUserStrategyMustRunAs RunAsUserStrategy = "MustRunAs" + // container must run as a non-root uid + RunAsUserStrategyMustRunAsNonRoot RunAsUserStrategy = "MustRunAsNonRoot" + // container may make requests for any uid. + RunAsUserStrategyRunAsAny RunAsUserStrategy = "RunAsAny" +) + +// FSGroupStrategyOptions defines the strategy type and options used to create the strategy. +type FSGroupStrategyOptions struct { + // Rule is the strategy that will dictate what FSGroup is used in the SecurityContext. + Rule FSGroupStrategyType `json:"rule,omitempty"` + // Ranges are the allowed ranges of fs groups. If you would like to force a single + // fs group then supply a single range with the same start and end. + Ranges []IDRange `json:"ranges,omitempty"` +} + +// FSGroupStrategyType denotes strategy types for generating FSGroup values for a +// SecurityContext +type FSGroupStrategyType string + +const ( + // container must have FSGroup of X applied. + FSGroupStrategyMustRunAs FSGroupStrategyType = "MustRunAs" + // container may make requests for any FSGroup labels. + FSGroupStrategyRunAsAny FSGroupStrategyType = "RunAsAny" +) + +// SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. +type SupplementalGroupsStrategyOptions struct { + // Rule is the strategy that will dictate what supplemental groups is used in the SecurityContext. + Rule SupplementalGroupsStrategyType `json:"rule,omitempty"` + // Ranges are the allowed ranges of supplemental groups. If you would like to force a single + // supplemental group then supply a single range with the same start and end. + Ranges []IDRange `json:"ranges,omitempty"` +} + +// SupplementalGroupsStrategyType denotes strategy types for determining valid supplemental +// groups for a SecurityContext. +type SupplementalGroupsStrategyType string + +const ( + // container must run as a particular gid. + SupplementalGroupsStrategyMustRunAs SupplementalGroupsStrategyType = "MustRunAs" + // container may make requests for any gid. + SupplementalGroupsStrategyRunAsAny SupplementalGroupsStrategyType = "RunAsAny" +) + +// PodSecurityPolicyList is a list of PodSecurityPolicy objects. +type PodSecurityPolicyList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []PodSecurityPolicy `json:"items"` +} + +type NetworkPolicy struct { + unversioned.TypeMeta `json:",inline"` + api.ObjectMeta `json:"metadata,omitempty"` + + // Specification of the desired behavior for this NetworkPolicy. + Spec NetworkPolicySpec `json:"spec,omitempty"` +} + +type NetworkPolicySpec struct { + // Selects the pods to which this NetworkPolicy object applies. The array of ingress rules + // is applied to any pods selected by this field. Multiple network policies can select the + // same set of pods. In this case, the ingress rules for each are combined additively. + // This field is NOT optional and follows standard label selector semantics. + // An empty podSelector matches all pods in this namespace. + PodSelector unversioned.LabelSelector `json:"podSelector"` + + // List of ingress rules to be applied to the selected pods. + // Traffic is allowed to a pod if namespace.networkPolicy.ingress.isolation is undefined and cluster policy allows it, + // OR if the traffic source is the pod's local node, + // OR if the traffic matches at least one ingress rule across all of the NetworkPolicy + // objects whose podSelector matches the pod. + // If this field is empty then this NetworkPolicy does not affect ingress isolation. + // If this field is present and contains at least one rule, this policy allows any traffic + // which matches at least one of the ingress rules in this list. + Ingress []NetworkPolicyIngressRule `json:"ingress,omitempty"` +} + +// This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from. +type NetworkPolicyIngressRule struct { + // List of ports which should be made accessible on the pods selected for this rule. + // Each item in this list is combined using a logical OR. + // If this field is not provided, this rule matches all ports (traffic not restricted by port). + // If this field is empty, this rule matches no ports (no traffic matches). + // If this field is present and contains at least one item, then this rule allows traffic + // only if the traffic matches at least one port in the list. + // TODO: Update this to be a pointer to slice as soon as auto-generation supports it. + Ports []NetworkPolicyPort `json:"ports,omitempty"` + + // List of sources which should be able to access the pods selected for this rule. + // Items in this list are combined using a logical OR operation. + // If this field is not provided, this rule matches all sources (traffic not restricted by source). + // If this field is empty, this rule matches no sources (no traffic matches). + // If this field is present and contains at least on item, this rule allows traffic only if the + // traffic matches at least one item in the from list. + // TODO: Update this to be a pointer to slice as soon as auto-generation supports it. + From []NetworkPolicyPeer `json:"from,omitempty"` +} + +type NetworkPolicyPort struct { + // Optional. The protocol (TCP or UDP) which traffic must match. + // If not specified, this field defaults to TCP. + Protocol *api.Protocol `json:"protocol,omitempty"` + + // If specified, the port on the given protocol. This can + // either be a numerical or named port on a pod. If this field is not provided, + // this matches all port names and numbers. + // If present, only traffic on the specified protocol AND port + // will be matched. + Port *intstr.IntOrString `json:"port,omitempty"` +} + +type NetworkPolicyPeer struct { + // Exactly one of the following must be specified. + + // This is a label selector which selects Pods in this namespace. + // This field follows standard label selector semantics. + // If not provided, this selector selects no pods. + // If present but empty, this selector selects all pods in this namespace. + PodSelector *unversioned.LabelSelector `json:"podSelector,omitempty"` + + // Selects Namespaces using cluster scoped-labels. This + // matches all pods in all namespaces selected by this label selector. + // This field follows standard label selector semantics. + // If omitted, this selector selects no namespaces. + // If present but empty, this selector selects all namespaces. + NamespaceSelector *unversioned.LabelSelector `json:"namespaceSelector,omitempty"` +} + +// NetworkPolicyList is a list of NetworkPolicy objects. +type NetworkPolicyList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []NetworkPolicy `json:"items"` +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/zz_generated.deepcopy.go new file mode 100644 index 00000000..02ba202b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/apis/extensions/zz_generated.deepcopy.go @@ -0,0 +1,1081 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package extensions + +import ( + api "k8s.io/client-go/1.4/pkg/api" + unversioned "k8s.io/client-go/1.4/pkg/api/unversioned" + conversion "k8s.io/client-go/1.4/pkg/conversion" + runtime "k8s.io/client-go/1.4/pkg/runtime" + intstr "k8s.io/client-go/1.4/pkg/util/intstr" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_APIVersion, InType: reflect.TypeOf(&APIVersion{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_CustomMetricCurrentStatus, InType: reflect.TypeOf(&CustomMetricCurrentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_CustomMetricCurrentStatusList, InType: reflect.TypeOf(&CustomMetricCurrentStatusList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_CustomMetricTarget, InType: reflect.TypeOf(&CustomMetricTarget{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_CustomMetricTargetList, InType: reflect.TypeOf(&CustomMetricTargetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DaemonSet, InType: reflect.TypeOf(&DaemonSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DaemonSetList, InType: reflect.TypeOf(&DaemonSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DaemonSetSpec, InType: reflect.TypeOf(&DaemonSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DaemonSetStatus, InType: reflect.TypeOf(&DaemonSetStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_Deployment, InType: reflect.TypeOf(&Deployment{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentList, InType: reflect.TypeOf(&DeploymentList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentRollback, InType: reflect.TypeOf(&DeploymentRollback{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentSpec, InType: reflect.TypeOf(&DeploymentSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentStatus, InType: reflect.TypeOf(&DeploymentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentStrategy, InType: reflect.TypeOf(&DeploymentStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_FSGroupStrategyOptions, InType: reflect.TypeOf(&FSGroupStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HTTPIngressPath, InType: reflect.TypeOf(&HTTPIngressPath{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HTTPIngressRuleValue, InType: reflect.TypeOf(&HTTPIngressRuleValue{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HostPortRange, InType: reflect.TypeOf(&HostPortRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IDRange, InType: reflect.TypeOf(&IDRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_Ingress, InType: reflect.TypeOf(&Ingress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressBackend, InType: reflect.TypeOf(&IngressBackend{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressList, InType: reflect.TypeOf(&IngressList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressRule, InType: reflect.TypeOf(&IngressRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressRuleValue, InType: reflect.TypeOf(&IngressRuleValue{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressSpec, InType: reflect.TypeOf(&IngressSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressStatus, InType: reflect.TypeOf(&IngressStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressTLS, InType: reflect.TypeOf(&IngressTLS{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicy, InType: reflect.TypeOf(&NetworkPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicyIngressRule, InType: reflect.TypeOf(&NetworkPolicyIngressRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicyList, InType: reflect.TypeOf(&NetworkPolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicyPeer, InType: reflect.TypeOf(&NetworkPolicyPeer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicyPort, InType: reflect.TypeOf(&NetworkPolicyPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicySpec, InType: reflect.TypeOf(&NetworkPolicySpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_PodSecurityPolicy, InType: reflect.TypeOf(&PodSecurityPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_PodSecurityPolicyList, InType: reflect.TypeOf(&PodSecurityPolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_PodSecurityPolicySpec, InType: reflect.TypeOf(&PodSecurityPolicySpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicaSet, InType: reflect.TypeOf(&ReplicaSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicaSetList, InType: reflect.TypeOf(&ReplicaSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicaSetSpec, InType: reflect.TypeOf(&ReplicaSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicaSetStatus, InType: reflect.TypeOf(&ReplicaSetStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicationControllerDummy, InType: reflect.TypeOf(&ReplicationControllerDummy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_RollbackConfig, InType: reflect.TypeOf(&RollbackConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_RollingUpdateDeployment, InType: reflect.TypeOf(&RollingUpdateDeployment{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_RunAsUserStrategyOptions, InType: reflect.TypeOf(&RunAsUserStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_SELinuxStrategyOptions, InType: reflect.TypeOf(&SELinuxStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_Scale, InType: reflect.TypeOf(&Scale{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ScaleSpec, InType: reflect.TypeOf(&ScaleSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ScaleStatus, InType: reflect.TypeOf(&ScaleStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_SupplementalGroupsStrategyOptions, InType: reflect.TypeOf(&SupplementalGroupsStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResource, InType: reflect.TypeOf(&ThirdPartyResource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceData, InType: reflect.TypeOf(&ThirdPartyResourceData{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceDataList, InType: reflect.TypeOf(&ThirdPartyResourceDataList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceList, InType: reflect.TypeOf(&ThirdPartyResourceList{})}, + ) +} + +func DeepCopy_extensions_APIVersion(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIVersion) + out := out.(*APIVersion) + out.Name = in.Name + return nil + } +} + +func DeepCopy_extensions_CustomMetricCurrentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricCurrentStatus) + out := out.(*CustomMetricCurrentStatus) + out.Name = in.Name + out.CurrentValue = in.CurrentValue.DeepCopy() + return nil + } +} + +func DeepCopy_extensions_CustomMetricCurrentStatusList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricCurrentStatusList) + out := out.(*CustomMetricCurrentStatusList) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CustomMetricCurrentStatus, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_CustomMetricCurrentStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_CustomMetricTarget(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricTarget) + out := out.(*CustomMetricTarget) + out.Name = in.Name + out.TargetValue = in.TargetValue.DeepCopy() + return nil + } +} + +func DeepCopy_extensions_CustomMetricTargetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricTargetList) + out := out.(*CustomMetricTargetList) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CustomMetricTarget, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_CustomMetricTarget(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_DaemonSet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSet) + out := out.(*DaemonSet) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_DaemonSetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_extensions_DaemonSetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetList) + out := out.(*DaemonSetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DaemonSet, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_DaemonSet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_DaemonSetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetSpec) + out := out.(*DaemonSetSpec) + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_DaemonSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetStatus) + out := out.(*DaemonSetStatus) + out.CurrentNumberScheduled = in.CurrentNumberScheduled + out.NumberMisscheduled = in.NumberMisscheduled + out.DesiredNumberScheduled = in.DesiredNumberScheduled + return nil + } +} + +func DeepCopy_extensions_Deployment(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Deployment) + out := out.(*Deployment) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_DeploymentSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_extensions_DeploymentList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentList) + out := out.(*DeploymentList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Deployment, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_Deployment(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_DeploymentRollback(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentRollback) + out := out.(*DeploymentRollback) + out.TypeMeta = in.TypeMeta + out.Name = in.Name + if in.UpdatedAnnotations != nil { + in, out := &in.UpdatedAnnotations, &out.UpdatedAnnotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.UpdatedAnnotations = nil + } + out.RollbackTo = in.RollbackTo + return nil + } +} + +func DeepCopy_extensions_DeploymentSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentSpec) + out := out.(*DeploymentSpec) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + if err := DeepCopy_extensions_DeploymentStrategy(&in.Strategy, &out.Strategy, c); err != nil { + return err + } + out.MinReadySeconds = in.MinReadySeconds + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } else { + out.RevisionHistoryLimit = nil + } + out.Paused = in.Paused + if in.RollbackTo != nil { + in, out := &in.RollbackTo, &out.RollbackTo + *out = new(RollbackConfig) + **out = **in + } else { + out.RollbackTo = nil + } + return nil + } +} + +func DeepCopy_extensions_DeploymentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentStatus) + out := out.(*DeploymentStatus) + out.ObservedGeneration = in.ObservedGeneration + out.Replicas = in.Replicas + out.UpdatedReplicas = in.UpdatedReplicas + out.AvailableReplicas = in.AvailableReplicas + out.UnavailableReplicas = in.UnavailableReplicas + return nil + } +} + +func DeepCopy_extensions_DeploymentStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentStrategy) + out := out.(*DeploymentStrategy) + out.Type = in.Type + if in.RollingUpdate != nil { + in, out := &in.RollingUpdate, &out.RollingUpdate + *out = new(RollingUpdateDeployment) + **out = **in + } else { + out.RollingUpdate = nil + } + return nil + } +} + +func DeepCopy_extensions_FSGroupStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FSGroupStrategyOptions) + out := out.(*FSGroupStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_extensions_HTTPIngressPath(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPIngressPath) + out := out.(*HTTPIngressPath) + out.Path = in.Path + out.Backend = in.Backend + return nil + } +} + +func DeepCopy_extensions_HTTPIngressRuleValue(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPIngressRuleValue) + out := out.(*HTTPIngressRuleValue) + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]HTTPIngressPath, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Paths = nil + } + return nil + } +} + +func DeepCopy_extensions_HostPortRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostPortRange) + out := out.(*HostPortRange) + out.Min = in.Min + out.Max = in.Max + return nil + } +} + +func DeepCopy_extensions_IDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IDRange) + out := out.(*IDRange) + out.Min = in.Min + out.Max = in.Max + return nil + } +} + +func DeepCopy_extensions_Ingress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Ingress) + out := out.(*Ingress) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_IngressSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_extensions_IngressStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_IngressBackend(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressBackend) + out := out.(*IngressBackend) + out.ServiceName = in.ServiceName + out.ServicePort = in.ServicePort + return nil + } +} + +func DeepCopy_extensions_IngressList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressList) + out := out.(*IngressList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Ingress, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_Ingress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_IngressRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressRule) + out := out.(*IngressRule) + out.Host = in.Host + if err := DeepCopy_extensions_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_IngressRuleValue(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressRuleValue) + out := out.(*IngressRuleValue) + if in.HTTP != nil { + in, out := &in.HTTP, &out.HTTP + *out = new(HTTPIngressRuleValue) + if err := DeepCopy_extensions_HTTPIngressRuleValue(*in, *out, c); err != nil { + return err + } + } else { + out.HTTP = nil + } + return nil + } +} + +func DeepCopy_extensions_IngressSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressSpec) + out := out.(*IngressSpec) + if in.Backend != nil { + in, out := &in.Backend, &out.Backend + *out = new(IngressBackend) + **out = **in + } else { + out.Backend = nil + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = make([]IngressTLS, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_IngressTLS(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.TLS = nil + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]IngressRule, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_IngressRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_extensions_IngressStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressStatus) + out := out.(*IngressStatus) + if err := api.DeepCopy_api_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_IngressTLS(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressTLS) + out := out.(*IngressTLS) + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Hosts = nil + } + out.SecretName = in.SecretName + return nil + } +} + +func DeepCopy_extensions_NetworkPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicy) + out := out.(*NetworkPolicy) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_NetworkPolicySpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicyIngressRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyIngressRule) + out := out.(*NetworkPolicyIngressRule) + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]NetworkPolicyPort, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_NetworkPolicyPort(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = make([]NetworkPolicyPeer, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_NetworkPolicyPeer(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.From = nil + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyList) + out := out.(*NetworkPolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NetworkPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_NetworkPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicyPeer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyPeer) + out := out.(*NetworkPolicyPeer) + if in.PodSelector != nil { + in, out := &in.PodSelector, &out.PodSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.PodSelector = nil + } + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.NamespaceSelector = nil + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicyPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyPort) + out := out.(*NetworkPolicyPort) + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(api.Protocol) + **out = **in + } else { + out.Protocol = nil + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(intstr.IntOrString) + **out = **in + } else { + out.Port = nil + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicySpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicySpec) + out := out.(*NetworkPolicySpec) + if err := unversioned.DeepCopy_unversioned_LabelSelector(&in.PodSelector, &out.PodSelector, c); err != nil { + return err + } + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]NetworkPolicyIngressRule, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_NetworkPolicyIngressRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Ingress = nil + } + return nil + } +} + +func DeepCopy_extensions_PodSecurityPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicy) + out := out.(*PodSecurityPolicy) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_PodSecurityPolicySpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_PodSecurityPolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicyList) + out := out.(*PodSecurityPolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodSecurityPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_PodSecurityPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_PodSecurityPolicySpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicySpec) + out := out.(*PodSecurityPolicySpec) + out.Privileged = in.Privileged + if in.DefaultAddCapabilities != nil { + in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.DefaultAddCapabilities = nil + } + if in.RequiredDropCapabilities != nil { + in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.RequiredDropCapabilities = nil + } + if in.AllowedCapabilities != nil { + in, out := &in.AllowedCapabilities, &out.AllowedCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AllowedCapabilities = nil + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]FSType, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Volumes = nil + } + out.HostNetwork = in.HostNetwork + if in.HostPorts != nil { + in, out := &in.HostPorts, &out.HostPorts + *out = make([]HostPortRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.HostPorts = nil + } + out.HostPID = in.HostPID + out.HostIPC = in.HostIPC + if err := DeepCopy_extensions_SELinuxStrategyOptions(&in.SELinux, &out.SELinux, c); err != nil { + return err + } + if err := DeepCopy_extensions_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, c); err != nil { + return err + } + if err := DeepCopy_extensions_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { + return err + } + if err := DeepCopy_extensions_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { + return err + } + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + return nil + } +} + +func DeepCopy_extensions_ReplicaSet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSet) + out := out.(*ReplicaSet) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_ReplicaSetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_extensions_ReplicaSetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetList) + out := out.(*ReplicaSetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReplicaSet, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_ReplicaSet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_ReplicaSetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetSpec) + out := out.(*ReplicaSetSpec) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_ReplicaSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetStatus) + out := out.(*ReplicaSetStatus) + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil + } +} + +func DeepCopy_extensions_ReplicationControllerDummy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerDummy) + out := out.(*ReplicationControllerDummy) + out.TypeMeta = in.TypeMeta + return nil + } +} + +func DeepCopy_extensions_RollbackConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RollbackConfig) + out := out.(*RollbackConfig) + out.Revision = in.Revision + return nil + } +} + +func DeepCopy_extensions_RollingUpdateDeployment(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RollingUpdateDeployment) + out := out.(*RollingUpdateDeployment) + out.MaxUnavailable = in.MaxUnavailable + out.MaxSurge = in.MaxSurge + return nil + } +} + +func DeepCopy_extensions_RunAsUserStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RunAsUserStrategyOptions) + out := out.(*RunAsUserStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_extensions_SELinuxStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxStrategyOptions) + out := out.(*SELinuxStrategyOptions) + out.Rule = in.Rule + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(api.SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + return nil + } +} + +func DeepCopy_extensions_Scale(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Scale) + out := out.(*Scale) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_extensions_ScaleStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_ScaleSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleSpec) + out := out.(*ScaleSpec) + out.Replicas = in.Replicas + return nil + } +} + +func DeepCopy_extensions_ScaleStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleStatus) + out := out.(*ScaleStatus) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + return nil + } +} + +func DeepCopy_extensions_SupplementalGroupsStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SupplementalGroupsStrategyOptions) + out := out.(*SupplementalGroupsStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_extensions_ThirdPartyResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResource) + out := out.(*ThirdPartyResource) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Description = in.Description + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]APIVersion, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Versions = nil + } + return nil + } +} + +func DeepCopy_extensions_ThirdPartyResourceData(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceData) + out := out.(*ThirdPartyResourceData) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_extensions_ThirdPartyResourceDataList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceDataList) + out := out.(*ThirdPartyResourceDataList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ThirdPartyResourceData, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_ThirdPartyResourceData(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_ThirdPartyResourceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceList) + out := out.(*ThirdPartyResourceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ThirdPartyResource, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_ThirdPartyResource(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/auth/user/doc.go b/vendor/k8s.io/client-go/1.4/pkg/auth/user/doc.go new file mode 100644 index 00000000..570c51ae --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/auth/user/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package user contains utilities for dealing with simple user exchange in the auth +// packages. The user.Info interface defines an interface for exchanging that info. +package user diff --git a/vendor/k8s.io/client-go/1.4/pkg/auth/user/user.go b/vendor/k8s.io/client-go/1.4/pkg/auth/user/user.go new file mode 100644 index 00000000..7e7cc16f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/auth/user/user.go @@ -0,0 +1,67 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package user + +// Info describes a user that has been authenticated to the system. +type Info interface { + // GetName returns the name that uniquely identifies this user among all + // other active users. + GetName() string + // GetUID returns a unique value for a particular user that will change + // if the user is removed from the system and another user is added with + // the same name. + GetUID() string + // GetGroups returns the names of the groups the user is a member of + GetGroups() []string + + // GetExtra can contain any additional information that the authenticator + // thought was interesting. One example would be scopes on a token. + // Keys in this map should be namespaced to the authenticator or + // authenticator/authorizer pair making use of them. + // For instance: "example.org/foo" instead of "foo" + // This is a map[string][]string because it needs to be serializeable into + // a SubjectAccessReviewSpec.authorization.k8s.io for proper authorization + // delegation flows + // In order to faithfully round-trip through an impersonation flow, these keys + // MUST be lowercase. + GetExtra() map[string][]string +} + +// DefaultInfo provides a simple user information exchange object +// for components that implement the UserInfo interface. +type DefaultInfo struct { + Name string + UID string + Groups []string + Extra map[string][]string +} + +func (i *DefaultInfo) GetName() string { + return i.Name +} + +func (i *DefaultInfo) GetUID() string { + return i.UID +} + +func (i *DefaultInfo) GetGroups() []string { + return i.Groups +} + +func (i *DefaultInfo) GetExtra() map[string][]string { + return i.Extra +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/capabilities/capabilities.go b/vendor/k8s.io/client-go/1.4/pkg/capabilities/capabilities.go new file mode 100644 index 00000000..96146c6b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/capabilities/capabilities.go @@ -0,0 +1,94 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package capabilities + +import ( + "sync" +) + +// Capabilities defines the set of capabilities available within the system. +// For now these are global. Eventually they may be per-user +type Capabilities struct { + AllowPrivileged bool + + // Pod sources from which to allow privileged capabilities like host networking, sharing the host + // IPC namespace, and sharing the host PID namespace. + PrivilegedSources PrivilegedSources + + // PerConnectionBandwidthLimitBytesPerSec limits the throughput of each connection (currently only used for proxy, exec, attach) + PerConnectionBandwidthLimitBytesPerSec int64 +} + +// PrivilegedSources defines the pod sources allowed to make privileged requests for certain types +// of capabilities like host networking, sharing the host IPC namespace, and sharing the host PID namespace. +type PrivilegedSources struct { + // List of pod sources for which using host network is allowed. + HostNetworkSources []string + + // List of pod sources for which using host pid namespace is allowed. + HostPIDSources []string + + // List of pod sources for which using host ipc is allowed. + HostIPCSources []string +} + +// TODO: Clean these up into a singleton +var once sync.Once +var lock sync.Mutex +var capabilities *Capabilities + +// Initialize the capability set. This can only be done once per binary, subsequent calls are ignored. +func Initialize(c Capabilities) { + // Only do this once + once.Do(func() { + capabilities = &c + }) +} + +// Setup the capability set. It wraps Initialize for improving usability. +func Setup(allowPrivileged bool, privilegedSources PrivilegedSources, perConnectionBytesPerSec int64) { + Initialize(Capabilities{ + AllowPrivileged: allowPrivileged, + PrivilegedSources: privilegedSources, + PerConnectionBandwidthLimitBytesPerSec: perConnectionBytesPerSec, + }) +} + +// SetCapabilitiesForTests. Convenience method for testing. This should only be called from tests. +func SetForTests(c Capabilities) { + lock.Lock() + defer lock.Unlock() + capabilities = &c +} + +// Returns a read-only copy of the system capabilities. +func Get() Capabilities { + lock.Lock() + defer lock.Unlock() + // This check prevents clobbering of capabilities that might've been set via SetForTests + if capabilities == nil { + Initialize(Capabilities{ + AllowPrivileged: false, + PrivilegedSources: PrivilegedSources{ + HostNetworkSources: []string{}, + HostPIDSources: []string{}, + HostIPCSources: []string{}, + }, + }) + } + return *capabilities +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/capabilities/doc.go b/vendor/k8s.io/client-go/1.4/pkg/capabilities/doc.go new file mode 100644 index 00000000..e2042a88 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/capabilities/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// package capabilities manages system level capabilities +package capabilities diff --git a/vendor/k8s.io/client-go/1.4/pkg/conversion/OWNERS b/vendor/k8s.io/client-go/1.4/pkg/conversion/OWNERS new file mode 100644 index 00000000..a046efc0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/conversion/OWNERS @@ -0,0 +1,5 @@ +assignees: + - derekwaynecarr + - lavalamp + - smarterclayton + - wojtek-t diff --git a/vendor/k8s.io/client-go/1.4/pkg/conversion/cloner.go b/vendor/k8s.io/client-go/1.4/pkg/conversion/cloner.go new file mode 100644 index 00000000..c5dec1f3 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/conversion/cloner.go @@ -0,0 +1,249 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package conversion + +import ( + "fmt" + "reflect" +) + +// Cloner knows how to copy one type to another. +type Cloner struct { + // Map from the type to a function which can do the deep copy. + deepCopyFuncs map[reflect.Type]reflect.Value + generatedDeepCopyFuncs map[reflect.Type]func(in interface{}, out interface{}, c *Cloner) error +} + +// NewCloner creates a new Cloner object. +func NewCloner() *Cloner { + c := &Cloner{ + deepCopyFuncs: map[reflect.Type]reflect.Value{}, + generatedDeepCopyFuncs: map[reflect.Type]func(in interface{}, out interface{}, c *Cloner) error{}, + } + if err := c.RegisterDeepCopyFunc(byteSliceDeepCopy); err != nil { + // If one of the deep-copy functions is malformed, detect it immediately. + panic(err) + } + return c +} + +// Prevent recursing into every byte... +func byteSliceDeepCopy(in *[]byte, out *[]byte, c *Cloner) error { + if *in != nil { + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + *out = nil + } + return nil +} + +// Verifies whether a deep-copy function has a correct signature. +func verifyDeepCopyFunctionSignature(ft reflect.Type) error { + if ft.Kind() != reflect.Func { + return fmt.Errorf("expected func, got: %v", ft) + } + if ft.NumIn() != 3 { + return fmt.Errorf("expected three 'in' params, got %v", ft) + } + if ft.NumOut() != 1 { + return fmt.Errorf("expected one 'out' param, got %v", ft) + } + if ft.In(0).Kind() != reflect.Ptr { + return fmt.Errorf("expected pointer arg for 'in' param 0, got: %v", ft) + } + if ft.In(1) != ft.In(0) { + return fmt.Errorf("expected 'in' param 0 the same as param 1, got: %v", ft) + } + var forClonerType Cloner + if expected := reflect.TypeOf(&forClonerType); ft.In(2) != expected { + return fmt.Errorf("expected '%v' arg for 'in' param 2, got: '%v'", expected, ft.In(2)) + } + var forErrorType error + // This convolution is necessary, otherwise TypeOf picks up on the fact + // that forErrorType is nil + errorType := reflect.TypeOf(&forErrorType).Elem() + if ft.Out(0) != errorType { + return fmt.Errorf("expected error return, got: %v", ft) + } + return nil +} + +// RegisterGeneratedDeepCopyFunc registers a copying func with the Cloner. +// deepCopyFunc must take three parameters: a type input, a pointer to a +// type output, and a pointer to Cloner. It should return an error. +// +// Example: +// c.RegisterGeneratedDeepCopyFunc( +// func(in Pod, out *Pod, c *Cloner) error { +// // deep copy logic... +// return nil +// }) +func (c *Cloner) RegisterDeepCopyFunc(deepCopyFunc interface{}) error { + fv := reflect.ValueOf(deepCopyFunc) + ft := fv.Type() + if err := verifyDeepCopyFunctionSignature(ft); err != nil { + return err + } + c.deepCopyFuncs[ft.In(0)] = fv + return nil +} + +// GeneratedDeepCopyFunc bundles an untyped generated deep-copy function of a type +// with a reflection type object used as a key to lookup the deep-copy function. +type GeneratedDeepCopyFunc struct { + Fn func(in interface{}, out interface{}, c *Cloner) error + InType reflect.Type +} + +// Similar to RegisterDeepCopyFunc, but registers deep copy function that were +// automatically generated. +func (c *Cloner) RegisterGeneratedDeepCopyFunc(fn GeneratedDeepCopyFunc) error { + c.generatedDeepCopyFuncs[fn.InType] = fn.Fn + return nil +} + +// DeepCopy will perform a deep copy of a given object. +func (c *Cloner) DeepCopy(in interface{}) (interface{}, error) { + // Can be invalid if we run DeepCopy(X) where X is a nil interface type. + // For example, we get an invalid value when someone tries to deep-copy + // a nil labels.Selector. + // This does not occur if X is nil and is a pointer to a concrete type. + if in == nil { + return nil, nil + } + inValue := reflect.ValueOf(in) + outValue, err := c.deepCopy(inValue) + if err != nil { + return nil, err + } + return outValue.Interface(), nil +} + +func (c *Cloner) deepCopy(src reflect.Value) (reflect.Value, error) { + inType := src.Type() + + switch src.Kind() { + case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: + if src.IsNil() { + return src, nil + } + } + + if fv, ok := c.deepCopyFuncs[inType]; ok { + return c.customDeepCopy(src, fv) + } + if fv, ok := c.generatedDeepCopyFuncs[inType]; ok { + var outValue reflect.Value + outValue = reflect.New(inType.Elem()) + err := fv(src.Interface(), outValue.Interface(), c) + return outValue, err + } + return c.defaultDeepCopy(src) +} + +func (c *Cloner) customDeepCopy(src, fv reflect.Value) (reflect.Value, error) { + outValue := reflect.New(src.Type().Elem()) + args := []reflect.Value{src, outValue, reflect.ValueOf(c)} + result := fv.Call(args)[0].Interface() + // This convolution is necessary because nil interfaces won't convert + // to error. + if result == nil { + return outValue, nil + } + return outValue, result.(error) +} + +func (c *Cloner) defaultDeepCopy(src reflect.Value) (reflect.Value, error) { + switch src.Kind() { + case reflect.Chan, reflect.Func, reflect.UnsafePointer, reflect.Uintptr: + return src, fmt.Errorf("cannot deep copy kind: %s", src.Kind()) + case reflect.Array: + dst := reflect.New(src.Type()) + for i := 0; i < src.Len(); i++ { + copyVal, err := c.deepCopy(src.Index(i)) + if err != nil { + return src, err + } + dst.Elem().Index(i).Set(copyVal) + } + return dst.Elem(), nil + case reflect.Interface: + if src.IsNil() { + return src, nil + } + return c.deepCopy(src.Elem()) + case reflect.Map: + if src.IsNil() { + return src, nil + } + dst := reflect.MakeMap(src.Type()) + for _, k := range src.MapKeys() { + copyVal, err := c.deepCopy(src.MapIndex(k)) + if err != nil { + return src, err + } + dst.SetMapIndex(k, copyVal) + } + return dst, nil + case reflect.Ptr: + if src.IsNil() { + return src, nil + } + dst := reflect.New(src.Type().Elem()) + copyVal, err := c.deepCopy(src.Elem()) + if err != nil { + return src, err + } + dst.Elem().Set(copyVal) + return dst, nil + case reflect.Slice: + if src.IsNil() { + return src, nil + } + dst := reflect.MakeSlice(src.Type(), 0, src.Len()) + for i := 0; i < src.Len(); i++ { + copyVal, err := c.deepCopy(src.Index(i)) + if err != nil { + return src, err + } + dst = reflect.Append(dst, copyVal) + } + return dst, nil + case reflect.Struct: + dst := reflect.New(src.Type()) + for i := 0; i < src.NumField(); i++ { + if !dst.Elem().Field(i).CanSet() { + // Can't set private fields. At this point, the + // best we can do is a shallow copy. For + // example, time.Time is a value type with + // private members that can be shallow copied. + return src, nil + } + copyVal, err := c.deepCopy(src.Field(i)) + if err != nil { + return src, err + } + dst.Elem().Field(i).Set(copyVal) + } + return dst.Elem(), nil + + default: + // Value types like numbers, booleans, and strings. + return src, nil + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/conversion/converter.go b/vendor/k8s.io/client-go/1.4/pkg/conversion/converter.go new file mode 100644 index 00000000..8941b18a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/conversion/converter.go @@ -0,0 +1,953 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package conversion + +import ( + "fmt" + "reflect" +) + +type typePair struct { + source reflect.Type + dest reflect.Type +} + +type typeNamePair struct { + fieldType reflect.Type + fieldName string +} + +// DebugLogger allows you to get debugging messages if necessary. +type DebugLogger interface { + Logf(format string, args ...interface{}) +} + +type NameFunc func(t reflect.Type) string + +var DefaultNameFunc = func(t reflect.Type) string { return t.Name() } + +type GenericConversionFunc func(a, b interface{}, scope Scope) (bool, error) + +// Converter knows how to convert one type to another. +type Converter struct { + // Map from the conversion pair to a function which can + // do the conversion. + conversionFuncs ConversionFuncs + generatedConversionFuncs ConversionFuncs + + // genericConversions are called during normal conversion to offer a "fast-path" + // that avoids all reflection. These methods are not called outside of the .Convert() + // method. + genericConversions []GenericConversionFunc + + // Set of conversions that should be treated as a no-op + ignoredConversions map[typePair]struct{} + + // This is a map from a source field type and name, to a list of destination + // field type and name. + structFieldDests map[typeNamePair][]typeNamePair + + // Allows for the opposite lookup of structFieldDests. So that SourceFromDest + // copy flag also works. So this is a map of destination field name, to potential + // source field name and type to look for. + structFieldSources map[typeNamePair][]typeNamePair + + // Map from a type to a function which applies defaults. + defaultingFuncs map[reflect.Type]reflect.Value + + // Similar to above, but function is stored as interface{}. + defaultingInterfaces map[reflect.Type]interface{} + + // Map from an input type to a function which can apply a key name mapping + inputFieldMappingFuncs map[reflect.Type]FieldMappingFunc + + // Map from an input type to a set of default conversion flags. + inputDefaultFlags map[reflect.Type]FieldMatchingFlags + + // If non-nil, will be called to print helpful debugging info. Quite verbose. + Debug DebugLogger + + // nameFunc is called to retrieve the name of a type; this name is used for the + // purpose of deciding whether two types match or not (i.e., will we attempt to + // do a conversion). The default returns the go type name. + nameFunc func(t reflect.Type) string +} + +// NewConverter creates a new Converter object. +func NewConverter(nameFn NameFunc) *Converter { + c := &Converter{ + conversionFuncs: NewConversionFuncs(), + generatedConversionFuncs: NewConversionFuncs(), + ignoredConversions: make(map[typePair]struct{}), + defaultingFuncs: make(map[reflect.Type]reflect.Value), + defaultingInterfaces: make(map[reflect.Type]interface{}), + nameFunc: nameFn, + structFieldDests: make(map[typeNamePair][]typeNamePair), + structFieldSources: make(map[typeNamePair][]typeNamePair), + + inputFieldMappingFuncs: make(map[reflect.Type]FieldMappingFunc), + inputDefaultFlags: make(map[reflect.Type]FieldMatchingFlags), + } + c.RegisterConversionFunc(Convert_Slice_byte_To_Slice_byte) + return c +} + +// AddGenericConversionFunc adds a function that accepts the ConversionFunc call pattern +// (for two conversion types) to the converter. These functions are checked first during +// a normal conversion, but are otherwise not called. Use AddConversionFuncs when registering +// typed conversions. +func (c *Converter) AddGenericConversionFunc(fn GenericConversionFunc) { + c.genericConversions = append(c.genericConversions, fn) +} + +// WithConversions returns a Converter that is a copy of c but with the additional +// fns merged on top. +func (c *Converter) WithConversions(fns ConversionFuncs) *Converter { + copied := *c + copied.conversionFuncs = c.conversionFuncs.Merge(fns) + return &copied +} + +// DefaultMeta returns the conversion FieldMappingFunc and meta for a given type. +func (c *Converter) DefaultMeta(t reflect.Type) (FieldMatchingFlags, *Meta) { + return c.inputDefaultFlags[t], &Meta{ + KeyNameMapping: c.inputFieldMappingFuncs[t], + } +} + +// Convert_Slice_byte_To_Slice_byte prevents recursing into every byte +func Convert_Slice_byte_To_Slice_byte(in *[]byte, out *[]byte, s Scope) error { + if *in == nil { + *out = nil + return nil + } + *out = make([]byte, len(*in)) + copy(*out, *in) + return nil +} + +// Scope is passed to conversion funcs to allow them to continue an ongoing conversion. +// If multiple converters exist in the system, Scope will allow you to use the correct one +// from a conversion function--that is, the one your conversion function was called by. +type Scope interface { + // Call Convert to convert sub-objects. Note that if you call it with your own exact + // parameters, you'll run out of stack space before anything useful happens. + Convert(src, dest interface{}, flags FieldMatchingFlags) error + + // DefaultConvert performs the default conversion, without calling a conversion func + // on the current stack frame. This makes it safe to call from a conversion func. + DefaultConvert(src, dest interface{}, flags FieldMatchingFlags) error + + // If registered, returns a function applying defaults for objects of a given type. + // Used for automatically generating conversion functions. + DefaultingInterface(inType reflect.Type) (interface{}, bool) + + // SrcTags and DestTags contain the struct tags that src and dest had, respectively. + // If the enclosing object was not a struct, then these will contain no tags, of course. + SrcTag() reflect.StructTag + DestTag() reflect.StructTag + + // Flags returns the flags with which the conversion was started. + Flags() FieldMatchingFlags + + // Meta returns any information originally passed to Convert. + Meta() *Meta +} + +// FieldMappingFunc can convert an input field value into different values, depending on +// the value of the source or destination struct tags. +type FieldMappingFunc func(key string, sourceTag, destTag reflect.StructTag) (source string, dest string) + +func NewConversionFuncs() ConversionFuncs { + return ConversionFuncs{fns: make(map[typePair]reflect.Value)} +} + +type ConversionFuncs struct { + fns map[typePair]reflect.Value +} + +// Add adds the provided conversion functions to the lookup table - they must have the signature +// `func(type1, type2, Scope) error`. Functions are added in the order passed and will override +// previously registered pairs. +func (c ConversionFuncs) Add(fns ...interface{}) error { + for _, fn := range fns { + fv := reflect.ValueOf(fn) + ft := fv.Type() + if err := verifyConversionFunctionSignature(ft); err != nil { + return err + } + c.fns[typePair{ft.In(0).Elem(), ft.In(1).Elem()}] = fv + } + return nil +} + +// Merge returns a new ConversionFuncs that contains all conversions from +// both other and c, with other conversions taking precedence. +func (c ConversionFuncs) Merge(other ConversionFuncs) ConversionFuncs { + merged := NewConversionFuncs() + for k, v := range c.fns { + merged.fns[k] = v + } + for k, v := range other.fns { + merged.fns[k] = v + } + return merged +} + +// Meta is supplied by Scheme, when it calls Convert. +type Meta struct { + // KeyNameMapping is an optional function which may map the listed key (field name) + // into a source and destination value. + KeyNameMapping FieldMappingFunc + // Context is an optional field that callers may use to pass info to conversion functions. + Context interface{} +} + +// scope contains information about an ongoing conversion. +type scope struct { + converter *Converter + meta *Meta + flags FieldMatchingFlags + + // srcStack & destStack are separate because they may not have a 1:1 + // relationship. + srcStack scopeStack + destStack scopeStack +} + +type scopeStackElem struct { + tag reflect.StructTag + value reflect.Value + key string +} + +type scopeStack []scopeStackElem + +func (s *scopeStack) pop() { + n := len(*s) + *s = (*s)[:n-1] +} + +func (s *scopeStack) push(e scopeStackElem) { + *s = append(*s, e) +} + +func (s *scopeStack) top() *scopeStackElem { + return &(*s)[len(*s)-1] +} + +func (s scopeStack) describe() string { + desc := "" + if len(s) > 1 { + desc = "(" + s[1].value.Type().String() + ")" + } + for i, v := range s { + if i < 2 { + // First layer on stack is not real; second is handled specially above. + continue + } + if v.key == "" { + desc += fmt.Sprintf(".%v", v.value.Type()) + } else { + desc += fmt.Sprintf(".%v", v.key) + } + } + return desc +} + +func (s *scope) DefaultingInterface(inType reflect.Type) (interface{}, bool) { + value, found := s.converter.defaultingInterfaces[inType] + return value, found +} + +// Formats src & dest as indices for printing. +func (s *scope) setIndices(src, dest int) { + s.srcStack.top().key = fmt.Sprintf("[%v]", src) + s.destStack.top().key = fmt.Sprintf("[%v]", dest) +} + +// Formats src & dest as map keys for printing. +func (s *scope) setKeys(src, dest interface{}) { + s.srcStack.top().key = fmt.Sprintf(`["%v"]`, src) + s.destStack.top().key = fmt.Sprintf(`["%v"]`, dest) +} + +// Convert continues a conversion. +func (s *scope) Convert(src, dest interface{}, flags FieldMatchingFlags) error { + return s.converter.Convert(src, dest, flags, s.meta) +} + +// DefaultConvert continues a conversion, performing a default conversion (no conversion func) +// for the current stack frame. +func (s *scope) DefaultConvert(src, dest interface{}, flags FieldMatchingFlags) error { + return s.converter.DefaultConvert(src, dest, flags, s.meta) +} + +// SrcTag returns the tag of the struct containing the current source item, if any. +func (s *scope) SrcTag() reflect.StructTag { + return s.srcStack.top().tag +} + +// DestTag returns the tag of the struct containing the current dest item, if any. +func (s *scope) DestTag() reflect.StructTag { + return s.destStack.top().tag +} + +// Flags returns the flags with which the current conversion was started. +func (s *scope) Flags() FieldMatchingFlags { + return s.flags +} + +// Meta returns the meta object that was originally passed to Convert. +func (s *scope) Meta() *Meta { + return s.meta +} + +// describe prints the path to get to the current (source, dest) values. +func (s *scope) describe() (src, dest string) { + return s.srcStack.describe(), s.destStack.describe() +} + +// error makes an error that includes information about where we were in the objects +// we were asked to convert. +func (s *scope) errorf(message string, args ...interface{}) error { + srcPath, destPath := s.describe() + where := fmt.Sprintf("converting %v to %v: ", srcPath, destPath) + return fmt.Errorf(where+message, args...) +} + +// Verifies whether a conversion function has a correct signature. +func verifyConversionFunctionSignature(ft reflect.Type) error { + if ft.Kind() != reflect.Func { + return fmt.Errorf("expected func, got: %v", ft) + } + if ft.NumIn() != 3 { + return fmt.Errorf("expected three 'in' params, got: %v", ft) + } + if ft.NumOut() != 1 { + return fmt.Errorf("expected one 'out' param, got: %v", ft) + } + if ft.In(0).Kind() != reflect.Ptr { + return fmt.Errorf("expected pointer arg for 'in' param 0, got: %v", ft) + } + if ft.In(1).Kind() != reflect.Ptr { + return fmt.Errorf("expected pointer arg for 'in' param 1, got: %v", ft) + } + scopeType := Scope(nil) + if e, a := reflect.TypeOf(&scopeType).Elem(), ft.In(2); e != a { + return fmt.Errorf("expected '%v' arg for 'in' param 2, got '%v' (%v)", e, a, ft) + } + var forErrorType error + // This convolution is necessary, otherwise TypeOf picks up on the fact + // that forErrorType is nil. + errorType := reflect.TypeOf(&forErrorType).Elem() + if ft.Out(0) != errorType { + return fmt.Errorf("expected error return, got: %v", ft) + } + return nil +} + +// RegisterConversionFunc registers a conversion func with the +// Converter. conversionFunc must take three parameters: a pointer to the input +// type, a pointer to the output type, and a conversion.Scope (which should be +// used if recursive conversion calls are desired). It must return an error. +// +// Example: +// c.RegisterConversionFunc( +// func(in *Pod, out *v1.Pod, s Scope) error { +// // conversion logic... +// return nil +// }) +func (c *Converter) RegisterConversionFunc(conversionFunc interface{}) error { + return c.conversionFuncs.Add(conversionFunc) +} + +// Similar to RegisterConversionFunc, but registers conversion function that were +// automatically generated. +func (c *Converter) RegisterGeneratedConversionFunc(conversionFunc interface{}) error { + return c.generatedConversionFuncs.Add(conversionFunc) +} + +// RegisterIgnoredConversion registers a "no-op" for conversion, where any requested +// conversion between from and to is ignored. +func (c *Converter) RegisterIgnoredConversion(from, to interface{}) error { + typeFrom := reflect.TypeOf(from) + typeTo := reflect.TypeOf(to) + if reflect.TypeOf(from).Kind() != reflect.Ptr { + return fmt.Errorf("expected pointer arg for 'from' param 0, got: %v", typeFrom) + } + if typeTo.Kind() != reflect.Ptr { + return fmt.Errorf("expected pointer arg for 'to' param 1, got: %v", typeTo) + } + c.ignoredConversions[typePair{typeFrom.Elem(), typeTo.Elem()}] = struct{}{} + return nil +} + +// IsConversionIgnored returns true if the specified objects should be dropped during +// conversion. +func (c *Converter) IsConversionIgnored(inType, outType reflect.Type) bool { + _, found := c.ignoredConversions[typePair{inType, outType}] + return found +} + +func (c *Converter) HasConversionFunc(inType, outType reflect.Type) bool { + _, found := c.conversionFuncs.fns[typePair{inType, outType}] + return found +} + +func (c *Converter) ConversionFuncValue(inType, outType reflect.Type) (reflect.Value, bool) { + value, found := c.conversionFuncs.fns[typePair{inType, outType}] + return value, found +} + +// SetStructFieldCopy registers a correspondence. Whenever a struct field is encountered +// which has a type and name matching srcFieldType and srcFieldName, it wil be copied +// into the field in the destination struct matching destFieldType & Name, if such a +// field exists. +// May be called multiple times, even for the same source field & type--all applicable +// copies will be performed. +func (c *Converter) SetStructFieldCopy(srcFieldType interface{}, srcFieldName string, destFieldType interface{}, destFieldName string) error { + st := reflect.TypeOf(srcFieldType) + dt := reflect.TypeOf(destFieldType) + srcKey := typeNamePair{st, srcFieldName} + destKey := typeNamePair{dt, destFieldName} + c.structFieldDests[srcKey] = append(c.structFieldDests[srcKey], destKey) + c.structFieldSources[destKey] = append(c.structFieldSources[destKey], srcKey) + return nil +} + +// RegisterDefaultingFunc registers a value-defaulting func with the Converter. +// defaultingFunc must take one parameters: a pointer to the input type. +// +// Example: +// c.RegisteDefaultingFunc( +// func(in *v1.Pod) { +// // defaulting logic... +// }) +func (c *Converter) RegisterDefaultingFunc(defaultingFunc interface{}) error { + fv := reflect.ValueOf(defaultingFunc) + ft := fv.Type() + if ft.Kind() != reflect.Func { + return fmt.Errorf("expected func, got: %v", ft) + } + if ft.NumIn() != 1 { + return fmt.Errorf("expected one 'in' param, got: %v", ft) + } + if ft.NumOut() != 0 { + return fmt.Errorf("expected zero 'out' params, got: %v", ft) + } + if ft.In(0).Kind() != reflect.Ptr { + return fmt.Errorf("expected pointer arg for 'in' param 0, got: %v", ft) + } + inType := ft.In(0).Elem() + c.defaultingFuncs[inType] = fv + c.defaultingInterfaces[inType] = defaultingFunc + return nil +} + +// RegisterInputDefaults registers a field name mapping function, used when converting +// from maps to structs. Inputs to the conversion methods are checked for this type and a mapping +// applied automatically if the input matches in. A set of default flags for the input conversion +// may also be provided, which will be used when no explicit flags are requested. +func (c *Converter) RegisterInputDefaults(in interface{}, fn FieldMappingFunc, defaultFlags FieldMatchingFlags) error { + fv := reflect.ValueOf(in) + ft := fv.Type() + if ft.Kind() != reflect.Ptr { + return fmt.Errorf("expected pointer 'in' argument, got: %v", ft) + } + c.inputFieldMappingFuncs[ft] = fn + c.inputDefaultFlags[ft] = defaultFlags + return nil +} + +// FieldMatchingFlags contains a list of ways in which struct fields could be +// copied. These constants may be | combined. +type FieldMatchingFlags int + +const ( + // Loop through destination fields, search for matching source + // field to copy it from. Source fields with no corresponding + // destination field will be ignored. If SourceToDest is + // specified, this flag is ignored. If neither is specified, + // or no flags are passed, this flag is the default. + DestFromSource FieldMatchingFlags = 0 + // Loop through source fields, search for matching dest field + // to copy it into. Destination fields with no corresponding + // source field will be ignored. + SourceToDest FieldMatchingFlags = 1 << iota + // Don't treat it as an error if the corresponding source or + // dest field can't be found. + IgnoreMissingFields + // Don't require type names to match. + AllowDifferentFieldTypeNames +) + +// IsSet returns true if the given flag or combination of flags is set. +func (f FieldMatchingFlags) IsSet(flag FieldMatchingFlags) bool { + if flag == DestFromSource { + // The bit logic doesn't work on the default value. + return f&SourceToDest != SourceToDest + } + return f&flag == flag +} + +// Convert will translate src to dest if it knows how. Both must be pointers. +// If no conversion func is registered and the default copying mechanism +// doesn't work on this type pair, an error will be returned. +// Read the comments on the various FieldMatchingFlags constants to understand +// what the 'flags' parameter does. +// 'meta' is given to allow you to pass information to conversion functions, +// it is not used by Convert() other than storing it in the scope. +// Not safe for objects with cyclic references! +func (c *Converter) Convert(src, dest interface{}, flags FieldMatchingFlags, meta *Meta) error { + if len(c.genericConversions) > 0 { + // TODO: avoid scope allocation + s := &scope{converter: c, flags: flags, meta: meta} + for _, fn := range c.genericConversions { + if ok, err := fn(src, dest, s); ok { + return err + } + } + } + return c.doConversion(src, dest, flags, meta, c.convert) +} + +// DefaultConvert will translate src to dest if it knows how. Both must be pointers. +// No conversion func is used. If the default copying mechanism +// doesn't work on this type pair, an error will be returned. +// Read the comments on the various FieldMatchingFlags constants to understand +// what the 'flags' parameter does. +// 'meta' is given to allow you to pass information to conversion functions, +// it is not used by DefaultConvert() other than storing it in the scope. +// Not safe for objects with cyclic references! +func (c *Converter) DefaultConvert(src, dest interface{}, flags FieldMatchingFlags, meta *Meta) error { + return c.doConversion(src, dest, flags, meta, c.defaultConvert) +} + +type conversionFunc func(sv, dv reflect.Value, scope *scope) error + +func (c *Converter) doConversion(src, dest interface{}, flags FieldMatchingFlags, meta *Meta, f conversionFunc) error { + dv, err := EnforcePtr(dest) + if err != nil { + return err + } + if !dv.CanAddr() && !dv.CanSet() { + return fmt.Errorf("can't write to dest") + } + sv, err := EnforcePtr(src) + if err != nil { + return err + } + s := &scope{ + converter: c, + flags: flags, + meta: meta, + } + // Leave something on the stack, so that calls to struct tag getters never fail. + s.srcStack.push(scopeStackElem{}) + s.destStack.push(scopeStackElem{}) + return f(sv, dv, s) +} + +// callCustom calls 'custom' with sv & dv. custom must be a conversion function. +func (c *Converter) callCustom(sv, dv, custom reflect.Value, scope *scope) error { + if !sv.CanAddr() { + sv2 := reflect.New(sv.Type()) + sv2.Elem().Set(sv) + sv = sv2 + } else { + sv = sv.Addr() + } + if !dv.CanAddr() { + if !dv.CanSet() { + return scope.errorf("can't addr or set dest.") + } + dvOrig := dv + dv := reflect.New(dvOrig.Type()) + defer func() { dvOrig.Set(dv) }() + } else { + dv = dv.Addr() + } + args := []reflect.Value{sv, dv, reflect.ValueOf(scope)} + ret := custom.Call(args)[0].Interface() + // This convolution is necessary because nil interfaces won't convert + // to errors. + if ret == nil { + return nil + } + return ret.(error) +} + +// convert recursively copies sv into dv, calling an appropriate conversion function if +// one is registered. +func (c *Converter) convert(sv, dv reflect.Value, scope *scope) error { + dt, st := dv.Type(), sv.Type() + // Apply default values. + if fv, ok := c.defaultingFuncs[st]; ok { + if c.Debug != nil { + c.Debug.Logf("Applying defaults for '%v'", st) + } + args := []reflect.Value{sv.Addr()} + fv.Call(args) + } + + pair := typePair{st, dt} + + // ignore conversions of this type + if _, ok := c.ignoredConversions[pair]; ok { + if c.Debug != nil { + c.Debug.Logf("Ignoring conversion of '%v' to '%v'", st, dt) + } + return nil + } + + // Convert sv to dv. + if fv, ok := c.conversionFuncs.fns[pair]; ok { + if c.Debug != nil { + c.Debug.Logf("Calling custom conversion of '%v' to '%v'", st, dt) + } + return c.callCustom(sv, dv, fv, scope) + } + if fv, ok := c.generatedConversionFuncs.fns[pair]; ok { + if c.Debug != nil { + c.Debug.Logf("Calling generated conversion of '%v' to '%v'", st, dt) + } + return c.callCustom(sv, dv, fv, scope) + } + + return c.defaultConvert(sv, dv, scope) +} + +// defaultConvert recursively copies sv into dv. no conversion function is called +// for the current stack frame (but conversion functions may be called for nested objects) +func (c *Converter) defaultConvert(sv, dv reflect.Value, scope *scope) error { + dt, st := dv.Type(), sv.Type() + + if !dv.CanSet() { + return scope.errorf("Cannot set dest. (Tried to deep copy something with unexported fields?)") + } + + if !scope.flags.IsSet(AllowDifferentFieldTypeNames) && c.nameFunc(dt) != c.nameFunc(st) { + return scope.errorf( + "type names don't match (%v, %v), and no conversion 'func (%v, %v) error' registered.", + c.nameFunc(st), c.nameFunc(dt), st, dt) + } + + switch st.Kind() { + case reflect.Map, reflect.Ptr, reflect.Slice, reflect.Interface, reflect.Struct: + // Don't copy these via assignment/conversion! + default: + // This should handle all simple types. + if st.AssignableTo(dt) { + dv.Set(sv) + return nil + } + if st.ConvertibleTo(dt) { + dv.Set(sv.Convert(dt)) + return nil + } + } + + if c.Debug != nil { + c.Debug.Logf("Trying to convert '%v' to '%v'", st, dt) + } + + scope.srcStack.push(scopeStackElem{value: sv}) + scope.destStack.push(scopeStackElem{value: dv}) + defer scope.srcStack.pop() + defer scope.destStack.pop() + + switch dv.Kind() { + case reflect.Struct: + return c.convertKV(toKVValue(sv), toKVValue(dv), scope) + case reflect.Slice: + if sv.IsNil() { + // Don't make a zero-length slice. + dv.Set(reflect.Zero(dt)) + return nil + } + dv.Set(reflect.MakeSlice(dt, sv.Len(), sv.Cap())) + for i := 0; i < sv.Len(); i++ { + scope.setIndices(i, i) + if err := c.convert(sv.Index(i), dv.Index(i), scope); err != nil { + return err + } + } + case reflect.Ptr: + if sv.IsNil() { + // Don't copy a nil ptr! + dv.Set(reflect.Zero(dt)) + return nil + } + dv.Set(reflect.New(dt.Elem())) + switch st.Kind() { + case reflect.Ptr, reflect.Interface: + return c.convert(sv.Elem(), dv.Elem(), scope) + default: + return c.convert(sv, dv.Elem(), scope) + } + case reflect.Map: + if sv.IsNil() { + // Don't copy a nil ptr! + dv.Set(reflect.Zero(dt)) + return nil + } + dv.Set(reflect.MakeMap(dt)) + for _, sk := range sv.MapKeys() { + dk := reflect.New(dt.Key()).Elem() + if err := c.convert(sk, dk, scope); err != nil { + return err + } + dkv := reflect.New(dt.Elem()).Elem() + scope.setKeys(sk.Interface(), dk.Interface()) + // TODO: sv.MapIndex(sk) may return a value with CanAddr() == false, + // because a map[string]struct{} does not allow a pointer reference. + // Calling a custom conversion function defined for the map value + // will panic. Example is PodInfo map[string]ContainerStatus. + if err := c.convert(sv.MapIndex(sk), dkv, scope); err != nil { + return err + } + dv.SetMapIndex(dk, dkv) + } + case reflect.Interface: + if sv.IsNil() { + // Don't copy a nil interface! + dv.Set(reflect.Zero(dt)) + return nil + } + tmpdv := reflect.New(sv.Elem().Type()).Elem() + if err := c.convert(sv.Elem(), tmpdv, scope); err != nil { + return err + } + dv.Set(reflect.ValueOf(tmpdv.Interface())) + return nil + default: + return scope.errorf("couldn't copy '%v' into '%v'; didn't understand types", st, dt) + } + return nil +} + +var stringType = reflect.TypeOf("") + +func toKVValue(v reflect.Value) kvValue { + switch v.Kind() { + case reflect.Struct: + return structAdaptor(v) + case reflect.Map: + if v.Type().Key().AssignableTo(stringType) { + return stringMapAdaptor(v) + } + } + + return nil +} + +// kvValue lets us write the same conversion logic to work with both maps +// and structs. Only maps with string keys make sense for this. +type kvValue interface { + // returns all keys, as a []string. + keys() []string + // Will just return "" for maps. + tagOf(key string) reflect.StructTag + // Will return the zero Value if the key doesn't exist. + value(key string) reflect.Value + // Maps require explicit setting-- will do nothing for structs. + // Returns false on failure. + confirmSet(key string, v reflect.Value) bool +} + +type stringMapAdaptor reflect.Value + +func (a stringMapAdaptor) len() int { + return reflect.Value(a).Len() +} + +func (a stringMapAdaptor) keys() []string { + v := reflect.Value(a) + keys := make([]string, v.Len()) + for i, v := range v.MapKeys() { + if v.IsNil() { + continue + } + switch t := v.Interface().(type) { + case string: + keys[i] = t + } + } + return keys +} + +func (a stringMapAdaptor) tagOf(key string) reflect.StructTag { + return "" +} + +func (a stringMapAdaptor) value(key string) reflect.Value { + return reflect.Value(a).MapIndex(reflect.ValueOf(key)) +} + +func (a stringMapAdaptor) confirmSet(key string, v reflect.Value) bool { + return true +} + +type structAdaptor reflect.Value + +func (a structAdaptor) len() int { + v := reflect.Value(a) + return v.Type().NumField() +} + +func (a structAdaptor) keys() []string { + v := reflect.Value(a) + t := v.Type() + keys := make([]string, t.NumField()) + for i := range keys { + keys[i] = t.Field(i).Name + } + return keys +} + +func (a structAdaptor) tagOf(key string) reflect.StructTag { + v := reflect.Value(a) + field, ok := v.Type().FieldByName(key) + if ok { + return field.Tag + } + return "" +} + +func (a structAdaptor) value(key string) reflect.Value { + v := reflect.Value(a) + return v.FieldByName(key) +} + +func (a structAdaptor) confirmSet(key string, v reflect.Value) bool { + return true +} + +// convertKV can convert things that consist of key/value pairs, like structs +// and some maps. +func (c *Converter) convertKV(skv, dkv kvValue, scope *scope) error { + if skv == nil || dkv == nil { + // TODO: add keys to stack to support really understandable error messages. + return fmt.Errorf("Unable to convert %#v to %#v", skv, dkv) + } + + lister := dkv + if scope.flags.IsSet(SourceToDest) { + lister = skv + } + + var mapping FieldMappingFunc + if scope.meta != nil && scope.meta.KeyNameMapping != nil { + mapping = scope.meta.KeyNameMapping + } + + for _, key := range lister.keys() { + if found, err := c.checkField(key, skv, dkv, scope); found { + if err != nil { + return err + } + continue + } + stag := skv.tagOf(key) + dtag := dkv.tagOf(key) + skey := key + dkey := key + if mapping != nil { + skey, dkey = scope.meta.KeyNameMapping(key, stag, dtag) + } + + df := dkv.value(dkey) + sf := skv.value(skey) + if !df.IsValid() || !sf.IsValid() { + switch { + case scope.flags.IsSet(IgnoreMissingFields): + // No error. + case scope.flags.IsSet(SourceToDest): + return scope.errorf("%v not present in dest", dkey) + default: + return scope.errorf("%v not present in src", skey) + } + continue + } + scope.srcStack.top().key = skey + scope.srcStack.top().tag = stag + scope.destStack.top().key = dkey + scope.destStack.top().tag = dtag + if err := c.convert(sf, df, scope); err != nil { + return err + } + } + return nil +} + +// checkField returns true if the field name matches any of the struct +// field copying rules. The error should be ignored if it returns false. +func (c *Converter) checkField(fieldName string, skv, dkv kvValue, scope *scope) (bool, error) { + replacementMade := false + if scope.flags.IsSet(DestFromSource) { + df := dkv.value(fieldName) + if !df.IsValid() { + return false, nil + } + destKey := typeNamePair{df.Type(), fieldName} + // Check each of the potential source (type, name) pairs to see if they're + // present in sv. + for _, potentialSourceKey := range c.structFieldSources[destKey] { + sf := skv.value(potentialSourceKey.fieldName) + if !sf.IsValid() { + continue + } + if sf.Type() == potentialSourceKey.fieldType { + // Both the source's name and type matched, so copy. + scope.srcStack.top().key = potentialSourceKey.fieldName + scope.destStack.top().key = fieldName + if err := c.convert(sf, df, scope); err != nil { + return true, err + } + dkv.confirmSet(fieldName, df) + replacementMade = true + } + } + return replacementMade, nil + } + + sf := skv.value(fieldName) + if !sf.IsValid() { + return false, nil + } + srcKey := typeNamePair{sf.Type(), fieldName} + // Check each of the potential dest (type, name) pairs to see if they're + // present in dv. + for _, potentialDestKey := range c.structFieldDests[srcKey] { + df := dkv.value(potentialDestKey.fieldName) + if !df.IsValid() { + continue + } + if df.Type() == potentialDestKey.fieldType { + // Both the dest's name and type matched, so copy. + scope.srcStack.top().key = fieldName + scope.destStack.top().key = potentialDestKey.fieldName + if err := c.convert(sf, df, scope); err != nil { + return true, err + } + dkv.confirmSet(potentialDestKey.fieldName, df) + replacementMade = true + } + } + return replacementMade, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/conversion/deep_equal.go b/vendor/k8s.io/client-go/1.4/pkg/conversion/deep_equal.go new file mode 100644 index 00000000..271098f2 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/conversion/deep_equal.go @@ -0,0 +1,36 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package conversion + +import ( + "k8s.io/client-go/1.4/pkg/third_party/forked/golang/reflect" +) + +// The code for this type must be located in third_party, since it forks from +// go std lib. But for convenience, we expose the type here, too. +type Equalities struct { + reflect.Equalities +} + +// For convenience, panics on errors +func EqualitiesOrDie(funcs ...interface{}) Equalities { + e := Equalities{reflect.Equalities{}} + if err := e.AddFuncs(funcs...); err != nil { + panic(err) + } + return e +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/conversion/doc.go b/vendor/k8s.io/client-go/1.4/pkg/conversion/doc.go new file mode 100644 index 00000000..0c46ef2d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/conversion/doc.go @@ -0,0 +1,24 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package conversion provides go object versioning. +// +// Specifically, conversion provides a way for you to define multiple versions +// of the same object. You may write functions which implement conversion logic, +// but for the fields which did not change, copying is automated. This makes it +// easy to modify the structures you use in memory without affecting the format +// you store on disk or respond to in your external API calls. +package conversion diff --git a/vendor/k8s.io/client-go/1.4/pkg/conversion/helper.go b/vendor/k8s.io/client-go/1.4/pkg/conversion/helper.go new file mode 100644 index 00000000..4ebc1ebc --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/conversion/helper.go @@ -0,0 +1,39 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package conversion + +import ( + "fmt" + "reflect" +) + +// EnforcePtr ensures that obj is a pointer of some sort. Returns a reflect.Value +// of the dereferenced pointer, ensuring that it is settable/addressable. +// Returns an error if this is not possible. +func EnforcePtr(obj interface{}) (reflect.Value, error) { + v := reflect.ValueOf(obj) + if v.Kind() != reflect.Ptr { + if v.Kind() == reflect.Invalid { + return reflect.Value{}, fmt.Errorf("expected pointer, but got invalid kind") + } + return reflect.Value{}, fmt.Errorf("expected pointer, but got %v type", v.Type()) + } + if v.IsNil() { + return reflect.Value{}, fmt.Errorf("expected pointer, but got nil") + } + return v.Elem(), nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/conversion/queryparams/convert.go b/vendor/k8s.io/client-go/1.4/pkg/conversion/queryparams/convert.go new file mode 100644 index 00000000..30f717b2 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/conversion/queryparams/convert.go @@ -0,0 +1,188 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package queryparams + +import ( + "fmt" + "net/url" + "reflect" + "strings" +) + +// Marshaler converts an object to a query parameter string representation +type Marshaler interface { + MarshalQueryParameter() (string, error) +} + +// Unmarshaler converts a string representation to an object +type Unmarshaler interface { + UnmarshalQueryParameter(string) error +} + +func jsonTag(field reflect.StructField) (string, bool) { + structTag := field.Tag.Get("json") + if len(structTag) == 0 { + return "", false + } + parts := strings.Split(structTag, ",") + tag := parts[0] + if tag == "-" { + tag = "" + } + omitempty := false + parts = parts[1:] + for _, part := range parts { + if part == "omitempty" { + omitempty = true + break + } + } + return tag, omitempty +} + +func formatValue(value interface{}) string { + return fmt.Sprintf("%v", value) +} + +func isPointerKind(kind reflect.Kind) bool { + return kind == reflect.Ptr +} + +func isStructKind(kind reflect.Kind) bool { + return kind == reflect.Struct +} + +func isValueKind(kind reflect.Kind) bool { + switch kind { + case reflect.String, reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, + reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, + reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Float32, + reflect.Float64, reflect.Complex64, reflect.Complex128: + return true + default: + return false + } +} + +func zeroValue(value reflect.Value) bool { + return reflect.DeepEqual(reflect.Zero(value.Type()).Interface(), value.Interface()) +} + +func customMarshalValue(value reflect.Value) (reflect.Value, bool) { + // Return unless we implement a custom query marshaler + if !value.CanInterface() { + return reflect.Value{}, false + } + + marshaler, ok := value.Interface().(Marshaler) + if !ok { + return reflect.Value{}, false + } + + // Don't invoke functions on nil pointers + // If the type implements MarshalQueryParameter, AND the tag is not omitempty, AND the value is a nil pointer, "" seems like a reasonable response + if isPointerKind(value.Kind()) && zeroValue(value) { + return reflect.ValueOf(""), true + } + + // Get the custom marshalled value + v, err := marshaler.MarshalQueryParameter() + if err != nil { + return reflect.Value{}, false + } + return reflect.ValueOf(v), true +} + +func addParam(values url.Values, tag string, omitempty bool, value reflect.Value) { + if omitempty && zeroValue(value) { + return + } + val := "" + iValue := fmt.Sprintf("%v", value.Interface()) + + if iValue != "" { + val = iValue + } + values.Add(tag, val) +} + +func addListOfParams(values url.Values, tag string, omitempty bool, list reflect.Value) { + for i := 0; i < list.Len(); i++ { + addParam(values, tag, omitempty, list.Index(i)) + } +} + +// Convert takes an object and converts it to a url.Values object using JSON tags as +// parameter names. Only top-level simple values, arrays, and slices are serialized. +// Embedded structs, maps, etc. will not be serialized. +func Convert(obj interface{}) (url.Values, error) { + result := url.Values{} + if obj == nil { + return result, nil + } + var sv reflect.Value + switch reflect.TypeOf(obj).Kind() { + case reflect.Ptr, reflect.Interface: + sv = reflect.ValueOf(obj).Elem() + default: + return nil, fmt.Errorf("expecting a pointer or interface") + } + st := sv.Type() + if !isStructKind(st.Kind()) { + return nil, fmt.Errorf("expecting a pointer to a struct") + } + + // Check all object fields + convertStruct(result, st, sv) + + return result, nil +} + +func convertStruct(result url.Values, st reflect.Type, sv reflect.Value) { + for i := 0; i < st.NumField(); i++ { + field := sv.Field(i) + tag, omitempty := jsonTag(st.Field(i)) + if len(tag) == 0 { + continue + } + ft := field.Type() + + kind := ft.Kind() + if isPointerKind(kind) { + ft = ft.Elem() + kind = ft.Kind() + if !field.IsNil() { + field = reflect.Indirect(field) + } + } + + switch { + case isValueKind(kind): + addParam(result, tag, omitempty, field) + case kind == reflect.Array || kind == reflect.Slice: + if isValueKind(ft.Elem().Kind()) { + addListOfParams(result, tag, omitempty, field) + } + case isStructKind(kind) && !(zeroValue(field) && omitempty): + if marshalValue, ok := customMarshalValue(field); ok { + addParam(result, tag, omitempty, marshalValue) + } else { + convertStruct(result, ft, field) + } + } + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/conversion/queryparams/doc.go b/vendor/k8s.io/client-go/1.4/pkg/conversion/queryparams/doc.go new file mode 100644 index 00000000..4c1002a4 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/conversion/queryparams/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package queryparams provides conversion from versioned +// runtime objects to URL query values +package queryparams diff --git a/vendor/k8s.io/client-go/1.4/pkg/fields/doc.go b/vendor/k8s.io/client-go/1.4/pkg/fields/doc.go new file mode 100644 index 00000000..49059e26 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/fields/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package fields implements a simple field system, parsing and matching +// selectors with sets of fields. +package fields diff --git a/vendor/k8s.io/client-go/1.4/pkg/fields/fields.go b/vendor/k8s.io/client-go/1.4/pkg/fields/fields.go new file mode 100644 index 00000000..623b27e9 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/fields/fields.go @@ -0,0 +1,62 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fields + +import ( + "sort" + "strings" +) + +// Fields allows you to present fields independently from their storage. +type Fields interface { + // Has returns whether the provided field exists. + Has(field string) (exists bool) + + // Get returns the value for the provided field. + Get(field string) (value string) +} + +// Set is a map of field:value. It implements Fields. +type Set map[string]string + +// String returns all fields listed as a human readable string. +// Conveniently, exactly the format that ParseSelector takes. +func (ls Set) String() string { + selector := make([]string, 0, len(ls)) + for key, value := range ls { + selector = append(selector, key+"="+value) + } + // Sort for determinism. + sort.StringSlice(selector).Sort() + return strings.Join(selector, ",") +} + +// Has returns whether the provided field exists in the map. +func (ls Set) Has(field string) bool { + _, exists := ls[field] + return exists +} + +// Get returns the value in the map for the provided field. +func (ls Set) Get(field string) string { + return ls[field] +} + +// AsSelector converts fields into a selectors. +func (ls Set) AsSelector() Selector { + return SelectorFromSet(ls) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/fields/requirements.go b/vendor/k8s.io/client-go/1.4/pkg/fields/requirements.go new file mode 100644 index 00000000..cb123e29 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/fields/requirements.go @@ -0,0 +1,30 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fields + +import "k8s.io/client-go/1.4/pkg/selection" + +// Requirements is AND of all requirements. +type Requirements []Requirement + +// Requirement contains a field, a value, and an operator that relates the field and value. +// This is currently for reading internal selection information of field selector. +type Requirement struct { + Operator selection.Operator + Field string + Value string +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/fields/selector.go b/vendor/k8s.io/client-go/1.4/pkg/fields/selector.go new file mode 100644 index 00000000..5d38358d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/fields/selector.go @@ -0,0 +1,278 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fields + +import ( + "fmt" + "sort" + "strings" + + "k8s.io/client-go/1.4/pkg/selection" +) + +// Selector represents a field selector. +type Selector interface { + // Matches returns true if this selector matches the given set of fields. + Matches(Fields) bool + + // Empty returns true if this selector does not restrict the selection space. + Empty() bool + + // RequiresExactMatch allows a caller to introspect whether a given selector + // requires a single specific field to be set, and if so returns the value it + // requires. + RequiresExactMatch(field string) (value string, found bool) + + // Transform returns a new copy of the selector after TransformFunc has been + // applied to the entire selector, or an error if fn returns an error. + Transform(fn TransformFunc) (Selector, error) + + // Requirements converts this interface to Requirements to expose + // more detailed selection information. + Requirements() Requirements + + // String returns a human readable string that represents this selector. + String() string +} + +// Everything returns a selector that matches all fields. +func Everything() Selector { + return andTerm{} +} + +type hasTerm struct { + field, value string +} + +func (t *hasTerm) Matches(ls Fields) bool { + return ls.Get(t.field) == t.value +} + +func (t *hasTerm) Empty() bool { + return false +} + +func (t *hasTerm) RequiresExactMatch(field string) (value string, found bool) { + if t.field == field { + return t.value, true + } + return "", false +} + +func (t *hasTerm) Transform(fn TransformFunc) (Selector, error) { + field, value, err := fn(t.field, t.value) + if err != nil { + return nil, err + } + return &hasTerm{field, value}, nil +} + +func (t *hasTerm) Requirements() Requirements { + return []Requirement{{ + Field: t.field, + Operator: selection.Equals, + Value: t.value, + }} +} + +func (t *hasTerm) String() string { + return fmt.Sprintf("%v=%v", t.field, t.value) +} + +type notHasTerm struct { + field, value string +} + +func (t *notHasTerm) Matches(ls Fields) bool { + return ls.Get(t.field) != t.value +} + +func (t *notHasTerm) Empty() bool { + return false +} + +func (t *notHasTerm) RequiresExactMatch(field string) (value string, found bool) { + return "", false +} + +func (t *notHasTerm) Transform(fn TransformFunc) (Selector, error) { + field, value, err := fn(t.field, t.value) + if err != nil { + return nil, err + } + return ¬HasTerm{field, value}, nil +} + +func (t *notHasTerm) Requirements() Requirements { + return []Requirement{{ + Field: t.field, + Operator: selection.NotEquals, + Value: t.value, + }} +} + +func (t *notHasTerm) String() string { + return fmt.Sprintf("%v!=%v", t.field, t.value) +} + +type andTerm []Selector + +func (t andTerm) Matches(ls Fields) bool { + for _, q := range t { + if !q.Matches(ls) { + return false + } + } + return true +} + +func (t andTerm) Empty() bool { + if t == nil { + return true + } + if len([]Selector(t)) == 0 { + return true + } + for i := range t { + if !t[i].Empty() { + return false + } + } + return true +} + +func (t andTerm) RequiresExactMatch(field string) (string, bool) { + if t == nil || len([]Selector(t)) == 0 { + return "", false + } + for i := range t { + if value, found := t[i].RequiresExactMatch(field); found { + return value, found + } + } + return "", false +} + +func (t andTerm) Transform(fn TransformFunc) (Selector, error) { + next := make([]Selector, len([]Selector(t))) + for i, s := range []Selector(t) { + n, err := s.Transform(fn) + if err != nil { + return nil, err + } + next[i] = n + } + return andTerm(next), nil +} + +func (t andTerm) Requirements() Requirements { + reqs := make([]Requirement, 0, len(t)) + for _, s := range []Selector(t) { + rs := s.Requirements() + reqs = append(reqs, rs...) + } + return reqs +} + +func (t andTerm) String() string { + var terms []string + for _, q := range t { + terms = append(terms, q.String()) + } + return strings.Join(terms, ",") +} + +// SelectorFromSet returns a Selector which will match exactly the given Set. A +// nil Set is considered equivalent to Everything(). +func SelectorFromSet(ls Set) Selector { + if ls == nil { + return Everything() + } + items := make([]Selector, 0, len(ls)) + for field, value := range ls { + items = append(items, &hasTerm{field: field, value: value}) + } + if len(items) == 1 { + return items[0] + } + return andTerm(items) +} + +// ParseSelectorOrDie takes a string representing a selector and returns an +// object suitable for matching, or panic when an error occur. +func ParseSelectorOrDie(s string) Selector { + selector, err := ParseSelector(s) + if err != nil { + panic(err) + } + return selector +} + +// ParseSelector takes a string representing a selector and returns an +// object suitable for matching, or an error. +func ParseSelector(selector string) (Selector, error) { + return parseSelector(selector, + func(lhs, rhs string) (newLhs, newRhs string, err error) { + return lhs, rhs, nil + }) +} + +// Parses the selector and runs them through the given TransformFunc. +func ParseAndTransformSelector(selector string, fn TransformFunc) (Selector, error) { + return parseSelector(selector, fn) +} + +// Function to transform selectors. +type TransformFunc func(field, value string) (newField, newValue string, err error) + +func try(selectorPiece, op string) (lhs, rhs string, ok bool) { + pieces := strings.Split(selectorPiece, op) + if len(pieces) == 2 { + return pieces[0], pieces[1], true + } + return "", "", false +} + +func parseSelector(selector string, fn TransformFunc) (Selector, error) { + parts := strings.Split(selector, ",") + sort.StringSlice(parts).Sort() + var items []Selector + for _, part := range parts { + if part == "" { + continue + } + if lhs, rhs, ok := try(part, "!="); ok { + items = append(items, ¬HasTerm{field: lhs, value: rhs}) + } else if lhs, rhs, ok := try(part, "=="); ok { + items = append(items, &hasTerm{field: lhs, value: rhs}) + } else if lhs, rhs, ok := try(part, "="); ok { + items = append(items, &hasTerm{field: lhs, value: rhs}) + } else { + return nil, fmt.Errorf("invalid selector: '%s'; can't understand '%s'", selector, part) + } + } + if len(items) == 1 { + return items[0].Transform(fn) + } + return andTerm(items).Transform(fn) +} + +// OneTermEqualSelector returns an object that matches objects where one field/field equals one value. +// Cannot return an error. +func OneTermEqualSelector(k, v string) Selector { + return &hasTerm{field: k, value: v} +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/labels/doc.go b/vendor/k8s.io/client-go/1.4/pkg/labels/doc.go new file mode 100644 index 00000000..35ba7880 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/labels/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package labels implements a simple label system, parsing and matching +// selectors with sets of labels. +package labels diff --git a/vendor/k8s.io/client-go/1.4/pkg/labels/labels.go b/vendor/k8s.io/client-go/1.4/pkg/labels/labels.go new file mode 100644 index 00000000..822b137a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/labels/labels.go @@ -0,0 +1,80 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package labels + +import ( + "sort" + "strings" +) + +// Labels allows you to present labels independently from their storage. +type Labels interface { + // Has returns whether the provided label exists. + Has(label string) (exists bool) + + // Get returns the value for the provided label. + Get(label string) (value string) +} + +// Set is a map of label:value. It implements Labels. +type Set map[string]string + +// String returns all labels listed as a human readable string. +// Conveniently, exactly the format that ParseSelector takes. +func (ls Set) String() string { + selector := make([]string, 0, len(ls)) + for key, value := range ls { + selector = append(selector, key+"="+value) + } + // Sort for determinism. + sort.StringSlice(selector).Sort() + return strings.Join(selector, ",") +} + +// Has returns whether the provided label exists in the map. +func (ls Set) Has(label string) bool { + _, exists := ls[label] + return exists +} + +// Get returns the value in the map for the provided label. +func (ls Set) Get(label string) string { + return ls[label] +} + +// AsSelector converts labels into a selectors. +func (ls Set) AsSelector() Selector { + return SelectorFromSet(ls) +} + +// AsSelectorPreValidated converts labels into a selector, but +// assumes that labels are already validated and thus don't +// preform any validation. +// According to our measurements this is significantly faster +// in codepaths that matter at high sccale. +func (ls Set) AsSelectorPreValidated() Selector { + return SelectorFromValidatedSet(ls) +} + +// FormatLables convert label map into plain string +func FormatLabels(labelMap map[string]string) string { + l := Set(labelMap).String() + if l == "" { + l = "" + } + return l +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/labels/selector.go b/vendor/k8s.io/client-go/1.4/pkg/labels/selector.go new file mode 100644 index 00000000..cee751a5 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/labels/selector.go @@ -0,0 +1,822 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package labels + +import ( + "bytes" + "fmt" + "sort" + "strconv" + "strings" + + "github.com/golang/glog" + "k8s.io/client-go/1.4/pkg/selection" + "k8s.io/client-go/1.4/pkg/util/sets" + "k8s.io/client-go/1.4/pkg/util/validation" +) + +// Requirements is AND of all requirements. +type Requirements []Requirement + +// Selector represents a label selector. +type Selector interface { + // Matches returns true if this selector matches the given set of labels. + Matches(Labels) bool + + // Empty returns true if this selector does not restrict the selection space. + Empty() bool + + // String returns a human readable string that represents this selector. + String() string + + // Add adds requirements to the Selector + Add(r ...Requirement) Selector + + // Requirements converts this interface into Requirements to expose + // more detailed selection information. + // If there are querying parameters, it will return converted requirements and selectable=true. + // If this selector doesn't want to select anything, it will return selectable=false. + Requirements() (requirements Requirements, selectable bool) +} + +// Everything returns a selector that matches all labels. +func Everything() Selector { + return internalSelector{} +} + +type nothingSelector struct{} + +func (n nothingSelector) Matches(_ Labels) bool { return false } +func (n nothingSelector) Empty() bool { return false } +func (n nothingSelector) String() string { return "" } +func (n nothingSelector) Add(_ ...Requirement) Selector { return n } +func (n nothingSelector) Requirements() (Requirements, bool) { return nil, false } + +// Nothing returns a selector that matches no labels +func Nothing() Selector { + return nothingSelector{} +} + +func NewSelector() Selector { + return internalSelector(nil) +} + +type internalSelector []Requirement + +// Sort by key to obtain determisitic parser +type ByKey []Requirement + +func (a ByKey) Len() int { return len(a) } + +func (a ByKey) Swap(i, j int) { a[i], a[j] = a[j], a[i] } + +func (a ByKey) Less(i, j int) bool { return a[i].key < a[j].key } + +// Requirement contains values, a key, and an operator that relates the key and values. +// The zero value of Requirement is invalid. +// Requirement implements both set based match and exact match +// Requirement should be initialized via NewRequirement constructor for creating a valid Requirement. +type Requirement struct { + key string + operator selection.Operator + strValues sets.String +} + +// NewRequirement is the constructor for a Requirement. +// If any of these rules is violated, an error is returned: +// (1) The operator can only be In, NotIn, Equals, DoubleEquals, NotEquals, Exists, or DoesNotExist. +// (2) If the operator is In or NotIn, the values set must be non-empty. +// (3) If the operator is Equals, DoubleEquals, or NotEquals, the values set must contain one value. +// (4) If the operator is Exists or DoesNotExist, the value set must be empty. +// (5) If the operator is Gt or Lt, the values set must contain only one value, which will be interpreted as an integer. +// (6) The key is invalid due to its length, or sequence +// of characters. See validateLabelKey for more details. +// +// The empty string is a valid value in the input values set. +func NewRequirement(key string, op selection.Operator, vals sets.String) (*Requirement, error) { + if err := validateLabelKey(key); err != nil { + return nil, err + } + switch op { + case selection.In, selection.NotIn: + if len(vals) == 0 { + return nil, fmt.Errorf("for 'in', 'notin' operators, values set can't be empty") + } + case selection.Equals, selection.DoubleEquals, selection.NotEquals: + if len(vals) != 1 { + return nil, fmt.Errorf("exact-match compatibility requires one single value") + } + case selection.Exists, selection.DoesNotExist: + if len(vals) != 0 { + return nil, fmt.Errorf("values set must be empty for exists and does not exist") + } + case selection.GreaterThan, selection.LessThan: + if len(vals) != 1 { + return nil, fmt.Errorf("for 'Gt', 'Lt' operators, exactly one value is required") + } + for val := range vals { + if _, err := strconv.ParseInt(val, 10, 64); err != nil { + return nil, fmt.Errorf("for 'Gt', 'Lt' operators, the value must be an integer") + } + } + default: + return nil, fmt.Errorf("operator '%v' is not recognized", op) + } + + for v := range vals { + if err := validateLabelValue(v); err != nil { + return nil, err + } + } + return &Requirement{key: key, operator: op, strValues: vals}, nil +} + +// Matches returns true if the Requirement matches the input Labels. +// There is a match in the following cases: +// (1) The operator is Exists and Labels has the Requirement's key. +// (2) The operator is In, Labels has the Requirement's key and Labels' +// value for that key is in Requirement's value set. +// (3) The operator is NotIn, Labels has the Requirement's key and +// Labels' value for that key is not in Requirement's value set. +// (4) The operator is DoesNotExist or NotIn and Labels does not have the +// Requirement's key. +// (5) The operator is GreaterThanOperator or LessThanOperator, and Labels has +// the Requirement's key and the corresponding value satisfies mathematical inequality. +func (r *Requirement) Matches(ls Labels) bool { + switch r.operator { + case selection.In, selection.Equals, selection.DoubleEquals: + if !ls.Has(r.key) { + return false + } + return r.strValues.Has(ls.Get(r.key)) + case selection.NotIn, selection.NotEquals: + if !ls.Has(r.key) { + return true + } + return !r.strValues.Has(ls.Get(r.key)) + case selection.Exists: + return ls.Has(r.key) + case selection.DoesNotExist: + return !ls.Has(r.key) + case selection.GreaterThan, selection.LessThan: + if !ls.Has(r.key) { + return false + } + lsValue, err := strconv.ParseInt(ls.Get(r.key), 10, 64) + if err != nil { + glog.V(10).Infof("ParseInt failed for value %+v in label %+v, %+v", ls.Get(r.key), ls, err) + return false + } + + // There should be only one strValue in r.strValues, and can be converted to a integer. + if len(r.strValues) != 1 { + glog.V(10).Infof("Invalid values count %+v of requirement %#v, for 'Gt', 'Lt' operators, exactly one value is required", len(r.strValues), r) + return false + } + + var rValue int64 + for strValue := range r.strValues { + rValue, err = strconv.ParseInt(strValue, 10, 64) + if err != nil { + glog.V(10).Infof("ParseInt failed for value %+v in requirement %#v, for 'Gt', 'Lt' operators, the value must be an integer", strValue, r) + return false + } + } + return (r.operator == selection.GreaterThan && lsValue > rValue) || (r.operator == selection.LessThan && lsValue < rValue) + default: + return false + } +} + +func (r *Requirement) Key() string { + return r.key +} +func (r *Requirement) Operator() selection.Operator { + return r.operator +} +func (r *Requirement) Values() sets.String { + ret := sets.String{} + for k := range r.strValues { + ret.Insert(k) + } + return ret +} + +// Return true if the internalSelector doesn't restrict selection space +func (lsel internalSelector) Empty() bool { + if lsel == nil { + return true + } + return len(lsel) == 0 +} + +// String returns a human-readable string that represents this +// Requirement. If called on an invalid Requirement, an error is +// returned. See NewRequirement for creating a valid Requirement. +func (r *Requirement) String() string { + var buffer bytes.Buffer + if r.operator == selection.DoesNotExist { + buffer.WriteString("!") + } + buffer.WriteString(r.key) + + switch r.operator { + case selection.Equals: + buffer.WriteString("=") + case selection.DoubleEquals: + buffer.WriteString("==") + case selection.NotEquals: + buffer.WriteString("!=") + case selection.In: + buffer.WriteString(" in ") + case selection.NotIn: + buffer.WriteString(" notin ") + case selection.GreaterThan: + buffer.WriteString(">") + case selection.LessThan: + buffer.WriteString("<") + case selection.Exists, selection.DoesNotExist: + return buffer.String() + } + + switch r.operator { + case selection.In, selection.NotIn: + buffer.WriteString("(") + } + if len(r.strValues) == 1 { + buffer.WriteString(r.strValues.List()[0]) + } else { // only > 1 since == 0 prohibited by NewRequirement + buffer.WriteString(strings.Join(r.strValues.List(), ",")) + } + + switch r.operator { + case selection.In, selection.NotIn: + buffer.WriteString(")") + } + return buffer.String() +} + +// Add adds requirements to the selector. It copies the current selector returning a new one +func (lsel internalSelector) Add(reqs ...Requirement) Selector { + var sel internalSelector + for ix := range lsel { + sel = append(sel, lsel[ix]) + } + for _, r := range reqs { + sel = append(sel, r) + } + sort.Sort(ByKey(sel)) + return sel +} + +// Matches for a internalSelector returns true if all +// its Requirements match the input Labels. If any +// Requirement does not match, false is returned. +func (lsel internalSelector) Matches(l Labels) bool { + for ix := range lsel { + if matches := lsel[ix].Matches(l); !matches { + return false + } + } + return true +} + +func (lsel internalSelector) Requirements() (Requirements, bool) { return Requirements(lsel), true } + +// String returns a comma-separated string of all +// the internalSelector Requirements' human-readable strings. +func (lsel internalSelector) String() string { + var reqs []string + for ix := range lsel { + reqs = append(reqs, lsel[ix].String()) + } + return strings.Join(reqs, ",") +} + +// constants definition for lexer token +type Token int + +const ( + ErrorToken Token = iota + EndOfStringToken + ClosedParToken + CommaToken + DoesNotExistToken + DoubleEqualsToken + EqualsToken + GreaterThanToken + IdentifierToken // to represent keys and values + InToken + LessThanToken + NotEqualsToken + NotInToken + OpenParToken +) + +// string2token contains the mapping between lexer Token and token literal +// (except IdentifierToken, EndOfStringToken and ErrorToken since it makes no sense) +var string2token = map[string]Token{ + ")": ClosedParToken, + ",": CommaToken, + "!": DoesNotExistToken, + "==": DoubleEqualsToken, + "=": EqualsToken, + ">": GreaterThanToken, + "in": InToken, + "<": LessThanToken, + "!=": NotEqualsToken, + "notin": NotInToken, + "(": OpenParToken, +} + +// The item produced by the lexer. It contains the Token and the literal. +type ScannedItem struct { + tok Token + literal string +} + +// isWhitespace returns true if the rune is a space, tab, or newline. +func isWhitespace(ch byte) bool { + return ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' +} + +// isSpecialSymbol detect if the character ch can be an operator +func isSpecialSymbol(ch byte) bool { + switch ch { + case '=', '!', '(', ')', ',', '>', '<': + return true + } + return false +} + +// Lexer represents the Lexer struct for label selector. +// It contains necessary informationt to tokenize the input string +type Lexer struct { + // s stores the string to be tokenized + s string + // pos is the position currently tokenized + pos int +} + +// read return the character currently lexed +// increment the position and check the buffer overflow +func (l *Lexer) read() (b byte) { + b = 0 + if l.pos < len(l.s) { + b = l.s[l.pos] + l.pos++ + } + return b +} + +// unread 'undoes' the last read character +func (l *Lexer) unread() { + l.pos-- +} + +// scanIdOrKeyword scans string to recognize literal token (for example 'in') or an identifier. +func (l *Lexer) scanIdOrKeyword() (tok Token, lit string) { + var buffer []byte +IdentifierLoop: + for { + switch ch := l.read(); { + case ch == 0: + break IdentifierLoop + case isSpecialSymbol(ch) || isWhitespace(ch): + l.unread() + break IdentifierLoop + default: + buffer = append(buffer, ch) + } + } + s := string(buffer) + if val, ok := string2token[s]; ok { // is a literal token? + return val, s + } + return IdentifierToken, s // otherwise is an identifier +} + +// scanSpecialSymbol scans string starting with special symbol. +// special symbol identify non literal operators. "!=", "==", "=" +func (l *Lexer) scanSpecialSymbol() (Token, string) { + lastScannedItem := ScannedItem{} + var buffer []byte +SpecialSymbolLoop: + for { + switch ch := l.read(); { + case ch == 0: + break SpecialSymbolLoop + case isSpecialSymbol(ch): + buffer = append(buffer, ch) + if token, ok := string2token[string(buffer)]; ok { + lastScannedItem = ScannedItem{tok: token, literal: string(buffer)} + } else if lastScannedItem.tok != 0 { + l.unread() + break SpecialSymbolLoop + } + default: + l.unread() + break SpecialSymbolLoop + } + } + if lastScannedItem.tok == 0 { + return ErrorToken, fmt.Sprintf("error expected: keyword found '%s'", buffer) + } + return lastScannedItem.tok, lastScannedItem.literal +} + +// skipWhiteSpaces consumes all blank characters +// returning the first non blank character +func (l *Lexer) skipWhiteSpaces(ch byte) byte { + for { + if !isWhitespace(ch) { + return ch + } + ch = l.read() + } +} + +// Lex returns a pair of Token and the literal +// literal is meaningfull only for IdentifierToken token +func (l *Lexer) Lex() (tok Token, lit string) { + switch ch := l.skipWhiteSpaces(l.read()); { + case ch == 0: + return EndOfStringToken, "" + case isSpecialSymbol(ch): + l.unread() + return l.scanSpecialSymbol() + default: + l.unread() + return l.scanIdOrKeyword() + } +} + +// Parser data structure contains the label selector parser data structure +type Parser struct { + l *Lexer + scannedItems []ScannedItem + position int +} + +// Parser context represents context during parsing: +// some literal for example 'in' and 'notin' can be +// recognized as operator for example 'x in (a)' but +// it can be recognized as value for example 'value in (in)' +type ParserContext int + +const ( + KeyAndOperator ParserContext = iota + Values +) + +// lookahead func returns the current token and string. No increment of current position +func (p *Parser) lookahead(context ParserContext) (Token, string) { + tok, lit := p.scannedItems[p.position].tok, p.scannedItems[p.position].literal + if context == Values { + switch tok { + case InToken, NotInToken: + tok = IdentifierToken + } + } + return tok, lit +} + +// consume returns current token and string. Increments the the position +func (p *Parser) consume(context ParserContext) (Token, string) { + p.position++ + tok, lit := p.scannedItems[p.position-1].tok, p.scannedItems[p.position-1].literal + if context == Values { + switch tok { + case InToken, NotInToken: + tok = IdentifierToken + } + } + return tok, lit +} + +// scan runs through the input string and stores the ScannedItem in an array +// Parser can now lookahead and consume the tokens +func (p *Parser) scan() { + for { + token, literal := p.l.Lex() + p.scannedItems = append(p.scannedItems, ScannedItem{token, literal}) + if token == EndOfStringToken { + break + } + } +} + +// parse runs the left recursive descending algorithm +// on input string. It returns a list of Requirement objects. +func (p *Parser) parse() (internalSelector, error) { + p.scan() // init scannedItems + + var requirements internalSelector + for { + tok, lit := p.lookahead(Values) + switch tok { + case IdentifierToken, DoesNotExistToken: + r, err := p.parseRequirement() + if err != nil { + return nil, fmt.Errorf("unable to parse requirement: %v", err) + } + requirements = append(requirements, *r) + t, l := p.consume(Values) + switch t { + case EndOfStringToken: + return requirements, nil + case CommaToken: + t2, l2 := p.lookahead(Values) + if t2 != IdentifierToken && t2 != DoesNotExistToken { + return nil, fmt.Errorf("found '%s', expected: identifier after ','", l2) + } + default: + return nil, fmt.Errorf("found '%s', expected: ',' or 'end of string'", l) + } + case EndOfStringToken: + return requirements, nil + default: + return nil, fmt.Errorf("found '%s', expected: !, identifier, or 'end of string'", lit) + } + } +} + +func (p *Parser) parseRequirement() (*Requirement, error) { + key, operator, err := p.parseKeyAndInferOperator() + if err != nil { + return nil, err + } + if operator == selection.Exists || operator == selection.DoesNotExist { // operator found lookahead set checked + return NewRequirement(key, operator, nil) + } + operator, err = p.parseOperator() + if err != nil { + return nil, err + } + var values sets.String + switch operator { + case selection.In, selection.NotIn: + values, err = p.parseValues() + case selection.Equals, selection.DoubleEquals, selection.NotEquals, selection.GreaterThan, selection.LessThan: + values, err = p.parseExactValue() + } + if err != nil { + return nil, err + } + return NewRequirement(key, operator, values) + +} + +// parseKeyAndInferOperator parse literals. +// in case of no operator '!, in, notin, ==, =, !=' are found +// the 'exists' operator is inferred +func (p *Parser) parseKeyAndInferOperator() (string, selection.Operator, error) { + var operator selection.Operator + tok, literal := p.consume(Values) + if tok == DoesNotExistToken { + operator = selection.DoesNotExist + tok, literal = p.consume(Values) + } + if tok != IdentifierToken { + err := fmt.Errorf("found '%s', expected: identifier", literal) + return "", "", err + } + if err := validateLabelKey(literal); err != nil { + return "", "", err + } + if t, _ := p.lookahead(Values); t == EndOfStringToken || t == CommaToken { + if operator != selection.DoesNotExist { + operator = selection.Exists + } + } + return literal, operator, nil +} + +// parseOperator return operator and eventually matchType +// matchType can be exact +func (p *Parser) parseOperator() (op selection.Operator, err error) { + tok, lit := p.consume(KeyAndOperator) + switch tok { + // DoesNotExistToken shouldn't be here because it's a unary operator, not a binary operator + case InToken: + op = selection.In + case EqualsToken: + op = selection.Equals + case DoubleEqualsToken: + op = selection.DoubleEquals + case GreaterThanToken: + op = selection.GreaterThan + case LessThanToken: + op = selection.LessThan + case NotInToken: + op = selection.NotIn + case NotEqualsToken: + op = selection.NotEquals + default: + return "", fmt.Errorf("found '%s', expected: '=', '!=', '==', 'in', notin'", lit) + } + return op, nil +} + +// parseValues parses the values for set based matching (x,y,z) +func (p *Parser) parseValues() (sets.String, error) { + tok, lit := p.consume(Values) + if tok != OpenParToken { + return nil, fmt.Errorf("found '%s' expected: '('", lit) + } + tok, lit = p.lookahead(Values) + switch tok { + case IdentifierToken, CommaToken: + s, err := p.parseIdentifiersList() // handles general cases + if err != nil { + return s, err + } + if tok, _ = p.consume(Values); tok != ClosedParToken { + return nil, fmt.Errorf("found '%s', expected: ')'", lit) + } + return s, nil + case ClosedParToken: // handles "()" + p.consume(Values) + return sets.NewString(""), nil + default: + return nil, fmt.Errorf("found '%s', expected: ',', ')' or identifier", lit) + } +} + +// parseIdentifiersList parses a (possibly empty) list of +// of comma separated (possibly empty) identifiers +func (p *Parser) parseIdentifiersList() (sets.String, error) { + s := sets.NewString() + for { + tok, lit := p.consume(Values) + switch tok { + case IdentifierToken: + s.Insert(lit) + tok2, lit2 := p.lookahead(Values) + switch tok2 { + case CommaToken: + continue + case ClosedParToken: + return s, nil + default: + return nil, fmt.Errorf("found '%s', expected: ',' or ')'", lit2) + } + case CommaToken: // handled here since we can have "(," + if s.Len() == 0 { + s.Insert("") // to handle (, + } + tok2, _ := p.lookahead(Values) + if tok2 == ClosedParToken { + s.Insert("") // to handle ,) Double "" removed by StringSet + return s, nil + } + if tok2 == CommaToken { + p.consume(Values) + s.Insert("") // to handle ,, Double "" removed by StringSet + } + default: // it can be operator + return s, fmt.Errorf("found '%s', expected: ',', or identifier", lit) + } + } +} + +// parseExactValue parses the only value for exact match style +func (p *Parser) parseExactValue() (sets.String, error) { + s := sets.NewString() + tok, lit := p.lookahead(Values) + if tok == EndOfStringToken || tok == CommaToken { + s.Insert("") + return s, nil + } + tok, lit = p.consume(Values) + if tok == IdentifierToken { + s.Insert(lit) + return s, nil + } + return nil, fmt.Errorf("found '%s', expected: identifier", lit) +} + +// Parse takes a string representing a selector and returns a selector +// object, or an error. This parsing function differs from ParseSelector +// as they parse different selectors with different syntaxes. +// The input will cause an error if it does not follow this form: +// +// ::= | "," ] +// ::= [!] KEY [ | ] +// ::= "" | +// ::= | +// ::= "notin" +// ::= "in" +// ::= "(" ")" +// ::= VALUE | VALUE "," +// ::= ["="|"=="|"!="] VALUE +// KEY is a sequence of one or more characters following [ DNS_SUBDOMAIN "/" ] DNS_LABEL. Max length is 63 characters. +// VALUE is a sequence of zero or more characters "([A-Za-z0-9_-\.])". Max length is 63 characters. +// Delimiter is white space: (' ', '\t') +// Example of valid syntax: +// "x in (foo,,baz),y,z notin ()" +// +// Note: +// (1) Inclusion - " in " - denotes that the KEY exists and is equal to any of the +// VALUEs in its requirement +// (2) Exclusion - " notin " - denotes that the KEY is not equal to any +// of the VALUEs in its requirement or does not exist +// (3) The empty string is a valid VALUE +// (4) A requirement with just a KEY - as in "y" above - denotes that +// the KEY exists and can be any VALUE. +// (5) A requirement with just !KEY requires that the KEY not exist. +// +func Parse(selector string) (Selector, error) { + parsedSelector, err := parse(selector) + if err == nil { + return parsedSelector, nil + } + return nil, err +} + +// parse parses the string representation of the selector and returns the internalSelector struct. +// The callers of this method can then decide how to return the internalSelector struct to their +// callers. This function has two callers now, one returns a Selector interface and the other +// returns a list of requirements. +func parse(selector string) (internalSelector, error) { + p := &Parser{l: &Lexer{s: selector, pos: 0}} + items, err := p.parse() + if err != nil { + return nil, err + } + sort.Sort(ByKey(items)) // sort to grant determistic parsing + return internalSelector(items), err +} + +func validateLabelKey(k string) error { + if errs := validation.IsQualifiedName(k); len(errs) != 0 { + return fmt.Errorf("invalid label key %q: %s", k, strings.Join(errs, "; ")) + } + return nil +} + +func validateLabelValue(v string) error { + if errs := validation.IsValidLabelValue(v); len(errs) != 0 { + return fmt.Errorf("invalid label value: %q: %s", v, strings.Join(errs, "; ")) + } + return nil +} + +// SelectorFromSet returns a Selector which will match exactly the given Set. A +// nil and empty Sets are considered equivalent to Everything(). +func SelectorFromSet(ls Set) Selector { + if ls == nil { + return internalSelector{} + } + var requirements internalSelector + for label, value := range ls { + if r, err := NewRequirement(label, selection.Equals, sets.NewString(value)); err != nil { + //TODO: double check errors when input comes from serialization? + return internalSelector{} + } else { + requirements = append(requirements, *r) + } + } + // sort to have deterministic string representation + sort.Sort(ByKey(requirements)) + return internalSelector(requirements) +} + +// SelectorFromValidatedSet returns a Selector which will match exactly the given Set. +// A nil and empty Sets are considered equivalent to Everything(). +// It assumes that Set is already validated and doesn't do any validation. +func SelectorFromValidatedSet(ls Set) Selector { + if ls == nil { + return internalSelector{} + } + var requirements internalSelector + for label, value := range ls { + requirements = append(requirements, Requirement{key: label, operator: selection.Equals, strValues: sets.NewString(value)}) + } + // sort to have deterministic string representation + sort.Sort(ByKey(requirements)) + return internalSelector(requirements) +} + +// ParseToRequirements takes a string representing a selector and returns a list of +// requirements. This function is suitable for those callers that perform additional +// processing on selector requirements. +// See the documentation for Parse() function for more details. +// TODO: Consider exporting the internalSelector type instead. +func ParseToRequirements(selector string) ([]Requirement, error) { + return parse(selector) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/OWNERS b/vendor/k8s.io/client-go/1.4/pkg/runtime/OWNERS new file mode 100644 index 00000000..d038b5e9 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/OWNERS @@ -0,0 +1,5 @@ +assignees: + - caesarxuchao + - deads2k + - lavalamp + - smarterclayton diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/codec.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/codec.go new file mode 100644 index 00000000..8577eb61 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/codec.go @@ -0,0 +1,280 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "bytes" + "encoding/base64" + "fmt" + "io" + "net/url" + "reflect" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion/queryparams" +) + +// codec binds an encoder and decoder. +type codec struct { + Encoder + Decoder +} + +// NewCodec creates a Codec from an Encoder and Decoder. +func NewCodec(e Encoder, d Decoder) Codec { + return codec{e, d} +} + +// Encode is a convenience wrapper for encoding to a []byte from an Encoder +func Encode(e Encoder, obj Object) ([]byte, error) { + // TODO: reuse buffer + buf := &bytes.Buffer{} + if err := e.Encode(obj, buf); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +// Decode is a convenience wrapper for decoding data into an Object. +func Decode(d Decoder, data []byte) (Object, error) { + obj, _, err := d.Decode(data, nil, nil) + return obj, err +} + +// DecodeInto performs a Decode into the provided object. +func DecodeInto(d Decoder, data []byte, into Object) error { + out, gvk, err := d.Decode(data, nil, into) + if err != nil { + return err + } + if out != into { + return fmt.Errorf("unable to decode %s into %v", gvk, reflect.TypeOf(into)) + } + return nil +} + +// EncodeOrDie is a version of Encode which will panic instead of returning an error. For tests. +func EncodeOrDie(e Encoder, obj Object) string { + bytes, err := Encode(e, obj) + if err != nil { + panic(err) + } + return string(bytes) +} + +// UseOrCreateObject returns obj if the canonical ObjectKind returned by the provided typer matches gvk, or +// invokes the ObjectCreator to instantiate a new gvk. Returns an error if the typer cannot find the object. +func UseOrCreateObject(t ObjectTyper, c ObjectCreater, gvk unversioned.GroupVersionKind, obj Object) (Object, error) { + if obj != nil { + kinds, _, err := t.ObjectKinds(obj) + if err != nil { + return nil, err + } + for _, kind := range kinds { + if gvk == kind { + return obj, nil + } + } + } + return c.New(gvk) +} + +// NoopEncoder converts an Decoder to a Serializer or Codec for code that expects them but only uses decoding. +type NoopEncoder struct { + Decoder +} + +var _ Serializer = NoopEncoder{} + +func (n NoopEncoder) Encode(obj Object, w io.Writer) error { + return fmt.Errorf("encoding is not allowed for this codec: %v", reflect.TypeOf(n.Decoder)) +} + +// NoopDecoder converts an Encoder to a Serializer or Codec for code that expects them but only uses encoding. +type NoopDecoder struct { + Encoder +} + +var _ Serializer = NoopDecoder{} + +func (n NoopDecoder) Decode(data []byte, gvk *unversioned.GroupVersionKind, into Object) (Object, *unversioned.GroupVersionKind, error) { + return nil, nil, fmt.Errorf("decoding is not allowed for this codec: %v", reflect.TypeOf(n.Encoder)) +} + +// NewParameterCodec creates a ParameterCodec capable of transforming url values into versioned objects and back. +func NewParameterCodec(scheme *Scheme) ParameterCodec { + return ¶meterCodec{ + typer: scheme, + convertor: scheme, + creator: scheme, + } +} + +// parameterCodec implements conversion to and from query parameters and objects. +type parameterCodec struct { + typer ObjectTyper + convertor ObjectConvertor + creator ObjectCreater +} + +var _ ParameterCodec = ¶meterCodec{} + +// DecodeParameters converts the provided url.Values into an object of type From with the kind of into, and then +// converts that object to into (if necessary). Returns an error if the operation cannot be completed. +func (c *parameterCodec) DecodeParameters(parameters url.Values, from unversioned.GroupVersion, into Object) error { + if len(parameters) == 0 { + return nil + } + targetGVKs, _, err := c.typer.ObjectKinds(into) + if err != nil { + return err + } + targetGVK := targetGVKs[0] + if targetGVK.GroupVersion() == from { + return c.convertor.Convert(¶meters, into, nil) + } + input, err := c.creator.New(from.WithKind(targetGVK.Kind)) + if err != nil { + return err + } + if err := c.convertor.Convert(¶meters, input, nil); err != nil { + return err + } + return c.convertor.Convert(input, into, nil) +} + +// EncodeParameters converts the provided object into the to version, then converts that object to url.Values. +// Returns an error if conversion is not possible. +func (c *parameterCodec) EncodeParameters(obj Object, to unversioned.GroupVersion) (url.Values, error) { + gvks, _, err := c.typer.ObjectKinds(obj) + if err != nil { + return nil, err + } + gvk := gvks[0] + if to != gvk.GroupVersion() { + out, err := c.convertor.ConvertToVersion(obj, to) + if err != nil { + return nil, err + } + obj = out + } + return queryparams.Convert(obj) +} + +type base64Serializer struct { + Serializer +} + +func NewBase64Serializer(s Serializer) Serializer { + return &base64Serializer{s} +} + +func (s base64Serializer) Encode(obj Object, stream io.Writer) error { + e := base64.NewEncoder(base64.StdEncoding, stream) + err := s.Serializer.Encode(obj, e) + e.Close() + return err +} + +func (s base64Serializer) Decode(data []byte, defaults *unversioned.GroupVersionKind, into Object) (Object, *unversioned.GroupVersionKind, error) { + out := make([]byte, base64.StdEncoding.DecodedLen(len(data))) + n, err := base64.StdEncoding.Decode(out, data) + if err != nil { + return nil, nil, err + } + return s.Serializer.Decode(out[:n], defaults, into) +} + +var ( + // InternalGroupVersioner will always prefer the internal version for a given group version kind. + InternalGroupVersioner GroupVersioner = internalGroupVersioner{} + // DisabledGroupVersioner will reject all kinds passed to it. + DisabledGroupVersioner GroupVersioner = disabledGroupVersioner{} +) + +type internalGroupVersioner struct{} + +// KindForGroupVersionKinds returns an internal Kind if one is found, or converts the first provided kind to the internal version. +func (internalGroupVersioner) KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (unversioned.GroupVersionKind, bool) { + for _, kind := range kinds { + if kind.Version == APIVersionInternal { + return kind, true + } + } + for _, kind := range kinds { + return unversioned.GroupVersionKind{Group: kind.Group, Version: APIVersionInternal, Kind: kind.Kind}, true + } + return unversioned.GroupVersionKind{}, false +} + +type disabledGroupVersioner struct{} + +// KindForGroupVersionKinds returns false for any input. +func (disabledGroupVersioner) KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (unversioned.GroupVersionKind, bool) { + return unversioned.GroupVersionKind{}, false +} + +// GroupVersioners implements GroupVersioner and resolves to the first exact match for any kind. +type GroupVersioners []GroupVersioner + +// KindForGroupVersionKinds returns the first match of any of the group versioners, or false if no match occured. +func (gvs GroupVersioners) KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (unversioned.GroupVersionKind, bool) { + for _, gv := range gvs { + target, ok := gv.KindForGroupVersionKinds(kinds) + if !ok { + continue + } + return target, true + } + return unversioned.GroupVersionKind{}, false +} + +// Assert that unversioned.GroupVersion and GroupVersions implement GroupVersioner +var _ GroupVersioner = unversioned.GroupVersion{} +var _ GroupVersioner = unversioned.GroupVersions{} +var _ GroupVersioner = multiGroupVersioner{} + +type multiGroupVersioner struct { + target unversioned.GroupVersion + acceptedGroupKinds []unversioned.GroupKind +} + +// NewMultiGroupVersioner returns the provided group version for any kind that matches one of the provided group kinds. +// Kind may be empty in the provided group kind, in which case any kind will match. +func NewMultiGroupVersioner(gv unversioned.GroupVersion, groupKinds ...unversioned.GroupKind) GroupVersioner { + if len(groupKinds) == 0 || (len(groupKinds) == 1 && groupKinds[0].Group == gv.Group) { + return gv + } + return multiGroupVersioner{target: gv, acceptedGroupKinds: groupKinds} +} + +// KindForGroupVersionKinds returns the target group version if any kind matches any of the original group kinds. It will +// use the originating kind where possible. +func (v multiGroupVersioner) KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (unversioned.GroupVersionKind, bool) { + for _, src := range kinds { + for _, kind := range v.acceptedGroupKinds { + if kind.Group != src.Group { + continue + } + if len(kind.Kind) > 0 && kind.Kind != src.Kind { + continue + } + return v.target.WithKind(src.Kind), true + } + } + return unversioned.GroupVersionKind{}, false +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/codec_check.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/codec_check.go new file mode 100644 index 00000000..36868c19 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/codec_check.go @@ -0,0 +1,50 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "fmt" + "reflect" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// CheckCodec makes sure that the codec can encode objects like internalType, +// decode all of the external types listed, and also decode them into the given +// object. (Will modify internalObject.) (Assumes JSON serialization.) +// TODO: verify that the correct external version is chosen on encode... +func CheckCodec(c Codec, internalType Object, externalTypes ...unversioned.GroupVersionKind) error { + _, err := Encode(c, internalType) + if err != nil { + return fmt.Errorf("Internal type not encodable: %v", err) + } + for _, et := range externalTypes { + exBytes := []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v"}`, et.Kind, et.GroupVersion().String())) + obj, err := Decode(c, exBytes) + if err != nil { + return fmt.Errorf("external type %s not interpretable: %v", et, err) + } + if reflect.TypeOf(obj) != reflect.TypeOf(internalType) { + return fmt.Errorf("decode of external type %s produced: %#v", et, obj) + } + err = DecodeInto(c, exBytes, internalType) + if err != nil { + return fmt.Errorf("external type %s not convertable to internal type: %v", et, err) + } + } + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/conversion.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/conversion.go new file mode 100644 index 00000000..da1d097f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/conversion.go @@ -0,0 +1,98 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Defines conversions between generic types and structs to map query strings +// to struct objects. +package runtime + +import ( + "reflect" + "strconv" + "strings" + + "k8s.io/client-go/1.4/pkg/conversion" +) + +// JSONKeyMapper uses the struct tags on a conversion to determine the key value for +// the other side. Use when mapping from a map[string]* to a struct or vice versa. +func JSONKeyMapper(key string, sourceTag, destTag reflect.StructTag) (string, string) { + if s := destTag.Get("json"); len(s) > 0 { + return strings.SplitN(s, ",", 2)[0], key + } + if s := sourceTag.Get("json"); len(s) > 0 { + return key, strings.SplitN(s, ",", 2)[0] + } + return key, key +} + +// DefaultStringConversions are helpers for converting []string and string to real values. +var DefaultStringConversions = []interface{}{ + Convert_Slice_string_To_string, + Convert_Slice_string_To_int, + Convert_Slice_string_To_bool, + Convert_Slice_string_To_int64, +} + +func Convert_Slice_string_To_string(input *[]string, out *string, s conversion.Scope) error { + if len(*input) == 0 { + *out = "" + } + *out = (*input)[0] + return nil +} + +func Convert_Slice_string_To_int(input *[]string, out *int, s conversion.Scope) error { + if len(*input) == 0 { + *out = 0 + } + str := (*input)[0] + i, err := strconv.Atoi(str) + if err != nil { + return err + } + *out = i + return nil +} + +// Conver_Slice_string_To_bool will convert a string parameter to boolean. +// Only the absence of a value, a value of "false", or a value of "0" resolve to false. +// Any other value (including empty string) resolves to true. +func Convert_Slice_string_To_bool(input *[]string, out *bool, s conversion.Scope) error { + if len(*input) == 0 { + *out = false + return nil + } + switch strings.ToLower((*input)[0]) { + case "false", "0": + *out = false + default: + *out = true + } + return nil +} + +func Convert_Slice_string_To_int64(input *[]string, out *int64, s conversion.Scope) error { + if len(*input) == 0 { + *out = 0 + } + str := (*input)[0] + i, err := strconv.ParseInt(str, 10, 64) + if err != nil { + return err + } + *out = i + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/doc.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/doc.go new file mode 100644 index 00000000..a9d084d9 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/doc.go @@ -0,0 +1,45 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package runtime includes helper functions for working with API objects +// that follow the kubernetes API object conventions, which are: +// +// 0. Your API objects have a common metadata struct member, TypeMeta. +// 1. Your code refers to an internal set of API objects. +// 2. In a separate package, you have an external set of API objects. +// 3. The external set is considered to be versioned, and no breaking +// changes are ever made to it (fields may be added but not changed +// or removed). +// 4. As your api evolves, you'll make an additional versioned package +// with every major change. +// 5. Versioned packages have conversion functions which convert to +// and from the internal version. +// 6. You'll continue to support older versions according to your +// deprecation policy, and you can easily provide a program/library +// to update old versions into new versions because of 5. +// 7. All of your serializations and deserializations are handled in a +// centralized place. +// +// Package runtime provides a conversion helper to make 5 easy, and the +// Encode/Decode/DecodeInto trio to accomplish 7. You can also register +// additional "codecs" which use a version of your choice. It's +// recommended that you register your types with runtime in your +// package's init function. +// +// As a bonus, a few common types useful from all api objects and versions +// are provided in types.go. + +package runtime diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/embedded.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/embedded.go new file mode 100644 index 00000000..38199a43 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/embedded.go @@ -0,0 +1,136 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "errors" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion" +) + +type encodable struct { + E Encoder `json:"-"` + obj Object + versions []unversioned.GroupVersion +} + +func (e encodable) GetObjectKind() unversioned.ObjectKind { return e.obj.GetObjectKind() } + +// NewEncodable creates an object that will be encoded with the provided codec on demand. +// Provided as a convenience for test cases dealing with internal objects. +func NewEncodable(e Encoder, obj Object, versions ...unversioned.GroupVersion) Object { + if _, ok := obj.(*Unknown); ok { + return obj + } + return encodable{e, obj, versions} +} + +func (re encodable) UnmarshalJSON(in []byte) error { + return errors.New("runtime.encodable cannot be unmarshalled from JSON") +} + +// Marshal may get called on pointers or values, so implement MarshalJSON on value. +// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go +func (re encodable) MarshalJSON() ([]byte, error) { + return Encode(re.E, re.obj) +} + +// NewEncodableList creates an object that will be encoded with the provided codec on demand. +// Provided as a convenience for test cases dealing with internal objects. +func NewEncodableList(e Encoder, objects []Object, versions ...unversioned.GroupVersion) []Object { + out := make([]Object, len(objects)) + for i := range objects { + if _, ok := objects[i].(*Unknown); ok { + out[i] = objects[i] + continue + } + out[i] = NewEncodable(e, objects[i], versions...) + } + return out +} + +func (re *Unknown) UnmarshalJSON(in []byte) error { + if re == nil { + return errors.New("runtime.Unknown: UnmarshalJSON on nil pointer") + } + re.TypeMeta = TypeMeta{} + re.Raw = append(re.Raw[0:0], in...) + re.ContentEncoding = "" + re.ContentType = ContentTypeJSON + return nil +} + +// Marshal may get called on pointers or values, so implement MarshalJSON on value. +// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go +func (re Unknown) MarshalJSON() ([]byte, error) { + // If ContentType is unset, we assume this is JSON. + if re.ContentType != "" && re.ContentType != ContentTypeJSON { + return nil, errors.New("runtime.Unknown: MarshalJSON on non-json data") + } + if re.Raw == nil { + return []byte("null"), nil + } + return re.Raw, nil +} + +func Convert_runtime_Object_To_runtime_RawExtension(in *Object, out *RawExtension, s conversion.Scope) error { + if in == nil { + out.Raw = []byte("null") + return nil + } + obj := *in + if unk, ok := obj.(*Unknown); ok { + if unk.Raw != nil { + out.Raw = unk.Raw + return nil + } + obj = out.Object + } + if obj == nil { + out.Raw = nil + return nil + } + out.Object = obj + return nil +} + +func Convert_runtime_RawExtension_To_runtime_Object(in *RawExtension, out *Object, s conversion.Scope) error { + if in.Object != nil { + *out = in.Object + return nil + } + data := in.Raw + if len(data) == 0 || (len(data) == 4 && string(data) == "null") { + *out = nil + return nil + } + *out = &Unknown{ + Raw: data, + // TODO: Set ContentEncoding and ContentType appropriately. + // Currently we set ContentTypeJSON to make tests passing. + ContentType: ContentTypeJSON, + } + return nil +} + +func DefaultEmbeddedConversions() []interface{} { + return []interface{}{ + Convert_runtime_Object_To_runtime_RawExtension, + Convert_runtime_RawExtension_To_runtime_Object, + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/error.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/error.go new file mode 100644 index 00000000..37031576 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/error.go @@ -0,0 +1,102 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "fmt" + "reflect" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +type notRegisteredErr struct { + gvk unversioned.GroupVersionKind + t reflect.Type +} + +// NewNotRegisteredErr is exposed for testing. +func NewNotRegisteredErr(gvk unversioned.GroupVersionKind, t reflect.Type) error { + return ¬RegisteredErr{gvk: gvk, t: t} +} + +func (k *notRegisteredErr) Error() string { + if k.t != nil { + return fmt.Sprintf("no kind is registered for the type %v", k.t) + } + if len(k.gvk.Kind) == 0 { + return fmt.Sprintf("no version %q has been registered", k.gvk.GroupVersion()) + } + if k.gvk.Version == APIVersionInternal { + return fmt.Sprintf("no kind %q is registered for the internal version of group %q", k.gvk.Kind, k.gvk.Group) + } + + return fmt.Sprintf("no kind %q is registered for version %q", k.gvk.Kind, k.gvk.GroupVersion()) +} + +// IsNotRegisteredError returns true if the error indicates the provided +// object or input data is not registered. +func IsNotRegisteredError(err error) bool { + if err == nil { + return false + } + _, ok := err.(*notRegisteredErr) + return ok +} + +type missingKindErr struct { + data string +} + +func NewMissingKindErr(data string) error { + return &missingKindErr{data} +} + +func (k *missingKindErr) Error() string { + return fmt.Sprintf("Object 'Kind' is missing in '%s'", k.data) +} + +// IsMissingKind returns true if the error indicates that the provided object +// is missing a 'Kind' field. +func IsMissingKind(err error) bool { + if err == nil { + return false + } + _, ok := err.(*missingKindErr) + return ok +} + +type missingVersionErr struct { + data string +} + +// IsMissingVersion returns true if the error indicates that the provided object +// is missing a 'Version' field. +func NewMissingVersionErr(data string) error { + return &missingVersionErr{data} +} + +func (k *missingVersionErr) Error() string { + return fmt.Sprintf("Object 'apiVersion' is missing in '%s'", k.data) +} + +func IsMissingVersion(err error) bool { + if err == nil { + return false + } + _, ok := err.(*missingVersionErr) + return ok +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/extension.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/extension.go new file mode 100644 index 00000000..4d23ee9e --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/extension.go @@ -0,0 +1,48 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "encoding/json" + "errors" +) + +func (re *RawExtension) UnmarshalJSON(in []byte) error { + if re == nil { + return errors.New("runtime.RawExtension: UnmarshalJSON on nil pointer") + } + re.Raw = append(re.Raw[0:0], in...) + return nil +} + +// Marshal may get called on pointers or values, so implement MarshalJSON on value. +// http://stackoverflow.com/questions/21390979/custom-marshaljson-never-gets-called-in-go +func (re RawExtension) MarshalJSON() ([]byte, error) { + if re.Raw == nil { + // TODO: this is to support legacy behavior of JSONPrinter and YAMLPrinter, which + // expect to call json.Marshal on arbitrary versioned objects (even those not in + // the scheme). pkg/kubectl/resource#AsVersionedObjects and its interaction with + // kubectl get on objects not in the scheme needs to be updated to ensure that the + // objects that are not part of the scheme are correctly put into the right form. + if re.Object != nil { + return json.Marshal(re.Object) + } + return []byte("null"), nil + } + // TODO: Check whether ContentType is actually JSON before returning it. + return re.Raw, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/generated.pb.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/generated.pb.go new file mode 100644 index 00000000..2f5376c6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/generated.pb.go @@ -0,0 +1,766 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/runtime/generated.proto +// DO NOT EDIT! + +/* + Package runtime is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/runtime/generated.proto + + It has these top-level messages: + RawExtension + TypeMeta + Unknown +*/ +package runtime + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *RawExtension) Reset() { *m = RawExtension{} } +func (*RawExtension) ProtoMessage() {} +func (*RawExtension) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *TypeMeta) Reset() { *m = TypeMeta{} } +func (*TypeMeta) ProtoMessage() {} +func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *Unknown) Reset() { *m = Unknown{} } +func (*Unknown) ProtoMessage() {} +func (*Unknown) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func init() { + proto.RegisterType((*RawExtension)(nil), "k8s.io.client-go.1.4.pkg.runtime.RawExtension") + proto.RegisterType((*TypeMeta)(nil), "k8s.io.client-go.1.4.pkg.runtime.TypeMeta") + proto.RegisterType((*Unknown)(nil), "k8s.io.client-go.1.4.pkg.runtime.Unknown") +} +func (m *RawExtension) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *RawExtension) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Raw != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Raw))) + i += copy(data[i:], m.Raw) + } + return i, nil +} + +func (m *TypeMeta) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *TypeMeta) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.APIVersion))) + i += copy(data[i:], m.APIVersion) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Kind))) + i += copy(data[i:], m.Kind) + return i, nil +} + +func (m *Unknown) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Unknown) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.TypeMeta.Size())) + n1, err := m.TypeMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + if m.Raw != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Raw))) + i += copy(data[i:], m.Raw) + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ContentEncoding))) + i += copy(data[i:], m.ContentEncoding) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ContentType))) + i += copy(data[i:], m.ContentType) + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *RawExtension) Size() (n int) { + var l int + _ = l + if m.Raw != nil { + l = len(m.Raw) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *TypeMeta) Size() (n int) { + var l int + _ = l + l = len(m.APIVersion) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Kind) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *Unknown) Size() (n int) { + var l int + _ = l + l = m.TypeMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.Raw != nil { + l = len(m.Raw) + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.ContentEncoding) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.ContentType) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *RawExtension) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RawExtension{`, + `Raw:` + valueToStringGenerated(this.Raw) + `,`, + `}`, + }, "") + return s +} +func (this *TypeMeta) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TypeMeta{`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `}`, + }, "") + return s +} +func (this *Unknown) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Unknown{`, + `TypeMeta:` + strings.Replace(strings.Replace(this.TypeMeta.String(), "TypeMeta", "TypeMeta", 1), `&`, ``, 1) + `,`, + `Raw:` + valueToStringGenerated(this.Raw) + `,`, + `ContentEncoding:` + fmt.Sprintf("%v", this.ContentEncoding) + `,`, + `ContentType:` + fmt.Sprintf("%v", this.ContentType) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *RawExtension) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RawExtension: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RawExtension: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Raw", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Raw = append(m.Raw[:0], data[iNdEx:postIndex]...) + if m.Raw == nil { + m.Raw = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TypeMeta) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TypeMeta: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TypeMeta: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field APIVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.APIVersion = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Kind = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Unknown) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Unknown: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Unknown: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TypeMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TypeMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Raw", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Raw = append(m.Raw[:0], data[iNdEx:postIndex]...) + if m.Raw == nil { + m.Raw = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContentEncoding", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContentEncoding = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContentType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContentType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 380 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x90, 0xcf, 0x4e, 0x2a, 0x31, + 0x14, 0xc6, 0x19, 0x20, 0x81, 0x5b, 0x48, 0xb8, 0xe9, 0x5d, 0xdc, 0x91, 0x44, 0x20, 0x6c, 0x94, + 0x05, 0x6d, 0x24, 0x31, 0x71, 0xcb, 0x10, 0x16, 0xc6, 0x98, 0x98, 0x89, 0xb8, 0x70, 0xe5, 0x30, + 0xd4, 0xb1, 0x19, 0x69, 0x27, 0x9d, 0x4e, 0xd0, 0x9d, 0x8f, 0xe0, 0x63, 0xb1, 0x64, 0xe9, 0x8a, + 0x28, 0x3e, 0x83, 0x7b, 0x4b, 0x29, 0x7f, 0x04, 0xe2, 0xe2, 0x24, 0x33, 0xe7, 0xfc, 0xbe, 0xef, + 0x7c, 0xa7, 0xa0, 0x19, 0x9e, 0xc5, 0x88, 0x72, 0x1c, 0x26, 0x7d, 0x22, 0x18, 0x91, 0x24, 0xc6, + 0x51, 0x18, 0x60, 0x91, 0x30, 0x49, 0x87, 0x04, 0x07, 0x84, 0x11, 0xe1, 0x49, 0x32, 0x40, 0x91, + 0xe0, 0x92, 0xc3, 0xc3, 0x05, 0x8e, 0xd6, 0x38, 0x52, 0x38, 0x32, 0x78, 0xb9, 0x19, 0x50, 0xf9, + 0x90, 0xf4, 0x91, 0xcf, 0x87, 0x38, 0xe0, 0x01, 0xc7, 0x5a, 0xd5, 0x4f, 0xee, 0xf5, 0x9f, 0xfe, + 0xd1, 0x5f, 0x0b, 0xb7, 0x72, 0x6b, 0xff, 0x72, 0x2f, 0xa2, 0x58, 0x90, 0x98, 0x27, 0xc2, 0xdf, + 0x49, 0x50, 0x3e, 0xd9, 0xaf, 0x49, 0x24, 0x7d, 0xc4, 0x94, 0xc9, 0x58, 0x8a, 0x6d, 0x49, 0xbd, + 0x01, 0x8a, 0xae, 0x37, 0xea, 0x3e, 0x49, 0xc2, 0x62, 0xca, 0x19, 0x3c, 0x00, 0x19, 0xe1, 0x8d, + 0x6c, 0xab, 0x66, 0x1d, 0x17, 0x9d, 0xdc, 0x6c, 0x5a, 0xcd, 0xa8, 0xb1, 0x3b, 0xef, 0xd5, 0xef, + 0x40, 0xfe, 0xfa, 0x39, 0x22, 0x97, 0x44, 0x7a, 0xb0, 0x05, 0x80, 0x4a, 0x72, 0x43, 0xc4, 0x5c, + 0xa4, 0xe9, 0x3f, 0x0e, 0x1c, 0x4f, 0xab, 0x29, 0xa5, 0x00, 0xed, 0xab, 0x73, 0x33, 0x71, 0x37, + 0x28, 0x58, 0x03, 0xd9, 0x90, 0xb2, 0x81, 0x9d, 0xd6, 0x74, 0xd1, 0xd0, 0xd9, 0x0b, 0xd5, 0x73, + 0xf5, 0xa4, 0xfe, 0x65, 0x81, 0x5c, 0x8f, 0x85, 0x8c, 0x8f, 0x18, 0xec, 0x81, 0xbc, 0x34, 0xdb, + 0xb4, 0x7f, 0xa1, 0x75, 0x84, 0x7e, 0x7d, 0x60, 0xb4, 0x0c, 0xe7, 0xfc, 0x35, 0xd6, 0xab, 0xb8, + 0xee, 0xca, 0x6a, 0x79, 0x5f, 0x7a, 0xf7, 0x3e, 0xd8, 0x06, 0x25, 0x9f, 0x33, 0xf5, 0x10, 0xb2, + 0xcb, 0x7c, 0x3e, 0xa0, 0x2c, 0xb0, 0x33, 0x3a, 0xea, 0x7f, 0xe3, 0x57, 0xea, 0xfc, 0x1c, 0xbb, + 0xdb, 0x3c, 0x3c, 0x05, 0x05, 0xd3, 0x9a, 0xaf, 0xb6, 0xb3, 0x5a, 0xfe, 0xcf, 0xc8, 0x0b, 0x9d, + 0xf5, 0xc8, 0xdd, 0xe4, 0x9c, 0xc6, 0xf8, 0xa3, 0x92, 0x9a, 0xa8, 0x7a, 0x53, 0xf5, 0x32, 0xab, + 0x58, 0x63, 0x55, 0x13, 0x55, 0xef, 0xaa, 0x5e, 0x3f, 0x2b, 0xa9, 0xdb, 0x9c, 0x39, 0xf2, 0x3b, + 0x00, 0x00, 0xff, 0xff, 0x32, 0xc1, 0x73, 0x2d, 0x94, 0x02, 0x00, 0x00, +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/generated.proto b/vendor/k8s.io/client-go/1.4/pkg/runtime/generated.proto new file mode 100644 index 00000000..0e602abe --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/generated.proto @@ -0,0 +1,124 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.runtime; + +import "k8s.io/kubernetes/pkg/api/resource/generated.proto"; +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "runtime"; + +// RawExtension is used to hold extensions in external versions. +// +// To use this, make a field which has RawExtension as its type in your external, versioned +// struct, and Object in your internal struct. You also need to register your +// various plugin types. +// +// // Internal package: +// type MyAPIObject struct { +// runtime.TypeMeta `json:",inline"` +// MyPlugin runtime.Object `json:"myPlugin"` +// } +// type PluginA struct { +// AOption string `json:"aOption"` +// } +// +// // External package: +// type MyAPIObject struct { +// runtime.TypeMeta `json:",inline"` +// MyPlugin runtime.RawExtension `json:"myPlugin"` +// } +// type PluginA struct { +// AOption string `json:"aOption"` +// } +// +// // On the wire, the JSON will look something like this: +// { +// "kind":"MyAPIObject", +// "apiVersion":"v1", +// "myPlugin": { +// "kind":"PluginA", +// "aOption":"foo", +// }, +// } +// +// So what happens? Decode first uses json or yaml to unmarshal the serialized data into +// your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. +// The next step is to copy (using pkg/conversion) into the internal struct. The runtime +// package's DefaultScheme has conversion functions installed which will unpack the +// JSON stored in RawExtension, turning it into the correct object type, and storing it +// in the Object. (TODO: In the case where the object is of an unknown type, a +// runtime.Unknown object will be created and stored.) +// +// +k8s:deepcopy-gen=true +// +protobuf=true +message RawExtension { + // Raw is the underlying serialization of this object. + // + // TODO: Determine how to detect ContentType and ContentEncoding of 'Raw' data. + optional bytes raw = 1; +} + +// TypeMeta is shared by all top level objects. The proper way to use it is to inline it in your type, +// like this: +// type MyAwesomeAPIObject struct { +// runtime.TypeMeta `json:",inline"` +// ... // other fields +// } +// func (obj *MyAwesomeAPIObject) SetGroupVersionKind(gvk *unversioned.GroupVersionKind) { unversioned.UpdateTypeMeta(obj,gvk) }; GroupVersionKind() *GroupVersionKind +// +// TypeMeta is provided here for convenience. You may use it directly from this package or define +// your own with the same fields. +// +// +k8s:deepcopy-gen=true +// +protobuf=true +message TypeMeta { + optional string apiVersion = 1; + + optional string kind = 2; +} + +// Unknown allows api objects with unknown types to be passed-through. This can be used +// to deal with the API objects from a plug-in. Unknown objects still have functioning +// TypeMeta features-- kind, version, etc. +// TODO: Make this object have easy access to field based accessors and settors for +// metadata and field mutatation. +// +// +k8s:deepcopy-gen=true +// +protobuf=true +message Unknown { + optional TypeMeta typeMeta = 1; + + // Raw will hold the complete serialized object which couldn't be matched + // with a registered type. Most likely, nothing should be done with this + // except for passing it through the system. + optional bytes raw = 2; + + // ContentEncoding is encoding used to encode 'Raw' data. + // Unspecified means no encoding. + optional string contentEncoding = 3; + + // ContentType is serialization method used to serialize 'Raw'. + // Unspecified means ContentTypeJSON. + optional string contentType = 4; +} + diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/helper.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/helper.go new file mode 100644 index 00000000..2e7d8a2e --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/helper.go @@ -0,0 +1,212 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "fmt" + "io" + "reflect" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion" + "k8s.io/client-go/1.4/pkg/util/errors" +) + +// unsafeObjectConvertor implements ObjectConvertor using the unsafe conversion path. +type unsafeObjectConvertor struct { + *Scheme +} + +var _ ObjectConvertor = unsafeObjectConvertor{} + +// ConvertToVersion converts in to the provided outVersion without copying the input first, which +// is only safe if the output object is not mutated or reused. +func (c unsafeObjectConvertor) ConvertToVersion(in Object, outVersion GroupVersioner) (Object, error) { + return c.Scheme.UnsafeConvertToVersion(in, outVersion) +} + +// UnsafeObjectConvertor performs object conversion without copying the object structure, +// for use when the converted object will not be reused or mutated. Primarily for use within +// versioned codecs, which use the external object for serialization but do not return it. +func UnsafeObjectConvertor(scheme *Scheme) ObjectConvertor { + return unsafeObjectConvertor{scheme} +} + +// SetField puts the value of src, into fieldName, which must be a member of v. +// The value of src must be assignable to the field. +func SetField(src interface{}, v reflect.Value, fieldName string) error { + field := v.FieldByName(fieldName) + if !field.IsValid() { + return fmt.Errorf("couldn't find %v field in %#v", fieldName, v.Interface()) + } + srcValue := reflect.ValueOf(src) + if srcValue.Type().AssignableTo(field.Type()) { + field.Set(srcValue) + return nil + } + if srcValue.Type().ConvertibleTo(field.Type()) { + field.Set(srcValue.Convert(field.Type())) + return nil + } + return fmt.Errorf("couldn't assign/convert %v to %v", srcValue.Type(), field.Type()) +} + +// Field puts the value of fieldName, which must be a member of v, into dest, +// which must be a variable to which this field's value can be assigned. +func Field(v reflect.Value, fieldName string, dest interface{}) error { + field := v.FieldByName(fieldName) + if !field.IsValid() { + return fmt.Errorf("couldn't find %v field in %#v", fieldName, v.Interface()) + } + destValue, err := conversion.EnforcePtr(dest) + if err != nil { + return err + } + if field.Type().AssignableTo(destValue.Type()) { + destValue.Set(field) + return nil + } + if field.Type().ConvertibleTo(destValue.Type()) { + destValue.Set(field.Convert(destValue.Type())) + return nil + } + return fmt.Errorf("couldn't assign/convert %v to %v", field.Type(), destValue.Type()) +} + +// fieldPtr puts the address of fieldName, which must be a member of v, +// into dest, which must be an address of a variable to which this field's +// address can be assigned. +func FieldPtr(v reflect.Value, fieldName string, dest interface{}) error { + field := v.FieldByName(fieldName) + if !field.IsValid() { + return fmt.Errorf("couldn't find %v field in %#v", fieldName, v.Interface()) + } + v, err := conversion.EnforcePtr(dest) + if err != nil { + return err + } + field = field.Addr() + if field.Type().AssignableTo(v.Type()) { + v.Set(field) + return nil + } + if field.Type().ConvertibleTo(v.Type()) { + v.Set(field.Convert(v.Type())) + return nil + } + return fmt.Errorf("couldn't assign/convert %v to %v", field.Type(), v.Type()) +} + +// EncodeList ensures that each object in an array is converted to a Unknown{} in serialized form. +// TODO: accept a content type. +func EncodeList(e Encoder, objects []Object) error { + var errs []error + for i := range objects { + data, err := Encode(e, objects[i]) + if err != nil { + errs = append(errs, err) + continue + } + // TODO: Set ContentEncoding and ContentType. + objects[i] = &Unknown{Raw: data} + } + return errors.NewAggregate(errs) +} + +func decodeListItem(obj *Unknown, decoders []Decoder) (Object, error) { + for _, decoder := range decoders { + // TODO: Decode based on ContentType. + obj, err := Decode(decoder, obj.Raw) + if err != nil { + if IsNotRegisteredError(err) { + continue + } + return nil, err + } + return obj, nil + } + // could not decode, so leave the object as Unknown, but give the decoders the + // chance to set Unknown.TypeMeta if it is available. + for _, decoder := range decoders { + if err := DecodeInto(decoder, obj.Raw, obj); err == nil { + return obj, nil + } + } + return obj, nil +} + +// DecodeList alters the list in place, attempting to decode any objects found in +// the list that have the Unknown type. Any errors that occur are returned +// after the entire list is processed. Decoders are tried in order. +func DecodeList(objects []Object, decoders ...Decoder) []error { + errs := []error(nil) + for i, obj := range objects { + switch t := obj.(type) { + case *Unknown: + decoded, err := decodeListItem(t, decoders) + if err != nil { + errs = append(errs, err) + break + } + objects[i] = decoded + } + } + return errs +} + +// MultiObjectTyper returns the types of objects across multiple schemes in order. +type MultiObjectTyper []ObjectTyper + +var _ ObjectTyper = MultiObjectTyper{} + +func (m MultiObjectTyper) ObjectKinds(obj Object) (gvks []unversioned.GroupVersionKind, unversionedType bool, err error) { + for _, t := range m { + gvks, unversionedType, err = t.ObjectKinds(obj) + if err == nil { + return + } + } + return +} + +func (m MultiObjectTyper) Recognizes(gvk unversioned.GroupVersionKind) bool { + for _, t := range m { + if t.Recognizes(gvk) { + return true + } + } + return false +} + +// SetZeroValue would set the object of objPtr to zero value of its type. +func SetZeroValue(objPtr Object) error { + v, err := conversion.EnforcePtr(objPtr) + if err != nil { + return err + } + v.Set(reflect.Zero(v.Type())) + return nil +} + +// DefaultFramer is valid for any stream that can read objects serially without +// any separation in the stream. +var DefaultFramer = defaultFramer{} + +type defaultFramer struct{} + +func (defaultFramer) NewFrameReader(r io.ReadCloser) io.ReadCloser { return r } +func (defaultFramer) NewFrameWriter(w io.Writer) io.Writer { return w } diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/interfaces.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/interfaces.go new file mode 100644 index 00000000..63b30559 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/interfaces.go @@ -0,0 +1,238 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "io" + "net/url" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +const ( + // APIVersionInternal may be used if you are registering a type that should not + // be considered stable or serialized - it is a convention only and has no + // special behavior in this package. + APIVersionInternal = "__internal" +) + +// GroupVersioner refines a set of possible conversion targets into a single option. +type GroupVersioner interface { + // KindForGroupVersionKinds returns a desired target group version kind for the given input, or returns ok false if no + // target is known. In general, if the return target is not in the input list, the caller is expected to invoke + // Scheme.New(target) and then perform a conversion between the current Go type and the destination Go type. + // Sophisticated implementations may use additional information about the input kinds to pick a destination kind. + KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (target unversioned.GroupVersionKind, ok bool) +} + +// Encoders write objects to a serialized form +type Encoder interface { + // Encode writes an object to a stream. Implementations may return errors if the versions are + // incompatible, or if no conversion is defined. + Encode(obj Object, w io.Writer) error +} + +// Decoders attempt to load an object from data. +type Decoder interface { + // Decode attempts to deserialize the provided data using either the innate typing of the scheme or the + // default kind, group, and version provided. It returns a decoded object as well as the kind, group, and + // version from the serialized data, or an error. If into is non-nil, it will be used as the target type + // and implementations may choose to use it rather than reallocating an object. However, the object is not + // guaranteed to be populated. The returned object is not guaranteed to match into. If defaults are + // provided, they are applied to the data by default. If no defaults or partial defaults are provided, the + // type of the into may be used to guide conversion decisions. + Decode(data []byte, defaults *unversioned.GroupVersionKind, into Object) (Object, *unversioned.GroupVersionKind, error) +} + +// Serializer is the core interface for transforming objects into a serialized format and back. +// Implementations may choose to perform conversion of the object, but no assumptions should be made. +type Serializer interface { + Encoder + Decoder +} + +// Codec is a Serializer that deals with the details of versioning objects. It offers the same +// interface as Serializer, so this is a marker to consumers that care about the version of the objects +// they receive. +type Codec Serializer + +// ParameterCodec defines methods for serializing and deserializing API objects to url.Values and +// performing any necessary conversion. Unlike the normal Codec, query parameters are not self describing +// and the desired version must be specified. +type ParameterCodec interface { + // DecodeParameters takes the given url.Values in the specified group version and decodes them + // into the provided object, or returns an error. + DecodeParameters(parameters url.Values, from unversioned.GroupVersion, into Object) error + // EncodeParameters encodes the provided object as query parameters or returns an error. + EncodeParameters(obj Object, to unversioned.GroupVersion) (url.Values, error) +} + +// Framer is a factory for creating readers and writers that obey a particular framing pattern. +type Framer interface { + NewFrameReader(r io.ReadCloser) io.ReadCloser + NewFrameWriter(w io.Writer) io.Writer +} + +// SerializerInfo contains information about a specific serialization format +type SerializerInfo struct { + Serializer + // EncodesAsText indicates this serializer can be encoded to UTF-8 safely. + EncodesAsText bool + // MediaType is the value that represents this serializer over the wire. + MediaType string +} + +// StreamSerializerInfo contains information about a specific stream serialization format +type StreamSerializerInfo struct { + SerializerInfo + // Framer is the factory for retrieving streams that separate objects on the wire + Framer + // Embedded is the type of the nested serialization that should be used. + Embedded SerializerInfo +} + +// NegotiatedSerializer is an interface used for obtaining encoders, decoders, and serializers +// for multiple supported media types. This would commonly be accepted by a server component +// that performs HTTP content negotiation to accept multiple formats. +type NegotiatedSerializer interface { + // SupportedMediaTypes is the media types supported for reading and writing single objects. + SupportedMediaTypes() []string + // SerializerForMediaType returns a serializer for the provided media type. params is the set of + // parameters applied to the media type that may modify the resulting output. ok will be false + // if no serializer matched the media type. + SerializerForMediaType(mediaType string, params map[string]string) (s SerializerInfo, ok bool) + + // SupportedStreamingMediaTypes returns the media types of the supported streaming serializers. + // Streaming serializers control how multiple objects are written to a stream output. + SupportedStreamingMediaTypes() []string + // StreamingSerializerForMediaType returns a serializer for the provided media type that supports + // reading and writing multiple objects to a stream. It returns a framer and serializer, or an + // error if no such serializer can be created. Params is the set of parameters applied to the + // media type that may modify the resulting output. ok will be false if no serializer matched + // the media type. + StreamingSerializerForMediaType(mediaType string, params map[string]string) (s StreamSerializerInfo, ok bool) + + // EncoderForVersion returns an encoder that ensures objects being written to the provided + // serializer are in the provided group version. + EncoderForVersion(serializer Encoder, gv GroupVersioner) Encoder + // DecoderForVersion returns a decoder that ensures objects being read by the provided + // serializer are in the provided group version by default. + DecoderToVersion(serializer Decoder, gv GroupVersioner) Decoder +} + +// StorageSerializer is an interface used for obtaining encoders, decoders, and serializers +// that can read and write data at rest. This would commonly be used by client tools that must +// read files, or server side storage interfaces that persist restful objects. +type StorageSerializer interface { + // SerializerForMediaType returns a serializer for the provided media type. Options is a set of + // parameters applied to the media type that may modify the resulting output. + SerializerForMediaType(mediaType string, options map[string]string) (SerializerInfo, bool) + + // UniversalDeserializer returns a Serializer that can read objects in multiple supported formats + // by introspecting the data at rest. + UniversalDeserializer() Decoder + + // EncoderForVersion returns an encoder that ensures objects being written to the provided + // serializer are in the provided group version. + EncoderForVersion(serializer Encoder, gv GroupVersioner) Encoder + // DecoderForVersion returns a decoder that ensures objects being read by the provided + // serializer are in the provided group version by default. + DecoderToVersion(serializer Decoder, gv GroupVersioner) Decoder +} + +// NestedObjectEncoder is an optional interface that objects may implement to be given +// an opportunity to encode any nested Objects / RawExtensions during serialization. +type NestedObjectEncoder interface { + EncodeNestedObjects(e Encoder) error +} + +// NestedObjectDecoder is an optional interface that objects may implement to be given +// an opportunity to decode any nested Objects / RawExtensions during serialization. +type NestedObjectDecoder interface { + DecodeNestedObjects(d Decoder) error +} + +/////////////////////////////////////////////////////////////////////////////// +// Non-codec interfaces + +type ObjectVersioner interface { + ConvertToVersion(in Object, gv GroupVersioner) (out Object, err error) +} + +// ObjectConvertor converts an object to a different version. +type ObjectConvertor interface { + // Convert attempts to convert one object into another, or returns an error. This method does + // not guarantee the in object is not mutated. The context argument will be passed to + // all nested conversions. + Convert(in, out, context interface{}) error + // ConvertToVersion takes the provided object and converts it the provided version. This + // method does not guarantee that the in object is not mutated. This method is similar to + // Convert() but handles specific details of choosing the correct output version. + ConvertToVersion(in Object, gv GroupVersioner) (out Object, err error) + ConvertFieldLabel(version, kind, label, value string) (string, string, error) +} + +// ObjectTyper contains methods for extracting the APIVersion and Kind +// of objects. +type ObjectTyper interface { + // ObjectKinds returns the all possible group,version,kind of the provided object, true if + // the object is unversioned, or an error if the object is not recognized + // (IsNotRegisteredError will return true). + ObjectKinds(Object) ([]unversioned.GroupVersionKind, bool, error) + // Recognizes returns true if the scheme is able to handle the provided version and kind, + // or more precisely that the provided version is a possible conversion or decoding + // target. + Recognizes(gvk unversioned.GroupVersionKind) bool +} + +// ObjectCreater contains methods for instantiating an object by kind and version. +type ObjectCreater interface { + New(kind unversioned.GroupVersionKind) (out Object, err error) +} + +// ObjectCopier duplicates an object. +type ObjectCopier interface { + // Copy returns an exact copy of the provided Object, or an error if the + // copy could not be completed. + Copy(Object) (Object, error) +} + +// ResourceVersioner provides methods for setting and retrieving +// the resource version from an API object. +type ResourceVersioner interface { + SetResourceVersion(obj Object, version string) error + ResourceVersion(obj Object) (string, error) +} + +// SelfLinker provides methods for setting and retrieving the SelfLink field of an API object. +type SelfLinker interface { + SetSelfLink(obj Object, selfLink string) error + SelfLink(obj Object) (string, error) + + // Knowing Name is sometimes necessary to use a SelfLinker. + Name(obj Object) (string, error) + // Knowing Namespace is sometimes necessary to use a SelfLinker + Namespace(obj Object) (string, error) +} + +// All API types registered with Scheme must support the Object interface. Since objects in a scheme are +// expected to be serialized to the wire, the interface an Object must provide to the Scheme allows +// serializers to set the kind, version, and group the object is represented as. An Object may choose +// to return a no-op ObjectKindAccessor in cases where it is not expected to be serialized. +type Object interface { + GetObjectKind() unversioned.ObjectKind +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/register.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/register.go new file mode 100644 index 00000000..80f5eefe --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/register.go @@ -0,0 +1,66 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// SetGroupVersionKind satisfies the ObjectKind interface for all objects that embed TypeMeta +func (obj *TypeMeta) SetGroupVersionKind(gvk unversioned.GroupVersionKind) { + obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind() +} + +// GroupVersionKind satisfies the ObjectKind interface for all objects that embed TypeMeta +func (obj *TypeMeta) GroupVersionKind() unversioned.GroupVersionKind { + return unversioned.FromAPIVersionAndKind(obj.APIVersion, obj.Kind) +} + +func (obj *Unknown) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } + +func (obj *Unstructured) GetObjectKind() unversioned.ObjectKind { return obj } +func (obj *UnstructuredList) GetObjectKind() unversioned.ObjectKind { return obj } + +// GetObjectKind implements Object for VersionedObjects, returning an empty ObjectKind +// interface if no objects are provided, or the ObjectKind interface of the object in the +// highest array position. +func (obj *VersionedObjects) GetObjectKind() unversioned.ObjectKind { + last := obj.Last() + if last == nil { + return unversioned.EmptyObjectKind + } + return last.GetObjectKind() +} + +// First returns the leftmost object in the VersionedObjects array, which is usually the +// object as serialized on the wire. +func (obj *VersionedObjects) First() Object { + if len(obj.Objects) == 0 { + return nil + } + return obj.Objects[0] +} + +// Last is the rightmost object in the VersionedObjects array, which is the object after +// all transformations have been applied. This is the same object that would be returned +// by Decode in a normal invocation (without VersionedObjects in the into argument). +func (obj *VersionedObjects) Last() Object { + if len(obj.Objects) == 0 { + return nil + } + return obj.Objects[len(obj.Objects)-1] +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/scheme.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/scheme.go new file mode 100644 index 00000000..ab690468 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/scheme.go @@ -0,0 +1,570 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "fmt" + "net/url" + "reflect" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion" +) + +// Scheme defines methods for serializing and deserializing API objects, a type +// registry for converting group, version, and kind information to and from Go +// schemas, and mappings between Go schemas of different versions. A scheme is the +// foundation for a versioned API and versioned configuration over time. +// +// In a Scheme, a Type is a particular Go struct, a Version is a point-in-time +// identifier for a particular representation of that Type (typically backwards +// compatible), a Kind is the unique name for that Type within the Version, and a +// Group identifies a set of Versions, Kinds, and Types that evolve over time. An +// Unversioned Type is one that is not yet formally bound to a type and is promised +// to be backwards compatible (effectively a "v1" of a Type that does not expect +// to break in the future). +// +// Schemes are not expected to change at runtime and are only threadsafe after +// registration is complete. +type Scheme struct { + // versionMap allows one to figure out the go type of an object with + // the given version and name. + gvkToType map[unversioned.GroupVersionKind]reflect.Type + + // typeToGroupVersion allows one to find metadata for a given go object. + // The reflect.Type we index by should *not* be a pointer. + typeToGVK map[reflect.Type][]unversioned.GroupVersionKind + + // unversionedTypes are transformed without conversion in ConvertToVersion. + unversionedTypes map[reflect.Type]unversioned.GroupVersionKind + + // unversionedKinds are the names of kinds that can be created in the context of any group + // or version + // TODO: resolve the status of unversioned types. + unversionedKinds map[string]reflect.Type + + // Map from version and resource to the corresponding func to convert + // resource field labels in that version to internal version. + fieldLabelConversionFuncs map[string]map[string]FieldLabelConversionFunc + + // converter stores all registered conversion functions. It also has + // default coverting behavior. + converter *conversion.Converter + + // cloner stores all registered copy functions. It also has default + // deep copy behavior. + cloner *conversion.Cloner +} + +// Function to convert a field selector to internal representation. +type FieldLabelConversionFunc func(label, value string) (internalLabel, internalValue string, err error) + +// NewScheme creates a new Scheme. This scheme is pluggable by default. +func NewScheme() *Scheme { + s := &Scheme{ + gvkToType: map[unversioned.GroupVersionKind]reflect.Type{}, + typeToGVK: map[reflect.Type][]unversioned.GroupVersionKind{}, + unversionedTypes: map[reflect.Type]unversioned.GroupVersionKind{}, + unversionedKinds: map[string]reflect.Type{}, + cloner: conversion.NewCloner(), + fieldLabelConversionFuncs: map[string]map[string]FieldLabelConversionFunc{}, + } + s.converter = conversion.NewConverter(s.nameFunc) + + s.AddConversionFuncs(DefaultEmbeddedConversions()...) + + // Enable map[string][]string conversions by default + if err := s.AddConversionFuncs(DefaultStringConversions...); err != nil { + panic(err) + } + if err := s.RegisterInputDefaults(&map[string][]string{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields); err != nil { + panic(err) + } + if err := s.RegisterInputDefaults(&url.Values{}, JSONKeyMapper, conversion.AllowDifferentFieldTypeNames|conversion.IgnoreMissingFields); err != nil { + panic(err) + } + return s +} + +// nameFunc returns the name of the type that we wish to use to determine when two types attempt +// a conversion. Defaults to the go name of the type if the type is not registered. +func (s *Scheme) nameFunc(t reflect.Type) string { + // find the preferred names for this type + gvks, ok := s.typeToGVK[t] + if !ok { + return t.Name() + } + + for _, gvk := range gvks { + internalGV := gvk.GroupVersion() + internalGV.Version = "__internal" // this is hacky and maybe should be passed in + internalGVK := internalGV.WithKind(gvk.Kind) + + if internalType, exists := s.gvkToType[internalGVK]; exists { + return s.typeToGVK[internalType][0].Kind + } + } + + return gvks[0].Kind +} + +// fromScope gets the input version, desired output version, and desired Scheme +// from a conversion.Scope. +func (s *Scheme) fromScope(scope conversion.Scope) *Scheme { + return s +} + +// Converter allows access to the converter for the scheme +func (s *Scheme) Converter() *conversion.Converter { + return s.converter +} + +// AddUnversionedTypes registers the provided types as "unversioned", which means that they follow special rules. +// Whenever an object of this type is serialized, it is serialized with the provided group version and is not +// converted. Thus unversioned objects are expected to remain backwards compatible forever, as if they were in an +// API group and version that would never be updated. +// +// TODO: there is discussion about removing unversioned and replacing it with objects that are manifest into +// every version with particular schemas. Resolve this method at that point. +func (s *Scheme) AddUnversionedTypes(version unversioned.GroupVersion, types ...Object) { + s.AddKnownTypes(version, types...) + for _, obj := range types { + t := reflect.TypeOf(obj).Elem() + gvk := version.WithKind(t.Name()) + s.unversionedTypes[t] = gvk + if _, ok := s.unversionedKinds[gvk.Kind]; ok { + panic(fmt.Sprintf("%v has already been registered as unversioned kind %q - kind name must be unique", reflect.TypeOf(t), gvk.Kind)) + } + s.unversionedKinds[gvk.Kind] = t + } +} + +// AddKnownTypes registers all types passed in 'types' as being members of version 'version'. +// All objects passed to types should be pointers to structs. The name that go reports for +// the struct becomes the "kind" field when encoding. Version may not be empty - use the +// APIVersionInternal constant if you have a type that does not have a formal version. +func (s *Scheme) AddKnownTypes(gv unversioned.GroupVersion, types ...Object) { + if len(gv.Version) == 0 { + panic(fmt.Sprintf("version is required on all types: %s %v", gv, types[0])) + } + for _, obj := range types { + t := reflect.TypeOf(obj) + if t.Kind() != reflect.Ptr { + panic("All types must be pointers to structs.") + } + t = t.Elem() + if t.Kind() != reflect.Struct { + panic("All types must be pointers to structs.") + } + + gvk := gv.WithKind(t.Name()) + s.gvkToType[gvk] = t + s.typeToGVK[t] = append(s.typeToGVK[t], gvk) + } +} + +// AddKnownTypeWithName is like AddKnownTypes, but it lets you specify what this type should +// be encoded as. Useful for testing when you don't want to make multiple packages to define +// your structs. Version may not be empty - use the APIVersionInternal constant if you have a +// type that does not have a formal version. +func (s *Scheme) AddKnownTypeWithName(gvk unversioned.GroupVersionKind, obj Object) { + t := reflect.TypeOf(obj) + if len(gvk.Version) == 0 { + panic(fmt.Sprintf("version is required on all types: %s %v", gvk, t)) + } + if t.Kind() != reflect.Ptr { + panic("All types must be pointers to structs.") + } + t = t.Elem() + if t.Kind() != reflect.Struct { + panic("All types must be pointers to structs.") + } + + s.gvkToType[gvk] = t + s.typeToGVK[t] = append(s.typeToGVK[t], gvk) +} + +// KnownTypes returns the types known for the given version. +func (s *Scheme) KnownTypes(gv unversioned.GroupVersion) map[string]reflect.Type { + types := make(map[string]reflect.Type) + for gvk, t := range s.gvkToType { + if gv != gvk.GroupVersion() { + continue + } + + types[gvk.Kind] = t + } + return types +} + +// AllKnownTypes returns the all known types. +func (s *Scheme) AllKnownTypes() map[unversioned.GroupVersionKind]reflect.Type { + return s.gvkToType +} + +// ObjectKind returns the group,version,kind of the go object and true if this object +// is considered unversioned, or an error if it's not a pointer or is unregistered. +func (s *Scheme) ObjectKind(obj Object) (unversioned.GroupVersionKind, bool, error) { + gvks, unversionedType, err := s.ObjectKinds(obj) + if err != nil { + return unversioned.GroupVersionKind{}, false, err + } + return gvks[0], unversionedType, nil +} + +// ObjectKinds returns all possible group,version,kind of the go object, true if the +// object is considered unversioned, or an error if it's not a pointer or is unregistered. +func (s *Scheme) ObjectKinds(obj Object) ([]unversioned.GroupVersionKind, bool, error) { + v, err := conversion.EnforcePtr(obj) + if err != nil { + return nil, false, err + } + t := v.Type() + + gvks, ok := s.typeToGVK[t] + if !ok { + return nil, false, NewNotRegisteredErr(unversioned.GroupVersionKind{}, t) + } + _, unversionedType := s.unversionedTypes[t] + + return gvks, unversionedType, nil +} + +// Recognizes returns true if the scheme is able to handle the provided group,version,kind +// of an object. +func (s *Scheme) Recognizes(gvk unversioned.GroupVersionKind) bool { + _, exists := s.gvkToType[gvk] + return exists +} + +func (s *Scheme) IsUnversioned(obj Object) (bool, bool) { + v, err := conversion.EnforcePtr(obj) + if err != nil { + return false, false + } + t := v.Type() + + if _, ok := s.typeToGVK[t]; !ok { + return false, false + } + _, ok := s.unversionedTypes[t] + return ok, true +} + +// New returns a new API object of the given version and name, or an error if it hasn't +// been registered. The version and kind fields must be specified. +func (s *Scheme) New(kind unversioned.GroupVersionKind) (Object, error) { + if t, exists := s.gvkToType[kind]; exists { + return reflect.New(t).Interface().(Object), nil + } + + if t, exists := s.unversionedKinds[kind.Kind]; exists { + return reflect.New(t).Interface().(Object), nil + } + return nil, NewNotRegisteredErr(kind, nil) +} + +// AddGenericConversionFunc adds a function that accepts the ConversionFunc call pattern +// (for two conversion types) to the converter. These functions are checked first during +// a normal conversion, but are otherwise not called. Use AddConversionFuncs when registering +// typed conversions. +func (s *Scheme) AddGenericConversionFunc(fn conversion.GenericConversionFunc) { + s.converter.AddGenericConversionFunc(fn) +} + +// Log sets a logger on the scheme. For test purposes only +func (s *Scheme) Log(l conversion.DebugLogger) { + s.converter.Debug = l +} + +// AddIgnoredConversionType identifies a pair of types that should be skipped by +// conversion (because the data inside them is explicitly dropped during +// conversion). +func (s *Scheme) AddIgnoredConversionType(from, to interface{}) error { + return s.converter.RegisterIgnoredConversion(from, to) +} + +// AddConversionFuncs adds functions to the list of conversion functions. The given +// functions should know how to convert between two of your API objects, or their +// sub-objects. We deduce how to call these functions from the types of their two +// parameters; see the comment for Converter.Register. +// +// Note that, if you need to copy sub-objects that didn't change, you can use the +// conversion.Scope object that will be passed to your conversion function. +// Additionally, all conversions started by Scheme will set the SrcVersion and +// DestVersion fields on the Meta object. Example: +// +// s.AddConversionFuncs( +// func(in *InternalObject, out *ExternalObject, scope conversion.Scope) error { +// // You can depend on Meta() being non-nil, and this being set to +// // the source version, e.g., "" +// s.Meta().SrcVersion +// // You can depend on this being set to the destination version, +// // e.g., "v1". +// s.Meta().DestVersion +// // Call scope.Convert to copy sub-fields. +// s.Convert(&in.SubFieldThatMoved, &out.NewLocation.NewName, 0) +// return nil +// }, +// ) +// +// (For more detail about conversion functions, see Converter.Register's comment.) +// +// Also note that the default behavior, if you don't add a conversion function, is to +// sanely copy fields that have the same names and same type names. It's OK if the +// destination type has extra fields, but it must not remove any. So you only need to +// add conversion functions for things with changed/removed fields. +func (s *Scheme) AddConversionFuncs(conversionFuncs ...interface{}) error { + for _, f := range conversionFuncs { + if err := s.converter.RegisterConversionFunc(f); err != nil { + return err + } + } + return nil +} + +// Similar to AddConversionFuncs, but registers conversion functions that were +// automatically generated. +func (s *Scheme) AddGeneratedConversionFuncs(conversionFuncs ...interface{}) error { + for _, f := range conversionFuncs { + if err := s.converter.RegisterGeneratedConversionFunc(f); err != nil { + return err + } + } + return nil +} + +// AddDeepCopyFuncs adds a function to the list of deep-copy functions. +// For the expected format of deep-copy function, see the comment for +// Copier.RegisterDeepCopyFunction. +func (s *Scheme) AddDeepCopyFuncs(deepCopyFuncs ...interface{}) error { + for _, f := range deepCopyFuncs { + if err := s.cloner.RegisterDeepCopyFunc(f); err != nil { + return err + } + } + return nil +} + +// Similar to AddDeepCopyFuncs, but registers deep-copy functions that were +// automatically generated. +func (s *Scheme) AddGeneratedDeepCopyFuncs(deepCopyFuncs ...conversion.GeneratedDeepCopyFunc) error { + for _, fn := range deepCopyFuncs { + if err := s.cloner.RegisterGeneratedDeepCopyFunc(fn); err != nil { + return err + } + } + return nil +} + +// AddFieldLabelConversionFunc adds a conversion function to convert field selectors +// of the given kind from the given version to internal version representation. +func (s *Scheme) AddFieldLabelConversionFunc(version, kind string, conversionFunc FieldLabelConversionFunc) error { + if s.fieldLabelConversionFuncs[version] == nil { + s.fieldLabelConversionFuncs[version] = map[string]FieldLabelConversionFunc{} + } + + s.fieldLabelConversionFuncs[version][kind] = conversionFunc + return nil +} + +// AddStructFieldConversion allows you to specify a mechanical copy for a moved +// or renamed struct field without writing an entire conversion function. See +// the comment in conversion.Converter.SetStructFieldCopy for parameter details. +// Call as many times as needed, even on the same fields. +func (s *Scheme) AddStructFieldConversion(srcFieldType interface{}, srcFieldName string, destFieldType interface{}, destFieldName string) error { + return s.converter.SetStructFieldCopy(srcFieldType, srcFieldName, destFieldType, destFieldName) +} + +// RegisterInputDefaults sets the provided field mapping function and field matching +// as the defaults for the provided input type. The fn may be nil, in which case no +// mapping will happen by default. Use this method to register a mechanism for handling +// a specific input type in conversion, such as a map[string]string to structs. +func (s *Scheme) RegisterInputDefaults(in interface{}, fn conversion.FieldMappingFunc, defaultFlags conversion.FieldMatchingFlags) error { + return s.converter.RegisterInputDefaults(in, fn, defaultFlags) +} + +// AddDefaultingFuncs adds functions to the list of default-value functions. +// Each of the given functions is responsible for applying default values +// when converting an instance of a versioned API object into an internal +// API object. These functions do not need to handle sub-objects. We deduce +// how to call these functions from the types of their two parameters. +// +// s.AddDefaultingFuncs( +// func(obj *v1.Pod) { +// if obj.OptionalField == "" { +// obj.OptionalField = "DefaultValue" +// } +// }, +// ) +func (s *Scheme) AddDefaultingFuncs(defaultingFuncs ...interface{}) error { + for _, f := range defaultingFuncs { + err := s.converter.RegisterDefaultingFunc(f) + if err != nil { + return err + } + } + return nil +} + +// Copy does a deep copy of an API object. +func (s *Scheme) Copy(src Object) (Object, error) { + dst, err := s.DeepCopy(src) + if err != nil { + return nil, err + } + return dst.(Object), nil +} + +// Performs a deep copy of the given object. +func (s *Scheme) DeepCopy(src interface{}) (interface{}, error) { + return s.cloner.DeepCopy(src) +} + +// Convert will attempt to convert in into out. Both must be pointers. For easy +// testing of conversion functions. Returns an error if the conversion isn't +// possible. You can call this with types that haven't been registered (for example, +// a to test conversion of types that are nested within registered types). The +// context interface is passed to the convertor. +// TODO: identify whether context should be hidden, or behind a formal context/scope +// interface +func (s *Scheme) Convert(in, out interface{}, context interface{}) error { + flags, meta := s.generateConvertMeta(in) + meta.Context = context + if flags == 0 { + flags = conversion.AllowDifferentFieldTypeNames + } + return s.converter.Convert(in, out, flags, meta) +} + +// Converts the given field label and value for an kind field selector from +// versioned representation to an unversioned one. +func (s *Scheme) ConvertFieldLabel(version, kind, label, value string) (string, string, error) { + if s.fieldLabelConversionFuncs[version] == nil { + return "", "", fmt.Errorf("No field label conversion function found for version: %s", version) + } + conversionFunc, ok := s.fieldLabelConversionFuncs[version][kind] + if !ok { + return "", "", fmt.Errorf("No field label conversion function found for version %s and kind %s", version, kind) + } + return conversionFunc(label, value) +} + +// ConvertToVersion attempts to convert an input object to its matching Kind in another +// version within this scheme. Will return an error if the provided version does not +// contain the inKind (or a mapping by name defined with AddKnownTypeWithName). Will also +// return an error if the conversion does not result in a valid Object being +// returned. Passes target down to the conversion methods as the Context on the scope. +func (s *Scheme) ConvertToVersion(in Object, target GroupVersioner) (Object, error) { + return s.convertToVersion(true, in, target) +} + +// UnsafeConvertToVersion will convert in to the provided target if such a conversion is possible, +// but does not guarantee the output object does not share fields with the input object. It attempts to be as +// efficient as possible when doing conversion. +func (s *Scheme) UnsafeConvertToVersion(in Object, target GroupVersioner) (Object, error) { + return s.convertToVersion(false, in, target) +} + +// convertToVersion handles conversion with an optional copy. +func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) (Object, error) { + // determine the incoming kinds with as few allocations as possible. + t := reflect.TypeOf(in) + if t.Kind() != reflect.Ptr { + return nil, fmt.Errorf("only pointer types may be converted: %v", t) + } + t = t.Elem() + if t.Kind() != reflect.Struct { + return nil, fmt.Errorf("only pointers to struct types may be converted: %v", t) + } + kinds, ok := s.typeToGVK[t] + if !ok || len(kinds) == 0 { + return nil, NewNotRegisteredErr(unversioned.GroupVersionKind{}, t) + } + + gvk, ok := target.KindForGroupVersionKinds(kinds) + if !ok { + // TODO: should this be a typed error? + return nil, fmt.Errorf("%v is not suitable for converting to %q", t, target) + } + + // target wants to use the existing type, set kind and return (no conversion necessary) + for _, kind := range kinds { + if gvk == kind { + return copyAndSetTargetKind(copy, s, in, gvk) + } + } + + // type is unversioned, no conversion necessary + if unversionedKind, ok := s.unversionedTypes[t]; ok { + if gvk, ok := target.KindForGroupVersionKinds([]unversioned.GroupVersionKind{unversionedKind}); ok { + return copyAndSetTargetKind(copy, s, in, gvk) + } + return copyAndSetTargetKind(copy, s, in, unversionedKind) + } + + out, err := s.New(gvk) + if err != nil { + return nil, err + } + + if copy { + copied, err := s.Copy(in) + if err != nil { + return nil, err + } + in = copied + } + + flags, meta := s.generateConvertMeta(in) + meta.Context = target + if err := s.converter.Convert(in, out, flags, meta); err != nil { + return nil, err + } + + setTargetKind(out, gvk) + return out, nil +} + +// generateConvertMeta constructs the meta value we pass to Convert. +func (s *Scheme) generateConvertMeta(in interface{}) (conversion.FieldMatchingFlags, *conversion.Meta) { + return s.converter.DefaultMeta(reflect.TypeOf(in)) +} + +// copyAndSetTargetKind performs a conditional copy before returning the object, or an error if copy was not successful. +func copyAndSetTargetKind(copy bool, copier ObjectCopier, obj Object, kind unversioned.GroupVersionKind) (Object, error) { + if copy { + copied, err := copier.Copy(obj) + if err != nil { + return nil, err + } + obj = copied + } + setTargetKind(obj, kind) + return obj, nil +} + +// setTargetKind sets the kind on an object, taking into account whether the target kind is the internal version. +func setTargetKind(obj Object, kind unversioned.GroupVersionKind) { + if kind.Version == APIVersionInternal { + // internal is a special case + // TODO: look at removing the need to special case this + obj.GetObjectKind().SetGroupVersionKind(unversioned.GroupVersionKind{}) + return + } + obj.GetObjectKind().SetGroupVersionKind(kind) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/scheme_builder.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/scheme_builder.go new file mode 100644 index 00000000..944db481 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/scheme_builder.go @@ -0,0 +1,48 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +// SchemeBuilder collects functions that add things to a scheme. It's to allow +// code to compile without explicitly referencing generated types. You should +// declare one in each package that will have generated deep copy or conversion +// functions. +type SchemeBuilder []func(*Scheme) error + +// AddToScheme applies all the stored functions to the scheme. A non-nil error +// indicates that one function failed and the attempt was abandoned. +func (sb *SchemeBuilder) AddToScheme(s *Scheme) error { + for _, f := range *sb { + if err := f(s); err != nil { + return err + } + } + return nil +} + +// Register adds a scheme setup function to the list. +func (sb *SchemeBuilder) Register(funcs ...func(*Scheme) error) { + for _, f := range funcs { + *sb = append(*sb, f) + } +} + +// NewSchemeBuilder calls Register for you. +func NewSchemeBuilder(funcs ...func(*Scheme) error) SchemeBuilder { + var sb SchemeBuilder + sb.Register(funcs...) + return sb +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/codec_factory.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/codec_factory.go new file mode 100644 index 00000000..d369f515 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/codec_factory.go @@ -0,0 +1,348 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package serializer + +import ( + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/runtime/serializer/json" + "k8s.io/client-go/1.4/pkg/runtime/serializer/recognizer" + "k8s.io/client-go/1.4/pkg/runtime/serializer/versioning" +) + +// serializerExtensions are for serializers that are conditionally compiled in +var serializerExtensions = []func(*runtime.Scheme) (serializerType, bool){} + +type serializerType struct { + AcceptContentTypes []string + ContentType string + FileExtensions []string + // EncodesAsText should be true if this content type can be represented safely in UTF-8 + EncodesAsText bool + + Serializer runtime.Serializer + PrettySerializer runtime.Serializer + // RawSerializer serializes an object without adding a type wrapper. Some serializers, like JSON + // automatically include identifying type information with the JSON. Others, like Protobuf, need + // a wrapper object that includes type information. This serializer should be set if the serializer + // can serialize / deserialize objects without type info. Note that this serializer will always + // be expected to pass into or a gvk to Decode, since no type information will be available on + // the object itself. + RawSerializer runtime.Serializer + // Specialize gives the type the opportunity to return a different serializer implementation if + // the content type contains alternate operations. Here it is used to implement "pretty" as an + // option to application/json, but could also be used to allow serializers to perform type + // defaulting or alter output. + Specialize func(map[string]string) (runtime.Serializer, bool) + + AcceptStreamContentTypes []string + StreamContentType string + + Framer runtime.Framer + StreamSerializer runtime.Serializer + StreamSpecialize func(map[string]string) (runtime.Serializer, bool) +} + +func newSerializersForScheme(scheme *runtime.Scheme, mf json.MetaFactory) []serializerType { + jsonSerializer := json.NewSerializer(mf, scheme, scheme, false) + jsonPrettySerializer := json.NewSerializer(mf, scheme, scheme, true) + yamlSerializer := json.NewYAMLSerializer(mf, scheme, scheme) + + serializers := []serializerType{ + { + AcceptContentTypes: []string{"application/json"}, + ContentType: "application/json", + FileExtensions: []string{"json"}, + EncodesAsText: true, + Serializer: jsonSerializer, + PrettySerializer: jsonPrettySerializer, + + AcceptStreamContentTypes: []string{"application/json", "application/json;stream=watch"}, + StreamContentType: "application/json", + Framer: json.Framer, + StreamSerializer: jsonSerializer, + }, + { + AcceptContentTypes: []string{"application/yaml"}, + ContentType: "application/yaml", + FileExtensions: []string{"yaml"}, + EncodesAsText: true, + Serializer: yamlSerializer, + + // TODO: requires runtime.RawExtension to properly distinguish when the nested content is + // yaml, because the yaml encoder invokes MarshalJSON first + //AcceptStreamContentTypes: []string{"application/yaml", "application/yaml;stream=watch"}, + //StreamContentType: "application/yaml;stream=watch", + //Framer: json.YAMLFramer, + //StreamSerializer: yamlSerializer, + }, + } + + for _, fn := range serializerExtensions { + if serializer, ok := fn(scheme); ok { + serializers = append(serializers, serializer) + } + } + return serializers +} + +// CodecFactory provides methods for retrieving codecs and serializers for specific +// versions and content types. +type CodecFactory struct { + scheme *runtime.Scheme + serializers []serializerType + universal runtime.Decoder + accepts []string + streamingAccepts []string + + legacySerializer runtime.Serializer +} + +// NewCodecFactory provides methods for retrieving serializers for the supported wire formats +// and conversion wrappers to define preferred internal and external versions. In the future, +// as the internal version is used less, callers may instead use a defaulting serializer and +// only convert objects which are shared internally (Status, common API machinery). +// TODO: allow other codecs to be compiled in? +// TODO: accept a scheme interface +func NewCodecFactory(scheme *runtime.Scheme) CodecFactory { + serializers := newSerializersForScheme(scheme, json.DefaultMetaFactory) + return newCodecFactory(scheme, serializers) +} + +// newCodecFactory is a helper for testing that allows a different metafactory to be specified. +func newCodecFactory(scheme *runtime.Scheme, serializers []serializerType) CodecFactory { + decoders := make([]runtime.Decoder, 0, len(serializers)) + accepts := []string{} + alreadyAccepted := make(map[string]struct{}) + + var legacySerializer runtime.Serializer + for _, d := range serializers { + decoders = append(decoders, d.Serializer) + for _, mediaType := range d.AcceptContentTypes { + if _, ok := alreadyAccepted[mediaType]; ok { + continue + } + alreadyAccepted[mediaType] = struct{}{} + accepts = append(accepts, mediaType) + if mediaType == "application/json" { + legacySerializer = d.Serializer + } + } + } + if legacySerializer == nil { + legacySerializer = serializers[0].Serializer + } + + streamAccepts := []string{} + alreadyAccepted = make(map[string]struct{}) + for _, d := range serializers { + if len(d.StreamContentType) == 0 { + continue + } + for _, mediaType := range d.AcceptStreamContentTypes { + if _, ok := alreadyAccepted[mediaType]; ok { + continue + } + alreadyAccepted[mediaType] = struct{}{} + streamAccepts = append(streamAccepts, mediaType) + } + } + + return CodecFactory{ + scheme: scheme, + serializers: serializers, + universal: recognizer.NewDecoder(decoders...), + + accepts: accepts, + streamingAccepts: streamAccepts, + + legacySerializer: legacySerializer, + } +} + +var _ runtime.NegotiatedSerializer = &CodecFactory{} + +// SupportedMediaTypes returns the RFC2046 media types that this factory has serializers for. +func (f CodecFactory) SupportedMediaTypes() []string { + return f.accepts +} + +// SupportedStreamingMediaTypes returns the RFC2046 media types that this factory has stream serializers for. +func (f CodecFactory) SupportedStreamingMediaTypes() []string { + return f.streamingAccepts +} + +// LegacyCodec encodes output to a given API versions, and decodes output into the internal form from +// any recognized source. The returned codec will always encode output to JSON. If a type is not +// found in the list of versions an error will be returned. +// +// This method is deprecated - clients and servers should negotiate a serializer by mime-type and +// invoke CodecForVersions. Callers that need only to read data should use UniversalDecoder(). +// +// TODO: make this call exist only in pkg/api, and initialize it with the set of default versions. +// All other callers will be forced to request a Codec directly. +func (f CodecFactory) LegacyCodec(version ...unversioned.GroupVersion) runtime.Codec { + return versioning.NewCodecForScheme(f.scheme, f.legacySerializer, f.universal, unversioned.GroupVersions(version), runtime.InternalGroupVersioner) +} + +// UniversalDeserializer can convert any stored data recognized by this factory into a Go object that satisfies +// runtime.Object. It does not perform conversion. It does not perform defaulting. +func (f CodecFactory) UniversalDeserializer() runtime.Decoder { + return f.universal +} + +// UniversalDecoder returns a runtime.Decoder capable of decoding all known API objects in all known formats. Used +// by clients that do not need to encode objects but want to deserialize API objects stored on disk. Only decodes +// objects in groups registered with the scheme. The GroupVersions passed may be used to select alternate +// versions of objects to return - by default, runtime.APIVersionInternal is used. If any versions are specified, +// unrecognized groups will be returned in the version they are encoded as (no conversion). This decoder performs +// defaulting. +// +// TODO: the decoder will eventually be removed in favor of dealing with objects in their versioned form +// TODO: only accept a group versioner +func (f CodecFactory) UniversalDecoder(versions ...unversioned.GroupVersion) runtime.Decoder { + var versioner runtime.GroupVersioner + if len(versions) == 0 { + versioner = runtime.InternalGroupVersioner + } else { + versioner = unversioned.GroupVersions(versions) + } + return f.CodecForVersions(nil, f.universal, nil, versioner) +} + +// CodecForVersions creates a codec with the provided serializer. If an object is decoded and its group is not in the list, +// it will default to runtime.APIVersionInternal. If encode is not specified for an object's group, the object is not +// converted. If encode or decode are nil, no conversion is performed. +func (f CodecFactory) CodecForVersions(encoder runtime.Encoder, decoder runtime.Decoder, encode runtime.GroupVersioner, decode runtime.GroupVersioner) runtime.Codec { + // TODO: these are for backcompat, remove them in the future + if encode == nil { + encode = runtime.DisabledGroupVersioner + } + if decode == nil { + decode = runtime.InternalGroupVersioner + } + return versioning.NewCodecForScheme(f.scheme, encoder, decoder, encode, decode) +} + +// DecoderToVersion returns a decoder that targets the provided group version. +func (f CodecFactory) DecoderToVersion(decoder runtime.Decoder, gv runtime.GroupVersioner) runtime.Decoder { + return f.CodecForVersions(nil, decoder, nil, gv) +} + +// EncoderForVersion returns an encoder that targets the provided group version. +func (f CodecFactory) EncoderForVersion(encoder runtime.Encoder, gv runtime.GroupVersioner) runtime.Encoder { + return f.CodecForVersions(encoder, nil, gv, nil) +} + +// SerializerForMediaType returns a serializer that matches the provided RFC2046 mediaType, or false if no such +// serializer exists +func (f CodecFactory) SerializerForMediaType(mediaType string, params map[string]string) (runtime.SerializerInfo, bool) { + for _, s := range f.serializers { + for _, accepted := range s.AcceptContentTypes { + if accepted == mediaType { + // specialization abstracts variants to the content type + if s.Specialize != nil && len(params) > 0 { + serializer, ok := s.Specialize(params) + // TODO: return formatted mediaType+params + return runtime.SerializerInfo{Serializer: serializer, MediaType: s.ContentType, EncodesAsText: s.EncodesAsText}, ok + } + + // legacy support for ?pretty=1 continues, but this is more formally defined + if v, ok := params["pretty"]; ok && v == "1" && s.PrettySerializer != nil { + return runtime.SerializerInfo{Serializer: s.PrettySerializer, MediaType: s.ContentType, EncodesAsText: s.EncodesAsText}, true + } + + // return the base variant + return runtime.SerializerInfo{Serializer: s.Serializer, MediaType: s.ContentType, EncodesAsText: s.EncodesAsText}, true + } + } + } + return runtime.SerializerInfo{}, false +} + +// StreamingSerializerForMediaType returns a serializer that matches the provided RFC2046 mediaType, or false if no such +// serializer exists +func (f CodecFactory) StreamingSerializerForMediaType(mediaType string, params map[string]string) (runtime.StreamSerializerInfo, bool) { + for _, s := range f.serializers { + for _, accepted := range s.AcceptStreamContentTypes { + if accepted == mediaType { + // TODO: accept params + nested, ok := f.SerializerForMediaType(s.ContentType, nil) + if !ok { + panic("no serializer defined for internal content type") + } + + if s.StreamSpecialize != nil && len(params) > 0 { + serializer, ok := s.StreamSpecialize(params) + // TODO: return formatted mediaType+params + return runtime.StreamSerializerInfo{ + SerializerInfo: runtime.SerializerInfo{ + Serializer: serializer, + MediaType: s.StreamContentType, + EncodesAsText: s.EncodesAsText, + }, + Framer: s.Framer, + Embedded: nested, + }, ok + } + + return runtime.StreamSerializerInfo{ + SerializerInfo: runtime.SerializerInfo{ + Serializer: s.StreamSerializer, + MediaType: s.StreamContentType, + EncodesAsText: s.EncodesAsText, + }, + Framer: s.Framer, + Embedded: nested, + }, true + } + } + } + return runtime.StreamSerializerInfo{}, false +} + +// SerializerForFileExtension returns a serializer for the provided extension, or false if no serializer matches. +func (f CodecFactory) SerializerForFileExtension(extension string) (runtime.Serializer, bool) { + for _, s := range f.serializers { + for _, ext := range s.FileExtensions { + if extension == ext { + return s.Serializer, true + } + } + } + return nil, false +} + +// DirectCodecFactory provides methods for retrieving "DirectCodec"s, which do not do conversion. +type DirectCodecFactory struct { + CodecFactory +} + +// EncoderForVersion returns an encoder that does not do conversion. gv is ignored. +func (f DirectCodecFactory) EncoderForVersion(serializer runtime.Encoder, _ runtime.GroupVersioner) runtime.Encoder { + return versioning.DirectEncoder{ + Encoder: serializer, + ObjectTyper: f.CodecFactory.scheme, + } +} + +// DecoderToVersion returns an decoder that does not do conversion. gv is ignored. +func (f DirectCodecFactory) DecoderToVersion(serializer runtime.Decoder, _ runtime.GroupVersioner) runtime.Decoder { + return versioning.DirectDecoder{ + Decoder: serializer, + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/json/json.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/json/json.go new file mode 100644 index 00000000..a50ddd63 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/json/json.go @@ -0,0 +1,245 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package json + +import ( + "encoding/json" + "io" + + "github.com/ghodss/yaml" + "github.com/ugorji/go/codec" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/runtime/serializer/recognizer" + "k8s.io/client-go/1.4/pkg/util/framer" + utilyaml "k8s.io/client-go/1.4/pkg/util/yaml" +) + +// NewSerializer creates a JSON serializer that handles encoding versioned objects into the proper JSON form. If typer +// is not nil, the object has the group, version, and kind fields set. +func NewSerializer(meta MetaFactory, creater runtime.ObjectCreater, typer runtime.ObjectTyper, pretty bool) *Serializer { + return &Serializer{ + meta: meta, + creater: creater, + typer: typer, + yaml: false, + pretty: pretty, + } +} + +// NewYAMLSerializer creates a YAML serializer that handles encoding versioned objects into the proper YAML form. If typer +// is not nil, the object has the group, version, and kind fields set. This serializer supports only the subset of YAML that +// matches JSON, and will error if constructs are used that do not serialize to JSON. +func NewYAMLSerializer(meta MetaFactory, creater runtime.ObjectCreater, typer runtime.ObjectTyper) *Serializer { + return &Serializer{ + meta: meta, + creater: creater, + typer: typer, + yaml: true, + } +} + +type Serializer struct { + meta MetaFactory + creater runtime.ObjectCreater + typer runtime.ObjectTyper + yaml bool + pretty bool +} + +// Serializer implements Serializer +var _ runtime.Serializer = &Serializer{} +var _ recognizer.RecognizingDecoder = &Serializer{} + +// Decode attempts to convert the provided data into YAML or JSON, extract the stored schema kind, apply the provided default gvk, and then +// load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, the raw data will be +// extracted and no decoding will be performed. If into is not registered with the typer, then the object will be straight decoded using +// normal JSON/YAML unmarshalling. If into is provided and the original data is not fully qualified with kind/version/group, the type of +// the into will be used to alter the returned gvk. On success or most errors, the method will return the calculated schema kind. +func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { + if versioned, ok := into.(*runtime.VersionedObjects); ok { + into = versioned.Last() + obj, actual, err := s.Decode(originalData, gvk, into) + if err != nil { + return nil, actual, err + } + versioned.Objects = []runtime.Object{obj} + return versioned, actual, nil + } + + data := originalData + if s.yaml { + altered, err := yaml.YAMLToJSON(data) + if err != nil { + return nil, nil, err + } + data = altered + } + + actual, err := s.meta.Interpret(data) + if err != nil { + return nil, nil, err + } + + if gvk != nil { + // apply kind and version defaulting from provided default + if len(actual.Kind) == 0 { + actual.Kind = gvk.Kind + } + if len(actual.Version) == 0 && len(actual.Group) == 0 { + actual.Group = gvk.Group + actual.Version = gvk.Version + } + if len(actual.Version) == 0 && actual.Group == gvk.Group { + actual.Version = gvk.Version + } + } + + if unk, ok := into.(*runtime.Unknown); ok && unk != nil { + unk.Raw = originalData + unk.ContentType = runtime.ContentTypeJSON + unk.GetObjectKind().SetGroupVersionKind(*actual) + return unk, actual, nil + } + + if into != nil { + types, _, err := s.typer.ObjectKinds(into) + switch { + case runtime.IsNotRegisteredError(err): + if err := codec.NewDecoderBytes(data, new(codec.JsonHandle)).Decode(into); err != nil { + return nil, actual, err + } + return into, actual, nil + case err != nil: + return nil, actual, err + default: + typed := types[0] + if len(actual.Kind) == 0 { + actual.Kind = typed.Kind + } + if len(actual.Version) == 0 && len(actual.Group) == 0 { + actual.Group = typed.Group + actual.Version = typed.Version + } + if len(actual.Version) == 0 && actual.Group == typed.Group { + actual.Version = typed.Version + } + } + } + + if len(actual.Kind) == 0 { + return nil, actual, runtime.NewMissingKindErr(string(originalData)) + } + if len(actual.Version) == 0 { + return nil, actual, runtime.NewMissingVersionErr(string(originalData)) + } + + // use the target if necessary + obj, err := runtime.UseOrCreateObject(s.typer, s.creater, *actual, into) + if err != nil { + return nil, actual, err + } + + if err := codec.NewDecoderBytes(data, new(codec.JsonHandle)).Decode(obj); err != nil { + return nil, actual, err + } + return obj, actual, nil +} + +// Encode serializes the provided object to the given writer. +func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error { + if s.yaml { + json, err := json.Marshal(obj) + if err != nil { + return err + } + data, err := yaml.JSONToYAML(json) + if err != nil { + return err + } + _, err = w.Write(data) + return err + } + + if s.pretty { + data, err := json.MarshalIndent(obj, "", " ") + if err != nil { + return err + } + _, err = w.Write(data) + return err + } + encoder := json.NewEncoder(w) + return encoder.Encode(obj) +} + +// RecognizesData implements the RecognizingDecoder interface. +func (s *Serializer) RecognizesData(peek io.Reader) (ok, unknown bool, err error) { + if s.yaml { + // we could potentially look for '---' + return false, true, nil + } + _, ok = utilyaml.GuessJSONStream(peek, 2048) + return ok, false, nil +} + +// Framer is the default JSON framing behavior, with newlines delimiting individual objects. +var Framer = jsonFramer{} + +type jsonFramer struct{} + +// NewFrameWriter implements stream framing for this serializer +func (jsonFramer) NewFrameWriter(w io.Writer) io.Writer { + // we can write JSON objects directly to the writer, because they are self-framing + return w +} + +// NewFrameReader implements stream framing for this serializer +func (jsonFramer) NewFrameReader(r io.ReadCloser) io.ReadCloser { + // we need to extract the JSON chunks of data to pass to Decode() + return framer.NewJSONFramedReader(r) +} + +// Framer is the default JSON framing behavior, with newlines delimiting individual objects. +var YAMLFramer = yamlFramer{} + +type yamlFramer struct{} + +// NewFrameWriter implements stream framing for this serializer +func (yamlFramer) NewFrameWriter(w io.Writer) io.Writer { + return yamlFrameWriter{w} +} + +// NewFrameReader implements stream framing for this serializer +func (yamlFramer) NewFrameReader(r io.ReadCloser) io.ReadCloser { + // extract the YAML document chunks directly + return utilyaml.NewDocumentDecoder(r) +} + +type yamlFrameWriter struct { + w io.Writer +} + +// Write separates each document with the YAML document separator (`---` followed by line +// break). Writers must write well formed YAML documents (include a final line break). +func (w yamlFrameWriter) Write(data []byte) (n int, err error) { + if _, err := w.w.Write([]byte("---\n")); err != nil { + return 0, err + } + return w.w.Write(data) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/json/meta.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/json/meta.go new file mode 100644 index 00000000..6044ed37 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/json/meta.go @@ -0,0 +1,61 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package json + +import ( + "encoding/json" + "fmt" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// MetaFactory is used to store and retrieve the version and kind +// information for JSON objects in a serializer. +type MetaFactory interface { + // Interpret should return the version and kind of the wire-format of + // the object. + Interpret(data []byte) (*unversioned.GroupVersionKind, error) +} + +// DefaultMetaFactory is a default factory for versioning objects in JSON. The object +// in memory and in the default JSON serialization will use the "kind" and "apiVersion" +// fields. +var DefaultMetaFactory = SimpleMetaFactory{} + +// SimpleMetaFactory provides default methods for retrieving the type and version of objects +// that are identified with an "apiVersion" and "kind" fields in their JSON +// serialization. It may be parameterized with the names of the fields in memory, or an +// optional list of base structs to search for those fields in memory. +type SimpleMetaFactory struct { +} + +// Interpret will return the APIVersion and Kind of the JSON wire-format +// encoding of an object, or an error. +func (SimpleMetaFactory) Interpret(data []byte) (*unversioned.GroupVersionKind, error) { + findKind := struct { + APIVersion string `json:"apiVersion,omitempty"` + Kind string `json:"kind,omitempty"` + }{} + if err := json.Unmarshal(data, &findKind); err != nil { + return nil, fmt.Errorf("couldn't get version/kind; json parse error: %v", err) + } + gv, err := unversioned.ParseGroupVersion(findKind.APIVersion) + if err != nil { + return nil, err + } + return &unversioned.GroupVersionKind{Group: gv.Group, Version: gv.Version, Kind: findKind.Kind}, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/negotiated_codec.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/negotiated_codec.go new file mode 100644 index 00000000..69da948d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/negotiated_codec.go @@ -0,0 +1,56 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package serializer + +import ( + "k8s.io/client-go/1.4/pkg/runtime" +) + +// TODO: We should figure out what happens when someone asks +// encoder for version and it conflicts with the raw serializer. +type negotiatedSerializerWrapper struct { + info runtime.SerializerInfo + streamInfo runtime.StreamSerializerInfo +} + +func NegotiatedSerializerWrapper(info runtime.SerializerInfo, streamInfo runtime.StreamSerializerInfo) runtime.NegotiatedSerializer { + return &negotiatedSerializerWrapper{info, streamInfo} +} + +func (n *negotiatedSerializerWrapper) SupportedMediaTypes() []string { + return []string{} +} + +func (n *negotiatedSerializerWrapper) SerializerForMediaType(mediaType string, options map[string]string) (runtime.SerializerInfo, bool) { + return n.info, true +} + +func (n *negotiatedSerializerWrapper) SupportedStreamingMediaTypes() []string { + return []string{} +} + +func (n *negotiatedSerializerWrapper) StreamingSerializerForMediaType(mediaType string, options map[string]string) (runtime.StreamSerializerInfo, bool) { + return n.streamInfo, true +} + +func (n *negotiatedSerializerWrapper) EncoderForVersion(e runtime.Encoder, _ runtime.GroupVersioner) runtime.Encoder { + return e +} + +func (n *negotiatedSerializerWrapper) DecoderToVersion(d runtime.Decoder, _gv runtime.GroupVersioner) runtime.Decoder { + return d +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf/doc.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf/doc.go new file mode 100644 index 00000000..381748d6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package protobuf provides a Kubernetes serializer for the protobuf format. +package protobuf diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf/protobuf.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf/protobuf.go new file mode 100644 index 00000000..00de5961 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf/protobuf.go @@ -0,0 +1,448 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package protobuf + +import ( + "bytes" + "fmt" + "io" + "reflect" + + "github.com/gogo/protobuf/proto" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/runtime/serializer/recognizer" + "k8s.io/client-go/1.4/pkg/util/framer" +) + +var ( + // protoEncodingPrefix serves as a magic number for an encoded protobuf message on this serializer. All + // proto messages serialized by this schema will be preceded by the bytes 0x6b 0x38 0x73, with the fourth + // byte being reserved for the encoding style. The only encoding style defined is 0x00, which means that + // the rest of the byte stream is a message of type k8s.io.kubernetes.pkg.runtime.Unknown (proto2). + // + // See k8s.io/kubernetes/pkg/runtime/generated.proto for details of the runtime.Unknown message. + // + // This encoding scheme is experimental, and is subject to change at any time. + protoEncodingPrefix = []byte{0x6b, 0x38, 0x73, 0x00} +) + +type errNotMarshalable struct { + t reflect.Type +} + +func (e errNotMarshalable) Error() string { + return fmt.Sprintf("object %v does not implement the protobuf marshalling interface and cannot be encoded to a protobuf message", e.t) +} + +func IsNotMarshalable(err error) bool { + _, ok := err.(errNotMarshalable) + return err != nil && ok +} + +// NewSerializer creates a Protobuf serializer that handles encoding versioned objects into the proper wire form. If a typer +// is passed, the encoded object will have group, version, and kind fields set. If typer is nil, the objects will be written +// as-is (any type info passed with the object will be used). +// +// This encoding scheme is experimental, and is subject to change at any time. +func NewSerializer(creater runtime.ObjectCreater, typer runtime.ObjectTyper, defaultContentType string) *Serializer { + return &Serializer{ + prefix: protoEncodingPrefix, + creater: creater, + typer: typer, + contentType: defaultContentType, + } +} + +type Serializer struct { + prefix []byte + creater runtime.ObjectCreater + typer runtime.ObjectTyper + contentType string +} + +var _ runtime.Serializer = &Serializer{} +var _ recognizer.RecognizingDecoder = &Serializer{} + +// Decode attempts to convert the provided data into a protobuf message, extract the stored schema kind, apply the provided default +// gvk, and then load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, +// the raw data will be extracted and no decoding will be performed. If into is not registered with the typer, then the object will +// be straight decoded using normal protobuf unmarshalling (the MarshalTo interface). If into is provided and the original data is +// not fully qualified with kind/version/group, the type of the into will be used to alter the returned gvk. On success or most +// errors, the method will return the calculated schema kind. +func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { + if versioned, ok := into.(*runtime.VersionedObjects); ok { + into = versioned.Last() + obj, actual, err := s.Decode(originalData, gvk, into) + if err != nil { + return nil, actual, err + } + // the last item in versioned becomes into, so if versioned was not originally empty we reset the object + // array so the first position is the decoded object and the second position is the outermost object. + // if there were no objects in the versioned list passed to us, only add ourselves. + if into != nil && into != obj { + versioned.Objects = []runtime.Object{obj, into} + } else { + versioned.Objects = []runtime.Object{obj} + } + return versioned, actual, err + } + + prefixLen := len(s.prefix) + switch { + case len(originalData) == 0: + // TODO: treat like decoding {} from JSON with defaulting + return nil, nil, fmt.Errorf("empty data") + case len(originalData) < prefixLen || !bytes.Equal(s.prefix, originalData[:prefixLen]): + return nil, nil, fmt.Errorf("provided data does not appear to be a protobuf message, expected prefix %v", s.prefix) + case len(originalData) == prefixLen: + // TODO: treat like decoding {} from JSON with defaulting + return nil, nil, fmt.Errorf("empty body") + } + + data := originalData[prefixLen:] + unk := runtime.Unknown{} + if err := unk.Unmarshal(data); err != nil { + return nil, nil, err + } + + actual := unk.GroupVersionKind() + copyKindDefaults(&actual, gvk) + + if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil { + *intoUnknown = unk + if ok, _, _ := s.RecognizesData(bytes.NewBuffer(unk.Raw)); ok { + intoUnknown.ContentType = s.contentType + } + return intoUnknown, &actual, nil + } + + if into != nil { + types, _, err := s.typer.ObjectKinds(into) + switch { + case runtime.IsNotRegisteredError(err): + pb, ok := into.(proto.Message) + if !ok { + return nil, &actual, errNotMarshalable{reflect.TypeOf(into)} + } + if err := proto.Unmarshal(unk.Raw, pb); err != nil { + return nil, &actual, err + } + return into, &actual, nil + case err != nil: + return nil, &actual, err + default: + copyKindDefaults(&actual, &types[0]) + // if the result of defaulting did not set a version or group, ensure that at least group is set + // (copyKindDefaults will not assign Group if version is already set). This guarantees that the group + // of into is set if there is no better information from the caller or object. + if len(actual.Version) == 0 && len(actual.Group) == 0 { + actual.Group = types[0].Group + } + } + } + + if len(actual.Kind) == 0 { + return nil, &actual, runtime.NewMissingKindErr(fmt.Sprintf("%#v", unk.TypeMeta)) + } + if len(actual.Version) == 0 { + return nil, &actual, runtime.NewMissingVersionErr(fmt.Sprintf("%#v", unk.TypeMeta)) + } + + return unmarshalToObject(s.typer, s.creater, &actual, into, unk.Raw) +} + +// Encode serializes the provided object to the given writer. +func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error { + prefixSize := uint64(len(s.prefix)) + + var unk runtime.Unknown + switch t := obj.(type) { + case *runtime.Unknown: + estimatedSize := prefixSize + uint64(t.Size()) + data := make([]byte, estimatedSize) + i, err := t.MarshalTo(data[prefixSize:]) + if err != nil { + return err + } + copy(data, s.prefix) + _, err = w.Write(data[:prefixSize+uint64(i)]) + return err + default: + kind := obj.GetObjectKind().GroupVersionKind() + unk = runtime.Unknown{ + TypeMeta: runtime.TypeMeta{ + Kind: kind.Kind, + APIVersion: kind.GroupVersion().String(), + }, + } + } + + switch t := obj.(type) { + case bufferedMarshaller: + // this path performs a single allocation during write but requires the caller to implement + // the more efficient Size and MarshalTo methods + encodedSize := uint64(t.Size()) + estimatedSize := prefixSize + estimateUnknownSize(&unk, encodedSize) + data := make([]byte, estimatedSize) + + i, err := unk.NestedMarshalTo(data[prefixSize:], t, encodedSize) + if err != nil { + return err + } + + copy(data, s.prefix) + + _, err = w.Write(data[:prefixSize+uint64(i)]) + return err + + case proto.Marshaler: + // this path performs extra allocations + data, err := t.Marshal() + if err != nil { + return err + } + unk.Raw = data + + estimatedSize := prefixSize + uint64(unk.Size()) + data = make([]byte, estimatedSize) + + i, err := unk.MarshalTo(data[prefixSize:]) + if err != nil { + return err + } + + copy(data, s.prefix) + + _, err = w.Write(data[:prefixSize+uint64(i)]) + return err + + default: + // TODO: marshal with a different content type and serializer (JSON for third party objects) + return errNotMarshalable{reflect.TypeOf(obj)} + } +} + +// RecognizesData implements the RecognizingDecoder interface. +func (s *Serializer) RecognizesData(peek io.Reader) (bool, bool, error) { + prefix := make([]byte, 4) + n, err := peek.Read(prefix) + if err != nil { + if err == io.EOF { + return false, false, nil + } + return false, false, err + } + if n != 4 { + return false, false, nil + } + return bytes.Equal(s.prefix, prefix), false, nil +} + +// copyKindDefaults defaults dst to the value in src if dst does not have a value set. +func copyKindDefaults(dst, src *unversioned.GroupVersionKind) { + if src == nil { + return + } + // apply kind and version defaulting from provided default + if len(dst.Kind) == 0 { + dst.Kind = src.Kind + } + if len(dst.Version) == 0 && len(src.Version) > 0 { + dst.Group = src.Group + dst.Version = src.Version + } +} + +// bufferedMarshaller describes a more efficient marshalling interface that can avoid allocating multiple +// byte buffers by pre-calculating the size of the final buffer needed. +type bufferedMarshaller interface { + proto.Sizer + runtime.ProtobufMarshaller +} + +// estimateUnknownSize returns the expected bytes consumed by a given runtime.Unknown +// object with a nil RawJSON struct and the expected size of the provided buffer. The +// returned size will not be correct if RawJSOn is set on unk. +func estimateUnknownSize(unk *runtime.Unknown, byteSize uint64) uint64 { + size := uint64(unk.Size()) + // protobuf uses 1 byte for the tag, a varint for the length of the array (at most 8 bytes - uint64 - here), + // and the size of the array. + size += 1 + 8 + byteSize + return size +} + +// NewRawSerializer creates a Protobuf serializer that handles encoding versioned objects into the proper wire form. If typer +// is not nil, the object has the group, version, and kind fields set. This serializer does not provide type information for the +// encoded object, and thus is not self describing (callers must know what type is being described in order to decode). +// +// This encoding scheme is experimental, and is subject to change at any time. +func NewRawSerializer(creater runtime.ObjectCreater, typer runtime.ObjectTyper, defaultContentType string) *RawSerializer { + return &RawSerializer{ + creater: creater, + typer: typer, + contentType: defaultContentType, + } +} + +// RawSerializer encodes and decodes objects without adding a runtime.Unknown wrapper (objects are encoded without identifying +// type). +type RawSerializer struct { + creater runtime.ObjectCreater + typer runtime.ObjectTyper + contentType string +} + +var _ runtime.Serializer = &RawSerializer{} + +// Decode attempts to convert the provided data into a protobuf message, extract the stored schema kind, apply the provided default +// gvk, and then load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, +// the raw data will be extracted and no decoding will be performed. If into is not registered with the typer, then the object will +// be straight decoded using normal protobuf unmarshalling (the MarshalTo interface). If into is provided and the original data is +// not fully qualified with kind/version/group, the type of the into will be used to alter the returned gvk. On success or most +// errors, the method will return the calculated schema kind. +func (s *RawSerializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { + if into == nil { + return nil, nil, fmt.Errorf("this serializer requires an object to decode into: %#v", s) + } + + if versioned, ok := into.(*runtime.VersionedObjects); ok { + into = versioned.Last() + obj, actual, err := s.Decode(originalData, gvk, into) + if err != nil { + return nil, actual, err + } + if into != nil && into != obj { + versioned.Objects = []runtime.Object{obj, into} + } else { + versioned.Objects = []runtime.Object{obj} + } + return versioned, actual, err + } + + if len(originalData) == 0 { + // TODO: treat like decoding {} from JSON with defaulting + return nil, nil, fmt.Errorf("empty data") + } + data := originalData + + actual := &unversioned.GroupVersionKind{} + copyKindDefaults(actual, gvk) + + if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil { + intoUnknown.Raw = data + intoUnknown.ContentEncoding = "" + intoUnknown.ContentType = s.contentType + intoUnknown.SetGroupVersionKind(*actual) + return intoUnknown, actual, nil + } + + types, _, err := s.typer.ObjectKinds(into) + switch { + case runtime.IsNotRegisteredError(err): + pb, ok := into.(proto.Message) + if !ok { + return nil, actual, errNotMarshalable{reflect.TypeOf(into)} + } + if err := proto.Unmarshal(data, pb); err != nil { + return nil, actual, err + } + return into, actual, nil + case err != nil: + return nil, actual, err + default: + copyKindDefaults(actual, &types[0]) + // if the result of defaulting did not set a version or group, ensure that at least group is set + // (copyKindDefaults will not assign Group if version is already set). This guarantees that the group + // of into is set if there is no better information from the caller or object. + if len(actual.Version) == 0 && len(actual.Group) == 0 { + actual.Group = types[0].Group + } + } + + if len(actual.Kind) == 0 { + return nil, actual, runtime.NewMissingKindErr("") + } + if len(actual.Version) == 0 { + return nil, actual, runtime.NewMissingVersionErr("") + } + + return unmarshalToObject(s.typer, s.creater, actual, into, data) +} + +// unmarshalToObject is the common code between decode in the raw and normal serializer. +func unmarshalToObject(typer runtime.ObjectTyper, creater runtime.ObjectCreater, actual *unversioned.GroupVersionKind, into runtime.Object, data []byte) (runtime.Object, *unversioned.GroupVersionKind, error) { + // use the target if necessary + obj, err := runtime.UseOrCreateObject(typer, creater, *actual, into) + if err != nil { + return nil, actual, err + } + + pb, ok := obj.(proto.Message) + if !ok { + return nil, actual, errNotMarshalable{reflect.TypeOf(obj)} + } + if err := proto.Unmarshal(data, pb); err != nil { + return nil, actual, err + } + return obj, actual, nil +} + +// Encode serializes the provided object to the given writer. Overrides is ignored. +func (s *RawSerializer) Encode(obj runtime.Object, w io.Writer) error { + switch t := obj.(type) { + case bufferedMarshaller: + // this path performs a single allocation during write but requires the caller to implement + // the more efficient Size and MarshalTo methods + encodedSize := uint64(t.Size()) + data := make([]byte, encodedSize) + + n, err := t.MarshalTo(data) + if err != nil { + return err + } + _, err = w.Write(data[:n]) + return err + + case proto.Marshaler: + // this path performs extra allocations + data, err := t.Marshal() + if err != nil { + return err + } + _, err = w.Write(data) + return err + + default: + return errNotMarshalable{reflect.TypeOf(obj)} + } +} + +var LengthDelimitedFramer = lengthDelimitedFramer{} + +type lengthDelimitedFramer struct{} + +// NewFrameWriter implements stream framing for this serializer +func (lengthDelimitedFramer) NewFrameWriter(w io.Writer) io.Writer { + return framer.NewLengthDelimitedFrameWriter(w) +} + +// NewFrameReader implements stream framing for this serializer +func (lengthDelimitedFramer) NewFrameReader(r io.ReadCloser) io.ReadCloser { + return framer.NewLengthDelimitedFrameReader(r) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf_extension.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf_extension.go new file mode 100644 index 00000000..fc6b0e85 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf_extension.go @@ -0,0 +1,52 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package serializer + +import ( + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/runtime/serializer/protobuf" +) + +const ( + // contentTypeProtobuf is the protobuf type exposed for Kubernetes. It is private to prevent others from + // depending on it unintentionally. + // TODO: potentially move to pkg/api (since it's part of the Kube public API) and pass it in to the + // CodecFactory on initialization. + contentTypeProtobuf = "application/vnd.kubernetes.protobuf" + contentTypeProtobufWatch = contentTypeProtobuf + ";stream=watch" +) + +func protobufSerializer(scheme *runtime.Scheme) (serializerType, bool) { + serializer := protobuf.NewSerializer(scheme, scheme, contentTypeProtobuf) + raw := protobuf.NewRawSerializer(scheme, scheme, contentTypeProtobuf) + return serializerType{ + AcceptContentTypes: []string{contentTypeProtobuf}, + ContentType: contentTypeProtobuf, + FileExtensions: []string{"pb"}, + Serializer: serializer, + RawSerializer: raw, + + AcceptStreamContentTypes: []string{contentTypeProtobuf, contentTypeProtobufWatch}, + StreamContentType: contentTypeProtobufWatch, + Framer: protobuf.LengthDelimitedFramer, + StreamSerializer: raw, + }, true +} + +func init() { + serializerExtensions = append(serializerExtensions, protobufSerializer) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/recognizer/recognizer.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/recognizer/recognizer.go new file mode 100644 index 00000000..d5d2f3f2 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/recognizer/recognizer.go @@ -0,0 +1,127 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package recognizer + +import ( + "bufio" + "bytes" + "fmt" + "io" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +type RecognizingDecoder interface { + runtime.Decoder + // RecognizesData should return true if the input provided in the provided reader + // belongs to this decoder, or an error if the data could not be read or is ambiguous. + // Unknown is true if the data could not be determined to match the decoder type. + // Decoders should assume that they can read as much of peek as they need (as the caller + // provides) and may return unknown if the data provided is not sufficient to make a + // a determination. When peek returns EOF that may mean the end of the input or the + // end of buffered input - recognizers should return the best guess at that time. + RecognizesData(peek io.Reader) (ok, unknown bool, err error) +} + +// NewDecoder creates a decoder that will attempt multiple decoders in an order defined +// by: +// +// 1. The decoder implements RecognizingDecoder and identifies the data +// 2. All other decoders, and any decoder that returned true for unknown. +// +// The order passed to the constructor is preserved within those priorities. +func NewDecoder(decoders ...runtime.Decoder) runtime.Decoder { + return &decoder{ + decoders: decoders, + } +} + +type decoder struct { + decoders []runtime.Decoder +} + +var _ RecognizingDecoder = &decoder{} + +func (d *decoder) RecognizesData(peek io.Reader) (bool, bool, error) { + var ( + lastErr error + anyUnknown bool + ) + data, _ := bufio.NewReaderSize(peek, 1024).Peek(1024) + for _, r := range d.decoders { + switch t := r.(type) { + case RecognizingDecoder: + ok, unknown, err := t.RecognizesData(bytes.NewBuffer(data)) + if err != nil { + lastErr = err + continue + } + anyUnknown = anyUnknown || unknown + if !ok { + continue + } + return true, false, nil + } + } + return false, anyUnknown, lastErr +} + +func (d *decoder) Decode(data []byte, gvk *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { + var ( + lastErr error + skipped []runtime.Decoder + ) + + // try recognizers, record any decoders we need to give a chance later + for _, r := range d.decoders { + switch t := r.(type) { + case RecognizingDecoder: + buf := bytes.NewBuffer(data) + ok, unknown, err := t.RecognizesData(buf) + if err != nil { + lastErr = err + continue + } + if unknown { + skipped = append(skipped, t) + continue + } + if !ok { + continue + } + return r.Decode(data, gvk, into) + default: + skipped = append(skipped, t) + } + } + + // try recognizers that returned unknown or didn't recognize their data + for _, r := range skipped { + out, actual, err := r.Decode(data, gvk, into) + if err != nil { + lastErr = err + continue + } + return out, actual, nil + } + + if lastErr == nil { + lastErr = fmt.Errorf("no serialization format matched the provided data") + } + return nil, nil, lastErr +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/streaming/streaming.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/streaming/streaming.go new file mode 100644 index 00000000..2a0e1559 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/streaming/streaming.go @@ -0,0 +1,137 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package streaming implements encoder and decoder for streams +// of runtime.Objects over io.Writer/Readers. +package streaming + +import ( + "bytes" + "fmt" + "io" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// Encoder is a runtime.Encoder on a stream. +type Encoder interface { + // Encode will write the provided object to the stream or return an error. It obeys the same + // contract as runtime.VersionedEncoder. + Encode(obj runtime.Object) error +} + +// Decoder is a runtime.Decoder from a stream. +type Decoder interface { + // Decode will return io.EOF when no more objects are available. + Decode(defaults *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) + // Close closes the underlying stream. + Close() error +} + +// Serializer is a factory for creating encoders and decoders that work over streams. +type Serializer interface { + NewEncoder(w io.Writer) Encoder + NewDecoder(r io.ReadCloser) Decoder +} + +type decoder struct { + reader io.ReadCloser + decoder runtime.Decoder + buf []byte + maxBytes int + resetRead bool +} + +// NewDecoder creates a streaming decoder that reads object chunks from r and decodes them with d. +// The reader is expected to return ErrShortRead if the provided buffer is not large enough to read +// an entire object. +func NewDecoder(r io.ReadCloser, d runtime.Decoder) Decoder { + return &decoder{ + reader: r, + decoder: d, + buf: make([]byte, 1024), + maxBytes: 1024 * 1024, + } +} + +var ErrObjectTooLarge = fmt.Errorf("object to decode was longer than maximum allowed size") + +// Decode reads the next object from the stream and decodes it. +func (d *decoder) Decode(defaults *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { + base := 0 + for { + n, err := d.reader.Read(d.buf[base:]) + if err == io.ErrShortBuffer { + if n == 0 { + return nil, nil, fmt.Errorf("got short buffer with n=0, base=%d, cap=%d", base, cap(d.buf)) + } + if d.resetRead { + continue + } + // double the buffer size up to maxBytes + if len(d.buf) < d.maxBytes { + base += n + d.buf = append(d.buf, make([]byte, len(d.buf))...) + continue + } + // must read the rest of the frame (until we stop getting ErrShortBuffer) + d.resetRead = true + base = 0 + return nil, nil, ErrObjectTooLarge + } + if err != nil { + return nil, nil, err + } + if d.resetRead { + // now that we have drained the large read, continue + d.resetRead = false + continue + } + base += n + break + } + return d.decoder.Decode(d.buf[:base], defaults, into) +} + +func (d *decoder) Close() error { + return d.reader.Close() +} + +type encoder struct { + writer io.Writer + encoder runtime.Encoder + buf *bytes.Buffer +} + +// NewEncoder returns a new streaming encoder. +func NewEncoder(w io.Writer, e runtime.Encoder) Encoder { + return &encoder{ + writer: w, + encoder: e, + buf: &bytes.Buffer{}, + } +} + +// Encode writes the provided object to the nested writer. +func (e *encoder) Encode(obj runtime.Object) error { + if err := e.encoder.Encode(obj, e.buf); err != nil { + return err + } + _, err := e.writer.Write(e.buf.Bytes()) + e.buf.Reset() + return err +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/versioning/versioning.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/versioning/versioning.go new file mode 100644 index 00000000..ed4ff56c --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/serializer/versioning/versioning.go @@ -0,0 +1,222 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package versioning + +import ( + "io" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// NewCodecForScheme is a convenience method for callers that are using a scheme. +func NewCodecForScheme( + // TODO: I should be a scheme interface? + scheme *runtime.Scheme, + encoder runtime.Encoder, + decoder runtime.Decoder, + encodeVersion runtime.GroupVersioner, + decodeVersion runtime.GroupVersioner, +) runtime.Codec { + return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, scheme, encodeVersion, decodeVersion) +} + +// NewCodec takes objects in their internal versions and converts them to external versions before +// serializing them. It assumes the serializer provided to it only deals with external versions. +// This class is also a serializer, but is generally used with a specific version. +func NewCodec( + encoder runtime.Encoder, + decoder runtime.Decoder, + convertor runtime.ObjectConvertor, + creater runtime.ObjectCreater, + copier runtime.ObjectCopier, + typer runtime.ObjectTyper, + encodeVersion runtime.GroupVersioner, + decodeVersion runtime.GroupVersioner, +) runtime.Codec { + internal := &codec{ + encoder: encoder, + decoder: decoder, + convertor: convertor, + creater: creater, + copier: copier, + typer: typer, + + encodeVersion: encodeVersion, + decodeVersion: decodeVersion, + } + return internal +} + +type codec struct { + encoder runtime.Encoder + decoder runtime.Decoder + convertor runtime.ObjectConvertor + creater runtime.ObjectCreater + copier runtime.ObjectCopier + typer runtime.ObjectTyper + + encodeVersion runtime.GroupVersioner + decodeVersion runtime.GroupVersioner +} + +// Decode attempts a decode of the object, then tries to convert it to the internal version. If into is provided and the decoding is +// successful, the returned runtime.Object will be the value passed as into. Note that this may bypass conversion if you pass an +// into that matches the serialized version. +func (c *codec) Decode(data []byte, defaultGVK *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { + versioned, isVersioned := into.(*runtime.VersionedObjects) + if isVersioned { + into = versioned.Last() + } + + obj, gvk, err := c.decoder.Decode(data, defaultGVK, into) + if err != nil { + return nil, gvk, err + } + + if d, ok := obj.(runtime.NestedObjectDecoder); ok { + if err := d.DecodeNestedObjects(DirectDecoder{c.decoder}); err != nil { + return nil, gvk, err + } + } + + // if we specify a target, use generic conversion. + if into != nil { + if into == obj { + if isVersioned { + return versioned, gvk, nil + } + return into, gvk, nil + } + if err := c.convertor.Convert(obj, into, c.decodeVersion); err != nil { + return nil, gvk, err + } + if isVersioned { + versioned.Objects = []runtime.Object{obj, into} + return versioned, gvk, nil + } + return into, gvk, nil + } + + // Convert if needed. + if isVersioned { + // create a copy, because ConvertToVersion does not guarantee non-mutation of objects + copied, err := c.copier.Copy(obj) + if err != nil { + copied = obj + } + versioned.Objects = []runtime.Object{copied} + } + out, err := c.convertor.ConvertToVersion(obj, c.decodeVersion) + if err != nil { + return nil, gvk, err + } + if isVersioned { + if versioned.Last() != out { + versioned.Objects = append(versioned.Objects, out) + } + return versioned, gvk, nil + } + return out, gvk, nil +} + +// Encode ensures the provided object is output in the appropriate group and version, invoking +// conversion if necessary. Unversioned objects (according to the ObjectTyper) are output as is. +func (c *codec) Encode(obj runtime.Object, w io.Writer) error { + switch obj.(type) { + case *runtime.Unknown, *runtime.Unstructured, *runtime.UnstructuredList: + return c.encoder.Encode(obj, w) + } + + gvks, isUnversioned, err := c.typer.ObjectKinds(obj) + if err != nil { + return err + } + + if c.encodeVersion == nil || isUnversioned { + if e, ok := obj.(runtime.NestedObjectEncoder); ok { + if err := e.EncodeNestedObjects(DirectEncoder{Encoder: c.encoder, ObjectTyper: c.typer}); err != nil { + return err + } + } + objectKind := obj.GetObjectKind() + old := objectKind.GroupVersionKind() + objectKind.SetGroupVersionKind(gvks[0]) + err = c.encoder.Encode(obj, w) + objectKind.SetGroupVersionKind(old) + return err + } + + // Perform a conversion if necessary + objectKind := obj.GetObjectKind() + old := objectKind.GroupVersionKind() + out, err := c.convertor.ConvertToVersion(obj, c.encodeVersion) + if err != nil { + return err + } + + if e, ok := out.(runtime.NestedObjectEncoder); ok { + if err := e.EncodeNestedObjects(DirectEncoder{Encoder: c.encoder, ObjectTyper: c.typer}); err != nil { + return err + } + } + + // Conversion is responsible for setting the proper group, version, and kind onto the outgoing object + err = c.encoder.Encode(out, w) + // restore the old GVK, in case conversion returned the same object + objectKind.SetGroupVersionKind(old) + return err +} + +// DirectEncoder serializes an object and ensures the GVK is set. +type DirectEncoder struct { + runtime.Encoder + runtime.ObjectTyper +} + +// Encode does not do conversion. It sets the gvk during serialization. +func (e DirectEncoder) Encode(obj runtime.Object, stream io.Writer) error { + gvks, _, err := e.ObjectTyper.ObjectKinds(obj) + if err != nil { + if runtime.IsNotRegisteredError(err) { + return e.Encoder.Encode(obj, stream) + } + return err + } + kind := obj.GetObjectKind() + oldGVK := kind.GroupVersionKind() + kind.SetGroupVersionKind(gvks[0]) + err = e.Encoder.Encode(obj, stream) + kind.SetGroupVersionKind(oldGVK) + return err +} + +// DirectDecoder clears the group version kind of a deserialized object. +type DirectDecoder struct { + runtime.Decoder +} + +// Decode does not do conversion. It removes the gvk during deserialization. +func (d DirectDecoder) Decode(data []byte, defaults *unversioned.GroupVersionKind, into runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { + obj, gvk, err := d.Decoder.Decode(data, defaults, into) + if obj != nil { + kind := obj.GetObjectKind() + // clearing the gvk is just a convention of a codec + kind.SetGroupVersionKind(unversioned.GroupVersionKind{}) + } + return obj, gvk, err +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/swagger_doc_generator.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/swagger_doc_generator.go new file mode 100644 index 00000000..29722d52 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/swagger_doc_generator.go @@ -0,0 +1,262 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "bytes" + "fmt" + "go/ast" + "go/doc" + "go/parser" + "go/token" + "io" + "reflect" + "strings" +) + +// Pair of strings. We keed the name of fields and the doc +type Pair struct { + Name, Doc string +} + +// KubeTypes is an array to represent all available types in a parsed file. [0] is for the type itself +type KubeTypes []Pair + +func astFrom(filePath string) *doc.Package { + fset := token.NewFileSet() + m := make(map[string]*ast.File) + + f, err := parser.ParseFile(fset, filePath, nil, parser.ParseComments) + if err != nil { + fmt.Println(err) + return nil + } + + m[filePath] = f + apkg, _ := ast.NewPackage(fset, m, nil, nil) + + return doc.New(apkg, "", 0) +} + +func fmtRawDoc(rawDoc string) string { + var buffer bytes.Buffer + delPrevChar := func() { + if buffer.Len() > 0 { + buffer.Truncate(buffer.Len() - 1) // Delete the last " " or "\n" + } + } + + // Ignore all lines after --- + rawDoc = strings.Split(rawDoc, "---")[0] + + for _, line := range strings.Split(rawDoc, "\n") { + line = strings.TrimRight(line, " ") + leading := strings.TrimLeft(line, " ") + switch { + case len(line) == 0: // Keep paragraphs + delPrevChar() + buffer.WriteString("\n\n") + case strings.HasPrefix(leading, "TODO"): // Ignore one line TODOs + case strings.HasPrefix(leading, "+"): // Ignore instructions to go2idl + default: + if strings.HasPrefix(line, " ") || strings.HasPrefix(line, "\t") { + delPrevChar() + line = "\n" + line + "\n" // Replace it with newline. This is useful when we have a line with: "Example:\n\tJSON-someting..." + } else { + line += " " + } + buffer.WriteString(line) + } + } + + postDoc := strings.TrimRight(buffer.String(), "\n") + postDoc = strings.Replace(postDoc, "\\\"", "\"", -1) // replace user's \" to " + postDoc = strings.Replace(postDoc, "\"", "\\\"", -1) // Escape " + postDoc = strings.Replace(postDoc, "\n", "\\n", -1) + postDoc = strings.Replace(postDoc, "\t", "\\t", -1) + + return postDoc +} + +// fieldName returns the name of the field as it should appear in JSON format +// "-" indicates that this field is not part of the JSON representation +func fieldName(field *ast.Field) string { + jsonTag := "" + if field.Tag != nil { + jsonTag = reflect.StructTag(field.Tag.Value[1 : len(field.Tag.Value)-1]).Get("json") // Delete first and last quotation + if strings.Contains(jsonTag, "inline") { + return "-" + } + } + + jsonTag = strings.Split(jsonTag, ",")[0] // This can return "-" + if jsonTag == "" { + if field.Names != nil { + return field.Names[0].Name + } + return field.Type.(*ast.Ident).Name + } + return jsonTag +} + +// A buffer of lines that will be written. +type bufferedLine struct { + line string + indentation int +} + +type buffer struct { + lines []bufferedLine +} + +func newBuffer() *buffer { + return &buffer{ + lines: make([]bufferedLine, 0), + } +} + +func (b *buffer) addLine(line string, indent int) { + b.lines = append(b.lines, bufferedLine{line, indent}) +} + +func (b *buffer) flushLines(w io.Writer) error { + for _, line := range b.lines { + indentation := strings.Repeat("\t", line.indentation) + fullLine := fmt.Sprintf("%s%s", indentation, line.line) + if _, err := io.WriteString(w, fullLine); err != nil { + return err + } + } + return nil +} + +func writeFuncHeader(b *buffer, structName string, indent int) { + s := fmt.Sprintf("var map_%s = map[string]string {\n", structName) + b.addLine(s, indent) +} + +func writeFuncFooter(b *buffer, structName string, indent int) { + b.addLine("}\n", indent) // Closes the map definition + + s := fmt.Sprintf("func (%s) SwaggerDoc() map[string]string {\n", structName) + b.addLine(s, indent) + s = fmt.Sprintf("return map_%s\n", structName) + b.addLine(s, indent+1) + b.addLine("}\n", indent) // Closes the function definition +} + +func writeMapBody(b *buffer, kubeType []Pair, indent int) { + format := "\"%s\": \"%s\",\n" + for _, pair := range kubeType { + s := fmt.Sprintf(format, pair.Name, pair.Doc) + b.addLine(s, indent+2) + } +} + +// ParseDocumentationFrom gets all types' documentation and returns them as an +// array. Each type is again represented as an array (we have to use arrays as we +// need to be sure for the order of the fields). This function returns fields and +// struct definitions that have no documentation as {name, ""}. +func ParseDocumentationFrom(src string) []KubeTypes { + var docForTypes []KubeTypes + + pkg := astFrom(src) + + for _, kubType := range pkg.Types { + if structType, ok := kubType.Decl.Specs[0].(*ast.TypeSpec).Type.(*ast.StructType); ok { + var ks KubeTypes + ks = append(ks, Pair{kubType.Name, fmtRawDoc(kubType.Doc)}) + + for _, field := range structType.Fields.List { + if n := fieldName(field); n != "-" { + fieldDoc := fmtRawDoc(field.Doc.Text()) + ks = append(ks, Pair{n, fieldDoc}) + } + } + docForTypes = append(docForTypes, ks) + } + } + + return docForTypes +} + +// WriteSwaggerDocFunc writes a declaration of a function as a string. This function is used in +// Swagger as a documentation source for structs and theirs fields +func WriteSwaggerDocFunc(kubeTypes []KubeTypes, w io.Writer) error { + for _, kubeType := range kubeTypes { + structName := kubeType[0].Name + kubeType[0].Name = "" + + // Ignore empty documentation + docfulTypes := make(KubeTypes, 0, len(kubeType)) + for _, pair := range kubeType { + if pair.Doc != "" { + docfulTypes = append(docfulTypes, pair) + } + } + + if len(docfulTypes) == 0 { + continue // If no fields and the struct have documentation, skip the function definition + } + + indent := 0 + buffer := newBuffer() + + writeFuncHeader(buffer, structName, indent) + writeMapBody(buffer, docfulTypes, indent) + writeFuncFooter(buffer, structName, indent) + buffer.addLine("\n", 0) + + if err := buffer.flushLines(w); err != nil { + return err + } + } + + return nil +} + +// VerifySwaggerDocsExist writes in a io.Writer a list of structs and fields that +// are missing of documentation. +func VerifySwaggerDocsExist(kubeTypes []KubeTypes, w io.Writer) (int, error) { + missingDocs := 0 + buffer := newBuffer() + + for _, kubeType := range kubeTypes { + structName := kubeType[0].Name + if kubeType[0].Doc == "" { + format := "Missing documentation for the struct itself: %s\n" + s := fmt.Sprintf(format, structName) + buffer.addLine(s, 0) + missingDocs++ + } + kubeType = kubeType[1:] // Skip struct definition + + for _, pair := range kubeType { // Iterate only the fields + if pair.Doc == "" { + format := "In struct: %s, field documentation is missing: %s\n" + s := fmt.Sprintf(format, structName, pair.Name) + buffer.addLine(s, 0) + missingDocs++ + } + } + } + + if err := buffer.flushLines(w); err != nil { + return -1, err + } + return missingDocs, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/types.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/types.go new file mode 100644 index 00000000..2916b18b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/types.go @@ -0,0 +1,553 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "bytes" + "fmt" + + "github.com/golang/glog" + + "k8s.io/client-go/1.4/pkg/api/meta/metatypes" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/types" +) + +// Note that the types provided in this file are not versioned and are intended to be +// safe to use from within all versions of every API object. + +// TypeMeta is shared by all top level objects. The proper way to use it is to inline it in your type, +// like this: +// type MyAwesomeAPIObject struct { +// runtime.TypeMeta `json:",inline"` +// ... // other fields +// } +// func (obj *MyAwesomeAPIObject) SetGroupVersionKind(gvk *unversioned.GroupVersionKind) { unversioned.UpdateTypeMeta(obj,gvk) }; GroupVersionKind() *GroupVersionKind +// +// TypeMeta is provided here for convenience. You may use it directly from this package or define +// your own with the same fields. +// +// +k8s:deepcopy-gen=true +// +protobuf=true +type TypeMeta struct { + APIVersion string `json:"apiVersion,omitempty" yaml:"apiVersion,omitempty" protobuf:"bytes,1,opt,name=apiVersion"` + Kind string `json:"kind,omitempty" yaml:"kind,omitempty" protobuf:"bytes,2,opt,name=kind"` +} + +const ( + ContentTypeJSON string = "application/json" +) + +// RawExtension is used to hold extensions in external versions. +// +// To use this, make a field which has RawExtension as its type in your external, versioned +// struct, and Object in your internal struct. You also need to register your +// various plugin types. +// +// // Internal package: +// type MyAPIObject struct { +// runtime.TypeMeta `json:",inline"` +// MyPlugin runtime.Object `json:"myPlugin"` +// } +// type PluginA struct { +// AOption string `json:"aOption"` +// } +// +// // External package: +// type MyAPIObject struct { +// runtime.TypeMeta `json:",inline"` +// MyPlugin runtime.RawExtension `json:"myPlugin"` +// } +// type PluginA struct { +// AOption string `json:"aOption"` +// } +// +// // On the wire, the JSON will look something like this: +// { +// "kind":"MyAPIObject", +// "apiVersion":"v1", +// "myPlugin": { +// "kind":"PluginA", +// "aOption":"foo", +// }, +// } +// +// So what happens? Decode first uses json or yaml to unmarshal the serialized data into +// your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. +// The next step is to copy (using pkg/conversion) into the internal struct. The runtime +// package's DefaultScheme has conversion functions installed which will unpack the +// JSON stored in RawExtension, turning it into the correct object type, and storing it +// in the Object. (TODO: In the case where the object is of an unknown type, a +// runtime.Unknown object will be created and stored.) +// +// +k8s:deepcopy-gen=true +// +protobuf=true +type RawExtension struct { + // Raw is the underlying serialization of this object. + // + // TODO: Determine how to detect ContentType and ContentEncoding of 'Raw' data. + Raw []byte `protobuf:"bytes,1,opt,name=raw"` + // Object can hold a representation of this extension - useful for working with versioned + // structs. + Object Object `json:"-"` +} + +// Unknown allows api objects with unknown types to be passed-through. This can be used +// to deal with the API objects from a plug-in. Unknown objects still have functioning +// TypeMeta features-- kind, version, etc. +// TODO: Make this object have easy access to field based accessors and settors for +// metadata and field mutatation. +// +// +k8s:deepcopy-gen=true +// +protobuf=true +type Unknown struct { + TypeMeta `json:",inline" protobuf:"bytes,1,opt,name=typeMeta"` + // Raw will hold the complete serialized object which couldn't be matched + // with a registered type. Most likely, nothing should be done with this + // except for passing it through the system. + Raw []byte `protobuf:"bytes,2,opt,name=raw"` + // ContentEncoding is encoding used to encode 'Raw' data. + // Unspecified means no encoding. + ContentEncoding string `protobuf:"bytes,3,opt,name=contentEncoding"` + // ContentType is serialization method used to serialize 'Raw'. + // Unspecified means ContentTypeJSON. + ContentType string `protobuf:"bytes,4,opt,name=contentType"` +} + +// Unstructured allows objects that do not have Golang structs registered to be manipulated +// generically. This can be used to deal with the API objects from a plug-in. Unstructured +// objects still have functioning TypeMeta features-- kind, version, etc. +// TODO: Make this object have easy access to field based accessors and settors for +// metadata and field mutatation. +type Unstructured struct { + // Object is a JSON compatible map with string, float, int, []interface{}, or map[string]interface{} + // children. + Object map[string]interface{} +} + +// MarshalJSON ensures that the unstructured object produces proper +// JSON when passed to Go's standard JSON library. +func (u *Unstructured) MarshalJSON() ([]byte, error) { + var buf bytes.Buffer + err := UnstructuredJSONScheme.Encode(u, &buf) + return buf.Bytes(), err +} + +// UnmarshalJSON ensures that the unstructured object properly decodes +// JSON when passed to Go's standard JSON library. +func (u *Unstructured) UnmarshalJSON(b []byte) error { + _, _, err := UnstructuredJSONScheme.Decode(b, nil, u) + return err +} + +func getNestedField(obj map[string]interface{}, fields ...string) interface{} { + var val interface{} = obj + for _, field := range fields { + if _, ok := val.(map[string]interface{}); !ok { + return nil + } + val = val.(map[string]interface{})[field] + } + return val +} + +func getNestedString(obj map[string]interface{}, fields ...string) string { + if str, ok := getNestedField(obj, fields...).(string); ok { + return str + } + return "" +} + +func getNestedSlice(obj map[string]interface{}, fields ...string) []string { + if m, ok := getNestedField(obj, fields...).([]interface{}); ok { + strSlice := make([]string, 0, len(m)) + for _, v := range m { + if str, ok := v.(string); ok { + strSlice = append(strSlice, str) + } + } + return strSlice + } + return nil +} + +func getNestedMap(obj map[string]interface{}, fields ...string) map[string]string { + if m, ok := getNestedField(obj, fields...).(map[string]interface{}); ok { + strMap := make(map[string]string, len(m)) + for k, v := range m { + if str, ok := v.(string); ok { + strMap[k] = str + } + } + return strMap + } + return nil +} + +func setNestedField(obj map[string]interface{}, value interface{}, fields ...string) { + m := obj + if len(fields) > 1 { + for _, field := range fields[0 : len(fields)-1] { + if _, ok := m[field].(map[string]interface{}); !ok { + m[field] = make(map[string]interface{}) + } + m = m[field].(map[string]interface{}) + } + } + m[fields[len(fields)-1]] = value +} + +func setNestedSlice(obj map[string]interface{}, value []string, fields ...string) { + m := make([]interface{}, 0, len(value)) + for _, v := range value { + m = append(m, v) + } + setNestedField(obj, m, fields...) +} + +func setNestedMap(obj map[string]interface{}, value map[string]string, fields ...string) { + m := make(map[string]interface{}, len(value)) + for k, v := range value { + m[k] = v + } + setNestedField(obj, m, fields...) +} + +func (u *Unstructured) setNestedField(value interface{}, fields ...string) { + if u.Object == nil { + u.Object = make(map[string]interface{}) + } + setNestedField(u.Object, value, fields...) +} + +func (u *Unstructured) setNestedSlice(value []string, fields ...string) { + if u.Object == nil { + u.Object = make(map[string]interface{}) + } + setNestedSlice(u.Object, value, fields...) +} + +func (u *Unstructured) setNestedMap(value map[string]string, fields ...string) { + if u.Object == nil { + u.Object = make(map[string]interface{}) + } + setNestedMap(u.Object, value, fields...) +} + +func extractOwnerReference(src interface{}) metatypes.OwnerReference { + v := src.(map[string]interface{}) + controllerPtr, ok := (getNestedField(v, "controller")).(*bool) + if !ok { + controllerPtr = nil + } else { + if controllerPtr != nil { + controller := *controllerPtr + controllerPtr = &controller + } + } + return metatypes.OwnerReference{ + Kind: getNestedString(v, "kind"), + Name: getNestedString(v, "name"), + APIVersion: getNestedString(v, "apiVersion"), + UID: (types.UID)(getNestedString(v, "uid")), + Controller: controllerPtr, + } +} + +func setOwnerReference(src metatypes.OwnerReference) map[string]interface{} { + ret := make(map[string]interface{}) + controllerPtr := src.Controller + if controllerPtr != nil { + controller := *controllerPtr + controllerPtr = &controller + } + setNestedField(ret, src.Kind, "kind") + setNestedField(ret, src.Name, "name") + setNestedField(ret, src.APIVersion, "apiVersion") + setNestedField(ret, string(src.UID), "uid") + setNestedField(ret, controllerPtr, "controller") + return ret +} + +func getOwnerReferences(object map[string]interface{}) ([]map[string]interface{}, error) { + field := getNestedField(object, "metadata", "ownerReferences") + if field == nil { + return nil, fmt.Errorf("cannot find field metadata.ownerReferences in %v", object) + } + ownerReferences, ok := field.([]map[string]interface{}) + if ok { + return ownerReferences, nil + } + // TODO: This is hacky... + interfaces, ok := field.([]interface{}) + if !ok { + return nil, fmt.Errorf("expect metadata.ownerReferences to be a slice in %#v", object) + } + ownerReferences = make([]map[string]interface{}, 0, len(interfaces)) + for i := 0; i < len(interfaces); i++ { + r, ok := interfaces[i].(map[string]interface{}) + if !ok { + return nil, fmt.Errorf("expect element metadata.ownerReferences to be a map[string]interface{} in %#v", object) + } + ownerReferences = append(ownerReferences, r) + } + return ownerReferences, nil +} + +func (u *Unstructured) GetOwnerReferences() []metatypes.OwnerReference { + original, err := getOwnerReferences(u.Object) + if err != nil { + glog.V(6).Info(err) + return nil + } + ret := make([]metatypes.OwnerReference, 0, len(original)) + for i := 0; i < len(original); i++ { + ret = append(ret, extractOwnerReference(original[i])) + } + return ret +} + +func (u *Unstructured) SetOwnerReferences(references []metatypes.OwnerReference) { + var newReferences = make([]map[string]interface{}, 0, len(references)) + for i := 0; i < len(references); i++ { + newReferences = append(newReferences, setOwnerReference(references[i])) + } + u.setNestedField(newReferences, "metadata", "ownerReferences") +} + +func (u *Unstructured) GetAPIVersion() string { + return getNestedString(u.Object, "apiVersion") +} + +func (u *Unstructured) SetAPIVersion(version string) { + u.setNestedField(version, "apiVersion") +} + +func (u *Unstructured) GetKind() string { + return getNestedString(u.Object, "kind") +} + +func (u *Unstructured) SetKind(kind string) { + u.setNestedField(kind, "kind") +} + +func (u *Unstructured) GetNamespace() string { + return getNestedString(u.Object, "metadata", "namespace") +} + +func (u *Unstructured) SetNamespace(namespace string) { + u.setNestedField(namespace, "metadata", "namespace") +} + +func (u *Unstructured) GetName() string { + return getNestedString(u.Object, "metadata", "name") +} + +func (u *Unstructured) SetName(name string) { + u.setNestedField(name, "metadata", "name") +} + +func (u *Unstructured) GetGenerateName() string { + return getNestedString(u.Object, "metadata", "generateName") +} + +func (u *Unstructured) SetGenerateName(name string) { + u.setNestedField(name, "metadata", "generateName") +} + +func (u *Unstructured) GetUID() types.UID { + return types.UID(getNestedString(u.Object, "metadata", "uid")) +} + +func (u *Unstructured) SetUID(uid types.UID) { + u.setNestedField(string(uid), "metadata", "uid") +} + +func (u *Unstructured) GetResourceVersion() string { + return getNestedString(u.Object, "metadata", "resourceVersion") +} + +func (u *Unstructured) SetResourceVersion(version string) { + u.setNestedField(version, "metadata", "resourceVersion") +} + +func (u *Unstructured) GetSelfLink() string { + return getNestedString(u.Object, "metadata", "selfLink") +} + +func (u *Unstructured) SetSelfLink(selfLink string) { + u.setNestedField(selfLink, "metadata", "selfLink") +} + +func (u *Unstructured) GetCreationTimestamp() unversioned.Time { + var timestamp unversioned.Time + timestamp.UnmarshalQueryParameter(getNestedString(u.Object, "metadata", "creationTimestamp")) + return timestamp +} + +func (u *Unstructured) SetCreationTimestamp(timestamp unversioned.Time) { + ts, _ := timestamp.MarshalQueryParameter() + u.setNestedField(ts, "metadata", "creationTimestamp") +} + +func (u *Unstructured) GetDeletionTimestamp() *unversioned.Time { + var timestamp unversioned.Time + timestamp.UnmarshalQueryParameter(getNestedString(u.Object, "metadata", "deletionTimestamp")) + if timestamp.IsZero() { + return nil + } + return ×tamp +} + +func (u *Unstructured) SetDeletionTimestamp(timestamp *unversioned.Time) { + ts, _ := timestamp.MarshalQueryParameter() + u.setNestedField(ts, "metadata", "deletionTimestamp") +} + +func (u *Unstructured) GetLabels() map[string]string { + return getNestedMap(u.Object, "metadata", "labels") +} + +func (u *Unstructured) SetLabels(labels map[string]string) { + u.setNestedMap(labels, "metadata", "labels") +} + +func (u *Unstructured) GetAnnotations() map[string]string { + return getNestedMap(u.Object, "metadata", "annotations") +} + +func (u *Unstructured) SetAnnotations(annotations map[string]string) { + u.setNestedMap(annotations, "metadata", "annotations") +} + +func (u *Unstructured) SetGroupVersionKind(gvk unversioned.GroupVersionKind) { + u.SetAPIVersion(gvk.GroupVersion().String()) + u.SetKind(gvk.Kind) +} + +func (u *Unstructured) GroupVersionKind() unversioned.GroupVersionKind { + gv, err := unversioned.ParseGroupVersion(u.GetAPIVersion()) + if err != nil { + return unversioned.GroupVersionKind{} + } + gvk := gv.WithKind(u.GetKind()) + return gvk +} + +func (u *Unstructured) GetFinalizers() []string { + return getNestedSlice(u.Object, "metadata", "finalizers") +} + +func (u *Unstructured) SetFinalizers(finalizers []string) { + u.setNestedSlice(finalizers, "metadata", "finalizers") +} + +func (u *Unstructured) GetClusterName() string { + return getNestedString(u.Object, "metadata", "clusterName") +} + +func (u *Unstructured) SetClusterName(clusterName string) { + u.setNestedField(clusterName, "metadata", "clusterName") +} + +// UnstructuredList allows lists that do not have Golang structs +// registered to be manipulated generically. This can be used to deal +// with the API lists from a plug-in. +type UnstructuredList struct { + Object map[string]interface{} + + // Items is a list of unstructured objects. + Items []*Unstructured `json:"items"` +} + +// MarshalJSON ensures that the unstructured list object produces proper +// JSON when passed to Go's standard JSON library. +func (u *UnstructuredList) MarshalJSON() ([]byte, error) { + var buf bytes.Buffer + err := UnstructuredJSONScheme.Encode(u, &buf) + return buf.Bytes(), err +} + +// UnmarshalJSON ensures that the unstructured list object properly +// decodes JSON when passed to Go's standard JSON library. +func (u *UnstructuredList) UnmarshalJSON(b []byte) error { + _, _, err := UnstructuredJSONScheme.Decode(b, nil, u) + return err +} + +func (u *UnstructuredList) setNestedField(value interface{}, fields ...string) { + if u.Object == nil { + u.Object = make(map[string]interface{}) + } + setNestedField(u.Object, value, fields...) +} + +func (u *UnstructuredList) GetAPIVersion() string { + return getNestedString(u.Object, "apiVersion") +} + +func (u *UnstructuredList) SetAPIVersion(version string) { + u.setNestedField(version, "apiVersion") +} + +func (u *UnstructuredList) GetKind() string { + return getNestedString(u.Object, "kind") +} + +func (u *UnstructuredList) SetKind(kind string) { + u.setNestedField(kind, "kind") +} + +func (u *UnstructuredList) GetResourceVersion() string { + return getNestedString(u.Object, "metadata", "resourceVersion") +} + +func (u *UnstructuredList) SetResourceVersion(version string) { + u.setNestedField(version, "metadata", "resourceVersion") +} + +func (u *UnstructuredList) GetSelfLink() string { + return getNestedString(u.Object, "metadata", "selfLink") +} + +func (u *UnstructuredList) SetSelfLink(selfLink string) { + u.setNestedField(selfLink, "metadata", "selfLink") +} + +func (u *UnstructuredList) SetGroupVersionKind(gvk unversioned.GroupVersionKind) { + u.SetAPIVersion(gvk.GroupVersion().String()) + u.SetKind(gvk.Kind) +} + +func (u *UnstructuredList) GroupVersionKind() unversioned.GroupVersionKind { + gv, err := unversioned.ParseGroupVersion(u.GetAPIVersion()) + if err != nil { + return unversioned.GroupVersionKind{} + } + gvk := gv.WithKind(u.GetKind()) + return gvk +} + +// VersionedObjects is used by Decoders to give callers a way to access all versions +// of an object during the decoding process. +type VersionedObjects struct { + // Objects is the set of objects retrieved during decoding, in order of conversion. + // The 0 index is the object as serialized on the wire. If conversion has occurred, + // other objects may be present. The right most object is the same as would be returned + // by a normal Decode call. + Objects []Object +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/types_proto.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/types_proto.go new file mode 100644 index 00000000..ead96ee0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/types_proto.go @@ -0,0 +1,69 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "fmt" +) + +type ProtobufMarshaller interface { + MarshalTo(data []byte) (int, error) +} + +// NestedMarshalTo allows a caller to avoid extra allocations during serialization of an Unknown +// that will contain an object that implements ProtobufMarshaller. +func (m *Unknown) NestedMarshalTo(data []byte, b ProtobufMarshaller, size uint64) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.TypeMeta.Size())) + n1, err := m.TypeMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + + if b != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, size) + n2, err := b.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + if uint64(n2) != size { + // programmer error: the Size() method for protobuf does not match the results of MarshalTo, which means the proto + // struct returned would be wrong. + return 0, fmt.Errorf("the Size() value of %T was %d, but NestedMarshalTo wrote %d bytes to data", b, size, n2) + } + i += n2 + } + + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ContentEncoding))) + i += copy(data[i:], m.ContentEncoding) + + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ContentType))) + i += copy(data[i:], m.ContentType) + return i, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/unstructured.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/unstructured.go new file mode 100644 index 00000000..47b4eb05 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/unstructured.go @@ -0,0 +1,204 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + gojson "encoding/json" + "errors" + "fmt" + "io" + "strings" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/util/json" +) + +// UnstructuredJSONScheme is capable of converting JSON data into the Unstructured +// type, which can be used for generic access to objects without a predefined scheme. +// TODO: move into serializer/json. +var UnstructuredJSONScheme Codec = unstructuredJSONScheme{} + +type unstructuredJSONScheme struct{} + +func (s unstructuredJSONScheme) Decode(data []byte, _ *unversioned.GroupVersionKind, obj Object) (Object, *unversioned.GroupVersionKind, error) { + var err error + if obj != nil { + err = s.decodeInto(data, obj) + } else { + obj, err = s.decode(data) + } + + if err != nil { + return nil, nil, err + } + + gvk := obj.GetObjectKind().GroupVersionKind() + if len(gvk.Kind) == 0 { + return nil, &gvk, NewMissingKindErr(string(data)) + } + + return obj, &gvk, nil +} + +func (unstructuredJSONScheme) Encode(obj Object, w io.Writer) error { + switch t := obj.(type) { + case *Unstructured: + return json.NewEncoder(w).Encode(t.Object) + case *UnstructuredList: + items := make([]map[string]interface{}, 0, len(t.Items)) + for _, i := range t.Items { + items = append(items, i.Object) + } + t.Object["items"] = items + defer func() { delete(t.Object, "items") }() + return json.NewEncoder(w).Encode(t.Object) + case *Unknown: + // TODO: Unstructured needs to deal with ContentType. + _, err := w.Write(t.Raw) + return err + default: + return json.NewEncoder(w).Encode(t) + } +} + +func (s unstructuredJSONScheme) decode(data []byte) (Object, error) { + type detector struct { + Items gojson.RawMessage + } + var det detector + if err := json.Unmarshal(data, &det); err != nil { + return nil, err + } + + if det.Items != nil { + list := &UnstructuredList{} + err := s.decodeToList(data, list) + return list, err + } + + // No Items field, so it wasn't a list. + unstruct := &Unstructured{} + err := s.decodeToUnstructured(data, unstruct) + return unstruct, err +} + +func (s unstructuredJSONScheme) decodeInto(data []byte, obj Object) error { + switch x := obj.(type) { + case *Unstructured: + return s.decodeToUnstructured(data, x) + case *UnstructuredList: + return s.decodeToList(data, x) + case *VersionedObjects: + o, err := s.decode(data) + if err == nil { + x.Objects = []Object{o} + } + return err + default: + return json.Unmarshal(data, x) + } +} + +func (unstructuredJSONScheme) decodeToUnstructured(data []byte, unstruct *Unstructured) error { + m := make(map[string]interface{}) + if err := json.Unmarshal(data, &m); err != nil { + return err + } + + unstruct.Object = m + + return nil +} + +func (s unstructuredJSONScheme) decodeToList(data []byte, list *UnstructuredList) error { + type decodeList struct { + Items []gojson.RawMessage + } + + var dList decodeList + if err := json.Unmarshal(data, &dList); err != nil { + return err + } + + if err := json.Unmarshal(data, &list.Object); err != nil { + return err + } + + // For typed lists, e.g., a PodList, API server doesn't set each item's + // APIVersion and Kind. We need to set it. + listAPIVersion := list.GetAPIVersion() + listKind := list.GetKind() + itemKind := strings.TrimSuffix(listKind, "List") + + delete(list.Object, "items") + list.Items = nil + for _, i := range dList.Items { + unstruct := &Unstructured{} + if err := s.decodeToUnstructured([]byte(i), unstruct); err != nil { + return err + } + // This is hacky. Set the item's Kind and APIVersion to those inferred + // from the List. + if len(unstruct.GetKind()) == 0 && len(unstruct.GetAPIVersion()) == 0 { + unstruct.SetKind(itemKind) + unstruct.SetAPIVersion(listAPIVersion) + } + list.Items = append(list.Items, unstruct) + } + return nil +} + +// UnstructuredObjectConverter is an ObjectConverter for use with +// Unstructured objects. Since it has no schema or type information, +// it will only succeed for no-op conversions. This is provided as a +// sane implementation for APIs that require an object converter. +type UnstructuredObjectConverter struct{} + +func (UnstructuredObjectConverter) Convert(in, out, context interface{}) error { + unstructIn, ok := in.(*Unstructured) + if !ok { + return fmt.Errorf("input type %T in not valid for unstructured conversion", in) + } + + unstructOut, ok := out.(*Unstructured) + if !ok { + return fmt.Errorf("output type %T in not valid for unstructured conversion", out) + } + + // maybe deep copy the map? It is documented in the + // ObjectConverter interface that this function is not + // guaranteeed to not mutate the input. Or maybe set the input + // object to nil. + unstructOut.Object = unstructIn.Object + return nil +} + +func (UnstructuredObjectConverter) ConvertToVersion(in Object, target GroupVersioner) (Object, error) { + if kind := in.GetObjectKind().GroupVersionKind(); !kind.Empty() { + gvk, ok := target.KindForGroupVersionKinds([]unversioned.GroupVersionKind{kind}) + if !ok { + // TODO: should this be a typed error? + return nil, fmt.Errorf("%v is unstructured and is not suitable for converting to %q", kind, target) + } + in.GetObjectKind().SetGroupVersionKind(gvk) + } + return in, nil +} + +func (UnstructuredObjectConverter) ConvertFieldLabel(version, kind, label, value string) (string, string, error) { + return "", "", errors.New("unstructured cannot convert field labels") +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/runtime/zz_generated.deepcopy.go b/vendor/k8s.io/client-go/1.4/pkg/runtime/zz_generated.deepcopy.go new file mode 100644 index 00000000..d0c4e83b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/runtime/zz_generated.deepcopy.go @@ -0,0 +1,75 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package runtime + +import ( + conversion "k8s.io/client-go/1.4/pkg/conversion" +) + +func DeepCopy_runtime_RawExtension(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RawExtension) + out := out.(*RawExtension) + if in.Raw != nil { + in, out := &in.Raw, &out.Raw + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Raw = nil + } + if in.Object == nil { + out.Object = nil + } else if newVal, err := c.DeepCopy(&in.Object); err != nil { + return err + } else { + out.Object = *newVal.(*Object) + } + return nil + } +} + +func DeepCopy_runtime_TypeMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TypeMeta) + out := out.(*TypeMeta) + out.APIVersion = in.APIVersion + out.Kind = in.Kind + return nil + } +} + +func DeepCopy_runtime_Unknown(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Unknown) + out := out.(*Unknown) + out.TypeMeta = in.TypeMeta + if in.Raw != nil { + in, out := &in.Raw, &out.Raw + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Raw = nil + } + out.ContentEncoding = in.ContentEncoding + out.ContentType = in.ContentType + return nil + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/helpers.go b/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/helpers.go new file mode 100644 index 00000000..8cf5c93b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/helpers.go @@ -0,0 +1,62 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apparmor + +import ( + "strings" + + "k8s.io/client-go/1.4/pkg/api" +) + +// TODO: Move these values into the API package. +const ( + // The prefix to an annotation key specifying a container profile. + ContainerAnnotationKeyPrefix = "container.apparmor.security.beta.kubernetes.io/" + // The annotation key specifying the default AppArmor profile. + DefaultProfileAnnotationKey = "apparmor.security.beta.kubernetes.io/defaultProfileName" + // The annotation key specifying the allowed AppArmor profiles. + AllowedProfilesAnnotationKey = "apparmor.security.beta.kubernetes.io/allowedProfileNames" + + // The profile specifying the runtime default. + ProfileRuntimeDefault = "runtime/default" + // The prefix for specifying profiles loaded on the node. + ProfileNamePrefix = "localhost/" +) + +// Checks whether app armor is required for pod to be run. +func isRequired(pod *api.Pod) bool { + for key := range pod.Annotations { + if strings.HasPrefix(key, ContainerAnnotationKeyPrefix) { + return true + } + } + return false +} + +// Returns the name of the profile to use with the container. +func GetProfileName(pod *api.Pod, containerName string) string { + return pod.Annotations[ContainerAnnotationKeyPrefix+containerName] +} + +// Sets the name of the profile to use with the container. +func SetProfileName(pod *api.Pod, containerName, profileName string) error { + if pod.Annotations == nil { + pod.Annotations = map[string]string{} + } + pod.Annotations[ContainerAnnotationKeyPrefix+containerName] = profileName + return nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/validate.go b/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/validate.go new file mode 100644 index 00000000..92ac162e --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/validate.go @@ -0,0 +1,227 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apparmor + +import ( + "bufio" + "errors" + "fmt" + "io/ioutil" + "os" + "path" + "strings" + + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/util" + utilconfig "k8s.io/client-go/1.4/pkg/util/config" +) + +// Whether AppArmor should be disabled by default. +// Set to true if the wrong build tags are set (see validate_disabled.go). +var isDisabledBuild bool + +// Interface for validating that a pod with with an AppArmor profile can be run by a Node. +type Validator interface { + Validate(pod *api.Pod) error + ValidateHost() error +} + +func NewValidator(runtime string) Validator { + if err := validateHost(runtime); err != nil { + return &validator{validateHostErr: err} + } + appArmorFS, err := getAppArmorFS() + if err != nil { + return &validator{ + validateHostErr: fmt.Errorf("error finding AppArmor FS: %v", err), + } + } + return &validator{ + appArmorFS: appArmorFS, + } +} + +type validator struct { + validateHostErr error + appArmorFS string +} + +func (v *validator) Validate(pod *api.Pod) error { + if !isRequired(pod) { + return nil + } + + if v.ValidateHost() != nil { + return v.validateHostErr + } + + loadedProfiles, err := v.getLoadedProfiles() + if err != nil { + return fmt.Errorf("could not read loaded profiles: %v", err) + } + + for _, container := range pod.Spec.InitContainers { + if err := validateProfile(GetProfileName(pod, container.Name), loadedProfiles); err != nil { + return err + } + } + for _, container := range pod.Spec.Containers { + if err := validateProfile(GetProfileName(pod, container.Name), loadedProfiles); err != nil { + return err + } + } + + return nil +} + +func (v *validator) ValidateHost() error { + return v.validateHostErr +} + +// Verify that the host and runtime is capable of enforcing AppArmor profiles. +func validateHost(runtime string) error { + // Check feature-gates + if !utilconfig.DefaultFeatureGate.AppArmor() { + return errors.New("AppArmor disabled by feature-gate") + } + + // Check build support. + if isDisabledBuild { + return errors.New("Binary not compiled for linux") + } + + // Check kernel support. + if !IsAppArmorEnabled() { + return errors.New("AppArmor is not enabled on the host") + } + + // Check runtime support. Currently only Docker is supported. + if runtime != "docker" { + return fmt.Errorf("AppArmor is only enabled for 'docker' runtime. Found: %q.", runtime) + } + + return nil +} + +// Verify that the profile is valid and loaded. +func validateProfile(profile string, loadedProfiles map[string]bool) error { + if err := ValidateProfileFormat(profile); err != nil { + return err + } + + if strings.HasPrefix(profile, ProfileNamePrefix) { + profileName := strings.TrimPrefix(profile, ProfileNamePrefix) + if !loadedProfiles[profileName] { + return fmt.Errorf("profile %q is not loaded", profileName) + } + } + + return nil +} + +func ValidateProfileFormat(profile string) error { + if profile == "" || profile == ProfileRuntimeDefault { + return nil + } + if !strings.HasPrefix(profile, ProfileNamePrefix) { + return fmt.Errorf("invalid AppArmor profile name: %q", profile) + } + return nil +} + +func (v *validator) getLoadedProfiles() (map[string]bool, error) { + profilesPath := path.Join(v.appArmorFS, "profiles") + profilesFile, err := os.Open(profilesPath) + if err != nil { + return nil, fmt.Errorf("failed to open %s: %v", profilesPath, err) + } + defer profilesFile.Close() + + profiles := map[string]bool{} + scanner := bufio.NewScanner(profilesFile) + for scanner.Scan() { + profileName := parseProfileName(scanner.Text()) + if profileName == "" { + // Unknown line format; skip it. + continue + } + profiles[profileName] = true + } + return profiles, nil +} + +// The profiles file is formatted with one profile per line, matching a form: +// namespace://profile-name (mode) +// profile-name (mode) +// Where mode is {enforce, complain, kill}. The "namespace://" is only included for namespaced +// profiles. For the purposes of Kubernetes, we consider the namespace part of the profile name. +func parseProfileName(profileLine string) string { + modeIndex := strings.IndexRune(profileLine, '(') + if modeIndex < 0 { + return "" + } + return strings.TrimSpace(profileLine[:modeIndex]) +} + +func getAppArmorFS() (string, error) { + mountsFile, err := os.Open("/proc/mounts") + if err != nil { + return "", fmt.Errorf("could not open /proc/mounts: %v", err) + } + defer mountsFile.Close() + + scanner := bufio.NewScanner(mountsFile) + for scanner.Scan() { + fields := strings.Fields(scanner.Text()) + if len(fields) < 3 { + // Unknown line format; skip it. + continue + } + if fields[2] == "securityfs" { + appArmorFS := path.Join(fields[1], "apparmor") + if ok, err := util.FileExists(appArmorFS); !ok { + msg := fmt.Sprintf("path %s does not exist", appArmorFS) + if err != nil { + return "", fmt.Errorf("%s: %v", msg, err) + } else { + return "", errors.New(msg) + } + } else { + return appArmorFS, nil + } + } + } + if err := scanner.Err(); err != nil { + return "", fmt.Errorf("error scanning mounts: %v", err) + } + + return "", errors.New("securityfs not found") +} + +// IsAppArmorEnabled returns true if apparmor is enabled for the host. +// This function is forked from +// https://github.com/opencontainers/runc/blob/1a81e9ab1f138c091fe5c86d0883f87716088527/libcontainer/apparmor/apparmor.go +// to avoid the libapparmor dependency. +func IsAppArmorEnabled() bool { + if _, err := os.Stat("/sys/kernel/security/apparmor"); err == nil && os.Getenv("container") == "" { + if _, err = os.Stat("/sbin/apparmor_parser"); err == nil { + buf, err := ioutil.ReadFile("/sys/module/apparmor/parameters/enabled") + return err == nil && len(buf) > 1 && buf[0] == 'Y' + } + } + return false +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/validate_disabled.go b/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/validate_disabled.go new file mode 100644 index 00000000..875054a9 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/security/apparmor/validate_disabled.go @@ -0,0 +1,24 @@ +// +build !linux + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apparmor + +func init() { + // If Kubernetes was not built for linux, apparmor is always disabled. + isDisabledBuild = true +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/selection/operator.go b/vendor/k8s.io/client-go/1.4/pkg/selection/operator.go new file mode 100644 index 00000000..298f798c --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/selection/operator.go @@ -0,0 +1,33 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package selection + +// Operator represents a key/field's relationship to value(s). +// See labels.Requirement and fields.Requirement for more details. +type Operator string + +const ( + DoesNotExist Operator = "!" + Equals Operator = "=" + DoubleEquals Operator = "==" + In Operator = "in" + NotEquals Operator = "!=" + NotIn Operator = "notin" + Exists Operator = "exists" + GreaterThan Operator = "gt" + LessThan Operator = "lt" +) diff --git a/vendor/k8s.io/kubernetes/third_party/forked/reflect/deep_equal.go b/vendor/k8s.io/client-go/1.4/pkg/third_party/forked/golang/reflect/deep_equal.go similarity index 100% rename from vendor/k8s.io/kubernetes/third_party/forked/reflect/deep_equal.go rename to vendor/k8s.io/client-go/1.4/pkg/third_party/forked/golang/reflect/deep_equal.go diff --git a/vendor/k8s.io/client-go/1.4/pkg/third_party/forked/golang/reflect/type.go b/vendor/k8s.io/client-go/1.4/pkg/third_party/forked/golang/reflect/type.go new file mode 100644 index 00000000..67957ee3 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/third_party/forked/golang/reflect/type.go @@ -0,0 +1,91 @@ +//This package is copied from Go library reflect/type.go. +//The struct tag library provides no way to extract the list of struct tags, only +//a specific tag +package reflect + +import ( + "fmt" + + "strconv" + "strings" +) + +type StructTag struct { + Name string + Value string +} + +func (t StructTag) String() string { + return fmt.Sprintf("%s:%q", t.Name, t.Value) +} + +type StructTags []StructTag + +func (tags StructTags) String() string { + s := make([]string, 0, len(tags)) + for _, tag := range tags { + s = append(s, tag.String()) + } + return "`" + strings.Join(s, " ") + "`" +} + +func (tags StructTags) Has(name string) bool { + for i := range tags { + if tags[i].Name == name { + return true + } + } + return false +} + +// ParseStructTags returns the full set of fields in a struct tag in the order they appear in +// the struct tag. +func ParseStructTags(tag string) (StructTags, error) { + tags := StructTags{} + for tag != "" { + // Skip leading space. + i := 0 + for i < len(tag) && tag[i] == ' ' { + i++ + } + tag = tag[i:] + if tag == "" { + break + } + + // Scan to colon. A space, a quote or a control character is a syntax error. + // Strictly speaking, control chars include the range [0x7f, 0x9f], not just + // [0x00, 0x1f], but in practice, we ignore the multi-byte control characters + // as it is simpler to inspect the tag's bytes than the tag's runes. + i = 0 + for i < len(tag) && tag[i] > ' ' && tag[i] != ':' && tag[i] != '"' && tag[i] != 0x7f { + i++ + } + if i == 0 || i+1 >= len(tag) || tag[i] != ':' || tag[i+1] != '"' { + break + } + name := string(tag[:i]) + tag = tag[i+1:] + + // Scan quoted string to find value. + i = 1 + for i < len(tag) && tag[i] != '"' { + if tag[i] == '\\' { + i++ + } + i++ + } + if i >= len(tag) { + break + } + qvalue := string(tag[:i+1]) + tag = tag[i+1:] + + value, err := strconv.Unquote(qvalue) + if err != nil { + return nil, err + } + tags = append(tags, StructTag{Name: name, Value: value}) + } + return tags, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/types/doc.go b/vendor/k8s.io/client-go/1.4/pkg/types/doc.go new file mode 100644 index 00000000..783cbcdc --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/types/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package types implements various generic types used throughout kubernetes. +package types diff --git a/vendor/k8s.io/client-go/1.4/pkg/types/namespacedname.go b/vendor/k8s.io/client-go/1.4/pkg/types/namespacedname.go new file mode 100644 index 00000000..1e2130da --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/types/namespacedname.go @@ -0,0 +1,60 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +import ( + "fmt" + "strings" +) + +// NamespacedName comprises a resource name, with a mandatory namespace, +// rendered as "/". Being a type captures intent and +// helps make sure that UIDs, namespaced names and non-namespaced names +// do not get conflated in code. For most use cases, namespace and name +// will already have been format validated at the API entry point, so we +// don't do that here. Where that's not the case (e.g. in testing), +// consider using NamespacedNameOrDie() in testing.go in this package. + +type NamespacedName struct { + Namespace string + Name string +} + +const ( + Separator = '/' +) + +// String returns the general purpose string representation +func (n NamespacedName) String() string { + return fmt.Sprintf("%s%c%s", n.Namespace, Separator, n.Name) +} + +// NewNamespacedNameFromString parses the provided string and returns a NamespacedName. +// The expected format is as per String() above. +// If the input string is invalid, the returned NamespacedName has all empty string field values. +// This allows a single-value return from this function, while still allowing error checks in the caller. +// Note that an input string which does not include exactly one Separator is not a valid input (as it could never +// have neem returned by String() ) +func NewNamespacedNameFromString(s string) NamespacedName { + nn := NamespacedName{} + result := strings.Split(s, string(Separator)) + if len(result) == 2 { + nn.Namespace = result[0] + nn.Name = result[1] + } + return nn +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/types/uid.go b/vendor/k8s.io/client-go/1.4/pkg/types/uid.go new file mode 100644 index 00000000..86933922 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/types/uid.go @@ -0,0 +1,22 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +// UID is a type that holds unique ID values, including UUIDs. Because we +// don't ONLY use UUIDs, this is an alias to string. Being a type captures +// intent and helps make sure that UIDs and names do not get conflated. +type UID string diff --git a/vendor/k8s.io/client-go/1.4/pkg/types/unix_user_id.go b/vendor/k8s.io/client-go/1.4/pkg/types/unix_user_id.go new file mode 100644 index 00000000..dc770c11 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/types/unix_user_id.go @@ -0,0 +1,23 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +// int64 is used as a safe bet against wrap-around (uid's are general +// int32) and to support uid_t -1, and -2. + +type UnixUserID int64 +type UnixGroupID int64 diff --git a/vendor/k8s.io/kubernetes/pkg/util/clock.go b/vendor/k8s.io/client-go/1.4/pkg/util/clock/clock.go similarity index 98% rename from vendor/k8s.io/kubernetes/pkg/util/clock.go rename to vendor/k8s.io/client-go/1.4/pkg/util/clock/clock.go index 474cbb68..2ea1b53c 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/clock.go +++ b/vendor/k8s.io/client-go/1.4/pkg/util/clock/clock.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package clock import ( "sync" diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/config/config.go b/vendor/k8s.io/client-go/1.4/pkg/util/config/config.go new file mode 100644 index 00000000..87cc3684 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/config/config.go @@ -0,0 +1,140 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "sync" + + "k8s.io/client-go/1.4/pkg/util/wait" +) + +type Merger interface { + // Invoked when a change from a source is received. May also function as an incremental + // merger if you wish to consume changes incrementally. Must be reentrant when more than + // one source is defined. + Merge(source string, update interface{}) error +} + +// MergeFunc implements the Merger interface +type MergeFunc func(source string, update interface{}) error + +func (f MergeFunc) Merge(source string, update interface{}) error { + return f(source, update) +} + +// Mux is a class for merging configuration from multiple sources. Changes are +// pushed via channels and sent to the merge function. +type Mux struct { + // Invoked when an update is sent to a source. + merger Merger + + // Sources and their lock. + sourceLock sync.RWMutex + // Maps source names to channels + sources map[string]chan interface{} +} + +// NewMux creates a new mux that can merge changes from multiple sources. +func NewMux(merger Merger) *Mux { + mux := &Mux{ + sources: make(map[string]chan interface{}), + merger: merger, + } + return mux +} + +// Channel returns a channel where a configuration source +// can send updates of new configurations. Multiple calls with the same +// source will return the same channel. This allows change and state based sources +// to use the same channel. Different source names however will be treated as a +// union. +func (m *Mux) Channel(source string) chan interface{} { + if len(source) == 0 { + panic("Channel given an empty name") + } + m.sourceLock.Lock() + defer m.sourceLock.Unlock() + channel, exists := m.sources[source] + if exists { + return channel + } + newChannel := make(chan interface{}) + m.sources[source] = newChannel + go wait.Until(func() { m.listen(source, newChannel) }, 0, wait.NeverStop) + return newChannel +} + +func (m *Mux) listen(source string, listenChannel <-chan interface{}) { + for update := range listenChannel { + m.merger.Merge(source, update) + } +} + +// Accessor is an interface for retrieving the current merge state. +type Accessor interface { + // MergedState returns a representation of the current merge state. + // Must be reentrant when more than one source is defined. + MergedState() interface{} +} + +// AccessorFunc implements the Accessor interface. +type AccessorFunc func() interface{} + +func (f AccessorFunc) MergedState() interface{} { + return f() +} + +type Listener interface { + // OnUpdate is invoked when a change is made to an object. + OnUpdate(instance interface{}) +} + +// ListenerFunc receives a representation of the change or object. +type ListenerFunc func(instance interface{}) + +func (f ListenerFunc) OnUpdate(instance interface{}) { + f(instance) +} + +type Broadcaster struct { + // Listeners for changes and their lock. + listenerLock sync.RWMutex + listeners []Listener +} + +// NewBroadcaster registers a set of listeners that support the Listener interface +// and notifies them all on changes. +func NewBroadcaster() *Broadcaster { + return &Broadcaster{} +} + +// Add registers listener to receive updates of changes. +func (b *Broadcaster) Add(listener Listener) { + b.listenerLock.Lock() + defer b.listenerLock.Unlock() + b.listeners = append(b.listeners, listener) +} + +// Notify notifies all listeners. +func (b *Broadcaster) Notify(instance interface{}) { + b.listenerLock.RLock() + listeners := b.listeners + b.listenerLock.RUnlock() + for _, listener := range listeners { + listener.OnUpdate(instance) + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/config/configuration_map.go b/vendor/k8s.io/client-go/1.4/pkg/util/config/configuration_map.go new file mode 100644 index 00000000..0acbde56 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/config/configuration_map.go @@ -0,0 +1,53 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "fmt" + "sort" + "strings" +) + +type ConfigurationMap map[string]string + +func (m *ConfigurationMap) String() string { + pairs := []string{} + for k, v := range *m { + pairs = append(pairs, fmt.Sprintf("%s=%s", k, v)) + } + sort.Strings(pairs) + return strings.Join(pairs, ",") +} + +func (m *ConfigurationMap) Set(value string) error { + for _, s := range strings.Split(value, ",") { + if len(s) == 0 { + continue + } + arr := strings.SplitN(s, "=", 2) + if len(arr) == 2 { + (*m)[strings.TrimSpace(arr[0])] = strings.TrimSpace(arr[1]) + } else { + (*m)[strings.TrimSpace(arr[0])] = "" + } + } + return nil +} + +func (*ConfigurationMap) Type() string { + return "mapStringString" +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/config/doc.go b/vendor/k8s.io/client-go/1.4/pkg/util/config/doc.go new file mode 100644 index 00000000..5dbb37d4 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/config/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package config provides utility objects for decoupling sources of configuration and the +// actual configuration state. Consumers must implement the Merger interface to unify +// the sources of change into an object. +package config diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/config/feature_gate.go b/vendor/k8s.io/client-go/1.4/pkg/util/config/feature_gate.go new file mode 100644 index 00000000..c8782c4c --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/config/feature_gate.go @@ -0,0 +1,223 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "fmt" + "sort" + "strconv" + "strings" + + "github.com/golang/glog" + "github.com/spf13/pflag" +) + +const ( + flagName = "feature-gates" + + // All known feature keys + // To add a new feature, define a key for it below and add + // a featureSpec entry to knownFeatures. + + // allAlphaGate is a global toggle for alpha features. Per-feature key + // values override the default set by allAlphaGate. Examples: + // AllAlpha=false,NewFeature=true will result in newFeature=true + // AllAlpha=true,NewFeature=false will result in newFeature=false + allAlphaGate = "AllAlpha" + externalTrafficLocalOnly = "AllowExtTrafficLocalEndpoints" + appArmor = "AppArmor" + dynamicKubeletConfig = "DynamicKubeletConfig" + dynamicVolumeProvisioning = "DynamicVolumeProvisioning" +) + +var ( + // Default values for recorded features. Every new feature gate should be + // represented here. + knownFeatures = map[string]featureSpec{ + allAlphaGate: {false, alpha}, + externalTrafficLocalOnly: {false, alpha}, + appArmor: {true, beta}, + dynamicKubeletConfig: {false, alpha}, + dynamicVolumeProvisioning: {true, alpha}, + } + + // Special handling for a few gates. + specialFeatures = map[string]func(f *featureGate, val bool){ + allAlphaGate: setUnsetAlphaGates, + } + + // DefaultFeatureGate is a shared global FeatureGate. + DefaultFeatureGate = &featureGate{ + known: knownFeatures, + special: specialFeatures, + } +) + +type featureSpec struct { + enabled bool + prerelease prerelease +} + +type prerelease string + +const ( + // Values for prerelease. + alpha = prerelease("ALPHA") + beta = prerelease("BETA") + ga = prerelease("") +) + +// FeatureGate parses and stores flag gates for known features from +// a string like feature1=true,feature2=false,... +type FeatureGate interface { + AddFlag(fs *pflag.FlagSet) + + // Every feature gate should add method here following this template: + // + // // owner: @username + // // alpha: v1.4 + // MyFeature() bool + + // owner: @timstclair + // beta: v1.4 + AppArmor() bool + + // owner: @girishkalele + // alpha: v1.4 + ExternalTrafficLocalOnly() bool + + // owner: @saad-ali + // alpha: v1.3 + DynamicVolumeProvisioning() bool + + // owner: mtaufen + // alpha: v1.4 + DynamicKubeletConfig() bool +} + +// featureGate implements FeatureGate as well as pflag.Value for flag parsing. +type featureGate struct { + known map[string]featureSpec + special map[string]func(*featureGate, bool) + enabled map[string]bool +} + +func setUnsetAlphaGates(f *featureGate, val bool) { + for k, v := range f.known { + if v.prerelease == alpha { + if _, found := f.enabled[k]; !found { + f.enabled[k] = val + } + } + } +} + +// Set, String, and Type implement pflag.Value + +// Set Parses a string of the form // "key1=value1,key2=value2,..." into a +// map[string]bool of known keys or returns an error. +func (f *featureGate) Set(value string) error { + f.enabled = make(map[string]bool) + for _, s := range strings.Split(value, ",") { + if len(s) == 0 { + continue + } + arr := strings.SplitN(s, "=", 2) + k := strings.TrimSpace(arr[0]) + _, ok := f.known[k] + if !ok { + return fmt.Errorf("unrecognized key: %s", k) + } + if len(arr) != 2 { + return fmt.Errorf("missing bool value for %s", k) + } + v := strings.TrimSpace(arr[1]) + boolValue, err := strconv.ParseBool(v) + if err != nil { + return fmt.Errorf("invalid value of %s: %s, err: %v", k, v, err) + } + f.enabled[k] = boolValue + + // Handle "special" features like "all alpha gates" + if fn, found := f.special[k]; found { + fn(f, boolValue) + } + } + + glog.Infof("feature gates: %v", f.enabled) + return nil +} + +func (f *featureGate) String() string { + pairs := []string{} + for k, v := range f.enabled { + pairs = append(pairs, fmt.Sprintf("%s=%t", k, v)) + } + sort.Strings(pairs) + return strings.Join(pairs, ",") +} + +func (f *featureGate) Type() string { + return "mapStringBool" +} + +// ExternalTrafficLocalOnly returns value for AllowExtTrafficLocalEndpoints +func (f *featureGate) ExternalTrafficLocalOnly() bool { + return f.lookup(externalTrafficLocalOnly) +} + +// AppArmor returns the value for the AppArmor feature gate. +func (f *featureGate) AppArmor() bool { + return f.lookup(appArmor) +} + +// DynamicKubeletConfig returns value for dynamicKubeletConfig +func (f *featureGate) DynamicKubeletConfig() bool { + return f.lookup(dynamicKubeletConfig) +} + +// DynamicVolumeProvisioning returns value for dynamicVolumeProvisioning +func (f *featureGate) DynamicVolumeProvisioning() bool { + return f.lookup(dynamicVolumeProvisioning) +} + +func (f *featureGate) lookup(key string) bool { + defaultValue := f.known[key].enabled + if f.enabled != nil { + if v, ok := f.enabled[key]; ok { + return v + } + } + return defaultValue + +} + +// AddFlag adds a flag for setting global feature gates to the specified FlagSet. +func (f *featureGate) AddFlag(fs *pflag.FlagSet) { + var known []string + for k, v := range f.known { + pre := "" + if v.prerelease != ga { + pre = fmt.Sprintf("%s - ", v.prerelease) + } + known = append(known, fmt.Sprintf("%s=true|false (%sdefault=%t)", k, pre, v.enabled)) + } + sort.Strings(known) + fs.Var(f, flagName, ""+ + "A set of key=value pairs that describe feature gates for alpha/experimental features. "+ + "Options are:\n"+strings.Join(known, "\n")) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/crypto/crypto.go b/vendor/k8s.io/client-go/1.4/pkg/util/crypto/crypto.go new file mode 100644 index 00000000..7e926450 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/crypto/crypto.go @@ -0,0 +1,212 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package crypto + +import ( + "bytes" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "errors" + "fmt" + "io/ioutil" + "math/big" + "net" + "os" + "path/filepath" + "time" +) + +// FoundCertOrKey returns true if the certificate or key files already exists, +// otherwise returns false. +func FoundCertOrKey(certPath, keyPath string) bool { + if canReadFile(certPath) || canReadFile(keyPath) { + return true + } + + return false +} + +// If the file represented by path exists and +// readable, returns true otherwise returns false. +func canReadFile(path string) bool { + f, err := os.Open(path) + if err != nil { + return false + } + + defer f.Close() + + return true +} + +// GenerateSelfSignedCert creates a self-signed certificate and key for the given host. +// Host may be an IP or a DNS name +// You may also specify additional subject alt names (either ip or dns names) for the certificate +// The certificate will be created with file mode 0644. The key will be created with file mode 0600. +// If the certificate or key files already exist, they will be overwritten. +// Any parent directories of the certPath or keyPath will be created as needed with file mode 0755. +func GenerateSelfSignedCert(host, certPath, keyPath string, alternateIPs []net.IP, alternateDNS []string) error { + priv, err := rsa.GenerateKey(rand.Reader, 2048) + if err != nil { + return err + } + + template := x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{ + CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), + }, + NotBefore: time.Now(), + NotAfter: time.Now().Add(time.Hour * 24 * 365), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + IsCA: true, + } + + if ip := net.ParseIP(host); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, host) + } + + template.IPAddresses = append(template.IPAddresses, alternateIPs...) + template.DNSNames = append(template.DNSNames, alternateDNS...) + + derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, &priv.PublicKey, priv) + if err != nil { + return err + } + + // Generate cert + certBuffer := bytes.Buffer{} + if err := pem.Encode(&certBuffer, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { + return err + } + + // Generate key + keyBuffer := bytes.Buffer{} + if err := pem.Encode(&keyBuffer, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { + return err + } + + // Write cert + if err := WriteCertToPath(certPath, certBuffer.Bytes()); err != nil { + return err + } + + // Write key + if err := WriteKeyToPath(keyPath, keyBuffer.Bytes()); err != nil { + return err + } + + return nil +} + +// WriteCertToPath writes the pem-encoded certificate data to certPath. +// The certificate file will be created with file mode 0644. +// If the certificate file already exists, it will be overwritten. +// The parent directory of the certPath will be created as needed with file mode 0755. +func WriteCertToPath(certPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(certPath), os.FileMode(0755)); err != nil { + return err + } + if err := ioutil.WriteFile(certPath, data, os.FileMode(0644)); err != nil { + return err + } + return nil +} + +// WriteKeyToPath writes the pem-encoded key data to keyPath. +// The key file will be created with file mode 0600. +// If the key file already exists, it will be overwritten. +// The parent directory of the keyPath will be created as needed with file mode 0755. +func WriteKeyToPath(keyPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { + return err + } + if err := ioutil.WriteFile(keyPath, data, os.FileMode(0600)); err != nil { + return err + } + return nil +} + +// CertPoolFromFile returns an x509.CertPool containing the certificates in the given PEM-encoded file. +// Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates +func CertPoolFromFile(filename string) (*x509.CertPool, error) { + certs, err := certificatesFromFile(filename) + if err != nil { + return nil, err + } + pool := x509.NewCertPool() + for _, cert := range certs { + pool.AddCert(cert) + } + return pool, nil +} + +// certificatesFromFile returns the x509.Certificates contained in the given PEM-encoded file. +// Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates +func certificatesFromFile(file string) ([]*x509.Certificate, error) { + if len(file) == 0 { + return nil, errors.New("error reading certificates from an empty filename") + } + pemBlock, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + certs, err := CertsFromPEM(pemBlock) + if err != nil { + return nil, fmt.Errorf("error reading %s: %s", file, err) + } + return certs, nil +} + +// CertsFromPEM returns the x509.Certificates contained in the given PEM-encoded byte array +// Returns an error if a certificate could not be parsed, or if the data does not contain any certificates +func CertsFromPEM(pemCerts []byte) ([]*x509.Certificate, error) { + ok := false + certs := []*x509.Certificate{} + for len(pemCerts) > 0 { + var block *pem.Block + block, pemCerts = pem.Decode(pemCerts) + if block == nil { + break + } + // Only use PEM "CERTIFICATE" blocks without extra headers + if block.Type != "CERTIFICATE" || len(block.Headers) != 0 { + continue + } + + cert, err := x509.ParseCertificate(block.Bytes) + if err != nil { + return certs, err + } + + certs = append(certs, cert) + ok = true + } + + if !ok { + return certs, errors.New("could not read any certificates") + } + return certs, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/doc.go b/vendor/k8s.io/client-go/1.4/pkg/util/doc.go new file mode 100644 index 00000000..1747db55 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package util implements various utility functions used in both testing and implementation +// of Kubernetes. Package util may not depend on any other package in the Kubernetes +// package tree. +package util diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/errors/doc.go b/vendor/k8s.io/client-go/1.4/pkg/util/errors/doc.go new file mode 100644 index 00000000..b3b39bc3 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/errors/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package errors implements various utility functions and types around errors. +package errors diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/errors/errors.go b/vendor/k8s.io/client-go/1.4/pkg/util/errors/errors.go new file mode 100644 index 00000000..42631f21 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/errors/errors.go @@ -0,0 +1,168 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package errors + +import ( + "errors" + "fmt" +) + +// Aggregate represents an object that contains multiple errors, but does not +// necessarily have singular semantic meaning. +type Aggregate interface { + error + Errors() []error +} + +// NewAggregate converts a slice of errors into an Aggregate interface, which +// is itself an implementation of the error interface. If the slice is empty, +// this returns nil. +// It will check if any of the element of input error list is nil, to avoid +// nil pointer panic when call Error(). +func NewAggregate(errlist []error) Aggregate { + if len(errlist) == 0 { + return nil + } + // In case of input error list contains nil + var errs []error + for _, e := range errlist { + if e != nil { + errs = append(errs, e) + } + } + if len(errs) == 0 { + return nil + } + return aggregate(errs) +} + +// This helper implements the error and Errors interfaces. Keeping it private +// prevents people from making an aggregate of 0 errors, which is not +// an error, but does satisfy the error interface. +type aggregate []error + +// Error is part of the error interface. +func (agg aggregate) Error() string { + if len(agg) == 0 { + // This should never happen, really. + return "" + } + if len(agg) == 1 { + return agg[0].Error() + } + result := fmt.Sprintf("[%s", agg[0].Error()) + for i := 1; i < len(agg); i++ { + result += fmt.Sprintf(", %s", agg[i].Error()) + } + result += "]" + return result +} + +// Errors is part of the Aggregate interface. +func (agg aggregate) Errors() []error { + return []error(agg) +} + +// Matcher is used to match errors. Returns true if the error matches. +type Matcher func(error) bool + +// FilterOut removes all errors that match any of the matchers from the input +// error. If the input is a singular error, only that error is tested. If the +// input implements the Aggregate interface, the list of errors will be +// processed recursively. +// +// This can be used, for example, to remove known-OK errors (such as io.EOF or +// os.PathNotFound) from a list of errors. +func FilterOut(err error, fns ...Matcher) error { + if err == nil { + return nil + } + if agg, ok := err.(Aggregate); ok { + return NewAggregate(filterErrors(agg.Errors(), fns...)) + } + if !matchesError(err, fns...) { + return err + } + return nil +} + +// matchesError returns true if any Matcher returns true +func matchesError(err error, fns ...Matcher) bool { + for _, fn := range fns { + if fn(err) { + return true + } + } + return false +} + +// filterErrors returns any errors (or nested errors, if the list contains +// nested Errors) for which all fns return false. If no errors +// remain a nil list is returned. The resulting silec will have all +// nested slices flattened as a side effect. +func filterErrors(list []error, fns ...Matcher) []error { + result := []error{} + for _, err := range list { + r := FilterOut(err, fns...) + if r != nil { + result = append(result, r) + } + } + return result +} + +// Flatten takes an Aggregate, which may hold other Aggregates in arbitrary +// nesting, and flattens them all into a single Aggregate, recursively. +func Flatten(agg Aggregate) Aggregate { + result := []error{} + if agg == nil { + return nil + } + for _, err := range agg.Errors() { + if a, ok := err.(Aggregate); ok { + r := Flatten(a) + if r != nil { + result = append(result, r.Errors()...) + } + } else { + if err != nil { + result = append(result, err) + } + } + } + return NewAggregate(result) +} + +// AggregateGoroutines runs the provided functions in parallel, stuffing all +// non-nil errors into the returned Aggregate. +// Returns nil if all the functions complete successfully. +func AggregateGoroutines(funcs ...func() error) Aggregate { + errChan := make(chan error, len(funcs)) + for _, f := range funcs { + go func(f func() error) { errChan <- f() }(f) + } + errs := make([]error, 0) + for i := 0; i < cap(errChan); i++ { + if err := <-errChan; err != nil { + errs = append(errs, err) + } + } + return NewAggregate(errs) +} + +// ErrPreconditionViolated is returned when the precondition is violated +var ErrPreconditionViolated = errors.New("precondition is violated") diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/flowcontrol/backoff.go b/vendor/k8s.io/client-go/1.4/pkg/util/flowcontrol/backoff.go new file mode 100644 index 00000000..27cc3416 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/flowcontrol/backoff.go @@ -0,0 +1,149 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package flowcontrol + +import ( + "sync" + "time" + + "k8s.io/client-go/1.4/pkg/util/clock" + "k8s.io/client-go/1.4/pkg/util/integer" +) + +type backoffEntry struct { + backoff time.Duration + lastUpdate time.Time +} + +type Backoff struct { + sync.Mutex + Clock clock.Clock + defaultDuration time.Duration + maxDuration time.Duration + perItemBackoff map[string]*backoffEntry +} + +func NewFakeBackOff(initial, max time.Duration, tc *clock.FakeClock) *Backoff { + return &Backoff{ + perItemBackoff: map[string]*backoffEntry{}, + Clock: tc, + defaultDuration: initial, + maxDuration: max, + } +} + +func NewBackOff(initial, max time.Duration) *Backoff { + return &Backoff{ + perItemBackoff: map[string]*backoffEntry{}, + Clock: clock.RealClock{}, + defaultDuration: initial, + maxDuration: max, + } +} + +// Get the current backoff Duration +func (p *Backoff) Get(id string) time.Duration { + p.Lock() + defer p.Unlock() + var delay time.Duration + entry, ok := p.perItemBackoff[id] + if ok { + delay = entry.backoff + } + return delay +} + +// move backoff to the next mark, capping at maxDuration +func (p *Backoff) Next(id string, eventTime time.Time) { + p.Lock() + defer p.Unlock() + entry, ok := p.perItemBackoff[id] + if !ok || hasExpired(eventTime, entry.lastUpdate, p.maxDuration) { + entry = p.initEntryUnsafe(id) + } else { + delay := entry.backoff * 2 // exponential + entry.backoff = time.Duration(integer.Int64Min(int64(delay), int64(p.maxDuration))) + } + entry.lastUpdate = p.Clock.Now() +} + +// Reset forces clearing of all backoff data for a given key. +func (p *Backoff) Reset(id string) { + p.Lock() + defer p.Unlock() + delete(p.perItemBackoff, id) +} + +// Returns True if the elapsed time since eventTime is smaller than the current backoff window +func (p *Backoff) IsInBackOffSince(id string, eventTime time.Time) bool { + p.Lock() + defer p.Unlock() + entry, ok := p.perItemBackoff[id] + if !ok { + return false + } + if hasExpired(eventTime, entry.lastUpdate, p.maxDuration) { + return false + } + return p.Clock.Now().Sub(eventTime) < entry.backoff +} + +// Returns True if time since lastupdate is less than the current backoff window. +func (p *Backoff) IsInBackOffSinceUpdate(id string, eventTime time.Time) bool { + p.Lock() + defer p.Unlock() + entry, ok := p.perItemBackoff[id] + if !ok { + return false + } + if hasExpired(eventTime, entry.lastUpdate, p.maxDuration) { + return false + } + return eventTime.Sub(entry.lastUpdate) < entry.backoff +} + +// Garbage collect records that have aged past maxDuration. Backoff users are expected +// to invoke this periodically. +func (p *Backoff) GC() { + p.Lock() + defer p.Unlock() + now := p.Clock.Now() + for id, entry := range p.perItemBackoff { + if now.Sub(entry.lastUpdate) > p.maxDuration*2 { + // GC when entry has not been updated for 2*maxDuration + delete(p.perItemBackoff, id) + } + } +} + +func (p *Backoff) DeleteEntry(id string) { + p.Lock() + defer p.Unlock() + delete(p.perItemBackoff, id) +} + +// Take a lock on *Backoff, before calling initEntryUnsafe +func (p *Backoff) initEntryUnsafe(id string) *backoffEntry { + entry := &backoffEntry{backoff: p.defaultDuration} + p.perItemBackoff[id] = entry + return entry +} + +// After 2*maxDuration we restart the backoff factor to the beginning +func hasExpired(eventTime time.Time, lastUpdate time.Time, maxDuration time.Duration) bool { + return eventTime.Sub(lastUpdate) > maxDuration*2 // consider stable if it's ok for twice the maxDuration +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/flowcontrol/throttle.go b/vendor/k8s.io/client-go/1.4/pkg/util/flowcontrol/throttle.go new file mode 100644 index 00000000..881a2f57 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/flowcontrol/throttle.go @@ -0,0 +1,132 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package flowcontrol + +import ( + "sync" + + "github.com/juju/ratelimit" +) + +type RateLimiter interface { + // TryAccept returns true if a token is taken immediately. Otherwise, + // it returns false. + TryAccept() bool + // Accept returns once a token becomes available. + Accept() + // Stop stops the rate limiter, subsequent calls to CanAccept will return false + Stop() + // Saturation returns a percentage number which describes how saturated + // this rate limiter is. + // Usually we use token bucket rate limiter. In that case, + // 1.0 means no tokens are available; 0.0 means we have a full bucket of tokens to use. + Saturation() float64 + // QPS returns QPS of this rate limiter + QPS() float32 +} + +type tokenBucketRateLimiter struct { + limiter *ratelimit.Bucket + qps float32 +} + +// NewTokenBucketRateLimiter creates a rate limiter which implements a token bucket approach. +// The rate limiter allows bursts of up to 'burst' to exceed the QPS, while still maintaining a +// smoothed qps rate of 'qps'. +// The bucket is initially filled with 'burst' tokens, and refills at a rate of 'qps'. +// The maximum number of tokens in the bucket is capped at 'burst'. +func NewTokenBucketRateLimiter(qps float32, burst int) RateLimiter { + limiter := ratelimit.NewBucketWithRate(float64(qps), int64(burst)) + return &tokenBucketRateLimiter{ + limiter: limiter, + qps: qps, + } +} + +func (t *tokenBucketRateLimiter) TryAccept() bool { + return t.limiter.TakeAvailable(1) == 1 +} + +func (t *tokenBucketRateLimiter) Saturation() float64 { + capacity := t.limiter.Capacity() + avail := t.limiter.Available() + return float64(capacity-avail) / float64(capacity) +} + +// Accept will block until a token becomes available +func (t *tokenBucketRateLimiter) Accept() { + t.limiter.Wait(1) +} + +func (t *tokenBucketRateLimiter) Stop() { +} + +func (t *tokenBucketRateLimiter) QPS() float32 { + return t.qps +} + +type fakeAlwaysRateLimiter struct{} + +func NewFakeAlwaysRateLimiter() RateLimiter { + return &fakeAlwaysRateLimiter{} +} + +func (t *fakeAlwaysRateLimiter) TryAccept() bool { + return true +} + +func (t *fakeAlwaysRateLimiter) Saturation() float64 { + return 0 +} + +func (t *fakeAlwaysRateLimiter) Stop() {} + +func (t *fakeAlwaysRateLimiter) Accept() {} + +func (t *fakeAlwaysRateLimiter) QPS() float32 { + return 1 +} + +type fakeNeverRateLimiter struct { + wg sync.WaitGroup +} + +func NewFakeNeverRateLimiter() RateLimiter { + rl := fakeNeverRateLimiter{} + rl.wg.Add(1) + return &rl +} + +func (t *fakeNeverRateLimiter) TryAccept() bool { + return false +} + +func (t *fakeNeverRateLimiter) Saturation() float64 { + return 1 +} + +func (t *fakeNeverRateLimiter) Stop() { + t.wg.Done() +} + +func (t *fakeNeverRateLimiter) Accept() { + t.wg.Wait() +} + +func (t *fakeNeverRateLimiter) QPS() float32 { + return 1 +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/framer/framer.go b/vendor/k8s.io/client-go/1.4/pkg/util/framer/framer.go new file mode 100644 index 00000000..066680f4 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/framer/framer.go @@ -0,0 +1,167 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package framer implements simple frame decoding techniques for an io.ReadCloser +package framer + +import ( + "encoding/binary" + "encoding/json" + "io" +) + +type lengthDelimitedFrameWriter struct { + w io.Writer + h [4]byte +} + +func NewLengthDelimitedFrameWriter(w io.Writer) io.Writer { + return &lengthDelimitedFrameWriter{w: w} +} + +// Write writes a single frame to the nested writer, prepending it with the length in +// in bytes of data (as a 4 byte, bigendian uint32). +func (w *lengthDelimitedFrameWriter) Write(data []byte) (int, error) { + binary.BigEndian.PutUint32(w.h[:], uint32(len(data))) + n, err := w.w.Write(w.h[:]) + if err != nil { + return 0, err + } + if n != len(w.h) { + return 0, io.ErrShortWrite + } + return w.w.Write(data) +} + +type lengthDelimitedFrameReader struct { + r io.ReadCloser + remaining int +} + +// NewLengthDelimitedFrameReader returns an io.Reader that will decode length-prefixed +// frames off of a stream. +// +// The protocol is: +// +// stream: message ... +// message: prefix body +// prefix: 4 byte uint32 in BigEndian order, denotes length of body +// body: bytes (0..prefix) +// +// If the buffer passed to Read is not long enough to contain an entire frame, io.ErrShortRead +// will be returned along with the number of bytes read. +func NewLengthDelimitedFrameReader(r io.ReadCloser) io.ReadCloser { + return &lengthDelimitedFrameReader{r: r} +} + +// Read attempts to read an entire frame into data. If that is not possible, io.ErrShortBuffer +// is returned and subsequent calls will attempt to read the last frame. A frame is complete when +// err is nil. +func (r *lengthDelimitedFrameReader) Read(data []byte) (int, error) { + if r.remaining <= 0 { + header := [4]byte{} + n, err := io.ReadAtLeast(r.r, header[:4], 4) + if err != nil { + return 0, err + } + if n != 4 { + return 0, io.ErrUnexpectedEOF + } + frameLength := int(binary.BigEndian.Uint32(header[:])) + r.remaining = frameLength + } + + expect := r.remaining + max := expect + if max > len(data) { + max = len(data) + } + n, err := io.ReadAtLeast(r.r, data[:max], int(max)) + r.remaining -= n + if err == io.ErrShortBuffer || r.remaining > 0 { + return n, io.ErrShortBuffer + } + if err != nil { + return n, err + } + if n != expect { + return n, io.ErrUnexpectedEOF + } + + return n, nil +} + +func (r *lengthDelimitedFrameReader) Close() error { + return r.r.Close() +} + +type jsonFrameReader struct { + r io.ReadCloser + decoder *json.Decoder + remaining []byte +} + +// NewJSONFramedReader returns an io.Reader that will decode individual JSON objects off +// of a wire. +// +// The boundaries between each frame are valid JSON objects. A JSON parsing error will terminate +// the read. +func NewJSONFramedReader(r io.ReadCloser) io.ReadCloser { + return &jsonFrameReader{ + r: r, + decoder: json.NewDecoder(r), + } +} + +// ReadFrame decodes the next JSON object in the stream, or returns an error. The returned +// byte slice will be modified the next time ReadFrame is invoked and should not be altered. +func (r *jsonFrameReader) Read(data []byte) (int, error) { + // Return whatever remaining data exists from an in progress frame + if n := len(r.remaining); n > 0 { + if n <= len(data) { + data = append(data[0:0], r.remaining...) + r.remaining = nil + return n, nil + } + + n = len(data) + data = append(data[0:0], r.remaining[:n]...) + r.remaining = r.remaining[n:] + return n, io.ErrShortBuffer + } + + // RawMessage#Unmarshal appends to data - we reset the slice down to 0 and will either see + // data written to data, or be larger than data and a different array. + n := len(data) + m := json.RawMessage(data[:0]) + if err := r.decoder.Decode(&m); err != nil { + return 0, err + } + + // If capacity of data is less than length of the message, decoder will allocate a new slice + // and set m to it, which means we need to copy the partial result back into data and preserve + // the remaining result for subsequent reads. + if len(m) > n { + data = append(data[0:0], m[:n]...) + r.remaining = m[n:] + return n, io.ErrShortBuffer + } + return len(m), nil +} + +func (r *jsonFrameReader) Close() error { + return r.r.Close() +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/hash/hash.go b/vendor/k8s.io/client-go/1.4/pkg/util/hash/hash.go new file mode 100644 index 00000000..803f066a --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/hash/hash.go @@ -0,0 +1,37 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package hash + +import ( + "hash" + + "github.com/davecgh/go-spew/spew" +) + +// DeepHashObject writes specified object to hash using the spew library +// which follows pointers and prints actual values of the nested objects +// ensuring the hash does not change when a pointer changes. +func DeepHashObject(hasher hash.Hash, objectToWrite interface{}) { + hasher.Reset() + printer := spew.ConfigState{ + Indent: " ", + SortKeys: true, + DisableMethods: true, + SpewKeys: true, + } + printer.Fprintf(hasher, "%#v", objectToWrite) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/integer/integer.go b/vendor/k8s.io/client-go/1.4/pkg/util/integer/integer.go new file mode 100644 index 00000000..c6ea106f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/integer/integer.go @@ -0,0 +1,67 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package integer + +func IntMax(a, b int) int { + if b > a { + return b + } + return a +} + +func IntMin(a, b int) int { + if b < a { + return b + } + return a +} + +func Int32Max(a, b int32) int32 { + if b > a { + return b + } + return a +} + +func Int32Min(a, b int32) int32 { + if b < a { + return b + } + return a +} + +func Int64Max(a, b int64) int64 { + if b > a { + return b + } + return a +} + +func Int64Min(a, b int64) int64 { + if b < a { + return b + } + return a +} + +// RoundToInt32 rounds floats into integer numbers. +func RoundToInt32(a float64) int32 { + if a < 0 { + return int32(a - 0.5) + } + return int32(a + 0.5) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/intstr/generated.pb.go b/vendor/k8s.io/client-go/1.4/pkg/util/intstr/generated.pb.go new file mode 100644 index 00000000..a564abf9 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/intstr/generated.pb.go @@ -0,0 +1,372 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/util/intstr/generated.proto +// DO NOT EDIT! + +/* + Package intstr is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/util/intstr/generated.proto + + It has these top-level messages: + IntOrString +*/ +package intstr + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *IntOrString) Reset() { *m = IntOrString{} } +func (*IntOrString) ProtoMessage() {} +func (*IntOrString) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func init() { + proto.RegisterType((*IntOrString)(nil), "k8s.io.client-go.1.4.pkg.util.intstr.IntOrString") +} +func (m *IntOrString) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *IntOrString) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Type)) + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(m.IntVal)) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.StrVal))) + i += copy(data[i:], m.StrVal) + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *IntOrString) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.Type)) + n += 1 + sovGenerated(uint64(m.IntVal)) + l = len(m.StrVal) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *IntOrString) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IntOrString: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IntOrString: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + m.Type = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.Type |= (Type(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IntVal", wireType) + } + m.IntVal = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.IntVal |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StrVal", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StrVal = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 256 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x32, 0xcc, 0xb6, 0x28, 0xd6, + 0xcb, 0xcc, 0xd7, 0xcf, 0x2e, 0x4d, 0x4a, 0x2d, 0xca, 0x4b, 0x2d, 0x49, 0x2d, 0xd6, 0x2f, 0xc8, + 0x4e, 0xd7, 0x2f, 0x2d, 0xc9, 0xcc, 0xd1, 0xcf, 0xcc, 0x2b, 0x29, 0x2e, 0x29, 0xd2, 0x4f, 0x4f, + 0xcd, 0x4b, 0x2d, 0x4a, 0x2c, 0x49, 0x4d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x52, 0x84, + 0x68, 0xd1, 0x43, 0x68, 0xd1, 0x03, 0x6a, 0xd1, 0x03, 0x69, 0xd1, 0x83, 0x68, 0x91, 0xd2, 0x4d, + 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0x4f, 0xcf, 0xd7, 0x07, + 0xeb, 0x4c, 0x2a, 0x4d, 0x03, 0xf3, 0xc0, 0x1c, 0x30, 0x0b, 0x62, 0xa2, 0xd2, 0x44, 0x46, 0x2e, + 0x6e, 0xcf, 0xbc, 0x12, 0xff, 0xa2, 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0x74, 0x21, 0x0d, 0x2e, 0x96, + 0x92, 0xca, 0x82, 0x54, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x66, 0x27, 0x91, 0x13, 0xf7, 0xe4, 0x19, + 0x1e, 0xdd, 0x93, 0x67, 0x09, 0x01, 0x8a, 0xfd, 0x82, 0xd2, 0x41, 0x60, 0x15, 0x42, 0x6a, 0x5c, + 0x6c, 0x40, 0x2b, 0xc3, 0x12, 0x73, 0x24, 0x98, 0x80, 0x6a, 0x59, 0x9d, 0xf8, 0xa0, 0x6a, 0xd9, + 0x3c, 0xc1, 0xa2, 0x41, 0x50, 0x59, 0x90, 0x3a, 0xa0, 0xbb, 0x40, 0xea, 0x98, 0x81, 0xea, 0x38, + 0x11, 0xea, 0x82, 0xc1, 0xa2, 0x41, 0x50, 0x59, 0x2b, 0x8e, 0x19, 0x0b, 0xe4, 0x19, 0x1a, 0xee, + 0x28, 0x30, 0x38, 0x69, 0x9c, 0x78, 0x28, 0xc7, 0x70, 0x01, 0x88, 0x6f, 0x00, 0x71, 0xc3, 0x23, + 0x39, 0xc6, 0x13, 0x40, 0x7c, 0x01, 0x88, 0x1f, 0x00, 0xf1, 0x84, 0xc7, 0x72, 0x0c, 0x51, 0x6c, + 0x10, 0xcf, 0x02, 0x02, 0x00, 0x00, 0xff, 0xff, 0x68, 0x57, 0xfb, 0xfa, 0x43, 0x01, 0x00, 0x00, +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/intstr/generated.proto b/vendor/k8s.io/client-go/1.4/pkg/util/intstr/generated.proto new file mode 100644 index 00000000..dd508e1c --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/intstr/generated.proto @@ -0,0 +1,42 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.util.intstr; + +// Package-wide variables from generator "generated". +option go_package = "intstr"; + +// IntOrString is a type that can hold an int32 or a string. When used in +// JSON or YAML marshalling and unmarshalling, it produces or consumes the +// inner type. This allows you to have, for example, a JSON field that can +// accept a name or number. +// TODO: Rename to Int32OrString +// +// +protobuf=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message IntOrString { + optional int64 type = 1; + + optional int32 intVal = 2; + + optional string strVal = 3; +} + diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/intstr/intstr.go b/vendor/k8s.io/client-go/1.4/pkg/util/intstr/intstr.go new file mode 100644 index 00000000..59e7a066 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/intstr/intstr.go @@ -0,0 +1,147 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package intstr + +import ( + "encoding/json" + "fmt" + "math" + "strconv" + "strings" + + "github.com/google/gofuzz" +) + +// IntOrString is a type that can hold an int32 or a string. When used in +// JSON or YAML marshalling and unmarshalling, it produces or consumes the +// inner type. This allows you to have, for example, a JSON field that can +// accept a name or number. +// TODO: Rename to Int32OrString +// +// +protobuf=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type IntOrString struct { + Type Type `protobuf:"varint,1,opt,name=type,casttype=Type"` + IntVal int32 `protobuf:"varint,2,opt,name=intVal"` + StrVal string `protobuf:"bytes,3,opt,name=strVal"` +} + +// Type represents the stored type of IntOrString. +type Type int + +const ( + Int Type = iota // The IntOrString holds an int. + String // The IntOrString holds a string. +) + +// FromInt creates an IntOrString object with an int32 value. It is +// your responsibility not to call this method with a value greater +// than int32. +// TODO: convert to (val int32) +func FromInt(val int) IntOrString { + return IntOrString{Type: Int, IntVal: int32(val)} +} + +// FromString creates an IntOrString object with a string value. +func FromString(val string) IntOrString { + return IntOrString{Type: String, StrVal: val} +} + +// UnmarshalJSON implements the json.Unmarshaller interface. +func (intstr *IntOrString) UnmarshalJSON(value []byte) error { + if value[0] == '"' { + intstr.Type = String + return json.Unmarshal(value, &intstr.StrVal) + } + intstr.Type = Int + return json.Unmarshal(value, &intstr.IntVal) +} + +// String returns the string value, or the Itoa of the int value. +func (intstr *IntOrString) String() string { + if intstr.Type == String { + return intstr.StrVal + } + return strconv.Itoa(intstr.IntValue()) +} + +// IntValue returns the IntVal if type Int, or if +// it is a String, will attempt a conversion to int. +func (intstr *IntOrString) IntValue() int { + if intstr.Type == String { + i, _ := strconv.Atoi(intstr.StrVal) + return i + } + return int(intstr.IntVal) +} + +// MarshalJSON implements the json.Marshaller interface. +func (intstr IntOrString) MarshalJSON() ([]byte, error) { + switch intstr.Type { + case Int: + return json.Marshal(intstr.IntVal) + case String: + return json.Marshal(intstr.StrVal) + default: + return []byte{}, fmt.Errorf("impossible IntOrString.Type") + } +} + +func (intstr *IntOrString) Fuzz(c fuzz.Continue) { + if intstr == nil { + return + } + if c.RandBool() { + intstr.Type = Int + c.Fuzz(&intstr.IntVal) + intstr.StrVal = "" + } else { + intstr.Type = String + intstr.IntVal = 0 + c.Fuzz(&intstr.StrVal) + } +} + +func GetValueFromIntOrPercent(intOrPercent *IntOrString, total int, roundUp bool) (int, error) { + value, isPercent, err := getIntOrPercentValue(intOrPercent) + if err != nil { + return 0, fmt.Errorf("invalid value for IntOrString: %v", err) + } + if isPercent { + if roundUp { + value = int(math.Ceil(float64(value) * (float64(total)) / 100)) + } else { + value = int(math.Floor(float64(value) * (float64(total)) / 100)) + } + } + return value, nil +} + +func getIntOrPercentValue(intOrStr *IntOrString) (int, bool, error) { + switch intOrStr.Type { + case Int: + return intOrStr.IntValue(), false, nil + case String: + s := strings.Replace(intOrStr.StrVal, "%", "", -1) + v, err := strconv.Atoi(s) + if err != nil { + return 0, false, fmt.Errorf("invalid value %q: %v", intOrStr.StrVal, err) + } + return int(v), true, nil + } + return 0, false, fmt.Errorf("invalid type: neither int nor percentage") +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/json/json.go b/vendor/k8s.io/client-go/1.4/pkg/util/json/json.go new file mode 100644 index 00000000..e8054a12 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/json/json.go @@ -0,0 +1,107 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package json + +import ( + "bytes" + "encoding/json" + "io" +) + +// NewEncoder delegates to json.NewEncoder +// It is only here so this package can be a drop-in for common encoding/json uses +func NewEncoder(w io.Writer) *json.Encoder { + return json.NewEncoder(w) +} + +// Marshal delegates to json.Marshal +// It is only here so this package can be a drop-in for common encoding/json uses +func Marshal(v interface{}) ([]byte, error) { + return json.Marshal(v) +} + +// Unmarshal unmarshals the given data +// If v is a *map[string]interface{}, numbers are converted to int64 or float64 +func Unmarshal(data []byte, v interface{}) error { + switch v := v.(type) { + case *map[string]interface{}: + // Build a decoder from the given data + decoder := json.NewDecoder(bytes.NewBuffer(data)) + // Preserve numbers, rather than casting to float64 automatically + decoder.UseNumber() + // Run the decode + if err := decoder.Decode(v); err != nil { + return err + } + // If the decode succeeds, post-process the map to convert json.Number objects to int64 or float64 + return convertMapNumbers(*v) + + default: + return json.Unmarshal(data, v) + } +} + +// convertMapNumbers traverses the map, converting any json.Number values to int64 or float64. +// values which are map[string]interface{} or []interface{} are recursively visited +func convertMapNumbers(m map[string]interface{}) error { + var err error + for k, v := range m { + switch v := v.(type) { + case json.Number: + m[k], err = convertNumber(v) + case map[string]interface{}: + err = convertMapNumbers(v) + case []interface{}: + err = convertSliceNumbers(v) + } + if err != nil { + return err + } + } + return nil +} + +// convertSliceNumbers traverses the slice, converting any json.Number values to int64 or float64. +// values which are map[string]interface{} or []interface{} are recursively visited +func convertSliceNumbers(s []interface{}) error { + var err error + for i, v := range s { + switch v := v.(type) { + case json.Number: + s[i], err = convertNumber(v) + case map[string]interface{}: + err = convertMapNumbers(v) + case []interface{}: + err = convertSliceNumbers(v) + } + if err != nil { + return err + } + } + return nil +} + +// convertNumber converts a json.Number to an int64 or float64, or returns an error +func convertNumber(n json.Number) (interface{}, error) { + // Attempt to convert to an int64 first + if i, err := n.Int64(); err == nil { + return i, nil + } + // Return a float64 (default json.Decode() behavior) + // An overflow will return an error + return n.Float64() +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/labels/doc.go b/vendor/k8s.io/client-go/1.4/pkg/util/labels/doc.go new file mode 100644 index 00000000..c87305fb --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/labels/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package labels provides utilities to work with Kubernetes labels. +package labels diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/labels/labels.go b/vendor/k8s.io/client-go/1.4/pkg/util/labels/labels.go new file mode 100644 index 00000000..fc5d317b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/labels/labels.go @@ -0,0 +1,126 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package labels + +import ( + "fmt" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// Clones the given map and returns a new map with the given key and value added. +// Returns the given map, if labelKey is empty. +func CloneAndAddLabel(labels map[string]string, labelKey string, labelValue uint32) map[string]string { + if labelKey == "" { + // Don't need to add a label. + return labels + } + // Clone. + newLabels := map[string]string{} + for key, value := range labels { + newLabels[key] = value + } + newLabels[labelKey] = fmt.Sprintf("%d", labelValue) + return newLabels +} + +// CloneAndRemoveLabel clones the given map and returns a new map with the given key removed. +// Returns the given map, if labelKey is empty. +func CloneAndRemoveLabel(labels map[string]string, labelKey string) map[string]string { + if labelKey == "" { + // Don't need to add a label. + return labels + } + // Clone. + newLabels := map[string]string{} + for key, value := range labels { + newLabels[key] = value + } + delete(newLabels, labelKey) + return newLabels +} + +// AddLabel returns a map with the given key and value added to the given map. +func AddLabel(labels map[string]string, labelKey string, labelValue string) map[string]string { + if labelKey == "" { + // Don't need to add a label. + return labels + } + if labels == nil { + labels = make(map[string]string) + } + labels[labelKey] = labelValue + return labels +} + +// Clones the given selector and returns a new selector with the given key and value added. +// Returns the given selector, if labelKey is empty. +func CloneSelectorAndAddLabel(selector *unversioned.LabelSelector, labelKey string, labelValue uint32) *unversioned.LabelSelector { + if labelKey == "" { + // Don't need to add a label. + return selector + } + + // Clone. + newSelector := new(unversioned.LabelSelector) + + // TODO(madhusudancs): Check if you can use deepCopy_extensions_LabelSelector here. + newSelector.MatchLabels = make(map[string]string) + if selector.MatchLabels != nil { + for key, val := range selector.MatchLabels { + newSelector.MatchLabels[key] = val + } + } + newSelector.MatchLabels[labelKey] = fmt.Sprintf("%d", labelValue) + + if selector.MatchExpressions != nil { + newMExps := make([]unversioned.LabelSelectorRequirement, len(selector.MatchExpressions)) + for i, me := range selector.MatchExpressions { + newMExps[i].Key = me.Key + newMExps[i].Operator = me.Operator + if me.Values != nil { + newMExps[i].Values = make([]string, len(me.Values)) + copy(newMExps[i].Values, me.Values) + } else { + newMExps[i].Values = nil + } + } + newSelector.MatchExpressions = newMExps + } else { + newSelector.MatchExpressions = nil + } + + return newSelector +} + +// AddLabelToSelector returns a selector with the given key and value added to the given selector's MatchLabels. +func AddLabelToSelector(selector *unversioned.LabelSelector, labelKey string, labelValue string) *unversioned.LabelSelector { + if labelKey == "" { + // Don't need to add a label. + return selector + } + if selector.MatchLabels == nil { + selector.MatchLabels = make(map[string]string) + } + selector.MatchLabels[labelKey] = labelValue + return selector +} + +// SelectorHasLabel checks if the given selector contains the given label key in its MatchLabels +func SelectorHasLabel(selector *unversioned.LabelSelector, labelKey string) bool { + return len(selector.MatchLabels[labelKey]) > 0 +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/net/http.go b/vendor/k8s.io/client-go/1.4/pkg/util/net/http.go new file mode 100644 index 00000000..15df0774 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/net/http.go @@ -0,0 +1,261 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "crypto/tls" + "fmt" + "io" + "net" + "net/http" + "net/url" + "os" + "strconv" + "strings" + + "github.com/golang/glog" + "golang.org/x/net/http2" +) + +// IsProbableEOF returns true if the given error resembles a connection termination +// scenario that would justify assuming that the watch is empty. +// These errors are what the Go http stack returns back to us which are general +// connection closure errors (strongly correlated) and callers that need to +// differentiate probable errors in connection behavior between normal "this is +// disconnected" should use the method. +func IsProbableEOF(err error) bool { + if uerr, ok := err.(*url.Error); ok { + err = uerr.Err + } + switch { + case err == io.EOF: + return true + case err.Error() == "http: can't write HTTP request on broken connection": + return true + case strings.Contains(err.Error(), "connection reset by peer"): + return true + case strings.Contains(strings.ToLower(err.Error()), "use of closed network connection"): + return true + } + return false +} + +var defaultTransport = http.DefaultTransport.(*http.Transport) + +// SetOldTransportDefaults applies the defaults from http.DefaultTransport +// for the Proxy, Dial, and TLSHandshakeTimeout fields if unset +func SetOldTransportDefaults(t *http.Transport) *http.Transport { + if t.Proxy == nil || isDefault(t.Proxy) { + // http.ProxyFromEnvironment doesn't respect CIDRs and that makes it impossible to exclude things like pod and service IPs from proxy settings + // ProxierWithNoProxyCIDR allows CIDR rules in NO_PROXY + t.Proxy = NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment) + } + if t.Dial == nil { + t.Dial = defaultTransport.Dial + } + if t.TLSHandshakeTimeout == 0 { + t.TLSHandshakeTimeout = defaultTransport.TLSHandshakeTimeout + } + return t +} + +// SetTransportDefaults applies the defaults from http.DefaultTransport +// for the Proxy, Dial, and TLSHandshakeTimeout fields if unset +func SetTransportDefaults(t *http.Transport) *http.Transport { + t = SetOldTransportDefaults(t) + // Allow HTTP2 clients but default off for now + if s := os.Getenv("ENABLE_HTTP2"); len(s) > 0 { + if err := http2.ConfigureTransport(t); err != nil { + glog.Warningf("Transport failed http2 configuration: %v", err) + } + } + return t +} + +type RoundTripperWrapper interface { + http.RoundTripper + WrappedRoundTripper() http.RoundTripper +} + +type DialFunc func(net, addr string) (net.Conn, error) + +func Dialer(transport http.RoundTripper) (DialFunc, error) { + if transport == nil { + return nil, nil + } + + switch transport := transport.(type) { + case *http.Transport: + return transport.Dial, nil + case RoundTripperWrapper: + return Dialer(transport.WrappedRoundTripper()) + default: + return nil, fmt.Errorf("unknown transport type: %v", transport) + } +} + +// CloneTLSConfig returns a tls.Config with all exported fields except SessionTicketsDisabled and SessionTicketKey copied. +// This makes it safe to call CloneTLSConfig on a config in active use by a server. +// TODO: replace with tls.Config#Clone when we move to go1.8 +func CloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} + } + return &tls.Config{ + Rand: cfg.Rand, + Time: cfg.Time, + Certificates: cfg.Certificates, + NameToCertificate: cfg.NameToCertificate, + GetCertificate: cfg.GetCertificate, + RootCAs: cfg.RootCAs, + NextProtos: cfg.NextProtos, + ServerName: cfg.ServerName, + ClientAuth: cfg.ClientAuth, + ClientCAs: cfg.ClientCAs, + InsecureSkipVerify: cfg.InsecureSkipVerify, + CipherSuites: cfg.CipherSuites, + PreferServerCipherSuites: cfg.PreferServerCipherSuites, + ClientSessionCache: cfg.ClientSessionCache, + MinVersion: cfg.MinVersion, + MaxVersion: cfg.MaxVersion, + CurvePreferences: cfg.CurvePreferences, + } +} + +func TLSClientConfig(transport http.RoundTripper) (*tls.Config, error) { + if transport == nil { + return nil, nil + } + + switch transport := transport.(type) { + case *http.Transport: + return transport.TLSClientConfig, nil + case RoundTripperWrapper: + return TLSClientConfig(transport.WrappedRoundTripper()) + default: + return nil, fmt.Errorf("unknown transport type: %v", transport) + } +} + +func FormatURL(scheme string, host string, port int, path string) *url.URL { + return &url.URL{ + Scheme: scheme, + Host: net.JoinHostPort(host, strconv.Itoa(port)), + Path: path, + } +} + +func GetHTTPClient(req *http.Request) string { + if userAgent, ok := req.Header["User-Agent"]; ok { + if len(userAgent) > 0 { + return userAgent[0] + } + } + return "unknown" +} + +// Extracts and returns the clients IP from the given request. +// Looks at X-Forwarded-For header, X-Real-Ip header and request.RemoteAddr in that order. +// Returns nil if none of them are set or is set to an invalid value. +func GetClientIP(req *http.Request) net.IP { + hdr := req.Header + // First check the X-Forwarded-For header for requests via proxy. + hdrForwardedFor := hdr.Get("X-Forwarded-For") + if hdrForwardedFor != "" { + // X-Forwarded-For can be a csv of IPs in case of multiple proxies. + // Use the first valid one. + parts := strings.Split(hdrForwardedFor, ",") + for _, part := range parts { + ip := net.ParseIP(strings.TrimSpace(part)) + if ip != nil { + return ip + } + } + } + + // Try the X-Real-Ip header. + hdrRealIp := hdr.Get("X-Real-Ip") + if hdrRealIp != "" { + ip := net.ParseIP(hdrRealIp) + if ip != nil { + return ip + } + } + + // Fallback to Remote Address in request, which will give the correct client IP when there is no proxy. + // Remote Address in Go's HTTP server is in the form host:port so we need to split that first. + host, _, err := net.SplitHostPort(req.RemoteAddr) + if err == nil { + return net.ParseIP(host) + } + + // Fallback if Remote Address was just IP. + return net.ParseIP(req.RemoteAddr) +} + +var defaultProxyFuncPointer = fmt.Sprintf("%p", http.ProxyFromEnvironment) + +// isDefault checks to see if the transportProxierFunc is pointing to the default one +func isDefault(transportProxier func(*http.Request) (*url.URL, error)) bool { + transportProxierPointer := fmt.Sprintf("%p", transportProxier) + return transportProxierPointer == defaultProxyFuncPointer +} + +// NewProxierWithNoProxyCIDR constructs a Proxier function that respects CIDRs in NO_PROXY and delegates if +// no matching CIDRs are found +func NewProxierWithNoProxyCIDR(delegate func(req *http.Request) (*url.URL, error)) func(req *http.Request) (*url.URL, error) { + // we wrap the default method, so we only need to perform our check if the NO_PROXY envvar has a CIDR in it + noProxyEnv := os.Getenv("NO_PROXY") + noProxyRules := strings.Split(noProxyEnv, ",") + + cidrs := []*net.IPNet{} + for _, noProxyRule := range noProxyRules { + _, cidr, _ := net.ParseCIDR(noProxyRule) + if cidr != nil { + cidrs = append(cidrs, cidr) + } + } + + if len(cidrs) == 0 { + return delegate + } + + return func(req *http.Request) (*url.URL, error) { + host := req.URL.Host + // for some urls, the Host is already the host, not the host:port + if net.ParseIP(host) == nil { + var err error + host, _, err = net.SplitHostPort(req.URL.Host) + if err != nil { + return delegate(req) + } + } + + ip := net.ParseIP(host) + if ip == nil { + return delegate(req) + } + + for _, cidr := range cidrs { + if cidr.Contains(ip) { + return nil, nil + } + } + + return delegate(req) + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/net/interface.go b/vendor/k8s.io/client-go/1.4/pkg/util/net/interface.go new file mode 100644 index 00000000..a1e53d2e --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/net/interface.go @@ -0,0 +1,278 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "bufio" + "encoding/hex" + "fmt" + "io" + "net" + "os" + + "strings" + + "github.com/golang/glog" +) + +type Route struct { + Interface string + Destination net.IP + Gateway net.IP + // TODO: add more fields here if needed +} + +func getRoutes(input io.Reader) ([]Route, error) { + routes := []Route{} + if input == nil { + return nil, fmt.Errorf("input is nil") + } + scanner := bufio.NewReader(input) + for { + line, err := scanner.ReadString('\n') + if err == io.EOF { + break + } + //ignore the headers in the route info + if strings.HasPrefix(line, "Iface") { + continue + } + fields := strings.Fields(line) + routes = append(routes, Route{}) + route := &routes[len(routes)-1] + route.Interface = fields[0] + ip, err := parseIP(fields[1]) + if err != nil { + return nil, err + } + route.Destination = ip + ip, err = parseIP(fields[2]) + if err != nil { + return nil, err + } + route.Gateway = ip + } + return routes, nil +} + +func parseIP(str string) (net.IP, error) { + if str == "" { + return nil, fmt.Errorf("input is nil") + } + bytes, err := hex.DecodeString(str) + if err != nil { + return nil, err + } + //TODO add ipv6 support + if len(bytes) != net.IPv4len { + return nil, fmt.Errorf("only IPv4 is supported") + } + bytes[0], bytes[1], bytes[2], bytes[3] = bytes[3], bytes[2], bytes[1], bytes[0] + return net.IP(bytes), nil +} + +func isInterfaceUp(intf *net.Interface) bool { + if intf == nil { + return false + } + if intf.Flags&net.FlagUp != 0 { + glog.V(4).Infof("Interface %v is up", intf.Name) + return true + } + return false +} + +//getFinalIP method receives all the IP addrs of a Interface +//and returns a nil if the address is Loopback, Ipv6, link-local or nil. +//It returns a valid IPv4 if an Ipv4 address is found in the array. +func getFinalIP(addrs []net.Addr) (net.IP, error) { + if len(addrs) > 0 { + for i := range addrs { + glog.V(4).Infof("Checking addr %s.", addrs[i].String()) + ip, _, err := net.ParseCIDR(addrs[i].String()) + if err != nil { + return nil, err + } + //Only IPv4 + //TODO : add IPv6 support + if ip.To4() != nil { + if !ip.IsLoopback() && !ip.IsLinkLocalMulticast() && !ip.IsLinkLocalUnicast() { + glog.V(4).Infof("IP found %v", ip) + return ip, nil + } else { + glog.V(4).Infof("Loopback/link-local found %v", ip) + } + } else { + glog.V(4).Infof("%v is not a valid IPv4 address", ip) + } + + } + } + return nil, nil +} + +func getIPFromInterface(intfName string, nw networkInterfacer) (net.IP, error) { + intf, err := nw.InterfaceByName(intfName) + if err != nil { + return nil, err + } + if isInterfaceUp(intf) { + addrs, err := nw.Addrs(intf) + if err != nil { + return nil, err + } + glog.V(4).Infof("Interface %q has %d addresses :%v.", intfName, len(addrs), addrs) + finalIP, err := getFinalIP(addrs) + if err != nil { + return nil, err + } + if finalIP != nil { + glog.V(4).Infof("valid IPv4 address for interface %q found as %v.", intfName, finalIP) + return finalIP, nil + } + } + + return nil, nil +} + +func flagsSet(flags net.Flags, test net.Flags) bool { + return flags&test != 0 +} + +func flagsClear(flags net.Flags, test net.Flags) bool { + return flags&test == 0 +} + +func chooseHostInterfaceNativeGo() (net.IP, error) { + intfs, err := net.Interfaces() + if err != nil { + return nil, err + } + i := 0 + var ip net.IP + for i = range intfs { + if flagsSet(intfs[i].Flags, net.FlagUp) && flagsClear(intfs[i].Flags, net.FlagLoopback|net.FlagPointToPoint) { + addrs, err := intfs[i].Addrs() + if err != nil { + return nil, err + } + if len(addrs) > 0 { + for _, addr := range addrs { + if addrIP, _, err := net.ParseCIDR(addr.String()); err == nil { + if addrIP.To4() != nil { + ip = addrIP.To4() + if !ip.IsLinkLocalMulticast() && !ip.IsLinkLocalUnicast() { + break + } + } + } + } + if ip != nil { + // This interface should suffice. + break + } + } + } + } + if ip == nil { + return nil, fmt.Errorf("no acceptable interface from host") + } + glog.V(4).Infof("Choosing interface %s (IP %v) as default", intfs[i].Name, ip) + return ip, nil +} + +//ChooseHostInterface is a method used fetch an IP for a daemon. +//It uses data from /proc/net/route file. +//For a node with no internet connection ,it returns error +//For a multi n/w interface node it returns the IP of the interface with gateway on it. +func ChooseHostInterface() (net.IP, error) { + inFile, err := os.Open("/proc/net/route") + if err != nil { + if os.IsNotExist(err) { + return chooseHostInterfaceNativeGo() + } + return nil, err + } + defer inFile.Close() + var nw networkInterfacer = networkInterface{} + return chooseHostInterfaceFromRoute(inFile, nw) +} + +type networkInterfacer interface { + InterfaceByName(intfName string) (*net.Interface, error) + Addrs(intf *net.Interface) ([]net.Addr, error) +} + +type networkInterface struct{} + +func (_ networkInterface) InterfaceByName(intfName string) (*net.Interface, error) { + intf, err := net.InterfaceByName(intfName) + if err != nil { + return nil, err + } + return intf, nil +} + +func (_ networkInterface) Addrs(intf *net.Interface) ([]net.Addr, error) { + addrs, err := intf.Addrs() + if err != nil { + return nil, err + } + return addrs, nil +} + +func chooseHostInterfaceFromRoute(inFile io.Reader, nw networkInterfacer) (net.IP, error) { + routes, err := getRoutes(inFile) + if err != nil { + return nil, err + } + zero := net.IP{0, 0, 0, 0} + var finalIP net.IP + for i := range routes { + //find interface with gateway + if routes[i].Destination.Equal(zero) { + glog.V(4).Infof("Default route transits interface %q", routes[i].Interface) + finalIP, err := getIPFromInterface(routes[i].Interface, nw) + if err != nil { + return nil, err + } + if finalIP != nil { + glog.V(4).Infof("Choosing IP %v ", finalIP) + return finalIP, nil + } + } + } + glog.V(4).Infof("No valid IP found") + if finalIP == nil { + return nil, fmt.Errorf("Unable to select an IP.") + } + return nil, nil +} + +// If bind-address is usable, return it directly +// If bind-address is not usable (unset, 0.0.0.0, or loopback), we will use the host's default +// interface. +func ChooseBindAddress(bindAddress net.IP) (net.IP, error) { + if bindAddress == nil || bindAddress.IsUnspecified() || bindAddress.IsLoopback() { + hostIP, err := ChooseHostInterface() + if err != nil { + return nil, err + } + bindAddress = hostIP + } + return bindAddress, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/net/port_range.go b/vendor/k8s.io/client-go/1.4/pkg/util/net/port_range.go new file mode 100644 index 00000000..6a50e618 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/net/port_range.go @@ -0,0 +1,113 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "fmt" + "strconv" + "strings" +) + +// PortRange represents a range of TCP/UDP ports. To represent a single port, +// set Size to 1. +type PortRange struct { + Base int + Size int +} + +// Contains tests whether a given port falls within the PortRange. +func (pr *PortRange) Contains(p int) bool { + return (p >= pr.Base) && ((p - pr.Base) < pr.Size) +} + +// String converts the PortRange to a string representation, which can be +// parsed by PortRange.Set or ParsePortRange. +func (pr PortRange) String() string { + if pr.Size == 0 { + return "" + } + return fmt.Sprintf("%d-%d", pr.Base, pr.Base+pr.Size-1) +} + +// Set parses a string of the form "min-max", inclusive at both ends, and +// sets the PortRange from it. This is part of the flag.Value and pflag.Value +// interfaces. +func (pr *PortRange) Set(value string) error { + value = strings.TrimSpace(value) + + // TODO: Accept "80" syntax + // TODO: Accept "80+8" syntax + + if value == "" { + pr.Base = 0 + pr.Size = 0 + return nil + } + + hyphenIndex := strings.Index(value, "-") + if hyphenIndex == -1 { + return fmt.Errorf("expected hyphen in port range") + } + + var err error + var low int + var high int + low, err = strconv.Atoi(value[:hyphenIndex]) + if err == nil { + high, err = strconv.Atoi(value[hyphenIndex+1:]) + } + if err != nil { + return fmt.Errorf("unable to parse port range: %s: %v", value, err) + } + + if low > 65535 || high > 65535 { + return fmt.Errorf("the port range cannot be greater than 65535: %s", value) + } + + if high < low { + return fmt.Errorf("end port cannot be less than start port: %s", value) + } + + pr.Base = low + pr.Size = 1 + high - low + return nil +} + +// Type returns a descriptive string about this type. This is part of the +// pflag.Value interface. +func (*PortRange) Type() string { + return "portRange" +} + +// ParsePortRange parses a string of the form "min-max", inclusive at both +// ends, and initializs a new PortRange from it. +func ParsePortRange(value string) (*PortRange, error) { + pr := &PortRange{} + err := pr.Set(value) + if err != nil { + return nil, err + } + return pr, nil +} + +func ParsePortRangeOrDie(value string) *PortRange { + pr, err := ParsePortRange(value) + if err != nil { + panic(fmt.Sprintf("couldn't parse port range %q: %v", value, err)) + } + return pr +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/net/port_split.go b/vendor/k8s.io/client-go/1.4/pkg/util/net/port_split.go new file mode 100644 index 00000000..4cd57e88 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/net/port_split.go @@ -0,0 +1,77 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "strings" + + "k8s.io/client-go/1.4/pkg/util/sets" +) + +var validSchemes = sets.NewString("http", "https", "") + +// SplitSchemeNamePort takes a string of the following forms: +// * "", returns "", "","", true +// * ":", returns "", "","",true +// * "::", returns "","","",true +// +// Name must be non-empty or valid will be returned false. +// Scheme must be "http" or "https" if specified +// Port is returned as a string, and it is not required to be numeric (could be +// used for a named port, for example). +func SplitSchemeNamePort(id string) (scheme, name, port string, valid bool) { + parts := strings.Split(id, ":") + switch len(parts) { + case 1: + name = parts[0] + case 2: + name = parts[0] + port = parts[1] + case 3: + scheme = parts[0] + name = parts[1] + port = parts[2] + default: + return "", "", "", false + } + + if len(name) > 0 && validSchemes.Has(scheme) { + return scheme, name, port, true + } else { + return "", "", "", false + } +} + +// JoinSchemeNamePort returns a string that specifies the scheme, name, and port: +// * "" +// * ":" +// * "::" +// None of the parameters may contain a ':' character +// Name is required +// Scheme must be "", "http", or "https" +func JoinSchemeNamePort(scheme, name, port string) string { + if len(scheme) > 0 { + // Must include three segments to specify scheme + return scheme + ":" + name + ":" + port + } + if len(port) > 0 { + // Must include two segments to specify port + return name + ":" + port + } + // Return name alone + return name +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/net/sets/doc.go b/vendor/k8s.io/client-go/1.4/pkg/util/net/sets/doc.go new file mode 100644 index 00000000..2f5fe497 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/net/sets/doc.go @@ -0,0 +1,28 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package contains hand-coded set implementations that should be similar +// to the autogenerated ones in pkg/util/sets. +// We can't simply use net.IPNet as a map-key in Go (because it contains a +// []byte). +// We could use the same workaround we use here (a string representation as the +// key) to autogenerate sets. If we do that, or decide on an alternate +// approach, we should replace the implementations in this package with the +// autogenerated versions. +// It is expected that callers will alias this import as "netsets" i.e. import +// netsets "k8s.io/client-go/1.4/pkg/util/net/sets" + +package sets diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/net/sets/ipnet.go b/vendor/k8s.io/client-go/1.4/pkg/util/net/sets/ipnet.go new file mode 100644 index 00000000..5b6fe933 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/net/sets/ipnet.go @@ -0,0 +1,119 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package sets + +import ( + "net" + "strings" +) + +type IPNet map[string]*net.IPNet + +func ParseIPNets(specs ...string) (IPNet, error) { + ipnetset := make(IPNet) + for _, spec := range specs { + spec = strings.TrimSpace(spec) + _, ipnet, err := net.ParseCIDR(spec) + if err != nil { + return nil, err + } + k := ipnet.String() // In case of normalization + ipnetset[k] = ipnet + } + return ipnetset, nil +} + +// Insert adds items to the set. +func (s IPNet) Insert(items ...*net.IPNet) { + for _, item := range items { + s[item.String()] = item + } +} + +// Delete removes all items from the set. +func (s IPNet) Delete(items ...*net.IPNet) { + for _, item := range items { + delete(s, item.String()) + } +} + +// Has returns true if and only if item is contained in the set. +func (s IPNet) Has(item *net.IPNet) bool { + _, contained := s[item.String()] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s IPNet) HasAll(items ...*net.IPNet) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s IPNet) Difference(s2 IPNet) IPNet { + result := make(IPNet) + for k, i := range s { + _, found := s2[k] + if found { + continue + } + result[k] = i + } + return result +} + +// StringSlice returns a []string with the String representation of each element in the set. +// Order is undefined. +func (s IPNet) StringSlice() []string { + a := make([]string, 0, len(s)) + for k := range s { + a = append(a, k) + } + return a +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 IPNet) IsSuperset(s2 IPNet) bool { + for k := range s2 { + _, found := s1[k] + if !found { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 IPNet) Equal(s2 IPNet) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +// Len returns the size of the set. +func (s IPNet) Len() int { + return len(s) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/net/util.go b/vendor/k8s.io/client-go/1.4/pkg/util/net/util.go new file mode 100644 index 00000000..1348f4de --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/net/util.go @@ -0,0 +1,36 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package net + +import ( + "net" + "reflect" +) + +// IPNetEqual checks if the two input IPNets are representing the same subnet. +// For example, +// 10.0.0.1/24 and 10.0.0.0/24 are the same subnet. +// 10.0.0.1/24 and 10.0.0.0/25 are not the same subnet. +func IPNetEqual(ipnet1, ipnet2 *net.IPNet) bool { + if ipnet1 == nil || ipnet2 == nil { + return false + } + if reflect.DeepEqual(ipnet1.Mask, ipnet2.Mask) && ipnet1.Contains(ipnet2.IP) && ipnet2.Contains(ipnet1.IP) { + return true + } + return false +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/parsers/parsers.go b/vendor/k8s.io/client-go/1.4/pkg/util/parsers/parsers.go new file mode 100644 index 00000000..4e70cc68 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/parsers/parsers.go @@ -0,0 +1,54 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package parsers + +import ( + "fmt" + + dockerref "github.com/docker/distribution/reference" +) + +const ( + DefaultImageTag = "latest" +) + +// ParseImageName parses a docker image string into three parts: repo, tag and digest. +// If both tag and digest are empty, a default image tag will be returned. +func ParseImageName(image string) (string, string, string, error) { + named, err := dockerref.ParseNamed(image) + if err != nil { + return "", "", "", fmt.Errorf("couldn't parse image name: %v", err) + } + + repoToPull := named.Name() + var tag, digest string + + tagged, ok := named.(dockerref.Tagged) + if ok { + tag = tagged.Tag() + } + + digested, ok := named.(dockerref.Digested) + if ok { + digest = digested.Digest().String() + } + // If no tag was specified, use the default "latest". + if len(tag) == 0 && len(digest) == 0 { + tag = DefaultImageTag + } + return repoToPull, tag, digest, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/rand/rand.go b/vendor/k8s.io/client-go/1.4/pkg/util/rand/rand.go new file mode 100644 index 00000000..134c1526 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/rand/rand.go @@ -0,0 +1,83 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package rand provides utilities related to randomization. +package rand + +import ( + "math/rand" + "sync" + "time" +) + +var letters = []rune("abcdefghijklmnopqrstuvwxyz0123456789") +var numLetters = len(letters) +var rng = struct { + sync.Mutex + rand *rand.Rand +}{ + rand: rand.New(rand.NewSource(time.Now().UTC().UnixNano())), +} + +// Intn generates an integer in range [0,max). +// By design this should panic if input is invalid, <= 0. +func Intn(max int) int { + rng.Lock() + defer rng.Unlock() + return rng.rand.Intn(max) +} + +// IntnRange generates an integer in range [min,max). +// By design this should panic if input is invalid, <= 0. +func IntnRange(min, max int) int { + rng.Lock() + defer rng.Unlock() + return rng.rand.Intn(max-min) + min +} + +// IntnRange generates an int64 integer in range [min,max). +// By design this should panic if input is invalid, <= 0. +func Int63nRange(min, max int64) int64 { + rng.Lock() + defer rng.Unlock() + return rng.rand.Int63n(max-min) + min +} + +// Seed seeds the rng with the provided seed. +func Seed(seed int64) { + rng.Lock() + defer rng.Unlock() + + rng.rand = rand.New(rand.NewSource(seed)) +} + +// Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [0,n) +// from the default Source. +func Perm(n int) []int { + rng.Lock() + defer rng.Unlock() + return rng.rand.Perm(n) +} + +// String generates a random alphanumeric string n characters long. This will +// panic if n is less than zero. +func String(length int) string { + b := make([]rune, length) + for i := range b { + b[i] = letters[Intn(numLetters)] + } + return string(b) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/runtime/runtime.go b/vendor/k8s.io/client-go/1.4/pkg/util/runtime/runtime.go new file mode 100644 index 00000000..976de49d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/runtime/runtime.go @@ -0,0 +1,128 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +import ( + "fmt" + "runtime" + + "github.com/golang/glog" +) + +var ( + // ReallyCrash controls the behavior of HandleCrash and now defaults + // true. It's still exposed so components can optionally set to false + // to restore prior behavior. + ReallyCrash = true +) + +// PanicHandlers is a list of functions which will be invoked when a panic happens. +var PanicHandlers = []func(interface{}){logPanic} + +// HandleCrash simply catches a crash and logs an error. Meant to be called via +// defer. Additional context-specific handlers can be provided, and will be +// called in case of panic. HandleCrash actually crashes, after calling the +// handlers and logging the panic message. +// +// TODO: remove this function. We are switching to a world where it's safe for +// apiserver to panic, since it will be restarted by kubelet. At the beginning +// of the Kubernetes project, nothing was going to restart apiserver and so +// catching panics was important. But it's actually much simpler for montoring +// software if we just exit when an unexpected panic happens. +func HandleCrash(additionalHandlers ...func(interface{})) { + if r := recover(); r != nil { + for _, fn := range PanicHandlers { + fn(r) + } + for _, fn := range additionalHandlers { + fn(r) + } + if ReallyCrash { + // Actually proceed to panic. + panic(r) + } + } +} + +// logPanic logs the caller tree when a panic occurs. +func logPanic(r interface{}) { + callers := getCallers(r) + glog.Errorf("Observed a panic: %#v (%v)\n%v", r, r, callers) +} + +func getCallers(r interface{}) string { + callers := "" + for i := 0; true; i++ { + _, file, line, ok := runtime.Caller(i) + if !ok { + break + } + callers = callers + fmt.Sprintf("%v:%v\n", file, line) + } + + return callers +} + +// ErrorHandlers is a list of functions which will be invoked when an unreturnable +// error occurs. +var ErrorHandlers = []func(error){logError} + +// HandlerError is a method to invoke when a non-user facing piece of code cannot +// return an error and needs to indicate it has been ignored. Invoking this method +// is preferable to logging the error - the default behavior is to log but the +// errors may be sent to a remote server for analysis. +func HandleError(err error) { + // this is sometimes called with a nil error. We probably shouldn't fail and should do nothing instead + if err == nil { + return + } + + for _, fn := range ErrorHandlers { + fn(err) + } +} + +// logError prints an error with the call stack of the location it was reported +func logError(err error) { + glog.ErrorDepth(2, err) +} + +// GetCaller returns the caller of the function that calls it. +func GetCaller() string { + var pc [1]uintptr + runtime.Callers(3, pc[:]) + f := runtime.FuncForPC(pc[0]) + if f == nil { + return fmt.Sprintf("Unable to find caller") + } + return f.Name() +} + +// RecoverFromPanic replaces the specified error with an error containing the +// original error, and the call tree when a panic occurs. This enables error +// handlers to handle errors and panics the same way. +func RecoverFromPanic(err *error) { + if r := recover(); r != nil { + callers := getCallers(r) + + *err = fmt.Errorf( + "recovered from panic %q. (err=%v) Call stack:\n%v", + r, + *err, + callers) + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/sets/byte.go b/vendor/k8s.io/client-go/1.4/pkg/util/sets/byte.go new file mode 100644 index 00000000..3d6d0dfe --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/sets/byte.go @@ -0,0 +1,203 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by set-gen. Do not edit it manually! + +package sets + +import ( + "reflect" + "sort" +) + +// sets.Byte is a set of bytes, implemented via map[byte]struct{} for minimal memory consumption. +type Byte map[byte]Empty + +// New creates a Byte from a list of values. +func NewByte(items ...byte) Byte { + ss := Byte{} + ss.Insert(items...) + return ss +} + +// ByteKeySet creates a Byte from a keys of a map[byte](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func ByteKeySet(theMap interface{}) Byte { + v := reflect.ValueOf(theMap) + ret := Byte{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(byte)) + } + return ret +} + +// Insert adds items to the set. +func (s Byte) Insert(items ...byte) { + for _, item := range items { + s[item] = Empty{} + } +} + +// Delete removes all items from the set. +func (s Byte) Delete(items ...byte) { + for _, item := range items { + delete(s, item) + } +} + +// Has returns true if and only if item is contained in the set. +func (s Byte) Has(item byte) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s Byte) HasAll(items ...byte) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s Byte) HasAny(items ...byte) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s Byte) Difference(s2 Byte) Byte { + result := NewByte() + for key := range s { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 Byte) Union(s2 Byte) Byte { + result := NewByte() + for key := range s1 { + result.Insert(key) + } + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 Byte) Intersection(s2 Byte) Byte { + var walk, other Byte + result := NewByte() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 Byte) IsSuperset(s2 Byte) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 Byte) Equal(s2 Byte) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfByte []byte + +func (s sortableSliceOfByte) Len() int { return len(s) } +func (s sortableSliceOfByte) Less(i, j int) bool { return lessByte(s[i], s[j]) } +func (s sortableSliceOfByte) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted byte slice. +func (s Byte) List() []byte { + res := make(sortableSliceOfByte, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []byte(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s Byte) UnsortedList() []byte { + res := make([]byte, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s Byte) PopAny() (byte, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue byte + return zeroValue, false +} + +// Len returns the size of the set. +func (s Byte) Len() int { + return len(s) +} + +func lessByte(lhs, rhs byte) bool { + return lhs < rhs +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/sets/doc.go b/vendor/k8s.io/client-go/1.4/pkg/util/sets/doc.go new file mode 100644 index 00000000..c5e54162 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/sets/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by set-gen. Do not edit it manually! + +// Package sets has auto-generated set types. +package sets diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/sets/empty.go b/vendor/k8s.io/client-go/1.4/pkg/util/sets/empty.go new file mode 100644 index 00000000..5654edd7 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/sets/empty.go @@ -0,0 +1,23 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by set-gen. Do not edit it manually! + +package sets + +// Empty is public since it is used by some internal API objects for conversions between external +// string arrays and internal sets, and conversion logic requires public types today. +type Empty struct{} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/sets/int.go b/vendor/k8s.io/client-go/1.4/pkg/util/sets/int.go new file mode 100644 index 00000000..6d32f84c --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/sets/int.go @@ -0,0 +1,203 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by set-gen. Do not edit it manually! + +package sets + +import ( + "reflect" + "sort" +) + +// sets.Int is a set of ints, implemented via map[int]struct{} for minimal memory consumption. +type Int map[int]Empty + +// New creates a Int from a list of values. +func NewInt(items ...int) Int { + ss := Int{} + ss.Insert(items...) + return ss +} + +// IntKeySet creates a Int from a keys of a map[int](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func IntKeySet(theMap interface{}) Int { + v := reflect.ValueOf(theMap) + ret := Int{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(int)) + } + return ret +} + +// Insert adds items to the set. +func (s Int) Insert(items ...int) { + for _, item := range items { + s[item] = Empty{} + } +} + +// Delete removes all items from the set. +func (s Int) Delete(items ...int) { + for _, item := range items { + delete(s, item) + } +} + +// Has returns true if and only if item is contained in the set. +func (s Int) Has(item int) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s Int) HasAll(items ...int) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s Int) HasAny(items ...int) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s Int) Difference(s2 Int) Int { + result := NewInt() + for key := range s { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 Int) Union(s2 Int) Int { + result := NewInt() + for key := range s1 { + result.Insert(key) + } + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 Int) Intersection(s2 Int) Int { + var walk, other Int + result := NewInt() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 Int) IsSuperset(s2 Int) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 Int) Equal(s2 Int) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfInt []int + +func (s sortableSliceOfInt) Len() int { return len(s) } +func (s sortableSliceOfInt) Less(i, j int) bool { return lessInt(s[i], s[j]) } +func (s sortableSliceOfInt) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted int slice. +func (s Int) List() []int { + res := make(sortableSliceOfInt, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []int(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s Int) UnsortedList() []int { + res := make([]int, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s Int) PopAny() (int, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue int + return zeroValue, false +} + +// Len returns the size of the set. +func (s Int) Len() int { + return len(s) +} + +func lessInt(lhs, rhs int) bool { + return lhs < rhs +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/sets/int64.go b/vendor/k8s.io/client-go/1.4/pkg/util/sets/int64.go new file mode 100644 index 00000000..1de18319 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/sets/int64.go @@ -0,0 +1,203 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by set-gen. Do not edit it manually! + +package sets + +import ( + "reflect" + "sort" +) + +// sets.Int64 is a set of int64s, implemented via map[int64]struct{} for minimal memory consumption. +type Int64 map[int64]Empty + +// New creates a Int64 from a list of values. +func NewInt64(items ...int64) Int64 { + ss := Int64{} + ss.Insert(items...) + return ss +} + +// Int64KeySet creates a Int64 from a keys of a map[int64](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func Int64KeySet(theMap interface{}) Int64 { + v := reflect.ValueOf(theMap) + ret := Int64{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(int64)) + } + return ret +} + +// Insert adds items to the set. +func (s Int64) Insert(items ...int64) { + for _, item := range items { + s[item] = Empty{} + } +} + +// Delete removes all items from the set. +func (s Int64) Delete(items ...int64) { + for _, item := range items { + delete(s, item) + } +} + +// Has returns true if and only if item is contained in the set. +func (s Int64) Has(item int64) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s Int64) HasAll(items ...int64) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s Int64) HasAny(items ...int64) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s Int64) Difference(s2 Int64) Int64 { + result := NewInt64() + for key := range s { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 Int64) Union(s2 Int64) Int64 { + result := NewInt64() + for key := range s1 { + result.Insert(key) + } + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 Int64) Intersection(s2 Int64) Int64 { + var walk, other Int64 + result := NewInt64() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 Int64) IsSuperset(s2 Int64) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 Int64) Equal(s2 Int64) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfInt64 []int64 + +func (s sortableSliceOfInt64) Len() int { return len(s) } +func (s sortableSliceOfInt64) Less(i, j int) bool { return lessInt64(s[i], s[j]) } +func (s sortableSliceOfInt64) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted int64 slice. +func (s Int64) List() []int64 { + res := make(sortableSliceOfInt64, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []int64(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s Int64) UnsortedList() []int64 { + res := make([]int64, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s Int64) PopAny() (int64, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue int64 + return zeroValue, false +} + +// Len returns the size of the set. +func (s Int64) Len() int { + return len(s) +} + +func lessInt64(lhs, rhs int64) bool { + return lhs < rhs +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/sets/string.go b/vendor/k8s.io/client-go/1.4/pkg/util/sets/string.go new file mode 100644 index 00000000..da66eaf8 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/sets/string.go @@ -0,0 +1,203 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by set-gen. Do not edit it manually! + +package sets + +import ( + "reflect" + "sort" +) + +// sets.String is a set of strings, implemented via map[string]struct{} for minimal memory consumption. +type String map[string]Empty + +// New creates a String from a list of values. +func NewString(items ...string) String { + ss := String{} + ss.Insert(items...) + return ss +} + +// StringKeySet creates a String from a keys of a map[string](? extends interface{}). +// If the value passed in is not actually a map, this will panic. +func StringKeySet(theMap interface{}) String { + v := reflect.ValueOf(theMap) + ret := String{} + + for _, keyValue := range v.MapKeys() { + ret.Insert(keyValue.Interface().(string)) + } + return ret +} + +// Insert adds items to the set. +func (s String) Insert(items ...string) { + for _, item := range items { + s[item] = Empty{} + } +} + +// Delete removes all items from the set. +func (s String) Delete(items ...string) { + for _, item := range items { + delete(s, item) + } +} + +// Has returns true if and only if item is contained in the set. +func (s String) Has(item string) bool { + _, contained := s[item] + return contained +} + +// HasAll returns true if and only if all items are contained in the set. +func (s String) HasAll(items ...string) bool { + for _, item := range items { + if !s.Has(item) { + return false + } + } + return true +} + +// HasAny returns true if any items are contained in the set. +func (s String) HasAny(items ...string) bool { + for _, item := range items { + if s.Has(item) { + return true + } + } + return false +} + +// Difference returns a set of objects that are not in s2 +// For example: +// s1 = {a1, a2, a3} +// s2 = {a1, a2, a4, a5} +// s1.Difference(s2) = {a3} +// s2.Difference(s1) = {a4, a5} +func (s String) Difference(s2 String) String { + result := NewString() + for key := range s { + if !s2.Has(key) { + result.Insert(key) + } + } + return result +} + +// Union returns a new set which includes items in either s1 or s2. +// For example: +// s1 = {a1, a2} +// s2 = {a3, a4} +// s1.Union(s2) = {a1, a2, a3, a4} +// s2.Union(s1) = {a1, a2, a3, a4} +func (s1 String) Union(s2 String) String { + result := NewString() + for key := range s1 { + result.Insert(key) + } + for key := range s2 { + result.Insert(key) + } + return result +} + +// Intersection returns a new set which includes the item in BOTH s1 and s2 +// For example: +// s1 = {a1, a2} +// s2 = {a2, a3} +// s1.Intersection(s2) = {a2} +func (s1 String) Intersection(s2 String) String { + var walk, other String + result := NewString() + if s1.Len() < s2.Len() { + walk = s1 + other = s2 + } else { + walk = s2 + other = s1 + } + for key := range walk { + if other.Has(key) { + result.Insert(key) + } + } + return result +} + +// IsSuperset returns true if and only if s1 is a superset of s2. +func (s1 String) IsSuperset(s2 String) bool { + for item := range s2 { + if !s1.Has(item) { + return false + } + } + return true +} + +// Equal returns true if and only if s1 is equal (as a set) to s2. +// Two sets are equal if their membership is identical. +// (In practice, this means same elements, order doesn't matter) +func (s1 String) Equal(s2 String) bool { + return len(s1) == len(s2) && s1.IsSuperset(s2) +} + +type sortableSliceOfString []string + +func (s sortableSliceOfString) Len() int { return len(s) } +func (s sortableSliceOfString) Less(i, j int) bool { return lessString(s[i], s[j]) } +func (s sortableSliceOfString) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// List returns the contents as a sorted string slice. +func (s String) List() []string { + res := make(sortableSliceOfString, 0, len(s)) + for key := range s { + res = append(res, key) + } + sort.Sort(res) + return []string(res) +} + +// UnsortedList returns the slice with contents in random order. +func (s String) UnsortedList() []string { + res := make([]string, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + +// Returns a single element from the set. +func (s String) PopAny() (string, bool) { + for key := range s { + s.Delete(key) + return key, true + } + var zeroValue string + return zeroValue, false +} + +// Len returns the size of the set. +func (s String) Len() int { + return len(s) +} + +func lessString(lhs, rhs string) bool { + return lhs < rhs +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/string_flag.go b/vendor/k8s.io/client-go/1.4/pkg/util/string_flag.go new file mode 100644 index 00000000..9d6a00a1 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/string_flag.go @@ -0,0 +1,56 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +// StringFlag is a string flag compatible with flags and pflags that keeps track of whether it had a value supplied or not. +type StringFlag struct { + // If Set has been invoked this value is true + provided bool + // The exact value provided on the flag + value string +} + +func NewStringFlag(defaultVal string) StringFlag { + return StringFlag{value: defaultVal} +} + +func (f *StringFlag) Default(value string) { + f.value = value +} + +func (f StringFlag) String() string { + return f.value +} + +func (f StringFlag) Value() string { + return f.value +} + +func (f *StringFlag) Set(value string) error { + f.value = value + f.provided = true + + return nil +} + +func (f StringFlag) Provided() bool { + return f.provided +} + +func (f *StringFlag) Type() string { + return "string" +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/template.go b/vendor/k8s.io/client-go/1.4/pkg/util/template.go new file mode 100644 index 00000000..d09d7dc8 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/template.go @@ -0,0 +1,48 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "bytes" + "go/doc" + "io" + "strings" + "text/template" +) + +func wrap(indent string, s string) string { + var buf bytes.Buffer + doc.ToText(&buf, s, indent, indent+" ", 80-len(indent)) + return buf.String() +} + +// ExecuteTemplate executes templateText with data and output written to w. +func ExecuteTemplate(w io.Writer, templateText string, data interface{}) error { + t := template.New("top") + t.Funcs(template.FuncMap{ + "trim": strings.TrimSpace, + "wrap": wrap, + }) + template.Must(t.Parse(templateText)) + return t.Execute(w, data) +} + +func ExecuteTemplateToString(templateText string, data interface{}) (string, error) { + b := bytes.Buffer{} + err := ExecuteTemplate(&b, templateText, data) + return b.String(), err +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/trace.go b/vendor/k8s.io/client-go/1.4/pkg/util/trace.go new file mode 100644 index 00000000..fe93db8d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/trace.go @@ -0,0 +1,72 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "bytes" + "fmt" + "time" + + "github.com/golang/glog" +) + +type traceStep struct { + stepTime time.Time + msg string +} + +type Trace struct { + name string + startTime time.Time + steps []traceStep +} + +func NewTrace(name string) *Trace { + return &Trace{name, time.Now(), nil} +} + +func (t *Trace) Step(msg string) { + if t.steps == nil { + // traces almost always have less than 6 steps, do this to avoid more than a single allocation + t.steps = make([]traceStep, 0, 6) + } + t.steps = append(t.steps, traceStep{time.Now(), msg}) +} + +func (t *Trace) Log() { + endTime := time.Now() + var buffer bytes.Buffer + + buffer.WriteString(fmt.Sprintf("Trace %q (started %v):\n", t.name, t.startTime)) + lastStepTime := t.startTime + for _, step := range t.steps { + buffer.WriteString(fmt.Sprintf("[%v] [%v] %v\n", step.stepTime.Sub(t.startTime), step.stepTime.Sub(lastStepTime), step.msg)) + lastStepTime = step.stepTime + } + buffer.WriteString(fmt.Sprintf("[%v] [%v] END\n", endTime.Sub(t.startTime), endTime.Sub(lastStepTime))) + glog.Info(buffer.String()) +} + +func (t *Trace) LogIfLong(threshold time.Duration) { + if time.Since(t.startTime) >= threshold { + t.Log() + } +} + +func (t *Trace) TotalTime() time.Duration { + return time.Since(t.startTime) +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/deep_copy.go b/vendor/k8s.io/client-go/1.4/pkg/util/umask.go similarity index 61% rename from vendor/k8s.io/kubernetes/pkg/api/resource/deep_copy.go rename to vendor/k8s.io/client-go/1.4/pkg/util/umask.go index 4efc0406..35ccce50 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/deep_copy.go +++ b/vendor/k8s.io/client-go/1.4/pkg/util/umask.go @@ -1,5 +1,7 @@ +// +build !windows + /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,19 +16,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -package resource +package util import ( - inf "gopkg.in/inf.v0" - - conversion "k8s.io/kubernetes/pkg/conversion" + "syscall" ) -func DeepCopy_resource_Quantity(in Quantity, out *Quantity, c *conversion.Cloner) error { - *out = in - if in.d.Dec != nil { - tmp := &inf.Dec{} - out.d.Dec = tmp.Set(in.d.Dec) - } - return nil +func Umask(mask int) (old int, err error) { + return syscall.Umask(mask), nil } diff --git a/vendor/k8s.io/kubernetes/pkg/util/resource_container_unsupported.go b/vendor/k8s.io/client-go/1.4/pkg/util/umask_windows.go similarity index 63% rename from vendor/k8s.io/kubernetes/pkg/util/resource_container_unsupported.go rename to vendor/k8s.io/client-go/1.4/pkg/util/umask_windows.go index a8ee5192..8c1b2cbc 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/resource_container_unsupported.go +++ b/vendor/k8s.io/client-go/1.4/pkg/util/umask_windows.go @@ -1,7 +1,7 @@ -// +build !linux +// +build windows /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,10 +22,6 @@ import ( "errors" ) -func RunInResourceContainer(containerName string) error { - return errors.New("resource-only containers unsupported in this platform") -} - -func ApplyRLimitForSelf(maxOpenFiles uint64) error { - return errors.New("SetRLimit unsupported in this platform") +func Umask(mask int) (old int, err error) { + return 0, errors.New("platform and architecture is not supported") } diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/util.go b/vendor/k8s.io/client-go/1.4/pkg/util/util.go new file mode 100644 index 00000000..7a941495 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/util.go @@ -0,0 +1,147 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "fmt" + "os" + "reflect" + "regexp" +) + +// Takes a list of strings and compiles them into a list of regular expressions +func CompileRegexps(regexpStrings []string) ([]*regexp.Regexp, error) { + regexps := []*regexp.Regexp{} + for _, regexpStr := range regexpStrings { + r, err := regexp.Compile(regexpStr) + if err != nil { + return []*regexp.Regexp{}, err + } + regexps = append(regexps, r) + } + return regexps, nil +} + +// Detects if using systemd as the init system +// Please note that simply reading /proc/1/cmdline can be misleading because +// some installation of various init programs can automatically make /sbin/init +// a symlink or even a renamed version of their main program. +// TODO(dchen1107): realiably detects the init system using on the system: +// systemd, upstart, initd, etc. +func UsingSystemdInitSystem() bool { + if _, err := os.Stat("/run/systemd/system"); err == nil { + return true + } + + return false +} + +// Tests whether all pointer fields in a struct are nil. This is useful when, +// for example, an API struct is handled by plugins which need to distinguish +// "no plugin accepted this spec" from "this spec is empty". +// +// This function is only valid for structs and pointers to structs. Any other +// type will cause a panic. Passing a typed nil pointer will return true. +func AllPtrFieldsNil(obj interface{}) bool { + v := reflect.ValueOf(obj) + if !v.IsValid() { + panic(fmt.Sprintf("reflect.ValueOf() produced a non-valid Value for %#v", obj)) + } + if v.Kind() == reflect.Ptr { + if v.IsNil() { + return true + } + v = v.Elem() + } + for i := 0; i < v.NumField(); i++ { + if v.Field(i).Kind() == reflect.Ptr && !v.Field(i).IsNil() { + return false + } + } + return true +} + +func FileExists(filename string) (bool, error) { + if _, err := os.Stat(filename); os.IsNotExist(err) { + return false, nil + } else if err != nil { + return false, err + } + return true, nil +} + +// borrowed from ioutil.ReadDir +// ReadDir reads the directory named by dirname and returns +// a list of directory entries, minus those with lstat errors +func ReadDirNoExit(dirname string) ([]os.FileInfo, []error, error) { + if dirname == "" { + dirname = "." + } + + f, err := os.Open(dirname) + if err != nil { + return nil, nil, err + } + defer f.Close() + + names, err := f.Readdirnames(-1) + list := make([]os.FileInfo, 0, len(names)) + errs := make([]error, 0, len(names)) + for _, filename := range names { + fip, lerr := os.Lstat(dirname + "/" + filename) + if os.IsNotExist(lerr) { + // File disappeared between readdir + stat. + // Just treat it as if it didn't exist. + continue + } + + list = append(list, fip) + errs = append(errs, lerr) + } + + return list, errs, nil +} + +// IntPtr returns a pointer to an int +func IntPtr(i int) *int { + o := i + return &o +} + +// Int32Ptr returns a pointer to an int32 +func Int32Ptr(i int32) *int32 { + o := i + return &o +} + +// IntPtrDerefOr dereference the int ptr and returns it i not nil, +// else returns def. +func IntPtrDerefOr(ptr *int, def int) int { + if ptr != nil { + return *ptr + } + return def +} + +// Int32PtrDerefOr dereference the int32 ptr and returns it i not nil, +// else returns def. +func Int32PtrDerefOr(ptr *int32, def int32) int32 { + if ptr != nil { + return *ptr + } + return def +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/uuid/uuid.go b/vendor/k8s.io/client-go/1.4/pkg/util/uuid/uuid.go new file mode 100644 index 00000000..bcbf6ab5 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/uuid/uuid.go @@ -0,0 +1,42 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package uuid + +import ( + "sync" + + "github.com/pborman/uuid" + "k8s.io/client-go/1.4/pkg/types" +) + +var uuidLock sync.Mutex +var lastUUID uuid.UUID + +func NewUUID() types.UID { + uuidLock.Lock() + defer uuidLock.Unlock() + result := uuid.NewUUID() + // The UUID package is naive and can generate identical UUIDs if the + // time interval is quick enough. + // The UUID uses 100 ns increments so it's short enough to actively + // wait for a new value. + for uuid.Equal(lastUUID, result) == true { + result = uuid.NewUUID() + } + lastUUID = result + return types.UID(result.String()) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/validation/field/errors.go b/vendor/k8s.io/client-go/1.4/pkg/util/validation/field/errors.go new file mode 100644 index 00000000..76e441e0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/validation/field/errors.go @@ -0,0 +1,228 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package field + +import ( + "encoding/json" + "fmt" + "strings" + + utilerrors "k8s.io/client-go/1.4/pkg/util/errors" +) + +// Error is an implementation of the 'error' interface, which represents a +// field-level validation error. +type Error struct { + Type ErrorType + Field string + BadValue interface{} + Detail string +} + +var _ error = &Error{} + +// Error implements the error interface. +func (v *Error) Error() string { + return fmt.Sprintf("%s: %s", v.Field, v.ErrorBody()) +} + +// ErrorBody returns the error message without the field name. This is useful +// for building nice-looking higher-level error reporting. +func (v *Error) ErrorBody() string { + var s string + switch v.Type { + case ErrorTypeRequired, ErrorTypeForbidden, ErrorTypeTooLong, ErrorTypeInternal: + s = fmt.Sprintf("%s", v.Type) + default: + var bad string + badBytes, err := json.Marshal(v.BadValue) + if err != nil { + bad = err.Error() + } else { + bad = string(badBytes) + } + s = fmt.Sprintf("%s: %s", v.Type, bad) + } + if len(v.Detail) != 0 { + s += fmt.Sprintf(": %s", v.Detail) + } + return s +} + +// ErrorType is a machine readable value providing more detail about why +// a field is invalid. These values are expected to match 1-1 with +// CauseType in api/types.go. +type ErrorType string + +// TODO: These values are duplicated in api/types.go, but there's a circular dep. Fix it. +const ( + // ErrorTypeNotFound is used to report failure to find a requested value + // (e.g. looking up an ID). See NotFound(). + ErrorTypeNotFound ErrorType = "FieldValueNotFound" + // ErrorTypeRequired is used to report required values that are not + // provided (e.g. empty strings, null values, or empty arrays). See + // Required(). + ErrorTypeRequired ErrorType = "FieldValueRequired" + // ErrorTypeDuplicate is used to report collisions of values that must be + // unique (e.g. unique IDs). See Duplicate(). + ErrorTypeDuplicate ErrorType = "FieldValueDuplicate" + // ErrorTypeInvalid is used to report malformed values (e.g. failed regex + // match, too long, out of bounds). See Invalid(). + ErrorTypeInvalid ErrorType = "FieldValueInvalid" + // ErrorTypeNotSupported is used to report unknown values for enumerated + // fields (e.g. a list of valid values). See NotSupported(). + ErrorTypeNotSupported ErrorType = "FieldValueNotSupported" + // ErrorTypeForbidden is used to report valid (as per formatting rules) + // values which would be accepted under some conditions, but which are not + // permitted by the current conditions (such as security policy). See + // Forbidden(). + ErrorTypeForbidden ErrorType = "FieldValueForbidden" + // ErrorTypeTooLong is used to report that the given value is too long. + // This is similar to ErrorTypeInvalid, but the error will not include the + // too-long value. See TooLong(). + ErrorTypeTooLong ErrorType = "FieldValueTooLong" + // ErrorTypeInternal is used to report other errors that are not related + // to user input. See InternalError(). + ErrorTypeInternal ErrorType = "InternalError" +) + +// String converts a ErrorType into its corresponding canonical error message. +func (t ErrorType) String() string { + switch t { + case ErrorTypeNotFound: + return "Not found" + case ErrorTypeRequired: + return "Required value" + case ErrorTypeDuplicate: + return "Duplicate value" + case ErrorTypeInvalid: + return "Invalid value" + case ErrorTypeNotSupported: + return "Unsupported value" + case ErrorTypeForbidden: + return "Forbidden" + case ErrorTypeTooLong: + return "Too long" + case ErrorTypeInternal: + return "Internal error" + default: + panic(fmt.Sprintf("unrecognized validation error: %q", string(t))) + } +} + +// NotFound returns a *Error indicating "value not found". This is +// used to report failure to find a requested value (e.g. looking up an ID). +func NotFound(field *Path, value interface{}) *Error { + return &Error{ErrorTypeNotFound, field.String(), value, ""} +} + +// Required returns a *Error indicating "value required". This is used +// to report required values that are not provided (e.g. empty strings, null +// values, or empty arrays). +func Required(field *Path, detail string) *Error { + return &Error{ErrorTypeRequired, field.String(), "", detail} +} + +// Duplicate returns a *Error indicating "duplicate value". This is +// used to report collisions of values that must be unique (e.g. names or IDs). +func Duplicate(field *Path, value interface{}) *Error { + return &Error{ErrorTypeDuplicate, field.String(), value, ""} +} + +// Invalid returns a *Error indicating "invalid value". This is used +// to report malformed values (e.g. failed regex match, too long, out of bounds). +func Invalid(field *Path, value interface{}, detail string) *Error { + return &Error{ErrorTypeInvalid, field.String(), value, detail} +} + +// NotSupported returns a *Error indicating "unsupported value". +// This is used to report unknown values for enumerated fields (e.g. a list of +// valid values). +func NotSupported(field *Path, value interface{}, validValues []string) *Error { + detail := "" + if validValues != nil && len(validValues) > 0 { + detail = "supported values: " + strings.Join(validValues, ", ") + } + return &Error{ErrorTypeNotSupported, field.String(), value, detail} +} + +// Forbidden returns a *Error indicating "forbidden". This is used to +// report valid (as per formatting rules) values which would be accepted under +// some conditions, but which are not permitted by current conditions (e.g. +// security policy). +func Forbidden(field *Path, detail string) *Error { + return &Error{ErrorTypeForbidden, field.String(), "", detail} +} + +// TooLong returns a *Error indicating "too long". This is used to +// report that the given value is too long. This is similar to +// Invalid, but the returned error will not include the too-long +// value. +func TooLong(field *Path, value interface{}, maxLength int) *Error { + return &Error{ErrorTypeTooLong, field.String(), value, fmt.Sprintf("must have at most %d characters", maxLength)} +} + +// InternalError returns a *Error indicating "internal error". This is used +// to signal that an error was found that was not directly related to user +// input. The err argument must be non-nil. +func InternalError(field *Path, err error) *Error { + return &Error{ErrorTypeInternal, field.String(), nil, err.Error()} +} + +// ErrorList holds a set of Errors. It is plausible that we might one day have +// non-field errors in this same umbrella package, but for now we don't, so +// we can keep it simple and leave ErrorList here. +type ErrorList []*Error + +// NewErrorTypeMatcher returns an errors.Matcher that returns true +// if the provided error is a Error and has the provided ErrorType. +func NewErrorTypeMatcher(t ErrorType) utilerrors.Matcher { + return func(err error) bool { + if e, ok := err.(*Error); ok { + return e.Type == t + } + return false + } +} + +// ToAggregate converts the ErrorList into an errors.Aggregate. +func (list ErrorList) ToAggregate() utilerrors.Aggregate { + errs := make([]error, len(list)) + for i := range list { + errs[i] = list[i] + } + return utilerrors.NewAggregate(errs) +} + +func fromAggregate(agg utilerrors.Aggregate) ErrorList { + errs := agg.Errors() + list := make(ErrorList, len(errs)) + for i := range errs { + list[i] = errs[i].(*Error) + } + return list +} + +// Filter removes items from the ErrorList that match the provided fns. +func (list ErrorList) Filter(fns ...utilerrors.Matcher) ErrorList { + err := utilerrors.FilterOut(list.ToAggregate(), fns...) + if err == nil { + return nil + } + // FilterOut takes an Aggregate and returns an Aggregate + return fromAggregate(err.(utilerrors.Aggregate)) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/validation/field/path.go b/vendor/k8s.io/client-go/1.4/pkg/util/validation/field/path.go new file mode 100644 index 00000000..2efc8eec --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/validation/field/path.go @@ -0,0 +1,91 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package field + +import ( + "bytes" + "fmt" + "strconv" +) + +// Path represents the path from some root to a particular field. +type Path struct { + name string // the name of this field or "" if this is an index + index string // if name == "", this is a subscript (index or map key) of the previous element + parent *Path // nil if this is the root element +} + +// NewPath creates a root Path object. +func NewPath(name string, moreNames ...string) *Path { + r := &Path{name: name, parent: nil} + for _, anotherName := range moreNames { + r = &Path{name: anotherName, parent: r} + } + return r +} + +// Root returns the root element of this Path. +func (p *Path) Root() *Path { + for ; p.parent != nil; p = p.parent { + // Do nothing. + } + return p +} + +// Child creates a new Path that is a child of the method receiver. +func (p *Path) Child(name string, moreNames ...string) *Path { + r := NewPath(name, moreNames...) + r.Root().parent = p + return r +} + +// Index indicates that the previous Path is to be subscripted by an int. +// This sets the same underlying value as Key. +func (p *Path) Index(index int) *Path { + return &Path{index: strconv.Itoa(index), parent: p} +} + +// Key indicates that the previous Path is to be subscripted by a string. +// This sets the same underlying value as Index. +func (p *Path) Key(key string) *Path { + return &Path{index: key, parent: p} +} + +// String produces a string representation of the Path. +func (p *Path) String() string { + // make a slice to iterate + elems := []*Path{} + for ; p != nil; p = p.parent { + elems = append(elems, p) + } + + // iterate, but it has to be backwards + buf := bytes.NewBuffer(nil) + for i := range elems { + p := elems[len(elems)-1-i] + if p.parent != nil && len(p.name) > 0 { + // This is either the root or it is a subscript. + buf.WriteString(".") + } + if len(p.name) > 0 { + buf.WriteString(p.name) + } else { + fmt.Fprintf(buf, "[%s]", p.index) + } + } + return buf.String() +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/validation/validation.go b/vendor/k8s.io/client-go/1.4/pkg/util/validation/validation.go new file mode 100644 index 00000000..aac2357d --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/validation/validation.go @@ -0,0 +1,334 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package validation + +import ( + "fmt" + "math" + "net" + "regexp" + "strings" +) + +const qnameCharFmt string = "[A-Za-z0-9]" +const qnameExtCharFmt string = "[-A-Za-z0-9_.]" +const qualifiedNameFmt string = "(" + qnameCharFmt + qnameExtCharFmt + "*)?" + qnameCharFmt +const qualifiedNameMaxLength int = 63 + +var qualifiedNameRegexp = regexp.MustCompile("^" + qualifiedNameFmt + "$") + +// IsQualifiedName tests whether the value passed is what Kubernetes calls a +// "qualified name". This is a format used in various places throughout the +// system. If the value is not valid, a list of error strings is returned. +// Otherwise an empty list (or nil) is returned. +func IsQualifiedName(value string) []string { + var errs []string + parts := strings.Split(value, "/") + var name string + switch len(parts) { + case 1: + name = parts[0] + case 2: + var prefix string + prefix, name = parts[0], parts[1] + if len(prefix) == 0 { + errs = append(errs, "prefix part "+EmptyError()) + } else if msgs := IsDNS1123Subdomain(prefix); len(msgs) != 0 { + errs = append(errs, prefixEach(msgs, "prefix part ")...) + } + default: + return append(errs, RegexError(qualifiedNameFmt, "MyName", "my.name", "123-abc")+ + " with an optional DNS subdomain prefix and '/' (e.g. 'example.com/MyName'") + } + + if len(name) == 0 { + errs = append(errs, "name part "+EmptyError()) + } else if len(name) > qualifiedNameMaxLength { + errs = append(errs, "name part "+MaxLenError(qualifiedNameMaxLength)) + } + if !qualifiedNameRegexp.MatchString(name) { + errs = append(errs, "name part "+RegexError(qualifiedNameFmt, "MyName", "my.name", "123-abc")) + } + return errs +} + +const labelValueFmt string = "(" + qualifiedNameFmt + ")?" +const LabelValueMaxLength int = 63 + +var labelValueRegexp = regexp.MustCompile("^" + labelValueFmt + "$") + +// IsValidLabelValue tests whether the value passed is a valid label value. If +// the value is not valid, a list of error strings is returned. Otherwise an +// empty list (or nil) is returned. +func IsValidLabelValue(value string) []string { + var errs []string + if len(value) > LabelValueMaxLength { + errs = append(errs, MaxLenError(LabelValueMaxLength)) + } + if !labelValueRegexp.MatchString(value) { + errs = append(errs, RegexError(labelValueFmt, "MyValue", "my_value", "12345")) + } + return errs +} + +const dns1123LabelFmt string = "[a-z0-9]([-a-z0-9]*[a-z0-9])?" +const DNS1123LabelMaxLength int = 63 + +var dns1123LabelRegexp = regexp.MustCompile("^" + dns1123LabelFmt + "$") + +// IsDNS1123Label tests for a string that conforms to the definition of a label in +// DNS (RFC 1123). +func IsDNS1123Label(value string) []string { + var errs []string + if len(value) > DNS1123LabelMaxLength { + errs = append(errs, MaxLenError(DNS1123LabelMaxLength)) + } + if !dns1123LabelRegexp.MatchString(value) { + errs = append(errs, RegexError(dns1123LabelFmt, "my-name", "123-abc")) + } + return errs +} + +const dns1123SubdomainFmt string = dns1123LabelFmt + "(\\." + dns1123LabelFmt + ")*" +const DNS1123SubdomainMaxLength int = 253 + +var dns1123SubdomainRegexp = regexp.MustCompile("^" + dns1123SubdomainFmt + "$") + +// IsDNS1123Subdomain tests for a string that conforms to the definition of a +// subdomain in DNS (RFC 1123). +func IsDNS1123Subdomain(value string) []string { + var errs []string + if len(value) > DNS1123SubdomainMaxLength { + errs = append(errs, MaxLenError(DNS1123SubdomainMaxLength)) + } + if !dns1123SubdomainRegexp.MatchString(value) { + errs = append(errs, RegexError(dns1123SubdomainFmt, "example.com")) + } + return errs +} + +const dns1035LabelFmt string = "[a-z]([-a-z0-9]*[a-z0-9])?" +const DNS1035LabelMaxLength int = 63 + +var dns1035LabelRegexp = regexp.MustCompile("^" + dns1035LabelFmt + "$") + +// IsDNS1035Label tests for a string that conforms to the definition of a label in +// DNS (RFC 1035). +func IsDNS1035Label(value string) []string { + var errs []string + if len(value) > DNS1035LabelMaxLength { + errs = append(errs, MaxLenError(DNS1035LabelMaxLength)) + } + if !dns1035LabelRegexp.MatchString(value) { + errs = append(errs, RegexError(dns1035LabelFmt, "my-name", "abc-123")) + } + return errs +} + +// wildcard definition - RFC 1034 section 4.3.3. +// examples: +// - valid: *.bar.com, *.foo.bar.com +// - invalid: *.*.bar.com, *.foo.*.com, *bar.com, f*.bar.com, * +const wildcardDNF1123SubdomainFmt = "\\*\\." + dns1123SubdomainFmt + +// IsWildcardDNS1123Subdomain tests for a string that conforms to the definition of a +// wildcard subdomain in DNS (RFC 1034 section 4.3.3). +func IsWildcardDNS1123Subdomain(value string) []string { + wildcardDNS1123SubdomainRegexp := regexp.MustCompile("^\\*\\." + dns1123SubdomainFmt + "$") + + var errs []string + if len(value) > DNS1123SubdomainMaxLength { + errs = append(errs, MaxLenError(DNS1123SubdomainMaxLength)) + } + if !wildcardDNS1123SubdomainRegexp.MatchString(value) { + errs = append(errs, RegexError(wildcardDNF1123SubdomainFmt, "*.example.com")) + } + return errs +} + +const cIdentifierFmt string = "[A-Za-z_][A-Za-z0-9_]*" + +var cIdentifierRegexp = regexp.MustCompile("^" + cIdentifierFmt + "$") + +// IsCIdentifier tests for a string that conforms the definition of an identifier +// in C. This checks the format, but not the length. +func IsCIdentifier(value string) []string { + if !cIdentifierRegexp.MatchString(value) { + return []string{RegexError(cIdentifierFmt, "my_name", "MY_NAME", "MyName")} + } + return nil +} + +// IsValidPortNum tests that the argument is a valid, non-zero port number. +func IsValidPortNum(port int) []string { + if 1 <= port && port <= 65535 { + return nil + } + return []string{InclusiveRangeError(1, 65535)} +} + +// Now in libcontainer UID/GID limits is 0 ~ 1<<31 - 1 +// TODO: once we have a type for UID/GID we should make these that type. +const ( + minUserID = 0 + maxUserID = math.MaxInt32 + minGroupID = 0 + maxGroupID = math.MaxInt32 +) + +// IsValidGroupId tests that the argument is a valid Unix GID. +func IsValidGroupId(gid int64) []string { + if minGroupID <= gid && gid <= maxGroupID { + return nil + } + return []string{InclusiveRangeError(minGroupID, maxGroupID)} +} + +// IsValidUserId tests that the argument is a valid Unix UID. +func IsValidUserId(uid int64) []string { + if minUserID <= uid && uid <= maxUserID { + return nil + } + return []string{InclusiveRangeError(minUserID, maxUserID)} +} + +var portNameCharsetRegex = regexp.MustCompile("^[-a-z0-9]+$") +var portNameOneLetterRegexp = regexp.MustCompile("[a-z]") + +// IsValidPortName check that the argument is valid syntax. It must be +// non-empty and no more than 15 characters long. It may contain only [-a-z0-9] +// and must contain at least one letter [a-z]. It must not start or end with a +// hyphen, nor contain adjacent hyphens. +// +// Note: We only allow lower-case characters, even though RFC 6335 is case +// insensitive. +func IsValidPortName(port string) []string { + var errs []string + if len(port) > 15 { + errs = append(errs, MaxLenError(15)) + } + if !portNameCharsetRegex.MatchString(port) { + errs = append(errs, "must contain only alpha-numeric characters (a-z, 0-9), and hyphens (-)") + } + if !portNameOneLetterRegexp.MatchString(port) { + errs = append(errs, "must contain at least one letter (a-z)") + } + if strings.Contains(port, "--") { + errs = append(errs, "must not contain consecutive hyphens") + } + if len(port) > 0 && (port[0] == '-' || port[len(port)-1] == '-') { + errs = append(errs, "must not begin or end with a hyphen") + } + return errs +} + +// IsValidIP tests that the argument is a valid IP address. +func IsValidIP(value string) []string { + if net.ParseIP(value) == nil { + return []string{"must be a valid IP address, (e.g. 10.9.8.7)"} + } + return nil +} + +const percentFmt string = "[0-9]+%" + +var percentRegexp = regexp.MustCompile("^" + percentFmt + "$") + +func IsValidPercent(percent string) []string { + if !percentRegexp.MatchString(percent) { + return []string{RegexError(percentFmt, "1%", "93%")} + } + return nil +} + +const httpHeaderNameFmt string = "[-A-Za-z0-9]+" + +var httpHeaderNameRegexp = regexp.MustCompile("^" + httpHeaderNameFmt + "$") + +// IsHTTPHeaderName checks that a string conforms to the Go HTTP library's +// definition of a valid header field name (a stricter subset than RFC7230). +func IsHTTPHeaderName(value string) []string { + if !httpHeaderNameRegexp.MatchString(value) { + return []string{RegexError(httpHeaderNameFmt, "X-Header-Name")} + } + return nil +} + +const configMapKeyFmt = `[-._a-zA-Z0-9]+` + +var configMapKeyRegexp = regexp.MustCompile("^" + configMapKeyFmt + "$") + +// IsConfigMapKey tests for a string that is a valid key for a ConfigMap or Secret +func IsConfigMapKey(value string) []string { + var errs []string + if len(value) > DNS1123SubdomainMaxLength { + errs = append(errs, MaxLenError(DNS1123SubdomainMaxLength)) + } + if !configMapKeyRegexp.MatchString(value) { + errs = append(errs, RegexError(configMapKeyFmt, "key.name", "KEY_NAME", "key-name")) + } + if value == "." { + errs = append(errs, `must not be '.'`) + } + if value == ".." { + errs = append(errs, `must not be '..'`) + } else if strings.HasPrefix(value, "..") { + errs = append(errs, `must not start with '..'`) + } + return errs +} + +// MaxLenError returns a string explanation of a "string too long" validation +// failure. +func MaxLenError(length int) string { + return fmt.Sprintf("must be no more than %d characters", length) +} + +// RegexError returns a string explanation of a regex validation failure. +func RegexError(fmt string, examples ...string) string { + s := "must match the regex " + fmt + if len(examples) == 0 { + return s + } + s += " (e.g. " + for i := range examples { + if i > 0 { + s += " or " + } + s += "'" + examples[i] + "'" + } + return s + ")" +} + +// EmptyError returns a string explanation of a "must not be empty" validation +// failure. +func EmptyError() string { + return "must be non-empty" +} + +func prefixEach(msgs []string, prefix string) []string { + for i := range msgs { + msgs[i] = prefix + msgs[i] + } + return msgs +} + +// InclusiveRangeError returns a string explanation of a numeric "must be +// between" validation failure. +func InclusiveRangeError(lo, hi int) string { + return fmt.Sprintf(`must be between %d and %d, inclusive`, lo, hi) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/wait/doc.go b/vendor/k8s.io/client-go/1.4/pkg/util/wait/doc.go new file mode 100644 index 00000000..ff89dc17 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/wait/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package wait provides tools for polling or listening for changes +// to a condition. +package wait diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/wait/wait.go b/vendor/k8s.io/client-go/1.4/pkg/util/wait/wait.go new file mode 100644 index 00000000..517577c8 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/wait/wait.go @@ -0,0 +1,263 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package wait + +import ( + "errors" + "math/rand" + "time" +) + +// For any test of the style: +// ... +// <- time.After(timeout): +// t.Errorf("Timed out") +// The value for timeout should effectively be "forever." Obviously we don't want our tests to truly lock up forever, but 30s +// is long enough that it is effectively forever for the things that can slow down a run on a heavily contended machine +// (GC, seeks, etc), but not so long as to make a developer ctrl-c a test run if they do happen to break that test. +var ForeverTestTimeout = time.Second * 30 + +// NeverStop may be passed to Until to make it never stop. +var NeverStop <-chan struct{} = make(chan struct{}) + +// Forever is syntactic sugar on top of Until +func Forever(f func(), period time.Duration) { + Until(f, period, NeverStop) +} + +// Until loops until stop channel is closed, running f every period. +// Until is syntactic sugar on top of JitterUntil with zero jitter +// factor, with sliding = true (which means the timer for period +// starts after the f completes). +func Until(f func(), period time.Duration, stopCh <-chan struct{}) { + JitterUntil(f, period, 0.0, true, stopCh) +} + +// NonSlidingUntil loops until stop channel is closed, running f every +// period. NonSlidingUntil is syntactic sugar on top of JitterUntil +// with zero jitter factor, with sliding = false (meaning the timer for +// period starts at the same time as the function starts). +func NonSlidingUntil(f func(), period time.Duration, stopCh <-chan struct{}) { + JitterUntil(f, period, 0.0, false, stopCh) +} + +// JitterUntil loops until stop channel is closed, running f every period. +// If jitterFactor is positive, the period is jittered before every run of f. +// If jitterFactor is not positive, the period is unchanged. +// Catches any panics, and keeps going. f may not be invoked if +// stop channel is already closed. Pass NeverStop to Until if you +// don't want it stop. +func JitterUntil(f func(), period time.Duration, jitterFactor float64, sliding bool, stopCh <-chan struct{}) { + for { + + select { + case <-stopCh: + return + default: + } + + jitteredPeriod := period + if jitterFactor > 0.0 { + jitteredPeriod = Jitter(period, jitterFactor) + } + + var t *time.Timer + if !sliding { + t = time.NewTimer(jitteredPeriod) + } + + func() { + f() + }() + + if sliding { + t = time.NewTimer(jitteredPeriod) + } + + // NOTE: b/c there is no priority selection in golang + // it is possible for this to race, meaning we could + // trigger t.C and stopCh, and t.C select falls through. + // In order to mitigate we re-check stopCh at the beginning + // of every loop to prevent extra executions of f(). + select { + case <-stopCh: + return + case <-t.C: + } + } +} + +// Jitter returns a time.Duration between duration and duration + maxFactor * duration, +// to allow clients to avoid converging on periodic behavior. If maxFactor is 0.0, a +// suggested default value will be chosen. +func Jitter(duration time.Duration, maxFactor float64) time.Duration { + if maxFactor <= 0.0 { + maxFactor = 1.0 + } + wait := duration + time.Duration(rand.Float64()*maxFactor*float64(duration)) + return wait +} + +// ErrWaitTimeout is returned when the condition exited without success +var ErrWaitTimeout = errors.New("timed out waiting for the condition") + +// ConditionFunc returns true if the condition is satisfied, or an error +// if the loop should be aborted. +type ConditionFunc func() (done bool, err error) + +// Backoff is parameters applied to a Backoff function. +type Backoff struct { + Duration time.Duration + Factor float64 + Jitter float64 + Steps int +} + +// ExponentialBackoff repeats a condition check up to steps times, increasing the wait +// by multipling the previous duration by factor. If jitter is greater than zero, +// a random amount of each duration is added (between duration and duration*(1+jitter)). +// If the condition never returns true, ErrWaitTimeout is returned. All other errors +// terminate immediately. +func ExponentialBackoff(backoff Backoff, condition ConditionFunc) error { + duration := backoff.Duration + for i := 0; i < backoff.Steps; i++ { + if i != 0 { + adjusted := duration + if backoff.Jitter > 0.0 { + adjusted = Jitter(duration, backoff.Jitter) + } + time.Sleep(adjusted) + duration = time.Duration(float64(duration) * backoff.Factor) + } + if ok, err := condition(); err != nil || ok { + return err + } + } + return ErrWaitTimeout +} + +// Poll tries a condition func until it returns true, an error, or the timeout +// is reached. condition will always be invoked at least once but some intervals +// may be missed if the condition takes too long or the time window is too short. +// If you want to Poll something forever, see PollInfinite. +// Poll always waits the interval before the first check of the condition. +func Poll(interval, timeout time.Duration, condition ConditionFunc) error { + return pollInternal(poller(interval, timeout), condition) +} + +func pollInternal(wait WaitFunc, condition ConditionFunc) error { + done := make(chan struct{}) + defer close(done) + return WaitFor(wait, condition, done) +} + +// PollImmediate is identical to Poll, except that it performs the first check +// immediately, not waiting interval beforehand. +func PollImmediate(interval, timeout time.Duration, condition ConditionFunc) error { + return pollImmediateInternal(poller(interval, timeout), condition) +} + +func pollImmediateInternal(wait WaitFunc, condition ConditionFunc) error { + done, err := condition() + if err != nil { + return err + } + if done { + return nil + } + return pollInternal(wait, condition) +} + +// PollInfinite polls forever. +func PollInfinite(interval time.Duration, condition ConditionFunc) error { + done := make(chan struct{}) + defer close(done) + return WaitFor(poller(interval, 0), condition, done) +} + +// WaitFunc creates a channel that receives an item every time a test +// should be executed and is closed when the last test should be invoked. +type WaitFunc func(done <-chan struct{}) <-chan struct{} + +// WaitFor gets a channel from wait(), and then invokes fn once for every value +// placed on the channel and once more when the channel is closed. If fn +// returns an error the loop ends and that error is returned, and if fn returns +// true the loop ends and nil is returned. ErrWaitTimeout will be returned if +// the channel is closed without fn ever returning true. +func WaitFor(wait WaitFunc, fn ConditionFunc, done <-chan struct{}) error { + c := wait(done) + for { + _, open := <-c + ok, err := fn() + if err != nil { + return err + } + if ok { + return nil + } + if !open { + break + } + } + return ErrWaitTimeout +} + +// poller returns a WaitFunc that will send to the channel every +// interval until timeout has elapsed and then close the channel. +// Over very short intervals you may receive no ticks before +// the channel is closed. If timeout is 0, the channel +// will never be closed. +func poller(interval, timeout time.Duration) WaitFunc { + return WaitFunc(func(done <-chan struct{}) <-chan struct{} { + ch := make(chan struct{}) + + go func() { + defer close(ch) + + tick := time.NewTicker(interval) + defer tick.Stop() + + var after <-chan time.Time + if timeout != 0 { + // time.After is more convenient, but it + // potentially leaves timers around much longer + // than necessary if we exit early. + timer := time.NewTimer(timeout) + after = timer.C + defer timer.Stop() + } + + for { + select { + case <-tick.C: + // If the consumer isn't ready for this signal drop it and + // check the other channels. + select { + case ch <- struct{}{}: + default: + } + case <-after: + return + case <-done: + return + } + } + }() + + return ch + }) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/util/yaml/decoder.go b/vendor/k8s.io/client-go/1.4/pkg/util/yaml/decoder.go new file mode 100644 index 00000000..c65c2d6b --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/util/yaml/decoder.go @@ -0,0 +1,306 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package yaml + +import ( + "bufio" + "bytes" + "encoding/json" + "fmt" + "io" + "io/ioutil" + "strings" + "unicode" + + "github.com/ghodss/yaml" + "github.com/golang/glog" +) + +// ToJSON converts a single YAML document into a JSON document +// or returns an error. If the document appears to be JSON the +// YAML decoding path is not used (so that error messages are +// JSON specific). +func ToJSON(data []byte) ([]byte, error) { + if hasJSONPrefix(data) { + return data, nil + } + return yaml.YAMLToJSON(data) +} + +// YAMLToJSONDecoder decodes YAML documents from an io.Reader by +// separating individual documents. It first converts the YAML +// body to JSON, then unmarshals the JSON. +type YAMLToJSONDecoder struct { + reader Reader +} + +// NewYAMLToJSONDecoder decodes YAML documents from the provided +// stream in chunks by converting each document (as defined by +// the YAML spec) into its own chunk, converting it to JSON via +// yaml.YAMLToJSON, and then passing it to json.Decoder. +func NewYAMLToJSONDecoder(r io.Reader) *YAMLToJSONDecoder { + reader := bufio.NewReader(r) + return &YAMLToJSONDecoder{ + reader: NewYAMLReader(reader), + } +} + +// Decode reads a YAML document as JSON from the stream or returns +// an error. The decoding rules match json.Unmarshal, not +// yaml.Unmarshal. +func (d *YAMLToJSONDecoder) Decode(into interface{}) error { + bytes, err := d.reader.Read() + if err != nil && err != io.EOF { + return err + } + + if len(bytes) != 0 { + data, err := yaml.YAMLToJSON(bytes) + if err != nil { + return err + } + return json.Unmarshal(data, into) + } + return err +} + +// YAMLDecoder reads chunks of objects and returns ErrShortBuffer if +// the data is not sufficient. +type YAMLDecoder struct { + r io.ReadCloser + scanner *bufio.Scanner + remaining []byte +} + +// NewDocumentDecoder decodes YAML documents from the provided +// stream in chunks by converting each document (as defined by +// the YAML spec) into its own chunk. io.ErrShortBuffer will be +// returned if the entire buffer could not be read to assist +// the caller in framing the chunk. +func NewDocumentDecoder(r io.ReadCloser) io.ReadCloser { + scanner := bufio.NewScanner(r) + scanner.Split(splitYAMLDocument) + return &YAMLDecoder{ + r: r, + scanner: scanner, + } +} + +// Read reads the previous slice into the buffer, or attempts to read +// the next chunk. +// TODO: switch to readline approach. +func (d *YAMLDecoder) Read(data []byte) (n int, err error) { + left := len(d.remaining) + if left == 0 { + // return the next chunk from the stream + if !d.scanner.Scan() { + err := d.scanner.Err() + if err == nil { + err = io.EOF + } + return 0, err + } + out := d.scanner.Bytes() + d.remaining = out + left = len(out) + } + + // fits within data + if left <= len(data) { + copy(data, d.remaining) + d.remaining = nil + return len(d.remaining), nil + } + + // caller will need to reread + copy(data, d.remaining[:left]) + d.remaining = d.remaining[left:] + return len(data), io.ErrShortBuffer +} + +func (d *YAMLDecoder) Close() error { + return d.r.Close() +} + +const yamlSeparator = "\n---" +const separator = "---\n" + +// splitYAMLDocument is a bufio.SplitFunc for splitting YAML streams into individual documents. +func splitYAMLDocument(data []byte, atEOF bool) (advance int, token []byte, err error) { + if atEOF && len(data) == 0 { + return 0, nil, nil + } + sep := len([]byte(yamlSeparator)) + if i := bytes.Index(data, []byte(yamlSeparator)); i >= 0 { + // We have a potential document terminator + i += sep + after := data[i:] + if len(after) == 0 { + // we can't read any more characters + if atEOF { + return len(data), data[:len(data)-sep], nil + } + return 0, nil, nil + } + if j := bytes.IndexByte(after, '\n'); j >= 0 { + return i + j + 1, data[0 : i-sep], nil + } + return 0, nil, nil + } + // If we're at EOF, we have a final, non-terminated line. Return it. + if atEOF { + return len(data), data, nil + } + // Request more data. + return 0, nil, nil +} + +// decoder is a convenience interface for Decode. +type decoder interface { + Decode(into interface{}) error +} + +// YAMLOrJSONDecoder attempts to decode a stream of JSON documents or +// YAML documents by sniffing for a leading { character. +type YAMLOrJSONDecoder struct { + r io.Reader + bufferSize int + + decoder decoder +} + +// NewYAMLOrJSONDecoder returns a decoder that will process YAML documents +// or JSON documents from the given reader as a stream. bufferSize determines +// how far into the stream the decoder will look to figure out whether this +// is a JSON stream (has whitespace followed by an open brace). +func NewYAMLOrJSONDecoder(r io.Reader, bufferSize int) *YAMLOrJSONDecoder { + return &YAMLOrJSONDecoder{ + r: r, + bufferSize: bufferSize, + } +} + +// Decode unmarshals the next object from the underlying stream into the +// provide object, or returns an error. +func (d *YAMLOrJSONDecoder) Decode(into interface{}) error { + if d.decoder == nil { + buffer, isJSON := GuessJSONStream(d.r, d.bufferSize) + if isJSON { + glog.V(4).Infof("decoding stream as JSON") + d.decoder = json.NewDecoder(buffer) + } else { + glog.V(4).Infof("decoding stream as YAML") + d.decoder = NewYAMLToJSONDecoder(buffer) + } + } + err := d.decoder.Decode(into) + if jsonDecoder, ok := d.decoder.(*json.Decoder); ok { + if syntax, ok := err.(*json.SyntaxError); ok { + data, readErr := ioutil.ReadAll(jsonDecoder.Buffered()) + if readErr != nil { + glog.V(4).Infof("reading stream failed: %v", readErr) + } + js := string(data) + start := strings.LastIndex(js[:syntax.Offset], "\n") + 1 + line := strings.Count(js[:start], "\n") + return fmt.Errorf("json: line %d: %s", line, syntax.Error()) + } + } + return err +} + +type Reader interface { + Read() ([]byte, error) +} + +type YAMLReader struct { + reader Reader +} + +func NewYAMLReader(r *bufio.Reader) *YAMLReader { + return &YAMLReader{ + reader: &LineReader{reader: r}, + } +} + +// Read returns a full YAML document. +func (r *YAMLReader) Read() ([]byte, error) { + var buffer bytes.Buffer + for { + line, err := r.reader.Read() + if err != nil && err != io.EOF { + return nil, err + } + + if string(line) == separator || err == io.EOF { + if buffer.Len() != 0 { + return buffer.Bytes(), nil + } + if err == io.EOF { + return nil, err + } + } else { + buffer.Write(line) + } + } +} + +type LineReader struct { + reader *bufio.Reader +} + +// Read returns a single line (with '\n' ended) from the underlying reader. +// An error is returned iff there is an error with the underlying reader. +func (r *LineReader) Read() ([]byte, error) { + var ( + isPrefix bool = true + err error = nil + line []byte + buffer bytes.Buffer + ) + + for isPrefix && err == nil { + line, isPrefix, err = r.reader.ReadLine() + buffer.Write(line) + } + buffer.WriteByte('\n') + return buffer.Bytes(), err +} + +// GuessJSONStream scans the provided reader up to size, looking +// for an open brace indicating this is JSON. It will return the +// bufio.Reader it creates for the consumer. +func GuessJSONStream(r io.Reader, size int) (io.Reader, bool) { + buffer := bufio.NewReaderSize(r, size) + b, _ := buffer.Peek(size) + return buffer, hasJSONPrefix(b) +} + +var jsonPrefix = []byte("{") + +// hasJSONPrefix returns true if the provided buffer appears to start with +// a JSON open brace. +func hasJSONPrefix(buf []byte) bool { + return hasPrefix(buf, jsonPrefix) +} + +// Return true if the first non-whitespace bytes in buf is +// prefix. +func hasPrefix(buf []byte, prefix []byte) bool { + trim := bytes.TrimLeftFunc(buf, unicode.IsSpace) + return bytes.HasPrefix(trim, prefix) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/version/.gitattributes b/vendor/k8s.io/client-go/1.4/pkg/version/.gitattributes new file mode 100644 index 00000000..7e349eff --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/version/.gitattributes @@ -0,0 +1 @@ +base.go export-subst diff --git a/vendor/k8s.io/client-go/1.4/pkg/version/base.go b/vendor/k8s.io/client-go/1.4/pkg/version/base.go new file mode 100644 index 00000000..2609ba2f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/version/base.go @@ -0,0 +1,59 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package version + +// Base version information. +// +// This is the fallback data used when version information from git is not +// provided via go ldflags. It provides an approximation of the Kubernetes +// version for ad-hoc builds (e.g. `go build`) that cannot get the version +// information from git. +// +// If you are looking at these fields in the git tree, they look +// strange. They are modified on the fly by the build process. The +// in-tree values are dummy values used for "git archive", which also +// works for GitHub tar downloads. +// +// When releasing a new Kubernetes version, this file is updated by +// build/mark_new_version.sh to reflect the new version, and then a +// git annotated tag (using format vX.Y where X == Major version and Y +// == Minor version) is created to point to the commit that updates +// pkg/version/base.go +var ( + // TODO: Deprecate gitMajor and gitMinor, use only gitVersion + // instead. First step in deprecation, keep the fields but make + // them irrelevant. (Next we'll take it out, which may muck with + // scripts consuming the kubectl version output - but most of + // these should be looking at gitVersion already anyways.) + gitMajor string = "1" // major version, always numeric + gitMinor string = "4+" // minor version, numeric possibly followed by "+" + + // semantic version, derived by build scripts (see + // https://github.com/kubernetes/kubernetes/blob/master/docs/design/versioning.md + // for a detailed discussion of this field) + // + // TODO: This field is still called "gitVersion" for legacy + // reasons. For prerelease versions, the build metadata on the + // semantic version is a git hash, but the version itself is no + // longer the direct output of "git describe", but a slight + // translation to be semver compliant. + gitVersion string = "v1.4.1-beta.0+$Format:%h$" + gitCommit string = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD) + gitTreeState string = "not a git tree" // state of git tree, either "clean" or "dirty" + + buildDate string = "1970-01-01T00:00:00Z" // build date in ISO8601 format, output of $(date -u +'%Y-%m-%dT%H:%M:%SZ') +) diff --git a/vendor/k8s.io/client-go/1.4/pkg/version/doc.go b/vendor/k8s.io/client-go/1.4/pkg/version/doc.go new file mode 100644 index 00000000..ccedec76 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/version/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package version supplies version information collected at build time to +// kubernetes components. +package version diff --git a/vendor/k8s.io/client-go/1.4/pkg/version/semver.go b/vendor/k8s.io/client-go/1.4/pkg/version/semver.go new file mode 100644 index 00000000..1f4067e2 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/version/semver.go @@ -0,0 +1,50 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package version + +import ( + "strings" + "unicode" + + "github.com/blang/semver" + "github.com/golang/glog" +) + +func Parse(gitversion string) (semver.Version, error) { + // optionally trim leading spaces then one v + var seen bool + gitversion = strings.TrimLeftFunc(gitversion, func(ch rune) bool { + if seen { + return false + } + if ch == 'v' { + seen = true + return true + } + return unicode.IsSpace(ch) + }) + + return semver.Make(gitversion) +} + +func MustParse(gitversion string) semver.Version { + v, err := Parse(gitversion) + if err != nil { + glog.Fatalf("failed to parse semver from gitversion %q: %v", gitversion, err) + } + return v +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/version/version.go b/vendor/k8s.io/client-go/1.4/pkg/version/version.go new file mode 100644 index 00000000..0da3aadd --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/version/version.go @@ -0,0 +1,60 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package version + +import ( + "fmt" + "runtime" +) + +// Info contains versioning information. +// TODO: Add []string of api versions supported? It's still unclear +// how we'll want to distribute that information. +type Info struct { + Major string `json:"major"` + Minor string `json:"minor"` + GitVersion string `json:"gitVersion"` + GitCommit string `json:"gitCommit"` + GitTreeState string `json:"gitTreeState"` + BuildDate string `json:"buildDate"` + GoVersion string `json:"goVersion"` + Compiler string `json:"compiler"` + Platform string `json:"platform"` +} + +// Get returns the overall codebase version. It's for detecting +// what code a binary was built from. +func Get() Info { + // These variables typically come from -ldflags settings and in + // their absence fallback to the settings in pkg/version/base.go + return Info{ + Major: gitMajor, + Minor: gitMinor, + GitVersion: gitVersion, + GitCommit: gitCommit, + GitTreeState: gitTreeState, + BuildDate: buildDate, + GoVersion: runtime.Version(), + Compiler: runtime.Compiler, + Platform: fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), + } +} + +// String returns info as a human-friendly version string. +func (info Info) String() string { + return info.GitVersion +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/doc.go b/vendor/k8s.io/client-go/1.4/pkg/watch/doc.go new file mode 100644 index 00000000..5fde5e74 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package watch contains a generic watchable interface, and a fake for +// testing code that uses the watch interface. +package watch diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/filter.go b/vendor/k8s.io/client-go/1.4/pkg/watch/filter.go new file mode 100644 index 00000000..3ca27f22 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/filter.go @@ -0,0 +1,109 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package watch + +import ( + "sync" +) + +// FilterFunc should take an event, possibly modify it in some way, and return +// the modified event. If the event should be ignored, then return keep=false. +type FilterFunc func(in Event) (out Event, keep bool) + +// Filter passes all events through f before allowing them to pass on. +// Putting a filter on a watch, as an unavoidable side-effect due to the way +// go channels work, effectively causes the watch's event channel to have its +// queue length increased by one. +// +// WARNING: filter has a fatal flaw, in that it can't properly update the +// Type field (Add/Modified/Deleted) to reflect items beginning to pass the +// filter when they previously didn't. +// +func Filter(w Interface, f FilterFunc) Interface { + fw := &filteredWatch{ + incoming: w, + result: make(chan Event), + f: f, + } + go fw.loop() + return fw +} + +type filteredWatch struct { + incoming Interface + result chan Event + f FilterFunc +} + +// ResultChan returns a channel which will receive filtered events. +func (fw *filteredWatch) ResultChan() <-chan Event { + return fw.result +} + +// Stop stops the upstream watch, which will eventually stop this watch. +func (fw *filteredWatch) Stop() { + fw.incoming.Stop() +} + +// loop waits for new values, filters them, and resends them. +func (fw *filteredWatch) loop() { + defer close(fw.result) + for { + event, ok := <-fw.incoming.ResultChan() + if !ok { + break + } + filtered, keep := fw.f(event) + if keep { + fw.result <- filtered + } + } +} + +// Recorder records all events that are sent from the watch until it is closed. +type Recorder struct { + Interface + + lock sync.Mutex + events []Event +} + +var _ Interface = &Recorder{} + +// NewRecorder wraps an Interface and records any changes sent across it. +func NewRecorder(w Interface) *Recorder { + r := &Recorder{} + r.Interface = Filter(w, r.record) + return r +} + +// record is a FilterFunc and tracks each received event. +func (r *Recorder) record(in Event) (Event, bool) { + r.lock.Lock() + defer r.lock.Unlock() + r.events = append(r.events, in) + return in, true +} + +// Events returns a copy of the events sent across this recorder. +func (r *Recorder) Events() []Event { + r.lock.Lock() + defer r.lock.Unlock() + copied := make([]Event, len(r.events)) + copy(copied, r.events) + return copied +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/mux.go b/vendor/k8s.io/client-go/1.4/pkg/watch/mux.go new file mode 100644 index 00000000..1bee9982 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/mux.go @@ -0,0 +1,257 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package watch + +import ( + "sync" + + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// FullChannelBehavior controls how the Broadcaster reacts if a watcher's watch +// channel is full. +type FullChannelBehavior int + +const ( + WaitIfChannelFull FullChannelBehavior = iota + DropIfChannelFull +) + +// Buffer the incoming queue a little bit even though it should rarely ever accumulate +// anything, just in case a few events are received in such a short window that +// Broadcaster can't move them onto the watchers' queues fast enough. +const incomingQueueLength = 25 + +// Broadcaster distributes event notifications among any number of watchers. Every event +// is delivered to every watcher. +type Broadcaster struct { + // TODO: see if this lock is needed now that new watchers go through + // the incoming channel. + lock sync.Mutex + + watchers map[int64]*broadcasterWatcher + nextWatcher int64 + distributing sync.WaitGroup + + incoming chan Event + + // How large to make watcher's channel. + watchQueueLength int + // If one of the watch channels is full, don't wait for it to become empty. + // Instead just deliver it to the watchers that do have space in their + // channels and move on to the next event. + // It's more fair to do this on a per-watcher basis than to do it on the + // "incoming" channel, which would allow one slow watcher to prevent all + // other watchers from getting new events. + fullChannelBehavior FullChannelBehavior +} + +// NewBroadcaster creates a new Broadcaster. queueLength is the maximum number of events to queue per watcher. +// It is guaranteed that events will be distributed in the order in which they occur, +// but the order in which a single event is distributed among all of the watchers is unspecified. +func NewBroadcaster(queueLength int, fullChannelBehavior FullChannelBehavior) *Broadcaster { + m := &Broadcaster{ + watchers: map[int64]*broadcasterWatcher{}, + incoming: make(chan Event, incomingQueueLength), + watchQueueLength: queueLength, + fullChannelBehavior: fullChannelBehavior, + } + m.distributing.Add(1) + go m.loop() + return m +} + +const internalRunFunctionMarker = "internal-do-function" + +// a function type we can shoehorn into the queue. +type functionFakeRuntimeObject func() + +func (obj functionFakeRuntimeObject) GetObjectKind() unversioned.ObjectKind { + return unversioned.EmptyObjectKind +} + +// Execute f, blocking the incoming queue (and waiting for it to drain first). +// The purpose of this terrible hack is so that watchers added after an event +// won't ever see that event, and will always see any event after they are +// added. +func (b *Broadcaster) blockQueue(f func()) { + var wg sync.WaitGroup + wg.Add(1) + b.incoming <- Event{ + Type: internalRunFunctionMarker, + Object: functionFakeRuntimeObject(func() { + defer wg.Done() + f() + }), + } + wg.Wait() +} + +// Watch adds a new watcher to the list and returns an Interface for it. +// Note: new watchers will only receive new events. They won't get an entire history +// of previous events. +func (m *Broadcaster) Watch() Interface { + var w *broadcasterWatcher + m.blockQueue(func() { + m.lock.Lock() + defer m.lock.Unlock() + id := m.nextWatcher + m.nextWatcher++ + w = &broadcasterWatcher{ + result: make(chan Event, m.watchQueueLength), + stopped: make(chan struct{}), + id: id, + m: m, + } + m.watchers[id] = w + }) + return w +} + +// WatchWithPrefix adds a new watcher to the list and returns an Interface for it. It sends +// queuedEvents down the new watch before beginning to send ordinary events from Broadcaster. +// The returned watch will have a queue length that is at least large enough to accommodate +// all of the items in queuedEvents. +func (m *Broadcaster) WatchWithPrefix(queuedEvents []Event) Interface { + var w *broadcasterWatcher + m.blockQueue(func() { + m.lock.Lock() + defer m.lock.Unlock() + id := m.nextWatcher + m.nextWatcher++ + length := m.watchQueueLength + if n := len(queuedEvents) + 1; n > length { + length = n + } + w = &broadcasterWatcher{ + result: make(chan Event, length), + stopped: make(chan struct{}), + id: id, + m: m, + } + m.watchers[id] = w + for _, e := range queuedEvents { + w.result <- e + } + }) + return w +} + +// stopWatching stops the given watcher and removes it from the list. +func (m *Broadcaster) stopWatching(id int64) { + m.lock.Lock() + defer m.lock.Unlock() + w, ok := m.watchers[id] + if !ok { + // No need to do anything, it's already been removed from the list. + return + } + delete(m.watchers, id) + close(w.result) +} + +// closeAll disconnects all watchers (presumably in response to a Shutdown call). +func (m *Broadcaster) closeAll() { + m.lock.Lock() + defer m.lock.Unlock() + for _, w := range m.watchers { + close(w.result) + } + // Delete everything from the map, since presence/absence in the map is used + // by stopWatching to avoid double-closing the channel. + m.watchers = map[int64]*broadcasterWatcher{} +} + +// Action distributes the given event among all watchers. +func (m *Broadcaster) Action(action EventType, obj runtime.Object) { + m.incoming <- Event{action, obj} +} + +// Shutdown disconnects all watchers (but any queued events will still be distributed). +// You must not call Action or Watch* after calling Shutdown. This call blocks +// until all events have been distributed through the outbound channels. Note +// that since they can be buffered, this means that the watchers might not +// have received the data yet as it can remain sitting in the buffered +// channel. +func (m *Broadcaster) Shutdown() { + close(m.incoming) + m.distributing.Wait() +} + +// loop receives from m.incoming and distributes to all watchers. +func (m *Broadcaster) loop() { + // Deliberately not catching crashes here. Yes, bring down the process if there's a + // bug in watch.Broadcaster. + for { + event, ok := <-m.incoming + if !ok { + break + } + if event.Type == internalRunFunctionMarker { + event.Object.(functionFakeRuntimeObject)() + continue + } + m.distribute(event) + } + m.closeAll() + m.distributing.Done() +} + +// distribute sends event to all watchers. Blocking. +func (m *Broadcaster) distribute(event Event) { + m.lock.Lock() + defer m.lock.Unlock() + if m.fullChannelBehavior == DropIfChannelFull { + for _, w := range m.watchers { + select { + case w.result <- event: + case <-w.stopped: + default: // Don't block if the event can't be queued. + } + } + } else { + for _, w := range m.watchers { + select { + case w.result <- event: + case <-w.stopped: + } + } + } +} + +// broadcasterWatcher handles a single watcher of a broadcaster +type broadcasterWatcher struct { + result chan Event + stopped chan struct{} + stop sync.Once + id int64 + m *Broadcaster +} + +// ResultChan returns a channel to use for waiting on events. +func (mw *broadcasterWatcher) ResultChan() <-chan Event { + return mw.result +} + +// Stop stops watching and removes mw from its list. +func (mw *broadcasterWatcher) Stop() { + mw.stop.Do(func() { + close(mw.stopped) + mw.m.stopWatching(mw.id) + }) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/streamwatcher.go b/vendor/k8s.io/client-go/1.4/pkg/watch/streamwatcher.go new file mode 100644 index 00000000..5ae4a1d9 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/streamwatcher.go @@ -0,0 +1,119 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package watch + +import ( + "io" + "sync" + + "github.com/golang/glog" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/util/net" + utilruntime "k8s.io/client-go/1.4/pkg/util/runtime" +) + +// Decoder allows StreamWatcher to watch any stream for which a Decoder can be written. +type Decoder interface { + // Decode should return the type of event, the decoded object, or an error. + // An error will cause StreamWatcher to call Close(). Decode should block until + // it has data or an error occurs. + Decode() (action EventType, object runtime.Object, err error) + + // Close should close the underlying io.Reader, signalling to the source of + // the stream that it is no longer being watched. Close() must cause any + // outstanding call to Decode() to return with an error of some sort. + Close() +} + +// StreamWatcher turns any stream for which you can write a Decoder interface +// into a watch.Interface. +type StreamWatcher struct { + sync.Mutex + source Decoder + result chan Event + stopped bool +} + +// NewStreamWatcher creates a StreamWatcher from the given decoder. +func NewStreamWatcher(d Decoder) *StreamWatcher { + sw := &StreamWatcher{ + source: d, + // It's easy for a consumer to add buffering via an extra + // goroutine/channel, but impossible for them to remove it, + // so nonbuffered is better. + result: make(chan Event), + } + go sw.receive() + return sw +} + +// ResultChan implements Interface. +func (sw *StreamWatcher) ResultChan() <-chan Event { + return sw.result +} + +// Stop implements Interface. +func (sw *StreamWatcher) Stop() { + // Call Close() exactly once by locking and setting a flag. + sw.Lock() + defer sw.Unlock() + if !sw.stopped { + sw.stopped = true + sw.source.Close() + } +} + +// stopping returns true if Stop() was called previously. +func (sw *StreamWatcher) stopping() bool { + sw.Lock() + defer sw.Unlock() + return sw.stopped +} + +// receive reads result from the decoder in a loop and sends down the result channel. +func (sw *StreamWatcher) receive() { + defer close(sw.result) + defer sw.Stop() + defer utilruntime.HandleCrash() + for { + action, obj, err := sw.source.Decode() + if err != nil { + // Ignore expected error. + if sw.stopping() { + return + } + switch err { + case io.EOF: + // watch closed normally + case io.ErrUnexpectedEOF: + glog.V(1).Infof("Unexpected EOF during watch stream event decoding: %v", err) + default: + msg := "Unable to decode an event from the watch stream: %v" + if net.IsProbableEOF(err) { + glog.V(5).Infof(msg, err) + } else { + glog.Errorf(msg, err) + } + } + return + } + sw.result <- Event{ + Type: action, + Object: obj, + } + } +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/until.go b/vendor/k8s.io/client-go/1.4/pkg/watch/until.go new file mode 100644 index 00000000..b93e31ec --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/until.go @@ -0,0 +1,82 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package watch + +import ( + "time" + + "k8s.io/client-go/1.4/pkg/util/wait" +) + +// ConditionFunc returns true if the condition has been reached, false if it has not been reached yet, +// or an error if the condition cannot be checked and should terminate. In general, it is better to define +// level driven conditions over edge driven conditions (pod has ready=true, vs pod modified and ready changed +// from false to true). +type ConditionFunc func(event Event) (bool, error) + +// Until reads items from the watch until each provided condition succeeds, and then returns the last watch +// encountered. The first condition that returns an error terminates the watch (and the event is also returned). +// If no event has been received, the returned event will be nil. +// Conditions are satisfied sequentially so as to provide a useful primitive for higher level composition. +func Until(timeout time.Duration, watcher Interface, conditions ...ConditionFunc) (*Event, error) { + ch := watcher.ResultChan() + defer watcher.Stop() + var after <-chan time.Time + if timeout > 0 { + after = time.After(timeout) + } else { + ch := make(chan time.Time) + close(ch) + after = ch + } + var lastEvent *Event + for _, condition := range conditions { + // check the next condition against the previous event and short circuit waiting for the next watch + if lastEvent != nil { + done, err := condition(*lastEvent) + if err != nil { + return lastEvent, err + } + if done { + break + } + } + ConditionSucceeded: + for { + select { + case event, ok := <-ch: + if !ok { + return lastEvent, wait.ErrWaitTimeout + } + lastEvent = &event + + // TODO: check for watch expired error and retry watch from latest point? + done, err := condition(event) + if err != nil { + return lastEvent, err + } + if done { + break ConditionSucceeded + } + + case <-after: + return lastEvent, wait.ErrWaitTimeout + } + } + } + return lastEvent, nil +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/decoder.go b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/decoder.go new file mode 100644 index 00000000..116d63f6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/decoder.go @@ -0,0 +1,71 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package versioned + +import ( + "fmt" + + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/runtime/serializer/streaming" + "k8s.io/client-go/1.4/pkg/watch" +) + +// Decoder implements the watch.Decoder interface for io.ReadClosers that +// have contents which consist of a series of watchEvent objects encoded +// with the given streaming decoder. The internal objects will be then +// decoded by the embedded decoder. +type Decoder struct { + decoder streaming.Decoder + embeddedDecoder runtime.Decoder +} + +// NewDecoder creates an Decoder for the given writer and codec. +func NewDecoder(decoder streaming.Decoder, embeddedDecoder runtime.Decoder) *Decoder { + return &Decoder{ + decoder: decoder, + embeddedDecoder: embeddedDecoder, + } +} + +// Decode blocks until it can return the next object in the reader. Returns an error +// if the reader is closed or an object can't be decoded. +func (d *Decoder) Decode() (watch.EventType, runtime.Object, error) { + var got Event + res, _, err := d.decoder.Decode(nil, &got) + if err != nil { + return "", nil, err + } + if res != &got { + return "", nil, fmt.Errorf("unable to decode to versioned.Event") + } + switch got.Type { + case string(watch.Added), string(watch.Modified), string(watch.Deleted), string(watch.Error): + default: + return "", nil, fmt.Errorf("got invalid watch event type: %v", got.Type) + } + + obj, err := runtime.Decode(d.embeddedDecoder, got.Object.Raw) + if err != nil { + return "", nil, fmt.Errorf("unable to decode watch event: %v", err) + } + return watch.EventType(got.Type), obj, nil +} + +// Close closes the underlying r. +func (d *Decoder) Close() { + d.decoder.Close() +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/encoder.go b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/encoder.go new file mode 100644 index 00000000..659a47da --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/encoder.go @@ -0,0 +1,51 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package versioned + +import ( + "encoding/json" + + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/runtime/serializer/streaming" + "k8s.io/client-go/1.4/pkg/watch" +) + +// Encoder serializes watch.Events into io.Writer. The internal objects +// are encoded using embedded encoder, and the outer Event is serialized +// using encoder. +type Encoder struct { + encoder streaming.Encoder + embeddedEncoder runtime.Encoder +} + +func NewEncoder(encoder streaming.Encoder, embeddedEncoder runtime.Encoder) *Encoder { + return &Encoder{ + encoder: encoder, + embeddedEncoder: embeddedEncoder, + } +} + +// Encode writes an event to the writer. Returns an error +// if the writer is closed or an object can't be encoded. +func (e *Encoder) Encode(event *watch.Event) error { + data, err := runtime.Encode(e.embeddedEncoder, event.Object) + if err != nil { + return err + } + // FIXME: get rid of json.RawMessage. + return e.encoder.Encode(&Event{string(event.Type), runtime.RawExtension{Raw: json.RawMessage(data)}}) +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/generated.pb.go b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/generated.pb.go new file mode 100644 index 00000000..601f14e4 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/generated.pb.go @@ -0,0 +1,390 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/watch/versioned/generated.proto +// DO NOT EDIT! + +/* + Package versioned is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/watch/versioned/generated.proto + + It has these top-level messages: + Event +*/ +package versioned + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *Event) Reset() { *m = Event{} } +func (*Event) ProtoMessage() {} +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func init() { + proto.RegisterType((*Event)(nil), "k8s.io.client-go.1.4.pkg.watch.versioned.Event") +} +func (m *Event) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Event) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Object.Size())) + n1, err := m.Object.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *Event) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = m.Object.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *Event) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Event{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Object:` + strings.Replace(strings.Replace(this.Object.String(), "RawExtension", "k8s_io_kubernetes_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Event) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Event: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Event: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Object", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Object.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 273 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x32, 0xcd, 0xb6, 0x28, 0xd6, + 0xcb, 0xcc, 0xd7, 0xcf, 0x2e, 0x4d, 0x4a, 0x2d, 0xca, 0x4b, 0x2d, 0x49, 0x2d, 0xd6, 0x2f, 0xc8, + 0x4e, 0xd7, 0x2f, 0x4f, 0x2c, 0x49, 0xce, 0xd0, 0x2f, 0x4b, 0x2d, 0x2a, 0xce, 0xcc, 0xcf, 0x4b, + 0x4d, 0xd1, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0x4a, 0x2c, 0x49, 0x4d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0x52, 0x85, 0x68, 0xd3, 0x43, 0x68, 0xd3, 0x03, 0x6a, 0xd3, 0x03, 0x6b, 0xd3, 0x83, + 0x6b, 0x93, 0xd2, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, + 0x4f, 0xcf, 0xd7, 0x07, 0xeb, 0x4e, 0x2a, 0x4d, 0x03, 0xf3, 0xc0, 0x1c, 0x30, 0x0b, 0x62, 0xaa, + 0x94, 0x2e, 0x76, 0xc7, 0x14, 0x95, 0xe6, 0x95, 0x64, 0xe6, 0xa6, 0xa2, 0x3b, 0x42, 0xca, 0x10, + 0xbb, 0xf2, 0xd2, 0x92, 0xcc, 0x1c, 0xfd, 0xcc, 0xbc, 0x92, 0xe2, 0x92, 0x22, 0x74, 0x2d, 0x4a, + 0x75, 0x5c, 0xac, 0xae, 0x65, 0xa9, 0x79, 0x25, 0x42, 0x0a, 0x5c, 0x2c, 0x25, 0x95, 0x05, 0xa9, + 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x4e, 0x3c, 0x27, 0xee, 0xc9, 0x33, 0x3c, 0xba, 0x27, 0xcf, + 0x12, 0x02, 0x14, 0x0b, 0x02, 0xcb, 0x08, 0x05, 0x73, 0xb1, 0xe5, 0x27, 0x65, 0xa5, 0x26, 0x97, + 0x48, 0x30, 0x01, 0xd5, 0x70, 0x1b, 0x69, 0xeb, 0x61, 0xf7, 0x33, 0xd4, 0x75, 0x7a, 0x41, 0x89, + 0xe5, 0xae, 0x15, 0x25, 0xa9, 0x79, 0x20, 0xaf, 0x3b, 0xf1, 0x41, 0x0d, 0x64, 0xf3, 0x07, 0x1b, + 0x11, 0x04, 0x35, 0xca, 0x49, 0xfb, 0xc4, 0x43, 0x39, 0x86, 0x0b, 0x40, 0x7c, 0x03, 0x88, 0x1b, + 0x1e, 0xc9, 0x31, 0x9e, 0x00, 0xe2, 0x0b, 0x40, 0xfc, 0x00, 0x88, 0x27, 0x3c, 0x96, 0x63, 0x88, + 0xe2, 0x84, 0x87, 0x1e, 0x20, 0x00, 0x00, 0xff, 0xff, 0x23, 0x3d, 0x7b, 0x7e, 0x9c, 0x01, 0x00, + 0x00, +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/generated.proto b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/generated.proto new file mode 100644 index 00000000..8d550655 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/generated.proto @@ -0,0 +1,43 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.watch.versioned; + +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "versioned"; + +// Event represents a single event to a watched resource. +// +// +protobuf=true +message Event { + optional string type = 1; + + // Object is: + // * If Type is Added or Modified: the new state of the object. + // * If Type is Deleted: the state of the object immediately before deletion. + // * If Type is Error: *api.Status is recommended; other types may make sense + // depending on context. + optional k8s.io.kubernetes.pkg.runtime.RawExtension object = 2; +} + diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/register.go b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/register.go new file mode 100644 index 00000000..e44f0caa --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/register.go @@ -0,0 +1,84 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package versioned + +import ( + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/conversion" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/watch" +) + +// WatchEventKind is name reserved for serializing watch events. +const WatchEventKind = "WatchEvent" + +// AddToGroupVersion registers the watch external and internal kinds with the scheme, and ensures the proper +// conversions are in place. +func AddToGroupVersion(scheme *runtime.Scheme, groupVersion unversioned.GroupVersion) { + scheme.AddKnownTypeWithName(groupVersion.WithKind(WatchEventKind), &Event{}) + scheme.AddKnownTypeWithName( + unversioned.GroupVersion{Group: groupVersion.Group, Version: runtime.APIVersionInternal}.WithKind(WatchEventKind), + &InternalEvent{}, + ) + scheme.AddConversionFuncs( + Convert_versioned_Event_to_watch_Event, + Convert_versioned_InternalEvent_to_versioned_Event, + Convert_watch_Event_to_versioned_Event, + Convert_versioned_Event_to_versioned_InternalEvent, + ) +} + +func Convert_watch_Event_to_versioned_Event(in *watch.Event, out *Event, s conversion.Scope) error { + out.Type = string(in.Type) + switch t := in.Object.(type) { + case *runtime.Unknown: + // TODO: handle other fields on Unknown and detect type + out.Object.Raw = t.Raw + case nil: + default: + out.Object.Object = in.Object + } + return nil +} + +func Convert_versioned_InternalEvent_to_versioned_Event(in *InternalEvent, out *Event, s conversion.Scope) error { + return Convert_watch_Event_to_versioned_Event((*watch.Event)(in), out, s) +} + +func Convert_versioned_Event_to_watch_Event(in *Event, out *watch.Event, s conversion.Scope) error { + out.Type = watch.EventType(in.Type) + if in.Object.Object != nil { + out.Object = in.Object.Object + } else if in.Object.Raw != nil { + // TODO: handle other fields on Unknown and detect type + out.Object = &runtime.Unknown{ + Raw: in.Object.Raw, + ContentType: runtime.ContentTypeJSON, + } + } + return nil +} + +func Convert_versioned_Event_to_versioned_InternalEvent(in *Event, out *InternalEvent, s conversion.Scope) error { + return Convert_versioned_Event_to_watch_Event(in, (*watch.Event)(out), s) +} + +// InternalEvent makes watch.Event versioned +type InternalEvent watch.Event + +func (e *InternalEvent) GetObjectKind() unversioned.ObjectKind { return unversioned.EmptyObjectKind } +func (e *Event) GetObjectKind() unversioned.ObjectKind { return unversioned.EmptyObjectKind } diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/types.go b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/types.go new file mode 100644 index 00000000..3366adef --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/versioned/types.go @@ -0,0 +1,37 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package versioned contains the versioned types for watch. This is the first +// serialization version unless otherwise noted. +package versioned + +import ( + "k8s.io/client-go/1.4/pkg/runtime" +) + +// Event represents a single event to a watched resource. +// +// +protobuf=true +type Event struct { + Type string `json:"type" protobuf:"bytes,1,opt,name=type"` + + // Object is: + // * If Type is Added or Modified: the new state of the object. + // * If Type is Deleted: the state of the object immediately before deletion. + // * If Type is Error: *api.Status is recommended; other types may make sense + // depending on context. + Object runtime.RawExtension `json:"object" protobuf:"bytes,2,opt,name=object"` +} diff --git a/vendor/k8s.io/client-go/1.4/pkg/watch/watch.go b/vendor/k8s.io/client-go/1.4/pkg/watch/watch.go new file mode 100644 index 00000000..01cdd2a8 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/pkg/watch/watch.go @@ -0,0 +1,152 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package watch + +import ( + "sync" + + "k8s.io/client-go/1.4/pkg/runtime" + + "github.com/golang/glog" +) + +// Interface can be implemented by anything that knows how to watch and report changes. +type Interface interface { + // Stops watching. Will close the channel returned by ResultChan(). Releases + // any resources used by the watch. + Stop() + + // Returns a chan which will receive all the events. If an error occurs + // or Stop() is called, this channel will be closed, in which case the + // watch should be completely cleaned up. + ResultChan() <-chan Event +} + +// EventType defines the possible types of events. +type EventType string + +const ( + Added EventType = "ADDED" + Modified EventType = "MODIFIED" + Deleted EventType = "DELETED" + Error EventType = "ERROR" +) + +// Event represents a single event to a watched resource. +type Event struct { + Type EventType + + // Object is: + // * If Type is Added or Modified: the new state of the object. + // * If Type is Deleted: the state of the object immediately before deletion. + // * If Type is Error: *api.Status is recommended; other types may make sense + // depending on context. + Object runtime.Object +} + +type emptyWatch chan Event + +// NewEmptyWatch returns a watch interface that returns no results and is closed. +// May be used in certain error conditions where no information is available but +// an error is not warranted. +func NewEmptyWatch() Interface { + ch := make(chan Event) + close(ch) + return emptyWatch(ch) +} + +// Stop implements Interface +func (w emptyWatch) Stop() { +} + +// ResultChan implements Interface +func (w emptyWatch) ResultChan() <-chan Event { + return chan Event(w) +} + +// FakeWatcher lets you test anything that consumes a watch.Interface; threadsafe. +type FakeWatcher struct { + result chan Event + Stopped bool + sync.Mutex +} + +func NewFake() *FakeWatcher { + return &FakeWatcher{ + result: make(chan Event), + } +} + +func NewFakeWithChanSize(size int) *FakeWatcher { + return &FakeWatcher{ + result: make(chan Event, size), + } +} + +// Stop implements Interface.Stop(). +func (f *FakeWatcher) Stop() { + f.Lock() + defer f.Unlock() + if !f.Stopped { + glog.V(4).Infof("Stopping fake watcher.") + close(f.result) + f.Stopped = true + } +} + +func (f *FakeWatcher) IsStopped() bool { + f.Lock() + defer f.Unlock() + return f.Stopped +} + +// Reset prepares the watcher to be reused. +func (f *FakeWatcher) Reset() { + f.Lock() + defer f.Unlock() + f.Stopped = false + f.result = make(chan Event) +} + +func (f *FakeWatcher) ResultChan() <-chan Event { + return f.result +} + +// Add sends an add event. +func (f *FakeWatcher) Add(obj runtime.Object) { + f.result <- Event{Added, obj} +} + +// Modify sends a modify event. +func (f *FakeWatcher) Modify(obj runtime.Object) { + f.result <- Event{Modified, obj} +} + +// Delete sends a delete event. +func (f *FakeWatcher) Delete(lastValue runtime.Object) { + f.result <- Event{Deleted, lastValue} +} + +// Error sends an Error event. +func (f *FakeWatcher) Error(errValue runtime.Object) { + f.result <- Event{Error, errValue} +} + +// Action sends an event of the requested type, for table-based testing. +func (f *FakeWatcher) Action(action EventType, obj runtime.Object) { + f.result <- Event{action, obj} +} diff --git a/vendor/k8s.io/client-go/1.4/rest/client.go b/vendor/k8s.io/client-go/1.4/rest/client.go new file mode 100644 index 00000000..a9cae515 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/rest/client.go @@ -0,0 +1,224 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "fmt" + "net/http" + "net/url" + "os" + "strconv" + "strings" + "time" + + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/util/flowcontrol" +) + +const ( + // Environment variables: Note that the duration should be long enough that the backoff + // persists for some reasonable time (i.e. 120 seconds). The typical base might be "1". + envBackoffBase = "KUBE_CLIENT_BACKOFF_BASE" + envBackoffDuration = "KUBE_CLIENT_BACKOFF_DURATION" +) + +// RESTClient imposes common Kubernetes API conventions on a set of resource paths. +// The baseURL is expected to point to an HTTP or HTTPS path that is the parent +// of one or more resources. The server should return a decodable API resource +// object, or an api.Status object which contains information about the reason for +// any failure. +// +// Most consumers should use client.New() to get a Kubernetes API client. +type RESTClient struct { + // base is the root URL for all invocations of the client + base *url.URL + // versionedAPIPath is a path segment connecting the base URL to the resource root + versionedAPIPath string + + // contentConfig is the information used to communicate with the server. + contentConfig ContentConfig + + // serializers contain all serializers for undelying content type. + serializers Serializers + + // creates BackoffManager that is passed to requests. + createBackoffMgr func() BackoffManager + + // TODO extract this into a wrapper interface via the RESTClient interface in kubectl. + Throttle flowcontrol.RateLimiter + + // Set specific behavior of the client. If not set http.DefaultClient will be used. + Client *http.Client +} + +type Serializers struct { + Encoder runtime.Encoder + Decoder runtime.Decoder + StreamingSerializer runtime.Serializer + Framer runtime.Framer + RenegotiatedDecoder func(contentType string, params map[string]string) (runtime.Decoder, error) +} + +// NewRESTClient creates a new RESTClient. This client performs generic REST functions +// such as Get, Put, Post, and Delete on specified paths. Codec controls encoding and +// decoding of responses from the server. +func NewRESTClient(baseURL *url.URL, versionedAPIPath string, config ContentConfig, maxQPS float32, maxBurst int, rateLimiter flowcontrol.RateLimiter, client *http.Client) (*RESTClient, error) { + base := *baseURL + if !strings.HasSuffix(base.Path, "/") { + base.Path += "/" + } + base.RawQuery = "" + base.Fragment = "" + + if config.GroupVersion == nil { + config.GroupVersion = &unversioned.GroupVersion{} + } + if len(config.ContentType) == 0 { + config.ContentType = "application/json" + } + serializers, err := createSerializers(config) + if err != nil { + return nil, err + } + + var throttle flowcontrol.RateLimiter + if maxQPS > 0 && rateLimiter == nil { + throttle = flowcontrol.NewTokenBucketRateLimiter(maxQPS, maxBurst) + } else if rateLimiter != nil { + throttle = rateLimiter + } + return &RESTClient{ + base: &base, + versionedAPIPath: versionedAPIPath, + contentConfig: config, + serializers: *serializers, + createBackoffMgr: readExpBackoffConfig, + Throttle: throttle, + Client: client, + }, nil +} + +// GetRateLimiter returns rate limier for a given client, or nil if it's called on a nil client +func (c *RESTClient) GetRateLimiter() flowcontrol.RateLimiter { + if c == nil { + return nil + } + return c.Throttle +} + +// readExpBackoffConfig handles the internal logic of determining what the +// backoff policy is. By default if no information is available, NoBackoff. +// TODO Generalize this see #17727 . +func readExpBackoffConfig() BackoffManager { + backoffBase := os.Getenv(envBackoffBase) + backoffDuration := os.Getenv(envBackoffDuration) + + backoffBaseInt, errBase := strconv.ParseInt(backoffBase, 10, 64) + backoffDurationInt, errDuration := strconv.ParseInt(backoffDuration, 10, 64) + if errBase != nil || errDuration != nil { + return &NoBackoff{} + } + return &URLBackoff{ + Backoff: flowcontrol.NewBackOff( + time.Duration(backoffBaseInt)*time.Second, + time.Duration(backoffDurationInt)*time.Second)} +} + +// createSerializers creates all necessary serializers for given contentType. +func createSerializers(config ContentConfig) (*Serializers, error) { + negotiated := config.NegotiatedSerializer + contentType := config.ContentType + info, ok := negotiated.SerializerForMediaType(contentType, nil) + if !ok { + return nil, fmt.Errorf("serializer for %s not registered", contentType) + } + streamInfo, ok := negotiated.StreamingSerializerForMediaType(contentType, nil) + if !ok { + return nil, fmt.Errorf("streaming serializer for %s not registered", contentType) + } + internalGV := unversioned.GroupVersion{ + Group: config.GroupVersion.Group, + Version: runtime.APIVersionInternal, + } + return &Serializers{ + Encoder: negotiated.EncoderForVersion(info.Serializer, *config.GroupVersion), + Decoder: negotiated.DecoderToVersion(info.Serializer, internalGV), + StreamingSerializer: streamInfo.Serializer, + Framer: streamInfo.Framer, + RenegotiatedDecoder: func(contentType string, params map[string]string) (runtime.Decoder, error) { + renegotiated, ok := negotiated.SerializerForMediaType(contentType, params) + if !ok { + return nil, fmt.Errorf("serializer for %s not registered", contentType) + } + return negotiated.DecoderToVersion(renegotiated.Serializer, internalGV), nil + }, + }, nil +} + +// Verb begins a request with a verb (GET, POST, PUT, DELETE). +// +// Example usage of RESTClient's request building interface: +// c, err := NewRESTClient(...) +// if err != nil { ... } +// resp, err := c.Verb("GET"). +// Path("pods"). +// SelectorParam("labels", "area=staging"). +// Timeout(10*time.Second). +// Do() +// if err != nil { ... } +// list, ok := resp.(*api.PodList) +// +func (c *RESTClient) Verb(verb string) *Request { + backoff := c.createBackoffMgr() + + if c.Client == nil { + return NewRequest(nil, verb, c.base, c.versionedAPIPath, c.contentConfig, c.serializers, backoff, c.Throttle) + } + return NewRequest(c.Client, verb, c.base, c.versionedAPIPath, c.contentConfig, c.serializers, backoff, c.Throttle) +} + +// Post begins a POST request. Short for c.Verb("POST"). +func (c *RESTClient) Post() *Request { + return c.Verb("POST") +} + +// Put begins a PUT request. Short for c.Verb("PUT"). +func (c *RESTClient) Put() *Request { + return c.Verb("PUT") +} + +// Patch begins a PATCH request. Short for c.Verb("Patch"). +func (c *RESTClient) Patch(pt api.PatchType) *Request { + return c.Verb("PATCH").SetHeader("Content-Type", string(pt)) +} + +// Get begins a GET request. Short for c.Verb("GET"). +func (c *RESTClient) Get() *Request { + return c.Verb("GET") +} + +// Delete begins a DELETE request. Short for c.Verb("DELETE"). +func (c *RESTClient) Delete() *Request { + return c.Verb("DELETE") +} + +// APIVersion returns the APIVersion this RESTClient is expected to use. +func (c *RESTClient) APIVersion() unversioned.GroupVersion { + return *c.contentConfig.GroupVersion +} diff --git a/vendor/k8s.io/client-go/1.4/rest/config.go b/vendor/k8s.io/client-go/1.4/rest/config.go new file mode 100644 index 00000000..766459c8 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/rest/config.go @@ -0,0 +1,335 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "fmt" + "io/ioutil" + "net" + "net/http" + "os" + "path" + gruntime "runtime" + "strings" + + "github.com/golang/glog" + + "k8s.io/client-go/1.4/pkg/api" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/util/crypto" + "k8s.io/client-go/1.4/pkg/util/flowcontrol" + "k8s.io/client-go/1.4/pkg/version" + clientcmdapi "k8s.io/client-go/1.4/tools/clientcmd/api" +) + +const ( + DefaultQPS float32 = 5.0 + DefaultBurst int = 10 +) + +// Config holds the common attributes that can be passed to a Kubernetes client on +// initialization. +type Config struct { + // Host must be a host string, a host:port pair, or a URL to the base of the apiserver. + // If a URL is given then the (optional) Path of that URL represents a prefix that must + // be appended to all request URIs used to access the apiserver. This allows a frontend + // proxy to easily relocate all of the apiserver endpoints. + Host string + // APIPath is a sub-path that points to an API root. + APIPath string + // Prefix is the sub path of the server. If not specified, the client will set + // a default value. Use "/" to indicate the server root should be used + Prefix string + + // ContentConfig contains settings that affect how objects are transformed when + // sent to the server. + ContentConfig + + // Server requires Basic authentication + Username string + Password string + + // Server requires Bearer authentication. This client will not attempt to use + // refresh tokens for an OAuth2 flow. + // TODO: demonstrate an OAuth2 compatible client. + BearerToken string + + // Impersonate is the username that this RESTClient will impersonate + Impersonate string + + // Server requires plugin-specified authentication. + AuthProvider *clientcmdapi.AuthProviderConfig + + // Callback to persist config for AuthProvider. + AuthConfigPersister AuthProviderConfigPersister + + // TLSClientConfig contains settings to enable transport layer security + TLSClientConfig + + // Server should be accessed without verifying the TLS + // certificate. For testing only. + Insecure bool + + // UserAgent is an optional field that specifies the caller of this request. + UserAgent string + + // Transport may be used for custom HTTP behavior. This attribute may not + // be specified with the TLS client certificate options. Use WrapTransport + // for most client level operations. + Transport http.RoundTripper + // WrapTransport will be invoked for custom HTTP behavior after the underlying + // transport is initialized (either the transport created from TLSClientConfig, + // Transport, or http.DefaultTransport). The config may layer other RoundTrippers + // on top of the returned RoundTripper. + WrapTransport func(rt http.RoundTripper) http.RoundTripper + + // QPS indicates the maximum QPS to the master from this client. + // If it's zero, the created RESTClient will use DefaultQPS: 5 + QPS float32 + + // Maximum burst for throttle. + // If it's zero, the created RESTClient will use DefaultBurst: 10. + Burst int + + // Rate limiter for limiting connections to the master from this client. If present overwrites QPS/Burst + RateLimiter flowcontrol.RateLimiter + + // Version forces a specific version to be used (if registered) + // Do we need this? + // Version string +} + +// TLSClientConfig contains settings to enable transport layer security +type TLSClientConfig struct { + // Server requires TLS client certificate authentication + CertFile string + // Server requires TLS client certificate authentication + KeyFile string + // Trusted root certificates for server + CAFile string + + // CertData holds PEM-encoded bytes (typically read from a client certificate file). + // CertData takes precedence over CertFile + CertData []byte + // KeyData holds PEM-encoded bytes (typically read from a client certificate key file). + // KeyData takes precedence over KeyFile + KeyData []byte + // CAData holds PEM-encoded bytes (typically read from a root certificates bundle). + // CAData takes precedence over CAFile + CAData []byte +} + +type ContentConfig struct { + // AcceptContentTypes specifies the types the client will accept and is optional. + // If not set, ContentType will be used to define the Accept header + AcceptContentTypes string + // ContentType specifies the wire format used to communicate with the server. + // This value will be set as the Accept header on requests made to the server, and + // as the default content type on any object sent to the server. If not set, + // "application/json" is used. + ContentType string + // GroupVersion is the API version to talk to. Must be provided when initializing + // a RESTClient directly. When initializing a Client, will be set with the default + // code version. + GroupVersion *unversioned.GroupVersion + // NegotiatedSerializer is used for obtaining encoders and decoders for multiple + // supported media types. + NegotiatedSerializer runtime.NegotiatedSerializer +} + +// RESTClientFor returns a RESTClient that satisfies the requested attributes on a client Config +// object. Note that a RESTClient may require fields that are optional when initializing a Client. +// A RESTClient created by this method is generic - it expects to operate on an API that follows +// the Kubernetes conventions, but may not be the Kubernetes API. +func RESTClientFor(config *Config) (*RESTClient, error) { + if config.GroupVersion == nil { + return nil, fmt.Errorf("GroupVersion is required when initializing a RESTClient") + } + if config.NegotiatedSerializer == nil { + return nil, fmt.Errorf("NegotiatedSerializer is required when initializing a RESTClient") + } + qps := config.QPS + if config.QPS == 0.0 { + qps = DefaultQPS + } + burst := config.Burst + if config.Burst == 0 { + burst = DefaultBurst + } + + baseURL, versionedAPIPath, err := defaultServerUrlFor(config) + if err != nil { + return nil, err + } + + transport, err := TransportFor(config) + if err != nil { + return nil, err + } + + var httpClient *http.Client + if transport != http.DefaultTransport { + httpClient = &http.Client{Transport: transport} + } + + return NewRESTClient(baseURL, versionedAPIPath, config.ContentConfig, qps, burst, config.RateLimiter, httpClient) +} + +// UnversionedRESTClientFor is the same as RESTClientFor, except that it allows +// the config.Version to be empty. +func UnversionedRESTClientFor(config *Config) (*RESTClient, error) { + if config.NegotiatedSerializer == nil { + return nil, fmt.Errorf("NeogitatedSerializer is required when initializing a RESTClient") + } + + baseURL, versionedAPIPath, err := defaultServerUrlFor(config) + if err != nil { + return nil, err + } + + transport, err := TransportFor(config) + if err != nil { + return nil, err + } + + var httpClient *http.Client + if transport != http.DefaultTransport { + httpClient = &http.Client{Transport: transport} + } + + versionConfig := config.ContentConfig + if versionConfig.GroupVersion == nil { + v := unversioned.SchemeGroupVersion + versionConfig.GroupVersion = &v + } + + return NewRESTClient(baseURL, versionedAPIPath, versionConfig, config.QPS, config.Burst, config.RateLimiter, httpClient) +} + +// SetKubernetesDefaults sets default values on the provided client config for accessing the +// Kubernetes API or returns an error if any of the defaults are impossible or invalid. +func SetKubernetesDefaults(config *Config) error { + if len(config.UserAgent) == 0 { + config.UserAgent = DefaultKubernetesUserAgent() + } + return nil +} + +// DefaultKubernetesUserAgent returns the default user agent that clients can use. +func DefaultKubernetesUserAgent() string { + commit := version.Get().GitCommit + if len(commit) > 7 { + commit = commit[:7] + } + if len(commit) == 0 { + commit = "unknown" + } + version := version.Get().GitVersion + seg := strings.SplitN(version, "-", 2) + version = seg[0] + return fmt.Sprintf("%s/%s (%s/%s) kubernetes/%s", path.Base(os.Args[0]), version, gruntime.GOOS, gruntime.GOARCH, commit) +} + +// InClusterConfig returns a config object which uses the service account +// kubernetes gives to pods. It's intended for clients that expect to be +// running inside a pod running on kubernetes. It will return an error if +// called from a process not running in a kubernetes environment. +func InClusterConfig() (*Config, error) { + host, port := os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT") + if len(host) == 0 || len(port) == 0 { + return nil, fmt.Errorf("unable to load in-cluster configuration, KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT must be defined") + } + + token, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountTokenKey) + if err != nil { + return nil, err + } + tlsClientConfig := TLSClientConfig{} + rootCAFile := "/var/run/secrets/kubernetes.io/serviceaccount/" + api.ServiceAccountRootCAKey + if _, err := crypto.CertPoolFromFile(rootCAFile); err != nil { + glog.Errorf("Expected to load root CA config from %s, but got err: %v", rootCAFile, err) + } else { + tlsClientConfig.CAFile = rootCAFile + } + + return &Config{ + // TODO: switch to using cluster DNS. + Host: "https://" + net.JoinHostPort(host, port), + BearerToken: string(token), + TLSClientConfig: tlsClientConfig, + }, nil +} + +// IsConfigTransportTLS returns true if and only if the provided +// config will result in a protected connection to the server when it +// is passed to rest.RESTClientFor(). Use to determine when to +// send credentials over the wire. +// +// Note: the Insecure flag is ignored when testing for this value, so MITM attacks are +// still possible. +func IsConfigTransportTLS(config Config) bool { + baseURL, _, err := defaultServerUrlFor(&config) + if err != nil { + return false + } + return baseURL.Scheme == "https" +} + +// LoadTLSFiles copies the data from the CertFile, KeyFile, and CAFile fields into the CertData, +// KeyData, and CAFile fields, or returns an error. If no error is returned, all three fields are +// either populated or were empty to start. +func LoadTLSFiles(c *Config) error { + var err error + c.CAData, err = dataFromSliceOrFile(c.CAData, c.CAFile) + if err != nil { + return err + } + + c.CertData, err = dataFromSliceOrFile(c.CertData, c.CertFile) + if err != nil { + return err + } + + c.KeyData, err = dataFromSliceOrFile(c.KeyData, c.KeyFile) + if err != nil { + return err + } + return nil +} + +// dataFromSliceOrFile returns data from the slice (if non-empty), or from the file, +// or an error if an error occurred reading the file +func dataFromSliceOrFile(data []byte, file string) ([]byte, error) { + if len(data) > 0 { + return data, nil + } + if len(file) > 0 { + fileData, err := ioutil.ReadFile(file) + if err != nil { + return []byte{}, err + } + return fileData, nil + } + return nil, nil +} + +func AddUserAgent(config *Config, userAgent string) *Config { + fullUserAgent := DefaultKubernetesUserAgent() + "/" + userAgent + config.UserAgent = fullUserAgent + return config +} diff --git a/vendor/k8s.io/client-go/1.4/rest/plugin.go b/vendor/k8s.io/client-go/1.4/rest/plugin.go new file mode 100644 index 00000000..d15a1191 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/rest/plugin.go @@ -0,0 +1,73 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "fmt" + "net/http" + "sync" + + "github.com/golang/glog" + + clientcmdapi "k8s.io/client-go/1.4/tools/clientcmd/api" +) + +type AuthProvider interface { + // WrapTransport allows the plugin to create a modified RoundTripper that + // attaches authorization headers (or other info) to requests. + WrapTransport(http.RoundTripper) http.RoundTripper + // Login allows the plugin to initialize its configuration. It must not + // require direct user interaction. + Login() error +} + +// Factory generates an AuthProvider plugin. +// clusterAddress is the address of the current cluster. +// config is the initial configuration for this plugin. +// persister allows the plugin to save updated configuration. +type Factory func(clusterAddress string, config map[string]string, persister AuthProviderConfigPersister) (AuthProvider, error) + +// AuthProviderConfigPersister allows a plugin to persist configuration info +// for just itself. +type AuthProviderConfigPersister interface { + Persist(map[string]string) error +} + +// All registered auth provider plugins. +var pluginsLock sync.Mutex +var plugins = make(map[string]Factory) + +func RegisterAuthProviderPlugin(name string, plugin Factory) error { + pluginsLock.Lock() + defer pluginsLock.Unlock() + if _, found := plugins[name]; found { + return fmt.Errorf("Auth Provider Plugin %q was registered twice", name) + } + glog.V(4).Infof("Registered Auth Provider Plugin %q", name) + plugins[name] = plugin + return nil +} + +func GetAuthProvider(clusterAddress string, apc *clientcmdapi.AuthProviderConfig, persister AuthProviderConfigPersister) (AuthProvider, error) { + pluginsLock.Lock() + defer pluginsLock.Unlock() + p, ok := plugins[apc.Name] + if !ok { + return nil, fmt.Errorf("No Auth Provider found for name %q", apc.Name) + } + return p(clusterAddress, apc.Config, persister) +} diff --git a/vendor/k8s.io/client-go/1.4/rest/request.go b/vendor/k8s.io/client-go/1.4/rest/request.go new file mode 100644 index 00000000..55af1ac0 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/rest/request.go @@ -0,0 +1,1111 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "bytes" + "encoding/hex" + "fmt" + "io" + "io/ioutil" + "mime" + "net/http" + "net/url" + "path" + "reflect" + "strconv" + "strings" + "time" + + "github.com/golang/glog" + "k8s.io/client-go/1.4/pkg/api/errors" + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/api/v1" + "k8s.io/client-go/1.4/pkg/api/validation" + "k8s.io/client-go/1.4/pkg/fields" + "k8s.io/client-go/1.4/pkg/labels" + "k8s.io/client-go/1.4/pkg/runtime" + "k8s.io/client-go/1.4/pkg/runtime/serializer/streaming" + "k8s.io/client-go/1.4/pkg/util/flowcontrol" + "k8s.io/client-go/1.4/pkg/util/net" + "k8s.io/client-go/1.4/pkg/util/sets" + "k8s.io/client-go/1.4/pkg/watch" + "k8s.io/client-go/1.4/pkg/watch/versioned" + "k8s.io/client-go/1.4/tools/metrics" +) + +var ( + // specialParams lists parameters that are handled specially and which users of Request + // are therefore not allowed to set manually. + specialParams = sets.NewString("timeout") + + // longThrottleLatency defines threshold for logging requests. All requests being + // throttle for more than longThrottleLatency will be logged. + longThrottleLatency = 50 * time.Millisecond +) + +// HTTPClient is an interface for testing a request object. +type HTTPClient interface { + Do(req *http.Request) (*http.Response, error) +} + +// ResponseWrapper is an interface for getting a response. +// The response may be either accessed as a raw data (the whole output is put into memory) or as a stream. +type ResponseWrapper interface { + DoRaw() ([]byte, error) + Stream() (io.ReadCloser, error) +} + +// RequestConstructionError is returned when there's an error assembling a request. +type RequestConstructionError struct { + Err error +} + +// Error returns a textual description of 'r'. +func (r *RequestConstructionError) Error() string { + return fmt.Sprintf("request construction error: '%v'", r.Err) +} + +// Request allows for building up a request to a server in a chained fashion. +// Any errors are stored until the end of your call, so you only have to +// check once. +type Request struct { + // required + client HTTPClient + verb string + + baseURL *url.URL + content ContentConfig + serializers Serializers + + // generic components accessible via method setters + pathPrefix string + subpath string + params url.Values + headers http.Header + + // structural elements of the request that are part of the Kubernetes API conventions + namespace string + namespaceSet bool + resource string + resourceName string + subresource string + selector labels.Selector + timeout time.Duration + + // output + err error + body io.Reader + + // The constructed request and the response + req *http.Request + resp *http.Response + + backoffMgr BackoffManager + throttle flowcontrol.RateLimiter +} + +// NewRequest creates a new request helper object for accessing runtime.Objects on a server. +func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPath string, content ContentConfig, serializers Serializers, backoff BackoffManager, throttle flowcontrol.RateLimiter) *Request { + if backoff == nil { + glog.V(2).Infof("Not implementing request backoff strategy.") + backoff = &NoBackoff{} + } + + pathPrefix := "/" + if baseURL != nil { + pathPrefix = path.Join(pathPrefix, baseURL.Path) + } + r := &Request{ + client: client, + verb: verb, + baseURL: baseURL, + pathPrefix: path.Join(pathPrefix, versionedAPIPath), + content: content, + serializers: serializers, + backoffMgr: backoff, + throttle: throttle, + } + switch { + case len(content.AcceptContentTypes) > 0: + r.SetHeader("Accept", content.AcceptContentTypes) + case len(content.ContentType) > 0: + r.SetHeader("Accept", content.ContentType+", */*") + } + return r +} + +// Prefix adds segments to the relative beginning to the request path. These +// items will be placed before the optional Namespace, Resource, or Name sections. +// Setting AbsPath will clear any previously set Prefix segments +func (r *Request) Prefix(segments ...string) *Request { + if r.err != nil { + return r + } + r.pathPrefix = path.Join(r.pathPrefix, path.Join(segments...)) + return r +} + +// Suffix appends segments to the end of the path. These items will be placed after the prefix and optional +// Namespace, Resource, or Name sections. +func (r *Request) Suffix(segments ...string) *Request { + if r.err != nil { + return r + } + r.subpath = path.Join(r.subpath, path.Join(segments...)) + return r +} + +// Resource sets the resource to access (/[ns//]) +func (r *Request) Resource(resource string) *Request { + if r.err != nil { + return r + } + if len(r.resource) != 0 { + r.err = fmt.Errorf("resource already set to %q, cannot change to %q", r.resource, resource) + return r + } + if msgs := validation.IsValidPathSegmentName(resource); len(msgs) != 0 { + r.err = fmt.Errorf("invalid resource %q: %v", resource, msgs) + return r + } + r.resource = resource + return r +} + +// SubResource sets a sub-resource path which can be multiple segments segment after the resource +// name but before the suffix. +func (r *Request) SubResource(subresources ...string) *Request { + if r.err != nil { + return r + } + subresource := path.Join(subresources...) + if len(r.subresource) != 0 { + r.err = fmt.Errorf("subresource already set to %q, cannot change to %q", r.resource, subresource) + return r + } + for _, s := range subresources { + if msgs := validation.IsValidPathSegmentName(s); len(msgs) != 0 { + r.err = fmt.Errorf("invalid subresource %q: %v", s, msgs) + return r + } + } + r.subresource = subresource + return r +} + +// Name sets the name of a resource to access (/[ns//]) +func (r *Request) Name(resourceName string) *Request { + if r.err != nil { + return r + } + if len(resourceName) == 0 { + r.err = fmt.Errorf("resource name may not be empty") + return r + } + if len(r.resourceName) != 0 { + r.err = fmt.Errorf("resource name already set to %q, cannot change to %q", r.resourceName, resourceName) + return r + } + if msgs := validation.IsValidPathSegmentName(resourceName); len(msgs) != 0 { + r.err = fmt.Errorf("invalid resource name %q: %v", resourceName, msgs) + return r + } + r.resourceName = resourceName + return r +} + +// Namespace applies the namespace scope to a request (/[ns//]) +func (r *Request) Namespace(namespace string) *Request { + if r.err != nil { + return r + } + if r.namespaceSet { + r.err = fmt.Errorf("namespace already set to %q, cannot change to %q", r.namespace, namespace) + return r + } + if msgs := validation.IsValidPathSegmentName(namespace); len(msgs) != 0 { + r.err = fmt.Errorf("invalid namespace %q: %v", namespace, msgs) + return r + } + r.namespaceSet = true + r.namespace = namespace + return r +} + +// NamespaceIfScoped is a convenience function to set a namespace if scoped is true +func (r *Request) NamespaceIfScoped(namespace string, scoped bool) *Request { + if scoped { + return r.Namespace(namespace) + } + return r +} + +// AbsPath overwrites an existing path with the segments provided. Trailing slashes are preserved +// when a single segment is passed. +func (r *Request) AbsPath(segments ...string) *Request { + if r.err != nil { + return r + } + r.pathPrefix = path.Join(r.baseURL.Path, path.Join(segments...)) + if len(segments) == 1 && (len(r.baseURL.Path) > 1 || len(segments[0]) > 1) && strings.HasSuffix(segments[0], "/") { + // preserve any trailing slashes for legacy behavior + r.pathPrefix += "/" + } + return r +} + +// RequestURI overwrites existing path and parameters with the value of the provided server relative +// URI. Some parameters (those in specialParameters) cannot be overwritten. +func (r *Request) RequestURI(uri string) *Request { + if r.err != nil { + return r + } + locator, err := url.Parse(uri) + if err != nil { + r.err = err + return r + } + r.pathPrefix = locator.Path + if len(locator.Query()) > 0 { + if r.params == nil { + r.params = make(url.Values) + } + for k, v := range locator.Query() { + r.params[k] = v + } + } + return r +} + +const ( + // A constant that clients can use to refer in a field selector to the object name field. + // Will be automatically emitted as the correct name for the API version. + nodeUnschedulable = "spec.unschedulable" + objectNameField = "metadata.name" + podHost = "spec.nodeName" + podStatus = "status.phase" + secretType = "type" + + eventReason = "reason" + eventSource = "source" + eventType = "type" + eventInvolvedKind = "involvedObject.kind" + eventInvolvedNamespace = "involvedObject.namespace" + eventInvolvedName = "involvedObject.name" + eventInvolvedUID = "involvedObject.uid" + eventInvolvedAPIVersion = "involvedObject.apiVersion" + eventInvolvedResourceVersion = "involvedObject.resourceVersion" + eventInvolvedFieldPath = "involvedObject.fieldPath" +) + +type clientFieldNameToAPIVersionFieldName map[string]string + +func (c clientFieldNameToAPIVersionFieldName) filterField(field, value string) (newField, newValue string, err error) { + newFieldName, ok := c[field] + if !ok { + return "", "", fmt.Errorf("%v - %v - no field mapping defined", field, value) + } + return newFieldName, value, nil +} + +type resourceTypeToFieldMapping map[string]clientFieldNameToAPIVersionFieldName + +func (r resourceTypeToFieldMapping) filterField(resourceType, field, value string) (newField, newValue string, err error) { + fMapping, ok := r[resourceType] + if !ok { + return "", "", fmt.Errorf("%v - %v - %v - no field mapping defined", resourceType, field, value) + } + return fMapping.filterField(field, value) +} + +type versionToResourceToFieldMapping map[unversioned.GroupVersion]resourceTypeToFieldMapping + +// filterField transforms the given field/value selector for the given groupVersion and resource +func (v versionToResourceToFieldMapping) filterField(groupVersion *unversioned.GroupVersion, resourceType, field, value string) (newField, newValue string, err error) { + rMapping, ok := v[*groupVersion] + if !ok { + // no groupVersion overrides registered, default to identity mapping + return field, value, nil + } + newField, newValue, err = rMapping.filterField(resourceType, field, value) + if err != nil { + // no groupVersionResource overrides registered, default to identity mapping + return field, value, nil + } + return newField, newValue, nil +} + +var fieldMappings = versionToResourceToFieldMapping{ + v1.SchemeGroupVersion: resourceTypeToFieldMapping{ + "nodes": clientFieldNameToAPIVersionFieldName{ + objectNameField: objectNameField, + nodeUnschedulable: nodeUnschedulable, + }, + "pods": clientFieldNameToAPIVersionFieldName{ + podHost: podHost, + podStatus: podStatus, + }, + "secrets": clientFieldNameToAPIVersionFieldName{ + secretType: secretType, + }, + "serviceAccounts": clientFieldNameToAPIVersionFieldName{ + objectNameField: objectNameField, + }, + "endpoints": clientFieldNameToAPIVersionFieldName{ + objectNameField: objectNameField, + }, + "events": clientFieldNameToAPIVersionFieldName{ + objectNameField: objectNameField, + eventReason: eventReason, + eventSource: eventSource, + eventType: eventType, + eventInvolvedKind: eventInvolvedKind, + eventInvolvedNamespace: eventInvolvedNamespace, + eventInvolvedName: eventInvolvedName, + eventInvolvedUID: eventInvolvedUID, + eventInvolvedAPIVersion: eventInvolvedAPIVersion, + eventInvolvedResourceVersion: eventInvolvedResourceVersion, + eventInvolvedFieldPath: eventInvolvedFieldPath, + }, + }, +} + +// FieldsSelectorParam adds the given selector as a query parameter with the name paramName. +func (r *Request) FieldsSelectorParam(s fields.Selector) *Request { + if r.err != nil { + return r + } + if s == nil { + return r + } + if s.Empty() { + return r + } + s2, err := s.Transform(func(field, value string) (newField, newValue string, err error) { + return fieldMappings.filterField(r.content.GroupVersion, r.resource, field, value) + }) + if err != nil { + r.err = err + return r + } + return r.setParam(unversioned.FieldSelectorQueryParam(r.content.GroupVersion.String()), s2.String()) +} + +// LabelsSelectorParam adds the given selector as a query parameter +func (r *Request) LabelsSelectorParam(s labels.Selector) *Request { + if r.err != nil { + return r + } + if s == nil { + return r + } + if s.Empty() { + return r + } + return r.setParam(unversioned.LabelSelectorQueryParam(r.content.GroupVersion.String()), s.String()) +} + +// UintParam creates a query parameter with the given value. +func (r *Request) UintParam(paramName string, u uint64) *Request { + if r.err != nil { + return r + } + return r.setParam(paramName, strconv.FormatUint(u, 10)) +} + +// Param creates a query parameter with the given string value. +func (r *Request) Param(paramName, s string) *Request { + if r.err != nil { + return r + } + return r.setParam(paramName, s) +} + +// VersionedParams will take the provided object, serialize it to a map[string][]string using the +// implicit RESTClient API version and the default parameter codec, and then add those as parameters +// to the request. Use this to provide versioned query parameters from client libraries. +func (r *Request) VersionedParams(obj runtime.Object, codec runtime.ParameterCodec) *Request { + if r.err != nil { + return r + } + params, err := codec.EncodeParameters(obj, *r.content.GroupVersion) + if err != nil { + r.err = err + return r + } + for k, v := range params { + for _, value := range v { + // TODO: Move it to setParam method, once we get rid of + // FieldSelectorParam & LabelSelectorParam methods. + if k == unversioned.LabelSelectorQueryParam(r.content.GroupVersion.String()) && value == "" { + // Don't set an empty selector for backward compatibility. + // Since there is no way to get the difference between empty + // and unspecified string, we don't set it to avoid having + // labelSelector= param in every request. + continue + } + if k == unversioned.FieldSelectorQueryParam(r.content.GroupVersion.String()) { + if len(value) == 0 { + // Don't set an empty selector for backward compatibility. + // Since there is no way to get the difference between empty + // and unspecified string, we don't set it to avoid having + // fieldSelector= param in every request. + continue + } + // TODO: Filtering should be handled somewhere else. + selector, err := fields.ParseSelector(value) + if err != nil { + r.err = fmt.Errorf("unparsable field selector: %v", err) + return r + } + filteredSelector, err := selector.Transform( + func(field, value string) (newField, newValue string, err error) { + return fieldMappings.filterField(r.content.GroupVersion, r.resource, field, value) + }) + if err != nil { + r.err = fmt.Errorf("untransformable field selector: %v", err) + return r + } + value = filteredSelector.String() + } + + r.setParam(k, value) + } + } + return r +} + +func (r *Request) setParam(paramName, value string) *Request { + if specialParams.Has(paramName) { + r.err = fmt.Errorf("must set %v through the corresponding function, not directly.", paramName) + return r + } + if r.params == nil { + r.params = make(url.Values) + } + r.params[paramName] = append(r.params[paramName], value) + return r +} + +func (r *Request) SetHeader(key, value string) *Request { + if r.headers == nil { + r.headers = http.Header{} + } + r.headers.Set(key, value) + return r +} + +// Timeout makes the request use the given duration as a timeout. Sets the "timeout" +// parameter. +func (r *Request) Timeout(d time.Duration) *Request { + if r.err != nil { + return r + } + r.timeout = d + return r +} + +// Body makes the request use obj as the body. Optional. +// If obj is a string, try to read a file of that name. +// If obj is a []byte, send it directly. +// If obj is an io.Reader, use it directly. +// If obj is a runtime.Object, marshal it correctly, and set Content-Type header. +// If obj is a runtime.Object and nil, do nothing. +// Otherwise, set an error. +func (r *Request) Body(obj interface{}) *Request { + if r.err != nil { + return r + } + switch t := obj.(type) { + case string: + data, err := ioutil.ReadFile(t) + if err != nil { + r.err = err + return r + } + glog.V(8).Infof("Request Body: %#v", string(data)) + r.body = bytes.NewReader(data) + case []byte: + glog.V(8).Infof("Request Body: %#v", string(t)) + r.body = bytes.NewReader(t) + case io.Reader: + r.body = t + case runtime.Object: + // callers may pass typed interface pointers, therefore we must check nil with reflection + if reflect.ValueOf(t).IsNil() { + return r + } + data, err := runtime.Encode(r.serializers.Encoder, t) + if err != nil { + r.err = err + return r + } + glog.V(8).Infof("Request Body: %#v", string(data)) + r.body = bytes.NewReader(data) + r.SetHeader("Content-Type", r.content.ContentType) + default: + r.err = fmt.Errorf("unknown type used for body: %+v", obj) + } + return r +} + +// URL returns the current working URL. +func (r *Request) URL() *url.URL { + p := r.pathPrefix + if r.namespaceSet && len(r.namespace) > 0 { + p = path.Join(p, "namespaces", r.namespace) + } + if len(r.resource) != 0 { + p = path.Join(p, strings.ToLower(r.resource)) + } + // Join trims trailing slashes, so preserve r.pathPrefix's trailing slash for backwards compatibility if nothing was changed + if len(r.resourceName) != 0 || len(r.subpath) != 0 || len(r.subresource) != 0 { + p = path.Join(p, r.resourceName, r.subresource, r.subpath) + } + + finalURL := &url.URL{} + if r.baseURL != nil { + *finalURL = *r.baseURL + } + finalURL.Path = p + + query := url.Values{} + for key, values := range r.params { + for _, value := range values { + query.Add(key, value) + } + } + + // timeout is handled specially here. + if r.timeout != 0 { + query.Set("timeout", r.timeout.String()) + } + finalURL.RawQuery = query.Encode() + return finalURL +} + +// finalURLTemplate is similar to URL(), but will make all specific parameter values equal +// - instead of name or namespace, "{name}" and "{namespace}" will be used, and all query +// parameters will be reset. This creates a copy of the request so as not to change the +// underyling object. This means some useful request info (like the types of field +// selectors in use) will be lost. +// TODO: preserve field selector keys +func (r Request) finalURLTemplate() url.URL { + if len(r.resourceName) != 0 { + r.resourceName = "{name}" + } + if r.namespaceSet && len(r.namespace) != 0 { + r.namespace = "{namespace}" + } + newParams := url.Values{} + v := []string{"{value}"} + for k := range r.params { + newParams[k] = v + } + r.params = newParams + url := r.URL() + return *url +} + +func (r *Request) tryThrottle() { + now := time.Now() + if r.throttle != nil { + r.throttle.Accept() + } + if latency := time.Since(now); latency > longThrottleLatency { + glog.V(4).Infof("Throttling request took %v, request: %s:%s", latency, r.verb, r.URL().String()) + } +} + +// Watch attempts to begin watching the requested location. +// Returns a watch.Interface, or an error. +func (r *Request) Watch() (watch.Interface, error) { + // We specifically don't want to rate limit watches, so we + // don't use r.throttle here. + if r.err != nil { + return nil, r.err + } + if r.serializers.Framer == nil { + return nil, fmt.Errorf("watching resources is not possible with this client (content-type: %s)", r.content.ContentType) + } + + url := r.URL().String() + req, err := http.NewRequest(r.verb, url, r.body) + if err != nil { + return nil, err + } + req.Header = r.headers + client := r.client + if client == nil { + client = http.DefaultClient + } + r.backoffMgr.Sleep(r.backoffMgr.CalculateBackoff(r.URL())) + resp, err := client.Do(req) + updateURLMetrics(r, resp, err) + if r.baseURL != nil { + if err != nil { + r.backoffMgr.UpdateBackoff(r.baseURL, err, 0) + } else { + r.backoffMgr.UpdateBackoff(r.baseURL, err, resp.StatusCode) + } + } + if err != nil { + // The watch stream mechanism handles many common partial data errors, so closed + // connections can be retried in many cases. + if net.IsProbableEOF(err) { + return watch.NewEmptyWatch(), nil + } + return nil, err + } + if resp.StatusCode != http.StatusOK { + defer resp.Body.Close() + if result := r.transformResponse(resp, req); result.err != nil { + return nil, result.err + } + return nil, fmt.Errorf("for request '%+v', got status: %v", url, resp.StatusCode) + } + framer := r.serializers.Framer.NewFrameReader(resp.Body) + decoder := streaming.NewDecoder(framer, r.serializers.StreamingSerializer) + return watch.NewStreamWatcher(versioned.NewDecoder(decoder, r.serializers.Decoder)), nil +} + +// updateURLMetrics is a convenience function for pushing metrics. +// It also handles corner cases for incomplete/invalid request data. +func updateURLMetrics(req *Request, resp *http.Response, err error) { + url := "none" + if req.baseURL != nil { + url = req.baseURL.Host + } + + // If we have an error (i.e. apiserver down) we report that as a metric label. + if err != nil { + metrics.RequestResult.Increment(err.Error(), req.verb, url) + } else { + //Metrics for failure codes + metrics.RequestResult.Increment(strconv.Itoa(resp.StatusCode), req.verb, url) + } +} + +// Stream formats and executes the request, and offers streaming of the response. +// Returns io.ReadCloser which could be used for streaming of the response, or an error +// Any non-2xx http status code causes an error. If we get a non-2xx code, we try to convert the body into an APIStatus object. +// If we can, we return that as an error. Otherwise, we create an error that lists the http status and the content of the response. +func (r *Request) Stream() (io.ReadCloser, error) { + if r.err != nil { + return nil, r.err + } + + r.tryThrottle() + + url := r.URL().String() + req, err := http.NewRequest(r.verb, url, nil) + if err != nil { + return nil, err + } + req.Header = r.headers + client := r.client + if client == nil { + client = http.DefaultClient + } + r.backoffMgr.Sleep(r.backoffMgr.CalculateBackoff(r.URL())) + resp, err := client.Do(req) + updateURLMetrics(r, resp, err) + if r.baseURL != nil { + if err != nil { + r.backoffMgr.UpdateBackoff(r.URL(), err, 0) + } else { + r.backoffMgr.UpdateBackoff(r.URL(), err, resp.StatusCode) + } + } + if err != nil { + return nil, err + } + + switch { + case (resp.StatusCode >= 200) && (resp.StatusCode < 300): + return resp.Body, nil + + default: + // ensure we close the body before returning the error + defer resp.Body.Close() + + // we have a decent shot at taking the object returned, parsing it as a status object and returning a more normal error + bodyBytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("%v while accessing %v", resp.Status, url) + } + + // TODO: Check ContentType. + if runtimeObject, err := runtime.Decode(r.serializers.Decoder, bodyBytes); err == nil { + statusError := errors.FromObject(runtimeObject) + + if _, ok := statusError.(errors.APIStatus); ok { + return nil, statusError + } + } + + bodyText := string(bodyBytes) + return nil, fmt.Errorf("%s while accessing %v: %s", resp.Status, url, bodyText) + } +} + +// request connects to the server and invokes the provided function when a server response is +// received. It handles retry behavior and up front validation of requests. It will invoke +// fn at most once. It will return an error if a problem occurred prior to connecting to the +// server - the provided function is responsible for handling server errors. +func (r *Request) request(fn func(*http.Request, *http.Response)) error { + //Metrics for total request latency + start := time.Now() + defer func() { + metrics.RequestLatency.Observe(r.verb, r.finalURLTemplate(), time.Since(start)) + }() + + if r.err != nil { + glog.V(4).Infof("Error in request: %v", r.err) + return r.err + } + + // TODO: added to catch programmer errors (invoking operations with an object with an empty namespace) + if (r.verb == "GET" || r.verb == "PUT" || r.verb == "DELETE") && r.namespaceSet && len(r.resourceName) > 0 && len(r.namespace) == 0 { + return fmt.Errorf("an empty namespace may not be set when a resource name is provided") + } + if (r.verb == "POST") && r.namespaceSet && len(r.namespace) == 0 { + return fmt.Errorf("an empty namespace may not be set during creation") + } + + client := r.client + if client == nil { + client = http.DefaultClient + } + + // Right now we make about ten retry attempts if we get a Retry-After response. + // TODO: Change to a timeout based approach. + maxRetries := 10 + retries := 0 + for { + url := r.URL().String() + req, err := http.NewRequest(r.verb, url, r.body) + if err != nil { + return err + } + req.Header = r.headers + + r.backoffMgr.Sleep(r.backoffMgr.CalculateBackoff(r.URL())) + resp, err := client.Do(req) + updateURLMetrics(r, resp, err) + if err != nil { + r.backoffMgr.UpdateBackoff(r.URL(), err, 0) + } else { + r.backoffMgr.UpdateBackoff(r.URL(), err, resp.StatusCode) + } + if err != nil { + return err + } + + done := func() bool { + // Ensure the response body is fully read and closed + // before we reconnect, so that we reuse the same TCP + // connection. + defer func() { + const maxBodySlurpSize = 2 << 10 + if resp.ContentLength <= maxBodySlurpSize { + io.Copy(ioutil.Discard, &io.LimitedReader{R: resp.Body, N: maxBodySlurpSize}) + } + resp.Body.Close() + }() + + retries++ + if seconds, wait := checkWait(resp); wait && retries < maxRetries { + if seeker, ok := r.body.(io.Seeker); ok && r.body != nil { + _, err := seeker.Seek(0, 0) + if err != nil { + glog.V(4).Infof("Could not retry request, can't Seek() back to beginning of body for %T", r.body) + fn(req, resp) + return true + } + } + + glog.V(4).Infof("Got a Retry-After %s response for attempt %d to %v", seconds, retries, url) + r.backoffMgr.Sleep(time.Duration(seconds) * time.Second) + return false + } + fn(req, resp) + return true + }() + if done { + return nil + } + } +} + +// Do formats and executes the request. Returns a Result object for easy response +// processing. +// +// Error type: +// * If the request can't be constructed, or an error happened earlier while building its +// arguments: *RequestConstructionError +// * If the server responds with a status: *errors.StatusError or *errors.UnexpectedObjectError +// * http.Client.Do errors are returned directly. +func (r *Request) Do() Result { + r.tryThrottle() + + var result Result + err := r.request(func(req *http.Request, resp *http.Response) { + result = r.transformResponse(resp, req) + }) + if err != nil { + return Result{err: err} + } + return result +} + +// DoRaw executes the request but does not process the response body. +func (r *Request) DoRaw() ([]byte, error) { + r.tryThrottle() + + var result Result + err := r.request(func(req *http.Request, resp *http.Response) { + result.body, result.err = ioutil.ReadAll(resp.Body) + if resp.StatusCode < http.StatusOK || resp.StatusCode > http.StatusPartialContent { + result.err = r.transformUnstructuredResponseError(resp, req, result.body) + } + }) + if err != nil { + return nil, err + } + return result.body, result.err +} + +// transformResponse converts an API response into a structured API object +func (r *Request) transformResponse(resp *http.Response, req *http.Request) Result { + var body []byte + if resp.Body != nil { + if data, err := ioutil.ReadAll(resp.Body); err == nil { + body = data + } + } + + if glog.V(8) { + switch { + case bytes.IndexFunc(body, func(r rune) bool { return r < 0x0a }) != -1: + glog.Infof("Response Body:\n%s", hex.Dump(body)) + default: + glog.Infof("Response Body: %s", string(body)) + } + } + + // verify the content type is accurate + contentType := resp.Header.Get("Content-Type") + decoder := r.serializers.Decoder + if len(contentType) > 0 && (decoder == nil || (len(r.content.ContentType) > 0 && contentType != r.content.ContentType)) { + mediaType, params, err := mime.ParseMediaType(contentType) + if err != nil { + return Result{err: errors.NewInternalError(err)} + } + decoder, err = r.serializers.RenegotiatedDecoder(mediaType, params) + if err != nil { + // if we fail to negotiate a decoder, treat this as an unstructured error + switch { + case resp.StatusCode == http.StatusSwitchingProtocols: + // no-op, we've been upgraded + case resp.StatusCode < http.StatusOK || resp.StatusCode > http.StatusPartialContent: + return Result{err: r.transformUnstructuredResponseError(resp, req, body)} + } + return Result{ + body: body, + contentType: contentType, + statusCode: resp.StatusCode, + } + } + } + + // Did the server give us a status response? + isStatusResponse := false + status := &unversioned.Status{} + // Because release-1.1 server returns Status with empty APIVersion at paths + // to the Extensions resources, we need to use DecodeInto here to provide + // default groupVersion, otherwise a status response won't be correctly + // decoded. + err := runtime.DecodeInto(decoder, body, status) + if err == nil && len(status.Status) > 0 { + isStatusResponse = true + } + + switch { + case resp.StatusCode == http.StatusSwitchingProtocols: + // no-op, we've been upgraded + case resp.StatusCode < http.StatusOK || resp.StatusCode > http.StatusPartialContent: + if !isStatusResponse { + return Result{err: r.transformUnstructuredResponseError(resp, req, body)} + } + return Result{err: errors.FromObject(status)} + } + + // If the server gave us a status back, look at what it was. + success := resp.StatusCode >= http.StatusOK && resp.StatusCode <= http.StatusPartialContent + if isStatusResponse && (status.Status != unversioned.StatusSuccess && !success) { + // "Failed" requests are clearly just an error and it makes sense to return them as such. + return Result{err: errors.FromObject(status)} + } + + return Result{ + body: body, + contentType: contentType, + statusCode: resp.StatusCode, + decoder: decoder, + } +} + +// transformUnstructuredResponseError handles an error from the server that is not in a structured form. +// It is expected to transform any response that is not recognizable as a clear server sent error from the +// K8S API using the information provided with the request. In practice, HTTP proxies and client libraries +// introduce a level of uncertainty to the responses returned by servers that in common use result in +// unexpected responses. The rough structure is: +// +// 1. Assume the server sends you something sane - JSON + well defined error objects + proper codes +// - this is the happy path +// - when you get this output, trust what the server sends +// 2. Guard against empty fields / bodies in received JSON and attempt to cull sufficient info from them to +// generate a reasonable facsimile of the original failure. +// - Be sure to use a distinct error type or flag that allows a client to distinguish between this and error 1 above +// 3. Handle true disconnect failures / completely malformed data by moving up to a more generic client error +// 4. Distinguish between various connection failures like SSL certificates, timeouts, proxy errors, unexpected +// initial contact, the presence of mismatched body contents from posted content types +// - Give these a separate distinct error type and capture as much as possible of the original message +// +// TODO: introduce transformation of generic http.Client.Do() errors that separates 4. +func (r *Request) transformUnstructuredResponseError(resp *http.Response, req *http.Request, body []byte) error { + if body == nil && resp.Body != nil { + if data, err := ioutil.ReadAll(resp.Body); err == nil { + body = data + } + } + glog.V(8).Infof("Response Body: %#v", string(body)) + + message := "unknown" + if isTextResponse(resp) { + message = strings.TrimSpace(string(body)) + } + retryAfter, _ := retryAfterSeconds(resp) + return errors.NewGenericServerResponse( + resp.StatusCode, + req.Method, + unversioned.GroupResource{ + Group: r.content.GroupVersion.Group, + Resource: r.resource, + }, + r.resourceName, + message, + retryAfter, + true, + ) +} + +// isTextResponse returns true if the response appears to be a textual media type. +func isTextResponse(resp *http.Response) bool { + contentType := resp.Header.Get("Content-Type") + if len(contentType) == 0 { + return true + } + media, _, err := mime.ParseMediaType(contentType) + if err != nil { + return false + } + return strings.HasPrefix(media, "text/") +} + +// checkWait returns true along with a number of seconds if the server instructed us to wait +// before retrying. +func checkWait(resp *http.Response) (int, bool) { + switch r := resp.StatusCode; { + // any 500 error code and 429 can trigger a wait + case r == errors.StatusTooManyRequests, r >= 500: + default: + return 0, false + } + i, ok := retryAfterSeconds(resp) + return i, ok +} + +// retryAfterSeconds returns the value of the Retry-After header and true, or 0 and false if +// the header was missing or not a valid number. +func retryAfterSeconds(resp *http.Response) (int, bool) { + if h := resp.Header.Get("Retry-After"); len(h) > 0 { + if i, err := strconv.Atoi(h); err == nil { + return i, true + } + } + return 0, false +} + +// Result contains the result of calling Request.Do(). +type Result struct { + body []byte + contentType string + err error + statusCode int + + decoder runtime.Decoder +} + +// Raw returns the raw result. +func (r Result) Raw() ([]byte, error) { + return r.body, r.err +} + +// Get returns the result as an object. +func (r Result) Get() (runtime.Object, error) { + if r.err != nil { + return nil, r.err + } + if r.decoder == nil { + return nil, fmt.Errorf("serializer for %s doesn't exist", r.contentType) + } + return runtime.Decode(r.decoder, r.body) +} + +// StatusCode returns the HTTP status code of the request. (Only valid if no +// error was returned.) +func (r Result) StatusCode(statusCode *int) Result { + *statusCode = r.statusCode + return r +} + +// Into stores the result into obj, if possible. If obj is nil it is ignored. +func (r Result) Into(obj runtime.Object) error { + if r.err != nil { + return r.err + } + if r.decoder == nil { + return fmt.Errorf("serializer for %s doesn't exist", r.contentType) + } + return runtime.DecodeInto(r.decoder, r.body, obj) +} + +// WasCreated updates the provided bool pointer to whether the server returned +// 201 created or a different response. +func (r Result) WasCreated(wasCreated *bool) Result { + *wasCreated = r.statusCode == http.StatusCreated + return r +} + +// Error returns the error executing the request, nil if no error occurred. +// See the Request.Do() comment for what errors you might get. +func (r Result) Error() error { + return r.err +} diff --git a/vendor/k8s.io/client-go/1.4/rest/transport.go b/vendor/k8s.io/client-go/1.4/rest/transport.go new file mode 100644 index 00000000..cccea28e --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/rest/transport.go @@ -0,0 +1,94 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "crypto/tls" + "net/http" + + "k8s.io/client-go/1.4/transport" +) + +// TLSConfigFor returns a tls.Config that will provide the transport level security defined +// by the provided Config. Will return nil if no transport level security is requested. +func TLSConfigFor(config *Config) (*tls.Config, error) { + cfg, err := config.transportConfig() + if err != nil { + return nil, err + } + return transport.TLSConfigFor(cfg) +} + +// TransportFor returns an http.RoundTripper that will provide the authentication +// or transport level security defined by the provided Config. Will return the +// default http.DefaultTransport if no special case behavior is needed. +func TransportFor(config *Config) (http.RoundTripper, error) { + cfg, err := config.transportConfig() + if err != nil { + return nil, err + } + return transport.New(cfg) +} + +// HTTPWrappersForConfig wraps a round tripper with any relevant layered behavior from the +// config. Exposed to allow more clients that need HTTP-like behavior but then must hijack +// the underlying connection (like WebSocket or HTTP2 clients). Pure HTTP clients should use +// the higher level TransportFor or RESTClientFor methods. +func HTTPWrappersForConfig(config *Config, rt http.RoundTripper) (http.RoundTripper, error) { + cfg, err := config.transportConfig() + if err != nil { + return nil, err + } + return transport.HTTPWrappersForConfig(cfg, rt) +} + +// transportConfig converts a client config to an appropriate transport config. +func (c *Config) transportConfig() (*transport.Config, error) { + wt := c.WrapTransport + if c.AuthProvider != nil { + provider, err := GetAuthProvider(c.Host, c.AuthProvider, c.AuthConfigPersister) + if err != nil { + return nil, err + } + if wt != nil { + previousWT := wt + wt = func(rt http.RoundTripper) http.RoundTripper { + return provider.WrapTransport(previousWT(rt)) + } + } else { + wt = provider.WrapTransport + } + } + return &transport.Config{ + UserAgent: c.UserAgent, + Transport: c.Transport, + WrapTransport: wt, + TLS: transport.TLSConfig{ + CAFile: c.CAFile, + CAData: c.CAData, + CertFile: c.CertFile, + CertData: c.CertData, + KeyFile: c.KeyFile, + KeyData: c.KeyData, + Insecure: c.Insecure, + }, + Username: c.Username, + Password: c.Password, + BearerToken: c.BearerToken, + Impersonate: c.Impersonate, + }, nil +} diff --git a/vendor/k8s.io/client-go/1.4/rest/url_utils.go b/vendor/k8s.io/client-go/1.4/rest/url_utils.go new file mode 100644 index 00000000..7443c214 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/rest/url_utils.go @@ -0,0 +1,93 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "fmt" + "net/url" + "path" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +// DefaultServerURL converts a host, host:port, or URL string to the default base server API path +// to use with a Client at a given API version following the standard conventions for a +// Kubernetes API. +func DefaultServerURL(host, apiPath string, groupVersion unversioned.GroupVersion, defaultTLS bool) (*url.URL, string, error) { + if host == "" { + return nil, "", fmt.Errorf("host must be a URL or a host:port pair") + } + base := host + hostURL, err := url.Parse(base) + if err != nil { + return nil, "", err + } + if hostURL.Scheme == "" || hostURL.Host == "" { + scheme := "http://" + if defaultTLS { + scheme = "https://" + } + hostURL, err = url.Parse(scheme + base) + if err != nil { + return nil, "", err + } + if hostURL.Path != "" && hostURL.Path != "/" { + return nil, "", fmt.Errorf("host must be a URL or a host:port pair: %q", base) + } + } + + // hostURL.Path is optional; a non-empty Path is treated as a prefix that is to be applied to + // all URIs used to access the host. this is useful when there's a proxy in front of the + // apiserver that has relocated the apiserver endpoints, forwarding all requests from, for + // example, /a/b/c to the apiserver. in this case the Path should be /a/b/c. + // + // if running without a frontend proxy (that changes the location of the apiserver), then + // hostURL.Path should be blank. + // + // versionedAPIPath, a path relative to baseURL.Path, points to a versioned API base + versionedAPIPath := path.Join("/", apiPath) + + // Add the version to the end of the path + if len(groupVersion.Group) > 0 { + versionedAPIPath = path.Join(versionedAPIPath, groupVersion.Group, groupVersion.Version) + + } else { + versionedAPIPath = path.Join(versionedAPIPath, groupVersion.Version) + + } + + return hostURL, versionedAPIPath, nil +} + +// defaultServerUrlFor is shared between IsConfigTransportTLS and RESTClientFor. It +// requires Host and Version to be set prior to being called. +func defaultServerUrlFor(config *Config) (*url.URL, string, error) { + // TODO: move the default to secure when the apiserver supports TLS by default + // config.Insecure is taken to mean "I want HTTPS but don't bother checking the certs against a CA." + hasCA := len(config.CAFile) != 0 || len(config.CAData) != 0 + hasCert := len(config.CertFile) != 0 || len(config.CertData) != 0 + defaultTLS := hasCA || hasCert || config.Insecure + host := config.Host + if host == "" { + host = "localhost" + } + + if config.GroupVersion != nil { + return DefaultServerURL(host, config.APIPath, *config.GroupVersion, defaultTLS) + } + return DefaultServerURL(host, config.APIPath, unversioned.GroupVersion{}, defaultTLS) +} diff --git a/vendor/k8s.io/client-go/1.4/rest/urlbackoff.go b/vendor/k8s.io/client-go/1.4/rest/urlbackoff.go new file mode 100644 index 00000000..bdce9910 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/rest/urlbackoff.go @@ -0,0 +1,107 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "net/url" + "time" + + "github.com/golang/glog" + "k8s.io/client-go/1.4/pkg/util/flowcontrol" + "k8s.io/client-go/1.4/pkg/util/sets" +) + +// Set of resp. Codes that we backoff for. +// In general these should be errors that indicate a server is overloaded. +// These shouldn't be configured by any user, we set them based on conventions +// described in +var serverIsOverloadedSet = sets.NewInt(429) +var maxResponseCode = 499 + +type BackoffManager interface { + UpdateBackoff(actualUrl *url.URL, err error, responseCode int) + CalculateBackoff(actualUrl *url.URL) time.Duration + Sleep(d time.Duration) +} + +// URLBackoff struct implements the semantics on top of Backoff which +// we need for URL specific exponential backoff. +type URLBackoff struct { + // Uses backoff as underlying implementation. + Backoff *flowcontrol.Backoff +} + +// NoBackoff is a stub implementation, can be used for mocking or else as a default. +type NoBackoff struct { +} + +func (n *NoBackoff) UpdateBackoff(actualUrl *url.URL, err error, responseCode int) { + // do nothing. +} + +func (n *NoBackoff) CalculateBackoff(actualUrl *url.URL) time.Duration { + return 0 * time.Second +} + +func (n *NoBackoff) Sleep(d time.Duration) { + time.Sleep(d) +} + +// Disable makes the backoff trivial, i.e., sets it to zero. This might be used +// by tests which want to run 1000s of mock requests without slowing down. +func (b *URLBackoff) Disable() { + glog.V(4).Infof("Disabling backoff strategy") + b.Backoff = flowcontrol.NewBackOff(0*time.Second, 0*time.Second) +} + +// baseUrlKey returns the key which urls will be mapped to. +// For example, 127.0.0.1:8080/api/v2/abcde -> 127.0.0.1:8080. +func (b *URLBackoff) baseUrlKey(rawurl *url.URL) string { + // Simple implementation for now, just the host. + // We may backoff specific paths (i.e. "pods") differentially + // in the future. + host, err := url.Parse(rawurl.String()) + if err != nil { + glog.V(4).Infof("Error extracting url: %v", rawurl) + panic("bad url!") + } + return host.Host +} + +// UpdateBackoff updates backoff metadata +func (b *URLBackoff) UpdateBackoff(actualUrl *url.URL, err error, responseCode int) { + // range for retry counts that we store is [0,13] + if responseCode > maxResponseCode || serverIsOverloadedSet.Has(responseCode) { + b.Backoff.Next(b.baseUrlKey(actualUrl), b.Backoff.Clock.Now()) + return + } else if responseCode >= 300 || err != nil { + glog.V(4).Infof("Client is returning errors: code %v, error %v", responseCode, err) + } + + //If we got this far, there is no backoff required for this URL anymore. + b.Backoff.Reset(b.baseUrlKey(actualUrl)) +} + +// CalculateBackoff takes a url and back's off exponentially, +// based on its knowledge of existing failures. +func (b *URLBackoff) CalculateBackoff(actualUrl *url.URL) time.Duration { + return b.Backoff.Get(b.baseUrlKey(actualUrl)) +} + +func (b *URLBackoff) Sleep(d time.Duration) { + b.Backoff.Clock.Sleep(d) +} diff --git a/vendor/k8s.io/client-go/1.4/rest/versions.go b/vendor/k8s.io/client-go/1.4/rest/versions.go new file mode 100644 index 00000000..6fd6a9b6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/rest/versions.go @@ -0,0 +1,88 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package rest + +import ( + "encoding/json" + "fmt" + "net/http" + "path" + + "k8s.io/client-go/1.4/pkg/api/unversioned" +) + +const ( + legacyAPIPath = "/api" + defaultAPIPath = "/apis" +) + +// TODO: Is this obsoleted by the discovery client? + +// ServerAPIVersions returns the GroupVersions supported by the API server. +// It creates a RESTClient based on the passed in config, but it doesn't rely +// on the Version and Codec of the config, because it uses AbsPath and +// takes the raw response. +func ServerAPIVersions(c *Config) (groupVersions []string, err error) { + transport, err := TransportFor(c) + if err != nil { + return nil, err + } + client := http.Client{Transport: transport} + + configCopy := *c + configCopy.GroupVersion = nil + configCopy.APIPath = "" + baseURL, _, err := defaultServerUrlFor(&configCopy) + if err != nil { + return nil, err + } + // Get the groupVersions exposed at /api + originalPath := baseURL.Path + baseURL.Path = path.Join(originalPath, legacyAPIPath) + resp, err := client.Get(baseURL.String()) + if err != nil { + return nil, err + } + var v unversioned.APIVersions + defer resp.Body.Close() + err = json.NewDecoder(resp.Body).Decode(&v) + if err != nil { + return nil, fmt.Errorf("unexpected error: %v", err) + } + + groupVersions = append(groupVersions, v.Versions...) + // Get the groupVersions exposed at /apis + baseURL.Path = path.Join(originalPath, defaultAPIPath) + resp2, err := client.Get(baseURL.String()) + if err != nil { + return nil, err + } + var apiGroupList unversioned.APIGroupList + defer resp2.Body.Close() + err = json.NewDecoder(resp2.Body).Decode(&apiGroupList) + if err != nil { + return nil, fmt.Errorf("unexpected error: %v", err) + } + + for _, g := range apiGroupList.Groups { + for _, gv := range g.Versions { + groupVersions = append(groupVersions, gv.GroupVersion) + } + } + + return groupVersions, nil +} diff --git a/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/helpers.go b/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/helpers.go new file mode 100644 index 00000000..43e26487 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/helpers.go @@ -0,0 +1,183 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "encoding/base64" + "errors" + "fmt" + "io/ioutil" + "os" + "path" + "path/filepath" +) + +func init() { + sDec, _ := base64.StdEncoding.DecodeString("REDACTED+") + redactedBytes = []byte(string(sDec)) +} + +// IsConfigEmpty returns true if the config is empty. +func IsConfigEmpty(config *Config) bool { + return len(config.AuthInfos) == 0 && len(config.Clusters) == 0 && len(config.Contexts) == 0 && + len(config.CurrentContext) == 0 && + len(config.Preferences.Extensions) == 0 && !config.Preferences.Colors && + len(config.Extensions) == 0 +} + +// MinifyConfig read the current context and uses that to keep only the relevant pieces of config +// This is useful for making secrets based on kubeconfig files +func MinifyConfig(config *Config) error { + if len(config.CurrentContext) == 0 { + return errors.New("current-context must exist in order to minify") + } + + currContext, exists := config.Contexts[config.CurrentContext] + if !exists { + return fmt.Errorf("cannot locate context %v", config.CurrentContext) + } + + newContexts := map[string]*Context{} + newContexts[config.CurrentContext] = currContext + + newClusters := map[string]*Cluster{} + if len(currContext.Cluster) > 0 { + if _, exists := config.Clusters[currContext.Cluster]; !exists { + return fmt.Errorf("cannot locate cluster %v", currContext.Cluster) + } + + newClusters[currContext.Cluster] = config.Clusters[currContext.Cluster] + } + + newAuthInfos := map[string]*AuthInfo{} + if len(currContext.AuthInfo) > 0 { + if _, exists := config.AuthInfos[currContext.AuthInfo]; !exists { + return fmt.Errorf("cannot locate user %v", currContext.AuthInfo) + } + + newAuthInfos[currContext.AuthInfo] = config.AuthInfos[currContext.AuthInfo] + } + + config.AuthInfos = newAuthInfos + config.Clusters = newClusters + config.Contexts = newContexts + + return nil +} + +var redactedBytes []byte + +// Flatten redacts raw data entries from the config object for a human-readable view. +func ShortenConfig(config *Config) { + // trick json encoder into printing a human readable string in the raw data + // by base64 decoding what we want to print. Relies on implementation of + // http://golang.org/pkg/encoding/json/#Marshal using base64 to encode []byte + for key, authInfo := range config.AuthInfos { + if len(authInfo.ClientKeyData) > 0 { + authInfo.ClientKeyData = redactedBytes + } + if len(authInfo.ClientCertificateData) > 0 { + authInfo.ClientCertificateData = redactedBytes + } + config.AuthInfos[key] = authInfo + } + for key, cluster := range config.Clusters { + if len(cluster.CertificateAuthorityData) > 0 { + cluster.CertificateAuthorityData = redactedBytes + } + config.Clusters[key] = cluster + } +} + +// Flatten changes the config object into a self contained config (useful for making secrets) +func FlattenConfig(config *Config) error { + for key, authInfo := range config.AuthInfos { + baseDir, err := MakeAbs(path.Dir(authInfo.LocationOfOrigin), "") + if err != nil { + return err + } + + if err := FlattenContent(&authInfo.ClientCertificate, &authInfo.ClientCertificateData, baseDir); err != nil { + return err + } + if err := FlattenContent(&authInfo.ClientKey, &authInfo.ClientKeyData, baseDir); err != nil { + return err + } + + config.AuthInfos[key] = authInfo + } + for key, cluster := range config.Clusters { + baseDir, err := MakeAbs(path.Dir(cluster.LocationOfOrigin), "") + if err != nil { + return err + } + + if err := FlattenContent(&cluster.CertificateAuthority, &cluster.CertificateAuthorityData, baseDir); err != nil { + return err + } + + config.Clusters[key] = cluster + } + + return nil +} + +func FlattenContent(path *string, contents *[]byte, baseDir string) error { + if len(*path) != 0 { + if len(*contents) > 0 { + return errors.New("cannot have values for both path and contents") + } + + var err error + absPath := ResolvePath(*path, baseDir) + *contents, err = ioutil.ReadFile(absPath) + if err != nil { + return err + } + + *path = "" + } + + return nil +} + +// ResolvePath returns the path as an absolute paths, relative to the given base directory +func ResolvePath(path string, base string) string { + // Don't resolve empty paths + if len(path) > 0 { + // Don't resolve absolute paths + if !filepath.IsAbs(path) { + return filepath.Join(base, path) + } + } + + return path +} + +func MakeAbs(path, base string) (string, error) { + if filepath.IsAbs(path) { + return path, nil + } + if len(base) == 0 { + cwd, err := os.Getwd() + if err != nil { + return "", err + } + base = cwd + } + return filepath.Join(base, path), nil +} diff --git a/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/register.go b/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/register.go new file mode 100644 index 00000000..4597ae6f --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/register.go @@ -0,0 +1,46 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/client-go/1.4/pkg/api/unversioned" + "k8s.io/client-go/1.4/pkg/runtime" +) + +// SchemeGroupVersion is group version used to register these objects +// TODO this should be in the "kubeconfig" group +var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: runtime.APIVersionInternal} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Config{}, + ) + return nil +} + +func (obj *Config) GetObjectKind() unversioned.ObjectKind { return obj } +func (obj *Config) SetGroupVersionKind(gvk unversioned.GroupVersionKind) { + obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind() +} +func (obj *Config) GroupVersionKind() unversioned.GroupVersionKind { + return unversioned.FromAPIVersionAndKind(obj.APIVersion, obj.Kind) +} diff --git a/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/types.go b/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/types.go new file mode 100644 index 00000000..c8c5dce9 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/tools/clientcmd/api/types.go @@ -0,0 +1,154 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/client-go/1.4/pkg/runtime" +) + +// Where possible, json tags match the cli argument names. +// Top level config objects and all values required for proper functioning are not "omitempty". Any truly optional piece of config is allowed to be omitted. + +// Config holds the information needed to build connect to remote kubernetes clusters as a given user +// IMPORTANT if you add fields to this struct, please update IsConfigEmpty() +type Config struct { + // Legacy field from pkg/api/types.go TypeMeta. + // TODO(jlowdermilk): remove this after eliminating downstream dependencies. + Kind string `json:"kind,omitempty"` + // DEPRECATED: APIVersion is the preferred api version for communicating with the kubernetes cluster (v1, v2, etc). + // Because a cluster can run multiple API groups and potentially multiple versions of each, it no longer makes sense to specify + // a single value for the cluster version. + // This field isn't really needed anyway, so we are deprecating it without replacement. + // It will be ignored if it is present. + APIVersion string `json:"apiVersion,omitempty"` + // Preferences holds general information to be use for cli interactions + Preferences Preferences `json:"preferences"` + // Clusters is a map of referencable names to cluster configs + Clusters map[string]*Cluster `json:"clusters"` + // AuthInfos is a map of referencable names to user configs + AuthInfos map[string]*AuthInfo `json:"users"` + // Contexts is a map of referencable names to context configs + Contexts map[string]*Context `json:"contexts"` + // CurrentContext is the name of the context that you would like to use by default + CurrentContext string `json:"current-context"` + // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields + Extensions map[string]runtime.Object `json:"extensions,omitempty"` +} + +// IMPORTANT if you add fields to this struct, please update IsConfigEmpty() +type Preferences struct { + Colors bool `json:"colors,omitempty"` + // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields + Extensions map[string]runtime.Object `json:"extensions,omitempty"` +} + +// Cluster contains information about how to communicate with a kubernetes cluster +type Cluster struct { + // LocationOfOrigin indicates where this object came from. It is used for round tripping config post-merge, but never serialized. + LocationOfOrigin string + // Server is the address of the kubernetes cluster (https://hostname:port). + Server string `json:"server"` + // APIVersion is the preferred api version for communicating with the kubernetes cluster (v1, v2, etc). + APIVersion string `json:"api-version,omitempty"` + // InsecureSkipTLSVerify skips the validity check for the server's certificate. This will make your HTTPS connections insecure. + InsecureSkipTLSVerify bool `json:"insecure-skip-tls-verify,omitempty"` + // CertificateAuthority is the path to a cert file for the certificate authority. + CertificateAuthority string `json:"certificate-authority,omitempty"` + // CertificateAuthorityData contains PEM-encoded certificate authority certificates. Overrides CertificateAuthority + CertificateAuthorityData []byte `json:"certificate-authority-data,omitempty"` + // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields + Extensions map[string]runtime.Object `json:"extensions,omitempty"` +} + +// AuthInfo contains information that describes identity information. This is use to tell the kubernetes cluster who you are. +type AuthInfo struct { + // LocationOfOrigin indicates where this object came from. It is used for round tripping config post-merge, but never serialized. + LocationOfOrigin string + // ClientCertificate is the path to a client cert file for TLS. + ClientCertificate string `json:"client-certificate,omitempty"` + // ClientCertificateData contains PEM-encoded data from a client cert file for TLS. Overrides ClientCertificate + ClientCertificateData []byte `json:"client-certificate-data,omitempty"` + // ClientKey is the path to a client key file for TLS. + ClientKey string `json:"client-key,omitempty"` + // ClientKeyData contains PEM-encoded data from a client key file for TLS. Overrides ClientKey + ClientKeyData []byte `json:"client-key-data,omitempty"` + // Token is the bearer token for authentication to the kubernetes cluster. + Token string `json:"token,omitempty"` + // TokenFile is a pointer to a file that contains a bearer token (as described above). If both Token and TokenFile are present, Token takes precedence. + TokenFile string `json:"tokenFile,omitempty"` + // Impersonate is the username to act-as. + Impersonate string `json:"act-as,omitempty"` + // Username is the username for basic authentication to the kubernetes cluster. + Username string `json:"username,omitempty"` + // Password is the password for basic authentication to the kubernetes cluster. + Password string `json:"password,omitempty"` + // AuthProvider specifies a custom authentication plugin for the kubernetes cluster. + AuthProvider *AuthProviderConfig `json:"auth-provider,omitempty"` + // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields + Extensions map[string]runtime.Object `json:"extensions,omitempty"` +} + +// Context is a tuple of references to a cluster (how do I communicate with a kubernetes cluster), a user (how do I identify myself), and a namespace (what subset of resources do I want to work with) +type Context struct { + // LocationOfOrigin indicates where this object came from. It is used for round tripping config post-merge, but never serialized. + LocationOfOrigin string + // Cluster is the name of the cluster for this context + Cluster string `json:"cluster"` + // AuthInfo is the name of the authInfo for this context + AuthInfo string `json:"user"` + // Namespace is the default namespace to use on unspecified requests + Namespace string `json:"namespace,omitempty"` + // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields + Extensions map[string]runtime.Object `json:"extensions,omitempty"` +} + +// AuthProviderConfig holds the configuration for a specified auth provider. +type AuthProviderConfig struct { + Name string `json:"name"` + Config map[string]string `json:"config,omitempty"` +} + +// NewConfig is a convenience function that returns a new Config object with non-nil maps +func NewConfig() *Config { + return &Config{ + Preferences: *NewPreferences(), + Clusters: make(map[string]*Cluster), + AuthInfos: make(map[string]*AuthInfo), + Contexts: make(map[string]*Context), + Extensions: make(map[string]runtime.Object), + } +} + +// NewConfig is a convenience function that returns a new Config object with non-nil maps +func NewContext() *Context { + return &Context{Extensions: make(map[string]runtime.Object)} +} + +// NewConfig is a convenience function that returns a new Config object with non-nil maps +func NewCluster() *Cluster { + return &Cluster{Extensions: make(map[string]runtime.Object)} +} + +// NewConfig is a convenience function that returns a new Config object with non-nil maps +func NewAuthInfo() *AuthInfo { + return &AuthInfo{Extensions: make(map[string]runtime.Object)} +} + +// NewConfig is a convenience function that returns a new Config object with non-nil maps +func NewPreferences() *Preferences { + return &Preferences{Extensions: make(map[string]runtime.Object)} +} diff --git a/vendor/k8s.io/client-go/1.4/tools/metrics/metrics.go b/vendor/k8s.io/client-go/1.4/tools/metrics/metrics.go new file mode 100644 index 00000000..a01306c6 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/tools/metrics/metrics.go @@ -0,0 +1,61 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package metrics provides abstractions for registering which metrics +// to record. +package metrics + +import ( + "net/url" + "sync" + "time" +) + +var registerMetrics sync.Once + +// LatencyMetric observes client latency partitioned by verb and url. +type LatencyMetric interface { + Observe(verb string, u url.URL, latency time.Duration) +} + +// ResultMetric counts response codes partitioned by method and host. +type ResultMetric interface { + Increment(code string, method string, host string) +} + +var ( + // RequestLatency is the latency metric that rest clients will update. + RequestLatency LatencyMetric = noopLatency{} + // RequestResult is the result metric that rest clients will update. + RequestResult ResultMetric = noopResult{} +) + +// Register registers metrics for the rest client to use. This can +// only be called once. +func Register(lm LatencyMetric, rm ResultMetric) { + registerMetrics.Do(func() { + RequestLatency = lm + RequestResult = rm + }) +} + +type noopLatency struct{} + +func (noopLatency) Observe(string, url.URL, time.Duration) {} + +type noopResult struct{} + +func (noopResult) Increment(string, string, string) {} diff --git a/vendor/k8s.io/client-go/1.4/transport/cache.go b/vendor/k8s.io/client-go/1.4/transport/cache.go new file mode 100644 index 00000000..b6e4e7a2 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/transport/cache.go @@ -0,0 +1,88 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package transport + +import ( + "fmt" + "net" + "net/http" + "sync" + "time" + + utilnet "k8s.io/client-go/1.4/pkg/util/net" +) + +// TlsTransportCache caches TLS http.RoundTrippers different configurations. The +// same RoundTripper will be returned for configs with identical TLS options If +// the config has no custom TLS options, http.DefaultTransport is returned. +type tlsTransportCache struct { + mu sync.Mutex + transports map[string]*http.Transport +} + +const idleConnsPerHost = 25 + +var tlsCache = &tlsTransportCache{transports: make(map[string]*http.Transport)} + +func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) { + key, err := tlsConfigKey(config) + if err != nil { + return nil, err + } + + // Ensure we only create a single transport for the given TLS options + c.mu.Lock() + defer c.mu.Unlock() + + // See if we already have a custom transport for this config + if t, ok := c.transports[key]; ok { + return t, nil + } + + // Get the TLS options for this client config + tlsConfig, err := TLSConfigFor(config) + if err != nil { + return nil, err + } + // The options didn't require a custom TLS config + if tlsConfig == nil { + return http.DefaultTransport, nil + } + + // Cache a single transport for these options + c.transports[key] = utilnet.SetTransportDefaults(&http.Transport{ + Proxy: http.ProxyFromEnvironment, + TLSHandshakeTimeout: 10 * time.Second, + TLSClientConfig: tlsConfig, + MaxIdleConnsPerHost: idleConnsPerHost, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + }) + return c.transports[key], nil +} + +// tlsConfigKey returns a unique key for tls.Config objects returned from TLSConfigFor +func tlsConfigKey(c *Config) (string, error) { + // Make sure ca/key/cert content is loaded + if err := loadTLSFiles(c); err != nil { + return "", err + } + // Only include the things that actually affect the tls.Config + return fmt.Sprintf("%v/%x/%x/%x", c.TLS.Insecure, c.TLS.CAData, c.TLS.CertData, c.TLS.KeyData), nil +} diff --git a/vendor/k8s.io/client-go/1.4/transport/config.go b/vendor/k8s.io/client-go/1.4/transport/config.go new file mode 100644 index 00000000..6e5c68a3 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/transport/config.go @@ -0,0 +1,84 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package transport + +import "net/http" + +// Config holds various options for establishing a transport. +type Config struct { + // UserAgent is an optional field that specifies the caller of this + // request. + UserAgent string + + // The base TLS configuration for this transport. + TLS TLSConfig + + // Username and password for basic authentication + Username string + Password string + + // Bearer token for authentication + BearerToken string + + // Impersonate is the username that this Config will impersonate + Impersonate string + + // Transport may be used for custom HTTP behavior. This attribute may + // not be specified with the TLS client certificate options. Use + // WrapTransport for most client level operations. + Transport http.RoundTripper + + // WrapTransport will be invoked for custom HTTP behavior after the + // underlying transport is initialized (either the transport created + // from TLSClientConfig, Transport, or http.DefaultTransport). The + // config may layer other RoundTrippers on top of the returned + // RoundTripper. + WrapTransport func(rt http.RoundTripper) http.RoundTripper +} + +// HasCA returns whether the configuration has a certificate authority or not. +func (c *Config) HasCA() bool { + return len(c.TLS.CAData) > 0 || len(c.TLS.CAFile) > 0 +} + +// HasBasicAuth returns whether the configuration has basic authentication or not. +func (c *Config) HasBasicAuth() bool { + return len(c.Username) != 0 +} + +// HasTokenAuth returns whether the configuration has token authentication or not. +func (c *Config) HasTokenAuth() bool { + return len(c.BearerToken) != 0 +} + +// HasCertAuth returns whether the configuration has certificate authentication or not. +func (c *Config) HasCertAuth() bool { + return len(c.TLS.CertData) != 0 || len(c.TLS.CertFile) != 0 +} + +// TLSConfig holds the information needed to set up a TLS transport. +type TLSConfig struct { + CAFile string // Path of the PEM-encoded server trusted root certificates. + CertFile string // Path of the PEM-encoded client certificate. + KeyFile string // Path of the PEM-encoded client key. + + Insecure bool // Server should be accessed without verifying the certificate. For testing only. + + CAData []byte // Bytes of the PEM-encoded server trusted root certificates. Supercedes CAFile. + CertData []byte // Bytes of the PEM-encoded client certificate. Supercedes CertFile. + KeyData []byte // Bytes of the PEM-encoded client key. Supercedes KeyFile. +} diff --git a/vendor/k8s.io/client-go/1.4/transport/round_trippers.go b/vendor/k8s.io/client-go/1.4/transport/round_trippers.go new file mode 100644 index 00000000..aadf0cbf --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/transport/round_trippers.go @@ -0,0 +1,337 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package transport + +import ( + "fmt" + "net/http" + "time" + + "github.com/golang/glog" +) + +// HTTPWrappersForConfig wraps a round tripper with any relevant layered +// behavior from the config. Exposed to allow more clients that need HTTP-like +// behavior but then must hijack the underlying connection (like WebSocket or +// HTTP2 clients). Pure HTTP clients should use the RoundTripper returned from +// New. +func HTTPWrappersForConfig(config *Config, rt http.RoundTripper) (http.RoundTripper, error) { + if config.WrapTransport != nil { + rt = config.WrapTransport(rt) + } + + rt = DebugWrappers(rt) + + // Set authentication wrappers + switch { + case config.HasBasicAuth() && config.HasTokenAuth(): + return nil, fmt.Errorf("username/password or bearer token may be set, but not both") + case config.HasTokenAuth(): + rt = NewBearerAuthRoundTripper(config.BearerToken, rt) + case config.HasBasicAuth(): + rt = NewBasicAuthRoundTripper(config.Username, config.Password, rt) + } + if len(config.UserAgent) > 0 { + rt = NewUserAgentRoundTripper(config.UserAgent, rt) + } + if len(config.Impersonate) > 0 { + rt = NewImpersonatingRoundTripper(config.Impersonate, rt) + } + return rt, nil +} + +// DebugWrappers wraps a round tripper and logs based on the current log level. +func DebugWrappers(rt http.RoundTripper) http.RoundTripper { + switch { + case bool(glog.V(9)): + rt = newDebuggingRoundTripper(rt, debugCurlCommand, debugURLTiming, debugResponseHeaders) + case bool(glog.V(8)): + rt = newDebuggingRoundTripper(rt, debugJustURL, debugRequestHeaders, debugResponseStatus, debugResponseHeaders) + case bool(glog.V(7)): + rt = newDebuggingRoundTripper(rt, debugJustURL, debugRequestHeaders, debugResponseStatus) + case bool(glog.V(6)): + rt = newDebuggingRoundTripper(rt, debugURLTiming) + } + + return rt +} + +type requestCanceler interface { + CancelRequest(*http.Request) +} + +type userAgentRoundTripper struct { + agent string + rt http.RoundTripper +} + +func NewUserAgentRoundTripper(agent string, rt http.RoundTripper) http.RoundTripper { + return &userAgentRoundTripper{agent, rt} +} + +func (rt *userAgentRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + if len(req.Header.Get("User-Agent")) != 0 { + return rt.rt.RoundTrip(req) + } + req = cloneRequest(req) + req.Header.Set("User-Agent", rt.agent) + return rt.rt.RoundTrip(req) +} + +func (rt *userAgentRoundTripper) CancelRequest(req *http.Request) { + if canceler, ok := rt.rt.(requestCanceler); ok { + canceler.CancelRequest(req) + } else { + glog.Errorf("CancelRequest not implemented") + } +} + +func (rt *userAgentRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt } + +type basicAuthRoundTripper struct { + username string + password string + rt http.RoundTripper +} + +// NewBasicAuthRoundTripper will apply a BASIC auth authorization header to a +// request unless it has already been set. +func NewBasicAuthRoundTripper(username, password string, rt http.RoundTripper) http.RoundTripper { + return &basicAuthRoundTripper{username, password, rt} +} + +func (rt *basicAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + if len(req.Header.Get("Authorization")) != 0 { + return rt.rt.RoundTrip(req) + } + req = cloneRequest(req) + req.SetBasicAuth(rt.username, rt.password) + return rt.rt.RoundTrip(req) +} + +func (rt *basicAuthRoundTripper) CancelRequest(req *http.Request) { + if canceler, ok := rt.rt.(requestCanceler); ok { + canceler.CancelRequest(req) + } else { + glog.Errorf("CancelRequest not implemented") + } +} + +func (rt *basicAuthRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt } + +type impersonatingRoundTripper struct { + impersonate string + delegate http.RoundTripper +} + +// NewImpersonatingRoundTripper will add an Act-As header to a request unless it has already been set. +func NewImpersonatingRoundTripper(impersonate string, delegate http.RoundTripper) http.RoundTripper { + return &impersonatingRoundTripper{impersonate, delegate} +} + +func (rt *impersonatingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + if len(req.Header.Get("Impersonate-User")) != 0 { + return rt.delegate.RoundTrip(req) + } + req = cloneRequest(req) + req.Header.Set("Impersonate-User", rt.impersonate) + return rt.delegate.RoundTrip(req) +} + +func (rt *impersonatingRoundTripper) CancelRequest(req *http.Request) { + if canceler, ok := rt.delegate.(requestCanceler); ok { + canceler.CancelRequest(req) + } else { + glog.Errorf("CancelRequest not implemented") + } +} + +func (rt *impersonatingRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.delegate } + +type bearerAuthRoundTripper struct { + bearer string + rt http.RoundTripper +} + +// NewBearerAuthRoundTripper adds the provided bearer token to a request +// unless the authorization header has already been set. +func NewBearerAuthRoundTripper(bearer string, rt http.RoundTripper) http.RoundTripper { + return &bearerAuthRoundTripper{bearer, rt} +} + +func (rt *bearerAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + if len(req.Header.Get("Authorization")) != 0 { + return rt.rt.RoundTrip(req) + } + + req = cloneRequest(req) + req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", rt.bearer)) + return rt.rt.RoundTrip(req) +} + +func (rt *bearerAuthRoundTripper) CancelRequest(req *http.Request) { + if canceler, ok := rt.rt.(requestCanceler); ok { + canceler.CancelRequest(req) + } else { + glog.Errorf("CancelRequest not implemented") + } +} + +func (rt *bearerAuthRoundTripper) WrappedRoundTripper() http.RoundTripper { return rt.rt } + +// cloneRequest returns a clone of the provided *http.Request. +// The clone is a shallow copy of the struct and its Header map. +func cloneRequest(r *http.Request) *http.Request { + // shallow copy of the struct + r2 := new(http.Request) + *r2 = *r + // deep copy of the Header + r2.Header = make(http.Header) + for k, s := range r.Header { + r2.Header[k] = s + } + return r2 +} + +// requestInfo keeps track of information about a request/response combination +type requestInfo struct { + RequestHeaders http.Header + RequestVerb string + RequestURL string + + ResponseStatus string + ResponseHeaders http.Header + ResponseErr error + + Duration time.Duration +} + +// newRequestInfo creates a new RequestInfo based on an http request +func newRequestInfo(req *http.Request) *requestInfo { + return &requestInfo{ + RequestURL: req.URL.String(), + RequestVerb: req.Method, + RequestHeaders: req.Header, + } +} + +// complete adds information about the response to the requestInfo +func (r *requestInfo) complete(response *http.Response, err error) { + if err != nil { + r.ResponseErr = err + return + } + r.ResponseStatus = response.Status + r.ResponseHeaders = response.Header +} + +// toCurl returns a string that can be run as a command in a terminal (minus the body) +func (r *requestInfo) toCurl() string { + headers := "" + for key, values := range r.RequestHeaders { + for _, value := range values { + headers += fmt.Sprintf(` -H %q`, fmt.Sprintf("%s: %s", key, value)) + } + } + + return fmt.Sprintf("curl -k -v -X%s %s %s", r.RequestVerb, headers, r.RequestURL) +} + +// debuggingRoundTripper will display information about the requests passing +// through it based on what is configured +type debuggingRoundTripper struct { + delegatedRoundTripper http.RoundTripper + + levels map[debugLevel]bool +} + +type debugLevel int + +const ( + debugJustURL debugLevel = iota + debugURLTiming + debugCurlCommand + debugRequestHeaders + debugResponseStatus + debugResponseHeaders +) + +func newDebuggingRoundTripper(rt http.RoundTripper, levels ...debugLevel) *debuggingRoundTripper { + drt := &debuggingRoundTripper{ + delegatedRoundTripper: rt, + levels: make(map[debugLevel]bool, len(levels)), + } + for _, v := range levels { + drt.levels[v] = true + } + return drt +} + +func (rt *debuggingRoundTripper) CancelRequest(req *http.Request) { + if canceler, ok := rt.delegatedRoundTripper.(requestCanceler); ok { + canceler.CancelRequest(req) + } else { + glog.Errorf("CancelRequest not implemented") + } +} + +func (rt *debuggingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + reqInfo := newRequestInfo(req) + + if rt.levels[debugJustURL] { + glog.Infof("%s %s", reqInfo.RequestVerb, reqInfo.RequestURL) + } + if rt.levels[debugCurlCommand] { + glog.Infof("%s", reqInfo.toCurl()) + + } + if rt.levels[debugRequestHeaders] { + glog.Infof("Request Headers:") + for key, values := range reqInfo.RequestHeaders { + for _, value := range values { + glog.Infof(" %s: %s", key, value) + } + } + } + + startTime := time.Now() + response, err := rt.delegatedRoundTripper.RoundTrip(req) + reqInfo.Duration = time.Since(startTime) + + reqInfo.complete(response, err) + + if rt.levels[debugURLTiming] { + glog.Infof("%s %s %s in %d milliseconds", reqInfo.RequestVerb, reqInfo.RequestURL, reqInfo.ResponseStatus, reqInfo.Duration.Nanoseconds()/int64(time.Millisecond)) + } + if rt.levels[debugResponseStatus] { + glog.Infof("Response Status: %s in %d milliseconds", reqInfo.ResponseStatus, reqInfo.Duration.Nanoseconds()/int64(time.Millisecond)) + } + if rt.levels[debugResponseHeaders] { + glog.Infof("Response Headers:") + for key, values := range reqInfo.ResponseHeaders { + for _, value := range values { + glog.Infof(" %s: %s", key, value) + } + } + } + + return response, err +} + +func (rt *debuggingRoundTripper) WrappedRoundTripper() http.RoundTripper { + return rt.delegatedRoundTripper +} diff --git a/vendor/k8s.io/client-go/1.4/transport/transport.go b/vendor/k8s.io/client-go/1.4/transport/transport.go new file mode 100644 index 00000000..9c5b9ef3 --- /dev/null +++ b/vendor/k8s.io/client-go/1.4/transport/transport.go @@ -0,0 +1,140 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package transport + +import ( + "crypto/tls" + "crypto/x509" + "fmt" + "io/ioutil" + "net/http" +) + +// New returns an http.RoundTripper that will provide the authentication +// or transport level security defined by the provided Config. +func New(config *Config) (http.RoundTripper, error) { + // Set transport level security + if config.Transport != nil && (config.HasCA() || config.HasCertAuth() || config.TLS.Insecure) { + return nil, fmt.Errorf("using a custom transport with TLS certificate options or the insecure flag is not allowed") + } + + var ( + rt http.RoundTripper + err error + ) + + if config.Transport != nil { + rt = config.Transport + } else { + rt, err = tlsCache.get(config) + if err != nil { + return nil, err + } + } + + return HTTPWrappersForConfig(config, rt) +} + +// TLSConfigFor returns a tls.Config that will provide the transport level security defined +// by the provided Config. Will return nil if no transport level security is requested. +func TLSConfigFor(c *Config) (*tls.Config, error) { + if !(c.HasCA() || c.HasCertAuth() || c.TLS.Insecure) { + return nil, nil + } + if c.HasCA() && c.TLS.Insecure { + return nil, fmt.Errorf("specifying a root certificates file with the insecure flag is not allowed") + } + if err := loadTLSFiles(c); err != nil { + return nil, err + } + + tlsConfig := &tls.Config{ + // Can't use SSLv3 because of POODLE and BEAST + // Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher + // Can't use TLSv1.1 because of RC4 cipher usage + MinVersion: tls.VersionTLS12, + InsecureSkipVerify: c.TLS.Insecure, + } + + if c.HasCA() { + tlsConfig.RootCAs = rootCertPool(c.TLS.CAData) + } + + if c.HasCertAuth() { + cert, err := tls.X509KeyPair(c.TLS.CertData, c.TLS.KeyData) + if err != nil { + return nil, err + } + tlsConfig.Certificates = []tls.Certificate{cert} + } + + return tlsConfig, nil +} + +// loadTLSFiles copies the data from the CertFile, KeyFile, and CAFile fields into the CertData, +// KeyData, and CAFile fields, or returns an error. If no error is returned, all three fields are +// either populated or were empty to start. +func loadTLSFiles(c *Config) error { + var err error + c.TLS.CAData, err = dataFromSliceOrFile(c.TLS.CAData, c.TLS.CAFile) + if err != nil { + return err + } + + c.TLS.CertData, err = dataFromSliceOrFile(c.TLS.CertData, c.TLS.CertFile) + if err != nil { + return err + } + + c.TLS.KeyData, err = dataFromSliceOrFile(c.TLS.KeyData, c.TLS.KeyFile) + if err != nil { + return err + } + return nil +} + +// dataFromSliceOrFile returns data from the slice (if non-empty), or from the file, +// or an error if an error occurred reading the file +func dataFromSliceOrFile(data []byte, file string) ([]byte, error) { + if len(data) > 0 { + return data, nil + } + if len(file) > 0 { + fileData, err := ioutil.ReadFile(file) + if err != nil { + return []byte{}, err + } + return fileData, nil + } + return nil, nil +} + +// rootCertPool returns nil if caData is empty. When passed along, this will mean "use system CAs". +// When caData is not empty, it will be the ONLY information used in the CertPool. +func rootCertPool(caData []byte) *x509.CertPool { + // What we really want is a copy of x509.systemRootsPool, but that isn't exposed. It's difficult to build (see the go + // code for a look at the platform specific insanity), so we'll use the fact that RootCAs == nil gives us the system values + // It doesn't allow trusting either/or, but hopefully that won't be an issue + if len(caData) == 0 { + return nil + } + + // if we have caData, use it + certPool := x509.NewCertPool() + certPool.AppendCertsFromPEM(caData) + return certPool +} diff --git a/vendor/github.com/opencontainers/runc/LICENSE b/vendor/k8s.io/client-go/LICENSE similarity index 94% rename from vendor/github.com/opencontainers/runc/LICENSE rename to vendor/k8s.io/client-go/LICENSE index 27448585..00b24011 100644 --- a/vendor/github.com/opencontainers/runc/LICENSE +++ b/vendor/k8s.io/client-go/LICENSE @@ -176,7 +176,18 @@ END OF TERMS AND CONDITIONS - Copyright 2014 Docker, Inc. + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/LICENSE b/vendor/k8s.io/kubernetes/LICENSE index 6b4d837a..00b24011 100644 --- a/vendor/k8s.io/kubernetes/LICENSE +++ b/vendor/k8s.io/kubernetes/LICENSE @@ -187,7 +187,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2014 The Kubernetes Authors All rights reserved. + Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/deep_copy_generated.go b/vendor/k8s.io/kubernetes/federation/apis/federation/deep_copy_generated.go deleted file mode 100644 index 0b03ff9b..00000000 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/deep_copy_generated.go +++ /dev/null @@ -1,145 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package federation - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_federation_Cluster, - DeepCopy_federation_ClusterCondition, - DeepCopy_federation_ClusterList, - DeepCopy_federation_ClusterSpec, - DeepCopy_federation_ClusterStatus, - DeepCopy_federation_ServerAddressByClientCIDR, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_federation_Cluster(in Cluster, out *Cluster, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_federation_ClusterSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_federation_ClusterStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_federation_ClusterCondition(in ClusterCondition, out *ClusterCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_federation_ClusterList(in ClusterList, out *ClusterList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Cluster, len(in)) - for i := range in { - if err := DeepCopy_federation_Cluster(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_federation_ClusterSpec(in ClusterSpec, out *ClusterSpec, c *conversion.Cloner) error { - if in.ServerAddressByClientCIDRs != nil { - in, out := in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs - *out = make([]ServerAddressByClientCIDR, len(in)) - for i := range in { - if err := DeepCopy_federation_ServerAddressByClientCIDR(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ServerAddressByClientCIDRs = nil - } - if in.SecretRef != nil { - in, out := in.SecretRef, &out.SecretRef - *out = new(api.LocalObjectReference) - if err := api.DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SecretRef = nil - } - return nil -} - -func DeepCopy_federation_ClusterStatus(in ClusterStatus, out *ClusterStatus, c *conversion.Cloner) error { - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]ClusterCondition, len(in)) - for i := range in { - if err := DeepCopy_federation_ClusterCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if in.Zones != nil { - in, out := in.Zones, &out.Zones - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Zones = nil - } - out.Region = in.Region - return nil -} - -func DeepCopy_federation_ServerAddressByClientCIDR(in ServerAddressByClientCIDR, out *ServerAddressByClientCIDR, c *conversion.Cloner) error { - out.ClientCIDR = in.ClientCIDR - out.ServerAddress = in.ServerAddress - return nil -} diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/doc.go b/vendor/k8s.io/kubernetes/federation/apis/federation/doc.go new file mode 100644 index 00000000..7a45fb7b --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package federation diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/install/install.go b/vendor/k8s.io/kubernetes/federation/apis/federation/install/install.go index a1dc24ca..edd850fa 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/install/install.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -114,7 +114,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - federation.AddToScheme(api.Scheme) + if err := federation.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -123,7 +126,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1beta1.SchemeGroupVersion: - v1beta1.AddToScheme(api.Scheme) + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/register.go b/vendor/k8s.io/kubernetes/federation/apis/federation/register.go index 2cc7f1f0..4e19b940 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/register.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,18 +38,19 @@ func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -// Adds the list of known types to api.Scheme. -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Cluster{}, &ClusterList{}, &api.ListOptions{}, &api.DeleteOptions{}, ) + return nil } func (obj *Cluster) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/types.go b/vendor/k8s.io/kubernetes/federation/apis/federation/types.go index 10a9d8be..7e3c6634 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/types.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -82,7 +82,8 @@ type ClusterStatus struct { Region string `json:"region,omitempty"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // Information about a registered cluster in a federated kubernetes setup. Clusters are not namespaced and have unique names in the federation. type Cluster struct { @@ -107,3 +108,32 @@ type ClusterList struct { // List of Cluster objects. Items []Cluster `json:"items"` } + +// Temporary/alpha stuctures to support custom replica assignments within FederatedReplicaSet. + +// A set of preferences that can be added to federated version of ReplicaSet as a json-serialized annotation. +// The preferences allow the user to express in which culsters he wants to put his replicas within the +// mentiond FederatedReplicaSet. +type FederatedReplicaSetPreferences struct { + // If set to true then already scheduled and running replicas may be moved to other clusters to + // in order to bring cluster replicasets towards a desired state. Otherwise, if set to false, + // up and running replicas will not be moved. + Rebalance bool `json:"rebalance,omitempty"` + + // A mapping between cluser names and preferences regarding local replicasets in these clusters. + // "*" (if provided) applies to all clusters if an explicit mapping is not provided. If there is no + // "*" that clusters without explicit preferences should not have any replicas scheduled. + Clusters map[string]ClusterReplicaSetPreferences `json:"clusters,omitempty"` +} + +// Preferences regarding number of replicas assigned to a cluster replicaset within a federated replicaset. +type ClusterReplicaSetPreferences struct { + // Minimum number of replicas that should be assigned to this Local ReplicaSet. 0 by default. + MinReplicas int64 `json:"minReplicas,omitempty"` + + // Maximum number of replicas that should be assigned to this Local ReplicaSet. Unbounded if no value provided (default). + MaxReplicas *int64 `json:"maxReplicas,omitempty"` + + // A number expressing the preference to put an additional replica to this LocalReplicaSet. 0 by default. + Weight int64 +} diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/conversion.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/conversion.go index f8d396e8..5881109c 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/conversion.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,12 +19,11 @@ package v1beta1 import ( "fmt" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { - err := api.Scheme.AddFieldLabelConversionFunc(SchemeGroupVersion.String(), "Cluster", +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddFieldLabelConversionFunc(SchemeGroupVersion.String(), "Cluster", func(label, value string) (string, string, error) { switch label { case "metadata.name": @@ -32,9 +31,6 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + }, + ) } diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/deep_copy_generated.go deleted file mode 100644 index 0d53b4a6..00000000 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/deep_copy_generated.go +++ /dev/null @@ -1,146 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1beta1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1beta1_Cluster, - DeepCopy_v1beta1_ClusterCondition, - DeepCopy_v1beta1_ClusterList, - DeepCopy_v1beta1_ClusterSpec, - DeepCopy_v1beta1_ClusterStatus, - DeepCopy_v1beta1_ServerAddressByClientCIDR, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1beta1_Cluster(in Cluster, out *Cluster, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_ClusterSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_ClusterStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_ClusterCondition(in ClusterCondition, out *ClusterCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_v1beta1_ClusterList(in ClusterList, out *ClusterList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Cluster, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_Cluster(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_ClusterSpec(in ClusterSpec, out *ClusterSpec, c *conversion.Cloner) error { - if in.ServerAddressByClientCIDRs != nil { - in, out := in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs - *out = make([]ServerAddressByClientCIDR, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_ServerAddressByClientCIDR(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ServerAddressByClientCIDRs = nil - } - if in.SecretRef != nil { - in, out := in.SecretRef, &out.SecretRef - *out = new(v1.LocalObjectReference) - if err := v1.DeepCopy_v1_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SecretRef = nil - } - return nil -} - -func DeepCopy_v1beta1_ClusterStatus(in ClusterStatus, out *ClusterStatus, c *conversion.Cloner) error { - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]ClusterCondition, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_ClusterCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if in.Zones != nil { - in, out := in.Zones, &out.Zones - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Zones = nil - } - out.Region = in.Region - return nil -} - -func DeepCopy_v1beta1_ServerAddressByClientCIDR(in ServerAddressByClientCIDR, out *ServerAddressByClientCIDR, c *conversion.Cloner) error { - out.ClientCIDR = in.ClientCIDR - out.ServerAddress = in.ServerAddress - return nil -} diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/defaults.go index b096ce2f..57047120 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/defaults.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,5 +20,6 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return nil } diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/doc.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/doc.go index cfdb87c5..3a4f89c9 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/doc.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/federation/apis/federation + package v1beta1 diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/generated.pb.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/generated.pb.go index e9193b60..5522c2b5 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -40,6 +40,9 @@ import math "math" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" +import strings "strings" +import reflect "reflect" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -47,29 +50,35 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *Cluster) Reset() { *m = Cluster{} } -func (m *Cluster) String() string { return proto.CompactTextString(m) } -func (*Cluster) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *ClusterCondition) Reset() { *m = ClusterCondition{} } -func (m *ClusterCondition) String() string { return proto.CompactTextString(m) } -func (*ClusterCondition) ProtoMessage() {} +func (m *Cluster) Reset() { *m = Cluster{} } +func (*Cluster) ProtoMessage() {} +func (*Cluster) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *ClusterList) Reset() { *m = ClusterList{} } -func (m *ClusterList) String() string { return proto.CompactTextString(m) } -func (*ClusterList) ProtoMessage() {} +func (m *ClusterCondition) Reset() { *m = ClusterCondition{} } +func (*ClusterCondition) ProtoMessage() {} +func (*ClusterCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *ClusterSpec) Reset() { *m = ClusterSpec{} } -func (m *ClusterSpec) String() string { return proto.CompactTextString(m) } -func (*ClusterSpec) ProtoMessage() {} +func (m *ClusterList) Reset() { *m = ClusterList{} } +func (*ClusterList) ProtoMessage() {} +func (*ClusterList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } -func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } -func (m *ClusterStatus) String() string { return proto.CompactTextString(m) } -func (*ClusterStatus) ProtoMessage() {} +func (m *ClusterSpec) Reset() { *m = ClusterSpec{} } +func (*ClusterSpec) ProtoMessage() {} +func (*ClusterSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } -func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } -func (m *ServerAddressByClientCIDR) String() string { return proto.CompactTextString(m) } -func (*ServerAddressByClientCIDR) ProtoMessage() {} +func (m *ClusterStatus) Reset() { *m = ClusterStatus{} } +func (*ClusterStatus) ProtoMessage() {} +func (*ClusterStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } +func (*ServerAddressByClientCIDR) ProtoMessage() {} +func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{5} +} func init() { proto.RegisterType((*Cluster)(nil), "k8s.io.kubernetes.federation.apis.federation.v1beta1.Cluster") @@ -454,6 +463,86 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *Cluster) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Cluster{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ClusterSpec", "ClusterSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ClusterStatus", "ClusterStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Cluster", "Cluster", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterSpec{`, + `ServerAddressByClientCIDRs:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ServerAddressByClientCIDRs), "ServerAddressByClientCIDR", "ServerAddressByClientCIDR", 1), `&`, ``, 1) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "k8s_io_kubernetes_pkg_api_v1.LocalObjectReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterStatus{`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "ClusterCondition", "ClusterCondition", 1), `&`, ``, 1) + `,`, + `Zones:` + fmt.Sprintf("%v", this.Zones) + `,`, + `Region:` + fmt.Sprintf("%v", this.Region) + `,`, + `}`, + }, "") + return s +} +func (this *ServerAddressByClientCIDR) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServerAddressByClientCIDR{`, + `ClientCIDR:` + fmt.Sprintf("%v", this.ClientCIDR) + `,`, + `ServerAddress:` + fmt.Sprintf("%v", this.ServerAddress) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *Cluster) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -1396,3 +1485,56 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 777 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x54, 0xcd, 0x6a, 0xdb, 0x58, + 0x14, 0xb6, 0xfc, 0x1b, 0xdf, 0x8c, 0x67, 0xc2, 0x65, 0x06, 0x3c, 0x5e, 0xc8, 0xc1, 0x0c, 0x83, + 0xc3, 0x4c, 0x24, 0x6c, 0x5a, 0x08, 0x94, 0x16, 0x22, 0x87, 0x42, 0xc0, 0x21, 0xe5, 0x26, 0x94, + 0x12, 0x28, 0x45, 0x96, 0x8f, 0x15, 0xd5, 0xb6, 0x24, 0x74, 0xaf, 0x5c, 0x92, 0x55, 0x1f, 0xa0, + 0x8b, 0x3e, 0x44, 0xdf, 0xa0, 0xf4, 0x1d, 0xb2, 0xcc, 0xa2, 0x8b, 0xd2, 0x85, 0x69, 0xdc, 0xb7, + 0xc8, 0xaa, 0xdc, 0xab, 0x6b, 0xd9, 0x8a, 0x63, 0xd3, 0x26, 0x3b, 0x9d, 0xa3, 0x73, 0xbe, 0xef, + 0xbb, 0xe7, 0x0f, 0xed, 0xf5, 0x77, 0xa8, 0xe6, 0x78, 0x7a, 0x3f, 0xec, 0x40, 0xe0, 0x02, 0x03, + 0xaa, 0xf7, 0xa0, 0x0b, 0x81, 0xc9, 0x1c, 0xcf, 0xd5, 0x4d, 0xdf, 0x49, 0xd8, 0xa3, 0x46, 0x07, + 0x98, 0xd9, 0xd0, 0x6d, 0x70, 0xb9, 0x0b, 0xba, 0x9a, 0x1f, 0x78, 0xcc, 0xc3, 0x0f, 0x22, 0x14, + 0x6d, 0x86, 0xa2, 0xcd, 0xb2, 0x34, 0x8e, 0x32, 0x6f, 0x4b, 0x94, 0xca, 0xb6, 0xed, 0xb0, 0xd3, + 0xb0, 0xa3, 0x59, 0xde, 0x50, 0xb7, 0x3d, 0xdb, 0xd3, 0x05, 0x58, 0x27, 0xec, 0x09, 0x4b, 0x18, + 0xe2, 0x2b, 0x22, 0xa9, 0x3c, 0x5c, 0x94, 0xea, 0xf7, 0x6d, 0xae, 0x51, 0x0f, 0xdd, 0x11, 0x04, + 0xd4, 0xf1, 0x5c, 0xe8, 0xde, 0xd4, 0x56, 0xf9, 0x7f, 0x79, 0xda, 0x68, 0xe1, 0x25, 0x95, 0xed, + 0xdb, 0xa3, 0x83, 0xd0, 0x65, 0xce, 0x10, 0x16, 0xc2, 0x1b, 0xb7, 0x87, 0x87, 0xcc, 0x19, 0xe8, + 0x8e, 0xcb, 0x28, 0x0b, 0x6e, 0xa6, 0xd4, 0x3e, 0xa5, 0x51, 0xa1, 0x35, 0x08, 0x29, 0x83, 0x00, + 0xbf, 0x40, 0x6b, 0x43, 0x60, 0x66, 0xd7, 0x64, 0x66, 0x59, 0xd9, 0x54, 0xea, 0xeb, 0xcd, 0xba, + 0xb6, 0x58, 0x4a, 0xbf, 0x6f, 0xf3, 0x1a, 0x6a, 0xa3, 0x86, 0x76, 0xd8, 0x79, 0x0d, 0x16, 0x3b, + 0x00, 0x66, 0x1a, 0xf8, 0x62, 0x5c, 0x4d, 0x4d, 0xc6, 0x55, 0x34, 0xf3, 0x91, 0x18, 0x0d, 0x5b, + 0x28, 0x4b, 0x7d, 0xb0, 0xca, 0x69, 0x81, 0xba, 0xab, 0xdd, 0xa5, 0x41, 0x9a, 0x94, 0x79, 0xe4, + 0x83, 0x65, 0xfc, 0x26, 0xe9, 0xb2, 0xdc, 0x22, 0x02, 0x1c, 0xf7, 0x51, 0x9e, 0x32, 0x93, 0x85, + 0xb4, 0x9c, 0x11, 0x34, 0xad, 0xfb, 0xd1, 0x08, 0x28, 0xe3, 0x77, 0x49, 0x94, 0x8f, 0x6c, 0x22, + 0x29, 0x6a, 0x5f, 0x33, 0x68, 0x43, 0x46, 0xb6, 0x3c, 0xb7, 0xeb, 0x70, 0x08, 0xbc, 0x83, 0xb2, + 0xec, 0xcc, 0x07, 0x51, 0xbc, 0xa2, 0xf1, 0xcf, 0x54, 0xe3, 0xf1, 0x99, 0x0f, 0xd7, 0xe3, 0xea, + 0x9f, 0x37, 0xe3, 0xb9, 0x9f, 0x88, 0x0c, 0xfc, 0x3c, 0xd6, 0x9e, 0x16, 0xb9, 0x4f, 0x92, 0xb4, + 0xd7, 0xe3, 0xea, 0xca, 0xc1, 0xd1, 0x62, 0xcc, 0xa4, 0x4c, 0x7c, 0x8a, 0x4a, 0x03, 0x93, 0xb2, + 0x67, 0x81, 0xd7, 0x81, 0x63, 0x67, 0x08, 0xb2, 0x34, 0xff, 0xad, 0xe8, 0xeb, 0xdc, 0xf4, 0x6a, + 0x3c, 0xc5, 0xf8, 0x4b, 0x6a, 0x29, 0xb5, 0xe7, 0x91, 0x48, 0x12, 0x18, 0xbf, 0x41, 0x98, 0x3b, + 0x8e, 0x03, 0xd3, 0xa5, 0xd1, 0xeb, 0x38, 0x5d, 0xf6, 0xd7, 0xe9, 0x2a, 0x92, 0x0e, 0xb7, 0x17, + 0xe0, 0xc8, 0x2d, 0x14, 0xf8, 0x5f, 0x94, 0x0f, 0xc0, 0xa4, 0x9e, 0x5b, 0xce, 0x89, 0xd2, 0xc5, + 0x1d, 0x23, 0xc2, 0x4b, 0xe4, 0x5f, 0xbc, 0x85, 0x0a, 0x43, 0xa0, 0xd4, 0xb4, 0xa1, 0x9c, 0x17, + 0x81, 0x7f, 0xc8, 0xc0, 0xc2, 0x41, 0xe4, 0x26, 0xd3, 0xff, 0xb5, 0x4b, 0x05, 0xad, 0xcb, 0x66, + 0xb5, 0x1d, 0xca, 0xf0, 0xcb, 0x85, 0xc5, 0xd0, 0x7f, 0xf2, 0x45, 0x3c, 0x5d, 0xec, 0xc7, 0x86, + 0x24, 0x5b, 0x9b, 0x7a, 0xe6, 0xb6, 0xa3, 0x83, 0x72, 0x0e, 0x83, 0x21, 0xef, 0x7d, 0xa6, 0xbe, + 0xde, 0x7c, 0x7c, 0xaf, 0xb9, 0x35, 0x4a, 0x92, 0x29, 0xb7, 0xcf, 0x31, 0x49, 0x04, 0x5d, 0xfb, + 0x90, 0x8e, 0x9f, 0xc4, 0x57, 0x06, 0x7f, 0x54, 0x50, 0x85, 0x42, 0x30, 0x82, 0x60, 0xb7, 0xdb, + 0x0d, 0x80, 0x52, 0xe3, 0xac, 0x35, 0x70, 0xc0, 0x65, 0xad, 0xfd, 0x3d, 0x42, 0xcb, 0x8a, 0x50, + 0x72, 0x78, 0x37, 0x25, 0x47, 0xcb, 0x70, 0x8d, 0x9a, 0xd4, 0x56, 0x59, 0x1a, 0x42, 0xc9, 0x0a, + 0x59, 0xf8, 0x15, 0x2a, 0x52, 0xb0, 0x02, 0x60, 0x04, 0x7a, 0xf2, 0x98, 0x34, 0x57, 0x9f, 0xa8, + 0xb6, 0x67, 0x99, 0x83, 0xe8, 0x26, 0x11, 0xe8, 0x41, 0x00, 0xae, 0x05, 0x46, 0x69, 0x32, 0xae, + 0x16, 0x8f, 0xa6, 0x40, 0x64, 0x86, 0x59, 0xfb, 0xac, 0xa0, 0x52, 0xe2, 0x00, 0xe0, 0x73, 0x84, + 0xac, 0xe9, 0x72, 0x4d, 0xeb, 0xf2, 0xf4, 0x5e, 0x1d, 0x8a, 0x77, 0x75, 0x76, 0x34, 0x63, 0x17, + 0x25, 0x73, 0x6c, 0xb8, 0x8a, 0x72, 0xe7, 0x9e, 0x0b, 0xb4, 0x9c, 0xdb, 0xcc, 0xd4, 0x8b, 0x46, + 0x91, 0x77, 0xf5, 0x84, 0x3b, 0x48, 0xe4, 0x8f, 0x66, 0xdf, 0x76, 0x3c, 0x57, 0x8e, 0xf4, 0xdc, + 0xec, 0x73, 0x2f, 0x91, 0x7f, 0x6b, 0xef, 0x14, 0xf4, 0xf7, 0xd2, 0x92, 0xe3, 0x26, 0x42, 0x56, + 0x6c, 0xc9, 0xe3, 0x35, 0x93, 0x16, 0xff, 0x21, 0x73, 0x51, 0xf8, 0x11, 0x2a, 0x25, 0xfa, 0x24, + 0xef, 0x56, 0x7c, 0x2b, 0x12, 0x6c, 0x24, 0x19, 0x6b, 0x6c, 0x5d, 0x5c, 0xa9, 0xa9, 0xcb, 0x2b, + 0x35, 0xf5, 0xe5, 0x4a, 0x4d, 0xbd, 0x9d, 0xa8, 0xca, 0xc5, 0x44, 0x55, 0x2e, 0x27, 0xaa, 0xf2, + 0x6d, 0xa2, 0x2a, 0xef, 0xbf, 0xab, 0xa9, 0x93, 0x82, 0xac, 0xd9, 0x8f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xd3, 0x88, 0x0f, 0x75, 0x12, 0x08, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/generated.proto b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/generated.proto index 811f40f4..d779bcff 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/generated.proto +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,9 +21,9 @@ syntax = 'proto2'; package k8s.io.kubernetes.federation.apis.federation.v1beta1; -import "k8s.io/kubernetes/pkg/api/resource/generated.proto"; import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/register.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/register.go index 46dc3f10..8fe059b1 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/register.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,14 +29,12 @@ const GroupName = "federation" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} -// Adds the list of known types to api.Scheme. -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Cluster{}, &ClusterList{}, @@ -44,6 +42,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } func (obj *Cluster) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/types.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/types.go index f15988e2..a69608b2 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/types.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -82,7 +82,8 @@ type ClusterStatus struct { Region string `json:"region,omitempty" protobuf:"bytes,6,opt,name=region"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // Information about a registered cluster in a federated kubernetes setup. Clusters are not namespaced and have unique names in the federation. type Cluster struct { diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/types_swagger_doc_generated.go new file mode 100644 index 00000000..7c49777f --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/types_swagger_doc_generated.go @@ -0,0 +1,96 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_Cluster = map[string]string{ + "": "Information about a registered cluster in a federated kubernetes setup. Clusters are not namespaced and have unique names in the federation.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the behavior of the Cluster.", + "status": "Status describes the current status of a Cluster", +} + +func (Cluster) SwaggerDoc() map[string]string { + return map_Cluster +} + +var map_ClusterCondition = map[string]string{ + "": "ClusterCondition describes current state of a cluster.", + "type": "Type of cluster condition, Complete or Failed.", + "status": "Status of the condition, one of True, False, Unknown.", + "lastProbeTime": "Last time the condition was checked.", + "lastTransitionTime": "Last time the condition transit from one status to another.", + "reason": "(brief) reason for the condition's last transition.", + "message": "Human readable message indicating details about last transition.", +} + +func (ClusterCondition) SwaggerDoc() map[string]string { + return map_ClusterCondition +} + +var map_ClusterList = map[string]string{ + "": "A list of all the kubernetes clusters registered to the federation", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds", + "items": "List of Cluster objects.", +} + +func (ClusterList) SwaggerDoc() map[string]string { + return map_ClusterList +} + +var map_ClusterSpec = map[string]string{ + "": "ClusterSpec describes the attributes of a kubernetes cluster.", + "serverAddressByClientCIDRs": "A map of client CIDR to server address. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR.", + "secretRef": "Name of the secret containing kubeconfig to access this cluster. The secret is read from the kubernetes cluster that is hosting federation control plane. Admin needs to ensure that the required secret exists. Secret should be in the same namespace where federation control plane is hosted and it should have kubeconfig in its data with key \"kubeconfig\". This will later be changed to a reference to secret in federation control plane when the federation control plane supports secrets. This can be left empty if the cluster allows insecure access.", +} + +func (ClusterSpec) SwaggerDoc() map[string]string { + return map_ClusterSpec +} + +var map_ClusterStatus = map[string]string{ + "": "ClusterStatus is information about the current status of a cluster updated by cluster controller peridocally.", + "conditions": "Conditions is an array of current cluster conditions.", + "zones": "Zones is the list of avaliability zones in which the nodes of the cluster exist, e.g. 'us-east1-a'. These will always be in the same region.", + "region": "Region is the name of the region in which all of the nodes in the cluster exist. e.g. 'us-east1'.", +} + +func (ClusterStatus) SwaggerDoc() map[string]string { + return map_ClusterStatus +} + +var map_ServerAddressByClientCIDR = map[string]string{ + "": "ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.", + "clientCIDR": "The CIDR with which clients can match their IP to figure out the server address that they should use.", + "serverAddress": "Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.", +} + +func (ServerAddressByClientCIDR) SwaggerDoc() map[string]string { + return map_ServerAddressByClientCIDR +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/conversion_generated.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/zz_generated.conversion.go similarity index 97% rename from vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/conversion_generated.go rename to vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/zz_generated.conversion.go index 5877d008..f5caec40 100644 --- a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,10 +25,17 @@ import ( api "k8s.io/kubernetes/pkg/api" v1 "k8s.io/kubernetes/pkg/api/v1" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1beta1_Cluster_To_federation_Cluster, Convert_federation_Cluster_To_v1beta1_Cluster, Convert_v1beta1_ClusterCondition_To_federation_ClusterCondition, @@ -41,10 +48,7 @@ func init() { Convert_federation_ClusterStatus_To_v1beta1_ClusterStatus, Convert_v1beta1_ServerAddressByClientCIDR_To_federation_ServerAddressByClientCIDR, Convert_federation_ServerAddressByClientCIDR_To_v1beta1_ServerAddressByClientCIDR, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v1beta1_Cluster_To_federation_Cluster(in *Cluster, out *federation.Cluster, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000..fbe43745 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,159 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1beta1 + +import ( + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_Cluster, InType: reflect.TypeOf(&Cluster{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ClusterCondition, InType: reflect.TypeOf(&ClusterCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ClusterList, InType: reflect.TypeOf(&ClusterList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ClusterSpec, InType: reflect.TypeOf(&ClusterSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ClusterStatus, InType: reflect.TypeOf(&ClusterStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ServerAddressByClientCIDR, InType: reflect.TypeOf(&ServerAddressByClientCIDR{})}, + ) +} + +func DeepCopy_v1beta1_Cluster(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Cluster) + out := out.(*Cluster) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_ClusterSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_ClusterStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_ClusterCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterCondition) + out := out.(*ClusterCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1beta1_ClusterList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterList) + out := out.(*ClusterList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Cluster, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_Cluster(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ClusterSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterSpec) + out := out.(*ClusterSpec) + if in.ServerAddressByClientCIDRs != nil { + in, out := &in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs + *out = make([]ServerAddressByClientCIDR, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ServerAddressByClientCIDRs = nil + } + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(v1.LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ClusterStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterStatus) + out := out.(*ClusterStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ClusterCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_ClusterCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Zones = nil + } + out.Region = in.Region + return nil + } +} + +func DeepCopy_v1beta1_ServerAddressByClientCIDR(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServerAddressByClientCIDR) + out := out.(*ServerAddressByClientCIDR) + out.ClientCIDR = in.ClientCIDR + out.ServerAddress = in.ServerAddress + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/federation/apis/federation/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/federation/apis/federation/zz_generated.deepcopy.go new file mode 100644 index 00000000..5126feb8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/apis/federation/zz_generated.deepcopy.go @@ -0,0 +1,200 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package federation + +import ( + api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_federation_Cluster, InType: reflect.TypeOf(&Cluster{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_federation_ClusterCondition, InType: reflect.TypeOf(&ClusterCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_federation_ClusterList, InType: reflect.TypeOf(&ClusterList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_federation_ClusterReplicaSetPreferences, InType: reflect.TypeOf(&ClusterReplicaSetPreferences{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_federation_ClusterSpec, InType: reflect.TypeOf(&ClusterSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_federation_ClusterStatus, InType: reflect.TypeOf(&ClusterStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_federation_FederatedReplicaSetPreferences, InType: reflect.TypeOf(&FederatedReplicaSetPreferences{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_federation_ServerAddressByClientCIDR, InType: reflect.TypeOf(&ServerAddressByClientCIDR{})}, + ) +} + +func DeepCopy_federation_Cluster(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Cluster) + out := out.(*Cluster) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_federation_ClusterSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_federation_ClusterStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_federation_ClusterCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterCondition) + out := out.(*ClusterCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_federation_ClusterList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterList) + out := out.(*ClusterList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Cluster, len(*in)) + for i := range *in { + if err := DeepCopy_federation_Cluster(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_federation_ClusterReplicaSetPreferences(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterReplicaSetPreferences) + out := out.(*ClusterReplicaSetPreferences) + out.MinReplicas = in.MinReplicas + if in.MaxReplicas != nil { + in, out := &in.MaxReplicas, &out.MaxReplicas + *out = new(int64) + **out = **in + } else { + out.MaxReplicas = nil + } + out.Weight = in.Weight + return nil + } +} + +func DeepCopy_federation_ClusterSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterSpec) + out := out.(*ClusterSpec) + if in.ServerAddressByClientCIDRs != nil { + in, out := &in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs + *out = make([]ServerAddressByClientCIDR, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ServerAddressByClientCIDRs = nil + } + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(api.LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + return nil + } +} + +func DeepCopy_federation_ClusterStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterStatus) + out := out.(*ClusterStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ClusterCondition, len(*in)) + for i := range *in { + if err := DeepCopy_federation_ClusterCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Zones = nil + } + out.Region = in.Region + return nil + } +} + +func DeepCopy_federation_FederatedReplicaSetPreferences(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FederatedReplicaSetPreferences) + out := out.(*FederatedReplicaSetPreferences) + out.Rebalance = in.Rebalance + if in.Clusters != nil { + in, out := &in.Clusters, &out.Clusters + *out = make(map[string]ClusterReplicaSetPreferences) + for key, val := range *in { + newVal := new(ClusterReplicaSetPreferences) + if err := DeepCopy_federation_ClusterReplicaSetPreferences(&val, newVal, c); err != nil { + return err + } + (*out)[key] = *newVal + } + } else { + out.Clusters = nil + } + return nil + } +} + +func DeepCopy_federation_ServerAddressByClientCIDR(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServerAddressByClientCIDR) + out := out.(*ServerAddressByClientCIDR) + out.ClientCIDR = in.ClientCIDR + out.ServerAddress = in.ServerAddress + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/clientset.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/clientset.go index f8163ef8..b262ad7b 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/clientset.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/clientset.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ package federation_internalclientset import ( "github.com/golang/glog" unversionedcore "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned" + unversionedextensions "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned" unversionedfederation "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned" restclient "k8s.io/kubernetes/pkg/client/restclient" discovery "k8s.io/kubernetes/pkg/client/typed/discovery" @@ -29,6 +30,7 @@ type Interface interface { Discovery() discovery.DiscoveryInterface Federation() unversionedfederation.FederationInterface Core() unversionedcore.CoreInterface + Extensions() unversionedextensions.ExtensionsInterface } // Clientset contains the clients for groups. Each group has exactly one @@ -37,6 +39,7 @@ type Clientset struct { *discovery.DiscoveryClient *unversionedfederation.FederationClient *unversionedcore.CoreClient + *unversionedextensions.ExtensionsClient } // Federation retrieves the FederationClient @@ -55,6 +58,14 @@ func (c *Clientset) Core() unversionedcore.CoreInterface { return c.CoreClient } +// Extensions retrieves the ExtensionsClient +func (c *Clientset) Extensions() unversionedextensions.ExtensionsInterface { + if c == nil { + return nil + } + return c.ExtensionsClient +} + // Discovery retrieves the DiscoveryClient func (c *Clientset) Discovery() discovery.DiscoveryInterface { return c.DiscoveryClient @@ -76,6 +87,10 @@ func NewForConfig(c *restclient.Config) (*Clientset, error) { if err != nil { return nil, err } + clientset.ExtensionsClient, err = unversionedextensions.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } clientset.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) if err != nil { @@ -91,6 +106,7 @@ func NewForConfigOrDie(c *restclient.Config) *Clientset { var clientset Clientset clientset.FederationClient = unversionedfederation.NewForConfigOrDie(c) clientset.CoreClient = unversionedcore.NewForConfigOrDie(c) + clientset.ExtensionsClient = unversionedextensions.NewForConfigOrDie(c) clientset.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) return &clientset @@ -101,6 +117,7 @@ func New(c *restclient.RESTClient) *Clientset { var clientset Clientset clientset.FederationClient = unversionedfederation.New(c) clientset.CoreClient = unversionedcore.New(c) + clientset.ExtensionsClient = unversionedextensions.New(c) clientset.DiscoveryClient = discovery.NewDiscoveryClient(c) return &clientset diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/doc.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/doc.go index 40d4acce..6b3841cb 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/doc.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --included-types-overrides=[api/Service] --input=[../../federation/apis/federation/,api/] +// This package is generated by client-gen with arguments: --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --included-types-overrides=[api/Service,api/Namespace,extensions/ReplicaSet,api/Secret,extensions/Ingress,api/Event] --input=[../../federation/apis/federation/,api/,extensions/] // This package has the automatically generated clientset. package federation_internalclientset diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/import_known_versions.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/import_known_versions.go index af8c2e74..aa7329b3 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/import_known_versions.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/import_known_versions.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/core_client.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/core_client.go index d308d0fe..91a9e079 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/core_client.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/core_client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,6 +24,9 @@ import ( type CoreInterface interface { GetRESTClient() *restclient.RESTClient + EventsGetter + NamespacesGetter + SecretsGetter ServicesGetter } @@ -32,6 +35,18 @@ type CoreClient struct { *restclient.RESTClient } +func (c *CoreClient) Events(namespace string) EventInterface { + return newEvents(c, namespace) +} + +func (c *CoreClient) Namespaces() NamespaceInterface { + return newNamespaces(c) +} + +func (c *CoreClient) Secrets(namespace string) SecretInterface { + return newSecrets(c, namespace) +} + func (c *CoreClient) Services(namespace string) ServiceInterface { return newServices(c, namespace) } diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/doc.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/doc.go index 30cff08b..c31ea234 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/doc.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --included-types-overrides=[api/Service] --input=[../../federation/apis/federation/,api/] +// This package is generated by client-gen with arguments: --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --included-types-overrides=[api/Service,api/Namespace,extensions/ReplicaSet,api/Secret,extensions/Ingress,api/Event] --input=[../../federation/apis/federation/,api/,extensions/] // This package has the automatically generated typed clients. package unversioned diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/event.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/event.go new file mode 100644 index 00000000..d4edcd37 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/event.go @@ -0,0 +1,150 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + watch "k8s.io/kubernetes/pkg/watch" +) + +// EventsGetter has a method to return a EventInterface. +// A group's client should implement this interface. +type EventsGetter interface { + Events(namespace string) EventInterface +} + +// EventInterface has methods to work with Event resources. +type EventInterface interface { + Create(*api.Event) (*api.Event, error) + Update(*api.Event) (*api.Event, error) + Delete(name string, options *api.DeleteOptions) error + DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error + Get(name string) (*api.Event, error) + List(opts api.ListOptions) (*api.EventList, error) + Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Event, err error) + EventExpansion +} + +// events implements EventInterface +type events struct { + client *CoreClient + ns string +} + +// newEvents returns a Events +func newEvents(c *CoreClient, namespace string) *events { + return &events{ + client: c, + ns: namespace, + } +} + +// Create takes the representation of a event and creates it. Returns the server's representation of the event, and an error, if there is any. +func (c *events) Create(event *api.Event) (result *api.Event, err error) { + result = &api.Event{} + err = c.client.Post(). + Namespace(c.ns). + Resource("events"). + Body(event). + Do(). + Into(result) + return +} + +// Update takes the representation of a event and updates it. Returns the server's representation of the event, and an error, if there is any. +func (c *events) Update(event *api.Event) (result *api.Event, err error) { + result = &api.Event{} + err = c.client.Put(). + Namespace(c.ns). + Resource("events"). + Name(event.Name). + Body(event). + Do(). + Into(result) + return +} + +// Delete takes name of the event and deletes it. Returns an error if one occurs. +func (c *events) Delete(name string, options *api.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("events"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *events) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("events"). + VersionedParams(&listOptions, api.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Get takes name of the event, and returns the corresponding event object, and an error if there is any. +func (c *events) Get(name string) (result *api.Event, err error) { + result = &api.Event{} + err = c.client.Get(). + Namespace(c.ns). + Resource("events"). + Name(name). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Events that match those selectors. +func (c *events) List(opts api.ListOptions) (result *api.EventList, err error) { + result = &api.EventList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("events"). + VersionedParams(&opts, api.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested events. +func (c *events) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("events"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} + +// Patch applies the patch and returns the patched event. +func (c *events) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Event, err error) { + result = &api.Event{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("events"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/generated_expansion.go index 65df6665..a4f969d0 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,4 +16,8 @@ limitations under the License. package unversioned +type EventExpansion interface{} + +type SecretExpansion interface{} + type ServiceExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/namespace.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/namespace.go new file mode 100644 index 00000000..7b39f2b8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/namespace.go @@ -0,0 +1,153 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + watch "k8s.io/kubernetes/pkg/watch" +) + +// NamespacesGetter has a method to return a NamespaceInterface. +// A group's client should implement this interface. +type NamespacesGetter interface { + Namespaces() NamespaceInterface +} + +// NamespaceInterface has methods to work with Namespace resources. +type NamespaceInterface interface { + Create(*api.Namespace) (*api.Namespace, error) + Update(*api.Namespace) (*api.Namespace, error) + UpdateStatus(*api.Namespace) (*api.Namespace, error) + Delete(name string, options *api.DeleteOptions) error + DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error + Get(name string) (*api.Namespace, error) + List(opts api.ListOptions) (*api.NamespaceList, error) + Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Namespace, err error) + NamespaceExpansion +} + +// namespaces implements NamespaceInterface +type namespaces struct { + client *CoreClient +} + +// newNamespaces returns a Namespaces +func newNamespaces(c *CoreClient) *namespaces { + return &namespaces{ + client: c, + } +} + +// Create takes the representation of a namespace and creates it. Returns the server's representation of the namespace, and an error, if there is any. +func (c *namespaces) Create(namespace *api.Namespace) (result *api.Namespace, err error) { + result = &api.Namespace{} + err = c.client.Post(). + Resource("namespaces"). + Body(namespace). + Do(). + Into(result) + return +} + +// Update takes the representation of a namespace and updates it. Returns the server's representation of the namespace, and an error, if there is any. +func (c *namespaces) Update(namespace *api.Namespace) (result *api.Namespace, err error) { + result = &api.Namespace{} + err = c.client.Put(). + Resource("namespaces"). + Name(namespace.Name). + Body(namespace). + Do(). + Into(result) + return +} + +func (c *namespaces) UpdateStatus(namespace *api.Namespace) (result *api.Namespace, err error) { + result = &api.Namespace{} + err = c.client.Put(). + Resource("namespaces"). + Name(namespace.Name). + SubResource("status"). + Body(namespace). + Do(). + Into(result) + return +} + +// Delete takes name of the namespace and deletes it. Returns an error if one occurs. +func (c *namespaces) Delete(name string, options *api.DeleteOptions) error { + return c.client.Delete(). + Resource("namespaces"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *namespaces) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { + return c.client.Delete(). + Resource("namespaces"). + VersionedParams(&listOptions, api.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Get takes name of the namespace, and returns the corresponding namespace object, and an error if there is any. +func (c *namespaces) Get(name string) (result *api.Namespace, err error) { + result = &api.Namespace{} + err = c.client.Get(). + Resource("namespaces"). + Name(name). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Namespaces that match those selectors. +func (c *namespaces) List(opts api.ListOptions) (result *api.NamespaceList, err error) { + result = &api.NamespaceList{} + err = c.client.Get(). + Resource("namespaces"). + VersionedParams(&opts, api.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested namespaces. +func (c *namespaces) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Resource("namespaces"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} + +// Patch applies the patch and returns the patched namespace. +func (c *namespaces) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Namespace, err error) { + result = &api.Namespace{} + err = c.client.Patch(pt). + Resource("namespaces"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/namespace_expansion.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/namespace_expansion.go new file mode 100644 index 00000000..15049da1 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/namespace_expansion.go @@ -0,0 +1,31 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import "k8s.io/kubernetes/pkg/api" + +// The NamespaceExpansion interface allows manually adding extra methods to the NamespaceInterface. +type NamespaceExpansion interface { + Finalize(item *api.Namespace) (*api.Namespace, error) +} + +// Finalize takes the representation of a namespace to update. Returns the server's representation of the namespace, and an error, if it occurs. +func (c *namespaces) Finalize(namespace *api.Namespace) (result *api.Namespace, err error) { + result = &api.Namespace{} + err = c.client.Put().Resource("namespaces").Name(namespace.Name).SubResource("finalize").Body(namespace).Do().Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/secret.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/secret.go new file mode 100644 index 00000000..f87263cb --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/secret.go @@ -0,0 +1,150 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + watch "k8s.io/kubernetes/pkg/watch" +) + +// SecretsGetter has a method to return a SecretInterface. +// A group's client should implement this interface. +type SecretsGetter interface { + Secrets(namespace string) SecretInterface +} + +// SecretInterface has methods to work with Secret resources. +type SecretInterface interface { + Create(*api.Secret) (*api.Secret, error) + Update(*api.Secret) (*api.Secret, error) + Delete(name string, options *api.DeleteOptions) error + DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error + Get(name string) (*api.Secret, error) + List(opts api.ListOptions) (*api.SecretList, error) + Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Secret, err error) + SecretExpansion +} + +// secrets implements SecretInterface +type secrets struct { + client *CoreClient + ns string +} + +// newSecrets returns a Secrets +func newSecrets(c *CoreClient, namespace string) *secrets { + return &secrets{ + client: c, + ns: namespace, + } +} + +// Create takes the representation of a secret and creates it. Returns the server's representation of the secret, and an error, if there is any. +func (c *secrets) Create(secret *api.Secret) (result *api.Secret, err error) { + result = &api.Secret{} + err = c.client.Post(). + Namespace(c.ns). + Resource("secrets"). + Body(secret). + Do(). + Into(result) + return +} + +// Update takes the representation of a secret and updates it. Returns the server's representation of the secret, and an error, if there is any. +func (c *secrets) Update(secret *api.Secret) (result *api.Secret, err error) { + result = &api.Secret{} + err = c.client.Put(). + Namespace(c.ns). + Resource("secrets"). + Name(secret.Name). + Body(secret). + Do(). + Into(result) + return +} + +// Delete takes name of the secret and deletes it. Returns an error if one occurs. +func (c *secrets) Delete(name string, options *api.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("secrets"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *secrets) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("secrets"). + VersionedParams(&listOptions, api.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Get takes name of the secret, and returns the corresponding secret object, and an error if there is any. +func (c *secrets) Get(name string) (result *api.Secret, err error) { + result = &api.Secret{} + err = c.client.Get(). + Namespace(c.ns). + Resource("secrets"). + Name(name). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Secrets that match those selectors. +func (c *secrets) List(opts api.ListOptions) (result *api.SecretList, err error) { + result = &api.SecretList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("secrets"). + VersionedParams(&opts, api.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested secrets. +func (c *secrets) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("secrets"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} + +// Patch applies the patch and returns the patched secret. +func (c *secrets) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Secret, err error) { + result = &api.Secret{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("secrets"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/service.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/service.go index 006f601c..86fa3b22 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/service.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/core/unversioned/service.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type ServiceInterface interface { Get(name string) (*api.Service, error) List(opts api.ListOptions) (*api.ServiceList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Service, err error) ServiceExpansion } @@ -147,3 +148,17 @@ func (c *services) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched service. +func (c *services) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Service, err error) { + result = &api.Service{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("services"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/doc.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/doc.go new file mode 100644 index 00000000..c31ea234 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package is generated by client-gen with arguments: --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --included-types-overrides=[api/Service,api/Namespace,extensions/ReplicaSet,api/Secret,extensions/Ingress,api/Event] --input=[../../federation/apis/federation/,api/,extensions/] + +// This package has the automatically generated typed clients. +package unversioned diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/extensions_client.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/extensions_client.go new file mode 100644 index 00000000..b55aac1d --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/extensions_client.go @@ -0,0 +1,106 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + registered "k8s.io/kubernetes/pkg/apimachinery/registered" + restclient "k8s.io/kubernetes/pkg/client/restclient" +) + +type ExtensionsInterface interface { + GetRESTClient() *restclient.RESTClient + IngressesGetter + ReplicaSetsGetter +} + +// ExtensionsClient is used to interact with features provided by the Extensions group. +type ExtensionsClient struct { + *restclient.RESTClient +} + +func (c *ExtensionsClient) Ingresses(namespace string) IngressInterface { + return newIngresses(c, namespace) +} + +func (c *ExtensionsClient) ReplicaSets(namespace string) ReplicaSetInterface { + return newReplicaSets(c, namespace) +} + +// NewForConfig creates a new ExtensionsClient for the given config. +func NewForConfig(c *restclient.Config) (*ExtensionsClient, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &ExtensionsClient{client}, nil +} + +// NewForConfigOrDie creates a new ExtensionsClient for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *restclient.Config) *ExtensionsClient { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new ExtensionsClient for the given RESTClient. +func New(c *restclient.RESTClient) *ExtensionsClient { + return &ExtensionsClient{c} +} + +func setConfigDefaults(config *restclient.Config) error { + // if extensions group is not registered, return an error + g, err := registered.Group("extensions") + if err != nil { + return err + } + config.APIPath = "/apis" + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + // TODO: Unconditionally set the config.Version, until we fix the config. + //if config.Version == "" { + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + //} + + config.NegotiatedSerializer = api.Codecs + + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + return nil +} + +// GetRESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *ExtensionsClient) GetRESTClient() *restclient.RESTClient { + if c == nil { + return nil + } + return c.RESTClient +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/generated_expansion.go new file mode 100644 index 00000000..65499890 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/generated_expansion.go @@ -0,0 +1,21 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +type IngressExpansion interface{} + +type ReplicaSetExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/ingress.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/ingress.go new file mode 100644 index 00000000..7d941ac8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/ingress.go @@ -0,0 +1,165 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + extensions "k8s.io/kubernetes/pkg/apis/extensions" + watch "k8s.io/kubernetes/pkg/watch" +) + +// IngressesGetter has a method to return a IngressInterface. +// A group's client should implement this interface. +type IngressesGetter interface { + Ingresses(namespace string) IngressInterface +} + +// IngressInterface has methods to work with Ingress resources. +type IngressInterface interface { + Create(*extensions.Ingress) (*extensions.Ingress, error) + Update(*extensions.Ingress) (*extensions.Ingress, error) + UpdateStatus(*extensions.Ingress) (*extensions.Ingress, error) + Delete(name string, options *api.DeleteOptions) error + DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error + Get(name string) (*extensions.Ingress, error) + List(opts api.ListOptions) (*extensions.IngressList, error) + Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.Ingress, err error) + IngressExpansion +} + +// ingresses implements IngressInterface +type ingresses struct { + client *ExtensionsClient + ns string +} + +// newIngresses returns a Ingresses +func newIngresses(c *ExtensionsClient, namespace string) *ingresses { + return &ingresses{ + client: c, + ns: namespace, + } +} + +// Create takes the representation of a ingress and creates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *ingresses) Create(ingress *extensions.Ingress) (result *extensions.Ingress, err error) { + result = &extensions.Ingress{} + err = c.client.Post(). + Namespace(c.ns). + Resource("ingresses"). + Body(ingress). + Do(). + Into(result) + return +} + +// Update takes the representation of a ingress and updates it. Returns the server's representation of the ingress, and an error, if there is any. +func (c *ingresses) Update(ingress *extensions.Ingress) (result *extensions.Ingress, err error) { + result = &extensions.Ingress{} + err = c.client.Put(). + Namespace(c.ns). + Resource("ingresses"). + Name(ingress.Name). + Body(ingress). + Do(). + Into(result) + return +} + +func (c *ingresses) UpdateStatus(ingress *extensions.Ingress) (result *extensions.Ingress, err error) { + result = &extensions.Ingress{} + err = c.client.Put(). + Namespace(c.ns). + Resource("ingresses"). + Name(ingress.Name). + SubResource("status"). + Body(ingress). + Do(). + Into(result) + return +} + +// Delete takes name of the ingress and deletes it. Returns an error if one occurs. +func (c *ingresses) Delete(name string, options *api.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("ingresses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *ingresses) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&listOptions, api.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Get takes name of the ingress, and returns the corresponding ingress object, and an error if there is any. +func (c *ingresses) Get(name string) (result *extensions.Ingress, err error) { + result = &extensions.Ingress{} + err = c.client.Get(). + Namespace(c.ns). + Resource("ingresses"). + Name(name). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of Ingresses that match those selectors. +func (c *ingresses) List(opts api.ListOptions) (result *extensions.IngressList, err error) { + result = &extensions.IngressList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&opts, api.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested ingresses. +func (c *ingresses) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("ingresses"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} + +// Patch applies the patch and returns the patched ingress. +func (c *ingresses) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.Ingress, err error) { + result = &extensions.Ingress{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("ingresses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/replicaset.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/replicaset.go new file mode 100644 index 00000000..fc6987b5 --- /dev/null +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/extensions/unversioned/replicaset.go @@ -0,0 +1,165 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + extensions "k8s.io/kubernetes/pkg/apis/extensions" + watch "k8s.io/kubernetes/pkg/watch" +) + +// ReplicaSetsGetter has a method to return a ReplicaSetInterface. +// A group's client should implement this interface. +type ReplicaSetsGetter interface { + ReplicaSets(namespace string) ReplicaSetInterface +} + +// ReplicaSetInterface has methods to work with ReplicaSet resources. +type ReplicaSetInterface interface { + Create(*extensions.ReplicaSet) (*extensions.ReplicaSet, error) + Update(*extensions.ReplicaSet) (*extensions.ReplicaSet, error) + UpdateStatus(*extensions.ReplicaSet) (*extensions.ReplicaSet, error) + Delete(name string, options *api.DeleteOptions) error + DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error + Get(name string) (*extensions.ReplicaSet, error) + List(opts api.ListOptions) (*extensions.ReplicaSetList, error) + Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.ReplicaSet, err error) + ReplicaSetExpansion +} + +// replicaSets implements ReplicaSetInterface +type replicaSets struct { + client *ExtensionsClient + ns string +} + +// newReplicaSets returns a ReplicaSets +func newReplicaSets(c *ExtensionsClient, namespace string) *replicaSets { + return &replicaSets{ + client: c, + ns: namespace, + } +} + +// Create takes the representation of a replicaSet and creates it. Returns the server's representation of the replicaSet, and an error, if there is any. +func (c *replicaSets) Create(replicaSet *extensions.ReplicaSet) (result *extensions.ReplicaSet, err error) { + result = &extensions.ReplicaSet{} + err = c.client.Post(). + Namespace(c.ns). + Resource("replicasets"). + Body(replicaSet). + Do(). + Into(result) + return +} + +// Update takes the representation of a replicaSet and updates it. Returns the server's representation of the replicaSet, and an error, if there is any. +func (c *replicaSets) Update(replicaSet *extensions.ReplicaSet) (result *extensions.ReplicaSet, err error) { + result = &extensions.ReplicaSet{} + err = c.client.Put(). + Namespace(c.ns). + Resource("replicasets"). + Name(replicaSet.Name). + Body(replicaSet). + Do(). + Into(result) + return +} + +func (c *replicaSets) UpdateStatus(replicaSet *extensions.ReplicaSet) (result *extensions.ReplicaSet, err error) { + result = &extensions.ReplicaSet{} + err = c.client.Put(). + Namespace(c.ns). + Resource("replicasets"). + Name(replicaSet.Name). + SubResource("status"). + Body(replicaSet). + Do(). + Into(result) + return +} + +// Delete takes name of the replicaSet and deletes it. Returns an error if one occurs. +func (c *replicaSets) Delete(name string, options *api.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("replicasets"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *replicaSets) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("replicasets"). + VersionedParams(&listOptions, api.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Get takes name of the replicaSet, and returns the corresponding replicaSet object, and an error if there is any. +func (c *replicaSets) Get(name string) (result *extensions.ReplicaSet, err error) { + result = &extensions.ReplicaSet{} + err = c.client.Get(). + Namespace(c.ns). + Resource("replicasets"). + Name(name). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ReplicaSets that match those selectors. +func (c *replicaSets) List(opts api.ListOptions) (result *extensions.ReplicaSetList, err error) { + result = &extensions.ReplicaSetList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("replicasets"). + VersionedParams(&opts, api.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested replicaSets. +func (c *replicaSets) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Namespace(c.ns). + Resource("replicasets"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} + +// Patch applies the patch and returns the patched replicaSet. +func (c *replicaSets) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.ReplicaSet, err error) { + result = &extensions.ReplicaSet{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("replicasets"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/cluster.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/cluster.go index e2709514..a9698d51 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/cluster.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/cluster.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ type ClusterInterface interface { Get(name string) (*federation.Cluster, error) List(opts api.ListOptions) (*federation.ClusterList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *federation.Cluster, err error) ClusterExpansion } @@ -138,3 +139,16 @@ func (c *clusters) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched cluster. +func (c *clusters) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *federation.Cluster, err error) { + result = &federation.Cluster{} + err = c.client.Patch(pt). + Resource("clusters"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/doc.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/doc.go index 30cff08b..c31ea234 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/doc.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with arguments: --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --included-types-overrides=[api/Service] --input=[../../federation/apis/federation/,api/] +// This package is generated by client-gen with arguments: --clientset-name=federation_internalclientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --included-types-overrides=[api/Service,api/Namespace,extensions/ReplicaSet,api/Secret,extensions/Ingress,api/Event] --input=[../../federation/apis/federation/,api/,extensions/] // This package has the automatically generated typed clients. package unversioned diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/federation_client.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/federation_client.go index be2a8a15..89943315 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/federation_client.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/federation_client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/generated_expansion.go index 8888bf9b..13903a4c 100644 --- a/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/typed/federation/unversioned/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/annotations/annotations.go b/vendor/k8s.io/kubernetes/pkg/api/annotations/annotations.go index dbdf11cb..2f9a6c44 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/annotations/annotations.go +++ b/vendor/k8s.io/kubernetes/pkg/api/annotations/annotations.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/annotations/doc.go b/vendor/k8s.io/kubernetes/pkg/api/annotations/doc.go index 6a422ea4..0c36c85c 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/annotations/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/api/annotations/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/context.go b/vendor/k8s.io/kubernetes/pkg/api/context.go index 7e863957..580e6b8a 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/context.go +++ b/vendor/k8s.io/kubernetes/pkg/api/context.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import ( "golang.org/x/net/context" "k8s.io/kubernetes/pkg/auth/user" + "k8s.io/kubernetes/pkg/types" ) // Context carries values across API boundaries. @@ -49,11 +50,16 @@ type Context interface { // The key type is unexported to prevent collisions type key int -// namespaceKey is the context key for the request namespace. -const namespaceKey key = 0 +const ( + // namespaceKey is the context key for the request namespace. + namespaceKey key = iota -// userKey is the context key for the request user. -const userKey key = 1 + // userKey is the context key for the request user. + userKey + + // uidKey is the context key for the uid to assign to an object on create. + uidKey +) // NewContext instantiates a base context object for request flows. func NewContext() Context { @@ -119,3 +125,14 @@ func UserFrom(ctx Context) (user.Info, bool) { user, ok := ctx.Value(userKey).(user.Info) return user, ok } + +// WithUID returns a copy of parent in which the uid value is set +func WithUID(parent Context, uid types.UID) Context { + return WithValue(parent, uidKey, uid) +} + +// UIDFrom returns the value of the uid key on the ctx +func UIDFrom(ctx Context) (types.UID, bool) { + uid, ok := ctx.Value(uidKey).(types.UID) + return uid, ok +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/conversion.go b/vendor/k8s.io/kubernetes/pkg/api/conversion.go index 7ae1e018..4a9f50b9 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/api/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,43 +17,104 @@ limitations under the License. package api import ( + "fmt" + "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/intstr" + utillabels "k8s.io/kubernetes/pkg/util/labels" + "k8s.io/kubernetes/pkg/util/validation/field" ) -func init() { - Scheme.AddDefaultingFuncs( - func(obj *ListOptions) { - if obj.LabelSelector == nil { - obj.LabelSelector = labels.Everything() - } - if obj.FieldSelector == nil { - obj.FieldSelector = fields.Everything() - } - }, - ) - Scheme.AddConversionFuncs( +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddConversionFuncs( Convert_unversioned_TypeMeta_To_unversioned_TypeMeta, + Convert_unversioned_ListMeta_To_unversioned_ListMeta, + Convert_intstr_IntOrString_To_intstr_IntOrString, + Convert_unversioned_Time_To_unversioned_Time, + Convert_Slice_string_To_unversioned_Time, + + Convert_resource_Quantity_To_resource_Quantity, + Convert_string_To_labels_Selector, + Convert_labels_Selector_To_string, + Convert_string_To_fields_Selector, + Convert_fields_Selector_To_string, + Convert_Pointer_bool_To_bool, Convert_bool_To_Pointer_bool, + Convert_Pointer_string_To_string, Convert_string_To_Pointer_string, - Convert_labels_Selector_To_string, - Convert_fields_Selector_To_string, - Convert_resource_Quantity_To_resource_Quantity, + + Convert_Pointer_int64_To_int, + Convert_int_To_Pointer_int64, + + Convert_Pointer_int32_To_int32, + Convert_int32_To_Pointer_int32, + + Convert_Pointer_float64_To_float64, + Convert_float64_To_Pointer_float64, + + Convert_map_to_unversioned_LabelSelector, + Convert_unversioned_LabelSelector_to_map, ) } +func Convert_Pointer_float64_To_float64(in **float64, out *float64, s conversion.Scope) error { + if *in == nil { + *out = 0 + return nil + } + *out = float64(**in) + return nil +} + +func Convert_float64_To_Pointer_float64(in *float64, out **float64, s conversion.Scope) error { + temp := float64(*in) + *out = &temp + return nil +} + +func Convert_Pointer_int32_To_int32(in **int32, out *int32, s conversion.Scope) error { + if *in == nil { + *out = 0 + return nil + } + *out = int32(**in) + return nil +} + +func Convert_int32_To_Pointer_int32(in *int32, out **int32, s conversion.Scope) error { + temp := int32(*in) + *out = &temp + return nil +} + +func Convert_Pointer_int64_To_int(in **int64, out *int, s conversion.Scope) error { + if *in == nil { + *out = 0 + return nil + } + *out = int(**in) + return nil +} + +func Convert_int_To_Pointer_int64(in *int, out **int64, s conversion.Scope) error { + temp := int64(*in) + *out = &temp + return nil +} + func Convert_Pointer_string_To_string(in **string, out *string, s conversion.Scope) error { if *in == nil { *out = "" @@ -100,15 +161,12 @@ func Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(in, out *unversioned.T } func Convert_unversioned_ListMeta_To_unversioned_ListMeta(in, out *unversioned.ListMeta, s conversion.Scope) error { - out.ResourceVersion = in.ResourceVersion - out.SelfLink = in.SelfLink + *out = *in return nil } func Convert_intstr_IntOrString_To_intstr_IntOrString(in, out *intstr.IntOrString, s conversion.Scope) error { - out.Type = in.Type - out.IntVal = in.IntVal - out.StrVal = in.StrVal + *out = *in return nil } @@ -135,6 +193,7 @@ func Convert_string_To_labels_Selector(in *string, out *labels.Selector, s conve *out = selector return nil } + func Convert_string_To_fields_Selector(in *string, out *fields.Selector, s conversion.Scope) error { selector, err := fields.ParseSelector(*in) if err != nil { @@ -143,6 +202,7 @@ func Convert_string_To_fields_Selector(in *string, out *fields.Selector, s conve *out = selector return nil } + func Convert_labels_Selector_To_string(in *labels.Selector, out *string, s conversion.Scope) error { if *in == nil { return nil @@ -150,6 +210,7 @@ func Convert_labels_Selector_To_string(in *labels.Selector, out *string, s conve *out = (*in).String() return nil } + func Convert_fields_Selector_To_string(in *fields.Selector, out *string, s conversion.Scope) error { if *in == nil { return nil @@ -157,7 +218,28 @@ func Convert_fields_Selector_To_string(in *fields.Selector, out *string, s conve *out = (*in).String() return nil } + func Convert_resource_Quantity_To_resource_Quantity(in *resource.Quantity, out *resource.Quantity, s conversion.Scope) error { *out = *in return nil } + +func Convert_map_to_unversioned_LabelSelector(in *map[string]string, out *unversioned.LabelSelector, s conversion.Scope) error { + if in == nil { + return nil + } + out = new(unversioned.LabelSelector) + for labelKey, labelValue := range *in { + utillabels.AddLabelToSelector(out, labelKey, labelValue) + } + return nil +} + +func Convert_unversioned_LabelSelector_to_map(in *unversioned.LabelSelector, out *map[string]string, s conversion.Scope) error { + var err error + *out, err = unversioned.LabelSelectorAsMap(in) + if err != nil { + err = field.Invalid(field.NewPath("labelSelector"), *in, fmt.Sprintf("cannot convert to old selector: %v", err)) + } + return err +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/api/deep_copy_generated.go deleted file mode 100644 index 21100a61..00000000 --- a/vendor/k8s.io/kubernetes/pkg/api/deep_copy_generated.go +++ /dev/null @@ -1,3491 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package api - -import ( - resource "k8s.io/kubernetes/pkg/api/resource" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - fields "k8s.io/kubernetes/pkg/fields" - labels "k8s.io/kubernetes/pkg/labels" - runtime "k8s.io/kubernetes/pkg/runtime" - types "k8s.io/kubernetes/pkg/types" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_api_AWSElasticBlockStoreVolumeSource, - DeepCopy_api_Affinity, - DeepCopy_api_AttachedVolume, - DeepCopy_api_AzureFileVolumeSource, - DeepCopy_api_Binding, - DeepCopy_api_Capabilities, - DeepCopy_api_CephFSVolumeSource, - DeepCopy_api_CinderVolumeSource, - DeepCopy_api_ComponentCondition, - DeepCopy_api_ComponentStatus, - DeepCopy_api_ComponentStatusList, - DeepCopy_api_ConfigMap, - DeepCopy_api_ConfigMapKeySelector, - DeepCopy_api_ConfigMapList, - DeepCopy_api_ConfigMapVolumeSource, - DeepCopy_api_Container, - DeepCopy_api_ContainerImage, - DeepCopy_api_ContainerPort, - DeepCopy_api_ContainerState, - DeepCopy_api_ContainerStateRunning, - DeepCopy_api_ContainerStateTerminated, - DeepCopy_api_ContainerStateWaiting, - DeepCopy_api_ContainerStatus, - DeepCopy_api_ConversionError, - DeepCopy_api_DaemonEndpoint, - DeepCopy_api_DeleteOptions, - DeepCopy_api_DownwardAPIVolumeFile, - DeepCopy_api_DownwardAPIVolumeSource, - DeepCopy_api_EmptyDirVolumeSource, - DeepCopy_api_EndpointAddress, - DeepCopy_api_EndpointPort, - DeepCopy_api_EndpointSubset, - DeepCopy_api_Endpoints, - DeepCopy_api_EndpointsList, - DeepCopy_api_EnvVar, - DeepCopy_api_EnvVarSource, - DeepCopy_api_Event, - DeepCopy_api_EventList, - DeepCopy_api_EventSource, - DeepCopy_api_ExecAction, - DeepCopy_api_ExportOptions, - DeepCopy_api_FCVolumeSource, - DeepCopy_api_FSGroupStrategyOptions, - DeepCopy_api_FlexVolumeSource, - DeepCopy_api_FlockerVolumeSource, - DeepCopy_api_GCEPersistentDiskVolumeSource, - DeepCopy_api_GitRepoVolumeSource, - DeepCopy_api_GlusterfsVolumeSource, - DeepCopy_api_HTTPGetAction, - DeepCopy_api_HTTPHeader, - DeepCopy_api_Handler, - DeepCopy_api_HostPathVolumeSource, - DeepCopy_api_IDRange, - DeepCopy_api_ISCSIVolumeSource, - DeepCopy_api_KeyToPath, - DeepCopy_api_Lifecycle, - DeepCopy_api_LimitRange, - DeepCopy_api_LimitRangeItem, - DeepCopy_api_LimitRangeList, - DeepCopy_api_LimitRangeSpec, - DeepCopy_api_List, - DeepCopy_api_ListOptions, - DeepCopy_api_LoadBalancerIngress, - DeepCopy_api_LoadBalancerStatus, - DeepCopy_api_LocalObjectReference, - DeepCopy_api_NFSVolumeSource, - DeepCopy_api_Namespace, - DeepCopy_api_NamespaceList, - DeepCopy_api_NamespaceSpec, - DeepCopy_api_NamespaceStatus, - DeepCopy_api_Node, - DeepCopy_api_NodeAddress, - DeepCopy_api_NodeAffinity, - DeepCopy_api_NodeCondition, - DeepCopy_api_NodeDaemonEndpoints, - DeepCopy_api_NodeList, - DeepCopy_api_NodeProxyOptions, - DeepCopy_api_NodeResources, - DeepCopy_api_NodeSelector, - DeepCopy_api_NodeSelectorRequirement, - DeepCopy_api_NodeSelectorTerm, - DeepCopy_api_NodeSpec, - DeepCopy_api_NodeStatus, - DeepCopy_api_NodeSystemInfo, - DeepCopy_api_ObjectFieldSelector, - DeepCopy_api_ObjectMeta, - DeepCopy_api_ObjectReference, - DeepCopy_api_OwnerReference, - DeepCopy_api_PersistentVolume, - DeepCopy_api_PersistentVolumeClaim, - DeepCopy_api_PersistentVolumeClaimList, - DeepCopy_api_PersistentVolumeClaimSpec, - DeepCopy_api_PersistentVolumeClaimStatus, - DeepCopy_api_PersistentVolumeClaimVolumeSource, - DeepCopy_api_PersistentVolumeList, - DeepCopy_api_PersistentVolumeSource, - DeepCopy_api_PersistentVolumeSpec, - DeepCopy_api_PersistentVolumeStatus, - DeepCopy_api_Pod, - DeepCopy_api_PodAffinity, - DeepCopy_api_PodAffinityTerm, - DeepCopy_api_PodAntiAffinity, - DeepCopy_api_PodAttachOptions, - DeepCopy_api_PodCondition, - DeepCopy_api_PodExecOptions, - DeepCopy_api_PodList, - DeepCopy_api_PodLogOptions, - DeepCopy_api_PodProxyOptions, - DeepCopy_api_PodSecurityContext, - DeepCopy_api_PodSpec, - DeepCopy_api_PodStatus, - DeepCopy_api_PodStatusResult, - DeepCopy_api_PodTemplate, - DeepCopy_api_PodTemplateList, - DeepCopy_api_PodTemplateSpec, - DeepCopy_api_Preconditions, - DeepCopy_api_PreferredSchedulingTerm, - DeepCopy_api_Probe, - DeepCopy_api_RBDVolumeSource, - DeepCopy_api_RangeAllocation, - DeepCopy_api_ReplicationController, - DeepCopy_api_ReplicationControllerList, - DeepCopy_api_ReplicationControllerSpec, - DeepCopy_api_ReplicationControllerStatus, - DeepCopy_api_ResourceFieldSelector, - DeepCopy_api_ResourceQuota, - DeepCopy_api_ResourceQuotaList, - DeepCopy_api_ResourceQuotaSpec, - DeepCopy_api_ResourceQuotaStatus, - DeepCopy_api_ResourceRequirements, - DeepCopy_api_RunAsUserStrategyOptions, - DeepCopy_api_SELinuxContextStrategyOptions, - DeepCopy_api_SELinuxOptions, - DeepCopy_api_Secret, - DeepCopy_api_SecretKeySelector, - DeepCopy_api_SecretList, - DeepCopy_api_SecretVolumeSource, - DeepCopy_api_SecurityContext, - DeepCopy_api_SecurityContextConstraints, - DeepCopy_api_SecurityContextConstraintsList, - DeepCopy_api_SerializedReference, - DeepCopy_api_Service, - DeepCopy_api_ServiceAccount, - DeepCopy_api_ServiceAccountList, - DeepCopy_api_ServiceList, - DeepCopy_api_ServicePort, - DeepCopy_api_ServiceProxyOptions, - DeepCopy_api_ServiceSpec, - DeepCopy_api_ServiceStatus, - DeepCopy_api_SupplementalGroupsStrategyOptions, - DeepCopy_api_TCPSocketAction, - DeepCopy_api_Taint, - DeepCopy_api_Toleration, - DeepCopy_api_Volume, - DeepCopy_api_VolumeMount, - DeepCopy_api_VolumeSource, - DeepCopy_api_VsphereVirtualDiskVolumeSource, - DeepCopy_api_WeightedPodAffinityTerm, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_api_AWSElasticBlockStoreVolumeSource(in AWSElasticBlockStoreVolumeSource, out *AWSElasticBlockStoreVolumeSource, c *conversion.Cloner) error { - out.VolumeID = in.VolumeID - out.FSType = in.FSType - out.Partition = in.Partition - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_Affinity(in Affinity, out *Affinity, c *conversion.Cloner) error { - if in.NodeAffinity != nil { - in, out := in.NodeAffinity, &out.NodeAffinity - *out = new(NodeAffinity) - if err := DeepCopy_api_NodeAffinity(*in, *out, c); err != nil { - return err - } - } else { - out.NodeAffinity = nil - } - if in.PodAffinity != nil { - in, out := in.PodAffinity, &out.PodAffinity - *out = new(PodAffinity) - if err := DeepCopy_api_PodAffinity(*in, *out, c); err != nil { - return err - } - } else { - out.PodAffinity = nil - } - if in.PodAntiAffinity != nil { - in, out := in.PodAntiAffinity, &out.PodAntiAffinity - *out = new(PodAntiAffinity) - if err := DeepCopy_api_PodAntiAffinity(*in, *out, c); err != nil { - return err - } - } else { - out.PodAntiAffinity = nil - } - return nil -} - -func DeepCopy_api_AttachedVolume(in AttachedVolume, out *AttachedVolume, c *conversion.Cloner) error { - out.Name = in.Name - out.DevicePath = in.DevicePath - return nil -} - -func DeepCopy_api_AzureFileVolumeSource(in AzureFileVolumeSource, out *AzureFileVolumeSource, c *conversion.Cloner) error { - out.SecretName = in.SecretName - out.ShareName = in.ShareName - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_Binding(in Binding, out *Binding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectReference(in.Target, &out.Target, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_Capabilities(in Capabilities, out *Capabilities, c *conversion.Cloner) error { - if in.Add != nil { - in, out := in.Add, &out.Add - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Add = nil - } - if in.Drop != nil { - in, out := in.Drop, &out.Drop - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Drop = nil - } - return nil -} - -func DeepCopy_api_CephFSVolumeSource(in CephFSVolumeSource, out *CephFSVolumeSource, c *conversion.Cloner) error { - if in.Monitors != nil { - in, out := in.Monitors, &out.Monitors - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Monitors = nil - } - out.Path = in.Path - out.User = in.User - out.SecretFile = in.SecretFile - if in.SecretRef != nil { - in, out := in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - if err := DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SecretRef = nil - } - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_CinderVolumeSource(in CinderVolumeSource, out *CinderVolumeSource, c *conversion.Cloner) error { - out.VolumeID = in.VolumeID - out.FSType = in.FSType - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_ComponentCondition(in ComponentCondition, out *ComponentCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - out.Message = in.Message - out.Error = in.Error - return nil -} - -func DeepCopy_api_ComponentStatus(in ComponentStatus, out *ComponentStatus, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]ComponentCondition, len(in)) - for i := range in { - if err := DeepCopy_api_ComponentCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - return nil -} - -func DeepCopy_api_ComponentStatusList(in ComponentStatusList, out *ComponentStatusList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ComponentStatus, len(in)) - for i := range in { - if err := DeepCopy_api_ComponentStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ConfigMap(in ConfigMap, out *ConfigMap, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Data != nil { - in, out := in.Data, &out.Data - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Data = nil - } - return nil -} - -func DeepCopy_api_ConfigMapKeySelector(in ConfigMapKeySelector, out *ConfigMapKeySelector, c *conversion.Cloner) error { - if err := DeepCopy_api_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil { - return err - } - out.Key = in.Key - return nil -} - -func DeepCopy_api_ConfigMapList(in ConfigMapList, out *ConfigMapList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ConfigMap, len(in)) - for i := range in { - if err := DeepCopy_api_ConfigMap(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ConfigMapVolumeSource(in ConfigMapVolumeSource, out *ConfigMapVolumeSource, c *conversion.Cloner) error { - if err := DeepCopy_api_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]KeyToPath, len(in)) - for i := range in { - if err := DeepCopy_api_KeyToPath(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_Container(in Container, out *Container, c *conversion.Cloner) error { - out.Name = in.Name - out.Image = in.Image - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - if in.Args != nil { - in, out := in.Args, &out.Args - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Args = nil - } - out.WorkingDir = in.WorkingDir - if in.Ports != nil { - in, out := in.Ports, &out.Ports - *out = make([]ContainerPort, len(in)) - for i := range in { - if err := DeepCopy_api_ContainerPort(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ports = nil - } - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]EnvVar, len(in)) - for i := range in { - if err := DeepCopy_api_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - if err := DeepCopy_api_ResourceRequirements(in.Resources, &out.Resources, c); err != nil { - return err - } - if in.VolumeMounts != nil { - in, out := in.VolumeMounts, &out.VolumeMounts - *out = make([]VolumeMount, len(in)) - for i := range in { - if err := DeepCopy_api_VolumeMount(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.VolumeMounts = nil - } - if in.LivenessProbe != nil { - in, out := in.LivenessProbe, &out.LivenessProbe - *out = new(Probe) - if err := DeepCopy_api_Probe(*in, *out, c); err != nil { - return err - } - } else { - out.LivenessProbe = nil - } - if in.ReadinessProbe != nil { - in, out := in.ReadinessProbe, &out.ReadinessProbe - *out = new(Probe) - if err := DeepCopy_api_Probe(*in, *out, c); err != nil { - return err - } - } else { - out.ReadinessProbe = nil - } - if in.Lifecycle != nil { - in, out := in.Lifecycle, &out.Lifecycle - *out = new(Lifecycle) - if err := DeepCopy_api_Lifecycle(*in, *out, c); err != nil { - return err - } - } else { - out.Lifecycle = nil - } - out.TerminationMessagePath = in.TerminationMessagePath - out.ImagePullPolicy = in.ImagePullPolicy - if in.SecurityContext != nil { - in, out := in.SecurityContext, &out.SecurityContext - *out = new(SecurityContext) - if err := DeepCopy_api_SecurityContext(*in, *out, c); err != nil { - return err - } - } else { - out.SecurityContext = nil - } - out.Stdin = in.Stdin - out.StdinOnce = in.StdinOnce - out.TTY = in.TTY - return nil -} - -func DeepCopy_api_ContainerImage(in ContainerImage, out *ContainerImage, c *conversion.Cloner) error { - if in.Names != nil { - in, out := in.Names, &out.Names - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Names = nil - } - out.SizeBytes = in.SizeBytes - return nil -} - -func DeepCopy_api_ContainerPort(in ContainerPort, out *ContainerPort, c *conversion.Cloner) error { - out.Name = in.Name - out.HostPort = in.HostPort - out.ContainerPort = in.ContainerPort - out.Protocol = in.Protocol - out.HostIP = in.HostIP - return nil -} - -func DeepCopy_api_ContainerState(in ContainerState, out *ContainerState, c *conversion.Cloner) error { - if in.Waiting != nil { - in, out := in.Waiting, &out.Waiting - *out = new(ContainerStateWaiting) - if err := DeepCopy_api_ContainerStateWaiting(*in, *out, c); err != nil { - return err - } - } else { - out.Waiting = nil - } - if in.Running != nil { - in, out := in.Running, &out.Running - *out = new(ContainerStateRunning) - if err := DeepCopy_api_ContainerStateRunning(*in, *out, c); err != nil { - return err - } - } else { - out.Running = nil - } - if in.Terminated != nil { - in, out := in.Terminated, &out.Terminated - *out = new(ContainerStateTerminated) - if err := DeepCopy_api_ContainerStateTerminated(*in, *out, c); err != nil { - return err - } - } else { - out.Terminated = nil - } - return nil -} - -func DeepCopy_api_ContainerStateRunning(in ContainerStateRunning, out *ContainerStateRunning, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_Time(in.StartedAt, &out.StartedAt, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ContainerStateTerminated(in ContainerStateTerminated, out *ContainerStateTerminated, c *conversion.Cloner) error { - out.ExitCode = in.ExitCode - out.Signal = in.Signal - out.Reason = in.Reason - out.Message = in.Message - if err := unversioned.DeepCopy_unversioned_Time(in.StartedAt, &out.StartedAt, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.FinishedAt, &out.FinishedAt, c); err != nil { - return err - } - out.ContainerID = in.ContainerID - return nil -} - -func DeepCopy_api_ContainerStateWaiting(in ContainerStateWaiting, out *ContainerStateWaiting, c *conversion.Cloner) error { - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_api_ContainerStatus(in ContainerStatus, out *ContainerStatus, c *conversion.Cloner) error { - out.Name = in.Name - if err := DeepCopy_api_ContainerState(in.State, &out.State, c); err != nil { - return err - } - if err := DeepCopy_api_ContainerState(in.LastTerminationState, &out.LastTerminationState, c); err != nil { - return err - } - out.Ready = in.Ready - out.RestartCount = in.RestartCount - out.Image = in.Image - out.ImageID = in.ImageID - out.ContainerID = in.ContainerID - return nil -} - -func DeepCopy_api_ConversionError(in ConversionError, out *ConversionError, c *conversion.Cloner) error { - if in.In == nil { - out.In = nil - } else if newVal, err := c.DeepCopy(in.In); err != nil { - return err - } else { - out.In = newVal.(interface{}) - } - if in.Out == nil { - out.Out = nil - } else if newVal, err := c.DeepCopy(in.Out); err != nil { - return err - } else { - out.Out = newVal.(interface{}) - } - out.Message = in.Message - return nil -} - -func DeepCopy_api_DaemonEndpoint(in DaemonEndpoint, out *DaemonEndpoint, c *conversion.Cloner) error { - out.Port = in.Port - return nil -} - -func DeepCopy_api_DeleteOptions(in DeleteOptions, out *DeleteOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if in.GracePeriodSeconds != nil { - in, out := in.GracePeriodSeconds, &out.GracePeriodSeconds - *out = new(int64) - **out = *in - } else { - out.GracePeriodSeconds = nil - } - if in.Preconditions != nil { - in, out := in.Preconditions, &out.Preconditions - *out = new(Preconditions) - if err := DeepCopy_api_Preconditions(*in, *out, c); err != nil { - return err - } - } else { - out.Preconditions = nil - } - if in.OrphanDependents != nil { - in, out := in.OrphanDependents, &out.OrphanDependents - *out = new(bool) - **out = *in - } else { - out.OrphanDependents = nil - } - return nil -} - -func DeepCopy_api_DownwardAPIVolumeFile(in DownwardAPIVolumeFile, out *DownwardAPIVolumeFile, c *conversion.Cloner) error { - out.Path = in.Path - if in.FieldRef != nil { - in, out := in.FieldRef, &out.FieldRef - *out = new(ObjectFieldSelector) - if err := DeepCopy_api_ObjectFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.FieldRef = nil - } - if in.ResourceFieldRef != nil { - in, out := in.ResourceFieldRef, &out.ResourceFieldRef - *out = new(ResourceFieldSelector) - if err := DeepCopy_api_ResourceFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceFieldRef = nil - } - return nil -} - -func DeepCopy_api_DownwardAPIVolumeSource(in DownwardAPIVolumeSource, out *DownwardAPIVolumeSource, c *conversion.Cloner) error { - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]DownwardAPIVolumeFile, len(in)) - for i := range in { - if err := DeepCopy_api_DownwardAPIVolumeFile(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_EmptyDirVolumeSource(in EmptyDirVolumeSource, out *EmptyDirVolumeSource, c *conversion.Cloner) error { - out.Medium = in.Medium - return nil -} - -func DeepCopy_api_EndpointAddress(in EndpointAddress, out *EndpointAddress, c *conversion.Cloner) error { - out.IP = in.IP - out.Hostname = in.Hostname - if in.TargetRef != nil { - in, out := in.TargetRef, &out.TargetRef - *out = new(ObjectReference) - if err := DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.TargetRef = nil - } - return nil -} - -func DeepCopy_api_EndpointPort(in EndpointPort, out *EndpointPort, c *conversion.Cloner) error { - out.Name = in.Name - out.Port = in.Port - out.Protocol = in.Protocol - return nil -} - -func DeepCopy_api_EndpointSubset(in EndpointSubset, out *EndpointSubset, c *conversion.Cloner) error { - if in.Addresses != nil { - in, out := in.Addresses, &out.Addresses - *out = make([]EndpointAddress, len(in)) - for i := range in { - if err := DeepCopy_api_EndpointAddress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Addresses = nil - } - if in.NotReadyAddresses != nil { - in, out := in.NotReadyAddresses, &out.NotReadyAddresses - *out = make([]EndpointAddress, len(in)) - for i := range in { - if err := DeepCopy_api_EndpointAddress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.NotReadyAddresses = nil - } - if in.Ports != nil { - in, out := in.Ports, &out.Ports - *out = make([]EndpointPort, len(in)) - for i := range in { - if err := DeepCopy_api_EndpointPort(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ports = nil - } - return nil -} - -func DeepCopy_api_Endpoints(in Endpoints, out *Endpoints, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Subsets != nil { - in, out := in.Subsets, &out.Subsets - *out = make([]EndpointSubset, len(in)) - for i := range in { - if err := DeepCopy_api_EndpointSubset(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Subsets = nil - } - return nil -} - -func DeepCopy_api_EndpointsList(in EndpointsList, out *EndpointsList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Endpoints, len(in)) - for i := range in { - if err := DeepCopy_api_Endpoints(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_EnvVar(in EnvVar, out *EnvVar, c *conversion.Cloner) error { - out.Name = in.Name - out.Value = in.Value - if in.ValueFrom != nil { - in, out := in.ValueFrom, &out.ValueFrom - *out = new(EnvVarSource) - if err := DeepCopy_api_EnvVarSource(*in, *out, c); err != nil { - return err - } - } else { - out.ValueFrom = nil - } - return nil -} - -func DeepCopy_api_EnvVarSource(in EnvVarSource, out *EnvVarSource, c *conversion.Cloner) error { - if in.FieldRef != nil { - in, out := in.FieldRef, &out.FieldRef - *out = new(ObjectFieldSelector) - if err := DeepCopy_api_ObjectFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.FieldRef = nil - } - if in.ResourceFieldRef != nil { - in, out := in.ResourceFieldRef, &out.ResourceFieldRef - *out = new(ResourceFieldSelector) - if err := DeepCopy_api_ResourceFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceFieldRef = nil - } - if in.ConfigMapKeyRef != nil { - in, out := in.ConfigMapKeyRef, &out.ConfigMapKeyRef - *out = new(ConfigMapKeySelector) - if err := DeepCopy_api_ConfigMapKeySelector(*in, *out, c); err != nil { - return err - } - } else { - out.ConfigMapKeyRef = nil - } - if in.SecretKeyRef != nil { - in, out := in.SecretKeyRef, &out.SecretKeyRef - *out = new(SecretKeySelector) - if err := DeepCopy_api_SecretKeySelector(*in, *out, c); err != nil { - return err - } - } else { - out.SecretKeyRef = nil - } - return nil -} - -func DeepCopy_api_Event(in Event, out *Event, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectReference(in.InvolvedObject, &out.InvolvedObject, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - if err := DeepCopy_api_EventSource(in.Source, &out.Source, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.FirstTimestamp, &out.FirstTimestamp, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTimestamp, &out.LastTimestamp, c); err != nil { - return err - } - out.Count = in.Count - out.Type = in.Type - return nil -} - -func DeepCopy_api_EventList(in EventList, out *EventList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Event, len(in)) - for i := range in { - if err := DeepCopy_api_Event(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_EventSource(in EventSource, out *EventSource, c *conversion.Cloner) error { - out.Component = in.Component - out.Host = in.Host - return nil -} - -func DeepCopy_api_ExecAction(in ExecAction, out *ExecAction, c *conversion.Cloner) error { - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - return nil -} - -func DeepCopy_api_ExportOptions(in ExportOptions, out *ExportOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Export = in.Export - out.Exact = in.Exact - return nil -} - -func DeepCopy_api_FCVolumeSource(in FCVolumeSource, out *FCVolumeSource, c *conversion.Cloner) error { - if in.TargetWWNs != nil { - in, out := in.TargetWWNs, &out.TargetWWNs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.TargetWWNs = nil - } - if in.Lun != nil { - in, out := in.Lun, &out.Lun - *out = new(int32) - **out = *in - } else { - out.Lun = nil - } - out.FSType = in.FSType - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_FSGroupStrategyOptions(in FSGroupStrategyOptions, out *FSGroupStrategyOptions, c *conversion.Cloner) error { - out.Type = in.Type - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_api_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_api_FlexVolumeSource(in FlexVolumeSource, out *FlexVolumeSource, c *conversion.Cloner) error { - out.Driver = in.Driver - out.FSType = in.FSType - if in.SecretRef != nil { - in, out := in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - if err := DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SecretRef = nil - } - out.ReadOnly = in.ReadOnly - if in.Options != nil { - in, out := in.Options, &out.Options - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Options = nil - } - return nil -} - -func DeepCopy_api_FlockerVolumeSource(in FlockerVolumeSource, out *FlockerVolumeSource, c *conversion.Cloner) error { - out.DatasetName = in.DatasetName - return nil -} - -func DeepCopy_api_GCEPersistentDiskVolumeSource(in GCEPersistentDiskVolumeSource, out *GCEPersistentDiskVolumeSource, c *conversion.Cloner) error { - out.PDName = in.PDName - out.FSType = in.FSType - out.Partition = in.Partition - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_GitRepoVolumeSource(in GitRepoVolumeSource, out *GitRepoVolumeSource, c *conversion.Cloner) error { - out.Repository = in.Repository - out.Revision = in.Revision - out.Directory = in.Directory - return nil -} - -func DeepCopy_api_GlusterfsVolumeSource(in GlusterfsVolumeSource, out *GlusterfsVolumeSource, c *conversion.Cloner) error { - out.EndpointsName = in.EndpointsName - out.Path = in.Path - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_HTTPGetAction(in HTTPGetAction, out *HTTPGetAction, c *conversion.Cloner) error { - out.Path = in.Path - if err := intstr.DeepCopy_intstr_IntOrString(in.Port, &out.Port, c); err != nil { - return err - } - out.Host = in.Host - out.Scheme = in.Scheme - if in.HTTPHeaders != nil { - in, out := in.HTTPHeaders, &out.HTTPHeaders - *out = make([]HTTPHeader, len(in)) - for i := range in { - if err := DeepCopy_api_HTTPHeader(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.HTTPHeaders = nil - } - return nil -} - -func DeepCopy_api_HTTPHeader(in HTTPHeader, out *HTTPHeader, c *conversion.Cloner) error { - out.Name = in.Name - out.Value = in.Value - return nil -} - -func DeepCopy_api_Handler(in Handler, out *Handler, c *conversion.Cloner) error { - if in.Exec != nil { - in, out := in.Exec, &out.Exec - *out = new(ExecAction) - if err := DeepCopy_api_ExecAction(*in, *out, c); err != nil { - return err - } - } else { - out.Exec = nil - } - if in.HTTPGet != nil { - in, out := in.HTTPGet, &out.HTTPGet - *out = new(HTTPGetAction) - if err := DeepCopy_api_HTTPGetAction(*in, *out, c); err != nil { - return err - } - } else { - out.HTTPGet = nil - } - if in.TCPSocket != nil { - in, out := in.TCPSocket, &out.TCPSocket - *out = new(TCPSocketAction) - if err := DeepCopy_api_TCPSocketAction(*in, *out, c); err != nil { - return err - } - } else { - out.TCPSocket = nil - } - return nil -} - -func DeepCopy_api_HostPathVolumeSource(in HostPathVolumeSource, out *HostPathVolumeSource, c *conversion.Cloner) error { - out.Path = in.Path - return nil -} - -func DeepCopy_api_IDRange(in IDRange, out *IDRange, c *conversion.Cloner) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -func DeepCopy_api_ISCSIVolumeSource(in ISCSIVolumeSource, out *ISCSIVolumeSource, c *conversion.Cloner) error { - out.TargetPortal = in.TargetPortal - out.IQN = in.IQN - out.Lun = in.Lun - out.ISCSIInterface = in.ISCSIInterface - out.FSType = in.FSType - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_KeyToPath(in KeyToPath, out *KeyToPath, c *conversion.Cloner) error { - out.Key = in.Key - out.Path = in.Path - return nil -} - -func DeepCopy_api_Lifecycle(in Lifecycle, out *Lifecycle, c *conversion.Cloner) error { - if in.PostStart != nil { - in, out := in.PostStart, &out.PostStart - *out = new(Handler) - if err := DeepCopy_api_Handler(*in, *out, c); err != nil { - return err - } - } else { - out.PostStart = nil - } - if in.PreStop != nil { - in, out := in.PreStop, &out.PreStop - *out = new(Handler) - if err := DeepCopy_api_Handler(*in, *out, c); err != nil { - return err - } - } else { - out.PreStop = nil - } - return nil -} - -func DeepCopy_api_LimitRange(in LimitRange, out *LimitRange, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_LimitRangeSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_LimitRangeItem(in LimitRangeItem, out *LimitRangeItem, c *conversion.Cloner) error { - out.Type = in.Type - if in.Max != nil { - in, out := in.Max, &out.Max - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Max = nil - } - if in.Min != nil { - in, out := in.Min, &out.Min - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Min = nil - } - if in.Default != nil { - in, out := in.Default, &out.Default - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Default = nil - } - if in.DefaultRequest != nil { - in, out := in.DefaultRequest, &out.DefaultRequest - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.DefaultRequest = nil - } - if in.MaxLimitRequestRatio != nil { - in, out := in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.MaxLimitRequestRatio = nil - } - return nil -} - -func DeepCopy_api_LimitRangeList(in LimitRangeList, out *LimitRangeList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]LimitRange, len(in)) - for i := range in { - if err := DeepCopy_api_LimitRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_LimitRangeSpec(in LimitRangeSpec, out *LimitRangeSpec, c *conversion.Cloner) error { - if in.Limits != nil { - in, out := in.Limits, &out.Limits - *out = make([]LimitRangeItem, len(in)) - for i := range in { - if err := DeepCopy_api_LimitRangeItem(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Limits = nil - } - return nil -} - -func DeepCopy_api_List(in List, out *List, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]runtime.Object, len(in)) - for i := range in { - if newVal, err := c.DeepCopy(in[i]); err != nil { - return err - } else { - (*out)[i] = newVal.(runtime.Object) - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ListOptions(in ListOptions, out *ListOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if in.LabelSelector == nil { - out.LabelSelector = nil - } else if newVal, err := c.DeepCopy(in.LabelSelector); err != nil { - return err - } else { - out.LabelSelector = newVal.(labels.Selector) - } - if in.FieldSelector == nil { - out.FieldSelector = nil - } else if newVal, err := c.DeepCopy(in.FieldSelector); err != nil { - return err - } else { - out.FieldSelector = newVal.(fields.Selector) - } - out.Watch = in.Watch - out.ResourceVersion = in.ResourceVersion - if in.TimeoutSeconds != nil { - in, out := in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int64) - **out = *in - } else { - out.TimeoutSeconds = nil - } - return nil -} - -func DeepCopy_api_LoadBalancerIngress(in LoadBalancerIngress, out *LoadBalancerIngress, c *conversion.Cloner) error { - out.IP = in.IP - out.Hostname = in.Hostname - return nil -} - -func DeepCopy_api_LoadBalancerStatus(in LoadBalancerStatus, out *LoadBalancerStatus, c *conversion.Cloner) error { - if in.Ingress != nil { - in, out := in.Ingress, &out.Ingress - *out = make([]LoadBalancerIngress, len(in)) - for i := range in { - if err := DeepCopy_api_LoadBalancerIngress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ingress = nil - } - return nil -} - -func DeepCopy_api_LocalObjectReference(in LocalObjectReference, out *LocalObjectReference, c *conversion.Cloner) error { - out.Name = in.Name - return nil -} - -func DeepCopy_api_NFSVolumeSource(in NFSVolumeSource, out *NFSVolumeSource, c *conversion.Cloner) error { - out.Server = in.Server - out.Path = in.Path - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_Namespace(in Namespace, out *Namespace, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_NamespaceSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_NamespaceStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_NamespaceList(in NamespaceList, out *NamespaceList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Namespace, len(in)) - for i := range in { - if err := DeepCopy_api_Namespace(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_NamespaceSpec(in NamespaceSpec, out *NamespaceSpec, c *conversion.Cloner) error { - if in.Finalizers != nil { - in, out := in.Finalizers, &out.Finalizers - *out = make([]FinalizerName, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Finalizers = nil - } - return nil -} - -func DeepCopy_api_NamespaceStatus(in NamespaceStatus, out *NamespaceStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - return nil -} - -func DeepCopy_api_Node(in Node, out *Node, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_NodeSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_NodeStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_NodeAddress(in NodeAddress, out *NodeAddress, c *conversion.Cloner) error { - out.Type = in.Type - out.Address = in.Address - return nil -} - -func DeepCopy_api_NodeAffinity(in NodeAffinity, out *NodeAffinity, c *conversion.Cloner) error { - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = new(NodeSelector) - if err := DeepCopy_api_NodeSelector(*in, *out, c); err != nil { - return err - } - } else { - out.RequiredDuringSchedulingIgnoredDuringExecution = nil - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]PreferredSchedulingTerm, len(in)) - for i := range in { - if err := DeepCopy_api_PreferredSchedulingTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.PreferredDuringSchedulingIgnoredDuringExecution = nil - } - return nil -} - -func DeepCopy_api_NodeCondition(in NodeCondition, out *NodeCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastHeartbeatTime, &out.LastHeartbeatTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_api_NodeDaemonEndpoints(in NodeDaemonEndpoints, out *NodeDaemonEndpoints, c *conversion.Cloner) error { - if err := DeepCopy_api_DaemonEndpoint(in.KubeletEndpoint, &out.KubeletEndpoint, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_NodeList(in NodeList, out *NodeList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Node, len(in)) - for i := range in { - if err := DeepCopy_api_Node(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_NodeProxyOptions(in NodeProxyOptions, out *NodeProxyOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Path = in.Path - return nil -} - -func DeepCopy_api_NodeResources(in NodeResources, out *NodeResources, c *conversion.Cloner) error { - if in.Capacity != nil { - in, out := in.Capacity, &out.Capacity - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Capacity = nil - } - return nil -} - -func DeepCopy_api_NodeSelector(in NodeSelector, out *NodeSelector, c *conversion.Cloner) error { - if in.NodeSelectorTerms != nil { - in, out := in.NodeSelectorTerms, &out.NodeSelectorTerms - *out = make([]NodeSelectorTerm, len(in)) - for i := range in { - if err := DeepCopy_api_NodeSelectorTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.NodeSelectorTerms = nil - } - return nil -} - -func DeepCopy_api_NodeSelectorRequirement(in NodeSelectorRequirement, out *NodeSelectorRequirement, c *conversion.Cloner) error { - out.Key = in.Key - out.Operator = in.Operator - if in.Values != nil { - in, out := in.Values, &out.Values - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Values = nil - } - return nil -} - -func DeepCopy_api_NodeSelectorTerm(in NodeSelectorTerm, out *NodeSelectorTerm, c *conversion.Cloner) error { - if in.MatchExpressions != nil { - in, out := in.MatchExpressions, &out.MatchExpressions - *out = make([]NodeSelectorRequirement, len(in)) - for i := range in { - if err := DeepCopy_api_NodeSelectorRequirement(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.MatchExpressions = nil - } - return nil -} - -func DeepCopy_api_NodeSpec(in NodeSpec, out *NodeSpec, c *conversion.Cloner) error { - out.PodCIDR = in.PodCIDR - out.ExternalID = in.ExternalID - out.ProviderID = in.ProviderID - out.Unschedulable = in.Unschedulable - return nil -} - -func DeepCopy_api_NodeStatus(in NodeStatus, out *NodeStatus, c *conversion.Cloner) error { - if in.Capacity != nil { - in, out := in.Capacity, &out.Capacity - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Capacity = nil - } - if in.Allocatable != nil { - in, out := in.Allocatable, &out.Allocatable - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Allocatable = nil - } - out.Phase = in.Phase - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]NodeCondition, len(in)) - for i := range in { - if err := DeepCopy_api_NodeCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if in.Addresses != nil { - in, out := in.Addresses, &out.Addresses - *out = make([]NodeAddress, len(in)) - for i := range in { - if err := DeepCopy_api_NodeAddress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Addresses = nil - } - if err := DeepCopy_api_NodeDaemonEndpoints(in.DaemonEndpoints, &out.DaemonEndpoints, c); err != nil { - return err - } - if err := DeepCopy_api_NodeSystemInfo(in.NodeInfo, &out.NodeInfo, c); err != nil { - return err - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ContainerImage, len(in)) - for i := range in { - if err := DeepCopy_api_ContainerImage(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - if in.VolumesInUse != nil { - in, out := in.VolumesInUse, &out.VolumesInUse - *out = make([]UniqueVolumeName, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.VolumesInUse = nil - } - if in.VolumesAttached != nil { - in, out := in.VolumesAttached, &out.VolumesAttached - *out = make([]AttachedVolume, len(in)) - for i := range in { - if err := DeepCopy_api_AttachedVolume(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.VolumesAttached = nil - } - return nil -} - -func DeepCopy_api_NodeSystemInfo(in NodeSystemInfo, out *NodeSystemInfo, c *conversion.Cloner) error { - out.MachineID = in.MachineID - out.SystemUUID = in.SystemUUID - out.BootID = in.BootID - out.KernelVersion = in.KernelVersion - out.OSImage = in.OSImage - out.ContainerRuntimeVersion = in.ContainerRuntimeVersion - out.KubeletVersion = in.KubeletVersion - out.KubeProxyVersion = in.KubeProxyVersion - out.OperatingSystem = in.OperatingSystem - out.Architecture = in.Architecture - return nil -} - -func DeepCopy_api_ObjectFieldSelector(in ObjectFieldSelector, out *ObjectFieldSelector, c *conversion.Cloner) error { - out.APIVersion = in.APIVersion - out.FieldPath = in.FieldPath - return nil -} - -func DeepCopy_api_ObjectMeta(in ObjectMeta, out *ObjectMeta, c *conversion.Cloner) error { - out.Name = in.Name - out.GenerateName = in.GenerateName - out.Namespace = in.Namespace - out.SelfLink = in.SelfLink - out.UID = in.UID - out.ResourceVersion = in.ResourceVersion - out.Generation = in.Generation - if err := unversioned.DeepCopy_unversioned_Time(in.CreationTimestamp, &out.CreationTimestamp, c); err != nil { - return err - } - if in.DeletionTimestamp != nil { - in, out := in.DeletionTimestamp, &out.DeletionTimestamp - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.DeletionTimestamp = nil - } - if in.DeletionGracePeriodSeconds != nil { - in, out := in.DeletionGracePeriodSeconds, &out.DeletionGracePeriodSeconds - *out = new(int64) - **out = *in - } else { - out.DeletionGracePeriodSeconds = nil - } - if in.Labels != nil { - in, out := in.Labels, &out.Labels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Labels = nil - } - if in.Annotations != nil { - in, out := in.Annotations, &out.Annotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Annotations = nil - } - if in.OwnerReferences != nil { - in, out := in.OwnerReferences, &out.OwnerReferences - *out = make([]OwnerReference, len(in)) - for i := range in { - if err := DeepCopy_api_OwnerReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.OwnerReferences = nil - } - if in.Finalizers != nil { - in, out := in.Finalizers, &out.Finalizers - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Finalizers = nil - } - return nil -} - -func DeepCopy_api_ObjectReference(in ObjectReference, out *ObjectReference, c *conversion.Cloner) error { - out.Kind = in.Kind - out.Namespace = in.Namespace - out.Name = in.Name - out.UID = in.UID - out.APIVersion = in.APIVersion - out.ResourceVersion = in.ResourceVersion - out.FieldPath = in.FieldPath - return nil -} - -func DeepCopy_api_OwnerReference(in OwnerReference, out *OwnerReference, c *conversion.Cloner) error { - out.APIVersion = in.APIVersion - out.Kind = in.Kind - out.Name = in.Name - out.UID = in.UID - if in.Controller != nil { - in, out := in.Controller, &out.Controller - *out = new(bool) - **out = *in - } else { - out.Controller = nil - } - return nil -} - -func DeepCopy_api_PersistentVolume(in PersistentVolume, out *PersistentVolume, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PersistentVolumeSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_PersistentVolumeStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PersistentVolumeClaim(in PersistentVolumeClaim, out *PersistentVolumeClaim, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PersistentVolumeClaimSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_PersistentVolumeClaimStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PersistentVolumeClaimList(in PersistentVolumeClaimList, out *PersistentVolumeClaimList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PersistentVolumeClaim, len(in)) - for i := range in { - if err := DeepCopy_api_PersistentVolumeClaim(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_PersistentVolumeClaimSpec(in PersistentVolumeClaimSpec, out *PersistentVolumeClaimSpec, c *conversion.Cloner) error { - if in.AccessModes != nil { - in, out := in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AccessModes = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := DeepCopy_api_ResourceRequirements(in.Resources, &out.Resources, c); err != nil { - return err - } - out.VolumeName = in.VolumeName - return nil -} - -func DeepCopy_api_PersistentVolumeClaimStatus(in PersistentVolumeClaimStatus, out *PersistentVolumeClaimStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - if in.AccessModes != nil { - in, out := in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AccessModes = nil - } - if in.Capacity != nil { - in, out := in.Capacity, &out.Capacity - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Capacity = nil - } - return nil -} - -func DeepCopy_api_PersistentVolumeClaimVolumeSource(in PersistentVolumeClaimVolumeSource, out *PersistentVolumeClaimVolumeSource, c *conversion.Cloner) error { - out.ClaimName = in.ClaimName - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_PersistentVolumeList(in PersistentVolumeList, out *PersistentVolumeList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PersistentVolume, len(in)) - for i := range in { - if err := DeepCopy_api_PersistentVolume(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_PersistentVolumeSource(in PersistentVolumeSource, out *PersistentVolumeSource, c *conversion.Cloner) error { - if in.GCEPersistentDisk != nil { - in, out := in.GCEPersistentDisk, &out.GCEPersistentDisk - *out = new(GCEPersistentDiskVolumeSource) - if err := DeepCopy_api_GCEPersistentDiskVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.GCEPersistentDisk = nil - } - if in.AWSElasticBlockStore != nil { - in, out := in.AWSElasticBlockStore, &out.AWSElasticBlockStore - *out = new(AWSElasticBlockStoreVolumeSource) - if err := DeepCopy_api_AWSElasticBlockStoreVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.AWSElasticBlockStore = nil - } - if in.HostPath != nil { - in, out := in.HostPath, &out.HostPath - *out = new(HostPathVolumeSource) - if err := DeepCopy_api_HostPathVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.HostPath = nil - } - if in.Glusterfs != nil { - in, out := in.Glusterfs, &out.Glusterfs - *out = new(GlusterfsVolumeSource) - if err := DeepCopy_api_GlusterfsVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Glusterfs = nil - } - if in.NFS != nil { - in, out := in.NFS, &out.NFS - *out = new(NFSVolumeSource) - if err := DeepCopy_api_NFSVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.NFS = nil - } - if in.RBD != nil { - in, out := in.RBD, &out.RBD - *out = new(RBDVolumeSource) - if err := DeepCopy_api_RBDVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.RBD = nil - } - if in.ISCSI != nil { - in, out := in.ISCSI, &out.ISCSI - *out = new(ISCSIVolumeSource) - if err := DeepCopy_api_ISCSIVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.ISCSI = nil - } - if in.FlexVolume != nil { - in, out := in.FlexVolume, &out.FlexVolume - *out = new(FlexVolumeSource) - if err := DeepCopy_api_FlexVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.FlexVolume = nil - } - if in.Cinder != nil { - in, out := in.Cinder, &out.Cinder - *out = new(CinderVolumeSource) - if err := DeepCopy_api_CinderVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Cinder = nil - } - if in.CephFS != nil { - in, out := in.CephFS, &out.CephFS - *out = new(CephFSVolumeSource) - if err := DeepCopy_api_CephFSVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.CephFS = nil - } - if in.FC != nil { - in, out := in.FC, &out.FC - *out = new(FCVolumeSource) - if err := DeepCopy_api_FCVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.FC = nil - } - if in.Flocker != nil { - in, out := in.Flocker, &out.Flocker - *out = new(FlockerVolumeSource) - if err := DeepCopy_api_FlockerVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Flocker = nil - } - if in.AzureFile != nil { - in, out := in.AzureFile, &out.AzureFile - *out = new(AzureFileVolumeSource) - if err := DeepCopy_api_AzureFileVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.AzureFile = nil - } - if in.VsphereVolume != nil { - in, out := in.VsphereVolume, &out.VsphereVolume - *out = new(VsphereVirtualDiskVolumeSource) - if err := DeepCopy_api_VsphereVirtualDiskVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.VsphereVolume = nil - } - return nil -} - -func DeepCopy_api_PersistentVolumeSpec(in PersistentVolumeSpec, out *PersistentVolumeSpec, c *conversion.Cloner) error { - if in.Capacity != nil { - in, out := in.Capacity, &out.Capacity - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Capacity = nil - } - if err := DeepCopy_api_PersistentVolumeSource(in.PersistentVolumeSource, &out.PersistentVolumeSource, c); err != nil { - return err - } - if in.AccessModes != nil { - in, out := in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AccessModes = nil - } - if in.ClaimRef != nil { - in, out := in.ClaimRef, &out.ClaimRef - *out = new(ObjectReference) - if err := DeepCopy_api_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.ClaimRef = nil - } - out.PersistentVolumeReclaimPolicy = in.PersistentVolumeReclaimPolicy - return nil -} - -func DeepCopy_api_PersistentVolumeStatus(in PersistentVolumeStatus, out *PersistentVolumeStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - out.Message = in.Message - out.Reason = in.Reason - return nil -} - -func DeepCopy_api_Pod(in Pod, out *Pod, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PodSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_PodStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PodAffinity(in PodAffinity, out *PodAffinity, c *conversion.Cloner) error { - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = make([]PodAffinityTerm, len(in)) - for i := range in { - if err := DeepCopy_api_PodAffinityTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.RequiredDuringSchedulingIgnoredDuringExecution = nil - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]WeightedPodAffinityTerm, len(in)) - for i := range in { - if err := DeepCopy_api_WeightedPodAffinityTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.PreferredDuringSchedulingIgnoredDuringExecution = nil - } - return nil -} - -func DeepCopy_api_PodAffinityTerm(in PodAffinityTerm, out *PodAffinityTerm, c *conversion.Cloner) error { - if in.LabelSelector != nil { - in, out := in.LabelSelector, &out.LabelSelector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.LabelSelector = nil - } - if in.Namespaces != nil { - in, out := in.Namespaces, &out.Namespaces - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Namespaces = nil - } - out.TopologyKey = in.TopologyKey - return nil -} - -func DeepCopy_api_PodAntiAffinity(in PodAntiAffinity, out *PodAntiAffinity, c *conversion.Cloner) error { - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = make([]PodAffinityTerm, len(in)) - for i := range in { - if err := DeepCopy_api_PodAffinityTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.RequiredDuringSchedulingIgnoredDuringExecution = nil - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]WeightedPodAffinityTerm, len(in)) - for i := range in { - if err := DeepCopy_api_WeightedPodAffinityTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.PreferredDuringSchedulingIgnoredDuringExecution = nil - } - return nil -} - -func DeepCopy_api_PodAttachOptions(in PodAttachOptions, out *PodAttachOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Stdin = in.Stdin - out.Stdout = in.Stdout - out.Stderr = in.Stderr - out.TTY = in.TTY - out.Container = in.Container - return nil -} - -func DeepCopy_api_PodCondition(in PodCondition, out *PodCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_api_PodExecOptions(in PodExecOptions, out *PodExecOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Stdin = in.Stdin - out.Stdout = in.Stdout - out.Stderr = in.Stderr - out.TTY = in.TTY - out.Container = in.Container - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - return nil -} - -func DeepCopy_api_PodList(in PodList, out *PodList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Pod, len(in)) - for i := range in { - if err := DeepCopy_api_Pod(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_PodLogOptions(in PodLogOptions, out *PodLogOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Container = in.Container - out.Follow = in.Follow - out.Previous = in.Previous - if in.SinceSeconds != nil { - in, out := in.SinceSeconds, &out.SinceSeconds - *out = new(int64) - **out = *in - } else { - out.SinceSeconds = nil - } - if in.SinceTime != nil { - in, out := in.SinceTime, &out.SinceTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.SinceTime = nil - } - out.Timestamps = in.Timestamps - if in.TailLines != nil { - in, out := in.TailLines, &out.TailLines - *out = new(int64) - **out = *in - } else { - out.TailLines = nil - } - if in.LimitBytes != nil { - in, out := in.LimitBytes, &out.LimitBytes - *out = new(int64) - **out = *in - } else { - out.LimitBytes = nil - } - return nil -} - -func DeepCopy_api_PodProxyOptions(in PodProxyOptions, out *PodProxyOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Path = in.Path - return nil -} - -func DeepCopy_api_PodSecurityContext(in PodSecurityContext, out *PodSecurityContext, c *conversion.Cloner) error { - out.HostNetwork = in.HostNetwork - out.HostPID = in.HostPID - out.HostIPC = in.HostIPC - if in.SELinuxOptions != nil { - in, out := in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - if err := DeepCopy_api_SELinuxOptions(*in, *out, c); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - if in.RunAsUser != nil { - in, out := in.RunAsUser, &out.RunAsUser - *out = new(int64) - **out = *in - } else { - out.RunAsUser = nil - } - if in.RunAsNonRoot != nil { - in, out := in.RunAsNonRoot, &out.RunAsNonRoot - *out = new(bool) - **out = *in - } else { - out.RunAsNonRoot = nil - } - if in.SupplementalGroups != nil { - in, out := in.SupplementalGroups, &out.SupplementalGroups - *out = make([]int64, len(in)) - copy(*out, in) - } else { - out.SupplementalGroups = nil - } - if in.FSGroup != nil { - in, out := in.FSGroup, &out.FSGroup - *out = new(int64) - **out = *in - } else { - out.FSGroup = nil - } - return nil -} - -func DeepCopy_api_PodSpec(in PodSpec, out *PodSpec, c *conversion.Cloner) error { - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make([]Volume, len(in)) - for i := range in { - if err := DeepCopy_api_Volume(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Volumes = nil - } - if in.InitContainers != nil { - in, out := in.InitContainers, &out.InitContainers - *out = make([]Container, len(in)) - for i := range in { - if err := DeepCopy_api_Container(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.InitContainers = nil - } - if in.Containers != nil { - in, out := in.Containers, &out.Containers - *out = make([]Container, len(in)) - for i := range in { - if err := DeepCopy_api_Container(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Containers = nil - } - out.RestartPolicy = in.RestartPolicy - if in.TerminationGracePeriodSeconds != nil { - in, out := in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds - *out = new(int64) - **out = *in - } else { - out.TerminationGracePeriodSeconds = nil - } - if in.ActiveDeadlineSeconds != nil { - in, out := in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.ActiveDeadlineSeconds = nil - } - out.DNSPolicy = in.DNSPolicy - if in.NodeSelector != nil { - in, out := in.NodeSelector, &out.NodeSelector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.NodeSelector = nil - } - out.ServiceAccountName = in.ServiceAccountName - out.NodeName = in.NodeName - if in.SecurityContext != nil { - in, out := in.SecurityContext, &out.SecurityContext - *out = new(PodSecurityContext) - if err := DeepCopy_api_PodSecurityContext(*in, *out, c); err != nil { - return err - } - } else { - out.SecurityContext = nil - } - if in.ImagePullSecrets != nil { - in, out := in.ImagePullSecrets, &out.ImagePullSecrets - *out = make([]LocalObjectReference, len(in)) - for i := range in { - if err := DeepCopy_api_LocalObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ImagePullSecrets = nil - } - out.Hostname = in.Hostname - out.Subdomain = in.Subdomain - return nil -} - -func DeepCopy_api_PodStatus(in PodStatus, out *PodStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]PodCondition, len(in)) - for i := range in { - if err := DeepCopy_api_PodCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - out.Message = in.Message - out.Reason = in.Reason - out.HostIP = in.HostIP - out.PodIP = in.PodIP - if in.StartTime != nil { - in, out := in.StartTime, &out.StartTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.StartTime = nil - } - if in.InitContainerStatuses != nil { - in, out := in.InitContainerStatuses, &out.InitContainerStatuses - *out = make([]ContainerStatus, len(in)) - for i := range in { - if err := DeepCopy_api_ContainerStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.InitContainerStatuses = nil - } - if in.ContainerStatuses != nil { - in, out := in.ContainerStatuses, &out.ContainerStatuses - *out = make([]ContainerStatus, len(in)) - for i := range in { - if err := DeepCopy_api_ContainerStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ContainerStatuses = nil - } - return nil -} - -func DeepCopy_api_PodStatusResult(in PodStatusResult, out *PodStatusResult, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PodStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PodTemplate(in PodTemplate, out *PodTemplate, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_PodTemplateList(in PodTemplateList, out *PodTemplateList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PodTemplate, len(in)) - for i := range in { - if err := DeepCopy_api_PodTemplate(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_PodTemplateSpec(in PodTemplateSpec, out *PodTemplateSpec, c *conversion.Cloner) error { - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_PodSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_Preconditions(in Preconditions, out *Preconditions, c *conversion.Cloner) error { - if in.UID != nil { - in, out := in.UID, &out.UID - *out = new(types.UID) - **out = *in - } else { - out.UID = nil - } - return nil -} - -func DeepCopy_api_PreferredSchedulingTerm(in PreferredSchedulingTerm, out *PreferredSchedulingTerm, c *conversion.Cloner) error { - out.Weight = in.Weight - if err := DeepCopy_api_NodeSelectorTerm(in.Preference, &out.Preference, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_Probe(in Probe, out *Probe, c *conversion.Cloner) error { - if err := DeepCopy_api_Handler(in.Handler, &out.Handler, c); err != nil { - return err - } - out.InitialDelaySeconds = in.InitialDelaySeconds - out.TimeoutSeconds = in.TimeoutSeconds - out.PeriodSeconds = in.PeriodSeconds - out.SuccessThreshold = in.SuccessThreshold - out.FailureThreshold = in.FailureThreshold - return nil -} - -func DeepCopy_api_RBDVolumeSource(in RBDVolumeSource, out *RBDVolumeSource, c *conversion.Cloner) error { - if in.CephMonitors != nil { - in, out := in.CephMonitors, &out.CephMonitors - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.CephMonitors = nil - } - out.RBDImage = in.RBDImage - out.FSType = in.FSType - out.RBDPool = in.RBDPool - out.RadosUser = in.RadosUser - out.Keyring = in.Keyring - if in.SecretRef != nil { - in, out := in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - if err := DeepCopy_api_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SecretRef = nil - } - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_api_RangeAllocation(in RangeAllocation, out *RangeAllocation, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.Range = in.Range - if in.Data != nil { - in, out := in.Data, &out.Data - *out = make([]byte, len(in)) - copy(*out, in) - } else { - out.Data = nil - } - return nil -} - -func DeepCopy_api_ReplicationController(in ReplicationController, out *ReplicationController, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ReplicationControllerSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_ReplicationControllerStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ReplicationControllerList(in ReplicationControllerList, out *ReplicationControllerList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ReplicationController, len(in)) - for i := range in { - if err := DeepCopy_api_ReplicationController(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ReplicationControllerSpec(in ReplicationControllerSpec, out *ReplicationControllerSpec, c *conversion.Cloner) error { - out.Replicas = in.Replicas - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Selector = nil - } - if in.Template != nil { - in, out := in.Template, &out.Template - *out = new(PodTemplateSpec) - if err := DeepCopy_api_PodTemplateSpec(*in, *out, c); err != nil { - return err - } - } else { - out.Template = nil - } - return nil -} - -func DeepCopy_api_ReplicationControllerStatus(in ReplicationControllerStatus, out *ReplicationControllerStatus, c *conversion.Cloner) error { - out.Replicas = in.Replicas - out.FullyLabeledReplicas = in.FullyLabeledReplicas - out.ObservedGeneration = in.ObservedGeneration - return nil -} - -func DeepCopy_api_ResourceFieldSelector(in ResourceFieldSelector, out *ResourceFieldSelector, c *conversion.Cloner) error { - out.ContainerName = in.ContainerName - out.Resource = in.Resource - if err := resource.DeepCopy_resource_Quantity(in.Divisor, &out.Divisor, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ResourceQuota(in ResourceQuota, out *ResourceQuota, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ResourceQuotaSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_ResourceQuotaStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ResourceQuotaList(in ResourceQuotaList, out *ResourceQuotaList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ResourceQuota, len(in)) - for i := range in { - if err := DeepCopy_api_ResourceQuota(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ResourceQuotaSpec(in ResourceQuotaSpec, out *ResourceQuotaSpec, c *conversion.Cloner) error { - if in.Hard != nil { - in, out := in.Hard, &out.Hard - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Hard = nil - } - if in.Scopes != nil { - in, out := in.Scopes, &out.Scopes - *out = make([]ResourceQuotaScope, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Scopes = nil - } - return nil -} - -func DeepCopy_api_ResourceQuotaStatus(in ResourceQuotaStatus, out *ResourceQuotaStatus, c *conversion.Cloner) error { - if in.Hard != nil { - in, out := in.Hard, &out.Hard - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Hard = nil - } - if in.Used != nil { - in, out := in.Used, &out.Used - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Used = nil - } - return nil -} - -func DeepCopy_api_ResourceRequirements(in ResourceRequirements, out *ResourceRequirements, c *conversion.Cloner) error { - if in.Limits != nil { - in, out := in.Limits, &out.Limits - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Limits = nil - } - if in.Requests != nil { - in, out := in.Requests, &out.Requests - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Requests = nil - } - return nil -} - -func DeepCopy_api_RunAsUserStrategyOptions(in RunAsUserStrategyOptions, out *RunAsUserStrategyOptions, c *conversion.Cloner) error { - out.Type = in.Type - if in.UID != nil { - in, out := in.UID, &out.UID - *out = new(int64) - **out = *in - } else { - out.UID = nil - } - if in.UIDRangeMin != nil { - in, out := in.UIDRangeMin, &out.UIDRangeMin - *out = new(int64) - **out = *in - } else { - out.UIDRangeMin = nil - } - if in.UIDRangeMax != nil { - in, out := in.UIDRangeMax, &out.UIDRangeMax - *out = new(int64) - **out = *in - } else { - out.UIDRangeMax = nil - } - return nil -} - -func DeepCopy_api_SELinuxContextStrategyOptions(in SELinuxContextStrategyOptions, out *SELinuxContextStrategyOptions, c *conversion.Cloner) error { - out.Type = in.Type - if in.SELinuxOptions != nil { - in, out := in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - if err := DeepCopy_api_SELinuxOptions(*in, *out, c); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - return nil -} - -func DeepCopy_api_SELinuxOptions(in SELinuxOptions, out *SELinuxOptions, c *conversion.Cloner) error { - out.User = in.User - out.Role = in.Role - out.Type = in.Type - out.Level = in.Level - return nil -} - -func DeepCopy_api_Secret(in Secret, out *Secret, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Data != nil { - in, out := in.Data, &out.Data - *out = make(map[string][]byte) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.([]byte) - } - } - } else { - out.Data = nil - } - out.Type = in.Type - return nil -} - -func DeepCopy_api_SecretKeySelector(in SecretKeySelector, out *SecretKeySelector, c *conversion.Cloner) error { - if err := DeepCopy_api_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil { - return err - } - out.Key = in.Key - return nil -} - -func DeepCopy_api_SecretList(in SecretList, out *SecretList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Secret, len(in)) - for i := range in { - if err := DeepCopy_api_Secret(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_SecretVolumeSource(in SecretVolumeSource, out *SecretVolumeSource, c *conversion.Cloner) error { - out.SecretName = in.SecretName - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]KeyToPath, len(in)) - for i := range in { - if err := DeepCopy_api_KeyToPath(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_SecurityContext(in SecurityContext, out *SecurityContext, c *conversion.Cloner) error { - if in.Capabilities != nil { - in, out := in.Capabilities, &out.Capabilities - *out = new(Capabilities) - if err := DeepCopy_api_Capabilities(*in, *out, c); err != nil { - return err - } - } else { - out.Capabilities = nil - } - if in.Privileged != nil { - in, out := in.Privileged, &out.Privileged - *out = new(bool) - **out = *in - } else { - out.Privileged = nil - } - if in.SELinuxOptions != nil { - in, out := in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - if err := DeepCopy_api_SELinuxOptions(*in, *out, c); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - if in.RunAsUser != nil { - in, out := in.RunAsUser, &out.RunAsUser - *out = new(int64) - **out = *in - } else { - out.RunAsUser = nil - } - if in.RunAsNonRoot != nil { - in, out := in.RunAsNonRoot, &out.RunAsNonRoot - *out = new(bool) - **out = *in - } else { - out.RunAsNonRoot = nil - } - if in.ReadOnlyRootFilesystem != nil { - in, out := in.ReadOnlyRootFilesystem, &out.ReadOnlyRootFilesystem - *out = new(bool) - **out = *in - } else { - out.ReadOnlyRootFilesystem = nil - } - return nil -} - -func DeepCopy_api_SecurityContextConstraints(in SecurityContextConstraints, out *SecurityContextConstraints, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Priority != nil { - in, out := in.Priority, &out.Priority - *out = new(int32) - **out = *in - } else { - out.Priority = nil - } - out.AllowPrivilegedContainer = in.AllowPrivilegedContainer - if in.DefaultAddCapabilities != nil { - in, out := in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.DefaultAddCapabilities = nil - } - if in.RequiredDropCapabilities != nil { - in, out := in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.RequiredDropCapabilities = nil - } - if in.AllowedCapabilities != nil { - in, out := in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AllowedCapabilities = nil - } - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make([]FSType, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Volumes = nil - } - out.AllowHostNetwork = in.AllowHostNetwork - out.AllowHostPorts = in.AllowHostPorts - out.AllowHostPID = in.AllowHostPID - out.AllowHostIPC = in.AllowHostIPC - if err := DeepCopy_api_SELinuxContextStrategyOptions(in.SELinuxContext, &out.SELinuxContext, c); err != nil { - return err - } - if err := DeepCopy_api_RunAsUserStrategyOptions(in.RunAsUser, &out.RunAsUser, c); err != nil { - return err - } - if err := DeepCopy_api_SupplementalGroupsStrategyOptions(in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { - return err - } - if err := DeepCopy_api_FSGroupStrategyOptions(in.FSGroup, &out.FSGroup, c); err != nil { - return err - } - out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem - if in.Users != nil { - in, out := in.Users, &out.Users - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Users = nil - } - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Groups = nil - } - return nil -} - -func DeepCopy_api_SecurityContextConstraintsList(in SecurityContextConstraintsList, out *SecurityContextConstraintsList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]SecurityContextConstraints, len(in)) - for i := range in { - if err := DeepCopy_api_SecurityContextConstraints(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_SerializedReference(in SerializedReference, out *SerializedReference, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectReference(in.Reference, &out.Reference, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_Service(in Service, out *Service, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ServiceSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_api_ServiceStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_ServiceAccount(in ServiceAccount, out *ServiceAccount, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Secrets != nil { - in, out := in.Secrets, &out.Secrets - *out = make([]ObjectReference, len(in)) - for i := range in { - if err := DeepCopy_api_ObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Secrets = nil - } - if in.ImagePullSecrets != nil { - in, out := in.ImagePullSecrets, &out.ImagePullSecrets - *out = make([]LocalObjectReference, len(in)) - for i := range in { - if err := DeepCopy_api_LocalObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ImagePullSecrets = nil - } - return nil -} - -func DeepCopy_api_ServiceAccountList(in ServiceAccountList, out *ServiceAccountList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ServiceAccount, len(in)) - for i := range in { - if err := DeepCopy_api_ServiceAccount(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ServiceList(in ServiceList, out *ServiceList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Service, len(in)) - for i := range in { - if err := DeepCopy_api_Service(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_api_ServicePort(in ServicePort, out *ServicePort, c *conversion.Cloner) error { - out.Name = in.Name - out.Protocol = in.Protocol - out.Port = in.Port - if err := intstr.DeepCopy_intstr_IntOrString(in.TargetPort, &out.TargetPort, c); err != nil { - return err - } - out.NodePort = in.NodePort - return nil -} - -func DeepCopy_api_ServiceProxyOptions(in ServiceProxyOptions, out *ServiceProxyOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Path = in.Path - return nil -} - -func DeepCopy_api_ServiceSpec(in ServiceSpec, out *ServiceSpec, c *conversion.Cloner) error { - out.Type = in.Type - if in.Ports != nil { - in, out := in.Ports, &out.Ports - *out = make([]ServicePort, len(in)) - for i := range in { - if err := DeepCopy_api_ServicePort(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ports = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Selector = nil - } - out.ClusterIP = in.ClusterIP - if in.ExternalIPs != nil { - in, out := in.ExternalIPs, &out.ExternalIPs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.ExternalIPs = nil - } - out.LoadBalancerIP = in.LoadBalancerIP - out.SessionAffinity = in.SessionAffinity - if in.LoadBalancerSourceRanges != nil { - in, out := in.LoadBalancerSourceRanges, &out.LoadBalancerSourceRanges - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.LoadBalancerSourceRanges = nil - } - return nil -} - -func DeepCopy_api_ServiceStatus(in ServiceStatus, out *ServiceStatus, c *conversion.Cloner) error { - if err := DeepCopy_api_LoadBalancerStatus(in.LoadBalancer, &out.LoadBalancer, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_SupplementalGroupsStrategyOptions(in SupplementalGroupsStrategyOptions, out *SupplementalGroupsStrategyOptions, c *conversion.Cloner) error { - out.Type = in.Type - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_api_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_api_TCPSocketAction(in TCPSocketAction, out *TCPSocketAction, c *conversion.Cloner) error { - if err := intstr.DeepCopy_intstr_IntOrString(in.Port, &out.Port, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_Taint(in Taint, out *Taint, c *conversion.Cloner) error { - out.Key = in.Key - out.Value = in.Value - out.Effect = in.Effect - return nil -} - -func DeepCopy_api_Toleration(in Toleration, out *Toleration, c *conversion.Cloner) error { - out.Key = in.Key - out.Operator = in.Operator - out.Value = in.Value - out.Effect = in.Effect - return nil -} - -func DeepCopy_api_Volume(in Volume, out *Volume, c *conversion.Cloner) error { - out.Name = in.Name - if err := DeepCopy_api_VolumeSource(in.VolumeSource, &out.VolumeSource, c); err != nil { - return err - } - return nil -} - -func DeepCopy_api_VolumeMount(in VolumeMount, out *VolumeMount, c *conversion.Cloner) error { - out.Name = in.Name - out.ReadOnly = in.ReadOnly - out.MountPath = in.MountPath - out.SubPath = in.SubPath - return nil -} - -func DeepCopy_api_VolumeSource(in VolumeSource, out *VolumeSource, c *conversion.Cloner) error { - if in.HostPath != nil { - in, out := in.HostPath, &out.HostPath - *out = new(HostPathVolumeSource) - if err := DeepCopy_api_HostPathVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.HostPath = nil - } - if in.EmptyDir != nil { - in, out := in.EmptyDir, &out.EmptyDir - *out = new(EmptyDirVolumeSource) - if err := DeepCopy_api_EmptyDirVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.EmptyDir = nil - } - if in.GCEPersistentDisk != nil { - in, out := in.GCEPersistentDisk, &out.GCEPersistentDisk - *out = new(GCEPersistentDiskVolumeSource) - if err := DeepCopy_api_GCEPersistentDiskVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.GCEPersistentDisk = nil - } - if in.AWSElasticBlockStore != nil { - in, out := in.AWSElasticBlockStore, &out.AWSElasticBlockStore - *out = new(AWSElasticBlockStoreVolumeSource) - if err := DeepCopy_api_AWSElasticBlockStoreVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.AWSElasticBlockStore = nil - } - if in.GitRepo != nil { - in, out := in.GitRepo, &out.GitRepo - *out = new(GitRepoVolumeSource) - if err := DeepCopy_api_GitRepoVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.GitRepo = nil - } - if in.Secret != nil { - in, out := in.Secret, &out.Secret - *out = new(SecretVolumeSource) - if err := DeepCopy_api_SecretVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Secret = nil - } - if in.NFS != nil { - in, out := in.NFS, &out.NFS - *out = new(NFSVolumeSource) - if err := DeepCopy_api_NFSVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.NFS = nil - } - if in.ISCSI != nil { - in, out := in.ISCSI, &out.ISCSI - *out = new(ISCSIVolumeSource) - if err := DeepCopy_api_ISCSIVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.ISCSI = nil - } - if in.Glusterfs != nil { - in, out := in.Glusterfs, &out.Glusterfs - *out = new(GlusterfsVolumeSource) - if err := DeepCopy_api_GlusterfsVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Glusterfs = nil - } - if in.PersistentVolumeClaim != nil { - in, out := in.PersistentVolumeClaim, &out.PersistentVolumeClaim - *out = new(PersistentVolumeClaimVolumeSource) - if err := DeepCopy_api_PersistentVolumeClaimVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.PersistentVolumeClaim = nil - } - if in.RBD != nil { - in, out := in.RBD, &out.RBD - *out = new(RBDVolumeSource) - if err := DeepCopy_api_RBDVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.RBD = nil - } - if in.FlexVolume != nil { - in, out := in.FlexVolume, &out.FlexVolume - *out = new(FlexVolumeSource) - if err := DeepCopy_api_FlexVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.FlexVolume = nil - } - if in.Cinder != nil { - in, out := in.Cinder, &out.Cinder - *out = new(CinderVolumeSource) - if err := DeepCopy_api_CinderVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Cinder = nil - } - if in.CephFS != nil { - in, out := in.CephFS, &out.CephFS - *out = new(CephFSVolumeSource) - if err := DeepCopy_api_CephFSVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.CephFS = nil - } - if in.Flocker != nil { - in, out := in.Flocker, &out.Flocker - *out = new(FlockerVolumeSource) - if err := DeepCopy_api_FlockerVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Flocker = nil - } - if in.DownwardAPI != nil { - in, out := in.DownwardAPI, &out.DownwardAPI - *out = new(DownwardAPIVolumeSource) - if err := DeepCopy_api_DownwardAPIVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.DownwardAPI = nil - } - if in.FC != nil { - in, out := in.FC, &out.FC - *out = new(FCVolumeSource) - if err := DeepCopy_api_FCVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.FC = nil - } - if in.AzureFile != nil { - in, out := in.AzureFile, &out.AzureFile - *out = new(AzureFileVolumeSource) - if err := DeepCopy_api_AzureFileVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.AzureFile = nil - } - if in.ConfigMap != nil { - in, out := in.ConfigMap, &out.ConfigMap - *out = new(ConfigMapVolumeSource) - if err := DeepCopy_api_ConfigMapVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.ConfigMap = nil - } - if in.VsphereVolume != nil { - in, out := in.VsphereVolume, &out.VsphereVolume - *out = new(VsphereVirtualDiskVolumeSource) - if err := DeepCopy_api_VsphereVirtualDiskVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.VsphereVolume = nil - } - return nil -} - -func DeepCopy_api_VsphereVirtualDiskVolumeSource(in VsphereVirtualDiskVolumeSource, out *VsphereVirtualDiskVolumeSource, c *conversion.Cloner) error { - out.VolumePath = in.VolumePath - out.FSType = in.FSType - return nil -} - -func DeepCopy_api_WeightedPodAffinityTerm(in WeightedPodAffinityTerm, out *WeightedPodAffinityTerm, c *conversion.Cloner) error { - out.Weight = in.Weight - if err := DeepCopy_api_PodAffinityTerm(in.PodAffinityTerm, &out.PodAffinityTerm, c); err != nil { - return err - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/api/defaults.go b/vendor/k8s.io/kubernetes/pkg/api/defaults.go new file mode 100644 index 00000000..a2b01b7f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/defaults.go @@ -0,0 +1,36 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package api + +import ( + "k8s.io/kubernetes/pkg/fields" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" +) + +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( + func(obj *ListOptions) { + if obj.LabelSelector == nil { + obj.LabelSelector = labels.Everything() + } + if obj.FieldSelector == nil { + obj.FieldSelector = fields.Everything() + } + }, + ) +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/doc.go b/vendor/k8s.io/kubernetes/pkg/api/doc.go index 8a54f7ac..1507a882 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/api/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// +k8s:deepcopy-gen=package,register + // Package api contains the latest (or "internal") version of the // Kubernetes API objects. This is the API objects as represented in memory. // The contract presented to clients is located in the versioned packages, diff --git a/vendor/k8s.io/kubernetes/pkg/api/endpoints/util.go b/vendor/k8s.io/kubernetes/pkg/api/endpoints/util.go index 501d58f2..792a2536 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/endpoints/util.go +++ b/vendor/k8s.io/kubernetes/pkg/api/endpoints/util.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/errors/doc.go b/vendor/k8s.io/kubernetes/pkg/api/errors/doc.go index 3a2eb2a0..58751ed0 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/errors/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/api/errors/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/errors/errors.go b/vendor/k8s.io/kubernetes/pkg/api/errors/errors.go index 89e83c2e..44bfe82f 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/errors/errors.go +++ b/vendor/k8s.io/kubernetes/pkg/api/errors/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -325,13 +325,13 @@ func NewGenericServerResponse(code int, verb string, qualifiedResource unversion default: if code >= 500 { reason = unversioned.StatusReasonInternalError - message = "an error on the server has prevented the request from succeeding" + message = fmt.Sprintf("an error on the server (%q) has prevented the request from succeeding", serverMessage) } } switch { - case !qualifiedResource.IsEmpty() && len(name) > 0: + case !qualifiedResource.Empty() && len(name) > 0: message = fmt.Sprintf("%s (%s %s %s)", message, strings.ToLower(verb), qualifiedResource.String(), name) - case !qualifiedResource.IsEmpty(): + case !qualifiedResource.Empty(): message = fmt.Sprintf("%s (%s %s)", message, strings.ToLower(verb), qualifiedResource.String()) } var causes []unversioned.StatusCause diff --git a/vendor/k8s.io/kubernetes/pkg/api/field_constants.go b/vendor/k8s.io/kubernetes/pkg/api/field_constants.go index 94a825ca..5ead0f13 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/field_constants.go +++ b/vendor/k8s.io/kubernetes/pkg/api/field_constants.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/generate.go b/vendor/k8s.io/kubernetes/pkg/api/generate.go index 2cca5e52..19379d30 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/generate.go +++ b/vendor/k8s.io/kubernetes/pkg/api/generate.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/helpers.go b/vendor/k8s.io/kubernetes/pkg/api/helpers.go index 1349ef62..50e811b3 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/api/helpers.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ import ( "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/selection" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util/sets" @@ -134,6 +135,7 @@ var standardQuotaResources = sets.NewString( string(ResourceMemory), string(ResourceRequestsCPU), string(ResourceRequestsMemory), + string(ResourceRequestsStorage), string(ResourceLimitsCPU), string(ResourceLimitsMemory), string(ResourcePods), @@ -221,6 +223,10 @@ func IsServiceIPSet(service *Service) bool { // this function aims to check if the service's cluster IP is requested or not func IsServiceIPRequested(service *Service) bool { + // ExternalName services are CNAME aliases to external ones. Ignore the IP. + if service.Spec.Type == ServiceTypeExternalName { + return false + } return service.Spec.ClusterIP == "" } @@ -378,20 +384,20 @@ func NodeSelectorRequirementsAsSelector(nsm []NodeSelectorRequirement) (labels.S } selector := labels.NewSelector() for _, expr := range nsm { - var op labels.Operator + var op selection.Operator switch expr.Operator { case NodeSelectorOpIn: - op = labels.InOperator + op = selection.In case NodeSelectorOpNotIn: - op = labels.NotInOperator + op = selection.NotIn case NodeSelectorOpExists: - op = labels.ExistsOperator + op = selection.Exists case NodeSelectorOpDoesNotExist: - op = labels.DoesNotExistOperator + op = selection.DoesNotExist case NodeSelectorOpGt: - op = labels.GreaterThanOperator + op = selection.GreaterThan case NodeSelectorOpLt: - op = labels.LessThanOperator + op = selection.LessThan default: return nil, fmt.Errorf("%q is not a valid node selector operator", expr.Operator) } @@ -424,19 +430,42 @@ const ( // SeccompContainerAnnotationKeyPrefix represents the key of a seccomp profile applied // to one container of a pod. SeccompContainerAnnotationKeyPrefix string = "container.seccomp.security.alpha.kubernetes.io/" + + // CreatedByAnnotation represents the key used to store the spec(json) + // used to create the resource. + CreatedByAnnotation = "kubernetes.io/created-by" + + // PreferAvoidPodsAnnotationKey represents the key of preferAvoidPods data (json serialized) + // in the Annotations of a Node. + PreferAvoidPodsAnnotationKey string = "scheduler.alpha.kubernetes.io/preferAvoidPods" + + // SysctlsPodAnnotationKey represents the key of sysctls which are set for the infrastructure + // container of a pod. The annotation value is a comma separated list of sysctl_name=value + // key-value pairs. Only a limited set of whitelisted and isolated sysctls is supported by + // the kubelet. Pods with other sysctls will fail to launch. + SysctlsPodAnnotationKey string = "security.alpha.kubernetes.io/sysctls" + + // UnsafeSysctlsPodAnnotationKey represents the key of sysctls which are set for the infrastructure + // container of a pod. The annotation value is a comma separated list of sysctl_name=value + // key-value pairs. Unsafe sysctls must be explicitly enabled for a kubelet. They are properly + // namespaced to a pod or a container, but their isolation is usually unclear or weak. Their use + // is at-your-own-risk. Pods that attempt to set an unsafe sysctl that is not enabled for a kubelet + // will fail to launch. + UnsafeSysctlsPodAnnotationKey string = "security.alpha.kubernetes.io/unsafe-sysctls" ) // GetAffinityFromPod gets the json serialized affinity data from Pod.Annotations // and converts it to the Affinity type in api. -func GetAffinityFromPodAnnotations(annotations map[string]string) (Affinity, error) { - var affinity Affinity +func GetAffinityFromPodAnnotations(annotations map[string]string) (*Affinity, error) { if len(annotations) > 0 && annotations[AffinityAnnotationKey] != "" { + var affinity Affinity err := json.Unmarshal([]byte(annotations[AffinityAnnotationKey]), &affinity) if err != nil { - return affinity, err + return nil, err } + return &affinity, nil } - return affinity, nil + return nil, nil } // GetTolerationsFromPodAnnotations gets the json serialized tolerations data from Pod.Annotations @@ -466,7 +495,7 @@ func GetTaintsFromNodeAnnotations(annotations map[string]string) ([]Taint, error } // TolerationToleratesTaint checks if the toleration tolerates the taint. -func TolerationToleratesTaint(toleration Toleration, taint Taint) bool { +func TolerationToleratesTaint(toleration *Toleration, taint *Taint) bool { if len(toleration.Effect) != 0 && toleration.Effect != taint.Effect { return false } @@ -486,13 +515,72 @@ func TolerationToleratesTaint(toleration Toleration, taint Taint) bool { } // TaintToleratedByTolerations checks if taint is tolerated by any of the tolerations. -func TaintToleratedByTolerations(taint Taint, tolerations []Toleration) bool { +func TaintToleratedByTolerations(taint *Taint, tolerations []Toleration) bool { tolerated := false - for _, toleration := range tolerations { - if TolerationToleratesTaint(toleration, taint) { + for i := range tolerations { + if TolerationToleratesTaint(&tolerations[i], taint) { tolerated = true break } } return tolerated } + +func GetAvoidPodsFromNodeAnnotations(annotations map[string]string) (AvoidPods, error) { + var avoidPods AvoidPods + if len(annotations) > 0 && annotations[PreferAvoidPodsAnnotationKey] != "" { + err := json.Unmarshal([]byte(annotations[PreferAvoidPodsAnnotationKey]), &avoidPods) + if err != nil { + return avoidPods, err + } + } + return avoidPods, nil +} + +// SysctlsFromPodAnnotations parses the sysctl annotations into a slice of safe Sysctls +// and a slice of unsafe Sysctls. This is only a convenience wrapper around +// SysctlsFromPodAnnotation. +func SysctlsFromPodAnnotations(a map[string]string) ([]Sysctl, []Sysctl, error) { + safe, err := SysctlsFromPodAnnotation(a[SysctlsPodAnnotationKey]) + if err != nil { + return nil, nil, err + } + unsafe, err := SysctlsFromPodAnnotation(a[UnsafeSysctlsPodAnnotationKey]) + if err != nil { + return nil, nil, err + } + + return safe, unsafe, nil +} + +// SysctlsFromPodAnnotation parses an annotation value into a slice of Sysctls. +func SysctlsFromPodAnnotation(annotation string) ([]Sysctl, error) { + if len(annotation) == 0 { + return nil, nil + } + + kvs := strings.Split(annotation, ",") + sysctls := make([]Sysctl, len(kvs)) + for i, kv := range kvs { + cs := strings.Split(kv, "=") + if len(cs) != 2 { + return nil, fmt.Errorf("sysctl %q not of the format sysctl_name=value", kv) + } + sysctls[i].Name = cs[0] + sysctls[i].Value = cs[1] + } + return sysctls, nil +} + +// PodAnnotationsFromSysctls creates an annotation value for a slice of Sysctls. +func PodAnnotationsFromSysctls(sysctls []Sysctl) string { + if len(sysctls) == 0 { + return "" + } + + kvs := make([]string, len(sysctls)) + for i := range sysctls { + kvs[i] = fmt.Sprintf("%s=%s", sysctls[i].Name, sysctls[i].Value) + } + return strings.Join(kvs, ",") +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/install/install.go b/vendor/k8s.io/kubernetes/pkg/api/install/install.go index a71a365a..b8e1532f 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/api/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,10 +29,8 @@ import ( "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apimachinery" "k8s.io/kubernetes/pkg/apimachinery/registered" - "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/sets" - "k8s.io/kubernetes/pkg/watch/versioned" ) const importPrefix = "k8s.io/kubernetes/pkg/api" @@ -141,7 +139,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - api.AddToScheme(api.Scheme) + if err := api.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -150,103 +151,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1.SchemeGroupVersion: - v1.AddToScheme(api.Scheme) + if err := v1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } - - // This is a "fast-path" that avoids reflection for common types. It focuses on the objects that are - // converted the most in the cluster. - // TODO: generate one of these for every external API group - this is to prove the impact - api.Scheme.AddGenericConversionFunc(func(objA, objB interface{}, s conversion.Scope) (bool, error) { - switch a := objA.(type) { - case *v1.Pod: - switch b := objB.(type) { - case *api.Pod: - return true, v1.Convert_v1_Pod_To_api_Pod(a, b, s) - } - case *api.Pod: - switch b := objB.(type) { - case *v1.Pod: - return true, v1.Convert_api_Pod_To_v1_Pod(a, b, s) - } - - case *v1.Event: - switch b := objB.(type) { - case *api.Event: - return true, v1.Convert_v1_Event_To_api_Event(a, b, s) - } - case *api.Event: - switch b := objB.(type) { - case *v1.Event: - return true, v1.Convert_api_Event_To_v1_Event(a, b, s) - } - - case *v1.ReplicationController: - switch b := objB.(type) { - case *api.ReplicationController: - return true, v1.Convert_v1_ReplicationController_To_api_ReplicationController(a, b, s) - } - case *api.ReplicationController: - switch b := objB.(type) { - case *v1.ReplicationController: - return true, v1.Convert_api_ReplicationController_To_v1_ReplicationController(a, b, s) - } - - case *v1.Node: - switch b := objB.(type) { - case *api.Node: - return true, v1.Convert_v1_Node_To_api_Node(a, b, s) - } - case *api.Node: - switch b := objB.(type) { - case *v1.Node: - return true, v1.Convert_api_Node_To_v1_Node(a, b, s) - } - - case *v1.Namespace: - switch b := objB.(type) { - case *api.Namespace: - return true, v1.Convert_v1_Namespace_To_api_Namespace(a, b, s) - } - case *api.Namespace: - switch b := objB.(type) { - case *v1.Namespace: - return true, v1.Convert_api_Namespace_To_v1_Namespace(a, b, s) - } - - case *v1.Service: - switch b := objB.(type) { - case *api.Service: - return true, v1.Convert_v1_Service_To_api_Service(a, b, s) - } - case *api.Service: - switch b := objB.(type) { - case *v1.Service: - return true, v1.Convert_api_Service_To_v1_Service(a, b, s) - } - - case *v1.Endpoints: - switch b := objB.(type) { - case *api.Endpoints: - return true, v1.Convert_v1_Endpoints_To_api_Endpoints(a, b, s) - } - case *api.Endpoints: - switch b := objB.(type) { - case *v1.Endpoints: - return true, v1.Convert_api_Endpoints_To_v1_Endpoints(a, b, s) - } - - case *versioned.Event: - switch b := objB.(type) { - case *versioned.InternalEvent: - return true, versioned.Convert_versioned_Event_to_versioned_InternalEvent(a, b, s) - } - case *versioned.InternalEvent: - switch b := objB.(type) { - case *versioned.Event: - return true, versioned.Convert_versioned_InternalEvent_to_versioned_Event(a, b, s) - } - } - return false, nil - }) } diff --git a/vendor/k8s.io/kubernetes/pkg/api/mapper.go b/vendor/k8s.io/kubernetes/pkg/api/mapper.go index 0216771e..c5876b8c 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/mapper.go +++ b/vendor/k8s.io/kubernetes/pkg/api/mapper.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import ( "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/sets" ) @@ -34,14 +35,21 @@ func RegisterRESTMapper(m meta.RESTMapper) { RESTMapper = append(RESTMapper.(meta.MultiRESTMapper), m) } +// Instantiates a DefaultRESTMapper based on types registered in api.Scheme func NewDefaultRESTMapper(defaultGroupVersions []unversioned.GroupVersion, interfacesFunc meta.VersionInterfacesFunc, importPathPrefix string, ignoredKinds, rootScoped sets.String) *meta.DefaultRESTMapper { + return NewDefaultRESTMapperFromScheme(defaultGroupVersions, interfacesFunc, importPathPrefix, ignoredKinds, rootScoped, Scheme) +} + +// Instantiates a DefaultRESTMapper based on types registered in the given scheme. +func NewDefaultRESTMapperFromScheme(defaultGroupVersions []unversioned.GroupVersion, interfacesFunc meta.VersionInterfacesFunc, + importPathPrefix string, ignoredKinds, rootScoped sets.String, scheme *runtime.Scheme) *meta.DefaultRESTMapper { mapper := meta.NewDefaultRESTMapper(defaultGroupVersions, interfacesFunc) // enumerate all supported versions, get the kinds, and register with the mapper how to address // our resources. for _, gv := range defaultGroupVersions { - for kind, oType := range Scheme.KnownTypes(gv) { + for kind, oType := range scheme.KnownTypes(gv) { gvk := gv.WithKind(kind) // TODO: Remove import path check. // We check the import path because we currently stuff both "api" and "extensions" objects diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta.go b/vendor/k8s.io/kubernetes/pkg/api/meta.go index 9d5dae2c..a05d6944 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,13 +23,19 @@ import ( "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/types" - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/uuid" ) // FillObjectMetaSystemFields populates fields that are managed by the system on ObjectMeta. func FillObjectMetaSystemFields(ctx Context, meta *ObjectMeta) { meta.CreationTimestamp = unversioned.Now() - meta.UID = util.NewUUID() + // allows admission controllers to assign a UID earlier in the request processing + // to support tracking resources pending creation. + uid, found := UIDFrom(ctx) + if !found { + uid = uuid.NewUUID() + } + meta.UID = uid meta.SelfLink = "" } @@ -67,8 +73,6 @@ func ListMetaFor(obj runtime.Object) (*unversioned.ListMeta, error) { func (obj *ObjectMeta) GetObjectMeta() meta.Object { return obj } -func (obj *ObjectReference) GetObjectKind() unversioned.ObjectKind { return obj } - // Namespace implements meta.Object for any object with an ObjectMeta typed field. Allows // fast, direct access to metadata fields for API objects. func (meta *ObjectMeta) GetNamespace() string { return meta.Namespace } @@ -127,3 +131,10 @@ func (meta *ObjectMeta) SetOwnerReferences(references []metatypes.OwnerReference } meta.OwnerReferences = newReferences } + +func (meta *ObjectMeta) GetClusterName() string { + return meta.ClusterName +} +func (meta *ObjectMeta) SetClusterName(clusterName string) { + meta.ClusterName = clusterName +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/doc.go b/vendor/k8s.io/kubernetes/pkg/api/meta/doc.go index 4a132184..a3b18a5c 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/errors.go b/vendor/k8s.io/kubernetes/pkg/api/meta/errors.go index 74b3b7b0..70452965 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta/errors.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/help.go b/vendor/k8s.io/kubernetes/pkg/api/meta/help.go index cdc07930..0d733a58 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta/help.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/help.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/interfaces.go b/vendor/k8s.io/kubernetes/pkg/api/meta/interfaces.go index 718c437b..80dab0b7 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta/interfaces.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/interfaces.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -62,6 +62,8 @@ type Object interface { SetFinalizers(finalizers []string) GetOwnerReferences() []metatypes.OwnerReference SetOwnerReferences([]metatypes.OwnerReference) + GetClusterName() string + SetClusterName(clusterName string) } var _ Object = &runtime.Unstructured{} @@ -161,16 +163,16 @@ type RESTMapping struct { // TODO(caesarxuchao): Add proper multi-group support so that kinds & resources are // scoped to groups. See http://issues.k8s.io/12413 and http://issues.k8s.io/10009. type RESTMapper interface { - // KindFor takes a partial resource and returns back the single match. Returns an error if there are multiple matches + // KindFor takes a partial resource and returns the single match. Returns an error if there are multiple matches KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) - // KindsFor takes a partial resource and returns back the list of potential kinds in priority order + // KindsFor takes a partial resource and returns the list of potential kinds in priority order KindsFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) - // ResourceFor takes a partial resource and returns back the single match. Returns an error if there are multiple matches + // ResourceFor takes a partial resource and returns the single match. Returns an error if there are multiple matches ResourceFor(input unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) - // ResourcesFor takes a partial resource and returns back the list of potential resource in priority order + // ResourcesFor takes a partial resource and returns the list of potential resource in priority order ResourcesFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) // RESTMapping identifies a preferred resource mapping for the provided group kind. diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/meta.go b/vendor/k8s.io/kubernetes/pkg/api/meta/meta.go index dab96dad..876aa4fa 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta/meta.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/meta.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/metatypes/types.go b/vendor/k8s.io/kubernetes/pkg/api/meta/metatypes/types.go index e7ac3e08..41e6596d 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta/metatypes/types.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/metatypes/types.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/priority.go b/vendor/k8s.io/kubernetes/pkg/api/meta/priority.go index 78bbd18a..2e460609 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta/priority.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/priority.go @@ -159,7 +159,7 @@ func (m PriorityRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...st } // any versions the user provides take priority - var priorities []unversioned.GroupVersionKind + priorities := m.KindPriority if len(versions) > 0 { priorities = make([]unversioned.GroupVersionKind, 0, len(m.KindPriority)+len(versions)) for _, version := range versions { @@ -170,8 +170,6 @@ func (m PriorityRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...st priorities = append(priorities, gv.WithKind(AnyKind)) } priorities = append(priorities, m.KindPriority...) - } else { - priorities = m.KindPriority } remaining := append([]*RESTMapping{}, mappings...) @@ -196,6 +194,9 @@ func (m PriorityRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...st remaining = matching } } + if len(remaining) == 1 { + return remaining[0], nil + } var kinds []unversioned.GroupVersionKind for _, m := range mappings { diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/restmapper.go b/vendor/k8s.io/kubernetes/pkg/api/meta/restmapper.go index d23fc559..8b63ad31 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/meta/restmapper.go +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/restmapper.go @@ -184,17 +184,17 @@ func (m *DefaultRESTMapper) ResourceSingularizer(resourceType string) (string, e if !ok { continue } - if singular.IsEmpty() { + if singular.Empty() { singular = currSingular continue } if currSingular.Resource != singular.Resource { - return resourceType, fmt.Errorf("multiple possibile singular resources (%v) found for %v", resources, resourceType) + return resourceType, fmt.Errorf("multiple possible singular resources (%v) found for %v", resources, resourceType) } } - if singular.IsEmpty() { + if singular.Empty() { return resourceType, fmt.Errorf("no singular of resource %v has been defined", resourceType) } diff --git a/vendor/k8s.io/kubernetes/pkg/api/meta/unstructured.go b/vendor/k8s.io/kubernetes/pkg/api/meta/unstructured.go new file mode 100644 index 00000000..784cbf05 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/meta/unstructured.go @@ -0,0 +1,31 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package meta + +import ( + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" +) + +// InterfacesForUnstructured returns VersionInterfaces suitable for +// dealing with runtime.Unstructured objects. +func InterfacesForUnstructured(unversioned.GroupVersion) (*VersionInterfaces, error) { + return &VersionInterfaces{ + ObjectConvertor: &runtime.UnstructuredObjectConverter{}, + MetadataAccessor: NewAccessor(), + }, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/pod/util.go b/vendor/k8s.io/kubernetes/pkg/api/pod/util.go index 1bdacfe2..dfc12db6 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/pod/util.go +++ b/vendor/k8s.io/kubernetes/pkg/api/pod/util.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ const ( // TODO: to be de!eted after v1.3 is released. PodSpec has a dedicated Subdomain field. // The annotation value is a string specifying the subdomain e.g. "my-web-service" - // If specified, on the the pod itself, ".my-web-service..svc." would resolve to + // If specified, on the pod itself, ".my-web-service..svc." would resolve to // the pod's IP. // If there is a headless service named "my-web-service" in the same namespace as the pod, then, // .my-web-service..svc." would be resolved by the cluster DNS Server. diff --git a/vendor/k8s.io/kubernetes/pkg/api/pod_example.json b/vendor/k8s.io/kubernetes/pkg/api/pod_example.json deleted file mode 100644 index 8284240a..00000000 --- a/vendor/k8s.io/kubernetes/pkg/api/pod_example.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "kind": "Pod", - "apiVersion": "v1", - "metadata": { - "name": "etcd-server-e2e-test-wojtekt-master", - "namespace": "default", - "selfLink": "/api/v1/namespaces/default/pods/etcd-server-e2e-test-wojtekt-master", - "uid": "a671734a-e8e5-11e4-8fde-42010af09327", - "resourceVersion": "22", - "creationTimestamp": "2015-04-22T11:49:36Z", - "annotations": { - "kubernetes.io/config.mirror": "mirror", - "kubernetes.io/config.source": "file" - } - }, - "spec": { - "volumes": [ - { - "name": "varetcd", - "hostPath": { - "path": "/mnt/master-pd/var/etcd" - }, - "emptyDir": null, - "gcePersistentDisk": null, - "awsElasticBlockStore": null, - "gitRepo": null, - "secret": null, - "nfs": null, - "iscsi": null, - "glusterfs": null - } - ], - "containers": [ - { - "name": "etcd-container", - "image": "gcr.io/google_containers/etcd:2.0.9", - "command": [ - "/usr/local/bin/etcd", - "--addr", - "127.0.0.1:4001", - "--bind-addr", - "127.0.0.1:4001", - "--data-dir", - "/var/etcd/data" - ], - "ports": [ - { - "name": "serverport", - "hostPort": 2380, - "containerPort": 2380, - "protocol": "TCP" - }, - { - "name": "clientport", - "hostPort": 4001, - "containerPort": 4001, - "protocol": "TCP" - } - ], - "resources": {}, - "volumeMounts": [ - { - "name": "varetcd", - "mountPath": "/var/etcd" - } - ], - "terminationMessagePath": "/dev/termination-log", - "imagePullPolicy": "IfNotPresent", - "capabilities": {} - } - ], - "restartPolicy": "Always", - "dnsPolicy": "ClusterFirst", - "nodeName": "e2e-test-wojtekt-master", - "hostNetwork": true - }, - "status": { - "phase": "Running", - "conditions": [ - { - "type": "Ready", - "status": "True" - } - ], - "containerStatuses": [ - { - "name": "etcd-container", - "state": { - "running": { - "startedAt": "2015-04-22T11:49:32Z" - } - }, - "lastState": {}, - "ready": true, - "restartCount": 0, - "image": "gcr.io/google_containers/etcd:2.0.9", - "imageID": "docker://b6b9a86dc06aa1361357ca1b105feba961f6a4145adca6c54e142c0be0fe87b0", - "containerID": "docker://3cbbf818f1addfc252957b4504f56ef2907a313fe6afc47fc75373674255d46d" - } - ] - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/api/ref.go b/vendor/k8s.io/kubernetes/pkg/api/ref.go index 3af0d976..443343a9 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/ref.go +++ b/vendor/k8s.io/kubernetes/pkg/api/ref.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -128,3 +128,5 @@ func (obj *ObjectReference) SetGroupVersionKind(gvk unversioned.GroupVersionKind func (obj *ObjectReference) GroupVersionKind() unversioned.GroupVersionKind { return unversioned.FromAPIVersionAndKind(obj.APIVersion, obj.Kind) } + +func (obj *ObjectReference) GetObjectKind() unversioned.ObjectKind { return obj } diff --git a/vendor/k8s.io/kubernetes/pkg/api/register.go b/vendor/k8s.io/kubernetes/pkg/api/register.go index eb263954..60508c26 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/register.go +++ b/vendor/k8s.io/kubernetes/pkg/api/register.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,6 +23,10 @@ import ( ) // Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. +// NOTE: If you are copying this file to start a new api group, STOP! Copy the +// extensions group instead. This Scheme is special and should appear ONLY in +// the api group, unless you really know what you're doing. +// TODO(lavalamp): make the above error impossible. var Scheme = runtime.NewScheme() // Codecs provides access to encoding and decoding for the scheme @@ -34,27 +38,46 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Unversiond is group version for unversioned API objects +// Unversioned is group version for unversioned API objects // TODO: this should be v1 probably var Unversioned = unversioned.GroupVersion{Group: "", Version: "v1"} // ParameterCodec handles versioning of objects that are converted to query parameters. var ParameterCodec = runtime.NewParameterCodec(Scheme) -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - if err := Scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +func init() { + // TODO(lavalamp): move this call to scheme builder above. Can't + // remove it from here because lots of people inappropriately rely on it + // (specifically the unversioned time conversion). Can't have it in + // both places because then it gets double registered. Consequence of + // current state is that it only ever gets registered in the main + // api.Scheme, even though everyone that uses anything from unversioned + // needs these. + if err := addConversionFuncs(Scheme); err != nil { + // Programmer error. panic(err) } +} + +func addKnownTypes(scheme *runtime.Scheme) error { + if err := scheme.AddIgnoredConversionType(&unversioned.TypeMeta{}, &unversioned.TypeMeta{}); err != nil { + return err + } scheme.AddKnownTypes(SchemeGroupVersion, &Pod{}, &PodList{}, @@ -107,7 +130,7 @@ func AddToScheme(scheme *runtime.Scheme) { ) // Register Unversioned types under their own special group - Scheme.AddUnversionedTypes(Unversioned, + scheme.AddUnversionedTypes(Unversioned, &unversioned.ExportOptions{}, &unversioned.Status{}, &unversioned.APIVersions{}, @@ -115,4 +138,5 @@ func AddToScheme(scheme *runtime.Scheme) { &unversioned.APIGroup{}, &unversioned.APIResourceList{}, ) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/api/replication_controller_example.json b/vendor/k8s.io/kubernetes/pkg/api/replication_controller_example.json index 5c3c4fe7..70eef1cf 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/replication_controller_example.json +++ b/vendor/k8s.io/kubernetes/pkg/api/replication_controller_example.json @@ -40,7 +40,8 @@ "secret": null, "nfs": null, "iscsi": null, - "glusterfs": null + "glusterfs": null, + "quobyte": null } ], "containers": [ diff --git a/vendor/k8s.io/kubernetes/pkg/api/requestcontext.go b/vendor/k8s.io/kubernetes/pkg/api/requestcontext.go index 2c27d686..14983b2d 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/requestcontext.go +++ b/vendor/k8s.io/kubernetes/pkg/api/requestcontext.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/amount.go b/vendor/k8s.io/kubernetes/pkg/api/resource/amount.go index 6ae823a0..2d3012c8 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/amount.go +++ b/vendor/k8s.io/kubernetes/pkg/api/resource/amount.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/api/resource/generated.pb.go index cf9447a3..1c152c4e 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/api/resource/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,9 +38,33 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *Quantity) Reset() { *m = Quantity{} } -func (*Quantity) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *Quantity) Reset() { *m = Quantity{} } +func (*Quantity) ProtoMessage() {} +func (*Quantity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } func init() { proto.RegisterType((*Quantity)(nil), "k8s.io.kubernetes.pkg.api.resource.Quantity") } + +var fileDescriptorGenerated = []byte{ + // 236 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x8f, 0xa1, 0x4e, 0x03, 0x41, + 0x10, 0x86, 0x67, 0x0d, 0x29, 0x27, 0x1b, 0x42, 0x48, 0xc5, 0x5e, 0x53, 0x45, 0x48, 0xd8, 0x09, + 0xa8, 0x06, 0xc9, 0x1b, 0x80, 0xc4, 0xdd, 0x95, 0x61, 0x99, 0x1c, 0xec, 0x6e, 0x76, 0x67, 0x05, + 0xae, 0x12, 0x59, 0x89, 0xec, 0xbd, 0x4d, 0x65, 0x25, 0x02, 0xc1, 0x1d, 0x2f, 0x42, 0x72, 0xa5, + 0x21, 0x21, 0xb8, 0xf9, 0xc4, 0x37, 0xf9, 0xfe, 0xe2, 0xb2, 0x99, 0x27, 0xc3, 0x1e, 0x9b, 0x5c, + 0x53, 0x74, 0x24, 0x94, 0x30, 0x34, 0x16, 0xab, 0xc0, 0x18, 0x29, 0xf9, 0x1c, 0x17, 0x84, 0x96, + 0x1c, 0xc5, 0x4a, 0xe8, 0xde, 0x84, 0xe8, 0xc5, 0x8f, 0x67, 0x3b, 0xc7, 0xfc, 0x3a, 0x26, 0x34, + 0xd6, 0x54, 0x81, 0xcd, 0xde, 0x99, 0x9c, 0x5b, 0x96, 0xc7, 0x5c, 0x9b, 0x85, 0x7f, 0x46, 0xeb, + 0xad, 0xc7, 0x41, 0xad, 0xf3, 0xc3, 0x40, 0x03, 0x0c, 0xd7, 0xee, 0xe5, 0xe4, 0xe2, 0xff, 0x8c, + 0x2c, 0xfc, 0x84, 0xec, 0x24, 0x49, 0xfc, 0x5b, 0x31, 0x9b, 0x17, 0xa3, 0x9b, 0x5c, 0x39, 0x61, + 0x79, 0x19, 0x1f, 0x17, 0x07, 0x49, 0x22, 0x3b, 0x7b, 0xa2, 0xa6, 0xea, 0xf4, 0xf0, 0xf6, 0x87, + 0xae, 0x8e, 0xde, 0xd6, 0x25, 0xbc, 0xb6, 0x25, 0xac, 0xda, 0x12, 0xd6, 0x6d, 0x09, 0xcb, 0x8f, + 0x29, 0x5c, 0x9f, 0x6d, 0x3a, 0x0d, 0xdb, 0x4e, 0xc3, 0x7b, 0xa7, 0x61, 0xd9, 0x6b, 0xb5, 0xe9, + 0xb5, 0xda, 0xf6, 0x5a, 0x7d, 0xf6, 0x5a, 0xad, 0xbe, 0x34, 0xdc, 0x8d, 0xf6, 0x3b, 0xbe, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x90, 0x1c, 0x7f, 0xff, 0x20, 0x01, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/generated.proto b/vendor/k8s.io/kubernetes/pkg/api/resource/generated.proto index e1c2a3d6..bdc091d9 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/api/resource/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -83,7 +83,6 @@ option go_package = "resource"; // writing some sort of special handling code in the hopes that that will // cause implementors to also use a fixed point implementation. // -// +gencopy=false // +protobuf=true // +protobuf.embed=string // +protobuf.options.marshal=false diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/math.go b/vendor/k8s.io/kubernetes/pkg/api/resource/math.go index 163aafa5..887ac74c 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/math.go +++ b/vendor/k8s.io/kubernetes/pkg/api/resource/math.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/quantity.go b/vendor/k8s.io/kubernetes/pkg/api/resource/quantity.go index 96877b4c..823dd5ef 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/quantity.go +++ b/vendor/k8s.io/kubernetes/pkg/api/resource/quantity.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -87,7 +87,6 @@ import ( // writing some sort of special handling code in the hopes that that will // cause implementors to also use a fixed point implementation. // -// +gencopy=false // +protobuf=true // +protobuf.embed=string // +protobuf.options.marshal=false @@ -386,6 +385,16 @@ func ParseQuantity(str string) (Quantity, error) { return Quantity{d: infDecAmount{amount}, Format: format}, nil } +// DeepCopy returns a deep-copy of the Quantity value. Note that the method +// receiver is a value, so we can mutate it in-place and return it. +func (q Quantity) DeepCopy() Quantity { + if q.d.Dec != nil { + tmp := &inf.Dec{} + q.d.Dec = tmp.Set(q.d.Dec) + } + return q +} + // CanonicalizeBytes returns the canonical form of q and its suffix (see comment on Quantity). // // Note about BinarySI: diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/quantity_proto.go b/vendor/k8s.io/kubernetes/pkg/api/resource/quantity_proto.go index 24029468..74dfb4e4 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/quantity_proto.go +++ b/vendor/k8s.io/kubernetes/pkg/api/resource/quantity_proto.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/scale_int.go b/vendor/k8s.io/kubernetes/pkg/api/resource/scale_int.go index 173de1a2..55e177b0 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/scale_int.go +++ b/vendor/k8s.io/kubernetes/pkg/api/resource/scale_int.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource/suffix.go b/vendor/k8s.io/kubernetes/pkg/api/resource/suffix.go index 0aa2ce2b..5ed7abe6 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource/suffix.go +++ b/vendor/k8s.io/kubernetes/pkg/api/resource/suffix.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/resource_helpers.go b/vendor/k8s.io/kubernetes/pkg/api/resource_helpers.go index 4c55b120..65c1591c 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/resource_helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/api/resource_helpers.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -93,7 +93,7 @@ func GetPodReadyCondition(status PodStatus) *PodCondition { } // GetPodCondition extracts the provided condition from the given status and returns that. -// Returns nil and -1 if the condition is not present, and the the index of the located condition. +// Returns nil and -1 if the condition is not present, and the index of the located condition. func GetPodCondition(status *PodStatus, conditionType PodConditionType) (int, *PodCondition) { if status == nil { return -1, nil @@ -107,7 +107,7 @@ func GetPodCondition(status *PodStatus, conditionType PodConditionType) (int, *P } // GetNodeCondition extracts the provided condition from the given status and returns that. -// Returns nil and -1 if the condition is not present, and the the index of the located condition. +// Returns nil and -1 if the condition is not present, and the index of the located condition. func GetNodeCondition(status *NodeStatus, conditionType NodeConditionType) (int, *NodeCondition) { if status == nil { return -1, nil diff --git a/vendor/k8s.io/kubernetes/pkg/api/rest/create.go b/vendor/k8s.io/kubernetes/pkg/api/rest/create.go index fa95b7f9..a4cc53e4 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/rest/create.go +++ b/vendor/k8s.io/kubernetes/pkg/api/rest/create.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -40,7 +40,7 @@ type RESTCreateStrategy interface { // the object. For example: remove fields that are not to be persisted, // sort order-insensitive list fields, etc. This should not remove fields // whose presence would be considered a validation error. - PrepareForCreate(obj runtime.Object) + PrepareForCreate(ctx api.Context, obj runtime.Object) // Validate is invoked after default fields in the object have been filled in before // the object is persisted. This method should not mutate the object. Validate(ctx api.Context, obj runtime.Object) field.ErrorList @@ -49,6 +49,14 @@ type RESTCreateStrategy interface { Canonicalize(obj runtime.Object) } +// RESTBeforeCreateStrategy is an optional strategy interface that may be implemented +// to get notified of changes before validation +type RESTBeforeCreateStrategy interface { + // BeforeCreate is invoked after PrepareForCreate on the strategy and before Validate. + // All field defaulting is provided, but fields may not be valid. + BeforeCreate(ctx api.Context, obj runtime.Object) error +} + // BeforeCreate ensures that common operations for all resources are performed on creation. It only returns // errors that can be converted to api.Status. It invokes PrepareForCreate, then GenerateName, then Validate. // It returns nil if the object should be created. @@ -67,10 +75,19 @@ func BeforeCreate(strategy RESTCreateStrategy, ctx api.Context, obj runtime.Obje } objectMeta.DeletionTimestamp = nil objectMeta.DeletionGracePeriodSeconds = nil - strategy.PrepareForCreate(obj) + strategy.PrepareForCreate(ctx, obj) api.FillObjectMetaSystemFields(ctx, objectMeta) api.GenerateName(strategy, objectMeta) + // ClusterName is ignored and should not be saved + objectMeta.ClusterName = "" + + if before, ok := strategy.(RESTBeforeCreateStrategy); ok { + if err := before.BeforeCreate(ctx, obj); err != nil { + return err + } + } + if errs := strategy.Validate(ctx, obj); len(errs) > 0 { return errors.NewInvalid(kind.GroupKind(), objectMeta.Name, errs) } diff --git a/vendor/k8s.io/kubernetes/pkg/api/rest/delete.go b/vendor/k8s.io/kubernetes/pkg/api/rest/delete.go index 34965d52..5a76f214 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/rest/delete.go +++ b/vendor/k8s.io/kubernetes/pkg/api/rest/delete.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -32,19 +32,34 @@ type RESTDeleteStrategy interface { runtime.ObjectTyper } +type GarbageCollectionPolicy string + +const ( + DeleteDependents GarbageCollectionPolicy = "DeleteDependents" + OrphanDependents GarbageCollectionPolicy = "OrphanDependents" +) + +// GarbageCollectionDeleteStrategy must be implemented by the registry that wants to +// orphan dependents by default. +type GarbageCollectionDeleteStrategy interface { + // DefaultGarbageCollectionPolicy returns the default garbage collection behavior. + DefaultGarbageCollectionPolicy() GarbageCollectionPolicy +} + // RESTGracefulDeleteStrategy must be implemented by the registry that supports // graceful deletion. type RESTGracefulDeleteStrategy interface { // CheckGracefulDelete should return true if the object can be gracefully deleted and set // any default values on the DeleteOptions. - CheckGracefulDelete(obj runtime.Object, options *api.DeleteOptions) bool + CheckGracefulDelete(ctx api.Context, obj runtime.Object, options *api.DeleteOptions) bool } // BeforeDelete tests whether the object can be gracefully deleted. If graceful is set the object // should be gracefully deleted, if gracefulPending is set the object has already been gracefully deleted // (and the provided grace period is longer than the time to deletion), and an error is returned if the // condition cannot be checked or the gracePeriodSeconds is invalid. The options argument may be updated with -// default values if graceful is true. +// default values if graceful is true. Second place where we set deletionTimestamp is pkg/registry/generic/registry/store.go +// this function is responsible for setting deletionTimestamp during gracefulDeletion, other one for cascading deletions. func BeforeDelete(strategy RESTDeleteStrategy, ctx api.Context, obj runtime.Object, options *api.DeleteOptions) (graceful, gracefulPending bool, err error) { objectMeta, gvk, kerr := objectMetaAndKind(strategy, obj) if kerr != nil { @@ -56,9 +71,11 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx api.Context, obj runtime.Obje } gracefulStrategy, ok := strategy.(RESTGracefulDeleteStrategy) if !ok { + // If we're not deleting gracefully there's no point in updating Generation, as we won't update + // the obcject before deleting it. return false, false, nil } - // if the object is already being deleted + // if the object is already being deleted, no need to update generation. if objectMeta.DeletionTimestamp != nil { // if we are already being deleted, we may only shorten the deletion grace period // this means the object was gracefully deleted previously but deletionGracePeriodSeconds was not set, @@ -69,13 +86,14 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx api.Context, obj runtime.Obje // only a shorter grace period may be provided by a user if options.GracePeriodSeconds != nil { period := int64(*options.GracePeriodSeconds) - if period > *objectMeta.DeletionGracePeriodSeconds { + if period >= *objectMeta.DeletionGracePeriodSeconds { return false, true, nil } - now := unversioned.NewTime(unversioned.Now().Add(time.Second * time.Duration(*options.GracePeriodSeconds))) - objectMeta.DeletionTimestamp = &now + newDeletionTimestamp := unversioned.NewTime( + objectMeta.DeletionTimestamp.Add(-time.Second * time.Duration(*objectMeta.DeletionGracePeriodSeconds)). + Add(time.Second * time.Duration(*options.GracePeriodSeconds))) + objectMeta.DeletionTimestamp = &newDeletionTimestamp objectMeta.DeletionGracePeriodSeconds = &period - options.GracePeriodSeconds = &period return true, false, nil } // graceful deletion is pending, do nothing @@ -83,11 +101,18 @@ func BeforeDelete(strategy RESTDeleteStrategy, ctx api.Context, obj runtime.Obje return false, true, nil } - if !gracefulStrategy.CheckGracefulDelete(obj, options) { + if !gracefulStrategy.CheckGracefulDelete(ctx, obj, options) { return false, false, nil } now := unversioned.NewTime(unversioned.Now().Add(time.Second * time.Duration(*options.GracePeriodSeconds))) objectMeta.DeletionTimestamp = &now objectMeta.DeletionGracePeriodSeconds = options.GracePeriodSeconds + // If it's the first graceful deletion we are going to set the DeletionTimestamp to non-nil. + // Controllers of the object that's being deleted shouldn't take any nontrivial actions, hence its behavior changes. + // Thus we need to bump object's Generation (if set). This handles generation bump during graceful deletion. + // The bump for objects that don't support graceful deletion is handled in pkg/registry/generic/registry/store.go. + if objectMeta.Generation > 0 { + objectMeta.Generation++ + } return true, false, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/api/rest/doc.go b/vendor/k8s.io/kubernetes/pkg/api/rest/doc.go index 8fed0e9f..ee7c4145 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/rest/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/api/rest/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/rest/export.go b/vendor/k8s.io/kubernetes/pkg/api/rest/export.go index e12f65de..f0725175 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/rest/export.go +++ b/vendor/k8s.io/kubernetes/pkg/api/rest/export.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ limitations under the License. package rest import ( + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/runtime" ) @@ -24,5 +25,5 @@ import ( type RESTExportStrategy interface { // Export strips fields that can not be set by the user. If 'exact' is false // fields specific to the cluster are also stripped - Export(obj runtime.Object, exact bool) error + Export(ctx api.Context, obj runtime.Object, exact bool) error } diff --git a/vendor/k8s.io/kubernetes/pkg/api/rest/rest.go b/vendor/k8s.io/kubernetes/pkg/api/rest/rest.go index 4d5b5ba9..c4dd06e0 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/rest/rest.go +++ b/vendor/k8s.io/kubernetes/pkg/api/rest/rest.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -276,7 +276,7 @@ type Connecter interface { // instead of decoded directly. type ResourceStreamer interface { // InputStream should return an io.ReadCloser if the provided object supports streaming. The desired - // api version and a accept header (may be empty) are passed to the call. If no error occurs, + // api version and an accept header (may be empty) are passed to the call. If no error occurs, // the caller may return a flag indicating whether the result should be flushed as writes occur // and a content type string that indicates the type of the stream. // If a null stream is returned, a StatusNoContent response wil be generated. diff --git a/vendor/k8s.io/kubernetes/pkg/api/rest/types.go b/vendor/k8s.io/kubernetes/pkg/api/rest/types.go index 0e7f048b..85e78646 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/rest/types.go +++ b/vendor/k8s.io/kubernetes/pkg/api/rest/types.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/rest/update.go b/vendor/k8s.io/kubernetes/pkg/api/rest/update.go index bc5ed0c5..99c79f58 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/rest/update.go +++ b/vendor/k8s.io/kubernetes/pkg/api/rest/update.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -41,7 +41,7 @@ type RESTUpdateStrategy interface { // the object. For example: remove fields that are not to be persisted, // sort order-insensitive list fields, etc. This should not remove fields // whose presence would be considered a validation error. - PrepareForUpdate(obj, old runtime.Object) + PrepareForUpdate(ctx api.Context, obj, old runtime.Object) // ValidateUpdate is invoked after default fields in the object have been // filled in before the object is persisted. This method should not mutate // the object. @@ -55,6 +55,14 @@ type RESTUpdateStrategy interface { AllowUnconditionalUpdate() bool } +// RESTBeforeUpdateStrategy is an optional strategy interface that may be implemented +// to get notified of changes before validation +type RESTBeforeUpdateStrategy interface { + // BeforeUpdate is invoked after PrepareForCreate on the strategy and before Validate. + // All field defaulting is provided, but fields may not be valid. + BeforeUpdate(ctx api.Context, obj, old runtime.Object) error +} + // TODO: add other common fields that require global validation. func validateCommonFields(obj, old runtime.Object) (field.ErrorList, error) { allErrs := field.ErrorList{} @@ -86,8 +94,23 @@ func BeforeUpdate(strategy RESTUpdateStrategy, ctx api.Context, obj, old runtime } else { objectMeta.Namespace = api.NamespaceNone } + // Ensure requests cannot update generation + oldMeta, err := api.ObjectMetaFor(old) + if err != nil { + return err + } + objectMeta.Generation = oldMeta.Generation - strategy.PrepareForUpdate(obj, old) + strategy.PrepareForUpdate(ctx, obj, old) + + // ClusterName is ignored and should not be saved + objectMeta.ClusterName = "" + + if before, ok := strategy.(RESTBeforeUpdateStrategy); ok { + if err := before.BeforeUpdate(ctx, obj, old); err != nil { + return err + } + } // Ensure some common fields, like UID, are validated for all resources. errs, err := validateCommonFields(obj, old) @@ -173,3 +196,44 @@ func (i *defaultUpdatedObjectInfo) UpdatedObject(ctx api.Context, oldObj runtime return newObj, nil } + +// wrappedUpdatedObjectInfo allows wrapping an existing objInfo and +// chaining additional transformations/checks on the result of UpdatedObject() +type wrappedUpdatedObjectInfo struct { + // obj is the updated object + objInfo UpdatedObjectInfo + + // transformers is an optional list of transforming functions that modify or + // replace obj using information from the context, old object, or other sources. + transformers []TransformFunc +} + +// WrapUpdatedObjectInfo returns an UpdatedObjectInfo impl that delegates to +// the specified objInfo, then calls the passed transformers +func WrapUpdatedObjectInfo(objInfo UpdatedObjectInfo, transformers ...TransformFunc) UpdatedObjectInfo { + return &wrappedUpdatedObjectInfo{objInfo, transformers} +} + +// Preconditions satisfies the UpdatedObjectInfo interface. +func (i *wrappedUpdatedObjectInfo) Preconditions() *api.Preconditions { + return i.objInfo.Preconditions() +} + +// UpdatedObject satisfies the UpdatedObjectInfo interface. +// It delegates to the wrapped objInfo and passes the result through any configured transformers. +func (i *wrappedUpdatedObjectInfo) UpdatedObject(ctx api.Context, oldObj runtime.Object) (runtime.Object, error) { + newObj, err := i.objInfo.UpdatedObject(ctx, oldObj) + if err != nil { + return newObj, err + } + + // Allow any configured transformers to update the new object or error + for _, transformer := range i.transformers { + newObj, err = transformer(ctx, newObj, oldObj) + if err != nil { + return nil, err + } + } + + return newObj, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/service/annotations.go b/vendor/k8s.io/kubernetes/pkg/api/service/annotations.go index 9d57fa4c..bd13cc51 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/service/annotations.go +++ b/vendor/k8s.io/kubernetes/pkg/api/service/annotations.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,6 +16,13 @@ limitations under the License. package service +import ( + "strconv" + + "github.com/golang/glog" + "k8s.io/kubernetes/pkg/api" +) + const ( // AnnotationLoadBalancerSourceRangesKey is the key of the annotation on a service to set allowed ingress ranges on their LoadBalancers // @@ -25,4 +32,58 @@ const ( // // Not all cloud providers support this annotation, though AWS & GCE do. AnnotationLoadBalancerSourceRangesKey = "service.beta.kubernetes.io/load-balancer-source-ranges" + + // AnnotationExternalTraffic An annotation that denotes if this Service desires to route external traffic to local + // endpoints only. This preserves Source IP and avoids a second hop. + AnnotationExternalTraffic = "service.alpha.kubernetes.io/external-traffic" + // AnnotationValueExternalTrafficLocal Value of annotation to specify local endpoints behaviour + AnnotationValueExternalTrafficLocal = "OnlyLocal" + // AnnotationValueExternalTrafficGlobal Value of annotation to specify global (legacy) behaviour + AnnotationValueExternalTrafficGlobal = "Global" + // AnnotationHealthCheckNodePort Annotation specifying the healthcheck nodePort for the service + // If not specified, annotation is created by the service api backend with the allocated nodePort + // Will use user-specified nodePort value if specified by the client + AnnotationHealthCheckNodePort = "service.alpha.kubernetes.io/healthcheck-nodeport" ) + +// NeedsHealthCheck Check service for health check annotations +func NeedsHealthCheck(service *api.Service) bool { + if l, ok := service.Annotations[AnnotationExternalTraffic]; ok { + if l == AnnotationValueExternalTrafficLocal { + return true + } else if l == AnnotationValueExternalTrafficGlobal { + return false + } else { + glog.Errorf("Invalid value for annotation %v", AnnotationExternalTraffic) + return false + } + } + return false +} + +// GetServiceHealthCheckNodePort Return health check node port annotation for service, if one exists +func GetServiceHealthCheckNodePort(service *api.Service) int32 { + if NeedsHealthCheck(service) { + if l, ok := service.Annotations[AnnotationHealthCheckNodePort]; ok { + p, err := strconv.Atoi(l) + if err != nil { + glog.Errorf("Failed to parse annotation %v: %v", AnnotationHealthCheckNodePort, err) + return 0 + } + return int32(p) + } + } + return 0 +} + +// GetServiceHealthCheckPathPort Return the path and nodePort programmed into the Cloud LB Health Check +func GetServiceHealthCheckPathPort(service *api.Service) (string, int32) { + if !NeedsHealthCheck(service) { + return "", 0 + } + port := GetServiceHealthCheckNodePort(service) + if port == 0 { + return "", 0 + } + return "/healthz", port +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/service/util.go b/vendor/k8s.io/kubernetes/pkg/api/service/util.go index b6611d23..6f0e14e2 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/service/util.go +++ b/vendor/k8s.io/kubernetes/pkg/api/service/util.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/types.go b/vendor/k8s.io/kubernetes/pkg/api/types.go index b8a8a3fb..94071fb4 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/types.go +++ b/vendor/k8s.io/kubernetes/pkg/api/types.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -130,7 +130,6 @@ type ObjectMeta struct { // The prefix is optional. If the prefix is not specified, the key is assumed to be private // to the user. Other system components that wish to use labels must specify a prefix. The // "kubernetes.io/" prefix is reserved for use by kubernetes components. - // TODO: replace map[string]string with labels.LabelSet type Labels map[string]string `json:"labels,omitempty"` // Annotations are unstructured key value data stored with a resource that may be set by @@ -150,6 +149,11 @@ type ObjectMeta struct { // from the list. If the deletionTimestamp of the object is non-nil, entries // in this list can only be removed. Finalizers []string `json:"finalizers,omitempty"` + + // The name of the cluster which the object belongs to. + // This is used to distinguish resources with same name and namespace in different clusters. + // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. + ClusterName string `json:"clusterName,omitempty"` } const ( @@ -210,8 +214,12 @@ type VolumeSource struct { PersistentVolumeClaim *PersistentVolumeClaimVolumeSource `json:"persistentVolumeClaim,omitempty"` // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime RBD *RBDVolumeSource `json:"rbd,omitempty"` + + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty"` + // FlexVolume represents a generic volume resource that is - // provisioned/attached using a exec based plugin. This is an alpha feature and may change in future. + // provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty"` // Cinder represents a cinder volume attached and mounted on kubelets host machine @@ -233,6 +241,8 @@ type VolumeSource struct { ConfigMap *ConfigMapVolumeSource `json:"configMap,omitempty"` // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine VsphereVolume *VsphereVirtualDiskVolumeSource `json:"vsphereVolume,omitempty"` + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty"` } // Similar to VolumeSource but meant for the administrator who creates PVs. @@ -255,11 +265,13 @@ type PersistentVolumeSource struct { NFS *NFSVolumeSource `json:"nfs,omitempty"` // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime RBD *RBDVolumeSource `json:"rbd,omitempty"` + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty"` // ISCSIVolumeSource represents an ISCSI resource that is attached to a // kubelet's host machine and then exposed to the pod. ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty"` // FlexVolume represents a generic volume resource that is - // provisioned/attached using a exec based plugin. This is an alpha feature and may change in future. + // provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty"` // Cinder represents a cinder volume attached and mounted on kubelets host machine Cinder *CinderVolumeSource `json:"cinder,omitempty"` @@ -273,6 +285,8 @@ type PersistentVolumeSource struct { AzureFile *AzureFileVolumeSource `json:"azureFile,omitempty"` // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine VsphereVolume *VsphereVirtualDiskVolumeSource `json:"vsphereVolume,omitempty"` + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty"` } type PersistentVolumeClaimVolumeSource struct { @@ -283,7 +297,8 @@ type PersistentVolumeClaimVolumeSource struct { ReadOnly bool `json:"readOnly,omitempty"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true type PersistentVolume struct { unversioned.TypeMeta `json:",inline"` @@ -440,7 +455,7 @@ type HostPathVolumeSource struct { type EmptyDirVolumeSource struct { // TODO: Longer term we want to represent the selection of underlying // media more like a scheduling problem - user says what traits they - // need, we give them a backing store that satisifies that. For now + // need, we give them a backing store that satisfies that. For now // this will cover the most common needs. // Optional: what type of storage medium should back this directory. // The default is "" which means to use the node's default medium. @@ -515,7 +530,7 @@ type ISCSIVolumeSource struct { // Fibre Channel volumes can only be mounted as read/write once. // Fibre Channel volumes support ownership management and SELinux relabeling. type FCVolumeSource struct { - // Required: FC target world wide names (WWNs) + // Required: FC target worldwide names (WWNs) TargetWWNs []string `json:"targetWWNs"` // Required: FC target lun number Lun *int32 `json:"lun"` @@ -530,7 +545,7 @@ type FCVolumeSource struct { } // FlexVolume represents a generic volume resource that is -// provisioned/attached using a exec based plugin. This is an alpha feature and may change in future. +// provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. type FlexVolumeSource struct { // Driver is the name of the driver to use for this volume. Driver string `json:"driver"` @@ -554,7 +569,7 @@ type FlexVolumeSource struct { // Represents a Persistent Disk resource in AWS. // // An AWS EBS disk must exist before mounting to a container. The disk -// must also be in the same AWS zone as the kubelet. A AWS EBS disk +// must also be in the same AWS zone as the kubelet. An AWS EBS disk // can only be mounted as read/write once. AWS EBS volumes support // ownership management and SELinux relabeling. type AWSElasticBlockStoreVolumeSource struct { @@ -606,6 +621,12 @@ type SecretVolumeSource struct { // the volume setup will error. Paths must be relative and may not contain // the '..' path or start with '..'. Items []KeyToPath `json:"items,omitempty"` + // Mode bits to use on created files by default. Must be a value between + // 0 and 0777. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty"` } // Represents an NFS mount that lasts the lifetime of a pod. @@ -622,6 +643,30 @@ type NFSVolumeSource struct { ReadOnly bool `json:"readOnly,omitempty"` } +// Represents a Quobyte mount that lasts the lifetime of a pod. +// Quobyte volumes do not support ownership management or SELinux relabeling. +type QuobyteVolumeSource struct { + // Registry represents a single or multiple Quobyte Registry services + // specified as a string as host:port pair (multiple entries are separated with commas) + // which acts as the central registry for volumes + Registry string `json:"registry"` + + // Volume is a string that references an already created Quobyte volume by name. + Volume string `json:"volume"` + + // Defaults to false (read/write). ReadOnly here will force + // the Quobyte to be mounted with read-only permissions + ReadOnly bool `json:"readOnly,omitempty"` + + // User to map volume access to + // Defaults to the root user + User string `json:"user,omitempty"` + + // Group to map volume access to + // Default is no group + Group string `json:"group,omitempty"` +} + // Represents a Glusterfs mount that lasts the lifetime of a pod. // Glusterfs volumes do not support ownership management or SELinux relabeling. type GlusterfsVolumeSource struct { @@ -707,6 +752,12 @@ type FlockerVolumeSource struct { type DownwardAPIVolumeSource struct { // Items is a list of DownwardAPIVolume file Items []DownwardAPIVolumeFile `json:"items,omitempty"` + // Mode bits to use on created files by default. Must be a value between + // 0 and 0777. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty"` } // Represents a single file containing information from the downward API @@ -718,6 +769,41 @@ type DownwardAPIVolumeFile struct { // Selects a resource of the container: only resources limits and requests // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty"` + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty"` +} + +// DeprecatedDownwardAPIVolumeSource represents a volume containing downward API info. +// This type is deprecated and should be replaced by use of the downwardAPI volume source. +type DeprecatedDownwardAPIVolumeSource struct { + // Items is a list of downward API volume file + Items []DeprecatedDownwardAPIVolumeFile `json:"items,omitempty"` + // Mode bits to use on created files by default. Must be a value between + // 0 and 0777. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty"` +} + +// DeprecatedDownwardAPIVolumeFile represents information to create the file containing the pod field +// This type is deprecated and should be replaced by use of the downwardAPI volume source. +type DeprecatedDownwardAPIVolumeFile struct { + // Required: Name is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..' + Path string `json:"name"` + // Required: Selects a field of the pod: only annotations, labels, name and namespace are supported. + FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty"` + // Selects a resource of the container: only resources limits and requests + // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. + ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty"` + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty"` } // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. @@ -741,6 +827,31 @@ type VsphereVirtualDiskVolumeSource struct { FSType string `json:"fsType,omitempty"` } +type AzureDataDiskCachingMode string + +const ( + AzureDataDiskCachingNone AzureDataDiskCachingMode = "None" + AzureDataDiskCachingReadOnly AzureDataDiskCachingMode = "ReadOnly" + AzureDataDiskCachingReadWrite AzureDataDiskCachingMode = "ReadWrite" +) + +// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. +type AzureDiskVolumeSource struct { + // The Name of the data disk in the blob storage + DiskName string `json:"diskName"` + // The URI the the data disk in the blob storage + DataDiskURI string `json:"diskURI"` + // Host Caching mode: None, Read Only, Read Write. + CachingMode *AzureDataDiskCachingMode `json:"cachingMode,omitempty"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + FSType *string `json:"fsType,omitempty"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly *bool `json:"readOnly,omitempty"` +} + // Adapts a ConfigMap into a volume. // // The contents of the target ConfigMap's Data field will be presented in a @@ -757,6 +868,12 @@ type ConfigMapVolumeSource struct { // the volume setup will error. Paths must be relative and may not contain // the '..' path or start with '..'. Items []KeyToPath `json:"items,omitempty"` + // Mode bits to use on created files by default. Must be a value between + // 0 and 0777. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty"` } // Maps a string key to a path within a volume. @@ -769,6 +886,11 @@ type KeyToPath struct { // May not contain the path element '..'. // May not start with the string '..'. Path string `json:"path"` + // Optional: mode bits to use on this file, should be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty"` } // ContainerPort represents a network port in a single container @@ -820,7 +942,8 @@ type EnvVar struct { // EnvVarSource represents a source for the value of an EnvVar. // Only one of its fields may be set. type EnvVarSource struct { - // Selects a field of the pod; only name and namespace are supported. + // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, + // spec.nodeName, spec.serviceAccountName, status.podIP. FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty"` // Selects a resource of the container: only resources limits and requests // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. @@ -1471,6 +1594,14 @@ type PodSpec struct { Subdomain string `json:"subdomain,omitempty"` } +// Sysctl defines a kernel parameter to be set +type Sysctl struct { + // Name of a property to set + Name string `json:"name"` + // Value of a property to set + Value string `json:"value"` +} + // PodSecurityContext holds pod-level security attributes and common container settings. // Some fields are also present in container.securityContext. Field values of // container.securityContext take precedence over field values of PodSecurityContext. @@ -1478,12 +1609,15 @@ type PodSecurityContext struct { // Use the host's network namespace. If this option is set, the ports that will be // used must be specified. // Optional: Default to false + // +k8s:conversion-gen=false HostNetwork bool `json:"hostNetwork,omitempty"` // Use the host's pid namespace. // Optional: Default to false. + // +k8s:conversion-gen=false HostPID bool `json:"hostPID,omitempty"` // Use the host's ipc namespace. // Optional: Default to false. + // +k8s:conversion-gen=false HostIPC bool `json:"hostIPC,omitempty"` // The SELinux context to be applied to all containers. // If unspecified, the container runtime will allocate a random SELinux context for each @@ -1632,6 +1766,9 @@ type ReplicationControllerStatus struct { // The number of pods that have labels matching the labels of the pod template of the replication controller. FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty"` + // The number of ready replicas for this replication controller. + ReadyReplicas int32 `json:"readyReplicas,omitempty"` + // ObservedGeneration is the most recent generation observed by the controller. ObservedGeneration int64 `json:"observedGeneration,omitempty"` } @@ -1700,6 +1837,11 @@ const ( // external load balancer (if the cloud provider supports it), in addition // to 'NodePort' type. ServiceTypeLoadBalancer ServiceType = "LoadBalancer" + + // ServiceTypeExternalName means a service consists of only a reference to + // an external name that kubedns or equivalent will return as a CNAME + // record, with no exposing or proxying of any pods involved. + ServiceTypeExternalName ServiceType = "ExternalName" ) // ServiceStatus represents the current status of a service @@ -1730,24 +1872,49 @@ type LoadBalancerIngress struct { // ServiceSpec describes the attributes that a user creates on a service type ServiceSpec struct { - // Type determines how the service will be exposed. Valid options: ClusterIP, NodePort, LoadBalancer + // Type determines how the Service is exposed. Defaults to ClusterIP. Valid + // options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + // "ExternalName" maps to the specified externalName. + // "ClusterIP" allocates a cluster-internal IP address for load-balancing to + // endpoints. Endpoints are determined by the selector or if that is not + // specified, by manual construction of an Endpoints object. If clusterIP is + // "None", no virtual IP is allocated and the endpoints are published as a + // set of endpoints rather than a stable IP. + // "NodePort" builds on ClusterIP and allocates a port on every node which + // routes to the clusterIP. + // "LoadBalancer" builds on NodePort and creates an + // external load-balancer (if supported in the current cloud) which routes + // to the clusterIP. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#overview Type ServiceType `json:"type,omitempty"` // Required: The list of ports that are exposed by this service. Ports []ServicePort `json:"ports"` - // This service will route traffic to pods having labels matching this selector. If empty or not present, - // the service is assumed to have endpoints set by an external process and Kubernetes will not modify - // those endpoints. + // Route service traffic to pods with label keys and values matching this + // selector. If empty or not present, the service is assumed to have an + // external process managing its endpoints, which Kubernetes will not + // modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. + // Ignored if type is ExternalName. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#overview Selector map[string]string `json:"selector"` - // ClusterIP is usually assigned by the master. If specified by the user - // we will try to respect it or else fail the request. This field can - // not be changed by updates. - // Valid values are None, empty string (""), or a valid IP address - // None can be specified for headless services when proxying is not required + // ClusterIP is the IP address of the service and is usually assigned + // randomly by the master. If an address is specified manually and is not in + // use by others, it will be allocated to the service; otherwise, creation + // of the service will fail. This field can not be changed through updates. + // Valid values are "None", empty string (""), or a valid IP address. "None" + // can be specified for headless services when proxying is not required. + // Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if + // type is ExternalName. + // More info: http://releases.k8s.io/HEAD/docs/user-guide/services.md#virtual-ips-and-service-proxies ClusterIP string `json:"clusterIP,omitempty"` + // ExternalName is the external reference that kubedns or equivalent will + // return as a CNAME record for this service. No proxying will be involved. + // Must be a valid DNS name and requires Type to be ExternalName. + ExternalName string + // ExternalIPs are used by external load balancers, or can be set by // users to handle external traffic that arrives at a node. ExternalIPs []string `json:"externalIPs,omitempty"` @@ -1885,6 +2052,8 @@ type EndpointAddress struct { // Optional: Hostname of this endpoint // Meant to be used by DNS servers etc. Hostname string `json:"hostname,omitempty"` + // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node. + NodeName *string `json:"nodeName,omitempty"` // Optional: The kubernetes object related to the entry point. TargetRef *ObjectReference } @@ -2000,10 +2169,38 @@ type AttachedVolume struct { // Name of the attached volume Name UniqueVolumeName `json:"name"` - // DevicePath represents the device path where the volume should be avilable + // DevicePath represents the device path where the volume should be available DevicePath string `json:"devicePath"` } +// AvoidPods describes pods that should avoid this node. This is the value for a +// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and +// will eventually become a field of NodeStatus. +type AvoidPods struct { + // Bounded-sized list of signatures of pods that should avoid this node, sorted + // in timestamp order from oldest to newest. Size of the slice is unspecified. + PreferAvoidPods []PreferAvoidPodsEntry `json:"preferAvoidPods,omitempty"` +} + +// Describes a class of pods that should avoid this node. +type PreferAvoidPodsEntry struct { + // The class of pods. + PodSignature PodSignature `json:"podSignature"` + // Time at which this entry was added to the list. + EvictionTime unversioned.Time `json:"evictionTime,omitempty"` + // (brief) reason why this entry was added to the list. + Reason string `json:"reason,omitempty"` + // Human readable message indicating why this entry was added to the list. + Message string `json:"message,omitempty"` +} + +// Describes the class of pods that should avoid this node. +// Exactly one field should be set. +type PodSignature struct { + // Reference to controller whose pods should avoid this node. + PodController *OwnerReference `json:"podController,omitempty"` +} + // Describe a container image type ContainerImage struct { // Names by which this image is known. @@ -2037,6 +2234,8 @@ const ( NodeOutOfDisk NodeConditionType = "OutOfDisk" // NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory. NodeMemoryPressure NodeConditionType = "MemoryPressure" + // NodeDiskPressure means the kubelet is under pressure due to insufficient available disk. + NodeDiskPressure NodeConditionType = "DiskPressure" // NodeNetworkUnavailable means that network for the node is not correctly configured. NodeNetworkUnavailable NodeConditionType = "NetworkUnavailable" ) @@ -2096,7 +2295,8 @@ const ( // ResourceList is a set of (resource name, quantity) pairs. type ResourceList map[ResourceName]resource.Quantity -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // Node is a worker node in Kubernetes // The name of the node according to etcd is in ObjectMeta.Name. @@ -2149,7 +2349,8 @@ const ( NamespaceTerminating NamespacePhase = "Terminating" ) -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // A namespace provides a scope for Names. // Use of multiple namespaces is optional @@ -2226,7 +2427,11 @@ type ListOptions struct { FieldSelector fields.Selector // If true, watch for changes to this list Watch bool - // The resource version to watch (no effect on list yet) + // For watch, it's the resource version to watch. + // For list, + // - if unset, then the result is returned from remote storage based on quorum-read flag; + // - if it's 0, then we simply return what we currently have in cache, no guarantee; + // - if set to non zero, then the result is as fresh as given rv. ResourceVersion string // Timeout for the list/watch call. TimeoutSeconds *int64 @@ -2530,6 +2735,8 @@ const ( ResourceRequestsCPU ResourceName = "requests.cpu" // Memory request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) ResourceRequestsMemory ResourceName = "requests.memory" + // Storage request, in bytes + ResourceRequestsStorage ResourceName = "requests.storage" // CPU limit, in cores. (500m = .5 cores) ResourceLimitsCPU ResourceName = "limits.cpu" // Memory limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) @@ -2686,7 +2893,7 @@ const ( // TODO: Consider supporting different formats, specifying CA/destinationCA. SecretTypeTLS SecretType = "kubernetes.io/tls" - // TLSCertKey is the key for tls certificates in a TLS secert. + // TLSCertKey is the key for tls certificates in a TLS secret. TLSCertKey = "tls.crt" // TLSPrivateKeyKey is the key for the private key field in a TLS secret. TLSPrivateKeyKey = "tls.key" @@ -2751,6 +2958,8 @@ const ( StreamTypeData = "data" // Value for streamType header for error stream StreamTypeError = "error" + // Value for streamType header for terminal resize stream + StreamTypeResize = "resize" // Name of header that specifies the port being forwarded PortHeader = "port" @@ -2785,7 +2994,8 @@ type ComponentCondition struct { Error string `json:"error,omitempty"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // ComponentStatus (and ComponentStatusList) holds the cluster validation info. type ComponentStatus struct { @@ -2883,7 +3093,8 @@ const ( DefaultFailureDomains string = unversioned.LabelHostname + "," + unversioned.LabelZoneFailureDomain + "," + unversioned.LabelZoneRegion ) -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // SecurityContextConstraints governs the ability to make requests that affect the SecurityContext // that will be applied to a container. @@ -2934,6 +3145,12 @@ type SecurityContextConstraints struct { // If set to false the container may run with a read only root file system if it wishes but it // will not be forced to. ReadOnlyRootFilesystem bool + // SeccompProfiles lists the allowed profiles that may be set for the pod or + // container's seccomp annotations. An unset (nil) or empty value means that no profiles may + // be specifid by the pod or container. The wildcard '*' may be used to allow all profiles. When + // used to generate a value for a pod the first non-wildcard profile will be used as + // the default. + SeccompProfiles []string // The users who have permissions to use this security context constraints Users []string @@ -2946,6 +3163,7 @@ type FSType string var ( FSTypeAzureFile FSType = "azureFile" + FSTypeAzureDisk FSType = "azureDisk" FSTypeFlocker FSType = "flocker" FSTypeFlexVolume FSType = "flexVolume" FSTypeHostPath FSType = "hostPath" @@ -2965,6 +3183,7 @@ var ( FSTypeFC FSType = "fc" FSTypeConfigMap FSType = "configMap" FSTypeVsphereVolume FSType = "vsphere" + FSTypeQuobyte FSType = "quobyte" FSTypeAll FSType = "*" ) diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/deep_copy_generated.go deleted file mode 100644 index ff8f1f0d..00000000 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/deep_copy_generated.go +++ /dev/null @@ -1,314 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package unversioned - -import ( - conversion "k8s.io/kubernetes/pkg/conversion" - time "time" -) - -func DeepCopy_unversioned_APIGroup(in APIGroup, out *APIGroup, c *conversion.Cloner) error { - if err := DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Name = in.Name - if in.Versions != nil { - in, out := in.Versions, &out.Versions - *out = make([]GroupVersionForDiscovery, len(in)) - for i := range in { - if err := DeepCopy_unversioned_GroupVersionForDiscovery(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Versions = nil - } - if err := DeepCopy_unversioned_GroupVersionForDiscovery(in.PreferredVersion, &out.PreferredVersion, c); err != nil { - return err - } - if in.ServerAddressByClientCIDRs != nil { - in, out := in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs - *out = make([]ServerAddressByClientCIDR, len(in)) - for i := range in { - if err := DeepCopy_unversioned_ServerAddressByClientCIDR(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ServerAddressByClientCIDRs = nil - } - return nil -} - -func DeepCopy_unversioned_APIGroupList(in APIGroupList, out *APIGroupList, c *conversion.Cloner) error { - if err := DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]APIGroup, len(in)) - for i := range in { - if err := DeepCopy_unversioned_APIGroup(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Groups = nil - } - return nil -} - -func DeepCopy_unversioned_APIResource(in APIResource, out *APIResource, c *conversion.Cloner) error { - out.Name = in.Name - out.Namespaced = in.Namespaced - out.Kind = in.Kind - return nil -} - -func DeepCopy_unversioned_APIResourceList(in APIResourceList, out *APIResourceList, c *conversion.Cloner) error { - if err := DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.GroupVersion = in.GroupVersion - if in.APIResources != nil { - in, out := in.APIResources, &out.APIResources - *out = make([]APIResource, len(in)) - for i := range in { - if err := DeepCopy_unversioned_APIResource(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.APIResources = nil - } - return nil -} - -func DeepCopy_unversioned_APIVersions(in APIVersions, out *APIVersions, c *conversion.Cloner) error { - if err := DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if in.Versions != nil { - in, out := in.Versions, &out.Versions - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Versions = nil - } - if in.ServerAddressByClientCIDRs != nil { - in, out := in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs - *out = make([]ServerAddressByClientCIDR, len(in)) - for i := range in { - if err := DeepCopy_unversioned_ServerAddressByClientCIDR(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ServerAddressByClientCIDRs = nil - } - return nil -} - -func DeepCopy_unversioned_Duration(in Duration, out *Duration, c *conversion.Cloner) error { - out.Duration = in.Duration - return nil -} - -func DeepCopy_unversioned_ExportOptions(in ExportOptions, out *ExportOptions, c *conversion.Cloner) error { - if err := DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Export = in.Export - out.Exact = in.Exact - return nil -} - -func DeepCopy_unversioned_GroupKind(in GroupKind, out *GroupKind, c *conversion.Cloner) error { - out.Group = in.Group - out.Kind = in.Kind - return nil -} - -func DeepCopy_unversioned_GroupResource(in GroupResource, out *GroupResource, c *conversion.Cloner) error { - out.Group = in.Group - out.Resource = in.Resource - return nil -} - -func DeepCopy_unversioned_GroupVersion(in GroupVersion, out *GroupVersion, c *conversion.Cloner) error { - out.Group = in.Group - out.Version = in.Version - return nil -} - -func DeepCopy_unversioned_GroupVersionForDiscovery(in GroupVersionForDiscovery, out *GroupVersionForDiscovery, c *conversion.Cloner) error { - out.GroupVersion = in.GroupVersion - out.Version = in.Version - return nil -} - -func DeepCopy_unversioned_GroupVersionKind(in GroupVersionKind, out *GroupVersionKind, c *conversion.Cloner) error { - out.Group = in.Group - out.Version = in.Version - out.Kind = in.Kind - return nil -} - -func DeepCopy_unversioned_GroupVersionResource(in GroupVersionResource, out *GroupVersionResource, c *conversion.Cloner) error { - out.Group = in.Group - out.Version = in.Version - out.Resource = in.Resource - return nil -} - -func DeepCopy_unversioned_LabelSelector(in LabelSelector, out *LabelSelector, c *conversion.Cloner) error { - if in.MatchLabels != nil { - in, out := in.MatchLabels, &out.MatchLabels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.MatchLabels = nil - } - if in.MatchExpressions != nil { - in, out := in.MatchExpressions, &out.MatchExpressions - *out = make([]LabelSelectorRequirement, len(in)) - for i := range in { - if err := DeepCopy_unversioned_LabelSelectorRequirement(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.MatchExpressions = nil - } - return nil -} - -func DeepCopy_unversioned_LabelSelectorRequirement(in LabelSelectorRequirement, out *LabelSelectorRequirement, c *conversion.Cloner) error { - out.Key = in.Key - out.Operator = in.Operator - if in.Values != nil { - in, out := in.Values, &out.Values - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Values = nil - } - return nil -} - -func DeepCopy_unversioned_ListMeta(in ListMeta, out *ListMeta, c *conversion.Cloner) error { - out.SelfLink = in.SelfLink - out.ResourceVersion = in.ResourceVersion - return nil -} - -func DeepCopy_unversioned_Patch(in Patch, out *Patch, c *conversion.Cloner) error { - return nil -} - -func DeepCopy_unversioned_RootPaths(in RootPaths, out *RootPaths, c *conversion.Cloner) error { - if in.Paths != nil { - in, out := in.Paths, &out.Paths - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Paths = nil - } - return nil -} - -func DeepCopy_unversioned_ServerAddressByClientCIDR(in ServerAddressByClientCIDR, out *ServerAddressByClientCIDR, c *conversion.Cloner) error { - out.ClientCIDR = in.ClientCIDR - out.ServerAddress = in.ServerAddress - return nil -} - -func DeepCopy_unversioned_Status(in Status, out *Status, c *conversion.Cloner) error { - if err := DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - out.Status = in.Status - out.Message = in.Message - out.Reason = in.Reason - if in.Details != nil { - in, out := in.Details, &out.Details - *out = new(StatusDetails) - if err := DeepCopy_unversioned_StatusDetails(*in, *out, c); err != nil { - return err - } - } else { - out.Details = nil - } - out.Code = in.Code - return nil -} - -func DeepCopy_unversioned_StatusCause(in StatusCause, out *StatusCause, c *conversion.Cloner) error { - out.Type = in.Type - out.Message = in.Message - out.Field = in.Field - return nil -} - -func DeepCopy_unversioned_StatusDetails(in StatusDetails, out *StatusDetails, c *conversion.Cloner) error { - out.Name = in.Name - out.Group = in.Group - out.Kind = in.Kind - if in.Causes != nil { - in, out := in.Causes, &out.Causes - *out = make([]StatusCause, len(in)) - for i := range in { - if err := DeepCopy_unversioned_StatusCause(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Causes = nil - } - out.RetryAfterSeconds = in.RetryAfterSeconds - return nil -} - -func DeepCopy_unversioned_Time(in Time, out *Time, c *conversion.Cloner) error { - if newVal, err := c.DeepCopy(in.Time); err != nil { - return err - } else { - out.Time = newVal.(time.Time) - } - return nil -} - -func DeepCopy_unversioned_Timestamp(in Timestamp, out *Timestamp, c *conversion.Cloner) error { - out.Seconds = in.Seconds - out.Nanos = in.Nanos - return nil -} - -func DeepCopy_unversioned_TypeMeta(in TypeMeta, out *TypeMeta, c *conversion.Cloner) error { - out.Kind = in.Kind - out.APIVersion = in.APIVersion - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/doc.go new file mode 100644 index 00000000..d0ffc332 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package + +package unversioned diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/duration.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/duration.go index cdaf2573..ed54e515 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/duration.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/duration.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/generated.pb.go index cb980355..a93366bb 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -58,6 +58,10 @@ import math "math" import time "time" +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -65,95 +69,111 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *APIGroup) Reset() { *m = APIGroup{} } -func (m *APIGroup) String() string { return proto.CompactTextString(m) } -func (*APIGroup) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *APIGroupList) Reset() { *m = APIGroupList{} } -func (m *APIGroupList) String() string { return proto.CompactTextString(m) } -func (*APIGroupList) ProtoMessage() {} +func (m *APIGroup) Reset() { *m = APIGroup{} } +func (*APIGroup) ProtoMessage() {} +func (*APIGroup) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *APIResource) Reset() { *m = APIResource{} } -func (m *APIResource) String() string { return proto.CompactTextString(m) } -func (*APIResource) ProtoMessage() {} +func (m *APIGroupList) Reset() { *m = APIGroupList{} } +func (*APIGroupList) ProtoMessage() {} +func (*APIGroupList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *APIResourceList) Reset() { *m = APIResourceList{} } -func (m *APIResourceList) String() string { return proto.CompactTextString(m) } -func (*APIResourceList) ProtoMessage() {} +func (m *APIResource) Reset() { *m = APIResource{} } +func (*APIResource) ProtoMessage() {} +func (*APIResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } -func (m *APIVersions) Reset() { *m = APIVersions{} } -func (*APIVersions) ProtoMessage() {} +func (m *APIResourceList) Reset() { *m = APIResourceList{} } +func (*APIResourceList) ProtoMessage() {} +func (*APIResourceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } -func (m *Duration) Reset() { *m = Duration{} } -func (m *Duration) String() string { return proto.CompactTextString(m) } -func (*Duration) ProtoMessage() {} +func (m *APIVersions) Reset() { *m = APIVersions{} } +func (*APIVersions) ProtoMessage() {} +func (*APIVersions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } -func (m *ExportOptions) Reset() { *m = ExportOptions{} } -func (m *ExportOptions) String() string { return proto.CompactTextString(m) } -func (*ExportOptions) ProtoMessage() {} +func (m *Duration) Reset() { *m = Duration{} } +func (*Duration) ProtoMessage() {} +func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } -func (m *GroupKind) Reset() { *m = GroupKind{} } -func (*GroupKind) ProtoMessage() {} +func (m *ExportOptions) Reset() { *m = ExportOptions{} } +func (*ExportOptions) ProtoMessage() {} +func (*ExportOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } -func (m *GroupResource) Reset() { *m = GroupResource{} } -func (*GroupResource) ProtoMessage() {} +func (m *GroupKind) Reset() { *m = GroupKind{} } +func (*GroupKind) ProtoMessage() {} +func (*GroupKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } -func (m *GroupVersion) Reset() { *m = GroupVersion{} } -func (*GroupVersion) ProtoMessage() {} +func (m *GroupResource) Reset() { *m = GroupResource{} } +func (*GroupResource) ProtoMessage() {} +func (*GroupResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } -func (m *GroupVersionForDiscovery) Reset() { *m = GroupVersionForDiscovery{} } -func (m *GroupVersionForDiscovery) String() string { return proto.CompactTextString(m) } -func (*GroupVersionForDiscovery) ProtoMessage() {} +func (m *GroupVersion) Reset() { *m = GroupVersion{} } +func (*GroupVersion) ProtoMessage() {} +func (*GroupVersion) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } -func (m *GroupVersionKind) Reset() { *m = GroupVersionKind{} } -func (*GroupVersionKind) ProtoMessage() {} +func (m *GroupVersionForDiscovery) Reset() { *m = GroupVersionForDiscovery{} } +func (*GroupVersionForDiscovery) ProtoMessage() {} +func (*GroupVersionForDiscovery) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{10} +} -func (m *GroupVersionResource) Reset() { *m = GroupVersionResource{} } -func (*GroupVersionResource) ProtoMessage() {} +func (m *GroupVersionKind) Reset() { *m = GroupVersionKind{} } +func (*GroupVersionKind) ProtoMessage() {} +func (*GroupVersionKind) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } -func (m *LabelSelector) Reset() { *m = LabelSelector{} } -func (m *LabelSelector) String() string { return proto.CompactTextString(m) } -func (*LabelSelector) ProtoMessage() {} +func (m *GroupVersionResource) Reset() { *m = GroupVersionResource{} } +func (*GroupVersionResource) ProtoMessage() {} +func (*GroupVersionResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } -func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } -func (m *LabelSelectorRequirement) String() string { return proto.CompactTextString(m) } -func (*LabelSelectorRequirement) ProtoMessage() {} +func (m *LabelSelector) Reset() { *m = LabelSelector{} } +func (*LabelSelector) ProtoMessage() {} +func (*LabelSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } -func (m *ListMeta) Reset() { *m = ListMeta{} } -func (m *ListMeta) String() string { return proto.CompactTextString(m) } -func (*ListMeta) ProtoMessage() {} +func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } +func (*LabelSelectorRequirement) ProtoMessage() {} +func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{14} +} -func (m *RootPaths) Reset() { *m = RootPaths{} } -func (m *RootPaths) String() string { return proto.CompactTextString(m) } -func (*RootPaths) ProtoMessage() {} +func (m *ListMeta) Reset() { *m = ListMeta{} } +func (*ListMeta) ProtoMessage() {} +func (*ListMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } -func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } -func (m *ServerAddressByClientCIDR) String() string { return proto.CompactTextString(m) } -func (*ServerAddressByClientCIDR) ProtoMessage() {} +func (m *RootPaths) Reset() { *m = RootPaths{} } +func (*RootPaths) ProtoMessage() {} +func (*RootPaths) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } -func (m *Status) Reset() { *m = Status{} } -func (m *Status) String() string { return proto.CompactTextString(m) } -func (*Status) ProtoMessage() {} +func (m *ServerAddressByClientCIDR) Reset() { *m = ServerAddressByClientCIDR{} } +func (*ServerAddressByClientCIDR) ProtoMessage() {} +func (*ServerAddressByClientCIDR) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{17} +} -func (m *StatusCause) Reset() { *m = StatusCause{} } -func (m *StatusCause) String() string { return proto.CompactTextString(m) } -func (*StatusCause) ProtoMessage() {} +func (m *Status) Reset() { *m = Status{} } +func (*Status) ProtoMessage() {} +func (*Status) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } -func (m *StatusDetails) Reset() { *m = StatusDetails{} } -func (m *StatusDetails) String() string { return proto.CompactTextString(m) } -func (*StatusDetails) ProtoMessage() {} +func (m *StatusCause) Reset() { *m = StatusCause{} } +func (*StatusCause) ProtoMessage() {} +func (*StatusCause) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } -func (m *Time) Reset() { *m = Time{} } -func (m *Time) String() string { return proto.CompactTextString(m) } -func (*Time) ProtoMessage() {} +func (m *StatusDetails) Reset() { *m = StatusDetails{} } +func (*StatusDetails) ProtoMessage() {} +func (*StatusDetails) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } -func (m *Timestamp) Reset() { *m = Timestamp{} } -func (m *Timestamp) String() string { return proto.CompactTextString(m) } -func (*Timestamp) ProtoMessage() {} +func (m *Time) Reset() { *m = Time{} } +func (*Time) ProtoMessage() {} +func (*Time) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } -func (m *TypeMeta) Reset() { *m = TypeMeta{} } -func (m *TypeMeta) String() string { return proto.CompactTextString(m) } -func (*TypeMeta) ProtoMessage() {} +func (m *Timestamp) Reset() { *m = Timestamp{} } +func (*Timestamp) ProtoMessage() {} +func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{22} } + +func (m *TypeMeta) Reset() { *m = TypeMeta{} } +func (*TypeMeta) ProtoMessage() {} +func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } func init() { proto.RegisterType((*APIGroup)(nil), "k8s.io.kubernetes.pkg.api.unversioned.APIGroup") @@ -1278,6 +1298,220 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *APIGroup) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIGroup{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Versions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Versions), "GroupVersionForDiscovery", "GroupVersionForDiscovery", 1), `&`, ``, 1) + `,`, + `PreferredVersion:` + strings.Replace(strings.Replace(this.PreferredVersion.String(), "GroupVersionForDiscovery", "GroupVersionForDiscovery", 1), `&`, ``, 1) + `,`, + `ServerAddressByClientCIDRs:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ServerAddressByClientCIDRs), "ServerAddressByClientCIDR", "ServerAddressByClientCIDR", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *APIGroupList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIGroupList{`, + `Groups:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Groups), "APIGroup", "APIGroup", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *APIResource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIResource{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Namespaced:` + fmt.Sprintf("%v", this.Namespaced) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `}`, + }, "") + return s +} +func (this *APIResourceList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIResourceList{`, + `GroupVersion:` + fmt.Sprintf("%v", this.GroupVersion) + `,`, + `APIResources:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.APIResources), "APIResource", "APIResource", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Duration) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Duration{`, + `Duration:` + fmt.Sprintf("%v", this.Duration) + `,`, + `}`, + }, "") + return s +} +func (this *ExportOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExportOptions{`, + `Export:` + fmt.Sprintf("%v", this.Export) + `,`, + `Exact:` + fmt.Sprintf("%v", this.Exact) + `,`, + `}`, + }, "") + return s +} +func (this *GroupVersionForDiscovery) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GroupVersionForDiscovery{`, + `GroupVersion:` + fmt.Sprintf("%v", this.GroupVersion) + `,`, + `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelector) String() string { + if this == nil { + return "nil" + } + keysForMatchLabels := make([]string, 0, len(this.MatchLabels)) + for k := range this.MatchLabels { + keysForMatchLabels = append(keysForMatchLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMatchLabels) + mapStringForMatchLabels := "map[string]string{" + for _, k := range keysForMatchLabels { + mapStringForMatchLabels += fmt.Sprintf("%v: %v,", k, this.MatchLabels[k]) + } + mapStringForMatchLabels += "}" + s := strings.Join([]string{`&LabelSelector{`, + `MatchLabels:` + mapStringForMatchLabels + `,`, + `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "LabelSelectorRequirement", "LabelSelectorRequirement", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LabelSelectorRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *ListMeta) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ListMeta{`, + `SelfLink:` + fmt.Sprintf("%v", this.SelfLink) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `}`, + }, "") + return s +} +func (this *RootPaths) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RootPaths{`, + `Paths:` + fmt.Sprintf("%v", this.Paths) + `,`, + `}`, + }, "") + return s +} +func (this *ServerAddressByClientCIDR) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServerAddressByClientCIDR{`, + `ClientCIDR:` + fmt.Sprintf("%v", this.ClientCIDR) + `,`, + `ServerAddress:` + fmt.Sprintf("%v", this.ServerAddress) + `,`, + `}`, + }, "") + return s +} +func (this *Status) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Status{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "ListMeta", 1), `&`, ``, 1) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Details:` + strings.Replace(fmt.Sprintf("%v", this.Details), "StatusDetails", "StatusDetails", 1) + `,`, + `Code:` + fmt.Sprintf("%v", this.Code) + `,`, + `}`, + }, "") + return s +} +func (this *StatusCause) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StatusCause{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Field:` + fmt.Sprintf("%v", this.Field) + `,`, + `}`, + }, "") + return s +} +func (this *StatusDetails) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StatusDetails{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Causes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Causes), "StatusCause", "StatusCause", 1), `&`, ``, 1) + `,`, + `RetryAfterSeconds:` + fmt.Sprintf("%v", this.RetryAfterSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *Timestamp) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Timestamp{`, + `Seconds:` + fmt.Sprintf("%v", this.Seconds) + `,`, + `Nanos:` + fmt.Sprintf("%v", this.Nanos) + `,`, + `}`, + }, "") + return s +} +func (this *TypeMeta) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TypeMeta{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *APIGroup) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -4210,3 +4444,94 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 1390 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xcc, 0x57, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xf7, 0xda, 0xb1, 0xbb, 0x7e, 0x8e, 0x49, 0xba, 0xa4, 0x62, 0x1b, 0x09, 0xdb, 0x6c, 0x05, + 0x4a, 0xa5, 0xd6, 0x56, 0x23, 0x40, 0x55, 0x11, 0x7f, 0xe2, 0x24, 0xad, 0xa2, 0x36, 0x6d, 0x34, + 0xa9, 0x8a, 0xd4, 0x16, 0x89, 0x8d, 0x77, 0xe2, 0xac, 0x6c, 0xef, 0x2e, 0x33, 0xb3, 0x51, 0x2d, + 0x90, 0xe8, 0xa5, 0x12, 0x07, 0x84, 0x7a, 0xe4, 0x02, 0x6a, 0xa5, 0x7e, 0x03, 0xbe, 0x44, 0xc5, + 0xa9, 0x17, 0x24, 0x0e, 0xc8, 0xa2, 0xe1, 0xc2, 0x95, 0x6b, 0x4e, 0x68, 0x66, 0x67, 0xd6, 0xbb, + 0x6e, 0x4d, 0x36, 0xd0, 0x03, 0x27, 0xef, 0xfb, 0xff, 0xe6, 0xbd, 0xdf, 0xbc, 0x37, 0x86, 0xf7, + 0x7a, 0x17, 0x69, 0xd3, 0xf5, 0x5b, 0xbd, 0x70, 0x07, 0x13, 0x0f, 0x33, 0x4c, 0x5b, 0x41, 0xaf, + 0xdb, 0xb2, 0x03, 0xb7, 0x15, 0x7a, 0xfb, 0x98, 0x50, 0xd7, 0xf7, 0xb0, 0xd3, 0xea, 0x62, 0x0f, + 0x13, 0x9b, 0x61, 0xa7, 0x19, 0x10, 0x9f, 0xf9, 0xc6, 0xdb, 0x91, 0x59, 0x73, 0x6c, 0xd6, 0x0c, + 0x7a, 0xdd, 0xa6, 0x1d, 0xb8, 0xcd, 0x84, 0xd9, 0xe2, 0xf9, 0xae, 0xcb, 0xf6, 0xc2, 0x9d, 0x66, + 0xc7, 0x1f, 0xb4, 0xba, 0x7e, 0xd7, 0x6f, 0x09, 0xeb, 0x9d, 0x70, 0x57, 0x50, 0x82, 0x10, 0x5f, + 0x91, 0xd7, 0xc5, 0xf3, 0x2f, 0x4f, 0x86, 0x84, 0x1e, 0x73, 0x07, 0x78, 0x32, 0x89, 0xc5, 0x0b, + 0x2f, 0x57, 0x0f, 0x99, 0xdb, 0x6f, 0xb9, 0x1e, 0xa3, 0x8c, 0x4c, 0x9a, 0x58, 0x3f, 0x17, 0x40, + 0x5f, 0xd9, 0xda, 0xb8, 0x42, 0xfc, 0x30, 0x30, 0x1a, 0x30, 0xe3, 0xd9, 0x03, 0x6c, 0x6a, 0x0d, + 0x6d, 0xa9, 0xdc, 0x9e, 0x7d, 0x3a, 0xaa, 0xe7, 0x0e, 0x46, 0xf5, 0x99, 0xeb, 0xf6, 0x00, 0x23, + 0x21, 0x31, 0x06, 0xa0, 0xcb, 0xc3, 0x50, 0x33, 0xdf, 0x28, 0x2c, 0x55, 0x96, 0x3f, 0x6e, 0x66, + 0x3a, 0x79, 0x53, 0x44, 0xb8, 0x15, 0x91, 0x97, 0x7d, 0xb2, 0xe6, 0xd2, 0x8e, 0xbf, 0x8f, 0xc9, + 0xb0, 0x3d, 0x2f, 0xc3, 0xe8, 0x52, 0x48, 0x51, 0x1c, 0xc2, 0x78, 0xa0, 0xc1, 0x7c, 0x40, 0xf0, + 0x2e, 0x26, 0x04, 0x3b, 0x52, 0x6e, 0x16, 0x1a, 0xda, 0xab, 0x88, 0x6b, 0xca, 0xb8, 0xf3, 0x5b, + 0x13, 0x01, 0xd0, 0x0b, 0x21, 0x8d, 0x27, 0x1a, 0x2c, 0x52, 0x4c, 0xf6, 0x31, 0x59, 0x71, 0x1c, + 0x82, 0x29, 0x6d, 0x0f, 0x57, 0xfb, 0x2e, 0xf6, 0xd8, 0xea, 0xc6, 0x1a, 0xa2, 0xe6, 0x8c, 0xa8, + 0xc4, 0x27, 0x19, 0x33, 0xda, 0x9e, 0xe6, 0xa8, 0x6d, 0xc9, 0x94, 0x16, 0xa7, 0xaa, 0x50, 0xf4, + 0x0f, 0x79, 0x58, 0x5d, 0x98, 0x55, 0xbd, 0xbc, 0xe6, 0x52, 0x66, 0x7c, 0x0a, 0xa5, 0x2e, 0x27, + 0xa8, 0xa9, 0x89, 0x0c, 0x5b, 0x19, 0x33, 0x54, 0x4e, 0xda, 0xaf, 0xc9, 0x84, 0x4a, 0x82, 0xa4, + 0x48, 0xba, 0xb3, 0x1e, 0x68, 0x50, 0x59, 0xd9, 0xda, 0x40, 0x98, 0xfa, 0x21, 0xe9, 0xe0, 0x0c, + 0xc0, 0x59, 0x06, 0xe0, 0xbf, 0x34, 0xb0, 0x3b, 0xd8, 0x31, 0xf3, 0x0d, 0x6d, 0x49, 0x6f, 0x1b, + 0x52, 0x0f, 0xae, 0xc7, 0x12, 0x94, 0xd0, 0xe2, 0x5e, 0x7b, 0xae, 0xe7, 0x88, 0x86, 0x27, 0xbc, + 0x5e, 0x75, 0x3d, 0x07, 0x09, 0x89, 0xf5, 0x93, 0x06, 0x73, 0x89, 0x3c, 0xc4, 0xa1, 0x2f, 0xc2, + 0x6c, 0x37, 0xd1, 0x73, 0x99, 0xd3, 0x82, 0xb4, 0x9e, 0x4d, 0xe2, 0x01, 0xa5, 0x34, 0x8d, 0x5d, + 0x28, 0x13, 0xe9, 0x49, 0xa1, 0x7b, 0x39, 0x7b, 0xc5, 0x54, 0x12, 0xe3, 0x50, 0x09, 0x26, 0x45, + 0x63, 0xd7, 0xd6, 0x9f, 0x51, 0xf5, 0x14, 0xde, 0x8d, 0xa5, 0xc4, 0xa5, 0xe2, 0x8d, 0x2a, 0xb7, + 0x67, 0xa7, 0xdc, 0x87, 0x23, 0x70, 0x98, 0xff, 0x7f, 0xe0, 0xf0, 0x92, 0xfe, 0xfd, 0xa3, 0x7a, + 0xee, 0xfe, 0x6f, 0x8d, 0x9c, 0xb5, 0x01, 0xfa, 0x5a, 0x48, 0x6c, 0xc6, 0xcb, 0xfb, 0x21, 0xe8, + 0x8e, 0xfc, 0x16, 0x4d, 0x29, 0xb4, 0xdf, 0x52, 0x57, 0x5f, 0xe9, 0x1c, 0x8e, 0xea, 0x55, 0x3e, + 0xd9, 0x9a, 0x8a, 0x81, 0x62, 0x13, 0xeb, 0x2e, 0x54, 0xd7, 0xef, 0x05, 0x3e, 0x61, 0x37, 0x02, + 0x26, 0x8a, 0xf1, 0x0e, 0x94, 0xb0, 0x60, 0x08, 0x6f, 0xfa, 0x18, 0xac, 0x91, 0x1a, 0x92, 0x52, + 0xe3, 0x0c, 0x14, 0xf1, 0x3d, 0xbb, 0xc3, 0x24, 0xea, 0xaa, 0x52, 0xad, 0xb8, 0xce, 0x99, 0x28, + 0x92, 0x59, 0x77, 0xa1, 0x2c, 0x90, 0xc1, 0xc1, 0xc5, 0x2d, 0x04, 0x30, 0x24, 0x76, 0x62, 0x0b, + 0xa1, 0x81, 0x22, 0x59, 0x8c, 0xce, 0xfc, 0x34, 0x74, 0x26, 0xca, 0xd0, 0x87, 0x6a, 0x64, 0xab, + 0x2e, 0x4c, 0xa6, 0x08, 0xe7, 0x40, 0x57, 0xa0, 0x91, 0x51, 0xe2, 0x59, 0xa9, 0x1c, 0xa1, 0x58, + 0x23, 0x11, 0x6d, 0x0f, 0x52, 0x28, 0xcf, 0x16, 0xec, 0x2c, 0x9c, 0x90, 0xd0, 0x90, 0xb1, 0xe6, + 0xa4, 0xda, 0x09, 0x75, 0x59, 0x94, 0x3c, 0x11, 0xe9, 0x6b, 0x30, 0xa7, 0xcd, 0xd7, 0xff, 0x70, + 0x0f, 0xb3, 0xa7, 0x62, 0x7d, 0xa7, 0xc1, 0x7c, 0xd2, 0x53, 0xf6, 0xf6, 0x65, 0x0f, 0x72, 0xf4, + 0x1c, 0x4a, 0x54, 0xe4, 0x47, 0x0d, 0x16, 0x52, 0x47, 0x3b, 0x56, 0xc7, 0x8f, 0x91, 0x54, 0x12, + 0x1c, 0x85, 0x63, 0x80, 0xe3, 0x97, 0x3c, 0x54, 0xaf, 0xd9, 0x3b, 0xb8, 0xbf, 0x8d, 0xfb, 0xb8, + 0xc3, 0x7c, 0x62, 0x7c, 0x05, 0x95, 0x81, 0xcd, 0x3a, 0x7b, 0x82, 0xab, 0x56, 0xc5, 0x7a, 0xc6, + 0x21, 0x92, 0x72, 0xd5, 0xdc, 0x1c, 0xfb, 0x59, 0xf7, 0x18, 0x19, 0xb6, 0x5f, 0x97, 0x39, 0x55, + 0x12, 0x12, 0x94, 0x0c, 0x27, 0x56, 0xbc, 0xa0, 0xd7, 0xef, 0x05, 0x7c, 0x92, 0xfc, 0x8b, 0xa7, + 0x45, 0x2a, 0x07, 0x84, 0xbf, 0x08, 0x5d, 0x82, 0x07, 0xd8, 0x63, 0xe3, 0x15, 0xbf, 0x39, 0x11, + 0x00, 0xbd, 0x10, 0x72, 0xf1, 0x23, 0x98, 0x9f, 0xcc, 0xde, 0x98, 0x87, 0x42, 0x0f, 0x0f, 0xa3, + 0x8e, 0x21, 0xfe, 0x69, 0x2c, 0x40, 0x71, 0xdf, 0xee, 0x87, 0xf2, 0x3e, 0xa2, 0x88, 0xb8, 0x94, + 0xbf, 0xa8, 0x59, 0x4f, 0x34, 0x30, 0xa7, 0x25, 0x62, 0xbc, 0x99, 0x70, 0xd4, 0xae, 0xc8, 0xac, + 0x0a, 0x57, 0xf1, 0x30, 0xf2, 0xba, 0x0e, 0xba, 0x1f, 0xf0, 0x67, 0x99, 0x4f, 0x64, 0xdf, 0xcf, + 0xaa, 0x5e, 0xde, 0x90, 0xfc, 0xc3, 0x51, 0xfd, 0x54, 0xca, 0xbd, 0x12, 0xa0, 0xd8, 0xd4, 0xb0, + 0xa0, 0x24, 0xf2, 0xa1, 0x66, 0x41, 0x6c, 0x11, 0xe0, 0xc3, 0xf0, 0x96, 0xe0, 0x20, 0x29, 0xb1, + 0xbe, 0x04, 0x9d, 0x6f, 0xc9, 0x4d, 0xcc, 0x6c, 0x0e, 0x21, 0x8a, 0xfb, 0xbb, 0xd7, 0x5c, 0xaf, + 0x27, 0x53, 0x8b, 0x21, 0xb4, 0x2d, 0xf9, 0x28, 0xd6, 0x30, 0x56, 0x60, 0x4e, 0xc1, 0xe9, 0x56, + 0x0a, 0xa3, 0x6f, 0x48, 0xa3, 0x39, 0x94, 0x16, 0xa3, 0x49, 0x7d, 0xeb, 0x1c, 0x94, 0x91, 0xef, + 0xb3, 0x2d, 0x9b, 0xed, 0x51, 0xa3, 0x0e, 0xc5, 0x80, 0x7f, 0xc8, 0x95, 0x57, 0xe6, 0x97, 0x41, + 0x48, 0x50, 0xc4, 0xb7, 0xbe, 0xd5, 0xe0, 0xf4, 0xd4, 0x05, 0xc4, 0x1f, 0x14, 0x9d, 0x98, 0x92, + 0xe9, 0xc7, 0x0f, 0x8a, 0xb1, 0x1e, 0x4a, 0x68, 0x19, 0x1f, 0x40, 0x35, 0xb5, 0xb5, 0xe4, 0x01, + 0x4e, 0x49, 0xb3, 0x6a, 0x2a, 0x1a, 0x4a, 0xeb, 0x5a, 0x7f, 0xe5, 0xa1, 0xb4, 0xcd, 0x6c, 0x16, + 0x52, 0xe3, 0x33, 0xd0, 0x07, 0x98, 0xd9, 0x8e, 0xcd, 0x6c, 0x11, 0x39, 0xfb, 0xcb, 0x4a, 0xd5, + 0x7e, 0x5c, 0x69, 0xc5, 0x41, 0xb1, 0x4b, 0xbe, 0xd8, 0xa8, 0x08, 0x24, 0xf3, 0x8b, 0x17, 0x5b, + 0x14, 0x1e, 0x49, 0x29, 0x9f, 0x16, 0x03, 0x4c, 0xa9, 0xdd, 0x55, 0x13, 0x20, 0x9e, 0x16, 0x9b, + 0x11, 0x1b, 0x29, 0xb9, 0xf1, 0x3e, 0x94, 0x08, 0xb6, 0xa9, 0xef, 0x99, 0x33, 0x42, 0xb3, 0xa6, + 0x5c, 0x22, 0xc1, 0x3d, 0x1c, 0xd5, 0x67, 0xa5, 0x73, 0x41, 0x23, 0xa9, 0x6d, 0xdc, 0x81, 0x13, + 0x0e, 0x66, 0xb6, 0xdb, 0xa7, 0x66, 0x51, 0x1c, 0xf4, 0xdd, 0xac, 0x8f, 0x0b, 0xe1, 0x6d, 0x2d, + 0xb2, 0x6d, 0x57, 0x78, 0x52, 0x92, 0x40, 0xca, 0x23, 0x9f, 0xab, 0x1d, 0xdf, 0xc1, 0x66, 0xa9, + 0xa1, 0x2d, 0x15, 0xc7, 0x73, 0x75, 0xd5, 0x77, 0x30, 0x12, 0x12, 0xeb, 0xa1, 0x06, 0x95, 0xc8, + 0xd3, 0xaa, 0x1d, 0x52, 0x6c, 0x5c, 0x88, 0x8f, 0x11, 0x35, 0xfc, 0xb4, 0xb2, 0xb9, 0x39, 0x0c, + 0xf0, 0xe1, 0xa8, 0x5e, 0x16, 0x6a, 0x9c, 0x88, 0x4f, 0x90, 0x28, 0x52, 0xfe, 0x88, 0x22, 0x9d, + 0x81, 0xe2, 0xae, 0x8b, 0xfb, 0x6a, 0xd0, 0xc7, 0x23, 0xfa, 0x32, 0x67, 0xa2, 0x48, 0x66, 0xfd, + 0x90, 0x87, 0x6a, 0xea, 0x70, 0x19, 0x1e, 0xbf, 0xf1, 0xec, 0xcf, 0x67, 0x78, 0x4f, 0x4c, 0xdd, + 0x32, 0xc6, 0x6d, 0x28, 0x75, 0xf8, 0xf9, 0xd4, 0x1f, 0x8e, 0xe5, 0x63, 0xf5, 0x42, 0x94, 0x66, + 0x8c, 0x25, 0x41, 0x52, 0x24, 0x3d, 0x1a, 0x57, 0xe0, 0x24, 0xc1, 0x8c, 0x0c, 0x57, 0x76, 0x19, + 0x26, 0xdb, 0xb8, 0xe3, 0x7b, 0x4e, 0xd4, 0xf2, 0x62, 0x5c, 0xe4, 0x93, 0x68, 0x52, 0x01, 0xbd, + 0x68, 0x63, 0xf5, 0x61, 0xe6, 0xa6, 0x3b, 0xc0, 0xbc, 0xee, 0x54, 0xba, 0x89, 0x1e, 0x7b, 0x71, + 0xdd, 0x95, 0xb1, 0x92, 0xf3, 0xf2, 0x78, 0xb6, 0xe7, 0x47, 0x70, 0x2f, 0x8e, 0xcb, 0x73, 0x9d, + 0x33, 0x51, 0x24, 0xbb, 0xb4, 0xc0, 0x37, 0xd8, 0x37, 0x8f, 0xeb, 0xb9, 0x87, 0x8f, 0xeb, 0xb9, + 0x47, 0x8f, 0xe5, 0x36, 0xbb, 0x03, 0x65, 0x1e, 0x8d, 0x32, 0x7b, 0x10, 0xbc, 0xea, 0x90, 0xd6, + 0xe7, 0xa0, 0x73, 0x28, 0x89, 0x59, 0xa9, 0xba, 0xa3, 0x4d, 0xed, 0xce, 0x32, 0x80, 0x1d, 0xb8, + 0xe9, 0xd1, 0x18, 0x0f, 0xa4, 0xf1, 0x73, 0x1f, 0x25, 0xb4, 0xda, 0xe7, 0x9f, 0x3e, 0xaf, 0xe5, + 0x9e, 0x3d, 0xaf, 0xe5, 0x7e, 0x7d, 0x5e, 0xcb, 0xdd, 0x3f, 0xa8, 0x69, 0x4f, 0x0f, 0x6a, 0xda, + 0xb3, 0x83, 0x9a, 0xf6, 0xfb, 0x41, 0x4d, 0x7b, 0xf8, 0x47, 0x2d, 0x77, 0xbb, 0x92, 0x68, 0xe4, + 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x22, 0x00, 0xde, 0x9c, 0x10, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/generated.proto b/vendor/k8s.io/kubernetes/pkg/api/unversioned/generated.proto index e26cbd7b..bd72ad34 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -144,7 +144,7 @@ message GroupVersion { } // GroupVersion contains the "group/version" and "version" string of a version. -// It is made a struct to keep extensiblity. +// It is made a struct to keep extensibility. message GroupVersionForDiscovery { // groupVersion specifies the API group and version in the form "group/version" optional string groupVersion = 1; @@ -221,7 +221,7 @@ message ListMeta { // Value must be treated as opaque by clients and passed unmodified back to the server. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency optional string resourceVersion = 2; } @@ -245,12 +245,12 @@ message ServerAddressByClientCIDR { // Status is a return value for calls that don't return other objects. message Status { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional ListMeta metadata = 1; // Status of the operation. // One of: "Success" or "Failure". - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional string status = 2; // A human-readable description of the status of this operation. @@ -311,7 +311,7 @@ message StatusDetails { // The kind attribute of the resource associated with the status StatusReason. // On some operations may differ from the requested resource Kind. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional string kind = 3; // The Causes array includes more details associated with the StatusReason @@ -328,6 +328,7 @@ message StatusDetails { // // +protobuf.options.marshal=false // +protobuf.as=Timestamp +// +protobuf.options.(gogoproto.goproto_stringer)=false message Time { // Represents seconds of UTC time since Unix epoch // 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to @@ -365,13 +366,13 @@ message TypeMeta { // Servers may infer this from the endpoint the client submits requests to. // Cannot be updated. // In CamelCase. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional string kind = 1; // APIVersion defines the versioned schema of this representation of an object. // Servers should convert recognized schemas to the latest internal value, and // may reject unrecognized values. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#resources + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#resources optional string apiVersion = 2; } diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/group_version.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/group_version.go index d900fb89..dfbfe3a3 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/group_version.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/group_version.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -50,7 +50,7 @@ func (gr GroupResource) WithVersion(version string) GroupVersionResource { return GroupVersionResource{Group: gr.Group, Version: version, Resource: gr.Resource} } -func (gr GroupResource) IsEmpty() bool { +func (gr GroupResource) Empty() bool { return len(gr.Group) == 0 && len(gr.Resource) == 0 } @@ -81,7 +81,7 @@ type GroupVersionResource struct { Resource string `protobuf:"bytes,3,opt,name=resource"` } -func (gvr GroupVersionResource) IsEmpty() bool { +func (gvr GroupVersionResource) Empty() bool { return len(gvr.Group) == 0 && len(gvr.Version) == 0 && len(gvr.Resource) == 0 } @@ -106,7 +106,7 @@ type GroupKind struct { Kind string `protobuf:"bytes,2,opt,name=kind"` } -func (gk GroupKind) IsEmpty() bool { +func (gk GroupKind) Empty() bool { return len(gk.Group) == 0 && len(gk.Kind) == 0 } @@ -131,8 +131,8 @@ type GroupVersionKind struct { Kind string `protobuf:"bytes,3,opt,name=kind"` } -// IsEmpty returns true if group, version, and kind are empty -func (gvk GroupVersionKind) IsEmpty() bool { +// Empty returns true if group, version, and kind are empty +func (gvk GroupVersionKind) Empty() bool { return len(gvk.Group) == 0 && len(gvk.Version) == 0 && len(gvk.Kind) == 0 } @@ -156,8 +156,8 @@ type GroupVersion struct { Version string `protobuf:"bytes,2,opt,name=version"` } -// IsEmpty returns true if group and version are empty -func (gv GroupVersion) IsEmpty() bool { +// Empty returns true if group and version are empty +func (gv GroupVersion) Empty() bool { return len(gv.Group) == 0 && len(gv.Version) == 0 } @@ -165,7 +165,7 @@ func (gv GroupVersion) IsEmpty() bool { // it returns "v1". func (gv GroupVersion) String() string { // special case the internal apiVersion for the legacy kube types - if gv.IsEmpty() { + if gv.Empty() { return "" } @@ -179,18 +179,25 @@ func (gv GroupVersion) String() string { return gv.Version } -// VersionForGroupKind identifies the preferred GroupVersion for a GroupKind, or false if no -// group version is preferred. -func (gv GroupVersion) VersionForGroupKind(src GroupKind) (GroupVersion, bool) { - if src.Group == gv.Group { - return gv, true +// KindForGroupVersionKinds identifies the preferred GroupVersionKind out of a list. It returns ok false +// if none of the options match the group. It prefers a match to group and version over just group. +// TODO: Move GroupVersion to a package under pkg/runtime, since it's used by scheme. +// TODO: Introduce an adapter type between GroupVersion and runtime.GroupVersioner, and use LegacyCodec(GroupVersion) +// in fewer places. +func (gv GroupVersion) KindForGroupVersionKinds(kinds []GroupVersionKind) (target GroupVersionKind, ok bool) { + for _, gvk := range kinds { + if gvk.Group == gv.Group && gvk.Version == gv.Version { + return gvk, true + } } - return GroupVersion{}, false + for _, gvk := range kinds { + if gvk.Group == gv.Group { + return gv.WithKind(gvk.Kind), true + } + } + return GroupVersionKind{}, false } -// PrefersGroup always returns the current group. -func (gv GroupVersion) PrefersGroup() (string, bool) { return gv.Group, true } - // ParseGroupVersion turns "group/version" string into a GroupVersion struct. It reports error // if it cannot parse the string. func ParseGroupVersion(gv string) (GroupVersion, error) { @@ -254,25 +261,22 @@ func (gv *GroupVersion) UnmarshalText(value []byte) error { } // GroupVersions can be used to represent a set of desired group versions. +// TODO: Move GroupVersions to a package under pkg/runtime, since it's used by scheme. +// TODO: Introduce an adapter type between GroupVersions and runtime.GroupVersioner, and use LegacyCodec(GroupVersion) +// in fewer places. type GroupVersions []GroupVersion -// VersionForGroupKind identifies the preferred GroupVersion for a GroupKind, or false if no -// group version is preferred. -func (gvs GroupVersions) VersionForGroupKind(src GroupKind) (GroupVersion, bool) { +// KindForGroupVersionKinds identifies the preferred GroupVersionKind out of a list. It returns ok false +// if none of the options match the group. +func (gvs GroupVersions) KindForGroupVersionKinds(kinds []GroupVersionKind) (target GroupVersionKind, ok bool) { for _, gv := range gvs { - if src.Group == gv.Group { - return gv, true + target, ok := gv.KindForGroupVersionKinds(kinds) + if !ok { + continue } + return target, true } - return GroupVersion{}, false -} - -// PrefersGroup returns the first group, or false. -func (gvs GroupVersions) PrefersGroup() (string, bool) { - if len(gvs) == 0 { - return "", false - } - return gvs[0].Group, true + return GroupVersionKind{}, false } // ToAPIVersionAndKind is a convenience method for satisfying runtime.Object on types that diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/helpers.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/helpers.go index b71297ec..5bd9051c 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/helpers.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import ( "fmt" "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/selection" "k8s.io/kubernetes/pkg/util/sets" ) @@ -35,23 +36,23 @@ func LabelSelectorAsSelector(ps *LabelSelector) (labels.Selector, error) { } selector := labels.NewSelector() for k, v := range ps.MatchLabels { - r, err := labels.NewRequirement(k, labels.EqualsOperator, sets.NewString(v)) + r, err := labels.NewRequirement(k, selection.Equals, sets.NewString(v)) if err != nil { return nil, err } selector = selector.Add(*r) } for _, expr := range ps.MatchExpressions { - var op labels.Operator + var op selection.Operator switch expr.Operator { case LabelSelectorOpIn: - op = labels.InOperator + op = selection.In case LabelSelectorOpNotIn: - op = labels.NotInOperator + op = selection.NotIn case LabelSelectorOpExists: - op = labels.ExistsOperator + op = selection.Exists case LabelSelectorOpDoesNotExist: - op = labels.DoesNotExistOperator + op = selection.DoesNotExist default: return nil, fmt.Errorf("%q is not a valid pod selector operator", expr.Operator) } @@ -64,6 +65,35 @@ func LabelSelectorAsSelector(ps *LabelSelector) (labels.Selector, error) { return selector, nil } +// LabelSelectorAsMap converts the LabelSelector api type into a map of strings, ie. the +// original structure of a label selector. Operators that cannot be converted into plain +// labels (Exists, DoesNotExist, NotIn, and In with more than one value) will result in +// an error. +func LabelSelectorAsMap(ps *LabelSelector) (map[string]string, error) { + if ps == nil { + return nil, nil + } + selector := map[string]string{} + for k, v := range ps.MatchLabels { + selector[k] = v + } + for _, expr := range ps.MatchExpressions { + switch expr.Operator { + case LabelSelectorOpIn: + if len(expr.Values) != 1 { + return selector, fmt.Errorf("operator %q without a single value cannot be converted into the old label selector format", expr.Operator) + } + // Should we do anything in case this will override a previous key-value pair? + selector[expr.Key] = expr.Values[0] + case LabelSelectorOpNotIn, LabelSelectorOpExists, LabelSelectorOpDoesNotExist: + return selector, fmt.Errorf("operator %q cannot be converted into the old label selector format", expr.Operator) + default: + return selector, fmt.Errorf("%q is not a valid selector operator", expr.Operator) + } + } + return selector, nil +} + // ParseToLabelSelector parses a string representing a selector into a LabelSelector object. // Note: This function should be kept in sync with the parser in pkg/labels/selector.go func ParseToLabelSelector(selector string) (*LabelSelector, error) { @@ -79,7 +109,7 @@ func ParseToLabelSelector(selector string) (*LabelSelector, error) { for _, req := range reqs { var op LabelSelectorOperator switch req.Operator() { - case labels.EqualsOperator, labels.DoubleEqualsOperator: + case selection.Equals, selection.DoubleEquals: vals := req.Values() if vals.Len() != 1 { return nil, fmt.Errorf("equals operator must have exactly one value") @@ -90,15 +120,15 @@ func ParseToLabelSelector(selector string) (*LabelSelector, error) { } labelSelector.MatchLabels[req.Key()] = val continue - case labels.InOperator: + case selection.In: op = LabelSelectorOpIn - case labels.NotInOperator: + case selection.NotIn: op = LabelSelectorOpNotIn - case labels.ExistsOperator: + case selection.Exists: op = LabelSelectorOpExists - case labels.DoesNotExistOperator: + case selection.DoesNotExist: op = LabelSelectorOpDoesNotExist - case labels.GreaterThanOperator, labels.LessThanOperator: + case selection.GreaterThan, selection.LessThan: // Adding a separate case for these operators to indicate that this is deliberate return nil, fmt.Errorf("%q isn't supported in label selectors", req.Operator()) default: diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/meta.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/meta.go index b82b1990..48009da1 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/meta.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/meta.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/register.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/register.go index f8dbd837..907188bc 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/register.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/register.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ package unversioned // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = GroupVersion{Group: "", Version: ""} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/time.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/time.go index df94bbe7..7e6281a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/time.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/time.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,10 +29,23 @@ import ( // // +protobuf.options.marshal=false // +protobuf.as=Timestamp +// +protobuf.options.(gogoproto.goproto_stringer)=false type Time struct { time.Time `protobuf:"-"` } +// DeepCopy returns a deep-copy of the Time value. The underlying time.Time +// type is effectively immutable in the time API, so it is safe to +// copy-by-assign, despite the presence of (unexported) Pointer fields. +func (t Time) DeepCopy() Time { + return t +} + +// String returns the representation of the time. +func (t Time) String() string { + return t.Time.String() +} + // NewTime returns a wrapped instance of the provided time func NewTime(time time.Time) Time { return Time{time} diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/time_proto.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/time_proto.go index 496d5d98..ba25e916 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/time_proto.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/time_proto.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/types.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/types.go index 11afcc2b..18882a21 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/types.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -35,13 +35,13 @@ type TypeMeta struct { // Servers may infer this from the endpoint the client submits requests to. // Cannot be updated. // In CamelCase. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` // APIVersion defines the versioned schema of this representation of an object. // Servers should convert recognized schemas to the latest internal value, and // may reject unrecognized values. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#resources + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#resources APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,2,opt,name=apiVersion"` } @@ -58,7 +58,7 @@ type ListMeta struct { // Value must be treated as opaque by clients and passed unmodified back to the server. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,2,opt,name=resourceVersion"` } @@ -75,12 +75,12 @@ type ExportOptions struct { type Status struct { TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Status of the operation. // One of: "Success" or "Failure". - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status string `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` // A human-readable description of the status of this operation. Message string `json:"message,omitempty" protobuf:"bytes,3,opt,name=message"` @@ -112,7 +112,7 @@ type StatusDetails struct { Group string `json:"group,omitempty" protobuf:"bytes,2,opt,name=group"` // The kind attribute of the resource associated with the status StatusReason. // On some operations may differ from the requested resource Kind. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds Kind string `json:"kind,omitempty" protobuf:"bytes,3,opt,name=kind"` // The Causes array includes more details associated with the StatusReason // failure. Not all StatusReasons may provide detailed causes. @@ -357,7 +357,7 @@ type ServerAddressByClientCIDR struct { } // GroupVersion contains the "group/version" and "version" string of a version. -// It is made a struct to keep extensiblity. +// It is made a struct to keep extensibility. type GroupVersionForDiscovery struct { // groupVersion specifies the API group and version in the form "group/version" GroupVersion string `json:"groupVersion" protobuf:"bytes,1,opt,name=groupVersion"` diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/types_swagger_doc_generated.go index 2cad1b53..e0355f51 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -90,7 +90,7 @@ func (ExportOptions) SwaggerDoc() map[string]string { } var map_GroupVersionForDiscovery = map[string]string{ - "": "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensiblity.", + "": "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.", "groupVersion": "groupVersion specifies the API group and version in the form \"group/version\"", "version": "version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.", } @@ -123,7 +123,7 @@ func (LabelSelectorRequirement) SwaggerDoc() map[string]string { var map_ListMeta = map[string]string{ "": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", "selfLink": "SelfLink is a URL representing this object. Populated by the system. Read-only.", - "resourceVersion": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency", + "resourceVersion": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency", } func (ListMeta) SwaggerDoc() map[string]string { @@ -159,8 +159,8 @@ func (ServerAddressByClientCIDR) SwaggerDoc() map[string]string { var map_Status = map[string]string{ "": "Status is a return value for calls that don't return other objects.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "status": "Status of the operation. One of: \"Success\" or \"Failure\". More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "status": "Status of the operation. One of: \"Success\" or \"Failure\". More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", "message": "A human-readable description of the status of this operation.", "reason": "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.", "details": "Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.", @@ -186,7 +186,7 @@ var map_StatusDetails = map[string]string{ "": "StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.", "name": "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", "group": "The group attribute of the resource associated with the status StatusReason.", - "kind": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", + "kind": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", "causes": "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", "retryAfterSeconds": "If specified, the time in seconds before the operation should be retried.", } @@ -197,8 +197,8 @@ func (StatusDetails) SwaggerDoc() map[string]string { var map_TypeMeta = map[string]string{ "": "TypeMeta describes an individual object in an API response or request with strings representing the type of the object and its API schema version. Structures that are versioned or persisted should inline TypeMeta.", - "kind": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "apiVersion": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#resources", + "kind": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "apiVersion": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#resources", } func (TypeMeta) SwaggerDoc() map[string]string { diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/validation/validation.go index 47852e3e..ecb968bd 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/validation/validation.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go index 08e4f688..318c6eeb 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/well_known_labels.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/unversioned/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/api/unversioned/zz_generated.deepcopy.go new file mode 100644 index 00000000..627bb817 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/unversioned/zz_generated.deepcopy.go @@ -0,0 +1,390 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package unversioned + +import ( + conversion "k8s.io/kubernetes/pkg/conversion" + time "time" +) + +func DeepCopy_unversioned_APIGroup(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIGroup) + out := out.(*APIGroup) + out.TypeMeta = in.TypeMeta + out.Name = in.Name + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]GroupVersionForDiscovery, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Versions = nil + } + out.PreferredVersion = in.PreferredVersion + if in.ServerAddressByClientCIDRs != nil { + in, out := &in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs + *out = make([]ServerAddressByClientCIDR, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ServerAddressByClientCIDRs = nil + } + return nil + } +} + +func DeepCopy_unversioned_APIGroupList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIGroupList) + out := out.(*APIGroupList) + out.TypeMeta = in.TypeMeta + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]APIGroup, len(*in)) + for i := range *in { + if err := DeepCopy_unversioned_APIGroup(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Groups = nil + } + return nil + } +} + +func DeepCopy_unversioned_APIResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIResource) + out := out.(*APIResource) + out.Name = in.Name + out.Namespaced = in.Namespaced + out.Kind = in.Kind + return nil + } +} + +func DeepCopy_unversioned_APIResourceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIResourceList) + out := out.(*APIResourceList) + out.TypeMeta = in.TypeMeta + out.GroupVersion = in.GroupVersion + if in.APIResources != nil { + in, out := &in.APIResources, &out.APIResources + *out = make([]APIResource, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.APIResources = nil + } + return nil + } +} + +func DeepCopy_unversioned_APIVersions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIVersions) + out := out.(*APIVersions) + out.TypeMeta = in.TypeMeta + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Versions = nil + } + if in.ServerAddressByClientCIDRs != nil { + in, out := &in.ServerAddressByClientCIDRs, &out.ServerAddressByClientCIDRs + *out = make([]ServerAddressByClientCIDR, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ServerAddressByClientCIDRs = nil + } + return nil + } +} + +func DeepCopy_unversioned_Duration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Duration) + out := out.(*Duration) + out.Duration = in.Duration + return nil + } +} + +func DeepCopy_unversioned_ExportOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExportOptions) + out := out.(*ExportOptions) + out.TypeMeta = in.TypeMeta + out.Export = in.Export + out.Exact = in.Exact + return nil + } +} + +func DeepCopy_unversioned_GroupKind(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupKind) + out := out.(*GroupKind) + out.Group = in.Group + out.Kind = in.Kind + return nil + } +} + +func DeepCopy_unversioned_GroupResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupResource) + out := out.(*GroupResource) + out.Group = in.Group + out.Resource = in.Resource + return nil + } +} + +func DeepCopy_unversioned_GroupVersion(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupVersion) + out := out.(*GroupVersion) + out.Group = in.Group + out.Version = in.Version + return nil + } +} + +func DeepCopy_unversioned_GroupVersionForDiscovery(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupVersionForDiscovery) + out := out.(*GroupVersionForDiscovery) + out.GroupVersion = in.GroupVersion + out.Version = in.Version + return nil + } +} + +func DeepCopy_unversioned_GroupVersionKind(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupVersionKind) + out := out.(*GroupVersionKind) + out.Group = in.Group + out.Version = in.Version + out.Kind = in.Kind + return nil + } +} + +func DeepCopy_unversioned_GroupVersionResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupVersionResource) + out := out.(*GroupVersionResource) + out.Group = in.Group + out.Version = in.Version + out.Resource = in.Resource + return nil + } +} + +func DeepCopy_unversioned_LabelSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelector) + out := out.(*LabelSelector) + if in.MatchLabels != nil { + in, out := &in.MatchLabels, &out.MatchLabels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.MatchLabels = nil + } + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]LabelSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_unversioned_LabelSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_unversioned_LabelSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelectorRequirement) + out := out.(*LabelSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} + +func DeepCopy_unversioned_ListMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ListMeta) + out := out.(*ListMeta) + out.SelfLink = in.SelfLink + out.ResourceVersion = in.ResourceVersion + return nil + } +} + +func DeepCopy_unversioned_Patch(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Patch) + out := out.(*Patch) + _ = in + _ = out + return nil + } +} + +func DeepCopy_unversioned_RootPaths(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RootPaths) + out := out.(*RootPaths) + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Paths = nil + } + return nil + } +} + +func DeepCopy_unversioned_ServerAddressByClientCIDR(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServerAddressByClientCIDR) + out := out.(*ServerAddressByClientCIDR) + out.ClientCIDR = in.ClientCIDR + out.ServerAddress = in.ServerAddress + return nil + } +} + +func DeepCopy_unversioned_Status(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Status) + out := out.(*Status) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + out.Status = in.Status + out.Message = in.Message + out.Reason = in.Reason + if in.Details != nil { + in, out := &in.Details, &out.Details + *out = new(StatusDetails) + if err := DeepCopy_unversioned_StatusDetails(*in, *out, c); err != nil { + return err + } + } else { + out.Details = nil + } + out.Code = in.Code + return nil + } +} + +func DeepCopy_unversioned_StatusCause(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*StatusCause) + out := out.(*StatusCause) + out.Type = in.Type + out.Message = in.Message + out.Field = in.Field + return nil + } +} + +func DeepCopy_unversioned_StatusDetails(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*StatusDetails) + out := out.(*StatusDetails) + out.Name = in.Name + out.Group = in.Group + out.Kind = in.Kind + if in.Causes != nil { + in, out := &in.Causes, &out.Causes + *out = make([]StatusCause, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Causes = nil + } + out.RetryAfterSeconds = in.RetryAfterSeconds + return nil + } +} + +func DeepCopy_unversioned_Time(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Time) + out := out.(*Time) + if newVal, err := c.DeepCopy(&in.Time); err != nil { + return err + } else { + out.Time = *newVal.(*time.Time) + } + return nil + } +} + +func DeepCopy_unversioned_Timestamp(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Timestamp) + out := out.(*Timestamp) + out.Seconds = in.Seconds + out.Nanos = in.Nanos + return nil + } +} + +func DeepCopy_unversioned_TypeMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TypeMeta) + out := out.(*TypeMeta) + out.Kind = in.Kind + out.APIVersion = in.APIVersion + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/util/group_version.go b/vendor/k8s.io/kubernetes/pkg/api/util/group_version.go index 0cee2502..fea2f17f 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/util/group_version.go +++ b/vendor/k8s.io/kubernetes/pkg/api/util/group_version.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go b/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go index 866323fa..0bbee72f 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,10 +19,14 @@ package v1 import ( "encoding/json" "fmt" + "reflect" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/conversion" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/validation/field" + "k8s.io/kubernetes/pkg/watch/versioned" ) const ( @@ -31,9 +35,111 @@ const ( // Value used to identify mirror pods from pre-v1.1 kubelet. mirrorAnnotationValue_1_0 = "mirror" + + // annotation key prefix used to identify non-convertible json paths. + NonConvertibleAnnotationPrefix = "kubernetes.io/non-convertible" ) -func addConversionFuncs(scheme *runtime.Scheme) { +// This is a "fast-path" that avoids reflection for common types. It focuses on the objects that are +// converted the most in the cluster. +// TODO: generate one of these for every external API group - this is to prove the impact +func addFastPathConversionFuncs(scheme *runtime.Scheme) error { + scheme.AddGenericConversionFunc(func(objA, objB interface{}, s conversion.Scope) (bool, error) { + switch a := objA.(type) { + case *Pod: + switch b := objB.(type) { + case *api.Pod: + return true, Convert_v1_Pod_To_api_Pod(a, b, s) + } + case *api.Pod: + switch b := objB.(type) { + case *Pod: + return true, Convert_api_Pod_To_v1_Pod(a, b, s) + } + + case *Event: + switch b := objB.(type) { + case *api.Event: + return true, Convert_v1_Event_To_api_Event(a, b, s) + } + case *api.Event: + switch b := objB.(type) { + case *Event: + return true, Convert_api_Event_To_v1_Event(a, b, s) + } + + case *ReplicationController: + switch b := objB.(type) { + case *api.ReplicationController: + return true, Convert_v1_ReplicationController_To_api_ReplicationController(a, b, s) + } + case *api.ReplicationController: + switch b := objB.(type) { + case *ReplicationController: + return true, Convert_api_ReplicationController_To_v1_ReplicationController(a, b, s) + } + + case *Node: + switch b := objB.(type) { + case *api.Node: + return true, Convert_v1_Node_To_api_Node(a, b, s) + } + case *api.Node: + switch b := objB.(type) { + case *Node: + return true, Convert_api_Node_To_v1_Node(a, b, s) + } + + case *Namespace: + switch b := objB.(type) { + case *api.Namespace: + return true, Convert_v1_Namespace_To_api_Namespace(a, b, s) + } + case *api.Namespace: + switch b := objB.(type) { + case *Namespace: + return true, Convert_api_Namespace_To_v1_Namespace(a, b, s) + } + + case *Service: + switch b := objB.(type) { + case *api.Service: + return true, Convert_v1_Service_To_api_Service(a, b, s) + } + case *api.Service: + switch b := objB.(type) { + case *Service: + return true, Convert_api_Service_To_v1_Service(a, b, s) + } + + case *Endpoints: + switch b := objB.(type) { + case *api.Endpoints: + return true, Convert_v1_Endpoints_To_api_Endpoints(a, b, s) + } + case *api.Endpoints: + switch b := objB.(type) { + case *Endpoints: + return true, Convert_api_Endpoints_To_v1_Endpoints(a, b, s) + } + + case *versioned.Event: + switch b := objB.(type) { + case *versioned.InternalEvent: + return true, versioned.Convert_versioned_Event_to_versioned_InternalEvent(a, b, s) + } + case *versioned.InternalEvent: + switch b := objB.(type) { + case *versioned.Event: + return true, versioned.Convert_versioned_InternalEvent_to_versioned_Event(a, b, s) + } + } + return false, nil + }) + return nil +} + +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( Convert_api_Pod_To_v1_Pod, @@ -43,8 +149,15 @@ func addConversionFuncs(scheme *runtime.Scheme) { Convert_v1_Pod_To_api_Pod, Convert_v1_PodSpec_To_api_PodSpec, Convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec, + Convert_v1_Secret_To_api_Secret, Convert_v1_ServiceSpec_To_api_ServiceSpec, Convert_v1_ResourceList_To_api_ResourceList, + Convert_v1_ReplicationController_to_extensions_ReplicaSet, + Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec, + Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus, + Convert_extensions_ReplicaSet_to_v1_ReplicationController, + Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec, + Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus, Convert_api_VolumeSource_To_v1_VolumeSource, Convert_v1_VolumeSource_To_api_VolumeSource, @@ -53,12 +166,11 @@ func addConversionFuncs(scheme *runtime.Scheme) { Convert_api_SecurityContextConstraints_To_v1_SecurityContextConstraints, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. - for _, kind := range []string{ + for _, k := range []string{ "Endpoints", "ResourceQuota", "PersistentVolumeClaim", @@ -66,7 +178,8 @@ func addConversionFuncs(scheme *runtime.Scheme) { "ServiceAccount", "ConfigMap", } { - err = api.Scheme.AddFieldLabelConversionFunc("v1", kind, + kind := k // don't close over range variables + err = scheme.AddFieldLabelConversionFunc("v1", kind, func(label, value string) (string, string, error) { switch label { case "metadata.namespace", @@ -75,25 +188,26 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label %q not supported for %q", label, kind) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } } // Add field conversion funcs. - err = api.Scheme.AddFieldLabelConversionFunc("v1", "Pod", + err = scheme.AddFieldLabelConversionFunc("v1", "Pod", func(label, value string) (string, string, error) { switch label { - case "metadata.name", - "metadata.namespace", + case "metadata.annotations", "metadata.labels", - "metadata.annotations", - "status.phase", - "status.podIP", + "metadata.name", + "metadata.namespace", "spec.nodeName", - "spec.restartPolicy": + "spec.restartPolicy", + "spec.serviceAccountName", + "status.phase", + "status.podIP": return label, value, nil // This is for backwards compatibility with old v1 clients which send spec.host case "spec.host": @@ -101,12 +215,12 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } - err = api.Scheme.AddFieldLabelConversionFunc("v1", "Node", + err = scheme.AddFieldLabelConversionFunc("v1", "Node", func(label, value string) (string, string, error) { switch label { case "metadata.name": @@ -116,12 +230,12 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } - err = api.Scheme.AddFieldLabelConversionFunc("v1", "ReplicationController", + err = scheme.AddFieldLabelConversionFunc("v1", "ReplicationController", func(label, value string) (string, string, error) { switch label { case "metadata.name", @@ -133,48 +247,9 @@ func addConversionFuncs(scheme *runtime.Scheme) { } }) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } - err = api.Scheme.AddFieldLabelConversionFunc("v1", "Event", - func(label, value string) (string, string, error) { - switch label { - case "involvedObject.kind", - "involvedObject.namespace", - "involvedObject.name", - "involvedObject.uid", - "involvedObject.apiVersion", - "involvedObject.resourceVersion", - "involvedObject.fieldPath", - "reason", - "source", - "type", - "metadata.namespace", - "metadata.name": - return label, value, nil - default: - return "", "", fmt.Errorf("field label not supported: %s", label) - } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } - err = api.Scheme.AddFieldLabelConversionFunc("v1", "Namespace", - func(label, value string) (string, string, error) { - switch label { - case "status.phase", - "metadata.name": - return label, value, nil - default: - return "", "", fmt.Errorf("field label not supported: %s", label) - } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } - err = api.Scheme.AddFieldLabelConversionFunc("v1", "PersistentVolume", + err = scheme.AddFieldLabelConversionFunc("v1", "PersistentVolume", func(label, value string) (string, string, error) { switch label { case "metadata.name": @@ -182,39 +257,124 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } - err = api.Scheme.AddFieldLabelConversionFunc("v1", "Secret", - func(label, value string) (string, string, error) { - switch label { - case "type", - "metadata.namespace", - "metadata.name": - return label, value, nil - default: - return "", "", fmt.Errorf("field label not supported: %s", label) - } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + if err := AddFieldLabelConversionsForEvent(scheme); err != nil { + return err } + if err := AddFieldLabelConversionsForNamespace(scheme); err != nil { + return err + } + if err := AddFieldLabelConversionsForSecret(scheme); err != nil { + return err + } + return nil +} + +func Convert_v1_ReplicationController_to_extensions_ReplicaSet(in *ReplicationController, out *extensions.ReplicaSet, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ReplicationController))(in) + } + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec(in *ReplicationControllerSpec, out *extensions.ReplicaSetSpec, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ReplicationControllerSpec))(in) + } + out.Replicas = *in.Replicas + if in.Selector != nil { + api.Convert_map_to_unversioned_LabelSelector(&in.Selector, out.Selector, s) + } + if in.Template != nil { + if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, &out.Template, s); err != nil { + return err + } + } + return nil +} + +func Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus(in *ReplicationControllerStatus, out *extensions.ReplicaSetStatus, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*ReplicationControllerStatus))(in) + } + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil +} + +func Convert_extensions_ReplicaSet_to_v1_ReplicationController(in *extensions.ReplicaSet, out *ReplicationController, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*extensions.ReplicaSet))(in) + } + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec(&in.Spec, &out.Spec, s); err != nil { + fieldErr, ok := err.(*field.Error) + if !ok { + return err + } + if out.Annotations == nil { + out.Annotations = make(map[string]string) + } + out.Annotations[NonConvertibleAnnotationPrefix+"/"+fieldErr.Field] = reflect.ValueOf(fieldErr.BadValue).String() + } + if err := Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_extensions_ReplicaSetSpec_to_v1_ReplicationControllerSpec(in *extensions.ReplicaSetSpec, out *ReplicationControllerSpec, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*extensions.ReplicaSetSpec))(in) + } + out.Replicas = new(int32) + *out.Replicas = in.Replicas + var invalidErr error + if in.Selector != nil { + invalidErr = api.Convert_unversioned_LabelSelector_to_map(in.Selector, &out.Selector, s) + } + out.Template = new(PodTemplateSpec) + if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, out.Template, s); err != nil { + return err + } + return invalidErr +} + +func Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus(in *extensions.ReplicaSetStatus, out *ReplicationControllerStatus, s conversion.Scope) error { + if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { + defaulting.(func(*extensions.ReplicaSetStatus))(in) + } + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil } func Convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(in *api.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error { out.Replicas = &in.Replicas out.Selector = in.Selector - //if in.TemplateRef != nil { - // out.TemplateRef = new(ObjectReference) - // if err := Convert_api_ObjectReference_To_v1_ObjectReference(in.TemplateRef, out.TemplateRef, s); err != nil { - // return err - // } - //} else { - // out.TemplateRef = nil - //} if in.Template != nil { out.Template = new(PodTemplateSpec) if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in.Template, out.Template, s); err != nil { @@ -229,15 +389,6 @@ func Convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(in *a func Convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *api.ReplicationControllerSpec, s conversion.Scope) error { out.Replicas = *in.Replicas out.Selector = in.Selector - - //if in.TemplateRef != nil { - // out.TemplateRef = new(api.ObjectReference) - // if err := Convert_v1_ObjectReference_To_api_ObjectReference(in.TemplateRef, out.TemplateRef, s); err != nil { - // return err - // } - //} else { - // out.TemplateRef = nil - //} if in.Template != nil { out.Template = new(api.PodTemplateSpec) if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in.Template, out.Template, s); err != nil { @@ -276,7 +427,7 @@ func Convert_api_PodStatusResult_To_v1_PodStatusResult(in *api.PodStatusResult, } func Convert_v1_PodStatusResult_To_api_PodStatusResult(in *PodStatusResult, out *api.PodStatusResult, s conversion.Scope) error { - // TODO: when we move init container to beta, remove these conversions + // TODO: sometime after we move init container to stable, remove these conversions if value, ok := in.Annotations[PodInitContainerStatusesAnnotationKey]; ok { var values []ContainerStatus if err := json.Unmarshal([]byte(value), &values); err != nil { @@ -310,7 +461,7 @@ func Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in *api.PodTemplateSpec, return err } - // TODO: when we move init container to beta, remove these conversions + // TODO: sometime after we move init container to stable, remove these conversions. if old := out.Annotations; old != nil { out.Annotations = make(map[string]string, len(old)) for k, v := range old { @@ -326,14 +477,22 @@ func Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in *api.PodTemplateSpec, return err } out.Annotations[PodInitContainersAnnotationKey] = string(value) + out.Annotations[PodInitContainersBetaAnnotationKey] = string(value) } else { delete(out.Annotations, PodInitContainersAnnotationKey) + delete(out.Annotations, PodInitContainersBetaAnnotationKey) } return nil } func Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out *api.PodTemplateSpec, s conversion.Scope) error { - // TODO: when we move init container to beta, remove these conversions + // TODO: sometime after we move init container to stable, remove these conversions + // If there is a beta annotation, copy to alpha key. + // See commit log for PR #31026 for why we do this. + if valueBeta, okBeta := in.Annotations[PodInitContainersBetaAnnotationKey]; okBeta { + in.Annotations[PodInitContainersAnnotationKey] = valueBeta + } + // Move the annotation to the internal repr. field if value, ok := in.Annotations[PodInitContainersAnnotationKey]; ok { var values []Container if err := json.Unmarshal([]byte(value), &values); err != nil { @@ -358,6 +517,7 @@ func Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out out.Annotations[k] = v } delete(out.Annotations, PodInitContainersAnnotationKey) + delete(out.Annotations, PodInitContainersBetaAnnotationKey) } return nil } @@ -365,135 +525,34 @@ func Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out // The following two PodSpec conversions are done here to support ServiceAccount // as an alias for ServiceAccountName. func Convert_api_PodSpec_To_v1_PodSpec(in *api.PodSpec, out *PodSpec, s conversion.Scope) error { - if in.Volumes != nil { - out.Volumes = make([]Volume, len(in.Volumes)) - for i := range in.Volumes { - if err := Convert_api_Volume_To_v1_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil { - return err - } - } - } else { - out.Volumes = nil - } - if in.InitContainers != nil { - out.InitContainers = make([]Container, len(in.InitContainers)) - for i := range in.InitContainers { - if err := Convert_api_Container_To_v1_Container(&in.InitContainers[i], &out.InitContainers[i], s); err != nil { - return err - } - } - } else { - out.InitContainers = nil - } - if in.Containers != nil { - out.Containers = make([]Container, len(in.Containers)) - for i := range in.Containers { - if err := Convert_api_Container_To_v1_Container(&in.Containers[i], &out.Containers[i], s); err != nil { - return err - } - } - } else { - out.Containers = nil + if err := autoConvert_api_PodSpec_To_v1_PodSpec(in, out, s); err != nil { + return err } - out.RestartPolicy = RestartPolicy(in.RestartPolicy) - out.TerminationGracePeriodSeconds = in.TerminationGracePeriodSeconds - out.ActiveDeadlineSeconds = in.ActiveDeadlineSeconds - out.DNSPolicy = DNSPolicy(in.DNSPolicy) - out.NodeSelector = in.NodeSelector - - out.ServiceAccountName = in.ServiceAccountName // DeprecatedServiceAccount is an alias for ServiceAccountName. out.DeprecatedServiceAccount = in.ServiceAccountName - out.NodeName = in.NodeName - if in.SecurityContext != nil { - out.SecurityContext = new(PodSecurityContext) - if err := Convert_api_PodSecurityContext_To_v1_PodSecurityContext(in.SecurityContext, out.SecurityContext, s); err != nil { - return err - } + if in.SecurityContext != nil { // the host namespace fields have to be handled here for backward compatibility // with v1.0.0 out.HostPID = in.SecurityContext.HostPID out.HostNetwork = in.SecurityContext.HostNetwork out.HostIPC = in.SecurityContext.HostIPC } - if in.ImagePullSecrets != nil { - out.ImagePullSecrets = make([]LocalObjectReference, len(in.ImagePullSecrets)) - for i := range in.ImagePullSecrets { - if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.ImagePullSecrets[i], &out.ImagePullSecrets[i], s); err != nil { - return err - } - } - } else { - out.ImagePullSecrets = nil - } - - out.Hostname = in.Hostname - out.Subdomain = in.Subdomain - - // carry conversion - out.DeprecatedHost = in.NodeName return nil } func Convert_v1_PodSpec_To_api_PodSpec(in *PodSpec, out *api.PodSpec, s conversion.Scope) error { - SetDefaults_PodSpec(in) - if in.Volumes != nil { - out.Volumes = make([]api.Volume, len(in.Volumes)) - for i := range in.Volumes { - if err := Convert_v1_Volume_To_api_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil { - return err - } - } - } else { - out.Volumes = nil + if err := autoConvert_v1_PodSpec_To_api_PodSpec(in, out, s); err != nil { + return err } - if in.InitContainers != nil { - out.InitContainers = make([]api.Container, len(in.InitContainers)) - for i := range in.InitContainers { - if err := Convert_v1_Container_To_api_Container(&in.InitContainers[i], &out.InitContainers[i], s); err != nil { - return err - } - } - } else { - out.InitContainers = nil - } - if in.Containers != nil { - out.Containers = make([]api.Container, len(in.Containers)) - for i := range in.Containers { - if err := Convert_v1_Container_To_api_Container(&in.Containers[i], &out.Containers[i], s); err != nil { - return err - } - } - } else { - out.Containers = nil - } - out.RestartPolicy = api.RestartPolicy(in.RestartPolicy) - out.TerminationGracePeriodSeconds = in.TerminationGracePeriodSeconds - out.ActiveDeadlineSeconds = in.ActiveDeadlineSeconds - out.DNSPolicy = api.DNSPolicy(in.DNSPolicy) - out.NodeSelector = in.NodeSelector + // We support DeprecatedServiceAccount as an alias for ServiceAccountName. // If both are specified, ServiceAccountName (the new field) wins. - out.ServiceAccountName = in.ServiceAccountName if in.ServiceAccountName == "" { out.ServiceAccountName = in.DeprecatedServiceAccount } - out.NodeName = in.NodeName - - // carry conversion - if in.NodeName == "" { - out.NodeName = in.DeprecatedHost - } - - if in.SecurityContext != nil { - out.SecurityContext = new(api.PodSecurityContext) - if err := Convert_v1_PodSecurityContext_To_api_PodSecurityContext(in.SecurityContext, out.SecurityContext, s); err != nil { - return err - } - } // the host namespace fields have to be handled specially for backward compatibility // with v1.0.0 @@ -503,18 +562,7 @@ func Convert_v1_PodSpec_To_api_PodSpec(in *PodSpec, out *api.PodSpec, s conversi out.SecurityContext.HostNetwork = in.HostNetwork out.SecurityContext.HostPID = in.HostPID out.SecurityContext.HostIPC = in.HostIPC - if in.ImagePullSecrets != nil { - out.ImagePullSecrets = make([]api.LocalObjectReference, len(in.ImagePullSecrets)) - for i := range in.ImagePullSecrets { - if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.ImagePullSecrets[i], &out.ImagePullSecrets[i], s); err != nil { - return err - } - } - } else { - out.ImagePullSecrets = nil - } - out.Hostname = in.Hostname - out.Subdomain = in.Subdomain + return nil } @@ -523,7 +571,7 @@ func Convert_api_Pod_To_v1_Pod(in *api.Pod, out *Pod, s conversion.Scope) error return err } - // TODO: when we move init container to beta, remove these conversions + // TODO: sometime after we move init container to stable, remove these conversions if len(out.Spec.InitContainers) > 0 || len(out.Status.InitContainerStatuses) > 0 { old := out.Annotations out.Annotations = make(map[string]string, len(old)) @@ -531,6 +579,7 @@ func Convert_api_Pod_To_v1_Pod(in *api.Pod, out *Pod, s conversion.Scope) error out.Annotations[k] = v } delete(out.Annotations, PodInitContainersAnnotationKey) + delete(out.Annotations, PodInitContainersBetaAnnotationKey) delete(out.Annotations, PodInitContainerStatusesAnnotationKey) } if len(out.Spec.InitContainers) > 0 { @@ -539,6 +588,7 @@ func Convert_api_Pod_To_v1_Pod(in *api.Pod, out *Pod, s conversion.Scope) error return err } out.Annotations[PodInitContainersAnnotationKey] = string(value) + out.Annotations[PodInitContainersBetaAnnotationKey] = string(value) } if len(out.Status.InitContainerStatuses) > 0 { value, err := json.Marshal(out.Status.InitContainerStatuses) @@ -563,7 +613,13 @@ func Convert_api_Pod_To_v1_Pod(in *api.Pod, out *Pod, s conversion.Scope) error } func Convert_v1_Pod_To_api_Pod(in *Pod, out *api.Pod, s conversion.Scope) error { - // TODO: when we move init container to beta, remove these conversions + // If there is a beta annotation, copy to alpha key. + // See commit log for PR #31026 for why we do this. + if valueBeta, okBeta := in.Annotations[PodInitContainersBetaAnnotationKey]; okBeta { + in.Annotations[PodInitContainersAnnotationKey] = valueBeta + } + // TODO: sometime after we move init container to stable, remove these conversions + // Move the annotation to the internal repr. field if value, ok := in.Annotations[PodInitContainersAnnotationKey]; ok { var values []Container if err := json.Unmarshal([]byte(value), &values); err != nil { @@ -601,6 +657,7 @@ func Convert_v1_Pod_To_api_Pod(in *Pod, out *api.Pod, s conversion.Scope) error out.Annotations[k] = v } delete(out.Annotations, PodInitContainersAnnotationKey) + delete(out.Annotations, PodInitContainersBetaAnnotationKey) delete(out.Annotations, PodInitContainerStatusesAnnotationKey) } return nil @@ -611,11 +668,25 @@ func Convert_api_ServiceSpec_To_v1_ServiceSpec(in *api.ServiceSpec, out *Service return err } // Publish both externalIPs and deprecatedPublicIPs fields in v1. - for _, ip := range in.ExternalIPs { - out.DeprecatedPublicIPs = append(out.DeprecatedPublicIPs, ip) + out.DeprecatedPublicIPs = in.ExternalIPs + return nil +} + +func Convert_v1_Secret_To_api_Secret(in *Secret, out *api.Secret, s conversion.Scope) error { + if err := autoConvert_v1_Secret_To_api_Secret(in, out, s); err != nil { + return err } - // Carry conversion - out.DeprecatedPortalIP = in.ClusterIP + + // StringData overwrites Data + if len(in.StringData) > 0 { + if out.Data == nil { + out.Data = map[string][]byte{} + } + for k, v := range in.StringData { + out.Data[k] = []byte(v) + } + } + return nil } @@ -681,6 +752,56 @@ func Convert_v1_ResourceList_To_api_ResourceList(in *ResourceList, out *api.Reso return nil } +func AddFieldLabelConversionsForEvent(scheme *runtime.Scheme) error { + return scheme.AddFieldLabelConversionFunc("v1", "Event", + func(label, value string) (string, string, error) { + switch label { + case "involvedObject.kind", + "involvedObject.namespace", + "involvedObject.name", + "involvedObject.uid", + "involvedObject.apiVersion", + "involvedObject.resourceVersion", + "involvedObject.fieldPath", + "reason", + "source", + "type", + "metadata.namespace", + "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }) +} + +func AddFieldLabelConversionsForNamespace(scheme *runtime.Scheme) error { + return scheme.AddFieldLabelConversionFunc("v1", "Namespace", + func(label, value string) (string, string, error) { + switch label { + case "status.phase", + "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }) +} + +func AddFieldLabelConversionsForSecret(scheme *runtime.Scheme) error { + return scheme.AddFieldLabelConversionFunc("v1", "Secret", + func(label, value string) (string, string, error) { + switch label { + case "type", + "metadata.namespace", + "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }) +} + // This will Convert our internal represantation of VolumeSource to its v1 representation // Used for keeping backwards compatibility for the Metadata field func Convert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out *VolumeSource, s conversion.Scope) error { @@ -690,12 +811,15 @@ func Convert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out *Volu // Metadata is a copy of DownwardAPI if out.DownwardAPI != nil { - out.Metadata = &DeprecatedDownwardAPIVolumeSource{} + out.Metadata = &DeprecatedDownwardAPIVolumeSource{ + DefaultMode: in.DownwardAPI.DefaultMode, + } for _, item := range out.DownwardAPI.Items { out.Metadata.Items = append(out.Metadata.Items, DeprecatedDownwardAPIVolumeFile{ Path: item.Path, FieldRef: item.FieldRef, ResourceFieldRef: item.ResourceFieldRef, + Mode: item.Mode, }) } } @@ -712,9 +836,15 @@ func Convert_v1_VolumeSource_To_api_VolumeSource(in *VolumeSource, out *api.Volu // Metadata overrides DownwardAPI if in.Metadata != nil { - out.DownwardAPI = &api.DownwardAPIVolumeSource{} + SetDefaults_DeprecatedDownwardAPIVolumeSource(in.Metadata) + out.DownwardAPI = &api.DownwardAPIVolumeSource{ + DefaultMode: in.Metadata.DefaultMode, + } for _, item := range in.Metadata.Items { - file := api.DownwardAPIVolumeFile{Path: item.Path} + file := api.DownwardAPIVolumeFile{ + Path: item.Path, + Mode: item.Mode, + } if item.FieldRef != nil { file.FieldRef = new(api.ObjectFieldSelector) if err := Convert_v1_ObjectFieldSelector_To_api_ObjectFieldSelector(item.FieldRef, file.FieldRef, s); err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/api/v1/deep_copy_generated.go deleted file mode 100644 index ea1f3013..00000000 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/deep_copy_generated.go +++ /dev/null @@ -1,3504 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1 - -import ( - api "k8s.io/kubernetes/pkg/api" - resource "k8s.io/kubernetes/pkg/api/resource" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - runtime "k8s.io/kubernetes/pkg/runtime" - types "k8s.io/kubernetes/pkg/types" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1_AWSElasticBlockStoreVolumeSource, - DeepCopy_v1_Affinity, - DeepCopy_v1_AttachedVolume, - DeepCopy_v1_AzureFileVolumeSource, - DeepCopy_v1_Binding, - DeepCopy_v1_Capabilities, - DeepCopy_v1_CephFSVolumeSource, - DeepCopy_v1_CinderVolumeSource, - DeepCopy_v1_ComponentCondition, - DeepCopy_v1_ComponentStatus, - DeepCopy_v1_ComponentStatusList, - DeepCopy_v1_ConfigMap, - DeepCopy_v1_ConfigMapKeySelector, - DeepCopy_v1_ConfigMapList, - DeepCopy_v1_ConfigMapVolumeSource, - DeepCopy_v1_Container, - DeepCopy_v1_ContainerImage, - DeepCopy_v1_ContainerPort, - DeepCopy_v1_ContainerState, - DeepCopy_v1_ContainerStateRunning, - DeepCopy_v1_ContainerStateTerminated, - DeepCopy_v1_ContainerStateWaiting, - DeepCopy_v1_ContainerStatus, - DeepCopy_v1_DaemonEndpoint, - DeepCopy_v1_DeleteOptions, - DeepCopy_v1_DeprecatedDownwardAPIVolumeFile, - DeepCopy_v1_DeprecatedDownwardAPIVolumeSource, - DeepCopy_v1_DownwardAPIVolumeFile, - DeepCopy_v1_DownwardAPIVolumeSource, - DeepCopy_v1_EmptyDirVolumeSource, - DeepCopy_v1_EndpointAddress, - DeepCopy_v1_EndpointPort, - DeepCopy_v1_EndpointSubset, - DeepCopy_v1_Endpoints, - DeepCopy_v1_EndpointsList, - DeepCopy_v1_EnvVar, - DeepCopy_v1_EnvVarSource, - DeepCopy_v1_Event, - DeepCopy_v1_EventList, - DeepCopy_v1_EventSource, - DeepCopy_v1_ExecAction, - DeepCopy_v1_ExportOptions, - DeepCopy_v1_FCVolumeSource, - DeepCopy_v1_FSGroupStrategyOptions, - DeepCopy_v1_FlexVolumeSource, - DeepCopy_v1_FlockerVolumeSource, - DeepCopy_v1_GCEPersistentDiskVolumeSource, - DeepCopy_v1_GitRepoVolumeSource, - DeepCopy_v1_GlusterfsVolumeSource, - DeepCopy_v1_HTTPGetAction, - DeepCopy_v1_HTTPHeader, - DeepCopy_v1_Handler, - DeepCopy_v1_HostPathVolumeSource, - DeepCopy_v1_IDRange, - DeepCopy_v1_ISCSIVolumeSource, - DeepCopy_v1_KeyToPath, - DeepCopy_v1_Lifecycle, - DeepCopy_v1_LimitRange, - DeepCopy_v1_LimitRangeItem, - DeepCopy_v1_LimitRangeList, - DeepCopy_v1_LimitRangeSpec, - DeepCopy_v1_List, - DeepCopy_v1_ListOptions, - DeepCopy_v1_LoadBalancerIngress, - DeepCopy_v1_LoadBalancerStatus, - DeepCopy_v1_LocalObjectReference, - DeepCopy_v1_NFSVolumeSource, - DeepCopy_v1_Namespace, - DeepCopy_v1_NamespaceList, - DeepCopy_v1_NamespaceSpec, - DeepCopy_v1_NamespaceStatus, - DeepCopy_v1_Node, - DeepCopy_v1_NodeAddress, - DeepCopy_v1_NodeAffinity, - DeepCopy_v1_NodeCondition, - DeepCopy_v1_NodeDaemonEndpoints, - DeepCopy_v1_NodeList, - DeepCopy_v1_NodeProxyOptions, - DeepCopy_v1_NodeSelector, - DeepCopy_v1_NodeSelectorRequirement, - DeepCopy_v1_NodeSelectorTerm, - DeepCopy_v1_NodeSpec, - DeepCopy_v1_NodeStatus, - DeepCopy_v1_NodeSystemInfo, - DeepCopy_v1_ObjectFieldSelector, - DeepCopy_v1_ObjectMeta, - DeepCopy_v1_ObjectReference, - DeepCopy_v1_OwnerReference, - DeepCopy_v1_PersistentVolume, - DeepCopy_v1_PersistentVolumeClaim, - DeepCopy_v1_PersistentVolumeClaimList, - DeepCopy_v1_PersistentVolumeClaimSpec, - DeepCopy_v1_PersistentVolumeClaimStatus, - DeepCopy_v1_PersistentVolumeClaimVolumeSource, - DeepCopy_v1_PersistentVolumeList, - DeepCopy_v1_PersistentVolumeSource, - DeepCopy_v1_PersistentVolumeSpec, - DeepCopy_v1_PersistentVolumeStatus, - DeepCopy_v1_Pod, - DeepCopy_v1_PodAffinity, - DeepCopy_v1_PodAffinityTerm, - DeepCopy_v1_PodAntiAffinity, - DeepCopy_v1_PodAttachOptions, - DeepCopy_v1_PodCondition, - DeepCopy_v1_PodExecOptions, - DeepCopy_v1_PodList, - DeepCopy_v1_PodLogOptions, - DeepCopy_v1_PodProxyOptions, - DeepCopy_v1_PodSecurityContext, - DeepCopy_v1_PodSpec, - DeepCopy_v1_PodStatus, - DeepCopy_v1_PodStatusResult, - DeepCopy_v1_PodTemplate, - DeepCopy_v1_PodTemplateList, - DeepCopy_v1_PodTemplateSpec, - DeepCopy_v1_Preconditions, - DeepCopy_v1_PreferredSchedulingTerm, - DeepCopy_v1_Probe, - DeepCopy_v1_RBDVolumeSource, - DeepCopy_v1_RangeAllocation, - DeepCopy_v1_ReplicationController, - DeepCopy_v1_ReplicationControllerList, - DeepCopy_v1_ReplicationControllerSpec, - DeepCopy_v1_ReplicationControllerStatus, - DeepCopy_v1_ResourceFieldSelector, - DeepCopy_v1_ResourceQuota, - DeepCopy_v1_ResourceQuotaList, - DeepCopy_v1_ResourceQuotaSpec, - DeepCopy_v1_ResourceQuotaStatus, - DeepCopy_v1_ResourceRequirements, - DeepCopy_v1_RunAsUserStrategyOptions, - DeepCopy_v1_SELinuxContextStrategyOptions, - DeepCopy_v1_SELinuxOptions, - DeepCopy_v1_Secret, - DeepCopy_v1_SecretKeySelector, - DeepCopy_v1_SecretList, - DeepCopy_v1_SecretVolumeSource, - DeepCopy_v1_SecurityContext, - DeepCopy_v1_SecurityContextConstraints, - DeepCopy_v1_SecurityContextConstraintsList, - DeepCopy_v1_SerializedReference, - DeepCopy_v1_Service, - DeepCopy_v1_ServiceAccount, - DeepCopy_v1_ServiceAccountList, - DeepCopy_v1_ServiceList, - DeepCopy_v1_ServicePort, - DeepCopy_v1_ServiceProxyOptions, - DeepCopy_v1_ServiceSpec, - DeepCopy_v1_ServiceStatus, - DeepCopy_v1_SupplementalGroupsStrategyOptions, - DeepCopy_v1_TCPSocketAction, - DeepCopy_v1_Taint, - DeepCopy_v1_Toleration, - DeepCopy_v1_Volume, - DeepCopy_v1_VolumeMount, - DeepCopy_v1_VolumeSource, - DeepCopy_v1_VsphereVirtualDiskVolumeSource, - DeepCopy_v1_WeightedPodAffinityTerm, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1_AWSElasticBlockStoreVolumeSource(in AWSElasticBlockStoreVolumeSource, out *AWSElasticBlockStoreVolumeSource, c *conversion.Cloner) error { - out.VolumeID = in.VolumeID - out.FSType = in.FSType - out.Partition = in.Partition - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_Affinity(in Affinity, out *Affinity, c *conversion.Cloner) error { - if in.NodeAffinity != nil { - in, out := in.NodeAffinity, &out.NodeAffinity - *out = new(NodeAffinity) - if err := DeepCopy_v1_NodeAffinity(*in, *out, c); err != nil { - return err - } - } else { - out.NodeAffinity = nil - } - if in.PodAffinity != nil { - in, out := in.PodAffinity, &out.PodAffinity - *out = new(PodAffinity) - if err := DeepCopy_v1_PodAffinity(*in, *out, c); err != nil { - return err - } - } else { - out.PodAffinity = nil - } - if in.PodAntiAffinity != nil { - in, out := in.PodAntiAffinity, &out.PodAntiAffinity - *out = new(PodAntiAffinity) - if err := DeepCopy_v1_PodAntiAffinity(*in, *out, c); err != nil { - return err - } - } else { - out.PodAntiAffinity = nil - } - return nil -} - -func DeepCopy_v1_AttachedVolume(in AttachedVolume, out *AttachedVolume, c *conversion.Cloner) error { - out.Name = in.Name - out.DevicePath = in.DevicePath - return nil -} - -func DeepCopy_v1_AzureFileVolumeSource(in AzureFileVolumeSource, out *AzureFileVolumeSource, c *conversion.Cloner) error { - out.SecretName = in.SecretName - out.ShareName = in.ShareName - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_Binding(in Binding, out *Binding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectReference(in.Target, &out.Target, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_Capabilities(in Capabilities, out *Capabilities, c *conversion.Cloner) error { - if in.Add != nil { - in, out := in.Add, &out.Add - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Add = nil - } - if in.Drop != nil { - in, out := in.Drop, &out.Drop - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Drop = nil - } - return nil -} - -func DeepCopy_v1_CephFSVolumeSource(in CephFSVolumeSource, out *CephFSVolumeSource, c *conversion.Cloner) error { - if in.Monitors != nil { - in, out := in.Monitors, &out.Monitors - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Monitors = nil - } - out.Path = in.Path - out.User = in.User - out.SecretFile = in.SecretFile - if in.SecretRef != nil { - in, out := in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - if err := DeepCopy_v1_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SecretRef = nil - } - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_CinderVolumeSource(in CinderVolumeSource, out *CinderVolumeSource, c *conversion.Cloner) error { - out.VolumeID = in.VolumeID - out.FSType = in.FSType - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_ComponentCondition(in ComponentCondition, out *ComponentCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - out.Message = in.Message - out.Error = in.Error - return nil -} - -func DeepCopy_v1_ComponentStatus(in ComponentStatus, out *ComponentStatus, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]ComponentCondition, len(in)) - for i := range in { - if err := DeepCopy_v1_ComponentCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - return nil -} - -func DeepCopy_v1_ComponentStatusList(in ComponentStatusList, out *ComponentStatusList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ComponentStatus, len(in)) - for i := range in { - if err := DeepCopy_v1_ComponentStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ConfigMap(in ConfigMap, out *ConfigMap, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Data != nil { - in, out := in.Data, &out.Data - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Data = nil - } - return nil -} - -func DeepCopy_v1_ConfigMapKeySelector(in ConfigMapKeySelector, out *ConfigMapKeySelector, c *conversion.Cloner) error { - if err := DeepCopy_v1_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil { - return err - } - out.Key = in.Key - return nil -} - -func DeepCopy_v1_ConfigMapList(in ConfigMapList, out *ConfigMapList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ConfigMap, len(in)) - for i := range in { - if err := DeepCopy_v1_ConfigMap(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ConfigMapVolumeSource(in ConfigMapVolumeSource, out *ConfigMapVolumeSource, c *conversion.Cloner) error { - if err := DeepCopy_v1_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]KeyToPath, len(in)) - for i := range in { - if err := DeepCopy_v1_KeyToPath(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_Container(in Container, out *Container, c *conversion.Cloner) error { - out.Name = in.Name - out.Image = in.Image - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - if in.Args != nil { - in, out := in.Args, &out.Args - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Args = nil - } - out.WorkingDir = in.WorkingDir - if in.Ports != nil { - in, out := in.Ports, &out.Ports - *out = make([]ContainerPort, len(in)) - for i := range in { - if err := DeepCopy_v1_ContainerPort(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ports = nil - } - if in.Env != nil { - in, out := in.Env, &out.Env - *out = make([]EnvVar, len(in)) - for i := range in { - if err := DeepCopy_v1_EnvVar(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Env = nil - } - if err := DeepCopy_v1_ResourceRequirements(in.Resources, &out.Resources, c); err != nil { - return err - } - if in.VolumeMounts != nil { - in, out := in.VolumeMounts, &out.VolumeMounts - *out = make([]VolumeMount, len(in)) - for i := range in { - if err := DeepCopy_v1_VolumeMount(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.VolumeMounts = nil - } - if in.LivenessProbe != nil { - in, out := in.LivenessProbe, &out.LivenessProbe - *out = new(Probe) - if err := DeepCopy_v1_Probe(*in, *out, c); err != nil { - return err - } - } else { - out.LivenessProbe = nil - } - if in.ReadinessProbe != nil { - in, out := in.ReadinessProbe, &out.ReadinessProbe - *out = new(Probe) - if err := DeepCopy_v1_Probe(*in, *out, c); err != nil { - return err - } - } else { - out.ReadinessProbe = nil - } - if in.Lifecycle != nil { - in, out := in.Lifecycle, &out.Lifecycle - *out = new(Lifecycle) - if err := DeepCopy_v1_Lifecycle(*in, *out, c); err != nil { - return err - } - } else { - out.Lifecycle = nil - } - out.TerminationMessagePath = in.TerminationMessagePath - out.ImagePullPolicy = in.ImagePullPolicy - if in.SecurityContext != nil { - in, out := in.SecurityContext, &out.SecurityContext - *out = new(SecurityContext) - if err := DeepCopy_v1_SecurityContext(*in, *out, c); err != nil { - return err - } - } else { - out.SecurityContext = nil - } - out.Stdin = in.Stdin - out.StdinOnce = in.StdinOnce - out.TTY = in.TTY - return nil -} - -func DeepCopy_v1_ContainerImage(in ContainerImage, out *ContainerImage, c *conversion.Cloner) error { - if in.Names != nil { - in, out := in.Names, &out.Names - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Names = nil - } - out.SizeBytes = in.SizeBytes - return nil -} - -func DeepCopy_v1_ContainerPort(in ContainerPort, out *ContainerPort, c *conversion.Cloner) error { - out.Name = in.Name - out.HostPort = in.HostPort - out.ContainerPort = in.ContainerPort - out.Protocol = in.Protocol - out.HostIP = in.HostIP - return nil -} - -func DeepCopy_v1_ContainerState(in ContainerState, out *ContainerState, c *conversion.Cloner) error { - if in.Waiting != nil { - in, out := in.Waiting, &out.Waiting - *out = new(ContainerStateWaiting) - if err := DeepCopy_v1_ContainerStateWaiting(*in, *out, c); err != nil { - return err - } - } else { - out.Waiting = nil - } - if in.Running != nil { - in, out := in.Running, &out.Running - *out = new(ContainerStateRunning) - if err := DeepCopy_v1_ContainerStateRunning(*in, *out, c); err != nil { - return err - } - } else { - out.Running = nil - } - if in.Terminated != nil { - in, out := in.Terminated, &out.Terminated - *out = new(ContainerStateTerminated) - if err := DeepCopy_v1_ContainerStateTerminated(*in, *out, c); err != nil { - return err - } - } else { - out.Terminated = nil - } - return nil -} - -func DeepCopy_v1_ContainerStateRunning(in ContainerStateRunning, out *ContainerStateRunning, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_Time(in.StartedAt, &out.StartedAt, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ContainerStateTerminated(in ContainerStateTerminated, out *ContainerStateTerminated, c *conversion.Cloner) error { - out.ExitCode = in.ExitCode - out.Signal = in.Signal - out.Reason = in.Reason - out.Message = in.Message - if err := unversioned.DeepCopy_unversioned_Time(in.StartedAt, &out.StartedAt, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.FinishedAt, &out.FinishedAt, c); err != nil { - return err - } - out.ContainerID = in.ContainerID - return nil -} - -func DeepCopy_v1_ContainerStateWaiting(in ContainerStateWaiting, out *ContainerStateWaiting, c *conversion.Cloner) error { - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_v1_ContainerStatus(in ContainerStatus, out *ContainerStatus, c *conversion.Cloner) error { - out.Name = in.Name - if err := DeepCopy_v1_ContainerState(in.State, &out.State, c); err != nil { - return err - } - if err := DeepCopy_v1_ContainerState(in.LastTerminationState, &out.LastTerminationState, c); err != nil { - return err - } - out.Ready = in.Ready - out.RestartCount = in.RestartCount - out.Image = in.Image - out.ImageID = in.ImageID - out.ContainerID = in.ContainerID - return nil -} - -func DeepCopy_v1_DaemonEndpoint(in DaemonEndpoint, out *DaemonEndpoint, c *conversion.Cloner) error { - out.Port = in.Port - return nil -} - -func DeepCopy_v1_DeleteOptions(in DeleteOptions, out *DeleteOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if in.GracePeriodSeconds != nil { - in, out := in.GracePeriodSeconds, &out.GracePeriodSeconds - *out = new(int64) - **out = *in - } else { - out.GracePeriodSeconds = nil - } - if in.Preconditions != nil { - in, out := in.Preconditions, &out.Preconditions - *out = new(Preconditions) - if err := DeepCopy_v1_Preconditions(*in, *out, c); err != nil { - return err - } - } else { - out.Preconditions = nil - } - if in.OrphanDependents != nil { - in, out := in.OrphanDependents, &out.OrphanDependents - *out = new(bool) - **out = *in - } else { - out.OrphanDependents = nil - } - return nil -} - -func DeepCopy_v1_DeprecatedDownwardAPIVolumeFile(in DeprecatedDownwardAPIVolumeFile, out *DeprecatedDownwardAPIVolumeFile, c *conversion.Cloner) error { - out.Path = in.Path - if in.FieldRef != nil { - in, out := in.FieldRef, &out.FieldRef - *out = new(ObjectFieldSelector) - if err := DeepCopy_v1_ObjectFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.FieldRef = nil - } - if in.ResourceFieldRef != nil { - in, out := in.ResourceFieldRef, &out.ResourceFieldRef - *out = new(ResourceFieldSelector) - if err := DeepCopy_v1_ResourceFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceFieldRef = nil - } - return nil -} - -func DeepCopy_v1_DeprecatedDownwardAPIVolumeSource(in DeprecatedDownwardAPIVolumeSource, out *DeprecatedDownwardAPIVolumeSource, c *conversion.Cloner) error { - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]DeprecatedDownwardAPIVolumeFile, len(in)) - for i := range in { - if err := DeepCopy_v1_DeprecatedDownwardAPIVolumeFile(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_DownwardAPIVolumeFile(in DownwardAPIVolumeFile, out *DownwardAPIVolumeFile, c *conversion.Cloner) error { - out.Path = in.Path - if in.FieldRef != nil { - in, out := in.FieldRef, &out.FieldRef - *out = new(ObjectFieldSelector) - if err := DeepCopy_v1_ObjectFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.FieldRef = nil - } - if in.ResourceFieldRef != nil { - in, out := in.ResourceFieldRef, &out.ResourceFieldRef - *out = new(ResourceFieldSelector) - if err := DeepCopy_v1_ResourceFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceFieldRef = nil - } - return nil -} - -func DeepCopy_v1_DownwardAPIVolumeSource(in DownwardAPIVolumeSource, out *DownwardAPIVolumeSource, c *conversion.Cloner) error { - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]DownwardAPIVolumeFile, len(in)) - for i := range in { - if err := DeepCopy_v1_DownwardAPIVolumeFile(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_EmptyDirVolumeSource(in EmptyDirVolumeSource, out *EmptyDirVolumeSource, c *conversion.Cloner) error { - out.Medium = in.Medium - return nil -} - -func DeepCopy_v1_EndpointAddress(in EndpointAddress, out *EndpointAddress, c *conversion.Cloner) error { - out.IP = in.IP - out.Hostname = in.Hostname - if in.TargetRef != nil { - in, out := in.TargetRef, &out.TargetRef - *out = new(ObjectReference) - if err := DeepCopy_v1_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.TargetRef = nil - } - return nil -} - -func DeepCopy_v1_EndpointPort(in EndpointPort, out *EndpointPort, c *conversion.Cloner) error { - out.Name = in.Name - out.Port = in.Port - out.Protocol = in.Protocol - return nil -} - -func DeepCopy_v1_EndpointSubset(in EndpointSubset, out *EndpointSubset, c *conversion.Cloner) error { - if in.Addresses != nil { - in, out := in.Addresses, &out.Addresses - *out = make([]EndpointAddress, len(in)) - for i := range in { - if err := DeepCopy_v1_EndpointAddress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Addresses = nil - } - if in.NotReadyAddresses != nil { - in, out := in.NotReadyAddresses, &out.NotReadyAddresses - *out = make([]EndpointAddress, len(in)) - for i := range in { - if err := DeepCopy_v1_EndpointAddress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.NotReadyAddresses = nil - } - if in.Ports != nil { - in, out := in.Ports, &out.Ports - *out = make([]EndpointPort, len(in)) - for i := range in { - if err := DeepCopy_v1_EndpointPort(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ports = nil - } - return nil -} - -func DeepCopy_v1_Endpoints(in Endpoints, out *Endpoints, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Subsets != nil { - in, out := in.Subsets, &out.Subsets - *out = make([]EndpointSubset, len(in)) - for i := range in { - if err := DeepCopy_v1_EndpointSubset(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Subsets = nil - } - return nil -} - -func DeepCopy_v1_EndpointsList(in EndpointsList, out *EndpointsList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Endpoints, len(in)) - for i := range in { - if err := DeepCopy_v1_Endpoints(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_EnvVar(in EnvVar, out *EnvVar, c *conversion.Cloner) error { - out.Name = in.Name - out.Value = in.Value - if in.ValueFrom != nil { - in, out := in.ValueFrom, &out.ValueFrom - *out = new(EnvVarSource) - if err := DeepCopy_v1_EnvVarSource(*in, *out, c); err != nil { - return err - } - } else { - out.ValueFrom = nil - } - return nil -} - -func DeepCopy_v1_EnvVarSource(in EnvVarSource, out *EnvVarSource, c *conversion.Cloner) error { - if in.FieldRef != nil { - in, out := in.FieldRef, &out.FieldRef - *out = new(ObjectFieldSelector) - if err := DeepCopy_v1_ObjectFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.FieldRef = nil - } - if in.ResourceFieldRef != nil { - in, out := in.ResourceFieldRef, &out.ResourceFieldRef - *out = new(ResourceFieldSelector) - if err := DeepCopy_v1_ResourceFieldSelector(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceFieldRef = nil - } - if in.ConfigMapKeyRef != nil { - in, out := in.ConfigMapKeyRef, &out.ConfigMapKeyRef - *out = new(ConfigMapKeySelector) - if err := DeepCopy_v1_ConfigMapKeySelector(*in, *out, c); err != nil { - return err - } - } else { - out.ConfigMapKeyRef = nil - } - if in.SecretKeyRef != nil { - in, out := in.SecretKeyRef, &out.SecretKeyRef - *out = new(SecretKeySelector) - if err := DeepCopy_v1_SecretKeySelector(*in, *out, c); err != nil { - return err - } - } else { - out.SecretKeyRef = nil - } - return nil -} - -func DeepCopy_v1_Event(in Event, out *Event, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectReference(in.InvolvedObject, &out.InvolvedObject, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - if err := DeepCopy_v1_EventSource(in.Source, &out.Source, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.FirstTimestamp, &out.FirstTimestamp, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTimestamp, &out.LastTimestamp, c); err != nil { - return err - } - out.Count = in.Count - out.Type = in.Type - return nil -} - -func DeepCopy_v1_EventList(in EventList, out *EventList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Event, len(in)) - for i := range in { - if err := DeepCopy_v1_Event(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_EventSource(in EventSource, out *EventSource, c *conversion.Cloner) error { - out.Component = in.Component - out.Host = in.Host - return nil -} - -func DeepCopy_v1_ExecAction(in ExecAction, out *ExecAction, c *conversion.Cloner) error { - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - return nil -} - -func DeepCopy_v1_ExportOptions(in ExportOptions, out *ExportOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Export = in.Export - out.Exact = in.Exact - return nil -} - -func DeepCopy_v1_FCVolumeSource(in FCVolumeSource, out *FCVolumeSource, c *conversion.Cloner) error { - if in.TargetWWNs != nil { - in, out := in.TargetWWNs, &out.TargetWWNs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.TargetWWNs = nil - } - if in.Lun != nil { - in, out := in.Lun, &out.Lun - *out = new(int32) - **out = *in - } else { - out.Lun = nil - } - out.FSType = in.FSType - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_FSGroupStrategyOptions(in FSGroupStrategyOptions, out *FSGroupStrategyOptions, c *conversion.Cloner) error { - out.Type = in.Type - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_v1_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_v1_FlexVolumeSource(in FlexVolumeSource, out *FlexVolumeSource, c *conversion.Cloner) error { - out.Driver = in.Driver - out.FSType = in.FSType - if in.SecretRef != nil { - in, out := in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - if err := DeepCopy_v1_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SecretRef = nil - } - out.ReadOnly = in.ReadOnly - if in.Options != nil { - in, out := in.Options, &out.Options - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Options = nil - } - return nil -} - -func DeepCopy_v1_FlockerVolumeSource(in FlockerVolumeSource, out *FlockerVolumeSource, c *conversion.Cloner) error { - out.DatasetName = in.DatasetName - return nil -} - -func DeepCopy_v1_GCEPersistentDiskVolumeSource(in GCEPersistentDiskVolumeSource, out *GCEPersistentDiskVolumeSource, c *conversion.Cloner) error { - out.PDName = in.PDName - out.FSType = in.FSType - out.Partition = in.Partition - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_GitRepoVolumeSource(in GitRepoVolumeSource, out *GitRepoVolumeSource, c *conversion.Cloner) error { - out.Repository = in.Repository - out.Revision = in.Revision - out.Directory = in.Directory - return nil -} - -func DeepCopy_v1_GlusterfsVolumeSource(in GlusterfsVolumeSource, out *GlusterfsVolumeSource, c *conversion.Cloner) error { - out.EndpointsName = in.EndpointsName - out.Path = in.Path - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_HTTPGetAction(in HTTPGetAction, out *HTTPGetAction, c *conversion.Cloner) error { - out.Path = in.Path - if err := intstr.DeepCopy_intstr_IntOrString(in.Port, &out.Port, c); err != nil { - return err - } - out.Host = in.Host - out.Scheme = in.Scheme - if in.HTTPHeaders != nil { - in, out := in.HTTPHeaders, &out.HTTPHeaders - *out = make([]HTTPHeader, len(in)) - for i := range in { - if err := DeepCopy_v1_HTTPHeader(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.HTTPHeaders = nil - } - return nil -} - -func DeepCopy_v1_HTTPHeader(in HTTPHeader, out *HTTPHeader, c *conversion.Cloner) error { - out.Name = in.Name - out.Value = in.Value - return nil -} - -func DeepCopy_v1_Handler(in Handler, out *Handler, c *conversion.Cloner) error { - if in.Exec != nil { - in, out := in.Exec, &out.Exec - *out = new(ExecAction) - if err := DeepCopy_v1_ExecAction(*in, *out, c); err != nil { - return err - } - } else { - out.Exec = nil - } - if in.HTTPGet != nil { - in, out := in.HTTPGet, &out.HTTPGet - *out = new(HTTPGetAction) - if err := DeepCopy_v1_HTTPGetAction(*in, *out, c); err != nil { - return err - } - } else { - out.HTTPGet = nil - } - if in.TCPSocket != nil { - in, out := in.TCPSocket, &out.TCPSocket - *out = new(TCPSocketAction) - if err := DeepCopy_v1_TCPSocketAction(*in, *out, c); err != nil { - return err - } - } else { - out.TCPSocket = nil - } - return nil -} - -func DeepCopy_v1_HostPathVolumeSource(in HostPathVolumeSource, out *HostPathVolumeSource, c *conversion.Cloner) error { - out.Path = in.Path - return nil -} - -func DeepCopy_v1_IDRange(in IDRange, out *IDRange, c *conversion.Cloner) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -func DeepCopy_v1_ISCSIVolumeSource(in ISCSIVolumeSource, out *ISCSIVolumeSource, c *conversion.Cloner) error { - out.TargetPortal = in.TargetPortal - out.IQN = in.IQN - out.Lun = in.Lun - out.ISCSIInterface = in.ISCSIInterface - out.FSType = in.FSType - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_KeyToPath(in KeyToPath, out *KeyToPath, c *conversion.Cloner) error { - out.Key = in.Key - out.Path = in.Path - return nil -} - -func DeepCopy_v1_Lifecycle(in Lifecycle, out *Lifecycle, c *conversion.Cloner) error { - if in.PostStart != nil { - in, out := in.PostStart, &out.PostStart - *out = new(Handler) - if err := DeepCopy_v1_Handler(*in, *out, c); err != nil { - return err - } - } else { - out.PostStart = nil - } - if in.PreStop != nil { - in, out := in.PreStop, &out.PreStop - *out = new(Handler) - if err := DeepCopy_v1_Handler(*in, *out, c); err != nil { - return err - } - } else { - out.PreStop = nil - } - return nil -} - -func DeepCopy_v1_LimitRange(in LimitRange, out *LimitRange, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_LimitRangeSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_LimitRangeItem(in LimitRangeItem, out *LimitRangeItem, c *conversion.Cloner) error { - out.Type = in.Type - if in.Max != nil { - in, out := in.Max, &out.Max - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Max = nil - } - if in.Min != nil { - in, out := in.Min, &out.Min - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Min = nil - } - if in.Default != nil { - in, out := in.Default, &out.Default - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Default = nil - } - if in.DefaultRequest != nil { - in, out := in.DefaultRequest, &out.DefaultRequest - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.DefaultRequest = nil - } - if in.MaxLimitRequestRatio != nil { - in, out := in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.MaxLimitRequestRatio = nil - } - return nil -} - -func DeepCopy_v1_LimitRangeList(in LimitRangeList, out *LimitRangeList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]LimitRange, len(in)) - for i := range in { - if err := DeepCopy_v1_LimitRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_LimitRangeSpec(in LimitRangeSpec, out *LimitRangeSpec, c *conversion.Cloner) error { - if in.Limits != nil { - in, out := in.Limits, &out.Limits - *out = make([]LimitRangeItem, len(in)) - for i := range in { - if err := DeepCopy_v1_LimitRangeItem(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Limits = nil - } - return nil -} - -func DeepCopy_v1_List(in List, out *List, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]runtime.RawExtension, len(in)) - for i := range in { - if err := runtime.DeepCopy_runtime_RawExtension(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ListOptions(in ListOptions, out *ListOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.LabelSelector = in.LabelSelector - out.FieldSelector = in.FieldSelector - out.Watch = in.Watch - out.ResourceVersion = in.ResourceVersion - if in.TimeoutSeconds != nil { - in, out := in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int64) - **out = *in - } else { - out.TimeoutSeconds = nil - } - return nil -} - -func DeepCopy_v1_LoadBalancerIngress(in LoadBalancerIngress, out *LoadBalancerIngress, c *conversion.Cloner) error { - out.IP = in.IP - out.Hostname = in.Hostname - return nil -} - -func DeepCopy_v1_LoadBalancerStatus(in LoadBalancerStatus, out *LoadBalancerStatus, c *conversion.Cloner) error { - if in.Ingress != nil { - in, out := in.Ingress, &out.Ingress - *out = make([]LoadBalancerIngress, len(in)) - for i := range in { - if err := DeepCopy_v1_LoadBalancerIngress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ingress = nil - } - return nil -} - -func DeepCopy_v1_LocalObjectReference(in LocalObjectReference, out *LocalObjectReference, c *conversion.Cloner) error { - out.Name = in.Name - return nil -} - -func DeepCopy_v1_NFSVolumeSource(in NFSVolumeSource, out *NFSVolumeSource, c *conversion.Cloner) error { - out.Server = in.Server - out.Path = in.Path - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_Namespace(in Namespace, out *Namespace, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_NamespaceSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_NamespaceStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_NamespaceList(in NamespaceList, out *NamespaceList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Namespace, len(in)) - for i := range in { - if err := DeepCopy_v1_Namespace(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_NamespaceSpec(in NamespaceSpec, out *NamespaceSpec, c *conversion.Cloner) error { - if in.Finalizers != nil { - in, out := in.Finalizers, &out.Finalizers - *out = make([]FinalizerName, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Finalizers = nil - } - return nil -} - -func DeepCopy_v1_NamespaceStatus(in NamespaceStatus, out *NamespaceStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - return nil -} - -func DeepCopy_v1_Node(in Node, out *Node, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_NodeSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_NodeStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_NodeAddress(in NodeAddress, out *NodeAddress, c *conversion.Cloner) error { - out.Type = in.Type - out.Address = in.Address - return nil -} - -func DeepCopy_v1_NodeAffinity(in NodeAffinity, out *NodeAffinity, c *conversion.Cloner) error { - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = new(NodeSelector) - if err := DeepCopy_v1_NodeSelector(*in, *out, c); err != nil { - return err - } - } else { - out.RequiredDuringSchedulingIgnoredDuringExecution = nil - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]PreferredSchedulingTerm, len(in)) - for i := range in { - if err := DeepCopy_v1_PreferredSchedulingTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.PreferredDuringSchedulingIgnoredDuringExecution = nil - } - return nil -} - -func DeepCopy_v1_NodeCondition(in NodeCondition, out *NodeCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastHeartbeatTime, &out.LastHeartbeatTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_v1_NodeDaemonEndpoints(in NodeDaemonEndpoints, out *NodeDaemonEndpoints, c *conversion.Cloner) error { - if err := DeepCopy_v1_DaemonEndpoint(in.KubeletEndpoint, &out.KubeletEndpoint, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_NodeList(in NodeList, out *NodeList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Node, len(in)) - for i := range in { - if err := DeepCopy_v1_Node(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_NodeProxyOptions(in NodeProxyOptions, out *NodeProxyOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Path = in.Path - return nil -} - -func DeepCopy_v1_NodeSelector(in NodeSelector, out *NodeSelector, c *conversion.Cloner) error { - if in.NodeSelectorTerms != nil { - in, out := in.NodeSelectorTerms, &out.NodeSelectorTerms - *out = make([]NodeSelectorTerm, len(in)) - for i := range in { - if err := DeepCopy_v1_NodeSelectorTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.NodeSelectorTerms = nil - } - return nil -} - -func DeepCopy_v1_NodeSelectorRequirement(in NodeSelectorRequirement, out *NodeSelectorRequirement, c *conversion.Cloner) error { - out.Key = in.Key - out.Operator = in.Operator - if in.Values != nil { - in, out := in.Values, &out.Values - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Values = nil - } - return nil -} - -func DeepCopy_v1_NodeSelectorTerm(in NodeSelectorTerm, out *NodeSelectorTerm, c *conversion.Cloner) error { - if in.MatchExpressions != nil { - in, out := in.MatchExpressions, &out.MatchExpressions - *out = make([]NodeSelectorRequirement, len(in)) - for i := range in { - if err := DeepCopy_v1_NodeSelectorRequirement(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.MatchExpressions = nil - } - return nil -} - -func DeepCopy_v1_NodeSpec(in NodeSpec, out *NodeSpec, c *conversion.Cloner) error { - out.PodCIDR = in.PodCIDR - out.ExternalID = in.ExternalID - out.ProviderID = in.ProviderID - out.Unschedulable = in.Unschedulable - return nil -} - -func DeepCopy_v1_NodeStatus(in NodeStatus, out *NodeStatus, c *conversion.Cloner) error { - if in.Capacity != nil { - in, out := in.Capacity, &out.Capacity - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Capacity = nil - } - if in.Allocatable != nil { - in, out := in.Allocatable, &out.Allocatable - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Allocatable = nil - } - out.Phase = in.Phase - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]NodeCondition, len(in)) - for i := range in { - if err := DeepCopy_v1_NodeCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if in.Addresses != nil { - in, out := in.Addresses, &out.Addresses - *out = make([]NodeAddress, len(in)) - for i := range in { - if err := DeepCopy_v1_NodeAddress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Addresses = nil - } - if err := DeepCopy_v1_NodeDaemonEndpoints(in.DaemonEndpoints, &out.DaemonEndpoints, c); err != nil { - return err - } - if err := DeepCopy_v1_NodeSystemInfo(in.NodeInfo, &out.NodeInfo, c); err != nil { - return err - } - if in.Images != nil { - in, out := in.Images, &out.Images - *out = make([]ContainerImage, len(in)) - for i := range in { - if err := DeepCopy_v1_ContainerImage(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Images = nil - } - if in.VolumesInUse != nil { - in, out := in.VolumesInUse, &out.VolumesInUse - *out = make([]UniqueVolumeName, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.VolumesInUse = nil - } - if in.VolumesAttached != nil { - in, out := in.VolumesAttached, &out.VolumesAttached - *out = make([]AttachedVolume, len(in)) - for i := range in { - if err := DeepCopy_v1_AttachedVolume(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.VolumesAttached = nil - } - return nil -} - -func DeepCopy_v1_NodeSystemInfo(in NodeSystemInfo, out *NodeSystemInfo, c *conversion.Cloner) error { - out.MachineID = in.MachineID - out.SystemUUID = in.SystemUUID - out.BootID = in.BootID - out.KernelVersion = in.KernelVersion - out.OSImage = in.OSImage - out.ContainerRuntimeVersion = in.ContainerRuntimeVersion - out.KubeletVersion = in.KubeletVersion - out.KubeProxyVersion = in.KubeProxyVersion - out.OperatingSystem = in.OperatingSystem - out.Architecture = in.Architecture - return nil -} - -func DeepCopy_v1_ObjectFieldSelector(in ObjectFieldSelector, out *ObjectFieldSelector, c *conversion.Cloner) error { - out.APIVersion = in.APIVersion - out.FieldPath = in.FieldPath - return nil -} - -func DeepCopy_v1_ObjectMeta(in ObjectMeta, out *ObjectMeta, c *conversion.Cloner) error { - out.Name = in.Name - out.GenerateName = in.GenerateName - out.Namespace = in.Namespace - out.SelfLink = in.SelfLink - out.UID = in.UID - out.ResourceVersion = in.ResourceVersion - out.Generation = in.Generation - if err := unversioned.DeepCopy_unversioned_Time(in.CreationTimestamp, &out.CreationTimestamp, c); err != nil { - return err - } - if in.DeletionTimestamp != nil { - in, out := in.DeletionTimestamp, &out.DeletionTimestamp - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.DeletionTimestamp = nil - } - if in.DeletionGracePeriodSeconds != nil { - in, out := in.DeletionGracePeriodSeconds, &out.DeletionGracePeriodSeconds - *out = new(int64) - **out = *in - } else { - out.DeletionGracePeriodSeconds = nil - } - if in.Labels != nil { - in, out := in.Labels, &out.Labels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Labels = nil - } - if in.Annotations != nil { - in, out := in.Annotations, &out.Annotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Annotations = nil - } - if in.OwnerReferences != nil { - in, out := in.OwnerReferences, &out.OwnerReferences - *out = make([]OwnerReference, len(in)) - for i := range in { - if err := DeepCopy_v1_OwnerReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.OwnerReferences = nil - } - if in.Finalizers != nil { - in, out := in.Finalizers, &out.Finalizers - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Finalizers = nil - } - return nil -} - -func DeepCopy_v1_ObjectReference(in ObjectReference, out *ObjectReference, c *conversion.Cloner) error { - out.Kind = in.Kind - out.Namespace = in.Namespace - out.Name = in.Name - out.UID = in.UID - out.APIVersion = in.APIVersion - out.ResourceVersion = in.ResourceVersion - out.FieldPath = in.FieldPath - return nil -} - -func DeepCopy_v1_OwnerReference(in OwnerReference, out *OwnerReference, c *conversion.Cloner) error { - out.APIVersion = in.APIVersion - out.Kind = in.Kind - out.Name = in.Name - out.UID = in.UID - if in.Controller != nil { - in, out := in.Controller, &out.Controller - *out = new(bool) - **out = *in - } else { - out.Controller = nil - } - return nil -} - -func DeepCopy_v1_PersistentVolume(in PersistentVolume, out *PersistentVolume, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_PersistentVolumeSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_PersistentVolumeStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_PersistentVolumeClaim(in PersistentVolumeClaim, out *PersistentVolumeClaim, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_PersistentVolumeClaimSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_PersistentVolumeClaimStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_PersistentVolumeClaimList(in PersistentVolumeClaimList, out *PersistentVolumeClaimList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PersistentVolumeClaim, len(in)) - for i := range in { - if err := DeepCopy_v1_PersistentVolumeClaim(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_PersistentVolumeClaimSpec(in PersistentVolumeClaimSpec, out *PersistentVolumeClaimSpec, c *conversion.Cloner) error { - if in.AccessModes != nil { - in, out := in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AccessModes = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := DeepCopy_v1_ResourceRequirements(in.Resources, &out.Resources, c); err != nil { - return err - } - out.VolumeName = in.VolumeName - return nil -} - -func DeepCopy_v1_PersistentVolumeClaimStatus(in PersistentVolumeClaimStatus, out *PersistentVolumeClaimStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - if in.AccessModes != nil { - in, out := in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AccessModes = nil - } - if in.Capacity != nil { - in, out := in.Capacity, &out.Capacity - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Capacity = nil - } - return nil -} - -func DeepCopy_v1_PersistentVolumeClaimVolumeSource(in PersistentVolumeClaimVolumeSource, out *PersistentVolumeClaimVolumeSource, c *conversion.Cloner) error { - out.ClaimName = in.ClaimName - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_PersistentVolumeList(in PersistentVolumeList, out *PersistentVolumeList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PersistentVolume, len(in)) - for i := range in { - if err := DeepCopy_v1_PersistentVolume(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_PersistentVolumeSource(in PersistentVolumeSource, out *PersistentVolumeSource, c *conversion.Cloner) error { - if in.GCEPersistentDisk != nil { - in, out := in.GCEPersistentDisk, &out.GCEPersistentDisk - *out = new(GCEPersistentDiskVolumeSource) - if err := DeepCopy_v1_GCEPersistentDiskVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.GCEPersistentDisk = nil - } - if in.AWSElasticBlockStore != nil { - in, out := in.AWSElasticBlockStore, &out.AWSElasticBlockStore - *out = new(AWSElasticBlockStoreVolumeSource) - if err := DeepCopy_v1_AWSElasticBlockStoreVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.AWSElasticBlockStore = nil - } - if in.HostPath != nil { - in, out := in.HostPath, &out.HostPath - *out = new(HostPathVolumeSource) - if err := DeepCopy_v1_HostPathVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.HostPath = nil - } - if in.Glusterfs != nil { - in, out := in.Glusterfs, &out.Glusterfs - *out = new(GlusterfsVolumeSource) - if err := DeepCopy_v1_GlusterfsVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Glusterfs = nil - } - if in.NFS != nil { - in, out := in.NFS, &out.NFS - *out = new(NFSVolumeSource) - if err := DeepCopy_v1_NFSVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.NFS = nil - } - if in.RBD != nil { - in, out := in.RBD, &out.RBD - *out = new(RBDVolumeSource) - if err := DeepCopy_v1_RBDVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.RBD = nil - } - if in.ISCSI != nil { - in, out := in.ISCSI, &out.ISCSI - *out = new(ISCSIVolumeSource) - if err := DeepCopy_v1_ISCSIVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.ISCSI = nil - } - if in.Cinder != nil { - in, out := in.Cinder, &out.Cinder - *out = new(CinderVolumeSource) - if err := DeepCopy_v1_CinderVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Cinder = nil - } - if in.CephFS != nil { - in, out := in.CephFS, &out.CephFS - *out = new(CephFSVolumeSource) - if err := DeepCopy_v1_CephFSVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.CephFS = nil - } - if in.FC != nil { - in, out := in.FC, &out.FC - *out = new(FCVolumeSource) - if err := DeepCopy_v1_FCVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.FC = nil - } - if in.Flocker != nil { - in, out := in.Flocker, &out.Flocker - *out = new(FlockerVolumeSource) - if err := DeepCopy_v1_FlockerVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Flocker = nil - } - if in.FlexVolume != nil { - in, out := in.FlexVolume, &out.FlexVolume - *out = new(FlexVolumeSource) - if err := DeepCopy_v1_FlexVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.FlexVolume = nil - } - if in.AzureFile != nil { - in, out := in.AzureFile, &out.AzureFile - *out = new(AzureFileVolumeSource) - if err := DeepCopy_v1_AzureFileVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.AzureFile = nil - } - if in.VsphereVolume != nil { - in, out := in.VsphereVolume, &out.VsphereVolume - *out = new(VsphereVirtualDiskVolumeSource) - if err := DeepCopy_v1_VsphereVirtualDiskVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.VsphereVolume = nil - } - return nil -} - -func DeepCopy_v1_PersistentVolumeSpec(in PersistentVolumeSpec, out *PersistentVolumeSpec, c *conversion.Cloner) error { - if in.Capacity != nil { - in, out := in.Capacity, &out.Capacity - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Capacity = nil - } - if err := DeepCopy_v1_PersistentVolumeSource(in.PersistentVolumeSource, &out.PersistentVolumeSource, c); err != nil { - return err - } - if in.AccessModes != nil { - in, out := in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AccessModes = nil - } - if in.ClaimRef != nil { - in, out := in.ClaimRef, &out.ClaimRef - *out = new(ObjectReference) - if err := DeepCopy_v1_ObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.ClaimRef = nil - } - out.PersistentVolumeReclaimPolicy = in.PersistentVolumeReclaimPolicy - return nil -} - -func DeepCopy_v1_PersistentVolumeStatus(in PersistentVolumeStatus, out *PersistentVolumeStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - out.Message = in.Message - out.Reason = in.Reason - return nil -} - -func DeepCopy_v1_Pod(in Pod, out *Pod, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_PodSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_PodStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_PodAffinity(in PodAffinity, out *PodAffinity, c *conversion.Cloner) error { - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = make([]PodAffinityTerm, len(in)) - for i := range in { - if err := DeepCopy_v1_PodAffinityTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.RequiredDuringSchedulingIgnoredDuringExecution = nil - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]WeightedPodAffinityTerm, len(in)) - for i := range in { - if err := DeepCopy_v1_WeightedPodAffinityTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.PreferredDuringSchedulingIgnoredDuringExecution = nil - } - return nil -} - -func DeepCopy_v1_PodAffinityTerm(in PodAffinityTerm, out *PodAffinityTerm, c *conversion.Cloner) error { - if in.LabelSelector != nil { - in, out := in.LabelSelector, &out.LabelSelector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.LabelSelector = nil - } - if in.Namespaces != nil { - in, out := in.Namespaces, &out.Namespaces - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Namespaces = nil - } - out.TopologyKey = in.TopologyKey - return nil -} - -func DeepCopy_v1_PodAntiAffinity(in PodAntiAffinity, out *PodAntiAffinity, c *conversion.Cloner) error { - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = make([]PodAffinityTerm, len(in)) - for i := range in { - if err := DeepCopy_v1_PodAffinityTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.RequiredDuringSchedulingIgnoredDuringExecution = nil - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]WeightedPodAffinityTerm, len(in)) - for i := range in { - if err := DeepCopy_v1_WeightedPodAffinityTerm(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.PreferredDuringSchedulingIgnoredDuringExecution = nil - } - return nil -} - -func DeepCopy_v1_PodAttachOptions(in PodAttachOptions, out *PodAttachOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Stdin = in.Stdin - out.Stdout = in.Stdout - out.Stderr = in.Stderr - out.TTY = in.TTY - out.Container = in.Container - return nil -} - -func DeepCopy_v1_PodCondition(in PodCondition, out *PodCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_v1_PodExecOptions(in PodExecOptions, out *PodExecOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Stdin = in.Stdin - out.Stdout = in.Stdout - out.Stderr = in.Stderr - out.TTY = in.TTY - out.Container = in.Container - if in.Command != nil { - in, out := in.Command, &out.Command - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Command = nil - } - return nil -} - -func DeepCopy_v1_PodList(in PodList, out *PodList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Pod, len(in)) - for i := range in { - if err := DeepCopy_v1_Pod(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_PodLogOptions(in PodLogOptions, out *PodLogOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Container = in.Container - out.Follow = in.Follow - out.Previous = in.Previous - if in.SinceSeconds != nil { - in, out := in.SinceSeconds, &out.SinceSeconds - *out = new(int64) - **out = *in - } else { - out.SinceSeconds = nil - } - if in.SinceTime != nil { - in, out := in.SinceTime, &out.SinceTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.SinceTime = nil - } - out.Timestamps = in.Timestamps - if in.TailLines != nil { - in, out := in.TailLines, &out.TailLines - *out = new(int64) - **out = *in - } else { - out.TailLines = nil - } - if in.LimitBytes != nil { - in, out := in.LimitBytes, &out.LimitBytes - *out = new(int64) - **out = *in - } else { - out.LimitBytes = nil - } - return nil -} - -func DeepCopy_v1_PodProxyOptions(in PodProxyOptions, out *PodProxyOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Path = in.Path - return nil -} - -func DeepCopy_v1_PodSecurityContext(in PodSecurityContext, out *PodSecurityContext, c *conversion.Cloner) error { - if in.SELinuxOptions != nil { - in, out := in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - if err := DeepCopy_v1_SELinuxOptions(*in, *out, c); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - if in.RunAsUser != nil { - in, out := in.RunAsUser, &out.RunAsUser - *out = new(int64) - **out = *in - } else { - out.RunAsUser = nil - } - if in.RunAsNonRoot != nil { - in, out := in.RunAsNonRoot, &out.RunAsNonRoot - *out = new(bool) - **out = *in - } else { - out.RunAsNonRoot = nil - } - if in.SupplementalGroups != nil { - in, out := in.SupplementalGroups, &out.SupplementalGroups - *out = make([]int64, len(in)) - copy(*out, in) - } else { - out.SupplementalGroups = nil - } - if in.FSGroup != nil { - in, out := in.FSGroup, &out.FSGroup - *out = new(int64) - **out = *in - } else { - out.FSGroup = nil - } - return nil -} - -func DeepCopy_v1_PodSpec(in PodSpec, out *PodSpec, c *conversion.Cloner) error { - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make([]Volume, len(in)) - for i := range in { - if err := DeepCopy_v1_Volume(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Volumes = nil - } - if in.InitContainers != nil { - in, out := in.InitContainers, &out.InitContainers - *out = make([]Container, len(in)) - for i := range in { - if err := DeepCopy_v1_Container(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.InitContainers = nil - } - if in.Containers != nil { - in, out := in.Containers, &out.Containers - *out = make([]Container, len(in)) - for i := range in { - if err := DeepCopy_v1_Container(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Containers = nil - } - out.RestartPolicy = in.RestartPolicy - if in.TerminationGracePeriodSeconds != nil { - in, out := in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds - *out = new(int64) - **out = *in - } else { - out.TerminationGracePeriodSeconds = nil - } - if in.ActiveDeadlineSeconds != nil { - in, out := in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.ActiveDeadlineSeconds = nil - } - out.DNSPolicy = in.DNSPolicy - if in.NodeSelector != nil { - in, out := in.NodeSelector, &out.NodeSelector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.NodeSelector = nil - } - out.DeprecatedHost = in.DeprecatedHost - out.ServiceAccountName = in.ServiceAccountName - out.DeprecatedServiceAccount = in.DeprecatedServiceAccount - out.NodeName = in.NodeName - out.HostNetwork = in.HostNetwork - out.HostPID = in.HostPID - out.HostIPC = in.HostIPC - if in.SecurityContext != nil { - in, out := in.SecurityContext, &out.SecurityContext - *out = new(PodSecurityContext) - if err := DeepCopy_v1_PodSecurityContext(*in, *out, c); err != nil { - return err - } - } else { - out.SecurityContext = nil - } - if in.ImagePullSecrets != nil { - in, out := in.ImagePullSecrets, &out.ImagePullSecrets - *out = make([]LocalObjectReference, len(in)) - for i := range in { - if err := DeepCopy_v1_LocalObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ImagePullSecrets = nil - } - out.Hostname = in.Hostname - out.Subdomain = in.Subdomain - return nil -} - -func DeepCopy_v1_PodStatus(in PodStatus, out *PodStatus, c *conversion.Cloner) error { - out.Phase = in.Phase - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]PodCondition, len(in)) - for i := range in { - if err := DeepCopy_v1_PodCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - out.Message = in.Message - out.Reason = in.Reason - out.HostIP = in.HostIP - out.PodIP = in.PodIP - if in.StartTime != nil { - in, out := in.StartTime, &out.StartTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.StartTime = nil - } - if in.InitContainerStatuses != nil { - in, out := in.InitContainerStatuses, &out.InitContainerStatuses - *out = make([]ContainerStatus, len(in)) - for i := range in { - if err := DeepCopy_v1_ContainerStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.InitContainerStatuses = nil - } - if in.ContainerStatuses != nil { - in, out := in.ContainerStatuses, &out.ContainerStatuses - *out = make([]ContainerStatus, len(in)) - for i := range in { - if err := DeepCopy_v1_ContainerStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ContainerStatuses = nil - } - return nil -} - -func DeepCopy_v1_PodStatusResult(in PodStatusResult, out *PodStatusResult, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_PodStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_PodTemplate(in PodTemplate, out *PodTemplate, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_PodTemplateList(in PodTemplateList, out *PodTemplateList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PodTemplate, len(in)) - for i := range in { - if err := DeepCopy_v1_PodTemplate(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_PodTemplateSpec(in PodTemplateSpec, out *PodTemplateSpec, c *conversion.Cloner) error { - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_PodSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_Preconditions(in Preconditions, out *Preconditions, c *conversion.Cloner) error { - if in.UID != nil { - in, out := in.UID, &out.UID - *out = new(types.UID) - **out = *in - } else { - out.UID = nil - } - return nil -} - -func DeepCopy_v1_PreferredSchedulingTerm(in PreferredSchedulingTerm, out *PreferredSchedulingTerm, c *conversion.Cloner) error { - out.Weight = in.Weight - if err := DeepCopy_v1_NodeSelectorTerm(in.Preference, &out.Preference, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_Probe(in Probe, out *Probe, c *conversion.Cloner) error { - if err := DeepCopy_v1_Handler(in.Handler, &out.Handler, c); err != nil { - return err - } - out.InitialDelaySeconds = in.InitialDelaySeconds - out.TimeoutSeconds = in.TimeoutSeconds - out.PeriodSeconds = in.PeriodSeconds - out.SuccessThreshold = in.SuccessThreshold - out.FailureThreshold = in.FailureThreshold - return nil -} - -func DeepCopy_v1_RBDVolumeSource(in RBDVolumeSource, out *RBDVolumeSource, c *conversion.Cloner) error { - if in.CephMonitors != nil { - in, out := in.CephMonitors, &out.CephMonitors - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.CephMonitors = nil - } - out.RBDImage = in.RBDImage - out.FSType = in.FSType - out.RBDPool = in.RBDPool - out.RadosUser = in.RadosUser - out.Keyring = in.Keyring - if in.SecretRef != nil { - in, out := in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - if err := DeepCopy_v1_LocalObjectReference(*in, *out, c); err != nil { - return err - } - } else { - out.SecretRef = nil - } - out.ReadOnly = in.ReadOnly - return nil -} - -func DeepCopy_v1_RangeAllocation(in RangeAllocation, out *RangeAllocation, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.Range = in.Range - if in.Data != nil { - in, out := in.Data, &out.Data - *out = make([]byte, len(in)) - copy(*out, in) - } else { - out.Data = nil - } - return nil -} - -func DeepCopy_v1_ReplicationController(in ReplicationController, out *ReplicationController, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ReplicationControllerSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_ReplicationControllerStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ReplicationControllerList(in ReplicationControllerList, out *ReplicationControllerList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ReplicationController, len(in)) - for i := range in { - if err := DeepCopy_v1_ReplicationController(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ReplicationControllerSpec(in ReplicationControllerSpec, out *ReplicationControllerSpec, c *conversion.Cloner) error { - if in.Replicas != nil { - in, out := in.Replicas, &out.Replicas - *out = new(int32) - **out = *in - } else { - out.Replicas = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Selector = nil - } - if in.Template != nil { - in, out := in.Template, &out.Template - *out = new(PodTemplateSpec) - if err := DeepCopy_v1_PodTemplateSpec(*in, *out, c); err != nil { - return err - } - } else { - out.Template = nil - } - return nil -} - -func DeepCopy_v1_ReplicationControllerStatus(in ReplicationControllerStatus, out *ReplicationControllerStatus, c *conversion.Cloner) error { - out.Replicas = in.Replicas - out.FullyLabeledReplicas = in.FullyLabeledReplicas - out.ObservedGeneration = in.ObservedGeneration - return nil -} - -func DeepCopy_v1_ResourceFieldSelector(in ResourceFieldSelector, out *ResourceFieldSelector, c *conversion.Cloner) error { - out.ContainerName = in.ContainerName - out.Resource = in.Resource - if err := resource.DeepCopy_resource_Quantity(in.Divisor, &out.Divisor, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ResourceQuota(in ResourceQuota, out *ResourceQuota, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ResourceQuotaSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_ResourceQuotaStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ResourceQuotaList(in ResourceQuotaList, out *ResourceQuotaList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ResourceQuota, len(in)) - for i := range in { - if err := DeepCopy_v1_ResourceQuota(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ResourceQuotaSpec(in ResourceQuotaSpec, out *ResourceQuotaSpec, c *conversion.Cloner) error { - if in.Hard != nil { - in, out := in.Hard, &out.Hard - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Hard = nil - } - if in.Scopes != nil { - in, out := in.Scopes, &out.Scopes - *out = make([]ResourceQuotaScope, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Scopes = nil - } - return nil -} - -func DeepCopy_v1_ResourceQuotaStatus(in ResourceQuotaStatus, out *ResourceQuotaStatus, c *conversion.Cloner) error { - if in.Hard != nil { - in, out := in.Hard, &out.Hard - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Hard = nil - } - if in.Used != nil { - in, out := in.Used, &out.Used - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Used = nil - } - return nil -} - -func DeepCopy_v1_ResourceRequirements(in ResourceRequirements, out *ResourceRequirements, c *conversion.Cloner) error { - if in.Limits != nil { - in, out := in.Limits, &out.Limits - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Limits = nil - } - if in.Requests != nil { - in, out := in.Requests, &out.Requests - *out = make(ResourceList) - for key, val := range in { - newVal := new(resource.Quantity) - if err := resource.DeepCopy_resource_Quantity(val, newVal, c); err != nil { - return err - } - (*out)[key] = *newVal - } - } else { - out.Requests = nil - } - return nil -} - -func DeepCopy_v1_RunAsUserStrategyOptions(in RunAsUserStrategyOptions, out *RunAsUserStrategyOptions, c *conversion.Cloner) error { - out.Type = in.Type - if in.UID != nil { - in, out := in.UID, &out.UID - *out = new(int64) - **out = *in - } else { - out.UID = nil - } - if in.UIDRangeMin != nil { - in, out := in.UIDRangeMin, &out.UIDRangeMin - *out = new(int64) - **out = *in - } else { - out.UIDRangeMin = nil - } - if in.UIDRangeMax != nil { - in, out := in.UIDRangeMax, &out.UIDRangeMax - *out = new(int64) - **out = *in - } else { - out.UIDRangeMax = nil - } - return nil -} - -func DeepCopy_v1_SELinuxContextStrategyOptions(in SELinuxContextStrategyOptions, out *SELinuxContextStrategyOptions, c *conversion.Cloner) error { - out.Type = in.Type - if in.SELinuxOptions != nil { - in, out := in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - if err := DeepCopy_v1_SELinuxOptions(*in, *out, c); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - return nil -} - -func DeepCopy_v1_SELinuxOptions(in SELinuxOptions, out *SELinuxOptions, c *conversion.Cloner) error { - out.User = in.User - out.Role = in.Role - out.Type = in.Type - out.Level = in.Level - return nil -} - -func DeepCopy_v1_Secret(in Secret, out *Secret, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Data != nil { - in, out := in.Data, &out.Data - *out = make(map[string][]byte) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.([]byte) - } - } - } else { - out.Data = nil - } - out.Type = in.Type - return nil -} - -func DeepCopy_v1_SecretKeySelector(in SecretKeySelector, out *SecretKeySelector, c *conversion.Cloner) error { - if err := DeepCopy_v1_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil { - return err - } - out.Key = in.Key - return nil -} - -func DeepCopy_v1_SecretList(in SecretList, out *SecretList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Secret, len(in)) - for i := range in { - if err := DeepCopy_v1_Secret(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_SecretVolumeSource(in SecretVolumeSource, out *SecretVolumeSource, c *conversion.Cloner) error { - out.SecretName = in.SecretName - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]KeyToPath, len(in)) - for i := range in { - if err := DeepCopy_v1_KeyToPath(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_SecurityContext(in SecurityContext, out *SecurityContext, c *conversion.Cloner) error { - if in.Capabilities != nil { - in, out := in.Capabilities, &out.Capabilities - *out = new(Capabilities) - if err := DeepCopy_v1_Capabilities(*in, *out, c); err != nil { - return err - } - } else { - out.Capabilities = nil - } - if in.Privileged != nil { - in, out := in.Privileged, &out.Privileged - *out = new(bool) - **out = *in - } else { - out.Privileged = nil - } - if in.SELinuxOptions != nil { - in, out := in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - if err := DeepCopy_v1_SELinuxOptions(*in, *out, c); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - if in.RunAsUser != nil { - in, out := in.RunAsUser, &out.RunAsUser - *out = new(int64) - **out = *in - } else { - out.RunAsUser = nil - } - if in.RunAsNonRoot != nil { - in, out := in.RunAsNonRoot, &out.RunAsNonRoot - *out = new(bool) - **out = *in - } else { - out.RunAsNonRoot = nil - } - if in.ReadOnlyRootFilesystem != nil { - in, out := in.ReadOnlyRootFilesystem, &out.ReadOnlyRootFilesystem - *out = new(bool) - **out = *in - } else { - out.ReadOnlyRootFilesystem = nil - } - return nil -} - -func DeepCopy_v1_SecurityContextConstraints(in SecurityContextConstraints, out *SecurityContextConstraints, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Priority != nil { - in, out := in.Priority, &out.Priority - *out = new(int32) - **out = *in - } else { - out.Priority = nil - } - out.AllowPrivilegedContainer = in.AllowPrivilegedContainer - if in.DefaultAddCapabilities != nil { - in, out := in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.DefaultAddCapabilities = nil - } - if in.RequiredDropCapabilities != nil { - in, out := in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.RequiredDropCapabilities = nil - } - if in.AllowedCapabilities != nil { - in, out := in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AllowedCapabilities = nil - } - out.AllowHostDirVolumePlugin = in.AllowHostDirVolumePlugin - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make([]FSType, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Volumes = nil - } - out.AllowHostNetwork = in.AllowHostNetwork - out.AllowHostPorts = in.AllowHostPorts - out.AllowHostPID = in.AllowHostPID - out.AllowHostIPC = in.AllowHostIPC - if err := DeepCopy_v1_SELinuxContextStrategyOptions(in.SELinuxContext, &out.SELinuxContext, c); err != nil { - return err - } - if err := DeepCopy_v1_RunAsUserStrategyOptions(in.RunAsUser, &out.RunAsUser, c); err != nil { - return err - } - if err := DeepCopy_v1_SupplementalGroupsStrategyOptions(in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { - return err - } - if err := DeepCopy_v1_FSGroupStrategyOptions(in.FSGroup, &out.FSGroup, c); err != nil { - return err - } - out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem - if in.Users != nil { - in, out := in.Users, &out.Users - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Users = nil - } - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Groups = nil - } - return nil -} - -func DeepCopy_v1_SecurityContextConstraintsList(in SecurityContextConstraintsList, out *SecurityContextConstraintsList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]SecurityContextConstraints, len(in)) - for i := range in { - if err := DeepCopy_v1_SecurityContextConstraints(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_SerializedReference(in SerializedReference, out *SerializedReference, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectReference(in.Reference, &out.Reference, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_Service(in Service, out *Service, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ServiceSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_ServiceStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ServiceAccount(in ServiceAccount, out *ServiceAccount, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Secrets != nil { - in, out := in.Secrets, &out.Secrets - *out = make([]ObjectReference, len(in)) - for i := range in { - if err := DeepCopy_v1_ObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Secrets = nil - } - if in.ImagePullSecrets != nil { - in, out := in.ImagePullSecrets, &out.ImagePullSecrets - *out = make([]LocalObjectReference, len(in)) - for i := range in { - if err := DeepCopy_v1_LocalObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.ImagePullSecrets = nil - } - return nil -} - -func DeepCopy_v1_ServiceAccountList(in ServiceAccountList, out *ServiceAccountList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ServiceAccount, len(in)) - for i := range in { - if err := DeepCopy_v1_ServiceAccount(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ServiceList(in ServiceList, out *ServiceList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Service, len(in)) - for i := range in { - if err := DeepCopy_v1_Service(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_ServicePort(in ServicePort, out *ServicePort, c *conversion.Cloner) error { - out.Name = in.Name - out.Protocol = in.Protocol - out.Port = in.Port - if err := intstr.DeepCopy_intstr_IntOrString(in.TargetPort, &out.TargetPort, c); err != nil { - return err - } - out.NodePort = in.NodePort - return nil -} - -func DeepCopy_v1_ServiceProxyOptions(in ServiceProxyOptions, out *ServiceProxyOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Path = in.Path - return nil -} - -func DeepCopy_v1_ServiceSpec(in ServiceSpec, out *ServiceSpec, c *conversion.Cloner) error { - if in.Ports != nil { - in, out := in.Ports, &out.Ports - *out = make([]ServicePort, len(in)) - for i := range in { - if err := DeepCopy_v1_ServicePort(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ports = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Selector = nil - } - out.DeprecatedPortalIP = in.DeprecatedPortalIP - out.ClusterIP = in.ClusterIP - out.Type = in.Type - if in.ExternalIPs != nil { - in, out := in.ExternalIPs, &out.ExternalIPs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.ExternalIPs = nil - } - if in.DeprecatedPublicIPs != nil { - in, out := in.DeprecatedPublicIPs, &out.DeprecatedPublicIPs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.DeprecatedPublicIPs = nil - } - out.SessionAffinity = in.SessionAffinity - out.LoadBalancerIP = in.LoadBalancerIP - if in.LoadBalancerSourceRanges != nil { - in, out := in.LoadBalancerSourceRanges, &out.LoadBalancerSourceRanges - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.LoadBalancerSourceRanges = nil - } - return nil -} - -func DeepCopy_v1_ServiceStatus(in ServiceStatus, out *ServiceStatus, c *conversion.Cloner) error { - if err := DeepCopy_v1_LoadBalancerStatus(in.LoadBalancer, &out.LoadBalancer, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_SupplementalGroupsStrategyOptions(in SupplementalGroupsStrategyOptions, out *SupplementalGroupsStrategyOptions, c *conversion.Cloner) error { - out.Type = in.Type - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_v1_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_v1_TCPSocketAction(in TCPSocketAction, out *TCPSocketAction, c *conversion.Cloner) error { - if err := intstr.DeepCopy_intstr_IntOrString(in.Port, &out.Port, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_Taint(in Taint, out *Taint, c *conversion.Cloner) error { - out.Key = in.Key - out.Value = in.Value - out.Effect = in.Effect - return nil -} - -func DeepCopy_v1_Toleration(in Toleration, out *Toleration, c *conversion.Cloner) error { - out.Key = in.Key - out.Operator = in.Operator - out.Value = in.Value - out.Effect = in.Effect - return nil -} - -func DeepCopy_v1_Volume(in Volume, out *Volume, c *conversion.Cloner) error { - out.Name = in.Name - if err := DeepCopy_v1_VolumeSource(in.VolumeSource, &out.VolumeSource, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_VolumeMount(in VolumeMount, out *VolumeMount, c *conversion.Cloner) error { - out.Name = in.Name - out.ReadOnly = in.ReadOnly - out.MountPath = in.MountPath - out.SubPath = in.SubPath - return nil -} - -func DeepCopy_v1_VolumeSource(in VolumeSource, out *VolumeSource, c *conversion.Cloner) error { - if in.HostPath != nil { - in, out := in.HostPath, &out.HostPath - *out = new(HostPathVolumeSource) - if err := DeepCopy_v1_HostPathVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.HostPath = nil - } - if in.EmptyDir != nil { - in, out := in.EmptyDir, &out.EmptyDir - *out = new(EmptyDirVolumeSource) - if err := DeepCopy_v1_EmptyDirVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.EmptyDir = nil - } - if in.GCEPersistentDisk != nil { - in, out := in.GCEPersistentDisk, &out.GCEPersistentDisk - *out = new(GCEPersistentDiskVolumeSource) - if err := DeepCopy_v1_GCEPersistentDiskVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.GCEPersistentDisk = nil - } - if in.AWSElasticBlockStore != nil { - in, out := in.AWSElasticBlockStore, &out.AWSElasticBlockStore - *out = new(AWSElasticBlockStoreVolumeSource) - if err := DeepCopy_v1_AWSElasticBlockStoreVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.AWSElasticBlockStore = nil - } - if in.GitRepo != nil { - in, out := in.GitRepo, &out.GitRepo - *out = new(GitRepoVolumeSource) - if err := DeepCopy_v1_GitRepoVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.GitRepo = nil - } - if in.Secret != nil { - in, out := in.Secret, &out.Secret - *out = new(SecretVolumeSource) - if err := DeepCopy_v1_SecretVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Secret = nil - } - if in.NFS != nil { - in, out := in.NFS, &out.NFS - *out = new(NFSVolumeSource) - if err := DeepCopy_v1_NFSVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.NFS = nil - } - if in.ISCSI != nil { - in, out := in.ISCSI, &out.ISCSI - *out = new(ISCSIVolumeSource) - if err := DeepCopy_v1_ISCSIVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.ISCSI = nil - } - if in.Glusterfs != nil { - in, out := in.Glusterfs, &out.Glusterfs - *out = new(GlusterfsVolumeSource) - if err := DeepCopy_v1_GlusterfsVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Glusterfs = nil - } - if in.PersistentVolumeClaim != nil { - in, out := in.PersistentVolumeClaim, &out.PersistentVolumeClaim - *out = new(PersistentVolumeClaimVolumeSource) - if err := DeepCopy_v1_PersistentVolumeClaimVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.PersistentVolumeClaim = nil - } - if in.RBD != nil { - in, out := in.RBD, &out.RBD - *out = new(RBDVolumeSource) - if err := DeepCopy_v1_RBDVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.RBD = nil - } - if in.FlexVolume != nil { - in, out := in.FlexVolume, &out.FlexVolume - *out = new(FlexVolumeSource) - if err := DeepCopy_v1_FlexVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.FlexVolume = nil - } - if in.Cinder != nil { - in, out := in.Cinder, &out.Cinder - *out = new(CinderVolumeSource) - if err := DeepCopy_v1_CinderVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Cinder = nil - } - if in.CephFS != nil { - in, out := in.CephFS, &out.CephFS - *out = new(CephFSVolumeSource) - if err := DeepCopy_v1_CephFSVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.CephFS = nil - } - if in.Flocker != nil { - in, out := in.Flocker, &out.Flocker - *out = new(FlockerVolumeSource) - if err := DeepCopy_v1_FlockerVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Flocker = nil - } - if in.DownwardAPI != nil { - in, out := in.DownwardAPI, &out.DownwardAPI - *out = new(DownwardAPIVolumeSource) - if err := DeepCopy_v1_DownwardAPIVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.DownwardAPI = nil - } - if in.FC != nil { - in, out := in.FC, &out.FC - *out = new(FCVolumeSource) - if err := DeepCopy_v1_FCVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.FC = nil - } - if in.AzureFile != nil { - in, out := in.AzureFile, &out.AzureFile - *out = new(AzureFileVolumeSource) - if err := DeepCopy_v1_AzureFileVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.AzureFile = nil - } - if in.ConfigMap != nil { - in, out := in.ConfigMap, &out.ConfigMap - *out = new(ConfigMapVolumeSource) - if err := DeepCopy_v1_ConfigMapVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.ConfigMap = nil - } - if in.VsphereVolume != nil { - in, out := in.VsphereVolume, &out.VsphereVolume - *out = new(VsphereVirtualDiskVolumeSource) - if err := DeepCopy_v1_VsphereVirtualDiskVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.VsphereVolume = nil - } - if in.Metadata != nil { - in, out := in.Metadata, &out.Metadata - *out = new(DeprecatedDownwardAPIVolumeSource) - if err := DeepCopy_v1_DeprecatedDownwardAPIVolumeSource(*in, *out, c); err != nil { - return err - } - } else { - out.Metadata = nil - } - return nil -} - -func DeepCopy_v1_VsphereVirtualDiskVolumeSource(in VsphereVirtualDiskVolumeSource, out *VsphereVirtualDiskVolumeSource, c *conversion.Cloner) error { - out.VolumePath = in.VolumePath - out.FSType = in.FSType - return nil -} - -func DeepCopy_v1_WeightedPodAffinityTerm(in WeightedPodAffinityTerm, out *WeightedPodAffinityTerm, c *conversion.Cloner) error { - out.Weight = in.Weight - if err := DeepCopy_v1_PodAffinityTerm(in.PodAffinityTerm, &out.PodAffinityTerm, c); err != nil { - return err - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/defaults.go b/vendor/k8s.io/kubernetes/pkg/api/v1/defaults.go index 89026c21..166739b6 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,20 +17,17 @@ limitations under the License. package v1 import ( - "strings" - "k8s.io/kubernetes/pkg/runtime" sccutil "k8s.io/kubernetes/pkg/securitycontextconstraints/util" - "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/intstr" "k8s.io/kubernetes/pkg/util/parsers" "k8s.io/kubernetes/pkg/util/sets" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_PodExecOptions, SetDefaults_PodAttachOptions, SetDefaults_ReplicationController, @@ -41,6 +38,10 @@ func addDefaultingFuncs(scheme *runtime.Scheme) { SetDefaults_Pod, SetDefaults_PodSpec, SetDefaults_Probe, + SetDefaults_SecretVolumeSource, + SetDefaults_ConfigMapVolumeSource, + SetDefaults_DownwardAPIVolumeSource, + SetDefaults_DeprecatedDownwardAPIVolumeSource, SetDefaults_Secret, SetDefaults_PersistentVolume, SetDefaults_PersistentVolumeClaim, @@ -55,31 +56,9 @@ func addDefaultingFuncs(scheme *runtime.Scheme) { SetDefaults_ConfigMap, SetDefaults_RBDVolumeSource, SetDefaults_SCC, - SetDefaults_ServicePort, - SetDefaults_EndpointPort, ) } -func SetDefaults_ServicePort(obj *ServicePort) { - // Carry conversion to make port case valid - switch strings.ToUpper(string(obj.Protocol)) { - case string(ProtocolTCP): - obj.Protocol = ProtocolTCP - case string(ProtocolUDP): - obj.Protocol = ProtocolUDP - } -} - -func SetDefaults_EndpointPort(obj *EndpointPort) { - // Carry conversion to make port case valid - switch strings.ToUpper(string(obj.Protocol)) { - case string(ProtocolTCP): - obj.Protocol = ProtocolTCP - case string(ProtocolUDP): - obj.Protocol = ProtocolUDP - } -} - func SetDefaults_PodExecOptions(obj *PodExecOptions) { obj.Stdout = true obj.Stderr = true @@ -118,13 +97,6 @@ func SetDefaults_ContainerPort(obj *ContainerPort) { if obj.Protocol == "" { obj.Protocol = ProtocolTCP } - // Carry conversion to make port case valid - switch strings.ToUpper(string(obj.Protocol)) { - case string(ProtocolTCP): - obj.Protocol = ProtocolTCP - case string(ProtocolUDP): - obj.Protocol = ProtocolUDP - } } func SetDefaults_Container(obj *Container) { if obj.ImagePullPolicy == "" { @@ -158,10 +130,6 @@ func SetDefaults_ServiceSpec(obj *ServiceSpec) { if sp.TargetPort == intstr.FromInt(0) || sp.TargetPort == intstr.FromString("") { sp.TargetPort = intstr.FromInt(int(sp.Port)) } - //Carry conversion - if len(obj.ClusterIP) == 0 && len(obj.DeprecatedPortalIP) > 0 { - obj.ClusterIP = obj.DeprecatedPortalIP - } } } func SetDefaults_Pod(obj *Pod) { @@ -195,14 +163,6 @@ func SetDefaults_PodSpec(obj *PodSpec) { if obj.SecurityContext == nil { obj.SecurityContext = &PodSecurityContext{} } - // Carry migration from serviceAccount to serviceAccountName - if len(obj.ServiceAccountName) == 0 && len(obj.DeprecatedServiceAccount) > 0 { - obj.ServiceAccountName = obj.DeprecatedServiceAccount - } - // Carry migration from host to nodeName - if len(obj.NodeName) == 0 && len(obj.DeprecatedHost) > 0 { - obj.NodeName = obj.DeprecatedHost - } if obj.TerminationGracePeriodSeconds == nil { period := int64(DefaultTerminationGracePeriodSeconds) obj.TerminationGracePeriodSeconds = &period @@ -222,6 +182,32 @@ func SetDefaults_Probe(obj *Probe) { obj.FailureThreshold = 3 } } +func SetDefaults_SecretVolumeSource(obj *SecretVolumeSource) { + if obj.DefaultMode == nil { + perm := int32(SecretVolumeSourceDefaultMode) + obj.DefaultMode = &perm + } +} +func SetDefaults_ConfigMapVolumeSource(obj *ConfigMapVolumeSource) { + if obj.DefaultMode == nil { + perm := int32(ConfigMapVolumeSourceDefaultMode) + obj.DefaultMode = &perm + } +} +func SetDefaults_DownwardAPIVolumeSource(obj *DownwardAPIVolumeSource) { + if obj.DefaultMode == nil { + perm := int32(DownwardAPIVolumeSourceDefaultMode) + obj.DefaultMode = &perm + } +} + +func SetDefaults_DeprecatedDownwardAPIVolumeSource(obj *DeprecatedDownwardAPIVolumeSource) { + if obj.DefaultMode == nil { + perm := int32(DownwardAPIVolumeSourceDefaultMode) + obj.DefaultMode = &perm + } +} + func SetDefaults_Secret(obj *Secret) { if obj.Type == "" { obj.Type = SecretTypeOpaque @@ -245,6 +231,20 @@ func SetDefaults_ISCSIVolumeSource(obj *ISCSIVolumeSource) { obj.ISCSIInterface = "default" } } +func SetDefaults_AzureDiskVolumeSource(obj *AzureDiskVolumeSource) { + if obj.CachingMode == nil { + obj.CachingMode = new(AzureDataDiskCachingMode) + *obj.CachingMode = AzureDataDiskCachingNone + } + if obj.FSType == nil { + obj.FSType = new(string) + *obj.FSType = "ext4" + } + if obj.ReadOnly == nil { + obj.ReadOnly = new(bool) + *obj.ReadOnly = false + } +} func SetDefaults_Endpoints(obj *Endpoints) { for i := range obj.Subsets { ss := &obj.Subsets[i] diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/doc.go b/vendor/k8s.io/kubernetes/pkg/api/v1/doc.go index bf85d77a..8849ee1c 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/api + // Package v1 is the v1 version of the API. -// +genconversion=true package v1 diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/api/v1/generated.pb.go index 841f0f94..b6b18c0c 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,6 +28,8 @@ limitations under the License. AWSElasticBlockStoreVolumeSource Affinity AttachedVolume + AvoidPods + AzureDiskVolumeSource AzureFileVolumeSource Binding Capabilities @@ -134,6 +136,7 @@ limitations under the License. PodLogOptions PodProxyOptions PodSecurityContext + PodSignature PodSpec PodStatus PodStatusResult @@ -141,8 +144,10 @@ limitations under the License. PodTemplateList PodTemplateSpec Preconditions + PreferAvoidPodsEntry PreferredSchedulingTerm Probe + QuobyteVolumeSource RBDVolumeSource RangeAllocation ReplicationController @@ -196,6 +201,10 @@ import k8s_io_kubernetes_pkg_runtime "k8s.io/kubernetes/pkg/runtime" import k8s_io_kubernetes_pkg_types "k8s.io/kubernetes/pkg/types" +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -203,642 +212,712 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *AWSElasticBlockStoreVolumeSource) Reset() { *m = AWSElasticBlockStoreVolumeSource{} } -func (m *AWSElasticBlockStoreVolumeSource) String() string { return proto.CompactTextString(m) } -func (*AWSElasticBlockStoreVolumeSource) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *AWSElasticBlockStoreVolumeSource) Reset() { *m = AWSElasticBlockStoreVolumeSource{} } +func (*AWSElasticBlockStoreVolumeSource) ProtoMessage() {} +func (*AWSElasticBlockStoreVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{0} +} + +func (m *Affinity) Reset() { *m = Affinity{} } +func (*Affinity) ProtoMessage() {} +func (*Affinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *AttachedVolume) Reset() { *m = AttachedVolume{} } +func (*AttachedVolume) ProtoMessage() {} +func (*AttachedVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *AvoidPods) Reset() { *m = AvoidPods{} } +func (*AvoidPods) ProtoMessage() {} +func (*AvoidPods) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *AzureDiskVolumeSource) Reset() { *m = AzureDiskVolumeSource{} } +func (*AzureDiskVolumeSource) ProtoMessage() {} +func (*AzureDiskVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *AzureFileVolumeSource) Reset() { *m = AzureFileVolumeSource{} } +func (*AzureFileVolumeSource) ProtoMessage() {} +func (*AzureFileVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } + +func (m *Binding) Reset() { *m = Binding{} } +func (*Binding) ProtoMessage() {} +func (*Binding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } + +func (m *Capabilities) Reset() { *m = Capabilities{} } +func (*Capabilities) ProtoMessage() {} +func (*Capabilities) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } + +func (m *CephFSVolumeSource) Reset() { *m = CephFSVolumeSource{} } +func (*CephFSVolumeSource) ProtoMessage() {} +func (*CephFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } + +func (m *CinderVolumeSource) Reset() { *m = CinderVolumeSource{} } +func (*CinderVolumeSource) ProtoMessage() {} +func (*CinderVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } + +func (m *ComponentCondition) Reset() { *m = ComponentCondition{} } +func (*ComponentCondition) ProtoMessage() {} +func (*ComponentCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } + +func (m *ComponentStatus) Reset() { *m = ComponentStatus{} } +func (*ComponentStatus) ProtoMessage() {} +func (*ComponentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } + +func (m *ComponentStatusList) Reset() { *m = ComponentStatusList{} } +func (*ComponentStatusList) ProtoMessage() {} +func (*ComponentStatusList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } + +func (m *ConfigMap) Reset() { *m = ConfigMap{} } +func (*ConfigMap) ProtoMessage() {} +func (*ConfigMap) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } + +func (m *ConfigMapKeySelector) Reset() { *m = ConfigMapKeySelector{} } +func (*ConfigMapKeySelector) ProtoMessage() {} +func (*ConfigMapKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } + +func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } +func (*ConfigMapList) ProtoMessage() {} +func (*ConfigMapList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } + +func (m *ConfigMapVolumeSource) Reset() { *m = ConfigMapVolumeSource{} } +func (*ConfigMapVolumeSource) ProtoMessage() {} +func (*ConfigMapVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } + +func (m *Container) Reset() { *m = Container{} } +func (*Container) ProtoMessage() {} +func (*Container) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } + +func (m *ContainerImage) Reset() { *m = ContainerImage{} } +func (*ContainerImage) ProtoMessage() {} +func (*ContainerImage) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } + +func (m *ContainerPort) Reset() { *m = ContainerPort{} } +func (*ContainerPort) ProtoMessage() {} +func (*ContainerPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } + +func (m *ContainerState) Reset() { *m = ContainerState{} } +func (*ContainerState) ProtoMessage() {} +func (*ContainerState) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{20} } + +func (m *ContainerStateRunning) Reset() { *m = ContainerStateRunning{} } +func (*ContainerStateRunning) ProtoMessage() {} +func (*ContainerStateRunning) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{21} } + +func (m *ContainerStateTerminated) Reset() { *m = ContainerStateTerminated{} } +func (*ContainerStateTerminated) ProtoMessage() {} +func (*ContainerStateTerminated) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{22} +} + +func (m *ContainerStateWaiting) Reset() { *m = ContainerStateWaiting{} } +func (*ContainerStateWaiting) ProtoMessage() {} +func (*ContainerStateWaiting) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{23} } + +func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } +func (*ContainerStatus) ProtoMessage() {} +func (*ContainerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } + +func (m *DaemonEndpoint) Reset() { *m = DaemonEndpoint{} } +func (*DaemonEndpoint) ProtoMessage() {} +func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } + +func (m *DeleteOptions) Reset() { *m = DeleteOptions{} } +func (*DeleteOptions) ProtoMessage() {} +func (*DeleteOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } + +func (m *DeprecatedDownwardAPIVolumeFile) Reset() { *m = DeprecatedDownwardAPIVolumeFile{} } +func (*DeprecatedDownwardAPIVolumeFile) ProtoMessage() {} +func (*DeprecatedDownwardAPIVolumeFile) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{27} +} + +func (m *DeprecatedDownwardAPIVolumeSource) Reset() { *m = DeprecatedDownwardAPIVolumeSource{} } +func (*DeprecatedDownwardAPIVolumeSource) ProtoMessage() {} +func (*DeprecatedDownwardAPIVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{28} +} + +func (m *DownwardAPIVolumeFile) Reset() { *m = DownwardAPIVolumeFile{} } +func (*DownwardAPIVolumeFile) ProtoMessage() {} +func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } + +func (m *DownwardAPIVolumeSource) Reset() { *m = DownwardAPIVolumeSource{} } +func (*DownwardAPIVolumeSource) ProtoMessage() {} +func (*DownwardAPIVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{30} +} + +func (m *EmptyDirVolumeSource) Reset() { *m = EmptyDirVolumeSource{} } +func (*EmptyDirVolumeSource) ProtoMessage() {} +func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } + +func (m *EndpointAddress) Reset() { *m = EndpointAddress{} } +func (*EndpointAddress) ProtoMessage() {} +func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } + +func (m *EndpointPort) Reset() { *m = EndpointPort{} } +func (*EndpointPort) ProtoMessage() {} +func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } + +func (m *EndpointSubset) Reset() { *m = EndpointSubset{} } +func (*EndpointSubset) ProtoMessage() {} +func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } + +func (m *Endpoints) Reset() { *m = Endpoints{} } +func (*Endpoints) ProtoMessage() {} +func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } + +func (m *EndpointsList) Reset() { *m = EndpointsList{} } +func (*EndpointsList) ProtoMessage() {} +func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } + +func (m *EnvVar) Reset() { *m = EnvVar{} } +func (*EnvVar) ProtoMessage() {} +func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } + +func (m *EnvVarSource) Reset() { *m = EnvVarSource{} } +func (*EnvVarSource) ProtoMessage() {} +func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } + +func (m *Event) Reset() { *m = Event{} } +func (*Event) ProtoMessage() {} +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } + +func (m *EventList) Reset() { *m = EventList{} } +func (*EventList) ProtoMessage() {} +func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{40} } + +func (m *EventSource) Reset() { *m = EventSource{} } +func (*EventSource) ProtoMessage() {} +func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } + +func (m *ExecAction) Reset() { *m = ExecAction{} } +func (*ExecAction) ProtoMessage() {} +func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } + +func (m *ExportOptions) Reset() { *m = ExportOptions{} } +func (*ExportOptions) ProtoMessage() {} +func (*ExportOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } + +func (m *FCVolumeSource) Reset() { *m = FCVolumeSource{} } +func (*FCVolumeSource) ProtoMessage() {} +func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } + +func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } +func (*FSGroupStrategyOptions) ProtoMessage() {} +func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } + +func (m *FlexVolumeSource) Reset() { *m = FlexVolumeSource{} } +func (*FlexVolumeSource) ProtoMessage() {} +func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } + +func (m *FlockerVolumeSource) Reset() { *m = FlockerVolumeSource{} } +func (*FlockerVolumeSource) ProtoMessage() {} +func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } + +func (m *GCEPersistentDiskVolumeSource) Reset() { *m = GCEPersistentDiskVolumeSource{} } +func (*GCEPersistentDiskVolumeSource) ProtoMessage() {} +func (*GCEPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{48} +} + +func (m *GitRepoVolumeSource) Reset() { *m = GitRepoVolumeSource{} } +func (*GitRepoVolumeSource) ProtoMessage() {} +func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } + +func (m *GlusterfsVolumeSource) Reset() { *m = GlusterfsVolumeSource{} } +func (*GlusterfsVolumeSource) ProtoMessage() {} +func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } + +func (m *HTTPGetAction) Reset() { *m = HTTPGetAction{} } +func (*HTTPGetAction) ProtoMessage() {} +func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } + +func (m *HTTPHeader) Reset() { *m = HTTPHeader{} } +func (*HTTPHeader) ProtoMessage() {} +func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } -func (m *Affinity) Reset() { *m = Affinity{} } -func (m *Affinity) String() string { return proto.CompactTextString(m) } -func (*Affinity) ProtoMessage() {} +func (m *Handler) Reset() { *m = Handler{} } +func (*Handler) ProtoMessage() {} +func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } -func (m *AttachedVolume) Reset() { *m = AttachedVolume{} } -func (m *AttachedVolume) String() string { return proto.CompactTextString(m) } -func (*AttachedVolume) ProtoMessage() {} +func (m *HostPathVolumeSource) Reset() { *m = HostPathVolumeSource{} } +func (*HostPathVolumeSource) ProtoMessage() {} +func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } -func (m *AzureFileVolumeSource) Reset() { *m = AzureFileVolumeSource{} } -func (m *AzureFileVolumeSource) String() string { return proto.CompactTextString(m) } -func (*AzureFileVolumeSource) ProtoMessage() {} +func (m *IDRange) Reset() { *m = IDRange{} } +func (*IDRange) ProtoMessage() {} +func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } -func (m *Binding) Reset() { *m = Binding{} } -func (m *Binding) String() string { return proto.CompactTextString(m) } -func (*Binding) ProtoMessage() {} - -func (m *Capabilities) Reset() { *m = Capabilities{} } -func (m *Capabilities) String() string { return proto.CompactTextString(m) } -func (*Capabilities) ProtoMessage() {} - -func (m *CephFSVolumeSource) Reset() { *m = CephFSVolumeSource{} } -func (m *CephFSVolumeSource) String() string { return proto.CompactTextString(m) } -func (*CephFSVolumeSource) ProtoMessage() {} - -func (m *CinderVolumeSource) Reset() { *m = CinderVolumeSource{} } -func (m *CinderVolumeSource) String() string { return proto.CompactTextString(m) } -func (*CinderVolumeSource) ProtoMessage() {} - -func (m *ComponentCondition) Reset() { *m = ComponentCondition{} } -func (m *ComponentCondition) String() string { return proto.CompactTextString(m) } -func (*ComponentCondition) ProtoMessage() {} - -func (m *ComponentStatus) Reset() { *m = ComponentStatus{} } -func (m *ComponentStatus) String() string { return proto.CompactTextString(m) } -func (*ComponentStatus) ProtoMessage() {} - -func (m *ComponentStatusList) Reset() { *m = ComponentStatusList{} } -func (m *ComponentStatusList) String() string { return proto.CompactTextString(m) } -func (*ComponentStatusList) ProtoMessage() {} - -func (m *ConfigMap) Reset() { *m = ConfigMap{} } -func (m *ConfigMap) String() string { return proto.CompactTextString(m) } -func (*ConfigMap) ProtoMessage() {} - -func (m *ConfigMapKeySelector) Reset() { *m = ConfigMapKeySelector{} } -func (m *ConfigMapKeySelector) String() string { return proto.CompactTextString(m) } -func (*ConfigMapKeySelector) ProtoMessage() {} - -func (m *ConfigMapList) Reset() { *m = ConfigMapList{} } -func (m *ConfigMapList) String() string { return proto.CompactTextString(m) } -func (*ConfigMapList) ProtoMessage() {} - -func (m *ConfigMapVolumeSource) Reset() { *m = ConfigMapVolumeSource{} } -func (m *ConfigMapVolumeSource) String() string { return proto.CompactTextString(m) } -func (*ConfigMapVolumeSource) ProtoMessage() {} - -func (m *Container) Reset() { *m = Container{} } -func (m *Container) String() string { return proto.CompactTextString(m) } -func (*Container) ProtoMessage() {} - -func (m *ContainerImage) Reset() { *m = ContainerImage{} } -func (m *ContainerImage) String() string { return proto.CompactTextString(m) } -func (*ContainerImage) ProtoMessage() {} - -func (m *ContainerPort) Reset() { *m = ContainerPort{} } -func (m *ContainerPort) String() string { return proto.CompactTextString(m) } -func (*ContainerPort) ProtoMessage() {} - -func (m *ContainerState) Reset() { *m = ContainerState{} } -func (m *ContainerState) String() string { return proto.CompactTextString(m) } -func (*ContainerState) ProtoMessage() {} - -func (m *ContainerStateRunning) Reset() { *m = ContainerStateRunning{} } -func (m *ContainerStateRunning) String() string { return proto.CompactTextString(m) } -func (*ContainerStateRunning) ProtoMessage() {} - -func (m *ContainerStateTerminated) Reset() { *m = ContainerStateTerminated{} } -func (m *ContainerStateTerminated) String() string { return proto.CompactTextString(m) } -func (*ContainerStateTerminated) ProtoMessage() {} - -func (m *ContainerStateWaiting) Reset() { *m = ContainerStateWaiting{} } -func (m *ContainerStateWaiting) String() string { return proto.CompactTextString(m) } -func (*ContainerStateWaiting) ProtoMessage() {} - -func (m *ContainerStatus) Reset() { *m = ContainerStatus{} } -func (m *ContainerStatus) String() string { return proto.CompactTextString(m) } -func (*ContainerStatus) ProtoMessage() {} - -func (m *DaemonEndpoint) Reset() { *m = DaemonEndpoint{} } -func (m *DaemonEndpoint) String() string { return proto.CompactTextString(m) } -func (*DaemonEndpoint) ProtoMessage() {} - -func (m *DeleteOptions) Reset() { *m = DeleteOptions{} } -func (m *DeleteOptions) String() string { return proto.CompactTextString(m) } -func (*DeleteOptions) ProtoMessage() {} - -func (m *DeprecatedDownwardAPIVolumeFile) Reset() { *m = DeprecatedDownwardAPIVolumeFile{} } -func (m *DeprecatedDownwardAPIVolumeFile) String() string { return proto.CompactTextString(m) } -func (*DeprecatedDownwardAPIVolumeFile) ProtoMessage() {} - -func (m *DeprecatedDownwardAPIVolumeSource) Reset() { *m = DeprecatedDownwardAPIVolumeSource{} } -func (m *DeprecatedDownwardAPIVolumeSource) String() string { return proto.CompactTextString(m) } -func (*DeprecatedDownwardAPIVolumeSource) ProtoMessage() {} - -func (m *DownwardAPIVolumeFile) Reset() { *m = DownwardAPIVolumeFile{} } -func (m *DownwardAPIVolumeFile) String() string { return proto.CompactTextString(m) } -func (*DownwardAPIVolumeFile) ProtoMessage() {} - -func (m *DownwardAPIVolumeSource) Reset() { *m = DownwardAPIVolumeSource{} } -func (m *DownwardAPIVolumeSource) String() string { return proto.CompactTextString(m) } -func (*DownwardAPIVolumeSource) ProtoMessage() {} - -func (m *EmptyDirVolumeSource) Reset() { *m = EmptyDirVolumeSource{} } -func (m *EmptyDirVolumeSource) String() string { return proto.CompactTextString(m) } -func (*EmptyDirVolumeSource) ProtoMessage() {} - -func (m *EndpointAddress) Reset() { *m = EndpointAddress{} } -func (m *EndpointAddress) String() string { return proto.CompactTextString(m) } -func (*EndpointAddress) ProtoMessage() {} - -func (m *EndpointPort) Reset() { *m = EndpointPort{} } -func (m *EndpointPort) String() string { return proto.CompactTextString(m) } -func (*EndpointPort) ProtoMessage() {} - -func (m *EndpointSubset) Reset() { *m = EndpointSubset{} } -func (m *EndpointSubset) String() string { return proto.CompactTextString(m) } -func (*EndpointSubset) ProtoMessage() {} - -func (m *Endpoints) Reset() { *m = Endpoints{} } -func (m *Endpoints) String() string { return proto.CompactTextString(m) } -func (*Endpoints) ProtoMessage() {} - -func (m *EndpointsList) Reset() { *m = EndpointsList{} } -func (m *EndpointsList) String() string { return proto.CompactTextString(m) } -func (*EndpointsList) ProtoMessage() {} - -func (m *EnvVar) Reset() { *m = EnvVar{} } -func (m *EnvVar) String() string { return proto.CompactTextString(m) } -func (*EnvVar) ProtoMessage() {} - -func (m *EnvVarSource) Reset() { *m = EnvVarSource{} } -func (m *EnvVarSource) String() string { return proto.CompactTextString(m) } -func (*EnvVarSource) ProtoMessage() {} - -func (m *Event) Reset() { *m = Event{} } -func (m *Event) String() string { return proto.CompactTextString(m) } -func (*Event) ProtoMessage() {} - -func (m *EventList) Reset() { *m = EventList{} } -func (m *EventList) String() string { return proto.CompactTextString(m) } -func (*EventList) ProtoMessage() {} - -func (m *EventSource) Reset() { *m = EventSource{} } -func (m *EventSource) String() string { return proto.CompactTextString(m) } -func (*EventSource) ProtoMessage() {} - -func (m *ExecAction) Reset() { *m = ExecAction{} } -func (m *ExecAction) String() string { return proto.CompactTextString(m) } -func (*ExecAction) ProtoMessage() {} - -func (m *ExportOptions) Reset() { *m = ExportOptions{} } -func (m *ExportOptions) String() string { return proto.CompactTextString(m) } -func (*ExportOptions) ProtoMessage() {} - -func (m *FCVolumeSource) Reset() { *m = FCVolumeSource{} } -func (m *FCVolumeSource) String() string { return proto.CompactTextString(m) } -func (*FCVolumeSource) ProtoMessage() {} - -func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } -func (m *FSGroupStrategyOptions) String() string { return proto.CompactTextString(m) } -func (*FSGroupStrategyOptions) ProtoMessage() {} - -func (m *FlexVolumeSource) Reset() { *m = FlexVolumeSource{} } -func (m *FlexVolumeSource) String() string { return proto.CompactTextString(m) } -func (*FlexVolumeSource) ProtoMessage() {} - -func (m *FlockerVolumeSource) Reset() { *m = FlockerVolumeSource{} } -func (m *FlockerVolumeSource) String() string { return proto.CompactTextString(m) } -func (*FlockerVolumeSource) ProtoMessage() {} - -func (m *GCEPersistentDiskVolumeSource) Reset() { *m = GCEPersistentDiskVolumeSource{} } -func (m *GCEPersistentDiskVolumeSource) String() string { return proto.CompactTextString(m) } -func (*GCEPersistentDiskVolumeSource) ProtoMessage() {} - -func (m *GitRepoVolumeSource) Reset() { *m = GitRepoVolumeSource{} } -func (m *GitRepoVolumeSource) String() string { return proto.CompactTextString(m) } -func (*GitRepoVolumeSource) ProtoMessage() {} - -func (m *GlusterfsVolumeSource) Reset() { *m = GlusterfsVolumeSource{} } -func (m *GlusterfsVolumeSource) String() string { return proto.CompactTextString(m) } -func (*GlusterfsVolumeSource) ProtoMessage() {} - -func (m *HTTPGetAction) Reset() { *m = HTTPGetAction{} } -func (m *HTTPGetAction) String() string { return proto.CompactTextString(m) } -func (*HTTPGetAction) ProtoMessage() {} - -func (m *HTTPHeader) Reset() { *m = HTTPHeader{} } -func (m *HTTPHeader) String() string { return proto.CompactTextString(m) } -func (*HTTPHeader) ProtoMessage() {} - -func (m *Handler) Reset() { *m = Handler{} } -func (m *Handler) String() string { return proto.CompactTextString(m) } -func (*Handler) ProtoMessage() {} - -func (m *HostPathVolumeSource) Reset() { *m = HostPathVolumeSource{} } -func (m *HostPathVolumeSource) String() string { return proto.CompactTextString(m) } -func (*HostPathVolumeSource) ProtoMessage() {} - -func (m *IDRange) Reset() { *m = IDRange{} } -func (m *IDRange) String() string { return proto.CompactTextString(m) } -func (*IDRange) ProtoMessage() {} - -func (m *ISCSIVolumeSource) Reset() { *m = ISCSIVolumeSource{} } -func (m *ISCSIVolumeSource) String() string { return proto.CompactTextString(m) } -func (*ISCSIVolumeSource) ProtoMessage() {} - -func (m *KeyToPath) Reset() { *m = KeyToPath{} } -func (m *KeyToPath) String() string { return proto.CompactTextString(m) } -func (*KeyToPath) ProtoMessage() {} - -func (m *Lifecycle) Reset() { *m = Lifecycle{} } -func (m *Lifecycle) String() string { return proto.CompactTextString(m) } -func (*Lifecycle) ProtoMessage() {} - -func (m *LimitRange) Reset() { *m = LimitRange{} } -func (m *LimitRange) String() string { return proto.CompactTextString(m) } -func (*LimitRange) ProtoMessage() {} - -func (m *LimitRangeItem) Reset() { *m = LimitRangeItem{} } -func (m *LimitRangeItem) String() string { return proto.CompactTextString(m) } -func (*LimitRangeItem) ProtoMessage() {} - -func (m *LimitRangeList) Reset() { *m = LimitRangeList{} } -func (m *LimitRangeList) String() string { return proto.CompactTextString(m) } -func (*LimitRangeList) ProtoMessage() {} - -func (m *LimitRangeSpec) Reset() { *m = LimitRangeSpec{} } -func (m *LimitRangeSpec) String() string { return proto.CompactTextString(m) } -func (*LimitRangeSpec) ProtoMessage() {} - -func (m *List) Reset() { *m = List{} } -func (m *List) String() string { return proto.CompactTextString(m) } -func (*List) ProtoMessage() {} - -func (m *ListOptions) Reset() { *m = ListOptions{} } -func (m *ListOptions) String() string { return proto.CompactTextString(m) } -func (*ListOptions) ProtoMessage() {} - -func (m *LoadBalancerIngress) Reset() { *m = LoadBalancerIngress{} } -func (m *LoadBalancerIngress) String() string { return proto.CompactTextString(m) } -func (*LoadBalancerIngress) ProtoMessage() {} - -func (m *LoadBalancerStatus) Reset() { *m = LoadBalancerStatus{} } -func (m *LoadBalancerStatus) String() string { return proto.CompactTextString(m) } -func (*LoadBalancerStatus) ProtoMessage() {} - -func (m *LocalObjectReference) Reset() { *m = LocalObjectReference{} } -func (m *LocalObjectReference) String() string { return proto.CompactTextString(m) } -func (*LocalObjectReference) ProtoMessage() {} - -func (m *NFSVolumeSource) Reset() { *m = NFSVolumeSource{} } -func (m *NFSVolumeSource) String() string { return proto.CompactTextString(m) } -func (*NFSVolumeSource) ProtoMessage() {} - -func (m *Namespace) Reset() { *m = Namespace{} } -func (m *Namespace) String() string { return proto.CompactTextString(m) } -func (*Namespace) ProtoMessage() {} - -func (m *NamespaceList) Reset() { *m = NamespaceList{} } -func (m *NamespaceList) String() string { return proto.CompactTextString(m) } -func (*NamespaceList) ProtoMessage() {} - -func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } -func (m *NamespaceSpec) String() string { return proto.CompactTextString(m) } -func (*NamespaceSpec) ProtoMessage() {} - -func (m *NamespaceStatus) Reset() { *m = NamespaceStatus{} } -func (m *NamespaceStatus) String() string { return proto.CompactTextString(m) } -func (*NamespaceStatus) ProtoMessage() {} - -func (m *Node) Reset() { *m = Node{} } -func (m *Node) String() string { return proto.CompactTextString(m) } -func (*Node) ProtoMessage() {} - -func (m *NodeAddress) Reset() { *m = NodeAddress{} } -func (m *NodeAddress) String() string { return proto.CompactTextString(m) } -func (*NodeAddress) ProtoMessage() {} - -func (m *NodeAffinity) Reset() { *m = NodeAffinity{} } -func (m *NodeAffinity) String() string { return proto.CompactTextString(m) } -func (*NodeAffinity) ProtoMessage() {} - -func (m *NodeCondition) Reset() { *m = NodeCondition{} } -func (m *NodeCondition) String() string { return proto.CompactTextString(m) } -func (*NodeCondition) ProtoMessage() {} - -func (m *NodeDaemonEndpoints) Reset() { *m = NodeDaemonEndpoints{} } -func (m *NodeDaemonEndpoints) String() string { return proto.CompactTextString(m) } -func (*NodeDaemonEndpoints) ProtoMessage() {} - -func (m *NodeList) Reset() { *m = NodeList{} } -func (m *NodeList) String() string { return proto.CompactTextString(m) } -func (*NodeList) ProtoMessage() {} - -func (m *NodeProxyOptions) Reset() { *m = NodeProxyOptions{} } -func (m *NodeProxyOptions) String() string { return proto.CompactTextString(m) } -func (*NodeProxyOptions) ProtoMessage() {} - -func (m *NodeSelector) Reset() { *m = NodeSelector{} } -func (m *NodeSelector) String() string { return proto.CompactTextString(m) } -func (*NodeSelector) ProtoMessage() {} - -func (m *NodeSelectorRequirement) Reset() { *m = NodeSelectorRequirement{} } -func (m *NodeSelectorRequirement) String() string { return proto.CompactTextString(m) } -func (*NodeSelectorRequirement) ProtoMessage() {} - -func (m *NodeSelectorTerm) Reset() { *m = NodeSelectorTerm{} } -func (m *NodeSelectorTerm) String() string { return proto.CompactTextString(m) } -func (*NodeSelectorTerm) ProtoMessage() {} - -func (m *NodeSpec) Reset() { *m = NodeSpec{} } -func (m *NodeSpec) String() string { return proto.CompactTextString(m) } -func (*NodeSpec) ProtoMessage() {} - -func (m *NodeStatus) Reset() { *m = NodeStatus{} } -func (m *NodeStatus) String() string { return proto.CompactTextString(m) } -func (*NodeStatus) ProtoMessage() {} - -func (m *NodeSystemInfo) Reset() { *m = NodeSystemInfo{} } -func (m *NodeSystemInfo) String() string { return proto.CompactTextString(m) } -func (*NodeSystemInfo) ProtoMessage() {} - -func (m *ObjectFieldSelector) Reset() { *m = ObjectFieldSelector{} } -func (m *ObjectFieldSelector) String() string { return proto.CompactTextString(m) } -func (*ObjectFieldSelector) ProtoMessage() {} - -func (m *ObjectMeta) Reset() { *m = ObjectMeta{} } -func (m *ObjectMeta) String() string { return proto.CompactTextString(m) } -func (*ObjectMeta) ProtoMessage() {} - -func (m *ObjectReference) Reset() { *m = ObjectReference{} } -func (m *ObjectReference) String() string { return proto.CompactTextString(m) } -func (*ObjectReference) ProtoMessage() {} - -func (m *OwnerReference) Reset() { *m = OwnerReference{} } -func (m *OwnerReference) String() string { return proto.CompactTextString(m) } -func (*OwnerReference) ProtoMessage() {} - -func (m *PersistentVolume) Reset() { *m = PersistentVolume{} } -func (m *PersistentVolume) String() string { return proto.CompactTextString(m) } -func (*PersistentVolume) ProtoMessage() {} - -func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolumeClaim{} } -func (m *PersistentVolumeClaim) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeClaim) ProtoMessage() {} - -func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} } -func (m *PersistentVolumeClaimList) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeClaimList) ProtoMessage() {} - -func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} } -func (m *PersistentVolumeClaimSpec) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeClaimSpec) ProtoMessage() {} - -func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} } -func (m *PersistentVolumeClaimStatus) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeClaimStatus) ProtoMessage() {} - -func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} } -func (m *PersistentVolumeClaimVolumeSource) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {} - -func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} } -func (m *PersistentVolumeList) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeList) ProtoMessage() {} - -func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} } -func (m *PersistentVolumeSource) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeSource) ProtoMessage() {} - -func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} } -func (m *PersistentVolumeSpec) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeSpec) ProtoMessage() {} - -func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} } -func (m *PersistentVolumeStatus) String() string { return proto.CompactTextString(m) } -func (*PersistentVolumeStatus) ProtoMessage() {} - -func (m *Pod) Reset() { *m = Pod{} } -func (m *Pod) String() string { return proto.CompactTextString(m) } -func (*Pod) ProtoMessage() {} - -func (m *PodAffinity) Reset() { *m = PodAffinity{} } -func (m *PodAffinity) String() string { return proto.CompactTextString(m) } -func (*PodAffinity) ProtoMessage() {} - -func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} } -func (m *PodAffinityTerm) String() string { return proto.CompactTextString(m) } -func (*PodAffinityTerm) ProtoMessage() {} - -func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} } -func (m *PodAntiAffinity) String() string { return proto.CompactTextString(m) } -func (*PodAntiAffinity) ProtoMessage() {} - -func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} } -func (m *PodAttachOptions) String() string { return proto.CompactTextString(m) } -func (*PodAttachOptions) ProtoMessage() {} - -func (m *PodCondition) Reset() { *m = PodCondition{} } -func (m *PodCondition) String() string { return proto.CompactTextString(m) } -func (*PodCondition) ProtoMessage() {} - -func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } -func (m *PodExecOptions) String() string { return proto.CompactTextString(m) } -func (*PodExecOptions) ProtoMessage() {} - -func (m *PodList) Reset() { *m = PodList{} } -func (m *PodList) String() string { return proto.CompactTextString(m) } -func (*PodList) ProtoMessage() {} - -func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } -func (m *PodLogOptions) String() string { return proto.CompactTextString(m) } -func (*PodLogOptions) ProtoMessage() {} - -func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } -func (m *PodProxyOptions) String() string { return proto.CompactTextString(m) } -func (*PodProxyOptions) ProtoMessage() {} - -func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } -func (m *PodSecurityContext) String() string { return proto.CompactTextString(m) } -func (*PodSecurityContext) ProtoMessage() {} - -func (m *PodSpec) Reset() { *m = PodSpec{} } -func (m *PodSpec) String() string { return proto.CompactTextString(m) } -func (*PodSpec) ProtoMessage() {} - -func (m *PodStatus) Reset() { *m = PodStatus{} } -func (m *PodStatus) String() string { return proto.CompactTextString(m) } -func (*PodStatus) ProtoMessage() {} - -func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } -func (m *PodStatusResult) String() string { return proto.CompactTextString(m) } -func (*PodStatusResult) ProtoMessage() {} - -func (m *PodTemplate) Reset() { *m = PodTemplate{} } -func (m *PodTemplate) String() string { return proto.CompactTextString(m) } -func (*PodTemplate) ProtoMessage() {} - -func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } -func (m *PodTemplateList) String() string { return proto.CompactTextString(m) } -func (*PodTemplateList) ProtoMessage() {} - -func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } -func (m *PodTemplateSpec) String() string { return proto.CompactTextString(m) } -func (*PodTemplateSpec) ProtoMessage() {} - -func (m *Preconditions) Reset() { *m = Preconditions{} } -func (m *Preconditions) String() string { return proto.CompactTextString(m) } -func (*Preconditions) ProtoMessage() {} - -func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } -func (m *PreferredSchedulingTerm) String() string { return proto.CompactTextString(m) } -func (*PreferredSchedulingTerm) ProtoMessage() {} - -func (m *Probe) Reset() { *m = Probe{} } -func (m *Probe) String() string { return proto.CompactTextString(m) } -func (*Probe) ProtoMessage() {} - -func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } -func (m *RBDVolumeSource) String() string { return proto.CompactTextString(m) } -func (*RBDVolumeSource) ProtoMessage() {} - -func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } -func (m *RangeAllocation) String() string { return proto.CompactTextString(m) } -func (*RangeAllocation) ProtoMessage() {} - -func (m *ReplicationController) Reset() { *m = ReplicationController{} } -func (m *ReplicationController) String() string { return proto.CompactTextString(m) } -func (*ReplicationController) ProtoMessage() {} - -func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } -func (m *ReplicationControllerList) String() string { return proto.CompactTextString(m) } -func (*ReplicationControllerList) ProtoMessage() {} - -func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } -func (m *ReplicationControllerSpec) String() string { return proto.CompactTextString(m) } -func (*ReplicationControllerSpec) ProtoMessage() {} - -func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } -func (m *ReplicationControllerStatus) String() string { return proto.CompactTextString(m) } -func (*ReplicationControllerStatus) ProtoMessage() {} - -func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } -func (m *ResourceFieldSelector) String() string { return proto.CompactTextString(m) } -func (*ResourceFieldSelector) ProtoMessage() {} - -func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } -func (m *ResourceQuota) String() string { return proto.CompactTextString(m) } -func (*ResourceQuota) ProtoMessage() {} - -func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } -func (m *ResourceQuotaList) String() string { return proto.CompactTextString(m) } -func (*ResourceQuotaList) ProtoMessage() {} - -func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } -func (m *ResourceQuotaSpec) String() string { return proto.CompactTextString(m) } -func (*ResourceQuotaSpec) ProtoMessage() {} - -func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } -func (m *ResourceQuotaStatus) String() string { return proto.CompactTextString(m) } -func (*ResourceQuotaStatus) ProtoMessage() {} - -func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } -func (m *ResourceRequirements) String() string { return proto.CompactTextString(m) } -func (*ResourceRequirements) ProtoMessage() {} - -func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } -func (m *RunAsUserStrategyOptions) String() string { return proto.CompactTextString(m) } -func (*RunAsUserStrategyOptions) ProtoMessage() {} - -func (m *SELinuxContextStrategyOptions) Reset() { *m = SELinuxContextStrategyOptions{} } -func (m *SELinuxContextStrategyOptions) String() string { return proto.CompactTextString(m) } -func (*SELinuxContextStrategyOptions) ProtoMessage() {} - -func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } -func (m *SELinuxOptions) String() string { return proto.CompactTextString(m) } -func (*SELinuxOptions) ProtoMessage() {} - -func (m *Secret) Reset() { *m = Secret{} } -func (m *Secret) String() string { return proto.CompactTextString(m) } -func (*Secret) ProtoMessage() {} - -func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } -func (m *SecretKeySelector) String() string { return proto.CompactTextString(m) } -func (*SecretKeySelector) ProtoMessage() {} - -func (m *SecretList) Reset() { *m = SecretList{} } -func (m *SecretList) String() string { return proto.CompactTextString(m) } -func (*SecretList) ProtoMessage() {} - -func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } -func (m *SecretVolumeSource) String() string { return proto.CompactTextString(m) } -func (*SecretVolumeSource) ProtoMessage() {} - -func (m *SecurityContext) Reset() { *m = SecurityContext{} } -func (m *SecurityContext) String() string { return proto.CompactTextString(m) } -func (*SecurityContext) ProtoMessage() {} - -func (m *SecurityContextConstraints) Reset() { *m = SecurityContextConstraints{} } -func (m *SecurityContextConstraints) String() string { return proto.CompactTextString(m) } -func (*SecurityContextConstraints) ProtoMessage() {} - -func (m *SecurityContextConstraintsList) Reset() { *m = SecurityContextConstraintsList{} } -func (m *SecurityContextConstraintsList) String() string { return proto.CompactTextString(m) } -func (*SecurityContextConstraintsList) ProtoMessage() {} - -func (m *SerializedReference) Reset() { *m = SerializedReference{} } -func (m *SerializedReference) String() string { return proto.CompactTextString(m) } -func (*SerializedReference) ProtoMessage() {} - -func (m *Service) Reset() { *m = Service{} } -func (m *Service) String() string { return proto.CompactTextString(m) } -func (*Service) ProtoMessage() {} - -func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } -func (m *ServiceAccount) String() string { return proto.CompactTextString(m) } -func (*ServiceAccount) ProtoMessage() {} - -func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } -func (m *ServiceAccountList) String() string { return proto.CompactTextString(m) } -func (*ServiceAccountList) ProtoMessage() {} - -func (m *ServiceList) Reset() { *m = ServiceList{} } -func (m *ServiceList) String() string { return proto.CompactTextString(m) } -func (*ServiceList) ProtoMessage() {} - -func (m *ServicePort) Reset() { *m = ServicePort{} } -func (m *ServicePort) String() string { return proto.CompactTextString(m) } -func (*ServicePort) ProtoMessage() {} - -func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } -func (m *ServiceProxyOptions) String() string { return proto.CompactTextString(m) } -func (*ServiceProxyOptions) ProtoMessage() {} - -func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } -func (m *ServiceSpec) String() string { return proto.CompactTextString(m) } -func (*ServiceSpec) ProtoMessage() {} - -func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } -func (m *ServiceStatus) String() string { return proto.CompactTextString(m) } -func (*ServiceStatus) ProtoMessage() {} - -func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } -func (m *SupplementalGroupsStrategyOptions) String() string { return proto.CompactTextString(m) } -func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} - -func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } -func (m *TCPSocketAction) String() string { return proto.CompactTextString(m) } -func (*TCPSocketAction) ProtoMessage() {} - -func (m *Taint) Reset() { *m = Taint{} } -func (m *Taint) String() string { return proto.CompactTextString(m) } -func (*Taint) ProtoMessage() {} - -func (m *Toleration) Reset() { *m = Toleration{} } -func (m *Toleration) String() string { return proto.CompactTextString(m) } -func (*Toleration) ProtoMessage() {} - -func (m *Volume) Reset() { *m = Volume{} } -func (m *Volume) String() string { return proto.CompactTextString(m) } -func (*Volume) ProtoMessage() {} - -func (m *VolumeMount) Reset() { *m = VolumeMount{} } -func (m *VolumeMount) String() string { return proto.CompactTextString(m) } -func (*VolumeMount) ProtoMessage() {} - -func (m *VolumeSource) Reset() { *m = VolumeSource{} } -func (m *VolumeSource) String() string { return proto.CompactTextString(m) } -func (*VolumeSource) ProtoMessage() {} - -func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } -func (m *VsphereVirtualDiskVolumeSource) String() string { return proto.CompactTextString(m) } -func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} - -func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } -func (m *WeightedPodAffinityTerm) String() string { return proto.CompactTextString(m) } -func (*WeightedPodAffinityTerm) ProtoMessage() {} +func (m *ISCSIVolumeSource) Reset() { *m = ISCSIVolumeSource{} } +func (*ISCSIVolumeSource) ProtoMessage() {} +func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } + +func (m *KeyToPath) Reset() { *m = KeyToPath{} } +func (*KeyToPath) ProtoMessage() {} +func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } + +func (m *Lifecycle) Reset() { *m = Lifecycle{} } +func (*Lifecycle) ProtoMessage() {} +func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } + +func (m *LimitRange) Reset() { *m = LimitRange{} } +func (*LimitRange) ProtoMessage() {} +func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } + +func (m *LimitRangeItem) Reset() { *m = LimitRangeItem{} } +func (*LimitRangeItem) ProtoMessage() {} +func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } + +func (m *LimitRangeList) Reset() { *m = LimitRangeList{} } +func (*LimitRangeList) ProtoMessage() {} +func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} } + +func (m *LimitRangeSpec) Reset() { *m = LimitRangeSpec{} } +func (*LimitRangeSpec) ProtoMessage() {} +func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } + +func (m *List) Reset() { *m = List{} } +func (*List) ProtoMessage() {} +func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} } + +func (m *ListOptions) Reset() { *m = ListOptions{} } +func (*ListOptions) ProtoMessage() {} +func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{64} } + +func (m *LoadBalancerIngress) Reset() { *m = LoadBalancerIngress{} } +func (*LoadBalancerIngress) ProtoMessage() {} +func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } + +func (m *LoadBalancerStatus) Reset() { *m = LoadBalancerStatus{} } +func (*LoadBalancerStatus) ProtoMessage() {} +func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} } + +func (m *LocalObjectReference) Reset() { *m = LocalObjectReference{} } +func (*LocalObjectReference) ProtoMessage() {} +func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } + +func (m *NFSVolumeSource) Reset() { *m = NFSVolumeSource{} } +func (*NFSVolumeSource) ProtoMessage() {} +func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } + +func (m *Namespace) Reset() { *m = Namespace{} } +func (*Namespace) ProtoMessage() {} +func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } + +func (m *NamespaceList) Reset() { *m = NamespaceList{} } +func (*NamespaceList) ProtoMessage() {} +func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } + +func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } +func (*NamespaceSpec) ProtoMessage() {} +func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } + +func (m *NamespaceStatus) Reset() { *m = NamespaceStatus{} } +func (*NamespaceStatus) ProtoMessage() {} +func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } + +func (m *Node) Reset() { *m = Node{} } +func (*Node) ProtoMessage() {} +func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} } + +func (m *NodeAddress) Reset() { *m = NodeAddress{} } +func (*NodeAddress) ProtoMessage() {} +func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } + +func (m *NodeAffinity) Reset() { *m = NodeAffinity{} } +func (*NodeAffinity) ProtoMessage() {} +func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} } + +func (m *NodeCondition) Reset() { *m = NodeCondition{} } +func (*NodeCondition) ProtoMessage() {} +func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } + +func (m *NodeDaemonEndpoints) Reset() { *m = NodeDaemonEndpoints{} } +func (*NodeDaemonEndpoints) ProtoMessage() {} +func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} } + +func (m *NodeList) Reset() { *m = NodeList{} } +func (*NodeList) ProtoMessage() {} +func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } + +func (m *NodeProxyOptions) Reset() { *m = NodeProxyOptions{} } +func (*NodeProxyOptions) ProtoMessage() {} +func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } + +func (m *NodeSelector) Reset() { *m = NodeSelector{} } +func (*NodeSelector) ProtoMessage() {} +func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } + +func (m *NodeSelectorRequirement) Reset() { *m = NodeSelectorRequirement{} } +func (*NodeSelectorRequirement) ProtoMessage() {} +func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{81} +} + +func (m *NodeSelectorTerm) Reset() { *m = NodeSelectorTerm{} } +func (*NodeSelectorTerm) ProtoMessage() {} +func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } + +func (m *NodeSpec) Reset() { *m = NodeSpec{} } +func (*NodeSpec) ProtoMessage() {} +func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } + +func (m *NodeStatus) Reset() { *m = NodeStatus{} } +func (*NodeStatus) ProtoMessage() {} +func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } + +func (m *NodeSystemInfo) Reset() { *m = NodeSystemInfo{} } +func (*NodeSystemInfo) ProtoMessage() {} +func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } + +func (m *ObjectFieldSelector) Reset() { *m = ObjectFieldSelector{} } +func (*ObjectFieldSelector) ProtoMessage() {} +func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } + +func (m *ObjectMeta) Reset() { *m = ObjectMeta{} } +func (*ObjectMeta) ProtoMessage() {} +func (*ObjectMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } + +func (m *ObjectReference) Reset() { *m = ObjectReference{} } +func (*ObjectReference) ProtoMessage() {} +func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} } + +func (m *OwnerReference) Reset() { *m = OwnerReference{} } +func (*OwnerReference) ProtoMessage() {} +func (*OwnerReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} } + +func (m *PersistentVolume) Reset() { *m = PersistentVolume{} } +func (*PersistentVolume) ProtoMessage() {} +func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} } + +func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolumeClaim{} } +func (*PersistentVolumeClaim) ProtoMessage() {} +func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} } + +func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} } +func (*PersistentVolumeClaimList) ProtoMessage() {} +func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{92} +} + +func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} } +func (*PersistentVolumeClaimSpec) ProtoMessage() {} +func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{93} +} + +func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} } +func (*PersistentVolumeClaimStatus) ProtoMessage() {} +func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{94} +} + +func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} } +func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {} +func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{95} +} + +func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} } +func (*PersistentVolumeList) ProtoMessage() {} +func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } + +func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} } +func (*PersistentVolumeSource) ProtoMessage() {} +func (*PersistentVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } + +func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} } +func (*PersistentVolumeSpec) ProtoMessage() {} +func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} } + +func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} } +func (*PersistentVolumeStatus) ProtoMessage() {} +func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} } + +func (m *Pod) Reset() { *m = Pod{} } +func (*Pod) ProtoMessage() {} +func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} } + +func (m *PodAffinity) Reset() { *m = PodAffinity{} } +func (*PodAffinity) ProtoMessage() {} +func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{101} } + +func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} } +func (*PodAffinityTerm) ProtoMessage() {} +func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{102} } + +func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} } +func (*PodAntiAffinity) ProtoMessage() {} +func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{103} } + +func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} } +func (*PodAttachOptions) ProtoMessage() {} +func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{104} } + +func (m *PodCondition) Reset() { *m = PodCondition{} } +func (*PodCondition) ProtoMessage() {} +func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{105} } + +func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } +func (*PodExecOptions) ProtoMessage() {} +func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{106} } + +func (m *PodList) Reset() { *m = PodList{} } +func (*PodList) ProtoMessage() {} +func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} } + +func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } +func (*PodLogOptions) ProtoMessage() {} +func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } + +func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } +func (*PodProxyOptions) ProtoMessage() {} +func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } + +func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } +func (*PodSecurityContext) ProtoMessage() {} +func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } + +func (m *PodSignature) Reset() { *m = PodSignature{} } +func (*PodSignature) ProtoMessage() {} +func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } + +func (m *PodSpec) Reset() { *m = PodSpec{} } +func (*PodSpec) ProtoMessage() {} +func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } + +func (m *PodStatus) Reset() { *m = PodStatus{} } +func (*PodStatus) ProtoMessage() {} +func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } + +func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } +func (*PodStatusResult) ProtoMessage() {} +func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } + +func (m *PodTemplate) Reset() { *m = PodTemplate{} } +func (*PodTemplate) ProtoMessage() {} +func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{115} } + +func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } +func (*PodTemplateList) ProtoMessage() {} +func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{116} } + +func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } +func (*PodTemplateSpec) ProtoMessage() {} +func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{117} } + +func (m *Preconditions) Reset() { *m = Preconditions{} } +func (*Preconditions) ProtoMessage() {} +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } + +func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } +func (*PreferAvoidPodsEntry) ProtoMessage() {} +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } + +func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } +func (*PreferredSchedulingTerm) ProtoMessage() {} +func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{120} +} + +func (m *Probe) Reset() { *m = Probe{} } +func (*Probe) ProtoMessage() {} +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } + +func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } +func (*QuobyteVolumeSource) ProtoMessage() {} +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } + +func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } +func (*RBDVolumeSource) ProtoMessage() {} +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } + +func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } +func (*RangeAllocation) ProtoMessage() {} +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } + +func (m *ReplicationController) Reset() { *m = ReplicationController{} } +func (*ReplicationController) ProtoMessage() {} +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } + +func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } +func (*ReplicationControllerList) ProtoMessage() {} +func (*ReplicationControllerList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{126} +} + +func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } +func (*ReplicationControllerSpec) ProtoMessage() {} +func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{127} +} + +func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } +func (*ReplicationControllerStatus) ProtoMessage() {} +func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{128} +} + +func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } +func (*ResourceFieldSelector) ProtoMessage() {} +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } + +func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } +func (*ResourceQuota) ProtoMessage() {} +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } + +func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } +func (*ResourceQuotaList) ProtoMessage() {} +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } + +func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } +func (*ResourceQuotaSpec) ProtoMessage() {} +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } + +func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } +func (*ResourceQuotaStatus) ProtoMessage() {} +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } + +func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } +func (*ResourceRequirements) ProtoMessage() {} +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } + +func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } +func (*RunAsUserStrategyOptions) ProtoMessage() {} +func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{135} +} + +func (m *SELinuxContextStrategyOptions) Reset() { *m = SELinuxContextStrategyOptions{} } +func (*SELinuxContextStrategyOptions) ProtoMessage() {} +func (*SELinuxContextStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{136} +} + +func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } +func (*SELinuxOptions) ProtoMessage() {} +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } + +func (m *Secret) Reset() { *m = Secret{} } +func (*Secret) ProtoMessage() {} +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } + +func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } +func (*SecretKeySelector) ProtoMessage() {} +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } + +func (m *SecretList) Reset() { *m = SecretList{} } +func (*SecretList) ProtoMessage() {} +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } + +func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } +func (*SecretVolumeSource) ProtoMessage() {} +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } + +func (m *SecurityContext) Reset() { *m = SecurityContext{} } +func (*SecurityContext) ProtoMessage() {} +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } + +func (m *SecurityContextConstraints) Reset() { *m = SecurityContextConstraints{} } +func (*SecurityContextConstraints) ProtoMessage() {} +func (*SecurityContextConstraints) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{143} +} + +func (m *SecurityContextConstraintsList) Reset() { *m = SecurityContextConstraintsList{} } +func (*SecurityContextConstraintsList) ProtoMessage() {} +func (*SecurityContextConstraintsList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{144} +} + +func (m *SerializedReference) Reset() { *m = SerializedReference{} } +func (*SerializedReference) ProtoMessage() {} +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } + +func (m *Service) Reset() { *m = Service{} } +func (*Service) ProtoMessage() {} +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } + +func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } +func (*ServiceAccount) ProtoMessage() {} +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } + +func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } +func (*ServiceAccountList) ProtoMessage() {} +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } + +func (m *ServiceList) Reset() { *m = ServiceList{} } +func (*ServiceList) ProtoMessage() {} +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } + +func (m *ServicePort) Reset() { *m = ServicePort{} } +func (*ServicePort) ProtoMessage() {} +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } + +func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } +func (*ServiceProxyOptions) ProtoMessage() {} +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } + +func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } +func (*ServiceSpec) ProtoMessage() {} +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } + +func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } +func (*ServiceStatus) ProtoMessage() {} +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } + +func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } +func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} +func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{154} +} + +func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } +func (*TCPSocketAction) ProtoMessage() {} +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } + +func (m *Taint) Reset() { *m = Taint{} } +func (*Taint) ProtoMessage() {} +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } + +func (m *Toleration) Reset() { *m = Toleration{} } +func (*Toleration) ProtoMessage() {} +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } + +func (m *Volume) Reset() { *m = Volume{} } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } + +func (m *VolumeMount) Reset() { *m = VolumeMount{} } +func (*VolumeMount) ProtoMessage() {} +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } + +func (m *VolumeSource) Reset() { *m = VolumeSource{} } +func (*VolumeSource) ProtoMessage() {} +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } + +func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } +func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} +func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{161} +} + +func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } +func (*WeightedPodAffinityTerm) ProtoMessage() {} +func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{162} +} func init() { proto.RegisterType((*AWSElasticBlockStoreVolumeSource)(nil), "k8s.io.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource") proto.RegisterType((*Affinity)(nil), "k8s.io.kubernetes.pkg.api.v1.Affinity") proto.RegisterType((*AttachedVolume)(nil), "k8s.io.kubernetes.pkg.api.v1.AttachedVolume") + proto.RegisterType((*AvoidPods)(nil), "k8s.io.kubernetes.pkg.api.v1.AvoidPods") + proto.RegisterType((*AzureDiskVolumeSource)(nil), "k8s.io.kubernetes.pkg.api.v1.AzureDiskVolumeSource") proto.RegisterType((*AzureFileVolumeSource)(nil), "k8s.io.kubernetes.pkg.api.v1.AzureFileVolumeSource") proto.RegisterType((*Binding)(nil), "k8s.io.kubernetes.pkg.api.v1.Binding") proto.RegisterType((*Capabilities)(nil), "k8s.io.kubernetes.pkg.api.v1.Capabilities") @@ -945,6 +1024,7 @@ func init() { proto.RegisterType((*PodLogOptions)(nil), "k8s.io.kubernetes.pkg.api.v1.PodLogOptions") proto.RegisterType((*PodProxyOptions)(nil), "k8s.io.kubernetes.pkg.api.v1.PodProxyOptions") proto.RegisterType((*PodSecurityContext)(nil), "k8s.io.kubernetes.pkg.api.v1.PodSecurityContext") + proto.RegisterType((*PodSignature)(nil), "k8s.io.kubernetes.pkg.api.v1.PodSignature") proto.RegisterType((*PodSpec)(nil), "k8s.io.kubernetes.pkg.api.v1.PodSpec") proto.RegisterType((*PodStatus)(nil), "k8s.io.kubernetes.pkg.api.v1.PodStatus") proto.RegisterType((*PodStatusResult)(nil), "k8s.io.kubernetes.pkg.api.v1.PodStatusResult") @@ -952,8 +1032,10 @@ func init() { proto.RegisterType((*PodTemplateList)(nil), "k8s.io.kubernetes.pkg.api.v1.PodTemplateList") proto.RegisterType((*PodTemplateSpec)(nil), "k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec") proto.RegisterType((*Preconditions)(nil), "k8s.io.kubernetes.pkg.api.v1.Preconditions") + proto.RegisterType((*PreferAvoidPodsEntry)(nil), "k8s.io.kubernetes.pkg.api.v1.PreferAvoidPodsEntry") proto.RegisterType((*PreferredSchedulingTerm)(nil), "k8s.io.kubernetes.pkg.api.v1.PreferredSchedulingTerm") proto.RegisterType((*Probe)(nil), "k8s.io.kubernetes.pkg.api.v1.Probe") + proto.RegisterType((*QuobyteVolumeSource)(nil), "k8s.io.kubernetes.pkg.api.v1.QuobyteVolumeSource") proto.RegisterType((*RBDVolumeSource)(nil), "k8s.io.kubernetes.pkg.api.v1.RBDVolumeSource") proto.RegisterType((*RangeAllocation)(nil), "k8s.io.kubernetes.pkg.api.v1.RangeAllocation") proto.RegisterType((*ReplicationController)(nil), "k8s.io.kubernetes.pkg.api.v1.ReplicationController") @@ -1106,6 +1188,84 @@ func (m *AttachedVolume) MarshalTo(data []byte) (int, error) { return i, nil } +func (m *AvoidPods) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AvoidPods) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.PreferAvoidPods) > 0 { + for _, msg := range m.PreferAvoidPods { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *AzureDiskVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *AzureDiskVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.DiskName))) + i += copy(data[i:], m.DiskName) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.DataDiskURI))) + i += copy(data[i:], m.DataDiskURI) + if m.CachingMode != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(*m.CachingMode))) + i += copy(data[i:], *m.CachingMode) + } + if m.FSType != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(*m.FSType))) + i += copy(data[i:], *m.FSType) + } + if m.ReadOnly != nil { + data[i] = 0x28 + i++ + if *m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + } + return i, nil +} + func (m *AzureFileVolumeSource) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -1575,6 +1735,11 @@ func (m *ConfigMapVolumeSource) MarshalTo(data []byte) (int, error) { i += n } } + if m.DefaultMode != nil { + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) + } return i, nil } @@ -2148,6 +2313,11 @@ func (m *DeprecatedDownwardAPIVolumeFile) MarshalTo(data []byte) (int, error) { } i += n28 } + if m.Mode != nil { + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.Mode)) + } return i, nil } @@ -2178,6 +2348,11 @@ func (m *DeprecatedDownwardAPIVolumeSource) MarshalTo(data []byte) (int, error) i += n } } + if m.DefaultMode != nil { + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) + } return i, nil } @@ -2220,6 +2395,11 @@ func (m *DownwardAPIVolumeFile) MarshalTo(data []byte) (int, error) { } i += n30 } + if m.Mode != nil { + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.Mode)) + } return i, nil } @@ -2250,6 +2430,11 @@ func (m *DownwardAPIVolumeSource) MarshalTo(data []byte) (int, error) { i += n } } + if m.DefaultMode != nil { + data[i] = 0x10 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) + } return i, nil } @@ -2308,6 +2493,12 @@ func (m *EndpointAddress) MarshalTo(data []byte) (int, error) { i++ i = encodeVarintGenerated(data, i, uint64(len(m.Hostname))) i += copy(data[i:], m.Hostname) + if m.NodeName != nil { + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(*m.NodeName))) + i += copy(data[i:], *m.NodeName) + } return i, nil } @@ -3274,6 +3465,11 @@ func (m *KeyToPath) MarshalTo(data []byte) (int, error) { i++ i = encodeVarintGenerated(data, i, uint64(len(m.Path))) i += copy(data[i:], m.Path) + if m.Mode != nil { + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.Mode)) + } return i, nil } @@ -4615,6 +4811,10 @@ func (m *ObjectMeta) MarshalTo(data []byte) (int, error) { i += copy(data[i:], s) } } + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.ClusterName))) + i += copy(data[i:], m.ClusterName) return i, nil } @@ -5167,6 +5367,28 @@ func (m *PersistentVolumeSource) MarshalTo(data []byte) (int, error) { } i += n103 } + if m.Quobyte != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) + n104, err := m.Quobyte.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n104 + } + if m.AzureDisk != nil { + data[i] = 0x82 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.AzureDisk.Size())) + n105, err := m.AzureDisk.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n105 + } return i, nil } @@ -5200,21 +5422,21 @@ func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n104, err := (&v).MarshalTo(data[i:]) + n106, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n104 + i += n106 } } data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeSource.Size())) - n105, err := m.PersistentVolumeSource.MarshalTo(data[i:]) + n107, err := m.PersistentVolumeSource.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n105 + i += n107 if len(m.AccessModes) > 0 { for _, s := range m.AccessModes { data[i] = 0x1a @@ -5234,11 +5456,11 @@ func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.ClaimRef.Size())) - n106, err := m.ClaimRef.MarshalTo(data[i:]) + n108, err := m.ClaimRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n106 + i += n108 } data[i] = 0x2a i++ @@ -5295,27 +5517,27 @@ func (m *Pod) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n107, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n107 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n108, err := m.Spec.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n108 - data[i] = 0x1a - i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n109, err := m.Status.MarshalTo(data[i:]) + n109, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n109 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n110, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n110 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n111, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n111 return i, nil } @@ -5380,11 +5602,11 @@ func (m *PodAffinityTerm) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LabelSelector.Size())) - n110, err := m.LabelSelector.MarshalTo(data[i:]) + n112, err := m.LabelSelector.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n110 + i += n112 } if len(m.Namespaces) > 0 { for _, s := range m.Namespaces { @@ -5530,19 +5752,19 @@ func (m *PodCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastProbeTime.Size())) - n111, err := m.LastProbeTime.MarshalTo(data[i:]) + n113, err := m.LastProbeTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n111 + i += n113 data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n112, err := m.LastTransitionTime.MarshalTo(data[i:]) + n114, err := m.LastTransitionTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n112 + i += n114 data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -5641,11 +5863,11 @@ func (m *PodList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n113, err := m.ListMeta.MarshalTo(data[i:]) + n115, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n113 + i += n115 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -5705,11 +5927,11 @@ func (m *PodLogOptions) MarshalTo(data []byte) (int, error) { data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.SinceTime.Size())) - n114, err := m.SinceTime.MarshalTo(data[i:]) + n116, err := m.SinceTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n114 + i += n116 } data[i] = 0x30 i++ @@ -5773,11 +5995,11 @@ func (m *PodSecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n115, err := m.SELinuxOptions.MarshalTo(data[i:]) + n117, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n115 + i += n117 } if m.RunAsUser != nil { data[i] = 0x10 @@ -5809,6 +6031,34 @@ func (m *PodSecurityContext) MarshalTo(data []byte) (int, error) { return i, nil } +func (m *PodSignature) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PodSignature) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.PodController != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.PodController.Size())) + n118, err := m.PodController.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n118 + } + return i, nil +} + func (m *PodSpec) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -5923,11 +6173,11 @@ func (m *PodSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x72 i++ i = encodeVarintGenerated(data, i, uint64(m.SecurityContext.Size())) - n116, err := m.SecurityContext.MarshalTo(data[i:]) + n119, err := m.SecurityContext.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n116 + i += n119 } if len(m.ImagePullSecrets) > 0 { for _, msg := range m.ImagePullSecrets { @@ -5953,12 +6203,6 @@ func (m *PodSpec) MarshalTo(data []byte) (int, error) { i++ i = encodeVarintGenerated(data, i, uint64(len(m.Subdomain))) i += copy(data[i:], m.Subdomain) - data[i] = 0x92 - i++ - data[i] = 0x1 - i++ - i = encodeVarintGenerated(data, i, uint64(len(m.DeprecatedHost))) - i += copy(data[i:], m.DeprecatedHost) return i, nil } @@ -6013,11 +6257,11 @@ func (m *PodStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.StartTime.Size())) - n117, err := m.StartTime.MarshalTo(data[i:]) + n120, err := m.StartTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n117 + i += n120 } if len(m.ContainerStatuses) > 0 { for _, msg := range m.ContainerStatuses { @@ -6052,19 +6296,19 @@ func (m *PodStatusResult) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n118, err := m.ObjectMeta.MarshalTo(data[i:]) + n121, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n118 + i += n121 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n119, err := m.Status.MarshalTo(data[i:]) + n122, err := m.Status.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n119 + i += n122 return i, nil } @@ -6086,19 +6330,19 @@ func (m *PodTemplate) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n120, err := m.ObjectMeta.MarshalTo(data[i:]) + n123, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n120 + i += n123 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n121, err := m.Template.MarshalTo(data[i:]) + n124, err := m.Template.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n121 + i += n124 return i, nil } @@ -6120,11 +6364,11 @@ func (m *PodTemplateList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n122, err := m.ListMeta.MarshalTo(data[i:]) + n125, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n122 + i += n125 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6158,19 +6402,19 @@ func (m *PodTemplateSpec) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n123, err := m.ObjectMeta.MarshalTo(data[i:]) + n126, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n123 + i += n126 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n124, err := m.Spec.MarshalTo(data[i:]) + n127, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n124 + i += n127 return i, nil } @@ -6198,6 +6442,48 @@ func (m *Preconditions) MarshalTo(data []byte) (int, error) { return i, nil } +func (m *PreferAvoidPodsEntry) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PreferAvoidPodsEntry) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.PodSignature.Size())) + n128, err := m.PodSignature.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n128 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.EvictionTime.Size())) + n129, err := m.EvictionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n129 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + return i, nil +} + func (m *PreferredSchedulingTerm) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -6219,11 +6505,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Preference.Size())) - n125, err := m.Preference.MarshalTo(data[i:]) + n130, err := m.Preference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n125 + i += n130 return i, nil } @@ -6245,11 +6531,11 @@ func (m *Probe) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Handler.Size())) - n126, err := m.Handler.MarshalTo(data[i:]) + n131, err := m.Handler.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n126 + i += n131 data[i] = 0x10 i++ i = encodeVarintGenerated(data, i, uint64(m.InitialDelaySeconds)) @@ -6268,6 +6554,48 @@ func (m *Probe) MarshalTo(data []byte) (int, error) { return i, nil } +func (m *QuobyteVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *QuobyteVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Registry))) + i += copy(data[i:], m.Registry) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Volume))) + i += copy(data[i:], m.Volume) + data[i] = 0x18 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.User))) + i += copy(data[i:], m.User) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + return i, nil +} + func (m *RBDVolumeSource) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -6322,11 +6650,11 @@ func (m *RBDVolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) - n127, err := m.SecretRef.MarshalTo(data[i:]) + n132, err := m.SecretRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n127 + i += n132 } data[i] = 0x40 i++ @@ -6357,11 +6685,11 @@ func (m *RangeAllocation) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n128, err := m.ObjectMeta.MarshalTo(data[i:]) + n133, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n128 + i += n133 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Range))) @@ -6393,27 +6721,27 @@ func (m *ReplicationController) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n129, err := m.ObjectMeta.MarshalTo(data[i:]) + n134, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n129 + i += n134 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n130, err := m.Spec.MarshalTo(data[i:]) + n135, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n130 + i += n135 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n131, err := m.Status.MarshalTo(data[i:]) + n136, err := m.Status.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n131 + i += n136 return i, nil } @@ -6435,11 +6763,11 @@ func (m *ReplicationControllerList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n132, err := m.ListMeta.MarshalTo(data[i:]) + n137, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n132 + i += n137 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6496,11 +6824,11 @@ func (m *ReplicationControllerSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n133, err := m.Template.MarshalTo(data[i:]) + n138, err := m.Template.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n133 + i += n138 } return i, nil } @@ -6529,6 +6857,9 @@ func (m *ReplicationControllerStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x18 i++ i = encodeVarintGenerated(data, i, uint64(m.ObservedGeneration)) + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ReadyReplicas)) return i, nil } @@ -6558,11 +6889,11 @@ func (m *ResourceFieldSelector) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Divisor.Size())) - n134, err := m.Divisor.MarshalTo(data[i:]) + n139, err := m.Divisor.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n134 + i += n139 return i, nil } @@ -6584,27 +6915,27 @@ func (m *ResourceQuota) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n135, err := m.ObjectMeta.MarshalTo(data[i:]) + n140, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n135 + i += n140 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n136, err := m.Spec.MarshalTo(data[i:]) + n141, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n136 + i += n141 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n137, err := m.Status.MarshalTo(data[i:]) + n142, err := m.Status.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n137 + i += n142 return i, nil } @@ -6626,11 +6957,11 @@ func (m *ResourceQuotaList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n138, err := m.ListMeta.MarshalTo(data[i:]) + n143, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n138 + i += n143 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6676,11 +7007,11 @@ func (m *ResourceQuotaSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n139, err := (&v).MarshalTo(data[i:]) + n144, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n139 + i += n144 } } if len(m.Scopes) > 0 { @@ -6731,11 +7062,11 @@ func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n140, err := (&v).MarshalTo(data[i:]) + n145, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n140 + i += n145 } } if len(m.Used) > 0 { @@ -6753,11 +7084,11 @@ func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n141, err := (&v).MarshalTo(data[i:]) + n146, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n141 + i += n146 } } return i, nil @@ -6793,11 +7124,11 @@ func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n142, err := (&v).MarshalTo(data[i:]) + n147, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n142 + i += n147 } } if len(m.Requests) > 0 { @@ -6815,11 +7146,11 @@ func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n143, err := (&v).MarshalTo(data[i:]) + n148, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n143 + i += n148 } } return i, nil @@ -6885,11 +7216,11 @@ func (m *SELinuxContextStrategyOptions) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n144, err := m.SELinuxOptions.MarshalTo(data[i:]) + n149, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n144 + i += n149 } return i, nil } @@ -6946,11 +7277,11 @@ func (m *Secret) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n145, err := m.ObjectMeta.MarshalTo(data[i:]) + n150, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n145 + i += n150 if len(m.Data) > 0 { for k := range m.Data { data[i] = 0x12 @@ -6972,6 +7303,23 @@ func (m *Secret) MarshalTo(data []byte) (int, error) { i++ i = encodeVarintGenerated(data, i, uint64(len(m.Type))) i += copy(data[i:], m.Type) + if len(m.StringData) > 0 { + for k := range m.StringData { + data[i] = 0x22 + i++ + v := m.StringData[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } return i, nil } @@ -6993,11 +7341,11 @@ func (m *SecretKeySelector) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) - n146, err := m.LocalObjectReference.MarshalTo(data[i:]) + n151, err := m.LocalObjectReference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n146 + i += n151 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Key))) @@ -7023,11 +7371,11 @@ func (m *SecretList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n147, err := m.ListMeta.MarshalTo(data[i:]) + n152, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n147 + i += n152 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7074,6 +7422,11 @@ func (m *SecretVolumeSource) MarshalTo(data []byte) (int, error) { i += n } } + if m.DefaultMode != nil { + data[i] = 0x18 + i++ + i = encodeVarintGenerated(data, i, uint64(*m.DefaultMode)) + } return i, nil } @@ -7096,11 +7449,11 @@ func (m *SecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Capabilities.Size())) - n148, err := m.Capabilities.MarshalTo(data[i:]) + n153, err := m.Capabilities.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n148 + i += n153 } if m.Privileged != nil { data[i] = 0x10 @@ -7116,11 +7469,11 @@ func (m *SecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n149, err := m.SELinuxOptions.MarshalTo(data[i:]) + n154, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n149 + i += n154 } if m.RunAsUser != nil { data[i] = 0x20 @@ -7168,11 +7521,11 @@ func (m *SecurityContextConstraints) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n150, err := m.ObjectMeta.MarshalTo(data[i:]) + n155, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n150 + i += n155 if m.Priority != nil { data[i] = 0x10 i++ @@ -7289,37 +7642,37 @@ func (m *SecurityContextConstraints) MarshalTo(data []byte) (int, error) { data[i] = 0x6a i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxContext.Size())) - n151, err := m.SELinuxContext.MarshalTo(data[i:]) + n156, err := m.SELinuxContext.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n151 + i += n156 data[i] = 0x72 i++ i = encodeVarintGenerated(data, i, uint64(m.RunAsUser.Size())) - n152, err := m.RunAsUser.MarshalTo(data[i:]) + n157, err := m.RunAsUser.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n152 + i += n157 data[i] = 0x7a i++ i = encodeVarintGenerated(data, i, uint64(m.SupplementalGroups.Size())) - n153, err := m.SupplementalGroups.MarshalTo(data[i:]) + n158, err := m.SupplementalGroups.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n153 + i += n158 data[i] = 0x82 i++ data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.FSGroup.Size())) - n154, err := m.FSGroup.MarshalTo(data[i:]) + n159, err := m.FSGroup.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n154 + i += n159 data[i] = 0x88 i++ data[i] = 0x1 @@ -7364,6 +7717,23 @@ func (m *SecurityContextConstraints) MarshalTo(data []byte) (int, error) { i += copy(data[i:], s) } } + if len(m.SeccompProfiles) > 0 { + for _, s := range m.SeccompProfiles { + data[i] = 0xa2 + i++ + data[i] = 0x1 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } return i, nil } @@ -7385,11 +7755,11 @@ func (m *SecurityContextConstraintsList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n155, err := m.ListMeta.MarshalTo(data[i:]) + n160, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n155 + i += n160 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7423,11 +7793,11 @@ func (m *SerializedReference) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Reference.Size())) - n156, err := m.Reference.MarshalTo(data[i:]) + n161, err := m.Reference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n156 + i += n161 return i, nil } @@ -7449,27 +7819,27 @@ func (m *Service) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n157, err := m.ObjectMeta.MarshalTo(data[i:]) + n162, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n157 + i += n162 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n158, err := m.Spec.MarshalTo(data[i:]) + n163, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n158 + i += n163 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n159, err := m.Status.MarshalTo(data[i:]) + n164, err := m.Status.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n159 + i += n164 return i, nil } @@ -7491,11 +7861,11 @@ func (m *ServiceAccount) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n160, err := m.ObjectMeta.MarshalTo(data[i:]) + n165, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n160 + i += n165 if len(m.Secrets) > 0 { for _, msg := range m.Secrets { data[i] = 0x12 @@ -7541,11 +7911,11 @@ func (m *ServiceAccountList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n161, err := m.ListMeta.MarshalTo(data[i:]) + n166, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n161 + i += n166 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7579,11 +7949,11 @@ func (m *ServiceList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n162, err := m.ListMeta.MarshalTo(data[i:]) + n167, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n162 + i += n167 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7628,11 +7998,11 @@ func (m *ServicePort) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.TargetPort.Size())) - n163, err := m.TargetPort.MarshalTo(data[i:]) + n168, err := m.TargetPort.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n163 + i += n168 data[i] = 0x28 i++ i = encodeVarintGenerated(data, i, uint64(m.NodePort)) @@ -7768,8 +8138,8 @@ func (m *ServiceSpec) MarshalTo(data []byte) (int, error) { } data[i] = 0x52 i++ - i = encodeVarintGenerated(data, i, uint64(len(m.DeprecatedPortalIP))) - i += copy(data[i:], m.DeprecatedPortalIP) + i = encodeVarintGenerated(data, i, uint64(len(m.ExternalName))) + i += copy(data[i:], m.ExternalName) return i, nil } @@ -7791,11 +8161,11 @@ func (m *ServiceStatus) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LoadBalancer.Size())) - n164, err := m.LoadBalancer.MarshalTo(data[i:]) + n169, err := m.LoadBalancer.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n164 + i += n169 return i, nil } @@ -7851,11 +8221,11 @@ func (m *TCPSocketAction) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Port.Size())) - n165, err := m.Port.MarshalTo(data[i:]) + n170, err := m.Port.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n165 + i += n170 return i, nil } @@ -7945,11 +8315,11 @@ func (m *Volume) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.VolumeSource.Size())) - n166, err := m.VolumeSource.MarshalTo(data[i:]) + n171, err := m.VolumeSource.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n166 + i += n171 return i, nil } @@ -8010,163 +8380,163 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.HostPath.Size())) - n167, err := m.HostPath.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n167 - } - if m.EmptyDir != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) - n168, err := m.EmptyDir.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n168 - } - if m.GCEPersistentDisk != nil { - data[i] = 0x1a - i++ - i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) - n169, err := m.GCEPersistentDisk.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n169 - } - if m.AWSElasticBlockStore != nil { - data[i] = 0x22 - i++ - i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) - n170, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n170 - } - if m.GitRepo != nil { - data[i] = 0x2a - i++ - i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) - n171, err := m.GitRepo.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n171 - } - if m.Secret != nil { - data[i] = 0x32 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) - n172, err := m.Secret.MarshalTo(data[i:]) + n172, err := m.HostPath.MarshalTo(data[i:]) if err != nil { return 0, err } i += n172 } - if m.NFS != nil { - data[i] = 0x3a + if m.EmptyDir != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) - n173, err := m.NFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) + n173, err := m.EmptyDir.MarshalTo(data[i:]) if err != nil { return 0, err } i += n173 } - if m.ISCSI != nil { - data[i] = 0x42 + if m.GCEPersistentDisk != nil { + data[i] = 0x1a i++ - i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) - n174, err := m.ISCSI.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) + n174, err := m.GCEPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } i += n174 } - if m.Glusterfs != nil { - data[i] = 0x4a + if m.AWSElasticBlockStore != nil { + data[i] = 0x22 i++ - i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) - n175, err := m.Glusterfs.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) + n175, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) if err != nil { return 0, err } i += n175 } - if m.PersistentVolumeClaim != nil { - data[i] = 0x52 + if m.GitRepo != nil { + data[i] = 0x2a i++ - i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) - n176, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) + n176, err := m.GitRepo.MarshalTo(data[i:]) if err != nil { return 0, err } i += n176 } - if m.RBD != nil { - data[i] = 0x5a + if m.Secret != nil { + data[i] = 0x32 i++ - i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) - n177, err := m.RBD.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) + n177, err := m.Secret.MarshalTo(data[i:]) if err != nil { return 0, err } i += n177 } - if m.FlexVolume != nil { - data[i] = 0x62 + if m.NFS != nil { + data[i] = 0x3a i++ - i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) - n178, err := m.FlexVolume.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) + n178, err := m.NFS.MarshalTo(data[i:]) if err != nil { return 0, err } i += n178 } - if m.Cinder != nil { - data[i] = 0x6a + if m.ISCSI != nil { + data[i] = 0x42 i++ - i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) - n179, err := m.Cinder.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) + n179, err := m.ISCSI.MarshalTo(data[i:]) if err != nil { return 0, err } i += n179 } - if m.CephFS != nil { - data[i] = 0x72 + if m.Glusterfs != nil { + data[i] = 0x4a i++ - i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) - n180, err := m.CephFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) + n180, err := m.Glusterfs.MarshalTo(data[i:]) if err != nil { return 0, err } i += n180 } - if m.Flocker != nil { - data[i] = 0x7a + if m.PersistentVolumeClaim != nil { + data[i] = 0x52 i++ - i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) - n181, err := m.Flocker.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) + n181, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) if err != nil { return 0, err } i += n181 } + if m.RBD != nil { + data[i] = 0x5a + i++ + i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) + n182, err := m.RBD.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n182 + } + if m.FlexVolume != nil { + data[i] = 0x62 + i++ + i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) + n183, err := m.FlexVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n183 + } + if m.Cinder != nil { + data[i] = 0x6a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) + n184, err := m.Cinder.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n184 + } + if m.CephFS != nil { + data[i] = 0x72 + i++ + i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) + n185, err := m.CephFS.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n185 + } + if m.Flocker != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) + n186, err := m.Flocker.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n186 + } if m.DownwardAPI != nil { data[i] = 0x82 i++ data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) - n182, err := m.DownwardAPI.MarshalTo(data[i:]) + n187, err := m.DownwardAPI.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n182 + i += n187 } if m.FC != nil { data[i] = 0x8a @@ -8174,11 +8544,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.FC.Size())) - n183, err := m.FC.MarshalTo(data[i:]) + n188, err := m.FC.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n183 + i += n188 } if m.AzureFile != nil { data[i] = 0x92 @@ -8186,11 +8556,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.AzureFile.Size())) - n184, err := m.AzureFile.MarshalTo(data[i:]) + n189, err := m.AzureFile.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n184 + i += n189 } if m.ConfigMap != nil { data[i] = 0x9a @@ -8198,11 +8568,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) - n185, err := m.ConfigMap.MarshalTo(data[i:]) + n190, err := m.ConfigMap.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n185 + i += n190 } if m.VsphereVolume != nil { data[i] = 0xa2 @@ -8210,23 +8580,47 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.VsphereVolume.Size())) - n186, err := m.VsphereVolume.MarshalTo(data[i:]) + n191, err := m.VsphereVolume.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n186 + i += n191 } - if m.Metadata != nil { + if m.Quobyte != nil { data[i] = 0xaa i++ data[i] = 0x1 i++ - i = encodeVarintGenerated(data, i, uint64(m.Metadata.Size())) - n187, err := m.Metadata.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) + n192, err := m.Quobyte.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n187 + i += n192 + } + if m.AzureDisk != nil { + data[i] = 0xb2 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.AzureDisk.Size())) + n193, err := m.AzureDisk.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n193 + } + if m.Metadata != nil { + data[i] = 0xba + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Metadata.Size())) + n194, err := m.Metadata.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n194 } return i, nil } @@ -8278,11 +8672,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PodAffinityTerm.Size())) - n188, err := m.PodAffinityTerm.MarshalTo(data[i:]) + n195, err := m.PodAffinityTerm.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n188 + i += n195 return i, nil } @@ -8353,6 +8747,39 @@ func (m *AttachedVolume) Size() (n int) { return n } +func (m *AvoidPods) Size() (n int) { + var l int + _ = l + if len(m.PreferAvoidPods) > 0 { + for _, e := range m.PreferAvoidPods { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *AzureDiskVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.DiskName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.DataDiskURI) + n += 1 + l + sovGenerated(uint64(l)) + if m.CachingMode != nil { + l = len(*m.CachingMode) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.FSType != nil { + l = len(*m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.ReadOnly != nil { + n += 2 + } + return n +} + func (m *AzureFileVolumeSource) Size() (n int) { var l int _ = l @@ -8519,6 +8946,9 @@ func (m *ConfigMapVolumeSource) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } return n } @@ -8726,6 +9156,9 @@ func (m *DeprecatedDownwardAPIVolumeFile) Size() (n int) { l = m.ResourceFieldRef.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Mode != nil { + n += 1 + sovGenerated(uint64(*m.Mode)) + } return n } @@ -8738,6 +9171,9 @@ func (m *DeprecatedDownwardAPIVolumeSource) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } return n } @@ -8754,6 +9190,9 @@ func (m *DownwardAPIVolumeFile) Size() (n int) { l = m.ResourceFieldRef.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Mode != nil { + n += 1 + sovGenerated(uint64(*m.Mode)) + } return n } @@ -8766,6 +9205,9 @@ func (m *DownwardAPIVolumeSource) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } return n } @@ -8788,6 +9230,10 @@ func (m *EndpointAddress) Size() (n int) { } l = len(m.Hostname) n += 1 + l + sovGenerated(uint64(l)) + if m.NodeName != nil { + l = len(*m.NodeName) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -9142,6 +9588,9 @@ func (m *KeyToPath) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Path) n += 1 + l + sovGenerated(uint64(l)) + if m.Mode != nil { + n += 1 + sovGenerated(uint64(*m.Mode)) + } return n } @@ -9653,6 +10102,8 @@ func (m *ObjectMeta) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + l = len(m.ClusterName) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -9856,6 +10307,14 @@ func (m *PersistentVolumeSource) Size() (n int) { l = m.VsphereVolume.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Quobyte != nil { + l = m.Quobyte.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.AzureDisk != nil { + l = m.AzureDisk.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -10084,6 +10543,16 @@ func (m *PodSecurityContext) Size() (n int) { return n } +func (m *PodSignature) Size() (n int) { + var l int + _ = l + if m.PodController != nil { + l = m.PodController.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *PodSpec) Size() (n int) { var l int _ = l @@ -10140,8 +10609,6 @@ func (m *PodSpec) Size() (n int) { n += 2 + l + sovGenerated(uint64(l)) l = len(m.Subdomain) n += 2 + l + sovGenerated(uint64(l)) - l = len(m.DeprecatedHost) - n += 2 + l + sovGenerated(uint64(l)) return n } @@ -10231,6 +10698,20 @@ func (m *Preconditions) Size() (n int) { return n } +func (m *PreferAvoidPodsEntry) Size() (n int) { + var l int + _ = l + l = m.PodSignature.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.EvictionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *PreferredSchedulingTerm) Size() (n int) { var l int _ = l @@ -10253,6 +10734,21 @@ func (m *Probe) Size() (n int) { return n } +func (m *QuobyteVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Registry) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Volume) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + func (m *RBDVolumeSource) Size() (n int) { var l int _ = l @@ -10347,6 +10843,7 @@ func (m *ReplicationControllerStatus) Size() (n int) { n += 1 + sovGenerated(uint64(m.Replicas)) n += 1 + sovGenerated(uint64(m.FullyLabeledReplicas)) n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + n += 1 + sovGenerated(uint64(m.ReadyReplicas)) return n } @@ -10515,6 +11012,14 @@ func (m *Secret) Size() (n int) { } l = len(m.Type) n += 1 + l + sovGenerated(uint64(l)) + if len(m.StringData) > 0 { + for k, v := range m.StringData { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } return n } @@ -10553,6 +11058,9 @@ func (m *SecretVolumeSource) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } + if m.DefaultMode != nil { + n += 1 + sovGenerated(uint64(*m.DefaultMode)) + } return n } @@ -10641,6 +11149,12 @@ func (m *SecurityContextConstraints) Size() (n int) { n += 2 + l + sovGenerated(uint64(l)) } } + if len(m.SeccompProfiles) > 0 { + for _, s := range m.SeccompProfiles { + l = len(s) + n += 2 + l + sovGenerated(uint64(l)) + } + } return n } @@ -10791,7 +11305,7 @@ func (m *ServiceSpec) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } - l = len(m.DeprecatedPortalIP) + l = len(m.ExternalName) n += 1 + l + sovGenerated(uint64(l)) return n } @@ -10958,6 +11472,14 @@ func (m *VolumeSource) Size() (n int) { l = m.VsphereVolume.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.Quobyte != nil { + l = m.Quobyte.Size() + n += 2 + l + sovGenerated(uint64(l)) + } + if m.AzureDisk != nil { + l = m.AzureDisk.Size() + n += 2 + l + sovGenerated(uint64(l)) + } if m.Metadata != nil { l = m.Metadata.Size() n += 2 + l + sovGenerated(uint64(l)) @@ -10997,6 +11519,2307 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *AWSElasticBlockStoreVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AWSElasticBlockStoreVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `Partition:` + fmt.Sprintf("%v", this.Partition) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Affinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Affinity{`, + `NodeAffinity:` + strings.Replace(fmt.Sprintf("%v", this.NodeAffinity), "NodeAffinity", "NodeAffinity", 1) + `,`, + `PodAffinity:` + strings.Replace(fmt.Sprintf("%v", this.PodAffinity), "PodAffinity", "PodAffinity", 1) + `,`, + `PodAntiAffinity:` + strings.Replace(fmt.Sprintf("%v", this.PodAntiAffinity), "PodAntiAffinity", "PodAntiAffinity", 1) + `,`, + `}`, + }, "") + return s +} +func (this *AttachedVolume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AttachedVolume{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `DevicePath:` + fmt.Sprintf("%v", this.DevicePath) + `,`, + `}`, + }, "") + return s +} +func (this *AvoidPods) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AvoidPods{`, + `PreferAvoidPods:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferAvoidPods), "PreferAvoidPodsEntry", "PreferAvoidPodsEntry", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *AzureDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AzureDiskVolumeSource{`, + `DiskName:` + fmt.Sprintf("%v", this.DiskName) + `,`, + `DataDiskURI:` + fmt.Sprintf("%v", this.DataDiskURI) + `,`, + `CachingMode:` + valueToStringGenerated(this.CachingMode) + `,`, + `FSType:` + valueToStringGenerated(this.FSType) + `,`, + `ReadOnly:` + valueToStringGenerated(this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *AzureFileVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&AzureFileVolumeSource{`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `ShareName:` + fmt.Sprintf("%v", this.ShareName) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Binding) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Binding{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Target:` + strings.Replace(strings.Replace(this.Target.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Capabilities) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Capabilities{`, + `Add:` + fmt.Sprintf("%v", this.Add) + `,`, + `Drop:` + fmt.Sprintf("%v", this.Drop) + `,`, + `}`, + }, "") + return s +} +func (this *CephFSVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CephFSVolumeSource{`, + `Monitors:` + fmt.Sprintf("%v", this.Monitors) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `SecretFile:` + fmt.Sprintf("%v", this.SecretFile) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *CinderVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CinderVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *ComponentCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ComponentCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Error:` + fmt.Sprintf("%v", this.Error) + `,`, + `}`, + }, "") + return s +} +func (this *ComponentStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ComponentStatus{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "ComponentCondition", "ComponentCondition", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ComponentStatusList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ComponentStatusList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ComponentStatus", "ComponentStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMap) String() string { + if this == nil { + return "nil" + } + keysForData := make([]string, 0, len(this.Data)) + for k := range this.Data { + keysForData = append(keysForData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForData) + mapStringForData := "map[string]string{" + for _, k := range keysForData { + mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) + } + mapStringForData += "}" + s := strings.Join([]string{`&ConfigMap{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + mapStringForData + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapKeySelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapKeySelector{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ConfigMap", "ConfigMap", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ConfigMapVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ConfigMapVolumeSource{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *Container) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Container{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `Args:` + fmt.Sprintf("%v", this.Args) + `,`, + `WorkingDir:` + fmt.Sprintf("%v", this.WorkingDir) + `,`, + `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "ContainerPort", "ContainerPort", 1), `&`, ``, 1) + `,`, + `Env:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Env), "EnvVar", "EnvVar", 1), `&`, ``, 1) + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, + `VolumeMounts:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeMounts), "VolumeMount", "VolumeMount", 1), `&`, ``, 1) + `,`, + `LivenessProbe:` + strings.Replace(fmt.Sprintf("%v", this.LivenessProbe), "Probe", "Probe", 1) + `,`, + `ReadinessProbe:` + strings.Replace(fmt.Sprintf("%v", this.ReadinessProbe), "Probe", "Probe", 1) + `,`, + `Lifecycle:` + strings.Replace(fmt.Sprintf("%v", this.Lifecycle), "Lifecycle", "Lifecycle", 1) + `,`, + `TerminationMessagePath:` + fmt.Sprintf("%v", this.TerminationMessagePath) + `,`, + `ImagePullPolicy:` + fmt.Sprintf("%v", this.ImagePullPolicy) + `,`, + `SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "SecurityContext", "SecurityContext", 1) + `,`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `StdinOnce:` + fmt.Sprintf("%v", this.StdinOnce) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerImage) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerImage{`, + `Names:` + fmt.Sprintf("%v", this.Names) + `,`, + `SizeBytes:` + fmt.Sprintf("%v", this.SizeBytes) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerPort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerPort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `HostPort:` + fmt.Sprintf("%v", this.HostPort) + `,`, + `ContainerPort:` + fmt.Sprintf("%v", this.ContainerPort) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerState) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerState{`, + `Waiting:` + strings.Replace(fmt.Sprintf("%v", this.Waiting), "ContainerStateWaiting", "ContainerStateWaiting", 1) + `,`, + `Running:` + strings.Replace(fmt.Sprintf("%v", this.Running), "ContainerStateRunning", "ContainerStateRunning", 1) + `,`, + `Terminated:` + strings.Replace(fmt.Sprintf("%v", this.Terminated), "ContainerStateTerminated", "ContainerStateTerminated", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateRunning) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateRunning{`, + `StartedAt:` + strings.Replace(strings.Replace(this.StartedAt.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateTerminated) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateTerminated{`, + `ExitCode:` + fmt.Sprintf("%v", this.ExitCode) + `,`, + `Signal:` + fmt.Sprintf("%v", this.Signal) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `StartedAt:` + strings.Replace(strings.Replace(this.StartedAt.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `FinishedAt:` + strings.Replace(strings.Replace(this.FinishedAt.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStateWaiting) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStateWaiting{`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *ContainerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ContainerStatus{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `State:` + strings.Replace(strings.Replace(this.State.String(), "ContainerState", "ContainerState", 1), `&`, ``, 1) + `,`, + `LastTerminationState:` + strings.Replace(strings.Replace(this.LastTerminationState.String(), "ContainerState", "ContainerState", 1), `&`, ``, 1) + `,`, + `Ready:` + fmt.Sprintf("%v", this.Ready) + `,`, + `RestartCount:` + fmt.Sprintf("%v", this.RestartCount) + `,`, + `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `ImageID:` + fmt.Sprintf("%v", this.ImageID) + `,`, + `ContainerID:` + fmt.Sprintf("%v", this.ContainerID) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonEndpoint) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonEndpoint{`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `}`, + }, "") + return s +} +func (this *DeleteOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeleteOptions{`, + `GracePeriodSeconds:` + valueToStringGenerated(this.GracePeriodSeconds) + `,`, + `Preconditions:` + strings.Replace(fmt.Sprintf("%v", this.Preconditions), "Preconditions", "Preconditions", 1) + `,`, + `OrphanDependents:` + valueToStringGenerated(this.OrphanDependents) + `,`, + `}`, + }, "") + return s +} +func (this *DeprecatedDownwardAPIVolumeFile) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeprecatedDownwardAPIVolumeFile{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `FieldRef:` + strings.Replace(fmt.Sprintf("%v", this.FieldRef), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, + `ResourceFieldRef:` + strings.Replace(fmt.Sprintf("%v", this.ResourceFieldRef), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, + `Mode:` + valueToStringGenerated(this.Mode) + `,`, + `}`, + }, "") + return s +} +func (this *DeprecatedDownwardAPIVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeprecatedDownwardAPIVolumeSource{`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DeprecatedDownwardAPIVolumeFile", "DeprecatedDownwardAPIVolumeFile", 1), `&`, ``, 1) + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *DownwardAPIVolumeFile) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DownwardAPIVolumeFile{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `FieldRef:` + strings.Replace(fmt.Sprintf("%v", this.FieldRef), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, + `ResourceFieldRef:` + strings.Replace(fmt.Sprintf("%v", this.ResourceFieldRef), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, + `Mode:` + valueToStringGenerated(this.Mode) + `,`, + `}`, + }, "") + return s +} +func (this *DownwardAPIVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DownwardAPIVolumeSource{`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DownwardAPIVolumeFile", "DownwardAPIVolumeFile", 1), `&`, ``, 1) + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *EmptyDirVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EmptyDirVolumeSource{`, + `Medium:` + fmt.Sprintf("%v", this.Medium) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointAddress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointAddress{`, + `IP:` + fmt.Sprintf("%v", this.IP) + `,`, + `TargetRef:` + strings.Replace(fmt.Sprintf("%v", this.TargetRef), "ObjectReference", "ObjectReference", 1) + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `NodeName:` + valueToStringGenerated(this.NodeName) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointPort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointPort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointSubset) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointSubset{`, + `Addresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Addresses), "EndpointAddress", "EndpointAddress", 1), `&`, ``, 1) + `,`, + `NotReadyAddresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.NotReadyAddresses), "EndpointAddress", "EndpointAddress", 1), `&`, ``, 1) + `,`, + `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "EndpointPort", "EndpointPort", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Endpoints) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Endpoints{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subsets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subsets), "EndpointSubset", "EndpointSubset", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *EndpointsList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EndpointsList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Endpoints", "Endpoints", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *EnvVar) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EnvVar{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `ValueFrom:` + strings.Replace(fmt.Sprintf("%v", this.ValueFrom), "EnvVarSource", "EnvVarSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *EnvVarSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EnvVarSource{`, + `FieldRef:` + strings.Replace(fmt.Sprintf("%v", this.FieldRef), "ObjectFieldSelector", "ObjectFieldSelector", 1) + `,`, + `ResourceFieldRef:` + strings.Replace(fmt.Sprintf("%v", this.ResourceFieldRef), "ResourceFieldSelector", "ResourceFieldSelector", 1) + `,`, + `ConfigMapKeyRef:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMapKeyRef), "ConfigMapKeySelector", "ConfigMapKeySelector", 1) + `,`, + `SecretKeyRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretKeyRef), "SecretKeySelector", "SecretKeySelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Event) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Event{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `InvolvedObject:` + strings.Replace(strings.Replace(this.InvolvedObject.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Source:` + strings.Replace(strings.Replace(this.Source.String(), "EventSource", "EventSource", 1), `&`, ``, 1) + `,`, + `FirstTimestamp:` + strings.Replace(strings.Replace(this.FirstTimestamp.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTimestamp:` + strings.Replace(strings.Replace(this.LastTimestamp.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Count:` + fmt.Sprintf("%v", this.Count) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `}`, + }, "") + return s +} +func (this *EventList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EventList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Event", "Event", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *EventSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&EventSource{`, + `Component:` + fmt.Sprintf("%v", this.Component) + `,`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `}`, + }, "") + return s +} +func (this *ExecAction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExecAction{`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `}`, + }, "") + return s +} +func (this *ExportOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExportOptions{`, + `Export:` + fmt.Sprintf("%v", this.Export) + `,`, + `Exact:` + fmt.Sprintf("%v", this.Exact) + `,`, + `}`, + }, "") + return s +} +func (this *FCVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FCVolumeSource{`, + `TargetWWNs:` + fmt.Sprintf("%v", this.TargetWWNs) + `,`, + `Lun:` + valueToStringGenerated(this.Lun) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *FSGroupStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FSGroupStrategyOptions{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *FlexVolumeSource) String() string { + if this == nil { + return "nil" + } + keysForOptions := make([]string, 0, len(this.Options)) + for k := range this.Options { + keysForOptions = append(keysForOptions, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) + mapStringForOptions := "map[string]string{" + for _, k := range keysForOptions { + mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) + } + mapStringForOptions += "}" + s := strings.Join([]string{`&FlexVolumeSource{`, + `Driver:` + fmt.Sprintf("%v", this.Driver) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `Options:` + mapStringForOptions + `,`, + `}`, + }, "") + return s +} +func (this *FlockerVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FlockerVolumeSource{`, + `DatasetName:` + fmt.Sprintf("%v", this.DatasetName) + `,`, + `}`, + }, "") + return s +} +func (this *GCEPersistentDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GCEPersistentDiskVolumeSource{`, + `PDName:` + fmt.Sprintf("%v", this.PDName) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `Partition:` + fmt.Sprintf("%v", this.Partition) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *GitRepoVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GitRepoVolumeSource{`, + `Repository:` + fmt.Sprintf("%v", this.Repository) + `,`, + `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, + `Directory:` + fmt.Sprintf("%v", this.Directory) + `,`, + `}`, + }, "") + return s +} +func (this *GlusterfsVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&GlusterfsVolumeSource{`, + `EndpointsName:` + fmt.Sprintf("%v", this.EndpointsName) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPGetAction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPGetAction{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Port:` + strings.Replace(strings.Replace(this.Port.String(), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `Scheme:` + fmt.Sprintf("%v", this.Scheme) + `,`, + `HTTPHeaders:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.HTTPHeaders), "HTTPHeader", "HTTPHeader", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPHeader) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPHeader{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `}`, + }, "") + return s +} +func (this *Handler) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Handler{`, + `Exec:` + strings.Replace(fmt.Sprintf("%v", this.Exec), "ExecAction", "ExecAction", 1) + `,`, + `HTTPGet:` + strings.Replace(fmt.Sprintf("%v", this.HTTPGet), "HTTPGetAction", "HTTPGetAction", 1) + `,`, + `TCPSocket:` + strings.Replace(fmt.Sprintf("%v", this.TCPSocket), "TCPSocketAction", "TCPSocketAction", 1) + `,`, + `}`, + }, "") + return s +} +func (this *HostPathVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HostPathVolumeSource{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *IDRange) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IDRange{`, + `Min:` + fmt.Sprintf("%v", this.Min) + `,`, + `Max:` + fmt.Sprintf("%v", this.Max) + `,`, + `}`, + }, "") + return s +} +func (this *ISCSIVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ISCSIVolumeSource{`, + `TargetPortal:` + fmt.Sprintf("%v", this.TargetPortal) + `,`, + `IQN:` + fmt.Sprintf("%v", this.IQN) + `,`, + `Lun:` + fmt.Sprintf("%v", this.Lun) + `,`, + `ISCSIInterface:` + fmt.Sprintf("%v", this.ISCSIInterface) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *KeyToPath) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KeyToPath{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Mode:` + valueToStringGenerated(this.Mode) + `,`, + `}`, + }, "") + return s +} +func (this *Lifecycle) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Lifecycle{`, + `PostStart:` + strings.Replace(fmt.Sprintf("%v", this.PostStart), "Handler", "Handler", 1) + `,`, + `PreStop:` + strings.Replace(fmt.Sprintf("%v", this.PreStop), "Handler", "Handler", 1) + `,`, + `}`, + }, "") + return s +} +func (this *LimitRange) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LimitRange{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "LimitRangeSpec", "LimitRangeSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeItem) String() string { + if this == nil { + return "nil" + } + keysForMax := make([]string, 0, len(this.Max)) + for k := range this.Max { + keysForMax = append(keysForMax, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMax) + mapStringForMax := "ResourceList{" + for _, k := range keysForMax { + mapStringForMax += fmt.Sprintf("%v: %v,", k, this.Max[ResourceName(k)]) + } + mapStringForMax += "}" + keysForMin := make([]string, 0, len(this.Min)) + for k := range this.Min { + keysForMin = append(keysForMin, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMin) + mapStringForMin := "ResourceList{" + for _, k := range keysForMin { + mapStringForMin += fmt.Sprintf("%v: %v,", k, this.Min[ResourceName(k)]) + } + mapStringForMin += "}" + keysForDefault := make([]string, 0, len(this.Default)) + for k := range this.Default { + keysForDefault = append(keysForDefault, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDefault) + mapStringForDefault := "ResourceList{" + for _, k := range keysForDefault { + mapStringForDefault += fmt.Sprintf("%v: %v,", k, this.Default[ResourceName(k)]) + } + mapStringForDefault += "}" + keysForDefaultRequest := make([]string, 0, len(this.DefaultRequest)) + for k := range this.DefaultRequest { + keysForDefaultRequest = append(keysForDefaultRequest, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForDefaultRequest) + mapStringForDefaultRequest := "ResourceList{" + for _, k := range keysForDefaultRequest { + mapStringForDefaultRequest += fmt.Sprintf("%v: %v,", k, this.DefaultRequest[ResourceName(k)]) + } + mapStringForDefaultRequest += "}" + keysForMaxLimitRequestRatio := make([]string, 0, len(this.MaxLimitRequestRatio)) + for k := range this.MaxLimitRequestRatio { + keysForMaxLimitRequestRatio = append(keysForMaxLimitRequestRatio, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMaxLimitRequestRatio) + mapStringForMaxLimitRequestRatio := "ResourceList{" + for _, k := range keysForMaxLimitRequestRatio { + mapStringForMaxLimitRequestRatio += fmt.Sprintf("%v: %v,", k, this.MaxLimitRequestRatio[ResourceName(k)]) + } + mapStringForMaxLimitRequestRatio += "}" + s := strings.Join([]string{`&LimitRangeItem{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Max:` + mapStringForMax + `,`, + `Min:` + mapStringForMin + `,`, + `Default:` + mapStringForDefault + `,`, + `DefaultRequest:` + mapStringForDefaultRequest + `,`, + `MaxLimitRequestRatio:` + mapStringForMaxLimitRequestRatio + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LimitRangeList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "LimitRange", "LimitRange", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LimitRangeSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LimitRangeSpec{`, + `Limits:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Limits), "LimitRangeItem", "LimitRangeItem", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *List) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&List{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RawExtension", "k8s_io_kubernetes_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ListOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ListOptions{`, + `LabelSelector:` + fmt.Sprintf("%v", this.LabelSelector) + `,`, + `FieldSelector:` + fmt.Sprintf("%v", this.FieldSelector) + `,`, + `Watch:` + fmt.Sprintf("%v", this.Watch) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *LoadBalancerIngress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LoadBalancerIngress{`, + `IP:` + fmt.Sprintf("%v", this.IP) + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `}`, + }, "") + return s +} +func (this *LoadBalancerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LoadBalancerStatus{`, + `Ingress:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ingress), "LoadBalancerIngress", "LoadBalancerIngress", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LocalObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LocalObjectReference{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *NFSVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NFSVolumeSource{`, + `Server:` + fmt.Sprintf("%v", this.Server) + `,`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *Namespace) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Namespace{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NamespaceSpec", "NamespaceSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NamespaceStatus", "NamespaceStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespaceList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Namespace", "Namespace", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespaceSpec{`, + `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, + `}`, + }, "") + return s +} +func (this *NamespaceStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NamespaceStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `}`, + }, "") + return s +} +func (this *Node) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Node{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NodeSpec", "NodeSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "NodeStatus", "NodeStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeAddress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeAddress{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Address:` + fmt.Sprintf("%v", this.Address) + `,`, + `}`, + }, "") + return s +} +func (this *NodeAffinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "NodeSelector", "NodeSelector", 1) + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "PreferredSchedulingTerm", "PreferredSchedulingTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastHeartbeatTime:` + strings.Replace(strings.Replace(this.LastHeartbeatTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *NodeDaemonEndpoints) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeDaemonEndpoints{`, + `KubeletEndpoint:` + strings.Replace(strings.Replace(this.KubeletEndpoint.String(), "DaemonEndpoint", "DaemonEndpoint", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Node", "Node", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSelector{`, + `NodeSelectorTerms:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.NodeSelectorTerms), "NodeSelectorTerm", "NodeSelectorTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSelectorRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSelectorTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSelectorTerm{`, + `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "NodeSelectorRequirement", "NodeSelectorRequirement", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSpec{`, + `PodCIDR:` + fmt.Sprintf("%v", this.PodCIDR) + `,`, + `ExternalID:` + fmt.Sprintf("%v", this.ExternalID) + `,`, + `ProviderID:` + fmt.Sprintf("%v", this.ProviderID) + `,`, + `Unschedulable:` + fmt.Sprintf("%v", this.Unschedulable) + `,`, + `}`, + }, "") + return s +} +func (this *NodeStatus) String() string { + if this == nil { + return "nil" + } + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + keysForAllocatable := make([]string, 0, len(this.Allocatable)) + for k := range this.Allocatable { + keysForAllocatable = append(keysForAllocatable, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) + mapStringForAllocatable := "ResourceList{" + for _, k := range keysForAllocatable { + mapStringForAllocatable += fmt.Sprintf("%v: %v,", k, this.Allocatable[ResourceName(k)]) + } + mapStringForAllocatable += "}" + s := strings.Join([]string{`&NodeStatus{`, + `Capacity:` + mapStringForCapacity + `,`, + `Allocatable:` + mapStringForAllocatable + `,`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "NodeCondition", "NodeCondition", 1), `&`, ``, 1) + `,`, + `Addresses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Addresses), "NodeAddress", "NodeAddress", 1), `&`, ``, 1) + `,`, + `DaemonEndpoints:` + strings.Replace(strings.Replace(this.DaemonEndpoints.String(), "NodeDaemonEndpoints", "NodeDaemonEndpoints", 1), `&`, ``, 1) + `,`, + `NodeInfo:` + strings.Replace(strings.Replace(this.NodeInfo.String(), "NodeSystemInfo", "NodeSystemInfo", 1), `&`, ``, 1) + `,`, + `Images:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Images), "ContainerImage", "ContainerImage", 1), `&`, ``, 1) + `,`, + `VolumesInUse:` + fmt.Sprintf("%v", this.VolumesInUse) + `,`, + `VolumesAttached:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumesAttached), "AttachedVolume", "AttachedVolume", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NodeSystemInfo) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NodeSystemInfo{`, + `MachineID:` + fmt.Sprintf("%v", this.MachineID) + `,`, + `SystemUUID:` + fmt.Sprintf("%v", this.SystemUUID) + `,`, + `BootID:` + fmt.Sprintf("%v", this.BootID) + `,`, + `KernelVersion:` + fmt.Sprintf("%v", this.KernelVersion) + `,`, + `OSImage:` + fmt.Sprintf("%v", this.OSImage) + `,`, + `ContainerRuntimeVersion:` + fmt.Sprintf("%v", this.ContainerRuntimeVersion) + `,`, + `KubeletVersion:` + fmt.Sprintf("%v", this.KubeletVersion) + `,`, + `KubeProxyVersion:` + fmt.Sprintf("%v", this.KubeProxyVersion) + `,`, + `OperatingSystem:` + fmt.Sprintf("%v", this.OperatingSystem) + `,`, + `Architecture:` + fmt.Sprintf("%v", this.Architecture) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectFieldSelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectFieldSelector{`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `FieldPath:` + fmt.Sprintf("%v", this.FieldPath) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectMeta) String() string { + if this == nil { + return "nil" + } + keysForLabels := make([]string, 0, len(this.Labels)) + for k := range this.Labels { + keysForLabels = append(keysForLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLabels) + mapStringForLabels := "map[string]string{" + for _, k := range keysForLabels { + mapStringForLabels += fmt.Sprintf("%v: %v,", k, this.Labels[k]) + } + mapStringForLabels += "}" + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" + s := strings.Join([]string{`&ObjectMeta{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `GenerateName:` + fmt.Sprintf("%v", this.GenerateName) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `SelfLink:` + fmt.Sprintf("%v", this.SelfLink) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `Generation:` + fmt.Sprintf("%v", this.Generation) + `,`, + `CreationTimestamp:` + strings.Replace(strings.Replace(this.CreationTimestamp.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `DeletionTimestamp:` + strings.Replace(fmt.Sprintf("%v", this.DeletionTimestamp), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `DeletionGracePeriodSeconds:` + valueToStringGenerated(this.DeletionGracePeriodSeconds) + `,`, + `Labels:` + mapStringForLabels + `,`, + `Annotations:` + mapStringForAnnotations + `,`, + `OwnerReferences:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.OwnerReferences), "OwnerReference", "OwnerReference", 1), `&`, ``, 1) + `,`, + `Finalizers:` + fmt.Sprintf("%v", this.Finalizers) + `,`, + `ClusterName:` + fmt.Sprintf("%v", this.ClusterName) + `,`, + `}`, + }, "") + return s +} +func (this *ObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ObjectReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `FieldPath:` + fmt.Sprintf("%v", this.FieldPath) + `,`, + `}`, + }, "") + return s +} +func (this *OwnerReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&OwnerReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Controller:` + valueToStringGenerated(this.Controller) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolume{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PersistentVolumeSpec", "PersistentVolumeSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PersistentVolumeStatus", "PersistentVolumeStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaim) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaim{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PersistentVolumeClaimSpec", "PersistentVolumeClaimSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PersistentVolumeClaimStatus", "PersistentVolumeClaimStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PersistentVolumeClaim", "PersistentVolumeClaim", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimSpec{`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `Resources:` + strings.Replace(strings.Replace(this.Resources.String(), "ResourceRequirements", "ResourceRequirements", 1), `&`, ``, 1) + `,`, + `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_kubernetes_pkg_api_unversioned.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimStatus) String() string { + if this == nil { + return "nil" + } + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + s := strings.Join([]string{`&PersistentVolumeClaimStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `Capacity:` + mapStringForCapacity + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeClaimVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeClaimVolumeSource{`, + `ClaimName:` + fmt.Sprintf("%v", this.ClaimName) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PersistentVolume", "PersistentVolume", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeSource{`, + `GCEPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.GCEPersistentDisk), "GCEPersistentDiskVolumeSource", "GCEPersistentDiskVolumeSource", 1) + `,`, + `AWSElasticBlockStore:` + strings.Replace(fmt.Sprintf("%v", this.AWSElasticBlockStore), "AWSElasticBlockStoreVolumeSource", "AWSElasticBlockStoreVolumeSource", 1) + `,`, + `HostPath:` + strings.Replace(fmt.Sprintf("%v", this.HostPath), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, + `Glusterfs:` + strings.Replace(fmt.Sprintf("%v", this.Glusterfs), "GlusterfsVolumeSource", "GlusterfsVolumeSource", 1) + `,`, + `NFS:` + strings.Replace(fmt.Sprintf("%v", this.NFS), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, + `RBD:` + strings.Replace(fmt.Sprintf("%v", this.RBD), "RBDVolumeSource", "RBDVolumeSource", 1) + `,`, + `ISCSI:` + strings.Replace(fmt.Sprintf("%v", this.ISCSI), "ISCSIVolumeSource", "ISCSIVolumeSource", 1) + `,`, + `Cinder:` + strings.Replace(fmt.Sprintf("%v", this.Cinder), "CinderVolumeSource", "CinderVolumeSource", 1) + `,`, + `CephFS:` + strings.Replace(fmt.Sprintf("%v", this.CephFS), "CephFSVolumeSource", "CephFSVolumeSource", 1) + `,`, + `FC:` + strings.Replace(fmt.Sprintf("%v", this.FC), "FCVolumeSource", "FCVolumeSource", 1) + `,`, + `Flocker:` + strings.Replace(fmt.Sprintf("%v", this.Flocker), "FlockerVolumeSource", "FlockerVolumeSource", 1) + `,`, + `FlexVolume:` + strings.Replace(fmt.Sprintf("%v", this.FlexVolume), "FlexVolumeSource", "FlexVolumeSource", 1) + `,`, + `AzureFile:` + strings.Replace(fmt.Sprintf("%v", this.AzureFile), "AzureFileVolumeSource", "AzureFileVolumeSource", 1) + `,`, + `VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`, + `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, + `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeSpec) String() string { + if this == nil { + return "nil" + } + keysForCapacity := make([]string, 0, len(this.Capacity)) + for k := range this.Capacity { + keysForCapacity = append(keysForCapacity, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) + mapStringForCapacity := "ResourceList{" + for _, k := range keysForCapacity { + mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) + } + mapStringForCapacity += "}" + s := strings.Join([]string{`&PersistentVolumeSpec{`, + `Capacity:` + mapStringForCapacity + `,`, + `PersistentVolumeSource:` + strings.Replace(strings.Replace(this.PersistentVolumeSource.String(), "PersistentVolumeSource", "PersistentVolumeSource", 1), `&`, ``, 1) + `,`, + `AccessModes:` + fmt.Sprintf("%v", this.AccessModes) + `,`, + `ClaimRef:` + strings.Replace(fmt.Sprintf("%v", this.ClaimRef), "ObjectReference", "ObjectReference", 1) + `,`, + `PersistentVolumeReclaimPolicy:` + fmt.Sprintf("%v", this.PersistentVolumeReclaimPolicy) + `,`, + `}`, + }, "") + return s +} +func (this *PersistentVolumeStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PersistentVolumeStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `}`, + }, "") + return s +} +func (this *Pod) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Pod{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSpec", "PodSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodStatus", "PodStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodAffinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "WeightedPodAffinityTerm", "WeightedPodAffinityTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodAffinityTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAffinityTerm{`, + `LabelSelector:` + strings.Replace(fmt.Sprintf("%v", this.LabelSelector), "LabelSelector", "k8s_io_kubernetes_pkg_api_unversioned.LabelSelector", 1) + `,`, + `Namespaces:` + fmt.Sprintf("%v", this.Namespaces) + `,`, + `TopologyKey:` + fmt.Sprintf("%v", this.TopologyKey) + `,`, + `}`, + }, "") + return s +} +func (this *PodAntiAffinity) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAntiAffinity{`, + `RequiredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.RequiredDuringSchedulingIgnoredDuringExecution), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, + `PreferredDuringSchedulingIgnoredDuringExecution:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PreferredDuringSchedulingIgnoredDuringExecution), "WeightedPodAffinityTerm", "WeightedPodAffinityTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodAttachOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodAttachOptions{`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, + `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `}`, + }, "") + return s +} +func (this *PodCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *PodExecOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodExecOptions{`, + `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, + `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, + `TTY:` + fmt.Sprintf("%v", this.TTY) + `,`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Command:` + fmt.Sprintf("%v", this.Command) + `,`, + `}`, + }, "") + return s +} +func (this *PodList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Pod", "Pod", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodLogOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodLogOptions{`, + `Container:` + fmt.Sprintf("%v", this.Container) + `,`, + `Follow:` + fmt.Sprintf("%v", this.Follow) + `,`, + `Previous:` + fmt.Sprintf("%v", this.Previous) + `,`, + `SinceSeconds:` + valueToStringGenerated(this.SinceSeconds) + `,`, + `SinceTime:` + strings.Replace(fmt.Sprintf("%v", this.SinceTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `Timestamps:` + fmt.Sprintf("%v", this.Timestamps) + `,`, + `TailLines:` + valueToStringGenerated(this.TailLines) + `,`, + `LimitBytes:` + valueToStringGenerated(this.LimitBytes) + `,`, + `}`, + }, "") + return s +} +func (this *PodProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityContext) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityContext{`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "SELinuxOptions", 1) + `,`, + `RunAsUser:` + valueToStringGenerated(this.RunAsUser) + `,`, + `RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`, + `SupplementalGroups:` + fmt.Sprintf("%v", this.SupplementalGroups) + `,`, + `FSGroup:` + valueToStringGenerated(this.FSGroup) + `,`, + `}`, + }, "") + return s +} +func (this *PodSignature) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSignature{`, + `PodController:` + strings.Replace(fmt.Sprintf("%v", this.PodController), "OwnerReference", "OwnerReference", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSpec) String() string { + if this == nil { + return "nil" + } + keysForNodeSelector := make([]string, 0, len(this.NodeSelector)) + for k := range this.NodeSelector { + keysForNodeSelector = append(keysForNodeSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) + mapStringForNodeSelector := "map[string]string{" + for _, k := range keysForNodeSelector { + mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) + } + mapStringForNodeSelector += "}" + s := strings.Join([]string{`&PodSpec{`, + `Volumes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Volumes), "Volume", "Volume", 1), `&`, ``, 1) + `,`, + `Containers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Containers), "Container", "Container", 1), `&`, ``, 1) + `,`, + `RestartPolicy:` + fmt.Sprintf("%v", this.RestartPolicy) + `,`, + `TerminationGracePeriodSeconds:` + valueToStringGenerated(this.TerminationGracePeriodSeconds) + `,`, + `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, + `DNSPolicy:` + fmt.Sprintf("%v", this.DNSPolicy) + `,`, + `NodeSelector:` + mapStringForNodeSelector + `,`, + `ServiceAccountName:` + fmt.Sprintf("%v", this.ServiceAccountName) + `,`, + `DeprecatedServiceAccount:` + fmt.Sprintf("%v", this.DeprecatedServiceAccount) + `,`, + `NodeName:` + fmt.Sprintf("%v", this.NodeName) + `,`, + `HostNetwork:` + fmt.Sprintf("%v", this.HostNetwork) + `,`, + `HostPID:` + fmt.Sprintf("%v", this.HostPID) + `,`, + `HostIPC:` + fmt.Sprintf("%v", this.HostIPC) + `,`, + `SecurityContext:` + strings.Replace(fmt.Sprintf("%v", this.SecurityContext), "PodSecurityContext", "PodSecurityContext", 1) + `,`, + `ImagePullSecrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ImagePullSecrets), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Hostname:` + fmt.Sprintf("%v", this.Hostname) + `,`, + `Subdomain:` + fmt.Sprintf("%v", this.Subdomain) + `,`, + `}`, + }, "") + return s +} +func (this *PodStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodStatus{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "PodCondition", "PodCondition", 1), `&`, ``, 1) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `HostIP:` + fmt.Sprintf("%v", this.HostIP) + `,`, + `PodIP:` + fmt.Sprintf("%v", this.PodIP) + `,`, + `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `ContainerStatuses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ContainerStatuses), "ContainerStatus", "ContainerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodStatusResult) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodStatusResult{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodStatus", "PodStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplate) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodTemplate{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplateList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodTemplateList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodTemplate", "PodTemplate", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodTemplateSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodTemplateSpec{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSpec", "PodSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Preconditions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Preconditions{`, + `UID:` + valueToStringGenerated(this.UID) + `,`, + `}`, + }, "") + return s +} +func (this *PreferAvoidPodsEntry) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PreferAvoidPodsEntry{`, + `PodSignature:` + strings.Replace(strings.Replace(this.PodSignature.String(), "PodSignature", "PodSignature", 1), `&`, ``, 1) + `,`, + `EvictionTime:` + strings.Replace(strings.Replace(this.EvictionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *PreferredSchedulingTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PreferredSchedulingTerm{`, + `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, + `Preference:` + strings.Replace(strings.Replace(this.Preference.String(), "NodeSelectorTerm", "NodeSelectorTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Probe) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Probe{`, + `Handler:` + strings.Replace(strings.Replace(this.Handler.String(), "Handler", "Handler", 1), `&`, ``, 1) + `,`, + `InitialDelaySeconds:` + fmt.Sprintf("%v", this.InitialDelaySeconds) + `,`, + `TimeoutSeconds:` + fmt.Sprintf("%v", this.TimeoutSeconds) + `,`, + `PeriodSeconds:` + fmt.Sprintf("%v", this.PeriodSeconds) + `,`, + `SuccessThreshold:` + fmt.Sprintf("%v", this.SuccessThreshold) + `,`, + `FailureThreshold:` + fmt.Sprintf("%v", this.FailureThreshold) + `,`, + `}`, + }, "") + return s +} +func (this *QuobyteVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&QuobyteVolumeSource{`, + `Registry:` + fmt.Sprintf("%v", this.Registry) + `,`, + `Volume:` + fmt.Sprintf("%v", this.Volume) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `}`, + }, "") + return s +} +func (this *RBDVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RBDVolumeSource{`, + `CephMonitors:` + fmt.Sprintf("%v", this.CephMonitors) + `,`, + `RBDImage:` + fmt.Sprintf("%v", this.RBDImage) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `RBDPool:` + fmt.Sprintf("%v", this.RBDPool) + `,`, + `RadosUser:` + fmt.Sprintf("%v", this.RadosUser) + `,`, + `Keyring:` + fmt.Sprintf("%v", this.Keyring) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "LocalObjectReference", "LocalObjectReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} +func (this *RangeAllocation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RangeAllocation{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Range:` + fmt.Sprintf("%v", this.Range) + `,`, + `Data:` + valueToStringGenerated(this.Data) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationController) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationController{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ReplicationControllerSpec", "ReplicationControllerSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ReplicationControllerStatus", "ReplicationControllerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationControllerList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ReplicationController", "ReplicationController", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerSpec) String() string { + if this == nil { + return "nil" + } + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&ReplicationControllerSpec{`, + `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, + `Selector:` + mapStringForSelector + `,`, + `Template:` + strings.Replace(fmt.Sprintf("%v", this.Template), "PodTemplateSpec", "PodTemplateSpec", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationControllerStatus{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `FullyLabeledReplicas:` + fmt.Sprintf("%v", this.FullyLabeledReplicas) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceFieldSelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceFieldSelector{`, + `ContainerName:` + fmt.Sprintf("%v", this.ContainerName) + `,`, + `Resource:` + fmt.Sprintf("%v", this.Resource) + `,`, + `Divisor:` + strings.Replace(strings.Replace(this.Divisor.String(), "Quantity", "k8s_io_kubernetes_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuota) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceQuota{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ResourceQuotaSpec", "ResourceQuotaSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ResourceQuotaStatus", "ResourceQuotaStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceQuotaList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ResourceQuota", "ResourceQuota", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaSpec) String() string { + if this == nil { + return "nil" + } + keysForHard := make([]string, 0, len(this.Hard)) + for k := range this.Hard { + keysForHard = append(keysForHard, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) + mapStringForHard := "ResourceList{" + for _, k := range keysForHard { + mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) + } + mapStringForHard += "}" + s := strings.Join([]string{`&ResourceQuotaSpec{`, + `Hard:` + mapStringForHard + `,`, + `Scopes:` + fmt.Sprintf("%v", this.Scopes) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceQuotaStatus) String() string { + if this == nil { + return "nil" + } + keysForHard := make([]string, 0, len(this.Hard)) + for k := range this.Hard { + keysForHard = append(keysForHard, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) + mapStringForHard := "ResourceList{" + for _, k := range keysForHard { + mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) + } + mapStringForHard += "}" + keysForUsed := make([]string, 0, len(this.Used)) + for k := range this.Used { + keysForUsed = append(keysForUsed, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForUsed) + mapStringForUsed := "ResourceList{" + for _, k := range keysForUsed { + mapStringForUsed += fmt.Sprintf("%v: %v,", k, this.Used[ResourceName(k)]) + } + mapStringForUsed += "}" + s := strings.Join([]string{`&ResourceQuotaStatus{`, + `Hard:` + mapStringForHard + `,`, + `Used:` + mapStringForUsed + `,`, + `}`, + }, "") + return s +} +func (this *ResourceRequirements) String() string { + if this == nil { + return "nil" + } + keysForLimits := make([]string, 0, len(this.Limits)) + for k := range this.Limits { + keysForLimits = append(keysForLimits, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) + mapStringForLimits := "ResourceList{" + for _, k := range keysForLimits { + mapStringForLimits += fmt.Sprintf("%v: %v,", k, this.Limits[ResourceName(k)]) + } + mapStringForLimits += "}" + keysForRequests := make([]string, 0, len(this.Requests)) + for k := range this.Requests { + keysForRequests = append(keysForRequests, string(k)) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) + mapStringForRequests := "ResourceList{" + for _, k := range keysForRequests { + mapStringForRequests += fmt.Sprintf("%v: %v,", k, this.Requests[ResourceName(k)]) + } + mapStringForRequests += "}" + s := strings.Join([]string{`&ResourceRequirements{`, + `Limits:` + mapStringForLimits + `,`, + `Requests:` + mapStringForRequests + `,`, + `}`, + }, "") + return s +} +func (this *RunAsUserStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RunAsUserStrategyOptions{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `UID:` + valueToStringGenerated(this.UID) + `,`, + `UIDRangeMin:` + valueToStringGenerated(this.UIDRangeMin) + `,`, + `UIDRangeMax:` + valueToStringGenerated(this.UIDRangeMax) + `,`, + `}`, + }, "") + return s +} +func (this *SELinuxContextStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SELinuxContextStrategyOptions{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "SELinuxOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SELinuxOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SELinuxOptions{`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Role:` + fmt.Sprintf("%v", this.Role) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Level:` + fmt.Sprintf("%v", this.Level) + `,`, + `}`, + }, "") + return s +} +func (this *Secret) String() string { + if this == nil { + return "nil" + } + keysForData := make([]string, 0, len(this.Data)) + for k := range this.Data { + keysForData = append(keysForData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForData) + mapStringForData := "map[string][]byte{" + for _, k := range keysForData { + mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) + } + mapStringForData += "}" + keysForStringData := make([]string, 0, len(this.StringData)) + for k := range this.StringData { + keysForStringData = append(keysForStringData, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForStringData) + mapStringForStringData := "map[string]string{" + for _, k := range keysForStringData { + mapStringForStringData += fmt.Sprintf("%v: %v,", k, this.StringData[k]) + } + mapStringForStringData += "}" + s := strings.Join([]string{`&Secret{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + mapStringForData + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `StringData:` + mapStringForStringData + `,`, + `}`, + }, "") + return s +} +func (this *SecretKeySelector) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretKeySelector{`, + `LocalObjectReference:` + strings.Replace(strings.Replace(this.LocalObjectReference.String(), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `}`, + }, "") + return s +} +func (this *SecretList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Secret", "Secret", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SecretVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecretVolumeSource{`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "KeyToPath", "KeyToPath", 1), `&`, ``, 1) + `,`, + `DefaultMode:` + valueToStringGenerated(this.DefaultMode) + `,`, + `}`, + }, "") + return s +} +func (this *SecurityContext) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecurityContext{`, + `Capabilities:` + strings.Replace(fmt.Sprintf("%v", this.Capabilities), "Capabilities", "Capabilities", 1) + `,`, + `Privileged:` + valueToStringGenerated(this.Privileged) + `,`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "SELinuxOptions", 1) + `,`, + `RunAsUser:` + valueToStringGenerated(this.RunAsUser) + `,`, + `RunAsNonRoot:` + valueToStringGenerated(this.RunAsNonRoot) + `,`, + `ReadOnlyRootFilesystem:` + valueToStringGenerated(this.ReadOnlyRootFilesystem) + `,`, + `}`, + }, "") + return s +} +func (this *SecurityContextConstraints) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecurityContextConstraints{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Priority:` + valueToStringGenerated(this.Priority) + `,`, + `AllowPrivilegedContainer:` + fmt.Sprintf("%v", this.AllowPrivilegedContainer) + `,`, + `DefaultAddCapabilities:` + fmt.Sprintf("%v", this.DefaultAddCapabilities) + `,`, + `RequiredDropCapabilities:` + fmt.Sprintf("%v", this.RequiredDropCapabilities) + `,`, + `AllowedCapabilities:` + fmt.Sprintf("%v", this.AllowedCapabilities) + `,`, + `AllowHostDirVolumePlugin:` + fmt.Sprintf("%v", this.AllowHostDirVolumePlugin) + `,`, + `Volumes:` + fmt.Sprintf("%v", this.Volumes) + `,`, + `AllowHostNetwork:` + fmt.Sprintf("%v", this.AllowHostNetwork) + `,`, + `AllowHostPorts:` + fmt.Sprintf("%v", this.AllowHostPorts) + `,`, + `AllowHostPID:` + fmt.Sprintf("%v", this.AllowHostPID) + `,`, + `AllowHostIPC:` + fmt.Sprintf("%v", this.AllowHostIPC) + `,`, + `SELinuxContext:` + strings.Replace(strings.Replace(this.SELinuxContext.String(), "SELinuxContextStrategyOptions", "SELinuxContextStrategyOptions", 1), `&`, ``, 1) + `,`, + `RunAsUser:` + strings.Replace(strings.Replace(this.RunAsUser.String(), "RunAsUserStrategyOptions", "RunAsUserStrategyOptions", 1), `&`, ``, 1) + `,`, + `SupplementalGroups:` + strings.Replace(strings.Replace(this.SupplementalGroups.String(), "SupplementalGroupsStrategyOptions", "SupplementalGroupsStrategyOptions", 1), `&`, ``, 1) + `,`, + `FSGroup:` + strings.Replace(strings.Replace(this.FSGroup.String(), "FSGroupStrategyOptions", "FSGroupStrategyOptions", 1), `&`, ``, 1) + `,`, + `ReadOnlyRootFilesystem:` + fmt.Sprintf("%v", this.ReadOnlyRootFilesystem) + `,`, + `Users:` + fmt.Sprintf("%v", this.Users) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `SeccompProfiles:` + fmt.Sprintf("%v", this.SeccompProfiles) + `,`, + `}`, + }, "") + return s +} +func (this *SecurityContextConstraintsList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SecurityContextConstraintsList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "SecurityContextConstraints", "SecurityContextConstraints", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SerializedReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SerializedReference{`, + `Reference:` + strings.Replace(strings.Replace(this.Reference.String(), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Service) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Service{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ServiceSpec", "ServiceSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ServiceStatus", "ServiceStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccount) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceAccount{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "ObjectMeta", 1), `&`, ``, 1) + `,`, + `Secrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Secrets), "ObjectReference", "ObjectReference", 1), `&`, ``, 1) + `,`, + `ImagePullSecrets:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ImagePullSecrets), "LocalObjectReference", "LocalObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceAccountList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceAccountList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ServiceAccount", "ServiceAccount", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Service", "Service", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ServicePort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServicePort{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Protocol:` + fmt.Sprintf("%v", this.Protocol) + `,`, + `Port:` + fmt.Sprintf("%v", this.Port) + `,`, + `TargetPort:` + strings.Replace(strings.Replace(this.TargetPort.String(), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `NodePort:` + fmt.Sprintf("%v", this.NodePort) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceProxyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceProxyOptions{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceSpec) String() string { + if this == nil { + return "nil" + } + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&ServiceSpec{`, + `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "ServicePort", "ServicePort", 1), `&`, ``, 1) + `,`, + `Selector:` + mapStringForSelector + `,`, + `ClusterIP:` + fmt.Sprintf("%v", this.ClusterIP) + `,`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `ExternalIPs:` + fmt.Sprintf("%v", this.ExternalIPs) + `,`, + `DeprecatedPublicIPs:` + fmt.Sprintf("%v", this.DeprecatedPublicIPs) + `,`, + `SessionAffinity:` + fmt.Sprintf("%v", this.SessionAffinity) + `,`, + `LoadBalancerIP:` + fmt.Sprintf("%v", this.LoadBalancerIP) + `,`, + `LoadBalancerSourceRanges:` + fmt.Sprintf("%v", this.LoadBalancerSourceRanges) + `,`, + `ExternalName:` + fmt.Sprintf("%v", this.ExternalName) + `,`, + `}`, + }, "") + return s +} +func (this *ServiceStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ServiceStatus{`, + `LoadBalancer:` + strings.Replace(strings.Replace(this.LoadBalancer.String(), "LoadBalancerStatus", "LoadBalancerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SupplementalGroupsStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SupplementalGroupsStrategyOptions{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *TCPSocketAction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TCPSocketAction{`, + `Port:` + strings.Replace(strings.Replace(this.Port.String(), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Taint) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Taint{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, + `}`, + }, "") + return s +} +func (this *Toleration) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Toleration{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Value:` + fmt.Sprintf("%v", this.Value) + `,`, + `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, + `}`, + }, "") + return s +} +func (this *Volume) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Volume{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `VolumeSource:` + strings.Replace(strings.Replace(this.VolumeSource.String(), "VolumeSource", "VolumeSource", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeMount) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeMount{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `MountPath:` + fmt.Sprintf("%v", this.MountPath) + `,`, + `SubPath:` + fmt.Sprintf("%v", this.SubPath) + `,`, + `}`, + }, "") + return s +} +func (this *VolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VolumeSource{`, + `HostPath:` + strings.Replace(fmt.Sprintf("%v", this.HostPath), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, + `EmptyDir:` + strings.Replace(fmt.Sprintf("%v", this.EmptyDir), "EmptyDirVolumeSource", "EmptyDirVolumeSource", 1) + `,`, + `GCEPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.GCEPersistentDisk), "GCEPersistentDiskVolumeSource", "GCEPersistentDiskVolumeSource", 1) + `,`, + `AWSElasticBlockStore:` + strings.Replace(fmt.Sprintf("%v", this.AWSElasticBlockStore), "AWSElasticBlockStoreVolumeSource", "AWSElasticBlockStoreVolumeSource", 1) + `,`, + `GitRepo:` + strings.Replace(fmt.Sprintf("%v", this.GitRepo), "GitRepoVolumeSource", "GitRepoVolumeSource", 1) + `,`, + `Secret:` + strings.Replace(fmt.Sprintf("%v", this.Secret), "SecretVolumeSource", "SecretVolumeSource", 1) + `,`, + `NFS:` + strings.Replace(fmt.Sprintf("%v", this.NFS), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, + `ISCSI:` + strings.Replace(fmt.Sprintf("%v", this.ISCSI), "ISCSIVolumeSource", "ISCSIVolumeSource", 1) + `,`, + `Glusterfs:` + strings.Replace(fmt.Sprintf("%v", this.Glusterfs), "GlusterfsVolumeSource", "GlusterfsVolumeSource", 1) + `,`, + `PersistentVolumeClaim:` + strings.Replace(fmt.Sprintf("%v", this.PersistentVolumeClaim), "PersistentVolumeClaimVolumeSource", "PersistentVolumeClaimVolumeSource", 1) + `,`, + `RBD:` + strings.Replace(fmt.Sprintf("%v", this.RBD), "RBDVolumeSource", "RBDVolumeSource", 1) + `,`, + `FlexVolume:` + strings.Replace(fmt.Sprintf("%v", this.FlexVolume), "FlexVolumeSource", "FlexVolumeSource", 1) + `,`, + `Cinder:` + strings.Replace(fmt.Sprintf("%v", this.Cinder), "CinderVolumeSource", "CinderVolumeSource", 1) + `,`, + `CephFS:` + strings.Replace(fmt.Sprintf("%v", this.CephFS), "CephFSVolumeSource", "CephFSVolumeSource", 1) + `,`, + `Flocker:` + strings.Replace(fmt.Sprintf("%v", this.Flocker), "FlockerVolumeSource", "FlockerVolumeSource", 1) + `,`, + `DownwardAPI:` + strings.Replace(fmt.Sprintf("%v", this.DownwardAPI), "DownwardAPIVolumeSource", "DownwardAPIVolumeSource", 1) + `,`, + `FC:` + strings.Replace(fmt.Sprintf("%v", this.FC), "FCVolumeSource", "FCVolumeSource", 1) + `,`, + `AzureFile:` + strings.Replace(fmt.Sprintf("%v", this.AzureFile), "AzureFileVolumeSource", "AzureFileVolumeSource", 1) + `,`, + `ConfigMap:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMap), "ConfigMapVolumeSource", "ConfigMapVolumeSource", 1) + `,`, + `VsphereVolume:` + strings.Replace(fmt.Sprintf("%v", this.VsphereVolume), "VsphereVirtualDiskVolumeSource", "VsphereVirtualDiskVolumeSource", 1) + `,`, + `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, + `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, + `Metadata:` + strings.Replace(fmt.Sprintf("%v", this.Metadata), "DeprecatedDownwardAPIVolumeSource", "DeprecatedDownwardAPIVolumeSource", 1) + `,`, + `}`, + }, "") + return s +} +func (this *VsphereVirtualDiskVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&VsphereVirtualDiskVolumeSource{`, + `VolumePath:` + fmt.Sprintf("%v", this.VolumePath) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `}`, + }, "") + return s +} +func (this *WeightedPodAffinityTerm) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&WeightedPodAffinityTerm{`, + `Weight:` + fmt.Sprintf("%v", this.Weight) + `,`, + `PodAffinityTerm:` + strings.Replace(strings.Replace(this.PodAffinityTerm.String(), "PodAffinityTerm", "PodAffinityTerm", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *AWSElasticBlockStoreVolumeSource) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -11401,6 +14224,276 @@ func (m *AttachedVolume) Unmarshal(data []byte) error { } return nil } +func (m *AvoidPods) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AvoidPods: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AvoidPods: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreferAvoidPods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PreferAvoidPods = append(m.PreferAvoidPods, PreferAvoidPodsEntry{}) + if err := m.PreferAvoidPods[len(m.PreferAvoidPods)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *AzureDiskVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AzureDiskVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AzureDiskVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DiskName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DiskName = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DataDiskURI", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DataDiskURI = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CachingMode", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := AzureDataDiskCachingMode(data[iNdEx:postIndex]) + m.CachingMode = &s + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.FSType = &s + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.ReadOnly = &b + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *AzureFileVolumeSource) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -12983,6 +16076,26 @@ func (m *ConfigMapVolumeSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DefaultMode = &v default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -14999,6 +18112,26 @@ func (m *DeprecatedDownwardAPIVolumeFile) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Mode = &v default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -15080,6 +18213,26 @@ func (m *DeprecatedDownwardAPIVolumeSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DefaultMode = &v default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -15225,6 +18378,26 @@ func (m *DownwardAPIVolumeFile) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Mode = &v default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -15306,6 +18479,26 @@ func (m *DownwardAPIVolumeSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DefaultMode = &v default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -15526,6 +18719,36 @@ func (m *EndpointAddress) Unmarshal(data []byte) error { } m.Hostname = string(data[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NodeName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(data[iNdEx:postIndex]) + m.NodeName = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -18991,6 +22214,26 @@ func (m *KeyToPath) Unmarshal(data []byte) error { } m.Path = string(data[iNdEx:postIndex]) iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Mode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Mode = &v default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -24055,6 +27298,35 @@ func (m *ObjectMeta) Unmarshal(data []byte) error { } m.Finalizers = append(m.Finalizers, string(data[iNdEx:postIndex])) iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClusterName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClusterName = string(data[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -26003,6 +29275,72 @@ func (m *PersistentVolumeSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Quobyte", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Quobyte == nil { + m.Quobyte = &QuobyteVolumeSource{} + } + if err := m.Quobyte.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureDisk", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AzureDisk == nil { + m.AzureDisk = &AzureDiskVolumeSource{} + } + if err := m.AzureDisk.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -28112,6 +31450,89 @@ func (m *PodSecurityContext) Unmarshal(data []byte) error { } return nil } +func (m *PodSignature) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PodSignature: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PodSignature: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodController", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PodController == nil { + m.PodController = &OwnerReference{} + } + if err := m.PodController.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *PodSpec) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -28681,35 +32102,6 @@ func (m *PodSpec) Unmarshal(data []byte) error { } m.Subdomain = string(data[iNdEx:postIndex]) iNdEx = postIndex - case 18: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedHost", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := data[iNdEx] - iNdEx++ - stringLen |= (uint64(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DeprecatedHost = string(data[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -29542,6 +32934,174 @@ func (m *Preconditions) Unmarshal(data []byte) error { } return nil } +func (m *PreferAvoidPodsEntry) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PreferAvoidPodsEntry: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PreferAvoidPodsEntry: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PodSignature", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PodSignature.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvictionTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.EvictionTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *PreferredSchedulingTerm) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -29816,6 +33376,192 @@ func (m *Probe) Unmarshal(data []byte) error { } return nil } +func (m *QuobyteVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QuobyteVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QuobyteVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Registry", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Registry = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Volume = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *RBDVolumeSource) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -30784,6 +34530,25 @@ func (m *ReplicationControllerStatus) Unmarshal(data []byte) error { break } } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadyReplicas", wireType) + } + m.ReadyReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ReadyReplicas |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -32570,6 +36335,117 @@ func (m *Secret) Unmarshal(data []byte) error { } m.Type = SecretType(data[iNdEx:postIndex]) iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StringData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.StringData == nil { + m.StringData = make(map[string]string) + } + m.StringData[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -32900,6 +36776,26 @@ func (m *SecretVolumeSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMode", wireType) + } + var v int32 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.DefaultMode = &v default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -33633,6 +37529,35 @@ func (m *SecurityContextConstraints) Unmarshal(data []byte) error { } m.Groups = append(m.Groups, string(data[iNdEx:postIndex])) iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SeccompProfiles", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SeccompProfiles = append(m.SeccompProfiles, string(data[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -34980,7 +38905,7 @@ func (m *ServiceSpec) Unmarshal(data []byte) error { iNdEx = postIndex case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DeprecatedPortalIP", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ExternalName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -35005,7 +38930,7 @@ func (m *ServiceSpec) Unmarshal(data []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.DeprecatedPortalIP = string(data[iNdEx:postIndex]) + m.ExternalName = string(data[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -36557,6 +40482,72 @@ func (m *VolumeSource) Unmarshal(data []byte) error { } iNdEx = postIndex case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Quobyte", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Quobyte == nil { + m.Quobyte = &QuobyteVolumeSource{} + } + if err := m.Quobyte.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureDisk", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.AzureDisk == nil { + m.AzureDisk = &AzureDiskVolumeSource{} + } + if err := m.AzureDisk.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 23: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) } @@ -36921,3 +40912,667 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 10559 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x8c, 0x24, 0xc7, + 0x75, 0x98, 0x7a, 0x66, 0xbf, 0xe6, 0xed, 0xe7, 0xd5, 0x7d, 0x70, 0xb9, 0x26, 0x6f, 0x8f, 0x4d, + 0xf1, 0x74, 0x24, 0x8f, 0xbb, 0xba, 0x23, 0x69, 0x92, 0xa2, 0x44, 0x69, 0x77, 0x67, 0xf7, 0x6e, + 0x75, 0xbb, 0x77, 0xc3, 0x9a, 0xbd, 0x3b, 0x4a, 0xa2, 0x49, 0xf6, 0x4e, 0xd7, 0xce, 0xb6, 0x6e, + 0xb6, 0x7b, 0xd8, 0xdd, 0xb3, 0x77, 0x2b, 0xc5, 0x80, 0x23, 0x28, 0x0e, 0x02, 0x09, 0x8e, 0x0c, + 0x44, 0x48, 0x80, 0x24, 0x88, 0x12, 0x20, 0x86, 0x13, 0x23, 0x8e, 0xe5, 0xc8, 0xb2, 0xe4, 0x08, + 0x42, 0x80, 0x38, 0x82, 0x9c, 0xc4, 0x81, 0x0c, 0x04, 0xb6, 0x61, 0x01, 0x6b, 0x73, 0x8d, 0x20, + 0x3f, 0xf2, 0x27, 0x40, 0x7e, 0x65, 0x61, 0x24, 0x41, 0x7d, 0x76, 0x55, 0xcf, 0xcc, 0x76, 0xcf, + 0xf2, 0x66, 0x73, 0x76, 0xf2, 0x6f, 0xe6, 0xbd, 0x57, 0xaf, 0x3e, 0xba, 0xea, 0xd5, 0x7b, 0xaf, + 0x5e, 0xbd, 0x82, 0xcb, 0xf7, 0x5e, 0x8d, 0xe6, 0xbc, 0x60, 0xfe, 0x5e, 0x6b, 0x93, 0x84, 0x3e, + 0x89, 0x49, 0x34, 0xdf, 0xbc, 0x57, 0x9f, 0x77, 0x9a, 0xde, 0xfc, 0xee, 0x95, 0xf9, 0x3a, 0xf1, + 0x49, 0xe8, 0xc4, 0xc4, 0x9d, 0x6b, 0x86, 0x41, 0x1c, 0xa0, 0x27, 0x38, 0xf5, 0x5c, 0x42, 0x3d, + 0xd7, 0xbc, 0x57, 0x9f, 0x73, 0x9a, 0xde, 0xdc, 0xee, 0x95, 0x99, 0x17, 0xea, 0x5e, 0xbc, 0xdd, + 0xda, 0x9c, 0xab, 0x05, 0x3b, 0xf3, 0xf5, 0xa0, 0x1e, 0xcc, 0xb3, 0x42, 0x9b, 0xad, 0x2d, 0xf6, + 0x8f, 0xfd, 0x61, 0xbf, 0x38, 0xb3, 0x99, 0xab, 0xdd, 0xab, 0x0e, 0x49, 0x14, 0xb4, 0xc2, 0x1a, + 0x49, 0x37, 0x60, 0xe6, 0xe5, 0xee, 0x65, 0x5a, 0xfe, 0x2e, 0x09, 0x23, 0x2f, 0xf0, 0x89, 0xdb, + 0x56, 0xec, 0x85, 0xce, 0xc5, 0xc2, 0x96, 0x1f, 0x7b, 0x3b, 0xed, 0xb5, 0x5c, 0xe9, 0x4c, 0xde, + 0x8a, 0xbd, 0xc6, 0xbc, 0xe7, 0xc7, 0x51, 0x1c, 0xa6, 0x8b, 0xd8, 0x7f, 0x64, 0xc1, 0x85, 0x85, + 0xbb, 0xd5, 0xe5, 0x86, 0x13, 0xc5, 0x5e, 0x6d, 0xb1, 0x11, 0xd4, 0xee, 0x55, 0xe3, 0x20, 0x24, + 0x77, 0x82, 0x46, 0x6b, 0x87, 0x54, 0x59, 0x6f, 0xd0, 0x65, 0x18, 0xd9, 0x65, 0xff, 0x57, 0xcb, + 0xd3, 0xd6, 0x05, 0xeb, 0x52, 0x69, 0x71, 0xea, 0xc7, 0xfb, 0xb3, 0x1f, 0x39, 0xd8, 0x9f, 0x1d, + 0xb9, 0x23, 0xe0, 0x58, 0x51, 0xa0, 0x8b, 0x30, 0xb4, 0x15, 0x6d, 0xec, 0x35, 0xc9, 0x74, 0x81, + 0xd1, 0x4e, 0x08, 0xda, 0xa1, 0x95, 0x2a, 0x85, 0x62, 0x81, 0x45, 0xf3, 0x50, 0x6a, 0x3a, 0x61, + 0xec, 0xc5, 0x5e, 0xe0, 0x4f, 0x17, 0x2f, 0x58, 0x97, 0x06, 0x17, 0x4f, 0x09, 0xd2, 0x52, 0x45, + 0x22, 0x70, 0x42, 0x43, 0x9b, 0x11, 0x12, 0xc7, 0xbd, 0xe5, 0x37, 0xf6, 0xa6, 0x07, 0x2e, 0x58, + 0x97, 0x46, 0x92, 0x66, 0x60, 0x01, 0xc7, 0x8a, 0xc2, 0xfe, 0x5e, 0x01, 0x46, 0x16, 0xb6, 0xb6, + 0x3c, 0xdf, 0x8b, 0xf7, 0xd0, 0x7b, 0x30, 0xe6, 0x07, 0x2e, 0x91, 0xff, 0x59, 0x2f, 0x46, 0xaf, + 0x3e, 0x37, 0x77, 0xd4, 0xbc, 0x98, 0xbb, 0xa9, 0x95, 0x58, 0x9c, 0x3a, 0xd8, 0x9f, 0x1d, 0xd3, + 0x21, 0xd8, 0xe0, 0x88, 0xde, 0x86, 0xd1, 0x66, 0xe0, 0xaa, 0x0a, 0x0a, 0xac, 0x82, 0x67, 0x8f, + 0xae, 0xa0, 0x92, 0x14, 0x58, 0x9c, 0x3c, 0xd8, 0x9f, 0x1d, 0xd5, 0x00, 0x58, 0x67, 0x87, 0x1a, + 0x30, 0x49, 0xff, 0xfa, 0xb1, 0xa7, 0x6a, 0x28, 0xb2, 0x1a, 0x5e, 0xc8, 0xae, 0x41, 0x2b, 0xb4, + 0x78, 0xfa, 0x60, 0x7f, 0x76, 0x32, 0x05, 0xc4, 0x69, 0xd6, 0xf6, 0x97, 0x60, 0x62, 0x21, 0x8e, + 0x9d, 0xda, 0x36, 0x71, 0xf9, 0xf7, 0x45, 0x2f, 0xc1, 0x80, 0xef, 0xec, 0x10, 0xf1, 0xf5, 0x2f, + 0x88, 0x61, 0x1f, 0xb8, 0xe9, 0xec, 0x90, 0xc3, 0xfd, 0xd9, 0xa9, 0xdb, 0xbe, 0xf7, 0x7e, 0x4b, + 0xcc, 0x19, 0x0a, 0xc3, 0x8c, 0x1a, 0x5d, 0x05, 0x70, 0xc9, 0xae, 0x57, 0x23, 0x15, 0x27, 0xde, + 0x16, 0xb3, 0x01, 0x89, 0xb2, 0x50, 0x56, 0x18, 0xac, 0x51, 0xd9, 0x5f, 0xb1, 0xa0, 0xb4, 0xb0, + 0x1b, 0x78, 0x6e, 0x25, 0x70, 0x23, 0xd4, 0x82, 0xc9, 0x66, 0x48, 0xb6, 0x48, 0xa8, 0x40, 0xd3, + 0xd6, 0x85, 0xe2, 0xa5, 0xd1, 0xab, 0x57, 0x33, 0xfa, 0x6d, 0x16, 0x5a, 0xf6, 0xe3, 0x70, 0x6f, + 0xf1, 0x31, 0x51, 0xf5, 0x64, 0x0a, 0x8b, 0xd3, 0x75, 0xd8, 0xbf, 0x5c, 0x80, 0xb3, 0x0b, 0x5f, + 0x6a, 0x85, 0xa4, 0xec, 0x45, 0xf7, 0xd2, 0x4b, 0xc1, 0xf5, 0xa2, 0x7b, 0x37, 0x93, 0xc1, 0x50, + 0x73, 0xb0, 0x2c, 0xe0, 0x58, 0x51, 0xa0, 0x17, 0x60, 0x98, 0xfe, 0xbe, 0x8d, 0x57, 0x45, 0xef, + 0x4f, 0x0b, 0xe2, 0xd1, 0xb2, 0x13, 0x3b, 0x65, 0x8e, 0xc2, 0x92, 0x06, 0xad, 0xc3, 0x68, 0xcd, + 0xa9, 0x6d, 0x7b, 0x7e, 0x7d, 0x3d, 0x70, 0x09, 0xfb, 0xc2, 0xa5, 0xc5, 0xe7, 0x29, 0xf9, 0x52, + 0x02, 0x3e, 0xdc, 0x9f, 0x9d, 0xe6, 0x6d, 0x13, 0x2c, 0x34, 0x1c, 0xd6, 0xcb, 0x23, 0x5b, 0x2d, + 0xc4, 0x01, 0xc6, 0x09, 0x3a, 0x2c, 0xc2, 0x4b, 0xda, 0x9a, 0x1a, 0x64, 0x6b, 0x6a, 0xac, 0xcb, + 0x7a, 0xfa, 0xe7, 0x96, 0x18, 0x93, 0x15, 0xaf, 0x61, 0x8a, 0x87, 0xab, 0x00, 0x11, 0xa9, 0x85, + 0x24, 0xd6, 0x46, 0x45, 0x7d, 0xe6, 0xaa, 0xc2, 0x60, 0x8d, 0x8a, 0x2e, 0xfe, 0x68, 0xdb, 0x09, + 0xd9, 0x6c, 0x11, 0x63, 0xa3, 0x16, 0x7f, 0x55, 0x22, 0x70, 0x42, 0x63, 0x2c, 0xfe, 0x62, 0xe6, + 0xe2, 0xff, 0x1d, 0x0b, 0x86, 0x17, 0x3d, 0xdf, 0xf5, 0xfc, 0x3a, 0x7a, 0x0b, 0x46, 0x76, 0x48, + 0xec, 0xb8, 0x4e, 0xec, 0x88, 0x75, 0x7f, 0xe9, 0xe8, 0xc9, 0x73, 0x6b, 0xf3, 0x8b, 0xa4, 0x16, + 0xaf, 0x93, 0xd8, 0x49, 0xba, 0x91, 0xc0, 0xb0, 0xe2, 0x86, 0x6e, 0xc3, 0x50, 0xec, 0x84, 0x75, + 0x12, 0x8b, 0xe5, 0xfe, 0x42, 0x1e, 0xbe, 0x98, 0x4e, 0x35, 0xe2, 0xd7, 0x48, 0x22, 0x18, 0x37, + 0x18, 0x13, 0x2c, 0x98, 0xd9, 0x35, 0x18, 0x5b, 0x72, 0x9a, 0xce, 0xa6, 0xd7, 0xf0, 0x62, 0x8f, + 0x44, 0xe8, 0x63, 0x50, 0x74, 0x5c, 0x97, 0x4d, 0xfc, 0xd2, 0xe2, 0xd9, 0x83, 0xfd, 0xd9, 0xe2, + 0x82, 0xeb, 0x1e, 0xee, 0xcf, 0x82, 0xa2, 0xda, 0xc3, 0x94, 0x02, 0x3d, 0x07, 0x03, 0x6e, 0x18, + 0x34, 0xa7, 0x0b, 0x8c, 0xf2, 0x1c, 0x5d, 0xa1, 0xe5, 0x30, 0x68, 0xa6, 0x48, 0x19, 0x8d, 0xfd, + 0xef, 0x0a, 0x80, 0x96, 0x48, 0x73, 0x7b, 0xa5, 0x6a, 0x7c, 0xcb, 0x4b, 0x30, 0xb2, 0x13, 0xf8, + 0x5e, 0x1c, 0x84, 0x91, 0xa8, 0x90, 0xcd, 0x87, 0x75, 0x01, 0xc3, 0x0a, 0x8b, 0x2e, 0xc0, 0x40, + 0x33, 0x59, 0xd6, 0x63, 0x52, 0x24, 0xb0, 0x05, 0xcd, 0x30, 0x94, 0xa2, 0x15, 0x91, 0x50, 0xcc, + 0x63, 0x45, 0x71, 0x3b, 0x22, 0x21, 0x66, 0x98, 0x64, 0xe6, 0xd0, 0x39, 0x25, 0x66, 0x69, 0x6a, + 0xe6, 0x50, 0x0c, 0xd6, 0xa8, 0xd0, 0xbb, 0x50, 0xe2, 0xff, 0x30, 0xd9, 0x62, 0x53, 0x36, 0x53, + 0x18, 0xac, 0x05, 0x35, 0xa7, 0x91, 0x1e, 0xfc, 0x71, 0x36, 0xd3, 0x24, 0x23, 0x9c, 0xf0, 0x34, + 0x66, 0xda, 0x50, 0xe6, 0x4c, 0xfb, 0x7b, 0x16, 0xa0, 0x25, 0xcf, 0x77, 0x49, 0x78, 0x02, 0x5b, + 0x66, 0x6f, 0x8b, 0xe0, 0xa7, 0xb4, 0x69, 0xc1, 0x4e, 0x33, 0xf0, 0x89, 0x1f, 0x2f, 0x05, 0xbe, + 0xcb, 0xb7, 0xd1, 0x4f, 0xc0, 0x40, 0x4c, 0xab, 0xe2, 0xcd, 0xba, 0x28, 0x3f, 0x0b, 0xad, 0xe0, + 0x70, 0x7f, 0xf6, 0x5c, 0x7b, 0x09, 0xd6, 0x04, 0x56, 0x06, 0xbd, 0x06, 0x43, 0x51, 0xec, 0xc4, + 0xad, 0x48, 0x34, 0xf4, 0x29, 0xd9, 0xd0, 0x2a, 0x83, 0x1e, 0xee, 0xcf, 0x4e, 0xaa, 0x62, 0x1c, + 0x84, 0x45, 0x01, 0xf4, 0x2c, 0x0c, 0xef, 0x90, 0x28, 0x72, 0xea, 0x52, 0xb0, 0x4d, 0x8a, 0xb2, + 0xc3, 0xeb, 0x1c, 0x8c, 0x25, 0x1e, 0x3d, 0x0d, 0x83, 0x24, 0x0c, 0x83, 0x50, 0xcc, 0x88, 0x71, + 0x41, 0x38, 0xb8, 0x4c, 0x81, 0x98, 0xe3, 0xec, 0x3f, 0xb0, 0x60, 0x52, 0xb5, 0x95, 0xd7, 0xd5, + 0xc7, 0xa5, 0xee, 0x02, 0xd4, 0x64, 0xc7, 0x22, 0xb6, 0xc0, 0x46, 0xaf, 0x7e, 0xfc, 0x68, 0xde, + 0xed, 0x03, 0x99, 0xd4, 0xa1, 0x40, 0x11, 0xd6, 0xf8, 0xda, 0x3f, 0xb6, 0xe0, 0x74, 0xaa, 0x4f, + 0x6b, 0x5e, 0x14, 0xa3, 0x9f, 0x6b, 0xeb, 0xd7, 0xfc, 0x11, 0x75, 0x6b, 0x1a, 0xe5, 0x1c, 0x2d, + 0xce, 0xba, 0xa7, 0x26, 0x8a, 0x84, 0x68, 0x9d, 0xc3, 0x30, 0xe8, 0xc5, 0x64, 0x47, 0xf6, 0xeb, + 0x85, 0x9c, 0xfd, 0xe2, 0x0d, 0x4c, 0x3e, 0xcf, 0x2a, 0xe5, 0x81, 0x39, 0x2b, 0xfb, 0x7f, 0x58, + 0x50, 0x5a, 0x0a, 0xfc, 0x2d, 0xaf, 0xbe, 0xee, 0x34, 0xfb, 0xf8, 0x61, 0xaa, 0x30, 0xc0, 0xb8, + 0xf2, 0xa6, 0x5f, 0xc9, 0x6a, 0xba, 0x68, 0xd0, 0x1c, 0xdd, 0x3c, 0xb9, 0x56, 0xa0, 0xe4, 0x12, + 0x05, 0x61, 0xc6, 0x6c, 0xe6, 0x15, 0x28, 0x29, 0x02, 0x34, 0x05, 0xc5, 0x7b, 0x84, 0xab, 0x8c, + 0x25, 0x4c, 0x7f, 0xa2, 0x33, 0x30, 0xb8, 0xeb, 0x34, 0x5a, 0x62, 0xb5, 0x62, 0xfe, 0xe7, 0x13, + 0x85, 0x57, 0x2d, 0xfb, 0x07, 0x16, 0x9c, 0x51, 0x95, 0xdc, 0x20, 0x7b, 0x55, 0xd2, 0x20, 0xb5, + 0x38, 0x08, 0xd1, 0x57, 0x2d, 0x38, 0xd3, 0xe8, 0x20, 0x87, 0xc4, 0x68, 0x1c, 0x47, 0x82, 0x3d, + 0x21, 0x1a, 0x7e, 0xa6, 0x13, 0x16, 0x77, 0xac, 0x0d, 0x3d, 0xc9, 0xfb, 0xc2, 0x17, 0xef, 0xa8, + 0x60, 0x50, 0xbc, 0x41, 0xf6, 0x58, 0xc7, 0x68, 0xf3, 0xc7, 0x55, 0xf3, 0x4f, 0x62, 0xe6, 0xad, + 0x99, 0x33, 0xef, 0x63, 0x39, 0x3f, 0x5f, 0x97, 0x39, 0xf7, 0x8f, 0x0a, 0x70, 0x56, 0xd1, 0x18, + 0xe2, 0xf8, 0x11, 0x19, 0xfe, 0xde, 0xba, 0x7b, 0x83, 0xec, 0x6d, 0x04, 0x74, 0x3f, 0xed, 0xdc, + 0x5d, 0x74, 0x05, 0x46, 0x5d, 0xb2, 0xe5, 0xb4, 0x1a, 0xb1, 0x52, 0x17, 0x07, 0xb9, 0x1d, 0x51, + 0x4e, 0xc0, 0x58, 0xa7, 0xb1, 0x7f, 0xbf, 0xc4, 0x56, 0x65, 0xec, 0x78, 0x3e, 0x09, 0xe9, 0x06, + 0xad, 0x69, 0xf5, 0x63, 0xba, 0x56, 0x2f, 0x34, 0xf8, 0xa7, 0x61, 0xd0, 0xdb, 0xa1, 0x22, 0xbb, + 0x60, 0x4a, 0xe2, 0x55, 0x0a, 0xc4, 0x1c, 0x87, 0x9e, 0x81, 0xe1, 0x5a, 0xb0, 0xb3, 0xe3, 0xf8, + 0xee, 0x74, 0x91, 0xa9, 0x0c, 0xa3, 0x54, 0xaa, 0x2f, 0x71, 0x10, 0x96, 0x38, 0xf4, 0x04, 0x0c, + 0x38, 0x61, 0x3d, 0x9a, 0x1e, 0x60, 0x34, 0x23, 0xb4, 0xa6, 0x85, 0xb0, 0x1e, 0x61, 0x06, 0xa5, + 0xaa, 0xc0, 0xfd, 0x20, 0xbc, 0xe7, 0xf9, 0xf5, 0xb2, 0x17, 0xb2, 0x7d, 0x5d, 0x53, 0x05, 0xee, + 0x2a, 0x0c, 0xd6, 0xa8, 0x50, 0x05, 0x06, 0x9b, 0x41, 0x18, 0x47, 0xd3, 0x43, 0x6c, 0x38, 0x9f, + 0xcf, 0x9c, 0x3d, 0xbc, 0xdf, 0x95, 0x20, 0x8c, 0x93, 0xae, 0xd0, 0x7f, 0x11, 0xe6, 0x8c, 0xd0, + 0x12, 0x14, 0x89, 0xbf, 0x3b, 0x3d, 0xcc, 0xf8, 0x7d, 0xf4, 0x68, 0x7e, 0xcb, 0xfe, 0xee, 0x1d, + 0x27, 0x4c, 0x56, 0xd1, 0xb2, 0xbf, 0x8b, 0x69, 0x69, 0x54, 0x83, 0x92, 0x74, 0x04, 0x44, 0xd3, + 0x23, 0x79, 0x26, 0x18, 0x16, 0xe4, 0x98, 0xbc, 0xdf, 0xf2, 0x42, 0xb2, 0x43, 0xfc, 0x38, 0x4a, + 0xf4, 0x61, 0x89, 0x8d, 0x70, 0xc2, 0x17, 0xd5, 0x60, 0x8c, 0xab, 0x0f, 0xeb, 0x41, 0xcb, 0x8f, + 0xa3, 0xe9, 0x12, 0x6b, 0x72, 0x86, 0xc1, 0x79, 0x27, 0x29, 0xb1, 0x78, 0x46, 0xb0, 0x1f, 0xd3, + 0x80, 0x11, 0x36, 0x98, 0xa2, 0xb7, 0x61, 0xbc, 0xe1, 0xed, 0x12, 0x9f, 0x44, 0x51, 0x25, 0x0c, + 0x36, 0xc9, 0x34, 0xb0, 0xde, 0x3c, 0x9d, 0x65, 0x7c, 0x05, 0x9b, 0x64, 0xf1, 0xd4, 0xc1, 0xfe, + 0xec, 0xf8, 0x9a, 0x5e, 0x1a, 0x9b, 0xcc, 0xd0, 0xbb, 0x30, 0x41, 0x75, 0x15, 0x2f, 0x61, 0x3f, + 0x9a, 0x9f, 0x3d, 0x3a, 0xd8, 0x9f, 0x9d, 0xc0, 0x46, 0x71, 0x9c, 0x62, 0x87, 0x36, 0xa0, 0xd4, + 0xf0, 0xb6, 0x48, 0x6d, 0xaf, 0xd6, 0x20, 0xd3, 0x63, 0x8c, 0x77, 0xc6, 0x92, 0x5b, 0x93, 0xe4, + 0x5c, 0x3f, 0x54, 0x7f, 0x71, 0xc2, 0x08, 0xdd, 0x81, 0x73, 0x31, 0x09, 0x77, 0x3c, 0xdf, 0xa1, + 0x9b, 0xb6, 0x50, 0x5e, 0x98, 0x85, 0x3b, 0xce, 0x66, 0xed, 0x79, 0x31, 0xb0, 0xe7, 0x36, 0x3a, + 0x52, 0xe1, 0x2e, 0xa5, 0xd1, 0x2d, 0x98, 0x64, 0xeb, 0xa9, 0xd2, 0x6a, 0x34, 0x2a, 0x41, 0xc3, + 0xab, 0xed, 0x4d, 0x4f, 0x30, 0x86, 0xcf, 0x48, 0xbb, 0x75, 0xd5, 0x44, 0x53, 0xbd, 0x3e, 0xf9, + 0x87, 0xd3, 0xa5, 0x51, 0x03, 0x26, 0x23, 0x52, 0x6b, 0x85, 0x5e, 0xbc, 0x47, 0xe7, 0x3e, 0x79, + 0x10, 0x4f, 0x4f, 0xe6, 0xb1, 0x53, 0xaa, 0x66, 0x21, 0xee, 0x34, 0x48, 0x01, 0x71, 0x9a, 0x35, + 0x15, 0x15, 0x51, 0xec, 0x7a, 0xfe, 0xf4, 0x14, 0x53, 0x4c, 0xd5, 0xfa, 0xaa, 0x52, 0x20, 0xe6, + 0x38, 0x66, 0xf6, 0xd1, 0x1f, 0xb7, 0xa8, 0xec, 0x3d, 0xc5, 0x08, 0x13, 0xb3, 0x4f, 0x22, 0x70, + 0x42, 0x43, 0x37, 0xac, 0x38, 0xde, 0x9b, 0x46, 0x8c, 0x54, 0x2d, 0xb5, 0x8d, 0x8d, 0xcf, 0x61, + 0x0a, 0xb7, 0x37, 0x61, 0x42, 0x2d, 0x6b, 0x36, 0x3a, 0x68, 0x16, 0x06, 0xa9, 0xe4, 0x92, 0xd6, + 0x4b, 0x89, 0x36, 0x81, 0x0a, 0xb4, 0x08, 0x73, 0x38, 0x6b, 0x82, 0xf7, 0x25, 0xb2, 0xb8, 0x17, + 0x13, 0xae, 0xc5, 0x16, 0xb5, 0x26, 0x48, 0x04, 0x4e, 0x68, 0xec, 0xff, 0xc5, 0x37, 0xc5, 0x44, + 0x76, 0xe4, 0x90, 0x9b, 0x97, 0x61, 0x64, 0x3b, 0x88, 0x62, 0x4a, 0xcd, 0xea, 0x18, 0x4c, 0x76, + 0xc1, 0xeb, 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x1d, 0xc6, 0x6b, 0x7a, 0x05, 0x42, 0x94, 0x9f, 0x15, + 0x45, 0xcc, 0xda, 0xb1, 0x49, 0x8b, 0x5e, 0x85, 0x11, 0xe6, 0xca, 0xab, 0x05, 0x0d, 0xa1, 0x2f, + 0xcb, 0x9d, 0x69, 0xa4, 0x22, 0xe0, 0x87, 0xda, 0x6f, 0xac, 0xa8, 0xa9, 0xd5, 0x41, 0x9b, 0xb0, + 0x5a, 0x11, 0xe2, 0x56, 0x59, 0x1d, 0xd7, 0x19, 0x14, 0x0b, 0xac, 0xfd, 0x1b, 0x05, 0x6d, 0x94, + 0xa9, 0xd2, 0x47, 0xd0, 0xe7, 0x61, 0xf8, 0xbe, 0xe3, 0xc5, 0x9e, 0x5f, 0x17, 0x3b, 0xe8, 0x8b, + 0x39, 0x65, 0x2f, 0x2b, 0x7e, 0x97, 0x17, 0xe5, 0xfb, 0x84, 0xf8, 0x83, 0x25, 0x43, 0xca, 0x3b, + 0x6c, 0xf9, 0x3e, 0xe5, 0x5d, 0xe8, 0x9d, 0x37, 0xe6, 0x45, 0x39, 0x6f, 0xf1, 0x07, 0x4b, 0x86, + 0x68, 0x0b, 0x40, 0xae, 0x3e, 0xe2, 0x0a, 0x17, 0xda, 0xcf, 0xf6, 0xc2, 0x7e, 0x43, 0x95, 0x5e, + 0x9c, 0xa0, 0x3b, 0x53, 0xf2, 0x1f, 0x6b, 0x9c, 0xed, 0x16, 0x53, 0x44, 0xda, 0x9b, 0x85, 0xde, + 0xa6, 0x0b, 0xc0, 0x09, 0x63, 0xe2, 0x2e, 0xc4, 0x62, 0xe8, 0x9e, 0xcf, 0xa9, 0x50, 0x6d, 0x78, + 0x3b, 0x44, 0x5f, 0x2d, 0x82, 0x0b, 0x4e, 0x18, 0xda, 0xdf, 0x2f, 0xc2, 0x74, 0xb7, 0xf6, 0xd2, + 0x39, 0x49, 0x1e, 0x78, 0xf1, 0x12, 0xd5, 0x15, 0x2c, 0x73, 0x4e, 0x2e, 0x0b, 0x38, 0x56, 0x14, + 0x74, 0x72, 0x44, 0x5e, 0xdd, 0x77, 0x1a, 0x62, 0xfe, 0xaa, 0xc9, 0x51, 0x65, 0x50, 0x2c, 0xb0, + 0x94, 0x2e, 0x24, 0x4e, 0x24, 0x5c, 0xb8, 0xda, 0x24, 0xc2, 0x0c, 0x8a, 0x05, 0x56, 0x37, 0xff, + 0x06, 0x32, 0xcc, 0x3f, 0x63, 0x8c, 0x06, 0x1f, 0xf2, 0x18, 0xa1, 0x77, 0x01, 0xb6, 0x3c, 0xdf, + 0x8b, 0xb6, 0x19, 0xfb, 0xa1, 0xde, 0xd9, 0x2b, 0xad, 0x64, 0x45, 0xb1, 0xc1, 0x1a, 0x4b, 0xf4, + 0x32, 0x8c, 0xaa, 0x15, 0xba, 0x5a, 0x9e, 0x1e, 0x36, 0x1d, 0x7f, 0x89, 0xb8, 0x2a, 0x63, 0x9d, + 0xce, 0xfe, 0x62, 0x7a, 0xca, 0x88, 0x85, 0xa1, 0x8d, 0xb0, 0x95, 0x77, 0x84, 0x0b, 0x47, 0x8f, + 0xb0, 0xfd, 0x87, 0x45, 0x6a, 0x3b, 0x6b, 0x95, 0xb5, 0xa2, 0x1c, 0x42, 0xed, 0x4d, 0x2a, 0xe1, + 0x9d, 0x98, 0x88, 0x65, 0x79, 0xb9, 0x97, 0x75, 0xa3, 0xef, 0x07, 0x74, 0x39, 0x70, 0x4e, 0x68, + 0x1b, 0x4a, 0x0d, 0x27, 0x62, 0x96, 0x24, 0x11, 0xcb, 0xb1, 0x37, 0xb6, 0x89, 0x16, 0xee, 0x44, + 0xb1, 0xb6, 0xe1, 0xf2, 0x5a, 0x12, 0xe6, 0x74, 0x7b, 0xa2, 0xda, 0x81, 0x3c, 0x39, 0x50, 0xcd, + 0xa1, 0x2a, 0xc4, 0x1e, 0xe6, 0x38, 0xf4, 0x2a, 0x8c, 0x85, 0x84, 0x4d, 0x95, 0x25, 0xaa, 0x00, + 0xb1, 0xc9, 0x37, 0x98, 0x68, 0x4a, 0x58, 0xc3, 0x61, 0x83, 0x32, 0x51, 0x94, 0x87, 0x8e, 0x50, + 0x94, 0x9f, 0x85, 0x61, 0xf6, 0x43, 0xcd, 0x0a, 0xf5, 0x85, 0x56, 0x39, 0x18, 0x4b, 0x7c, 0x7a, + 0x12, 0x8d, 0xe4, 0x9c, 0x44, 0xcf, 0xc1, 0x44, 0xd9, 0x21, 0x3b, 0x81, 0xbf, 0xec, 0xbb, 0xcd, + 0xc0, 0xf3, 0x63, 0x34, 0x0d, 0x03, 0x6c, 0x4b, 0xe1, 0x2b, 0x7e, 0x80, 0x72, 0xc0, 0x03, 0x54, + 0xd9, 0xb5, 0xff, 0xb7, 0x05, 0xe3, 0x65, 0xd2, 0x20, 0x31, 0xb9, 0xd5, 0x64, 0xee, 0x07, 0xb4, + 0x02, 0xa8, 0x1e, 0x3a, 0x35, 0x52, 0x21, 0xa1, 0x17, 0xb8, 0x55, 0x52, 0x0b, 0x7c, 0xe6, 0x70, + 0xa7, 0x7b, 0xe4, 0xb9, 0x83, 0xfd, 0x59, 0x74, 0xad, 0x0d, 0x8b, 0x3b, 0x94, 0x40, 0x2e, 0x8c, + 0x37, 0x43, 0x62, 0xf8, 0x4b, 0xac, 0x6c, 0xfd, 0xbc, 0xa2, 0x17, 0xe1, 0xea, 0xa3, 0x01, 0xc2, + 0x26, 0x53, 0xf4, 0x19, 0x98, 0x0a, 0xc2, 0xe6, 0xb6, 0xe3, 0x97, 0x49, 0x93, 0xf8, 0x2e, 0xd5, + 0x99, 0x85, 0x53, 0xec, 0xcc, 0xc1, 0xfe, 0xec, 0xd4, 0xad, 0x14, 0x0e, 0xb7, 0x51, 0xdb, 0xbf, + 0x55, 0x80, 0xd9, 0x32, 0xa1, 0x5c, 0xa9, 0x80, 0x2c, 0x07, 0xf7, 0xfd, 0xfb, 0x4e, 0xe8, 0x2e, + 0x54, 0x56, 0xb9, 0x4a, 0xcc, 0xdc, 0x8d, 0x5d, 0x96, 0x05, 0x77, 0x73, 0xb2, 0x65, 0xf1, 0x05, + 0x18, 0xd9, 0xf2, 0x48, 0xc3, 0xc5, 0x64, 0x4b, 0x74, 0xf4, 0x4a, 0x1e, 0xdf, 0xc6, 0x0a, 0x2d, + 0x23, 0xfd, 0x03, 0xdc, 0xcb, 0xba, 0x22, 0xd8, 0x60, 0xc5, 0x10, 0xb5, 0x60, 0x4a, 0xea, 0xfc, + 0x12, 0x2b, 0xd6, 0xc9, 0x8b, 0xf9, 0x4c, 0x0a, 0xb3, 0x1a, 0x36, 0x32, 0x38, 0xc5, 0x10, 0xb7, + 0x55, 0x41, 0x6d, 0xb5, 0x1d, 0xba, 0x4f, 0x0c, 0xb0, 0x59, 0xc3, 0x6c, 0x35, 0x66, 0x4c, 0x32, + 0xa8, 0xfd, 0x3b, 0x16, 0x3c, 0x75, 0xc4, 0xb8, 0x09, 0x9b, 0x7b, 0x53, 0x1a, 0xbb, 0xfc, 0xc4, + 0xe6, 0x53, 0x47, 0xb7, 0x37, 0xe3, 0x3b, 0xe4, 0x33, 0x81, 0x0b, 0x39, 0x4c, 0xe0, 0x5f, 0x2b, + 0xc0, 0xd9, 0xae, 0x9f, 0x9a, 0x79, 0xb4, 0xad, 0xae, 0x1e, 0xed, 0xff, 0xf7, 0x3e, 0xf5, 0xaf, + 0x58, 0xf0, 0x58, 0xb7, 0x0f, 0xfc, 0x96, 0xf9, 0x81, 0x33, 0x5a, 0xd9, 0xe7, 0xcf, 0x7a, 0x0b, + 0xce, 0x2c, 0xef, 0x34, 0xe3, 0xbd, 0xb2, 0x67, 0x3a, 0xe2, 0x5f, 0x81, 0xa1, 0x1d, 0xe2, 0x7a, + 0xad, 0x1d, 0xf1, 0x59, 0x67, 0xe5, 0xee, 0xb9, 0xce, 0xa0, 0x87, 0xfb, 0xb3, 0xe3, 0xd5, 0x38, + 0x08, 0x9d, 0x3a, 0xe1, 0x00, 0x2c, 0xc8, 0xed, 0x0f, 0x2c, 0x98, 0x94, 0x52, 0x74, 0xc1, 0x75, + 0x43, 0x12, 0x45, 0x68, 0x06, 0x0a, 0x5e, 0x53, 0x30, 0x02, 0xc1, 0xa8, 0xb0, 0x5a, 0xc1, 0x05, + 0xaf, 0x89, 0x3e, 0x0f, 0x25, 0x7e, 0x7e, 0x93, 0x4c, 0x8e, 0x1e, 0xcf, 0x83, 0x98, 0xc9, 0xb9, + 0x21, 0x79, 0xe0, 0x84, 0x9d, 0x34, 0x27, 0x98, 0x20, 0x2a, 0x9a, 0xa7, 0x09, 0xd7, 0x05, 0x1c, + 0x2b, 0x0a, 0x74, 0x09, 0x46, 0xfc, 0xc0, 0xe5, 0x47, 0x6b, 0x5c, 0xd7, 0x62, 0x53, 0xee, 0xa6, + 0x80, 0x61, 0x85, 0xb5, 0xbf, 0x6e, 0xc1, 0x98, 0xec, 0x63, 0x4e, 0xcb, 0x86, 0x2e, 0x92, 0xc4, + 0xaa, 0x49, 0x16, 0x09, 0xb5, 0x4c, 0x18, 0xc6, 0x30, 0x48, 0x8a, 0xbd, 0x18, 0x24, 0xf6, 0xf7, + 0x0b, 0x30, 0x21, 0x9b, 0x53, 0x6d, 0x6d, 0x46, 0x24, 0x46, 0xef, 0x40, 0xc9, 0xe1, 0x83, 0x4f, + 0xe4, 0x3c, 0x7b, 0x21, 0xcb, 0x2d, 0x63, 0x7c, 0xb3, 0x44, 0x1b, 0x5c, 0x90, 0x7c, 0x70, 0xc2, + 0x12, 0xed, 0xc2, 0x29, 0x3f, 0x88, 0x99, 0x12, 0xa0, 0xf0, 0xf9, 0xdc, 0xe0, 0xe9, 0x7a, 0x1e, + 0x17, 0xf5, 0x9c, 0xba, 0x99, 0xe6, 0x87, 0xdb, 0xab, 0x40, 0xb7, 0xa4, 0xeb, 0xaa, 0xc8, 0xea, + 0x7a, 0x2e, 0x5f, 0x5d, 0xdd, 0x3d, 0x57, 0xf6, 0x0f, 0x2d, 0x28, 0x49, 0xb2, 0x7e, 0x1e, 0x84, + 0xdc, 0x85, 0xe1, 0x88, 0x7d, 0x1a, 0x39, 0x4c, 0x97, 0xf3, 0x35, 0x9d, 0x7f, 0xcf, 0x44, 0xe3, + 0xe1, 0xff, 0x23, 0x2c, 0xb9, 0x31, 0xdf, 0xb3, 0xea, 0xc0, 0xa3, 0xe7, 0x7b, 0x56, 0x4d, 0xeb, + 0xe2, 0x7b, 0xfe, 0x55, 0x0b, 0x86, 0xb8, 0x47, 0x30, 0x9f, 0x5b, 0x55, 0x3b, 0x40, 0x48, 0x38, + 0xde, 0xa1, 0x40, 0x71, 0x9e, 0x80, 0xee, 0x42, 0x89, 0xfd, 0x58, 0x09, 0x83, 0x1d, 0xb1, 0x11, + 0x3c, 0x97, 0xc7, 0x23, 0xc9, 0x05, 0x1f, 0x97, 0x26, 0x77, 0x24, 0x03, 0x9c, 0xf0, 0xb2, 0x7f, + 0x50, 0xa4, 0xab, 0x3e, 0x21, 0x35, 0xb6, 0x35, 0xeb, 0x24, 0xb6, 0xb5, 0x42, 0xff, 0xb7, 0xb5, + 0xf7, 0x61, 0xb2, 0xa6, 0x1d, 0xc4, 0x24, 0x9b, 0xe9, 0xd5, 0x9c, 0x67, 0x0c, 0xda, 0xe9, 0x0d, + 0xf7, 0x80, 0x2d, 0x99, 0xec, 0x70, 0x9a, 0x3f, 0x22, 0x30, 0xc6, 0x4f, 0x91, 0x45, 0x7d, 0x03, + 0x99, 0x73, 0x96, 0x3b, 0xdb, 0x78, 0x09, 0x55, 0x19, 0x8b, 0x34, 0xaa, 0x6a, 0x8c, 0xb0, 0xc1, + 0xd6, 0xfe, 0x3b, 0x83, 0x30, 0xb8, 0xbc, 0x4b, 0xfc, 0xb8, 0x8f, 0xab, 0x7c, 0x07, 0x26, 0x3c, + 0x7f, 0x37, 0x68, 0xec, 0x12, 0x97, 0xe3, 0x8f, 0xb7, 0xa3, 0x9d, 0x13, 0x95, 0x4c, 0xac, 0x1a, + 0xcc, 0x70, 0x8a, 0x79, 0x3f, 0x9c, 0x08, 0x6f, 0xc2, 0x10, 0x9f, 0x11, 0xc2, 0x83, 0x90, 0xe1, + 0x19, 0x67, 0x03, 0x2a, 0x56, 0x4e, 0xe2, 0xea, 0xe0, 0x4e, 0x79, 0xc1, 0x08, 0xdd, 0x83, 0x89, + 0x2d, 0x2f, 0x8c, 0xe2, 0x0d, 0x6f, 0x87, 0x9a, 0x7e, 0x3b, 0xcd, 0xe3, 0x78, 0x0f, 0xd4, 0x90, + 0xac, 0x18, 0xac, 0x70, 0x8a, 0x35, 0xda, 0x86, 0x71, 0x6a, 0xbc, 0x26, 0x75, 0x0d, 0xf7, 0x5e, + 0x97, 0x72, 0x20, 0xae, 0xe9, 0x9c, 0xb0, 0xc9, 0x98, 0x0a, 0xa3, 0x1a, 0xb3, 0x76, 0x47, 0xd8, + 0x96, 0xae, 0x84, 0x11, 0x37, 0x73, 0x39, 0x8e, 0xca, 0x34, 0x16, 0x34, 0x50, 0x32, 0x65, 0x5a, + 0x12, 0x1a, 0x60, 0x7f, 0x87, 0x6e, 0x40, 0x74, 0x14, 0x4f, 0x42, 0x76, 0x5f, 0x37, 0x65, 0xf7, + 0xd3, 0x39, 0x3e, 0x6e, 0x17, 0xb9, 0xfd, 0x1e, 0x8c, 0x6a, 0xdf, 0x1e, 0xcd, 0x43, 0xa9, 0x26, + 0xcf, 0xb7, 0x85, 0x00, 0x57, 0x0a, 0x84, 0x3a, 0xf8, 0xc6, 0x09, 0x0d, 0x1d, 0x18, 0xaa, 0x78, + 0xa5, 0xc3, 0x60, 0xa8, 0x5a, 0x86, 0x19, 0xc6, 0x7e, 0x11, 0x60, 0xf9, 0x01, 0xa9, 0x2d, 0xd4, + 0x58, 0xf4, 0x85, 0x76, 0x58, 0x66, 0x75, 0x3f, 0x2c, 0xb3, 0xdf, 0x86, 0xf1, 0xe5, 0x07, 0x74, + 0x67, 0x97, 0xb6, 0xf9, 0x45, 0x18, 0x22, 0x0c, 0xc0, 0x5a, 0x35, 0x92, 0x4c, 0x52, 0x4e, 0x86, + 0x05, 0x96, 0xc5, 0x4e, 0x3c, 0x70, 0xc4, 0x82, 0xd5, 0xfc, 0x1c, 0xcb, 0x14, 0x88, 0x39, 0xce, + 0xfe, 0xb6, 0x05, 0x13, 0x2b, 0x4b, 0x86, 0x9e, 0x3c, 0x07, 0xc0, 0xf5, 0xcd, 0xbb, 0x77, 0x6f, + 0x4a, 0xe7, 0x39, 0xf7, 0x70, 0x2a, 0x28, 0xd6, 0x28, 0xd0, 0xe3, 0x50, 0x6c, 0xb4, 0x7c, 0xa1, + 0x06, 0x0e, 0x1f, 0xec, 0xcf, 0x16, 0xd7, 0x5a, 0x3e, 0xa6, 0x30, 0x2d, 0x9a, 0xa5, 0x98, 0x3b, + 0x9a, 0x25, 0x3b, 0x9e, 0xf3, 0x5b, 0x16, 0x9c, 0x5b, 0xa9, 0x5e, 0x0b, 0x83, 0x56, 0xb3, 0x1a, + 0x87, 0x4e, 0x4c, 0xea, 0x7b, 0x72, 0x6c, 0x5e, 0x31, 0x22, 0x5a, 0x9e, 0x4e, 0x45, 0xb4, 0x9c, + 0x4e, 0x95, 0xd2, 0xc2, 0x59, 0xd6, 0x61, 0x28, 0x74, 0xfc, 0xba, 0x52, 0xf9, 0x9e, 0x39, 0x7a, + 0x1e, 0xad, 0x96, 0x31, 0xa5, 0xd6, 0xc4, 0x13, 0x2b, 0x8c, 0x05, 0x13, 0xfb, 0x9b, 0x45, 0x98, + 0x5a, 0x69, 0x90, 0x07, 0xc6, 0xc0, 0x5e, 0x84, 0x21, 0x37, 0xf4, 0x76, 0x49, 0x98, 0x76, 0xdf, + 0x95, 0x19, 0x14, 0x0b, 0x6c, 0xee, 0x18, 0x20, 0x23, 0xfe, 0xa9, 0xd8, 0xe7, 0xf8, 0xa7, 0xcc, + 0xcf, 0x82, 0xb6, 0x60, 0x38, 0xe0, 0x9f, 0x61, 0x7a, 0x90, 0x8d, 0xe1, 0xeb, 0x47, 0x37, 0x26, + 0x3d, 0x3e, 0x73, 0xe2, 0x23, 0xf2, 0x60, 0x0c, 0x25, 0xcf, 0x05, 0x14, 0x4b, 0xe6, 0x33, 0x9f, + 0x80, 0x31, 0x9d, 0xb2, 0xa7, 0xa8, 0x8c, 0x35, 0x38, 0xbd, 0xd2, 0x08, 0x6a, 0xf7, 0x52, 0x31, + 0x5a, 0x2f, 0xc3, 0x28, 0x15, 0x26, 0x91, 0x11, 0xb8, 0x68, 0x44, 0x68, 0x0a, 0x14, 0xd6, 0xe9, + 0xec, 0xff, 0x64, 0xc1, 0x93, 0xd7, 0x96, 0x96, 0x2b, 0x54, 0x62, 0x45, 0x31, 0xf1, 0xe3, 0xb6, + 0x20, 0xd1, 0x8b, 0x30, 0xd4, 0x74, 0x35, 0x9e, 0xea, 0x53, 0x56, 0xca, 0x8c, 0x9d, 0xc0, 0x3e, + 0x2a, 0x91, 0xd2, 0xbf, 0x6a, 0xc1, 0xe9, 0x6b, 0x5e, 0x8c, 0x49, 0x33, 0x48, 0xc7, 0x75, 0x86, + 0xa4, 0x19, 0x44, 0x5e, 0x1c, 0x84, 0x7b, 0xe9, 0xb8, 0x4e, 0xac, 0x30, 0x58, 0xa3, 0xe2, 0x35, + 0xef, 0x7a, 0x54, 0x96, 0x8b, 0x4e, 0x69, 0x35, 0x73, 0x38, 0x56, 0x14, 0xb4, 0x63, 0xae, 0x17, + 0x32, 0xb5, 0x67, 0x4f, 0x08, 0x0b, 0xd5, 0xb1, 0xb2, 0x44, 0xe0, 0x84, 0xc6, 0xfe, 0x07, 0x16, + 0x9c, 0xbd, 0xd6, 0x68, 0x45, 0x31, 0x09, 0xb7, 0x22, 0xa3, 0xb1, 0x2f, 0x42, 0x89, 0x48, 0x15, + 0x5d, 0xb4, 0x55, 0x6d, 0x7f, 0x4a, 0x77, 0xe7, 0x41, 0xa5, 0x8a, 0x2e, 0x47, 0x0c, 0x63, 0x6f, + 0x11, 0x77, 0xff, 0xba, 0x00, 0xe3, 0xd7, 0x37, 0x36, 0x2a, 0xd7, 0x48, 0x2c, 0xc4, 0x7d, 0xb6, + 0x4f, 0xa9, 0xa2, 0x19, 0xd4, 0xa3, 0x57, 0xe7, 0xba, 0xac, 0x9e, 0x56, 0xec, 0x35, 0xe6, 0x78, + 0x0c, 0xff, 0xdc, 0xaa, 0x1f, 0xdf, 0x0a, 0xab, 0x71, 0xe8, 0xf9, 0xf5, 0x8e, 0x06, 0xb8, 0xdc, + 0x92, 0x8a, 0xdd, 0xb6, 0x24, 0xf4, 0x22, 0x0c, 0x45, 0xb5, 0x6d, 0xa2, 0xfc, 0x03, 0x3f, 0xa3, + 0x34, 0x1e, 0x06, 0x3d, 0xdc, 0x9f, 0x2d, 0xdd, 0xc6, 0xab, 0xfc, 0x0f, 0x16, 0xa4, 0xe8, 0x5d, + 0x18, 0xdd, 0x8e, 0xe3, 0xe6, 0x75, 0xe2, 0xb8, 0x24, 0x94, 0xab, 0x3d, 0x43, 0xe1, 0xa4, 0x83, + 0xc1, 0x0b, 0x24, 0x0b, 0x2b, 0x81, 0x45, 0x58, 0xe7, 0x68, 0x57, 0x01, 0x12, 0xdc, 0x43, 0xb2, + 0xa2, 0xec, 0xbf, 0x5e, 0x80, 0xe1, 0xeb, 0x8e, 0xef, 0x36, 0x48, 0x88, 0x56, 0x60, 0x80, 0x3c, + 0x20, 0xb5, 0x7c, 0xba, 0x72, 0xb2, 0x67, 0x73, 0xa7, 0x18, 0xfd, 0x8f, 0x59, 0x79, 0x84, 0x61, + 0x98, 0xb6, 0xfb, 0x9a, 0x0a, 0xfc, 0x7d, 0x3e, 0x7b, 0x14, 0xd4, 0x94, 0xe0, 0x1b, 0xbe, 0x00, + 0x61, 0xc9, 0x88, 0xb9, 0x8f, 0x6a, 0xcd, 0x2a, 0x95, 0x52, 0x71, 0xbe, 0xd8, 0xfe, 0x8d, 0xa5, + 0x0a, 0x27, 0x17, 0x7c, 0xb9, 0xfb, 0x48, 0x02, 0x71, 0xc2, 0xce, 0x7e, 0x15, 0xce, 0xb0, 0x53, + 0x67, 0x27, 0xde, 0x36, 0xd6, 0x4c, 0xe6, 0xe4, 0xb4, 0xaf, 0xc1, 0xb0, 0xd8, 0xf4, 0xd0, 0x93, + 0x50, 0xdc, 0xf1, 0x7c, 0x71, 0x1a, 0xa0, 0x4e, 0xe2, 0xd7, 0x3d, 0x1f, 0x53, 0x38, 0x43, 0x3b, + 0x0f, 0xc4, 0x81, 0x7a, 0x82, 0x76, 0x1e, 0x60, 0x0a, 0xb7, 0xff, 0x71, 0x01, 0x4e, 0xad, 0x56, + 0x97, 0xaa, 0xa6, 0x07, 0xf1, 0x55, 0x18, 0xe3, 0x2a, 0x05, 0x9d, 0xbd, 0x4e, 0x43, 0x34, 0x44, + 0x9d, 0xb7, 0x6c, 0x68, 0x38, 0x6c, 0x50, 0xd2, 0xea, 0xbc, 0xf7, 0xfd, 0x74, 0x20, 0xdb, 0xea, + 0x9b, 0x37, 0x31, 0x85, 0x53, 0x34, 0xd5, 0x4e, 0xb8, 0xac, 0x54, 0x68, 0xa5, 0xa1, 0xbc, 0x01, + 0x13, 0x5e, 0x54, 0x8b, 0xbc, 0x55, 0x9f, 0x0a, 0x12, 0xa7, 0x26, 0xd7, 0x41, 0x62, 0xaf, 0xd0, + 0xa6, 0x2a, 0x2c, 0x4e, 0x51, 0x6b, 0x82, 0x7b, 0x30, 0xb7, 0x86, 0x93, 0x1d, 0x4a, 0xfc, 0x45, + 0x28, 0xa9, 0x90, 0x2f, 0x19, 0xa9, 0x67, 0x75, 0x8e, 0xd4, 0xcb, 0x21, 0xb9, 0xa4, 0x5f, 0xb7, + 0xd8, 0xd1, 0xaf, 0xfb, 0x2f, 0x2c, 0x48, 0xa2, 0x5b, 0x10, 0x86, 0x52, 0x33, 0x60, 0x27, 0x65, + 0xa1, 0x3c, 0x95, 0xce, 0x50, 0x85, 0xc4, 0x92, 0xe2, 0x93, 0xae, 0x22, 0xcb, 0xe2, 0x84, 0x0d, + 0x5a, 0x83, 0xe1, 0x66, 0x48, 0xaa, 0x31, 0x8b, 0x47, 0xef, 0x81, 0x23, 0x5b, 0x1e, 0x15, 0x5e, + 0x12, 0x4b, 0x16, 0xf6, 0x77, 0x2d, 0x80, 0x35, 0x6f, 0xc7, 0x8b, 0xf9, 0x64, 0xec, 0x9f, 0xe5, + 0x7b, 0x13, 0x06, 0xa2, 0x26, 0xa9, 0xe5, 0x3b, 0xe3, 0x4c, 0x5a, 0x54, 0x6d, 0x92, 0x5a, 0xf2, + 0x19, 0xe8, 0x3f, 0xcc, 0xf8, 0xd8, 0xbf, 0x0e, 0x30, 0x91, 0x90, 0x51, 0xd3, 0x03, 0xbd, 0x60, + 0xa8, 0xab, 0x8f, 0xa7, 0xd4, 0xd5, 0x12, 0xa3, 0xd6, 0x94, 0xd4, 0x58, 0xae, 0x2c, 0x2a, 0x6f, + 0x5f, 0xce, 0xdb, 0x20, 0x5a, 0xd3, 0xdc, 0xba, 0xf3, 0x80, 0xeb, 0x55, 0xcf, 0x6b, 0x0b, 0xf2, + 0x90, 0x9f, 0x64, 0xb2, 0x15, 0x48, 0x4d, 0xab, 0xaf, 0xfc, 0x69, 0xf2, 0x9f, 0x49, 0x57, 0x5a, + 0x1d, 0xab, 0xd5, 0xf3, 0x85, 0x7b, 0xb2, 0xc7, 0x5a, 0x3d, 0x3f, 0x5d, 0xab, 0xe7, 0xe7, 0xa8, + 0xd5, 0xf3, 0xd1, 0x57, 0x2d, 0x18, 0x16, 0x5e, 0x7d, 0x16, 0x27, 0x38, 0x7a, 0xf5, 0xb5, 0x9e, + 0xaa, 0x16, 0xc7, 0x03, 0xbc, 0xfa, 0x79, 0xa9, 0x4c, 0x0a, 0x68, 0x66, 0x13, 0x64, 0xd5, 0xe8, + 0x5b, 0x16, 0x4c, 0x88, 0xdf, 0x98, 0xbc, 0xdf, 0x22, 0x51, 0x2c, 0xb6, 0xbb, 0xcf, 0x1c, 0xa7, + 0x35, 0x82, 0x05, 0x6f, 0xd4, 0xcf, 0x4a, 0x11, 0x63, 0x22, 0x33, 0xdb, 0x96, 0x6a, 0x0f, 0xfa, + 0x9e, 0x05, 0x67, 0x76, 0x9c, 0x07, 0xbc, 0x46, 0x0e, 0xc3, 0x4e, 0xec, 0x05, 0x22, 0x16, 0x72, + 0xa5, 0xd7, 0x79, 0xd2, 0xc6, 0x88, 0x37, 0xf7, 0x93, 0xf2, 0x7c, 0xbd, 0x13, 0x49, 0x66, 0xa3, + 0x3b, 0xb6, 0x70, 0xc6, 0x85, 0x11, 0x39, 0x31, 0x3b, 0xa8, 0xf1, 0x8b, 0xfa, 0xae, 0x7e, 0xf4, + 0x0a, 0x94, 0x4e, 0xbf, 0xb9, 0x37, 0x5b, 0x8e, 0x1f, 0x7b, 0xf1, 0x9e, 0xa6, 0xf4, 0xb3, 0x5a, + 0xc4, 0x44, 0xec, 0x63, 0x2d, 0xdb, 0x30, 0xa6, 0xcf, 0xb9, 0x3e, 0xd6, 0x14, 0xc0, 0xe9, 0x0e, + 0xf3, 0xa9, 0x8f, 0x15, 0xb6, 0xe0, 0xf1, 0xae, 0xf3, 0xa2, 0x7f, 0xd5, 0xda, 0x3f, 0xb4, 0x74, + 0x81, 0x79, 0x12, 0xce, 0xa4, 0x75, 0xd3, 0x99, 0x74, 0x29, 0xef, 0xd2, 0xe9, 0xe2, 0x51, 0xda, + 0xd2, 0xdb, 0x4f, 0x77, 0x02, 0xb4, 0x01, 0x43, 0x0d, 0x0a, 0x91, 0x27, 0x58, 0x97, 0x7b, 0x59, + 0x9c, 0x89, 0x72, 0xc1, 0xe0, 0x11, 0x16, 0xbc, 0xec, 0xdf, 0xb6, 0x60, 0xe0, 0x24, 0x86, 0xa7, + 0x62, 0x0e, 0x4f, 0x37, 0x5d, 0x57, 0x5c, 0x4a, 0x9e, 0xc3, 0xce, 0xfd, 0xe5, 0x07, 0x31, 0xf1, + 0x23, 0xa6, 0x93, 0x76, 0x1c, 0xa1, 0x5f, 0x2b, 0xc0, 0x28, 0xad, 0x48, 0xfa, 0x6f, 0x5e, 0x87, + 0xf1, 0x86, 0xb3, 0x49, 0x1a, 0xd2, 0x05, 0x9e, 0xb6, 0xdf, 0xd6, 0x74, 0x24, 0x36, 0x69, 0x69, + 0xe1, 0x2d, 0xfd, 0x84, 0x40, 0xa8, 0x44, 0xaa, 0xb0, 0x71, 0x7c, 0x80, 0x4d, 0x5a, 0x6a, 0x42, + 0xdc, 0x77, 0xe2, 0xda, 0xb6, 0xb0, 0xed, 0x54, 0x73, 0xef, 0x52, 0x20, 0xe6, 0x38, 0xb4, 0x00, + 0x93, 0x72, 0xc6, 0xde, 0xe1, 0x43, 0x27, 0xd4, 0x45, 0x75, 0xa1, 0x14, 0x9b, 0x68, 0x9c, 0xa6, + 0x47, 0x9f, 0x80, 0x09, 0x3a, 0x38, 0x41, 0x2b, 0x96, 0x51, 0x35, 0x83, 0x4c, 0x51, 0x66, 0x51, + 0xcc, 0x1b, 0x06, 0x06, 0xa7, 0x28, 0xed, 0x77, 0xe1, 0xf4, 0x5a, 0xe0, 0xb8, 0x8b, 0x4e, 0xc3, + 0xf1, 0x6b, 0x24, 0x5c, 0xf5, 0xeb, 0x99, 0x67, 0xd1, 0xfa, 0x79, 0x71, 0x21, 0xeb, 0xbc, 0xd8, + 0x0e, 0x01, 0xe9, 0x15, 0x88, 0x78, 0xb0, 0xb7, 0x61, 0xd8, 0xe3, 0x55, 0x89, 0x59, 0x7b, 0x25, + 0xcb, 0xcb, 0xd4, 0xd6, 0x46, 0x2d, 0xbe, 0x89, 0x03, 0xb0, 0x64, 0x49, 0x4d, 0x92, 0x4e, 0x6e, + 0xa9, 0x6c, 0xab, 0xcf, 0xfe, 0x5b, 0x16, 0x4c, 0xde, 0x4c, 0xdd, 0x5a, 0xbc, 0x08, 0x43, 0x11, + 0x09, 0x3b, 0xf8, 0xd8, 0xaa, 0x0c, 0x8a, 0x05, 0xf6, 0xa1, 0xdb, 0xfb, 0x5f, 0x2b, 0x40, 0x89, + 0x05, 0x17, 0x37, 0x9d, 0x5a, 0x3f, 0x95, 0xd2, 0x75, 0x43, 0x29, 0xcd, 0xb0, 0x36, 0x55, 0x83, + 0xba, 0xe9, 0xa4, 0xe8, 0xb6, 0xba, 0xc5, 0x97, 0xcb, 0xd0, 0x4c, 0x18, 0xf2, 0x0b, 0x5f, 0x13, + 0xe6, 0xa5, 0x3f, 0x79, 0xc3, 0x8f, 0x9d, 0xe0, 0x2a, 0xda, 0x47, 0xef, 0x04, 0x57, 0x35, 0xad, + 0x8b, 0x54, 0xaa, 0x68, 0xad, 0x67, 0x62, 0xfb, 0xd3, 0x2c, 0x52, 0xd4, 0x69, 0x78, 0x5f, 0x22, + 0xea, 0x36, 0xec, 0xac, 0x08, 0xfc, 0x14, 0xd0, 0x43, 0x26, 0x60, 0xc4, 0x3f, 0x7e, 0xc9, 0x39, + 0x29, 0x62, 0x5f, 0x87, 0xc9, 0xd4, 0xd8, 0xa1, 0x97, 0x61, 0xb0, 0xb9, 0xed, 0x44, 0x24, 0x15, + 0x8d, 0x32, 0x58, 0xa1, 0xc0, 0xc3, 0xfd, 0xd9, 0x09, 0x55, 0x80, 0x41, 0x30, 0xa7, 0xb6, 0xff, + 0xc2, 0x82, 0x81, 0x9b, 0x81, 0xdb, 0xcf, 0x39, 0x76, 0xdd, 0x98, 0x63, 0x17, 0xb3, 0x53, 0x23, + 0x74, 0x9d, 0x5e, 0x95, 0xd4, 0xf4, 0xba, 0x94, 0x83, 0xd7, 0xd1, 0x33, 0x6b, 0x07, 0x46, 0x59, + 0xea, 0x05, 0x11, 0x86, 0xf3, 0xa2, 0x61, 0x40, 0xcd, 0xa6, 0x0c, 0xa8, 0x49, 0x8d, 0x54, 0x33, + 0xa3, 0x9e, 0x85, 0x61, 0x11, 0xf6, 0x91, 0x0e, 0x8f, 0x15, 0xb4, 0x58, 0xe2, 0xed, 0xdf, 0x2c, + 0x82, 0x91, 0xea, 0x01, 0xfd, 0xc8, 0x82, 0xb9, 0x90, 0xdf, 0xcd, 0x71, 0xcb, 0xad, 0xd0, 0xf3, + 0xeb, 0xd5, 0xda, 0x36, 0x71, 0x5b, 0x0d, 0xcf, 0xaf, 0xaf, 0xd6, 0xfd, 0x40, 0x81, 0x97, 0x1f, + 0x90, 0x5a, 0x8b, 0xb9, 0x69, 0x73, 0x67, 0x98, 0x50, 0xe7, 0xbe, 0x57, 0x0f, 0xf6, 0x67, 0xe7, + 0x70, 0x4f, 0xb5, 0xe0, 0x1e, 0x5b, 0x85, 0xfe, 0xd8, 0x82, 0x79, 0x9e, 0xec, 0x20, 0x7f, 0x4f, + 0x72, 0x19, 0x9e, 0x15, 0xc9, 0x34, 0x61, 0xb7, 0x41, 0xc2, 0x9d, 0xc5, 0x57, 0xc4, 0x20, 0xcf, + 0x57, 0x7a, 0xab, 0x15, 0xf7, 0xda, 0x4c, 0xfb, 0xdf, 0x16, 0x61, 0x9c, 0x8e, 0x67, 0x72, 0xd1, + 0xf9, 0x65, 0x63, 0x9a, 0x3c, 0x95, 0x9a, 0x26, 0xa7, 0x0c, 0xe2, 0x87, 0x73, 0xc7, 0x39, 0x86, + 0x53, 0x0d, 0x27, 0x8a, 0xaf, 0x13, 0x27, 0x8c, 0x37, 0x89, 0xc3, 0x0e, 0x59, 0xc5, 0x22, 0xe8, + 0xe9, 0xe0, 0x56, 0xc5, 0x12, 0xad, 0xa5, 0xb9, 0xe1, 0xf6, 0x0a, 0xd0, 0x7d, 0x40, 0xec, 0x44, + 0x37, 0x74, 0xfc, 0x88, 0x77, 0xc6, 0x13, 0x9e, 0xdd, 0x1e, 0xab, 0x9d, 0x11, 0xd5, 0xa2, 0xb5, + 0x36, 0x76, 0xb8, 0x43, 0x15, 0xda, 0xb1, 0xfd, 0x60, 0xde, 0x63, 0xfb, 0xa1, 0x8c, 0xc8, 0xf4, + 0x5f, 0xb4, 0xe0, 0x34, 0xfd, 0x30, 0x66, 0x14, 0x73, 0x84, 0x02, 0x98, 0xa4, 0x3d, 0x68, 0x90, + 0x58, 0xc2, 0xc4, 0x0a, 0xcb, 0xd0, 0xa5, 0x4d, 0x3e, 0x89, 0xc6, 0x76, 0xc3, 0x64, 0x86, 0xd3, + 0xdc, 0xed, 0xdf, 0xb4, 0x80, 0x45, 0xcc, 0x9d, 0xc4, 0x3e, 0x76, 0xcd, 0xdc, 0xc7, 0xec, 0x6c, + 0xa1, 0xd1, 0x65, 0x0b, 0x7b, 0x09, 0xa6, 0x28, 0xb6, 0x12, 0x06, 0x0f, 0xd4, 0xe1, 0x68, 0xb6, + 0x93, 0xf7, 0x6f, 0x5a, 0x5c, 0xdc, 0x29, 0xad, 0xf8, 0x3e, 0x9c, 0xf2, 0xb5, 0xff, 0x74, 0x21, + 0x4b, 0x25, 0x70, 0x2e, 0xbf, 0x40, 0x63, 0xeb, 0x5f, 0x8b, 0x8a, 0x4b, 0x31, 0xc4, 0xed, 0x75, + 0xd8, 0xff, 0xc4, 0x82, 0xc7, 0x74, 0x42, 0xed, 0x3e, 0x64, 0x96, 0x43, 0xb4, 0x0c, 0x23, 0x41, + 0x93, 0x84, 0x4e, 0x62, 0x01, 0x5c, 0x92, 0x23, 0x7e, 0x4b, 0xc0, 0x0f, 0xf7, 0x67, 0xcf, 0xe8, + 0xdc, 0x25, 0x1c, 0xab, 0x92, 0xc8, 0x86, 0x21, 0x66, 0x89, 0x46, 0xe2, 0x26, 0x2b, 0x4b, 0x99, + 0xc2, 0xce, 0x13, 0x22, 0x2c, 0x30, 0xf6, 0xdf, 0xb6, 0xf8, 0x28, 0xeb, 0x4d, 0x47, 0x5f, 0x86, + 0xa9, 0x1d, 0x6a, 0x2c, 0x2c, 0x3f, 0x68, 0xd2, 0x2d, 0x84, 0x9d, 0x87, 0x5a, 0x79, 0x04, 0x67, + 0x97, 0xee, 0x2e, 0x4e, 0x8b, 0xd6, 0x4f, 0xad, 0xa7, 0xd8, 0xe2, 0xb6, 0x8a, 0xec, 0x3f, 0x11, + 0x73, 0x95, 0x69, 0x2d, 0xcf, 0xc2, 0x70, 0x33, 0x70, 0x97, 0x56, 0xcb, 0x58, 0x8c, 0x95, 0x5a, + 0x6c, 0x15, 0x0e, 0xc6, 0x12, 0x8f, 0xae, 0x02, 0x90, 0x07, 0x31, 0x09, 0x7d, 0xa7, 0xb1, 0x5a, + 0x4e, 0xe7, 0xe7, 0x59, 0x56, 0x18, 0xac, 0x51, 0xd1, 0x32, 0xcd, 0x30, 0xd8, 0xf5, 0x5c, 0x76, + 0x2f, 0xa1, 0x68, 0x96, 0xa9, 0x28, 0x0c, 0xd6, 0xa8, 0xa8, 0x89, 0xd6, 0xf2, 0x23, 0x2e, 0xc0, + 0x9d, 0x4d, 0x91, 0xe9, 0x63, 0x24, 0x31, 0xd1, 0x6e, 0xeb, 0x48, 0x6c, 0xd2, 0xda, 0x7f, 0x50, + 0x02, 0x48, 0x54, 0x04, 0xf4, 0x55, 0x0b, 0x46, 0x6a, 0x4e, 0xd3, 0xa9, 0xf1, 0x34, 0x4e, 0xc5, + 0xec, 0x0b, 0x5c, 0x49, 0xe1, 0xb9, 0x25, 0x51, 0x90, 0xfb, 0xb6, 0x3e, 0x2e, 0x27, 0x88, 0x04, + 0x67, 0xfa, 0xb3, 0x54, 0xcd, 0xe8, 0x1b, 0x16, 0x8c, 0x3a, 0x8d, 0x46, 0x50, 0x73, 0x62, 0xd6, + 0xa3, 0x42, 0x1e, 0x67, 0xa5, 0xd6, 0x92, 0x85, 0xa4, 0x2c, 0x6f, 0xcc, 0x8b, 0xf2, 0x78, 0x4c, + 0xc3, 0x64, 0xb6, 0x47, 0x6f, 0x02, 0xfa, 0xb8, 0x54, 0x2d, 0xf9, 0x47, 0x99, 0x49, 0xab, 0x96, + 0x25, 0x26, 0x1a, 0x34, 0xad, 0x12, 0xbd, 0x6b, 0x24, 0xb5, 0x18, 0xc8, 0x73, 0x89, 0xda, 0xd8, + 0x34, 0xb3, 0xf2, 0x59, 0xa0, 0xcf, 0xeb, 0xd1, 0xbb, 0x83, 0x79, 0x6e, 0x28, 0x6b, 0xba, 0x5b, + 0x46, 0xe4, 0x6e, 0x0c, 0x93, 0xae, 0xb9, 0x49, 0x88, 0x70, 0xac, 0x2b, 0xd9, 0x35, 0xa4, 0x76, + 0x97, 0x64, 0x5b, 0x48, 0x21, 0x70, 0xba, 0x0a, 0xf4, 0x79, 0x1e, 0x5b, 0xbd, 0xea, 0x6f, 0x05, + 0x22, 0x22, 0xeb, 0x72, 0x8e, 0x6f, 0xbe, 0x17, 0xc5, 0x64, 0x87, 0x96, 0x49, 0xb6, 0x81, 0x9b, + 0x82, 0x0b, 0x56, 0xfc, 0xd0, 0x06, 0x0c, 0xb1, 0xeb, 0x3f, 0xd1, 0xf4, 0x48, 0x1e, 0x37, 0x91, + 0x79, 0xf1, 0x35, 0xd9, 0x7c, 0xd9, 0xdf, 0x08, 0x0b, 0x5e, 0xe8, 0xba, 0xbc, 0x28, 0x1e, 0xad, + 0xfa, 0xb7, 0x23, 0xc2, 0x2e, 0x8a, 0x97, 0x16, 0x3f, 0x9a, 0xdc, 0xfc, 0xe6, 0xf0, 0x8e, 0x69, + 0xbc, 0x8c, 0x92, 0x74, 0x0f, 0x16, 0xff, 0x65, 0x76, 0xb0, 0x69, 0xc8, 0xd3, 0x50, 0x33, 0x97, + 0x58, 0x32, 0xd8, 0x77, 0x4c, 0x66, 0x38, 0xcd, 0x7d, 0xc6, 0x83, 0x71, 0x63, 0xc5, 0xf6, 0xd1, + 0xd9, 0xd9, 0x80, 0xa9, 0xf4, 0x92, 0xec, 0xa3, 0x8f, 0xf3, 0xcf, 0x07, 0x60, 0xc2, 0x9c, 0x18, + 0x68, 0x1e, 0x4a, 0x3b, 0x2c, 0x77, 0x57, 0x92, 0x31, 0x48, 0xcd, 0xff, 0x75, 0x89, 0xc0, 0x09, + 0x0d, 0xcb, 0x9d, 0xc4, 0x8a, 0xdf, 0xbe, 0xdd, 0x2e, 0xbc, 0xab, 0x0a, 0x83, 0x35, 0x2a, 0xaa, + 0xb0, 0x6d, 0x06, 0x41, 0xac, 0x04, 0xb7, 0x9a, 0x33, 0x8b, 0x0c, 0x8a, 0x05, 0x96, 0x0a, 0xec, + 0x7b, 0xb4, 0x43, 0x0d, 0xd3, 0xdf, 0xa5, 0x04, 0xf6, 0x0d, 0x1d, 0x89, 0x4d, 0x5a, 0xba, 0x01, + 0x05, 0x11, 0x9b, 0x84, 0x42, 0x2d, 0x4c, 0x82, 0x7a, 0xaa, 0xfc, 0x3a, 0x9c, 0xc4, 0xa3, 0xcf, + 0xc1, 0x63, 0xea, 0xf6, 0x1a, 0xe6, 0xfe, 0x43, 0x59, 0xe3, 0x90, 0x61, 0xdb, 0x3d, 0xb6, 0xd4, + 0x99, 0x0c, 0x77, 0x2b, 0x8f, 0xde, 0x80, 0x09, 0xa1, 0xd2, 0x49, 0x8e, 0xc3, 0xe6, 0x11, 0xef, + 0x0d, 0x03, 0x8b, 0x53, 0xd4, 0xa8, 0x0c, 0x53, 0x14, 0xc2, 0x54, 0x29, 0xc9, 0x81, 0xdf, 0xc2, + 0x53, 0x3b, 0xf3, 0x8d, 0x14, 0x1e, 0xb7, 0x95, 0x40, 0x0b, 0x30, 0xc9, 0x75, 0x0b, 0x6a, 0xc1, + 0xb0, 0xef, 0x20, 0x22, 0x28, 0xd5, 0x22, 0xb8, 0x65, 0xa2, 0x71, 0x9a, 0x1e, 0xbd, 0x0a, 0x63, + 0x4e, 0x58, 0xdb, 0xf6, 0x62, 0x52, 0x8b, 0x5b, 0x21, 0x4f, 0xc1, 0xa0, 0x9d, 0x91, 0x2f, 0x68, + 0x38, 0x6c, 0x50, 0xda, 0x5f, 0x82, 0xd3, 0x1d, 0x02, 0xb5, 0xe9, 0xc4, 0x71, 0x9a, 0x9e, 0xec, + 0x53, 0x2a, 0xac, 0x67, 0xa1, 0xb2, 0x2a, 0x7b, 0xa3, 0x51, 0xd1, 0xd9, 0xc9, 0x1c, 0xa7, 0x5a, + 0x22, 0x3f, 0x35, 0x3b, 0x57, 0x24, 0x02, 0x27, 0x34, 0xf6, 0x7f, 0x2b, 0x81, 0xe6, 0x66, 0xc8, + 0x11, 0xcc, 0xf1, 0x2a, 0x8c, 0xc9, 0xdc, 0x94, 0x5a, 0x4e, 0x38, 0xd5, 0xcd, 0x6b, 0x1a, 0x0e, + 0x1b, 0x94, 0xb4, 0x6d, 0xbe, 0x74, 0x9a, 0xa4, 0x83, 0x88, 0x94, 0x37, 0x05, 0x27, 0x34, 0xe8, + 0x32, 0x8c, 0x44, 0xa4, 0xb1, 0xb5, 0xe6, 0xf9, 0xf7, 0xc4, 0xc4, 0x56, 0x52, 0xb9, 0x2a, 0xe0, + 0x58, 0x51, 0xa0, 0xcf, 0x40, 0xb1, 0xe5, 0xb9, 0x62, 0x2a, 0xcf, 0x49, 0xbd, 0xf3, 0xf6, 0x6a, + 0xf9, 0x70, 0x7f, 0x76, 0xb6, 0x73, 0xc2, 0x4d, 0x6a, 0x46, 0x46, 0x73, 0x74, 0xf1, 0xd1, 0xa2, + 0x9d, 0xfc, 0xc7, 0x43, 0x3d, 0xfa, 0x8f, 0xaf, 0x02, 0x88, 0x3e, 0xcb, 0x99, 0x5c, 0x4c, 0xbe, + 0xd9, 0x35, 0x85, 0xc1, 0x1a, 0x15, 0x35, 0x46, 0x6b, 0x21, 0x71, 0xa4, 0xb5, 0xc6, 0xa3, 0x88, + 0x47, 0x3e, 0x84, 0x31, 0xba, 0x94, 0xe6, 0x86, 0xdb, 0x2b, 0x40, 0x4d, 0x38, 0xe5, 0xd2, 0x75, + 0x64, 0xd4, 0x5a, 0x3a, 0x46, 0xec, 0x32, 0xad, 0xb1, 0x9c, 0xe6, 0x84, 0xdb, 0x99, 0xa3, 0x77, + 0x60, 0x46, 0x02, 0xdb, 0xef, 0xa7, 0xb2, 0xe5, 0x52, 0x5c, 0x3c, 0x7f, 0xb0, 0x3f, 0x3b, 0x53, + 0xee, 0x4a, 0x85, 0x8f, 0xe0, 0x80, 0xde, 0x86, 0x21, 0x76, 0xe2, 0x10, 0x4d, 0x8f, 0xb2, 0xdd, + 0xee, 0xa5, 0xbc, 0x0e, 0xb7, 0x39, 0x76, 0x6e, 0x21, 0x22, 0x1b, 0x93, 0x53, 0x1c, 0x06, 0xc4, + 0x82, 0x27, 0x6a, 0xc2, 0xa8, 0xe3, 0xfb, 0x41, 0xec, 0x70, 0x25, 0x6c, 0x2c, 0x8f, 0x1e, 0xa9, + 0x55, 0xb1, 0x90, 0x94, 0xe5, 0xf5, 0xa8, 0x30, 0x2b, 0x0d, 0x83, 0xf5, 0x2a, 0xe8, 0x36, 0x1e, + 0xdc, 0xa7, 0x02, 0x53, 0x3a, 0xdd, 0xa3, 0xe9, 0xf1, 0x3c, 0xdb, 0xf8, 0x2d, 0xa3, 0x90, 0x26, + 0xc1, 0x4c, 0x66, 0x38, 0xcd, 0x1d, 0xcd, 0x19, 0x7e, 0xd4, 0x89, 0x24, 0xb4, 0x38, 0xf1, 0xa3, + 0xea, 0x6e, 0x53, 0x76, 0xf7, 0x99, 0xc7, 0xf8, 0x31, 0x49, 0x30, 0x99, 0xba, 0xfb, 0x9c, 0xa0, + 0xb0, 0x4e, 0x37, 0xf3, 0x1a, 0x8c, 0x6a, 0x03, 0xde, 0x4b, 0x80, 0xe8, 0xcc, 0x1b, 0x30, 0x95, + 0x1e, 0xc8, 0x9e, 0x02, 0x4c, 0xff, 0x7b, 0x01, 0x26, 0x3b, 0x9c, 0x64, 0xdc, 0xf3, 0x58, 0x94, + 0xb7, 0x21, 0xf2, 0x6e, 0x78, 0xbe, 0x8b, 0x19, 0xc6, 0x14, 0x5c, 0x85, 0x1c, 0x82, 0x4b, 0x4a, + 0xd1, 0x62, 0x57, 0x29, 0x2a, 0x84, 0xd5, 0xc0, 0xf1, 0x85, 0x95, 0xb9, 0x3b, 0x0c, 0xe6, 0xda, + 0x1d, 0x1e, 0x82, 0x80, 0x33, 0x36, 0x98, 0xe1, 0x1c, 0x1b, 0xcc, 0xa1, 0x05, 0x13, 0xe6, 0xcc, + 0xcb, 0x31, 0xe2, 0x8f, 0xea, 0x00, 0xce, 0x31, 0x43, 0x2c, 0x0e, 0x83, 0x46, 0x83, 0x84, 0x22, + 0x52, 0x6c, 0x42, 0xd8, 0x55, 0x02, 0x8a, 0x35, 0x0a, 0xfb, 0x5b, 0x05, 0x98, 0x4a, 0xe2, 0x8f, + 0x45, 0x8e, 0xde, 0xfe, 0x1d, 0x0d, 0x6c, 0x18, 0x47, 0x03, 0x59, 0xa9, 0x77, 0x53, 0xed, 0xea, + 0x7a, 0x4c, 0xf0, 0x76, 0xea, 0x98, 0xe0, 0xa5, 0x1e, 0xf9, 0x1e, 0x7d, 0x64, 0xf0, 0x2f, 0x0b, + 0x70, 0x36, 0x5d, 0x64, 0xa9, 0xe1, 0x78, 0x3b, 0x7d, 0x1c, 0xa7, 0xcf, 0x19, 0xe3, 0xf4, 0x4a, + 0x6f, 0xfd, 0x61, 0x8d, 0xeb, 0x3a, 0x58, 0x4e, 0x6a, 0xb0, 0x5e, 0x3b, 0x0e, 0xf3, 0xa3, 0x47, + 0xec, 0x3f, 0x5b, 0xf0, 0x78, 0xc7, 0x72, 0x27, 0xe1, 0x02, 0x7d, 0xcb, 0x74, 0x81, 0xbe, 0x78, + 0x8c, 0xee, 0x75, 0xf1, 0x89, 0xfe, 0x97, 0x42, 0x97, 0x6e, 0x31, 0x6f, 0xd9, 0x2d, 0x18, 0x75, + 0x6a, 0x35, 0x12, 0x45, 0xeb, 0x81, 0xab, 0x92, 0x46, 0xbd, 0xc0, 0xf6, 0xcf, 0x04, 0x7c, 0xb8, + 0x3f, 0x3b, 0x93, 0x66, 0x91, 0xa0, 0xb1, 0xce, 0xc1, 0x4c, 0xfe, 0x56, 0xe8, 0x53, 0xf2, 0xb7, + 0xab, 0x00, 0xbb, 0xca, 0x4a, 0x4f, 0x3b, 0xe1, 0x34, 0xfb, 0x5d, 0xa3, 0x42, 0xef, 0x30, 0xad, + 0x97, 0x87, 0x48, 0x0c, 0x64, 0x2e, 0x38, 0xe3, 0x03, 0xea, 0xf1, 0x16, 0xfc, 0x9e, 0xa7, 0xf2, + 0x58, 0x2a, 0x9e, 0xf6, 0x77, 0x8a, 0xf0, 0x33, 0x47, 0x4c, 0x3b, 0xb4, 0x60, 0x9e, 0x7c, 0x3e, + 0x9f, 0x76, 0x4f, 0xcd, 0x74, 0x2c, 0x6c, 0xf8, 0xab, 0x52, 0x1f, 0xab, 0xf0, 0xa1, 0x3f, 0xd6, + 0x37, 0x75, 0x67, 0x22, 0x0f, 0x75, 0xbc, 0x76, 0xec, 0x85, 0xf5, 0xf0, 0xbc, 0x8b, 0x27, 0xe8, + 0xf8, 0xb0, 0xbf, 0x62, 0xc1, 0x53, 0x1d, 0x3b, 0x65, 0x04, 0x58, 0xcc, 0x43, 0xa9, 0x46, 0x81, + 0xda, 0xa5, 0x96, 0xe4, 0x5a, 0x9c, 0x44, 0xe0, 0x84, 0xc6, 0x88, 0xa3, 0x28, 0x64, 0xc6, 0x51, + 0xfc, 0x7b, 0x0b, 0xce, 0xa4, 0x1b, 0x71, 0x12, 0x52, 0xa7, 0x6a, 0x4a, 0x9d, 0xb9, 0xde, 0xbe, + 0x7d, 0x17, 0x81, 0xf3, 0xcb, 0x63, 0x70, 0xae, 0x6d, 0xb3, 0xe2, 0xc3, 0xf8, 0x0b, 0x16, 0x9c, + 0xaa, 0x33, 0xfb, 0x42, 0xbb, 0x3a, 0x24, 0x3a, 0x96, 0x71, 0x6f, 0xea, 0xc8, 0x1b, 0x47, 0xdc, + 0x5a, 0x6a, 0x23, 0xc1, 0xed, 0x95, 0xa1, 0xaf, 0x5b, 0x70, 0xc6, 0xb9, 0x1f, 0xb5, 0x3d, 0xf8, + 0x20, 0xe6, 0xd1, 0x1b, 0x19, 0xae, 0xbc, 0x8c, 0xa7, 0x22, 0x16, 0xa7, 0x0f, 0xf6, 0x67, 0xcf, + 0x74, 0xa2, 0xc2, 0x1d, 0x6b, 0x45, 0x6f, 0x8b, 0x44, 0x79, 0x54, 0xed, 0xcb, 0x75, 0x99, 0xad, + 0xd3, 0x45, 0x06, 0x2e, 0x93, 0x24, 0x06, 0x2b, 0x8e, 0xe8, 0x3d, 0x28, 0xd5, 0xe5, 0x6d, 0x21, + 0x21, 0xf4, 0x32, 0x76, 0x96, 0x8e, 0x97, 0x8b, 0x78, 0x94, 0xbb, 0x42, 0xe1, 0x84, 0x29, 0xba, + 0x0e, 0x45, 0x7f, 0x2b, 0x12, 0x77, 0x8c, 0xb3, 0xe2, 0x68, 0xcc, 0xa8, 0x25, 0x7e, 0x6b, 0xf2, + 0xe6, 0x4a, 0x15, 0x53, 0x16, 0x94, 0x53, 0xb8, 0xe9, 0x0a, 0x1f, 0x76, 0x06, 0x27, 0xbc, 0x58, + 0x6e, 0xe7, 0x84, 0x17, 0xcb, 0x98, 0xb2, 0x60, 0x01, 0x7b, 0x51, 0x2d, 0xf2, 0x84, 0x83, 0x3a, + 0xe3, 0x02, 0x7a, 0xdb, 0xad, 0x0c, 0x9e, 0x33, 0x91, 0x81, 0x31, 0x67, 0x84, 0x36, 0x60, 0xa8, + 0xc6, 0x72, 0x9c, 0x0b, 0xff, 0x41, 0x56, 0xe6, 0xeb, 0xb6, 0x7c, 0xe8, 0xfc, 0x20, 0x8d, 0xc3, + 0xb1, 0xe0, 0xc5, 0xb8, 0x92, 0xe6, 0xf6, 0x56, 0x24, 0xfc, 0x03, 0x59, 0x5c, 0xdb, 0xb2, 0xd5, + 0x0b, 0xae, 0x0c, 0x8e, 0x05, 0x2f, 0x54, 0x86, 0xc2, 0x56, 0x4d, 0x24, 0x2a, 0xcd, 0xb0, 0x68, + 0xcd, 0x2b, 0xb0, 0x8b, 0x43, 0x07, 0xfb, 0xb3, 0x85, 0x95, 0x25, 0x5c, 0xd8, 0xaa, 0xa1, 0xb7, + 0x60, 0x78, 0x8b, 0x5f, 0x19, 0x14, 0x49, 0x49, 0xaf, 0x64, 0x5d, 0x6b, 0x6c, 0xbb, 0x5f, 0xc8, + 0x6f, 0x32, 0x08, 0x04, 0x96, 0xec, 0xd0, 0x3b, 0x00, 0x5b, 0xea, 0x0e, 0xa4, 0xc8, 0x4a, 0x3a, + 0xd7, 0xdb, 0x9d, 0x49, 0x61, 0x3d, 0x2b, 0x28, 0xd6, 0x38, 0xd2, 0x39, 0xef, 0xc8, 0x67, 0x1a, + 0x58, 0x46, 0xd2, 0xcc, 0x39, 0xdf, 0xf1, 0x55, 0x07, 0x3e, 0xe7, 0x15, 0x0a, 0x27, 0x4c, 0x51, + 0x0b, 0xc6, 0x77, 0xa3, 0xe6, 0x36, 0x91, 0x4b, 0x9f, 0xa5, 0x29, 0x1d, 0xbd, 0xfa, 0xc9, 0x8c, + 0xdc, 0xb3, 0xa2, 0x88, 0x17, 0xc6, 0x2d, 0xa7, 0xd1, 0x26, 0xc1, 0x58, 0xbe, 0xaf, 0x3b, 0x3a, + 0x5b, 0x6c, 0xd6, 0x42, 0x3f, 0xc9, 0xfb, 0xad, 0x60, 0x73, 0x2f, 0x26, 0x22, 0x8d, 0x69, 0xc6, + 0x27, 0x79, 0x93, 0x13, 0xb7, 0x7f, 0x12, 0x81, 0xc0, 0x92, 0x9d, 0x1a, 0x32, 0x26, 0x8d, 0xa7, + 0x72, 0x0f, 0x59, 0x5b, 0x1f, 0x92, 0x21, 0x63, 0xd2, 0x37, 0x61, 0x6a, 0xff, 0xc9, 0x60, 0xfb, + 0x06, 0xc7, 0xf4, 0xcf, 0x5f, 0x6a, 0x3f, 0xce, 0xfc, 0x4c, 0xef, 0xf6, 0xd5, 0x43, 0x3c, 0xd8, + 0xfc, 0xba, 0x05, 0xe7, 0x9a, 0x1d, 0x77, 0x2f, 0xb1, 0x43, 0xf4, 0x6a, 0xa6, 0xf1, 0xa1, 0x51, + 0x49, 0x71, 0x3b, 0xe3, 0x71, 0x97, 0x3a, 0xd3, 0x2a, 0x5f, 0xf1, 0x43, 0xab, 0x7c, 0x77, 0x61, + 0x84, 0x69, 0x29, 0x49, 0x82, 0x8e, 0x1e, 0x73, 0x5a, 0xb0, 0xbd, 0x66, 0x49, 0xb0, 0xc0, 0x8a, + 0x19, 0x1d, 0xb8, 0x27, 0xd3, 0x9d, 0xc0, 0x84, 0xa1, 0x45, 0x36, 0x5f, 0xee, 0x0b, 0x58, 0x11, + 0x23, 0xf1, 0x64, 0xe5, 0x28, 0xe2, 0xc3, 0x2c, 0x02, 0x7c, 0x74, 0x65, 0x27, 0xa9, 0x42, 0xfe, + 0x33, 0xab, 0x83, 0xc2, 0xc3, 0x95, 0xfe, 0x4f, 0x9a, 0x4a, 0xff, 0xc5, 0xb4, 0xd2, 0xdf, 0x66, + 0xa2, 0x1b, 0xfa, 0x7e, 0xfe, 0x8c, 0x96, 0x79, 0x33, 0x88, 0xd8, 0xff, 0xd3, 0x82, 0x62, 0x25, + 0x70, 0xfb, 0xe8, 0x04, 0xb8, 0x66, 0x38, 0x01, 0x9e, 0xc9, 0x7c, 0x9f, 0xa9, 0xab, 0xc9, 0x7f, + 0x2b, 0x65, 0xf2, 0x7f, 0x2c, 0x9b, 0xd5, 0xd1, 0x06, 0xfe, 0xf7, 0x8a, 0xa0, 0xbf, 0x30, 0x85, + 0x7e, 0xff, 0x38, 0x51, 0x8d, 0xc5, 0x7c, 0x8f, 0x4e, 0x89, 0x3a, 0x58, 0x0c, 0x90, 0xbc, 0xf2, + 0xf4, 0x97, 0x36, 0xb8, 0xf1, 0x2e, 0xf1, 0xea, 0xdb, 0x31, 0x71, 0xd3, 0x1d, 0x3b, 0xb9, 0xe0, + 0xc6, 0xff, 0x6a, 0xc1, 0x64, 0xaa, 0x76, 0xb4, 0xd3, 0xe9, 0xd6, 0xc4, 0x71, 0xad, 0xfa, 0x53, + 0x99, 0xf7, 0x2c, 0xe6, 0x00, 0x94, 0x27, 0x5a, 0xda, 0xde, 0x4c, 0x0f, 0x51, 0xae, 0xea, 0x08, + 0x6b, 0x14, 0xe8, 0x65, 0x18, 0x8d, 0x83, 0x66, 0xd0, 0x08, 0xea, 0x7b, 0x37, 0x88, 0xbc, 0xdd, + 0xaf, 0xbc, 0xf8, 0x1b, 0x09, 0x0a, 0xeb, 0x74, 0xf6, 0x0f, 0x8a, 0x90, 0x7e, 0xa0, 0xec, 0xff, + 0x4f, 0xd4, 0xbf, 0x3c, 0x13, 0xf5, 0x8f, 0x2c, 0x98, 0xa2, 0xb5, 0xb3, 0x10, 0x0e, 0x19, 0x82, + 0xa8, 0x52, 0xc3, 0x5b, 0x47, 0xa4, 0x86, 0xbf, 0x48, 0xc5, 0x9d, 0x1b, 0xb4, 0x64, 0xe6, 0x1a, + 0x4d, 0x8a, 0x51, 0x28, 0x16, 0x58, 0x41, 0x47, 0xc2, 0x50, 0xdc, 0xcf, 0xd0, 0xe9, 0x48, 0x18, + 0x62, 0x81, 0x95, 0x99, 0xe3, 0x07, 0x3a, 0x67, 0x8e, 0xe7, 0x89, 0x7e, 0x44, 0xe8, 0x80, 0xd8, + 0x99, 0xb5, 0x44, 0x3f, 0x32, 0xa6, 0x20, 0xa1, 0xb1, 0x7f, 0xab, 0x08, 0x63, 0x95, 0xc0, 0x4d, + 0xc2, 0x8b, 0x5f, 0x32, 0xc2, 0x8b, 0x2f, 0xa4, 0xc2, 0x8b, 0xa7, 0x74, 0xda, 0x87, 0x13, 0x5d, + 0x2c, 0x52, 0x42, 0xb1, 0xb7, 0x0d, 0x8e, 0x1b, 0x59, 0x6c, 0xa4, 0x84, 0x52, 0x9c, 0xb0, 0xc9, + 0xf8, 0xaf, 0x54, 0x44, 0xf1, 0x5f, 0x58, 0x30, 0x51, 0x09, 0x5c, 0x3a, 0x45, 0xff, 0x2a, 0xcd, + 0x47, 0x3d, 0x91, 0xd4, 0xd0, 0x11, 0x89, 0xa4, 0x7e, 0xc3, 0x82, 0xe1, 0x4a, 0xe0, 0x9e, 0x84, + 0x37, 0x6d, 0xc5, 0xf4, 0xa6, 0x3d, 0x95, 0x29, 0x7c, 0xbb, 0x38, 0xd0, 0x7e, 0xbb, 0x08, 0xe3, + 0xb4, 0xc9, 0x41, 0x5d, 0x7e, 0x30, 0x63, 0x70, 0xac, 0x1c, 0x83, 0x73, 0x11, 0x86, 0xb6, 0x82, + 0x46, 0x23, 0xb8, 0x9f, 0xfe, 0x78, 0x2b, 0x0c, 0x8a, 0x05, 0x16, 0x5d, 0x86, 0x91, 0x66, 0x48, + 0x76, 0xbd, 0xa0, 0x15, 0xa5, 0xaf, 0x7b, 0x55, 0x04, 0x1c, 0x2b, 0x0a, 0xf4, 0x12, 0x8c, 0x45, + 0x9e, 0x5f, 0x23, 0x32, 0xb6, 0x60, 0x80, 0xc5, 0x16, 0xf0, 0x7c, 0x7d, 0x1a, 0x1c, 0x1b, 0x54, + 0xe8, 0x2d, 0x28, 0xb1, 0xff, 0x6c, 0x0d, 0x1d, 0x23, 0x9d, 0x3d, 0xcf, 0xd4, 0x24, 0x39, 0xe0, + 0x84, 0x19, 0xba, 0x0a, 0x10, 0xcb, 0x30, 0x88, 0x48, 0x1c, 0x1b, 0x2a, 0xe5, 0x54, 0x05, 0x48, + 0x44, 0x58, 0xa3, 0x42, 0xcf, 0x43, 0x29, 0x76, 0xbc, 0xc6, 0x9a, 0xe7, 0x93, 0x48, 0x04, 0x92, + 0x88, 0xbc, 0xb3, 0x02, 0x88, 0x13, 0x3c, 0xdd, 0xf3, 0xd9, 0x65, 0x53, 0xfe, 0x58, 0xc6, 0x08, + 0xa3, 0x66, 0x7b, 0xfe, 0x9a, 0x82, 0x62, 0x8d, 0xc2, 0x7e, 0x91, 0xed, 0xdd, 0x3d, 0x86, 0x9f, + 0xff, 0xa4, 0x00, 0xa8, 0xc2, 0xc2, 0x2d, 0x8c, 0xf7, 0x44, 0xb6, 0x61, 0x22, 0x22, 0x6b, 0x9e, + 0xdf, 0x7a, 0x20, 0x58, 0xe5, 0x0b, 0xf8, 0xaf, 0x2e, 0xeb, 0x65, 0xf8, 0x05, 0x4b, 0x13, 0x86, + 0x53, 0x7c, 0xe9, 0x90, 0x84, 0x2d, 0x7f, 0x21, 0xba, 0x1d, 0x91, 0x50, 0x24, 0x30, 0x61, 0x43, + 0x82, 0x25, 0x10, 0x27, 0x78, 0x3a, 0x07, 0xd8, 0x9f, 0x9b, 0x81, 0x8f, 0x83, 0x20, 0x96, 0xb3, + 0x86, 0xa5, 0x87, 0xd7, 0xe0, 0xd8, 0xa0, 0x42, 0x2b, 0x80, 0xa2, 0x56, 0xb3, 0xd9, 0x60, 0xa7, + 0x3b, 0x4e, 0x83, 0xe5, 0x23, 0xe3, 0x11, 0xb7, 0x22, 0xb3, 0x7a, 0xb5, 0x0d, 0x8b, 0x3b, 0x94, + 0xa0, 0x8b, 0x7e, 0x2b, 0x62, 0xbf, 0xc5, 0x05, 0x52, 0xee, 0x63, 0xe2, 0x09, 0xce, 0xb0, 0xc4, + 0xd9, 0x2d, 0xb6, 0x55, 0xb1, 0x97, 0x1a, 0xe2, 0x56, 0x48, 0x10, 0x81, 0xf1, 0x26, 0xdb, 0x8e, + 0xe4, 0x11, 0x73, 0xae, 0xa1, 0x4c, 0x05, 0x7c, 0xf0, 0x8c, 0xec, 0x3a, 0x1b, 0x6c, 0x72, 0xb5, + 0xff, 0x23, 0x30, 0x59, 0x23, 0x0e, 0xd6, 0x86, 0x45, 0x38, 0xa7, 0xd0, 0xc5, 0x3e, 0x9a, 0xe7, + 0x69, 0xa2, 0x44, 0x8e, 0x8b, 0xe0, 0x50, 0x2c, 0xb9, 0xa0, 0x2f, 0xf0, 0x33, 0x72, 0xb6, 0xbe, + 0xf3, 0xbf, 0x17, 0xc6, 0xe9, 0x8d, 0x40, 0x65, 0xc1, 0x02, 0x6b, 0xec, 0xd0, 0x1a, 0x8c, 0x8b, + 0x74, 0xfe, 0xc2, 0x56, 0x2f, 0x1a, 0xf6, 0xea, 0x38, 0xd6, 0x91, 0x87, 0x69, 0x00, 0x36, 0x0b, + 0xa3, 0x3a, 0x3c, 0xa9, 0xbd, 0xf1, 0xd3, 0x21, 0x28, 0x89, 0x0b, 0x8e, 0xa7, 0x0e, 0xf6, 0x67, + 0x9f, 0xdc, 0x38, 0x8a, 0x10, 0x1f, 0xcd, 0x07, 0xdd, 0x82, 0xb3, 0x4e, 0x2d, 0xf6, 0x76, 0x49, + 0x99, 0x38, 0x6e, 0xc3, 0xf3, 0x89, 0x79, 0xbb, 0xf8, 0xf1, 0x83, 0xfd, 0xd9, 0xb3, 0x0b, 0x9d, + 0x08, 0x70, 0xe7, 0x72, 0xe8, 0x93, 0x50, 0x72, 0xfd, 0x48, 0x8c, 0xc1, 0x90, 0xf1, 0x9c, 0x51, + 0xa9, 0x7c, 0xb3, 0xaa, 0xfa, 0x9f, 0xfc, 0xc1, 0x49, 0x01, 0xf4, 0x3e, 0x7f, 0x65, 0x59, 0x19, + 0x24, 0xfc, 0x19, 0xad, 0x57, 0x72, 0x99, 0xc0, 0xc6, 0x45, 0x08, 0xee, 0xc6, 0x52, 0xc1, 0x7f, + 0xc6, 0x1d, 0x09, 0xa3, 0x0a, 0xf4, 0x59, 0x40, 0x11, 0x09, 0x77, 0xbd, 0x1a, 0x59, 0xa8, 0xb1, + 0x4c, 0x95, 0xec, 0x84, 0x6a, 0xc4, 0x88, 0x80, 0x47, 0xd5, 0x36, 0x0a, 0xdc, 0xa1, 0x14, 0xba, + 0x4e, 0x25, 0x8e, 0x0e, 0x15, 0xb1, 0x9a, 0x52, 0xb5, 0x9b, 0x4e, 0x72, 0xd4, 0x9b, 0x1c, 0x71, + 0xaa, 0x1c, 0xdd, 0x56, 0x54, 0x06, 0x6e, 0x30, 0x23, 0x0c, 0xdb, 0xb3, 0x70, 0x53, 0x4b, 0x69, + 0x3b, 0x88, 0xe2, 0x9b, 0x24, 0xbe, 0x1f, 0x84, 0xf7, 0x98, 0xbf, 0x79, 0x44, 0x4b, 0x97, 0x95, + 0xa0, 0xb0, 0x4e, 0x47, 0x75, 0x20, 0x76, 0xd0, 0xb1, 0x5a, 0x66, 0x5e, 0xe4, 0x91, 0x64, 0xed, + 0x5c, 0xe7, 0x60, 0x2c, 0xf1, 0x92, 0x74, 0xb5, 0xb2, 0xc4, 0x3c, 0xc2, 0x29, 0xd2, 0xd5, 0xca, + 0x12, 0x96, 0x78, 0x14, 0xb4, 0x3f, 0x1a, 0x35, 0x91, 0xc7, 0x3b, 0xdf, 0x2e, 0xc1, 0x73, 0xbe, + 0x1b, 0xf5, 0x00, 0xa6, 0xd4, 0xc3, 0x55, 0x3c, 0x1f, 0x61, 0x34, 0x3d, 0x99, 0xe7, 0x8d, 0xe7, + 0x8e, 0x69, 0x0d, 0x55, 0x70, 0xee, 0x6a, 0x8a, 0x27, 0x6e, 0xab, 0xc5, 0xb8, 0x25, 0x3f, 0x95, + 0x99, 0x55, 0x7d, 0x1e, 0x4a, 0x51, 0x6b, 0xd3, 0x0d, 0x76, 0x1c, 0xcf, 0x67, 0x4f, 0x57, 0xe9, + 0x2f, 0x16, 0x4b, 0x04, 0x4e, 0x68, 0x66, 0x3e, 0x0d, 0xa7, 0xda, 0xe6, 0x74, 0x4f, 0x51, 0x65, + 0xbf, 0x34, 0x00, 0x25, 0xe5, 0xd5, 0x41, 0xf3, 0xa6, 0x2b, 0xed, 0xf1, 0xb4, 0x2b, 0x6d, 0x84, + 0xee, 0xbc, 0xba, 0xf7, 0xec, 0x9d, 0x0e, 0x4f, 0x96, 0x3e, 0x97, 0xf9, 0x11, 0xf3, 0x5f, 0xee, + 0xe8, 0xe1, 0x41, 0xd7, 0x44, 0xad, 0x1f, 0x38, 0x52, 0xad, 0xcf, 0xf9, 0x22, 0x15, 0x55, 0xe0, + 0x9b, 0x81, 0xbb, 0x5a, 0x49, 0xbf, 0xb6, 0x52, 0xa1, 0x40, 0xcc, 0x71, 0x4c, 0xef, 0xa2, 0x42, + 0x99, 0xe9, 0x5d, 0xc3, 0xc7, 0xd5, 0xbb, 0x24, 0x07, 0x9c, 0x30, 0x43, 0xbb, 0x70, 0xaa, 0x66, + 0xbe, 0x9e, 0xa3, 0xee, 0x6c, 0xbc, 0xd0, 0xc3, 0xeb, 0x35, 0x2d, 0x2d, 0x69, 0xfc, 0x52, 0x9a, + 0x1f, 0x6e, 0xaf, 0xc2, 0xfe, 0x01, 0xf7, 0x02, 0x09, 0xb3, 0x90, 0x44, 0xad, 0x46, 0x3f, 0x73, + 0x40, 0xdf, 0x32, 0x2c, 0xd5, 0x87, 0xe0, 0x7f, 0xfc, 0x5d, 0x8b, 0xf9, 0x1f, 0x37, 0xc8, 0x4e, + 0xb3, 0xe1, 0xc4, 0xfd, 0x0c, 0x58, 0xfb, 0x02, 0x8c, 0xc4, 0xa2, 0x96, 0x7c, 0x89, 0xab, 0xb5, + 0x66, 0x31, 0x7f, 0xac, 0x12, 0x04, 0x12, 0x8a, 0x15, 0x43, 0xfb, 0xdf, 0xf0, 0xaf, 0x20, 0x31, + 0x27, 0x61, 0x59, 0xdd, 0x34, 0x2d, 0xab, 0x67, 0x73, 0x77, 0xa6, 0x8b, 0x85, 0xf5, 0x1d, 0xb3, + 0x0b, 0x4c, 0x61, 0x7b, 0xf4, 0x3d, 0xe2, 0xf6, 0x3a, 0x98, 0x2f, 0x02, 0xa1, 0x4f, 0xf2, 0x68, + 0x4d, 0x2e, 0x11, 0x9f, 0xeb, 0x31, 0x52, 0xd3, 0xfe, 0x6e, 0x01, 0xce, 0x54, 0xcc, 0x97, 0xff, + 0xb9, 0x90, 0x76, 0x61, 0xac, 0xa9, 0xa9, 0xcf, 0xf9, 0xee, 0xf2, 0xeb, 0x0a, 0x77, 0xa2, 0xba, + 0xe8, 0x50, 0x6c, 0x70, 0x45, 0x04, 0xc6, 0xc8, 0xae, 0x57, 0x53, 0xee, 0x95, 0x42, 0xef, 0x22, + 0x4a, 0x55, 0xb3, 0xac, 0x31, 0xc2, 0x06, 0xdb, 0x3e, 0xe4, 0x56, 0xb7, 0xff, 0xa9, 0x05, 0x8f, + 0x75, 0xb9, 0xf0, 0x4f, 0xab, 0xbb, 0xcf, 0xbc, 0x90, 0xe2, 0xc5, 0x29, 0x55, 0x1d, 0xf7, 0x4d, + 0x62, 0x81, 0x45, 0x9b, 0x00, 0xdc, 0xb7, 0xc8, 0x9e, 0xe1, 0x2d, 0xe4, 0x39, 0x06, 0x6f, 0xbb, + 0x5c, 0xac, 0xdd, 0x3b, 0x55, 0x0f, 0xef, 0x6a, 0x5c, 0xed, 0x6f, 0x17, 0x61, 0x90, 0xbf, 0x04, + 0x5a, 0x81, 0xe1, 0x6d, 0x9e, 0x5f, 0xb0, 0xb7, 0xf4, 0x86, 0x89, 0x9e, 0xc4, 0x01, 0x58, 0xb2, + 0x41, 0xeb, 0x70, 0xda, 0xf3, 0xbd, 0xd8, 0x73, 0x1a, 0x65, 0xd2, 0x70, 0xf6, 0xa4, 0xe2, 0xcd, + 0xf3, 0x61, 0xcb, 0x7c, 0xaa, 0xa7, 0x57, 0xdb, 0x49, 0x70, 0xa7, 0x72, 0xe8, 0x8d, 0xb6, 0x04, + 0x41, 0x3c, 0x6f, 0xa3, 0xba, 0xae, 0x74, 0x74, 0x92, 0x20, 0xf4, 0x3a, 0x8c, 0x37, 0xdb, 0x4c, + 0x0c, 0xed, 0x09, 0x49, 0xd3, 0xac, 0x30, 0x69, 0x51, 0x19, 0xa6, 0xa2, 0x16, 0x3b, 0x23, 0xdd, + 0xd8, 0x0e, 0x49, 0xb4, 0x1d, 0x34, 0x5c, 0xf1, 0xf4, 0x99, 0x52, 0xa7, 0xaa, 0x29, 0x3c, 0x6e, + 0x2b, 0x41, 0xb9, 0x6c, 0x39, 0x5e, 0xa3, 0x15, 0x92, 0x84, 0xcb, 0x90, 0xc9, 0x65, 0x25, 0x85, + 0xc7, 0x6d, 0x25, 0xec, 0x3f, 0xb3, 0xe0, 0x74, 0x87, 0x93, 0x7b, 0x1e, 0x50, 0x56, 0xf7, 0xa2, + 0x58, 0xa5, 0x22, 0xd6, 0x02, 0xca, 0x38, 0x1c, 0x2b, 0x0a, 0x3a, 0x0b, 0xb9, 0xdd, 0x98, 0xce, + 0xac, 0x2c, 0x8e, 0x4a, 0x05, 0xb6, 0xb7, 0x74, 0x3f, 0xe8, 0x02, 0x0c, 0xb4, 0x22, 0x22, 0x9f, + 0xa5, 0x57, 0x12, 0x8a, 0xb9, 0x08, 0x18, 0x86, 0x2a, 0x26, 0x75, 0x65, 0x9d, 0x6b, 0x8a, 0x09, + 0xb7, 0xcf, 0x39, 0xce, 0xfe, 0x66, 0x11, 0x26, 0x53, 0x11, 0x3c, 0xb4, 0x21, 0x3b, 0x81, 0xef, + 0xc5, 0x81, 0xca, 0x34, 0xc3, 0x5c, 0x0a, 0x4b, 0xa4, 0xb9, 0xbd, 0x2e, 0xe0, 0x58, 0x51, 0xa0, + 0x8b, 0xe6, 0xb3, 0xcc, 0x49, 0x9b, 0x17, 0xcb, 0xc6, 0x83, 0x73, 0x79, 0x33, 0xb1, 0x3f, 0x0d, + 0x03, 0xcd, 0x40, 0xbd, 0x1f, 0xaa, 0x26, 0x3d, 0x5e, 0x2c, 0x57, 0x82, 0xa0, 0x81, 0x19, 0x12, + 0x3d, 0x23, 0x7a, 0x9f, 0x72, 0x4e, 0x62, 0xc7, 0x0d, 0x22, 0x6d, 0x08, 0x9e, 0x85, 0xe1, 0x7b, + 0x64, 0x2f, 0xf4, 0xfc, 0x7a, 0xda, 0x35, 0x7b, 0x83, 0x83, 0xb1, 0xc4, 0x9b, 0xa9, 0xcc, 0x87, + 0xfb, 0x9c, 0xca, 0x7c, 0x24, 0x33, 0x0a, 0xf1, 0xd7, 0x2d, 0x98, 0x64, 0x69, 0xd7, 0xc4, 0x4d, + 0x50, 0x2f, 0xf0, 0xfb, 0xb8, 0x2b, 0x3e, 0x0d, 0x83, 0x2c, 0x6d, 0x7c, 0x3a, 0x7b, 0x31, 0x6b, + 0x01, 0xe6, 0x38, 0xf4, 0x84, 0x78, 0xdd, 0x9e, 0x7e, 0xbe, 0x31, 0x9e, 0xc4, 0x35, 0x79, 0xa6, + 0x9e, 0xc5, 0xb8, 0x63, 0xd2, 0x6c, 0x78, 0xbc, 0xb1, 0x89, 0x27, 0xe6, 0x51, 0x89, 0x71, 0xef, + 0xd8, 0xb8, 0x87, 0x15, 0xe3, 0xde, 0x99, 0x79, 0x76, 0x8c, 0x7b, 0xc7, 0x72, 0x8f, 0x5e, 0x8c, + 0x7b, 0xc7, 0x66, 0x76, 0xd1, 0xe7, 0x7e, 0x52, 0xe8, 0xd2, 0x2d, 0xa6, 0xd9, 0x5d, 0xa2, 0xab, + 0x80, 0x21, 0x23, 0xb1, 0x29, 0x8f, 0xf1, 0x15, 0xc0, 0x61, 0x58, 0x61, 0x51, 0xa4, 0xc5, 0x88, + 0xf3, 0x46, 0x2e, 0x1f, 0xf3, 0x03, 0xcf, 0x99, 0xae, 0x1c, 0xfd, 0x82, 0x65, 0x2a, 0x70, 0x1c, + 0xdd, 0xd5, 0x94, 0xf5, 0xe2, 0x71, 0x94, 0xf5, 0xb1, 0xce, 0x8a, 0xfa, 0xcc, 0xeb, 0x30, 0x7e, + 0x7c, 0xe3, 0xfb, 0x57, 0x0a, 0xf0, 0x33, 0x47, 0xcc, 0x30, 0x2e, 0x5a, 0x8c, 0x41, 0xd5, 0x44, + 0x4b, 0xdb, 0xc0, 0x56, 0xe0, 0xcc, 0x56, 0xab, 0xd1, 0xd8, 0x63, 0x27, 0xec, 0xc4, 0x95, 0x14, + 0x42, 0x5d, 0x50, 0x8f, 0x98, 0xae, 0x74, 0xa0, 0xc1, 0x1d, 0x4b, 0xa2, 0xcf, 0x02, 0x0a, 0x36, + 0x59, 0x5a, 0x3b, 0x37, 0xb9, 0xff, 0xc9, 0xc6, 0xaf, 0x98, 0x38, 0xbe, 0x6e, 0xb5, 0x51, 0xe0, + 0x0e, 0xa5, 0xa8, 0xf2, 0xc0, 0xde, 0x3f, 0x55, 0xcd, 0x4a, 0x29, 0x0f, 0x58, 0x47, 0x62, 0x93, + 0xd6, 0xfe, 0xa9, 0x45, 0x85, 0x50, 0x87, 0xa7, 0x9a, 0x8c, 0x67, 0xad, 0xb5, 0xc0, 0xf1, 0xf6, + 0x67, 0xad, 0x99, 0x3f, 0xcc, 0xa4, 0xe5, 0xe3, 0x1b, 0x25, 0x81, 0x67, 0xc6, 0x7e, 0x2f, 0x2e, + 0x4c, 0x28, 0x0a, 0x74, 0x17, 0x86, 0x5d, 0x6f, 0xd7, 0x8b, 0x82, 0x30, 0xc7, 0x2b, 0xb2, 0x6d, + 0xc1, 0x4c, 0xc9, 0x16, 0x55, 0xe6, 0x4c, 0xb0, 0xe4, 0x66, 0xff, 0xdd, 0x02, 0x8c, 0xcb, 0xfa, + 0xde, 0x6c, 0x05, 0x6c, 0x15, 0xf7, 0x4b, 0xb4, 0xbe, 0x69, 0x88, 0xd6, 0xf9, 0x7c, 0xb7, 0x46, + 0x58, 0xa3, 0xba, 0x8a, 0xd4, 0xcf, 0xa5, 0x44, 0xea, 0x95, 0x5e, 0x98, 0x66, 0x5a, 0xf3, 0xa7, + 0x0c, 0xfa, 0x47, 0x28, 0x17, 0x69, 0xa7, 0xee, 0x74, 0x11, 0x9d, 0xdf, 0x2e, 0xa4, 0xba, 0xc1, + 0x44, 0xe6, 0x97, 0x61, 0x60, 0xdb, 0x09, 0x5d, 0x71, 0x74, 0xf1, 0x5a, 0x8f, 0x9f, 0x62, 0xee, + 0xba, 0x13, 0xba, 0x5c, 0xf0, 0x5d, 0x56, 0xaf, 0x2f, 0x38, 0xa1, 0x9b, 0x19, 0x86, 0xc9, 0x2a, + 0x45, 0xaf, 0xc2, 0x50, 0x54, 0x0b, 0x9a, 0x2a, 0xca, 0xe6, 0x02, 0x7f, 0x99, 0x81, 0x42, 0x0e, + 0xf7, 0x67, 0x91, 0x59, 0x1d, 0x05, 0x63, 0x41, 0x3f, 0x43, 0xa0, 0xa4, 0xaa, 0xee, 0x63, 0xc0, + 0xdf, 0x07, 0x45, 0x38, 0xdd, 0x61, 0xaa, 0xa0, 0x9f, 0x37, 0x46, 0xed, 0xf5, 0x9e, 0xe7, 0xda, + 0x87, 0x1c, 0xb7, 0x9f, 0x67, 0x0a, 0xaa, 0x2b, 0xe6, 0xc6, 0x31, 0xaa, 0xbf, 0x1d, 0x91, 0x74, + 0xf5, 0x14, 0x94, 0x5d, 0x3d, 0xad, 0xf6, 0x84, 0x06, 0x9f, 0x56, 0xa3, 0xda, 0xd9, 0xc7, 0x6f, + 0xfc, 0xd5, 0x01, 0x38, 0xd3, 0xe9, 0x66, 0x1a, 0xfa, 0x45, 0x2b, 0x95, 0xcd, 0xf8, 0x8d, 0xde, + 0xaf, 0xb7, 0xf1, 0x14, 0xc7, 0xe2, 0xc6, 0xfa, 0x9c, 0x99, 0xdf, 0x38, 0x73, 0xb4, 0x45, 0xed, + 0x2c, 0x74, 0x3a, 0xe4, 0x89, 0xa9, 0xa5, 0x3c, 0xf8, 0xcc, 0x31, 0x9a, 0x22, 0x72, 0x5b, 0x47, + 0xa9, 0xd0, 0x69, 0x09, 0xce, 0x0e, 0x9d, 0x96, 0x6d, 0x98, 0xa9, 0xc3, 0xa8, 0xd6, 0xaf, 0x3e, + 0x4e, 0x01, 0x8f, 0xee, 0x49, 0x5a, 0xab, 0xfb, 0x38, 0x0d, 0xfe, 0xd0, 0x82, 0x69, 0x75, 0x0e, + 0x9e, 0x7e, 0x77, 0xeb, 0x35, 0x23, 0x02, 0xea, 0x99, 0x54, 0x04, 0xd4, 0xd9, 0xb6, 0x72, 0x5a, + 0x18, 0xd4, 0xe3, 0xdc, 0x73, 0xc7, 0x4f, 0xdb, 0x87, 0x85, 0xe7, 0x8e, 0x5f, 0xa0, 0xbe, 0x02, + 0xa3, 0x2d, 0xcf, 0x65, 0x66, 0xd0, 0xba, 0x27, 0x55, 0x1a, 0xf6, 0xf8, 0xef, 0x6d, 0xf1, 0x16, + 0xc9, 0xba, 0xe7, 0x63, 0x9d, 0xc6, 0x28, 0xe2, 0x3c, 0x10, 0xc7, 0xab, 0x66, 0x11, 0xe7, 0x01, + 0xd6, 0x69, 0xec, 0xdf, 0xb3, 0xe0, 0x49, 0x11, 0x17, 0x20, 0x4e, 0xa2, 0xd2, 0xbd, 0x7b, 0xc3, + 0xe8, 0xdd, 0x73, 0xa9, 0xde, 0xcd, 0x74, 0x2e, 0xac, 0x75, 0xb1, 0x3d, 0x80, 0xa1, 0xd0, 0x9f, + 0x00, 0x06, 0xfb, 0xef, 0x5b, 0x90, 0x22, 0x51, 0xae, 0x0a, 0xab, 0xab, 0xab, 0xe2, 0x02, 0x0c, + 0x84, 0x41, 0x83, 0xa4, 0x73, 0x21, 0xe3, 0xa0, 0x41, 0x30, 0xc3, 0xa8, 0x37, 0xff, 0x8a, 0xdd, + 0xde, 0xfc, 0xa3, 0x36, 0x6c, 0x83, 0xec, 0x12, 0xe9, 0x38, 0x50, 0x3b, 0xec, 0x1a, 0x05, 0x62, + 0x8e, 0xb3, 0x7f, 0x54, 0x84, 0x21, 0x6e, 0x9d, 0xf7, 0x51, 0x77, 0xaa, 0x08, 0x43, 0x39, 0xd7, + 0x45, 0x3e, 0xde, 0x9a, 0x39, 0x6a, 0x49, 0xf3, 0x55, 0xaf, 0xfa, 0x96, 0x18, 0xd7, 0x68, 0xce, + 0xe8, 0xfd, 0x4c, 0xea, 0xf3, 0x03, 0xe7, 0x61, 0x7c, 0x6e, 0x88, 0xd8, 0x9b, 0x4c, 0x94, 0x87, + 0x48, 0xa6, 0xf6, 0x52, 0xae, 0x76, 0x54, 0x55, 0x31, 0xde, 0x9a, 0x24, 0x8b, 0x93, 0x42, 0x60, + 0x8d, 0xf7, 0xcc, 0x2b, 0x50, 0x52, 0xc4, 0x59, 0x36, 0xcd, 0x98, 0x2e, 0x37, 0x3e, 0x05, 0x93, + 0xa9, 0xba, 0x7a, 0x32, 0x89, 0xbe, 0x6f, 0xc1, 0xa9, 0xb6, 0xe7, 0x4a, 0xd1, 0x57, 0x2d, 0x38, + 0xd3, 0xe8, 0xe0, 0x96, 0x11, 0x1f, 0xf8, 0x38, 0x0e, 0x1d, 0x65, 0x0f, 0x75, 0xc2, 0xe2, 0x8e, + 0xb5, 0xc9, 0xf4, 0x90, 0x85, 0xce, 0xe9, 0x21, 0xd9, 0xfb, 0x31, 0xbc, 0xed, 0x27, 0xa1, 0xa6, + 0xae, 0x9a, 0x6a, 0xea, 0x47, 0xf3, 0x4c, 0x83, 0x2e, 0xfa, 0xe9, 0xef, 0x59, 0x80, 0x38, 0x41, + 0xfa, 0x6d, 0x36, 0xee, 0xe6, 0xd2, 0x0c, 0xab, 0x64, 0xde, 0x28, 0x0c, 0xd6, 0xa8, 0x7a, 0x4c, + 0x97, 0xad, 0x9e, 0x22, 0xca, 0xf7, 0x46, 0x7b, 0x31, 0xc7, 0x1b, 0xed, 0xbf, 0x5b, 0x84, 0x74, + 0x3c, 0x00, 0x7a, 0x0f, 0xc6, 0x6a, 0x4e, 0xd3, 0xd9, 0xf4, 0x1a, 0x5e, 0xec, 0x91, 0x28, 0xdf, + 0x59, 0xcb, 0x92, 0x56, 0x42, 0x38, 0x4a, 0x35, 0x08, 0x36, 0x38, 0xa2, 0x39, 0x80, 0x66, 0xe8, + 0xed, 0x7a, 0x0d, 0x52, 0x27, 0xae, 0x8c, 0x07, 0xe4, 0xa7, 0x06, 0x12, 0x8a, 0x35, 0x8a, 0x0e, + 0x72, 0xbb, 0x78, 0x12, 0x81, 0x67, 0x03, 0x3d, 0x06, 0x9e, 0x0d, 0xe6, 0x0a, 0x3c, 0xc3, 0x70, + 0x4e, 0xfa, 0x37, 0xe9, 0xff, 0x15, 0xaf, 0x41, 0x78, 0x3e, 0x38, 0x11, 0x2e, 0x38, 0x73, 0xb0, + 0x3f, 0x7b, 0x0e, 0x77, 0xa4, 0xc0, 0x5d, 0x4a, 0xda, 0x3f, 0x1d, 0x83, 0x99, 0xd4, 0x67, 0x5c, + 0x0a, 0xfc, 0x28, 0x0e, 0x9d, 0x3e, 0xbf, 0x3d, 0x7e, 0x09, 0x46, 0x9a, 0xa1, 0x17, 0xd0, 0x7a, + 0xe5, 0xfb, 0xf3, 0x3c, 0x52, 0x93, 0xc3, 0xb0, 0xc2, 0xa2, 0xb7, 0x61, 0xda, 0x69, 0x34, 0x82, + 0xfb, 0xc9, 0x27, 0x56, 0xce, 0x06, 0xe1, 0xe7, 0x57, 0x41, 0x3d, 0x0b, 0x5d, 0xe8, 0x70, 0x57, + 0x0e, 0xe8, 0x3d, 0x38, 0x27, 0xa6, 0xf5, 0x82, 0xeb, 0xea, 0x33, 0x8f, 0x89, 0xfd, 0xd2, 0xe2, + 0x25, 0x3a, 0xa8, 0xe5, 0x8e, 0x14, 0x74, 0xeb, 0x50, 0xff, 0xf7, 0x70, 0x17, 0x3e, 0x68, 0x0b, + 0xa6, 0xd5, 0x9d, 0x82, 0x30, 0x68, 0x1a, 0x75, 0x0c, 0xb2, 0x3a, 0x9e, 0xa3, 0x6d, 0xc7, 0x5d, + 0x68, 0x52, 0xb5, 0x74, 0xe5, 0x85, 0xee, 0xc2, 0x69, 0xd6, 0x4b, 0x62, 0x76, 0x83, 0x07, 0x14, + 0x3f, 0x73, 0xb0, 0x3f, 0x7b, 0x7a, 0xa1, 0x1d, 0x9d, 0xe2, 0xde, 0x89, 0x83, 0xfa, 0x00, 0xd7, + 0x83, 0x28, 0x2e, 0x7b, 0xe2, 0x5e, 0x6c, 0xa5, 0xd1, 0xaa, 0x7b, 0x3c, 0x7d, 0x59, 0xfa, 0x03, + 0x74, 0xa0, 0xc3, 0x5d, 0x39, 0xa0, 0xf9, 0x24, 0xb8, 0x70, 0x84, 0x35, 0xf5, 0xac, 0x16, 0x32, + 0x78, 0x98, 0x9c, 0x6f, 0xa8, 0xe0, 0xc1, 0x32, 0x4c, 0x29, 0x66, 0x32, 0xce, 0xaa, 0xc4, 0x9a, + 0xa1, 0xce, 0xa6, 0x16, 0x52, 0x78, 0xdc, 0x56, 0x02, 0xbd, 0x01, 0x13, 0x0a, 0xc6, 0x1e, 0xdf, + 0x67, 0xc1, 0x5d, 0x23, 0xc9, 0x21, 0xdd, 0x82, 0x81, 0xc5, 0x29, 0x6a, 0x96, 0xca, 0x4f, 0x41, + 0x56, 0xcb, 0x22, 0xd2, 0x2b, 0x49, 0xe5, 0xa7, 0xe1, 0xb0, 0x41, 0x69, 0x94, 0x5c, 0xad, 0x2c, + 0x89, 0x80, 0xaf, 0xf6, 0x92, 0xab, 0x95, 0x25, 0x6c, 0x50, 0xa2, 0x2f, 0x2b, 0x69, 0x26, 0xc3, + 0xb9, 0xc6, 0xf3, 0xa4, 0x1b, 0x38, 0x52, 0x35, 0x4e, 0x3a, 0x6c, 0x92, 0xe1, 0x54, 0x55, 0xa8, + 0xae, 0x0b, 0x38, 0x1e, 0x46, 0x96, 0x91, 0xac, 0xb7, 0x9b, 0xad, 0xa1, 0x9d, 0x37, 0x75, 0x12, + 0x8e, 0x5f, 0xb3, 0x3a, 0x06, 0xd8, 0xf2, 0x7b, 0xc2, 0x9f, 0xce, 0xe8, 0x6a, 0x5b, 0xb9, 0x74, + 0xdd, 0x49, 0x20, 0x61, 0xbe, 0x28, 0xdd, 0x77, 0x93, 0x28, 0xdd, 0xa9, 0x3c, 0x77, 0x66, 0x3b, + 0x3f, 0x6b, 0x9c, 0x78, 0x25, 0xd3, 0xf1, 0xbd, 0xe8, 0x4e, 0x57, 0xa9, 0x7e, 0x8a, 0x4d, 0x0c, + 0x75, 0xdb, 0xb6, 0x37, 0xc9, 0x8e, 0x66, 0x61, 0x90, 0xda, 0x06, 0xd1, 0x34, 0x62, 0xab, 0x8a, + 0x25, 0x02, 0xa0, 0xe3, 0x1b, 0x61, 0x0e, 0x47, 0x36, 0x0c, 0xd5, 0xf9, 0xd0, 0x9e, 0x4e, 0xf2, + 0x63, 0x8b, 0x91, 0x10, 0x18, 0xf4, 0x29, 0x16, 0x41, 0x58, 0x0b, 0x76, 0x9a, 0x95, 0x30, 0xd8, + 0xa2, 0xcc, 0xa7, 0xcf, 0x30, 0x62, 0x19, 0x0f, 0xa8, 0xa3, 0x70, 0x9a, 0xd6, 0xde, 0xb7, 0xe0, + 0x7c, 0xf7, 0xdd, 0xe5, 0x24, 0xb4, 0xb7, 0x9f, 0x33, 0xf5, 0xa4, 0x57, 0x33, 0xb5, 0xb7, 0x2e, + 0x6d, 0xed, 0xa2, 0xd1, 0xb5, 0xe0, 0x74, 0x95, 0x84, 0x1e, 0xcb, 0x76, 0xe7, 0x26, 0x0a, 0xec, + 0x3b, 0x50, 0x0a, 0x53, 0xba, 0x73, 0x8f, 0x37, 0x93, 0xb5, 0x9c, 0x41, 0x52, 0x57, 0x4e, 0x58, + 0xda, 0x7f, 0xa3, 0x00, 0xc3, 0x22, 0x6c, 0xb5, 0x8f, 0x5b, 0xf4, 0x0d, 0xc3, 0x87, 0xfd, 0x6c, + 0xd6, 0xd0, 0xb1, 0xe6, 0x74, 0xf5, 0x5e, 0x57, 0x53, 0xde, 0xeb, 0xe7, 0xf3, 0xb1, 0x3b, 0xda, + 0x6f, 0xfd, 0xc3, 0x02, 0x4c, 0x98, 0xe1, 0xbb, 0x7d, 0x1c, 0x8e, 0xb7, 0x60, 0x38, 0x12, 0x31, + 0xad, 0x85, 0x3c, 0xf1, 0x81, 0xe9, 0x4f, 0xaa, 0x44, 0x80, 0x8c, 0x62, 0x95, 0xec, 0x3a, 0x86, + 0xcd, 0x16, 0x4f, 0x22, 0x6c, 0xd6, 0xfe, 0x11, 0xb3, 0x48, 0xf4, 0x01, 0x3c, 0x89, 0x45, 0xf9, + 0xa6, 0xb9, 0x28, 0x2f, 0xe7, 0x9a, 0x0a, 0xa2, 0x7d, 0x5d, 0x16, 0xe2, 0xf7, 0x2c, 0x18, 0x15, + 0x84, 0x27, 0xd1, 0x83, 0xcf, 0x9a, 0x3d, 0x78, 0x26, 0x57, 0x0f, 0xba, 0x34, 0xfd, 0x1f, 0x16, + 0x54, 0xd3, 0x2b, 0xe2, 0xc9, 0xe7, 0xcc, 0xfc, 0xba, 0x23, 0xcd, 0x30, 0x88, 0x83, 0x5a, 0xd0, + 0x10, 0x46, 0xf2, 0x13, 0xc9, 0x4d, 0x27, 0x0e, 0x3f, 0xd4, 0x7e, 0x63, 0x45, 0xcd, 0x6e, 0xf0, + 0x04, 0x61, 0x2c, 0x2c, 0xbc, 0x4e, 0x0f, 0x4e, 0x6f, 0x02, 0x24, 0x8f, 0xf3, 0x8a, 0x6b, 0x82, + 0xbd, 0x3e, 0x64, 0x9d, 0xdc, 0x5b, 0x52, 0x9c, 0xb0, 0xc6, 0x55, 0x86, 0xd4, 0xb3, 0x1a, 0x06, + 0xcd, 0xf3, 0xd6, 0x9b, 0x02, 0x8e, 0x15, 0x85, 0xfd, 0x0a, 0x93, 0xb1, 0x6c, 0x78, 0x7a, 0xbb, + 0x8c, 0xf4, 0xb5, 0x21, 0x35, 0xb0, 0xec, 0x20, 0xe8, 0x26, 0x0c, 0x36, 0x99, 0xa6, 0x67, 0xe5, + 0x89, 0xbc, 0xd4, 0x3e, 0x89, 0x1e, 0x94, 0x4c, 0x75, 0x41, 0xce, 0x06, 0x91, 0xb6, 0x13, 0xf6, + 0x57, 0x72, 0xcb, 0xc8, 0x1e, 0xce, 0xd4, 0x59, 0xbe, 0x2e, 0x96, 0xa3, 0x68, 0xb5, 0x92, 0xce, + 0x89, 0xbc, 0x24, 0x11, 0x38, 0xa1, 0x41, 0xf3, 0xc2, 0xdb, 0x65, 0xbe, 0x07, 0x2e, 0xbd, 0x5d, + 0x72, 0x48, 0x34, 0x77, 0xd7, 0x15, 0x18, 0x55, 0xaf, 0x42, 0x54, 0xa4, 0x51, 0xc2, 0xcc, 0xff, + 0xe5, 0x04, 0x8c, 0x75, 0x1a, 0xb4, 0x0a, 0xa7, 0x5d, 0x75, 0x83, 0xa2, 0xd2, 0xda, 0x6c, 0x78, + 0x35, 0x5a, 0x94, 0x1b, 0x1b, 0x8f, 0x51, 0x63, 0xa3, 0xdc, 0x8e, 0xc6, 0x9d, 0xca, 0xa0, 0x0d, + 0xaa, 0x63, 0xb0, 0xd7, 0x2f, 0xe4, 0x3d, 0x67, 0x91, 0x34, 0x54, 0xba, 0x69, 0x27, 0xab, 0x26, + 0xfa, 0x90, 0x81, 0xb8, 0x50, 0x10, 0x20, 0x9c, 0x66, 0x41, 0xf5, 0xfb, 0x86, 0xfe, 0x8a, 0x5d, + 0x45, 0x5c, 0x24, 0x51, 0xea, 0xae, 0xf1, 0xc6, 0x5d, 0x05, 0xa7, 0xa8, 0xd1, 0x5b, 0x30, 0xad, + 0x43, 0x44, 0x6a, 0x13, 0xc7, 0xaf, 0x93, 0x48, 0xa4, 0xdd, 0x7f, 0x82, 0x1a, 0x3c, 0x6b, 0x5d, + 0x68, 0x70, 0xd7, 0xd2, 0x54, 0xff, 0x97, 0x23, 0xa9, 0x5d, 0x2a, 0x49, 0xc2, 0x3f, 0x35, 0x1c, + 0x36, 0x28, 0x3f, 0x5c, 0x10, 0xc4, 0x97, 0x69, 0x61, 0x6d, 0x53, 0x45, 0x5f, 0x84, 0x31, 0xbd, + 0x8d, 0x42, 0x4c, 0x7e, 0x3c, 0xff, 0xcb, 0x80, 0x62, 0x73, 0x56, 0x2d, 0xd7, 0x71, 0xd8, 0xe0, + 0x6d, 0x7f, 0xd7, 0x82, 0xa7, 0x32, 0x75, 0x73, 0xb4, 0x68, 0x78, 0xe9, 0xe7, 0x52, 0x13, 0xf7, + 0x7c, 0x77, 0x06, 0xda, 0x5c, 0x5e, 0x87, 0xa1, 0x90, 0x7f, 0xa5, 0x5c, 0xa2, 0x59, 0x1c, 0x29, + 0x68, 0x91, 0xb4, 0xfc, 0xf3, 0x09, 0x26, 0x76, 0x0d, 0x26, 0x53, 0x6f, 0xb3, 0xab, 0x47, 0xfe, + 0xad, 0x87, 0xf5, 0xc8, 0xbf, 0xfd, 0x15, 0x0b, 0x06, 0x37, 0xa8, 0x9a, 0x99, 0xf5, 0x30, 0x4e, + 0x9e, 0x57, 0xf2, 0xd1, 0xcb, 0x30, 0x44, 0xb6, 0xb6, 0x48, 0x2d, 0x16, 0xc2, 0xe2, 0x49, 0xd9, + 0xb5, 0x65, 0x06, 0xa5, 0x22, 0x80, 0x55, 0xc6, 0xff, 0x62, 0x41, 0x6c, 0xff, 0x07, 0x0b, 0x60, + 0x23, 0x68, 0xc8, 0x38, 0x92, 0x8c, 0x96, 0x2c, 0xb6, 0x3d, 0xd1, 0x73, 0xb1, 0xc3, 0x13, 0x3d, + 0x28, 0x61, 0xd8, 0xe1, 0x81, 0x1e, 0xd5, 0x9b, 0x62, 0xae, 0xde, 0x0c, 0xf4, 0xd2, 0x9b, 0x6f, + 0x58, 0x20, 0xe2, 0x43, 0x73, 0xec, 0xa7, 0xae, 0x7c, 0x56, 0xc3, 0x48, 0x8e, 0xf4, 0x5c, 0x9e, + 0x4b, 0x8e, 0x22, 0x25, 0x92, 0x5a, 0x03, 0x46, 0x22, 0x24, 0x83, 0xab, 0xfd, 0x7d, 0x0b, 0x46, + 0x39, 0x7a, 0x9d, 0x69, 0xaa, 0xd9, 0xed, 0xea, 0x29, 0xf1, 0x22, 0x7b, 0x75, 0x82, 0x32, 0x56, + 0xf9, 0xf7, 0xf4, 0x57, 0x27, 0x24, 0x02, 0x27, 0x34, 0xe8, 0x59, 0x18, 0x8e, 0x5a, 0x9b, 0x8c, + 0x3c, 0x15, 0x2c, 0x5a, 0xe5, 0x60, 0x2c, 0xf1, 0xf6, 0x9f, 0x9e, 0x02, 0xa3, 0x6b, 0x46, 0xae, + 0x3f, 0xeb, 0xa1, 0xe7, 0xfa, 0x7b, 0x1b, 0x46, 0xc8, 0x4e, 0x33, 0xde, 0x2b, 0x7b, 0x61, 0xbe, + 0xbc, 0xab, 0xcb, 0x82, 0xba, 0x9d, 0xbb, 0xc4, 0x60, 0xc5, 0xb1, 0x4b, 0xe6, 0xc6, 0xe2, 0x23, + 0x91, 0xb9, 0x71, 0xe0, 0xff, 0x4a, 0xe6, 0xc6, 0xb7, 0x60, 0xb8, 0xee, 0xc5, 0x98, 0x34, 0x03, + 0x71, 0xa9, 0x3d, 0x23, 0xb6, 0xe8, 0x1a, 0x27, 0x6e, 0x4f, 0xc7, 0x26, 0x10, 0x58, 0xb2, 0x43, + 0x1b, 0x30, 0xc4, 0xad, 0x1c, 0x91, 0x0c, 0xf1, 0xe3, 0x79, 0x8e, 0x4f, 0xda, 0xf3, 0x02, 0x8a, + 0x88, 0x60, 0xc1, 0x4b, 0x66, 0x6a, 0x1c, 0xfe, 0xf0, 0x99, 0x1a, 0x55, 0x7e, 0xc5, 0x91, 0x87, + 0x95, 0x5f, 0xd1, 0xc8, 0x53, 0x59, 0xea, 0x47, 0x9e, 0xca, 0x6f, 0x58, 0x70, 0xb6, 0xd9, 0x29, + 0xcd, 0xab, 0xc8, 0x94, 0xf8, 0xe9, 0x63, 0xa4, 0xbd, 0x35, 0xaa, 0x66, 0x77, 0x8d, 0x3b, 0x92, + 0xe1, 0xce, 0x15, 0xcb, 0x84, 0x97, 0xa3, 0x1f, 0x3e, 0xe1, 0x65, 0xbf, 0x53, 0x2a, 0x26, 0xe9, + 0x2f, 0xc7, 0xfb, 0x92, 0xfe, 0x72, 0xe2, 0x21, 0xa6, 0xbf, 0xd4, 0x12, 0x57, 0x4e, 0x3e, 0xdc, + 0xc4, 0x95, 0xdb, 0x30, 0xea, 0x06, 0xf7, 0xfd, 0xfb, 0x4e, 0xe8, 0x2e, 0x54, 0x56, 0x85, 0x67, + 0x33, 0x23, 0x21, 0x51, 0x39, 0x29, 0x60, 0xd4, 0xc0, 0xcf, 0x09, 0x13, 0x24, 0xd6, 0x59, 0x8b, + 0x14, 0x9e, 0xa7, 0x3e, 0x64, 0x0a, 0x4f, 0x23, 0x11, 0x26, 0xea, 0x47, 0x22, 0xcc, 0xf7, 0x58, + 0x5a, 0x92, 0x2d, 0xaf, 0xbe, 0xee, 0x34, 0xa7, 0x4f, 0xe7, 0xa9, 0x61, 0x49, 0x92, 0xb7, 0xd7, + 0xa0, 0x50, 0x38, 0x61, 0xda, 0x9e, 0x6a, 0xf3, 0xcc, 0x49, 0xa7, 0xda, 0x3c, 0xdb, 0xc7, 0x54, + 0x9b, 0xe7, 0xfa, 0x90, 0x6a, 0x13, 0x79, 0x9a, 0x17, 0xe7, 0xb1, 0x3c, 0xb2, 0x2d, 0x31, 0x3a, + 0xbb, 0xcd, 0x56, 0xa6, 0x14, 0xac, 0x0b, 0xa6, 0x89, 0x47, 0xc7, 0xfe, 0x6b, 0x70, 0xfe, 0xe8, + 0xa1, 0x4e, 0x12, 0xb5, 0x57, 0x12, 0xb7, 0x43, 0x2a, 0x51, 0x3b, 0x53, 0x63, 0x34, 0x2a, 0xed, + 0xd2, 0x4e, 0xe1, 0xa8, 0x4b, 0x3b, 0xf6, 0xbf, 0xb2, 0xe0, 0xb1, 0x2e, 0x09, 0xbf, 0x72, 0xdf, + 0xc2, 0x6b, 0xc2, 0x64, 0xd3, 0x2c, 0x9a, 0xfb, 0xbe, 0xac, 0x91, 0x60, 0x4c, 0x3d, 0xf4, 0x91, + 0x42, 0xe0, 0x34, 0xfb, 0xc5, 0x8f, 0xfe, 0xf8, 0x83, 0xf3, 0x1f, 0xf9, 0xc9, 0x07, 0xe7, 0x3f, + 0xf2, 0xc7, 0x1f, 0x9c, 0xff, 0xc8, 0x2f, 0x1c, 0x9c, 0xb7, 0x7e, 0x7c, 0x70, 0xde, 0xfa, 0xc9, + 0xc1, 0x79, 0xeb, 0xcf, 0x0e, 0xce, 0x5b, 0xdf, 0xf8, 0xf3, 0xf3, 0x1f, 0xf9, 0x7c, 0x61, 0xf7, + 0xca, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0x43, 0xbf, 0x12, 0xdd, 0xdf, 0xbd, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/generated.proto b/vendor/k8s.io/kubernetes/pkg/api/v1/generated.proto index c2c5f521..1d284acd 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,13 +37,13 @@ option go_package = "v1"; // ownership management and SELinux relabeling. message AWSElasticBlockStoreVolumeSource { // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore optional string volumeID = 1; // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore // TODO: how do we prevent errors in the filesystem from compromising the machine optional string fsType = 2; @@ -55,7 +55,7 @@ message AWSElasticBlockStoreVolumeSource { // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". // If omitted, the default is "false". - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore optional bool readOnly = 4; } @@ -80,6 +80,36 @@ message AttachedVolume { optional string devicePath = 2; } +// AvoidPods describes pods that should avoid this node. This is the value for a +// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and +// will eventually become a field of NodeStatus. +message AvoidPods { + // Bounded-sized list of signatures of pods that should avoid this node, sorted + // in timestamp order from oldest to newest. Size of the slice is unspecified. + repeated PreferAvoidPodsEntry preferAvoidPods = 1; +} + +// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. +message AzureDiskVolumeSource { + // The Name of the data disk in the blob storage + optional string diskName = 1; + + // The URI the data disk in the blob storage + optional string diskURI = 2; + + // Host Caching mode: None, Read Only, Read Write. + optional string cachingMode = 3; + + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + optional string fsType = 4; + + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + optional bool readOnly = 5; +} + // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. message AzureFileVolumeSource { // the name of secret that contains Azure Storage Account Name and Key @@ -97,7 +127,7 @@ message AzureFileVolumeSource { // For example, a pod is bound to a node by a scheduler. message Binding { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // The target object that you want to bind to the standard object. @@ -117,27 +147,27 @@ message Capabilities { // Cephfs volumes do not support ownership management or SELinux relabeling. message CephFSVolumeSource { // Required: Monitors is a collection of Ceph monitors - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it repeated string monitors = 1; // Optional: Used as the mounted root, rather than the full Ceph tree, default is / optional string path = 2; // Optional: User is the rados user name, default is admin - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it optional string user = 3; // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it optional string secretFile = 4; // Optional: SecretRef is reference to the authentication secret for User, default is empty. - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it optional LocalObjectReference secretRef = 5; // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it optional bool readOnly = 6; } @@ -147,18 +177,18 @@ message CephFSVolumeSource { // Cinder volumes support ownership management and SELinux relabeling. message CinderVolumeSource { // volume id used to identify the volume in cinder - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md optional string volumeID = 1; // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md optional string fsType = 2; // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md optional bool readOnly = 3; } @@ -184,7 +214,7 @@ message ComponentCondition { // ComponentStatus (and ComponentStatusList) holds the cluster validation info. message ComponentStatus { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // List of component conditions observed @@ -194,7 +224,7 @@ message ComponentStatus { // Status of all the conditions for the component as a list of ComponentStatus objects. message ComponentStatusList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of ComponentStatus objects. @@ -204,7 +234,7 @@ message ComponentStatusList { // ConfigMap holds configuration data for pods to consume. message ConfigMap { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Data contains the configuration data. @@ -223,7 +253,7 @@ message ConfigMapKeySelector { // ConfigMapList is a resource containing a list of ConfigMap objects. message ConfigMapList { - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is the list of ConfigMaps. @@ -247,6 +277,13 @@ message ConfigMapVolumeSource { // the volume setup will error. Paths must be relative and may not contain // the '..' path or start with '..'. repeated KeyToPath items = 2; + + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 defaultMode = 3; } // A single application container that you want to run within a pod. @@ -257,7 +294,7 @@ message Container { optional string name = 1; // Docker image name. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md optional string image = 2; // Entrypoint array. Not executed within a shell. @@ -267,7 +304,7 @@ message Container { // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, // regardless of whether the variable exists or not. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md#containers-and-commands + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands repeated string command = 3; // Arguments to the entrypoint. @@ -277,7 +314,7 @@ message Container { // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, // regardless of whether the variable exists or not. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md#containers-and-commands + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands repeated string args = 4; // Container's working directory. @@ -301,7 +338,7 @@ message Container { // Compute Resources required by this container. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#resources + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources optional ResourceRequirements resources = 8; // Pod volumes to mount into the container's filesystem. @@ -311,13 +348,13 @@ message Container { // Periodic probe of container liveness. // Container will be restarted if the probe fails. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes optional Probe livenessProbe = 10; // Periodic probe of container service readiness. // Container will be removed from service endpoints if the probe fails. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes optional Probe readinessProbe = 11; // Actions that the management system should take in response to container lifecycle events. @@ -335,11 +372,11 @@ message Container { // One of Always, Never, IfNotPresent. // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md#updating-images + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#updating-images optional string imagePullPolicy = 14; // Security options the pod should run with. - // More info: http://releases.k8s.io/release-1.3/docs/design/security_context.md + // More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md optional SecurityContext securityContext = 15; // Whether this container should allocate a buffer for stdin in the container runtime. If this @@ -471,7 +508,7 @@ message ContainerStatus { optional int32 restartCount = 5; // The image the container is running. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md // TODO(dchen1107): Which image the container is running with? optional string image = 6; @@ -479,7 +516,7 @@ message ContainerStatus { optional string imageID = 7; // Container's ID in the format 'docker://'. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#container-information + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#container-information optional string containerID = 8; } @@ -518,6 +555,12 @@ message DeprecatedDownwardAPIVolumeFile { // Selects a resource of the container: only resources limits and requests // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. optional ResourceFieldSelector resourceFieldRef = 3; + + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 mode = 4; } // DeprecatedDownwardAPIVolumeSource represents a volume containing downward API info. @@ -525,6 +568,13 @@ message DeprecatedDownwardAPIVolumeFile { message DeprecatedDownwardAPIVolumeSource { // Items is a list of downward API volume file repeated DeprecatedDownwardAPIVolumeFile items = 1; + + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 defaultMode = 2; } // DownwardAPIVolumeFile represents information to create the file containing the pod field @@ -538,6 +588,12 @@ message DownwardAPIVolumeFile { // Selects a resource of the container: only resources limits and requests // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. optional ResourceFieldSelector resourceFieldRef = 3; + + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 mode = 4; } // DownwardAPIVolumeSource represents a volume containing downward API info. @@ -545,6 +601,13 @@ message DownwardAPIVolumeFile { message DownwardAPIVolumeSource { // Items is a list of downward API volume file repeated DownwardAPIVolumeFile items = 1; + + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 defaultMode = 2; } // Represents an empty directory for a pod. @@ -553,7 +616,7 @@ message EmptyDirVolumeSource { // What type of storage medium should back this directory. // The default is "" which means to use the node's default medium. // Must be an empty string (default) or Memory. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#emptydir + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir optional string medium = 1; } @@ -570,6 +633,9 @@ message EndpointAddress { // The Hostname of this endpoint optional string hostname = 3; + // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node. + optional string nodeName = 4; + // Reference to object providing the endpoint. optional ObjectReference targetRef = 2; } @@ -628,7 +694,7 @@ message EndpointSubset { // ] message Endpoints { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // The set of all endpoints is the union of all subsets. Addresses are placed into @@ -644,7 +710,7 @@ message Endpoints { // EndpointsList is a list of endpoints. message EndpointsList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of endpoints. @@ -672,7 +738,8 @@ message EnvVar { // EnvVarSource represents a source for the value of an EnvVar. message EnvVarSource { - // Selects a field of the pod; only name and namespace are supported. + // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, + // spec.nodeName, spec.serviceAccountName, status.podIP. optional ObjectFieldSelector fieldRef = 1; // Selects a resource of the container: only resources limits and requests @@ -690,7 +757,7 @@ message EnvVarSource { // TODO: Decide whether to store these separately or with the object they apply to. message Event { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // The object that this event is about. @@ -724,7 +791,7 @@ message Event { // EventList is a list of events. message EventList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of events @@ -763,7 +830,7 @@ message ExportOptions { // Fibre Channel volumes can only be mounted as read/write once. // Fibre Channel volumes support ownership management and SELinux relabeling. message FCVolumeSource { - // Required: FC target world wide names (WWNs) + // Required: FC target worldwide names (WWNs) repeated string targetWWNs = 1; // Required: FC target lun number @@ -791,7 +858,7 @@ message FSGroupStrategyOptions { } // FlexVolume represents a generic volume resource that is -// provisioned/attached using a exec based plugin. This is an alpha feature and may change in future. +// provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. message FlexVolumeSource { // Driver is the name of the driver to use for this volume. optional string driver = 1; @@ -831,13 +898,13 @@ message FlockerVolumeSource { // PDs support ownership management and SELinux relabeling. message GCEPersistentDiskVolumeSource { // Unique name of the PD resource in GCE. Used to identify the disk in GCE. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk optional string pdName = 1; // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk // TODO: how do we prevent errors in the filesystem from compromising the machine optional string fsType = 2; @@ -845,12 +912,12 @@ message GCEPersistentDiskVolumeSource { // If omitted, the default is to mount by volume name. // Examples: For volume /dev/sda1, you specify the partition as "1". // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk optional int32 partition = 3; // ReadOnly here will force the ReadOnly setting in VolumeMounts. // Defaults to false. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk optional bool readOnly = 4; } @@ -875,16 +942,16 @@ message GitRepoVolumeSource { // Glusterfs volumes do not support ownership management or SELinux relabeling. message GlusterfsVolumeSource { // EndpointsName is the endpoint name that details Glusterfs topology. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod optional string endpoints = 1; // Path is the Glusterfs volume path. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod optional string path = 2; // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. // Defaults to false. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod optional bool readOnly = 3; } @@ -939,7 +1006,7 @@ message Handler { // Host path volumes do not support ownership management or SELinux relabeling. message HostPathVolumeSource { // Path of the directory on the host. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath optional string path = 1; } @@ -973,7 +1040,7 @@ message ISCSIVolumeSource { // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#iscsi + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#iscsi // TODO: how do we prevent errors in the filesystem from compromising the machine optional string fsType = 5; @@ -992,6 +1059,12 @@ message KeyToPath { // May not contain the path element '..'. // May not start with the string '..'. optional string path = 2; + + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 mode = 3; } // Lifecycle describes actions that the management system should take in response to container lifecycle @@ -1001,7 +1074,7 @@ message Lifecycle { // PostStart is called immediately after a container is created. If the handler fails, // the container is terminated and restarted according to its restart policy. // Other management of the container blocks until the hook completes. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#hook-details + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details optional Handler postStart = 1; // PreStop is called immediately before a container is terminated. @@ -1009,18 +1082,18 @@ message Lifecycle { // The reason for termination is passed to the handler. // Regardless of the outcome of the handler, the container is eventually terminated. // Other management of the container blocks until the hook completes. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#hook-details + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details optional Handler preStop = 2; } // LimitRange sets resource usage limits for each kind of resource in a Namespace. message LimitRange { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Spec defines the limits enforced. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional LimitRangeSpec spec = 2; } @@ -1048,11 +1121,11 @@ message LimitRangeItem { // LimitRangeList is a list of LimitRange items. message LimitRangeList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is a list of LimitRange objects. - // More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_limit_range.md + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_limit_range.md repeated LimitRange items = 2; } @@ -1065,7 +1138,7 @@ message LimitRangeSpec { // List holds a list of objects, which may not be known by the server. message List { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of objects @@ -1117,7 +1190,7 @@ message LoadBalancerStatus { // referenced object inside the same namespace. message LocalObjectReference { // Name of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names // TODO: Add other useful fields. apiVersion, kind, uid? optional string name = 1; } @@ -1126,17 +1199,17 @@ message LocalObjectReference { // NFS volumes do not support ownership management or SELinux relabeling. message NFSVolumeSource { // Server is the hostname or IP address of the NFS server. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs optional string server = 1; // Path that is exported by the NFS server. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs optional string path = 2; // ReadOnly here will force // the NFS export to be mounted with read-only permissions. // Defaults to false. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs optional bool readOnly = 3; } @@ -1144,40 +1217,40 @@ message NFSVolumeSource { // Use of multiple namespaces is optional. message Namespace { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Spec defines the behavior of the Namespace. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional NamespaceSpec spec = 2; // Status describes the current status of a Namespace. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional NamespaceStatus status = 3; } // NamespaceList is a list of Namespaces. message NamespaceList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is the list of Namespace objects in the list. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md repeated Namespace items = 2; } // NamespaceSpec describes the attributes on a Namespace. message NamespaceSpec { // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. - // More info: http://releases.k8s.io/release-1.3/docs/design/namespaces.md#finalizers + // More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#finalizers repeated string finalizers = 1; } // NamespaceStatus is information about the current status of a Namespace. message NamespaceStatus { // Phase is the current lifecycle phase of the namespace. - // More info: http://releases.k8s.io/release-1.3/docs/design/namespaces.md#phases + // More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#phases optional string phase = 1; } @@ -1185,17 +1258,17 @@ message NamespaceStatus { // Each node will have a unique identifier in the cache (i.e. in etcd). message Node { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Spec defines the behavior of a node. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional NodeSpec spec = 2; // Most recently observed status of the node. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional NodeStatus status = 3; } @@ -1229,7 +1302,7 @@ message NodeAffinity { repeated PreferredSchedulingTerm preferredDuringSchedulingIgnoredDuringExecution = 2; } -// NodeCondition contains condition infromation for a node. +// NodeCondition contains condition information for a node. message NodeCondition { // Type of node condition. optional string type = 1; @@ -1259,7 +1332,7 @@ message NodeDaemonEndpoints { // NodeList is the whole list of all Nodes which have been registered with master. message NodeList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of nodes @@ -1317,14 +1390,14 @@ message NodeSpec { optional string providerID = 3; // Unschedulable controls node schedulability of new pods. By default, node is schedulable. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#manual-node-administration"` + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#manual-node-administration"` optional bool unschedulable = 4; } // NodeStatus is information about the current status of a node. message NodeStatus { // Capacity represents the total resources of a node. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#capacity for more details. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity for more details. map capacity = 1; // Allocatable represents the resources of a node that are available for scheduling. @@ -1332,23 +1405,24 @@ message NodeStatus { map allocatable = 2; // NodePhase is the recently observed lifecycle phase of the node. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-phase + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-phase + // The field is never populated, and now is deprecated. optional string phase = 3; // Conditions is an array of current observed node conditions. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-condition + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-condition repeated NodeCondition conditions = 4; // List of addresses reachable to the node. // Queried from cloud provider, if available. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-addresses + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-addresses repeated NodeAddress addresses = 5; // Endpoints of daemons running on the Node. optional NodeDaemonEndpoints daemonEndpoints = 6; // Set of ids/uuids to uniquely identify the node. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-info + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-info optional NodeSystemInfo nodeInfo = 7; // List of container images on this node @@ -1411,7 +1485,7 @@ message ObjectMeta { // automatically. Name is primarily intended for creation idempotence and configuration // definition. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names optional string name = 1; // GenerateName is an optional prefix, used by the server, to generate a unique @@ -1428,7 +1502,7 @@ message ObjectMeta { // should retry (optionally after the time indicated in the Retry-After header). // // Applied only if Name is not specified. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#idempotency + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#idempotency optional string generateName = 2; // Namespace defines the space within each name must be unique. An empty namespace is @@ -1438,7 +1512,7 @@ message ObjectMeta { // // Must be a DNS_LABEL. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md optional string namespace = 3; // SelfLink is a URL representing this object. @@ -1452,7 +1526,7 @@ message ObjectMeta { // // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids optional string uid = 5; // An opaque value that represents the internal version of this object that can @@ -1464,7 +1538,7 @@ message ObjectMeta { // Populated by the system. // Read-only. // Value must be treated as opaque by clients and . - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency optional string resourceVersion = 6; // A sequence number representing a specific generation of the desired state. @@ -1478,7 +1552,7 @@ message ObjectMeta { // Populated by the system. // Read-only. // Null for lists. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.Time creationTimestamp = 8; // DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This @@ -1494,7 +1568,7 @@ message ObjectMeta { // // Populated by the system when a graceful deletion is requested. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.Time deletionTimestamp = 9; // Number of seconds allowed for this object to gracefully terminate before @@ -1506,14 +1580,13 @@ message ObjectMeta { // Map of string keys and values that can be used to organize and categorize // (scope and select) objects. May match selectors of replication controllers // and services. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md - // TODO: replace map[string]string with labels.LabelSet type + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md map labels = 11; // Annotations is an unstructured key value map stored with a resource that may be // set by external tools to store and retrieve arbitrary metadata. They are not // queryable and should be preserved when modifying objects. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/annotations.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/annotations.md map annotations = 12; // List of objects depended by this object. If ALL objects in the list have @@ -1527,31 +1600,36 @@ message ObjectMeta { // from the list. If the deletionTimestamp of the object is non-nil, entries // in this list can only be removed. repeated string finalizers = 14; + + // The name of the cluster which the object belongs to. + // This is used to distinguish resources with same name and namespace in different clusters. + // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. + optional string clusterName = 15; } // ObjectReference contains enough information to let you inspect or modify the referred object. message ObjectReference { // Kind of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional string kind = 1; // Namespace of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md optional string namespace = 2; // Name of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names optional string name = 3; // UID of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids optional string uid = 4; // API version of the referent. optional string apiVersion = 5; // Specific resourceVersion to which this reference is made, if any. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency optional string resourceVersion = 6; // If referring to a piece of an object instead of an entire object, this string @@ -1573,15 +1651,15 @@ message OwnerReference { optional string apiVersion = 5; // Kind of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional string kind = 1; // Name of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names optional string name = 3; // UID of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids optional string uid = 4; // If true, this reference points to the managing controller. @@ -1590,48 +1668,48 @@ message OwnerReference { // PersistentVolume (PV) is a storage resource provisioned by an administrator. // It is analogous to a node. -// More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md +// More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md message PersistentVolume { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Spec defines a specification of a persistent volume owned by the cluster. // Provisioned by an administrator. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistent-volumes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes optional PersistentVolumeSpec spec = 2; // Status represents the current information/status for the persistent volume. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistent-volumes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes optional PersistentVolumeStatus status = 3; } // PersistentVolumeClaim is a user's request for and claim to a persistent volume message PersistentVolumeClaim { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Spec defines the desired characteristics of a volume requested by a pod author. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims optional PersistentVolumeClaimSpec spec = 2; // Status represents the current information/status of a persistent volume claim. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims optional PersistentVolumeClaimStatus status = 3; } // PersistentVolumeClaimList is a list of PersistentVolumeClaim items. message PersistentVolumeClaimList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // A list of persistent volume claims. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims repeated PersistentVolumeClaim items = 2; } @@ -1639,14 +1717,14 @@ message PersistentVolumeClaimList { // and allows a Source for provider-specific attributes message PersistentVolumeClaimSpec { // AccessModes contains the desired access modes the volume should have. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes-1 + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1 repeated string accessModes = 1; // A label query over volumes to consider for binding. optional k8s.io.kubernetes.pkg.api.unversioned.LabelSelector selector = 4; // Resources represents the minimum resources the volume should have. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#resources + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources optional ResourceRequirements resources = 2; // VolumeName is the binding reference to the PersistentVolume backing this claim. @@ -1659,7 +1737,7 @@ message PersistentVolumeClaimStatus { optional string phase = 1; // AccessModes contains the actual access modes the volume backing the PVC has. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes-1 + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1 repeated string accessModes = 2; // Represents the actual resources of the underlying volume. @@ -1672,7 +1750,7 @@ message PersistentVolumeClaimStatus { // type of volume that is owned by someone else (the system). message PersistentVolumeClaimVolumeSource { // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims optional string claimName = 1; // Will force the ReadOnly setting in VolumeMounts. @@ -1683,11 +1761,11 @@ message PersistentVolumeClaimVolumeSource { // PersistentVolumeList is a list of PersistentVolume items. message PersistentVolumeList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of persistent volumes. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md repeated PersistentVolume items = 2; } @@ -1696,32 +1774,32 @@ message PersistentVolumeList { message PersistentVolumeSource { // GCEPersistentDisk represents a GCE Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. Provisioned by an admin. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk optional GCEPersistentDiskVolumeSource gcePersistentDisk = 1; // AWSElasticBlockStore represents an AWS Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore optional AWSElasticBlockStoreVolumeSource awsElasticBlockStore = 2; // HostPath represents a directory on the host. // Provisioned by a developer or tester. // This is useful for single-node development and testing only! // On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath optional HostPathVolumeSource hostPath = 3; // Glusterfs represents a Glusterfs volume that is attached to a host and // exposed to the pod. Provisioned by an admin. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md optional GlusterfsVolumeSource glusterfs = 4; // NFS represents an NFS mount on the host. Provisioned by an admin. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs optional NFSVolumeSource nfs = 5; // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md optional RBDVolumeSource rbd = 6; // ISCSI represents an ISCSI Disk resource that is attached to a @@ -1729,7 +1807,7 @@ message PersistentVolumeSource { optional ISCSIVolumeSource iscsi = 7; // Cinder represents a cinder volume attached and mounted on kubelets host machine - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md optional CinderVolumeSource cinder = 8; // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime @@ -1742,7 +1820,7 @@ message PersistentVolumeSource { optional FlockerVolumeSource flocker = 11; // FlexVolume represents a generic volume resource that is - // provisioned/attached using a exec based plugin. This is an + // provisioned/attached using an exec based plugin. This is an // alpha feature and may change in future. optional FlexVolumeSource flexVolume = 12; @@ -1751,38 +1829,44 @@ message PersistentVolumeSource { // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine optional VsphereVirtualDiskVolumeSource vsphereVolume = 14; + + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + optional QuobyteVolumeSource quobyte = 15; + + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + optional AzureDiskVolumeSource azureDisk = 16; } // PersistentVolumeSpec is the specification of a persistent volume. message PersistentVolumeSpec { // A description of the persistent volume's resources and capacity. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#capacity + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity map capacity = 1; // The actual volume backing the persistent volume. optional PersistentVolumeSource persistentVolumeSource = 2; // AccessModes contains all ways the volume can be mounted. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes repeated string accessModes = 3; // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. // Expected to be non-nil when bound. // claim.VolumeName is the authoritative bind between PV and PVC. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#binding + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#binding optional ObjectReference claimRef = 4; // What happens to a persistent volume when released from its claim. // Valid options are Retain (default) and Recycle. - // Recyling must be supported by the volume plugin underlying this persistent volume. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#recycling-policy + // Recycling must be supported by the volume plugin underlying this persistent volume. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#recycling-policy optional string persistentVolumeReclaimPolicy = 5; } // PersistentVolumeStatus is the current status of a persistent volume. message PersistentVolumeStatus { // Phase indicates if a volume is available, bound to a claim, or released by a claim. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#phase + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#phase optional string phase = 1; // A human-readable message indicating details about why the volume is in this state. @@ -1797,18 +1881,18 @@ message PersistentVolumeStatus { // by clients and scheduled onto hosts. message Pod { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Specification of the desired behavior of the pod. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional PodSpec spec = 2; // Most recently observed status of the pod. // This data may not be up to date. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional PodStatus status = 3; } @@ -1934,12 +2018,12 @@ message PodAttachOptions { message PodCondition { // Type is the type of the condition. // Currently only Ready. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions optional string type = 1; // Status is the status of the condition. // Can be True, False, Unknown. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions optional string status = 2; // Last time we probed the condition. @@ -1987,11 +2071,11 @@ message PodExecOptions { // PodList is a list of Pods. message PodList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of pods. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pods.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pods.md repeated Pod items = 2; } @@ -2081,23 +2165,30 @@ message PodSecurityContext { optional int64 fsGroup = 5; } +// Describes the class of pods that should avoid this node. +// Exactly one field should be set. +message PodSignature { + // Reference to controller whose pods should avoid this node. + optional OwnerReference podController = 1; +} + // PodSpec is a description of a pod. message PodSpec { // List of volumes that can be mounted by containers belonging to the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md repeated Volume volumes = 1; // List of containers belonging to the pod. // Containers cannot currently be added or removed. // There must be at least one container in a Pod. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md repeated Container containers = 2; // Restart policy for all containers within the pod. // One of Always, OnFailure, Never. // Default to Always. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#restartpolicy + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#restartpolicy optional string restartPolicy = 3; // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. @@ -2121,19 +2212,16 @@ message PodSpec { // NodeSelector is a selector which must be true for the pod to fit on a node. // Selector which must match a node's labels for the pod to be scheduled on that node. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/node-selection/README.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/node-selection/README.md map nodeSelector = 7; - // A request to schedule this pod onto a specific node - // Deprecated: Use nodeName instead. - optional string host = 18; - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. - // More info: http://releases.k8s.io/release-1.3/docs/design/service_accounts.md + // More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md optional string serviceAccountName = 8; // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. // Deprecated: Use serviceAccountName instead. + // +k8s:conversion-gen=false optional string serviceAccount = 9; // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, @@ -2144,14 +2232,17 @@ message PodSpec { // Host networking requested for this pod. Use the host's network namespace. // If this option is set, the ports that will be used must be specified. // Default to false. + // +k8s:conversion-gen=false optional bool hostNetwork = 11; // Use the host's pid namespace. // Optional: Default to false. + // +k8s:conversion-gen=false optional bool hostPID = 12; // Use the host's ipc namespace. // Optional: Default to false. + // +k8s:conversion-gen=false optional bool hostIPC = 13; // SecurityContext holds pod-level security attributes and common container settings. @@ -2161,7 +2252,7 @@ message PodSpec { // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. // If specified, these secrets will be passed to individual puller implementations for them to use. For example, // in the case of docker, only DockerConfig type secrets are honored. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod repeated LocalObjectReference imagePullSecrets = 15; // Specifies the hostname of the Pod @@ -2177,11 +2268,11 @@ message PodSpec { // state of a system. message PodStatus { // Current condition of the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-phase + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-phase optional string phase = 1; // Current service state of pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions repeated PodCondition conditions = 2; // A human readable message indicating details about why the pod is in this condition. @@ -2204,39 +2295,39 @@ message PodStatus { // The list has one entry per container in the manifest. Each entry is currently the output // of `docker inspect`. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-statuses + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-statuses repeated ContainerStatus containerStatuses = 8; } // PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded message PodStatusResult { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Most recently observed status of the pod. // This data may not be up to date. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional PodStatus status = 2; } // PodTemplate describes a template for creating copies of a predefined pod. message PodTemplate { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Template defines the pods that will be created from this pod template. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional PodTemplateSpec template = 2; } // PodTemplateList is a list of PodTemplates. message PodTemplateList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of pod templates @@ -2246,11 +2337,11 @@ message PodTemplateList { // PodTemplateSpec describes the data a pod should have when created from a template message PodTemplateSpec { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Specification of the desired behavior of the pod. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional PodSpec spec = 2; } @@ -2260,6 +2351,21 @@ message Preconditions { optional string uid = 1; } +// Describes a class of pods that should avoid this node. +message PreferAvoidPodsEntry { + // The class of pods. + optional PodSignature podSignature = 1; + + // Time at which this entry was added to the list. + optional k8s.io.kubernetes.pkg.api.unversioned.Time evictionTime = 2; + + // (brief) reason why this entry was added to the list. + optional string reason = 3; + + // Human readable message indicating why this entry was added to the list. + optional string message = 4; +} + // An empty preferred scheduling term matches all objects with implicit weight 0 // (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). message PreferredSchedulingTerm { @@ -2277,12 +2383,12 @@ message Probe { optional Handler handler = 1; // Number of seconds after the container has started before liveness probes are initiated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes optional int32 initialDelaySeconds = 2; // Number of seconds after which the probe times out. // Defaults to 1 second. Minimum value is 1. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes optional int32 timeoutSeconds = 3; // How often (in seconds) to perform the probe. @@ -2298,55 +2404,79 @@ message Probe { optional int32 failureThreshold = 6; } +// Represents a Quobyte mount that lasts the lifetime of a pod. +// Quobyte volumes do not support ownership management or SELinux relabeling. +message QuobyteVolumeSource { + // Registry represents a single or multiple Quobyte Registry services + // specified as a string as host:port pair (multiple entries are separated with commas) + // which acts as the central registry for volumes + optional string registry = 1; + + // Volume is a string that references an already created Quobyte volume by name. + optional string volume = 2; + + // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. + // Defaults to false. + optional bool readOnly = 3; + + // User to map volume access to + // Defaults to serivceaccount user + optional string user = 4; + + // Group to map volume access to + // Default is no group + optional string group = 5; +} + // Represents a Rados Block Device mount that lasts the lifetime of a pod. // RBD volumes support ownership management and SELinux relabeling. message RBDVolumeSource { // A collection of Ceph monitors. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it repeated string monitors = 1; // The rados image name. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it optional string image = 2; // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#rbd + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#rbd // TODO: how do we prevent errors in the filesystem from compromising the machine optional string fsType = 3; // The rados pool name. // Default is rbd. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it. optional string pool = 4; // The rados user name. // Default is admin. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it optional string user = 5; // Keyring is the path to key ring for RBDUser. // Default is /etc/ceph/keyring. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it optional string keyring = 6; // SecretRef is name of the authentication secret for RBDUser. If provided // overrides keyring. // Default is nil. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it optional LocalObjectReference secretRef = 7; // ReadOnly here will force the ReadOnly setting in VolumeMounts. // Defaults to false. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it optional bool readOnly = 8; } // RangeAllocation is not a public type. message RangeAllocation { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Range is string that identifies the range represented by 'data'. @@ -2360,29 +2490,29 @@ message RangeAllocation { message ReplicationController { // If the Labels of a ReplicationController are empty, they are defaulted to // be the same as the Pod(s) that the replication controller manages. - // Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Spec defines the specification of the desired behavior of the replication controller. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ReplicationControllerSpec spec = 2; // Status is the most recently observed status of the replication controller. // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ReplicationControllerStatus status = 3; } // ReplicationControllerList is a collection of replication controllers. message ReplicationControllerList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of replication controllers. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md repeated ReplicationController items = 2; } @@ -2391,19 +2521,19 @@ message ReplicationControllerSpec { // Replicas is the number of desired replicas. // This is a pointer to distinguish between explicit zero and unspecified. // Defaults to 1. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller optional int32 replicas = 1; // Selector is a label query over pods that should match the Replicas count. // If Selector is empty, it is defaulted to the labels present on the Pod template. // Label keys and values that must match in order to be controlled by this replication // controller, if empty defaulted to labels on Pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors map selector = 2; // Template is the object that describes the pod that will be created if // insufficient replicas are detected. This takes precedence over a TemplateRef. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template optional PodTemplateSpec template = 3; } @@ -2411,12 +2541,15 @@ message ReplicationControllerSpec { // controller. message ReplicationControllerStatus { // Replicas is the most recently oberved number of replicas. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller optional int32 replicas = 1; // The number of pods that have labels matching the labels of the pod template of the replication controller. optional int32 fullyLabeledReplicas = 2; + // The number of ready replicas for this replication controller. + optional int32 readyReplicas = 4; + // ObservedGeneration reflects the generation of the most recently observed replication controller. optional int64 observedGeneration = 3; } @@ -2436,33 +2569,33 @@ message ResourceFieldSelector { // ResourceQuota sets aggregate quota restrictions enforced per namespace message ResourceQuota { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Spec defines the desired quota. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ResourceQuotaSpec spec = 2; // Status defines the actual enforced quota and its current usage. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ResourceQuotaStatus status = 3; } // ResourceQuotaList is a list of ResourceQuota items. message ResourceQuotaList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is a list of ResourceQuota objects. - // More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota repeated ResourceQuota items = 2; } // ResourceQuotaSpec defines the desired hard limits to enforce for Quota. message ResourceQuotaSpec { // Hard is the set of desired hard limits for each named resource. - // More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota map hard = 1; // A collection of filters that must match each object tracked by a quota. @@ -2473,7 +2606,7 @@ message ResourceQuotaSpec { // ResourceQuotaStatus defines the enforced hard limits and observed use. message ResourceQuotaStatus { // Hard is the set of enforced hard limits for each named resource. - // More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota map hard = 1; // Used is the current observed total usage of the resource in the namespace. @@ -2483,13 +2616,13 @@ message ResourceQuotaStatus { // ResourceRequirements describes the compute resource requirements. message ResourceRequirements { // Limits describes the maximum amount of compute resources allowed. - // More info: http://releases.k8s.io/release-1.3/docs/design/resources.md#resource-specifications + // More info: http://kubernetes.io/docs/user-guide/compute-resources/ map limits = 1; // Requests describes the minimum amount of compute resources required. // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, // otherwise to an implementation-defined value. - // More info: http://releases.k8s.io/release-1.3/docs/design/resources.md#resource-specifications + // More info: http://kubernetes.io/docs/user-guide/compute-resources/ map requests = 2; } @@ -2537,7 +2670,7 @@ message SELinuxOptions { // the Data field must be less than MaxSecretSize bytes. message Secret { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN @@ -2547,6 +2680,13 @@ message Secret { // Described in https://tools.ietf.org/html/rfc4648#section-4 map data = 2; + // stringData allows specifying non-binary secret data in string form. + // It is provided as a write-only convenience method. + // All keys and values are merged into the data field on write, overwriting any existing values. + // It is never output when reading from the API. + // +k8s:conversion-gen=false + map stringData = 4; + // Used to facilitate programmatic handling of secret data. optional string type = 3; } @@ -2563,11 +2703,11 @@ message SecretKeySelector { // SecretList is a list of Secret. message SecretList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is a list of secret objects. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md repeated Secret items = 2; } @@ -2578,7 +2718,7 @@ message SecretList { // Secret volumes support ownership management and SELinux relabeling. message SecretVolumeSource { // Name of the secret in the pod's namespace to use. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#secrets + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets optional string secretName = 1; // If unspecified, each key-value pair in the Data field of the referenced @@ -2589,6 +2729,13 @@ message SecretVolumeSource { // the volume setup will error. Paths must be relative and may not contain // the '..' path or start with '..'. repeated KeyToPath items = 2; + + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + optional int32 defaultMode = 3; } // SecurityContext holds security configuration that will be applied to a container. @@ -2632,6 +2779,8 @@ message SecurityContext { // SecurityContextConstraints governs the ability to make requests that affect the SecurityContext // that will be applied to a container. message SecurityContextConstraints { + // Standard object's metadata. + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Priority influences the sort order of SCCs when evaluating which SCCs to try first for @@ -2657,7 +2806,7 @@ message SecurityContextConstraints { repeated string allowedCapabilities = 6; // AllowHostDirVolumePlugin determines if the policy allow containers to use the HostDir volume plugin - // +genconversion=false + // +k8s:conversion-gen=false optional bool allowHostDirVolumePlugin = 7; // Volumes is a white list of allowed volume plugins. FSType corresponds directly with the field names @@ -2700,12 +2849,21 @@ message SecurityContextConstraints { // The groups that have permission to use this security context constraints repeated string groups = 19; + + // SeccompProfiles lists the allowed profiles that may be set for the pod or + // container's seccomp annotations. An unset (nil) or empty value means that no profiles may + // be specifid by the pod or container. The wildcard '*' may be used to allow all profiles. When + // used to generate a value for a pod the first non-wildcard profile will be used as + // the default. + repeated string seccompProfiles = 20; } // SecurityContextConstraintsList is a list of SecurityContextConstraints objects message SecurityContextConstraintsList { + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + // List of security context constraints. repeated SecurityContextConstraints items = 2; } @@ -2720,17 +2878,17 @@ message SerializedReference { // will answer requests sent through the proxy. message Service { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Spec defines the behavior of a service. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ServiceSpec spec = 2; // Most recently observed status of the service. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ServiceStatus status = 3; } @@ -2740,35 +2898,35 @@ message Service { // * a set of secrets message ServiceAccount { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional ObjectMeta metadata = 1; // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md repeated ObjectReference secrets = 2; // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images // in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets // can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret repeated LocalObjectReference imagePullSecrets = 3; } // ServiceAccountList is a list of ServiceAccount objects message ServiceAccountList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of ServiceAccounts. - // More info: http://releases.k8s.io/release-1.3/docs/design/service_accounts.md#service-accounts + // More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md#service-accounts repeated ServiceAccount items = 2; } // ServiceList holds a list of services. message ServiceList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of services @@ -2797,14 +2955,14 @@ message ServicePort { // of the 'port' field is used (an identity map). // This field is ignored for services with clusterIP=None, and should be // omitted or set equal to the 'port' field. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#defining-a-service + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#defining-a-service optional k8s.io.kubernetes.pkg.util.intstr.IntOrString targetPort = 4; // The port on each node on which this service is exposed when type=NodePort or LoadBalancer. // Usually assigned by the system. If specified, it will be allocated to the service // if unused or else creation of the service will fail. // Default is to auto-allocate a port if the ServiceType of this Service requires one. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#type--nodeport + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#type--nodeport optional int32 nodePort = 5; } @@ -2821,32 +2979,42 @@ message ServiceProxyOptions { // ServiceSpec describes the attributes that a user creates on a service. message ServiceSpec { // The list of ports that are exposed by this service. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies repeated ServicePort ports = 1; - // This service will route traffic to pods having labels matching this selector. - // Label keys and values that must match in order to receive traffic for this service. - // If empty, all pods are selected, if not specified, endpoints must be manually specified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#overview + // Route service traffic to pods with label keys and values matching this + // selector. If empty or not present, the service is assumed to have an + // external process managing its endpoints, which Kubernetes will not + // modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. + // Ignored if type is ExternalName. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview map selector = 2; - // The IP Address of the service. - // Deprecated: Use clusterIP instead. - // +genconversion=false - optional string portalIP = 10; - - // ClusterIP is usually assigned by the master and is the IP address of the service. - // If specified, it will be allocated to the service if it is unused - // or else creation of the service will fail. - // Valid values are None, empty string (""), or a valid IP address. - // 'None' can be specified for a headless service when proxying is not required. - // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies + // clusterIP is the IP address of the service and is usually assigned + // randomly by the master. If an address is specified manually and is not in + // use by others, it will be allocated to the service; otherwise, creation + // of the service will fail. This field can not be changed through updates. + // Valid values are "None", empty string (""), or a valid IP address. "None" + // can be specified for headless services when proxying is not required. + // Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if + // type is ExternalName. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies optional string clusterIP = 3; - // Type of exposed service. Must be ClusterIP, NodePort, or LoadBalancer. - // Defaults to ClusterIP. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#external-services + // type determines how the Service is exposed. Defaults to ClusterIP. Valid + // options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + // "ExternalName" maps to the specified externalName. + // "ClusterIP" allocates a cluster-internal IP address for load-balancing to + // endpoints. Endpoints are determined by the selector or if that is not + // specified, by manual construction of an Endpoints object. If clusterIP is + // "None", no virtual IP is allocated and the endpoints are published as a + // set of endpoints rather than a stable IP. + // "NodePort" builds on ClusterIP and allocates a port on every node which + // routes to the clusterIP. + // "LoadBalancer" builds on NodePort and creates an + // external load-balancer (if supported in the current cloud) which routes + // to the clusterIP. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview optional string type = 4; // externalIPs is a list of IP addresses for which nodes in the cluster @@ -2863,14 +3031,14 @@ message ServiceSpec { // API for compatibility until at least 8/20/2016. It will be removed from // any new API revisions. If both deprecatedPublicIPs *and* externalIPs are // set, deprecatedPublicIPs is used. - // +genconversion=false + // +k8s:conversion-gen=false repeated string deprecatedPublicIPs = 6; // Supports "ClientIP" and "None". Used to maintain session affinity. // Enable client IP based session affinity. // Must be ClientIP or None. // Defaults to None. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies optional string sessionAffinity = 7; // Only applies to Service Type: LoadBalancer @@ -2883,8 +3051,13 @@ message ServiceSpec { // If specified and supported by the platform, this will restrict traffic through the cloud-provider // load-balancer will be restricted to the specified client IPs. This field will be ignored if the // cloud-provider does not support the feature." - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services-firewalls.md repeated string loadBalancerSourceRanges = 9; + + // externalName is the external reference that kubedns or equivalent will + // return as a CNAME record for this service. No proxying will be involved. + // Must be a valid DNS name and requires Type to be ExternalName. + optional string externalName = 10; } // ServiceStatus represents the current status of a service. @@ -2952,7 +3125,7 @@ message Toleration { message Volume { // Volume's name. // Must be a DNS_LABEL and unique within the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names optional string name = 1; // VolumeSource represents the location and type of the mounted volume. @@ -2986,62 +3159,62 @@ message VolumeSource { // machine that is directly exposed to the container. This is generally // used for system agents or other privileged things that are allowed // to see the host machine. Most containers will NOT need this. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath // --- // TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not // mount host directories as read/write. optional HostPathVolumeSource hostPath = 1; // EmptyDir represents a temporary directory that shares a pod's lifetime. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#emptydir + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir optional EmptyDirVolumeSource emptyDir = 2; // GCEPersistentDisk represents a GCE Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk optional GCEPersistentDiskVolumeSource gcePersistentDisk = 3; // AWSElasticBlockStore represents an AWS Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore optional AWSElasticBlockStoreVolumeSource awsElasticBlockStore = 4; // GitRepo represents a git repository at a particular revision. optional GitRepoVolumeSource gitRepo = 5; // Secret represents a secret that should populate this volume. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#secrets + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets optional SecretVolumeSource secret = 6; // NFS represents an NFS mount on the host that shares a pod's lifetime - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs optional NFSVolumeSource nfs = 7; // ISCSI represents an ISCSI Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: http://releases.k8s.io/release-1.3/examples/iscsi/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/iscsi/README.md optional ISCSIVolumeSource iscsi = 8; // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md optional GlusterfsVolumeSource glusterfs = 9; // PersistentVolumeClaimVolumeSource represents a reference to a // PersistentVolumeClaim in the same namespace. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims optional PersistentVolumeClaimVolumeSource persistentVolumeClaim = 10; // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md optional RBDVolumeSource rbd = 11; // FlexVolume represents a generic volume resource that is - // provisioned/attached using a exec based plugin. This is an + // provisioned/attached using an exec based plugin. This is an // alpha feature and may change in future. optional FlexVolumeSource flexVolume = 12; // Cinder represents a cinder volume attached and mounted on kubelets host machine - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md optional CinderVolumeSource cinder = 13; // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime @@ -3065,10 +3238,16 @@ message VolumeSource { // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine optional VsphereVirtualDiskVolumeSource vsphereVolume = 20; + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + optional QuobyteVolumeSource quobyte = 21; + + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + optional AzureDiskVolumeSource azureDisk = 22; + // Metadata represents metadata about the pod that should populate this volume // Deprecated: Use downwardAPI instead. - // +genconversion=false - optional DeprecatedDownwardAPIVolumeSource metadata = 21; + // +k8s:conversion-gen=false + optional DeprecatedDownwardAPIVolumeSource metadata = 23; } // Represents a vSphere volume resource. diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/meta.go b/vendor/k8s.io/kubernetes/pkg/api/v1/meta.go index 935bd973..6f95cf7b 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/meta.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/meta.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -83,3 +83,10 @@ func (meta *ObjectMeta) SetOwnerReferences(references []metatypes.OwnerReference } meta.OwnerReferences = newReferences } + +func (meta *ObjectMeta) GetClusterName() string { + return meta.ClusterName +} +func (meta *ObjectMeta) SetClusterName(clusterName string) { + meta.ClusterName = clusterName +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/register.go b/vendor/k8s.io/kubernetes/pkg/api/v1/register.go index 8abb5b41..09aa743a 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,15 +28,13 @@ const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) - addConversionFuncs(scheme) - addDefaultingFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs, addFastPathConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Pod{}, &PodList{}, @@ -94,4 +92,5 @@ func addKnownTypes(scheme *runtime.Scheme) { // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/types.go b/vendor/k8s.io/kubernetes/pkg/api/v1/types.go index 7a520603..45e5d6a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ import ( "k8s.io/kubernetes/pkg/util/intstr" ) -// The comments for the structs and fields can be used from go-resful to +// The comments for the structs and fields can be used from go-restful to // generate Swagger API documentation for its models. Please read this PR for more // information on the implementation: https://github.com/emicklei/go-restful/pull/215 // @@ -71,7 +71,7 @@ type ObjectMeta struct { // automatically. Name is primarily intended for creation idempotence and configuration // definition. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` // GenerateName is an optional prefix, used by the server, to generate a unique @@ -88,7 +88,7 @@ type ObjectMeta struct { // should retry (optionally after the time indicated in the Retry-After header). // // Applied only if Name is not specified. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#idempotency + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#idempotency GenerateName string `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"` // Namespace defines the space within each name must be unique. An empty namespace is @@ -98,7 +98,7 @@ type ObjectMeta struct { // // Must be a DNS_LABEL. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md Namespace string `json:"namespace,omitempty" protobuf:"bytes,3,opt,name=namespace"` // SelfLink is a URL representing this object. @@ -112,7 +112,7 @@ type ObjectMeta struct { // // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids UID types.UID `json:"uid,omitempty" protobuf:"bytes,5,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"` // An opaque value that represents the internal version of this object that can @@ -124,7 +124,7 @@ type ObjectMeta struct { // Populated by the system. // Read-only. // Value must be treated as opaque by clients and . - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"` // A sequence number representing a specific generation of the desired state. @@ -138,7 +138,7 @@ type ObjectMeta struct { // Populated by the system. // Read-only. // Null for lists. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata CreationTimestamp unversioned.Time `json:"creationTimestamp,omitempty" protobuf:"bytes,8,opt,name=creationTimestamp"` // DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This @@ -154,7 +154,7 @@ type ObjectMeta struct { // // Populated by the system when a graceful deletion is requested. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata DeletionTimestamp *unversioned.Time `json:"deletionTimestamp,omitempty" protobuf:"bytes,9,opt,name=deletionTimestamp"` // Number of seconds allowed for this object to gracefully terminate before @@ -166,14 +166,13 @@ type ObjectMeta struct { // Map of string keys and values that can be used to organize and categorize // (scope and select) objects. May match selectors of replication controllers // and services. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md - // TODO: replace map[string]string with labels.LabelSet type + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"` // Annotations is an unstructured key value map stored with a resource that may be // set by external tools to store and retrieve arbitrary metadata. They are not // queryable and should be preserved when modifying objects. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/annotations.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/annotations.md Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"` // List of objects depended by this object. If ALL objects in the list have @@ -187,6 +186,11 @@ type ObjectMeta struct { // from the list. If the deletionTimestamp of the object is non-nil, entries // in this list can only be removed. Finalizers []string `json:"finalizers,omitempty" patchStrategy:"merge" protobuf:"bytes,14,rep,name=finalizers"` + + // The name of the cluster which the object belongs to. + // This is used to distinguish resources with same name and namespace in different clusters. + // This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request. + ClusterName string `json:"clusterName,omitempty" protobuf:"bytes,15,opt,name=clusterName"` } const ( @@ -200,7 +204,7 @@ const ( type Volume struct { // Volume's name. // Must be a DNS_LABEL and unique within the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names Name string `json:"name" protobuf:"bytes,1,opt,name=name"` // VolumeSource represents the location and type of the mounted volume. // If not specified, the Volume is implied to be an EmptyDir. @@ -215,58 +219,55 @@ type VolumeSource struct { // machine that is directly exposed to the container. This is generally // used for system agents or other privileged things that are allowed // to see the host machine. Most containers will NOT need this. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath // --- // TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not // mount host directories as read/write. HostPath *HostPathVolumeSource `json:"hostPath,omitempty" protobuf:"bytes,1,opt,name=hostPath"` // EmptyDir represents a temporary directory that shares a pod's lifetime. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#emptydir + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir EmptyDir *EmptyDirVolumeSource `json:"emptyDir,omitempty" protobuf:"bytes,2,opt,name=emptyDir"` // GCEPersistentDisk represents a GCE Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk GCEPersistentDisk *GCEPersistentDiskVolumeSource `json:"gcePersistentDisk,omitempty" protobuf:"bytes,3,opt,name=gcePersistentDisk"` // AWSElasticBlockStore represents an AWS Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource `json:"awsElasticBlockStore,omitempty" protobuf:"bytes,4,opt,name=awsElasticBlockStore"` // GitRepo represents a git repository at a particular revision. GitRepo *GitRepoVolumeSource `json:"gitRepo,omitempty" protobuf:"bytes,5,opt,name=gitRepo"` // Secret represents a secret that should populate this volume. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#secrets + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets Secret *SecretVolumeSource `json:"secret,omitempty" protobuf:"bytes,6,opt,name=secret"` // NFS represents an NFS mount on the host that shares a pod's lifetime - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs NFS *NFSVolumeSource `json:"nfs,omitempty" protobuf:"bytes,7,opt,name=nfs"` // ISCSI represents an ISCSI Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: http://releases.k8s.io/release-1.3/examples/iscsi/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/iscsi/README.md ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty" protobuf:"bytes,8,opt,name=iscsi"` // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md Glusterfs *GlusterfsVolumeSource `json:"glusterfs,omitempty" protobuf:"bytes,9,opt,name=glusterfs"` // PersistentVolumeClaimVolumeSource represents a reference to a // PersistentVolumeClaim in the same namespace. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims PersistentVolumeClaim *PersistentVolumeClaimVolumeSource `json:"persistentVolumeClaim,omitempty" protobuf:"bytes,10,opt,name=persistentVolumeClaim"` // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md RBD *RBDVolumeSource `json:"rbd,omitempty" protobuf:"bytes,11,opt,name=rbd"` // FlexVolume represents a generic volume resource that is - // provisioned/attached using a exec based plugin. This is an + // provisioned/attached using an exec based plugin. This is an // alpha feature and may change in future. FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty" protobuf:"bytes,12,opt,name=flexVolume"` // Cinder represents a cinder volume attached and mounted on kubelets host machine - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md Cinder *CinderVolumeSource `json:"cinder,omitempty" protobuf:"bytes,13,opt,name=cinder"` - // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime CephFS *CephFSVolumeSource `json:"cephfs,omitempty" protobuf:"bytes,14,opt,name=cephfs"` - // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running Flocker *FlockerVolumeSource `json:"flocker,omitempty" protobuf:"bytes,15,opt,name=flocker"` - // DownwardAPI represents downward API about the pod that should populate this volume DownwardAPI *DownwardAPIVolumeSource `json:"downwardAPI,omitempty" protobuf:"bytes,16,opt,name=downwardAPI"` // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. @@ -277,10 +278,14 @@ type VolumeSource struct { ConfigMap *ConfigMapVolumeSource `json:"configMap,omitempty" protobuf:"bytes,19,opt,name=configMap"` // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine VsphereVolume *VsphereVirtualDiskVolumeSource `json:"vsphereVolume,omitempty" protobuf:"bytes,20,opt,name=vsphereVolume"` + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty" protobuf:"bytes,21,opt,name=quobyte"` + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,22,opt,name=azureDisk"` // Metadata represents metadata about the pod that should populate this volume // Deprecated: Use downwardAPI instead. - // +genconversion=false + // +k8s:conversion-gen=false Metadata *DeprecatedDownwardAPIVolumeSource `json:"metadata,omitempty" protobuf:"-"` } @@ -290,7 +295,7 @@ type VolumeSource struct { // type of volume that is owned by someone else (the system). type PersistentVolumeClaimVolumeSource struct { // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims ClaimName string `json:"claimName" protobuf:"bytes,1,opt,name=claimName"` // Will force the ReadOnly setting in VolumeMounts. // Default false. @@ -302,33 +307,33 @@ type PersistentVolumeClaimVolumeSource struct { type PersistentVolumeSource struct { // GCEPersistentDisk represents a GCE Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. Provisioned by an admin. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk GCEPersistentDisk *GCEPersistentDiskVolumeSource `json:"gcePersistentDisk,omitempty" protobuf:"bytes,1,opt,name=gcePersistentDisk"` // AWSElasticBlockStore represents an AWS Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource `json:"awsElasticBlockStore,omitempty" protobuf:"bytes,2,opt,name=awsElasticBlockStore"` // HostPath represents a directory on the host. // Provisioned by a developer or tester. // This is useful for single-node development and testing only! // On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath HostPath *HostPathVolumeSource `json:"hostPath,omitempty" protobuf:"bytes,3,opt,name=hostPath"` // Glusterfs represents a Glusterfs volume that is attached to a host and // exposed to the pod. Provisioned by an admin. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md Glusterfs *GlusterfsVolumeSource `json:"glusterfs,omitempty" protobuf:"bytes,4,opt,name=glusterfs"` // NFS represents an NFS mount on the host. Provisioned by an admin. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs NFS *NFSVolumeSource `json:"nfs,omitempty" protobuf:"bytes,5,opt,name=nfs"` // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md RBD *RBDVolumeSource `json:"rbd,omitempty" protobuf:"bytes,6,opt,name=rbd"` // ISCSI represents an ISCSI Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. Provisioned by an admin. ISCSI *ISCSIVolumeSource `json:"iscsi,omitempty" protobuf:"bytes,7,opt,name=iscsi"` // Cinder represents a cinder volume attached and mounted on kubelets host machine - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md Cinder *CinderVolumeSource `json:"cinder,omitempty" protobuf:"bytes,8,opt,name=cinder"` // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime CephFS *CephFSVolumeSource `json:"cephfs,omitempty" protobuf:"bytes,9,opt,name=cephfs"` @@ -337,57 +342,62 @@ type PersistentVolumeSource struct { // Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running Flocker *FlockerVolumeSource `json:"flocker,omitempty" protobuf:"bytes,11,opt,name=flocker"` // FlexVolume represents a generic volume resource that is - // provisioned/attached using a exec based plugin. This is an + // provisioned/attached using an exec based plugin. This is an // alpha feature and may change in future. FlexVolume *FlexVolumeSource `json:"flexVolume,omitempty" protobuf:"bytes,12,opt,name=flexVolume"` // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. AzureFile *AzureFileVolumeSource `json:"azureFile,omitempty" protobuf:"bytes,13,opt,name=azureFile"` // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine VsphereVolume *VsphereVirtualDiskVolumeSource `json:"vsphereVolume,omitempty" protobuf:"bytes,14,opt,name=vsphereVolume"` + // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime + Quobyte *QuobyteVolumeSource `json:"quobyte,omitempty" protobuf:"bytes,15,opt,name=quobyte"` + // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. + AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,16,opt,name=azureDisk"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // PersistentVolume (PV) is a storage resource provisioned by an administrator. // It is analogous to a node. -// More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md +// More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md type PersistentVolume struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines a specification of a persistent volume owned by the cluster. // Provisioned by an administrator. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistent-volumes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes Spec PersistentVolumeSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status represents the current information/status for the persistent volume. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistent-volumes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes Status PersistentVolumeStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } // PersistentVolumeSpec is the specification of a persistent volume. type PersistentVolumeSpec struct { // A description of the persistent volume's resources and capacity. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#capacity + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity Capacity ResourceList `json:"capacity,omitempty" protobuf:"bytes,1,rep,name=capacity,casttype=ResourceList,castkey=ResourceName"` // The actual volume backing the persistent volume. PersistentVolumeSource `json:",inline" protobuf:"bytes,2,opt,name=persistentVolumeSource"` // AccessModes contains all ways the volume can be mounted. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty" protobuf:"bytes,3,rep,name=accessModes,casttype=PersistentVolumeAccessMode"` // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. // Expected to be non-nil when bound. // claim.VolumeName is the authoritative bind between PV and PVC. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#binding + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#binding ClaimRef *ObjectReference `json:"claimRef,omitempty" protobuf:"bytes,4,opt,name=claimRef"` // What happens to a persistent volume when released from its claim. // Valid options are Retain (default) and Recycle. - // Recyling must be supported by the volume plugin underlying this persistent volume. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#recycling-policy + // Recycling must be supported by the volume plugin underlying this persistent volume. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#recycling-policy PersistentVolumeReclaimPolicy PersistentVolumeReclaimPolicy `json:"persistentVolumeReclaimPolicy,omitempty" protobuf:"bytes,5,opt,name=persistentVolumeReclaimPolicy,casttype=PersistentVolumeReclaimPolicy"` } @@ -409,7 +419,7 @@ const ( // PersistentVolumeStatus is the current status of a persistent volume. type PersistentVolumeStatus struct { // Phase indicates if a volume is available, bound to a claim, or released by a claim. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#phase + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#phase Phase PersistentVolumePhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=PersistentVolumePhase"` // A human-readable message indicating details about why the volume is in this state. Message string `json:"message,omitempty" protobuf:"bytes,2,opt,name=message"` @@ -422,27 +432,29 @@ type PersistentVolumeStatus struct { type PersistentVolumeList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of persistent volumes. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md Items []PersistentVolume `json:"items" protobuf:"bytes,2,rep,name=items"` } +// +genclient=true + // PersistentVolumeClaim is a user's request for and claim to a persistent volume type PersistentVolumeClaim struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the desired characteristics of a volume requested by a pod author. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims Spec PersistentVolumeClaimSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status represents the current information/status of a persistent volume claim. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims Status PersistentVolumeClaimStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -450,10 +462,10 @@ type PersistentVolumeClaim struct { type PersistentVolumeClaimList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // A list of persistent volume claims. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims Items []PersistentVolumeClaim `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -461,12 +473,12 @@ type PersistentVolumeClaimList struct { // and allows a Source for provider-specific attributes type PersistentVolumeClaimSpec struct { // AccessModes contains the desired access modes the volume should have. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes-1 + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1 AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty" protobuf:"bytes,1,rep,name=accessModes,casttype=PersistentVolumeAccessMode"` // A label query over volumes to consider for binding. Selector *unversioned.LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,opt,name=selector"` // Resources represents the minimum resources the volume should have. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#resources + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,2,opt,name=resources"` // VolumeName is the binding reference to the PersistentVolume backing this claim. VolumeName string `json:"volumeName,omitempty" protobuf:"bytes,3,opt,name=volumeName"` @@ -477,7 +489,7 @@ type PersistentVolumeClaimStatus struct { // Phase represents the current phase of PersistentVolumeClaim. Phase PersistentVolumeClaimPhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=PersistentVolumeClaimPhase"` // AccessModes contains the actual access modes the volume backing the PVC has. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes-1 + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1 AccessModes []PersistentVolumeAccessMode `json:"accessModes,omitempty" protobuf:"bytes,2,rep,name=accessModes,casttype=PersistentVolumeAccessMode"` // Represents the actual resources of the underlying volume. Capacity ResourceList `json:"capacity,omitempty" protobuf:"bytes,3,rep,name=capacity,casttype=ResourceList,castkey=ResourceName"` @@ -529,7 +541,7 @@ const ( // Host path volumes do not support ownership management or SELinux relabeling. type HostPathVolumeSource struct { // Path of the directory on the host. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath Path string `json:"path" protobuf:"bytes,1,opt,name=path"` } @@ -539,7 +551,7 @@ type EmptyDirVolumeSource struct { // What type of storage medium should back this directory. // The default is "" which means to use the node's default medium. // Must be an empty string (default) or Memory. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#emptydir + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir Medium StorageMedium `json:"medium,omitempty" protobuf:"bytes,1,opt,name=medium,casttype=StorageMedium"` } @@ -547,16 +559,16 @@ type EmptyDirVolumeSource struct { // Glusterfs volumes do not support ownership management or SELinux relabeling. type GlusterfsVolumeSource struct { // EndpointsName is the endpoint name that details Glusterfs topology. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod EndpointsName string `json:"endpoints" protobuf:"bytes,1,opt,name=endpoints"` // Path is the Glusterfs volume path. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod Path string `json:"path" protobuf:"bytes,2,opt,name=path"` // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. // Defaults to false. - // More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod + // More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` } @@ -564,37 +576,37 @@ type GlusterfsVolumeSource struct { // RBD volumes support ownership management and SELinux relabeling. type RBDVolumeSource struct { // A collection of Ceph monitors. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it CephMonitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` // The rados image name. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it RBDImage string `json:"image" protobuf:"bytes,2,opt,name=image"` // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#rbd + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#rbd // TODO: how do we prevent errors in the filesystem from compromising the machine FSType string `json:"fsType,omitempty" protobuf:"bytes,3,opt,name=fsType"` // The rados pool name. // Default is rbd. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it. + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it. RBDPool string `json:"pool,omitempty" protobuf:"bytes,4,opt,name=pool"` // The rados user name. // Default is admin. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it RadosUser string `json:"user,omitempty" protobuf:"bytes,5,opt,name=user"` // Keyring is the path to key ring for RBDUser. // Default is /etc/ceph/keyring. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it Keyring string `json:"keyring,omitempty" protobuf:"bytes,6,opt,name=keyring"` // SecretRef is name of the authentication secret for RBDUser. If provided // overrides keyring. // Default is nil. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it SecretRef *LocalObjectReference `json:"secretRef,omitempty" protobuf:"bytes,7,opt,name=secretRef"` // ReadOnly here will force the ReadOnly setting in VolumeMounts. // Defaults to false. - // More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,8,opt,name=readOnly"` } @@ -604,16 +616,16 @@ type RBDVolumeSource struct { // Cinder volumes support ownership management and SELinux relabeling. type CinderVolumeSource struct { // volume id used to identify the volume in cinder - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md VolumeID string `json:"volumeID" protobuf:"bytes,1,opt,name=volumeID"` // Filesystem type to mount. // Must be a filesystem type supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md + // More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` } @@ -621,22 +633,22 @@ type CinderVolumeSource struct { // Cephfs volumes do not support ownership management or SELinux relabeling. type CephFSVolumeSource struct { // Required: Monitors is a collection of Ceph monitors - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it Monitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` // Optional: Used as the mounted root, rather than the full Ceph tree, default is / Path string `json:"path,omitempty" protobuf:"bytes,2,opt,name=path"` // Optional: User is the rados user name, default is admin - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it User string `json:"user,omitempty" protobuf:"bytes,3,opt,name=user"` // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it SecretFile string `json:"secretFile,omitempty" protobuf:"bytes,4,opt,name=secretFile"` // Optional: SecretRef is reference to the authentication secret for User, default is empty. - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it SecretRef *LocalObjectReference `json:"secretRef,omitempty" protobuf:"bytes,5,opt,name=secretRef"` // Optional: Defaults to false (read/write). ReadOnly here will force // the ReadOnly setting in VolumeMounts. - // More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it + // More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,6,opt,name=readOnly"` } @@ -673,28 +685,52 @@ const ( // PDs support ownership management and SELinux relabeling. type GCEPersistentDiskVolumeSource struct { // Unique name of the PD resource in GCE. Used to identify the disk in GCE. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk PDName string `json:"pdName" protobuf:"bytes,1,opt,name=pdName"` // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk // TODO: how do we prevent errors in the filesystem from compromising the machine FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` // The partition in the volume that you want to mount. // If omitted, the default is to mount by volume name. // Examples: For volume /dev/sda1, you specify the partition as "1". // Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty). - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk Partition int32 `json:"partition,omitempty" protobuf:"varint,3,opt,name=partition"` // ReadOnly here will force the ReadOnly setting in VolumeMounts. // Defaults to false. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,4,opt,name=readOnly"` } +// Represents a Quobyte mount that lasts the lifetime of a pod. +// Quobyte volumes do not support ownership management or SELinux relabeling. +type QuobyteVolumeSource struct { + // Registry represents a single or multiple Quobyte Registry services + // specified as a string as host:port pair (multiple entries are separated with commas) + // which acts as the central registry for volumes + Registry string `json:"registry" protobuf:"bytes,1,opt,name=registry"` + + // Volume is a string that references an already created Quobyte volume by name. + Volume string `json:"volume" protobuf:"bytes,2,opt,name=volume"` + + // ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. + // Defaults to false. + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` + + // User to map volume access to + // Defaults to serivceaccount user + User string `json:"user,omitempty" protobuf:"bytes,4,opt,name=user"` + + // Group to map volume access to + // Default is no group + Group string `json:"group,omitempty" protobuf:"bytes,5,opt,name=group"` +} + // FlexVolume represents a generic volume resource that is -// provisioned/attached using a exec based plugin. This is an alpha feature and may change in future. +// provisioned/attached using an exec based plugin. This is an alpha feature and may change in future. type FlexVolumeSource struct { // Driver is the name of the driver to use for this volume. Driver string `json:"driver" protobuf:"bytes,1,opt,name=driver"` @@ -723,12 +759,12 @@ type FlexVolumeSource struct { // ownership management and SELinux relabeling. type AWSElasticBlockStoreVolumeSource struct { // Unique ID of the persistent disk resource in AWS (Amazon EBS volume). - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore VolumeID string `json:"volumeID" protobuf:"bytes,1,opt,name=volumeID"` // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore // TODO: how do we prevent errors in the filesystem from compromising the machine FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` // The partition in the volume that you want to mount. @@ -738,7 +774,7 @@ type AWSElasticBlockStoreVolumeSource struct { Partition int32 `json:"partition,omitempty" protobuf:"varint,3,opt,name=partition"` // Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". // If omitted, the default is "false". - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,4,opt,name=readOnly"` } @@ -764,7 +800,7 @@ type GitRepoVolumeSource struct { // Secret volumes support ownership management and SELinux relabeling. type SecretVolumeSource struct { // Name of the secret in the pod's namespace to use. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#secrets + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets SecretName string `json:"secretName,omitempty" protobuf:"bytes,1,opt,name=secretName"` // If unspecified, each key-value pair in the Data field of the referenced // Secret will be projected into the volume as a file whose name is the @@ -774,23 +810,33 @@ type SecretVolumeSource struct { // the volume setup will error. Paths must be relative and may not contain // the '..' path or start with '..'. Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"bytes,3,opt,name=defaultMode"` } +const ( + SecretVolumeSourceDefaultMode int32 = 0644 +) + // Represents an NFS mount that lasts the lifetime of a pod. // NFS volumes do not support ownership management or SELinux relabeling. type NFSVolumeSource struct { // Server is the hostname or IP address of the NFS server. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs Server string `json:"server" protobuf:"bytes,1,opt,name=server"` // Path that is exported by the NFS server. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs Path string `json:"path" protobuf:"bytes,2,opt,name=path"` // ReadOnly here will force // the NFS export to be mounted with read-only permissions. // Defaults to false. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` } @@ -810,7 +856,7 @@ type ISCSIVolumeSource struct { // Filesystem type of the volume that you want to mount. // Tip: Ensure that the filesystem type is supported by the host operating system. // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#iscsi + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#iscsi // TODO: how do we prevent errors in the filesystem from compromising the machine FSType string `json:"fsType,omitempty" protobuf:"bytes,5,opt,name=fsType"` // ReadOnly here will force the ReadOnly setting in VolumeMounts. @@ -822,7 +868,7 @@ type ISCSIVolumeSource struct { // Fibre Channel volumes can only be mounted as read/write once. // Fibre Channel volumes support ownership management and SELinux relabeling. type FCVolumeSource struct { - // Required: FC target world wide names (WWNs) + // Required: FC target worldwide names (WWNs) TargetWWNs []string `json:"targetWWNs" protobuf:"bytes,1,rep,name=targetWWNs"` // Required: FC target lun number Lun *int32 `json:"lun" protobuf:"varint,2,opt,name=lun"` @@ -856,6 +902,30 @@ type VsphereVirtualDiskVolumeSource struct { // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` } +type AzureDataDiskCachingMode string + +const ( + AzureDataDiskCachingNone AzureDataDiskCachingMode = "None" + AzureDataDiskCachingReadOnly AzureDataDiskCachingMode = "ReadOnly" + AzureDataDiskCachingReadWrite AzureDataDiskCachingMode = "ReadWrite" +) + +// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. +type AzureDiskVolumeSource struct { + // The Name of the data disk in the blob storage + DiskName string `json:"diskName" protobuf:"bytes,1,opt,name=diskName"` + // The URI the data disk in the blob storage + DataDiskURI string `json:"diskURI" protobuf:"bytes,2,opt,name=diskURI"` + // Host Caching mode: None, Read Only, Read Write. + CachingMode *AzureDataDiskCachingMode `json:"cachingMode,omitempty" protobuf:"bytes,3,opt,name=cachingMode,casttype=AzureDataDiskCachingMode"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + FSType *string `json:"fsType,omitempty" protobuf:"bytes,4,opt,name=fsType"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + ReadOnly *bool `json:"readOnly,omitempty" protobuf:"varint,5,opt,name=readOnly"` +} // Adapts a ConfigMap into a volume. // @@ -873,8 +943,18 @@ type ConfigMapVolumeSource struct { // the volume setup will error. Paths must be relative and may not contain // the '..' path or start with '..'. Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"varint,3,opt,name=defaultMode"` } +const ( + ConfigMapVolumeSourceDefaultMode int32 = 0644 +) + // Maps a string key to a path within a volume. type KeyToPath struct { // The key to project. @@ -885,6 +965,11 @@ type KeyToPath struct { // May not contain the path element '..'. // May not start with the string '..'. Path string `json:"path" protobuf:"bytes,2,opt,name=path"` + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty" protobuf:"varint,3,opt,name=mode"` } // ContainerPort represents a network port in a single container. @@ -945,7 +1030,8 @@ type EnvVar struct { // EnvVarSource represents a source for the value of an EnvVar. type EnvVarSource struct { - // Selects a field of the pod; only name and namespace are supported. + // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, + // spec.nodeName, spec.serviceAccountName, status.podIP. FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty" protobuf:"bytes,1,opt,name=fieldRef"` // Selects a resource of the container: only resources limits and requests // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. @@ -1050,11 +1136,11 @@ type Probe struct { // The action taken to determine the health of a container Handler `json:",inline" protobuf:"bytes,1,opt,name=handler"` // Number of seconds after the container has started before liveness probes are initiated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes InitialDelaySeconds int32 `json:"initialDelaySeconds,omitempty" protobuf:"varint,2,opt,name=initialDelaySeconds"` // Number of seconds after which the probe times out. // Defaults to 1 second. Minimum value is 1. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes TimeoutSeconds int32 `json:"timeoutSeconds,omitempty" protobuf:"varint,3,opt,name=timeoutSeconds"` // How often (in seconds) to perform the probe. // Default to 10 seconds. Minimum value is 1. @@ -1093,12 +1179,12 @@ type Capabilities struct { // ResourceRequirements describes the compute resource requirements. type ResourceRequirements struct { // Limits describes the maximum amount of compute resources allowed. - // More info: http://releases.k8s.io/release-1.3/docs/design/resources.md#resource-specifications + // More info: http://kubernetes.io/docs/user-guide/compute-resources/ Limits ResourceList `json:"limits,omitempty" protobuf:"bytes,1,rep,name=limits,casttype=ResourceList,castkey=ResourceName"` // Requests describes the minimum amount of compute resources required. // If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, // otherwise to an implementation-defined value. - // More info: http://releases.k8s.io/release-1.3/docs/design/resources.md#resource-specifications + // More info: http://kubernetes.io/docs/user-guide/compute-resources/ Requests ResourceList `json:"requests,omitempty" protobuf:"bytes,2,rep,name=requests,casttype=ResourceList,castkey=ResourceName"` } @@ -1114,7 +1200,7 @@ type Container struct { // Cannot be updated. Name string `json:"name" protobuf:"bytes,1,opt,name=name"` // Docker image name. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md Image string `json:"image,omitempty" protobuf:"bytes,2,opt,name=image"` // Entrypoint array. Not executed within a shell. // The docker image's ENTRYPOINT is used if this is not provided. @@ -1123,7 +1209,7 @@ type Container struct { // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, // regardless of whether the variable exists or not. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md#containers-and-commands + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands Command []string `json:"command,omitempty" protobuf:"bytes,3,rep,name=command"` // Arguments to the entrypoint. // The docker image's CMD is used if this is not provided. @@ -1132,7 +1218,7 @@ type Container struct { // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, // regardless of whether the variable exists or not. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md#containers-and-commands + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands Args []string `json:"args,omitempty" protobuf:"bytes,4,rep,name=args"` // Container's working directory. // If not specified, the container runtime's default will be used, which @@ -1152,7 +1238,7 @@ type Container struct { Env []EnvVar `json:"env,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,7,rep,name=env"` // Compute Resources required by this container. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#resources + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources Resources ResourceRequirements `json:"resources,omitempty" protobuf:"bytes,8,opt,name=resources"` // Pod volumes to mount into the container's filesystem. // Cannot be updated. @@ -1160,12 +1246,12 @@ type Container struct { // Periodic probe of container liveness. // Container will be restarted if the probe fails. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes LivenessProbe *Probe `json:"livenessProbe,omitempty" protobuf:"bytes,10,opt,name=livenessProbe"` // Periodic probe of container service readiness. // Container will be removed from service endpoints if the probe fails. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes ReadinessProbe *Probe `json:"readinessProbe,omitempty" protobuf:"bytes,11,opt,name=readinessProbe"` // Actions that the management system should take in response to container lifecycle events. // Cannot be updated. @@ -1180,10 +1266,10 @@ type Container struct { // One of Always, Never, IfNotPresent. // Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md#updating-images + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#updating-images ImagePullPolicy PullPolicy `json:"imagePullPolicy,omitempty" protobuf:"bytes,14,opt,name=imagePullPolicy,casttype=PullPolicy"` // Security options the pod should run with. - // More info: http://releases.k8s.io/release-1.3/docs/design/security_context.md + // More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md SecurityContext *SecurityContext `json:"securityContext,omitempty" protobuf:"bytes,15,opt,name=securityContext"` // Variables for interactive containers, these have very specialized use-cases (e.g. debugging) @@ -1227,14 +1313,14 @@ type Lifecycle struct { // PostStart is called immediately after a container is created. If the handler fails, // the container is terminated and restarted according to its restart policy. // Other management of the container blocks until the hook completes. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#hook-details + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details PostStart *Handler `json:"postStart,omitempty" protobuf:"bytes,1,opt,name=postStart"` // PreStop is called immediately before a container is terminated. // The container is terminated after the handler completes. // The reason for termination is passed to the handler. // Regardless of the outcome of the handler, the container is eventually terminated. // Other management of the container blocks until the hook completes. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#hook-details + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details PreStop *Handler `json:"preStop,omitempty" protobuf:"bytes,2,opt,name=preStop"` } @@ -1311,13 +1397,13 @@ type ContainerStatus struct { // garbage collection. This value will get capped at 5 by GC. RestartCount int32 `json:"restartCount" protobuf:"varint,5,opt,name=restartCount"` // The image the container is running. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md // TODO(dchen1107): Which image the container is running with? Image string `json:"image" protobuf:"bytes,6,opt,name=image"` // ImageID of the container's image. ImageID string `json:"imageID" protobuf:"bytes,7,opt,name=imageID"` // Container's ID in the format 'docker://'. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#container-information + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#container-information ContainerID string `json:"containerID,omitempty" protobuf:"bytes,8,opt,name=containerID"` } @@ -1360,11 +1446,11 @@ const ( type PodCondition struct { // Type is the type of the condition. // Currently only Ready. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions Type PodConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=PodConditionType"` // Status is the status of the condition. // Can be True, False, Unknown. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions Status ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=ConditionStatus"` // Last time we probed the condition. LastProbeTime unversioned.Time `json:"lastProbeTime,omitempty" protobuf:"bytes,3,opt,name=lastProbeTime"` @@ -1659,17 +1745,23 @@ const ( const ( // This annotation key will be used to contain an array of v1 JSON encoded Containers // for init containers. The annotation will be placed into the internal type and cleared. + // This key is only recognized by version >= 1.4. + PodInitContainersBetaAnnotationKey = "pod.beta.kubernetes.io/init-containers" + // This annotation key will be used to contain an array of v1 JSON encoded Containers + // for init containers. The annotation will be placed into the internal type and cleared. + // This key is recognized by version >= 1.3. For version 1.4 code, this key + // will have its value copied to the beta key. PodInitContainersAnnotationKey = "pod.alpha.kubernetes.io/init-containers" // This annotation key will be used to contain an array of v1 JSON encoded // ContainerStatuses for init containers. The annotation will be placed into the internal // type and cleared. - PodInitContainerStatusesAnnotationKey = "pod.alpha.kubernetes.io/init-container-statuses" + PodInitContainerStatusesAnnotationKey = "pod.beta.kubernetes.io/init-container-statuses" ) // PodSpec is a description of a pod. type PodSpec struct { // List of volumes that can be mounted by containers belonging to the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md Volumes []Volume `json:"volumes,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,1,rep,name=volumes"` // List of initialization containers belonging to the pod. // Init containers are executed in order prior to containers being started. If any @@ -1684,18 +1776,18 @@ type PodSpec struct { // Init containers cannot currently be added or removed. // Init containers are in alpha state and may change without notice. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md InitContainers []Container `json:"-" patchStrategy:"merge" patchMergeKey:"name"` // List of containers belonging to the pod. // Containers cannot currently be added or removed. // There must be at least one container in a Pod. // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md Containers []Container `json:"containers" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=containers"` // Restart policy for all containers within the pod. // One of Always, OnFailure, Never. // Default to Always. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#restartpolicy + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#restartpolicy RestartPolicy RestartPolicy `json:"restartPolicy,omitempty" protobuf:"bytes,3,opt,name=restartPolicy,casttype=RestartPolicy"` // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. // Value must be non-negative integer. The value zero indicates delete immediately. @@ -1715,18 +1807,15 @@ type PodSpec struct { DNSPolicy DNSPolicy `json:"dnsPolicy,omitempty" protobuf:"bytes,6,opt,name=dnsPolicy,casttype=DNSPolicy"` // NodeSelector is a selector which must be true for the pod to fit on a node. // Selector which must match a node's labels for the pod to be scheduled on that node. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/node-selection/README.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/node-selection/README.md NodeSelector map[string]string `json:"nodeSelector,omitempty" protobuf:"bytes,7,rep,name=nodeSelector"` - // A request to schedule this pod onto a specific node - // Deprecated: Use nodeName instead. - DeprecatedHost string `json:"host,omitempty" protobuf:"bytes,18,opt,name=host"` - // ServiceAccountName is the name of the ServiceAccount to use to run this pod. - // More info: http://releases.k8s.io/release-1.3/docs/design/service_accounts.md + // More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md ServiceAccountName string `json:"serviceAccountName,omitempty" protobuf:"bytes,8,opt,name=serviceAccountName"` // DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. // Deprecated: Use serviceAccountName instead. + // +k8s:conversion-gen=false DeprecatedServiceAccount string `json:"serviceAccount,omitempty" protobuf:"bytes,9,opt,name=serviceAccount"` // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, @@ -1736,12 +1825,15 @@ type PodSpec struct { // Host networking requested for this pod. Use the host's network namespace. // If this option is set, the ports that will be used must be specified. // Default to false. + // +k8s:conversion-gen=false HostNetwork bool `json:"hostNetwork,omitempty" protobuf:"varint,11,opt,name=hostNetwork"` // Use the host's pid namespace. // Optional: Default to false. + // +k8s:conversion-gen=false HostPID bool `json:"hostPID,omitempty" protobuf:"varint,12,opt,name=hostPID"` // Use the host's ipc namespace. // Optional: Default to false. + // +k8s:conversion-gen=false HostIPC bool `json:"hostIPC,omitempty" protobuf:"varint,13,opt,name=hostIPC"` // SecurityContext holds pod-level security attributes and common container settings. // Optional: Defaults to empty. See type description for default values of each field. @@ -1749,7 +1841,7 @@ type PodSpec struct { // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. // If specified, these secrets will be passed to individual puller implementations for them to use. For example, // in the case of docker, only DockerConfig type secrets are honored. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod ImagePullSecrets []LocalObjectReference `json:"imagePullSecrets,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,15,rep,name=imagePullSecrets"` // Specifies the hostname of the Pod // If not specified, the pod's hostname will be set to a system-defined value. @@ -1802,10 +1894,10 @@ type PodSecurityContext struct { // state of a system. type PodStatus struct { // Current condition of the pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-phase + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-phase Phase PodPhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=PodPhase"` // Current service state of pod. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions Conditions []PodCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,2,rep,name=conditions"` // A human readable message indicating details about why the pod is in this condition. Message string `json:"message,omitempty" protobuf:"bytes,3,opt,name=message"` @@ -1827,11 +1919,11 @@ type PodStatus struct { // init container will have ready = true, the most recently started container will have // startTime set. // Init containers are in alpha state and may change without notice. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-statuses + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-statuses InitContainerStatuses []ContainerStatus `json:"-"` // The list has one entry per container in the manifest. Each entry is currently the output // of `docker inspect`. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-statuses + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-statuses ContainerStatuses []ContainerStatus `json:"containerStatuses,omitempty" protobuf:"bytes,8,rep,name=containerStatuses"` } @@ -1839,13 +1931,13 @@ type PodStatus struct { type PodStatusResult struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Most recently observed status of the pod. // This data may not be up to date. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status PodStatus `json:"status,omitempty" protobuf:"bytes,2,opt,name=status"` } @@ -1856,18 +1948,18 @@ type PodStatusResult struct { type Pod struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the pod. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec PodSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Most recently observed status of the pod. // This data may not be up to date. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status PodStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -1875,22 +1967,22 @@ type Pod struct { type PodList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of pods. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/pods.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/pods.md Items []Pod `json:"items" protobuf:"bytes,2,rep,name=items"` } // PodTemplateSpec describes the data a pod should have when created from a template type PodTemplateSpec struct { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the pod. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec PodSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } @@ -1900,11 +1992,11 @@ type PodTemplateSpec struct { type PodTemplate struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Template defines the pods that will be created from this pod template. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Template PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,2,opt,name=template"` } @@ -1912,7 +2004,7 @@ type PodTemplate struct { type PodTemplateList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of pod templates @@ -1924,14 +2016,14 @@ type ReplicationControllerSpec struct { // Replicas is the number of desired replicas. // This is a pointer to distinguish between explicit zero and unspecified. // Defaults to 1. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller Replicas *int32 `json:"replicas,omitempty" protobuf:"varint,1,opt,name=replicas"` // Selector is a label query over pods that should match the Replicas count. // If Selector is empty, it is defaulted to the labels present on the Pod template. // Label keys and values that must match in order to be controlled by this replication // controller, if empty defaulted to labels on Pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector map[string]string `json:"selector,omitempty" protobuf:"bytes,2,rep,name=selector"` // TemplateRef is a reference to an object that describes the pod that will be created if @@ -1941,7 +2033,7 @@ type ReplicationControllerSpec struct { // Template is the object that describes the pod that will be created if // insufficient replicas are detected. This takes precedence over a TemplateRef. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template Template *PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,3,opt,name=template"` } @@ -1949,12 +2041,15 @@ type ReplicationControllerSpec struct { // controller. type ReplicationControllerStatus struct { // Replicas is the most recently oberved number of replicas. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller Replicas int32 `json:"replicas" protobuf:"varint,1,opt,name=replicas"` // The number of pods that have labels matching the labels of the pod template of the replication controller. FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty" protobuf:"varint,2,opt,name=fullyLabeledReplicas"` + // The number of ready replicas for this replication controller. + ReadyReplicas int32 `json:"readyReplicas,omitempty" protobuf:"varint,4,opt,name=readyReplicas"` + // ObservedGeneration reflects the generation of the most recently observed replication controller. ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,3,opt,name=observedGeneration"` } @@ -1967,18 +2062,18 @@ type ReplicationController struct { // If the Labels of a ReplicationController are empty, they are defaulted to // be the same as the Pod(s) that the replication controller manages. - // Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the specification of the desired behavior of the replication controller. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec ReplicationControllerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is the most recently observed status of the replication controller. // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status ReplicationControllerStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -1986,11 +2081,11 @@ type ReplicationController struct { type ReplicationControllerList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of replication controllers. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md Items []ReplicationController `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -2021,6 +2116,11 @@ const ( // external load balancer (if the cloud provider supports it), in addition // to 'NodePort' type. ServiceTypeLoadBalancer ServiceType = "LoadBalancer" + + // ServiceTypeExternalName means a service consists of only a reference to + // an external name that kubedns or equivalent will return as a CNAME + // record, with no exposing or proxying of any pods involved. + ServiceTypeExternalName ServiceType = "ExternalName" ) // ServiceStatus represents the current status of a service. @@ -2052,32 +2152,42 @@ type LoadBalancerIngress struct { // ServiceSpec describes the attributes that a user creates on a service. type ServiceSpec struct { // The list of ports that are exposed by this service. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies Ports []ServicePort `json:"ports" patchStrategy:"merge" patchMergeKey:"port" protobuf:"bytes,1,rep,name=ports"` - // This service will route traffic to pods having labels matching this selector. - // Label keys and values that must match in order to receive traffic for this service. - // If empty, all pods are selected, if not specified, endpoints must be manually specified. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#overview + // Route service traffic to pods with label keys and values matching this + // selector. If empty or not present, the service is assumed to have an + // external process managing its endpoints, which Kubernetes will not + // modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. + // Ignored if type is ExternalName. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview Selector map[string]string `json:"selector,omitempty" protobuf:"bytes,2,rep,name=selector"` - // The IP Address of the service. - // Deprecated: Use clusterIP instead. - // +genconversion=false - DeprecatedPortalIP string `json:"portalIP,omitempty" protobuf:"-"` - - // ClusterIP is usually assigned by the master and is the IP address of the service. - // If specified, it will be allocated to the service if it is unused - // or else creation of the service will fail. - // Valid values are None, empty string (""), or a valid IP address. - // 'None' can be specified for a headless service when proxying is not required. - // Cannot be updated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies + // clusterIP is the IP address of the service and is usually assigned + // randomly by the master. If an address is specified manually and is not in + // use by others, it will be allocated to the service; otherwise, creation + // of the service will fail. This field can not be changed through updates. + // Valid values are "None", empty string (""), or a valid IP address. "None" + // can be specified for headless services when proxying is not required. + // Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if + // type is ExternalName. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies ClusterIP string `json:"clusterIP,omitempty" protobuf:"bytes,3,opt,name=clusterIP"` - // Type of exposed service. Must be ClusterIP, NodePort, or LoadBalancer. - // Defaults to ClusterIP. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#external-services + // type determines how the Service is exposed. Defaults to ClusterIP. Valid + // options are ExternalName, ClusterIP, NodePort, and LoadBalancer. + // "ExternalName" maps to the specified externalName. + // "ClusterIP" allocates a cluster-internal IP address for load-balancing to + // endpoints. Endpoints are determined by the selector or if that is not + // specified, by manual construction of an Endpoints object. If clusterIP is + // "None", no virtual IP is allocated and the endpoints are published as a + // set of endpoints rather than a stable IP. + // "NodePort" builds on ClusterIP and allocates a port on every node which + // routes to the clusterIP. + // "LoadBalancer" builds on NodePort and creates an + // external load-balancer (if supported in the current cloud) which routes + // to the clusterIP. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview Type ServiceType `json:"type,omitempty" protobuf:"bytes,4,opt,name=type,casttype=ServiceType"` // externalIPs is a list of IP addresses for which nodes in the cluster @@ -2094,14 +2204,14 @@ type ServiceSpec struct { // API for compatibility until at least 8/20/2016. It will be removed from // any new API revisions. If both deprecatedPublicIPs *and* externalIPs are // set, deprecatedPublicIPs is used. - // +genconversion=false + // +k8s:conversion-gen=false DeprecatedPublicIPs []string `json:"deprecatedPublicIPs,omitempty" protobuf:"bytes,6,rep,name=deprecatedPublicIPs"` // Supports "ClientIP" and "None". Used to maintain session affinity. // Enable client IP based session affinity. // Must be ClientIP or None. // Defaults to None. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies SessionAffinity ServiceAffinity `json:"sessionAffinity,omitempty" protobuf:"bytes,7,opt,name=sessionAffinity,casttype=ServiceAffinity"` // Only applies to Service Type: LoadBalancer @@ -2114,8 +2224,13 @@ type ServiceSpec struct { // If specified and supported by the platform, this will restrict traffic through the cloud-provider // load-balancer will be restricted to the specified client IPs. This field will be ignored if the // cloud-provider does not support the feature." - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services-firewalls.md LoadBalancerSourceRanges []string `json:"loadBalancerSourceRanges,omitempty" protobuf:"bytes,9,opt,name=loadBalancerSourceRanges"` + + // externalName is the external reference that kubedns or equivalent will + // return as a CNAME record for this service. No proxying will be involved. + // Must be a valid DNS name and requires Type to be ExternalName. + ExternalName string `json:"externalName,omitempty" protobuf:"bytes,10,opt,name=externalName"` } // ServicePort contains information on service's port. @@ -2140,14 +2255,14 @@ type ServicePort struct { // of the 'port' field is used (an identity map). // This field is ignored for services with clusterIP=None, and should be // omitted or set equal to the 'port' field. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#defining-a-service + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#defining-a-service TargetPort intstr.IntOrString `json:"targetPort,omitempty" protobuf:"bytes,4,opt,name=targetPort"` // The port on each node on which this service is exposed when type=NodePort or LoadBalancer. // Usually assigned by the system. If specified, it will be allocated to the service // if unused or else creation of the service will fail. // Default is to auto-allocate a port if the ServiceType of this Service requires one. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#type--nodeport + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#type--nodeport NodePort int32 `json:"nodePort,omitempty" protobuf:"varint,5,opt,name=nodePort"` } @@ -2159,17 +2274,17 @@ type ServicePort struct { type Service struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the behavior of a service. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec ServiceSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Most recently observed status of the service. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status ServiceStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -2183,7 +2298,7 @@ const ( type ServiceList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of services @@ -2199,17 +2314,17 @@ type ServiceList struct { type ServiceAccount struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md Secrets []ObjectReference `json:"secrets,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,2,rep,name=secrets"` // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images // in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets // can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret ImagePullSecrets []LocalObjectReference `json:"imagePullSecrets,omitempty" protobuf:"bytes,3,rep,name=imagePullSecrets"` } @@ -2217,11 +2332,11 @@ type ServiceAccount struct { type ServiceAccountList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of ServiceAccounts. - // More info: http://releases.k8s.io/release-1.3/docs/design/service_accounts.md#service-accounts + // More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md#service-accounts Items []ServiceAccount `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -2242,7 +2357,7 @@ type ServiceAccountList struct { type Endpoints struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The set of all endpoints is the union of all subsets. Addresses are placed into @@ -2288,6 +2403,8 @@ type EndpointAddress struct { IP string `json:"ip" protobuf:"bytes,1,opt,name=ip"` // The Hostname of this endpoint Hostname string `json:"hostname,omitempty" protobuf:"bytes,3,opt,name=hostname"` + // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node. + NodeName *string `json:"nodeName,omitempty" protobuf:"bytes,4,opt,name=nodeName"` // Reference to object providing the endpoint. TargetRef *ObjectReference `json:"targetRef,omitempty" protobuf:"bytes,2,opt,name=targetRef"` } @@ -2312,7 +2429,7 @@ type EndpointPort struct { type EndpointsList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of endpoints. @@ -2329,7 +2446,7 @@ type NodeSpec struct { // ID of the node assigned by the cloud provider in the format: :// ProviderID string `json:"providerID,omitempty" protobuf:"bytes,3,opt,name=providerID"` // Unschedulable controls node schedulability of new pods. By default, node is schedulable. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#manual-node-administration"` + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#manual-node-administration"` Unschedulable bool `json:"unschedulable,omitempty" protobuf:"varint,4,opt,name=unschedulable"` } @@ -2378,25 +2495,26 @@ type NodeSystemInfo struct { // NodeStatus is information about the current status of a node. type NodeStatus struct { // Capacity represents the total resources of a node. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#capacity for more details. + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity for more details. Capacity ResourceList `json:"capacity,omitempty" protobuf:"bytes,1,rep,name=capacity,casttype=ResourceList,castkey=ResourceName"` // Allocatable represents the resources of a node that are available for scheduling. // Defaults to Capacity. Allocatable ResourceList `json:"allocatable,omitempty" protobuf:"bytes,2,rep,name=allocatable,casttype=ResourceList,castkey=ResourceName"` // NodePhase is the recently observed lifecycle phase of the node. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-phase + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-phase + // The field is never populated, and now is deprecated. Phase NodePhase `json:"phase,omitempty" protobuf:"bytes,3,opt,name=phase,casttype=NodePhase"` // Conditions is an array of current observed node conditions. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-condition + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-condition Conditions []NodeCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,4,rep,name=conditions"` // List of addresses reachable to the node. // Queried from cloud provider, if available. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-addresses + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-addresses Addresses []NodeAddress `json:"addresses,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,5,rep,name=addresses"` // Endpoints of daemons running on the Node. DaemonEndpoints NodeDaemonEndpoints `json:"daemonEndpoints,omitempty" protobuf:"bytes,6,opt,name=daemonEndpoints"` // Set of ids/uuids to uniquely identify the node. - // More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-info + // More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-info NodeInfo NodeSystemInfo `json:"nodeInfo,omitempty" protobuf:"bytes,7,opt,name=nodeInfo"` // List of container images on this node Images []ContainerImage `json:"images,omitempty" protobuf:"bytes,8,rep,name=images"` @@ -2417,6 +2535,34 @@ type AttachedVolume struct { DevicePath string `json:"devicePath" protobuf:"bytes,2,rep,name=devicePath"` } +// AvoidPods describes pods that should avoid this node. This is the value for a +// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and +// will eventually become a field of NodeStatus. +type AvoidPods struct { + // Bounded-sized list of signatures of pods that should avoid this node, sorted + // in timestamp order from oldest to newest. Size of the slice is unspecified. + PreferAvoidPods []PreferAvoidPodsEntry `json:"preferAvoidPods,omitempty" protobuf:"bytes,1,rep,name=preferAvoidPods"` +} + +// Describes a class of pods that should avoid this node. +type PreferAvoidPodsEntry struct { + // The class of pods. + PodSignature PodSignature `json:"podSignature" protobuf:"bytes,1,opt,name=podSignature"` + // Time at which this entry was added to the list. + EvictionTime unversioned.Time `json:"evictionTime,omitempty" protobuf:"bytes,2,opt,name=evictionTime"` + // (brief) reason why this entry was added to the list. + Reason string `json:"reason,omitempty" protobuf:"bytes,3,opt,name=reason"` + // Human readable message indicating why this entry was added to the list. + Message string `json:"message,omitempty" protobuf:"bytes,4,opt,name=message"` +} + +// Describes the class of pods that should avoid this node. +// Exactly one field should be set. +type PodSignature struct { + // Reference to controller whose pods should avoid this node. + PodController *OwnerReference `json:"podController,omitempty" protobuf:"bytes,1,opt,name=podController"` +} + // Describe a container image type ContainerImage struct { // Names by which this image is known. @@ -2451,11 +2597,13 @@ const ( NodeOutOfDisk NodeConditionType = "OutOfDisk" // NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory. NodeMemoryPressure NodeConditionType = "MemoryPressure" + // NodeDiskPressure means the kubelet is under pressure due to insufficient available disk. + NodeDiskPressure NodeConditionType = "DiskPressure" // NodeNetworkUnavailable means that network for the node is not correctly configured. NodeNetworkUnavailable NodeConditionType = "NetworkUnavailable" ) -// NodeCondition contains condition infromation for a node. +// NodeCondition contains condition information for a node. type NodeCondition struct { // Type of node condition. Type NodeConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=NodeConditionType"` @@ -2511,24 +2659,25 @@ const ( // ResourceList is a set of (resource name, quantity) pairs. type ResourceList map[ResourceName]resource.Quantity -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // Node is a worker node in Kubernetes, formerly known as minion. // Each node will have a unique identifier in the cache (i.e. in etcd). type Node struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the behavior of a node. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec NodeSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Most recently observed status of the node. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status NodeStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -2536,7 +2685,7 @@ type Node struct { type NodeList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of nodes @@ -2553,14 +2702,14 @@ const ( // NamespaceSpec describes the attributes on a Namespace. type NamespaceSpec struct { // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. - // More info: http://releases.k8s.io/release-1.3/docs/design/namespaces.md#finalizers + // More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#finalizers Finalizers []FinalizerName `json:"finalizers,omitempty" protobuf:"bytes,1,rep,name=finalizers,casttype=FinalizerName"` } // NamespaceStatus is information about the current status of a Namespace. type NamespaceStatus struct { // Phase is the current lifecycle phase of the namespace. - // More info: http://releases.k8s.io/release-1.3/docs/design/namespaces.md#phases + // More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#phases Phase NamespacePhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=NamespacePhase"` } @@ -2574,22 +2723,23 @@ const ( NamespaceTerminating NamespacePhase = "Terminating" ) -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // Namespace provides a scope for Names. // Use of multiple namespaces is optional. type Namespace struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the behavior of the Namespace. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec NamespaceSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status describes the current status of a Namespace. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status NamespaceStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -2597,11 +2747,11 @@ type Namespace struct { type NamespaceList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is the list of Namespace objects in the list. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md Items []Namespace `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -2610,7 +2760,7 @@ type NamespaceList struct { type Binding struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // The target object that you want to bind to the standard object. @@ -2800,13 +2950,13 @@ type OwnerReference struct { // API version of the referent. APIVersion string `json:"apiVersion" protobuf:"bytes,5,opt,name=apiVersion"` // Kind of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` // Name of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names Name string `json:"name" protobuf:"bytes,3,opt,name=name"` // UID of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids UID types.UID `json:"uid" protobuf:"bytes,4,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"` // If true, this reference points to the managing controller. Controller *bool `json:"controller,omitempty" protobuf:"varint,6,opt,name=controller"` @@ -2815,21 +2965,21 @@ type OwnerReference struct { // ObjectReference contains enough information to let you inspect or modify the referred object. type ObjectReference struct { // Kind of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` // Namespace of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md Namespace string `json:"namespace,omitempty" protobuf:"bytes,2,opt,name=namespace"` // Name of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names Name string `json:"name,omitempty" protobuf:"bytes,3,opt,name=name"` // UID of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids UID types.UID `json:"uid,omitempty" protobuf:"bytes,4,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"` // API version of the referent. APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,5,opt,name=apiVersion"` // Specific resourceVersion to which this reference is made, if any. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"` // If referring to a piece of an object instead of an entire object, this string @@ -2847,7 +2997,7 @@ type ObjectReference struct { // referenced object inside the same namespace. type LocalObjectReference struct { // Name of the referent. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names // TODO: Add other useful fields. apiVersion, kind, uid? Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"` } @@ -2882,7 +3032,7 @@ const ( type Event struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata" protobuf:"bytes,1,opt,name=metadata"` // The object that this event is about. @@ -2917,7 +3067,7 @@ type Event struct { type EventList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of events @@ -2928,7 +3078,7 @@ type EventList struct { type List struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of objects @@ -2973,11 +3123,11 @@ type LimitRangeSpec struct { type LimitRange struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the limits enforced. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec LimitRangeSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } @@ -2985,11 +3135,11 @@ type LimitRange struct { type LimitRangeList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of LimitRange objects. - // More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_limit_range.md + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_limit_range.md Items []LimitRange `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -3017,6 +3167,8 @@ const ( ResourceRequestsCPU ResourceName = "requests.cpu" // Memory request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) ResourceRequestsMemory ResourceName = "requests.memory" + // Storage request, in bytes + ResourceRequestsStorage ResourceName = "requests.storage" // CPU limit, in cores. (500m = .5 cores) ResourceLimitsCPU ResourceName = "limits.cpu" // Memory limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) @@ -3040,7 +3192,7 @@ const ( // ResourceQuotaSpec defines the desired hard limits to enforce for Quota. type ResourceQuotaSpec struct { // Hard is the set of desired hard limits for each named resource. - // More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota Hard ResourceList `json:"hard,omitempty" protobuf:"bytes,1,rep,name=hard,casttype=ResourceList,castkey=ResourceName"` // A collection of filters that must match each object tracked by a quota. // If not specified, the quota matches all objects. @@ -3050,7 +3202,7 @@ type ResourceQuotaSpec struct { // ResourceQuotaStatus defines the enforced hard limits and observed use. type ResourceQuotaStatus struct { // Hard is the set of enforced hard limits for each named resource. - // More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota Hard ResourceList `json:"hard,omitempty" protobuf:"bytes,1,rep,name=hard,casttype=ResourceList,castkey=ResourceName"` // Used is the current observed total usage of the resource in the namespace. Used ResourceList `json:"used,omitempty" protobuf:"bytes,2,rep,name=used,casttype=ResourceList,castkey=ResourceName"` @@ -3062,15 +3214,15 @@ type ResourceQuotaStatus struct { type ResourceQuota struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the desired quota. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec ResourceQuotaSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status defines the actual enforced quota and its current usage. - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status ResourceQuotaStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -3078,11 +3230,11 @@ type ResourceQuota struct { type ResourceQuotaList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of ResourceQuota objects. - // More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota + // More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota Items []ResourceQuota `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -3093,7 +3245,7 @@ type ResourceQuotaList struct { type Secret struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN @@ -3103,6 +3255,13 @@ type Secret struct { // Described in https://tools.ietf.org/html/rfc4648#section-4 Data map[string][]byte `json:"data,omitempty" protobuf:"bytes,2,rep,name=data"` + // stringData allows specifying non-binary secret data in string form. + // It is provided as a write-only convenience method. + // All keys and values are merged into the data field on write, overwriting any existing values. + // It is never output when reading from the API. + // +k8s:conversion-gen=false + StringData map[string]string `json:"stringData,omitempty" protobuf:"bytes,4,rep,name=stringData"` + // Used to facilitate programmatic handling of secret data. Type SecretType `json:"type,omitempty" protobuf:"bytes,3,opt,name=type,casttype=SecretType"` } @@ -3165,11 +3324,11 @@ const ( type SecretList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of secret objects. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md Items []Secret `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -3179,7 +3338,7 @@ type SecretList struct { type ConfigMap struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Data contains the configuration data. @@ -3191,7 +3350,7 @@ type ConfigMap struct { type ConfigMapList struct { unversioned.TypeMeta `json:",inline"` - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is the list of ConfigMaps. @@ -3222,13 +3381,14 @@ type ComponentCondition struct { Error string `json:"error,omitempty" protobuf:"bytes,4,opt,name=error"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // ComponentStatus (and ComponentStatusList) holds the cluster validation info. type ComponentStatus struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of component conditions observed @@ -3239,7 +3399,7 @@ type ComponentStatus struct { type ComponentStatusList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of ComponentStatus objects. @@ -3251,8 +3411,18 @@ type ComponentStatusList struct { type DownwardAPIVolumeSource struct { // Items is a list of downward API volume file Items []DownwardAPIVolumeFile `json:"items,omitempty" protobuf:"bytes,1,rep,name=items"` + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"varint,2,opt,name=defaultMode"` } +const ( + DownwardAPIVolumeSourceDefaultMode int32 = 0644 +) + // DownwardAPIVolumeFile represents information to create the file containing the pod field type DownwardAPIVolumeFile struct { // Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..' @@ -3262,6 +3432,11 @@ type DownwardAPIVolumeFile struct { // Selects a resource of the container: only resources limits and requests // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty" protobuf:"bytes,3,opt,name=resourceFieldRef"` + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty" protobuf:"varint,4,opt,name=mode"` } // DeprecatedDownwardAPIVolumeSource represents a volume containing downward API info. @@ -3269,6 +3444,12 @@ type DownwardAPIVolumeFile struct { type DeprecatedDownwardAPIVolumeSource struct { // Items is a list of downward API volume file Items []DeprecatedDownwardAPIVolumeFile `json:"items,omitempty" protobuf:"-"` + // Optional: mode bits to use on created files by default. Must be a + // value between 0 and 0777. Defaults to 0644. + // Directories within the path are not affected by this setting. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + DefaultMode *int32 `json:"defaultMode,omitempty" protobuf:"-"` } // DeprecatedDownwardAPIVolumeFile represents information to create the file containing the pod field @@ -3281,6 +3462,11 @@ type DeprecatedDownwardAPIVolumeFile struct { // Selects a resource of the container: only resources limits and requests // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty" protobuf:"-"` + // Optional: mode bits to use on this file, must be a value between 0 + // and 0777. If not specified, the volume defaultMode will be used. + // This might be in conflict with other options that affect the file + // mode, like fsGroup, and the result can be other mode bits set. + Mode *int32 `json:"mode,omitempty" protobuf:"-"` } // SecurityContext holds security configuration that will be applied to a container. @@ -3332,7 +3518,7 @@ type SELinuxOptions struct { type RangeAllocation struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Range is string that identifies the range represented by 'data'. @@ -3346,65 +3532,75 @@ const ( DefaultSchedulerName = "default-scheduler" ) -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // SecurityContextConstraints governs the ability to make requests that affect the SecurityContext // that will be applied to a container. type SecurityContextConstraints struct { unversioned.TypeMeta `json:",inline"` - ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // Standard object's metadata. + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Priority influences the sort order of SCCs when evaluating which SCCs to try first for // a given pod request based on access in the Users and Groups fields. The higher the int, the // higher priority. If scores for multiple SCCs are equal they will be sorted by name. - Priority *int32 `json:"priority" description:"determines which SCC is used when multiple SCCs allow a particular pod; higher priority SCCs are preferred" protobuf:"varint,2,opt,name=priority"` + Priority *int32 `json:"priority" protobuf:"varint,2,opt,name=priority"` // AllowPrivilegedContainer determines if a container can request to be run as privileged. - AllowPrivilegedContainer bool `json:"allowPrivilegedContainer" description:"allow containers to run as privileged" protobuf:"varint,3,opt,name=allowPrivilegedContainer"` + AllowPrivilegedContainer bool `json:"allowPrivilegedContainer" protobuf:"varint,3,opt,name=allowPrivilegedContainer"` // DefaultAddCapabilities is the default set of capabilities that will be added to the container // unless the pod spec specifically drops the capability. You may not list a capabiility in both // DefaultAddCapabilities and RequiredDropCapabilities. - DefaultAddCapabilities []Capability `json:"defaultAddCapabilities" description:"capabilities that are added by default but may be dropped" protobuf:"bytes,4,rep,name=defaultAddCapabilities,casttype=Capability"` + DefaultAddCapabilities []Capability `json:"defaultAddCapabilities" protobuf:"bytes,4,rep,name=defaultAddCapabilities,casttype=Capability"` // RequiredDropCapabilities are the capabilities that will be dropped from the container. These // are required to be dropped and cannot be added. - RequiredDropCapabilities []Capability `json:"requiredDropCapabilities" description:"capabilities that will be dropped by default and may not be added" protobuf:"bytes,5,rep,name=requiredDropCapabilities,casttype=Capability"` + RequiredDropCapabilities []Capability `json:"requiredDropCapabilities" protobuf:"bytes,5,rep,name=requiredDropCapabilities,casttype=Capability"` // AllowedCapabilities is a list of capabilities that can be requested to add to the container. // Capabilities in this field maybe added at the pod author's discretion. // You must not list a capability in both AllowedCapabilities and RequiredDropCapabilities. - AllowedCapabilities []Capability `json:"allowedCapabilities" description:"capabilities that are allowed to be added" protobuf:"bytes,6,rep,name=allowedCapabilities,casttype=Capability"` + AllowedCapabilities []Capability `json:"allowedCapabilities" protobuf:"bytes,6,rep,name=allowedCapabilities,casttype=Capability"` // AllowHostDirVolumePlugin determines if the policy allow containers to use the HostDir volume plugin - // +genconversion=false - AllowHostDirVolumePlugin bool `json:"allowHostDirVolumePlugin" description:"allow the use of the host dir volume plugin" protobuf:"varint,7,opt,name=allowHostDirVolumePlugin"` + // +k8s:conversion-gen=false + AllowHostDirVolumePlugin bool `json:"allowHostDirVolumePlugin" protobuf:"varint,7,opt,name=allowHostDirVolumePlugin"` // Volumes is a white list of allowed volume plugins. FSType corresponds directly with the field names // of a VolumeSource (azureFile, configMap, emptyDir). To allow all volumes you may use '*'. Volumes []FSType `json:"volumes" protobuf:"bytes,8,rep,name=volumes,casttype=FSType"` // AllowHostNetwork determines if the policy allows the use of HostNetwork in the pod spec. - AllowHostNetwork bool `json:"allowHostNetwork" description:"allow the use of the hostNetwork in the pod spec" protobuf:"varint,9,opt,name=allowHostNetwork"` + AllowHostNetwork bool `json:"allowHostNetwork" protobuf:"varint,9,opt,name=allowHostNetwork"` // AllowHostPorts determines if the policy allows host ports in the containers. - AllowHostPorts bool `json:"allowHostPorts" description:"allow the use of the host ports in the containers" protobuf:"varint,10,opt,name=allowHostPorts"` + AllowHostPorts bool `json:"allowHostPorts" protobuf:"varint,10,opt,name=allowHostPorts"` // AllowHostPID determines if the policy allows host pid in the containers. - AllowHostPID bool `json:"allowHostPID" description:"allow the use of the host pid in the containers" protobuf:"varint,11,opt,name=allowHostPID"` + AllowHostPID bool `json:"allowHostPID" protobuf:"varint,11,opt,name=allowHostPID"` // AllowHostIPC determines if the policy allows host ipc in the containers. - AllowHostIPC bool `json:"allowHostIPC" description:"allow the use of the host ipc in the containers" protobuf:"varint,12,opt,name=allowHostIPC"` + AllowHostIPC bool `json:"allowHostIPC" protobuf:"varint,12,opt,name=allowHostIPC"` // SELinuxContext is the strategy that will dictate what labels will be set in the SecurityContext. - SELinuxContext SELinuxContextStrategyOptions `json:"seLinuxContext,omitempty" description:"strategy used to generate SELinuxOptions" protobuf:"bytes,13,opt,name=seLinuxContext"` + SELinuxContext SELinuxContextStrategyOptions `json:"seLinuxContext,omitempty" protobuf:"bytes,13,opt,name=seLinuxContext"` // RunAsUser is the strategy that will dictate what RunAsUser is used in the SecurityContext. - RunAsUser RunAsUserStrategyOptions `json:"runAsUser,omitempty" description:"strategy used to generate RunAsUser" protobuf:"bytes,14,opt,name=runAsUser"` + RunAsUser RunAsUserStrategyOptions `json:"runAsUser,omitempty" protobuf:"bytes,14,opt,name=runAsUser"` // SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext. - SupplementalGroups SupplementalGroupsStrategyOptions `json:"supplementalGroups,omitempty" description:"strategy used to generate supplemental groups" protobuf:"bytes,15,opt,name=supplementalGroups"` + SupplementalGroups SupplementalGroupsStrategyOptions `json:"supplementalGroups,omitempty" protobuf:"bytes,15,opt,name=supplementalGroups"` // FSGroup is the strategy that will dictate what fs group is used by the SecurityContext. - FSGroup FSGroupStrategyOptions `json:"fsGroup,omitempty" description:"strategy used to generate fsGroup" protobuf:"bytes,16,opt,name=fsGroup"` + FSGroup FSGroupStrategyOptions `json:"fsGroup,omitempty" protobuf:"bytes,16,opt,name=fsGroup"` // ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file // system. If the container specifically requests to run with a non-read only root file system // the SCC should deny the pod. // If set to false the container may run with a read only root file system if it wishes but it // will not be forced to. - ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem" description:"require containers to run with a read only root filesystem" protobuf:"varint,17,opt,name=readOnlyRootFilesystem"` + ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem" protobuf:"varint,17,opt,name=readOnlyRootFilesystem"` // The users who have permissions to use this security context constraints - Users []string `json:"users,omitempty" description:"users allowed to use this SecurityContextConstraints" protobuf:"bytes,18,rep,name=users"` + Users []string `json:"users,omitempty" protobuf:"bytes,18,rep,name=users"` // The groups that have permission to use this security context constraints - Groups []string `json:"groups,omitempty" description:"groups allowed to use this SecurityContextConstraints" protobuf:"bytes,19,rep,name=groups"` + Groups []string `json:"groups,omitempty" protobuf:"bytes,19,rep,name=groups"` + + // SeccompProfiles lists the allowed profiles that may be set for the pod or + // container's seccomp annotations. An unset (nil) or empty value means that no profiles may + // be specifid by the pod or container. The wildcard '*' may be used to allow all profiles. When + // used to generate a value for a pod the first non-wildcard profile will be used as + // the default. + SeccompProfiles []string `json:"seccompProfiles,omitempty" protobuf:"bytes,20,opt,name=seccompProfiles"` } // FS Type gives strong typing to different file systems that are used by volumes. @@ -3436,49 +3632,49 @@ var ( // SELinuxContextStrategyOptions defines the strategy type and any options used to create the strategy. type SELinuxContextStrategyOptions struct { // Type is the strategy that will dictate what SELinux context is used in the SecurityContext. - Type SELinuxContextStrategyType `json:"type,omitempty" description:"strategy used to generate the SELinux context" protobuf:"bytes,1,opt,name=type,casttype=SELinuxContextStrategyType"` + Type SELinuxContextStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=SELinuxContextStrategyType"` // seLinuxOptions required to run as; required for MustRunAs - SELinuxOptions *SELinuxOptions `json:"seLinuxOptions,omitempty" description:"seLinuxOptions required to run as; required for MustRunAs" protobuf:"bytes,2,opt,name=seLinuxOptions"` + SELinuxOptions *SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,2,opt,name=seLinuxOptions"` } // RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. type RunAsUserStrategyOptions struct { // Type is the strategy that will dictate what RunAsUser is used in the SecurityContext. - Type RunAsUserStrategyType `json:"type,omitempty" description:"strategy used to generate RunAsUser" protobuf:"bytes,1,opt,name=type,casttype=RunAsUserStrategyType"` + Type RunAsUserStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=RunAsUserStrategyType"` // UID is the user id that containers must run as. Required for the MustRunAs strategy if not using // namespace/service account allocated uids. - UID *int64 `json:"uid,omitempty" description:"the uid to always run as; required for MustRunAs" protobuf:"varint,2,opt,name=uid"` + UID *int64 `json:"uid,omitempty" protobuf:"varint,2,opt,name=uid"` // UIDRangeMin defines the min value for a strategy that allocates by range. - UIDRangeMin *int64 `json:"uidRangeMin,omitempty" description:"min value for range based allocators" protobuf:"varint,3,opt,name=uidRangeMin"` + UIDRangeMin *int64 `json:"uidRangeMin,omitempty" protobuf:"varint,3,opt,name=uidRangeMin"` // UIDRangeMax defines the max value for a strategy that allocates by range. - UIDRangeMax *int64 `json:"uidRangeMax,omitempty" description:"max value for range based allocators" protobuf:"varint,4,opt,name=uidRangeMax"` + UIDRangeMax *int64 `json:"uidRangeMax,omitempty" protobuf:"varint,4,opt,name=uidRangeMax"` } // FSGroupStrategyOptions defines the strategy type and options used to create the strategy. type FSGroupStrategyOptions struct { // Type is the strategy that will dictate what FSGroup is used in the SecurityContext. - Type FSGroupStrategyType `json:"type,omitempty" description:"strategy used to generate fsGroup" protobuf:"bytes,1,opt,name=type,casttype=FSGroupStrategyType"` + Type FSGroupStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=FSGroupStrategyType"` // Ranges are the allowed ranges of fs groups. If you would like to force a single // fs group then supply a single range with the same start and end. - Ranges []IDRange `json:"ranges,omitempty" description:"ranges of allowable IDs for fsGroup" protobuf:"bytes,2,rep,name=ranges"` + Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` } // SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. type SupplementalGroupsStrategyOptions struct { // Type is the strategy that will dictate what supplemental groups is used in the SecurityContext. - Type SupplementalGroupsStrategyType `json:"type,omitempty" description:"strategy used to generate supplemental groups" protobuf:"bytes,1,opt,name=type,casttype=SupplementalGroupsStrategyType"` + Type SupplementalGroupsStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type,casttype=SupplementalGroupsStrategyType"` // Ranges are the allowed ranges of supplemental groups. If you would like to force a single // supplemental group then supply a single range with the same start and end. - Ranges []IDRange `json:"ranges,omitempty" description:"ranges of allowable IDs for supplemental groups" protobuf:"bytes,2,rep,name=ranges"` + Ranges []IDRange `json:"ranges,omitempty" protobuf:"bytes,2,rep,name=ranges"` } // IDRange provides a min/max of an allowed range of IDs. // TODO: this could be reused for UIDs. type IDRange struct { // Min is the start of the range, inclusive. - Min int64 `json:"min,omitempty" description:"min value for the range" protobuf:"varint,1,opt,name=min"` + Min int64 `json:"min,omitempty" protobuf:"varint,1,opt,name=min"` // Max is the end of the range, inclusive. - Max int64 `json:"max,omitempty" description:"min value for the range" protobuf:"varint,2,opt,name=max"` + Max int64 `json:"max,omitempty" protobuf:"varint,2,opt,name=max"` } // SELinuxContextStrategyType denotes strategy types for generating SELinux options for a @@ -3526,7 +3722,10 @@ const ( // SecurityContextConstraintsList is a list of SecurityContextConstraints objects type SecurityContextConstraintsList struct { unversioned.TypeMeta `json:",inline"` + + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + // List of security context constraints. Items []SecurityContextConstraints `json:"items" protobuf:"bytes,2,rep,name=items"` } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/api/v1/types_swagger_doc_generated.go index 5adbb1e1..7158b494 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,10 +29,10 @@ package v1 // AUTO-GENERATED FUNCTIONS START HERE var map_AWSElasticBlockStoreVolumeSource = map[string]string{ "": "Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.", - "volumeID": "Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore", - "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore", + "volumeID": "Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", "partition": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).", - "readOnly": "Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore", + "readOnly": "Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", } func (AWSElasticBlockStoreVolumeSource) SwaggerDoc() map[string]string { @@ -60,6 +60,28 @@ func (AttachedVolume) SwaggerDoc() map[string]string { return map_AttachedVolume } +var map_AvoidPods = map[string]string{ + "": "AvoidPods describes pods that should avoid this node. This is the value for a Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and will eventually become a field of NodeStatus.", + "preferAvoidPods": "Bounded-sized list of signatures of pods that should avoid this node, sorted in timestamp order from oldest to newest. Size of the slice is unspecified.", +} + +func (AvoidPods) SwaggerDoc() map[string]string { + return map_AvoidPods +} + +var map_AzureDiskVolumeSource = map[string]string{ + "": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", + "diskName": "The Name of the data disk in the blob storage", + "diskURI": "The URI the data disk in the blob storage", + "cachingMode": "Host Caching mode: None, Read Only, Read Write.", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", +} + +func (AzureDiskVolumeSource) SwaggerDoc() map[string]string { + return map_AzureDiskVolumeSource +} + var map_AzureFileVolumeSource = map[string]string{ "": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", "secretName": "the name of secret that contains Azure Storage Account Name and Key", @@ -73,7 +95,7 @@ func (AzureFileVolumeSource) SwaggerDoc() map[string]string { var map_Binding = map[string]string{ "": "Binding ties one object to another. For example, a pod is bound to a node by a scheduler.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "target": "The target object that you want to bind to the standard object.", } @@ -93,12 +115,12 @@ func (Capabilities) SwaggerDoc() map[string]string { var map_CephFSVolumeSource = map[string]string{ "": "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", - "monitors": "Required: Monitors is a collection of Ceph monitors More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it", + "monitors": "Required: Monitors is a collection of Ceph monitors More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", "path": "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", - "user": "Optional: User is the rados user name, default is admin More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it", - "secretFile": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it", - "secretRef": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it", - "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: http://releases.k8s.io/release-1.3/examples/cephfs/README.md#how-to-use-it", + "user": "Optional: User is the rados user name, default is admin More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", + "secretFile": "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", + "secretRef": "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: http://releases.k8s.io/release-1.4/examples/volumes/cephfs/README.md#how-to-use-it", } func (CephFSVolumeSource) SwaggerDoc() map[string]string { @@ -107,9 +129,9 @@ func (CephFSVolumeSource) SwaggerDoc() map[string]string { var map_CinderVolumeSource = map[string]string{ "": "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", - "volumeID": "volume id used to identify the volume in cinder More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md", - "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md", - "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md", + "volumeID": "volume id used to identify the volume in cinder More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", + "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", } func (CinderVolumeSource) SwaggerDoc() map[string]string { @@ -130,7 +152,7 @@ func (ComponentCondition) SwaggerDoc() map[string]string { var map_ComponentStatus = map[string]string{ "": "ComponentStatus (and ComponentStatusList) holds the cluster validation info.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "conditions": "List of component conditions observed", } @@ -140,7 +162,7 @@ func (ComponentStatus) SwaggerDoc() map[string]string { var map_ComponentStatusList = map[string]string{ "": "Status of all the conditions for the component as a list of ComponentStatus objects.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", "items": "List of ComponentStatus objects.", } @@ -150,7 +172,7 @@ func (ComponentStatusList) SwaggerDoc() map[string]string { var map_ConfigMap = map[string]string{ "": "ConfigMap holds configuration data for pods to consume.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "data": "Data contains the configuration data. Each key must be a valid DNS_SUBDOMAIN with an optional leading dot.", } @@ -169,7 +191,7 @@ func (ConfigMapKeySelector) SwaggerDoc() map[string]string { var map_ConfigMapList = map[string]string{ "": "ConfigMapList is a resource containing a list of ConfigMap objects.", - "metadata": "More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is the list of ConfigMaps.", } @@ -178,8 +200,9 @@ func (ConfigMapList) SwaggerDoc() map[string]string { } var map_ConfigMapVolumeSource = map[string]string{ - "": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", - "items": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", + "items": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (ConfigMapVolumeSource) SwaggerDoc() map[string]string { @@ -189,20 +212,20 @@ func (ConfigMapVolumeSource) SwaggerDoc() map[string]string { var map_Container = map[string]string{ "": "A single application container that you want to run within a pod.", "name": "Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.", - "image": "Docker image name. More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md", - "command": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md#containers-and-commands", - "args": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md#containers-and-commands", + "image": "Docker image name. More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md", + "command": "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands", + "args": "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md#containers-and-commands", "workingDir": "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", "ports": "List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.", "env": "List of environment variables to set in the container. Cannot be updated.", - "resources": "Compute Resources required by this container. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#resources", + "resources": "Compute Resources required by this container. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources", "volumeMounts": "Pod volumes to mount into the container's filesystem. Cannot be updated.", - "livenessProbe": "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes", - "readinessProbe": "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes", + "livenessProbe": "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes", + "readinessProbe": "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes", "lifecycle": "Actions that the management system should take in response to container lifecycle events. Cannot be updated.", "terminationMessagePath": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Defaults to /dev/termination-log. Cannot be updated.", - "imagePullPolicy": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md#updating-images", - "securityContext": "Security options the pod should run with. More info: http://releases.k8s.io/release-1.3/docs/design/security_context.md", + "imagePullPolicy": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#updating-images", + "securityContext": "Security options the pod should run with. More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md", "stdin": "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", "stdinOnce": "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", "tty": "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", @@ -287,9 +310,9 @@ var map_ContainerStatus = map[string]string{ "lastState": "Details about the container's last termination condition.", "ready": "Specifies whether the container has passed its readiness probe.", "restartCount": "The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.", - "image": "The image the container is running. More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md", + "image": "The image the container is running. More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md", "imageID": "ImageID of the container's image.", - "containerID": "Container's ID in the format 'docker://'. More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#container-information", + "containerID": "Container's ID in the format 'docker://'. More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#container-information", } func (ContainerStatus) SwaggerDoc() map[string]string { @@ -321,6 +344,7 @@ var map_DeprecatedDownwardAPIVolumeFile = map[string]string{ "name": "Required: Name is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", "fieldRef": "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.", "resourceFieldRef": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", + "mode": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (DeprecatedDownwardAPIVolumeFile) SwaggerDoc() map[string]string { @@ -328,8 +352,9 @@ func (DeprecatedDownwardAPIVolumeFile) SwaggerDoc() map[string]string { } var map_DeprecatedDownwardAPIVolumeSource = map[string]string{ - "": "DeprecatedDownwardAPIVolumeSource represents a volume containing downward API info. This type is deprecated and should be replaced by use of the downwardAPI volume source.", - "items": "Items is a list of downward API volume file", + "": "DeprecatedDownwardAPIVolumeSource represents a volume containing downward API info. This type is deprecated and should be replaced by use of the downwardAPI volume source.", + "items": "Items is a list of downward API volume file", + "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (DeprecatedDownwardAPIVolumeSource) SwaggerDoc() map[string]string { @@ -341,6 +366,7 @@ var map_DownwardAPIVolumeFile = map[string]string{ "path": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", "fieldRef": "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.", "resourceFieldRef": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", + "mode": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (DownwardAPIVolumeFile) SwaggerDoc() map[string]string { @@ -348,8 +374,9 @@ func (DownwardAPIVolumeFile) SwaggerDoc() map[string]string { } var map_DownwardAPIVolumeSource = map[string]string{ - "": "DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.", - "items": "Items is a list of downward API volume file", + "": "DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.", + "items": "Items is a list of downward API volume file", + "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (DownwardAPIVolumeSource) SwaggerDoc() map[string]string { @@ -358,7 +385,7 @@ func (DownwardAPIVolumeSource) SwaggerDoc() map[string]string { var map_EmptyDirVolumeSource = map[string]string{ "": "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", - "medium": "What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#emptydir", + "medium": "What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir", } func (EmptyDirVolumeSource) SwaggerDoc() map[string]string { @@ -369,6 +396,7 @@ var map_EndpointAddress = map[string]string{ "": "EndpointAddress is a tuple that describes single IP address.", "ip": "The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.", "hostname": "The Hostname of this endpoint", + "nodeName": "Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.", "targetRef": "Reference to object providing the endpoint.", } @@ -400,7 +428,7 @@ func (EndpointSubset) SwaggerDoc() map[string]string { var map_Endpoints = map[string]string{ "": "Endpoints is a collection of endpoints that implement the actual service. Example:\n Name: \"mysvc\",\n Subsets: [\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n },\n {\n Addresses: [{\"ip\": \"10.10.3.3\"}],\n Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n },\n ]", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "subsets": "The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.", } @@ -410,7 +438,7 @@ func (Endpoints) SwaggerDoc() map[string]string { var map_EndpointsList = map[string]string{ "": "EndpointsList is a list of endpoints.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", "items": "List of endpoints.", } @@ -431,7 +459,7 @@ func (EnvVar) SwaggerDoc() map[string]string { var map_EnvVarSource = map[string]string{ "": "EnvVarSource represents a source for the value of an EnvVar.", - "fieldRef": "Selects a field of the pod; only name and namespace are supported.", + "fieldRef": "Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.podIP.", "resourceFieldRef": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", "configMapKeyRef": "Selects a key of a ConfigMap.", "secretKeyRef": "Selects a key of a secret in the pod's namespace", @@ -443,7 +471,7 @@ func (EnvVarSource) SwaggerDoc() map[string]string { var map_Event = map[string]string{ "": "Event is a report of an event somewhere in the cluster.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "involvedObject": "The object that this event is about.", "reason": "This should be a short, machine understandable string that gives the reason for the transition into the object's current status.", "message": "A human-readable description of the status of this operation.", @@ -460,7 +488,7 @@ func (Event) SwaggerDoc() map[string]string { var map_EventList = map[string]string{ "": "EventList is a list of events.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", "items": "List of events", } @@ -499,7 +527,7 @@ func (ExportOptions) SwaggerDoc() map[string]string { var map_FCVolumeSource = map[string]string{ "": "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.", - "targetWWNs": "Required: FC target world wide names (WWNs)", + "targetWWNs": "Required: FC target worldwide names (WWNs)", "lun": "Required: FC target lun number", "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", "readOnly": "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", @@ -520,7 +548,7 @@ func (FSGroupStrategyOptions) SwaggerDoc() map[string]string { } var map_FlexVolumeSource = map[string]string{ - "": "FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.", + "": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", "driver": "Driver is the name of the driver to use for this volume.", "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", "secretRef": "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", @@ -543,10 +571,10 @@ func (FlockerVolumeSource) SwaggerDoc() map[string]string { var map_GCEPersistentDiskVolumeSource = map[string]string{ "": "Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.", - "pdName": "Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk", - "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk", - "partition": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk", - "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk", + "pdName": "Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "partition": "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", } func (GCEPersistentDiskVolumeSource) SwaggerDoc() map[string]string { @@ -566,9 +594,9 @@ func (GitRepoVolumeSource) SwaggerDoc() map[string]string { var map_GlusterfsVolumeSource = map[string]string{ "": "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", - "endpoints": "EndpointsName is the endpoint name that details Glusterfs topology. More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod", - "path": "Path is the Glusterfs volume path. More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod", - "readOnly": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md#create-a-pod", + "endpoints": "EndpointsName is the endpoint name that details Glusterfs topology. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod", + "path": "Path is the Glusterfs volume path. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod", + "readOnly": "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md#create-a-pod", } func (GlusterfsVolumeSource) SwaggerDoc() map[string]string { @@ -611,7 +639,7 @@ func (Handler) SwaggerDoc() map[string]string { var map_HostPathVolumeSource = map[string]string{ "": "Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.", - "path": "Path of the directory on the host. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath", + "path": "Path of the directory on the host. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath", } func (HostPathVolumeSource) SwaggerDoc() map[string]string { @@ -634,7 +662,7 @@ var map_ISCSIVolumeSource = map[string]string{ "iqn": "Target iSCSI Qualified Name.", "lun": "iSCSI target lun number.", "iscsiInterface": "Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport.", - "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#iscsi", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#iscsi", "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", } @@ -646,6 +674,7 @@ var map_KeyToPath = map[string]string{ "": "Maps a string key to a path within a volume.", "key": "The key to project.", "path": "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.", + "mode": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (KeyToPath) SwaggerDoc() map[string]string { @@ -654,8 +683,8 @@ func (KeyToPath) SwaggerDoc() map[string]string { var map_Lifecycle = map[string]string{ "": "Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.", - "postStart": "PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#hook-details", - "preStop": "PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: http://releases.k8s.io/release-1.3/docs/user-guide/container-environment.md#hook-details", + "postStart": "PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details", + "preStop": "PreStop is called immediately before a container is terminated. The container is terminated after the handler completes. The reason for termination is passed to the handler. Regardless of the outcome of the handler, the container is eventually terminated. Other management of the container blocks until the hook completes. More info: http://releases.k8s.io/release-1.4/docs/user-guide/container-environment.md#hook-details", } func (Lifecycle) SwaggerDoc() map[string]string { @@ -664,8 +693,8 @@ func (Lifecycle) SwaggerDoc() map[string]string { var map_LimitRange = map[string]string{ "": "LimitRange sets resource usage limits for each kind of resource in a Namespace.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the limits enforced. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the limits enforced. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (LimitRange) SwaggerDoc() map[string]string { @@ -688,8 +717,8 @@ func (LimitRangeItem) SwaggerDoc() map[string]string { var map_LimitRangeList = map[string]string{ "": "LimitRangeList is a list of LimitRange items.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "Items is a list of LimitRange objects. More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_limit_range.md", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "Items is a list of LimitRange objects. More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_limit_range.md", } func (LimitRangeList) SwaggerDoc() map[string]string { @@ -707,7 +736,7 @@ func (LimitRangeSpec) SwaggerDoc() map[string]string { var map_List = map[string]string{ "": "List holds a list of objects, which may not be known by the server.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", "items": "List of objects", } @@ -749,7 +778,7 @@ func (LoadBalancerStatus) SwaggerDoc() map[string]string { var map_LocalObjectReference = map[string]string{ "": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", - "name": "Name of the referent. More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names", + "name": "Name of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", } func (LocalObjectReference) SwaggerDoc() map[string]string { @@ -758,9 +787,9 @@ func (LocalObjectReference) SwaggerDoc() map[string]string { var map_NFSVolumeSource = map[string]string{ "": "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.", - "server": "Server is the hostname or IP address of the NFS server. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs", - "path": "Path that is exported by the NFS server. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs", - "readOnly": "ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs", + "server": "Server is the hostname or IP address of the NFS server. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", + "path": "Path that is exported by the NFS server. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", + "readOnly": "ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", } func (NFSVolumeSource) SwaggerDoc() map[string]string { @@ -769,9 +798,9 @@ func (NFSVolumeSource) SwaggerDoc() map[string]string { var map_Namespace = map[string]string{ "": "Namespace provides a scope for Names. Use of multiple namespaces is optional.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the behavior of the Namespace. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status describes the current status of a Namespace. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the behavior of the Namespace. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status describes the current status of a Namespace. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (Namespace) SwaggerDoc() map[string]string { @@ -780,8 +809,8 @@ func (Namespace) SwaggerDoc() map[string]string { var map_NamespaceList = map[string]string{ "": "NamespaceList is a list of Namespaces.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "Items is the list of Namespace objects in the list. More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "Items is the list of Namespace objects in the list. More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md", } func (NamespaceList) SwaggerDoc() map[string]string { @@ -790,7 +819,7 @@ func (NamespaceList) SwaggerDoc() map[string]string { var map_NamespaceSpec = map[string]string{ "": "NamespaceSpec describes the attributes on a Namespace.", - "finalizers": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: http://releases.k8s.io/release-1.3/docs/design/namespaces.md#finalizers", + "finalizers": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#finalizers", } func (NamespaceSpec) SwaggerDoc() map[string]string { @@ -799,7 +828,7 @@ func (NamespaceSpec) SwaggerDoc() map[string]string { var map_NamespaceStatus = map[string]string{ "": "NamespaceStatus is information about the current status of a Namespace.", - "phase": "Phase is the current lifecycle phase of the namespace. More info: http://releases.k8s.io/release-1.3/docs/design/namespaces.md#phases", + "phase": "Phase is the current lifecycle phase of the namespace. More info: http://releases.k8s.io/release-1.4/docs/design/namespaces.md#phases", } func (NamespaceStatus) SwaggerDoc() map[string]string { @@ -808,9 +837,9 @@ func (NamespaceStatus) SwaggerDoc() map[string]string { var map_Node = map[string]string{ "": "Node is a worker node in Kubernetes, formerly known as minion. Each node will have a unique identifier in the cache (i.e. in etcd).", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the behavior of a node. http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Most recently observed status of the node. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the behavior of a node. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the node. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (Node) SwaggerDoc() map[string]string { @@ -838,7 +867,7 @@ func (NodeAffinity) SwaggerDoc() map[string]string { } var map_NodeCondition = map[string]string{ - "": "NodeCondition contains condition infromation for a node.", + "": "NodeCondition contains condition information for a node.", "type": "Type of node condition.", "status": "Status of the condition, one of True, False, Unknown.", "lastHeartbeatTime": "Last time we got an update on a given condition.", @@ -862,7 +891,7 @@ func (NodeDaemonEndpoints) SwaggerDoc() map[string]string { var map_NodeList = map[string]string{ "": "NodeList is the whole list of all Nodes which have been registered with master.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", "items": "List of nodes", } @@ -913,7 +942,7 @@ var map_NodeSpec = map[string]string{ "podCIDR": "PodCIDR represents the pod IP range assigned to the node.", "externalID": "External ID of the node assigned by some machine database (e.g. a cloud provider). Deprecated.", "providerID": "ID of the node assigned by the cloud provider in the format: ://", - "unschedulable": "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#manual-node-administration\"`", + "unschedulable": "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#manual-node-administration\"`", } func (NodeSpec) SwaggerDoc() map[string]string { @@ -922,13 +951,13 @@ func (NodeSpec) SwaggerDoc() map[string]string { var map_NodeStatus = map[string]string{ "": "NodeStatus is information about the current status of a node.", - "capacity": "Capacity represents the total resources of a node. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#capacity for more details.", + "capacity": "Capacity represents the total resources of a node. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity for more details.", "allocatable": "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", - "phase": "NodePhase is the recently observed lifecycle phase of the node. More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-phase", - "conditions": "Conditions is an array of current observed node conditions. More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-condition", - "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-addresses", + "phase": "NodePhase is the recently observed lifecycle phase of the node. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-phase The field is never populated, and now is deprecated.", + "conditions": "Conditions is an array of current observed node conditions. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-condition", + "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-addresses", "daemonEndpoints": "Endpoints of daemons running on the Node.", - "nodeInfo": "Set of ids/uuids to uniquely identify the node. More info: http://releases.k8s.io/release-1.3/docs/admin/node.md#node-info", + "nodeInfo": "Set of ids/uuids to uniquely identify the node. More info: http://releases.k8s.io/release-1.4/docs/admin/node.md#node-info", "images": "List of container images on this node", "volumesInUse": "List of attachable volumes in use (mounted) by the node.", "volumesAttached": "List of volumes that are attached to the node.", @@ -968,20 +997,21 @@ func (ObjectFieldSelector) SwaggerDoc() map[string]string { var map_ObjectMeta = map[string]string{ "": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "name": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names", - "generateName": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#idempotency", - "namespace": "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md", + "name": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", + "generateName": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#idempotency", + "namespace": "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md", "selfLink": "SelfLink is a URL representing this object. Populated by the system. Read-only.", - "uid": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids", - "resourceVersion": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency", + "uid": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids", + "resourceVersion": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency", "generation": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", - "creationTimestamp": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "deletionTimestamp": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource will be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field. Once set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet will send a hard termination signal to the container. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "creationTimestamp": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "deletionTimestamp": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource will be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field. Once set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. Once the resource is deleted in the API, the Kubelet will send a hard termination signal to the container. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "deletionGracePeriodSeconds": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", - "labels": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md", - "annotations": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://releases.k8s.io/release-1.3/docs/user-guide/annotations.md", + "labels": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md", + "annotations": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://releases.k8s.io/release-1.4/docs/user-guide/annotations.md", "ownerReferences": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", "finalizers": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.", + "clusterName": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", } func (ObjectMeta) SwaggerDoc() map[string]string { @@ -990,12 +1020,12 @@ func (ObjectMeta) SwaggerDoc() map[string]string { var map_ObjectReference = map[string]string{ "": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "kind": "Kind of the referent. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "namespace": "Namespace of the referent. More info: http://releases.k8s.io/release-1.3/docs/user-guide/namespaces.md", - "name": "Name of the referent. More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names", - "uid": "UID of the referent. More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids", + "kind": "Kind of the referent. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "namespace": "Namespace of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/namespaces.md", + "name": "Name of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", + "uid": "UID of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids", "apiVersion": "API version of the referent.", - "resourceVersion": "Specific resourceVersion to which this reference is made, if any. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#concurrency-control-and-consistency", + "resourceVersion": "Specific resourceVersion to which this reference is made, if any. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#concurrency-control-and-consistency", "fieldPath": "If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.", } @@ -1006,9 +1036,9 @@ func (ObjectReference) SwaggerDoc() map[string]string { var map_OwnerReference = map[string]string{ "": "OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.", "apiVersion": "API version of the referent.", - "kind": "Kind of the referent. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "name": "Name of the referent. More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names", - "uid": "UID of the referent. More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#uids", + "kind": "Kind of the referent. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "name": "Name of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", + "uid": "UID of the referent. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#uids", "controller": "If true, this reference points to the managing controller.", } @@ -1017,10 +1047,10 @@ func (OwnerReference) SwaggerDoc() map[string]string { } var map_PersistentVolume = map[string]string{ - "": "PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistent-volumes", - "status": "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistent-volumes", + "": "PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes", + "status": "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistent-volumes", } func (PersistentVolume) SwaggerDoc() map[string]string { @@ -1029,9 +1059,9 @@ func (PersistentVolume) SwaggerDoc() map[string]string { var map_PersistentVolumeClaim = map[string]string{ "": "PersistentVolumeClaim is a user's request for and claim to a persistent volume", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the desired characteristics of a volume requested by a pod author. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", - "status": "Status represents the current information/status of a persistent volume claim. Read-only. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the desired characteristics of a volume requested by a pod author. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "status": "Status represents the current information/status of a persistent volume claim. Read-only. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", } func (PersistentVolumeClaim) SwaggerDoc() map[string]string { @@ -1040,8 +1070,8 @@ func (PersistentVolumeClaim) SwaggerDoc() map[string]string { var map_PersistentVolumeClaimList = map[string]string{ "": "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "A list of persistent volume claims. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "A list of persistent volume claims. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", } func (PersistentVolumeClaimList) SwaggerDoc() map[string]string { @@ -1050,9 +1080,9 @@ func (PersistentVolumeClaimList) SwaggerDoc() map[string]string { var map_PersistentVolumeClaimSpec = map[string]string{ "": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", - "accessModes": "AccessModes contains the desired access modes the volume should have. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes-1", + "accessModes": "AccessModes contains the desired access modes the volume should have. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1", "selector": "A label query over volumes to consider for binding.", - "resources": "Resources represents the minimum resources the volume should have. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#resources", + "resources": "Resources represents the minimum resources the volume should have. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#resources", "volumeName": "VolumeName is the binding reference to the PersistentVolume backing this claim.", } @@ -1063,7 +1093,7 @@ func (PersistentVolumeClaimSpec) SwaggerDoc() map[string]string { var map_PersistentVolumeClaimStatus = map[string]string{ "": "PersistentVolumeClaimStatus is the current status of a persistent volume claim.", "phase": "Phase represents the current phase of PersistentVolumeClaim.", - "accessModes": "AccessModes contains the actual access modes the volume backing the PVC has. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes-1", + "accessModes": "AccessModes contains the actual access modes the volume backing the PVC has. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes-1", "capacity": "Represents the actual resources of the underlying volume.", } @@ -1073,7 +1103,7 @@ func (PersistentVolumeClaimStatus) SwaggerDoc() map[string]string { var map_PersistentVolumeClaimVolumeSource = map[string]string{ "": "PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).", - "claimName": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "claimName": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", "readOnly": "Will force the ReadOnly setting in VolumeMounts. Default false.", } @@ -1083,8 +1113,8 @@ func (PersistentVolumeClaimVolumeSource) SwaggerDoc() map[string]string { var map_PersistentVolumeList = map[string]string{ "": "PersistentVolumeList is a list of PersistentVolume items.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "List of persistent volumes. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of persistent volumes. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md", } func (PersistentVolumeList) SwaggerDoc() map[string]string { @@ -1093,20 +1123,22 @@ func (PersistentVolumeList) SwaggerDoc() map[string]string { var map_PersistentVolumeSource = map[string]string{ "": "PersistentVolumeSource is similar to VolumeSource but meant for the administrator who creates PVs. Exactly one of its members must be set.", - "gcePersistentDisk": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk", - "awsElasticBlockStore": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore", - "hostPath": "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath", - "glusterfs": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md", - "nfs": "NFS represents an NFS mount on the host. Provisioned by an admin. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs", - "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md", + "gcePersistentDisk": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "awsElasticBlockStore": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", + "hostPath": "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath", + "glusterfs": "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md", + "nfs": "NFS represents an NFS mount on the host. Provisioned by an admin. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", + "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md", "iscsi": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", - "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md", + "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", "cephfs": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", "fc": "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", "flocker": "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", - "flexVolume": "FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.", + "flexVolume": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", "azureFile": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", "vsphereVolume": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + "quobyte": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", } func (PersistentVolumeSource) SwaggerDoc() map[string]string { @@ -1115,10 +1147,10 @@ func (PersistentVolumeSource) SwaggerDoc() map[string]string { var map_PersistentVolumeSpec = map[string]string{ "": "PersistentVolumeSpec is the specification of a persistent volume.", - "capacity": "A description of the persistent volume's resources and capacity. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#capacity", - "accessModes": "AccessModes contains all ways the volume can be mounted. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#access-modes", - "claimRef": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#binding", - "persistentVolumeReclaimPolicy": "What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recyling must be supported by the volume plugin underlying this persistent volume. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#recycling-policy", + "capacity": "A description of the persistent volume's resources and capacity. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#capacity", + "accessModes": "AccessModes contains all ways the volume can be mounted. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#access-modes", + "claimRef": "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#binding", + "persistentVolumeReclaimPolicy": "What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#recycling-policy", } func (PersistentVolumeSpec) SwaggerDoc() map[string]string { @@ -1127,7 +1159,7 @@ func (PersistentVolumeSpec) SwaggerDoc() map[string]string { var map_PersistentVolumeStatus = map[string]string{ "": "PersistentVolumeStatus is the current status of a persistent volume.", - "phase": "Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#phase", + "phase": "Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#phase", "message": "A human-readable message indicating details about why the volume is in this state.", "reason": "Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", } @@ -1138,9 +1170,9 @@ func (PersistentVolumeStatus) SwaggerDoc() map[string]string { var map_Pod = map[string]string{ "": "Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of the pod. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the pod. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (Pod) SwaggerDoc() map[string]string { @@ -1193,8 +1225,8 @@ func (PodAttachOptions) SwaggerDoc() map[string]string { var map_PodCondition = map[string]string{ "": "PodCondition contains details for the current condition of this pod.", - "type": "Type is the type of the condition. Currently only Ready. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions", - "status": "Status is the status of the condition. Can be True, False, Unknown. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions", + "type": "Type is the type of the condition. Currently only Ready. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions", + "status": "Status is the status of the condition. Can be True, False, Unknown. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions", "lastProbeTime": "Last time we probed the condition.", "lastTransitionTime": "Last time the condition transitioned from one status to another.", "reason": "Unique, one-word, CamelCase reason for the condition's last transition.", @@ -1221,8 +1253,8 @@ func (PodExecOptions) SwaggerDoc() map[string]string { var map_PodList = map[string]string{ "": "PodList is a list of Pods.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "List of pods. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pods.md", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of pods. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pods.md", } func (PodList) SwaggerDoc() map[string]string { @@ -1267,24 +1299,32 @@ func (PodSecurityContext) SwaggerDoc() map[string]string { return map_PodSecurityContext } +var map_PodSignature = map[string]string{ + "": "Describes the class of pods that should avoid this node. Exactly one field should be set.", + "podController": "Reference to controller whose pods should avoid this node.", +} + +func (PodSignature) SwaggerDoc() map[string]string { + return map_PodSignature +} + var map_PodSpec = map[string]string{ "": "PodSpec is a description of a pod.", - "volumes": "List of volumes that can be mounted by containers belonging to the pod. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md", - "containers": "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/containers.md", - "restartPolicy": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#restartpolicy", + "volumes": "List of volumes that can be mounted by containers belonging to the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md", + "containers": "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/containers.md", + "restartPolicy": "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#restartpolicy", "terminationGracePeriodSeconds": "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", "activeDeadlineSeconds": "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.", "dnsPolicy": "Set DNS policy for containers within the pod. One of 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\".", - "nodeSelector": "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: http://releases.k8s.io/release-1.3/docs/user-guide/node-selection/README.md", - "host": "A request to schedule this pod onto a specific node Deprecated: Use nodeName instead.", - "serviceAccountName": "ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: http://releases.k8s.io/release-1.3/docs/design/service_accounts.md", + "nodeSelector": "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: http://releases.k8s.io/release-1.4/docs/user-guide/node-selection/README.md", + "serviceAccountName": "ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md", "serviceAccount": "DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.", "nodeName": "NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.", "hostNetwork": "Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.", "hostPID": "Use the host's pid namespace. Optional: Default to false.", "hostIPC": "Use the host's ipc namespace. Optional: Default to false.", "securityContext": "SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.", - "imagePullSecrets": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: http://releases.k8s.io/release-1.3/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod", + "imagePullSecrets": "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: http://releases.k8s.io/release-1.4/docs/user-guide/images.md#specifying-imagepullsecrets-on-a-pod", "hostname": "Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.", "subdomain": "If specified, the fully qualified Pod hostname will be \"...svc.\". If not specified, the pod will not have a domainname at all.", } @@ -1295,14 +1335,14 @@ func (PodSpec) SwaggerDoc() map[string]string { var map_PodStatus = map[string]string{ "": "PodStatus represents information about the status of a pod. Status may trail the actual state of a system.", - "phase": "Current condition of the pod. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-phase", - "conditions": "Current service state of pod. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#pod-conditions", + "phase": "Current condition of the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-phase", + "conditions": "Current service state of pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#pod-conditions", "message": "A human readable message indicating details about why the pod is in this condition.", "reason": "A brief CamelCase message indicating details about why the pod is in this state. e.g. 'OutOfDisk'", "hostIP": "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", "podIP": "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", "startTime": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", - "containerStatuses": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-statuses", + "containerStatuses": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-statuses", } func (PodStatus) SwaggerDoc() map[string]string { @@ -1311,8 +1351,8 @@ func (PodStatus) SwaggerDoc() map[string]string { var map_PodStatusResult = map[string]string{ "": "PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "status": "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (PodStatusResult) SwaggerDoc() map[string]string { @@ -1321,8 +1361,8 @@ func (PodStatusResult) SwaggerDoc() map[string]string { var map_PodTemplate = map[string]string{ "": "PodTemplate describes a template for creating copies of a predefined pod.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "template": "Template defines the pods that will be created from this pod template. http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "template": "Template defines the pods that will be created from this pod template. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (PodTemplate) SwaggerDoc() map[string]string { @@ -1331,7 +1371,7 @@ func (PodTemplate) SwaggerDoc() map[string]string { var map_PodTemplateList = map[string]string{ "": "PodTemplateList is a list of PodTemplates.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", "items": "List of pod templates", } @@ -1341,8 +1381,8 @@ func (PodTemplateList) SwaggerDoc() map[string]string { var map_PodTemplateSpec = map[string]string{ "": "PodTemplateSpec describes the data a pod should have when created from a template", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of the pod. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the pod. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (PodTemplateSpec) SwaggerDoc() map[string]string { @@ -1358,6 +1398,18 @@ func (Preconditions) SwaggerDoc() map[string]string { return map_Preconditions } +var map_PreferAvoidPodsEntry = map[string]string{ + "": "Describes a class of pods that should avoid this node.", + "podSignature": "The class of pods.", + "evictionTime": "Time at which this entry was added to the list.", + "reason": "(brief) reason why this entry was added to the list.", + "message": "Human readable message indicating why this entry was added to the list.", +} + +func (PreferAvoidPodsEntry) SwaggerDoc() map[string]string { + return map_PreferAvoidPodsEntry +} + var map_PreferredSchedulingTerm = map[string]string{ "": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", "weight": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", @@ -1370,8 +1422,8 @@ func (PreferredSchedulingTerm) SwaggerDoc() map[string]string { var map_Probe = map[string]string{ "": "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", - "initialDelaySeconds": "Number of seconds after the container has started before liveness probes are initiated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes", - "timeoutSeconds": "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: http://releases.k8s.io/release-1.3/docs/user-guide/pod-states.md#container-probes", + "initialDelaySeconds": "Number of seconds after the container has started before liveness probes are initiated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes", + "timeoutSeconds": "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: http://releases.k8s.io/release-1.4/docs/user-guide/pod-states.md#container-probes", "periodSeconds": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", "successThreshold": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", "failureThreshold": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", @@ -1381,16 +1433,29 @@ func (Probe) SwaggerDoc() map[string]string { return map_Probe } +var map_QuobyteVolumeSource = map[string]string{ + "": "Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.", + "registry": "Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes", + "volume": "Volume is a string that references an already created Quobyte volume by name.", + "readOnly": "ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.", + "user": "User to map volume access to Defaults to serivceaccount user", + "group": "Group to map volume access to Default is no group", +} + +func (QuobyteVolumeSource) SwaggerDoc() map[string]string { + return map_QuobyteVolumeSource +} + var map_RBDVolumeSource = map[string]string{ "": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", - "monitors": "A collection of Ceph monitors. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it", - "image": "The rados image name. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it", - "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#rbd", - "pool": "The rados pool name. Default is rbd. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it.", - "user": "The rados user name. Default is admin. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it", - "keyring": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it", - "secretRef": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it", - "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md#how-to-use-it", + "monitors": "A collection of Ceph monitors. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "image": "The rados image name. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#rbd", + "pool": "The rados pool name. Default is rbd. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it.", + "user": "The rados user name. Default is admin. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "keyring": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "secretRef": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", + "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md#how-to-use-it", } func (RBDVolumeSource) SwaggerDoc() map[string]string { @@ -1399,7 +1464,7 @@ func (RBDVolumeSource) SwaggerDoc() map[string]string { var map_RangeAllocation = map[string]string{ "": "RangeAllocation is not a public type.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "range": "Range is string that identifies the range represented by 'data'.", "data": "Data is a bit array containing all allocated addresses in the previous segment.", } @@ -1410,9 +1475,9 @@ func (RangeAllocation) SwaggerDoc() map[string]string { var map_ReplicationController = map[string]string{ "": "ReplicationController represents the configuration of a replication controller.", - "metadata": "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the specification of the desired behavior of the replication controller. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the specification of the desired behavior of the replication controller. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (ReplicationController) SwaggerDoc() map[string]string { @@ -1421,8 +1486,8 @@ func (ReplicationController) SwaggerDoc() map[string]string { var map_ReplicationControllerList = map[string]string{ "": "ReplicationControllerList is a collection of replication controllers.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "List of replication controllers. More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of replication controllers. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md", } func (ReplicationControllerList) SwaggerDoc() map[string]string { @@ -1431,9 +1496,9 @@ func (ReplicationControllerList) SwaggerDoc() map[string]string { var map_ReplicationControllerSpec = map[string]string{ "": "ReplicationControllerSpec is the specification of a replication controller.", - "replicas": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller", - "selector": "Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", - "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template", + "replicas": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller", + "selector": "Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", + "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template", } func (ReplicationControllerSpec) SwaggerDoc() map[string]string { @@ -1442,8 +1507,9 @@ func (ReplicationControllerSpec) SwaggerDoc() map[string]string { var map_ReplicationControllerStatus = map[string]string{ "": "ReplicationControllerStatus represents the current status of a replication controller.", - "replicas": "Replicas is the most recently oberved number of replicas. More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller", + "replicas": "Replicas is the most recently oberved number of replicas. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller", "fullyLabeledReplicas": "The number of pods that have labels matching the labels of the pod template of the replication controller.", + "readyReplicas": "The number of ready replicas for this replication controller.", "observedGeneration": "ObservedGeneration reflects the generation of the most recently observed replication controller.", } @@ -1464,9 +1530,9 @@ func (ResourceFieldSelector) SwaggerDoc() map[string]string { var map_ResourceQuota = map[string]string{ "": "ResourceQuota sets aggregate quota restrictions enforced per namespace", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the desired quota. http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status defines the actual enforced quota and its current usage. http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the desired quota. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status defines the actual enforced quota and its current usage. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (ResourceQuota) SwaggerDoc() map[string]string { @@ -1475,8 +1541,8 @@ func (ResourceQuota) SwaggerDoc() map[string]string { var map_ResourceQuotaList = map[string]string{ "": "ResourceQuotaList is a list of ResourceQuota items.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "Items is a list of ResourceQuota objects. More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "Items is a list of ResourceQuota objects. More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", } func (ResourceQuotaList) SwaggerDoc() map[string]string { @@ -1485,7 +1551,7 @@ func (ResourceQuotaList) SwaggerDoc() map[string]string { var map_ResourceQuotaSpec = map[string]string{ "": "ResourceQuotaSpec defines the desired hard limits to enforce for Quota.", - "hard": "Hard is the set of desired hard limits for each named resource. More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", + "hard": "Hard is the set of desired hard limits for each named resource. More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "scopes": "A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.", } @@ -1495,7 +1561,7 @@ func (ResourceQuotaSpec) SwaggerDoc() map[string]string { var map_ResourceQuotaStatus = map[string]string{ "": "ResourceQuotaStatus defines the enforced hard limits and observed use.", - "hard": "Hard is the set of enforced hard limits for each named resource. More info: http://releases.k8s.io/release-1.3/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", + "hard": "Hard is the set of enforced hard limits for each named resource. More info: http://releases.k8s.io/release-1.4/docs/design/admission_control_resource_quota.md#admissioncontrol-plugin-resourcequota", "used": "Used is the current observed total usage of the resource in the namespace.", } @@ -1505,8 +1571,8 @@ func (ResourceQuotaStatus) SwaggerDoc() map[string]string { var map_ResourceRequirements = map[string]string{ "": "ResourceRequirements describes the compute resource requirements.", - "limits": "Limits describes the maximum amount of compute resources allowed. More info: http://releases.k8s.io/release-1.3/docs/design/resources.md#resource-specifications", - "requests": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: http://releases.k8s.io/release-1.3/docs/design/resources.md#resource-specifications", + "limits": "Limits describes the maximum amount of compute resources allowed. More info: http://kubernetes.io/docs/user-guide/compute-resources/", + "requests": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: http://kubernetes.io/docs/user-guide/compute-resources/", } func (ResourceRequirements) SwaggerDoc() map[string]string { @@ -1548,10 +1614,11 @@ func (SELinuxOptions) SwaggerDoc() map[string]string { } var map_Secret = map[string]string{ - "": "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "data": "Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", - "type": "Used to facilitate programmatic handling of secret data.", + "": "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "data": "Data contains the secret data. Each key must be a valid DNS_SUBDOMAIN or leading dot followed by valid DNS_SUBDOMAIN. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", + "stringData": "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", + "type": "Used to facilitate programmatic handling of secret data.", } func (Secret) SwaggerDoc() map[string]string { @@ -1569,8 +1636,8 @@ func (SecretKeySelector) SwaggerDoc() map[string]string { var map_SecretList = map[string]string{ "": "SecretList is a list of Secret.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "Items is a list of secret objects. More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "Items is a list of secret objects. More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md", } func (SecretList) SwaggerDoc() map[string]string { @@ -1578,9 +1645,10 @@ func (SecretList) SwaggerDoc() map[string]string { } var map_SecretVolumeSource = map[string]string{ - "": "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", - "secretName": "Name of the secret in the pod's namespace to use. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#secrets", - "items": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "": "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", + "secretName": "Name of the secret in the pod's namespace to use. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets", + "items": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error. Paths must be relative and may not contain the '..' path or start with '..'.", + "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (SecretVolumeSource) SwaggerDoc() map[string]string { @@ -1603,6 +1671,7 @@ func (SecurityContext) SwaggerDoc() map[string]string { var map_SecurityContextConstraints = map[string]string{ "": "SecurityContextConstraints governs the ability to make requests that affect the SecurityContext that will be applied to a container.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata", "priority": "Priority influences the sort order of SCCs when evaluating which SCCs to try first for a given pod request based on access in the Users and Groups fields. The higher the int, the higher priority. If scores for multiple SCCs are equal they will be sorted by name.", "allowPrivilegedContainer": "AllowPrivilegedContainer determines if a container can request to be run as privileged.", "defaultAddCapabilities": "DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.", @@ -1621,6 +1690,7 @@ var map_SecurityContextConstraints = map[string]string{ "readOnlyRootFilesystem": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the SCC should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", "users": "The users who have permissions to use this security context constraints", "groups": "The groups that have permission to use this security context constraints", + "seccompProfiles": "SeccompProfiles lists the allowed profiles that may be set for the pod or container's seccomp annotations. An unset (nil) or empty value means that no profiles may be specifid by the pod or container.\tThe wildcard '*' may be used to allow all profiles. When used to generate a value for a pod the first non-wildcard profile will be used as the default.", } func (SecurityContextConstraints) SwaggerDoc() map[string]string { @@ -1628,7 +1698,9 @@ func (SecurityContextConstraints) SwaggerDoc() map[string]string { } var map_SecurityContextConstraintsList = map[string]string{ - "": "SecurityContextConstraintsList is a list of SecurityContextConstraints objects", + "": "SecurityContextConstraintsList is a list of SecurityContextConstraints objects", + "metadata": "More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata", + "items": "List of security context constraints.", } func (SecurityContextConstraintsList) SwaggerDoc() map[string]string { @@ -1646,9 +1718,9 @@ func (SerializedReference) SwaggerDoc() map[string]string { var map_Service = map[string]string{ "": "Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the behavior of a service. http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Most recently observed status of the service. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the behavior of a service. http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Most recently observed status of the service. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (Service) SwaggerDoc() map[string]string { @@ -1657,9 +1729,9 @@ func (Service) SwaggerDoc() map[string]string { var map_ServiceAccount = map[string]string{ "": "ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "secrets": "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md", - "imagePullSecrets": "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: http://releases.k8s.io/release-1.3/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "secrets": "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md", + "imagePullSecrets": "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: http://releases.k8s.io/release-1.4/docs/user-guide/secrets.md#manually-specifying-an-imagepullsecret", } func (ServiceAccount) SwaggerDoc() map[string]string { @@ -1668,8 +1740,8 @@ func (ServiceAccount) SwaggerDoc() map[string]string { var map_ServiceAccountList = map[string]string{ "": "ServiceAccountList is a list of ServiceAccount objects", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "List of ServiceAccounts. More info: http://releases.k8s.io/release-1.3/docs/design/service_accounts.md#service-accounts", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of ServiceAccounts. More info: http://releases.k8s.io/release-1.4/docs/design/service_accounts.md#service-accounts", } func (ServiceAccountList) SwaggerDoc() map[string]string { @@ -1678,7 +1750,7 @@ func (ServiceAccountList) SwaggerDoc() map[string]string { var map_ServiceList = map[string]string{ "": "ServiceList holds a list of services.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", "items": "List of services", } @@ -1691,8 +1763,8 @@ var map_ServicePort = map[string]string{ "name": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.", "protocol": "The IP protocol for this port. Supports \"TCP\" and \"UDP\". Default is TCP.", "port": "The port that will be exposed by this service.", - "targetPort": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#defining-a-service", - "nodePort": "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#type--nodeport", + "targetPort": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#defining-a-service", + "nodePort": "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#type--nodeport", } func (ServicePort) SwaggerDoc() map[string]string { @@ -1710,16 +1782,16 @@ func (ServiceProxyOptions) SwaggerDoc() map[string]string { var map_ServiceSpec = map[string]string{ "": "ServiceSpec describes the attributes that a user creates on a service.", - "ports": "The list of ports that are exposed by this service. More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies", - "selector": "This service will route traffic to pods having labels matching this selector. Label keys and values that must match in order to receive traffic for this service. If empty, all pods are selected, if not specified, endpoints must be manually specified. More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#overview", - "portalIP": "The IP Address of the service. Deprecated: Use clusterIP instead.", - "clusterIP": "ClusterIP is usually assigned by the master and is the IP address of the service. If specified, it will be allocated to the service if it is unused or else creation of the service will fail. Valid values are None, empty string (\"\"), or a valid IP address. 'None' can be specified for a headless service when proxying is not required. Cannot be updated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies", - "type": "Type of exposed service. Must be ClusterIP, NodePort, or LoadBalancer. Defaults to ClusterIP. More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#external-services", + "ports": "The list of ports that are exposed by this service. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies", + "selector": "Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview", + "clusterIP": "clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies", + "type": "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#overview", "externalIPs": "externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system. A previous form of this functionality exists as the deprecatedPublicIPs field. When using this field, callers should also clear the deprecatedPublicIPs field.", "deprecatedPublicIPs": "deprecatedPublicIPs is deprecated and replaced by the externalIPs field with almost the exact same semantics. This field is retained in the v1 API for compatibility until at least 8/20/2016. It will be removed from any new API revisions. If both deprecatedPublicIPs *and* externalIPs are set, deprecatedPublicIPs is used.", - "sessionAffinity": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: http://releases.k8s.io/release-1.3/docs/user-guide/services.md#virtual-ips-and-service-proxies", + "sessionAffinity": "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: http://releases.k8s.io/release-1.4/docs/user-guide/services.md#virtual-ips-and-service-proxies", "loadBalancerIP": "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.", - "loadBalancerSourceRanges": "If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md", + "loadBalancerSourceRanges": "If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: http://releases.k8s.io/release-1.4/docs/user-guide/services-firewalls.md", + "externalName": "externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid DNS name and requires Type to be ExternalName.", } func (ServiceSpec) SwaggerDoc() map[string]string { @@ -1779,7 +1851,7 @@ func (Toleration) SwaggerDoc() map[string]string { var map_Volume = map[string]string{ "": "Volume represents a named volume in a pod that may be accessed by any container in the pod.", - "name": "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names", + "name": "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", } func (Volume) SwaggerDoc() map[string]string { @@ -1800,19 +1872,19 @@ func (VolumeMount) SwaggerDoc() map[string]string { var map_VolumeSource = map[string]string{ "": "Represents the source of a volume to mount. Only one of its members may be specified.", - "hostPath": "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#hostpath", - "emptyDir": "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#emptydir", - "gcePersistentDisk": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#gcepersistentdisk", - "awsElasticBlockStore": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#awselasticblockstore", + "hostPath": "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#hostpath", + "emptyDir": "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#emptydir", + "gcePersistentDisk": "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#gcepersistentdisk", + "awsElasticBlockStore": "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#awselasticblockstore", "gitRepo": "GitRepo represents a git repository at a particular revision.", - "secret": "Secret represents a secret that should populate this volume. More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#secrets", - "nfs": "NFS represents an NFS mount on the host that shares a pod's lifetime More info: http://releases.k8s.io/release-1.3/docs/user-guide/volumes.md#nfs", - "iscsi": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.3/examples/iscsi/README.md", - "glusterfs": "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.3/examples/glusterfs/README.md", - "persistentVolumeClaim": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: http://releases.k8s.io/release-1.3/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", - "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.3/examples/rbd/README.md", - "flexVolume": "FlexVolume represents a generic volume resource that is provisioned/attached using a exec based plugin. This is an alpha feature and may change in future.", - "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: http://releases.k8s.io/release-1.3/examples/mysql-cinder-pd/README.md", + "secret": "Secret represents a secret that should populate this volume. More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#secrets", + "nfs": "NFS represents an NFS mount on the host that shares a pod's lifetime More info: http://releases.k8s.io/release-1.4/docs/user-guide/volumes.md#nfs", + "iscsi": "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: http://releases.k8s.io/release-1.4/examples/volumes/iscsi/README.md", + "glusterfs": "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.4/examples/volumes/glusterfs/README.md", + "persistentVolumeClaim": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: http://releases.k8s.io/release-1.4/docs/user-guide/persistent-volumes.md#persistentvolumeclaims", + "rbd": "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: http://releases.k8s.io/release-1.4/examples/volumes/rbd/README.md", + "flexVolume": "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.", + "cinder": "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: http://releases.k8s.io/release-1.4/examples/mysql-cinder-pd/README.md", "cephfs": "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", "flocker": "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", "downwardAPI": "DownwardAPI represents downward API about the pod that should populate this volume", @@ -1820,6 +1892,8 @@ var map_VolumeSource = map[string]string{ "azureFile": "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", "configMap": "ConfigMap represents a configMap that should populate this volume", "vsphereVolume": "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", + "quobyte": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", + "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", "metadata": "Metadata represents metadata about the pod that should populate this volume Deprecated: Use downwardAPI instead.", } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go new file mode 100644 index 00000000..d37ce656 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go @@ -0,0 +1,7582 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by conversion-gen. Do not edit it manually! + +package v1 + +import ( + api "k8s.io/kubernetes/pkg/api" + resource "k8s.io/kubernetes/pkg/api/resource" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + types "k8s.io/kubernetes/pkg/types" +) + +func init() { + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource, + Convert_api_AWSElasticBlockStoreVolumeSource_To_v1_AWSElasticBlockStoreVolumeSource, + Convert_v1_Affinity_To_api_Affinity, + Convert_api_Affinity_To_v1_Affinity, + Convert_v1_AttachedVolume_To_api_AttachedVolume, + Convert_api_AttachedVolume_To_v1_AttachedVolume, + Convert_v1_AvoidPods_To_api_AvoidPods, + Convert_api_AvoidPods_To_v1_AvoidPods, + Convert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource, + Convert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource, + Convert_v1_AzureFileVolumeSource_To_api_AzureFileVolumeSource, + Convert_api_AzureFileVolumeSource_To_v1_AzureFileVolumeSource, + Convert_v1_Binding_To_api_Binding, + Convert_api_Binding_To_v1_Binding, + Convert_v1_Capabilities_To_api_Capabilities, + Convert_api_Capabilities_To_v1_Capabilities, + Convert_v1_CephFSVolumeSource_To_api_CephFSVolumeSource, + Convert_api_CephFSVolumeSource_To_v1_CephFSVolumeSource, + Convert_v1_CinderVolumeSource_To_api_CinderVolumeSource, + Convert_api_CinderVolumeSource_To_v1_CinderVolumeSource, + Convert_v1_ComponentCondition_To_api_ComponentCondition, + Convert_api_ComponentCondition_To_v1_ComponentCondition, + Convert_v1_ComponentStatus_To_api_ComponentStatus, + Convert_api_ComponentStatus_To_v1_ComponentStatus, + Convert_v1_ComponentStatusList_To_api_ComponentStatusList, + Convert_api_ComponentStatusList_To_v1_ComponentStatusList, + Convert_v1_ConfigMap_To_api_ConfigMap, + Convert_api_ConfigMap_To_v1_ConfigMap, + Convert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector, + Convert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector, + Convert_v1_ConfigMapList_To_api_ConfigMapList, + Convert_api_ConfigMapList_To_v1_ConfigMapList, + Convert_v1_ConfigMapVolumeSource_To_api_ConfigMapVolumeSource, + Convert_api_ConfigMapVolumeSource_To_v1_ConfigMapVolumeSource, + Convert_v1_Container_To_api_Container, + Convert_api_Container_To_v1_Container, + Convert_v1_ContainerImage_To_api_ContainerImage, + Convert_api_ContainerImage_To_v1_ContainerImage, + Convert_v1_ContainerPort_To_api_ContainerPort, + Convert_api_ContainerPort_To_v1_ContainerPort, + Convert_v1_ContainerState_To_api_ContainerState, + Convert_api_ContainerState_To_v1_ContainerState, + Convert_v1_ContainerStateRunning_To_api_ContainerStateRunning, + Convert_api_ContainerStateRunning_To_v1_ContainerStateRunning, + Convert_v1_ContainerStateTerminated_To_api_ContainerStateTerminated, + Convert_api_ContainerStateTerminated_To_v1_ContainerStateTerminated, + Convert_v1_ContainerStateWaiting_To_api_ContainerStateWaiting, + Convert_api_ContainerStateWaiting_To_v1_ContainerStateWaiting, + Convert_v1_ContainerStatus_To_api_ContainerStatus, + Convert_api_ContainerStatus_To_v1_ContainerStatus, + Convert_v1_DaemonEndpoint_To_api_DaemonEndpoint, + Convert_api_DaemonEndpoint_To_v1_DaemonEndpoint, + Convert_v1_DeleteOptions_To_api_DeleteOptions, + Convert_api_DeleteOptions_To_v1_DeleteOptions, + Convert_v1_DeprecatedDownwardAPIVolumeFile_To_api_DeprecatedDownwardAPIVolumeFile, + Convert_api_DeprecatedDownwardAPIVolumeFile_To_v1_DeprecatedDownwardAPIVolumeFile, + Convert_v1_DeprecatedDownwardAPIVolumeSource_To_api_DeprecatedDownwardAPIVolumeSource, + Convert_api_DeprecatedDownwardAPIVolumeSource_To_v1_DeprecatedDownwardAPIVolumeSource, + Convert_v1_DownwardAPIVolumeFile_To_api_DownwardAPIVolumeFile, + Convert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile, + Convert_v1_DownwardAPIVolumeSource_To_api_DownwardAPIVolumeSource, + Convert_api_DownwardAPIVolumeSource_To_v1_DownwardAPIVolumeSource, + Convert_v1_EmptyDirVolumeSource_To_api_EmptyDirVolumeSource, + Convert_api_EmptyDirVolumeSource_To_v1_EmptyDirVolumeSource, + Convert_v1_EndpointAddress_To_api_EndpointAddress, + Convert_api_EndpointAddress_To_v1_EndpointAddress, + Convert_v1_EndpointPort_To_api_EndpointPort, + Convert_api_EndpointPort_To_v1_EndpointPort, + Convert_v1_EndpointSubset_To_api_EndpointSubset, + Convert_api_EndpointSubset_To_v1_EndpointSubset, + Convert_v1_Endpoints_To_api_Endpoints, + Convert_api_Endpoints_To_v1_Endpoints, + Convert_v1_EndpointsList_To_api_EndpointsList, + Convert_api_EndpointsList_To_v1_EndpointsList, + Convert_v1_EnvVar_To_api_EnvVar, + Convert_api_EnvVar_To_v1_EnvVar, + Convert_v1_EnvVarSource_To_api_EnvVarSource, + Convert_api_EnvVarSource_To_v1_EnvVarSource, + Convert_v1_Event_To_api_Event, + Convert_api_Event_To_v1_Event, + Convert_v1_EventList_To_api_EventList, + Convert_api_EventList_To_v1_EventList, + Convert_v1_EventSource_To_api_EventSource, + Convert_api_EventSource_To_v1_EventSource, + Convert_v1_ExecAction_To_api_ExecAction, + Convert_api_ExecAction_To_v1_ExecAction, + Convert_v1_ExportOptions_To_api_ExportOptions, + Convert_api_ExportOptions_To_v1_ExportOptions, + Convert_v1_FCVolumeSource_To_api_FCVolumeSource, + Convert_api_FCVolumeSource_To_v1_FCVolumeSource, + Convert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions, + Convert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions, + Convert_v1_FlexVolumeSource_To_api_FlexVolumeSource, + Convert_api_FlexVolumeSource_To_v1_FlexVolumeSource, + Convert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource, + Convert_api_FlockerVolumeSource_To_v1_FlockerVolumeSource, + Convert_v1_GCEPersistentDiskVolumeSource_To_api_GCEPersistentDiskVolumeSource, + Convert_api_GCEPersistentDiskVolumeSource_To_v1_GCEPersistentDiskVolumeSource, + Convert_v1_GitRepoVolumeSource_To_api_GitRepoVolumeSource, + Convert_api_GitRepoVolumeSource_To_v1_GitRepoVolumeSource, + Convert_v1_GlusterfsVolumeSource_To_api_GlusterfsVolumeSource, + Convert_api_GlusterfsVolumeSource_To_v1_GlusterfsVolumeSource, + Convert_v1_HTTPGetAction_To_api_HTTPGetAction, + Convert_api_HTTPGetAction_To_v1_HTTPGetAction, + Convert_v1_HTTPHeader_To_api_HTTPHeader, + Convert_api_HTTPHeader_To_v1_HTTPHeader, + Convert_v1_Handler_To_api_Handler, + Convert_api_Handler_To_v1_Handler, + Convert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource, + Convert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource, + Convert_v1_IDRange_To_api_IDRange, + Convert_api_IDRange_To_v1_IDRange, + Convert_v1_ISCSIVolumeSource_To_api_ISCSIVolumeSource, + Convert_api_ISCSIVolumeSource_To_v1_ISCSIVolumeSource, + Convert_v1_KeyToPath_To_api_KeyToPath, + Convert_api_KeyToPath_To_v1_KeyToPath, + Convert_v1_Lifecycle_To_api_Lifecycle, + Convert_api_Lifecycle_To_v1_Lifecycle, + Convert_v1_LimitRange_To_api_LimitRange, + Convert_api_LimitRange_To_v1_LimitRange, + Convert_v1_LimitRangeItem_To_api_LimitRangeItem, + Convert_api_LimitRangeItem_To_v1_LimitRangeItem, + Convert_v1_LimitRangeList_To_api_LimitRangeList, + Convert_api_LimitRangeList_To_v1_LimitRangeList, + Convert_v1_LimitRangeSpec_To_api_LimitRangeSpec, + Convert_api_LimitRangeSpec_To_v1_LimitRangeSpec, + Convert_v1_List_To_api_List, + Convert_api_List_To_v1_List, + Convert_v1_ListOptions_To_api_ListOptions, + Convert_api_ListOptions_To_v1_ListOptions, + Convert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress, + Convert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress, + Convert_v1_LoadBalancerStatus_To_api_LoadBalancerStatus, + Convert_api_LoadBalancerStatus_To_v1_LoadBalancerStatus, + Convert_v1_LocalObjectReference_To_api_LocalObjectReference, + Convert_api_LocalObjectReference_To_v1_LocalObjectReference, + Convert_v1_NFSVolumeSource_To_api_NFSVolumeSource, + Convert_api_NFSVolumeSource_To_v1_NFSVolumeSource, + Convert_v1_Namespace_To_api_Namespace, + Convert_api_Namespace_To_v1_Namespace, + Convert_v1_NamespaceList_To_api_NamespaceList, + Convert_api_NamespaceList_To_v1_NamespaceList, + Convert_v1_NamespaceSpec_To_api_NamespaceSpec, + Convert_api_NamespaceSpec_To_v1_NamespaceSpec, + Convert_v1_NamespaceStatus_To_api_NamespaceStatus, + Convert_api_NamespaceStatus_To_v1_NamespaceStatus, + Convert_v1_Node_To_api_Node, + Convert_api_Node_To_v1_Node, + Convert_v1_NodeAddress_To_api_NodeAddress, + Convert_api_NodeAddress_To_v1_NodeAddress, + Convert_v1_NodeAffinity_To_api_NodeAffinity, + Convert_api_NodeAffinity_To_v1_NodeAffinity, + Convert_v1_NodeCondition_To_api_NodeCondition, + Convert_api_NodeCondition_To_v1_NodeCondition, + Convert_v1_NodeDaemonEndpoints_To_api_NodeDaemonEndpoints, + Convert_api_NodeDaemonEndpoints_To_v1_NodeDaemonEndpoints, + Convert_v1_NodeList_To_api_NodeList, + Convert_api_NodeList_To_v1_NodeList, + Convert_v1_NodeProxyOptions_To_api_NodeProxyOptions, + Convert_api_NodeProxyOptions_To_v1_NodeProxyOptions, + Convert_v1_NodeSelector_To_api_NodeSelector, + Convert_api_NodeSelector_To_v1_NodeSelector, + Convert_v1_NodeSelectorRequirement_To_api_NodeSelectorRequirement, + Convert_api_NodeSelectorRequirement_To_v1_NodeSelectorRequirement, + Convert_v1_NodeSelectorTerm_To_api_NodeSelectorTerm, + Convert_api_NodeSelectorTerm_To_v1_NodeSelectorTerm, + Convert_v1_NodeSpec_To_api_NodeSpec, + Convert_api_NodeSpec_To_v1_NodeSpec, + Convert_v1_NodeStatus_To_api_NodeStatus, + Convert_api_NodeStatus_To_v1_NodeStatus, + Convert_v1_NodeSystemInfo_To_api_NodeSystemInfo, + Convert_api_NodeSystemInfo_To_v1_NodeSystemInfo, + Convert_v1_ObjectFieldSelector_To_api_ObjectFieldSelector, + Convert_api_ObjectFieldSelector_To_v1_ObjectFieldSelector, + Convert_v1_ObjectMeta_To_api_ObjectMeta, + Convert_api_ObjectMeta_To_v1_ObjectMeta, + Convert_v1_ObjectReference_To_api_ObjectReference, + Convert_api_ObjectReference_To_v1_ObjectReference, + Convert_v1_OwnerReference_To_api_OwnerReference, + Convert_api_OwnerReference_To_v1_OwnerReference, + Convert_v1_PersistentVolume_To_api_PersistentVolume, + Convert_api_PersistentVolume_To_v1_PersistentVolume, + Convert_v1_PersistentVolumeClaim_To_api_PersistentVolumeClaim, + Convert_api_PersistentVolumeClaim_To_v1_PersistentVolumeClaim, + Convert_v1_PersistentVolumeClaimList_To_api_PersistentVolumeClaimList, + Convert_api_PersistentVolumeClaimList_To_v1_PersistentVolumeClaimList, + Convert_v1_PersistentVolumeClaimSpec_To_api_PersistentVolumeClaimSpec, + Convert_api_PersistentVolumeClaimSpec_To_v1_PersistentVolumeClaimSpec, + Convert_v1_PersistentVolumeClaimStatus_To_api_PersistentVolumeClaimStatus, + Convert_api_PersistentVolumeClaimStatus_To_v1_PersistentVolumeClaimStatus, + Convert_v1_PersistentVolumeClaimVolumeSource_To_api_PersistentVolumeClaimVolumeSource, + Convert_api_PersistentVolumeClaimVolumeSource_To_v1_PersistentVolumeClaimVolumeSource, + Convert_v1_PersistentVolumeList_To_api_PersistentVolumeList, + Convert_api_PersistentVolumeList_To_v1_PersistentVolumeList, + Convert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource, + Convert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource, + Convert_v1_PersistentVolumeSpec_To_api_PersistentVolumeSpec, + Convert_api_PersistentVolumeSpec_To_v1_PersistentVolumeSpec, + Convert_v1_PersistentVolumeStatus_To_api_PersistentVolumeStatus, + Convert_api_PersistentVolumeStatus_To_v1_PersistentVolumeStatus, + Convert_v1_Pod_To_api_Pod, + Convert_api_Pod_To_v1_Pod, + Convert_v1_PodAffinity_To_api_PodAffinity, + Convert_api_PodAffinity_To_v1_PodAffinity, + Convert_v1_PodAffinityTerm_To_api_PodAffinityTerm, + Convert_api_PodAffinityTerm_To_v1_PodAffinityTerm, + Convert_v1_PodAntiAffinity_To_api_PodAntiAffinity, + Convert_api_PodAntiAffinity_To_v1_PodAntiAffinity, + Convert_v1_PodAttachOptions_To_api_PodAttachOptions, + Convert_api_PodAttachOptions_To_v1_PodAttachOptions, + Convert_v1_PodCondition_To_api_PodCondition, + Convert_api_PodCondition_To_v1_PodCondition, + Convert_v1_PodExecOptions_To_api_PodExecOptions, + Convert_api_PodExecOptions_To_v1_PodExecOptions, + Convert_v1_PodList_To_api_PodList, + Convert_api_PodList_To_v1_PodList, + Convert_v1_PodLogOptions_To_api_PodLogOptions, + Convert_api_PodLogOptions_To_v1_PodLogOptions, + Convert_v1_PodProxyOptions_To_api_PodProxyOptions, + Convert_api_PodProxyOptions_To_v1_PodProxyOptions, + Convert_v1_PodSecurityContext_To_api_PodSecurityContext, + Convert_api_PodSecurityContext_To_v1_PodSecurityContext, + Convert_v1_PodSignature_To_api_PodSignature, + Convert_api_PodSignature_To_v1_PodSignature, + Convert_v1_PodSpec_To_api_PodSpec, + Convert_api_PodSpec_To_v1_PodSpec, + Convert_v1_PodStatus_To_api_PodStatus, + Convert_api_PodStatus_To_v1_PodStatus, + Convert_v1_PodStatusResult_To_api_PodStatusResult, + Convert_api_PodStatusResult_To_v1_PodStatusResult, + Convert_v1_PodTemplate_To_api_PodTemplate, + Convert_api_PodTemplate_To_v1_PodTemplate, + Convert_v1_PodTemplateList_To_api_PodTemplateList, + Convert_api_PodTemplateList_To_v1_PodTemplateList, + Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec, + Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec, + Convert_v1_Preconditions_To_api_Preconditions, + Convert_api_Preconditions_To_v1_Preconditions, + Convert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry, + Convert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry, + Convert_v1_PreferredSchedulingTerm_To_api_PreferredSchedulingTerm, + Convert_api_PreferredSchedulingTerm_To_v1_PreferredSchedulingTerm, + Convert_v1_Probe_To_api_Probe, + Convert_api_Probe_To_v1_Probe, + Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource, + Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource, + Convert_v1_RBDVolumeSource_To_api_RBDVolumeSource, + Convert_api_RBDVolumeSource_To_v1_RBDVolumeSource, + Convert_v1_RangeAllocation_To_api_RangeAllocation, + Convert_api_RangeAllocation_To_v1_RangeAllocation, + Convert_v1_ReplicationController_To_api_ReplicationController, + Convert_api_ReplicationController_To_v1_ReplicationController, + Convert_v1_ReplicationControllerList_To_api_ReplicationControllerList, + Convert_api_ReplicationControllerList_To_v1_ReplicationControllerList, + Convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec, + Convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec, + Convert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus, + Convert_api_ReplicationControllerStatus_To_v1_ReplicationControllerStatus, + Convert_v1_ResourceFieldSelector_To_api_ResourceFieldSelector, + Convert_api_ResourceFieldSelector_To_v1_ResourceFieldSelector, + Convert_v1_ResourceQuota_To_api_ResourceQuota, + Convert_api_ResourceQuota_To_v1_ResourceQuota, + Convert_v1_ResourceQuotaList_To_api_ResourceQuotaList, + Convert_api_ResourceQuotaList_To_v1_ResourceQuotaList, + Convert_v1_ResourceQuotaSpec_To_api_ResourceQuotaSpec, + Convert_api_ResourceQuotaSpec_To_v1_ResourceQuotaSpec, + Convert_v1_ResourceQuotaStatus_To_api_ResourceQuotaStatus, + Convert_api_ResourceQuotaStatus_To_v1_ResourceQuotaStatus, + Convert_v1_ResourceRequirements_To_api_ResourceRequirements, + Convert_api_ResourceRequirements_To_v1_ResourceRequirements, + Convert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions, + Convert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions, + Convert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions, + Convert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions, + Convert_v1_SELinuxOptions_To_api_SELinuxOptions, + Convert_api_SELinuxOptions_To_v1_SELinuxOptions, + Convert_v1_Secret_To_api_Secret, + Convert_api_Secret_To_v1_Secret, + Convert_v1_SecretKeySelector_To_api_SecretKeySelector, + Convert_api_SecretKeySelector_To_v1_SecretKeySelector, + Convert_v1_SecretList_To_api_SecretList, + Convert_api_SecretList_To_v1_SecretList, + Convert_v1_SecretVolumeSource_To_api_SecretVolumeSource, + Convert_api_SecretVolumeSource_To_v1_SecretVolumeSource, + Convert_v1_SecurityContext_To_api_SecurityContext, + Convert_api_SecurityContext_To_v1_SecurityContext, + Convert_v1_SecurityContextConstraints_To_api_SecurityContextConstraints, + Convert_api_SecurityContextConstraints_To_v1_SecurityContextConstraints, + Convert_v1_SecurityContextConstraintsList_To_api_SecurityContextConstraintsList, + Convert_api_SecurityContextConstraintsList_To_v1_SecurityContextConstraintsList, + Convert_v1_SerializedReference_To_api_SerializedReference, + Convert_api_SerializedReference_To_v1_SerializedReference, + Convert_v1_Service_To_api_Service, + Convert_api_Service_To_v1_Service, + Convert_v1_ServiceAccount_To_api_ServiceAccount, + Convert_api_ServiceAccount_To_v1_ServiceAccount, + Convert_v1_ServiceAccountList_To_api_ServiceAccountList, + Convert_api_ServiceAccountList_To_v1_ServiceAccountList, + Convert_v1_ServiceList_To_api_ServiceList, + Convert_api_ServiceList_To_v1_ServiceList, + Convert_v1_ServicePort_To_api_ServicePort, + Convert_api_ServicePort_To_v1_ServicePort, + Convert_v1_ServiceProxyOptions_To_api_ServiceProxyOptions, + Convert_api_ServiceProxyOptions_To_v1_ServiceProxyOptions, + Convert_v1_ServiceSpec_To_api_ServiceSpec, + Convert_api_ServiceSpec_To_v1_ServiceSpec, + Convert_v1_ServiceStatus_To_api_ServiceStatus, + Convert_api_ServiceStatus_To_v1_ServiceStatus, + Convert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions, + Convert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions, + Convert_v1_TCPSocketAction_To_api_TCPSocketAction, + Convert_api_TCPSocketAction_To_v1_TCPSocketAction, + Convert_v1_Taint_To_api_Taint, + Convert_api_Taint_To_v1_Taint, + Convert_v1_Toleration_To_api_Toleration, + Convert_api_Toleration_To_v1_Toleration, + Convert_v1_Volume_To_api_Volume, + Convert_api_Volume_To_v1_Volume, + Convert_v1_VolumeMount_To_api_VolumeMount, + Convert_api_VolumeMount_To_v1_VolumeMount, + Convert_v1_VolumeSource_To_api_VolumeSource, + Convert_api_VolumeSource_To_v1_VolumeSource, + Convert_v1_VsphereVirtualDiskVolumeSource_To_api_VsphereVirtualDiskVolumeSource, + Convert_api_VsphereVirtualDiskVolumeSource_To_v1_VsphereVirtualDiskVolumeSource, + Convert_v1_WeightedPodAffinityTerm_To_api_WeightedPodAffinityTerm, + Convert_api_WeightedPodAffinityTerm_To_v1_WeightedPodAffinityTerm, + ) +} + +func autoConvert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource(in *AWSElasticBlockStoreVolumeSource, out *api.AWSElasticBlockStoreVolumeSource, s conversion.Scope) error { + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource(in *AWSElasticBlockStoreVolumeSource, out *api.AWSElasticBlockStoreVolumeSource, s conversion.Scope) error { + return autoConvert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource(in, out, s) +} + +func autoConvert_api_AWSElasticBlockStoreVolumeSource_To_v1_AWSElasticBlockStoreVolumeSource(in *api.AWSElasticBlockStoreVolumeSource, out *AWSElasticBlockStoreVolumeSource, s conversion.Scope) error { + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_AWSElasticBlockStoreVolumeSource_To_v1_AWSElasticBlockStoreVolumeSource(in *api.AWSElasticBlockStoreVolumeSource, out *AWSElasticBlockStoreVolumeSource, s conversion.Scope) error { + return autoConvert_api_AWSElasticBlockStoreVolumeSource_To_v1_AWSElasticBlockStoreVolumeSource(in, out, s) +} + +func autoConvert_v1_Affinity_To_api_Affinity(in *Affinity, out *api.Affinity, s conversion.Scope) error { + if in.NodeAffinity != nil { + in, out := &in.NodeAffinity, &out.NodeAffinity + *out = new(api.NodeAffinity) + if err := Convert_v1_NodeAffinity_To_api_NodeAffinity(*in, *out, s); err != nil { + return err + } + } else { + out.NodeAffinity = nil + } + if in.PodAffinity != nil { + in, out := &in.PodAffinity, &out.PodAffinity + *out = new(api.PodAffinity) + if err := Convert_v1_PodAffinity_To_api_PodAffinity(*in, *out, s); err != nil { + return err + } + } else { + out.PodAffinity = nil + } + if in.PodAntiAffinity != nil { + in, out := &in.PodAntiAffinity, &out.PodAntiAffinity + *out = new(api.PodAntiAffinity) + if err := Convert_v1_PodAntiAffinity_To_api_PodAntiAffinity(*in, *out, s); err != nil { + return err + } + } else { + out.PodAntiAffinity = nil + } + return nil +} + +func Convert_v1_Affinity_To_api_Affinity(in *Affinity, out *api.Affinity, s conversion.Scope) error { + return autoConvert_v1_Affinity_To_api_Affinity(in, out, s) +} + +func autoConvert_api_Affinity_To_v1_Affinity(in *api.Affinity, out *Affinity, s conversion.Scope) error { + if in.NodeAffinity != nil { + in, out := &in.NodeAffinity, &out.NodeAffinity + *out = new(NodeAffinity) + if err := Convert_api_NodeAffinity_To_v1_NodeAffinity(*in, *out, s); err != nil { + return err + } + } else { + out.NodeAffinity = nil + } + if in.PodAffinity != nil { + in, out := &in.PodAffinity, &out.PodAffinity + *out = new(PodAffinity) + if err := Convert_api_PodAffinity_To_v1_PodAffinity(*in, *out, s); err != nil { + return err + } + } else { + out.PodAffinity = nil + } + if in.PodAntiAffinity != nil { + in, out := &in.PodAntiAffinity, &out.PodAntiAffinity + *out = new(PodAntiAffinity) + if err := Convert_api_PodAntiAffinity_To_v1_PodAntiAffinity(*in, *out, s); err != nil { + return err + } + } else { + out.PodAntiAffinity = nil + } + return nil +} + +func Convert_api_Affinity_To_v1_Affinity(in *api.Affinity, out *Affinity, s conversion.Scope) error { + return autoConvert_api_Affinity_To_v1_Affinity(in, out, s) +} + +func autoConvert_v1_AttachedVolume_To_api_AttachedVolume(in *AttachedVolume, out *api.AttachedVolume, s conversion.Scope) error { + out.Name = api.UniqueVolumeName(in.Name) + out.DevicePath = in.DevicePath + return nil +} + +func Convert_v1_AttachedVolume_To_api_AttachedVolume(in *AttachedVolume, out *api.AttachedVolume, s conversion.Scope) error { + return autoConvert_v1_AttachedVolume_To_api_AttachedVolume(in, out, s) +} + +func autoConvert_api_AttachedVolume_To_v1_AttachedVolume(in *api.AttachedVolume, out *AttachedVolume, s conversion.Scope) error { + out.Name = UniqueVolumeName(in.Name) + out.DevicePath = in.DevicePath + return nil +} + +func Convert_api_AttachedVolume_To_v1_AttachedVolume(in *api.AttachedVolume, out *AttachedVolume, s conversion.Scope) error { + return autoConvert_api_AttachedVolume_To_v1_AttachedVolume(in, out, s) +} + +func autoConvert_v1_AvoidPods_To_api_AvoidPods(in *AvoidPods, out *api.AvoidPods, s conversion.Scope) error { + if in.PreferAvoidPods != nil { + in, out := &in.PreferAvoidPods, &out.PreferAvoidPods + *out = make([]api.PreferAvoidPodsEntry, len(*in)) + for i := range *in { + if err := Convert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferAvoidPods = nil + } + return nil +} + +func Convert_v1_AvoidPods_To_api_AvoidPods(in *AvoidPods, out *api.AvoidPods, s conversion.Scope) error { + return autoConvert_v1_AvoidPods_To_api_AvoidPods(in, out, s) +} + +func autoConvert_api_AvoidPods_To_v1_AvoidPods(in *api.AvoidPods, out *AvoidPods, s conversion.Scope) error { + if in.PreferAvoidPods != nil { + in, out := &in.PreferAvoidPods, &out.PreferAvoidPods + *out = make([]PreferAvoidPodsEntry, len(*in)) + for i := range *in { + if err := Convert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferAvoidPods = nil + } + return nil +} + +func Convert_api_AvoidPods_To_v1_AvoidPods(in *api.AvoidPods, out *AvoidPods, s conversion.Scope) error { + return autoConvert_api_AvoidPods_To_v1_AvoidPods(in, out, s) +} + +func autoConvert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(in *AzureDiskVolumeSource, out *api.AzureDiskVolumeSource, s conversion.Scope) error { + SetDefaults_AzureDiskVolumeSource(in) + out.DiskName = in.DiskName + out.DataDiskURI = in.DataDiskURI + if in.CachingMode != nil { + in, out := &in.CachingMode, &out.CachingMode + *out = new(api.AzureDataDiskCachingMode) + **out = api.AzureDataDiskCachingMode(**in) + } else { + out.CachingMode = nil + } + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(in *AzureDiskVolumeSource, out *api.AzureDiskVolumeSource, s conversion.Scope) error { + return autoConvert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(in, out, s) +} + +func autoConvert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(in *api.AzureDiskVolumeSource, out *AzureDiskVolumeSource, s conversion.Scope) error { + out.DiskName = in.DiskName + out.DataDiskURI = in.DataDiskURI + if in.CachingMode != nil { + in, out := &in.CachingMode, &out.CachingMode + *out = new(AzureDataDiskCachingMode) + **out = AzureDataDiskCachingMode(**in) + } else { + out.CachingMode = nil + } + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(in *api.AzureDiskVolumeSource, out *AzureDiskVolumeSource, s conversion.Scope) error { + return autoConvert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(in, out, s) +} + +func autoConvert_v1_AzureFileVolumeSource_To_api_AzureFileVolumeSource(in *AzureFileVolumeSource, out *api.AzureFileVolumeSource, s conversion.Scope) error { + out.SecretName = in.SecretName + out.ShareName = in.ShareName + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_AzureFileVolumeSource_To_api_AzureFileVolumeSource(in *AzureFileVolumeSource, out *api.AzureFileVolumeSource, s conversion.Scope) error { + return autoConvert_v1_AzureFileVolumeSource_To_api_AzureFileVolumeSource(in, out, s) +} + +func autoConvert_api_AzureFileVolumeSource_To_v1_AzureFileVolumeSource(in *api.AzureFileVolumeSource, out *AzureFileVolumeSource, s conversion.Scope) error { + out.SecretName = in.SecretName + out.ShareName = in.ShareName + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_AzureFileVolumeSource_To_v1_AzureFileVolumeSource(in *api.AzureFileVolumeSource, out *AzureFileVolumeSource, s conversion.Scope) error { + return autoConvert_api_AzureFileVolumeSource_To_v1_AzureFileVolumeSource(in, out, s) +} + +func autoConvert_v1_Binding_To_api_Binding(in *Binding, out *api.Binding, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectReference_To_api_ObjectReference(&in.Target, &out.Target, s); err != nil { + return err + } + return nil +} + +func Convert_v1_Binding_To_api_Binding(in *Binding, out *api.Binding, s conversion.Scope) error { + return autoConvert_v1_Binding_To_api_Binding(in, out, s) +} + +func autoConvert_api_Binding_To_v1_Binding(in *api.Binding, out *Binding, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectReference_To_v1_ObjectReference(&in.Target, &out.Target, s); err != nil { + return err + } + return nil +} + +func Convert_api_Binding_To_v1_Binding(in *api.Binding, out *Binding, s conversion.Scope) error { + return autoConvert_api_Binding_To_v1_Binding(in, out, s) +} + +func autoConvert_v1_Capabilities_To_api_Capabilities(in *Capabilities, out *api.Capabilities, s conversion.Scope) error { + if in.Add != nil { + in, out := &in.Add, &out.Add + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = api.Capability((*in)[i]) + } + } else { + out.Add = nil + } + if in.Drop != nil { + in, out := &in.Drop, &out.Drop + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = api.Capability((*in)[i]) + } + } else { + out.Drop = nil + } + return nil +} + +func Convert_v1_Capabilities_To_api_Capabilities(in *Capabilities, out *api.Capabilities, s conversion.Scope) error { + return autoConvert_v1_Capabilities_To_api_Capabilities(in, out, s) +} + +func autoConvert_api_Capabilities_To_v1_Capabilities(in *api.Capabilities, out *Capabilities, s conversion.Scope) error { + if in.Add != nil { + in, out := &in.Add, &out.Add + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = Capability((*in)[i]) + } + } else { + out.Add = nil + } + if in.Drop != nil { + in, out := &in.Drop, &out.Drop + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = Capability((*in)[i]) + } + } else { + out.Drop = nil + } + return nil +} + +func Convert_api_Capabilities_To_v1_Capabilities(in *api.Capabilities, out *Capabilities, s conversion.Scope) error { + return autoConvert_api_Capabilities_To_v1_Capabilities(in, out, s) +} + +func autoConvert_v1_CephFSVolumeSource_To_api_CephFSVolumeSource(in *CephFSVolumeSource, out *api.CephFSVolumeSource, s conversion.Scope) error { + out.Monitors = in.Monitors + out.Path = in.Path + out.User = in.User + out.SecretFile = in.SecretFile + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(api.LocalObjectReference) + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_CephFSVolumeSource_To_api_CephFSVolumeSource(in *CephFSVolumeSource, out *api.CephFSVolumeSource, s conversion.Scope) error { + return autoConvert_v1_CephFSVolumeSource_To_api_CephFSVolumeSource(in, out, s) +} + +func autoConvert_api_CephFSVolumeSource_To_v1_CephFSVolumeSource(in *api.CephFSVolumeSource, out *CephFSVolumeSource, s conversion.Scope) error { + out.Monitors = in.Monitors + out.Path = in.Path + out.User = in.User + out.SecretFile = in.SecretFile + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_CephFSVolumeSource_To_v1_CephFSVolumeSource(in *api.CephFSVolumeSource, out *CephFSVolumeSource, s conversion.Scope) error { + return autoConvert_api_CephFSVolumeSource_To_v1_CephFSVolumeSource(in, out, s) +} + +func autoConvert_v1_CinderVolumeSource_To_api_CinderVolumeSource(in *CinderVolumeSource, out *api.CinderVolumeSource, s conversion.Scope) error { + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_CinderVolumeSource_To_api_CinderVolumeSource(in *CinderVolumeSource, out *api.CinderVolumeSource, s conversion.Scope) error { + return autoConvert_v1_CinderVolumeSource_To_api_CinderVolumeSource(in, out, s) +} + +func autoConvert_api_CinderVolumeSource_To_v1_CinderVolumeSource(in *api.CinderVolumeSource, out *CinderVolumeSource, s conversion.Scope) error { + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_CinderVolumeSource_To_v1_CinderVolumeSource(in *api.CinderVolumeSource, out *CinderVolumeSource, s conversion.Scope) error { + return autoConvert_api_CinderVolumeSource_To_v1_CinderVolumeSource(in, out, s) +} + +func autoConvert_v1_ComponentCondition_To_api_ComponentCondition(in *ComponentCondition, out *api.ComponentCondition, s conversion.Scope) error { + out.Type = api.ComponentConditionType(in.Type) + out.Status = api.ConditionStatus(in.Status) + out.Message = in.Message + out.Error = in.Error + return nil +} + +func Convert_v1_ComponentCondition_To_api_ComponentCondition(in *ComponentCondition, out *api.ComponentCondition, s conversion.Scope) error { + return autoConvert_v1_ComponentCondition_To_api_ComponentCondition(in, out, s) +} + +func autoConvert_api_ComponentCondition_To_v1_ComponentCondition(in *api.ComponentCondition, out *ComponentCondition, s conversion.Scope) error { + out.Type = ComponentConditionType(in.Type) + out.Status = ConditionStatus(in.Status) + out.Message = in.Message + out.Error = in.Error + return nil +} + +func Convert_api_ComponentCondition_To_v1_ComponentCondition(in *api.ComponentCondition, out *ComponentCondition, s conversion.Scope) error { + return autoConvert_api_ComponentCondition_To_v1_ComponentCondition(in, out, s) +} + +func autoConvert_v1_ComponentStatus_To_api_ComponentStatus(in *ComponentStatus, out *api.ComponentStatus, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]api.ComponentCondition, len(*in)) + for i := range *in { + if err := Convert_v1_ComponentCondition_To_api_ComponentCondition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + return nil +} + +func Convert_v1_ComponentStatus_To_api_ComponentStatus(in *ComponentStatus, out *api.ComponentStatus, s conversion.Scope) error { + return autoConvert_v1_ComponentStatus_To_api_ComponentStatus(in, out, s) +} + +func autoConvert_api_ComponentStatus_To_v1_ComponentStatus(in *api.ComponentStatus, out *ComponentStatus, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ComponentCondition, len(*in)) + for i := range *in { + if err := Convert_api_ComponentCondition_To_v1_ComponentCondition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + return nil +} + +func Convert_api_ComponentStatus_To_v1_ComponentStatus(in *api.ComponentStatus, out *ComponentStatus, s conversion.Scope) error { + return autoConvert_api_ComponentStatus_To_v1_ComponentStatus(in, out, s) +} + +func autoConvert_v1_ComponentStatusList_To_api_ComponentStatusList(in *ComponentStatusList, out *api.ComponentStatusList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.ComponentStatus, len(*in)) + for i := range *in { + if err := Convert_v1_ComponentStatus_To_api_ComponentStatus(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_ComponentStatusList_To_api_ComponentStatusList(in *ComponentStatusList, out *api.ComponentStatusList, s conversion.Scope) error { + return autoConvert_v1_ComponentStatusList_To_api_ComponentStatusList(in, out, s) +} + +func autoConvert_api_ComponentStatusList_To_v1_ComponentStatusList(in *api.ComponentStatusList, out *ComponentStatusList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ComponentStatus, len(*in)) + for i := range *in { + if err := Convert_api_ComponentStatus_To_v1_ComponentStatus(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_ComponentStatusList_To_v1_ComponentStatusList(in *api.ComponentStatusList, out *ComponentStatusList, s conversion.Scope) error { + return autoConvert_api_ComponentStatusList_To_v1_ComponentStatusList(in, out, s) +} + +func autoConvert_v1_ConfigMap_To_api_ConfigMap(in *ConfigMap, out *api.ConfigMap, s conversion.Scope) error { + SetDefaults_ConfigMap(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + out.Data = in.Data + return nil +} + +func Convert_v1_ConfigMap_To_api_ConfigMap(in *ConfigMap, out *api.ConfigMap, s conversion.Scope) error { + return autoConvert_v1_ConfigMap_To_api_ConfigMap(in, out, s) +} + +func autoConvert_api_ConfigMap_To_v1_ConfigMap(in *api.ConfigMap, out *ConfigMap, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + out.Data = in.Data + return nil +} + +func Convert_api_ConfigMap_To_v1_ConfigMap(in *api.ConfigMap, out *ConfigMap, s conversion.Scope) error { + return autoConvert_api_ConfigMap_To_v1_ConfigMap(in, out, s) +} + +func autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in *ConfigMapKeySelector, out *api.ConfigMapKeySelector, s conversion.Scope) error { + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { + return err + } + out.Key = in.Key + return nil +} + +func Convert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in *ConfigMapKeySelector, out *api.ConfigMapKeySelector, s conversion.Scope) error { + return autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in, out, s) +} + +func autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in *api.ConfigMapKeySelector, out *ConfigMapKeySelector, s conversion.Scope) error { + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { + return err + } + out.Key = in.Key + return nil +} + +func Convert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in *api.ConfigMapKeySelector, out *ConfigMapKeySelector, s conversion.Scope) error { + return autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in, out, s) +} + +func autoConvert_v1_ConfigMapList_To_api_ConfigMapList(in *ConfigMapList, out *api.ConfigMapList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.ConfigMap, len(*in)) + for i := range *in { + if err := Convert_v1_ConfigMap_To_api_ConfigMap(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_ConfigMapList_To_api_ConfigMapList(in *ConfigMapList, out *api.ConfigMapList, s conversion.Scope) error { + return autoConvert_v1_ConfigMapList_To_api_ConfigMapList(in, out, s) +} + +func autoConvert_api_ConfigMapList_To_v1_ConfigMapList(in *api.ConfigMapList, out *ConfigMapList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ConfigMap, len(*in)) + for i := range *in { + if err := Convert_api_ConfigMap_To_v1_ConfigMap(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_ConfigMapList_To_v1_ConfigMapList(in *api.ConfigMapList, out *ConfigMapList, s conversion.Scope) error { + return autoConvert_api_ConfigMapList_To_v1_ConfigMapList(in, out, s) +} + +func autoConvert_v1_ConfigMapVolumeSource_To_api_ConfigMapVolumeSource(in *ConfigMapVolumeSource, out *api.ConfigMapVolumeSource, s conversion.Scope) error { + SetDefaults_ConfigMapVolumeSource(in) + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.KeyToPath, len(*in)) + for i := range *in { + if err := Convert_v1_KeyToPath_To_api_KeyToPath(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + out.DefaultMode = in.DefaultMode + return nil +} + +func Convert_v1_ConfigMapVolumeSource_To_api_ConfigMapVolumeSource(in *ConfigMapVolumeSource, out *api.ConfigMapVolumeSource, s conversion.Scope) error { + return autoConvert_v1_ConfigMapVolumeSource_To_api_ConfigMapVolumeSource(in, out, s) +} + +func autoConvert_api_ConfigMapVolumeSource_To_v1_ConfigMapVolumeSource(in *api.ConfigMapVolumeSource, out *ConfigMapVolumeSource, s conversion.Scope) error { + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := Convert_api_KeyToPath_To_v1_KeyToPath(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + out.DefaultMode = in.DefaultMode + return nil +} + +func Convert_api_ConfigMapVolumeSource_To_v1_ConfigMapVolumeSource(in *api.ConfigMapVolumeSource, out *ConfigMapVolumeSource, s conversion.Scope) error { + return autoConvert_api_ConfigMapVolumeSource_To_v1_ConfigMapVolumeSource(in, out, s) +} + +func autoConvert_v1_Container_To_api_Container(in *Container, out *api.Container, s conversion.Scope) error { + SetDefaults_Container(in) + out.Name = in.Name + out.Image = in.Image + out.Command = in.Command + out.Args = in.Args + out.WorkingDir = in.WorkingDir + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]api.ContainerPort, len(*in)) + for i := range *in { + if err := Convert_v1_ContainerPort_To_api_ContainerPort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]api.EnvVar, len(*in)) + for i := range *in { + if err := Convert_v1_EnvVar_To_api_EnvVar(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Env = nil + } + if err := Convert_v1_ResourceRequirements_To_api_ResourceRequirements(&in.Resources, &out.Resources, s); err != nil { + return err + } + if in.VolumeMounts != nil { + in, out := &in.VolumeMounts, &out.VolumeMounts + *out = make([]api.VolumeMount, len(*in)) + for i := range *in { + if err := Convert_v1_VolumeMount_To_api_VolumeMount(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.VolumeMounts = nil + } + if in.LivenessProbe != nil { + in, out := &in.LivenessProbe, &out.LivenessProbe + *out = new(api.Probe) + if err := Convert_v1_Probe_To_api_Probe(*in, *out, s); err != nil { + return err + } + } else { + out.LivenessProbe = nil + } + if in.ReadinessProbe != nil { + in, out := &in.ReadinessProbe, &out.ReadinessProbe + *out = new(api.Probe) + if err := Convert_v1_Probe_To_api_Probe(*in, *out, s); err != nil { + return err + } + } else { + out.ReadinessProbe = nil + } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(api.Lifecycle) + if err := Convert_v1_Lifecycle_To_api_Lifecycle(*in, *out, s); err != nil { + return err + } + } else { + out.Lifecycle = nil + } + out.TerminationMessagePath = in.TerminationMessagePath + out.ImagePullPolicy = api.PullPolicy(in.ImagePullPolicy) + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(api.SecurityContext) + if err := Convert_v1_SecurityContext_To_api_SecurityContext(*in, *out, s); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + out.Stdin = in.Stdin + out.StdinOnce = in.StdinOnce + out.TTY = in.TTY + return nil +} + +func Convert_v1_Container_To_api_Container(in *Container, out *api.Container, s conversion.Scope) error { + return autoConvert_v1_Container_To_api_Container(in, out, s) +} + +func autoConvert_api_Container_To_v1_Container(in *api.Container, out *Container, s conversion.Scope) error { + out.Name = in.Name + out.Image = in.Image + out.Command = in.Command + out.Args = in.Args + out.WorkingDir = in.WorkingDir + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ContainerPort, len(*in)) + for i := range *in { + if err := Convert_api_ContainerPort_To_v1_ContainerPort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]EnvVar, len(*in)) + for i := range *in { + if err := Convert_api_EnvVar_To_v1_EnvVar(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Env = nil + } + if err := Convert_api_ResourceRequirements_To_v1_ResourceRequirements(&in.Resources, &out.Resources, s); err != nil { + return err + } + if in.VolumeMounts != nil { + in, out := &in.VolumeMounts, &out.VolumeMounts + *out = make([]VolumeMount, len(*in)) + for i := range *in { + if err := Convert_api_VolumeMount_To_v1_VolumeMount(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.VolumeMounts = nil + } + if in.LivenessProbe != nil { + in, out := &in.LivenessProbe, &out.LivenessProbe + *out = new(Probe) + if err := Convert_api_Probe_To_v1_Probe(*in, *out, s); err != nil { + return err + } + } else { + out.LivenessProbe = nil + } + if in.ReadinessProbe != nil { + in, out := &in.ReadinessProbe, &out.ReadinessProbe + *out = new(Probe) + if err := Convert_api_Probe_To_v1_Probe(*in, *out, s); err != nil { + return err + } + } else { + out.ReadinessProbe = nil + } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(Lifecycle) + if err := Convert_api_Lifecycle_To_v1_Lifecycle(*in, *out, s); err != nil { + return err + } + } else { + out.Lifecycle = nil + } + out.TerminationMessagePath = in.TerminationMessagePath + out.ImagePullPolicy = PullPolicy(in.ImagePullPolicy) + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(SecurityContext) + if err := Convert_api_SecurityContext_To_v1_SecurityContext(*in, *out, s); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + out.Stdin = in.Stdin + out.StdinOnce = in.StdinOnce + out.TTY = in.TTY + return nil +} + +func Convert_api_Container_To_v1_Container(in *api.Container, out *Container, s conversion.Scope) error { + return autoConvert_api_Container_To_v1_Container(in, out, s) +} + +func autoConvert_v1_ContainerImage_To_api_ContainerImage(in *ContainerImage, out *api.ContainerImage, s conversion.Scope) error { + out.Names = in.Names + out.SizeBytes = in.SizeBytes + return nil +} + +func Convert_v1_ContainerImage_To_api_ContainerImage(in *ContainerImage, out *api.ContainerImage, s conversion.Scope) error { + return autoConvert_v1_ContainerImage_To_api_ContainerImage(in, out, s) +} + +func autoConvert_api_ContainerImage_To_v1_ContainerImage(in *api.ContainerImage, out *ContainerImage, s conversion.Scope) error { + out.Names = in.Names + out.SizeBytes = in.SizeBytes + return nil +} + +func Convert_api_ContainerImage_To_v1_ContainerImage(in *api.ContainerImage, out *ContainerImage, s conversion.Scope) error { + return autoConvert_api_ContainerImage_To_v1_ContainerImage(in, out, s) +} + +func autoConvert_v1_ContainerPort_To_api_ContainerPort(in *ContainerPort, out *api.ContainerPort, s conversion.Scope) error { + SetDefaults_ContainerPort(in) + out.Name = in.Name + out.HostPort = in.HostPort + out.ContainerPort = in.ContainerPort + out.Protocol = api.Protocol(in.Protocol) + out.HostIP = in.HostIP + return nil +} + +func Convert_v1_ContainerPort_To_api_ContainerPort(in *ContainerPort, out *api.ContainerPort, s conversion.Scope) error { + return autoConvert_v1_ContainerPort_To_api_ContainerPort(in, out, s) +} + +func autoConvert_api_ContainerPort_To_v1_ContainerPort(in *api.ContainerPort, out *ContainerPort, s conversion.Scope) error { + out.Name = in.Name + out.HostPort = in.HostPort + out.ContainerPort = in.ContainerPort + out.Protocol = Protocol(in.Protocol) + out.HostIP = in.HostIP + return nil +} + +func Convert_api_ContainerPort_To_v1_ContainerPort(in *api.ContainerPort, out *ContainerPort, s conversion.Scope) error { + return autoConvert_api_ContainerPort_To_v1_ContainerPort(in, out, s) +} + +func autoConvert_v1_ContainerState_To_api_ContainerState(in *ContainerState, out *api.ContainerState, s conversion.Scope) error { + if in.Waiting != nil { + in, out := &in.Waiting, &out.Waiting + *out = new(api.ContainerStateWaiting) + if err := Convert_v1_ContainerStateWaiting_To_api_ContainerStateWaiting(*in, *out, s); err != nil { + return err + } + } else { + out.Waiting = nil + } + if in.Running != nil { + in, out := &in.Running, &out.Running + *out = new(api.ContainerStateRunning) + if err := Convert_v1_ContainerStateRunning_To_api_ContainerStateRunning(*in, *out, s); err != nil { + return err + } + } else { + out.Running = nil + } + if in.Terminated != nil { + in, out := &in.Terminated, &out.Terminated + *out = new(api.ContainerStateTerminated) + if err := Convert_v1_ContainerStateTerminated_To_api_ContainerStateTerminated(*in, *out, s); err != nil { + return err + } + } else { + out.Terminated = nil + } + return nil +} + +func Convert_v1_ContainerState_To_api_ContainerState(in *ContainerState, out *api.ContainerState, s conversion.Scope) error { + return autoConvert_v1_ContainerState_To_api_ContainerState(in, out, s) +} + +func autoConvert_api_ContainerState_To_v1_ContainerState(in *api.ContainerState, out *ContainerState, s conversion.Scope) error { + if in.Waiting != nil { + in, out := &in.Waiting, &out.Waiting + *out = new(ContainerStateWaiting) + if err := Convert_api_ContainerStateWaiting_To_v1_ContainerStateWaiting(*in, *out, s); err != nil { + return err + } + } else { + out.Waiting = nil + } + if in.Running != nil { + in, out := &in.Running, &out.Running + *out = new(ContainerStateRunning) + if err := Convert_api_ContainerStateRunning_To_v1_ContainerStateRunning(*in, *out, s); err != nil { + return err + } + } else { + out.Running = nil + } + if in.Terminated != nil { + in, out := &in.Terminated, &out.Terminated + *out = new(ContainerStateTerminated) + if err := Convert_api_ContainerStateTerminated_To_v1_ContainerStateTerminated(*in, *out, s); err != nil { + return err + } + } else { + out.Terminated = nil + } + return nil +} + +func Convert_api_ContainerState_To_v1_ContainerState(in *api.ContainerState, out *ContainerState, s conversion.Scope) error { + return autoConvert_api_ContainerState_To_v1_ContainerState(in, out, s) +} + +func autoConvert_v1_ContainerStateRunning_To_api_ContainerStateRunning(in *ContainerStateRunning, out *api.ContainerStateRunning, s conversion.Scope) error { + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.StartedAt, &out.StartedAt, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ContainerStateRunning_To_api_ContainerStateRunning(in *ContainerStateRunning, out *api.ContainerStateRunning, s conversion.Scope) error { + return autoConvert_v1_ContainerStateRunning_To_api_ContainerStateRunning(in, out, s) +} + +func autoConvert_api_ContainerStateRunning_To_v1_ContainerStateRunning(in *api.ContainerStateRunning, out *ContainerStateRunning, s conversion.Scope) error { + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.StartedAt, &out.StartedAt, s); err != nil { + return err + } + return nil +} + +func Convert_api_ContainerStateRunning_To_v1_ContainerStateRunning(in *api.ContainerStateRunning, out *ContainerStateRunning, s conversion.Scope) error { + return autoConvert_api_ContainerStateRunning_To_v1_ContainerStateRunning(in, out, s) +} + +func autoConvert_v1_ContainerStateTerminated_To_api_ContainerStateTerminated(in *ContainerStateTerminated, out *api.ContainerStateTerminated, s conversion.Scope) error { + out.ExitCode = in.ExitCode + out.Signal = in.Signal + out.Reason = in.Reason + out.Message = in.Message + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.StartedAt, &out.StartedAt, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.FinishedAt, &out.FinishedAt, s); err != nil { + return err + } + out.ContainerID = in.ContainerID + return nil +} + +func Convert_v1_ContainerStateTerminated_To_api_ContainerStateTerminated(in *ContainerStateTerminated, out *api.ContainerStateTerminated, s conversion.Scope) error { + return autoConvert_v1_ContainerStateTerminated_To_api_ContainerStateTerminated(in, out, s) +} + +func autoConvert_api_ContainerStateTerminated_To_v1_ContainerStateTerminated(in *api.ContainerStateTerminated, out *ContainerStateTerminated, s conversion.Scope) error { + out.ExitCode = in.ExitCode + out.Signal = in.Signal + out.Reason = in.Reason + out.Message = in.Message + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.StartedAt, &out.StartedAt, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.FinishedAt, &out.FinishedAt, s); err != nil { + return err + } + out.ContainerID = in.ContainerID + return nil +} + +func Convert_api_ContainerStateTerminated_To_v1_ContainerStateTerminated(in *api.ContainerStateTerminated, out *ContainerStateTerminated, s conversion.Scope) error { + return autoConvert_api_ContainerStateTerminated_To_v1_ContainerStateTerminated(in, out, s) +} + +func autoConvert_v1_ContainerStateWaiting_To_api_ContainerStateWaiting(in *ContainerStateWaiting, out *api.ContainerStateWaiting, s conversion.Scope) error { + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_v1_ContainerStateWaiting_To_api_ContainerStateWaiting(in *ContainerStateWaiting, out *api.ContainerStateWaiting, s conversion.Scope) error { + return autoConvert_v1_ContainerStateWaiting_To_api_ContainerStateWaiting(in, out, s) +} + +func autoConvert_api_ContainerStateWaiting_To_v1_ContainerStateWaiting(in *api.ContainerStateWaiting, out *ContainerStateWaiting, s conversion.Scope) error { + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_api_ContainerStateWaiting_To_v1_ContainerStateWaiting(in *api.ContainerStateWaiting, out *ContainerStateWaiting, s conversion.Scope) error { + return autoConvert_api_ContainerStateWaiting_To_v1_ContainerStateWaiting(in, out, s) +} + +func autoConvert_v1_ContainerStatus_To_api_ContainerStatus(in *ContainerStatus, out *api.ContainerStatus, s conversion.Scope) error { + out.Name = in.Name + if err := Convert_v1_ContainerState_To_api_ContainerState(&in.State, &out.State, s); err != nil { + return err + } + if err := Convert_v1_ContainerState_To_api_ContainerState(&in.LastTerminationState, &out.LastTerminationState, s); err != nil { + return err + } + out.Ready = in.Ready + out.RestartCount = in.RestartCount + out.Image = in.Image + out.ImageID = in.ImageID + out.ContainerID = in.ContainerID + return nil +} + +func Convert_v1_ContainerStatus_To_api_ContainerStatus(in *ContainerStatus, out *api.ContainerStatus, s conversion.Scope) error { + return autoConvert_v1_ContainerStatus_To_api_ContainerStatus(in, out, s) +} + +func autoConvert_api_ContainerStatus_To_v1_ContainerStatus(in *api.ContainerStatus, out *ContainerStatus, s conversion.Scope) error { + out.Name = in.Name + if err := Convert_api_ContainerState_To_v1_ContainerState(&in.State, &out.State, s); err != nil { + return err + } + if err := Convert_api_ContainerState_To_v1_ContainerState(&in.LastTerminationState, &out.LastTerminationState, s); err != nil { + return err + } + out.Ready = in.Ready + out.RestartCount = in.RestartCount + out.Image = in.Image + out.ImageID = in.ImageID + out.ContainerID = in.ContainerID + return nil +} + +func Convert_api_ContainerStatus_To_v1_ContainerStatus(in *api.ContainerStatus, out *ContainerStatus, s conversion.Scope) error { + return autoConvert_api_ContainerStatus_To_v1_ContainerStatus(in, out, s) +} + +func autoConvert_v1_DaemonEndpoint_To_api_DaemonEndpoint(in *DaemonEndpoint, out *api.DaemonEndpoint, s conversion.Scope) error { + out.Port = in.Port + return nil +} + +func Convert_v1_DaemonEndpoint_To_api_DaemonEndpoint(in *DaemonEndpoint, out *api.DaemonEndpoint, s conversion.Scope) error { + return autoConvert_v1_DaemonEndpoint_To_api_DaemonEndpoint(in, out, s) +} + +func autoConvert_api_DaemonEndpoint_To_v1_DaemonEndpoint(in *api.DaemonEndpoint, out *DaemonEndpoint, s conversion.Scope) error { + out.Port = in.Port + return nil +} + +func Convert_api_DaemonEndpoint_To_v1_DaemonEndpoint(in *api.DaemonEndpoint, out *DaemonEndpoint, s conversion.Scope) error { + return autoConvert_api_DaemonEndpoint_To_v1_DaemonEndpoint(in, out, s) +} + +func autoConvert_v1_DeleteOptions_To_api_DeleteOptions(in *DeleteOptions, out *api.DeleteOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.GracePeriodSeconds = in.GracePeriodSeconds + if in.Preconditions != nil { + in, out := &in.Preconditions, &out.Preconditions + *out = new(api.Preconditions) + if err := Convert_v1_Preconditions_To_api_Preconditions(*in, *out, s); err != nil { + return err + } + } else { + out.Preconditions = nil + } + out.OrphanDependents = in.OrphanDependents + return nil +} + +func Convert_v1_DeleteOptions_To_api_DeleteOptions(in *DeleteOptions, out *api.DeleteOptions, s conversion.Scope) error { + return autoConvert_v1_DeleteOptions_To_api_DeleteOptions(in, out, s) +} + +func autoConvert_api_DeleteOptions_To_v1_DeleteOptions(in *api.DeleteOptions, out *DeleteOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.GracePeriodSeconds = in.GracePeriodSeconds + if in.Preconditions != nil { + in, out := &in.Preconditions, &out.Preconditions + *out = new(Preconditions) + if err := Convert_api_Preconditions_To_v1_Preconditions(*in, *out, s); err != nil { + return err + } + } else { + out.Preconditions = nil + } + out.OrphanDependents = in.OrphanDependents + return nil +} + +func Convert_api_DeleteOptions_To_v1_DeleteOptions(in *api.DeleteOptions, out *DeleteOptions, s conversion.Scope) error { + return autoConvert_api_DeleteOptions_To_v1_DeleteOptions(in, out, s) +} + +func autoConvert_v1_DeprecatedDownwardAPIVolumeFile_To_api_DeprecatedDownwardAPIVolumeFile(in *DeprecatedDownwardAPIVolumeFile, out *api.DeprecatedDownwardAPIVolumeFile, s conversion.Scope) error { + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(api.ObjectFieldSelector) + if err := Convert_v1_ObjectFieldSelector_To_api_ObjectFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(api.ResourceFieldSelector) + if err := Convert_v1_ResourceFieldSelector_To_api_ResourceFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + out.Mode = in.Mode + return nil +} + +func Convert_v1_DeprecatedDownwardAPIVolumeFile_To_api_DeprecatedDownwardAPIVolumeFile(in *DeprecatedDownwardAPIVolumeFile, out *api.DeprecatedDownwardAPIVolumeFile, s conversion.Scope) error { + return autoConvert_v1_DeprecatedDownwardAPIVolumeFile_To_api_DeprecatedDownwardAPIVolumeFile(in, out, s) +} + +func autoConvert_api_DeprecatedDownwardAPIVolumeFile_To_v1_DeprecatedDownwardAPIVolumeFile(in *api.DeprecatedDownwardAPIVolumeFile, out *DeprecatedDownwardAPIVolumeFile, s conversion.Scope) error { + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + if err := Convert_api_ObjectFieldSelector_To_v1_ObjectFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := Convert_api_ResourceFieldSelector_To_v1_ResourceFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + out.Mode = in.Mode + return nil +} + +func Convert_api_DeprecatedDownwardAPIVolumeFile_To_v1_DeprecatedDownwardAPIVolumeFile(in *api.DeprecatedDownwardAPIVolumeFile, out *DeprecatedDownwardAPIVolumeFile, s conversion.Scope) error { + return autoConvert_api_DeprecatedDownwardAPIVolumeFile_To_v1_DeprecatedDownwardAPIVolumeFile(in, out, s) +} + +func autoConvert_v1_DeprecatedDownwardAPIVolumeSource_To_api_DeprecatedDownwardAPIVolumeSource(in *DeprecatedDownwardAPIVolumeSource, out *api.DeprecatedDownwardAPIVolumeSource, s conversion.Scope) error { + SetDefaults_DeprecatedDownwardAPIVolumeSource(in) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.DeprecatedDownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := Convert_v1_DeprecatedDownwardAPIVolumeFile_To_api_DeprecatedDownwardAPIVolumeFile(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + out.DefaultMode = in.DefaultMode + return nil +} + +func Convert_v1_DeprecatedDownwardAPIVolumeSource_To_api_DeprecatedDownwardAPIVolumeSource(in *DeprecatedDownwardAPIVolumeSource, out *api.DeprecatedDownwardAPIVolumeSource, s conversion.Scope) error { + return autoConvert_v1_DeprecatedDownwardAPIVolumeSource_To_api_DeprecatedDownwardAPIVolumeSource(in, out, s) +} + +func autoConvert_api_DeprecatedDownwardAPIVolumeSource_To_v1_DeprecatedDownwardAPIVolumeSource(in *api.DeprecatedDownwardAPIVolumeSource, out *DeprecatedDownwardAPIVolumeSource, s conversion.Scope) error { + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DeprecatedDownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := Convert_api_DeprecatedDownwardAPIVolumeFile_To_v1_DeprecatedDownwardAPIVolumeFile(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + out.DefaultMode = in.DefaultMode + return nil +} + +func Convert_api_DeprecatedDownwardAPIVolumeSource_To_v1_DeprecatedDownwardAPIVolumeSource(in *api.DeprecatedDownwardAPIVolumeSource, out *DeprecatedDownwardAPIVolumeSource, s conversion.Scope) error { + return autoConvert_api_DeprecatedDownwardAPIVolumeSource_To_v1_DeprecatedDownwardAPIVolumeSource(in, out, s) +} + +func autoConvert_v1_DownwardAPIVolumeFile_To_api_DownwardAPIVolumeFile(in *DownwardAPIVolumeFile, out *api.DownwardAPIVolumeFile, s conversion.Scope) error { + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(api.ObjectFieldSelector) + if err := Convert_v1_ObjectFieldSelector_To_api_ObjectFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(api.ResourceFieldSelector) + if err := Convert_v1_ResourceFieldSelector_To_api_ResourceFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + out.Mode = in.Mode + return nil +} + +func Convert_v1_DownwardAPIVolumeFile_To_api_DownwardAPIVolumeFile(in *DownwardAPIVolumeFile, out *api.DownwardAPIVolumeFile, s conversion.Scope) error { + return autoConvert_v1_DownwardAPIVolumeFile_To_api_DownwardAPIVolumeFile(in, out, s) +} + +func autoConvert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile(in *api.DownwardAPIVolumeFile, out *DownwardAPIVolumeFile, s conversion.Scope) error { + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + if err := Convert_api_ObjectFieldSelector_To_v1_ObjectFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := Convert_api_ResourceFieldSelector_To_v1_ResourceFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + out.Mode = in.Mode + return nil +} + +func Convert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile(in *api.DownwardAPIVolumeFile, out *DownwardAPIVolumeFile, s conversion.Scope) error { + return autoConvert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile(in, out, s) +} + +func autoConvert_v1_DownwardAPIVolumeSource_To_api_DownwardAPIVolumeSource(in *DownwardAPIVolumeSource, out *api.DownwardAPIVolumeSource, s conversion.Scope) error { + SetDefaults_DownwardAPIVolumeSource(in) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.DownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := Convert_v1_DownwardAPIVolumeFile_To_api_DownwardAPIVolumeFile(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + out.DefaultMode = in.DefaultMode + return nil +} + +func Convert_v1_DownwardAPIVolumeSource_To_api_DownwardAPIVolumeSource(in *DownwardAPIVolumeSource, out *api.DownwardAPIVolumeSource, s conversion.Scope) error { + return autoConvert_v1_DownwardAPIVolumeSource_To_api_DownwardAPIVolumeSource(in, out, s) +} + +func autoConvert_api_DownwardAPIVolumeSource_To_v1_DownwardAPIVolumeSource(in *api.DownwardAPIVolumeSource, out *DownwardAPIVolumeSource, s conversion.Scope) error { + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := Convert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + out.DefaultMode = in.DefaultMode + return nil +} + +func Convert_api_DownwardAPIVolumeSource_To_v1_DownwardAPIVolumeSource(in *api.DownwardAPIVolumeSource, out *DownwardAPIVolumeSource, s conversion.Scope) error { + return autoConvert_api_DownwardAPIVolumeSource_To_v1_DownwardAPIVolumeSource(in, out, s) +} + +func autoConvert_v1_EmptyDirVolumeSource_To_api_EmptyDirVolumeSource(in *EmptyDirVolumeSource, out *api.EmptyDirVolumeSource, s conversion.Scope) error { + out.Medium = api.StorageMedium(in.Medium) + return nil +} + +func Convert_v1_EmptyDirVolumeSource_To_api_EmptyDirVolumeSource(in *EmptyDirVolumeSource, out *api.EmptyDirVolumeSource, s conversion.Scope) error { + return autoConvert_v1_EmptyDirVolumeSource_To_api_EmptyDirVolumeSource(in, out, s) +} + +func autoConvert_api_EmptyDirVolumeSource_To_v1_EmptyDirVolumeSource(in *api.EmptyDirVolumeSource, out *EmptyDirVolumeSource, s conversion.Scope) error { + out.Medium = StorageMedium(in.Medium) + return nil +} + +func Convert_api_EmptyDirVolumeSource_To_v1_EmptyDirVolumeSource(in *api.EmptyDirVolumeSource, out *EmptyDirVolumeSource, s conversion.Scope) error { + return autoConvert_api_EmptyDirVolumeSource_To_v1_EmptyDirVolumeSource(in, out, s) +} + +func autoConvert_v1_EndpointAddress_To_api_EndpointAddress(in *EndpointAddress, out *api.EndpointAddress, s conversion.Scope) error { + out.IP = in.IP + out.Hostname = in.Hostname + out.NodeName = in.NodeName + if in.TargetRef != nil { + in, out := &in.TargetRef, &out.TargetRef + *out = new(api.ObjectReference) + if err := Convert_v1_ObjectReference_To_api_ObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.TargetRef = nil + } + return nil +} + +func Convert_v1_EndpointAddress_To_api_EndpointAddress(in *EndpointAddress, out *api.EndpointAddress, s conversion.Scope) error { + return autoConvert_v1_EndpointAddress_To_api_EndpointAddress(in, out, s) +} + +func autoConvert_api_EndpointAddress_To_v1_EndpointAddress(in *api.EndpointAddress, out *EndpointAddress, s conversion.Scope) error { + out.IP = in.IP + out.Hostname = in.Hostname + out.NodeName = in.NodeName + if in.TargetRef != nil { + in, out := &in.TargetRef, &out.TargetRef + *out = new(ObjectReference) + if err := Convert_api_ObjectReference_To_v1_ObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.TargetRef = nil + } + return nil +} + +func Convert_api_EndpointAddress_To_v1_EndpointAddress(in *api.EndpointAddress, out *EndpointAddress, s conversion.Scope) error { + return autoConvert_api_EndpointAddress_To_v1_EndpointAddress(in, out, s) +} + +func autoConvert_v1_EndpointPort_To_api_EndpointPort(in *EndpointPort, out *api.EndpointPort, s conversion.Scope) error { + out.Name = in.Name + out.Port = in.Port + out.Protocol = api.Protocol(in.Protocol) + return nil +} + +func Convert_v1_EndpointPort_To_api_EndpointPort(in *EndpointPort, out *api.EndpointPort, s conversion.Scope) error { + return autoConvert_v1_EndpointPort_To_api_EndpointPort(in, out, s) +} + +func autoConvert_api_EndpointPort_To_v1_EndpointPort(in *api.EndpointPort, out *EndpointPort, s conversion.Scope) error { + out.Name = in.Name + out.Port = in.Port + out.Protocol = Protocol(in.Protocol) + return nil +} + +func Convert_api_EndpointPort_To_v1_EndpointPort(in *api.EndpointPort, out *EndpointPort, s conversion.Scope) error { + return autoConvert_api_EndpointPort_To_v1_EndpointPort(in, out, s) +} + +func autoConvert_v1_EndpointSubset_To_api_EndpointSubset(in *EndpointSubset, out *api.EndpointSubset, s conversion.Scope) error { + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]api.EndpointAddress, len(*in)) + for i := range *in { + if err := Convert_v1_EndpointAddress_To_api_EndpointAddress(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Addresses = nil + } + if in.NotReadyAddresses != nil { + in, out := &in.NotReadyAddresses, &out.NotReadyAddresses + *out = make([]api.EndpointAddress, len(*in)) + for i := range *in { + if err := Convert_v1_EndpointAddress_To_api_EndpointAddress(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.NotReadyAddresses = nil + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]api.EndpointPort, len(*in)) + for i := range *in { + if err := Convert_v1_EndpointPort_To_api_EndpointPort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + return nil +} + +func Convert_v1_EndpointSubset_To_api_EndpointSubset(in *EndpointSubset, out *api.EndpointSubset, s conversion.Scope) error { + return autoConvert_v1_EndpointSubset_To_api_EndpointSubset(in, out, s) +} + +func autoConvert_api_EndpointSubset_To_v1_EndpointSubset(in *api.EndpointSubset, out *EndpointSubset, s conversion.Scope) error { + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := Convert_api_EndpointAddress_To_v1_EndpointAddress(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Addresses = nil + } + if in.NotReadyAddresses != nil { + in, out := &in.NotReadyAddresses, &out.NotReadyAddresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := Convert_api_EndpointAddress_To_v1_EndpointAddress(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.NotReadyAddresses = nil + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]EndpointPort, len(*in)) + for i := range *in { + if err := Convert_api_EndpointPort_To_v1_EndpointPort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + return nil +} + +func Convert_api_EndpointSubset_To_v1_EndpointSubset(in *api.EndpointSubset, out *EndpointSubset, s conversion.Scope) error { + return autoConvert_api_EndpointSubset_To_v1_EndpointSubset(in, out, s) +} + +func autoConvert_v1_Endpoints_To_api_Endpoints(in *Endpoints, out *api.Endpoints, s conversion.Scope) error { + SetDefaults_Endpoints(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if in.Subsets != nil { + in, out := &in.Subsets, &out.Subsets + *out = make([]api.EndpointSubset, len(*in)) + for i := range *in { + if err := Convert_v1_EndpointSubset_To_api_EndpointSubset(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Subsets = nil + } + return nil +} + +func Convert_v1_Endpoints_To_api_Endpoints(in *Endpoints, out *api.Endpoints, s conversion.Scope) error { + return autoConvert_v1_Endpoints_To_api_Endpoints(in, out, s) +} + +func autoConvert_api_Endpoints_To_v1_Endpoints(in *api.Endpoints, out *Endpoints, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if in.Subsets != nil { + in, out := &in.Subsets, &out.Subsets + *out = make([]EndpointSubset, len(*in)) + for i := range *in { + if err := Convert_api_EndpointSubset_To_v1_EndpointSubset(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Subsets = nil + } + return nil +} + +func Convert_api_Endpoints_To_v1_Endpoints(in *api.Endpoints, out *Endpoints, s conversion.Scope) error { + return autoConvert_api_Endpoints_To_v1_Endpoints(in, out, s) +} + +func autoConvert_v1_EndpointsList_To_api_EndpointsList(in *EndpointsList, out *api.EndpointsList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.Endpoints, len(*in)) + for i := range *in { + if err := Convert_v1_Endpoints_To_api_Endpoints(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_EndpointsList_To_api_EndpointsList(in *EndpointsList, out *api.EndpointsList, s conversion.Scope) error { + return autoConvert_v1_EndpointsList_To_api_EndpointsList(in, out, s) +} + +func autoConvert_api_EndpointsList_To_v1_EndpointsList(in *api.EndpointsList, out *EndpointsList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Endpoints, len(*in)) + for i := range *in { + if err := Convert_api_Endpoints_To_v1_Endpoints(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_EndpointsList_To_v1_EndpointsList(in *api.EndpointsList, out *EndpointsList, s conversion.Scope) error { + return autoConvert_api_EndpointsList_To_v1_EndpointsList(in, out, s) +} + +func autoConvert_v1_EnvVar_To_api_EnvVar(in *EnvVar, out *api.EnvVar, s conversion.Scope) error { + out.Name = in.Name + out.Value = in.Value + if in.ValueFrom != nil { + in, out := &in.ValueFrom, &out.ValueFrom + *out = new(api.EnvVarSource) + if err := Convert_v1_EnvVarSource_To_api_EnvVarSource(*in, *out, s); err != nil { + return err + } + } else { + out.ValueFrom = nil + } + return nil +} + +func Convert_v1_EnvVar_To_api_EnvVar(in *EnvVar, out *api.EnvVar, s conversion.Scope) error { + return autoConvert_v1_EnvVar_To_api_EnvVar(in, out, s) +} + +func autoConvert_api_EnvVar_To_v1_EnvVar(in *api.EnvVar, out *EnvVar, s conversion.Scope) error { + out.Name = in.Name + out.Value = in.Value + if in.ValueFrom != nil { + in, out := &in.ValueFrom, &out.ValueFrom + *out = new(EnvVarSource) + if err := Convert_api_EnvVarSource_To_v1_EnvVarSource(*in, *out, s); err != nil { + return err + } + } else { + out.ValueFrom = nil + } + return nil +} + +func Convert_api_EnvVar_To_v1_EnvVar(in *api.EnvVar, out *EnvVar, s conversion.Scope) error { + return autoConvert_api_EnvVar_To_v1_EnvVar(in, out, s) +} + +func autoConvert_v1_EnvVarSource_To_api_EnvVarSource(in *EnvVarSource, out *api.EnvVarSource, s conversion.Scope) error { + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(api.ObjectFieldSelector) + if err := Convert_v1_ObjectFieldSelector_To_api_ObjectFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(api.ResourceFieldSelector) + if err := Convert_v1_ResourceFieldSelector_To_api_ResourceFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.ConfigMapKeyRef != nil { + in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef + *out = new(api.ConfigMapKeySelector) + if err := Convert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(*in, *out, s); err != nil { + return err + } + } else { + out.ConfigMapKeyRef = nil + } + if in.SecretKeyRef != nil { + in, out := &in.SecretKeyRef, &out.SecretKeyRef + *out = new(api.SecretKeySelector) + if err := Convert_v1_SecretKeySelector_To_api_SecretKeySelector(*in, *out, s); err != nil { + return err + } + } else { + out.SecretKeyRef = nil + } + return nil +} + +func Convert_v1_EnvVarSource_To_api_EnvVarSource(in *EnvVarSource, out *api.EnvVarSource, s conversion.Scope) error { + return autoConvert_v1_EnvVarSource_To_api_EnvVarSource(in, out, s) +} + +func autoConvert_api_EnvVarSource_To_v1_EnvVarSource(in *api.EnvVarSource, out *EnvVarSource, s conversion.Scope) error { + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + if err := Convert_api_ObjectFieldSelector_To_v1_ObjectFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := Convert_api_ResourceFieldSelector_To_v1_ResourceFieldSelector(*in, *out, s); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.ConfigMapKeyRef != nil { + in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef + *out = new(ConfigMapKeySelector) + if err := Convert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(*in, *out, s); err != nil { + return err + } + } else { + out.ConfigMapKeyRef = nil + } + if in.SecretKeyRef != nil { + in, out := &in.SecretKeyRef, &out.SecretKeyRef + *out = new(SecretKeySelector) + if err := Convert_api_SecretKeySelector_To_v1_SecretKeySelector(*in, *out, s); err != nil { + return err + } + } else { + out.SecretKeyRef = nil + } + return nil +} + +func Convert_api_EnvVarSource_To_v1_EnvVarSource(in *api.EnvVarSource, out *EnvVarSource, s conversion.Scope) error { + return autoConvert_api_EnvVarSource_To_v1_EnvVarSource(in, out, s) +} + +func autoConvert_v1_Event_To_api_Event(in *Event, out *api.Event, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectReference_To_api_ObjectReference(&in.InvolvedObject, &out.InvolvedObject, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + if err := Convert_v1_EventSource_To_api_EventSource(&in.Source, &out.Source, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.FirstTimestamp, &out.FirstTimestamp, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTimestamp, &out.LastTimestamp, s); err != nil { + return err + } + out.Count = in.Count + out.Type = in.Type + return nil +} + +func Convert_v1_Event_To_api_Event(in *Event, out *api.Event, s conversion.Scope) error { + return autoConvert_v1_Event_To_api_Event(in, out, s) +} + +func autoConvert_api_Event_To_v1_Event(in *api.Event, out *Event, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectReference_To_v1_ObjectReference(&in.InvolvedObject, &out.InvolvedObject, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + if err := Convert_api_EventSource_To_v1_EventSource(&in.Source, &out.Source, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.FirstTimestamp, &out.FirstTimestamp, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTimestamp, &out.LastTimestamp, s); err != nil { + return err + } + out.Count = in.Count + out.Type = in.Type + return nil +} + +func Convert_api_Event_To_v1_Event(in *api.Event, out *Event, s conversion.Scope) error { + return autoConvert_api_Event_To_v1_Event(in, out, s) +} + +func autoConvert_v1_EventList_To_api_EventList(in *EventList, out *api.EventList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.Event, len(*in)) + for i := range *in { + if err := Convert_v1_Event_To_api_Event(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_EventList_To_api_EventList(in *EventList, out *api.EventList, s conversion.Scope) error { + return autoConvert_v1_EventList_To_api_EventList(in, out, s) +} + +func autoConvert_api_EventList_To_v1_EventList(in *api.EventList, out *EventList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Event, len(*in)) + for i := range *in { + if err := Convert_api_Event_To_v1_Event(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_EventList_To_v1_EventList(in *api.EventList, out *EventList, s conversion.Scope) error { + return autoConvert_api_EventList_To_v1_EventList(in, out, s) +} + +func autoConvert_v1_EventSource_To_api_EventSource(in *EventSource, out *api.EventSource, s conversion.Scope) error { + out.Component = in.Component + out.Host = in.Host + return nil +} + +func Convert_v1_EventSource_To_api_EventSource(in *EventSource, out *api.EventSource, s conversion.Scope) error { + return autoConvert_v1_EventSource_To_api_EventSource(in, out, s) +} + +func autoConvert_api_EventSource_To_v1_EventSource(in *api.EventSource, out *EventSource, s conversion.Scope) error { + out.Component = in.Component + out.Host = in.Host + return nil +} + +func Convert_api_EventSource_To_v1_EventSource(in *api.EventSource, out *EventSource, s conversion.Scope) error { + return autoConvert_api_EventSource_To_v1_EventSource(in, out, s) +} + +func autoConvert_v1_ExecAction_To_api_ExecAction(in *ExecAction, out *api.ExecAction, s conversion.Scope) error { + out.Command = in.Command + return nil +} + +func Convert_v1_ExecAction_To_api_ExecAction(in *ExecAction, out *api.ExecAction, s conversion.Scope) error { + return autoConvert_v1_ExecAction_To_api_ExecAction(in, out, s) +} + +func autoConvert_api_ExecAction_To_v1_ExecAction(in *api.ExecAction, out *ExecAction, s conversion.Scope) error { + out.Command = in.Command + return nil +} + +func Convert_api_ExecAction_To_v1_ExecAction(in *api.ExecAction, out *ExecAction, s conversion.Scope) error { + return autoConvert_api_ExecAction_To_v1_ExecAction(in, out, s) +} + +func autoConvert_v1_ExportOptions_To_api_ExportOptions(in *ExportOptions, out *api.ExportOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Export = in.Export + out.Exact = in.Exact + return nil +} + +func Convert_v1_ExportOptions_To_api_ExportOptions(in *ExportOptions, out *api.ExportOptions, s conversion.Scope) error { + return autoConvert_v1_ExportOptions_To_api_ExportOptions(in, out, s) +} + +func autoConvert_api_ExportOptions_To_v1_ExportOptions(in *api.ExportOptions, out *ExportOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Export = in.Export + out.Exact = in.Exact + return nil +} + +func Convert_api_ExportOptions_To_v1_ExportOptions(in *api.ExportOptions, out *ExportOptions, s conversion.Scope) error { + return autoConvert_api_ExportOptions_To_v1_ExportOptions(in, out, s) +} + +func autoConvert_v1_FCVolumeSource_To_api_FCVolumeSource(in *FCVolumeSource, out *api.FCVolumeSource, s conversion.Scope) error { + out.TargetWWNs = in.TargetWWNs + out.Lun = in.Lun + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_FCVolumeSource_To_api_FCVolumeSource(in *FCVolumeSource, out *api.FCVolumeSource, s conversion.Scope) error { + return autoConvert_v1_FCVolumeSource_To_api_FCVolumeSource(in, out, s) +} + +func autoConvert_api_FCVolumeSource_To_v1_FCVolumeSource(in *api.FCVolumeSource, out *FCVolumeSource, s conversion.Scope) error { + out.TargetWWNs = in.TargetWWNs + out.Lun = in.Lun + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_FCVolumeSource_To_v1_FCVolumeSource(in *api.FCVolumeSource, out *FCVolumeSource, s conversion.Scope) error { + return autoConvert_api_FCVolumeSource_To_v1_FCVolumeSource(in, out, s) +} + +func autoConvert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions(in *FSGroupStrategyOptions, out *api.FSGroupStrategyOptions, s conversion.Scope) error { + out.Type = api.FSGroupStrategyType(in.Type) + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]api.IDRange, len(*in)) + for i := range *in { + if err := Convert_v1_IDRange_To_api_IDRange(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ranges = nil + } + return nil +} + +func Convert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions(in *FSGroupStrategyOptions, out *api.FSGroupStrategyOptions, s conversion.Scope) error { + return autoConvert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions(in, out, s) +} + +func autoConvert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions(in *api.FSGroupStrategyOptions, out *FSGroupStrategyOptions, s conversion.Scope) error { + out.Type = FSGroupStrategyType(in.Type) + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + if err := Convert_api_IDRange_To_v1_IDRange(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ranges = nil + } + return nil +} + +func Convert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions(in *api.FSGroupStrategyOptions, out *FSGroupStrategyOptions, s conversion.Scope) error { + return autoConvert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions(in, out, s) +} + +func autoConvert_v1_FlexVolumeSource_To_api_FlexVolumeSource(in *FlexVolumeSource, out *api.FlexVolumeSource, s conversion.Scope) error { + out.Driver = in.Driver + out.FSType = in.FSType + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(api.LocalObjectReference) + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + out.Options = in.Options + return nil +} + +func Convert_v1_FlexVolumeSource_To_api_FlexVolumeSource(in *FlexVolumeSource, out *api.FlexVolumeSource, s conversion.Scope) error { + return autoConvert_v1_FlexVolumeSource_To_api_FlexVolumeSource(in, out, s) +} + +func autoConvert_api_FlexVolumeSource_To_v1_FlexVolumeSource(in *api.FlexVolumeSource, out *FlexVolumeSource, s conversion.Scope) error { + out.Driver = in.Driver + out.FSType = in.FSType + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + out.Options = in.Options + return nil +} + +func Convert_api_FlexVolumeSource_To_v1_FlexVolumeSource(in *api.FlexVolumeSource, out *FlexVolumeSource, s conversion.Scope) error { + return autoConvert_api_FlexVolumeSource_To_v1_FlexVolumeSource(in, out, s) +} + +func autoConvert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource(in *FlockerVolumeSource, out *api.FlockerVolumeSource, s conversion.Scope) error { + out.DatasetName = in.DatasetName + return nil +} + +func Convert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource(in *FlockerVolumeSource, out *api.FlockerVolumeSource, s conversion.Scope) error { + return autoConvert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource(in, out, s) +} + +func autoConvert_api_FlockerVolumeSource_To_v1_FlockerVolumeSource(in *api.FlockerVolumeSource, out *FlockerVolumeSource, s conversion.Scope) error { + out.DatasetName = in.DatasetName + return nil +} + +func Convert_api_FlockerVolumeSource_To_v1_FlockerVolumeSource(in *api.FlockerVolumeSource, out *FlockerVolumeSource, s conversion.Scope) error { + return autoConvert_api_FlockerVolumeSource_To_v1_FlockerVolumeSource(in, out, s) +} + +func autoConvert_v1_GCEPersistentDiskVolumeSource_To_api_GCEPersistentDiskVolumeSource(in *GCEPersistentDiskVolumeSource, out *api.GCEPersistentDiskVolumeSource, s conversion.Scope) error { + out.PDName = in.PDName + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_GCEPersistentDiskVolumeSource_To_api_GCEPersistentDiskVolumeSource(in *GCEPersistentDiskVolumeSource, out *api.GCEPersistentDiskVolumeSource, s conversion.Scope) error { + return autoConvert_v1_GCEPersistentDiskVolumeSource_To_api_GCEPersistentDiskVolumeSource(in, out, s) +} + +func autoConvert_api_GCEPersistentDiskVolumeSource_To_v1_GCEPersistentDiskVolumeSource(in *api.GCEPersistentDiskVolumeSource, out *GCEPersistentDiskVolumeSource, s conversion.Scope) error { + out.PDName = in.PDName + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_GCEPersistentDiskVolumeSource_To_v1_GCEPersistentDiskVolumeSource(in *api.GCEPersistentDiskVolumeSource, out *GCEPersistentDiskVolumeSource, s conversion.Scope) error { + return autoConvert_api_GCEPersistentDiskVolumeSource_To_v1_GCEPersistentDiskVolumeSource(in, out, s) +} + +func autoConvert_v1_GitRepoVolumeSource_To_api_GitRepoVolumeSource(in *GitRepoVolumeSource, out *api.GitRepoVolumeSource, s conversion.Scope) error { + out.Repository = in.Repository + out.Revision = in.Revision + out.Directory = in.Directory + return nil +} + +func Convert_v1_GitRepoVolumeSource_To_api_GitRepoVolumeSource(in *GitRepoVolumeSource, out *api.GitRepoVolumeSource, s conversion.Scope) error { + return autoConvert_v1_GitRepoVolumeSource_To_api_GitRepoVolumeSource(in, out, s) +} + +func autoConvert_api_GitRepoVolumeSource_To_v1_GitRepoVolumeSource(in *api.GitRepoVolumeSource, out *GitRepoVolumeSource, s conversion.Scope) error { + out.Repository = in.Repository + out.Revision = in.Revision + out.Directory = in.Directory + return nil +} + +func Convert_api_GitRepoVolumeSource_To_v1_GitRepoVolumeSource(in *api.GitRepoVolumeSource, out *GitRepoVolumeSource, s conversion.Scope) error { + return autoConvert_api_GitRepoVolumeSource_To_v1_GitRepoVolumeSource(in, out, s) +} + +func autoConvert_v1_GlusterfsVolumeSource_To_api_GlusterfsVolumeSource(in *GlusterfsVolumeSource, out *api.GlusterfsVolumeSource, s conversion.Scope) error { + out.EndpointsName = in.EndpointsName + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_GlusterfsVolumeSource_To_api_GlusterfsVolumeSource(in *GlusterfsVolumeSource, out *api.GlusterfsVolumeSource, s conversion.Scope) error { + return autoConvert_v1_GlusterfsVolumeSource_To_api_GlusterfsVolumeSource(in, out, s) +} + +func autoConvert_api_GlusterfsVolumeSource_To_v1_GlusterfsVolumeSource(in *api.GlusterfsVolumeSource, out *GlusterfsVolumeSource, s conversion.Scope) error { + out.EndpointsName = in.EndpointsName + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_GlusterfsVolumeSource_To_v1_GlusterfsVolumeSource(in *api.GlusterfsVolumeSource, out *GlusterfsVolumeSource, s conversion.Scope) error { + return autoConvert_api_GlusterfsVolumeSource_To_v1_GlusterfsVolumeSource(in, out, s) +} + +func autoConvert_v1_HTTPGetAction_To_api_HTTPGetAction(in *HTTPGetAction, out *api.HTTPGetAction, s conversion.Scope) error { + SetDefaults_HTTPGetAction(in) + out.Path = in.Path + if err := api.Convert_intstr_IntOrString_To_intstr_IntOrString(&in.Port, &out.Port, s); err != nil { + return err + } + out.Host = in.Host + out.Scheme = api.URIScheme(in.Scheme) + if in.HTTPHeaders != nil { + in, out := &in.HTTPHeaders, &out.HTTPHeaders + *out = make([]api.HTTPHeader, len(*in)) + for i := range *in { + if err := Convert_v1_HTTPHeader_To_api_HTTPHeader(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.HTTPHeaders = nil + } + return nil +} + +func Convert_v1_HTTPGetAction_To_api_HTTPGetAction(in *HTTPGetAction, out *api.HTTPGetAction, s conversion.Scope) error { + return autoConvert_v1_HTTPGetAction_To_api_HTTPGetAction(in, out, s) +} + +func autoConvert_api_HTTPGetAction_To_v1_HTTPGetAction(in *api.HTTPGetAction, out *HTTPGetAction, s conversion.Scope) error { + out.Path = in.Path + if err := api.Convert_intstr_IntOrString_To_intstr_IntOrString(&in.Port, &out.Port, s); err != nil { + return err + } + out.Host = in.Host + out.Scheme = URIScheme(in.Scheme) + if in.HTTPHeaders != nil { + in, out := &in.HTTPHeaders, &out.HTTPHeaders + *out = make([]HTTPHeader, len(*in)) + for i := range *in { + if err := Convert_api_HTTPHeader_To_v1_HTTPHeader(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.HTTPHeaders = nil + } + return nil +} + +func Convert_api_HTTPGetAction_To_v1_HTTPGetAction(in *api.HTTPGetAction, out *HTTPGetAction, s conversion.Scope) error { + return autoConvert_api_HTTPGetAction_To_v1_HTTPGetAction(in, out, s) +} + +func autoConvert_v1_HTTPHeader_To_api_HTTPHeader(in *HTTPHeader, out *api.HTTPHeader, s conversion.Scope) error { + out.Name = in.Name + out.Value = in.Value + return nil +} + +func Convert_v1_HTTPHeader_To_api_HTTPHeader(in *HTTPHeader, out *api.HTTPHeader, s conversion.Scope) error { + return autoConvert_v1_HTTPHeader_To_api_HTTPHeader(in, out, s) +} + +func autoConvert_api_HTTPHeader_To_v1_HTTPHeader(in *api.HTTPHeader, out *HTTPHeader, s conversion.Scope) error { + out.Name = in.Name + out.Value = in.Value + return nil +} + +func Convert_api_HTTPHeader_To_v1_HTTPHeader(in *api.HTTPHeader, out *HTTPHeader, s conversion.Scope) error { + return autoConvert_api_HTTPHeader_To_v1_HTTPHeader(in, out, s) +} + +func autoConvert_v1_Handler_To_api_Handler(in *Handler, out *api.Handler, s conversion.Scope) error { + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + *out = new(api.ExecAction) + if err := Convert_v1_ExecAction_To_api_ExecAction(*in, *out, s); err != nil { + return err + } + } else { + out.Exec = nil + } + if in.HTTPGet != nil { + in, out := &in.HTTPGet, &out.HTTPGet + *out = new(api.HTTPGetAction) + if err := Convert_v1_HTTPGetAction_To_api_HTTPGetAction(*in, *out, s); err != nil { + return err + } + } else { + out.HTTPGet = nil + } + if in.TCPSocket != nil { + in, out := &in.TCPSocket, &out.TCPSocket + *out = new(api.TCPSocketAction) + if err := Convert_v1_TCPSocketAction_To_api_TCPSocketAction(*in, *out, s); err != nil { + return err + } + } else { + out.TCPSocket = nil + } + return nil +} + +func Convert_v1_Handler_To_api_Handler(in *Handler, out *api.Handler, s conversion.Scope) error { + return autoConvert_v1_Handler_To_api_Handler(in, out, s) +} + +func autoConvert_api_Handler_To_v1_Handler(in *api.Handler, out *Handler, s conversion.Scope) error { + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + *out = new(ExecAction) + if err := Convert_api_ExecAction_To_v1_ExecAction(*in, *out, s); err != nil { + return err + } + } else { + out.Exec = nil + } + if in.HTTPGet != nil { + in, out := &in.HTTPGet, &out.HTTPGet + *out = new(HTTPGetAction) + if err := Convert_api_HTTPGetAction_To_v1_HTTPGetAction(*in, *out, s); err != nil { + return err + } + } else { + out.HTTPGet = nil + } + if in.TCPSocket != nil { + in, out := &in.TCPSocket, &out.TCPSocket + *out = new(TCPSocketAction) + if err := Convert_api_TCPSocketAction_To_v1_TCPSocketAction(*in, *out, s); err != nil { + return err + } + } else { + out.TCPSocket = nil + } + return nil +} + +func Convert_api_Handler_To_v1_Handler(in *api.Handler, out *Handler, s conversion.Scope) error { + return autoConvert_api_Handler_To_v1_Handler(in, out, s) +} + +func autoConvert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource(in *HostPathVolumeSource, out *api.HostPathVolumeSource, s conversion.Scope) error { + out.Path = in.Path + return nil +} + +func Convert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource(in *HostPathVolumeSource, out *api.HostPathVolumeSource, s conversion.Scope) error { + return autoConvert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource(in, out, s) +} + +func autoConvert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource(in *api.HostPathVolumeSource, out *HostPathVolumeSource, s conversion.Scope) error { + out.Path = in.Path + return nil +} + +func Convert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource(in *api.HostPathVolumeSource, out *HostPathVolumeSource, s conversion.Scope) error { + return autoConvert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource(in, out, s) +} + +func autoConvert_v1_IDRange_To_api_IDRange(in *IDRange, out *api.IDRange, s conversion.Scope) error { + out.Min = in.Min + out.Max = in.Max + return nil +} + +func Convert_v1_IDRange_To_api_IDRange(in *IDRange, out *api.IDRange, s conversion.Scope) error { + return autoConvert_v1_IDRange_To_api_IDRange(in, out, s) +} + +func autoConvert_api_IDRange_To_v1_IDRange(in *api.IDRange, out *IDRange, s conversion.Scope) error { + out.Min = in.Min + out.Max = in.Max + return nil +} + +func Convert_api_IDRange_To_v1_IDRange(in *api.IDRange, out *IDRange, s conversion.Scope) error { + return autoConvert_api_IDRange_To_v1_IDRange(in, out, s) +} + +func autoConvert_v1_ISCSIVolumeSource_To_api_ISCSIVolumeSource(in *ISCSIVolumeSource, out *api.ISCSIVolumeSource, s conversion.Scope) error { + SetDefaults_ISCSIVolumeSource(in) + out.TargetPortal = in.TargetPortal + out.IQN = in.IQN + out.Lun = in.Lun + out.ISCSIInterface = in.ISCSIInterface + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_ISCSIVolumeSource_To_api_ISCSIVolumeSource(in *ISCSIVolumeSource, out *api.ISCSIVolumeSource, s conversion.Scope) error { + return autoConvert_v1_ISCSIVolumeSource_To_api_ISCSIVolumeSource(in, out, s) +} + +func autoConvert_api_ISCSIVolumeSource_To_v1_ISCSIVolumeSource(in *api.ISCSIVolumeSource, out *ISCSIVolumeSource, s conversion.Scope) error { + out.TargetPortal = in.TargetPortal + out.IQN = in.IQN + out.Lun = in.Lun + out.ISCSIInterface = in.ISCSIInterface + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_ISCSIVolumeSource_To_v1_ISCSIVolumeSource(in *api.ISCSIVolumeSource, out *ISCSIVolumeSource, s conversion.Scope) error { + return autoConvert_api_ISCSIVolumeSource_To_v1_ISCSIVolumeSource(in, out, s) +} + +func autoConvert_v1_KeyToPath_To_api_KeyToPath(in *KeyToPath, out *api.KeyToPath, s conversion.Scope) error { + out.Key = in.Key + out.Path = in.Path + out.Mode = in.Mode + return nil +} + +func Convert_v1_KeyToPath_To_api_KeyToPath(in *KeyToPath, out *api.KeyToPath, s conversion.Scope) error { + return autoConvert_v1_KeyToPath_To_api_KeyToPath(in, out, s) +} + +func autoConvert_api_KeyToPath_To_v1_KeyToPath(in *api.KeyToPath, out *KeyToPath, s conversion.Scope) error { + out.Key = in.Key + out.Path = in.Path + out.Mode = in.Mode + return nil +} + +func Convert_api_KeyToPath_To_v1_KeyToPath(in *api.KeyToPath, out *KeyToPath, s conversion.Scope) error { + return autoConvert_api_KeyToPath_To_v1_KeyToPath(in, out, s) +} + +func autoConvert_v1_Lifecycle_To_api_Lifecycle(in *Lifecycle, out *api.Lifecycle, s conversion.Scope) error { + if in.PostStart != nil { + in, out := &in.PostStart, &out.PostStart + *out = new(api.Handler) + if err := Convert_v1_Handler_To_api_Handler(*in, *out, s); err != nil { + return err + } + } else { + out.PostStart = nil + } + if in.PreStop != nil { + in, out := &in.PreStop, &out.PreStop + *out = new(api.Handler) + if err := Convert_v1_Handler_To_api_Handler(*in, *out, s); err != nil { + return err + } + } else { + out.PreStop = nil + } + return nil +} + +func Convert_v1_Lifecycle_To_api_Lifecycle(in *Lifecycle, out *api.Lifecycle, s conversion.Scope) error { + return autoConvert_v1_Lifecycle_To_api_Lifecycle(in, out, s) +} + +func autoConvert_api_Lifecycle_To_v1_Lifecycle(in *api.Lifecycle, out *Lifecycle, s conversion.Scope) error { + if in.PostStart != nil { + in, out := &in.PostStart, &out.PostStart + *out = new(Handler) + if err := Convert_api_Handler_To_v1_Handler(*in, *out, s); err != nil { + return err + } + } else { + out.PostStart = nil + } + if in.PreStop != nil { + in, out := &in.PreStop, &out.PreStop + *out = new(Handler) + if err := Convert_api_Handler_To_v1_Handler(*in, *out, s); err != nil { + return err + } + } else { + out.PreStop = nil + } + return nil +} + +func Convert_api_Lifecycle_To_v1_Lifecycle(in *api.Lifecycle, out *Lifecycle, s conversion.Scope) error { + return autoConvert_api_Lifecycle_To_v1_Lifecycle(in, out, s) +} + +func autoConvert_v1_LimitRange_To_api_LimitRange(in *LimitRange, out *api.LimitRange, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_LimitRangeSpec_To_api_LimitRangeSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +func Convert_v1_LimitRange_To_api_LimitRange(in *LimitRange, out *api.LimitRange, s conversion.Scope) error { + return autoConvert_v1_LimitRange_To_api_LimitRange(in, out, s) +} + +func autoConvert_api_LimitRange_To_v1_LimitRange(in *api.LimitRange, out *LimitRange, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_LimitRangeSpec_To_v1_LimitRangeSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +func Convert_api_LimitRange_To_v1_LimitRange(in *api.LimitRange, out *LimitRange, s conversion.Scope) error { + return autoConvert_api_LimitRange_To_v1_LimitRange(in, out, s) +} + +func autoConvert_v1_LimitRangeItem_To_api_LimitRangeItem(in *LimitRangeItem, out *api.LimitRangeItem, s conversion.Scope) error { + SetDefaults_LimitRangeItem(in) + out.Type = api.LimitType(in.Type) + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Max, &out.Max, s); err != nil { + return err + } + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Min, &out.Min, s); err != nil { + return err + } + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Default, &out.Default, s); err != nil { + return err + } + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.DefaultRequest, &out.DefaultRequest, s); err != nil { + return err + } + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio, s); err != nil { + return err + } + return nil +} + +func Convert_v1_LimitRangeItem_To_api_LimitRangeItem(in *LimitRangeItem, out *api.LimitRangeItem, s conversion.Scope) error { + return autoConvert_v1_LimitRangeItem_To_api_LimitRangeItem(in, out, s) +} + +func autoConvert_api_LimitRangeItem_To_v1_LimitRangeItem(in *api.LimitRangeItem, out *LimitRangeItem, s conversion.Scope) error { + out.Type = LimitType(in.Type) + if in.Max != nil { + in, out := &in.Max, &out.Max + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Max = nil + } + if in.Min != nil { + in, out := &in.Min, &out.Min + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Min = nil + } + if in.Default != nil { + in, out := &in.Default, &out.Default + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Default = nil + } + if in.DefaultRequest != nil { + in, out := &in.DefaultRequest, &out.DefaultRequest + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.DefaultRequest = nil + } + if in.MaxLimitRequestRatio != nil { + in, out := &in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.MaxLimitRequestRatio = nil + } + return nil +} + +func Convert_api_LimitRangeItem_To_v1_LimitRangeItem(in *api.LimitRangeItem, out *LimitRangeItem, s conversion.Scope) error { + return autoConvert_api_LimitRangeItem_To_v1_LimitRangeItem(in, out, s) +} + +func autoConvert_v1_LimitRangeList_To_api_LimitRangeList(in *LimitRangeList, out *api.LimitRangeList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.LimitRange, len(*in)) + for i := range *in { + if err := Convert_v1_LimitRange_To_api_LimitRange(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_LimitRangeList_To_api_LimitRangeList(in *LimitRangeList, out *api.LimitRangeList, s conversion.Scope) error { + return autoConvert_v1_LimitRangeList_To_api_LimitRangeList(in, out, s) +} + +func autoConvert_api_LimitRangeList_To_v1_LimitRangeList(in *api.LimitRangeList, out *LimitRangeList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]LimitRange, len(*in)) + for i := range *in { + if err := Convert_api_LimitRange_To_v1_LimitRange(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_LimitRangeList_To_v1_LimitRangeList(in *api.LimitRangeList, out *LimitRangeList, s conversion.Scope) error { + return autoConvert_api_LimitRangeList_To_v1_LimitRangeList(in, out, s) +} + +func autoConvert_v1_LimitRangeSpec_To_api_LimitRangeSpec(in *LimitRangeSpec, out *api.LimitRangeSpec, s conversion.Scope) error { + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make([]api.LimitRangeItem, len(*in)) + for i := range *in { + if err := Convert_v1_LimitRangeItem_To_api_LimitRangeItem(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Limits = nil + } + return nil +} + +func Convert_v1_LimitRangeSpec_To_api_LimitRangeSpec(in *LimitRangeSpec, out *api.LimitRangeSpec, s conversion.Scope) error { + return autoConvert_v1_LimitRangeSpec_To_api_LimitRangeSpec(in, out, s) +} + +func autoConvert_api_LimitRangeSpec_To_v1_LimitRangeSpec(in *api.LimitRangeSpec, out *LimitRangeSpec, s conversion.Scope) error { + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make([]LimitRangeItem, len(*in)) + for i := range *in { + if err := Convert_api_LimitRangeItem_To_v1_LimitRangeItem(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Limits = nil + } + return nil +} + +func Convert_api_LimitRangeSpec_To_v1_LimitRangeSpec(in *api.LimitRangeSpec, out *LimitRangeSpec, s conversion.Scope) error { + return autoConvert_api_LimitRangeSpec_To_v1_LimitRangeSpec(in, out, s) +} + +func autoConvert_v1_List_To_api_List(in *List, out *api.List, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]runtime.Object, len(*in)) + for i := range *in { + if err := runtime.Convert_runtime_RawExtension_To_runtime_Object(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_List_To_api_List(in *List, out *api.List, s conversion.Scope) error { + return autoConvert_v1_List_To_api_List(in, out, s) +} + +func autoConvert_api_List_To_v1_List(in *api.List, out *List, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]runtime.RawExtension, len(*in)) + for i := range *in { + if err := runtime.Convert_runtime_Object_To_runtime_RawExtension(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_List_To_v1_List(in *api.List, out *List, s conversion.Scope) error { + return autoConvert_api_List_To_v1_List(in, out, s) +} + +func autoConvert_v1_ListOptions_To_api_ListOptions(in *ListOptions, out *api.ListOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_string_To_labels_Selector(&in.LabelSelector, &out.LabelSelector, s); err != nil { + return err + } + if err := api.Convert_string_To_fields_Selector(&in.FieldSelector, &out.FieldSelector, s); err != nil { + return err + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + out.TimeoutSeconds = in.TimeoutSeconds + return nil +} + +func Convert_v1_ListOptions_To_api_ListOptions(in *ListOptions, out *api.ListOptions, s conversion.Scope) error { + return autoConvert_v1_ListOptions_To_api_ListOptions(in, out, s) +} + +func autoConvert_api_ListOptions_To_v1_ListOptions(in *api.ListOptions, out *ListOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_labels_Selector_To_string(&in.LabelSelector, &out.LabelSelector, s); err != nil { + return err + } + if err := api.Convert_fields_Selector_To_string(&in.FieldSelector, &out.FieldSelector, s); err != nil { + return err + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + out.TimeoutSeconds = in.TimeoutSeconds + return nil +} + +func Convert_api_ListOptions_To_v1_ListOptions(in *api.ListOptions, out *ListOptions, s conversion.Scope) error { + return autoConvert_api_ListOptions_To_v1_ListOptions(in, out, s) +} + +func autoConvert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress(in *LoadBalancerIngress, out *api.LoadBalancerIngress, s conversion.Scope) error { + out.IP = in.IP + out.Hostname = in.Hostname + return nil +} + +func Convert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress(in *LoadBalancerIngress, out *api.LoadBalancerIngress, s conversion.Scope) error { + return autoConvert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress(in, out, s) +} + +func autoConvert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress(in *api.LoadBalancerIngress, out *LoadBalancerIngress, s conversion.Scope) error { + out.IP = in.IP + out.Hostname = in.Hostname + return nil +} + +func Convert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress(in *api.LoadBalancerIngress, out *LoadBalancerIngress, s conversion.Scope) error { + return autoConvert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress(in, out, s) +} + +func autoConvert_v1_LoadBalancerStatus_To_api_LoadBalancerStatus(in *LoadBalancerStatus, out *api.LoadBalancerStatus, s conversion.Scope) error { + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]api.LoadBalancerIngress, len(*in)) + for i := range *in { + if err := Convert_v1_LoadBalancerIngress_To_api_LoadBalancerIngress(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ingress = nil + } + return nil +} + +func Convert_v1_LoadBalancerStatus_To_api_LoadBalancerStatus(in *LoadBalancerStatus, out *api.LoadBalancerStatus, s conversion.Scope) error { + return autoConvert_v1_LoadBalancerStatus_To_api_LoadBalancerStatus(in, out, s) +} + +func autoConvert_api_LoadBalancerStatus_To_v1_LoadBalancerStatus(in *api.LoadBalancerStatus, out *LoadBalancerStatus, s conversion.Scope) error { + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]LoadBalancerIngress, len(*in)) + for i := range *in { + if err := Convert_api_LoadBalancerIngress_To_v1_LoadBalancerIngress(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ingress = nil + } + return nil +} + +func Convert_api_LoadBalancerStatus_To_v1_LoadBalancerStatus(in *api.LoadBalancerStatus, out *LoadBalancerStatus, s conversion.Scope) error { + return autoConvert_api_LoadBalancerStatus_To_v1_LoadBalancerStatus(in, out, s) +} + +func autoConvert_v1_LocalObjectReference_To_api_LocalObjectReference(in *LocalObjectReference, out *api.LocalObjectReference, s conversion.Scope) error { + out.Name = in.Name + return nil +} + +func Convert_v1_LocalObjectReference_To_api_LocalObjectReference(in *LocalObjectReference, out *api.LocalObjectReference, s conversion.Scope) error { + return autoConvert_v1_LocalObjectReference_To_api_LocalObjectReference(in, out, s) +} + +func autoConvert_api_LocalObjectReference_To_v1_LocalObjectReference(in *api.LocalObjectReference, out *LocalObjectReference, s conversion.Scope) error { + out.Name = in.Name + return nil +} + +func Convert_api_LocalObjectReference_To_v1_LocalObjectReference(in *api.LocalObjectReference, out *LocalObjectReference, s conversion.Scope) error { + return autoConvert_api_LocalObjectReference_To_v1_LocalObjectReference(in, out, s) +} + +func autoConvert_v1_NFSVolumeSource_To_api_NFSVolumeSource(in *NFSVolumeSource, out *api.NFSVolumeSource, s conversion.Scope) error { + out.Server = in.Server + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_NFSVolumeSource_To_api_NFSVolumeSource(in *NFSVolumeSource, out *api.NFSVolumeSource, s conversion.Scope) error { + return autoConvert_v1_NFSVolumeSource_To_api_NFSVolumeSource(in, out, s) +} + +func autoConvert_api_NFSVolumeSource_To_v1_NFSVolumeSource(in *api.NFSVolumeSource, out *NFSVolumeSource, s conversion.Scope) error { + out.Server = in.Server + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_NFSVolumeSource_To_v1_NFSVolumeSource(in *api.NFSVolumeSource, out *NFSVolumeSource, s conversion.Scope) error { + return autoConvert_api_NFSVolumeSource_To_v1_NFSVolumeSource(in, out, s) +} + +func autoConvert_v1_Namespace_To_api_Namespace(in *Namespace, out *api.Namespace, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_NamespaceSpec_To_api_NamespaceSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_NamespaceStatus_To_api_NamespaceStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_Namespace_To_api_Namespace(in *Namespace, out *api.Namespace, s conversion.Scope) error { + return autoConvert_v1_Namespace_To_api_Namespace(in, out, s) +} + +func autoConvert_api_Namespace_To_v1_Namespace(in *api.Namespace, out *Namespace, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_NamespaceSpec_To_v1_NamespaceSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_api_NamespaceStatus_To_v1_NamespaceStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_api_Namespace_To_v1_Namespace(in *api.Namespace, out *Namespace, s conversion.Scope) error { + return autoConvert_api_Namespace_To_v1_Namespace(in, out, s) +} + +func autoConvert_v1_NamespaceList_To_api_NamespaceList(in *NamespaceList, out *api.NamespaceList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.Namespace, len(*in)) + for i := range *in { + if err := Convert_v1_Namespace_To_api_Namespace(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_NamespaceList_To_api_NamespaceList(in *NamespaceList, out *api.NamespaceList, s conversion.Scope) error { + return autoConvert_v1_NamespaceList_To_api_NamespaceList(in, out, s) +} + +func autoConvert_api_NamespaceList_To_v1_NamespaceList(in *api.NamespaceList, out *NamespaceList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Namespace, len(*in)) + for i := range *in { + if err := Convert_api_Namespace_To_v1_Namespace(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_NamespaceList_To_v1_NamespaceList(in *api.NamespaceList, out *NamespaceList, s conversion.Scope) error { + return autoConvert_api_NamespaceList_To_v1_NamespaceList(in, out, s) +} + +func autoConvert_v1_NamespaceSpec_To_api_NamespaceSpec(in *NamespaceSpec, out *api.NamespaceSpec, s conversion.Scope) error { + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]api.FinalizerName, len(*in)) + for i := range *in { + (*out)[i] = api.FinalizerName((*in)[i]) + } + } else { + out.Finalizers = nil + } + return nil +} + +func Convert_v1_NamespaceSpec_To_api_NamespaceSpec(in *NamespaceSpec, out *api.NamespaceSpec, s conversion.Scope) error { + return autoConvert_v1_NamespaceSpec_To_api_NamespaceSpec(in, out, s) +} + +func autoConvert_api_NamespaceSpec_To_v1_NamespaceSpec(in *api.NamespaceSpec, out *NamespaceSpec, s conversion.Scope) error { + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]FinalizerName, len(*in)) + for i := range *in { + (*out)[i] = FinalizerName((*in)[i]) + } + } else { + out.Finalizers = nil + } + return nil +} + +func Convert_api_NamespaceSpec_To_v1_NamespaceSpec(in *api.NamespaceSpec, out *NamespaceSpec, s conversion.Scope) error { + return autoConvert_api_NamespaceSpec_To_v1_NamespaceSpec(in, out, s) +} + +func autoConvert_v1_NamespaceStatus_To_api_NamespaceStatus(in *NamespaceStatus, out *api.NamespaceStatus, s conversion.Scope) error { + SetDefaults_NamespaceStatus(in) + out.Phase = api.NamespacePhase(in.Phase) + return nil +} + +func Convert_v1_NamespaceStatus_To_api_NamespaceStatus(in *NamespaceStatus, out *api.NamespaceStatus, s conversion.Scope) error { + return autoConvert_v1_NamespaceStatus_To_api_NamespaceStatus(in, out, s) +} + +func autoConvert_api_NamespaceStatus_To_v1_NamespaceStatus(in *api.NamespaceStatus, out *NamespaceStatus, s conversion.Scope) error { + out.Phase = NamespacePhase(in.Phase) + return nil +} + +func Convert_api_NamespaceStatus_To_v1_NamespaceStatus(in *api.NamespaceStatus, out *NamespaceStatus, s conversion.Scope) error { + return autoConvert_api_NamespaceStatus_To_v1_NamespaceStatus(in, out, s) +} + +func autoConvert_v1_Node_To_api_Node(in *Node, out *api.Node, s conversion.Scope) error { + SetDefaults_Node(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_NodeSpec_To_api_NodeSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_NodeStatus_To_api_NodeStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_Node_To_api_Node(in *Node, out *api.Node, s conversion.Scope) error { + return autoConvert_v1_Node_To_api_Node(in, out, s) +} + +func autoConvert_api_Node_To_v1_Node(in *api.Node, out *Node, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_NodeSpec_To_v1_NodeSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_api_NodeStatus_To_v1_NodeStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_api_Node_To_v1_Node(in *api.Node, out *Node, s conversion.Scope) error { + return autoConvert_api_Node_To_v1_Node(in, out, s) +} + +func autoConvert_v1_NodeAddress_To_api_NodeAddress(in *NodeAddress, out *api.NodeAddress, s conversion.Scope) error { + out.Type = api.NodeAddressType(in.Type) + out.Address = in.Address + return nil +} + +func Convert_v1_NodeAddress_To_api_NodeAddress(in *NodeAddress, out *api.NodeAddress, s conversion.Scope) error { + return autoConvert_v1_NodeAddress_To_api_NodeAddress(in, out, s) +} + +func autoConvert_api_NodeAddress_To_v1_NodeAddress(in *api.NodeAddress, out *NodeAddress, s conversion.Scope) error { + out.Type = NodeAddressType(in.Type) + out.Address = in.Address + return nil +} + +func Convert_api_NodeAddress_To_v1_NodeAddress(in *api.NodeAddress, out *NodeAddress, s conversion.Scope) error { + return autoConvert_api_NodeAddress_To_v1_NodeAddress(in, out, s) +} + +func autoConvert_v1_NodeAffinity_To_api_NodeAffinity(in *NodeAffinity, out *api.NodeAffinity, s conversion.Scope) error { + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = new(api.NodeSelector) + if err := Convert_v1_NodeSelector_To_api_NodeSelector(*in, *out, s); err != nil { + return err + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]api.PreferredSchedulingTerm, len(*in)) + for i := range *in { + if err := Convert_v1_PreferredSchedulingTerm_To_api_PreferredSchedulingTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil +} + +func Convert_v1_NodeAffinity_To_api_NodeAffinity(in *NodeAffinity, out *api.NodeAffinity, s conversion.Scope) error { + return autoConvert_v1_NodeAffinity_To_api_NodeAffinity(in, out, s) +} + +func autoConvert_api_NodeAffinity_To_v1_NodeAffinity(in *api.NodeAffinity, out *NodeAffinity, s conversion.Scope) error { + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = new(NodeSelector) + if err := Convert_api_NodeSelector_To_v1_NodeSelector(*in, *out, s); err != nil { + return err + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]PreferredSchedulingTerm, len(*in)) + for i := range *in { + if err := Convert_api_PreferredSchedulingTerm_To_v1_PreferredSchedulingTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil +} + +func Convert_api_NodeAffinity_To_v1_NodeAffinity(in *api.NodeAffinity, out *NodeAffinity, s conversion.Scope) error { + return autoConvert_api_NodeAffinity_To_v1_NodeAffinity(in, out, s) +} + +func autoConvert_v1_NodeCondition_To_api_NodeCondition(in *NodeCondition, out *api.NodeCondition, s conversion.Scope) error { + out.Type = api.NodeConditionType(in.Type) + out.Status = api.ConditionStatus(in.Status) + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastHeartbeatTime, &out.LastHeartbeatTime, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_v1_NodeCondition_To_api_NodeCondition(in *NodeCondition, out *api.NodeCondition, s conversion.Scope) error { + return autoConvert_v1_NodeCondition_To_api_NodeCondition(in, out, s) +} + +func autoConvert_api_NodeCondition_To_v1_NodeCondition(in *api.NodeCondition, out *NodeCondition, s conversion.Scope) error { + out.Type = NodeConditionType(in.Type) + out.Status = ConditionStatus(in.Status) + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastHeartbeatTime, &out.LastHeartbeatTime, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_api_NodeCondition_To_v1_NodeCondition(in *api.NodeCondition, out *NodeCondition, s conversion.Scope) error { + return autoConvert_api_NodeCondition_To_v1_NodeCondition(in, out, s) +} + +func autoConvert_v1_NodeDaemonEndpoints_To_api_NodeDaemonEndpoints(in *NodeDaemonEndpoints, out *api.NodeDaemonEndpoints, s conversion.Scope) error { + if err := Convert_v1_DaemonEndpoint_To_api_DaemonEndpoint(&in.KubeletEndpoint, &out.KubeletEndpoint, s); err != nil { + return err + } + return nil +} + +func Convert_v1_NodeDaemonEndpoints_To_api_NodeDaemonEndpoints(in *NodeDaemonEndpoints, out *api.NodeDaemonEndpoints, s conversion.Scope) error { + return autoConvert_v1_NodeDaemonEndpoints_To_api_NodeDaemonEndpoints(in, out, s) +} + +func autoConvert_api_NodeDaemonEndpoints_To_v1_NodeDaemonEndpoints(in *api.NodeDaemonEndpoints, out *NodeDaemonEndpoints, s conversion.Scope) error { + if err := Convert_api_DaemonEndpoint_To_v1_DaemonEndpoint(&in.KubeletEndpoint, &out.KubeletEndpoint, s); err != nil { + return err + } + return nil +} + +func Convert_api_NodeDaemonEndpoints_To_v1_NodeDaemonEndpoints(in *api.NodeDaemonEndpoints, out *NodeDaemonEndpoints, s conversion.Scope) error { + return autoConvert_api_NodeDaemonEndpoints_To_v1_NodeDaemonEndpoints(in, out, s) +} + +func autoConvert_v1_NodeList_To_api_NodeList(in *NodeList, out *api.NodeList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.Node, len(*in)) + for i := range *in { + if err := Convert_v1_Node_To_api_Node(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_NodeList_To_api_NodeList(in *NodeList, out *api.NodeList, s conversion.Scope) error { + return autoConvert_v1_NodeList_To_api_NodeList(in, out, s) +} + +func autoConvert_api_NodeList_To_v1_NodeList(in *api.NodeList, out *NodeList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Node, len(*in)) + for i := range *in { + if err := Convert_api_Node_To_v1_Node(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_NodeList_To_v1_NodeList(in *api.NodeList, out *NodeList, s conversion.Scope) error { + return autoConvert_api_NodeList_To_v1_NodeList(in, out, s) +} + +func autoConvert_v1_NodeProxyOptions_To_api_NodeProxyOptions(in *NodeProxyOptions, out *api.NodeProxyOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Path = in.Path + return nil +} + +func Convert_v1_NodeProxyOptions_To_api_NodeProxyOptions(in *NodeProxyOptions, out *api.NodeProxyOptions, s conversion.Scope) error { + return autoConvert_v1_NodeProxyOptions_To_api_NodeProxyOptions(in, out, s) +} + +func autoConvert_api_NodeProxyOptions_To_v1_NodeProxyOptions(in *api.NodeProxyOptions, out *NodeProxyOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Path = in.Path + return nil +} + +func Convert_api_NodeProxyOptions_To_v1_NodeProxyOptions(in *api.NodeProxyOptions, out *NodeProxyOptions, s conversion.Scope) error { + return autoConvert_api_NodeProxyOptions_To_v1_NodeProxyOptions(in, out, s) +} + +func autoConvert_v1_NodeSelector_To_api_NodeSelector(in *NodeSelector, out *api.NodeSelector, s conversion.Scope) error { + if in.NodeSelectorTerms != nil { + in, out := &in.NodeSelectorTerms, &out.NodeSelectorTerms + *out = make([]api.NodeSelectorTerm, len(*in)) + for i := range *in { + if err := Convert_v1_NodeSelectorTerm_To_api_NodeSelectorTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.NodeSelectorTerms = nil + } + return nil +} + +func Convert_v1_NodeSelector_To_api_NodeSelector(in *NodeSelector, out *api.NodeSelector, s conversion.Scope) error { + return autoConvert_v1_NodeSelector_To_api_NodeSelector(in, out, s) +} + +func autoConvert_api_NodeSelector_To_v1_NodeSelector(in *api.NodeSelector, out *NodeSelector, s conversion.Scope) error { + if in.NodeSelectorTerms != nil { + in, out := &in.NodeSelectorTerms, &out.NodeSelectorTerms + *out = make([]NodeSelectorTerm, len(*in)) + for i := range *in { + if err := Convert_api_NodeSelectorTerm_To_v1_NodeSelectorTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.NodeSelectorTerms = nil + } + return nil +} + +func Convert_api_NodeSelector_To_v1_NodeSelector(in *api.NodeSelector, out *NodeSelector, s conversion.Scope) error { + return autoConvert_api_NodeSelector_To_v1_NodeSelector(in, out, s) +} + +func autoConvert_v1_NodeSelectorRequirement_To_api_NodeSelectorRequirement(in *NodeSelectorRequirement, out *api.NodeSelectorRequirement, s conversion.Scope) error { + out.Key = in.Key + out.Operator = api.NodeSelectorOperator(in.Operator) + out.Values = in.Values + return nil +} + +func Convert_v1_NodeSelectorRequirement_To_api_NodeSelectorRequirement(in *NodeSelectorRequirement, out *api.NodeSelectorRequirement, s conversion.Scope) error { + return autoConvert_v1_NodeSelectorRequirement_To_api_NodeSelectorRequirement(in, out, s) +} + +func autoConvert_api_NodeSelectorRequirement_To_v1_NodeSelectorRequirement(in *api.NodeSelectorRequirement, out *NodeSelectorRequirement, s conversion.Scope) error { + out.Key = in.Key + out.Operator = NodeSelectorOperator(in.Operator) + out.Values = in.Values + return nil +} + +func Convert_api_NodeSelectorRequirement_To_v1_NodeSelectorRequirement(in *api.NodeSelectorRequirement, out *NodeSelectorRequirement, s conversion.Scope) error { + return autoConvert_api_NodeSelectorRequirement_To_v1_NodeSelectorRequirement(in, out, s) +} + +func autoConvert_v1_NodeSelectorTerm_To_api_NodeSelectorTerm(in *NodeSelectorTerm, out *api.NodeSelectorTerm, s conversion.Scope) error { + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]api.NodeSelectorRequirement, len(*in)) + for i := range *in { + if err := Convert_v1_NodeSelectorRequirement_To_api_NodeSelectorRequirement(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil +} + +func Convert_v1_NodeSelectorTerm_To_api_NodeSelectorTerm(in *NodeSelectorTerm, out *api.NodeSelectorTerm, s conversion.Scope) error { + return autoConvert_v1_NodeSelectorTerm_To_api_NodeSelectorTerm(in, out, s) +} + +func autoConvert_api_NodeSelectorTerm_To_v1_NodeSelectorTerm(in *api.NodeSelectorTerm, out *NodeSelectorTerm, s conversion.Scope) error { + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]NodeSelectorRequirement, len(*in)) + for i := range *in { + if err := Convert_api_NodeSelectorRequirement_To_v1_NodeSelectorRequirement(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil +} + +func Convert_api_NodeSelectorTerm_To_v1_NodeSelectorTerm(in *api.NodeSelectorTerm, out *NodeSelectorTerm, s conversion.Scope) error { + return autoConvert_api_NodeSelectorTerm_To_v1_NodeSelectorTerm(in, out, s) +} + +func autoConvert_v1_NodeSpec_To_api_NodeSpec(in *NodeSpec, out *api.NodeSpec, s conversion.Scope) error { + out.PodCIDR = in.PodCIDR + out.ExternalID = in.ExternalID + out.ProviderID = in.ProviderID + out.Unschedulable = in.Unschedulable + return nil +} + +func Convert_v1_NodeSpec_To_api_NodeSpec(in *NodeSpec, out *api.NodeSpec, s conversion.Scope) error { + return autoConvert_v1_NodeSpec_To_api_NodeSpec(in, out, s) +} + +func autoConvert_api_NodeSpec_To_v1_NodeSpec(in *api.NodeSpec, out *NodeSpec, s conversion.Scope) error { + out.PodCIDR = in.PodCIDR + out.ExternalID = in.ExternalID + out.ProviderID = in.ProviderID + out.Unschedulable = in.Unschedulable + return nil +} + +func Convert_api_NodeSpec_To_v1_NodeSpec(in *api.NodeSpec, out *NodeSpec, s conversion.Scope) error { + return autoConvert_api_NodeSpec_To_v1_NodeSpec(in, out, s) +} + +func autoConvert_v1_NodeStatus_To_api_NodeStatus(in *NodeStatus, out *api.NodeStatus, s conversion.Scope) error { + SetDefaults_NodeStatus(in) + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Capacity, &out.Capacity, s); err != nil { + return err + } + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Allocatable, &out.Allocatable, s); err != nil { + return err + } + out.Phase = api.NodePhase(in.Phase) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]api.NodeCondition, len(*in)) + for i := range *in { + if err := Convert_v1_NodeCondition_To_api_NodeCondition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]api.NodeAddress, len(*in)) + for i := range *in { + if err := Convert_v1_NodeAddress_To_api_NodeAddress(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Addresses = nil + } + if err := Convert_v1_NodeDaemonEndpoints_To_api_NodeDaemonEndpoints(&in.DaemonEndpoints, &out.DaemonEndpoints, s); err != nil { + return err + } + if err := Convert_v1_NodeSystemInfo_To_api_NodeSystemInfo(&in.NodeInfo, &out.NodeInfo, s); err != nil { + return err + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]api.ContainerImage, len(*in)) + for i := range *in { + if err := Convert_v1_ContainerImage_To_api_ContainerImage(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Images = nil + } + if in.VolumesInUse != nil { + in, out := &in.VolumesInUse, &out.VolumesInUse + *out = make([]api.UniqueVolumeName, len(*in)) + for i := range *in { + (*out)[i] = api.UniqueVolumeName((*in)[i]) + } + } else { + out.VolumesInUse = nil + } + if in.VolumesAttached != nil { + in, out := &in.VolumesAttached, &out.VolumesAttached + *out = make([]api.AttachedVolume, len(*in)) + for i := range *in { + if err := Convert_v1_AttachedVolume_To_api_AttachedVolume(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.VolumesAttached = nil + } + return nil +} + +func Convert_v1_NodeStatus_To_api_NodeStatus(in *NodeStatus, out *api.NodeStatus, s conversion.Scope) error { + return autoConvert_v1_NodeStatus_To_api_NodeStatus(in, out, s) +} + +func autoConvert_api_NodeStatus_To_v1_NodeStatus(in *api.NodeStatus, out *NodeStatus, s conversion.Scope) error { + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Capacity = nil + } + if in.Allocatable != nil { + in, out := &in.Allocatable, &out.Allocatable + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Allocatable = nil + } + out.Phase = NodePhase(in.Phase) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]NodeCondition, len(*in)) + for i := range *in { + if err := Convert_api_NodeCondition_To_v1_NodeCondition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]NodeAddress, len(*in)) + for i := range *in { + if err := Convert_api_NodeAddress_To_v1_NodeAddress(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Addresses = nil + } + if err := Convert_api_NodeDaemonEndpoints_To_v1_NodeDaemonEndpoints(&in.DaemonEndpoints, &out.DaemonEndpoints, s); err != nil { + return err + } + if err := Convert_api_NodeSystemInfo_To_v1_NodeSystemInfo(&in.NodeInfo, &out.NodeInfo, s); err != nil { + return err + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ContainerImage, len(*in)) + for i := range *in { + if err := Convert_api_ContainerImage_To_v1_ContainerImage(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Images = nil + } + if in.VolumesInUse != nil { + in, out := &in.VolumesInUse, &out.VolumesInUse + *out = make([]UniqueVolumeName, len(*in)) + for i := range *in { + (*out)[i] = UniqueVolumeName((*in)[i]) + } + } else { + out.VolumesInUse = nil + } + if in.VolumesAttached != nil { + in, out := &in.VolumesAttached, &out.VolumesAttached + *out = make([]AttachedVolume, len(*in)) + for i := range *in { + if err := Convert_api_AttachedVolume_To_v1_AttachedVolume(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.VolumesAttached = nil + } + return nil +} + +func Convert_api_NodeStatus_To_v1_NodeStatus(in *api.NodeStatus, out *NodeStatus, s conversion.Scope) error { + return autoConvert_api_NodeStatus_To_v1_NodeStatus(in, out, s) +} + +func autoConvert_v1_NodeSystemInfo_To_api_NodeSystemInfo(in *NodeSystemInfo, out *api.NodeSystemInfo, s conversion.Scope) error { + out.MachineID = in.MachineID + out.SystemUUID = in.SystemUUID + out.BootID = in.BootID + out.KernelVersion = in.KernelVersion + out.OSImage = in.OSImage + out.ContainerRuntimeVersion = in.ContainerRuntimeVersion + out.KubeletVersion = in.KubeletVersion + out.KubeProxyVersion = in.KubeProxyVersion + out.OperatingSystem = in.OperatingSystem + out.Architecture = in.Architecture + return nil +} + +func Convert_v1_NodeSystemInfo_To_api_NodeSystemInfo(in *NodeSystemInfo, out *api.NodeSystemInfo, s conversion.Scope) error { + return autoConvert_v1_NodeSystemInfo_To_api_NodeSystemInfo(in, out, s) +} + +func autoConvert_api_NodeSystemInfo_To_v1_NodeSystemInfo(in *api.NodeSystemInfo, out *NodeSystemInfo, s conversion.Scope) error { + out.MachineID = in.MachineID + out.SystemUUID = in.SystemUUID + out.BootID = in.BootID + out.KernelVersion = in.KernelVersion + out.OSImage = in.OSImage + out.ContainerRuntimeVersion = in.ContainerRuntimeVersion + out.KubeletVersion = in.KubeletVersion + out.KubeProxyVersion = in.KubeProxyVersion + out.OperatingSystem = in.OperatingSystem + out.Architecture = in.Architecture + return nil +} + +func Convert_api_NodeSystemInfo_To_v1_NodeSystemInfo(in *api.NodeSystemInfo, out *NodeSystemInfo, s conversion.Scope) error { + return autoConvert_api_NodeSystemInfo_To_v1_NodeSystemInfo(in, out, s) +} + +func autoConvert_v1_ObjectFieldSelector_To_api_ObjectFieldSelector(in *ObjectFieldSelector, out *api.ObjectFieldSelector, s conversion.Scope) error { + SetDefaults_ObjectFieldSelector(in) + out.APIVersion = in.APIVersion + out.FieldPath = in.FieldPath + return nil +} + +func Convert_v1_ObjectFieldSelector_To_api_ObjectFieldSelector(in *ObjectFieldSelector, out *api.ObjectFieldSelector, s conversion.Scope) error { + return autoConvert_v1_ObjectFieldSelector_To_api_ObjectFieldSelector(in, out, s) +} + +func autoConvert_api_ObjectFieldSelector_To_v1_ObjectFieldSelector(in *api.ObjectFieldSelector, out *ObjectFieldSelector, s conversion.Scope) error { + out.APIVersion = in.APIVersion + out.FieldPath = in.FieldPath + return nil +} + +func Convert_api_ObjectFieldSelector_To_v1_ObjectFieldSelector(in *api.ObjectFieldSelector, out *ObjectFieldSelector, s conversion.Scope) error { + return autoConvert_api_ObjectFieldSelector_To_v1_ObjectFieldSelector(in, out, s) +} + +func autoConvert_v1_ObjectMeta_To_api_ObjectMeta(in *ObjectMeta, out *api.ObjectMeta, s conversion.Scope) error { + out.Name = in.Name + out.GenerateName = in.GenerateName + out.Namespace = in.Namespace + out.SelfLink = in.SelfLink + out.UID = types.UID(in.UID) + out.ResourceVersion = in.ResourceVersion + out.Generation = in.Generation + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.CreationTimestamp, &out.CreationTimestamp, s); err != nil { + return err + } + out.DeletionTimestamp = in.DeletionTimestamp + out.DeletionGracePeriodSeconds = in.DeletionGracePeriodSeconds + out.Labels = in.Labels + out.Annotations = in.Annotations + if in.OwnerReferences != nil { + in, out := &in.OwnerReferences, &out.OwnerReferences + *out = make([]api.OwnerReference, len(*in)) + for i := range *in { + if err := Convert_v1_OwnerReference_To_api_OwnerReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.OwnerReferences = nil + } + out.Finalizers = in.Finalizers + out.ClusterName = in.ClusterName + return nil +} + +func Convert_v1_ObjectMeta_To_api_ObjectMeta(in *ObjectMeta, out *api.ObjectMeta, s conversion.Scope) error { + return autoConvert_v1_ObjectMeta_To_api_ObjectMeta(in, out, s) +} + +func autoConvert_api_ObjectMeta_To_v1_ObjectMeta(in *api.ObjectMeta, out *ObjectMeta, s conversion.Scope) error { + out.Name = in.Name + out.GenerateName = in.GenerateName + out.Namespace = in.Namespace + out.SelfLink = in.SelfLink + out.UID = types.UID(in.UID) + out.ResourceVersion = in.ResourceVersion + out.Generation = in.Generation + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.CreationTimestamp, &out.CreationTimestamp, s); err != nil { + return err + } + out.DeletionTimestamp = in.DeletionTimestamp + out.DeletionGracePeriodSeconds = in.DeletionGracePeriodSeconds + out.Labels = in.Labels + out.Annotations = in.Annotations + if in.OwnerReferences != nil { + in, out := &in.OwnerReferences, &out.OwnerReferences + *out = make([]OwnerReference, len(*in)) + for i := range *in { + if err := Convert_api_OwnerReference_To_v1_OwnerReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.OwnerReferences = nil + } + out.Finalizers = in.Finalizers + out.ClusterName = in.ClusterName + return nil +} + +func Convert_api_ObjectMeta_To_v1_ObjectMeta(in *api.ObjectMeta, out *ObjectMeta, s conversion.Scope) error { + return autoConvert_api_ObjectMeta_To_v1_ObjectMeta(in, out, s) +} + +func autoConvert_v1_ObjectReference_To_api_ObjectReference(in *ObjectReference, out *api.ObjectReference, s conversion.Scope) error { + out.Kind = in.Kind + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = types.UID(in.UID) + out.APIVersion = in.APIVersion + out.ResourceVersion = in.ResourceVersion + out.FieldPath = in.FieldPath + return nil +} + +func Convert_v1_ObjectReference_To_api_ObjectReference(in *ObjectReference, out *api.ObjectReference, s conversion.Scope) error { + return autoConvert_v1_ObjectReference_To_api_ObjectReference(in, out, s) +} + +func autoConvert_api_ObjectReference_To_v1_ObjectReference(in *api.ObjectReference, out *ObjectReference, s conversion.Scope) error { + out.Kind = in.Kind + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = types.UID(in.UID) + out.APIVersion = in.APIVersion + out.ResourceVersion = in.ResourceVersion + out.FieldPath = in.FieldPath + return nil +} + +func Convert_api_ObjectReference_To_v1_ObjectReference(in *api.ObjectReference, out *ObjectReference, s conversion.Scope) error { + return autoConvert_api_ObjectReference_To_v1_ObjectReference(in, out, s) +} + +func autoConvert_v1_OwnerReference_To_api_OwnerReference(in *OwnerReference, out *api.OwnerReference, s conversion.Scope) error { + out.APIVersion = in.APIVersion + out.Kind = in.Kind + out.Name = in.Name + out.UID = types.UID(in.UID) + out.Controller = in.Controller + return nil +} + +func Convert_v1_OwnerReference_To_api_OwnerReference(in *OwnerReference, out *api.OwnerReference, s conversion.Scope) error { + return autoConvert_v1_OwnerReference_To_api_OwnerReference(in, out, s) +} + +func autoConvert_api_OwnerReference_To_v1_OwnerReference(in *api.OwnerReference, out *OwnerReference, s conversion.Scope) error { + out.APIVersion = in.APIVersion + out.Kind = in.Kind + out.Name = in.Name + out.UID = types.UID(in.UID) + out.Controller = in.Controller + return nil +} + +func Convert_api_OwnerReference_To_v1_OwnerReference(in *api.OwnerReference, out *OwnerReference, s conversion.Scope) error { + return autoConvert_api_OwnerReference_To_v1_OwnerReference(in, out, s) +} + +func autoConvert_v1_PersistentVolume_To_api_PersistentVolume(in *PersistentVolume, out *api.PersistentVolume, s conversion.Scope) error { + SetDefaults_PersistentVolume(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_PersistentVolumeSpec_To_api_PersistentVolumeSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_PersistentVolumeStatus_To_api_PersistentVolumeStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_PersistentVolume_To_api_PersistentVolume(in *PersistentVolume, out *api.PersistentVolume, s conversion.Scope) error { + return autoConvert_v1_PersistentVolume_To_api_PersistentVolume(in, out, s) +} + +func autoConvert_api_PersistentVolume_To_v1_PersistentVolume(in *api.PersistentVolume, out *PersistentVolume, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_PersistentVolumeSpec_To_v1_PersistentVolumeSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_api_PersistentVolumeStatus_To_v1_PersistentVolumeStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_api_PersistentVolume_To_v1_PersistentVolume(in *api.PersistentVolume, out *PersistentVolume, s conversion.Scope) error { + return autoConvert_api_PersistentVolume_To_v1_PersistentVolume(in, out, s) +} + +func autoConvert_v1_PersistentVolumeClaim_To_api_PersistentVolumeClaim(in *PersistentVolumeClaim, out *api.PersistentVolumeClaim, s conversion.Scope) error { + SetDefaults_PersistentVolumeClaim(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_PersistentVolumeClaimSpec_To_api_PersistentVolumeClaimSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_PersistentVolumeClaimStatus_To_api_PersistentVolumeClaimStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_PersistentVolumeClaim_To_api_PersistentVolumeClaim(in *PersistentVolumeClaim, out *api.PersistentVolumeClaim, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeClaim_To_api_PersistentVolumeClaim(in, out, s) +} + +func autoConvert_api_PersistentVolumeClaim_To_v1_PersistentVolumeClaim(in *api.PersistentVolumeClaim, out *PersistentVolumeClaim, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_PersistentVolumeClaimSpec_To_v1_PersistentVolumeClaimSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_api_PersistentVolumeClaimStatus_To_v1_PersistentVolumeClaimStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_api_PersistentVolumeClaim_To_v1_PersistentVolumeClaim(in *api.PersistentVolumeClaim, out *PersistentVolumeClaim, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeClaim_To_v1_PersistentVolumeClaim(in, out, s) +} + +func autoConvert_v1_PersistentVolumeClaimList_To_api_PersistentVolumeClaimList(in *PersistentVolumeClaimList, out *api.PersistentVolumeClaimList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.PersistentVolumeClaim, len(*in)) + for i := range *in { + if err := Convert_v1_PersistentVolumeClaim_To_api_PersistentVolumeClaim(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_PersistentVolumeClaimList_To_api_PersistentVolumeClaimList(in *PersistentVolumeClaimList, out *api.PersistentVolumeClaimList, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeClaimList_To_api_PersistentVolumeClaimList(in, out, s) +} + +func autoConvert_api_PersistentVolumeClaimList_To_v1_PersistentVolumeClaimList(in *api.PersistentVolumeClaimList, out *PersistentVolumeClaimList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolumeClaim, len(*in)) + for i := range *in { + if err := Convert_api_PersistentVolumeClaim_To_v1_PersistentVolumeClaim(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_PersistentVolumeClaimList_To_v1_PersistentVolumeClaimList(in *api.PersistentVolumeClaimList, out *PersistentVolumeClaimList, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeClaimList_To_v1_PersistentVolumeClaimList(in, out, s) +} + +func autoConvert_v1_PersistentVolumeClaimSpec_To_api_PersistentVolumeClaimSpec(in *PersistentVolumeClaimSpec, out *api.PersistentVolumeClaimSpec, s conversion.Scope) error { + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]api.PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = api.PersistentVolumeAccessMode((*in)[i]) + } + } else { + out.AccessModes = nil + } + out.Selector = in.Selector + if err := Convert_v1_ResourceRequirements_To_api_ResourceRequirements(&in.Resources, &out.Resources, s); err != nil { + return err + } + out.VolumeName = in.VolumeName + return nil +} + +func Convert_v1_PersistentVolumeClaimSpec_To_api_PersistentVolumeClaimSpec(in *PersistentVolumeClaimSpec, out *api.PersistentVolumeClaimSpec, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeClaimSpec_To_api_PersistentVolumeClaimSpec(in, out, s) +} + +func autoConvert_api_PersistentVolumeClaimSpec_To_v1_PersistentVolumeClaimSpec(in *api.PersistentVolumeClaimSpec, out *PersistentVolumeClaimSpec, s conversion.Scope) error { + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = PersistentVolumeAccessMode((*in)[i]) + } + } else { + out.AccessModes = nil + } + out.Selector = in.Selector + if err := Convert_api_ResourceRequirements_To_v1_ResourceRequirements(&in.Resources, &out.Resources, s); err != nil { + return err + } + out.VolumeName = in.VolumeName + return nil +} + +func Convert_api_PersistentVolumeClaimSpec_To_v1_PersistentVolumeClaimSpec(in *api.PersistentVolumeClaimSpec, out *PersistentVolumeClaimSpec, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeClaimSpec_To_v1_PersistentVolumeClaimSpec(in, out, s) +} + +func autoConvert_v1_PersistentVolumeClaimStatus_To_api_PersistentVolumeClaimStatus(in *PersistentVolumeClaimStatus, out *api.PersistentVolumeClaimStatus, s conversion.Scope) error { + out.Phase = api.PersistentVolumeClaimPhase(in.Phase) + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]api.PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = api.PersistentVolumeAccessMode((*in)[i]) + } + } else { + out.AccessModes = nil + } + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Capacity, &out.Capacity, s); err != nil { + return err + } + return nil +} + +func Convert_v1_PersistentVolumeClaimStatus_To_api_PersistentVolumeClaimStatus(in *PersistentVolumeClaimStatus, out *api.PersistentVolumeClaimStatus, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeClaimStatus_To_api_PersistentVolumeClaimStatus(in, out, s) +} + +func autoConvert_api_PersistentVolumeClaimStatus_To_v1_PersistentVolumeClaimStatus(in *api.PersistentVolumeClaimStatus, out *PersistentVolumeClaimStatus, s conversion.Scope) error { + out.Phase = PersistentVolumeClaimPhase(in.Phase) + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = PersistentVolumeAccessMode((*in)[i]) + } + } else { + out.AccessModes = nil + } + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Capacity = nil + } + return nil +} + +func Convert_api_PersistentVolumeClaimStatus_To_v1_PersistentVolumeClaimStatus(in *api.PersistentVolumeClaimStatus, out *PersistentVolumeClaimStatus, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeClaimStatus_To_v1_PersistentVolumeClaimStatus(in, out, s) +} + +func autoConvert_v1_PersistentVolumeClaimVolumeSource_To_api_PersistentVolumeClaimVolumeSource(in *PersistentVolumeClaimVolumeSource, out *api.PersistentVolumeClaimVolumeSource, s conversion.Scope) error { + out.ClaimName = in.ClaimName + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_PersistentVolumeClaimVolumeSource_To_api_PersistentVolumeClaimVolumeSource(in *PersistentVolumeClaimVolumeSource, out *api.PersistentVolumeClaimVolumeSource, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeClaimVolumeSource_To_api_PersistentVolumeClaimVolumeSource(in, out, s) +} + +func autoConvert_api_PersistentVolumeClaimVolumeSource_To_v1_PersistentVolumeClaimVolumeSource(in *api.PersistentVolumeClaimVolumeSource, out *PersistentVolumeClaimVolumeSource, s conversion.Scope) error { + out.ClaimName = in.ClaimName + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_PersistentVolumeClaimVolumeSource_To_v1_PersistentVolumeClaimVolumeSource(in *api.PersistentVolumeClaimVolumeSource, out *PersistentVolumeClaimVolumeSource, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeClaimVolumeSource_To_v1_PersistentVolumeClaimVolumeSource(in, out, s) +} + +func autoConvert_v1_PersistentVolumeList_To_api_PersistentVolumeList(in *PersistentVolumeList, out *api.PersistentVolumeList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.PersistentVolume, len(*in)) + for i := range *in { + if err := Convert_v1_PersistentVolume_To_api_PersistentVolume(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_PersistentVolumeList_To_api_PersistentVolumeList(in *PersistentVolumeList, out *api.PersistentVolumeList, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeList_To_api_PersistentVolumeList(in, out, s) +} + +func autoConvert_api_PersistentVolumeList_To_v1_PersistentVolumeList(in *api.PersistentVolumeList, out *PersistentVolumeList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolume, len(*in)) + for i := range *in { + if err := Convert_api_PersistentVolume_To_v1_PersistentVolume(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_PersistentVolumeList_To_v1_PersistentVolumeList(in *api.PersistentVolumeList, out *PersistentVolumeList, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeList_To_v1_PersistentVolumeList(in, out, s) +} + +func autoConvert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(in *PersistentVolumeSource, out *api.PersistentVolumeSource, s conversion.Scope) error { + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(api.GCEPersistentDiskVolumeSource) + if err := Convert_v1_GCEPersistentDiskVolumeSource_To_api_GCEPersistentDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(api.AWSElasticBlockStoreVolumeSource) + if err := Convert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AWSElasticBlockStore = nil + } + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(api.HostPathVolumeSource) + if err := Convert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.HostPath = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(api.GlusterfsVolumeSource) + if err := Convert_v1_GlusterfsVolumeSource_To_api_GlusterfsVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Glusterfs = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(api.NFSVolumeSource) + if err := Convert_v1_NFSVolumeSource_To_api_NFSVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.NFS = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(api.RBDVolumeSource) + if err := Convert_v1_RBDVolumeSource_To_api_RBDVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(api.ISCSIVolumeSource) + if err := Convert_v1_ISCSIVolumeSource_To_api_ISCSIVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.ISCSI = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(api.CinderVolumeSource) + if err := Convert_v1_CinderVolumeSource_To_api_CinderVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(api.CephFSVolumeSource) + if err := Convert_v1_CephFSVolumeSource_To_api_CephFSVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(api.FCVolumeSource) + if err := Convert_v1_FCVolumeSource_To_api_FCVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.FC = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(api.FlockerVolumeSource) + if err := Convert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Flocker = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(api.FlexVolumeSource) + if err := Convert_v1_FlexVolumeSource_To_api_FlexVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(api.AzureFileVolumeSource) + if err := Convert_v1_AzureFileVolumeSource_To_api_AzureFileVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureFile = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(api.VsphereVirtualDiskVolumeSource) + if err := Convert_v1_VsphereVirtualDiskVolumeSource_To_api_VsphereVirtualDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.VsphereVolume = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(api.QuobyteVolumeSource) + if err := Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Quobyte = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(api.AzureDiskVolumeSource) + if err := Convert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil +} + +func Convert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(in *PersistentVolumeSource, out *api.PersistentVolumeSource, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(in, out, s) +} + +func autoConvert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in *api.PersistentVolumeSource, out *PersistentVolumeSource, s conversion.Scope) error { + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + if err := Convert_api_GCEPersistentDiskVolumeSource_To_v1_GCEPersistentDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + if err := Convert_api_AWSElasticBlockStoreVolumeSource_To_v1_AWSElasticBlockStoreVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AWSElasticBlockStore = nil + } + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + if err := Convert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.HostPath = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + if err := Convert_api_GlusterfsVolumeSource_To_v1_GlusterfsVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Glusterfs = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + if err := Convert_api_NFSVolumeSource_To_v1_NFSVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.NFS = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := Convert_api_RBDVolumeSource_To_v1_RBDVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + if err := Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Quobyte = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + if err := Convert_api_ISCSIVolumeSource_To_v1_ISCSIVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.ISCSI = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := Convert_api_FlexVolumeSource_To_v1_FlexVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + if err := Convert_api_CinderVolumeSource_To_v1_CinderVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := Convert_api_CephFSVolumeSource_To_v1_CephFSVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := Convert_api_FCVolumeSource_To_v1_FCVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.FC = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + if err := Convert_api_FlockerVolumeSource_To_v1_FlockerVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Flocker = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + if err := Convert_api_AzureFileVolumeSource_To_v1_AzureFileVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureFile = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + if err := Convert_api_VsphereVirtualDiskVolumeSource_To_v1_VsphereVirtualDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.VsphereVolume = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := Convert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil +} + +func Convert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in *api.PersistentVolumeSource, out *PersistentVolumeSource, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in, out, s) +} + +func autoConvert_v1_PersistentVolumeSpec_To_api_PersistentVolumeSpec(in *PersistentVolumeSpec, out *api.PersistentVolumeSpec, s conversion.Scope) error { + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Capacity, &out.Capacity, s); err != nil { + return err + } + if err := Convert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(&in.PersistentVolumeSource, &out.PersistentVolumeSource, s); err != nil { + return err + } + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]api.PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = api.PersistentVolumeAccessMode((*in)[i]) + } + } else { + out.AccessModes = nil + } + if in.ClaimRef != nil { + in, out := &in.ClaimRef, &out.ClaimRef + *out = new(api.ObjectReference) + if err := Convert_v1_ObjectReference_To_api_ObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.ClaimRef = nil + } + out.PersistentVolumeReclaimPolicy = api.PersistentVolumeReclaimPolicy(in.PersistentVolumeReclaimPolicy) + return nil +} + +func Convert_v1_PersistentVolumeSpec_To_api_PersistentVolumeSpec(in *PersistentVolumeSpec, out *api.PersistentVolumeSpec, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeSpec_To_api_PersistentVolumeSpec(in, out, s) +} + +func autoConvert_api_PersistentVolumeSpec_To_v1_PersistentVolumeSpec(in *api.PersistentVolumeSpec, out *PersistentVolumeSpec, s conversion.Scope) error { + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Capacity = nil + } + if err := Convert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(&in.PersistentVolumeSource, &out.PersistentVolumeSource, s); err != nil { + return err + } + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = PersistentVolumeAccessMode((*in)[i]) + } + } else { + out.AccessModes = nil + } + if in.ClaimRef != nil { + in, out := &in.ClaimRef, &out.ClaimRef + *out = new(ObjectReference) + if err := Convert_api_ObjectReference_To_v1_ObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.ClaimRef = nil + } + out.PersistentVolumeReclaimPolicy = PersistentVolumeReclaimPolicy(in.PersistentVolumeReclaimPolicy) + return nil +} + +func Convert_api_PersistentVolumeSpec_To_v1_PersistentVolumeSpec(in *api.PersistentVolumeSpec, out *PersistentVolumeSpec, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeSpec_To_v1_PersistentVolumeSpec(in, out, s) +} + +func autoConvert_v1_PersistentVolumeStatus_To_api_PersistentVolumeStatus(in *PersistentVolumeStatus, out *api.PersistentVolumeStatus, s conversion.Scope) error { + out.Phase = api.PersistentVolumePhase(in.Phase) + out.Message = in.Message + out.Reason = in.Reason + return nil +} + +func Convert_v1_PersistentVolumeStatus_To_api_PersistentVolumeStatus(in *PersistentVolumeStatus, out *api.PersistentVolumeStatus, s conversion.Scope) error { + return autoConvert_v1_PersistentVolumeStatus_To_api_PersistentVolumeStatus(in, out, s) +} + +func autoConvert_api_PersistentVolumeStatus_To_v1_PersistentVolumeStatus(in *api.PersistentVolumeStatus, out *PersistentVolumeStatus, s conversion.Scope) error { + out.Phase = PersistentVolumePhase(in.Phase) + out.Message = in.Message + out.Reason = in.Reason + return nil +} + +func Convert_api_PersistentVolumeStatus_To_v1_PersistentVolumeStatus(in *api.PersistentVolumeStatus, out *PersistentVolumeStatus, s conversion.Scope) error { + return autoConvert_api_PersistentVolumeStatus_To_v1_PersistentVolumeStatus(in, out, s) +} + +func autoConvert_v1_Pod_To_api_Pod(in *Pod, out *api.Pod, s conversion.Scope) error { + SetDefaults_Pod(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_PodSpec_To_api_PodSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_PodStatus_To_api_PodStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func autoConvert_api_Pod_To_v1_Pod(in *api.Pod, out *Pod, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_PodSpec_To_v1_PodSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_api_PodStatus_To_v1_PodStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func autoConvert_v1_PodAffinity_To_api_PodAffinity(in *PodAffinity, out *api.PodAffinity, s conversion.Scope) error { + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]api.PodAffinityTerm, len(*in)) + for i := range *in { + if err := Convert_v1_PodAffinityTerm_To_api_PodAffinityTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]api.WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := Convert_v1_WeightedPodAffinityTerm_To_api_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil +} + +func Convert_v1_PodAffinity_To_api_PodAffinity(in *PodAffinity, out *api.PodAffinity, s conversion.Scope) error { + return autoConvert_v1_PodAffinity_To_api_PodAffinity(in, out, s) +} + +func autoConvert_api_PodAffinity_To_v1_PodAffinity(in *api.PodAffinity, out *PodAffinity, s conversion.Scope) error { + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := Convert_api_PodAffinityTerm_To_v1_PodAffinityTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := Convert_api_WeightedPodAffinityTerm_To_v1_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil +} + +func Convert_api_PodAffinity_To_v1_PodAffinity(in *api.PodAffinity, out *PodAffinity, s conversion.Scope) error { + return autoConvert_api_PodAffinity_To_v1_PodAffinity(in, out, s) +} + +func autoConvert_v1_PodAffinityTerm_To_api_PodAffinityTerm(in *PodAffinityTerm, out *api.PodAffinityTerm, s conversion.Scope) error { + out.LabelSelector = in.LabelSelector + out.Namespaces = in.Namespaces + out.TopologyKey = in.TopologyKey + return nil +} + +func Convert_v1_PodAffinityTerm_To_api_PodAffinityTerm(in *PodAffinityTerm, out *api.PodAffinityTerm, s conversion.Scope) error { + return autoConvert_v1_PodAffinityTerm_To_api_PodAffinityTerm(in, out, s) +} + +func autoConvert_api_PodAffinityTerm_To_v1_PodAffinityTerm(in *api.PodAffinityTerm, out *PodAffinityTerm, s conversion.Scope) error { + out.LabelSelector = in.LabelSelector + out.Namespaces = in.Namespaces + out.TopologyKey = in.TopologyKey + return nil +} + +func Convert_api_PodAffinityTerm_To_v1_PodAffinityTerm(in *api.PodAffinityTerm, out *PodAffinityTerm, s conversion.Scope) error { + return autoConvert_api_PodAffinityTerm_To_v1_PodAffinityTerm(in, out, s) +} + +func autoConvert_v1_PodAntiAffinity_To_api_PodAntiAffinity(in *PodAntiAffinity, out *api.PodAntiAffinity, s conversion.Scope) error { + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]api.PodAffinityTerm, len(*in)) + for i := range *in { + if err := Convert_v1_PodAffinityTerm_To_api_PodAffinityTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]api.WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := Convert_v1_WeightedPodAffinityTerm_To_api_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil +} + +func Convert_v1_PodAntiAffinity_To_api_PodAntiAffinity(in *PodAntiAffinity, out *api.PodAntiAffinity, s conversion.Scope) error { + return autoConvert_v1_PodAntiAffinity_To_api_PodAntiAffinity(in, out, s) +} + +func autoConvert_api_PodAntiAffinity_To_v1_PodAntiAffinity(in *api.PodAntiAffinity, out *PodAntiAffinity, s conversion.Scope) error { + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := Convert_api_PodAffinityTerm_To_v1_PodAffinityTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := Convert_api_WeightedPodAffinityTerm_To_v1_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil +} + +func Convert_api_PodAntiAffinity_To_v1_PodAntiAffinity(in *api.PodAntiAffinity, out *PodAntiAffinity, s conversion.Scope) error { + return autoConvert_api_PodAntiAffinity_To_v1_PodAntiAffinity(in, out, s) +} + +func autoConvert_v1_PodAttachOptions_To_api_PodAttachOptions(in *PodAttachOptions, out *api.PodAttachOptions, s conversion.Scope) error { + SetDefaults_PodAttachOptions(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + return nil +} + +func Convert_v1_PodAttachOptions_To_api_PodAttachOptions(in *PodAttachOptions, out *api.PodAttachOptions, s conversion.Scope) error { + return autoConvert_v1_PodAttachOptions_To_api_PodAttachOptions(in, out, s) +} + +func autoConvert_api_PodAttachOptions_To_v1_PodAttachOptions(in *api.PodAttachOptions, out *PodAttachOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + return nil +} + +func Convert_api_PodAttachOptions_To_v1_PodAttachOptions(in *api.PodAttachOptions, out *PodAttachOptions, s conversion.Scope) error { + return autoConvert_api_PodAttachOptions_To_v1_PodAttachOptions(in, out, s) +} + +func autoConvert_v1_PodCondition_To_api_PodCondition(in *PodCondition, out *api.PodCondition, s conversion.Scope) error { + out.Type = api.PodConditionType(in.Type) + out.Status = api.ConditionStatus(in.Status) + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastProbeTime, &out.LastProbeTime, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_v1_PodCondition_To_api_PodCondition(in *PodCondition, out *api.PodCondition, s conversion.Scope) error { + return autoConvert_v1_PodCondition_To_api_PodCondition(in, out, s) +} + +func autoConvert_api_PodCondition_To_v1_PodCondition(in *api.PodCondition, out *PodCondition, s conversion.Scope) error { + out.Type = PodConditionType(in.Type) + out.Status = ConditionStatus(in.Status) + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastProbeTime, &out.LastProbeTime, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastTransitionTime, &out.LastTransitionTime, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_api_PodCondition_To_v1_PodCondition(in *api.PodCondition, out *PodCondition, s conversion.Scope) error { + return autoConvert_api_PodCondition_To_v1_PodCondition(in, out, s) +} + +func autoConvert_v1_PodExecOptions_To_api_PodExecOptions(in *PodExecOptions, out *api.PodExecOptions, s conversion.Scope) error { + SetDefaults_PodExecOptions(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + out.Command = in.Command + return nil +} + +func Convert_v1_PodExecOptions_To_api_PodExecOptions(in *PodExecOptions, out *api.PodExecOptions, s conversion.Scope) error { + return autoConvert_v1_PodExecOptions_To_api_PodExecOptions(in, out, s) +} + +func autoConvert_api_PodExecOptions_To_v1_PodExecOptions(in *api.PodExecOptions, out *PodExecOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + out.Command = in.Command + return nil +} + +func Convert_api_PodExecOptions_To_v1_PodExecOptions(in *api.PodExecOptions, out *PodExecOptions, s conversion.Scope) error { + return autoConvert_api_PodExecOptions_To_v1_PodExecOptions(in, out, s) +} + +func autoConvert_v1_PodList_To_api_PodList(in *PodList, out *api.PodList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.Pod, len(*in)) + for i := range *in { + if err := Convert_v1_Pod_To_api_Pod(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_PodList_To_api_PodList(in *PodList, out *api.PodList, s conversion.Scope) error { + return autoConvert_v1_PodList_To_api_PodList(in, out, s) +} + +func autoConvert_api_PodList_To_v1_PodList(in *api.PodList, out *PodList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Pod, len(*in)) + for i := range *in { + if err := Convert_api_Pod_To_v1_Pod(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_PodList_To_v1_PodList(in *api.PodList, out *PodList, s conversion.Scope) error { + return autoConvert_api_PodList_To_v1_PodList(in, out, s) +} + +func autoConvert_v1_PodLogOptions_To_api_PodLogOptions(in *PodLogOptions, out *api.PodLogOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + out.SinceSeconds = in.SinceSeconds + out.SinceTime = in.SinceTime + out.Timestamps = in.Timestamps + out.TailLines = in.TailLines + out.LimitBytes = in.LimitBytes + return nil +} + +func Convert_v1_PodLogOptions_To_api_PodLogOptions(in *PodLogOptions, out *api.PodLogOptions, s conversion.Scope) error { + return autoConvert_v1_PodLogOptions_To_api_PodLogOptions(in, out, s) +} + +func autoConvert_api_PodLogOptions_To_v1_PodLogOptions(in *api.PodLogOptions, out *PodLogOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + out.SinceSeconds = in.SinceSeconds + out.SinceTime = in.SinceTime + out.Timestamps = in.Timestamps + out.TailLines = in.TailLines + out.LimitBytes = in.LimitBytes + return nil +} + +func Convert_api_PodLogOptions_To_v1_PodLogOptions(in *api.PodLogOptions, out *PodLogOptions, s conversion.Scope) error { + return autoConvert_api_PodLogOptions_To_v1_PodLogOptions(in, out, s) +} + +func autoConvert_v1_PodProxyOptions_To_api_PodProxyOptions(in *PodProxyOptions, out *api.PodProxyOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Path = in.Path + return nil +} + +func Convert_v1_PodProxyOptions_To_api_PodProxyOptions(in *PodProxyOptions, out *api.PodProxyOptions, s conversion.Scope) error { + return autoConvert_v1_PodProxyOptions_To_api_PodProxyOptions(in, out, s) +} + +func autoConvert_api_PodProxyOptions_To_v1_PodProxyOptions(in *api.PodProxyOptions, out *PodProxyOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Path = in.Path + return nil +} + +func Convert_api_PodProxyOptions_To_v1_PodProxyOptions(in *api.PodProxyOptions, out *PodProxyOptions, s conversion.Scope) error { + return autoConvert_api_PodProxyOptions_To_v1_PodProxyOptions(in, out, s) +} + +func autoConvert_v1_PodSecurityContext_To_api_PodSecurityContext(in *PodSecurityContext, out *api.PodSecurityContext, s conversion.Scope) error { + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(api.SELinuxOptions) + if err := Convert_v1_SELinuxOptions_To_api_SELinuxOptions(*in, *out, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + out.RunAsUser = in.RunAsUser + out.RunAsNonRoot = in.RunAsNonRoot + out.SupplementalGroups = in.SupplementalGroups + out.FSGroup = in.FSGroup + return nil +} + +func autoConvert_api_PodSecurityContext_To_v1_PodSecurityContext(in *api.PodSecurityContext, out *PodSecurityContext, s conversion.Scope) error { + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + if err := Convert_api_SELinuxOptions_To_v1_SELinuxOptions(*in, *out, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + out.RunAsUser = in.RunAsUser + out.RunAsNonRoot = in.RunAsNonRoot + out.SupplementalGroups = in.SupplementalGroups + out.FSGroup = in.FSGroup + return nil +} + +func autoConvert_v1_PodSignature_To_api_PodSignature(in *PodSignature, out *api.PodSignature, s conversion.Scope) error { + if in.PodController != nil { + in, out := &in.PodController, &out.PodController + *out = new(api.OwnerReference) + if err := Convert_v1_OwnerReference_To_api_OwnerReference(*in, *out, s); err != nil { + return err + } + } else { + out.PodController = nil + } + return nil +} + +func Convert_v1_PodSignature_To_api_PodSignature(in *PodSignature, out *api.PodSignature, s conversion.Scope) error { + return autoConvert_v1_PodSignature_To_api_PodSignature(in, out, s) +} + +func autoConvert_api_PodSignature_To_v1_PodSignature(in *api.PodSignature, out *PodSignature, s conversion.Scope) error { + if in.PodController != nil { + in, out := &in.PodController, &out.PodController + *out = new(OwnerReference) + if err := Convert_api_OwnerReference_To_v1_OwnerReference(*in, *out, s); err != nil { + return err + } + } else { + out.PodController = nil + } + return nil +} + +func Convert_api_PodSignature_To_v1_PodSignature(in *api.PodSignature, out *PodSignature, s conversion.Scope) error { + return autoConvert_api_PodSignature_To_v1_PodSignature(in, out, s) +} + +func autoConvert_v1_PodSpec_To_api_PodSpec(in *PodSpec, out *api.PodSpec, s conversion.Scope) error { + SetDefaults_PodSpec(in) + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]api.Volume, len(*in)) + for i := range *in { + if err := Convert_v1_Volume_To_api_Volume(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Volumes = nil + } + if in.InitContainers != nil { + in, out := &in.InitContainers, &out.InitContainers + *out = make([]api.Container, len(*in)) + for i := range *in { + if err := Convert_v1_Container_To_api_Container(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.InitContainers = nil + } + if in.Containers != nil { + in, out := &in.Containers, &out.Containers + *out = make([]api.Container, len(*in)) + for i := range *in { + if err := Convert_v1_Container_To_api_Container(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Containers = nil + } + out.RestartPolicy = api.RestartPolicy(in.RestartPolicy) + out.TerminationGracePeriodSeconds = in.TerminationGracePeriodSeconds + out.ActiveDeadlineSeconds = in.ActiveDeadlineSeconds + out.DNSPolicy = api.DNSPolicy(in.DNSPolicy) + out.NodeSelector = in.NodeSelector + out.ServiceAccountName = in.ServiceAccountName + out.NodeName = in.NodeName + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(api.PodSecurityContext) + if err := Convert_v1_PodSecurityContext_To_api_PodSecurityContext(*in, *out, s); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]api.LocalObjectReference, len(*in)) + for i := range *in { + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ImagePullSecrets = nil + } + out.Hostname = in.Hostname + out.Subdomain = in.Subdomain + return nil +} + +func autoConvert_api_PodSpec_To_v1_PodSpec(in *api.PodSpec, out *PodSpec, s conversion.Scope) error { + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]Volume, len(*in)) + for i := range *in { + if err := Convert_api_Volume_To_v1_Volume(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Volumes = nil + } + if in.InitContainers != nil { + in, out := &in.InitContainers, &out.InitContainers + *out = make([]Container, len(*in)) + for i := range *in { + if err := Convert_api_Container_To_v1_Container(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.InitContainers = nil + } + if in.Containers != nil { + in, out := &in.Containers, &out.Containers + *out = make([]Container, len(*in)) + for i := range *in { + if err := Convert_api_Container_To_v1_Container(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Containers = nil + } + out.RestartPolicy = RestartPolicy(in.RestartPolicy) + out.TerminationGracePeriodSeconds = in.TerminationGracePeriodSeconds + out.ActiveDeadlineSeconds = in.ActiveDeadlineSeconds + out.DNSPolicy = DNSPolicy(in.DNSPolicy) + out.NodeSelector = in.NodeSelector + out.ServiceAccountName = in.ServiceAccountName + out.NodeName = in.NodeName + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(PodSecurityContext) + if err := Convert_api_PodSecurityContext_To_v1_PodSecurityContext(*in, *out, s); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ImagePullSecrets = nil + } + out.Hostname = in.Hostname + out.Subdomain = in.Subdomain + return nil +} + +func autoConvert_v1_PodStatus_To_api_PodStatus(in *PodStatus, out *api.PodStatus, s conversion.Scope) error { + out.Phase = api.PodPhase(in.Phase) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]api.PodCondition, len(*in)) + for i := range *in { + if err := Convert_v1_PodCondition_To_api_PodCondition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + out.Message = in.Message + out.Reason = in.Reason + out.HostIP = in.HostIP + out.PodIP = in.PodIP + out.StartTime = in.StartTime + if in.InitContainerStatuses != nil { + in, out := &in.InitContainerStatuses, &out.InitContainerStatuses + *out = make([]api.ContainerStatus, len(*in)) + for i := range *in { + if err := Convert_v1_ContainerStatus_To_api_ContainerStatus(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.InitContainerStatuses = nil + } + if in.ContainerStatuses != nil { + in, out := &in.ContainerStatuses, &out.ContainerStatuses + *out = make([]api.ContainerStatus, len(*in)) + for i := range *in { + if err := Convert_v1_ContainerStatus_To_api_ContainerStatus(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ContainerStatuses = nil + } + return nil +} + +func Convert_v1_PodStatus_To_api_PodStatus(in *PodStatus, out *api.PodStatus, s conversion.Scope) error { + return autoConvert_v1_PodStatus_To_api_PodStatus(in, out, s) +} + +func autoConvert_api_PodStatus_To_v1_PodStatus(in *api.PodStatus, out *PodStatus, s conversion.Scope) error { + out.Phase = PodPhase(in.Phase) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]PodCondition, len(*in)) + for i := range *in { + if err := Convert_api_PodCondition_To_v1_PodCondition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + out.Message = in.Message + out.Reason = in.Reason + out.HostIP = in.HostIP + out.PodIP = in.PodIP + out.StartTime = in.StartTime + if in.InitContainerStatuses != nil { + in, out := &in.InitContainerStatuses, &out.InitContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := Convert_api_ContainerStatus_To_v1_ContainerStatus(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.InitContainerStatuses = nil + } + if in.ContainerStatuses != nil { + in, out := &in.ContainerStatuses, &out.ContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := Convert_api_ContainerStatus_To_v1_ContainerStatus(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ContainerStatuses = nil + } + return nil +} + +func Convert_api_PodStatus_To_v1_PodStatus(in *api.PodStatus, out *PodStatus, s conversion.Scope) error { + return autoConvert_api_PodStatus_To_v1_PodStatus(in, out, s) +} + +func autoConvert_v1_PodStatusResult_To_api_PodStatusResult(in *PodStatusResult, out *api.PodStatusResult, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_PodStatus_To_api_PodStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func autoConvert_api_PodStatusResult_To_v1_PodStatusResult(in *api.PodStatusResult, out *PodStatusResult, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_PodStatus_To_v1_PodStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func autoConvert_v1_PodTemplate_To_api_PodTemplate(in *PodTemplate, out *api.PodTemplate, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { + return err + } + return nil +} + +func Convert_v1_PodTemplate_To_api_PodTemplate(in *PodTemplate, out *api.PodTemplate, s conversion.Scope) error { + return autoConvert_v1_PodTemplate_To_api_PodTemplate(in, out, s) +} + +func autoConvert_api_PodTemplate_To_v1_PodTemplate(in *api.PodTemplate, out *PodTemplate, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { + return err + } + return nil +} + +func Convert_api_PodTemplate_To_v1_PodTemplate(in *api.PodTemplate, out *PodTemplate, s conversion.Scope) error { + return autoConvert_api_PodTemplate_To_v1_PodTemplate(in, out, s) +} + +func autoConvert_v1_PodTemplateList_To_api_PodTemplateList(in *PodTemplateList, out *api.PodTemplateList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.PodTemplate, len(*in)) + for i := range *in { + if err := Convert_v1_PodTemplate_To_api_PodTemplate(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_PodTemplateList_To_api_PodTemplateList(in *PodTemplateList, out *api.PodTemplateList, s conversion.Scope) error { + return autoConvert_v1_PodTemplateList_To_api_PodTemplateList(in, out, s) +} + +func autoConvert_api_PodTemplateList_To_v1_PodTemplateList(in *api.PodTemplateList, out *PodTemplateList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodTemplate, len(*in)) + for i := range *in { + if err := Convert_api_PodTemplate_To_v1_PodTemplate(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_PodTemplateList_To_v1_PodTemplateList(in *api.PodTemplateList, out *PodTemplateList, s conversion.Scope) error { + return autoConvert_api_PodTemplateList_To_v1_PodTemplateList(in, out, s) +} + +func autoConvert_v1_PodTemplateSpec_To_api_PodTemplateSpec(in *PodTemplateSpec, out *api.PodTemplateSpec, s conversion.Scope) error { + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_PodSpec_To_api_PodSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +func autoConvert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in *api.PodTemplateSpec, out *PodTemplateSpec, s conversion.Scope) error { + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_PodSpec_To_v1_PodSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + return nil +} + +func autoConvert_v1_Preconditions_To_api_Preconditions(in *Preconditions, out *api.Preconditions, s conversion.Scope) error { + out.UID = in.UID + return nil +} + +func Convert_v1_Preconditions_To_api_Preconditions(in *Preconditions, out *api.Preconditions, s conversion.Scope) error { + return autoConvert_v1_Preconditions_To_api_Preconditions(in, out, s) +} + +func autoConvert_api_Preconditions_To_v1_Preconditions(in *api.Preconditions, out *Preconditions, s conversion.Scope) error { + out.UID = in.UID + return nil +} + +func Convert_api_Preconditions_To_v1_Preconditions(in *api.Preconditions, out *Preconditions, s conversion.Scope) error { + return autoConvert_api_Preconditions_To_v1_Preconditions(in, out, s) +} + +func autoConvert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry(in *PreferAvoidPodsEntry, out *api.PreferAvoidPodsEntry, s conversion.Scope) error { + if err := Convert_v1_PodSignature_To_api_PodSignature(&in.PodSignature, &out.PodSignature, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.EvictionTime, &out.EvictionTime, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry(in *PreferAvoidPodsEntry, out *api.PreferAvoidPodsEntry, s conversion.Scope) error { + return autoConvert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry(in, out, s) +} + +func autoConvert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry(in *api.PreferAvoidPodsEntry, out *PreferAvoidPodsEntry, s conversion.Scope) error { + if err := Convert_api_PodSignature_To_v1_PodSignature(&in.PodSignature, &out.PodSignature, s); err != nil { + return err + } + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.EvictionTime, &out.EvictionTime, s); err != nil { + return err + } + out.Reason = in.Reason + out.Message = in.Message + return nil +} + +func Convert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry(in *api.PreferAvoidPodsEntry, out *PreferAvoidPodsEntry, s conversion.Scope) error { + return autoConvert_api_PreferAvoidPodsEntry_To_v1_PreferAvoidPodsEntry(in, out, s) +} + +func autoConvert_v1_PreferredSchedulingTerm_To_api_PreferredSchedulingTerm(in *PreferredSchedulingTerm, out *api.PreferredSchedulingTerm, s conversion.Scope) error { + out.Weight = in.Weight + if err := Convert_v1_NodeSelectorTerm_To_api_NodeSelectorTerm(&in.Preference, &out.Preference, s); err != nil { + return err + } + return nil +} + +func Convert_v1_PreferredSchedulingTerm_To_api_PreferredSchedulingTerm(in *PreferredSchedulingTerm, out *api.PreferredSchedulingTerm, s conversion.Scope) error { + return autoConvert_v1_PreferredSchedulingTerm_To_api_PreferredSchedulingTerm(in, out, s) +} + +func autoConvert_api_PreferredSchedulingTerm_To_v1_PreferredSchedulingTerm(in *api.PreferredSchedulingTerm, out *PreferredSchedulingTerm, s conversion.Scope) error { + out.Weight = in.Weight + if err := Convert_api_NodeSelectorTerm_To_v1_NodeSelectorTerm(&in.Preference, &out.Preference, s); err != nil { + return err + } + return nil +} + +func Convert_api_PreferredSchedulingTerm_To_v1_PreferredSchedulingTerm(in *api.PreferredSchedulingTerm, out *PreferredSchedulingTerm, s conversion.Scope) error { + return autoConvert_api_PreferredSchedulingTerm_To_v1_PreferredSchedulingTerm(in, out, s) +} + +func autoConvert_v1_Probe_To_api_Probe(in *Probe, out *api.Probe, s conversion.Scope) error { + SetDefaults_Probe(in) + if err := Convert_v1_Handler_To_api_Handler(&in.Handler, &out.Handler, s); err != nil { + return err + } + out.InitialDelaySeconds = in.InitialDelaySeconds + out.TimeoutSeconds = in.TimeoutSeconds + out.PeriodSeconds = in.PeriodSeconds + out.SuccessThreshold = in.SuccessThreshold + out.FailureThreshold = in.FailureThreshold + return nil +} + +func Convert_v1_Probe_To_api_Probe(in *Probe, out *api.Probe, s conversion.Scope) error { + return autoConvert_v1_Probe_To_api_Probe(in, out, s) +} + +func autoConvert_api_Probe_To_v1_Probe(in *api.Probe, out *Probe, s conversion.Scope) error { + if err := Convert_api_Handler_To_v1_Handler(&in.Handler, &out.Handler, s); err != nil { + return err + } + out.InitialDelaySeconds = in.InitialDelaySeconds + out.TimeoutSeconds = in.TimeoutSeconds + out.PeriodSeconds = in.PeriodSeconds + out.SuccessThreshold = in.SuccessThreshold + out.FailureThreshold = in.FailureThreshold + return nil +} + +func Convert_api_Probe_To_v1_Probe(in *api.Probe, out *Probe, s conversion.Scope) error { + return autoConvert_api_Probe_To_v1_Probe(in, out, s) +} + +func autoConvert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(in *QuobyteVolumeSource, out *api.QuobyteVolumeSource, s conversion.Scope) error { + out.Registry = in.Registry + out.Volume = in.Volume + out.ReadOnly = in.ReadOnly + out.User = in.User + out.Group = in.Group + return nil +} + +func Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(in *QuobyteVolumeSource, out *api.QuobyteVolumeSource, s conversion.Scope) error { + return autoConvert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(in, out, s) +} + +func autoConvert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in *api.QuobyteVolumeSource, out *QuobyteVolumeSource, s conversion.Scope) error { + out.Registry = in.Registry + out.Volume = in.Volume + out.ReadOnly = in.ReadOnly + out.User = in.User + out.Group = in.Group + return nil +} + +func Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in *api.QuobyteVolumeSource, out *QuobyteVolumeSource, s conversion.Scope) error { + return autoConvert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in, out, s) +} + +func autoConvert_v1_RBDVolumeSource_To_api_RBDVolumeSource(in *RBDVolumeSource, out *api.RBDVolumeSource, s conversion.Scope) error { + SetDefaults_RBDVolumeSource(in) + out.CephMonitors = in.CephMonitors + out.RBDImage = in.RBDImage + out.FSType = in.FSType + out.RBDPool = in.RBDPool + out.RadosUser = in.RadosUser + out.Keyring = in.Keyring + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(api.LocalObjectReference) + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_RBDVolumeSource_To_api_RBDVolumeSource(in *RBDVolumeSource, out *api.RBDVolumeSource, s conversion.Scope) error { + return autoConvert_v1_RBDVolumeSource_To_api_RBDVolumeSource(in, out, s) +} + +func autoConvert_api_RBDVolumeSource_To_v1_RBDVolumeSource(in *api.RBDVolumeSource, out *RBDVolumeSource, s conversion.Scope) error { + out.CephMonitors = in.CephMonitors + out.RBDImage = in.RBDImage + out.FSType = in.FSType + out.RBDPool = in.RBDPool + out.RadosUser = in.RadosUser + out.Keyring = in.Keyring + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(*in, *out, s); err != nil { + return err + } + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_RBDVolumeSource_To_v1_RBDVolumeSource(in *api.RBDVolumeSource, out *RBDVolumeSource, s conversion.Scope) error { + return autoConvert_api_RBDVolumeSource_To_v1_RBDVolumeSource(in, out, s) +} + +func autoConvert_v1_RangeAllocation_To_api_RangeAllocation(in *RangeAllocation, out *api.RangeAllocation, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + out.Range = in.Range + if err := conversion.Convert_Slice_byte_To_Slice_byte(&in.Data, &out.Data, s); err != nil { + return err + } + return nil +} + +func Convert_v1_RangeAllocation_To_api_RangeAllocation(in *RangeAllocation, out *api.RangeAllocation, s conversion.Scope) error { + return autoConvert_v1_RangeAllocation_To_api_RangeAllocation(in, out, s) +} + +func autoConvert_api_RangeAllocation_To_v1_RangeAllocation(in *api.RangeAllocation, out *RangeAllocation, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + out.Range = in.Range + if err := conversion.Convert_Slice_byte_To_Slice_byte(&in.Data, &out.Data, s); err != nil { + return err + } + return nil +} + +func Convert_api_RangeAllocation_To_v1_RangeAllocation(in *api.RangeAllocation, out *RangeAllocation, s conversion.Scope) error { + return autoConvert_api_RangeAllocation_To_v1_RangeAllocation(in, out, s) +} + +func autoConvert_v1_ReplicationController_To_api_ReplicationController(in *ReplicationController, out *api.ReplicationController, s conversion.Scope) error { + SetDefaults_ReplicationController(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ReplicationController_To_api_ReplicationController(in *ReplicationController, out *api.ReplicationController, s conversion.Scope) error { + return autoConvert_v1_ReplicationController_To_api_ReplicationController(in, out, s) +} + +func autoConvert_api_ReplicationController_To_v1_ReplicationController(in *api.ReplicationController, out *ReplicationController, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_api_ReplicationControllerStatus_To_v1_ReplicationControllerStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_api_ReplicationController_To_v1_ReplicationController(in *api.ReplicationController, out *ReplicationController, s conversion.Scope) error { + return autoConvert_api_ReplicationController_To_v1_ReplicationController(in, out, s) +} + +func autoConvert_v1_ReplicationControllerList_To_api_ReplicationControllerList(in *ReplicationControllerList, out *api.ReplicationControllerList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.ReplicationController, len(*in)) + for i := range *in { + if err := Convert_v1_ReplicationController_To_api_ReplicationController(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_ReplicationControllerList_To_api_ReplicationControllerList(in *ReplicationControllerList, out *api.ReplicationControllerList, s conversion.Scope) error { + return autoConvert_v1_ReplicationControllerList_To_api_ReplicationControllerList(in, out, s) +} + +func autoConvert_api_ReplicationControllerList_To_v1_ReplicationControllerList(in *api.ReplicationControllerList, out *ReplicationControllerList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReplicationController, len(*in)) + for i := range *in { + if err := Convert_api_ReplicationController_To_v1_ReplicationController(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_ReplicationControllerList_To_v1_ReplicationControllerList(in *api.ReplicationControllerList, out *ReplicationControllerList, s conversion.Scope) error { + return autoConvert_api_ReplicationControllerList_To_v1_ReplicationControllerList(in, out, s) +} + +func autoConvert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *ReplicationControllerSpec, out *api.ReplicationControllerSpec, s conversion.Scope) error { + if err := api.Convert_Pointer_int32_To_int32(&in.Replicas, &out.Replicas, s); err != nil { + return err + } + out.Selector = in.Selector + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(api.PodTemplateSpec) + if err := Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(*in, *out, s); err != nil { + return err + } + } else { + out.Template = nil + } + return nil +} + +func autoConvert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec(in *api.ReplicationControllerSpec, out *ReplicationControllerSpec, s conversion.Scope) error { + if err := api.Convert_int32_To_Pointer_int32(&in.Replicas, &out.Replicas, s); err != nil { + return err + } + out.Selector = in.Selector + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(PodTemplateSpec) + if err := Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(*in, *out, s); err != nil { + return err + } + } else { + out.Template = nil + } + return nil +} + +func autoConvert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in *ReplicationControllerStatus, out *api.ReplicationControllerStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil +} + +func Convert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in *ReplicationControllerStatus, out *api.ReplicationControllerStatus, s conversion.Scope) error { + return autoConvert_v1_ReplicationControllerStatus_To_api_ReplicationControllerStatus(in, out, s) +} + +func autoConvert_api_ReplicationControllerStatus_To_v1_ReplicationControllerStatus(in *api.ReplicationControllerStatus, out *ReplicationControllerStatus, s conversion.Scope) error { + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil +} + +func Convert_api_ReplicationControllerStatus_To_v1_ReplicationControllerStatus(in *api.ReplicationControllerStatus, out *ReplicationControllerStatus, s conversion.Scope) error { + return autoConvert_api_ReplicationControllerStatus_To_v1_ReplicationControllerStatus(in, out, s) +} + +func autoConvert_v1_ResourceFieldSelector_To_api_ResourceFieldSelector(in *ResourceFieldSelector, out *api.ResourceFieldSelector, s conversion.Scope) error { + out.ContainerName = in.ContainerName + out.Resource = in.Resource + if err := api.Convert_resource_Quantity_To_resource_Quantity(&in.Divisor, &out.Divisor, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ResourceFieldSelector_To_api_ResourceFieldSelector(in *ResourceFieldSelector, out *api.ResourceFieldSelector, s conversion.Scope) error { + return autoConvert_v1_ResourceFieldSelector_To_api_ResourceFieldSelector(in, out, s) +} + +func autoConvert_api_ResourceFieldSelector_To_v1_ResourceFieldSelector(in *api.ResourceFieldSelector, out *ResourceFieldSelector, s conversion.Scope) error { + out.ContainerName = in.ContainerName + out.Resource = in.Resource + if err := api.Convert_resource_Quantity_To_resource_Quantity(&in.Divisor, &out.Divisor, s); err != nil { + return err + } + return nil +} + +func Convert_api_ResourceFieldSelector_To_v1_ResourceFieldSelector(in *api.ResourceFieldSelector, out *ResourceFieldSelector, s conversion.Scope) error { + return autoConvert_api_ResourceFieldSelector_To_v1_ResourceFieldSelector(in, out, s) +} + +func autoConvert_v1_ResourceQuota_To_api_ResourceQuota(in *ResourceQuota, out *api.ResourceQuota, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_ResourceQuotaSpec_To_api_ResourceQuotaSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_ResourceQuotaStatus_To_api_ResourceQuotaStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ResourceQuota_To_api_ResourceQuota(in *ResourceQuota, out *api.ResourceQuota, s conversion.Scope) error { + return autoConvert_v1_ResourceQuota_To_api_ResourceQuota(in, out, s) +} + +func autoConvert_api_ResourceQuota_To_v1_ResourceQuota(in *api.ResourceQuota, out *ResourceQuota, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_ResourceQuotaSpec_To_v1_ResourceQuotaSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_api_ResourceQuotaStatus_To_v1_ResourceQuotaStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_api_ResourceQuota_To_v1_ResourceQuota(in *api.ResourceQuota, out *ResourceQuota, s conversion.Scope) error { + return autoConvert_api_ResourceQuota_To_v1_ResourceQuota(in, out, s) +} + +func autoConvert_v1_ResourceQuotaList_To_api_ResourceQuotaList(in *ResourceQuotaList, out *api.ResourceQuotaList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.ResourceQuota, len(*in)) + for i := range *in { + if err := Convert_v1_ResourceQuota_To_api_ResourceQuota(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_ResourceQuotaList_To_api_ResourceQuotaList(in *ResourceQuotaList, out *api.ResourceQuotaList, s conversion.Scope) error { + return autoConvert_v1_ResourceQuotaList_To_api_ResourceQuotaList(in, out, s) +} + +func autoConvert_api_ResourceQuotaList_To_v1_ResourceQuotaList(in *api.ResourceQuotaList, out *ResourceQuotaList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ResourceQuota, len(*in)) + for i := range *in { + if err := Convert_api_ResourceQuota_To_v1_ResourceQuota(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_ResourceQuotaList_To_v1_ResourceQuotaList(in *api.ResourceQuotaList, out *ResourceQuotaList, s conversion.Scope) error { + return autoConvert_api_ResourceQuotaList_To_v1_ResourceQuotaList(in, out, s) +} + +func autoConvert_v1_ResourceQuotaSpec_To_api_ResourceQuotaSpec(in *ResourceQuotaSpec, out *api.ResourceQuotaSpec, s conversion.Scope) error { + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Hard, &out.Hard, s); err != nil { + return err + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]api.ResourceQuotaScope, len(*in)) + for i := range *in { + (*out)[i] = api.ResourceQuotaScope((*in)[i]) + } + } else { + out.Scopes = nil + } + return nil +} + +func Convert_v1_ResourceQuotaSpec_To_api_ResourceQuotaSpec(in *ResourceQuotaSpec, out *api.ResourceQuotaSpec, s conversion.Scope) error { + return autoConvert_v1_ResourceQuotaSpec_To_api_ResourceQuotaSpec(in, out, s) +} + +func autoConvert_api_ResourceQuotaSpec_To_v1_ResourceQuotaSpec(in *api.ResourceQuotaSpec, out *ResourceQuotaSpec, s conversion.Scope) error { + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Hard = nil + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]ResourceQuotaScope, len(*in)) + for i := range *in { + (*out)[i] = ResourceQuotaScope((*in)[i]) + } + } else { + out.Scopes = nil + } + return nil +} + +func Convert_api_ResourceQuotaSpec_To_v1_ResourceQuotaSpec(in *api.ResourceQuotaSpec, out *ResourceQuotaSpec, s conversion.Scope) error { + return autoConvert_api_ResourceQuotaSpec_To_v1_ResourceQuotaSpec(in, out, s) +} + +func autoConvert_v1_ResourceQuotaStatus_To_api_ResourceQuotaStatus(in *ResourceQuotaStatus, out *api.ResourceQuotaStatus, s conversion.Scope) error { + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Hard, &out.Hard, s); err != nil { + return err + } + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Used, &out.Used, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ResourceQuotaStatus_To_api_ResourceQuotaStatus(in *ResourceQuotaStatus, out *api.ResourceQuotaStatus, s conversion.Scope) error { + return autoConvert_v1_ResourceQuotaStatus_To_api_ResourceQuotaStatus(in, out, s) +} + +func autoConvert_api_ResourceQuotaStatus_To_v1_ResourceQuotaStatus(in *api.ResourceQuotaStatus, out *ResourceQuotaStatus, s conversion.Scope) error { + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Hard = nil + } + if in.Used != nil { + in, out := &in.Used, &out.Used + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Used = nil + } + return nil +} + +func Convert_api_ResourceQuotaStatus_To_v1_ResourceQuotaStatus(in *api.ResourceQuotaStatus, out *ResourceQuotaStatus, s conversion.Scope) error { + return autoConvert_api_ResourceQuotaStatus_To_v1_ResourceQuotaStatus(in, out, s) +} + +func autoConvert_v1_ResourceRequirements_To_api_ResourceRequirements(in *ResourceRequirements, out *api.ResourceRequirements, s conversion.Scope) error { + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Limits, &out.Limits, s); err != nil { + return err + } + if err := Convert_v1_ResourceList_To_api_ResourceList(&in.Requests, &out.Requests, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ResourceRequirements_To_api_ResourceRequirements(in *ResourceRequirements, out *api.ResourceRequirements, s conversion.Scope) error { + return autoConvert_v1_ResourceRequirements_To_api_ResourceRequirements(in, out, s) +} + +func autoConvert_api_ResourceRequirements_To_v1_ResourceRequirements(in *api.ResourceRequirements, out *ResourceRequirements, s conversion.Scope) error { + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Limits = nil + } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make(ResourceList, len(*in)) + for key, val := range *in { + newVal := new(resource.Quantity) + if err := api.Convert_resource_Quantity_To_resource_Quantity(&val, newVal, s); err != nil { + return err + } + (*out)[ResourceName(key)] = *newVal + } + } else { + out.Requests = nil + } + return nil +} + +func Convert_api_ResourceRequirements_To_v1_ResourceRequirements(in *api.ResourceRequirements, out *ResourceRequirements, s conversion.Scope) error { + return autoConvert_api_ResourceRequirements_To_v1_ResourceRequirements(in, out, s) +} + +func autoConvert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions(in *RunAsUserStrategyOptions, out *api.RunAsUserStrategyOptions, s conversion.Scope) error { + out.Type = api.RunAsUserStrategyType(in.Type) + out.UID = in.UID + out.UIDRangeMin = in.UIDRangeMin + out.UIDRangeMax = in.UIDRangeMax + return nil +} + +func Convert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions(in *RunAsUserStrategyOptions, out *api.RunAsUserStrategyOptions, s conversion.Scope) error { + return autoConvert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions(in, out, s) +} + +func autoConvert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions(in *api.RunAsUserStrategyOptions, out *RunAsUserStrategyOptions, s conversion.Scope) error { + out.Type = RunAsUserStrategyType(in.Type) + out.UID = in.UID + out.UIDRangeMin = in.UIDRangeMin + out.UIDRangeMax = in.UIDRangeMax + return nil +} + +func Convert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions(in *api.RunAsUserStrategyOptions, out *RunAsUserStrategyOptions, s conversion.Scope) error { + return autoConvert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions(in, out, s) +} + +func autoConvert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions(in *SELinuxContextStrategyOptions, out *api.SELinuxContextStrategyOptions, s conversion.Scope) error { + out.Type = api.SELinuxContextStrategyType(in.Type) + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(api.SELinuxOptions) + if err := Convert_v1_SELinuxOptions_To_api_SELinuxOptions(*in, *out, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + return nil +} + +func Convert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions(in *SELinuxContextStrategyOptions, out *api.SELinuxContextStrategyOptions, s conversion.Scope) error { + return autoConvert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions(in, out, s) +} + +func autoConvert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions(in *api.SELinuxContextStrategyOptions, out *SELinuxContextStrategyOptions, s conversion.Scope) error { + out.Type = SELinuxContextStrategyType(in.Type) + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + if err := Convert_api_SELinuxOptions_To_v1_SELinuxOptions(*in, *out, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + return nil +} + +func Convert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions(in *api.SELinuxContextStrategyOptions, out *SELinuxContextStrategyOptions, s conversion.Scope) error { + return autoConvert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions(in, out, s) +} + +func autoConvert_v1_SELinuxOptions_To_api_SELinuxOptions(in *SELinuxOptions, out *api.SELinuxOptions, s conversion.Scope) error { + out.User = in.User + out.Role = in.Role + out.Type = in.Type + out.Level = in.Level + return nil +} + +func Convert_v1_SELinuxOptions_To_api_SELinuxOptions(in *SELinuxOptions, out *api.SELinuxOptions, s conversion.Scope) error { + return autoConvert_v1_SELinuxOptions_To_api_SELinuxOptions(in, out, s) +} + +func autoConvert_api_SELinuxOptions_To_v1_SELinuxOptions(in *api.SELinuxOptions, out *SELinuxOptions, s conversion.Scope) error { + out.User = in.User + out.Role = in.Role + out.Type = in.Type + out.Level = in.Level + return nil +} + +func Convert_api_SELinuxOptions_To_v1_SELinuxOptions(in *api.SELinuxOptions, out *SELinuxOptions, s conversion.Scope) error { + return autoConvert_api_SELinuxOptions_To_v1_SELinuxOptions(in, out, s) +} + +func autoConvert_v1_Secret_To_api_Secret(in *Secret, out *api.Secret, s conversion.Scope) error { + SetDefaults_Secret(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + out.Data = in.Data + out.Type = api.SecretType(in.Type) + return nil +} + +func autoConvert_api_Secret_To_v1_Secret(in *api.Secret, out *Secret, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + out.Data = in.Data + out.Type = SecretType(in.Type) + return nil +} + +func Convert_api_Secret_To_v1_Secret(in *api.Secret, out *Secret, s conversion.Scope) error { + return autoConvert_api_Secret_To_v1_Secret(in, out, s) +} + +func autoConvert_v1_SecretKeySelector_To_api_SecretKeySelector(in *SecretKeySelector, out *api.SecretKeySelector, s conversion.Scope) error { + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { + return err + } + out.Key = in.Key + return nil +} + +func Convert_v1_SecretKeySelector_To_api_SecretKeySelector(in *SecretKeySelector, out *api.SecretKeySelector, s conversion.Scope) error { + return autoConvert_v1_SecretKeySelector_To_api_SecretKeySelector(in, out, s) +} + +func autoConvert_api_SecretKeySelector_To_v1_SecretKeySelector(in *api.SecretKeySelector, out *SecretKeySelector, s conversion.Scope) error { + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil { + return err + } + out.Key = in.Key + return nil +} + +func Convert_api_SecretKeySelector_To_v1_SecretKeySelector(in *api.SecretKeySelector, out *SecretKeySelector, s conversion.Scope) error { + return autoConvert_api_SecretKeySelector_To_v1_SecretKeySelector(in, out, s) +} + +func autoConvert_v1_SecretList_To_api_SecretList(in *SecretList, out *api.SecretList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.Secret, len(*in)) + for i := range *in { + if err := Convert_v1_Secret_To_api_Secret(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_SecretList_To_api_SecretList(in *SecretList, out *api.SecretList, s conversion.Scope) error { + return autoConvert_v1_SecretList_To_api_SecretList(in, out, s) +} + +func autoConvert_api_SecretList_To_v1_SecretList(in *api.SecretList, out *SecretList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Secret, len(*in)) + for i := range *in { + if err := Convert_api_Secret_To_v1_Secret(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_SecretList_To_v1_SecretList(in *api.SecretList, out *SecretList, s conversion.Scope) error { + return autoConvert_api_SecretList_To_v1_SecretList(in, out, s) +} + +func autoConvert_v1_SecretVolumeSource_To_api_SecretVolumeSource(in *SecretVolumeSource, out *api.SecretVolumeSource, s conversion.Scope) error { + SetDefaults_SecretVolumeSource(in) + out.SecretName = in.SecretName + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.KeyToPath, len(*in)) + for i := range *in { + if err := Convert_v1_KeyToPath_To_api_KeyToPath(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + out.DefaultMode = in.DefaultMode + return nil +} + +func Convert_v1_SecretVolumeSource_To_api_SecretVolumeSource(in *SecretVolumeSource, out *api.SecretVolumeSource, s conversion.Scope) error { + return autoConvert_v1_SecretVolumeSource_To_api_SecretVolumeSource(in, out, s) +} + +func autoConvert_api_SecretVolumeSource_To_v1_SecretVolumeSource(in *api.SecretVolumeSource, out *SecretVolumeSource, s conversion.Scope) error { + out.SecretName = in.SecretName + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := Convert_api_KeyToPath_To_v1_KeyToPath(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + out.DefaultMode = in.DefaultMode + return nil +} + +func Convert_api_SecretVolumeSource_To_v1_SecretVolumeSource(in *api.SecretVolumeSource, out *SecretVolumeSource, s conversion.Scope) error { + return autoConvert_api_SecretVolumeSource_To_v1_SecretVolumeSource(in, out, s) +} + +func autoConvert_v1_SecurityContext_To_api_SecurityContext(in *SecurityContext, out *api.SecurityContext, s conversion.Scope) error { + if in.Capabilities != nil { + in, out := &in.Capabilities, &out.Capabilities + *out = new(api.Capabilities) + if err := Convert_v1_Capabilities_To_api_Capabilities(*in, *out, s); err != nil { + return err + } + } else { + out.Capabilities = nil + } + out.Privileged = in.Privileged + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(api.SELinuxOptions) + if err := Convert_v1_SELinuxOptions_To_api_SELinuxOptions(*in, *out, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + out.RunAsUser = in.RunAsUser + out.RunAsNonRoot = in.RunAsNonRoot + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + return nil +} + +func Convert_v1_SecurityContext_To_api_SecurityContext(in *SecurityContext, out *api.SecurityContext, s conversion.Scope) error { + return autoConvert_v1_SecurityContext_To_api_SecurityContext(in, out, s) +} + +func autoConvert_api_SecurityContext_To_v1_SecurityContext(in *api.SecurityContext, out *SecurityContext, s conversion.Scope) error { + if in.Capabilities != nil { + in, out := &in.Capabilities, &out.Capabilities + *out = new(Capabilities) + if err := Convert_api_Capabilities_To_v1_Capabilities(*in, *out, s); err != nil { + return err + } + } else { + out.Capabilities = nil + } + out.Privileged = in.Privileged + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + if err := Convert_api_SELinuxOptions_To_v1_SELinuxOptions(*in, *out, s); err != nil { + return err + } + } else { + out.SELinuxOptions = nil + } + out.RunAsUser = in.RunAsUser + out.RunAsNonRoot = in.RunAsNonRoot + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + return nil +} + +func Convert_api_SecurityContext_To_v1_SecurityContext(in *api.SecurityContext, out *SecurityContext, s conversion.Scope) error { + return autoConvert_api_SecurityContext_To_v1_SecurityContext(in, out, s) +} + +func autoConvert_v1_SecurityContextConstraints_To_api_SecurityContextConstraints(in *SecurityContextConstraints, out *api.SecurityContextConstraints, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + out.Priority = in.Priority + out.AllowPrivilegedContainer = in.AllowPrivilegedContainer + if in.DefaultAddCapabilities != nil { + in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = api.Capability((*in)[i]) + } + } else { + out.DefaultAddCapabilities = nil + } + if in.RequiredDropCapabilities != nil { + in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = api.Capability((*in)[i]) + } + } else { + out.RequiredDropCapabilities = nil + } + if in.AllowedCapabilities != nil { + in, out := &in.AllowedCapabilities, &out.AllowedCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = api.Capability((*in)[i]) + } + } else { + out.AllowedCapabilities = nil + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]api.FSType, len(*in)) + for i := range *in { + (*out)[i] = api.FSType((*in)[i]) + } + } else { + out.Volumes = nil + } + out.AllowHostNetwork = in.AllowHostNetwork + out.AllowHostPorts = in.AllowHostPorts + out.AllowHostPID = in.AllowHostPID + out.AllowHostIPC = in.AllowHostIPC + if err := Convert_v1_SELinuxContextStrategyOptions_To_api_SELinuxContextStrategyOptions(&in.SELinuxContext, &out.SELinuxContext, s); err != nil { + return err + } + if err := Convert_v1_RunAsUserStrategyOptions_To_api_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, s); err != nil { + return err + } + if err := Convert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, s); err != nil { + return err + } + if err := Convert_v1_FSGroupStrategyOptions_To_api_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, s); err != nil { + return err + } + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + out.Users = in.Users + out.Groups = in.Groups + out.SeccompProfiles = in.SeccompProfiles + return nil +} + +func autoConvert_api_SecurityContextConstraints_To_v1_SecurityContextConstraints(in *api.SecurityContextConstraints, out *SecurityContextConstraints, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + out.Priority = in.Priority + out.AllowPrivilegedContainer = in.AllowPrivilegedContainer + if in.DefaultAddCapabilities != nil { + in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = Capability((*in)[i]) + } + } else { + out.DefaultAddCapabilities = nil + } + if in.RequiredDropCapabilities != nil { + in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = Capability((*in)[i]) + } + } else { + out.RequiredDropCapabilities = nil + } + if in.AllowedCapabilities != nil { + in, out := &in.AllowedCapabilities, &out.AllowedCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = Capability((*in)[i]) + } + } else { + out.AllowedCapabilities = nil + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]FSType, len(*in)) + for i := range *in { + (*out)[i] = FSType((*in)[i]) + } + } else { + out.Volumes = nil + } + out.AllowHostNetwork = in.AllowHostNetwork + out.AllowHostPorts = in.AllowHostPorts + out.AllowHostPID = in.AllowHostPID + out.AllowHostIPC = in.AllowHostIPC + if err := Convert_api_SELinuxContextStrategyOptions_To_v1_SELinuxContextStrategyOptions(&in.SELinuxContext, &out.SELinuxContext, s); err != nil { + return err + } + if err := Convert_api_RunAsUserStrategyOptions_To_v1_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, s); err != nil { + return err + } + if err := Convert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, s); err != nil { + return err + } + if err := Convert_api_FSGroupStrategyOptions_To_v1_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, s); err != nil { + return err + } + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + out.SeccompProfiles = in.SeccompProfiles + out.Users = in.Users + out.Groups = in.Groups + return nil +} + +func autoConvert_v1_SecurityContextConstraintsList_To_api_SecurityContextConstraintsList(in *SecurityContextConstraintsList, out *api.SecurityContextConstraintsList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.SecurityContextConstraints, len(*in)) + for i := range *in { + if err := Convert_v1_SecurityContextConstraints_To_api_SecurityContextConstraints(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_SecurityContextConstraintsList_To_api_SecurityContextConstraintsList(in *SecurityContextConstraintsList, out *api.SecurityContextConstraintsList, s conversion.Scope) error { + return autoConvert_v1_SecurityContextConstraintsList_To_api_SecurityContextConstraintsList(in, out, s) +} + +func autoConvert_api_SecurityContextConstraintsList_To_v1_SecurityContextConstraintsList(in *api.SecurityContextConstraintsList, out *SecurityContextConstraintsList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]SecurityContextConstraints, len(*in)) + for i := range *in { + if err := Convert_api_SecurityContextConstraints_To_v1_SecurityContextConstraints(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_SecurityContextConstraintsList_To_v1_SecurityContextConstraintsList(in *api.SecurityContextConstraintsList, out *SecurityContextConstraintsList, s conversion.Scope) error { + return autoConvert_api_SecurityContextConstraintsList_To_v1_SecurityContextConstraintsList(in, out, s) +} + +func autoConvert_v1_SerializedReference_To_api_SerializedReference(in *SerializedReference, out *api.SerializedReference, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectReference_To_api_ObjectReference(&in.Reference, &out.Reference, s); err != nil { + return err + } + return nil +} + +func Convert_v1_SerializedReference_To_api_SerializedReference(in *SerializedReference, out *api.SerializedReference, s conversion.Scope) error { + return autoConvert_v1_SerializedReference_To_api_SerializedReference(in, out, s) +} + +func autoConvert_api_SerializedReference_To_v1_SerializedReference(in *api.SerializedReference, out *SerializedReference, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectReference_To_v1_ObjectReference(&in.Reference, &out.Reference, s); err != nil { + return err + } + return nil +} + +func Convert_api_SerializedReference_To_v1_SerializedReference(in *api.SerializedReference, out *SerializedReference, s conversion.Scope) error { + return autoConvert_api_SerializedReference_To_v1_SerializedReference(in, out, s) +} + +func autoConvert_v1_Service_To_api_Service(in *Service, out *api.Service, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_v1_ServiceSpec_To_api_ServiceSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1_ServiceStatus_To_api_ServiceStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1_Service_To_api_Service(in *Service, out *api.Service, s conversion.Scope) error { + return autoConvert_v1_Service_To_api_Service(in, out, s) +} + +func autoConvert_api_Service_To_v1_Service(in *api.Service, out *Service, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if err := Convert_api_ServiceSpec_To_v1_ServiceSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_api_ServiceStatus_To_v1_ServiceStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_api_Service_To_v1_Service(in *api.Service, out *Service, s conversion.Scope) error { + return autoConvert_api_Service_To_v1_Service(in, out, s) +} + +func autoConvert_v1_ServiceAccount_To_api_ServiceAccount(in *ServiceAccount, out *api.ServiceAccount, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_v1_ObjectMeta_To_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]api.ObjectReference, len(*in)) + for i := range *in { + if err := Convert_v1_ObjectReference_To_api_ObjectReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Secrets = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]api.LocalObjectReference, len(*in)) + for i := range *in { + if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ImagePullSecrets = nil + } + return nil +} + +func Convert_v1_ServiceAccount_To_api_ServiceAccount(in *ServiceAccount, out *api.ServiceAccount, s conversion.Scope) error { + return autoConvert_v1_ServiceAccount_To_api_ServiceAccount(in, out, s) +} + +func autoConvert_api_ServiceAccount_To_v1_ServiceAccount(in *api.ServiceAccount, out *ServiceAccount, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := Convert_api_ObjectMeta_To_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, s); err != nil { + return err + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]ObjectReference, len(*in)) + for i := range *in { + if err := Convert_api_ObjectReference_To_v1_ObjectReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Secrets = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.ImagePullSecrets = nil + } + return nil +} + +func Convert_api_ServiceAccount_To_v1_ServiceAccount(in *api.ServiceAccount, out *ServiceAccount, s conversion.Scope) error { + return autoConvert_api_ServiceAccount_To_v1_ServiceAccount(in, out, s) +} + +func autoConvert_v1_ServiceAccountList_To_api_ServiceAccountList(in *ServiceAccountList, out *api.ServiceAccountList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.ServiceAccount, len(*in)) + for i := range *in { + if err := Convert_v1_ServiceAccount_To_api_ServiceAccount(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_ServiceAccountList_To_api_ServiceAccountList(in *ServiceAccountList, out *api.ServiceAccountList, s conversion.Scope) error { + return autoConvert_v1_ServiceAccountList_To_api_ServiceAccountList(in, out, s) +} + +func autoConvert_api_ServiceAccountList_To_v1_ServiceAccountList(in *api.ServiceAccountList, out *ServiceAccountList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ServiceAccount, len(*in)) + for i := range *in { + if err := Convert_api_ServiceAccount_To_v1_ServiceAccount(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_ServiceAccountList_To_v1_ServiceAccountList(in *api.ServiceAccountList, out *ServiceAccountList, s conversion.Scope) error { + return autoConvert_api_ServiceAccountList_To_v1_ServiceAccountList(in, out, s) +} + +func autoConvert_v1_ServiceList_To_api_ServiceList(in *ServiceList, out *api.ServiceList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]api.Service, len(*in)) + for i := range *in { + if err := Convert_v1_Service_To_api_Service(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1_ServiceList_To_api_ServiceList(in *ServiceList, out *api.ServiceList, s conversion.Scope) error { + return autoConvert_v1_ServiceList_To_api_ServiceList(in, out, s) +} + +func autoConvert_api_ServiceList_To_v1_ServiceList(in *api.ServiceList, out *ServiceList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Service, len(*in)) + for i := range *in { + if err := Convert_api_Service_To_v1_Service(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_api_ServiceList_To_v1_ServiceList(in *api.ServiceList, out *ServiceList, s conversion.Scope) error { + return autoConvert_api_ServiceList_To_v1_ServiceList(in, out, s) +} + +func autoConvert_v1_ServicePort_To_api_ServicePort(in *ServicePort, out *api.ServicePort, s conversion.Scope) error { + out.Name = in.Name + out.Protocol = api.Protocol(in.Protocol) + out.Port = in.Port + if err := api.Convert_intstr_IntOrString_To_intstr_IntOrString(&in.TargetPort, &out.TargetPort, s); err != nil { + return err + } + out.NodePort = in.NodePort + return nil +} + +func Convert_v1_ServicePort_To_api_ServicePort(in *ServicePort, out *api.ServicePort, s conversion.Scope) error { + return autoConvert_v1_ServicePort_To_api_ServicePort(in, out, s) +} + +func autoConvert_api_ServicePort_To_v1_ServicePort(in *api.ServicePort, out *ServicePort, s conversion.Scope) error { + out.Name = in.Name + out.Protocol = Protocol(in.Protocol) + out.Port = in.Port + if err := api.Convert_intstr_IntOrString_To_intstr_IntOrString(&in.TargetPort, &out.TargetPort, s); err != nil { + return err + } + out.NodePort = in.NodePort + return nil +} + +func Convert_api_ServicePort_To_v1_ServicePort(in *api.ServicePort, out *ServicePort, s conversion.Scope) error { + return autoConvert_api_ServicePort_To_v1_ServicePort(in, out, s) +} + +func autoConvert_v1_ServiceProxyOptions_To_api_ServiceProxyOptions(in *ServiceProxyOptions, out *api.ServiceProxyOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Path = in.Path + return nil +} + +func Convert_v1_ServiceProxyOptions_To_api_ServiceProxyOptions(in *ServiceProxyOptions, out *api.ServiceProxyOptions, s conversion.Scope) error { + return autoConvert_v1_ServiceProxyOptions_To_api_ServiceProxyOptions(in, out, s) +} + +func autoConvert_api_ServiceProxyOptions_To_v1_ServiceProxyOptions(in *api.ServiceProxyOptions, out *ServiceProxyOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Path = in.Path + return nil +} + +func Convert_api_ServiceProxyOptions_To_v1_ServiceProxyOptions(in *api.ServiceProxyOptions, out *ServiceProxyOptions, s conversion.Scope) error { + return autoConvert_api_ServiceProxyOptions_To_v1_ServiceProxyOptions(in, out, s) +} + +func autoConvert_v1_ServiceSpec_To_api_ServiceSpec(in *ServiceSpec, out *api.ServiceSpec, s conversion.Scope) error { + SetDefaults_ServiceSpec(in) + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]api.ServicePort, len(*in)) + for i := range *in { + if err := Convert_v1_ServicePort_To_api_ServicePort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + out.Selector = in.Selector + out.ClusterIP = in.ClusterIP + out.Type = api.ServiceType(in.Type) + out.ExternalIPs = in.ExternalIPs + out.SessionAffinity = api.ServiceAffinity(in.SessionAffinity) + out.LoadBalancerIP = in.LoadBalancerIP + out.LoadBalancerSourceRanges = in.LoadBalancerSourceRanges + out.ExternalName = in.ExternalName + return nil +} + +func autoConvert_api_ServiceSpec_To_v1_ServiceSpec(in *api.ServiceSpec, out *ServiceSpec, s conversion.Scope) error { + out.Type = ServiceType(in.Type) + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ServicePort, len(*in)) + for i := range *in { + if err := Convert_api_ServicePort_To_v1_ServicePort(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ports = nil + } + out.Selector = in.Selector + out.ClusterIP = in.ClusterIP + out.ExternalName = in.ExternalName + out.ExternalIPs = in.ExternalIPs + out.LoadBalancerIP = in.LoadBalancerIP + out.SessionAffinity = ServiceAffinity(in.SessionAffinity) + out.LoadBalancerSourceRanges = in.LoadBalancerSourceRanges + return nil +} + +func autoConvert_v1_ServiceStatus_To_api_ServiceStatus(in *ServiceStatus, out *api.ServiceStatus, s conversion.Scope) error { + if err := Convert_v1_LoadBalancerStatus_To_api_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, s); err != nil { + return err + } + return nil +} + +func Convert_v1_ServiceStatus_To_api_ServiceStatus(in *ServiceStatus, out *api.ServiceStatus, s conversion.Scope) error { + return autoConvert_v1_ServiceStatus_To_api_ServiceStatus(in, out, s) +} + +func autoConvert_api_ServiceStatus_To_v1_ServiceStatus(in *api.ServiceStatus, out *ServiceStatus, s conversion.Scope) error { + if err := Convert_api_LoadBalancerStatus_To_v1_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, s); err != nil { + return err + } + return nil +} + +func Convert_api_ServiceStatus_To_v1_ServiceStatus(in *api.ServiceStatus, out *ServiceStatus, s conversion.Scope) error { + return autoConvert_api_ServiceStatus_To_v1_ServiceStatus(in, out, s) +} + +func autoConvert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions(in *SupplementalGroupsStrategyOptions, out *api.SupplementalGroupsStrategyOptions, s conversion.Scope) error { + out.Type = api.SupplementalGroupsStrategyType(in.Type) + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]api.IDRange, len(*in)) + for i := range *in { + if err := Convert_v1_IDRange_To_api_IDRange(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ranges = nil + } + return nil +} + +func Convert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions(in *SupplementalGroupsStrategyOptions, out *api.SupplementalGroupsStrategyOptions, s conversion.Scope) error { + return autoConvert_v1_SupplementalGroupsStrategyOptions_To_api_SupplementalGroupsStrategyOptions(in, out, s) +} + +func autoConvert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions(in *api.SupplementalGroupsStrategyOptions, out *SupplementalGroupsStrategyOptions, s conversion.Scope) error { + out.Type = SupplementalGroupsStrategyType(in.Type) + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + if err := Convert_api_IDRange_To_v1_IDRange(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Ranges = nil + } + return nil +} + +func Convert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions(in *api.SupplementalGroupsStrategyOptions, out *SupplementalGroupsStrategyOptions, s conversion.Scope) error { + return autoConvert_api_SupplementalGroupsStrategyOptions_To_v1_SupplementalGroupsStrategyOptions(in, out, s) +} + +func autoConvert_v1_TCPSocketAction_To_api_TCPSocketAction(in *TCPSocketAction, out *api.TCPSocketAction, s conversion.Scope) error { + if err := api.Convert_intstr_IntOrString_To_intstr_IntOrString(&in.Port, &out.Port, s); err != nil { + return err + } + return nil +} + +func Convert_v1_TCPSocketAction_To_api_TCPSocketAction(in *TCPSocketAction, out *api.TCPSocketAction, s conversion.Scope) error { + return autoConvert_v1_TCPSocketAction_To_api_TCPSocketAction(in, out, s) +} + +func autoConvert_api_TCPSocketAction_To_v1_TCPSocketAction(in *api.TCPSocketAction, out *TCPSocketAction, s conversion.Scope) error { + if err := api.Convert_intstr_IntOrString_To_intstr_IntOrString(&in.Port, &out.Port, s); err != nil { + return err + } + return nil +} + +func Convert_api_TCPSocketAction_To_v1_TCPSocketAction(in *api.TCPSocketAction, out *TCPSocketAction, s conversion.Scope) error { + return autoConvert_api_TCPSocketAction_To_v1_TCPSocketAction(in, out, s) +} + +func autoConvert_v1_Taint_To_api_Taint(in *Taint, out *api.Taint, s conversion.Scope) error { + out.Key = in.Key + out.Value = in.Value + out.Effect = api.TaintEffect(in.Effect) + return nil +} + +func Convert_v1_Taint_To_api_Taint(in *Taint, out *api.Taint, s conversion.Scope) error { + return autoConvert_v1_Taint_To_api_Taint(in, out, s) +} + +func autoConvert_api_Taint_To_v1_Taint(in *api.Taint, out *Taint, s conversion.Scope) error { + out.Key = in.Key + out.Value = in.Value + out.Effect = TaintEffect(in.Effect) + return nil +} + +func Convert_api_Taint_To_v1_Taint(in *api.Taint, out *Taint, s conversion.Scope) error { + return autoConvert_api_Taint_To_v1_Taint(in, out, s) +} + +func autoConvert_v1_Toleration_To_api_Toleration(in *Toleration, out *api.Toleration, s conversion.Scope) error { + out.Key = in.Key + out.Operator = api.TolerationOperator(in.Operator) + out.Value = in.Value + out.Effect = api.TaintEffect(in.Effect) + return nil +} + +func Convert_v1_Toleration_To_api_Toleration(in *Toleration, out *api.Toleration, s conversion.Scope) error { + return autoConvert_v1_Toleration_To_api_Toleration(in, out, s) +} + +func autoConvert_api_Toleration_To_v1_Toleration(in *api.Toleration, out *Toleration, s conversion.Scope) error { + out.Key = in.Key + out.Operator = TolerationOperator(in.Operator) + out.Value = in.Value + out.Effect = TaintEffect(in.Effect) + return nil +} + +func Convert_api_Toleration_To_v1_Toleration(in *api.Toleration, out *Toleration, s conversion.Scope) error { + return autoConvert_api_Toleration_To_v1_Toleration(in, out, s) +} + +func autoConvert_v1_Volume_To_api_Volume(in *Volume, out *api.Volume, s conversion.Scope) error { + SetDefaults_Volume(in) + out.Name = in.Name + if err := Convert_v1_VolumeSource_To_api_VolumeSource(&in.VolumeSource, &out.VolumeSource, s); err != nil { + return err + } + return nil +} + +func Convert_v1_Volume_To_api_Volume(in *Volume, out *api.Volume, s conversion.Scope) error { + return autoConvert_v1_Volume_To_api_Volume(in, out, s) +} + +func autoConvert_api_Volume_To_v1_Volume(in *api.Volume, out *Volume, s conversion.Scope) error { + out.Name = in.Name + if err := Convert_api_VolumeSource_To_v1_VolumeSource(&in.VolumeSource, &out.VolumeSource, s); err != nil { + return err + } + return nil +} + +func Convert_api_Volume_To_v1_Volume(in *api.Volume, out *Volume, s conversion.Scope) error { + return autoConvert_api_Volume_To_v1_Volume(in, out, s) +} + +func autoConvert_v1_VolumeMount_To_api_VolumeMount(in *VolumeMount, out *api.VolumeMount, s conversion.Scope) error { + out.Name = in.Name + out.ReadOnly = in.ReadOnly + out.MountPath = in.MountPath + out.SubPath = in.SubPath + return nil +} + +func Convert_v1_VolumeMount_To_api_VolumeMount(in *VolumeMount, out *api.VolumeMount, s conversion.Scope) error { + return autoConvert_v1_VolumeMount_To_api_VolumeMount(in, out, s) +} + +func autoConvert_api_VolumeMount_To_v1_VolumeMount(in *api.VolumeMount, out *VolumeMount, s conversion.Scope) error { + out.Name = in.Name + out.ReadOnly = in.ReadOnly + out.MountPath = in.MountPath + out.SubPath = in.SubPath + return nil +} + +func Convert_api_VolumeMount_To_v1_VolumeMount(in *api.VolumeMount, out *VolumeMount, s conversion.Scope) error { + return autoConvert_api_VolumeMount_To_v1_VolumeMount(in, out, s) +} + +func autoConvert_v1_VolumeSource_To_api_VolumeSource(in *VolumeSource, out *api.VolumeSource, s conversion.Scope) error { + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(api.HostPathVolumeSource) + if err := Convert_v1_HostPathVolumeSource_To_api_HostPathVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.HostPath = nil + } + if in.EmptyDir != nil { + in, out := &in.EmptyDir, &out.EmptyDir + *out = new(api.EmptyDirVolumeSource) + if err := Convert_v1_EmptyDirVolumeSource_To_api_EmptyDirVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.EmptyDir = nil + } + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(api.GCEPersistentDiskVolumeSource) + if err := Convert_v1_GCEPersistentDiskVolumeSource_To_api_GCEPersistentDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(api.AWSElasticBlockStoreVolumeSource) + if err := Convert_v1_AWSElasticBlockStoreVolumeSource_To_api_AWSElasticBlockStoreVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AWSElasticBlockStore = nil + } + if in.GitRepo != nil { + in, out := &in.GitRepo, &out.GitRepo + *out = new(api.GitRepoVolumeSource) + if err := Convert_v1_GitRepoVolumeSource_To_api_GitRepoVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.GitRepo = nil + } + if in.Secret != nil { + in, out := &in.Secret, &out.Secret + *out = new(api.SecretVolumeSource) + if err := Convert_v1_SecretVolumeSource_To_api_SecretVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Secret = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(api.NFSVolumeSource) + if err := Convert_v1_NFSVolumeSource_To_api_NFSVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.NFS = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(api.ISCSIVolumeSource) + if err := Convert_v1_ISCSIVolumeSource_To_api_ISCSIVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.ISCSI = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(api.GlusterfsVolumeSource) + if err := Convert_v1_GlusterfsVolumeSource_To_api_GlusterfsVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Glusterfs = nil + } + if in.PersistentVolumeClaim != nil { + in, out := &in.PersistentVolumeClaim, &out.PersistentVolumeClaim + *out = new(api.PersistentVolumeClaimVolumeSource) + if err := Convert_v1_PersistentVolumeClaimVolumeSource_To_api_PersistentVolumeClaimVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.PersistentVolumeClaim = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(api.RBDVolumeSource) + if err := Convert_v1_RBDVolumeSource_To_api_RBDVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(api.FlexVolumeSource) + if err := Convert_v1_FlexVolumeSource_To_api_FlexVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(api.CinderVolumeSource) + if err := Convert_v1_CinderVolumeSource_To_api_CinderVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(api.CephFSVolumeSource) + if err := Convert_v1_CephFSVolumeSource_To_api_CephFSVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(api.FlockerVolumeSource) + if err := Convert_v1_FlockerVolumeSource_To_api_FlockerVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Flocker = nil + } + if in.DownwardAPI != nil { + in, out := &in.DownwardAPI, &out.DownwardAPI + *out = new(api.DownwardAPIVolumeSource) + if err := Convert_v1_DownwardAPIVolumeSource_To_api_DownwardAPIVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.DownwardAPI = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(api.FCVolumeSource) + if err := Convert_v1_FCVolumeSource_To_api_FCVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.FC = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(api.AzureFileVolumeSource) + if err := Convert_v1_AzureFileVolumeSource_To_api_AzureFileVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureFile = nil + } + if in.ConfigMap != nil { + in, out := &in.ConfigMap, &out.ConfigMap + *out = new(api.ConfigMapVolumeSource) + if err := Convert_v1_ConfigMapVolumeSource_To_api_ConfigMapVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.ConfigMap = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(api.VsphereVirtualDiskVolumeSource) + if err := Convert_v1_VsphereVirtualDiskVolumeSource_To_api_VsphereVirtualDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.VsphereVolume = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(api.QuobyteVolumeSource) + if err := Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Quobyte = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(api.AzureDiskVolumeSource) + if err := Convert_v1_AzureDiskVolumeSource_To_api_AzureDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil +} + +func autoConvert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out *VolumeSource, s conversion.Scope) error { + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + if err := Convert_api_HostPathVolumeSource_To_v1_HostPathVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.HostPath = nil + } + if in.EmptyDir != nil { + in, out := &in.EmptyDir, &out.EmptyDir + *out = new(EmptyDirVolumeSource) + if err := Convert_api_EmptyDirVolumeSource_To_v1_EmptyDirVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.EmptyDir = nil + } + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + if err := Convert_api_GCEPersistentDiskVolumeSource_To_v1_GCEPersistentDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + if err := Convert_api_AWSElasticBlockStoreVolumeSource_To_v1_AWSElasticBlockStoreVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AWSElasticBlockStore = nil + } + if in.GitRepo != nil { + in, out := &in.GitRepo, &out.GitRepo + *out = new(GitRepoVolumeSource) + if err := Convert_api_GitRepoVolumeSource_To_v1_GitRepoVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.GitRepo = nil + } + if in.Secret != nil { + in, out := &in.Secret, &out.Secret + *out = new(SecretVolumeSource) + if err := Convert_api_SecretVolumeSource_To_v1_SecretVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Secret = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + if err := Convert_api_NFSVolumeSource_To_v1_NFSVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.NFS = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + if err := Convert_api_ISCSIVolumeSource_To_v1_ISCSIVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.ISCSI = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + if err := Convert_api_GlusterfsVolumeSource_To_v1_GlusterfsVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Glusterfs = nil + } + if in.PersistentVolumeClaim != nil { + in, out := &in.PersistentVolumeClaim, &out.PersistentVolumeClaim + *out = new(PersistentVolumeClaimVolumeSource) + if err := Convert_api_PersistentVolumeClaimVolumeSource_To_v1_PersistentVolumeClaimVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.PersistentVolumeClaim = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := Convert_api_RBDVolumeSource_To_v1_RBDVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + if err := Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Quobyte = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := Convert_api_FlexVolumeSource_To_v1_FlexVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + if err := Convert_api_CinderVolumeSource_To_v1_CinderVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := Convert_api_CephFSVolumeSource_To_v1_CephFSVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + if err := Convert_api_FlockerVolumeSource_To_v1_FlockerVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.Flocker = nil + } + if in.DownwardAPI != nil { + in, out := &in.DownwardAPI, &out.DownwardAPI + *out = new(DownwardAPIVolumeSource) + if err := Convert_api_DownwardAPIVolumeSource_To_v1_DownwardAPIVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.DownwardAPI = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := Convert_api_FCVolumeSource_To_v1_FCVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.FC = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + if err := Convert_api_AzureFileVolumeSource_To_v1_AzureFileVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureFile = nil + } + if in.ConfigMap != nil { + in, out := &in.ConfigMap, &out.ConfigMap + *out = new(ConfigMapVolumeSource) + if err := Convert_api_ConfigMapVolumeSource_To_v1_ConfigMapVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.ConfigMap = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + if err := Convert_api_VsphereVirtualDiskVolumeSource_To_v1_VsphereVirtualDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.VsphereVolume = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := Convert_api_AzureDiskVolumeSource_To_v1_AzureDiskVolumeSource(*in, *out, s); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil +} + +func autoConvert_v1_VsphereVirtualDiskVolumeSource_To_api_VsphereVirtualDiskVolumeSource(in *VsphereVirtualDiskVolumeSource, out *api.VsphereVirtualDiskVolumeSource, s conversion.Scope) error { + out.VolumePath = in.VolumePath + out.FSType = in.FSType + return nil +} + +func Convert_v1_VsphereVirtualDiskVolumeSource_To_api_VsphereVirtualDiskVolumeSource(in *VsphereVirtualDiskVolumeSource, out *api.VsphereVirtualDiskVolumeSource, s conversion.Scope) error { + return autoConvert_v1_VsphereVirtualDiskVolumeSource_To_api_VsphereVirtualDiskVolumeSource(in, out, s) +} + +func autoConvert_api_VsphereVirtualDiskVolumeSource_To_v1_VsphereVirtualDiskVolumeSource(in *api.VsphereVirtualDiskVolumeSource, out *VsphereVirtualDiskVolumeSource, s conversion.Scope) error { + out.VolumePath = in.VolumePath + out.FSType = in.FSType + return nil +} + +func Convert_api_VsphereVirtualDiskVolumeSource_To_v1_VsphereVirtualDiskVolumeSource(in *api.VsphereVirtualDiskVolumeSource, out *VsphereVirtualDiskVolumeSource, s conversion.Scope) error { + return autoConvert_api_VsphereVirtualDiskVolumeSource_To_v1_VsphereVirtualDiskVolumeSource(in, out, s) +} + +func autoConvert_v1_WeightedPodAffinityTerm_To_api_WeightedPodAffinityTerm(in *WeightedPodAffinityTerm, out *api.WeightedPodAffinityTerm, s conversion.Scope) error { + out.Weight = int(in.Weight) + if err := Convert_v1_PodAffinityTerm_To_api_PodAffinityTerm(&in.PodAffinityTerm, &out.PodAffinityTerm, s); err != nil { + return err + } + return nil +} + +func Convert_v1_WeightedPodAffinityTerm_To_api_WeightedPodAffinityTerm(in *WeightedPodAffinityTerm, out *api.WeightedPodAffinityTerm, s conversion.Scope) error { + return autoConvert_v1_WeightedPodAffinityTerm_To_api_WeightedPodAffinityTerm(in, out, s) +} + +func autoConvert_api_WeightedPodAffinityTerm_To_v1_WeightedPodAffinityTerm(in *api.WeightedPodAffinityTerm, out *WeightedPodAffinityTerm, s conversion.Scope) error { + out.Weight = int32(in.Weight) + if err := Convert_api_PodAffinityTerm_To_v1_PodAffinityTerm(&in.PodAffinityTerm, &out.PodAffinityTerm, s); err != nil { + return err + } + return nil +} + +func Convert_api_WeightedPodAffinityTerm_To_v1_WeightedPodAffinityTerm(in *api.WeightedPodAffinityTerm, out *WeightedPodAffinityTerm, s conversion.Scope) error { + return autoConvert_api_WeightedPodAffinityTerm_To_v1_WeightedPodAffinityTerm(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000..6dcc2a82 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.deepcopy.go @@ -0,0 +1,3987 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + types "k8s.io/kubernetes/pkg/types" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AWSElasticBlockStoreVolumeSource, InType: reflect.TypeOf(&AWSElasticBlockStoreVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Affinity, InType: reflect.TypeOf(&Affinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AttachedVolume, InType: reflect.TypeOf(&AttachedVolume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AvoidPods, InType: reflect.TypeOf(&AvoidPods{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AzureDiskVolumeSource, InType: reflect.TypeOf(&AzureDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_AzureFileVolumeSource, InType: reflect.TypeOf(&AzureFileVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Binding, InType: reflect.TypeOf(&Binding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Capabilities, InType: reflect.TypeOf(&Capabilities{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_CephFSVolumeSource, InType: reflect.TypeOf(&CephFSVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_CinderVolumeSource, InType: reflect.TypeOf(&CinderVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ComponentCondition, InType: reflect.TypeOf(&ComponentCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ComponentStatus, InType: reflect.TypeOf(&ComponentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ComponentStatusList, InType: reflect.TypeOf(&ComponentStatusList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ConfigMap, InType: reflect.TypeOf(&ConfigMap{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ConfigMapKeySelector, InType: reflect.TypeOf(&ConfigMapKeySelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ConfigMapList, InType: reflect.TypeOf(&ConfigMapList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ConfigMapVolumeSource, InType: reflect.TypeOf(&ConfigMapVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Container, InType: reflect.TypeOf(&Container{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerImage, InType: reflect.TypeOf(&ContainerImage{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerPort, InType: reflect.TypeOf(&ContainerPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerState, InType: reflect.TypeOf(&ContainerState{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerStateRunning, InType: reflect.TypeOf(&ContainerStateRunning{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerStateTerminated, InType: reflect.TypeOf(&ContainerStateTerminated{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerStateWaiting, InType: reflect.TypeOf(&ContainerStateWaiting{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ContainerStatus, InType: reflect.TypeOf(&ContainerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DaemonEndpoint, InType: reflect.TypeOf(&DaemonEndpoint{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeleteOptions, InType: reflect.TypeOf(&DeleteOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeprecatedDownwardAPIVolumeFile, InType: reflect.TypeOf(&DeprecatedDownwardAPIVolumeFile{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DeprecatedDownwardAPIVolumeSource, InType: reflect.TypeOf(&DeprecatedDownwardAPIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DownwardAPIVolumeFile, InType: reflect.TypeOf(&DownwardAPIVolumeFile{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_DownwardAPIVolumeSource, InType: reflect.TypeOf(&DownwardAPIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EmptyDirVolumeSource, InType: reflect.TypeOf(&EmptyDirVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EndpointAddress, InType: reflect.TypeOf(&EndpointAddress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EndpointPort, InType: reflect.TypeOf(&EndpointPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EndpointSubset, InType: reflect.TypeOf(&EndpointSubset{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Endpoints, InType: reflect.TypeOf(&Endpoints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EndpointsList, InType: reflect.TypeOf(&EndpointsList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EnvVar, InType: reflect.TypeOf(&EnvVar{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EnvVarSource, InType: reflect.TypeOf(&EnvVarSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Event, InType: reflect.TypeOf(&Event{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EventList, InType: reflect.TypeOf(&EventList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_EventSource, InType: reflect.TypeOf(&EventSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ExecAction, InType: reflect.TypeOf(&ExecAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ExportOptions, InType: reflect.TypeOf(&ExportOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_FCVolumeSource, InType: reflect.TypeOf(&FCVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_FSGroupStrategyOptions, InType: reflect.TypeOf(&FSGroupStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_FlexVolumeSource, InType: reflect.TypeOf(&FlexVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_FlockerVolumeSource, InType: reflect.TypeOf(&FlockerVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_GCEPersistentDiskVolumeSource, InType: reflect.TypeOf(&GCEPersistentDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_GitRepoVolumeSource, InType: reflect.TypeOf(&GitRepoVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_GlusterfsVolumeSource, InType: reflect.TypeOf(&GlusterfsVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HTTPGetAction, InType: reflect.TypeOf(&HTTPGetAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HTTPHeader, InType: reflect.TypeOf(&HTTPHeader{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Handler, InType: reflect.TypeOf(&Handler{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HostPathVolumeSource, InType: reflect.TypeOf(&HostPathVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_IDRange, InType: reflect.TypeOf(&IDRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ISCSIVolumeSource, InType: reflect.TypeOf(&ISCSIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_KeyToPath, InType: reflect.TypeOf(&KeyToPath{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Lifecycle, InType: reflect.TypeOf(&Lifecycle{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LimitRange, InType: reflect.TypeOf(&LimitRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LimitRangeItem, InType: reflect.TypeOf(&LimitRangeItem{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LimitRangeList, InType: reflect.TypeOf(&LimitRangeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LimitRangeSpec, InType: reflect.TypeOf(&LimitRangeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_List, InType: reflect.TypeOf(&List{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ListOptions, InType: reflect.TypeOf(&ListOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LoadBalancerIngress, InType: reflect.TypeOf(&LoadBalancerIngress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LoadBalancerStatus, InType: reflect.TypeOf(&LoadBalancerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LocalObjectReference, InType: reflect.TypeOf(&LocalObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NFSVolumeSource, InType: reflect.TypeOf(&NFSVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Namespace, InType: reflect.TypeOf(&Namespace{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NamespaceList, InType: reflect.TypeOf(&NamespaceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NamespaceSpec, InType: reflect.TypeOf(&NamespaceSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NamespaceStatus, InType: reflect.TypeOf(&NamespaceStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Node, InType: reflect.TypeOf(&Node{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeAddress, InType: reflect.TypeOf(&NodeAddress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeAffinity, InType: reflect.TypeOf(&NodeAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeCondition, InType: reflect.TypeOf(&NodeCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeDaemonEndpoints, InType: reflect.TypeOf(&NodeDaemonEndpoints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeList, InType: reflect.TypeOf(&NodeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeProxyOptions, InType: reflect.TypeOf(&NodeProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSelector, InType: reflect.TypeOf(&NodeSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSelectorRequirement, InType: reflect.TypeOf(&NodeSelectorRequirement{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSelectorTerm, InType: reflect.TypeOf(&NodeSelectorTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSpec, InType: reflect.TypeOf(&NodeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeStatus, InType: reflect.TypeOf(&NodeStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_NodeSystemInfo, InType: reflect.TypeOf(&NodeSystemInfo{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ObjectFieldSelector, InType: reflect.TypeOf(&ObjectFieldSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ObjectMeta, InType: reflect.TypeOf(&ObjectMeta{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ObjectReference, InType: reflect.TypeOf(&ObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_OwnerReference, InType: reflect.TypeOf(&OwnerReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolume, InType: reflect.TypeOf(&PersistentVolume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaim, InType: reflect.TypeOf(&PersistentVolumeClaim{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaimList, InType: reflect.TypeOf(&PersistentVolumeClaimList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaimSpec, InType: reflect.TypeOf(&PersistentVolumeClaimSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaimStatus, InType: reflect.TypeOf(&PersistentVolumeClaimStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeClaimVolumeSource, InType: reflect.TypeOf(&PersistentVolumeClaimVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeList, InType: reflect.TypeOf(&PersistentVolumeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeSource, InType: reflect.TypeOf(&PersistentVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeSpec, InType: reflect.TypeOf(&PersistentVolumeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PersistentVolumeStatus, InType: reflect.TypeOf(&PersistentVolumeStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Pod, InType: reflect.TypeOf(&Pod{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodAffinity, InType: reflect.TypeOf(&PodAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodAffinityTerm, InType: reflect.TypeOf(&PodAffinityTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodAntiAffinity, InType: reflect.TypeOf(&PodAntiAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodAttachOptions, InType: reflect.TypeOf(&PodAttachOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodCondition, InType: reflect.TypeOf(&PodCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodExecOptions, InType: reflect.TypeOf(&PodExecOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodList, InType: reflect.TypeOf(&PodList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodLogOptions, InType: reflect.TypeOf(&PodLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodProxyOptions, InType: reflect.TypeOf(&PodProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodSecurityContext, InType: reflect.TypeOf(&PodSecurityContext{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodSignature, InType: reflect.TypeOf(&PodSignature{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodSpec, InType: reflect.TypeOf(&PodSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodStatus, InType: reflect.TypeOf(&PodStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodStatusResult, InType: reflect.TypeOf(&PodStatusResult{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplate, InType: reflect.TypeOf(&PodTemplate{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplateList, InType: reflect.TypeOf(&PodTemplateList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplateSpec, InType: reflect.TypeOf(&PodTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Preconditions, InType: reflect.TypeOf(&Preconditions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PreferAvoidPodsEntry, InType: reflect.TypeOf(&PreferAvoidPodsEntry{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PreferredSchedulingTerm, InType: reflect.TypeOf(&PreferredSchedulingTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Probe, InType: reflect.TypeOf(&Probe{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_QuobyteVolumeSource, InType: reflect.TypeOf(&QuobyteVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RBDVolumeSource, InType: reflect.TypeOf(&RBDVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RangeAllocation, InType: reflect.TypeOf(&RangeAllocation{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ReplicationController, InType: reflect.TypeOf(&ReplicationController{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ReplicationControllerList, InType: reflect.TypeOf(&ReplicationControllerList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ReplicationControllerSpec, InType: reflect.TypeOf(&ReplicationControllerSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ReplicationControllerStatus, InType: reflect.TypeOf(&ReplicationControllerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceFieldSelector, InType: reflect.TypeOf(&ResourceFieldSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceQuota, InType: reflect.TypeOf(&ResourceQuota{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceQuotaList, InType: reflect.TypeOf(&ResourceQuotaList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceQuotaSpec, InType: reflect.TypeOf(&ResourceQuotaSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceQuotaStatus, InType: reflect.TypeOf(&ResourceQuotaStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ResourceRequirements, InType: reflect.TypeOf(&ResourceRequirements{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_RunAsUserStrategyOptions, InType: reflect.TypeOf(&RunAsUserStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SELinuxContextStrategyOptions, InType: reflect.TypeOf(&SELinuxContextStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SELinuxOptions, InType: reflect.TypeOf(&SELinuxOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Secret, InType: reflect.TypeOf(&Secret{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretKeySelector, InType: reflect.TypeOf(&SecretKeySelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretList, InType: reflect.TypeOf(&SecretList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecretVolumeSource, InType: reflect.TypeOf(&SecretVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecurityContext, InType: reflect.TypeOf(&SecurityContext{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecurityContextConstraints, InType: reflect.TypeOf(&SecurityContextConstraints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SecurityContextConstraintsList, InType: reflect.TypeOf(&SecurityContextConstraintsList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SerializedReference, InType: reflect.TypeOf(&SerializedReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Service, InType: reflect.TypeOf(&Service{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceAccount, InType: reflect.TypeOf(&ServiceAccount{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceAccountList, InType: reflect.TypeOf(&ServiceAccountList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceList, InType: reflect.TypeOf(&ServiceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServicePort, InType: reflect.TypeOf(&ServicePort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceProxyOptions, InType: reflect.TypeOf(&ServiceProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceSpec, InType: reflect.TypeOf(&ServiceSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ServiceStatus, InType: reflect.TypeOf(&ServiceStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_SupplementalGroupsStrategyOptions, InType: reflect.TypeOf(&SupplementalGroupsStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_TCPSocketAction, InType: reflect.TypeOf(&TCPSocketAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Taint, InType: reflect.TypeOf(&Taint{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Toleration, InType: reflect.TypeOf(&Toleration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Volume, InType: reflect.TypeOf(&Volume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_VolumeMount, InType: reflect.TypeOf(&VolumeMount{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_VolumeSource, InType: reflect.TypeOf(&VolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_VsphereVirtualDiskVolumeSource, InType: reflect.TypeOf(&VsphereVirtualDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_WeightedPodAffinityTerm, InType: reflect.TypeOf(&WeightedPodAffinityTerm{})}, + ) +} + +func DeepCopy_v1_AWSElasticBlockStoreVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AWSElasticBlockStoreVolumeSource) + out := out.(*AWSElasticBlockStoreVolumeSource) + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_Affinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Affinity) + out := out.(*Affinity) + if in.NodeAffinity != nil { + in, out := &in.NodeAffinity, &out.NodeAffinity + *out = new(NodeAffinity) + if err := DeepCopy_v1_NodeAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.NodeAffinity = nil + } + if in.PodAffinity != nil { + in, out := &in.PodAffinity, &out.PodAffinity + *out = new(PodAffinity) + if err := DeepCopy_v1_PodAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.PodAffinity = nil + } + if in.PodAntiAffinity != nil { + in, out := &in.PodAntiAffinity, &out.PodAntiAffinity + *out = new(PodAntiAffinity) + if err := DeepCopy_v1_PodAntiAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.PodAntiAffinity = nil + } + return nil + } +} + +func DeepCopy_v1_AttachedVolume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AttachedVolume) + out := out.(*AttachedVolume) + out.Name = in.Name + out.DevicePath = in.DevicePath + return nil + } +} + +func DeepCopy_v1_AvoidPods(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AvoidPods) + out := out.(*AvoidPods) + if in.PreferAvoidPods != nil { + in, out := &in.PreferAvoidPods, &out.PreferAvoidPods + *out = make([]PreferAvoidPodsEntry, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PreferAvoidPodsEntry(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferAvoidPods = nil + } + return nil + } +} + +func DeepCopy_v1_AzureDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AzureDiskVolumeSource) + out := out.(*AzureDiskVolumeSource) + out.DiskName = in.DiskName + out.DataDiskURI = in.DataDiskURI + if in.CachingMode != nil { + in, out := &in.CachingMode, &out.CachingMode + *out = new(AzureDataDiskCachingMode) + **out = **in + } else { + out.CachingMode = nil + } + if in.FSType != nil { + in, out := &in.FSType, &out.FSType + *out = new(string) + **out = **in + } else { + out.FSType = nil + } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } else { + out.ReadOnly = nil + } + return nil + } +} + +func DeepCopy_v1_AzureFileVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AzureFileVolumeSource) + out := out.(*AzureFileVolumeSource) + out.SecretName = in.SecretName + out.ShareName = in.ShareName + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_Binding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Binding) + out := out.(*Binding) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Target = in.Target + return nil + } +} + +func DeepCopy_v1_Capabilities(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Capabilities) + out := out.(*Capabilities) + if in.Add != nil { + in, out := &in.Add, &out.Add + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Add = nil + } + if in.Drop != nil { + in, out := &in.Drop, &out.Drop + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Drop = nil + } + return nil + } +} + +func DeepCopy_v1_CephFSVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CephFSVolumeSource) + out := out.(*CephFSVolumeSource) + if in.Monitors != nil { + in, out := &in.Monitors, &out.Monitors + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Monitors = nil + } + out.Path = in.Path + out.User = in.User + out.SecretFile = in.SecretFile + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_CinderVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CinderVolumeSource) + out := out.(*CinderVolumeSource) + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_ComponentCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentCondition) + out := out.(*ComponentCondition) + out.Type = in.Type + out.Status = in.Status + out.Message = in.Message + out.Error = in.Error + return nil + } +} + +func DeepCopy_v1_ComponentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentStatus) + out := out.(*ComponentStatus) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ComponentCondition, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Conditions = nil + } + return nil + } +} + +func DeepCopy_v1_ComponentStatusList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentStatusList) + out := out.(*ComponentStatusList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ComponentStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ComponentStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ConfigMap(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMap) + out := out.(*ConfigMap) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_v1_ConfigMapKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapKeySelector) + out := out.(*ConfigMapKeySelector) + out.LocalObjectReference = in.LocalObjectReference + out.Key = in.Key + return nil + } +} + +func DeepCopy_v1_ConfigMapList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapList) + out := out.(*ConfigMapList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ConfigMap, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ConfigMap(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ConfigMapVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapVolumeSource) + out := out.(*ConfigMapVolumeSource) + out.LocalObjectReference = in.LocalObjectReference + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := DeepCopy_v1_KeyToPath(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_v1_Container(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Container) + out := out.(*Container) + out.Name = in.Name + out.Image = in.Image + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Args = nil + } + out.WorkingDir = in.WorkingDir + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ContainerPort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]EnvVar, len(*in)) + for i := range *in { + if err := DeepCopy_v1_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + if err := DeepCopy_v1_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + if in.VolumeMounts != nil { + in, out := &in.VolumeMounts, &out.VolumeMounts + *out = make([]VolumeMount, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumeMounts = nil + } + if in.LivenessProbe != nil { + in, out := &in.LivenessProbe, &out.LivenessProbe + *out = new(Probe) + if err := DeepCopy_v1_Probe(*in, *out, c); err != nil { + return err + } + } else { + out.LivenessProbe = nil + } + if in.ReadinessProbe != nil { + in, out := &in.ReadinessProbe, &out.ReadinessProbe + *out = new(Probe) + if err := DeepCopy_v1_Probe(*in, *out, c); err != nil { + return err + } + } else { + out.ReadinessProbe = nil + } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(Lifecycle) + if err := DeepCopy_v1_Lifecycle(*in, *out, c); err != nil { + return err + } + } else { + out.Lifecycle = nil + } + out.TerminationMessagePath = in.TerminationMessagePath + out.ImagePullPolicy = in.ImagePullPolicy + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(SecurityContext) + if err := DeepCopy_v1_SecurityContext(*in, *out, c); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + out.Stdin = in.Stdin + out.StdinOnce = in.StdinOnce + out.TTY = in.TTY + return nil + } +} + +func DeepCopy_v1_ContainerImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerImage) + out := out.(*ContainerImage) + if in.Names != nil { + in, out := &in.Names, &out.Names + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Names = nil + } + out.SizeBytes = in.SizeBytes + return nil + } +} + +func DeepCopy_v1_ContainerPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerPort) + out := out.(*ContainerPort) + out.Name = in.Name + out.HostPort = in.HostPort + out.ContainerPort = in.ContainerPort + out.Protocol = in.Protocol + out.HostIP = in.HostIP + return nil + } +} + +func DeepCopy_v1_ContainerState(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerState) + out := out.(*ContainerState) + if in.Waiting != nil { + in, out := &in.Waiting, &out.Waiting + *out = new(ContainerStateWaiting) + **out = **in + } else { + out.Waiting = nil + } + if in.Running != nil { + in, out := &in.Running, &out.Running + *out = new(ContainerStateRunning) + if err := DeepCopy_v1_ContainerStateRunning(*in, *out, c); err != nil { + return err + } + } else { + out.Running = nil + } + if in.Terminated != nil { + in, out := &in.Terminated, &out.Terminated + *out = new(ContainerStateTerminated) + if err := DeepCopy_v1_ContainerStateTerminated(*in, *out, c); err != nil { + return err + } + } else { + out.Terminated = nil + } + return nil + } +} + +func DeepCopy_v1_ContainerStateRunning(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateRunning) + out := out.(*ContainerStateRunning) + out.StartedAt = in.StartedAt.DeepCopy() + return nil + } +} + +func DeepCopy_v1_ContainerStateTerminated(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateTerminated) + out := out.(*ContainerStateTerminated) + out.ExitCode = in.ExitCode + out.Signal = in.Signal + out.Reason = in.Reason + out.Message = in.Message + out.StartedAt = in.StartedAt.DeepCopy() + out.FinishedAt = in.FinishedAt.DeepCopy() + out.ContainerID = in.ContainerID + return nil + } +} + +func DeepCopy_v1_ContainerStateWaiting(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateWaiting) + out := out.(*ContainerStateWaiting) + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_ContainerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStatus) + out := out.(*ContainerStatus) + out.Name = in.Name + if err := DeepCopy_v1_ContainerState(&in.State, &out.State, c); err != nil { + return err + } + if err := DeepCopy_v1_ContainerState(&in.LastTerminationState, &out.LastTerminationState, c); err != nil { + return err + } + out.Ready = in.Ready + out.RestartCount = in.RestartCount + out.Image = in.Image + out.ImageID = in.ImageID + out.ContainerID = in.ContainerID + return nil + } +} + +func DeepCopy_v1_DaemonEndpoint(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonEndpoint) + out := out.(*DaemonEndpoint) + out.Port = in.Port + return nil + } +} + +func DeepCopy_v1_DeleteOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeleteOptions) + out := out.(*DeleteOptions) + out.TypeMeta = in.TypeMeta + if in.GracePeriodSeconds != nil { + in, out := &in.GracePeriodSeconds, &out.GracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.GracePeriodSeconds = nil + } + if in.Preconditions != nil { + in, out := &in.Preconditions, &out.Preconditions + *out = new(Preconditions) + if err := DeepCopy_v1_Preconditions(*in, *out, c); err != nil { + return err + } + } else { + out.Preconditions = nil + } + if in.OrphanDependents != nil { + in, out := &in.OrphanDependents, &out.OrphanDependents + *out = new(bool) + **out = **in + } else { + out.OrphanDependents = nil + } + return nil + } +} + +func DeepCopy_v1_DeprecatedDownwardAPIVolumeFile(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeprecatedDownwardAPIVolumeFile) + out := out.(*DeprecatedDownwardAPIVolumeFile) + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_v1_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_v1_DeprecatedDownwardAPIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeprecatedDownwardAPIVolumeSource) + out := out.(*DeprecatedDownwardAPIVolumeSource) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DeprecatedDownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := DeepCopy_v1_DeprecatedDownwardAPIVolumeFile(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_v1_DownwardAPIVolumeFile(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DownwardAPIVolumeFile) + out := out.(*DownwardAPIVolumeFile) + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_v1_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_v1_DownwardAPIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DownwardAPIVolumeSource) + out := out.(*DownwardAPIVolumeSource) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := DeepCopy_v1_DownwardAPIVolumeFile(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_v1_EmptyDirVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EmptyDirVolumeSource) + out := out.(*EmptyDirVolumeSource) + out.Medium = in.Medium + return nil + } +} + +func DeepCopy_v1_EndpointAddress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointAddress) + out := out.(*EndpointAddress) + out.IP = in.IP + out.Hostname = in.Hostname + if in.NodeName != nil { + in, out := &in.NodeName, &out.NodeName + *out = new(string) + **out = **in + } else { + out.NodeName = nil + } + if in.TargetRef != nil { + in, out := &in.TargetRef, &out.TargetRef + *out = new(ObjectReference) + **out = **in + } else { + out.TargetRef = nil + } + return nil + } +} + +func DeepCopy_v1_EndpointPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointPort) + out := out.(*EndpointPort) + out.Name = in.Name + out.Port = in.Port + out.Protocol = in.Protocol + return nil + } +} + +func DeepCopy_v1_EndpointSubset(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointSubset) + out := out.(*EndpointSubset) + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := DeepCopy_v1_EndpointAddress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Addresses = nil + } + if in.NotReadyAddresses != nil { + in, out := &in.NotReadyAddresses, &out.NotReadyAddresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := DeepCopy_v1_EndpointAddress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.NotReadyAddresses = nil + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]EndpointPort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + return nil + } +} + +func DeepCopy_v1_Endpoints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Endpoints) + out := out.(*Endpoints) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subsets != nil { + in, out := &in.Subsets, &out.Subsets + *out = make([]EndpointSubset, len(*in)) + for i := range *in { + if err := DeepCopy_v1_EndpointSubset(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Subsets = nil + } + return nil + } +} + +func DeepCopy_v1_EndpointsList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointsList) + out := out.(*EndpointsList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Endpoints, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Endpoints(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_EnvVar(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EnvVar) + out := out.(*EnvVar) + out.Name = in.Name + out.Value = in.Value + if in.ValueFrom != nil { + in, out := &in.ValueFrom, &out.ValueFrom + *out = new(EnvVarSource) + if err := DeepCopy_v1_EnvVarSource(*in, *out, c); err != nil { + return err + } + } else { + out.ValueFrom = nil + } + return nil + } +} + +func DeepCopy_v1_EnvVarSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EnvVarSource) + out := out.(*EnvVarSource) + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_v1_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.ConfigMapKeyRef != nil { + in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef + *out = new(ConfigMapKeySelector) + **out = **in + } else { + out.ConfigMapKeyRef = nil + } + if in.SecretKeyRef != nil { + in, out := &in.SecretKeyRef, &out.SecretKeyRef + *out = new(SecretKeySelector) + **out = **in + } else { + out.SecretKeyRef = nil + } + return nil + } +} + +func DeepCopy_v1_Event(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Event) + out := out.(*Event) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.InvolvedObject = in.InvolvedObject + out.Reason = in.Reason + out.Message = in.Message + out.Source = in.Source + out.FirstTimestamp = in.FirstTimestamp.DeepCopy() + out.LastTimestamp = in.LastTimestamp.DeepCopy() + out.Count = in.Count + out.Type = in.Type + return nil + } +} + +func DeepCopy_v1_EventList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EventList) + out := out.(*EventList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Event, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Event(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_EventSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EventSource) + out := out.(*EventSource) + out.Component = in.Component + out.Host = in.Host + return nil + } +} + +func DeepCopy_v1_ExecAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExecAction) + out := out.(*ExecAction) + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_v1_ExportOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExportOptions) + out := out.(*ExportOptions) + out.TypeMeta = in.TypeMeta + out.Export = in.Export + out.Exact = in.Exact + return nil + } +} + +func DeepCopy_v1_FCVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FCVolumeSource) + out := out.(*FCVolumeSource) + if in.TargetWWNs != nil { + in, out := &in.TargetWWNs, &out.TargetWWNs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.TargetWWNs = nil + } + if in.Lun != nil { + in, out := &in.Lun, &out.Lun + *out = new(int32) + **out = **in + } else { + out.Lun = nil + } + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_FSGroupStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FSGroupStrategyOptions) + out := out.(*FSGroupStrategyOptions) + out.Type = in.Type + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_v1_FlexVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FlexVolumeSource) + out := out.(*FlexVolumeSource) + out.Driver = in.Driver + out.FSType = in.FSType + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Options = nil + } + return nil + } +} + +func DeepCopy_v1_FlockerVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FlockerVolumeSource) + out := out.(*FlockerVolumeSource) + out.DatasetName = in.DatasetName + return nil + } +} + +func DeepCopy_v1_GCEPersistentDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GCEPersistentDiskVolumeSource) + out := out.(*GCEPersistentDiskVolumeSource) + out.PDName = in.PDName + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_GitRepoVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitRepoVolumeSource) + out := out.(*GitRepoVolumeSource) + out.Repository = in.Repository + out.Revision = in.Revision + out.Directory = in.Directory + return nil + } +} + +func DeepCopy_v1_GlusterfsVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GlusterfsVolumeSource) + out := out.(*GlusterfsVolumeSource) + out.EndpointsName = in.EndpointsName + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_HTTPGetAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPGetAction) + out := out.(*HTTPGetAction) + out.Path = in.Path + out.Port = in.Port + out.Host = in.Host + out.Scheme = in.Scheme + if in.HTTPHeaders != nil { + in, out := &in.HTTPHeaders, &out.HTTPHeaders + *out = make([]HTTPHeader, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.HTTPHeaders = nil + } + return nil + } +} + +func DeepCopy_v1_HTTPHeader(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPHeader) + out := out.(*HTTPHeader) + out.Name = in.Name + out.Value = in.Value + return nil + } +} + +func DeepCopy_v1_Handler(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Handler) + out := out.(*Handler) + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + *out = new(ExecAction) + if err := DeepCopy_v1_ExecAction(*in, *out, c); err != nil { + return err + } + } else { + out.Exec = nil + } + if in.HTTPGet != nil { + in, out := &in.HTTPGet, &out.HTTPGet + *out = new(HTTPGetAction) + if err := DeepCopy_v1_HTTPGetAction(*in, *out, c); err != nil { + return err + } + } else { + out.HTTPGet = nil + } + if in.TCPSocket != nil { + in, out := &in.TCPSocket, &out.TCPSocket + *out = new(TCPSocketAction) + **out = **in + } else { + out.TCPSocket = nil + } + return nil + } +} + +func DeepCopy_v1_HostPathVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostPathVolumeSource) + out := out.(*HostPathVolumeSource) + out.Path = in.Path + return nil + } +} + +func DeepCopy_v1_IDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IDRange) + out := out.(*IDRange) + out.Min = in.Min + out.Max = in.Max + return nil + } +} + +func DeepCopy_v1_ISCSIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ISCSIVolumeSource) + out := out.(*ISCSIVolumeSource) + out.TargetPortal = in.TargetPortal + out.IQN = in.IQN + out.Lun = in.Lun + out.ISCSIInterface = in.ISCSIInterface + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_KeyToPath(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KeyToPath) + out := out.(*KeyToPath) + out.Key = in.Key + out.Path = in.Path + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_v1_Lifecycle(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Lifecycle) + out := out.(*Lifecycle) + if in.PostStart != nil { + in, out := &in.PostStart, &out.PostStart + *out = new(Handler) + if err := DeepCopy_v1_Handler(*in, *out, c); err != nil { + return err + } + } else { + out.PostStart = nil + } + if in.PreStop != nil { + in, out := &in.PreStop, &out.PreStop + *out = new(Handler) + if err := DeepCopy_v1_Handler(*in, *out, c); err != nil { + return err + } + } else { + out.PreStop = nil + } + return nil + } +} + +func DeepCopy_v1_LimitRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRange) + out := out.(*LimitRange) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_LimitRangeSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_LimitRangeItem(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeItem) + out := out.(*LimitRangeItem) + out.Type = in.Type + if in.Max != nil { + in, out := &in.Max, &out.Max + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Max = nil + } + if in.Min != nil { + in, out := &in.Min, &out.Min + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Min = nil + } + if in.Default != nil { + in, out := &in.Default, &out.Default + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Default = nil + } + if in.DefaultRequest != nil { + in, out := &in.DefaultRequest, &out.DefaultRequest + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.DefaultRequest = nil + } + if in.MaxLimitRequestRatio != nil { + in, out := &in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.MaxLimitRequestRatio = nil + } + return nil + } +} + +func DeepCopy_v1_LimitRangeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeList) + out := out.(*LimitRangeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]LimitRange, len(*in)) + for i := range *in { + if err := DeepCopy_v1_LimitRange(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_LimitRangeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeSpec) + out := out.(*LimitRangeSpec) + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make([]LimitRangeItem, len(*in)) + for i := range *in { + if err := DeepCopy_v1_LimitRangeItem(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Limits = nil + } + return nil + } +} + +func DeepCopy_v1_List(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*List) + out := out.(*List) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]runtime.RawExtension, len(*in)) + for i := range *in { + if err := runtime.DeepCopy_runtime_RawExtension(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ListOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ListOptions) + out := out.(*ListOptions) + out.TypeMeta = in.TypeMeta + out.LabelSelector = in.LabelSelector + out.FieldSelector = in.FieldSelector + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + return nil + } +} + +func DeepCopy_v1_LoadBalancerIngress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LoadBalancerIngress) + out := out.(*LoadBalancerIngress) + out.IP = in.IP + out.Hostname = in.Hostname + return nil + } +} + +func DeepCopy_v1_LoadBalancerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LoadBalancerStatus) + out := out.(*LoadBalancerStatus) + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]LoadBalancerIngress, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ingress = nil + } + return nil + } +} + +func DeepCopy_v1_LocalObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LocalObjectReference) + out := out.(*LocalObjectReference) + out.Name = in.Name + return nil + } +} + +func DeepCopy_v1_NFSVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NFSVolumeSource) + out := out.(*NFSVolumeSource) + out.Server = in.Server + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_Namespace(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Namespace) + out := out.(*Namespace) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_NamespaceSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1_NamespaceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceList) + out := out.(*NamespaceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Namespace, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Namespace(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_NamespaceSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceSpec) + out := out.(*NamespaceSpec) + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]FinalizerName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Finalizers = nil + } + return nil + } +} + +func DeepCopy_v1_NamespaceStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceStatus) + out := out.(*NamespaceStatus) + out.Phase = in.Phase + return nil + } +} + +func DeepCopy_v1_Node(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Node) + out := out.(*Node) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_v1_NodeStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_NodeAddress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeAddress) + out := out.(*NodeAddress) + out.Type = in.Type + out.Address = in.Address + return nil + } +} + +func DeepCopy_v1_NodeAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeAffinity) + out := out.(*NodeAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = new(NodeSelector) + if err := DeepCopy_v1_NodeSelector(*in, *out, c); err != nil { + return err + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]PreferredSchedulingTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PreferredSchedulingTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_v1_NodeCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeCondition) + out := out.(*NodeCondition) + out.Type = in.Type + out.Status = in.Status + out.LastHeartbeatTime = in.LastHeartbeatTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_NodeDaemonEndpoints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeDaemonEndpoints) + out := out.(*NodeDaemonEndpoints) + out.KubeletEndpoint = in.KubeletEndpoint + return nil + } +} + +func DeepCopy_v1_NodeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeList) + out := out.(*NodeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Node, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Node(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_NodeProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeProxyOptions) + out := out.(*NodeProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_v1_NodeSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelector) + out := out.(*NodeSelector) + if in.NodeSelectorTerms != nil { + in, out := &in.NodeSelectorTerms, &out.NodeSelectorTerms + *out = make([]NodeSelectorTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_NodeSelectorTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.NodeSelectorTerms = nil + } + return nil + } +} + +func DeepCopy_v1_NodeSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelectorRequirement) + out := out.(*NodeSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} + +func DeepCopy_v1_NodeSelectorTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelectorTerm) + out := out.(*NodeSelectorTerm) + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]NodeSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_v1_NodeSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_v1_NodeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSpec) + out := out.(*NodeSpec) + out.PodCIDR = in.PodCIDR + out.ExternalID = in.ExternalID + out.ProviderID = in.ProviderID + out.Unschedulable = in.Unschedulable + return nil + } +} + +func DeepCopy_v1_NodeStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeStatus) + out := out.(*NodeStatus) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + if in.Allocatable != nil { + in, out := &in.Allocatable, &out.Allocatable + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Allocatable = nil + } + out.Phase = in.Phase + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]NodeCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1_NodeCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]NodeAddress, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Addresses = nil + } + out.DaemonEndpoints = in.DaemonEndpoints + out.NodeInfo = in.NodeInfo + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ContainerImage, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ContainerImage(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + if in.VolumesInUse != nil { + in, out := &in.VolumesInUse, &out.VolumesInUse + *out = make([]UniqueVolumeName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumesInUse = nil + } + if in.VolumesAttached != nil { + in, out := &in.VolumesAttached, &out.VolumesAttached + *out = make([]AttachedVolume, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumesAttached = nil + } + return nil + } +} + +func DeepCopy_v1_NodeSystemInfo(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSystemInfo) + out := out.(*NodeSystemInfo) + out.MachineID = in.MachineID + out.SystemUUID = in.SystemUUID + out.BootID = in.BootID + out.KernelVersion = in.KernelVersion + out.OSImage = in.OSImage + out.ContainerRuntimeVersion = in.ContainerRuntimeVersion + out.KubeletVersion = in.KubeletVersion + out.KubeProxyVersion = in.KubeProxyVersion + out.OperatingSystem = in.OperatingSystem + out.Architecture = in.Architecture + return nil + } +} + +func DeepCopy_v1_ObjectFieldSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectFieldSelector) + out := out.(*ObjectFieldSelector) + out.APIVersion = in.APIVersion + out.FieldPath = in.FieldPath + return nil + } +} + +func DeepCopy_v1_ObjectMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectMeta) + out := out.(*ObjectMeta) + out.Name = in.Name + out.GenerateName = in.GenerateName + out.Namespace = in.Namespace + out.SelfLink = in.SelfLink + out.UID = in.UID + out.ResourceVersion = in.ResourceVersion + out.Generation = in.Generation + out.CreationTimestamp = in.CreationTimestamp.DeepCopy() + if in.DeletionTimestamp != nil { + in, out := &in.DeletionTimestamp, &out.DeletionTimestamp + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.DeletionTimestamp = nil + } + if in.DeletionGracePeriodSeconds != nil { + in, out := &in.DeletionGracePeriodSeconds, &out.DeletionGracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.DeletionGracePeriodSeconds = nil + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Labels = nil + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Annotations = nil + } + if in.OwnerReferences != nil { + in, out := &in.OwnerReferences, &out.OwnerReferences + *out = make([]OwnerReference, len(*in)) + for i := range *in { + if err := DeepCopy_v1_OwnerReference(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.OwnerReferences = nil + } + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Finalizers = nil + } + out.ClusterName = in.ClusterName + return nil + } +} + +func DeepCopy_v1_ObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectReference) + out := out.(*ObjectReference) + out.Kind = in.Kind + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = in.UID + out.APIVersion = in.APIVersion + out.ResourceVersion = in.ResourceVersion + out.FieldPath = in.FieldPath + return nil + } +} + +func DeepCopy_v1_OwnerReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OwnerReference) + out := out.(*OwnerReference) + out.APIVersion = in.APIVersion + out.Kind = in.Kind + out.Name = in.Name + out.UID = in.UID + if in.Controller != nil { + in, out := &in.Controller, &out.Controller + *out = new(bool) + **out = **in + } else { + out.Controller = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolume) + out := out.(*PersistentVolume) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PersistentVolumeSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaim(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaim) + out := out.(*PersistentVolumeClaim) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PersistentVolumeClaimSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_PersistentVolumeClaimStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaimList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimList) + out := out.(*PersistentVolumeClaimList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolumeClaim, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PersistentVolumeClaim(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaimSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimSpec) + out := out.(*PersistentVolumeClaimSpec) + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := DeepCopy_v1_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + out.VolumeName = in.VolumeName + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaimStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimStatus) + out := out.(*PersistentVolumeClaimStatus) + out.Phase = in.Phase + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeClaimVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimVolumeSource) + out := out.(*PersistentVolumeClaimVolumeSource) + out.ClaimName = in.ClaimName + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_PersistentVolumeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeList) + out := out.(*PersistentVolumeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolume, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PersistentVolume(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeSource) + out := out.(*PersistentVolumeSource) + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + **out = **in + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in + } else { + out.AWSElasticBlockStore = nil + } + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + **out = **in + } else { + out.HostPath = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + **out = **in + } else { + out.Glusterfs = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + **out = **in + } else { + out.NFS = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := DeepCopy_v1_RBDVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + **out = **in + } else { + out.ISCSI = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + **out = **in + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := DeepCopy_v1_CephFSVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := DeepCopy_v1_FCVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FC = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + **out = **in + } else { + out.Flocker = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := DeepCopy_v1_FlexVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + **out = **in + } else { + out.AzureFile = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in + } else { + out.VsphereVolume = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + **out = **in + } else { + out.Quobyte = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := DeepCopy_v1_AzureDiskVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil + } +} + +func DeepCopy_v1_PersistentVolumeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeSpec) + out := out.(*PersistentVolumeSpec) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + if err := DeepCopy_v1_PersistentVolumeSource(&in.PersistentVolumeSource, &out.PersistentVolumeSource, c); err != nil { + return err + } + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.ClaimRef != nil { + in, out := &in.ClaimRef, &out.ClaimRef + *out = new(ObjectReference) + **out = **in + } else { + out.ClaimRef = nil + } + out.PersistentVolumeReclaimPolicy = in.PersistentVolumeReclaimPolicy + return nil + } +} + +func DeepCopy_v1_PersistentVolumeStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeStatus) + out := out.(*PersistentVolumeStatus) + out.Phase = in.Phase + out.Message = in.Message + out.Reason = in.Reason + return nil + } +} + +func DeepCopy_v1_Pod(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Pod) + out := out.(*Pod) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PodSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_PodStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_PodAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAffinity) + out := out.(*PodAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_v1_PodAffinityTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAffinityTerm) + out := out.(*PodAffinityTerm) + if in.LabelSelector != nil { + in, out := &in.LabelSelector, &out.LabelSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.LabelSelector = nil + } + if in.Namespaces != nil { + in, out := &in.Namespaces, &out.Namespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Namespaces = nil + } + out.TopologyKey = in.TopologyKey + return nil + } +} + +func DeepCopy_v1_PodAntiAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAntiAffinity) + out := out.(*PodAntiAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_v1_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_v1_PodAttachOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAttachOptions) + out := out.(*PodAttachOptions) + out.TypeMeta = in.TypeMeta + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + return nil + } +} + +func DeepCopy_v1_PodCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodCondition) + out := out.(*PodCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_PodExecOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodExecOptions) + out := out.(*PodExecOptions) + out.TypeMeta = in.TypeMeta + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_v1_PodList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodList) + out := out.(*PodList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Pod, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Pod(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_PodLogOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodLogOptions) + out := out.(*PodLogOptions) + out.TypeMeta = in.TypeMeta + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } else { + out.SinceSeconds = nil + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.SinceTime = nil + } + out.Timestamps = in.Timestamps + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } else { + out.TailLines = nil + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } else { + out.LimitBytes = nil + } + return nil + } +} + +func DeepCopy_v1_PodProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodProxyOptions) + out := out.(*PodProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_v1_PodSecurityContext(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityContext) + out := out.(*PodSecurityContext) + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + if in.RunAsUser != nil { + in, out := &in.RunAsUser, &out.RunAsUser + *out = new(int64) + **out = **in + } else { + out.RunAsUser = nil + } + if in.RunAsNonRoot != nil { + in, out := &in.RunAsNonRoot, &out.RunAsNonRoot + *out = new(bool) + **out = **in + } else { + out.RunAsNonRoot = nil + } + if in.SupplementalGroups != nil { + in, out := &in.SupplementalGroups, &out.SupplementalGroups + *out = make([]int64, len(*in)) + copy(*out, *in) + } else { + out.SupplementalGroups = nil + } + if in.FSGroup != nil { + in, out := &in.FSGroup, &out.FSGroup + *out = new(int64) + **out = **in + } else { + out.FSGroup = nil + } + return nil + } +} + +func DeepCopy_v1_PodSignature(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSignature) + out := out.(*PodSignature) + if in.PodController != nil { + in, out := &in.PodController, &out.PodController + *out = new(OwnerReference) + if err := DeepCopy_v1_OwnerReference(*in, *out, c); err != nil { + return err + } + } else { + out.PodController = nil + } + return nil + } +} + +func DeepCopy_v1_PodSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSpec) + out := out.(*PodSpec) + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]Volume, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Volume(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Volumes = nil + } + if in.InitContainers != nil { + in, out := &in.InitContainers, &out.InitContainers + *out = make([]Container, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Container(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.InitContainers = nil + } + if in.Containers != nil { + in, out := &in.Containers, &out.Containers + *out = make([]Container, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Container(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Containers = nil + } + out.RestartPolicy = in.RestartPolicy + if in.TerminationGracePeriodSeconds != nil { + in, out := &in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.TerminationGracePeriodSeconds = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + out.DNSPolicy = in.DNSPolicy + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.NodeSelector = nil + } + out.ServiceAccountName = in.ServiceAccountName + out.DeprecatedServiceAccount = in.DeprecatedServiceAccount + out.NodeName = in.NodeName + out.HostNetwork = in.HostNetwork + out.HostPID = in.HostPID + out.HostIPC = in.HostIPC + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(PodSecurityContext) + if err := DeepCopy_v1_PodSecurityContext(*in, *out, c); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ImagePullSecrets = nil + } + out.Hostname = in.Hostname + out.Subdomain = in.Subdomain + return nil + } +} + +func DeepCopy_v1_PodStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodStatus) + out := out.(*PodStatus) + out.Phase = in.Phase + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]PodCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PodCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + out.Message = in.Message + out.Reason = in.Reason + out.HostIP = in.HostIP + out.PodIP = in.PodIP + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.InitContainerStatuses != nil { + in, out := &in.InitContainerStatuses, &out.InitContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ContainerStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.InitContainerStatuses = nil + } + if in.ContainerStatuses != nil { + in, out := &in.ContainerStatuses, &out.ContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ContainerStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.ContainerStatuses = nil + } + return nil + } +} + +func DeepCopy_v1_PodStatusResult(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodStatusResult) + out := out.(*PodStatusResult) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PodStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_PodTemplate(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplate) + out := out.(*PodTemplate) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_PodTemplateList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplateList) + out := out.(*PodTemplateList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodTemplate, len(*in)) + for i := range *in { + if err := DeepCopy_v1_PodTemplate(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_PodTemplateSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplateSpec) + out := out.(*PodTemplateSpec) + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_PodSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_Preconditions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Preconditions) + out := out.(*Preconditions) + if in.UID != nil { + in, out := &in.UID, &out.UID + *out = new(types.UID) + **out = **in + } else { + out.UID = nil + } + return nil + } +} + +func DeepCopy_v1_PreferAvoidPodsEntry(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PreferAvoidPodsEntry) + out := out.(*PreferAvoidPodsEntry) + if err := DeepCopy_v1_PodSignature(&in.PodSignature, &out.PodSignature, c); err != nil { + return err + } + out.EvictionTime = in.EvictionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_PreferredSchedulingTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PreferredSchedulingTerm) + out := out.(*PreferredSchedulingTerm) + out.Weight = in.Weight + if err := DeepCopy_v1_NodeSelectorTerm(&in.Preference, &out.Preference, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_Probe(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Probe) + out := out.(*Probe) + if err := DeepCopy_v1_Handler(&in.Handler, &out.Handler, c); err != nil { + return err + } + out.InitialDelaySeconds = in.InitialDelaySeconds + out.TimeoutSeconds = in.TimeoutSeconds + out.PeriodSeconds = in.PeriodSeconds + out.SuccessThreshold = in.SuccessThreshold + out.FailureThreshold = in.FailureThreshold + return nil + } +} + +func DeepCopy_v1_QuobyteVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*QuobyteVolumeSource) + out := out.(*QuobyteVolumeSource) + out.Registry = in.Registry + out.Volume = in.Volume + out.ReadOnly = in.ReadOnly + out.User = in.User + out.Group = in.Group + return nil + } +} + +func DeepCopy_v1_RBDVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RBDVolumeSource) + out := out.(*RBDVolumeSource) + if in.CephMonitors != nil { + in, out := &in.CephMonitors, &out.CephMonitors + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.CephMonitors = nil + } + out.RBDImage = in.RBDImage + out.FSType = in.FSType + out.RBDPool = in.RBDPool + out.RadosUser = in.RadosUser + out.Keyring = in.Keyring + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_v1_RangeAllocation(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RangeAllocation) + out := out.(*RangeAllocation) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Range = in.Range + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_v1_ReplicationController(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationController) + out := out.(*ReplicationController) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_ReplicationControllerSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1_ReplicationControllerList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerList) + out := out.(*ReplicationControllerList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReplicationController, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ReplicationController(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ReplicationControllerSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerSpec) + out := out.(*ReplicationControllerSpec) + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } else { + out.Replicas = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(PodTemplateSpec) + if err := DeepCopy_v1_PodTemplateSpec(*in, *out, c); err != nil { + return err + } + } else { + out.Template = nil + } + return nil + } +} + +func DeepCopy_v1_ReplicationControllerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerStatus) + out := out.(*ReplicationControllerStatus) + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil + } +} + +func DeepCopy_v1_ResourceFieldSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceFieldSelector) + out := out.(*ResourceFieldSelector) + out.ContainerName = in.ContainerName + out.Resource = in.Resource + out.Divisor = in.Divisor.DeepCopy() + return nil + } +} + +func DeepCopy_v1_ResourceQuota(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuota) + out := out.(*ResourceQuota) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_ResourceQuotaSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_ResourceQuotaStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_ResourceQuotaList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaList) + out := out.(*ResourceQuotaList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ResourceQuota, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ResourceQuota(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ResourceQuotaSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaSpec) + out := out.(*ResourceQuotaSpec) + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Hard = nil + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]ResourceQuotaScope, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Scopes = nil + } + return nil + } +} + +func DeepCopy_v1_ResourceQuotaStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaStatus) + out := out.(*ResourceQuotaStatus) + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Hard = nil + } + if in.Used != nil { + in, out := &in.Used, &out.Used + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Used = nil + } + return nil + } +} + +func DeepCopy_v1_ResourceRequirements(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceRequirements) + out := out.(*ResourceRequirements) + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Limits = nil + } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Requests = nil + } + return nil + } +} + +func DeepCopy_v1_RunAsUserStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RunAsUserStrategyOptions) + out := out.(*RunAsUserStrategyOptions) + out.Type = in.Type + if in.UID != nil { + in, out := &in.UID, &out.UID + *out = new(int64) + **out = **in + } else { + out.UID = nil + } + if in.UIDRangeMin != nil { + in, out := &in.UIDRangeMin, &out.UIDRangeMin + *out = new(int64) + **out = **in + } else { + out.UIDRangeMin = nil + } + if in.UIDRangeMax != nil { + in, out := &in.UIDRangeMax, &out.UIDRangeMax + *out = new(int64) + **out = **in + } else { + out.UIDRangeMax = nil + } + return nil + } +} + +func DeepCopy_v1_SELinuxContextStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxContextStrategyOptions) + out := out.(*SELinuxContextStrategyOptions) + out.Type = in.Type + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + return nil + } +} + +func DeepCopy_v1_SELinuxOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxOptions) + out := out.(*SELinuxOptions) + out.User = in.User + out.Role = in.Role + out.Type = in.Type + out.Level = in.Level + return nil + } +} + +func DeepCopy_v1_Secret(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Secret) + out := out.(*Secret) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string][]byte) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(*[]byte) + } + } + } else { + out.Data = nil + } + if in.StringData != nil { + in, out := &in.StringData, &out.StringData + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.StringData = nil + } + out.Type = in.Type + return nil + } +} + +func DeepCopy_v1_SecretKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretKeySelector) + out := out.(*SecretKeySelector) + out.LocalObjectReference = in.LocalObjectReference + out.Key = in.Key + return nil + } +} + +func DeepCopy_v1_SecretList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretList) + out := out.(*SecretList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Secret, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Secret(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_SecretVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretVolumeSource) + out := out.(*SecretVolumeSource) + out.SecretName = in.SecretName + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := DeepCopy_v1_KeyToPath(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_v1_SecurityContext(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecurityContext) + out := out.(*SecurityContext) + if in.Capabilities != nil { + in, out := &in.Capabilities, &out.Capabilities + *out = new(Capabilities) + if err := DeepCopy_v1_Capabilities(*in, *out, c); err != nil { + return err + } + } else { + out.Capabilities = nil + } + if in.Privileged != nil { + in, out := &in.Privileged, &out.Privileged + *out = new(bool) + **out = **in + } else { + out.Privileged = nil + } + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + if in.RunAsUser != nil { + in, out := &in.RunAsUser, &out.RunAsUser + *out = new(int64) + **out = **in + } else { + out.RunAsUser = nil + } + if in.RunAsNonRoot != nil { + in, out := &in.RunAsNonRoot, &out.RunAsNonRoot + *out = new(bool) + **out = **in + } else { + out.RunAsNonRoot = nil + } + if in.ReadOnlyRootFilesystem != nil { + in, out := &in.ReadOnlyRootFilesystem, &out.ReadOnlyRootFilesystem + *out = new(bool) + **out = **in + } else { + out.ReadOnlyRootFilesystem = nil + } + return nil + } +} + +func DeepCopy_v1_SecurityContextConstraints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecurityContextConstraints) + out := out.(*SecurityContextConstraints) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Priority != nil { + in, out := &in.Priority, &out.Priority + *out = new(int32) + **out = **in + } else { + out.Priority = nil + } + out.AllowPrivilegedContainer = in.AllowPrivilegedContainer + if in.DefaultAddCapabilities != nil { + in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.DefaultAddCapabilities = nil + } + if in.RequiredDropCapabilities != nil { + in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.RequiredDropCapabilities = nil + } + if in.AllowedCapabilities != nil { + in, out := &in.AllowedCapabilities, &out.AllowedCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AllowedCapabilities = nil + } + out.AllowHostDirVolumePlugin = in.AllowHostDirVolumePlugin + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]FSType, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Volumes = nil + } + out.AllowHostNetwork = in.AllowHostNetwork + out.AllowHostPorts = in.AllowHostPorts + out.AllowHostPID = in.AllowHostPID + out.AllowHostIPC = in.AllowHostIPC + if err := DeepCopy_v1_SELinuxContextStrategyOptions(&in.SELinuxContext, &out.SELinuxContext, c); err != nil { + return err + } + if err := DeepCopy_v1_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, c); err != nil { + return err + } + if err := DeepCopy_v1_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { + return err + } + if err := DeepCopy_v1_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { + return err + } + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Users = nil + } + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + if in.SeccompProfiles != nil { + in, out := &in.SeccompProfiles, &out.SeccompProfiles + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.SeccompProfiles = nil + } + return nil + } +} + +func DeepCopy_v1_SecurityContextConstraintsList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecurityContextConstraintsList) + out := out.(*SecurityContextConstraintsList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]SecurityContextConstraints, len(*in)) + for i := range *in { + if err := DeepCopy_v1_SecurityContextConstraints(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_SerializedReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SerializedReference) + out := out.(*SerializedReference) + out.TypeMeta = in.TypeMeta + out.Reference = in.Reference + return nil + } +} + +func DeepCopy_v1_Service(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Service) + out := out.(*Service) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_ServiceSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_ServiceStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_ServiceAccount(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccount) + out := out.(*ServiceAccount) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Secrets = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ImagePullSecrets = nil + } + return nil + } +} + +func DeepCopy_v1_ServiceAccountList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccountList) + out := out.(*ServiceAccountList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ServiceAccount, len(*in)) + for i := range *in { + if err := DeepCopy_v1_ServiceAccount(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ServiceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceList) + out := out.(*ServiceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Service, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Service(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_ServicePort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServicePort) + out := out.(*ServicePort) + out.Name = in.Name + out.Protocol = in.Protocol + out.Port = in.Port + out.TargetPort = in.TargetPort + out.NodePort = in.NodePort + return nil + } +} + +func DeepCopy_v1_ServiceProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceProxyOptions) + out := out.(*ServiceProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_v1_ServiceSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceSpec) + out := out.(*ServiceSpec) + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ServicePort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + out.ClusterIP = in.ClusterIP + out.Type = in.Type + if in.ExternalIPs != nil { + in, out := &in.ExternalIPs, &out.ExternalIPs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ExternalIPs = nil + } + if in.DeprecatedPublicIPs != nil { + in, out := &in.DeprecatedPublicIPs, &out.DeprecatedPublicIPs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.DeprecatedPublicIPs = nil + } + out.SessionAffinity = in.SessionAffinity + out.LoadBalancerIP = in.LoadBalancerIP + if in.LoadBalancerSourceRanges != nil { + in, out := &in.LoadBalancerSourceRanges, &out.LoadBalancerSourceRanges + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.LoadBalancerSourceRanges = nil + } + out.ExternalName = in.ExternalName + return nil + } +} + +func DeepCopy_v1_ServiceStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceStatus) + out := out.(*ServiceStatus) + if err := DeepCopy_v1_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_SupplementalGroupsStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SupplementalGroupsStrategyOptions) + out := out.(*SupplementalGroupsStrategyOptions) + out.Type = in.Type + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_v1_TCPSocketAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TCPSocketAction) + out := out.(*TCPSocketAction) + out.Port = in.Port + return nil + } +} + +func DeepCopy_v1_Taint(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Taint) + out := out.(*Taint) + out.Key = in.Key + out.Value = in.Value + out.Effect = in.Effect + return nil + } +} + +func DeepCopy_v1_Toleration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Toleration) + out := out.(*Toleration) + out.Key = in.Key + out.Operator = in.Operator + out.Value = in.Value + out.Effect = in.Effect + return nil + } +} + +func DeepCopy_v1_Volume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Volume) + out := out.(*Volume) + out.Name = in.Name + if err := DeepCopy_v1_VolumeSource(&in.VolumeSource, &out.VolumeSource, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_VolumeMount(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeMount) + out := out.(*VolumeMount) + out.Name = in.Name + out.ReadOnly = in.ReadOnly + out.MountPath = in.MountPath + out.SubPath = in.SubPath + return nil + } +} + +func DeepCopy_v1_VolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeSource) + out := out.(*VolumeSource) + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + **out = **in + } else { + out.HostPath = nil + } + if in.EmptyDir != nil { + in, out := &in.EmptyDir, &out.EmptyDir + *out = new(EmptyDirVolumeSource) + **out = **in + } else { + out.EmptyDir = nil + } + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + **out = **in + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in + } else { + out.AWSElasticBlockStore = nil + } + if in.GitRepo != nil { + in, out := &in.GitRepo, &out.GitRepo + *out = new(GitRepoVolumeSource) + **out = **in + } else { + out.GitRepo = nil + } + if in.Secret != nil { + in, out := &in.Secret, &out.Secret + *out = new(SecretVolumeSource) + if err := DeepCopy_v1_SecretVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.Secret = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + **out = **in + } else { + out.NFS = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + **out = **in + } else { + out.ISCSI = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + **out = **in + } else { + out.Glusterfs = nil + } + if in.PersistentVolumeClaim != nil { + in, out := &in.PersistentVolumeClaim, &out.PersistentVolumeClaim + *out = new(PersistentVolumeClaimVolumeSource) + **out = **in + } else { + out.PersistentVolumeClaim = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := DeepCopy_v1_RBDVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := DeepCopy_v1_FlexVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + **out = **in + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := DeepCopy_v1_CephFSVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + **out = **in + } else { + out.Flocker = nil + } + if in.DownwardAPI != nil { + in, out := &in.DownwardAPI, &out.DownwardAPI + *out = new(DownwardAPIVolumeSource) + if err := DeepCopy_v1_DownwardAPIVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.DownwardAPI = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := DeepCopy_v1_FCVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FC = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + **out = **in + } else { + out.AzureFile = nil + } + if in.ConfigMap != nil { + in, out := &in.ConfigMap, &out.ConfigMap + *out = new(ConfigMapVolumeSource) + if err := DeepCopy_v1_ConfigMapVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.ConfigMap = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in + } else { + out.VsphereVolume = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + **out = **in + } else { + out.Quobyte = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := DeepCopy_v1_AzureDiskVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = new(DeprecatedDownwardAPIVolumeSource) + if err := DeepCopy_v1_DeprecatedDownwardAPIVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.Metadata = nil + } + return nil + } +} + +func DeepCopy_v1_VsphereVirtualDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VsphereVirtualDiskVolumeSource) + out := out.(*VsphereVirtualDiskVolumeSource) + out.VolumePath = in.VolumePath + out.FSType = in.FSType + return nil + } +} + +func DeepCopy_v1_WeightedPodAffinityTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*WeightedPodAffinityTerm) + out := out.(*WeightedPodAffinityTerm) + out.Weight = in.Weight + if err := DeepCopy_v1_PodAffinityTerm(&in.PodAffinityTerm, &out.PodAffinityTerm, c); err != nil { + return err + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/api/validation/doc.go b/vendor/k8s.io/kubernetes/pkg/api/validation/doc.go index 1b705107..f17a15cf 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/validation/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/api/validation/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/validation/events.go b/vendor/k8s.io/kubernetes/pkg/api/validation/events.go index 720a0ed1..589fe919 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/validation/events.go +++ b/vendor/k8s.io/kubernetes/pkg/api/validation/events.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -31,24 +31,27 @@ import ( // ValidateEvent makes sure that the event makes sense. func ValidateEvent(event *api.Event) field.ErrorList { allErrs := field.ErrorList{} - // There is no namespace required for root-scoped kind, for example, node. - // However, older client code accidentally sets event.Namespace - // to api.NamespaceDefault, so we accept that too, but "" is preferred. - // Todo: Events may reference 3rd party object, and we can't check whether the object is namespaced. - // Suppose them are namespaced. Do check if we can get the piece of information. - // This should apply to all groups served by this apiserver. - namespacedKindFlag, err := isNamespacedKind(event.InvolvedObject.Kind, event.InvolvedObject.APIVersion) - // if we don't know whether this type is namespace or not, don't fail the event. We shouldn't assume that we know about every type in the universe - if err == nil { - if !namespacedKindFlag && - event.Namespace != api.NamespaceDefault && - event.Namespace != "" { - allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, fmt.Sprintf("not allowed for %s", event.InvolvedObject.Kind))) + // Make sure event.Namespace and the involvedObject.Namespace agree + if len(event.InvolvedObject.Namespace) == 0 { + // event.Namespace must also be empty (or "default", for compatibility with old clients) + if event.Namespace != api.NamespaceNone && event.Namespace != api.NamespaceDefault { + allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) } - if namespacedKindFlag && - event.Namespace != event.InvolvedObject.Namespace { - allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match involvedObject")) + } else { + // event namespace must match + if event.Namespace != event.InvolvedObject.Namespace { + allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, "does not match event.namespace")) + } + } + + // For kinds we recognize, make sure involvedObject.Namespace is set for namespaced kinds + if namespaced, err := isNamespacedKind(event.InvolvedObject.Kind, event.InvolvedObject.APIVersion); err == nil { + if namespaced && len(event.InvolvedObject.Namespace) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("involvedObject", "namespace"), fmt.Sprintf("required for kind %s", event.InvolvedObject.Kind))) + } + if !namespaced && len(event.InvolvedObject.Namespace) > 0 { + allErrs = append(allErrs, field.Invalid(field.NewPath("involvedObject", "namespace"), event.InvolvedObject.Namespace, fmt.Sprintf("not allowed for kind %s", event.InvolvedObject.Kind))) } } diff --git a/vendor/k8s.io/kubernetes/pkg/api/validation/name.go b/vendor/k8s.io/kubernetes/pkg/api/validation/name.go index cf2eb8bb..1358e6e7 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/validation/name.go +++ b/vendor/k8s.io/kubernetes/pkg/api/validation/name.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/api/validation/schema.go b/vendor/k8s.io/kubernetes/pkg/api/validation/schema.go index 345666c9..f6a4d079 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/validation/schema.go +++ b/vendor/k8s.io/kubernetes/pkg/api/validation/schema.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -297,6 +297,10 @@ func (s *SwaggerSchema) isGenericArray(p swagger.ModelProperty) bool { var versionRegexp = regexp.MustCompile(`^(v.+|unversioned)\..*`) func (s *SwaggerSchema) validateField(value interface{}, fieldName, fieldType string, fieldDetails *swagger.ModelProperty) []error { + allErrs := []error{} + if reflect.TypeOf(value) == nil { + return append(allErrs, fmt.Errorf("unexpected nil value for field %v", fieldName)) + } // TODO: caesarxuchao: because we have multiple group/versions and objects // may reference objects in other group, the commented out way of checking // if a filedType is a type defined by us is outdated. We use a hacky way @@ -310,7 +314,6 @@ func (s *SwaggerSchema) validateField(value interface{}, fieldName, fieldType st // if strings.HasPrefix(fieldType, apiVersion) { return s.ValidateObject(value, fieldName, fieldType) } - allErrs := []error{} switch fieldType { case "string": // Be loose about what we accept for 'string' since we use IntOrString in a couple of places diff --git a/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go index 8eab7866..9cdaa0b6 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,6 @@ package validation import ( "encoding/json" "fmt" - "math" "net" "os" "path" @@ -38,6 +37,8 @@ import ( "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/capabilities" "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/security/apparmor" + utilconfig "k8s.io/kubernetes/pkg/util/config" "k8s.io/kubernetes/pkg/util/intstr" "k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/validation" @@ -51,17 +52,10 @@ var RepairMalformedUpdates bool = true const isNegativeErrorMsg string = `must be greater than or equal to 0` const isInvalidQuotaResource string = `must be a standard resource for quota` const fieldImmutableErrorMsg string = `field is immutable` -const cIdentifierErrorMsg string = `must be a C identifier (matching regex ` + validation.CIdentifierFmt + `): e.g. "my_name" or "MyName"` const isNotIntegerErrorMsg string = `must be an integer` -func InclusiveRangeErrorMsg(lo, hi int) string { - return fmt.Sprintf(`must be between %d and %d, inclusive`, lo, hi) -} - -var pdPartitionErrorMsg string = InclusiveRangeErrorMsg(1, 255) -var PortRangeErrorMsg string = InclusiveRangeErrorMsg(1, 65535) -var IdRangeErrorMsg string = InclusiveRangeErrorMsg(0, math.MaxInt32) -var PortNameErrorMsg string = fmt.Sprintf(`must be an IANA_SVC_NAME (at most 15 characters, matching regex %s, it must contain at least one letter [a-z], and hyphens cannot be adjacent to other hyphens): e.g. "http"`, validation.IdentifierNoHyphensBeginEndFmt) +var pdPartitionErrorMsg string = validation.InclusiveRangeError(1, 255) +var volumeModeErrorMsg string = "must be a number between 0 and 0777 (octal), both inclusive" const totalAnnotationSizeLimitB int = 256 * (1 << 10) // 256 kB @@ -75,11 +69,13 @@ func ValidateHasLabel(meta api.ObjectMeta, fldPath *field.Path, key, expectedVal allErrs := field.ErrorList{} actualValue, found := meta.Labels[key] if !found { - allErrs = append(allErrs, field.Required(fldPath.Child("labels"), key+"="+expectedValue)) + allErrs = append(allErrs, field.Required(fldPath.Child("labels").Key(key), + fmt.Sprintf("must be '%s'", expectedValue))) return allErrs } if actualValue != expectedValue { - allErrs = append(allErrs, field.Invalid(fldPath.Child("labels"), meta.Labels, "expected "+key+"="+expectedValue)) + allErrs = append(allErrs, field.Invalid(fldPath.Child("labels").Key(key), meta.Labels, + fmt.Sprintf("must be '%s'", expectedValue))) } return allErrs } @@ -100,7 +96,24 @@ func ValidateAnnotations(annotations map[string]string, fldPath *field.Path) fie return allErrs } -func ValidatePodSpecificAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { +func ValidateDNS1123Label(value string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsDNS1123Label(value) { + allErrs = append(allErrs, field.Invalid(fldPath, value, msg)) + } + return allErrs +} + +// ValidateDNS1123Subdomain validates that a name is a proper DNS subdomain. +func ValidateDNS1123Subdomain(value string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for _, msg := range validation.IsDNS1123Subdomain(value) { + allErrs = append(allErrs, field.Invalid(fldPath, value, msg)) + } + return allErrs +} + +func ValidatePodSpecificAnnotations(annotations map[string]string, spec *api.PodSpec, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if annotations[api.AffinityAnnotationKey] != "" { allErrs = append(allErrs, ValidateAffinityInPodAnnotations(annotations, fldPath)...) @@ -110,25 +123,65 @@ func ValidatePodSpecificAnnotations(annotations map[string]string, fldPath *fiel allErrs = append(allErrs, ValidateTolerationsInPodAnnotations(annotations, fldPath)...) } + // TODO: remove these after we EOL the annotations. if hostname, exists := annotations[utilpod.PodHostnameAnnotation]; exists { - for _, msg := range validation.IsDNS1123Label(hostname) { - allErrs = append(allErrs, field.Invalid(fldPath, utilpod.PodHostnameAnnotation, msg)) - } + allErrs = append(allErrs, ValidateDNS1123Label(hostname, fldPath.Key(utilpod.PodHostnameAnnotation))...) } - if subdomain, exists := annotations[utilpod.PodSubdomainAnnotation]; exists { - for _, msg := range validation.IsDNS1123Label(subdomain) { - allErrs = append(allErrs, field.Invalid(fldPath, utilpod.PodSubdomainAnnotation, msg)) - } + allErrs = append(allErrs, ValidateDNS1123Label(subdomain, fldPath.Key(utilpod.PodSubdomainAnnotation))...) } allErrs = append(allErrs, ValidateSeccompPodAnnotations(annotations, fldPath)...) + allErrs = append(allErrs, ValidateAppArmorPodAnnotations(annotations, spec, fldPath)...) + sysctls, err := api.SysctlsFromPodAnnotation(annotations[api.SysctlsPodAnnotationKey]) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Key(api.SysctlsPodAnnotationKey), annotations[api.SysctlsPodAnnotationKey], err.Error())) + } else { + allErrs = append(allErrs, validateSysctls(sysctls, fldPath.Key(api.SysctlsPodAnnotationKey))...) + } + unsafeSysctls, err := api.SysctlsFromPodAnnotation(annotations[api.UnsafeSysctlsPodAnnotationKey]) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Key(api.UnsafeSysctlsPodAnnotationKey), annotations[api.UnsafeSysctlsPodAnnotationKey], err.Error())) + } else { + allErrs = append(allErrs, validateSysctls(unsafeSysctls, fldPath.Key(api.UnsafeSysctlsPodAnnotationKey))...) + } + inBoth := sysctlIntersection(sysctls, unsafeSysctls) + if len(inBoth) > 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Key(api.UnsafeSysctlsPodAnnotationKey), strings.Join(inBoth, ", "), "can not be safe and unsafe")) + } + + return allErrs +} + +func ValidatePodSpecificAnnotationUpdates(newPod, oldPod *api.Pod, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + newAnnotations := newPod.Annotations + oldAnnotations := oldPod.Annotations + for k, oldVal := range oldAnnotations { + if newAnnotations[k] == oldVal { + continue // No change. + } + if strings.HasPrefix(k, apparmor.ContainerAnnotationKeyPrefix) { + allErrs = append(allErrs, field.Forbidden(fldPath.Key(k), "may not update AppArmor annotations")) + } + } + // Check for removals. + for k := range newAnnotations { + if _, ok := oldAnnotations[k]; ok { + continue // No change. + } + if strings.HasPrefix(k, apparmor.ContainerAnnotationKeyPrefix) { + allErrs = append(allErrs, field.Forbidden(fldPath.Key(k), "may not remove AppArmor annotations")) + } + } + allErrs = append(allErrs, ValidatePodSpecificAnnotations(newAnnotations, &newPod.Spec, fldPath)...) return allErrs } func ValidateEndpointsSpecificAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} + // TODO: remove this after we EOL the annotation. hostnamesMap, exists := annotations[endpoints.PodHostnamesAnnotation] if exists && !isValidHostnamesMap(hostnamesMap) { allErrs = append(allErrs, field.Invalid(fldPath, endpoints.PodHostnamesAnnotation, @@ -207,7 +260,7 @@ var ValidateReplicationControllerName = NameIsDNSSubdomain // ValidateServiceName can be used to check whether the given service name is valid. // Prefix indicates this name will be used as part of generation, in which case // trailing dashes are allowed. -var ValidateServiceName = NameIsDNS952Label +var ValidateServiceName = NameIsDNS1035Label // ValidateNodeName can be used to check whether the given node name is valid. // Prefix indicates this name will be used as part of generation, in which case @@ -245,6 +298,9 @@ var ValidateServiceAccountName = NameIsDNSSubdomain // trailing dashes are allowed. var ValidateEndpointsName = NameIsDNSSubdomain +// ValidateClusterName can be used to check whether the given cluster name is valid. +var ValidateClusterName = NameIsDNS1035Label + // ValidateSecurityContextConstraintsName can be used to check whether the given // security context constraint name is valid. // Prefix indicates this name will be used as part of generation, in which case @@ -267,12 +323,12 @@ func NameIsDNSLabel(name string, prefix bool) []string { return validation.IsDNS1123Label(name) } -// NameIsDNS952Label is a ValidateNameFunc for names that must be a DNS 952 label. -func NameIsDNS952Label(name string, prefix bool) []string { +// NameIsDNS1035Label is a ValidateNameFunc for names that must be a DNS 952 label. +func NameIsDNS1035Label(name string, prefix bool) []string { if prefix { name = maskTrailingDash(name) } - return validation.IsDNS952Label(name) + return validation.IsDNS1035Label(name) } // Validates that given value is not negative. @@ -315,7 +371,7 @@ func ValidateObjectMeta(meta *api.ObjectMeta, requiresNamespace bool, nameFn Val } // If the generated name validates, but the calculated value does not, it's a problem with generation, and we // report it here. This may confuse users, but indicates a programming bug and still must be validated. - // If there are multiple fields out of which one is required then add a or as a separator + // If there are multiple fields out of which one is required then add an or as a separator if len(meta.Name) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("name"), "name or generateName is required")) } else { @@ -336,6 +392,11 @@ func ValidateObjectMeta(meta *api.ObjectMeta, requiresNamespace bool, nameFn Val allErrs = append(allErrs, field.Forbidden(fldPath.Child("namespace"), "not allowed on this type")) } } + if len(meta.ClusterName) != 0 { + for _, msg := range ValidateClusterName(meta.ClusterName, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("clusterName"), meta.ClusterName, msg)) + } + } allErrs = append(allErrs, ValidateNonnegativeField(meta.Generation, fldPath.Child("generation"))...) allErrs = append(allErrs, unversionedvalidation.ValidateLabels(meta.Labels, fldPath.Child("labels"))...) allErrs = append(allErrs, ValidateAnnotations(meta.Annotations, fldPath.Child("annotations"))...) @@ -383,15 +444,26 @@ func ValidateObjectMetaUpdate(newMeta, oldMeta *api.ObjectMeta, fldPath *field.P allErrs = append(allErrs, field.Invalid(fldPath.Child("deletionTimestamp"), newMeta.DeletionTimestamp, "field is immutable; may only be changed via deletion")) } + // Finalizers cannot be added if the object is already being deleted. + if oldMeta.DeletionTimestamp != nil { + allErrs = append(allErrs, ValidateNoNewFinalizers(newMeta.Finalizers, oldMeta.Finalizers, fldPath.Child("finalizers"))...) + } + // Reject updates that don't specify a resource version if len(newMeta.ResourceVersion) == 0 { allErrs = append(allErrs, field.Invalid(fldPath.Child("resourceVersion"), newMeta.ResourceVersion, "must be specified for an update")) } + // Generation shouldn't be decremented + if newMeta.Generation < oldMeta.Generation { + allErrs = append(allErrs, field.Invalid(fldPath.Child("generation"), newMeta.Generation, "must not be decremented")) + } + allErrs = append(allErrs, ValidateImmutableField(newMeta.Name, oldMeta.Name, fldPath.Child("name"))...) allErrs = append(allErrs, ValidateImmutableField(newMeta.Namespace, oldMeta.Namespace, fldPath.Child("namespace"))...) allErrs = append(allErrs, ValidateImmutableField(newMeta.UID, oldMeta.UID, fldPath.Child("uid"))...) allErrs = append(allErrs, ValidateImmutableField(newMeta.CreationTimestamp, oldMeta.CreationTimestamp, fldPath.Child("creationTimestamp"))...) + allErrs = append(allErrs, ValidateImmutableField(newMeta.ClusterName, oldMeta.ClusterName, fldPath.Child("clusterName"))...) allErrs = append(allErrs, unversionedvalidation.ValidateLabels(newMeta.Labels, fldPath.Child("labels"))...) allErrs = append(allErrs, ValidateAnnotations(newMeta.Annotations, fldPath.Child("annotations"))...) @@ -400,21 +472,31 @@ func ValidateObjectMetaUpdate(newMeta, oldMeta *api.ObjectMeta, fldPath *field.P return allErrs } +func ValidateNoNewFinalizers(newFinalizers []string, oldFinalizers []string, fldPath *field.Path) field.ErrorList { + const newFinalizersErrorMsg string = `no new finalizers can be added if the object is being deleted` + allErrs := field.ErrorList{} + extra := sets.NewString(newFinalizers...).Difference(sets.NewString(oldFinalizers...)) + if len(extra) != 0 { + allErrs = append(allErrs, field.Forbidden(fldPath, fmt.Sprintf("no new finalizers can be added if the object is being deleted, found new finalizers %#v", extra.List()))) + } + return allErrs +} + func validateVolumes(volumes []api.Volume, fldPath *field.Path) (sets.String, field.ErrorList) { allErrs := field.ErrorList{} allNames := sets.String{} for i, vol := range volumes { idxPath := fldPath.Index(i) + namePath := idxPath.Child("name") el := validateVolumeSource(&vol.VolumeSource, idxPath) if len(vol.Name) == 0 { - el = append(el, field.Required(idxPath.Child("name"), "")) - } else if msgs := validation.IsDNS1123Label(vol.Name); len(msgs) != 0 { - for i := range msgs { - el = append(el, field.Invalid(idxPath.Child("name"), vol.Name, msgs[i])) - } - } else if allNames.Has(vol.Name) { - el = append(el, field.Duplicate(idxPath.Child("name"), vol.Name)) + el = append(el, field.Required(namePath, "")) + } else { + el = append(el, ValidateDNS1123Label(vol.Name, namePath)...) + } + if allNames.Has(vol.Name) { + el = append(el, field.Duplicate(namePath, vol.Name)) } if len(el) == 0 { allNames.Insert(vol.Name) @@ -537,6 +619,14 @@ func validateVolumeSource(source *api.VolumeSource, fldPath *field.Path) field.E allErrs = append(allErrs, validateCephFSVolumeSource(source.CephFS, fldPath.Child("cephfs"))...) } } + if source.Quobyte != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("quobyte"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateQuobyteVolumeSource(source.Quobyte, fldPath.Child("quobyte"))...) + } + } if source.DownwardAPI != nil { if numVolumes > 0 { allErrs = append(allErrs, field.Forbidden(fldPath.Child("downwarAPI"), "may not specify more than 1 volume type")) @@ -555,7 +645,7 @@ func validateVolumeSource(source *api.VolumeSource, fldPath *field.Path) field.E } if source.FlexVolume != nil { if numVolumes > 0 { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("flexVolume"), "may not specifiy more than 1 volume type")) + allErrs = append(allErrs, field.Forbidden(fldPath.Child("flexVolume"), "may not specify more than 1 volume type")) } else { numVolumes++ allErrs = append(allErrs, validateFlexVolumeSource(source.FlexVolume, fldPath.Child("flexVolume"))...) @@ -563,7 +653,7 @@ func validateVolumeSource(source *api.VolumeSource, fldPath *field.Path) field.E } if source.ConfigMap != nil { if numVolumes > 0 { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("configMap"), "may not specifiy more than 1 volume type")) + allErrs = append(allErrs, field.Forbidden(fldPath.Child("configMap"), "may not specify more than 1 volume type")) } else { numVolumes++ allErrs = append(allErrs, validateConfigMapVolumeSource(source.ConfigMap, fldPath.Child("configMap"))...) @@ -581,6 +671,11 @@ func validateVolumeSource(source *api.VolumeSource, fldPath *field.Path) field.E allErrs = append(allErrs, validateVsphereVolumeSource(source.VsphereVolume, fldPath.Child("vsphereVolume"))...) } } + if source.AzureDisk != nil { + numVolumes++ + allErrs = append(allErrs, validateAzureDisk(source.AzureDisk, fldPath.Child("azureDisk"))...) + } + if numVolumes == 0 { allErrs = append(allErrs, field.Required(fldPath, "must specify a volume type")) } @@ -602,7 +697,7 @@ func validateGitRepoVolumeSource(gitRepo *api.GitRepoVolumeSource, fldPath *fiel allErrs = append(allErrs, field.Required(fldPath.Child("repository"), "")) } - pathErrs := validateVolumeSourcePath(gitRepo.Directory, fldPath.Child("directory")) + pathErrs := validateLocalDescendingPath(gitRepo.Directory, fldPath.Child("directory")) allErrs = append(allErrs, pathErrs...) return allErrs } @@ -616,7 +711,7 @@ func validateISCSIVolumeSource(iscsi *api.ISCSIVolumeSource, fldPath *field.Path allErrs = append(allErrs, field.Required(fldPath.Child("iqn"), "")) } if iscsi.Lun < 0 || iscsi.Lun > 255 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("lun"), iscsi.Lun, InclusiveRangeErrorMsg(0, 255))) + allErrs = append(allErrs, field.Invalid(fldPath.Child("lun"), iscsi.Lun, validation.InclusiveRangeError(0, 255))) } return allErrs } @@ -631,7 +726,7 @@ func validateFCVolumeSource(fc *api.FCVolumeSource, fldPath *field.Path) field.E allErrs = append(allErrs, field.Required(fldPath.Child("lun"), "")) } else { if *fc.Lun < 0 || *fc.Lun > 255 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("lun"), fc.Lun, InclusiveRangeErrorMsg(0, 255))) + allErrs = append(allErrs, field.Invalid(fldPath.Child("lun"), fc.Lun, validation.InclusiveRangeError(0, 255))) } } return allErrs @@ -664,6 +759,17 @@ func validateSecretVolumeSource(secretSource *api.SecretVolumeSource, fldPath *f if len(secretSource.SecretName) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("secretName"), "")) } + + secretMode := secretSource.DefaultMode + if secretMode != nil && (*secretMode > 0777 || *secretMode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("defaultMode"), *secretMode, volumeModeErrorMsg)) + } + + itemsPath := fldPath.Child("items") + for i, kp := range secretSource.Items { + itemPath := itemsPath.Index(i) + allErrs = append(allErrs, validateKeyToPath(&kp, itemPath)...) + } return allErrs } @@ -672,6 +778,33 @@ func validateConfigMapVolumeSource(configMapSource *api.ConfigMapVolumeSource, f if len(configMapSource.Name) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) } + + configMapMode := configMapSource.DefaultMode + if configMapMode != nil && (*configMapMode > 0777 || *configMapMode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("defaultMode"), *configMapMode, volumeModeErrorMsg)) + } + + itemsPath := fldPath.Child("items") + for i, kp := range configMapSource.Items { + itemPath := itemsPath.Index(i) + allErrs = append(allErrs, validateKeyToPath(&kp, itemPath)...) + } + return allErrs +} + +func validateKeyToPath(kp *api.KeyToPath, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(kp.Key) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("key"), "")) + } + if len(kp.Path) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("path"), "")) + } + allErrs = append(allErrs, validateLocalNonReservedPath(kp.Path, fldPath.Child("path"))...) + if kp.Mode != nil && (*kp.Mode > 0777 || *kp.Mode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("mode"), *kp.Mode, volumeModeErrorMsg)) + } + return allErrs } @@ -697,6 +830,24 @@ func validateNFSVolumeSource(nfs *api.NFSVolumeSource, fldPath *field.Path) fiel return allErrs } +func validateQuobyteVolumeSource(quobyte *api.QuobyteVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(quobyte.Registry) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("registry"), "must be a host:port pair or multiple pairs separated by commas")) + } else { + for _, hostPortPair := range strings.Split(quobyte.Registry, ",") { + if _, _, err := net.SplitHostPort(hostPortPair); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("registry"), quobyte.Registry, "must be a host:port pair or multiple pairs separated by commas")) + } + } + } + + if len(quobyte.Volume) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("volume"), "")) + } + return allErrs +} + func validateGlusterfs(glusterfs *api.GlusterfsVolumeSource, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if len(glusterfs.EndpointsName) == 0 { @@ -719,69 +870,71 @@ func validateFlockerVolumeSource(flocker *api.FlockerVolumeSource, fldPath *fiel return allErrs } -var validDownwardAPIFieldPathExpressions = sets.NewString("metadata.name", "metadata.namespace", "metadata.labels", "metadata.annotations") +var validDownwardAPIFieldPathExpressions = sets.NewString( + "metadata.name", + "metadata.namespace", + "metadata.labels", + "metadata.annotations") func validateDownwardAPIVolumeSource(downwardAPIVolume *api.DownwardAPIVolumeSource, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - for _, downwardAPIVolumeFile := range downwardAPIVolume.Items { - if len(downwardAPIVolumeFile.Path) == 0 { + + downwardAPIMode := downwardAPIVolume.DefaultMode + if downwardAPIMode != nil && (*downwardAPIMode > 0777 || *downwardAPIMode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("defaultMode"), *downwardAPIMode, volumeModeErrorMsg)) + } + + for _, file := range downwardAPIVolume.Items { + if len(file.Path) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("path"), "")) } - allErrs = append(allErrs, validateVolumeSourcePath(downwardAPIVolumeFile.Path, fldPath.Child("path"))...) - if downwardAPIVolumeFile.FieldRef != nil { - allErrs = append(allErrs, validateObjectFieldSelector(downwardAPIVolumeFile.FieldRef, &validDownwardAPIFieldPathExpressions, fldPath.Child("fieldRef"))...) - if downwardAPIVolumeFile.ResourceFieldRef != nil { + allErrs = append(allErrs, validateLocalNonReservedPath(file.Path, fldPath.Child("path"))...) + if file.FieldRef != nil { + allErrs = append(allErrs, validateObjectFieldSelector(file.FieldRef, &validDownwardAPIFieldPathExpressions, fldPath.Child("fieldRef"))...) + if file.ResourceFieldRef != nil { allErrs = append(allErrs, field.Invalid(fldPath, "resource", "fieldRef and resourceFieldRef can not be specified simultaneously")) } - } else if downwardAPIVolumeFile.ResourceFieldRef != nil { - allErrs = append(allErrs, validateContainerResourceFieldSelector(downwardAPIVolumeFile.ResourceFieldRef, &validContainerResourceFieldPathExpressions, fldPath.Child("resourceFieldRef"), true)...) + } else if file.ResourceFieldRef != nil { + allErrs = append(allErrs, validateContainerResourceFieldSelector(file.ResourceFieldRef, &validContainerResourceFieldPathExpressions, fldPath.Child("resourceFieldRef"), true)...) } else { allErrs = append(allErrs, field.Required(fldPath, "one of fieldRef and resourceFieldRef is required")) } - } - return allErrs -} - -// This validate will make sure targetPath: -// 1. is not abs path -// 2. does not start with '../' -// 3. does not contain '/../' -// 4. does not end with '/..' -func validateSubPath(targetPath string, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if path.IsAbs(targetPath) { - allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must be a relative path")) - } - if strings.HasPrefix(targetPath, "../") { - allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must not start with '../'")) - } - if strings.Contains(targetPath, "/../") { - allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must not contain '/../'")) - } - if strings.HasSuffix(targetPath, "/..") { - allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must not end with '/..'")) - } - return allErrs -} - -// This validate will make sure targetPath: -// 1. is not abs path -// 2. does not contain '..' -// 3. does not start with '..' -func validateVolumeSourcePath(targetPath string, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if path.IsAbs(targetPath) { - allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must be a relative path")) - } - // TODO assume OS of api server & nodes are the same for now - items := strings.Split(targetPath, string(os.PathSeparator)) - - for _, item := range items { - if item == ".." { - allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must not contain '..'")) + if file.Mode != nil && (*file.Mode > 0777 || *file.Mode < 0) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("mode"), *file.Mode, volumeModeErrorMsg)) } } - if strings.HasPrefix(items[0], "..") && len(items[0]) > 2 { + return allErrs +} + +// This validate will make sure targetPath: +// 1. is not abs path +// 2. does not have any element which is ".." +func validateLocalDescendingPath(targetPath string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if path.IsAbs(targetPath) { + allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must be a relative path")) + } + + // TODO: this assumes the OS of apiserver & nodes are the same + parts := strings.Split(targetPath, string(os.PathSeparator)) + for _, item := range parts { + if item == ".." { + allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must not contain '..'")) + break // even for `../../..`, one error is sufficient to make the point + } + } + return allErrs +} + +// This validate will make sure targetPath: +// 1. is not abs path +// 2. does not contain any '..' elements +// 3. does not start with '..' +func validateLocalNonReservedPath(targetPath string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + allErrs = append(allErrs, validateLocalDescendingPath(targetPath, fldPath)...) + // Don't report this error if the check for .. elements already caught it. + if strings.HasPrefix(targetPath, "..") && !strings.HasPrefix(targetPath, "../") { allErrs = append(allErrs, field.Invalid(fldPath, targetPath, "must not start with '..'")) } return allErrs @@ -833,6 +986,22 @@ func validateAzureFile(azure *api.AzureFileVolumeSource, fldPath *field.Path) fi return allErrs } +var supportedCachingModes = sets.NewString(string(api.AzureDataDiskCachingNone), string(api.AzureDataDiskCachingReadOnly), string(api.AzureDataDiskCachingReadWrite)) + +func validateAzureDisk(azure *api.AzureDiskVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if azure.DiskName == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("diskName"), "")) + } + if azure.DataDiskURI == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("diskURI"), "")) + } + if azure.CachingMode != nil && !supportedCachingModes.Has(string(*azure.CachingMode)) { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("cachingMode"), *azure.CachingMode, supportedCachingModes.List())) + } + return allErrs +} + func validateVsphereVolumeSource(cd *api.VsphereVirtualDiskVolumeSource, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if len(cd.VolumePath) == 0 { @@ -847,6 +1016,8 @@ var ValidatePersistentVolumeName = NameIsDNSSubdomain var supportedAccessModes = sets.NewString(string(api.ReadWriteOnce), string(api.ReadOnlyMany), string(api.ReadWriteMany)) +var supportedReclaimPolicy = sets.NewString(string(api.PersistentVolumeReclaimDelete), string(api.PersistentVolumeReclaimRecycle), string(api.PersistentVolumeReclaimRetain)) + func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { allErrs := ValidateObjectMeta(&pv.ObjectMeta, false, ValidatePersistentVolumeName, field.NewPath("metadata")) @@ -871,6 +1042,11 @@ func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { for r, qty := range pv.Spec.Capacity { allErrs = append(allErrs, validateBasicResource(qty, capPath.Key(string(r)))...) } + if len(string(pv.Spec.PersistentVolumeReclaimPolicy)) > 0 { + if !supportedReclaimPolicy.Has(string(pv.Spec.PersistentVolumeReclaimPolicy)) { + allErrs = append(allErrs, field.NotSupported(specPath.Child("persistentVolumeReclaimPolicy"), pv.Spec.PersistentVolumeReclaimPolicy, supportedReclaimPolicy.List())) + } + } numVolumes := 0 if pv.Spec.HostPath != nil { @@ -929,6 +1105,14 @@ func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { allErrs = append(allErrs, validateRBDVolumeSource(pv.Spec.RBD, specPath.Child("rbd"))...) } } + if pv.Spec.Quobyte != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("quobyte"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validateQuobyteVolumeSource(pv.Spec.Quobyte, specPath.Child("quobyte"))...) + } + } if pv.Spec.CephFS != nil { if numVolumes > 0 { allErrs = append(allErrs, field.Forbidden(specPath.Child("cephFS"), "may not specify more than 1 volume type")) @@ -977,9 +1161,20 @@ func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { allErrs = append(allErrs, validateVsphereVolumeSource(pv.Spec.VsphereVolume, specPath.Child("vsphereVolume"))...) } } + if pv.Spec.AzureDisk != nil { + numVolumes++ + allErrs = append(allErrs, validateAzureDisk(pv.Spec.AzureDisk, specPath.Child("azureDisk"))...) + } + if numVolumes == 0 { allErrs = append(allErrs, field.Required(specPath, "must specify a volume type")) } + + // do not allow hostPath mounts of '/' to have a 'recycle' reclaim policy + if pv.Spec.HostPath != nil && path.Clean(pv.Spec.HostPath.Path) == "/" && pv.Spec.PersistentVolumeReclaimPolicy == api.PersistentVolumeReclaimRecycle { + allErrs = append(allErrs, field.Forbidden(specPath.Child("persistentVolumeReclaimPolicy"), "may not be 'recycle' for a hostPath mount of '/'")) + } + return allErrs } @@ -1003,39 +1198,58 @@ func ValidatePersistentVolumeStatusUpdate(newPv, oldPv *api.PersistentVolume) fi return allErrs } +// ValidatePersistentVolumeClaim validates a PersistentVolumeClaim func ValidatePersistentVolumeClaim(pvc *api.PersistentVolumeClaim) field.ErrorList { allErrs := ValidateObjectMeta(&pvc.ObjectMeta, true, ValidatePersistentVolumeName, field.NewPath("metadata")) - specPath := field.NewPath("spec") - if len(pvc.Spec.AccessModes) == 0 { - allErrs = append(allErrs, field.Required(specPath.Child("accessModes"), "at least 1 accessMode is required")) + allErrs = append(allErrs, ValidatePersistentVolumeClaimSpec(&pvc.Spec, field.NewPath("spec"))...) + return allErrs +} + +// ValidatePersistentVolumeClaimSpec validates a PersistentVolumeClaimSpec +func ValidatePersistentVolumeClaimSpec(spec *api.PersistentVolumeClaimSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(spec.AccessModes) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("accessModes"), "at least 1 access mode is required")) } - if pvc.Spec.Selector != nil { - allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(pvc.Spec.Selector, specPath.Child("selector"))...) + if spec.Selector != nil { + allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(spec.Selector, fldPath.Child("selector"))...) } - for _, mode := range pvc.Spec.AccessModes { + for _, mode := range spec.AccessModes { if mode != api.ReadWriteOnce && mode != api.ReadOnlyMany && mode != api.ReadWriteMany { - allErrs = append(allErrs, field.NotSupported(specPath.Child("accessModes"), mode, supportedAccessModes.List())) + allErrs = append(allErrs, field.NotSupported(fldPath.Child("accessModes"), mode, supportedAccessModes.List())) } } - if _, ok := pvc.Spec.Resources.Requests[api.ResourceStorage]; !ok { - allErrs = append(allErrs, field.Required(specPath.Child("resources").Key(string(api.ResourceStorage)), "")) + storageValue, ok := spec.Resources.Requests[api.ResourceStorage] + if !ok { + allErrs = append(allErrs, field.Required(fldPath.Child("resources").Key(string(api.ResourceStorage)), "")) + } else { + allErrs = append(allErrs, ValidateResourceQuantityValue(string(api.ResourceStorage), storageValue, fldPath.Child("resources").Key(string(api.ResourceStorage)))...) } return allErrs } +// ValidatePersistentVolumeClaimUpdate validates an update to a PeristentVolumeClaim func ValidatePersistentVolumeClaimUpdate(newPvc, oldPvc *api.PersistentVolumeClaim) field.ErrorList { allErrs := ValidateObjectMetaUpdate(&newPvc.ObjectMeta, &oldPvc.ObjectMeta, field.NewPath("metadata")) allErrs = append(allErrs, ValidatePersistentVolumeClaim(newPvc)...) - // if a pvc had a bound volume, we should not allow updates to resources or access modes - if len(oldPvc.Spec.VolumeName) != 0 { - if !api.Semantic.DeepEqual(newPvc.Spec, oldPvc.Spec) { - allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "spec is immutable once a claim has been bound to a volume")) - } + // PVController needs to update PVC.Spec w/ VolumeName. + // Claims are immutable in order to enforce quota, range limits, etc. without gaming the system. + if len(oldPvc.Spec.VolumeName) == 0 { + // volumeName changes are allowed once. + // Reset back to empty string after equality check + oldPvc.Spec.VolumeName = newPvc.Spec.VolumeName + defer func() { oldPvc.Spec.VolumeName = "" }() + } + // changes to Spec are not allowed, but updates to label/annotations are OK. + // no-op updates pass validation. + if !api.Semantic.DeepEqual(newPvc.Spec, oldPvc.Spec) { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec"), "field is immutable after creation")) } newPvc.Status = oldPvc.Status return allErrs } +// ValidatePersistentVolumeClaimStatusUpdate validates an update to status of a PeristentVolumeClaim func ValidatePersistentVolumeClaimStatusUpdate(newPvc, oldPvc *api.PersistentVolumeClaim) field.ErrorList { allErrs := ValidateObjectMetaUpdate(&newPvc.ObjectMeta, &oldPvc.ObjectMeta, field.NewPath("metadata")) if len(newPvc.ResourceVersion) == 0 { @@ -1061,8 +1275,10 @@ func validateContainerPorts(ports []api.ContainerPort, fldPath *field.Path) fiel for i, port := range ports { idxPath := fldPath.Index(i) if len(port.Name) > 0 { - if !validation.IsValidPortName(port.Name) { - allErrs = append(allErrs, field.Invalid(idxPath.Child("name"), port.Name, PortNameErrorMsg)) + if msgs := validation.IsValidPortName(port.Name); len(msgs) != 0 { + for i = range msgs { + allErrs = append(allErrs, field.Invalid(idxPath.Child("name"), port.Name, msgs[i])) + } } else if allNames.Has(port.Name) { allErrs = append(allErrs, field.Duplicate(idxPath.Child("name"), port.Name)) } else { @@ -1070,12 +1286,16 @@ func validateContainerPorts(ports []api.ContainerPort, fldPath *field.Path) fiel } } if port.ContainerPort == 0 { - allErrs = append(allErrs, field.Invalid(idxPath.Child("containerPort"), port.ContainerPort, PortRangeErrorMsg)) - } else if !validation.IsValidPortNum(int(port.ContainerPort)) { - allErrs = append(allErrs, field.Invalid(idxPath.Child("containerPort"), port.ContainerPort, PortRangeErrorMsg)) + allErrs = append(allErrs, field.Required(idxPath.Child("containerPort"), "")) + } else { + for _, msg := range validation.IsValidPortNum(int(port.ContainerPort)) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("containerPort"), port.ContainerPort, msg)) + } } - if port.HostPort != 0 && !validation.IsValidPortNum(int(port.HostPort)) { - allErrs = append(allErrs, field.Invalid(idxPath.Child("hostPort"), port.HostPort, PortRangeErrorMsg)) + if port.HostPort != 0 { + for _, msg := range validation.IsValidPortNum(int(port.HostPort)) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("hostPort"), port.HostPort, msg)) + } } if len(port.Protocol) == 0 { allErrs = append(allErrs, field.Required(idxPath.Child("protocol"), "")) @@ -1093,15 +1313,17 @@ func validateEnv(vars []api.EnvVar, fldPath *field.Path) field.ErrorList { idxPath := fldPath.Index(i) if len(ev.Name) == 0 { allErrs = append(allErrs, field.Required(idxPath.Child("name"), "")) - } else if !validation.IsCIdentifier(ev.Name) { - allErrs = append(allErrs, field.Invalid(idxPath.Child("name"), ev.Name, cIdentifierErrorMsg)) + } else { + for _, msg := range validation.IsCIdentifier(ev.Name) { + allErrs = append(allErrs, field.Invalid(idxPath.Child("name"), ev.Name, msg)) + } } allErrs = append(allErrs, validateEnvVarValueFrom(ev, idxPath.Child("valueFrom"))...) } return allErrs } -var validFieldPathExpressionsEnv = sets.NewString("metadata.name", "metadata.namespace", "status.podIP") +var validFieldPathExpressionsEnv = sets.NewString("metadata.name", "metadata.namespace", "spec.nodeName", "spec.serviceAccountName", "status.podIP") var validContainerResourceFieldPathExpressions = sets.NewString("limits.cpu", "limits.memory", "requests.cpu", "requests.memory") func validateEnvVarValueFrom(ev api.EnvVar, fldPath *field.Path) field.ErrorList { @@ -1186,11 +1408,11 @@ func validateContainerResourceDivisor(rName string, divisor resource.Quantity, f switch rName { case "limits.cpu", "requests.cpu": if !validContainerResourceDivisorForCPU.Has(divisor.String()) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("divisor"), rName, fmt.Sprintf("only divisor's values 1m and 1 are supported with the cpu resource"))) + allErrs = append(allErrs, field.Invalid(fldPath.Child("divisor"), rName, "only divisor's values 1m and 1 are supported with the cpu resource")) } case "limits.memory", "requests.memory": if !validContainerResourceDivisorForMemory.Has(divisor.String()) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("divisor"), rName, fmt.Sprintf("only divisor's values 1, 1k, 1M, 1G, 1T, 1P, 1E, 1Ki, 1Mi, 1Gi, 1Ti, 1Pi, 1Ei are supported with the memory resource"))) + allErrs = append(allErrs, field.Invalid(fldPath.Child("divisor"), rName, "only divisor's values 1, 1k, 1M, 1G, 1T, 1P, 1E, 1Ki, 1Mi, 1Gi, 1Ti, 1Pi, 1Ei are supported with the memory resource")) } } return allErrs @@ -1204,8 +1426,10 @@ func validateConfigMapKeySelector(s *api.ConfigMapKeySelector, fldPath *field.Pa } if len(s.Key) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("key"), "")) - } else if !IsSecretKey(s.Key) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("key"), s.Key, fmt.Sprintf("must have at most %d characters and match regex %s", validation.DNS1123SubdomainMaxLength, SecretKeyFmt))) + } else { + for _, msg := range validation.IsConfigMapKey(s.Key) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("key"), s.Key, msg)) + } } return allErrs @@ -1219,8 +1443,10 @@ func validateSecretKeySelector(s *api.SecretKeySelector, fldPath *field.Path) fi } if len(s.Key) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("key"), "")) - } else if !IsSecretKey(s.Key) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("key"), s.Key, fmt.Sprintf("must have at most %d characters and match regex %s", validation.DNS1123SubdomainMaxLength, SecretKeyFmt))) + } else { + for _, msg := range validation.IsConfigMapKey(s.Key) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("key"), s.Key, msg)) + } } return allErrs @@ -1247,7 +1473,7 @@ func validateVolumeMounts(mounts []api.VolumeMount, volumes sets.String, fldPath } mountpoints.Insert(mnt.MountPath) if len(mnt.SubPath) > 0 { - allErrs = append(allErrs, validateSubPath(mnt.SubPath, fldPath.Child("subPath"))...) + allErrs = append(allErrs, validateLocalDescendingPath(mnt.SubPath, fldPath.Child("subPath"))...) } } return allErrs @@ -1309,36 +1535,43 @@ func validateExecAction(exec *api.ExecAction, fldPath *field.Path) field.ErrorLi return allErrors } +var supportedHTTPSchemes = sets.NewString(string(api.URISchemeHTTP), string(api.URISchemeHTTPS)) + func validateHTTPGetAction(http *api.HTTPGetAction, fldPath *field.Path) field.ErrorList { allErrors := field.ErrorList{} if len(http.Path) == 0 { allErrors = append(allErrors, field.Required(fldPath.Child("path"), "")) } - if http.Port.Type == intstr.Int && !validation.IsValidPortNum(http.Port.IntValue()) { - allErrors = append(allErrors, field.Invalid(fldPath.Child("port"), http.Port, PortRangeErrorMsg)) - } else if http.Port.Type == intstr.String && !validation.IsValidPortName(http.Port.StrVal) { - allErrors = append(allErrors, field.Invalid(fldPath.Child("port"), http.Port.StrVal, PortNameErrorMsg)) - } - supportedSchemes := sets.NewString(string(api.URISchemeHTTP), string(api.URISchemeHTTPS)) - if !supportedSchemes.Has(string(http.Scheme)) { - allErrors = append(allErrors, field.Invalid(fldPath.Child("scheme"), http.Scheme, fmt.Sprintf("must be one of %v", supportedSchemes.List()))) + allErrors = append(allErrors, ValidatePortNumOrName(http.Port, fldPath.Child("port"))...) + if !supportedHTTPSchemes.Has(string(http.Scheme)) { + allErrors = append(allErrors, field.NotSupported(fldPath.Child("scheme"), http.Scheme, supportedHTTPSchemes.List())) } for _, header := range http.HTTPHeaders { - if !validation.IsHTTPHeaderName(header.Name) { - allErrors = append(allErrors, field.Invalid(fldPath.Child("httpHeaders"), header.Name, fmt.Sprintf("name must match %s", validation.HTTPHeaderNameFmt))) + for _, msg := range validation.IsHTTPHeaderName(header.Name) { + allErrors = append(allErrors, field.Invalid(fldPath.Child("httpHeaders"), header.Name, msg)) } } return allErrors } -func validateTCPSocketAction(tcp *api.TCPSocketAction, fldPath *field.Path) field.ErrorList { - allErrors := field.ErrorList{} - if tcp.Port.Type == intstr.Int && !validation.IsValidPortNum(tcp.Port.IntValue()) { - allErrors = append(allErrors, field.Invalid(fldPath.Child("port"), tcp.Port, PortRangeErrorMsg)) - } else if tcp.Port.Type == intstr.String && !validation.IsValidPortName(tcp.Port.StrVal) { - allErrors = append(allErrors, field.Invalid(fldPath.Child("port"), tcp.Port.StrVal, PortNameErrorMsg)) +func ValidatePortNumOrName(port intstr.IntOrString, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if port.Type == intstr.Int { + for _, msg := range validation.IsValidPortNum(port.IntValue()) { + allErrs = append(allErrs, field.Invalid(fldPath, port.IntValue(), msg)) + } + } else if port.Type == intstr.String { + for _, msg := range validation.IsValidPortName(port.StrVal) { + allErrs = append(allErrs, field.Invalid(fldPath, port.StrVal, msg)) + } + } else { + allErrs = append(allErrs, field.InternalError(fldPath, fmt.Errorf("unknown type: %v", port.Type))) } - return allErrors + return allErrs +} + +func validateTCPSocketAction(tcp *api.TCPSocketAction, fldPath *field.Path) field.ErrorList { + return ValidatePortNumOrName(tcp.Port, fldPath.Child("port")) } func validateHandler(handler *api.Handler, fldPath *field.Path) field.ErrorList { @@ -1443,14 +1676,14 @@ func validateContainers(containers []api.Container, volumes sets.String, fldPath allNames := sets.String{} for i, ctr := range containers { idxPath := fldPath.Index(i) + namePath := idxPath.Child("name") if len(ctr.Name) == 0 { - allErrs = append(allErrs, field.Required(idxPath.Child("name"), "")) - } else if msgs := validation.IsDNS1123Label(ctr.Name); len(msgs) != 0 { - for i := range msgs { - allErrs = append(allErrs, field.Invalid(idxPath.Child("name"), ctr.Name, msgs[i])) - } - } else if allNames.Has(ctr.Name) { - allErrs = append(allErrs, field.Duplicate(idxPath.Child("name"), ctr.Name)) + allErrs = append(allErrs, field.Required(namePath, "")) + } else { + allErrs = append(allErrs, ValidateDNS1123Label(ctr.Name, namePath)...) + } + if allNames.Has(ctr.Name) { + allErrs = append(allErrs, field.Duplicate(namePath, ctr.Name)) } else { allNames.Insert(ctr.Name) } @@ -1599,7 +1832,7 @@ func validateTolerations(tolerations []api.Toleration, fldPath *field.Path) fiel func ValidatePod(pod *api.Pod) field.ErrorList { fldPath := field.NewPath("metadata") allErrs := ValidateObjectMeta(&pod.ObjectMeta, true, ValidatePodName, fldPath) - allErrs = append(allErrs, ValidatePodSpecificAnnotations(pod.ObjectMeta.Annotations, fldPath.Child("annotations"))...) + allErrs = append(allErrs, ValidatePodSpecificAnnotations(pod.ObjectMeta.Annotations, &pod.Spec, fldPath.Child("annotations"))...) allErrs = append(allErrs, ValidatePodSpec(&pod.Spec, field.NewPath("spec"))...) return allErrs } @@ -1639,15 +1872,11 @@ func ValidatePodSpec(spec *api.PodSpec, fldPath *field.Path) field.ErrorList { } if len(spec.Hostname) > 0 { - for _, msg := range validation.IsDNS1123Label(spec.Hostname) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostname"), spec.Hostname, msg)) - } + allErrs = append(allErrs, ValidateDNS1123Label(spec.Hostname, fldPath.Child("hostname"))...) } if len(spec.Subdomain) > 0 { - for _, msg := range validation.IsDNS1123Label(spec.Subdomain) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("subdomain"), spec.Subdomain, msg)) - } + allErrs = append(allErrs, ValidateDNS1123Label(spec.Subdomain, fldPath.Child("subdomain"))...) } return allErrs @@ -1706,6 +1935,41 @@ func ValidateNodeSelector(nodeSelector *api.NodeSelector, fldPath *field.Path) f return allErrs } +// ValidateAvoidPodsInNodeAnnotations tests that the serialized AvoidPods in Node.Annotations has valid data +func ValidateAvoidPodsInNodeAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + avoids, err := api.GetAvoidPodsFromNodeAnnotations(annotations) + if err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Child("AvoidPods"), api.PreferAvoidPodsAnnotationKey, err.Error())) + return allErrs + } + + if len(avoids.PreferAvoidPods) != 0 { + for i, pa := range avoids.PreferAvoidPods { + idxPath := fldPath.Child(api.PreferAvoidPodsAnnotationKey).Index(i) + allErrs = append(allErrs, validatePreferAvoidPodsEntry(pa, idxPath)...) + } + } + + return allErrs +} + +// validatePreferAvoidPodsEntry tests if given PreferAvoidPodsEntry has valid data. +func validatePreferAvoidPodsEntry(avoidPodEntry api.PreferAvoidPodsEntry, fldPath *field.Path) field.ErrorList { + allErrors := field.ErrorList{} + if avoidPodEntry.PodSignature.PodController == nil { + allErrors = append(allErrors, field.Required(fldPath.Child("PodSignature"), "")) + } else { + if *(avoidPodEntry.PodSignature.PodController.Controller) != true { + allErrors = append(allErrors, + field.Invalid(fldPath.Child("PodSignature").Child("PodController").Child("Controller"), + *(avoidPodEntry.PodSignature.PodController.Controller), "must point to a controller")) + } + } + return allErrors +} + // ValidatePreferredSchedulingTerms tests that the specified SoftNodeAffinity fields has valid data func ValidatePreferredSchedulingTerms(terms []api.PreferredSchedulingTerm, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} @@ -1810,6 +2074,9 @@ func ValidateAffinityInPodAnnotations(annotations map[string]string, fldPath *fi allErrs = append(allErrs, field.Invalid(fldPath, api.AffinityAnnotationKey, err.Error())) return allErrs } + if affinity == nil { + return allErrs + } affinityFldPath := fldPath.Child(api.AffinityAnnotationKey) if affinity.NodeAffinity != nil { @@ -1862,7 +2129,7 @@ func validateSeccompProfile(p string, fldPath *field.Path) field.ErrorList { return nil } if strings.HasPrefix(p, "localhost/") { - return validateSubPath(strings.TrimPrefix(p, "localhost/"), fldPath) + return validateLocalDescendingPath(strings.TrimPrefix(p, "localhost/"), fldPath) } return field.ErrorList{field.Invalid(fldPath, p, "must be a valid seccomp profile")} } @@ -1881,22 +2148,96 @@ func ValidateSeccompPodAnnotations(annotations map[string]string, fldPath *field return allErrs } +func ValidateAppArmorPodAnnotations(annotations map[string]string, spec *api.PodSpec, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for k, p := range annotations { + if !strings.HasPrefix(k, apparmor.ContainerAnnotationKeyPrefix) { + continue + } + if !utilconfig.DefaultFeatureGate.AppArmor() { + allErrs = append(allErrs, field.Forbidden(fldPath.Key(k), "AppArmor is disabled by feature-gate")) + continue + } + containerName := strings.TrimPrefix(k, apparmor.ContainerAnnotationKeyPrefix) + if !podSpecHasContainer(spec, containerName) { + allErrs = append(allErrs, field.Invalid(fldPath.Key(k), containerName, "container not found")) + } + + if err := apparmor.ValidateProfileFormat(p); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Key(k), p, err.Error())) + } + } + + return allErrs +} + +func podSpecHasContainer(spec *api.PodSpec, containerName string) bool { + for _, c := range spec.InitContainers { + if c.Name == containerName { + return true + } + } + for _, c := range spec.Containers { + if c.Name == containerName { + return true + } + } + return false +} + +const ( + // a sysctl segment regex, concatenated with dots to form a sysctl name + SysctlSegmentFmt string = "[a-z0-9]([-_a-z0-9]*[a-z0-9])?" + + // a sysctl name regex + SysctlFmt string = "(" + SysctlSegmentFmt + "\\.)*" + SysctlSegmentFmt + + // the maximal length of a sysctl name + SysctlMaxLength int = 253 +) + +var sysctlRegexp = regexp.MustCompile("^" + SysctlFmt + "$") + +// IsValidSysctlName checks that the given string is a valid sysctl name, +// i.e. matches SysctlFmt. +func IsValidSysctlName(name string) bool { + if len(name) > SysctlMaxLength { + return false + } + return sysctlRegexp.MatchString(name) +} + +func validateSysctls(sysctls []api.Sysctl, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + for i, s := range sysctls { + if len(s.Name) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Index(i).Child("name"), "")) + } else if !IsValidSysctlName(s.Name) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("name"), s.Name, fmt.Sprintf("must have at most %d characters and match regex %s", SysctlMaxLength, SysctlFmt))) + } + } + return allErrs +} + // ValidatePodSecurityContext test that the specified PodSecurityContext has valid data. func ValidatePodSecurityContext(securityContext *api.PodSecurityContext, spec *api.PodSpec, specPath, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if securityContext != nil { allErrs = append(allErrs, validateHostNetwork(securityContext.HostNetwork, spec.Containers, specPath.Child("containers"))...) - if securityContext.FSGroup != nil && !validation.IsValidGroupId(*securityContext.FSGroup) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("fsGroup"), *(securityContext.FSGroup), IdRangeErrorMsg)) + if securityContext.FSGroup != nil { + for _, msg := range validation.IsValidGroupId(*securityContext.FSGroup) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("fsGroup"), *(securityContext.FSGroup), msg)) + } } - if securityContext.RunAsUser != nil && !validation.IsValidUserId(*securityContext.RunAsUser) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *(securityContext.RunAsUser), IdRangeErrorMsg)) + if securityContext.RunAsUser != nil { + for _, msg := range validation.IsValidUserId(*securityContext.RunAsUser) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *(securityContext.RunAsUser), msg)) + } } - for i, gid := range securityContext.SupplementalGroups { - if !validation.IsValidGroupId(gid) { - supplementalGroup := fmt.Sprintf(`supplementalGroups[%d]`, i) - allErrs = append(allErrs, field.Invalid(fldPath.Child(supplementalGroup), gid, IdRangeErrorMsg)) + for g, gid := range securityContext.SupplementalGroups { + for _, msg := range validation.IsValidGroupId(gid) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("supplementalGroups").Index(g), gid, msg)) } } } @@ -1904,28 +2245,45 @@ func ValidatePodSecurityContext(securityContext *api.PodSecurityContext, spec *a return allErrs } +func ValidateContainerUpdates(newContainers, oldContainers []api.Container, fldPath *field.Path) (allErrs field.ErrorList, stop bool) { + allErrs = field.ErrorList{} + if len(newContainers) != len(oldContainers) { + //TODO: Pinpoint the specific container that causes the invalid error after we have strategic merge diff + allErrs = append(allErrs, field.Forbidden(fldPath, "pod updates may not add or remove containers")) + return allErrs, true + } + + // validate updated container images + for i, ctr := range newContainers { + if len(ctr.Image) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Index(i).Child("image"), "")) + } + } + return allErrs, false +} + // ValidatePodUpdate tests to see if the update is legal for an end user to make. newPod is updated with fields // that cannot be changed. func ValidatePodUpdate(newPod, oldPod *api.Pod) field.ErrorList { fldPath := field.NewPath("metadata") allErrs := ValidateObjectMetaUpdate(&newPod.ObjectMeta, &oldPod.ObjectMeta, fldPath) - allErrs = append(allErrs, ValidatePodSpecificAnnotations(newPod.ObjectMeta.Annotations, fldPath.Child("annotations"))...) + allErrs = append(allErrs, ValidatePodSpecificAnnotationUpdates(newPod, oldPod, fldPath.Child("annotations"))...) specPath := field.NewPath("spec") - if len(newPod.Spec.Containers) != len(oldPod.Spec.Containers) { - //TODO: Pinpoint the specific container that causes the invalid error after we have strategic merge diff - allErrs = append(allErrs, field.Forbidden(specPath.Child("containers"), "pod updates may not add or remove containers")) - return allErrs - } // validate updateable fields: // 1. containers[*].image - // 2. spec.activeDeadlineSeconds + // 2. initContainers[*].image + // 3. spec.activeDeadlineSeconds - // validate updated container images - for i, ctr := range newPod.Spec.Containers { - if len(ctr.Image) == 0 { - allErrs = append(allErrs, field.Required(specPath.Child("containers").Index(i).Child("image"), "")) - } + containerErrs, stop := ValidateContainerUpdates(newPod.Spec.Containers, oldPod.Spec.Containers, specPath.Child("containers")) + allErrs = append(allErrs, containerErrs...) + if stop { + return allErrs + } + containerErrs, stop = ValidateContainerUpdates(newPod.Spec.InitContainers, oldPod.Spec.InitContainers, specPath.Child("initContainers")) + allErrs = append(allErrs, containerErrs...) + if stop { + return allErrs } // validate updated spec.activeDeadlineSeconds. two types of updates are allowed: @@ -1957,6 +2315,13 @@ func ValidatePodUpdate(newPod, oldPod *api.Pod) field.ErrorList { newContainers = append(newContainers, container) } mungedPod.Spec.Containers = newContainers + // munge initContainers[*].image + var newInitContainers []api.Container + for ix, container := range mungedPod.Spec.InitContainers { + container.Image = oldPod.Spec.InitContainers[ix].Image + newInitContainers = append(newInitContainers, container) + } + mungedPod.Spec.InitContainers = newInitContainers // munge spec.activeDeadlineSeconds mungedPod.Spec.ActiveDeadlineSeconds = nil if oldPod.Spec.ActiveDeadlineSeconds != nil { @@ -2020,17 +2385,19 @@ func ValidatePodTemplateUpdate(newPod, oldPod *api.PodTemplate) field.ErrorList var supportedSessionAffinityType = sets.NewString(string(api.ServiceAffinityClientIP), string(api.ServiceAffinityNone)) var supportedServiceType = sets.NewString(string(api.ServiceTypeClusterIP), string(api.ServiceTypeNodePort), - string(api.ServiceTypeLoadBalancer)) + string(api.ServiceTypeLoadBalancer), string(api.ServiceTypeExternalName)) // ValidateService tests if required fields in the service are set. func ValidateService(service *api.Service) field.ErrorList { allErrs := ValidateObjectMeta(&service.ObjectMeta, true, ValidateServiceName, field.NewPath("metadata")) specPath := field.NewPath("spec") - if len(service.Spec.Ports) == 0 && service.Spec.ClusterIP != api.ClusterIPNone { + isHeadlessService := service.Spec.ClusterIP == api.ClusterIPNone + if len(service.Spec.Ports) == 0 && !isHeadlessService && service.Spec.Type != api.ServiceTypeExternalName { allErrs = append(allErrs, field.Required(specPath.Child("ports"), "")) } - if service.Spec.Type == api.ServiceTypeLoadBalancer { + switch service.Spec.Type { + case api.ServiceTypeLoadBalancer: for ix := range service.Spec.Ports { port := &service.Spec.Ports[ix] // This is a workaround for broken cloud environments that @@ -2041,9 +2408,17 @@ func ValidateService(service *api.Service) field.ErrorList { allErrs = append(allErrs, field.Invalid(portPath, port.Port, "may not expose port 10250 externally since it is used by kubelet")) } } + case api.ServiceTypeExternalName: + if service.Spec.ClusterIP != "" { + allErrs = append(allErrs, field.Invalid(specPath.Child("clusterIP"), service.Spec.ClusterIP, "must be empty for ExternalName services")) + } + if len(service.Spec.ExternalName) > 0 { + allErrs = append(allErrs, ValidateDNS1123Subdomain(service.Spec.ExternalName, specPath.Child("externalName"))...) + } else { + allErrs = append(allErrs, field.Required(specPath.Child("externalName"), "")) + } } - isHeadlessService := service.Spec.ClusterIP == api.ClusterIPNone allPortNames := sets.String{} portsPath := specPath.Child("ports") for i := range service.Spec.Ports { @@ -2070,10 +2445,13 @@ func ValidateService(service *api.Service) field.ErrorList { ipPath := specPath.Child("externalIPs") for i, ip := range service.Spec.ExternalIPs { idxPath := ipPath.Index(i) - if ip == "0.0.0.0" { - allErrs = append(allErrs, field.Invalid(idxPath, ip, "must be a valid IP address")) + if msgs := validation.IsValidIP(ip); len(msgs) != 0 { + for i := range msgs { + allErrs = append(allErrs, field.Invalid(idxPath, ip, msgs[i])) + } + } else { + allErrs = append(allErrs, validateNonSpecialIP(ip, idxPath)...) } - allErrs = append(allErrs, validateIpIsNotLinkLocalOrLoopback(ip, idxPath)...) } if len(service.Spec.Type) == 0 { @@ -2156,19 +2534,16 @@ func validateServicePort(sp *api.ServicePort, requireName, isHeadlessService boo if requireName && len(sp.Name) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) } else if len(sp.Name) != 0 { - if msgs := validation.IsDNS1123Label(sp.Name); len(msgs) != 0 { - for i := range msgs { - allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), sp.Name, msgs[i])) - } - } else if allNames.Has(sp.Name) { + allErrs = append(allErrs, ValidateDNS1123Label(sp.Name, fldPath.Child("name"))...) + if allNames.Has(sp.Name) { allErrs = append(allErrs, field.Duplicate(fldPath.Child("name"), sp.Name)) } else { allNames.Insert(sp.Name) } } - if !validation.IsValidPortNum(int(sp.Port)) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("port"), sp.Port, PortRangeErrorMsg)) + for _, msg := range validation.IsValidPortNum(int(sp.Port)) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("port"), sp.Port, msg)) } if len(sp.Protocol) == 0 { @@ -2177,12 +2552,7 @@ func validateServicePort(sp *api.ServicePort, requireName, isHeadlessService boo allErrs = append(allErrs, field.NotSupported(fldPath.Child("protocol"), sp.Protocol, supportedPortProtocols.List())) } - if sp.TargetPort.Type == intstr.Int && !validation.IsValidPortNum(sp.TargetPort.IntValue()) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("targetPort"), sp.TargetPort, PortRangeErrorMsg)) - } - if sp.TargetPort.Type == intstr.String && !validation.IsValidPortName(sp.TargetPort.StrVal) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("targetPort"), sp.TargetPort, PortNameErrorMsg)) - } + allErrs = append(allErrs, ValidatePortNumOrName(sp.TargetPort, fldPath.Child("targetPort"))...) // in the v1 API, targetPorts on headless services were tolerated. // once we have version-specific validation, we can reject this on newer API versions, but until then, we have to tolerate it for compatibility. @@ -2249,7 +2619,7 @@ func ValidateNonEmptySelector(selectorMap map[string]string, fldPath *field.Path return allErrs } -// Validates the given template and ensures that it is in accordance with the desrired selector and replicas. +// Validates the given template and ensures that it is in accordance with the desired selector and replicas. func ValidatePodTemplateSpecForRC(template *api.PodTemplateSpec, selectorMap map[string]string, replicas int32, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if template == nil { @@ -2289,7 +2659,7 @@ func ValidatePodTemplateSpec(spec *api.PodTemplateSpec, fldPath *field.Path) fie allErrs := field.ErrorList{} allErrs = append(allErrs, unversionedvalidation.ValidateLabels(spec.Labels, fldPath.Child("labels"))...) allErrs = append(allErrs, ValidateAnnotations(spec.Annotations, fldPath.Child("annotations"))...) - allErrs = append(allErrs, ValidatePodSpecificAnnotations(spec.Annotations, fldPath.Child("annotations"))...) + allErrs = append(allErrs, ValidatePodSpecificAnnotations(spec.Annotations, &spec.Spec, fldPath.Child("annotations"))...) allErrs = append(allErrs, ValidatePodSpec(&spec.Spec, fldPath.Child("spec"))...) return allErrs } @@ -2312,6 +2682,9 @@ func ValidateReadOnlyPersistentDisks(volumes []api.Volume, fldPath *field.Path) // validateTaints tests if given taints have valid data. func validateTaints(taints []api.Taint, fldPath *field.Path) field.ErrorList { allErrors := field.ErrorList{} + + uniqueTaints := map[api.TaintEffect]sets.String{} + for i, currTaint := range taints { idxPath := fldPath.Index(i) // validate the taint key @@ -2322,6 +2695,20 @@ func validateTaints(taints []api.Taint, fldPath *field.Path) field.ErrorList { } // validate the taint effect allErrors = append(allErrors, validateTaintEffect(&currTaint.Effect, false, idxPath.Child("effect"))...) + + // validate if taint is unique by + if len(uniqueTaints[currTaint.Effect]) > 0 && uniqueTaints[currTaint.Effect].Has(currTaint.Key) { + duplicatedError := field.Duplicate(idxPath, currTaint) + duplicatedError.Detail = "taints must be unique by key and effect pair" + allErrors = append(allErrors, duplicatedError) + continue + } + + // add taint to existingTaints for uniqueness check + if len(uniqueTaints[currTaint.Effect]) == 0 { + uniqueTaints[currTaint.Effect] = sets.String{} + } + uniqueTaints[currTaint.Effect].Insert(currTaint.Key) } return allErrors } @@ -2343,10 +2730,14 @@ func ValidateTaintsInNodeAnnotations(annotations map[string]string, fldPath *fie } func ValidateNodeSpecificAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { - if annotations[api.TaintsAnnotationKey] != "" { - return ValidateTaintsInNodeAnnotations(annotations, fldPath) + allErrs := field.ErrorList{} + if annotations[api.PreferAvoidPodsAnnotationKey] != "" { + allErrs = append(allErrs, ValidateAvoidPodsInNodeAnnotations(annotations, fldPath)...) } - return field.ErrorList{} + if annotations[api.TaintsAnnotationKey] != "" { + allErrs = append(allErrs, ValidateTaintsInNodeAnnotations(annotations, fldPath)...) + } + return allErrs } // ValidateNode tests if required fields in the node are set. @@ -2616,16 +3007,6 @@ func ValidateServiceAccountUpdate(newServiceAccount, oldServiceAccount *api.Serv return allErrs } -const SecretKeyFmt string = "\\.?" + validation.DNS1123LabelFmt + "(\\." + validation.DNS1123LabelFmt + ")*" - -var secretKeyRegexp = regexp.MustCompile("^" + SecretKeyFmt + "$") - -// IsSecretKey tests for a string that conforms to the definition of a -// subdomain in DNS (RFC 1123), except that a leading dot is allowed -func IsSecretKey(value string) bool { - return len(value) <= validation.DNS1123SubdomainMaxLength && secretKeyRegexp.MatchString(value) -} - // ValidateSecret tests if required fields in the Secret are set. func ValidateSecret(secret *api.Secret) field.ErrorList { allErrs := ValidateObjectMeta(&secret.ObjectMeta, true, ValidateSecretName, field.NewPath("metadata")) @@ -2633,8 +3014,8 @@ func ValidateSecret(secret *api.Secret) field.ErrorList { dataPath := field.NewPath("data") totalSize := 0 for key, value := range secret.Data { - if !IsSecretKey(key) { - allErrs = append(allErrs, field.Invalid(dataPath.Key(key), key, fmt.Sprintf("must have at most %d characters and match regex %s", validation.DNS1123SubdomainMaxLength, SecretKeyFmt))) + for _, msg := range validation.IsConfigMapKey(key) { + allErrs = append(allErrs, field.Invalid(dataPath.Key(key), key, msg)) } totalSize += len(value) } @@ -2731,8 +3112,8 @@ func ValidateConfigMap(cfg *api.ConfigMap) field.ErrorList { totalSize := 0 for key, value := range cfg.Data { - if !IsSecretKey(key) { - allErrs = append(allErrs, field.Invalid(field.NewPath("data").Key(key), key, fmt.Sprintf("must have at most %d characters and match regex %s", validation.DNS1123SubdomainMaxLength, SecretKeyFmt))) + for _, msg := range validation.IsConfigMapKey(key) { + allErrs = append(allErrs, field.Invalid(field.NewPath("data").Key(key), key, msg)) } totalSize += len(value) } @@ -2774,11 +3155,11 @@ func ValidateResourceRequirements(requirements *api.ResourceRequirements, fldPat // Check that request <= limit. requestQuantity, exists := requirements.Requests[resourceName] if exists { - // For GPUs, require that no request be set. - if resourceName == api.ResourceNvidiaGPU { - allErrs = append(allErrs, field.Invalid(reqPath, requestQuantity.String(), "cannot be set")) + // For GPUs, not only requests can't exceed limits, they also can't be lower, i.e. must be equal. + if resourceName == api.ResourceNvidiaGPU && quantity.Cmp(requestQuantity) != 0 { + allErrs = append(allErrs, field.Invalid(reqPath, requestQuantity.String(), fmt.Sprintf("must be equal to %s limit", api.ResourceNvidiaGPU))) } else if quantity.Cmp(requestQuantity) < 0 { - allErrs = append(allErrs, field.Invalid(fldPath, quantity.String(), "must be greater than or equal to request")) + allErrs = append(allErrs, field.Invalid(limPath, quantity.String(), fmt.Sprintf("must be greater than or equal to %s request", resourceName))) } } } @@ -2951,7 +3332,7 @@ func validateFinalizerName(stringValue string, fldPath *field.Path) field.ErrorL if len(strings.Split(stringValue, "/")) == 1 { if !api.IsStandardFinalizerName(stringValue) { - return append(allErrs, field.Invalid(fldPath, stringValue, fmt.Sprintf("name is neither a standard finalizer name nor is it fully qualified"))) + return append(allErrs, field.Invalid(fldPath, stringValue, "name is neither a standard finalizer name nor is it fully qualified")) } } @@ -2998,17 +3379,50 @@ func ValidateNamespaceFinalizeUpdate(newNamespace, oldNamespace *api.Namespace) return allErrs } +// Construct lookup map of old subset IPs to NodeNames. +func updateEpAddrToNodeNameMap(ipToNodeName map[string]string, addresses []api.EndpointAddress) { + for n := range addresses { + if addresses[n].NodeName == nil { + continue + } + ipToNodeName[addresses[n].IP] = *addresses[n].NodeName + } +} + +// Build a map across all subsets of IP -> NodeName +func buildEndpointAddressNodeNameMap(subsets []api.EndpointSubset) map[string]string { + ipToNodeName := make(map[string]string) + for i := range subsets { + updateEpAddrToNodeNameMap(ipToNodeName, subsets[i].Addresses) + updateEpAddrToNodeNameMap(ipToNodeName, subsets[i].NotReadyAddresses) + } + return ipToNodeName +} + +func validateEpAddrNodeNameTransition(addr *api.EndpointAddress, ipToNodeName map[string]string, fldPath *field.Path) field.ErrorList { + errList := field.ErrorList{} + existingNodeName, found := ipToNodeName[addr.IP] + if !found { + return errList + } + if addr.NodeName == nil || *addr.NodeName == existingNodeName { + return errList + } + // NodeName entry found for this endpoint IP, but user is attempting to change NodeName + return append(errList, field.Forbidden(fldPath, fmt.Sprintf("Cannot change NodeName for %s to %s", addr.IP, *addr.NodeName))) +} + // ValidateEndpoints tests if required fields are set. func ValidateEndpoints(endpoints *api.Endpoints) field.ErrorList { allErrs := ValidateObjectMeta(&endpoints.ObjectMeta, true, ValidateEndpointsName, field.NewPath("metadata")) allErrs = append(allErrs, ValidateEndpointsSpecificAnnotations(endpoints.Annotations, field.NewPath("annotations"))...) - allErrs = append(allErrs, validateEndpointSubsets(endpoints.Subsets, field.NewPath("subsets"))...) + allErrs = append(allErrs, validateEndpointSubsets(endpoints.Subsets, []api.EndpointSubset{}, field.NewPath("subsets"))...) return allErrs } -func validateEndpointSubsets(subsets []api.EndpointSubset, fldPath *field.Path) field.ErrorList { +func validateEndpointSubsets(subsets []api.EndpointSubset, oldSubsets []api.EndpointSubset, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - + ipToNodeName := buildEndpointAddressNodeNameMap(oldSubsets) for i := range subsets { ss := &subsets[i] idxPath := fldPath.Index(i) @@ -3021,10 +3435,10 @@ func validateEndpointSubsets(subsets []api.EndpointSubset, fldPath *field.Path) allErrs = append(allErrs, field.Required(idxPath.Child("ports"), "")) } for addr := range ss.Addresses { - allErrs = append(allErrs, validateEndpointAddress(&ss.Addresses[addr], idxPath.Child("addresses").Index(addr))...) + allErrs = append(allErrs, validateEndpointAddress(&ss.Addresses[addr], idxPath.Child("addresses").Index(addr), ipToNodeName)...) } for addr := range ss.NotReadyAddresses { - allErrs = append(allErrs, validateEndpointAddress(&ss.NotReadyAddresses[addr], idxPath.Child("notReadyAddresses").Index(addr))...) + allErrs = append(allErrs, validateEndpointAddress(&ss.NotReadyAddresses[addr], idxPath.Child("notReadyAddresses").Index(addr), ipToNodeName)...) } for port := range ss.Ports { allErrs = append(allErrs, validateEndpointPort(&ss.Ports[port], len(ss.Ports) > 1, idxPath.Child("ports").Index(port))...) @@ -3034,31 +3448,42 @@ func validateEndpointSubsets(subsets []api.EndpointSubset, fldPath *field.Path) return allErrs } -func validateEndpointAddress(address *api.EndpointAddress, fldPath *field.Path) field.ErrorList { +func validateEndpointAddress(address *api.EndpointAddress, fldPath *field.Path, ipToNodeName map[string]string) field.ErrorList { allErrs := field.ErrorList{} - if !validation.IsValidIP(address.IP) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("ip"), address.IP, "must be a valid IP address")) + for _, msg := range validation.IsValidIP(address.IP) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("ip"), address.IP, msg)) } if len(address.Hostname) > 0 { - for _, msg := range validation.IsDNS1123Label(address.Hostname) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostname"), address.Hostname, msg)) + allErrs = append(allErrs, ValidateDNS1123Label(address.Hostname, fldPath.Child("hostname"))...) + } + // During endpoint update, verify that NodeName is a DNS subdomain and transition rules allow the update + if address.NodeName != nil { + for _, msg := range ValidateNodeName(*address.NodeName, false) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("nodeName"), *address.NodeName, msg)) } } + allErrs = append(allErrs, validateEpAddrNodeNameTransition(address, ipToNodeName, fldPath.Child("nodeName"))...) if len(allErrs) > 0 { return allErrs } - return validateIpIsNotLinkLocalOrLoopback(address.IP, fldPath.Child("ip")) + allErrs = append(allErrs, validateNonSpecialIP(address.IP, fldPath.Child("ip"))...) + return allErrs } -func validateIpIsNotLinkLocalOrLoopback(ipAddress string, fldPath *field.Path) field.ErrorList { - // We disallow some IPs as endpoints or external-ips. Specifically, loopback addresses are - // nonsensical and link-local addresses tend to be used for node-centric purposes (e.g. metadata service). +func validateNonSpecialIP(ipAddress string, fldPath *field.Path) field.ErrorList { + // We disallow some IPs as endpoints or external-ips. Specifically, + // unspecified and loopback addresses are nonsensical and link-local + // addresses tend to be used for node-centric purposes (e.g. metadata + // service). allErrs := field.ErrorList{} ip := net.ParseIP(ipAddress) if ip == nil { allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "must be a valid IP address")) return allErrs } + if ip.IsUnspecified() { + allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be unspecified (0.0.0.0)")) + } if ip.IsLoopback() { allErrs = append(allErrs, field.Invalid(fldPath, ipAddress, "may not be in the loopback range (127.0.0.0/8)")) } @@ -3076,12 +3501,10 @@ func validateEndpointPort(port *api.EndpointPort, requireName bool, fldPath *fie if requireName && len(port.Name) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("name"), "")) } else if len(port.Name) != 0 { - for _, msg := range validation.IsDNS1123Label(port.Name) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("name"), port.Name, msg)) - } + allErrs = append(allErrs, ValidateDNS1123Label(port.Name, fldPath.Child("name"))...) } - if !validation.IsValidPortNum(int(port.Port)) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("port"), port.Port, PortRangeErrorMsg)) + for _, msg := range validation.IsValidPortNum(int(port.Port)) { + allErrs = append(allErrs, field.Invalid(fldPath.Child("port"), port.Port, msg)) } if len(port.Protocol) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("protocol"), "")) @@ -3094,7 +3517,7 @@ func validateEndpointPort(port *api.EndpointPort, requireName bool, fldPath *fie // ValidateEndpointsUpdate tests to make sure an endpoints update can be applied. func ValidateEndpointsUpdate(newEndpoints, oldEndpoints *api.Endpoints) field.ErrorList { allErrs := ValidateObjectMetaUpdate(&newEndpoints.ObjectMeta, &oldEndpoints.ObjectMeta, field.NewPath("metadata")) - allErrs = append(allErrs, validateEndpointSubsets(newEndpoints.Subsets, field.NewPath("subsets"))...) + allErrs = append(allErrs, validateEndpointSubsets(newEndpoints.Subsets, oldEndpoints.Subsets, field.NewPath("subsets"))...) allErrs = append(allErrs, ValidateEndpointsSpecificAnnotations(newEndpoints.Annotations, field.NewPath("annotations"))...) return allErrs } @@ -3162,6 +3585,7 @@ func ValidateLoadBalancerStatus(status *api.LoadBalancerStatus, fldPath *field.P return allErrs } +// TODO: remove this after we EOL the annotation that carries it. func isValidHostnamesMap(serializedPodHostNames string) bool { if len(serializedPodHostNames) == 0 { return false @@ -3183,6 +3607,20 @@ func isValidHostnamesMap(serializedPodHostNames string) bool { return true } +func sysctlIntersection(a []api.Sysctl, b []api.Sysctl) []string { + lookup := make(map[string]struct{}, len(a)) + result := []string{} + for i := range a { + lookup[a[i].Name] = struct{}{} + } + for i := range b { + if _, found := lookup[b[i].Name]; found { + result = append(result, b[i].Name) + } + } + return result +} + func ValidateSecurityContextConstraints(scc *api.SecurityContextConstraints) field.ErrorList { allErrs := ValidateObjectMeta(&scc.ObjectMeta, false, ValidateSecurityContextConstraintsName, field.NewPath("metadata")) diff --git a/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go new file mode 100644 index 00000000..f27165a5 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go @@ -0,0 +1,4023 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package api + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + fields "k8s.io/kubernetes/pkg/fields" + labels "k8s.io/kubernetes/pkg/labels" + runtime "k8s.io/kubernetes/pkg/runtime" + types "k8s.io/kubernetes/pkg/types" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AWSElasticBlockStoreVolumeSource, InType: reflect.TypeOf(&AWSElasticBlockStoreVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Affinity, InType: reflect.TypeOf(&Affinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AttachedVolume, InType: reflect.TypeOf(&AttachedVolume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AvoidPods, InType: reflect.TypeOf(&AvoidPods{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AzureDiskVolumeSource, InType: reflect.TypeOf(&AzureDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_AzureFileVolumeSource, InType: reflect.TypeOf(&AzureFileVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Binding, InType: reflect.TypeOf(&Binding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Capabilities, InType: reflect.TypeOf(&Capabilities{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_CephFSVolumeSource, InType: reflect.TypeOf(&CephFSVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_CinderVolumeSource, InType: reflect.TypeOf(&CinderVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ComponentCondition, InType: reflect.TypeOf(&ComponentCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ComponentStatus, InType: reflect.TypeOf(&ComponentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ComponentStatusList, InType: reflect.TypeOf(&ComponentStatusList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConfigMap, InType: reflect.TypeOf(&ConfigMap{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConfigMapKeySelector, InType: reflect.TypeOf(&ConfigMapKeySelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConfigMapList, InType: reflect.TypeOf(&ConfigMapList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConfigMapVolumeSource, InType: reflect.TypeOf(&ConfigMapVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Container, InType: reflect.TypeOf(&Container{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerImage, InType: reflect.TypeOf(&ContainerImage{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerPort, InType: reflect.TypeOf(&ContainerPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerState, InType: reflect.TypeOf(&ContainerState{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerStateRunning, InType: reflect.TypeOf(&ContainerStateRunning{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerStateTerminated, InType: reflect.TypeOf(&ContainerStateTerminated{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerStateWaiting, InType: reflect.TypeOf(&ContainerStateWaiting{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ContainerStatus, InType: reflect.TypeOf(&ContainerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ConversionError, InType: reflect.TypeOf(&ConversionError{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DaemonEndpoint, InType: reflect.TypeOf(&DaemonEndpoint{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeleteOptions, InType: reflect.TypeOf(&DeleteOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeprecatedDownwardAPIVolumeFile, InType: reflect.TypeOf(&DeprecatedDownwardAPIVolumeFile{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DeprecatedDownwardAPIVolumeSource, InType: reflect.TypeOf(&DeprecatedDownwardAPIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DownwardAPIVolumeFile, InType: reflect.TypeOf(&DownwardAPIVolumeFile{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_DownwardAPIVolumeSource, InType: reflect.TypeOf(&DownwardAPIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EmptyDirVolumeSource, InType: reflect.TypeOf(&EmptyDirVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EndpointAddress, InType: reflect.TypeOf(&EndpointAddress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EndpointPort, InType: reflect.TypeOf(&EndpointPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EndpointSubset, InType: reflect.TypeOf(&EndpointSubset{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Endpoints, InType: reflect.TypeOf(&Endpoints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EndpointsList, InType: reflect.TypeOf(&EndpointsList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EnvVar, InType: reflect.TypeOf(&EnvVar{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EnvVarSource, InType: reflect.TypeOf(&EnvVarSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Event, InType: reflect.TypeOf(&Event{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EventList, InType: reflect.TypeOf(&EventList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_EventSource, InType: reflect.TypeOf(&EventSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ExecAction, InType: reflect.TypeOf(&ExecAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ExportOptions, InType: reflect.TypeOf(&ExportOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_FCVolumeSource, InType: reflect.TypeOf(&FCVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_FSGroupStrategyOptions, InType: reflect.TypeOf(&FSGroupStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_FlexVolumeSource, InType: reflect.TypeOf(&FlexVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_FlockerVolumeSource, InType: reflect.TypeOf(&FlockerVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GCEPersistentDiskVolumeSource, InType: reflect.TypeOf(&GCEPersistentDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GitRepoVolumeSource, InType: reflect.TypeOf(&GitRepoVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_GlusterfsVolumeSource, InType: reflect.TypeOf(&GlusterfsVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_HTTPGetAction, InType: reflect.TypeOf(&HTTPGetAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_HTTPHeader, InType: reflect.TypeOf(&HTTPHeader{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Handler, InType: reflect.TypeOf(&Handler{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_HostPathVolumeSource, InType: reflect.TypeOf(&HostPathVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_IDRange, InType: reflect.TypeOf(&IDRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ISCSIVolumeSource, InType: reflect.TypeOf(&ISCSIVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_KeyToPath, InType: reflect.TypeOf(&KeyToPath{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Lifecycle, InType: reflect.TypeOf(&Lifecycle{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LimitRange, InType: reflect.TypeOf(&LimitRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LimitRangeItem, InType: reflect.TypeOf(&LimitRangeItem{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LimitRangeList, InType: reflect.TypeOf(&LimitRangeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LimitRangeSpec, InType: reflect.TypeOf(&LimitRangeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_List, InType: reflect.TypeOf(&List{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ListOptions, InType: reflect.TypeOf(&ListOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LoadBalancerIngress, InType: reflect.TypeOf(&LoadBalancerIngress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LoadBalancerStatus, InType: reflect.TypeOf(&LoadBalancerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_LocalObjectReference, InType: reflect.TypeOf(&LocalObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NFSVolumeSource, InType: reflect.TypeOf(&NFSVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Namespace, InType: reflect.TypeOf(&Namespace{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NamespaceList, InType: reflect.TypeOf(&NamespaceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NamespaceSpec, InType: reflect.TypeOf(&NamespaceSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NamespaceStatus, InType: reflect.TypeOf(&NamespaceStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Node, InType: reflect.TypeOf(&Node{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeAddress, InType: reflect.TypeOf(&NodeAddress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeAffinity, InType: reflect.TypeOf(&NodeAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeCondition, InType: reflect.TypeOf(&NodeCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeDaemonEndpoints, InType: reflect.TypeOf(&NodeDaemonEndpoints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeList, InType: reflect.TypeOf(&NodeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeProxyOptions, InType: reflect.TypeOf(&NodeProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeResources, InType: reflect.TypeOf(&NodeResources{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSelector, InType: reflect.TypeOf(&NodeSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSelectorRequirement, InType: reflect.TypeOf(&NodeSelectorRequirement{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSelectorTerm, InType: reflect.TypeOf(&NodeSelectorTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSpec, InType: reflect.TypeOf(&NodeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeStatus, InType: reflect.TypeOf(&NodeStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_NodeSystemInfo, InType: reflect.TypeOf(&NodeSystemInfo{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ObjectFieldSelector, InType: reflect.TypeOf(&ObjectFieldSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ObjectMeta, InType: reflect.TypeOf(&ObjectMeta{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ObjectReference, InType: reflect.TypeOf(&ObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_OwnerReference, InType: reflect.TypeOf(&OwnerReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolume, InType: reflect.TypeOf(&PersistentVolume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaim, InType: reflect.TypeOf(&PersistentVolumeClaim{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaimList, InType: reflect.TypeOf(&PersistentVolumeClaimList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaimSpec, InType: reflect.TypeOf(&PersistentVolumeClaimSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaimStatus, InType: reflect.TypeOf(&PersistentVolumeClaimStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeClaimVolumeSource, InType: reflect.TypeOf(&PersistentVolumeClaimVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeList, InType: reflect.TypeOf(&PersistentVolumeList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeSource, InType: reflect.TypeOf(&PersistentVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeSpec, InType: reflect.TypeOf(&PersistentVolumeSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PersistentVolumeStatus, InType: reflect.TypeOf(&PersistentVolumeStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Pod, InType: reflect.TypeOf(&Pod{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodAffinity, InType: reflect.TypeOf(&PodAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodAffinityTerm, InType: reflect.TypeOf(&PodAffinityTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodAntiAffinity, InType: reflect.TypeOf(&PodAntiAffinity{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodAttachOptions, InType: reflect.TypeOf(&PodAttachOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodCondition, InType: reflect.TypeOf(&PodCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodExecOptions, InType: reflect.TypeOf(&PodExecOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodList, InType: reflect.TypeOf(&PodList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodLogOptions, InType: reflect.TypeOf(&PodLogOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodProxyOptions, InType: reflect.TypeOf(&PodProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSecurityContext, InType: reflect.TypeOf(&PodSecurityContext{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSignature, InType: reflect.TypeOf(&PodSignature{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodSpec, InType: reflect.TypeOf(&PodSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodStatus, InType: reflect.TypeOf(&PodStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodStatusResult, InType: reflect.TypeOf(&PodStatusResult{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplate, InType: reflect.TypeOf(&PodTemplate{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplateList, InType: reflect.TypeOf(&PodTemplateList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplateSpec, InType: reflect.TypeOf(&PodTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Preconditions, InType: reflect.TypeOf(&Preconditions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PreferAvoidPodsEntry, InType: reflect.TypeOf(&PreferAvoidPodsEntry{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PreferredSchedulingTerm, InType: reflect.TypeOf(&PreferredSchedulingTerm{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Probe, InType: reflect.TypeOf(&Probe{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_QuobyteVolumeSource, InType: reflect.TypeOf(&QuobyteVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RBDVolumeSource, InType: reflect.TypeOf(&RBDVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RangeAllocation, InType: reflect.TypeOf(&RangeAllocation{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ReplicationController, InType: reflect.TypeOf(&ReplicationController{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ReplicationControllerList, InType: reflect.TypeOf(&ReplicationControllerList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ReplicationControllerSpec, InType: reflect.TypeOf(&ReplicationControllerSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ReplicationControllerStatus, InType: reflect.TypeOf(&ReplicationControllerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceFieldSelector, InType: reflect.TypeOf(&ResourceFieldSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuota, InType: reflect.TypeOf(&ResourceQuota{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuotaList, InType: reflect.TypeOf(&ResourceQuotaList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuotaSpec, InType: reflect.TypeOf(&ResourceQuotaSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceQuotaStatus, InType: reflect.TypeOf(&ResourceQuotaStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ResourceRequirements, InType: reflect.TypeOf(&ResourceRequirements{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_RunAsUserStrategyOptions, InType: reflect.TypeOf(&RunAsUserStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SELinuxContextStrategyOptions, InType: reflect.TypeOf(&SELinuxContextStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SELinuxOptions, InType: reflect.TypeOf(&SELinuxOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Secret, InType: reflect.TypeOf(&Secret{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretKeySelector, InType: reflect.TypeOf(&SecretKeySelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretList, InType: reflect.TypeOf(&SecretList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecretVolumeSource, InType: reflect.TypeOf(&SecretVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecurityContext, InType: reflect.TypeOf(&SecurityContext{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecurityContextConstraints, InType: reflect.TypeOf(&SecurityContextConstraints{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SecurityContextConstraintsList, InType: reflect.TypeOf(&SecurityContextConstraintsList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SerializedReference, InType: reflect.TypeOf(&SerializedReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Service, InType: reflect.TypeOf(&Service{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceAccount, InType: reflect.TypeOf(&ServiceAccount{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceAccountList, InType: reflect.TypeOf(&ServiceAccountList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceList, InType: reflect.TypeOf(&ServiceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServicePort, InType: reflect.TypeOf(&ServicePort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceProxyOptions, InType: reflect.TypeOf(&ServiceProxyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceSpec, InType: reflect.TypeOf(&ServiceSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_ServiceStatus, InType: reflect.TypeOf(&ServiceStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_SupplementalGroupsStrategyOptions, InType: reflect.TypeOf(&SupplementalGroupsStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Sysctl, InType: reflect.TypeOf(&Sysctl{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_TCPSocketAction, InType: reflect.TypeOf(&TCPSocketAction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Taint, InType: reflect.TypeOf(&Taint{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Toleration, InType: reflect.TypeOf(&Toleration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Volume, InType: reflect.TypeOf(&Volume{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_VolumeMount, InType: reflect.TypeOf(&VolumeMount{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_VolumeSource, InType: reflect.TypeOf(&VolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_VsphereVirtualDiskVolumeSource, InType: reflect.TypeOf(&VsphereVirtualDiskVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_WeightedPodAffinityTerm, InType: reflect.TypeOf(&WeightedPodAffinityTerm{})}, + ) +} + +func DeepCopy_api_AWSElasticBlockStoreVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AWSElasticBlockStoreVolumeSource) + out := out.(*AWSElasticBlockStoreVolumeSource) + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_Affinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Affinity) + out := out.(*Affinity) + if in.NodeAffinity != nil { + in, out := &in.NodeAffinity, &out.NodeAffinity + *out = new(NodeAffinity) + if err := DeepCopy_api_NodeAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.NodeAffinity = nil + } + if in.PodAffinity != nil { + in, out := &in.PodAffinity, &out.PodAffinity + *out = new(PodAffinity) + if err := DeepCopy_api_PodAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.PodAffinity = nil + } + if in.PodAntiAffinity != nil { + in, out := &in.PodAntiAffinity, &out.PodAntiAffinity + *out = new(PodAntiAffinity) + if err := DeepCopy_api_PodAntiAffinity(*in, *out, c); err != nil { + return err + } + } else { + out.PodAntiAffinity = nil + } + return nil + } +} + +func DeepCopy_api_AttachedVolume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AttachedVolume) + out := out.(*AttachedVolume) + out.Name = in.Name + out.DevicePath = in.DevicePath + return nil + } +} + +func DeepCopy_api_AvoidPods(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AvoidPods) + out := out.(*AvoidPods) + if in.PreferAvoidPods != nil { + in, out := &in.PreferAvoidPods, &out.PreferAvoidPods + *out = make([]PreferAvoidPodsEntry, len(*in)) + for i := range *in { + if err := DeepCopy_api_PreferAvoidPodsEntry(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferAvoidPods = nil + } + return nil + } +} + +func DeepCopy_api_AzureDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AzureDiskVolumeSource) + out := out.(*AzureDiskVolumeSource) + out.DiskName = in.DiskName + out.DataDiskURI = in.DataDiskURI + if in.CachingMode != nil { + in, out := &in.CachingMode, &out.CachingMode + *out = new(AzureDataDiskCachingMode) + **out = **in + } else { + out.CachingMode = nil + } + if in.FSType != nil { + in, out := &in.FSType, &out.FSType + *out = new(string) + **out = **in + } else { + out.FSType = nil + } + if in.ReadOnly != nil { + in, out := &in.ReadOnly, &out.ReadOnly + *out = new(bool) + **out = **in + } else { + out.ReadOnly = nil + } + return nil + } +} + +func DeepCopy_api_AzureFileVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*AzureFileVolumeSource) + out := out.(*AzureFileVolumeSource) + out.SecretName = in.SecretName + out.ShareName = in.ShareName + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_Binding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Binding) + out := out.(*Binding) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Target = in.Target + return nil + } +} + +func DeepCopy_api_Capabilities(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Capabilities) + out := out.(*Capabilities) + if in.Add != nil { + in, out := &in.Add, &out.Add + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Add = nil + } + if in.Drop != nil { + in, out := &in.Drop, &out.Drop + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Drop = nil + } + return nil + } +} + +func DeepCopy_api_CephFSVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CephFSVolumeSource) + out := out.(*CephFSVolumeSource) + if in.Monitors != nil { + in, out := &in.Monitors, &out.Monitors + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Monitors = nil + } + out.Path = in.Path + out.User = in.User + out.SecretFile = in.SecretFile + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_CinderVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CinderVolumeSource) + out := out.(*CinderVolumeSource) + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_ComponentCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentCondition) + out := out.(*ComponentCondition) + out.Type = in.Type + out.Status = in.Status + out.Message = in.Message + out.Error = in.Error + return nil + } +} + +func DeepCopy_api_ComponentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentStatus) + out := out.(*ComponentStatus) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ComponentCondition, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Conditions = nil + } + return nil + } +} + +func DeepCopy_api_ComponentStatusList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ComponentStatusList) + out := out.(*ComponentStatusList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ComponentStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ComponentStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ConfigMap(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMap) + out := out.(*ConfigMap) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_api_ConfigMapKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapKeySelector) + out := out.(*ConfigMapKeySelector) + out.LocalObjectReference = in.LocalObjectReference + out.Key = in.Key + return nil + } +} + +func DeepCopy_api_ConfigMapList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapList) + out := out.(*ConfigMapList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ConfigMap, len(*in)) + for i := range *in { + if err := DeepCopy_api_ConfigMap(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ConfigMapVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConfigMapVolumeSource) + out := out.(*ConfigMapVolumeSource) + out.LocalObjectReference = in.LocalObjectReference + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := DeepCopy_api_KeyToPath(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_api_Container(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Container) + out := out.(*Container) + out.Name = in.Name + out.Image = in.Image + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + if in.Args != nil { + in, out := &in.Args, &out.Args + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Args = nil + } + out.WorkingDir = in.WorkingDir + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ContainerPort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + if in.Env != nil { + in, out := &in.Env, &out.Env + *out = make([]EnvVar, len(*in)) + for i := range *in { + if err := DeepCopy_api_EnvVar(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Env = nil + } + if err := DeepCopy_api_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + if in.VolumeMounts != nil { + in, out := &in.VolumeMounts, &out.VolumeMounts + *out = make([]VolumeMount, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumeMounts = nil + } + if in.LivenessProbe != nil { + in, out := &in.LivenessProbe, &out.LivenessProbe + *out = new(Probe) + if err := DeepCopy_api_Probe(*in, *out, c); err != nil { + return err + } + } else { + out.LivenessProbe = nil + } + if in.ReadinessProbe != nil { + in, out := &in.ReadinessProbe, &out.ReadinessProbe + *out = new(Probe) + if err := DeepCopy_api_Probe(*in, *out, c); err != nil { + return err + } + } else { + out.ReadinessProbe = nil + } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(Lifecycle) + if err := DeepCopy_api_Lifecycle(*in, *out, c); err != nil { + return err + } + } else { + out.Lifecycle = nil + } + out.TerminationMessagePath = in.TerminationMessagePath + out.ImagePullPolicy = in.ImagePullPolicy + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(SecurityContext) + if err := DeepCopy_api_SecurityContext(*in, *out, c); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + out.Stdin = in.Stdin + out.StdinOnce = in.StdinOnce + out.TTY = in.TTY + return nil + } +} + +func DeepCopy_api_ContainerImage(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerImage) + out := out.(*ContainerImage) + if in.Names != nil { + in, out := &in.Names, &out.Names + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Names = nil + } + out.SizeBytes = in.SizeBytes + return nil + } +} + +func DeepCopy_api_ContainerPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerPort) + out := out.(*ContainerPort) + out.Name = in.Name + out.HostPort = in.HostPort + out.ContainerPort = in.ContainerPort + out.Protocol = in.Protocol + out.HostIP = in.HostIP + return nil + } +} + +func DeepCopy_api_ContainerState(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerState) + out := out.(*ContainerState) + if in.Waiting != nil { + in, out := &in.Waiting, &out.Waiting + *out = new(ContainerStateWaiting) + **out = **in + } else { + out.Waiting = nil + } + if in.Running != nil { + in, out := &in.Running, &out.Running + *out = new(ContainerStateRunning) + if err := DeepCopy_api_ContainerStateRunning(*in, *out, c); err != nil { + return err + } + } else { + out.Running = nil + } + if in.Terminated != nil { + in, out := &in.Terminated, &out.Terminated + *out = new(ContainerStateTerminated) + if err := DeepCopy_api_ContainerStateTerminated(*in, *out, c); err != nil { + return err + } + } else { + out.Terminated = nil + } + return nil + } +} + +func DeepCopy_api_ContainerStateRunning(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateRunning) + out := out.(*ContainerStateRunning) + out.StartedAt = in.StartedAt.DeepCopy() + return nil + } +} + +func DeepCopy_api_ContainerStateTerminated(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateTerminated) + out := out.(*ContainerStateTerminated) + out.ExitCode = in.ExitCode + out.Signal = in.Signal + out.Reason = in.Reason + out.Message = in.Message + out.StartedAt = in.StartedAt.DeepCopy() + out.FinishedAt = in.FinishedAt.DeepCopy() + out.ContainerID = in.ContainerID + return nil + } +} + +func DeepCopy_api_ContainerStateWaiting(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStateWaiting) + out := out.(*ContainerStateWaiting) + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_ContainerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ContainerStatus) + out := out.(*ContainerStatus) + out.Name = in.Name + if err := DeepCopy_api_ContainerState(&in.State, &out.State, c); err != nil { + return err + } + if err := DeepCopy_api_ContainerState(&in.LastTerminationState, &out.LastTerminationState, c); err != nil { + return err + } + out.Ready = in.Ready + out.RestartCount = in.RestartCount + out.Image = in.Image + out.ImageID = in.ImageID + out.ContainerID = in.ContainerID + return nil + } +} + +func DeepCopy_api_ConversionError(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ConversionError) + out := out.(*ConversionError) + if in.In == nil { + out.In = nil + } else if newVal, err := c.DeepCopy(&in.In); err != nil { + return err + } else { + out.In = *newVal.(*interface{}) + } + if in.Out == nil { + out.Out = nil + } else if newVal, err := c.DeepCopy(&in.Out); err != nil { + return err + } else { + out.Out = *newVal.(*interface{}) + } + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_DaemonEndpoint(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonEndpoint) + out := out.(*DaemonEndpoint) + out.Port = in.Port + return nil + } +} + +func DeepCopy_api_DeleteOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeleteOptions) + out := out.(*DeleteOptions) + out.TypeMeta = in.TypeMeta + if in.GracePeriodSeconds != nil { + in, out := &in.GracePeriodSeconds, &out.GracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.GracePeriodSeconds = nil + } + if in.Preconditions != nil { + in, out := &in.Preconditions, &out.Preconditions + *out = new(Preconditions) + if err := DeepCopy_api_Preconditions(*in, *out, c); err != nil { + return err + } + } else { + out.Preconditions = nil + } + if in.OrphanDependents != nil { + in, out := &in.OrphanDependents, &out.OrphanDependents + *out = new(bool) + **out = **in + } else { + out.OrphanDependents = nil + } + return nil + } +} + +func DeepCopy_api_DeprecatedDownwardAPIVolumeFile(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeprecatedDownwardAPIVolumeFile) + out := out.(*DeprecatedDownwardAPIVolumeFile) + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_api_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_api_DeprecatedDownwardAPIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeprecatedDownwardAPIVolumeSource) + out := out.(*DeprecatedDownwardAPIVolumeSource) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DeprecatedDownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := DeepCopy_api_DeprecatedDownwardAPIVolumeFile(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_api_DownwardAPIVolumeFile(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DownwardAPIVolumeFile) + out := out.(*DownwardAPIVolumeFile) + out.Path = in.Path + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_api_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_api_DownwardAPIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DownwardAPIVolumeSource) + out := out.(*DownwardAPIVolumeSource) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DownwardAPIVolumeFile, len(*in)) + for i := range *in { + if err := DeepCopy_api_DownwardAPIVolumeFile(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_api_EmptyDirVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EmptyDirVolumeSource) + out := out.(*EmptyDirVolumeSource) + out.Medium = in.Medium + return nil + } +} + +func DeepCopy_api_EndpointAddress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointAddress) + out := out.(*EndpointAddress) + out.IP = in.IP + out.Hostname = in.Hostname + if in.NodeName != nil { + in, out := &in.NodeName, &out.NodeName + *out = new(string) + **out = **in + } else { + out.NodeName = nil + } + if in.TargetRef != nil { + in, out := &in.TargetRef, &out.TargetRef + *out = new(ObjectReference) + **out = **in + } else { + out.TargetRef = nil + } + return nil + } +} + +func DeepCopy_api_EndpointPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointPort) + out := out.(*EndpointPort) + out.Name = in.Name + out.Port = in.Port + out.Protocol = in.Protocol + return nil + } +} + +func DeepCopy_api_EndpointSubset(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointSubset) + out := out.(*EndpointSubset) + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := DeepCopy_api_EndpointAddress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Addresses = nil + } + if in.NotReadyAddresses != nil { + in, out := &in.NotReadyAddresses, &out.NotReadyAddresses + *out = make([]EndpointAddress, len(*in)) + for i := range *in { + if err := DeepCopy_api_EndpointAddress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.NotReadyAddresses = nil + } + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]EndpointPort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + return nil + } +} + +func DeepCopy_api_Endpoints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Endpoints) + out := out.(*Endpoints) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subsets != nil { + in, out := &in.Subsets, &out.Subsets + *out = make([]EndpointSubset, len(*in)) + for i := range *in { + if err := DeepCopy_api_EndpointSubset(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Subsets = nil + } + return nil + } +} + +func DeepCopy_api_EndpointsList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EndpointsList) + out := out.(*EndpointsList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Endpoints, len(*in)) + for i := range *in { + if err := DeepCopy_api_Endpoints(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_EnvVar(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EnvVar) + out := out.(*EnvVar) + out.Name = in.Name + out.Value = in.Value + if in.ValueFrom != nil { + in, out := &in.ValueFrom, &out.ValueFrom + *out = new(EnvVarSource) + if err := DeepCopy_api_EnvVarSource(*in, *out, c); err != nil { + return err + } + } else { + out.ValueFrom = nil + } + return nil + } +} + +func DeepCopy_api_EnvVarSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EnvVarSource) + out := out.(*EnvVarSource) + if in.FieldRef != nil { + in, out := &in.FieldRef, &out.FieldRef + *out = new(ObjectFieldSelector) + **out = **in + } else { + out.FieldRef = nil + } + if in.ResourceFieldRef != nil { + in, out := &in.ResourceFieldRef, &out.ResourceFieldRef + *out = new(ResourceFieldSelector) + if err := DeepCopy_api_ResourceFieldSelector(*in, *out, c); err != nil { + return err + } + } else { + out.ResourceFieldRef = nil + } + if in.ConfigMapKeyRef != nil { + in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef + *out = new(ConfigMapKeySelector) + **out = **in + } else { + out.ConfigMapKeyRef = nil + } + if in.SecretKeyRef != nil { + in, out := &in.SecretKeyRef, &out.SecretKeyRef + *out = new(SecretKeySelector) + **out = **in + } else { + out.SecretKeyRef = nil + } + return nil + } +} + +func DeepCopy_api_Event(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Event) + out := out.(*Event) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.InvolvedObject = in.InvolvedObject + out.Reason = in.Reason + out.Message = in.Message + out.Source = in.Source + out.FirstTimestamp = in.FirstTimestamp.DeepCopy() + out.LastTimestamp = in.LastTimestamp.DeepCopy() + out.Count = in.Count + out.Type = in.Type + return nil + } +} + +func DeepCopy_api_EventList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EventList) + out := out.(*EventList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Event, len(*in)) + for i := range *in { + if err := DeepCopy_api_Event(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_EventSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*EventSource) + out := out.(*EventSource) + out.Component = in.Component + out.Host = in.Host + return nil + } +} + +func DeepCopy_api_ExecAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExecAction) + out := out.(*ExecAction) + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_api_ExportOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExportOptions) + out := out.(*ExportOptions) + out.TypeMeta = in.TypeMeta + out.Export = in.Export + out.Exact = in.Exact + return nil + } +} + +func DeepCopy_api_FCVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FCVolumeSource) + out := out.(*FCVolumeSource) + if in.TargetWWNs != nil { + in, out := &in.TargetWWNs, &out.TargetWWNs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.TargetWWNs = nil + } + if in.Lun != nil { + in, out := &in.Lun, &out.Lun + *out = new(int32) + **out = **in + } else { + out.Lun = nil + } + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_FSGroupStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FSGroupStrategyOptions) + out := out.(*FSGroupStrategyOptions) + out.Type = in.Type + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_api_FlexVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FlexVolumeSource) + out := out.(*FlexVolumeSource) + out.Driver = in.Driver + out.FSType = in.FSType + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + if in.Options != nil { + in, out := &in.Options, &out.Options + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Options = nil + } + return nil + } +} + +func DeepCopy_api_FlockerVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FlockerVolumeSource) + out := out.(*FlockerVolumeSource) + out.DatasetName = in.DatasetName + return nil + } +} + +func DeepCopy_api_GCEPersistentDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GCEPersistentDiskVolumeSource) + out := out.(*GCEPersistentDiskVolumeSource) + out.PDName = in.PDName + out.FSType = in.FSType + out.Partition = in.Partition + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_GitRepoVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GitRepoVolumeSource) + out := out.(*GitRepoVolumeSource) + out.Repository = in.Repository + out.Revision = in.Revision + out.Directory = in.Directory + return nil + } +} + +func DeepCopy_api_GlusterfsVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GlusterfsVolumeSource) + out := out.(*GlusterfsVolumeSource) + out.EndpointsName = in.EndpointsName + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_HTTPGetAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPGetAction) + out := out.(*HTTPGetAction) + out.Path = in.Path + out.Port = in.Port + out.Host = in.Host + out.Scheme = in.Scheme + if in.HTTPHeaders != nil { + in, out := &in.HTTPHeaders, &out.HTTPHeaders + *out = make([]HTTPHeader, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.HTTPHeaders = nil + } + return nil + } +} + +func DeepCopy_api_HTTPHeader(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPHeader) + out := out.(*HTTPHeader) + out.Name = in.Name + out.Value = in.Value + return nil + } +} + +func DeepCopy_api_Handler(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Handler) + out := out.(*Handler) + if in.Exec != nil { + in, out := &in.Exec, &out.Exec + *out = new(ExecAction) + if err := DeepCopy_api_ExecAction(*in, *out, c); err != nil { + return err + } + } else { + out.Exec = nil + } + if in.HTTPGet != nil { + in, out := &in.HTTPGet, &out.HTTPGet + *out = new(HTTPGetAction) + if err := DeepCopy_api_HTTPGetAction(*in, *out, c); err != nil { + return err + } + } else { + out.HTTPGet = nil + } + if in.TCPSocket != nil { + in, out := &in.TCPSocket, &out.TCPSocket + *out = new(TCPSocketAction) + **out = **in + } else { + out.TCPSocket = nil + } + return nil + } +} + +func DeepCopy_api_HostPathVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostPathVolumeSource) + out := out.(*HostPathVolumeSource) + out.Path = in.Path + return nil + } +} + +func DeepCopy_api_IDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IDRange) + out := out.(*IDRange) + out.Min = in.Min + out.Max = in.Max + return nil + } +} + +func DeepCopy_api_ISCSIVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ISCSIVolumeSource) + out := out.(*ISCSIVolumeSource) + out.TargetPortal = in.TargetPortal + out.IQN = in.IQN + out.Lun = in.Lun + out.ISCSIInterface = in.ISCSIInterface + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_KeyToPath(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KeyToPath) + out := out.(*KeyToPath) + out.Key = in.Key + out.Path = in.Path + if in.Mode != nil { + in, out := &in.Mode, &out.Mode + *out = new(int32) + **out = **in + } else { + out.Mode = nil + } + return nil + } +} + +func DeepCopy_api_Lifecycle(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Lifecycle) + out := out.(*Lifecycle) + if in.PostStart != nil { + in, out := &in.PostStart, &out.PostStart + *out = new(Handler) + if err := DeepCopy_api_Handler(*in, *out, c); err != nil { + return err + } + } else { + out.PostStart = nil + } + if in.PreStop != nil { + in, out := &in.PreStop, &out.PreStop + *out = new(Handler) + if err := DeepCopy_api_Handler(*in, *out, c); err != nil { + return err + } + } else { + out.PreStop = nil + } + return nil + } +} + +func DeepCopy_api_LimitRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRange) + out := out.(*LimitRange) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_LimitRangeSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_LimitRangeItem(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeItem) + out := out.(*LimitRangeItem) + out.Type = in.Type + if in.Max != nil { + in, out := &in.Max, &out.Max + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Max = nil + } + if in.Min != nil { + in, out := &in.Min, &out.Min + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Min = nil + } + if in.Default != nil { + in, out := &in.Default, &out.Default + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Default = nil + } + if in.DefaultRequest != nil { + in, out := &in.DefaultRequest, &out.DefaultRequest + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.DefaultRequest = nil + } + if in.MaxLimitRequestRatio != nil { + in, out := &in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.MaxLimitRequestRatio = nil + } + return nil + } +} + +func DeepCopy_api_LimitRangeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeList) + out := out.(*LimitRangeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]LimitRange, len(*in)) + for i := range *in { + if err := DeepCopy_api_LimitRange(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_LimitRangeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LimitRangeSpec) + out := out.(*LimitRangeSpec) + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make([]LimitRangeItem, len(*in)) + for i := range *in { + if err := DeepCopy_api_LimitRangeItem(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Limits = nil + } + return nil + } +} + +func DeepCopy_api_List(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*List) + out := out.(*List) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]runtime.Object, len(*in)) + for i := range *in { + if newVal, err := c.DeepCopy(&(*in)[i]); err != nil { + return err + } else { + (*out)[i] = *newVal.(*runtime.Object) + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ListOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ListOptions) + out := out.(*ListOptions) + out.TypeMeta = in.TypeMeta + if in.LabelSelector == nil { + out.LabelSelector = nil + } else if newVal, err := c.DeepCopy(&in.LabelSelector); err != nil { + return err + } else { + out.LabelSelector = *newVal.(*labels.Selector) + } + if in.FieldSelector == nil { + out.FieldSelector = nil + } else if newVal, err := c.DeepCopy(&in.FieldSelector); err != nil { + return err + } else { + out.FieldSelector = *newVal.(*fields.Selector) + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + return nil + } +} + +func DeepCopy_api_LoadBalancerIngress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LoadBalancerIngress) + out := out.(*LoadBalancerIngress) + out.IP = in.IP + out.Hostname = in.Hostname + return nil + } +} + +func DeepCopy_api_LoadBalancerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LoadBalancerStatus) + out := out.(*LoadBalancerStatus) + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]LoadBalancerIngress, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ingress = nil + } + return nil + } +} + +func DeepCopy_api_LocalObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LocalObjectReference) + out := out.(*LocalObjectReference) + out.Name = in.Name + return nil + } +} + +func DeepCopy_api_NFSVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NFSVolumeSource) + out := out.(*NFSVolumeSource) + out.Server = in.Server + out.Path = in.Path + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_Namespace(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Namespace) + out := out.(*Namespace) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_NamespaceSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_api_NamespaceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceList) + out := out.(*NamespaceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Namespace, len(*in)) + for i := range *in { + if err := DeepCopy_api_Namespace(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_NamespaceSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceSpec) + out := out.(*NamespaceSpec) + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]FinalizerName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Finalizers = nil + } + return nil + } +} + +func DeepCopy_api_NamespaceStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NamespaceStatus) + out := out.(*NamespaceStatus) + out.Phase = in.Phase + return nil + } +} + +func DeepCopy_api_Node(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Node) + out := out.(*Node) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_api_NodeStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_NodeAddress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeAddress) + out := out.(*NodeAddress) + out.Type = in.Type + out.Address = in.Address + return nil + } +} + +func DeepCopy_api_NodeAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeAffinity) + out := out.(*NodeAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = new(NodeSelector) + if err := DeepCopy_api_NodeSelector(*in, *out, c); err != nil { + return err + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]PreferredSchedulingTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_PreferredSchedulingTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_api_NodeCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeCondition) + out := out.(*NodeCondition) + out.Type = in.Type + out.Status = in.Status + out.LastHeartbeatTime = in.LastHeartbeatTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_NodeDaemonEndpoints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeDaemonEndpoints) + out := out.(*NodeDaemonEndpoints) + out.KubeletEndpoint = in.KubeletEndpoint + return nil + } +} + +func DeepCopy_api_NodeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeList) + out := out.(*NodeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Node, len(*in)) + for i := range *in { + if err := DeepCopy_api_Node(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_NodeProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeProxyOptions) + out := out.(*NodeProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_api_NodeResources(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeResources) + out := out.(*NodeResources) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + return nil + } +} + +func DeepCopy_api_NodeSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelector) + out := out.(*NodeSelector) + if in.NodeSelectorTerms != nil { + in, out := &in.NodeSelectorTerms, &out.NodeSelectorTerms + *out = make([]NodeSelectorTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_NodeSelectorTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.NodeSelectorTerms = nil + } + return nil + } +} + +func DeepCopy_api_NodeSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelectorRequirement) + out := out.(*NodeSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} + +func DeepCopy_api_NodeSelectorTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSelectorTerm) + out := out.(*NodeSelectorTerm) + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]NodeSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_api_NodeSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_api_NodeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSpec) + out := out.(*NodeSpec) + out.PodCIDR = in.PodCIDR + out.ExternalID = in.ExternalID + out.ProviderID = in.ProviderID + out.Unschedulable = in.Unschedulable + return nil + } +} + +func DeepCopy_api_NodeStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeStatus) + out := out.(*NodeStatus) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + if in.Allocatable != nil { + in, out := &in.Allocatable, &out.Allocatable + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Allocatable = nil + } + out.Phase = in.Phase + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]NodeCondition, len(*in)) + for i := range *in { + if err := DeepCopy_api_NodeCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Addresses != nil { + in, out := &in.Addresses, &out.Addresses + *out = make([]NodeAddress, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Addresses = nil + } + out.DaemonEndpoints = in.DaemonEndpoints + out.NodeInfo = in.NodeInfo + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make([]ContainerImage, len(*in)) + for i := range *in { + if err := DeepCopy_api_ContainerImage(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Images = nil + } + if in.VolumesInUse != nil { + in, out := &in.VolumesInUse, &out.VolumesInUse + *out = make([]UniqueVolumeName, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumesInUse = nil + } + if in.VolumesAttached != nil { + in, out := &in.VolumesAttached, &out.VolumesAttached + *out = make([]AttachedVolume, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.VolumesAttached = nil + } + return nil + } +} + +func DeepCopy_api_NodeSystemInfo(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NodeSystemInfo) + out := out.(*NodeSystemInfo) + out.MachineID = in.MachineID + out.SystemUUID = in.SystemUUID + out.BootID = in.BootID + out.KernelVersion = in.KernelVersion + out.OSImage = in.OSImage + out.ContainerRuntimeVersion = in.ContainerRuntimeVersion + out.KubeletVersion = in.KubeletVersion + out.KubeProxyVersion = in.KubeProxyVersion + out.OperatingSystem = in.OperatingSystem + out.Architecture = in.Architecture + return nil + } +} + +func DeepCopy_api_ObjectFieldSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectFieldSelector) + out := out.(*ObjectFieldSelector) + out.APIVersion = in.APIVersion + out.FieldPath = in.FieldPath + return nil + } +} + +func DeepCopy_api_ObjectMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectMeta) + out := out.(*ObjectMeta) + out.Name = in.Name + out.GenerateName = in.GenerateName + out.Namespace = in.Namespace + out.SelfLink = in.SelfLink + out.UID = in.UID + out.ResourceVersion = in.ResourceVersion + out.Generation = in.Generation + out.CreationTimestamp = in.CreationTimestamp.DeepCopy() + if in.DeletionTimestamp != nil { + in, out := &in.DeletionTimestamp, &out.DeletionTimestamp + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.DeletionTimestamp = nil + } + if in.DeletionGracePeriodSeconds != nil { + in, out := &in.DeletionGracePeriodSeconds, &out.DeletionGracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.DeletionGracePeriodSeconds = nil + } + if in.Labels != nil { + in, out := &in.Labels, &out.Labels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Labels = nil + } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Annotations = nil + } + if in.OwnerReferences != nil { + in, out := &in.OwnerReferences, &out.OwnerReferences + *out = make([]OwnerReference, len(*in)) + for i := range *in { + if err := DeepCopy_api_OwnerReference(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.OwnerReferences = nil + } + if in.Finalizers != nil { + in, out := &in.Finalizers, &out.Finalizers + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Finalizers = nil + } + out.ClusterName = in.ClusterName + return nil + } +} + +func DeepCopy_api_ObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ObjectReference) + out := out.(*ObjectReference) + out.Kind = in.Kind + out.Namespace = in.Namespace + out.Name = in.Name + out.UID = in.UID + out.APIVersion = in.APIVersion + out.ResourceVersion = in.ResourceVersion + out.FieldPath = in.FieldPath + return nil + } +} + +func DeepCopy_api_OwnerReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*OwnerReference) + out := out.(*OwnerReference) + out.APIVersion = in.APIVersion + out.Kind = in.Kind + out.Name = in.Name + out.UID = in.UID + if in.Controller != nil { + in, out := &in.Controller, &out.Controller + *out = new(bool) + **out = **in + } else { + out.Controller = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolume) + out := out.(*PersistentVolume) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PersistentVolumeSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaim(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaim) + out := out.(*PersistentVolumeClaim) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PersistentVolumeClaimSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_PersistentVolumeClaimStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaimList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimList) + out := out.(*PersistentVolumeClaimList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolumeClaim, len(*in)) + for i := range *in { + if err := DeepCopy_api_PersistentVolumeClaim(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaimSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimSpec) + out := out.(*PersistentVolumeClaimSpec) + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := DeepCopy_api_ResourceRequirements(&in.Resources, &out.Resources, c); err != nil { + return err + } + out.VolumeName = in.VolumeName + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaimStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimStatus) + out := out.(*PersistentVolumeClaimStatus) + out.Phase = in.Phase + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeClaimVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeClaimVolumeSource) + out := out.(*PersistentVolumeClaimVolumeSource) + out.ClaimName = in.ClaimName + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_PersistentVolumeList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeList) + out := out.(*PersistentVolumeList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PersistentVolume, len(*in)) + for i := range *in { + if err := DeepCopy_api_PersistentVolume(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeSource) + out := out.(*PersistentVolumeSource) + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + **out = **in + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in + } else { + out.AWSElasticBlockStore = nil + } + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + **out = **in + } else { + out.HostPath = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + **out = **in + } else { + out.Glusterfs = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + **out = **in + } else { + out.NFS = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := DeepCopy_api_RBDVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + **out = **in + } else { + out.Quobyte = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + **out = **in + } else { + out.ISCSI = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := DeepCopy_api_FlexVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + **out = **in + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := DeepCopy_api_CephFSVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := DeepCopy_api_FCVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FC = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + **out = **in + } else { + out.Flocker = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + **out = **in + } else { + out.AzureFile = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in + } else { + out.VsphereVolume = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := DeepCopy_api_AzureDiskVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil + } +} + +func DeepCopy_api_PersistentVolumeSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeSpec) + out := out.(*PersistentVolumeSpec) + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Capacity = nil + } + if err := DeepCopy_api_PersistentVolumeSource(&in.PersistentVolumeSource, &out.PersistentVolumeSource, c); err != nil { + return err + } + if in.AccessModes != nil { + in, out := &in.AccessModes, &out.AccessModes + *out = make([]PersistentVolumeAccessMode, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AccessModes = nil + } + if in.ClaimRef != nil { + in, out := &in.ClaimRef, &out.ClaimRef + *out = new(ObjectReference) + **out = **in + } else { + out.ClaimRef = nil + } + out.PersistentVolumeReclaimPolicy = in.PersistentVolumeReclaimPolicy + return nil + } +} + +func DeepCopy_api_PersistentVolumeStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeStatus) + out := out.(*PersistentVolumeStatus) + out.Phase = in.Phase + out.Message = in.Message + out.Reason = in.Reason + return nil + } +} + +func DeepCopy_api_Pod(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Pod) + out := out.(*Pod) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PodSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_PodStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAffinity) + out := out.(*PodAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_PodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_api_PodAffinityTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAffinityTerm) + out := out.(*PodAffinityTerm) + if in.LabelSelector != nil { + in, out := &in.LabelSelector, &out.LabelSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.LabelSelector = nil + } + if in.Namespaces != nil { + in, out := &in.Namespaces, &out.Namespaces + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Namespaces = nil + } + out.TopologyKey = in.TopologyKey + return nil + } +} + +func DeepCopy_api_PodAntiAffinity(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAntiAffinity) + out := out.(*PodAntiAffinity) + if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution + *out = make([]PodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_PodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.RequiredDuringSchedulingIgnoredDuringExecution = nil + } + if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { + in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution + *out = make([]WeightedPodAffinityTerm, len(*in)) + for i := range *in { + if err := DeepCopy_api_WeightedPodAffinityTerm(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.PreferredDuringSchedulingIgnoredDuringExecution = nil + } + return nil + } +} + +func DeepCopy_api_PodAttachOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodAttachOptions) + out := out.(*PodAttachOptions) + out.TypeMeta = in.TypeMeta + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + return nil + } +} + +func DeepCopy_api_PodCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodCondition) + out := out.(*PodCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_PodExecOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodExecOptions) + out := out.(*PodExecOptions) + out.TypeMeta = in.TypeMeta + out.Stdin = in.Stdin + out.Stdout = in.Stdout + out.Stderr = in.Stderr + out.TTY = in.TTY + out.Container = in.Container + if in.Command != nil { + in, out := &in.Command, &out.Command + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Command = nil + } + return nil + } +} + +func DeepCopy_api_PodList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodList) + out := out.(*PodList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Pod, len(*in)) + for i := range *in { + if err := DeepCopy_api_Pod(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PodLogOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodLogOptions) + out := out.(*PodLogOptions) + out.TypeMeta = in.TypeMeta + out.Container = in.Container + out.Follow = in.Follow + out.Previous = in.Previous + if in.SinceSeconds != nil { + in, out := &in.SinceSeconds, &out.SinceSeconds + *out = new(int64) + **out = **in + } else { + out.SinceSeconds = nil + } + if in.SinceTime != nil { + in, out := &in.SinceTime, &out.SinceTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.SinceTime = nil + } + out.Timestamps = in.Timestamps + if in.TailLines != nil { + in, out := &in.TailLines, &out.TailLines + *out = new(int64) + **out = **in + } else { + out.TailLines = nil + } + if in.LimitBytes != nil { + in, out := &in.LimitBytes, &out.LimitBytes + *out = new(int64) + **out = **in + } else { + out.LimitBytes = nil + } + return nil + } +} + +func DeepCopy_api_PodProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodProxyOptions) + out := out.(*PodProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_api_PodSecurityContext(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityContext) + out := out.(*PodSecurityContext) + out.HostNetwork = in.HostNetwork + out.HostPID = in.HostPID + out.HostIPC = in.HostIPC + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + if in.RunAsUser != nil { + in, out := &in.RunAsUser, &out.RunAsUser + *out = new(int64) + **out = **in + } else { + out.RunAsUser = nil + } + if in.RunAsNonRoot != nil { + in, out := &in.RunAsNonRoot, &out.RunAsNonRoot + *out = new(bool) + **out = **in + } else { + out.RunAsNonRoot = nil + } + if in.SupplementalGroups != nil { + in, out := &in.SupplementalGroups, &out.SupplementalGroups + *out = make([]int64, len(*in)) + copy(*out, *in) + } else { + out.SupplementalGroups = nil + } + if in.FSGroup != nil { + in, out := &in.FSGroup, &out.FSGroup + *out = new(int64) + **out = **in + } else { + out.FSGroup = nil + } + return nil + } +} + +func DeepCopy_api_PodSignature(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSignature) + out := out.(*PodSignature) + if in.PodController != nil { + in, out := &in.PodController, &out.PodController + *out = new(OwnerReference) + if err := DeepCopy_api_OwnerReference(*in, *out, c); err != nil { + return err + } + } else { + out.PodController = nil + } + return nil + } +} + +func DeepCopy_api_PodSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSpec) + out := out.(*PodSpec) + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]Volume, len(*in)) + for i := range *in { + if err := DeepCopy_api_Volume(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Volumes = nil + } + if in.InitContainers != nil { + in, out := &in.InitContainers, &out.InitContainers + *out = make([]Container, len(*in)) + for i := range *in { + if err := DeepCopy_api_Container(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.InitContainers = nil + } + if in.Containers != nil { + in, out := &in.Containers, &out.Containers + *out = make([]Container, len(*in)) + for i := range *in { + if err := DeepCopy_api_Container(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Containers = nil + } + out.RestartPolicy = in.RestartPolicy + if in.TerminationGracePeriodSeconds != nil { + in, out := &in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds + *out = new(int64) + **out = **in + } else { + out.TerminationGracePeriodSeconds = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + out.DNSPolicy = in.DNSPolicy + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.NodeSelector = nil + } + out.ServiceAccountName = in.ServiceAccountName + out.NodeName = in.NodeName + if in.SecurityContext != nil { + in, out := &in.SecurityContext, &out.SecurityContext + *out = new(PodSecurityContext) + if err := DeepCopy_api_PodSecurityContext(*in, *out, c); err != nil { + return err + } + } else { + out.SecurityContext = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ImagePullSecrets = nil + } + out.Hostname = in.Hostname + out.Subdomain = in.Subdomain + return nil + } +} + +func DeepCopy_api_PodStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodStatus) + out := out.(*PodStatus) + out.Phase = in.Phase + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]PodCondition, len(*in)) + for i := range *in { + if err := DeepCopy_api_PodCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + out.Message = in.Message + out.Reason = in.Reason + out.HostIP = in.HostIP + out.PodIP = in.PodIP + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.InitContainerStatuses != nil { + in, out := &in.InitContainerStatuses, &out.InitContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ContainerStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.InitContainerStatuses = nil + } + if in.ContainerStatuses != nil { + in, out := &in.ContainerStatuses, &out.ContainerStatuses + *out = make([]ContainerStatus, len(*in)) + for i := range *in { + if err := DeepCopy_api_ContainerStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.ContainerStatuses = nil + } + return nil + } +} + +func DeepCopy_api_PodStatusResult(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodStatusResult) + out := out.(*PodStatusResult) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PodStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodTemplate(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplate) + out := out.(*PodTemplate) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_PodTemplateList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplateList) + out := out.(*PodTemplateList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodTemplate, len(*in)) + for i := range *in { + if err := DeepCopy_api_PodTemplate(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_PodTemplateSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodTemplateSpec) + out := out.(*PodTemplateSpec) + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_PodSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_Preconditions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Preconditions) + out := out.(*Preconditions) + if in.UID != nil { + in, out := &in.UID, &out.UID + *out = new(types.UID) + **out = **in + } else { + out.UID = nil + } + return nil + } +} + +func DeepCopy_api_PreferAvoidPodsEntry(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PreferAvoidPodsEntry) + out := out.(*PreferAvoidPodsEntry) + if err := DeepCopy_api_PodSignature(&in.PodSignature, &out.PodSignature, c); err != nil { + return err + } + out.EvictionTime = in.EvictionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_api_PreferredSchedulingTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PreferredSchedulingTerm) + out := out.(*PreferredSchedulingTerm) + out.Weight = in.Weight + if err := DeepCopy_api_NodeSelectorTerm(&in.Preference, &out.Preference, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_Probe(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Probe) + out := out.(*Probe) + if err := DeepCopy_api_Handler(&in.Handler, &out.Handler, c); err != nil { + return err + } + out.InitialDelaySeconds = in.InitialDelaySeconds + out.TimeoutSeconds = in.TimeoutSeconds + out.PeriodSeconds = in.PeriodSeconds + out.SuccessThreshold = in.SuccessThreshold + out.FailureThreshold = in.FailureThreshold + return nil + } +} + +func DeepCopy_api_QuobyteVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*QuobyteVolumeSource) + out := out.(*QuobyteVolumeSource) + out.Registry = in.Registry + out.Volume = in.Volume + out.ReadOnly = in.ReadOnly + out.User = in.User + out.Group = in.Group + return nil + } +} + +func DeepCopy_api_RBDVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RBDVolumeSource) + out := out.(*RBDVolumeSource) + if in.CephMonitors != nil { + in, out := &in.CephMonitors, &out.CephMonitors + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.CephMonitors = nil + } + out.RBDImage = in.RBDImage + out.FSType = in.FSType + out.RBDPool = in.RBDPool + out.RadosUser = in.RadosUser + out.Keyring = in.Keyring + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + *out = new(LocalObjectReference) + **out = **in + } else { + out.SecretRef = nil + } + out.ReadOnly = in.ReadOnly + return nil + } +} + +func DeepCopy_api_RangeAllocation(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RangeAllocation) + out := out.(*RangeAllocation) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Range = in.Range + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_api_ReplicationController(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationController) + out := out.(*ReplicationController) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ReplicationControllerSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_api_ReplicationControllerList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerList) + out := out.(*ReplicationControllerList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReplicationController, len(*in)) + for i := range *in { + if err := DeepCopy_api_ReplicationController(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ReplicationControllerSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerSpec) + out := out.(*ReplicationControllerSpec) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + if in.Template != nil { + in, out := &in.Template, &out.Template + *out = new(PodTemplateSpec) + if err := DeepCopy_api_PodTemplateSpec(*in, *out, c); err != nil { + return err + } + } else { + out.Template = nil + } + return nil + } +} + +func DeepCopy_api_ReplicationControllerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerStatus) + out := out.(*ReplicationControllerStatus) + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil + } +} + +func DeepCopy_api_ResourceFieldSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceFieldSelector) + out := out.(*ResourceFieldSelector) + out.ContainerName = in.ContainerName + out.Resource = in.Resource + out.Divisor = in.Divisor.DeepCopy() + return nil + } +} + +func DeepCopy_api_ResourceQuota(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuota) + out := out.(*ResourceQuota) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ResourceQuotaSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_ResourceQuotaStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ResourceQuotaList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaList) + out := out.(*ResourceQuotaList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ResourceQuota, len(*in)) + for i := range *in { + if err := DeepCopy_api_ResourceQuota(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ResourceQuotaSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaSpec) + out := out.(*ResourceQuotaSpec) + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Hard = nil + } + if in.Scopes != nil { + in, out := &in.Scopes, &out.Scopes + *out = make([]ResourceQuotaScope, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Scopes = nil + } + return nil + } +} + +func DeepCopy_api_ResourceQuotaStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceQuotaStatus) + out := out.(*ResourceQuotaStatus) + if in.Hard != nil { + in, out := &in.Hard, &out.Hard + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Hard = nil + } + if in.Used != nil { + in, out := &in.Used, &out.Used + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Used = nil + } + return nil + } +} + +func DeepCopy_api_ResourceRequirements(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceRequirements) + out := out.(*ResourceRequirements) + if in.Limits != nil { + in, out := &in.Limits, &out.Limits + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Limits = nil + } + if in.Requests != nil { + in, out := &in.Requests, &out.Requests + *out = make(ResourceList) + for key, val := range *in { + (*out)[key] = val.DeepCopy() + } + } else { + out.Requests = nil + } + return nil + } +} + +func DeepCopy_api_RunAsUserStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RunAsUserStrategyOptions) + out := out.(*RunAsUserStrategyOptions) + out.Type = in.Type + if in.UID != nil { + in, out := &in.UID, &out.UID + *out = new(int64) + **out = **in + } else { + out.UID = nil + } + if in.UIDRangeMin != nil { + in, out := &in.UIDRangeMin, &out.UIDRangeMin + *out = new(int64) + **out = **in + } else { + out.UIDRangeMin = nil + } + if in.UIDRangeMax != nil { + in, out := &in.UIDRangeMax, &out.UIDRangeMax + *out = new(int64) + **out = **in + } else { + out.UIDRangeMax = nil + } + return nil + } +} + +func DeepCopy_api_SELinuxContextStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxContextStrategyOptions) + out := out.(*SELinuxContextStrategyOptions) + out.Type = in.Type + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + return nil + } +} + +func DeepCopy_api_SELinuxOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxOptions) + out := out.(*SELinuxOptions) + out.User = in.User + out.Role = in.Role + out.Type = in.Type + out.Level = in.Level + return nil + } +} + +func DeepCopy_api_Secret(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Secret) + out := out.(*Secret) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make(map[string][]byte) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(*[]byte) + } + } + } else { + out.Data = nil + } + out.Type = in.Type + return nil + } +} + +func DeepCopy_api_SecretKeySelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretKeySelector) + out := out.(*SecretKeySelector) + out.LocalObjectReference = in.LocalObjectReference + out.Key = in.Key + return nil + } +} + +func DeepCopy_api_SecretList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretList) + out := out.(*SecretList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Secret, len(*in)) + for i := range *in { + if err := DeepCopy_api_Secret(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_SecretVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecretVolumeSource) + out := out.(*SecretVolumeSource) + out.SecretName = in.SecretName + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KeyToPath, len(*in)) + for i := range *in { + if err := DeepCopy_api_KeyToPath(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + if in.DefaultMode != nil { + in, out := &in.DefaultMode, &out.DefaultMode + *out = new(int32) + **out = **in + } else { + out.DefaultMode = nil + } + return nil + } +} + +func DeepCopy_api_SecurityContext(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecurityContext) + out := out.(*SecurityContext) + if in.Capabilities != nil { + in, out := &in.Capabilities, &out.Capabilities + *out = new(Capabilities) + if err := DeepCopy_api_Capabilities(*in, *out, c); err != nil { + return err + } + } else { + out.Capabilities = nil + } + if in.Privileged != nil { + in, out := &in.Privileged, &out.Privileged + *out = new(bool) + **out = **in + } else { + out.Privileged = nil + } + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + if in.RunAsUser != nil { + in, out := &in.RunAsUser, &out.RunAsUser + *out = new(int64) + **out = **in + } else { + out.RunAsUser = nil + } + if in.RunAsNonRoot != nil { + in, out := &in.RunAsNonRoot, &out.RunAsNonRoot + *out = new(bool) + **out = **in + } else { + out.RunAsNonRoot = nil + } + if in.ReadOnlyRootFilesystem != nil { + in, out := &in.ReadOnlyRootFilesystem, &out.ReadOnlyRootFilesystem + *out = new(bool) + **out = **in + } else { + out.ReadOnlyRootFilesystem = nil + } + return nil + } +} + +func DeepCopy_api_SecurityContextConstraints(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecurityContextConstraints) + out := out.(*SecurityContextConstraints) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Priority != nil { + in, out := &in.Priority, &out.Priority + *out = new(int32) + **out = **in + } else { + out.Priority = nil + } + out.AllowPrivilegedContainer = in.AllowPrivilegedContainer + if in.DefaultAddCapabilities != nil { + in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.DefaultAddCapabilities = nil + } + if in.RequiredDropCapabilities != nil { + in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.RequiredDropCapabilities = nil + } + if in.AllowedCapabilities != nil { + in, out := &in.AllowedCapabilities, &out.AllowedCapabilities + *out = make([]Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AllowedCapabilities = nil + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]FSType, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Volumes = nil + } + out.AllowHostNetwork = in.AllowHostNetwork + out.AllowHostPorts = in.AllowHostPorts + out.AllowHostPID = in.AllowHostPID + out.AllowHostIPC = in.AllowHostIPC + if err := DeepCopy_api_SELinuxContextStrategyOptions(&in.SELinuxContext, &out.SELinuxContext, c); err != nil { + return err + } + if err := DeepCopy_api_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, c); err != nil { + return err + } + if err := DeepCopy_api_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { + return err + } + if err := DeepCopy_api_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { + return err + } + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + if in.SeccompProfiles != nil { + in, out := &in.SeccompProfiles, &out.SeccompProfiles + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.SeccompProfiles = nil + } + if in.Users != nil { + in, out := &in.Users, &out.Users + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Users = nil + } + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + return nil + } +} + +func DeepCopy_api_SecurityContextConstraintsList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SecurityContextConstraintsList) + out := out.(*SecurityContextConstraintsList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]SecurityContextConstraints, len(*in)) + for i := range *in { + if err := DeepCopy_api_SecurityContextConstraints(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_SerializedReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SerializedReference) + out := out.(*SerializedReference) + out.TypeMeta = in.TypeMeta + out.Reference = in.Reference + return nil + } +} + +func DeepCopy_api_Service(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Service) + out := out.(*Service) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_api_ServiceSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_api_ServiceStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_ServiceAccount(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccount) + out := out.(*ServiceAccount) + out.TypeMeta = in.TypeMeta + if err := DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Secrets != nil { + in, out := &in.Secrets, &out.Secrets + *out = make([]ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Secrets = nil + } + if in.ImagePullSecrets != nil { + in, out := &in.ImagePullSecrets, &out.ImagePullSecrets + *out = make([]LocalObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.ImagePullSecrets = nil + } + return nil + } +} + +func DeepCopy_api_ServiceAccountList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceAccountList) + out := out.(*ServiceAccountList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ServiceAccount, len(*in)) + for i := range *in { + if err := DeepCopy_api_ServiceAccount(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ServiceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceList) + out := out.(*ServiceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Service, len(*in)) + for i := range *in { + if err := DeepCopy_api_Service(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_api_ServicePort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServicePort) + out := out.(*ServicePort) + out.Name = in.Name + out.Protocol = in.Protocol + out.Port = in.Port + out.TargetPort = in.TargetPort + out.NodePort = in.NodePort + return nil + } +} + +func DeepCopy_api_ServiceProxyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceProxyOptions) + out := out.(*ServiceProxyOptions) + out.TypeMeta = in.TypeMeta + out.Path = in.Path + return nil + } +} + +func DeepCopy_api_ServiceSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceSpec) + out := out.(*ServiceSpec) + out.Type = in.Type + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]ServicePort, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ports = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + out.ClusterIP = in.ClusterIP + out.ExternalName = in.ExternalName + if in.ExternalIPs != nil { + in, out := &in.ExternalIPs, &out.ExternalIPs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ExternalIPs = nil + } + out.LoadBalancerIP = in.LoadBalancerIP + out.SessionAffinity = in.SessionAffinity + if in.LoadBalancerSourceRanges != nil { + in, out := &in.LoadBalancerSourceRanges, &out.LoadBalancerSourceRanges + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.LoadBalancerSourceRanges = nil + } + return nil + } +} + +func DeepCopy_api_ServiceStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ServiceStatus) + out := out.(*ServiceStatus) + if err := DeepCopy_api_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_SupplementalGroupsStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SupplementalGroupsStrategyOptions) + out := out.(*SupplementalGroupsStrategyOptions) + out.Type = in.Type + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_api_Sysctl(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Sysctl) + out := out.(*Sysctl) + out.Name = in.Name + out.Value = in.Value + return nil + } +} + +func DeepCopy_api_TCPSocketAction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TCPSocketAction) + out := out.(*TCPSocketAction) + out.Port = in.Port + return nil + } +} + +func DeepCopy_api_Taint(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Taint) + out := out.(*Taint) + out.Key = in.Key + out.Value = in.Value + out.Effect = in.Effect + return nil + } +} + +func DeepCopy_api_Toleration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Toleration) + out := out.(*Toleration) + out.Key = in.Key + out.Operator = in.Operator + out.Value = in.Value + out.Effect = in.Effect + return nil + } +} + +func DeepCopy_api_Volume(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Volume) + out := out.(*Volume) + out.Name = in.Name + if err := DeepCopy_api_VolumeSource(&in.VolumeSource, &out.VolumeSource, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_api_VolumeMount(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeMount) + out := out.(*VolumeMount) + out.Name = in.Name + out.ReadOnly = in.ReadOnly + out.MountPath = in.MountPath + out.SubPath = in.SubPath + return nil + } +} + +func DeepCopy_api_VolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeSource) + out := out.(*VolumeSource) + if in.HostPath != nil { + in, out := &in.HostPath, &out.HostPath + *out = new(HostPathVolumeSource) + **out = **in + } else { + out.HostPath = nil + } + if in.EmptyDir != nil { + in, out := &in.EmptyDir, &out.EmptyDir + *out = new(EmptyDirVolumeSource) + **out = **in + } else { + out.EmptyDir = nil + } + if in.GCEPersistentDisk != nil { + in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk + *out = new(GCEPersistentDiskVolumeSource) + **out = **in + } else { + out.GCEPersistentDisk = nil + } + if in.AWSElasticBlockStore != nil { + in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore + *out = new(AWSElasticBlockStoreVolumeSource) + **out = **in + } else { + out.AWSElasticBlockStore = nil + } + if in.GitRepo != nil { + in, out := &in.GitRepo, &out.GitRepo + *out = new(GitRepoVolumeSource) + **out = **in + } else { + out.GitRepo = nil + } + if in.Secret != nil { + in, out := &in.Secret, &out.Secret + *out = new(SecretVolumeSource) + if err := DeepCopy_api_SecretVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.Secret = nil + } + if in.NFS != nil { + in, out := &in.NFS, &out.NFS + *out = new(NFSVolumeSource) + **out = **in + } else { + out.NFS = nil + } + if in.ISCSI != nil { + in, out := &in.ISCSI, &out.ISCSI + *out = new(ISCSIVolumeSource) + **out = **in + } else { + out.ISCSI = nil + } + if in.Glusterfs != nil { + in, out := &in.Glusterfs, &out.Glusterfs + *out = new(GlusterfsVolumeSource) + **out = **in + } else { + out.Glusterfs = nil + } + if in.PersistentVolumeClaim != nil { + in, out := &in.PersistentVolumeClaim, &out.PersistentVolumeClaim + *out = new(PersistentVolumeClaimVolumeSource) + **out = **in + } else { + out.PersistentVolumeClaim = nil + } + if in.RBD != nil { + in, out := &in.RBD, &out.RBD + *out = new(RBDVolumeSource) + if err := DeepCopy_api_RBDVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.RBD = nil + } + if in.Quobyte != nil { + in, out := &in.Quobyte, &out.Quobyte + *out = new(QuobyteVolumeSource) + **out = **in + } else { + out.Quobyte = nil + } + if in.FlexVolume != nil { + in, out := &in.FlexVolume, &out.FlexVolume + *out = new(FlexVolumeSource) + if err := DeepCopy_api_FlexVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FlexVolume = nil + } + if in.Cinder != nil { + in, out := &in.Cinder, &out.Cinder + *out = new(CinderVolumeSource) + **out = **in + } else { + out.Cinder = nil + } + if in.CephFS != nil { + in, out := &in.CephFS, &out.CephFS + *out = new(CephFSVolumeSource) + if err := DeepCopy_api_CephFSVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.CephFS = nil + } + if in.Flocker != nil { + in, out := &in.Flocker, &out.Flocker + *out = new(FlockerVolumeSource) + **out = **in + } else { + out.Flocker = nil + } + if in.DownwardAPI != nil { + in, out := &in.DownwardAPI, &out.DownwardAPI + *out = new(DownwardAPIVolumeSource) + if err := DeepCopy_api_DownwardAPIVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.DownwardAPI = nil + } + if in.FC != nil { + in, out := &in.FC, &out.FC + *out = new(FCVolumeSource) + if err := DeepCopy_api_FCVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.FC = nil + } + if in.AzureFile != nil { + in, out := &in.AzureFile, &out.AzureFile + *out = new(AzureFileVolumeSource) + **out = **in + } else { + out.AzureFile = nil + } + if in.ConfigMap != nil { + in, out := &in.ConfigMap, &out.ConfigMap + *out = new(ConfigMapVolumeSource) + if err := DeepCopy_api_ConfigMapVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.ConfigMap = nil + } + if in.VsphereVolume != nil { + in, out := &in.VsphereVolume, &out.VsphereVolume + *out = new(VsphereVirtualDiskVolumeSource) + **out = **in + } else { + out.VsphereVolume = nil + } + if in.AzureDisk != nil { + in, out := &in.AzureDisk, &out.AzureDisk + *out = new(AzureDiskVolumeSource) + if err := DeepCopy_api_AzureDiskVolumeSource(*in, *out, c); err != nil { + return err + } + } else { + out.AzureDisk = nil + } + return nil + } +} + +func DeepCopy_api_VsphereVirtualDiskVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VsphereVirtualDiskVolumeSource) + out := out.(*VsphereVirtualDiskVolumeSource) + out.VolumePath = in.VolumePath + out.FSType = in.FSType + return nil + } +} + +func DeepCopy_api_WeightedPodAffinityTerm(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*WeightedPodAffinityTerm) + out := out.(*WeightedPodAffinityTerm) + out.Weight = in.Weight + if err := DeepCopy_api_PodAffinityTerm(&in.PodAffinityTerm, &out.PodAffinityTerm, c); err != nil { + return err + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apimachinery/doc.go b/vendor/k8s.io/kubernetes/pkg/apimachinery/doc.go index 7c5a261b..ede22b3d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apimachinery/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apimachinery/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/apimachinery/registered/registered.go b/vendor/k8s.io/kubernetes/pkg/apimachinery/registered/registered.go index aa64743f..d880afcb 100644 --- a/vendor/k8s.io/kubernetes/pkg/apimachinery/registered/registered.go +++ b/vendor/k8s.io/kubernetes/pkg/apimachinery/registered/registered.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -32,8 +32,13 @@ import ( ) var ( + DefaultAPIRegistrationManager = NewOrDie(os.Getenv("KUBE_API_VERSIONS")) +) + +// APIRegistrationManager +type APIRegistrationManager struct { // registeredGroupVersions stores all API group versions for which RegisterGroup is called. - registeredVersions = map[unversioned.GroupVersion]struct{}{} + registeredVersions map[unversioned.GroupVersion]struct{} // thirdPartyGroupVersions are API versions which are dynamically // registered (and unregistered) via API calls to the apiserver @@ -42,51 +47,89 @@ var ( // enabledVersions represents all enabled API versions. It should be a // subset of registeredVersions. Please call EnableVersions() to add // enabled versions. - enabledVersions = map[unversioned.GroupVersion]struct{}{} + enabledVersions map[unversioned.GroupVersion]struct{} // map of group meta for all groups. - groupMetaMap = map[string]*apimachinery.GroupMeta{} + groupMetaMap map[string]*apimachinery.GroupMeta // envRequestedVersions represents the versions requested via the // KUBE_API_VERSIONS environment variable. The install package of each group // checks this list before add their versions to the latest package and // Scheme. This list is small and order matters, so represent as a slice - envRequestedVersions = []unversioned.GroupVersion{} -) + envRequestedVersions []unversioned.GroupVersion +} + +// NewAPIRegistrationManager constructs a new manager. The argument ought to be +// the value of the KUBE_API_VERSIONS env var, or a value of this which you +// wish to test. +func NewAPIRegistrationManager(kubeAPIVersions string) (*APIRegistrationManager, error) { + m := &APIRegistrationManager{ + registeredVersions: map[unversioned.GroupVersion]struct{}{}, + thirdPartyGroupVersions: []unversioned.GroupVersion{}, + enabledVersions: map[unversioned.GroupVersion]struct{}{}, + groupMetaMap: map[string]*apimachinery.GroupMeta{}, + envRequestedVersions: []unversioned.GroupVersion{}, + } -func init() { - // Env var KUBE_API_VERSIONS is a comma separated list of API versions that - // should be registered in the scheme. - kubeAPIVersions := os.Getenv("KUBE_API_VERSIONS") if len(kubeAPIVersions) != 0 { for _, version := range strings.Split(kubeAPIVersions, ",") { gv, err := unversioned.ParseGroupVersion(version) if err != nil { - glog.Fatalf("invalid api version: %s in KUBE_API_VERSIONS: %s.", - version, os.Getenv("KUBE_API_VERSIONS")) + return nil, fmt.Errorf("invalid api version: %s in KUBE_API_VERSIONS: %s.", + version, kubeAPIVersions) } - envRequestedVersions = append(envRequestedVersions, gv) + m.envRequestedVersions = append(m.envRequestedVersions, gv) } } + return m, nil } +func NewOrDie(kubeAPIVersions string) *APIRegistrationManager { + m, err := NewAPIRegistrationManager(kubeAPIVersions) + if err != nil { + glog.Fatalf("Could not construct version manager: %v (KUBE_API_VERSIONS=%q)", err, kubeAPIVersions) + } + return m +} + +// People are calling global functions. Let them continue to do that (for now). +var ( + ValidateEnvRequestedVersions = DefaultAPIRegistrationManager.ValidateEnvRequestedVersions + AllPreferredGroupVersions = DefaultAPIRegistrationManager.AllPreferredGroupVersions + RESTMapper = DefaultAPIRegistrationManager.RESTMapper + GroupOrDie = DefaultAPIRegistrationManager.GroupOrDie + AddThirdPartyAPIGroupVersions = DefaultAPIRegistrationManager.AddThirdPartyAPIGroupVersions + IsThirdPartyAPIGroupVersion = DefaultAPIRegistrationManager.IsThirdPartyAPIGroupVersion + RegisteredGroupVersions = DefaultAPIRegistrationManager.RegisteredGroupVersions + IsRegisteredVersion = DefaultAPIRegistrationManager.IsRegisteredVersion + IsRegistered = DefaultAPIRegistrationManager.IsRegistered + Group = DefaultAPIRegistrationManager.Group + EnabledVersionsForGroup = DefaultAPIRegistrationManager.EnabledVersionsForGroup + EnabledVersions = DefaultAPIRegistrationManager.EnabledVersions + IsEnabledVersion = DefaultAPIRegistrationManager.IsEnabledVersion + IsAllowedVersion = DefaultAPIRegistrationManager.IsAllowedVersion + EnableVersions = DefaultAPIRegistrationManager.EnableVersions + RegisterGroup = DefaultAPIRegistrationManager.RegisterGroup + RegisterVersions = DefaultAPIRegistrationManager.RegisterVersions +) + // RegisterVersions adds the given group versions to the list of registered group versions. -func RegisterVersions(availableVersions []unversioned.GroupVersion) { +func (m *APIRegistrationManager) RegisterVersions(availableVersions []unversioned.GroupVersion) { for _, v := range availableVersions { - registeredVersions[v] = struct{}{} + m.registeredVersions[v] = struct{}{} } } // RegisterGroup adds the given group to the list of registered groups. -func RegisterGroup(groupMeta apimachinery.GroupMeta) error { +func (m *APIRegistrationManager) RegisterGroup(groupMeta apimachinery.GroupMeta) error { groupName := groupMeta.GroupVersion.Group - if existing, found := groupMetaMap[groupName]; found { + if existing, found := m.groupMetaMap[groupName]; found { mergedGroupMeta := mergeGroupMeta(*existing, groupMeta) - groupMetaMap[groupName] = &mergedGroupMeta + m.groupMetaMap[groupName] = &mergedGroupMeta return nil - // return fmt.Errorf("group %v is already registered", groupMetaMap) + // return fmt.Errorf("group %v is already registered", m.groupMetaMap) } - groupMetaMap[groupName] = &groupMeta + m.groupMetaMap[groupName] = &groupMeta return nil } @@ -126,13 +169,13 @@ func mergeGroupMeta(lhs, rhs apimachinery.GroupMeta) apimachinery.GroupMeta { // EnableVersions adds the versions for the given group to the list of enabled versions. // Note that the caller should call RegisterGroup before calling this method. // The caller of this function is responsible to add the versions to scheme and RESTMapper. -func EnableVersions(versions ...unversioned.GroupVersion) error { +func (m *APIRegistrationManager) EnableVersions(versions ...unversioned.GroupVersion) error { var unregisteredVersions []unversioned.GroupVersion for _, v := range versions { - if _, found := registeredVersions[v]; !found { + if _, found := m.registeredVersions[v]; !found { unregisteredVersions = append(unregisteredVersions, v) } - enabledVersions[v] = struct{}{} + m.enabledVersions[v] = struct{}{} } if len(unregisteredVersions) != 0 { return fmt.Errorf("Please register versions before enabling them: %v", unregisteredVersions) @@ -143,11 +186,11 @@ func EnableVersions(versions ...unversioned.GroupVersion) error { // IsAllowedVersion returns if the version is allowed by the KUBE_API_VERSIONS // environment variable. If the environment variable is empty, then it always // returns true. -func IsAllowedVersion(v unversioned.GroupVersion) bool { - if len(envRequestedVersions) == 0 { +func (m *APIRegistrationManager) IsAllowedVersion(v unversioned.GroupVersion) bool { + if len(m.envRequestedVersions) == 0 { return true } - for _, envGV := range envRequestedVersions { + for _, envGV := range m.envRequestedVersions { if v == envGV { return true } @@ -156,24 +199,24 @@ func IsAllowedVersion(v unversioned.GroupVersion) bool { } // IsEnabledVersion returns if a version is enabled. -func IsEnabledVersion(v unversioned.GroupVersion) bool { - _, found := enabledVersions[v] +func (m *APIRegistrationManager) IsEnabledVersion(v unversioned.GroupVersion) bool { + _, found := m.enabledVersions[v] return found } // EnabledVersions returns all enabled versions. Groups are randomly ordered, but versions within groups // are priority order from best to worst -func EnabledVersions() []unversioned.GroupVersion { +func (m *APIRegistrationManager) EnabledVersions() []unversioned.GroupVersion { ret := []unversioned.GroupVersion{} - for _, groupMeta := range groupMetaMap { + for _, groupMeta := range m.groupMetaMap { ret = append(ret, groupMeta.GroupVersions...) } return ret } // EnabledVersionsForGroup returns all enabled versions for a group in order of best to worst -func EnabledVersionsForGroup(group string) []unversioned.GroupVersion { - groupMeta, ok := groupMetaMap[group] +func (m *APIRegistrationManager) EnabledVersionsForGroup(group string) []unversioned.GroupVersion { + groupMeta, ok := m.groupMetaMap[group] if !ok { return []unversioned.GroupVersion{} } @@ -181,10 +224,10 @@ func EnabledVersionsForGroup(group string) []unversioned.GroupVersion { return append([]unversioned.GroupVersion{}, groupMeta.GroupVersions...) } -// Group returns the metadata of a group if the gruop is registered, otherwise -// an erorr is returned. -func Group(group string) (*apimachinery.GroupMeta, error) { - groupMeta, found := groupMetaMap[group] +// Group returns the metadata of a group if the group is registered, otherwise +// an error is returned. +func (m *APIRegistrationManager) Group(group string) (*apimachinery.GroupMeta, error) { + groupMeta, found := m.groupMetaMap[group] if !found { return nil, fmt.Errorf("group %v has not been registered", group) } @@ -193,30 +236,30 @@ func Group(group string) (*apimachinery.GroupMeta, error) { } // IsRegistered takes a string and determines if it's one of the registered groups -func IsRegistered(group string) bool { - _, found := groupMetaMap[group] +func (m *APIRegistrationManager) IsRegistered(group string) bool { + _, found := m.groupMetaMap[group] return found } // IsRegisteredVersion returns if a version is registered. -func IsRegisteredVersion(v unversioned.GroupVersion) bool { - _, found := registeredVersions[v] +func (m *APIRegistrationManager) IsRegisteredVersion(v unversioned.GroupVersion) bool { + _, found := m.registeredVersions[v] return found } // RegisteredGroupVersions returns all registered group versions. -func RegisteredGroupVersions() []unversioned.GroupVersion { +func (m *APIRegistrationManager) RegisteredGroupVersions() []unversioned.GroupVersion { ret := []unversioned.GroupVersion{} - for groupVersion := range registeredVersions { + for groupVersion := range m.registeredVersions { ret = append(ret, groupVersion) } return ret } // IsThirdPartyAPIGroupVersion returns true if the api version is a user-registered group/version. -func IsThirdPartyAPIGroupVersion(gv unversioned.GroupVersion) bool { - for ix := range thirdPartyGroupVersions { - if thirdPartyGroupVersions[ix] == gv { +func (m *APIRegistrationManager) IsThirdPartyAPIGroupVersion(gv unversioned.GroupVersion) bool { + for ix := range m.thirdPartyGroupVersions { + if m.thirdPartyGroupVersions[ix] == gv { return true } } @@ -227,11 +270,11 @@ func IsThirdPartyAPIGroupVersion(gv unversioned.GroupVersion) bool { // registers them in the API machinery and enables them. // Skips GroupVersions that are already registered. // Returns the list of GroupVersions that were skipped. -func AddThirdPartyAPIGroupVersions(gvs ...unversioned.GroupVersion) []unversioned.GroupVersion { +func (m *APIRegistrationManager) AddThirdPartyAPIGroupVersions(gvs ...unversioned.GroupVersion) []unversioned.GroupVersion { filteredGVs := []unversioned.GroupVersion{} skippedGVs := []unversioned.GroupVersion{} for ix := range gvs { - if !IsRegisteredVersion(gvs[ix]) { + if !m.IsRegisteredVersion(gvs[ix]) { filteredGVs = append(filteredGVs, gvs[ix]) } else { glog.V(3).Infof("Skipping %s, because its already registered", gvs[ix].String()) @@ -241,13 +284,9 @@ func AddThirdPartyAPIGroupVersions(gvs ...unversioned.GroupVersion) []unversione if len(filteredGVs) == 0 { return skippedGVs } - RegisterVersions(filteredGVs) - EnableVersions(filteredGVs...) - next := make([]unversioned.GroupVersion, len(gvs)) - for ix := range filteredGVs { - next[ix] = filteredGVs[ix] - } - thirdPartyGroupVersions = next + m.RegisterVersions(filteredGVs) + m.EnableVersions(filteredGVs...) + m.thirdPartyGroupVersions = append(m.thirdPartyGroupVersions, filteredGVs...) return skippedGVs } @@ -255,8 +294,8 @@ func AddThirdPartyAPIGroupVersions(gvs ...unversioned.GroupVersion) []unversione // TODO: This is an expedient function, because we don't check if a Group is // supported throughout the code base. We will abandon this function and // checking the error returned by the Group() function. -func GroupOrDie(group string) *apimachinery.GroupMeta { - groupMeta, found := groupMetaMap[group] +func (m *APIRegistrationManager) GroupOrDie(group string) *apimachinery.GroupMeta { + groupMeta, found := m.groupMetaMap[group] if !found { if group == "" { panic("The legacy v1 API is not registered.") @@ -273,13 +312,13 @@ func GroupOrDie(group string) *apimachinery.GroupMeta { // 1. legacy kube group preferred version, extensions preferred version, metrics perferred version, legacy // kube any version, extensions any version, metrics any version, all other groups alphabetical preferred version, // all other groups alphabetical. -func RESTMapper(versionPatterns ...unversioned.GroupVersion) meta.RESTMapper { +func (m *APIRegistrationManager) RESTMapper(versionPatterns ...unversioned.GroupVersion) meta.RESTMapper { unionMapper := meta.MultiRESTMapper{} unionedGroups := sets.NewString() - for enabledVersion := range enabledVersions { + for enabledVersion := range m.enabledVersions { if !unionedGroups.Has(enabledVersion.Group) { unionedGroups.Insert(enabledVersion.Group) - groupMeta := groupMetaMap[enabledVersion.Group] + groupMeta := m.groupMetaMap[enabledVersion.Group] unionMapper = append(unionMapper, groupMeta.RESTMapper) } } @@ -295,11 +334,11 @@ func RESTMapper(versionPatterns ...unversioned.GroupVersion) meta.RESTMapper { return meta.PriorityRESTMapper{Delegate: unionMapper, ResourcePriority: resourcePriority, KindPriority: kindPriority} } - if len(envRequestedVersions) != 0 { + if len(m.envRequestedVersions) != 0 { resourcePriority := []unversioned.GroupVersionResource{} kindPriority := []unversioned.GroupVersionKind{} - for _, versionPriority := range envRequestedVersions { + for _, versionPriority := range m.envRequestedVersions { resourcePriority = append(resourcePriority, versionPriority.WithResource(meta.AnyResource)) kindPriority = append(kindPriority, versionPriority.WithKind(meta.AnyKind)) } @@ -308,17 +347,17 @@ func RESTMapper(versionPatterns ...unversioned.GroupVersion) meta.RESTMapper { } prioritizedGroups := []string{"", "extensions", "metrics"} - resourcePriority, kindPriority := prioritiesForGroups(prioritizedGroups...) + resourcePriority, kindPriority := m.prioritiesForGroups(prioritizedGroups...) prioritizedGroupsSet := sets.NewString(prioritizedGroups...) remainingGroups := sets.String{} - for enabledVersion := range enabledVersions { + for enabledVersion := range m.enabledVersions { if !prioritizedGroupsSet.Has(enabledVersion.Group) { remainingGroups.Insert(enabledVersion.Group) } } - remainingResourcePriority, remainingKindPriority := prioritiesForGroups(remainingGroups.List()...) + remainingResourcePriority, remainingKindPriority := m.prioritiesForGroups(remainingGroups.List()...) resourcePriority = append(resourcePriority, remainingResourcePriority...) kindPriority = append(kindPriority, remainingKindPriority...) @@ -327,12 +366,12 @@ func RESTMapper(versionPatterns ...unversioned.GroupVersion) meta.RESTMapper { // prioritiesForGroups returns the resource and kind priorities for a PriorityRESTMapper, preferring the preferred version of each group first, // then any non-preferred version of the group second. -func prioritiesForGroups(groups ...string) ([]unversioned.GroupVersionResource, []unversioned.GroupVersionKind) { +func (m *APIRegistrationManager) prioritiesForGroups(groups ...string) ([]unversioned.GroupVersionResource, []unversioned.GroupVersionKind) { resourcePriority := []unversioned.GroupVersionResource{} kindPriority := []unversioned.GroupVersionKind{} for _, group := range groups { - availableVersions := EnabledVersionsForGroup(group) + availableVersions := m.EnabledVersionsForGroup(group) if len(availableVersions) > 0 { resourcePriority = append(resourcePriority, availableVersions[0].WithResource(meta.AnyResource)) kindPriority = append(kindPriority, availableVersions[0].WithKind(meta.AnyKind)) @@ -348,12 +387,12 @@ func prioritiesForGroups(groups ...string) ([]unversioned.GroupVersionResource, // AllPreferredGroupVersions returns the preferred versions of all registered // groups in the form of "group1/version1,group2/version2,..." -func AllPreferredGroupVersions() string { - if len(groupMetaMap) == 0 { +func (m *APIRegistrationManager) AllPreferredGroupVersions() string { + if len(m.groupMetaMap) == 0 { return "" } var defaults []string - for _, groupMeta := range groupMetaMap { + for _, groupMeta := range m.groupMetaMap { defaults = append(defaults, groupMeta.GroupVersion.String()) } sort.Strings(defaults) @@ -362,21 +401,12 @@ func AllPreferredGroupVersions() string { // ValidateEnvRequestedVersions returns a list of versions that are requested in // the KUBE_API_VERSIONS environment variable, but not enabled. -func ValidateEnvRequestedVersions() []unversioned.GroupVersion { +func (m *APIRegistrationManager) ValidateEnvRequestedVersions() []unversioned.GroupVersion { var missingVersions []unversioned.GroupVersion - for _, v := range envRequestedVersions { - if _, found := enabledVersions[v]; !found { + for _, v := range m.envRequestedVersions { + if _, found := m.enabledVersions[v]; !found { missingVersions = append(missingVersions, v) } } return missingVersions } - -// Resets the state. -// Should not be used by anyone else than tests. -func reset() { - registeredVersions = map[unversioned.GroupVersion]struct{}{} - enabledVersions = map[unversioned.GroupVersion]struct{}{} - groupMetaMap = map[string]*apimachinery.GroupMeta{} - -} diff --git a/vendor/k8s.io/kubernetes/pkg/apimachinery/types.go b/vendor/k8s.io/kubernetes/pkg/apimachinery/types.go index 3e86921c..0e90cbbe 100644 --- a/vendor/k8s.io/kubernetes/pkg/apimachinery/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apimachinery/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/deep_copy_generated.go deleted file mode 100644 index 5a2135c6..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/deep_copy_generated.go +++ /dev/null @@ -1,117 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package apps - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_apps_PetSet, - DeepCopy_apps_PetSetList, - DeepCopy_apps_PetSetSpec, - DeepCopy_apps_PetSetStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_apps_PetSet(in PetSet, out *PetSet, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_apps_PetSetSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_apps_PetSetStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_apps_PetSetList(in PetSetList, out *PetSetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PetSet, len(in)) - for i := range in { - if err := DeepCopy_apps_PetSet(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_apps_PetSetSpec(in PetSetSpec, out *PetSetSpec, c *conversion.Cloner) error { - out.Replicas = in.Replicas - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := api.DeepCopy_api_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - if in.VolumeClaimTemplates != nil { - in, out := in.VolumeClaimTemplates, &out.VolumeClaimTemplates - *out = make([]api.PersistentVolumeClaim, len(in)) - for i := range in { - if err := api.DeepCopy_api_PersistentVolumeClaim(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.VolumeClaimTemplates = nil - } - out.ServiceName = in.ServiceName - return nil -} - -func DeepCopy_apps_PetSetStatus(in PetSetStatus, out *PetSetStatus, c *conversion.Cloner) error { - if in.ObservedGeneration != nil { - in, out := in.ObservedGeneration, &out.ObservedGeneration - *out = new(int64) - **out = *in - } else { - out.ObservedGeneration = nil - } - out.Replicas = in.Replicas - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/doc.go new file mode 100644 index 00000000..bca1ff4e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package apps diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/install/install.go index b4d9011d..b7139828 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -110,7 +110,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - apps.AddToScheme(api.Scheme) + if err := apps.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -119,7 +122,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/register.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/register.go index dd5b9a90..9864ffab 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,10 +22,10 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // GroupName is the group name use in this package const GroupName = "apps" @@ -33,22 +33,24 @@ const GroupName = "apps" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { // TODO this will get cleaned up with the scheme types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &PetSet{}, &PetSetList{}, &api.ListOptions{}, + &api.DeleteOptions{}, ) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/types.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/types.go index 87019c45..da573b98 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -51,7 +51,7 @@ type PetSetSpec struct { // Selector is a label query over pods that should match the replica count. // If empty, defaulted to labels on the pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *unversioned.LabelSelector `json:"selector,omitempty"` // Template is the object that describes the pod that will be created if diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/conversion.go index 48f1f2b4..5cecd950 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions to handle the *int32 -> int // conversion. A pointer is useful in the versioned type so we can default // it, but a plain int32 is more convenient in the internal type. These @@ -37,11 +37,10 @@ func addConversionFuncs(scheme *runtime.Scheme) { Convert_apps_PetSetSpec_To_v1alpha1_PetSetSpec, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } - err = api.Scheme.AddFieldLabelConversionFunc("apps/v1alpha1", "PetSet", + return api.Scheme.AddFieldLabelConversionFunc("apps/v1alpha1", "PetSet", func(label, value string) (string, string, error) { switch label { case "metadata.name", "metadata.namespace", "status.successful": @@ -49,11 +48,8 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + }, + ) } func Convert_v1alpha1_PetSetSpec_To_apps_PetSetSpec(in *PetSetSpec, out *apps.PetSetSpec, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/deep_copy_generated.go deleted file mode 100644 index 6e51cacb..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/deep_copy_generated.go +++ /dev/null @@ -1,124 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1alpha1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1alpha1_PetSet, - DeepCopy_v1alpha1_PetSetList, - DeepCopy_v1alpha1_PetSetSpec, - DeepCopy_v1alpha1_PetSetStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1alpha1_PetSet(in PetSet, out *PetSet, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1alpha1_PetSetSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1alpha1_PetSetStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1alpha1_PetSetList(in PetSetList, out *PetSetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PetSet, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_PetSet(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1alpha1_PetSetSpec(in PetSetSpec, out *PetSetSpec, c *conversion.Cloner) error { - if in.Replicas != nil { - in, out := in.Replicas, &out.Replicas - *out = new(int32) - **out = *in - } else { - out.Replicas = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := v1.DeepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - if in.VolumeClaimTemplates != nil { - in, out := in.VolumeClaimTemplates, &out.VolumeClaimTemplates - *out = make([]v1.PersistentVolumeClaim, len(in)) - for i := range in { - if err := v1.DeepCopy_v1_PersistentVolumeClaim(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.VolumeClaimTemplates = nil - } - out.ServiceName = in.ServiceName - return nil -} - -func DeepCopy_v1alpha1_PetSetStatus(in PetSetStatus, out *PetSetStatus, c *conversion.Cloner) error { - if in.ObservedGeneration != nil { - in, out := in.ObservedGeneration, &out.ObservedGeneration - *out = new(int64) - **out = *in - } else { - out.ObservedGeneration = nil - } - out.Replicas = in.Replicas - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/defaults.go index e4102813..63a02c9c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,8 +21,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_PetSet, ) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/doc.go index 65a03a20..53d9fcab 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/apps + package v1alpha1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/generated.pb.go index 88f1bcd4..5a8f0fe7 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -39,6 +39,9 @@ import math "math" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" +import strings "strings" +import reflect "reflect" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -46,21 +49,25 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *PetSet) Reset() { *m = PetSet{} } -func (m *PetSet) String() string { return proto.CompactTextString(m) } -func (*PetSet) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *PetSetList) Reset() { *m = PetSetList{} } -func (m *PetSetList) String() string { return proto.CompactTextString(m) } -func (*PetSetList) ProtoMessage() {} +func (m *PetSet) Reset() { *m = PetSet{} } +func (*PetSet) ProtoMessage() {} +func (*PetSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *PetSetSpec) Reset() { *m = PetSetSpec{} } -func (m *PetSetSpec) String() string { return proto.CompactTextString(m) } -func (*PetSetSpec) ProtoMessage() {} +func (m *PetSetList) Reset() { *m = PetSetList{} } +func (*PetSetList) ProtoMessage() {} +func (*PetSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *PetSetStatus) Reset() { *m = PetSetStatus{} } -func (m *PetSetStatus) String() string { return proto.CompactTextString(m) } -func (*PetSetStatus) ProtoMessage() {} +func (m *PetSetSpec) Reset() { *m = PetSetSpec{} } +func (*PetSetSpec) ProtoMessage() {} +func (*PetSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *PetSetStatus) Reset() { *m = PetSetStatus{} } +func (*PetSetStatus) ProtoMessage() {} +func (*PetSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } func init() { proto.RegisterType((*PetSet)(nil), "k8s.io.kubernetes.pkg.apis.apps.v1alpha1.PetSet") @@ -330,6 +337,62 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *PetSet) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PetSet{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PetSetSpec", "PetSetSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PetSetStatus", "PetSetStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PetSetList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PetSetList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PetSet", "PetSet", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PetSetSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PetSetSpec{`, + `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_kubernetes_pkg_api_unversioned.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_kubernetes_pkg_api_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `VolumeClaimTemplates:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.VolumeClaimTemplates), "PersistentVolumeClaim", "k8s_io_kubernetes_pkg_api_v1.PersistentVolumeClaim", 1), `&`, ``, 1) + `,`, + `ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`, + `}`, + }, "") + return s +} +func (this *PetSetStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PetSetStatus{`, + `ObservedGeneration:` + valueToStringGenerated(this.ObservedGeneration) + `,`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *PetSet) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -967,3 +1030,46 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 609 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x93, 0xcf, 0x6e, 0xd3, 0x40, + 0x10, 0xc6, 0xe3, 0xa4, 0xa9, 0xc2, 0xa6, 0x20, 0xb4, 0x54, 0x28, 0x8a, 0x90, 0x5b, 0xe5, 0x64, + 0xa1, 0x76, 0x4d, 0x0a, 0x45, 0x3d, 0x1b, 0x09, 0x84, 0x04, 0xb4, 0x72, 0xa0, 0x42, 0x20, 0x2a, + 0xad, 0x9d, 0xc1, 0x5d, 0x62, 0x7b, 0x2d, 0xef, 0xda, 0x67, 0x0e, 0x70, 0xe7, 0xcc, 0x63, 0xf0, + 0x08, 0x9c, 0x7a, 0xec, 0x91, 0x53, 0x45, 0xcd, 0x8b, 0x20, 0xaf, 0xff, 0x24, 0x34, 0x49, 0x4b, + 0x6f, 0x99, 0xf5, 0x7c, 0xbf, 0x99, 0xf9, 0x66, 0x82, 0xf6, 0x26, 0x7b, 0x82, 0x30, 0x6e, 0x4e, + 0x12, 0x07, 0xe2, 0x10, 0x24, 0x08, 0x33, 0x9a, 0x78, 0x26, 0x8d, 0x98, 0x30, 0x69, 0x14, 0x09, + 0x33, 0x1d, 0x52, 0x3f, 0x3a, 0xa6, 0x43, 0xd3, 0x83, 0x10, 0x62, 0x2a, 0x61, 0x4c, 0xa2, 0x98, + 0x4b, 0x8e, 0x8d, 0x42, 0x49, 0xa6, 0x4a, 0x12, 0x4d, 0x3c, 0x92, 0x2b, 0x49, 0xae, 0x24, 0x95, + 0xb2, 0xbf, 0xed, 0x31, 0x79, 0x9c, 0x38, 0xc4, 0xe5, 0x81, 0xe9, 0x71, 0x8f, 0x9b, 0x0a, 0xe0, + 0x24, 0x1f, 0x55, 0xa4, 0x02, 0xf5, 0xab, 0x00, 0xf7, 0x77, 0x97, 0xb6, 0x64, 0x26, 0x61, 0x0a, + 0xb1, 0x60, 0x3c, 0x84, 0xf1, 0xc5, 0x7e, 0xfa, 0x5b, 0xcb, 0x65, 0xe9, 0x5c, 0xf7, 0xfd, 0xed, + 0xc5, 0xd9, 0x71, 0x12, 0x4a, 0x16, 0xc0, 0x5c, 0xfa, 0x70, 0x71, 0x7a, 0x22, 0x99, 0x6f, 0xb2, + 0x50, 0x0a, 0x19, 0x5f, 0x94, 0x0c, 0xbe, 0x37, 0xd1, 0xea, 0x01, 0xc8, 0x11, 0x48, 0xfc, 0x16, + 0x75, 0x02, 0x90, 0x74, 0x4c, 0x25, 0xed, 0x69, 0x9b, 0x9a, 0xd1, 0xdd, 0x31, 0xc8, 0x52, 0xf7, + 0x48, 0x3a, 0x24, 0xfb, 0xce, 0x27, 0x70, 0xe5, 0x4b, 0x90, 0xd4, 0xc2, 0x27, 0x67, 0x1b, 0x8d, + 0xec, 0x6c, 0x03, 0x4d, 0xdf, 0xec, 0x9a, 0x86, 0x0f, 0xd1, 0x8a, 0x88, 0xc0, 0xed, 0x35, 0x15, + 0xf5, 0x11, 0xf9, 0xdf, 0x9d, 0x90, 0xa2, 0xb3, 0x51, 0x04, 0xae, 0xb5, 0x56, 0x56, 0x58, 0xc9, + 0x23, 0x5b, 0xf1, 0xf0, 0x11, 0x5a, 0x15, 0x92, 0xca, 0x44, 0xf4, 0x5a, 0x8a, 0xfc, 0xf8, 0xda, + 0x64, 0xa5, 0xb6, 0x6e, 0x95, 0xec, 0xd5, 0x22, 0xb6, 0x4b, 0xea, 0xe0, 0xa7, 0x86, 0x50, 0x91, + 0xf8, 0x82, 0x09, 0x89, 0x3f, 0xcc, 0x19, 0x64, 0x5e, 0x62, 0xd0, 0xcc, 0x15, 0x90, 0x5c, 0xae, + 0x7c, 0xba, 0x5d, 0x56, 0xea, 0x54, 0x2f, 0x33, 0x2e, 0xbd, 0x41, 0x6d, 0x26, 0x21, 0x10, 0xbd, + 0xe6, 0x66, 0xcb, 0xe8, 0xee, 0x3c, 0xb8, 0xee, 0x30, 0xd6, 0xcd, 0x12, 0xde, 0x7e, 0x9e, 0x63, + 0xec, 0x82, 0x36, 0xf8, 0xd1, 0xaa, 0x86, 0xc8, 0x9d, 0xc3, 0x06, 0xea, 0xc4, 0x10, 0xf9, 0xcc, + 0xa5, 0x42, 0x0d, 0xd1, 0xb6, 0xd6, 0xf2, 0x7e, 0xec, 0xf2, 0xcd, 0xae, 0xbf, 0xe2, 0x23, 0xd4, + 0x11, 0xe0, 0x83, 0x2b, 0x79, 0x7c, 0xf5, 0xe6, 0xfe, 0x1d, 0x97, 0x3a, 0xe0, 0x8f, 0x4a, 0x6d, + 0xc1, 0xaf, 0x22, 0xbb, 0x66, 0xe2, 0xf7, 0xa8, 0x23, 0x21, 0x88, 0x7c, 0x2a, 0xa1, 0xdc, 0xdf, + 0xf6, 0xe5, 0xf7, 0x76, 0xc0, 0xc7, 0xaf, 0x4b, 0x81, 0x3a, 0x89, 0xda, 0xcc, 0xea, 0xd5, 0xae, + 0x81, 0xf8, 0xab, 0x86, 0xd6, 0x53, 0xee, 0x27, 0x01, 0x3c, 0xf1, 0x29, 0x0b, 0xaa, 0x0c, 0xd1, + 0x5b, 0x51, 0xe6, 0x3e, 0xbc, 0xa2, 0x52, 0x3e, 0x8a, 0x90, 0x10, 0xca, 0xc3, 0x29, 0xc3, 0xba, + 0x57, 0xd6, 0x5b, 0x3f, 0x5c, 0x00, 0xb6, 0x17, 0x96, 0xc3, 0xbb, 0xa8, 0x2b, 0x20, 0x4e, 0x99, + 0x0b, 0xaf, 0x68, 0x00, 0xbd, 0xf6, 0xa6, 0x66, 0xdc, 0xb0, 0xee, 0x94, 0xa0, 0xee, 0x68, 0xfa, + 0xc9, 0x9e, 0xcd, 0x1b, 0x7c, 0xd1, 0xd0, 0xda, 0xec, 0x89, 0xe2, 0xa7, 0x08, 0x73, 0x27, 0xcf, + 0x80, 0xf1, 0xb3, 0xe2, 0x2f, 0xcc, 0x78, 0xa8, 0x16, 0xd8, 0xb2, 0xee, 0x66, 0x67, 0x1b, 0x78, + 0x7f, 0xee, 0xab, 0xbd, 0x40, 0x81, 0xb7, 0x66, 0xd6, 0xdf, 0x54, 0xeb, 0xaf, 0x5d, 0x9c, 0x3f, + 0x01, 0xeb, 0xfe, 0xc9, 0xb9, 0xde, 0x38, 0x3d, 0xd7, 0x1b, 0xbf, 0xce, 0xf5, 0xc6, 0xe7, 0x4c, + 0xd7, 0x4e, 0x32, 0x5d, 0x3b, 0xcd, 0x74, 0xed, 0x77, 0xa6, 0x6b, 0xdf, 0xfe, 0xe8, 0x8d, 0x77, + 0x9d, 0xea, 0x08, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x3d, 0x2c, 0xb6, 0xf1, 0xa4, 0x05, 0x00, + 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/generated.proto index ffb6e2ed..b9c56067 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ package k8s.io.kubernetes.pkg.apis.apps.v1alpha1; import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". @@ -64,7 +65,7 @@ message PetSetSpec { // Selector is a label query over pods that should match the replica count. // If empty, defaulted to labels on the pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors optional k8s.io.kubernetes.pkg.api.unversioned.LabelSelector selector = 2; // Template is the object that describes the pod that will be created if diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/register.go index 9ab37dfb..90f9bd1c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,14 +29,13 @@ const GroupName = "apps" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &PetSet{}, &PetSetList{}, @@ -44,6 +43,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } func (obj *PetSet) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/types.go index fb0aa48a..3f48ced1 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -51,7 +51,7 @@ type PetSetSpec struct { // Selector is a label query over pods that should match the replica count. // If empty, defaulted to labels on the pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *unversioned.LabelSelector `json:"selector,omitempty" protobuf:"bytes,2,opt,name=selector"` // Template is the object that describes the pod that will be created if diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/types_swagger_doc_generated.go index 8ce682b4..66adf160 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -48,7 +48,7 @@ func (PetSetList) SwaggerDoc() map[string]string { var map_PetSetSpec = map[string]string{ "": "A PetSetSpec is the specification of a PetSet.", "replicas": "Replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", - "selector": "Selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", + "selector": "Selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the PetSet will fulfill this Template, but have a unique identity from the rest of the PetSet.", "volumeClaimTemplates": "VolumeClaimTemplates is a list of claims that pets are allowed to reference. The PetSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pet. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", "serviceName": "ServiceName is the name of the service that governs this PetSet. This service must exist before the PetSet, and is responsible for the network identity of the set. Pets get DNS/hostnames that follow the pattern: pet-specific-string.serviceName.default.svc.cluster.local where \"pet-specific-string\" is managed by the PetSet controller.", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/zz_generated.conversion.go similarity index 93% rename from vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/conversion_generated.go rename to vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/zz_generated.conversion.go index cfd6ce44..767eff72 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,10 +24,17 @@ import ( api "k8s.io/kubernetes/pkg/api" apps "k8s.io/kubernetes/pkg/apis/apps" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1alpha1_PetSet_To_apps_PetSet, Convert_apps_PetSet_To_v1alpha1_PetSet, Convert_v1alpha1_PetSetList_To_apps_PetSetList, @@ -36,10 +43,7 @@ func init() { Convert_apps_PetSetSpec_To_v1alpha1_PetSetSpec, Convert_v1alpha1_PetSetStatus_To_apps_PetSetStatus, Convert_apps_PetSetStatus_To_v1alpha1_PetSetStatus, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v1alpha1_PetSet_To_apps_PetSet(in *PetSet, out *apps.PetSet, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..3d80b706 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,138 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1alpha1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PetSet, InType: reflect.TypeOf(&PetSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PetSetList, InType: reflect.TypeOf(&PetSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PetSetSpec, InType: reflect.TypeOf(&PetSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PetSetStatus, InType: reflect.TypeOf(&PetSetStatus{})}, + ) +} + +func DeepCopy_v1alpha1_PetSet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PetSet) + out := out.(*PetSet) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1alpha1_PetSetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1alpha1_PetSetStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1alpha1_PetSetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PetSetList) + out := out.(*PetSetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PetSet, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_PetSet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_PetSetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PetSetSpec) + out := out.(*PetSetSpec) + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } else { + out.Replicas = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := v1.DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + if in.VolumeClaimTemplates != nil { + in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates + *out = make([]v1.PersistentVolumeClaim, len(*in)) + for i := range *in { + if err := v1.DeepCopy_v1_PersistentVolumeClaim(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.VolumeClaimTemplates = nil + } + out.ServiceName = in.ServiceName + return nil + } +} + +func DeepCopy_v1alpha1_PetSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PetSetStatus) + out := out.(*PetSetStatus) + if in.ObservedGeneration != nil { + in, out := &in.ObservedGeneration, &out.ObservedGeneration + *out = new(int64) + **out = **in + } else { + out.ObservedGeneration = nil + } + out.Replicas = in.Replicas + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/apps/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/apps/zz_generated.deepcopy.go new file mode 100644 index 00000000..ecd6db61 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/apps/zz_generated.deepcopy.go @@ -0,0 +1,132 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package apps + +import ( + api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_apps_PetSet, InType: reflect.TypeOf(&PetSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_apps_PetSetList, InType: reflect.TypeOf(&PetSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_apps_PetSetSpec, InType: reflect.TypeOf(&PetSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_apps_PetSetStatus, InType: reflect.TypeOf(&PetSetStatus{})}, + ) +} + +func DeepCopy_apps_PetSet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PetSet) + out := out.(*PetSet) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_apps_PetSetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_apps_PetSetStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_apps_PetSetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PetSetList) + out := out.(*PetSetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PetSet, len(*in)) + for i := range *in { + if err := DeepCopy_apps_PetSet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_apps_PetSetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PetSetSpec) + out := out.(*PetSetSpec) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + if in.VolumeClaimTemplates != nil { + in, out := &in.VolumeClaimTemplates, &out.VolumeClaimTemplates + *out = make([]api.PersistentVolumeClaim, len(*in)) + for i := range *in { + if err := api.DeepCopy_api_PersistentVolumeClaim(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.VolumeClaimTemplates = nil + } + out.ServiceName = in.ServiceName + return nil + } +} + +func DeepCopy_apps_PetSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PetSetStatus) + out := out.(*PetSetStatus) + if in.ObservedGeneration != nil { + in, out := &in.ObservedGeneration, &out.ObservedGeneration + *out = new(int64) + **out = **in + } else { + out.ObservedGeneration = nil + } + out.Replicas = in.Replicas + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/deep_copy_generated.go deleted file mode 100644 index 75ac7281..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/deep_copy_generated.go +++ /dev/null @@ -1,91 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package authentication - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_authenticationk8sio_TokenReview, - DeepCopy_authenticationk8sio_TokenReviewSpec, - DeepCopy_authenticationk8sio_TokenReviewStatus, - DeepCopy_authenticationk8sio_UserInfo, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_authenticationk8sio_TokenReview(in TokenReview, out *TokenReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_authenticationk8sio_TokenReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_authenticationk8sio_TokenReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_authenticationk8sio_TokenReviewSpec(in TokenReviewSpec, out *TokenReviewSpec, c *conversion.Cloner) error { - out.Token = in.Token - return nil -} - -func DeepCopy_authenticationk8sio_TokenReviewStatus(in TokenReviewStatus, out *TokenReviewStatus, c *conversion.Cloner) error { - out.Authenticated = in.Authenticated - if err := DeepCopy_authenticationk8sio_UserInfo(in.User, &out.User, c); err != nil { - return err - } - return nil -} - -func DeepCopy_authenticationk8sio_UserInfo(in UserInfo, out *UserInfo, c *conversion.Cloner) error { - out.Username = in.Username - out.UID = in.UID - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Groups = nil - } - if in.Extra != nil { - in, out := in.Extra, &out.Extra - *out = make(map[string][]string) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.([]string) - } - } - } else { - out.Extra = nil - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/conversion_generated.go deleted file mode 100644 index 9972f82e..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/conversion_generated.go +++ /dev/null @@ -1,143 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by conversion-gen. Do not edit it manually! - -package v1beta1 - -import ( - api "k8s.io/kubernetes/pkg/api" - authentication_k8s_io "k8s.io/kubernetes/pkg/apis/authentication.k8s.io" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( - Convert_v1beta1_TokenReview_To_authenticationk8sio_TokenReview, - Convert_authenticationk8sio_TokenReview_To_v1beta1_TokenReview, - Convert_v1beta1_TokenReviewSpec_To_authenticationk8sio_TokenReviewSpec, - Convert_authenticationk8sio_TokenReviewSpec_To_v1beta1_TokenReviewSpec, - Convert_v1beta1_TokenReviewStatus_To_authenticationk8sio_TokenReviewStatus, - Convert_authenticationk8sio_TokenReviewStatus_To_v1beta1_TokenReviewStatus, - Convert_v1beta1_UserInfo_To_authenticationk8sio_UserInfo, - Convert_authenticationk8sio_UserInfo_To_v1beta1_UserInfo, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } -} - -func autoConvert_v1beta1_TokenReview_To_authenticationk8sio_TokenReview(in *TokenReview, out *authentication_k8s_io.TokenReview, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - if err := Convert_v1beta1_TokenReviewSpec_To_authenticationk8sio_TokenReviewSpec(&in.Spec, &out.Spec, s); err != nil { - return err - } - if err := Convert_v1beta1_TokenReviewStatus_To_authenticationk8sio_TokenReviewStatus(&in.Status, &out.Status, s); err != nil { - return err - } - return nil -} - -func Convert_v1beta1_TokenReview_To_authenticationk8sio_TokenReview(in *TokenReview, out *authentication_k8s_io.TokenReview, s conversion.Scope) error { - return autoConvert_v1beta1_TokenReview_To_authenticationk8sio_TokenReview(in, out, s) -} - -func autoConvert_authenticationk8sio_TokenReview_To_v1beta1_TokenReview(in *authentication_k8s_io.TokenReview, out *TokenReview, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - if err := Convert_authenticationk8sio_TokenReviewSpec_To_v1beta1_TokenReviewSpec(&in.Spec, &out.Spec, s); err != nil { - return err - } - if err := Convert_authenticationk8sio_TokenReviewStatus_To_v1beta1_TokenReviewStatus(&in.Status, &out.Status, s); err != nil { - return err - } - return nil -} - -func Convert_authenticationk8sio_TokenReview_To_v1beta1_TokenReview(in *authentication_k8s_io.TokenReview, out *TokenReview, s conversion.Scope) error { - return autoConvert_authenticationk8sio_TokenReview_To_v1beta1_TokenReview(in, out, s) -} - -func autoConvert_v1beta1_TokenReviewSpec_To_authenticationk8sio_TokenReviewSpec(in *TokenReviewSpec, out *authentication_k8s_io.TokenReviewSpec, s conversion.Scope) error { - out.Token = in.Token - return nil -} - -func Convert_v1beta1_TokenReviewSpec_To_authenticationk8sio_TokenReviewSpec(in *TokenReviewSpec, out *authentication_k8s_io.TokenReviewSpec, s conversion.Scope) error { - return autoConvert_v1beta1_TokenReviewSpec_To_authenticationk8sio_TokenReviewSpec(in, out, s) -} - -func autoConvert_authenticationk8sio_TokenReviewSpec_To_v1beta1_TokenReviewSpec(in *authentication_k8s_io.TokenReviewSpec, out *TokenReviewSpec, s conversion.Scope) error { - out.Token = in.Token - return nil -} - -func Convert_authenticationk8sio_TokenReviewSpec_To_v1beta1_TokenReviewSpec(in *authentication_k8s_io.TokenReviewSpec, out *TokenReviewSpec, s conversion.Scope) error { - return autoConvert_authenticationk8sio_TokenReviewSpec_To_v1beta1_TokenReviewSpec(in, out, s) -} - -func autoConvert_v1beta1_TokenReviewStatus_To_authenticationk8sio_TokenReviewStatus(in *TokenReviewStatus, out *authentication_k8s_io.TokenReviewStatus, s conversion.Scope) error { - out.Authenticated = in.Authenticated - if err := Convert_v1beta1_UserInfo_To_authenticationk8sio_UserInfo(&in.User, &out.User, s); err != nil { - return err - } - return nil -} - -func Convert_v1beta1_TokenReviewStatus_To_authenticationk8sio_TokenReviewStatus(in *TokenReviewStatus, out *authentication_k8s_io.TokenReviewStatus, s conversion.Scope) error { - return autoConvert_v1beta1_TokenReviewStatus_To_authenticationk8sio_TokenReviewStatus(in, out, s) -} - -func autoConvert_authenticationk8sio_TokenReviewStatus_To_v1beta1_TokenReviewStatus(in *authentication_k8s_io.TokenReviewStatus, out *TokenReviewStatus, s conversion.Scope) error { - out.Authenticated = in.Authenticated - if err := Convert_authenticationk8sio_UserInfo_To_v1beta1_UserInfo(&in.User, &out.User, s); err != nil { - return err - } - return nil -} - -func Convert_authenticationk8sio_TokenReviewStatus_To_v1beta1_TokenReviewStatus(in *authentication_k8s_io.TokenReviewStatus, out *TokenReviewStatus, s conversion.Scope) error { - return autoConvert_authenticationk8sio_TokenReviewStatus_To_v1beta1_TokenReviewStatus(in, out, s) -} - -func autoConvert_v1beta1_UserInfo_To_authenticationk8sio_UserInfo(in *UserInfo, out *authentication_k8s_io.UserInfo, s conversion.Scope) error { - out.Username = in.Username - out.UID = in.UID - out.Groups = in.Groups - out.Extra = in.Extra - return nil -} - -func Convert_v1beta1_UserInfo_To_authenticationk8sio_UserInfo(in *UserInfo, out *authentication_k8s_io.UserInfo, s conversion.Scope) error { - return autoConvert_v1beta1_UserInfo_To_authenticationk8sio_UserInfo(in, out, s) -} - -func autoConvert_authenticationk8sio_UserInfo_To_v1beta1_UserInfo(in *authentication_k8s_io.UserInfo, out *UserInfo, s conversion.Scope) error { - out.Username = in.Username - out.UID = in.UID - out.Groups = in.Groups - out.Extra = in.Extra - return nil -} - -func Convert_authenticationk8sio_UserInfo_To_v1beta1_UserInfo(in *authentication_k8s_io.UserInfo, out *UserInfo, s conversion.Scope) error { - return autoConvert_authenticationk8sio_UserInfo_To_v1beta1_UserInfo(in, out, s) -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/deep_copy_generated.go deleted file mode 100644 index e44dfc86..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/deep_copy_generated.go +++ /dev/null @@ -1,91 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1beta1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1beta1_TokenReview, - DeepCopy_v1beta1_TokenReviewSpec, - DeepCopy_v1beta1_TokenReviewStatus, - DeepCopy_v1beta1_UserInfo, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1beta1_TokenReview(in TokenReview, out *TokenReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_TokenReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_TokenReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_TokenReviewSpec(in TokenReviewSpec, out *TokenReviewSpec, c *conversion.Cloner) error { - out.Token = in.Token - return nil -} - -func DeepCopy_v1beta1_TokenReviewStatus(in TokenReviewStatus, out *TokenReviewStatus, c *conversion.Cloner) error { - out.Authenticated = in.Authenticated - if err := DeepCopy_v1beta1_UserInfo(in.User, &out.User, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_UserInfo(in UserInfo, out *UserInfo, c *conversion.Cloner) error { - out.Username = in.Username - out.UID = in.UID - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Groups = nil - } - if in.Extra != nil { - in, out := in.Extra, &out.Extra - *out = make(map[string][]string) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.([]string) - } - } - } else { - out.Extra = nil - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/doc.go new file mode 100644 index 00000000..7a8a65b7 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register +// +groupName=authentication.k8s.io +package authentication diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/install/install.go similarity index 89% rename from vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install/install.go rename to vendor/k8s.io/kubernetes/pkg/apis/authentication/install/install.go index 29447d21..7ad9d349 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,13 +28,13 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apimachinery" "k8s.io/kubernetes/pkg/apimachinery/registered" - "k8s.io/kubernetes/pkg/apis/authentication.k8s.io" - "k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1" + "k8s.io/kubernetes/pkg/apis/authentication" + "k8s.io/kubernetes/pkg/apis/authentication/v1beta1" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/sets" ) -const importPrefix = "k8s.io/kubernetes/pkg/apis/authentication.k8s.io" +const importPrefix = "k8s.io/kubernetes/pkg/apis/authentication" var accessor = meta.NewAccessor() @@ -89,7 +89,10 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error { func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - authentication.AddToScheme(api.Scheme) + if err := authentication.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -98,7 +101,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1beta1.SchemeGroupVersion: - v1beta1.AddToScheme(api.Scheme) + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/register.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/register.go similarity index 72% rename from vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/register.go rename to vendor/k8s.io/kubernetes/pkg/apis/authentication/register.go index 4dda3140..09384b19 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ limitations under the License. package authentication import ( + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/runtime" ) @@ -27,24 +28,28 @@ const GroupName = "authentication.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, + &api.ListOptions{}, + &api.DeleteOptions{}, + &api.ExportOptions{}, + &TokenReview{}, ) + return nil } - -func (obj *TokenReview) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/types.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/types.go similarity index 59% rename from vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/types.go rename to vendor/k8s.io/kubernetes/pkg/apis/authentication/types.go index 02ec0d2b..16d7e8c2 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,12 +17,35 @@ limitations under the License. package authentication import ( + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" ) +const ( + // ImpersonateUserHeader is used to impersonate a particular user during an API server request + ImpersonateUserHeader = "Impersonate-User" + + // ImpersonateGroupHeader is used to impersonate a particular group during an API server request. + // It can be repeated multiplied times for multiple groups. + ImpersonateGroupHeader = "Impersonate-Group" + + // ImpersonateUserExtraHeaderPrefix is a prefix for any header used to impersonate an entry in the + // extra map[string][]string for user.Info. The key will be every after the prefix. + // It can be repeated multiplied times for multiple map keys and the same key can be repeated multiple + // times to have multiple elements in the slice under a single key + ImpersonateUserExtraHeaderPrefix = "Impersonate-Extra-" +) + +// +genclient=true +// +nonNamespaced=true +// +noMethods=true + // TokenReview attempts to authenticate a token to a known user. type TokenReview struct { unversioned.TypeMeta + // ObjectMeta fulfills the meta.ObjectMetaAccessor interface so that the stock + // REST handler paths work + api.ObjectMeta // Spec holds information about the request being evaluated Spec TokenReviewSpec @@ -38,11 +61,14 @@ type TokenReviewSpec struct { } // TokenReviewStatus is the result of the token authentication request. +// This type mirrors the authentication.Token interface type TokenReviewStatus struct { // Authenticated indicates that the token was associated with a known user. Authenticated bool // User is the UserInfo associated with the provided token. User UserInfo + // Error indicates that the token couldn't be checked + Error string } // UserInfo holds the information about the user needed to implement the @@ -57,5 +83,8 @@ type UserInfo struct { // The names of groups this user is a part of. Groups []string // Any additional information provided by the authenticator. - Extra map[string][]string + Extra map[string]ExtraValue } + +// ExtraValue masks the value so protobuf can generate +type ExtraValue []string diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/conversion.go similarity index 71% rename from vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/conversion.go rename to vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/conversion.go index 6a8545d1..a0b7051c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,11 +20,7 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions - err := scheme.AddConversionFuncs() - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + return scheme.AddConversionFuncs() } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/defaults.go similarity index 81% rename from vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/defaults.go rename to vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/defaults.go index 0f3732e3..bcd5e07d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,6 +20,6 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs() +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs() } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/doc.go new file mode 100644 index 00000000..32e5b552 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/authentication +// +groupName=authentication.k8s.io +package v1beta1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.pb.go new file mode 100644 index 00000000..30104031 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.pb.go @@ -0,0 +1,1280 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.proto +// DO NOT EDIT! + +/* + Package v1beta1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.proto + + It has these top-level messages: + ExtraValue + TokenReview + TokenReviewSpec + TokenReviewStatus + UserInfo +*/ +package v1beta1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *ExtraValue) Reset() { *m = ExtraValue{} } +func (*ExtraValue) ProtoMessage() {} +func (*ExtraValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *TokenReview) Reset() { *m = TokenReview{} } +func (*TokenReview) ProtoMessage() {} +func (*TokenReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *TokenReviewSpec) Reset() { *m = TokenReviewSpec{} } +func (*TokenReviewSpec) ProtoMessage() {} +func (*TokenReviewSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *TokenReviewStatus) Reset() { *m = TokenReviewStatus{} } +func (*TokenReviewStatus) ProtoMessage() {} +func (*TokenReviewStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *UserInfo) Reset() { *m = UserInfo{} } +func (*UserInfo) ProtoMessage() {} +func (*UserInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func init() { + proto.RegisterType((*ExtraValue)(nil), "k8s.io.kubernetes.pkg.apis.authentication.v1beta1.ExtraValue") + proto.RegisterType((*TokenReview)(nil), "k8s.io.kubernetes.pkg.apis.authentication.v1beta1.TokenReview") + proto.RegisterType((*TokenReviewSpec)(nil), "k8s.io.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewSpec") + proto.RegisterType((*TokenReviewStatus)(nil), "k8s.io.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewStatus") + proto.RegisterType((*UserInfo)(nil), "k8s.io.kubernetes.pkg.apis.authentication.v1beta1.UserInfo") +} +func (m ExtraValue) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m ExtraValue) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m) > 0 { + for _, s := range m { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *TokenReview) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *TokenReview) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n2, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n3, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n3 + return i, nil +} + +func (m *TokenReviewSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *TokenReviewSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Token))) + i += copy(data[i:], m.Token) + return i, nil +} + +func (m *TokenReviewStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *TokenReviewStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + if m.Authenticated { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.User.Size())) + n4, err := m.User.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n4 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Error))) + i += copy(data[i:], m.Error) + return i, nil +} + +func (m *UserInfo) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *UserInfo) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Username))) + i += copy(data[i:], m.Username) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.UID))) + i += copy(data[i:], m.UID) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + data[i] = 0x1a + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.Extra) > 0 { + for k := range m.Extra { + data[i] = 0x22 + i++ + v := m.Extra[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n5, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n5 + } + } + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m ExtraValue) Size() (n int) { + var l int + _ = l + if len(m) > 0 { + for _, s := range m { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *TokenReview) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TokenReviewSpec) Size() (n int) { + var l int + _ = l + l = len(m.Token) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *TokenReviewStatus) Size() (n int) { + var l int + _ = l + n += 2 + l = m.User.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Error) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *UserInfo) Size() (n int) { + var l int + _ = l + l = len(m.Username) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Extra) > 0 { + for k, v := range m.Extra { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *TokenReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TokenReview{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "TokenReviewSpec", "TokenReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "TokenReviewStatus", "TokenReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *TokenReviewSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TokenReviewSpec{`, + `Token:` + fmt.Sprintf("%v", this.Token) + `,`, + `}`, + }, "") + return s +} +func (this *TokenReviewStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TokenReviewStatus{`, + `Authenticated:` + fmt.Sprintf("%v", this.Authenticated) + `,`, + `User:` + strings.Replace(strings.Replace(this.User.String(), "UserInfo", "UserInfo", 1), `&`, ``, 1) + `,`, + `Error:` + fmt.Sprintf("%v", this.Error) + `,`, + `}`, + }, "") + return s +} +func (this *UserInfo) String() string { + if this == nil { + return "nil" + } + keysForExtra := make([]string, 0, len(this.Extra)) + for k := range this.Extra { + keysForExtra = append(keysForExtra, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) + mapStringForExtra := "map[string]ExtraValue{" + for _, k := range keysForExtra { + mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) + } + mapStringForExtra += "}" + s := strings.Join([]string{`&UserInfo{`, + `Username:` + fmt.Sprintf("%v", this.Username) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `Extra:` + mapStringForExtra + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *ExtraValue) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExtraValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExtraValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + *m = append(*m, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TokenReview) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TokenReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TokenReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TokenReviewSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TokenReviewSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TokenReviewSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Token", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Token = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TokenReviewStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TokenReviewStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TokenReviewStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Authenticated", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Authenticated = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.User.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Error = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UserInfo) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UserInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UserInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Username = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Extra", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &ExtraValue{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Extra == nil { + m.Extra = make(map[string]ExtraValue) + } + m.Extra[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 629 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x53, 0xcb, 0x6e, 0xd3, 0x40, + 0x14, 0xb5, 0xf3, 0x28, 0xc9, 0x84, 0x42, 0x19, 0x09, 0x29, 0x8a, 0x84, 0x13, 0x85, 0x4d, 0x90, + 0xda, 0xb1, 0x52, 0x09, 0xa8, 0x5a, 0xb1, 0xa8, 0xd5, 0x82, 0xba, 0x40, 0x48, 0x53, 0x8a, 0x10, + 0x12, 0x8b, 0x49, 0x72, 0xeb, 0x1a, 0x37, 0x1e, 0x6b, 0x3c, 0x93, 0xd2, 0x5d, 0x3f, 0x81, 0x25, + 0x4b, 0xfe, 0x83, 0x1f, 0xe8, 0xb2, 0x0b, 0x16, 0x2c, 0x50, 0x45, 0xc2, 0x8f, 0xa0, 0x19, 0x0f, + 0x4d, 0xfa, 0x5a, 0xd0, 0xee, 0x3c, 0xe7, 0x9e, 0x7b, 0xce, 0x7d, 0xf8, 0xa2, 0xf5, 0x78, 0x25, + 0x23, 0x11, 0xf7, 0x63, 0xd5, 0x03, 0x91, 0x80, 0x84, 0xcc, 0x4f, 0xe3, 0xd0, 0x67, 0x69, 0x94, + 0xf9, 0x4c, 0xc9, 0x3d, 0x48, 0x64, 0xd4, 0x67, 0x32, 0xe2, 0x89, 0x3f, 0xea, 0xf6, 0x40, 0xb2, + 0xae, 0x1f, 0x42, 0x02, 0x82, 0x49, 0x18, 0x90, 0x54, 0x70, 0xc9, 0x71, 0x37, 0x97, 0x20, 0x53, + 0x09, 0x92, 0xc6, 0x21, 0xd1, 0x12, 0xe4, 0xbc, 0x04, 0xb1, 0x12, 0x8d, 0xa5, 0x30, 0x92, 0x7b, + 0xaa, 0x47, 0xfa, 0x7c, 0xe8, 0x87, 0x3c, 0xe4, 0xbe, 0x51, 0xea, 0xa9, 0x5d, 0xf3, 0x32, 0x0f, + 0xf3, 0x95, 0x3b, 0x34, 0x9e, 0x5e, 0x5b, 0xa4, 0xaf, 0x92, 0x11, 0x88, 0x2c, 0xe2, 0x09, 0x0c, + 0x2e, 0x16, 0xd6, 0x58, 0xbc, 0x3e, 0x6d, 0x74, 0xa9, 0x8d, 0xc6, 0xd2, 0xd5, 0x6c, 0xa1, 0x12, + 0x19, 0x0d, 0xe1, 0x12, 0xbd, 0x7b, 0x35, 0x5d, 0xc9, 0x68, 0xdf, 0x8f, 0x12, 0x99, 0x49, 0x71, + 0x31, 0xa5, 0xfd, 0x1c, 0xa1, 0xcd, 0xcf, 0x52, 0xb0, 0x77, 0x6c, 0x5f, 0x01, 0x6e, 0xa2, 0x72, + 0x24, 0x61, 0x98, 0xd5, 0xdd, 0x56, 0xb1, 0x53, 0x0d, 0xaa, 0x93, 0xd3, 0x66, 0x79, 0x4b, 0x03, + 0x34, 0xc7, 0x57, 0x2b, 0x5f, 0xbf, 0x35, 0x9d, 0xa3, 0x5f, 0x2d, 0xa7, 0xfd, 0xbd, 0x80, 0x6a, + 0x6f, 0x79, 0x0c, 0x09, 0x85, 0x51, 0x04, 0x07, 0xf8, 0x3d, 0xaa, 0x0c, 0x41, 0xb2, 0x01, 0x93, + 0xac, 0xee, 0xb6, 0xdc, 0x4e, 0x6d, 0xb9, 0x43, 0xae, 0x5d, 0x02, 0x19, 0x75, 0xc9, 0x9b, 0xde, + 0x27, 0xe8, 0xcb, 0xd7, 0x20, 0x59, 0x80, 0x8f, 0x4f, 0x9b, 0xce, 0xe4, 0xb4, 0x89, 0xa6, 0x18, + 0x3d, 0x53, 0xc3, 0x03, 0x54, 0xca, 0x52, 0xe8, 0xd7, 0x0b, 0x46, 0x35, 0x20, 0xff, 0xbd, 0x5a, + 0x32, 0x53, 0xe7, 0x76, 0x0a, 0xfd, 0xe0, 0xae, 0xf5, 0x2b, 0xe9, 0x17, 0x35, 0xea, 0x78, 0x1f, + 0xcd, 0x65, 0x92, 0x49, 0x95, 0xd5, 0x8b, 0xc6, 0x67, 0xe3, 0x96, 0x3e, 0x46, 0x2b, 0xb8, 0x67, + 0x9d, 0xe6, 0xf2, 0x37, 0xb5, 0x1e, 0xed, 0x67, 0xe8, 0xfe, 0x85, 0xa2, 0xf0, 0x63, 0x54, 0x96, + 0x1a, 0x32, 0xd3, 0xab, 0x06, 0xf3, 0x36, 0xb3, 0x9c, 0xf3, 0xf2, 0x58, 0xfb, 0x87, 0x8b, 0x1e, + 0x5c, 0x72, 0xc1, 0x6b, 0x68, 0x7e, 0xa6, 0x22, 0x18, 0x18, 0x89, 0x4a, 0xf0, 0xd0, 0x4a, 0xcc, + 0xaf, 0xcf, 0x06, 0xe9, 0x79, 0x2e, 0xfe, 0x88, 0x4a, 0x2a, 0x03, 0x61, 0xc7, 0xbb, 0x76, 0x83, + 0xb6, 0x77, 0x32, 0x10, 0x5b, 0xc9, 0x2e, 0x9f, 0xce, 0x55, 0x23, 0xd4, 0xc8, 0xea, 0xb6, 0x40, + 0x08, 0x2e, 0xcc, 0x58, 0x67, 0xda, 0xda, 0xd4, 0x20, 0xcd, 0x63, 0xed, 0x71, 0x01, 0x55, 0xfe, + 0xa9, 0xe0, 0x45, 0x54, 0xd1, 0x99, 0x09, 0x1b, 0x82, 0x9d, 0xc5, 0x82, 0x4d, 0x32, 0x1c, 0x8d, + 0xd3, 0x33, 0x06, 0x7e, 0x84, 0x8a, 0x2a, 0x1a, 0x98, 0xea, 0xab, 0x41, 0xcd, 0x12, 0x8b, 0x3b, + 0x5b, 0x1b, 0x54, 0xe3, 0xb8, 0x8d, 0xe6, 0x42, 0xc1, 0x55, 0xaa, 0xd7, 0xaa, 0x7f, 0x69, 0xa4, + 0x97, 0xf1, 0xca, 0x20, 0xd4, 0x46, 0x70, 0x8c, 0xca, 0xa0, 0x6f, 0xa0, 0x5e, 0x6a, 0x15, 0x3b, + 0xb5, 0xe5, 0x97, 0xb7, 0x18, 0x01, 0x31, 0xc7, 0xb4, 0x99, 0x48, 0x71, 0x38, 0xd3, 0xaa, 0xc6, + 0x68, 0xee, 0xd1, 0x38, 0xb0, 0x07, 0x67, 0x38, 0x78, 0x01, 0x15, 0x63, 0x38, 0xcc, 0xdb, 0xa4, + 0xfa, 0x13, 0x6f, 0xa3, 0xf2, 0x48, 0xdf, 0xa2, 0xdd, 0xc7, 0x8b, 0x1b, 0x14, 0x33, 0x3d, 0x68, + 0x9a, 0x6b, 0xad, 0x16, 0x56, 0xdc, 0xe0, 0xc9, 0xf1, 0xd8, 0x73, 0x4e, 0xc6, 0x9e, 0xf3, 0x73, + 0xec, 0x39, 0x47, 0x13, 0xcf, 0x3d, 0x9e, 0x78, 0xee, 0xc9, 0xc4, 0x73, 0x7f, 0x4f, 0x3c, 0xf7, + 0xcb, 0x1f, 0xcf, 0xf9, 0x70, 0xc7, 0x0a, 0xfc, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x1c, 0xe4, 0x15, + 0xbe, 0x81, 0x05, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.proto new file mode 100644 index 00000000..3b775d26 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/generated.proto @@ -0,0 +1,89 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.apis.authentication.v1beta1; + +import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; +import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// ExtraValue masks the value so protobuf can generate +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message ExtraValue { + // items, if empty, will result in an empty slice + + repeated string items = 1; +} + +// TokenReview attempts to authenticate a token to a known user. +// Note: TokenReview requests may be cached by the webhook token authenticator +// plugin in the kube-apiserver. +message TokenReview { + optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; + + // Spec holds information about the request being evaluated + optional TokenReviewSpec spec = 2; + + // Status is filled in by the server and indicates whether the request can be authenticated. + optional TokenReviewStatus status = 3; +} + +// TokenReviewSpec is a description of the token authentication request. +message TokenReviewSpec { + // Token is the opaque bearer token. + optional string token = 1; +} + +// TokenReviewStatus is the result of the token authentication request. +message TokenReviewStatus { + // Authenticated indicates that the token was associated with a known user. + optional bool authenticated = 1; + + // User is the UserInfo associated with the provided token. + optional UserInfo user = 2; + + // Error indicates that the token couldn't be checked + optional string error = 3; +} + +// UserInfo holds the information about the user needed to implement the +// user.Info interface. +message UserInfo { + // The name that uniquely identifies this user among all active users. + optional string username = 1; + + // A unique value that identifies this user across time. If this user is + // deleted and another user by the same name is added, they will have + // different UIDs. + optional string uid = 2; + + // The names of groups this user is a part of. + repeated string groups = 3; + + // Any additional information provided by the authenticator. + map extra = 4; +} + diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/register.go similarity index 74% rename from vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/register.go rename to vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/register.go index e183299c..53488da1 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package v1beta1 import ( "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/runtime" ) @@ -27,18 +28,19 @@ const GroupName = "authentication.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, + &v1.ListOptions{}, + &v1.DeleteOptions{}, + &v1.ExportOptions{}, + &TokenReview{}, ) + return nil } - -func (obj *TokenReview) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/types.go similarity index 58% rename from vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/types.go rename to vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/types.go index fc136877..fadd637a 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authentication.k8s.io/v1beta1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,47 +17,66 @@ limitations under the License. package v1beta1 import ( + "fmt" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" ) +// +genclient=true +// +nonNamespaced=true +// +noMethods=true + // TokenReview attempts to authenticate a token to a known user. // Note: TokenReview requests may be cached by the webhook token authenticator // plugin in the kube-apiserver. type TokenReview struct { unversioned.TypeMeta `json:",inline"` + v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec holds information about the request being evaluated - Spec TokenReviewSpec `json:"spec"` + Spec TokenReviewSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` // Status is filled in by the server and indicates whether the request can be authenticated. - Status TokenReviewStatus `json:"status,omitempty"` + Status TokenReviewStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } // TokenReviewSpec is a description of the token authentication request. type TokenReviewSpec struct { // Token is the opaque bearer token. - Token string `json:"token,omitempty"` + Token string `json:"token,omitempty" protobuf:"bytes,1,opt,name=token"` } // TokenReviewStatus is the result of the token authentication request. type TokenReviewStatus struct { // Authenticated indicates that the token was associated with a known user. - Authenticated bool `json:"authenticated,omitempty"` + Authenticated bool `json:"authenticated,omitempty" protobuf:"varint,1,opt,name=authenticated"` // User is the UserInfo associated with the provided token. - User UserInfo `json:"user,omitempty"` + User UserInfo `json:"user,omitempty" protobuf:"bytes,2,opt,name=user"` + // Error indicates that the token couldn't be checked + Error string `json:"error,omitempty" protobuf:"bytes,3,opt,name=error"` } // UserInfo holds the information about the user needed to implement the // user.Info interface. type UserInfo struct { // The name that uniquely identifies this user among all active users. - Username string `json:"username,omitempty"` + Username string `json:"username,omitempty" protobuf:"bytes,1,opt,name=username"` // A unique value that identifies this user across time. If this user is // deleted and another user by the same name is added, they will have // different UIDs. - UID string `json:"uid,omitempty"` + UID string `json:"uid,omitempty" protobuf:"bytes,2,opt,name=uid"` // The names of groups this user is a part of. - Groups []string `json:"groups,omitempty"` + Groups []string `json:"groups,omitempty" protobuf:"bytes,3,rep,name=groups"` // Any additional information provided by the authenticator. - Extra map[string][]string `json:"extra,omitempty"` + Extra map[string]ExtraValue `json:"extra,omitempty" protobuf:"bytes,4,rep,name=extra"` +} + +// ExtraValue masks the value so protobuf can generate +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type ExtraValue []string + +func (t ExtraValue) String() string { + return fmt.Sprintf("%v", []string(t)) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/types_swagger_doc_generated.go new file mode 100644 index 00000000..f910bea6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/types_swagger_doc_generated.go @@ -0,0 +1,72 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_TokenReview = map[string]string{ + "": "TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.", + "spec": "Spec holds information about the request being evaluated", + "status": "Status is filled in by the server and indicates whether the request can be authenticated.", +} + +func (TokenReview) SwaggerDoc() map[string]string { + return map_TokenReview +} + +var map_TokenReviewSpec = map[string]string{ + "": "TokenReviewSpec is a description of the token authentication request.", + "token": "Token is the opaque bearer token.", +} + +func (TokenReviewSpec) SwaggerDoc() map[string]string { + return map_TokenReviewSpec +} + +var map_TokenReviewStatus = map[string]string{ + "": "TokenReviewStatus is the result of the token authentication request.", + "authenticated": "Authenticated indicates that the token was associated with a known user.", + "user": "User is the UserInfo associated with the provided token.", + "error": "Error indicates that the token couldn't be checked", +} + +func (TokenReviewStatus) SwaggerDoc() map[string]string { + return map_TokenReviewStatus +} + +var map_UserInfo = map[string]string{ + "": "UserInfo holds the information about the user needed to implement the user.Info interface.", + "username": "The name that uniquely identifies this user among all active users.", + "uid": "A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.", + "groups": "The names of groups this user is a part of.", + "extra": "Any additional information provided by the authenticator.", +} + +func (UserInfo) SwaggerDoc() map[string]string { + return map_UserInfo +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/zz_generated.conversion.go new file mode 100644 index 00000000..b3849d39 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/zz_generated.conversion.go @@ -0,0 +1,183 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by conversion-gen. Do not edit it manually! + +package v1beta1 + +import ( + api "k8s.io/kubernetes/pkg/api" + authentication "k8s.io/kubernetes/pkg/apis/authentication" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" +) + +func init() { + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1beta1_TokenReview_To_authentication_TokenReview, + Convert_authentication_TokenReview_To_v1beta1_TokenReview, + Convert_v1beta1_TokenReviewSpec_To_authentication_TokenReviewSpec, + Convert_authentication_TokenReviewSpec_To_v1beta1_TokenReviewSpec, + Convert_v1beta1_TokenReviewStatus_To_authentication_TokenReviewStatus, + Convert_authentication_TokenReviewStatus_To_v1beta1_TokenReviewStatus, + Convert_v1beta1_UserInfo_To_authentication_UserInfo, + Convert_authentication_UserInfo_To_v1beta1_UserInfo, + ) +} + +func autoConvert_v1beta1_TokenReview_To_authentication_TokenReview(in *TokenReview, out *authentication.TokenReview, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := Convert_v1beta1_TokenReviewSpec_To_authentication_TokenReviewSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1beta1_TokenReviewStatus_To_authentication_TokenReviewStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1beta1_TokenReview_To_authentication_TokenReview(in *TokenReview, out *authentication.TokenReview, s conversion.Scope) error { + return autoConvert_v1beta1_TokenReview_To_authentication_TokenReview(in, out, s) +} + +func autoConvert_authentication_TokenReview_To_v1beta1_TokenReview(in *authentication.TokenReview, out *TokenReview, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := Convert_authentication_TokenReviewSpec_To_v1beta1_TokenReviewSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_authentication_TokenReviewStatus_To_v1beta1_TokenReviewStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_authentication_TokenReview_To_v1beta1_TokenReview(in *authentication.TokenReview, out *TokenReview, s conversion.Scope) error { + return autoConvert_authentication_TokenReview_To_v1beta1_TokenReview(in, out, s) +} + +func autoConvert_v1beta1_TokenReviewSpec_To_authentication_TokenReviewSpec(in *TokenReviewSpec, out *authentication.TokenReviewSpec, s conversion.Scope) error { + out.Token = in.Token + return nil +} + +func Convert_v1beta1_TokenReviewSpec_To_authentication_TokenReviewSpec(in *TokenReviewSpec, out *authentication.TokenReviewSpec, s conversion.Scope) error { + return autoConvert_v1beta1_TokenReviewSpec_To_authentication_TokenReviewSpec(in, out, s) +} + +func autoConvert_authentication_TokenReviewSpec_To_v1beta1_TokenReviewSpec(in *authentication.TokenReviewSpec, out *TokenReviewSpec, s conversion.Scope) error { + out.Token = in.Token + return nil +} + +func Convert_authentication_TokenReviewSpec_To_v1beta1_TokenReviewSpec(in *authentication.TokenReviewSpec, out *TokenReviewSpec, s conversion.Scope) error { + return autoConvert_authentication_TokenReviewSpec_To_v1beta1_TokenReviewSpec(in, out, s) +} + +func autoConvert_v1beta1_TokenReviewStatus_To_authentication_TokenReviewStatus(in *TokenReviewStatus, out *authentication.TokenReviewStatus, s conversion.Scope) error { + out.Authenticated = in.Authenticated + if err := Convert_v1beta1_UserInfo_To_authentication_UserInfo(&in.User, &out.User, s); err != nil { + return err + } + out.Error = in.Error + return nil +} + +func Convert_v1beta1_TokenReviewStatus_To_authentication_TokenReviewStatus(in *TokenReviewStatus, out *authentication.TokenReviewStatus, s conversion.Scope) error { + return autoConvert_v1beta1_TokenReviewStatus_To_authentication_TokenReviewStatus(in, out, s) +} + +func autoConvert_authentication_TokenReviewStatus_To_v1beta1_TokenReviewStatus(in *authentication.TokenReviewStatus, out *TokenReviewStatus, s conversion.Scope) error { + out.Authenticated = in.Authenticated + if err := Convert_authentication_UserInfo_To_v1beta1_UserInfo(&in.User, &out.User, s); err != nil { + return err + } + out.Error = in.Error + return nil +} + +func Convert_authentication_TokenReviewStatus_To_v1beta1_TokenReviewStatus(in *authentication.TokenReviewStatus, out *TokenReviewStatus, s conversion.Scope) error { + return autoConvert_authentication_TokenReviewStatus_To_v1beta1_TokenReviewStatus(in, out, s) +} + +func autoConvert_v1beta1_UserInfo_To_authentication_UserInfo(in *UserInfo, out *authentication.UserInfo, s conversion.Scope) error { + out.Username = in.Username + out.UID = in.UID + out.Groups = in.Groups + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]authentication.ExtraValue, len(*in)) + for key, val := range *in { + newVal := new(authentication.ExtraValue) + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&val, newVal, 0); err != nil { + return err + } + (*out)[key] = *newVal + } + } else { + out.Extra = nil + } + return nil +} + +func Convert_v1beta1_UserInfo_To_authentication_UserInfo(in *UserInfo, out *authentication.UserInfo, s conversion.Scope) error { + return autoConvert_v1beta1_UserInfo_To_authentication_UserInfo(in, out, s) +} + +func autoConvert_authentication_UserInfo_To_v1beta1_UserInfo(in *authentication.UserInfo, out *UserInfo, s conversion.Scope) error { + out.Username = in.Username + out.UID = in.UID + out.Groups = in.Groups + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]ExtraValue, len(*in)) + for key, val := range *in { + newVal := new(ExtraValue) + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&val, newVal, 0); err != nil { + return err + } + (*out)[key] = *newVal + } + } else { + out.Extra = nil + } + return nil +} + +func Convert_authentication_UserInfo_To_v1beta1_UserInfo(in *authentication.UserInfo, out *UserInfo, s conversion.Scope) error { + return autoConvert_authentication_UserInfo_To_v1beta1_UserInfo(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000..01cbc76e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,111 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1beta1 + +import ( + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_TokenReview, InType: reflect.TypeOf(&TokenReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_TokenReviewSpec, InType: reflect.TypeOf(&TokenReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_TokenReviewStatus, InType: reflect.TypeOf(&TokenReviewStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_UserInfo, InType: reflect.TypeOf(&UserInfo{})}, + ) +} + +func DeepCopy_v1beta1_TokenReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TokenReview) + out := out.(*TokenReview) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_v1beta1_TokenReviewStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_TokenReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TokenReviewSpec) + out := out.(*TokenReviewSpec) + out.Token = in.Token + return nil + } +} + +func DeepCopy_v1beta1_TokenReviewStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TokenReviewStatus) + out := out.(*TokenReviewStatus) + out.Authenticated = in.Authenticated + if err := DeepCopy_v1beta1_UserInfo(&in.User, &out.User, c); err != nil { + return err + } + out.Error = in.Error + return nil + } +} + +func DeepCopy_v1beta1_UserInfo(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*UserInfo) + out := out.(*UserInfo) + out.Username = in.Username + out.UID = in.UID + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]ExtraValue) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(*ExtraValue) + } + } + } else { + out.Extra = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authentication/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/authentication/zz_generated.deepcopy.go new file mode 100644 index 00000000..7caf7b0c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authentication/zz_generated.deepcopy.go @@ -0,0 +1,111 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package authentication + +import ( + api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authentication_TokenReview, InType: reflect.TypeOf(&TokenReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authentication_TokenReviewSpec, InType: reflect.TypeOf(&TokenReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authentication_TokenReviewStatus, InType: reflect.TypeOf(&TokenReviewStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authentication_UserInfo, InType: reflect.TypeOf(&UserInfo{})}, + ) +} + +func DeepCopy_authentication_TokenReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TokenReview) + out := out.(*TokenReview) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_authentication_TokenReviewStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_authentication_TokenReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TokenReviewSpec) + out := out.(*TokenReviewSpec) + out.Token = in.Token + return nil + } +} + +func DeepCopy_authentication_TokenReviewStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TokenReviewStatus) + out := out.(*TokenReviewStatus) + out.Authenticated = in.Authenticated + if err := DeepCopy_authentication_UserInfo(&in.User, &out.User, c); err != nil { + return err + } + out.Error = in.Error + return nil + } +} + +func DeepCopy_authentication_UserInfo(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*UserInfo) + out := out.(*UserInfo) + out.Username = in.Username + out.UID = in.UID + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]ExtraValue) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(*ExtraValue) + } + } + } else { + out.Extra = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/deep_copy_generated.go deleted file mode 100644 index bc40fb33..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/deep_copy_generated.go +++ /dev/null @@ -1,170 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package authorization - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_authorization_LocalSubjectAccessReview, - DeepCopy_authorization_NonResourceAttributes, - DeepCopy_authorization_ResourceAttributes, - DeepCopy_authorization_SelfSubjectAccessReview, - DeepCopy_authorization_SelfSubjectAccessReviewSpec, - DeepCopy_authorization_SubjectAccessReview, - DeepCopy_authorization_SubjectAccessReviewSpec, - DeepCopy_authorization_SubjectAccessReviewStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_authorization_LocalSubjectAccessReview(in LocalSubjectAccessReview, out *LocalSubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_authorization_SubjectAccessReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_authorization_SubjectAccessReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_authorization_NonResourceAttributes(in NonResourceAttributes, out *NonResourceAttributes, c *conversion.Cloner) error { - out.Path = in.Path - out.Verb = in.Verb - return nil -} - -func DeepCopy_authorization_ResourceAttributes(in ResourceAttributes, out *ResourceAttributes, c *conversion.Cloner) error { - out.Namespace = in.Namespace - out.Verb = in.Verb - out.Group = in.Group - out.Version = in.Version - out.Resource = in.Resource - out.Subresource = in.Subresource - out.Name = in.Name - return nil -} - -func DeepCopy_authorization_SelfSubjectAccessReview(in SelfSubjectAccessReview, out *SelfSubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_authorization_SelfSubjectAccessReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_authorization_SubjectAccessReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_authorization_SelfSubjectAccessReviewSpec(in SelfSubjectAccessReviewSpec, out *SelfSubjectAccessReviewSpec, c *conversion.Cloner) error { - if in.ResourceAttributes != nil { - in, out := in.ResourceAttributes, &out.ResourceAttributes - *out = new(ResourceAttributes) - if err := DeepCopy_authorization_ResourceAttributes(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceAttributes = nil - } - if in.NonResourceAttributes != nil { - in, out := in.NonResourceAttributes, &out.NonResourceAttributes - *out = new(NonResourceAttributes) - if err := DeepCopy_authorization_NonResourceAttributes(*in, *out, c); err != nil { - return err - } - } else { - out.NonResourceAttributes = nil - } - return nil -} - -func DeepCopy_authorization_SubjectAccessReview(in SubjectAccessReview, out *SubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_authorization_SubjectAccessReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_authorization_SubjectAccessReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_authorization_SubjectAccessReviewSpec(in SubjectAccessReviewSpec, out *SubjectAccessReviewSpec, c *conversion.Cloner) error { - if in.ResourceAttributes != nil { - in, out := in.ResourceAttributes, &out.ResourceAttributes - *out = new(ResourceAttributes) - if err := DeepCopy_authorization_ResourceAttributes(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceAttributes = nil - } - if in.NonResourceAttributes != nil { - in, out := in.NonResourceAttributes, &out.NonResourceAttributes - *out = new(NonResourceAttributes) - if err := DeepCopy_authorization_NonResourceAttributes(*in, *out, c); err != nil { - return err - } - } else { - out.NonResourceAttributes = nil - } - out.User = in.User - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Groups = nil - } - if in.Extra != nil { - in, out := in.Extra, &out.Extra - *out = make(map[string][]string) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.([]string) - } - } - } else { - out.Extra = nil - } - return nil -} - -func DeepCopy_authorization_SubjectAccessReviewStatus(in SubjectAccessReviewStatus, out *SubjectAccessReviewStatus, c *conversion.Cloner) error { - out.Allowed = in.Allowed - out.Reason = in.Reason - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/doc.go new file mode 100644 index 00000000..477c9c7f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +// +groupName=authorization.k8s.io +package authorization diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/install/install.go index bf8814dd..2c474fde 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -89,7 +89,10 @@ func enableVersions(externalVersions []unversioned.GroupVersion) error { func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - authorization.AddToScheme(api.Scheme) + if err := authorization.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -98,7 +101,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1beta1.SchemeGroupVersion: - v1beta1.AddToScheme(api.Scheme) + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/register.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/register.go index fdb6c4f4..59d92fa7 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,24 +27,26 @@ const GroupName = "authorization.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &SelfSubjectAccessReview{}, &SubjectAccessReview{}, &LocalSubjectAccessReview{}, ) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/types.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/types.go index 8cfdfbe9..33ad58c3 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,13 +17,19 @@ limitations under the License. package authorization import ( + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" ) +// +genclient=true +// +nonNamespaced=true +// +noMethods=true + // SubjectAccessReview checks whether or not a user or group can perform an action. Not filling in a // spec.namespace means "in all namespaces". type SubjectAccessReview struct { unversioned.TypeMeta + api.ObjectMeta // Spec holds information about the request being evaluated Spec SubjectAccessReviewSpec @@ -37,6 +43,7 @@ type SubjectAccessReview struct { // to check whether they can perform an action type SelfSubjectAccessReview struct { unversioned.TypeMeta + api.ObjectMeta // Spec holds information about the request being evaluated. Spec SelfSubjectAccessReviewSpec @@ -50,6 +57,7 @@ type SelfSubjectAccessReview struct { // checking. type LocalSubjectAccessReview struct { unversioned.TypeMeta + api.ObjectMeta // Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace // you made the request against. If empty, it is defaulted. @@ -103,9 +111,13 @@ type SubjectAccessReviewSpec struct { Groups []string // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer // it needs a reflection here. - Extra map[string][]string + Extra map[string]ExtraValue } +// ExtraValue masks the value so protobuf can generate +// +protobuf.nullable=true +type ExtraValue []string + // SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAttributes // and NonResourceAttributes must be set type SelfSubjectAccessReviewSpec struct { @@ -121,4 +133,8 @@ type SubjectAccessReviewStatus struct { Allowed bool // Reason is optional. It indicates why a request was allowed or denied. Reason string + // EvaluationError is an indication that some error occurred during the authorization check. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. + // For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request. + EvaluationError string } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/conversion.go index 0b45ed5f..fa887912 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,11 +20,7 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions - err := scheme.AddConversionFuncs() - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + return scheme.AddConversionFuncs() } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/deep_copy_generated.go deleted file mode 100644 index 94a35650..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/deep_copy_generated.go +++ /dev/null @@ -1,170 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1beta1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1beta1_LocalSubjectAccessReview, - DeepCopy_v1beta1_NonResourceAttributes, - DeepCopy_v1beta1_ResourceAttributes, - DeepCopy_v1beta1_SelfSubjectAccessReview, - DeepCopy_v1beta1_SelfSubjectAccessReviewSpec, - DeepCopy_v1beta1_SubjectAccessReview, - DeepCopy_v1beta1_SubjectAccessReviewSpec, - DeepCopy_v1beta1_SubjectAccessReviewStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1beta1_LocalSubjectAccessReview(in LocalSubjectAccessReview, out *LocalSubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_SubjectAccessReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_SubjectAccessReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_NonResourceAttributes(in NonResourceAttributes, out *NonResourceAttributes, c *conversion.Cloner) error { - out.Path = in.Path - out.Verb = in.Verb - return nil -} - -func DeepCopy_v1beta1_ResourceAttributes(in ResourceAttributes, out *ResourceAttributes, c *conversion.Cloner) error { - out.Namespace = in.Namespace - out.Verb = in.Verb - out.Group = in.Group - out.Version = in.Version - out.Resource = in.Resource - out.Subresource = in.Subresource - out.Name = in.Name - return nil -} - -func DeepCopy_v1beta1_SelfSubjectAccessReview(in SelfSubjectAccessReview, out *SelfSubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_SelfSubjectAccessReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_SubjectAccessReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_SelfSubjectAccessReviewSpec(in SelfSubjectAccessReviewSpec, out *SelfSubjectAccessReviewSpec, c *conversion.Cloner) error { - if in.ResourceAttributes != nil { - in, out := in.ResourceAttributes, &out.ResourceAttributes - *out = new(ResourceAttributes) - if err := DeepCopy_v1beta1_ResourceAttributes(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceAttributes = nil - } - if in.NonResourceAttributes != nil { - in, out := in.NonResourceAttributes, &out.NonResourceAttributes - *out = new(NonResourceAttributes) - if err := DeepCopy_v1beta1_NonResourceAttributes(*in, *out, c); err != nil { - return err - } - } else { - out.NonResourceAttributes = nil - } - return nil -} - -func DeepCopy_v1beta1_SubjectAccessReview(in SubjectAccessReview, out *SubjectAccessReview, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_SubjectAccessReviewSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_SubjectAccessReviewStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_SubjectAccessReviewSpec(in SubjectAccessReviewSpec, out *SubjectAccessReviewSpec, c *conversion.Cloner) error { - if in.ResourceAttributes != nil { - in, out := in.ResourceAttributes, &out.ResourceAttributes - *out = new(ResourceAttributes) - if err := DeepCopy_v1beta1_ResourceAttributes(*in, *out, c); err != nil { - return err - } - } else { - out.ResourceAttributes = nil - } - if in.NonResourceAttributes != nil { - in, out := in.NonResourceAttributes, &out.NonResourceAttributes - *out = new(NonResourceAttributes) - if err := DeepCopy_v1beta1_NonResourceAttributes(*in, *out, c); err != nil { - return err - } - } else { - out.NonResourceAttributes = nil - } - out.User = in.User - if in.Groups != nil { - in, out := in.Groups, &out.Groups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Groups = nil - } - if in.Extra != nil { - in, out := in.Extra, &out.Extra - *out = make(map[string][]string) - for key, val := range in { - if newVal, err := c.DeepCopy(val); err != nil { - return err - } else { - (*out)[key] = newVal.([]string) - } - } - } else { - out.Extra = nil - } - return nil -} - -func DeepCopy_v1beta1_SubjectAccessReviewStatus(in SubjectAccessReviewStatus, out *SubjectAccessReviewStatus, c *conversion.Cloner) error { - out.Allowed = in.Allowed - out.Reason = in.Reason - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/defaults.go index 340f8075..57dd337d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,6 +20,6 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs() +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs() } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/doc.go index cfdb87c5..3b756551 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/authorization + +// +groupName=authorization.k8s.io package v1beta1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.pb.go new file mode 100644 index 00000000..0305f739 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.pb.go @@ -0,0 +1,2342 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.proto +// DO NOT EDIT! + +/* + Package v1beta1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.proto + + It has these top-level messages: + ExtraValue + LocalSubjectAccessReview + NonResourceAttributes + ResourceAttributes + SelfSubjectAccessReview + SelfSubjectAccessReviewSpec + SubjectAccessReview + SubjectAccessReviewSpec + SubjectAccessReviewStatus +*/ +package v1beta1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *ExtraValue) Reset() { *m = ExtraValue{} } +func (*ExtraValue) ProtoMessage() {} +func (*ExtraValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *LocalSubjectAccessReview) Reset() { *m = LocalSubjectAccessReview{} } +func (*LocalSubjectAccessReview) ProtoMessage() {} +func (*LocalSubjectAccessReview) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{1} +} + +func (m *NonResourceAttributes) Reset() { *m = NonResourceAttributes{} } +func (*NonResourceAttributes) ProtoMessage() {} +func (*NonResourceAttributes) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *ResourceAttributes) Reset() { *m = ResourceAttributes{} } +func (*ResourceAttributes) ProtoMessage() {} +func (*ResourceAttributes) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *SelfSubjectAccessReview) Reset() { *m = SelfSubjectAccessReview{} } +func (*SelfSubjectAccessReview) ProtoMessage() {} +func (*SelfSubjectAccessReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *SelfSubjectAccessReviewSpec) Reset() { *m = SelfSubjectAccessReviewSpec{} } +func (*SelfSubjectAccessReviewSpec) ProtoMessage() {} +func (*SelfSubjectAccessReviewSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{5} +} + +func (m *SubjectAccessReview) Reset() { *m = SubjectAccessReview{} } +func (*SubjectAccessReview) ProtoMessage() {} +func (*SubjectAccessReview) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } + +func (m *SubjectAccessReviewSpec) Reset() { *m = SubjectAccessReviewSpec{} } +func (*SubjectAccessReviewSpec) ProtoMessage() {} +func (*SubjectAccessReviewSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } + +func (m *SubjectAccessReviewStatus) Reset() { *m = SubjectAccessReviewStatus{} } +func (*SubjectAccessReviewStatus) ProtoMessage() {} +func (*SubjectAccessReviewStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{8} +} + +func init() { + proto.RegisterType((*ExtraValue)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.ExtraValue") + proto.RegisterType((*LocalSubjectAccessReview)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview") + proto.RegisterType((*NonResourceAttributes)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes") + proto.RegisterType((*ResourceAttributes)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes") + proto.RegisterType((*SelfSubjectAccessReview)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview") + proto.RegisterType((*SelfSubjectAccessReviewSpec)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReviewSpec") + proto.RegisterType((*SubjectAccessReview)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview") + proto.RegisterType((*SubjectAccessReviewSpec)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec") + proto.RegisterType((*SubjectAccessReviewStatus)(nil), "k8s.io.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus") +} +func (m ExtraValue) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m ExtraValue) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m) > 0 { + for _, s := range m { + data[i] = 0xa + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *LocalSubjectAccessReview) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *LocalSubjectAccessReview) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n2, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n3, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n3 + return i, nil +} + +func (m *NonResourceAttributes) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *NonResourceAttributes) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Path))) + i += copy(data[i:], m.Path) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Verb))) + i += copy(data[i:], m.Verb) + return i, nil +} + +func (m *ResourceAttributes) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *ResourceAttributes) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Namespace))) + i += copy(data[i:], m.Namespace) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Verb))) + i += copy(data[i:], m.Verb) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Group))) + i += copy(data[i:], m.Group) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Version))) + i += copy(data[i:], m.Version) + data[i] = 0x2a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Resource))) + i += copy(data[i:], m.Resource) + data[i] = 0x32 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Subresource))) + i += copy(data[i:], m.Subresource) + data[i] = 0x3a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Name))) + i += copy(data[i:], m.Name) + return i, nil +} + +func (m *SelfSubjectAccessReview) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SelfSubjectAccessReview) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n4, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n4 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n5, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n5 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n6, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n6 + return i, nil +} + +func (m *SelfSubjectAccessReviewSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SelfSubjectAccessReviewSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ResourceAttributes != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ResourceAttributes.Size())) + n7, err := m.ResourceAttributes.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n7 + } + if m.NonResourceAttributes != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.NonResourceAttributes.Size())) + n8, err := m.NonResourceAttributes.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n8 + } + return i, nil +} + +func (m *SubjectAccessReview) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SubjectAccessReview) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n9, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n9 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n10, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n10 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n11, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n11 + return i, nil +} + +func (m *SubjectAccessReviewSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SubjectAccessReviewSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.ResourceAttributes != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ResourceAttributes.Size())) + n12, err := m.ResourceAttributes.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n12 + } + if m.NonResourceAttributes != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.NonResourceAttributes.Size())) + n13, err := m.NonResourceAttributes.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n13 + } + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.User))) + i += copy(data[i:], m.User) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + data[i] = 0x22 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + if len(m.Extra) > 0 { + for k := range m.Extra { + data[i] = 0x2a + i++ + v := m.Extra[k] + msgSize := (&v).Size() + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + msgSize + sovGenerated(uint64(msgSize)) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64((&v).Size())) + n14, err := (&v).MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n14 + } + } + return i, nil +} + +func (m *SubjectAccessReviewStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *SubjectAccessReviewStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0x8 + i++ + if m.Allowed { + data[i] = 1 + } else { + data[i] = 0 + } + i++ + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.EvaluationError))) + i += copy(data[i:], m.EvaluationError) + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m ExtraValue) Size() (n int) { + var l int + _ = l + if len(m) > 0 { + for _, s := range m { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *LocalSubjectAccessReview) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *NonResourceAttributes) Size() (n int) { + var l int + _ = l + l = len(m.Path) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Verb) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *ResourceAttributes) Size() (n int) { + var l int + _ = l + l = len(m.Namespace) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Verb) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Group) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Version) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Resource) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Subresource) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Name) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SelfSubjectAccessReview) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SelfSubjectAccessReviewSpec) Size() (n int) { + var l int + _ = l + if m.ResourceAttributes != nil { + l = m.ResourceAttributes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NonResourceAttributes != nil { + l = m.NonResourceAttributes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *SubjectAccessReview) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *SubjectAccessReviewSpec) Size() (n int) { + var l int + _ = l + if m.ResourceAttributes != nil { + l = m.ResourceAttributes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.NonResourceAttributes != nil { + l = m.NonResourceAttributes.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.User) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + if len(m.Extra) > 0 { + for k, v := range m.Extra { + _ = k + _ = v + l = v.Size() + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *SubjectAccessReviewStatus) Size() (n int) { + var l int + _ = l + n += 2 + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.EvaluationError) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *LocalSubjectAccessReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LocalSubjectAccessReview{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SubjectAccessReviewSpec", "SubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NonResourceAttributes) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NonResourceAttributes{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Verb:` + fmt.Sprintf("%v", this.Verb) + `,`, + `}`, + }, "") + return s +} +func (this *ResourceAttributes) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ResourceAttributes{`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `Verb:` + fmt.Sprintf("%v", this.Verb) + `,`, + `Group:` + fmt.Sprintf("%v", this.Group) + `,`, + `Version:` + fmt.Sprintf("%v", this.Version) + `,`, + `Resource:` + fmt.Sprintf("%v", this.Resource) + `,`, + `Subresource:` + fmt.Sprintf("%v", this.Subresource) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *SelfSubjectAccessReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SelfSubjectAccessReview{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SelfSubjectAccessReviewSpec", "SelfSubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SelfSubjectAccessReviewSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SelfSubjectAccessReviewSpec{`, + `ResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.ResourceAttributes), "ResourceAttributes", "ResourceAttributes", 1) + `,`, + `NonResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.NonResourceAttributes), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, + `}`, + }, "") + return s +} +func (this *SubjectAccessReview) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SubjectAccessReview{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "SubjectAccessReviewSpec", "SubjectAccessReviewSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "SubjectAccessReviewStatus", "SubjectAccessReviewStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SubjectAccessReviewSpec) String() string { + if this == nil { + return "nil" + } + keysForExtra := make([]string, 0, len(this.Extra)) + for k := range this.Extra { + keysForExtra = append(keysForExtra, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) + mapStringForExtra := "map[string]ExtraValue{" + for _, k := range keysForExtra { + mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) + } + mapStringForExtra += "}" + s := strings.Join([]string{`&SubjectAccessReviewSpec{`, + `ResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.ResourceAttributes), "ResourceAttributes", "ResourceAttributes", 1) + `,`, + `NonResourceAttributes:` + strings.Replace(fmt.Sprintf("%v", this.NonResourceAttributes), "NonResourceAttributes", "NonResourceAttributes", 1) + `,`, + `User:` + fmt.Sprintf("%v", this.User) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `Extra:` + mapStringForExtra + `,`, + `}`, + }, "") + return s +} +func (this *SubjectAccessReviewStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SubjectAccessReviewStatus{`, + `Allowed:` + fmt.Sprintf("%v", this.Allowed) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `EvaluationError:` + fmt.Sprintf("%v", this.EvaluationError) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *ExtraValue) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ExtraValue: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ExtraValue: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + *m = append(*m, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LocalSubjectAccessReview) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LocalSubjectAccessReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LocalSubjectAccessReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NonResourceAttributes) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NonResourceAttributes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NonResourceAttributes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Verb", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Verb = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ResourceAttributes) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ResourceAttributes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ResourceAttributes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Namespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Namespace = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Verb", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Verb = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Group", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Group = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Resource", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Resource = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Subresource", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Subresource = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SelfSubjectAccessReview) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SelfSubjectAccessReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SelfSubjectAccessReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SelfSubjectAccessReviewSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SelfSubjectAccessReviewSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SelfSubjectAccessReviewSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceAttributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ResourceAttributes == nil { + m.ResourceAttributes = &ResourceAttributes{} + } + if err := m.ResourceAttributes.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonResourceAttributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonResourceAttributes == nil { + m.NonResourceAttributes = &NonResourceAttributes{} + } + if err := m.NonResourceAttributes.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SubjectAccessReview) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubjectAccessReview: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubjectAccessReview: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SubjectAccessReviewSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubjectAccessReviewSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubjectAccessReviewSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceAttributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ResourceAttributes == nil { + m.ResourceAttributes = &ResourceAttributes{} + } + if err := m.ResourceAttributes.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NonResourceAttributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.NonResourceAttributes == nil { + m.NonResourceAttributes = &NonResourceAttributes{} + } + if err := m.NonResourceAttributes.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(data[iNdEx:postIndex])) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Extra", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var mapmsglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + mapmsglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + postmsgIndex := iNdEx + mapmsglen + if mapmsglen < 0 { + return ErrInvalidLengthGenerated + } + if postmsgIndex > l { + return io.ErrUnexpectedEOF + } + mapvalue := &ExtraValue{} + if err := mapvalue.Unmarshal(data[iNdEx:postmsgIndex]); err != nil { + return err + } + iNdEx = postmsgIndex + if m.Extra == nil { + m.Extra = make(map[string]ExtraValue) + } + m.Extra[mapkey] = *mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SubjectAccessReviewStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SubjectAccessReviewStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SubjectAccessReviewStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Allowed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Allowed = bool(v != 0) + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvaluationError", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EvaluationError = string(data[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 866 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x56, 0x41, 0x8f, 0xdb, 0x44, + 0x14, 0x8e, 0x93, 0x78, 0x37, 0x99, 0x05, 0xb6, 0x4c, 0x55, 0xd6, 0x0d, 0x92, 0x13, 0x05, 0x09, + 0x6d, 0xa5, 0xd6, 0x66, 0x2b, 0x55, 0x54, 0x15, 0x07, 0xd6, 0x62, 0x55, 0x55, 0xd0, 0x82, 0x66, + 0x61, 0x85, 0xe0, 0x34, 0xf6, 0xbe, 0x26, 0x26, 0x89, 0xc7, 0x9a, 0x19, 0xbb, 0x2c, 0xa7, 0xfe, + 0x00, 0x0e, 0x1c, 0x7b, 0xe4, 0x2f, 0xf0, 0x07, 0xb8, 0xb2, 0xc7, 0x72, 0x41, 0x20, 0xa1, 0x88, + 0x35, 0xff, 0x82, 0x13, 0xf2, 0x78, 0x12, 0x37, 0x1b, 0x07, 0x14, 0x58, 0x21, 0x0e, 0x7b, 0xf3, + 0xbc, 0xf7, 0xbd, 0xef, 0x7d, 0x33, 0xf3, 0xc6, 0xef, 0xa1, 0x77, 0x47, 0x77, 0x85, 0x13, 0x32, + 0x77, 0x94, 0xf8, 0xc0, 0x23, 0x90, 0x20, 0xdc, 0x78, 0x34, 0x70, 0x69, 0x1c, 0x0a, 0x97, 0x26, + 0x72, 0xc8, 0x78, 0xf8, 0x15, 0x95, 0x21, 0x8b, 0xdc, 0x74, 0xcf, 0x07, 0x49, 0xf7, 0xdc, 0x01, + 0x44, 0xc0, 0xa9, 0x84, 0x63, 0x27, 0xe6, 0x4c, 0x32, 0xfc, 0x56, 0xc1, 0xe0, 0x94, 0x0c, 0x4e, + 0x3c, 0x1a, 0x38, 0x39, 0x83, 0xb3, 0xc0, 0xe0, 0x68, 0x86, 0xce, 0xad, 0x41, 0x28, 0x87, 0x89, + 0xef, 0x04, 0x6c, 0xe2, 0x0e, 0xd8, 0x80, 0xb9, 0x8a, 0xc8, 0x4f, 0x1e, 0xab, 0x95, 0x5a, 0xa8, + 0xaf, 0x22, 0x41, 0xe7, 0xce, 0x4a, 0x89, 0x6e, 0x12, 0xa5, 0xc0, 0x45, 0xc8, 0x22, 0x38, 0x3e, + 0xaf, 0xab, 0x73, 0x73, 0x75, 0x58, 0xba, 0xb4, 0x8b, 0xce, 0xad, 0x6a, 0x34, 0x4f, 0x22, 0x19, + 0x4e, 0x60, 0x09, 0xbe, 0x57, 0x0d, 0x4f, 0x64, 0x38, 0x76, 0xc3, 0x48, 0x0a, 0xc9, 0xcf, 0x87, + 0xf4, 0xdf, 0x46, 0xe8, 0xe0, 0x4b, 0xc9, 0xe9, 0x11, 0x1d, 0x27, 0x80, 0xbb, 0xc8, 0x0c, 0x25, + 0x4c, 0x84, 0x65, 0xf4, 0x1a, 0xbb, 0x6d, 0xaf, 0x9d, 0x4d, 0xbb, 0xe6, 0x83, 0xdc, 0x40, 0x0a, + 0xfb, 0xbd, 0xd6, 0xb3, 0x6f, 0xbb, 0xb5, 0xa7, 0xbf, 0xf6, 0x6a, 0xfd, 0x9f, 0xea, 0xc8, 0xfa, + 0x80, 0x05, 0x74, 0x7c, 0x98, 0xf8, 0x5f, 0x40, 0x20, 0xf7, 0x83, 0x00, 0x84, 0x20, 0x90, 0x86, + 0xf0, 0x04, 0x7f, 0x8a, 0x5a, 0x13, 0x90, 0xf4, 0x98, 0x4a, 0x6a, 0x19, 0x3d, 0x63, 0x77, 0xeb, + 0xf6, 0xae, 0xb3, 0xf2, 0x42, 0x9c, 0x74, 0xcf, 0xf9, 0x50, 0x71, 0x3c, 0x04, 0x49, 0x3d, 0x7c, + 0x3a, 0xed, 0xd6, 0xb2, 0x69, 0x17, 0x95, 0x36, 0x32, 0x67, 0xc3, 0x23, 0xd4, 0x14, 0x31, 0x04, + 0x56, 0x5d, 0xb1, 0x3e, 0x70, 0xd6, 0xbd, 0x66, 0xa7, 0x42, 0xee, 0x61, 0x0c, 0x81, 0xf7, 0x92, + 0x4e, 0xdb, 0xcc, 0x57, 0x44, 0x25, 0xc1, 0x02, 0x6d, 0x08, 0x49, 0x65, 0x22, 0xac, 0x86, 0x4a, + 0xf7, 0xfe, 0xc5, 0xa4, 0x53, 0x94, 0xde, 0x2b, 0x3a, 0xe1, 0x46, 0xb1, 0x26, 0x3a, 0x55, 0xff, + 0x73, 0x74, 0xed, 0x11, 0x8b, 0x08, 0x08, 0x96, 0xf0, 0x00, 0xf6, 0xa5, 0xe4, 0xa1, 0x9f, 0x48, + 0x10, 0xb8, 0x87, 0x9a, 0x31, 0x95, 0x43, 0x75, 0xa0, 0xed, 0x52, 0xef, 0x47, 0x54, 0x0e, 0x89, + 0xf2, 0xe4, 0x88, 0x14, 0xb8, 0xaf, 0x0e, 0xe7, 0x05, 0xc4, 0x11, 0x70, 0x9f, 0x28, 0x4f, 0xff, + 0xfb, 0x3a, 0xc2, 0x15, 0xd4, 0x2e, 0x6a, 0x47, 0x74, 0x02, 0x22, 0xa6, 0x01, 0x68, 0xfe, 0x57, + 0x75, 0x74, 0xfb, 0xd1, 0xcc, 0x41, 0x4a, 0xcc, 0xdf, 0x67, 0xc2, 0x6f, 0x20, 0x73, 0xc0, 0x59, + 0x12, 0xab, 0xa3, 0x6b, 0x7b, 0x2f, 0x6b, 0x88, 0x79, 0x3f, 0x37, 0x92, 0xc2, 0x87, 0x6f, 0xa0, + 0x4d, 0xfd, 0x54, 0xac, 0xa6, 0x82, 0x6d, 0x6b, 0xd8, 0xe6, 0x51, 0x61, 0x26, 0x33, 0x3f, 0xbe, + 0x89, 0x5a, 0x5c, 0x0b, 0xb7, 0x4c, 0x85, 0xbd, 0xa2, 0xb1, 0xad, 0xd9, 0x86, 0xc8, 0x1c, 0x81, + 0xef, 0xa0, 0x2d, 0x91, 0xf8, 0xf3, 0x80, 0x0d, 0x15, 0x70, 0x55, 0x07, 0x6c, 0x1d, 0x96, 0x2e, + 0xf2, 0x22, 0x2e, 0xdf, 0x56, 0xbe, 0x47, 0x6b, 0x73, 0x71, 0x5b, 0xf9, 0x11, 0x10, 0xe5, 0xe9, + 0xff, 0x52, 0x47, 0x3b, 0x87, 0x30, 0x7e, 0xfc, 0xdf, 0x56, 0x3d, 0x5b, 0xa8, 0xfa, 0x87, 0xff, + 0xa0, 0x0c, 0xab, 0x25, 0xff, 0xbf, 0x2a, 0xff, 0x87, 0x3a, 0x7a, 0xfd, 0x2f, 0x84, 0xe2, 0xaf, + 0x0d, 0x84, 0xf9, 0x52, 0xf1, 0xea, 0xa3, 0x7e, 0x6f, 0x7d, 0x85, 0xcb, 0x0f, 0xc1, 0x7b, 0x2d, + 0x9b, 0x76, 0x2b, 0x1e, 0x08, 0xa9, 0xc8, 0x8b, 0x9f, 0x19, 0xe8, 0x5a, 0x54, 0xf5, 0x52, 0xf5, + 0x35, 0xdd, 0x5f, 0x5f, 0x51, 0xe5, 0xc3, 0xf7, 0xae, 0x67, 0xd3, 0x6e, 0xf5, 0x3f, 0x81, 0x54, + 0x0b, 0xe8, 0xff, 0x58, 0x47, 0x57, 0x2f, 0xff, 0xcb, 0x17, 0x5b, 0x9d, 0x7f, 0x34, 0xd1, 0xce, + 0x65, 0x65, 0xfe, 0xcb, 0xca, 0x9c, 0x37, 0x8e, 0xc6, 0xe2, 0x1f, 0xf6, 0x13, 0x01, 0x5c, 0x37, + 0x8e, 0xde, 0xac, 0x71, 0x34, 0xd5, 0x0c, 0x82, 0xf2, 0xab, 0x50, 0x4d, 0x43, 0xcc, 0xba, 0xc6, + 0x09, 0x32, 0x21, 0x9f, 0x59, 0x2c, 0xb3, 0xd7, 0xd8, 0xdd, 0xba, 0xfd, 0xf1, 0x85, 0x15, 0x9b, + 0xa3, 0x46, 0xa1, 0x83, 0x48, 0xf2, 0x93, 0xb2, 0x61, 0x29, 0x1b, 0x29, 0x32, 0x76, 0x52, 0x3d, + 0x2e, 0x29, 0x0c, 0xbe, 0x82, 0x1a, 0x23, 0x38, 0x29, 0x1a, 0x26, 0xc9, 0x3f, 0x31, 0x41, 0x66, + 0x9a, 0x4f, 0x52, 0xfa, 0xa0, 0xdf, 0x59, 0x5f, 0x5a, 0x39, 0x8d, 0x91, 0x82, 0xea, 0x5e, 0xfd, + 0xae, 0xd1, 0xff, 0xce, 0x40, 0xd7, 0x57, 0x96, 0x6c, 0xde, 0x46, 0xe9, 0x78, 0xcc, 0x9e, 0xc0, + 0xb1, 0xd2, 0xd2, 0x2a, 0xdb, 0xe8, 0x7e, 0x61, 0x26, 0x33, 0x3f, 0x7e, 0x13, 0x6d, 0x70, 0xa0, + 0x82, 0x45, 0xba, 0x75, 0xcf, 0xab, 0x9d, 0x28, 0x2b, 0xd1, 0x5e, 0xbc, 0x8f, 0xb6, 0x21, 0x4f, + 0xaf, 0xc4, 0x1d, 0x70, 0xce, 0xb8, 0xbe, 0xb2, 0x1d, 0x1d, 0xb0, 0x7d, 0xb0, 0xe8, 0x26, 0xe7, + 0xf1, 0xde, 0x8d, 0xd3, 0x33, 0xbb, 0xf6, 0xfc, 0xcc, 0xae, 0xfd, 0x7c, 0x66, 0xd7, 0x9e, 0x66, + 0xb6, 0x71, 0x9a, 0xd9, 0xc6, 0xf3, 0xcc, 0x36, 0x7e, 0xcb, 0x6c, 0xe3, 0x9b, 0xdf, 0xed, 0xda, + 0x67, 0x9b, 0x7a, 0xd3, 0x7f, 0x06, 0x00, 0x00, 0xff, 0xff, 0xf3, 0xd8, 0x86, 0xf7, 0xf0, 0x0b, + 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.proto new file mode 100644 index 00000000..21fd4cfc --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/generated.proto @@ -0,0 +1,159 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.apis.authorization.v1beta1; + +import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; +import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// ExtraValue masks the value so protobuf can generate +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +message ExtraValue { + // items, if empty, will result in an empty slice + + repeated string items = 1; +} + +// LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. +// Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions +// checking. +message LocalSubjectAccessReview { + optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; + + // Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace + // you made the request against. If empty, it is defaulted. + optional SubjectAccessReviewSpec spec = 2; + + // Status is filled in by the server and indicates whether the request is allowed or not + optional SubjectAccessReviewStatus status = 3; +} + +// NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface +message NonResourceAttributes { + // Path is the URL path of the request + optional string path = 1; + + // Verb is the standard HTTP verb + optional string verb = 2; +} + +// ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface +message ResourceAttributes { + // Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces + // "" (empty) is defaulted for LocalSubjectAccessReviews + // "" (empty) is empty for cluster-scoped resources + // "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview + optional string namespace = 1; + + // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. + optional string verb = 2; + + // Group is the API Group of the Resource. "*" means all. + optional string group = 3; + + // Version is the API Version of the Resource. "*" means all. + optional string version = 4; + + // Resource is one of the existing resource types. "*" means all. + optional string resource = 5; + + // Subresource is one of the existing resource types. "" means none. + optional string subresource = 6; + + // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. + optional string name = 7; +} + +// SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a +// spec.namespace means "in all namespaces". Self is a special case, because users should always be able +// to check whether they can perform an action +message SelfSubjectAccessReview { + optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; + + // Spec holds information about the request being evaluated. user and groups must be empty + optional SelfSubjectAccessReviewSpec spec = 2; + + // Status is filled in by the server and indicates whether the request is allowed or not + optional SubjectAccessReviewStatus status = 3; +} + +// SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes +// and NonResourceAuthorizationAttributes must be set +message SelfSubjectAccessReviewSpec { + // ResourceAuthorizationAttributes describes information for a resource access request + optional ResourceAttributes resourceAttributes = 1; + + // NonResourceAttributes describes information for a non-resource access request + optional NonResourceAttributes nonResourceAttributes = 2; +} + +// SubjectAccessReview checks whether or not a user or group can perform an action. +message SubjectAccessReview { + optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; + + // Spec holds information about the request being evaluated + optional SubjectAccessReviewSpec spec = 2; + + // Status is filled in by the server and indicates whether the request is allowed or not + optional SubjectAccessReviewStatus status = 3; +} + +// SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes +// and NonResourceAuthorizationAttributes must be set +message SubjectAccessReviewSpec { + // ResourceAuthorizationAttributes describes information for a resource access request + optional ResourceAttributes resourceAttributes = 1; + + // NonResourceAttributes describes information for a non-resource access request + optional NonResourceAttributes nonResourceAttributes = 2; + + // User is the user you're testing for. + // If you specify "User" but not "Group", then is it interpreted as "What if User were not a member of any groups + optional string verb = 3; + + // Groups is the groups you're testing for. + repeated string group = 4; + + // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer + // it needs a reflection here. + map extra = 5; +} + +// SubjectAccessReviewStatus +message SubjectAccessReviewStatus { + // Allowed is required. True if the action would be allowed, false otherwise. + optional bool allowed = 1; + + // Reason is optional. It indicates why a request was allowed or denied. + optional string reason = 2; + + // EvaluationError is an indication that some error occurred during the authorization check. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. + // For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request. + optional string evaluationError = 3; +} + diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/register.go index d9e33ed5..1b072d61 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,7 +18,9 @@ package v1beta1 import ( "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/runtime" + versionedwatch "k8s.io/kubernetes/pkg/watch/versioned" ) // GroupName is the group name use in this package @@ -27,20 +29,24 @@ const GroupName = "authorization.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, + &v1.ListOptions{}, + &v1.DeleteOptions{}, + &SelfSubjectAccessReview{}, &SubjectAccessReview{}, &LocalSubjectAccessReview{}, ) + + versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } func (obj *LocalSubjectAccessReview) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/types.go index 27078e9f..558a1e57 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,18 +17,26 @@ limitations under the License. package v1beta1 import ( + "fmt" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" ) +// +genclient=true +// +nonNamespaced=true +// +noMethods=true + // SubjectAccessReview checks whether or not a user or group can perform an action. type SubjectAccessReview struct { unversioned.TypeMeta `json:",inline"` + v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec holds information about the request being evaluated - Spec SubjectAccessReviewSpec `json:"spec"` + Spec SubjectAccessReviewSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` // Status is filled in by the server and indicates whether the request is allowed or not - Status SubjectAccessReviewStatus `json:"status,omitempty"` + Status SubjectAccessReviewStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } // SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a @@ -36,12 +44,13 @@ type SubjectAccessReview struct { // to check whether they can perform an action type SelfSubjectAccessReview struct { unversioned.TypeMeta `json:",inline"` + v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec holds information about the request being evaluated. user and groups must be empty - Spec SelfSubjectAccessReviewSpec `json:"spec"` + Spec SelfSubjectAccessReviewSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` // Status is filled in by the server and indicates whether the request is allowed or not - Status SubjectAccessReviewStatus `json:"status,omitempty"` + Status SubjectAccessReviewStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } // LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. @@ -49,13 +58,14 @@ type SelfSubjectAccessReview struct { // checking. type LocalSubjectAccessReview struct { unversioned.TypeMeta `json:",inline"` + v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace // you made the request against. If empty, it is defaulted. - Spec SubjectAccessReviewSpec `json:"spec"` + Spec SubjectAccessReviewSpec `json:"spec" protobuf:"bytes,2,opt,name=spec"` // Status is filled in by the server and indicates whether the request is allowed or not - Status SubjectAccessReviewStatus `json:"status,omitempty"` + Status SubjectAccessReviewStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } // ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface @@ -64,60 +74,73 @@ type ResourceAttributes struct { // "" (empty) is defaulted for LocalSubjectAccessReviews // "" (empty) is empty for cluster-scoped resources // "" (empty) means "all" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview - Namespace string `json:"namespace,omitempty"` + Namespace string `json:"namespace,omitempty" protobuf:"bytes,1,opt,name=namespace"` // Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. "*" means all. - Verb string `json:"verb,omitempty"` + Verb string `json:"verb,omitempty" protobuf:"bytes,2,opt,name=verb"` // Group is the API Group of the Resource. "*" means all. - Group string `json:"group,omitempty"` + Group string `json:"group,omitempty" protobuf:"bytes,3,opt,name=group"` // Version is the API Version of the Resource. "*" means all. - Version string `json:"version,omitempty"` + Version string `json:"version,omitempty" protobuf:"bytes,4,opt,name=version"` // Resource is one of the existing resource types. "*" means all. - Resource string `json:"resource,omitempty"` + Resource string `json:"resource,omitempty" protobuf:"bytes,5,opt,name=resource"` // Subresource is one of the existing resource types. "" means none. - Subresource string `json:"subresource,omitempty"` + Subresource string `json:"subresource,omitempty" protobuf:"bytes,6,opt,name=subresource"` // Name is the name of the resource being requested for a "get" or deleted for a "delete". "" (empty) means all. - Name string `json:"name,omitempty"` + Name string `json:"name,omitempty" protobuf:"bytes,7,opt,name=name"` } // NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface type NonResourceAttributes struct { // Path is the URL path of the request - Path string `json:"path,omitempty"` + Path string `json:"path,omitempty" protobuf:"bytes,1,opt,name=path"` // Verb is the standard HTTP verb - Verb string `json:"verb,omitempty"` + Verb string `json:"verb,omitempty" protobuf:"bytes,2,opt,name=verb"` } // SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes // and NonResourceAuthorizationAttributes must be set type SubjectAccessReviewSpec struct { // ResourceAuthorizationAttributes describes information for a resource access request - ResourceAttributes *ResourceAttributes `json:"resourceAttributes,omitempty"` + ResourceAttributes *ResourceAttributes `json:"resourceAttributes,omitempty" protobuf:"bytes,1,opt,name=resourceAttributes"` // NonResourceAttributes describes information for a non-resource access request - NonResourceAttributes *NonResourceAttributes `json:"nonResourceAttributes,omitempty"` + NonResourceAttributes *NonResourceAttributes `json:"nonResourceAttributes,omitempty" protobuf:"bytes,2,opt,name=nonResourceAttributes"` // User is the user you're testing for. // If you specify "User" but not "Group", then is it interpreted as "What if User were not a member of any groups - User string `json:"user,omitempty"` + User string `json:"user,omitempty" protobuf:"bytes,3,opt,name=verb"` // Groups is the groups you're testing for. - Groups []string `json:"group,omitempty"` + Groups []string `json:"group,omitempty" protobuf:"bytes,4,rep,name=group"` // Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer // it needs a reflection here. - Extra map[string][]string `json:"extra,omitempty"` + Extra map[string]ExtraValue `json:"extra,omitempty" protobuf:"bytes,5,rep,name=extra"` +} + +// ExtraValue masks the value so protobuf can generate +// +protobuf.nullable=true +// +protobuf.options.(gogoproto.goproto_stringer)=false +type ExtraValue []string + +func (t ExtraValue) String() string { + return fmt.Sprintf("%v", []string(t)) } // SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes // and NonResourceAuthorizationAttributes must be set type SelfSubjectAccessReviewSpec struct { // ResourceAuthorizationAttributes describes information for a resource access request - ResourceAttributes *ResourceAttributes `json:"resourceAttributes,omitempty"` + ResourceAttributes *ResourceAttributes `json:"resourceAttributes,omitempty" protobuf:"bytes,1,opt,name=resourceAttributes"` // NonResourceAttributes describes information for a non-resource access request - NonResourceAttributes *NonResourceAttributes `json:"nonResourceAttributes,omitempty"` + NonResourceAttributes *NonResourceAttributes `json:"nonResourceAttributes,omitempty" protobuf:"bytes,2,opt,name=nonResourceAttributes"` } // SubjectAccessReviewStatus type SubjectAccessReviewStatus struct { // Allowed is required. True if the action would be allowed, false otherwise. - Allowed bool `json:"allowed"` + Allowed bool `json:"allowed" protobuf:"varint,1,opt,name=allowed"` // Reason is optional. It indicates why a request was allowed or denied. - Reason string `json:"reason,omitempty"` + Reason string `json:"reason,omitempty" protobuf:"bytes,2,opt,name=reason"` + // EvaluationError is an indication that some error occurred during the authorization check. + // It is entirely possible to get an error and be able to continue determine authorization status in spite of it. + // For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request. + EvaluationError string `json:"evaluationError,omitempty" protobuf:"bytes,3,opt,name=evaluationError"` } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/types_swagger_doc_generated.go index d4c337db..8e521ba1 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -106,9 +106,10 @@ func (SubjectAccessReviewSpec) SwaggerDoc() map[string]string { } var map_SubjectAccessReviewStatus = map[string]string{ - "": "SubjectAccessReviewStatus", - "allowed": "Allowed is required. True if the action would be allowed, false otherwise.", - "reason": "Reason is optional. It indicates why a request was allowed or denied.", + "": "SubjectAccessReviewStatus", + "allowed": "Allowed is required. True if the action would be allowed, false otherwise.", + "reason": "Reason is optional. It indicates why a request was allowed or denied.", + "evaluationError": "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.", } func (SubjectAccessReviewStatus) SwaggerDoc() map[string]string { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/zz_generated.conversion.go similarity index 88% rename from vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/conversion_generated.go rename to vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/zz_generated.conversion.go index a475c0fd..03e19637 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,10 +24,17 @@ import ( api "k8s.io/kubernetes/pkg/api" authorization "k8s.io/kubernetes/pkg/apis/authorization" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1beta1_LocalSubjectAccessReview_To_authorization_LocalSubjectAccessReview, Convert_authorization_LocalSubjectAccessReview_To_v1beta1_LocalSubjectAccessReview, Convert_v1beta1_NonResourceAttributes_To_authorization_NonResourceAttributes, @@ -44,16 +51,17 @@ func init() { Convert_authorization_SubjectAccessReviewSpec_To_v1beta1_SubjectAccessReviewSpec, Convert_v1beta1_SubjectAccessReviewStatus_To_authorization_SubjectAccessReviewStatus, Convert_authorization_SubjectAccessReviewStatus_To_v1beta1_SubjectAccessReviewStatus, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v1beta1_LocalSubjectAccessReview_To_authorization_LocalSubjectAccessReview(in *LocalSubjectAccessReview, out *authorization.LocalSubjectAccessReview, s conversion.Scope) error { if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } if err := Convert_v1beta1_SubjectAccessReviewSpec_To_authorization_SubjectAccessReviewSpec(&in.Spec, &out.Spec, s); err != nil { return err } @@ -71,6 +79,10 @@ func autoConvert_authorization_LocalSubjectAccessReview_To_v1beta1_LocalSubjectA if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } if err := Convert_authorization_SubjectAccessReviewSpec_To_v1beta1_SubjectAccessReviewSpec(&in.Spec, &out.Spec, s); err != nil { return err } @@ -138,6 +150,10 @@ func autoConvert_v1beta1_SelfSubjectAccessReview_To_authorization_SelfSubjectAcc if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } if err := Convert_v1beta1_SelfSubjectAccessReviewSpec_To_authorization_SelfSubjectAccessReviewSpec(&in.Spec, &out.Spec, s); err != nil { return err } @@ -155,6 +171,10 @@ func autoConvert_authorization_SelfSubjectAccessReview_To_v1beta1_SelfSubjectAcc if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } if err := Convert_authorization_SelfSubjectAccessReviewSpec_To_v1beta1_SelfSubjectAccessReviewSpec(&in.Spec, &out.Spec, s); err != nil { return err } @@ -224,6 +244,10 @@ func autoConvert_v1beta1_SubjectAccessReview_To_authorization_SubjectAccessRevie if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } if err := Convert_v1beta1_SubjectAccessReviewSpec_To_authorization_SubjectAccessReviewSpec(&in.Spec, &out.Spec, s); err != nil { return err } @@ -241,6 +265,10 @@ func autoConvert_authorization_SubjectAccessReview_To_v1beta1_SubjectAccessRevie if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { return err } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } if err := Convert_authorization_SubjectAccessReviewSpec_To_v1beta1_SubjectAccessReviewSpec(&in.Spec, &out.Spec, s); err != nil { return err } @@ -275,7 +303,20 @@ func autoConvert_v1beta1_SubjectAccessReviewSpec_To_authorization_SubjectAccessR } out.User = in.User out.Groups = in.Groups - out.Extra = in.Extra + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]authorization.ExtraValue, len(*in)) + for key, val := range *in { + newVal := new(authorization.ExtraValue) + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&val, newVal, 0); err != nil { + return err + } + (*out)[key] = *newVal + } + } else { + out.Extra = nil + } return nil } @@ -304,7 +345,20 @@ func autoConvert_authorization_SubjectAccessReviewSpec_To_v1beta1_SubjectAccessR } out.User = in.User out.Groups = in.Groups - out.Extra = in.Extra + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]ExtraValue, len(*in)) + for key, val := range *in { + newVal := new(ExtraValue) + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&val, newVal, 0); err != nil { + return err + } + (*out)[key] = *newVal + } + } else { + out.Extra = nil + } return nil } @@ -315,6 +369,7 @@ func Convert_authorization_SubjectAccessReviewSpec_To_v1beta1_SubjectAccessRevie func autoConvert_v1beta1_SubjectAccessReviewStatus_To_authorization_SubjectAccessReviewStatus(in *SubjectAccessReviewStatus, out *authorization.SubjectAccessReviewStatus, s conversion.Scope) error { out.Allowed = in.Allowed out.Reason = in.Reason + out.EvaluationError = in.EvaluationError return nil } @@ -325,6 +380,7 @@ func Convert_v1beta1_SubjectAccessReviewStatus_To_authorization_SubjectAccessRev func autoConvert_authorization_SubjectAccessReviewStatus_To_v1beta1_SubjectAccessReviewStatus(in *authorization.SubjectAccessReviewStatus, out *SubjectAccessReviewStatus, s conversion.Scope) error { out.Allowed = in.Allowed out.Reason = in.Reason + out.EvaluationError = in.EvaluationError return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000..c365c8db --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,196 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1beta1 + +import ( + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_LocalSubjectAccessReview, InType: reflect.TypeOf(&LocalSubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_NonResourceAttributes, InType: reflect.TypeOf(&NonResourceAttributes{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ResourceAttributes, InType: reflect.TypeOf(&ResourceAttributes{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_SelfSubjectAccessReview, InType: reflect.TypeOf(&SelfSubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_SelfSubjectAccessReviewSpec, InType: reflect.TypeOf(&SelfSubjectAccessReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_SubjectAccessReview, InType: reflect.TypeOf(&SubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_SubjectAccessReviewSpec, InType: reflect.TypeOf(&SubjectAccessReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_SubjectAccessReviewStatus, InType: reflect.TypeOf(&SubjectAccessReviewStatus{})}, + ) +} + +func DeepCopy_v1beta1_LocalSubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LocalSubjectAccessReview) + out := out.(*LocalSubjectAccessReview) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_SubjectAccessReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1beta1_NonResourceAttributes(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NonResourceAttributes) + out := out.(*NonResourceAttributes) + out.Path = in.Path + out.Verb = in.Verb + return nil + } +} + +func DeepCopy_v1beta1_ResourceAttributes(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceAttributes) + out := out.(*ResourceAttributes) + out.Namespace = in.Namespace + out.Verb = in.Verb + out.Group = in.Group + out.Version = in.Version + out.Resource = in.Resource + out.Subresource = in.Subresource + out.Name = in.Name + return nil + } +} + +func DeepCopy_v1beta1_SelfSubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SelfSubjectAccessReview) + out := out.(*SelfSubjectAccessReview) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_SelfSubjectAccessReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1beta1_SelfSubjectAccessReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SelfSubjectAccessReviewSpec) + out := out.(*SelfSubjectAccessReviewSpec) + if in.ResourceAttributes != nil { + in, out := &in.ResourceAttributes, &out.ResourceAttributes + *out = new(ResourceAttributes) + **out = **in + } else { + out.ResourceAttributes = nil + } + if in.NonResourceAttributes != nil { + in, out := &in.NonResourceAttributes, &out.NonResourceAttributes + *out = new(NonResourceAttributes) + **out = **in + } else { + out.NonResourceAttributes = nil + } + return nil + } +} + +func DeepCopy_v1beta1_SubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectAccessReview) + out := out.(*SubjectAccessReview) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_SubjectAccessReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1beta1_SubjectAccessReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectAccessReviewSpec) + out := out.(*SubjectAccessReviewSpec) + if in.ResourceAttributes != nil { + in, out := &in.ResourceAttributes, &out.ResourceAttributes + *out = new(ResourceAttributes) + **out = **in + } else { + out.ResourceAttributes = nil + } + if in.NonResourceAttributes != nil { + in, out := &in.NonResourceAttributes, &out.NonResourceAttributes + *out = new(NonResourceAttributes) + **out = **in + } else { + out.NonResourceAttributes = nil + } + out.User = in.User + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]ExtraValue) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(*ExtraValue) + } + } + } else { + out.Extra = nil + } + return nil + } +} + +func DeepCopy_v1beta1_SubjectAccessReviewStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectAccessReviewStatus) + out := out.(*SubjectAccessReviewStatus) + out.Allowed = in.Allowed + out.Reason = in.Reason + out.EvaluationError = in.EvaluationError + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/authorization/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/authorization/zz_generated.deepcopy.go new file mode 100644 index 00000000..bf808614 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/authorization/zz_generated.deepcopy.go @@ -0,0 +1,196 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package authorization + +import ( + api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authorization_LocalSubjectAccessReview, InType: reflect.TypeOf(&LocalSubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authorization_NonResourceAttributes, InType: reflect.TypeOf(&NonResourceAttributes{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authorization_ResourceAttributes, InType: reflect.TypeOf(&ResourceAttributes{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authorization_SelfSubjectAccessReview, InType: reflect.TypeOf(&SelfSubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authorization_SelfSubjectAccessReviewSpec, InType: reflect.TypeOf(&SelfSubjectAccessReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authorization_SubjectAccessReview, InType: reflect.TypeOf(&SubjectAccessReview{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authorization_SubjectAccessReviewSpec, InType: reflect.TypeOf(&SubjectAccessReviewSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_authorization_SubjectAccessReviewStatus, InType: reflect.TypeOf(&SubjectAccessReviewStatus{})}, + ) +} + +func DeepCopy_authorization_LocalSubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LocalSubjectAccessReview) + out := out.(*LocalSubjectAccessReview) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_authorization_SubjectAccessReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_authorization_NonResourceAttributes(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NonResourceAttributes) + out := out.(*NonResourceAttributes) + out.Path = in.Path + out.Verb = in.Verb + return nil + } +} + +func DeepCopy_authorization_ResourceAttributes(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ResourceAttributes) + out := out.(*ResourceAttributes) + out.Namespace = in.Namespace + out.Verb = in.Verb + out.Group = in.Group + out.Version = in.Version + out.Resource = in.Resource + out.Subresource = in.Subresource + out.Name = in.Name + return nil + } +} + +func DeepCopy_authorization_SelfSubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SelfSubjectAccessReview) + out := out.(*SelfSubjectAccessReview) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_authorization_SelfSubjectAccessReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_authorization_SelfSubjectAccessReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SelfSubjectAccessReviewSpec) + out := out.(*SelfSubjectAccessReviewSpec) + if in.ResourceAttributes != nil { + in, out := &in.ResourceAttributes, &out.ResourceAttributes + *out = new(ResourceAttributes) + **out = **in + } else { + out.ResourceAttributes = nil + } + if in.NonResourceAttributes != nil { + in, out := &in.NonResourceAttributes, &out.NonResourceAttributes + *out = new(NonResourceAttributes) + **out = **in + } else { + out.NonResourceAttributes = nil + } + return nil + } +} + +func DeepCopy_authorization_SubjectAccessReview(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectAccessReview) + out := out.(*SubjectAccessReview) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_authorization_SubjectAccessReviewSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_authorization_SubjectAccessReviewSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectAccessReviewSpec) + out := out.(*SubjectAccessReviewSpec) + if in.ResourceAttributes != nil { + in, out := &in.ResourceAttributes, &out.ResourceAttributes + *out = new(ResourceAttributes) + **out = **in + } else { + out.ResourceAttributes = nil + } + if in.NonResourceAttributes != nil { + in, out := &in.NonResourceAttributes, &out.NonResourceAttributes + *out = new(NonResourceAttributes) + **out = **in + } else { + out.NonResourceAttributes = nil + } + out.User = in.User + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + if in.Extra != nil { + in, out := &in.Extra, &out.Extra + *out = make(map[string]ExtraValue) + for key, val := range *in { + if newVal, err := c.DeepCopy(&val); err != nil { + return err + } else { + (*out)[key] = *newVal.(*ExtraValue) + } + } + } else { + out.Extra = nil + } + return nil + } +} + +func DeepCopy_authorization_SubjectAccessReviewStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubjectAccessReviewStatus) + out := out.(*SubjectAccessReviewStatus) + out.Allowed = in.Allowed + out.Reason = in.Reason + out.EvaluationError = in.EvaluationError + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/deep_copy_generated.go deleted file mode 100644 index d78bad7c..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/deep_copy_generated.go +++ /dev/null @@ -1,165 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package autoscaling - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_autoscaling_CrossVersionObjectReference, - DeepCopy_autoscaling_HorizontalPodAutoscaler, - DeepCopy_autoscaling_HorizontalPodAutoscalerList, - DeepCopy_autoscaling_HorizontalPodAutoscalerSpec, - DeepCopy_autoscaling_HorizontalPodAutoscalerStatus, - DeepCopy_autoscaling_Scale, - DeepCopy_autoscaling_ScaleSpec, - DeepCopy_autoscaling_ScaleStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_autoscaling_CrossVersionObjectReference(in CrossVersionObjectReference, out *CrossVersionObjectReference, c *conversion.Cloner) error { - out.Kind = in.Kind - out.Name = in.Name - out.APIVersion = in.APIVersion - return nil -} - -func DeepCopy_autoscaling_HorizontalPodAutoscaler(in HorizontalPodAutoscaler, out *HorizontalPodAutoscaler, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_autoscaling_HorizontalPodAutoscalerSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_autoscaling_HorizontalPodAutoscalerStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_autoscaling_HorizontalPodAutoscalerList(in HorizontalPodAutoscalerList, out *HorizontalPodAutoscalerList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]HorizontalPodAutoscaler, len(in)) - for i := range in { - if err := DeepCopy_autoscaling_HorizontalPodAutoscaler(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_autoscaling_HorizontalPodAutoscalerSpec(in HorizontalPodAutoscalerSpec, out *HorizontalPodAutoscalerSpec, c *conversion.Cloner) error { - if err := DeepCopy_autoscaling_CrossVersionObjectReference(in.ScaleTargetRef, &out.ScaleTargetRef, c); err != nil { - return err - } - if in.MinReplicas != nil { - in, out := in.MinReplicas, &out.MinReplicas - *out = new(int32) - **out = *in - } else { - out.MinReplicas = nil - } - out.MaxReplicas = in.MaxReplicas - if in.TargetCPUUtilizationPercentage != nil { - in, out := in.TargetCPUUtilizationPercentage, &out.TargetCPUUtilizationPercentage - *out = new(int32) - **out = *in - } else { - out.TargetCPUUtilizationPercentage = nil - } - return nil -} - -func DeepCopy_autoscaling_HorizontalPodAutoscalerStatus(in HorizontalPodAutoscalerStatus, out *HorizontalPodAutoscalerStatus, c *conversion.Cloner) error { - if in.ObservedGeneration != nil { - in, out := in.ObservedGeneration, &out.ObservedGeneration - *out = new(int64) - **out = *in - } else { - out.ObservedGeneration = nil - } - if in.LastScaleTime != nil { - in, out := in.LastScaleTime, &out.LastScaleTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.LastScaleTime = nil - } - out.CurrentReplicas = in.CurrentReplicas - out.DesiredReplicas = in.DesiredReplicas - if in.CurrentCPUUtilizationPercentage != nil { - in, out := in.CurrentCPUUtilizationPercentage, &out.CurrentCPUUtilizationPercentage - *out = new(int32) - **out = *in - } else { - out.CurrentCPUUtilizationPercentage = nil - } - return nil -} - -func DeepCopy_autoscaling_Scale(in Scale, out *Scale, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_autoscaling_ScaleSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_autoscaling_ScaleStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_autoscaling_ScaleSpec(in ScaleSpec, out *ScaleSpec, c *conversion.Cloner) error { - out.Replicas = in.Replicas - return nil -} - -func DeepCopy_autoscaling_ScaleStatus(in ScaleStatus, out *ScaleStatus, c *conversion.Cloner) error { - out.Replicas = in.Replicas - out.Selector = in.Selector - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/doc.go new file mode 100644 index 00000000..2c770186 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package autoscaling diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/install/install.go index 6e226a06..7cb61126 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -114,7 +114,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - autoscaling.AddToScheme(api.Scheme) + if err := autoscaling.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -123,7 +126,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1.SchemeGroupVersion: - v1.AddToScheme(api.Scheme) + if err := v1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/register.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/register.go index 6a4fb747..0eed5d2c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,27 +28,28 @@ const GroupName = "autoscaling" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Scale{}, &HorizontalPodAutoscaler{}, &HorizontalPodAutoscalerList{}, &api.ListOptions{}, ) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/types.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/types.go index caafcde3..78e7327d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,13 +24,13 @@ import ( // Scale represents a scaling request for a resource. type Scale struct { unversioned.TypeMeta `json:",inline"` - // Standard object metadata; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata. + // Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata. api.ObjectMeta `json:"metadata,omitempty"` - // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Spec ScaleSpec `json:"spec,omitempty"` - // current status of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only. Status ScaleStatus `json:"status,omitempty"` } @@ -48,15 +48,15 @@ type ScaleStatus struct { // label query over pods that should match the replicas count. This is same // as the label selector but in the string format to avoid introspection // by clients. The string will be in the same format as the query-param syntax. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector string `json:"selector,omitempty"` } // CrossVersionObjectReference contains enough information to let you identify the referred resource. type CrossVersionObjectReference struct { - // Kind of the referent; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds" + // Kind of the referent; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds" Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` - // Name of the referent; More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // Name of the referent; More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names Name string `json:"name" protobuf:"bytes,2,opt,name=name"` // API version of the referent APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,3,opt,name=apiVersion"` @@ -103,7 +103,7 @@ type HorizontalPodAutoscaler struct { unversioned.TypeMeta `json:",inline"` api.ObjectMeta `json:"metadata,omitempty"` - // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Spec HorizontalPodAutoscalerSpec `json:"spec,omitempty"` // current information about the autoscaler. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/deep_copy_generated.go deleted file mode 100644 index 6932ba63..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/deep_copy_generated.go +++ /dev/null @@ -1,166 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - api_v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1_CrossVersionObjectReference, - DeepCopy_v1_HorizontalPodAutoscaler, - DeepCopy_v1_HorizontalPodAutoscalerList, - DeepCopy_v1_HorizontalPodAutoscalerSpec, - DeepCopy_v1_HorizontalPodAutoscalerStatus, - DeepCopy_v1_Scale, - DeepCopy_v1_ScaleSpec, - DeepCopy_v1_ScaleStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1_CrossVersionObjectReference(in CrossVersionObjectReference, out *CrossVersionObjectReference, c *conversion.Cloner) error { - out.Kind = in.Kind - out.Name = in.Name - out.APIVersion = in.APIVersion - return nil -} - -func DeepCopy_v1_HorizontalPodAutoscaler(in HorizontalPodAutoscaler, out *HorizontalPodAutoscaler, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_HorizontalPodAutoscalerSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_HorizontalPodAutoscalerStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_HorizontalPodAutoscalerList(in HorizontalPodAutoscalerList, out *HorizontalPodAutoscalerList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]HorizontalPodAutoscaler, len(in)) - for i := range in { - if err := DeepCopy_v1_HorizontalPodAutoscaler(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_HorizontalPodAutoscalerSpec(in HorizontalPodAutoscalerSpec, out *HorizontalPodAutoscalerSpec, c *conversion.Cloner) error { - if err := DeepCopy_v1_CrossVersionObjectReference(in.ScaleTargetRef, &out.ScaleTargetRef, c); err != nil { - return err - } - if in.MinReplicas != nil { - in, out := in.MinReplicas, &out.MinReplicas - *out = new(int32) - **out = *in - } else { - out.MinReplicas = nil - } - out.MaxReplicas = in.MaxReplicas - if in.TargetCPUUtilizationPercentage != nil { - in, out := in.TargetCPUUtilizationPercentage, &out.TargetCPUUtilizationPercentage - *out = new(int32) - **out = *in - } else { - out.TargetCPUUtilizationPercentage = nil - } - return nil -} - -func DeepCopy_v1_HorizontalPodAutoscalerStatus(in HorizontalPodAutoscalerStatus, out *HorizontalPodAutoscalerStatus, c *conversion.Cloner) error { - if in.ObservedGeneration != nil { - in, out := in.ObservedGeneration, &out.ObservedGeneration - *out = new(int64) - **out = *in - } else { - out.ObservedGeneration = nil - } - if in.LastScaleTime != nil { - in, out := in.LastScaleTime, &out.LastScaleTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.LastScaleTime = nil - } - out.CurrentReplicas = in.CurrentReplicas - out.DesiredReplicas = in.DesiredReplicas - if in.CurrentCPUUtilizationPercentage != nil { - in, out := in.CurrentCPUUtilizationPercentage, &out.CurrentCPUUtilizationPercentage - *out = new(int32) - **out = *in - } else { - out.CurrentCPUUtilizationPercentage = nil - } - return nil -} - -func DeepCopy_v1_Scale(in Scale, out *Scale, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_ScaleSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_ScaleStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_ScaleSpec(in ScaleSpec, out *ScaleSpec, c *conversion.Cloner) error { - out.Replicas = in.Replicas - return nil -} - -func DeepCopy_v1_ScaleStatus(in ScaleStatus, out *ScaleStatus, c *conversion.Cloner) error { - out.Replicas = in.Replicas - out.Selector = in.Selector - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/defaults.go index 3fb24c46..e374add3 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,8 +20,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_HorizontalPodAutoscaler, ) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/doc.go index 1c67cc3a..be1c70fd 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/autoscaling + package v1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.pb.go index e90dd5d6..751c1e9e 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -42,6 +42,9 @@ import math "math" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" +import strings "strings" +import reflect "reflect" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -49,37 +52,49 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *CrossVersionObjectReference) Reset() { *m = CrossVersionObjectReference{} } -func (m *CrossVersionObjectReference) String() string { return proto.CompactTextString(m) } -func (*CrossVersionObjectReference) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } -func (m *HorizontalPodAutoscaler) String() string { return proto.CompactTextString(m) } -func (*HorizontalPodAutoscaler) ProtoMessage() {} +func (m *CrossVersionObjectReference) Reset() { *m = CrossVersionObjectReference{} } +func (*CrossVersionObjectReference) ProtoMessage() {} +func (*CrossVersionObjectReference) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{0} +} -func (m *HorizontalPodAutoscalerList) Reset() { *m = HorizontalPodAutoscalerList{} } -func (m *HorizontalPodAutoscalerList) String() string { return proto.CompactTextString(m) } -func (*HorizontalPodAutoscalerList) ProtoMessage() {} +func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } +func (*HorizontalPodAutoscaler) ProtoMessage() {} +func (*HorizontalPodAutoscaler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *HorizontalPodAutoscalerSpec) Reset() { *m = HorizontalPodAutoscalerSpec{} } -func (m *HorizontalPodAutoscalerSpec) String() string { return proto.CompactTextString(m) } -func (*HorizontalPodAutoscalerSpec) ProtoMessage() {} +func (m *HorizontalPodAutoscalerList) Reset() { *m = HorizontalPodAutoscalerList{} } +func (*HorizontalPodAutoscalerList) ProtoMessage() {} +func (*HorizontalPodAutoscalerList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{2} +} -func (m *HorizontalPodAutoscalerStatus) Reset() { *m = HorizontalPodAutoscalerStatus{} } -func (m *HorizontalPodAutoscalerStatus) String() string { return proto.CompactTextString(m) } -func (*HorizontalPodAutoscalerStatus) ProtoMessage() {} +func (m *HorizontalPodAutoscalerSpec) Reset() { *m = HorizontalPodAutoscalerSpec{} } +func (*HorizontalPodAutoscalerSpec) ProtoMessage() {} +func (*HorizontalPodAutoscalerSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{3} +} -func (m *Scale) Reset() { *m = Scale{} } -func (m *Scale) String() string { return proto.CompactTextString(m) } -func (*Scale) ProtoMessage() {} +func (m *HorizontalPodAutoscalerStatus) Reset() { *m = HorizontalPodAutoscalerStatus{} } +func (*HorizontalPodAutoscalerStatus) ProtoMessage() {} +func (*HorizontalPodAutoscalerStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{4} +} -func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } -func (m *ScaleSpec) String() string { return proto.CompactTextString(m) } -func (*ScaleSpec) ProtoMessage() {} +func (m *Scale) Reset() { *m = Scale{} } +func (*Scale) ProtoMessage() {} +func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } -func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } -func (m *ScaleStatus) String() string { return proto.CompactTextString(m) } -func (*ScaleStatus) ProtoMessage() {} +func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } +func (*ScaleSpec) ProtoMessage() {} +func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } + +func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } +func (*ScaleStatus) ProtoMessage() {} +func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } func init() { proto.RegisterType((*CrossVersionObjectReference)(nil), "k8s.io.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference") @@ -511,6 +526,109 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *CrossVersionObjectReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CrossVersionObjectReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscaler) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscaler{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "HorizontalPodAutoscalerSpec", "HorizontalPodAutoscalerSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "HorizontalPodAutoscalerStatus", "HorizontalPodAutoscalerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "HorizontalPodAutoscaler", "HorizontalPodAutoscaler", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerSpec{`, + `ScaleTargetRef:` + strings.Replace(strings.Replace(this.ScaleTargetRef.String(), "CrossVersionObjectReference", "CrossVersionObjectReference", 1), `&`, ``, 1) + `,`, + `MinReplicas:` + valueToStringGenerated(this.MinReplicas) + `,`, + `MaxReplicas:` + fmt.Sprintf("%v", this.MaxReplicas) + `,`, + `TargetCPUUtilizationPercentage:` + valueToStringGenerated(this.TargetCPUUtilizationPercentage) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerStatus{`, + `ObservedGeneration:` + valueToStringGenerated(this.ObservedGeneration) + `,`, + `LastScaleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScaleTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `CurrentReplicas:` + fmt.Sprintf("%v", this.CurrentReplicas) + `,`, + `DesiredReplicas:` + fmt.Sprintf("%v", this.DesiredReplicas) + `,`, + `CurrentCPUUtilizationPercentage:` + valueToStringGenerated(this.CurrentCPUUtilizationPercentage) + `,`, + `}`, + }, "") + return s +} +func (this *Scale) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Scale{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ScaleSpec", "ScaleSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ScaleStatus", "ScaleStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ScaleSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScaleSpec{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `}`, + }, "") + return s +} +func (this *ScaleStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScaleStatus{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `Selector:` + fmt.Sprintf("%v", this.Selector) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *CrossVersionObjectReference) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -1610,3 +1728,59 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 825 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x8f, 0xdb, 0x44, + 0x14, 0x8f, 0xf3, 0x51, 0x6d, 0xc7, 0xec, 0x2e, 0x0c, 0x52, 0x1b, 0x6d, 0x85, 0xbd, 0x0a, 0x1c, + 0x16, 0xd1, 0xda, 0x4a, 0x44, 0x11, 0x3d, 0xae, 0x17, 0x95, 0x56, 0x74, 0xe9, 0x6a, 0xb6, 0xad, + 0x10, 0x12, 0x48, 0x13, 0xfb, 0xd5, 0x9d, 0x26, 0x1e, 0x5b, 0x33, 0xe3, 0x08, 0xf5, 0xc4, 0x89, + 0x33, 0x17, 0x0e, 0xfc, 0x3b, 0x9c, 0xf6, 0x46, 0x8f, 0x9c, 0x22, 0xd6, 0x88, 0xff, 0x82, 0x03, + 0xf2, 0x64, 0xea, 0x7c, 0xec, 0x3a, 0x6d, 0x04, 0xbd, 0x65, 0xe6, 0xfd, 0x3e, 0xde, 0xbc, 0xf7, + 0xfc, 0x82, 0xee, 0x8c, 0x3e, 0x97, 0x1e, 0x4b, 0xfd, 0x51, 0x3e, 0x04, 0xc1, 0x41, 0x81, 0xf4, + 0xb3, 0x51, 0xec, 0xd3, 0x8c, 0x49, 0x9f, 0xe6, 0x2a, 0x95, 0x21, 0x1d, 0x33, 0x1e, 0xfb, 0x93, + 0xbe, 0x1f, 0x03, 0x07, 0x41, 0x15, 0x44, 0x5e, 0x26, 0x52, 0x95, 0xe2, 0x8f, 0x67, 0x54, 0x6f, + 0x4e, 0xf5, 0xb2, 0x51, 0xec, 0x95, 0x54, 0x6f, 0x81, 0xea, 0x4d, 0xfa, 0x7b, 0xb7, 0x62, 0xa6, + 0x9e, 0xe5, 0x43, 0x2f, 0x4c, 0x13, 0x3f, 0x4e, 0xe3, 0xd4, 0xd7, 0x0a, 0xc3, 0xfc, 0xa9, 0x3e, + 0xe9, 0x83, 0xfe, 0x35, 0x53, 0xde, 0xbb, 0x5d, 0x9b, 0x94, 0x9f, 0xf3, 0x09, 0x08, 0xc9, 0x52, + 0x0e, 0xd1, 0x6a, 0x42, 0x7b, 0x37, 0xeb, 0x69, 0x17, 0xd3, 0xdf, 0xbb, 0x75, 0x39, 0x5a, 0xe4, + 0x5c, 0xb1, 0x04, 0x2e, 0xc0, 0xfb, 0x97, 0xc3, 0x73, 0xc5, 0xc6, 0x3e, 0xe3, 0x4a, 0x2a, 0xb1, + 0x4a, 0xe9, 0xfd, 0x62, 0xa1, 0x1b, 0x47, 0x22, 0x95, 0xf2, 0xc9, 0x2c, 0xe5, 0x87, 0xc3, 0xe7, + 0x10, 0x2a, 0x02, 0x4f, 0x41, 0x00, 0x0f, 0x01, 0xef, 0xa3, 0xf6, 0x88, 0xf1, 0xa8, 0x6b, 0xed, + 0x5b, 0x07, 0x57, 0x83, 0x77, 0xce, 0xa6, 0x6e, 0xa3, 0x98, 0xba, 0xed, 0xaf, 0x18, 0x8f, 0x88, + 0x8e, 0x94, 0x08, 0x4e, 0x13, 0xe8, 0x36, 0x97, 0x11, 0x5f, 0xd3, 0x04, 0x88, 0x8e, 0xe0, 0x01, + 0x42, 0x34, 0x63, 0xc6, 0xa0, 0xdb, 0xd2, 0x38, 0x6c, 0x70, 0xe8, 0xf0, 0xe4, 0xbe, 0x89, 0x90, + 0x05, 0x54, 0xef, 0xf7, 0x26, 0xba, 0x7e, 0x2f, 0x15, 0xec, 0x45, 0xca, 0x15, 0x1d, 0x9f, 0xa4, + 0xd1, 0xa1, 0xe9, 0x16, 0x08, 0xfc, 0x0d, 0xda, 0x4a, 0x40, 0xd1, 0x88, 0x2a, 0xaa, 0xf3, 0xb2, + 0x07, 0x07, 0x5e, 0x6d, 0x9f, 0xbd, 0x49, 0xdf, 0x9b, 0x3d, 0xea, 0x18, 0x14, 0x9d, 0xfb, 0xce, + 0xef, 0x48, 0xa5, 0x86, 0x9f, 0xa1, 0xb6, 0xcc, 0x20, 0xd4, 0x6f, 0xb1, 0x07, 0x77, 0xbd, 0x37, + 0x9e, 0x1e, 0xaf, 0x26, 0xd7, 0xd3, 0x0c, 0xc2, 0x79, 0x4d, 0xca, 0x13, 0xd1, 0x0e, 0x38, 0x43, + 0x57, 0xa4, 0xa2, 0x2a, 0x97, 0xba, 0x1e, 0xf6, 0xe0, 0xde, 0xff, 0xe0, 0xa5, 0xf5, 0x82, 0x1d, + 0xe3, 0x76, 0x65, 0x76, 0x26, 0xc6, 0xa7, 0xf7, 0xb7, 0x85, 0x6e, 0xd4, 0x30, 0x1f, 0x30, 0xa9, + 0xf0, 0x77, 0x17, 0xaa, 0xea, 0xaf, 0xa9, 0xea, 0xc2, 0x8c, 0x7b, 0x25, 0x5d, 0x17, 0xf7, 0x5d, + 0x63, 0xbd, 0xf5, 0xea, 0x66, 0xa1, 0xb4, 0x31, 0xea, 0x30, 0x05, 0x89, 0xec, 0x36, 0xf7, 0x5b, + 0x07, 0xf6, 0x20, 0xf8, 0xef, 0xef, 0x0d, 0xb6, 0x8d, 0x5d, 0xe7, 0x7e, 0x29, 0x4c, 0x66, 0xfa, + 0xbd, 0x7f, 0x9a, 0xb5, 0xef, 0x2c, 0xeb, 0x8f, 0x7f, 0xb2, 0xd0, 0x8e, 0x3e, 0x3e, 0xa2, 0x22, + 0x86, 0x72, 0xd4, 0xcd, 0x73, 0x37, 0x69, 0xf7, 0x9a, 0x4f, 0x26, 0xb8, 0x66, 0xd2, 0xda, 0x39, + 0x5d, 0x72, 0x21, 0x2b, 0xae, 0xb8, 0x8f, 0xec, 0x84, 0x71, 0x02, 0xd9, 0x98, 0x85, 0x54, 0xea, + 0x99, 0xeb, 0x04, 0xbb, 0xc5, 0xd4, 0xb5, 0x8f, 0xe7, 0xd7, 0x64, 0x11, 0x83, 0x6f, 0x23, 0x3b, + 0xa1, 0x3f, 0x54, 0x94, 0x96, 0xa6, 0xbc, 0x6f, 0xfc, 0xec, 0xe3, 0x79, 0x88, 0x2c, 0xe2, 0xf0, + 0x73, 0xe4, 0x28, 0x6d, 0x7b, 0x74, 0xf2, 0xf8, 0xb1, 0x62, 0x63, 0xf6, 0x82, 0x2a, 0x96, 0xf2, + 0x13, 0x10, 0x21, 0x70, 0x45, 0x63, 0xe8, 0xb6, 0xb5, 0x52, 0xaf, 0x98, 0xba, 0xce, 0xa3, 0xb5, + 0x48, 0xf2, 0x1a, 0xa5, 0xde, 0x6f, 0x2d, 0xf4, 0xc1, 0xda, 0x01, 0xc5, 0x77, 0x11, 0x4e, 0x87, + 0x12, 0xc4, 0x04, 0xa2, 0x2f, 0x67, 0xdb, 0xa8, 0x5c, 0x0b, 0x65, 0x0f, 0x5a, 0xc1, 0xb5, 0x62, + 0xea, 0xe2, 0x87, 0x17, 0xa2, 0xe4, 0x12, 0x06, 0x8e, 0xd0, 0xf6, 0x98, 0x4a, 0x35, 0xab, 0x32, + 0x33, 0x1b, 0xc8, 0x1e, 0x7c, 0xf2, 0x86, 0x53, 0x5b, 0x52, 0x82, 0xf7, 0x8a, 0xa9, 0xbb, 0xfd, + 0x60, 0x51, 0x85, 0x2c, 0x8b, 0xe2, 0x43, 0xb4, 0x1b, 0xe6, 0x42, 0x00, 0x57, 0x2b, 0x65, 0xbf, + 0x6e, 0xca, 0xbe, 0x7b, 0xb4, 0x1c, 0x26, 0xab, 0xf8, 0x52, 0x22, 0x02, 0xc9, 0x04, 0x44, 0x95, + 0x44, 0x7b, 0x59, 0xe2, 0x8b, 0xe5, 0x30, 0x59, 0xc5, 0xe3, 0x04, 0xb9, 0x46, 0xb5, 0xb6, 0x85, + 0x1d, 0x2d, 0xf9, 0x61, 0x31, 0x75, 0xdd, 0xa3, 0xf5, 0x50, 0xf2, 0x3a, 0xad, 0xde, 0xaf, 0x4d, + 0xd4, 0xd1, 0x25, 0x78, 0x8b, 0xbb, 0xf6, 0xc9, 0xd2, 0xae, 0xfd, 0x74, 0x83, 0x8f, 0x4f, 0x67, + 0x56, 0xbb, 0x59, 0xbf, 0x5f, 0xd9, 0xac, 0x9f, 0x6d, 0xac, 0xbc, 0x7e, 0x8f, 0xde, 0x41, 0x57, + 0xab, 0x04, 0xf0, 0x4d, 0xb4, 0x25, 0x5e, 0xf5, 0xd4, 0xd2, 0x0d, 0xa8, 0x76, 0x60, 0xd5, 0xcc, + 0x0a, 0xd1, 0x63, 0xc8, 0x5e, 0x70, 0xd8, 0x8c, 0x5c, 0xa2, 0x25, 0x8c, 0x21, 0x54, 0xa9, 0x30, + 0xff, 0xb5, 0x15, 0xfa, 0xd4, 0xdc, 0x93, 0x0a, 0x11, 0x7c, 0x74, 0x76, 0xee, 0x34, 0x5e, 0x9e, + 0x3b, 0x8d, 0x3f, 0xce, 0x9d, 0xc6, 0x8f, 0x85, 0x63, 0x9d, 0x15, 0x8e, 0xf5, 0xb2, 0x70, 0xac, + 0x3f, 0x0b, 0xc7, 0xfa, 0xf9, 0x2f, 0xa7, 0xf1, 0x6d, 0x73, 0xd2, 0xff, 0x37, 0x00, 0x00, 0xff, + 0xff, 0xd4, 0x0f, 0x6a, 0x59, 0x5a, 0x09, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.proto index 14f1e3db..2a58b843 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ package k8s.io.kubernetes.pkg.apis.autoscaling.v1; import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". @@ -30,10 +31,10 @@ option go_package = "v1"; // CrossVersionObjectReference contains enough information to let you identify the referred resource. message CrossVersionObjectReference { - // Kind of the referent; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds" + // Kind of the referent; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds" optional string kind = 1; - // Name of the referent; More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // Name of the referent; More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names optional string name = 2; // API version of the referent @@ -42,10 +43,10 @@ message CrossVersionObjectReference { // configuration of a horizontal pod autoscaler. message HorizontalPodAutoscaler { - // Standard object metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // Standard object metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; - // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. optional HorizontalPodAutoscalerSpec spec = 2; // current information about the autoscaler. @@ -100,13 +101,13 @@ message HorizontalPodAutoscalerStatus { // Scale represents a scaling request for a resource. message Scale { - // Standard object metadata; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata. + // Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata. optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; - // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. optional ScaleSpec spec = 2; - // current status of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only. optional ScaleStatus status = 3; } @@ -124,7 +125,7 @@ message ScaleStatus { // label query over pods that should match the replicas count. This is same // as the label selector but in the string format to avoid introspection // by clients. The string will be in the same format as the query-param syntax. - // More info about label selectors: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info about label selectors: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors optional string selector = 2; } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/register.go index fed2cdf4..d7b7df92 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,13 +29,13 @@ const GroupName = "autoscaling" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &HorizontalPodAutoscaler{}, &HorizontalPodAutoscalerList{}, @@ -44,4 +44,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/types.go index 7acb5272..4ce30124 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,9 +23,9 @@ import ( // CrossVersionObjectReference contains enough information to let you identify the referred resource. type CrossVersionObjectReference struct { - // Kind of the referent; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds" + // Kind of the referent; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds" Kind string `json:"kind" protobuf:"bytes,1,opt,name=kind"` - // Name of the referent; More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // Name of the referent; More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names Name string `json:"name" protobuf:"bytes,2,opt,name=name"` // API version of the referent APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,3,opt,name=apiVersion"` @@ -70,10 +70,10 @@ type HorizontalPodAutoscalerStatus struct { // configuration of a horizontal pod autoscaler. type HorizontalPodAutoscaler struct { unversioned.TypeMeta `json:",inline"` - // Standard object metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // Standard object metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Spec HorizontalPodAutoscalerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // current information about the autoscaler. @@ -93,13 +93,13 @@ type HorizontalPodAutoscalerList struct { // Scale represents a scaling request for a resource. type Scale struct { unversioned.TypeMeta `json:",inline"` - // Standard object metadata; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata. + // Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata. v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Spec ScaleSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // current status of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only. Status ScaleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -117,6 +117,6 @@ type ScaleStatus struct { // label query over pods that should match the replicas count. This is same // as the label selector but in the string format to avoid introspection // by clients. The string will be in the same format as the query-param syntax. - // More info about label selectors: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info about label selectors: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector string `json:"selector,omitempty" protobuf:"bytes,2,opt,name=selector"` } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/types_swagger_doc_generated.go index 904e36a6..cf7c7c83 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,8 +29,8 @@ package v1 // AUTO-GENERATED FUNCTIONS START HERE var map_CrossVersionObjectReference = map[string]string{ "": "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - "kind": "Kind of the referent; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds\"", - "name": "Name of the referent; More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names", + "kind": "Kind of the referent; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds\"", + "name": "Name of the referent; More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", "apiVersion": "API version of the referent", } @@ -40,8 +40,8 @@ func (CrossVersionObjectReference) SwaggerDoc() map[string]string { var map_HorizontalPodAutoscaler = map[string]string{ "": "configuration of a horizontal pod autoscaler.", - "metadata": "Standard object metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "behaviour of autoscaler. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status.", + "metadata": "Standard object metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "behaviour of autoscaler. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status.", "status": "current information about the autoscaler.", } @@ -86,9 +86,9 @@ func (HorizontalPodAutoscalerStatus) SwaggerDoc() map[string]string { var map_Scale = map[string]string{ "": "Scale represents a scaling request for a resource.", - "metadata": "Standard object metadata; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata.", - "spec": "defines the behavior of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status.", - "status": "current status of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. Read-only.", + "metadata": "Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata.", + "spec": "defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status.", + "status": "current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only.", } func (Scale) SwaggerDoc() map[string]string { @@ -107,7 +107,7 @@ func (ScaleSpec) SwaggerDoc() map[string]string { var map_ScaleStatus = map[string]string{ "": "ScaleStatus represents the current status of a scale subresource.", "replicas": "actual number of observed instances of the scaled object.", - "selector": "label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", + "selector": "label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", } func (ScaleStatus) SwaggerDoc() map[string]string { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/zz_generated.conversion.go similarity index 97% rename from vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/conversion_generated.go rename to vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/zz_generated.conversion.go index 11ca6a05..8a6c6c2e 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,10 +24,17 @@ import ( api "k8s.io/kubernetes/pkg/api" autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1_CrossVersionObjectReference_To_autoscaling_CrossVersionObjectReference, Convert_autoscaling_CrossVersionObjectReference_To_v1_CrossVersionObjectReference, Convert_v1_HorizontalPodAutoscaler_To_autoscaling_HorizontalPodAutoscaler, @@ -44,10 +51,7 @@ func init() { Convert_autoscaling_ScaleSpec_To_v1_ScaleSpec, Convert_v1_ScaleStatus_To_autoscaling_ScaleStatus, Convert_autoscaling_ScaleStatus_To_v1_ScaleStatus, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v1_CrossVersionObjectReference_To_autoscaling_CrossVersionObjectReference(in *CrossVersionObjectReference, out *autoscaling.CrossVersionObjectReference, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000..70ed6d02 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/v1/zz_generated.deepcopy.go @@ -0,0 +1,186 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + api_v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_CrossVersionObjectReference, InType: reflect.TypeOf(&CrossVersionObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HorizontalPodAutoscaler, InType: reflect.TypeOf(&HorizontalPodAutoscaler{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HorizontalPodAutoscalerList, InType: reflect.TypeOf(&HorizontalPodAutoscalerList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HorizontalPodAutoscalerSpec, InType: reflect.TypeOf(&HorizontalPodAutoscalerSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_HorizontalPodAutoscalerStatus, InType: reflect.TypeOf(&HorizontalPodAutoscalerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Scale, InType: reflect.TypeOf(&Scale{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ScaleSpec, InType: reflect.TypeOf(&ScaleSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_ScaleStatus, InType: reflect.TypeOf(&ScaleStatus{})}, + ) +} + +func DeepCopy_v1_CrossVersionObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CrossVersionObjectReference) + out := out.(*CrossVersionObjectReference) + out.Kind = in.Kind + out.Name = in.Name + out.APIVersion = in.APIVersion + return nil + } +} + +func DeepCopy_v1_HorizontalPodAutoscaler(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscaler) + out := out.(*HorizontalPodAutoscaler) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_HorizontalPodAutoscalerSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_HorizontalPodAutoscalerStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_HorizontalPodAutoscalerList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerList) + out := out.(*HorizontalPodAutoscalerList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]HorizontalPodAutoscaler, len(*in)) + for i := range *in { + if err := DeepCopy_v1_HorizontalPodAutoscaler(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_HorizontalPodAutoscalerSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerSpec) + out := out.(*HorizontalPodAutoscalerSpec) + out.ScaleTargetRef = in.ScaleTargetRef + if in.MinReplicas != nil { + in, out := &in.MinReplicas, &out.MinReplicas + *out = new(int32) + **out = **in + } else { + out.MinReplicas = nil + } + out.MaxReplicas = in.MaxReplicas + if in.TargetCPUUtilizationPercentage != nil { + in, out := &in.TargetCPUUtilizationPercentage, &out.TargetCPUUtilizationPercentage + *out = new(int32) + **out = **in + } else { + out.TargetCPUUtilizationPercentage = nil + } + return nil + } +} + +func DeepCopy_v1_HorizontalPodAutoscalerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerStatus) + out := out.(*HorizontalPodAutoscalerStatus) + if in.ObservedGeneration != nil { + in, out := &in.ObservedGeneration, &out.ObservedGeneration + *out = new(int64) + **out = **in + } else { + out.ObservedGeneration = nil + } + if in.LastScaleTime != nil { + in, out := &in.LastScaleTime, &out.LastScaleTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.LastScaleTime = nil + } + out.CurrentReplicas = in.CurrentReplicas + out.DesiredReplicas = in.DesiredReplicas + if in.CurrentCPUUtilizationPercentage != nil { + in, out := &in.CurrentCPUUtilizationPercentage, &out.CurrentCPUUtilizationPercentage + *out = new(int32) + **out = **in + } else { + out.CurrentCPUUtilizationPercentage = nil + } + return nil + } +} + +func DeepCopy_v1_Scale(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Scale) + out := out.(*Scale) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1_ScaleSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleSpec) + out := out.(*ScaleSpec) + out.Replicas = in.Replicas + return nil + } +} + +func DeepCopy_v1_ScaleStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleStatus) + out := out.(*ScaleStatus) + out.Replicas = in.Replicas + out.Selector = in.Selector + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/zz_generated.deepcopy.go new file mode 100644 index 00000000..dde5db7e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/autoscaling/zz_generated.deepcopy.go @@ -0,0 +1,186 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package autoscaling + +import ( + api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_CrossVersionObjectReference, InType: reflect.TypeOf(&CrossVersionObjectReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_HorizontalPodAutoscaler, InType: reflect.TypeOf(&HorizontalPodAutoscaler{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_HorizontalPodAutoscalerList, InType: reflect.TypeOf(&HorizontalPodAutoscalerList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_HorizontalPodAutoscalerSpec, InType: reflect.TypeOf(&HorizontalPodAutoscalerSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_HorizontalPodAutoscalerStatus, InType: reflect.TypeOf(&HorizontalPodAutoscalerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_Scale, InType: reflect.TypeOf(&Scale{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_ScaleSpec, InType: reflect.TypeOf(&ScaleSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_autoscaling_ScaleStatus, InType: reflect.TypeOf(&ScaleStatus{})}, + ) +} + +func DeepCopy_autoscaling_CrossVersionObjectReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CrossVersionObjectReference) + out := out.(*CrossVersionObjectReference) + out.Kind = in.Kind + out.Name = in.Name + out.APIVersion = in.APIVersion + return nil + } +} + +func DeepCopy_autoscaling_HorizontalPodAutoscaler(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscaler) + out := out.(*HorizontalPodAutoscaler) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_autoscaling_HorizontalPodAutoscalerSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_autoscaling_HorizontalPodAutoscalerStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_autoscaling_HorizontalPodAutoscalerList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerList) + out := out.(*HorizontalPodAutoscalerList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]HorizontalPodAutoscaler, len(*in)) + for i := range *in { + if err := DeepCopy_autoscaling_HorizontalPodAutoscaler(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_autoscaling_HorizontalPodAutoscalerSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerSpec) + out := out.(*HorizontalPodAutoscalerSpec) + out.ScaleTargetRef = in.ScaleTargetRef + if in.MinReplicas != nil { + in, out := &in.MinReplicas, &out.MinReplicas + *out = new(int32) + **out = **in + } else { + out.MinReplicas = nil + } + out.MaxReplicas = in.MaxReplicas + if in.TargetCPUUtilizationPercentage != nil { + in, out := &in.TargetCPUUtilizationPercentage, &out.TargetCPUUtilizationPercentage + *out = new(int32) + **out = **in + } else { + out.TargetCPUUtilizationPercentage = nil + } + return nil + } +} + +func DeepCopy_autoscaling_HorizontalPodAutoscalerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerStatus) + out := out.(*HorizontalPodAutoscalerStatus) + if in.ObservedGeneration != nil { + in, out := &in.ObservedGeneration, &out.ObservedGeneration + *out = new(int64) + **out = **in + } else { + out.ObservedGeneration = nil + } + if in.LastScaleTime != nil { + in, out := &in.LastScaleTime, &out.LastScaleTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.LastScaleTime = nil + } + out.CurrentReplicas = in.CurrentReplicas + out.DesiredReplicas = in.DesiredReplicas + if in.CurrentCPUUtilizationPercentage != nil { + in, out := &in.CurrentCPUUtilizationPercentage, &out.CurrentCPUUtilizationPercentage + *out = new(int32) + **out = **in + } else { + out.CurrentCPUUtilizationPercentage = nil + } + return nil + } +} + +func DeepCopy_autoscaling_Scale(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Scale) + out := out.(*Scale) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + out.Status = in.Status + return nil + } +} + +func DeepCopy_autoscaling_ScaleSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleSpec) + out := out.(*ScaleSpec) + out.Replicas = in.Replicas + return nil + } +} + +func DeepCopy_autoscaling_ScaleStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleStatus) + out := out.(*ScaleStatus) + out.Replicas = in.Replicas + out.Selector = in.Selector + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/deep_copy_generated.go deleted file mode 100644 index 6e08ec41..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/deep_copy_generated.go +++ /dev/null @@ -1,284 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package batch - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_batch_Job, - DeepCopy_batch_JobCondition, - DeepCopy_batch_JobList, - DeepCopy_batch_JobSpec, - DeepCopy_batch_JobStatus, - DeepCopy_batch_JobTemplate, - DeepCopy_batch_JobTemplateSpec, - DeepCopy_batch_ScheduledJob, - DeepCopy_batch_ScheduledJobList, - DeepCopy_batch_ScheduledJobSpec, - DeepCopy_batch_ScheduledJobStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_batch_Job(in Job, out *Job, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_batch_JobSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_batch_JobStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_batch_JobCondition(in JobCondition, out *JobCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_batch_JobList(in JobList, out *JobList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Job, len(in)) - for i := range in { - if err := DeepCopy_batch_Job(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_batch_JobSpec(in JobSpec, out *JobSpec, c *conversion.Cloner) error { - if in.Parallelism != nil { - in, out := in.Parallelism, &out.Parallelism - *out = new(int32) - **out = *in - } else { - out.Parallelism = nil - } - if in.Completions != nil { - in, out := in.Completions, &out.Completions - *out = new(int32) - **out = *in - } else { - out.Completions = nil - } - if in.ActiveDeadlineSeconds != nil { - in, out := in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.ActiveDeadlineSeconds = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if in.ManualSelector != nil { - in, out := in.ManualSelector, &out.ManualSelector - *out = new(bool) - **out = *in - } else { - out.ManualSelector = nil - } - if err := api.DeepCopy_api_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_batch_JobStatus(in JobStatus, out *JobStatus, c *conversion.Cloner) error { - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]JobCondition, len(in)) - for i := range in { - if err := DeepCopy_batch_JobCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if in.StartTime != nil { - in, out := in.StartTime, &out.StartTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.StartTime = nil - } - if in.CompletionTime != nil { - in, out := in.CompletionTime, &out.CompletionTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.CompletionTime = nil - } - out.Active = in.Active - out.Succeeded = in.Succeeded - out.Failed = in.Failed - return nil -} - -func DeepCopy_batch_JobTemplate(in JobTemplate, out *JobTemplate, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_batch_JobTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_batch_JobTemplateSpec(in JobTemplateSpec, out *JobTemplateSpec, c *conversion.Cloner) error { - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_batch_JobSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_batch_ScheduledJob(in ScheduledJob, out *ScheduledJob, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_batch_ScheduledJobSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_batch_ScheduledJobStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_batch_ScheduledJobList(in ScheduledJobList, out *ScheduledJobList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ScheduledJob, len(in)) - for i := range in { - if err := DeepCopy_batch_ScheduledJob(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_batch_ScheduledJobSpec(in ScheduledJobSpec, out *ScheduledJobSpec, c *conversion.Cloner) error { - out.Schedule = in.Schedule - if in.StartingDeadlineSeconds != nil { - in, out := in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.StartingDeadlineSeconds = nil - } - out.ConcurrencyPolicy = in.ConcurrencyPolicy - if in.Suspend != nil { - in, out := in.Suspend, &out.Suspend - *out = new(bool) - **out = *in - } else { - out.Suspend = nil - } - if err := DeepCopy_batch_JobTemplateSpec(in.JobTemplate, &out.JobTemplate, c); err != nil { - return err - } - return nil -} - -func DeepCopy_batch_ScheduledJobStatus(in ScheduledJobStatus, out *ScheduledJobStatus, c *conversion.Cloner) error { - if in.Active != nil { - in, out := in.Active, &out.Active - *out = make([]api.ObjectReference, len(in)) - for i := range in { - if err := api.DeepCopy_api_ObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Active = nil - } - if in.LastScheduleTime != nil { - in, out := in.LastScheduleTime, &out.LastScheduleTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.LastScheduleTime = nil - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/doc.go new file mode 100644 index 00000000..c6b203cd --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package batch diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/install/install.go index 7a3493f3..4bccb690 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -123,7 +123,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - batch.AddToScheme(api.Scheme) + if err := batch.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -132,9 +135,15 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1.SchemeGroupVersion: - v1.AddToScheme(api.Scheme) + if err := v1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } case v2alpha1.SchemeGroupVersion: - v2alpha1.AddToScheme(api.Scheme) + if err := v2alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/register.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/register.go index cafa3fd8..6cea2efa 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,23 +28,23 @@ const GroupName = "batch" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Job{}, &JobList{}, @@ -53,4 +53,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &ScheduledJobList{}, &api.ListOptions{}, ) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/types.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/types.go index 1ad46991..721afee3 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,15 +27,15 @@ import ( type Job struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata api.ObjectMeta `json:"metadata,omitempty"` // Spec is a structure defining the expected behavior of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec JobSpec `json:"spec,omitempty"` // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status JobStatus `json:"status,omitempty"` } @@ -43,7 +43,7 @@ type Job struct { type JobList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty"` // Items is the list of Job. @@ -54,22 +54,22 @@ type JobList struct { type JobTemplate struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata api.ObjectMeta `json:"metadata,omitempty"` // Template defines jobs that will be created from this template - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Template JobTemplateSpec `json:"template,omitempty"` } // JobTemplateSpec describes the data a Job should have when created from a template type JobTemplateSpec struct { // Standard object's metadata of the jobs created from this template. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata api.ObjectMeta `json:"metadata,omitempty"` // Specification of the desired behavior of the job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec JobSpec `json:"spec,omitempty"` } @@ -171,15 +171,15 @@ type JobCondition struct { type ScheduledJob struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata api.ObjectMeta `json:"metadata,omitempty"` // Spec is a structure defining the expected behavior of a job, including the schedule. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec ScheduledJobSpec `json:"spec,omitempty"` // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status ScheduledJobStatus `json:"status,omitempty"` } @@ -187,7 +187,7 @@ type ScheduledJob struct { type ScheduledJobList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty"` // Items is the list of ScheduledJob. @@ -209,7 +209,7 @@ type ScheduledJobSpec struct { // Suspend flag tells the controller to suspend subsequent executions, it does // not apply to already started executions. Defaults to false. - Suspend *bool `json:"suspend"` + Suspend *bool `json:"suspend,omitempty"` // JobTemplate is the object that describes the job that will be created when // executing a ScheduledJob. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/conversion.go index 2d163c6e..01dfe029 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,18 +27,17 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( Convert_batch_JobSpec_To_v1_JobSpec, Convert_v1_JobSpec_To_batch_JobSpec, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } - err = api.Scheme.AddFieldLabelConversionFunc("batch/v1", "Job", + return api.Scheme.AddFieldLabelConversionFunc("batch/v1", "Job", func(label, value string) (string, string, error) { switch label { case "metadata.name", "metadata.namespace", "status.successful": @@ -46,11 +45,8 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + }, + ) } func Convert_batch_JobSpec_To_v1_JobSpec(in *batch.JobSpec, out *JobSpec, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/deep_copy_generated.go deleted file mode 100644 index c2a50b4e..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/deep_copy_generated.go +++ /dev/null @@ -1,211 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - api_v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1_Job, - DeepCopy_v1_JobCondition, - DeepCopy_v1_JobList, - DeepCopy_v1_JobSpec, - DeepCopy_v1_JobStatus, - DeepCopy_v1_LabelSelector, - DeepCopy_v1_LabelSelectorRequirement, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1_Job(in Job, out *Job, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api_v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1_JobSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1_JobStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_JobCondition(in JobCondition, out *JobCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_v1_JobList(in JobList, out *JobList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Job, len(in)) - for i := range in { - if err := DeepCopy_v1_Job(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1_JobSpec(in JobSpec, out *JobSpec, c *conversion.Cloner) error { - if in.Parallelism != nil { - in, out := in.Parallelism, &out.Parallelism - *out = new(int32) - **out = *in - } else { - out.Parallelism = nil - } - if in.Completions != nil { - in, out := in.Completions, &out.Completions - *out = new(int32) - **out = *in - } else { - out.Completions = nil - } - if in.ActiveDeadlineSeconds != nil { - in, out := in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.ActiveDeadlineSeconds = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(LabelSelector) - if err := DeepCopy_v1_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if in.ManualSelector != nil { - in, out := in.ManualSelector, &out.ManualSelector - *out = new(bool) - **out = *in - } else { - out.ManualSelector = nil - } - if err := api_v1.DeepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1_JobStatus(in JobStatus, out *JobStatus, c *conversion.Cloner) error { - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]JobCondition, len(in)) - for i := range in { - if err := DeepCopy_v1_JobCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if in.StartTime != nil { - in, out := in.StartTime, &out.StartTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.StartTime = nil - } - if in.CompletionTime != nil { - in, out := in.CompletionTime, &out.CompletionTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.CompletionTime = nil - } - out.Active = in.Active - out.Succeeded = in.Succeeded - out.Failed = in.Failed - return nil -} - -func DeepCopy_v1_LabelSelector(in LabelSelector, out *LabelSelector, c *conversion.Cloner) error { - if in.MatchLabels != nil { - in, out := in.MatchLabels, &out.MatchLabels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.MatchLabels = nil - } - if in.MatchExpressions != nil { - in, out := in.MatchExpressions, &out.MatchExpressions - *out = make([]LabelSelectorRequirement, len(in)) - for i := range in { - if err := DeepCopy_v1_LabelSelectorRequirement(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.MatchExpressions = nil - } - return nil -} - -func DeepCopy_v1_LabelSelectorRequirement(in LabelSelectorRequirement, out *LabelSelectorRequirement, c *conversion.Cloner) error { - out.Key = in.Key - out.Operator = in.Operator - if in.Values != nil { - in, out := in.Values, &out.Values - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Values = nil - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/defaults.go index 81aa90c1..5b029d09 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,8 +20,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_Job, ) } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/doc.go index 1c67cc3a..5695b9e4 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/batch + package v1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/generated.pb.go index 95646919..ea7b9729 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -42,6 +42,10 @@ import math "math" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -49,33 +53,39 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *Job) Reset() { *m = Job{} } -func (m *Job) String() string { return proto.CompactTextString(m) } -func (*Job) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *JobCondition) Reset() { *m = JobCondition{} } -func (m *JobCondition) String() string { return proto.CompactTextString(m) } -func (*JobCondition) ProtoMessage() {} +func (m *Job) Reset() { *m = Job{} } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *JobList) Reset() { *m = JobList{} } -func (m *JobList) String() string { return proto.CompactTextString(m) } -func (*JobList) ProtoMessage() {} +func (m *JobCondition) Reset() { *m = JobCondition{} } +func (*JobCondition) ProtoMessage() {} +func (*JobCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *JobSpec) Reset() { *m = JobSpec{} } -func (m *JobSpec) String() string { return proto.CompactTextString(m) } -func (*JobSpec) ProtoMessage() {} +func (m *JobList) Reset() { *m = JobList{} } +func (*JobList) ProtoMessage() {} +func (*JobList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } -func (m *JobStatus) Reset() { *m = JobStatus{} } -func (m *JobStatus) String() string { return proto.CompactTextString(m) } -func (*JobStatus) ProtoMessage() {} +func (m *JobSpec) Reset() { *m = JobSpec{} } +func (*JobSpec) ProtoMessage() {} +func (*JobSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } -func (m *LabelSelector) Reset() { *m = LabelSelector{} } -func (m *LabelSelector) String() string { return proto.CompactTextString(m) } -func (*LabelSelector) ProtoMessage() {} +func (m *JobStatus) Reset() { *m = JobStatus{} } +func (*JobStatus) ProtoMessage() {} +func (*JobStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } -func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } -func (m *LabelSelectorRequirement) String() string { return proto.CompactTextString(m) } -func (*LabelSelectorRequirement) ProtoMessage() {} +func (m *LabelSelector) Reset() { *m = LabelSelector{} } +func (*LabelSelector) ProtoMessage() {} +func (*LabelSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } + +func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } +func (*LabelSelectorRequirement) ProtoMessage() {} +func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{6} +} func init() { proto.RegisterType((*Job)(nil), "k8s.io.kubernetes.pkg.apis.batch.v1.Job") @@ -591,6 +601,115 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *Job) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Job{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "JobSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "JobStatus", "JobStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *JobList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Job", "Job", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobSpec{`, + `Parallelism:` + valueToStringGenerated(this.Parallelism) + `,`, + `Completions:` + valueToStringGenerated(this.Completions) + `,`, + `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "LabelSelector", 1) + `,`, + `ManualSelector:` + valueToStringGenerated(this.ManualSelector) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_kubernetes_pkg_api_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobStatus{`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "JobCondition", "JobCondition", 1), `&`, ``, 1) + `,`, + `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `CompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.CompletionTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `Active:` + fmt.Sprintf("%v", this.Active) + `,`, + `Succeeded:` + fmt.Sprintf("%v", this.Succeeded) + `,`, + `Failed:` + fmt.Sprintf("%v", this.Failed) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelector) String() string { + if this == nil { + return "nil" + } + keysForMatchLabels := make([]string, 0, len(this.MatchLabels)) + for k := range this.MatchLabels { + keysForMatchLabels = append(keysForMatchLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMatchLabels) + mapStringForMatchLabels := "map[string]string{" + for _, k := range keysForMatchLabels { + mapStringForMatchLabels += fmt.Sprintf("%v: %v,", k, this.MatchLabels[k]) + } + mapStringForMatchLabels += "}" + s := strings.Join([]string{`&LabelSelector{`, + `MatchLabels:` + mapStringForMatchLabels + `,`, + `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "LabelSelectorRequirement", "LabelSelectorRequirement", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LabelSelectorRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *Job) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -1899,3 +2018,72 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 1031 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x56, 0xdf, 0x6e, 0xe3, 0xc4, + 0x17, 0xae, 0x93, 0xa6, 0x4d, 0x26, 0x6d, 0x37, 0xbf, 0xf9, 0x51, 0x29, 0x44, 0x22, 0x59, 0x05, + 0x84, 0xba, 0x62, 0x6b, 0x2b, 0x05, 0xa4, 0xd5, 0x4a, 0xac, 0x84, 0x4b, 0x91, 0x28, 0x0d, 0xad, + 0xa6, 0xd5, 0x6a, 0xc5, 0x9f, 0x8b, 0xb1, 0x73, 0x36, 0x35, 0xb5, 0x3d, 0xc6, 0x33, 0x0e, 0x94, + 0x2b, 0x24, 0x2e, 0xb8, 0xe5, 0x21, 0x78, 0x06, 0xf6, 0x15, 0x7a, 0xb9, 0x70, 0xc5, 0x55, 0x44, + 0xc3, 0x5b, 0xf4, 0x0a, 0xcd, 0x78, 0xec, 0x38, 0xe9, 0x1f, 0xa5, 0xdc, 0x75, 0xce, 0x39, 0xdf, + 0x77, 0x3e, 0xcf, 0xf9, 0xce, 0xa4, 0xe8, 0xfd, 0xb3, 0x27, 0xdc, 0xf4, 0x98, 0x75, 0x96, 0x38, + 0x10, 0x87, 0x20, 0x80, 0x5b, 0xd1, 0xd9, 0xd0, 0xa2, 0x91, 0xc7, 0x2d, 0x87, 0x0a, 0xf7, 0xd4, + 0x1a, 0xf5, 0xac, 0x21, 0x84, 0x10, 0x53, 0x01, 0x03, 0x33, 0x8a, 0x99, 0x60, 0xf8, 0xed, 0x14, + 0x64, 0x4e, 0x41, 0x66, 0x74, 0x36, 0x34, 0x25, 0xc8, 0x54, 0x20, 0x73, 0xd4, 0x6b, 0x6d, 0x0f, + 0x3d, 0x71, 0x9a, 0x38, 0xa6, 0xcb, 0x02, 0x6b, 0xc8, 0x86, 0xcc, 0x52, 0x58, 0x27, 0x79, 0xa9, + 0x4e, 0xea, 0xa0, 0xfe, 0x4a, 0x39, 0x5b, 0x1f, 0xde, 0x2a, 0xc4, 0x4a, 0xc2, 0x11, 0xc4, 0xdc, + 0x63, 0x21, 0x0c, 0xe6, 0xa5, 0xb4, 0x1e, 0xdf, 0x0e, 0xbb, 0x2e, 0xbc, 0xb5, 0x7d, 0x73, 0x75, + 0x9c, 0x84, 0xc2, 0x0b, 0xe0, 0x5a, 0x79, 0xef, 0xe6, 0xf2, 0x44, 0x78, 0xbe, 0xe5, 0x85, 0x82, + 0x8b, 0x78, 0x1e, 0xd2, 0xfd, 0xa5, 0x84, 0xca, 0xfb, 0xcc, 0xc1, 0x2f, 0x50, 0x35, 0x00, 0x41, + 0x07, 0x54, 0xd0, 0xa6, 0xf1, 0xd0, 0xd8, 0xaa, 0xef, 0x6c, 0x99, 0xb7, 0xde, 0x9a, 0x39, 0xea, + 0x99, 0x87, 0xce, 0xb7, 0xe0, 0x8a, 0x3e, 0x08, 0x6a, 0xe3, 0x8b, 0x71, 0x67, 0x69, 0x32, 0xee, + 0xa0, 0x69, 0x8c, 0xe4, 0x6c, 0xf8, 0x0b, 0xb4, 0xcc, 0x23, 0x70, 0x9b, 0x25, 0xc5, 0xfa, 0xd8, + 0x5c, 0x60, 0x16, 0xe6, 0x3e, 0x73, 0x8e, 0x23, 0x70, 0xed, 0x35, 0xcd, 0xbc, 0x2c, 0x4f, 0x44, + 0xf1, 0xe0, 0xe7, 0x68, 0x85, 0x0b, 0x2a, 0x12, 0xde, 0x2c, 0x2b, 0x46, 0x73, 0x61, 0x46, 0x85, + 0xb2, 0x37, 0x34, 0xe7, 0x4a, 0x7a, 0x26, 0x9a, 0xad, 0xfb, 0x67, 0x19, 0xad, 0xed, 0x33, 0x67, + 0x97, 0x85, 0x03, 0x4f, 0x78, 0x2c, 0xc4, 0x1f, 0xa0, 0x65, 0x71, 0x1e, 0x81, 0xba, 0x8e, 0x9a, + 0xfd, 0x30, 0x93, 0x72, 0x72, 0x1e, 0xc1, 0xd5, 0xb8, 0xd3, 0x28, 0xd6, 0xca, 0x18, 0x51, 0xd5, + 0x05, 0x79, 0x25, 0x85, 0x7b, 0x36, 0xdb, 0xee, 0x6a, 0xdc, 0xb9, 0xd3, 0x02, 0x66, 0xce, 0x39, + 0x2b, 0x0f, 0x9f, 0xa2, 0x75, 0x9f, 0x72, 0x71, 0x14, 0x33, 0x07, 0x4e, 0xbc, 0x00, 0xf4, 0xd7, + 0xbf, 0x77, 0xc7, 0x94, 0x0a, 0x3e, 0x34, 0x25, 0xc4, 0xde, 0xd4, 0x5a, 0xd6, 0x0f, 0x8a, 0x4c, + 0x64, 0x96, 0x18, 0x7f, 0x8f, 0xb0, 0x0c, 0x9c, 0xc4, 0x34, 0xe4, 0xe9, 0xd7, 0xc9, 0x76, 0xcb, + 0xf7, 0x6f, 0xd7, 0xd2, 0xed, 0xf0, 0xc1, 0x35, 0x3a, 0x72, 0x43, 0x0b, 0xfc, 0x2e, 0x5a, 0x89, + 0x81, 0x72, 0x16, 0x36, 0x2b, 0xea, 0xea, 0xf2, 0x49, 0x11, 0x15, 0x25, 0x3a, 0x8b, 0x1f, 0xa1, + 0xd5, 0x00, 0x38, 0xa7, 0x43, 0x68, 0xae, 0xa8, 0xc2, 0x07, 0xba, 0x70, 0xb5, 0x9f, 0x86, 0x49, + 0x96, 0xef, 0xbe, 0x32, 0xd0, 0xea, 0x3e, 0x73, 0x0e, 0x3c, 0x2e, 0xf0, 0x37, 0xd7, 0x2c, 0x6e, + 0x2d, 0xf8, 0x35, 0x12, 0xae, 0x9c, 0xde, 0xd0, 0x8d, 0xaa, 0x59, 0xa4, 0xe0, 0xf3, 0x3e, 0xaa, + 0x78, 0x02, 0x02, 0x39, 0xf7, 0xf2, 0xdd, 0xeb, 0x33, 0x6b, 0x4b, 0x7b, 0x5d, 0x93, 0x56, 0x3e, + 0x93, 0x70, 0x92, 0xb2, 0x74, 0x5f, 0x95, 0x95, 0x72, 0x69, 0x7c, 0xdc, 0x43, 0xf5, 0x88, 0xc6, + 0xd4, 0xf7, 0xc1, 0xf7, 0x78, 0xa0, 0xc4, 0x57, 0xec, 0x07, 0x93, 0x71, 0xa7, 0x7e, 0x34, 0x0d, + 0x93, 0x62, 0x8d, 0x84, 0xb8, 0x2c, 0x88, 0x7c, 0x90, 0xb7, 0x9b, 0x7a, 0x51, 0x43, 0x76, 0xa7, + 0x61, 0x52, 0xac, 0xc1, 0x87, 0x68, 0x93, 0xba, 0xc2, 0x1b, 0xc1, 0x27, 0x40, 0x07, 0xbe, 0x17, + 0xc2, 0x31, 0xb8, 0x2c, 0x1c, 0xa4, 0x7b, 0x56, 0xb6, 0xdf, 0x9c, 0x8c, 0x3b, 0x9b, 0x1f, 0xdf, + 0x54, 0x40, 0x6e, 0xc6, 0xe1, 0xaf, 0x51, 0x95, 0x83, 0x0f, 0xae, 0x60, 0xb1, 0xb6, 0xcf, 0xce, + 0x42, 0x97, 0x72, 0x40, 0x1d, 0xf0, 0x8f, 0x35, 0xd2, 0x5e, 0x93, 0xf7, 0x9d, 0x9d, 0x48, 0xce, + 0x88, 0x9f, 0xa2, 0x8d, 0x80, 0x86, 0x09, 0xcd, 0x2b, 0x95, 0x6b, 0xaa, 0x36, 0x9e, 0x8c, 0x3b, + 0x1b, 0xfd, 0x99, 0x0c, 0x99, 0xab, 0xc4, 0x5f, 0xa1, 0xaa, 0x80, 0x20, 0xf2, 0xa9, 0x48, 0x2d, + 0x54, 0xdf, 0xd9, 0xbe, 0xfb, 0xb5, 0x3b, 0x62, 0x83, 0x13, 0x0d, 0x50, 0x0f, 0x53, 0x6e, 0x84, + 0x2c, 0x4a, 0x72, 0xc2, 0xee, 0xef, 0x65, 0x54, 0xcb, 0x9f, 0x1b, 0x0c, 0x08, 0xb9, 0xd9, 0x4a, + 0xf3, 0xa6, 0xa1, 0xbc, 0xd1, 0x5b, 0xd4, 0x1b, 0xf9, 0x63, 0x30, 0x7d, 0x63, 0xf3, 0x10, 0x27, + 0x05, 0x62, 0xfc, 0x02, 0xd5, 0xb8, 0xa0, 0xb1, 0x50, 0xbb, 0x5a, 0xba, 0xff, 0xae, 0xae, 0x4f, + 0xc6, 0x9d, 0xda, 0x71, 0xc6, 0x40, 0xa6, 0x64, 0x78, 0x88, 0x36, 0xa6, 0x2e, 0xf9, 0xaf, 0x2f, + 0x8f, 0x1a, 0xca, 0xee, 0x0c, 0x0d, 0x99, 0xa3, 0x95, 0xeb, 0x9f, 0xfa, 0x48, 0x99, 0xa5, 0x32, + 0x5d, 0xff, 0xd4, 0x74, 0x44, 0x67, 0xb1, 0x85, 0x6a, 0x3c, 0x71, 0x5d, 0x80, 0x01, 0x0c, 0xd4, + 0xcc, 0x2b, 0xf6, 0xff, 0x74, 0x69, 0xed, 0x38, 0x4b, 0x90, 0x69, 0x8d, 0x24, 0x7e, 0x49, 0x3d, + 0x1f, 0x06, 0x6a, 0xd6, 0x05, 0xe2, 0x4f, 0x55, 0x94, 0xe8, 0x6c, 0xf7, 0x8f, 0x12, 0x5a, 0x9f, + 0xf1, 0x1e, 0xfe, 0x11, 0xd5, 0x03, 0x39, 0x0e, 0x15, 0xcd, 0xa6, 0xb7, 0x7b, 0x7f, 0x13, 0x9b, + 0xfd, 0x29, 0xcb, 0x5e, 0x28, 0xe2, 0x73, 0xfb, 0xff, 0x5a, 0x43, 0xbd, 0x90, 0x21, 0xc5, 0x66, + 0xf8, 0x67, 0x03, 0x35, 0xd4, 0x79, 0xef, 0x87, 0x28, 0x06, 0xce, 0xf5, 0x1e, 0x4b, 0x05, 0x1f, + 0xdd, 0x5f, 0x01, 0x81, 0xef, 0x12, 0x2f, 0x86, 0x00, 0x42, 0x61, 0x37, 0x75, 0xef, 0x46, 0x7f, + 0x8e, 0x9e, 0x5c, 0x6b, 0xd8, 0x7a, 0x86, 0x1a, 0xf3, 0xda, 0x71, 0x03, 0x95, 0xcf, 0xe0, 0x3c, + 0xfd, 0x5d, 0x24, 0xf2, 0x4f, 0xfc, 0x06, 0xaa, 0x8c, 0xa8, 0x9f, 0xa4, 0xce, 0xab, 0x91, 0xf4, + 0xf0, 0xb4, 0xf4, 0xc4, 0xe8, 0xfe, 0x66, 0xa0, 0xe6, 0x6d, 0x42, 0xf0, 0x5b, 0x05, 0x22, 0xbb, + 0xae, 0x55, 0x95, 0x3f, 0x87, 0xf3, 0x94, 0x75, 0x0f, 0x55, 0x59, 0x24, 0xff, 0x5b, 0x61, 0xb1, + 0xfe, 0x31, 0x7d, 0x94, 0xad, 0xdd, 0xa1, 0x8e, 0x5f, 0x8d, 0x3b, 0x9b, 0x33, 0xf4, 0x59, 0x82, + 0xe4, 0x50, 0xdc, 0x45, 0x2b, 0x4a, 0x8f, 0x7c, 0xc8, 0xca, 0x5b, 0x35, 0x1b, 0xc9, 0xd1, 0x3f, + 0x57, 0x11, 0xa2, 0x33, 0xf6, 0x3b, 0x17, 0x97, 0xed, 0xa5, 0xd7, 0x97, 0xed, 0xa5, 0xbf, 0x2e, + 0xdb, 0x4b, 0x3f, 0x4d, 0xda, 0xc6, 0xc5, 0xa4, 0x6d, 0xbc, 0x9e, 0xb4, 0x8d, 0xbf, 0x27, 0x6d, + 0xe3, 0xd7, 0x7f, 0xda, 0x4b, 0x5f, 0x96, 0x46, 0xbd, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x4e, + 0xe5, 0x3f, 0x2f, 0x7d, 0x0a, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/generated.proto index 9c361ed7..76ee4999 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ package k8s.io.kubernetes.pkg.apis.batch.v1; import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". @@ -31,15 +32,15 @@ option go_package = "v1"; // Job represents the configuration of a single job. message Job { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Spec is a structure defining the expected behavior of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional JobSpec spec = 2; // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional JobStatus status = 3; } @@ -67,7 +68,7 @@ message JobCondition { // JobList is a collection of jobs. message JobList { // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is the list of Job. @@ -80,7 +81,7 @@ message JobSpec { // run at any given time. The actual number of pods running in steady state will // be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), // i.e. when the work left to do is less than max parallelism. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional int32 parallelism = 1; // Completions specifies the desired number of successfully finished pods the @@ -88,7 +89,7 @@ message JobSpec { // pod signals the success of all pods, and allows parallelism to have any positive // value. Setting to 1 means that parallelism is limited to 1 and the success of that // pod signals the success of the job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional int32 completions = 2; // Optional duration in seconds relative to the startTime that the job may be active @@ -97,7 +98,7 @@ message JobSpec { // Selector is a label query over pods that should match the pod count. // Normally, the system sets this field for you. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors optional LabelSelector selector = 4; // ManualSelector controls generation of pod labels and pod selectors. @@ -109,19 +110,19 @@ message JobSpec { // and other jobs to not function correctly. However, You may see // `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` // API. - // More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md + // More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md optional bool manualSelector = 5; // Template is the object that describes the pod that will be created when // executing a job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec template = 6; } // JobStatus represents the current state of a Job. message JobStatus { // Conditions represent the latest available observations of an object's current state. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md repeated JobCondition conditions = 1; // StartTime represents time when the job was acknowledged by the Job Manager. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/register.go index d8c087f1..aa97b0ea 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,14 +29,13 @@ const GroupName = "batch" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Job{}, &JobList{}, @@ -44,4 +43,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/types.go index 35ec0520..2c0e8527 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,15 +27,15 @@ import ( type Job struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec is a structure defining the expected behavior of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status JobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -43,7 +43,7 @@ type Job struct { type JobList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is the list of Job. @@ -57,7 +57,7 @@ type JobSpec struct { // run at any given time. The actual number of pods running in steady state will // be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), // i.e. when the work left to do is less than max parallelism. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Parallelism *int32 `json:"parallelism,omitempty" protobuf:"varint,1,opt,name=parallelism"` // Completions specifies the desired number of successfully finished pods the @@ -65,7 +65,7 @@ type JobSpec struct { // pod signals the success of all pods, and allows parallelism to have any positive // value. Setting to 1 means that parallelism is limited to 1 and the success of that // pod signals the success of the job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Completions *int32 `json:"completions,omitempty" protobuf:"varint,2,opt,name=completions"` // Optional duration in seconds relative to the startTime that the job may be active @@ -74,7 +74,7 @@ type JobSpec struct { // Selector is a label query over pods that should match the pod count. // Normally, the system sets this field for you. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,opt,name=selector"` // ManualSelector controls generation of pod labels and pod selectors. @@ -86,12 +86,12 @@ type JobSpec struct { // and other jobs to not function correctly. However, You may see // `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` // API. - // More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md + // More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md ManualSelector *bool `json:"manualSelector,omitempty" protobuf:"varint,5,opt,name=manualSelector"` // Template is the object that describes the pod that will be created when // executing a job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,6,opt,name=template"` } @@ -99,7 +99,7 @@ type JobSpec struct { type JobStatus struct { // Conditions represent the latest available observations of an object's current state. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Conditions []JobCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` // StartTime represents time when the job was acknowledged by the Job Manager. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/types_swagger_doc_generated.go index 21c621ab..491d23ac 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,9 +29,9 @@ package v1 // AUTO-GENERATED FUNCTIONS START HERE var map_Job = map[string]string{ "": "Job represents the configuration of a single job.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec is a structure defining the expected behavior of a job. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status is a structure describing current status of a job. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec is a structure defining the expected behavior of a job. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is a structure describing current status of a job. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (Job) SwaggerDoc() map[string]string { @@ -54,7 +54,7 @@ func (JobCondition) SwaggerDoc() map[string]string { var map_JobList = map[string]string{ "": "JobList is a collection of jobs.", - "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is the list of Job.", } @@ -64,12 +64,12 @@ func (JobList) SwaggerDoc() map[string]string { var map_JobSpec = map[string]string{ "": "JobSpec describes how the job execution will look like.", - "parallelism": "Parallelism specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", - "completions": "Completions specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "parallelism": "Parallelism specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", + "completions": "Completions specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", "activeDeadlineSeconds": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", - "selector": "Selector is a label query over pods that should match the pod count. Normally, the system sets this field for you. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", - "manualSelector": "ManualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md", - "template": "Template is the object that describes the pod that will be created when executing a job. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "selector": "Selector is a label query over pods that should match the pod count. Normally, the system sets this field for you. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", + "manualSelector": "ManualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md", + "template": "Template is the object that describes the pod that will be created when executing a job. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", } func (JobSpec) SwaggerDoc() map[string]string { @@ -78,7 +78,7 @@ func (JobSpec) SwaggerDoc() map[string]string { var map_JobStatus = map[string]string{ "": "JobStatus represents the current state of a Job.", - "conditions": "Conditions represent the latest available observations of an object's current state. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "conditions": "Conditions represent the latest available observations of an object's current state. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", "startTime": "StartTime represents time when the job was acknowledged by the Job Manager. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", "completionTime": "CompletionTime represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", "active": "Active is the number of actively running pods.", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.conversion.go similarity index 97% rename from vendor/k8s.io/kubernetes/pkg/apis/batch/v1/conversion_generated.go rename to vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.conversion.go index 4bb13c49..3dc90d06 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,10 +26,17 @@ import ( api_v1 "k8s.io/kubernetes/pkg/api/v1" batch "k8s.io/kubernetes/pkg/apis/batch" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1_Job_To_batch_Job, Convert_batch_Job_To_v1_Job, Convert_v1_JobCondition_To_batch_JobCondition, @@ -44,10 +51,7 @@ func init() { Convert_unversioned_LabelSelector_To_v1_LabelSelector, Convert_v1_LabelSelectorRequirement_To_unversioned_LabelSelectorRequirement, Convert_unversioned_LabelSelectorRequirement_To_v1_LabelSelectorRequirement, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v1_Job_To_batch_Job(in *Job, out *batch.Job, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000..9163e830 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v1/zz_generated.deepcopy.go @@ -0,0 +1,229 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + api_v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Job, InType: reflect.TypeOf(&Job{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_JobCondition, InType: reflect.TypeOf(&JobCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_JobList, InType: reflect.TypeOf(&JobList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_JobSpec, InType: reflect.TypeOf(&JobSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_JobStatus, InType: reflect.TypeOf(&JobStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LabelSelector, InType: reflect.TypeOf(&LabelSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_LabelSelectorRequirement, InType: reflect.TypeOf(&LabelSelectorRequirement{})}, + ) +} + +func DeepCopy_v1_Job(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Job) + out := out.(*Job) + out.TypeMeta = in.TypeMeta + if err := api_v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1_JobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1_JobStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_JobCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobCondition) + out := out.(*JobCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1_JobList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobList) + out := out.(*JobList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Job, len(*in)) + for i := range *in { + if err := DeepCopy_v1_Job(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1_JobSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobSpec) + out := out.(*JobSpec) + if in.Parallelism != nil { + in, out := &in.Parallelism, &out.Parallelism + *out = new(int32) + **out = **in + } else { + out.Parallelism = nil + } + if in.Completions != nil { + in, out := &in.Completions, &out.Completions + *out = new(int32) + **out = **in + } else { + out.Completions = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(LabelSelector) + if err := DeepCopy_v1_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if in.ManualSelector != nil { + in, out := &in.ManualSelector, &out.ManualSelector + *out = new(bool) + **out = **in + } else { + out.ManualSelector = nil + } + if err := api_v1.DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1_JobStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobStatus) + out := out.(*JobStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]JobCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1_JobCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.CompletionTime != nil { + in, out := &in.CompletionTime, &out.CompletionTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.CompletionTime = nil + } + out.Active = in.Active + out.Succeeded = in.Succeeded + out.Failed = in.Failed + return nil + } +} + +func DeepCopy_v1_LabelSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelector) + out := out.(*LabelSelector) + if in.MatchLabels != nil { + in, out := &in.MatchLabels, &out.MatchLabels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.MatchLabels = nil + } + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]LabelSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_v1_LabelSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_v1_LabelSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelectorRequirement) + out := out.(*LabelSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/conversion.go index 4714fda0..0ac589de 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,15 +28,14 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( Convert_batch_JobSpec_To_v2alpha1_JobSpec, Convert_v2alpha1_JobSpec_To_batch_JobSpec, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. @@ -50,11 +49,11 @@ func addConversionFuncs(scheme *runtime.Scheme) { return "", "", fmt.Errorf("field label not supported: %s", label) } }) + if err != nil { + return err + } } - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + return nil } func Convert_batch_JobSpec_To_v2alpha1_JobSpec(in *batch.JobSpec, out *JobSpec, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/deep_copy_generated.go deleted file mode 100644 index 92cb71ea..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/deep_copy_generated.go +++ /dev/null @@ -1,324 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v2alpha1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v2alpha1_Job, - DeepCopy_v2alpha1_JobCondition, - DeepCopy_v2alpha1_JobList, - DeepCopy_v2alpha1_JobSpec, - DeepCopy_v2alpha1_JobStatus, - DeepCopy_v2alpha1_JobTemplate, - DeepCopy_v2alpha1_JobTemplateSpec, - DeepCopy_v2alpha1_LabelSelector, - DeepCopy_v2alpha1_LabelSelectorRequirement, - DeepCopy_v2alpha1_ScheduledJob, - DeepCopy_v2alpha1_ScheduledJobList, - DeepCopy_v2alpha1_ScheduledJobSpec, - DeepCopy_v2alpha1_ScheduledJobStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v2alpha1_Job(in Job, out *Job, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v2alpha1_JobSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v2alpha1_JobStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v2alpha1_JobCondition(in JobCondition, out *JobCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_v2alpha1_JobList(in JobList, out *JobList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Job, len(in)) - for i := range in { - if err := DeepCopy_v2alpha1_Job(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v2alpha1_JobSpec(in JobSpec, out *JobSpec, c *conversion.Cloner) error { - if in.Parallelism != nil { - in, out := in.Parallelism, &out.Parallelism - *out = new(int32) - **out = *in - } else { - out.Parallelism = nil - } - if in.Completions != nil { - in, out := in.Completions, &out.Completions - *out = new(int32) - **out = *in - } else { - out.Completions = nil - } - if in.ActiveDeadlineSeconds != nil { - in, out := in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.ActiveDeadlineSeconds = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(LabelSelector) - if err := DeepCopy_v2alpha1_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if in.ManualSelector != nil { - in, out := in.ManualSelector, &out.ManualSelector - *out = new(bool) - **out = *in - } else { - out.ManualSelector = nil - } - if err := v1.DeepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v2alpha1_JobStatus(in JobStatus, out *JobStatus, c *conversion.Cloner) error { - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]JobCondition, len(in)) - for i := range in { - if err := DeepCopy_v2alpha1_JobCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if in.StartTime != nil { - in, out := in.StartTime, &out.StartTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.StartTime = nil - } - if in.CompletionTime != nil { - in, out := in.CompletionTime, &out.CompletionTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.CompletionTime = nil - } - out.Active = in.Active - out.Succeeded = in.Succeeded - out.Failed = in.Failed - return nil -} - -func DeepCopy_v2alpha1_JobTemplate(in JobTemplate, out *JobTemplate, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v2alpha1_JobTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v2alpha1_JobTemplateSpec(in JobTemplateSpec, out *JobTemplateSpec, c *conversion.Cloner) error { - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v2alpha1_JobSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v2alpha1_LabelSelector(in LabelSelector, out *LabelSelector, c *conversion.Cloner) error { - if in.MatchLabels != nil { - in, out := in.MatchLabels, &out.MatchLabels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.MatchLabels = nil - } - if in.MatchExpressions != nil { - in, out := in.MatchExpressions, &out.MatchExpressions - *out = make([]LabelSelectorRequirement, len(in)) - for i := range in { - if err := DeepCopy_v2alpha1_LabelSelectorRequirement(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.MatchExpressions = nil - } - return nil -} - -func DeepCopy_v2alpha1_LabelSelectorRequirement(in LabelSelectorRequirement, out *LabelSelectorRequirement, c *conversion.Cloner) error { - out.Key = in.Key - out.Operator = in.Operator - if in.Values != nil { - in, out := in.Values, &out.Values - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Values = nil - } - return nil -} - -func DeepCopy_v2alpha1_ScheduledJob(in ScheduledJob, out *ScheduledJob, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v2alpha1_ScheduledJobSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v2alpha1_ScheduledJobStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v2alpha1_ScheduledJobList(in ScheduledJobList, out *ScheduledJobList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ScheduledJob, len(in)) - for i := range in { - if err := DeepCopy_v2alpha1_ScheduledJob(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v2alpha1_ScheduledJobSpec(in ScheduledJobSpec, out *ScheduledJobSpec, c *conversion.Cloner) error { - out.Schedule = in.Schedule - if in.StartingDeadlineSeconds != nil { - in, out := in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.StartingDeadlineSeconds = nil - } - out.ConcurrencyPolicy = in.ConcurrencyPolicy - if in.Suspend != nil { - in, out := in.Suspend, &out.Suspend - *out = new(bool) - **out = *in - } else { - out.Suspend = nil - } - if err := DeepCopy_v2alpha1_JobTemplateSpec(in.JobTemplate, &out.JobTemplate, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v2alpha1_ScheduledJobStatus(in ScheduledJobStatus, out *ScheduledJobStatus, c *conversion.Cloner) error { - if in.Active != nil { - in, out := in.Active, &out.Active - *out = make([]v1.ObjectReference, len(in)) - for i := range in { - if err := v1.DeepCopy_v1_ObjectReference(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Active = nil - } - if in.LastScheduleTime != nil { - in, out := in.LastScheduleTime, &out.LastScheduleTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.LastScheduleTime = nil - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/defaults.go index 72da797c..9a594f16 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,8 +20,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_Job, SetDefaults_ScheduledJob, ) @@ -46,4 +46,7 @@ func SetDefaults_ScheduledJob(obj *ScheduledJob) { if obj.Spec.ConcurrencyPolicy == "" { obj.Spec.ConcurrencyPolicy = AllowConcurrent } + if obj.Spec.Suspend == nil { + obj.Spec.Suspend = new(bool) + } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/doc.go index 0e6b67b5..76b5d325 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/batch + package v2alpha1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/generated.pb.go index 17192c01..959599e1 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -48,6 +48,10 @@ import math "math" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -55,57 +59,63 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *Job) Reset() { *m = Job{} } -func (m *Job) String() string { return proto.CompactTextString(m) } -func (*Job) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *JobCondition) Reset() { *m = JobCondition{} } -func (m *JobCondition) String() string { return proto.CompactTextString(m) } -func (*JobCondition) ProtoMessage() {} +func (m *Job) Reset() { *m = Job{} } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *JobList) Reset() { *m = JobList{} } -func (m *JobList) String() string { return proto.CompactTextString(m) } -func (*JobList) ProtoMessage() {} +func (m *JobCondition) Reset() { *m = JobCondition{} } +func (*JobCondition) ProtoMessage() {} +func (*JobCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *JobSpec) Reset() { *m = JobSpec{} } -func (m *JobSpec) String() string { return proto.CompactTextString(m) } -func (*JobSpec) ProtoMessage() {} +func (m *JobList) Reset() { *m = JobList{} } +func (*JobList) ProtoMessage() {} +func (*JobList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } -func (m *JobStatus) Reset() { *m = JobStatus{} } -func (m *JobStatus) String() string { return proto.CompactTextString(m) } -func (*JobStatus) ProtoMessage() {} +func (m *JobSpec) Reset() { *m = JobSpec{} } +func (*JobSpec) ProtoMessage() {} +func (*JobSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } -func (m *JobTemplate) Reset() { *m = JobTemplate{} } -func (m *JobTemplate) String() string { return proto.CompactTextString(m) } -func (*JobTemplate) ProtoMessage() {} +func (m *JobStatus) Reset() { *m = JobStatus{} } +func (*JobStatus) ProtoMessage() {} +func (*JobStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } -func (m *JobTemplateSpec) Reset() { *m = JobTemplateSpec{} } -func (m *JobTemplateSpec) String() string { return proto.CompactTextString(m) } -func (*JobTemplateSpec) ProtoMessage() {} +func (m *JobTemplate) Reset() { *m = JobTemplate{} } +func (*JobTemplate) ProtoMessage() {} +func (*JobTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } -func (m *LabelSelector) Reset() { *m = LabelSelector{} } -func (m *LabelSelector) String() string { return proto.CompactTextString(m) } -func (*LabelSelector) ProtoMessage() {} +func (m *JobTemplateSpec) Reset() { *m = JobTemplateSpec{} } +func (*JobTemplateSpec) ProtoMessage() {} +func (*JobTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } -func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } -func (m *LabelSelectorRequirement) String() string { return proto.CompactTextString(m) } -func (*LabelSelectorRequirement) ProtoMessage() {} +func (m *LabelSelector) Reset() { *m = LabelSelector{} } +func (*LabelSelector) ProtoMessage() {} +func (*LabelSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } -func (m *ScheduledJob) Reset() { *m = ScheduledJob{} } -func (m *ScheduledJob) String() string { return proto.CompactTextString(m) } -func (*ScheduledJob) ProtoMessage() {} +func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } +func (*LabelSelectorRequirement) ProtoMessage() {} +func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{8} +} -func (m *ScheduledJobList) Reset() { *m = ScheduledJobList{} } -func (m *ScheduledJobList) String() string { return proto.CompactTextString(m) } -func (*ScheduledJobList) ProtoMessage() {} +func (m *ScheduledJob) Reset() { *m = ScheduledJob{} } +func (*ScheduledJob) ProtoMessage() {} +func (*ScheduledJob) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } -func (m *ScheduledJobSpec) Reset() { *m = ScheduledJobSpec{} } -func (m *ScheduledJobSpec) String() string { return proto.CompactTextString(m) } -func (*ScheduledJobSpec) ProtoMessage() {} +func (m *ScheduledJobList) Reset() { *m = ScheduledJobList{} } +func (*ScheduledJobList) ProtoMessage() {} +func (*ScheduledJobList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } -func (m *ScheduledJobStatus) Reset() { *m = ScheduledJobStatus{} } -func (m *ScheduledJobStatus) String() string { return proto.CompactTextString(m) } -func (*ScheduledJobStatus) ProtoMessage() {} +func (m *ScheduledJobSpec) Reset() { *m = ScheduledJobSpec{} } +func (*ScheduledJobSpec) ProtoMessage() {} +func (*ScheduledJobSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } + +func (m *ScheduledJobStatus) Reset() { *m = ScheduledJobStatus{} } +func (*ScheduledJobStatus) ProtoMessage() {} +func (*ScheduledJobStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } func init() { proto.RegisterType((*Job)(nil), "k8s.io.kubernetes.pkg.apis.batch.v2alpha1.Job") @@ -944,6 +954,185 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *Job) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Job{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "JobSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "JobStatus", "JobStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *JobList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Job", "Job", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobSpec{`, + `Parallelism:` + valueToStringGenerated(this.Parallelism) + `,`, + `Completions:` + valueToStringGenerated(this.Completions) + `,`, + `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "LabelSelector", 1) + `,`, + `ManualSelector:` + valueToStringGenerated(this.ManualSelector) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_kubernetes_pkg_api_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobStatus{`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "JobCondition", "JobCondition", 1), `&`, ``, 1) + `,`, + `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `CompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.CompletionTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `Active:` + fmt.Sprintf("%v", this.Active) + `,`, + `Succeeded:` + fmt.Sprintf("%v", this.Succeeded) + `,`, + `Failed:` + fmt.Sprintf("%v", this.Failed) + `,`, + `}`, + }, "") + return s +} +func (this *JobTemplate) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobTemplate{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "JobTemplateSpec", "JobTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobTemplateSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobTemplateSpec{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "JobSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelector) String() string { + if this == nil { + return "nil" + } + keysForMatchLabels := make([]string, 0, len(this.MatchLabels)) + for k := range this.MatchLabels { + keysForMatchLabels = append(keysForMatchLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMatchLabels) + mapStringForMatchLabels := "map[string]string{" + for _, k := range keysForMatchLabels { + mapStringForMatchLabels += fmt.Sprintf("%v: %v,", k, this.MatchLabels[k]) + } + mapStringForMatchLabels += "}" + s := strings.Join([]string{`&LabelSelector{`, + `MatchLabels:` + mapStringForMatchLabels + `,`, + `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "LabelSelectorRequirement", "LabelSelectorRequirement", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LabelSelectorRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *ScheduledJob) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScheduledJob{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ScheduledJobSpec", "ScheduledJobSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ScheduledJobStatus", "ScheduledJobStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ScheduledJobList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScheduledJobList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ScheduledJob", "ScheduledJob", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ScheduledJobSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScheduledJobSpec{`, + `Schedule:` + fmt.Sprintf("%v", this.Schedule) + `,`, + `StartingDeadlineSeconds:` + valueToStringGenerated(this.StartingDeadlineSeconds) + `,`, + `ConcurrencyPolicy:` + fmt.Sprintf("%v", this.ConcurrencyPolicy) + `,`, + `Suspend:` + valueToStringGenerated(this.Suspend) + `,`, + `JobTemplate:` + strings.Replace(strings.Replace(this.JobTemplate.String(), "JobTemplateSpec", "JobTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ScheduledJobStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScheduledJobStatus{`, + `Active:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Active), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `LastScheduleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScheduleTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *Job) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -3016,3 +3205,89 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 1304 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xd4, 0x57, 0xcf, 0x6f, 0x1b, 0xc5, + 0x17, 0xcf, 0xda, 0x71, 0x62, 0x8f, 0x93, 0xd4, 0x9d, 0x6f, 0xa3, 0xfa, 0x1b, 0x84, 0x5d, 0x59, + 0x02, 0xa5, 0xd0, 0xac, 0x95, 0xa8, 0xa8, 0xa5, 0x88, 0x4a, 0x6c, 0x28, 0x52, 0x43, 0xa2, 0x46, + 0xe3, 0xb4, 0xaa, 0xa0, 0x3d, 0x8c, 0x77, 0x5f, 0x9d, 0x6d, 0xf6, 0x57, 0x77, 0x66, 0x03, 0xbe, + 0xf5, 0xca, 0x09, 0x24, 0xfe, 0x05, 0xce, 0xfc, 0x05, 0xf4, 0xc0, 0xad, 0x37, 0x0a, 0x27, 0xc4, + 0xc1, 0xa2, 0xe6, 0xbf, 0xc8, 0x09, 0xcd, 0xec, 0xec, 0x7a, 0xfd, 0x2b, 0x8a, 0x83, 0x8a, 0xc4, + 0x6d, 0xe7, 0xfd, 0xf8, 0xbc, 0x37, 0xf3, 0x3e, 0xf3, 0xe6, 0x2d, 0xfa, 0xf0, 0xe8, 0x26, 0xd3, + 0x6d, 0xbf, 0x79, 0x14, 0xb5, 0x21, 0xf4, 0x80, 0x03, 0x6b, 0x06, 0x47, 0x9d, 0x26, 0x0d, 0x6c, + 0xd6, 0x6c, 0x53, 0x6e, 0x1e, 0x36, 0x8f, 0xb7, 0xa8, 0x13, 0x1c, 0xd2, 0xcd, 0x66, 0x07, 0x3c, + 0x08, 0x29, 0x07, 0x4b, 0x0f, 0x42, 0x9f, 0xfb, 0xf8, 0x6a, 0xec, 0xaa, 0x0f, 0x5c, 0xf5, 0xe0, + 0xa8, 0xa3, 0x0b, 0x57, 0x5d, 0xba, 0xea, 0x89, 0xeb, 0xda, 0x46, 0xc7, 0xe6, 0x87, 0x51, 0x5b, + 0x37, 0x7d, 0xb7, 0xd9, 0xf1, 0x3b, 0x7e, 0x53, 0x22, 0xb4, 0xa3, 0x27, 0x72, 0x25, 0x17, 0xf2, + 0x2b, 0x46, 0x5e, 0xfb, 0x60, 0x6a, 0x52, 0xcd, 0xc8, 0x3b, 0x86, 0x90, 0xd9, 0xbe, 0x07, 0xd6, + 0x68, 0x42, 0x6b, 0xd7, 0xa6, 0xbb, 0x1d, 0x8f, 0xa5, 0xbf, 0xb6, 0x31, 0xd9, 0x3a, 0x8c, 0x3c, + 0x6e, 0xbb, 0x30, 0x66, 0xbe, 0x39, 0xd9, 0x3c, 0xe2, 0xb6, 0xd3, 0xb4, 0x3d, 0xce, 0x78, 0x38, + 0xea, 0xd2, 0xf8, 0x3e, 0x87, 0xf2, 0x3b, 0x7e, 0x1b, 0x3f, 0x44, 0x45, 0x17, 0x38, 0xb5, 0x28, + 0xa7, 0x55, 0xed, 0x8a, 0xb6, 0x5e, 0xde, 0x5a, 0xd7, 0xa7, 0x9e, 0x9d, 0x7e, 0xbc, 0xa9, 0xdf, + 0x6b, 0x3f, 0x05, 0x93, 0xef, 0x01, 0xa7, 0x06, 0x7e, 0xd9, 0xab, 0xcf, 0xf5, 0x7b, 0x75, 0x34, + 0x90, 0x91, 0x14, 0x0d, 0x1f, 0xa0, 0x79, 0x16, 0x80, 0x59, 0xcd, 0x49, 0xd4, 0x2d, 0xfd, 0xcc, + 0x15, 0xd1, 0x77, 0xfc, 0x76, 0x2b, 0x00, 0xd3, 0x58, 0x52, 0xf8, 0xf3, 0x62, 0x45, 0x24, 0x1a, + 0x7e, 0x84, 0x16, 0x18, 0xa7, 0x3c, 0x62, 0xd5, 0xbc, 0xc4, 0xbd, 0x3e, 0x23, 0xae, 0xf4, 0x35, + 0x56, 0x14, 0xf2, 0x42, 0xbc, 0x26, 0x0a, 0xb3, 0xf1, 0x5b, 0x1e, 0x2d, 0xed, 0xf8, 0xed, 0x6d, + 0xdf, 0xb3, 0x6c, 0x6e, 0xfb, 0x1e, 0xbe, 0x8e, 0xe6, 0x79, 0x37, 0x00, 0x79, 0x34, 0x25, 0xe3, + 0x4a, 0x92, 0xd0, 0x41, 0x37, 0x80, 0x93, 0x5e, 0xbd, 0x92, 0xb5, 0x15, 0x32, 0x22, 0xad, 0xf1, + 0x83, 0x34, 0xc9, 0x9c, 0xf4, 0xbb, 0x3d, 0x1c, 0xee, 0xa4, 0x57, 0x3f, 0x95, 0x0e, 0x7a, 0x8a, + 0x39, 0x9c, 0x1e, 0x3e, 0x44, 0xcb, 0x0e, 0x65, 0x7c, 0x3f, 0xf4, 0xdb, 0x70, 0x60, 0xbb, 0xa0, + 0xce, 0xe0, 0xfd, 0x53, 0x2a, 0x96, 0xe1, 0xa4, 0x2e, 0x5c, 0x8c, 0x55, 0x95, 0xcb, 0xf2, 0x6e, + 0x16, 0x89, 0x0c, 0x03, 0xe3, 0xaf, 0x10, 0x16, 0x82, 0x83, 0x90, 0x7a, 0x2c, 0xde, 0x9d, 0x08, + 0x37, 0x3f, 0x7b, 0xb8, 0x35, 0x15, 0x0e, 0xef, 0x8e, 0xc1, 0x91, 0x09, 0x21, 0xf0, 0xbb, 0x68, + 0x21, 0x04, 0xca, 0x7c, 0xaf, 0x5a, 0x90, 0x47, 0x97, 0x56, 0x8a, 0x48, 0x29, 0x51, 0x5a, 0x7c, + 0x15, 0x2d, 0xba, 0xc0, 0x18, 0xed, 0x40, 0x75, 0x41, 0x1a, 0x5e, 0x50, 0x86, 0x8b, 0x7b, 0xb1, + 0x98, 0x24, 0xfa, 0xc6, 0x0b, 0x0d, 0x2d, 0xee, 0xf8, 0xed, 0x5d, 0x9b, 0x71, 0xfc, 0x78, 0x8c, + 0xee, 0xcd, 0x33, 0xee, 0x46, 0xb8, 0x4b, 0xd6, 0x57, 0x54, 0xa0, 0x62, 0x22, 0xc9, 0x70, 0xbe, + 0x85, 0x0a, 0x36, 0x07, 0x57, 0xd4, 0x3d, 0xbf, 0x5e, 0xde, 0xd2, 0x67, 0x23, 0xa7, 0xb1, 0xac, + 0xa0, 0x0b, 0x77, 0x05, 0x08, 0x89, 0xb1, 0x1a, 0x2f, 0xf2, 0x32, 0x7f, 0x71, 0x09, 0xf0, 0x26, + 0x2a, 0x07, 0x34, 0xa4, 0x8e, 0x03, 0x8e, 0xcd, 0x5c, 0xb9, 0x85, 0x82, 0x71, 0xa1, 0xdf, 0xab, + 0x97, 0xf7, 0x07, 0x62, 0x92, 0xb5, 0x11, 0x2e, 0xa6, 0xef, 0x06, 0x0e, 0x88, 0x33, 0x8e, 0x19, + 0xa9, 0x5c, 0xb6, 0x07, 0x62, 0x92, 0xb5, 0xc1, 0xf7, 0xd0, 0x2a, 0x35, 0xb9, 0x7d, 0x0c, 0x9f, + 0x02, 0xb5, 0x1c, 0xdb, 0x83, 0x16, 0x98, 0xbe, 0x67, 0xc5, 0x77, 0x2e, 0x6f, 0xfc, 0xbf, 0xdf, + 0xab, 0xaf, 0x7e, 0x32, 0xc9, 0x80, 0x4c, 0xf6, 0xc3, 0x6d, 0x54, 0x64, 0xe0, 0x80, 0xc9, 0xfd, + 0x50, 0x91, 0xe8, 0xe6, 0x0c, 0x47, 0xb3, 0x4b, 0xdb, 0xe0, 0xb4, 0x94, 0xbf, 0xb1, 0x24, 0xce, + 0x3e, 0x59, 0x91, 0x14, 0x17, 0xdf, 0x42, 0x2b, 0x2e, 0xf5, 0x22, 0x9a, 0x5a, 0x4a, 0x06, 0x15, + 0x0d, 0xdc, 0xef, 0xd5, 0x57, 0xf6, 0x86, 0x34, 0x64, 0xc4, 0x12, 0x7f, 0x89, 0x8a, 0x1c, 0xdc, + 0xc0, 0xa1, 0x3c, 0xa6, 0x53, 0x79, 0x6b, 0xe3, 0xf4, 0x2e, 0xb8, 0xef, 0x5b, 0x07, 0xca, 0x41, + 0xb6, 0xaa, 0x94, 0x14, 0x89, 0x94, 0xa4, 0x80, 0x8d, 0x9f, 0xf2, 0xa8, 0x94, 0xb6, 0x1e, 0x7c, + 0x84, 0x90, 0x99, 0x5c, 0x6f, 0x56, 0xd5, 0x24, 0x4f, 0x6e, 0xcc, 0xc6, 0x93, 0xb4, 0x3d, 0x0c, + 0x3a, 0x70, 0x2a, 0x62, 0x24, 0x03, 0x8f, 0x1f, 0xa2, 0x12, 0xe3, 0x34, 0xe4, 0xf2, 0xf6, 0xe6, + 0x66, 0xbf, 0xbd, 0xcb, 0xfd, 0x5e, 0xbd, 0xd4, 0x4a, 0x10, 0xc8, 0x00, 0x0c, 0x77, 0xd0, 0xca, + 0x80, 0x31, 0xe7, 0xed, 0x45, 0xb2, 0x34, 0xdb, 0x43, 0x30, 0x64, 0x04, 0x56, 0x34, 0x84, 0x98, + 0x53, 0x92, 0x38, 0x85, 0x41, 0x43, 0x88, 0x09, 0x48, 0x94, 0x16, 0x37, 0x51, 0x89, 0x45, 0xa6, + 0x09, 0x60, 0x81, 0x25, 0x2b, 0x5f, 0x30, 0x2e, 0x2a, 0xd3, 0x52, 0x2b, 0x51, 0x90, 0x81, 0x8d, + 0x00, 0x7e, 0x42, 0x6d, 0x07, 0x2c, 0x59, 0xf1, 0x0c, 0xf0, 0x67, 0x52, 0x4a, 0x94, 0xb6, 0xf1, + 0xab, 0x86, 0xca, 0x3b, 0x7e, 0x3b, 0x29, 0xec, 0x1b, 0x7c, 0x31, 0x0f, 0x33, 0x2c, 0x8c, 0x8b, + 0x75, 0x6b, 0x36, 0x62, 0x9c, 0x99, 0x92, 0x3f, 0x6b, 0xe8, 0xc2, 0x88, 0xfd, 0x7f, 0x6d, 0x12, + 0x68, 0xf4, 0x72, 0x68, 0x79, 0xa8, 0x33, 0xe0, 0xe7, 0x1a, 0x2a, 0xbb, 0x02, 0x40, 0x8a, 0x93, + 0xcb, 0x75, 0xf7, 0xbc, 0x9d, 0x46, 0xdf, 0x1b, 0x60, 0xdd, 0xf1, 0x78, 0xd8, 0x35, 0xfe, 0xa7, + 0xd2, 0x28, 0x67, 0x34, 0x24, 0x1b, 0x12, 0x7f, 0xa3, 0xa1, 0x8a, 0x5c, 0xdf, 0xf9, 0x3a, 0x08, + 0x81, 0x31, 0xd5, 0x72, 0x45, 0x1e, 0xdb, 0xe7, 0xcd, 0x83, 0xc0, 0xb3, 0xc8, 0x0e, 0xc1, 0x05, + 0x8f, 0x1b, 0x55, 0x95, 0x41, 0x65, 0x6f, 0x24, 0x08, 0x19, 0x0b, 0xbb, 0x76, 0x1b, 0x55, 0x46, + 0x77, 0x80, 0x2b, 0x28, 0x7f, 0x04, 0xdd, 0x78, 0x9c, 0x21, 0xe2, 0x13, 0x5f, 0x42, 0x85, 0x63, + 0xea, 0x44, 0x31, 0xe3, 0x4a, 0x24, 0x5e, 0xdc, 0xca, 0xdd, 0xd4, 0x1a, 0x3f, 0x68, 0xa8, 0x3a, + 0x2d, 0x11, 0xfc, 0x76, 0x06, 0xc8, 0x28, 0xab, 0xac, 0xf2, 0x9f, 0x43, 0x37, 0x46, 0xbd, 0x83, + 0x8a, 0x7e, 0x20, 0x06, 0x4e, 0x3f, 0x54, 0x33, 0xd0, 0xd5, 0x84, 0x8e, 0xf7, 0x94, 0xfc, 0xa4, + 0x57, 0x5f, 0x1d, 0x82, 0x4f, 0x14, 0x24, 0x75, 0xc5, 0x0d, 0xb4, 0x20, 0xf3, 0x11, 0x2f, 0x4f, + 0x7e, 0xbd, 0x64, 0x20, 0x71, 0x3f, 0x1f, 0x48, 0x09, 0x51, 0x9a, 0xc6, 0x8f, 0x39, 0xb4, 0xd4, + 0x32, 0x0f, 0xc1, 0x8a, 0x1c, 0xb0, 0xde, 0xec, 0x48, 0xfb, 0x78, 0x88, 0xc8, 0x1f, 0xcd, 0x50, + 0xd0, 0x6c, 0x82, 0x53, 0x67, 0x5b, 0x18, 0x99, 0x6d, 0x3f, 0x3e, 0x6f, 0x80, 0xd3, 0x87, 0xdc, + 0x5f, 0x34, 0x54, 0xc9, 0x9a, 0xff, 0x1b, 0x83, 0xd1, 0xa3, 0xe1, 0xc1, 0xe8, 0xc6, 0x39, 0x77, + 0x36, 0x65, 0x42, 0xfa, 0x36, 0x3f, 0xbc, 0x23, 0xd9, 0xcf, 0xae, 0xa1, 0x22, 0x53, 0x32, 0x45, + 0xd3, 0x34, 0xc1, 0xc4, 0x96, 0xa4, 0x16, 0xf8, 0x3e, 0xba, 0x2c, 0x1f, 0x37, 0xdb, 0xeb, 0x8c, + 0x0e, 0x3d, 0x39, 0x39, 0xf4, 0xbc, 0xd5, 0xef, 0xd5, 0x2f, 0xb7, 0x26, 0x9b, 0x90, 0x69, 0xbe, + 0xf8, 0x11, 0xba, 0x68, 0xfa, 0x9e, 0x19, 0x85, 0x21, 0x78, 0x66, 0x77, 0xdf, 0x77, 0x6c, 0xb3, + 0x2b, 0xab, 0x5b, 0x32, 0x74, 0x95, 0xcd, 0xc5, 0xed, 0x51, 0x83, 0x93, 0x49, 0x42, 0x32, 0x0e, + 0x84, 0xdf, 0x41, 0x8b, 0x2c, 0x62, 0x01, 0x78, 0x96, 0x7c, 0x1c, 0x8b, 0x46, 0x59, 0x0c, 0xc0, + 0xad, 0x58, 0x44, 0x12, 0x1d, 0x7e, 0x86, 0xca, 0x4f, 0x07, 0xcd, 0x5e, 0x3e, 0x8e, 0xff, 0xec, + 0x69, 0x49, 0xfb, 0x60, 0x46, 0x41, 0xb2, 0x31, 0x1a, 0x7f, 0x68, 0x08, 0x8f, 0x53, 0x12, 0xdf, + 0x4f, 0x1f, 0xf3, 0xb8, 0x37, 0x6f, 0x9c, 0xe5, 0x62, 0x12, 0x78, 0x02, 0x62, 0xd7, 0x30, 0xf5, + 0xed, 0x77, 0x51, 0x45, 0xfc, 0x4a, 0x24, 0x01, 0xcf, 0xfb, 0xaf, 0x72, 0x49, 0x34, 0xd6, 0xdd, + 0x11, 0x20, 0x32, 0x06, 0x6d, 0xbc, 0xf7, 0xf2, 0x75, 0x6d, 0xee, 0xd5, 0xeb, 0xda, 0xdc, 0xef, + 0xaf, 0x6b, 0x73, 0xcf, 0xfb, 0x35, 0xed, 0x65, 0xbf, 0xa6, 0xbd, 0xea, 0xd7, 0xb4, 0x3f, 0xfb, + 0x35, 0xed, 0xbb, 0xbf, 0x6a, 0x73, 0x5f, 0x14, 0x93, 0xa3, 0xfb, 0x3b, 0x00, 0x00, 0xff, 0xff, + 0xe9, 0x18, 0x89, 0xa0, 0xc4, 0x10, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/generated.proto index cfcbd01c..c849e63c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ package k8s.io.kubernetes.pkg.apis.batch.v2alpha1; import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". @@ -31,15 +32,15 @@ option go_package = "v2alpha1"; // Job represents the configuration of a single job. message Job { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Spec is a structure defining the expected behavior of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional JobSpec spec = 2; // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional JobStatus status = 3; } @@ -67,7 +68,7 @@ message JobCondition { // JobList is a collection of jobs. message JobList { // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is the list of Job. @@ -80,7 +81,7 @@ message JobSpec { // run at any given time. The actual number of pods running in steady state will // be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), // i.e. when the work left to do is less than max parallelism. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional int32 parallelism = 1; // Completions specifies the desired number of successfully finished pods the @@ -88,7 +89,7 @@ message JobSpec { // pod signals the success of all pods, and allows parallelism to have any positive // value. Setting to 1 means that parallelism is limited to 1 and the success of that // pod signals the success of the job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional int32 completions = 2; // Optional duration in seconds relative to the startTime that the job may be active @@ -97,7 +98,7 @@ message JobSpec { // Selector is a label query over pods that should match the pod count. // Normally, the system sets this field for you. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors optional LabelSelector selector = 4; // ManualSelector controls generation of pod labels and pod selectors. @@ -109,19 +110,19 @@ message JobSpec { // and other jobs to not function correctly. However, You may see // `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` // API. - // More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md + // More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md optional bool manualSelector = 5; // Template is the object that describes the pod that will be created when // executing a job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec template = 6; } // JobStatus represents the current state of a Job. message JobStatus { // Conditions represent the latest available observations of an object's current state. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md repeated JobCondition conditions = 1; // StartTime represents time when the job was acknowledged by the Job Manager. @@ -147,22 +148,22 @@ message JobStatus { // JobTemplate describes a template for creating copies of a predefined pod. message JobTemplate { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Template defines jobs that will be created from this template - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional JobTemplateSpec template = 2; } // JobTemplateSpec describes the data a Job should have when created from a template message JobTemplateSpec { // Standard object's metadata of the jobs created from this template. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Specification of the desired behavior of the job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional JobSpec spec = 2; } @@ -199,22 +200,22 @@ message LabelSelectorRequirement { // ScheduledJob represents the configuration of a single scheduled job. message ScheduledJob { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Spec is a structure defining the expected behavior of a job, including the schedule. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ScheduledJobSpec spec = 2; // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ScheduledJobStatus status = 3; } // ScheduledJobList is a collection of scheduled jobs. message ScheduledJobList { // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is the list of ScheduledJob. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/register.go index 00142f01..07bd276f 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,14 +29,13 @@ const GroupName = "batch" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v2alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Job{}, &JobList{}, @@ -47,4 +46,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.DeleteOptions{}, ) versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/types.go index 568f5171..178fc656 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,15 +25,15 @@ import ( type Job struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec is a structure defining the expected behavior of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status JobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -41,7 +41,7 @@ type Job struct { type JobList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is the list of Job. @@ -52,22 +52,22 @@ type JobList struct { type JobTemplate struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Template defines jobs that will be created from this template - // http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Template JobTemplateSpec `json:"template,omitempty" protobuf:"bytes,2,opt,name=template"` } // JobTemplateSpec describes the data a Job should have when created from a template type JobTemplateSpec struct { // Standard object's metadata of the jobs created from this template. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior of the job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` } @@ -78,7 +78,7 @@ type JobSpec struct { // run at any given time. The actual number of pods running in steady state will // be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), // i.e. when the work left to do is less than max parallelism. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Parallelism *int32 `json:"parallelism,omitempty" protobuf:"varint,1,opt,name=parallelism"` // Completions specifies the desired number of successfully finished pods the @@ -86,7 +86,7 @@ type JobSpec struct { // pod signals the success of all pods, and allows parallelism to have any positive // value. Setting to 1 means that parallelism is limited to 1 and the success of that // pod signals the success of the job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Completions *int32 `json:"completions,omitempty" protobuf:"varint,2,opt,name=completions"` // Optional duration in seconds relative to the startTime that the job may be active @@ -95,7 +95,7 @@ type JobSpec struct { // Selector is a label query over pods that should match the pod count. // Normally, the system sets this field for you. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,opt,name=selector"` // ManualSelector controls generation of pod labels and pod selectors. @@ -107,12 +107,12 @@ type JobSpec struct { // and other jobs to not function correctly. However, You may see // `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` // API. - // More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md + // More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md ManualSelector *bool `json:"manualSelector,omitempty" protobuf:"varint,5,opt,name=manualSelector"` // Template is the object that describes the pod that will be created when // executing a job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,6,opt,name=template"` } @@ -120,7 +120,7 @@ type JobSpec struct { type JobStatus struct { // Conditions represent the latest available observations of an object's current state. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Conditions []JobCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` // StartTime represents time when the job was acknowledged by the Job Manager. @@ -173,15 +173,15 @@ type JobCondition struct { type ScheduledJob struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec is a structure defining the expected behavior of a job, including the schedule. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec ScheduledJobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status ScheduledJobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -189,7 +189,7 @@ type ScheduledJob struct { type ScheduledJobList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is the list of ScheduledJob. @@ -211,7 +211,7 @@ type ScheduledJobSpec struct { // Suspend flag tells the controller to suspend subsequent executions, it does // not apply to already started executions. Defaults to false. - Suspend *bool `json:"suspend" protobuf:"varint,4,opt,name=suspend"` + Suspend *bool `json:"suspend,omitempty" protobuf:"varint,4,opt,name=suspend"` // JobTemplate is the object that describes the job that will be created when // executing a ScheduledJob. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/types_swagger_doc_generated.go index 95b86d0d..710e3e15 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,9 +29,9 @@ package v2alpha1 // AUTO-GENERATED FUNCTIONS START HERE var map_Job = map[string]string{ "": "Job represents the configuration of a single job.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec is a structure defining the expected behavior of a job. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status is a structure describing current status of a job. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec is a structure defining the expected behavior of a job. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is a structure describing current status of a job. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (Job) SwaggerDoc() map[string]string { @@ -54,7 +54,7 @@ func (JobCondition) SwaggerDoc() map[string]string { var map_JobList = map[string]string{ "": "JobList is a collection of jobs.", - "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is the list of Job.", } @@ -64,12 +64,12 @@ func (JobList) SwaggerDoc() map[string]string { var map_JobSpec = map[string]string{ "": "JobSpec describes how the job execution will look like.", - "parallelism": "Parallelism specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", - "completions": "Completions specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "parallelism": "Parallelism specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", + "completions": "Completions specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", "activeDeadlineSeconds": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", - "selector": "Selector is a label query over pods that should match the pod count. Normally, the system sets this field for you. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", - "manualSelector": "ManualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md", - "template": "Template is the object that describes the pod that will be created when executing a job. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "selector": "Selector is a label query over pods that should match the pod count. Normally, the system sets this field for you. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", + "manualSelector": "ManualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md", + "template": "Template is the object that describes the pod that will be created when executing a job. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", } func (JobSpec) SwaggerDoc() map[string]string { @@ -78,7 +78,7 @@ func (JobSpec) SwaggerDoc() map[string]string { var map_JobStatus = map[string]string{ "": "JobStatus represents the current state of a Job.", - "conditions": "Conditions represent the latest available observations of an object's current state. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "conditions": "Conditions represent the latest available observations of an object's current state. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", "startTime": "StartTime represents time when the job was acknowledged by the Job Manager. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", "completionTime": "CompletionTime represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", "active": "Active is the number of actively running pods.", @@ -92,8 +92,8 @@ func (JobStatus) SwaggerDoc() map[string]string { var map_JobTemplate = map[string]string{ "": "JobTemplate describes a template for creating copies of a predefined pod.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "template": "Template defines jobs that will be created from this template http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "template": "Template defines jobs that will be created from this template http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (JobTemplate) SwaggerDoc() map[string]string { @@ -102,8 +102,8 @@ func (JobTemplate) SwaggerDoc() map[string]string { var map_JobTemplateSpec = map[string]string{ "": "JobTemplateSpec describes the data a Job should have when created from a template", - "metadata": "Standard object's metadata of the jobs created from this template. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Specification of the desired behavior of the job. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata of the jobs created from this template. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Specification of the desired behavior of the job. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (JobTemplateSpec) SwaggerDoc() map[string]string { @@ -133,9 +133,9 @@ func (LabelSelectorRequirement) SwaggerDoc() map[string]string { var map_ScheduledJob = map[string]string{ "": "ScheduledJob represents the configuration of a single scheduled job.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec is a structure defining the expected behavior of a job, including the schedule. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status is a structure describing current status of a job. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec is a structure defining the expected behavior of a job, including the schedule. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is a structure describing current status of a job. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (ScheduledJob) SwaggerDoc() map[string]string { @@ -144,7 +144,7 @@ func (ScheduledJob) SwaggerDoc() map[string]string { var map_ScheduledJobList = map[string]string{ "": "ScheduledJobList is a collection of scheduled jobs.", - "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is the list of ScheduledJob.", } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.conversion.go similarity index 98% rename from vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/conversion_generated.go rename to vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.conversion.go index c411875e..862b2921 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,10 +26,17 @@ import ( v1 "k8s.io/kubernetes/pkg/api/v1" batch "k8s.io/kubernetes/pkg/apis/batch" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v2alpha1_Job_To_batch_Job, Convert_batch_Job_To_v2alpha1_Job, Convert_v2alpha1_JobCondition_To_batch_JobCondition, @@ -56,10 +63,7 @@ func init() { Convert_batch_ScheduledJobSpec_To_v2alpha1_ScheduledJobSpec, Convert_v2alpha1_ScheduledJobStatus_To_batch_ScheduledJobStatus, Convert_batch_ScheduledJobStatus_To_v2alpha1_ScheduledJobStatus, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v2alpha1_Job_To_batch_Job(in *Job, out *batch.Job, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..2980bac9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/v2alpha1/zz_generated.deepcopy.go @@ -0,0 +1,354 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v2alpha1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_Job, InType: reflect.TypeOf(&Job{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_JobCondition, InType: reflect.TypeOf(&JobCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_JobList, InType: reflect.TypeOf(&JobList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_JobSpec, InType: reflect.TypeOf(&JobSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_JobStatus, InType: reflect.TypeOf(&JobStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_JobTemplate, InType: reflect.TypeOf(&JobTemplate{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_JobTemplateSpec, InType: reflect.TypeOf(&JobTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_LabelSelector, InType: reflect.TypeOf(&LabelSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_LabelSelectorRequirement, InType: reflect.TypeOf(&LabelSelectorRequirement{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_ScheduledJob, InType: reflect.TypeOf(&ScheduledJob{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_ScheduledJobList, InType: reflect.TypeOf(&ScheduledJobList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_ScheduledJobSpec, InType: reflect.TypeOf(&ScheduledJobSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v2alpha1_ScheduledJobStatus, InType: reflect.TypeOf(&ScheduledJobStatus{})}, + ) +} + +func DeepCopy_v2alpha1_Job(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Job) + out := out.(*Job) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v2alpha1_JobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v2alpha1_JobStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v2alpha1_JobCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobCondition) + out := out.(*JobCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v2alpha1_JobList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobList) + out := out.(*JobList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Job, len(*in)) + for i := range *in { + if err := DeepCopy_v2alpha1_Job(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v2alpha1_JobSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobSpec) + out := out.(*JobSpec) + if in.Parallelism != nil { + in, out := &in.Parallelism, &out.Parallelism + *out = new(int32) + **out = **in + } else { + out.Parallelism = nil + } + if in.Completions != nil { + in, out := &in.Completions, &out.Completions + *out = new(int32) + **out = **in + } else { + out.Completions = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(LabelSelector) + if err := DeepCopy_v2alpha1_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if in.ManualSelector != nil { + in, out := &in.ManualSelector, &out.ManualSelector + *out = new(bool) + **out = **in + } else { + out.ManualSelector = nil + } + if err := v1.DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v2alpha1_JobStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobStatus) + out := out.(*JobStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]JobCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v2alpha1_JobCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.CompletionTime != nil { + in, out := &in.CompletionTime, &out.CompletionTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.CompletionTime = nil + } + out.Active = in.Active + out.Succeeded = in.Succeeded + out.Failed = in.Failed + return nil + } +} + +func DeepCopy_v2alpha1_JobTemplate(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobTemplate) + out := out.(*JobTemplate) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v2alpha1_JobTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v2alpha1_JobTemplateSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobTemplateSpec) + out := out.(*JobTemplateSpec) + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v2alpha1_JobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v2alpha1_LabelSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelector) + out := out.(*LabelSelector) + if in.MatchLabels != nil { + in, out := &in.MatchLabels, &out.MatchLabels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.MatchLabels = nil + } + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]LabelSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_v2alpha1_LabelSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_v2alpha1_LabelSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelectorRequirement) + out := out.(*LabelSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} + +func DeepCopy_v2alpha1_ScheduledJob(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJob) + out := out.(*ScheduledJob) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v2alpha1_ScheduledJobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v2alpha1_ScheduledJobStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v2alpha1_ScheduledJobList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobList) + out := out.(*ScheduledJobList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ScheduledJob, len(*in)) + for i := range *in { + if err := DeepCopy_v2alpha1_ScheduledJob(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v2alpha1_ScheduledJobSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobSpec) + out := out.(*ScheduledJobSpec) + out.Schedule = in.Schedule + if in.StartingDeadlineSeconds != nil { + in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.StartingDeadlineSeconds = nil + } + out.ConcurrencyPolicy = in.ConcurrencyPolicy + if in.Suspend != nil { + in, out := &in.Suspend, &out.Suspend + *out = new(bool) + **out = **in + } else { + out.Suspend = nil + } + if err := DeepCopy_v2alpha1_JobTemplateSpec(&in.JobTemplate, &out.JobTemplate, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v2alpha1_ScheduledJobStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobStatus) + out := out.(*ScheduledJobStatus) + if in.Active != nil { + in, out := &in.Active, &out.Active + *out = make([]v1.ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Active = nil + } + if in.LastScheduleTime != nil { + in, out := &in.LastScheduleTime, &out.LastScheduleTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.LastScheduleTime = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/batch/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/batch/zz_generated.deepcopy.go new file mode 100644 index 00000000..7a834641 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/batch/zz_generated.deepcopy.go @@ -0,0 +1,307 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package batch + +import ( + api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_Job, InType: reflect.TypeOf(&Job{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobCondition, InType: reflect.TypeOf(&JobCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobList, InType: reflect.TypeOf(&JobList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobSpec, InType: reflect.TypeOf(&JobSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobStatus, InType: reflect.TypeOf(&JobStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobTemplate, InType: reflect.TypeOf(&JobTemplate{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_JobTemplateSpec, InType: reflect.TypeOf(&JobTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_ScheduledJob, InType: reflect.TypeOf(&ScheduledJob{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_ScheduledJobList, InType: reflect.TypeOf(&ScheduledJobList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_ScheduledJobSpec, InType: reflect.TypeOf(&ScheduledJobSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_batch_ScheduledJobStatus, InType: reflect.TypeOf(&ScheduledJobStatus{})}, + ) +} + +func DeepCopy_batch_Job(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Job) + out := out.(*Job) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_batch_JobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_batch_JobStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_JobCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobCondition) + out := out.(*JobCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_batch_JobList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobList) + out := out.(*JobList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Job, len(*in)) + for i := range *in { + if err := DeepCopy_batch_Job(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_batch_JobSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobSpec) + out := out.(*JobSpec) + if in.Parallelism != nil { + in, out := &in.Parallelism, &out.Parallelism + *out = new(int32) + **out = **in + } else { + out.Parallelism = nil + } + if in.Completions != nil { + in, out := &in.Completions, &out.Completions + *out = new(int32) + **out = **in + } else { + out.Completions = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if in.ManualSelector != nil { + in, out := &in.ManualSelector, &out.ManualSelector + *out = new(bool) + **out = **in + } else { + out.ManualSelector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_JobStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobStatus) + out := out.(*JobStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]JobCondition, len(*in)) + for i := range *in { + if err := DeepCopy_batch_JobCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.CompletionTime != nil { + in, out := &in.CompletionTime, &out.CompletionTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.CompletionTime = nil + } + out.Active = in.Active + out.Succeeded = in.Succeeded + out.Failed = in.Failed + return nil + } +} + +func DeepCopy_batch_JobTemplate(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobTemplate) + out := out.(*JobTemplate) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_batch_JobTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_JobTemplateSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobTemplateSpec) + out := out.(*JobTemplateSpec) + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_batch_JobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_ScheduledJob(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJob) + out := out.(*ScheduledJob) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_batch_ScheduledJobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_batch_ScheduledJobStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_ScheduledJobList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobList) + out := out.(*ScheduledJobList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ScheduledJob, len(*in)) + for i := range *in { + if err := DeepCopy_batch_ScheduledJob(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_batch_ScheduledJobSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobSpec) + out := out.(*ScheduledJobSpec) + out.Schedule = in.Schedule + if in.StartingDeadlineSeconds != nil { + in, out := &in.StartingDeadlineSeconds, &out.StartingDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.StartingDeadlineSeconds = nil + } + out.ConcurrencyPolicy = in.ConcurrencyPolicy + if in.Suspend != nil { + in, out := &in.Suspend, &out.Suspend + *out = new(bool) + **out = **in + } else { + out.Suspend = nil + } + if err := DeepCopy_batch_JobTemplateSpec(&in.JobTemplate, &out.JobTemplate, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_batch_ScheduledJobStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScheduledJobStatus) + out := out.(*ScheduledJobStatus) + if in.Active != nil { + in, out := &in.Active, &out.Active + *out = make([]api.ObjectReference, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Active = nil + } + if in.LastScheduleTime != nil { + in, out := &in.LastScheduleTime, &out.LastScheduleTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.LastScheduleTime = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/doc.go new file mode 100644 index 00000000..cce031e2 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +// +groupName=certificates.k8s.io +package certificates diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/install/install.go new file mode 100644 index 00000000..7fb22de4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/install/install.go @@ -0,0 +1,137 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package install installs the certificates API group, making it available as +// an option to all of the API encoding/decoding machinery. +package install + +import ( + "fmt" + + "github.com/golang/glog" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apimachinery" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/apis/certificates" + "k8s.io/kubernetes/pkg/apis/certificates/v1alpha1" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/sets" +) + +const importPrefix = "k8s.io/kubernetes/pkg/apis/certificates" + +var accessor = meta.NewAccessor() + +// availableVersions lists all known external versions for this group from most preferred to least preferred +var availableVersions = []unversioned.GroupVersion{v1alpha1.SchemeGroupVersion} + +func init() { + registered.RegisterVersions(availableVersions) + externalVersions := []unversioned.GroupVersion{} + for _, v := range availableVersions { + if registered.IsAllowedVersion(v) { + externalVersions = append(externalVersions, v) + } + } + if len(externalVersions) == 0 { + glog.V(4).Infof("No version is registered for group %v", certificates.GroupName) + return + } + + if err := registered.EnableVersions(externalVersions...); err != nil { + glog.V(4).Infof("%v", err) + return + } + if err := enableVersions(externalVersions); err != nil { + glog.V(4).Infof("%v", err) + return + } +} + +// TODO: enableVersions should be centralized rather than spread in each API +// group. +// We can combine registered.RegisterVersions, registered.EnableVersions and +// registered.RegisterGroup once we have moved enableVersions therecertificates +func enableVersions(externalVersions []unversioned.GroupVersion) error { + addVersionsToScheme(externalVersions...) + preferredExternalVersion := externalVersions[0] + + groupMeta := apimachinery.GroupMeta{ + GroupVersion: preferredExternalVersion, + GroupVersions: externalVersions, + RESTMapper: newRESTMapper(externalVersions), + SelfLinker: runtime.SelfLinker(accessor), + InterfacesFor: interfacesFor, + } + + if err := registered.RegisterGroup(groupMeta); err != nil { + return err + } + api.RegisterRESTMapper(groupMeta.RESTMapper) + return nil +} + +func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper { + // the list of kinds that are scoped at the root of the api hierarchy + // if a kind is not enumerated here, it is assumed to have a namespace scope + rootScoped := sets.NewString( + "CertificateSigningRequest", + ) + + ignoredKinds := sets.NewString() + + return api.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped) +} + +// interfacesFor returns the default Codec and ResourceVersioner for a given version +// string, or an error if the version is not known. +func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) { + switch version { + case v1alpha1.SchemeGroupVersion: + return &meta.VersionInterfaces{ + ObjectConvertor: api.Scheme, + MetadataAccessor: accessor, + }, nil + default: + g, _ := registered.Group(certificates.GroupName) + return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions) + } +} + +func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { + // add the internal version to Scheme + if err := certificates.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } + // add the enabled external versions to Scheme + for _, v := range externalVersions { + if !registered.IsEnabledVersion(v) { + glog.Errorf("Version %s is not enabled, so it will not be added to the Scheme.", v) + continue + } + switch v { + case v1alpha1.SchemeGroupVersion: + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } + } + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/register.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/register.go new file mode 100644 index 00000000..88404411 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/register.go @@ -0,0 +1,58 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package certificates + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" +) + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// GroupName is the group name use in this package +const GroupName = "certificates.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) unversioned.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) unversioned.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &CertificateSigningRequest{}, + &CertificateSigningRequestList{}, + &api.ListOptions{}, + &api.DeleteOptions{}, + ) + return nil +} + +func (obj *CertificateSigningRequest) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *CertificateSigningRequestList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/types.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/types.go new file mode 100644 index 00000000..562725f9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/types.go @@ -0,0 +1,85 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package certificates + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" +) + +// +genclient=true +// +nonNamespaced=true + +// Describes a certificate signing request +type CertificateSigningRequest struct { + unversioned.TypeMeta `json:",inline"` + api.ObjectMeta `json:"metadata,omitempty"` + + // The certificate request itself and any additional information. + Spec CertificateSigningRequestSpec `json:"spec,omitempty"` + + // Derived information about the request. + Status CertificateSigningRequestStatus `json:"status,omitempty"` +} + +// This information is immutable after the request is created. Only the Request +// and ExtraInfo fields can be set on creation, other fields are derived by +// Kubernetes and cannot be modified by users. +type CertificateSigningRequestSpec struct { + // Base64-encoded PKCS#10 CSR data + Request []byte `json:"request"` + + // Information about the requesting user (if relevant) + // See user.Info interface for details + Username string `json:"username,omitempty"` + UID string `json:"uid,omitempty"` + Groups []string `json:"groups,omitempty"` +} + +type CertificateSigningRequestStatus struct { + // Conditions applied to the request, such as approval or denial. + Conditions []CertificateSigningRequestCondition `json:"conditions,omitempty"` + + // If request was approved, the controller will place the issued certificate here. + Certificate []byte `json:"certificate,omitempty"` +} + +type RequestConditionType string + +// These are the possible conditions for a certificate request. +const ( + CertificateApproved RequestConditionType = "Approved" + CertificateDenied RequestConditionType = "Denied" +) + +type CertificateSigningRequestCondition struct { + // request approval state, currently Approved or Denied. + Type RequestConditionType `json:"type"` + // brief reason for the request state + Reason string `json:"reason,omitempty"` + // human readable message with details about the request state + Message string `json:"message,omitempty"` + // timestamp for the last update to this condition + LastUpdateTime unversioned.Time `json:"lastUpdateTime,omitempty"` +} + +type CertificateSigningRequestList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty"` + + Items []CertificateSigningRequest `json:"items,omitempty"` +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/conversion.go new file mode 100644 index 00000000..5275811b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/conversion.go @@ -0,0 +1,39 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/runtime" +) + +func addConversionFuncs(scheme *runtime.Scheme) error { + // Add non-generated conversion functions here. Currently there are none. + + return api.Scheme.AddFieldLabelConversionFunc(SchemeGroupVersion.String(), "CertificateSigningRequest", + func(label, value string) (string, string, error) { + switch label { + case "metadata.name": + return label, value, nil + default: + return "", "", fmt.Errorf("field label not supported: %s", label) + } + }, + ) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/doc.go new file mode 100644 index 00000000..13be49cb --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/doc.go @@ -0,0 +1,21 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +groupName=certificates.k8s.io +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/certificates + +package v1alpha1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.pb.go new file mode 100644 index 00000000..164ab9a1 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.pb.go @@ -0,0 +1,1325 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.proto +// DO NOT EDIT! + +/* + Package v1alpha1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.proto + + It has these top-level messages: + CertificateSigningRequest + CertificateSigningRequestCondition + CertificateSigningRequestList + CertificateSigningRequestSpec + CertificateSigningRequestStatus +*/ +package v1alpha1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *CertificateSigningRequest) Reset() { *m = CertificateSigningRequest{} } +func (*CertificateSigningRequest) ProtoMessage() {} +func (*CertificateSigningRequest) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{0} +} + +func (m *CertificateSigningRequestCondition) Reset() { *m = CertificateSigningRequestCondition{} } +func (*CertificateSigningRequestCondition) ProtoMessage() {} +func (*CertificateSigningRequestCondition) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{1} +} + +func (m *CertificateSigningRequestList) Reset() { *m = CertificateSigningRequestList{} } +func (*CertificateSigningRequestList) ProtoMessage() {} +func (*CertificateSigningRequestList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{2} +} + +func (m *CertificateSigningRequestSpec) Reset() { *m = CertificateSigningRequestSpec{} } +func (*CertificateSigningRequestSpec) ProtoMessage() {} +func (*CertificateSigningRequestSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{3} +} + +func (m *CertificateSigningRequestStatus) Reset() { *m = CertificateSigningRequestStatus{} } +func (*CertificateSigningRequestStatus) ProtoMessage() {} +func (*CertificateSigningRequestStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{4} +} + +func init() { + proto.RegisterType((*CertificateSigningRequest)(nil), "k8s.io.kubernetes.pkg.apis.certificates.v1alpha1.CertificateSigningRequest") + proto.RegisterType((*CertificateSigningRequestCondition)(nil), "k8s.io.kubernetes.pkg.apis.certificates.v1alpha1.CertificateSigningRequestCondition") + proto.RegisterType((*CertificateSigningRequestList)(nil), "k8s.io.kubernetes.pkg.apis.certificates.v1alpha1.CertificateSigningRequestList") + proto.RegisterType((*CertificateSigningRequestSpec)(nil), "k8s.io.kubernetes.pkg.apis.certificates.v1alpha1.CertificateSigningRequestSpec") + proto.RegisterType((*CertificateSigningRequestStatus)(nil), "k8s.io.kubernetes.pkg.apis.certificates.v1alpha1.CertificateSigningRequestStatus") +} +func (m *CertificateSigningRequest) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CertificateSigningRequest) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n2, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n3, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n3 + return i, nil +} + +func (m *CertificateSigningRequestCondition) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CertificateSigningRequestCondition) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Type))) + i += copy(data[i:], m.Type) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) + i += copy(data[i:], m.Reason) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Message))) + i += copy(data[i:], m.Message) + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastUpdateTime.Size())) + n4, err := m.LastUpdateTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n4 + return i, nil +} + +func (m *CertificateSigningRequestList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CertificateSigningRequestList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n5, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n5 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func (m *CertificateSigningRequestSpec) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CertificateSigningRequestSpec) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Request != nil { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Request))) + i += copy(data[i:], m.Request) + } + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Username))) + i += copy(data[i:], m.Username) + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.UID))) + i += copy(data[i:], m.UID) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + data[i] = 0x22 + i++ + l = len(s) + for l >= 1<<7 { + data[i] = uint8(uint64(l)&0x7f | 0x80) + l >>= 7 + i++ + } + data[i] = uint8(l) + i++ + i += copy(data[i:], s) + } + } + return i, nil +} + +func (m *CertificateSigningRequestStatus) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *CertificateSigningRequestStatus) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.Conditions) > 0 { + for _, msg := range m.Conditions { + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + if m.Certificate != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Certificate))) + i += copy(data[i:], m.Certificate) + } + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *CertificateSigningRequest) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CertificateSigningRequestCondition) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Reason) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Message) + n += 1 + l + sovGenerated(uint64(l)) + l = m.LastUpdateTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *CertificateSigningRequestList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CertificateSigningRequestSpec) Size() (n int) { + var l int + _ = l + if m.Request != nil { + l = len(m.Request) + n += 1 + l + sovGenerated(uint64(l)) + } + l = len(m.Username) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.UID) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Groups) > 0 { + for _, s := range m.Groups { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *CertificateSigningRequestStatus) Size() (n int) { + var l int + _ = l + if len(m.Conditions) > 0 { + for _, e := range m.Conditions { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + if m.Certificate != nil { + l = len(m.Certificate) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *CertificateSigningRequest) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CertificateSigningRequest{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "CertificateSigningRequestSpec", "CertificateSigningRequestSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "CertificateSigningRequestStatus", "CertificateSigningRequestStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CertificateSigningRequestCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CertificateSigningRequestCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `LastUpdateTime:` + strings.Replace(strings.Replace(this.LastUpdateTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CertificateSigningRequestList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CertificateSigningRequestList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CertificateSigningRequest", "CertificateSigningRequest", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CertificateSigningRequestSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CertificateSigningRequestSpec{`, + `Request:` + valueToStringGenerated(this.Request) + `,`, + `Username:` + fmt.Sprintf("%v", this.Username) + `,`, + `UID:` + fmt.Sprintf("%v", this.UID) + `,`, + `Groups:` + fmt.Sprintf("%v", this.Groups) + `,`, + `}`, + }, "") + return s +} +func (this *CertificateSigningRequestStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CertificateSigningRequestStatus{`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "CertificateSigningRequestCondition", "CertificateSigningRequestCondition", 1), `&`, ``, 1) + `,`, + `Certificate:` + valueToStringGenerated(this.Certificate) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *CertificateSigningRequest) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CertificateSigningRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CertificateSigningRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Spec.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Status.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CertificateSigningRequestCondition) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CertificateSigningRequestCondition: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CertificateSigningRequestCondition: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = RequestConditionType(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Reason = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Message = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastUpdateTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastUpdateTime.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CertificateSigningRequestList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CertificateSigningRequestList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CertificateSigningRequestList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, CertificateSigningRequest{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CertificateSigningRequestSpec) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CertificateSigningRequestSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CertificateSigningRequestSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Request", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Request = append(m.Request[:0], data[iNdEx:postIndex]...) + if m.Request == nil { + m.Request = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Username", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Username = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Groups", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Groups = append(m.Groups, string(data[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CertificateSigningRequestStatus) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CertificateSigningRequestStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CertificateSigningRequestStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Conditions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Conditions = append(m.Conditions, CertificateSigningRequestCondition{}) + if err := m.Conditions[len(m.Conditions)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Certificate", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + byteLen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + byteLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Certificate = append(m.Certificate[:0], data[iNdEx:postIndex]...) + if m.Certificate == nil { + m.Certificate = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 692 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0xd3, 0x4a, + 0x14, 0x8e, 0x93, 0x34, 0x4d, 0x26, 0xbd, 0xed, 0xd5, 0xe8, 0xea, 0x2a, 0x37, 0x52, 0x9d, 0x2a, + 0xba, 0xa0, 0x00, 0xed, 0x98, 0x54, 0x42, 0xea, 0x12, 0xb9, 0x48, 0xa8, 0xa2, 0x55, 0xc5, 0xb4, + 0x95, 0x10, 0x12, 0x8b, 0x89, 0x73, 0xea, 0x0e, 0x69, 0x6c, 0xd7, 0x33, 0x8e, 0xd4, 0x1d, 0x4b, + 0x96, 0x3c, 0x01, 0xaf, 0xc1, 0x2b, 0x74, 0xd9, 0x25, 0xab, 0x40, 0xd3, 0x17, 0x60, 0xcd, 0x0a, + 0x79, 0x32, 0x4e, 0x4c, 0x52, 0x17, 0x90, 0xba, 0xcb, 0xf9, 0xe6, 0x9c, 0xef, 0x3b, 0x3f, 0x9f, + 0x83, 0x9e, 0xf6, 0xb6, 0x04, 0xe1, 0xbe, 0xd5, 0x8b, 0x3a, 0x10, 0x7a, 0x20, 0x41, 0x58, 0x41, + 0xcf, 0xb5, 0x58, 0xc0, 0x85, 0xe5, 0x40, 0x28, 0xf9, 0x31, 0x77, 0x58, 0x8c, 0x0e, 0xda, 0xec, + 0x34, 0x38, 0x61, 0x6d, 0xcb, 0x05, 0x0f, 0x42, 0x26, 0xa1, 0x4b, 0x82, 0xd0, 0x97, 0x3e, 0x7e, + 0x3c, 0x66, 0x20, 0x53, 0x06, 0x12, 0xf4, 0x5c, 0x12, 0x33, 0x90, 0x34, 0x03, 0x49, 0x18, 0xea, + 0x1b, 0x2e, 0x97, 0x27, 0x51, 0x87, 0x38, 0x7e, 0xdf, 0x72, 0x7d, 0xd7, 0xb7, 0x14, 0x51, 0x27, + 0x3a, 0x56, 0x91, 0x0a, 0xd4, 0xaf, 0xb1, 0x40, 0x7d, 0x33, 0xb3, 0x45, 0x2b, 0x04, 0xe1, 0x47, + 0xa1, 0x03, 0xb3, 0x4d, 0xd5, 0x9f, 0x64, 0xd7, 0x44, 0xde, 0x00, 0x42, 0xc1, 0x7d, 0x0f, 0xba, + 0x73, 0x65, 0xeb, 0xd9, 0x65, 0x83, 0xb9, 0xc9, 0xeb, 0x1b, 0x37, 0x67, 0x87, 0x91, 0x27, 0x79, + 0x7f, 0xbe, 0xa7, 0xf6, 0xcd, 0xe9, 0x91, 0xe4, 0xa7, 0x16, 0xf7, 0xa4, 0x90, 0xe1, 0x6c, 0x49, + 0xf3, 0x3a, 0x8f, 0xfe, 0xdb, 0x9e, 0xee, 0xf0, 0x80, 0xbb, 0x1e, 0xf7, 0x5c, 0x0a, 0x67, 0x11, + 0x08, 0x89, 0x5f, 0xa1, 0x72, 0x1f, 0x24, 0xeb, 0x32, 0xc9, 0x6a, 0xc6, 0x9a, 0xd1, 0xaa, 0x6e, + 0xb6, 0x48, 0xe6, 0x31, 0xc8, 0xa0, 0x4d, 0xf6, 0x3b, 0x6f, 0xc1, 0x91, 0x7b, 0x20, 0x99, 0x8d, + 0x2f, 0x86, 0x8d, 0xdc, 0x68, 0xd8, 0x40, 0x53, 0x8c, 0x4e, 0xd8, 0xf0, 0x19, 0x2a, 0x8a, 0x00, + 0x9c, 0x5a, 0x5e, 0xb1, 0xee, 0x93, 0x3f, 0x3d, 0x31, 0xc9, 0x6c, 0xfa, 0x20, 0x00, 0xc7, 0x5e, + 0xd2, 0xe2, 0xc5, 0x38, 0xa2, 0x4a, 0x0a, 0x9f, 0xa3, 0x92, 0x90, 0x4c, 0x46, 0xa2, 0x56, 0x50, + 0xa2, 0x2f, 0xef, 0x52, 0x54, 0x11, 0xdb, 0xcb, 0x5a, 0xb6, 0x34, 0x8e, 0xa9, 0x16, 0x6c, 0x7e, + 0xcc, 0xa3, 0x66, 0x66, 0xed, 0xb6, 0xef, 0x75, 0xb9, 0xe4, 0xbe, 0x87, 0xb7, 0x50, 0x51, 0x9e, + 0x07, 0xa0, 0x56, 0x5d, 0xb1, 0xff, 0x4f, 0x66, 0x38, 0x3c, 0x0f, 0xe0, 0xfb, 0xb0, 0xf1, 0xcf, + 0x6c, 0x7e, 0x8c, 0x53, 0x55, 0x81, 0xef, 0xa3, 0x52, 0x08, 0x4c, 0xf8, 0x9e, 0x5a, 0x68, 0x65, + 0xda, 0x08, 0x55, 0x28, 0xd5, 0xaf, 0xf8, 0x01, 0x5a, 0xec, 0x83, 0x10, 0xcc, 0x05, 0xb5, 0x84, + 0x8a, 0xbd, 0xa2, 0x13, 0x17, 0xf7, 0xc6, 0x30, 0x4d, 0xde, 0x71, 0x0f, 0x2d, 0x9f, 0x32, 0x21, + 0x8f, 0x82, 0x2e, 0x93, 0x70, 0xc8, 0xfb, 0x50, 0x2b, 0xaa, 0xb5, 0x3d, 0xba, 0xc5, 0x01, 0x29, + 0xe7, 0x93, 0xb8, 0xc4, 0xfe, 0x57, 0xd3, 0x2f, 0xef, 0xfe, 0x44, 0x45, 0x67, 0xa8, 0x9b, 0xdf, + 0x0c, 0xb4, 0x9a, 0xb9, 0xa0, 0x5d, 0x2e, 0x24, 0x7e, 0x33, 0x67, 0x45, 0xeb, 0x37, 0x1b, 0x89, + 0xcb, 0x95, 0x23, 0xff, 0xd6, 0xcd, 0x94, 0x13, 0x24, 0xe5, 0xc7, 0x00, 0x2d, 0x70, 0x09, 0x7d, + 0x51, 0xcb, 0xaf, 0x15, 0x5a, 0xd5, 0xcd, 0x17, 0x77, 0xe8, 0x0d, 0xfb, 0x2f, 0xad, 0xbb, 0xb0, + 0x13, 0x2b, 0xd0, 0xb1, 0x50, 0xf3, 0xd3, 0x6d, 0x23, 0xc7, 0xb6, 0xc5, 0xf7, 0xd0, 0x62, 0x38, + 0x0e, 0xd5, 0xc4, 0x4b, 0x76, 0x35, 0x3e, 0x94, 0xce, 0xa0, 0xc9, 0x1b, 0x5e, 0x47, 0xe5, 0x48, + 0x40, 0xe8, 0xb1, 0x3e, 0xe8, 0xeb, 0x4f, 0x06, 0x3d, 0xd2, 0x38, 0x9d, 0x64, 0xe0, 0x55, 0x54, + 0x88, 0x78, 0x57, 0x5f, 0xbf, 0xaa, 0x13, 0x0b, 0x47, 0x3b, 0xcf, 0x68, 0x8c, 0xe3, 0x26, 0x2a, + 0xb9, 0xa1, 0x1f, 0x05, 0xa2, 0x56, 0x5c, 0x2b, 0xb4, 0x2a, 0x36, 0x8a, 0x4d, 0xf4, 0x5c, 0x21, + 0x54, 0xbf, 0x34, 0xbf, 0x18, 0xa8, 0xf1, 0x8b, 0x2f, 0x01, 0xbf, 0x37, 0x10, 0x72, 0x12, 0xa3, + 0x8a, 0x9a, 0xa1, 0xb6, 0x7a, 0x78, 0x87, 0x5b, 0x9d, 0x7c, 0x05, 0xd3, 0x3f, 0x9a, 0x09, 0x24, + 0x68, 0x4a, 0x1b, 0xb7, 0x51, 0x35, 0xc5, 0xad, 0x56, 0xb4, 0x64, 0xaf, 0x8c, 0x86, 0x8d, 0x6a, + 0x8a, 0x9c, 0xa6, 0x73, 0xec, 0x87, 0x17, 0x57, 0x66, 0xee, 0xf2, 0xca, 0xcc, 0x7d, 0xbe, 0x32, + 0x73, 0xef, 0x46, 0xa6, 0x71, 0x31, 0x32, 0x8d, 0xcb, 0x91, 0x69, 0x7c, 0x1d, 0x99, 0xc6, 0x87, + 0x6b, 0x33, 0xf7, 0xba, 0x9c, 0x74, 0xf8, 0x23, 0x00, 0x00, 0xff, 0xff, 0x29, 0x0b, 0xef, 0x6d, + 0xe0, 0x06, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.proto new file mode 100644 index 00000000..5638d1d6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/generated.proto @@ -0,0 +1,87 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.apis.certificates.v1alpha1; + +import "k8s.io/kubernetes/pkg/api/resource/generated.proto"; +import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; +import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1alpha1"; + +// Describes a certificate signing request +message CertificateSigningRequest { + optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; + + // The certificate request itself and any additional information. + optional CertificateSigningRequestSpec spec = 2; + + // Derived information about the request. + optional CertificateSigningRequestStatus status = 3; +} + +message CertificateSigningRequestCondition { + // request approval state, currently Approved or Denied. + optional string type = 1; + + // brief reason for the request state + optional string reason = 2; + + // human readable message with details about the request state + optional string message = 3; + + // timestamp for the last update to this condition + optional k8s.io.kubernetes.pkg.api.unversioned.Time lastUpdateTime = 4; +} + +message CertificateSigningRequestList { + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + repeated CertificateSigningRequest items = 2; +} + +// This information is immutable after the request is created. Only the Request +// and ExtraInfo fields can be set on creation, other fields are derived by +// Kubernetes and cannot be modified by users. +message CertificateSigningRequestSpec { + // Base64-encoded PKCS#10 CSR data + optional bytes request = 1; + + // Information about the requesting user (if relevant) + // See user.Info interface for details + optional string username = 2; + + optional string uid = 3; + + repeated string groups = 4; +} + +message CertificateSigningRequestStatus { + // Conditions applied to the request, such as approval or denial. + repeated CertificateSigningRequestCondition conditions = 1; + + // If request was approved, the controller will place the issued certificate here. + optional bytes certificate = 2; +} + diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/register.go new file mode 100644 index 00000000..cc6cd3c2 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/register.go @@ -0,0 +1,62 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/runtime" + versionedwatch "k8s.io/kubernetes/pkg/watch/versioned" +) + +// GroupName is the group name use in this package +const GroupName = "certificates.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) unversioned.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) unversioned.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &CertificateSigningRequest{}, + &CertificateSigningRequestList{}, + &v1.ListOptions{}, + &v1.DeleteOptions{}, + ) + + // Add the watch version that applies + versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} + +func (obj *CertificateSigningRequest) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *CertificateSigningRequestList) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/types.go new file mode 100644 index 00000000..859053da --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/types.go @@ -0,0 +1,85 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +import ( + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" +) + +// +genclient=true +// +nonNamespaced=true + +// Describes a certificate signing request +type CertificateSigningRequest struct { + unversioned.TypeMeta `json:",inline"` + v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // The certificate request itself and any additional information. + Spec CertificateSigningRequestSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // Derived information about the request. + Status CertificateSigningRequestStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +// This information is immutable after the request is created. Only the Request +// and ExtraInfo fields can be set on creation, other fields are derived by +// Kubernetes and cannot be modified by users. +type CertificateSigningRequestSpec struct { + // Base64-encoded PKCS#10 CSR data + Request []byte `json:"request" protobuf:"bytes,1,opt,name=request"` + + // Information about the requesting user (if relevant) + // See user.Info interface for details + Username string `json:"username,omitempty" protobuf:"bytes,2,opt,name=username"` + UID string `json:"uid,omitempty" protobuf:"bytes,3,opt,name=uid"` + Groups []string `json:"groups,omitempty" protobuf:"bytes,4,rep,name=groups"` +} + +type CertificateSigningRequestStatus struct { + // Conditions applied to the request, such as approval or denial. + Conditions []CertificateSigningRequestCondition `json:"conditions,omitempty" protobuf:"bytes,1,rep,name=conditions"` + + // If request was approved, the controller will place the issued certificate here. + Certificate []byte `json:"certificate,omitempty" protobuf:"bytes,2,opt,name=certificate"` +} + +type RequestConditionType string + +// These are the possible conditions for a certificate request. +const ( + CertificateApproved RequestConditionType = "Approved" + CertificateDenied RequestConditionType = "Denied" +) + +type CertificateSigningRequestCondition struct { + // request approval state, currently Approved or Denied. + Type RequestConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=RequestConditionType"` + // brief reason for the request state + Reason string `json:"reason,omitempty" protobuf:"bytes,2,opt,name=reason"` + // human readable message with details about the request state + Message string `json:"message,omitempty" protobuf:"bytes,3,opt,name=message"` + // timestamp for the last update to this condition + LastUpdateTime unversioned.Time `json:"lastUpdateTime,omitempty" protobuf:"bytes,4,opt,name=lastUpdateTime"` +} + +type CertificateSigningRequestList struct { + unversioned.TypeMeta `json:",inline"` + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + Items []CertificateSigningRequest `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/types_swagger_doc_generated.go new file mode 100644 index 00000000..cf66d074 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/types_swagger_doc_generated.go @@ -0,0 +1,70 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1alpha1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_CertificateSigningRequest = map[string]string{ + "": "Describes a certificate signing request", + "spec": "The certificate request itself and any additional information.", + "status": "Derived information about the request.", +} + +func (CertificateSigningRequest) SwaggerDoc() map[string]string { + return map_CertificateSigningRequest +} + +var map_CertificateSigningRequestCondition = map[string]string{ + "type": "request approval state, currently Approved or Denied.", + "reason": "brief reason for the request state", + "message": "human readable message with details about the request state", + "lastUpdateTime": "timestamp for the last update to this condition", +} + +func (CertificateSigningRequestCondition) SwaggerDoc() map[string]string { + return map_CertificateSigningRequestCondition +} + +var map_CertificateSigningRequestSpec = map[string]string{ + "": "This information is immutable after the request is created. Only the Request and ExtraInfo fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.", + "request": "Base64-encoded PKCS#10 CSR data", + "username": "Information about the requesting user (if relevant) See user.Info interface for details", +} + +func (CertificateSigningRequestSpec) SwaggerDoc() map[string]string { + return map_CertificateSigningRequestSpec +} + +var map_CertificateSigningRequestStatus = map[string]string{ + "conditions": "Conditions applied to the request, such as approval or denial.", + "certificate": "If request was approved, the controller will place the issued certificate here.", +} + +func (CertificateSigningRequestStatus) SwaggerDoc() map[string]string { + return map_CertificateSigningRequestStatus +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go new file mode 100644 index 00000000..76c51d54 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/zz_generated.conversion.go @@ -0,0 +1,241 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by conversion-gen. Do not edit it manually! + +package v1alpha1 + +import ( + api "k8s.io/kubernetes/pkg/api" + certificates "k8s.io/kubernetes/pkg/apis/certificates" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" +) + +func init() { + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest, + Convert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest, + Convert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition, + Convert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition, + Convert_v1alpha1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList, + Convert_certificates_CertificateSigningRequestList_To_v1alpha1_CertificateSigningRequestList, + Convert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec, + Convert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec, + Convert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus, + Convert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus, + ) +} + +func autoConvert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in *CertificateSigningRequest, out *certificates.CertificateSigningRequest, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := Convert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in *CertificateSigningRequest, out *certificates.CertificateSigningRequest, s conversion.Scope) error { + return autoConvert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest(in *certificates.CertificateSigningRequest, out *CertificateSigningRequest, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if err := Convert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec(&in.Spec, &out.Spec, s); err != nil { + return err + } + if err := Convert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus(&in.Status, &out.Status, s); err != nil { + return err + } + return nil +} + +func Convert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest(in *certificates.CertificateSigningRequest, out *CertificateSigningRequest, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest(in, out, s) +} + +func autoConvert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in *CertificateSigningRequestCondition, out *certificates.CertificateSigningRequestCondition, s conversion.Scope) error { + out.Type = certificates.RequestConditionType(in.Type) + out.Reason = in.Reason + out.Message = in.Message + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastUpdateTime, &out.LastUpdateTime, s); err != nil { + return err + } + return nil +} + +func Convert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in *CertificateSigningRequestCondition, out *certificates.CertificateSigningRequestCondition, s conversion.Scope) error { + return autoConvert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition(in *certificates.CertificateSigningRequestCondition, out *CertificateSigningRequestCondition, s conversion.Scope) error { + out.Type = RequestConditionType(in.Type) + out.Reason = in.Reason + out.Message = in.Message + if err := api.Convert_unversioned_Time_To_unversioned_Time(&in.LastUpdateTime, &out.LastUpdateTime, s); err != nil { + return err + } + return nil +} + +func Convert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition(in *certificates.CertificateSigningRequestCondition, out *CertificateSigningRequestCondition, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition(in, out, s) +} + +func autoConvert_v1alpha1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in *CertificateSigningRequestList, out *certificates.CertificateSigningRequestList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]certificates.CertificateSigningRequest, len(*in)) + for i := range *in { + if err := Convert_v1alpha1_CertificateSigningRequest_To_certificates_CertificateSigningRequest(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1alpha1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in *CertificateSigningRequestList, out *certificates.CertificateSigningRequestList, s conversion.Scope) error { + return autoConvert_v1alpha1_CertificateSigningRequestList_To_certificates_CertificateSigningRequestList(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequestList_To_v1alpha1_CertificateSigningRequestList(in *certificates.CertificateSigningRequestList, out *CertificateSigningRequestList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CertificateSigningRequest, len(*in)) + for i := range *in { + if err := Convert_certificates_CertificateSigningRequest_To_v1alpha1_CertificateSigningRequest(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_certificates_CertificateSigningRequestList_To_v1alpha1_CertificateSigningRequestList(in *certificates.CertificateSigningRequestList, out *CertificateSigningRequestList, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequestList_To_v1alpha1_CertificateSigningRequestList(in, out, s) +} + +func autoConvert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in *CertificateSigningRequestSpec, out *certificates.CertificateSigningRequestSpec, s conversion.Scope) error { + if err := conversion.Convert_Slice_byte_To_Slice_byte(&in.Request, &out.Request, s); err != nil { + return err + } + out.Username = in.Username + out.UID = in.UID + out.Groups = in.Groups + return nil +} + +func Convert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in *CertificateSigningRequestSpec, out *certificates.CertificateSigningRequestSpec, s conversion.Scope) error { + return autoConvert_v1alpha1_CertificateSigningRequestSpec_To_certificates_CertificateSigningRequestSpec(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec(in *certificates.CertificateSigningRequestSpec, out *CertificateSigningRequestSpec, s conversion.Scope) error { + if err := conversion.Convert_Slice_byte_To_Slice_byte(&in.Request, &out.Request, s); err != nil { + return err + } + out.Username = in.Username + out.UID = in.UID + out.Groups = in.Groups + return nil +} + +func Convert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec(in *certificates.CertificateSigningRequestSpec, out *CertificateSigningRequestSpec, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequestSpec_To_v1alpha1_CertificateSigningRequestSpec(in, out, s) +} + +func autoConvert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in *CertificateSigningRequestStatus, out *certificates.CertificateSigningRequestStatus, s conversion.Scope) error { + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]certificates.CertificateSigningRequestCondition, len(*in)) + for i := range *in { + if err := Convert_v1alpha1_CertificateSigningRequestCondition_To_certificates_CertificateSigningRequestCondition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if err := conversion.Convert_Slice_byte_To_Slice_byte(&in.Certificate, &out.Certificate, s); err != nil { + return err + } + return nil +} + +func Convert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in *CertificateSigningRequestStatus, out *certificates.CertificateSigningRequestStatus, s conversion.Scope) error { + return autoConvert_v1alpha1_CertificateSigningRequestStatus_To_certificates_CertificateSigningRequestStatus(in, out, s) +} + +func autoConvert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus(in *certificates.CertificateSigningRequestStatus, out *CertificateSigningRequestStatus, s conversion.Scope) error { + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]CertificateSigningRequestCondition, len(*in)) + for i := range *in { + if err := Convert_certificates_CertificateSigningRequestCondition_To_v1alpha1_CertificateSigningRequestCondition(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if err := conversion.Convert_Slice_byte_To_Slice_byte(&in.Certificate, &out.Certificate, s); err != nil { + return err + } + return nil +} + +func Convert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus(in *certificates.CertificateSigningRequestStatus, out *CertificateSigningRequestStatus, s conversion.Scope) error { + return autoConvert_certificates_CertificateSigningRequestStatus_To_v1alpha1_CertificateSigningRequestStatus(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..ce2e1696 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,145 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1alpha1 + +import ( + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequest, InType: reflect.TypeOf(&CertificateSigningRequest{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequestCondition, InType: reflect.TypeOf(&CertificateSigningRequestCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequestList, InType: reflect.TypeOf(&CertificateSigningRequestList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequestSpec, InType: reflect.TypeOf(&CertificateSigningRequestSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_CertificateSigningRequestStatus, InType: reflect.TypeOf(&CertificateSigningRequestStatus{})}, + ) +} + +func DeepCopy_v1alpha1_CertificateSigningRequest(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequest) + out := out.(*CertificateSigningRequest) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1alpha1_CertificateSigningRequestSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1alpha1_CertificateSigningRequestStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1alpha1_CertificateSigningRequestCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequestCondition) + out := out.(*CertificateSigningRequestCondition) + out.Type = in.Type + out.Reason = in.Reason + out.Message = in.Message + out.LastUpdateTime = in.LastUpdateTime.DeepCopy() + return nil + } +} + +func DeepCopy_v1alpha1_CertificateSigningRequestList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequestList) + out := out.(*CertificateSigningRequestList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CertificateSigningRequest, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_CertificateSigningRequest(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_CertificateSigningRequestSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequestSpec) + out := out.(*CertificateSigningRequestSpec) + if in.Request != nil { + in, out := &in.Request, &out.Request + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Request = nil + } + out.Username = in.Username + out.UID = in.UID + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_CertificateSigningRequestStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequestStatus) + out := out.(*CertificateSigningRequestStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]CertificateSigningRequestCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_CertificateSigningRequestCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Certificate != nil { + in, out := &in.Certificate, &out.Certificate + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Certificate = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/certificates/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/certificates/zz_generated.deepcopy.go new file mode 100644 index 00000000..764271bf --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/certificates/zz_generated.deepcopy.go @@ -0,0 +1,145 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package certificates + +import ( + api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_certificates_CertificateSigningRequest, InType: reflect.TypeOf(&CertificateSigningRequest{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_certificates_CertificateSigningRequestCondition, InType: reflect.TypeOf(&CertificateSigningRequestCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_certificates_CertificateSigningRequestList, InType: reflect.TypeOf(&CertificateSigningRequestList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_certificates_CertificateSigningRequestSpec, InType: reflect.TypeOf(&CertificateSigningRequestSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_certificates_CertificateSigningRequestStatus, InType: reflect.TypeOf(&CertificateSigningRequestStatus{})}, + ) +} + +func DeepCopy_certificates_CertificateSigningRequest(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequest) + out := out.(*CertificateSigningRequest) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_certificates_CertificateSigningRequestSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_certificates_CertificateSigningRequestStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_certificates_CertificateSigningRequestCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequestCondition) + out := out.(*CertificateSigningRequestCondition) + out.Type = in.Type + out.Reason = in.Reason + out.Message = in.Message + out.LastUpdateTime = in.LastUpdateTime.DeepCopy() + return nil + } +} + +func DeepCopy_certificates_CertificateSigningRequestList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequestList) + out := out.(*CertificateSigningRequestList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CertificateSigningRequest, len(*in)) + for i := range *in { + if err := DeepCopy_certificates_CertificateSigningRequest(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_certificates_CertificateSigningRequestSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequestSpec) + out := out.(*CertificateSigningRequestSpec) + if in.Request != nil { + in, out := &in.Request, &out.Request + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Request = nil + } + out.Username = in.Username + out.UID = in.UID + if in.Groups != nil { + in, out := &in.Groups, &out.Groups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Groups = nil + } + return nil + } +} + +func DeepCopy_certificates_CertificateSigningRequestStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CertificateSigningRequestStatus) + out := out.(*CertificateSigningRequestStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]CertificateSigningRequestCondition, len(*in)) + for i := range *in { + if err := DeepCopy_certificates_CertificateSigningRequestCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.Certificate != nil { + in, out := &in.Certificate, &out.Certificate + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Certificate = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/deep_copy_generated.go deleted file mode 100644 index e4f82bcb..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/deep_copy_generated.go +++ /dev/null @@ -1,374 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package componentconfig - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_componentconfig_IPVar, - DeepCopy_componentconfig_KubeControllerManagerConfiguration, - DeepCopy_componentconfig_KubeProxyConfiguration, - DeepCopy_componentconfig_KubeSchedulerConfiguration, - DeepCopy_componentconfig_KubeletConfiguration, - DeepCopy_componentconfig_LeaderElectionConfiguration, - DeepCopy_componentconfig_PersistentVolumeRecyclerConfiguration, - DeepCopy_componentconfig_PortRangeVar, - DeepCopy_componentconfig_VolumeConfiguration, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_componentconfig_IPVar(in IPVar, out *IPVar, c *conversion.Cloner) error { - if in.Val != nil { - in, out := in.Val, &out.Val - *out = new(string) - **out = *in - } else { - out.Val = nil - } - return nil -} - -func DeepCopy_componentconfig_KubeControllerManagerConfiguration(in KubeControllerManagerConfiguration, out *KubeControllerManagerConfiguration, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Port = in.Port - out.Address = in.Address - out.CloudProvider = in.CloudProvider - out.CloudConfigFile = in.CloudConfigFile - out.ConcurrentEndpointSyncs = in.ConcurrentEndpointSyncs - out.ConcurrentRSSyncs = in.ConcurrentRSSyncs - out.ConcurrentRCSyncs = in.ConcurrentRCSyncs - out.ConcurrentResourceQuotaSyncs = in.ConcurrentResourceQuotaSyncs - out.ConcurrentDeploymentSyncs = in.ConcurrentDeploymentSyncs - out.ConcurrentDaemonSetSyncs = in.ConcurrentDaemonSetSyncs - out.ConcurrentJobSyncs = in.ConcurrentJobSyncs - out.ConcurrentNamespaceSyncs = in.ConcurrentNamespaceSyncs - out.ConcurrentSATokenSyncs = in.ConcurrentSATokenSyncs - out.LookupCacheSizeForRC = in.LookupCacheSizeForRC - out.LookupCacheSizeForRS = in.LookupCacheSizeForRS - out.LookupCacheSizeForDaemonSet = in.LookupCacheSizeForDaemonSet - if err := unversioned.DeepCopy_unversioned_Duration(in.ServiceSyncPeriod, &out.ServiceSyncPeriod, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.NodeSyncPeriod, &out.NodeSyncPeriod, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.ResourceQuotaSyncPeriod, &out.ResourceQuotaSyncPeriod, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.NamespaceSyncPeriod, &out.NamespaceSyncPeriod, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.PVClaimBinderSyncPeriod, &out.PVClaimBinderSyncPeriod, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.MinResyncPeriod, &out.MinResyncPeriod, c); err != nil { - return err - } - out.TerminatedPodGCThreshold = in.TerminatedPodGCThreshold - if err := unversioned.DeepCopy_unversioned_Duration(in.HorizontalPodAutoscalerSyncPeriod, &out.HorizontalPodAutoscalerSyncPeriod, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.DeploymentControllerSyncPeriod, &out.DeploymentControllerSyncPeriod, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.PodEvictionTimeout, &out.PodEvictionTimeout, c); err != nil { - return err - } - out.DeletingPodsQps = in.DeletingPodsQps - out.DeletingPodsBurst = in.DeletingPodsBurst - if err := unversioned.DeepCopy_unversioned_Duration(in.NodeMonitorGracePeriod, &out.NodeMonitorGracePeriod, c); err != nil { - return err - } - out.RegisterRetryCount = in.RegisterRetryCount - if err := unversioned.DeepCopy_unversioned_Duration(in.NodeStartupGracePeriod, &out.NodeStartupGracePeriod, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.NodeMonitorPeriod, &out.NodeMonitorPeriod, c); err != nil { - return err - } - out.ServiceAccountKeyFile = in.ServiceAccountKeyFile - out.EnableProfiling = in.EnableProfiling - out.ClusterName = in.ClusterName - out.ClusterCIDR = in.ClusterCIDR - out.ServiceCIDR = in.ServiceCIDR - out.NodeCIDRMaskSize = in.NodeCIDRMaskSize - out.AllocateNodeCIDRs = in.AllocateNodeCIDRs - out.ConfigureCloudRoutes = in.ConfigureCloudRoutes - out.RootCAFile = in.RootCAFile - out.ContentType = in.ContentType - out.KubeAPIQPS = in.KubeAPIQPS - out.KubeAPIBurst = in.KubeAPIBurst - if err := DeepCopy_componentconfig_LeaderElectionConfiguration(in.LeaderElection, &out.LeaderElection, c); err != nil { - return err - } - if err := DeepCopy_componentconfig_VolumeConfiguration(in.VolumeConfiguration, &out.VolumeConfiguration, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.ControllerStartInterval, &out.ControllerStartInterval, c); err != nil { - return err - } - out.EnableGarbageCollector = in.EnableGarbageCollector - return nil -} - -func DeepCopy_componentconfig_KubeProxyConfiguration(in KubeProxyConfiguration, out *KubeProxyConfiguration, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.BindAddress = in.BindAddress - out.ClusterCIDR = in.ClusterCIDR - out.HealthzBindAddress = in.HealthzBindAddress - out.HealthzPort = in.HealthzPort - out.HostnameOverride = in.HostnameOverride - if in.IPTablesMasqueradeBit != nil { - in, out := in.IPTablesMasqueradeBit, &out.IPTablesMasqueradeBit - *out = new(int32) - **out = *in - } else { - out.IPTablesMasqueradeBit = nil - } - if err := unversioned.DeepCopy_unversioned_Duration(in.IPTablesSyncPeriod, &out.IPTablesSyncPeriod, c); err != nil { - return err - } - out.KubeconfigPath = in.KubeconfigPath - out.MasqueradeAll = in.MasqueradeAll - out.Master = in.Master - if in.OOMScoreAdj != nil { - in, out := in.OOMScoreAdj, &out.OOMScoreAdj - *out = new(int32) - **out = *in - } else { - out.OOMScoreAdj = nil - } - out.Mode = in.Mode - out.PortRange = in.PortRange - out.ResourceContainer = in.ResourceContainer - if err := unversioned.DeepCopy_unversioned_Duration(in.UDPIdleTimeout, &out.UDPIdleTimeout, c); err != nil { - return err - } - out.ConntrackMax = in.ConntrackMax - if err := unversioned.DeepCopy_unversioned_Duration(in.ConntrackTCPEstablishedTimeout, &out.ConntrackTCPEstablishedTimeout, c); err != nil { - return err - } - return nil -} - -func DeepCopy_componentconfig_KubeSchedulerConfiguration(in KubeSchedulerConfiguration, out *KubeSchedulerConfiguration, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Port = in.Port - out.Address = in.Address - out.AlgorithmProvider = in.AlgorithmProvider - out.PolicyConfigFile = in.PolicyConfigFile - out.EnableProfiling = in.EnableProfiling - out.ContentType = in.ContentType - out.KubeAPIQPS = in.KubeAPIQPS - out.KubeAPIBurst = in.KubeAPIBurst - out.SchedulerName = in.SchedulerName - out.HardPodAffinitySymmetricWeight = in.HardPodAffinitySymmetricWeight - out.FailureDomains = in.FailureDomains - if err := DeepCopy_componentconfig_LeaderElectionConfiguration(in.LeaderElection, &out.LeaderElection, c); err != nil { - return err - } - return nil -} - -func DeepCopy_componentconfig_KubeletConfiguration(in KubeletConfiguration, out *KubeletConfiguration, c *conversion.Cloner) error { - out.Config = in.Config - if err := unversioned.DeepCopy_unversioned_Duration(in.SyncFrequency, &out.SyncFrequency, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.FileCheckFrequency, &out.FileCheckFrequency, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.HTTPCheckFrequency, &out.HTTPCheckFrequency, c); err != nil { - return err - } - out.ManifestURL = in.ManifestURL - out.ManifestURLHeader = in.ManifestURLHeader - out.EnableServer = in.EnableServer - out.Address = in.Address - out.Port = in.Port - out.ReadOnlyPort = in.ReadOnlyPort - out.TLSCertFile = in.TLSCertFile - out.TLSPrivateKeyFile = in.TLSPrivateKeyFile - out.CertDirectory = in.CertDirectory - out.HostnameOverride = in.HostnameOverride - out.PodInfraContainerImage = in.PodInfraContainerImage - out.DockerEndpoint = in.DockerEndpoint - out.RootDirectory = in.RootDirectory - out.SeccompProfileRoot = in.SeccompProfileRoot - out.AllowPrivileged = in.AllowPrivileged - out.HostNetworkSources = in.HostNetworkSources - out.HostPIDSources = in.HostPIDSources - out.HostIPCSources = in.HostIPCSources - out.RegistryPullQPS = in.RegistryPullQPS - out.RegistryBurst = in.RegistryBurst - out.EventRecordQPS = in.EventRecordQPS - out.EventBurst = in.EventBurst - out.EnableDebuggingHandlers = in.EnableDebuggingHandlers - if err := unversioned.DeepCopy_unversioned_Duration(in.MinimumGCAge, &out.MinimumGCAge, c); err != nil { - return err - } - out.MaxPerPodContainerCount = in.MaxPerPodContainerCount - out.MaxContainerCount = in.MaxContainerCount - out.CAdvisorPort = in.CAdvisorPort - out.HealthzPort = in.HealthzPort - out.HealthzBindAddress = in.HealthzBindAddress - out.OOMScoreAdj = in.OOMScoreAdj - out.RegisterNode = in.RegisterNode - out.ClusterDomain = in.ClusterDomain - out.MasterServiceNamespace = in.MasterServiceNamespace - out.ClusterDNS = in.ClusterDNS - if err := unversioned.DeepCopy_unversioned_Duration(in.StreamingConnectionIdleTimeout, &out.StreamingConnectionIdleTimeout, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.NodeStatusUpdateFrequency, &out.NodeStatusUpdateFrequency, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.ImageMinimumGCAge, &out.ImageMinimumGCAge, c); err != nil { - return err - } - out.ImageGCHighThresholdPercent = in.ImageGCHighThresholdPercent - out.ImageGCLowThresholdPercent = in.ImageGCLowThresholdPercent - out.LowDiskSpaceThresholdMB = in.LowDiskSpaceThresholdMB - if err := unversioned.DeepCopy_unversioned_Duration(in.VolumeStatsAggPeriod, &out.VolumeStatsAggPeriod, c); err != nil { - return err - } - out.NetworkPluginName = in.NetworkPluginName - out.NetworkPluginDir = in.NetworkPluginDir - out.VolumePluginDir = in.VolumePluginDir - out.CloudProvider = in.CloudProvider - out.CloudConfigFile = in.CloudConfigFile - out.KubeletCgroups = in.KubeletCgroups - out.RuntimeCgroups = in.RuntimeCgroups - out.SystemCgroups = in.SystemCgroups - out.CgroupRoot = in.CgroupRoot - out.ContainerRuntime = in.ContainerRuntime - if err := unversioned.DeepCopy_unversioned_Duration(in.RuntimeRequestTimeout, &out.RuntimeRequestTimeout, c); err != nil { - return err - } - out.RktPath = in.RktPath - out.RktAPIEndpoint = in.RktAPIEndpoint - out.RktStage1Image = in.RktStage1Image - out.LockFilePath = in.LockFilePath - out.ExitOnLockContention = in.ExitOnLockContention - out.ConfigureCBR0 = in.ConfigureCBR0 - out.HairpinMode = in.HairpinMode - out.BabysitDaemons = in.BabysitDaemons - out.MaxPods = in.MaxPods - out.NvidiaGPUs = in.NvidiaGPUs - out.DockerExecHandlerName = in.DockerExecHandlerName - out.PodCIDR = in.PodCIDR - out.ResolverConfig = in.ResolverConfig - out.CPUCFSQuota = in.CPUCFSQuota - out.Containerized = in.Containerized - out.MaxOpenFiles = in.MaxOpenFiles - out.ReconcileCIDR = in.ReconcileCIDR - out.RegisterSchedulable = in.RegisterSchedulable - out.ContentType = in.ContentType - out.KubeAPIQPS = in.KubeAPIQPS - out.KubeAPIBurst = in.KubeAPIBurst - out.SerializeImagePulls = in.SerializeImagePulls - out.ExperimentalFlannelOverlay = in.ExperimentalFlannelOverlay - if err := unversioned.DeepCopy_unversioned_Duration(in.OutOfDiskTransitionFrequency, &out.OutOfDiskTransitionFrequency, c); err != nil { - return err - } - out.NodeIP = in.NodeIP - if in.NodeLabels != nil { - in, out := in.NodeLabels, &out.NodeLabels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.NodeLabels = nil - } - out.NonMasqueradeCIDR = in.NonMasqueradeCIDR - out.EnableCustomMetrics = in.EnableCustomMetrics - out.EvictionHard = in.EvictionHard - out.EvictionSoft = in.EvictionSoft - out.EvictionSoftGracePeriod = in.EvictionSoftGracePeriod - if err := unversioned.DeepCopy_unversioned_Duration(in.EvictionPressureTransitionPeriod, &out.EvictionPressureTransitionPeriod, c); err != nil { - return err - } - out.EvictionMaxPodGracePeriod = in.EvictionMaxPodGracePeriod - out.PodsPerCore = in.PodsPerCore - out.EnableControllerAttachDetach = in.EnableControllerAttachDetach - return nil -} - -func DeepCopy_componentconfig_LeaderElectionConfiguration(in LeaderElectionConfiguration, out *LeaderElectionConfiguration, c *conversion.Cloner) error { - out.LeaderElect = in.LeaderElect - if err := unversioned.DeepCopy_unversioned_Duration(in.LeaseDuration, &out.LeaseDuration, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.RenewDeadline, &out.RenewDeadline, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.RetryPeriod, &out.RetryPeriod, c); err != nil { - return err - } - return nil -} - -func DeepCopy_componentconfig_PersistentVolumeRecyclerConfiguration(in PersistentVolumeRecyclerConfiguration, out *PersistentVolumeRecyclerConfiguration, c *conversion.Cloner) error { - out.MaximumRetry = in.MaximumRetry - out.MinimumTimeoutNFS = in.MinimumTimeoutNFS - out.PodTemplateFilePathNFS = in.PodTemplateFilePathNFS - out.IncrementTimeoutNFS = in.IncrementTimeoutNFS - out.PodTemplateFilePathHostPath = in.PodTemplateFilePathHostPath - out.MinimumTimeoutHostPath = in.MinimumTimeoutHostPath - out.IncrementTimeoutHostPath = in.IncrementTimeoutHostPath - return nil -} - -func DeepCopy_componentconfig_PortRangeVar(in PortRangeVar, out *PortRangeVar, c *conversion.Cloner) error { - if in.Val != nil { - in, out := in.Val, &out.Val - *out = new(string) - **out = *in - } else { - out.Val = nil - } - return nil -} - -func DeepCopy_componentconfig_VolumeConfiguration(in VolumeConfiguration, out *VolumeConfiguration, c *conversion.Cloner) error { - out.EnableHostPathProvisioning = in.EnableHostPathProvisioning - out.EnableDynamicProvisioning = in.EnableDynamicProvisioning - if err := DeepCopy_componentconfig_PersistentVolumeRecyclerConfiguration(in.PersistentVolumeRecyclerConfiguration, &out.PersistentVolumeRecyclerConfiguration, c); err != nil { - return err - } - out.FlexVolumePluginDir = in.FlexVolumePluginDir - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/doc.go new file mode 100644 index 00000000..d044b16d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package componentconfig diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/helpers.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/helpers.go index edd9c797..43b625b7 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/helpers.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/install/install.go index ec555427..ea591afa 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -114,7 +114,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - componentconfig.AddToScheme(api.Scheme) + if err := componentconfig.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -123,7 +126,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/register.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/register.go index 0666c543..77dc749b 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,9 +21,10 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // GroupName is the group name use in this package const GroupName = "componentconfig" @@ -31,20 +32,26 @@ const GroupName = "componentconfig" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { // TODO this will get cleaned up with the scheme types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &KubeProxyConfiguration{}, &KubeSchedulerConfiguration{}, + &KubeletConfiguration{}, ) + return nil } + +func (obj *KubeProxyConfiguration) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *KubeSchedulerConfiguration) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *KubeletConfiguration) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/types.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/types.go index 0c7dfc9a..82f5b88d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,7 +16,10 @@ limitations under the License. package componentconfig -import "k8s.io/kubernetes/pkg/api/unversioned" +import ( + "k8s.io/kubernetes/pkg/api/unversioned" + utilconfig "k8s.io/kubernetes/pkg/util/config" +) type KubeProxyConfiguration struct { unversioned.TypeMeta @@ -58,14 +61,19 @@ type KubeProxyConfiguration struct { PortRange string `json:"portRange"` // resourceContainer is the absolute name of the resource-only container to create and run // the Kube-proxy in (Default: /kube-proxy). - ResourceContainer string `json:"kubeletCgroups"` + ResourceContainer string `json:"resourceContainer"` // udpIdleTimeout is how long an idle UDP connection will be kept open (e.g. '250ms', '2s'). // Must be greater than 0. Only applicable for proxyMode=userspace. UDPIdleTimeout unversioned.Duration `json:"udpTimeoutMilliseconds"` - // conntrackMax is the maximum number of NAT connections to track (0 to leave as-is)") + // conntrackMax is the maximum number of NAT connections to track (0 to + // leave as-is). This takes precedence over conntrackMaxPerCore. ConntrackMax int32 `json:"conntrackMax"` - // conntrackTCPEstablishedTimeout is how long an idle UDP connection will be kept open - // (e.g. '250ms', '2s'). Must be greater than 0. Only applicable for proxyMode is Userspace + // conntrackMaxPerCore is the maximum number of NAT connections to track + // per CPU core (0 to leave as-is). This value is only considered if + // conntrackMax == 0. + ConntrackMaxPerCore int32 `json:"conntrackMaxPerCore"` + // conntrackTCPEstablishedTimeout is how long an idle TCP connection will be kept open + // (e.g. '250ms', '2s'). Must be greater than 0. ConntrackTCPEstablishedTimeout unversioned.Duration `json:"conntrackTCPEstablishedTimeout"` } @@ -102,8 +110,11 @@ const ( // TODO: curate the ordering and structure of this config object type KubeletConfiguration struct { - // config is the path to the config file or directory of files - Config string `json:"config"` + unversioned.TypeMeta + + // podManifestPath is the path to the directory containing pod manifests to + // run, or the path to a single manifest file + PodManifestPath string `json:"podManifestPath"` // syncFrequency is the max period between synchronizing running // containers and config SyncFrequency unversioned.Duration `json:"syncFrequency"` @@ -123,19 +134,19 @@ type KubeletConfiguration struct { // for all interfaces) Address string `json:"address"` // port is the port for the Kubelet to serve on. - Port uint `json:"port"` + Port int32 `json:"port"` // readOnlyPort is the read-only port for the Kubelet to serve on with // no authentication/authorization (set to 0 to disable) - ReadOnlyPort uint `json:"readOnlyPort"` - // tLSCertFile is the file containing x509 Certificate for HTTPS. (CA cert, + ReadOnlyPort int32 `json:"readOnlyPort"` + // tlsCertFile is the file containing x509 Certificate for HTTPS. (CA cert, // if any, concatenated after server cert). If tlsCertFile and // tlsPrivateKeyFile are not provided, a self-signed certificate // and key are generated for the public address and saved to the directory // passed to certDir. - TLSCertFile string `json:"tLSCertFile"` - // tLSPrivateKeyFile is the ile containing x509 private key matching + TLSCertFile string `json:"tlsCertFile"` + // tlsPrivateKeyFile is the ile containing x509 private key matching // tlsCertFile. - TLSPrivateKeyFile string `json:"tLSPrivateKeyFile"` + TLSPrivateKeyFile string `json:"tlsPrivateKeyFile"` // certDirectory is the directory where the TLS certs are located (by // default /var/run/kubernetes). If tlsCertFile and tlsPrivateKeyFile // are provided, this flag will be ignored. @@ -157,24 +168,25 @@ type KubeletConfiguration struct { // Defaults to false. AllowPrivileged bool `json:"allowPrivileged"` // hostNetworkSources is a comma-separated list of sources from which the - // Kubelet allows pods to use of host network. Defaults to "*". - HostNetworkSources string `json:"hostNetworkSources"` + // Kubelet allows pods to use of host network. Defaults to "*". Valid + // options are "file", "http", "api", and "*" (all sources). + HostNetworkSources []string `json:"hostNetworkSources"` // hostPIDSources is a comma-separated list of sources from which the // Kubelet allows pods to use the host pid namespace. Defaults to "*". - HostPIDSources string `json:"hostPIDSources"` + HostPIDSources []string `json:"hostPIDSources"` // hostIPCSources is a comma-separated list of sources from which the // Kubelet allows pods to use the host ipc namespace. Defaults to "*". - HostIPCSources string `json:"hostIPCSources"` + HostIPCSources []string `json:"hostIPCSources"` // registryPullQPS is the limit of registry pulls per second. If 0, // unlimited. Set to 0 for no limit. Defaults to 5.0. - RegistryPullQPS float64 `json:"registryPullQPS"` + RegistryPullQPS int32 `json:"registryPullQPS"` // registryBurst is the maximum size of a bursty pulls, temporarily allows // pulls to burst to this number, while still not exceeding registryQps. - // Only used if registryQps > 0. + // Only used if registryQPS > 0. RegistryBurst int32 `json:"registryBurst"` // eventRecordQPS is the maximum event creations per second. If 0, there // is no limit enforced. - EventRecordQPS float32 `json:"eventRecordQPS"` + EventRecordQPS int32 `json:"eventRecordQPS"` // eventBurst is the maximum size of a bursty event records, temporarily // allows event records to burst to this number, while still not exceeding // event-qps. Only used if eventQps > 0 @@ -192,7 +204,7 @@ type KubeletConfiguration struct { // to retain globally. Each container takes up some disk space. MaxContainerCount int32 `json:"maxContainerCount"` // cAdvisorPort is the port of the localhost cAdvisor endpoint - CAdvisorPort uint `json:"cAdvisorPort"` + CAdvisorPort int32 `json:"cAdvisorPort"` // healthzPort is the port of the localhost healthz endpoint HealthzPort int32 `json:"healthzPort"` // healthzBindAddress is the IP address for the healthz server to serve @@ -221,7 +233,7 @@ type KubeletConfiguration struct { // status to master. Note: be cautious when changing the constant, it // must work with nodeMonitorGracePeriod in nodecontroller. NodeStatusUpdateFrequency unversioned.Duration `json:"nodeStatusUpdateFrequency"` - // minimumGCAge is the minimum age for a unused image before it is + // imageMinimumGCAge is the minimum age for an unused image before it is // garbage collected. ImageMinimumGCAge unversioned.Duration `json:"imageMinimumGCAge"` // imageGCHighThresholdPercent is the percent of disk usage after which @@ -240,6 +252,10 @@ type KubeletConfiguration struct { // networkPluginName is the name of the network plugin to be invoked for // various events in kubelet/pod lifecycle NetworkPluginName string `json:"networkPluginName"` + // networkPluginMTU is the MTU to be passed to the network plugin, + // and overrides the default MTU for cases where it cannot be automatically + // computed (such as IPSEC). + NetworkPluginMTU int32 `json:"networkPluginMTU"` // networkPluginDir is the full path of the directory in which to search // for network plugins NetworkPluginDir string `json:"networkPluginDir"` @@ -252,17 +268,25 @@ type KubeletConfiguration struct { CloudConfigFile string `json:"cloudConfigFile,omitempty"` // KubeletCgroups is the absolute name of cgroups to isolate the kubelet in. KubeletCgroups string `json:"kubeletCgroups,omitempty"` + // Enable QoS based Cgroup hierarchy: top level cgroups for QoS Classes + // And all Burstable and BestEffort pods are brought up under their + // specific top level QoS cgroup. + CgroupsPerQOS bool `json:"CgroupsPerQOS,omitempty"` // Cgroups that container runtime is expected to be isolated in. RuntimeCgroups string `json:"runtimeCgroups,omitempty"` // SystemCgroups is absolute name of cgroups in which to place // all non-kernel processes that are not already in a container. Empty // for no container. Rolling back the flag requires a reboot. - SystemCgroups string `json:"systemContainer,omitempty"` - // cgroupRoot is the root cgroup to use for pods. This is handled by the - // container runtime on a best effort basis. + SystemCgroups string `json:"systemCgroups,omitempty"` + // CgroupRoot is the root cgroup to use for pods. + // If CgroupsPerQOS is enabled, this is the root of the QoS cgroup hierarchy. CgroupRoot string `json:"cgroupRoot,omitempty"` // containerRuntime is the container runtime to use. ContainerRuntime string `json:"containerRuntime"` + // remoteRuntimeEndpoint is the endpoint of remote runtime service + RemoteRuntimeEndpoint string `json:"remoteRuntimeEndpoint"` + // remoteImageEndpoint is the endpoint of remote image service + RemoteImageEndpoint string `json:"remoteImageEndpoint"` // runtimeRequestTimeout is the timeout for all runtime requests except long running // requests - pull, logs, exec and attach. RuntimeRequestTimeout unversioned.Duration `json:"runtimeRequestTimeout,omitempty"` @@ -318,7 +342,7 @@ type KubeletConfiguration struct { // containerized should be set to true if kubelet is running in a container. Containerized bool `json:"containerized"` // maxOpenFiles is Number of files that can be opened by Kubelet process. - MaxOpenFiles uint64 `json:"maxOpenFiles"` + MaxOpenFiles int64 `json:"maxOpenFiles"` // reconcileCIDR is Reconcile node CIDR with the CIDR specified by the // API server. No-op if register-node or configure-cbr0 is false. ReconcileCIDR bool `json:"reconcileCIDR"` @@ -328,7 +352,7 @@ type KubeletConfiguration struct { // contentType is contentType of requests sent to apiserver. ContentType string `json:"contentType"` // kubeAPIQPS is the QPS to use while talking with kubernetes apiserver - KubeAPIQPS float32 `json:"kubeAPIQPS"` + KubeAPIQPS int32 `json:"kubeAPIQPS"` // kubeAPIBurst is the burst to allow while talking with kubernetes // apiserver KubeAPIBurst int32 `json:"kubeAPIBurst"` @@ -363,12 +387,40 @@ type KubeletConfiguration struct { EvictionPressureTransitionPeriod unversioned.Duration `json:"evictionPressureTransitionPeriod,omitempty"` // Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. EvictionMaxPodGracePeriod int32 `json:"evictionMaxPodGracePeriod,omitempty"` + // Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure. + EvictionMinimumReclaim string `json:"evictionMinimumReclaim,omitempty"` // Maximum number of pods per core. Cannot exceed MaxPods PodsPerCore int32 `json:"podsPerCore"` // enableControllerAttachDetach enables the Attach/Detach controller to // manage attachment/detachment of volumes scheduled to this node, and // disables kubelet from executing any attach/detach operations EnableControllerAttachDetach bool `json:"enableControllerAttachDetach"` + // A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs + // that describe resources reserved for non-kubernetes components. + // Currently only cpu and memory are supported. [default=none] + // See http://releases.k8s.io/release-1.4/docs/user-guide/compute-resources.md for more detail. + SystemReserved utilconfig.ConfigurationMap `json:"systemReserved"` + // A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs + // that describe resources reserved for kubernetes system components. + // Currently only cpu and memory are supported. [default=none] + // See http://releases.k8s.io/release-1.4/docs/user-guide/compute-resources.md for more detail. + KubeReserved utilconfig.ConfigurationMap `json:"kubeReserved"` + // Default behaviour for kernel tuning + ProtectKernelDefaults bool `json:"protectKernelDefaults"` + // If true, Kubelet ensures a set of iptables rules are present on host. + // These rules will serve as utility for various components, e.g. kube-proxy. + // The rules will be created based on IPTablesMasqueradeBit and IPTablesDropBit. + MakeIPTablesUtilChains bool `json:"makeIPTablesUtilChains"` + // iptablesMasqueradeBit is the bit of the iptables fwmark space to use for SNAT + // Values must be within the range [0, 31]. + // Warning: Please match the value of corresponding parameter in kube-proxy + // TODO: clean up IPTablesMasqueradeBit in kube-proxy + IPTablesMasqueradeBit int32 `json:"iptablesMasqueradeBit"` + // iptablesDropBit is the bit of the iptables fwmark space to use for dropping packets. Kubelet will ensure iptables mark and drop rules. + // Values must be within the range [0, 31]. Must be different from IPTablesMasqueradeBit + IPTablesDropBit int32 `json:"iptablesDropBit"` + // Whitelist of unsafe sysctls or sysctl patterns (ending in *). + AllowedUnsafeSysctls []string `json:"experimentalAllowedUnsafeSysctls,omitempty"` } type KubeSchedulerConfiguration struct { @@ -452,6 +504,10 @@ type KubeControllerManagerConfiguration struct { // allowed to sync concurrently. Larger number = more responsive replica // management, but more CPU (and network) load. ConcurrentRCSyncs int32 `json:"concurrentRCSyncs"` + // concurrentServiceSyncs is the number of services that are + // allowed to sync concurrently. Larger number = more responsive service + // management, but more CPU (and network) load. + ConcurrentServiceSyncs int32 `json:"concurrentServiceSyncs"` // concurrentResourceQuotaSyncs is the number of resource quotas that are // allowed to sync concurrently. Larger number = more responsive quota // management, but more CPU (and network) load. @@ -513,14 +569,14 @@ type KubeControllerManagerConfiguration struct { DeploymentControllerSyncPeriod unversioned.Duration `json:"deploymentControllerSyncPeriod"` // podEvictionTimeout is the grace period for deleting pods on failed nodes. PodEvictionTimeout unversioned.Duration `json:"podEvictionTimeout"` - // deletingPodsQps is the number of nodes per second on which pods are deleted in + // DEPRECATED: deletingPodsQps is the number of nodes per second on which pods are deleted in // case of node failure. DeletingPodsQps float32 `json:"deletingPodsQps"` - // deletingPodsBurst is the number of nodes on which pods are bursty deleted in + // DEPRECATED: deletingPodsBurst is the number of nodes on which pods are bursty deleted in // case of node failure. For more details look into RateLimiter. DeletingPodsBurst int32 `json:"deletingPodsBurst"` // nodeMontiorGracePeriod is the amount of time which we allow a running node to be - // unresponsive before marking it unhealty. Must be N times more than kubelet's + // unresponsive before marking it unhealthy. Must be N times more than kubelet's // nodeStatusUpdateFrequency, where N means number of retries allowed for kubelet // to post node status. NodeMonitorGracePeriod unversioned.Duration `json:"nodeMonitorGracePeriod"` @@ -528,13 +584,25 @@ type KubeControllerManagerConfiguration struct { // Retry interval equals node-sync-period. RegisterRetryCount int32 `json:"registerRetryCount"` // nodeStartupGracePeriod is the amount of time which we allow starting a node to - // be unresponsive before marking it unhealty. + // be unresponsive before marking it unhealthy. NodeStartupGracePeriod unversioned.Duration `json:"nodeStartupGracePeriod"` // nodeMonitorPeriod is the period for syncing NodeStatus in NodeController. NodeMonitorPeriod unversioned.Duration `json:"nodeMonitorPeriod"` // serviceAccountKeyFile is the filename containing a PEM-encoded private RSA key // used to sign service account tokens. ServiceAccountKeyFile string `json:"serviceAccountKeyFile"` + // clusterSigningCertFile is the filename containing a PEM-encoded + // X509 CA certificate used to issue cluster-scoped certificates + ClusterSigningCertFile string `json:"clusterSigningCertFile"` + // clusterSigningCertFile is the filename containing a PEM-encoded + // RSA or ECDSA private key used to issue cluster-scoped certificates + ClusterSigningKeyFile string `json:"clusterSigningKeyFile"` + // approveAllKubeletCSRs tells the CSR controller to approve all CSRs originating + // from the kubelet bootstrapping group automatically. + // WARNING: this grants all users with access to the certificates API group + // the ability to create credentials for any user that has access to the boostrapping + // user's credentials. + ApproveAllKubeletCSRsForGroup string `json:"approveAllKubeletCSRsForGroup"` // enableProfiling enables profiling via web interface host:port/debug/pprof/ EnableProfiling bool `json:"enableProfiling"` // clusterName is the instance prefix for the cluster. @@ -570,6 +638,18 @@ type KubeControllerManagerConfiguration struct { // corresponding flag of the kube-apiserver. WARNING: the generic garbage // collector is an alpha feature. EnableGarbageCollector bool `json:"enableGarbageCollector"` + // concurrentGCSyncs is the number of garbage collector workers that are + // allowed to sync concurrently. + ConcurrentGCSyncs int32 `json:"concurrentGCSyncs"` + // nodeEvictionRate is the number of nodes per second on which pods are deleted in case of node failure when a zone is healthy + NodeEvictionRate float32 `json:"nodeEvictionRate"` + // secondaryNodeEvictionRate is the number of nodes per second on which pods are deleted in case of node failure when a zone is unhealty + SecondaryNodeEvictionRate float32 `json:"secondaryNodeEvictionRate"` + // secondaryNodeEvictionRate is implicitly overridden to 0 for clusters smaller than or equal to largeClusterSizeThreshold + LargeClusterSizeThreshold int32 `json:"largeClusterSizeThreshold"` + // Zone is treated as unhealthy in nodeEvictionRate and secondaryNodeEvictionRate when at least + // unhealthyZoneThreshold (no less than 3) of Nodes in the zone are NotReady + UnhealthyZoneThreshold float32 `json:"unhealthyZoneThreshold"` } // VolumeConfiguration contains *all* enumerated flags meant to configure all volume diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/conversion_generated.go deleted file mode 100644 index fd607760..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/conversion_generated.go +++ /dev/null @@ -1,182 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by conversion-gen. Do not edit it manually! - -package v1alpha1 - -import ( - api "k8s.io/kubernetes/pkg/api" - componentconfig "k8s.io/kubernetes/pkg/apis/componentconfig" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( - Convert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyConfiguration, - Convert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguration, - Convert_v1alpha1_KubeSchedulerConfiguration_To_componentconfig_KubeSchedulerConfiguration, - Convert_componentconfig_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfiguration, - Convert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration, - Convert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } -} - -func autoConvert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyConfiguration(in *KubeProxyConfiguration, out *componentconfig.KubeProxyConfiguration, s conversion.Scope) error { - SetDefaults_KubeProxyConfiguration(in) - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - out.BindAddress = in.BindAddress - out.ClusterCIDR = in.ClusterCIDR - out.HealthzBindAddress = in.HealthzBindAddress - out.HealthzPort = in.HealthzPort - out.HostnameOverride = in.HostnameOverride - out.IPTablesMasqueradeBit = in.IPTablesMasqueradeBit - out.IPTablesSyncPeriod = in.IPTablesSyncPeriod - out.KubeconfigPath = in.KubeconfigPath - out.MasqueradeAll = in.MasqueradeAll - out.Master = in.Master - out.OOMScoreAdj = in.OOMScoreAdj - out.Mode = componentconfig.ProxyMode(in.Mode) - out.PortRange = in.PortRange - out.ResourceContainer = in.ResourceContainer - out.UDPIdleTimeout = in.UDPIdleTimeout - out.ConntrackMax = in.ConntrackMax - out.ConntrackTCPEstablishedTimeout = in.ConntrackTCPEstablishedTimeout - return nil -} - -func Convert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyConfiguration(in *KubeProxyConfiguration, out *componentconfig.KubeProxyConfiguration, s conversion.Scope) error { - return autoConvert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyConfiguration(in, out, s) -} - -func autoConvert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguration(in *componentconfig.KubeProxyConfiguration, out *KubeProxyConfiguration, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - out.BindAddress = in.BindAddress - out.ClusterCIDR = in.ClusterCIDR - out.HealthzBindAddress = in.HealthzBindAddress - out.HealthzPort = in.HealthzPort - out.HostnameOverride = in.HostnameOverride - out.IPTablesMasqueradeBit = in.IPTablesMasqueradeBit - out.IPTablesSyncPeriod = in.IPTablesSyncPeriod - out.KubeconfigPath = in.KubeconfigPath - out.MasqueradeAll = in.MasqueradeAll - out.Master = in.Master - out.OOMScoreAdj = in.OOMScoreAdj - out.Mode = ProxyMode(in.Mode) - out.PortRange = in.PortRange - out.ResourceContainer = in.ResourceContainer - out.UDPIdleTimeout = in.UDPIdleTimeout - out.ConntrackMax = in.ConntrackMax - out.ConntrackTCPEstablishedTimeout = in.ConntrackTCPEstablishedTimeout - return nil -} - -func Convert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguration(in *componentconfig.KubeProxyConfiguration, out *KubeProxyConfiguration, s conversion.Scope) error { - return autoConvert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguration(in, out, s) -} - -func autoConvert_v1alpha1_KubeSchedulerConfiguration_To_componentconfig_KubeSchedulerConfiguration(in *KubeSchedulerConfiguration, out *componentconfig.KubeSchedulerConfiguration, s conversion.Scope) error { - SetDefaults_KubeSchedulerConfiguration(in) - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - out.Port = int32(in.Port) - out.Address = in.Address - out.AlgorithmProvider = in.AlgorithmProvider - out.PolicyConfigFile = in.PolicyConfigFile - if err := api.Convert_Pointer_bool_To_bool(&in.EnableProfiling, &out.EnableProfiling, s); err != nil { - return err - } - out.ContentType = in.ContentType - out.KubeAPIQPS = in.KubeAPIQPS - out.KubeAPIBurst = int32(in.KubeAPIBurst) - out.SchedulerName = in.SchedulerName - out.HardPodAffinitySymmetricWeight = in.HardPodAffinitySymmetricWeight - out.FailureDomains = in.FailureDomains - if err := Convert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { - return err - } - return nil -} - -func Convert_v1alpha1_KubeSchedulerConfiguration_To_componentconfig_KubeSchedulerConfiguration(in *KubeSchedulerConfiguration, out *componentconfig.KubeSchedulerConfiguration, s conversion.Scope) error { - return autoConvert_v1alpha1_KubeSchedulerConfiguration_To_componentconfig_KubeSchedulerConfiguration(in, out, s) -} - -func autoConvert_componentconfig_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfiguration(in *componentconfig.KubeSchedulerConfiguration, out *KubeSchedulerConfiguration, s conversion.Scope) error { - if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { - return err - } - out.Port = int(in.Port) - out.Address = in.Address - out.AlgorithmProvider = in.AlgorithmProvider - out.PolicyConfigFile = in.PolicyConfigFile - if err := api.Convert_bool_To_Pointer_bool(&in.EnableProfiling, &out.EnableProfiling, s); err != nil { - return err - } - out.ContentType = in.ContentType - out.KubeAPIQPS = in.KubeAPIQPS - out.KubeAPIBurst = int(in.KubeAPIBurst) - out.SchedulerName = in.SchedulerName - out.HardPodAffinitySymmetricWeight = in.HardPodAffinitySymmetricWeight - out.FailureDomains = in.FailureDomains - if err := Convert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { - return err - } - return nil -} - -func Convert_componentconfig_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfiguration(in *componentconfig.KubeSchedulerConfiguration, out *KubeSchedulerConfiguration, s conversion.Scope) error { - return autoConvert_componentconfig_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfiguration(in, out, s) -} - -func autoConvert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration(in *LeaderElectionConfiguration, out *componentconfig.LeaderElectionConfiguration, s conversion.Scope) error { - SetDefaults_LeaderElectionConfiguration(in) - if err := api.Convert_Pointer_bool_To_bool(&in.LeaderElect, &out.LeaderElect, s); err != nil { - return err - } - out.LeaseDuration = in.LeaseDuration - out.RenewDeadline = in.RenewDeadline - out.RetryPeriod = in.RetryPeriod - return nil -} - -func Convert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration(in *LeaderElectionConfiguration, out *componentconfig.LeaderElectionConfiguration, s conversion.Scope) error { - return autoConvert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration(in, out, s) -} - -func autoConvert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(in *componentconfig.LeaderElectionConfiguration, out *LeaderElectionConfiguration, s conversion.Scope) error { - if err := api.Convert_bool_To_Pointer_bool(&in.LeaderElect, &out.LeaderElect, s); err != nil { - return err - } - out.LeaseDuration = in.LeaseDuration - out.RenewDeadline = in.RenewDeadline - out.RetryPeriod = in.RetryPeriod - return nil -} - -func Convert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(in *componentconfig.LeaderElectionConfiguration, out *LeaderElectionConfiguration, s conversion.Scope) error { - return autoConvert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(in, out, s) -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/deep_copy_generated.go deleted file mode 100644 index f4f9fc93..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/deep_copy_generated.go +++ /dev/null @@ -1,127 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1alpha1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1alpha1_KubeProxyConfiguration, - DeepCopy_v1alpha1_KubeSchedulerConfiguration, - DeepCopy_v1alpha1_LeaderElectionConfiguration, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1alpha1_KubeProxyConfiguration(in KubeProxyConfiguration, out *KubeProxyConfiguration, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.BindAddress = in.BindAddress - out.ClusterCIDR = in.ClusterCIDR - out.HealthzBindAddress = in.HealthzBindAddress - out.HealthzPort = in.HealthzPort - out.HostnameOverride = in.HostnameOverride - if in.IPTablesMasqueradeBit != nil { - in, out := in.IPTablesMasqueradeBit, &out.IPTablesMasqueradeBit - *out = new(int32) - **out = *in - } else { - out.IPTablesMasqueradeBit = nil - } - if err := unversioned.DeepCopy_unversioned_Duration(in.IPTablesSyncPeriod, &out.IPTablesSyncPeriod, c); err != nil { - return err - } - out.KubeconfigPath = in.KubeconfigPath - out.MasqueradeAll = in.MasqueradeAll - out.Master = in.Master - if in.OOMScoreAdj != nil { - in, out := in.OOMScoreAdj, &out.OOMScoreAdj - *out = new(int32) - **out = *in - } else { - out.OOMScoreAdj = nil - } - out.Mode = in.Mode - out.PortRange = in.PortRange - out.ResourceContainer = in.ResourceContainer - if err := unversioned.DeepCopy_unversioned_Duration(in.UDPIdleTimeout, &out.UDPIdleTimeout, c); err != nil { - return err - } - out.ConntrackMax = in.ConntrackMax - if err := unversioned.DeepCopy_unversioned_Duration(in.ConntrackTCPEstablishedTimeout, &out.ConntrackTCPEstablishedTimeout, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1alpha1_KubeSchedulerConfiguration(in KubeSchedulerConfiguration, out *KubeSchedulerConfiguration, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Port = in.Port - out.Address = in.Address - out.AlgorithmProvider = in.AlgorithmProvider - out.PolicyConfigFile = in.PolicyConfigFile - if in.EnableProfiling != nil { - in, out := in.EnableProfiling, &out.EnableProfiling - *out = new(bool) - **out = *in - } else { - out.EnableProfiling = nil - } - out.ContentType = in.ContentType - out.KubeAPIQPS = in.KubeAPIQPS - out.KubeAPIBurst = in.KubeAPIBurst - out.SchedulerName = in.SchedulerName - out.HardPodAffinitySymmetricWeight = in.HardPodAffinitySymmetricWeight - out.FailureDomains = in.FailureDomains - if err := DeepCopy_v1alpha1_LeaderElectionConfiguration(in.LeaderElection, &out.LeaderElection, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1alpha1_LeaderElectionConfiguration(in LeaderElectionConfiguration, out *LeaderElectionConfiguration, c *conversion.Cloner) error { - if in.LeaderElect != nil { - in, out := in.LeaderElect, &out.LeaderElect - *out = new(bool) - **out = *in - } else { - out.LeaderElect = nil - } - if err := unversioned.DeepCopy_unversioned_Duration(in.LeaseDuration, &out.LeaseDuration, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.RenewDeadline, &out.RenewDeadline, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Duration(in.RetryPeriod, &out.RetryPeriod, c); err != nil { - return err - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/defaults.go index bab6bb3e..16031a1b 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,20 +17,45 @@ limitations under the License. package v1alpha1 import ( + "path/filepath" + "runtime" "time" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/kubelet/qos" + kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/master/ports" - "k8s.io/kubernetes/pkg/runtime" + kruntime "k8s.io/kubernetes/pkg/runtime" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +const ( + defaultRootDir = "/var/lib/kubelet" + + // When these values are updated, also update test/e2e/framework/util.go + defaultPodInfraContainerImageName = "gcr.io/google_containers/pause" + defaultPodInfraContainerImageVersion = "3.0" + defaultPodInfraContainerImage = defaultPodInfraContainerImageName + + "-" + runtime.GOARCH + ":" + + defaultPodInfraContainerImageVersion + + // From pkg/kubelet/rkt/rkt.go to avoid circular import + defaultRktAPIServiceEndpoint = "localhost:15441" + + AutoDetectCloudProvider = "auto-detect" + + defaultIPTablesMasqueradeBit = 14 + defaultIPTablesDropBit = 15 +) + +var zeroDuration = unversioned.Duration{} + +func addDefaultingFuncs(scheme *kruntime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_KubeProxyConfiguration, SetDefaults_KubeSchedulerConfiguration, SetDefaults_LeaderElectionConfiguration, + SetDefaults_KubeletConfiguration, ) } @@ -58,8 +83,12 @@ func SetDefaults_KubeProxyConfiguration(obj *KubeProxyConfiguration) { if obj.UDPIdleTimeout == zero { obj.UDPIdleTimeout = unversioned.Duration{Duration: 250 * time.Millisecond} } + // If ConntrackMax is set, respect it. if obj.ConntrackMax == 0 { - obj.ConntrackMax = 256 * 1024 // 4x default (64k) + // If ConntrackMax is *not* set, use per-core scaling. + if obj.ConntrackMaxPerCore == 0 { + obj.ConntrackMaxPerCore = 32 * 1024 + } } if obj.IPTablesMasqueradeBit == nil { temp := int32(14) @@ -112,3 +141,222 @@ func SetDefaults_LeaderElectionConfiguration(obj *LeaderElectionConfiguration) { obj.RetryPeriod = unversioned.Duration{Duration: 2 * time.Second} } } + +func SetDefaults_KubeletConfiguration(obj *KubeletConfiguration) { + if obj.Address == "" { + obj.Address = "0.0.0.0" + } + if obj.CloudProvider == "" { + obj.CloudProvider = AutoDetectCloudProvider + } + if obj.CAdvisorPort == 0 { + obj.CAdvisorPort = 4194 + } + if obj.VolumeStatsAggPeriod == zeroDuration { + obj.VolumeStatsAggPeriod = unversioned.Duration{Duration: time.Minute} + } + if obj.CertDirectory == "" { + obj.CertDirectory = "/var/run/kubernetes" + } + if obj.ConfigureCBR0 == nil { + obj.ConfigureCBR0 = boolVar(false) + } + if obj.CgroupsPerQOS == nil { + obj.CgroupsPerQOS = boolVar(false) + } + if obj.ContainerRuntime == "" { + obj.ContainerRuntime = "docker" + } + if obj.RuntimeRequestTimeout == zeroDuration { + obj.RuntimeRequestTimeout = unversioned.Duration{Duration: 2 * time.Minute} + } + if obj.CPUCFSQuota == nil { + obj.CPUCFSQuota = boolVar(true) + } + if obj.DockerExecHandlerName == "" { + obj.DockerExecHandlerName = "native" + } + if obj.DockerEndpoint == "" { + obj.DockerEndpoint = "unix:///var/run/docker.sock" + } + if obj.EventBurst == 0 { + obj.EventBurst = 10 + } + if obj.EventRecordQPS == nil { + temp := int32(5) + obj.EventRecordQPS = &temp + } + if obj.EnableControllerAttachDetach == nil { + obj.EnableControllerAttachDetach = boolVar(true) + } + if obj.EnableDebuggingHandlers == nil { + obj.EnableDebuggingHandlers = boolVar(true) + } + if obj.EnableServer == nil { + obj.EnableServer = boolVar(true) + } + if obj.FileCheckFrequency == zeroDuration { + obj.FileCheckFrequency = unversioned.Duration{Duration: 20 * time.Second} + } + if obj.HealthzBindAddress == "" { + obj.HealthzBindAddress = "127.0.0.1" + } + if obj.HealthzPort == 0 { + obj.HealthzPort = 10248 + } + if obj.HostNetworkSources == nil { + obj.HostNetworkSources = []string{kubetypes.AllSource} + } + if obj.HostPIDSources == nil { + obj.HostPIDSources = []string{kubetypes.AllSource} + } + if obj.HostIPCSources == nil { + obj.HostIPCSources = []string{kubetypes.AllSource} + } + if obj.HTTPCheckFrequency == zeroDuration { + obj.HTTPCheckFrequency = unversioned.Duration{Duration: 20 * time.Second} + } + if obj.ImageMinimumGCAge == zeroDuration { + obj.ImageMinimumGCAge = unversioned.Duration{Duration: 2 * time.Minute} + } + if obj.ImageGCHighThresholdPercent == nil { + temp := int32(90) + obj.ImageGCHighThresholdPercent = &temp + } + if obj.ImageGCLowThresholdPercent == nil { + temp := int32(80) + obj.ImageGCLowThresholdPercent = &temp + } + if obj.LowDiskSpaceThresholdMB == 0 { + obj.LowDiskSpaceThresholdMB = 256 + } + if obj.MasterServiceNamespace == "" { + obj.MasterServiceNamespace = api.NamespaceDefault + } + if obj.MaxContainerCount == nil { + temp := int32(-1) + obj.MaxContainerCount = &temp + } + if obj.MaxPerPodContainerCount == 0 { + obj.MaxPerPodContainerCount = 1 + } + if obj.MaxOpenFiles == 0 { + obj.MaxOpenFiles = 1000000 + } + if obj.MaxPods == 0 { + obj.MaxPods = 110 + } + if obj.MinimumGCAge == zeroDuration { + obj.MinimumGCAge = unversioned.Duration{Duration: 0} + } + if obj.NetworkPluginDir == "" { + obj.NetworkPluginDir = "/usr/libexec/kubernetes/kubelet-plugins/net/exec/" + } + if obj.NonMasqueradeCIDR == "" { + obj.NonMasqueradeCIDR = "10.0.0.0/8" + } + if obj.VolumePluginDir == "" { + obj.VolumePluginDir = "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/" + } + if obj.NodeStatusUpdateFrequency == zeroDuration { + obj.NodeStatusUpdateFrequency = unversioned.Duration{Duration: 10 * time.Second} + } + if obj.OOMScoreAdj == nil { + temp := int32(qos.KubeletOOMScoreAdj) + obj.OOMScoreAdj = &temp + } + if obj.PodInfraContainerImage == "" { + obj.PodInfraContainerImage = defaultPodInfraContainerImage + } + if obj.Port == 0 { + obj.Port = ports.KubeletPort + } + if obj.ReadOnlyPort == 0 { + obj.ReadOnlyPort = ports.KubeletReadOnlyPort + } + if obj.RegisterNode == nil { + obj.RegisterNode = boolVar(true) + } + if obj.RegisterSchedulable == nil { + obj.RegisterSchedulable = boolVar(true) + } + if obj.RegistryBurst == 0 { + obj.RegistryBurst = 10 + } + if obj.RegistryPullQPS == nil { + temp := int32(5) + obj.RegistryPullQPS = &temp + } + if obj.ResolverConfig == "" { + obj.ResolverConfig = kubetypes.ResolvConfDefault + } + if obj.RktAPIEndpoint == "" { + obj.RktAPIEndpoint = defaultRktAPIServiceEndpoint + } + if obj.RootDirectory == "" { + obj.RootDirectory = defaultRootDir + } + if obj.SerializeImagePulls == nil { + obj.SerializeImagePulls = boolVar(true) + } + if obj.SeccompProfileRoot == "" { + filepath.Join(defaultRootDir, "seccomp") + } + if obj.StreamingConnectionIdleTimeout == zeroDuration { + obj.StreamingConnectionIdleTimeout = unversioned.Duration{Duration: 4 * time.Hour} + } + if obj.SyncFrequency == zeroDuration { + obj.SyncFrequency = unversioned.Duration{Duration: 1 * time.Minute} + } + if obj.ReconcileCIDR == nil { + obj.ReconcileCIDR = boolVar(true) + } + if obj.ContentType == "" { + obj.ContentType = "application/vnd.kubernetes.protobuf" + } + if obj.KubeAPIQPS == nil { + temp := int32(5) + obj.KubeAPIQPS = &temp + } + if obj.KubeAPIBurst == 0 { + obj.KubeAPIBurst = 10 + } + if obj.OutOfDiskTransitionFrequency == zeroDuration { + obj.OutOfDiskTransitionFrequency = unversioned.Duration{Duration: 5 * time.Minute} + } + if string(obj.HairpinMode) == "" { + obj.HairpinMode = PromiscuousBridge + } + if obj.EvictionHard == nil { + temp := "memory.available<100Mi" + obj.EvictionHard = &temp + } + if obj.EvictionPressureTransitionPeriod == zeroDuration { + obj.EvictionPressureTransitionPeriod = unversioned.Duration{Duration: 5 * time.Minute} + } + if obj.SystemReserved == nil { + obj.SystemReserved = make(map[string]string) + } + if obj.KubeReserved == nil { + obj.KubeReserved = make(map[string]string) + } + if obj.MakeIPTablesUtilChains == nil { + obj.MakeIPTablesUtilChains = boolVar(true) + } + if obj.IPTablesMasqueradeBit == nil { + temp := int32(defaultIPTablesMasqueradeBit) + obj.IPTablesMasqueradeBit = &temp + } + if obj.IPTablesDropBit == nil { + temp := int32(defaultIPTablesDropBit) + obj.IPTablesDropBit = &temp + } +} + +func boolVar(b bool) *bool { + return &b +} + +var ( + defaultCfg = KubeletConfiguration{} +) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/doc.go index 65a03a20..621e8061 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/componentconfig + package v1alpha1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/register.go index d74effb7..7017d9e9 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,14 +27,20 @@ const GroupName = "componentconfig" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &KubeProxyConfiguration{}, &KubeSchedulerConfiguration{}, + &KubeletConfiguration{}, ) + return nil } + +func (obj *KubeProxyConfiguration) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *KubeSchedulerConfiguration) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } +func (obj *KubeletConfiguration) GetObjectKind() unversioned.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/types.go index 2ae65d87..39da5740 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -62,10 +62,15 @@ type KubeProxyConfiguration struct { // udpIdleTimeout is how long an idle UDP connection will be kept open (e.g. '250ms', '2s'). // Must be greater than 0. Only applicable for proxyMode=userspace. UDPIdleTimeout unversioned.Duration `json:"udpTimeoutMilliseconds"` - // conntrackMax is the maximum number of NAT connections to track (0 to leave as-is)") + // conntrackMax is the maximum number of NAT connections to track (0 to + // leave as-is). This takes precedence over conntrackMaxPerCore. ConntrackMax int32 `json:"conntrackMax"` - // conntrackTCPEstablishedTimeout is how long an idle UDP connection will be kept open - // (e.g. '250ms', '2s'). Must be greater than 0. Only applicable for proxyMode is Userspace + // conntrackMaxPerCore is the maximum number of NAT connections to track + // per CPU core (0 to leave as-is). This value is only considered if + // conntrackMax == 0. + ConntrackMaxPerCore int32 `json:"conntrackMaxPerCore"` + // conntrackTCPEstablishedTimeout is how long an idle TCP connection will be kept open + // (e.g. '250ms', '2s'). Must be greater than 0. ConntrackTCPEstablishedTimeout unversioned.Duration `json:"conntrackTCPEstablishedTimeout"` } @@ -115,6 +120,24 @@ type KubeSchedulerConfiguration struct { LeaderElection LeaderElectionConfiguration `json:"leaderElection"` } +// HairpinMode denotes how the kubelet should configure networking to handle +// hairpin packets. +type HairpinMode string + +// Enum settings for different ways to handle hairpin packets. +const ( + // Set the hairpin flag on the veth of containers in the respective + // container runtime. + HairpinVeth = "hairpin-veth" + // Make the container bridge promiscuous. This will force it to accept + // hairpin packets, even if the flag isn't set on ports of the bridge. + PromiscuousBridge = "promiscuous-bridge" + // Neither of the above. If the kubelet is started in this hairpin mode + // and kube-proxy is running in iptables mode, hairpin packets will be + // dropped by the container bridge. + HairpinNone = "none" +) + // LeaderElectionConfiguration defines the configuration of leader election // clients for components that can run with leader election enabled. type LeaderElectionConfiguration struct { @@ -139,3 +162,319 @@ type LeaderElectionConfiguration struct { // leader election is enabled. RetryPeriod unversioned.Duration `json:"retryPeriod"` } + +type KubeletConfiguration struct { + unversioned.TypeMeta + + // podManifestPath is the path to the directory containing pod manifests to + // run, or the path to a single manifest file + PodManifestPath string `json:"podManifestPath"` + // syncFrequency is the max period between synchronizing running + // containers and config + SyncFrequency unversioned.Duration `json:"syncFrequency"` + // fileCheckFrequency is the duration between checking config files for + // new data + FileCheckFrequency unversioned.Duration `json:"fileCheckFrequency"` + // httpCheckFrequency is the duration between checking http for new data + HTTPCheckFrequency unversioned.Duration `json:"httpCheckFrequency"` + // manifestURL is the URL for accessing the container manifest + ManifestURL string `json:"manifestURL"` + // manifestURLHeader is the HTTP header to use when accessing the manifest + // URL, with the key separated from the value with a ':', as in 'key:value' + ManifestURLHeader string `json:"manifestURLHeader"` + // enableServer enables the Kubelet's server + EnableServer *bool `json:"enableServer"` + // address is the IP address for the Kubelet to serve on (set to 0.0.0.0 + // for all interfaces) + Address string `json:"address"` + // port is the port for the Kubelet to serve on. + Port int32 `json:"port"` + // readOnlyPort is the read-only port for the Kubelet to serve on with + // no authentication/authorization (set to 0 to disable) + ReadOnlyPort int32 `json:"readOnlyPort"` + // tlsCertFile is the file containing x509 Certificate for HTTPS. (CA cert, + // if any, concatenated after server cert). If tlsCertFile and + // tlsPrivateKeyFile are not provided, a self-signed certificate + // and key are generated for the public address and saved to the directory + // passed to certDir. + TLSCertFile string `json:"tlsCertFile"` + // tlsPrivateKeyFile is the ile containing x509 private key matching + // tlsCertFile. + TLSPrivateKeyFile string `json:"tlsPrivateKeyFile"` + // certDirectory is the directory where the TLS certs are located (by + // default /var/run/kubernetes). If tlsCertFile and tlsPrivateKeyFile + // are provided, this flag will be ignored. + CertDirectory string `json:"certDirectory"` + // hostnameOverride is the hostname used to identify the kubelet instead + // of the actual hostname. + HostnameOverride string `json:"hostnameOverride"` + // podInfraContainerImage is the image whose network/ipc namespaces + // containers in each pod will use. + PodInfraContainerImage string `json:"podInfraContainerImage"` + // dockerEndpoint is the path to the docker endpoint to communicate with. + DockerEndpoint string `json:"dockerEndpoint"` + // rootDirectory is the directory path to place kubelet files (volume + // mounts,etc). + RootDirectory string `json:"rootDirectory"` + // seccompProfileRoot is the directory path for seccomp profiles. + SeccompProfileRoot string `json:"seccompProfileRoot"` + // allowPrivileged enables containers to request privileged mode. + // Defaults to false. + AllowPrivileged *bool `json:"allowPrivileged"` + // hostNetworkSources is a comma-separated list of sources from which the + // Kubelet allows pods to use of host network. Defaults to "*". Valid + // options are "file", "http", "api", and "*" (all sources). + HostNetworkSources []string `json:"hostNetworkSources"` + // hostPIDSources is a comma-separated list of sources from which the + // Kubelet allows pods to use the host pid namespace. Defaults to "*". + HostPIDSources []string `json:"hostPIDSources"` + // hostIPCSources is a comma-separated list of sources from which the + // Kubelet allows pods to use the host ipc namespace. Defaults to "*". + HostIPCSources []string `json:"hostIPCSources"` + // registryPullQPS is the limit of registry pulls per second. If 0, + // unlimited. Set to 0 for no limit. Defaults to 5.0. + RegistryPullQPS *int32 `json:"registryPullQPS"` + // registryBurst is the maximum size of a bursty pulls, temporarily allows + // pulls to burst to this number, while still not exceeding registryQps. + // Only used if registryQPS > 0. + RegistryBurst int32 `json:"registryBurst"` + // eventRecordQPS is the maximum event creations per second. If 0, there + // is no limit enforced. + EventRecordQPS *int32 `json:"eventRecordQPS"` + // eventBurst is the maximum size of a bursty event records, temporarily + // allows event records to burst to this number, while still not exceeding + // event-qps. Only used if eventQps > 0 + EventBurst int32 `json:"eventBurst"` + // enableDebuggingHandlers enables server endpoints for log collection + // and local running of containers and commands + EnableDebuggingHandlers *bool `json:"enableDebuggingHandlers"` + // minimumGCAge is the minimum age for a finished container before it is + // garbage collected. + MinimumGCAge unversioned.Duration `json:"minimumGCAge"` + // maxPerPodContainerCount is the maximum number of old instances to + // retain per container. Each container takes up some disk space. + MaxPerPodContainerCount int32 `json:"maxPerPodContainerCount"` + // maxContainerCount is the maximum number of old instances of containers + // to retain globally. Each container takes up some disk space. + MaxContainerCount *int32 `json:"maxContainerCount"` + // cAdvisorPort is the port of the localhost cAdvisor endpoint + CAdvisorPort int32 `json:"cAdvisorPort"` + // healthzPort is the port of the localhost healthz endpoint + HealthzPort int32 `json:"healthzPort"` + // healthzBindAddress is the IP address for the healthz server to serve + // on. + HealthzBindAddress string `json:"healthzBindAddress"` + // oomScoreAdj is The oom-score-adj value for kubelet process. Values + // must be within the range [-1000, 1000]. + OOMScoreAdj *int32 `json:"oomScoreAdj"` + // registerNode enables automatic registration with the apiserver. + RegisterNode *bool `json:"registerNode"` + // clusterDomain is the DNS domain for this cluster. If set, kubelet will + // configure all containers to search this domain in addition to the + // host's search domains. + ClusterDomain string `json:"clusterDomain"` + // masterServiceNamespace is The namespace from which the kubernetes + // master services should be injected into pods. + MasterServiceNamespace string `json:"masterServiceNamespace"` + // clusterDNS is the IP address for a cluster DNS server. If set, kubelet + // will configure all containers to use this for DNS resolution in + // addition to the host's DNS servers + ClusterDNS string `json:"clusterDNS"` + // streamingConnectionIdleTimeout is the maximum time a streaming connection + // can be idle before the connection is automatically closed. + StreamingConnectionIdleTimeout unversioned.Duration `json:"streamingConnectionIdleTimeout"` + // nodeStatusUpdateFrequency is the frequency that kubelet posts node + // status to master. Note: be cautious when changing the constant, it + // must work with nodeMonitorGracePeriod in nodecontroller. + NodeStatusUpdateFrequency unversioned.Duration `json:"nodeStatusUpdateFrequency"` + // imageMinimumGCAge is the minimum age for an unused image before it is + // garbage collected. + ImageMinimumGCAge unversioned.Duration `json:"imageMinimumGCAge"` + // imageGCHighThresholdPercent is the percent of disk usage after which + // image garbage collection is always run. The percent is calculated as + // this field value out of 100. + ImageGCHighThresholdPercent *int32 `json:"imageGCHighThresholdPercent"` + // imageGCLowThresholdPercent is the percent of disk usage before which + // image garbage collection is never run. Lowest disk usage to garbage + // collect to. The percent is calculated as this field value out of 100. + ImageGCLowThresholdPercent *int32 `json:"imageGCLowThresholdPercent"` + // lowDiskSpaceThresholdMB is the absolute free disk space, in MB, to + // maintain. When disk space falls below this threshold, new pods would + // be rejected. + LowDiskSpaceThresholdMB int32 `json:"lowDiskSpaceThresholdMB"` + // How frequently to calculate and cache volume disk usage for all pods + VolumeStatsAggPeriod unversioned.Duration `json:"volumeStatsAggPeriod"` + // networkPluginName is the name of the network plugin to be invoked for + // various events in kubelet/pod lifecycle + NetworkPluginName string `json:"networkPluginName"` + // networkPluginDir is the full path of the directory in which to search + // for network plugins + NetworkPluginDir string `json:"networkPluginDir"` + // networkPluginMTU is the MTU to be passed to the network plugin, + // and overrides the default MTU for cases where it cannot be automatically + // computed (such as IPSEC). + NetworkPluginMTU int32 `json:"networkPluginMTU"` + // volumePluginDir is the full path of the directory in which to search + // for additional third party volume plugins + VolumePluginDir string `json:"volumePluginDir"` + // cloudProvider is the provider for cloud services. + CloudProvider string `json:"cloudProvider"` + // cloudConfigFile is the path to the cloud provider configuration file. + CloudConfigFile string `json:"cloudConfigFile"` + // kubeletCgroups is the absolute name of cgroups to isolate the kubelet in. + KubeletCgroups string `json:"kubeletCgroups"` + // runtimeCgroups are cgroups that container runtime is expected to be isolated in. + RuntimeCgroups string `json:"runtimeCgroups"` + // systemCgroups is absolute name of cgroups in which to place + // all non-kernel processes that are not already in a container. Empty + // for no container. Rolling back the flag requires a reboot. + SystemCgroups string `json:"systemCgroups"` + // cgroupRoot is the root cgroup to use for pods. This is handled by the + // container runtime on a best effort basis. + CgroupRoot string `json:"cgroupRoot"` + // Enable QoS based Cgroup hierarchy: top level cgroups for QoS Classes + // And all Burstable and BestEffort pods are brought up under their + // specific top level QoS cgroup. + CgroupsPerQOS *bool `json:"CgroupsPerQOS,omitempty"` + // containerRuntime is the container runtime to use. + ContainerRuntime string `json:"containerRuntime"` + // remoteRuntimeEndpoint is the endpoint of remote runtime service + RemoteRuntimeEndpoint string `json:"remoteRuntimeEndpoint"` + // remoteImageEndpoint is the endpoint of remote image service + RemoteImageEndpoint string `json:"remoteImageEndpoint"` + // runtimeRequestTimeout is the timeout for all runtime requests except long running + // requests - pull, logs, exec and attach. + RuntimeRequestTimeout unversioned.Duration `json:"runtimeRequestTimeout"` + // rktPath is the path of rkt binary. Leave empty to use the first rkt in + // $PATH. + RktPath string `json:"rktPath"` + // rktApiEndpoint is the endpoint of the rkt API service to communicate with. + RktAPIEndpoint string `json:"rktAPIEndpoint"` + // rktStage1Image is the image to use as stage1. Local paths and + // http/https URLs are supported. + RktStage1Image string `json:"rktStage1Image"` + // lockFilePath is the path that kubelet will use to as a lock file. + // It uses this file as a lock to synchronize with other kubelet processes + // that may be running. + LockFilePath *string `json:"lockFilePath"` + // ExitOnLockContention is a flag that signifies to the kubelet that it is running + // in "bootstrap" mode. This requires that 'LockFilePath' has been set. + // This will cause the kubelet to listen to inotify events on the lock file, + // releasing it and exiting when another process tries to open that file. + ExitOnLockContention bool `json:"exitOnLockContention"` + // configureCBR0 enables the kublet to configure cbr0 based on + // Node.Spec.PodCIDR. + ConfigureCBR0 *bool `json:"configureCbr0"` + // How should the kubelet configure the container bridge for hairpin packets. + // Setting this flag allows endpoints in a Service to loadbalance back to + // themselves if they should try to access their own Service. Values: + // "promiscuous-bridge": make the container bridge promiscuous. + // "hairpin-veth": set the hairpin flag on container veth interfaces. + // "none": do nothing. + // Setting --configure-cbr0 to false implies that to achieve hairpin NAT + // one must set --hairpin-mode=veth-flag, because bridge assumes the + // existence of a container bridge named cbr0. + HairpinMode string `json:"hairpinMode"` + // The node has babysitter process monitoring docker and kubelet. + BabysitDaemons bool `json:"babysitDaemons"` + // maxPods is the number of pods that can run on this Kubelet. + MaxPods int32 `json:"maxPods"` + // nvidiaGPUs is the number of NVIDIA GPU devices on this node. + NvidiaGPUs int32 `json:"nvidiaGPUs"` + // dockerExecHandlerName is the handler to use when executing a command + // in a container. Valid values are 'native' and 'nsenter'. Defaults to + // 'native'. + DockerExecHandlerName string `json:"dockerExecHandlerName"` + // The CIDR to use for pod IP addresses, only used in standalone mode. + // In cluster mode, this is obtained from the master. + PodCIDR string `json:"podCIDR"` + // ResolverConfig is the resolver configuration file used as the basis + // for the container DNS resolution configuration."), [] + ResolverConfig string `json:"resolvConf"` + // cpuCFSQuota is Enable CPU CFS quota enforcement for containers that + // specify CPU limits + CPUCFSQuota *bool `json:"cpuCFSQuota"` + // containerized should be set to true if kubelet is running in a container. + Containerized *bool `json:"containerized"` + // maxOpenFiles is Number of files that can be opened by Kubelet process. + MaxOpenFiles int64 `json:"maxOpenFiles"` + // reconcileCIDR is Reconcile node CIDR with the CIDR specified by the + // API server. No-op if register-node or configure-cbr0 is false. + ReconcileCIDR *bool `json:"reconcileCIDR"` + // registerSchedulable tells the kubelet to register the node as + // schedulable. No-op if register-node is false. + RegisterSchedulable *bool `json:"registerSchedulable"` + // contentType is contentType of requests sent to apiserver. + ContentType string `json:"contentType"` + // kubeAPIQPS is the QPS to use while talking with kubernetes apiserver + KubeAPIQPS *int32 `json:"kubeAPIQPS"` + // kubeAPIBurst is the burst to allow while talking with kubernetes + // apiserver + KubeAPIBurst int32 `json:"kubeAPIBurst"` + // serializeImagePulls when enabled, tells the Kubelet to pull images one + // at a time. We recommend *not* changing the default value on nodes that + // run docker daemon with version < 1.9 or an Aufs storage backend. + // Issue #10959 has more details. + SerializeImagePulls *bool `json:"serializeImagePulls"` + // experimentalFlannelOverlay enables experimental support for starting the + // kubelet with the default overlay network (flannel). Assumes flanneld + // is already running in client mode. + ExperimentalFlannelOverlay bool `json:"experimentalFlannelOverlay"` + // outOfDiskTransitionFrequency is duration for which the kubelet has to + // wait before transitioning out of out-of-disk node condition status. + OutOfDiskTransitionFrequency unversioned.Duration `json:"outOfDiskTransitionFrequency"` + // nodeIP is IP address of the node. If set, kubelet will use this IP + // address for the node. + NodeIP string `json:"nodeIP"` + // nodeLabels to add when registering the node in the cluster. + NodeLabels map[string]string `json:"nodeLabels"` + // nonMasqueradeCIDR configures masquerading: traffic to IPs outside this range will use IP masquerade. + NonMasqueradeCIDR string `json:"nonMasqueradeCIDR"` + // enable gathering custom metrics. + EnableCustomMetrics bool `json:"enableCustomMetrics"` + // Comma-delimited list of hard eviction expressions. For example, 'memory.available<300Mi'. + EvictionHard *string `json:"evictionHard"` + // Comma-delimited list of soft eviction expressions. For example, 'memory.available<300Mi'. + EvictionSoft string `json:"evictionSoft"` + // Comma-delimeted list of grace periods for each soft eviction signal. For example, 'memory.available=30s'. + EvictionSoftGracePeriod string `json:"evictionSoftGracePeriod"` + // Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition. + EvictionPressureTransitionPeriod unversioned.Duration `json:"evictionPressureTransitionPeriod"` + // Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. + EvictionMaxPodGracePeriod int32 `json:"evictionMaxPodGracePeriod"` + // Comma-delimited list of minimum reclaims (e.g. imagefs.available=2Gi) that describes the minimum amount of resource the kubelet will reclaim when performing a pod eviction if that resource is under pressure. + EvictionMinimumReclaim string `json:"evictionMinimumReclaim"` + // Maximum number of pods per core. Cannot exceed MaxPods + PodsPerCore int32 `json:"podsPerCore"` + // enableControllerAttachDetach enables the Attach/Detach controller to + // manage attachment/detachment of volumes scheduled to this node, and + // disables kubelet from executing any attach/detach operations + EnableControllerAttachDetach *bool `json:"enableControllerAttachDetach"` + // A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs + // that describe resources reserved for non-kubernetes components. + // Currently only cpu and memory are supported. [default=none] + // See http://releases.k8s.io/release-1.4/docs/user-guide/compute-resources.md for more detail. + SystemReserved map[string]string `json:"systemReserved"` + // A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs + // that describe resources reserved for kubernetes system components. + // Currently only cpu and memory are supported. [default=none] + // See http://releases.k8s.io/release-1.4/docs/user-guide/compute-resources.md for more detail. + KubeReserved map[string]string `json:"kubeReserved"` + // Default behaviour for kernel tuning + ProtectKernelDefaults bool `json:"protectKernelDefaults"` + // If true, Kubelet ensures a set of iptables rules are present on host. + // These rules will serve as utility rules for various components, e.g. KubeProxy. + // The rules will be created based on IPTablesMasqueradeBit and IPTablesDropBit. + MakeIPTablesUtilChains *bool `json:"makeIPTablesUtilChains"` + // iptablesMasqueradeBit is the bit of the iptables fwmark space to mark for SNAT + // Values must be within the range [0, 31]. Must be different from other mark bits. + // Warning: Please match the value of corresponding parameter in kube-proxy + // TODO: clean up IPTablesMasqueradeBit in kube-proxy + IPTablesMasqueradeBit *int32 `json:"iptablesMasqueradeBit"` + // iptablesDropBit is the bit of the iptables fwmark space to mark for dropping packets. + // Values must be within the range [0, 31]. Must be different from other mark bits. + IPTablesDropBit *int32 `json:"iptablesDropBit"` + // Whitelist of unsafe sysctls or sysctl patterns (ending in *). Use these at your own risk. + // Resource isolation might be lacking and pod might influence each other on the same node. + AllowedUnsafeSysctls []string `json:"allowedUnsafeSysctls,omitempty"` +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go new file mode 100644 index 00000000..d5dc36ac --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/zz_generated.conversion.go @@ -0,0 +1,548 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by conversion-gen. Do not edit it manually! + +package v1alpha1 + +import ( + api "k8s.io/kubernetes/pkg/api" + componentconfig "k8s.io/kubernetes/pkg/apis/componentconfig" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + config "k8s.io/kubernetes/pkg/util/config" +) + +func init() { + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyConfiguration, + Convert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguration, + Convert_v1alpha1_KubeSchedulerConfiguration_To_componentconfig_KubeSchedulerConfiguration, + Convert_componentconfig_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfiguration, + Convert_v1alpha1_KubeletConfiguration_To_componentconfig_KubeletConfiguration, + Convert_componentconfig_KubeletConfiguration_To_v1alpha1_KubeletConfiguration, + Convert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration, + Convert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration, + ) +} + +func autoConvert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyConfiguration(in *KubeProxyConfiguration, out *componentconfig.KubeProxyConfiguration, s conversion.Scope) error { + SetDefaults_KubeProxyConfiguration(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.BindAddress = in.BindAddress + out.ClusterCIDR = in.ClusterCIDR + out.HealthzBindAddress = in.HealthzBindAddress + out.HealthzPort = in.HealthzPort + out.HostnameOverride = in.HostnameOverride + out.IPTablesMasqueradeBit = in.IPTablesMasqueradeBit + out.IPTablesSyncPeriod = in.IPTablesSyncPeriod + out.KubeconfigPath = in.KubeconfigPath + out.MasqueradeAll = in.MasqueradeAll + out.Master = in.Master + out.OOMScoreAdj = in.OOMScoreAdj + out.Mode = componentconfig.ProxyMode(in.Mode) + out.PortRange = in.PortRange + out.ResourceContainer = in.ResourceContainer + out.UDPIdleTimeout = in.UDPIdleTimeout + out.ConntrackMax = in.ConntrackMax + out.ConntrackMaxPerCore = in.ConntrackMaxPerCore + out.ConntrackTCPEstablishedTimeout = in.ConntrackTCPEstablishedTimeout + return nil +} + +func Convert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyConfiguration(in *KubeProxyConfiguration, out *componentconfig.KubeProxyConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_KubeProxyConfiguration_To_componentconfig_KubeProxyConfiguration(in, out, s) +} + +func autoConvert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguration(in *componentconfig.KubeProxyConfiguration, out *KubeProxyConfiguration, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.BindAddress = in.BindAddress + out.ClusterCIDR = in.ClusterCIDR + out.HealthzBindAddress = in.HealthzBindAddress + out.HealthzPort = in.HealthzPort + out.HostnameOverride = in.HostnameOverride + out.IPTablesMasqueradeBit = in.IPTablesMasqueradeBit + out.IPTablesSyncPeriod = in.IPTablesSyncPeriod + out.KubeconfigPath = in.KubeconfigPath + out.MasqueradeAll = in.MasqueradeAll + out.Master = in.Master + out.OOMScoreAdj = in.OOMScoreAdj + out.Mode = ProxyMode(in.Mode) + out.PortRange = in.PortRange + out.ResourceContainer = in.ResourceContainer + out.UDPIdleTimeout = in.UDPIdleTimeout + out.ConntrackMax = in.ConntrackMax + out.ConntrackMaxPerCore = in.ConntrackMaxPerCore + out.ConntrackTCPEstablishedTimeout = in.ConntrackTCPEstablishedTimeout + return nil +} + +func Convert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguration(in *componentconfig.KubeProxyConfiguration, out *KubeProxyConfiguration, s conversion.Scope) error { + return autoConvert_componentconfig_KubeProxyConfiguration_To_v1alpha1_KubeProxyConfiguration(in, out, s) +} + +func autoConvert_v1alpha1_KubeSchedulerConfiguration_To_componentconfig_KubeSchedulerConfiguration(in *KubeSchedulerConfiguration, out *componentconfig.KubeSchedulerConfiguration, s conversion.Scope) error { + SetDefaults_KubeSchedulerConfiguration(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Port = int32(in.Port) + out.Address = in.Address + out.AlgorithmProvider = in.AlgorithmProvider + out.PolicyConfigFile = in.PolicyConfigFile + if err := api.Convert_Pointer_bool_To_bool(&in.EnableProfiling, &out.EnableProfiling, s); err != nil { + return err + } + out.ContentType = in.ContentType + out.KubeAPIQPS = in.KubeAPIQPS + out.KubeAPIBurst = int32(in.KubeAPIBurst) + out.SchedulerName = in.SchedulerName + out.HardPodAffinitySymmetricWeight = in.HardPodAffinitySymmetricWeight + out.FailureDomains = in.FailureDomains + if err := Convert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { + return err + } + return nil +} + +func Convert_v1alpha1_KubeSchedulerConfiguration_To_componentconfig_KubeSchedulerConfiguration(in *KubeSchedulerConfiguration, out *componentconfig.KubeSchedulerConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_KubeSchedulerConfiguration_To_componentconfig_KubeSchedulerConfiguration(in, out, s) +} + +func autoConvert_componentconfig_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfiguration(in *componentconfig.KubeSchedulerConfiguration, out *KubeSchedulerConfiguration, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Port = int(in.Port) + out.Address = in.Address + out.AlgorithmProvider = in.AlgorithmProvider + out.PolicyConfigFile = in.PolicyConfigFile + if err := api.Convert_bool_To_Pointer_bool(&in.EnableProfiling, &out.EnableProfiling, s); err != nil { + return err + } + out.ContentType = in.ContentType + out.KubeAPIQPS = in.KubeAPIQPS + out.KubeAPIBurst = int(in.KubeAPIBurst) + out.SchedulerName = in.SchedulerName + out.HardPodAffinitySymmetricWeight = in.HardPodAffinitySymmetricWeight + out.FailureDomains = in.FailureDomains + if err := Convert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, s); err != nil { + return err + } + return nil +} + +func Convert_componentconfig_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfiguration(in *componentconfig.KubeSchedulerConfiguration, out *KubeSchedulerConfiguration, s conversion.Scope) error { + return autoConvert_componentconfig_KubeSchedulerConfiguration_To_v1alpha1_KubeSchedulerConfiguration(in, out, s) +} + +func autoConvert_v1alpha1_KubeletConfiguration_To_componentconfig_KubeletConfiguration(in *KubeletConfiguration, out *componentconfig.KubeletConfiguration, s conversion.Scope) error { + SetDefaults_KubeletConfiguration(in) + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.PodManifestPath = in.PodManifestPath + out.SyncFrequency = in.SyncFrequency + out.FileCheckFrequency = in.FileCheckFrequency + out.HTTPCheckFrequency = in.HTTPCheckFrequency + out.ManifestURL = in.ManifestURL + out.ManifestURLHeader = in.ManifestURLHeader + if err := api.Convert_Pointer_bool_To_bool(&in.EnableServer, &out.EnableServer, s); err != nil { + return err + } + out.Address = in.Address + out.Port = in.Port + out.ReadOnlyPort = in.ReadOnlyPort + out.TLSCertFile = in.TLSCertFile + out.TLSPrivateKeyFile = in.TLSPrivateKeyFile + out.CertDirectory = in.CertDirectory + out.HostnameOverride = in.HostnameOverride + out.PodInfraContainerImage = in.PodInfraContainerImage + out.DockerEndpoint = in.DockerEndpoint + out.RootDirectory = in.RootDirectory + out.SeccompProfileRoot = in.SeccompProfileRoot + if err := api.Convert_Pointer_bool_To_bool(&in.AllowPrivileged, &out.AllowPrivileged, s); err != nil { + return err + } + out.HostNetworkSources = in.HostNetworkSources + out.HostPIDSources = in.HostPIDSources + out.HostIPCSources = in.HostIPCSources + if err := api.Convert_Pointer_int32_To_int32(&in.RegistryPullQPS, &out.RegistryPullQPS, s); err != nil { + return err + } + out.RegistryBurst = in.RegistryBurst + if err := api.Convert_Pointer_int32_To_int32(&in.EventRecordQPS, &out.EventRecordQPS, s); err != nil { + return err + } + out.EventBurst = in.EventBurst + if err := api.Convert_Pointer_bool_To_bool(&in.EnableDebuggingHandlers, &out.EnableDebuggingHandlers, s); err != nil { + return err + } + out.MinimumGCAge = in.MinimumGCAge + out.MaxPerPodContainerCount = in.MaxPerPodContainerCount + if err := api.Convert_Pointer_int32_To_int32(&in.MaxContainerCount, &out.MaxContainerCount, s); err != nil { + return err + } + out.CAdvisorPort = in.CAdvisorPort + out.HealthzPort = in.HealthzPort + out.HealthzBindAddress = in.HealthzBindAddress + if err := api.Convert_Pointer_int32_To_int32(&in.OOMScoreAdj, &out.OOMScoreAdj, s); err != nil { + return err + } + if err := api.Convert_Pointer_bool_To_bool(&in.RegisterNode, &out.RegisterNode, s); err != nil { + return err + } + out.ClusterDomain = in.ClusterDomain + out.MasterServiceNamespace = in.MasterServiceNamespace + out.ClusterDNS = in.ClusterDNS + out.StreamingConnectionIdleTimeout = in.StreamingConnectionIdleTimeout + out.NodeStatusUpdateFrequency = in.NodeStatusUpdateFrequency + out.ImageMinimumGCAge = in.ImageMinimumGCAge + if err := api.Convert_Pointer_int32_To_int32(&in.ImageGCHighThresholdPercent, &out.ImageGCHighThresholdPercent, s); err != nil { + return err + } + if err := api.Convert_Pointer_int32_To_int32(&in.ImageGCLowThresholdPercent, &out.ImageGCLowThresholdPercent, s); err != nil { + return err + } + out.LowDiskSpaceThresholdMB = in.LowDiskSpaceThresholdMB + out.VolumeStatsAggPeriod = in.VolumeStatsAggPeriod + out.NetworkPluginName = in.NetworkPluginName + out.NetworkPluginDir = in.NetworkPluginDir + out.NetworkPluginMTU = in.NetworkPluginMTU + out.VolumePluginDir = in.VolumePluginDir + out.CloudProvider = in.CloudProvider + out.CloudConfigFile = in.CloudConfigFile + out.KubeletCgroups = in.KubeletCgroups + out.RuntimeCgroups = in.RuntimeCgroups + out.SystemCgroups = in.SystemCgroups + out.CgroupRoot = in.CgroupRoot + if err := api.Convert_Pointer_bool_To_bool(&in.CgroupsPerQOS, &out.CgroupsPerQOS, s); err != nil { + return err + } + out.ContainerRuntime = in.ContainerRuntime + out.RemoteRuntimeEndpoint = in.RemoteRuntimeEndpoint + out.RemoteImageEndpoint = in.RemoteImageEndpoint + out.RuntimeRequestTimeout = in.RuntimeRequestTimeout + out.RktPath = in.RktPath + out.RktAPIEndpoint = in.RktAPIEndpoint + out.RktStage1Image = in.RktStage1Image + if err := api.Convert_Pointer_string_To_string(&in.LockFilePath, &out.LockFilePath, s); err != nil { + return err + } + out.ExitOnLockContention = in.ExitOnLockContention + if err := api.Convert_Pointer_bool_To_bool(&in.ConfigureCBR0, &out.ConfigureCBR0, s); err != nil { + return err + } + out.HairpinMode = in.HairpinMode + out.BabysitDaemons = in.BabysitDaemons + out.MaxPods = in.MaxPods + out.NvidiaGPUs = in.NvidiaGPUs + out.DockerExecHandlerName = in.DockerExecHandlerName + out.PodCIDR = in.PodCIDR + out.ResolverConfig = in.ResolverConfig + if err := api.Convert_Pointer_bool_To_bool(&in.CPUCFSQuota, &out.CPUCFSQuota, s); err != nil { + return err + } + if err := api.Convert_Pointer_bool_To_bool(&in.Containerized, &out.Containerized, s); err != nil { + return err + } + out.MaxOpenFiles = in.MaxOpenFiles + if err := api.Convert_Pointer_bool_To_bool(&in.ReconcileCIDR, &out.ReconcileCIDR, s); err != nil { + return err + } + if err := api.Convert_Pointer_bool_To_bool(&in.RegisterSchedulable, &out.RegisterSchedulable, s); err != nil { + return err + } + out.ContentType = in.ContentType + if err := api.Convert_Pointer_int32_To_int32(&in.KubeAPIQPS, &out.KubeAPIQPS, s); err != nil { + return err + } + out.KubeAPIBurst = in.KubeAPIBurst + if err := api.Convert_Pointer_bool_To_bool(&in.SerializeImagePulls, &out.SerializeImagePulls, s); err != nil { + return err + } + out.ExperimentalFlannelOverlay = in.ExperimentalFlannelOverlay + out.OutOfDiskTransitionFrequency = in.OutOfDiskTransitionFrequency + out.NodeIP = in.NodeIP + out.NodeLabels = in.NodeLabels + out.NonMasqueradeCIDR = in.NonMasqueradeCIDR + out.EnableCustomMetrics = in.EnableCustomMetrics + if err := api.Convert_Pointer_string_To_string(&in.EvictionHard, &out.EvictionHard, s); err != nil { + return err + } + out.EvictionSoft = in.EvictionSoft + out.EvictionSoftGracePeriod = in.EvictionSoftGracePeriod + out.EvictionPressureTransitionPeriod = in.EvictionPressureTransitionPeriod + out.EvictionMaxPodGracePeriod = in.EvictionMaxPodGracePeriod + out.EvictionMinimumReclaim = in.EvictionMinimumReclaim + out.PodsPerCore = in.PodsPerCore + if err := api.Convert_Pointer_bool_To_bool(&in.EnableControllerAttachDetach, &out.EnableControllerAttachDetach, s); err != nil { + return err + } + if in.SystemReserved != nil { + in, out := &in.SystemReserved, &out.SystemReserved + *out = make(config.ConfigurationMap, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.SystemReserved = nil + } + if in.KubeReserved != nil { + in, out := &in.KubeReserved, &out.KubeReserved + *out = make(config.ConfigurationMap, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.KubeReserved = nil + } + out.ProtectKernelDefaults = in.ProtectKernelDefaults + if err := api.Convert_Pointer_bool_To_bool(&in.MakeIPTablesUtilChains, &out.MakeIPTablesUtilChains, s); err != nil { + return err + } + if err := api.Convert_Pointer_int32_To_int32(&in.IPTablesMasqueradeBit, &out.IPTablesMasqueradeBit, s); err != nil { + return err + } + if err := api.Convert_Pointer_int32_To_int32(&in.IPTablesDropBit, &out.IPTablesDropBit, s); err != nil { + return err + } + out.AllowedUnsafeSysctls = in.AllowedUnsafeSysctls + return nil +} + +func Convert_v1alpha1_KubeletConfiguration_To_componentconfig_KubeletConfiguration(in *KubeletConfiguration, out *componentconfig.KubeletConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_KubeletConfiguration_To_componentconfig_KubeletConfiguration(in, out, s) +} + +func autoConvert_componentconfig_KubeletConfiguration_To_v1alpha1_KubeletConfiguration(in *componentconfig.KubeletConfiguration, out *KubeletConfiguration, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.PodManifestPath = in.PodManifestPath + out.SyncFrequency = in.SyncFrequency + out.FileCheckFrequency = in.FileCheckFrequency + out.HTTPCheckFrequency = in.HTTPCheckFrequency + out.ManifestURL = in.ManifestURL + out.ManifestURLHeader = in.ManifestURLHeader + if err := api.Convert_bool_To_Pointer_bool(&in.EnableServer, &out.EnableServer, s); err != nil { + return err + } + out.Address = in.Address + out.Port = in.Port + out.ReadOnlyPort = in.ReadOnlyPort + out.TLSCertFile = in.TLSCertFile + out.TLSPrivateKeyFile = in.TLSPrivateKeyFile + out.CertDirectory = in.CertDirectory + out.HostnameOverride = in.HostnameOverride + out.PodInfraContainerImage = in.PodInfraContainerImage + out.DockerEndpoint = in.DockerEndpoint + out.RootDirectory = in.RootDirectory + out.SeccompProfileRoot = in.SeccompProfileRoot + if err := api.Convert_bool_To_Pointer_bool(&in.AllowPrivileged, &out.AllowPrivileged, s); err != nil { + return err + } + out.HostNetworkSources = in.HostNetworkSources + out.HostPIDSources = in.HostPIDSources + out.HostIPCSources = in.HostIPCSources + if err := api.Convert_int32_To_Pointer_int32(&in.RegistryPullQPS, &out.RegistryPullQPS, s); err != nil { + return err + } + out.RegistryBurst = in.RegistryBurst + if err := api.Convert_int32_To_Pointer_int32(&in.EventRecordQPS, &out.EventRecordQPS, s); err != nil { + return err + } + out.EventBurst = in.EventBurst + if err := api.Convert_bool_To_Pointer_bool(&in.EnableDebuggingHandlers, &out.EnableDebuggingHandlers, s); err != nil { + return err + } + out.MinimumGCAge = in.MinimumGCAge + out.MaxPerPodContainerCount = in.MaxPerPodContainerCount + if err := api.Convert_int32_To_Pointer_int32(&in.MaxContainerCount, &out.MaxContainerCount, s); err != nil { + return err + } + out.CAdvisorPort = in.CAdvisorPort + out.HealthzPort = in.HealthzPort + out.HealthzBindAddress = in.HealthzBindAddress + if err := api.Convert_int32_To_Pointer_int32(&in.OOMScoreAdj, &out.OOMScoreAdj, s); err != nil { + return err + } + if err := api.Convert_bool_To_Pointer_bool(&in.RegisterNode, &out.RegisterNode, s); err != nil { + return err + } + out.ClusterDomain = in.ClusterDomain + out.MasterServiceNamespace = in.MasterServiceNamespace + out.ClusterDNS = in.ClusterDNS + out.StreamingConnectionIdleTimeout = in.StreamingConnectionIdleTimeout + out.NodeStatusUpdateFrequency = in.NodeStatusUpdateFrequency + out.ImageMinimumGCAge = in.ImageMinimumGCAge + if err := api.Convert_int32_To_Pointer_int32(&in.ImageGCHighThresholdPercent, &out.ImageGCHighThresholdPercent, s); err != nil { + return err + } + if err := api.Convert_int32_To_Pointer_int32(&in.ImageGCLowThresholdPercent, &out.ImageGCLowThresholdPercent, s); err != nil { + return err + } + out.LowDiskSpaceThresholdMB = in.LowDiskSpaceThresholdMB + out.VolumeStatsAggPeriod = in.VolumeStatsAggPeriod + out.NetworkPluginName = in.NetworkPluginName + out.NetworkPluginMTU = in.NetworkPluginMTU + out.NetworkPluginDir = in.NetworkPluginDir + out.VolumePluginDir = in.VolumePluginDir + out.CloudProvider = in.CloudProvider + out.CloudConfigFile = in.CloudConfigFile + out.KubeletCgroups = in.KubeletCgroups + if err := api.Convert_bool_To_Pointer_bool(&in.CgroupsPerQOS, &out.CgroupsPerQOS, s); err != nil { + return err + } + out.RuntimeCgroups = in.RuntimeCgroups + out.SystemCgroups = in.SystemCgroups + out.CgroupRoot = in.CgroupRoot + out.ContainerRuntime = in.ContainerRuntime + out.RemoteRuntimeEndpoint = in.RemoteRuntimeEndpoint + out.RemoteImageEndpoint = in.RemoteImageEndpoint + out.RuntimeRequestTimeout = in.RuntimeRequestTimeout + out.RktPath = in.RktPath + out.RktAPIEndpoint = in.RktAPIEndpoint + out.RktStage1Image = in.RktStage1Image + if err := api.Convert_string_To_Pointer_string(&in.LockFilePath, &out.LockFilePath, s); err != nil { + return err + } + out.ExitOnLockContention = in.ExitOnLockContention + if err := api.Convert_bool_To_Pointer_bool(&in.ConfigureCBR0, &out.ConfigureCBR0, s); err != nil { + return err + } + out.HairpinMode = in.HairpinMode + out.BabysitDaemons = in.BabysitDaemons + out.MaxPods = in.MaxPods + out.NvidiaGPUs = in.NvidiaGPUs + out.DockerExecHandlerName = in.DockerExecHandlerName + out.PodCIDR = in.PodCIDR + out.ResolverConfig = in.ResolverConfig + if err := api.Convert_bool_To_Pointer_bool(&in.CPUCFSQuota, &out.CPUCFSQuota, s); err != nil { + return err + } + if err := api.Convert_bool_To_Pointer_bool(&in.Containerized, &out.Containerized, s); err != nil { + return err + } + out.MaxOpenFiles = in.MaxOpenFiles + if err := api.Convert_bool_To_Pointer_bool(&in.ReconcileCIDR, &out.ReconcileCIDR, s); err != nil { + return err + } + if err := api.Convert_bool_To_Pointer_bool(&in.RegisterSchedulable, &out.RegisterSchedulable, s); err != nil { + return err + } + out.ContentType = in.ContentType + if err := api.Convert_int32_To_Pointer_int32(&in.KubeAPIQPS, &out.KubeAPIQPS, s); err != nil { + return err + } + out.KubeAPIBurst = in.KubeAPIBurst + if err := api.Convert_bool_To_Pointer_bool(&in.SerializeImagePulls, &out.SerializeImagePulls, s); err != nil { + return err + } + out.ExperimentalFlannelOverlay = in.ExperimentalFlannelOverlay + out.OutOfDiskTransitionFrequency = in.OutOfDiskTransitionFrequency + out.NodeIP = in.NodeIP + out.NodeLabels = in.NodeLabels + out.NonMasqueradeCIDR = in.NonMasqueradeCIDR + out.EnableCustomMetrics = in.EnableCustomMetrics + if err := api.Convert_string_To_Pointer_string(&in.EvictionHard, &out.EvictionHard, s); err != nil { + return err + } + out.EvictionSoft = in.EvictionSoft + out.EvictionSoftGracePeriod = in.EvictionSoftGracePeriod + out.EvictionPressureTransitionPeriod = in.EvictionPressureTransitionPeriod + out.EvictionMaxPodGracePeriod = in.EvictionMaxPodGracePeriod + out.EvictionMinimumReclaim = in.EvictionMinimumReclaim + out.PodsPerCore = in.PodsPerCore + if err := api.Convert_bool_To_Pointer_bool(&in.EnableControllerAttachDetach, &out.EnableControllerAttachDetach, s); err != nil { + return err + } + if in.SystemReserved != nil { + in, out := &in.SystemReserved, &out.SystemReserved + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.SystemReserved = nil + } + if in.KubeReserved != nil { + in, out := &in.KubeReserved, &out.KubeReserved + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.KubeReserved = nil + } + out.ProtectKernelDefaults = in.ProtectKernelDefaults + if err := api.Convert_bool_To_Pointer_bool(&in.MakeIPTablesUtilChains, &out.MakeIPTablesUtilChains, s); err != nil { + return err + } + if err := api.Convert_int32_To_Pointer_int32(&in.IPTablesMasqueradeBit, &out.IPTablesMasqueradeBit, s); err != nil { + return err + } + if err := api.Convert_int32_To_Pointer_int32(&in.IPTablesDropBit, &out.IPTablesDropBit, s); err != nil { + return err + } + out.AllowedUnsafeSysctls = in.AllowedUnsafeSysctls + return nil +} + +func Convert_componentconfig_KubeletConfiguration_To_v1alpha1_KubeletConfiguration(in *componentconfig.KubeletConfiguration, out *KubeletConfiguration, s conversion.Scope) error { + return autoConvert_componentconfig_KubeletConfiguration_To_v1alpha1_KubeletConfiguration(in, out, s) +} + +func autoConvert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration(in *LeaderElectionConfiguration, out *componentconfig.LeaderElectionConfiguration, s conversion.Scope) error { + SetDefaults_LeaderElectionConfiguration(in) + if err := api.Convert_Pointer_bool_To_bool(&in.LeaderElect, &out.LeaderElect, s); err != nil { + return err + } + out.LeaseDuration = in.LeaseDuration + out.RenewDeadline = in.RenewDeadline + out.RetryPeriod = in.RetryPeriod + return nil +} + +func Convert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration(in *LeaderElectionConfiguration, out *componentconfig.LeaderElectionConfiguration, s conversion.Scope) error { + return autoConvert_v1alpha1_LeaderElectionConfiguration_To_componentconfig_LeaderElectionConfiguration(in, out, s) +} + +func autoConvert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(in *componentconfig.LeaderElectionConfiguration, out *LeaderElectionConfiguration, s conversion.Scope) error { + if err := api.Convert_bool_To_Pointer_bool(&in.LeaderElect, &out.LeaderElect, s); err != nil { + return err + } + out.LeaseDuration = in.LeaseDuration + out.RenewDeadline = in.RenewDeadline + out.RetryPeriod = in.RetryPeriod + return nil +} + +func Convert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(in *componentconfig.LeaderElectionConfiguration, out *LeaderElectionConfiguration, s conversion.Scope) error { + return autoConvert_componentconfig_LeaderElectionConfiguration_To_v1alpha1_LeaderElectionConfiguration(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..952ce0de --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,432 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1alpha1 + +import ( + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_KubeProxyConfiguration, InType: reflect.TypeOf(&KubeProxyConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_KubeSchedulerConfiguration, InType: reflect.TypeOf(&KubeSchedulerConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_KubeletConfiguration, InType: reflect.TypeOf(&KubeletConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_LeaderElectionConfiguration, InType: reflect.TypeOf(&LeaderElectionConfiguration{})}, + ) +} + +func DeepCopy_v1alpha1_KubeProxyConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KubeProxyConfiguration) + out := out.(*KubeProxyConfiguration) + out.TypeMeta = in.TypeMeta + out.BindAddress = in.BindAddress + out.ClusterCIDR = in.ClusterCIDR + out.HealthzBindAddress = in.HealthzBindAddress + out.HealthzPort = in.HealthzPort + out.HostnameOverride = in.HostnameOverride + if in.IPTablesMasqueradeBit != nil { + in, out := &in.IPTablesMasqueradeBit, &out.IPTablesMasqueradeBit + *out = new(int32) + **out = **in + } else { + out.IPTablesMasqueradeBit = nil + } + out.IPTablesSyncPeriod = in.IPTablesSyncPeriod + out.KubeconfigPath = in.KubeconfigPath + out.MasqueradeAll = in.MasqueradeAll + out.Master = in.Master + if in.OOMScoreAdj != nil { + in, out := &in.OOMScoreAdj, &out.OOMScoreAdj + *out = new(int32) + **out = **in + } else { + out.OOMScoreAdj = nil + } + out.Mode = in.Mode + out.PortRange = in.PortRange + out.ResourceContainer = in.ResourceContainer + out.UDPIdleTimeout = in.UDPIdleTimeout + out.ConntrackMax = in.ConntrackMax + out.ConntrackMaxPerCore = in.ConntrackMaxPerCore + out.ConntrackTCPEstablishedTimeout = in.ConntrackTCPEstablishedTimeout + return nil + } +} + +func DeepCopy_v1alpha1_KubeSchedulerConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KubeSchedulerConfiguration) + out := out.(*KubeSchedulerConfiguration) + out.TypeMeta = in.TypeMeta + out.Port = in.Port + out.Address = in.Address + out.AlgorithmProvider = in.AlgorithmProvider + out.PolicyConfigFile = in.PolicyConfigFile + if in.EnableProfiling != nil { + in, out := &in.EnableProfiling, &out.EnableProfiling + *out = new(bool) + **out = **in + } else { + out.EnableProfiling = nil + } + out.ContentType = in.ContentType + out.KubeAPIQPS = in.KubeAPIQPS + out.KubeAPIBurst = in.KubeAPIBurst + out.SchedulerName = in.SchedulerName + out.HardPodAffinitySymmetricWeight = in.HardPodAffinitySymmetricWeight + out.FailureDomains = in.FailureDomains + if err := DeepCopy_v1alpha1_LeaderElectionConfiguration(&in.LeaderElection, &out.LeaderElection, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1alpha1_KubeletConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KubeletConfiguration) + out := out.(*KubeletConfiguration) + out.TypeMeta = in.TypeMeta + out.PodManifestPath = in.PodManifestPath + out.SyncFrequency = in.SyncFrequency + out.FileCheckFrequency = in.FileCheckFrequency + out.HTTPCheckFrequency = in.HTTPCheckFrequency + out.ManifestURL = in.ManifestURL + out.ManifestURLHeader = in.ManifestURLHeader + if in.EnableServer != nil { + in, out := &in.EnableServer, &out.EnableServer + *out = new(bool) + **out = **in + } else { + out.EnableServer = nil + } + out.Address = in.Address + out.Port = in.Port + out.ReadOnlyPort = in.ReadOnlyPort + out.TLSCertFile = in.TLSCertFile + out.TLSPrivateKeyFile = in.TLSPrivateKeyFile + out.CertDirectory = in.CertDirectory + out.HostnameOverride = in.HostnameOverride + out.PodInfraContainerImage = in.PodInfraContainerImage + out.DockerEndpoint = in.DockerEndpoint + out.RootDirectory = in.RootDirectory + out.SeccompProfileRoot = in.SeccompProfileRoot + if in.AllowPrivileged != nil { + in, out := &in.AllowPrivileged, &out.AllowPrivileged + *out = new(bool) + **out = **in + } else { + out.AllowPrivileged = nil + } + if in.HostNetworkSources != nil { + in, out := &in.HostNetworkSources, &out.HostNetworkSources + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.HostNetworkSources = nil + } + if in.HostPIDSources != nil { + in, out := &in.HostPIDSources, &out.HostPIDSources + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.HostPIDSources = nil + } + if in.HostIPCSources != nil { + in, out := &in.HostIPCSources, &out.HostIPCSources + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.HostIPCSources = nil + } + if in.RegistryPullQPS != nil { + in, out := &in.RegistryPullQPS, &out.RegistryPullQPS + *out = new(int32) + **out = **in + } else { + out.RegistryPullQPS = nil + } + out.RegistryBurst = in.RegistryBurst + if in.EventRecordQPS != nil { + in, out := &in.EventRecordQPS, &out.EventRecordQPS + *out = new(int32) + **out = **in + } else { + out.EventRecordQPS = nil + } + out.EventBurst = in.EventBurst + if in.EnableDebuggingHandlers != nil { + in, out := &in.EnableDebuggingHandlers, &out.EnableDebuggingHandlers + *out = new(bool) + **out = **in + } else { + out.EnableDebuggingHandlers = nil + } + out.MinimumGCAge = in.MinimumGCAge + out.MaxPerPodContainerCount = in.MaxPerPodContainerCount + if in.MaxContainerCount != nil { + in, out := &in.MaxContainerCount, &out.MaxContainerCount + *out = new(int32) + **out = **in + } else { + out.MaxContainerCount = nil + } + out.CAdvisorPort = in.CAdvisorPort + out.HealthzPort = in.HealthzPort + out.HealthzBindAddress = in.HealthzBindAddress + if in.OOMScoreAdj != nil { + in, out := &in.OOMScoreAdj, &out.OOMScoreAdj + *out = new(int32) + **out = **in + } else { + out.OOMScoreAdj = nil + } + if in.RegisterNode != nil { + in, out := &in.RegisterNode, &out.RegisterNode + *out = new(bool) + **out = **in + } else { + out.RegisterNode = nil + } + out.ClusterDomain = in.ClusterDomain + out.MasterServiceNamespace = in.MasterServiceNamespace + out.ClusterDNS = in.ClusterDNS + out.StreamingConnectionIdleTimeout = in.StreamingConnectionIdleTimeout + out.NodeStatusUpdateFrequency = in.NodeStatusUpdateFrequency + out.ImageMinimumGCAge = in.ImageMinimumGCAge + if in.ImageGCHighThresholdPercent != nil { + in, out := &in.ImageGCHighThresholdPercent, &out.ImageGCHighThresholdPercent + *out = new(int32) + **out = **in + } else { + out.ImageGCHighThresholdPercent = nil + } + if in.ImageGCLowThresholdPercent != nil { + in, out := &in.ImageGCLowThresholdPercent, &out.ImageGCLowThresholdPercent + *out = new(int32) + **out = **in + } else { + out.ImageGCLowThresholdPercent = nil + } + out.LowDiskSpaceThresholdMB = in.LowDiskSpaceThresholdMB + out.VolumeStatsAggPeriod = in.VolumeStatsAggPeriod + out.NetworkPluginName = in.NetworkPluginName + out.NetworkPluginDir = in.NetworkPluginDir + out.NetworkPluginMTU = in.NetworkPluginMTU + out.VolumePluginDir = in.VolumePluginDir + out.CloudProvider = in.CloudProvider + out.CloudConfigFile = in.CloudConfigFile + out.KubeletCgroups = in.KubeletCgroups + out.RuntimeCgroups = in.RuntimeCgroups + out.SystemCgroups = in.SystemCgroups + out.CgroupRoot = in.CgroupRoot + if in.CgroupsPerQOS != nil { + in, out := &in.CgroupsPerQOS, &out.CgroupsPerQOS + *out = new(bool) + **out = **in + } else { + out.CgroupsPerQOS = nil + } + out.ContainerRuntime = in.ContainerRuntime + out.RemoteRuntimeEndpoint = in.RemoteRuntimeEndpoint + out.RemoteImageEndpoint = in.RemoteImageEndpoint + out.RuntimeRequestTimeout = in.RuntimeRequestTimeout + out.RktPath = in.RktPath + out.RktAPIEndpoint = in.RktAPIEndpoint + out.RktStage1Image = in.RktStage1Image + if in.LockFilePath != nil { + in, out := &in.LockFilePath, &out.LockFilePath + *out = new(string) + **out = **in + } else { + out.LockFilePath = nil + } + out.ExitOnLockContention = in.ExitOnLockContention + if in.ConfigureCBR0 != nil { + in, out := &in.ConfigureCBR0, &out.ConfigureCBR0 + *out = new(bool) + **out = **in + } else { + out.ConfigureCBR0 = nil + } + out.HairpinMode = in.HairpinMode + out.BabysitDaemons = in.BabysitDaemons + out.MaxPods = in.MaxPods + out.NvidiaGPUs = in.NvidiaGPUs + out.DockerExecHandlerName = in.DockerExecHandlerName + out.PodCIDR = in.PodCIDR + out.ResolverConfig = in.ResolverConfig + if in.CPUCFSQuota != nil { + in, out := &in.CPUCFSQuota, &out.CPUCFSQuota + *out = new(bool) + **out = **in + } else { + out.CPUCFSQuota = nil + } + if in.Containerized != nil { + in, out := &in.Containerized, &out.Containerized + *out = new(bool) + **out = **in + } else { + out.Containerized = nil + } + out.MaxOpenFiles = in.MaxOpenFiles + if in.ReconcileCIDR != nil { + in, out := &in.ReconcileCIDR, &out.ReconcileCIDR + *out = new(bool) + **out = **in + } else { + out.ReconcileCIDR = nil + } + if in.RegisterSchedulable != nil { + in, out := &in.RegisterSchedulable, &out.RegisterSchedulable + *out = new(bool) + **out = **in + } else { + out.RegisterSchedulable = nil + } + out.ContentType = in.ContentType + if in.KubeAPIQPS != nil { + in, out := &in.KubeAPIQPS, &out.KubeAPIQPS + *out = new(int32) + **out = **in + } else { + out.KubeAPIQPS = nil + } + out.KubeAPIBurst = in.KubeAPIBurst + if in.SerializeImagePulls != nil { + in, out := &in.SerializeImagePulls, &out.SerializeImagePulls + *out = new(bool) + **out = **in + } else { + out.SerializeImagePulls = nil + } + out.ExperimentalFlannelOverlay = in.ExperimentalFlannelOverlay + out.OutOfDiskTransitionFrequency = in.OutOfDiskTransitionFrequency + out.NodeIP = in.NodeIP + if in.NodeLabels != nil { + in, out := &in.NodeLabels, &out.NodeLabels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.NodeLabels = nil + } + out.NonMasqueradeCIDR = in.NonMasqueradeCIDR + out.EnableCustomMetrics = in.EnableCustomMetrics + if in.EvictionHard != nil { + in, out := &in.EvictionHard, &out.EvictionHard + *out = new(string) + **out = **in + } else { + out.EvictionHard = nil + } + out.EvictionSoft = in.EvictionSoft + out.EvictionSoftGracePeriod = in.EvictionSoftGracePeriod + out.EvictionPressureTransitionPeriod = in.EvictionPressureTransitionPeriod + out.EvictionMaxPodGracePeriod = in.EvictionMaxPodGracePeriod + out.EvictionMinimumReclaim = in.EvictionMinimumReclaim + out.PodsPerCore = in.PodsPerCore + if in.EnableControllerAttachDetach != nil { + in, out := &in.EnableControllerAttachDetach, &out.EnableControllerAttachDetach + *out = new(bool) + **out = **in + } else { + out.EnableControllerAttachDetach = nil + } + if in.SystemReserved != nil { + in, out := &in.SystemReserved, &out.SystemReserved + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.SystemReserved = nil + } + if in.KubeReserved != nil { + in, out := &in.KubeReserved, &out.KubeReserved + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.KubeReserved = nil + } + out.ProtectKernelDefaults = in.ProtectKernelDefaults + if in.MakeIPTablesUtilChains != nil { + in, out := &in.MakeIPTablesUtilChains, &out.MakeIPTablesUtilChains + *out = new(bool) + **out = **in + } else { + out.MakeIPTablesUtilChains = nil + } + if in.IPTablesMasqueradeBit != nil { + in, out := &in.IPTablesMasqueradeBit, &out.IPTablesMasqueradeBit + *out = new(int32) + **out = **in + } else { + out.IPTablesMasqueradeBit = nil + } + if in.IPTablesDropBit != nil { + in, out := &in.IPTablesDropBit, &out.IPTablesDropBit + *out = new(int32) + **out = **in + } else { + out.IPTablesDropBit = nil + } + if in.AllowedUnsafeSysctls != nil { + in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.AllowedUnsafeSysctls = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_LeaderElectionConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LeaderElectionConfiguration) + out := out.(*LeaderElectionConfiguration) + if in.LeaderElect != nil { + in, out := &in.LeaderElect, &out.LeaderElect + *out = new(bool) + **out = **in + } else { + out.LeaderElect = nil + } + out.LeaseDuration = in.LeaseDuration + out.RenewDeadline = in.RenewDeadline + out.RetryPeriod = in.RetryPeriod + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/zz_generated.deepcopy.go new file mode 100644 index 00000000..7f3dd1b1 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/componentconfig/zz_generated.deepcopy.go @@ -0,0 +1,403 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package componentconfig + +import ( + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + config "k8s.io/kubernetes/pkg/util/config" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_IPVar, InType: reflect.TypeOf(&IPVar{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_KubeControllerManagerConfiguration, InType: reflect.TypeOf(&KubeControllerManagerConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_KubeProxyConfiguration, InType: reflect.TypeOf(&KubeProxyConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_KubeSchedulerConfiguration, InType: reflect.TypeOf(&KubeSchedulerConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_KubeletConfiguration, InType: reflect.TypeOf(&KubeletConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_LeaderElectionConfiguration, InType: reflect.TypeOf(&LeaderElectionConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_PersistentVolumeRecyclerConfiguration, InType: reflect.TypeOf(&PersistentVolumeRecyclerConfiguration{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_PortRangeVar, InType: reflect.TypeOf(&PortRangeVar{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_componentconfig_VolumeConfiguration, InType: reflect.TypeOf(&VolumeConfiguration{})}, + ) +} + +func DeepCopy_componentconfig_IPVar(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IPVar) + out := out.(*IPVar) + if in.Val != nil { + in, out := &in.Val, &out.Val + *out = new(string) + **out = **in + } else { + out.Val = nil + } + return nil + } +} + +func DeepCopy_componentconfig_KubeControllerManagerConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KubeControllerManagerConfiguration) + out := out.(*KubeControllerManagerConfiguration) + out.TypeMeta = in.TypeMeta + out.Port = in.Port + out.Address = in.Address + out.CloudProvider = in.CloudProvider + out.CloudConfigFile = in.CloudConfigFile + out.ConcurrentEndpointSyncs = in.ConcurrentEndpointSyncs + out.ConcurrentRSSyncs = in.ConcurrentRSSyncs + out.ConcurrentRCSyncs = in.ConcurrentRCSyncs + out.ConcurrentServiceSyncs = in.ConcurrentServiceSyncs + out.ConcurrentResourceQuotaSyncs = in.ConcurrentResourceQuotaSyncs + out.ConcurrentDeploymentSyncs = in.ConcurrentDeploymentSyncs + out.ConcurrentDaemonSetSyncs = in.ConcurrentDaemonSetSyncs + out.ConcurrentJobSyncs = in.ConcurrentJobSyncs + out.ConcurrentNamespaceSyncs = in.ConcurrentNamespaceSyncs + out.ConcurrentSATokenSyncs = in.ConcurrentSATokenSyncs + out.LookupCacheSizeForRC = in.LookupCacheSizeForRC + out.LookupCacheSizeForRS = in.LookupCacheSizeForRS + out.LookupCacheSizeForDaemonSet = in.LookupCacheSizeForDaemonSet + out.ServiceSyncPeriod = in.ServiceSyncPeriod + out.NodeSyncPeriod = in.NodeSyncPeriod + out.ResourceQuotaSyncPeriod = in.ResourceQuotaSyncPeriod + out.NamespaceSyncPeriod = in.NamespaceSyncPeriod + out.PVClaimBinderSyncPeriod = in.PVClaimBinderSyncPeriod + out.MinResyncPeriod = in.MinResyncPeriod + out.TerminatedPodGCThreshold = in.TerminatedPodGCThreshold + out.HorizontalPodAutoscalerSyncPeriod = in.HorizontalPodAutoscalerSyncPeriod + out.DeploymentControllerSyncPeriod = in.DeploymentControllerSyncPeriod + out.PodEvictionTimeout = in.PodEvictionTimeout + out.DeletingPodsQps = in.DeletingPodsQps + out.DeletingPodsBurst = in.DeletingPodsBurst + out.NodeMonitorGracePeriod = in.NodeMonitorGracePeriod + out.RegisterRetryCount = in.RegisterRetryCount + out.NodeStartupGracePeriod = in.NodeStartupGracePeriod + out.NodeMonitorPeriod = in.NodeMonitorPeriod + out.ServiceAccountKeyFile = in.ServiceAccountKeyFile + out.ClusterSigningCertFile = in.ClusterSigningCertFile + out.ClusterSigningKeyFile = in.ClusterSigningKeyFile + out.ApproveAllKubeletCSRsForGroup = in.ApproveAllKubeletCSRsForGroup + out.EnableProfiling = in.EnableProfiling + out.ClusterName = in.ClusterName + out.ClusterCIDR = in.ClusterCIDR + out.ServiceCIDR = in.ServiceCIDR + out.NodeCIDRMaskSize = in.NodeCIDRMaskSize + out.AllocateNodeCIDRs = in.AllocateNodeCIDRs + out.ConfigureCloudRoutes = in.ConfigureCloudRoutes + out.RootCAFile = in.RootCAFile + out.ContentType = in.ContentType + out.KubeAPIQPS = in.KubeAPIQPS + out.KubeAPIBurst = in.KubeAPIBurst + out.LeaderElection = in.LeaderElection + out.VolumeConfiguration = in.VolumeConfiguration + out.ControllerStartInterval = in.ControllerStartInterval + out.EnableGarbageCollector = in.EnableGarbageCollector + out.ConcurrentGCSyncs = in.ConcurrentGCSyncs + out.NodeEvictionRate = in.NodeEvictionRate + out.SecondaryNodeEvictionRate = in.SecondaryNodeEvictionRate + out.LargeClusterSizeThreshold = in.LargeClusterSizeThreshold + out.UnhealthyZoneThreshold = in.UnhealthyZoneThreshold + return nil + } +} + +func DeepCopy_componentconfig_KubeProxyConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KubeProxyConfiguration) + out := out.(*KubeProxyConfiguration) + out.TypeMeta = in.TypeMeta + out.BindAddress = in.BindAddress + out.ClusterCIDR = in.ClusterCIDR + out.HealthzBindAddress = in.HealthzBindAddress + out.HealthzPort = in.HealthzPort + out.HostnameOverride = in.HostnameOverride + if in.IPTablesMasqueradeBit != nil { + in, out := &in.IPTablesMasqueradeBit, &out.IPTablesMasqueradeBit + *out = new(int32) + **out = **in + } else { + out.IPTablesMasqueradeBit = nil + } + out.IPTablesSyncPeriod = in.IPTablesSyncPeriod + out.KubeconfigPath = in.KubeconfigPath + out.MasqueradeAll = in.MasqueradeAll + out.Master = in.Master + if in.OOMScoreAdj != nil { + in, out := &in.OOMScoreAdj, &out.OOMScoreAdj + *out = new(int32) + **out = **in + } else { + out.OOMScoreAdj = nil + } + out.Mode = in.Mode + out.PortRange = in.PortRange + out.ResourceContainer = in.ResourceContainer + out.UDPIdleTimeout = in.UDPIdleTimeout + out.ConntrackMax = in.ConntrackMax + out.ConntrackMaxPerCore = in.ConntrackMaxPerCore + out.ConntrackTCPEstablishedTimeout = in.ConntrackTCPEstablishedTimeout + return nil + } +} + +func DeepCopy_componentconfig_KubeSchedulerConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KubeSchedulerConfiguration) + out := out.(*KubeSchedulerConfiguration) + out.TypeMeta = in.TypeMeta + out.Port = in.Port + out.Address = in.Address + out.AlgorithmProvider = in.AlgorithmProvider + out.PolicyConfigFile = in.PolicyConfigFile + out.EnableProfiling = in.EnableProfiling + out.ContentType = in.ContentType + out.KubeAPIQPS = in.KubeAPIQPS + out.KubeAPIBurst = in.KubeAPIBurst + out.SchedulerName = in.SchedulerName + out.HardPodAffinitySymmetricWeight = in.HardPodAffinitySymmetricWeight + out.FailureDomains = in.FailureDomains + out.LeaderElection = in.LeaderElection + return nil + } +} + +func DeepCopy_componentconfig_KubeletConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*KubeletConfiguration) + out := out.(*KubeletConfiguration) + out.TypeMeta = in.TypeMeta + out.PodManifestPath = in.PodManifestPath + out.SyncFrequency = in.SyncFrequency + out.FileCheckFrequency = in.FileCheckFrequency + out.HTTPCheckFrequency = in.HTTPCheckFrequency + out.ManifestURL = in.ManifestURL + out.ManifestURLHeader = in.ManifestURLHeader + out.EnableServer = in.EnableServer + out.Address = in.Address + out.Port = in.Port + out.ReadOnlyPort = in.ReadOnlyPort + out.TLSCertFile = in.TLSCertFile + out.TLSPrivateKeyFile = in.TLSPrivateKeyFile + out.CertDirectory = in.CertDirectory + out.HostnameOverride = in.HostnameOverride + out.PodInfraContainerImage = in.PodInfraContainerImage + out.DockerEndpoint = in.DockerEndpoint + out.RootDirectory = in.RootDirectory + out.SeccompProfileRoot = in.SeccompProfileRoot + out.AllowPrivileged = in.AllowPrivileged + if in.HostNetworkSources != nil { + in, out := &in.HostNetworkSources, &out.HostNetworkSources + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.HostNetworkSources = nil + } + if in.HostPIDSources != nil { + in, out := &in.HostPIDSources, &out.HostPIDSources + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.HostPIDSources = nil + } + if in.HostIPCSources != nil { + in, out := &in.HostIPCSources, &out.HostIPCSources + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.HostIPCSources = nil + } + out.RegistryPullQPS = in.RegistryPullQPS + out.RegistryBurst = in.RegistryBurst + out.EventRecordQPS = in.EventRecordQPS + out.EventBurst = in.EventBurst + out.EnableDebuggingHandlers = in.EnableDebuggingHandlers + out.MinimumGCAge = in.MinimumGCAge + out.MaxPerPodContainerCount = in.MaxPerPodContainerCount + out.MaxContainerCount = in.MaxContainerCount + out.CAdvisorPort = in.CAdvisorPort + out.HealthzPort = in.HealthzPort + out.HealthzBindAddress = in.HealthzBindAddress + out.OOMScoreAdj = in.OOMScoreAdj + out.RegisterNode = in.RegisterNode + out.ClusterDomain = in.ClusterDomain + out.MasterServiceNamespace = in.MasterServiceNamespace + out.ClusterDNS = in.ClusterDNS + out.StreamingConnectionIdleTimeout = in.StreamingConnectionIdleTimeout + out.NodeStatusUpdateFrequency = in.NodeStatusUpdateFrequency + out.ImageMinimumGCAge = in.ImageMinimumGCAge + out.ImageGCHighThresholdPercent = in.ImageGCHighThresholdPercent + out.ImageGCLowThresholdPercent = in.ImageGCLowThresholdPercent + out.LowDiskSpaceThresholdMB = in.LowDiskSpaceThresholdMB + out.VolumeStatsAggPeriod = in.VolumeStatsAggPeriod + out.NetworkPluginName = in.NetworkPluginName + out.NetworkPluginMTU = in.NetworkPluginMTU + out.NetworkPluginDir = in.NetworkPluginDir + out.VolumePluginDir = in.VolumePluginDir + out.CloudProvider = in.CloudProvider + out.CloudConfigFile = in.CloudConfigFile + out.KubeletCgroups = in.KubeletCgroups + out.CgroupsPerQOS = in.CgroupsPerQOS + out.RuntimeCgroups = in.RuntimeCgroups + out.SystemCgroups = in.SystemCgroups + out.CgroupRoot = in.CgroupRoot + out.ContainerRuntime = in.ContainerRuntime + out.RemoteRuntimeEndpoint = in.RemoteRuntimeEndpoint + out.RemoteImageEndpoint = in.RemoteImageEndpoint + out.RuntimeRequestTimeout = in.RuntimeRequestTimeout + out.RktPath = in.RktPath + out.RktAPIEndpoint = in.RktAPIEndpoint + out.RktStage1Image = in.RktStage1Image + out.LockFilePath = in.LockFilePath + out.ExitOnLockContention = in.ExitOnLockContention + out.ConfigureCBR0 = in.ConfigureCBR0 + out.HairpinMode = in.HairpinMode + out.BabysitDaemons = in.BabysitDaemons + out.MaxPods = in.MaxPods + out.NvidiaGPUs = in.NvidiaGPUs + out.DockerExecHandlerName = in.DockerExecHandlerName + out.PodCIDR = in.PodCIDR + out.ResolverConfig = in.ResolverConfig + out.CPUCFSQuota = in.CPUCFSQuota + out.Containerized = in.Containerized + out.MaxOpenFiles = in.MaxOpenFiles + out.ReconcileCIDR = in.ReconcileCIDR + out.RegisterSchedulable = in.RegisterSchedulable + out.ContentType = in.ContentType + out.KubeAPIQPS = in.KubeAPIQPS + out.KubeAPIBurst = in.KubeAPIBurst + out.SerializeImagePulls = in.SerializeImagePulls + out.ExperimentalFlannelOverlay = in.ExperimentalFlannelOverlay + out.OutOfDiskTransitionFrequency = in.OutOfDiskTransitionFrequency + out.NodeIP = in.NodeIP + if in.NodeLabels != nil { + in, out := &in.NodeLabels, &out.NodeLabels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.NodeLabels = nil + } + out.NonMasqueradeCIDR = in.NonMasqueradeCIDR + out.EnableCustomMetrics = in.EnableCustomMetrics + out.EvictionHard = in.EvictionHard + out.EvictionSoft = in.EvictionSoft + out.EvictionSoftGracePeriod = in.EvictionSoftGracePeriod + out.EvictionPressureTransitionPeriod = in.EvictionPressureTransitionPeriod + out.EvictionMaxPodGracePeriod = in.EvictionMaxPodGracePeriod + out.EvictionMinimumReclaim = in.EvictionMinimumReclaim + out.PodsPerCore = in.PodsPerCore + out.EnableControllerAttachDetach = in.EnableControllerAttachDetach + if in.SystemReserved != nil { + in, out := &in.SystemReserved, &out.SystemReserved + *out = make(config.ConfigurationMap) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.SystemReserved = nil + } + if in.KubeReserved != nil { + in, out := &in.KubeReserved, &out.KubeReserved + *out = make(config.ConfigurationMap) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.KubeReserved = nil + } + out.ProtectKernelDefaults = in.ProtectKernelDefaults + out.MakeIPTablesUtilChains = in.MakeIPTablesUtilChains + out.IPTablesMasqueradeBit = in.IPTablesMasqueradeBit + out.IPTablesDropBit = in.IPTablesDropBit + if in.AllowedUnsafeSysctls != nil { + in, out := &in.AllowedUnsafeSysctls, &out.AllowedUnsafeSysctls + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.AllowedUnsafeSysctls = nil + } + return nil + } +} + +func DeepCopy_componentconfig_LeaderElectionConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LeaderElectionConfiguration) + out := out.(*LeaderElectionConfiguration) + out.LeaderElect = in.LeaderElect + out.LeaseDuration = in.LeaseDuration + out.RenewDeadline = in.RenewDeadline + out.RetryPeriod = in.RetryPeriod + return nil + } +} + +func DeepCopy_componentconfig_PersistentVolumeRecyclerConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PersistentVolumeRecyclerConfiguration) + out := out.(*PersistentVolumeRecyclerConfiguration) + out.MaximumRetry = in.MaximumRetry + out.MinimumTimeoutNFS = in.MinimumTimeoutNFS + out.PodTemplateFilePathNFS = in.PodTemplateFilePathNFS + out.IncrementTimeoutNFS = in.IncrementTimeoutNFS + out.PodTemplateFilePathHostPath = in.PodTemplateFilePathHostPath + out.MinimumTimeoutHostPath = in.MinimumTimeoutHostPath + out.IncrementTimeoutHostPath = in.IncrementTimeoutHostPath + return nil + } +} + +func DeepCopy_componentconfig_PortRangeVar(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PortRangeVar) + out := out.(*PortRangeVar) + if in.Val != nil { + in, out := &in.Val, &out.Val + *out = new(string) + **out = **in + } else { + out.Val = nil + } + return nil + } +} + +func DeepCopy_componentconfig_VolumeConfiguration(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*VolumeConfiguration) + out := out.(*VolumeConfiguration) + out.EnableHostPathProvisioning = in.EnableHostPathProvisioning + out.EnableDynamicProvisioning = in.EnableDynamicProvisioning + out.PersistentVolumeRecyclerConfiguration = in.PersistentVolumeRecyclerConfiguration + out.FlexVolumePluginDir = in.FlexVolumePluginDir + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/deep_copy_generated.go deleted file mode 100644 index 118d478c..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/deep_copy_generated.go +++ /dev/null @@ -1,958 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package extensions - -import ( - api "k8s.io/kubernetes/pkg/api" - resource "k8s.io/kubernetes/pkg/api/resource" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_extensions_APIVersion, - DeepCopy_extensions_CustomMetricCurrentStatus, - DeepCopy_extensions_CustomMetricCurrentStatusList, - DeepCopy_extensions_CustomMetricTarget, - DeepCopy_extensions_CustomMetricTargetList, - DeepCopy_extensions_DaemonSet, - DeepCopy_extensions_DaemonSetList, - DeepCopy_extensions_DaemonSetSpec, - DeepCopy_extensions_DaemonSetStatus, - DeepCopy_extensions_Deployment, - DeepCopy_extensions_DeploymentList, - DeepCopy_extensions_DeploymentRollback, - DeepCopy_extensions_DeploymentSpec, - DeepCopy_extensions_DeploymentStatus, - DeepCopy_extensions_DeploymentStrategy, - DeepCopy_extensions_FSGroupStrategyOptions, - DeepCopy_extensions_HTTPIngressPath, - DeepCopy_extensions_HTTPIngressRuleValue, - DeepCopy_extensions_HostPortRange, - DeepCopy_extensions_IDRange, - DeepCopy_extensions_Ingress, - DeepCopy_extensions_IngressBackend, - DeepCopy_extensions_IngressList, - DeepCopy_extensions_IngressRule, - DeepCopy_extensions_IngressRuleValue, - DeepCopy_extensions_IngressSpec, - DeepCopy_extensions_IngressStatus, - DeepCopy_extensions_IngressTLS, - DeepCopy_extensions_NetworkPolicy, - DeepCopy_extensions_NetworkPolicyIngressRule, - DeepCopy_extensions_NetworkPolicyList, - DeepCopy_extensions_NetworkPolicyPeer, - DeepCopy_extensions_NetworkPolicyPort, - DeepCopy_extensions_NetworkPolicySpec, - DeepCopy_extensions_PodSecurityPolicy, - DeepCopy_extensions_PodSecurityPolicyList, - DeepCopy_extensions_PodSecurityPolicySpec, - DeepCopy_extensions_ReplicaSet, - DeepCopy_extensions_ReplicaSetList, - DeepCopy_extensions_ReplicaSetSpec, - DeepCopy_extensions_ReplicaSetStatus, - DeepCopy_extensions_ReplicationControllerDummy, - DeepCopy_extensions_RollbackConfig, - DeepCopy_extensions_RollingUpdateDeployment, - DeepCopy_extensions_RunAsUserStrategyOptions, - DeepCopy_extensions_SELinuxStrategyOptions, - DeepCopy_extensions_Scale, - DeepCopy_extensions_ScaleSpec, - DeepCopy_extensions_ScaleStatus, - DeepCopy_extensions_SupplementalGroupsStrategyOptions, - DeepCopy_extensions_ThirdPartyResource, - DeepCopy_extensions_ThirdPartyResourceData, - DeepCopy_extensions_ThirdPartyResourceDataList, - DeepCopy_extensions_ThirdPartyResourceList, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_extensions_APIVersion(in APIVersion, out *APIVersion, c *conversion.Cloner) error { - out.Name = in.Name - return nil -} - -func DeepCopy_extensions_CustomMetricCurrentStatus(in CustomMetricCurrentStatus, out *CustomMetricCurrentStatus, c *conversion.Cloner) error { - out.Name = in.Name - if err := resource.DeepCopy_resource_Quantity(in.CurrentValue, &out.CurrentValue, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_CustomMetricCurrentStatusList(in CustomMetricCurrentStatusList, out *CustomMetricCurrentStatusList, c *conversion.Cloner) error { - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]CustomMetricCurrentStatus, len(in)) - for i := range in { - if err := DeepCopy_extensions_CustomMetricCurrentStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_CustomMetricTarget(in CustomMetricTarget, out *CustomMetricTarget, c *conversion.Cloner) error { - out.Name = in.Name - if err := resource.DeepCopy_resource_Quantity(in.TargetValue, &out.TargetValue, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_CustomMetricTargetList(in CustomMetricTargetList, out *CustomMetricTargetList, c *conversion.Cloner) error { - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]CustomMetricTarget, len(in)) - for i := range in { - if err := DeepCopy_extensions_CustomMetricTarget(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_DaemonSet(in DaemonSet, out *DaemonSet, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_extensions_DaemonSetSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_extensions_DaemonSetStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_DaemonSetList(in DaemonSetList, out *DaemonSetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]DaemonSet, len(in)) - for i := range in { - if err := DeepCopy_extensions_DaemonSet(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_DaemonSetSpec(in DaemonSetSpec, out *DaemonSetSpec, c *conversion.Cloner) error { - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := api.DeepCopy_api_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_DaemonSetStatus(in DaemonSetStatus, out *DaemonSetStatus, c *conversion.Cloner) error { - out.CurrentNumberScheduled = in.CurrentNumberScheduled - out.NumberMisscheduled = in.NumberMisscheduled - out.DesiredNumberScheduled = in.DesiredNumberScheduled - return nil -} - -func DeepCopy_extensions_Deployment(in Deployment, out *Deployment, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_extensions_DeploymentSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_extensions_DeploymentStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_DeploymentList(in DeploymentList, out *DeploymentList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Deployment, len(in)) - for i := range in { - if err := DeepCopy_extensions_Deployment(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_DeploymentRollback(in DeploymentRollback, out *DeploymentRollback, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Name = in.Name - if in.UpdatedAnnotations != nil { - in, out := in.UpdatedAnnotations, &out.UpdatedAnnotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.UpdatedAnnotations = nil - } - if err := DeepCopy_extensions_RollbackConfig(in.RollbackTo, &out.RollbackTo, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_DeploymentSpec(in DeploymentSpec, out *DeploymentSpec, c *conversion.Cloner) error { - out.Replicas = in.Replicas - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := api.DeepCopy_api_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - if err := DeepCopy_extensions_DeploymentStrategy(in.Strategy, &out.Strategy, c); err != nil { - return err - } - out.MinReadySeconds = in.MinReadySeconds - if in.RevisionHistoryLimit != nil { - in, out := in.RevisionHistoryLimit, &out.RevisionHistoryLimit - *out = new(int32) - **out = *in - } else { - out.RevisionHistoryLimit = nil - } - out.Paused = in.Paused - if in.RollbackTo != nil { - in, out := in.RollbackTo, &out.RollbackTo - *out = new(RollbackConfig) - if err := DeepCopy_extensions_RollbackConfig(*in, *out, c); err != nil { - return err - } - } else { - out.RollbackTo = nil - } - return nil -} - -func DeepCopy_extensions_DeploymentStatus(in DeploymentStatus, out *DeploymentStatus, c *conversion.Cloner) error { - out.ObservedGeneration = in.ObservedGeneration - out.Replicas = in.Replicas - out.UpdatedReplicas = in.UpdatedReplicas - out.AvailableReplicas = in.AvailableReplicas - out.UnavailableReplicas = in.UnavailableReplicas - return nil -} - -func DeepCopy_extensions_DeploymentStrategy(in DeploymentStrategy, out *DeploymentStrategy, c *conversion.Cloner) error { - out.Type = in.Type - if in.RollingUpdate != nil { - in, out := in.RollingUpdate, &out.RollingUpdate - *out = new(RollingUpdateDeployment) - if err := DeepCopy_extensions_RollingUpdateDeployment(*in, *out, c); err != nil { - return err - } - } else { - out.RollingUpdate = nil - } - return nil -} - -func DeepCopy_extensions_FSGroupStrategyOptions(in FSGroupStrategyOptions, out *FSGroupStrategyOptions, c *conversion.Cloner) error { - out.Rule = in.Rule - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_extensions_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_extensions_HTTPIngressPath(in HTTPIngressPath, out *HTTPIngressPath, c *conversion.Cloner) error { - out.Path = in.Path - if err := DeepCopy_extensions_IngressBackend(in.Backend, &out.Backend, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_HTTPIngressRuleValue(in HTTPIngressRuleValue, out *HTTPIngressRuleValue, c *conversion.Cloner) error { - if in.Paths != nil { - in, out := in.Paths, &out.Paths - *out = make([]HTTPIngressPath, len(in)) - for i := range in { - if err := DeepCopy_extensions_HTTPIngressPath(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Paths = nil - } - return nil -} - -func DeepCopy_extensions_HostPortRange(in HostPortRange, out *HostPortRange, c *conversion.Cloner) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -func DeepCopy_extensions_IDRange(in IDRange, out *IDRange, c *conversion.Cloner) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -func DeepCopy_extensions_Ingress(in Ingress, out *Ingress, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_extensions_IngressSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_extensions_IngressStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_IngressBackend(in IngressBackend, out *IngressBackend, c *conversion.Cloner) error { - out.ServiceName = in.ServiceName - if err := intstr.DeepCopy_intstr_IntOrString(in.ServicePort, &out.ServicePort, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_IngressList(in IngressList, out *IngressList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Ingress, len(in)) - for i := range in { - if err := DeepCopy_extensions_Ingress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_IngressRule(in IngressRule, out *IngressRule, c *conversion.Cloner) error { - out.Host = in.Host - if err := DeepCopy_extensions_IngressRuleValue(in.IngressRuleValue, &out.IngressRuleValue, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_IngressRuleValue(in IngressRuleValue, out *IngressRuleValue, c *conversion.Cloner) error { - if in.HTTP != nil { - in, out := in.HTTP, &out.HTTP - *out = new(HTTPIngressRuleValue) - if err := DeepCopy_extensions_HTTPIngressRuleValue(*in, *out, c); err != nil { - return err - } - } else { - out.HTTP = nil - } - return nil -} - -func DeepCopy_extensions_IngressSpec(in IngressSpec, out *IngressSpec, c *conversion.Cloner) error { - if in.Backend != nil { - in, out := in.Backend, &out.Backend - *out = new(IngressBackend) - if err := DeepCopy_extensions_IngressBackend(*in, *out, c); err != nil { - return err - } - } else { - out.Backend = nil - } - if in.TLS != nil { - in, out := in.TLS, &out.TLS - *out = make([]IngressTLS, len(in)) - for i := range in { - if err := DeepCopy_extensions_IngressTLS(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.TLS = nil - } - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]IngressRule, len(in)) - for i := range in { - if err := DeepCopy_extensions_IngressRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - return nil -} - -func DeepCopy_extensions_IngressStatus(in IngressStatus, out *IngressStatus, c *conversion.Cloner) error { - if err := api.DeepCopy_api_LoadBalancerStatus(in.LoadBalancer, &out.LoadBalancer, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_IngressTLS(in IngressTLS, out *IngressTLS, c *conversion.Cloner) error { - if in.Hosts != nil { - in, out := in.Hosts, &out.Hosts - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Hosts = nil - } - out.SecretName = in.SecretName - return nil -} - -func DeepCopy_extensions_NetworkPolicy(in NetworkPolicy, out *NetworkPolicy, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_extensions_NetworkPolicySpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_NetworkPolicyIngressRule(in NetworkPolicyIngressRule, out *NetworkPolicyIngressRule, c *conversion.Cloner) error { - if in.Ports != nil { - in, out := in.Ports, &out.Ports - *out = make([]NetworkPolicyPort, len(in)) - for i := range in { - if err := DeepCopy_extensions_NetworkPolicyPort(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ports = nil - } - if in.From != nil { - in, out := in.From, &out.From - *out = make([]NetworkPolicyPeer, len(in)) - for i := range in { - if err := DeepCopy_extensions_NetworkPolicyPeer(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.From = nil - } - return nil -} - -func DeepCopy_extensions_NetworkPolicyList(in NetworkPolicyList, out *NetworkPolicyList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]NetworkPolicy, len(in)) - for i := range in { - if err := DeepCopy_extensions_NetworkPolicy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_NetworkPolicyPeer(in NetworkPolicyPeer, out *NetworkPolicyPeer, c *conversion.Cloner) error { - if in.PodSelector != nil { - in, out := in.PodSelector, &out.PodSelector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.PodSelector = nil - } - if in.NamespaceSelector != nil { - in, out := in.NamespaceSelector, &out.NamespaceSelector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.NamespaceSelector = nil - } - return nil -} - -func DeepCopy_extensions_NetworkPolicyPort(in NetworkPolicyPort, out *NetworkPolicyPort, c *conversion.Cloner) error { - if in.Protocol != nil { - in, out := in.Protocol, &out.Protocol - *out = new(api.Protocol) - **out = *in - } else { - out.Protocol = nil - } - if in.Port != nil { - in, out := in.Port, &out.Port - *out = new(intstr.IntOrString) - if err := intstr.DeepCopy_intstr_IntOrString(*in, *out, c); err != nil { - return err - } - } else { - out.Port = nil - } - return nil -} - -func DeepCopy_extensions_NetworkPolicySpec(in NetworkPolicySpec, out *NetworkPolicySpec, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_LabelSelector(in.PodSelector, &out.PodSelector, c); err != nil { - return err - } - if in.Ingress != nil { - in, out := in.Ingress, &out.Ingress - *out = make([]NetworkPolicyIngressRule, len(in)) - for i := range in { - if err := DeepCopy_extensions_NetworkPolicyIngressRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ingress = nil - } - return nil -} - -func DeepCopy_extensions_PodSecurityPolicy(in PodSecurityPolicy, out *PodSecurityPolicy, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_extensions_PodSecurityPolicySpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_PodSecurityPolicyList(in PodSecurityPolicyList, out *PodSecurityPolicyList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PodSecurityPolicy, len(in)) - for i := range in { - if err := DeepCopy_extensions_PodSecurityPolicy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_PodSecurityPolicySpec(in PodSecurityPolicySpec, out *PodSecurityPolicySpec, c *conversion.Cloner) error { - out.Privileged = in.Privileged - if in.DefaultAddCapabilities != nil { - in, out := in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]api.Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.DefaultAddCapabilities = nil - } - if in.RequiredDropCapabilities != nil { - in, out := in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]api.Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.RequiredDropCapabilities = nil - } - if in.AllowedCapabilities != nil { - in, out := in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]api.Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AllowedCapabilities = nil - } - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make([]FSType, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Volumes = nil - } - out.HostNetwork = in.HostNetwork - if in.HostPorts != nil { - in, out := in.HostPorts, &out.HostPorts - *out = make([]HostPortRange, len(in)) - for i := range in { - if err := DeepCopy_extensions_HostPortRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.HostPorts = nil - } - out.HostPID = in.HostPID - out.HostIPC = in.HostIPC - if err := DeepCopy_extensions_SELinuxStrategyOptions(in.SELinux, &out.SELinux, c); err != nil { - return err - } - if err := DeepCopy_extensions_RunAsUserStrategyOptions(in.RunAsUser, &out.RunAsUser, c); err != nil { - return err - } - if err := DeepCopy_extensions_SupplementalGroupsStrategyOptions(in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { - return err - } - if err := DeepCopy_extensions_FSGroupStrategyOptions(in.FSGroup, &out.FSGroup, c); err != nil { - return err - } - out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem - return nil -} - -func DeepCopy_extensions_ReplicaSet(in ReplicaSet, out *ReplicaSet, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_extensions_ReplicaSetSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_extensions_ReplicaSetStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_ReplicaSetList(in ReplicaSetList, out *ReplicaSetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ReplicaSet, len(in)) - for i := range in { - if err := DeepCopy_extensions_ReplicaSet(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_ReplicaSetSpec(in ReplicaSetSpec, out *ReplicaSetSpec, c *conversion.Cloner) error { - out.Replicas = in.Replicas - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := api.DeepCopy_api_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_ReplicaSetStatus(in ReplicaSetStatus, out *ReplicaSetStatus, c *conversion.Cloner) error { - out.Replicas = in.Replicas - out.FullyLabeledReplicas = in.FullyLabeledReplicas - out.ObservedGeneration = in.ObservedGeneration - return nil -} - -func DeepCopy_extensions_ReplicationControllerDummy(in ReplicationControllerDummy, out *ReplicationControllerDummy, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_RollbackConfig(in RollbackConfig, out *RollbackConfig, c *conversion.Cloner) error { - out.Revision = in.Revision - return nil -} - -func DeepCopy_extensions_RollingUpdateDeployment(in RollingUpdateDeployment, out *RollingUpdateDeployment, c *conversion.Cloner) error { - if err := intstr.DeepCopy_intstr_IntOrString(in.MaxUnavailable, &out.MaxUnavailable, c); err != nil { - return err - } - if err := intstr.DeepCopy_intstr_IntOrString(in.MaxSurge, &out.MaxSurge, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_RunAsUserStrategyOptions(in RunAsUserStrategyOptions, out *RunAsUserStrategyOptions, c *conversion.Cloner) error { - out.Rule = in.Rule - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_extensions_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_extensions_SELinuxStrategyOptions(in SELinuxStrategyOptions, out *SELinuxStrategyOptions, c *conversion.Cloner) error { - out.Rule = in.Rule - if in.SELinuxOptions != nil { - in, out := in.SELinuxOptions, &out.SELinuxOptions - *out = new(api.SELinuxOptions) - if err := api.DeepCopy_api_SELinuxOptions(*in, *out, c); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - return nil -} - -func DeepCopy_extensions_Scale(in Scale, out *Scale, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_extensions_ScaleSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_extensions_ScaleStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_extensions_ScaleSpec(in ScaleSpec, out *ScaleSpec, c *conversion.Cloner) error { - out.Replicas = in.Replicas - return nil -} - -func DeepCopy_extensions_ScaleStatus(in ScaleStatus, out *ScaleStatus, c *conversion.Cloner) error { - out.Replicas = in.Replicas - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - return nil -} - -func DeepCopy_extensions_SupplementalGroupsStrategyOptions(in SupplementalGroupsStrategyOptions, out *SupplementalGroupsStrategyOptions, c *conversion.Cloner) error { - out.Rule = in.Rule - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_extensions_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_extensions_ThirdPartyResource(in ThirdPartyResource, out *ThirdPartyResource, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.Description = in.Description - if in.Versions != nil { - in, out := in.Versions, &out.Versions - *out = make([]APIVersion, len(in)) - for i := range in { - if err := DeepCopy_extensions_APIVersion(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Versions = nil - } - return nil -} - -func DeepCopy_extensions_ThirdPartyResourceData(in ThirdPartyResourceData, out *ThirdPartyResourceData, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Data != nil { - in, out := in.Data, &out.Data - *out = make([]byte, len(in)) - copy(*out, in) - } else { - out.Data = nil - } - return nil -} - -func DeepCopy_extensions_ThirdPartyResourceDataList(in ThirdPartyResourceDataList, out *ThirdPartyResourceDataList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ThirdPartyResourceData, len(in)) - for i := range in { - if err := DeepCopy_extensions_ThirdPartyResourceData(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_extensions_ThirdPartyResourceList(in ThirdPartyResourceList, out *ThirdPartyResourceList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ThirdPartyResource, len(in)) - for i := range in { - if err := DeepCopy_extensions_ThirdPartyResource(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/doc.go new file mode 100644 index 00000000..2bbb71d0 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package extensions diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/helpers.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/helpers.go new file mode 100644 index 00000000..27d3e23a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/helpers.go @@ -0,0 +1,37 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package extensions + +import ( + "strings" +) + +// SysctlsFromPodSecurityPolicyAnnotation parses an annotation value of the key +// SysctlsSecurityPolocyAnnotationKey into a slice of sysctls. An empty slice +// is returned if annotation is the empty string. +func SysctlsFromPodSecurityPolicyAnnotation(annotation string) ([]string, error) { + if len(annotation) == 0 { + return []string{}, nil + } + + return strings.Split(annotation, ","), nil +} + +// PodAnnotationsFromSysctls creates an annotation value for a slice of Sysctls. +func PodAnnotationsFromSysctls(sysctls []string) string { + return strings.Join(sysctls, ",") +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/install/install.go index d88104ea..d7a6c523 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,8 +23,9 @@ import ( "github.com/golang/glog" + _ "k8s.io/kubernetes/pkg/api/install" // force extensions to be loaded after the main API + "k8s.io/kubernetes/pkg/api" - _ "k8s.io/kubernetes/pkg/api/install" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apimachinery" @@ -94,6 +95,7 @@ func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper rootScoped := sets.NewString( "PodSecurityPolicy", "ThirdPartyResource", + "StorageClass", ) ignoredKinds := sets.NewString() @@ -118,7 +120,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - extensions.AddToScheme(api.Scheme) + if err := extensions.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -127,7 +132,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1beta1.SchemeGroupVersion: - v1beta1.AddToScheme(api.Scheme) + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go index 1c5f6ba1..31fc20a8 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,23 +30,23 @@ const GroupName = "extensions" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { // TODO this gets cleaned up when the types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &Deployment{}, @@ -68,6 +68,7 @@ func addKnownTypes(scheme *runtime.Scheme) { &Ingress{}, &IngressList{}, &api.ListOptions{}, + &api.DeleteOptions{}, &ReplicaSet{}, &ReplicaSetList{}, &api.ExportOptions{}, @@ -76,4 +77,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &NetworkPolicy{}, &NetworkPolicyList{}, ) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go index 9db03ab7..5da89e9b 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -35,6 +35,13 @@ import ( "k8s.io/kubernetes/pkg/util/intstr" ) +const ( + // SysctlsPodSecurityPolicyAnnotationKey represents the key of a whitelist of + // allowed safe and unsafe sysctls in a pod spec. It's a comma-separated list of plain sysctl + // names or sysctl patterns (which end in *). The string "*" matches all sysctls. + SysctlsPodSecurityPolicyAnnotationKey string = "security.alpha.kubernetes.io/sysctls" +) + // describes the attributes of a scale subresource type ScaleSpec struct { // desired number of instances for the scaled object. @@ -47,22 +54,23 @@ type ScaleStatus struct { Replicas int32 `json:"replicas"` // label query over pods that should match the replicas count. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *unversioned.LabelSelector `json:"selector,omitempty"` } -// +genclient=true,noMethods=true +// +genclient=true +// +noMethods=true // represents a scaling request for a resource. type Scale struct { unversioned.TypeMeta `json:",inline"` - // Standard object metadata; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata. + // Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata. api.ObjectMeta `json:"metadata,omitempty"` - // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Spec ScaleSpec `json:"spec,omitempty"` - // current status of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only. Status ScaleStatus `json:"status,omitempty"` } @@ -94,7 +102,8 @@ type CustomMetricCurrentStatusList struct { Items []CustomMetricCurrentStatus `json:"items"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // A ThirdPartyResource is a generic representation of a resource, it is used by add-ons and plugins to add new resource // types to the API. It consists of one or more Versions of the api. @@ -330,14 +339,14 @@ type DaemonSetSpec struct { // Selector is a label query over pods that are managed by the daemon set. // Must match in order to be controlled. // If empty, defaulted to labels on Pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *unversioned.LabelSelector `json:"selector,omitempty"` // Template is the object that describes the pod that will be created. // The DaemonSet will create exactly one copy of this pod on every node // that matches the template's node selector (or on every node if no node // selector is specified). - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template Template api.PodTemplateSpec `json:"template"` // TODO(madhusudancs): Uncomment while implementing DaemonSet updates. @@ -384,18 +393,18 @@ type DaemonSetStatus struct { type DaemonSet struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata api.ObjectMeta `json:"metadata,omitempty"` // Spec defines the desired behavior of this daemon set. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec DaemonSetSpec `json:"spec,omitempty"` // Status is the current status of this daemon set. This data may be // out of date by some window of time. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status DaemonSetStatus `json:"status,omitempty"` } @@ -403,7 +412,7 @@ type DaemonSet struct { type DaemonSetList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty"` // Items is a list of daemon sets. @@ -413,7 +422,7 @@ type DaemonSetList struct { type ThirdPartyResourceDataList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty"` // Items is a list of third party objects Items []ThirdPartyResourceData `json:"items"` @@ -428,15 +437,15 @@ type ThirdPartyResourceDataList struct { type Ingress struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata api.ObjectMeta `json:"metadata,omitempty"` // Spec is the desired state of the Ingress. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec IngressSpec `json:"spec,omitempty"` // Status is the current state of the Ingress. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status IngressStatus `json:"status,omitempty"` } @@ -444,7 +453,7 @@ type Ingress struct { type IngressList struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty"` // Items is the list of Ingress. @@ -548,7 +557,7 @@ type HTTPIngressRuleValue struct { // HTTPIngressPath associates a path regex with a backend. Incoming urls matching // the path are forwarded to the backend. type HTTPIngressPath struct { - // Path is a extended POSIX regex as defined by IEEE Std 1003.1, + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, // (i.e this follows the egrep/unix syntax, not the perl syntax) // matched against the path of an incoming request. Currently it can // contain characters disallowed from the conventional "path" @@ -604,7 +613,7 @@ type ReplicaSetSpec struct { // Selector is a label query over pods that should match the replica count. // Must match in order to be controlled. // If empty, defaulted to labels on pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *unversioned.LabelSelector `json:"selector,omitempty"` // Template is the object that describes the pod that will be created if @@ -620,11 +629,15 @@ type ReplicaSetStatus struct { // The number of pods that have labels matching the labels of the pod template of the replicaset. FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty"` + // The number of ready replicas for this replica set. + ReadyReplicas int32 `json:"readyReplicas,omitempty"` + // ObservedGeneration is the most recent generation observed by the controller. ObservedGeneration int64 `json:"observedGeneration,omitempty"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // PodSecurityPolicy governs the ability to make requests that affect the SecurityContext // that will be applied to a pod and container. @@ -641,7 +654,7 @@ type PodSecurityPolicySpec struct { // Privileged determines if a pod can request to be run as privileged. Privileged bool `json:"privileged,omitempty"` // DefaultAddCapabilities is the default set of capabilities that will be added to the container - // unless the pod spec specifically drops the capability. You may not list a capabiility in both + // unless the pod spec specifically drops the capability. You may not list a capability in both // DefaultAddCapabilities and RequiredDropCapabilities. DefaultAddCapabilities []api.Capability `json:"defaultAddCapabilities,omitempty"` // RequiredDropCapabilities are the capabilities that will be dropped from the container. These @@ -711,6 +724,8 @@ var ( FC FSType = "fc" ConfigMap FSType = "configMap" VsphereVolume FSType = "vsphereVolume" + Quobyte FSType = "quobyte" + AzureDisk FSType = "azureDisk" All FSType = "*" ) @@ -719,7 +734,7 @@ type SELinuxStrategyOptions struct { // Rule is the strategy that will dictate the allowable labels that may be set. Rule SELinuxStrategy `json:"rule"` // seLinuxOptions required to run as; required for MustRunAs - // More info: http://releases.k8s.io/release-1.3/docs/design/security_context.md#security-context + // More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md#security-context SELinuxOptions *api.SELinuxOptions `json:"seLinuxOptions,omitempty"` } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/conversion.go index ad5c91c9..e9d23914 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ import ( "k8s.io/kubernetes/pkg/util/intstr" ) -func addConversionFuncs(scheme *runtime.Scheme) { +func addConversionFuncs(scheme *runtime.Scheme) error { // Add non-generated conversion functions err := scheme.AddConversionFuncs( Convert_extensions_ScaleStatus_To_v1beta1_ScaleStatus, @@ -53,12 +53,12 @@ func addConversionFuncs(scheme *runtime.Scheme) { Convert_v1beta1_JobSpec_To_batch_JobSpec, ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } // Add field label conversions for kinds having selectable nothing but ObjectMeta fields. - for _, kind := range []string{"DaemonSet", "Deployment", "Ingress"} { + for _, k := range []string{"DaemonSet", "Deployment", "Ingress"} { + kind := k // don't close over range variables err = api.Scheme.AddFieldLabelConversionFunc("extensions/v1beta1", kind, func(label, value string) (string, string, error) { switch label { @@ -67,14 +67,14 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label %q not supported for %q", label, kind) } - }) + }, + ) if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) + return err } } - err = api.Scheme.AddFieldLabelConversionFunc("extensions/v1beta1", "Job", + return api.Scheme.AddFieldLabelConversionFunc("extensions/v1beta1", "Job", func(label, value string) (string, string, error) { switch label { case "metadata.name", "metadata.namespace", "status.successful": @@ -82,11 +82,8 @@ func addConversionFuncs(scheme *runtime.Scheme) { default: return "", "", fmt.Errorf("field label not supported: %s", label) } - }) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } + }, + ) } func Convert_extensions_ScaleStatus_To_v1beta1_ScaleStatus(in *extensions.ScaleStatus, out *ScaleStatus, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/deep_copy_generated.go deleted file mode 100644 index 32debd19..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/deep_copy_generated.go +++ /dev/null @@ -1,1297 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1beta1 - -import ( - api "k8s.io/kubernetes/pkg/api" - resource "k8s.io/kubernetes/pkg/api/resource" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1beta1_APIVersion, - DeepCopy_v1beta1_CPUTargetUtilization, - DeepCopy_v1beta1_CustomMetricCurrentStatus, - DeepCopy_v1beta1_CustomMetricCurrentStatusList, - DeepCopy_v1beta1_CustomMetricTarget, - DeepCopy_v1beta1_CustomMetricTargetList, - DeepCopy_v1beta1_DaemonSet, - DeepCopy_v1beta1_DaemonSetList, - DeepCopy_v1beta1_DaemonSetSpec, - DeepCopy_v1beta1_DaemonSetStatus, - DeepCopy_v1beta1_Deployment, - DeepCopy_v1beta1_DeploymentList, - DeepCopy_v1beta1_DeploymentRollback, - DeepCopy_v1beta1_DeploymentSpec, - DeepCopy_v1beta1_DeploymentStatus, - DeepCopy_v1beta1_DeploymentStrategy, - DeepCopy_v1beta1_ExportOptions, - DeepCopy_v1beta1_FSGroupStrategyOptions, - DeepCopy_v1beta1_HTTPIngressPath, - DeepCopy_v1beta1_HTTPIngressRuleValue, - DeepCopy_v1beta1_HorizontalPodAutoscaler, - DeepCopy_v1beta1_HorizontalPodAutoscalerList, - DeepCopy_v1beta1_HorizontalPodAutoscalerSpec, - DeepCopy_v1beta1_HorizontalPodAutoscalerStatus, - DeepCopy_v1beta1_HostPortRange, - DeepCopy_v1beta1_IDRange, - DeepCopy_v1beta1_Ingress, - DeepCopy_v1beta1_IngressBackend, - DeepCopy_v1beta1_IngressList, - DeepCopy_v1beta1_IngressRule, - DeepCopy_v1beta1_IngressRuleValue, - DeepCopy_v1beta1_IngressSpec, - DeepCopy_v1beta1_IngressStatus, - DeepCopy_v1beta1_IngressTLS, - DeepCopy_v1beta1_Job, - DeepCopy_v1beta1_JobCondition, - DeepCopy_v1beta1_JobList, - DeepCopy_v1beta1_JobSpec, - DeepCopy_v1beta1_JobStatus, - DeepCopy_v1beta1_LabelSelector, - DeepCopy_v1beta1_LabelSelectorRequirement, - DeepCopy_v1beta1_ListOptions, - DeepCopy_v1beta1_NetworkPolicy, - DeepCopy_v1beta1_NetworkPolicyIngressRule, - DeepCopy_v1beta1_NetworkPolicyList, - DeepCopy_v1beta1_NetworkPolicyPeer, - DeepCopy_v1beta1_NetworkPolicyPort, - DeepCopy_v1beta1_NetworkPolicySpec, - DeepCopy_v1beta1_PodSecurityPolicy, - DeepCopy_v1beta1_PodSecurityPolicyList, - DeepCopy_v1beta1_PodSecurityPolicySpec, - DeepCopy_v1beta1_ReplicaSet, - DeepCopy_v1beta1_ReplicaSetList, - DeepCopy_v1beta1_ReplicaSetSpec, - DeepCopy_v1beta1_ReplicaSetStatus, - DeepCopy_v1beta1_ReplicationControllerDummy, - DeepCopy_v1beta1_RollbackConfig, - DeepCopy_v1beta1_RollingUpdateDeployment, - DeepCopy_v1beta1_RunAsUserStrategyOptions, - DeepCopy_v1beta1_SELinuxStrategyOptions, - DeepCopy_v1beta1_Scale, - DeepCopy_v1beta1_ScaleSpec, - DeepCopy_v1beta1_ScaleStatus, - DeepCopy_v1beta1_SubresourceReference, - DeepCopy_v1beta1_SupplementalGroupsStrategyOptions, - DeepCopy_v1beta1_ThirdPartyResource, - DeepCopy_v1beta1_ThirdPartyResourceData, - DeepCopy_v1beta1_ThirdPartyResourceDataList, - DeepCopy_v1beta1_ThirdPartyResourceList, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1beta1_APIVersion(in APIVersion, out *APIVersion, c *conversion.Cloner) error { - out.Name = in.Name - return nil -} - -func DeepCopy_v1beta1_CPUTargetUtilization(in CPUTargetUtilization, out *CPUTargetUtilization, c *conversion.Cloner) error { - out.TargetPercentage = in.TargetPercentage - return nil -} - -func DeepCopy_v1beta1_CustomMetricCurrentStatus(in CustomMetricCurrentStatus, out *CustomMetricCurrentStatus, c *conversion.Cloner) error { - out.Name = in.Name - if err := resource.DeepCopy_resource_Quantity(in.CurrentValue, &out.CurrentValue, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_CustomMetricCurrentStatusList(in CustomMetricCurrentStatusList, out *CustomMetricCurrentStatusList, c *conversion.Cloner) error { - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]CustomMetricCurrentStatus, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_CustomMetricCurrentStatus(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_CustomMetricTarget(in CustomMetricTarget, out *CustomMetricTarget, c *conversion.Cloner) error { - out.Name = in.Name - if err := resource.DeepCopy_resource_Quantity(in.TargetValue, &out.TargetValue, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_CustomMetricTargetList(in CustomMetricTargetList, out *CustomMetricTargetList, c *conversion.Cloner) error { - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]CustomMetricTarget, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_CustomMetricTarget(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_DaemonSet(in DaemonSet, out *DaemonSet, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_DaemonSetSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_DaemonSetStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_DaemonSetList(in DaemonSetList, out *DaemonSetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]DaemonSet, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_DaemonSet(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_DaemonSetSpec(in DaemonSetSpec, out *DaemonSetSpec, c *conversion.Cloner) error { - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(LabelSelector) - if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := v1.DeepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_DaemonSetStatus(in DaemonSetStatus, out *DaemonSetStatus, c *conversion.Cloner) error { - out.CurrentNumberScheduled = in.CurrentNumberScheduled - out.NumberMisscheduled = in.NumberMisscheduled - out.DesiredNumberScheduled = in.DesiredNumberScheduled - return nil -} - -func DeepCopy_v1beta1_Deployment(in Deployment, out *Deployment, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_DeploymentSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_DeploymentStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_DeploymentList(in DeploymentList, out *DeploymentList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Deployment, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_Deployment(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_DeploymentRollback(in DeploymentRollback, out *DeploymentRollback, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Name = in.Name - if in.UpdatedAnnotations != nil { - in, out := in.UpdatedAnnotations, &out.UpdatedAnnotations - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.UpdatedAnnotations = nil - } - if err := DeepCopy_v1beta1_RollbackConfig(in.RollbackTo, &out.RollbackTo, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_DeploymentSpec(in DeploymentSpec, out *DeploymentSpec, c *conversion.Cloner) error { - if in.Replicas != nil { - in, out := in.Replicas, &out.Replicas - *out = new(int32) - **out = *in - } else { - out.Replicas = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(LabelSelector) - if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := v1.DeepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_DeploymentStrategy(in.Strategy, &out.Strategy, c); err != nil { - return err - } - out.MinReadySeconds = in.MinReadySeconds - if in.RevisionHistoryLimit != nil { - in, out := in.RevisionHistoryLimit, &out.RevisionHistoryLimit - *out = new(int32) - **out = *in - } else { - out.RevisionHistoryLimit = nil - } - out.Paused = in.Paused - if in.RollbackTo != nil { - in, out := in.RollbackTo, &out.RollbackTo - *out = new(RollbackConfig) - if err := DeepCopy_v1beta1_RollbackConfig(*in, *out, c); err != nil { - return err - } - } else { - out.RollbackTo = nil - } - return nil -} - -func DeepCopy_v1beta1_DeploymentStatus(in DeploymentStatus, out *DeploymentStatus, c *conversion.Cloner) error { - out.ObservedGeneration = in.ObservedGeneration - out.Replicas = in.Replicas - out.UpdatedReplicas = in.UpdatedReplicas - out.AvailableReplicas = in.AvailableReplicas - out.UnavailableReplicas = in.UnavailableReplicas - return nil -} - -func DeepCopy_v1beta1_DeploymentStrategy(in DeploymentStrategy, out *DeploymentStrategy, c *conversion.Cloner) error { - out.Type = in.Type - if in.RollingUpdate != nil { - in, out := in.RollingUpdate, &out.RollingUpdate - *out = new(RollingUpdateDeployment) - if err := DeepCopy_v1beta1_RollingUpdateDeployment(*in, *out, c); err != nil { - return err - } - } else { - out.RollingUpdate = nil - } - return nil -} - -func DeepCopy_v1beta1_ExportOptions(in ExportOptions, out *ExportOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.Export = in.Export - out.Exact = in.Exact - return nil -} - -func DeepCopy_v1beta1_FSGroupStrategyOptions(in FSGroupStrategyOptions, out *FSGroupStrategyOptions, c *conversion.Cloner) error { - out.Rule = in.Rule - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_v1beta1_HTTPIngressPath(in HTTPIngressPath, out *HTTPIngressPath, c *conversion.Cloner) error { - out.Path = in.Path - if err := DeepCopy_v1beta1_IngressBackend(in.Backend, &out.Backend, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_HTTPIngressRuleValue(in HTTPIngressRuleValue, out *HTTPIngressRuleValue, c *conversion.Cloner) error { - if in.Paths != nil { - in, out := in.Paths, &out.Paths - *out = make([]HTTPIngressPath, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_HTTPIngressPath(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Paths = nil - } - return nil -} - -func DeepCopy_v1beta1_HorizontalPodAutoscaler(in HorizontalPodAutoscaler, out *HorizontalPodAutoscaler, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_HorizontalPodAutoscalerSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_HorizontalPodAutoscalerStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_HorizontalPodAutoscalerList(in HorizontalPodAutoscalerList, out *HorizontalPodAutoscalerList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]HorizontalPodAutoscaler, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_HorizontalPodAutoscaler(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_HorizontalPodAutoscalerSpec(in HorizontalPodAutoscalerSpec, out *HorizontalPodAutoscalerSpec, c *conversion.Cloner) error { - if err := DeepCopy_v1beta1_SubresourceReference(in.ScaleRef, &out.ScaleRef, c); err != nil { - return err - } - if in.MinReplicas != nil { - in, out := in.MinReplicas, &out.MinReplicas - *out = new(int32) - **out = *in - } else { - out.MinReplicas = nil - } - out.MaxReplicas = in.MaxReplicas - if in.CPUUtilization != nil { - in, out := in.CPUUtilization, &out.CPUUtilization - *out = new(CPUTargetUtilization) - if err := DeepCopy_v1beta1_CPUTargetUtilization(*in, *out, c); err != nil { - return err - } - } else { - out.CPUUtilization = nil - } - return nil -} - -func DeepCopy_v1beta1_HorizontalPodAutoscalerStatus(in HorizontalPodAutoscalerStatus, out *HorizontalPodAutoscalerStatus, c *conversion.Cloner) error { - if in.ObservedGeneration != nil { - in, out := in.ObservedGeneration, &out.ObservedGeneration - *out = new(int64) - **out = *in - } else { - out.ObservedGeneration = nil - } - if in.LastScaleTime != nil { - in, out := in.LastScaleTime, &out.LastScaleTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.LastScaleTime = nil - } - out.CurrentReplicas = in.CurrentReplicas - out.DesiredReplicas = in.DesiredReplicas - if in.CurrentCPUUtilizationPercentage != nil { - in, out := in.CurrentCPUUtilizationPercentage, &out.CurrentCPUUtilizationPercentage - *out = new(int32) - **out = *in - } else { - out.CurrentCPUUtilizationPercentage = nil - } - return nil -} - -func DeepCopy_v1beta1_HostPortRange(in HostPortRange, out *HostPortRange, c *conversion.Cloner) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -func DeepCopy_v1beta1_IDRange(in IDRange, out *IDRange, c *conversion.Cloner) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -func DeepCopy_v1beta1_Ingress(in Ingress, out *Ingress, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_IngressSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_IngressStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_IngressBackend(in IngressBackend, out *IngressBackend, c *conversion.Cloner) error { - out.ServiceName = in.ServiceName - if err := intstr.DeepCopy_intstr_IntOrString(in.ServicePort, &out.ServicePort, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_IngressList(in IngressList, out *IngressList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Ingress, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_Ingress(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_IngressRule(in IngressRule, out *IngressRule, c *conversion.Cloner) error { - out.Host = in.Host - if err := DeepCopy_v1beta1_IngressRuleValue(in.IngressRuleValue, &out.IngressRuleValue, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_IngressRuleValue(in IngressRuleValue, out *IngressRuleValue, c *conversion.Cloner) error { - if in.HTTP != nil { - in, out := in.HTTP, &out.HTTP - *out = new(HTTPIngressRuleValue) - if err := DeepCopy_v1beta1_HTTPIngressRuleValue(*in, *out, c); err != nil { - return err - } - } else { - out.HTTP = nil - } - return nil -} - -func DeepCopy_v1beta1_IngressSpec(in IngressSpec, out *IngressSpec, c *conversion.Cloner) error { - if in.Backend != nil { - in, out := in.Backend, &out.Backend - *out = new(IngressBackend) - if err := DeepCopy_v1beta1_IngressBackend(*in, *out, c); err != nil { - return err - } - } else { - out.Backend = nil - } - if in.TLS != nil { - in, out := in.TLS, &out.TLS - *out = make([]IngressTLS, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_IngressTLS(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.TLS = nil - } - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]IngressRule, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_IngressRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - return nil -} - -func DeepCopy_v1beta1_IngressStatus(in IngressStatus, out *IngressStatus, c *conversion.Cloner) error { - if err := v1.DeepCopy_v1_LoadBalancerStatus(in.LoadBalancer, &out.LoadBalancer, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_IngressTLS(in IngressTLS, out *IngressTLS, c *conversion.Cloner) error { - if in.Hosts != nil { - in, out := in.Hosts, &out.Hosts - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Hosts = nil - } - out.SecretName = in.SecretName - return nil -} - -func DeepCopy_v1beta1_Job(in Job, out *Job, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_JobSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_JobStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_JobCondition(in JobCondition, out *JobCondition, c *conversion.Cloner) error { - out.Type = in.Type - out.Status = in.Status - if err := unversioned.DeepCopy_unversioned_Time(in.LastProbeTime, &out.LastProbeTime, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_Time(in.LastTransitionTime, &out.LastTransitionTime, c); err != nil { - return err - } - out.Reason = in.Reason - out.Message = in.Message - return nil -} - -func DeepCopy_v1beta1_JobList(in JobList, out *JobList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Job, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_Job(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_JobSpec(in JobSpec, out *JobSpec, c *conversion.Cloner) error { - if in.Parallelism != nil { - in, out := in.Parallelism, &out.Parallelism - *out = new(int32) - **out = *in - } else { - out.Parallelism = nil - } - if in.Completions != nil { - in, out := in.Completions, &out.Completions - *out = new(int32) - **out = *in - } else { - out.Completions = nil - } - if in.ActiveDeadlineSeconds != nil { - in, out := in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - *out = new(int64) - **out = *in - } else { - out.ActiveDeadlineSeconds = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(LabelSelector) - if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if in.AutoSelector != nil { - in, out := in.AutoSelector, &out.AutoSelector - *out = new(bool) - **out = *in - } else { - out.AutoSelector = nil - } - if err := v1.DeepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_JobStatus(in JobStatus, out *JobStatus, c *conversion.Cloner) error { - if in.Conditions != nil { - in, out := in.Conditions, &out.Conditions - *out = make([]JobCondition, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_JobCondition(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Conditions = nil - } - if in.StartTime != nil { - in, out := in.StartTime, &out.StartTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.StartTime = nil - } - if in.CompletionTime != nil { - in, out := in.CompletionTime, &out.CompletionTime - *out = new(unversioned.Time) - if err := unversioned.DeepCopy_unversioned_Time(*in, *out, c); err != nil { - return err - } - } else { - out.CompletionTime = nil - } - out.Active = in.Active - out.Succeeded = in.Succeeded - out.Failed = in.Failed - return nil -} - -func DeepCopy_v1beta1_LabelSelector(in LabelSelector, out *LabelSelector, c *conversion.Cloner) error { - if in.MatchLabels != nil { - in, out := in.MatchLabels, &out.MatchLabels - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.MatchLabels = nil - } - if in.MatchExpressions != nil { - in, out := in.MatchExpressions, &out.MatchExpressions - *out = make([]LabelSelectorRequirement, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_LabelSelectorRequirement(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.MatchExpressions = nil - } - return nil -} - -func DeepCopy_v1beta1_LabelSelectorRequirement(in LabelSelectorRequirement, out *LabelSelectorRequirement, c *conversion.Cloner) error { - out.Key = in.Key - out.Operator = in.Operator - if in.Values != nil { - in, out := in.Values, &out.Values - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Values = nil - } - return nil -} - -func DeepCopy_v1beta1_ListOptions(in ListOptions, out *ListOptions, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - out.LabelSelector = in.LabelSelector - out.FieldSelector = in.FieldSelector - out.Watch = in.Watch - out.ResourceVersion = in.ResourceVersion - if in.TimeoutSeconds != nil { - in, out := in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int64) - **out = *in - } else { - out.TimeoutSeconds = nil - } - return nil -} - -func DeepCopy_v1beta1_NetworkPolicy(in NetworkPolicy, out *NetworkPolicy, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_NetworkPolicySpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_NetworkPolicyIngressRule(in NetworkPolicyIngressRule, out *NetworkPolicyIngressRule, c *conversion.Cloner) error { - if in.Ports != nil { - in, out := in.Ports, &out.Ports - *out = make([]NetworkPolicyPort, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_NetworkPolicyPort(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ports = nil - } - if in.From != nil { - in, out := in.From, &out.From - *out = make([]NetworkPolicyPeer, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_NetworkPolicyPeer(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.From = nil - } - return nil -} - -func DeepCopy_v1beta1_NetworkPolicyList(in NetworkPolicyList, out *NetworkPolicyList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]NetworkPolicy, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_NetworkPolicy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_NetworkPolicyPeer(in NetworkPolicyPeer, out *NetworkPolicyPeer, c *conversion.Cloner) error { - if in.PodSelector != nil { - in, out := in.PodSelector, &out.PodSelector - *out = new(LabelSelector) - if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.PodSelector = nil - } - if in.NamespaceSelector != nil { - in, out := in.NamespaceSelector, &out.NamespaceSelector - *out = new(LabelSelector) - if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.NamespaceSelector = nil - } - return nil -} - -func DeepCopy_v1beta1_NetworkPolicyPort(in NetworkPolicyPort, out *NetworkPolicyPort, c *conversion.Cloner) error { - if in.Protocol != nil { - in, out := in.Protocol, &out.Protocol - *out = new(v1.Protocol) - **out = *in - } else { - out.Protocol = nil - } - if in.Port != nil { - in, out := in.Port, &out.Port - *out = new(intstr.IntOrString) - if err := intstr.DeepCopy_intstr_IntOrString(*in, *out, c); err != nil { - return err - } - } else { - out.Port = nil - } - return nil -} - -func DeepCopy_v1beta1_NetworkPolicySpec(in NetworkPolicySpec, out *NetworkPolicySpec, c *conversion.Cloner) error { - if err := DeepCopy_v1beta1_LabelSelector(in.PodSelector, &out.PodSelector, c); err != nil { - return err - } - if in.Ingress != nil { - in, out := in.Ingress, &out.Ingress - *out = make([]NetworkPolicyIngressRule, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_NetworkPolicyIngressRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ingress = nil - } - return nil -} - -func DeepCopy_v1beta1_PodSecurityPolicy(in PodSecurityPolicy, out *PodSecurityPolicy, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_PodSecurityPolicySpec(in.Spec, &out.Spec, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_PodSecurityPolicyList(in PodSecurityPolicyList, out *PodSecurityPolicyList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PodSecurityPolicy, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_PodSecurityPolicy(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_PodSecurityPolicySpec(in PodSecurityPolicySpec, out *PodSecurityPolicySpec, c *conversion.Cloner) error { - out.Privileged = in.Privileged - if in.DefaultAddCapabilities != nil { - in, out := in.DefaultAddCapabilities, &out.DefaultAddCapabilities - *out = make([]v1.Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.DefaultAddCapabilities = nil - } - if in.RequiredDropCapabilities != nil { - in, out := in.RequiredDropCapabilities, &out.RequiredDropCapabilities - *out = make([]v1.Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.RequiredDropCapabilities = nil - } - if in.AllowedCapabilities != nil { - in, out := in.AllowedCapabilities, &out.AllowedCapabilities - *out = make([]v1.Capability, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.AllowedCapabilities = nil - } - if in.Volumes != nil { - in, out := in.Volumes, &out.Volumes - *out = make([]FSType, len(in)) - for i := range in { - (*out)[i] = in[i] - } - } else { - out.Volumes = nil - } - out.HostNetwork = in.HostNetwork - if in.HostPorts != nil { - in, out := in.HostPorts, &out.HostPorts - *out = make([]HostPortRange, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_HostPortRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.HostPorts = nil - } - out.HostPID = in.HostPID - out.HostIPC = in.HostIPC - if err := DeepCopy_v1beta1_SELinuxStrategyOptions(in.SELinux, &out.SELinux, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_RunAsUserStrategyOptions(in.RunAsUser, &out.RunAsUser, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_SupplementalGroupsStrategyOptions(in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_FSGroupStrategyOptions(in.FSGroup, &out.FSGroup, c); err != nil { - return err - } - out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem - return nil -} - -func DeepCopy_v1beta1_ReplicaSet(in ReplicaSet, out *ReplicaSet, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_ReplicaSetSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_ReplicaSetStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_ReplicaSetList(in ReplicaSetList, out *ReplicaSetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ReplicaSet, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_ReplicaSet(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_ReplicaSetSpec(in ReplicaSetSpec, out *ReplicaSetSpec, c *conversion.Cloner) error { - if in.Replicas != nil { - in, out := in.Replicas, &out.Replicas - *out = new(int32) - **out = *in - } else { - out.Replicas = nil - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(LabelSelector) - if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - if err := v1.DeepCopy_v1_PodTemplateSpec(in.Template, &out.Template, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_ReplicaSetStatus(in ReplicaSetStatus, out *ReplicaSetStatus, c *conversion.Cloner) error { - out.Replicas = in.Replicas - out.FullyLabeledReplicas = in.FullyLabeledReplicas - out.ObservedGeneration = in.ObservedGeneration - return nil -} - -func DeepCopy_v1beta1_ReplicationControllerDummy(in ReplicationControllerDummy, out *ReplicationControllerDummy, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_RollbackConfig(in RollbackConfig, out *RollbackConfig, c *conversion.Cloner) error { - out.Revision = in.Revision - return nil -} - -func DeepCopy_v1beta1_RollingUpdateDeployment(in RollingUpdateDeployment, out *RollingUpdateDeployment, c *conversion.Cloner) error { - if in.MaxUnavailable != nil { - in, out := in.MaxUnavailable, &out.MaxUnavailable - *out = new(intstr.IntOrString) - if err := intstr.DeepCopy_intstr_IntOrString(*in, *out, c); err != nil { - return err - } - } else { - out.MaxUnavailable = nil - } - if in.MaxSurge != nil { - in, out := in.MaxSurge, &out.MaxSurge - *out = new(intstr.IntOrString) - if err := intstr.DeepCopy_intstr_IntOrString(*in, *out, c); err != nil { - return err - } - } else { - out.MaxSurge = nil - } - return nil -} - -func DeepCopy_v1beta1_RunAsUserStrategyOptions(in RunAsUserStrategyOptions, out *RunAsUserStrategyOptions, c *conversion.Cloner) error { - out.Rule = in.Rule - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_v1beta1_SELinuxStrategyOptions(in SELinuxStrategyOptions, out *SELinuxStrategyOptions, c *conversion.Cloner) error { - out.Rule = in.Rule - if in.SELinuxOptions != nil { - in, out := in.SELinuxOptions, &out.SELinuxOptions - *out = new(v1.SELinuxOptions) - if err := v1.DeepCopy_v1_SELinuxOptions(*in, *out, c); err != nil { - return err - } - } else { - out.SELinuxOptions = nil - } - return nil -} - -func DeepCopy_v1beta1_Scale(in Scale, out *Scale, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_ScaleSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1beta1_ScaleStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1beta1_ScaleSpec(in ScaleSpec, out *ScaleSpec, c *conversion.Cloner) error { - out.Replicas = in.Replicas - return nil -} - -func DeepCopy_v1beta1_ScaleStatus(in ScaleStatus, out *ScaleStatus, c *conversion.Cloner) error { - out.Replicas = in.Replicas - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = make(map[string]string) - for key, val := range in { - (*out)[key] = val - } - } else { - out.Selector = nil - } - out.TargetSelector = in.TargetSelector - return nil -} - -func DeepCopy_v1beta1_SubresourceReference(in SubresourceReference, out *SubresourceReference, c *conversion.Cloner) error { - out.Kind = in.Kind - out.Name = in.Name - out.APIVersion = in.APIVersion - out.Subresource = in.Subresource - return nil -} - -func DeepCopy_v1beta1_SupplementalGroupsStrategyOptions(in SupplementalGroupsStrategyOptions, out *SupplementalGroupsStrategyOptions, c *conversion.Cloner) error { - out.Rule = in.Rule - if in.Ranges != nil { - in, out := in.Ranges, &out.Ranges - *out = make([]IDRange, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_IDRange(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Ranges = nil - } - return nil -} - -func DeepCopy_v1beta1_ThirdPartyResource(in ThirdPartyResource, out *ThirdPartyResource, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - out.Description = in.Description - if in.Versions != nil { - in, out := in.Versions, &out.Versions - *out = make([]APIVersion, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_APIVersion(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Versions = nil - } - return nil -} - -func DeepCopy_v1beta1_ThirdPartyResourceData(in ThirdPartyResourceData, out *ThirdPartyResourceData, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Data != nil { - in, out := in.Data, &out.Data - *out = make([]byte, len(in)) - copy(*out, in) - } else { - out.Data = nil - } - return nil -} - -func DeepCopy_v1beta1_ThirdPartyResourceDataList(in ThirdPartyResourceDataList, out *ThirdPartyResourceDataList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ThirdPartyResourceData, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_ThirdPartyResourceData(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1beta1_ThirdPartyResourceList(in ThirdPartyResourceList, out *ThirdPartyResourceList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ThirdPartyResource, len(in)) - for i := range in { - if err := DeepCopy_v1beta1_ThirdPartyResource(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/defaults.go index 71e55a46..0708b11e 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/defaults.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,8 +22,8 @@ import ( "k8s.io/kubernetes/pkg/util/intstr" ) -func addDefaultingFuncs(scheme *runtime.Scheme) { - scheme.AddDefaultingFuncs( +func addDefaultingFuncs(scheme *runtime.Scheme) error { + return scheme.AddDefaultingFuncs( SetDefaults_DaemonSet, SetDefaults_Deployment, SetDefaults_Job, diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/doc.go index cfdb87c5..dc879002 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,9 @@ See the License for the specific language governing permissions and limitations under the License. */ -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/extensions +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/autoscaling +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/batch + package v1beta1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/generated.pb.go index 3120ce17..76f9e42d 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -106,6 +106,10 @@ import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" import k8s_io_kubernetes_pkg_util_intstr "k8s.io/kubernetes/pkg/util/intstr" +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -113,281 +117,311 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *APIVersion) Reset() { *m = APIVersion{} } -func (m *APIVersion) String() string { return proto.CompactTextString(m) } -func (*APIVersion) ProtoMessage() {} - -func (m *CPUTargetUtilization) Reset() { *m = CPUTargetUtilization{} } -func (m *CPUTargetUtilization) String() string { return proto.CompactTextString(m) } -func (*CPUTargetUtilization) ProtoMessage() {} - -func (m *CustomMetricCurrentStatus) Reset() { *m = CustomMetricCurrentStatus{} } -func (m *CustomMetricCurrentStatus) String() string { return proto.CompactTextString(m) } -func (*CustomMetricCurrentStatus) ProtoMessage() {} - -func (m *CustomMetricCurrentStatusList) Reset() { *m = CustomMetricCurrentStatusList{} } -func (m *CustomMetricCurrentStatusList) String() string { return proto.CompactTextString(m) } -func (*CustomMetricCurrentStatusList) ProtoMessage() {} - -func (m *CustomMetricTarget) Reset() { *m = CustomMetricTarget{} } -func (m *CustomMetricTarget) String() string { return proto.CompactTextString(m) } -func (*CustomMetricTarget) ProtoMessage() {} - -func (m *CustomMetricTargetList) Reset() { *m = CustomMetricTargetList{} } -func (m *CustomMetricTargetList) String() string { return proto.CompactTextString(m) } -func (*CustomMetricTargetList) ProtoMessage() {} - -func (m *DaemonSet) Reset() { *m = DaemonSet{} } -func (m *DaemonSet) String() string { return proto.CompactTextString(m) } -func (*DaemonSet) ProtoMessage() {} - -func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } -func (m *DaemonSetList) String() string { return proto.CompactTextString(m) } -func (*DaemonSetList) ProtoMessage() {} - -func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } -func (m *DaemonSetSpec) String() string { return proto.CompactTextString(m) } -func (*DaemonSetSpec) ProtoMessage() {} - -func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } -func (m *DaemonSetStatus) String() string { return proto.CompactTextString(m) } -func (*DaemonSetStatus) ProtoMessage() {} - -func (m *Deployment) Reset() { *m = Deployment{} } -func (m *Deployment) String() string { return proto.CompactTextString(m) } -func (*Deployment) ProtoMessage() {} - -func (m *DeploymentList) Reset() { *m = DeploymentList{} } -func (m *DeploymentList) String() string { return proto.CompactTextString(m) } -func (*DeploymentList) ProtoMessage() {} - -func (m *DeploymentRollback) Reset() { *m = DeploymentRollback{} } -func (m *DeploymentRollback) String() string { return proto.CompactTextString(m) } -func (*DeploymentRollback) ProtoMessage() {} - -func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } -func (m *DeploymentSpec) String() string { return proto.CompactTextString(m) } -func (*DeploymentSpec) ProtoMessage() {} - -func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } -func (m *DeploymentStatus) String() string { return proto.CompactTextString(m) } -func (*DeploymentStatus) ProtoMessage() {} - -func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } -func (m *DeploymentStrategy) String() string { return proto.CompactTextString(m) } -func (*DeploymentStrategy) ProtoMessage() {} - -func (m *ExportOptions) Reset() { *m = ExportOptions{} } -func (m *ExportOptions) String() string { return proto.CompactTextString(m) } -func (*ExportOptions) ProtoMessage() {} - -func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } -func (m *FSGroupStrategyOptions) String() string { return proto.CompactTextString(m) } -func (*FSGroupStrategyOptions) ProtoMessage() {} - -func (m *HTTPIngressPath) Reset() { *m = HTTPIngressPath{} } -func (m *HTTPIngressPath) String() string { return proto.CompactTextString(m) } -func (*HTTPIngressPath) ProtoMessage() {} - -func (m *HTTPIngressRuleValue) Reset() { *m = HTTPIngressRuleValue{} } -func (m *HTTPIngressRuleValue) String() string { return proto.CompactTextString(m) } -func (*HTTPIngressRuleValue) ProtoMessage() {} - -func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } -func (m *HorizontalPodAutoscaler) String() string { return proto.CompactTextString(m) } -func (*HorizontalPodAutoscaler) ProtoMessage() {} - -func (m *HorizontalPodAutoscalerList) Reset() { *m = HorizontalPodAutoscalerList{} } -func (m *HorizontalPodAutoscalerList) String() string { return proto.CompactTextString(m) } -func (*HorizontalPodAutoscalerList) ProtoMessage() {} - -func (m *HorizontalPodAutoscalerSpec) Reset() { *m = HorizontalPodAutoscalerSpec{} } -func (m *HorizontalPodAutoscalerSpec) String() string { return proto.CompactTextString(m) } -func (*HorizontalPodAutoscalerSpec) ProtoMessage() {} - -func (m *HorizontalPodAutoscalerStatus) Reset() { *m = HorizontalPodAutoscalerStatus{} } -func (m *HorizontalPodAutoscalerStatus) String() string { return proto.CompactTextString(m) } -func (*HorizontalPodAutoscalerStatus) ProtoMessage() {} - -func (m *HostPortRange) Reset() { *m = HostPortRange{} } -func (m *HostPortRange) String() string { return proto.CompactTextString(m) } -func (*HostPortRange) ProtoMessage() {} - -func (m *IDRange) Reset() { *m = IDRange{} } -func (m *IDRange) String() string { return proto.CompactTextString(m) } -func (*IDRange) ProtoMessage() {} - -func (m *Ingress) Reset() { *m = Ingress{} } -func (m *Ingress) String() string { return proto.CompactTextString(m) } -func (*Ingress) ProtoMessage() {} - -func (m *IngressBackend) Reset() { *m = IngressBackend{} } -func (m *IngressBackend) String() string { return proto.CompactTextString(m) } -func (*IngressBackend) ProtoMessage() {} - -func (m *IngressList) Reset() { *m = IngressList{} } -func (m *IngressList) String() string { return proto.CompactTextString(m) } -func (*IngressList) ProtoMessage() {} - -func (m *IngressRule) Reset() { *m = IngressRule{} } -func (m *IngressRule) String() string { return proto.CompactTextString(m) } -func (*IngressRule) ProtoMessage() {} - -func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } -func (m *IngressRuleValue) String() string { return proto.CompactTextString(m) } -func (*IngressRuleValue) ProtoMessage() {} - -func (m *IngressSpec) Reset() { *m = IngressSpec{} } -func (m *IngressSpec) String() string { return proto.CompactTextString(m) } -func (*IngressSpec) ProtoMessage() {} - -func (m *IngressStatus) Reset() { *m = IngressStatus{} } -func (m *IngressStatus) String() string { return proto.CompactTextString(m) } -func (*IngressStatus) ProtoMessage() {} - -func (m *IngressTLS) Reset() { *m = IngressTLS{} } -func (m *IngressTLS) String() string { return proto.CompactTextString(m) } -func (*IngressTLS) ProtoMessage() {} - -func (m *Job) Reset() { *m = Job{} } -func (m *Job) String() string { return proto.CompactTextString(m) } -func (*Job) ProtoMessage() {} - -func (m *JobCondition) Reset() { *m = JobCondition{} } -func (m *JobCondition) String() string { return proto.CompactTextString(m) } -func (*JobCondition) ProtoMessage() {} - -func (m *JobList) Reset() { *m = JobList{} } -func (m *JobList) String() string { return proto.CompactTextString(m) } -func (*JobList) ProtoMessage() {} - -func (m *JobSpec) Reset() { *m = JobSpec{} } -func (m *JobSpec) String() string { return proto.CompactTextString(m) } -func (*JobSpec) ProtoMessage() {} - -func (m *JobStatus) Reset() { *m = JobStatus{} } -func (m *JobStatus) String() string { return proto.CompactTextString(m) } -func (*JobStatus) ProtoMessage() {} - -func (m *LabelSelector) Reset() { *m = LabelSelector{} } -func (m *LabelSelector) String() string { return proto.CompactTextString(m) } -func (*LabelSelector) ProtoMessage() {} - -func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } -func (m *LabelSelectorRequirement) String() string { return proto.CompactTextString(m) } -func (*LabelSelectorRequirement) ProtoMessage() {} - -func (m *ListOptions) Reset() { *m = ListOptions{} } -func (m *ListOptions) String() string { return proto.CompactTextString(m) } -func (*ListOptions) ProtoMessage() {} - -func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } -func (m *NetworkPolicy) String() string { return proto.CompactTextString(m) } -func (*NetworkPolicy) ProtoMessage() {} - -func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } -func (m *NetworkPolicyIngressRule) String() string { return proto.CompactTextString(m) } -func (*NetworkPolicyIngressRule) ProtoMessage() {} - -func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } -func (m *NetworkPolicyList) String() string { return proto.CompactTextString(m) } -func (*NetworkPolicyList) ProtoMessage() {} - -func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } -func (m *NetworkPolicyPeer) String() string { return proto.CompactTextString(m) } -func (*NetworkPolicyPeer) ProtoMessage() {} - -func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } -func (m *NetworkPolicyPort) String() string { return proto.CompactTextString(m) } -func (*NetworkPolicyPort) ProtoMessage() {} - -func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } -func (m *NetworkPolicySpec) String() string { return proto.CompactTextString(m) } -func (*NetworkPolicySpec) ProtoMessage() {} - -func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } -func (m *PodSecurityPolicy) String() string { return proto.CompactTextString(m) } -func (*PodSecurityPolicy) ProtoMessage() {} - -func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } -func (m *PodSecurityPolicyList) String() string { return proto.CompactTextString(m) } -func (*PodSecurityPolicyList) ProtoMessage() {} - -func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } -func (m *PodSecurityPolicySpec) String() string { return proto.CompactTextString(m) } -func (*PodSecurityPolicySpec) ProtoMessage() {} - -func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } -func (m *ReplicaSet) String() string { return proto.CompactTextString(m) } -func (*ReplicaSet) ProtoMessage() {} - -func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } -func (m *ReplicaSetList) String() string { return proto.CompactTextString(m) } -func (*ReplicaSetList) ProtoMessage() {} - -func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } -func (m *ReplicaSetSpec) String() string { return proto.CompactTextString(m) } -func (*ReplicaSetSpec) ProtoMessage() {} - -func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } -func (m *ReplicaSetStatus) String() string { return proto.CompactTextString(m) } -func (*ReplicaSetStatus) ProtoMessage() {} - -func (m *ReplicationControllerDummy) Reset() { *m = ReplicationControllerDummy{} } -func (m *ReplicationControllerDummy) String() string { return proto.CompactTextString(m) } -func (*ReplicationControllerDummy) ProtoMessage() {} - -func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } -func (m *RollbackConfig) String() string { return proto.CompactTextString(m) } -func (*RollbackConfig) ProtoMessage() {} - -func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } -func (m *RollingUpdateDeployment) String() string { return proto.CompactTextString(m) } -func (*RollingUpdateDeployment) ProtoMessage() {} - -func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } -func (m *RunAsUserStrategyOptions) String() string { return proto.CompactTextString(m) } -func (*RunAsUserStrategyOptions) ProtoMessage() {} - -func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } -func (m *SELinuxStrategyOptions) String() string { return proto.CompactTextString(m) } -func (*SELinuxStrategyOptions) ProtoMessage() {} - -func (m *Scale) Reset() { *m = Scale{} } -func (m *Scale) String() string { return proto.CompactTextString(m) } -func (*Scale) ProtoMessage() {} - -func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } -func (m *ScaleSpec) String() string { return proto.CompactTextString(m) } -func (*ScaleSpec) ProtoMessage() {} - -func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } -func (m *ScaleStatus) String() string { return proto.CompactTextString(m) } -func (*ScaleStatus) ProtoMessage() {} - -func (m *SubresourceReference) Reset() { *m = SubresourceReference{} } -func (m *SubresourceReference) String() string { return proto.CompactTextString(m) } -func (*SubresourceReference) ProtoMessage() {} - -func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } -func (m *SupplementalGroupsStrategyOptions) String() string { return proto.CompactTextString(m) } -func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} - -func (m *ThirdPartyResource) Reset() { *m = ThirdPartyResource{} } -func (m *ThirdPartyResource) String() string { return proto.CompactTextString(m) } -func (*ThirdPartyResource) ProtoMessage() {} - -func (m *ThirdPartyResourceData) Reset() { *m = ThirdPartyResourceData{} } -func (m *ThirdPartyResourceData) String() string { return proto.CompactTextString(m) } -func (*ThirdPartyResourceData) ProtoMessage() {} - -func (m *ThirdPartyResourceDataList) Reset() { *m = ThirdPartyResourceDataList{} } -func (m *ThirdPartyResourceDataList) String() string { return proto.CompactTextString(m) } -func (*ThirdPartyResourceDataList) ProtoMessage() {} - -func (m *ThirdPartyResourceList) Reset() { *m = ThirdPartyResourceList{} } -func (m *ThirdPartyResourceList) String() string { return proto.CompactTextString(m) } -func (*ThirdPartyResourceList) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *APIVersion) Reset() { *m = APIVersion{} } +func (*APIVersion) ProtoMessage() {} +func (*APIVersion) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *CPUTargetUtilization) Reset() { *m = CPUTargetUtilization{} } +func (*CPUTargetUtilization) ProtoMessage() {} +func (*CPUTargetUtilization) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *CustomMetricCurrentStatus) Reset() { *m = CustomMetricCurrentStatus{} } +func (*CustomMetricCurrentStatus) ProtoMessage() {} +func (*CustomMetricCurrentStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{2} +} + +func (m *CustomMetricCurrentStatusList) Reset() { *m = CustomMetricCurrentStatusList{} } +func (*CustomMetricCurrentStatusList) ProtoMessage() {} +func (*CustomMetricCurrentStatusList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{3} +} + +func (m *CustomMetricTarget) Reset() { *m = CustomMetricTarget{} } +func (*CustomMetricTarget) ProtoMessage() {} +func (*CustomMetricTarget) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *CustomMetricTargetList) Reset() { *m = CustomMetricTargetList{} } +func (*CustomMetricTargetList) ProtoMessage() {} +func (*CustomMetricTargetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } + +func (m *DaemonSet) Reset() { *m = DaemonSet{} } +func (*DaemonSet) ProtoMessage() {} +func (*DaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } + +func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } +func (*DaemonSetList) ProtoMessage() {} +func (*DaemonSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } + +func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } +func (*DaemonSetSpec) ProtoMessage() {} +func (*DaemonSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } + +func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } +func (*DaemonSetStatus) ProtoMessage() {} +func (*DaemonSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } + +func (m *Deployment) Reset() { *m = Deployment{} } +func (*Deployment) ProtoMessage() {} +func (*Deployment) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{10} } + +func (m *DeploymentList) Reset() { *m = DeploymentList{} } +func (*DeploymentList) ProtoMessage() {} +func (*DeploymentList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{11} } + +func (m *DeploymentRollback) Reset() { *m = DeploymentRollback{} } +func (*DeploymentRollback) ProtoMessage() {} +func (*DeploymentRollback) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{12} } + +func (m *DeploymentSpec) Reset() { *m = DeploymentSpec{} } +func (*DeploymentSpec) ProtoMessage() {} +func (*DeploymentSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{13} } + +func (m *DeploymentStatus) Reset() { *m = DeploymentStatus{} } +func (*DeploymentStatus) ProtoMessage() {} +func (*DeploymentStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } + +func (m *DeploymentStrategy) Reset() { *m = DeploymentStrategy{} } +func (*DeploymentStrategy) ProtoMessage() {} +func (*DeploymentStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } + +func (m *ExportOptions) Reset() { *m = ExportOptions{} } +func (*ExportOptions) ProtoMessage() {} +func (*ExportOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{16} } + +func (m *FSGroupStrategyOptions) Reset() { *m = FSGroupStrategyOptions{} } +func (*FSGroupStrategyOptions) ProtoMessage() {} +func (*FSGroupStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{17} } + +func (m *HTTPIngressPath) Reset() { *m = HTTPIngressPath{} } +func (*HTTPIngressPath) ProtoMessage() {} +func (*HTTPIngressPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{18} } + +func (m *HTTPIngressRuleValue) Reset() { *m = HTTPIngressRuleValue{} } +func (*HTTPIngressRuleValue) ProtoMessage() {} +func (*HTTPIngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{19} } + +func (m *HorizontalPodAutoscaler) Reset() { *m = HorizontalPodAutoscaler{} } +func (*HorizontalPodAutoscaler) ProtoMessage() {} +func (*HorizontalPodAutoscaler) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{20} +} + +func (m *HorizontalPodAutoscalerList) Reset() { *m = HorizontalPodAutoscalerList{} } +func (*HorizontalPodAutoscalerList) ProtoMessage() {} +func (*HorizontalPodAutoscalerList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{21} +} + +func (m *HorizontalPodAutoscalerSpec) Reset() { *m = HorizontalPodAutoscalerSpec{} } +func (*HorizontalPodAutoscalerSpec) ProtoMessage() {} +func (*HorizontalPodAutoscalerSpec) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{22} +} + +func (m *HorizontalPodAutoscalerStatus) Reset() { *m = HorizontalPodAutoscalerStatus{} } +func (*HorizontalPodAutoscalerStatus) ProtoMessage() {} +func (*HorizontalPodAutoscalerStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{23} +} + +func (m *HostPortRange) Reset() { *m = HostPortRange{} } +func (*HostPortRange) ProtoMessage() {} +func (*HostPortRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{24} } + +func (m *IDRange) Reset() { *m = IDRange{} } +func (*IDRange) ProtoMessage() {} +func (*IDRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{25} } + +func (m *Ingress) Reset() { *m = Ingress{} } +func (*Ingress) ProtoMessage() {} +func (*Ingress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{26} } + +func (m *IngressBackend) Reset() { *m = IngressBackend{} } +func (*IngressBackend) ProtoMessage() {} +func (*IngressBackend) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{27} } + +func (m *IngressList) Reset() { *m = IngressList{} } +func (*IngressList) ProtoMessage() {} +func (*IngressList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{28} } + +func (m *IngressRule) Reset() { *m = IngressRule{} } +func (*IngressRule) ProtoMessage() {} +func (*IngressRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{29} } + +func (m *IngressRuleValue) Reset() { *m = IngressRuleValue{} } +func (*IngressRuleValue) ProtoMessage() {} +func (*IngressRuleValue) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{30} } + +func (m *IngressSpec) Reset() { *m = IngressSpec{} } +func (*IngressSpec) ProtoMessage() {} +func (*IngressSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{31} } + +func (m *IngressStatus) Reset() { *m = IngressStatus{} } +func (*IngressStatus) ProtoMessage() {} +func (*IngressStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{32} } + +func (m *IngressTLS) Reset() { *m = IngressTLS{} } +func (*IngressTLS) ProtoMessage() {} +func (*IngressTLS) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{33} } + +func (m *Job) Reset() { *m = Job{} } +func (*Job) ProtoMessage() {} +func (*Job) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{34} } + +func (m *JobCondition) Reset() { *m = JobCondition{} } +func (*JobCondition) ProtoMessage() {} +func (*JobCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{35} } + +func (m *JobList) Reset() { *m = JobList{} } +func (*JobList) ProtoMessage() {} +func (*JobList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{36} } + +func (m *JobSpec) Reset() { *m = JobSpec{} } +func (*JobSpec) ProtoMessage() {} +func (*JobSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{37} } + +func (m *JobStatus) Reset() { *m = JobStatus{} } +func (*JobStatus) ProtoMessage() {} +func (*JobStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{38} } + +func (m *LabelSelector) Reset() { *m = LabelSelector{} } +func (*LabelSelector) ProtoMessage() {} +func (*LabelSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{39} } + +func (m *LabelSelectorRequirement) Reset() { *m = LabelSelectorRequirement{} } +func (*LabelSelectorRequirement) ProtoMessage() {} +func (*LabelSelectorRequirement) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{40} +} + +func (m *ListOptions) Reset() { *m = ListOptions{} } +func (*ListOptions) ProtoMessage() {} +func (*ListOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{41} } + +func (m *NetworkPolicy) Reset() { *m = NetworkPolicy{} } +func (*NetworkPolicy) ProtoMessage() {} +func (*NetworkPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } + +func (m *NetworkPolicyIngressRule) Reset() { *m = NetworkPolicyIngressRule{} } +func (*NetworkPolicyIngressRule) ProtoMessage() {} +func (*NetworkPolicyIngressRule) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{43} +} + +func (m *NetworkPolicyList) Reset() { *m = NetworkPolicyList{} } +func (*NetworkPolicyList) ProtoMessage() {} +func (*NetworkPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } + +func (m *NetworkPolicyPeer) Reset() { *m = NetworkPolicyPeer{} } +func (*NetworkPolicyPeer) ProtoMessage() {} +func (*NetworkPolicyPeer) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } + +func (m *NetworkPolicyPort) Reset() { *m = NetworkPolicyPort{} } +func (*NetworkPolicyPort) ProtoMessage() {} +func (*NetworkPolicyPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } + +func (m *NetworkPolicySpec) Reset() { *m = NetworkPolicySpec{} } +func (*NetworkPolicySpec) ProtoMessage() {} +func (*NetworkPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } + +func (m *PodSecurityPolicy) Reset() { *m = PodSecurityPolicy{} } +func (*PodSecurityPolicy) ProtoMessage() {} +func (*PodSecurityPolicy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } + +func (m *PodSecurityPolicyList) Reset() { *m = PodSecurityPolicyList{} } +func (*PodSecurityPolicyList) ProtoMessage() {} +func (*PodSecurityPolicyList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } + +func (m *PodSecurityPolicySpec) Reset() { *m = PodSecurityPolicySpec{} } +func (*PodSecurityPolicySpec) ProtoMessage() {} +func (*PodSecurityPolicySpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } + +func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } +func (*ReplicaSet) ProtoMessage() {} +func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } + +func (m *ReplicaSetList) Reset() { *m = ReplicaSetList{} } +func (*ReplicaSetList) ProtoMessage() {} +func (*ReplicaSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } + +func (m *ReplicaSetSpec) Reset() { *m = ReplicaSetSpec{} } +func (*ReplicaSetSpec) ProtoMessage() {} +func (*ReplicaSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } + +func (m *ReplicaSetStatus) Reset() { *m = ReplicaSetStatus{} } +func (*ReplicaSetStatus) ProtoMessage() {} +func (*ReplicaSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } + +func (m *ReplicationControllerDummy) Reset() { *m = ReplicationControllerDummy{} } +func (*ReplicationControllerDummy) ProtoMessage() {} +func (*ReplicationControllerDummy) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{55} +} + +func (m *RollbackConfig) Reset() { *m = RollbackConfig{} } +func (*RollbackConfig) ProtoMessage() {} +func (*RollbackConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } + +func (m *RollingUpdateDeployment) Reset() { *m = RollingUpdateDeployment{} } +func (*RollingUpdateDeployment) ProtoMessage() {} +func (*RollingUpdateDeployment) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{57} +} + +func (m *RunAsUserStrategyOptions) Reset() { *m = RunAsUserStrategyOptions{} } +func (*RunAsUserStrategyOptions) ProtoMessage() {} +func (*RunAsUserStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{58} +} + +func (m *SELinuxStrategyOptions) Reset() { *m = SELinuxStrategyOptions{} } +func (*SELinuxStrategyOptions) ProtoMessage() {} +func (*SELinuxStrategyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } + +func (m *Scale) Reset() { *m = Scale{} } +func (*Scale) ProtoMessage() {} +func (*Scale) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } + +func (m *ScaleSpec) Reset() { *m = ScaleSpec{} } +func (*ScaleSpec) ProtoMessage() {} +func (*ScaleSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} } + +func (m *ScaleStatus) Reset() { *m = ScaleStatus{} } +func (*ScaleStatus) ProtoMessage() {} +func (*ScaleStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } + +func (m *SubresourceReference) Reset() { *m = SubresourceReference{} } +func (*SubresourceReference) ProtoMessage() {} +func (*SubresourceReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} } + +func (m *SupplementalGroupsStrategyOptions) Reset() { *m = SupplementalGroupsStrategyOptions{} } +func (*SupplementalGroupsStrategyOptions) ProtoMessage() {} +func (*SupplementalGroupsStrategyOptions) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{64} +} + +func (m *ThirdPartyResource) Reset() { *m = ThirdPartyResource{} } +func (*ThirdPartyResource) ProtoMessage() {} +func (*ThirdPartyResource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } + +func (m *ThirdPartyResourceData) Reset() { *m = ThirdPartyResourceData{} } +func (*ThirdPartyResourceData) ProtoMessage() {} +func (*ThirdPartyResourceData) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{66} } + +func (m *ThirdPartyResourceDataList) Reset() { *m = ThirdPartyResourceDataList{} } +func (*ThirdPartyResourceDataList) ProtoMessage() {} +func (*ThirdPartyResourceDataList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{67} +} + +func (m *ThirdPartyResourceList) Reset() { *m = ThirdPartyResourceList{} } +func (*ThirdPartyResourceList) ProtoMessage() {} +func (*ThirdPartyResourceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } func init() { proto.RegisterType((*APIVersion)(nil), "k8s.io.kubernetes.pkg.apis.extensions.v1beta1.APIVersion") @@ -2644,6 +2678,9 @@ func (m *ReplicaSetStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x18 i++ i = encodeVarintGenerated(data, i, uint64(m.ObservedGeneration)) + data[i] = 0x20 + i++ + i = encodeVarintGenerated(data, i, uint64(m.ReadyReplicas)) return i, nil } @@ -3906,6 +3943,7 @@ func (m *ReplicaSetStatus) Size() (n int) { n += 1 + sovGenerated(uint64(m.Replicas)) n += 1 + sovGenerated(uint64(m.FullyLabeledReplicas)) n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + n += 1 + sovGenerated(uint64(m.ReadyReplicas)) return n } @@ -4095,6 +4133,851 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *APIVersion) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&APIVersion{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `}`, + }, "") + return s +} +func (this *CPUTargetUtilization) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CPUTargetUtilization{`, + `TargetPercentage:` + fmt.Sprintf("%v", this.TargetPercentage) + `,`, + `}`, + }, "") + return s +} +func (this *CustomMetricCurrentStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CustomMetricCurrentStatus{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `CurrentValue:` + strings.Replace(strings.Replace(this.CurrentValue.String(), "Quantity", "k8s_io_kubernetes_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CustomMetricCurrentStatusList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CustomMetricCurrentStatusList{`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CustomMetricCurrentStatus", "CustomMetricCurrentStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CustomMetricTarget) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CustomMetricTarget{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `TargetValue:` + strings.Replace(strings.Replace(this.TargetValue.String(), "Quantity", "k8s_io_kubernetes_pkg_api_resource.Quantity", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *CustomMetricTargetList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CustomMetricTargetList{`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "CustomMetricTarget", "CustomMetricTarget", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonSet) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSet{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DaemonSetSpec", "DaemonSetSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DaemonSetStatus", "DaemonSetStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonSetList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSetList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DaemonSet", "DaemonSet", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonSetSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSetSpec{`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_kubernetes_pkg_api_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonSetStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSetStatus{`, + `CurrentNumberScheduled:` + fmt.Sprintf("%v", this.CurrentNumberScheduled) + `,`, + `NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`, + `DesiredNumberScheduled:` + fmt.Sprintf("%v", this.DesiredNumberScheduled) + `,`, + `}`, + }, "") + return s +} +func (this *Deployment) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Deployment{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DeploymentSpec", "DeploymentSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DeploymentStatus", "DeploymentStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Deployment", "Deployment", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentRollback) String() string { + if this == nil { + return "nil" + } + keysForUpdatedAnnotations := make([]string, 0, len(this.UpdatedAnnotations)) + for k := range this.UpdatedAnnotations { + keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) + mapStringForUpdatedAnnotations := "map[string]string{" + for _, k := range keysForUpdatedAnnotations { + mapStringForUpdatedAnnotations += fmt.Sprintf("%v: %v,", k, this.UpdatedAnnotations[k]) + } + mapStringForUpdatedAnnotations += "}" + s := strings.Join([]string{`&DeploymentRollback{`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `UpdatedAnnotations:` + mapStringForUpdatedAnnotations + `,`, + `RollbackTo:` + strings.Replace(strings.Replace(this.RollbackTo.String(), "RollbackConfig", "RollbackConfig", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentSpec{`, + `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_kubernetes_pkg_api_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `Strategy:` + strings.Replace(strings.Replace(this.Strategy.String(), "DeploymentStrategy", "DeploymentStrategy", 1), `&`, ``, 1) + `,`, + `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, + `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, + `Paused:` + fmt.Sprintf("%v", this.Paused) + `,`, + `RollbackTo:` + strings.Replace(fmt.Sprintf("%v", this.RollbackTo), "RollbackConfig", "RollbackConfig", 1) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentStatus{`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `UpdatedReplicas:` + fmt.Sprintf("%v", this.UpdatedReplicas) + `,`, + `AvailableReplicas:` + fmt.Sprintf("%v", this.AvailableReplicas) + `,`, + `UnavailableReplicas:` + fmt.Sprintf("%v", this.UnavailableReplicas) + `,`, + `}`, + }, "") + return s +} +func (this *DeploymentStrategy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DeploymentStrategy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDeployment", "RollingUpdateDeployment", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ExportOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ExportOptions{`, + `Export:` + fmt.Sprintf("%v", this.Export) + `,`, + `Exact:` + fmt.Sprintf("%v", this.Exact) + `,`, + `}`, + }, "") + return s +} +func (this *FSGroupStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&FSGroupStrategyOptions{`, + `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, + `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPIngressPath) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPIngressPath{`, + `Path:` + fmt.Sprintf("%v", this.Path) + `,`, + `Backend:` + strings.Replace(strings.Replace(this.Backend.String(), "IngressBackend", "IngressBackend", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HTTPIngressRuleValue) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HTTPIngressRuleValue{`, + `Paths:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Paths), "HTTPIngressPath", "HTTPIngressPath", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscaler) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscaler{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "HorizontalPodAutoscalerSpec", "HorizontalPodAutoscalerSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "HorizontalPodAutoscalerStatus", "HorizontalPodAutoscalerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "HorizontalPodAutoscaler", "HorizontalPodAutoscaler", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerSpec{`, + `ScaleRef:` + strings.Replace(strings.Replace(this.ScaleRef.String(), "SubresourceReference", "SubresourceReference", 1), `&`, ``, 1) + `,`, + `MinReplicas:` + valueToStringGenerated(this.MinReplicas) + `,`, + `MaxReplicas:` + fmt.Sprintf("%v", this.MaxReplicas) + `,`, + `CPUUtilization:` + strings.Replace(fmt.Sprintf("%v", this.CPUUtilization), "CPUTargetUtilization", "CPUTargetUtilization", 1) + `,`, + `}`, + }, "") + return s +} +func (this *HorizontalPodAutoscalerStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HorizontalPodAutoscalerStatus{`, + `ObservedGeneration:` + valueToStringGenerated(this.ObservedGeneration) + `,`, + `LastScaleTime:` + strings.Replace(fmt.Sprintf("%v", this.LastScaleTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `CurrentReplicas:` + fmt.Sprintf("%v", this.CurrentReplicas) + `,`, + `DesiredReplicas:` + fmt.Sprintf("%v", this.DesiredReplicas) + `,`, + `CurrentCPUUtilizationPercentage:` + valueToStringGenerated(this.CurrentCPUUtilizationPercentage) + `,`, + `}`, + }, "") + return s +} +func (this *HostPortRange) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&HostPortRange{`, + `Min:` + fmt.Sprintf("%v", this.Min) + `,`, + `Max:` + fmt.Sprintf("%v", this.Max) + `,`, + `}`, + }, "") + return s +} +func (this *IDRange) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IDRange{`, + `Min:` + fmt.Sprintf("%v", this.Min) + `,`, + `Max:` + fmt.Sprintf("%v", this.Max) + `,`, + `}`, + }, "") + return s +} +func (this *Ingress) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Ingress{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "IngressSpec", "IngressSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "IngressStatus", "IngressStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressBackend) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressBackend{`, + `ServiceName:` + fmt.Sprintf("%v", this.ServiceName) + `,`, + `ServicePort:` + strings.Replace(strings.Replace(this.ServicePort.String(), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Ingress", "Ingress", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressRule) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressRule{`, + `Host:` + fmt.Sprintf("%v", this.Host) + `,`, + `IngressRuleValue:` + strings.Replace(strings.Replace(this.IngressRuleValue.String(), "IngressRuleValue", "IngressRuleValue", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressRuleValue) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressRuleValue{`, + `HTTP:` + strings.Replace(fmt.Sprintf("%v", this.HTTP), "HTTPIngressRuleValue", "HTTPIngressRuleValue", 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressSpec{`, + `Backend:` + strings.Replace(fmt.Sprintf("%v", this.Backend), "IngressBackend", "IngressBackend", 1) + `,`, + `TLS:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TLS), "IngressTLS", "IngressTLS", 1), `&`, ``, 1) + `,`, + `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "IngressRule", "IngressRule", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressStatus{`, + `LoadBalancer:` + strings.Replace(strings.Replace(this.LoadBalancer.String(), "LoadBalancerStatus", "k8s_io_kubernetes_pkg_api_v1.LoadBalancerStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *IngressTLS) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&IngressTLS{`, + `Hosts:` + fmt.Sprintf("%v", this.Hosts) + `,`, + `SecretName:` + fmt.Sprintf("%v", this.SecretName) + `,`, + `}`, + }, "") + return s +} +func (this *Job) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Job{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "JobSpec", "JobSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "JobStatus", "JobStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobCondition) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobCondition{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Status:` + fmt.Sprintf("%v", this.Status) + `,`, + `LastProbeTime:` + strings.Replace(strings.Replace(this.LastProbeTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `LastTransitionTime:` + strings.Replace(strings.Replace(this.LastTransitionTime.String(), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1), `&`, ``, 1) + `,`, + `Reason:` + fmt.Sprintf("%v", this.Reason) + `,`, + `Message:` + fmt.Sprintf("%v", this.Message) + `,`, + `}`, + }, "") + return s +} +func (this *JobList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Job", "Job", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobSpec{`, + `Parallelism:` + valueToStringGenerated(this.Parallelism) + `,`, + `Completions:` + valueToStringGenerated(this.Completions) + `,`, + `ActiveDeadlineSeconds:` + valueToStringGenerated(this.ActiveDeadlineSeconds) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "LabelSelector", 1) + `,`, + `AutoSelector:` + valueToStringGenerated(this.AutoSelector) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_kubernetes_pkg_api_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *JobStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&JobStatus{`, + `Conditions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Conditions), "JobCondition", "JobCondition", 1), `&`, ``, 1) + `,`, + `StartTime:` + strings.Replace(fmt.Sprintf("%v", this.StartTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `CompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.CompletionTime), "Time", "k8s_io_kubernetes_pkg_api_unversioned.Time", 1) + `,`, + `Active:` + fmt.Sprintf("%v", this.Active) + `,`, + `Succeeded:` + fmt.Sprintf("%v", this.Succeeded) + `,`, + `Failed:` + fmt.Sprintf("%v", this.Failed) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelector) String() string { + if this == nil { + return "nil" + } + keysForMatchLabels := make([]string, 0, len(this.MatchLabels)) + for k := range this.MatchLabels { + keysForMatchLabels = append(keysForMatchLabels, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForMatchLabels) + mapStringForMatchLabels := "map[string]string{" + for _, k := range keysForMatchLabels { + mapStringForMatchLabels += fmt.Sprintf("%v: %v,", k, this.MatchLabels[k]) + } + mapStringForMatchLabels += "}" + s := strings.Join([]string{`&LabelSelector{`, + `MatchLabels:` + mapStringForMatchLabels + `,`, + `MatchExpressions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.MatchExpressions), "LabelSelectorRequirement", "LabelSelectorRequirement", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *LabelSelectorRequirement) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LabelSelectorRequirement{`, + `Key:` + fmt.Sprintf("%v", this.Key) + `,`, + `Operator:` + fmt.Sprintf("%v", this.Operator) + `,`, + `Values:` + fmt.Sprintf("%v", this.Values) + `,`, + `}`, + }, "") + return s +} +func (this *ListOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ListOptions{`, + `LabelSelector:` + fmt.Sprintf("%v", this.LabelSelector) + `,`, + `FieldSelector:` + fmt.Sprintf("%v", this.FieldSelector) + `,`, + `Watch:` + fmt.Sprintf("%v", this.Watch) + `,`, + `ResourceVersion:` + fmt.Sprintf("%v", this.ResourceVersion) + `,`, + `TimeoutSeconds:` + valueToStringGenerated(this.TimeoutSeconds) + `,`, + `}`, + }, "") + return s +} +func (this *NetworkPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NetworkPolicy{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "NetworkPolicySpec", "NetworkPolicySpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NetworkPolicyIngressRule) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NetworkPolicyIngressRule{`, + `Ports:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ports), "NetworkPolicyPort", "NetworkPolicyPort", 1), `&`, ``, 1) + `,`, + `From:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.From), "NetworkPolicyPeer", "NetworkPolicyPeer", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NetworkPolicyList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NetworkPolicyList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "NetworkPolicy", "NetworkPolicy", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *NetworkPolicyPeer) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NetworkPolicyPeer{`, + `PodSelector:` + strings.Replace(fmt.Sprintf("%v", this.PodSelector), "LabelSelector", "LabelSelector", 1) + `,`, + `NamespaceSelector:` + strings.Replace(fmt.Sprintf("%v", this.NamespaceSelector), "LabelSelector", "LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *NetworkPolicyPort) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NetworkPolicyPort{`, + `Protocol:` + valueToStringGenerated(this.Protocol) + `,`, + `Port:` + strings.Replace(fmt.Sprintf("%v", this.Port), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1) + `,`, + `}`, + }, "") + return s +} +func (this *NetworkPolicySpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&NetworkPolicySpec{`, + `PodSelector:` + strings.Replace(strings.Replace(this.PodSelector.String(), "LabelSelector", "LabelSelector", 1), `&`, ``, 1) + `,`, + `Ingress:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ingress), "NetworkPolicyIngressRule", "NetworkPolicyIngressRule", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicy{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodSecurityPolicySpec", "PodSecurityPolicySpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicyList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicyList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodSecurityPolicy", "PodSecurityPolicy", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodSecurityPolicySpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodSecurityPolicySpec{`, + `Privileged:` + fmt.Sprintf("%v", this.Privileged) + `,`, + `DefaultAddCapabilities:` + fmt.Sprintf("%v", this.DefaultAddCapabilities) + `,`, + `RequiredDropCapabilities:` + fmt.Sprintf("%v", this.RequiredDropCapabilities) + `,`, + `AllowedCapabilities:` + fmt.Sprintf("%v", this.AllowedCapabilities) + `,`, + `Volumes:` + fmt.Sprintf("%v", this.Volumes) + `,`, + `HostNetwork:` + fmt.Sprintf("%v", this.HostNetwork) + `,`, + `HostPorts:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.HostPorts), "HostPortRange", "HostPortRange", 1), `&`, ``, 1) + `,`, + `HostPID:` + fmt.Sprintf("%v", this.HostPID) + `,`, + `HostIPC:` + fmt.Sprintf("%v", this.HostIPC) + `,`, + `SELinux:` + strings.Replace(strings.Replace(this.SELinux.String(), "SELinuxStrategyOptions", "SELinuxStrategyOptions", 1), `&`, ``, 1) + `,`, + `RunAsUser:` + strings.Replace(strings.Replace(this.RunAsUser.String(), "RunAsUserStrategyOptions", "RunAsUserStrategyOptions", 1), `&`, ``, 1) + `,`, + `SupplementalGroups:` + strings.Replace(strings.Replace(this.SupplementalGroups.String(), "SupplementalGroupsStrategyOptions", "SupplementalGroupsStrategyOptions", 1), `&`, ``, 1) + `,`, + `FSGroup:` + strings.Replace(strings.Replace(this.FSGroup.String(), "FSGroupStrategyOptions", "FSGroupStrategyOptions", 1), `&`, ``, 1) + `,`, + `ReadOnlyRootFilesystem:` + fmt.Sprintf("%v", this.ReadOnlyRootFilesystem) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicaSet) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicaSet{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ReplicaSetSpec", "ReplicaSetSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ReplicaSetStatus", "ReplicaSetStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicaSetList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicaSetList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ReplicaSet", "ReplicaSet", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicaSetSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicaSetSpec{`, + `Replicas:` + valueToStringGenerated(this.Replicas) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_kubernetes_pkg_api_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicaSetStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicaSetStatus{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `FullyLabeledReplicas:` + fmt.Sprintf("%v", this.FullyLabeledReplicas) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `ReadyReplicas:` + fmt.Sprintf("%v", this.ReadyReplicas) + `,`, + `}`, + }, "") + return s +} +func (this *ReplicationControllerDummy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ReplicationControllerDummy{`, + `}`, + }, "") + return s +} +func (this *RollbackConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RollbackConfig{`, + `Revision:` + fmt.Sprintf("%v", this.Revision) + `,`, + `}`, + }, "") + return s +} +func (this *RollingUpdateDeployment) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RollingUpdateDeployment{`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1) + `,`, + `MaxSurge:` + strings.Replace(fmt.Sprintf("%v", this.MaxSurge), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1) + `,`, + `}`, + }, "") + return s +} +func (this *RunAsUserStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RunAsUserStrategyOptions{`, + `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, + `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *SELinuxStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SELinuxStrategyOptions{`, + `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, + `SELinuxOptions:` + strings.Replace(fmt.Sprintf("%v", this.SELinuxOptions), "SELinuxOptions", "k8s_io_kubernetes_pkg_api_v1.SELinuxOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *Scale) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Scale{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "ScaleSpec", "ScaleSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "ScaleStatus", "ScaleStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ScaleSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScaleSpec{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `}`, + }, "") + return s +} +func (this *ScaleStatus) String() string { + if this == nil { + return "nil" + } + keysForSelector := make([]string, 0, len(this.Selector)) + for k := range this.Selector { + keysForSelector = append(keysForSelector, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) + mapStringForSelector := "map[string]string{" + for _, k := range keysForSelector { + mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) + } + mapStringForSelector += "}" + s := strings.Join([]string{`&ScaleStatus{`, + `Replicas:` + fmt.Sprintf("%v", this.Replicas) + `,`, + `Selector:` + mapStringForSelector + `,`, + `TargetSelector:` + fmt.Sprintf("%v", this.TargetSelector) + `,`, + `}`, + }, "") + return s +} +func (this *SubresourceReference) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SubresourceReference{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Subresource:` + fmt.Sprintf("%v", this.Subresource) + `,`, + `}`, + }, "") + return s +} +func (this *SupplementalGroupsStrategyOptions) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&SupplementalGroupsStrategyOptions{`, + `Rule:` + fmt.Sprintf("%v", this.Rule) + `,`, + `Ranges:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Ranges), "IDRange", "IDRange", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ThirdPartyResource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ThirdPartyResource{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `Versions:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Versions), "APIVersion", "APIVersion", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ThirdPartyResourceData) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ThirdPartyResourceData{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Data:` + valueToStringGenerated(this.Data) + `,`, + `}`, + }, "") + return s +} +func (this *ThirdPartyResourceDataList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ThirdPartyResourceDataList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ThirdPartyResourceData", "ThirdPartyResourceData", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ThirdPartyResourceList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ThirdPartyResourceList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ThirdPartyResource", "ThirdPartyResource", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *APIVersion) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -11254,6 +12137,25 @@ func (m *ReplicaSetStatus) Unmarshal(data []byte) error { break } } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadyReplicas", wireType) + } + m.ReadyReplicas = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + m.ReadyReplicas |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -13003,3 +13905,255 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 3962 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe4, 0x5b, 0xdd, 0x8f, 0x24, 0xc9, + 0x51, 0xdf, 0xea, 0x9e, 0x8f, 0xee, 0xe8, 0x9d, 0x8f, 0xcd, 0x9d, 0x9d, 0xeb, 0x1b, 0xdf, 0x4d, + 0xaf, 0xeb, 0xc4, 0xb1, 0x27, 0xee, 0x7a, 0xd8, 0xc5, 0x6b, 0xce, 0x7b, 0xe7, 0xb5, 0xa7, 0xe7, + 0x63, 0x3f, 0x3c, 0xb3, 0xdb, 0xce, 0x9e, 0xdd, 0x5b, 0xec, 0xf3, 0x99, 0xea, 0xee, 0x9c, 0x9e, + 0xba, 0xa9, 0xaf, 0xab, 0xca, 0x9a, 0x9b, 0xb6, 0x85, 0x6c, 0x04, 0x48, 0xbc, 0xd8, 0xf8, 0x0d, + 0x4b, 0x86, 0x07, 0x24, 0x10, 0x0f, 0x08, 0x0b, 0x4b, 0x48, 0x7e, 0xe0, 0x05, 0x90, 0x10, 0xc7, + 0x03, 0xc2, 0x20, 0x10, 0xbc, 0x30, 0xe6, 0x06, 0x81, 0xc5, 0xbf, 0xb0, 0x20, 0x81, 0x32, 0x2b, + 0xeb, 0x23, 0xab, 0xab, 0x7a, 0xb7, 0x7b, 0x3e, 0x24, 0xe4, 0xb7, 0xe9, 0x8c, 0x88, 0x5f, 0x44, + 0x66, 0x46, 0x46, 0x44, 0x66, 0xc5, 0xc0, 0x67, 0xf7, 0xdf, 0xf4, 0xea, 0xba, 0xbd, 0xb2, 0xef, + 0xb7, 0x89, 0x6b, 0x11, 0x4a, 0xbc, 0x15, 0x67, 0xbf, 0xb7, 0xa2, 0x39, 0xba, 0xb7, 0x42, 0x0e, + 0x29, 0xb1, 0x3c, 0xdd, 0xb6, 0xbc, 0x95, 0x83, 0xeb, 0x6d, 0x42, 0xb5, 0xeb, 0x2b, 0x3d, 0x62, + 0x11, 0x57, 0xa3, 0xa4, 0x5b, 0x77, 0x5c, 0x9b, 0xda, 0xe8, 0x8d, 0x40, 0xbc, 0x1e, 0x8b, 0xd7, + 0x9d, 0xfd, 0x5e, 0x9d, 0x89, 0xd7, 0x63, 0xf1, 0xba, 0x10, 0x5f, 0x7a, 0xa3, 0xa7, 0xd3, 0x3d, + 0xbf, 0x5d, 0xef, 0xd8, 0xe6, 0x4a, 0xcf, 0xee, 0xd9, 0x2b, 0x1c, 0xa5, 0xed, 0xef, 0xf2, 0x5f, + 0xfc, 0x07, 0xff, 0x2b, 0x40, 0x5f, 0xba, 0x91, 0x6b, 0xdc, 0x8a, 0x4b, 0x3c, 0xdb, 0x77, 0x3b, + 0x24, 0x6d, 0xd1, 0xd2, 0xcd, 0x7c, 0x19, 0xdf, 0x3a, 0x20, 0x2e, 0x33, 0x88, 0x74, 0x07, 0xc4, + 0x5e, 0xcf, 0x17, 0x3b, 0x18, 0x98, 0xf6, 0xd2, 0x1b, 0xd9, 0xdc, 0xae, 0x6f, 0x51, 0xdd, 0x1c, + 0xb4, 0xe9, 0x7a, 0x36, 0xbb, 0x4f, 0x75, 0x63, 0x45, 0xb7, 0xa8, 0x47, 0xdd, 0xb4, 0x88, 0x5a, + 0x07, 0x58, 0x6d, 0xde, 0x7b, 0x1c, 0xd8, 0x8b, 0xae, 0xc2, 0x84, 0xa5, 0x99, 0xa4, 0xaa, 0x5c, + 0x55, 0xae, 0x95, 0x1b, 0x17, 0x3f, 0x3a, 0xaa, 0x5d, 0x38, 0x3e, 0xaa, 0x4d, 0x3c, 0xd0, 0x4c, + 0x82, 0x39, 0x45, 0x7d, 0x17, 0x16, 0xd6, 0x9a, 0x8f, 0x76, 0x34, 0xb7, 0x47, 0xe8, 0x23, 0xaa, + 0x1b, 0xfa, 0xd7, 0x34, 0xca, 0x24, 0xd7, 0x61, 0x9e, 0xf2, 0xc1, 0x26, 0x71, 0x3b, 0xc4, 0xa2, + 0x5a, 0x2f, 0x40, 0x99, 0x6c, 0x54, 0x05, 0xca, 0xfc, 0x4e, 0x8a, 0x8e, 0x07, 0x24, 0xd4, 0xdf, + 0x56, 0xe0, 0xc5, 0x35, 0xdf, 0xa3, 0xb6, 0xb9, 0x4d, 0xa8, 0xab, 0x77, 0xd6, 0x7c, 0xd7, 0x25, + 0x16, 0x6d, 0x51, 0x8d, 0xfa, 0xde, 0xb3, 0xad, 0x43, 0x4f, 0x60, 0xf2, 0x40, 0x33, 0x7c, 0x52, + 0x2d, 0x5c, 0x55, 0xae, 0x55, 0x6e, 0xbc, 0x5e, 0xcf, 0x75, 0x9b, 0x7a, 0xb8, 0xb1, 0xf5, 0x2f, + 0xfa, 0x9a, 0x45, 0x75, 0xda, 0x6f, 0x2c, 0x08, 0xc0, 0x8b, 0x42, 0xeb, 0x63, 0x86, 0x84, 0x03, + 0x40, 0xf5, 0xdb, 0x0a, 0xbc, 0x9c, 0x6b, 0xd9, 0x96, 0xee, 0x51, 0x64, 0xc2, 0xa4, 0x4e, 0x89, + 0xe9, 0x55, 0x95, 0xab, 0xc5, 0x6b, 0x95, 0x1b, 0x77, 0xeb, 0x23, 0xb9, 0x6c, 0x3d, 0x17, 0xbc, + 0x31, 0x23, 0xec, 0x9a, 0xbc, 0xc7, 0xe0, 0x71, 0xa0, 0x45, 0xfd, 0x2d, 0x05, 0x50, 0x52, 0x26, + 0x58, 0xdd, 0xe7, 0x58, 0xa3, 0x77, 0x4e, 0xb2, 0x46, 0x97, 0x05, 0x60, 0x25, 0x50, 0x27, 0x2d, + 0xd1, 0x37, 0x15, 0x58, 0x1c, 0xb4, 0x88, 0xaf, 0xcd, 0xae, 0xbc, 0x36, 0xab, 0x27, 0x58, 0x9b, + 0x00, 0x35, 0x67, 0x51, 0xfe, 0xb8, 0x00, 0xe5, 0x75, 0x8d, 0x98, 0xb6, 0xd5, 0x22, 0x14, 0x3d, + 0x81, 0x92, 0x49, 0xa8, 0xd6, 0xd5, 0xa8, 0xc6, 0xd7, 0xa3, 0x72, 0xe3, 0xda, 0x90, 0xc9, 0x1e, + 0x5c, 0xaf, 0x3f, 0x6c, 0xbf, 0x4f, 0x3a, 0x74, 0x9b, 0x50, 0xad, 0x81, 0x04, 0x3e, 0xc4, 0x63, + 0x38, 0x42, 0x43, 0xef, 0xc1, 0x84, 0xe7, 0x90, 0x8e, 0x58, 0xc2, 0xb7, 0x47, 0x9c, 0x4e, 0x64, + 0x61, 0xcb, 0x21, 0x9d, 0x78, 0x8f, 0xd8, 0x2f, 0xcc, 0x71, 0xd1, 0x2e, 0x4c, 0x79, 0x7c, 0xf3, + 0xab, 0x45, 0xae, 0xe1, 0xf6, 0xd8, 0x1a, 0x02, 0x17, 0x9a, 0x15, 0x3a, 0xa6, 0x82, 0xdf, 0x58, + 0xa0, 0xab, 0x7f, 0xab, 0xc0, 0x4c, 0xc4, 0xcb, 0x77, 0xea, 0x2b, 0x03, 0x6b, 0xb6, 0x32, 0x64, + 0xcd, 0x12, 0x91, 0xae, 0xce, 0xc4, 0xf9, 0xd2, 0xcd, 0x0b, 0x65, 0xa5, 0x70, 0x24, 0xb1, 0x70, + 0x5f, 0x09, 0x1d, 0xa1, 0xc0, 0x1d, 0xe1, 0xcd, 0x71, 0xe7, 0x95, 0xb3, 0xff, 0xff, 0x98, 0x9c, + 0x4f, 0x2b, 0x58, 0xc9, 0x92, 0x47, 0x0c, 0xd2, 0xa1, 0xb6, 0x2b, 0xe6, 0x33, 0xea, 0x6e, 0x6d, + 0x69, 0x6d, 0x62, 0xb4, 0x04, 0x46, 0xe3, 0x22, 0x9b, 0x58, 0xf8, 0x0b, 0x47, 0xd8, 0xe8, 0xcb, + 0x50, 0xa2, 0xc4, 0x74, 0x0c, 0x8d, 0x86, 0x07, 0xeb, 0x8d, 0xe1, 0xbe, 0xd6, 0xb4, 0xbb, 0x3b, + 0x42, 0x80, 0xbb, 0x41, 0xb4, 0x6a, 0xe1, 0x28, 0x8e, 0x00, 0xd5, 0x6f, 0x15, 0x60, 0x2e, 0xb5, + 0xa5, 0xe8, 0x31, 0x2c, 0x76, 0x82, 0x30, 0xf1, 0xc0, 0x37, 0xdb, 0xc4, 0x6d, 0x75, 0xf6, 0x48, + 0xd7, 0x37, 0x48, 0x57, 0x84, 0xdd, 0x65, 0x81, 0xb7, 0xb8, 0x96, 0xc9, 0x85, 0x73, 0xa4, 0xd1, + 0x7d, 0x40, 0x16, 0x1f, 0xda, 0xd6, 0x3d, 0x2f, 0xc2, 0x2c, 0x70, 0xcc, 0x25, 0x81, 0x89, 0x1e, + 0x0c, 0x70, 0xe0, 0x0c, 0x29, 0x66, 0x63, 0x97, 0x78, 0xba, 0x4b, 0xba, 0x69, 0x1b, 0x8b, 0xb2, + 0x8d, 0xeb, 0x99, 0x5c, 0x38, 0x47, 0x5a, 0xfd, 0x93, 0x02, 0xc0, 0x3a, 0x71, 0x0c, 0xbb, 0x6f, + 0x12, 0xeb, 0x2c, 0xcf, 0xf9, 0x57, 0xa5, 0x73, 0xfe, 0xd9, 0x51, 0xbd, 0x35, 0x32, 0x31, 0xf7, + 0xa0, 0xf7, 0x52, 0x07, 0xfd, 0x73, 0xe3, 0xab, 0x18, 0x7e, 0xd2, 0xff, 0x4e, 0x81, 0xd9, 0x98, + 0xf9, 0x3c, 0x8e, 0xfa, 0x7b, 0xf2, 0x51, 0xff, 0xcc, 0xd8, 0x33, 0xcb, 0x39, 0xeb, 0xdf, 0x2d, + 0x02, 0x8a, 0x99, 0xb0, 0x6d, 0x18, 0x6d, 0xad, 0xb3, 0xff, 0x1c, 0x09, 0xf0, 0x0f, 0x14, 0x40, + 0xbe, 0xd3, 0x65, 0x45, 0xd0, 0xaa, 0x65, 0xd9, 0x94, 0x17, 0x30, 0xa1, 0x99, 0xbf, 0x34, 0xb6, + 0x99, 0xa1, 0x05, 0xf5, 0x47, 0x03, 0xd8, 0x1b, 0x16, 0x75, 0xfb, 0xf1, 0xe9, 0x19, 0x64, 0xc0, + 0x19, 0x06, 0xa1, 0x0f, 0x00, 0x5c, 0x81, 0xb9, 0x63, 0x0b, 0xff, 0x18, 0xd5, 0x05, 0x43, 0xa3, + 0xd6, 0x6c, 0x6b, 0x57, 0xef, 0xc5, 0xde, 0x8e, 0x23, 0x60, 0x9c, 0x50, 0xb2, 0xb4, 0x01, 0x2f, + 0xe4, 0x58, 0x8f, 0xe6, 0xa1, 0xb8, 0x4f, 0xfa, 0xc1, 0xb2, 0x62, 0xf6, 0x27, 0x5a, 0x48, 0x16, + 0x12, 0x65, 0x51, 0x05, 0xdc, 0x2a, 0xbc, 0xa9, 0xa8, 0xdf, 0x9d, 0x4c, 0x3a, 0x1b, 0x8f, 0xc3, + 0xd7, 0xa0, 0xe4, 0x12, 0xc7, 0xd0, 0x3b, 0x9a, 0x27, 0x02, 0x14, 0x8f, 0xa4, 0x58, 0x8c, 0xe1, + 0x88, 0x2a, 0x45, 0xec, 0xc2, 0x39, 0x45, 0xec, 0xe2, 0x29, 0x47, 0x6c, 0x64, 0x43, 0xc9, 0xa3, + 0xac, 0xce, 0xee, 0xf5, 0xab, 0x13, 0x1c, 0x7c, 0xf5, 0x04, 0x27, 0x3b, 0x00, 0x8a, 0x15, 0x86, + 0x23, 0x38, 0x52, 0x82, 0x56, 0x61, 0xce, 0xd4, 0x2d, 0x4c, 0xb4, 0x6e, 0xbf, 0x45, 0x3a, 0xb6, + 0xd5, 0xf5, 0xaa, 0x93, 0x7c, 0x99, 0x5f, 0x10, 0x42, 0x73, 0xdb, 0x32, 0x19, 0xa7, 0xf9, 0xd1, + 0x16, 0x2c, 0xb8, 0xe4, 0x40, 0x67, 0x66, 0xdc, 0xd5, 0x3d, 0x6a, 0xbb, 0xfd, 0x2d, 0xdd, 0xd4, + 0x69, 0x75, 0x2a, 0x28, 0xe3, 0x8f, 0x8f, 0x6a, 0x0b, 0x38, 0x83, 0x8e, 0x33, 0xa5, 0xd0, 0xab, + 0x30, 0xe5, 0x68, 0xbe, 0x47, 0xba, 0xd5, 0xe9, 0xab, 0xca, 0xb5, 0x52, 0x1c, 0x98, 0x9a, 0x7c, + 0x14, 0x0b, 0x2a, 0x32, 0x25, 0x2f, 0x2f, 0x9d, 0x86, 0x97, 0xcf, 0xe6, 0x7b, 0xb8, 0xfa, 0x93, + 0x02, 0xcc, 0xa7, 0x83, 0x26, 0xcb, 0x79, 0x76, 0xdb, 0x23, 0xee, 0x01, 0xe9, 0xde, 0x09, 0xee, + 0x47, 0xba, 0x6d, 0x71, 0x37, 0x2d, 0xc6, 0xa7, 0xf6, 0xe1, 0x00, 0x07, 0xce, 0x90, 0x42, 0xaf, + 0x27, 0x1c, 0x3d, 0xc8, 0x9a, 0xd1, 0xb6, 0x65, 0x38, 0xfb, 0x2a, 0xcc, 0x89, 0x93, 0x1f, 0x12, + 0x45, 0x6a, 0x8c, 0xb6, 0xed, 0x91, 0x4c, 0xc6, 0x69, 0x7e, 0x74, 0x07, 0x2e, 0x69, 0x07, 0x9a, + 0x6e, 0x68, 0x6d, 0x83, 0x44, 0x20, 0x13, 0x1c, 0xe4, 0x45, 0x01, 0x72, 0x69, 0x35, 0xcd, 0x80, + 0x07, 0x65, 0xd0, 0x36, 0x5c, 0xf6, 0xad, 0x41, 0xa8, 0xc0, 0x8d, 0x3e, 0x21, 0xa0, 0x2e, 0x3f, + 0x1a, 0x64, 0xc1, 0x59, 0x72, 0xea, 0xdf, 0x2b, 0xc9, 0xf8, 0x1c, 0xba, 0x2c, 0xba, 0x05, 0x13, + 0xb4, 0xef, 0x84, 0xf1, 0xf9, 0xd5, 0x30, 0x3e, 0xef, 0xf4, 0x1d, 0xf2, 0x94, 0x57, 0x02, 0x69, + 0x09, 0x46, 0xc1, 0x5c, 0x06, 0x7d, 0x03, 0x66, 0xd8, 0x56, 0xea, 0x56, 0x2f, 0x58, 0x15, 0x11, + 0x1f, 0x36, 0xc7, 0x70, 0x97, 0x08, 0x23, 0x91, 0x67, 0x2e, 0x1d, 0x1f, 0xd5, 0x66, 0x24, 0x22, + 0x96, 0xf5, 0xa9, 0xef, 0xc2, 0xcc, 0xc6, 0xa1, 0x63, 0xbb, 0xf4, 0xa1, 0x13, 0xc4, 0xe8, 0x57, + 0x61, 0x8a, 0xf0, 0x01, 0x3e, 0x9f, 0x84, 0x97, 0x07, 0x6c, 0x58, 0x50, 0xd1, 0x2b, 0x30, 0x49, + 0x0e, 0xb5, 0x0e, 0xe5, 0x16, 0x97, 0xe2, 0x8c, 0xb6, 0xc1, 0x06, 0x71, 0x40, 0x53, 0x7f, 0xa0, + 0xc0, 0xe2, 0x66, 0xeb, 0x8e, 0x6b, 0xfb, 0x4e, 0x38, 0xf9, 0x50, 0xcf, 0x2f, 0xc2, 0x84, 0xeb, + 0x1b, 0xe1, 0xaa, 0xbd, 0x12, 0xae, 0x1a, 0xf6, 0x0d, 0xb6, 0x6a, 0x97, 0x53, 0x52, 0xc1, 0x92, + 0x31, 0x01, 0xf4, 0x1e, 0x4c, 0xb9, 0x9a, 0xd5, 0x23, 0x61, 0x7e, 0xfb, 0xf4, 0x88, 0x6b, 0x75, + 0x6f, 0x1d, 0x33, 0xf1, 0x78, 0x62, 0xfc, 0xa7, 0x87, 0x05, 0xaa, 0xfa, 0xbb, 0x0a, 0xcc, 0xdd, + 0xdd, 0xd9, 0x69, 0xde, 0xb3, 0x7a, 0x2e, 0xf1, 0xbc, 0xa6, 0x46, 0xf7, 0x58, 0x0a, 0x76, 0x34, + 0xba, 0x97, 0x4e, 0xc1, 0x8c, 0x86, 0x39, 0x05, 0xed, 0xc1, 0x34, 0x3b, 0x8f, 0xc4, 0xea, 0x8e, + 0x59, 0x5a, 0x09, 0x75, 0x8d, 0x00, 0xa4, 0x31, 0x27, 0x74, 0x4c, 0x8b, 0x01, 0x1c, 0xc2, 0xab, + 0x5f, 0x87, 0x85, 0x84, 0x79, 0x6c, 0xbd, 0xf8, 0x9d, 0x15, 0x75, 0x60, 0x92, 0x59, 0x12, 0xde, + 0x48, 0x47, 0xbd, 0x60, 0xa5, 0xa6, 0x1c, 0x6f, 0x28, 0xfb, 0xe5, 0xe1, 0x00, 0x5b, 0xfd, 0xe7, + 0x02, 0xbc, 0x70, 0xd7, 0x76, 0xf5, 0xaf, 0xd9, 0x16, 0xd5, 0x8c, 0xa6, 0xdd, 0x5d, 0xf5, 0xa9, + 0xed, 0x75, 0x34, 0x83, 0xb8, 0x67, 0x58, 0xb4, 0x1a, 0x52, 0xd1, 0x7a, 0x7f, 0xd4, 0x99, 0x65, + 0xdb, 0x9b, 0x5b, 0xc1, 0xd2, 0x54, 0x05, 0xbb, 0x75, 0x4a, 0xfa, 0x86, 0x97, 0xb3, 0xff, 0xa5, + 0xc0, 0x27, 0x72, 0x24, 0xcf, 0xa3, 0xb6, 0xdd, 0x97, 0x6b, 0xdb, 0xcd, 0xd3, 0x99, 0x73, 0x4e, + 0xa1, 0xfb, 0xdf, 0x85, 0xdc, 0xb9, 0xf2, 0xd2, 0xea, 0x03, 0x28, 0xf1, 0x5f, 0x98, 0xec, 0x8a, + 0xb9, 0xae, 0x8d, 0x68, 0x4f, 0xcb, 0x6f, 0x87, 0x4f, 0x3d, 0x98, 0xec, 0x12, 0x97, 0x58, 0x1d, + 0x92, 0xa8, 0x36, 0x04, 0x38, 0x8e, 0xd4, 0xa0, 0xeb, 0x50, 0xe1, 0xd5, 0x83, 0x94, 0xe7, 0xe6, + 0x8e, 0x8f, 0x6a, 0x95, 0xed, 0x78, 0x18, 0x27, 0x79, 0xd0, 0x4d, 0xa8, 0x98, 0xda, 0x61, 0x2a, + 0xcb, 0x45, 0xcf, 0x49, 0xdb, 0x31, 0x09, 0x27, 0xf9, 0xd0, 0x37, 0x60, 0xb6, 0xe3, 0xf8, 0x89, + 0x97, 0x46, 0x51, 0x4e, 0x8d, 0x3a, 0xc5, 0xac, 0x47, 0xcb, 0x06, 0x3a, 0x3e, 0xaa, 0xcd, 0xae, + 0x35, 0x1f, 0x25, 0xc6, 0x70, 0x4a, 0x9d, 0xfa, 0x97, 0x45, 0x78, 0x79, 0xa8, 0x8f, 0xa2, 0xcd, + 0x21, 0xd5, 0xc3, 0xe2, 0x08, 0x95, 0x43, 0x17, 0x66, 0x0c, 0xcd, 0xa3, 0x7c, 0xb9, 0x77, 0x74, + 0x33, 0xcc, 0x6e, 0x3f, 0xf7, 0x9c, 0x8e, 0xcb, 0x44, 0x82, 0x14, 0xb6, 0x95, 0x44, 0xc1, 0x32, + 0x28, 0xab, 0x38, 0xc4, 0xcd, 0x3f, 0xaf, 0xe2, 0x58, 0x93, 0xc9, 0x38, 0xcd, 0xcf, 0x20, 0xc4, + 0xc5, 0x3c, 0x55, 0x6f, 0x44, 0x10, 0xeb, 0x32, 0x19, 0xa7, 0xf9, 0x91, 0x09, 0x35, 0x81, 0x2a, + 0x2f, 0x7f, 0xe2, 0xf5, 0x38, 0xa8, 0x3b, 0x5e, 0x39, 0x3e, 0xaa, 0xd5, 0xd6, 0x86, 0xb3, 0xe2, + 0x67, 0x61, 0xa9, 0xdb, 0x30, 0x73, 0xd7, 0xf6, 0x68, 0x93, 0xa5, 0x64, 0x96, 0xb7, 0xd0, 0xcb, + 0x50, 0x34, 0x75, 0x4b, 0xdc, 0x44, 0x2a, 0xc2, 0xec, 0x22, 0x73, 0x5e, 0x36, 0xce, 0xc9, 0xda, + 0xa1, 0xf0, 0xeb, 0x98, 0xac, 0x1d, 0x62, 0x36, 0xae, 0xde, 0x81, 0x69, 0x91, 0x17, 0x93, 0x40, + 0xc5, 0xe1, 0x40, 0xc5, 0x0c, 0xa0, 0x3f, 0x2c, 0xc0, 0xb4, 0x48, 0x23, 0x67, 0x98, 0x10, 0xde, + 0x95, 0x12, 0xc2, 0xad, 0xf1, 0x52, 0x6d, 0x6e, 0x02, 0xe8, 0xa6, 0x12, 0xc0, 0xdb, 0x63, 0xe2, + 0x0f, 0x0f, 0xf8, 0xdf, 0x57, 0x60, 0x56, 0x4e, 0xfa, 0x2c, 0xa2, 0xb0, 0x33, 0xa4, 0x77, 0xc8, + 0x83, 0xf8, 0xc2, 0x1f, 0x45, 0x94, 0x56, 0x4c, 0xc2, 0x49, 0x3e, 0x44, 0x22, 0x31, 0xe6, 0x0e, + 0x62, 0x51, 0xea, 0x39, 0x46, 0xfb, 0x54, 0x37, 0xea, 0xc1, 0xa7, 0x93, 0xfa, 0x3d, 0x8b, 0x3e, + 0x74, 0x5b, 0xd4, 0xd5, 0xad, 0xde, 0x80, 0x1a, 0xee, 0x59, 0x49, 0x5c, 0xf5, 0x6f, 0x14, 0xa8, + 0x08, 0x83, 0xcf, 0x23, 0x23, 0x7d, 0x59, 0xce, 0x48, 0x9f, 0x1e, 0xb3, 0x9e, 0xca, 0xce, 0x40, + 0x3f, 0x8c, 0xe7, 0xc2, 0x2a, 0x28, 0x56, 0xe0, 0xed, 0xd9, 0x1e, 0x4d, 0x17, 0x78, 0xec, 0x88, + 0x61, 0x4e, 0x41, 0xbf, 0xa1, 0xc0, 0xbc, 0x9e, 0xaa, 0xb9, 0xc4, 0x52, 0x7f, 0x6e, 0x3c, 0xd3, + 0x22, 0x98, 0xf8, 0x83, 0x52, 0x9a, 0x82, 0x07, 0x54, 0xaa, 0x3e, 0x0c, 0x70, 0x21, 0x0d, 0x26, + 0xf6, 0x28, 0x75, 0xc6, 0xcc, 0x95, 0x59, 0xd5, 0x64, 0xa3, 0xc4, 0xa7, 0xbf, 0xb3, 0xd3, 0xc4, + 0x1c, 0x5a, 0xfd, 0x7e, 0x21, 0x5a, 0xb0, 0x56, 0x70, 0x46, 0xa2, 0x7a, 0x57, 0x39, 0x8d, 0x7a, + 0xb7, 0x92, 0x55, 0xeb, 0xa2, 0x27, 0x50, 0xa4, 0xc6, 0xb8, 0xef, 0x6d, 0x42, 0xc3, 0xce, 0x56, + 0x2b, 0x8e, 0x53, 0x3b, 0x5b, 0x2d, 0xcc, 0x20, 0xd1, 0x57, 0x61, 0x92, 0xdd, 0x26, 0xd8, 0x11, + 0x2f, 0x8e, 0x1f, 0x42, 0xd8, 0x7a, 0xc5, 0x1e, 0xc6, 0x7e, 0x79, 0x38, 0xc0, 0x55, 0xbf, 0x0e, + 0x33, 0x52, 0x1c, 0x40, 0xef, 0xc3, 0x45, 0xc3, 0xd6, 0xba, 0x0d, 0xcd, 0xd0, 0xac, 0x0e, 0x09, + 0xdf, 0xee, 0x7f, 0x7e, 0x78, 0x44, 0xdc, 0x4a, 0x48, 0x88, 0x78, 0x12, 0x7d, 0xd4, 0x4b, 0xd2, + 0xb0, 0x84, 0xad, 0x6a, 0x00, 0xf1, 0xec, 0x51, 0x0d, 0x26, 0x99, 0x0b, 0x07, 0x37, 0x83, 0x72, + 0xa3, 0xcc, 0x6c, 0x65, 0x9e, 0xed, 0xe1, 0x60, 0x1c, 0xdd, 0x00, 0xf0, 0x48, 0xc7, 0x25, 0x94, + 0x87, 0x1d, 0xfe, 0xf8, 0x15, 0x07, 0xe0, 0x56, 0x44, 0xc1, 0x09, 0x2e, 0xf5, 0x7b, 0x05, 0x28, + 0xde, 0xb7, 0xdb, 0x67, 0x18, 0xe4, 0x9f, 0x48, 0x41, 0x7e, 0xd4, 0xf3, 0x7f, 0xdf, 0x6e, 0xe7, + 0x06, 0xf8, 0x5f, 0x4e, 0x05, 0xf8, 0x37, 0xc7, 0xc0, 0x1e, 0x1e, 0xdc, 0xff, 0xa1, 0x08, 0x17, + 0xef, 0xdb, 0xed, 0x35, 0xdb, 0xea, 0xea, 0xbc, 0x14, 0xfa, 0x94, 0xf4, 0x48, 0x70, 0x35, 0xf5, + 0x48, 0x30, 0x9f, 0xe4, 0x4d, 0x3c, 0x0f, 0x3c, 0x8e, 0x0c, 0x0d, 0x36, 0xe5, 0xb6, 0xac, 0xee, + 0xe9, 0x51, 0x6d, 0xe8, 0xd7, 0xf7, 0x7a, 0x84, 0x29, 0x9b, 0x87, 0xf6, 0x82, 0xc2, 0xac, 0xe9, + 0xda, 0xed, 0xa0, 0x30, 0x2b, 0x8e, 0x5e, 0x98, 0x5d, 0x11, 0xb6, 0xf0, 0xe2, 0x2c, 0x42, 0xc2, + 0x32, 0x30, 0xfa, 0x10, 0x10, 0x1b, 0xd8, 0x71, 0x35, 0xcb, 0x0b, 0x66, 0xc7, 0xd4, 0x4d, 0x8c, + 0xae, 0x2e, 0x7a, 0xb5, 0xda, 0x1a, 0x80, 0xc3, 0x19, 0x2a, 0xd0, 0xab, 0x30, 0xe5, 0x12, 0xcd, + 0xb3, 0x2d, 0x5e, 0x76, 0x95, 0x13, 0xd7, 0x7d, 0x3e, 0x8a, 0x05, 0x15, 0xbd, 0x06, 0xd3, 0x26, + 0xf1, 0x3c, 0x56, 0x9f, 0x4d, 0x71, 0xc6, 0xe8, 0xe6, 0xbd, 0x1d, 0x0c, 0xe3, 0x90, 0xae, 0xfe, + 0x85, 0x02, 0xd3, 0xf7, 0xed, 0xf6, 0x79, 0x24, 0xbf, 0x77, 0xe4, 0xe4, 0x77, 0x63, 0x74, 0x07, + 0xcd, 0x49, 0x7c, 0x7f, 0x56, 0xe4, 0x73, 0xe0, 0x31, 0xfc, 0x3a, 0x54, 0x1c, 0xcd, 0xd5, 0x0c, + 0x83, 0x18, 0xba, 0x67, 0x8a, 0xd2, 0x91, 0xdf, 0x79, 0x9a, 0xf1, 0x30, 0x4e, 0xf2, 0x30, 0x91, + 0x8e, 0x6d, 0x3a, 0x06, 0x09, 0xbf, 0x30, 0x44, 0x22, 0x6b, 0xf1, 0x30, 0x4e, 0xf2, 0xa0, 0x87, + 0x70, 0x45, 0xeb, 0x50, 0xfd, 0x80, 0xac, 0x13, 0xad, 0x6b, 0xe8, 0x16, 0x09, 0x5f, 0x73, 0x8b, + 0xbc, 0x84, 0x7c, 0xf1, 0xf8, 0xa8, 0x76, 0x65, 0x35, 0x8b, 0x01, 0x67, 0xcb, 0x49, 0xcf, 0xe9, + 0x13, 0x67, 0xf8, 0x9c, 0xfe, 0x29, 0xb8, 0xa8, 0xf9, 0xd4, 0x0e, 0x29, 0xdc, 0x8f, 0x4a, 0x8d, + 0x79, 0x16, 0x7a, 0x57, 0x13, 0xe3, 0x58, 0xe2, 0x92, 0x1e, 0xe1, 0xa7, 0x4e, 0xfb, 0xb3, 0xe9, + 0x9f, 0x17, 0xa1, 0x1c, 0x05, 0x1f, 0x64, 0x03, 0x74, 0xc2, 0x03, 0x1e, 0x3e, 0xfb, 0xbc, 0x35, + 0xba, 0xa7, 0x44, 0x41, 0x22, 0x8e, 0xc7, 0xd1, 0x90, 0x87, 0x13, 0x2a, 0xd0, 0x13, 0x28, 0x7b, + 0x54, 0x73, 0xe9, 0xb8, 0x77, 0xb9, 0x99, 0xe3, 0xa3, 0x5a, 0xb9, 0x15, 0x22, 0xe0, 0x18, 0x0c, + 0xf5, 0x60, 0x36, 0xf6, 0x99, 0x71, 0x23, 0x52, 0x70, 0xf9, 0x95, 0x60, 0x70, 0x0a, 0x96, 0x85, + 0x85, 0xc0, 0xab, 0xc4, 0x05, 0x2f, 0x0a, 0x0b, 0x81, 0x0b, 0x62, 0x41, 0x45, 0x2b, 0x50, 0xf6, + 0xfc, 0x4e, 0x87, 0x90, 0x2e, 0xe9, 0x8a, 0x8b, 0xdb, 0x25, 0xc1, 0x5a, 0x6e, 0x85, 0x04, 0x1c, + 0xf3, 0x30, 0xe0, 0x5d, 0x4d, 0x37, 0x48, 0x57, 0x7c, 0x5d, 0x88, 0x80, 0x37, 0xf9, 0x28, 0x16, + 0x54, 0xf5, 0x3f, 0x0b, 0x30, 0x23, 0xf9, 0x1f, 0xfa, 0x75, 0x05, 0x2a, 0xa6, 0x46, 0x3b, 0x7b, + 0x7c, 0x38, 0xdc, 0xc8, 0xed, 0x93, 0xf8, 0x74, 0x7d, 0x3b, 0xc6, 0x0b, 0x3e, 0xd5, 0x25, 0xde, + 0x25, 0x22, 0x0a, 0x4e, 0xaa, 0x45, 0xdf, 0x52, 0x60, 0x9e, 0xff, 0xde, 0x38, 0x74, 0x58, 0xe5, + 0x90, 0xf8, 0x84, 0x78, 0xe7, 0x24, 0xb6, 0x60, 0xf2, 0x81, 0xaf, 0xbb, 0x84, 0xbf, 0x47, 0x47, + 0x85, 0xee, 0x76, 0x4a, 0x11, 0x1e, 0x50, 0xbd, 0x74, 0x1b, 0xe6, 0xd3, 0xb3, 0x18, 0xe9, 0x93, + 0xdd, 0xef, 0x2b, 0x50, 0xcd, 0x33, 0x84, 0xdd, 0x62, 0x23, 0xa0, 0xb8, 0x3a, 0xfc, 0x02, 0xe9, + 0x07, 0xa8, 0x1b, 0x50, 0xb2, 0x1d, 0xe2, 0x6a, 0xe1, 0x17, 0xbb, 0x72, 0xe3, 0xb5, 0xf0, 0x54, + 0x3e, 0x14, 0xe3, 0x4f, 0x8f, 0x6a, 0x57, 0x24, 0xf8, 0x90, 0x80, 0x23, 0x51, 0xa4, 0xc2, 0x14, + 0xb7, 0x27, 0xa8, 0x32, 0xcb, 0x0d, 0x60, 0xfe, 0xc0, 0xeb, 0x6b, 0x0f, 0x0b, 0x8a, 0xfa, 0x47, + 0x05, 0xa8, 0xb0, 0x04, 0x10, 0xbe, 0x8b, 0xbf, 0xc5, 0x52, 0x73, 0x02, 0x56, 0xd8, 0x98, 0xc8, + 0xb6, 0xc9, 0x29, 0xc9, 0xbc, 0x4c, 0x78, 0x57, 0x27, 0x46, 0xb7, 0x95, 0xfc, 0xdc, 0x98, 0x10, + 0xde, 0x4c, 0x12, 0xb1, 0xcc, 0x8b, 0x5e, 0x81, 0xc9, 0x0f, 0xd9, 0x82, 0xf3, 0xa3, 0x97, 0x78, + 0xd1, 0x7f, 0x87, 0x0d, 0xe2, 0x80, 0x86, 0x56, 0x61, 0x2e, 0x7c, 0x58, 0x13, 0x2d, 0x76, 0xfc, + 0x20, 0x95, 0xe3, 0x97, 0x12, 0x2c, 0x93, 0x71, 0x9a, 0x1f, 0xdd, 0x82, 0x59, 0xaa, 0x9b, 0xc4, + 0xf6, 0x69, 0xf2, 0xbb, 0x5e, 0x31, 0x38, 0xbe, 0x3b, 0x12, 0x05, 0xa7, 0x38, 0x79, 0x7b, 0xcf, + 0x03, 0x42, 0x3f, 0xb4, 0xdd, 0xfd, 0xa6, 0x6d, 0xe8, 0x9d, 0xfe, 0x19, 0xd6, 0x9f, 0x6d, 0xa9, + 0xfe, 0xfc, 0xfc, 0x88, 0x67, 0x40, 0xb2, 0x32, 0xaf, 0x12, 0x55, 0xff, 0x43, 0x81, 0xaa, 0xc4, + 0x99, 0xbc, 0x94, 0x12, 0x98, 0x74, 0x6c, 0x97, 0x86, 0x11, 0xe1, 0x44, 0x16, 0xb0, 0x1b, 0x7c, + 0xe2, 0x4d, 0x9f, 0xc1, 0xe2, 0x00, 0x9d, 0xcd, 0x73, 0xd7, 0xb5, 0x4d, 0x71, 0xd6, 0x4f, 0xa6, + 0x85, 0x10, 0x37, 0x9e, 0xe7, 0xa6, 0x6b, 0x9b, 0x98, 0x63, 0xab, 0xff, 0xa4, 0xc0, 0x25, 0x89, + 0xf3, 0x3c, 0x8a, 0x28, 0x4d, 0x2e, 0xa2, 0xde, 0x3e, 0xc9, 0xcc, 0x72, 0xca, 0xa9, 0xdf, 0x2c, + 0xa4, 0xe6, 0xc5, 0x56, 0x00, 0xd9, 0x50, 0x71, 0xec, 0x6e, 0xeb, 0x34, 0xbb, 0xb4, 0x82, 0xb2, + 0x2c, 0x06, 0xc5, 0x49, 0x0d, 0xe8, 0x57, 0x15, 0xb8, 0x64, 0x69, 0x26, 0xf1, 0x1c, 0xad, 0x43, + 0x5a, 0xa7, 0xd9, 0x6b, 0x70, 0xe5, 0xf8, 0xa8, 0x76, 0xe9, 0x41, 0x1a, 0x1a, 0x0f, 0x6a, 0x53, + 0xff, 0x34, 0xbd, 0xc5, 0xcc, 0xc9, 0xd0, 0x17, 0xa1, 0xc4, 0xdb, 0x72, 0x3b, 0xb6, 0x21, 0x22, + 0xd9, 0x4d, 0xb6, 0x5b, 0x4d, 0x31, 0xf6, 0xf4, 0xa8, 0xf6, 0x33, 0x43, 0x6f, 0x30, 0x21, 0x23, + 0x8e, 0x60, 0xd0, 0x16, 0x4c, 0x38, 0xe3, 0xbf, 0x73, 0xf1, 0x87, 0x0d, 0xfe, 0xb8, 0xc5, 0x51, + 0xd4, 0xff, 0x49, 0x9b, 0xcd, 0x4b, 0x63, 0xef, 0xf4, 0x77, 0x30, 0xca, 0xc0, 0xb9, 0xbb, 0xe8, + 0xc2, 0xb4, 0x78, 0xee, 0x19, 0x33, 0xef, 0xe6, 0x45, 0x92, 0xf8, 0x4e, 0x13, 0x0e, 0x86, 0x8a, + 0xf8, 0xc1, 0xe4, 0x06, 0x75, 0x7c, 0x57, 0xa7, 0xfd, 0x33, 0x0f, 0xaa, 0xbb, 0x52, 0x50, 0x5d, + 0x1f, 0x71, 0x82, 0x03, 0x96, 0xe6, 0x06, 0xd6, 0x7f, 0x55, 0xe0, 0xca, 0x00, 0xf7, 0x79, 0x04, + 0x1d, 0x22, 0x07, 0x9d, 0xcf, 0x9f, 0x74, 0x86, 0x39, 0x81, 0xe7, 0x23, 0xc8, 0x98, 0x1f, 0x77, + 0xdd, 0x1b, 0x00, 0x8e, 0xab, 0x1f, 0xe8, 0x06, 0xe9, 0x89, 0xd6, 0xc9, 0x52, 0xbc, 0x27, 0xcd, + 0x88, 0x82, 0x13, 0x5c, 0xe8, 0x57, 0x60, 0xb1, 0x4b, 0x76, 0x35, 0xdf, 0xa0, 0xab, 0xdd, 0xee, + 0x9a, 0xe6, 0x68, 0x6d, 0xdd, 0xd0, 0xa9, 0x2e, 0xbe, 0xb1, 0x97, 0x1b, 0x1b, 0x41, 0x4b, 0x63, + 0x16, 0xc7, 0xd3, 0xa3, 0xda, 0xcf, 0x0e, 0x7f, 0x83, 0x08, 0x99, 0xfb, 0x38, 0x47, 0x09, 0xfa, + 0x35, 0x05, 0xaa, 0x6e, 0x50, 0x9d, 0x75, 0xd7, 0x5d, 0xdb, 0x91, 0x2c, 0x08, 0x4a, 0xa7, 0x3b, + 0xc7, 0x47, 0xb5, 0x2a, 0xce, 0xe1, 0x19, 0xc5, 0x86, 0x5c, 0x45, 0x88, 0xc2, 0x65, 0xcd, 0x30, + 0xec, 0x0f, 0x89, 0xbc, 0x02, 0x13, 0x5c, 0x7f, 0xe3, 0xf8, 0xa8, 0x76, 0x79, 0x75, 0x90, 0x3c, + 0x8a, 0xea, 0x2c, 0x78, 0xb4, 0x02, 0xd3, 0x07, 0xb6, 0xe1, 0x9b, 0x84, 0x95, 0x41, 0x4c, 0x13, + 0x8b, 0xb8, 0xd3, 0x8f, 0x83, 0xa1, 0xa7, 0xec, 0xfe, 0xd0, 0xe2, 0x0f, 0x42, 0x21, 0x17, 0xba, + 0x09, 0x95, 0x3d, 0xdb, 0xa3, 0xe2, 0xac, 0xf3, 0xdb, 0x46, 0x29, 0x0e, 0x2e, 0x77, 0x63, 0x12, + 0x4e, 0xf2, 0x21, 0x13, 0xca, 0x7b, 0xe2, 0x83, 0x91, 0x57, 0x9d, 0x1e, 0x2b, 0x21, 0x4a, 0x1f, + 0x9c, 0xe2, 0xeb, 0x50, 0x38, 0xec, 0xe1, 0x58, 0x03, 0x7a, 0x0d, 0xa6, 0xf9, 0x8f, 0x7b, 0xeb, + 0xbc, 0x03, 0xaa, 0x14, 0x87, 0xa0, 0xbb, 0xc1, 0x30, 0x0e, 0xe9, 0x21, 0xeb, 0xbd, 0xe6, 0x5a, + 0xb5, 0x3c, 0xc8, 0x7a, 0xaf, 0xb9, 0x86, 0x43, 0x3a, 0x72, 0x60, 0xda, 0x23, 0x5b, 0xba, 0xe5, + 0x1f, 0x56, 0x81, 0x1f, 0xdd, 0x8d, 0x51, 0xbf, 0x0b, 0x6f, 0x70, 0xe9, 0x54, 0x33, 0x4a, 0xac, + 0x51, 0xd0, 0x71, 0xa8, 0x06, 0x1d, 0x42, 0xd9, 0xf5, 0xad, 0x55, 0xef, 0x91, 0x47, 0xdc, 0x6a, + 0x85, 0xeb, 0x1c, 0x35, 0x2a, 0xe3, 0x50, 0x3e, 0xad, 0x35, 0x5a, 0xc1, 0x88, 0x03, 0xc7, 0xca, + 0xd0, 0xef, 0x28, 0x80, 0x3c, 0xdf, 0x71, 0x0c, 0x7e, 0x63, 0xd1, 0x0c, 0xde, 0x0f, 0xe3, 0x55, + 0x2f, 0x72, 0x1b, 0x9a, 0x23, 0x7f, 0x0f, 0x4f, 0x03, 0xa5, 0x8d, 0x89, 0xde, 0xd7, 0x06, 0x59, + 0x71, 0x86, 0x1d, 0x6c, 0x2b, 0x76, 0x3d, 0xfe, 0x77, 0x75, 0x66, 0xac, 0xad, 0xc8, 0xee, 0x0b, + 0x8a, 0xb7, 0x42, 0xd0, 0x71, 0xa8, 0x06, 0x3d, 0x86, 0x45, 0x97, 0x68, 0xdd, 0x87, 0x96, 0xd1, + 0xc7, 0xb6, 0x4d, 0x37, 0x75, 0x83, 0x78, 0x7d, 0x8f, 0x12, 0xb3, 0x3a, 0xcb, 0xdd, 0x26, 0xea, + 0xbd, 0xc6, 0x99, 0x5c, 0x38, 0x47, 0x9a, 0xf7, 0x5e, 0x8b, 0xcf, 0xb8, 0x67, 0xfb, 0x3f, 0x16, + 0x27, 0xeb, 0xbd, 0x8e, 0x4d, 0x3c, 0xb3, 0xde, 0xeb, 0x84, 0x8a, 0x67, 0xf7, 0x5e, 0xc7, 0xcc, + 0xff, 0x0f, 0x7a, 0xaf, 0x63, 0x63, 0x73, 0xf2, 0xe9, 0xff, 0x4a, 0x33, 0xfa, 0x29, 0x6c, 0xf0, + 0x55, 0xbf, 0x57, 0x80, 0xf9, 0xb4, 0x03, 0x48, 0xbd, 0x9f, 0xca, 0x33, 0x7b, 0x3f, 0x9b, 0xb0, + 0xb0, 0xeb, 0x1b, 0x46, 0x9f, 0xcf, 0x26, 0xd1, 0x4b, 0x11, 0x3c, 0x13, 0xbf, 0x24, 0x24, 0x17, + 0x36, 0x33, 0x78, 0x70, 0xa6, 0x64, 0x4e, 0x1f, 0x6b, 0x71, 0xac, 0x3e, 0xd6, 0xb7, 0x60, 0x86, + 0x45, 0x80, 0x7e, 0xaa, 0xc5, 0x23, 0x7a, 0x1c, 0xc1, 0x49, 0x22, 0x96, 0x79, 0xd5, 0x97, 0x60, + 0x49, 0xfc, 0xcd, 0xb0, 0xd6, 0x6c, 0x8b, 0xba, 0xb6, 0x61, 0x10, 0x77, 0xdd, 0x37, 0xcd, 0xbe, + 0x7a, 0x1b, 0x66, 0xe5, 0x8e, 0xdd, 0x60, 0xe1, 0x82, 0x26, 0x62, 0xd1, 0x4a, 0x91, 0x58, 0xb8, + 0x60, 0x1c, 0x47, 0x1c, 0xea, 0x8f, 0x15, 0x78, 0x21, 0xa7, 0x87, 0x13, 0xbd, 0x0f, 0xb3, 0xa6, + 0x76, 0x98, 0x68, 0x52, 0x15, 0xc7, 0x6b, 0xd4, 0x8b, 0x0f, 0x7f, 0x5e, 0xd9, 0x96, 0x90, 0x70, + 0x0a, 0x99, 0xc7, 0x3e, 0xed, 0xb0, 0xe5, 0xbb, 0x3d, 0x32, 0xe6, 0xf5, 0x8a, 0xbb, 0xee, 0xb6, + 0xc0, 0xc0, 0x11, 0x9a, 0xfa, 0x03, 0x05, 0xaa, 0x79, 0x89, 0x10, 0xdd, 0x94, 0x7a, 0x41, 0x3f, + 0x99, 0xea, 0x05, 0xbd, 0x34, 0x20, 0x77, 0x4e, 0x9d, 0xa0, 0x3f, 0x54, 0x60, 0x31, 0xbb, 0x60, + 0x40, 0xbf, 0x20, 0x59, 0x5c, 0x4b, 0x59, 0x3c, 0x97, 0x92, 0x12, 0xf6, 0xee, 0xc1, 0xac, 0x28, + 0x2b, 0x04, 0xcc, 0x73, 0xfc, 0xc3, 0xe2, 0x41, 0x54, 0xb3, 0x84, 0x09, 0x92, 0xef, 0xa3, 0x3c, + 0x86, 0x53, 0xb8, 0xea, 0xef, 0x15, 0x60, 0x92, 0x37, 0x48, 0x9d, 0x61, 0x36, 0xfb, 0x92, 0x94, + 0xcd, 0x46, 0xfd, 0x84, 0xca, 0xad, 0xcb, 0x4d, 0x64, 0xed, 0x54, 0x22, 0xbb, 0x35, 0x16, 0xfa, + 0xf0, 0x1c, 0xf6, 0x19, 0x28, 0x47, 0x46, 0x8c, 0x16, 0xe7, 0x58, 0xc5, 0x50, 0x49, 0xa8, 0x18, + 0x31, 0x4a, 0x1e, 0x48, 0xd9, 0x62, 0x9c, 0xff, 0xac, 0x4d, 0xe8, 0xae, 0x87, 0x69, 0x22, 0x78, + 0xe6, 0x8f, 0x5b, 0x1c, 0x07, 0xb3, 0xc7, 0x6d, 0x98, 0x0d, 0xfe, 0x3d, 0x39, 0x7a, 0xd6, 0x28, + 0x72, 0xef, 0x5d, 0x14, 0x32, 0xb3, 0x3b, 0x12, 0x15, 0xa7, 0xb8, 0x97, 0xde, 0x82, 0x19, 0x49, + 0xd9, 0x48, 0xaf, 0xf1, 0x7f, 0xa5, 0xc0, 0x42, 0x56, 0x53, 0x26, 0xba, 0x0a, 0x13, 0xfb, 0xba, + 0xe8, 0x22, 0x49, 0x74, 0xde, 0x7c, 0x41, 0xb7, 0xba, 0x98, 0x53, 0xa2, 0xff, 0x7f, 0x2a, 0xe4, + 0xfe, 0xff, 0xd3, 0x0d, 0x00, 0xcd, 0xd1, 0xc3, 0xf7, 0xe8, 0xa2, 0xdc, 0xbf, 0x10, 0xff, 0x33, + 0x38, 0x4e, 0x70, 0xf1, 0x5e, 0xab, 0xd8, 0x1e, 0xf1, 0x88, 0x1d, 0x37, 0x41, 0x25, 0x4c, 0x4d, + 0xf2, 0xa9, 0x7f, 0xad, 0xc0, 0x27, 0x9f, 0x59, 0x4c, 0xa3, 0x86, 0x14, 0x1e, 0xea, 0xa9, 0xf0, + 0xb0, 0x9c, 0x0f, 0x70, 0x8e, 0x7d, 0xee, 0xdf, 0x2e, 0x00, 0xda, 0xd9, 0xd3, 0xdd, 0x6e, 0x53, + 0x73, 0x69, 0x3f, 0x7c, 0xb5, 0x3f, 0xc3, 0x80, 0x71, 0x13, 0x2a, 0x5d, 0xe2, 0x75, 0x5c, 0x9d, + 0x2f, 0x92, 0xd8, 0xce, 0x68, 0xc5, 0xd7, 0x63, 0x12, 0x4e, 0xf2, 0xa1, 0x1e, 0x94, 0x44, 0xad, + 0x18, 0x36, 0xeb, 0x8c, 0x5a, 0xfc, 0xc5, 0x1e, 0x10, 0x9f, 0x0f, 0x31, 0xe0, 0xe1, 0x08, 0x5c, + 0xfd, 0x8e, 0x02, 0x8b, 0x83, 0x0b, 0xb2, 0x1e, 0xb4, 0xa2, 0x9c, 0xd5, 0xa2, 0xbc, 0x04, 0x13, + 0x1c, 0x95, 0xad, 0xc6, 0xc5, 0xe0, 0x71, 0x92, 0x69, 0xc4, 0x7c, 0x54, 0xfd, 0x89, 0x02, 0x4b, + 0xd9, 0x26, 0x9d, 0x47, 0xcd, 0xfd, 0xbe, 0x5c, 0x73, 0x8f, 0x7a, 0xc1, 0xcb, 0x36, 0x3c, 0xa7, + 0xfe, 0xfe, 0x71, 0xe6, 0xe2, 0x9f, 0xc7, 0x2c, 0x77, 0xe5, 0x59, 0xae, 0x9e, 0x78, 0x96, 0xd9, + 0x33, 0x6c, 0xbc, 0xf6, 0xd1, 0xc7, 0xcb, 0x17, 0x7e, 0xf4, 0xf1, 0xf2, 0x85, 0x7f, 0xf9, 0x78, + 0xf9, 0xc2, 0x37, 0x8f, 0x97, 0x95, 0x8f, 0x8e, 0x97, 0x95, 0x1f, 0x1d, 0x2f, 0x2b, 0xff, 0x76, + 0xbc, 0xac, 0x7c, 0xe7, 0xdf, 0x97, 0x2f, 0x7c, 0x69, 0x5a, 0x60, 0xfe, 0x5f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x58, 0xd8, 0xcd, 0xc3, 0x5b, 0x44, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/generated.proto index bd4da697..6a343f13 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -70,25 +70,25 @@ message CustomMetricTargetList { // DaemonSet represents the configuration of a daemon set. message DaemonSet { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Spec defines the desired behavior of this daemon set. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional DaemonSetSpec spec = 2; // Status is the current status of this daemon set. This data may be // out of date by some window of time. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional DaemonSetStatus status = 3; } // DaemonSetList is a collection of daemon sets. message DaemonSetList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is a list of daemon sets. @@ -100,14 +100,14 @@ message DaemonSetSpec { // Selector is a label query over pods that are managed by the daemon set. // Must match in order to be controlled. // If empty, defaulted to labels on Pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors optional LabelSelector selector = 1; // Template is the object that describes the pod that will be created. // The DaemonSet will create exactly one copy of this pod on every node // that matches the template's node selector (or on every node if no node // selector is specified). - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template optional k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec template = 2; } @@ -115,17 +115,17 @@ message DaemonSetSpec { message DaemonSetStatus { // CurrentNumberScheduled is the number of nodes that are running at least 1 // daemon pod and are supposed to run the daemon pod. - // More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md + // More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md optional int32 currentNumberScheduled = 1; // NumberMisscheduled is the number of nodes that are running the daemon pod, but are // not supposed to run the daemon pod. - // More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md + // More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md optional int32 numberMisscheduled = 2; // DesiredNumberScheduled is the total number of nodes that should be running the daemon // pod (including nodes correctly running the daemon pod). - // More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md + // More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md optional int32 desiredNumberScheduled = 3; } @@ -248,7 +248,7 @@ message FSGroupStrategyOptions { // HTTPIngressPath associates a path regex with a backend. Incoming urls matching // the path are forwarded to the backend. message HTTPIngressPath { - // Path is a extended POSIX regex as defined by IEEE Std 1003.1, + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, // (i.e this follows the egrep/unix syntax, not the perl syntax) // matched against the path of an incoming request. Currently it can // contain characters disallowed from the conventional "path" @@ -274,10 +274,10 @@ message HTTPIngressRuleValue { // configuration of a horizontal pod autoscaler. message HorizontalPodAutoscaler { - // Standard object metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // Standard object metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; - // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. optional HorizontalPodAutoscalerSpec spec = 2; // current information about the autoscaler. @@ -355,15 +355,15 @@ message IDRange { // based virtual hosting etc. message Ingress { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Spec is the desired state of the Ingress. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional IngressSpec spec = 2; // Status is the current state of the Ingress. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional IngressStatus status = 3; } @@ -379,7 +379,7 @@ message IngressBackend { // IngressList is a collection of Ingress. message IngressList { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is the list of Ingress. @@ -465,15 +465,15 @@ message IngressTLS { // Job represents the configuration of a single job. message Job { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Spec is a structure defining the expected behavior of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional JobSpec spec = 2; // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional JobStatus status = 3; } @@ -501,7 +501,7 @@ message JobCondition { // JobList is a collection of jobs. message JobList { // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is the list of Job. @@ -514,7 +514,7 @@ message JobSpec { // run at any given time. The actual number of pods running in steady state will // be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), // i.e. when the work left to do is less than max parallelism. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional int32 parallelism = 1; // Completions specifies the desired number of successfully finished pods the @@ -522,7 +522,7 @@ message JobSpec { // pod signals the success of all pods, and allows parallelism to have any positive // value. Setting to 1 means that parallelism is limited to 1 and the success of that // pod signals the success of the job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional int32 completions = 2; // Optional duration in seconds relative to the startTime that the job may be active @@ -531,26 +531,26 @@ message JobSpec { // Selector is a label query over pods that should match the pod count. // Normally, the system sets this field for you. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors optional LabelSelector selector = 4; // AutoSelector controls generation of pod labels and pod selectors. // It was not present in the original extensions/v1beta1 Job definition, but exists // to allow conversion from batch/v1 Jobs, where it corresponds to, but has the opposite // meaning as, ManualSelector. - // More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md + // More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md optional bool autoSelector = 5; // Template is the object that describes the pod that will be created when // executing a job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md optional k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec template = 6; } // JobStatus represents the current state of a Job. message JobStatus { // Conditions represent the latest available observations of an object's current state. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md repeated JobCondition conditions = 1; // StartTime represents time when the job was acknowledged by the Job Manager. @@ -627,7 +627,7 @@ message ListOptions { message NetworkPolicy { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Specification of the desired behavior for this NetworkPolicy. @@ -658,7 +658,7 @@ message NetworkPolicyIngressRule { // Network Policy List is a list of NetworkPolicy objects. message NetworkPolicyList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is a list of schema objects. @@ -716,7 +716,7 @@ message NetworkPolicySpec { // that will be applied to a pod and container. message PodSecurityPolicy { // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // spec defines the policy enforced. @@ -726,7 +726,7 @@ message PodSecurityPolicy { // Pod Security Policy List is a list of PodSecurityPolicy objects. message PodSecurityPolicyList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is a list of schema objects. @@ -792,29 +792,29 @@ message PodSecurityPolicySpec { message ReplicaSet { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ReplicaSetSpec spec = 2; // Status is the most recently observed status of the ReplicaSet. // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status optional ReplicaSetStatus status = 3; } // ReplicaSetList is a collection of ReplicaSets. message ReplicaSetList { // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // List of ReplicaSets. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md repeated ReplicaSet items = 2; } @@ -823,30 +823,33 @@ message ReplicaSetSpec { // Replicas is the number of desired replicas. // This is a pointer to distinguish between explicit zero and unspecified. // Defaults to 1. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller optional int32 replicas = 1; // Selector is a label query over pods that should match the replica count. // If the selector is empty, it is defaulted to the labels present on the pod template. // Label keys and values that must match in order to be controlled by this replica set. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors optional LabelSelector selector = 2; // Template is the object that describes the pod that will be created if // insufficient replicas are detected. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template optional k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec template = 3; } // ReplicaSetStatus represents the current status of a ReplicaSet. message ReplicaSetStatus { // Replicas is the most recently oberved number of replicas. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller optional int32 replicas = 1; // The number of pods that have labels matching the labels of the pod template of the replicaset. optional int32 fullyLabeledReplicas = 2; + // The number of ready replicas for this replica set. + optional int32 readyReplicas = 4; + // ObservedGeneration reflects the generation of the most recently observed ReplicaSet. optional int64 observedGeneration = 3; } @@ -903,19 +906,19 @@ message SELinuxStrategyOptions { optional string rule = 1; // seLinuxOptions required to run as; required for MustRunAs - // More info: http://releases.k8s.io/release-1.3/docs/design/security_context.md#security-context + // More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md#security-context optional k8s.io.kubernetes.pkg.api.v1.SELinuxOptions seLinuxOptions = 2; } // represents a scaling request for a resource. message Scale { - // Standard object metadata; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata. + // Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata. optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; - // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. optional ScaleSpec spec = 2; - // current status of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only. optional ScaleStatus status = 3; } @@ -930,7 +933,7 @@ message ScaleStatus { // actual number of observed instances of the scaled object. optional int32 replicas = 1; - // label query over pods that should match the replicas count. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // label query over pods that should match the replicas count. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors map selector = 2; // label selector for pods that should match the replicas count. This is a serializated @@ -938,16 +941,16 @@ message ScaleStatus { // avoid introspection in the clients. The string will be in the same format as the // query-param syntax. If the target type only supports map-based selectors, both this // field and map-based selector field are populated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors optional string targetSelector = 3; } // SubresourceReference contains enough information to let you inspect or modify the referred subresource. message SubresourceReference { - // Kind of the referent; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // Kind of the referent; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds optional string kind = 1; - // Name of the referent; More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // Name of the referent; More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names optional string name = 2; // API version of the referent @@ -992,7 +995,7 @@ message ThirdPartyResourceData { // ThirdPartyResrouceDataList is a list of ThirdPartyResourceData. message ThirdPartyResourceDataList { // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; // Items is the list of ThirdpartyResourceData. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/register.go index e8bbf28b..c98235d4 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,14 +29,13 @@ const GroupName = "extensions" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addDefaultingFuncs, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Deployment{}, &DeploymentList{}, @@ -66,4 +65,5 @@ func addKnownTypes(scheme *runtime.Scheme) { ) // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/types.go index 7fead65b..3ede49ac 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -34,7 +34,7 @@ type ScaleStatus struct { // actual number of observed instances of the scaled object. Replicas int32 `json:"replicas" protobuf:"varint,1,opt,name=replicas"` - // label query over pods that should match the replicas count. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // label query over pods that should match the replicas count. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector map[string]string `json:"selector,omitempty" protobuf:"bytes,2,rep,name=selector"` // label selector for pods that should match the replicas count. This is a serializated @@ -42,22 +42,23 @@ type ScaleStatus struct { // avoid introspection in the clients. The string will be in the same format as the // query-param syntax. If the target type only supports map-based selectors, both this // field and map-based selector field are populated. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors TargetSelector string `json:"targetSelector,omitempty" protobuf:"bytes,3,opt,name=targetSelector"` } -// +genclient=true,noMethods=true +// +genclient=true +// +noMethods=true // represents a scaling request for a resource. type Scale struct { unversioned.TypeMeta `json:",inline"` - // Standard object metadata; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata. + // Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata. v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Spec ScaleSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` - // current status of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. Read-only. + // current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only. Status ScaleStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -68,9 +69,9 @@ type ReplicationControllerDummy struct { // SubresourceReference contains enough information to let you inspect or modify the referred subresource. type SubresourceReference struct { - // Kind of the referent; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // Kind of the referent; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` - // Name of the referent; More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names + // Name of the referent; More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names Name string `json:"name,omitempty" protobuf:"bytes,2,opt,name=name"` // API version of the referent APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,3,opt,name=apiVersion"` @@ -141,15 +142,13 @@ type HorizontalPodAutoscalerStatus struct { CurrentCPUUtilizationPercentage *int32 `json:"currentCPUUtilizationPercentage,omitempty" protobuf:"varint,5,opt,name=currentCPUUtilizationPercentage"` } -// +genclient=true - // configuration of a horizontal pod autoscaler. type HorizontalPodAutoscaler struct { unversioned.TypeMeta `json:",inline"` - // Standard object metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // Standard object metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` - // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. + // behaviour of autoscaler. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Spec HorizontalPodAutoscalerSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // current information about the autoscaler. @@ -166,7 +165,8 @@ type HorizontalPodAutoscalerList struct { Items []HorizontalPodAutoscaler `json:"items" protobuf:"bytes,2,rep,name=items"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // A ThirdPartyResource is a generic representation of a resource, it is used by add-ons and plugins to add new resource // types to the API. It consists of one or more Versions of the api. @@ -410,14 +410,14 @@ type DaemonSetSpec struct { // Selector is a label query over pods that are managed by the daemon set. // Must match in order to be controlled. // If empty, defaulted to labels on Pod template. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *LabelSelector `json:"selector,omitempty" protobuf:"bytes,1,opt,name=selector"` // Template is the object that describes the pod that will be created. // The DaemonSet will create exactly one copy of this pod on every node // that matches the template's node selector (or on every node if no node // selector is specified). - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,2,opt,name=template"` // TODO(madhusudancs): Uncomment while implementing DaemonSet updates. @@ -447,17 +447,17 @@ const ( type DaemonSetStatus struct { // CurrentNumberScheduled is the number of nodes that are running at least 1 // daemon pod and are supposed to run the daemon pod. - // More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md + // More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md CurrentNumberScheduled int32 `json:"currentNumberScheduled" protobuf:"varint,1,opt,name=currentNumberScheduled"` // NumberMisscheduled is the number of nodes that are running the daemon pod, but are // not supposed to run the daemon pod. - // More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md + // More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md NumberMisscheduled int32 `json:"numberMisscheduled" protobuf:"varint,2,opt,name=numberMisscheduled"` // DesiredNumberScheduled is the total number of nodes that should be running the daemon // pod (including nodes correctly running the daemon pod). - // More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md + // More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md DesiredNumberScheduled int32 `json:"desiredNumberScheduled" protobuf:"varint,3,opt,name=desiredNumberScheduled"` } @@ -467,18 +467,18 @@ type DaemonSetStatus struct { type DaemonSet struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the desired behavior of this daemon set. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec DaemonSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is the current status of this daemon set. This data may be // out of date by some window of time. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -486,7 +486,7 @@ type DaemonSet struct { type DaemonSetList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of daemon sets. @@ -497,7 +497,7 @@ type DaemonSetList struct { type ThirdPartyResourceDataList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is the list of ThirdpartyResourceData. @@ -510,15 +510,15 @@ type ThirdPartyResourceDataList struct { type Job struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec is a structure defining the expected behavior of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is a structure describing current status of a job. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status JobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -526,7 +526,7 @@ type Job struct { type JobList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is the list of Job. @@ -540,7 +540,7 @@ type JobSpec struct { // run at any given time. The actual number of pods running in steady state will // be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), // i.e. when the work left to do is less than max parallelism. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Parallelism *int32 `json:"parallelism,omitempty" protobuf:"varint,1,opt,name=parallelism"` // Completions specifies the desired number of successfully finished pods the @@ -548,7 +548,7 @@ type JobSpec struct { // pod signals the success of all pods, and allows parallelism to have any positive // value. Setting to 1 means that parallelism is limited to 1 and the success of that // pod signals the success of the job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Completions *int32 `json:"completions,omitempty" protobuf:"varint,2,opt,name=completions"` // Optional duration in seconds relative to the startTime that the job may be active @@ -557,19 +557,19 @@ type JobSpec struct { // Selector is a label query over pods that should match the pod count. // Normally, the system sets this field for you. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *LabelSelector `json:"selector,omitempty" protobuf:"bytes,4,opt,name=selector"` // AutoSelector controls generation of pod labels and pod selectors. // It was not present in the original extensions/v1beta1 Job definition, but exists // to allow conversion from batch/v1 Jobs, where it corresponds to, but has the opposite // meaning as, ManualSelector. - // More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md + // More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md AutoSelector *bool `json:"autoSelector,omitempty" protobuf:"varint,5,opt,name=autoSelector"` // Template is the object that describes the pod that will be created when // executing a job. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,6,opt,name=template"` } @@ -577,7 +577,7 @@ type JobSpec struct { type JobStatus struct { // Conditions represent the latest available observations of an object's current state. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md Conditions []JobCondition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type" protobuf:"bytes,1,rep,name=conditions"` // StartTime represents time when the job was acknowledged by the Job Manager. @@ -635,15 +635,15 @@ type JobCondition struct { type Ingress struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec is the desired state of the Ingress. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec IngressSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is the current state of the Ingress. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status IngressStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -651,7 +651,7 @@ type Ingress struct { type IngressList struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is the list of Ingress. @@ -755,7 +755,7 @@ type HTTPIngressRuleValue struct { // HTTPIngressPath associates a path regex with a backend. Incoming urls matching // the path are forwarded to the backend. type HTTPIngressPath struct { - // Path is a extended POSIX regex as defined by IEEE Std 1003.1, + // Path is an extended POSIX regex as defined by IEEE Std 1003.1, // (i.e this follows the egrep/unix syntax, not the perl syntax) // matched against the path of an incoming request. Currently it can // contain characters disallowed from the conventional "path" @@ -852,18 +852,18 @@ type ReplicaSet struct { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. - // Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec defines the specification of the desired behavior of the ReplicaSet. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Spec ReplicaSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is the most recently observed status of the ReplicaSet. // This data may be out of date by some window of time. // Populated by the system. // Read-only. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status Status ReplicaSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` } @@ -871,11 +871,11 @@ type ReplicaSet struct { type ReplicaSetList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // List of ReplicaSets. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md Items []ReplicaSet `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -884,42 +884,46 @@ type ReplicaSetSpec struct { // Replicas is the number of desired replicas. // This is a pointer to distinguish between explicit zero and unspecified. // Defaults to 1. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller Replicas *int32 `json:"replicas,omitempty" protobuf:"varint,1,opt,name=replicas"` // Selector is a label query over pods that should match the replica count. // If the selector is empty, it is defaulted to the labels present on the pod template. // Label keys and values that must match in order to be controlled by this replica set. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors Selector *LabelSelector `json:"selector,omitempty" protobuf:"bytes,2,opt,name=selector"` // Template is the object that describes the pod that will be created if // insufficient replicas are detected. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template Template v1.PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,3,opt,name=template"` } // ReplicaSetStatus represents the current status of a ReplicaSet. type ReplicaSetStatus struct { // Replicas is the most recently oberved number of replicas. - // More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller + // More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller Replicas int32 `json:"replicas" protobuf:"varint,1,opt,name=replicas"` // The number of pods that have labels matching the labels of the pod template of the replicaset. FullyLabeledReplicas int32 `json:"fullyLabeledReplicas,omitempty" protobuf:"varint,2,opt,name=fullyLabeledReplicas"` + // The number of ready replicas for this replica set. + ReadyReplicas int32 `json:"readyReplicas,omitempty" protobuf:"varint,4,opt,name=readyReplicas"` + // ObservedGeneration reflects the generation of the most recently observed ReplicaSet. ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,3,opt,name=observedGeneration"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // Pod Security Policy governs the ability to make requests that affect the Security Context // that will be applied to a pod and container. type PodSecurityPolicy struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // spec defines the policy enforced. @@ -991,6 +995,8 @@ var ( DownwardAPI FSType = "downwardAPI" FC FSType = "fc" ConfigMap FSType = "configMap" + Quobyte FSType = "quobyte" + AzureDisk FSType = "azureDisk" All FSType = "*" ) @@ -1008,7 +1014,7 @@ type SELinuxStrategyOptions struct { // type is the strategy that will dictate the allowable labels that may be set. Rule SELinuxStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=SELinuxStrategy"` // seLinuxOptions required to run as; required for MustRunAs - // More info: http://releases.k8s.io/release-1.3/docs/design/security_context.md#security-context + // More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md#security-context SELinuxOptions *v1.SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,2,opt,name=seLinuxOptions"` } @@ -1096,7 +1102,7 @@ const ( type PodSecurityPolicyList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of schema objects. @@ -1106,7 +1112,7 @@ type PodSecurityPolicyList struct { type NetworkPolicy struct { unversioned.TypeMeta `json:",inline"` // Standard object's metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Specification of the desired behavior for this NetworkPolicy. @@ -1187,7 +1193,7 @@ type NetworkPolicyPeer struct { type NetworkPolicyList struct { unversioned.TypeMeta `json:",inline"` // Standard list metadata. - // More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata + // More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of schema objects. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go index 1864a965..572b3d73 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -65,9 +65,9 @@ func (CustomMetricTarget) SwaggerDoc() map[string]string { var map_DaemonSet = map[string]string{ "": "DaemonSet represents the configuration of a daemon set.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the desired behavior of this daemon set. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status is the current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the desired behavior of this daemon set. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is the current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (DaemonSet) SwaggerDoc() map[string]string { @@ -76,7 +76,7 @@ func (DaemonSet) SwaggerDoc() map[string]string { var map_DaemonSetList = map[string]string{ "": "DaemonSetList is a collection of daemon sets.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is a list of daemon sets.", } @@ -86,8 +86,8 @@ func (DaemonSetList) SwaggerDoc() map[string]string { var map_DaemonSetSpec = map[string]string{ "": "DaemonSetSpec is the specification of a daemon set.", - "selector": "Selector is a label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", - "template": "Template is the object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template", + "selector": "Selector is a label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", + "template": "Template is the object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template", } func (DaemonSetSpec) SwaggerDoc() map[string]string { @@ -96,9 +96,9 @@ func (DaemonSetSpec) SwaggerDoc() map[string]string { var map_DaemonSetStatus = map[string]string{ "": "DaemonSetStatus represents the current status of a daemon set.", - "currentNumberScheduled": "CurrentNumberScheduled is the number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md", - "numberMisscheduled": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md", - "desiredNumberScheduled": "DesiredNumberScheduled is the total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: http://releases.k8s.io/release-1.3/docs/admin/daemons.md", + "currentNumberScheduled": "CurrentNumberScheduled is the number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md", + "numberMisscheduled": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md", + "desiredNumberScheduled": "DesiredNumberScheduled is the total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: http://releases.k8s.io/release-1.4/docs/admin/daemons.md", } func (DaemonSetStatus) SwaggerDoc() map[string]string { @@ -198,7 +198,7 @@ func (FSGroupStrategyOptions) SwaggerDoc() map[string]string { var map_HTTPIngressPath = map[string]string{ "": "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.", - "path": "Path is a extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.", + "path": "Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.", "backend": "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", } @@ -217,8 +217,8 @@ func (HTTPIngressRuleValue) SwaggerDoc() map[string]string { var map_HorizontalPodAutoscaler = map[string]string{ "": "configuration of a horizontal pod autoscaler.", - "metadata": "Standard object metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "behaviour of autoscaler. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status.", + "metadata": "Standard object metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "behaviour of autoscaler. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status.", "status": "current information about the autoscaler.", } @@ -283,9 +283,9 @@ func (IDRange) SwaggerDoc() map[string]string { var map_Ingress = map[string]string{ "": "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec is the desired state of the Ingress. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status is the current state of the Ingress. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec is the desired state of the Ingress. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is the current state of the Ingress. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (Ingress) SwaggerDoc() map[string]string { @@ -304,7 +304,7 @@ func (IngressBackend) SwaggerDoc() map[string]string { var map_IngressList = map[string]string{ "": "IngressList is a collection of Ingress.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is the list of Ingress.", } @@ -361,9 +361,9 @@ func (IngressTLS) SwaggerDoc() map[string]string { var map_Job = map[string]string{ "": "Job represents the configuration of a single job.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec is a structure defining the expected behavior of a job. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status is a structure describing current status of a job. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec is a structure defining the expected behavior of a job. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is a structure describing current status of a job. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (Job) SwaggerDoc() map[string]string { @@ -386,7 +386,7 @@ func (JobCondition) SwaggerDoc() map[string]string { var map_JobList = map[string]string{ "": "JobList is a collection of jobs.", - "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is the list of Job.", } @@ -396,12 +396,12 @@ func (JobList) SwaggerDoc() map[string]string { var map_JobSpec = map[string]string{ "": "JobSpec describes how the job execution will look like.", - "parallelism": "Parallelism specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", - "completions": "Completions specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "parallelism": "Parallelism specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", + "completions": "Completions specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", "activeDeadlineSeconds": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", - "selector": "Selector is a label query over pods that should match the pod count. Normally, the system sets this field for you. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", - "autoSelector": "AutoSelector controls generation of pod labels and pod selectors. It was not present in the original extensions/v1beta1 Job definition, but exists to allow conversion from batch/v1 Jobs, where it corresponds to, but has the opposite meaning as, ManualSelector. More info: http://releases.k8s.io/release-1.3/docs/design/selector-generation.md", - "template": "Template is the object that describes the pod that will be created when executing a job. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "selector": "Selector is a label query over pods that should match the pod count. Normally, the system sets this field for you. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", + "autoSelector": "AutoSelector controls generation of pod labels and pod selectors. It was not present in the original extensions/v1beta1 Job definition, but exists to allow conversion from batch/v1 Jobs, where it corresponds to, but has the opposite meaning as, ManualSelector. More info: http://releases.k8s.io/release-1.4/docs/design/selector-generation.md", + "template": "Template is the object that describes the pod that will be created when executing a job. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", } func (JobSpec) SwaggerDoc() map[string]string { @@ -410,7 +410,7 @@ func (JobSpec) SwaggerDoc() map[string]string { var map_JobStatus = map[string]string{ "": "JobStatus represents the current state of a Job.", - "conditions": "Conditions represent the latest available observations of an object's current state. More info: http://releases.k8s.io/release-1.3/docs/user-guide/jobs.md", + "conditions": "Conditions represent the latest available observations of an object's current state. More info: http://releases.k8s.io/release-1.4/docs/user-guide/jobs.md", "startTime": "StartTime represents time when the job was acknowledged by the Job Manager. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", "completionTime": "CompletionTime represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", "active": "Active is the number of actively running pods.", @@ -457,7 +457,7 @@ func (ListOptions) SwaggerDoc() map[string]string { } var map_NetworkPolicy = map[string]string{ - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "spec": "Specification of the desired behavior for this NetworkPolicy.", } @@ -477,7 +477,7 @@ func (NetworkPolicyIngressRule) SwaggerDoc() map[string]string { var map_NetworkPolicyList = map[string]string{ "": "Network Policy List is a list of NetworkPolicy objects.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is a list of schema objects.", } @@ -514,7 +514,7 @@ func (NetworkPolicySpec) SwaggerDoc() map[string]string { var map_PodSecurityPolicy = map[string]string{ "": "Pod Security Policy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.", - "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "spec": "spec defines the policy enforced.", } @@ -524,7 +524,7 @@ func (PodSecurityPolicy) SwaggerDoc() map[string]string { var map_PodSecurityPolicyList = map[string]string{ "": "Pod Security Policy List is a list of PodSecurityPolicy objects.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is a list of schema objects.", } @@ -556,9 +556,9 @@ func (PodSecurityPolicySpec) SwaggerDoc() map[string]string { var map_ReplicaSet = map[string]string{ "": "ReplicaSet represents the configuration of a ReplicaSet.", - "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", - "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", - "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status", + "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", + "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", + "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status", } func (ReplicaSet) SwaggerDoc() map[string]string { @@ -567,8 +567,8 @@ func (ReplicaSet) SwaggerDoc() map[string]string { var map_ReplicaSetList = map[string]string{ "": "ReplicaSetList is a collection of ReplicaSets.", - "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "items": "List of ReplicaSets. More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md", + "metadata": "Standard list metadata. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "items": "List of ReplicaSets. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md", } func (ReplicaSetList) SwaggerDoc() map[string]string { @@ -577,9 +577,9 @@ func (ReplicaSetList) SwaggerDoc() map[string]string { var map_ReplicaSetSpec = map[string]string{ "": "ReplicaSetSpec is the specification of a ReplicaSet.", - "replicas": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller", - "selector": "Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", - "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#pod-template", + "replicas": "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller", + "selector": "Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", + "template": "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#pod-template", } func (ReplicaSetSpec) SwaggerDoc() map[string]string { @@ -588,8 +588,9 @@ func (ReplicaSetSpec) SwaggerDoc() map[string]string { var map_ReplicaSetStatus = map[string]string{ "": "ReplicaSetStatus represents the current status of a ReplicaSet.", - "replicas": "Replicas is the most recently oberved number of replicas. More info: http://releases.k8s.io/release-1.3/docs/user-guide/replication-controller.md#what-is-a-replication-controller", + "replicas": "Replicas is the most recently oberved number of replicas. More info: http://releases.k8s.io/release-1.4/docs/user-guide/replication-controller.md#what-is-a-replication-controller", "fullyLabeledReplicas": "The number of pods that have labels matching the labels of the pod template of the replicaset.", + "readyReplicas": "The number of ready replicas for this replica set.", "observedGeneration": "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", } @@ -636,7 +637,7 @@ func (RunAsUserStrategyOptions) SwaggerDoc() map[string]string { var map_SELinuxStrategyOptions = map[string]string{ "": "SELinux Strategy Options defines the strategy type and any options used to create the strategy.", "rule": "type is the strategy that will dictate the allowable labels that may be set.", - "seLinuxOptions": "seLinuxOptions required to run as; required for MustRunAs More info: http://releases.k8s.io/release-1.3/docs/design/security_context.md#security-context", + "seLinuxOptions": "seLinuxOptions required to run as; required for MustRunAs More info: http://releases.k8s.io/release-1.4/docs/design/security_context.md#security-context", } func (SELinuxStrategyOptions) SwaggerDoc() map[string]string { @@ -645,9 +646,9 @@ func (SELinuxStrategyOptions) SwaggerDoc() map[string]string { var map_Scale = map[string]string{ "": "represents a scaling request for a resource.", - "metadata": "Standard object metadata; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata.", - "spec": "defines the behavior of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status.", - "status": "current status of the scale. More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#spec-and-status. Read-only.", + "metadata": "Standard object metadata; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata.", + "spec": "defines the behavior of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status.", + "status": "current status of the scale. More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#spec-and-status. Read-only.", } func (Scale) SwaggerDoc() map[string]string { @@ -666,8 +667,8 @@ func (ScaleSpec) SwaggerDoc() map[string]string { var map_ScaleStatus = map[string]string{ "": "represents the current status of a scale subresource.", "replicas": "actual number of observed instances of the scaled object.", - "selector": "label query over pods that should match the replicas count. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", - "targetSelector": "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: http://releases.k8s.io/release-1.3/docs/user-guide/labels.md#label-selectors", + "selector": "label query over pods that should match the replicas count. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", + "targetSelector": "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: http://releases.k8s.io/release-1.4/docs/user-guide/labels.md#label-selectors", } func (ScaleStatus) SwaggerDoc() map[string]string { @@ -676,8 +677,8 @@ func (ScaleStatus) SwaggerDoc() map[string]string { var map_SubresourceReference = map[string]string{ "": "SubresourceReference contains enough information to let you inspect or modify the referred subresource.", - "kind": "Kind of the referent; More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#types-kinds", - "name": "Name of the referent; More info: http://releases.k8s.io/release-1.3/docs/user-guide/identifiers.md#names", + "kind": "Kind of the referent; More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#types-kinds", + "name": "Name of the referent; More info: http://releases.k8s.io/release-1.4/docs/user-guide/identifiers.md#names", "apiVersion": "API version of the referent", "subresource": "Subresource name of the referent", } @@ -719,7 +720,7 @@ func (ThirdPartyResourceData) SwaggerDoc() map[string]string { var map_ThirdPartyResourceDataList = map[string]string{ "": "ThirdPartyResrouceDataList is a list of ThirdPartyResourceData.", - "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.3/docs/devel/api-conventions.md#metadata", + "metadata": "Standard list metadata More info: http://releases.k8s.io/release-1.4/docs/devel/api-conventions.md#metadata", "items": "Items is the list of ThirdpartyResourceData.", } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.conversion.go similarity index 93% rename from vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/conversion_generated.go rename to vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.conversion.go index 445394f1..70d33c10 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,10 +28,17 @@ import ( batch "k8s.io/kubernetes/pkg/apis/batch" extensions "k8s.io/kubernetes/pkg/apis/extensions" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1beta1_APIVersion_To_extensions_APIVersion, Convert_extensions_APIVersion_To_v1beta1_APIVersion, Convert_v1beta1_CustomMetricCurrentStatus_To_extensions_CustomMetricCurrentStatus, @@ -62,6 +69,8 @@ func init() { Convert_extensions_DeploymentStatus_To_v1beta1_DeploymentStatus, Convert_v1beta1_DeploymentStrategy_To_extensions_DeploymentStrategy, Convert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy, + Convert_v1beta1_ExportOptions_To_api_ExportOptions, + Convert_api_ExportOptions_To_v1beta1_ExportOptions, Convert_v1beta1_FSGroupStrategyOptions_To_extensions_FSGroupStrategyOptions, Convert_extensions_FSGroupStrategyOptions_To_v1beta1_FSGroupStrategyOptions, Convert_v1beta1_HTTPIngressPath_To_extensions_HTTPIngressPath, @@ -110,6 +119,8 @@ func init() { Convert_unversioned_LabelSelector_To_v1beta1_LabelSelector, Convert_v1beta1_LabelSelectorRequirement_To_unversioned_LabelSelectorRequirement, Convert_unversioned_LabelSelectorRequirement_To_v1beta1_LabelSelectorRequirement, + Convert_v1beta1_ListOptions_To_api_ListOptions, + Convert_api_ListOptions_To_v1beta1_ListOptions, Convert_v1beta1_NetworkPolicy_To_extensions_NetworkPolicy, Convert_extensions_NetworkPolicy_To_v1beta1_NetworkPolicy, Convert_v1beta1_NetworkPolicyIngressRule_To_extensions_NetworkPolicyIngressRule, @@ -162,10 +173,7 @@ func init() { Convert_extensions_ThirdPartyResourceDataList_To_v1beta1_ThirdPartyResourceDataList, Convert_v1beta1_ThirdPartyResourceList_To_extensions_ThirdPartyResourceList, Convert_extensions_ThirdPartyResourceList_To_v1beta1_ThirdPartyResourceList, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v1beta1_APIVersion_To_extensions_APIVersion(in *APIVersion, out *extensions.APIVersion, s conversion.Scope) error { @@ -590,6 +598,74 @@ func Convert_extensions_DeploymentRollback_To_v1beta1_DeploymentRollback(in *ext return autoConvert_extensions_DeploymentRollback_To_v1beta1_DeploymentRollback(in, out, s) } +func autoConvert_v1beta1_DeploymentSpec_To_extensions_DeploymentSpec(in *DeploymentSpec, out *extensions.DeploymentSpec, s conversion.Scope) error { + if err := api.Convert_Pointer_int32_To_int32(&in.Replicas, &out.Replicas, s); err != nil { + return err + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := Convert_v1beta1_LabelSelector_To_unversioned_LabelSelector(*in, *out, s); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := v1.Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { + return err + } + if err := Convert_v1beta1_DeploymentStrategy_To_extensions_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil { + return err + } + out.MinReadySeconds = in.MinReadySeconds + out.RevisionHistoryLimit = in.RevisionHistoryLimit + out.Paused = in.Paused + if in.RollbackTo != nil { + in, out := &in.RollbackTo, &out.RollbackTo + *out = new(extensions.RollbackConfig) + if err := Convert_v1beta1_RollbackConfig_To_extensions_RollbackConfig(*in, *out, s); err != nil { + return err + } + } else { + out.RollbackTo = nil + } + return nil +} + +func autoConvert_extensions_DeploymentSpec_To_v1beta1_DeploymentSpec(in *extensions.DeploymentSpec, out *DeploymentSpec, s conversion.Scope) error { + if err := api.Convert_int32_To_Pointer_int32(&in.Replicas, &out.Replicas, s); err != nil { + return err + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(LabelSelector) + if err := Convert_unversioned_LabelSelector_To_v1beta1_LabelSelector(*in, *out, s); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := v1.Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { + return err + } + if err := Convert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy(&in.Strategy, &out.Strategy, s); err != nil { + return err + } + out.MinReadySeconds = in.MinReadySeconds + out.RevisionHistoryLimit = in.RevisionHistoryLimit + out.Paused = in.Paused + if in.RollbackTo != nil { + in, out := &in.RollbackTo, &out.RollbackTo + *out = new(RollbackConfig) + if err := Convert_extensions_RollbackConfig_To_v1beta1_RollbackConfig(*in, *out, s); err != nil { + return err + } + } else { + out.RollbackTo = nil + } + return nil +} + func autoConvert_v1beta1_DeploymentStatus_To_extensions_DeploymentStatus(in *DeploymentStatus, out *extensions.DeploymentStatus, s conversion.Scope) error { out.ObservedGeneration = in.ObservedGeneration out.Replicas = in.Replicas @@ -644,6 +720,32 @@ func autoConvert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy(in return nil } +func autoConvert_v1beta1_ExportOptions_To_api_ExportOptions(in *ExportOptions, out *api.ExportOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Export = in.Export + out.Exact = in.Exact + return nil +} + +func Convert_v1beta1_ExportOptions_To_api_ExportOptions(in *ExportOptions, out *api.ExportOptions, s conversion.Scope) error { + return autoConvert_v1beta1_ExportOptions_To_api_ExportOptions(in, out, s) +} + +func autoConvert_api_ExportOptions_To_v1beta1_ExportOptions(in *api.ExportOptions, out *ExportOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + out.Export = in.Export + out.Exact = in.Exact + return nil +} + +func Convert_api_ExportOptions_To_v1beta1_ExportOptions(in *api.ExportOptions, out *ExportOptions, s conversion.Scope) error { + return autoConvert_api_ExportOptions_To_v1beta1_ExportOptions(in, out, s) +} + func autoConvert_v1beta1_FSGroupStrategyOptions_To_extensions_FSGroupStrategyOptions(in *FSGroupStrategyOptions, out *extensions.FSGroupStrategyOptions, s conversion.Scope) error { out.Rule = extensions.FSGroupStrategyType(in.Rule) if in.Ranges != nil { @@ -1440,6 +1542,46 @@ func Convert_unversioned_LabelSelectorRequirement_To_v1beta1_LabelSelectorRequir return autoConvert_unversioned_LabelSelectorRequirement_To_v1beta1_LabelSelectorRequirement(in, out, s) } +func autoConvert_v1beta1_ListOptions_To_api_ListOptions(in *ListOptions, out *api.ListOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_string_To_labels_Selector(&in.LabelSelector, &out.LabelSelector, s); err != nil { + return err + } + if err := api.Convert_string_To_fields_Selector(&in.FieldSelector, &out.FieldSelector, s); err != nil { + return err + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + out.TimeoutSeconds = in.TimeoutSeconds + return nil +} + +func Convert_v1beta1_ListOptions_To_api_ListOptions(in *ListOptions, out *api.ListOptions, s conversion.Scope) error { + return autoConvert_v1beta1_ListOptions_To_api_ListOptions(in, out, s) +} + +func autoConvert_api_ListOptions_To_v1beta1_ListOptions(in *api.ListOptions, out *ListOptions, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_labels_Selector_To_string(&in.LabelSelector, &out.LabelSelector, s); err != nil { + return err + } + if err := api.Convert_fields_Selector_To_string(&in.FieldSelector, &out.FieldSelector, s); err != nil { + return err + } + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + out.TimeoutSeconds = in.TimeoutSeconds + return nil +} + +func Convert_api_ListOptions_To_v1beta1_ListOptions(in *api.ListOptions, out *ListOptions, s conversion.Scope) error { + return autoConvert_api_ListOptions_To_v1beta1_ListOptions(in, out, s) +} + func autoConvert_v1beta1_NetworkPolicy_To_extensions_NetworkPolicy(in *NetworkPolicy, out *extensions.NetworkPolicy, s conversion.Scope) error { SetDefaults_NetworkPolicy(in) if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { @@ -2038,9 +2180,48 @@ func Convert_extensions_ReplicaSetList_To_v1beta1_ReplicaSetList(in *extensions. return autoConvert_extensions_ReplicaSetList_To_v1beta1_ReplicaSetList(in, out, s) } +func autoConvert_v1beta1_ReplicaSetSpec_To_extensions_ReplicaSetSpec(in *ReplicaSetSpec, out *extensions.ReplicaSetSpec, s conversion.Scope) error { + if err := api.Convert_Pointer_int32_To_int32(&in.Replicas, &out.Replicas, s); err != nil { + return err + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := Convert_v1beta1_LabelSelector_To_unversioned_LabelSelector(*in, *out, s); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := v1.Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { + return err + } + return nil +} + +func autoConvert_extensions_ReplicaSetSpec_To_v1beta1_ReplicaSetSpec(in *extensions.ReplicaSetSpec, out *ReplicaSetSpec, s conversion.Scope) error { + if err := api.Convert_int32_To_Pointer_int32(&in.Replicas, &out.Replicas, s); err != nil { + return err + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(LabelSelector) + if err := Convert_unversioned_LabelSelector_To_v1beta1_LabelSelector(*in, *out, s); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := v1.Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil { + return err + } + return nil +} + func autoConvert_v1beta1_ReplicaSetStatus_To_extensions_ReplicaSetStatus(in *ReplicaSetStatus, out *extensions.ReplicaSetStatus, s conversion.Scope) error { out.Replicas = in.Replicas out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas out.ObservedGeneration = in.ObservedGeneration return nil } @@ -2052,6 +2233,7 @@ func Convert_v1beta1_ReplicaSetStatus_To_extensions_ReplicaSetStatus(in *Replica func autoConvert_extensions_ReplicaSetStatus_To_v1beta1_ReplicaSetStatus(in *extensions.ReplicaSetStatus, out *ReplicaSetStatus, s conversion.Scope) error { out.Replicas = in.Replicas out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas out.ObservedGeneration = in.ObservedGeneration return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000..7d1539ed --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,1451 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1beta1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + intstr "k8s.io/kubernetes/pkg/util/intstr" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_APIVersion, InType: reflect.TypeOf(&APIVersion{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CPUTargetUtilization, InType: reflect.TypeOf(&CPUTargetUtilization{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CustomMetricCurrentStatus, InType: reflect.TypeOf(&CustomMetricCurrentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CustomMetricCurrentStatusList, InType: reflect.TypeOf(&CustomMetricCurrentStatusList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CustomMetricTarget, InType: reflect.TypeOf(&CustomMetricTarget{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_CustomMetricTargetList, InType: reflect.TypeOf(&CustomMetricTargetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DaemonSet, InType: reflect.TypeOf(&DaemonSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DaemonSetList, InType: reflect.TypeOf(&DaemonSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DaemonSetSpec, InType: reflect.TypeOf(&DaemonSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DaemonSetStatus, InType: reflect.TypeOf(&DaemonSetStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_Deployment, InType: reflect.TypeOf(&Deployment{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DeploymentList, InType: reflect.TypeOf(&DeploymentList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DeploymentRollback, InType: reflect.TypeOf(&DeploymentRollback{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DeploymentSpec, InType: reflect.TypeOf(&DeploymentSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DeploymentStatus, InType: reflect.TypeOf(&DeploymentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_DeploymentStrategy, InType: reflect.TypeOf(&DeploymentStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ExportOptions, InType: reflect.TypeOf(&ExportOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_FSGroupStrategyOptions, InType: reflect.TypeOf(&FSGroupStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_HTTPIngressPath, InType: reflect.TypeOf(&HTTPIngressPath{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_HTTPIngressRuleValue, InType: reflect.TypeOf(&HTTPIngressRuleValue{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_HorizontalPodAutoscaler, InType: reflect.TypeOf(&HorizontalPodAutoscaler{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_HorizontalPodAutoscalerList, InType: reflect.TypeOf(&HorizontalPodAutoscalerList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_HorizontalPodAutoscalerSpec, InType: reflect.TypeOf(&HorizontalPodAutoscalerSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_HorizontalPodAutoscalerStatus, InType: reflect.TypeOf(&HorizontalPodAutoscalerStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_HostPortRange, InType: reflect.TypeOf(&HostPortRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_IDRange, InType: reflect.TypeOf(&IDRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_Ingress, InType: reflect.TypeOf(&Ingress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_IngressBackend, InType: reflect.TypeOf(&IngressBackend{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_IngressList, InType: reflect.TypeOf(&IngressList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_IngressRule, InType: reflect.TypeOf(&IngressRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_IngressRuleValue, InType: reflect.TypeOf(&IngressRuleValue{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_IngressSpec, InType: reflect.TypeOf(&IngressSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_IngressStatus, InType: reflect.TypeOf(&IngressStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_IngressTLS, InType: reflect.TypeOf(&IngressTLS{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_Job, InType: reflect.TypeOf(&Job{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_JobCondition, InType: reflect.TypeOf(&JobCondition{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_JobList, InType: reflect.TypeOf(&JobList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_JobSpec, InType: reflect.TypeOf(&JobSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_JobStatus, InType: reflect.TypeOf(&JobStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_LabelSelector, InType: reflect.TypeOf(&LabelSelector{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_LabelSelectorRequirement, InType: reflect.TypeOf(&LabelSelectorRequirement{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ListOptions, InType: reflect.TypeOf(&ListOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_NetworkPolicy, InType: reflect.TypeOf(&NetworkPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_NetworkPolicyIngressRule, InType: reflect.TypeOf(&NetworkPolicyIngressRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_NetworkPolicyList, InType: reflect.TypeOf(&NetworkPolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_NetworkPolicyPeer, InType: reflect.TypeOf(&NetworkPolicyPeer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_NetworkPolicyPort, InType: reflect.TypeOf(&NetworkPolicyPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_NetworkPolicySpec, InType: reflect.TypeOf(&NetworkPolicySpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_PodSecurityPolicy, InType: reflect.TypeOf(&PodSecurityPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_PodSecurityPolicyList, InType: reflect.TypeOf(&PodSecurityPolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_PodSecurityPolicySpec, InType: reflect.TypeOf(&PodSecurityPolicySpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ReplicaSet, InType: reflect.TypeOf(&ReplicaSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ReplicaSetList, InType: reflect.TypeOf(&ReplicaSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ReplicaSetSpec, InType: reflect.TypeOf(&ReplicaSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ReplicaSetStatus, InType: reflect.TypeOf(&ReplicaSetStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ReplicationControllerDummy, InType: reflect.TypeOf(&ReplicationControllerDummy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_RollbackConfig, InType: reflect.TypeOf(&RollbackConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_RollingUpdateDeployment, InType: reflect.TypeOf(&RollingUpdateDeployment{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_RunAsUserStrategyOptions, InType: reflect.TypeOf(&RunAsUserStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_SELinuxStrategyOptions, InType: reflect.TypeOf(&SELinuxStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_Scale, InType: reflect.TypeOf(&Scale{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ScaleSpec, InType: reflect.TypeOf(&ScaleSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ScaleStatus, InType: reflect.TypeOf(&ScaleStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_SubresourceReference, InType: reflect.TypeOf(&SubresourceReference{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_SupplementalGroupsStrategyOptions, InType: reflect.TypeOf(&SupplementalGroupsStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ThirdPartyResource, InType: reflect.TypeOf(&ThirdPartyResource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ThirdPartyResourceData, InType: reflect.TypeOf(&ThirdPartyResourceData{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ThirdPartyResourceDataList, InType: reflect.TypeOf(&ThirdPartyResourceDataList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_ThirdPartyResourceList, InType: reflect.TypeOf(&ThirdPartyResourceList{})}, + ) +} + +func DeepCopy_v1beta1_APIVersion(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIVersion) + out := out.(*APIVersion) + out.Name = in.Name + return nil + } +} + +func DeepCopy_v1beta1_CPUTargetUtilization(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CPUTargetUtilization) + out := out.(*CPUTargetUtilization) + out.TargetPercentage = in.TargetPercentage + return nil + } +} + +func DeepCopy_v1beta1_CustomMetricCurrentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricCurrentStatus) + out := out.(*CustomMetricCurrentStatus) + out.Name = in.Name + out.CurrentValue = in.CurrentValue.DeepCopy() + return nil + } +} + +func DeepCopy_v1beta1_CustomMetricCurrentStatusList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricCurrentStatusList) + out := out.(*CustomMetricCurrentStatusList) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CustomMetricCurrentStatus, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_CustomMetricCurrentStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_CustomMetricTarget(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricTarget) + out := out.(*CustomMetricTarget) + out.Name = in.Name + out.TargetValue = in.TargetValue.DeepCopy() + return nil + } +} + +func DeepCopy_v1beta1_CustomMetricTargetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricTargetList) + out := out.(*CustomMetricTargetList) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CustomMetricTarget, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_CustomMetricTarget(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_DaemonSet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSet) + out := out.(*DaemonSet) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_DaemonSetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1beta1_DaemonSetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetList) + out := out.(*DaemonSetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DaemonSet, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_DaemonSet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_DaemonSetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetSpec) + out := out.(*DaemonSetSpec) + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(LabelSelector) + if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := v1.DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_DaemonSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetStatus) + out := out.(*DaemonSetStatus) + out.CurrentNumberScheduled = in.CurrentNumberScheduled + out.NumberMisscheduled = in.NumberMisscheduled + out.DesiredNumberScheduled = in.DesiredNumberScheduled + return nil + } +} + +func DeepCopy_v1beta1_Deployment(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Deployment) + out := out.(*Deployment) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_DeploymentSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1beta1_DeploymentList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentList) + out := out.(*DeploymentList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Deployment, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_Deployment(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_DeploymentRollback(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentRollback) + out := out.(*DeploymentRollback) + out.TypeMeta = in.TypeMeta + out.Name = in.Name + if in.UpdatedAnnotations != nil { + in, out := &in.UpdatedAnnotations, &out.UpdatedAnnotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.UpdatedAnnotations = nil + } + out.RollbackTo = in.RollbackTo + return nil + } +} + +func DeepCopy_v1beta1_DeploymentSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentSpec) + out := out.(*DeploymentSpec) + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } else { + out.Replicas = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(LabelSelector) + if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := v1.DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_DeploymentStrategy(&in.Strategy, &out.Strategy, c); err != nil { + return err + } + out.MinReadySeconds = in.MinReadySeconds + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } else { + out.RevisionHistoryLimit = nil + } + out.Paused = in.Paused + if in.RollbackTo != nil { + in, out := &in.RollbackTo, &out.RollbackTo + *out = new(RollbackConfig) + **out = **in + } else { + out.RollbackTo = nil + } + return nil + } +} + +func DeepCopy_v1beta1_DeploymentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentStatus) + out := out.(*DeploymentStatus) + out.ObservedGeneration = in.ObservedGeneration + out.Replicas = in.Replicas + out.UpdatedReplicas = in.UpdatedReplicas + out.AvailableReplicas = in.AvailableReplicas + out.UnavailableReplicas = in.UnavailableReplicas + return nil + } +} + +func DeepCopy_v1beta1_DeploymentStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentStrategy) + out := out.(*DeploymentStrategy) + out.Type = in.Type + if in.RollingUpdate != nil { + in, out := &in.RollingUpdate, &out.RollingUpdate + *out = new(RollingUpdateDeployment) + if err := DeepCopy_v1beta1_RollingUpdateDeployment(*in, *out, c); err != nil { + return err + } + } else { + out.RollingUpdate = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ExportOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ExportOptions) + out := out.(*ExportOptions) + out.TypeMeta = in.TypeMeta + out.Export = in.Export + out.Exact = in.Exact + return nil + } +} + +func DeepCopy_v1beta1_FSGroupStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FSGroupStrategyOptions) + out := out.(*FSGroupStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_v1beta1_HTTPIngressPath(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPIngressPath) + out := out.(*HTTPIngressPath) + out.Path = in.Path + out.Backend = in.Backend + return nil + } +} + +func DeepCopy_v1beta1_HTTPIngressRuleValue(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPIngressRuleValue) + out := out.(*HTTPIngressRuleValue) + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]HTTPIngressPath, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Paths = nil + } + return nil + } +} + +func DeepCopy_v1beta1_HorizontalPodAutoscaler(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscaler) + out := out.(*HorizontalPodAutoscaler) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_HorizontalPodAutoscalerSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_HorizontalPodAutoscalerStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_HorizontalPodAutoscalerList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerList) + out := out.(*HorizontalPodAutoscalerList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]HorizontalPodAutoscaler, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_HorizontalPodAutoscaler(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_HorizontalPodAutoscalerSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerSpec) + out := out.(*HorizontalPodAutoscalerSpec) + out.ScaleRef = in.ScaleRef + if in.MinReplicas != nil { + in, out := &in.MinReplicas, &out.MinReplicas + *out = new(int32) + **out = **in + } else { + out.MinReplicas = nil + } + out.MaxReplicas = in.MaxReplicas + if in.CPUUtilization != nil { + in, out := &in.CPUUtilization, &out.CPUUtilization + *out = new(CPUTargetUtilization) + **out = **in + } else { + out.CPUUtilization = nil + } + return nil + } +} + +func DeepCopy_v1beta1_HorizontalPodAutoscalerStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HorizontalPodAutoscalerStatus) + out := out.(*HorizontalPodAutoscalerStatus) + if in.ObservedGeneration != nil { + in, out := &in.ObservedGeneration, &out.ObservedGeneration + *out = new(int64) + **out = **in + } else { + out.ObservedGeneration = nil + } + if in.LastScaleTime != nil { + in, out := &in.LastScaleTime, &out.LastScaleTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.LastScaleTime = nil + } + out.CurrentReplicas = in.CurrentReplicas + out.DesiredReplicas = in.DesiredReplicas + if in.CurrentCPUUtilizationPercentage != nil { + in, out := &in.CurrentCPUUtilizationPercentage, &out.CurrentCPUUtilizationPercentage + *out = new(int32) + **out = **in + } else { + out.CurrentCPUUtilizationPercentage = nil + } + return nil + } +} + +func DeepCopy_v1beta1_HostPortRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostPortRange) + out := out.(*HostPortRange) + out.Min = in.Min + out.Max = in.Max + return nil + } +} + +func DeepCopy_v1beta1_IDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IDRange) + out := out.(*IDRange) + out.Min = in.Min + out.Max = in.Max + return nil + } +} + +func DeepCopy_v1beta1_Ingress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Ingress) + out := out.(*Ingress) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_IngressSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_IngressStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_IngressBackend(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressBackend) + out := out.(*IngressBackend) + out.ServiceName = in.ServiceName + out.ServicePort = in.ServicePort + return nil + } +} + +func DeepCopy_v1beta1_IngressList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressList) + out := out.(*IngressList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Ingress, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_Ingress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_IngressRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressRule) + out := out.(*IngressRule) + out.Host = in.Host + if err := DeepCopy_v1beta1_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_IngressRuleValue(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressRuleValue) + out := out.(*IngressRuleValue) + if in.HTTP != nil { + in, out := &in.HTTP, &out.HTTP + *out = new(HTTPIngressRuleValue) + if err := DeepCopy_v1beta1_HTTPIngressRuleValue(*in, *out, c); err != nil { + return err + } + } else { + out.HTTP = nil + } + return nil + } +} + +func DeepCopy_v1beta1_IngressSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressSpec) + out := out.(*IngressSpec) + if in.Backend != nil { + in, out := &in.Backend, &out.Backend + *out = new(IngressBackend) + **out = **in + } else { + out.Backend = nil + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = make([]IngressTLS, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_IngressTLS(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.TLS = nil + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]IngressRule, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_IngressRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_v1beta1_IngressStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressStatus) + out := out.(*IngressStatus) + if err := v1.DeepCopy_v1_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_IngressTLS(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressTLS) + out := out.(*IngressTLS) + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Hosts = nil + } + out.SecretName = in.SecretName + return nil + } +} + +func DeepCopy_v1beta1_Job(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Job) + out := out.(*Job) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_JobSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_JobStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_JobCondition(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobCondition) + out := out.(*JobCondition) + out.Type = in.Type + out.Status = in.Status + out.LastProbeTime = in.LastProbeTime.DeepCopy() + out.LastTransitionTime = in.LastTransitionTime.DeepCopy() + out.Reason = in.Reason + out.Message = in.Message + return nil + } +} + +func DeepCopy_v1beta1_JobList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobList) + out := out.(*JobList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Job, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_Job(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_JobSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobSpec) + out := out.(*JobSpec) + if in.Parallelism != nil { + in, out := &in.Parallelism, &out.Parallelism + *out = new(int32) + **out = **in + } else { + out.Parallelism = nil + } + if in.Completions != nil { + in, out := &in.Completions, &out.Completions + *out = new(int32) + **out = **in + } else { + out.Completions = nil + } + if in.ActiveDeadlineSeconds != nil { + in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds + *out = new(int64) + **out = **in + } else { + out.ActiveDeadlineSeconds = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(LabelSelector) + if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if in.AutoSelector != nil { + in, out := &in.AutoSelector, &out.AutoSelector + *out = new(bool) + **out = **in + } else { + out.AutoSelector = nil + } + if err := v1.DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_JobStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*JobStatus) + out := out.(*JobStatus) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]JobCondition, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_JobCondition(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Conditions = nil + } + if in.StartTime != nil { + in, out := &in.StartTime, &out.StartTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.StartTime = nil + } + if in.CompletionTime != nil { + in, out := &in.CompletionTime, &out.CompletionTime + *out = new(unversioned.Time) + **out = (*in).DeepCopy() + } else { + out.CompletionTime = nil + } + out.Active = in.Active + out.Succeeded = in.Succeeded + out.Failed = in.Failed + return nil + } +} + +func DeepCopy_v1beta1_LabelSelector(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelector) + out := out.(*LabelSelector) + if in.MatchLabels != nil { + in, out := &in.MatchLabels, &out.MatchLabels + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.MatchLabels = nil + } + if in.MatchExpressions != nil { + in, out := &in.MatchExpressions, &out.MatchExpressions + *out = make([]LabelSelectorRequirement, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_LabelSelectorRequirement(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.MatchExpressions = nil + } + return nil + } +} + +func DeepCopy_v1beta1_LabelSelectorRequirement(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*LabelSelectorRequirement) + out := out.(*LabelSelectorRequirement) + out.Key = in.Key + out.Operator = in.Operator + if in.Values != nil { + in, out := &in.Values, &out.Values + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Values = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ListOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ListOptions) + out := out.(*ListOptions) + out.TypeMeta = in.TypeMeta + out.LabelSelector = in.LabelSelector + out.FieldSelector = in.FieldSelector + out.Watch = in.Watch + out.ResourceVersion = in.ResourceVersion + if in.TimeoutSeconds != nil { + in, out := &in.TimeoutSeconds, &out.TimeoutSeconds + *out = new(int64) + **out = **in + } else { + out.TimeoutSeconds = nil + } + return nil + } +} + +func DeepCopy_v1beta1_NetworkPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicy) + out := out.(*NetworkPolicy) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_NetworkPolicySpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_NetworkPolicyIngressRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyIngressRule) + out := out.(*NetworkPolicyIngressRule) + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]NetworkPolicyPort, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_NetworkPolicyPort(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = make([]NetworkPolicyPeer, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_NetworkPolicyPeer(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.From = nil + } + return nil + } +} + +func DeepCopy_v1beta1_NetworkPolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyList) + out := out.(*NetworkPolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NetworkPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_NetworkPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_NetworkPolicyPeer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyPeer) + out := out.(*NetworkPolicyPeer) + if in.PodSelector != nil { + in, out := &in.PodSelector, &out.PodSelector + *out = new(LabelSelector) + if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.PodSelector = nil + } + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(LabelSelector) + if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.NamespaceSelector = nil + } + return nil + } +} + +func DeepCopy_v1beta1_NetworkPolicyPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyPort) + out := out.(*NetworkPolicyPort) + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(v1.Protocol) + **out = **in + } else { + out.Protocol = nil + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(intstr.IntOrString) + **out = **in + } else { + out.Port = nil + } + return nil + } +} + +func DeepCopy_v1beta1_NetworkPolicySpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicySpec) + out := out.(*NetworkPolicySpec) + if err := DeepCopy_v1beta1_LabelSelector(&in.PodSelector, &out.PodSelector, c); err != nil { + return err + } + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]NetworkPolicyIngressRule, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_NetworkPolicyIngressRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Ingress = nil + } + return nil + } +} + +func DeepCopy_v1beta1_PodSecurityPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicy) + out := out.(*PodSecurityPolicy) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_PodSecurityPolicySpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_PodSecurityPolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicyList) + out := out.(*PodSecurityPolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodSecurityPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_PodSecurityPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_PodSecurityPolicySpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicySpec) + out := out.(*PodSecurityPolicySpec) + out.Privileged = in.Privileged + if in.DefaultAddCapabilities != nil { + in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities + *out = make([]v1.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.DefaultAddCapabilities = nil + } + if in.RequiredDropCapabilities != nil { + in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities + *out = make([]v1.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.RequiredDropCapabilities = nil + } + if in.AllowedCapabilities != nil { + in, out := &in.AllowedCapabilities, &out.AllowedCapabilities + *out = make([]v1.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AllowedCapabilities = nil + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]FSType, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Volumes = nil + } + out.HostNetwork = in.HostNetwork + if in.HostPorts != nil { + in, out := &in.HostPorts, &out.HostPorts + *out = make([]HostPortRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.HostPorts = nil + } + out.HostPID = in.HostPID + out.HostIPC = in.HostIPC + if err := DeepCopy_v1beta1_SELinuxStrategyOptions(&in.SELinux, &out.SELinux, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { + return err + } + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + return nil + } +} + +func DeepCopy_v1beta1_ReplicaSet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSet) + out := out.(*ReplicaSet) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1beta1_ReplicaSetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1beta1_ReplicaSetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetList) + out := out.(*ReplicaSetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReplicaSet, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_ReplicaSet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ReplicaSetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetSpec) + out := out.(*ReplicaSetSpec) + if in.Replicas != nil { + in, out := &in.Replicas, &out.Replicas + *out = new(int32) + **out = **in + } else { + out.Replicas = nil + } + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(LabelSelector) + if err := DeepCopy_v1beta1_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := v1.DeepCopy_v1_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_ReplicaSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetStatus) + out := out.(*ReplicaSetStatus) + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil + } +} + +func DeepCopy_v1beta1_ReplicationControllerDummy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerDummy) + out := out.(*ReplicationControllerDummy) + out.TypeMeta = in.TypeMeta + return nil + } +} + +func DeepCopy_v1beta1_RollbackConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RollbackConfig) + out := out.(*RollbackConfig) + out.Revision = in.Revision + return nil + } +} + +func DeepCopy_v1beta1_RollingUpdateDeployment(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RollingUpdateDeployment) + out := out.(*RollingUpdateDeployment) + if in.MaxUnavailable != nil { + in, out := &in.MaxUnavailable, &out.MaxUnavailable + *out = new(intstr.IntOrString) + **out = **in + } else { + out.MaxUnavailable = nil + } + if in.MaxSurge != nil { + in, out := &in.MaxSurge, &out.MaxSurge + *out = new(intstr.IntOrString) + **out = **in + } else { + out.MaxSurge = nil + } + return nil + } +} + +func DeepCopy_v1beta1_RunAsUserStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RunAsUserStrategyOptions) + out := out.(*RunAsUserStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_v1beta1_SELinuxStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxStrategyOptions) + out := out.(*SELinuxStrategyOptions) + out.Rule = in.Rule + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(v1.SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + return nil + } +} + +func DeepCopy_v1beta1_Scale(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Scale) + out := out.(*Scale) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_v1beta1_ScaleStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_v1beta1_ScaleSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleSpec) + out := out.(*ScaleSpec) + out.Replicas = in.Replicas + return nil + } +} + +func DeepCopy_v1beta1_ScaleStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleStatus) + out := out.(*ScaleStatus) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Selector = nil + } + out.TargetSelector = in.TargetSelector + return nil + } +} + +func DeepCopy_v1beta1_SubresourceReference(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SubresourceReference) + out := out.(*SubresourceReference) + out.Kind = in.Kind + out.Name = in.Name + out.APIVersion = in.APIVersion + out.Subresource = in.Subresource + return nil + } +} + +func DeepCopy_v1beta1_SupplementalGroupsStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SupplementalGroupsStrategyOptions) + out := out.(*SupplementalGroupsStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ThirdPartyResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResource) + out := out.(*ThirdPartyResource) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Description = in.Description + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]APIVersion, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Versions = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ThirdPartyResourceData(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceData) + out := out.(*ThirdPartyResourceData) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ThirdPartyResourceDataList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceDataList) + out := out.(*ThirdPartyResourceDataList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ThirdPartyResourceData, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_ThirdPartyResourceData(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1beta1_ThirdPartyResourceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceList) + out := out.(*ThirdPartyResourceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ThirdPartyResource, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_ThirdPartyResource(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/validation.go index d0405c37..61fda57c 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/validation/validation.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ import ( apivalidation "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/security/apparmor" psputil "k8s.io/kubernetes/pkg/security/podsecuritypolicy/util" "k8s.io/kubernetes/pkg/util/intstr" "k8s.io/kubernetes/pkg/util/sets" @@ -147,18 +148,24 @@ var ValidateDeploymentName = apivalidation.NameIsDNSSubdomain func ValidatePositiveIntOrPercent(intOrPercent intstr.IntOrString, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if intOrPercent.Type == intstr.String { - if !validation.IsValidPercent(intOrPercent.StrVal) { - allErrs = append(allErrs, field.Invalid(fldPath, intOrPercent, "must be an integer or percentage (e.g '5%')")) + switch intOrPercent.Type { + case intstr.String: + for _, msg := range validation.IsValidPercent(intOrPercent.StrVal) { + allErrs = append(allErrs, field.Invalid(fldPath, intOrPercent, msg)) } - } else if intOrPercent.Type == intstr.Int { + case intstr.Int: allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(intOrPercent.IntValue()), fldPath)...) + default: + allErrs = append(allErrs, field.Invalid(fldPath, intOrPercent, "must be an integer or percentage (e.g '5%%')")) } return allErrs } func getPercentValue(intOrStringValue intstr.IntOrString) (int, bool) { - if intOrStringValue.Type != intstr.String || !validation.IsValidPercent(intOrStringValue.StrVal) { + if intOrStringValue.Type != intstr.String { + return 0, false + } + if len(validation.IsValidPercent(intOrStringValue.StrVal)) != 0 { return 0, false } value, _ := strconv.Atoi(intOrStringValue.StrVal[:len(intOrStringValue.StrVal)-1]) @@ -317,6 +324,20 @@ func validateIngressTLS(spec *extensions.IngressSpec, fldPath *field.Path) field allErrs := field.ErrorList{} // TODO: Perform a more thorough validation of spec.TLS.Hosts that takes // the wildcard spec from RFC 6125 into account. + for _, itls := range spec.TLS { + for i, host := range itls.Hosts { + if strings.Contains(host, "*") { + for _, msg := range validation.IsWildcardDNS1123Subdomain(host) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("hosts"), host, msg)) + } + continue + } + for _, msg := range validation.IsDNS1123Subdomain(host) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("hosts"), host, msg)) + } + } + } + return allErrs } @@ -352,21 +373,27 @@ func ValidateIngressStatusUpdate(ingress, oldIngress *extensions.Ingress) field. return allErrs } -func validateIngressRules(IngressRules []extensions.IngressRule, fldPath *field.Path) field.ErrorList { +func validateIngressRules(ingressRules []extensions.IngressRule, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} - if len(IngressRules) == 0 { + if len(ingressRules) == 0 { return append(allErrs, field.Required(fldPath, "")) } - for i, ih := range IngressRules { + for i, ih := range ingressRules { if len(ih.Host) > 0 { - // TODO: Ports and ips are allowed in the host part of a url - // according to RFC 3986, consider allowing them. - for _, msg := range validation.IsDNS1123Subdomain(ih.Host) { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, msg)) - } if isIP := (net.ParseIP(ih.Host) != nil); isIP { allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, "must be a DNS name, not an IP address")) } + // TODO: Ports and ips are allowed in the host part of a url + // according to RFC 3986, consider allowing them. + if strings.Contains(ih.Host, "*") { + for _, msg := range validation.IsWildcardDNS1123Subdomain(ih.Host) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, msg)) + } + continue + } + for _, msg := range validation.IsDNS1123Subdomain(ih.Host) { + allErrs = append(allErrs, field.Invalid(fldPath.Index(i).Child("host"), ih.Host, msg)) + } } allErrs = append(allErrs, validateIngressRuleValue(&ih.IngressRuleValue, fldPath.Index(0))...) } @@ -422,16 +449,7 @@ func validateIngressBackend(backend *extensions.IngressBackend, fldPath *field.P allErrs = append(allErrs, field.Invalid(fldPath.Child("serviceName"), backend.ServiceName, msg)) } } - if backend.ServicePort.Type == intstr.String { - for _, msg := range validation.IsDNS1123Label(backend.ServicePort.StrVal) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("servicePort"), backend.ServicePort.StrVal, msg)) - } - if !validation.IsValidPortName(backend.ServicePort.StrVal) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("servicePort"), backend.ServicePort.StrVal, apivalidation.PortNameErrorMsg)) - } - } else if !validation.IsValidPortNum(backend.ServicePort.IntValue()) { - allErrs = append(allErrs, field.Invalid(fldPath.Child("servicePort"), backend.ServicePort, apivalidation.PortRangeErrorMsg)) - } + allErrs = append(allErrs, apivalidation.ValidatePortNumOrName(backend.ServicePort, fldPath.Child("servicePort"))...) return allErrs } @@ -535,6 +553,7 @@ var ValidatePodSecurityPolicyName = apivalidation.NameIsDNSSubdomain func ValidatePodSecurityPolicy(psp *extensions.PodSecurityPolicy) field.ErrorList { allErrs := field.ErrorList{} allErrs = append(allErrs, apivalidation.ValidateObjectMeta(&psp.ObjectMeta, false, ValidatePodSecurityPolicyName, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidatePodSecurityPolicySpecificAnnotations(psp.Annotations, field.NewPath("metadata").Child("annotations"))...) allErrs = append(allErrs, ValidatePodSecurityPolicySpec(&psp.Spec, field.NewPath("spec"))...) return allErrs } @@ -553,6 +572,34 @@ func ValidatePodSecurityPolicySpec(spec *extensions.PodSecurityPolicySpec, fldPa return allErrs } +func ValidatePodSecurityPolicySpecificAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + + if p := annotations[apparmor.DefaultProfileAnnotationKey]; p != "" { + if err := apparmor.ValidateProfileFormat(p); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Key(apparmor.DefaultProfileAnnotationKey), p, err.Error())) + } + } + if allowed := annotations[apparmor.AllowedProfilesAnnotationKey]; allowed != "" { + for _, p := range strings.Split(allowed, ",") { + if err := apparmor.ValidateProfileFormat(p); err != nil { + allErrs = append(allErrs, field.Invalid(fldPath.Key(apparmor.AllowedProfilesAnnotationKey), allowed, err.Error())) + } + } + } + + sysctlAnnotation := annotations[extensions.SysctlsPodSecurityPolicyAnnotationKey] + sysctlFldPath := fldPath.Key(extensions.SysctlsPodSecurityPolicyAnnotationKey) + sysctls, err := extensions.SysctlsFromPodSecurityPolicyAnnotation(sysctlAnnotation) + if err != nil { + allErrs = append(allErrs, field.Invalid(sysctlFldPath, sysctlAnnotation, err.Error())) + } else { + allErrs = append(allErrs, validatePodSecurityPolicySysctls(sysctlFldPath, sysctls)...) + } + + return allErrs +} + // validatePSPSELinux validates the SELinux fields of PodSecurityPolicy. func validatePSPSELinux(fldPath *field.Path, seLinux *extensions.SELinuxStrategyOptions) field.ErrorList { allErrs := field.ErrorList{} @@ -638,6 +685,36 @@ func validatePodSecurityPolicyVolumes(fldPath *field.Path, volumes []extensions. return allErrs } +const sysctlPatternSegmentFmt string = "([a-z0-9][-_a-z0-9]*)?[a-z0-9*]" +const SysctlPatternFmt string = "(" + apivalidation.SysctlSegmentFmt + "\\.)*" + sysctlPatternSegmentFmt + +var sysctlPatternRegexp = regexp.MustCompile("^" + SysctlPatternFmt + "$") + +func IsValidSysctlPattern(name string) bool { + if len(name) > apivalidation.SysctlMaxLength { + return false + } + return sysctlPatternRegexp.MatchString(name) +} + +// validatePodSecurityPolicySysctls validates the sysctls fields of PodSecurityPolicy. +func validatePodSecurityPolicySysctls(fldPath *field.Path, sysctls []string) field.ErrorList { + allErrs := field.ErrorList{} + for i, s := range sysctls { + if !IsValidSysctlPattern(string(s)) { + allErrs = append( + allErrs, + field.Invalid(fldPath.Index(i), sysctls[i], fmt.Sprintf("must have at most %d characters and match regex %s", + apivalidation.SysctlMaxLength, + SysctlPatternFmt, + )), + ) + } + } + + return allErrs +} + // validateIDRanges ensures the range is valid. func validateIDRanges(fldPath *field.Path, rng extensions.IDRange) field.ErrorList { allErrs := field.ErrorList{} @@ -685,7 +762,8 @@ func hasCap(needle api.Capability, haystack []api.Capability) bool { // ValidatePodSecurityPolicyUpdate validates a PSP for updates. func ValidatePodSecurityPolicyUpdate(old *extensions.PodSecurityPolicy, new *extensions.PodSecurityPolicy) field.ErrorList { allErrs := field.ErrorList{} - allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&old.ObjectMeta, &new.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, apivalidation.ValidateObjectMetaUpdate(&new.ObjectMeta, &old.ObjectMeta, field.NewPath("metadata"))...) + allErrs = append(allErrs, ValidatePodSecurityPolicySpecificAnnotations(new.Annotations, field.NewPath("metadata").Child("annotations"))...) allErrs = append(allErrs, ValidatePodSecurityPolicySpec(&new.Spec, field.NewPath("spec"))...) return allErrs } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/zz_generated.deepcopy.go new file mode 100644 index 00000000..89ff863f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/zz_generated.deepcopy.go @@ -0,0 +1,1081 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package extensions + +import ( + api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + intstr "k8s.io/kubernetes/pkg/util/intstr" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_APIVersion, InType: reflect.TypeOf(&APIVersion{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_CustomMetricCurrentStatus, InType: reflect.TypeOf(&CustomMetricCurrentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_CustomMetricCurrentStatusList, InType: reflect.TypeOf(&CustomMetricCurrentStatusList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_CustomMetricTarget, InType: reflect.TypeOf(&CustomMetricTarget{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_CustomMetricTargetList, InType: reflect.TypeOf(&CustomMetricTargetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DaemonSet, InType: reflect.TypeOf(&DaemonSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DaemonSetList, InType: reflect.TypeOf(&DaemonSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DaemonSetSpec, InType: reflect.TypeOf(&DaemonSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DaemonSetStatus, InType: reflect.TypeOf(&DaemonSetStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_Deployment, InType: reflect.TypeOf(&Deployment{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentList, InType: reflect.TypeOf(&DeploymentList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentRollback, InType: reflect.TypeOf(&DeploymentRollback{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentSpec, InType: reflect.TypeOf(&DeploymentSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentStatus, InType: reflect.TypeOf(&DeploymentStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentStrategy, InType: reflect.TypeOf(&DeploymentStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_FSGroupStrategyOptions, InType: reflect.TypeOf(&FSGroupStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HTTPIngressPath, InType: reflect.TypeOf(&HTTPIngressPath{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HTTPIngressRuleValue, InType: reflect.TypeOf(&HTTPIngressRuleValue{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HostPortRange, InType: reflect.TypeOf(&HostPortRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IDRange, InType: reflect.TypeOf(&IDRange{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_Ingress, InType: reflect.TypeOf(&Ingress{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressBackend, InType: reflect.TypeOf(&IngressBackend{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressList, InType: reflect.TypeOf(&IngressList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressRule, InType: reflect.TypeOf(&IngressRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressRuleValue, InType: reflect.TypeOf(&IngressRuleValue{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressSpec, InType: reflect.TypeOf(&IngressSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressStatus, InType: reflect.TypeOf(&IngressStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressTLS, InType: reflect.TypeOf(&IngressTLS{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicy, InType: reflect.TypeOf(&NetworkPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicyIngressRule, InType: reflect.TypeOf(&NetworkPolicyIngressRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicyList, InType: reflect.TypeOf(&NetworkPolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicyPeer, InType: reflect.TypeOf(&NetworkPolicyPeer{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicyPort, InType: reflect.TypeOf(&NetworkPolicyPort{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_NetworkPolicySpec, InType: reflect.TypeOf(&NetworkPolicySpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_PodSecurityPolicy, InType: reflect.TypeOf(&PodSecurityPolicy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_PodSecurityPolicyList, InType: reflect.TypeOf(&PodSecurityPolicyList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_PodSecurityPolicySpec, InType: reflect.TypeOf(&PodSecurityPolicySpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicaSet, InType: reflect.TypeOf(&ReplicaSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicaSetList, InType: reflect.TypeOf(&ReplicaSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicaSetSpec, InType: reflect.TypeOf(&ReplicaSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicaSetStatus, InType: reflect.TypeOf(&ReplicaSetStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ReplicationControllerDummy, InType: reflect.TypeOf(&ReplicationControllerDummy{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_RollbackConfig, InType: reflect.TypeOf(&RollbackConfig{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_RollingUpdateDeployment, InType: reflect.TypeOf(&RollingUpdateDeployment{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_RunAsUserStrategyOptions, InType: reflect.TypeOf(&RunAsUserStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_SELinuxStrategyOptions, InType: reflect.TypeOf(&SELinuxStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_Scale, InType: reflect.TypeOf(&Scale{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ScaleSpec, InType: reflect.TypeOf(&ScaleSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ScaleStatus, InType: reflect.TypeOf(&ScaleStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_SupplementalGroupsStrategyOptions, InType: reflect.TypeOf(&SupplementalGroupsStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResource, InType: reflect.TypeOf(&ThirdPartyResource{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceData, InType: reflect.TypeOf(&ThirdPartyResourceData{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceDataList, InType: reflect.TypeOf(&ThirdPartyResourceDataList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceList, InType: reflect.TypeOf(&ThirdPartyResourceList{})}, + ) +} + +func DeepCopy_extensions_APIVersion(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*APIVersion) + out := out.(*APIVersion) + out.Name = in.Name + return nil + } +} + +func DeepCopy_extensions_CustomMetricCurrentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricCurrentStatus) + out := out.(*CustomMetricCurrentStatus) + out.Name = in.Name + out.CurrentValue = in.CurrentValue.DeepCopy() + return nil + } +} + +func DeepCopy_extensions_CustomMetricCurrentStatusList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricCurrentStatusList) + out := out.(*CustomMetricCurrentStatusList) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CustomMetricCurrentStatus, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_CustomMetricCurrentStatus(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_CustomMetricTarget(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricTarget) + out := out.(*CustomMetricTarget) + out.Name = in.Name + out.TargetValue = in.TargetValue.DeepCopy() + return nil + } +} + +func DeepCopy_extensions_CustomMetricTargetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*CustomMetricTargetList) + out := out.(*CustomMetricTargetList) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]CustomMetricTarget, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_CustomMetricTarget(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_DaemonSet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSet) + out := out.(*DaemonSet) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_DaemonSetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_extensions_DaemonSetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetList) + out := out.(*DaemonSetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DaemonSet, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_DaemonSet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_DaemonSetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetSpec) + out := out.(*DaemonSetSpec) + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_DaemonSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DaemonSetStatus) + out := out.(*DaemonSetStatus) + out.CurrentNumberScheduled = in.CurrentNumberScheduled + out.NumberMisscheduled = in.NumberMisscheduled + out.DesiredNumberScheduled = in.DesiredNumberScheduled + return nil + } +} + +func DeepCopy_extensions_Deployment(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Deployment) + out := out.(*Deployment) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_DeploymentSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_extensions_DeploymentList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentList) + out := out.(*DeploymentList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Deployment, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_Deployment(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_DeploymentRollback(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentRollback) + out := out.(*DeploymentRollback) + out.TypeMeta = in.TypeMeta + out.Name = in.Name + if in.UpdatedAnnotations != nil { + in, out := &in.UpdatedAnnotations, &out.UpdatedAnnotations + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.UpdatedAnnotations = nil + } + out.RollbackTo = in.RollbackTo + return nil + } +} + +func DeepCopy_extensions_DeploymentSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentSpec) + out := out.(*DeploymentSpec) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + if err := DeepCopy_extensions_DeploymentStrategy(&in.Strategy, &out.Strategy, c); err != nil { + return err + } + out.MinReadySeconds = in.MinReadySeconds + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + *out = new(int32) + **out = **in + } else { + out.RevisionHistoryLimit = nil + } + out.Paused = in.Paused + if in.RollbackTo != nil { + in, out := &in.RollbackTo, &out.RollbackTo + *out = new(RollbackConfig) + **out = **in + } else { + out.RollbackTo = nil + } + return nil + } +} + +func DeepCopy_extensions_DeploymentStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentStatus) + out := out.(*DeploymentStatus) + out.ObservedGeneration = in.ObservedGeneration + out.Replicas = in.Replicas + out.UpdatedReplicas = in.UpdatedReplicas + out.AvailableReplicas = in.AvailableReplicas + out.UnavailableReplicas = in.UnavailableReplicas + return nil + } +} + +func DeepCopy_extensions_DeploymentStrategy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*DeploymentStrategy) + out := out.(*DeploymentStrategy) + out.Type = in.Type + if in.RollingUpdate != nil { + in, out := &in.RollingUpdate, &out.RollingUpdate + *out = new(RollingUpdateDeployment) + **out = **in + } else { + out.RollingUpdate = nil + } + return nil + } +} + +func DeepCopy_extensions_FSGroupStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*FSGroupStrategyOptions) + out := out.(*FSGroupStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_extensions_HTTPIngressPath(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPIngressPath) + out := out.(*HTTPIngressPath) + out.Path = in.Path + out.Backend = in.Backend + return nil + } +} + +func DeepCopy_extensions_HTTPIngressRuleValue(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HTTPIngressRuleValue) + out := out.(*HTTPIngressRuleValue) + if in.Paths != nil { + in, out := &in.Paths, &out.Paths + *out = make([]HTTPIngressPath, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Paths = nil + } + return nil + } +} + +func DeepCopy_extensions_HostPortRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*HostPortRange) + out := out.(*HostPortRange) + out.Min = in.Min + out.Max = in.Max + return nil + } +} + +func DeepCopy_extensions_IDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IDRange) + out := out.(*IDRange) + out.Min = in.Min + out.Max = in.Max + return nil + } +} + +func DeepCopy_extensions_Ingress(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Ingress) + out := out.(*Ingress) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_IngressSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + if err := DeepCopy_extensions_IngressStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_IngressBackend(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressBackend) + out := out.(*IngressBackend) + out.ServiceName = in.ServiceName + out.ServicePort = in.ServicePort + return nil + } +} + +func DeepCopy_extensions_IngressList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressList) + out := out.(*IngressList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Ingress, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_Ingress(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_IngressRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressRule) + out := out.(*IngressRule) + out.Host = in.Host + if err := DeepCopy_extensions_IngressRuleValue(&in.IngressRuleValue, &out.IngressRuleValue, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_IngressRuleValue(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressRuleValue) + out := out.(*IngressRuleValue) + if in.HTTP != nil { + in, out := &in.HTTP, &out.HTTP + *out = new(HTTPIngressRuleValue) + if err := DeepCopy_extensions_HTTPIngressRuleValue(*in, *out, c); err != nil { + return err + } + } else { + out.HTTP = nil + } + return nil + } +} + +func DeepCopy_extensions_IngressSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressSpec) + out := out.(*IngressSpec) + if in.Backend != nil { + in, out := &in.Backend, &out.Backend + *out = new(IngressBackend) + **out = **in + } else { + out.Backend = nil + } + if in.TLS != nil { + in, out := &in.TLS, &out.TLS + *out = make([]IngressTLS, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_IngressTLS(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.TLS = nil + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]IngressRule, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_IngressRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_extensions_IngressStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressStatus) + out := out.(*IngressStatus) + if err := api.DeepCopy_api_LoadBalancerStatus(&in.LoadBalancer, &out.LoadBalancer, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_IngressTLS(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*IngressTLS) + out := out.(*IngressTLS) + if in.Hosts != nil { + in, out := &in.Hosts, &out.Hosts + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Hosts = nil + } + out.SecretName = in.SecretName + return nil + } +} + +func DeepCopy_extensions_NetworkPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicy) + out := out.(*NetworkPolicy) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_NetworkPolicySpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicyIngressRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyIngressRule) + out := out.(*NetworkPolicyIngressRule) + if in.Ports != nil { + in, out := &in.Ports, &out.Ports + *out = make([]NetworkPolicyPort, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_NetworkPolicyPort(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Ports = nil + } + if in.From != nil { + in, out := &in.From, &out.From + *out = make([]NetworkPolicyPeer, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_NetworkPolicyPeer(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.From = nil + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyList) + out := out.(*NetworkPolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]NetworkPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_NetworkPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicyPeer(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyPeer) + out := out.(*NetworkPolicyPeer) + if in.PodSelector != nil { + in, out := &in.PodSelector, &out.PodSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.PodSelector = nil + } + if in.NamespaceSelector != nil { + in, out := &in.NamespaceSelector, &out.NamespaceSelector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.NamespaceSelector = nil + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicyPort(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicyPort) + out := out.(*NetworkPolicyPort) + if in.Protocol != nil { + in, out := &in.Protocol, &out.Protocol + *out = new(api.Protocol) + **out = **in + } else { + out.Protocol = nil + } + if in.Port != nil { + in, out := &in.Port, &out.Port + *out = new(intstr.IntOrString) + **out = **in + } else { + out.Port = nil + } + return nil + } +} + +func DeepCopy_extensions_NetworkPolicySpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*NetworkPolicySpec) + out := out.(*NetworkPolicySpec) + if err := unversioned.DeepCopy_unversioned_LabelSelector(&in.PodSelector, &out.PodSelector, c); err != nil { + return err + } + if in.Ingress != nil { + in, out := &in.Ingress, &out.Ingress + *out = make([]NetworkPolicyIngressRule, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_NetworkPolicyIngressRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Ingress = nil + } + return nil + } +} + +func DeepCopy_extensions_PodSecurityPolicy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicy) + out := out.(*PodSecurityPolicy) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_PodSecurityPolicySpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_PodSecurityPolicyList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicyList) + out := out.(*PodSecurityPolicyList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodSecurityPolicy, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_PodSecurityPolicy(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_PodSecurityPolicySpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodSecurityPolicySpec) + out := out.(*PodSecurityPolicySpec) + out.Privileged = in.Privileged + if in.DefaultAddCapabilities != nil { + in, out := &in.DefaultAddCapabilities, &out.DefaultAddCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.DefaultAddCapabilities = nil + } + if in.RequiredDropCapabilities != nil { + in, out := &in.RequiredDropCapabilities, &out.RequiredDropCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.RequiredDropCapabilities = nil + } + if in.AllowedCapabilities != nil { + in, out := &in.AllowedCapabilities, &out.AllowedCapabilities + *out = make([]api.Capability, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.AllowedCapabilities = nil + } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]FSType, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Volumes = nil + } + out.HostNetwork = in.HostNetwork + if in.HostPorts != nil { + in, out := &in.HostPorts, &out.HostPorts + *out = make([]HostPortRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.HostPorts = nil + } + out.HostPID = in.HostPID + out.HostIPC = in.HostIPC + if err := DeepCopy_extensions_SELinuxStrategyOptions(&in.SELinux, &out.SELinux, c); err != nil { + return err + } + if err := DeepCopy_extensions_RunAsUserStrategyOptions(&in.RunAsUser, &out.RunAsUser, c); err != nil { + return err + } + if err := DeepCopy_extensions_SupplementalGroupsStrategyOptions(&in.SupplementalGroups, &out.SupplementalGroups, c); err != nil { + return err + } + if err := DeepCopy_extensions_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { + return err + } + out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem + return nil + } +} + +func DeepCopy_extensions_ReplicaSet(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSet) + out := out.(*ReplicaSet) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_extensions_ReplicaSetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_extensions_ReplicaSetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetList) + out := out.(*ReplicaSetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ReplicaSet, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_ReplicaSet(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_ReplicaSetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetSpec) + out := out.(*ReplicaSetSpec) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + if err := api.DeepCopy_api_PodTemplateSpec(&in.Template, &out.Template, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_ReplicaSetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicaSetStatus) + out := out.(*ReplicaSetStatus) + out.Replicas = in.Replicas + out.FullyLabeledReplicas = in.FullyLabeledReplicas + out.ReadyReplicas = in.ReadyReplicas + out.ObservedGeneration = in.ObservedGeneration + return nil + } +} + +func DeepCopy_extensions_ReplicationControllerDummy(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ReplicationControllerDummy) + out := out.(*ReplicationControllerDummy) + out.TypeMeta = in.TypeMeta + return nil + } +} + +func DeepCopy_extensions_RollbackConfig(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RollbackConfig) + out := out.(*RollbackConfig) + out.Revision = in.Revision + return nil + } +} + +func DeepCopy_extensions_RollingUpdateDeployment(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RollingUpdateDeployment) + out := out.(*RollingUpdateDeployment) + out.MaxUnavailable = in.MaxUnavailable + out.MaxSurge = in.MaxSurge + return nil + } +} + +func DeepCopy_extensions_RunAsUserStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RunAsUserStrategyOptions) + out := out.(*RunAsUserStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_extensions_SELinuxStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SELinuxStrategyOptions) + out := out.(*SELinuxStrategyOptions) + out.Rule = in.Rule + if in.SELinuxOptions != nil { + in, out := &in.SELinuxOptions, &out.SELinuxOptions + *out = new(api.SELinuxOptions) + **out = **in + } else { + out.SELinuxOptions = nil + } + return nil + } +} + +func DeepCopy_extensions_Scale(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Scale) + out := out.(*Scale) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Spec = in.Spec + if err := DeepCopy_extensions_ScaleStatus(&in.Status, &out.Status, c); err != nil { + return err + } + return nil + } +} + +func DeepCopy_extensions_ScaleSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleSpec) + out := out.(*ScaleSpec) + out.Replicas = in.Replicas + return nil + } +} + +func DeepCopy_extensions_ScaleStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ScaleStatus) + out := out.(*ScaleStatus) + out.Replicas = in.Replicas + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + return nil + } +} + +func DeepCopy_extensions_SupplementalGroupsStrategyOptions(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*SupplementalGroupsStrategyOptions) + out := out.(*SupplementalGroupsStrategyOptions) + out.Rule = in.Rule + if in.Ranges != nil { + in, out := &in.Ranges, &out.Ranges + *out = make([]IDRange, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Ranges = nil + } + return nil + } +} + +func DeepCopy_extensions_ThirdPartyResource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResource) + out := out.(*ThirdPartyResource) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Description = in.Description + if in.Versions != nil { + in, out := &in.Versions, &out.Versions + *out = make([]APIVersion, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Versions = nil + } + return nil + } +} + +func DeepCopy_extensions_ThirdPartyResourceData(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceData) + out := out.(*ThirdPartyResourceData) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Data = nil + } + return nil + } +} + +func DeepCopy_extensions_ThirdPartyResourceDataList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceDataList) + out := out.(*ThirdPartyResourceDataList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ThirdPartyResourceData, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_ThirdPartyResourceData(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_extensions_ThirdPartyResourceList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ThirdPartyResourceList) + out := out.(*ThirdPartyResourceList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ThirdPartyResource, len(*in)) + for i := range *in { + if err := DeepCopy_extensions_ThirdPartyResource(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/deep_copy_generated.go deleted file mode 100644 index 390e4b4a..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/deep_copy_generated.go +++ /dev/null @@ -1,101 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package policy - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_policy_PodDisruptionBudget, - DeepCopy_policy_PodDisruptionBudgetList, - DeepCopy_policy_PodDisruptionBudgetSpec, - DeepCopy_policy_PodDisruptionBudgetStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_policy_PodDisruptionBudget(in PodDisruptionBudget, out *PodDisruptionBudget, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_policy_PodDisruptionBudgetSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_policy_PodDisruptionBudgetStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_policy_PodDisruptionBudgetList(in PodDisruptionBudgetList, out *PodDisruptionBudgetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PodDisruptionBudget, len(in)) - for i := range in { - if err := DeepCopy_policy_PodDisruptionBudget(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_policy_PodDisruptionBudgetSpec(in PodDisruptionBudgetSpec, out *PodDisruptionBudgetSpec, c *conversion.Cloner) error { - if err := intstr.DeepCopy_intstr_IntOrString(in.MinAvailable, &out.MinAvailable, c); err != nil { - return err - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - return nil -} - -func DeepCopy_policy_PodDisruptionBudgetStatus(in PodDisruptionBudgetStatus, out *PodDisruptionBudgetStatus, c *conversion.Cloner) error { - out.PodDisruptionAllowed = in.PodDisruptionAllowed - out.CurrentHealthy = in.CurrentHealthy - out.DesiredHealthy = in.DesiredHealthy - out.ExpectedPods = in.ExpectedPods - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/doc.go new file mode 100644 index 00000000..876858cd --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register + +package policy diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/install/install.go index 7882a0c5..4ac0ccbd 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -114,7 +114,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - policy.AddToScheme(api.Scheme) + if err := policy.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -123,7 +126,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/register.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/register.go index 76ea1a55..40d8c089 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ limitations under the License. package policy import ( + "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/runtime" ) @@ -27,26 +28,29 @@ const GroupName = "policy" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { // TODO this gets cleaned up when the types are fixed scheme.AddKnownTypes(SchemeGroupVersion, &PodDisruptionBudget{}, &PodDisruptionBudgetList{}, + &api.ListOptions{}, + &Eviction{}, ) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go index 2ecf41bc..a79732a5 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -49,7 +49,8 @@ type PodDisruptionBudgetStatus struct { ExpectedPods int32 `json:"expectedPods"` } -// +genclient=true,noMethods=true +// +genclient=true +// +noMethods=true // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods type PodDisruptionBudget struct { @@ -68,3 +69,16 @@ type PodDisruptionBudgetList struct { unversioned.ListMeta `json:"metadata,omitempty"` Items []PodDisruptionBudget `json:"items"` } + +// Eviction evicts a pod from its node subject to certain policies and safety constraints. +// This is a subresource of Pod. A request to cause such an eviction is +// created by POSTing to .../pods//evictions. +type Eviction struct { + unversioned.TypeMeta `json:",inline"` + + // ObjectMeta describes the pod that is being evicted. + api.ObjectMeta `json:"metadata,omitempty"` + + // DeleteOptions may be provided + DeleteOptions *api.DeleteOptions `json:"deleteOptions,omitempty"` +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/deep_copy_generated.go deleted file mode 100644 index 74680aff..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/deep_copy_generated.go +++ /dev/null @@ -1,102 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1alpha1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" - intstr "k8s.io/kubernetes/pkg/util/intstr" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1alpha1_PodDisruptionBudget, - DeepCopy_v1alpha1_PodDisruptionBudgetList, - DeepCopy_v1alpha1_PodDisruptionBudgetSpec, - DeepCopy_v1alpha1_PodDisruptionBudgetStatus, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1alpha1_PodDisruptionBudget(in PodDisruptionBudget, out *PodDisruptionBudget, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if err := DeepCopy_v1alpha1_PodDisruptionBudgetSpec(in.Spec, &out.Spec, c); err != nil { - return err - } - if err := DeepCopy_v1alpha1_PodDisruptionBudgetStatus(in.Status, &out.Status, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1alpha1_PodDisruptionBudgetList(in PodDisruptionBudgetList, out *PodDisruptionBudgetList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]PodDisruptionBudget, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_PodDisruptionBudget(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1alpha1_PodDisruptionBudgetSpec(in PodDisruptionBudgetSpec, out *PodDisruptionBudgetSpec, c *conversion.Cloner) error { - if err := intstr.DeepCopy_intstr_IntOrString(in.MinAvailable, &out.MinAvailable, c); err != nil { - return err - } - if in.Selector != nil { - in, out := in.Selector, &out.Selector - *out = new(unversioned.LabelSelector) - if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { - return err - } - } else { - out.Selector = nil - } - return nil -} - -func DeepCopy_v1alpha1_PodDisruptionBudgetStatus(in PodDisruptionBudgetStatus, out *PodDisruptionBudgetStatus, c *conversion.Cloner) error { - out.PodDisruptionAllowed = in.PodDisruptionAllowed - out.CurrentHealthy = in.CurrentHealthy - out.DesiredHealthy = in.DesiredHealthy - out.ExpectedPods = in.ExpectedPods - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/doc.go index 5cb716c2..985d4bbf 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,8 +14,10 @@ See the License for the specific language governing permissions and limitations under the License. */ +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/policy + // Package policy is for any kind of policy object. Suitable examples, even if // they aren't all here, are PodDisruptionBudget, PodSecurityPolicy, // NetworkPolicy, etc. -// +genconversion=true package v1alpha1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.pb.go index 867a6b0a..8cda02b6 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ limitations under the License. k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.proto It has these top-level messages: + Eviction PodDisruptionBudget PodDisruptionBudgetList PodDisruptionBudgetSpec @@ -37,6 +38,10 @@ import fmt "fmt" import math "math" import k8s_io_kubernetes_pkg_api_unversioned "k8s.io/kubernetes/pkg/api/unversioned" +import k8s_io_kubernetes_pkg_api_v1 "k8s.io/kubernetes/pkg/api/v1" + +import strings "strings" +import reflect "reflect" import io "io" @@ -45,28 +50,75 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *PodDisruptionBudget) Reset() { *m = PodDisruptionBudget{} } -func (m *PodDisruptionBudget) String() string { return proto.CompactTextString(m) } -func (*PodDisruptionBudget) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *PodDisruptionBudgetList) Reset() { *m = PodDisruptionBudgetList{} } -func (m *PodDisruptionBudgetList) String() string { return proto.CompactTextString(m) } -func (*PodDisruptionBudgetList) ProtoMessage() {} +func (m *Eviction) Reset() { *m = Eviction{} } +func (*Eviction) ProtoMessage() {} +func (*Eviction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *PodDisruptionBudgetSpec) Reset() { *m = PodDisruptionBudgetSpec{} } -func (m *PodDisruptionBudgetSpec) String() string { return proto.CompactTextString(m) } -func (*PodDisruptionBudgetSpec) ProtoMessage() {} +func (m *PodDisruptionBudget) Reset() { *m = PodDisruptionBudget{} } +func (*PodDisruptionBudget) ProtoMessage() {} +func (*PodDisruptionBudget) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *PodDisruptionBudgetStatus) Reset() { *m = PodDisruptionBudgetStatus{} } -func (m *PodDisruptionBudgetStatus) String() string { return proto.CompactTextString(m) } -func (*PodDisruptionBudgetStatus) ProtoMessage() {} +func (m *PodDisruptionBudgetList) Reset() { *m = PodDisruptionBudgetList{} } +func (*PodDisruptionBudgetList) ProtoMessage() {} +func (*PodDisruptionBudgetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *PodDisruptionBudgetSpec) Reset() { *m = PodDisruptionBudgetSpec{} } +func (*PodDisruptionBudgetSpec) ProtoMessage() {} +func (*PodDisruptionBudgetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *PodDisruptionBudgetStatus) Reset() { *m = PodDisruptionBudgetStatus{} } +func (*PodDisruptionBudgetStatus) ProtoMessage() {} +func (*PodDisruptionBudgetStatus) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{4} +} func init() { + proto.RegisterType((*Eviction)(nil), "k8s.io.kubernetes.pkg.apis.policy.v1alpha1.Eviction") proto.RegisterType((*PodDisruptionBudget)(nil), "k8s.io.kubernetes.pkg.apis.policy.v1alpha1.PodDisruptionBudget") proto.RegisterType((*PodDisruptionBudgetList)(nil), "k8s.io.kubernetes.pkg.apis.policy.v1alpha1.PodDisruptionBudgetList") proto.RegisterType((*PodDisruptionBudgetSpec)(nil), "k8s.io.kubernetes.pkg.apis.policy.v1alpha1.PodDisruptionBudgetSpec") proto.RegisterType((*PodDisruptionBudgetStatus)(nil), "k8s.io.kubernetes.pkg.apis.policy.v1alpha1.PodDisruptionBudgetStatus") } +func (m *Eviction) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *Eviction) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + if m.DeleteOptions != nil { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.DeleteOptions.Size())) + n2, err := m.DeleteOptions.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + } + return i, nil +} + func (m *PodDisruptionBudget) Marshal() (data []byte, err error) { size := m.Size() data = make([]byte, size) @@ -85,27 +137,27 @@ func (m *PodDisruptionBudget) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n1, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n1 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n2, err := m.Spec.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n2 - data[i] = 0x1a - i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n3, err := m.Status.MarshalTo(data[i:]) + n3, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n3 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n4, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n4 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n5, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n5 return i, nil } @@ -127,11 +179,11 @@ func (m *PodDisruptionBudgetList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n4, err := m.ListMeta.MarshalTo(data[i:]) + n6, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n4 + i += n6 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -165,20 +217,20 @@ func (m *PodDisruptionBudgetSpec) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.MinAvailable.Size())) - n5, err := m.MinAvailable.MarshalTo(data[i:]) + n7, err := m.MinAvailable.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n5 + i += n7 if m.Selector != nil { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Selector.Size())) - n6, err := m.Selector.MarshalTo(data[i:]) + n8, err := m.Selector.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n6 + i += n8 } return i, nil } @@ -245,6 +297,18 @@ func encodeVarintGenerated(data []byte, offset int, v uint64) int { data[offset] = uint8(v) return offset + 1 } +func (m *Eviction) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if m.DeleteOptions != nil { + l = m.DeleteOptions.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *PodDisruptionBudget) Size() (n int) { var l int _ = l @@ -306,6 +370,185 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *Eviction) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Eviction{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `DeleteOptions:` + strings.Replace(fmt.Sprintf("%v", this.DeleteOptions), "DeleteOptions", "k8s_io_kubernetes_pkg_api_v1.DeleteOptions", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudget) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodDisruptionBudget{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "PodDisruptionBudgetSpec", "PodDisruptionBudgetSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "PodDisruptionBudgetStatus", "PodDisruptionBudgetStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodDisruptionBudgetList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "PodDisruptionBudget", "PodDisruptionBudget", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodDisruptionBudgetSpec{`, + `MinAvailable:` + strings.Replace(strings.Replace(this.MinAvailable.String(), "IntOrString", "k8s_io_kubernetes_pkg_util_intstr.IntOrString", 1), `&`, ``, 1) + `,`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_kubernetes_pkg_api_unversioned.LabelSelector", 1) + `,`, + `}`, + }, "") + return s +} +func (this *PodDisruptionBudgetStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PodDisruptionBudgetStatus{`, + `PodDisruptionAllowed:` + fmt.Sprintf("%v", this.PodDisruptionAllowed) + `,`, + `CurrentHealthy:` + fmt.Sprintf("%v", this.CurrentHealthy) + `,`, + `DesiredHealthy:` + fmt.Sprintf("%v", this.DesiredHealthy) + `,`, + `ExpectedPods:` + fmt.Sprintf("%v", this.ExpectedPods) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *Eviction) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Eviction: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Eviction: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DeleteOptions", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DeleteOptions == nil { + m.DeleteOptions = &k8s_io_kubernetes_pkg_api_v1.DeleteOptions{} + } + if err := m.DeleteOptions.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *PodDisruptionBudget) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -901,3 +1144,48 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 645 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xb4, 0x93, 0xdd, 0x6a, 0x13, 0x41, + 0x14, 0xc7, 0xb3, 0xfd, 0x22, 0x4c, 0xd3, 0x62, 0xd7, 0xa2, 0x31, 0xc8, 0x56, 0x72, 0x55, 0xaa, + 0x9d, 0x25, 0x45, 0xa1, 0x78, 0xa1, 0x74, 0xdb, 0x82, 0x15, 0x4b, 0xcb, 0xf6, 0x46, 0x04, 0x85, + 0xc9, 0xce, 0x71, 0x33, 0x66, 0xb3, 0xb3, 0xcc, 0xcc, 0x46, 0x7b, 0xe7, 0x23, 0xf8, 0x0a, 0x3e, + 0x8c, 0x50, 0xbc, 0xea, 0xa5, 0x57, 0xc1, 0xa4, 0x2f, 0x22, 0x3b, 0x99, 0xa4, 0xd9, 0x7c, 0x94, + 0x42, 0xf1, 0x6e, 0xcf, 0xcc, 0xf9, 0xfd, 0xff, 0xe7, 0x9c, 0x3d, 0x83, 0x5e, 0x36, 0x77, 0x25, + 0x66, 0xdc, 0x6d, 0xa6, 0x75, 0x10, 0x31, 0x28, 0x90, 0x6e, 0xd2, 0x0c, 0x5d, 0x92, 0x30, 0xe9, + 0x26, 0x3c, 0x62, 0xc1, 0xb9, 0xdb, 0xae, 0x91, 0x28, 0x69, 0x90, 0x9a, 0x1b, 0x42, 0x0c, 0x82, + 0x28, 0xa0, 0x38, 0x11, 0x5c, 0x71, 0x7b, 0xab, 0xcf, 0xe2, 0x6b, 0x16, 0x27, 0xcd, 0x10, 0x67, + 0x2c, 0xee, 0xb3, 0x78, 0xc0, 0x56, 0xb6, 0x43, 0xa6, 0x1a, 0x69, 0x1d, 0x07, 0xbc, 0xe5, 0x86, + 0x3c, 0xe4, 0xae, 0x96, 0xa8, 0xa7, 0x9f, 0x75, 0xa4, 0x03, 0xfd, 0xd5, 0x97, 0xae, 0xbc, 0x98, + 0x59, 0x96, 0x9b, 0xc6, 0x6d, 0x10, 0x92, 0xf1, 0x18, 0xe8, 0x78, 0x45, 0x95, 0x67, 0xb3, 0xb1, + 0xf6, 0x44, 0xfd, 0x95, 0xed, 0xe9, 0xd9, 0x22, 0x8d, 0x15, 0x6b, 0xc1, 0x44, 0x7a, 0x6d, 0x7a, + 0x7a, 0xaa, 0x58, 0xe4, 0xb2, 0x58, 0x49, 0x25, 0xc6, 0x91, 0xea, 0x6f, 0x0b, 0x15, 0x0f, 0xdb, + 0x2c, 0x50, 0x8c, 0xc7, 0xf6, 0x7b, 0x54, 0x6c, 0x81, 0x22, 0x94, 0x28, 0x52, 0xb6, 0x9e, 0x58, + 0x9b, 0xcb, 0x3b, 0x9b, 0x78, 0xe6, 0x04, 0x71, 0xbb, 0x86, 0x4f, 0xea, 0x5f, 0x20, 0x50, 0xc7, + 0xa0, 0x88, 0x67, 0x5f, 0x74, 0x36, 0x0a, 0xbd, 0xce, 0x06, 0xba, 0x3e, 0xf3, 0x87, 0x6a, 0x36, + 0x45, 0x2b, 0x14, 0x22, 0x50, 0x70, 0x92, 0x64, 0x4e, 0xb2, 0x3c, 0xa7, 0xe5, 0x9f, 0xde, 0x2c, + 0x7f, 0x30, 0x8a, 0x78, 0x6b, 0xbd, 0xce, 0xc6, 0x4a, 0xee, 0xc8, 0xcf, 0x8b, 0x56, 0x7f, 0xcd, + 0xa1, 0xfb, 0xa7, 0x9c, 0x1e, 0x30, 0x29, 0x52, 0x7d, 0xe4, 0xa5, 0x34, 0x04, 0xf5, 0x1f, 0xfb, + 0x02, 0xb4, 0x20, 0x13, 0x08, 0x4c, 0x3b, 0xfb, 0xf8, 0xf6, 0xfb, 0x86, 0xa7, 0x14, 0x7a, 0x96, + 0x40, 0xe0, 0x95, 0x8c, 0xe1, 0x42, 0x16, 0xf9, 0x5a, 0xde, 0x6e, 0xa1, 0x25, 0xa9, 0x88, 0x4a, + 0x65, 0x79, 0x5e, 0x1b, 0x1d, 0xde, 0xd5, 0x48, 0x8b, 0x79, 0xab, 0xc6, 0x6a, 0xa9, 0x1f, 0xfb, + 0xc6, 0xa4, 0xda, 0xb1, 0xd0, 0xc3, 0x29, 0xd4, 0x3b, 0x26, 0x95, 0xfd, 0x71, 0x62, 0x96, 0xee, + 0x0d, 0xb3, 0x1c, 0x79, 0x0a, 0x38, 0xc3, 0xf5, 0x48, 0xef, 0x19, 0xdb, 0xe2, 0xe0, 0x24, 0xb7, + 0x28, 0x8b, 0x4c, 0x41, 0x2b, 0x5b, 0x90, 0xf9, 0xcd, 0xe5, 0x9d, 0xd7, 0x77, 0x6c, 0xd4, 0x5b, + 0x31, 0x5e, 0x8b, 0x47, 0x99, 0xaa, 0xdf, 0x17, 0xaf, 0x5e, 0x4d, 0x6f, 0x30, 0x9b, 0xb8, 0xdd, + 0x40, 0xa5, 0x16, 0x8b, 0xf7, 0xda, 0x84, 0x45, 0xa4, 0x1e, 0x81, 0x69, 0x12, 0xcf, 0x28, 0x24, + 0x7b, 0x5b, 0xb8, 0xff, 0xb6, 0xf0, 0x51, 0xac, 0x4e, 0xc4, 0x99, 0x12, 0x2c, 0x0e, 0xbd, 0x75, + 0xe3, 0x5b, 0x3a, 0x1e, 0xd1, 0xf2, 0x73, 0xca, 0xf6, 0x27, 0x54, 0x94, 0x10, 0x41, 0xa0, 0xb8, + 0x30, 0x0b, 0xf4, 0xfc, 0xb6, 0xa3, 0x24, 0x75, 0x88, 0xce, 0x0c, 0xeb, 0x95, 0xb2, 0x59, 0x0e, + 0x22, 0x7f, 0xa8, 0x59, 0xfd, 0x39, 0x87, 0x1e, 0xcd, 0xfc, 0xf9, 0xf6, 0x5b, 0xb4, 0x46, 0x87, + 0x37, 0x7b, 0x51, 0xc4, 0xbf, 0x02, 0xd5, 0xcd, 0x16, 0xbd, 0xc7, 0xa6, 0xf8, 0xf5, 0x1c, 0x6d, + 0x72, 0xfc, 0x49, 0xcc, 0x7e, 0x85, 0x56, 0x83, 0x54, 0x08, 0x88, 0xd5, 0x1b, 0x20, 0x91, 0x6a, + 0x9c, 0xeb, 0x7e, 0x16, 0xbd, 0x07, 0x46, 0x68, 0x75, 0x3f, 0x77, 0xeb, 0x8f, 0x65, 0x67, 0x3c, + 0x05, 0xc9, 0x04, 0xd0, 0x01, 0x3f, 0x9f, 0xe7, 0x0f, 0x72, 0xb7, 0xfe, 0x58, 0xb6, 0xbd, 0x8b, + 0x4a, 0xf0, 0x2d, 0x81, 0x40, 0x01, 0x3d, 0xe5, 0x54, 0x96, 0x17, 0x34, 0x3d, 0xfc, 0x07, 0x87, + 0x23, 0x77, 0x7e, 0x2e, 0xd3, 0xdb, 0xba, 0xe8, 0x3a, 0x85, 0xcb, 0xae, 0x53, 0xf8, 0xd3, 0x75, + 0x0a, 0xdf, 0x7b, 0x8e, 0x75, 0xd1, 0x73, 0xac, 0xcb, 0x9e, 0x63, 0xfd, 0xed, 0x39, 0xd6, 0x8f, + 0x2b, 0xa7, 0xf0, 0xa1, 0x38, 0xd8, 0xaf, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x0f, 0x8c, + 0x1f, 0x8a, 0x06, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.proto index 730a0a3e..531db804 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,6 +29,17 @@ import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1alpha1"; +// Eviction evicts a pod from its node subject to certain policies and safety constraints. +// This is a subresource of Pod. A request to cause such an eviction is +// created by POSTing to .../pods//evictions. +message Eviction { + // ObjectMeta describes the pod that is being evicted. + optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; + + // DeleteOptions may be provided + optional k8s.io.kubernetes.pkg.api.v1.DeleteOptions deleteOptions = 2; +} + // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods message PodDisruptionBudget { optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/register.go index a6a94d96..8fcb0be0 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,22 +29,21 @@ const GroupName = "policy" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) - /* - addDefaultingFuncs(scheme) - addConversionFuncs(scheme) - */ -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &PodDisruptionBudget{}, &PodDisruptionBudgetList{}, + &Eviction{}, &v1.ListOptions{}, &v1.DeleteOptions{}, ) // Add the watch version that applies versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/types.go index 1f3265ae..ced015d3 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,7 +18,6 @@ package v1alpha1 import ( "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/util/intstr" ) @@ -50,7 +49,7 @@ type PodDisruptionBudgetStatus struct { ExpectedPods int32 `json:"expectedPods" protobuf:"varint,4,opt,name=expectedPods"` } -// +genclient=true,noMethods=true +// +genclient=true // PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods type PodDisruptionBudget struct { @@ -69,3 +68,16 @@ type PodDisruptionBudgetList struct { unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` Items []PodDisruptionBudget `json:"items" protobuf:"bytes,2,rep,name=items"` } + +// Eviction evicts a pod from its node subject to certain policies and safety constraints. +// This is a subresource of Pod. A request to cause such an eviction is +// created by POSTing to .../pods//evictions. +type Eviction struct { + unversioned.TypeMeta `json:",inline"` + + // ObjectMeta describes the pod that is being evicted. + v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // DeleteOptions may be provided + DeleteOptions *v1.DeleteOptions `json:"deleteOptions,omitempty" protobuf:"bytes,2,opt,name=deleteOptions"` +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/types_swagger_doc_generated.go index 8ca1782f..7750b100 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,6 +27,16 @@ package v1alpha1 // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE +var map_Eviction = map[string]string{ + "": "Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods//evictions.", + "metadata": "ObjectMeta describes the pod that is being evicted.", + "deleteOptions": "DeleteOptions may be provided", +} + +func (Eviction) SwaggerDoc() map[string]string { + return map_Eviction +} + var map_PodDisruptionBudget = map[string]string{ "": "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods", "spec": "Specification of the desired behavior of the PodDisruptionBudget.", diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/zz_generated.conversion.go similarity index 78% rename from vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/conversion_generated.go rename to vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/zz_generated.conversion.go index 23aaa9a3..9a59f8ea 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,12 +22,22 @@ package v1alpha1 import ( api "k8s.io/kubernetes/pkg/api" + v1 "k8s.io/kubernetes/pkg/api/v1" policy "k8s.io/kubernetes/pkg/apis/policy" conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1alpha1_Eviction_To_policy_Eviction, + Convert_policy_Eviction_To_v1alpha1_Eviction, Convert_v1alpha1_PodDisruptionBudget_To_policy_PodDisruptionBudget, Convert_policy_PodDisruptionBudget_To_v1alpha1_PodDisruptionBudget, Convert_v1alpha1_PodDisruptionBudgetList_To_policy_PodDisruptionBudgetList, @@ -36,10 +46,57 @@ func init() { Convert_policy_PodDisruptionBudgetSpec_To_v1alpha1_PodDisruptionBudgetSpec, Convert_v1alpha1_PodDisruptionBudgetStatus_To_policy_PodDisruptionBudgetStatus, Convert_policy_PodDisruptionBudgetStatus_To_v1alpha1_PodDisruptionBudgetStatus, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) + ) +} + +func autoConvert_v1alpha1_Eviction_To_policy_Eviction(in *Eviction, out *policy.Eviction, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if in.DeleteOptions != nil { + in, out := &in.DeleteOptions, &out.DeleteOptions + *out = new(api.DeleteOptions) + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(*in, *out, 0); err != nil { + return err + } + } else { + out.DeleteOptions = nil + } + return nil +} + +func Convert_v1alpha1_Eviction_To_policy_Eviction(in *Eviction, out *policy.Eviction, s conversion.Scope) error { + return autoConvert_v1alpha1_Eviction_To_policy_Eviction(in, out, s) +} + +func autoConvert_policy_Eviction_To_v1alpha1_Eviction(in *policy.Eviction, out *Eviction, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + if in.DeleteOptions != nil { + in, out := &in.DeleteOptions, &out.DeleteOptions + *out = new(v1.DeleteOptions) + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(*in, *out, 0); err != nil { + return err + } + } else { + out.DeleteOptions = nil + } + return nil +} + +func Convert_policy_Eviction_To_v1alpha1_Eviction(in *policy.Eviction, out *Eviction, s conversion.Scope) error { + return autoConvert_policy_Eviction_To_v1alpha1_Eviction(in, out, s) } func autoConvert_v1alpha1_PodDisruptionBudget_To_policy_PodDisruptionBudget(in *PodDisruptionBudget, out *policy.PodDisruptionBudget, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..c5a4ee22 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,133 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1alpha1 + +import ( + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_Eviction, InType: reflect.TypeOf(&Eviction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PodDisruptionBudget, InType: reflect.TypeOf(&PodDisruptionBudget{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PodDisruptionBudgetList, InType: reflect.TypeOf(&PodDisruptionBudgetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PodDisruptionBudgetSpec, InType: reflect.TypeOf(&PodDisruptionBudgetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PodDisruptionBudgetStatus, InType: reflect.TypeOf(&PodDisruptionBudgetStatus{})}, + ) +} + +func DeepCopy_v1alpha1_Eviction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Eviction) + out := out.(*Eviction) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.DeleteOptions != nil { + in, out := &in.DeleteOptions, &out.DeleteOptions + *out = new(v1.DeleteOptions) + if err := v1.DeepCopy_v1_DeleteOptions(*in, *out, c); err != nil { + return err + } + } else { + out.DeleteOptions = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_PodDisruptionBudget(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodDisruptionBudget) + out := out.(*PodDisruptionBudget) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_v1alpha1_PodDisruptionBudgetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_v1alpha1_PodDisruptionBudgetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodDisruptionBudgetList) + out := out.(*PodDisruptionBudgetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodDisruptionBudget, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_PodDisruptionBudget(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_PodDisruptionBudgetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodDisruptionBudgetSpec) + out := out.(*PodDisruptionBudgetSpec) + out.MinAvailable = in.MinAvailable + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_PodDisruptionBudgetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodDisruptionBudgetStatus) + out := out.(*PodDisruptionBudgetStatus) + out.PodDisruptionAllowed = in.PodDisruptionAllowed + out.CurrentHealthy = in.CurrentHealthy + out.DesiredHealthy = in.DesiredHealthy + out.ExpectedPods = in.ExpectedPods + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go new file mode 100644 index 00000000..ed2db3be --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/policy/zz_generated.deepcopy.go @@ -0,0 +1,133 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package policy + +import ( + api "k8s.io/kubernetes/pkg/api" + unversioned "k8s.io/kubernetes/pkg/api/unversioned" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_policy_Eviction, InType: reflect.TypeOf(&Eviction{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_policy_PodDisruptionBudget, InType: reflect.TypeOf(&PodDisruptionBudget{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_policy_PodDisruptionBudgetList, InType: reflect.TypeOf(&PodDisruptionBudgetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_policy_PodDisruptionBudgetSpec, InType: reflect.TypeOf(&PodDisruptionBudgetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_policy_PodDisruptionBudgetStatus, InType: reflect.TypeOf(&PodDisruptionBudgetStatus{})}, + ) +} + +func DeepCopy_policy_Eviction(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Eviction) + out := out.(*Eviction) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.DeleteOptions != nil { + in, out := &in.DeleteOptions, &out.DeleteOptions + *out = new(api.DeleteOptions) + if err := api.DeepCopy_api_DeleteOptions(*in, *out, c); err != nil { + return err + } + } else { + out.DeleteOptions = nil + } + return nil + } +} + +func DeepCopy_policy_PodDisruptionBudget(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodDisruptionBudget) + out := out.(*PodDisruptionBudget) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if err := DeepCopy_policy_PodDisruptionBudgetSpec(&in.Spec, &out.Spec, c); err != nil { + return err + } + out.Status = in.Status + return nil + } +} + +func DeepCopy_policy_PodDisruptionBudgetList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodDisruptionBudgetList) + out := out.(*PodDisruptionBudgetList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]PodDisruptionBudget, len(*in)) + for i := range *in { + if err := DeepCopy_policy_PodDisruptionBudget(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_policy_PodDisruptionBudgetSpec(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodDisruptionBudgetSpec) + out := out.(*PodDisruptionBudgetSpec) + out.MinAvailable = in.MinAvailable + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + *out = new(unversioned.LabelSelector) + if err := unversioned.DeepCopy_unversioned_LabelSelector(*in, *out, c); err != nil { + return err + } + } else { + out.Selector = nil + } + return nil + } +} + +func DeepCopy_policy_PodDisruptionBudgetStatus(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PodDisruptionBudgetStatus) + out := out.(*PodDisruptionBudgetStatus) + out.PodDisruptionAllowed = in.PodDisruptionAllowed + out.CurrentHealthy = in.CurrentHealthy + out.DesiredHealthy = in.DesiredHealthy + out.ExpectedPods = in.ExpectedPods + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/deep_copy_generated.go deleted file mode 100644 index 5e9339a9..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/deep_copy_generated.go +++ /dev/null @@ -1,274 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package rbac - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - conversion "k8s.io/kubernetes/pkg/conversion" - runtime "k8s.io/kubernetes/pkg/runtime" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_rbac_ClusterRole, - DeepCopy_rbac_ClusterRoleBinding, - DeepCopy_rbac_ClusterRoleBindingList, - DeepCopy_rbac_ClusterRoleList, - DeepCopy_rbac_PolicyRule, - DeepCopy_rbac_Role, - DeepCopy_rbac_RoleBinding, - DeepCopy_rbac_RoleBindingList, - DeepCopy_rbac_RoleList, - DeepCopy_rbac_Subject, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_rbac_ClusterRole(in ClusterRole, out *ClusterRole, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]PolicyRule, len(in)) - for i := range in { - if err := DeepCopy_rbac_PolicyRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - return nil -} - -func DeepCopy_rbac_ClusterRoleBinding(in ClusterRoleBinding, out *ClusterRoleBinding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Subjects != nil { - in, out := in.Subjects, &out.Subjects - *out = make([]Subject, len(in)) - for i := range in { - if err := DeepCopy_rbac_Subject(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Subjects = nil - } - if err := api.DeepCopy_api_ObjectReference(in.RoleRef, &out.RoleRef, c); err != nil { - return err - } - return nil -} - -func DeepCopy_rbac_ClusterRoleBindingList(in ClusterRoleBindingList, out *ClusterRoleBindingList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterRoleBinding, len(in)) - for i := range in { - if err := DeepCopy_rbac_ClusterRoleBinding(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_rbac_ClusterRoleList(in ClusterRoleList, out *ClusterRoleList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterRole, len(in)) - for i := range in { - if err := DeepCopy_rbac_ClusterRole(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_rbac_PolicyRule(in PolicyRule, out *PolicyRule, c *conversion.Cloner) error { - if in.Verbs != nil { - in, out := in.Verbs, &out.Verbs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Verbs = nil - } - if in.AttributeRestrictions == nil { - out.AttributeRestrictions = nil - } else if newVal, err := c.DeepCopy(in.AttributeRestrictions); err != nil { - return err - } else { - out.AttributeRestrictions = newVal.(runtime.Object) - } - if in.APIGroups != nil { - in, out := in.APIGroups, &out.APIGroups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.APIGroups = nil - } - if in.Resources != nil { - in, out := in.Resources, &out.Resources - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Resources = nil - } - if in.ResourceNames != nil { - in, out := in.ResourceNames, &out.ResourceNames - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.ResourceNames = nil - } - if in.NonResourceURLs != nil { - in, out := in.NonResourceURLs, &out.NonResourceURLs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.NonResourceURLs = nil - } - return nil -} - -func DeepCopy_rbac_Role(in Role, out *Role, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]PolicyRule, len(in)) - for i := range in { - if err := DeepCopy_rbac_PolicyRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - return nil -} - -func DeepCopy_rbac_RoleBinding(in RoleBinding, out *RoleBinding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := api.DeepCopy_api_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Subjects != nil { - in, out := in.Subjects, &out.Subjects - *out = make([]Subject, len(in)) - for i := range in { - if err := DeepCopy_rbac_Subject(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Subjects = nil - } - if err := api.DeepCopy_api_ObjectReference(in.RoleRef, &out.RoleRef, c); err != nil { - return err - } - return nil -} - -func DeepCopy_rbac_RoleBindingList(in RoleBindingList, out *RoleBindingList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]RoleBinding, len(in)) - for i := range in { - if err := DeepCopy_rbac_RoleBinding(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_rbac_RoleList(in RoleList, out *RoleList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Role, len(in)) - for i := range in { - if err := DeepCopy_rbac_Role(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_rbac_Subject(in Subject, out *Subject, c *conversion.Cloner) error { - out.Kind = in.Kind - out.APIVersion = in.APIVersion - out.Name = in.Name - out.Namespace = in.Namespace - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/doc.go index 15f91da2..e4ce69b4 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +// +k8s:deepcopy-gen=package,register + // +groupName=rbac.authorization.k8s.io package rbac diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/install/install.go index 8cac247f..bfa9eea3 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/install/install.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -115,7 +115,10 @@ func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, e func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { // add the internal version to Scheme - rbac.AddToScheme(api.Scheme) + if err := rbac.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } // add the enabled external versions to Scheme for _, v := range externalVersions { if !registered.IsEnabledVersion(v) { @@ -124,7 +127,10 @@ func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { } switch v { case v1alpha1.SchemeGroupVersion: - v1alpha1.AddToScheme(api.Scheme) + if err := v1alpha1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } } } } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/register.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/register.go index 58464d74..f854cfac 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,23 +28,23 @@ const GroupName = "rbac.authorization.k8s.io" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// Kind takes an unqualified kind and returns back a Group qualified GroupKind +// Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) unversioned.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() } -// Resource takes an unqualified resource and returns back a Group qualified GroupResource +// Resource takes an unqualified resource and returns a Group qualified GroupResource func Resource(resource string) unversioned.GroupResource { return SchemeGroupVersion.WithResource(resource).GroupResource() } -func AddToScheme(scheme *runtime.Scheme) { - // Add the API to Scheme. - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Role{}, &RoleBinding{}, @@ -61,4 +61,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &api.ExportOptions{}, ) versioned.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/types.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/types.go index a35eb7db..ba7fa2b1 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -50,14 +50,17 @@ type PolicyRule struct { AttributeRestrictions runtime.Object // APIGroups is the name of the APIGroup that contains the resources. // If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. + APIGroups []string // Resources is a list of resources this rule applies to. ResourceAll represents all resources. Resources []string // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. ResourceNames []string + // NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path // If an action is not a resource API request, then the URL is split on '/' and is checked against the NonResourceURLs to look for a match. // Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. + // Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. NonResourceURLs []string } @@ -68,7 +71,7 @@ type Subject struct { // If the Authorizer does not recognized the kind value, the Authorizer should report an error. Kind string // APIVersion holds the API group and version of the referenced object. For non-object references such as "Group" and "User" this is - // expected to be API version of this API group. For example "rbac/v1alpha1". + // expected to be API version of this API group. For example, "rbac/v1alpha1". APIVersion string // Name of the object being referenced. Name string @@ -126,7 +129,8 @@ type RoleList struct { Items []Role } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding. type ClusterRole struct { @@ -138,7 +142,8 @@ type ClusterRole struct { Rules []PolicyRule } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, // and adds who information via Subject. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/deep_copy_generated.go deleted file mode 100644 index f898a434..00000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/deep_copy_generated.go +++ /dev/null @@ -1,271 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package v1alpha1 - -import ( - api "k8s.io/kubernetes/pkg/api" - unversioned "k8s.io/kubernetes/pkg/api/unversioned" - v1 "k8s.io/kubernetes/pkg/api/v1" - conversion "k8s.io/kubernetes/pkg/conversion" - runtime "k8s.io/kubernetes/pkg/runtime" -) - -func init() { - if err := api.Scheme.AddGeneratedDeepCopyFuncs( - DeepCopy_v1alpha1_ClusterRole, - DeepCopy_v1alpha1_ClusterRoleBinding, - DeepCopy_v1alpha1_ClusterRoleBindingList, - DeepCopy_v1alpha1_ClusterRoleList, - DeepCopy_v1alpha1_PolicyRule, - DeepCopy_v1alpha1_Role, - DeepCopy_v1alpha1_RoleBinding, - DeepCopy_v1alpha1_RoleBindingList, - DeepCopy_v1alpha1_RoleList, - DeepCopy_v1alpha1_Subject, - ); err != nil { - // if one of the deep copy functions is malformed, detect it immediately. - panic(err) - } -} - -func DeepCopy_v1alpha1_ClusterRole(in ClusterRole, out *ClusterRole, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]PolicyRule, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_PolicyRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - return nil -} - -func DeepCopy_v1alpha1_ClusterRoleBinding(in ClusterRoleBinding, out *ClusterRoleBinding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Subjects != nil { - in, out := in.Subjects, &out.Subjects - *out = make([]Subject, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_Subject(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Subjects = nil - } - if err := v1.DeepCopy_v1_ObjectReference(in.RoleRef, &out.RoleRef, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1alpha1_ClusterRoleBindingList(in ClusterRoleBindingList, out *ClusterRoleBindingList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterRoleBinding, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_ClusterRoleBinding(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1alpha1_ClusterRoleList(in ClusterRoleList, out *ClusterRoleList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]ClusterRole, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_ClusterRole(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1alpha1_PolicyRule(in PolicyRule, out *PolicyRule, c *conversion.Cloner) error { - if in.Verbs != nil { - in, out := in.Verbs, &out.Verbs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Verbs = nil - } - if err := runtime.DeepCopy_runtime_RawExtension(in.AttributeRestrictions, &out.AttributeRestrictions, c); err != nil { - return err - } - if in.APIGroups != nil { - in, out := in.APIGroups, &out.APIGroups - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.APIGroups = nil - } - if in.Resources != nil { - in, out := in.Resources, &out.Resources - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.Resources = nil - } - if in.ResourceNames != nil { - in, out := in.ResourceNames, &out.ResourceNames - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.ResourceNames = nil - } - if in.NonResourceURLs != nil { - in, out := in.NonResourceURLs, &out.NonResourceURLs - *out = make([]string, len(in)) - copy(*out, in) - } else { - out.NonResourceURLs = nil - } - return nil -} - -func DeepCopy_v1alpha1_Role(in Role, out *Role, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Rules != nil { - in, out := in.Rules, &out.Rules - *out = make([]PolicyRule, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_PolicyRule(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Rules = nil - } - return nil -} - -func DeepCopy_v1alpha1_RoleBinding(in RoleBinding, out *RoleBinding, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := v1.DeepCopy_v1_ObjectMeta(in.ObjectMeta, &out.ObjectMeta, c); err != nil { - return err - } - if in.Subjects != nil { - in, out := in.Subjects, &out.Subjects - *out = make([]Subject, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_Subject(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Subjects = nil - } - if err := v1.DeepCopy_v1_ObjectReference(in.RoleRef, &out.RoleRef, c); err != nil { - return err - } - return nil -} - -func DeepCopy_v1alpha1_RoleBindingList(in RoleBindingList, out *RoleBindingList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]RoleBinding, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_RoleBinding(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1alpha1_RoleList(in RoleList, out *RoleList, c *conversion.Cloner) error { - if err := unversioned.DeepCopy_unversioned_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if err := unversioned.DeepCopy_unversioned_ListMeta(in.ListMeta, &out.ListMeta, c); err != nil { - return err - } - if in.Items != nil { - in, out := in.Items, &out.Items - *out = make([]Role, len(in)) - for i := range in { - if err := DeepCopy_v1alpha1_Role(in[i], &(*out)[i], c); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -func DeepCopy_v1alpha1_Subject(in Subject, out *Subject, c *conversion.Cloner) error { - out.Kind = in.Kind - out.APIVersion = in.APIVersion - out.Name = in.Name - out.Namespace = in.Namespace - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/doc.go index 6873ebb1..e471bd38 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,5 +15,7 @@ limitations under the License. */ // +groupName=rbac.authorization.k8s.io -// +genconversion=true +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/rbac + package v1alpha1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/generated.pb.go index 54b03ed1..52498a36 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -42,6 +42,9 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" +import strings "strings" +import reflect "reflect" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -49,45 +52,49 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *ClusterRole) Reset() { *m = ClusterRole{} } -func (m *ClusterRole) String() string { return proto.CompactTextString(m) } -func (*ClusterRole) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } -func (m *ClusterRoleBinding) String() string { return proto.CompactTextString(m) } -func (*ClusterRoleBinding) ProtoMessage() {} +func (m *ClusterRole) Reset() { *m = ClusterRole{} } +func (*ClusterRole) ProtoMessage() {} +func (*ClusterRole) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } -func (m *ClusterRoleBindingList) String() string { return proto.CompactTextString(m) } -func (*ClusterRoleBindingList) ProtoMessage() {} +func (m *ClusterRoleBinding) Reset() { *m = ClusterRoleBinding{} } +func (*ClusterRoleBinding) ProtoMessage() {} +func (*ClusterRoleBinding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } -func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } -func (m *ClusterRoleList) String() string { return proto.CompactTextString(m) } -func (*ClusterRoleList) ProtoMessage() {} +func (m *ClusterRoleBindingList) Reset() { *m = ClusterRoleBindingList{} } +func (*ClusterRoleBindingList) ProtoMessage() {} +func (*ClusterRoleBindingList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } -func (m *PolicyRule) Reset() { *m = PolicyRule{} } -func (m *PolicyRule) String() string { return proto.CompactTextString(m) } -func (*PolicyRule) ProtoMessage() {} +func (m *ClusterRoleList) Reset() { *m = ClusterRoleList{} } +func (*ClusterRoleList) ProtoMessage() {} +func (*ClusterRoleList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } -func (m *Role) Reset() { *m = Role{} } -func (m *Role) String() string { return proto.CompactTextString(m) } -func (*Role) ProtoMessage() {} +func (m *PolicyRule) Reset() { *m = PolicyRule{} } +func (*PolicyRule) ProtoMessage() {} +func (*PolicyRule) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } -func (m *RoleBinding) Reset() { *m = RoleBinding{} } -func (m *RoleBinding) String() string { return proto.CompactTextString(m) } -func (*RoleBinding) ProtoMessage() {} +func (m *Role) Reset() { *m = Role{} } +func (*Role) ProtoMessage() {} +func (*Role) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } -func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } -func (m *RoleBindingList) String() string { return proto.CompactTextString(m) } -func (*RoleBindingList) ProtoMessage() {} +func (m *RoleBinding) Reset() { *m = RoleBinding{} } +func (*RoleBinding) ProtoMessage() {} +func (*RoleBinding) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{6} } -func (m *RoleList) Reset() { *m = RoleList{} } -func (m *RoleList) String() string { return proto.CompactTextString(m) } -func (*RoleList) ProtoMessage() {} +func (m *RoleBindingList) Reset() { *m = RoleBindingList{} } +func (*RoleBindingList) ProtoMessage() {} +func (*RoleBindingList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{7} } -func (m *Subject) Reset() { *m = Subject{} } -func (m *Subject) String() string { return proto.CompactTextString(m) } -func (*Subject) ProtoMessage() {} +func (m *RoleList) Reset() { *m = RoleList{} } +func (*RoleList) ProtoMessage() {} +func (*RoleList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{8} } + +func (m *Subject) Reset() { *m = Subject{} } +func (*Subject) ProtoMessage() {} +func (*Subject) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{9} } func init() { proto.RegisterType((*ClusterRole)(nil), "k8s.io.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole") @@ -764,6 +771,132 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *ClusterRole) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterRole{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterRoleBinding) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterRoleBinding{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subjects:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subjects), "Subject", "Subject", 1), `&`, ``, 1) + `,`, + `RoleRef:` + strings.Replace(strings.Replace(this.RoleRef.String(), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterRoleBindingList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterRoleBindingList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ClusterRoleBinding", "ClusterRoleBinding", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *ClusterRoleList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ClusterRoleList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "ClusterRole", "ClusterRole", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *PolicyRule) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PolicyRule{`, + `Verbs:` + fmt.Sprintf("%v", this.Verbs) + `,`, + `AttributeRestrictions:` + strings.Replace(strings.Replace(this.AttributeRestrictions.String(), "RawExtension", "k8s_io_kubernetes_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `APIGroups:` + fmt.Sprintf("%v", this.APIGroups) + `,`, + `Resources:` + fmt.Sprintf("%v", this.Resources) + `,`, + `ResourceNames:` + fmt.Sprintf("%v", this.ResourceNames) + `,`, + `NonResourceURLs:` + fmt.Sprintf("%v", this.NonResourceURLs) + `,`, + `}`, + }, "") + return s +} +func (this *Role) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Role{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Rules:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Rules), "PolicyRule", "PolicyRule", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RoleBinding) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RoleBinding{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Subjects:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Subjects), "Subject", "Subject", 1), `&`, ``, 1) + `,`, + `RoleRef:` + strings.Replace(strings.Replace(this.RoleRef.String(), "ObjectReference", "k8s_io_kubernetes_pkg_api_v1.ObjectReference", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RoleBindingList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RoleBindingList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "RoleBinding", "RoleBinding", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *RoleList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RoleList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "Role", "Role", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *Subject) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Subject{`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Name:` + fmt.Sprintf("%v", this.Name) + `,`, + `Namespace:` + fmt.Sprintf("%v", this.Namespace) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *ClusterRole) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -2207,3 +2340,57 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 785 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x54, 0x41, 0x8b, 0x23, 0x45, + 0x14, 0x4e, 0x4f, 0x12, 0x27, 0x5d, 0x31, 0xc4, 0x6d, 0x59, 0x69, 0x02, 0x76, 0x42, 0x4e, 0xc1, + 0x75, 0xaa, 0xc9, 0xe0, 0xe2, 0x1e, 0xf4, 0x30, 0x2d, 0x22, 0x83, 0xeb, 0x38, 0xd4, 0xe2, 0xb2, + 0x2e, 0x88, 0x54, 0x3a, 0x6f, 0xb2, 0x65, 0x3a, 0xd5, 0x4d, 0x55, 0x75, 0xd4, 0xdb, 0xe2, 0x2f, + 0xf0, 0x37, 0x78, 0xf3, 0xea, 0x55, 0xf0, 0xe0, 0x69, 0x0e, 0x1e, 0xf6, 0x28, 0x1e, 0x82, 0xd3, + 0xfe, 0x11, 0xe9, 0xea, 0xee, 0xe9, 0x64, 0x92, 0x38, 0x71, 0xc0, 0x01, 0x61, 0x4f, 0x49, 0xbd, + 0xf7, 0xbd, 0xaf, 0xbe, 0xef, 0x75, 0xf1, 0xa1, 0x07, 0xd3, 0x07, 0x12, 0xb3, 0xd0, 0x9d, 0xc6, + 0x23, 0x10, 0x1c, 0x14, 0x48, 0x37, 0x9a, 0x4e, 0x5c, 0x1a, 0x31, 0xe9, 0x8a, 0x11, 0xf5, 0xdd, + 0xf9, 0x90, 0x06, 0xd1, 0x33, 0x3a, 0x74, 0x27, 0xc0, 0x41, 0x50, 0x05, 0x63, 0x1c, 0x89, 0x50, + 0x85, 0xd6, 0x20, 0x9b, 0xc4, 0xe5, 0x24, 0x8e, 0xa6, 0x13, 0x9c, 0x4e, 0xe2, 0x74, 0x12, 0x17, + 0x93, 0x9d, 0x83, 0x09, 0x53, 0xcf, 0xe2, 0x11, 0xf6, 0xc3, 0x99, 0x3b, 0x09, 0x27, 0xa1, 0xab, + 0x09, 0x46, 0xf1, 0x99, 0x3e, 0xe9, 0x83, 0xfe, 0x97, 0x11, 0x77, 0xee, 0x6f, 0x95, 0xe4, 0xc6, + 0x7c, 0x0e, 0x42, 0xb2, 0x90, 0xc3, 0xf8, 0xaa, 0x9e, 0xce, 0xdb, 0xdb, 0xc7, 0xe6, 0x6b, 0xea, + 0x3b, 0x07, 0x9b, 0xd1, 0x22, 0xe6, 0x8a, 0xcd, 0x60, 0x0d, 0x3e, 0xdc, 0x0c, 0x8f, 0x15, 0x0b, + 0x5c, 0xc6, 0x95, 0x54, 0xe2, 0xea, 0x48, 0xff, 0x57, 0x03, 0x35, 0x3f, 0x08, 0x62, 0xa9, 0x40, + 0x90, 0x30, 0x00, 0xeb, 0x09, 0x6a, 0xcc, 0x40, 0xd1, 0x31, 0x55, 0xd4, 0x36, 0x7a, 0xc6, 0xa0, + 0x79, 0x38, 0xc0, 0x5b, 0x57, 0x88, 0xe7, 0x43, 0xfc, 0xe9, 0xe8, 0x2b, 0xf0, 0xd5, 0x27, 0xa0, + 0xa8, 0x67, 0x9d, 0x2f, 0xba, 0x95, 0x64, 0xd1, 0x45, 0x65, 0x8d, 0x5c, 0xb2, 0x59, 0x9f, 0xa3, + 0xba, 0x88, 0x03, 0x90, 0xf6, 0x5e, 0xaf, 0x3a, 0x68, 0x1e, 0xbe, 0x83, 0x77, 0xfd, 0x32, 0xf8, + 0x34, 0x0c, 0x98, 0xff, 0x2d, 0x89, 0x03, 0xf0, 0x5a, 0xf9, 0x15, 0xf5, 0xf4, 0x24, 0x49, 0xc6, + 0xd8, 0xff, 0x71, 0x0f, 0x59, 0x4b, 0x26, 0x3c, 0xc6, 0xc7, 0x8c, 0x4f, 0xfe, 0x43, 0x2f, 0x5f, + 0xa2, 0x86, 0x8c, 0x75, 0xa3, 0xb0, 0x33, 0xdc, 0xdd, 0xce, 0xa3, 0x6c, 0xd2, 0x7b, 0x2d, 0xbf, + 0xa2, 0x91, 0x17, 0x24, 0xb9, 0x24, 0xb5, 0x9e, 0xa0, 0x7d, 0x11, 0x06, 0x40, 0xe0, 0xcc, 0xae, + 0x6a, 0xe5, 0x07, 0xbb, 0x28, 0x27, 0x70, 0x06, 0x02, 0xb8, 0x0f, 0x5e, 0x3b, 0xe7, 0xde, 0x27, + 0x19, 0x0b, 0x29, 0xe8, 0xfa, 0x7f, 0x18, 0xe8, 0x8d, 0xf5, 0x5d, 0x3d, 0x64, 0x52, 0x59, 0x5f, + 0xac, 0xed, 0xcb, 0xfd, 0x87, 0x5b, 0x97, 0x5e, 0x39, 0x4e, 0xc7, 0xf5, 0xda, 0x2e, 0x3d, 0x15, + 0x95, 0xa5, 0xa5, 0x51, 0x54, 0x67, 0x0a, 0x66, 0xc5, 0xc6, 0xde, 0xdb, 0x7d, 0x63, 0xeb, 0x7a, + 0xcb, 0x87, 0x70, 0x9c, 0x52, 0x92, 0x8c, 0xb9, 0xff, 0x9b, 0x81, 0xda, 0x4b, 0xe0, 0xdb, 0x70, + 0xf5, 0x74, 0xd5, 0xd5, 0xfd, 0x9b, 0xb9, 0xda, 0x6c, 0xe7, 0xbb, 0x2a, 0x42, 0xe5, 0xe3, 0xb7, + 0xba, 0xa8, 0x3e, 0x07, 0x31, 0x92, 0xb6, 0xd1, 0xab, 0x0e, 0x4c, 0xcf, 0x4c, 0xf1, 0x8f, 0xd3, + 0x02, 0xc9, 0xea, 0xd6, 0x73, 0x03, 0xdd, 0xa5, 0x4a, 0x09, 0x36, 0x8a, 0x15, 0x10, 0x90, 0x4a, + 0x30, 0x5f, 0xb1, 0x90, 0xa7, 0xe2, 0x52, 0xe3, 0xf7, 0xb6, 0x88, 0xcb, 0xf3, 0x04, 0x13, 0xfa, + 0xf5, 0x87, 0xdf, 0x28, 0xe0, 0xa9, 0x7f, 0xef, 0xcd, 0x5c, 0xd2, 0xdd, 0xa3, 0x4d, 0x8c, 0x64, + 0xf3, 0x45, 0xd6, 0x3d, 0x64, 0xd2, 0x88, 0x7d, 0x24, 0xc2, 0x38, 0x92, 0x76, 0x55, 0xeb, 0x6c, + 0x25, 0x8b, 0xae, 0x79, 0x74, 0x7a, 0x9c, 0x15, 0x49, 0xd9, 0x4f, 0xc1, 0x02, 0x64, 0x18, 0x0b, + 0x1f, 0xa4, 0x5d, 0x2b, 0xc1, 0xa4, 0x28, 0x92, 0xb2, 0x6f, 0xbd, 0x8b, 0x5a, 0xc5, 0xe1, 0x84, + 0xce, 0x40, 0xda, 0x75, 0x3d, 0x70, 0x27, 0x59, 0x74, 0x5b, 0x64, 0xb9, 0x41, 0x56, 0x71, 0xd6, + 0xfb, 0xa8, 0xcd, 0x43, 0x5e, 0x40, 0x3e, 0x23, 0x0f, 0xa5, 0xfd, 0x8a, 0x1e, 0x7d, 0x3d, 0x59, + 0x74, 0xdb, 0x27, 0xab, 0x2d, 0x72, 0x15, 0xdb, 0xff, 0xd9, 0x40, 0xb5, 0xff, 0x6f, 0x34, 0xfe, + 0xb0, 0x87, 0x9a, 0x2f, 0x33, 0xf1, 0x9a, 0x4c, 0x4c, 0x63, 0xe3, 0x96, 0xc3, 0xf0, 0xe6, 0xb1, + 0x71, 0x7d, 0x0a, 0xfe, 0x62, 0xa0, 0xc6, 0x6d, 0xc5, 0xdf, 0xa3, 0x55, 0x1f, 0xf8, 0x5f, 0xfa, + 0xd8, 0x6c, 0xe0, 0x27, 0x03, 0xed, 0xe7, 0x0f, 0xc0, 0xea, 0xa1, 0xda, 0x94, 0xf1, 0xb1, 0xd6, + 0x6e, 0x7a, 0xaf, 0xe6, 0xf8, 0xda, 0xc7, 0x8c, 0x8f, 0x89, 0xee, 0x58, 0x87, 0x08, 0xd1, 0x88, + 0x3d, 0xce, 0x74, 0xeb, 0xa4, 0x33, 0xcb, 0xa7, 0x7a, 0x74, 0x7a, 0x9c, 0x77, 0xc8, 0x12, 0x2a, + 0x65, 0xe5, 0x74, 0x06, 0xfa, 0x21, 0x2d, 0xb1, 0xa6, 0x81, 0x41, 0x74, 0xc7, 0x72, 0x91, 0x99, + 0xfe, 0xca, 0x88, 0xfa, 0x60, 0xd7, 0x34, 0xec, 0x4e, 0x0e, 0x33, 0x4f, 0x8a, 0x06, 0x29, 0x31, + 0xde, 0x5b, 0xe7, 0x17, 0x4e, 0xe5, 0xc5, 0x85, 0x53, 0xf9, 0xfd, 0xc2, 0xa9, 0x3c, 0x4f, 0x1c, + 0xe3, 0x3c, 0x71, 0x8c, 0x17, 0x89, 0x63, 0xfc, 0x99, 0x38, 0xc6, 0xf7, 0x7f, 0x39, 0x95, 0xa7, + 0x8d, 0xc2, 0xfb, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x9c, 0xe8, 0x51, 0xd0, 0x0a, 0x00, + 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/generated.proto index 1b23f714..51ac1605 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -90,9 +90,10 @@ message PolicyRule { // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. repeated string resourceNames = 5; - // NonResourceURLsSlice is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path + // NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path // This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. // Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. + // Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. repeated string nonResourceURLs = 6; } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/register.go index eadcb4fb..f3a6b5b7 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,12 +27,13 @@ import ( // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = unversioned.GroupVersion{Group: rbac.GroupName, Version: "v1alpha1"} -func AddToScheme(scheme *runtime.Scheme) { - addKnownTypes(scheme) -} +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) // Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) { +func addKnownTypes(scheme *runtime.Scheme) error { scheme.AddKnownTypes(SchemeGroupVersion, &Role{}, &RoleBinding{}, @@ -49,4 +50,5 @@ func addKnownTypes(scheme *runtime.Scheme) { &v1.ExportOptions{}, ) versioned.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/types.go index 52eacfe3..e8a815ee 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -35,16 +35,19 @@ type PolicyRule struct { // AttributeRestrictions will vary depending on what the Authorizer/AuthorizationAttributeBuilder pair supports. // If the Authorizer does not recognize how to handle the AttributeRestrictions, the Authorizer should report an error. AttributeRestrictions runtime.RawExtension `json:"attributeRestrictions,omitempty" protobuf:"bytes,2,opt,name=attributeRestrictions"` + // APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of // the enumerated resources in any API group will be allowed. - APIGroups []string `json:"apiGroups" protobuf:"bytes,3,rep,name=apiGroups"` + APIGroups []string `json:"apiGroups,omitempty" protobuf:"bytes,3,rep,name=apiGroups"` // Resources is a list of resources this rule applies to. ResourceAll represents all resources. - Resources []string `json:"resources" protobuf:"bytes,4,rep,name=resources"` + Resources []string `json:"resources,omitempty" protobuf:"bytes,4,rep,name=resources"` // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. ResourceNames []string `json:"resourceNames,omitempty" protobuf:"bytes,5,rep,name=resourceNames"` - // NonResourceURLsSlice is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path + + // NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path // This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. // Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. + // Rules can either apply to API resources (such as "pods" or "secrets") or non-resource URL paths (such as "/api"), but not both. NonResourceURLs []string `json:"nonResourceURLs,omitempty" protobuf:"bytes,6,rep,name=nonResourceURLs"` } @@ -113,7 +116,8 @@ type RoleList struct { Items []Role `json:"items" protobuf:"bytes,2,rep,name=items"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding. type ClusterRole struct { @@ -125,7 +129,8 @@ type ClusterRole struct { Rules []PolicyRule `json:"rules" protobuf:"bytes,2,rep,name=rules"` } -// +genclient=true,nonNamespaced=true +// +genclient=true +// +nonNamespaced=true // ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, // and adds who information via Subject. diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/types_swagger_doc_generated.go index b88c93c0..6d1c4bc9 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/types_swagger_doc_generated.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -75,7 +75,7 @@ var map_PolicyRule = map[string]string{ "apiGroups": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", "resources": "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", "resourceNames": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", - "nonResourceURLs": "NonResourceURLsSlice is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding.", + "nonResourceURLs": "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", } func (PolicyRule) SwaggerDoc() map[string]string { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/conversion_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/zz_generated.conversion.go similarity index 98% rename from vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/conversion_generated.go rename to vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/zz_generated.conversion.go index f176aa09..6e7ef9be 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/conversion_generated.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/zz_generated.conversion.go @@ -1,7 +1,7 @@ // +build !ignore_autogenerated /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,7 +28,13 @@ import ( ) func init() { - if err := api.Scheme.AddGeneratedConversionFuncs( + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( Convert_v1alpha1_ClusterRole_To_rbac_ClusterRole, Convert_rbac_ClusterRole_To_v1alpha1_ClusterRole, Convert_v1alpha1_ClusterRoleBinding_To_rbac_ClusterRoleBinding, @@ -49,10 +55,7 @@ func init() { Convert_rbac_RoleList_To_v1alpha1_RoleList, Convert_v1alpha1_Subject_To_rbac_Subject, Convert_rbac_Subject_To_v1alpha1_Subject, - ); err != nil { - // if one of the conversion functions is malformed, detect it immediately. - panic(err) - } + ) } func autoConvert_v1alpha1_ClusterRole_To_rbac_ClusterRole(in *ClusterRole, out *rbac.ClusterRole, s conversion.Scope) error { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000..50c15fd0 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,281 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1alpha1 + +import ( + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_ClusterRole, InType: reflect.TypeOf(&ClusterRole{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_ClusterRoleBinding, InType: reflect.TypeOf(&ClusterRoleBinding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_ClusterRoleBindingList, InType: reflect.TypeOf(&ClusterRoleBindingList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_ClusterRoleList, InType: reflect.TypeOf(&ClusterRoleList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_PolicyRule, InType: reflect.TypeOf(&PolicyRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_Role, InType: reflect.TypeOf(&Role{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_RoleBinding, InType: reflect.TypeOf(&RoleBinding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_RoleBindingList, InType: reflect.TypeOf(&RoleBindingList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_RoleList, InType: reflect.TypeOf(&RoleList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1alpha1_Subject, InType: reflect.TypeOf(&Subject{})}, + ) +} + +func DeepCopy_v1alpha1_ClusterRole(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRole) + out := out.(*ClusterRole) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_PolicyRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_ClusterRoleBinding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleBinding) + out := out.(*ClusterRoleBinding) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subjects != nil { + in, out := &in.Subjects, &out.Subjects + *out = make([]Subject, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Subjects = nil + } + out.RoleRef = in.RoleRef + return nil + } +} + +func DeepCopy_v1alpha1_ClusterRoleBindingList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleBindingList) + out := out.(*ClusterRoleBindingList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterRoleBinding, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_ClusterRoleBinding(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_ClusterRoleList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleList) + out := out.(*ClusterRoleList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterRole, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_ClusterRole(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_PolicyRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PolicyRule) + out := out.(*PolicyRule) + if in.Verbs != nil { + in, out := &in.Verbs, &out.Verbs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Verbs = nil + } + if err := runtime.DeepCopy_runtime_RawExtension(&in.AttributeRestrictions, &out.AttributeRestrictions, c); err != nil { + return err + } + if in.APIGroups != nil { + in, out := &in.APIGroups, &out.APIGroups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.APIGroups = nil + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Resources = nil + } + if in.ResourceNames != nil { + in, out := &in.ResourceNames, &out.ResourceNames + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ResourceNames = nil + } + if in.NonResourceURLs != nil { + in, out := &in.NonResourceURLs, &out.NonResourceURLs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.NonResourceURLs = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_Role(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Role) + out := out.(*Role) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_PolicyRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_RoleBinding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleBinding) + out := out.(*RoleBinding) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subjects != nil { + in, out := &in.Subjects, &out.Subjects + *out = make([]Subject, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Subjects = nil + } + out.RoleRef = in.RoleRef + return nil + } +} + +func DeepCopy_v1alpha1_RoleBindingList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleBindingList) + out := out.(*RoleBindingList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RoleBinding, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_RoleBinding(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_RoleList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleList) + out := out.(*RoleList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Role, len(*in)) + for i := range *in { + if err := DeepCopy_v1alpha1_Role(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_v1alpha1_Subject(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Subject) + out := out.(*Subject) + out.Kind = in.Kind + out.APIVersion = in.APIVersion + out.Name = in.Name + out.Namespace = in.Namespace + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/rbac/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/rbac/zz_generated.deepcopy.go new file mode 100644 index 00000000..98812c54 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/rbac/zz_generated.deepcopy.go @@ -0,0 +1,285 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package rbac + +import ( + api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_ClusterRole, InType: reflect.TypeOf(&ClusterRole{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_ClusterRoleBinding, InType: reflect.TypeOf(&ClusterRoleBinding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_ClusterRoleBindingList, InType: reflect.TypeOf(&ClusterRoleBindingList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_ClusterRoleList, InType: reflect.TypeOf(&ClusterRoleList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_PolicyRule, InType: reflect.TypeOf(&PolicyRule{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_Role, InType: reflect.TypeOf(&Role{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_RoleBinding, InType: reflect.TypeOf(&RoleBinding{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_RoleBindingList, InType: reflect.TypeOf(&RoleBindingList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_RoleList, InType: reflect.TypeOf(&RoleList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_rbac_Subject, InType: reflect.TypeOf(&Subject{})}, + ) +} + +func DeepCopy_rbac_ClusterRole(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRole) + out := out.(*ClusterRole) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + if err := DeepCopy_rbac_PolicyRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_rbac_ClusterRoleBinding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleBinding) + out := out.(*ClusterRoleBinding) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subjects != nil { + in, out := &in.Subjects, &out.Subjects + *out = make([]Subject, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Subjects = nil + } + out.RoleRef = in.RoleRef + return nil + } +} + +func DeepCopy_rbac_ClusterRoleBindingList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleBindingList) + out := out.(*ClusterRoleBindingList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterRoleBinding, len(*in)) + for i := range *in { + if err := DeepCopy_rbac_ClusterRoleBinding(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_rbac_ClusterRoleList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*ClusterRoleList) + out := out.(*ClusterRoleList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ClusterRole, len(*in)) + for i := range *in { + if err := DeepCopy_rbac_ClusterRole(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_rbac_PolicyRule(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PolicyRule) + out := out.(*PolicyRule) + if in.Verbs != nil { + in, out := &in.Verbs, &out.Verbs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Verbs = nil + } + if in.AttributeRestrictions == nil { + out.AttributeRestrictions = nil + } else if newVal, err := c.DeepCopy(&in.AttributeRestrictions); err != nil { + return err + } else { + out.AttributeRestrictions = *newVal.(*runtime.Object) + } + if in.APIGroups != nil { + in, out := &in.APIGroups, &out.APIGroups + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.APIGroups = nil + } + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.Resources = nil + } + if in.ResourceNames != nil { + in, out := &in.ResourceNames, &out.ResourceNames + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.ResourceNames = nil + } + if in.NonResourceURLs != nil { + in, out := &in.NonResourceURLs, &out.NonResourceURLs + *out = make([]string, len(*in)) + copy(*out, *in) + } else { + out.NonResourceURLs = nil + } + return nil + } +} + +func DeepCopy_rbac_Role(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Role) + out := out.(*Role) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Rules != nil { + in, out := &in.Rules, &out.Rules + *out = make([]PolicyRule, len(*in)) + for i := range *in { + if err := DeepCopy_rbac_PolicyRule(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Rules = nil + } + return nil + } +} + +func DeepCopy_rbac_RoleBinding(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleBinding) + out := out.(*RoleBinding) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + if in.Subjects != nil { + in, out := &in.Subjects, &out.Subjects + *out = make([]Subject, len(*in)) + for i := range *in { + (*out)[i] = (*in)[i] + } + } else { + out.Subjects = nil + } + out.RoleRef = in.RoleRef + return nil + } +} + +func DeepCopy_rbac_RoleBindingList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleBindingList) + out := out.(*RoleBindingList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]RoleBinding, len(*in)) + for i := range *in { + if err := DeepCopy_rbac_RoleBinding(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_rbac_RoleList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RoleList) + out := out.(*RoleList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Role, len(*in)) + for i := range *in { + if err := DeepCopy_rbac_Role(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} + +func DeepCopy_rbac_Subject(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Subject) + out := out.(*Subject) + out.Kind = in.Kind + out.APIVersion = in.APIVersion + out.Name = in.Name + out.Namespace = in.Namespace + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/doc.go new file mode 100644 index 00000000..a7eb30b6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register +// +groupName=storage.k8s.io +package storage diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/install/install.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/install/install.go new file mode 100644 index 00000000..52801618 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/install/install.go @@ -0,0 +1,137 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package install installs the experimental API group, making it available as +// an option to all of the API encoding/decoding machinery. +package install + +import ( + "fmt" + + "github.com/golang/glog" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apimachinery" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/apis/storage/v1beta1" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/sets" +) + +const importPrefix = "k8s.io/kubernetes/pkg/apis/storage" + +var accessor = meta.NewAccessor() + +// availableVersions lists all known external versions for this group from most preferred to least preferred +var availableVersions = []unversioned.GroupVersion{v1beta1.SchemeGroupVersion} + +func init() { + registered.RegisterVersions(availableVersions) + externalVersions := []unversioned.GroupVersion{} + for _, v := range availableVersions { + if registered.IsAllowedVersion(v) { + externalVersions = append(externalVersions, v) + } + } + if len(externalVersions) == 0 { + glog.V(4).Infof("No version is registered for group %v", storage.GroupName) + return + } + + if err := registered.EnableVersions(externalVersions...); err != nil { + glog.V(4).Infof("%v", err) + return + } + if err := enableVersions(externalVersions); err != nil { + glog.V(4).Infof("%v", err) + return + } +} + +// TODO: enableVersions should be centralized rather than spread in each API +// group. +// We can combine registered.RegisterVersions, registered.EnableVersions and +// registered.RegisterGroup once we have moved enableVersions there. +func enableVersions(externalVersions []unversioned.GroupVersion) error { + addVersionsToScheme(externalVersions...) + preferredExternalVersion := externalVersions[0] + + groupMeta := apimachinery.GroupMeta{ + GroupVersion: preferredExternalVersion, + GroupVersions: externalVersions, + RESTMapper: newRESTMapper(externalVersions), + SelfLinker: runtime.SelfLinker(accessor), + InterfacesFor: interfacesFor, + } + + if err := registered.RegisterGroup(groupMeta); err != nil { + return err + } + api.RegisterRESTMapper(groupMeta.RESTMapper) + return nil +} + +func newRESTMapper(externalVersions []unversioned.GroupVersion) meta.RESTMapper { + // the list of kinds that are scoped at the root of the api hierarchy + // if a kind is not enumerated here, it is assumed to have a namespace scope + rootScoped := sets.NewString( + "StorageClass", + ) + + ignoredKinds := sets.NewString() + + return api.NewDefaultRESTMapper(externalVersions, interfacesFor, importPrefix, ignoredKinds, rootScoped) +} + +// interfacesFor returns the default Codec and ResourceVersioner for a given version +// string, or an error if the version is not known. +func interfacesFor(version unversioned.GroupVersion) (*meta.VersionInterfaces, error) { + switch version { + case v1beta1.SchemeGroupVersion: + return &meta.VersionInterfaces{ + ObjectConvertor: api.Scheme, + MetadataAccessor: accessor, + }, nil + default: + g, _ := registered.Group(storage.GroupName) + return nil, fmt.Errorf("unsupported storage version: %s (valid: %v)", version, g.GroupVersions) + } +} + +func addVersionsToScheme(externalVersions ...unversioned.GroupVersion) { + // add the internal version to Scheme + if err := storage.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } + // add the enabled external versions to Scheme + for _, v := range externalVersions { + if !registered.IsEnabledVersion(v) { + glog.Errorf("Version %s is not enabled, so it will not be added to the Scheme.", v) + continue + } + switch v { + case v1beta1.SchemeGroupVersion: + if err := v1beta1.AddToScheme(api.Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } + } + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/register.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/register.go new file mode 100644 index 00000000..2da8d17c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/register.go @@ -0,0 +1,56 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storage + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" +) + +// GroupName is the group name use in this package +const GroupName = "storage.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} + +// Kind takes an unqualified kind and returns a Group qualified GroupKind +func Kind(kind string) unversioned.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) unversioned.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &api.ListOptions{}, + &api.DeleteOptions{}, + &api.ExportOptions{}, + + &StorageClass{}, + &StorageClassList{}, + ) + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/types.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/types.go new file mode 100644 index 00000000..be0831a6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/types.go @@ -0,0 +1,60 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storage + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" +) + +// +genclient=true +// +nonNamespaced=true + +// StorageClass describes a named "class" of storage offered in a cluster. +// Different classes might map to quality-of-service levels, or to backup policies, +// or to arbitrary policies determined by the cluster administrators. Kubernetes +// itself is unopinionated about what classes represent. This concept is sometimes +// called "profiles" in other storage systems. +// The name of a StorageClass object is significant, and is how users can request a particular class. +type StorageClass struct { + unversioned.TypeMeta `json:",inline"` + api.ObjectMeta `json:"metadata,omitempty"` + + // provisioner is the driver expected to handle this StorageClass. + // This is an optionally-prefixed name, like a label key. + // For example: "kubernetes.io/gce-pd" or "kubernetes.io/aws-ebs". + // This value may not be empty. + Provisioner string `json:"provisioner"` + + // parameters holds parameters for the provisioner. + // These values are opaque to the system and are passed directly + // to the provisioner. The only validation done on keys is that they are + // not empty. The maximum number of parameters is + // 512, with a cumulative max size of 256K + Parameters map[string]string `json:"parameters,omitempty"` +} + +// StorageClassList is a collection of storage classes. +type StorageClassList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + unversioned.ListMeta `json:"metadata,omitempty"` + + // Items is the list of StorageClasses + Items []StorageClass `json:"items"` +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/doc.go new file mode 100644 index 00000000..fd556e8b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// +k8s:deepcopy-gen=package,register +// +k8s:conversion-gen=k8s.io/kubernetes/pkg/apis/storage +// +groupName=storage.k8s.io +package v1beta1 diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.pb.go new file mode 100644 index 00000000..77ba689c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.pb.go @@ -0,0 +1,729 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.proto +// DO NOT EDIT! + +/* + Package v1beta1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.proto + + It has these top-level messages: + StorageClass + StorageClassList +*/ +package v1beta1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import strings "strings" +import reflect "reflect" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *StorageClass) Reset() { *m = StorageClass{} } +func (*StorageClass) ProtoMessage() {} +func (*StorageClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *StorageClassList) Reset() { *m = StorageClassList{} } +func (*StorageClassList) ProtoMessage() {} +func (*StorageClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func init() { + proto.RegisterType((*StorageClass)(nil), "k8s.io.kubernetes.pkg.apis.storage.v1beta1.StorageClass") + proto.RegisterType((*StorageClassList)(nil), "k8s.io.kubernetes.pkg.apis.storage.v1beta1.StorageClassList") +} +func (m *StorageClass) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *StorageClass) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n1 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.Provisioner))) + i += copy(data[i:], m.Provisioner) + if len(m.Parameters) > 0 { + for k := range m.Parameters { + data[i] = 0x1a + i++ + v := m.Parameters[k] + mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + i = encodeVarintGenerated(data, i, uint64(mapSize)) + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(k))) + i += copy(data[i:], k) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(v))) + i += copy(data[i:], v) + } + } + return i, nil +} + +func (m *StorageClassList) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *StorageClassList) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) + n2, err := m.ListMeta.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n2 + if len(m.Items) > 0 { + for _, msg := range m.Items { + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(msg.Size())) + n, err := msg.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + +func encodeFixed64Generated(data []byte, offset int, v uint64) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + data[offset+4] = uint8(v >> 32) + data[offset+5] = uint8(v >> 40) + data[offset+6] = uint8(v >> 48) + data[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(data []byte, offset int, v uint32) int { + data[offset] = uint8(v) + data[offset+1] = uint8(v >> 8) + data[offset+2] = uint8(v >> 16) + data[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(data []byte, offset int, v uint64) int { + for v >= 1<<7 { + data[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + data[offset] = uint8(v) + return offset + 1 +} +func (m *StorageClass) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Provisioner) + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Parameters) > 0 { + for k, v := range m.Parameters { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + len(v) + sovGenerated(uint64(len(v))) + n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) + } + } + return n +} + +func (m *StorageClassList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *StorageClass) String() string { + if this == nil { + return "nil" + } + keysForParameters := make([]string, 0, len(this.Parameters)) + for k := range this.Parameters { + keysForParameters = append(keysForParameters, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) + mapStringForParameters := "map[string]string{" + for _, k := range keysForParameters { + mapStringForParameters += fmt.Sprintf("%v: %v,", k, this.Parameters[k]) + } + mapStringForParameters += "}" + s := strings.Join([]string{`&StorageClass{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_kubernetes_pkg_api_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Provisioner:` + fmt.Sprintf("%v", this.Provisioner) + `,`, + `Parameters:` + mapStringForParameters + `,`, + `}`, + }, "") + return s +} +func (this *StorageClassList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&StorageClassList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_kubernetes_pkg_api_unversioned.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "StorageClass", "StorageClass", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *StorageClass) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StorageClass: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StorageClass: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Provisioner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Provisioner = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Parameters", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapkey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(data[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(data[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + if m.Parameters == nil { + m.Parameters = make(map[string]string) + } + m.Parameters[mapkey] = mapvalue + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StorageClassList) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StorageClassList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StorageClassList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, StorageClass{}) + if err := m.Items[len(m.Items)-1].Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenerated(data []byte) (n int, err error) { + l := len(data) + iNdEx := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if data[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(data[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +var fileDescriptorGenerated = []byte{ + // 452 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x92, 0x4d, 0x8b, 0xd3, 0x40, + 0x18, 0xc7, 0x33, 0x2d, 0xc5, 0xdd, 0xa9, 0x62, 0x89, 0x1e, 0x4a, 0x0e, 0xd9, 0xb2, 0xa7, 0x2a, + 0xee, 0x0c, 0x5d, 0x58, 0x28, 0x0b, 0x5e, 0x2a, 0x82, 0x82, 0xe2, 0x12, 0x2f, 0x22, 0xec, 0x61, + 0xb2, 0x7d, 0x8c, 0x63, 0x9a, 0x4c, 0x98, 0x79, 0x12, 0x58, 0xf0, 0xe0, 0x47, 0xf0, 0x63, 0xf5, + 0xd8, 0xa3, 0x07, 0x59, 0x6c, 0xfc, 0x22, 0x92, 0x17, 0x37, 0xa1, 0x2f, 0x22, 0x7b, 0x9b, 0x97, + 0xe7, 0xf7, 0x7f, 0x9e, 0xf9, 0x25, 0xf4, 0x3c, 0x9c, 0x1a, 0x26, 0x15, 0x0f, 0x53, 0x1f, 0x74, + 0x0c, 0x08, 0x86, 0x27, 0x61, 0xc0, 0x45, 0x22, 0x0d, 0x37, 0xa8, 0xb4, 0x08, 0x80, 0x67, 0x13, + 0x1f, 0x50, 0x4c, 0x78, 0x00, 0x31, 0x68, 0x81, 0x30, 0x67, 0x89, 0x56, 0xa8, 0xec, 0xa7, 0x15, + 0xcb, 0x1a, 0x96, 0x25, 0x61, 0xc0, 0x0a, 0x96, 0xd5, 0x2c, 0xab, 0x59, 0xe7, 0x24, 0x90, 0xf8, + 0x39, 0xf5, 0xd9, 0x95, 0x8a, 0x78, 0xa0, 0x02, 0xc5, 0xcb, 0x08, 0x3f, 0xfd, 0x54, 0xee, 0xca, + 0x4d, 0xb9, 0xaa, 0xa2, 0x9d, 0xb3, 0xbd, 0x63, 0xf1, 0x34, 0xce, 0x40, 0x1b, 0xa9, 0x62, 0x98, + 0x6f, 0x4e, 0xe4, 0x3c, 0xdb, 0x8f, 0x65, 0x5b, 0xf3, 0x3b, 0x27, 0xbb, 0xab, 0x75, 0x1a, 0xa3, + 0x8c, 0x60, 0xab, 0x7c, 0xb2, 0xbb, 0x3c, 0x45, 0xb9, 0xe0, 0x32, 0x46, 0x83, 0x7a, 0x13, 0x39, + 0xfe, 0xd9, 0xa1, 0xf7, 0xdf, 0x57, 0x26, 0x5e, 0x2c, 0x84, 0x31, 0xf6, 0x07, 0x7a, 0x10, 0x01, + 0x8a, 0xb9, 0x40, 0x31, 0x24, 0x23, 0x32, 0xee, 0x9f, 0x8e, 0xd9, 0x5e, 0x8b, 0x2c, 0x9b, 0xb0, + 0x77, 0xfe, 0x17, 0xb8, 0xc2, 0xb7, 0x80, 0x62, 0x66, 0x2f, 0x6f, 0x8e, 0xac, 0xfc, 0xe6, 0x88, + 0x36, 0x67, 0xde, 0x6d, 0x9a, 0x7d, 0x46, 0xfb, 0x89, 0x56, 0x99, 0x2c, 0xcd, 0xe8, 0x61, 0x67, + 0x44, 0xc6, 0x87, 0xb3, 0x47, 0x35, 0xd2, 0xbf, 0x68, 0xae, 0xbc, 0x76, 0x9d, 0xfd, 0x95, 0xd2, + 0x44, 0x68, 0x11, 0x01, 0x82, 0x36, 0xc3, 0xee, 0xa8, 0x3b, 0xee, 0x9f, 0xbe, 0x62, 0xff, 0xff, + 0x61, 0x59, 0xfb, 0x79, 0xec, 0xe2, 0x36, 0xea, 0x65, 0x8c, 0xfa, 0xba, 0x19, 0xb9, 0xb9, 0xf0, + 0x5a, 0xfd, 0x9c, 0xe7, 0xf4, 0xe1, 0x06, 0x62, 0x0f, 0x68, 0x37, 0x84, 0xeb, 0x52, 0xce, 0xa1, + 0x57, 0x2c, 0xed, 0xc7, 0xb4, 0x97, 0x89, 0x45, 0x0a, 0xd5, 0x9b, 0xbc, 0x6a, 0x73, 0xde, 0x99, + 0x92, 0xe3, 0x15, 0xa1, 0x83, 0x76, 0xff, 0x37, 0xd2, 0xa0, 0x7d, 0xb9, 0xa5, 0x98, 0xff, 0x43, + 0x71, 0xeb, 0x6f, 0x62, 0x05, 0x5e, 0x9a, 0x1e, 0xd4, 0x63, 0x1f, 0xfc, 0x3d, 0x69, 0x79, 0xbe, + 0xa4, 0x3d, 0x89, 0x10, 0x99, 0x61, 0xa7, 0x74, 0x35, 0xbd, 0xab, 0xab, 0xd9, 0x83, 0xba, 0x49, + 0xef, 0x75, 0x11, 0xe7, 0x55, 0xa9, 0xb3, 0x27, 0xcb, 0xb5, 0x6b, 0xad, 0xd6, 0xae, 0xf5, 0x63, + 0xed, 0x5a, 0xdf, 0x72, 0x97, 0x2c, 0x73, 0x97, 0xac, 0x72, 0x97, 0xfc, 0xca, 0x5d, 0xf2, 0xfd, + 0xb7, 0x6b, 0x7d, 0xbc, 0x57, 0xa7, 0xfd, 0x09, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x7f, 0x99, 0xc0, + 0xbb, 0x03, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.proto b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.proto new file mode 100644 index 00000000..36aa6e9e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/generated.proto @@ -0,0 +1,59 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.kubernetes.pkg.apis.storage.v1beta1; + +import "k8s.io/kubernetes/pkg/api/unversioned/generated.proto"; +import "k8s.io/kubernetes/pkg/api/v1/generated.proto"; +import "k8s.io/kubernetes/pkg/runtime/generated.proto"; +import "k8s.io/kubernetes/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1beta1"; + +// StorageClass describes the parameters for a class of storage for +// which PersistentVolumes can be dynamically provisioned. +// +// StorageClasses are non-namespaced; the name of the storage class +// according to etcd is in ObjectMeta.Name. +message StorageClass { + // Standard object's metadata. + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + optional k8s.io.kubernetes.pkg.api.v1.ObjectMeta metadata = 1; + + // Provisioner indicates the type of the provisioner. + optional string provisioner = 2; + + // Parameters holds the parameters for the provisioner that should + // create volumes of this storage class. + map parameters = 3; +} + +// StorageClassList is a collection of storage classes. +message StorageClassList { + // Standard list metadata + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + optional k8s.io.kubernetes.pkg.api.unversioned.ListMeta metadata = 1; + + // Items is the list of StorageClasses + repeated StorageClass items = 2; +} + diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/register.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/register.go new file mode 100644 index 00000000..e850a634 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/register.go @@ -0,0 +1,50 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/runtime" + versionedwatch "k8s.io/kubernetes/pkg/watch/versioned" +) + +// GroupName is the group name use in this package +const GroupName = "storage.k8s.io" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = unversioned.GroupVersion{Group: GroupName, Version: "v1beta1"} + +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &v1.ListOptions{}, + &v1.DeleteOptions{}, + &v1.ExportOptions{}, + + &StorageClass{}, + &StorageClassList{}, + ) + + versionedwatch.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/types.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/types.go new file mode 100644 index 00000000..a0c4a6d6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/types.go @@ -0,0 +1,55 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +import ( + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" +) + +// +genclient=true +// +nonNamespaced=true + +// StorageClass describes the parameters for a class of storage for +// which PersistentVolumes can be dynamically provisioned. +// +// StorageClasses are non-namespaced; the name of the storage class +// according to etcd is in ObjectMeta.Name. +type StorageClass struct { + unversioned.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + v1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Provisioner indicates the type of the provisioner. + Provisioner string `json:"provisioner" protobuf:"bytes,2,opt,name=provisioner"` + + // Parameters holds the parameters for the provisioner that should + // create volumes of this storage class. + Parameters map[string]string `json:"parameters,omitempty" protobuf:"bytes,3,rep,name=parameters"` +} + +// StorageClassList is a collection of storage classes. +type StorageClassList struct { + unversioned.TypeMeta `json:",inline"` + // Standard list metadata + // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata + unversioned.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Items is the list of StorageClasses + Items []StorageClass `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/types_swagger_doc_generated.go new file mode 100644 index 00000000..e8362e38 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/types_swagger_doc_generated.go @@ -0,0 +1,51 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package v1beta1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_StorageClass = map[string]string{ + "": "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", + "metadata": "Standard object's metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata", + "provisioner": "Provisioner indicates the type of the provisioner.", + "parameters": "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", +} + +func (StorageClass) SwaggerDoc() map[string]string { + return map_StorageClass +} + +var map_StorageClassList = map[string]string{ + "": "StorageClassList is a collection of storage classes.", + "metadata": "Standard list metadata More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata", + "items": "Items is the list of StorageClasses", +} + +func (StorageClassList) SwaggerDoc() map[string]string { + return map_StorageClassList +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.conversion.go new file mode 100644 index 00000000..521b0535 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.conversion.go @@ -0,0 +1,127 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by conversion-gen. Do not edit it manually! + +package v1beta1 + +import ( + api "k8s.io/kubernetes/pkg/api" + storage "k8s.io/kubernetes/pkg/apis/storage" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" +) + +func init() { + SchemeBuilder.Register(RegisterConversions) +} + +// RegisterConversions adds conversion functions to the given scheme. +// Public to allow building arbitrary schemes. +func RegisterConversions(scheme *runtime.Scheme) error { + return scheme.AddGeneratedConversionFuncs( + Convert_v1beta1_StorageClass_To_storage_StorageClass, + Convert_storage_StorageClass_To_v1beta1_StorageClass, + Convert_v1beta1_StorageClassList_To_storage_StorageClassList, + Convert_storage_StorageClassList_To_v1beta1_StorageClassList, + ) +} + +func autoConvert_v1beta1_StorageClass_To_storage_StorageClass(in *StorageClass, out *storage.StorageClass, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + out.Provisioner = in.Provisioner + out.Parameters = in.Parameters + return nil +} + +func Convert_v1beta1_StorageClass_To_storage_StorageClass(in *StorageClass, out *storage.StorageClass, s conversion.Scope) error { + return autoConvert_v1beta1_StorageClass_To_storage_StorageClass(in, out, s) +} + +func autoConvert_storage_StorageClass_To_v1beta1_StorageClass(in *storage.StorageClass, out *StorageClass, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + // TODO: Inefficient conversion - can we improve it? + if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil { + return err + } + out.Provisioner = in.Provisioner + out.Parameters = in.Parameters + return nil +} + +func Convert_storage_StorageClass_To_v1beta1_StorageClass(in *storage.StorageClass, out *StorageClass, s conversion.Scope) error { + return autoConvert_storage_StorageClass_To_v1beta1_StorageClass(in, out, s) +} + +func autoConvert_v1beta1_StorageClassList_To_storage_StorageClassList(in *StorageClassList, out *storage.StorageClassList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]storage.StorageClass, len(*in)) + for i := range *in { + if err := Convert_v1beta1_StorageClass_To_storage_StorageClass(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_v1beta1_StorageClassList_To_storage_StorageClassList(in *StorageClassList, out *storage.StorageClassList, s conversion.Scope) error { + return autoConvert_v1beta1_StorageClassList_To_storage_StorageClassList(in, out, s) +} + +func autoConvert_storage_StorageClassList_To_v1beta1_StorageClassList(in *storage.StorageClassList, out *StorageClassList, s conversion.Scope) error { + if err := api.Convert_unversioned_TypeMeta_To_unversioned_TypeMeta(&in.TypeMeta, &out.TypeMeta, s); err != nil { + return err + } + if err := api.Convert_unversioned_ListMeta_To_unversioned_ListMeta(&in.ListMeta, &out.ListMeta, s); err != nil { + return err + } + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]StorageClass, len(*in)) + for i := range *in { + if err := Convert_storage_StorageClass_To_v1beta1_StorageClass(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil +} + +func Convert_storage_StorageClassList_To_v1beta1_StorageClassList(in *storage.StorageClassList, out *StorageClassList, s conversion.Scope) error { + return autoConvert_storage_StorageClassList_To_v1beta1_StorageClassList(in, out, s) +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.deepcopy.go new file mode 100644 index 00000000..d9e7ed09 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/v1beta1/zz_generated.deepcopy.go @@ -0,0 +1,84 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1beta1 + +import ( + v1 "k8s.io/kubernetes/pkg/api/v1" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_StorageClass, InType: reflect.TypeOf(&StorageClass{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1beta1_StorageClassList, InType: reflect.TypeOf(&StorageClassList{})}, + ) +} + +func DeepCopy_v1beta1_StorageClass(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*StorageClass) + out := out.(*StorageClass) + out.TypeMeta = in.TypeMeta + if err := v1.DeepCopy_v1_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Provisioner = in.Provisioner + if in.Parameters != nil { + in, out := &in.Parameters, &out.Parameters + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Parameters = nil + } + return nil + } +} + +func DeepCopy_v1beta1_StorageClassList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*StorageClassList) + out := out.(*StorageClassList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]StorageClass, len(*in)) + for i := range *in { + if err := DeepCopy_v1beta1_StorageClass(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/storage/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/storage/zz_generated.deepcopy.go new file mode 100644 index 00000000..75426697 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/apis/storage/zz_generated.deepcopy.go @@ -0,0 +1,84 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package storage + +import ( + api "k8s.io/kubernetes/pkg/api" + conversion "k8s.io/kubernetes/pkg/conversion" + runtime "k8s.io/kubernetes/pkg/runtime" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_storage_StorageClass, InType: reflect.TypeOf(&StorageClass{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_storage_StorageClassList, InType: reflect.TypeOf(&StorageClassList{})}, + ) +} + +func DeepCopy_storage_StorageClass(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*StorageClass) + out := out.(*StorageClass) + out.TypeMeta = in.TypeMeta + if err := api.DeepCopy_api_ObjectMeta(&in.ObjectMeta, &out.ObjectMeta, c); err != nil { + return err + } + out.Provisioner = in.Provisioner + if in.Parameters != nil { + in, out := &in.Parameters, &out.Parameters + *out = make(map[string]string) + for key, val := range *in { + (*out)[key] = val + } + } else { + out.Parameters = nil + } + return nil + } +} + +func DeepCopy_storage_StorageClassList(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*StorageClassList) + out := out.(*StorageClassList) + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]StorageClass, len(*in)) + for i := range *in { + if err := DeepCopy_storage_StorageClass(&(*in)[i], &(*out)[i], c); err != nil { + return err + } + } + } else { + out.Items = nil + } + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/auth/authenticator/interfaces.go b/vendor/k8s.io/kubernetes/pkg/auth/authenticator/interfaces.go index 2da820cc..1eafe605 100644 --- a/vendor/k8s.io/kubernetes/pkg/auth/authenticator/interfaces.go +++ b/vendor/k8s.io/kubernetes/pkg/auth/authenticator/interfaces.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/auth/user/doc.go b/vendor/k8s.io/kubernetes/pkg/auth/user/doc.go index b1125849..570c51ae 100644 --- a/vendor/k8s.io/kubernetes/pkg/auth/user/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/auth/user/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/auth/user/user.go b/vendor/k8s.io/kubernetes/pkg/auth/user/user.go index c4a4c00d..7e7cc16f 100644 --- a/vendor/k8s.io/kubernetes/pkg/auth/user/user.go +++ b/vendor/k8s.io/kubernetes/pkg/auth/user/user.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,8 @@ type Info interface { // This is a map[string][]string because it needs to be serializeable into // a SubjectAccessReviewSpec.authorization.k8s.io for proper authorization // delegation flows + // In order to faithfully round-trip through an impersonation flow, these keys + // MUST be lowercase. GetExtra() map[string][]string } diff --git a/vendor/k8s.io/kubernetes/pkg/capabilities/capabilities.go b/vendor/k8s.io/kubernetes/pkg/capabilities/capabilities.go index d0a882c5..96146c6b 100644 --- a/vendor/k8s.io/kubernetes/pkg/capabilities/capabilities.go +++ b/vendor/k8s.io/kubernetes/pkg/capabilities/capabilities.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -59,7 +59,7 @@ func Initialize(c Capabilities) { }) } -// Setup the capability set. It wraps Initialize for improving usibility. +// Setup the capability set. It wraps Initialize for improving usability. func Setup(allowPrivileged bool, privilegedSources PrivilegedSources, perConnectionBytesPerSec int64) { Initialize(Capabilities{ AllowPrivileged: allowPrivileged, diff --git a/vendor/k8s.io/kubernetes/pkg/capabilities/doc.go b/vendor/k8s.io/kubernetes/pkg/capabilities/doc.go index 81143a78..e2042a88 100644 --- a/vendor/k8s.io/kubernetes/pkg/capabilities/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/capabilities/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,5 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// package capbabilities manages system level capabilities +// package capabilities manages system level capabilities package capabilities diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/delta_fifo.go b/vendor/k8s.io/kubernetes/pkg/client/cache/delta_fifo.go index 3cb077fa..acf0fa89 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/delta_fifo.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/delta_fifo.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -228,15 +228,21 @@ func (f *DeltaFIFO) AddIfNotPresent(obj interface{}) error { } f.lock.Lock() defer f.lock.Unlock() + f.addIfNotPresent(id, deltas) + return nil +} + +// addIfNotPresent inserts deltas under id if it does not exist, and assumes the caller +// already holds the fifo lock. +func (f *DeltaFIFO) addIfNotPresent(id string, deltas Deltas) { f.populated = true if _, exists := f.items[id]; exists { - return nil + return } f.queue = append(f.queue, id) f.items[id] = deltas f.cond.Broadcast() - return nil } // re-listing and watching can deliver the same update multiple times in any @@ -387,7 +393,9 @@ func (f *DeltaFIFO) GetByKey(key string) (item interface{}, exists bool, err err // is returned, so if you don't successfully process it, you need to add it back // with AddIfNotPresent(). // process function is called under lock, so it is safe update data structures -// in it that need to be in sync with the queue (e.g. knownKeys). +// in it that need to be in sync with the queue (e.g. knownKeys). The PopProcessFunc +// may return an instance of ErrRequeue with a nested error to indicate the current +// item should be requeued (equivalent to calling AddIfNotPresent under the lock). // // Pop returns a 'Deltas', which has a complete list of all the things // that happened to the object (deltas) while it was sitting in the queue. @@ -409,9 +417,14 @@ func (f *DeltaFIFO) Pop(process PopProcessFunc) (interface{}, error) { continue } delete(f.items, id) + err := process(item) + if e, ok := err.(ErrRequeue); ok { + f.addIfNotPresent(id, item) + err = e.Err + } // Don't need to copyDeltas here, because we're transferring // ownership to the caller. - return item, process(item) + return item, err } } @@ -483,21 +496,46 @@ func (f *DeltaFIFO) Replace(list []interface{}, resourceVersion string) error { // Resync will send a sync event for each item func (f *DeltaFIFO) Resync() error { - f.lock.RLock() - defer f.lock.RUnlock() - for _, k := range f.knownObjects.ListKeys() { - obj, exists, err := f.knownObjects.GetByKey(k) - if err != nil { - glog.Errorf("Unexpected error %v during lookup of key %v, unable to queue object for sync", err, k) - continue - } else if !exists { - glog.Infof("Key %v does not exist in known objects store, unable to queue object for sync", k) - continue + var keys []string + func() { + f.lock.RLock() + defer f.lock.RUnlock() + keys = f.knownObjects.ListKeys() + }() + for _, k := range keys { + if err := f.syncKey(k); err != nil { + return err } + } + return nil +} - if err := f.queueActionLocked(Sync, obj); err != nil { - return fmt.Errorf("couldn't queue object: %v", err) - } +func (f *DeltaFIFO) syncKey(key string) error { + f.lock.Lock() + defer f.lock.Unlock() + obj, exists, err := f.knownObjects.GetByKey(key) + if err != nil { + glog.Errorf("Unexpected error %v during lookup of key %v, unable to queue object for sync", err, key) + return nil + } else if !exists { + glog.Infof("Key %v does not exist in known objects store, unable to queue object for sync", key) + return nil + } + + // If we are doing Resync() and there is already an event queued for that object, + // we ignore the Resync for it. This is to avoid the race, in which the resync + // comes with the previous value of object (since queueing an event for the object + // doesn't trigger changing the underlying store . + id, err := f.KeyOf(obj) + if err != nil { + return KeyError{obj, err} + } + if len(f.items[id]) > 0 { + return nil + } + + if err := f.queueActionLocked(Sync, obj); err != nil { + return fmt.Errorf("couldn't queue object: %v", err) } return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/doc.go b/vendor/k8s.io/kubernetes/pkg/client/cache/doc.go index 16600cf2..4f593f0d 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/expiration_cache.go b/vendor/k8s.io/kubernetes/pkg/client/cache/expiration_cache.go index ad8684e8..88ef89b3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/expiration_cache.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/expiration_cache.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import ( "time" "github.com/golang/glog" - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/clock" ) // ExpirationCache implements the store interface @@ -38,7 +38,7 @@ import ( type ExpirationCache struct { cacheStorage ThreadSafeStore keyFunc KeyFunc - clock util.Clock + clock clock.Clock expirationPolicy ExpirationPolicy // expirationLock is a write lock used to guarantee that we don't clobber // newly inserted objects because of a stale expiration timestamp comparison @@ -58,7 +58,7 @@ type TTLPolicy struct { Ttl time.Duration // Clock used to calculate ttl expiration - Clock util.Clock + Clock clock.Clock } // IsExpired returns true if the given object is older than the ttl, or it can't @@ -73,7 +73,7 @@ type timestampedEntry struct { timestamp time.Time } -// getTimestampedEntry returnes the timestampedEntry stored under the given key. +// getTimestampedEntry returns the timestampedEntry stored under the given key. func (c *ExpirationCache) getTimestampedEntry(key string) (*timestampedEntry, bool) { item, _ := c.cacheStorage.Get(key) if tsEntry, ok := item.(*timestampedEntry); ok { @@ -202,7 +202,7 @@ func NewTTLStore(keyFunc KeyFunc, ttl time.Duration) Store { return &ExpirationCache{ cacheStorage: NewThreadSafeStore(Indexers{}, Indices{}), keyFunc: keyFunc, - clock: util.RealClock{}, - expirationPolicy: &TTLPolicy{ttl, util.RealClock{}}, + clock: clock.RealClock{}, + expirationPolicy: &TTLPolicy{ttl, clock.RealClock{}}, } } diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/expiration_cache_fakes.go b/vendor/k8s.io/kubernetes/pkg/client/cache/expiration_cache_fakes.go index 3b959770..da180b77 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/expiration_cache_fakes.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/expiration_cache_fakes.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ limitations under the License. package cache import ( - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/clock" "k8s.io/kubernetes/pkg/util/sets" ) @@ -43,7 +43,7 @@ func (p *FakeExpirationPolicy) IsExpired(obj *timestampedEntry) bool { return !p.NeverExpire.Has(key) } -func NewFakeExpirationStore(keyFunc KeyFunc, deletedKeys chan<- string, expirationPolicy ExpirationPolicy, cacheClock util.Clock) Store { +func NewFakeExpirationStore(keyFunc KeyFunc, deletedKeys chan<- string, expirationPolicy ExpirationPolicy, cacheClock clock.Clock) Store { cacheStorage := NewThreadSafeStore(Indexers{}, Indices{}) return &ExpirationCache{ cacheStorage: &fakeThreadSafeMap{cacheStorage, deletedKeys}, diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/fake_custom_store.go b/vendor/k8s.io/kubernetes/pkg/client/cache/fake_custom_store.go index ccd69ef7..8d71c247 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/fake_custom_store.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/fake_custom_store.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/fifo.go b/vendor/k8s.io/kubernetes/pkg/client/cache/fifo.go index eaa35e62..00a2d77b 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/fifo.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/fifo.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,12 +26,28 @@ import ( // It is supposed to process the element popped from the queue. type PopProcessFunc func(interface{}) error +// ErrRequeue may be returned by a PopProcessFunc to safely requeue +// the current item. The value of Err will be returned from Pop. +type ErrRequeue struct { + // Err is returned by the Pop function + Err error +} + +func (e ErrRequeue) Error() string { + if e.Err == nil { + return "the popped item should be requeued without returning an error" + } + return e.Err.Error() +} + // Queue is exactly like a Store, but has a Pop() method too. type Queue interface { Store // Pop blocks until it has something to process. // It returns the object that was process and the result of processing. + // The PopProcessFunc may return an ErrRequeue{...} to indicate the item + // should be requeued before releasing the lock on the queue. Pop(PopProcessFunc) (interface{}, error) // AddIfNotPresent adds a value previously @@ -72,8 +88,12 @@ type FIFO struct { lock sync.RWMutex cond sync.Cond // We depend on the property that items in the set are in the queue and vice versa. - items map[string]interface{} - queue []string + items map[string]interface{} + queue []string + itemsInQueue sets.String + + // keepCache allows resync-ing to work by keeping a history of items + keepCache bool // populated is true if the first batch of items inserted by Replace() has been populated // or Delete/Add/Update was called first. @@ -108,10 +128,11 @@ func (f *FIFO) Add(obj interface{}) error { f.lock.Lock() defer f.lock.Unlock() f.populated = true - if _, exists := f.items[id]; !exists { + if !f.itemsInQueue.Has(id) { f.queue = append(f.queue, id) } f.items[id] = obj + f.itemsInQueue.Insert(id) f.cond.Broadcast() return nil } @@ -129,15 +150,22 @@ func (f *FIFO) AddIfNotPresent(obj interface{}) error { } f.lock.Lock() defer f.lock.Unlock() + f.addIfNotPresent(id, obj) + return nil +} + +// addIfNotPresent assumes the fifo lock is already held and adds the the provided +// item to the queue under id if it does not already exist. +func (f *FIFO) addIfNotPresent(id string, obj interface{}) { f.populated = true - if _, exists := f.items[id]; exists { - return nil + if f.itemsInQueue.Has(id) { + return } f.queue = append(f.queue, id) f.items[id] = obj + f.itemsInQueue.Insert(id) f.cond.Broadcast() - return nil } // Update is the same as Add in this implementation. @@ -156,6 +184,7 @@ func (f *FIFO) Delete(obj interface{}) error { f.lock.Lock() defer f.lock.Unlock() f.populated = true + f.itemsInQueue.Delete(id) delete(f.items, id) return err } @@ -223,8 +252,17 @@ func (f *FIFO) Pop(process PopProcessFunc) (interface{}, error) { // Item may have been deleted subsequently. continue } - delete(f.items, id) - return item, process(item) + + f.itemsInQueue.Delete(id) + if !f.keepCache { + delete(f.items, id) + } + err := process(item) + if e, ok := err.(ErrRequeue); ok { + f.addIfNotPresent(id, item) + err = e.Err + } + return item, err } } @@ -254,6 +292,7 @@ func (f *FIFO) Replace(list []interface{}, resourceVersion string) error { f.queue = f.queue[:0] for id := range items { f.queue = append(f.queue, id) + f.itemsInQueue.Insert(id) } if len(f.queue) > 0 { f.cond.Broadcast() @@ -266,12 +305,8 @@ func (f *FIFO) Resync() error { f.lock.Lock() defer f.lock.Unlock() - inQueue := sets.NewString() - for _, id := range f.queue { - inQueue.Insert(id) - } for id := range f.items { - if !inQueue.Has(id) { + if !f.itemsInQueue.Has(id) { f.queue = append(f.queue, id) } } @@ -285,10 +320,17 @@ func (f *FIFO) Resync() error { // process. func NewFIFO(keyFunc KeyFunc) *FIFO { f := &FIFO{ - items: map[string]interface{}{}, - queue: []string{}, - keyFunc: keyFunc, + items: map[string]interface{}{}, + queue: []string{}, + keyFunc: keyFunc, + itemsInQueue: sets.String{}, } f.cond.L = &f.lock return f } + +func NewResyncableFIFO(keyFunc KeyFunc) *FIFO { + fifo := NewFIFO(keyFunc) + fifo.keepCache = true + return fifo +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/index.go b/vendor/k8s.io/kubernetes/pkg/client/cache/index.go index 572f2c06..218f3c8a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/index.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/index.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -55,6 +55,9 @@ func IndexFuncToKeyFuncAdapter(indexFunc IndexFunc) KeyFunc { if len(indexKeys) > 1 { return "", fmt.Errorf("too many keys: %v", indexKeys) } + if len(indexKeys) == 0 { + return "", fmt.Errorf("unexpected empty indexKeys") + } return indexKeys[0], nil } } diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/listers.go b/vendor/k8s.io/kubernetes/pkg/client/cache/listers.go index 90c9c62f..c768c297 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/listers.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/listers.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,10 +21,13 @@ import ( "github.com/golang/glog" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/batch" + "k8s.io/kubernetes/pkg/apis/certificates" "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/labels" ) @@ -47,13 +50,9 @@ type StoreToPodLister struct { // Please note that selector is filtering among the pods that have gotten into // the store; there may have been some filtering that already happened before // that. -// -// TODO: converge on the interface in pkg/client. +// We explicitly don't return api.PodList, to avoid expensive allocations, which +// in most cases are unnecessary. func (s *StoreToPodLister) List(selector labels.Selector) (pods []*api.Pod, err error) { - // TODO: it'd be great to just call - // s.Pods(api.NamespaceAll).List(selector), however then we'd have to - // remake the list.Items as a []*api.Pod. So leave this separate for - // now. for _, m := range s.Indexer.List() { pod := m.(*api.Pod) if selector.Matches(labels.Set(pod.Labels)) { @@ -76,14 +75,14 @@ type storePodsNamespacer struct { // Please note that selector is filtering among the pods that have gotten into // the store; there may have been some filtering that already happened before // that. -func (s storePodsNamespacer) List(selector labels.Selector) (api.PodList, error) { - pods := api.PodList{} - +// We explicitly don't return api.PodList, to avoid expensive allocations, which +// in most cases are unnecessary. +func (s storePodsNamespacer) List(selector labels.Selector) (pods []*api.Pod, err error) { if s.namespace == api.NamespaceAll { for _, m := range s.indexer.List() { pod := m.(*api.Pod) if selector.Matches(labels.Set(pod.Labels)) { - pods.Items = append(pods.Items, *pod) + pods = append(pods, pod) } } return pods, nil @@ -97,7 +96,7 @@ func (s storePodsNamespacer) List(selector labels.Selector) (api.PodList, error) for _, m := range s.indexer.List() { pod := m.(*api.Pod) if s.namespace == pod.Namespace && selector.Matches(labels.Set(pod.Labels)) { - pods.Items = append(pods.Items, *pod) + pods = append(pods, pod) } } return pods, nil @@ -105,12 +104,23 @@ func (s storePodsNamespacer) List(selector labels.Selector) (api.PodList, error) for _, m := range items { pod := m.(*api.Pod) if selector.Matches(labels.Set(pod.Labels)) { - pods.Items = append(pods.Items, *pod) + pods = append(pods, pod) } } return pods, nil } +func (s storePodsNamespacer) Get(name string) (*api.Pod, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(api.Resource("pod"), name) + } + return obj.(*api.Pod), nil +} + // Exists returns true if a pod matching the namespace/name of the given pod exists in the store. func (s *StoreToPodLister) Exists(pod *api.Pod) (bool, error) { _, exists, err := s.Indexer.Get(pod) @@ -122,7 +132,7 @@ func (s *StoreToPodLister) Exists(pod *api.Pod) (bool, error) { // NodeConditionPredicate is a function that indicates whether the given node's conditions meet // some set of criteria defined by the function. -type NodeConditionPredicate func(node api.Node) bool +type NodeConditionPredicate func(node *api.Node) bool // StoreToNodeLister makes a Store have the List method of the client.NodeInterface // The Store must contain (only) Nodes. @@ -151,11 +161,11 @@ type storeToNodeConditionLister struct { } // List returns a list of nodes that match the conditions defined by the predicate functions in the storeToNodeConditionLister. -func (s storeToNodeConditionLister) List() (nodes api.NodeList, err error) { +func (s storeToNodeConditionLister) List() (nodes []*api.Node, err error) { for _, m := range s.store.List() { - node := *m.(*api.Node) + node := m.(*api.Node) if s.predicate(node) { - nodes.Items = append(nodes.Items, node) + nodes = append(nodes, node) } else { glog.V(5).Infof("Node %s matches none of the conditions", node.Name) } @@ -230,6 +240,17 @@ func (s storeReplicationControllersNamespacer) List(selector labels.Selector) ([ return controllers, nil } +func (s storeReplicationControllersNamespacer) Get(name string) (*api.ReplicationController, error) { + obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(api.Resource("replicationcontroller"), name) + } + return obj.(*api.ReplicationController), nil +} + // GetPodControllers returns a list of replication controllers managing a pod. Returns an error only if no matching controllers are found. func (s *StoreToReplicationControllerLister) GetPodControllers(pod *api.Pod) (controllers []api.ReplicationController, err error) { var selector labels.Selector @@ -248,11 +269,10 @@ func (s *StoreToReplicationControllerLister) GetPodControllers(pod *api.Pod) (co for _, m := range items { rc = *m.(*api.ReplicationController) - labelSet := labels.Set(rc.Spec.Selector) - selector = labels.Set(rc.Spec.Selector).AsSelector() + selector = labels.Set(rc.Spec.Selector).AsSelectorPreValidated() // If an rc with a nil or empty selector creeps in, it should match nothing, not everything. - if labelSet.AsSelector().Empty() || !selector.Matches(labels.Set(pod.Labels)) { + if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { continue } controllers = append(controllers, rc) @@ -265,12 +285,12 @@ func (s *StoreToReplicationControllerLister) GetPodControllers(pod *api.Pod) (co // StoreToDeploymentLister gives a store List and Exists methods. The store must contain only Deployments. type StoreToDeploymentLister struct { - Store + Indexer } // Exists checks if the given deployment exists in the store. func (s *StoreToDeploymentLister) Exists(deployment *extensions.Deployment) (bool, error) { - _, exists, err := s.Store.Get(deployment) + _, exists, err := s.Indexer.Get(deployment) if err != nil { return false, err } @@ -280,7 +300,7 @@ func (s *StoreToDeploymentLister) Exists(deployment *extensions.Deployment) (boo // StoreToDeploymentLister lists all deployments in the store. // TODO: converge on the interface in pkg/client func (s *StoreToDeploymentLister) List() (deployments []extensions.Deployment, err error) { - for _, c := range s.Store.List() { + for _, c := range s.Indexer.List() { deployments = append(deployments, *(c.(*extensions.Deployment))) } return deployments, nil @@ -288,20 +308,17 @@ func (s *StoreToDeploymentLister) List() (deployments []extensions.Deployment, e // GetDeploymentsForReplicaSet returns a list of deployments managing a replica set. Returns an error only if no matching deployments are found. func (s *StoreToDeploymentLister) GetDeploymentsForReplicaSet(rs *extensions.ReplicaSet) (deployments []extensions.Deployment, err error) { - var d extensions.Deployment - if len(rs.Labels) == 0 { err = fmt.Errorf("no deployments found for ReplicaSet %v because it has no labels", rs.Name) return } // TODO: MODIFY THIS METHOD so that it checks for the podTemplateSpecHash label - for _, m := range s.Store.List() { - d = *m.(*extensions.Deployment) - if d.Namespace != rs.Namespace { - continue - } - + dList, err := s.Deployments(rs.Namespace).List(labels.Everything()) + if err != nil { + return + } + for _, d := range dList { selector, err := unversioned.LabelSelectorAsSelector(d.Spec.Selector) if err != nil { return nil, fmt.Errorf("invalid label selector: %v", err) @@ -318,6 +335,81 @@ func (s *StoreToDeploymentLister) GetDeploymentsForReplicaSet(rs *extensions.Rep return } +type storeToDeploymentNamespacer struct { + indexer Indexer + namespace string +} + +// storeToDeploymentNamespacer lists deployments under its namespace in the store. +func (s storeToDeploymentNamespacer) List(selector labels.Selector) (deployments []extensions.Deployment, err error) { + if s.namespace == api.NamespaceAll { + for _, m := range s.indexer.List() { + d := *(m.(*extensions.Deployment)) + if selector.Matches(labels.Set(d.Labels)) { + deployments = append(deployments, d) + } + } + return + } + + key := &extensions.Deployment{ObjectMeta: api.ObjectMeta{Namespace: s.namespace}} + items, err := s.indexer.Index(NamespaceIndex, key) + if err != nil { + // Ignore error; do slow search without index. + glog.Warningf("can not retrieve list of objects using index : %v", err) + for _, m := range s.indexer.List() { + d := *(m.(*extensions.Deployment)) + if s.namespace == d.Namespace && selector.Matches(labels.Set(d.Labels)) { + deployments = append(deployments, d) + } + } + return deployments, nil + } + for _, m := range items { + d := *(m.(*extensions.Deployment)) + if selector.Matches(labels.Set(d.Labels)) { + deployments = append(deployments, d) + } + } + return +} + +func (s *StoreToDeploymentLister) Deployments(namespace string) storeToDeploymentNamespacer { + return storeToDeploymentNamespacer{s.Indexer, namespace} +} + +// GetDeploymentsForPods returns a list of deployments managing a pod. Returns an error only if no matching deployments are found. +func (s *StoreToDeploymentLister) GetDeploymentsForPod(pod *api.Pod) (deployments []extensions.Deployment, err error) { + if len(pod.Labels) == 0 { + err = fmt.Errorf("no deployments found for Pod %v because it has no labels", pod.Name) + return + } + + if len(pod.Labels[extensions.DefaultDeploymentUniqueLabelKey]) == 0 { + return + } + + dList, err := s.Deployments(pod.Namespace).List(labels.Everything()) + if err != nil { + return + } + for _, d := range dList { + selector, err := unversioned.LabelSelectorAsSelector(d.Spec.Selector) + if err != nil { + return nil, fmt.Errorf("invalid label selector: %v", err) + } + // If a deployment with a nil or empty selector creeps in, it should match nothing, not everything. + if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { + continue + } + deployments = append(deployments, d) + } + if len(deployments) == 0 { + err = fmt.Errorf("could not find deployments set for Pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) + } + return +} + // StoreToReplicaSetLister gives a store List and Exists methods. The store must contain only ReplicaSets. type StoreToReplicaSetLister struct { Store @@ -358,6 +450,17 @@ func (s storeReplicaSetsNamespacer) List(selector labels.Selector) (rss []extens return } +func (s storeReplicaSetsNamespacer) Get(name string) (*extensions.ReplicaSet, error) { + obj, exists, err := s.store.GetByKey(s.namespace + "/" + name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(extensions.Resource("replicaset"), name) + } + return obj.(*extensions.ReplicaSet), nil +} + func (s *StoreToReplicaSetLister) ReplicaSets(namespace string) storeReplicaSetsNamespacer { return storeReplicaSetsNamespacer{s.Store, namespace} } @@ -481,7 +584,7 @@ func (s *StoreToServiceLister) GetPodServices(pod *api.Pod) (services []api.Serv // services with nil selectors match nothing, not everything. continue } - selector = labels.Set(service.Spec.Selector).AsSelector() + selector = labels.Set(service.Spec.Selector).AsSelectorPreValidated() if selector.Matches(labels.Set(pod.Labels)) { services = append(services, service) } @@ -670,3 +773,83 @@ func (s *StoreToPetSetLister) GetPodPetSets(pod *api.Pod) (psList []apps.PetSet, } return } + +// StoreToCertificateRequestLister gives a store List and Exists methods. The store must contain only CertificateRequests. +type StoreToCertificateRequestLister struct { + Store +} + +// Exists checks if the given csr exists in the store. +func (s *StoreToCertificateRequestLister) Exists(csr *certificates.CertificateSigningRequest) (bool, error) { + _, exists, err := s.Store.Get(csr) + if err != nil { + return false, err + } + return exists, nil +} + +// StoreToCertificateRequestLister lists all csrs in the store. +func (s *StoreToCertificateRequestLister) List() (csrs certificates.CertificateSigningRequestList, err error) { + for _, c := range s.Store.List() { + csrs.Items = append(csrs.Items, *(c.(*certificates.CertificateSigningRequest))) + } + return csrs, nil +} + +// IndexerToNamespaceLister gives an Indexer List method +type IndexerToNamespaceLister struct { + Indexer +} + +// List returns a list of namespaces +func (i *IndexerToNamespaceLister) List(selector labels.Selector) (namespaces []*api.Namespace, err error) { + for _, m := range i.Indexer.List() { + namespace := m.(*api.Namespace) + if selector.Matches(labels.Set(namespace.Labels)) { + namespaces = append(namespaces, namespace) + } + } + + return namespaces, nil +} + +type StoreToPodDisruptionBudgetLister struct { + Store +} + +// GetPodPodDisruptionBudgets returns a list of PodDisruptionBudgets matching a pod. Returns an error only if no matching PodDisruptionBudgets are found. +func (s *StoreToPodDisruptionBudgetLister) GetPodPodDisruptionBudgets(pod *api.Pod) (pdbList []policy.PodDisruptionBudget, err error) { + var selector labels.Selector + + if len(pod.Labels) == 0 { + err = fmt.Errorf("no PodDisruptionBudgets found for pod %v because it has no labels", pod.Name) + return + } + + for _, m := range s.Store.List() { + pdb, ok := m.(*policy.PodDisruptionBudget) + if !ok { + glog.Errorf("Unexpected: %v is not a PodDisruptionBudget", m) + continue + } + if pdb.Namespace != pod.Namespace { + continue + } + selector, err = unversioned.LabelSelectorAsSelector(pdb.Spec.Selector) + if err != nil { + glog.Warningf("invalid selector: %v", err) + // TODO(mml): add an event to the PDB + continue + } + + // If a PDB with a nil or empty selector creeps in, it should match nothing, not everything. + if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { + continue + } + pdbList = append(pdbList, *pdb) + } + if len(pdbList) == 0 { + err = fmt.Errorf("could not find PodDisruptionBudget for pod %s in namespace %s with labels: %v", pod.Name, pod.Namespace, pod.Labels) + } + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/listwatch.go b/vendor/k8s.io/kubernetes/pkg/client/cache/listwatch.go index 06c2f611..ff56c0b7 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/listwatch.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/listwatch.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/reflector.go b/vendor/k8s.io/kubernetes/pkg/client/cache/reflector.go index 3a5025a2..0f6e3681 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/reflector.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/reflector.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -69,8 +69,6 @@ type Reflector struct { resyncPeriod time.Duration // now() returns current time - exposed for testing purposes now func() time.Time - // nextResync is approximate time of next resync (0 if not scheduled) - nextResync time.Time // lastSyncResourceVersion is the resource version token last // observed when doing a sync with the underlying store // it is thread safe, but not synchronized with the underlying store @@ -164,7 +162,7 @@ func hasPackage(file string, ignoredPackages []string) bool { return false } -// trimPackagePrefix reduces dulpicate values off the front of a package name. +// trimPackagePrefix reduces duplicate values off the front of a package name. func trimPackagePrefix(file string) string { if l := strings.LastIndex(file, "k8s.io/kubernetes/pkg/"); l >= 0 { return file[l+len("k8s.io/kubernetes/"):] @@ -234,14 +232,12 @@ var ( // required, and a cleanup function. func (r *Reflector) resyncChan() (<-chan time.Time, func() bool) { if r.resyncPeriod == 0 { - r.nextResync = time.Time{} return neverExitWatch, func() bool { return false } } // The cleanup function is required: imagine the scenario where watches // always fail so we end up listing frequently. Then, if we don't // manually stop the timer, we could end up with many timers active // concurrently. - r.nextResync = r.now().Add(r.resyncPeriod) t := time.NewTimer(r.resyncPeriod) return t.C, t.Stop } @@ -285,7 +281,7 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { case <-stopCh: return } - glog.V(4).Infof("%s: next resync planned for %#v, forcing now", r.name, r.nextResync) + glog.V(4).Infof("%s: forcing resync", r.name) if err := r.store.Resync(); err != nil { resyncerrc <- err return diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/store.go b/vendor/k8s.io/kubernetes/pkg/client/cache/store.go old mode 100644 new mode 100755 index 71115f2c..4cd2479b --- a/vendor/k8s.io/kubernetes/pkg/client/cache/store.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/store.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -99,7 +99,7 @@ func SplitMetaNamespaceKey(key string) (namespace, name string, err error) { // name only, no namespace return "", parts[0], nil case 2: - // name and namespace + // namespace and name return parts[0], parts[1], nil } diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/thread_safe_store.go b/vendor/k8s.io/kubernetes/pkg/client/cache/thread_safe_store.go index 11077e25..74fe0380 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/thread_safe_store.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/thread_safe_store.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -151,7 +151,7 @@ func (c *threadSafeMap) Index(indexName string, obj interface{}) ([]interface{}, returnKeySet := sets.String{} for _, indexKey := range indexKeys { set := index[indexKey] - for _, key := range set.List() { + for _, key := range set.UnsortedList() { returnKeySet.Insert(key) } } @@ -261,12 +261,13 @@ func (c *threadSafeMap) deleteFromIndices(obj interface{}, key string) error { } index := c.indices[name] + if index == nil { + continue + } for _, indexValue := range indexValues { - if index != nil { - set := index[indexValue] - if set != nil { - set.Delete(key) - } + set := index[indexValue] + if set != nil { + set.Delete(key) } } } diff --git a/vendor/k8s.io/kubernetes/pkg/client/cache/undelta_store.go b/vendor/k8s.io/kubernetes/pkg/client/cache/undelta_store.go index 4a8a4500..117df46c 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/cache/undelta_store.go +++ b/vendor/k8s.io/kubernetes/pkg/client/cache/undelta_store.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/clientset.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/clientset.go index 8b958a58..b2d96d3a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/clientset.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/clientset.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,11 +18,15 @@ package internalclientset import ( "github.com/golang/glog" + unversionedauthentication "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned" + unversionedauthorization "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned" unversionedautoscaling "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned" unversionedbatch "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned" + unversionedcertificates "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned" unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned" unversionedextensions "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned" unversionedrbac "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned" + unversionedstorage "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned" restclient "k8s.io/kubernetes/pkg/client/restclient" discovery "k8s.io/kubernetes/pkg/client/typed/discovery" "k8s.io/kubernetes/pkg/util/flowcontrol" @@ -31,10 +35,14 @@ import ( type Interface interface { Discovery() discovery.DiscoveryInterface Core() unversionedcore.CoreInterface - Extensions() unversionedextensions.ExtensionsInterface + Authentication() unversionedauthentication.AuthenticationInterface + Authorization() unversionedauthorization.AuthorizationInterface Autoscaling() unversionedautoscaling.AutoscalingInterface Batch() unversionedbatch.BatchInterface + Certificates() unversionedcertificates.CertificatesInterface + Extensions() unversionedextensions.ExtensionsInterface Rbac() unversionedrbac.RbacInterface + Storage() unversionedstorage.StorageInterface } // Clientset contains the clients for groups. Each group has exactly one @@ -42,10 +50,14 @@ type Interface interface { type Clientset struct { *discovery.DiscoveryClient *unversionedcore.CoreClient - *unversionedextensions.ExtensionsClient + *unversionedauthentication.AuthenticationClient + *unversionedauthorization.AuthorizationClient *unversionedautoscaling.AutoscalingClient *unversionedbatch.BatchClient + *unversionedcertificates.CertificatesClient + *unversionedextensions.ExtensionsClient *unversionedrbac.RbacClient + *unversionedstorage.StorageClient } // Core retrieves the CoreClient @@ -56,12 +68,20 @@ func (c *Clientset) Core() unversionedcore.CoreInterface { return c.CoreClient } -// Extensions retrieves the ExtensionsClient -func (c *Clientset) Extensions() unversionedextensions.ExtensionsInterface { +// Authentication retrieves the AuthenticationClient +func (c *Clientset) Authentication() unversionedauthentication.AuthenticationInterface { if c == nil { return nil } - return c.ExtensionsClient + return c.AuthenticationClient +} + +// Authorization retrieves the AuthorizationClient +func (c *Clientset) Authorization() unversionedauthorization.AuthorizationInterface { + if c == nil { + return nil + } + return c.AuthorizationClient } // Autoscaling retrieves the AutoscalingClient @@ -80,6 +100,22 @@ func (c *Clientset) Batch() unversionedbatch.BatchInterface { return c.BatchClient } +// Certificates retrieves the CertificatesClient +func (c *Clientset) Certificates() unversionedcertificates.CertificatesInterface { + if c == nil { + return nil + } + return c.CertificatesClient +} + +// Extensions retrieves the ExtensionsClient +func (c *Clientset) Extensions() unversionedextensions.ExtensionsInterface { + if c == nil { + return nil + } + return c.ExtensionsClient +} + // Rbac retrieves the RbacClient func (c *Clientset) Rbac() unversionedrbac.RbacInterface { if c == nil { @@ -88,6 +124,14 @@ func (c *Clientset) Rbac() unversionedrbac.RbacInterface { return c.RbacClient } +// Storage retrieves the StorageClient +func (c *Clientset) Storage() unversionedstorage.StorageInterface { + if c == nil { + return nil + } + return c.StorageClient +} + // Discovery retrieves the DiscoveryClient func (c *Clientset) Discovery() discovery.DiscoveryInterface { return c.DiscoveryClient @@ -105,7 +149,11 @@ func NewForConfig(c *restclient.Config) (*Clientset, error) { if err != nil { return nil, err } - clientset.ExtensionsClient, err = unversionedextensions.NewForConfig(&configShallowCopy) + clientset.AuthenticationClient, err = unversionedauthentication.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + clientset.AuthorizationClient, err = unversionedauthorization.NewForConfig(&configShallowCopy) if err != nil { return nil, err } @@ -117,10 +165,22 @@ func NewForConfig(c *restclient.Config) (*Clientset, error) { if err != nil { return nil, err } + clientset.CertificatesClient, err = unversionedcertificates.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } + clientset.ExtensionsClient, err = unversionedextensions.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } clientset.RbacClient, err = unversionedrbac.NewForConfig(&configShallowCopy) if err != nil { return nil, err } + clientset.StorageClient, err = unversionedstorage.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } clientset.DiscoveryClient, err = discovery.NewDiscoveryClientForConfig(&configShallowCopy) if err != nil { @@ -135,10 +195,14 @@ func NewForConfig(c *restclient.Config) (*Clientset, error) { func NewForConfigOrDie(c *restclient.Config) *Clientset { var clientset Clientset clientset.CoreClient = unversionedcore.NewForConfigOrDie(c) - clientset.ExtensionsClient = unversionedextensions.NewForConfigOrDie(c) + clientset.AuthenticationClient = unversionedauthentication.NewForConfigOrDie(c) + clientset.AuthorizationClient = unversionedauthorization.NewForConfigOrDie(c) clientset.AutoscalingClient = unversionedautoscaling.NewForConfigOrDie(c) clientset.BatchClient = unversionedbatch.NewForConfigOrDie(c) + clientset.CertificatesClient = unversionedcertificates.NewForConfigOrDie(c) + clientset.ExtensionsClient = unversionedextensions.NewForConfigOrDie(c) clientset.RbacClient = unversionedrbac.NewForConfigOrDie(c) + clientset.StorageClient = unversionedstorage.NewForConfigOrDie(c) clientset.DiscoveryClient = discovery.NewDiscoveryClientForConfigOrDie(c) return &clientset @@ -148,10 +212,14 @@ func NewForConfigOrDie(c *restclient.Config) *Clientset { func New(c *restclient.RESTClient) *Clientset { var clientset Clientset clientset.CoreClient = unversionedcore.New(c) - clientset.ExtensionsClient = unversionedextensions.New(c) + clientset.AuthenticationClient = unversionedauthentication.New(c) + clientset.AuthorizationClient = unversionedauthorization.New(c) clientset.AutoscalingClient = unversionedautoscaling.New(c) clientset.BatchClient = unversionedbatch.New(c) + clientset.CertificatesClient = unversionedcertificates.New(c) + clientset.ExtensionsClient = unversionedextensions.New(c) clientset.RbacClient = unversionedrbac.New(c) + clientset.StorageClient = unversionedstorage.New(c) clientset.DiscoveryClient = discovery.NewDiscoveryClient(c) return &clientset diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/doc.go index 3934caa4..cf081af2 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/import_known_versions.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/import_known_versions.go index 8bdbe2e6..bb9fee83 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/import_known_versions.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/import_known_versions.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,13 +23,16 @@ import ( _ "k8s.io/kubernetes/pkg/api/install" "k8s.io/kubernetes/pkg/apimachinery/registered" _ "k8s.io/kubernetes/pkg/apis/apps/install" + _ "k8s.io/kubernetes/pkg/apis/authentication/install" _ "k8s.io/kubernetes/pkg/apis/authorization/install" _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" _ "k8s.io/kubernetes/pkg/apis/batch/install" + _ "k8s.io/kubernetes/pkg/apis/certificates/install" _ "k8s.io/kubernetes/pkg/apis/componentconfig/install" _ "k8s.io/kubernetes/pkg/apis/extensions/install" _ "k8s.io/kubernetes/pkg/apis/policy/install" _ "k8s.io/kubernetes/pkg/apis/rbac/install" + _ "k8s.io/kubernetes/pkg/apis/storage/install" ) func init() { diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/authentication_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/authentication_client.go new file mode 100644 index 00000000..3606fdb9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/authentication_client.go @@ -0,0 +1,101 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + registered "k8s.io/kubernetes/pkg/apimachinery/registered" + restclient "k8s.io/kubernetes/pkg/client/restclient" +) + +type AuthenticationInterface interface { + GetRESTClient() *restclient.RESTClient + TokenReviewsGetter +} + +// AuthenticationClient is used to interact with features provided by the Authentication group. +type AuthenticationClient struct { + *restclient.RESTClient +} + +func (c *AuthenticationClient) TokenReviews() TokenReviewInterface { + return newTokenReviews(c) +} + +// NewForConfig creates a new AuthenticationClient for the given config. +func NewForConfig(c *restclient.Config) (*AuthenticationClient, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AuthenticationClient{client}, nil +} + +// NewForConfigOrDie creates a new AuthenticationClient for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *restclient.Config) *AuthenticationClient { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AuthenticationClient for the given RESTClient. +func New(c *restclient.RESTClient) *AuthenticationClient { + return &AuthenticationClient{c} +} + +func setConfigDefaults(config *restclient.Config) error { + // if authentication group is not registered, return an error + g, err := registered.Group("authentication.k8s.io") + if err != nil { + return err + } + config.APIPath = "/apis" + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + // TODO: Unconditionally set the config.Version, until we fix the config. + //if config.Version == "" { + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + //} + + config.NegotiatedSerializer = api.Codecs + + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + return nil +} + +// GetRESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AuthenticationClient) GetRESTClient() *restclient.RESTClient { + if c == nil { + return nil + } + return c.RESTClient +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/doc.go new file mode 100644 index 00000000..1e6a8ff8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package is generated by client-gen with the default arguments. + +// This package has the automatically generated typed clients. +package unversioned diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/generated_expansion.go new file mode 100644 index 00000000..6cdbfc5b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/generated_expansion.go @@ -0,0 +1,17 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/tokenreview.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/tokenreview.go new file mode 100644 index 00000000..d7ab94b6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/tokenreview.go @@ -0,0 +1,40 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +// TokenReviewsGetter has a method to return a TokenReviewInterface. +// A group's client should implement this interface. +type TokenReviewsGetter interface { + TokenReviews() TokenReviewInterface +} + +// TokenReviewInterface has methods to work with TokenReview resources. +type TokenReviewInterface interface { + TokenReviewExpansion +} + +// tokenReviews implements TokenReviewInterface +type tokenReviews struct { + client *AuthenticationClient +} + +// newTokenReviews returns a TokenReviews +func newTokenReviews(c *AuthenticationClient) *tokenReviews { + return &tokenReviews{ + client: c, + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/tokenreview_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/tokenreview_expansion.go new file mode 100644 index 00000000..1137e520 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned/tokenreview_expansion.go @@ -0,0 +1,35 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + authenticationapi "k8s.io/kubernetes/pkg/apis/authentication" +) + +type TokenReviewExpansion interface { + Create(tokenReview *authenticationapi.TokenReview) (result *authenticationapi.TokenReview, err error) +} + +func (c *tokenReviews) Create(tokenReview *authenticationapi.TokenReview) (result *authenticationapi.TokenReview, err error) { + result = &authenticationapi.TokenReview{} + err = c.client.Post(). + Resource("tokenreviews"). + Body(tokenReview). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/authorization_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/authorization_client.go new file mode 100644 index 00000000..5b63753e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/authorization_client.go @@ -0,0 +1,101 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + registered "k8s.io/kubernetes/pkg/apimachinery/registered" + restclient "k8s.io/kubernetes/pkg/client/restclient" +) + +type AuthorizationInterface interface { + GetRESTClient() *restclient.RESTClient + SubjectAccessReviewsGetter +} + +// AuthorizationClient is used to interact with features provided by the Authorization group. +type AuthorizationClient struct { + *restclient.RESTClient +} + +func (c *AuthorizationClient) SubjectAccessReviews() SubjectAccessReviewInterface { + return newSubjectAccessReviews(c) +} + +// NewForConfig creates a new AuthorizationClient for the given config. +func NewForConfig(c *restclient.Config) (*AuthorizationClient, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AuthorizationClient{client}, nil +} + +// NewForConfigOrDie creates a new AuthorizationClient for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *restclient.Config) *AuthorizationClient { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AuthorizationClient for the given RESTClient. +func New(c *restclient.RESTClient) *AuthorizationClient { + return &AuthorizationClient{c} +} + +func setConfigDefaults(config *restclient.Config) error { + // if authorization group is not registered, return an error + g, err := registered.Group("authorization.k8s.io") + if err != nil { + return err + } + config.APIPath = "/apis" + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + // TODO: Unconditionally set the config.Version, until we fix the config. + //if config.Version == "" { + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + //} + + config.NegotiatedSerializer = api.Codecs + + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + return nil +} + +// GetRESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AuthorizationClient) GetRESTClient() *restclient.RESTClient { + if c == nil { + return nil + } + return c.RESTClient +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/doc.go new file mode 100644 index 00000000..1e6a8ff8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package is generated by client-gen with the default arguments. + +// This package has the automatically generated typed clients. +package unversioned diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/generated_expansion.go new file mode 100644 index 00000000..6cdbfc5b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/generated_expansion.go @@ -0,0 +1,17 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/subjectaccessreview.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/subjectaccessreview.go new file mode 100644 index 00000000..cab6471b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/subjectaccessreview.go @@ -0,0 +1,40 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +// SubjectAccessReviewsGetter has a method to return a SubjectAccessReviewInterface. +// A group's client should implement this interface. +type SubjectAccessReviewsGetter interface { + SubjectAccessReviews() SubjectAccessReviewInterface +} + +// SubjectAccessReviewInterface has methods to work with SubjectAccessReview resources. +type SubjectAccessReviewInterface interface { + SubjectAccessReviewExpansion +} + +// subjectAccessReviews implements SubjectAccessReviewInterface +type subjectAccessReviews struct { + client *AuthorizationClient +} + +// newSubjectAccessReviews returns a SubjectAccessReviews +func newSubjectAccessReviews(c *AuthorizationClient) *subjectAccessReviews { + return &subjectAccessReviews{ + client: c, + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/subjectaccessreview_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/subjectaccessreview_expansion.go new file mode 100644 index 00000000..16a170ec --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned/subjectaccessreview_expansion.go @@ -0,0 +1,36 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + authorizationapi "k8s.io/kubernetes/pkg/apis/authorization" +) + +// The PodExpansion interface allows manually adding extra methods to the PodInterface. +type SubjectAccessReviewExpansion interface { + Create(sar *authorizationapi.SubjectAccessReview) (result *authorizationapi.SubjectAccessReview, err error) +} + +func (c *subjectAccessReviews) Create(sar *authorizationapi.SubjectAccessReview) (result *authorizationapi.SubjectAccessReview, err error) { + result = &authorizationapi.SubjectAccessReview{} + err = c.client.Post(). + Resource("subjectaccessreviews"). + Body(sar). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/autoscaling_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/autoscaling_client.go index 752b5d55..71d01ff6 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/autoscaling_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/autoscaling_client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/doc.go index 47517b64..1e6a8ff8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/generated_expansion.go index 39324902..628b494c 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/horizontalpodautoscaler.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/horizontalpodautoscaler.go index ae185ad7..515be142 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/horizontalpodautoscaler.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned/horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ type HorizontalPodAutoscalerInterface interface { Get(name string) (*autoscaling.HorizontalPodAutoscaler, error) List(opts api.ListOptions) (*autoscaling.HorizontalPodAutoscalerList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *autoscaling.HorizontalPodAutoscaler, err error) HorizontalPodAutoscalerExpansion } @@ -148,3 +149,17 @@ func (c *horizontalPodAutoscalers) Watch(opts api.ListOptions) (watch.Interface, VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched horizontalPodAutoscaler. +func (c *horizontalPodAutoscalers) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *autoscaling.HorizontalPodAutoscaler, err error) { + result = &autoscaling.HorizontalPodAutoscaler{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("horizontalpodautoscalers"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/batch_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/batch_client.go index 83d9d749..8f2b0e80 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/batch_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/batch_client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/doc.go index 47517b64..1e6a8ff8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/generated_expansion.go index f876ef63..a12d6f30 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/job.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/job.go index 680c5065..8d209fb8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/job.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/job.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ type JobInterface interface { Get(name string) (*batch.Job, error) List(opts api.ListOptions) (*batch.JobList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *batch.Job, err error) JobExpansion } @@ -148,3 +149,17 @@ func (c *jobs) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched job. +func (c *jobs) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *batch.Job, err error) { + result = &batch.Job{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("jobs"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/scheduledjob.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/scheduledjob.go index 2675d11c..3c3f32ef 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/scheduledjob.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned/scheduledjob.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ type ScheduledJobInterface interface { Get(name string) (*batch.ScheduledJob, error) List(opts api.ListOptions) (*batch.ScheduledJobList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *batch.ScheduledJob, err error) ScheduledJobExpansion } @@ -148,3 +149,17 @@ func (c *scheduledJobs) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched scheduledJob. +func (c *scheduledJobs) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *batch.ScheduledJob, err error) { + result = &batch.ScheduledJob{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("scheduledjobs"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificates_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificates_client.go new file mode 100644 index 00000000..c11bff9a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificates_client.go @@ -0,0 +1,101 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + registered "k8s.io/kubernetes/pkg/apimachinery/registered" + restclient "k8s.io/kubernetes/pkg/client/restclient" +) + +type CertificatesInterface interface { + GetRESTClient() *restclient.RESTClient + CertificateSigningRequestsGetter +} + +// CertificatesClient is used to interact with features provided by the Certificates group. +type CertificatesClient struct { + *restclient.RESTClient +} + +func (c *CertificatesClient) CertificateSigningRequests() CertificateSigningRequestInterface { + return newCertificateSigningRequests(c) +} + +// NewForConfig creates a new CertificatesClient for the given config. +func NewForConfig(c *restclient.Config) (*CertificatesClient, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &CertificatesClient{client}, nil +} + +// NewForConfigOrDie creates a new CertificatesClient for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *restclient.Config) *CertificatesClient { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new CertificatesClient for the given RESTClient. +func New(c *restclient.RESTClient) *CertificatesClient { + return &CertificatesClient{c} +} + +func setConfigDefaults(config *restclient.Config) error { + // if certificates group is not registered, return an error + g, err := registered.Group("certificates.k8s.io") + if err != nil { + return err + } + config.APIPath = "/apis" + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + // TODO: Unconditionally set the config.Version, until we fix the config. + //if config.Version == "" { + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + //} + + config.NegotiatedSerializer = api.Codecs + + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + return nil +} + +// GetRESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *CertificatesClient) GetRESTClient() *restclient.RESTClient { + if c == nil { + return nil + } + return c.RESTClient +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificatesigningrequest.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificatesigningrequest.go new file mode 100644 index 00000000..e199acf2 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificatesigningrequest.go @@ -0,0 +1,154 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + certificates "k8s.io/kubernetes/pkg/apis/certificates" + watch "k8s.io/kubernetes/pkg/watch" +) + +// CertificateSigningRequestsGetter has a method to return a CertificateSigningRequestInterface. +// A group's client should implement this interface. +type CertificateSigningRequestsGetter interface { + CertificateSigningRequests() CertificateSigningRequestInterface +} + +// CertificateSigningRequestInterface has methods to work with CertificateSigningRequest resources. +type CertificateSigningRequestInterface interface { + Create(*certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, error) + Update(*certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, error) + UpdateStatus(*certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, error) + Delete(name string, options *api.DeleteOptions) error + DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error + Get(name string) (*certificates.CertificateSigningRequest, error) + List(opts api.ListOptions) (*certificates.CertificateSigningRequestList, error) + Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *certificates.CertificateSigningRequest, err error) + CertificateSigningRequestExpansion +} + +// certificateSigningRequests implements CertificateSigningRequestInterface +type certificateSigningRequests struct { + client *CertificatesClient +} + +// newCertificateSigningRequests returns a CertificateSigningRequests +func newCertificateSigningRequests(c *CertificatesClient) *certificateSigningRequests { + return &certificateSigningRequests{ + client: c, + } +} + +// Create takes the representation of a certificateSigningRequest and creates it. Returns the server's representation of the certificateSigningRequest, and an error, if there is any. +func (c *certificateSigningRequests) Create(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Post(). + Resource("certificatesigningrequests"). + Body(certificateSigningRequest). + Do(). + Into(result) + return +} + +// Update takes the representation of a certificateSigningRequest and updates it. Returns the server's representation of the certificateSigningRequest, and an error, if there is any. +func (c *certificateSigningRequests) Update(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Put(). + Resource("certificatesigningrequests"). + Name(certificateSigningRequest.Name). + Body(certificateSigningRequest). + Do(). + Into(result) + return +} + +func (c *certificateSigningRequests) UpdateStatus(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Put(). + Resource("certificatesigningrequests"). + Name(certificateSigningRequest.Name). + SubResource("status"). + Body(certificateSigningRequest). + Do(). + Into(result) + return +} + +// Delete takes name of the certificateSigningRequest and deletes it. Returns an error if one occurs. +func (c *certificateSigningRequests) Delete(name string, options *api.DeleteOptions) error { + return c.client.Delete(). + Resource("certificatesigningrequests"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *certificateSigningRequests) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { + return c.client.Delete(). + Resource("certificatesigningrequests"). + VersionedParams(&listOptions, api.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Get takes name of the certificateSigningRequest, and returns the corresponding certificateSigningRequest object, and an error if there is any. +func (c *certificateSigningRequests) Get(name string) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Get(). + Resource("certificatesigningrequests"). + Name(name). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of CertificateSigningRequests that match those selectors. +func (c *certificateSigningRequests) List(opts api.ListOptions) (result *certificates.CertificateSigningRequestList, err error) { + result = &certificates.CertificateSigningRequestList{} + err = c.client.Get(). + Resource("certificatesigningrequests"). + VersionedParams(&opts, api.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested certificateSigningRequests. +func (c *certificateSigningRequests) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Resource("certificatesigningrequests"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} + +// Patch applies the patch and returns the patched certificateSigningRequest. +func (c *certificateSigningRequests) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Patch(pt). + Resource("certificatesigningrequests"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificatesigningrequest_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificatesigningrequest_expansion.go new file mode 100644 index 00000000..b4f015b8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/certificatesigningrequest_expansion.go @@ -0,0 +1,35 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import "k8s.io/kubernetes/pkg/apis/certificates" + +type CertificateSigningRequestExpansion interface { + UpdateApproval(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) +} + +func (c *certificateSigningRequests) UpdateApproval(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Put(). + Resource("certificatesigningrequests"). + Name(certificateSigningRequest.Name). + Body(certificateSigningRequest). + SubResource("approval"). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/doc.go new file mode 100644 index 00000000..1e6a8ff8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package is generated by client-gen with the default arguments. + +// This package has the automatically generated typed clients. +package unversioned diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/generated_expansion.go new file mode 100644 index 00000000..6cdbfc5b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/certificates/unversioned/generated_expansion.go @@ -0,0 +1,17 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/componentstatus.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/componentstatus.go index 0ef0667d..ffdaeb49 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/componentstatus.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/componentstatus.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type ComponentStatusInterface interface { Get(name string) (*api.ComponentStatus, error) List(opts api.ListOptions) (*api.ComponentStatusList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ComponentStatus, err error) ComponentStatusExpansion } @@ -124,3 +125,16 @@ func (c *componentStatuses) Watch(opts api.ListOptions) (watch.Interface, error) VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched componentStatus. +func (c *componentStatuses) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ComponentStatus, err error) { + result = &api.ComponentStatus{} + err = c.client.Patch(pt). + Resource("componentstatuses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/configmap.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/configmap.go index b43e53d6..c937328d 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/configmap.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/configmap.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type ConfigMapInterface interface { Get(name string) (*api.ConfigMap, error) List(opts api.ListOptions) (*api.ConfigMapList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ConfigMap, err error) ConfigMapExpansion } @@ -133,3 +134,17 @@ func (c *configMaps) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched configMap. +func (c *configMaps) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ConfigMap, err error) { + result = &api.ConfigMap{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("configmaps"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/core_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/core_client.go index 53368d24..b2faa99e 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/core_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/core_client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/doc.go index 47517b64..1e6a8ff8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/endpoints.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/endpoints.go index 78e2a087..d5f383d1 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/endpoints.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/endpoints.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type EndpointsInterface interface { Get(name string) (*api.Endpoints, error) List(opts api.ListOptions) (*api.EndpointsList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Endpoints, err error) EndpointsExpansion } @@ -133,3 +134,17 @@ func (c *endpoints) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched endpoints. +func (c *endpoints) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Endpoints, err error) { + result = &api.Endpoints{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("endpoints"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/event.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/event.go index 5627690a..d4edcd37 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/event.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/event.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type EventInterface interface { Get(name string) (*api.Event, error) List(opts api.ListOptions) (*api.EventList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Event, err error) EventExpansion } @@ -133,3 +134,17 @@ func (c *events) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched event. +func (c *events) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Event, err error) { + result = &api.Event{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("events"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/event_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/event_expansion.go index abdf89aa..f3d6f468 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/event_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/event_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ type EventExpansion interface { CreateWithEventNamespace(event *api.Event) (*api.Event, error) // UpdateWithEventNamespace is the same as a Update, except that it sends the request to the event.Namespace. UpdateWithEventNamespace(event *api.Event) (*api.Event, error) - Patch(event *api.Event, data []byte) (*api.Event, error) + PatchWithEventNamespace(event *api.Event, data []byte) (*api.Event, error) // Search finds events about the specified object Search(objOrRef runtime.Object) (*api.EventList, error) // Returns the appropriate field selector based on the API version being used to communicate with the server. @@ -73,11 +73,15 @@ func (e *events) UpdateWithEventNamespace(event *api.Event) (*api.Event, error) return result, err } -// Patch modifies an existing event. It returns the copy of the event that the server returns, or an -// error. The namespace and name of the target event is deduced from the incompleteEvent. The -// namespace must either match this event client's namespace, or this event client must have been +// PatchWithEventNamespace modifies an existing event. It returns the copy of +// the event that the server returns, or an error. The namespace and name of the +// target event is deduced from the incompleteEvent. The namespace must either +// match this event client's namespace, or this event client must have been // created with the "" namespace. -func (e *events) Patch(incompleteEvent *api.Event, data []byte) (*api.Event, error) { +func (e *events) PatchWithEventNamespace(incompleteEvent *api.Event, data []byte) (*api.Event, error) { + if e.ns != "" && incompleteEvent.Namespace != e.ns { + return nil, fmt.Errorf("can't patch an event with namespace '%v' in namespace '%v'", incompleteEvent.Namespace, e.ns) + } result := &api.Event{} err := e.client.Patch(api.StrategicMergePatchType). NamespaceIfScoped(incompleteEvent.Namespace, len(incompleteEvent.Namespace) > 0). @@ -153,5 +157,5 @@ func (e *EventSinkImpl) Update(event *api.Event) (*api.Event, error) { } func (e *EventSinkImpl) Patch(event *api.Event, data []byte) (*api.Event, error) { - return e.Interface.Patch(event, data) + return e.Interface.PatchWithEventNamespace(event, data) } diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/generated_expansion.go index 546f8e7a..25241159 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,6 +18,8 @@ package unversioned type ComponentStatusExpansion interface{} +type ConfigMapExpansion interface{} + type EndpointsExpansion interface{} type LimitRangeExpansion interface{} @@ -35,5 +37,3 @@ type ResourceQuotaExpansion interface{} type SecretExpansion interface{} type ServiceAccountExpansion interface{} - -type ConfigMapExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/limitrange.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/limitrange.go index 86cc9b07..70cd4fb3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/limitrange.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/limitrange.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type LimitRangeInterface interface { Get(name string) (*api.LimitRange, error) List(opts api.ListOptions) (*api.LimitRangeList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.LimitRange, err error) LimitRangeExpansion } @@ -133,3 +134,17 @@ func (c *limitRanges) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched limitRange. +func (c *limitRanges) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.LimitRange, err error) { + result = &api.LimitRange{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("limitranges"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/namespace.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/namespace.go index c1c8b450..7b39f2b8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/namespace.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/namespace.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type NamespaceInterface interface { Get(name string) (*api.Namespace, error) List(opts api.ListOptions) (*api.NamespaceList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Namespace, err error) NamespaceExpansion } @@ -137,3 +138,16 @@ func (c *namespaces) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched namespace. +func (c *namespaces) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Namespace, err error) { + result = &api.Namespace{} + err = c.client.Patch(pt). + Resource("namespaces"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/namespace_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/namespace_expansion.go index 8f47aec4..15049da1 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/namespace_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/namespace_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/node.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/node.go index b0c53ef1..8f4ffcd4 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/node.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/node.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type NodeInterface interface { Get(name string) (*api.Node, error) List(opts api.ListOptions) (*api.NodeList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Node, err error) NodeExpansion } @@ -137,3 +138,16 @@ func (c *nodes) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched node. +func (c *nodes) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Node, err error) { + result = &api.Node{} + err = c.client.Patch(pt). + Resource("nodes"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/node_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/node_expansion.go index 3146cdb3..767f157b 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/node_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/node_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/persistentvolume.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/persistentvolume.go index 6b4d0f01..ecca7a37 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/persistentvolume.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/persistentvolume.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type PersistentVolumeInterface interface { Get(name string) (*api.PersistentVolume, error) List(opts api.ListOptions) (*api.PersistentVolumeList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.PersistentVolume, err error) PersistentVolumeExpansion } @@ -137,3 +138,16 @@ func (c *persistentVolumes) Watch(opts api.ListOptions) (watch.Interface, error) VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched persistentVolume. +func (c *persistentVolumes) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.PersistentVolume, err error) { + result = &api.PersistentVolume{} + err = c.client.Patch(pt). + Resource("persistentvolumes"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/persistentvolumeclaim.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/persistentvolumeclaim.go index 2f5b1743..45d22eb4 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/persistentvolumeclaim.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/persistentvolumeclaim.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type PersistentVolumeClaimInterface interface { Get(name string) (*api.PersistentVolumeClaim, error) List(opts api.ListOptions) (*api.PersistentVolumeClaimList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.PersistentVolumeClaim, err error) PersistentVolumeClaimExpansion } @@ -147,3 +148,17 @@ func (c *persistentVolumeClaims) Watch(opts api.ListOptions) (watch.Interface, e VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched persistentVolumeClaim. +func (c *persistentVolumeClaims) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.PersistentVolumeClaim, err error) { + result = &api.PersistentVolumeClaim{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("persistentvolumeclaims"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/pod.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/pod.go index 1cdfc8e7..595462a0 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/pod.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/pod.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type PodInterface interface { Get(name string) (*api.Pod, error) List(opts api.ListOptions) (*api.PodList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Pod, err error) PodExpansion } @@ -147,3 +148,17 @@ func (c *pods) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched pod. +func (c *pods) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Pod, err error) { + result = &api.Pod{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("pods"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/pod_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/pod_expansion.go index 8ebd29d3..a72b8432 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/pod_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/pod_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/podtemplate.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/podtemplate.go index cccef29f..4494bd34 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/podtemplate.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/podtemplate.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type PodTemplateInterface interface { Get(name string) (*api.PodTemplate, error) List(opts api.ListOptions) (*api.PodTemplateList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.PodTemplate, err error) PodTemplateExpansion } @@ -133,3 +134,17 @@ func (c *podTemplates) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched podTemplate. +func (c *podTemplates) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.PodTemplate, err error) { + result = &api.PodTemplate{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("podtemplates"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/replicationcontroller.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/replicationcontroller.go index 6f9f0662..a1b17576 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/replicationcontroller.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/replicationcontroller.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type ReplicationControllerInterface interface { Get(name string) (*api.ReplicationController, error) List(opts api.ListOptions) (*api.ReplicationControllerList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ReplicationController, err error) ReplicationControllerExpansion } @@ -147,3 +148,17 @@ func (c *replicationControllers) Watch(opts api.ListOptions) (watch.Interface, e VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched replicationController. +func (c *replicationControllers) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ReplicationController, err error) { + result = &api.ReplicationController{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("replicationcontrollers"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/resourcequota.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/resourcequota.go index 2d0da73f..1aa175b9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/resourcequota.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/resourcequota.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type ResourceQuotaInterface interface { Get(name string) (*api.ResourceQuota, error) List(opts api.ListOptions) (*api.ResourceQuotaList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ResourceQuota, err error) ResourceQuotaExpansion } @@ -147,3 +148,17 @@ func (c *resourceQuotas) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched resourceQuota. +func (c *resourceQuotas) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ResourceQuota, err error) { + result = &api.ResourceQuota{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("resourcequotas"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/secret.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/secret.go index 101fbdb5..f87263cb 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/secret.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/secret.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type SecretInterface interface { Get(name string) (*api.Secret, error) List(opts api.ListOptions) (*api.SecretList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Secret, err error) SecretExpansion } @@ -133,3 +134,17 @@ func (c *secrets) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched secret. +func (c *secrets) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Secret, err error) { + result = &api.Secret{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("secrets"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/securitycontextconstraints.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/securitycontextconstraints.go index b98ac11a..116c5060 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/securitycontextconstraints.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/securitycontextconstraints.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type SecurityContextConstraintsInterface interface { Get(name string) (*api.SecurityContextConstraints, error) List(opts api.ListOptions) (*api.SecurityContextConstraintsList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.SecurityContextConstraints, err error) SecurityContextConstraintsExpansion } @@ -124,3 +125,16 @@ func (c *securityContextConstraints) Watch(opts api.ListOptions) (watch.Interfac VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched securityContextConstraints. +func (c *securityContextConstraints) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.SecurityContextConstraints, err error) { + result = &api.SecurityContextConstraints{} + err = c.client.Patch(pt). + Resource("securitycontextconstraints"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/securitycontextconstraints_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/securitycontextconstraints_expansion.go index 91503f65..cfd96705 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/securitycontextconstraints_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/securitycontextconstraints_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,26 +16,7 @@ limitations under the License. package unversioned -import "k8s.io/kubernetes/pkg/api" - // The SecurityContextConstraintsExpansion interface allows manually adding extra methods to the // SecurityContextConstraintsInterface. type SecurityContextConstraintsExpansion interface { - // PatchStatus modifies the status of an existing security context constraint. It returns the copy - // of the node that the server returns, or an error. - PatchStatus(name string, data []byte) (*api.SecurityContextConstraints, error) -} - -// PatchStatus modifies the status of an existing security context constraint. It returns the copy of -// the security context constraint that the server returns, or an error. -func (c *securityContextConstraints) PatchStatus(nodeName string, data []byte) (*api.SecurityContextConstraints, error) { - result := &api.SecurityContextConstraints{} - err := c.client.Patch(api.StrategicMergePatchType). - Resource("securitycontextconstraints"). - Name(nodeName). - SubResource("status"). - Body(data). - Do(). - Into(result) - return result, err } diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/service.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/service.go index 006f601c..86fa3b22 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/service.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/service.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type ServiceInterface interface { Get(name string) (*api.Service, error) List(opts api.ListOptions) (*api.ServiceList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Service, err error) ServiceExpansion } @@ -147,3 +148,17 @@ func (c *services) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched service. +func (c *services) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.Service, err error) { + result = &api.Service{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("services"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/service_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/service_expansion.go index 89266e6c..de8f21c6 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/service_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/service_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/serviceaccount.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/serviceaccount.go index 65f7df26..14c56b2f 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/serviceaccount.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned/serviceaccount.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ type ServiceAccountInterface interface { Get(name string) (*api.ServiceAccount, error) List(opts api.ListOptions) (*api.ServiceAccountList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ServiceAccount, err error) ServiceAccountExpansion } @@ -133,3 +134,17 @@ func (c *serviceAccounts) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched serviceAccount. +func (c *serviceAccounts) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *api.ServiceAccount, err error) { + result = &api.ServiceAccount{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("serviceaccounts"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/daemonset.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/daemonset.go index 96dae583..827677d9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/daemonset.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/daemonset.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ type DaemonSetInterface interface { Get(name string) (*extensions.DaemonSet, error) List(opts api.ListOptions) (*extensions.DaemonSetList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.DaemonSet, err error) DaemonSetExpansion } @@ -148,3 +149,17 @@ func (c *daemonSets) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched daemonSet. +func (c *daemonSets) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.DaemonSet, err error) { + result = &extensions.DaemonSet{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("daemonsets"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/deployment.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/deployment.go index 3b995c02..894a7d39 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/deployment.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ type DeploymentInterface interface { Get(name string) (*extensions.Deployment, error) List(opts api.ListOptions) (*extensions.DeploymentList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.Deployment, err error) DeploymentExpansion } @@ -148,3 +149,17 @@ func (c *deployments) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched deployment. +func (c *deployments) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.Deployment, err error) { + result = &extensions.Deployment{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("deployments"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/deployment_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/deployment_expansion.go index 9969aecc..4d89330f 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/deployment_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/deployment_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/doc.go index 47517b64..1e6a8ff8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/extensions_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/extensions_client.go index 9b9f4749..5454ea78 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/extensions_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/extensions_client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/generated_expansion.go index 7a199945..d818910a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,14 +18,10 @@ package unversioned type DaemonSetExpansion interface{} -type HorizontalPodAutoscalerExpansion interface{} - type IngressExpansion interface{} -type JobExpansion interface{} - type PodSecurityPolicyExpansion interface{} -type ThirdPartyResourceExpansion interface{} - type ReplicaSetExpansion interface{} + +type ThirdPartyResourceExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/ingress.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/ingress.go index a9d950ea..7d941ac8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/ingress.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/ingress.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ type IngressInterface interface { Get(name string) (*extensions.Ingress, error) List(opts api.ListOptions) (*extensions.IngressList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.Ingress, err error) IngressExpansion } @@ -148,3 +149,17 @@ func (c *ingresses) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched ingress. +func (c *ingresses) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.Ingress, err error) { + result = &extensions.Ingress{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("ingresses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/job.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/job.go deleted file mode 100644 index 4ae3f6ca..00000000 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/job.go +++ /dev/null @@ -1,150 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package unversioned - -import ( - api "k8s.io/kubernetes/pkg/api" - batch "k8s.io/kubernetes/pkg/apis/batch" - watch "k8s.io/kubernetes/pkg/watch" -) - -// JobsGetter has a method to return a JobInterface. -// A group's client should implement this interface. -type JobsGetter interface { - Jobs(namespace string) JobInterface -} - -// JobInterface has methods to work with Job resources. -type JobInterface interface { - Create(*batch.Job) (*batch.Job, error) - Update(*batch.Job) (*batch.Job, error) - UpdateStatus(*batch.Job) (*batch.Job, error) - Delete(name string, options *api.DeleteOptions) error - DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error - Get(name string) (*batch.Job, error) - List(opts api.ListOptions) (*batch.JobList, error) - Watch(opts api.ListOptions) (watch.Interface, error) - JobExpansion -} - -// jobs implements JobInterface -type jobs struct { - client *ExtensionsClient - ns string -} - -// newJobs returns a Jobs -func newJobs(c *ExtensionsClient, namespace string) *jobs { - return &jobs{ - client: c, - ns: namespace, - } -} - -// Create takes the representation of a job and creates it. Returns the server's representation of the job, and an error, if there is any. -func (c *jobs) Create(job *batch.Job) (result *batch.Job, err error) { - result = &batch.Job{} - err = c.client.Post(). - Namespace(c.ns). - Resource("jobs"). - Body(job). - Do(). - Into(result) - return -} - -// Update takes the representation of a job and updates it. Returns the server's representation of the job, and an error, if there is any. -func (c *jobs) Update(job *batch.Job) (result *batch.Job, err error) { - result = &batch.Job{} - err = c.client.Put(). - Namespace(c.ns). - Resource("jobs"). - Name(job.Name). - Body(job). - Do(). - Into(result) - return -} - -func (c *jobs) UpdateStatus(job *batch.Job) (result *batch.Job, err error) { - result = &batch.Job{} - err = c.client.Put(). - Namespace(c.ns). - Resource("jobs"). - Name(job.Name). - SubResource("status"). - Body(job). - Do(). - Into(result) - return -} - -// Delete takes name of the job and deletes it. Returns an error if one occurs. -func (c *jobs) Delete(name string, options *api.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("jobs"). - Name(name). - Body(options). - Do(). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *jobs) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("jobs"). - VersionedParams(&listOptions, api.ParameterCodec). - Body(options). - Do(). - Error() -} - -// Get takes name of the job, and returns the corresponding job object, and an error if there is any. -func (c *jobs) Get(name string) (result *batch.Job, err error) { - result = &batch.Job{} - err = c.client.Get(). - Namespace(c.ns). - Resource("jobs"). - Name(name). - Do(). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of Jobs that match those selectors. -func (c *jobs) List(opts api.ListOptions) (result *batch.JobList, err error) { - result = &batch.JobList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("jobs"). - VersionedParams(&opts, api.ParameterCodec). - Do(). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested jobs. -func (c *jobs) Watch(opts api.ListOptions) (watch.Interface, error) { - return c.client.Get(). - Prefix("watch"). - Namespace(c.ns). - Resource("jobs"). - VersionedParams(&opts, api.ParameterCodec). - Watch() -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/podsecuritypolicy.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/podsecuritypolicy.go index 06a7908f..e59ba014 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/podsecuritypolicy.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/podsecuritypolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type PodSecurityPolicyInterface interface { Get(name string) (*extensions.PodSecurityPolicy, error) List(opts api.ListOptions) (*extensions.PodSecurityPolicyList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.PodSecurityPolicy, err error) PodSecurityPolicyExpansion } @@ -125,3 +126,16 @@ func (c *podSecurityPolicies) Watch(opts api.ListOptions) (watch.Interface, erro VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched podSecurityPolicy. +func (c *podSecurityPolicies) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.PodSecurityPolicy, err error) { + result = &extensions.PodSecurityPolicy{} + err = c.client.Patch(pt). + Resource("podsecuritypolicies"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/replicaset.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/replicaset.go index 6257fd89..fc6987b5 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/replicaset.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -38,6 +38,7 @@ type ReplicaSetInterface interface { Get(name string) (*extensions.ReplicaSet, error) List(opts api.ListOptions) (*extensions.ReplicaSetList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.ReplicaSet, err error) ReplicaSetExpansion } @@ -148,3 +149,17 @@ func (c *replicaSets) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched replicaSet. +func (c *replicaSets) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.ReplicaSet, err error) { + result = &extensions.ReplicaSet{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("replicasets"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/scale.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/scale.go index 7e54bc34..12455ca8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/scale.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/scale_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/scale_expansion.go index 61a77f26..8dbba79e 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/scale_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/scale_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/thirdpartyresource.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/thirdpartyresource.go index a64ffb62..914ae240 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/thirdpartyresource.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned/thirdpartyresource.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type ThirdPartyResourceInterface interface { Get(name string) (*extensions.ThirdPartyResource, error) List(opts api.ListOptions) (*extensions.ThirdPartyResourceList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.ThirdPartyResource, err error) ThirdPartyResourceExpansion } @@ -125,3 +126,16 @@ func (c *thirdPartyResources) Watch(opts api.ListOptions) (watch.Interface, erro VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched thirdPartyResource. +func (c *thirdPartyResources) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *extensions.ThirdPartyResource, err error) { + result = &extensions.ThirdPartyResource{} + err = c.client.Patch(pt). + Resource("thirdpartyresources"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/clusterrole.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/clusterrole.go index 5d0b3912..2ad8d75c 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/clusterrole.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/clusterrole.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type ClusterRoleInterface interface { Get(name string) (*rbac.ClusterRole, error) List(opts api.ListOptions) (*rbac.ClusterRoleList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *rbac.ClusterRole, err error) ClusterRoleExpansion } @@ -125,3 +126,16 @@ func (c *clusterRoles) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched clusterRole. +func (c *clusterRoles) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *rbac.ClusterRole, err error) { + result = &rbac.ClusterRole{} + err = c.client.Patch(pt). + Resource("clusterroles"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/clusterrolebinding.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/clusterrolebinding.go index f2102592..1f88d7ed 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/clusterrolebinding.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/clusterrolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type ClusterRoleBindingInterface interface { Get(name string) (*rbac.ClusterRoleBinding, error) List(opts api.ListOptions) (*rbac.ClusterRoleBindingList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *rbac.ClusterRoleBinding, err error) ClusterRoleBindingExpansion } @@ -125,3 +126,16 @@ func (c *clusterRoleBindings) Watch(opts api.ListOptions) (watch.Interface, erro VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched clusterRoleBinding. +func (c *clusterRoleBindings) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *rbac.ClusterRoleBinding, err error) { + result = &rbac.ClusterRoleBinding{} + err = c.client.Patch(pt). + Resource("clusterrolebindings"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/doc.go index 47517b64..1e6a8ff8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/generated_expansion.go index a3b9c689..cbb0192a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/generated_expansion.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/rbac_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/rbac_client.go index 4d67337c..fa2f336f 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/rbac_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/rbac_client.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/role.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/role.go index 68e7ebe9..76dafee0 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/role.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/role.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type RoleInterface interface { Get(name string) (*rbac.Role, error) List(opts api.ListOptions) (*rbac.RoleList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *rbac.Role, err error) RoleExpansion } @@ -134,3 +135,17 @@ func (c *roles) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched role. +func (c *roles) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *rbac.Role, err error) { + result = &rbac.Role{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("roles"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/rolebinding.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/rolebinding.go index c73318c9..e62fe210 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/rolebinding.go +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/rbac/unversioned/rolebinding.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,7 @@ type RoleBindingInterface interface { Get(name string) (*rbac.RoleBinding, error) List(opts api.ListOptions) (*rbac.RoleBindingList, error) Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *rbac.RoleBinding, err error) RoleBindingExpansion } @@ -134,3 +135,17 @@ func (c *roleBindings) Watch(opts api.ListOptions) (watch.Interface, error) { VersionedParams(&opts, api.ParameterCodec). Watch() } + +// Patch applies the patch and returns the patched roleBinding. +func (c *roleBindings) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *rbac.RoleBinding, err error) { + result = &rbac.RoleBinding{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("rolebindings"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/doc.go new file mode 100644 index 00000000..1e6a8ff8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package is generated by client-gen with the default arguments. + +// This package has the automatically generated typed clients. +package unversioned diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/generated_expansion.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/generated_expansion.go new file mode 100644 index 00000000..3d0155b2 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/generated_expansion.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +type StorageClassExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/storage_client.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/storage_client.go new file mode 100644 index 00000000..9c65356b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/storage_client.go @@ -0,0 +1,101 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + registered "k8s.io/kubernetes/pkg/apimachinery/registered" + restclient "k8s.io/kubernetes/pkg/client/restclient" +) + +type StorageInterface interface { + GetRESTClient() *restclient.RESTClient + StorageClassesGetter +} + +// StorageClient is used to interact with features provided by the Storage group. +type StorageClient struct { + *restclient.RESTClient +} + +func (c *StorageClient) StorageClasses() StorageClassInterface { + return newStorageClasses(c) +} + +// NewForConfig creates a new StorageClient for the given config. +func NewForConfig(c *restclient.Config) (*StorageClient, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &StorageClient{client}, nil +} + +// NewForConfigOrDie creates a new StorageClient for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *restclient.Config) *StorageClient { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new StorageClient for the given RESTClient. +func New(c *restclient.RESTClient) *StorageClient { + return &StorageClient{c} +} + +func setConfigDefaults(config *restclient.Config) error { + // if storage group is not registered, return an error + g, err := registered.Group("storage.k8s.io") + if err != nil { + return err + } + config.APIPath = "/apis" + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + // TODO: Unconditionally set the config.Version, until we fix the config. + //if config.Version == "" { + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + //} + + config.NegotiatedSerializer = api.Codecs + + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + return nil +} + +// GetRESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *StorageClient) GetRESTClient() *restclient.RESTClient { + if c == nil { + return nil + } + return c.RESTClient +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/storageclass.go b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/storageclass.go new file mode 100644 index 00000000..63795b6a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned/storageclass.go @@ -0,0 +1,141 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + api "k8s.io/kubernetes/pkg/api" + storage "k8s.io/kubernetes/pkg/apis/storage" + watch "k8s.io/kubernetes/pkg/watch" +) + +// StorageClassesGetter has a method to return a StorageClassInterface. +// A group's client should implement this interface. +type StorageClassesGetter interface { + StorageClasses() StorageClassInterface +} + +// StorageClassInterface has methods to work with StorageClass resources. +type StorageClassInterface interface { + Create(*storage.StorageClass) (*storage.StorageClass, error) + Update(*storage.StorageClass) (*storage.StorageClass, error) + Delete(name string, options *api.DeleteOptions) error + DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error + Get(name string) (*storage.StorageClass, error) + List(opts api.ListOptions) (*storage.StorageClassList, error) + Watch(opts api.ListOptions) (watch.Interface, error) + Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *storage.StorageClass, err error) + StorageClassExpansion +} + +// storageClasses implements StorageClassInterface +type storageClasses struct { + client *StorageClient +} + +// newStorageClasses returns a StorageClasses +func newStorageClasses(c *StorageClient) *storageClasses { + return &storageClasses{ + client: c, + } +} + +// Create takes the representation of a storageClass and creates it. Returns the server's representation of the storageClass, and an error, if there is any. +func (c *storageClasses) Create(storageClass *storage.StorageClass) (result *storage.StorageClass, err error) { + result = &storage.StorageClass{} + err = c.client.Post(). + Resource("storageclasses"). + Body(storageClass). + Do(). + Into(result) + return +} + +// Update takes the representation of a storageClass and updates it. Returns the server's representation of the storageClass, and an error, if there is any. +func (c *storageClasses) Update(storageClass *storage.StorageClass) (result *storage.StorageClass, err error) { + result = &storage.StorageClass{} + err = c.client.Put(). + Resource("storageclasses"). + Name(storageClass.Name). + Body(storageClass). + Do(). + Into(result) + return +} + +// Delete takes name of the storageClass and deletes it. Returns an error if one occurs. +func (c *storageClasses) Delete(name string, options *api.DeleteOptions) error { + return c.client.Delete(). + Resource("storageclasses"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *storageClasses) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { + return c.client.Delete(). + Resource("storageclasses"). + VersionedParams(&listOptions, api.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Get takes name of the storageClass, and returns the corresponding storageClass object, and an error if there is any. +func (c *storageClasses) Get(name string) (result *storage.StorageClass, err error) { + result = &storage.StorageClass{} + err = c.client.Get(). + Resource("storageclasses"). + Name(name). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of StorageClasses that match those selectors. +func (c *storageClasses) List(opts api.ListOptions) (result *storage.StorageClassList, err error) { + result = &storage.StorageClassList{} + err = c.client.Get(). + Resource("storageclasses"). + VersionedParams(&opts, api.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested storageClasses. +func (c *storageClasses) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Resource("storageclasses"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} + +// Patch applies the patch and returns the patched storageClass. +func (c *storageClasses) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *storage.StorageClass, err error) { + result = &storage.StorageClass{} + err = c.client.Patch(pt). + Resource("storageclasses"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/metrics/metrics.go b/vendor/k8s.io/kubernetes/pkg/client/metrics/metrics.go index efa66fc8..a01306c6 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/metrics/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/client/metrics/metrics.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,54 +14,48 @@ See the License for the specific language governing permissions and limitations under the License. */ -// Package metrics provides utilities for registering client metrics to Prometheus. +// Package metrics provides abstractions for registering which metrics +// to record. package metrics import ( + "net/url" "sync" "time" - - "github.com/prometheus/client_golang/prometheus" -) - -const restClientSubsystem = "rest_client" - -var ( - // RequestLatency is a Prometheus Summary metric type partitioned by - // "verb" and "url" labels. It is used for the rest client latency metrics. - RequestLatency = prometheus.NewSummaryVec( - prometheus.SummaryOpts{ - Subsystem: restClientSubsystem, - Name: "request_latency_microseconds", - Help: "Request latency in microseconds. Broken down by verb and URL", - MaxAge: time.Hour, - }, - []string{"verb", "url"}, - ) - - RequestResult = prometheus.NewCounterVec( - prometheus.CounterOpts{ - Subsystem: restClientSubsystem, - Name: "request_status_codes", - Help: "Number of http requests, partitioned by metadata", - }, - []string{"code", "method", "host"}, - ) ) var registerMetrics sync.Once -// Register registers all metrics to Prometheus with -// respect to the RequestLatency. -func Register() { - // Register the metrics. +// LatencyMetric observes client latency partitioned by verb and url. +type LatencyMetric interface { + Observe(verb string, u url.URL, latency time.Duration) +} + +// ResultMetric counts response codes partitioned by method and host. +type ResultMetric interface { + Increment(code string, method string, host string) +} + +var ( + // RequestLatency is the latency metric that rest clients will update. + RequestLatency LatencyMetric = noopLatency{} + // RequestResult is the result metric that rest clients will update. + RequestResult ResultMetric = noopResult{} +) + +// Register registers metrics for the rest client to use. This can +// only be called once. +func Register(lm LatencyMetric, rm ResultMetric) { registerMetrics.Do(func() { - prometheus.MustRegister(RequestLatency) - prometheus.MustRegister(RequestResult) + RequestLatency = lm + RequestResult = rm }) } -// Calculates the time since the specified start in microseconds. -func SinceInMicroseconds(start time.Time) float64 { - return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) -} +type noopLatency struct{} + +func (noopLatency) Observe(string, url.URL, time.Duration) {} + +type noopResult struct{} + +func (noopResult) Increment(string, string, string) {} diff --git a/vendor/k8s.io/kubernetes/pkg/client/record/doc.go b/vendor/k8s.io/kubernetes/pkg/client/record/doc.go index d9551543..0dc79069 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/record/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/record/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/record/event.go b/vendor/k8s.io/kubernetes/pkg/client/record/event.go index 47cbe3ec..55873a73 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/record/event.go +++ b/vendor/k8s.io/kubernetes/pkg/client/record/event.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,12 +26,13 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/clock" utilruntime "k8s.io/kubernetes/pkg/util/runtime" "k8s.io/kubernetes/pkg/watch" - "github.com/golang/glog" "net/http" + + "github.com/golang/glog" ) const maxTriesPerEvent = 12 @@ -113,7 +114,7 @@ func (eventBroadcaster *eventBroadcasterImpl) StartRecordingToSink(sink EventSin // The default math/rand package functions aren't thread safe, so create a // new Rand object for each StartRecording call. randGen := rand.New(rand.NewSource(time.Now().UnixNano())) - eventCorrelator := NewEventCorrelator(util.RealClock{}) + eventCorrelator := NewEventCorrelator(clock.RealClock{}) return eventBroadcaster.StartEventWatcher( func(event *api.Event) { recordToSink(sink, event, eventCorrelator, randGen, eventBroadcaster.sleepDuration) @@ -242,13 +243,13 @@ func (eventBroadcaster *eventBroadcasterImpl) StartEventWatcher(eventHandler fun // NewRecorder returns an EventRecorder that records events with the given event source. func (eventBroadcaster *eventBroadcasterImpl) NewRecorder(source api.EventSource) EventRecorder { - return &recorderImpl{source, eventBroadcaster.Broadcaster, util.RealClock{}} + return &recorderImpl{source, eventBroadcaster.Broadcaster, clock.RealClock{}} } type recorderImpl struct { source api.EventSource *watch.Broadcaster - clock util.Clock + clock clock.Clock } func (recorder *recorderImpl) generateEvent(object runtime.Object, timestamp unversioned.Time, eventtype, reason, message string) { diff --git a/vendor/k8s.io/kubernetes/pkg/client/record/events_cache.go b/vendor/k8s.io/kubernetes/pkg/client/record/events_cache.go index fa76db79..8ff65776 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/record/events_cache.go +++ b/vendor/k8s.io/kubernetes/pkg/client/record/events_cache.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/clock" "k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/strategicpatch" ) @@ -116,12 +116,12 @@ type EventAggregator struct { maxIntervalInSeconds int // clock is used to allow for testing over a time interval - clock util.Clock + clock clock.Clock } // NewEventAggregator returns a new instance of an EventAggregator func NewEventAggregator(lruCacheSize int, keyFunc EventAggregatorKeyFunc, messageFunc EventAggregatorMessageFunc, - maxEvents int, maxIntervalInSeconds int, clock util.Clock) *EventAggregator { + maxEvents int, maxIntervalInSeconds int, clock clock.Clock) *EventAggregator { return &EventAggregator{ cache: lru.New(lruCacheSize), keyFunc: keyFunc, @@ -207,11 +207,11 @@ type eventLog struct { type eventLogger struct { sync.RWMutex cache *lru.Cache - clock util.Clock + clock clock.Clock } // newEventLogger observes events and counts their frequencies -func newEventLogger(lruCacheEntries int, clock util.Clock) *eventLogger { +func newEventLogger(lruCacheEntries int, clock clock.Clock) *eventLogger { return &eventLogger{cache: lru.New(lruCacheEntries), clock: clock} } @@ -326,7 +326,7 @@ type EventCorrelateResult struct { // the same reason. // * Events are incrementally counted if the exact same event is encountered multiple // times. -func NewEventCorrelator(clock util.Clock) *EventCorrelator { +func NewEventCorrelator(clock clock.Clock) *EventCorrelator { cacheSize := maxLruCacheEntries return &EventCorrelator{ filterFunc: DefaultEventFilterFunc, diff --git a/vendor/k8s.io/kubernetes/pkg/client/record/fake.go b/vendor/k8s.io/kubernetes/pkg/client/record/fake.go index 35204ef2..e063a4fc 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/record/fake.go +++ b/vendor/k8s.io/kubernetes/pkg/client/record/fake.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/restclient/client.go b/vendor/k8s.io/kubernetes/pkg/client/restclient/client.go index 230edd45..24ad1914 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/restclient/client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/restclient/client.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -222,7 +222,3 @@ func (c *RESTClient) Delete() *Request { func (c *RESTClient) APIVersion() unversioned.GroupVersion { return *c.contentConfig.GroupVersion } - -func (c *RESTClient) Codec() runtime.Codec { - return c.contentConfig.Codec -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/restclient/config.go b/vendor/k8s.io/kubernetes/pkg/client/restclient/config.go index 0741e3c2..82c1ac2c 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/restclient/config.go +++ b/vendor/k8s.io/kubernetes/pkg/client/restclient/config.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -37,6 +37,11 @@ import ( "k8s.io/kubernetes/pkg/version" ) +const ( + DefaultQPS float32 = 5.0 + DefaultBurst int = 10 +) + // Config holds the common attributes that can be passed to a Kubernetes client on // initialization. type Config struct { @@ -93,14 +98,20 @@ type Config struct { // on top of the returned RoundTripper. WrapTransport func(rt http.RoundTripper) http.RoundTripper - // QPS indicates the maximum QPS to the master from this client. If zero, QPS is unlimited. + // QPS indicates the maximum QPS to the master from this client. + // If it's zero, the created RESTClient will use DefaultQPS: 5 QPS float32 - // Maximum burst for throttle + // Maximum burst for throttle. + // If it's zero, the created RESTClient will use DefaultBurst: 10. Burst int // Rate limiter for limiting connections to the master from this client. If present overwrites QPS/Burst RateLimiter flowcontrol.RateLimiter + + // Version forces a specific version to be used (if registered) + // Do we need this? + // Version string } // TLSClientConfig contains settings to enable transport layer security @@ -124,6 +135,9 @@ type TLSClientConfig struct { } type ContentConfig struct { + // AcceptContentTypes specifies the types the client will accept and is optional. + // If not set, ContentType will be used to define the Accept header + AcceptContentTypes string // ContentType specifies the wire format used to communicate with the server. // This value will be set as the Accept header on requests made to the server, and // as the default content type on any object sent to the server. If not set, @@ -136,15 +150,6 @@ type ContentConfig struct { // NegotiatedSerializer is used for obtaining encoders and decoders for multiple // supported media types. NegotiatedSerializer runtime.NegotiatedSerializer - - // Codec specifies the encoding and decoding behavior for runtime.Objects passed - // to a RESTClient or Client. Required when initializing a RESTClient, optional - // when initializing a Client. - // - // DEPRECATED: Please use NegotiatedSerializer instead. - // Codec is currently used only in some tests and will be removed soon. - // All production setups should use NegotiatedSerializer. - Codec runtime.Codec } // RESTClientFor returns a RESTClient that satisfies the requested attributes on a client Config @@ -158,6 +163,14 @@ func RESTClientFor(config *Config) (*RESTClient, error) { if config.NegotiatedSerializer == nil { return nil, fmt.Errorf("NegotiatedSerializer is required when initializing a RESTClient") } + qps := config.QPS + if config.QPS == 0.0 { + qps = DefaultQPS + } + burst := config.Burst + if config.Burst == 0 { + burst = DefaultBurst + } baseURL, versionedAPIPath, err := defaultServerUrlFor(config) if err != nil { @@ -174,7 +187,7 @@ func RESTClientFor(config *Config) (*RESTClient, error) { httpClient = &http.Client{Transport: transport} } - return NewRESTClient(baseURL, versionedAPIPath, config.ContentConfig, config.QPS, config.Burst, config.RateLimiter, httpClient) + return NewRESTClient(baseURL, versionedAPIPath, config.ContentConfig, qps, burst, config.RateLimiter, httpClient) } // UnversionedRESTClientFor is the same as RESTClientFor, except that it allows @@ -214,12 +227,6 @@ func SetKubernetesDefaults(config *Config) error { if len(config.UserAgent) == 0 { config.UserAgent = DefaultKubernetesUserAgent() } - if config.QPS == 0.0 { - config.QPS = 5.0 - } - if config.Burst == 0 { - config.Burst = 10 - } return nil } @@ -240,7 +247,7 @@ func DefaultKubernetesUserAgent() string { // InClusterConfig returns a config object which uses the service account // kubernetes gives to pods. It's intended for clients that expect to be -// running inside a pod running on kuberenetes. It will return an error if +// running inside a pod running on kubernetes. It will return an error if // called from a process not running in a kubernetes environment. func InClusterConfig() (*Config, error) { host, port := os.Getenv("KUBERNETES_SERVICE_HOST"), os.Getenv("KUBERNETES_SERVICE_PORT") diff --git a/vendor/k8s.io/kubernetes/pkg/client/restclient/plugin.go b/vendor/k8s.io/kubernetes/pkg/client/restclient/plugin.go index 4752e375..06ac3cce 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/restclient/plugin.go +++ b/vendor/k8s.io/kubernetes/pkg/client/restclient/plugin.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/restclient/request.go b/vendor/k8s.io/kubernetes/pkg/client/restclient/request.go index e406450a..b57f5558 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/restclient/request.go +++ b/vendor/k8s.io/kubernetes/pkg/client/restclient/request.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ package restclient import ( "bytes" + "encoding/hex" "fmt" "io" "io/ioutil" @@ -57,10 +58,6 @@ var ( longThrottleLatency = 50 * time.Millisecond ) -func init() { - metrics.Register() -} - // HTTPClient is an interface for testing a request object. type HTTPClient interface { Do(req *http.Request) (*http.Response, error) @@ -143,7 +140,10 @@ func NewRequest(client HTTPClient, verb string, baseURL *url.URL, versionedAPIPa backoffMgr: backoff, throttle: throttle, } - if len(content.ContentType) > 0 { + switch { + case len(content.AcceptContentTypes) > 0: + r.SetHeader("Accept", content.AcceptContentTypes) + case len(content.ContentType) > 0: r.SetHeader("Accept", content.ContentType+", */*") } return r @@ -335,16 +335,16 @@ func (r resourceTypeToFieldMapping) filterField(resourceType, field, value strin type versionToResourceToFieldMapping map[unversioned.GroupVersion]resourceTypeToFieldMapping +// filterField transforms the given field/value selector for the given groupVersion and resource func (v versionToResourceToFieldMapping) filterField(groupVersion *unversioned.GroupVersion, resourceType, field, value string) (newField, newValue string, err error) { rMapping, ok := v[*groupVersion] if !ok { - // glog.Warningf("Field selector: %v - %v - %v - %v: need to check if this is versioned correctly.", groupVersion, resourceType, field, value) + // no groupVersion overrides registered, default to identity mapping return field, value, nil } newField, newValue, err = rMapping.filterField(resourceType, field, value) if err != nil { - // This is only a warning until we find and fix all of the client's usages. - // glog.Warningf("Field selector: %v - %v - %v - %v: need to check if this is versioned correctly.", groupVersion, resourceType, field, value) + // no groupVersionResource overrides registered, default to identity mapping return field, value, nil } return newField, newValue, nil @@ -538,10 +538,10 @@ func (r *Request) Body(obj interface{}) *Request { r.err = err return r } - glog.V(8).Infof("Request Body: %s", string(data)) + glog.V(8).Infof("Request Body: %#v", string(data)) r.body = bytes.NewReader(data) case []byte: - glog.V(8).Infof("Request Body: %s", string(t)) + glog.V(8).Infof("Request Body: %#v", string(t)) r.body = bytes.NewReader(t) case io.Reader: r.body = t @@ -555,7 +555,7 @@ func (r *Request) Body(obj interface{}) *Request { r.err = err return r } - glog.V(8).Infof("Request Body: %s", string(data)) + glog.V(8).Infof("Request Body: %#v", string(data)) r.body = bytes.NewReader(data) r.SetHeader("Content-Type", r.content.ContentType) default: @@ -573,7 +573,7 @@ func (r *Request) URL() *url.URL { if len(r.resource) != 0 { p = path.Join(p, strings.ToLower(r.resource)) } - // Join trims trailing slashes, so preserve r.pathPrefix's trailing slash for backwards compat if nothing was changed + // Join trims trailing slashes, so preserve r.pathPrefix's trailing slash for backwards compatibility if nothing was changed if len(r.resourceName) != 0 || len(r.subpath) != 0 || len(r.subresource) != 0 { p = path.Join(p, r.resourceName, r.subresource, r.subpath) } @@ -605,7 +605,7 @@ func (r *Request) URL() *url.URL { // underyling object. This means some useful request info (like the types of field // selectors in use) will be lost. // TODO: preserve field selector keys -func (r Request) finalURLTemplate() string { +func (r Request) finalURLTemplate() url.URL { if len(r.resourceName) != 0 { r.resourceName = "{name}" } @@ -618,7 +618,8 @@ func (r Request) finalURLTemplate() string { newParams[k] = v } r.params = newParams - return r.URL().String() + url := r.URL() + return *url } func (r *Request) tryThrottle() { @@ -693,10 +694,10 @@ func updateURLMetrics(req *Request, resp *http.Response, err error) { // If we have an error (i.e. apiserver down) we report that as a metric label. if err != nil { - metrics.RequestResult.WithLabelValues(err.Error(), req.verb, url).Inc() + metrics.RequestResult.Increment(err.Error(), req.verb, url) } else { //Metrics for failure codes - metrics.RequestResult.WithLabelValues(strconv.Itoa(resp.StatusCode), req.verb, url).Inc() + metrics.RequestResult.Increment(strconv.Itoa(resp.StatusCode), req.verb, url) } } @@ -771,7 +772,7 @@ func (r *Request) request(fn func(*http.Request, *http.Response)) error { //Metrics for total request latency start := time.Now() defer func() { - metrics.RequestLatency.WithLabelValues(r.verb, r.finalURLTemplate()).Observe(metrics.SinceInMicroseconds(start)) + metrics.RequestLatency.Observe(r.verb, r.finalURLTemplate(), time.Since(start)) }() if r.err != nil { @@ -817,9 +818,16 @@ func (r *Request) request(fn func(*http.Request, *http.Response)) error { } done := func() bool { - // ensure the response body is closed before we reconnect, so that we reuse the same - // TCP connection - defer resp.Body.Close() + // Ensure the response body is fully read and closed + // before we reconnect, so that we reuse the same TCP + // connection. + defer func() { + const maxBodySlurpSize = 2 << 10 + if resp.ContentLength <= maxBodySlurpSize { + io.Copy(ioutil.Discard, &io.LimitedReader{R: resp.Body, N: maxBodySlurpSize}) + } + resp.Body.Close() + }() retries++ if seconds, wait := checkWait(resp); wait && retries < maxRetries { @@ -873,6 +881,9 @@ func (r *Request) DoRaw() ([]byte, error) { var result Result err := r.request(func(req *http.Request, resp *http.Response) { result.body, result.err = ioutil.ReadAll(resp.Body) + if resp.StatusCode < http.StatusOK || resp.StatusCode > http.StatusPartialContent { + result.err = r.transformUnstructuredResponseError(resp, req, result.body) + } }) if err != nil { return nil, err @@ -888,16 +899,49 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu body = data } } - glog.V(8).Infof("Response Body: %s", string(body)) + + if glog.V(8) { + switch { + case bytes.IndexFunc(body, func(r rune) bool { return r < 0x0a }) != -1: + glog.Infof("Response Body:\n%s", hex.Dump(body)) + default: + glog.Infof("Response Body: %s", string(body)) + } + } + + // verify the content type is accurate + contentType := resp.Header.Get("Content-Type") + decoder := r.serializers.Decoder + if len(contentType) > 0 && (decoder == nil || (len(r.content.ContentType) > 0 && contentType != r.content.ContentType)) { + mediaType, params, err := mime.ParseMediaType(contentType) + if err != nil { + return Result{err: errors.NewInternalError(err)} + } + decoder, err = r.serializers.RenegotiatedDecoder(mediaType, params) + if err != nil { + // if we fail to negotiate a decoder, treat this as an unstructured error + switch { + case resp.StatusCode == http.StatusSwitchingProtocols: + // no-op, we've been upgraded + case resp.StatusCode < http.StatusOK || resp.StatusCode > http.StatusPartialContent: + return Result{err: r.transformUnstructuredResponseError(resp, req, body)} + } + return Result{ + body: body, + contentType: contentType, + statusCode: resp.StatusCode, + } + } + } // Did the server give us a status response? isStatusResponse := false + status := &unversioned.Status{} // Because release-1.1 server returns Status with empty APIVersion at paths // to the Extensions resources, we need to use DecodeInto here to provide // default groupVersion, otherwise a status response won't be correctly // decoded. - status := &unversioned.Status{} - err := runtime.DecodeInto(r.serializers.Decoder, body, status) + err := runtime.DecodeInto(decoder, body, status) if err == nil && len(status.Status) > 0 { isStatusResponse = true } @@ -919,25 +963,6 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu return Result{err: errors.FromObject(status)} } - contentType := resp.Header.Get("Content-Type") - var decoder runtime.Decoder - if contentType == r.content.ContentType { - decoder = r.serializers.Decoder - } else { - mediaType, params, err := mime.ParseMediaType(contentType) - if err != nil { - return Result{err: errors.NewInternalError(err)} - } - decoder, err = r.serializers.RenegotiatedDecoder(mediaType, params) - if err != nil { - return Result{ - body: body, - contentType: contentType, - statusCode: resp.StatusCode, - } - } - } - return Result{ body: body, contentType: contentType, @@ -970,7 +995,7 @@ func (r *Request) transformUnstructuredResponseError(resp *http.Response, req *h body = data } } - glog.V(8).Infof("Response Body: %s", string(body)) + glog.V(8).Infof("Response Body: %#v", string(body)) message := "unknown" if isTextResponse(resp) { diff --git a/vendor/k8s.io/kubernetes/pkg/client/restclient/transport.go b/vendor/k8s.io/kubernetes/pkg/client/restclient/transport.go index 0bfa2ea2..c385914e 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/restclient/transport.go +++ b/vendor/k8s.io/kubernetes/pkg/client/restclient/transport.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/restclient/url_utils.go b/vendor/k8s.io/kubernetes/pkg/client/restclient/url_utils.go index 9a83d787..81f16d63 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/restclient/url_utils.go +++ b/vendor/k8s.io/kubernetes/pkg/client/restclient/url_utils.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -36,7 +36,7 @@ func DefaultServerURL(host, apiPath string, groupVersion unversioned.GroupVersio if err != nil { return nil, "", err } - if hostURL.Scheme == "" { + if hostURL.Scheme == "" || hostURL.Host == "" { scheme := "http://" if defaultTLS { scheme = "https://" diff --git a/vendor/k8s.io/kubernetes/pkg/client/restclient/urlbackoff.go b/vendor/k8s.io/kubernetes/pkg/client/restclient/urlbackoff.go index 6c672f08..24a89ed9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/restclient/urlbackoff.go +++ b/vendor/k8s.io/kubernetes/pkg/client/restclient/urlbackoff.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/restclient/versions.go b/vendor/k8s.io/kubernetes/pkg/client/restclient/versions.go index e12c05c1..33764344 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/restclient/versions.go +++ b/vendor/k8s.io/kubernetes/pkg/client/restclient/versions.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/transport/cache.go b/vendor/k8s.io/kubernetes/pkg/client/transport/cache.go index 8c07f539..eedfd3d7 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/transport/cache.go +++ b/vendor/k8s.io/kubernetes/pkg/client/transport/cache.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/transport/config.go b/vendor/k8s.io/kubernetes/pkg/client/transport/config.go index 63a63fbb..6e5c68a3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/transport/config.go +++ b/vendor/k8s.io/kubernetes/pkg/client/transport/config.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/transport/round_trippers.go b/vendor/k8s.io/kubernetes/pkg/client/transport/round_trippers.go index 55284ebc..aadf0cbf 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/transport/round_trippers.go +++ b/vendor/k8s.io/kubernetes/pkg/client/transport/round_trippers.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/transport/transport.go b/vendor/k8s.io/kubernetes/pkg/client/transport/transport.go index 2d20e1b8..9c5b9ef3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/transport/transport.go +++ b/vendor/k8s.io/kubernetes/pkg/client/transport/transport.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/discovery_client.go b/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/discovery_client.go index 635ca4a9..714e6311 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/discovery_client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/discovery_client.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import ( "encoding/json" "fmt" "net/url" + "sort" "strings" "github.com/emicklei/go-restful/swagger" @@ -31,7 +32,6 @@ import ( "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/serializer" - utilerrors "k8s.io/kubernetes/pkg/util/errors" "k8s.io/kubernetes/pkg/version" ) @@ -149,9 +149,8 @@ func (d *DiscoveryClient) ServerResourcesForGroupVersion(groupVersion string) (r // ignore 403 or 404 error to be compatible with an v1.0 server. if groupVersion == "v1" && (errors.IsNotFound(err) || errors.IsForbidden(err)) { return resources, nil - } else { - return nil, err } + return nil, err } return resources, nil } @@ -174,6 +173,29 @@ func (d *DiscoveryClient) ServerResources() (map[string]*unversioned.APIResource return result, nil } +// ErrGroupDiscoveryFailed is returned if one or more API groups fail to load. +type ErrGroupDiscoveryFailed struct { + // Groups is a list of the groups that failed to load and the error cause + Groups map[unversioned.GroupVersion]error +} + +// Error implements the error interface +func (e *ErrGroupDiscoveryFailed) Error() string { + var groups []string + for k, v := range e.Groups { + groups = append(groups, fmt.Sprintf("%s: %v", k, v)) + } + sort.Strings(groups) + return fmt.Sprintf("unable to retrieve the complete list of server APIs: %s", strings.Join(groups, ", ")) +} + +// IsGroupDiscoveryFailedError returns true if the provided error indicates the server was unable to discover +// a complete list of APIs for the client to use. +func IsGroupDiscoveryFailedError(err error) bool { + _, ok := err.(*ErrGroupDiscoveryFailed) + return err != nil && ok +} + // serverPreferredResources returns the supported resources with the version preferred by the // server. If namespaced is true, only namespaced resources will be returned. func (d *DiscoveryClient) serverPreferredResources(namespaced bool) ([]unversioned.GroupVersionResource, error) { @@ -183,15 +205,18 @@ func (d *DiscoveryClient) serverPreferredResources(namespaced bool) ([]unversion return results, err } - allErrs := []error{} + var failedGroups map[unversioned.GroupVersion]error for _, apiGroup := range serverGroupList.Groups { preferredVersion := apiGroup.PreferredVersion + groupVersion := unversioned.GroupVersion{Group: apiGroup.Name, Version: preferredVersion.Version} apiResourceList, err := d.ServerResourcesForGroupVersion(preferredVersion.GroupVersion) if err != nil { - allErrs = append(allErrs, err) + if failedGroups == nil { + failedGroups = make(map[unversioned.GroupVersion]error) + } + failedGroups[groupVersion] = err continue } - groupVersion := unversioned.GroupVersion{Group: apiGroup.Name, Version: preferredVersion.Version} for _, apiResource := range apiResourceList.APIResources { // ignore the root scoped resources if "namespaced" is true. if namespaced && !apiResource.Namespaced { @@ -203,7 +228,10 @@ func (d *DiscoveryClient) serverPreferredResources(namespaced bool) ([]unversion results = append(results, groupVersion.WithResource(apiResource.Name)) } } - return results, utilerrors.NewAggregate(allErrs) + if len(failedGroups) > 0 { + return results, &ErrGroupDiscoveryFailed{Groups: failedGroups} + } + return results, nil } // ServerPreferredResources returns the supported resources with the version preferred by the @@ -234,7 +262,7 @@ func (d *DiscoveryClient) ServerVersion() (*version.Info, error) { // SwaggerSchema retrieves and parses the swagger API schema the server supports. func (d *DiscoveryClient) SwaggerSchema(version unversioned.GroupVersion) (*swagger.ApiDeclaration, error) { - if version.IsEmpty() { + if version.Empty() { return nil, fmt.Errorf("groupVersion cannot be empty") } diff --git a/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/restmapper.go b/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/restmapper.go new file mode 100644 index 00000000..7f6a0d1f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/restmapper.go @@ -0,0 +1,263 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package discovery + +import ( + "sync" + + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" +) + +// APIGroupResources is an API group with a mapping of versions to +// resources. +type APIGroupResources struct { + Group unversioned.APIGroup + // A mapping of version string to a slice of APIResources for + // that version. + VersionedResources map[string][]unversioned.APIResource +} + +// NewRESTMapper returns a PriorityRESTMapper based on the discovered +// groups and resourced passed in. +func NewRESTMapper(groupResources []*APIGroupResources, versionInterfaces meta.VersionInterfacesFunc) meta.RESTMapper { + unionMapper := meta.MultiRESTMapper{} + + var groupPriority []string + var resourcePriority []unversioned.GroupVersionResource + var kindPriority []unversioned.GroupVersionKind + + for _, group := range groupResources { + groupPriority = append(groupPriority, group.Group.Name) + + if len(group.Group.PreferredVersion.Version) != 0 { + preffered := group.Group.PreferredVersion.Version + if _, ok := group.VersionedResources[preffered]; ok { + resourcePriority = append(resourcePriority, unversioned.GroupVersionResource{ + Group: group.Group.Name, + Version: group.Group.PreferredVersion.Version, + Resource: meta.AnyResource, + }) + + kindPriority = append(kindPriority, unversioned.GroupVersionKind{ + Group: group.Group.Name, + Version: group.Group.PreferredVersion.Version, + Kind: meta.AnyKind, + }) + } + } + + for _, discoveryVersion := range group.Group.Versions { + resources, ok := group.VersionedResources[discoveryVersion.Version] + if !ok { + continue + } + + gv := unversioned.GroupVersion{Group: group.Group.Name, Version: discoveryVersion.Version} + versionMapper := meta.NewDefaultRESTMapper([]unversioned.GroupVersion{gv}, versionInterfaces) + + for _, resource := range resources { + scope := meta.RESTScopeNamespace + if !resource.Namespaced { + scope = meta.RESTScopeRoot + } + versionMapper.Add(gv.WithKind(resource.Kind), scope) + // TODO only do this if it supports listing + versionMapper.Add(gv.WithKind(resource.Kind+"List"), scope) + } + // TODO why is this type not in discovery (at least for "v1") + versionMapper.Add(gv.WithKind("List"), meta.RESTScopeRoot) + unionMapper = append(unionMapper, versionMapper) + } + } + + for _, group := range groupPriority { + resourcePriority = append(resourcePriority, unversioned.GroupVersionResource{ + Group: group, + Version: meta.AnyVersion, + Resource: meta.AnyResource, + }) + kindPriority = append(kindPriority, unversioned.GroupVersionKind{ + Group: group, + Version: meta.AnyVersion, + Kind: meta.AnyKind, + }) + } + + return meta.PriorityRESTMapper{ + Delegate: unionMapper, + ResourcePriority: resourcePriority, + KindPriority: kindPriority, + } +} + +// GetAPIGroupResources uses the provided discovery client to gather +// discovery information and populate a slice of APIGroupResources. +func GetAPIGroupResources(cl DiscoveryInterface) ([]*APIGroupResources, error) { + apiGroups, err := cl.ServerGroups() + if err != nil { + return nil, err + } + var result []*APIGroupResources + for _, group := range apiGroups.Groups { + groupResources := &APIGroupResources{ + Group: group, + VersionedResources: make(map[string][]unversioned.APIResource), + } + for _, version := range group.Versions { + resources, err := cl.ServerResourcesForGroupVersion(version.GroupVersion) + if err != nil { + if errors.IsNotFound(err) { + continue // ignore as this can race with deletion of 3rd party APIs + } + return nil, err + } + groupResources.VersionedResources[version.Version] = resources.APIResources + } + result = append(result, groupResources) + } + return result, nil +} + +// DeferredDiscoveryRESTMapper is a RESTMapper that will defer +// initialization of the RESTMapper until the first mapping is +// requested. +type DeferredDiscoveryRESTMapper struct { + initMu sync.Mutex + delegate meta.RESTMapper + cl DiscoveryInterface + versionInterface meta.VersionInterfacesFunc +} + +// NewDeferredDiscoveryRESTMapper returns a +// DeferredDiscoveryRESTMapper that will lazily query the provided +// client for discovery information to do REST mappings. +func NewDeferredDiscoveryRESTMapper(cl DiscoveryInterface, versionInterface meta.VersionInterfacesFunc) *DeferredDiscoveryRESTMapper { + return &DeferredDiscoveryRESTMapper{ + cl: cl, + versionInterface: versionInterface, + } +} + +func (d *DeferredDiscoveryRESTMapper) getDelegate() (meta.RESTMapper, error) { + d.initMu.Lock() + defer d.initMu.Unlock() + + if d.delegate != nil { + return d.delegate, nil + } + + groupResources, err := GetAPIGroupResources(d.cl) + if err != nil { + return nil, err + } + + d.delegate = NewRESTMapper(groupResources, d.versionInterface) + return d.delegate, err +} + +// Reset resets the internally cached Discovery information and will +// cause the next mapping request to re-discover. +func (d *DeferredDiscoveryRESTMapper) Reset() { + d.initMu.Lock() + d.delegate = nil + d.initMu.Unlock() +} + +// KindFor takes a partial resource and returns back the single match. +// It returns an error if there are multiple matches. +func (d *DeferredDiscoveryRESTMapper) KindFor(resource unversioned.GroupVersionResource) (unversioned.GroupVersionKind, error) { + del, err := d.getDelegate() + if err != nil { + return unversioned.GroupVersionKind{}, err + } + return del.KindFor(resource) +} + +// KindsFor takes a partial resource and returns back the list of +// potential kinds in priority order. +func (d *DeferredDiscoveryRESTMapper) KindsFor(resource unversioned.GroupVersionResource) ([]unversioned.GroupVersionKind, error) { + del, err := d.getDelegate() + if err != nil { + return nil, err + } + return del.KindsFor(resource) +} + +// ResourceFor takes a partial resource and returns back the single +// match. It returns an error if there are multiple matches. +func (d *DeferredDiscoveryRESTMapper) ResourceFor(input unversioned.GroupVersionResource) (unversioned.GroupVersionResource, error) { + del, err := d.getDelegate() + if err != nil { + return unversioned.GroupVersionResource{}, err + } + return del.ResourceFor(input) +} + +// ResourcesFor takes a partial resource and returns back the list of +// potential resource in priority order. +func (d *DeferredDiscoveryRESTMapper) ResourcesFor(input unversioned.GroupVersionResource) ([]unversioned.GroupVersionResource, error) { + del, err := d.getDelegate() + if err != nil { + return nil, err + } + return del.ResourcesFor(input) +} + +// RESTMapping identifies a preferred resource mapping for the +// provided group kind. +func (d *DeferredDiscoveryRESTMapper) RESTMapping(gk unversioned.GroupKind, versions ...string) (*meta.RESTMapping, error) { + del, err := d.getDelegate() + if err != nil { + return nil, err + } + return del.RESTMapping(gk, versions...) +} + +// RESTMappings returns the RESTMappings for the provided group kind +// in a rough internal preferred order. If no kind is found, it will +// return a NoResourceMatchError. +func (d *DeferredDiscoveryRESTMapper) RESTMappings(gk unversioned.GroupKind) ([]*meta.RESTMapping, error) { + del, err := d.getDelegate() + if err != nil { + return nil, err + } + return del.RESTMappings(gk) +} + +// AliasesForResource returns whether a resource has an alias or not. +func (d *DeferredDiscoveryRESTMapper) AliasesForResource(resource string) ([]string, bool) { + del, err := d.getDelegate() + if err != nil { + return nil, false + } + return del.AliasesForResource(resource) +} + +// ResourceSingularizer converts a resource name from plural to +// singular (e.g., from pods to pod). +func (d *DeferredDiscoveryRESTMapper) ResourceSingularizer(resource string) (singular string, err error) { + del, err := d.getDelegate() + if err != nil { + return resource, err + } + return del.ResourceSingularizer(resource) +} + +// Make sure it satisfies the interface +var _ meta.RESTMapper = &DeferredDiscoveryRESTMapper{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/unstructured.go b/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/unstructured.go new file mode 100644 index 00000000..afa74e7d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/typed/discovery/unstructured.go @@ -0,0 +1,95 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package discovery + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" +) + +// UnstructuredObjectTyper provides a runtime.ObjectTyper implmentation for +// runtime.Unstructured object based on discovery information. +type UnstructuredObjectTyper struct { + registered map[unversioned.GroupVersionKind]bool +} + +// NewUnstructuredObjectTyper returns a runtime.ObjectTyper for +// unstructred objects based on discovery information. +func NewUnstructuredObjectTyper(groupResources []*APIGroupResources) *UnstructuredObjectTyper { + dot := &UnstructuredObjectTyper{registered: make(map[unversioned.GroupVersionKind]bool)} + for _, group := range groupResources { + for _, discoveryVersion := range group.Group.Versions { + resources, ok := group.VersionedResources[discoveryVersion.Version] + if !ok { + continue + } + + gv := unversioned.GroupVersion{Group: group.Group.Name, Version: discoveryVersion.Version} + for _, resource := range resources { + dot.registered[gv.WithKind(resource.Kind)] = true + } + } + } + return dot +} + +// ObjectKind returns the group,version,kind of the provided object, or an error +// if the object in not *runtime.Unstructured or has no group,version,kind +// information. +func (d *UnstructuredObjectTyper) ObjectKind(obj runtime.Object) (unversioned.GroupVersionKind, error) { + if _, ok := obj.(*runtime.Unstructured); !ok { + return unversioned.GroupVersionKind{}, fmt.Errorf("type %T is invalid for dynamic object typer", obj) + } + + return obj.GetObjectKind().GroupVersionKind(), nil +} + +// ObjectKinds returns a slice of one element with the group,version,kind of the +// provided object, or an error if the object is not *runtime.Unstructured or +// has no group,version,kind information. unversionedType will always be false +// because runtime.Unstructured object should always have group,version,kind +// information set. +func (d *UnstructuredObjectTyper) ObjectKinds(obj runtime.Object) (gvks []unversioned.GroupVersionKind, unversionedType bool, err error) { + gvk, err := d.ObjectKind(obj) + if err != nil { + return nil, false, err + } + + return []unversioned.GroupVersionKind{gvk}, false, nil +} + +// Recognizes returns true if the provided group,version,kind was in the +// discovery information. +func (d *UnstructuredObjectTyper) Recognizes(gvk unversioned.GroupVersionKind) bool { + return d.registered[gvk] +} + +// IsUnversioned returns false always because *runtime.Unstructured objects +// should always have group,version,kind information set. ok will be true if the +// object's group,version,kind is registered. +func (d *UnstructuredObjectTyper) IsUnversioned(obj runtime.Object) (unversioned bool, ok bool) { + gvk, err := d.ObjectKind(obj) + if err != nil { + return false, false + } + + return false, d.registered[gvk] +} + +var _ runtime.ObjectTyper = &UnstructuredObjectTyper{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/client.go b/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/client.go new file mode 100644 index 00000000..1565261c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/client.go @@ -0,0 +1,289 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package dynamic provides a client interface to arbitrary Kubernetes +// APIs that exposes common high level operations and exposes common +// metadata. +package dynamic + +import ( + "encoding/json" + "errors" + "io" + "net/url" + "strings" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/client/restclient" + "k8s.io/kubernetes/pkg/conversion/queryparams" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/runtime/serializer" + "k8s.io/kubernetes/pkg/util/flowcontrol" + "k8s.io/kubernetes/pkg/watch" +) + +// Client is a Kubernetes client that allows you to access metadata +// and manipulate metadata of a Kubernetes API group. +type Client struct { + cl *restclient.RESTClient + parameterCodec runtime.ParameterCodec +} + +// NewClient returns a new client based on the passed in config. The +// codec is ignored, as the dynamic client uses it's own codec. +func NewClient(conf *restclient.Config) (*Client, error) { + // avoid changing the original config + confCopy := *conf + conf = &confCopy + + contentConfig := ContentConfig() + contentConfig.GroupVersion = conf.GroupVersion + if conf.NegotiatedSerializer != nil { + contentConfig.NegotiatedSerializer = conf.NegotiatedSerializer + } + conf.ContentConfig = contentConfig + + if conf.APIPath == "" { + conf.APIPath = "/api" + } + + if len(conf.UserAgent) == 0 { + conf.UserAgent = restclient.DefaultKubernetesUserAgent() + } + + cl, err := restclient.RESTClientFor(conf) + if err != nil { + return nil, err + } + + return &Client{cl: cl}, nil +} + +// GetRateLimiter returns rate limier. +func (c *Client) GetRateLimiter() flowcontrol.RateLimiter { + return c.cl.GetRateLimiter() +} + +// Resource returns an API interface to the specified resource for this client's +// group and version. If resource is not a namespaced resource, then namespace +// is ignored. The ResourceClient inherits the parameter codec of c. +func (c *Client) Resource(resource *unversioned.APIResource, namespace string) *ResourceClient { + return &ResourceClient{ + cl: c.cl, + resource: resource, + ns: namespace, + parameterCodec: c.parameterCodec, + } +} + +// ParameterCodec returns a client with the provided parameter codec. +func (c *Client) ParameterCodec(parameterCodec runtime.ParameterCodec) *Client { + return &Client{ + cl: c.cl, + parameterCodec: parameterCodec, + } +} + +// ResourceClient is an API interface to a specific resource under a +// dynamic client. +type ResourceClient struct { + cl *restclient.RESTClient + resource *unversioned.APIResource + ns string + parameterCodec runtime.ParameterCodec +} + +// List returns a list of objects for this resource. +func (rc *ResourceClient) List(opts runtime.Object) (runtime.Object, error) { + parameterEncoder := rc.parameterCodec + if parameterEncoder == nil { + parameterEncoder = defaultParameterEncoder + } + return rc.cl.Get(). + NamespaceIfScoped(rc.ns, rc.resource.Namespaced). + Resource(rc.resource.Name). + VersionedParams(opts, parameterEncoder). + Do(). + Get() +} + +// Get gets the resource with the specified name. +func (rc *ResourceClient) Get(name string) (*runtime.Unstructured, error) { + result := new(runtime.Unstructured) + err := rc.cl.Get(). + NamespaceIfScoped(rc.ns, rc.resource.Namespaced). + Resource(rc.resource.Name). + Name(name). + Do(). + Into(result) + return result, err +} + +// Delete deletes the resource with the specified name. +func (rc *ResourceClient) Delete(name string, opts *v1.DeleteOptions) error { + return rc.cl.Delete(). + NamespaceIfScoped(rc.ns, rc.resource.Namespaced). + Resource(rc.resource.Name). + Name(name). + Body(opts). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (rc *ResourceClient) DeleteCollection(deleteOptions *v1.DeleteOptions, listOptions runtime.Object) error { + parameterEncoder := rc.parameterCodec + if parameterEncoder == nil { + parameterEncoder = defaultParameterEncoder + } + return rc.cl.Delete(). + NamespaceIfScoped(rc.ns, rc.resource.Namespaced). + Resource(rc.resource.Name). + VersionedParams(listOptions, parameterEncoder). + Body(deleteOptions). + Do(). + Error() +} + +// Create creates the provided resource. +func (rc *ResourceClient) Create(obj *runtime.Unstructured) (*runtime.Unstructured, error) { + result := new(runtime.Unstructured) + err := rc.cl.Post(). + NamespaceIfScoped(rc.ns, rc.resource.Namespaced). + Resource(rc.resource.Name). + Body(obj). + Do(). + Into(result) + return result, err +} + +// Update updates the provided resource. +func (rc *ResourceClient) Update(obj *runtime.Unstructured) (*runtime.Unstructured, error) { + result := new(runtime.Unstructured) + if len(obj.GetName()) == 0 { + return result, errors.New("object missing name") + } + err := rc.cl.Put(). + NamespaceIfScoped(rc.ns, rc.resource.Namespaced). + Resource(rc.resource.Name). + Name(obj.GetName()). + Body(obj). + Do(). + Into(result) + return result, err +} + +// Watch returns a watch.Interface that watches the resource. +func (rc *ResourceClient) Watch(opts runtime.Object) (watch.Interface, error) { + parameterEncoder := rc.parameterCodec + if parameterEncoder == nil { + parameterEncoder = defaultParameterEncoder + } + return rc.cl.Get(). + Prefix("watch"). + NamespaceIfScoped(rc.ns, rc.resource.Namespaced). + Resource(rc.resource.Name). + VersionedParams(opts, parameterEncoder). + Watch() +} + +func (rc *ResourceClient) Patch(name string, pt api.PatchType, data []byte) (*runtime.Unstructured, error) { + result := new(runtime.Unstructured) + err := rc.cl.Patch(pt). + NamespaceIfScoped(rc.ns, rc.resource.Namespaced). + Resource(rc.resource.Name). + Name(name). + Body(data). + Do(). + Into(result) + return result, err +} + +// dynamicCodec is a codec that wraps the standard unstructured codec +// with special handling for Status objects. +type dynamicCodec struct{} + +func (dynamicCodec) Decode(data []byte, gvk *unversioned.GroupVersionKind, obj runtime.Object) (runtime.Object, *unversioned.GroupVersionKind, error) { + obj, gvk, err := runtime.UnstructuredJSONScheme.Decode(data, gvk, obj) + if err != nil { + return nil, nil, err + } + + if _, ok := obj.(*unversioned.Status); !ok && strings.ToLower(gvk.Kind) == "status" { + obj = &unversioned.Status{} + err := json.Unmarshal(data, obj) + if err != nil { + return nil, nil, err + } + } + + return obj, gvk, nil +} + +func (dynamicCodec) Encode(obj runtime.Object, w io.Writer) error { + return runtime.UnstructuredJSONScheme.Encode(obj, w) +} + +// ContentConfig returns a restclient.ContentConfig for dynamic types. +func ContentConfig() restclient.ContentConfig { + // TODO: it's questionable that this should be using anything other than unstructured schema and JSON + codec := dynamicCodec{} + streamingInfo, _ := api.Codecs.StreamingSerializerForMediaType("application/json;stream=watch", nil) + return restclient.ContentConfig{ + AcceptContentTypes: runtime.ContentTypeJSON, + ContentType: runtime.ContentTypeJSON, + NegotiatedSerializer: serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: codec}, streamingInfo), + } +} + +// paramaterCodec is a codec converts an API object to query +// parameters without trying to convert to the target version. +type parameterCodec struct{} + +func (parameterCodec) EncodeParameters(obj runtime.Object, to unversioned.GroupVersion) (url.Values, error) { + return queryparams.Convert(obj) +} + +func (parameterCodec) DecodeParameters(parameters url.Values, from unversioned.GroupVersion, into runtime.Object) error { + return errors.New("DecodeParameters not implemented on dynamic parameterCodec") +} + +var defaultParameterEncoder runtime.ParameterCodec = parameterCodec{} + +type versionedParameterEncoderWithV1Fallback struct{} + +func (versionedParameterEncoderWithV1Fallback) EncodeParameters(obj runtime.Object, to unversioned.GroupVersion) (url.Values, error) { + ret, err := api.ParameterCodec.EncodeParameters(obj, to) + if err != nil && runtime.IsNotRegisteredError(err) { + // fallback to v1 + return api.ParameterCodec.EncodeParameters(obj, v1.SchemeGroupVersion) + } + return ret, err +} + +func (versionedParameterEncoderWithV1Fallback) DecodeParameters(parameters url.Values, from unversioned.GroupVersion, into runtime.Object) error { + return errors.New("DecodeParameters not implemented on versionedParameterEncoderWithV1Fallback") +} + +// VersionedParameterEncoderWithV1Fallback is useful for encoding query +// parameters for thirdparty resources. It tries to convert object to the +// specified version before converting it to query parameters, and falls back to +// converting to v1 if the object is not registered in the specified version. +// For the record, currently API server always treats query parameters sent to a +// thirdparty resource endpoint as v1. +var VersionedParameterEncoderWithV1Fallback runtime.ParameterCodec = versionedParameterEncoderWithV1Fallback{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/client_pool.go b/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/client_pool.go new file mode 100644 index 00000000..66a50e0b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/client_pool.go @@ -0,0 +1,95 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dynamic + +import ( + "sync" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/client/restclient" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/runtime/serializer" +) + +// ClientPool manages a pool of dynamic clients. +type ClientPool interface { + // ClientForGroupVersion returns a client configured for the specified groupVersion. + ClientForGroupVersion(groupVersion unversioned.GroupVersion) (*Client, error) +} + +// APIPathResolverFunc knows how to convert a groupVersion to its API path. +type APIPathResolverFunc func(groupVersion unversioned.GroupVersion) string + +// LegacyAPIPathResolverFunc can resolve paths properly with the legacy API. +func LegacyAPIPathResolverFunc(groupVersion unversioned.GroupVersion) string { + if len(groupVersion.Group) == 0 { + return "/api" + } + return "/apis" +} + +// clientPoolImpl implements Factory +type clientPoolImpl struct { + lock sync.RWMutex + config *restclient.Config + clients map[unversioned.GroupVersion]*Client + apiPathResolverFunc APIPathResolverFunc +} + +// NewClientPool returns a ClientPool from the specified config +func NewClientPool(config *restclient.Config, apiPathResolverFunc APIPathResolverFunc) ClientPool { + confCopy := *config + return &clientPoolImpl{ + config: &confCopy, + clients: map[unversioned.GroupVersion]*Client{}, + apiPathResolverFunc: apiPathResolverFunc, + } +} + +// ClientForGroupVersion returns a client for the specified groupVersion, creates one if none exists +func (c *clientPoolImpl) ClientForGroupVersion(groupVersion unversioned.GroupVersion) (*Client, error) { + c.lock.Lock() + defer c.lock.Unlock() + + // do we have a client already configured? + if existingClient, found := c.clients[groupVersion]; found { + return existingClient, nil + } + + // avoid changing the original config + confCopy := *c.config + conf := &confCopy + + // we need to set the api path based on group version, if no group, default to legacy path + conf.APIPath = c.apiPathResolverFunc(groupVersion) + + // we need to make a client + conf.GroupVersion = &groupVersion + + if conf.NegotiatedSerializer == nil { + streamingInfo, _ := api.Codecs.StreamingSerializerForMediaType("application/json;stream=watch", nil) + conf.NegotiatedSerializer = serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: dynamicCodec{}}, streamingInfo) + } + + dynamicClient, err := NewClient(conf) + if err != nil { + return nil, err + } + c.clients[groupVersion] = dynamicClient + return dynamicClient, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/dynamic_util.go b/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/dynamic_util.go new file mode 100644 index 00000000..4ffe313e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/typed/dynamic/dynamic_util.go @@ -0,0 +1,94 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package dynamic + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" +) + +// VersionInterfaces provides an object converter and metadata +// accessor appropriate for use with unstructured objects. +func VersionInterfaces(unversioned.GroupVersion) (*meta.VersionInterfaces, error) { + return &meta.VersionInterfaces{ + ObjectConvertor: &runtime.UnstructuredObjectConverter{}, + MetadataAccessor: meta.NewAccessor(), + }, nil +} + +// NewDiscoveryRESTMapper returns a RESTMapper based on discovery information. +func NewDiscoveryRESTMapper(resources []*unversioned.APIResourceList, versionFunc meta.VersionInterfacesFunc) (*meta.DefaultRESTMapper, error) { + rm := meta.NewDefaultRESTMapper(nil, versionFunc) + for _, resourceList := range resources { + gv, err := unversioned.ParseGroupVersion(resourceList.GroupVersion) + if err != nil { + return nil, err + } + + for _, resource := range resourceList.APIResources { + gvk := gv.WithKind(resource.Kind) + scope := meta.RESTScopeRoot + if resource.Namespaced { + scope = meta.RESTScopeNamespace + } + rm.Add(gvk, scope) + } + } + return rm, nil +} + +// ObjectTyper provides an ObjectTyper implementation for +// runtime.Unstructured object based on discovery information. +type ObjectTyper struct { + registered map[unversioned.GroupVersionKind]bool +} + +// NewObjectTyper constructs an ObjectTyper from discovery information. +func NewObjectTyper(resources []*unversioned.APIResourceList) (runtime.ObjectTyper, error) { + ot := &ObjectTyper{registered: make(map[unversioned.GroupVersionKind]bool)} + for _, resourceList := range resources { + gv, err := unversioned.ParseGroupVersion(resourceList.GroupVersion) + if err != nil { + return nil, err + } + + for _, resource := range resourceList.APIResources { + ot.registered[gv.WithKind(resource.Kind)] = true + } + } + return ot, nil +} + +// ObjectKinds returns a slice of one element with the +// group,version,kind of the provided object, or an error if the +// object is not *runtime.Unstructured or has no group,version,kind +// information. +func (ot *ObjectTyper) ObjectKinds(obj runtime.Object) ([]unversioned.GroupVersionKind, bool, error) { + if _, ok := obj.(*runtime.Unstructured); !ok { + return nil, false, fmt.Errorf("type %T is invalid for dynamic object typer", obj) + } + return []unversioned.GroupVersionKind{obj.GetObjectKind().GroupVersionKind()}, false, nil +} + +// Recognizes returns true if the provided group,version,kind was in +// the discovery information. +func (ot *ObjectTyper) Recognizes(gvk unversioned.GroupVersionKind) bool { + return ot.registered[gvk] +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/adapters/internalclientset/clientset_adaption.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/adapters/internalclientset/clientset_adaption.go index 7e6dee0c..b9b348d7 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/adapters/internalclientset/clientset_adaption.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/adapters/internalclientset/clientset_adaption.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,10 +18,13 @@ package internalclientset import ( "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + unversionedauthentication "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authentication/unversioned" + unversionedauthorization "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/authorization/unversioned" unversionedautoscaling "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/autoscaling/unversioned" unversionedbatch "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/batch/unversioned" unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned" unversionedextensions "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/extensions/unversioned" + unversionedstorage "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/storage/unversioned" "k8s.io/kubernetes/pkg/client/typed/discovery" "k8s.io/kubernetes/pkg/client/unversioned" ) @@ -46,16 +49,31 @@ func FromUnversionedClient(c *unversioned.Client) *internalclientset.Clientset { } else { clientset.BatchClient = unversionedbatch.New(nil) } + if c != nil && c.AuthorizationClient != nil { + clientset.AuthorizationClient = unversionedauthorization.New(c.AuthorizationClient.RESTClient) + } else { + clientset.AuthorizationClient = unversionedauthorization.New(nil) + } if c != nil && c.AutoscalingClient != nil { clientset.AutoscalingClient = unversionedautoscaling.New(c.AutoscalingClient.RESTClient) } else { clientset.AutoscalingClient = unversionedautoscaling.New(nil) } + if c != nil && c.AuthenticationClient != nil { + clientset.AuthenticationClient = unversionedauthentication.New(c.AuthenticationClient.RESTClient) + } else { + clientset.AuthenticationClient = unversionedauthentication.New(nil) + } if c != nil && c.DiscoveryClient != nil { clientset.DiscoveryClient = discovery.NewDiscoveryClient(c.DiscoveryClient.RESTClient) } else { clientset.DiscoveryClient = discovery.NewDiscoveryClient(nil) } + if c != nil && c.StorageClient != nil { + clientset.StorageClient = unversionedstorage.New(c.StorageClient.RESTClient) + } else { + clientset.StorageClient = unversionedstorage.New(nil) + } return &clientset } diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/apps.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/apps.go index 1905c29c..413c2a44 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/apps.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/apps.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ limitations under the License. package unversioned import ( - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/client/restclient" ) @@ -38,7 +36,7 @@ func (c *AppsClient) PetSets(namespace string) PetSetInterface { func NewApps(c *restclient.Config) (*AppsClient, error) { config := *c - if err := setAppsDefaults(&config); err != nil { + if err := setGroupDefaults(apps.GroupName, &config); err != nil { return nil, err } client, err := restclient.RESTClientFor(&config) @@ -55,29 +53,3 @@ func NewAppsOrDie(c *restclient.Config) *AppsClient { } return client } - -func setAppsDefaults(config *restclient.Config) error { - g, err := registered.Group(apps.GroupName) - if err != nil { - return err - } - config.APIPath = defaultAPIPath - if config.UserAgent == "" { - config.UserAgent = restclient.DefaultKubernetesUserAgent() - } - // TODO: Unconditionally set the config.Version, until we fix the config. - //if config.Version == "" { - copyGroupVersion := g.GroupVersion - config.GroupVersion = ©GroupVersion - //} - - config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) - config.NegotiatedSerializer = api.Codecs - if config.QPS == 0 { - config.QPS = 5 - } - if config.Burst == 0 { - config.Burst = 10 - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/auth/clientauth.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/auth/clientauth.go index 64b3ef6b..128597f9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/auth/clientauth.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/auth/clientauth.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/authentication.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/authentication.go new file mode 100644 index 00000000..6ac7f949 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/authentication.go @@ -0,0 +1,77 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/apis/authentication" + "k8s.io/kubernetes/pkg/client/restclient" +) + +type AuthenticationInterface interface { + TokenReviewsInterface +} + +// AuthenticationClient is used to interact with Kubernetes authentication features. +type AuthenticationClient struct { + *restclient.RESTClient +} + +func (c *AuthenticationClient) TokenReviews() TokenReviewInterface { + return newTokenReviews(c) +} + +func NewAuthentication(c *restclient.Config) (*AuthenticationClient, error) { + config := *c + if err := setAuthenticationDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AuthenticationClient{client}, nil +} + +func NewAuthenticationOrDie(c *restclient.Config) *AuthenticationClient { + client, err := NewAuthentication(c) + if err != nil { + panic(err) + } + return client +} + +func setAuthenticationDefaults(config *restclient.Config) error { + // if authentication group is not registered, return an error + g, err := registered.Group(authentication.GroupName) + if err != nil { + return err + } + config.APIPath = defaultAPIPath + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + // TODO: Unconditionally set the config.Version, until we fix the config. + //if config.Version == "" { + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + //} + + config.NegotiatedSerializer = api.Codecs + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/authorization.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/authorization.go new file mode 100644 index 00000000..beba40dc --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/authorization.go @@ -0,0 +1,77 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/apis/authorization" + "k8s.io/kubernetes/pkg/client/restclient" +) + +type AuthorizationInterface interface { + SubjectAccessReviewsInterface +} + +// AuthorizationClient is used to interact with Kubernetes authorization features. +type AuthorizationClient struct { + *restclient.RESTClient +} + +func (c *AuthorizationClient) SubjectAccessReviews() SubjectAccessReviewInterface { + return newSubjectAccessReviews(c) +} + +func NewAuthorization(c *restclient.Config) (*AuthorizationClient, error) { + config := *c + if err := setAuthorizationDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AuthorizationClient{client}, nil +} + +func NewAuthorizationOrDie(c *restclient.Config) *AuthorizationClient { + client, err := NewAuthorization(c) + if err != nil { + panic(err) + } + return client +} + +func setAuthorizationDefaults(config *restclient.Config) error { + // if authorization group is not registered, return an error + g, err := registered.Group(authorization.GroupName) + if err != nil { + return err + } + config.APIPath = defaultAPIPath + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + // TODO: Unconditionally set the config.Version, until we fix the config. + //if config.Version == "" { + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + //} + + config.NegotiatedSerializer = api.Codecs + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/autoscaling.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/autoscaling.go index 9e543c9d..e53d23d8 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/autoscaling.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/autoscaling.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ limitations under the License. package unversioned import ( - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/client/restclient" ) @@ -38,7 +36,7 @@ func (c *AutoscalingClient) HorizontalPodAutoscalers(namespace string) Horizonta func NewAutoscaling(c *restclient.Config) (*AutoscalingClient, error) { config := *c - if err := setAutoscalingDefaults(&config); err != nil { + if err := setGroupDefaults(autoscaling.GroupName, &config); err != nil { return nil, err } client, err := restclient.RESTClientFor(&config) @@ -55,30 +53,3 @@ func NewAutoscalingOrDie(c *restclient.Config) *AutoscalingClient { } return client } - -func setAutoscalingDefaults(config *restclient.Config) error { - // if autoscaling group is not registered, return an error - g, err := registered.Group(autoscaling.GroupName) - if err != nil { - return err - } - config.APIPath = defaultAPIPath - if config.UserAgent == "" { - config.UserAgent = restclient.DefaultKubernetesUserAgent() - } - // TODO: Unconditionally set the config.Version, until we fix the config. - //if config.Version == "" { - copyGroupVersion := g.GroupVersion - config.GroupVersion = ©GroupVersion - //} - - config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) - config.NegotiatedSerializer = api.Codecs - if config.QPS == 0 { - config.QPS = 5 - } - if config.Burst == 0 { - config.Burst = 10 - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/batch.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/batch.go index 40fc49dc..0957424a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/batch.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/batch.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,11 +17,7 @@ limitations under the License. package unversioned import ( - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/batch" - "k8s.io/kubernetes/pkg/apis/batch/v2alpha1" "k8s.io/kubernetes/pkg/client/restclient" ) @@ -45,19 +41,7 @@ func (c *BatchClient) ScheduledJobs(namespace string) ScheduledJobInterface { func NewBatch(c *restclient.Config) (*BatchClient, error) { config := *c - if err := setBatchDefaults(&config, nil); err != nil { - return nil, err - } - client, err := restclient.RESTClientFor(&config) - if err != nil { - return nil, err - } - return &BatchClient{client}, nil -} - -func NewBatchV2Alpha1(c *restclient.Config) (*BatchClient, error) { - config := *c - if err := setBatchDefaults(&config, &v2alpha1.SchemeGroupVersion); err != nil { + if err := setGroupDefaults(batch.GroupName, &config); err != nil { return nil, err } client, err := restclient.RESTClientFor(&config) @@ -68,47 +52,9 @@ func NewBatchV2Alpha1(c *restclient.Config) (*BatchClient, error) { } func NewBatchOrDie(c *restclient.Config) *BatchClient { - var ( - client *BatchClient - err error - ) - if c.ContentConfig.GroupVersion != nil && *c.ContentConfig.GroupVersion == v2alpha1.SchemeGroupVersion { - client, err = NewBatchV2Alpha1(c) - } else { - client, err = NewBatch(c) - } + client, err := NewBatch(c) if err != nil { panic(err) } return client } - -func setBatchDefaults(config *restclient.Config, gv *unversioned.GroupVersion) error { - // if batch group is not registered, return an error - g, err := registered.Group(batch.GroupName) - if err != nil { - return err - } - config.APIPath = defaultAPIPath - if config.UserAgent == "" { - config.UserAgent = restclient.DefaultKubernetesUserAgent() - } - // TODO: Unconditionally set the config.Version, until we fix the config. - //if config.Version == "" { - copyGroupVersion := g.GroupVersion - if gv != nil { - copyGroupVersion = *gv - } - config.GroupVersion = ©GroupVersion - //} - - config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) - config.NegotiatedSerializer = api.Codecs - if config.QPS == 0 { - config.QPS = 5 - } - if config.Burst == 0 { - config.Burst = 10 - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/certificates.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/certificates.go new file mode 100644 index 00000000..273b957f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/certificates.go @@ -0,0 +1,69 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "k8s.io/kubernetes/pkg/apis/certificates" + "k8s.io/kubernetes/pkg/client/restclient" +) + +// Interface holds the methods for clients of Kubernetes to allow mock testing. +type CertificatesInterface interface { + CertificateSigningRequests() CertificateSigningRequestInterface +} + +type CertificatesClient struct { + *restclient.RESTClient +} + +func (c *CertificatesClient) CertificateSigningRequests() CertificateSigningRequestInterface { + return newCertificateSigningRequests(c) +} + +// NewCertificates creates a new CertificatesClient for the given config. +func NewCertificates(c *restclient.Config) (*CertificatesClient, error) { + config := *c + if err := setCertificatesDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &CertificatesClient{client}, nil +} + +// NewCertificatesOrDie creates a new CertificatesClient for the given config and +// panics if there is an error in the config. +func NewCertificatesOrDie(c *restclient.Config) *CertificatesClient { + client, err := NewCertificates(c) + if err != nil { + panic(err) + } + return client +} + +func setCertificatesDefaults(config *restclient.Config) error { + setGroupDefaults(certificates.GroupName, config) + if config.QPS == 0 { + config.QPS = 5 + } + if config.Burst == 0 { + config.Burst = 10 + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/certificatesigningrequests.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/certificatesigningrequests.go new file mode 100644 index 00000000..f3ce09fc --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/certificatesigningrequests.go @@ -0,0 +1,104 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apis/certificates" + "k8s.io/kubernetes/pkg/watch" +) + +// CertificateSigningRequestInterface has methods to work with CertificateSigningRequest resources. +type CertificateSigningRequestInterface interface { + List(opts api.ListOptions) (*certificates.CertificateSigningRequestList, error) + Get(name string) (*certificates.CertificateSigningRequest, error) + Delete(name string, options *api.DeleteOptions) error + Create(certificateSigningRequest *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, error) + Update(certificateSigningRequest *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, error) + UpdateStatus(certificateSigningRequest *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, error) + UpdateApproval(certificateSigningRequest *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, error) + Watch(opts api.ListOptions) (watch.Interface, error) +} + +// certificateSigningRequests implements CertificateSigningRequestsNamespacer interface +type certificateSigningRequests struct { + client *CertificatesClient +} + +// newCertificateSigningRequests returns a certificateSigningRequests +func newCertificateSigningRequests(c *CertificatesClient) *certificateSigningRequests { + return &certificateSigningRequests{ + client: c, + } +} + +// List takes label and field selectors, and returns the list of certificateSigningRequests that match those selectors. +func (c *certificateSigningRequests) List(opts api.ListOptions) (result *certificates.CertificateSigningRequestList, err error) { + result = &certificates.CertificateSigningRequestList{} + err = c.client.Get().Resource("certificatesigningrequests").VersionedParams(&opts, api.ParameterCodec).Do().Into(result) + return +} + +// Get takes the name of the certificateSigningRequest, and returns the corresponding CertificateSigningRequest object, and an error if it occurs +func (c *certificateSigningRequests) Get(name string) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Get().Resource("certificatesigningrequests").Name(name).Do().Into(result) + return +} + +// Delete takes the name of the certificateSigningRequest and deletes it. Returns an error if one occurs. +func (c *certificateSigningRequests) Delete(name string, options *api.DeleteOptions) error { + return c.client.Delete().Resource("certificatesigningrequests").Name(name).Body(options).Do().Error() +} + +// Create takes the representation of a certificateSigningRequest and creates it. Returns the server's representation of the certificateSigningRequest, and an error, if it occurs. +func (c *certificateSigningRequests) Create(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Post().Resource("certificatesigningrequests").Body(certificateSigningRequest).Do().Into(result) + return +} + +// Update takes the representation of a certificateSigningRequest and updates it. Returns the server's representation of the certificateSigningRequest, and an error, if it occurs. +func (c *certificateSigningRequests) Update(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Put().Resource("certificatesigningrequests").Name(certificateSigningRequest.Name).Body(certificateSigningRequest).Do().Into(result) + return +} + +// UpdateStatus takes the representation of a certificateSigningRequest and updates it. Returns the server's representation of the certificateSigningRequest, and an error, if it occurs. +func (c *certificateSigningRequests) UpdateStatus(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Put().Resource("certificatesigningrequests").Name(certificateSigningRequest.Name).SubResource("status").Body(certificateSigningRequest).Do().Into(result) + return +} + +// UpdateApproval takes the representation of a certificateSigningRequest and updates it. Returns the server's representation of the certificateSigningRequest, and an error, if it occurs. +func (c *certificateSigningRequests) UpdateApproval(certificateSigningRequest *certificates.CertificateSigningRequest) (result *certificates.CertificateSigningRequest, err error) { + result = &certificates.CertificateSigningRequest{} + err = c.client.Put().Resource("certificatesigningrequests").Name(certificateSigningRequest.Name).SubResource("approval").Body(certificateSigningRequest).Do().Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested certificateSigningRequests. +func (c *certificateSigningRequests) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Namespace(api.NamespaceAll). + Resource("certificatesigningrequests"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/client.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/client.go index 183bb5f0..168a5851 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/client.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/client.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -44,11 +44,16 @@ type Interface interface { PersistentVolumeClaimsNamespacer ComponentStatusesInterface ConfigMapsNamespacer + Apps() AppsInterface + Authorization() AuthorizationInterface Autoscaling() AutoscalingInterface + Authentication() AuthenticationInterface Batch() BatchInterface Extensions() ExtensionsInterface Rbac() RbacInterface Discovery() discovery.DiscoveryInterface + Certificates() CertificatesInterface + Storage() StorageInterface SecurityContextConstraintsInterface } @@ -123,13 +128,17 @@ func (c *Client) ConfigMaps(namespace string) ConfigMapsInterface { // Client is the implementation of a Kubernetes client. type Client struct { *restclient.RESTClient + *AuthorizationClient *AutoscalingClient + *AuthenticationClient *BatchClient *ExtensionsClient *AppsClient *PolicyClient *RbacClient *discovery.DiscoveryClient + *CertificatesClient + *StorageClient } // IsTimeout tests if this is a timeout error in the underlying transport. @@ -154,10 +163,18 @@ func IsTimeout(err error) bool { return false } +func (c *Client) Authorization() AuthorizationInterface { + return c.AuthorizationClient +} + func (c *Client) Autoscaling() AutoscalingInterface { return c.AutoscalingClient } +func (c *Client) Authentication() AuthenticationInterface { + return c.AuthenticationClient +} + func (c *Client) Batch() BatchInterface { return c.BatchClient } @@ -174,6 +191,18 @@ func (c *Client) Rbac() RbacInterface { return c.RbacClient } +func (c *Client) Policy() PolicyInterface { + return c.PolicyClient +} + func (c *Client) Discovery() discovery.DiscoveryInterface { return c.DiscoveryClient } + +func (c *Client) Certificates() CertificatesInterface { + return c.CertificatesClient +} + +func (c *Client) Storage() StorageInterface { + return c.StorageClient +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/helpers.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/helpers.go index 87330c50..43e26487 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/helpers.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest/latest.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest/latest.go index f3083a84..a32b251c 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest/latest.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/latest/latest.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ package latest import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" - _ "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1" + "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/runtime/serializer/json" "k8s.io/kubernetes/pkg/runtime/serializer/versioning" @@ -40,12 +40,24 @@ const OldestVersion = "v1" // with a set of versions to choose. var Versions = []string{"v1"} -var Codec runtime.Codec +var ( + Codec runtime.Codec + Scheme *runtime.Scheme +) func init() { - yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, api.Scheme, api.Scheme) + Scheme = runtime.NewScheme() + if err := api.AddToScheme(Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } + if err := v1.AddToScheme(Scheme); err != nil { + // Programmer error, detect immediately + panic(err) + } + yamlSerializer := json.NewYAMLSerializer(json.DefaultMetaFactory, Scheme, Scheme) Codec = versioning.NewCodecForScheme( - api.Scheme, + Scheme, yamlSerializer, yamlSerializer, unversioned.GroupVersion{Version: Version}, diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/register.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/register.go index f26a6cd1..9c4c0f1d 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/register.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/register.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,17 +21,20 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -// Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. -var Scheme = runtime.NewScheme() - // SchemeGroupVersion is group version used to register these objects // TODO this should be in the "kubeconfig" group var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: runtime.APIVersionInternal} -func init() { - Scheme.AddKnownTypes(SchemeGroupVersion, +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, &Config{}, ) + return nil } func (obj *Config) GetObjectKind() unversioned.ObjectKind { return obj } diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/types.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/types.go index 56b44e8f..9fd52e44 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/types.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/types.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -88,6 +88,8 @@ type AuthInfo struct { ClientKeyData []byte `json:"client-key-data,omitempty"` // Token is the bearer token for authentication to the kubernetes cluster. Token string `json:"token,omitempty"` + // TokenFile is a pointer to a file that contains a bearer token (as described above). If both Token and TokenFile are present, Token takes precedence. + TokenFile string `json:"tokenFile,omitempty"` // Impersonate is the username to act-as. Impersonate string `json:"act-as,omitempty"` // Username is the username for basic authentication to the kubernetes cluster. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/conversion.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/conversion.go index e03fc60b..f21072e3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ import ( "k8s.io/kubernetes/pkg/runtime" ) -func init() { - err := api.Scheme.AddConversionFuncs( +func addConversionFuncs(scheme *runtime.Scheme) error { + return scheme.AddConversionFuncs( func(in *Cluster, out *api.Cluster, s conversion.Scope) error { return s.DefaultConvert(in, out, conversion.IgnoreMissingFields) }, @@ -224,8 +224,4 @@ func init() { return nil }, ) - if err != nil { - // If one of the conversion functions is malformed, detect it immediately. - panic(err) - } } diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/register.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/register.go index e5c9e88e..015901d2 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/register.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/register.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,17 +18,23 @@ package v1 import ( "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api" + "k8s.io/kubernetes/pkg/runtime" ) // SchemeGroupVersion is group version used to register these objects // TODO this should be in the "kubeconfig" group var SchemeGroupVersion = unversioned.GroupVersion{Group: "", Version: "v1"} -func init() { - api.Scheme.AddKnownTypes(SchemeGroupVersion, +var ( + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes, addConversionFuncs) + AddToScheme = SchemeBuilder.AddToScheme +) + +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, &Config{}, ) + return nil } func (obj *Config) GetObjectKind() unversioned.ObjectKind { return obj } diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/types.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/types.go index 46b5dbaa..bcb82aa9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/types.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/api/v1/types.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -82,6 +82,8 @@ type AuthInfo struct { ClientKeyData []byte `json:"client-key-data,omitempty"` // Token is the bearer token for authentication to the kubernetes cluster. Token string `json:"token,omitempty"` + // TokenFile is a pointer to a file that contains a bearer token (as described above). If both Token and TokenFile are present, Token takes precedence. + TokenFile string `json:"tokenFile,omitempty"` // Impersonate is the username to imperonate. The name matches the flag. Impersonate string `json:"as,omitempty"` // Username is the username for basic authentication to the kubernetes cluster. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/auth_loaders.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/auth_loaders.go index 8b10ce2b..0abc425c 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/auth_loaders.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/auth_loaders.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/client_config.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/client_config.go index c83f315a..339b5d84 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/client_config.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/client_config.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -167,6 +167,12 @@ func getUserIdentificationPartialConfig(configAuthInfo clientcmdapi.AuthInfo, fa // blindly overwrite existing values based on precedence if len(configAuthInfo.Token) > 0 { mergedConfig.BearerToken = configAuthInfo.Token + } else if len(configAuthInfo.TokenFile) > 0 { + tokenBytes, err := ioutil.ReadFile(configAuthInfo.TokenFile) + if err != nil { + return nil, err + } + mergedConfig.BearerToken = string(tokenBytes) } if len(configAuthInfo.Impersonate) > 0 { mergedConfig.Impersonate = configAuthInfo.Impersonate @@ -323,7 +329,7 @@ func (config *DirectClientConfig) getCluster() clientcmdapi.Cluster { clusterInfoName := config.getClusterName() var mergedClusterInfo clientcmdapi.Cluster - mergo.Merge(&mergedClusterInfo, DefaultCluster) + mergo.Merge(&mergedClusterInfo, config.overrides.ClusterDefaults) mergo.Merge(&mergedClusterInfo, EnvVarCluster) if configClusterInfo, exists := clusterInfos[clusterInfoName]; exists { mergo.Merge(&mergedClusterInfo, configClusterInfo) @@ -344,6 +350,8 @@ func (config *DirectClientConfig) getCluster() clientcmdapi.Cluster { // inClusterClientConfig makes a config that will work from within a kubernetes cluster container environment. type inClusterClientConfig struct{} +var _ ClientConfig = inClusterClientConfig{} + func (inClusterClientConfig) RawConfig() (clientcmdapi.Config, error) { return clientcmdapi.Config{}, fmt.Errorf("inCluster environment config doesn't support multiple clusters") } @@ -352,21 +360,21 @@ func (inClusterClientConfig) ClientConfig() (*restclient.Config, error) { return restclient.InClusterConfig() } -func (inClusterClientConfig) Namespace() (string, error) { +func (inClusterClientConfig) Namespace() (string, bool, error) { // This way assumes you've set the POD_NAMESPACE environment variable using the downward API. // This check has to be done first for backwards compatibility with the way InClusterConfig was originally set up if ns := os.Getenv("POD_NAMESPACE"); ns != "" { - return ns, nil + return ns, true, nil } // Fall back to the namespace associated with the service account token, if available if data, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/namespace"); err == nil { if ns := strings.TrimSpace(string(data)); len(ns) > 0 { - return ns, nil + return ns, true, nil } } - return "default", nil + return "default", false, nil } func (inClusterClientConfig) ConfigAccess() ConfigAccess { diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/config.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/config.go index 049fc392..bf8b29f2 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/config.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/config.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -186,7 +186,10 @@ func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, rela destinationFile = configAccess.GetDefaultFilename() } - configToWrite := GetConfigFromFileOrDie(destinationFile) + configToWrite, err := getConfigFromFile(destinationFile) + if err != nil { + return err + } t := *cluster configToWrite.Clusters[key] = &t @@ -211,7 +214,10 @@ func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, rela destinationFile = configAccess.GetDefaultFilename() } - configToWrite := GetConfigFromFileOrDie(destinationFile) + configToWrite, err := getConfigFromFile(destinationFile) + if err != nil { + return err + } configToWrite.Contexts[key] = context if err := WriteToFile(*configToWrite, destinationFile); err != nil { @@ -228,7 +234,10 @@ func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, rela destinationFile = configAccess.GetDefaultFilename() } - configToWrite := GetConfigFromFileOrDie(destinationFile) + configToWrite, err := getConfigFromFile(destinationFile) + if err != nil { + return err + } t := *authInfo configToWrite.AuthInfos[key] = &t configToWrite.AuthInfos[key].LocationOfOrigin = destinationFile @@ -251,7 +260,10 @@ func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, rela destinationFile = configAccess.GetDefaultFilename() } - configToWrite := GetConfigFromFileOrDie(destinationFile) + configToWrite, err := getConfigFromFile(destinationFile) + if err != nil { + return err + } delete(configToWrite.Clusters, key) if err := WriteToFile(*configToWrite, destinationFile); err != nil { @@ -267,7 +279,10 @@ func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, rela destinationFile = configAccess.GetDefaultFilename() } - configToWrite := GetConfigFromFileOrDie(destinationFile) + configToWrite, err := getConfigFromFile(destinationFile) + if err != nil { + return err + } delete(configToWrite.Contexts, key) if err := WriteToFile(*configToWrite, destinationFile); err != nil { @@ -283,7 +298,10 @@ func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, rela destinationFile = configAccess.GetDefaultFilename() } - configToWrite := GetConfigFromFileOrDie(destinationFile) + configToWrite, err := getConfigFromFile(destinationFile) + if err != nil { + return err + } delete(configToWrite.AuthInfos, key) if err := WriteToFile(*configToWrite, destinationFile); err != nil { @@ -330,7 +348,10 @@ func writeCurrentContext(configAccess ConfigAccess, newCurrentContext string) er if configAccess.IsExplicitFile() { file := configAccess.GetExplicitFile() - currConfig := GetConfigFromFileOrDie(file) + currConfig, err := getConfigFromFile(file) + if err != nil { + return err + } currConfig.CurrentContext = newCurrentContext if err := WriteToFile(*currConfig, file); err != nil { return err @@ -341,7 +362,10 @@ func writeCurrentContext(configAccess ConfigAccess, newCurrentContext string) er if len(newCurrentContext) > 0 { destinationFile := configAccess.GetDefaultFilename() - config := GetConfigFromFileOrDie(destinationFile) + config, err := getConfigFromFile(destinationFile) + if err != nil { + return err + } config.CurrentContext = newCurrentContext if err := WriteToFile(*config, destinationFile); err != nil { @@ -354,7 +378,10 @@ func writeCurrentContext(configAccess ConfigAccess, newCurrentContext string) er // we're supposed to be clearing the current context. We need to find the first spot in the chain that is setting it and clear it for _, file := range configAccess.GetLoadingPrecedence() { if _, err := os.Stat(file); err == nil { - currConfig := GetConfigFromFileOrDie(file) + currConfig, err := getConfigFromFile(file) + if err != nil { + return err + } if len(currConfig.CurrentContext) > 0 { currConfig.CurrentContext = newCurrentContext @@ -379,7 +406,10 @@ func writePreferences(configAccess ConfigAccess, newPrefs clientcmdapi.Preferenc if configAccess.IsExplicitFile() { file := configAccess.GetExplicitFile() - currConfig := GetConfigFromFileOrDie(file) + currConfig, err := getConfigFromFile(file) + if err != nil { + return err + } currConfig.Preferences = newPrefs if err := WriteToFile(*currConfig, file); err != nil { return err @@ -389,7 +419,10 @@ func writePreferences(configAccess ConfigAccess, newPrefs clientcmdapi.Preferenc } for _, file := range configAccess.GetLoadingPrecedence() { - currConfig := GetConfigFromFileOrDie(file) + currConfig, err := getConfigFromFile(file) + if err != nil { + return err + } if !reflect.DeepEqual(currConfig.Preferences, newPrefs) { currConfig.Preferences = newPrefs @@ -404,15 +437,23 @@ func writePreferences(configAccess ConfigAccess, newPrefs clientcmdapi.Preferenc return errors.New("no config found to write preferences") } -// GetConfigFromFileOrDie tries to read a kubeconfig file and if it can't, it calls exit. One exception, missing files result in empty configs, not an exit -func GetConfigFromFileOrDie(filename string) *clientcmdapi.Config { +// getConfigFromFile tries to read a kubeconfig file and if it can't, returns an error. One exception, missing files result in empty configs, not an error. +func getConfigFromFile(filename string) (*clientcmdapi.Config, error) { config, err := LoadFromFile(filename) if err != nil && !os.IsNotExist(err) { - glog.FatalDepth(1, err) + return nil, err } - if config == nil { - return clientcmdapi.NewConfig() + config = clientcmdapi.NewConfig() + } + return config, nil +} + +// GetConfigFromFileOrDie tries to read a kubeconfig file and if it can't, it calls exit. One exception, missing files result in empty configs, not an exit +func GetConfigFromFileOrDie(filename string) *clientcmdapi.Config { + config, err := getConfigFromFile(filename) + if err != nil { + glog.FatalDepth(1, err) } return config diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/doc.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/doc.go index 7e8f9b4e..30ef6f36 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/loader.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/loader.go index 3d2df1f7..a1ea6865 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/loader.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/loader.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -85,7 +85,7 @@ func (g *ClientConfigGetter) GetLoadingPrecedence() []string { return nil } func (g *ClientConfigGetter) GetStartingConfig() (*clientcmdapi.Config, error) { - return nil, nil + return g.kubeconfigGetter() } func (g *ClientConfigGetter) GetDefaultFilename() string { return "" @@ -215,7 +215,6 @@ func (rules *ClientConfigLoadingRules) Load() (*clientcmdapi.Config, error) { errlist = append(errlist, err) } } - return config, utilerrors.NewAggregate(errlist) } @@ -230,14 +229,17 @@ func (rules *ClientConfigLoadingRules) Migrate() error { if _, err := os.Stat(destination); err == nil { // if the destination already exists, do nothing continue + } else if os.IsPermission(err) { + // if we can't access the file, skip it + continue } else if !os.IsNotExist(err) { // if we had an error other than non-existence, fail return err } if sourceInfo, err := os.Stat(source); err != nil { - if os.IsNotExist(err) { - // if the source file doesn't exist, there's no work to do. + if os.IsNotExist(err) || os.IsPermission(err) { + // if the source file doesn't exist or we can't access it, there's no work to do. continue } @@ -382,37 +384,12 @@ func WriteToFile(config clientcmdapi.Config, filename string) error { } } - err = lockFile(filename) - if err != nil { - return err - } - defer unlockFile(filename) - if err := ioutil.WriteFile(filename, content, 0600); err != nil { return err } return nil } -func lockFile(filename string) error { - // TODO: find a way to do this with actual file locks. Will - // probably need seperate solution for windows and linux. - f, err := os.OpenFile(lockName(filename), os.O_CREATE|os.O_EXCL, 0) - if err != nil { - return err - } - f.Close() - return nil -} - -func unlockFile(filename string) error { - return os.Remove(lockName(filename)) -} - -func lockName(filename string) string { - return filename + ".lock" -} - // Write serializes the config to yaml. // Encapsulates serialization without assuming the destination is a file. func Write(config clientcmdapi.Config) ([]byte, error) { @@ -525,7 +502,7 @@ func GetClusterFileReferences(cluster *clientcmdapi.Cluster) []*string { } func GetAuthInfoFileReferences(authInfo *clientcmdapi.AuthInfo) []*string { - return []*string{&authInfo.ClientCertificate, &authInfo.ClientKey} + return []*string{&authInfo.ClientCertificate, &authInfo.ClientKey, &authInfo.TokenFile} } // ResolvePaths updates the given refs to be absolute paths, relative to the given base directory diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/merged_client_builder.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/merged_client_builder.go index 52c1493d..f6490333 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/merged_client_builder.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/merged_client_builder.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -39,16 +39,25 @@ type DeferredLoadingClientConfig struct { clientConfig ClientConfig loadingLock sync.Mutex + + // provided for testing + icc InClusterConfig +} + +// InClusterConfig abstracts details of whether the client is running in a cluster for testing. +type InClusterConfig interface { + ClientConfig + Possible() bool } // NewNonInteractiveDeferredLoadingClientConfig creates a ConfigClientClientConfig using the passed context name func NewNonInteractiveDeferredLoadingClientConfig(loader ClientConfigLoader, overrides *ConfigOverrides) ClientConfig { - return &DeferredLoadingClientConfig{loader: loader, overrides: overrides} + return &DeferredLoadingClientConfig{loader: loader, overrides: overrides, icc: inClusterClientConfig{}} } // NewInteractiveDeferredLoadingClientConfig creates a ConfigClientClientConfig using the passed context name and the fallback auth reader func NewInteractiveDeferredLoadingClientConfig(loader ClientConfigLoader, overrides *ConfigOverrides, fallbackReader io.Reader) ClientConfig { - return &DeferredLoadingClientConfig{loader: loader, overrides: overrides, fallbackReader: fallbackReader} + return &DeferredLoadingClientConfig{loader: loader, overrides: overrides, icc: inClusterClientConfig{}, fallbackReader: fallbackReader} } func (config *DeferredLoadingClientConfig) createClientConfig() (ClientConfig, error) { @@ -92,18 +101,33 @@ func (config *DeferredLoadingClientConfig) ClientConfig() (*restclient.Config, e return nil, err } + // load the configuration and return on non-empty errors and if the + // content differs from the default config mergedConfig, err := mergedClientConfig.ClientConfig() - if err != nil { + switch { + case err != nil && !IsEmptyConfig(err): + // return on any error except empty config return nil, err + case mergedConfig != nil: + // if the configuration has any settings at all, we cannot use ICC + // TODO: we need to discriminate better between "empty due to env" and + // "empty due to defaults" + // TODO: this shouldn't be a global - the client config rules should be + // handling this. + defaultConfig, err := DefaultClientConfig.ClientConfig() + if err == nil && !reflect.DeepEqual(mergedConfig, defaultConfig) { + return mergedConfig, nil + } } - // Are we running in a cluster and were no other configs found? If so, use the in-cluster-config. - icc := inClusterClientConfig{} - defaultConfig, err := DefaultClientConfig.ClientConfig() - if icc.Possible() && err == nil && reflect.DeepEqual(mergedConfig, defaultConfig) { - glog.V(2).Info("No kubeconfig could be created, falling back to service account.") - return icc.ClientConfig() + + // check for in-cluster configuration and use it + if config.icc.Possible() { + glog.V(4).Infof("Using in-cluster configuration") + return config.icc.ClientConfig() } - return mergedConfig, nil + + // return the result of the merged client config + return mergedConfig, err } // Namespace implements KubeConfig @@ -113,7 +137,18 @@ func (config *DeferredLoadingClientConfig) Namespace() (string, bool, error) { return "", false, err } - return mergedKubeConfig.Namespace() + ns, ok, err := mergedKubeConfig.Namespace() + // if we get an error and it is not empty config, or if the merged config defined an explicit namespace, or + // if in-cluster config is not possible, return immediately + if (err != nil && !IsEmptyConfig(err)) || ok || !config.icc.Possible() { + // return on any error except empty config + return ns, ok, err + } + + glog.V(4).Infof("Using in-cluster namespace") + + // allow the namespace from the service account token directory to be used. + return config.icc.Namespace() } // ConfigAccess implements ClientConfig diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/overrides.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/overrides.go index f6dda97f..9c117ea3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/overrides.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/overrides.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,10 +27,12 @@ import ( // ConfigOverrides holds values that should override whatever information is pulled from the actual Config object. You can't // simply use an actual Config object, because Configs hold maps, but overrides are restricted to "at most one" type ConfigOverrides struct { - AuthInfo clientcmdapi.AuthInfo - ClusterInfo clientcmdapi.Cluster - Context clientcmdapi.Context - CurrentContext string + AuthInfo clientcmdapi.AuthInfo + // ClusterDefaults are applied before the configured cluster info is loaded. + ClusterDefaults clientcmdapi.Cluster + ClusterInfo clientcmdapi.Cluster + Context clientcmdapi.Context + CurrentContext string } // ConfigOverrideFlags holds the flag names to be used for binding command line flags. Notice that this structure tightly @@ -124,12 +126,12 @@ const ( // RecommendedAuthOverrideFlags is a convenience method to return recommended flag names prefixed with a string of your choosing func RecommendedAuthOverrideFlags(prefix string) AuthOverrideFlags { return AuthOverrideFlags{ - ClientCertificate: FlagInfo{prefix + FlagCertFile, "", "", "Path to a client certificate file for TLS."}, - ClientKey: FlagInfo{prefix + FlagKeyFile, "", "", "Path to a client key file for TLS."}, - Token: FlagInfo{prefix + FlagBearerToken, "", "", "Bearer token for authentication to the API server."}, - Impersonate: FlagInfo{prefix + FlagImpersonate, "", "", "Username to impersonate for the operation."}, - Username: FlagInfo{prefix + FlagUsername, "", "", "Username for basic authentication to the API server."}, - Password: FlagInfo{prefix + FlagPassword, "", "", "Password for basic authentication to the API server."}, + ClientCertificate: FlagInfo{prefix + FlagCertFile, "", "", "Path to a client certificate file for TLS"}, + ClientKey: FlagInfo{prefix + FlagKeyFile, "", "", "Path to a client key file for TLS"}, + Token: FlagInfo{prefix + FlagBearerToken, "", "", "Bearer token for authentication to the API server"}, + Impersonate: FlagInfo{prefix + FlagImpersonate, "", "", "Username to impersonate for the operation"}, + Username: FlagInfo{prefix + FlagUsername, "", "", "Username for basic authentication to the API server"}, + Password: FlagInfo{prefix + FlagPassword, "", "", "Password for basic authentication to the API server"}, } } @@ -138,8 +140,8 @@ func RecommendedClusterOverrideFlags(prefix string) ClusterOverrideFlags { return ClusterOverrideFlags{ APIServer: FlagInfo{prefix + FlagAPIServer, "", "", "The address and port of the Kubernetes API server"}, APIVersion: FlagInfo{prefix + FlagAPIVersion, "", "", "DEPRECATED: The API version to use when talking to the server"}, - CertificateAuthority: FlagInfo{prefix + FlagCAFile, "", "", "Path to a cert. file for the certificate authority."}, - InsecureSkipTLSVerify: FlagInfo{prefix + FlagInsecure, "", "false", "If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure."}, + CertificateAuthority: FlagInfo{prefix + FlagCAFile, "", "", "Path to a cert. file for the certificate authority"}, + InsecureSkipTLSVerify: FlagInfo{prefix + FlagInsecure, "", "false", "If true, the server's certificate will not be checked for validity. This will make your HTTPS connections insecure"}, } } @@ -158,7 +160,7 @@ func RecommendedContextOverrideFlags(prefix string) ContextOverrideFlags { return ContextOverrideFlags{ ClusterName: FlagInfo{prefix + FlagClusterName, "", "", "The name of the kubeconfig cluster to use"}, AuthInfoName: FlagInfo{prefix + FlagAuthInfoName, "", "", "The name of the kubeconfig user to use"}, - Namespace: FlagInfo{prefix + FlagNamespace, "", "", "If present, the namespace scope for this CLI request."}, + Namespace: FlagInfo{prefix + FlagNamespace, "n", "", "If present, the namespace scope for this CLI request"}, } } diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/validation.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/validation.go index 1690f515..63f8adec 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clientcmd/validation.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clusterrolebindings.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clusterrolebindings.go index 2a9d7984..fa9cad97 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clusterrolebindings.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clusterrolebindings.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clusterroles.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clusterroles.go index 0d2d375d..165271ab 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/clusterroles.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/clusterroles.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/componentstatuses.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/componentstatuses.go index 0717cdec..aca996b2 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/componentstatuses.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/componentstatuses.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/conditions.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/conditions.go index f68f98fe..986562e3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/conditions.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/conditions.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/util/wait" @@ -72,6 +73,17 @@ func ReplicaSetHasDesiredReplicas(c ExtensionsInterface, replicaSet *extensions. } } +func PetSetHasDesiredPets(c AppsInterface, petset *apps.PetSet) wait.ConditionFunc { + // TODO: Differentiate between 0 pets and a really quick scale down using generation. + return func() (bool, error) { + ps, err := c.PetSets(petset.Namespace).Get(petset.Name) + if err != nil { + return false, err + } + return ps.Status.Replicas == ps.Spec.Replicas, nil + } +} + // JobHasDesiredParallelism returns a condition that will be true if the desired parallelism count // for a job equals the current active counts or is less by an appropriate successful/unsuccessful count. func JobHasDesiredParallelism(c BatchInterface, job *batch.Job) wait.ConditionFunc { @@ -121,6 +133,10 @@ func DeploymentHasDesiredReplicas(c ExtensionsInterface, deployment *extensions. // the pod has already reached completed state. var ErrPodCompleted = fmt.Errorf("pod ran to completion") +// ErrContainerTerminated is returned by PodContainerRunning in the intermediate +// state where the pod indicates it's still running, but its container is already terminated +var ErrContainerTerminated = fmt.Errorf("container terminated") + // PodRunning returns true if the pod is running, false if the pod has not yet reached running state, // returns ErrPodCompleted if the pod has run to completion, or an error in any other case. func PodRunning(event watch.Event) (bool, error) { @@ -217,6 +233,18 @@ func PodContainerRunning(containerName string) watch.ConditionFunc { if s.Name != containerName { continue } + if s.State.Terminated != nil { + return false, ErrContainerTerminated + } + return s.State.Running != nil, nil + } + for _, s := range t.Status.InitContainerStatuses { + if s.Name != containerName { + continue + } + if s.State.Terminated != nil { + return false, ErrContainerTerminated + } return s.State.Running != nil, nil } return false, nil diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/configmap.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/configmap.go index 60fffa75..c2f20354 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/configmap.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/configmap.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/containerinfo.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/containerinfo.go index 30638685..2f9aae8a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/containerinfo.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/containerinfo.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/daemon_sets.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/daemon_sets.go index fa12591a..7ec9182f 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/daemon_sets.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/daemon_sets.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/deployment.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/deployment.go index cafd4cfd..a5e8afe9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/deployment.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/deployment.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/doc.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/doc.go index 252d8097..dac3925b 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/endpoints.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/endpoints.go index c58c88a2..6e20a347 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/endpoints.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/endpoints.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/events.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/events.go index b882ccdc..3421bd81 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/events.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/events.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/extensions.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/extensions.go index 3c9114d9..f538055a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/extensions.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/extensions.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ limitations under the License. package unversioned import ( - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/client/restclient" ) @@ -88,7 +86,7 @@ func (c *ExtensionsClient) ReplicaSets(namespace string) ReplicaSetInterface { // incompatible ways at any time. func NewExtensions(c *restclient.Config) (*ExtensionsClient, error) { config := *c - if err := setExtensionsDefaults(&config); err != nil { + if err := setGroupDefaults(extensions.GroupName, &config); err != nil { return nil, err } client, err := restclient.RESTClientFor(&config) @@ -109,30 +107,3 @@ func NewExtensionsOrDie(c *restclient.Config) *ExtensionsClient { } return client } - -func setExtensionsDefaults(config *restclient.Config) error { - // if experimental group is not registered, return an error - g, err := registered.Group(extensions.GroupName) - if err != nil { - return err - } - config.APIPath = defaultAPIPath - if config.UserAgent == "" { - config.UserAgent = restclient.DefaultKubernetesUserAgent() - } - // TODO: Unconditionally set the config.Version, until we fix the config. - //if config.Version == "" { - copyGroupVersion := g.GroupVersion - config.GroupVersion = ©GroupVersion - //} - - config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) - config.NegotiatedSerializer = api.Codecs - if config.QPS == 0 { - config.QPS = 5 - } - if config.Burst == 0 { - config.Burst = 10 - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/flags.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/flags.go index 9fc540cf..7d32a259 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/flags.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/flags.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/helper.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/helper.go index e664125f..b157e10d 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/helper.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/helper.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,11 +23,15 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/apps" + "k8s.io/kubernetes/pkg/apis/authentication" + "k8s.io/kubernetes/pkg/apis/authorization" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/batch" + "k8s.io/kubernetes/pkg/apis/certificates" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/rbac" + "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/typed/discovery" "k8s.io/kubernetes/pkg/util/sets" @@ -61,6 +65,15 @@ func New(c *restclient.Config) (*Client, error) { return nil, err } + var authorizationClient *AuthorizationClient + if registered.IsRegistered(authorization.GroupName) { + authorizationConfig := *c + authorizationClient, err = NewAuthorization(&authorizationConfig) + if err != nil { + return nil, err + } + } + var autoscalingClient *AutoscalingClient if registered.IsRegistered(autoscaling.GroupName) { autoscalingConfig := *c @@ -70,6 +83,15 @@ func New(c *restclient.Config) (*Client, error) { } } + var authenticationClient *AuthenticationClient + if registered.IsRegistered(authentication.GroupName) { + authenticationConfig := *c + authenticationClient, err = NewAuthentication(&authenticationConfig) + if err != nil { + return nil, err + } + } + var batchClient *BatchClient if registered.IsRegistered(batch.GroupName) { batchConfig := *c @@ -95,6 +117,14 @@ func New(c *restclient.Config) (*Client, error) { return nil, err } } + var certsClient *CertificatesClient + if registered.IsRegistered(certificates.GroupName) { + certsConfig := *c + certsClient, err = NewCertificates(&certsConfig) + if err != nil { + return nil, err + } + } var appsClient *AppsClient if registered.IsRegistered(apps.GroupName) { @@ -114,7 +144,29 @@ func New(c *restclient.Config) (*Client, error) { } } - return &Client{RESTClient: client, AutoscalingClient: autoscalingClient, BatchClient: batchClient, ExtensionsClient: extensionsClient, DiscoveryClient: discoveryClient, AppsClient: appsClient, PolicyClient: policyClient, RbacClient: rbacClient}, nil + var storageClient *StorageClient + if registered.IsRegistered(storage.GroupName) { + storageConfig := *c + storageClient, err = NewStorage(&storageConfig) + if err != nil { + return nil, err + } + } + + return &Client{ + RESTClient: client, + AppsClient: appsClient, + AuthenticationClient: authenticationClient, + AuthorizationClient: authorizationClient, + AutoscalingClient: autoscalingClient, + BatchClient: batchClient, + CertificatesClient: certsClient, + DiscoveryClient: discoveryClient, + ExtensionsClient: extensionsClient, + PolicyClient: policyClient, + RbacClient: rbacClient, + StorageClient: storageClient, + }, nil } // MatchesServerVersion queries the server to compares the build version @@ -134,7 +186,7 @@ func MatchesServerVersion(client *Client, c *restclient.Config) error { return fmt.Errorf("couldn't read version from server: %v\n", err) } // GitVersion includes GitCommit and GitTreeState, but best to be safe? - if cVer.GitVersion != sVer.GitVersion || cVer.GitCommit != sVer.GitCommit || cVer.GitTreeState != cVer.GitTreeState { + if cVer.GitVersion != sVer.GitVersion || cVer.GitCommit != sVer.GitCommit || cVer.GitTreeState != sVer.GitTreeState { return fmt.Errorf("server version (%#v) differs from client version (%#v)!\n", sVer, cVer) } @@ -249,19 +301,35 @@ func SetKubernetesDefaults(config *restclient.Config) error { if config.APIPath == "" { config.APIPath = legacyAPIPath } - g, err := registered.Group(api.GroupName) - if err != nil { - return err + if config.GroupVersion == nil || config.GroupVersion.Group != api.GroupName { + g, err := registered.Group(api.GroupName) + if err != nil { + return err + } + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion } - // TODO: Unconditionally set the config.Version, until we fix the config. - copyGroupVersion := g.GroupVersion - config.GroupVersion = ©GroupVersion if config.NegotiatedSerializer == nil { config.NegotiatedSerializer = api.Codecs } - if config.Codec == nil { - config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) - } - return restclient.SetKubernetesDefaults(config) } + +func setGroupDefaults(groupName string, config *restclient.Config) error { + config.APIPath = defaultAPIPath + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + if config.GroupVersion == nil || config.GroupVersion.Group != groupName { + g, err := registered.Group(groupName) + if err != nil { + return err + } + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + } + if config.NegotiatedSerializer == nil { + config.NegotiatedSerializer = api.Codecs + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/horizontalpodautoscaler.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/horizontalpodautoscaler.go index 8cdba3a2..76c6a9cf 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/horizontalpodautoscaler.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/horizontalpodautoscaler.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/import_known_versions.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/import_known_versions.go index bbe61472..85dc5bb1 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/import_known_versions.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/import_known_versions.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,14 +23,16 @@ import ( _ "k8s.io/kubernetes/pkg/api/install" "k8s.io/kubernetes/pkg/apimachinery/registered" _ "k8s.io/kubernetes/pkg/apis/apps/install" - _ "k8s.io/kubernetes/pkg/apis/authentication.k8s.io/install" + _ "k8s.io/kubernetes/pkg/apis/authentication/install" _ "k8s.io/kubernetes/pkg/apis/authorization/install" _ "k8s.io/kubernetes/pkg/apis/autoscaling/install" _ "k8s.io/kubernetes/pkg/apis/batch/install" + _ "k8s.io/kubernetes/pkg/apis/certificates/install" _ "k8s.io/kubernetes/pkg/apis/componentconfig/install" _ "k8s.io/kubernetes/pkg/apis/extensions/install" _ "k8s.io/kubernetes/pkg/apis/policy/install" _ "k8s.io/kubernetes/pkg/apis/rbac/install" + _ "k8s.io/kubernetes/pkg/apis/storage/install" ) func init() { diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/ingress.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/ingress.go index 4865b208..59c6a6d9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/ingress.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/ingress.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/jobs.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/jobs.go index 94b81907..14cfa3a3 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/jobs.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/jobs.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/limit_ranges.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/limit_ranges.go index 8bc2253d..914a049f 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/limit_ranges.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/limit_ranges.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/namespaces.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/namespaces.go index 122bcba5..b4a38361 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/namespaces.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/namespaces.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/network_policys.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/network_policys.go index 0dc9d97b..3e3f6104 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/network_policys.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/network_policys.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/nodes.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/nodes.go index 452a03f1..15a7db2a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/nodes.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/nodes.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,6 +30,7 @@ type NodeInterface interface { Create(node *api.Node) (*api.Node, error) List(opts api.ListOptions) (*api.NodeList, error) Delete(name string) error + DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error Update(*api.Node) (*api.Node, error) UpdateStatus(*api.Node) (*api.Node, error) Watch(opts api.ListOptions) (watch.Interface, error) @@ -76,6 +77,16 @@ func (c *nodes) Delete(name string) error { return c.r.Delete().Resource(c.resourceName()).Name(name).Do().Error() } +// DeleteCollection deletes a collection of nodes. +func (c *nodes) DeleteCollection(options *api.DeleteOptions, listOptions api.ListOptions) error { + return c.r.Delete(). + Resource(c.resourceName()). + VersionedParams(&listOptions, api.ParameterCodec). + Body(options). + Do(). + Error() +} + // Update updates an existing node. func (c *nodes) Update(node *api.Node) (*api.Node, error) { result := &api.Node{} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/persistentvolumeclaim.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/persistentvolumeclaim.go index bf5447d7..4ea3a95a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/persistentvolumeclaim.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/persistentvolumeclaim.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/persistentvolumes.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/persistentvolumes.go index 2de17bb7..5fce1f0a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/persistentvolumes.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/persistentvolumes.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/pet_sets.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/pet_sets.go index 71b1ea02..954efcd0 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/pet_sets.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/pet_sets.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/pod_disruption_budgets.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/pod_disruption_budgets.go index 14f373f3..0239623a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/pod_disruption_budgets.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/pod_disruption_budgets.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/pod_templates.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/pod_templates.go index ed5b733c..7627d735 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/pod_templates.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/pod_templates.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/pods.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/pods.go index 426d3ee8..ea16fb87 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/pods.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/pods.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/podsecuritypolicy.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/podsecuritypolicy.go index 356d913d..f03e643f 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/podsecuritypolicy.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/podsecuritypolicy.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/policy.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/policy.go index 8b06ce27..e602795b 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/policy.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/policy.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ limitations under the License. package unversioned import ( - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/client/restclient" ) @@ -38,7 +36,7 @@ func (c *PolicyClient) PodDisruptionBudgets(namespace string) PodDisruptionBudge func NewPolicy(c *restclient.Config) (*PolicyClient, error) { config := *c - if err := setPolicyDefaults(&config); err != nil { + if err := setGroupDefaults(policy.GroupName, &config); err != nil { return nil, err } client, err := restclient.RESTClientFor(&config) @@ -55,29 +53,3 @@ func NewPolicyOrDie(c *restclient.Config) *PolicyClient { } return client } - -func setPolicyDefaults(config *restclient.Config) error { - g, err := registered.Group(policy.GroupName) - if err != nil { - return err - } - config.APIPath = defaultAPIPath - if config.UserAgent == "" { - config.UserAgent = restclient.DefaultKubernetesUserAgent() - } - // TODO: Unconditionally set the config.Version, until we fix the config. - //if config.Version == "" { - copyGroupVersion := g.GroupVersion - config.GroupVersion = ©GroupVersion - //} - - config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) - config.NegotiatedSerializer = api.Codecs - if config.QPS == 0 { - config.QPS = 5 - } - if config.Burst == 0 { - config.Burst = 10 - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/rbac.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/rbac.go index 76ec392c..c95887da 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/rbac.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/rbac.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,8 +17,6 @@ limitations under the License. package unversioned import ( - "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/apimachinery/registered" "k8s.io/kubernetes/pkg/apis/rbac" "k8s.io/kubernetes/pkg/client/restclient" ) @@ -54,7 +52,7 @@ func (c *RbacClient) ClusterRoles() ClusterRoleInterface { // NewRbac creates a new RbacClient for the given config. func NewRbac(c *restclient.Config) (*RbacClient, error) { config := *c - if err := setRbacDefaults(&config); err != nil { + if err := setGroupDefaults(rbac.GroupName, &config); err != nil { return nil, err } client, err := restclient.RESTClientFor(&config) @@ -73,31 +71,3 @@ func NewRbacOrDie(c *restclient.Config) *RbacClient { } return client } - -func setRbacDefaults(config *restclient.Config) error { - // if rbac group is not registered, return an error - g, err := registered.Group(rbac.GroupName) - if err != nil { - return err - } - config.APIPath = defaultAPIPath - if config.UserAgent == "" { - config.UserAgent = restclient.DefaultKubernetesUserAgent() - } - - // TODO: Unconditionally set the config.Version, until we fix the config. - //if config.Version == "" { - copyGroupVersion := g.GroupVersion - config.GroupVersion = ©GroupVersion - //} - - config.Codec = api.Codecs.LegacyCodec(*config.GroupVersion) - config.NegotiatedSerializer = api.Codecs - if config.QPS == 0 { - config.QPS = 5 - } - if config.Burst == 0 { - config.Burst = 10 - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/replica_sets.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/replica_sets.go index be928408..191a006b 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/replica_sets.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/replica_sets.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/replication_controllers.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/replication_controllers.go index f237a76a..5c3b2c30 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/replication_controllers.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/replication_controllers.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -33,7 +33,7 @@ type ReplicationControllerInterface interface { Create(ctrl *api.ReplicationController) (*api.ReplicationController, error) Update(ctrl *api.ReplicationController) (*api.ReplicationController, error) UpdateStatus(ctrl *api.ReplicationController) (*api.ReplicationController, error) - Delete(name string) error + Delete(name string, options *api.DeleteOptions) error Watch(opts api.ListOptions) (watch.Interface, error) } @@ -84,8 +84,8 @@ func (c *replicationControllers) UpdateStatus(controller *api.ReplicationControl } // Delete deletes an existing replication controller. -func (c *replicationControllers) Delete(name string) error { - return c.r.Delete().Namespace(c.ns).Resource("replicationControllers").Name(name).Do().Error() +func (c *replicationControllers) Delete(name string, options *api.DeleteOptions) error { + return c.r.Delete().Namespace(c.ns).Resource("replicationControllers").Name(name).Body(options).Do().Error() } // Watch returns a watch.Interface that watches the requested controllers. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/resource_quotas.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/resource_quotas.go index acfd8ddb..9944cef9 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/resource_quotas.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/resource_quotas.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/rolebindings.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/rolebindings.go index a43815c5..b7983801 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/rolebindings.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/rolebindings.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/roles.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/roles.go index 29aee1ba..b265e787 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/roles.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/roles.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/scale.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/scale.go index 705f6048..a55b0777 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/scale.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/scheduledjobs.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/scheduledjobs.go index d2b83fce..5c9222cf 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/scheduledjobs.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/scheduledjobs.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -55,34 +55,34 @@ var _ ScheduledJobInterface = &scheduledJobs{} // List returns a list of scheduled jobs that match the label and field selectors. func (c *scheduledJobs) List(opts api.ListOptions) (result *batch.ScheduledJobList, err error) { result = &batch.ScheduledJobList{} - err = c.r.Get().Namespace(c.ns).Resource("scheduledJobs").VersionedParams(&opts, api.ParameterCodec).Do().Into(result) + err = c.r.Get().Namespace(c.ns).Resource("scheduledjobs").VersionedParams(&opts, api.ParameterCodec).Do().Into(result) return } // Get returns information about a particular scheduled job. func (c *scheduledJobs) Get(name string) (result *batch.ScheduledJob, err error) { result = &batch.ScheduledJob{} - err = c.r.Get().Namespace(c.ns).Resource("scheduledJobs").Name(name).Do().Into(result) + err = c.r.Get().Namespace(c.ns).Resource("scheduledjobs").Name(name).Do().Into(result) return } // Create creates a new scheduled job. func (c *scheduledJobs) Create(job *batch.ScheduledJob) (result *batch.ScheduledJob, err error) { result = &batch.ScheduledJob{} - err = c.r.Post().Namespace(c.ns).Resource("scheduledJobs").Body(job).Do().Into(result) + err = c.r.Post().Namespace(c.ns).Resource("scheduledjobs").Body(job).Do().Into(result) return } // Update updates an existing scheduled job. func (c *scheduledJobs) Update(job *batch.ScheduledJob) (result *batch.ScheduledJob, err error) { result = &batch.ScheduledJob{} - err = c.r.Put().Namespace(c.ns).Resource("scheduledJobs").Name(job.Name).Body(job).Do().Into(result) + err = c.r.Put().Namespace(c.ns).Resource("scheduledjobs").Name(job.Name).Body(job).Do().Into(result) return } // Delete deletes a scheduled job, returns error if one occurs. func (c *scheduledJobs) Delete(name string, options *api.DeleteOptions) (err error) { - return c.r.Delete().Namespace(c.ns).Resource("scheduledJobs").Name(name).Body(options).Do().Error() + return c.r.Delete().Namespace(c.ns).Resource("scheduledjobs").Name(name).Body(options).Do().Error() } // Watch returns a watch.Interface that watches the requested scheduled jobs. @@ -90,7 +90,7 @@ func (c *scheduledJobs) Watch(opts api.ListOptions) (watch.Interface, error) { return c.r.Get(). Prefix("watch"). Namespace(c.ns). - Resource("scheduledJobs"). + Resource("scheduledjobs"). VersionedParams(&opts, api.ParameterCodec). Watch() } @@ -98,6 +98,6 @@ func (c *scheduledJobs) Watch(opts api.ListOptions) (watch.Interface, error) { // UpdateStatus takes the name of the scheduled job and the new status. Returns the server's representation of the scheduled job, and an error, if it occurs. func (c *scheduledJobs) UpdateStatus(job *batch.ScheduledJob) (result *batch.ScheduledJob, err error) { result = &batch.ScheduledJob{} - err = c.r.Put().Namespace(c.ns).Resource("scheduledJobs").Name(job.Name).SubResource("status").Body(job).Do().Into(result) + err = c.r.Put().Namespace(c.ns).Resource("scheduledjobs").Name(job.Name).SubResource("status").Body(job).Do().Into(result) return } diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/secrets.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/secrets.go index 33d77ad2..bba3fd93 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/secrets.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/secrets.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/securitycontextconstraints.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/securitycontextconstraints.go index 7ac5fe44..e5ef463c 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/securitycontextconstraints.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/securitycontextconstraints.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/service_accounts.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/service_accounts.go index d78a25c4..68d1b211 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/service_accounts.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/service_accounts.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/services.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/services.go index 8b40a5d0..aada5c16 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/services.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/services.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/storage.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/storage.go new file mode 100644 index 00000000..3b8d2b76 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/storage.go @@ -0,0 +1,77 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apimachinery/registered" + "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/client/restclient" +) + +type StorageInterface interface { + StorageClassesInterface +} + +// StorageClient is used to interact with Kubernetes storage features. +type StorageClient struct { + *restclient.RESTClient +} + +func (c *StorageClient) StorageClasses() StorageClassInterface { + return newStorageClasses(c) +} + +func NewStorage(c *restclient.Config) (*StorageClient, error) { + config := *c + if err := setStorageDefaults(&config); err != nil { + return nil, err + } + client, err := restclient.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &StorageClient{client}, nil +} + +func NewStorageOrDie(c *restclient.Config) *StorageClient { + client, err := NewStorage(c) + if err != nil { + panic(err) + } + return client +} + +func setStorageDefaults(config *restclient.Config) error { + // if storage group is not registered, return an error + g, err := registered.Group(storage.GroupName) + if err != nil { + return err + } + config.APIPath = defaultAPIPath + if config.UserAgent == "" { + config.UserAgent = restclient.DefaultKubernetesUserAgent() + } + // TODO: Unconditionally set the config.Version, until we fix the config. + //if config.Version == "" { + copyGroupVersion := g.GroupVersion + config.GroupVersion = ©GroupVersion + //} + + config.NegotiatedSerializer = api.Codecs + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/storageclasses.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/storageclasses.go new file mode 100644 index 00000000..509e540a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/storageclasses.go @@ -0,0 +1,87 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/apis/storage" + "k8s.io/kubernetes/pkg/watch" +) + +type StorageClassesInterface interface { + StorageClasses() StorageClassInterface +} + +// StorageClassInterface has methods to work with StorageClass resources. +type StorageClassInterface interface { + List(opts api.ListOptions) (*storage.StorageClassList, error) + Get(name string) (*storage.StorageClass, error) + Create(storageClass *storage.StorageClass) (*storage.StorageClass, error) + Update(storageClass *storage.StorageClass) (*storage.StorageClass, error) + Delete(name string) error + Watch(opts api.ListOptions) (watch.Interface, error) +} + +// storageClasses implements StorageClassInterface +type storageClasses struct { + client *StorageClient +} + +func newStorageClasses(c *StorageClient) *storageClasses { + return &storageClasses{c} +} + +func (c *storageClasses) List(opts api.ListOptions) (result *storage.StorageClassList, err error) { + result = &storage.StorageClassList{} + err = c.client.Get(). + Resource("storageclasses"). + VersionedParams(&opts, api.ParameterCodec). + Do(). + Into(result) + + return result, err +} + +func (c *storageClasses) Get(name string) (result *storage.StorageClass, err error) { + result = &storage.StorageClass{} + err = c.client.Get().Resource("storageClasses").Name(name).Do().Into(result) + return +} + +func (c *storageClasses) Create(storageClass *storage.StorageClass) (result *storage.StorageClass, err error) { + result = &storage.StorageClass{} + err = c.client.Post().Resource("storageClasses").Body(storageClass).Do().Into(result) + return +} + +func (c *storageClasses) Update(storageClass *storage.StorageClass) (result *storage.StorageClass, err error) { + result = &storage.StorageClass{} + err = c.client.Put().Resource("storageClasses").Name(storageClass.Name).Body(storageClass).Do().Into(result) + return +} + +func (c *storageClasses) Delete(name string) error { + return c.client.Delete().Resource("storageClasses").Name(name).Do().Error() +} + +func (c *storageClasses) Watch(opts api.ListOptions) (watch.Interface, error) { + return c.client.Get(). + Prefix("watch"). + Resource("storageClasses"). + VersionedParams(&opts, api.ParameterCodec). + Watch() +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/subjectaccessreview.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/subjectaccessreview.go new file mode 100644 index 00000000..b7a2c59e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/subjectaccessreview.go @@ -0,0 +1,45 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "k8s.io/kubernetes/pkg/apis/authorization" +) + +type SubjectAccessReviewsInterface interface { + SubjectAccessReviews() SubjectAccessReviewInterface +} + +type SubjectAccessReviewInterface interface { + Create(subjectAccessReview *authorization.SubjectAccessReview) (*authorization.SubjectAccessReview, error) +} + +type subjectAccessReviews struct { + client *AuthorizationClient +} + +func newSubjectAccessReviews(c *AuthorizationClient) *subjectAccessReviews { + return &subjectAccessReviews{ + client: c, + } +} + +func (c *subjectAccessReviews) Create(subjectAccessReview *authorization.SubjectAccessReview) (result *authorization.SubjectAccessReview, err error) { + result = &authorization.SubjectAccessReview{} + err = c.client.Post().Resource("subjectAccessReviews").Body(subjectAccessReview).Do().Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/thirdpartyresources.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/thirdpartyresources.go index 0908db06..68adddbe 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/thirdpartyresources.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/thirdpartyresources.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/tokenreviews.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/tokenreviews.go new file mode 100644 index 00000000..91c6bb60 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/tokenreviews.go @@ -0,0 +1,49 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package unversioned + +import ( + "k8s.io/kubernetes/pkg/apis/authentication" +) + +// TokenReviews has methods to work with TokenReview resources in a namespace +type TokenReviewsInterface interface { + TokenReviews() TokenReviewInterface +} + +// TokenReviewInterface has methods to work with TokenReview resources. +type TokenReviewInterface interface { + Create(tokenReview *authentication.TokenReview) (*authentication.TokenReview, error) +} + +// tokenReviews implements TokenReviewsNamespacer interface +type tokenReviews struct { + client *AuthenticationClient +} + +// newTokenReviews returns a tokenReviews +func newTokenReviews(c *AuthenticationClient) *tokenReviews { + return &tokenReviews{ + client: c, + } +} + +func (c *tokenReviews) Create(obj *authentication.TokenReview) (result *authentication.TokenReview, err error) { + result = &authentication.TokenReview{} + err = c.client.Post().Resource("tokenreviews").Body(obj).Do().Into(result) + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/client/unversioned/util.go b/vendor/k8s.io/kubernetes/pkg/client/unversioned/util.go index 37ada3c3..9657ff2a 100644 --- a/vendor/k8s.io/kubernetes/pkg/client/unversioned/util.go +++ b/vendor/k8s.io/kubernetes/pkg/client/unversioned/util.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/controller_ref_manager.go b/vendor/k8s.io/kubernetes/pkg/controller/controller_ref_manager.go new file mode 100644 index 00000000..52a8667f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/controller_ref_manager.go @@ -0,0 +1,144 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package controller + +import ( + "fmt" + "strings" + + "github.com/golang/glog" + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/labels" +) + +type PodControllerRefManager struct { + podControl PodControlInterface + controllerObject api.ObjectMeta + controllerSelector labels.Selector + controllerKind unversioned.GroupVersionKind +} + +// NewPodControllerRefManager returns a PodControllerRefManager that exposes +// methods to manage the controllerRef of pods. +func NewPodControllerRefManager( + podControl PodControlInterface, + controllerObject api.ObjectMeta, + controllerSelector labels.Selector, + controllerKind unversioned.GroupVersionKind, +) *PodControllerRefManager { + return &PodControllerRefManager{podControl, controllerObject, controllerSelector, controllerKind} +} + +// Classify first filters out inactive pods, then it classify the remaining pods +// into three categories: 1. matchesAndControlled are the pods whose labels +// match the selector of the RC, and have a controllerRef pointing to the +// controller 2. matchesNeedsController are the pods whose labels match the RC, +// but don't have a controllerRef. (Pods with matching labels but with a +// controllerRef pointing to other object are ignored) 3. controlledDoesNotMatch +// are the pods that have a controllerRef pointing to the controller, but their +// labels no longer match the selector. +func (m *PodControllerRefManager) Classify(pods []*api.Pod) ( + matchesAndControlled []*api.Pod, + matchesNeedsController []*api.Pod, + controlledDoesNotMatch []*api.Pod) { + for i := range pods { + pod := pods[i] + if !IsPodActive(pod) { + glog.V(4).Infof("Ignoring inactive pod %v/%v in state %v, deletion time %v", + pod.Namespace, pod.Name, pod.Status.Phase, pod.DeletionTimestamp) + continue + } + controllerRef := getControllerOf(pod.ObjectMeta) + if controllerRef != nil { + if controllerRef.UID == m.controllerObject.UID { + // already controlled + if m.controllerSelector.Matches(labels.Set(pod.Labels)) { + matchesAndControlled = append(matchesAndControlled, pod) + } else { + controlledDoesNotMatch = append(controlledDoesNotMatch, pod) + } + } else { + // ignoring the pod controlled by other controller + glog.V(4).Infof("Ignoring pod %v/%v, it's owned by [%s/%s, name: %s, uid: %s]", + pod.Namespace, pod.Name, controllerRef.APIVersion, controllerRef.Kind, controllerRef.Name, controllerRef.UID) + continue + } + } else { + if !m.controllerSelector.Matches(labels.Set(pod.Labels)) { + continue + } + matchesNeedsController = append(matchesNeedsController, pod) + } + } + return matchesAndControlled, matchesNeedsController, controlledDoesNotMatch +} + +// getControllerOf returns the controllerRef if controllee has a controller, +// otherwise returns nil. +func getControllerOf(controllee api.ObjectMeta) *api.OwnerReference { + for _, owner := range controllee.OwnerReferences { + // controlled by other controller + if owner.Controller != nil && *owner.Controller == true { + return &owner + } + } + return nil +} + +// AdoptPod sends a patch to take control of the pod. It returns the error if +// the patching fails. +func (m *PodControllerRefManager) AdoptPod(pod *api.Pod) error { + // we should not adopt any pods if the controller is about to be deleted + if m.controllerObject.DeletionTimestamp != nil { + return fmt.Errorf("cancel the adopt attempt for pod %s because the controlller is being deleted", + strings.Join([]string{pod.Namespace, pod.Name, string(pod.UID)}, "_")) + } + addControllerPatch := fmt.Sprintf( + `{"metadata":{"ownerReferences":[{"apiVersion":"%s","kind":"%s","name":"%s","uid":"%s","controller":true}],"uid":"%s"}}`, + m.controllerKind.GroupVersion(), m.controllerKind.Kind, + m.controllerObject.Name, m.controllerObject.UID, pod.UID) + return m.podControl.PatchPod(pod.Namespace, pod.Name, []byte(addControllerPatch)) +} + +// ReleasePod sends a patch to free the pod from the control of the controller. +// It returns the error if the patching fails. 404 and 422 errors are ignored. +func (m *PodControllerRefManager) ReleasePod(pod *api.Pod) error { + glog.V(2).Infof("patching pod %s_%s to remove its controllerRef to %s/%s:%s", + pod.Namespace, pod.Name, m.controllerKind.GroupVersion(), m.controllerKind.Kind, m.controllerObject.Name) + deleteOwnerRefPatch := fmt.Sprintf(`{"metadata":{"ownerReferences":[{"$patch":"delete","uid":"%s"}],"uid":"%s"}}`, m.controllerObject.UID, pod.UID) + err := m.podControl.PatchPod(pod.Namespace, pod.Name, []byte(deleteOwnerRefPatch)) + if err != nil { + if errors.IsNotFound(err) { + // If the pod no longer exists, ignore it. + return nil + } + if errors.IsInvalid(err) { + // Invalid error will be returned in two cases: 1. the pod + // has no owner reference, 2. the uid of the pod doesn't + // match, which means the pod is deleted and then recreated. + // In both cases, the error can be ignored. + + // TODO: If the pod has owner references, but none of them + // has the owner.UID, server will silently ignore the patch. + // Investigate why. + return nil + } + } + return err +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go b/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go index a096429a..0baa16e7 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -34,14 +34,12 @@ import ( "k8s.io/kubernetes/pkg/controller/framework" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/clock" "k8s.io/kubernetes/pkg/util/integer" "k8s.io/kubernetes/pkg/util/sets" ) const ( - CreatedByAnnotation = "kubernetes.io/created-by" - // If a watch drops a delete event for a pod, it'll take this long // before a dormant controller waiting for those packets is woken up anyway. It is // specifically targeted at the case where some problem prevents an update @@ -169,12 +167,12 @@ func (r *ControllerExpectations) SatisfiedExpectations(controllerKey string) boo // TODO: Make this possible to disable in tests. // TODO: Support injection of clock. func (exp *ControlleeExpectations) isExpired() bool { - return util.RealClock{}.Since(exp.timestamp) > ExpectationsTimeout + return clock.RealClock{}.Since(exp.timestamp) > ExpectationsTimeout } // SetExpectations registers new expectations for the given controller. Forgets existing expectations. func (r *ControllerExpectations) SetExpectations(controllerKey string, add, del int) error { - exp := &ControlleeExpectations{add: int64(add), del: int64(del), key: controllerKey, timestamp: util.RealClock{}.Now()} + exp := &ControlleeExpectations{add: int64(add), del: int64(del), key: controllerKey, timestamp: clock.RealClock{}.Now()} glog.V(4).Infof("Setting expectations %#v", exp) return r.Add(exp) } @@ -192,7 +190,7 @@ func (r *ControllerExpectations) LowerExpectations(controllerKey string, add, de if exp, exists, err := r.GetExpectations(controllerKey); err == nil && exists { exp.Add(int64(-add), int64(-del)) // The expectations might've been modified since the update on the previous line. - glog.V(4).Infof("Lowered expectations %+v", exp) + glog.V(4).Infof("Lowered expectations %#v", exp) } } @@ -201,11 +199,11 @@ func (r *ControllerExpectations) RaiseExpectations(controllerKey string, add, de if exp, exists, err := r.GetExpectations(controllerKey); err == nil && exists { exp.Add(int64(add), int64(del)) // The expectations might've been modified since the update on the previous line. - glog.V(4).Infof("Raised expectations %+v", exp) + glog.V(4).Infof("Raised expectations %#v", exp) } } -// CreationObserved atomically decrements the `add` expecation count of the given controller. +// CreationObserved atomically decrements the `add` expectation count of the given controller. func (r *ControllerExpectations) CreationObserved(controllerKey string) { r.LowerExpectations(controllerKey, 1, 0) } @@ -351,8 +349,12 @@ type PodControlInterface interface { CreatePods(namespace string, template *api.PodTemplateSpec, object runtime.Object) error // CreatePodsOnNode creates a new pod accorting to the spec on the specified node. CreatePodsOnNode(nodeName, namespace string, template *api.PodTemplateSpec, object runtime.Object) error + // CreatePodsWithControllerRef creates new pods according to the spec, and sets object as the pod's controller. + CreatePodsWithControllerRef(namespace string, template *api.PodTemplateSpec, object runtime.Object, controllerRef *api.OwnerReference) error // DeletePod deletes the pod identified by podID. DeletePod(namespace string, podID string, object runtime.Object) error + // PatchPod patches the pod. + PatchPod(namespace, name string, data []byte) error } // RealPodControl is the default implementation of PodControlInterface. @@ -392,7 +394,7 @@ func getPodsAnnotationSet(template *api.PodTemplateSpec, object runtime.Object) if err != nil { return desiredAnnotations, fmt.Errorf("unable to serialize controller reference: %v", err) } - desiredAnnotations[CreatedByAnnotation] = string(createdByRefJson) + desiredAnnotations[api.CreatedByAnnotation] = string(createdByRefJson) return desiredAnnotations, nil } @@ -406,14 +408,35 @@ func getPodsPrefix(controllerName string) string { } func (r RealPodControl) CreatePods(namespace string, template *api.PodTemplateSpec, object runtime.Object) error { - return r.createPods("", namespace, template, object) + return r.createPods("", namespace, template, object, nil) +} + +func (r RealPodControl) CreatePodsWithControllerRef(namespace string, template *api.PodTemplateSpec, controllerObject runtime.Object, controllerRef *api.OwnerReference) error { + if controllerRef == nil { + return fmt.Errorf("controllerRef is nil") + } + if len(controllerRef.APIVersion) == 0 { + return fmt.Errorf("controllerRef has empty APIVersion") + } + if len(controllerRef.Kind) == 0 { + return fmt.Errorf("controllerRef has empty Kind") + } + if controllerRef.Controller == nil || *controllerRef.Controller != true { + return fmt.Errorf("controllerRef.Controller is not set") + } + return r.createPods("", namespace, template, controllerObject, controllerRef) } func (r RealPodControl) CreatePodsOnNode(nodeName, namespace string, template *api.PodTemplateSpec, object runtime.Object) error { - return r.createPods(nodeName, namespace, template, object) + return r.createPods(nodeName, namespace, template, object, nil) } -func GetPodFromTemplate(template *api.PodTemplateSpec, parentObject runtime.Object) (*api.Pod, error) { +func (r RealPodControl) PatchPod(namespace, name string, data []byte) error { + _, err := r.KubeClient.Core().Pods(namespace).Patch(name, api.StrategicMergePatchType, data) + return err +} + +func GetPodFromTemplate(template *api.PodTemplateSpec, parentObject runtime.Object, controllerRef *api.OwnerReference) (*api.Pod, error) { desiredLabels := getPodsLabelSet(template) desiredAnnotations, err := getPodsAnnotationSet(template, parentObject) if err != nil { @@ -432,21 +455,24 @@ func GetPodFromTemplate(template *api.PodTemplateSpec, parentObject runtime.Obje GenerateName: prefix, }, } + if controllerRef != nil { + pod.OwnerReferences = append(pod.OwnerReferences, *controllerRef) + } if err := api.Scheme.Convert(&template.Spec, &pod.Spec, nil); err != nil { return nil, fmt.Errorf("unable to convert pod template: %v", err) } return pod, nil } -func (r RealPodControl) createPods(nodeName, namespace string, template *api.PodTemplateSpec, object runtime.Object) error { - pod, err := GetPodFromTemplate(template, object) +func (r RealPodControl) createPods(nodeName, namespace string, template *api.PodTemplateSpec, object runtime.Object, controllerRef *api.OwnerReference) error { + pod, err := GetPodFromTemplate(template, object, controllerRef) if err != nil { return err } if len(nodeName) != 0 { pod.Spec.NodeName = nodeName } - if labels.Set(pod.Labels).AsSelector().Empty() { + if labels.Set(pod.Labels).AsSelectorPreValidated().Empty() { return fmt.Errorf("unable to create pods, no labels") } if newPod, err := r.KubeClient.Core().Pods(namespace).Create(pod); err != nil { @@ -481,40 +507,63 @@ func (r RealPodControl) DeletePod(namespace string, podID string, object runtime type FakePodControl struct { sync.Mutex - Templates []api.PodTemplateSpec - DeletePodName []string - Err error + Templates []api.PodTemplateSpec + ControllerRefs []api.OwnerReference + DeletePodName []string + Patches [][]byte + Err error } var _ PodControlInterface = &FakePodControl{} -func (f *FakePodControl) CreatePods(namespace string, spec *api.PodTemplateSpec, object runtime.Object) error { +func (f *FakePodControl) PatchPod(namespace, name string, data []byte) error { f.Lock() defer f.Unlock() + f.Patches = append(f.Patches, data) if f.Err != nil { return f.Err } + return nil +} + +func (f *FakePodControl) CreatePods(namespace string, spec *api.PodTemplateSpec, object runtime.Object) error { + f.Lock() + defer f.Unlock() f.Templates = append(f.Templates, *spec) + if f.Err != nil { + return f.Err + } + return nil +} + +func (f *FakePodControl) CreatePodsWithControllerRef(namespace string, spec *api.PodTemplateSpec, object runtime.Object, controllerRef *api.OwnerReference) error { + f.Lock() + defer f.Unlock() + f.Templates = append(f.Templates, *spec) + f.ControllerRefs = append(f.ControllerRefs, *controllerRef) + if f.Err != nil { + return f.Err + } return nil } func (f *FakePodControl) CreatePodsOnNode(nodeName, namespace string, template *api.PodTemplateSpec, object runtime.Object) error { f.Lock() defer f.Unlock() + f.Templates = append(f.Templates, *template) if f.Err != nil { return f.Err } - f.Templates = append(f.Templates, *template) return nil } func (f *FakePodControl) DeletePod(namespace string, podID string, object runtime.Object) error { f.Lock() defer f.Unlock() + f.DeletePodName = append(f.DeletePodName, podID) if f.Err != nil { return f.Err } - f.DeletePodName = append(f.DeletePodName, podID) return nil } @@ -523,6 +572,8 @@ func (f *FakePodControl) Clear() { defer f.Unlock() f.DeletePodName = []string{} f.Templates = []api.PodTemplateSpec{} + f.ControllerRefs = []api.OwnerReference{} + f.Patches = [][]byte{} } // ByLogging allows custom sorting of pods so the best one can be picked for getting its logs. @@ -632,12 +683,11 @@ func maxContainerRestarts(pod *api.Pod) int { } // FilterActivePods returns pods that have not terminated. -func FilterActivePods(pods []api.Pod) []*api.Pod { +func FilterActivePods(pods []*api.Pod) []*api.Pod { var result []*api.Pod - for i := range pods { - p := pods[i] + for _, p := range pods { if IsPodActive(p) { - result = append(result, &p) + result = append(result, p) } else { glog.V(4).Infof("Ignoring inactive pod %v/%v in state %v, deletion time %v", p.Namespace, p.Name, p.Status.Phase, p.DeletionTimestamp) @@ -646,7 +696,7 @@ func FilterActivePods(pods []api.Pod) []*api.Pod { return result } -func IsPodActive(p api.Pod) bool { +func IsPodActive(p *api.Pod) bool { return api.PodSucceeded != p.Status.Phase && api.PodFailed != p.Status.Phase && p.DeletionTimestamp == nil @@ -656,7 +706,9 @@ func IsPodActive(p api.Pod) bool { func FilterActiveReplicaSets(replicaSets []*extensions.ReplicaSet) []*extensions.ReplicaSet { active := []*extensions.ReplicaSet{} for i := range replicaSets { - if replicaSets[i].Spec.Replicas > 0 { + rs := replicaSets[i] + + if rs != nil && rs.Spec.Replicas > 0 { active = append(active, replicaSets[i]) } } @@ -666,7 +718,7 @@ func FilterActiveReplicaSets(replicaSets []*extensions.ReplicaSet) []*extensions // PodKey returns a key unique to the given pod within a cluster. // It's used so we consistently use the same key scheme in this module. // It does exactly what cache.MetaNamespaceKeyFunc would have done -// expcept there's not possibility for error since we know the exact type. +// except there's not possibility for error since we know the exact type. func PodKey(pod *api.Pod) string { return fmt.Sprintf("%v/%v", pod.Namespace, pod.Name) } @@ -676,7 +728,6 @@ type ControllersByCreationTimestamp []*api.ReplicationController func (o ControllersByCreationTimestamp) Len() int { return len(o) } func (o ControllersByCreationTimestamp) Swap(i, j int) { o[i], o[j] = o[j], o[i] } - func (o ControllersByCreationTimestamp) Less(i, j int) bool { if o[i].CreationTimestamp.Equal(o[j].CreationTimestamp) { return o[i].Name < o[j].Name @@ -684,15 +735,40 @@ func (o ControllersByCreationTimestamp) Less(i, j int) bool { return o[i].CreationTimestamp.Before(o[j].CreationTimestamp) } -// ReplicaSetsByCreationTimestamp sorts a list of ReplicationSets by creation timestamp, using their names as a tie breaker. +// ReplicaSetsByCreationTimestamp sorts a list of ReplicaSet by creation timestamp, using their names as a tie breaker. type ReplicaSetsByCreationTimestamp []*extensions.ReplicaSet func (o ReplicaSetsByCreationTimestamp) Len() int { return len(o) } func (o ReplicaSetsByCreationTimestamp) Swap(i, j int) { o[i], o[j] = o[j], o[i] } - func (o ReplicaSetsByCreationTimestamp) Less(i, j int) bool { if o[i].CreationTimestamp.Equal(o[j].CreationTimestamp) { return o[i].Name < o[j].Name } return o[i].CreationTimestamp.Before(o[j].CreationTimestamp) } + +// ReplicaSetsBySizeOlder sorts a list of ReplicaSet by size in descending order, using their creation timestamp or name as a tie breaker. +// By using the creation timestamp, this sorts from old to new replica sets. +type ReplicaSetsBySizeOlder []*extensions.ReplicaSet + +func (o ReplicaSetsBySizeOlder) Len() int { return len(o) } +func (o ReplicaSetsBySizeOlder) Swap(i, j int) { o[i], o[j] = o[j], o[i] } +func (o ReplicaSetsBySizeOlder) Less(i, j int) bool { + if o[i].Spec.Replicas == o[j].Spec.Replicas { + return ReplicaSetsByCreationTimestamp(o).Less(i, j) + } + return o[i].Spec.Replicas > o[j].Spec.Replicas +} + +// ReplicaSetsBySizeNewer sorts a list of ReplicaSet by size in descending order, using their creation timestamp or name as a tie breaker. +// By using the creation timestamp, this sorts from new to old replica sets. +type ReplicaSetsBySizeNewer []*extensions.ReplicaSet + +func (o ReplicaSetsBySizeNewer) Len() int { return len(o) } +func (o ReplicaSetsBySizeNewer) Swap(i, j int) { o[i], o[j] = o[j], o[i] } +func (o ReplicaSetsBySizeNewer) Less(i, j int) bool { + if o[i].Spec.Replicas == o[j].Spec.Replicas { + return ReplicaSetsByCreationTimestamp(o).Less(j, i) + } + return o[i].Spec.Replicas > o[j].Spec.Replicas +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/deployment/deployment.go b/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/deployment_util.go similarity index 52% rename from vendor/k8s.io/kubernetes/pkg/util/deployment/deployment.go rename to vendor/k8s.io/kubernetes/pkg/controller/deployment/util/deployment_util.go index 0442da42..8a920337 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/deployment/deployment.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/deployment/util/deployment_util.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,16 +14,18 @@ See the License for the specific language governing permissions and limitations under the License. */ -package deployment +package util import ( "fmt" + "sort" "strconv" "time" "github.com/golang/glog" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/annotations" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" @@ -39,15 +41,285 @@ import ( ) const ( - // The revision annotation of a deployment's replica sets which records its rollout sequence + // RevisionAnnotation is the revision annotation of a deployment's replica sets which records its rollout sequence RevisionAnnotation = "deployment.kubernetes.io/revision" + // DesiredReplicasAnnotation is the desired replicas for a deployment recorded as an annotation + // in its replica sets. Helps in separating scaling events from the rollout process and for + // determining if the new replica set for a deployment is really saturated. + DesiredReplicasAnnotation = "deployment.kubernetes.io/desired-replicas" + // MaxReplicasAnnotation is the maximum replicas a deployment can have at a given point, which + // is deployment.spec.replicas + maxSurge. Used by the underlying replica sets to estimate their + // proportions in case the deployment has surge replicas. + MaxReplicasAnnotation = "deployment.kubernetes.io/max-replicas" - // Here are the possible rollback event reasons - RollbackRevisionNotFound = "DeploymentRollbackRevisionNotFound" + // RollbackRevisionNotFound is not found rollback event reason + RollbackRevisionNotFound = "DeploymentRollbackRevisionNotFound" + // RollbackTemplateUnchanged is the template unchanged rollback event reason RollbackTemplateUnchanged = "DeploymentRollbackTemplateUnchanged" - RollbackDone = "DeploymentRollback" + // RollbackDone is the done rollback event reason + RollbackDone = "DeploymentRollback" + // OverlapAnnotation marks deployments with overlapping selector with other deployments + // TODO: Delete this annotation when we gracefully handle overlapping selectors. See https://github.com/kubernetes/kubernetes/issues/2210 + OverlapAnnotation = "deployment.kubernetes.io/error-selector-overlapping-with" + // SelectorUpdateAnnotation marks the last time deployment selector update + // TODO: Delete this annotation when we gracefully handle overlapping selectors. See https://github.com/kubernetes/kubernetes/issues/2210 + SelectorUpdateAnnotation = "deployment.kubernetes.io/selector-updated-at" ) +// MaxRevision finds the highest revision in the replica sets +func MaxRevision(allRSs []*extensions.ReplicaSet) int64 { + max := int64(0) + for _, rs := range allRSs { + if v, err := Revision(rs); err != nil { + // Skip the replica sets when it failed to parse their revision information + glog.V(4).Infof("Error: %v. Couldn't parse revision for replica set %#v, deployment controller will skip it when reconciling revisions.", err, rs) + } else if v > max { + max = v + } + } + return max +} + +// LastRevision finds the second max revision number in all replica sets (the last revision) +func LastRevision(allRSs []*extensions.ReplicaSet) int64 { + max, secMax := int64(0), int64(0) + for _, rs := range allRSs { + if v, err := Revision(rs); err != nil { + // Skip the replica sets when it failed to parse their revision information + glog.V(4).Infof("Error: %v. Couldn't parse revision for replica set %#v, deployment controller will skip it when reconciling revisions.", err, rs) + } else if v >= max { + secMax = max + max = v + } else if v > secMax { + secMax = v + } + } + return secMax +} + +// SetNewReplicaSetAnnotations sets new replica set's annotations appropriately by updating its revision and +// copying required deployment annotations to it; it returns true if replica set's annotation is changed. +func SetNewReplicaSetAnnotations(deployment *extensions.Deployment, newRS *extensions.ReplicaSet, newRevision string, exists bool) bool { + // First, copy deployment's annotations (except for apply and revision annotations) + annotationChanged := copyDeploymentAnnotationsToReplicaSet(deployment, newRS) + // Then, update replica set's revision annotation + if newRS.Annotations == nil { + newRS.Annotations = make(map[string]string) + } + // The newRS's revision should be the greatest among all RSes. Usually, its revision number is newRevision (the max revision number + // of all old RSes + 1). However, it's possible that some of the old RSes are deleted after the newRS revision being updated, and + // newRevision becomes smaller than newRS's revision. We should only update newRS revision when it's smaller than newRevision. + if newRS.Annotations[RevisionAnnotation] < newRevision { + newRS.Annotations[RevisionAnnotation] = newRevision + annotationChanged = true + glog.V(4).Infof("Updating replica set %q revision to %s", newRS.Name, newRevision) + } + if !exists && SetReplicasAnnotations(newRS, deployment.Spec.Replicas, deployment.Spec.Replicas+MaxSurge(*deployment)) { + annotationChanged = true + } + return annotationChanged +} + +var annotationsToSkip = map[string]bool{ + annotations.LastAppliedConfigAnnotation: true, + RevisionAnnotation: true, + DesiredReplicasAnnotation: true, + MaxReplicasAnnotation: true, + OverlapAnnotation: true, + SelectorUpdateAnnotation: true, +} + +// skipCopyAnnotation returns true if we should skip copying the annotation with the given annotation key +// TODO: How to decide which annotations should / should not be copied? +// See https://github.com/kubernetes/kubernetes/pull/20035#issuecomment-179558615 +func skipCopyAnnotation(key string) bool { + return annotationsToSkip[key] +} + +// copyDeploymentAnnotationsToReplicaSet copies deployment's annotations to replica set's annotations, +// and returns true if replica set's annotation is changed. +// Note that apply and revision annotations are not copied. +func copyDeploymentAnnotationsToReplicaSet(deployment *extensions.Deployment, rs *extensions.ReplicaSet) bool { + rsAnnotationsChanged := false + if rs.Annotations == nil { + rs.Annotations = make(map[string]string) + } + for k, v := range deployment.Annotations { + // newRS revision is updated automatically in getNewReplicaSet, and the deployment's revision number is then updated + // by copying its newRS revision number. We should not copy deployment's revision to its newRS, since the update of + // deployment revision number may fail (revision becomes stale) and the revision number in newRS is more reliable. + if skipCopyAnnotation(k) || rs.Annotations[k] == v { + continue + } + rs.Annotations[k] = v + rsAnnotationsChanged = true + } + return rsAnnotationsChanged +} + +// SetDeploymentAnnotationsTo sets deployment's annotations as given RS's annotations. +// This action should be done if and only if the deployment is rolling back to this rs. +// Note that apply and revision annotations are not changed. +func SetDeploymentAnnotationsTo(deployment *extensions.Deployment, rollbackToRS *extensions.ReplicaSet) { + deployment.Annotations = getSkippedAnnotations(deployment.Annotations) + for k, v := range rollbackToRS.Annotations { + if !skipCopyAnnotation(k) { + deployment.Annotations[k] = v + } + } +} + +func getSkippedAnnotations(annotations map[string]string) map[string]string { + skippedAnnotations := make(map[string]string) + for k, v := range annotations { + if skipCopyAnnotation(k) { + skippedAnnotations[k] = v + } + } + return skippedAnnotations +} + +// FindActiveOrLatest returns the only active or the latest replica set in case there is at most one active +// replica set. If there are more active replica sets, then we should proportionally scale them. +func FindActiveOrLatest(newRS *extensions.ReplicaSet, oldRSs []*extensions.ReplicaSet) *extensions.ReplicaSet { + if newRS == nil && len(oldRSs) == 0 { + return nil + } + + sort.Sort(sort.Reverse(controller.ReplicaSetsByCreationTimestamp(oldRSs))) + allRSs := controller.FilterActiveReplicaSets(append(oldRSs, newRS)) + + switch len(allRSs) { + case 0: + // If there is no active replica set then we should return the newest. + if newRS != nil { + return newRS + } + return oldRSs[0] + case 1: + return allRSs[0] + default: + return nil + } +} + +// GetDesiredReplicasAnnotation returns the number of desired replicas +func GetDesiredReplicasAnnotation(rs *extensions.ReplicaSet) (int32, bool) { + return getIntFromAnnotation(rs, DesiredReplicasAnnotation) +} + +func getMaxReplicasAnnotation(rs *extensions.ReplicaSet) (int32, bool) { + return getIntFromAnnotation(rs, MaxReplicasAnnotation) +} + +func getIntFromAnnotation(rs *extensions.ReplicaSet, annotationKey string) (int32, bool) { + annotationValue, ok := rs.Annotations[annotationKey] + if !ok { + return int32(0), false + } + intValue, err := strconv.Atoi(annotationValue) + if err != nil { + glog.Warningf("Cannot convert the value %q with annotation key %q for the replica set %q", + annotationValue, annotationKey, rs.Name) + return int32(0), false + } + return int32(intValue), true +} + +// SetReplicasAnnotations sets the desiredReplicas and maxReplicas into the annotations +func SetReplicasAnnotations(rs *extensions.ReplicaSet, desiredReplicas, maxReplicas int32) bool { + updated := false + if rs.Annotations == nil { + rs.Annotations = make(map[string]string) + } + desiredString := fmt.Sprintf("%d", desiredReplicas) + if hasString := rs.Annotations[DesiredReplicasAnnotation]; hasString != desiredString { + rs.Annotations[DesiredReplicasAnnotation] = desiredString + updated = true + } + maxString := fmt.Sprintf("%d", maxReplicas) + if hasString := rs.Annotations[MaxReplicasAnnotation]; hasString != maxString { + rs.Annotations[MaxReplicasAnnotation] = maxString + updated = true + } + return updated +} + +// MaxUnavailable returns the maximum unavailable pods a rolling deployment can take. +func MaxUnavailable(deployment extensions.Deployment) int32 { + if !IsRollingUpdate(&deployment) { + return int32(0) + } + // Error caught by validation + _, maxUnavailable, _ := ResolveFenceposts(&deployment.Spec.Strategy.RollingUpdate.MaxSurge, &deployment.Spec.Strategy.RollingUpdate.MaxUnavailable, deployment.Spec.Replicas) + return maxUnavailable +} + +// MinAvailable returns the minimum vailable pods of a given deployment +func MinAvailable(deployment *extensions.Deployment) int32 { + if !IsRollingUpdate(deployment) { + return int32(0) + } + return deployment.Spec.Replicas - MaxUnavailable(*deployment) +} + +// MaxSurge returns the maximum surge pods a rolling deployment can take. +func MaxSurge(deployment extensions.Deployment) int32 { + if !IsRollingUpdate(&deployment) { + return int32(0) + } + // Error caught by validation + maxSurge, _, _ := ResolveFenceposts(&deployment.Spec.Strategy.RollingUpdate.MaxSurge, &deployment.Spec.Strategy.RollingUpdate.MaxUnavailable, deployment.Spec.Replicas) + return maxSurge +} + +// GetProportion will estimate the proportion for the provided replica set using 1. the current size +// of the parent deployment, 2. the replica count that needs be added on the replica sets of the +// deployment, and 3. the total replicas added in the replica sets of the deployment so far. +func GetProportion(rs *extensions.ReplicaSet, d extensions.Deployment, deploymentReplicasToAdd, deploymentReplicasAdded int32) int32 { + if rs == nil || rs.Spec.Replicas == 0 || deploymentReplicasToAdd == 0 || deploymentReplicasToAdd == deploymentReplicasAdded { + return int32(0) + } + + rsFraction := getReplicaSetFraction(*rs, d) + allowed := deploymentReplicasToAdd - deploymentReplicasAdded + + if deploymentReplicasToAdd > 0 { + // Use the minimum between the replica set fraction and the maximum allowed replicas + // when scaling up. This way we ensure we will not scale up more than the allowed + // replicas we can add. + return integer.Int32Min(rsFraction, allowed) + } + // Use the maximum between the replica set fraction and the maximum allowed replicas + // when scaling down. This way we ensure we will not scale down more than the allowed + // replicas we can remove. + return integer.Int32Max(rsFraction, allowed) +} + +// getReplicaSetFraction estimates the fraction of replicas a replica set can have in +// 1. a scaling event during a rollout or 2. when scaling a paused deployment. +func getReplicaSetFraction(rs extensions.ReplicaSet, d extensions.Deployment) int32 { + // If we are scaling down to zero then the fraction of this replica set is its whole size (negative) + if d.Spec.Replicas == int32(0) { + return -rs.Spec.Replicas + } + + deploymentReplicas := d.Spec.Replicas + MaxSurge(d) + annotatedReplicas, ok := getMaxReplicasAnnotation(&rs) + if !ok { + // If we cannot find the annotation then fallback to the current deployment size. Note that this + // will not be an accurate proportion estimation in case other replica sets have different values + // which means that the deployment was scaled at some point but we at least will stay in limits + // due to the min-max comparisons in getProportion. + annotatedReplicas = d.Status.Replicas + } + + // We should never proportionally scale up from zero which means rs.spec.replicas and annotatedReplicas + // will never be zero here. + newRSsize := (float64(rs.Spec.Replicas * deploymentReplicas)) / float64(annotatedReplicas) + return integer.RoundToInt32(newRSsize) - rs.Spec.Replicas +} + // GetAllReplicaSets returns the old and new replica sets targeted by the given Deployment. It gets PodList and ReplicaSetList from client interface. // Note that the first set of old replica sets doesn't include the ones with no pods, and the second set of old replica sets include all old replica sets. // The third returned value is the new replica set, and it may be nil if it doesn't exist yet. @@ -146,17 +418,26 @@ func ListPods(deployment *extensions.Deployment, getPodList podListFunc) (*api.P // (e.g. the addition of a new field will cause the hash code to change) // Note that we assume input podTemplateSpecs contain non-empty labels func equalIgnoreHash(template1, template2 api.PodTemplateSpec) (bool, error) { + // First, compare template.Labels (ignoring hash) + labels1, labels2 := template1.Labels, template2.Labels // The podTemplateSpec must have a non-empty label so that label selectors can find them. // This is checked by validation (of resources contain a podTemplateSpec). - if len(template1.Labels) == 0 || len(template2.Labels) == 0 { + if len(labels1) == 0 || len(labels2) == 0 { return false, fmt.Errorf("Unexpected empty labels found in given template") } - hash1 := template1.Labels[extensions.DefaultDeploymentUniqueLabelKey] - hash2 := template2.Labels[extensions.DefaultDeploymentUniqueLabelKey] - // compare equality ignoring pod-template-hash - template1.Labels[extensions.DefaultDeploymentUniqueLabelKey] = hash2 + if len(labels1) > len(labels2) { + labels1, labels2 = labels2, labels1 + } + // We make sure len(labels2) >= len(labels1) + for k, v := range labels2 { + if labels1[k] != v && k != extensions.DefaultDeploymentUniqueLabelKey { + return false, nil + } + } + + // Then, compare the templates without comparing their labels + template1.Labels, template2.Labels = nil, nil result := api.Semantic.DeepEqual(template1, template2) - template1.Labels[extensions.DefaultDeploymentUniqueLabelKey] = hash1 return result, nil } @@ -219,6 +500,7 @@ func FindOldReplicaSets(deployment *extensions.Deployment, rsList []extensions.R return requiredRSs, allRSs, nil } +// WaitForReplicaSetUpdated polls the replica set until it is updated. func WaitForReplicaSetUpdated(c clientset.Interface, desiredGeneration int64, namespace, name string) error { return wait.Poll(10*time.Millisecond, 1*time.Minute, func() (bool, error) { rs, err := c.Extensions().ReplicaSets(namespace).Get(name) @@ -229,6 +511,7 @@ func WaitForReplicaSetUpdated(c clientset.Interface, desiredGeneration int64, na }) } +// WaitForPodsHashPopulated polls the replica set until updated and fully labeled. func WaitForPodsHashPopulated(c clientset.Interface, desiredGeneration int64, namespace, name string) error { return wait.Poll(1*time.Second, 1*time.Minute, func() (bool, error) { rs, err := c.Extensions().ReplicaSets(namespace).Get(name) @@ -269,7 +552,7 @@ func LabelPodsWithHash(podList *api.PodList, rs *extensions.ReplicaSet, c client return allPodsLabeled, nil } -// Returns the desired PodTemplateSpec for the new ReplicaSet corresponding to the given ReplicaSet. +// GetNewReplicaSetTemplate returns the desired PodTemplateSpec for the new ReplicaSet corresponding to the given ReplicaSet. func GetNewReplicaSetTemplate(deployment *extensions.Deployment) api.PodTemplateSpec { // newRS will have the same template as in deployment spec, plus a unique label in some cases. newRSTemplate := api.PodTemplateSpec{ @@ -293,7 +576,7 @@ func SetFromReplicaSetTemplate(deployment *extensions.Deployment, template api.P return deployment } -// Returns the sum of Replicas of the given replica sets. +// GetReplicaCountForReplicaSets returns the sum of Replicas of the given replica sets. func GetReplicaCountForReplicaSets(replicaSets []*extensions.ReplicaSet) int32 { totalReplicaCount := int32(0) for _, rs := range replicaSets { @@ -327,7 +610,7 @@ func GetAvailablePodsForReplicaSets(c clientset.Interface, deployment *extension // CountAvailablePodsForReplicaSets returns the number of available pods corresponding to the given pod list and replica sets. // Note that the input pod list should be the pods targeted by the deployment of input replica sets. func CountAvailablePodsForReplicaSets(podList *api.PodList, rss []*extensions.ReplicaSet, minReadySeconds int32) (int32, error) { - rsPods, err := filterPodsMatchingReplicaSets(rss, podList) + rsPods, err := filterPodsMatchingReplicaSets(rss, podList, minReadySeconds) if err != nil { return 0, err } @@ -335,26 +618,30 @@ func CountAvailablePodsForReplicaSets(podList *api.PodList, rss []*extensions.Re } // GetAvailablePodsForDeployment returns the number of available pods (listed from clientset) corresponding to the given deployment. -func GetAvailablePodsForDeployment(c clientset.Interface, deployment *extensions.Deployment, minReadySeconds int32) (int32, error) { +func GetAvailablePodsForDeployment(c clientset.Interface, deployment *extensions.Deployment) (int32, error) { podList, err := listPods(deployment, c) if err != nil { return 0, err } - return countAvailablePods(podList.Items, minReadySeconds), nil + return countAvailablePods(podList.Items, deployment.Spec.MinReadySeconds), nil } func countAvailablePods(pods []api.Pod, minReadySeconds int32) int32 { availablePodCount := int32(0) for _, pod := range pods { - if IsPodAvailable(&pod, minReadySeconds) { + // TODO: Make the time.Now() as argument to allow unit test this. + // FIXME: avoid using time.Now + if IsPodAvailable(&pod, minReadySeconds, time.Now()) { + glog.V(4).Infof("Pod %s/%s is available.", pod.Namespace, pod.Name) availablePodCount++ } } return availablePodCount } -func IsPodAvailable(pod *api.Pod, minReadySeconds int32) bool { - if !controller.IsPodActive(*pod) { +// IsPodAvailable return true if the pod is available. +func IsPodAvailable(pod *api.Pod, minReadySeconds int32, now time.Time) bool { + if !controller.IsPodActive(pod) { return false } // Check if we've passed minReadySeconds since LastTransitionTime @@ -362,11 +649,12 @@ func IsPodAvailable(pod *api.Pod, minReadySeconds int32) bool { for _, c := range pod.Status.Conditions { // we only care about pod ready conditions if c.Type == api.PodReady && c.Status == api.ConditionTrue { + glog.V(4).Infof("Comparing pod %s/%s ready condition last transition time %s + minReadySeconds %d with now %s.", pod.Namespace, pod.Name, c.LastTransitionTime.String(), minReadySeconds, now.String()) // 2 cases that this ready condition is valid (passed minReadySeconds, i.e. the pod is available): // 1. minReadySeconds == 0, or // 2. LastTransitionTime (is set) + minReadySeconds (>0) < current time minReadySecondsDuration := time.Duration(minReadySeconds) * time.Second - if minReadySeconds == 0 || !c.LastTransitionTime.IsZero() && c.LastTransitionTime.Add(minReadySecondsDuration).Before(time.Now()) { + if minReadySeconds == 0 || !c.LastTransitionTime.IsZero() && c.LastTransitionTime.Add(minReadySecondsDuration).Before(now) { return true } } @@ -375,8 +663,8 @@ func IsPodAvailable(pod *api.Pod, minReadySeconds int32) bool { } // filterPodsMatchingReplicaSets filters the given pod list and only return the ones targeted by the input replicasets -func filterPodsMatchingReplicaSets(replicaSets []*extensions.ReplicaSet, podList *api.PodList) ([]api.Pod, error) { - rsPods := []api.Pod{} +func filterPodsMatchingReplicaSets(replicaSets []*extensions.ReplicaSet, podList *api.PodList, minReadySeconds int32) ([]api.Pod, error) { + allRSPods := []api.Pod{} for _, rs := range replicaSets { matchingFunc, err := rsutil.MatchingPodsFunc(rs) if err != nil { @@ -385,9 +673,16 @@ func filterPodsMatchingReplicaSets(replicaSets []*extensions.ReplicaSet, podList if matchingFunc == nil { continue } - rsPods = append(rsPods, podutil.Filter(podList, matchingFunc)...) + rsPods := podutil.Filter(podList, matchingFunc) + avaPodsCount := countAvailablePods(rsPods, minReadySeconds) + if avaPodsCount > rs.Spec.Replicas { + msg := fmt.Sprintf("Found %s/%s with %d available pods, more than its spec replicas %d", rs.Namespace, rs.Name, avaPodsCount, rs.Spec.Replicas) + glog.Errorf("ERROR: %s", msg) + return nil, fmt.Errorf(msg) + } + allRSPods = append(allRSPods, podutil.Filter(podList, matchingFunc)...) } - return rsPods, nil + return allRSPods, nil } // Revision returns the revision number of the input replica set @@ -399,6 +694,7 @@ func Revision(rs *extensions.ReplicaSet) (int64, error) { return strconv.ParseInt(v, 10, 64) } +// IsRollingUpdate returns true if the strategy type is a rolling update. func IsRollingUpdate(deployment *extensions.Deployment) bool { return deployment.Spec.Strategy.Type == extensions.RollingUpdateDeploymentStrategyType } @@ -434,7 +730,22 @@ func NewRSNewReplicas(deployment *extensions.Deployment, allRSs []*extensions.Re } } -// Polls for deployment to be updated so that deployment.Status.ObservedGeneration >= desiredGeneration. +// IsSaturated checks if the new replica set is saturated by comparing its size with its deployment size. +// Both the deployment and the replica set have to believe this replica set can own all of the desired +// replicas in the deployment and the annotation helps in achieving that. +func IsSaturated(deployment *extensions.Deployment, rs *extensions.ReplicaSet) bool { + if rs == nil { + return false + } + desiredString := rs.Annotations[DesiredReplicasAnnotation] + desired, err := strconv.Atoi(desiredString) + if err != nil { + return false + } + return rs.Spec.Replicas == deployment.Spec.Replicas && int32(desired) == deployment.Spec.Replicas +} + +// WaitForObservedDeployment polls for deployment to be updated so that deployment.Status.ObservedGeneration >= desiredGeneration. // Returns error if polling timesout. func WaitForObservedDeployment(getDeploymentFunc func() (*extensions.Deployment, error), desiredGeneration int64, interval, timeout time.Duration) error { // TODO: This should take clientset.Interface when all code is updated to use clientset. Keeping it this way allows the function to be used by callers who have client.Interface. @@ -476,3 +787,54 @@ func ResolveFenceposts(maxSurge, maxUnavailable *intstrutil.IntOrString, desired return int32(surge), int32(unavailable), nil } + +func DeploymentDeepCopy(deployment *extensions.Deployment) (*extensions.Deployment, error) { + objCopy, err := api.Scheme.DeepCopy(deployment) + if err != nil { + return nil, err + } + copied, ok := objCopy.(*extensions.Deployment) + if !ok { + return nil, fmt.Errorf("expected Deployment, got %#v", objCopy) + } + return copied, nil +} + +// SelectorUpdatedBefore returns true if the former deployment's selector +// is updated before the latter, false otherwise +func SelectorUpdatedBefore(d1, d2 *extensions.Deployment) bool { + t1, t2 := LastSelectorUpdate(d1), LastSelectorUpdate(d2) + return t1.Before(t2) +} + +// LastSelectorUpdate returns the last time given deployment's selector is updated +func LastSelectorUpdate(d *extensions.Deployment) unversioned.Time { + t := d.Annotations[SelectorUpdateAnnotation] + if len(t) > 0 { + parsedTime, err := time.Parse(t, time.RFC3339) + // If failed to parse the time, use creation timestamp instead + if err != nil { + return d.CreationTimestamp + } + return unversioned.Time{Time: parsedTime} + } + // If it's never updated, use creation timestamp instead + return d.CreationTimestamp +} + +// BySelectorLastUpdateTime sorts a list of deployments by the last update time of their selector, +// first using their creation timestamp and then their names as a tie breaker. +type BySelectorLastUpdateTime []extensions.Deployment + +func (o BySelectorLastUpdateTime) Len() int { return len(o) } +func (o BySelectorLastUpdateTime) Swap(i, j int) { o[i], o[j] = o[j], o[i] } +func (o BySelectorLastUpdateTime) Less(i, j int) bool { + ti, tj := LastSelectorUpdate(&o[i]), LastSelectorUpdate(&o[j]) + if ti.Equal(tj) { + if o[i].CreationTimestamp.Equal(o[j].CreationTimestamp) { + return o[i].Name < o[j].Name + } + return o[i].CreationTimestamp.Before(o[j].CreationTimestamp) + } + return ti.Before(tj) +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/doc.go b/vendor/k8s.io/kubernetes/pkg/controller/doc.go index 1e310b46..ded39058 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/framework/controller.go b/vendor/k8s.io/kubernetes/pkg/controller/framework/controller.go index c6363952..8cbd124a 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/framework/controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/framework/controller.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/framework/doc.go b/vendor/k8s.io/kubernetes/pkg/controller/framework/doc.go index ecd3cf28..feceba36 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/framework/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/framework/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/framework/fake_controller_source.go b/vendor/k8s.io/kubernetes/pkg/controller/framework/fake_controller_source.go index 9e90e7c9..ee00c058 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/framework/fake_controller_source.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/framework/fake_controller_source.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/framework/informers/core.go b/vendor/k8s.io/kubernetes/pkg/controller/framework/informers/core.go new file mode 100644 index 00000000..a4f40b58 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/framework/informers/core.go @@ -0,0 +1,203 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package informers + +import ( + "reflect" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/cache" + "k8s.io/kubernetes/pkg/controller/framework" +) + +// PodInformer is type of SharedIndexInformer which watches and lists all pods. +// Interface provides constructor for informer and lister for pods +type PodInformer interface { + Informer() framework.SharedIndexInformer + Lister() *cache.StoreToPodLister +} + +type podInformer struct { + *sharedInformerFactory +} + +// Informer checks whether podInformer exists in sharedInformerFactory and if not, it creates new informer of type +// podInformer and connects it to sharedInformerFactory +func (f *podInformer) Informer() framework.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(&api.Pod{}) + informer, exists := f.informers[informerType] + if exists { + return informer + } + informer = NewPodInformer(f.client, f.defaultResync) + f.informers[informerType] = informer + + return informer +} + +// Lister returns lister for podInformer +func (f *podInformer) Lister() *cache.StoreToPodLister { + informer := f.Informer() + return &cache.StoreToPodLister{Indexer: informer.GetIndexer()} +} + +//***************************************************************************** + +// NamespaceInformer is type of SharedIndexInformer which watches and lists all namespaces. +// Interface provides constructor for informer and lister for namsespaces +type NamespaceInformer interface { + Informer() framework.SharedIndexInformer + Lister() *cache.IndexerToNamespaceLister +} + +type namespaceInformer struct { + *sharedInformerFactory +} + +// Informer checks whether namespaceInformer exists in sharedInformerFactory and if not, it creates new informer of type +// namespaceInformer and connects it to sharedInformerFactory +func (f *namespaceInformer) Informer() framework.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(&api.Namespace{}) + informer, exists := f.informers[informerType] + if exists { + return informer + } + informer = NewNamespaceInformer(f.client, f.defaultResync) + f.informers[informerType] = informer + + return informer +} + +// Lister returns lister for namespaceInformer +func (f *namespaceInformer) Lister() *cache.IndexerToNamespaceLister { + informer := f.Informer() + return &cache.IndexerToNamespaceLister{Indexer: informer.GetIndexer()} +} + +//***************************************************************************** + +// NodeInformer is type of SharedIndexInformer which watches and lists all nodes. +// Interface provides constructor for informer and lister for nodes +type NodeInformer interface { + Informer() framework.SharedIndexInformer + Lister() *cache.StoreToNodeLister +} + +type nodeInformer struct { + *sharedInformerFactory +} + +// Informer checks whether nodeInformer exists in sharedInformerFactory and if not, it creates new informer of type +// nodeInformer and connects it to sharedInformerFactory +func (f *nodeInformer) Informer() framework.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(&api.Node{}) + informer, exists := f.informers[informerType] + if exists { + return informer + } + informer = NewNodeInformer(f.client, f.defaultResync) + f.informers[informerType] = informer + + return informer +} + +// Lister returns lister for nodeInformer +func (f *nodeInformer) Lister() *cache.StoreToNodeLister { + informer := f.Informer() + return &cache.StoreToNodeLister{Store: informer.GetStore()} +} + +//***************************************************************************** + +// PVCInformer is type of SharedIndexInformer which watches and lists all persistent volume claims. +// Interface provides constructor for informer and lister for persistent volume claims +type PVCInformer interface { + Informer() framework.SharedIndexInformer + Lister() *cache.StoreToPVCFetcher +} + +type pvcInformer struct { + *sharedInformerFactory +} + +// Informer checks whether pvcInformer exists in sharedInformerFactory and if not, it creates new informer of type +// pvcInformer and connects it to sharedInformerFactory +func (f *pvcInformer) Informer() framework.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(&api.PersistentVolumeClaim{}) + informer, exists := f.informers[informerType] + if exists { + return informer + } + informer = NewPVCInformer(f.client, f.defaultResync) + f.informers[informerType] = informer + + return informer +} + +// Lister returns lister for pvcInformer +func (f *pvcInformer) Lister() *cache.StoreToPVCFetcher { + informer := f.Informer() + return &cache.StoreToPVCFetcher{Store: informer.GetStore()} +} + +//***************************************************************************** + +// PVInformer is type of SharedIndexInformer which watches and lists all persistent volumes. +// Interface provides constructor for informer and lister for persistent volumes +type PVInformer interface { + Informer() framework.SharedIndexInformer + Lister() *cache.StoreToPVFetcher +} + +type pvInformer struct { + *sharedInformerFactory +} + +// Informer checks whether pvInformer exists in sharedInformerFactory and if not, it creates new informer of type +// pvInformer and connects it to sharedInformerFactory +func (f *pvInformer) Informer() framework.SharedIndexInformer { + f.lock.Lock() + defer f.lock.Unlock() + + informerType := reflect.TypeOf(&api.PersistentVolume{}) + informer, exists := f.informers[informerType] + if exists { + return informer + } + informer = NewPVInformer(f.client, f.defaultResync) + f.informers[informerType] = informer + + return informer +} + +// Lister returns lister for pvInformer +func (f *pvInformer) Lister() *cache.StoreToPVFetcher { + informer := f.Informer() + return &cache.StoreToPVFetcher{Store: informer.GetStore()} +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/framework/informers/factory.go b/vendor/k8s.io/kubernetes/pkg/controller/framework/informers/factory.go new file mode 100644 index 00000000..de1a6918 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/framework/informers/factory.go @@ -0,0 +1,193 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package informers + +import ( + "reflect" + "sync" + "time" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/client/cache" + clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + "k8s.io/kubernetes/pkg/controller/framework" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/watch" +) + +// SharedInformerFactory provides interface which holds unique informers for pods, nodes, namespaces, persistent volume +// claims and persistent volumes +type SharedInformerFactory interface { + // Start starts informers that can start AFTER the API server and controllers have started + Start(stopCh <-chan struct{}) + + Pods() PodInformer + Nodes() NodeInformer + Namespaces() NamespaceInformer + PersistentVolumeClaims() PVCInformer + PersistentVolumes() PVInformer +} + +type sharedInformerFactory struct { + client clientset.Interface + lock sync.Mutex + defaultResync time.Duration + + informers map[reflect.Type]framework.SharedIndexInformer + // startedInformers is used for tracking which informers have been started + // this allows calling of Start method multiple times + startedInformers map[reflect.Type]bool +} + +// NewSharedInformerFactory constructs a new instance of sharedInformerFactory +func NewSharedInformerFactory(client clientset.Interface, defaultResync time.Duration) SharedInformerFactory { + return &sharedInformerFactory{ + client: client, + defaultResync: defaultResync, + informers: make(map[reflect.Type]framework.SharedIndexInformer), + startedInformers: make(map[reflect.Type]bool), + } +} + +// Start initializes all requested informers. +func (s *sharedInformerFactory) Start(stopCh <-chan struct{}) { + s.lock.Lock() + defer s.lock.Unlock() + + for informerType, informer := range s.informers { + if !s.startedInformers[informerType] { + go informer.Run(stopCh) + s.startedInformers[informerType] = true + } + } +} + +// Pods returns a SharedIndexInformer that lists and watches all pods +func (f *sharedInformerFactory) Pods() PodInformer { + return &podInformer{sharedInformerFactory: f} +} + +// Nodes returns a SharedIndexInformer that lists and watches all nodes +func (f *sharedInformerFactory) Nodes() NodeInformer { + return &nodeInformer{sharedInformerFactory: f} +} + +// Namespaces returns a SharedIndexInformer that lists and watches all namespaces +func (f *sharedInformerFactory) Namespaces() NamespaceInformer { + return &namespaceInformer{sharedInformerFactory: f} +} + +// PersistentVolumeClaims returns a SharedIndexInformer that lists and watches all persistent volume claims +func (f *sharedInformerFactory) PersistentVolumeClaims() PVCInformer { + return &pvcInformer{sharedInformerFactory: f} +} + +// PersistentVolumes returns a SharedIndexInformer that lists and watches all persistent volumes +func (f *sharedInformerFactory) PersistentVolumes() PVInformer { + return &pvInformer{sharedInformerFactory: f} +} + +// NewPodInformer returns a SharedIndexInformer that lists and watches all pods +func NewPodInformer(client clientset.Interface, resyncPeriod time.Duration) framework.SharedIndexInformer { + sharedIndexInformer := framework.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options api.ListOptions) (runtime.Object, error) { + return client.Core().Pods(api.NamespaceAll).List(options) + }, + WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + return client.Core().Pods(api.NamespaceAll).Watch(options) + }, + }, + &api.Pod{}, + resyncPeriod, + cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, + ) + + return sharedIndexInformer +} + +// NewNodeInformer returns a SharedIndexInformer that lists and watches all nodes +func NewNodeInformer(client clientset.Interface, resyncPeriod time.Duration) framework.SharedIndexInformer { + sharedIndexInformer := framework.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options api.ListOptions) (runtime.Object, error) { + return client.Core().Nodes().List(options) + }, + WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + return client.Core().Nodes().Watch(options) + }, + }, + &api.Node{}, + resyncPeriod, + cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) + + return sharedIndexInformer +} + +// NewPVCInformer returns a SharedIndexInformer that lists and watches all PVCs +func NewPVCInformer(client clientset.Interface, resyncPeriod time.Duration) framework.SharedIndexInformer { + sharedIndexInformer := framework.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options api.ListOptions) (runtime.Object, error) { + return client.Core().PersistentVolumeClaims(api.NamespaceAll).List(options) + }, + WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + return client.Core().PersistentVolumeClaims(api.NamespaceAll).Watch(options) + }, + }, + &api.PersistentVolumeClaim{}, + resyncPeriod, + cache.Indexers{}) + + return sharedIndexInformer +} + +// NewPVInformer returns a SharedIndexInformer that lists and watches all PVs +func NewPVInformer(client clientset.Interface, resyncPeriod time.Duration) framework.SharedIndexInformer { + sharedIndexInformer := framework.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options api.ListOptions) (runtime.Object, error) { + return client.Core().PersistentVolumes().List(options) + }, + WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + return client.Core().PersistentVolumes().Watch(options) + }, + }, + &api.PersistentVolume{}, + resyncPeriod, + cache.Indexers{}) + + return sharedIndexInformer +} + +// NewNamespaceInformer returns a SharedIndexInformer that lists and watches namespaces +func NewNamespaceInformer(client clientset.Interface, resyncPeriod time.Duration) framework.SharedIndexInformer { + sharedIndexInformer := framework.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options api.ListOptions) (runtime.Object, error) { + return client.Core().Namespaces().List(options) + }, + WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + return client.Core().Namespaces().Watch(options) + }, + }, + &api.Namespace{}, + resyncPeriod, + cache.Indexers{}) + + return sharedIndexInformer +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/framework/mutation_detector.go b/vendor/k8s.io/kubernetes/pkg/controller/framework/mutation_detector.go index 277641ef..a64dacf7 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/framework/mutation_detector.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/framework/mutation_detector.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/framework/shared_informer.go b/vendor/k8s.io/kubernetes/pkg/controller/framework/shared_informer.go index 419566e7..b1e78627 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/framework/shared_informer.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/framework/shared_informer.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -91,10 +91,6 @@ type sharedIndexInformer struct { started bool startedLock sync.Mutex - - // blockDeltas gives a way to stop all event distribution so that a late event handler - // can safely join the shared informer. - blockDeltas sync.Mutex } // dummyController hides the fact that a SharedInformer is different from a dedicated one @@ -207,35 +203,16 @@ func (s *sharedIndexInformer) AddEventHandler(handler ResourceEventHandler) erro s.startedLock.Lock() defer s.startedLock.Unlock() - if !s.started { - listener := newProcessListener(handler) - s.processor.listeners = append(s.processor.listeners, listener) - return nil + if s.started { + return fmt.Errorf("informer has already started") } - // in order to safely join, we have to - // stop sending add/update/delete notification - // do a list against the store - // send synthetic "Add" events to the new handler - // unblock - s.blockDeltas.Lock() - defer s.blockDeltas.Unlock() - listener := newProcessListener(handler) s.processor.listeners = append(s.processor.listeners, listener) - - items := s.indexer.List() - for i := range items { - listener.add(addNotification{newObj: items[i]}) - } - return nil } func (s *sharedIndexInformer) HandleDeltas(obj interface{}) error { - s.blockDeltas.Lock() - defer s.blockDeltas.Unlock() - // from oldest to newest for _, d := range obj.(cache.Deltas) { switch d.Type { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/lookup_cache.go b/vendor/k8s.io/kubernetes/pkg/controller/lookup_cache.go index 0333eff3..84029c5f 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/lookup_cache.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/lookup_cache.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replication/doc.go b/vendor/k8s.io/kubernetes/pkg/controller/replication/doc.go new file mode 100644 index 00000000..eb0f4215 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/replication/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package replication contains logic for watching and synchronizing +// replication controllers. +package replication diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replication/replication_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/replication/replication_controller.go new file mode 100644 index 00000000..679ca827 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/replication/replication_controller.go @@ -0,0 +1,738 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// If you make changes to this file, you should also make the corresponding change in ReplicaSet. + +package replication + +import ( + "reflect" + "sort" + "sync" + "time" + + "github.com/golang/glog" + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/client/cache" + clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned" + "k8s.io/kubernetes/pkg/client/record" + "k8s.io/kubernetes/pkg/controller" + "k8s.io/kubernetes/pkg/controller/framework" + "k8s.io/kubernetes/pkg/controller/framework/informers" + "k8s.io/kubernetes/pkg/labels" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util" + utilerrors "k8s.io/kubernetes/pkg/util/errors" + "k8s.io/kubernetes/pkg/util/metrics" + utilruntime "k8s.io/kubernetes/pkg/util/runtime" + "k8s.io/kubernetes/pkg/util/wait" + "k8s.io/kubernetes/pkg/util/workqueue" + "k8s.io/kubernetes/pkg/watch" +) + +const ( + // We'll attempt to recompute the required replicas of all replication controllers + // that have fulfilled their expectations at least this often. This recomputation + // happens based on contents in local pod storage. + // Full Resync shouldn't be needed at all in a healthy system. This is a protection + // against disappearing objects and watch notification, that we believe should not + // happen at all. + // TODO: We should get rid of it completely in the fullness of time. + FullControllerResyncPeriod = 10 * time.Minute + + // Realistic value of the burstReplica field for the replication manager based off + // performance requirements for kubernetes 1.0. + BurstReplicas = 500 + + // We must avoid counting pods until the pod store has synced. If it hasn't synced, to + // avoid a hot loop, we'll wait this long between checks. + PodStoreSyncedPollPeriod = 100 * time.Millisecond + + // The number of times we retry updating a replication controller's status. + statusUpdateRetries = 1 +) + +func getRCKind() unversioned.GroupVersionKind { + return v1.SchemeGroupVersion.WithKind("ReplicationController") +} + +// ReplicationManager is responsible for synchronizing ReplicationController objects stored +// in the system with actual running pods. +// TODO: this really should be called ReplicationController. The only reason why it's a Manager +// is to distinguish this type from API object "ReplicationController". We should fix this. +type ReplicationManager struct { + kubeClient clientset.Interface + podControl controller.PodControlInterface + + // internalPodInformer is used to hold a personal informer. If we're using + // a normal shared informer, then the informer will be started for us. If + // we have a personal informer, we must start it ourselves. If you start + // the controller using NewReplicationManager(passing SharedInformer), this + // will be null + internalPodInformer framework.SharedIndexInformer + + // An rc is temporarily suspended after creating/deleting these many replicas. + // It resumes normal action after observing the watch events for them. + burstReplicas int + // To allow injection of syncReplicationController for testing. + syncHandler func(rcKey string) error + + // A TTLCache of pod creates/deletes each rc expects to see. + expectations *controller.UIDTrackingControllerExpectations + + // A store of replication controllers, populated by the rcController + rcStore cache.StoreToReplicationControllerLister + // Watches changes to all replication controllers + rcController *framework.Controller + // A store of pods, populated by the podController + podStore cache.StoreToPodLister + // Watches changes to all pods + podController framework.ControllerInterface + // podStoreSynced returns true if the pod store has been synced at least once. + // Added as a member to the struct to allow injection for testing. + podStoreSynced func() bool + + lookupCache *controller.MatchingCache + + // Controllers that need to be synced + queue workqueue.RateLimitingInterface + + // garbageCollectorEnabled denotes if the garbage collector is enabled. RC + // manager behaves differently if GC is enabled. + garbageCollectorEnabled bool +} + +// NewReplicationManager creates a replication manager +func NewReplicationManager(podInformer framework.SharedIndexInformer, kubeClient clientset.Interface, resyncPeriod controller.ResyncPeriodFunc, burstReplicas int, lookupCacheSize int, garbageCollectorEnabled bool) *ReplicationManager { + eventBroadcaster := record.NewBroadcaster() + eventBroadcaster.StartLogging(glog.Infof) + eventBroadcaster.StartRecordingToSink(&unversionedcore.EventSinkImpl{Interface: kubeClient.Core().Events("")}) + return newReplicationManager( + eventBroadcaster.NewRecorder(api.EventSource{Component: "replication-controller"}), + podInformer, kubeClient, resyncPeriod, burstReplicas, lookupCacheSize, garbageCollectorEnabled) +} + +// newReplicationManager configures a replication manager with the specified event recorder +func newReplicationManager(eventRecorder record.EventRecorder, podInformer framework.SharedIndexInformer, kubeClient clientset.Interface, resyncPeriod controller.ResyncPeriodFunc, burstReplicas int, lookupCacheSize int, garbageCollectorEnabled bool) *ReplicationManager { + if kubeClient != nil && kubeClient.Core().GetRESTClient().GetRateLimiter() != nil { + metrics.RegisterMetricAndTrackRateLimiterUsage("replication_controller", kubeClient.Core().GetRESTClient().GetRateLimiter()) + } + + rm := &ReplicationManager{ + kubeClient: kubeClient, + podControl: controller.RealPodControl{ + KubeClient: kubeClient, + Recorder: eventRecorder, + }, + burstReplicas: burstReplicas, + expectations: controller.NewUIDTrackingControllerExpectations(controller.NewControllerExpectations()), + queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "replicationmanager"), + garbageCollectorEnabled: garbageCollectorEnabled, + } + + rm.rcStore.Indexer, rm.rcController = framework.NewIndexerInformer( + &cache.ListWatch{ + ListFunc: func(options api.ListOptions) (runtime.Object, error) { + return rm.kubeClient.Core().ReplicationControllers(api.NamespaceAll).List(options) + }, + WatchFunc: func(options api.ListOptions) (watch.Interface, error) { + return rm.kubeClient.Core().ReplicationControllers(api.NamespaceAll).Watch(options) + }, + }, + &api.ReplicationController{}, + // TODO: Can we have much longer period here? + FullControllerResyncPeriod, + framework.ResourceEventHandlerFuncs{ + AddFunc: rm.enqueueController, + UpdateFunc: rm.updateRC, + // This will enter the sync loop and no-op, because the controller has been deleted from the store. + // Note that deleting a controller immediately after scaling it to 0 will not work. The recommended + // way of achieving this is by performing a `stop` operation on the controller. + DeleteFunc: rm.enqueueController, + }, + cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, + ) + + podInformer.AddEventHandler(framework.ResourceEventHandlerFuncs{ + AddFunc: rm.addPod, + // This invokes the rc for every pod change, eg: host assignment. Though this might seem like overkill + // the most frequent pod update is status, and the associated rc will only list from local storage, so + // it should be ok. + UpdateFunc: rm.updatePod, + DeleteFunc: rm.deletePod, + }) + rm.podStore.Indexer = podInformer.GetIndexer() + rm.podController = podInformer.GetController() + + rm.syncHandler = rm.syncReplicationController + rm.podStoreSynced = rm.podController.HasSynced + rm.lookupCache = controller.NewMatchingCache(lookupCacheSize) + return rm +} + +// NewReplicationManagerFromClientForIntegration creates a new ReplicationManager that runs its own informer. It disables event recording for use in integration tests. +func NewReplicationManagerFromClientForIntegration(kubeClient clientset.Interface, resyncPeriod controller.ResyncPeriodFunc, burstReplicas int, lookupCacheSize int) *ReplicationManager { + podInformer := informers.NewPodInformer(kubeClient, resyncPeriod()) + garbageCollectorEnabled := false + rm := newReplicationManager(&record.FakeRecorder{}, podInformer, kubeClient, resyncPeriod, burstReplicas, lookupCacheSize, garbageCollectorEnabled) + rm.internalPodInformer = podInformer + return rm +} + +// NewReplicationManagerFromClient creates a new ReplicationManager that runs its own informer. +func NewReplicationManagerFromClient(kubeClient clientset.Interface, resyncPeriod controller.ResyncPeriodFunc, burstReplicas int, lookupCacheSize int) *ReplicationManager { + podInformer := informers.NewPodInformer(kubeClient, resyncPeriod()) + garbageCollectorEnabled := false + rm := NewReplicationManager(podInformer, kubeClient, resyncPeriod, burstReplicas, lookupCacheSize, garbageCollectorEnabled) + rm.internalPodInformer = podInformer + + return rm +} + +// SetEventRecorder replaces the event recorder used by the replication manager +// with the given recorder. Only used for testing. +func (rm *ReplicationManager) SetEventRecorder(recorder record.EventRecorder) { + // TODO: Hack. We can't cleanly shutdown the event recorder, so benchmarks + // need to pass in a fake. + rm.podControl = controller.RealPodControl{KubeClient: rm.kubeClient, Recorder: recorder} +} + +// Run begins watching and syncing. +func (rm *ReplicationManager) Run(workers int, stopCh <-chan struct{}) { + defer utilruntime.HandleCrash() + glog.Infof("Starting RC Manager") + go rm.rcController.Run(stopCh) + go rm.podController.Run(stopCh) + for i := 0; i < workers; i++ { + go wait.Until(rm.worker, time.Second, stopCh) + } + + if rm.internalPodInformer != nil { + go rm.internalPodInformer.Run(stopCh) + } + + <-stopCh + glog.Infof("Shutting down RC Manager") + rm.queue.ShutDown() +} + +// getPodController returns the controller managing the given pod. +// TODO: Surface that we are ignoring multiple controllers for a single pod. +// TODO: use ownerReference.Controller to determine if the rc controls the pod. +func (rm *ReplicationManager) getPodController(pod *api.Pod) *api.ReplicationController { + // look up in the cache, if cached and the cache is valid, just return cached value + if obj, cached := rm.lookupCache.GetMatchingObject(pod); cached { + controller, ok := obj.(*api.ReplicationController) + if !ok { + // This should not happen + glog.Errorf("lookup cache does not return a ReplicationController object") + return nil + } + if cached && rm.isCacheValid(pod, controller) { + return controller + } + } + + // if not cached or cached value is invalid, search all the rc to find the matching one, and update cache + controllers, err := rm.rcStore.GetPodControllers(pod) + if err != nil { + glog.V(4).Infof("No controllers found for pod %v, replication manager will avoid syncing", pod.Name) + return nil + } + // In theory, overlapping controllers is user error. This sorting will not prevent + // oscillation of replicas in all cases, eg: + // rc1 (older rc): [(k1=v1)], replicas=1 rc2: [(k2=v2)], replicas=2 + // pod: [(k1:v1), (k2:v2)] will wake both rc1 and rc2, and we will sync rc1. + // pod: [(k2:v2)] will wake rc2 which creates a new replica. + if len(controllers) > 1 { + // More than two items in this list indicates user error. If two replication-controller + // overlap, sort by creation timestamp, subsort by name, then pick + // the first. + glog.Errorf("user error! more than one replication controller is selecting pods with labels: %+v", pod.Labels) + sort.Sort(OverlappingControllers(controllers)) + } + + // update lookup cache + rm.lookupCache.Update(pod, &controllers[0]) + + return &controllers[0] +} + +// isCacheValid check if the cache is valid +func (rm *ReplicationManager) isCacheValid(pod *api.Pod, cachedRC *api.ReplicationController) bool { + exists, err := rm.rcStore.Exists(cachedRC) + // rc has been deleted or updated, cache is invalid + if err != nil || !exists || !isControllerMatch(pod, cachedRC) { + return false + } + return true +} + +// isControllerMatch take a Pod and ReplicationController, return whether the Pod and ReplicationController are matching +// TODO(mqliang): This logic is a copy from GetPodControllers(), remove the duplication +func isControllerMatch(pod *api.Pod, rc *api.ReplicationController) bool { + if rc.Namespace != pod.Namespace { + return false + } + selector := labels.Set(rc.Spec.Selector).AsSelectorPreValidated() + + // If an rc with a nil or empty selector creeps in, it should match nothing, not everything. + if selector.Empty() || !selector.Matches(labels.Set(pod.Labels)) { + return false + } + return true +} + +// callback when RC is updated +func (rm *ReplicationManager) updateRC(old, cur interface{}) { + oldRC := old.(*api.ReplicationController) + curRC := cur.(*api.ReplicationController) + + // We should invalidate the whole lookup cache if a RC's selector has been updated. + // + // Imagine that you have two RCs: + // * old RC1 + // * new RC2 + // You also have a pod that is attached to RC2 (because it doesn't match RC1 selector). + // Now imagine that you are changing RC1 selector so that it is now matching that pod, + // in such case, we must invalidate the whole cache so that pod could be adopted by RC1 + // + // This makes the lookup cache less helpful, but selector update does not happen often, + // so it's not a big problem + if !reflect.DeepEqual(oldRC.Spec.Selector, curRC.Spec.Selector) { + rm.lookupCache.InvalidateAll() + } + // TODO: Remove when #31981 is resolved! + glog.Infof("Observed updated replication controller %v. Desired pod count change: %d->%d", curRC.Name, oldRC.Spec.Replicas, curRC.Spec.Replicas) + + // You might imagine that we only really need to enqueue the + // controller when Spec changes, but it is safer to sync any + // time this function is triggered. That way a full informer + // resync can requeue any controllers that don't yet have pods + // but whose last attempts at creating a pod have failed (since + // we don't block on creation of pods) instead of those + // controllers stalling indefinitely. Enqueueing every time + // does result in some spurious syncs (like when Status.Replica + // is updated and the watch notification from it retriggers + // this function), but in general extra resyncs shouldn't be + // that bad as rcs that haven't met expectations yet won't + // sync, and all the listing is done using local stores. + if oldRC.Status.Replicas != curRC.Status.Replicas { + // TODO: Should we log status or spec? + glog.V(4).Infof("Observed updated replica count for rc: %v, %d->%d", curRC.Name, oldRC.Status.Replicas, curRC.Status.Replicas) + } + rm.enqueueController(cur) +} + +// When a pod is created, enqueue the controller that manages it and update it's expectations. +func (rm *ReplicationManager) addPod(obj interface{}) { + pod := obj.(*api.Pod) + + rc := rm.getPodController(pod) + if rc == nil { + return + } + rcKey, err := controller.KeyFunc(rc) + if err != nil { + glog.Errorf("Couldn't get key for replication controller %#v: %v", rc, err) + return + } + + if pod.DeletionTimestamp != nil { + // on a restart of the controller manager, it's possible a new pod shows up in a state that + // is already pending deletion. Prevent the pod from being a creation observation. + rm.deletePod(pod) + return + } + rm.expectations.CreationObserved(rcKey) + rm.enqueueController(rc) +} + +// When a pod is updated, figure out what controller/s manage it and wake them +// up. If the labels of the pod have changed we need to awaken both the old +// and new controller. old and cur must be *api.Pod types. +func (rm *ReplicationManager) updatePod(old, cur interface{}) { + curPod := cur.(*api.Pod) + oldPod := old.(*api.Pod) + if curPod.ResourceVersion == oldPod.ResourceVersion { + // Periodic resync will send update events for all known pods. + // Two different versions of the same pod will always have different RVs. + return + } + glog.V(4).Infof("Pod %s updated, objectMeta %+v -> %+v.", curPod.Name, oldPod.ObjectMeta, curPod.ObjectMeta) + labelChanged := !reflect.DeepEqual(curPod.Labels, oldPod.Labels) + if curPod.DeletionTimestamp != nil { + // when a pod is deleted gracefully it's deletion timestamp is first modified to reflect a grace period, + // and after such time has passed, the kubelet actually deletes it from the store. We receive an update + // for modification of the deletion timestamp and expect an rc to create more replicas asap, not wait + // until the kubelet actually deletes the pod. This is different from the Phase of a pod changing, because + // an rc never initiates a phase change, and so is never asleep waiting for the same. + rm.deletePod(curPod) + if labelChanged { + // we don't need to check the oldPod.DeletionTimestamp because DeletionTimestamp cannot be unset. + rm.deletePod(oldPod) + } + return + } + + // Only need to get the old controller if the labels changed. + // Enqueue the oldRC before the curRC to give curRC a chance to adopt the oldPod. + if labelChanged { + // If the old and new rc are the same, the first one that syncs + // will set expectations preventing any damage from the second. + if oldRC := rm.getPodController(oldPod); oldRC != nil { + rm.enqueueController(oldRC) + } + } + + if curRC := rm.getPodController(curPod); curRC != nil { + rm.enqueueController(curRC) + } +} + +// When a pod is deleted, enqueue the controller that manages the pod and update its expectations. +// obj could be an *api.Pod, or a DeletionFinalStateUnknown marker item. +func (rm *ReplicationManager) deletePod(obj interface{}) { + pod, ok := obj.(*api.Pod) + + // When a delete is dropped, the relist will notice a pod in the store not + // in the list, leading to the insertion of a tombstone object which contains + // the deleted key/value. Note that this value might be stale. If the pod + // changed labels the new rc will not be woken up till the periodic resync. + if !ok { + tombstone, ok := obj.(cache.DeletedFinalStateUnknown) + if !ok { + glog.Errorf("Couldn't get object from tombstone %#v", obj) + return + } + pod, ok = tombstone.Obj.(*api.Pod) + if !ok { + glog.Errorf("Tombstone contained object that is not a pod %#v", obj) + return + } + } + glog.V(4).Infof("Pod %s/%s deleted through %v, timestamp %+v, labels %+v.", pod.Namespace, pod.Name, utilruntime.GetCaller(), pod.DeletionTimestamp, pod.Labels) + if rc := rm.getPodController(pod); rc != nil { + rcKey, err := controller.KeyFunc(rc) + if err != nil { + glog.Errorf("Couldn't get key for replication controller %#v: %v", rc, err) + return + } + rm.expectations.DeletionObserved(rcKey, controller.PodKey(pod)) + rm.enqueueController(rc) + } +} + +// obj could be an *api.ReplicationController, or a DeletionFinalStateUnknown marker item. +func (rm *ReplicationManager) enqueueController(obj interface{}) { + key, err := controller.KeyFunc(obj) + if err != nil { + glog.Errorf("Couldn't get key for object %+v: %v", obj, err) + return + } + + // TODO: Handle overlapping controllers better. Either disallow them at admission time or + // deterministically avoid syncing controllers that fight over pods. Currently, we only + // ensure that the same controller is synced for a given pod. When we periodically relist + // all controllers there will still be some replica instability. One way to handle this is + // by querying the store for all controllers that this rc overlaps, as well as all + // controllers that overlap this rc, and sorting them. + rm.queue.Add(key) +} + +// worker runs a worker thread that just dequeues items, processes them, and marks them done. +// It enforces that the syncHandler is never invoked concurrently with the same key. +func (rm *ReplicationManager) worker() { + workFunc := func() bool { + key, quit := rm.queue.Get() + if quit { + return true + } + defer rm.queue.Done(key) + + err := rm.syncHandler(key.(string)) + if err == nil { + rm.queue.Forget(key) + return false + } + + rm.queue.AddRateLimited(key) + utilruntime.HandleError(err) + return false + } + for { + if quit := workFunc(); quit { + glog.Infof("replication controller worker shutting down") + return + } + } +} + +// manageReplicas checks and updates replicas for the given replication controller. +// Does NOT modify . +func (rm *ReplicationManager) manageReplicas(filteredPods []*api.Pod, rc *api.ReplicationController) error { + diff := len(filteredPods) - int(rc.Spec.Replicas) + rcKey, err := controller.KeyFunc(rc) + if err != nil { + return err + } + if diff == 0 { + return nil + } + + if diff < 0 { + diff *= -1 + if diff > rm.burstReplicas { + diff = rm.burstReplicas + } + // TODO: Track UIDs of creates just like deletes. The problem currently + // is we'd need to wait on the result of a create to record the pod's + // UID, which would require locking *across* the create, which will turn + // into a performance bottleneck. We should generate a UID for the pod + // beforehand and store it via ExpectCreations. + errCh := make(chan error, diff) + rm.expectations.ExpectCreations(rcKey, diff) + var wg sync.WaitGroup + wg.Add(diff) + glog.V(2).Infof("Too few %q/%q replicas, need %d, creating %d", rc.Namespace, rc.Name, rc.Spec.Replicas, diff) + for i := 0; i < diff; i++ { + go func() { + defer wg.Done() + var err error + if rm.garbageCollectorEnabled { + var trueVar = true + controllerRef := &api.OwnerReference{ + APIVersion: getRCKind().GroupVersion().String(), + Kind: getRCKind().Kind, + Name: rc.Name, + UID: rc.UID, + Controller: &trueVar, + } + err = rm.podControl.CreatePodsWithControllerRef(rc.Namespace, rc.Spec.Template, rc, controllerRef) + } else { + err = rm.podControl.CreatePods(rc.Namespace, rc.Spec.Template, rc) + } + if err != nil { + // Decrement the expected number of creates because the informer won't observe this pod + glog.V(2).Infof("Failed creation, decrementing expectations for controller %q/%q", rc.Namespace, rc.Name) + rm.expectations.CreationObserved(rcKey) + errCh <- err + utilruntime.HandleError(err) + } + }() + } + wg.Wait() + + select { + case err := <-errCh: + // all errors have been reported before and they're likely to be the same, so we'll only return the first one we hit. + if err != nil { + return err + } + default: + } + + return nil + } + + if diff > rm.burstReplicas { + diff = rm.burstReplicas + } + glog.V(2).Infof("Too many %q/%q replicas, need %d, deleting %d", rc.Namespace, rc.Name, rc.Spec.Replicas, diff) + // No need to sort pods if we are about to delete all of them + if rc.Spec.Replicas != 0 { + // Sort the pods in the order such that not-ready < ready, unscheduled + // < scheduled, and pending < running. This ensures that we delete pods + // in the earlier stages whenever possible. + sort.Sort(controller.ActivePods(filteredPods)) + } + // Snapshot the UIDs (ns/name) of the pods we're expecting to see + // deleted, so we know to record their expectations exactly once either + // when we see it as an update of the deletion timestamp, or as a delete. + // Note that if the labels on a pod/rc change in a way that the pod gets + // orphaned, the rs will only wake up after the expectations have + // expired even if other pods are deleted. + deletedPodKeys := []string{} + for i := 0; i < diff; i++ { + deletedPodKeys = append(deletedPodKeys, controller.PodKey(filteredPods[i])) + } + // We use pod namespace/name as a UID to wait for deletions, so if the + // labels on a pod/rc change in a way that the pod gets orphaned, the + // rc will only wake up after the expectation has expired. + errCh := make(chan error, diff) + rm.expectations.ExpectDeletions(rcKey, deletedPodKeys) + var wg sync.WaitGroup + wg.Add(diff) + for i := 0; i < diff; i++ { + go func(ix int) { + defer wg.Done() + if err := rm.podControl.DeletePod(rc.Namespace, filteredPods[ix].Name, rc); err != nil { + // Decrement the expected number of deletes because the informer won't observe this deletion + podKey := controller.PodKey(filteredPods[ix]) + glog.V(2).Infof("Failed to delete %v due to %v, decrementing expectations for controller %q/%q", podKey, err, rc.Namespace, rc.Name) + rm.expectations.DeletionObserved(rcKey, podKey) + errCh <- err + utilruntime.HandleError(err) + } + }(i) + } + wg.Wait() + + select { + case err := <-errCh: + // all errors have been reported before and they're likely to be the same, so we'll only return the first one we hit. + if err != nil { + return err + } + default: + } + + return nil + +} + +// syncReplicationController will sync the rc with the given key if it has had its expectations fulfilled, meaning +// it did not expect to see any more of its pods created or deleted. This function is not meant to be invoked +// concurrently with the same key. +func (rm *ReplicationManager) syncReplicationController(key string) error { + trace := util.NewTrace("syncReplicationController: " + key) + defer trace.LogIfLong(250 * time.Millisecond) + + startTime := time.Now() + defer func() { + glog.V(4).Infof("Finished syncing controller %q (%v)", key, time.Now().Sub(startTime)) + }() + + if !rm.podStoreSynced() { + // Sleep so we give the pod reflector goroutine a chance to run. + time.Sleep(PodStoreSyncedPollPeriod) + glog.Infof("Waiting for pods controller to sync, requeuing rc %v", key) + rm.queue.Add(key) + return nil + } + + obj, exists, err := rm.rcStore.Indexer.GetByKey(key) + if !exists { + glog.Infof("Replication Controller has been deleted %v", key) + rm.expectations.DeleteExpectations(key) + return nil + } + if err != nil { + return err + } + rc := *obj.(*api.ReplicationController) + + // Check the expectations of the rc before counting active pods, otherwise a new pod can sneak in + // and update the expectations after we've retrieved active pods from the store. If a new pod enters + // the store after we've checked the expectation, the rc sync is just deferred till the next relist. + rcKey, err := controller.KeyFunc(&rc) + if err != nil { + glog.Errorf("Couldn't get key for replication controller %#v: %v", rc, err) + return err + } + trace.Step("ReplicationController restored") + rcNeedsSync := rm.expectations.SatisfiedExpectations(rcKey) + trace.Step("Expectations restored") + + // NOTE: filteredPods are pointing to objects from cache - if you need to + // modify them, you need to copy it first. + // TODO: Do the List and Filter in a single pass, or use an index. + var filteredPods []*api.Pod + if rm.garbageCollectorEnabled { + // list all pods to include the pods that don't match the rc's selector + // anymore but has the stale controller ref. + pods, err := rm.podStore.Pods(rc.Namespace).List(labels.Everything()) + if err != nil { + glog.Errorf("Error getting pods for rc %q: %v", key, err) + rm.queue.Add(key) + return err + } + cm := controller.NewPodControllerRefManager(rm.podControl, rc.ObjectMeta, labels.Set(rc.Spec.Selector).AsSelectorPreValidated(), getRCKind()) + matchesAndControlled, matchesNeedsController, controlledDoesNotMatch := cm.Classify(pods) + for _, pod := range matchesNeedsController { + err := cm.AdoptPod(pod) + // continue to next pod if adoption fails. + if err != nil { + // If the pod no longer exists, don't even log the error. + if !errors.IsNotFound(err) { + utilruntime.HandleError(err) + } + } else { + matchesAndControlled = append(matchesAndControlled, pod) + } + } + filteredPods = matchesAndControlled + // remove the controllerRef for the pods that no longer have matching labels + var errlist []error + for _, pod := range controlledDoesNotMatch { + err := cm.ReleasePod(pod) + if err != nil { + errlist = append(errlist, err) + } + } + if len(errlist) != 0 { + aggregate := utilerrors.NewAggregate(errlist) + // push the RC into work queue again. We need to try to free the + // pods again otherwise they will stuck with the stale + // controllerRef. + rm.queue.Add(key) + return aggregate + } + } else { + pods, err := rm.podStore.Pods(rc.Namespace).List(labels.Set(rc.Spec.Selector).AsSelectorPreValidated()) + if err != nil { + glog.Errorf("Error getting pods for rc %q: %v", key, err) + rm.queue.Add(key) + return err + } + filteredPods = controller.FilterActivePods(pods) + } + + var manageReplicasErr error + if rcNeedsSync && rc.DeletionTimestamp == nil { + manageReplicasErr = rm.manageReplicas(filteredPods, &rc) + } + trace.Step("manageReplicas done") + + // Count the number of pods that have labels matching the labels of the pod + // template of the replication controller, the matching pods may have more + // labels than are in the template. Because the label of podTemplateSpec is + // a superset of the selector of the replication controller, so the possible + // matching pods must be part of the filteredPods. + fullyLabeledReplicasCount := 0 + readyReplicasCount := 0 + templateLabel := labels.Set(rc.Spec.Template.Labels).AsSelectorPreValidated() + for _, pod := range filteredPods { + if templateLabel.Matches(labels.Set(pod.Labels)) { + fullyLabeledReplicasCount++ + } + if api.IsPodReady(pod) { + readyReplicasCount++ + } + } + + // Always updates status as pods come up or die. + if err := updateReplicaCount(rm.kubeClient.Core().ReplicationControllers(rc.Namespace), rc, len(filteredPods), fullyLabeledReplicasCount, readyReplicasCount); err != nil { + // Multiple things could lead to this update failing. Returning an error causes a requeue without forcing a hotloop + return err + } + + return manageReplicasErr +} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/replication/replication_controller_utils.go b/vendor/k8s.io/kubernetes/pkg/controller/replication/replication_controller_utils.go new file mode 100644 index 00000000..e7e22795 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/controller/replication/replication_controller_utils.go @@ -0,0 +1,84 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// If you make changes to this file, you should also make the corresponding change in ReplicaSet. + +package replication + +import ( + "fmt" + + "github.com/golang/glog" + "k8s.io/kubernetes/pkg/api" + unversionedcore "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/unversioned" +) + +// updateReplicaCount attempts to update the Status.Replicas of the given controller, with a single GET/PUT retry. +func updateReplicaCount(rcClient unversionedcore.ReplicationControllerInterface, controller api.ReplicationController, numReplicas, numFullyLabeledReplicas, numReadyReplicas int) (updateErr error) { + // This is the steady state. It happens when the rc doesn't have any expectations, since + // we do a periodic relist every 30s. If the generations differ but the replicas are + // the same, a caller might've resized to the same replica count. + if int(controller.Status.Replicas) == numReplicas && + int(controller.Status.FullyLabeledReplicas) == numFullyLabeledReplicas && + int(controller.Status.ReadyReplicas) == numReadyReplicas && + controller.Generation == controller.Status.ObservedGeneration { + return nil + } + // Save the generation number we acted on, otherwise we might wrongfully indicate + // that we've seen a spec update when we retry. + // TODO: This can clobber an update if we allow multiple agents to write to the + // same status. + generation := controller.Generation + + var getErr error + for i, rc := 0, &controller; ; i++ { + glog.V(4).Infof(fmt.Sprintf("Updating replica count for rc: %s/%s, ", controller.Namespace, controller.Name) + + fmt.Sprintf("replicas %d->%d (need %d), ", controller.Status.Replicas, numReplicas, controller.Spec.Replicas) + + fmt.Sprintf("fullyLabeledReplicas %d->%d, ", controller.Status.FullyLabeledReplicas, numFullyLabeledReplicas) + + fmt.Sprintf("readyReplicas %d->%d, ", controller.Status.ReadyReplicas, numReadyReplicas) + + fmt.Sprintf("sequence No: %v->%v", controller.Status.ObservedGeneration, generation)) + + rc.Status = api.ReplicationControllerStatus{ + Replicas: int32(numReplicas), + FullyLabeledReplicas: int32(numFullyLabeledReplicas), + ReadyReplicas: int32(numReadyReplicas), + ObservedGeneration: generation, + } + _, updateErr = rcClient.UpdateStatus(rc) + if updateErr == nil || i >= statusUpdateRetries { + return updateErr + } + // Update the controller with the latest resource version for the next poll + if rc, getErr = rcClient.Get(controller.Name); getErr != nil { + // If the GET fails we can't trust status.Replicas anymore. This error + // is bound to be more interesting than the update failure. + return getErr + } + } +} + +// OverlappingControllers sorts a list of controllers by creation timestamp, using their names as a tie breaker. +type OverlappingControllers []api.ReplicationController + +func (o OverlappingControllers) Len() int { return len(o) } +func (o OverlappingControllers) Swap(i, j int) { o[i], o[j] = o[j], o[i] } + +func (o OverlappingControllers) Less(i, j int) bool { + if o[i].CreationTimestamp.Equal(o[j].CreationTimestamp) { + return o[i].Name < o[j].Name + } + return o[i].CreationTimestamp.Before(o[j].CreationTimestamp) +} diff --git a/vendor/k8s.io/kubernetes/pkg/conversion/cloner.go b/vendor/k8s.io/kubernetes/pkg/conversion/cloner.go index a8c57471..c5dec1f3 100644 --- a/vendor/k8s.io/kubernetes/pkg/conversion/cloner.go +++ b/vendor/k8s.io/kubernetes/pkg/conversion/cloner.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,14 +25,14 @@ import ( type Cloner struct { // Map from the type to a function which can do the deep copy. deepCopyFuncs map[reflect.Type]reflect.Value - generatedDeepCopyFuncs map[reflect.Type]reflect.Value + generatedDeepCopyFuncs map[reflect.Type]func(in interface{}, out interface{}, c *Cloner) error } // NewCloner creates a new Cloner object. func NewCloner() *Cloner { c := &Cloner{ deepCopyFuncs: map[reflect.Type]reflect.Value{}, - generatedDeepCopyFuncs: map[reflect.Type]reflect.Value{}, + generatedDeepCopyFuncs: map[reflect.Type]func(in interface{}, out interface{}, c *Cloner) error{}, } if err := c.RegisterDeepCopyFunc(byteSliceDeepCopy); err != nil { // If one of the deep-copy functions is malformed, detect it immediately. @@ -42,10 +42,10 @@ func NewCloner() *Cloner { } // Prevent recursing into every byte... -func byteSliceDeepCopy(in []byte, out *[]byte, c *Cloner) error { - if in != nil { - *out = make([]byte, len(in)) - copy(*out, in) +func byteSliceDeepCopy(in *[]byte, out *[]byte, c *Cloner) error { + if *in != nil { + *out = make([]byte, len(*in)) + copy(*out, *in) } else { *out = nil } @@ -63,10 +63,10 @@ func verifyDeepCopyFunctionSignature(ft reflect.Type) error { if ft.NumOut() != 1 { return fmt.Errorf("expected one 'out' param, got %v", ft) } - if ft.In(1).Kind() != reflect.Ptr { - return fmt.Errorf("expected pointer arg for 'in' param 1, got: %v", ft) + if ft.In(0).Kind() != reflect.Ptr { + return fmt.Errorf("expected pointer arg for 'in' param 0, got: %v", ft) } - if ft.In(1).Elem() != ft.In(0) { + if ft.In(1) != ft.In(0) { return fmt.Errorf("expected 'in' param 0 the same as param 1, got: %v", ft) } var forClonerType Cloner @@ -103,15 +103,17 @@ func (c *Cloner) RegisterDeepCopyFunc(deepCopyFunc interface{}) error { return nil } +// GeneratedDeepCopyFunc bundles an untyped generated deep-copy function of a type +// with a reflection type object used as a key to lookup the deep-copy function. +type GeneratedDeepCopyFunc struct { + Fn func(in interface{}, out interface{}, c *Cloner) error + InType reflect.Type +} + // Similar to RegisterDeepCopyFunc, but registers deep copy function that were // automatically generated. -func (c *Cloner) RegisterGeneratedDeepCopyFunc(deepCopyFunc interface{}) error { - fv := reflect.ValueOf(deepCopyFunc) - ft := fv.Type() - if err := verifyDeepCopyFunctionSignature(ft); err != nil { - return err - } - c.generatedDeepCopyFuncs[ft.In(0)] = fv +func (c *Cloner) RegisterGeneratedDeepCopyFunc(fn GeneratedDeepCopyFunc) error { + c.generatedDeepCopyFuncs[fn.InType] = fn.Fn return nil } @@ -135,25 +137,35 @@ func (c *Cloner) DeepCopy(in interface{}) (interface{}, error) { func (c *Cloner) deepCopy(src reflect.Value) (reflect.Value, error) { inType := src.Type() + switch src.Kind() { + case reflect.Interface, reflect.Ptr, reflect.Map, reflect.Slice: + if src.IsNil() { + return src, nil + } + } + if fv, ok := c.deepCopyFuncs[inType]; ok { return c.customDeepCopy(src, fv) } if fv, ok := c.generatedDeepCopyFuncs[inType]; ok { - return c.customDeepCopy(src, fv) + var outValue reflect.Value + outValue = reflect.New(inType.Elem()) + err := fv(src.Interface(), outValue.Interface(), c) + return outValue, err } return c.defaultDeepCopy(src) } func (c *Cloner) customDeepCopy(src, fv reflect.Value) (reflect.Value, error) { - outValue := reflect.New(src.Type()) + outValue := reflect.New(src.Type().Elem()) args := []reflect.Value{src, outValue, reflect.ValueOf(c)} result := fv.Call(args)[0].Interface() // This convolution is necessary because nil interfaces won't convert // to error. if result == nil { - return outValue.Elem(), nil + return outValue, nil } - return outValue.Elem(), result.(error) + return outValue, result.(error) } func (c *Cloner) defaultDeepCopy(src reflect.Value) (reflect.Value, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/conversion/converter.go b/vendor/k8s.io/kubernetes/pkg/conversion/converter.go index 2ee34ea0..8941b18a 100644 --- a/vendor/k8s.io/kubernetes/pkg/conversion/converter.go +++ b/vendor/k8s.io/kubernetes/pkg/conversion/converter.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/conversion/deep_equal.go b/vendor/k8s.io/kubernetes/pkg/conversion/deep_equal.go index 7c3ed7cd..6bfc870a 100644 --- a/vendor/k8s.io/kubernetes/pkg/conversion/deep_equal.go +++ b/vendor/k8s.io/kubernetes/pkg/conversion/deep_equal.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ limitations under the License. package conversion import ( - "k8s.io/kubernetes/third_party/forked/reflect" + "k8s.io/kubernetes/third_party/forked/golang/reflect" ) // The code for this type must be located in third_party, since it forks from @@ -26,7 +26,7 @@ type Equalities struct { reflect.Equalities } -// For convenience, panics on errrors +// For convenience, panics on errors func EqualitiesOrDie(funcs ...interface{}) Equalities { e := Equalities{reflect.Equalities{}} if err := e.AddFuncs(funcs...); err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/conversion/doc.go b/vendor/k8s.io/kubernetes/pkg/conversion/doc.go index 3ef2eaba..0c46ef2d 100644 --- a/vendor/k8s.io/kubernetes/pkg/conversion/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/conversion/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/conversion/helper.go b/vendor/k8s.io/kubernetes/pkg/conversion/helper.go index 39f78265..4ebc1ebc 100644 --- a/vendor/k8s.io/kubernetes/pkg/conversion/helper.go +++ b/vendor/k8s.io/kubernetes/pkg/conversion/helper.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/conversion/queryparams/convert.go b/vendor/k8s.io/kubernetes/pkg/conversion/queryparams/convert.go index 63c54569..30f717b2 100644 --- a/vendor/k8s.io/kubernetes/pkg/conversion/queryparams/convert.go +++ b/vendor/k8s.io/kubernetes/pkg/conversion/queryparams/convert.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/conversion/queryparams/doc.go b/vendor/k8s.io/kubernetes/pkg/conversion/queryparams/doc.go index 0e9127a1..4c1002a4 100644 --- a/vendor/k8s.io/kubernetes/pkg/conversion/queryparams/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/conversion/queryparams/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/credentialprovider/config.go b/vendor/k8s.io/kubernetes/pkg/credentialprovider/config.go index b80fa594..582c1ef2 100644 --- a/vendor/k8s.io/kubernetes/pkg/credentialprovider/config.go +++ b/vendor/k8s.io/kubernetes/pkg/credentialprovider/config.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/credentialprovider/doc.go b/vendor/k8s.io/kubernetes/pkg/credentialprovider/doc.go index f071c0c8..41c12410 100644 --- a/vendor/k8s.io/kubernetes/pkg/credentialprovider/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/credentialprovider/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/credentialprovider/keyring.go b/vendor/k8s.io/kubernetes/pkg/credentialprovider/keyring.go index eedbee5a..ed712ccf 100644 --- a/vendor/k8s.io/kubernetes/pkg/credentialprovider/keyring.go +++ b/vendor/k8s.io/kubernetes/pkg/credentialprovider/keyring.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/credentialprovider/plugins.go b/vendor/k8s.io/kubernetes/pkg/credentialprovider/plugins.go index a871cc02..76c2e724 100644 --- a/vendor/k8s.io/kubernetes/pkg/credentialprovider/plugins.go +++ b/vendor/k8s.io/kubernetes/pkg/credentialprovider/plugins.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/credentialprovider/provider.go b/vendor/k8s.io/kubernetes/pkg/credentialprovider/provider.go index 21565039..cb93bd7f 100644 --- a/vendor/k8s.io/kubernetes/pkg/credentialprovider/provider.go +++ b/vendor/k8s.io/kubernetes/pkg/credentialprovider/provider.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,7 +29,11 @@ import ( // DockerConfigProvider is the interface that registered extensions implement // to materialize 'dockercfg' credentials. type DockerConfigProvider interface { + // Enabled returns true if the config provider is enabled. + // Implementations can be blocking - e.g. metadata server unavailable. Enabled() bool + // Provide returns docker configuration. + // Implementations can be blocking - e.g. metadata server unavailable. Provide() DockerConfig // LazyProvide() gets called after URL matches have been performed, so the // location used as the key in DockerConfig would be redundant. diff --git a/vendor/k8s.io/kubernetes/pkg/fieldpath/doc.go b/vendor/k8s.io/kubernetes/pkg/fieldpath/doc.go index c91ff6ec..83cbdce0 100644 --- a/vendor/k8s.io/kubernetes/pkg/fieldpath/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/fieldpath/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/fieldpath/fieldpath.go b/vendor/k8s.io/kubernetes/pkg/fieldpath/fieldpath.go index bede9b2c..08460c00 100644 --- a/vendor/k8s.io/kubernetes/pkg/fieldpath/fieldpath.go +++ b/vendor/k8s.io/kubernetes/pkg/fieldpath/fieldpath.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -75,6 +75,29 @@ func ExtractResourceValueByContainerName(fs *api.ResourceFieldSelector, pod *api return ExtractContainerResourceValue(fs, container) } +// ExtractResourceValueByContainerNameAndNodeAllocatable extracts the value of a resource +// by providing container name and node allocatable +func ExtractResourceValueByContainerNameAndNodeAllocatable(fs *api.ResourceFieldSelector, pod *api.Pod, containerName string, nodeAllocatable api.ResourceList) (string, error) { + realContainer, err := findContainerInPod(pod, containerName) + if err != nil { + return "", err + } + + containerCopy, err := api.Scheme.DeepCopy(realContainer) + if err != nil { + return "", fmt.Errorf("failed to perform a deep copy of container object: %v", err) + } + + container, ok := containerCopy.(*api.Container) + if !ok { + return "", fmt.Errorf("unexpected type returned from deep copy of container object") + } + + MergeContainerResourceLimits(container, nodeAllocatable) + + return ExtractContainerResourceValue(fs, container) +} + // ExtractContainerResourceValue extracts the value of a resource // in an already known container func ExtractContainerResourceValue(fs *api.ResourceFieldSelector, container *api.Container) (string, error) { @@ -122,3 +145,19 @@ func convertResourceMemoryToString(memory *resource.Quantity, divisor resource.Q m := int64(math.Ceil(float64(memory.Value()) / float64(divisor.Value()))) return strconv.FormatInt(m, 10), nil } + +// MergeContainerResourceLimits checks if a limit is applied for +// the container, and if not, it sets the limit to the passed resource list. +func MergeContainerResourceLimits(container *api.Container, + allocatable api.ResourceList) { + if container.Resources.Limits == nil { + container.Resources.Limits = make(api.ResourceList) + } + for _, resource := range []api.ResourceName{api.ResourceCPU, api.ResourceMemory} { + if quantity, exists := container.Resources.Limits[resource]; !exists || quantity.IsZero() { + if cap, exists := allocatable[resource]; exists { + container.Resources.Limits[resource] = *cap.Copy() + } + } + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/fields/doc.go b/vendor/k8s.io/kubernetes/pkg/fields/doc.go index 767615c9..49059e26 100644 --- a/vendor/k8s.io/kubernetes/pkg/fields/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/fields/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/fields/fields.go b/vendor/k8s.io/kubernetes/pkg/fields/fields.go index 50fef14a..623b27e9 100644 --- a/vendor/k8s.io/kubernetes/pkg/fields/fields.go +++ b/vendor/k8s.io/kubernetes/pkg/fields/fields.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/fields/requirements.go b/vendor/k8s.io/kubernetes/pkg/fields/requirements.go new file mode 100644 index 00000000..33c6e4e1 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/fields/requirements.go @@ -0,0 +1,30 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package fields + +import "k8s.io/kubernetes/pkg/selection" + +// Requirements is AND of all requirements. +type Requirements []Requirement + +// Requirement contains a field, a value, and an operator that relates the field and value. +// This is currently for reading internal selection information of field selector. +type Requirement struct { + Operator selection.Operator + Field string + Value string +} diff --git a/vendor/k8s.io/kubernetes/pkg/fields/selector.go b/vendor/k8s.io/kubernetes/pkg/fields/selector.go index c0a63858..75161daf 100644 --- a/vendor/k8s.io/kubernetes/pkg/fields/selector.go +++ b/vendor/k8s.io/kubernetes/pkg/fields/selector.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,6 +20,8 @@ import ( "fmt" "sort" "strings" + + "k8s.io/kubernetes/pkg/selection" ) // Selector represents a field selector. @@ -39,6 +41,10 @@ type Selector interface { // applied to the entire selector, or an error if fn returns an error. Transform(fn TransformFunc) (Selector, error) + // Requirements converts this interface to Requirements to expose + // more detailed selection information. + Requirements() Requirements + // String returns a human readable string that represents this selector. String() string } @@ -75,6 +81,14 @@ func (t *hasTerm) Transform(fn TransformFunc) (Selector, error) { return &hasTerm{field, value}, nil } +func (t *hasTerm) Requirements() Requirements { + return []Requirement{{ + Field: t.field, + Operator: selection.Equals, + Value: t.value, + }} +} + func (t *hasTerm) String() string { return fmt.Sprintf("%v=%v", t.field, t.value) } @@ -103,6 +117,14 @@ func (t *notHasTerm) Transform(fn TransformFunc) (Selector, error) { return ¬HasTerm{field, value}, nil } +func (t *notHasTerm) Requirements() Requirements { + return []Requirement{{ + Field: t.field, + Operator: selection.NotEquals, + Value: t.value, + }} +} + func (t *notHasTerm) String() string { return fmt.Sprintf("%v!=%v", t.field, t.value) } @@ -157,6 +179,15 @@ func (t andTerm) Transform(fn TransformFunc) (Selector, error) { return andTerm(next), nil } +func (t andTerm) Requirements() Requirements { + reqs := make([]Requirement, 0, len(t)) + for _, s := range []Selector(t) { + rs := s.Requirements() + reqs = append(reqs, rs...) + } + return reqs +} + func (t andTerm) String() string { var terms []string for _, q := range t { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS b/vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS index 60bc436d..26e3e754 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/OWNERS @@ -1,5 +1,4 @@ assignees: - - bgrant0607 - brendandburns - deads2k - janetkuo diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/apply.go b/vendor/k8s.io/kubernetes/pkg/kubectl/apply.go index 1836fc25..6f183f1c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/apply.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/apply.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/autoscale.go b/vendor/k8s.io/kubernetes/pkg/kubectl/autoscale.go index 979a93bf..6e5f5a24 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/autoscale.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/autoscale.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/bash_comp_utils.go b/vendor/k8s.io/kubernetes/pkg/kubectl/bash_comp_utils.go index e3eaf30e..34620027 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/bash_comp_utils.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/bash_comp_utils.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/clientcache.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/clientcache.go index 43ddf3e9..81476cab 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/clientcache.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/clientcache.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -76,19 +76,19 @@ func (c *ClientCache) ClientConfigForVersion(version *unversioned.GroupVersion) preferredGV = &versionCopy } + client.SetKubernetesDefaults(&config) negotiatedVersion, err := client.NegotiateVersion(c.defaultClient, &config, preferredGV, registered.EnabledVersions()) if err != nil { return nil, err } config.GroupVersion = negotiatedVersion - client.SetKubernetesDefaults(&config) if version != nil { c.configs[*version] = &config } // `version` does not necessarily equal `config.Version`. However, we know that we call this method again with - // `config.Version`, we should get the the config we've just built. + // `config.Version`, we should get the config we've just built. configCopy := config c.configs[*config.GroupVersion] = &configCopy diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory.go index abebe31d..49ffb4d9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/factory.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -33,6 +33,7 @@ import ( "time" "github.com/emicklei/go-restful/swagger" + "github.com/imdario/mergo" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -48,10 +49,14 @@ import ( "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/batch" + "k8s.io/kubernetes/pkg/apis/certificates" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/rbac" + "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/client/restclient" + "k8s.io/kubernetes/pkg/client/typed/discovery" + "k8s.io/kubernetes/pkg/client/typed/dynamic" client "k8s.io/kubernetes/pkg/client/unversioned" clientset "k8s.io/kubernetes/pkg/client/unversioned/adapters/internalclientset" "k8s.io/kubernetes/pkg/client/unversioned/clientcmd" @@ -82,6 +87,9 @@ type Factory struct { // Returns interfaces for dealing with arbitrary runtime.Objects. If thirdPartyDiscovery is true, performs API calls // to discovery dynamic API objects registered by third parties. Object func(thirdPartyDiscovery bool) (meta.RESTMapper, runtime.ObjectTyper) + // Returns interfaces for dealing with arbitrary + // runtime.Unstructured. This performs API calls to discover types. + UnstructuredObject func() (meta.RESTMapper, runtime.ObjectTyper, error) // Returns interfaces for decoding objects - if toInternal is set, decoded objects will be converted // into their internal form (if possible). Eventually the internal form will be removed as an option, // and only versioned objects will be returned. @@ -95,10 +103,12 @@ type Factory struct { // Returns a RESTClient for working with the specified RESTMapping or an error. This is intended // for working with arbitrary resources and is not guaranteed to point to a Kubernetes APIServer. ClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error) + // Returns a RESTClient for working with Unstructured objects. + UnstructuredClientForMapping func(mapping *meta.RESTMapping) (resource.RESTClient, error) // Returns a Describer for displaying the specified RESTMapping type or an error. Describer func(mapping *meta.RESTMapping) (kubectl.Describer, error) // Returns a Printer for formatting objects of the given type or an error. - Printer func(mapping *meta.RESTMapping, noHeaders, withNamespace bool, wide bool, showAll bool, showLabels bool, absoluteTimestamps bool, columnLabels []string) (kubectl.ResourcePrinter, error) + Printer func(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) // Returns a Scaler for changing the size of the specified RESTMapping type or an error Scaler func(mapping *meta.RESTMapping) (kubectl.Scaler, error) // Returns a Reaper for gracefully shutting down resources. @@ -157,13 +167,19 @@ const ( RunPodV1GeneratorName = "run-pod/v1" ServiceV1GeneratorName = "service/v1" ServiceV2GeneratorName = "service/v2" + ServiceNodePortGeneratorV1Name = "service-nodeport/v1" + ServiceClusterIPGeneratorV1Name = "service-clusterip/v1" + ServiceLoadBalancerGeneratorV1Name = "service-loadbalancer/v1" ServiceAccountV1GeneratorName = "serviceaccount/v1" HorizontalPodAutoscalerV1Beta1GeneratorName = "horizontalpodautoscaler/v1beta1" HorizontalPodAutoscalerV1GeneratorName = "horizontalpodautoscaler/v1" DeploymentV1Beta1GeneratorName = "deployment/v1beta1" + DeploymentBasicV1Beta1GeneratorName = "deployment-basic/v1beta1" JobV1Beta1GeneratorName = "job/v1beta1" JobV1GeneratorName = "job/v1" + ScheduledJobV2Alpha1GeneratorName = "scheduledjob/v2alpha1" NamespaceV1GeneratorName = "namespace/v1" + ResourceQuotaV1GeneratorName = "resourcequotas/v1" SecretV1GeneratorName = "secret/v1" SecretForDockerRegistryV1GeneratorName = "secret-for-docker-registry/v1" SecretForTLSV1GeneratorName = "secret-for-tls/v1" @@ -177,12 +193,25 @@ func DefaultGenerators(cmdName string) map[string]kubectl.Generator { ServiceV1GeneratorName: kubectl.ServiceGeneratorV1{}, ServiceV2GeneratorName: kubectl.ServiceGeneratorV2{}, } + generators["service-clusterip"] = map[string]kubectl.Generator{ + ServiceClusterIPGeneratorV1Name: kubectl.ServiceClusterIPGeneratorV1{}, + } + generators["service-nodeport"] = map[string]kubectl.Generator{ + ServiceNodePortGeneratorV1Name: kubectl.ServiceNodePortGeneratorV1{}, + } + generators["service-loadbalancer"] = map[string]kubectl.Generator{ + ServiceLoadBalancerGeneratorV1Name: kubectl.ServiceLoadBalancerGeneratorV1{}, + } + generators["deployment"] = map[string]kubectl.Generator{ + DeploymentBasicV1Beta1GeneratorName: kubectl.DeploymentBasicGeneratorV1{}, + } generators["run"] = map[string]kubectl.Generator{ - RunV1GeneratorName: kubectl.BasicReplicationController{}, - RunPodV1GeneratorName: kubectl.BasicPod{}, - DeploymentV1Beta1GeneratorName: kubectl.DeploymentV1Beta1{}, - JobV1Beta1GeneratorName: kubectl.JobV1Beta1{}, - JobV1GeneratorName: kubectl.JobV1{}, + RunV1GeneratorName: kubectl.BasicReplicationController{}, + RunPodV1GeneratorName: kubectl.BasicPod{}, + DeploymentV1Beta1GeneratorName: kubectl.DeploymentV1Beta1{}, + JobV1Beta1GeneratorName: kubectl.JobV1Beta1{}, + JobV1GeneratorName: kubectl.JobV1{}, + ScheduledJobV2Alpha1GeneratorName: kubectl.ScheduledJobV2Alpha1{}, } generators["autoscale"] = map[string]kubectl.Generator{ HorizontalPodAutoscalerV1Beta1GeneratorName: kubectl.HorizontalPodAutoscalerV1Beta1{}, @@ -191,6 +220,11 @@ func DefaultGenerators(cmdName string) map[string]kubectl.Generator { generators["namespace"] = map[string]kubectl.Generator{ NamespaceV1GeneratorName: kubectl.NamespaceGeneratorV1{}, } + + generators["quota"] = map[string]kubectl.Generator{ + ResourceQuotaV1GeneratorName: kubectl.ResourceQuotaGeneratorV1{}, + } + generators["secret"] = map[string]kubectl.Generator{ SecretV1GeneratorName: kubectl.SecretGeneratorV1{}, } @@ -253,14 +287,14 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { // have been dynamically added to the apiserver Object: func(discoverDynamicAPIs bool) (meta.RESTMapper, runtime.ObjectTyper) { cfg, err := clientConfig.ClientConfig() - CheckErr(err) + checkErrWithPrefix("failed to get client config: ", err) cmdApiVersion := unversioned.GroupVersion{} if cfg.GroupVersion != nil { cmdApiVersion = *cfg.GroupVersion } if discoverDynamicAPIs { client, err := clients.ClientForVersion(&unversioned.GroupVersion{Version: "v1"}) - CheckErr(err) + checkErrWithPrefix("failed to find client for version v1: ", err) var versions []unversioned.GroupVersion var gvks []unversioned.GroupVersionKind @@ -274,7 +308,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { break } } - CheckErr(err) + checkErrWithPrefix("failed to get third-party group versions: ", err) if len(versions) > 0 { priorityMapper, ok := mapper.RESTMapper.(meta.PriorityRESTMapper) if !ok { @@ -294,7 +328,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { preferredExternalVersion := versionList[0] thirdPartyMapper, err := kubectl.NewThirdPartyResourceMapper(versionList, getGroupVersionKinds(gvks, group)) - CheckErr(err) + checkErrWithPrefix("failed to create third party resource mapper: ", err) accessor := meta.NewAccessor() groupMeta := apimachinery.GroupMeta{ GroupVersion: preferredExternalVersion, @@ -304,34 +338,71 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { InterfacesFor: makeInterfacesFor(versionList), } - CheckErr(registered.RegisterGroup(groupMeta)) + checkErrWithPrefix("failed to register group: ", registered.RegisterGroup(groupMeta)) registered.AddThirdPartyAPIGroupVersions(versionList...) multiMapper = append(meta.MultiRESTMapper{thirdPartyMapper}, multiMapper...) } priorityMapper.Delegate = multiMapper - // Re-assign to the RESTMapper here because priorityMapper is actually a copy, so if we - // don't re-assign, the above assignement won't actually update mapper.RESTMapper + // Reassign to the RESTMapper here because priorityMapper is actually a copy, so if we + // don't reassign, the above assignement won't actually update mapper.RESTMapper mapper.RESTMapper = priorityMapper } } outputRESTMapper := kubectl.OutputVersionMapper{RESTMapper: mapper, OutputVersions: []unversioned.GroupVersion{cmdApiVersion}} priorityRESTMapper := meta.PriorityRESTMapper{ Delegate: outputRESTMapper, - ResourcePriority: []unversioned.GroupVersionResource{ - {Group: api.GroupName, Version: meta.AnyVersion, Resource: meta.AnyResource}, - {Group: autoscaling.GroupName, Version: meta.AnyVersion, Resource: meta.AnyResource}, - {Group: extensions.GroupName, Version: meta.AnyVersion, Resource: meta.AnyResource}, - {Group: federation.GroupName, Version: meta.AnyVersion, Resource: meta.AnyResource}, - }, - KindPriority: []unversioned.GroupVersionKind{ - {Group: api.GroupName, Version: meta.AnyVersion, Kind: meta.AnyKind}, - {Group: autoscaling.GroupName, Version: meta.AnyVersion, Kind: meta.AnyKind}, - {Group: extensions.GroupName, Version: meta.AnyVersion, Kind: meta.AnyKind}, - {Group: federation.GroupName, Version: meta.AnyVersion, Kind: meta.AnyKind}, - }, + } + // TODO: this should come from registered versions + groups := []string{api.GroupName, autoscaling.GroupName, extensions.GroupName, federation.GroupName, batch.GroupName} + // set a preferred version + for _, group := range groups { + gvs := registered.EnabledVersionsForGroup(group) + if len(gvs) == 0 { + continue + } + priorityRESTMapper.ResourcePriority = append(priorityRESTMapper.ResourcePriority, unversioned.GroupVersionResource{Group: group, Version: gvs[0].Version, Resource: meta.AnyResource}) + priorityRESTMapper.KindPriority = append(priorityRESTMapper.KindPriority, unversioned.GroupVersionKind{Group: group, Version: gvs[0].Version, Kind: meta.AnyKind}) + } + for _, group := range groups { + priorityRESTMapper.ResourcePriority = append(priorityRESTMapper.ResourcePriority, unversioned.GroupVersionResource{Group: group, Version: meta.AnyVersion, Resource: meta.AnyResource}) + priorityRESTMapper.KindPriority = append(priorityRESTMapper.KindPriority, unversioned.GroupVersionKind{Group: group, Version: meta.AnyVersion, Kind: meta.AnyKind}) } return priorityRESTMapper, api.Scheme }, + UnstructuredObject: func() (meta.RESTMapper, runtime.ObjectTyper, error) { + cfg, err := clients.ClientConfigForVersion(nil) + if err != nil { + return nil, nil, err + } + + dc, err := discovery.NewDiscoveryClientForConfig(cfg) + if err != nil { + return nil, nil, err + } + + groupResources, err := discovery.GetAPIGroupResources(dc) + if err != nil { + return nil, nil, err + } + + // Register unknown APIs as third party for now to make + // validation happy. TODO perhaps make a dynamic schema + // validator to avoid this. + for _, group := range groupResources { + for _, version := range group.Group.Versions { + gv := unversioned.GroupVersion{Group: group.Group.Name, Version: version.Version} + if !registered.IsRegisteredVersion(gv) { + registered.AddThirdPartyAPIGroupVersions(gv) + } + } + } + + mapper := discovery.NewRESTMapper(groupResources, meta.InterfacesForUnstructured) + + typer := discovery.NewUnstructuredObjectTyper(groupResources) + + return kubectl.ShortcutExpander{RESTMapper: mapper}, typer, nil + }, Client: func() (*client.Client, error) { return clients.ClientForVersion(nil) }, @@ -339,48 +410,46 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { return clients.ClientConfigForVersion(nil) }, ClientForMapping: func(mapping *meta.RESTMapping) (resource.RESTClient, error) { - gvk := mapping.GroupVersionKind - mappingVersion := mapping.GroupVersionKind.GroupVersion() - c, err := clients.ClientForVersion(&mappingVersion) + cfg, err := clientConfig.ClientConfig() if err != nil { return nil, err } - switch gvk.Group { - case api.GroupName: - return c.RESTClient, nil - case autoscaling.GroupName: - return c.AutoscalingClient.RESTClient, nil - case batch.GroupName: - return c.BatchClient.RESTClient, nil - case policy.GroupName: - return c.PolicyClient.RESTClient, nil - case apps.GroupName: - return c.AppsClient.RESTClient, nil - case extensions.GroupName: - return c.ExtensionsClient.RESTClient, nil - case api.SchemeGroupVersion.Group: - return c.RESTClient, nil - case extensions.SchemeGroupVersion.Group: - return c.ExtensionsClient.RESTClient, nil - case federation.GroupName: - return clients.FederationClientForVersion(&mappingVersion) - case rbac.GroupName: - return c.RbacClient.RESTClient, nil - default: - if !registered.IsThirdPartyAPIGroupVersion(gvk.GroupVersion()) { - return nil, fmt.Errorf("unknown api group/version: %s", gvk.String()) - } - cfg, err := clientConfig.ClientConfig() - if err != nil { - return nil, err - } - gv := gvk.GroupVersion() - cfg.GroupVersion = &gv - cfg.APIPath = "/apis" - cfg.Codec = thirdpartyresourcedata.NewCodec(c.ExtensionsClient.RESTClient.Codec(), gvk) - cfg.NegotiatedSerializer = thirdpartyresourcedata.NewNegotiatedSerializer(api.Codecs, gvk.Kind, gv, gv) - return restclient.RESTClientFor(cfg) + if err := client.SetKubernetesDefaults(cfg); err != nil { + return nil, err } + gvk := mapping.GroupVersionKind + switch gvk.Group { + case federation.GroupName: + mappingVersion := mapping.GroupVersionKind.GroupVersion() + return clients.FederationClientForVersion(&mappingVersion) + case api.GroupName: + cfg.APIPath = "/api" + default: + cfg.APIPath = "/apis" + } + gv := gvk.GroupVersion() + cfg.GroupVersion = &gv + if registered.IsThirdPartyAPIGroupVersion(gvk.GroupVersion()) { + cfg.NegotiatedSerializer = thirdpartyresourcedata.NewNegotiatedSerializer(api.Codecs, gvk.Kind, gv, gv) + } + return restclient.RESTClientFor(cfg) + }, + UnstructuredClientForMapping: func(mapping *meta.RESTMapping) (resource.RESTClient, error) { + cfg, err := clientConfig.ClientConfig() + if err != nil { + return nil, err + } + if err := restclient.SetKubernetesDefaults(cfg); err != nil { + return nil, err + } + cfg.APIPath = "/apis" + if mapping.GroupVersionKind.Group == api.GroupName { + cfg.APIPath = "/api" + } + gv := mapping.GroupVersionKind.GroupVersion() + cfg.ContentConfig = dynamic.ContentConfig() + cfg.GroupVersion = &gv + return restclient.RESTClientFor(cfg) }, Describer: func(mapping *meta.RESTMapping) (kubectl.Describer, error) { mappingVersion := mapping.GroupVersionKind.GroupVersion() @@ -415,8 +484,8 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { JSONEncoder: func() runtime.Encoder { return api.Codecs.LegacyCodec(registered.EnabledVersions()...) }, - Printer: func(mapping *meta.RESTMapping, noHeaders, withNamespace bool, wide bool, showAll bool, showLabels bool, absoluteTimestamps bool, columnLabels []string) (kubectl.ResourcePrinter, error) { - return kubectl.NewHumanReadablePrinter(noHeaders, withNamespace, wide, showAll, showLabels, absoluteTimestamps, columnLabels), nil + Printer: func(mapping *meta.RESTMapping, options kubectl.PrintOptions) (kubectl.ResourcePrinter, error) { + return kubectl.NewHumanReadablePrinter(options), nil }, MapBasedSelectorForObject: func(object runtime.Object) (string, error) { // TODO: replace with a swagger schema based approach (identify pod selector via schema introspection) @@ -777,7 +846,7 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { cluster. If you want to expose this service to the external internet, you may need to set up firewall rules for the service port(s) (%s) to serve traffic. -See http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md for more details. +See http://releases.k8s.io/release-1.4/docs/user-guide/services-firewalls.md for more details. `, makePortsString(obj.Spec.Ports, true)) out.Write([]byte(msg)) @@ -789,7 +858,7 @@ See http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md for It has been promoted to field [loadBalancerSourceRanges] in service spec. This annotation will be deprecated in the future. Please use the loadBalancerSourceRanges field instead. -See http://releases.k8s.io/release-1.3/docs/user-guide/services-firewalls.md for more details. +See http://releases.k8s.io/release-1.4/docs/user-guide/services-firewalls.md for more details. `) out.Write([]byte(msg)) } @@ -1015,7 +1084,7 @@ func getSchemaAndValidate(c schemaClient, data []byte, prefix, groupVersion, cac } err = schema.ValidateBytes(data) if _, ok := err.(validation.TypeNotFoundError); ok && !firstSeen { - // As a temporay hack, kubectl would re-get the schema if validation + // As a temporary hack, kubectl would re-get the schema if validation // fails for type not found reason. // TODO: runtime-config settings needs to make into the file's name schemaData, err = downloadSchemaAndStore(c, cacheDir, fullDir, cacheFile, prefix, groupVersion) @@ -1057,59 +1126,65 @@ func (c *clientSwaggerSchema) ValidateBytes(data []byte) error { if ok := registered.IsEnabledVersion(gvk.GroupVersion()); !ok { return fmt.Errorf("API version %q isn't supported, only supports API versions %q", gvk.GroupVersion().String(), registered.EnabledVersions()) } - if gvk.Group == autoscaling.GroupName { + switch gvk.Group { + case autoscaling.GroupName: if c.c.AutoscalingClient == nil { return errors.New("unable to validate: no autoscaling client") } return getSchemaAndValidate(c.c.AutoscalingClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) - } - if gvk.Group == policy.GroupName { + case policy.GroupName: if c.c.PolicyClient == nil { return errors.New("unable to validate: no policy client") } return getSchemaAndValidate(c.c.PolicyClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) - } - if gvk.Group == apps.GroupName { + case apps.GroupName: if c.c.AppsClient == nil { - return errors.New("unable to validate: no autoscaling client") + return errors.New("unable to validate: no apps client") } return getSchemaAndValidate(c.c.AppsClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) - } - - if gvk.Group == batch.GroupName { + case batch.GroupName: if c.c.BatchClient == nil { return errors.New("unable to validate: no batch client") } return getSchemaAndValidate(c.c.BatchClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) - } - if gvk.Group == rbac.GroupName { + case rbac.GroupName: if c.c.RbacClient == nil { return errors.New("unable to validate: no rbac client") } return getSchemaAndValidate(c.c.RbacClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) + case storage.GroupName: + if c.c.StorageClient == nil { + return errors.New("unable to validate: no storage client") + } + return getSchemaAndValidate(c.c.StorageClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) } if registered.IsThirdPartyAPIGroupVersion(gvk.GroupVersion()) { // Don't attempt to validate third party objects return nil } - if gvk.Group == extensions.GroupName { + switch gvk.Group { + case extensions.GroupName: if c.c.ExtensionsClient == nil { return errors.New("unable to validate: no experimental client") } return getSchemaAndValidate(c.c.ExtensionsClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) - } - if gvk.Group == federation.GroupName { + case federation.GroupName: if c.fedc == nil { return errors.New("unable to validate: no federation client") } return getSchemaAndValidate(c.fedc, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) + case certificates.GroupName: + if c.c.CertificatesClient == nil { + return errors.New("unable to validate: no certificates client") + } + return getSchemaAndValidate(c.c.CertificatesClient.RESTClient, data, "apis/", gvk.GroupVersion().String(), c.cacheDir, c) } return getSchemaAndValidate(c.c.RESTClient, data, "api", gvk.GroupVersion().String(), c.cacheDir, c) } // DefaultClientConfig creates a clientcmd.ClientConfig with the following hierarchy: // 1. Use the kubeconfig builder. The number of merges and overrides here gets a little crazy. Stay with me. -// 1. Merge together the kubeconfig itself. This is done with the following hierarchy rules: +// 1. Merge the kubeconfig itself. This is done with the following hierarchy rules: // 1. CommandLineLocation - this parsed from the command line, so it must be late bound. If you specify this, // then no other kubeconfig files are merged. This file must exist. // 2. If $KUBECONFIG is set, then it is treated as a list of files that should be merged. @@ -1151,6 +1226,9 @@ func DefaultClientConfig(flags *pflag.FlagSet) clientcmd.ClientConfig { flags.StringVar(&loadingRules.ExplicitPath, "kubeconfig", "", "Path to the kubeconfig file to use for CLI requests.") overrides := &clientcmd.ConfigOverrides{} + // use the standard defaults for this client config + mergo.Merge(&overrides.ClusterDefaults, clientcmd.DefaultCluster) + flagNames := clientcmd.RecommendedConfigOverrideFlags("") // short flagnames are disabled by default. These are here for compatibility with existing scripts flagNames.ClusterOverrideFlags.APIServer.ShortName = "s" @@ -1197,14 +1275,16 @@ func (f *Factory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMappin if err != nil { return nil, err } - if version.IsEmpty() { + if version.Empty() && mapping != nil { version = mapping.GroupVersionKind.GroupVersion() } - if version.IsEmpty() { + if version.Empty() { return nil, fmt.Errorf("you must specify an output-version when using this output format") } - printer = kubectl.NewVersionedPrinter(printer, mapping.ObjectConvertor, version, mapping.GroupVersionKind.GroupVersion()) + if mapping != nil { + printer = kubectl.NewVersionedPrinter(printer, mapping.ObjectConvertor, version, mapping.GroupVersionKind.GroupVersion()) + } } else { // Some callers do not have "label-columns" so we can't use the GetFlagStringSlice() helper @@ -1212,7 +1292,15 @@ func (f *Factory) PrinterForMapping(cmd *cobra.Command, mapping *meta.RESTMappin if err != nil { columnLabel = []string{} } - printer, err = f.Printer(mapping, GetFlagBool(cmd, "no-headers"), withNamespace, GetWideFlag(cmd), GetFlagBool(cmd, "show-all"), GetFlagBool(cmd, "show-labels"), isWatch(cmd), columnLabel) + printer, err = f.Printer(mapping, kubectl.PrintOptions{ + NoHeaders: GetFlagBool(cmd, "no-headers"), + WithNamespace: withNamespace, + Wide: GetWideFlag(cmd), + ShowAll: GetFlagBool(cmd, "show-all"), + ShowLabels: GetFlagBool(cmd, "show-labels"), + AbsoluteTimestamps: isWatch(cmd), + ColumnLabels: columnLabel, + }) if err != nil { return nil, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/helpers.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/helpers.go index d7cb1bb9..adc82b6b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/helpers.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ package util import ( "bytes" "encoding/json" + "errors" "fmt" "io" "io/ioutil" @@ -27,7 +28,7 @@ import ( "strings" "time" - "k8s.io/kubernetes/pkg/api/errors" + kerrors "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apimachinery/registered" @@ -38,6 +39,8 @@ import ( "k8s.io/kubernetes/pkg/kubectl/resource" "k8s.io/kubernetes/pkg/runtime" utilerrors "k8s.io/kubernetes/pkg/util/errors" + utilexec "k8s.io/kubernetes/pkg/util/exec" + "k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/strategicpatch" "github.com/evanphx/json-patch" @@ -48,6 +51,7 @@ import ( const ( ApplyAnnotationsFlag = "save-config" + DefaultErrorExitCode = 1 ) type debugError interface { @@ -59,10 +63,10 @@ type debugError interface { // souce is the filename or URL to the template file(*.json or *.yaml), or stdin to use to handle the resource. func AddSourceToErr(verb string, source string, err error) error { if source != "" { - if statusError, ok := err.(errors.APIStatus); ok { + if statusError, ok := err.(kerrors.APIStatus); ok { status := statusError.Status() status.Message = fmt.Sprintf("error when %s %q: %v", verb, source, status.Message) - return &errors.StatusError{ErrStatus: status} + return &kerrors.StatusError{ErrStatus: status} } return fmt.Errorf("error when %s %q: %v", verb, source, err) } @@ -72,9 +76,9 @@ func AddSourceToErr(verb string, source string, err error) error { var fatalErrHandler = fatal // BehaviorOnFatal allows you to override the default behavior when a fatal -// error occurs, which is call os.Exit(1). You can pass 'panic' as a function +// error occurs, which is to call os.Exit(code). You can pass 'panic' as a function // here if you prefer the panic() over os.Exit(1). -func BehaviorOnFatal(f func(string)) { +func BehaviorOnFatal(f func(string, int)) { fatalErrHandler = f } @@ -84,19 +88,21 @@ func DefaultBehaviorOnFatal() { fatalErrHandler = fatal } -// fatal prints the message and then exits. If V(2) or greater, glog.Fatal +// fatal prints the message if set and then exits. If V(2) or greater, glog.Fatal // is invoked for extended information. -func fatal(msg string) { - // add newline if needed - if !strings.HasSuffix(msg, "\n") { - msg += "\n" - } +func fatal(msg string, code int) { + if len(msg) > 0 { + // add newline if needed + if !strings.HasSuffix(msg, "\n") { + msg += "\n" + } - if glog.V(2) { - glog.FatalDepth(2, msg) + if glog.V(2) { + glog.FatalDepth(2, msg) + } + fmt.Fprint(os.Stderr, msg) } - fmt.Fprint(os.Stderr, msg) - os.Exit(1) + os.Exit(code) } // CheckErr prints a user friendly error to STDERR and exits with a non-zero @@ -105,57 +111,78 @@ func fatal(msg string) { // This method is generic to the command in use and may be used by non-Kubectl // commands. func CheckErr(err error) { - checkErr(err, fatalErrHandler) + checkErr("", err, fatalErrHandler) } -func checkErr(err error, handleErr func(string)) { - if err == nil { +// checkErrWithPrefix works like CheckErr, but adds a caller-defined prefix to non-nil errors +func checkErrWithPrefix(prefix string, err error) { + checkErr(prefix, err, fatalErrHandler) +} + +// checkErr formats a given error as a string and calls the passed handleErr +// func with that string and an kubectl exit code. +func checkErr(prefix string, err error, handleErr func(string, int)) { + // unwrap aggregates of 1 + if agg, ok := err.(utilerrors.Aggregate); ok && len(agg.Errors()) == 1 { + err = agg.Errors()[0] + } + + switch { + case err == nil: return - } - - if errors.IsInvalid(err) { - details := err.(*errors.StatusError).Status().Details - prefix := fmt.Sprintf("The %s %q is invalid.\n", details.Kind, details.Name) - errs := statusCausesToAggrError(details.Causes) - handleErr(MultilineError(prefix, errs)) - } - - if noMatch, ok := err.(*meta.NoResourceMatchError); ok { - switch { - case len(noMatch.PartialResource.Group) > 0 && len(noMatch.PartialResource.Version) > 0: - handleErr(fmt.Sprintf("the server doesn't have a resource type %q in group %q and version %q", noMatch.PartialResource.Resource, noMatch.PartialResource.Group, noMatch.PartialResource.Version)) - case len(noMatch.PartialResource.Group) > 0: - handleErr(fmt.Sprintf("the server doesn't have a resource type %q in group %q", noMatch.PartialResource.Resource, noMatch.PartialResource.Group)) - case len(noMatch.PartialResource.Version) > 0: - handleErr(fmt.Sprintf("the server doesn't have a resource type %q in version %q", noMatch.PartialResource.Resource, noMatch.PartialResource.Version)) - default: - handleErr(fmt.Sprintf("the server doesn't have a resource type %q", noMatch.PartialResource.Resource)) + case kerrors.IsInvalid(err): + details := err.(*kerrors.StatusError).Status().Details + s := fmt.Sprintf("%sThe %s %q is invalid", prefix, details.Kind, details.Name) + if len(details.Causes) > 0 { + errs := statusCausesToAggrError(details.Causes) + handleErr(MultilineError(s+": ", errs), DefaultErrorExitCode) + } else { + handleErr(s, DefaultErrorExitCode) } - return - } - - // handle multiline errors - if clientcmd.IsConfigurationInvalid(err) { - handleErr(MultilineError("Error in configuration: ", err)) - } - if agg, ok := err.(utilerrors.Aggregate); ok && len(agg.Errors()) > 0 { - handleErr(MultipleErrors("", agg.Errors())) - } - - msg, ok := StandardErrorMessage(err) - if !ok { - msg = err.Error() - if !strings.HasPrefix(msg, "error: ") { - msg = fmt.Sprintf("error: %s", msg) + case clientcmd.IsConfigurationInvalid(err): + handleErr(MultilineError(fmt.Sprintf("%sError in configuration: ", prefix), err), DefaultErrorExitCode) + default: + switch err := err.(type) { + case *meta.NoResourceMatchError: + switch { + case len(err.PartialResource.Group) > 0 && len(err.PartialResource.Version) > 0: + handleErr(fmt.Sprintf("%sthe server doesn't have a resource type %q in group %q and version %q", prefix, err.PartialResource.Resource, err.PartialResource.Group, err.PartialResource.Version), DefaultErrorExitCode) + case len(err.PartialResource.Group) > 0: + handleErr(fmt.Sprintf("%sthe server doesn't have a resource type %q in group %q", prefix, err.PartialResource.Resource, err.PartialResource.Group), DefaultErrorExitCode) + case len(err.PartialResource.Version) > 0: + handleErr(fmt.Sprintf("%sthe server doesn't have a resource type %q in version %q", prefix, err.PartialResource.Resource, err.PartialResource.Version), DefaultErrorExitCode) + default: + handleErr(fmt.Sprintf("%sthe server doesn't have a resource type %q", prefix, err.PartialResource.Resource), DefaultErrorExitCode) + } + case utilerrors.Aggregate: + handleErr(MultipleErrors(prefix, err.Errors()), DefaultErrorExitCode) + case utilexec.ExitError: + // do not print anything, only terminate with given error + handleErr("", err.ExitStatus()) + default: // for any other error type + msg, ok := StandardErrorMessage(err) + if !ok { + msg = err.Error() + if !strings.HasPrefix(msg, "error: ") { + msg = fmt.Sprintf("error: %s", msg) + } + } + handleErr(msg, DefaultErrorExitCode) } } - handleErr(msg) } func statusCausesToAggrError(scs []unversioned.StatusCause) utilerrors.Aggregate { - errs := make([]error, len(scs)) - for i, sc := range scs { - errs[i] = fmt.Errorf("%s: %s", sc.Field, sc.Message) + errs := make([]error, 0, len(scs)) + errorMsgs := sets.NewString() + for _, sc := range scs { + // check for duplicate error messages and skip them + msg := fmt.Sprintf("%s: %s", sc.Field, sc.Message) + if errorMsgs.Has(msg) { + continue + } + errorMsgs.Insert(msg) + errs = append(errs, errors.New(msg)) } return utilerrors.NewAggregate(errs) } @@ -170,7 +197,7 @@ func StandardErrorMessage(err error) (string, bool) { if debugErr, ok := err.(debugError); ok { glog.V(4).Infof(debugErr.DebugError()) } - status, isStatus := err.(errors.APIStatus) + status, isStatus := err.(kerrors.APIStatus) switch { case isStatus: switch s := status.Status(); { @@ -179,7 +206,7 @@ func StandardErrorMessage(err error) (string, bool) { default: return fmt.Sprintf("Error from server: %s", err.Error()), true } - case errors.IsUnexpectedObjectError(err): + case kerrors.IsUnexpectedObjectError(err): return fmt.Sprintf("Server returned an unexpected response: %s", err.Error()), true } switch t := err.(type) { @@ -358,7 +385,7 @@ func ReadConfigDataFromReader(reader io.Reader, source string) ([]byte, error) { } if len(data) == 0 { - return nil, fmt.Errorf(`Read from %s but no data found`, source) + return nil, fmt.Errorf("Read from %s but no data found", source) } return data, nil @@ -430,7 +457,7 @@ func UpdateObject(info *resource.Info, codec runtime.Codec, updateFn func(runtim // AddCmdRecordFlag adds --record flag to command func AddRecordFlag(cmd *cobra.Command) { - cmd.Flags().Bool("record", false, "Record current kubectl command in the resource annotation.") + cmd.Flags().Bool("record", false, "Record current kubectl command in the resource annotation. If set to false, do not record the command. If set to true, record the command. If not set, default to updating the existing annotation value only if one already exists.") } func GetRecordFlag(cmd *cobra.Command) bool { @@ -484,7 +511,7 @@ func ContainsChangeCause(info *resource.Info) bool { // ShouldRecord checks if we should record current change cause func ShouldRecord(cmd *cobra.Command, info *resource.Info) bool { - return GetRecordFlag(cmd) || ContainsChangeCause(info) + return GetRecordFlag(cmd) || (ContainsChangeCause(info) && !cmd.Flags().Changed("record")) } // GetThirdPartyGroupVersions returns the thirdparty "group/versions"s and @@ -498,7 +525,7 @@ func GetThirdPartyGroupVersions(discovery discovery.DiscoveryInterface) ([]unver groupList, err := discovery.ServerGroups() if err != nil { // On forbidden or not found, just return empty lists. - if errors.IsForbidden(err) || errors.IsNotFound(err) { + if kerrors.IsForbidden(err) || kerrors.IsNotFound(err) { return result, gvks, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/printing.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/printing.go index 979ce7c3..c27cc29c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/printing.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/printing.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,9 +30,9 @@ import ( // AddPrinterFlags adds printing related flags to a command (e.g. output format, no headers, template path) func AddPrinterFlags(cmd *cobra.Command) { - cmd.Flags().StringP("output", "o", "", "Output format. One of: json|yaml|wide|name|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://releases.k8s.io/release-1.3/docs/user-guide/jsonpath.md].") + AddOutputFlags(cmd) cmd.Flags().String("output-version", "", "Output the formatted object with the given group version (for ex: 'extensions/v1beta1').") - cmd.Flags().Bool("no-headers", false, "When using the default output, don't print headers.") + AddNoHeadersFlags(cmd) cmd.Flags().Bool("show-labels", false, "When printing, show all labels as the last column (default hide labels column)") cmd.Flags().String("template", "", "Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].") cmd.MarkFlagFilename("template") @@ -45,6 +45,16 @@ func AddOutputFlagsForMutation(cmd *cobra.Command) { cmd.Flags().StringP("output", "o", "", "Output mode. Use \"-o name\" for shorter output (resource/name).") } +// AddOutputFlags adds output related flags to a command. +func AddOutputFlags(cmd *cobra.Command) { + cmd.Flags().StringP("output", "o", "", "Output format. One of: json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=... See custom columns [http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns], golang template [http://golang.org/pkg/text/template/#pkg-overview] and jsonpath template [http://kubernetes.io/docs/user-guide/jsonpath].") +} + +// AddNoHeadersFlags adds no-headers flags to a command. +func AddNoHeadersFlags(cmd *cobra.Command) { + cmd.Flags().Bool("no-headers", false, "When using the default or custom-column output format, don't print headers.") +} + // PrintSuccess prints message after finishing mutating operations func PrintSuccess(mapper meta.RESTMapper, shortOutput bool, out io.Writer, resource string, name string, operation string) { resource, _ = mapper.ResourceSingularizer(resource) @@ -111,7 +121,7 @@ func PrinterForCommand(cmd *cobra.Command) (kubectl.ResourcePrinter, bool, error } } - printer, generic, err := kubectl.GetPrinter(outputFormat, templateFile) + printer, generic, err := kubectl.GetPrinter(outputFormat, templateFile, GetFlagBool(cmd, "no-headers")) if err != nil { return nil, generic, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/configmap.go b/vendor/k8s.io/kubernetes/pkg/kubectl/configmap.go index 04ed4aa6..3e3a6c06 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/configmap.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/configmap.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ import ( "strings" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/validation" ) // ConfigMapGeneratorV1 supports stable generation of a configMap. @@ -199,10 +199,9 @@ func addKeyFromFileToConfigMap(configMap *api.ConfigMap, keyName, filePath strin // addKeyFromLiteralToConfigMap adds the given key and data to the given config map, // returning an error if the key is not valid or if the key already exists. func addKeyFromLiteralToConfigMap(configMap *api.ConfigMap, keyName, data string) error { - // Note, the rules for ConfigMap keys are the exact same as the ones for SecretKeys - // to be consistent; validation.IsSecretKey is used here intentionally. - if !validation.IsSecretKey(keyName) { - return fmt.Errorf("%v is not a valid key name for a configMap", keyName) + // Note, the rules for ConfigMap keys are the exact same as the ones for SecretKeys. + if errs := validation.IsConfigMapKey(keyName); len(errs) != 0 { + return fmt.Errorf("%q is not a valid key name for a ConfigMap: %s", keyName, strings.Join(errs, ";")) } if _, entryExists := configMap.Data[keyName]; entryExists { return fmt.Errorf("cannot add key %s, another key by that name already exists: %v.", keyName, configMap.Data) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/custom_column_printer.go b/vendor/k8s.io/kubernetes/pkg/kubectl/custom_column_printer.go index 255ad1de..379f4637 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/custom_column_printer.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/custom_column_printer.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -73,7 +73,7 @@ func massageJSONPath(pathExpression string) (string, error) { // // NAME API_VERSION // foo bar -func NewCustomColumnsPrinterFromSpec(spec string, decoder runtime.Decoder) (*CustomColumnsPrinter, error) { +func NewCustomColumnsPrinterFromSpec(spec string, decoder runtime.Decoder, noHeaders bool) (*CustomColumnsPrinter, error) { if len(spec) == 0 { return nil, fmt.Errorf("custom-columns format specified but no custom columns given") } @@ -90,7 +90,7 @@ func NewCustomColumnsPrinterFromSpec(spec string, decoder runtime.Decoder) (*Cus } columns[ix] = Column{Header: colSpec[0], FieldSpec: spec} } - return &CustomColumnsPrinter{Columns: columns, Decoder: decoder}, nil + return &CustomColumnsPrinter{Columns: columns, Decoder: decoder, NoHeaders: noHeaders}, nil } func splitOnWhitespace(line string) []string { @@ -105,7 +105,7 @@ func splitOnWhitespace(line string) []string { // NewCustomColumnsPrinterFromTemplate creates a custom columns printer from a template stream. The template is expected // to consist of two lines, whitespace separated. The first line is the header line, the second line is the jsonpath field spec -// For example the template below: +// For example, the template below: // NAME API_VERSION // {metadata.name} {apiVersion} func NewCustomColumnsPrinterFromTemplate(templateReader io.Reader, decoder runtime.Decoder) (*CustomColumnsPrinter, error) { @@ -135,7 +135,7 @@ func NewCustomColumnsPrinterFromTemplate(templateReader io.Reader, decoder runti FieldSpec: spec, } } - return &CustomColumnsPrinter{Columns: columns, Decoder: decoder}, nil + return &CustomColumnsPrinter{Columns: columns, Decoder: decoder, NoHeaders: false}, nil } // Column represents a user specified column @@ -150,17 +150,25 @@ type Column struct { // CustomColumnPrinter is a printer that knows how to print arbitrary columns // of data from templates specified in the `Columns` array type CustomColumnsPrinter struct { - Columns []Column - Decoder runtime.Decoder + Columns []Column + Decoder runtime.Decoder + NoHeaders bool +} + +func (s *CustomColumnsPrinter) FinishPrint(w io.Writer, res string) error { + return nil } func (s *CustomColumnsPrinter) PrintObj(obj runtime.Object, out io.Writer) error { w := tabwriter.NewWriter(out, columnwidth, tabwidth, padding, padding_character, flags) - headers := make([]string, len(s.Columns)) - for ix := range s.Columns { - headers[ix] = s.Columns[ix].Header + + if !s.NoHeaders { + headers := make([]string, len(s.Columns)) + for ix := range s.Columns { + headers[ix] = s.Columns[ix].Header + } + fmt.Fprintln(w, strings.Join(headers, "\t")) } - fmt.Fprintln(w, strings.Join(headers, "\t")) parsers := make([]*jsonpath.JSONPath, len(s.Columns)) for ix := range s.Columns { parsers[ix] = jsonpath.New(fmt.Sprintf("column%d", ix)) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/deployment.go b/vendor/k8s.io/kubernetes/pkg/kubectl/deployment.go new file mode 100644 index 00000000..03536658 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/deployment.go @@ -0,0 +1,107 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kubectl + +import ( + "fmt" + "strings" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apis/extensions" + "k8s.io/kubernetes/pkg/runtime" +) + +// DeploymentGeneratorV1 supports stable generation of a deployment +type DeploymentBasicGeneratorV1 struct { + Name string + Images []string +} + +// Ensure it supports the generator pattern that uses parameters specified during construction +var _ StructuredGenerator = &DeploymentBasicGeneratorV1{} + +func (DeploymentBasicGeneratorV1) ParamNames() []GeneratorParam { + return []GeneratorParam{ + {"name", true}, + {"image", true}, + } +} + +func (s DeploymentBasicGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { + err := ValidateParams(s.ParamNames(), params) + if err != nil { + return nil, err + } + name, isString := params["name"].(string) + if !isString { + return nil, fmt.Errorf("expected string, saw %v for 'name'", name) + } + imageStrings, isArray := params["image"].([]string) + if !isArray { + return nil, fmt.Errorf("expected []string, found :%v", imageStrings) + } + delegate := &DeploymentBasicGeneratorV1{Name: name, Images: imageStrings} + return delegate.StructuredGenerate() +} + +// StructuredGenerate outputs a deployment object using the configured fields +func (s *DeploymentBasicGeneratorV1) StructuredGenerate() (runtime.Object, error) { + if err := s.validate(); err != nil { + return nil, err + } + + podSpec := api.PodSpec{Containers: []api.Container{}} + for _, imageString := range s.Images { + imageSplit := strings.Split(imageString, "/") + name := imageSplit[len(imageSplit)-1] + podSpec.Containers = append(podSpec.Containers, api.Container{Name: name, Image: imageString}) + } + + // setup default label and selector + labels := map[string]string{} + labels["app"] = s.Name + selector := unversioned.LabelSelector{MatchLabels: labels} + deployment := extensions.Deployment{ + ObjectMeta: api.ObjectMeta{ + Name: s.Name, + Labels: labels, + }, + Spec: extensions.DeploymentSpec{ + Replicas: 1, + Selector: &selector, + Template: api.PodTemplateSpec{ + ObjectMeta: api.ObjectMeta{ + Labels: labels, + }, + Spec: podSpec, + }, + }, + } + return &deployment, nil +} + +// validate validates required fields are set to support structured generation +func (s *DeploymentBasicGeneratorV1) validate() error { + if len(s.Name) == 0 { + return fmt.Errorf("name must be specified") + } + if len(s.Images) == 0 { + return fmt.Errorf("at least one image must be specified") + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/describe.go b/vendor/k8s.io/kubernetes/pkg/kubectl/describe.go index 3adb5e74..88117776 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/describe.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/describe.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -29,7 +29,6 @@ import ( "strings" "time" - "github.com/golang/glog" "k8s.io/kubernetes/federation/apis/federation" fed_clientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset" "k8s.io/kubernetes/pkg/api" @@ -39,18 +38,22 @@ import ( "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/batch" + "k8s.io/kubernetes/pkg/apis/certificates" "k8s.io/kubernetes/pkg/apis/extensions" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" client "k8s.io/kubernetes/pkg/client/unversioned" adapter "k8s.io/kubernetes/pkg/client/unversioned/adapters/internalclientset" + deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/fieldpath" "k8s.io/kubernetes/pkg/fields" - qosutil "k8s.io/kubernetes/pkg/kubelet/qos/util" + "k8s.io/kubernetes/pkg/kubelet/qos" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/types" - deploymentutil "k8s.io/kubernetes/pkg/util/deployment" + utilcertificates "k8s.io/kubernetes/pkg/util/certificates" "k8s.io/kubernetes/pkg/util/intstr" "k8s.io/kubernetes/pkg/util/sets" + + "github.com/golang/glog" ) // Describer generates output for the named resource or an error @@ -102,18 +105,19 @@ func describerMap(c *client.Client) map[unversioned.GroupKind]Describer { api.Kind("Endpoints"): &EndpointsDescriber{c}, api.Kind("ConfigMap"): &ConfigMapDescriber{c}, - api.Kind("SecurityContextConstraints"): &SecurityContextConstraintsDescriber{c}, - - extensions.Kind("ReplicaSet"): &ReplicaSetDescriber{c}, - extensions.Kind("HorizontalPodAutoscaler"): &HorizontalPodAutoscalerDescriber{c}, - extensions.Kind("NetworkPolicy"): &NetworkPolicyDescriber{c}, - autoscaling.Kind("HorizontalPodAutoscaler"): &HorizontalPodAutoscalerDescriber{c}, - extensions.Kind("DaemonSet"): &DaemonSetDescriber{c}, - extensions.Kind("Deployment"): &DeploymentDescriber{adapter.FromUnversionedClient(c)}, - extensions.Kind("Job"): &JobDescriber{c}, - batch.Kind("Job"): &JobDescriber{c}, - apps.Kind("PetSet"): &PetSetDescriber{c}, - extensions.Kind("Ingress"): &IngressDescriber{c}, + extensions.Kind("ReplicaSet"): &ReplicaSetDescriber{c}, + extensions.Kind("HorizontalPodAutoscaler"): &HorizontalPodAutoscalerDescriber{c}, + extensions.Kind("NetworkPolicy"): &NetworkPolicyDescriber{c}, + autoscaling.Kind("HorizontalPodAutoscaler"): &HorizontalPodAutoscalerDescriber{c}, + extensions.Kind("DaemonSet"): &DaemonSetDescriber{c}, + extensions.Kind("Deployment"): &DeploymentDescriber{adapter.FromUnversionedClient(c)}, + extensions.Kind("Job"): &JobDescriber{c}, + extensions.Kind("Ingress"): &IngressDescriber{c}, + batch.Kind("Job"): &JobDescriber{c}, + batch.Kind("ScheduledJob"): &ScheduledJobDescriber{adapter.FromUnversionedClient(c)}, + apps.Kind("PetSet"): &PetSetDescriber{c}, + certificates.Kind("CertificateSigningRequest"): &CertificateSigningRequestDescriber{c}, + api.Kind("SecurityContextConstraints"): &SecurityContextConstraintsDescriber{c}, } return m @@ -666,7 +670,8 @@ func describePod(pod *api.Pod, events *api.EventList) (string, error) { } } describeVolumes(pod.Spec.Volumes, out, "") - fmt.Fprintf(out, "QoS Tier:\t%s\n", qosutil.GetPodQos(pod)) + fmt.Fprintf(out, "QoS Class:\t%s\n", qos.GetPodQOS(pod)) + printTolerationsInAnnotationMultiline(out, "Tolerations", pod.Annotations) if events != nil { DescribeEvents(events, out) } @@ -675,7 +680,7 @@ func describePod(pod *api.Pod, events *api.EventList) (string, error) { } func printControllers(annotation map[string]string) string { - value, ok := annotation["kubernetes.io/created-by"] + value, ok := annotation[api.CreatedByAnnotation] if ok { var r api.SerializedReference err := json.Unmarshal([]byte(value), &r) @@ -724,8 +729,12 @@ func describeVolumes(volumes []api.Volume, out io.Writer, space string) { printPersistentVolumeClaimVolumeSource(volume.VolumeSource.PersistentVolumeClaim, out) case volume.VolumeSource.RBD != nil: printRBDVolumeSource(volume.VolumeSource.RBD, out) + case volume.VolumeSource.Quobyte != nil: + printQuobyteVolumeSource(volume.VolumeSource.Quobyte, out) case volume.VolumeSource.DownwardAPI != nil: printDownwardAPIVolumeSource(volume.VolumeSource.DownwardAPI, out) + case volume.VolumeSource.AzureDisk != nil: + printAzureDiskVolumeSource(volume.VolumeSource.AzureDisk, out) default: fmt.Fprintf(out, " \n") } @@ -785,6 +794,14 @@ func printNFSVolumeSource(nfs *api.NFSVolumeSource, out io.Writer) { nfs.Server, nfs.Path, nfs.ReadOnly) } +func printQuobyteVolumeSource(quobyte *api.QuobyteVolumeSource, out io.Writer) { + fmt.Fprintf(out, " Type:\tQuobyte (a Quobyte mount on the host that shares a pod's lifetime)\n"+ + " Registry:\t%v\n"+ + " Volume:\t%v\n"+ + " ReadOnly:\t%v\n", + quobyte.Registry, quobyte.Volume, quobyte.ReadOnly) +} + func printISCSIVolumeSource(iscsi *api.ISCSIVolumeSource, out io.Writer) { fmt.Fprintf(out, " Type:\tISCSI (an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod)\n"+ " TargetPortal:\t%v\n"+ @@ -836,6 +853,16 @@ func printDownwardAPIVolumeSource(d *api.DownwardAPIVolumeSource, out io.Writer) } } +func printAzureDiskVolumeSource(d *api.AzureDiskVolumeSource, out io.Writer) { + fmt.Fprintf(out, " Type:\tAzureDisk (an Azure Data Disk mount on the host and bind mount to the pod)\n"+ + " DiskName:\t%v\n"+ + " DiskURI:\t%v\n"+ + " FSType:\t%v\n"+ + " CachingMode:\t%v\n"+ + " ReadOnly:\t%v\n", + d.DiskName, d.DataDiskURI, *d.FSType, *d.CachingMode, *d.ReadOnly) +} + type PersistentVolumeDescriber struct { client.Interface } @@ -885,6 +912,8 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe printGlusterfsVolumeSource(pv.Spec.Glusterfs, out) case pv.Spec.RBD != nil: printRBDVolumeSource(pv.Spec.RBD, out) + case pv.Spec.Quobyte != nil: + printQuobyteVolumeSource(pv.Spec.Quobyte, out) } if events != nil { @@ -1013,7 +1042,28 @@ func describeContainers(label string, containers []api.Container, containerStatu probe := DescribeProbe(container.ReadinessProbe) fmt.Fprintf(out, " Readiness:\t%s\n", probe) } + none := "" + if len(container.VolumeMounts) == 0 { + none = "\t" + } + + fmt.Fprintf(out, " Volume Mounts:%s\n", none) + sort.Sort(SortableVolumeMounts(container.VolumeMounts)) + for _, mount := range container.VolumeMounts { + flags := []string{} + switch { + case mount.ReadOnly: + flags = append(flags, "ro") + case !mount.ReadOnly: + flags = append(flags, "rw") + case len(mount.SubPath) > 0: + flags = append(flags, fmt.Sprintf("path=%q", mount.SubPath)) + } + fmt.Fprintf(out, " %s from %s (%s)\n", mount.MountPath, mount.Name, strings.Join(flags, ",")) + } + + none = "" if len(container.Env) == 0 { none = "\t" } @@ -1036,7 +1086,11 @@ func describeContainers(label string, containers []api.Container, containerStatu if err != nil { valueFrom = "" } - fmt.Fprintf(out, " %s:\t%s (%s)\n", e.Name, valueFrom, e.ValueFrom.ResourceFieldRef.Resource) + resource := e.ValueFrom.ResourceFieldRef.Resource + if valueFrom == "0" && (resource == "limits.cpu" || resource == "limits.memory") { + valueFrom = "node allocatable" + } + fmt.Fprintf(out, " %s:\t%s (%s)\n", e.Name, valueFrom, resource) case e.ValueFrom.SecretKeyRef != nil: fmt.Fprintf(out, " %s:\t\n", e.Name, e.ValueFrom.SecretKeyRef.Key, e.ValueFrom.SecretKeyRef.Name) case e.ValueFrom.ConfigMapKeyRef != nil: @@ -1124,6 +1178,14 @@ func describeStatus(stateName string, state api.ContainerState, out io.Writer) { } } +func printBoolPtr(value *bool) string { + if value != nil { + return printBool(*value) + } + + return "" +} + func printBool(value bool) string { if value { return "True" @@ -1253,18 +1315,18 @@ func describeReplicaSet(rs *extensions.ReplicaSet, events *api.EventList, runnin // JobDescriber generates information about a job and the pods it has created. type JobDescriber struct { - client *client.Client + client.Interface } func (d *JobDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) { - job, err := d.client.Extensions().Jobs(namespace).Get(name) + job, err := d.Batch().Jobs(namespace).Get(name) if err != nil { return "", err } var events *api.EventList if describerSettings.ShowEvents { - events, _ = d.client.Events(namespace).Search(job) + events, _ = d.Events(namespace).Search(job) } return describeJob(job, events) @@ -1299,6 +1361,92 @@ func describeJob(job *batch.Job, events *api.EventList) (string, error) { }) } +// ScheduledJobDescriber generates information about a scheduled job and the jobs it has created. +type ScheduledJobDescriber struct { + clientset.Interface +} + +func (d *ScheduledJobDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) { + scheduledJob, err := d.Batch().ScheduledJobs(namespace).Get(name) + if err != nil { + return "", err + } + + var events *api.EventList + if describerSettings.ShowEvents { + events, _ = d.Core().Events(namespace).Search(scheduledJob) + } + + return describeScheduledJob(scheduledJob, events) +} + +func describeScheduledJob(scheduledJob *batch.ScheduledJob, events *api.EventList) (string, error) { + return tabbedString(func(out io.Writer) error { + fmt.Fprintf(out, "Name:\t%s\n", scheduledJob.Name) + fmt.Fprintf(out, "Namespace:\t%s\n", scheduledJob.Namespace) + fmt.Fprintf(out, "Schedule:\t%s\n", scheduledJob.Spec.Schedule) + fmt.Fprintf(out, "Concurrency Policy:\t%s\n", scheduledJob.Spec.ConcurrencyPolicy) + fmt.Fprintf(out, "Suspend:\t%s\n", printBoolPtr(scheduledJob.Spec.Suspend)) + if scheduledJob.Spec.StartingDeadlineSeconds != nil { + fmt.Fprintf(out, "Starting Deadline Seconds:\t%ds\n", *scheduledJob.Spec.StartingDeadlineSeconds) + } else { + fmt.Fprintf(out, "Starting Deadline Seconds:\t\n") + } + describeJobTemplate(scheduledJob.Spec.JobTemplate, out) + printLabelsMultiline(out, "Labels", scheduledJob.Labels) + if scheduledJob.Status.LastScheduleTime != nil { + fmt.Fprintf(out, "Last Schedule Time:\t%s\n", scheduledJob.Status.LastScheduleTime.Time.Format(time.RFC1123Z)) + } else { + fmt.Fprintf(out, "Last Schedule Time:\t\n") + } + printActiveJobs(out, "Active Jobs", scheduledJob.Status.Active) + if events != nil { + DescribeEvents(events, out) + } + return nil + }) +} + +func describeJobTemplate(jobTemplate batch.JobTemplateSpec, out io.Writer) { + fmt.Fprintf(out, "Image(s):\t%s\n", makeImageList(&jobTemplate.Spec.Template.Spec)) + if jobTemplate.Spec.Selector != nil { + selector, _ := unversioned.LabelSelectorAsSelector(jobTemplate.Spec.Selector) + fmt.Fprintf(out, "Selector:\t%s\n", selector) + } else { + fmt.Fprintf(out, "Selector:\t\n") + } + if jobTemplate.Spec.Parallelism != nil { + fmt.Fprintf(out, "Parallelism:\t%d\n", *jobTemplate.Spec.Parallelism) + } else { + fmt.Fprintf(out, "Parallelism:\t\n") + } + if jobTemplate.Spec.Completions != nil { + fmt.Fprintf(out, "Completions:\t%d\n", *jobTemplate.Spec.Completions) + } else { + fmt.Fprintf(out, "Completions:\t\n") + } + if jobTemplate.Spec.ActiveDeadlineSeconds != nil { + fmt.Fprintf(out, "Active Deadline Seconds:\t%ds\n", *jobTemplate.Spec.ActiveDeadlineSeconds) + } + describeVolumes(jobTemplate.Spec.Template.Spec.Volumes, out, "") +} + +func printActiveJobs(out io.Writer, title string, jobs []api.ObjectReference) { + fmt.Fprintf(out, "%s:\t", title) + if len(jobs) == 0 { + fmt.Fprintln(out, "") + return + } + + for i, job := range jobs { + if i != 0 { + fmt.Fprint(out, ", ") + } + fmt.Fprintf(out, "%s", job.Name) + } + fmt.Fprintln(out, "") +} + // DaemonSetDescriber generates information about a daemon set and the pods it has created. type DaemonSetDescriber struct { client.Interface @@ -1552,6 +1700,12 @@ func describeService(service *api.Service, endpoints *api.Endpoints, events *api fmt.Fprintf(out, "Selector:\t%s\n", labels.FormatLabels(service.Spec.Selector)) fmt.Fprintf(out, "Type:\t%s\n", service.Spec.Type) fmt.Fprintf(out, "IP:\t%s\n", service.Spec.ClusterIP) + if len(service.Spec.ExternalIPs) > 0 { + fmt.Fprintf(out, "External IPs:\t%v\n", strings.Join(service.Spec.ExternalIPs, ",")) + } + if service.Spec.ExternalName != "" { + fmt.Fprintf(out, "External Name:\t%s\n", service.Spec.ExternalName) + } if len(service.Status.LoadBalancer.Ingress) > 0 { list := buildIngressString(service.Status.LoadBalancer.Ingress) fmt.Fprintf(out, "LoadBalancer Ingress:\t%s\n", list) @@ -1893,6 +2047,74 @@ func (p *PetSetDescriber) Describe(namespace, name string, describerSettings Des }) } +type CertificateSigningRequestDescriber struct { + client *client.Client +} + +func (p *CertificateSigningRequestDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) { + csr, err := p.client.Certificates().CertificateSigningRequests().Get(name) + if err != nil { + return "", err + } + + cr, err := utilcertificates.ParseCertificateRequestObject(csr) + if err != nil { + return "", fmt.Errorf("Error parsing CSR: %v", err) + } + status, err := extractCSRStatus(csr) + if err != nil { + return "", err + } + + printListHelper := func(out io.Writer, prefix, name string, values []string) { + if len(values) == 0 { + return + } + fmt.Fprintf(out, prefix+name+":\t") + fmt.Fprintf(out, strings.Join(values, "\n"+prefix+"\t")) + fmt.Fprintf(out, "\n") + } + + return tabbedString(func(out io.Writer) error { + fmt.Fprintf(out, "Name:\t%s\n", csr.Name) + fmt.Fprintf(out, "Labels:\t%s\n", labels.FormatLabels(csr.Labels)) + fmt.Fprintf(out, "Annotations:\t%s\n", labels.FormatLabels(csr.Annotations)) + fmt.Fprintf(out, "CreationTimestamp:\t%s\n", csr.CreationTimestamp.Time.Format(time.RFC1123Z)) + fmt.Fprintf(out, "Requesting User:\t%s\n", csr.Spec.Username) + fmt.Fprintf(out, "Status:\t%s\n", status) + + fmt.Fprintf(out, "Subject:\n") + fmt.Fprintf(out, "\tCommon Name:\t%s\n", cr.Subject.CommonName) + fmt.Fprintf(out, "\tSerial Number:\t%s\n", cr.Subject.SerialNumber) + printListHelper(out, "\t", "Organization", cr.Subject.Organization) + printListHelper(out, "\t", "Organizational Unit", cr.Subject.OrganizationalUnit) + printListHelper(out, "\t", "Country", cr.Subject.Country) + printListHelper(out, "\t", "Locality", cr.Subject.Locality) + printListHelper(out, "\t", "Province", cr.Subject.Province) + printListHelper(out, "\t", "StreetAddress", cr.Subject.StreetAddress) + printListHelper(out, "\t", "PostalCode", cr.Subject.PostalCode) + + if len(cr.DNSNames)+len(cr.EmailAddresses)+len(cr.IPAddresses) > 0 { + fmt.Fprintf(out, "Subject Alternative Names:\n") + printListHelper(out, "\t", "DNS Names", cr.DNSNames) + printListHelper(out, "\t", "Email Addresses", cr.EmailAddresses) + var ipaddrs []string + for _, ipaddr := range cr.IPAddresses { + ipaddrs = append(ipaddrs, ipaddr.String()) + } + printListHelper(out, "\t", "IP Addresses", ipaddrs) + } + + if describerSettings.ShowEvents { + events, _ := p.client.Events(namespace).Search(csr) + if events != nil { + DescribeEvents(events, out) + } + } + return nil + }) +} + // HorizontalPodAutoscalerDescriber generates information about a horizontal pod autoscaler. type HorizontalPodAutoscalerDescriber struct { client *client.Client @@ -1973,7 +2195,7 @@ func describeNodeResource(nodeNonTerminatedPodsList *api.PodList, node *api.Node memoryReq.String(), int64(fractionMemoryReq), memoryLimit.String(), int64(fractionMemoryLimit)) } - fmt.Fprint(out, "Allocated resources:\n (Total limits may be over 100 percent, i.e., overcommitted. More info: http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md)\n CPU Requests\tCPU Limits\tMemory Requests\tMemory Limits\n") + fmt.Fprint(out, "Allocated resources:\n (Total limits may be over 100 percent, i.e., overcommitted.\n CPU Requests\tCPU Limits\tMemory Requests\tMemory Limits\n") fmt.Fprint(out, " ------------\t----------\t---------------\t-------------\n") reqs, limits, err := getPodsTotalRequestsAndLimits(nodeNonTerminatedPodsList) if err != nil { @@ -2033,7 +2255,7 @@ func getPodsTotalRequestsAndLimits(podList *api.PodList) (reqs map[api.ResourceN func DescribeEvents(el *api.EventList, w io.Writer) { if len(el.Items) == 0 { - fmt.Fprint(w, "No events.") + fmt.Fprint(w, "No events.\n") return } sort.Sort(SortableEvents(el.Items)) @@ -2088,6 +2310,10 @@ func (dd *DeploymentDescriber) Describe(namespace, name string, describerSetting } fmt.Fprintf(out, "NewReplicaSet:\t%s\n", printReplicaSetsByLabels(newRSs)) } + overlapWith := d.Annotations[deploymentutil.OverlapAnnotation] + if len(overlapWith) > 0 { + fmt.Fprintf(out, "!!!WARNING!!! This deployment has overlapping label selector with deployment %q and won't behave as expected. Please fix it before continue.\n", overlapWith) + } if describerSettings.ShowEvents { events, err := dd.Core().Events(namespace).Search(d) if err == nil && events != nil { @@ -2472,14 +2698,64 @@ func printTaintsMultilineWithIndent(out io.Writer, initialIndent, title, innerIn } sort.Strings(keys) + effects := []api.TaintEffect{api.TaintEffectNoSchedule, api.TaintEffectPreferNoSchedule} + for i, key := range keys { - for _, taint := range taints { - if taint.Key == key { + for _, effect := range effects { + for _, taint := range taints { + if taint.Key == key && taint.Effect == effect { + if i != 0 { + fmt.Fprint(out, initialIndent) + fmt.Fprint(out, innerIndent) + } + fmt.Fprintf(out, "%s=%s:%s\n", taint.Key, taint.Value, taint.Effect) + i++ + } + } + } + } +} + +// printTolerationsMultiline prints multiple tolerations with a proper alignment. +func printTolerationsInAnnotationMultiline(out io.Writer, title string, annotations map[string]string) { + tolerations, err := api.GetTolerationsFromPodAnnotations(annotations) + if err != nil { + tolerations = []api.Toleration{} + } + printTolerationsMultilineWithIndent(out, "", title, "\t", tolerations) +} + +// printTolerationsMultilineWithIndent prints multiple tolerations with a user-defined alignment. +func printTolerationsMultilineWithIndent(out io.Writer, initialIndent, title, innerIndent string, tolerations []api.Toleration) { + fmt.Fprintf(out, "%s%s:%s", initialIndent, title, innerIndent) + + if tolerations == nil || len(tolerations) == 0 { + fmt.Fprintln(out, "") + return + } + + // to print tolerations in the sorted order + keys := make([]string, 0, len(tolerations)) + for _, toleration := range tolerations { + keys = append(keys, toleration.Key) + } + sort.Strings(keys) + + for i, key := range keys { + for _, toleration := range tolerations { + if toleration.Key == key { if i != 0 { fmt.Fprint(out, initialIndent) fmt.Fprint(out, innerIndent) } - fmt.Fprintf(out, "%s=%s:%s\n", taint.Key, taint.Value, taint.Effect) + fmt.Fprintf(out, "%s=%s", toleration.Key, toleration.Value) + if len(toleration.Operator) != 0 { + fmt.Fprintf(out, ":%s", toleration.Operator) + } + if len(toleration.Effect) != 0 { + fmt.Fprintf(out, ":%s", toleration.Effect) + } + fmt.Fprintf(out, "\n") i++ } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/doc.go b/vendor/k8s.io/kubernetes/pkg/kubectl/doc.go index cc34fba7..d1516ebb 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/explain.go b/vendor/k8s.io/kubernetes/pkg/kubectl/explain.go index d8b9a147..dd85a7f3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/explain.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/explain.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/generate.go b/vendor/k8s.io/kubernetes/pkg/kubectl/generate.go index ea254bcb..e1ffe370 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/generate.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/generate.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/history.go b/vendor/k8s.io/kubernetes/pkg/kubectl/history.go index ec058040..8485139f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/history.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/history.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,8 +26,8 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" + deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/runtime" - deploymentutil "k8s.io/kubernetes/pkg/util/deployment" sliceutil "k8s.io/kubernetes/pkg/util/slice" ) @@ -35,7 +35,7 @@ const ( ChangeCauseAnnotation = "kubernetes.io/change-cause" ) -// HistoryViewer provides an interface for resources that have historical information. +// HistoryViewer provides an interface for resources have historical information. type HistoryViewer interface { ViewHistory(namespace, name string, revision int64) (string, error) } @@ -52,7 +52,7 @@ type DeploymentHistoryViewer struct { c clientset.Interface } -// ViewHistory prints the revision history of a deployment +// ViewHistory returns a revision-to-replicaset map as the revision history of a deployment func (h *DeploymentHistoryViewer) ViewHistory(namespace, name string, revision int64) (string, error) { deployment, err := h.c.Extensions().Deployments(namespace).Get(name) if err != nil { @@ -60,11 +60,15 @@ func (h *DeploymentHistoryViewer) ViewHistory(namespace, name string, revision i } _, allOldRSs, newRS, err := deploymentutil.GetAllReplicaSets(deployment, h.c) if err != nil { - return "", fmt.Errorf("failed to retrieve old replica sets from deployment %s: %v", name, err) + return "", fmt.Errorf("failed to retrieve replica sets from deployment %s: %v", name, err) + } + allRSs := allOldRSs + if newRS != nil { + allRSs = append(allRSs, newRS) } historyInfo := make(map[int64]*api.PodTemplateSpec) - for _, rs := range append(allOldRSs, newRS) { + for _, rs := range allRSs { v, err := deploymentutil.Revision(rs) if err != nil { continue @@ -95,7 +99,7 @@ func (h *DeploymentHistoryViewer) ViewHistory(namespace, name string, revision i } // Sort the revisionToChangeCause map by revision - var revisions []int64 + revisions := make([]int64, 0, len(historyInfo)) for r := range historyInfo { revisions = append(revisions, r) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/interfaces.go b/vendor/k8s.io/kubernetes/pkg/kubectl/interfaces.go index 8f1e6f19..f8acb1ea 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/interfaces.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/interfaces.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/kubectl.go b/vendor/k8s.io/kubernetes/pkg/kubectl/kubectl.go index 7897a7b7..baabf517 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/kubectl.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/kubectl.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,12 +30,6 @@ import ( const ( kubectlAnnotationPrefix = "kubectl.kubernetes.io/" - // TODO: auto-generate this - PossibleResourceTypes = `Possible resource types include (case insensitive): pods (po), services (svc), deployments, -replicasets (rs), replicationcontrollers (rc), nodes (no), events (ev), limitranges (limits), -persistentvolumes (pv), persistentvolumeclaims (pvc), resourcequotas (quota), namespaces (ns), -serviceaccounts (sa), ingresses (ing), horizontalpodautoscalers (hpa), daemonsets (ds), configmaps, -componentstatuses (cs), endpoints (ep), and secrets.` ) type NamespaceInfo struct { @@ -148,7 +142,10 @@ var shortForms = map[string]string{ // Please keep this alphabetized // If you add an entry here, please also take a look at pkg/kubectl/cmd/cmd.go // and add an entry to valid_resources when appropriate. + "cm": "configmaps", "cs": "componentstatuses", + "csr": "certificatesigningrequests", + "deploy": "deployments", "ds": "daemonsets", "ep": "endpoints", "ev": "events", @@ -169,6 +166,19 @@ var shortForms = map[string]string{ "svc": "services", } +// Look-up for resource short forms by value +func ResourceShortFormFor(resource string) (string, bool) { + var alias string + exists := false + for k, val := range shortForms { + if val == resource { + alias = k + exists = true + } + } + return alias, exists +} + // expandResourceShortcut will return the expanded version of resource // (something that a pkg/api/meta.RESTMapper can understand), if it is // indeed a shortcut. Otherwise, will return resource unmodified. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/namespace.go b/vendor/k8s.io/kubernetes/pkg/kubectl/namespace.go index c6011d38..6d58c226 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/namespace.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/namespace.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/proxy_server.go b/vendor/k8s.io/kubernetes/pkg/kubectl/proxy_server.go index 082b542f..b837fc40 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/proxy_server.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/proxy_server.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -35,7 +35,7 @@ import ( const ( DefaultHostAcceptRE = "^localhost$,^127\\.0\\.0\\.1$,^\\[::1\\]$" DefaultPathAcceptRE = "^/.*" - DefaultPathRejectRE = "^/api/.*/exec,^/api/.*/run,^/api/.*/attach" + DefaultPathRejectRE = "^/api/.*/pods/.*/exec,^/api/.*/pods/.*/attach" DefaultMethodRejectRE = "POST,PUT,PATCH" ) @@ -63,7 +63,7 @@ type FilterServer struct { delegate http.Handler } -// Splits a comma separated list of regexps into a array of Regexp objects. +// Splits a comma separated list of regexps into an array of Regexp objects. func MakeRegexpArray(str string) ([]*regexp.Regexp, error) { parts := strings.Split(str, ",") result := make([]*regexp.Regexp, len(parts)) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/quota.go b/vendor/k8s.io/kubernetes/pkg/kubectl/quota.go new file mode 100644 index 00000000..1261aba2 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/quota.go @@ -0,0 +1,125 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kubectl + +import ( + "fmt" + "strings" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/runtime" +) + +// ResourceQuotaGeneratorV1 supports stable generation of a resource quota +type ResourceQuotaGeneratorV1 struct { + // The name of a quota object. + Name string + + // The hard resource limit string before parsing. + Hard string + + // The scopes of a quota object before parsing. + Scopes string +} + +// ParamNames returns the set of supported input parameters when using the parameter injection generator pattern +func (g ResourceQuotaGeneratorV1) ParamNames() []GeneratorParam { + return []GeneratorParam{ + {"name", true}, + {"hard", true}, + {"scopes", false}, + } +} + +// Ensure it supports the generator pattern that uses parameter injection +var _ Generator = &ResourceQuotaGeneratorV1{} + +// Ensure it supports the generator pattern that uses parameters specified during construction +var _ StructuredGenerator = &ResourceQuotaGeneratorV1{} + +func (g ResourceQuotaGeneratorV1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { + err := ValidateParams(g.ParamNames(), genericParams) + if err != nil { + return nil, err + } + + params := map[string]string{} + for key, value := range genericParams { + strVal, isString := value.(string) + if !isString { + return nil, fmt.Errorf("expected string, saw %v for '%s'", value, key) + } + params[key] = strVal + } + + delegate := &ResourceQuotaGeneratorV1{} + delegate.Name = params["name"] + delegate.Hard = params["hard"] + delegate.Scopes = params["scopes"] + return delegate.StructuredGenerate() +} + +// StructuredGenerate outputs a ResourceQuota object using the configured fields +func (g *ResourceQuotaGeneratorV1) StructuredGenerate() (runtime.Object, error) { + if err := g.validate(); err != nil { + return nil, err + } + + resourceList, err := populateResourceList(g.Hard) + if err != nil { + return nil, err + } + + scopes, err := parseScopes(g.Scopes) + if err != nil { + return nil, err + } + + resourceQuota := &api.ResourceQuota{} + resourceQuota.Name = g.Name + resourceQuota.Spec.Hard = resourceList + resourceQuota.Spec.Scopes = scopes + return resourceQuota, nil +} + +// validate validates required fields are set to support structured generation +func (r *ResourceQuotaGeneratorV1) validate() error { + if len(r.Name) == 0 { + return fmt.Errorf("name must be specified") + } + return nil +} + +func parseScopes(spec string) ([]api.ResourceQuotaScope, error) { + // empty input gets a nil response to preserve generator test expected behaviors + if spec == "" { + return nil, nil + } + + scopes := strings.Split(spec, ",") + result := make([]api.ResourceQuotaScope, 0, len(scopes)) + for _, scope := range scopes { + // intentionally do not verify the scope against the valid scope list. This is done by the apiserver anyway. + + if scope == "" { + return nil, fmt.Errorf("invalid resource quota scope \"\"") + } + + result = append(result, api.ResourceQuotaScope(scope)) + } + return result, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/builder.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/builder.go index ae19557f..41fc1a8b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/builder.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/builder.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -78,6 +78,21 @@ type Builder struct { schema validation.Schema } +var missingResourceError = fmt.Errorf(`You must provide one or more resources by argument or filename. +Example resource specifications include: + '-f rsrc.yaml' + '--filename=rsrc.json' + 'pods my-pod' + 'services'`) + +// TODO: expand this to include other errors. +func IsUsageError(err error) bool { + if err == nil { + return false + } + return err == missingResourceError +} + type resourceTuple struct { Resource string Name string @@ -212,6 +227,10 @@ func (b *Builder) ResourceNames(resource string, names ...string) *Builder { b.resourceTuples = append(b.resourceTuples, tuple) continue } + if len(resource) == 0 { + b.errs = append(b.errs, fmt.Errorf("the argument %q must be RESOURCE/NAME", name)) + continue + } // Use the given default type to create a resource tuple b.resourceTuples = append(b.resourceTuples, resourceTuple{Resource: resource, Name: name}) @@ -333,7 +352,7 @@ func (b *Builder) ResourceTypeOrNameArgs(allowEmptySelector bool, args ...string } case len(args) == 0: default: - b.errs = append(b.errs, fmt.Errorf("when passing arguments, must be resource or resource and name")) + b.errs = append(b.errs, fmt.Errorf("arguments must consist of a resource or a resource and name")) } return b } @@ -362,7 +381,12 @@ func hasCombinedTypeArgs(args []string) (bool, error) { case hasSlash > 0 && hasSlash == len(args): return true, nil case hasSlash > 0 && hasSlash != len(args): - return true, fmt.Errorf("when passing arguments in resource/name form, all arguments must include the resource") + baseCmd := "cmd" + if len(os.Args) > 0 { + baseCmdSlice := strings.Split(os.Args[0], "/") + baseCmd = baseCmdSlice[len(baseCmdSlice)-1] + } + return true, fmt.Errorf("there is no need to specify a resource type as a separate argument when passing arguments in resource/name form (e.g. '%s get resource/' instead of '%s get resource resource/'", baseCmd, baseCmd) default: return false, nil } @@ -449,7 +473,7 @@ func (b *Builder) mappingFor(resourceArg string) (*meta.RESTMapping, error) { if fullySpecifiedGVR != nil { gvk, _ = b.mapper.KindFor(*fullySpecifiedGVR) } - if gvk.IsEmpty() { + if gvk.Empty() { var err error gvk, err = b.mapper.KindFor(groupResource.WithVersion("")) if err != nil { @@ -688,7 +712,10 @@ func (b *Builder) visitorResult() *Result { return &Result{singular: singular, visitor: visitors, sources: b.paths} } - return &Result{err: fmt.Errorf("you must provide one or more resources by argument or filename (%s)", strings.Join(InputExtensions, "|"))} + if len(b.resources) != 0 { + return &Result{err: fmt.Errorf("resource(s) were provided, but no name, label selector, or --all flag specified")} + } + return &Result{err: missingResourceError} } // Do returns a Result object with a Visitor for the resources identified by the Builder. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/doc.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/doc.go index 05b35cfd..a0e22e7c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/helper.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/helper.go index 849a6c04..6b5f8d63 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/helper.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/helper.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/interfaces.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/interfaces.go index 2639a61e..7a872eb2 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/interfaces.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/interfaces.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/mapper.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/mapper.go index 1ca922a0..66f0da44 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/mapper.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/mapper.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,7 +22,6 @@ import ( "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" - "k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata" "k8s.io/kubernetes/pkg/runtime" ) @@ -54,20 +53,8 @@ func (m *Mapper) InfoForData(data []byte, source string) (*Info, error) { if err != nil { return nil, fmt.Errorf("unable to decode %q: %v", source, err) } - var obj runtime.Object - var versioned runtime.Object - if isThirdParty, gvkOut, err := thirdpartyresourcedata.IsThirdPartyObject(data, gvk); err != nil { - return nil, err - } else if isThirdParty { - obj, err = runtime.Decode(thirdpartyresourcedata.NewDecoder(nil, gvkOut.Kind), data) - versioned = obj - gvk = gvkOut - } else { - obj, versioned = versions.Last(), versions.First() - } - if err != nil { - return nil, fmt.Errorf("unable to decode %q: %v [%v]", source, err, gvk) - } + + obj, versioned := versions.Last(), versions.First() mapping, err := m.RESTMapping(gvk.GroupKind(), gvk.Version) if err != nil { return nil, fmt.Errorf("unable to recognize %q: %v", source, err) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/result.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/result.go index 562fc0cc..892b30e9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/result.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/result.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -250,7 +250,7 @@ func AsVersionedObjects(infos []*Info, version unversioned.GroupVersion, encoder // objects that are not part of api.Scheme must be converted to JSON // TODO: convert to map[string]interface{}, attach to runtime.Unknown? - if !version.IsEmpty() { + if !version.Empty() { if _, _, err := api.Scheme.ObjectKinds(info.Object); runtime.IsNotRegisteredError(err) { // TODO: ideally this would encode to version, but we don't expose multiple codecs here. data, err := runtime.Encode(encoder, info.Object) @@ -274,13 +274,13 @@ func AsVersionedObjects(infos []*Info, version unversioned.GroupVersion, encoder // tryConvert attempts to convert the given object to the provided versions in order. This function assumes // the object is in internal version. -func tryConvert(convertor runtime.ObjectConvertor, object runtime.Object, versions ...unversioned.GroupVersion) (runtime.Object, error) { +func tryConvert(converter runtime.ObjectConvertor, object runtime.Object, versions ...unversioned.GroupVersion) (runtime.Object, error) { var last error for _, version := range versions { - if version.IsEmpty() { + if version.Empty() { return object, nil } - obj, err := convertor.ConvertToVersion(object, version) + obj, err := converter.ConvertToVersion(object, version) if err != nil { last = err continue diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/selector.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/selector.go index d29e119b..bf9e0495 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/selector.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/selector.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/visitor.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/visitor.go index 2430b312..365427c4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource/visitor.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource/visitor.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -207,10 +207,6 @@ func ValidateSchema(data []byte, schema validation.Schema) error { if schema == nil { return nil } - data, err := yaml.ToJSON(data) - if err != nil { - return fmt.Errorf("error converting to YAML: %v", err) - } if err := schema.ValidateBytes(data); err != nil { return fmt.Errorf("error validating data: %v; %s", err, stopValidateMessage) } @@ -389,7 +385,7 @@ func (v FlattenListVisitor) Visit(fn VisitorFunc) error { // If we have a GroupVersionKind on the list, prioritize that when asking for info on the objects contained in the list var preferredGVKs []unversioned.GroupVersionKind - if info.Mapping != nil && !info.Mapping.GroupVersionKind.IsEmpty() { + if info.Mapping != nil && !info.Mapping.GroupVersionKind.Empty() { preferredGVKs = append(preferredGVKs, info.Mapping.GroupVersionKind) } @@ -431,7 +427,7 @@ func FileVisitorForSTDIN(mapper *Mapper, schema validation.Schema) Visitor { } // ExpandPathsToFileVisitors will return a slice of FileVisitors that will handle files from the provided path. -// After FileVisitors open the files, they will pass a io.Reader to a StreamVisitor to do the reading. (stdin +// After FileVisitors open the files, they will pass an io.Reader to a StreamVisitor to do the reading. (stdin // is also taken care of). Paths argument also accepts a single file, and will return a single visitor func ExpandPathsToFileVisitors(mapper *Mapper, paths string, recursive bool, extensions []string, schema validation.Schema) ([]Visitor, error) { var visitors []Visitor @@ -622,13 +618,7 @@ func RetrieveLatest(info *Info, err error) error { if info.Namespaced() && len(info.Namespace) == 0 { return fmt.Errorf("no namespace set on resource %s %q", info.Mapping.Resource, info.Name) } - obj, err := NewHelper(info.Client, info.Mapping).Get(info.Namespace, info.Name, info.Export) - if err != nil { - return err - } - info.Object = obj - info.ResourceVersion, _ = info.Mapping.MetadataAccessor.ResourceVersion(obj) - return nil + return info.Get() } // RetrieveLazy updates the object if it has not been loaded yet. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/resource_printer.go b/vendor/k8s.io/kubernetes/pkg/kubectl/resource_printer.go index dd01e65f..5af291ed 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/resource_printer.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/resource_printer.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -39,8 +39,10 @@ import ( "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/autoscaling" "k8s.io/kubernetes/pkg/apis/batch" + "k8s.io/kubernetes/pkg/apis/certificates" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/apis/rbac" + "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" utilerrors "k8s.io/kubernetes/pkg/util/errors" @@ -62,7 +64,7 @@ const ( // is agnostic to schema versions, so you must send arguments to PrintObj in the // version you wish them to be shown using a VersionedPrinter (typically when // generic is true). -func GetPrinter(format, formatArgument string) (ResourcePrinter, bool, error) { +func GetPrinter(format, formatArgument string, noHeaders bool) (ResourcePrinter, bool, error) { var printer ResourcePrinter switch format { case "json": @@ -119,7 +121,7 @@ func GetPrinter(format, formatArgument string) (ResourcePrinter, bool, error) { } case "custom-columns": var err error - if printer, err = NewCustomColumnsPrinterFromSpec(formatArgument, api.Codecs.UniversalDecoder()); err != nil { + if printer, err = NewCustomColumnsPrinterFromSpec(formatArgument, api.Codecs.UniversalDecoder(), noHeaders); err != nil { return nil, false, err } case "custom-columns-file": @@ -127,6 +129,7 @@ func GetPrinter(format, formatArgument string) (ResourcePrinter, bool, error) { if err != nil { return nil, false, fmt.Errorf("error reading template %s, %v\n", formatArgument, err) } + defer file.Close() if printer, err = NewCustomColumnsPrinterFromTemplate(file, api.Codecs.UniversalDecoder()); err != nil { return nil, false, err } @@ -145,6 +148,9 @@ type ResourcePrinter interface { // Print receives a runtime object, formats it and prints it to a writer. PrintObj(runtime.Object, io.Writer) error HandledResources() []string + //Can be used to print out warning/clarifications if needed + //after all objects were printed + FinishPrint(io.Writer, string) error } // ResourcePrinterFunc is a function that can print objects @@ -160,29 +166,37 @@ func (fn ResourcePrinterFunc) HandledResources() []string { return []string{} } +func (fn ResourcePrinterFunc) FinishPrint(io.Writer, string) error { + return nil +} + // VersionedPrinter takes runtime objects and ensures they are converted to a given API version // prior to being passed to a nested printer. type VersionedPrinter struct { printer ResourcePrinter - convertor runtime.ObjectConvertor + converter runtime.ObjectConvertor versions []unversioned.GroupVersion } // NewVersionedPrinter wraps a printer to convert objects to a known API version prior to printing. -func NewVersionedPrinter(printer ResourcePrinter, convertor runtime.ObjectConvertor, versions ...unversioned.GroupVersion) ResourcePrinter { +func NewVersionedPrinter(printer ResourcePrinter, converter runtime.ObjectConvertor, versions ...unversioned.GroupVersion) ResourcePrinter { return &VersionedPrinter{ printer: printer, - convertor: convertor, + converter: converter, versions: versions, } } +func (p *VersionedPrinter) FinishPrint(w io.Writer, res string) error { + return nil +} + // PrintObj implements ResourcePrinter func (p *VersionedPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if len(p.versions) == 0 { return fmt.Errorf("no version specified, object cannot be converted") } - converted, err := p.convertor.ConvertToVersion(obj, unversioned.GroupVersions(p.versions)) + converted, err := p.converter.ConvertToVersion(obj, unversioned.GroupVersions(p.versions)) if err != nil { return err } @@ -200,6 +214,10 @@ type NamePrinter struct { Typer runtime.ObjectTyper } +func (p *NamePrinter) FinishPrint(w io.Writer, res string) error { + return nil +} + // PrintObj is an implementation of ResourcePrinter.PrintObj which decodes the object // and print "resource/name" pair. If the object is a List, print all items in it. func (p *NamePrinter) PrintObj(obj runtime.Object, w io.Writer) error { @@ -248,6 +266,10 @@ func (p *NamePrinter) HandledResources() []string { type JSONPrinter struct { } +func (p *JSONPrinter) FinishPrint(w io.Writer, res string) error { + return nil +} + // PrintObj is an implementation of ResourcePrinter.PrintObj which simply writes the object to the Writer. func (p *JSONPrinter) PrintObj(obj runtime.Object, w io.Writer) error { switch obj := obj.(type) { @@ -256,14 +278,12 @@ func (p *JSONPrinter) PrintObj(obj runtime.Object, w io.Writer) error { return err } - data, err := json.Marshal(obj) + data, err := json.MarshalIndent(obj, "", " ") if err != nil { return err } - dst := bytes.Buffer{} - err = json.Indent(&dst, data, "", " ") - dst.WriteByte('\n') - _, err = w.Write(dst.Bytes()) + data = append(data, '\n') + _, err = w.Write(data) return err } @@ -277,7 +297,11 @@ func (p *JSONPrinter) HandledResources() []string { // to the given version first. type YAMLPrinter struct { version string - convertor runtime.ObjectConvertor + converter runtime.ObjectConvertor +} + +func (p *YAMLPrinter) FinishPrint(w io.Writer, res string) error { + return nil } // PrintObj prints the data as YAML. @@ -308,15 +332,18 @@ func (p *YAMLPrinter) HandledResources() []string { type handlerEntry struct { columns []string printFunc reflect.Value + args []reflect.Value } type PrintOptions struct { NoHeaders bool WithNamespace bool + WithKind bool Wide bool ShowAll bool ShowLabels bool AbsoluteTimestamps bool + Kind string ColumnLabels []string } @@ -325,29 +352,45 @@ type PrintOptions struct { // will only be printed if the object type changes. This makes it useful for printing items // received from watches. type HumanReadablePrinter struct { - handlerMap map[reflect.Type]*handlerEntry - options PrintOptions - lastType reflect.Type + handlerMap map[reflect.Type]*handlerEntry + options PrintOptions + lastType reflect.Type + hiddenObjNum int } // NewHumanReadablePrinter creates a HumanReadablePrinter. -func NewHumanReadablePrinter(noHeaders, withNamespace bool, wide bool, showAll bool, showLabels bool, absoluteTimestamps bool, columnLabels []string) *HumanReadablePrinter { +func NewHumanReadablePrinter(options PrintOptions) *HumanReadablePrinter { printer := &HumanReadablePrinter{ handlerMap: make(map[reflect.Type]*handlerEntry), - options: PrintOptions{ - NoHeaders: noHeaders, - WithNamespace: withNamespace, - Wide: wide, - ShowAll: showAll, - ShowLabels: showLabels, - AbsoluteTimestamps: absoluteTimestamps, - ColumnLabels: columnLabels, - }, + options: options, } printer.addDefaultHandlers() return printer } +// formatResourceName receives a resource kind, name, and boolean specifying +// whether or not to update the current name to "kind/name" +func formatResourceName(kind, name string, withKind bool) string { + if !withKind || kind == "" { + return name + } + + return kind + "/" + name +} + +// GetResourceKind returns the type currently set for a resource +func (h *HumanReadablePrinter) GetResourceKind() string { + return h.options.Kind +} + +// EnsurePrintWithKind sets HumanReadablePrinter options "WithKind" to true +// and "Kind" to the string arg it receives, pre-pending this string +// to the "NAME" column in an output of resources. +func (h *HumanReadablePrinter) EnsurePrintWithKind(kind string) { + h.options.WithKind = true + h.options.Kind = kind +} + // Handler adds a print handler with a given set of columns to HumanReadablePrinter instance. // See validatePrintHandlerFunc for required method signature. func (h *HumanReadablePrinter) Handler(columns []string, printFunc interface{}) error { @@ -356,6 +399,7 @@ func (h *HumanReadablePrinter) Handler(columns []string, printFunc interface{}) glog.Errorf("Unable to add print handler: %v", err) return err } + objType := printFuncValue.Type().In(0) h.handlerMap[objType] = &handlerEntry{ columns: columns, @@ -403,13 +447,22 @@ func (h *HumanReadablePrinter) HandledResources() []string { return keys } +func (h *HumanReadablePrinter) FinishPrint(output io.Writer, res string) error { + if !h.options.NoHeaders && !h.options.ShowAll && h.hiddenObjNum > 0 { + _, err := fmt.Fprintf(output, " info: %d completed object(s) was(were) not shown in %s list. Pass --show-all to see all objects.\n\n", h.hiddenObjNum, res) + return err + } + return nil +} + // NOTE: When adding a new resource type here, please update the list // pkg/kubectl/cmd/get.go to reflect the new resource type. var podColumns = []string{"NAME", "READY", "STATUS", "RESTARTS", "AGE"} var podTemplateColumns = []string{"TEMPLATE", "CONTAINER(S)", "IMAGE(S)", "PODLABELS"} -var replicationControllerColumns = []string{"NAME", "DESIRED", "CURRENT", "AGE"} -var replicaSetColumns = []string{"NAME", "DESIRED", "CURRENT", "AGE"} +var replicationControllerColumns = []string{"NAME", "DESIRED", "CURRENT", "READY", "AGE"} +var replicaSetColumns = []string{"NAME", "DESIRED", "CURRENT", "READY", "AGE"} var jobColumns = []string{"NAME", "DESIRED", "SUCCESSFUL", "AGE"} +var scheduledJobColumns = []string{"NAME", "SCHEDULE", "SUSPEND", "ACTIVE", "LAST-SCHEDULE"} var serviceColumns = []string{"NAME", "CLUSTER-IP", "EXTERNAL-IP", "PORT(S)", "AGE"} var ingressColumns = []string{"NAME", "HOSTS", "ADDRESS", "PORTS", "AGE"} var petSetColumns = []string{"NAME", "DESIRED", "CURRENT", "AGE"} @@ -422,7 +475,7 @@ var resourceQuotaColumns = []string{"NAME", "AGE"} var namespaceColumns = []string{"NAME", "STATUS", "AGE"} var secretColumns = []string{"NAME", "TYPE", "DATA", "AGE"} var serviceAccountColumns = []string{"NAME", "SECRETS", "AGE"} -var persistentVolumeColumns = []string{"NAME", "CAPACITY", "ACCESSMODES", "STATUS", "CLAIM", "REASON", "AGE"} +var persistentVolumeColumns = []string{"NAME", "CAPACITY", "ACCESSMODES", "RECLAIMPOLICY", "STATUS", "CLAIM", "REASON", "AGE"} var persistentVolumeClaimColumns = []string{"NAME", "STATUS", "VOLUME", "CAPACITY", "ACCESSMODES", "AGE"} var componentStatusColumns = []string{"NAME", "STATUS", "MESSAGE", "ERROR"} var thirdPartyResourceColumns = []string{"NAME", "DESCRIPTION", "VERSION(S)"} @@ -430,6 +483,7 @@ var roleColumns = []string{"NAME", "AGE"} var roleBindingColumns = []string{"NAME", "AGE"} var clusterRoleColumns = []string{"NAME", "AGE"} var clusterRoleBindingColumns = []string{"NAME", "AGE"} +var storageClassColumns = []string{"NAME", "TYPE"} // TODO: consider having 'KIND' for third party resource data var thirdPartyResourceDataColumns = []string{"NAME", "LABELS", "DATA"} @@ -438,14 +492,45 @@ var withNamespacePrefixColumns = []string{"NAMESPACE"} // TODO(erictune): print var deploymentColumns = []string{"NAME", "DESIRED", "CURRENT", "UP-TO-DATE", "AVAILABLE", "AGE"} var configMapColumns = []string{"NAME", "DATA", "AGE"} var podSecurityPolicyColumns = []string{"NAME", "PRIV", "CAPS", "VOLUMEPLUGINS", "SELINUX", "RUNASUSER"} -var clusterColumns = []string{"NAME", "STATUS", "VERSION", "AGE"} +var clusterColumns = []string{"NAME", "STATUS", "AGE"} var networkPolicyColumns = []string{"NAME", "POD-SELECTOR", "AGE"} +var certificateSigningRequestColumns = []string{"NAME", "AGE", "REQUESTOR", "CONDITION"} var securityContextConstraintsColumns = []string{"NAME", "PRIV", "CAPS", "SELINUX", "RUNASUSER", "FSGROUP", "SUPGROUP", "PRIORITY", "READONLYROOTFS", "VOLUMES"} +func (h *HumanReadablePrinter) printPod(pod *api.Pod, w io.Writer, options PrintOptions) error { + reason := string(pod.Status.Phase) + // if not printing all pods, skip terminated pods (default) + if !options.ShowAll && (reason == string(api.PodSucceeded) || reason == string(api.PodFailed)) { + h.hiddenObjNum++ + return nil + } + if err := printPodBase(pod, w, options); err != nil { + return err + } + + return nil +} + +func (h *HumanReadablePrinter) printPodList(podList *api.PodList, w io.Writer, options PrintOptions) error { + for _, pod := range podList.Items { + reason := string(pod.Status.Phase) + // if not printing all pods, skip terminated pods (default) + if !options.ShowAll && (reason == string(api.PodSucceeded) || reason == string(api.PodFailed)) { + h.hiddenObjNum++ + continue + } + + if err := printPodBase(&pod, w, options); err != nil { + return err + } + } + return nil +} + // addDefaultHandlers adds print handlers for default Kubernetes types. func (h *HumanReadablePrinter) addDefaultHandlers() { - h.Handler(podColumns, printPod) - h.Handler(podColumns, printPodList) + h.Handler(podColumns, h.printPodList) + h.Handler(podColumns, h.printPod) h.Handler(podTemplateColumns, printPodTemplate) h.Handler(podTemplateColumns, printPodTemplateList) h.Handler(replicationControllerColumns, printReplicationController) @@ -456,6 +541,8 @@ func (h *HumanReadablePrinter) addDefaultHandlers() { h.Handler(daemonSetColumns, printDaemonSetList) h.Handler(jobColumns, printJob) h.Handler(jobColumns, printJobList) + h.Handler(scheduledJobColumns, printScheduledJob) + h.Handler(scheduledJobColumns, printScheduledJobList) h.Handler(serviceColumns, printService) h.Handler(serviceColumns, printServiceList) h.Handler(ingressColumns, printIngress) @@ -508,6 +595,10 @@ func (h *HumanReadablePrinter) addDefaultHandlers() { h.Handler(clusterRoleColumns, printClusterRoleList) h.Handler(clusterRoleBindingColumns, printClusterRoleBinding) h.Handler(clusterRoleBindingColumns, printClusterRoleBindingList) + h.Handler(certificateSigningRequestColumns, printCertificateSigningRequest) + h.Handler(certificateSigningRequestColumns, printCertificateSigningRequestList) + h.Handler(storageClassColumns, printStorageClass) + h.Handler(storageClassColumns, printStorageClassList) h.Handler(securityContextConstraintsColumns, printSecurityContextConstraints) h.Handler(securityContextConstraintsColumns, printSecurityContextConstraintsList) } @@ -586,12 +677,8 @@ func translateTimestamp(timestamp unversioned.Time) string { return shortHumanDuration(time.Now().Sub(timestamp.Time)) } -func printPod(pod *api.Pod, w io.Writer, options PrintOptions) error { - return printPodBase(pod, w, options) -} - func printPodBase(pod *api.Pod, w io.Writer, options PrintOptions) error { - name := pod.Name + name := formatResourceName(options.Kind, pod.Name, options.WithKind) namespace := pod.Namespace restarts := 0 @@ -599,10 +686,6 @@ func printPodBase(pod *api.Pod, w io.Writer, options PrintOptions) error { readyContainers := 0 reason := string(pod.Status.Phase) - // if not printing all pods, skip terminated pods (default) - if !options.ShowAll && (reason == string(api.PodSucceeded) || reason == string(api.PodFailed)) { - return nil - } if pod.Status.Reason != "" { reason = pod.Status.Reason } @@ -610,6 +693,7 @@ func printPodBase(pod *api.Pod, w io.Writer, options PrintOptions) error { initializing := false for i := range pod.Status.InitContainerStatuses { container := pod.Status.InitContainerStatuses[i] + restarts += int(container.RestartCount) switch { case container.State.Terminated != nil && container.State.Terminated.ExitCode == 0: continue @@ -635,6 +719,7 @@ func printPodBase(pod *api.Pod, w io.Writer, options PrintOptions) error { break } if !initializing { + restarts = 0 for i := len(pod.Status.ContainerStatuses) - 1; i >= 0; i-- { container := pod.Status.ContainerStatuses[i] @@ -698,17 +783,9 @@ func printPodBase(pod *api.Pod, w io.Writer, options PrintOptions) error { return nil } -func printPodList(podList *api.PodList, w io.Writer, options PrintOptions) error { - for _, pod := range podList.Items { - if err := printPodBase(&pod, w, options); err != nil { - return err - } - } - return nil -} - func printPodTemplate(pod *api.PodTemplate, w io.Writer, options PrintOptions) error { - name := pod.Name + name := formatResourceName(options.Kind, pod.Name, options.WithKind) + namespace := pod.Namespace containers := pod.Template.Spec.Containers @@ -748,7 +825,8 @@ func printPodTemplateList(podList *api.PodTemplateList, w io.Writer, options Pri // TODO(AdoHe): try to put wide output in a single method func printReplicationController(controller *api.ReplicationController, w io.Writer, options PrintOptions) error { - name := controller.Name + name := formatResourceName(options.Kind, controller.Name, options.WithKind) + namespace := controller.Namespace containers := controller.Spec.Template.Spec.Containers @@ -760,10 +838,12 @@ func printReplicationController(controller *api.ReplicationController, w io.Writ desiredReplicas := controller.Spec.Replicas currentReplicas := controller.Status.Replicas - if _, err := fmt.Fprintf(w, "%s\t%d\t%d\t%s", + readyReplicas := controller.Status.ReadyReplicas + if _, err := fmt.Fprintf(w, "%s\t%d\t%d\t%d\t%s", name, desiredReplicas, currentReplicas, + readyReplicas, translateTimestamp(controller.CreationTimestamp), ); err != nil { return err @@ -797,7 +877,8 @@ func printReplicationControllerList(list *api.ReplicationControllerList, w io.Wr } func printReplicaSet(rs *extensions.ReplicaSet, w io.Writer, options PrintOptions) error { - name := rs.Name + name := formatResourceName(options.Kind, rs.Name, options.WithKind) + namespace := rs.Namespace containers := rs.Spec.Template.Spec.Containers @@ -809,10 +890,12 @@ func printReplicaSet(rs *extensions.ReplicaSet, w io.Writer, options PrintOption desiredReplicas := rs.Spec.Replicas currentReplicas := rs.Status.Replicas - if _, err := fmt.Fprintf(w, "%s\t%d\t%d\t%s", + readyReplicas := rs.Status.ReadyReplicas + if _, err := fmt.Fprintf(w, "%s\t%d\t%d\t%d\t%s", name, desiredReplicas, currentReplicas, + readyReplicas, translateTimestamp(rs.CreationTimestamp), ); err != nil { return err @@ -845,6 +928,8 @@ func printReplicaSetList(list *extensions.ReplicaSetList, w io.Writer, options P } func printCluster(c *federation.Cluster, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, c.Name, options.WithKind) + var statuses []string for _, condition := range c.Status.Conditions { if condition.Status == api.ConditionTrue { @@ -858,7 +943,7 @@ func printCluster(c *federation.Cluster, w io.Writer, options PrintOptions) erro } if _, err := fmt.Fprintf(w, "%s\t%s\t%s\n", - c.Name, + name, strings.Join(statuses, ","), translateTimestamp(c.CreationTimestamp), ); err != nil { @@ -876,7 +961,8 @@ func printClusterList(list *federation.ClusterList, w io.Writer, options PrintOp } func printJob(job *batch.Job, w io.Writer, options PrintOptions) error { - name := job.Name + name := formatResourceName(options.Kind, job.Name, options.WithKind) + namespace := job.Namespace containers := job.Spec.Template.Spec.Containers @@ -937,6 +1023,42 @@ func printJobList(list *batch.JobList, w io.Writer, options PrintOptions) error return nil } +func printScheduledJob(scheduledJob *batch.ScheduledJob, w io.Writer, options PrintOptions) error { + name := scheduledJob.Name + namespace := scheduledJob.Namespace + + if options.WithNamespace { + if _, err := fmt.Fprintf(w, "%s\t", namespace); err != nil { + return err + } + } + + lastScheduleTime := "" + if scheduledJob.Status.LastScheduleTime != nil { + lastScheduleTime = scheduledJob.Status.LastScheduleTime.Time.Format(time.RFC1123Z) + } + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%d\t%s\n", + name, + scheduledJob.Spec.Schedule, + printBoolPtr(scheduledJob.Spec.Suspend), + len(scheduledJob.Status.Active), + lastScheduleTime, + ); err != nil { + return err + } + + return nil +} + +func printScheduledJobList(list *batch.ScheduledJobList, w io.Writer, options PrintOptions) error { + for _, scheduledJob := range list.Items { + if err := printScheduledJob(&scheduledJob, w, options); err != nil { + return err + } + } + return nil +} + // loadBalancerStatusStringer behaves mostly like a string interface and converts the given status to a string. // `wide` indicates whether the returned value is meant for --o=wide output. If not, it's clipped to 16 bytes. func loadBalancerStatusStringer(s api.LoadBalancerStatus, wide bool) string { @@ -978,6 +1100,8 @@ func getServiceExternalIP(svc *api.Service, wide bool) string { return lbIps } return "" + case api.ServiceTypeExternalName: + return svc.Spec.ExternalName } return "" } @@ -992,7 +1116,8 @@ func makePortString(ports []api.ServicePort) string { } func printService(svc *api.Service, w io.Writer, options PrintOptions) error { - name := svc.Name + name := formatResourceName(options.Kind, svc.Name, options.WithKind) + namespace := svc.Namespace internalIP := svc.Spec.ClusterIP @@ -1071,7 +1196,8 @@ func formatPorts(tls []extensions.IngressTLS) string { } func printIngress(ingress *extensions.Ingress, w io.Writer, options PrintOptions) error { - name := ingress.Name + name := formatResourceName(options.Kind, ingress.Name, options.WithKind) + namespace := ingress.Namespace if options.WithNamespace { @@ -1109,7 +1235,8 @@ func printIngressList(ingressList *extensions.IngressList, w io.Writer, options } func printPetSet(ps *apps.PetSet, w io.Writer, options PrintOptions) error { - name := ps.Name + name := formatResourceName(options.Kind, ps.Name, options.WithKind) + namespace := ps.Namespace containers := ps.Spec.Template.Spec.Containers @@ -1156,7 +1283,8 @@ func printPetSetList(petSetList *apps.PetSetList, w io.Writer, options PrintOpti } func printDaemonSet(ds *extensions.DaemonSet, w io.Writer, options PrintOptions) error { - name := ds.Name + name := formatResourceName(options.Kind, ds.Name, options.WithKind) + namespace := ds.Namespace containers := ds.Spec.Template.Spec.Containers @@ -1211,7 +1339,8 @@ func printDaemonSetList(list *extensions.DaemonSetList, w io.Writer, options Pri } func printEndpoints(endpoints *api.Endpoints, w io.Writer, options PrintOptions) error { - name := endpoints.Name + name := formatResourceName(options.Kind, endpoints.Name, options.WithKind) + namespace := endpoints.Namespace if options.WithNamespace { @@ -1239,11 +1368,13 @@ func printEndpointsList(list *api.EndpointsList, w io.Writer, options PrintOptio } func printNamespace(item *api.Namespace, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, item.Name, options.WithKind) + if options.WithNamespace { return fmt.Errorf("namespace is not namespaced") } - if _, err := fmt.Fprintf(w, "%s\t%s\t%s", item.Name, item.Status.Phase, translateTimestamp(item.CreationTimestamp)); err != nil { + if _, err := fmt.Fprintf(w, "%s\t%s\t%s", name, item.Status.Phase, translateTimestamp(item.CreationTimestamp)); err != nil { return err } if _, err := fmt.Fprint(w, AppendLabels(item.Labels, options.ColumnLabels)); err != nil { @@ -1263,7 +1394,8 @@ func printNamespaceList(list *api.NamespaceList, w io.Writer, options PrintOptio } func printSecret(item *api.Secret, w io.Writer, options PrintOptions) error { - name := item.Name + name := formatResourceName(options.Kind, item.Name, options.WithKind) + namespace := item.Namespace if options.WithNamespace { @@ -1292,7 +1424,8 @@ func printSecretList(list *api.SecretList, w io.Writer, options PrintOptions) er } func printServiceAccount(item *api.ServiceAccount, w io.Writer, options PrintOptions) error { - name := item.Name + name := formatResourceName(options.Kind, item.Name, options.WithKind) + namespace := item.Namespace if options.WithNamespace { @@ -1321,6 +1454,8 @@ func printServiceAccountList(list *api.ServiceAccountList, w io.Writer, options } func printNode(node *api.Node, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, node.Name, options.WithKind) + if options.WithNamespace { return fmt.Errorf("node is not namespaced") } @@ -1347,7 +1482,7 @@ func printNode(node *api.Node, w io.Writer, options PrintOptions) error { status = append(status, "SchedulingDisabled") } - if _, err := fmt.Fprintf(w, "%s\t%s\t%s", node.Name, strings.Join(status, ","), translateTimestamp(node.CreationTimestamp)); err != nil { + if _, err := fmt.Fprintf(w, "%s\t%s\t%s", name, strings.Join(status, ","), translateTimestamp(node.CreationTimestamp)); err != nil { return err } // Display caller specify column labels first. @@ -1368,10 +1503,11 @@ func printNodeList(list *api.NodeList, w io.Writer, options PrintOptions) error } func printPersistentVolume(pv *api.PersistentVolume, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, pv.Name, options.WithKind) + if options.WithNamespace { return fmt.Errorf("persistentVolume is not namespaced") } - name := pv.Name claimRefUID := "" if pv.Spec.ClaimRef != nil { @@ -1381,13 +1517,14 @@ func printPersistentVolume(pv *api.PersistentVolume, w io.Writer, options PrintO } modesStr := api.GetAccessModesAsString(pv.Spec.AccessModes) + reclaimPolicyStr := string(pv.Spec.PersistentVolumeReclaimPolicy) aQty := pv.Spec.Capacity[api.ResourceStorage] aSize := aQty.String() - if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%s", + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s", name, - aSize, modesStr, + aSize, modesStr, reclaimPolicyStr, pv.Status.Phase, claimRefUID, pv.Status.Reason, @@ -1412,7 +1549,8 @@ func printPersistentVolumeList(list *api.PersistentVolumeList, w io.Writer, opti } func printPersistentVolumeClaim(pvc *api.PersistentVolumeClaim, w io.Writer, options PrintOptions) error { - name := pvc.Name + name := formatResourceName(options.Kind, pvc.Name, options.WithKind) + namespace := pvc.Namespace if options.WithNamespace { @@ -1451,6 +1589,8 @@ func printPersistentVolumeClaimList(list *api.PersistentVolumeClaimList, w io.Wr } func printEvent(event *api.Event, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, event.InvolvedObject.Name, options.WithKind) + namespace := event.Namespace if options.WithNamespace { if _, err := fmt.Fprintf(w, "%s\t", namespace); err != nil { @@ -1473,7 +1613,7 @@ func printEvent(event *api.Event, w io.Writer, options PrintOptions) error { LastTimestamp, FirstTimestamp, event.Count, - event.InvolvedObject.Name, + name, event.InvolvedObject.Kind, event.InvolvedObject.FieldPath, event.Type, @@ -1517,6 +1657,8 @@ func printLimitRangeList(list *api.LimitRangeList, w io.Writer, options PrintOpt // printObjectMeta prints the object metadata of a given resource. func printObjectMeta(meta api.ObjectMeta, w io.Writer, options PrintOptions, namespaced bool) error { + name := formatResourceName(options.Kind, meta.Name, options.WithKind) + if namespaced && options.WithNamespace { if _, err := fmt.Fprintf(w, "%s\t", meta.Namespace); err != nil { return err @@ -1525,7 +1667,7 @@ func printObjectMeta(meta api.ObjectMeta, w io.Writer, options PrintOptions, nam if _, err := fmt.Fprintf( w, "%s\t%s", - meta.Name, + name, translateTimestamp(meta.CreationTimestamp), ); err != nil { return err @@ -1607,7 +1749,70 @@ func printClusterRoleBindingList(list *rbac.ClusterRoleBindingList, w io.Writer, return nil } +func printCertificateSigningRequest(csr *certificates.CertificateSigningRequest, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, csr.Name, options.WithKind) + meta := csr.ObjectMeta + + status, err := extractCSRStatus(csr) + if err != nil { + return err + } + + if _, err := fmt.Fprintf( + w, "%s\t%s\t%s\t%s", + name, + translateTimestamp(meta.CreationTimestamp), + csr.Spec.Username, + status, + ); err != nil { + return err + } + if _, err := fmt.Fprint(w, AppendLabels(meta.Labels, options.ColumnLabels)); err != nil { + return err + } + _, err = fmt.Fprint(w, AppendAllLabels(options.ShowLabels, meta.Labels)) + return err +} + +func extractCSRStatus(csr *certificates.CertificateSigningRequest) (string, error) { + var approved, denied bool + for _, c := range csr.Status.Conditions { + switch c.Type { + case certificates.CertificateApproved: + approved = true + case certificates.CertificateDenied: + denied = true + default: + return "", fmt.Errorf("unknown csr condition %q", c) + } + } + var status string + // must be in order of presidence + if denied { + status += "Denied" + } else if approved { + status += "Approved" + } else { + status += "Pending" + } + if len(csr.Status.Certificate) > 0 { + status += ",Issued" + } + return status, nil +} + +func printCertificateSigningRequestList(list *certificates.CertificateSigningRequestList, w io.Writer, options PrintOptions) error { + for i := range list.Items { + if err := printCertificateSigningRequest(&list.Items[i], w, options); err != nil { + return err + } + } + return nil +} + func printComponentStatus(item *api.ComponentStatus, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, item.Name, options.WithKind) + if options.WithNamespace { return fmt.Errorf("componentStatus is not namespaced") } @@ -1627,7 +1832,7 @@ func printComponentStatus(item *api.ComponentStatus, w io.Writer, options PrintO } } - if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s", item.Name, status, message, error); err != nil { + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\t%s", name, status, message, error); err != nil { return err } if _, err := fmt.Fprint(w, AppendLabels(item.Labels, options.ColumnLabels)); err != nil { @@ -1648,13 +1853,15 @@ func printComponentStatusList(list *api.ComponentStatusList, w io.Writer, option } func printThirdPartyResource(rsrc *extensions.ThirdPartyResource, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, rsrc.Name, options.WithKind) + versions := make([]string, len(rsrc.Versions)) for ix := range rsrc.Versions { version := &rsrc.Versions[ix] versions[ix] = fmt.Sprintf("%s", version.Name) } versionsString := strings.Join(versions, ",") - if _, err := fmt.Fprintf(w, "%s\t%s\t%s\n", rsrc.Name, rsrc.Description, versionsString); err != nil { + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\n", name, rsrc.Description, versionsString); err != nil { return err } return nil @@ -1678,12 +1885,14 @@ func truncate(str string, maxLen int) string { } func printThirdPartyResourceData(rsrc *extensions.ThirdPartyResourceData, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, rsrc.Name, options.WithKind) + l := labels.FormatLabels(rsrc.Labels) truncateCols := 50 if options.Wide { truncateCols = 100 } - if _, err := fmt.Fprintf(w, "%s\t%s\t%s\n", rsrc.Name, l, truncate(string(rsrc.Data), truncateCols)); err != nil { + if _, err := fmt.Fprintf(w, "%s\t%s\t%s\n", name, l, truncate(string(rsrc.Data), truncateCols)); err != nil { return err } return nil @@ -1700,6 +1909,8 @@ func printThirdPartyResourceDataList(list *extensions.ThirdPartyResourceDataList } func printDeployment(deployment *extensions.Deployment, w io.Writer, options PrintOptions) error { + name := formatResourceName(options.Kind, deployment.Name, options.WithKind) + if options.WithNamespace { if _, err := fmt.Fprintf(w, "%s\t", deployment.Namespace); err != nil { return err @@ -1711,7 +1922,7 @@ func printDeployment(deployment *extensions.Deployment, w io.Writer, options Pri updatedReplicas := deployment.Status.UpdatedReplicas availableReplicas := deployment.Status.AvailableReplicas age := translateTimestamp(deployment.CreationTimestamp) - if _, err := fmt.Fprintf(w, "%s\t%d\t%d\t%d\t%d\t%s", deployment.Name, desiredReplicas, currentReplicas, updatedReplicas, availableReplicas, age); err != nil { + if _, err := fmt.Fprintf(w, "%s\t%d\t%d\t%d\t%d\t%s", name, desiredReplicas, currentReplicas, updatedReplicas, availableReplicas, age); err != nil { return err } if _, err := fmt.Fprint(w, AppendLabels(deployment.Labels, options.ColumnLabels)); err != nil { @@ -1732,7 +1943,8 @@ func printDeploymentList(list *extensions.DeploymentList, w io.Writer, options P func printHorizontalPodAutoscaler(hpa *autoscaling.HorizontalPodAutoscaler, w io.Writer, options PrintOptions) error { namespace := hpa.Namespace - name := hpa.Name + name := formatResourceName(options.Kind, hpa.Name, options.WithKind) + reference := fmt.Sprintf("%s/%s", hpa.Spec.ScaleTargetRef.Kind, hpa.Spec.ScaleTargetRef.Name) @@ -1749,6 +1961,7 @@ func printHorizontalPodAutoscaler(hpa *autoscaling.HorizontalPodAutoscaler, w io minPods = fmt.Sprintf("%d", *hpa.Spec.MinReplicas) } maxPods := hpa.Spec.MaxReplicas + if options.WithNamespace { if _, err := fmt.Fprintf(w, "%s\t", namespace); err != nil { return err @@ -1783,7 +1996,8 @@ func printHorizontalPodAutoscalerList(list *autoscaling.HorizontalPodAutoscalerL } func printConfigMap(configMap *api.ConfigMap, w io.Writer, options PrintOptions) error { - name := configMap.Name + name := formatResourceName(options.Kind, configMap.Name, options.WithKind) + namespace := configMap.Namespace if options.WithNamespace { @@ -1811,7 +2025,9 @@ func printConfigMapList(list *api.ConfigMapList, w io.Writer, options PrintOptio } func printPodSecurityPolicy(item *extensions.PodSecurityPolicy, w io.Writer, options PrintOptions) error { - _, err := fmt.Fprintf(w, "%s\t%t\t%v\t%s\t%s\t%s\t%s\t%t\t%v\n", item.Name, item.Spec.Privileged, + name := formatResourceName(options.Kind, item.Name, options.WithKind) + + _, err := fmt.Fprintf(w, "%s\t%t\t%v\t%s\t%s\t%s\t%s\t%t\t%v\n", name, item.Spec.Privileged, item.Spec.AllowedCapabilities, item.Spec.SELinux.Rule, item.Spec.RunAsUser.Rule, item.Spec.FSGroup.Rule, item.Spec.SupplementalGroups.Rule, item.Spec.ReadOnlyRootFilesystem, item.Spec.Volumes) return err @@ -1828,7 +2044,8 @@ func printPodSecurityPolicyList(list *extensions.PodSecurityPolicyList, w io.Wri } func printNetworkPolicy(networkPolicy *extensions.NetworkPolicy, w io.Writer, options PrintOptions) error { - name := networkPolicy.Name + name := formatResourceName(options.Kind, networkPolicy.Name, options.WithKind) + namespace := networkPolicy.Namespace if options.WithNamespace { @@ -1855,6 +2072,32 @@ func printNetworkPolicyList(list *extensions.NetworkPolicyList, w io.Writer, opt return nil } +func printStorageClass(sc *storage.StorageClass, w io.Writer, options PrintOptions) error { + name := sc.Name + provtype := sc.Provisioner + + if _, err := fmt.Fprintf(w, "%s\t%s\t", name, provtype); err != nil { + return err + } + if _, err := fmt.Fprint(w, AppendLabels(sc.Labels, options.ColumnLabels)); err != nil { + return err + } + if _, err := fmt.Fprint(w, AppendAllLabels(options.ShowLabels, sc.Labels)); err != nil { + return err + } + + return nil +} + +func printStorageClassList(scList *storage.StorageClassList, w io.Writer, options PrintOptions) error { + for _, sc := range scList.Items { + if err := printStorageClass(&sc, w, options); err != nil { + return err + } + } + return nil +} + func AppendLabels(itemLabels map[string]string, columnLabels []string) string { var buffer bytes.Buffer @@ -2016,6 +2259,10 @@ func NewTemplatePrinter(tmpl []byte) (*TemplatePrinter, error) { }, nil } +func (p *TemplatePrinter) FinishPrint(w io.Writer, res string) error { + return nil +} + // PrintObj formats the obj with the Go Template. func (p *TemplatePrinter) PrintObj(obj runtime.Object, w io.Writer) error { data, err := json.Marshal(obj) @@ -2163,6 +2410,10 @@ func NewJSONPathPrinter(tmpl string) (*JSONPathPrinter, error) { return &JSONPathPrinter{tmpl, j}, nil } +func (j *JSONPathPrinter) FinishPrint(w io.Writer, res string) error { + return nil +} + // PrintObj formats the obj with the JSONPath Template. func (j *JSONPathPrinter) PrintObj(obj runtime.Object, w io.Writer) error { var queryObj interface{} = obj diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/rollback.go b/vendor/k8s.io/kubernetes/pkg/kubectl/rollback.go index 2e4f92b3..f5294b04 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/rollback.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/rollback.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,14 +26,14 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/apis/extensions" client "k8s.io/kubernetes/pkg/client/unversioned" + deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/runtime" - deploymentutil "k8s.io/kubernetes/pkg/util/deployment" "k8s.io/kubernetes/pkg/watch" ) // Rollbacker provides an interface for resources that can be rolled back. type Rollbacker interface { - Rollback(namespace, name string, updatedAnnotations map[string]string, toRevision int64, obj runtime.Object) (string, error) + Rollback(obj runtime.Object, updatedAnnotations map[string]string, toRevision int64) (string, error) } func RollbackerFor(kind unversioned.GroupKind, c client.Interface) (Rollbacker, error) { @@ -48,13 +48,16 @@ type DeploymentRollbacker struct { c client.Interface } -func (r *DeploymentRollbacker) Rollback(namespace, name string, updatedAnnotations map[string]string, toRevision int64, obj runtime.Object) (string, error) { - d := obj.(*extensions.Deployment) +func (r *DeploymentRollbacker) Rollback(obj runtime.Object, updatedAnnotations map[string]string, toRevision int64) (string, error) { + d, ok := obj.(*extensions.Deployment) + if !ok { + return "", fmt.Errorf("passed object is not a Deployment: %#v", obj) + } if d.Spec.Paused { - return "", fmt.Errorf("you cannot rollback a paused deployment; resume it first with 'kubectl rollout resume' and try again") + return "", fmt.Errorf("you cannot rollback a paused deployment; resume it first with 'kubectl rollout resume deployment/%s' and try again", d.Name) } deploymentRollback := &extensions.DeploymentRollback{ - Name: name, + Name: d.Name, UpdatedAnnotations: updatedAnnotations, RollbackTo: extensions.RollbackConfig{ Revision: toRevision, @@ -63,16 +66,16 @@ func (r *DeploymentRollbacker) Rollback(namespace, name string, updatedAnnotatio result := "" // Get current events - events, err := r.c.Events(namespace).List(api.ListOptions{}) + events, err := r.c.Events(d.Namespace).List(api.ListOptions{}) if err != nil { return result, err } // Do the rollback - if err := r.c.Extensions().Deployments(namespace).Rollback(deploymentRollback); err != nil { + if err := r.c.Extensions().Deployments(d.Namespace).Rollback(deploymentRollback); err != nil { return result, err } // Watch for the changes of events - watch, err := r.c.Events(namespace).Watch(api.ListOptions{Watch: true, ResourceVersion: events.ResourceVersion}) + watch, err := r.c.Events(d.Namespace).Watch(api.ListOptions{Watch: true, ResourceVersion: events.ResourceVersion}) if err != nil { return result, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/rolling_updater.go b/vendor/k8s.io/kubernetes/pkg/kubectl/rolling_updater.go index 0af1253a..44685308 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/rolling_updater.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/rolling_updater.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,10 +26,11 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" + "k8s.io/kubernetes/pkg/api/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned" + deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" - "k8s.io/kubernetes/pkg/util/deployment" "k8s.io/kubernetes/pkg/util/integer" "k8s.io/kubernetes/pkg/util/intstr" "k8s.io/kubernetes/pkg/util/wait" @@ -58,6 +59,8 @@ type RollingUpdaterConfig struct { Interval time.Duration // Timeout is the time to wait for controller updates before giving up. Timeout time.Duration + // MinReadySeconds is the number of seconds to wait after the pods are ready + MinReadySeconds int32 // CleanupPolicy defines the cleanup action to take after the deployment is // complete. CleanupPolicy RollingUpdaterCleanupPolicy @@ -118,7 +121,9 @@ type RollingUpdater struct { // cleanup performs post deployment cleanup tasks for newRc and oldRc. cleanup func(oldRc, newRc *api.ReplicationController, config *RollingUpdaterConfig) error // getReadyPods returns the amount of old and new ready pods. - getReadyPods func(oldRc, newRc *api.ReplicationController) (int32, int32, error) + getReadyPods func(oldRc, newRc *api.ReplicationController, minReadySeconds int32) (int32, int32, error) + // nowFn returns the current time used to calculate the minReadySeconds + nowFn func() unversioned.Time } // NewRollingUpdater creates a RollingUpdater from a client. @@ -132,6 +137,7 @@ func NewRollingUpdater(namespace string, client client.Interface) *RollingUpdate updater.getOrCreateTargetController = updater.getOrCreateTargetControllerWithClient updater.getReadyPods = updater.readyPods updater.cleanup = updater.cleanupWithClients + updater.nowFn = func() unversioned.Time { return unversioned.Now() } return updater } @@ -200,7 +206,7 @@ func (r *RollingUpdater) Update(config *RollingUpdaterConfig) error { } // maxSurge is the maximum scaling increment and maxUnavailable are the maximum pods // that can be unavailable during a rollout. - maxSurge, maxUnavailable, err := deployment.ResolveFenceposts(&config.MaxSurge, &config.MaxUnavailable, desired) + maxSurge, maxUnavailable, err := deploymentutil.ResolveFenceposts(&config.MaxSurge, &config.MaxUnavailable, desired) if err != nil { return err } @@ -208,7 +214,7 @@ func (r *RollingUpdater) Update(config *RollingUpdaterConfig) error { if desired > 0 && maxUnavailable == 0 && maxSurge == 0 { return fmt.Errorf("one of maxSurge or maxUnavailable must be specified") } - // The minumum pods which must remain available througout the update + // The minimum pods which must remain available throughout the update // calculated for internal convenience. minAvailable := int32(integer.IntMax(0, int(desired-maxUnavailable))) // If the desired new scale is 0, then the max unavailable is necessarily @@ -340,7 +346,7 @@ func (r *RollingUpdater) scaleDown(newRc, oldRc *api.ReplicationController, desi // Get ready pods. We shouldn't block, otherwise in case both old and new // pods are unavailable then the rolling update process blocks. // Timeout-wise we are already covered by the progress check. - _, newAvailable, err := r.getReadyPods(oldRc, newRc) + _, newAvailable, err := r.getReadyPods(oldRc, newRc, config.MinReadySeconds) if err != nil { return nil, err } @@ -397,10 +403,13 @@ func (r *RollingUpdater) scaleAndWaitWithScaler(rc *api.ReplicationController, r // readyPods returns the old and new ready counts for their pods. // If a pod is observed as being ready, it's considered ready even // if it later becomes notReady. -func (r *RollingUpdater) readyPods(oldRc, newRc *api.ReplicationController) (int32, int32, error) { +func (r *RollingUpdater) readyPods(oldRc, newRc *api.ReplicationController, minReadySeconds int32) (int32, int32, error) { controllers := []*api.ReplicationController{oldRc, newRc} oldReady := int32(0) newReady := int32(0) + if r.nowFn == nil { + r.nowFn = func() unversioned.Time { return unversioned.Now() } + } for i := range controllers { controller := controllers[i] @@ -411,13 +420,14 @@ func (r *RollingUpdater) readyPods(oldRc, newRc *api.ReplicationController) (int return 0, 0, err } for _, pod := range pods.Items { - if api.IsPodReady(&pod) { - switch controller.Name { - case oldRc.Name: - oldReady++ - case newRc.Name: - newReady++ - } + if !deploymentutil.IsPodAvailable(&pod, minReadySeconds, r.nowFn().Time) { + continue + } + switch controller.Name { + case oldRc.Name: + oldReady++ + case newRc.Name: + newReady++ } } } @@ -503,14 +513,14 @@ func (r *RollingUpdater) cleanupWithClients(oldRc, newRc *api.ReplicationControl case DeleteRollingUpdateCleanupPolicy: // delete old rc fmt.Fprintf(config.Out, "Update succeeded. Deleting %s\n", oldRc.Name) - return r.c.ReplicationControllers(r.ns).Delete(oldRc.Name) + return r.c.ReplicationControllers(r.ns).Delete(oldRc.Name, nil) case RenameRollingUpdateCleanupPolicy: // delete old rc fmt.Fprintf(config.Out, "Update succeeded. Deleting old controller: %s\n", oldRc.Name) - if err := r.c.ReplicationControllers(r.ns).Delete(oldRc.Name); err != nil { + if err := r.c.ReplicationControllers(r.ns).Delete(oldRc.Name, nil); err != nil { return err } - fmt.Fprintf(config.Out, "Renaming %s to %s\n", newRc.Name, oldRc.Name) + fmt.Fprintf(config.Out, "Renaming %s to %s\n", oldRc.Name, newRc.Name) return Rename(r.c, newRc, oldRc.Name) case PreserveRollingUpdateCleanupPolicy: return nil @@ -523,13 +533,28 @@ func Rename(c client.ReplicationControllersNamespacer, rc *api.ReplicationContro oldName := rc.Name rc.Name = newName rc.ResourceVersion = "" - - _, err := c.ReplicationControllers(rc.Namespace).Create(rc) + // First delete the oldName RC and orphan its pods. + trueVar := true + err := c.ReplicationControllers(rc.Namespace).Delete(oldName, &api.DeleteOptions{OrphanDependents: &trueVar}) + if err != nil && !errors.IsNotFound(err) { + return err + } + err = wait.Poll(5*time.Second, 60*time.Second, func() (bool, error) { + _, err := c.ReplicationControllers(rc.Namespace).Get(oldName) + if err == nil { + return false, nil + } else if errors.IsNotFound(err) { + return true, nil + } else { + return false, err + } + }) if err != nil { return err } - err = c.ReplicationControllers(rc.Namespace).Delete(oldName) - if err != nil && !errors.IsNotFound(err) { + // Then create the same RC with the new name. + _, err = c.ReplicationControllers(rc.Namespace).Create(rc) + if err != nil { return err } return nil diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/rollout_status.go b/vendor/k8s.io/kubernetes/pkg/kubectl/rollout_status.go index dc39865d..632a98f7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/rollout_status.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/rollout_status.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/run.go b/vendor/k8s.io/kubernetes/pkg/kubectl/run.go index 4e076c07..c6c38509 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/run.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/run.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/batch" batchv1 "k8s.io/kubernetes/pkg/apis/batch/v1" + batchv2alpha1 "k8s.io/kubernetes/pkg/apis/batch/v2alpha1" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/validation" @@ -41,6 +42,7 @@ func (DeploymentV1Beta1) ParamNames() []GeneratorParam { {"name", true}, {"replicas", true}, {"image", true}, + {"image-pull-policy", false}, {"port", false}, {"hostport", false}, {"stdin", false}, @@ -89,7 +91,8 @@ func (DeploymentV1Beta1) Generate(genericParams map[string]interface{}) (runtime return nil, err } - if err = updatePodContainers(params, args, envs, podSpec); err != nil { + imagePullPolicy := api.PullPolicy(params["image-pull-policy"]) + if err = updatePodContainers(params, args, envs, imagePullPolicy, podSpec); err != nil { return nil, err } @@ -216,6 +219,7 @@ func (JobV1Beta1) ParamNames() []GeneratorParam { {"default-name", false}, {"name", true}, {"image", true}, + {"image-pull-policy", false}, {"port", false}, {"hostport", false}, {"stdin", false}, @@ -261,7 +265,8 @@ func (JobV1Beta1) Generate(genericParams map[string]interface{}) (runtime.Object return nil, err } - if err = updatePodContainers(params, args, envs, podSpec); err != nil { + imagePullPolicy := api.PullPolicy(params["image-pull-policy"]) + if err = updatePodContainers(params, args, envs, imagePullPolicy, podSpec); err != nil { return nil, err } @@ -311,6 +316,7 @@ func (JobV1) ParamNames() []GeneratorParam { {"default-name", false}, {"name", true}, {"image", true}, + {"image-pull-policy", false}, {"port", false}, {"hostport", false}, {"stdin", false}, @@ -356,7 +362,8 @@ func (JobV1) Generate(genericParams map[string]interface{}) (runtime.Object, err return nil, err } - if err = updateV1PodContainers(params, args, envs, podSpec); err != nil { + imagePullPolicy := v1.PullPolicy(params["image-pull-policy"]) + if err = updateV1PodContainers(params, args, envs, imagePullPolicy, podSpec); err != nil { return nil, err } @@ -394,6 +401,106 @@ func (JobV1) Generate(genericParams map[string]interface{}) (runtime.Object, err return &job, nil } +type ScheduledJobV2Alpha1 struct{} + +func (ScheduledJobV2Alpha1) ParamNames() []GeneratorParam { + return []GeneratorParam{ + {"labels", false}, + {"default-name", false}, + {"name", true}, + {"image", true}, + {"image-pull-policy", false}, + {"port", false}, + {"hostport", false}, + {"stdin", false}, + {"leave-stdin-open", false}, + {"tty", false}, + {"command", false}, + {"args", false}, + {"env", false}, + {"requests", false}, + {"limits", false}, + {"restart", false}, + {"schedule", true}, + } +} + +func (ScheduledJobV2Alpha1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { + args, err := getArgs(genericParams) + if err != nil { + return nil, err + } + + envs, err := getV1Envs(genericParams) + if err != nil { + return nil, err + } + + params, err := getParams(genericParams) + if err != nil { + return nil, err + } + + name, err := getName(params) + if err != nil { + return nil, err + } + + labels, err := getLabels(params, true, name) + if err != nil { + return nil, err + } + + podSpec, err := makeV1PodSpec(params, name) + if err != nil { + return nil, err + } + + imagePullPolicy := v1.PullPolicy(params["image-pull-policy"]) + if err = updateV1PodContainers(params, args, envs, imagePullPolicy, podSpec); err != nil { + return nil, err + } + + leaveStdinOpen, err := GetBool(params, "leave-stdin-open", false) + if err != nil { + return nil, err + } + podSpec.Containers[0].StdinOnce = !leaveStdinOpen && podSpec.Containers[0].Stdin + + if err := updateV1PodPorts(params, podSpec); err != nil { + return nil, err + } + + restartPolicy := v1.RestartPolicy(params["restart"]) + if len(restartPolicy) == 0 { + restartPolicy = v1.RestartPolicyNever + } + podSpec.RestartPolicy = restartPolicy + + scheduledJob := batchv2alpha1.ScheduledJob{ + ObjectMeta: v1.ObjectMeta{ + Name: name, + Labels: labels, + }, + Spec: batchv2alpha1.ScheduledJobSpec{ + Schedule: params["schedule"], + ConcurrencyPolicy: batchv2alpha1.AllowConcurrent, + JobTemplate: batchv2alpha1.JobTemplateSpec{ + Spec: batchv2alpha1.JobSpec{ + Template: v1.PodTemplateSpec{ + ObjectMeta: v1.ObjectMeta{ + Labels: labels, + }, + Spec: *podSpec, + }, + }, + }, + }, + } + + return &scheduledJob, nil +} + type BasicReplicationController struct{} func (BasicReplicationController) ParamNames() []GeneratorParam { @@ -403,6 +510,7 @@ func (BasicReplicationController) ParamNames() []GeneratorParam { {"name", true}, {"replicas", true}, {"image", true}, + {"image-pull-policy", false}, {"port", false}, {"hostport", false}, {"stdin", false}, @@ -591,7 +699,8 @@ func (BasicReplicationController) Generate(genericParams map[string]interface{}) return nil, err } - if err = updatePodContainers(params, args, envs, podSpec); err != nil { + imagePullPolicy := api.PullPolicy(params["image-pull-policy"]) + if err = updatePodContainers(params, args, envs, imagePullPolicy, podSpec); err != nil { return nil, err } @@ -618,7 +727,7 @@ func (BasicReplicationController) Generate(genericParams map[string]interface{}) return &controller, nil } -func updatePodContainers(params map[string]string, args []string, envs []api.EnvVar, podSpec *api.PodSpec) error { +func updatePodContainers(params map[string]string, args []string, envs []api.EnvVar, imagePullPolicy api.PullPolicy, podSpec *api.PodSpec) error { if len(args) > 0 { command, err := GetBool(params, "command", false) if err != nil { @@ -634,10 +743,15 @@ func updatePodContainers(params map[string]string, args []string, envs []api.Env if len(envs) > 0 { podSpec.Containers[0].Env = envs } + + if len(imagePullPolicy) > 0 { + // imagePullPolicy should be valid here since we have verified it before. + podSpec.Containers[0].ImagePullPolicy = imagePullPolicy + } return nil } -func updateV1PodContainers(params map[string]string, args []string, envs []v1.EnvVar, podSpec *v1.PodSpec) error { +func updateV1PodContainers(params map[string]string, args []string, envs []v1.EnvVar, imagePullPolicy v1.PullPolicy, podSpec *v1.PodSpec) error { if len(args) > 0 { command, err := GetBool(params, "command", false) if err != nil { @@ -653,6 +767,11 @@ func updateV1PodContainers(params map[string]string, args []string, envs []v1.En if len(envs) > 0 { podSpec.Containers[0].Env = envs } + + if len(imagePullPolicy) > 0 { + // imagePullPolicy should be valid here since we have verified it before. + podSpec.Containers[0].ImagePullPolicy = imagePullPolicy + } return nil } @@ -732,6 +851,7 @@ func (BasicPod) ParamNames() []GeneratorParam { {"default-name", false}, {"name", true}, {"image", true}, + {"image-pull-policy", false}, {"port", false}, {"hostport", false}, {"stdin", false}, @@ -795,6 +915,8 @@ func (BasicPod) Generate(genericParams map[string]interface{}) (runtime.Object, if len(restartPolicy) == 0 { restartPolicy = api.RestartPolicyAlways } + // TODO: Figure out why we set ImagePullPolicy here, whether we can make it + // consistent with the other places imagePullPolicy is set using flag. pod := api.Pod{ ObjectMeta: api.ObjectMeta{ Name: name, @@ -816,7 +938,8 @@ func (BasicPod) Generate(genericParams map[string]interface{}) (runtime.Object, RestartPolicy: restartPolicy, }, } - if err = updatePodContainers(params, args, envs, &pod.Spec); err != nil { + imagePullPolicy := api.PullPolicy(params["image-pull-policy"]) + if err = updatePodContainers(params, args, envs, imagePullPolicy, &pod.Spec); err != nil { return nil, err } @@ -835,7 +958,10 @@ func parseEnvs(envArray []string) ([]api.EnvVar, error) { } name := env[:pos] value := env[pos+1:] - if len(name) == 0 || !validation.IsCIdentifier(name) || len(value) == 0 { + if len(name) == 0 { + return nil, fmt.Errorf("invalid env: %v", env) + } + if len(validation.IsCIdentifier(name)) != 0 { return nil, fmt.Errorf("invalid env: %v", env) } envVar := api.EnvVar{Name: name, Value: value} @@ -853,7 +979,7 @@ func parseV1Envs(envArray []string) ([]v1.EnvVar, error) { } name := env[:pos] value := env[pos+1:] - if len(name) == 0 || !validation.IsCIdentifier(name) || len(value) == 0 { + if len(name) == 0 || len(validation.IsCIdentifier(name)) != 0 { return nil, fmt.Errorf("invalid env: %v", env) } envVar := v1.EnvVar{Name: name, Value: value} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/scale.go b/vendor/k8s.io/kubernetes/pkg/kubectl/scale.go index f8aba07e..044be570 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/scale.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/scale.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,10 +24,13 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/extensions" client "k8s.io/kubernetes/pkg/client/unversioned" + "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/util/wait" + "k8s.io/kubernetes/pkg/watch" ) // Scaler provides an interface for resources that can be scaled. @@ -36,9 +39,9 @@ type Scaler interface { // retries in the event of resource version mismatch (if retry is not nil), // and optionally waits until the status of the resource matches newSize (if wait is not nil) Scale(namespace, name string, newSize uint, preconditions *ScalePrecondition, retry, wait *RetryParams) error - // ScaleSimple does a simple one-shot attempt at scaling - not useful on it's own, but + // ScaleSimple does a simple one-shot attempt at scaling - not useful on its own, but // a necessary building block for Scale - ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) error + ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) (updatedResourceVersion string, err error) } func ScalerFor(kind unversioned.GroupKind, c client.Interface) (Scaler, error) { @@ -49,6 +52,8 @@ func ScalerFor(kind unversioned.GroupKind, c client.Interface) (Scaler, error) { return &ReplicaSetScaler{c.Extensions()}, nil case extensions.Kind("Job"), batch.Kind("Job"): return &JobScaler{c.Batch()}, nil // Either kind of job can be scaled with Batch interface. + case apps.Kind("PetSet"): + return &PetSetScaler{c.Apps()}, nil case extensions.Kind("Deployment"): return &DeploymentScaler{c.Extensions()}, nil } @@ -108,9 +113,12 @@ func NewRetryParams(interval, timeout time.Duration) *RetryParams { } // ScaleCondition is a closure around Scale that facilitates retries via util.wait -func ScaleCondition(r Scaler, precondition *ScalePrecondition, namespace, name string, count uint) wait.ConditionFunc { +func ScaleCondition(r Scaler, precondition *ScalePrecondition, namespace, name string, count uint, updatedResourceVersion *string) wait.ConditionFunc { return func() (bool, error) { - err := r.ScaleSimple(namespace, name, precondition, count) + rv, err := r.ScaleSimple(namespace, name, precondition, count) + if updatedResourceVersion != nil { + *updatedResourceVersion = rv + } switch e, _ := err.(ScaleError); err.(type) { case nil: return true, nil @@ -124,6 +132,17 @@ func ScaleCondition(r Scaler, precondition *ScalePrecondition, namespace, name s } } +// ValidatePetSet ensures that the preconditions match. Returns nil if they are valid, an error otherwise. +func (precondition *ScalePrecondition) ValidatePetSet(ps *apps.PetSet) error { + if precondition.Size != -1 && int(ps.Spec.Replicas) != precondition.Size { + return PreconditionError{"replicas", strconv.Itoa(precondition.Size), strconv.Itoa(int(ps.Spec.Replicas))} + } + if len(precondition.ResourceVersion) != 0 && ps.ResourceVersion != precondition.ResourceVersion { + return PreconditionError{"resource version", precondition.ResourceVersion, ps.ResourceVersion} + } + return nil +} + // ValidateReplicationController ensures that the preconditions match. Returns nil if they are valid, an error otherwise func (precondition *ScalePrecondition) ValidateReplicationController(controller *api.ReplicationController) error { if precondition.Size != -1 && int(controller.Spec.Replicas) != precondition.Size { @@ -139,24 +158,27 @@ type ReplicationControllerScaler struct { c client.Interface } -func (scaler *ReplicationControllerScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) error { +// ScaleSimple does a simple one-shot attempt at scaling. It returns the +// resourceVersion of the replication controller if the update is successful. +func (scaler *ReplicationControllerScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) (string, error) { controller, err := scaler.c.ReplicationControllers(namespace).Get(name) if err != nil { - return ScaleError{ScaleGetFailure, "Unknown", err} + return "", ScaleError{ScaleGetFailure, "Unknown", err} } if preconditions != nil { if err := preconditions.ValidateReplicationController(controller); err != nil { - return err + return "", err } } controller.Spec.Replicas = int32(newSize) - if _, err := scaler.c.ReplicationControllers(namespace).Update(controller); err != nil { + updatedRC, err := scaler.c.ReplicationControllers(namespace).Update(controller) + if err != nil { if errors.IsConflict(err) { - return ScaleError{ScaleUpdateConflictFailure, controller.ResourceVersion, err} + return "", ScaleError{ScaleUpdateConflictFailure, controller.ResourceVersion, err} } - return ScaleError{ScaleUpdateFailure, controller.ResourceVersion, err} + return "", ScaleError{ScaleUpdateFailure, controller.ResourceVersion, err} } - return nil + return updatedRC.ObjectMeta.ResourceVersion, nil } // Scale updates a ReplicationController to a new size, with optional precondition check (if preconditions is not nil), @@ -170,20 +192,51 @@ func (scaler *ReplicationControllerScaler) Scale(namespace, name string, newSize // Make it try only once, immediately retry = &RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} } - cond := ScaleCondition(scaler, preconditions, namespace, name, newSize) - if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { + var updatedResourceVersion string + cond := ScaleCondition(scaler, preconditions, namespace, name, newSize, &updatedResourceVersion) + if err := wait.PollImmediate(retry.Interval, retry.Timeout, cond); err != nil { return err } if waitForReplicas != nil { - rc, err := scaler.c.ReplicationControllers(namespace).Get(name) + checkRC := func(rc *api.ReplicationController) bool { + if uint(rc.Spec.Replicas) != newSize { + // the size is changed by other party. Don't need to wait for the new change to complete. + return true + } + return rc.Status.ObservedGeneration >= rc.Generation && rc.Status.Replicas == rc.Spec.Replicas + } + // If number of replicas doesn't change, then the update may not event + // be sent to underlying databse (we don't send no-op changes). + // In such case, will have value of the most + // recent update (which may be far in the past) so we may get "too old + // RV" error from watch or potentially no ReplicationController events + // will be deliver, since it may already be in the expected state. + // To protect from these two, we first issue Get() to ensure that we + // are not already in the expected state. + currentRC, err := scaler.c.ReplicationControllers(namespace).Get(name) if err != nil { return err } - err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, client.ControllerHasDesiredReplicas(scaler.c, rc)) - if err == wait.ErrWaitTimeout { - return fmt.Errorf("timed out waiting for %q to be synced", name) + if !checkRC(currentRC) { + watchOptions := api.ListOptions{ + FieldSelector: fields.OneTermEqualSelector("metadata.name", name), + ResourceVersion: updatedResourceVersion, + } + watcher, err := scaler.c.ReplicationControllers(namespace).Watch(watchOptions) + if err != nil { + return err + } + _, err = watch.Until(waitForReplicas.Timeout, watcher, func(event watch.Event) (bool, error) { + if event.Type != watch.Added && event.Type != watch.Modified { + return false, nil + } + return checkRC(event.Object.(*api.ReplicationController)), nil + }) + if err == wait.ErrWaitTimeout { + return fmt.Errorf("timed out waiting for %q to be synced", name) + } + return err } - return err } return nil } @@ -203,24 +256,27 @@ type ReplicaSetScaler struct { c client.ExtensionsInterface } -func (scaler *ReplicaSetScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) error { +// ScaleSimple does a simple one-shot attempt at scaling. It returns the +// resourceVersion of the replicaset if the update is successful. +func (scaler *ReplicaSetScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) (string, error) { rs, err := scaler.c.ReplicaSets(namespace).Get(name) if err != nil { - return ScaleError{ScaleGetFailure, "Unknown", err} + return "", ScaleError{ScaleGetFailure, "Unknown", err} } if preconditions != nil { if err := preconditions.ValidateReplicaSet(rs); err != nil { - return err + return "", err } } rs.Spec.Replicas = int32(newSize) - if _, err := scaler.c.ReplicaSets(namespace).Update(rs); err != nil { + updatedRS, err := scaler.c.ReplicaSets(namespace).Update(rs) + if err != nil { if errors.IsConflict(err) { - return ScaleError{ScaleUpdateConflictFailure, rs.ResourceVersion, err} + return "", ScaleError{ScaleUpdateConflictFailure, rs.ResourceVersion, err} } - return ScaleError{ScaleUpdateFailure, rs.ResourceVersion, err} + return "", ScaleError{ScaleUpdateFailure, rs.ResourceVersion, err} } - return nil + return updatedRS.ObjectMeta.ResourceVersion, nil } // Scale updates a ReplicaSet to a new size, with optional precondition check (if preconditions is @@ -234,7 +290,7 @@ func (scaler *ReplicaSetScaler) Scale(namespace, name string, newSize uint, prec // Make it try only once, immediately retry = &RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} } - cond := ScaleCondition(scaler, preconditions, namespace, name, newSize) + cond := ScaleCondition(scaler, preconditions, namespace, name, newSize, nil) if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { return err } @@ -244,6 +300,7 @@ func (scaler *ReplicaSetScaler) Scale(namespace, name string, newSize uint, prec return err } err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, client.ReplicaSetHasDesiredReplicas(scaler.c, rs)) + if err == wait.ErrWaitTimeout { return fmt.Errorf("timed out waiting for %q to be synced", name) } @@ -266,30 +323,85 @@ func (precondition *ScalePrecondition) ValidateJob(job *batch.Job) error { return nil } +type PetSetScaler struct { + c client.AppsInterface +} + +// ScaleSimple does a simple one-shot attempt at scaling. It returns the +// resourceVersion of the petset if the update is successful. +func (scaler *PetSetScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) (string, error) { + ps, err := scaler.c.PetSets(namespace).Get(name) + if err != nil { + return "", ScaleError{ScaleGetFailure, "Unknown", err} + } + if preconditions != nil { + if err := preconditions.ValidatePetSet(ps); err != nil { + return "", err + } + } + ps.Spec.Replicas = int(newSize) + updatedPetSet, err := scaler.c.PetSets(namespace).Update(ps) + if err != nil { + if errors.IsConflict(err) { + return "", ScaleError{ScaleUpdateConflictFailure, ps.ResourceVersion, err} + } + return "", ScaleError{ScaleUpdateFailure, ps.ResourceVersion, err} + } + return updatedPetSet.ResourceVersion, nil +} + +func (scaler *PetSetScaler) Scale(namespace, name string, newSize uint, preconditions *ScalePrecondition, retry, waitForReplicas *RetryParams) error { + if preconditions == nil { + preconditions = &ScalePrecondition{-1, ""} + } + if retry == nil { + // Make it try only once, immediately + retry = &RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} + } + cond := ScaleCondition(scaler, preconditions, namespace, name, newSize, nil) + if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { + return err + } + if waitForReplicas != nil { + job, err := scaler.c.PetSets(namespace).Get(name) + if err != nil { + return err + } + err = wait.Poll(waitForReplicas.Interval, waitForReplicas.Timeout, client.PetSetHasDesiredPets(scaler.c, job)) + if err == wait.ErrWaitTimeout { + return fmt.Errorf("timed out waiting for %q to be synced", name) + } + return err + } + return nil +} + type JobScaler struct { c client.BatchInterface } -// ScaleSimple is responsible for updating job's parallelism. -func (scaler *JobScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) error { +// ScaleSimple is responsible for updating job's parallelism. It returns the +// resourceVersion of the job if the update is successful. +func (scaler *JobScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) (string, error) { job, err := scaler.c.Jobs(namespace).Get(name) if err != nil { - return ScaleError{ScaleGetFailure, "Unknown", err} + return "", ScaleError{ScaleGetFailure, "Unknown", err} } if preconditions != nil { if err := preconditions.ValidateJob(job); err != nil { - return err + return "", err } } parallelism := int32(newSize) job.Spec.Parallelism = ¶llelism - if _, err := scaler.c.Jobs(namespace).Update(job); err != nil { + udpatedJob, err := scaler.c.Jobs(namespace).Update(job) + if err != nil { if errors.IsConflict(err) { - return ScaleError{ScaleUpdateConflictFailure, job.ResourceVersion, err} + return "", ScaleError{ScaleUpdateConflictFailure, job.ResourceVersion, err} } - return ScaleError{ScaleUpdateFailure, job.ResourceVersion, err} + return "", ScaleError{ScaleUpdateFailure, job.ResourceVersion, err} } - return nil + return udpatedJob.ObjectMeta.ResourceVersion, nil } // Scale updates a Job to a new size, with optional precondition check (if preconditions is not nil), @@ -303,7 +415,7 @@ func (scaler *JobScaler) Scale(namespace, name string, newSize uint, preconditio // Make it try only once, immediately retry = &RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} } - cond := ScaleCondition(scaler, preconditions, namespace, name, newSize) + cond := ScaleCondition(scaler, preconditions, namespace, name, newSize, nil) if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { return err } @@ -336,28 +448,31 @@ type DeploymentScaler struct { c client.ExtensionsInterface } -// ScaleSimple is responsible for updating a deployment's desired replicas count. -func (scaler *DeploymentScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) error { +// ScaleSimple is responsible for updating a deployment's desired replicas +// count. It returns the resourceVersion of the deployment if the update is +// successful. +func (scaler *DeploymentScaler) ScaleSimple(namespace, name string, preconditions *ScalePrecondition, newSize uint) (string, error) { deployment, err := scaler.c.Deployments(namespace).Get(name) if err != nil { - return ScaleError{ScaleGetFailure, "Unknown", err} + return "", ScaleError{ScaleGetFailure, "Unknown", err} } if preconditions != nil { if err := preconditions.ValidateDeployment(deployment); err != nil { - return err + return "", err } } // TODO(madhusudancs): Fix this when Scale group issues are resolved (see issue #18528). // For now I'm falling back to regular Deployment update operation. deployment.Spec.Replicas = int32(newSize) - if _, err := scaler.c.Deployments(namespace).Update(deployment); err != nil { + updatedDeployment, err := scaler.c.Deployments(namespace).Update(deployment) + if err != nil { if errors.IsConflict(err) { - return ScaleError{ScaleUpdateConflictFailure, deployment.ResourceVersion, err} + return "", ScaleError{ScaleUpdateConflictFailure, deployment.ResourceVersion, err} } - return ScaleError{ScaleUpdateFailure, deployment.ResourceVersion, err} + return "", ScaleError{ScaleUpdateFailure, deployment.ResourceVersion, err} } - return nil + return updatedDeployment.ObjectMeta.ResourceVersion, nil } // Scale updates a deployment to a new size, with optional precondition check (if preconditions is not nil), @@ -370,7 +485,7 @@ func (scaler *DeploymentScaler) Scale(namespace, name string, newSize uint, prec // Make it try only once, immediately retry = &RetryParams{Interval: time.Millisecond, Timeout: time.Millisecond} } - cond := ScaleCondition(scaler, preconditions, namespace, name, newSize) + cond := ScaleCondition(scaler, preconditions, namespace, name, newSize, nil) if err := wait.Poll(retry.Interval, retry.Timeout, cond); err != nil { return err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/secret.go b/vendor/k8s.io/kubernetes/pkg/kubectl/secret.go index e5b7cc33..cc327119 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/secret.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/secret.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,8 +24,8 @@ import ( "strings" "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/validation" ) // SecretGeneratorV1 supports stable generation of an opaque secret @@ -196,9 +196,10 @@ func addKeyFromFileToSecret(secret *api.Secret, keyName, filePath string) error } func addKeyFromLiteralToSecret(secret *api.Secret, keyName string, data []byte) error { - if !validation.IsSecretKey(keyName) { - return fmt.Errorf("%v is not a valid key name for a secret", keyName) + if errs := validation.IsConfigMapKey(keyName); len(errs) != 0 { + return fmt.Errorf("%q is not a valid key name for a Secret: %s", keyName, strings.Join(errs, ";")) } + if _, entryExists := secret.Data[keyName]; entryExists { return fmt.Errorf("cannot add key %s, another key by that name already exists: %v.", keyName, secret.Data) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/secret_for_docker_registry.go b/vendor/k8s.io/kubernetes/pkg/kubectl/secret_for_docker_registry.go index 773bde38..65615a7f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/secret_for_docker_registry.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/secret_for_docker_registry.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/secret_for_tls.go b/vendor/k8s.io/kubernetes/pkg/kubectl/secret_for_tls.go index 05061d25..a29af559 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/secret_for_tls.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/secret_for_tls.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/service.go b/vendor/k8s.io/kubernetes/pkg/kubectl/service.go index e8ef5dba..604dbf32 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/service.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/service.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -72,6 +72,7 @@ func paramNames() []GeneratorParam { {"target-port", false}, {"port-name", false}, {"session-affinity", false}, + {"cluster-ip", false}, } } @@ -225,5 +226,12 @@ func generate(genericParams map[string]interface{}) (runtime.Object, error) { return nil, fmt.Errorf("unknown session affinity: %s", params["session-affinity"]) } } + if len(params["cluster-ip"]) != 0 { + if params["cluster-ip"] == "None" { + service.Spec.ClusterIP = api.ClusterIPNone + } else { + service.Spec.ClusterIP = params["cluster-ip"] + } + } return &service, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/service_basic.go b/vendor/k8s.io/kubernetes/pkg/kubectl/service_basic.go new file mode 100644 index 00000000..ee080aae --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/service_basic.go @@ -0,0 +1,207 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package kubectl + +import ( + "fmt" + "strconv" + "strings" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/util/intstr" +) + +type ServiceCommonGeneratorV1 struct { + Name string + TCP []string + Type api.ServiceType + ClusterIP string +} + +type ServiceClusterIPGeneratorV1 struct { + ServiceCommonGeneratorV1 +} + +type ServiceNodePortGeneratorV1 struct { + ServiceCommonGeneratorV1 +} + +type ServiceLoadBalancerGeneratorV1 struct { + ServiceCommonGeneratorV1 +} + +func (ServiceClusterIPGeneratorV1) ParamNames() []GeneratorParam { + return []GeneratorParam{ + {"name", true}, + {"tcp", true}, + {"clusterip", false}, + } +} +func (ServiceNodePortGeneratorV1) ParamNames() []GeneratorParam { + return []GeneratorParam{ + {"name", true}, + {"tcp", true}, + } +} +func (ServiceLoadBalancerGeneratorV1) ParamNames() []GeneratorParam { + return []GeneratorParam{ + {"name", true}, + {"tcp", true}, + } +} + +func parsePorts(portString string) (int32, intstr.IntOrString, error) { + portStringSlice := strings.Split(portString, ":") + + port, err := strconv.Atoi(portStringSlice[0]) + if err != nil { + return 0, intstr.FromInt(0), err + } + if len(portStringSlice) == 1 { + return int32(port), intstr.FromInt(int(port)), nil + } + + var targetPort intstr.IntOrString + if portNum, err := strconv.Atoi(portStringSlice[1]); err != nil { + targetPort = intstr.FromString(portStringSlice[1]) + } else { + targetPort = intstr.FromInt(portNum) + } + return int32(port), targetPort, nil +} + +func (s ServiceCommonGeneratorV1) GenerateCommon(params map[string]interface{}) error { + name, isString := params["name"].(string) + if !isString { + return fmt.Errorf("expected string, saw %v for 'name'", name) + } + tcpStrings, isArray := params["tcp"].([]string) + if !isArray { + return fmt.Errorf("expected []string, found :%v", tcpStrings) + } + clusterip, isString := params["clusterip"].(string) + if !isString { + return fmt.Errorf("expected string, saw %v for 'clusterip'", clusterip) + } + s.Name = name + s.TCP = tcpStrings + s.ClusterIP = clusterip + return nil +} + +func (s ServiceLoadBalancerGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { + err := ValidateParams(s.ParamNames(), params) + if err != nil { + return nil, err + } + delegate := &ServiceCommonGeneratorV1{Type: api.ServiceTypeLoadBalancer, ClusterIP: ""} + err = delegate.GenerateCommon(params) + if err != nil { + return nil, err + } + return delegate.StructuredGenerate() +} + +func (s ServiceNodePortGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { + err := ValidateParams(s.ParamNames(), params) + if err != nil { + return nil, err + } + delegate := &ServiceCommonGeneratorV1{Type: api.ServiceTypeNodePort, ClusterIP: ""} + err = delegate.GenerateCommon(params) + if err != nil { + return nil, err + } + return delegate.StructuredGenerate() +} + +func (s ServiceClusterIPGeneratorV1) Generate(params map[string]interface{}) (runtime.Object, error) { + err := ValidateParams(s.ParamNames(), params) + if err != nil { + return nil, err + } + delegate := &ServiceCommonGeneratorV1{Type: api.ServiceTypeClusterIP, ClusterIP: ""} + err = delegate.GenerateCommon(params) + if err != nil { + return nil, err + } + return delegate.StructuredGenerate() +} + +// validate validates required fields are set to support structured generation +func (s ServiceCommonGeneratorV1) validate() error { + if len(s.Name) == 0 { + return fmt.Errorf("name must be specified") + } + if len(s.Type) == 0 { + return fmt.Errorf("type must be specified") + } + if s.ClusterIP == api.ClusterIPNone && s.Type != api.ServiceTypeClusterIP { + return fmt.Errorf("ClusterIP=None can only be used with ClusterIP service type") + } + if s.ClusterIP == api.ClusterIPNone && len(s.TCP) > 0 { + return fmt.Errorf("can not map ports with clusterip=None") + } + if s.ClusterIP != api.ClusterIPNone && len(s.TCP) == 0 { + return fmt.Errorf("at least one tcp port specifier must be provided") + } + return nil +} + +func (s ServiceCommonGeneratorV1) StructuredGenerate() (runtime.Object, error) { + err := s.validate() + if err != nil { + return nil, err + } + ports := []api.ServicePort{} + for _, tcpString := range s.TCP { + port, targetPort, err := parsePorts(tcpString) + if err != nil { + return nil, err + } + portName := strings.Replace(tcpString, ":", "-", -1) + ports = append(ports, api.ServicePort{ + Name: portName, + Port: port, + TargetPort: targetPort, + Protocol: api.Protocol("TCP"), + }) + } + + // setup default label and selector + labels := map[string]string{} + labels["app"] = s.Name + selector := map[string]string{} + selector["app"] = s.Name + + service := api.Service{ + ObjectMeta: api.ObjectMeta{ + Name: s.Name, + Labels: labels, + }, + Spec: api.ServiceSpec{ + Type: api.ServiceType(s.Type), + Selector: selector, + Ports: ports, + }, + } + if len(s.ClusterIP) > 0 { + service.Spec.ClusterIP = s.ClusterIP + } + return &service, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/serviceaccount.go b/vendor/k8s.io/kubernetes/pkg/kubectl/serviceaccount.go index 2be08dd2..1a7e256d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/serviceaccount.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/serviceaccount.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/sorted_event_list.go b/vendor/k8s.io/kubernetes/pkg/kubectl/sorted_event_list.go index 568c46d6..b8db7fad 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/sorted_event_list.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/sorted_event_list.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/sorted_resource_name_list.go b/vendor/k8s.io/kubernetes/pkg/kubectl/sorted_resource_name_list.go index 98c67344..aad1d807 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/sorted_resource_name_list.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/sorted_resource_name_list.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import ( "sort" "k8s.io/kubernetes/pkg/api" - qosutil "k8s.io/kubernetes/pkg/kubelet/qos/util" + "k8s.io/kubernetes/pkg/kubelet/qos" ) type SortableResourceNames []api.ResourceName @@ -61,8 +61,22 @@ func (list SortableResourceQuotas) Less(i, j int) bool { return list[i].Name < list[j].Name } +type SortableVolumeMounts []api.VolumeMount + +func (list SortableVolumeMounts) Len() int { + return len(list) +} + +func (list SortableVolumeMounts) Swap(i, j int) { + list[i], list[j] = list[j], list[i] +} + +func (list SortableVolumeMounts) Less(i, j int) bool { + return list[i].MountPath < list[j].MountPath +} + // SortedQoSResourceNames returns the sorted resource names of a QoS list. -func SortedQoSResourceNames(list qosutil.QoSList) []api.ResourceName { +func SortedQoSResourceNames(list qos.QOSList) []api.ResourceName { resources := make([]api.ResourceName, 0, len(list)) for res := range list { resources = append(resources, res) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/sorting_printer.go b/vendor/k8s.io/kubernetes/pkg/kubectl/sorting_printer.go index e95b8a1e..3e797fa3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/sorting_printer.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/sorting_printer.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -40,6 +40,10 @@ type SortingPrinter struct { Decoder runtime.Decoder } +func (s *SortingPrinter) FinishPrint(w io.Writer, res string) error { + return nil +} + func (s *SortingPrinter) PrintObj(obj runtime.Object, out io.Writer) error { if !meta.IsListType(obj) { return s.Delegate.PrintObj(obj, out) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/stop.go b/vendor/k8s.io/kubernetes/pkg/kubectl/stop.go index d784ef24..99538f58 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/stop.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/stop.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,13 +25,15 @@ import ( "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/apis/apps" "k8s.io/kubernetes/pkg/apis/batch" "k8s.io/kubernetes/pkg/apis/extensions" client "k8s.io/kubernetes/pkg/client/unversioned" + deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/util" - deploymentutil "k8s.io/kubernetes/pkg/util/deployment" utilerrors "k8s.io/kubernetes/pkg/util/errors" + "k8s.io/kubernetes/pkg/util/uuid" "k8s.io/kubernetes/pkg/util/wait" ) @@ -81,6 +83,9 @@ func ReaperFor(kind unversioned.GroupKind, c client.Interface) (Reaper, error) { case extensions.Kind("Job"), batch.Kind("Job"): return &JobReaper{c, Interval, Timeout}, nil + case apps.Kind("PetSet"): + return &PetSetReaper{c, Interval, Timeout}, nil + case extensions.Kind("Deployment"): return &DeploymentReaper{c, Interval, Timeout}, nil @@ -118,6 +123,10 @@ type PodReaper struct { type ServiceReaper struct { client.Interface } +type PetSetReaper struct { + client.Interface + pollInterval, timeout time.Duration +} type objInterface interface { Delete(name string) error @@ -201,7 +210,9 @@ func (reaper *ReplicationControllerReaper) Stop(namespace, name string, timeout return err } } - return rc.Delete(name) + falseVar := false + deleteOptions := &api.DeleteOptions{OrphanDependents: &falseVar} + return rc.Delete(name, deleteOptions) } // TODO(madhusudancs): Implement it when controllerRef is implemented - https://github.com/kubernetes/kubernetes/issues/2210 @@ -273,10 +284,9 @@ func (reaper *ReplicaSetReaper) Stop(namespace, name string, timeout time.Durati } } - if err := rsc.Delete(name, nil); err != nil { - return err - } - return nil + falseVar := false + deleteOptions := &api.DeleteOptions{OrphanDependents: &falseVar} + return rsc.Delete(name, deleteOptions) } func (reaper *DaemonSetReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *api.DeleteOptions) error { @@ -290,7 +300,7 @@ func (reaper *DaemonSetReaper) Stop(namespace, name string, timeout time.Duratio // daemon pods. Once it's done deleting the daemon pods, it's safe to delete // the DaemonSet. ds.Spec.Template.Spec.NodeSelector = map[string]string{ - string(util.NewUUID()): string(util.NewUUID()), + string(uuid.NewUUID()): string(uuid.NewUUID()), } // force update to avoid version conflict ds.ResourceVersion = "" @@ -305,6 +315,7 @@ func (reaper *DaemonSetReaper) Stop(namespace, name string, timeout time.Duratio if err != nil { return false, nil } + return updatedDS.Status.CurrentNumberScheduled+updatedDS.Status.NumberMisscheduled == 0, nil }); err != nil { return err @@ -313,6 +324,53 @@ func (reaper *DaemonSetReaper) Stop(namespace, name string, timeout time.Duratio return reaper.Extensions().DaemonSets(namespace).Delete(name) } +func (reaper *PetSetReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *api.DeleteOptions) error { + petsets := reaper.Apps().PetSets(namespace) + scaler, err := ScalerFor(apps.Kind("PetSet"), *reaper) + if err != nil { + return err + } + ps, err := petsets.Get(name) + if err != nil { + return err + } + if timeout == 0 { + numPets := ps.Spec.Replicas + timeout = Timeout + time.Duration(10*numPets)*time.Second + } + retry := NewRetryParams(reaper.pollInterval, reaper.timeout) + waitForPetSet := NewRetryParams(reaper.pollInterval, reaper.timeout) + if err = scaler.Scale(namespace, name, 0, nil, retry, waitForPetSet); err != nil { + return err + } + + // TODO: This shouldn't be needed, see corresponding TODO in PetSetHasDesiredPets. + // PetSet should track generation number. + pods := reaper.Pods(namespace) + selector, _ := unversioned.LabelSelectorAsSelector(ps.Spec.Selector) + options := api.ListOptions{LabelSelector: selector} + podList, err := pods.List(options) + if err != nil { + return err + } + + errList := []error{} + for _, pod := range podList.Items { + if err := pods.Delete(pod.Name, gracePeriod); err != nil { + if !errors.IsNotFound(err) { + errList = append(errList, err) + } + } + } + if len(errList) > 0 { + return utilerrors.NewAggregate(errList) + } + + // TODO: Cleanup volumes? We don't want to accidentally delete volumes from + // stop, so just leave this up to the petset. + return petsets.Delete(name, nil) +} + func (reaper *JobReaper) Stop(namespace, name string, timeout time.Duration, gracePeriod *api.DeleteOptions) error { jobs := reaper.Batch().Jobs(namespace) pods := reaper.Pods(namespace) @@ -396,10 +454,11 @@ func (reaper *DeploymentReaper) Stop(namespace, name string, timeout time.Durati errList := []error{} for _, rc := range rsList.Items { if err := rsReaper.Stop(rc.Namespace, rc.Name, timeout, gracePeriod); err != nil { - scaleGetErr, ok := err.(*ScaleError) - if !errors.IsNotFound(err) || ok && !errors.IsNotFound(scaleGetErr.ActualError) { - errList = append(errList, err) + scaleGetErr, ok := err.(ScaleError) + if errors.IsNotFound(err) || (ok && errors.IsNotFound(scaleGetErr.ActualError)) { + continue } + errList = append(errList, err) } } if len(errList) > 0 { @@ -407,7 +466,7 @@ func (reaper *DeploymentReaper) Stop(namespace, name string, timeout time.Durati } // Delete deployment at the end. - // Note: We delete deployment at the end so that if removing RSs fails, we atleast have the deployment to retry. + // Note: We delete deployment at the end so that if removing RSs fails, we at least have the deployment to retry. return deployments.Delete(name, nil) } @@ -424,7 +483,11 @@ func (reaper *DeploymentReaper) updateDeploymentWithRetries(namespace, name stri if deployment, err = deployments.Update(deployment); err == nil { return true, nil } - return false, nil + // Retry only on update conflict. + if errors.IsConflict(err) { + return false, nil + } + return false, err }) return deployment, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/version.go b/vendor/k8s.io/kubernetes/pkg/kubectl/version.go index 4c39b3c9..8e32c2dc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/version.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/version.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/watchloop.go b/vendor/k8s.io/kubernetes/pkg/kubectl/watchloop.go index d2920dd7..2f814a61 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/watchloop.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/watchloop.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/doc.go b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/doc.go index 04a25c90..ebc1cc59 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go index 511e629f..ad696f36 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/policy.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,7 +18,6 @@ package qos import ( "k8s.io/kubernetes/pkg/api" - "k8s.io/kubernetes/pkg/kubelet/qos/util" ) const ( @@ -36,11 +35,11 @@ const ( // and 1000. Containers with higher OOM scores are killed if the system runs out of memory. // See https://lwn.net/Articles/391222/ for more information. func GetContainerOOMScoreAdjust(pod *api.Pod, container *api.Container, memoryCapacity int64) int { - switch util.GetPodQos(pod) { - case util.Guaranteed: + switch GetPodQOS(pod) { + case Guaranteed: // Guaranteed containers should be the last to get killed. return guaranteedOOMScoreAdj - case util.BestEffort: + case BestEffort: return besteffortOOMScoreAdj } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/util/qos.go b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/qos.go similarity index 86% rename from vendor/k8s.io/kubernetes/pkg/kubelet/qos/util/qos.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/qos/qos.go index 9d7a5786..2c0d19d0 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/util/qos.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/qos.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,19 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package qos import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" ) -const ( - Guaranteed = "Guaranteed" - Burstable = "Burstable" - BestEffort = "BestEffort" -) - // isResourceGuaranteed returns true if the container's resource requirements are Guaranteed. func isResourceGuaranteed(container *api.Container, resource api.ResourceName) bool { // A container resource is guaranteed if its request == limit. @@ -47,11 +41,11 @@ func isResourceBestEffort(container *api.Container, resource api.ResourceName) b return !hasReq || req.Value() == 0 } -// GetPodQos returns the QoS class of a pod. +// GetPodQOS returns the QoS class of a pod. // A pod is besteffort if none of its containers have specified any requests or limits. // A pod is guaranteed only when requests and limits are specified for all the containers and they are equal. // A pod is burstable if limits and requests do not match across all containers. -func GetPodQos(pod *api.Pod) string { +func GetPodQOS(pod *api.Pod) QOSClass { requests := api.ResourceList{} limits := api.ResourceList{} zeroQuantity := resource.MustParse("0") @@ -105,23 +99,23 @@ func GetPodQos(pod *api.Pod) string { return Burstable } -// QoSList is a set of (resource name, QoS class) pairs. -type QoSList map[api.ResourceName]string +// QOSList is a set of (resource name, QoS class) pairs. +type QOSList map[api.ResourceName]QOSClass -// GetQoS returns a mapping of resource name to QoS class of a container -func GetQoS(container *api.Container) QoSList { - resourceToQoS := QoSList{} +// GetQOS returns a mapping of resource name to QoS class of a container +func GetQOS(container *api.Container) QOSList { + resourceToQOS := QOSList{} for resource := range allResources(container) { switch { case isResourceGuaranteed(container, resource): - resourceToQoS[resource] = Guaranteed + resourceToQOS[resource] = Guaranteed case isResourceBestEffort(container, resource): - resourceToQoS[resource] = BestEffort + resourceToQOS[resource] = BestEffort default: - resourceToQoS[resource] = Burstable + resourceToQOS[resource] = Burstable } } - return resourceToQoS + return resourceToQOS } // supportedComputeResources is the list of supported compute resources diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/qos/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/types.go new file mode 100644 index 00000000..e52dece4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/qos/types.go @@ -0,0 +1,29 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package qos + +// QOSClass defines the supported qos classes of Pods/Containers. +type QOSClass string + +const ( + // Guaranteed is the Guaranteed qos class. + Guaranteed QOSClass = "Guaranteed" + // Burstable is the Burstable qos class. + Burstable QOSClass = "Burstable" + // BestEffort is the BestEffort qos class. + BestEffort QOSClass = "BestEffort" +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/constants.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/constants.go new file mode 100644 index 00000000..eeabba01 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/constants.go @@ -0,0 +1,22 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +const ( + // system default DNS resolver configuration + ResolvConfDefault = "/etc/resolv.conf" +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/doc.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/doc.go new file mode 100644 index 00000000..0d9efe50 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Common types in the Kubelet. +package types diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/labels.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/labels.go new file mode 100644 index 00000000..c4dad630 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/labels.go @@ -0,0 +1,40 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +const ( + KubernetesPodNameLabel = "io.kubernetes.pod.name" + KubernetesPodNamespaceLabel = "io.kubernetes.pod.namespace" + KubernetesPodUIDLabel = "io.kubernetes.pod.uid" + KubernetesContainerNameLabel = "io.kubernetes.container.name" +) + +func GetContainerName(labels map[string]string) string { + return labels[KubernetesContainerNameLabel] +} + +func GetPodName(labels map[string]string) string { + return labels[KubernetesPodNameLabel] +} + +func GetPodUID(labels map[string]string) string { + return labels[KubernetesPodUIDLabel] +} + +func GetPodNamespace(labels map[string]string) string { + return labels[KubernetesPodNamespaceLabel] +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go new file mode 100644 index 00000000..e98489df --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go @@ -0,0 +1,133 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/api" +) + +const ConfigSourceAnnotationKey = "kubernetes.io/config.source" +const ConfigMirrorAnnotationKey = "kubernetes.io/config.mirror" +const ConfigFirstSeenAnnotationKey = "kubernetes.io/config.seen" +const ConfigHashAnnotationKey = "kubernetes.io/config.hash" + +// PodOperation defines what changes will be made on a pod configuration. +type PodOperation int + +const ( + // This is the current pod configuration + SET PodOperation = iota + // Pods with the given ids are new to this source + ADD + // Pods with the given ids are gracefully deleted from this source + DELETE + // Pods with the given ids have been removed from this source + REMOVE + // Pods with the given ids have been updated in this source + UPDATE + // Pods with the given ids have unexpected status in this source, + // kubelet should reconcile status with this source + RECONCILE + + // These constants identify the sources of pods + // Updates from a file + FileSource = "file" + // Updates from querying a web page + HTTPSource = "http" + // Updates from Kubernetes API Server + ApiserverSource = "api" + // Updates from all sources + AllSource = "*" + + NamespaceDefault = api.NamespaceDefault +) + +// PodUpdate defines an operation sent on the channel. You can add or remove single services by +// sending an array of size one and Op == ADD|REMOVE (with REMOVE, only the ID is required). +// For setting the state of the system to a given state for this source configuration, set +// Pods as desired and Op to SET, which will reset the system state to that specified in this +// operation for this source channel. To remove all pods, set Pods to empty object and Op to SET. +// +// Additionally, Pods should never be nil - it should always point to an empty slice. While +// functionally similar, this helps our unit tests properly check that the correct PodUpdates +// are generated. +type PodUpdate struct { + Pods []*api.Pod + Op PodOperation + Source string +} + +// Gets all validated sources from the specified sources. +func GetValidatedSources(sources []string) ([]string, error) { + validated := make([]string, 0, len(sources)) + for _, source := range sources { + switch source { + case AllSource: + return []string{FileSource, HTTPSource, ApiserverSource}, nil + case FileSource, HTTPSource, ApiserverSource: + validated = append(validated, source) + break + case "": + break + default: + return []string{}, fmt.Errorf("unknown pod source %q", source) + } + } + return validated, nil +} + +// GetPodSource returns the source of the pod based on the annotation. +func GetPodSource(pod *api.Pod) (string, error) { + if pod.Annotations != nil { + if source, ok := pod.Annotations[ConfigSourceAnnotationKey]; ok { + return source, nil + } + } + return "", fmt.Errorf("cannot get source of pod %q", pod.UID) +} + +// SyncPodType classifies pod updates, eg: create, update. +type SyncPodType int + +const ( + // SyncPodSync is when the pod is synced to ensure desired state + SyncPodSync SyncPodType = iota + // SyncPodUpdate is when the pod is updated from source + SyncPodUpdate + // SyncPodCreate is when the pod is created from source + SyncPodCreate + // SyncPodKill is when the pod is killed based on a trigger internal to the kubelet for eviction. + // If a SyncPodKill request is made to pod workers, the request is never dropped, and will always be processed. + SyncPodKill +) + +func (sp SyncPodType) String() string { + switch sp { + case SyncPodCreate: + return "create" + case SyncPodUpdate: + return "update" + case SyncPodSync: + return "sync" + case SyncPodKill: + return "kill" + default: + return "unknown" + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/types.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/types.go new file mode 100644 index 00000000..017c3c8c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/types.go @@ -0,0 +1,93 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +import ( + "net/http" + "time" + + "k8s.io/kubernetes/pkg/api" +) + +// TODO: Reconcile custom types in kubelet/types and this subpackage + +type HttpGetter interface { + Get(url string) (*http.Response, error) +} + +// Timestamp wraps around time.Time and offers utilities to format and parse +// the time using RFC3339Nano +type Timestamp struct { + time time.Time +} + +// NewTimestamp returns a Timestamp object using the current time. +func NewTimestamp() *Timestamp { + return &Timestamp{time.Now()} +} + +// ConvertToTimestamp takes a string, parses it using the RFC3339Nano layout, +// and converts it to a Timestamp object. +func ConvertToTimestamp(timeString string) *Timestamp { + parsed, _ := time.Parse(time.RFC3339Nano, timeString) + return &Timestamp{parsed} +} + +// Get returns the time as time.Time. +func (t *Timestamp) Get() time.Time { + return t.time +} + +// GetString returns the time in the string format using the RFC3339Nano +// layout. +func (t *Timestamp) GetString() string { + return t.time.Format(time.RFC3339Nano) +} + +// A type to help sort container statuses based on container names. +type SortedContainerStatuses []api.ContainerStatus + +func (s SortedContainerStatuses) Len() int { return len(s) } +func (s SortedContainerStatuses) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func (s SortedContainerStatuses) Less(i, j int) bool { + return s[i].Name < s[j].Name +} + +// SortInitContainerStatuses ensures that statuses are in the order that their +// init container appears in the pod spec +func SortInitContainerStatuses(p *api.Pod, statuses []api.ContainerStatus) { + containers := p.Spec.InitContainers + current := 0 + for _, container := range containers { + for j := current; j < len(statuses); j++ { + if container.Name == statuses[j].Name { + statuses[current], statuses[j] = statuses[j], statuses[current] + current++ + break + } + } + } +} + +// Reservation represents reserved resources for non-pod components. +type Reservation struct { + // System represents resources reserved for non-kubernetes components. + System api.ResourceList + // Kubernetes represents resources reserved for kubernetes system components. + Kubernetes api.ResourceList +} diff --git a/vendor/k8s.io/kubernetes/pkg/labels/doc.go b/vendor/k8s.io/kubernetes/pkg/labels/doc.go index 0e0282c3..35ba7880 100644 --- a/vendor/k8s.io/kubernetes/pkg/labels/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/labels/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/labels/labels.go b/vendor/k8s.io/kubernetes/pkg/labels/labels.go index 73324ba2..822b137a 100644 --- a/vendor/k8s.io/kubernetes/pkg/labels/labels.go +++ b/vendor/k8s.io/kubernetes/pkg/labels/labels.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -61,6 +61,15 @@ func (ls Set) AsSelector() Selector { return SelectorFromSet(ls) } +// AsSelectorPreValidated converts labels into a selector, but +// assumes that labels are already validated and thus don't +// preform any validation. +// According to our measurements this is significantly faster +// in codepaths that matter at high sccale. +func (ls Set) AsSelectorPreValidated() Selector { + return SelectorFromValidatedSet(ls) +} + // FormatLables convert label map into plain string func FormatLabels(labelMap map[string]string) string { l := Set(labelMap).String() diff --git a/vendor/k8s.io/kubernetes/pkg/labels/selector.go b/vendor/k8s.io/kubernetes/pkg/labels/selector.go index ab64ecc8..703cf7aa 100644 --- a/vendor/k8s.io/kubernetes/pkg/labels/selector.go +++ b/vendor/k8s.io/kubernetes/pkg/labels/selector.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -24,10 +24,14 @@ import ( "strings" "github.com/golang/glog" + "k8s.io/kubernetes/pkg/selection" "k8s.io/kubernetes/pkg/util/sets" "k8s.io/kubernetes/pkg/util/validation" ) +// Requirements is AND of all requirements. +type Requirements []Requirement + // Selector represents a label selector. type Selector interface { // Matches returns true if this selector matches the given set of labels. @@ -41,6 +45,12 @@ type Selector interface { // Add adds requirements to the Selector Add(r ...Requirement) Selector + + // Requirements converts this interface into Requirements to expose + // more detailed selection information. + // If there are querying parameters, it will return converted requirements and selectable=true. + // If this selector doesn't want to select anything, it will return selectable=false. + Requirements() (requirements Requirements, selectable bool) } // Everything returns a selector that matches all labels. @@ -50,32 +60,17 @@ func Everything() Selector { type nothingSelector struct{} -func (n nothingSelector) Matches(_ Labels) bool { return false } -func (n nothingSelector) Empty() bool { return false } -func (n nothingSelector) String() string { return "" } -func (n nothingSelector) Add(_ ...Requirement) Selector { return n } +func (n nothingSelector) Matches(_ Labels) bool { return false } +func (n nothingSelector) Empty() bool { return false } +func (n nothingSelector) String() string { return "" } +func (n nothingSelector) Add(_ ...Requirement) Selector { return n } +func (n nothingSelector) Requirements() (Requirements, bool) { return nil, false } // Nothing returns a selector that matches no labels func Nothing() Selector { return nothingSelector{} } -// Operator represents a key's relationship -// to a set of values in a Requirement. -type Operator string - -const ( - DoesNotExistOperator Operator = "!" - EqualsOperator Operator = "=" - DoubleEqualsOperator Operator = "==" - InOperator Operator = "in" - NotEqualsOperator Operator = "!=" - NotInOperator Operator = "notin" - ExistsOperator Operator = "exists" - GreaterThanOperator Operator = "gt" - LessThanOperator Operator = "lt" -) - func NewSelector() Selector { return internalSelector(nil) } @@ -91,14 +86,13 @@ func (a ByKey) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a ByKey) Less(i, j int) bool { return a[i].key < a[j].key } -// Requirement is a selector that contains values, a key -// and an operator that relates the key and values. The zero -// value of Requirement is invalid. +// Requirement contains values, a key, and an operator that relates the key and values. +// The zero value of Requirement is invalid. // Requirement implements both set based match and exact match -// Requirement is initialized via NewRequirement constructor for creating a valid Requirement. +// Requirement should be initialized via NewRequirement constructor for creating a valid Requirement. type Requirement struct { key string - operator Operator + operator selection.Operator strValues sets.String } @@ -108,35 +102,35 @@ type Requirement struct { // (2) If the operator is In or NotIn, the values set must be non-empty. // (3) If the operator is Equals, DoubleEquals, or NotEquals, the values set must contain one value. // (4) If the operator is Exists or DoesNotExist, the value set must be empty. -// (5) If the operator is Gt or Lt, the values set must contain only one value. +// (5) If the operator is Gt or Lt, the values set must contain only one value, which will be interpreted as an integer. // (6) The key is invalid due to its length, or sequence // of characters. See validateLabelKey for more details. // // The empty string is a valid value in the input values set. -func NewRequirement(key string, op Operator, vals sets.String) (*Requirement, error) { +func NewRequirement(key string, op selection.Operator, vals sets.String) (*Requirement, error) { if err := validateLabelKey(key); err != nil { return nil, err } switch op { - case InOperator, NotInOperator: + case selection.In, selection.NotIn: if len(vals) == 0 { return nil, fmt.Errorf("for 'in', 'notin' operators, values set can't be empty") } - case EqualsOperator, DoubleEqualsOperator, NotEqualsOperator: + case selection.Equals, selection.DoubleEquals, selection.NotEquals: if len(vals) != 1 { return nil, fmt.Errorf("exact-match compatibility requires one single value") } - case ExistsOperator, DoesNotExistOperator: + case selection.Exists, selection.DoesNotExist: if len(vals) != 0 { return nil, fmt.Errorf("values set must be empty for exists and does not exist") } - case GreaterThanOperator, LessThanOperator: + case selection.GreaterThan, selection.LessThan: if len(vals) != 1 { return nil, fmt.Errorf("for 'Gt', 'Lt' operators, exactly one value is required") } for val := range vals { - if _, err := strconv.ParseFloat(val, 64); err != nil { - return nil, fmt.Errorf("for 'Gt', 'Lt' operators, the value must be a number") + if _, err := strconv.ParseInt(val, 10, 64); err != nil { + return nil, fmt.Errorf("for 'Gt', 'Lt' operators, the value must be an integer") } } default: @@ -160,47 +154,49 @@ func NewRequirement(key string, op Operator, vals sets.String) (*Requirement, er // Labels' value for that key is not in Requirement's value set. // (4) The operator is DoesNotExist or NotIn and Labels does not have the // Requirement's key. +// (5) The operator is GreaterThanOperator or LessThanOperator, and Labels has +// the Requirement's key and the corresponding value satisfies mathematical inequality. func (r *Requirement) Matches(ls Labels) bool { switch r.operator { - case InOperator, EqualsOperator, DoubleEqualsOperator: + case selection.In, selection.Equals, selection.DoubleEquals: if !ls.Has(r.key) { return false } return r.strValues.Has(ls.Get(r.key)) - case NotInOperator, NotEqualsOperator: + case selection.NotIn, selection.NotEquals: if !ls.Has(r.key) { return true } return !r.strValues.Has(ls.Get(r.key)) - case ExistsOperator: + case selection.Exists: return ls.Has(r.key) - case DoesNotExistOperator: + case selection.DoesNotExist: return !ls.Has(r.key) - case GreaterThanOperator, LessThanOperator: + case selection.GreaterThan, selection.LessThan: if !ls.Has(r.key) { return false } - lsValue, err := strconv.ParseFloat(ls.Get(r.key), 64) + lsValue, err := strconv.ParseInt(ls.Get(r.key), 10, 64) if err != nil { - glog.V(10).Infof("Parse float failed for value %+v in label %+v, %+v", ls.Get(r.key), ls, err) + glog.V(10).Infof("ParseInt failed for value %+v in label %+v, %+v", ls.Get(r.key), ls, err) return false } - // There should be only one strValue in r.strValues, and can be converted to a float number. + // There should be only one strValue in r.strValues, and can be converted to a integer. if len(r.strValues) != 1 { - glog.V(10).Infof("Invalid values count %+v of requirement %+v, for 'Gt', 'Lt' operators, exactly one value is required", len(r.strValues), r) + glog.V(10).Infof("Invalid values count %+v of requirement %#v, for 'Gt', 'Lt' operators, exactly one value is required", len(r.strValues), r) return false } - var rValue float64 + var rValue int64 for strValue := range r.strValues { - rValue, err = strconv.ParseFloat(strValue, 64) + rValue, err = strconv.ParseInt(strValue, 10, 64) if err != nil { - glog.V(10).Infof("Parse float failed for value %+v in requirement %+v, for 'Gt', 'Lt' operators, the value must be a number", strValue, r) + glog.V(10).Infof("ParseInt failed for value %+v in requirement %#v, for 'Gt', 'Lt' operators, the value must be an integer", strValue, r) return false } } - return (r.operator == GreaterThanOperator && lsValue > rValue) || (r.operator == LessThanOperator && lsValue < rValue) + return (r.operator == selection.GreaterThan && lsValue > rValue) || (r.operator == selection.LessThan && lsValue < rValue) default: return false } @@ -209,7 +205,7 @@ func (r *Requirement) Matches(ls Labels) bool { func (r *Requirement) Key() string { return r.key } -func (r *Requirement) Operator() Operator { +func (r *Requirement) Operator() selection.Operator { return r.operator } func (r *Requirement) Values() sets.String { @@ -233,32 +229,32 @@ func (lsel internalSelector) Empty() bool { // returned. See NewRequirement for creating a valid Requirement. func (r *Requirement) String() string { var buffer bytes.Buffer - if r.operator == DoesNotExistOperator { + if r.operator == selection.DoesNotExist { buffer.WriteString("!") } buffer.WriteString(r.key) switch r.operator { - case EqualsOperator: + case selection.Equals: buffer.WriteString("=") - case DoubleEqualsOperator: + case selection.DoubleEquals: buffer.WriteString("==") - case NotEqualsOperator: + case selection.NotEquals: buffer.WriteString("!=") - case InOperator: + case selection.In: buffer.WriteString(" in ") - case NotInOperator: + case selection.NotIn: buffer.WriteString(" notin ") - case GreaterThanOperator: + case selection.GreaterThan: buffer.WriteString(">") - case LessThanOperator: + case selection.LessThan: buffer.WriteString("<") - case ExistsOperator, DoesNotExistOperator: + case selection.Exists, selection.DoesNotExist: return buffer.String() } switch r.operator { - case InOperator, NotInOperator: + case selection.In, selection.NotIn: buffer.WriteString("(") } if len(r.strValues) == 1 { @@ -268,7 +264,7 @@ func (r *Requirement) String() string { } switch r.operator { - case InOperator, NotInOperator: + case selection.In, selection.NotIn: buffer.WriteString(")") } return buffer.String() @@ -299,6 +295,8 @@ func (lsel internalSelector) Matches(l Labels) bool { return true } +func (lsel internalSelector) Requirements() (Requirements, bool) { return Requirements(lsel), true } + // String returns a comma-separated string of all // the internalSelector Requirements' human-readable strings. func (lsel internalSelector) String() string { @@ -467,7 +465,7 @@ func (l *Lexer) Lex() (tok Token, lit string) { } } -// Parser data structure contains the label selector parser data strucutre +// Parser data structure contains the label selector parser data structure type Parser struct { l *Lexer scannedItems []ScannedItem @@ -562,7 +560,7 @@ func (p *Parser) parseRequirement() (*Requirement, error) { if err != nil { return nil, err } - if operator == ExistsOperator || operator == DoesNotExistOperator { // operator found lookahead set checked + if operator == selection.Exists || operator == selection.DoesNotExist { // operator found lookahead set checked return NewRequirement(key, operator, nil) } operator, err = p.parseOperator() @@ -571,9 +569,9 @@ func (p *Parser) parseRequirement() (*Requirement, error) { } var values sets.String switch operator { - case InOperator, NotInOperator: + case selection.In, selection.NotIn: values, err = p.parseValues() - case EqualsOperator, DoubleEqualsOperator, NotEqualsOperator, GreaterThanOperator, LessThanOperator: + case selection.Equals, selection.DoubleEquals, selection.NotEquals, selection.GreaterThan, selection.LessThan: values, err = p.parseExactValue() } if err != nil { @@ -586,11 +584,11 @@ func (p *Parser) parseRequirement() (*Requirement, error) { // parseKeyAndInferOperator parse literals. // in case of no operator '!, in, notin, ==, =, !=' are found // the 'exists' operator is inferred -func (p *Parser) parseKeyAndInferOperator() (string, Operator, error) { - var operator Operator +func (p *Parser) parseKeyAndInferOperator() (string, selection.Operator, error) { + var operator selection.Operator tok, literal := p.consume(Values) if tok == DoesNotExistToken { - operator = DoesNotExistOperator + operator = selection.DoesNotExist tok, literal = p.consume(Values) } if tok != IdentifierToken { @@ -601,8 +599,8 @@ func (p *Parser) parseKeyAndInferOperator() (string, Operator, error) { return "", "", err } if t, _ := p.lookahead(Values); t == EndOfStringToken || t == CommaToken { - if operator != DoesNotExistOperator { - operator = ExistsOperator + if operator != selection.DoesNotExist { + operator = selection.Exists } } return literal, operator, nil @@ -610,24 +608,24 @@ func (p *Parser) parseKeyAndInferOperator() (string, Operator, error) { // parseOperator return operator and eventually matchType // matchType can be exact -func (p *Parser) parseOperator() (op Operator, err error) { +func (p *Parser) parseOperator() (op selection.Operator, err error) { tok, lit := p.consume(KeyAndOperator) switch tok { // DoesNotExistToken shouldn't be here because it's a unary operator, not a binary operator case InToken: - op = InOperator + op = selection.In case EqualsToken: - op = EqualsOperator + op = selection.Equals case DoubleEqualsToken: - op = DoubleEqualsOperator + op = selection.DoubleEquals case GreaterThanToken: - op = GreaterThanOperator + op = selection.GreaterThan case LessThanToken: - op = LessThanOperator + op = selection.LessThan case NotInToken: - op = NotInOperator + op = selection.NotIn case NotEqualsToken: - op = NotEqualsOperator + op = selection.NotEquals default: return "", fmt.Errorf("found '%s', expected: '=', '!=', '==', 'in', notin'", lit) } @@ -786,7 +784,7 @@ func SelectorFromSet(ls Set) Selector { } var requirements internalSelector for label, value := range ls { - if r, err := NewRequirement(label, EqualsOperator, sets.NewString(value)); err != nil { + if r, err := NewRequirement(label, selection.Equals, sets.NewString(value)); err != nil { //TODO: double check errors when input comes from serialization? return internalSelector{} } else { @@ -798,6 +796,22 @@ func SelectorFromSet(ls Set) Selector { return internalSelector(requirements) } +// SelectorFromValidatedSet returns a Selector which will match exactly the given Set. +// A nil and empty Sets are considered equivalent to Everything(). +// It assumes that Set is already validated and doesn't do any validation. +func SelectorFromValidatedSet(ls Set) Selector { + if ls == nil { + return internalSelector{} + } + var requirements internalSelector + for label, value := range ls { + requirements = append(requirements, Requirement{key: label, operator: selection.Equals, strValues: sets.NewString(value)}) + } + // sort to have deterministic string representation + sort.Sort(ByKey(requirements)) + return internalSelector(requirements) +} + // ParseToRequirements takes a string representing a selector and returns a list of // requirements. This function is suitable for those callers that perform additional // processing on selector requirements. diff --git a/vendor/k8s.io/kubernetes/pkg/master/ports/doc.go b/vendor/k8s.io/kubernetes/pkg/master/ports/doc.go index dc6c989e..a2a00210 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/ports/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/master/ports/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/master/ports/ports.go b/vendor/k8s.io/kubernetes/pkg/master/ports/ports.go index 246a1a56..9c597ba4 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/ports/ports.go +++ b/vendor/k8s.io/kubernetes/pkg/master/ports/ports.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/generic/doc.go b/vendor/k8s.io/kubernetes/pkg/registry/generic/doc.go index 2486e9b7..47bb9530 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/generic/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/generic/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/generic/matcher.go b/vendor/k8s.io/kubernetes/pkg/registry/generic/matcher.go index 08e2df7b..16e5851b 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/generic/matcher.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/generic/matcher.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,13 +21,14 @@ import ( "k8s.io/kubernetes/pkg/fields" "k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/storage" ) // AttrFunc returns label and field sets for List or Watch to compare against, or an error. type AttrFunc func(obj runtime.Object) (label labels.Set, field fields.Set, err error) -// ObjectMetaFieldsSet returns a fields set that represents the ObjectMeta. -func ObjectMetaFieldsSet(objectMeta api.ObjectMeta, hasNamespaceField bool) fields.Set { +// ObjectMetaFieldsSet returns a fields that represents the ObjectMeta. +func ObjectMetaFieldsSet(objectMeta *api.ObjectMeta, hasNamespaceField bool) fields.Set { if !hasNamespaceField { return fields.Set{ "metadata.name": objectMeta.Name, @@ -50,9 +51,10 @@ func MergeFieldsSets(source fields.Set, fragment fields.Set) fields.Set { // SelectionPredicate implements a generic predicate that can be passed to // GenericRegistry's List or Watch methods. Implements the Matcher interface. type SelectionPredicate struct { - Label labels.Selector - Field fields.Selector - GetAttrs AttrFunc + Label labels.Selector + Field fields.Selector + GetAttrs AttrFunc + IndexFields []string } // Matches returns true if the given object's labels and fields (as @@ -66,7 +68,11 @@ func (s *SelectionPredicate) Matches(obj runtime.Object) (bool, error) { if err != nil { return false, err } - return s.Label.Matches(labels) && s.Field.Matches(fields), nil + matched := s.Label.Matches(labels) + if s.Field != nil { + matched = (matched && s.Field.Matches(fields)) + } + return matched, nil } // MatchesSingle will return (name, true) if and only if s.Field matches on the object's @@ -79,6 +85,20 @@ func (s *SelectionPredicate) MatchesSingle() (string, bool) { return "", false } +// For any index defined by IndexFields, if a matcher can match only (a subset) +// of objects that return for a given index, a pair (, ) +// wil be returned. +// TODO: Consider supporting also labels. +func (s *SelectionPredicate) MatcherIndex() []storage.MatchValue { + var result []storage.MatchValue + for _, field := range s.IndexFields { + if value, ok := s.Field.RequiresExactMatch(field); ok { + result = append(result, storage.MatchValue{IndexName: field, Value: value}) + } + } + return result +} + // Matcher can return true if an object matches the Matcher's selection // criteria. If it is known that the matcher will match only a single object // then MatchesSingle should return the key of that object and true. This is an @@ -93,50 +113,13 @@ type Matcher interface { // include the object's namespace. MatchesSingle() (key string, matchesSingleObject bool) - // TODO: when we start indexing objects, add something like the below: - // MatchesIndices() (indexName []string, indexValue []string) - // where indexName/indexValue are the same length. -} - -// MatcherFunc makes a matcher from the provided function. For easy definition -// of matchers for testing. Note: use SelectionPredicate above for real code! -func MatcherFunc(f func(obj runtime.Object) (bool, error)) Matcher { - return matcherFunc(f) -} - -type matcherFunc func(obj runtime.Object) (bool, error) - -// Matches calls the embedded function. -func (m matcherFunc) Matches(obj runtime.Object) (bool, error) { - return m(obj) -} - -// MatchesSingle always returns "", false-- because this is a predicate -// implementation of Matcher. -func (m matcherFunc) MatchesSingle() (string, bool) { - return "", false -} - -// MatchOnKey returns a matcher that will send only the object matching key -// through the matching function f. For testing! -// Note: use SelectionPredicate above for real code! -func MatchOnKey(key string, f func(obj runtime.Object) (bool, error)) Matcher { - return matchKey{key, f} -} - -type matchKey struct { - key string - matcherFunc -} - -// MatchesSingle always returns its key, true. -func (m matchKey) MatchesSingle() (string, bool) { - return m.key, true + // For any known index, if a matcher can match only (a subset) of objects + // that return for a given index, a pair (, ) + // will be returned. + MatcherIndex() []storage.MatchValue } var ( // Assert implementations match the interface. - _ = Matcher(matchKey{}) _ = Matcher(&SelectionPredicate{}) - _ = Matcher(matcherFunc(nil)) ) diff --git a/vendor/k8s.io/kubernetes/pkg/registry/generic/options.go b/vendor/k8s.io/kubernetes/pkg/registry/generic/options.go index eea52c99..74e95e71 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/generic/options.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/generic/options.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,13 +16,13 @@ limitations under the License. package generic -import ( - pkgstorage "k8s.io/kubernetes/pkg/storage" -) +import "k8s.io/kubernetes/pkg/storage/storagebackend" // RESTOptions is set of configuration options to generic registries. type RESTOptions struct { - Storage pkgstorage.Interface + StorageConfig *storagebackend.Config Decorator StorageDecorator DeleteCollectionWorkers int + + ResourcePrefix string } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/generic/storage_decorator.go b/vendor/k8s.io/kubernetes/pkg/registry/generic/storage_decorator.go index 70109efe..0d1511ca 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/generic/storage_decorator.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/generic/storage_decorator.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,28 +17,44 @@ limitations under the License. package generic import ( + "github.com/golang/glog" "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/storage" + "k8s.io/kubernetes/pkg/storage/storagebackend" + "k8s.io/kubernetes/pkg/storage/storagebackend/factory" ) // StorageDecorator is a function signature for producing // a storage.Interface from given parameters. type StorageDecorator func( - storageInterface storage.Interface, + config *storagebackend.Config, capacity int, objectType runtime.Object, resourcePrefix string, scopeStrategy rest.NamespaceScopedStrategy, - newListFunc func() runtime.Object) storage.Interface + newListFunc func() runtime.Object, + trigger storage.TriggerPublisherFunc) (storage.Interface, factory.DestroyFunc) // Returns given 'storageInterface' without any decoration. func UndecoratedStorage( - storageInterface storage.Interface, + config *storagebackend.Config, capacity int, objectType runtime.Object, resourcePrefix string, scopeStrategy rest.NamespaceScopedStrategy, - newListFunc func() runtime.Object) storage.Interface { - return storageInterface + newListFunc func() runtime.Object, + trigger storage.TriggerPublisherFunc) (storage.Interface, factory.DestroyFunc) { + return NewRawStorage(config) +} + +// NewRawStorage creates the low level kv storage. This is a work-around for current +// two layer of same storage interface. +// TODO: Once cacher is enabled on all registries (event registry is special), we will remove this method. +func NewRawStorage(config *storagebackend.Config) (storage.Interface, factory.DestroyFunc) { + s, d, err := factory.Create(*config) + if err != nil { + glog.Fatalf("Unable to create storage backend: config (%v), err (%v)", config, err) + } + return s, d } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/codec.go b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/codec.go index 892726ca..89993400 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/codec.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/codec.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -235,10 +235,7 @@ func (t *thirdPartyResourceDataCodecFactory) StreamingSerializerForMediaType(med } func (t *thirdPartyResourceDataCodecFactory) EncoderForVersion(s runtime.Encoder, gv runtime.GroupVersioner) runtime.Encoder { - if target, ok := runtime.PreferredGroupVersion(gv); ok { - return &thirdPartyResourceDataEncoder{delegate: t.delegate.EncoderForVersion(s, gv), gvk: target.WithKind(t.kind)} - } - return &thirdPartyResourceDataEncoder{delegate: t.delegate.EncoderForVersion(s, gv)} + return &thirdPartyResourceDataEncoder{delegate: t.delegate.EncoderForVersion(s, gv), gvk: t.encodeGV.WithKind(t.kind)} } func (t *thirdPartyResourceDataCodecFactory) DecoderToVersion(s runtime.Decoder, gv runtime.GroupVersioner) runtime.Decoder { @@ -272,35 +269,42 @@ func parseObject(data []byte) (map[string]interface{}, error) { return mapObj, nil } -func (t *thirdPartyResourceDataDecoder) populate(data []byte) (runtime.Object, error) { +func (t *thirdPartyResourceDataDecoder) populate(data []byte) (runtime.Object, *unversioned.GroupVersionKind, error) { mapObj, err := parseObject(data) if err != nil { - return nil, err + return nil, nil, err } return t.populateFromObject(mapObj, data) } -func (t *thirdPartyResourceDataDecoder) populateFromObject(mapObj map[string]interface{}, data []byte) (runtime.Object, error) { +func (t *thirdPartyResourceDataDecoder) populateFromObject(mapObj map[string]interface{}, data []byte) (runtime.Object, *unversioned.GroupVersionKind, error) { typeMeta := unversioned.TypeMeta{} if err := json.Unmarshal(data, &typeMeta); err != nil { - return nil, err + return nil, nil, err } + + gv, err := unversioned.ParseGroupVersion(typeMeta.APIVersion) + if err != nil { + return nil, nil, err + } + gvk := gv.WithKind(typeMeta.Kind) + isList := strings.HasSuffix(typeMeta.Kind, "List") switch { case !isList && (len(t.kind) == 0 || typeMeta.Kind == t.kind): result := &extensions.ThirdPartyResourceData{} if err := t.populateResource(result, mapObj, data); err != nil { - return nil, err + return nil, nil, err } - return result, nil + return result, &gvk, nil case isList && (len(t.kind) == 0 || typeMeta.Kind == t.kind+"List"): list := &extensions.ThirdPartyResourceDataList{} if err := t.populateListResource(list, mapObj); err != nil { - return nil, err + return nil, nil, err } - return list, nil + return list, &gvk, nil default: - return nil, fmt.Errorf("unexpected kind: %s, expected %s", typeMeta.Kind, t.kind) + return nil, nil, fmt.Errorf("unexpected kind: %s, expected %s", typeMeta.Kind, t.kind) } } @@ -362,11 +366,7 @@ func (t *thirdPartyResourceDataDecoder) Decode(data []byte, gvk *unversioned.Gro return t.delegate.Decode(data, gvk, into) } } - obj, err := t.populate(data) - if err != nil { - return nil, nil, err - } - return obj, gvk, nil + return t.populate(data) } switch o := into.(type) { case *extensions.ThirdPartyResourceData: @@ -380,14 +380,14 @@ func (t *thirdPartyResourceDataDecoder) Decode(data []byte, gvk *unversioned.Gro return t.delegate.Decode(data, gvk, into) } } - obj, err := t.populate(data) + obj, outGVK, err := t.populate(data) if err != nil { return nil, nil, err } o.Objects = []runtime.Object{ obj, } - return o, gvk, nil + return o, outGVK, nil default: return t.delegate.Decode(data, gvk, into) } @@ -475,13 +475,6 @@ func (t *thirdPartyResourceDataDecoder) populateListResource(objIn *extensions.T return nil } -const template = `{ - "kind": "%s", - "apiVersion": "%s", - "metadata": {}, - "items": [ %s ] -}` - type thirdPartyResourceDataEncoder struct { delegate runtime.Encoder gvk unversioned.GroupVersionKind @@ -512,21 +505,40 @@ func (t *thirdPartyResourceDataEncoder) Encode(obj runtime.Object, stream io.Wri case *extensions.ThirdPartyResourceData: return encodeToJSON(obj, stream) case *extensions.ThirdPartyResourceDataList: - // TODO: There must be a better way to do this... - dataStrings := make([]string, len(obj.Items)) + // TODO: There are likely still better ways to do this... + listItems := make([]json.RawMessage, len(obj.Items)) + for ix := range obj.Items { buff := &bytes.Buffer{} err := encodeToJSON(&obj.Items[ix], buff) if err != nil { return err } - dataStrings[ix] = buff.String() + listItems[ix] = json.RawMessage(buff.Bytes()) } - if t.gvk.IsEmpty() { + + if t.gvk.Empty() { return fmt.Errorf("thirdPartyResourceDataEncoder was not given a target version") } - gv := t.gvk.GroupVersion() - _, err = fmt.Fprintf(stream, template, t.gvk.Kind+"List", gv.String(), strings.Join(dataStrings, ",")) + + encMap := struct { + Kind string `json:"kind,omitempty"` + Items []json.RawMessage `json:"items"` + Metadata unversioned.ListMeta `json:"metadata,omitempty"` + APIVersion string `json:"apiVersion,omitempty"` + }{ + Kind: t.gvk.Kind + "List", + Items: listItems, + Metadata: obj.ListMeta, + APIVersion: t.gvk.GroupVersion().String(), + } + + encBytes, err := json.Marshal(encMap) + if err != nil { + return err + } + + _, err = stream.Write(encBytes) return err case *versioned.InternalEvent: event := &versioned.Event{} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/doc.go b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/doc.go index 62e2dc1e..d9988ccb 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/registry.go b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/registry.go index 058276d1..87f1156e 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/registry.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/registry.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/strategy.go b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/strategy.go index 9f7673d7..5ed76ed4 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/strategy.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/strategy.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -48,7 +48,7 @@ func (strategy) NamespaceScoped() bool { return true } -func (strategy) PrepareForCreate(obj runtime.Object) { +func (strategy) PrepareForCreate(ctx api.Context, obj runtime.Object) { } func (strategy) Validate(ctx api.Context, obj runtime.Object) field.ErrorList { @@ -63,7 +63,7 @@ func (strategy) AllowCreateOnUpdate() bool { return false } -func (strategy) PrepareForUpdate(obj, old runtime.Object) { +func (strategy) PrepareForUpdate(ctx api.Context, obj, old runtime.Object) { } func (strategy) ValidateUpdate(ctx api.Context, obj, old runtime.Object) field.ErrorList { @@ -75,18 +75,21 @@ func (strategy) AllowUnconditionalUpdate() bool { } // Matcher returns a generic matcher for a given label and field selector. -func Matcher(label labels.Selector, field fields.Selector) generic.Matcher { - return generic.MatcherFunc(func(obj runtime.Object) (bool, error) { - sa, ok := obj.(*extensions.ThirdPartyResourceData) - if !ok { - return false, fmt.Errorf("not a ThirdPartyResourceData") - } - fields := SelectableFields(sa) - return label.Matches(labels.Set(sa.Labels)) && field.Matches(fields), nil - }) +func Matcher(label labels.Selector, field fields.Selector) *generic.SelectionPredicate { + return &generic.SelectionPredicate{ + Label: label, + Field: field, + GetAttrs: func(obj runtime.Object) (labels.Set, fields.Set, error) { + tprd, ok := obj.(*extensions.ThirdPartyResourceData) + if !ok { + return nil, nil, fmt.Errorf("not a ThirdPartyResourceData") + } + return labels.Set(tprd.Labels), SelectableFields(tprd), nil + }, + } } -// SelectableFields returns a label set that can be used for filter selection -func SelectableFields(obj *extensions.ThirdPartyResourceData) labels.Set { - return labels.Set{} +// SelectableFields returns a field set that can be used for filter selection +func SelectableFields(obj *extensions.ThirdPartyResourceData) fields.Set { + return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/util.go b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/util.go index 120981e8..d8e91b15 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/util.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/thirdpartyresourcedata/util.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/codec.go b/vendor/k8s.io/kubernetes/pkg/runtime/codec.go index 32cda0e6..9077f0fc 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/codec.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/codec.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -80,12 +80,14 @@ func EncodeOrDie(e Encoder, obj Object) string { // invokes the ObjectCreator to instantiate a new gvk. Returns an error if the typer cannot find the object. func UseOrCreateObject(t ObjectTyper, c ObjectCreater, gvk unversioned.GroupVersionKind, obj Object) (Object, error) { if obj != nil { - into, _, err := t.ObjectKinds(obj) + kinds, _, err := t.ObjectKinds(obj) if err != nil { return nil, err } - if gvk == into[0] { - return obj, nil + for _, kind := range kinds { + if gvk == kind { + return obj, nil + } } } return c.New(gvk) @@ -197,78 +199,82 @@ func (s base64Serializer) Decode(data []byte, defaults *unversioned.GroupVersion return s.Serializer.Decode(out[:n], defaults, into) } +var ( + // InternalGroupVersioner will always prefer the internal version for a given group version kind. + InternalGroupVersioner GroupVersioner = internalGroupVersioner{} + // DisabledGroupVersioner will reject all kinds passed to it. + DisabledGroupVersioner GroupVersioner = disabledGroupVersioner{} +) + +type internalGroupVersioner struct{} + +// KindForGroupVersionKinds returns an internal Kind if one is found, or converts the first provided kind to the internal version. +func (internalGroupVersioner) KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (unversioned.GroupVersionKind, bool) { + for _, kind := range kinds { + if kind.Version == APIVersionInternal { + return kind, true + } + } + for _, kind := range kinds { + return unversioned.GroupVersionKind{Group: kind.Group, Version: APIVersionInternal, Kind: kind.Kind}, true + } + return unversioned.GroupVersionKind{}, false +} + +type disabledGroupVersioner struct{} + +// KindForGroupVersionKinds returns false for any input. +func (disabledGroupVersioner) KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (unversioned.GroupVersionKind, bool) { + return unversioned.GroupVersionKind{}, false +} + +// GroupVersioners implements GroupVersioner and resolves to the first exact match for any kind. +type GroupVersioners []GroupVersioner + +// KindForGroupVersionKinds returns the first match of any of the group versioners, or false if no match occured. +func (gvs GroupVersioners) KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (unversioned.GroupVersionKind, bool) { + for _, gv := range gvs { + target, ok := gv.KindForGroupVersionKinds(kinds) + if !ok { + continue + } + return target, true + } + return unversioned.GroupVersionKind{}, false +} + // Assert that unversioned.GroupVersion and GroupVersions implement GroupVersioner var _ GroupVersioner = unversioned.GroupVersion{} var _ GroupVersioner = unversioned.GroupVersions{} var _ GroupVersioner = multiGroupVersioner{} type multiGroupVersioner struct { - target unversioned.GroupVersion - groupKinds []unversioned.GroupKind + target unversioned.GroupVersion + acceptedGroupKinds []unversioned.GroupKind } -// NewMultiGroupVersioner creates a group versioner that returns gv for each specified group, and -// prefers the first item in groups. +// NewMultiGroupVersioner returns the provided group version for any kind that matches one of the provided group kinds. +// Kind may be empty in the provided group kind, in which case any kind will match. func NewMultiGroupVersioner(gv unversioned.GroupVersion, groupKinds ...unversioned.GroupKind) GroupVersioner { if len(groupKinds) == 0 || (len(groupKinds) == 1 && groupKinds[0].Group == gv.Group) { return gv } - return multiGroupVersioner{target: gv, groupKinds: groupKinds} + return multiGroupVersioner{target: gv, acceptedGroupKinds: groupKinds} } -// VersionForGroupKind returns the target version if the provided src GroupKind matches any of the allowed -// group kinds. If Kind is specified on src, only an equivalent Kind or empty kind will match. -func (v multiGroupVersioner) VersionForGroupKind(src unversioned.GroupKind) (unversioned.GroupVersion, bool) { - // match any group kind with the same kind - if len(src.Kind) > 0 { - for _, kind := range v.groupKinds { - // skip group kinds that don't match this kind +// KindForGroupVersionKinds returns the target group version if any kind matches any of the original group kinds. It will +// use the originating kind where possible. +func (v multiGroupVersioner) KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (unversioned.GroupVersionKind, bool) { + for _, src := range kinds { + for _, kind := range v.acceptedGroupKinds { + if kind.Group != src.Group { + continue + } if len(kind.Kind) > 0 && kind.Kind != src.Kind { continue } - if kind.Group == src.Group { - return v.target, true - } - } - return unversioned.GroupVersion{}, false - } - - // match only group kinds that specify no kind - for _, kind := range v.groupKinds { - if len(kind.Kind) > 0 { - continue - } - if kind.Group == src.Group { - return v.target, true + return v.target.WithKind(src.Kind), true } } - return unversioned.GroupVersion{}, false -} - -func (v multiGroupVersioner) PrefersGroup() (string, bool) { - return v.groupKinds[0].Group, true -} - -// kindForGroupVersioner identifies the first GVK that the target group versioner accepts. -func kindForGroupVersioner(kinds []unversioned.GroupVersionKind, target GroupVersioner) (unversioned.GroupVersionKind, bool) { - // select the kind that matches the preferred group - if group, ok := target.PrefersGroup(); ok { - if gv, ok := target.VersionForGroupKind(unversioned.GroupKind{Group: group}); ok { - for _, kind := range kinds { - if kind.Group == group { - return gv.WithKind(kind.Kind), true - } - } - } - } - - // find the first group that has a target version - for _, kind := range kinds { - if gv, ok := target.VersionForGroupKind(kind.GroupKind()); ok { - return gv.WithKind(kind.Kind), true - } - } - - // no match return unversioned.GroupVersionKind{}, false } diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/codec_check.go b/vendor/k8s.io/kubernetes/pkg/runtime/codec_check.go index 09e7d51a..b0126963 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/codec_check.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/codec_check.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/conversion.go b/vendor/k8s.io/kubernetes/pkg/runtime/conversion.go index 69cf00fe..dd6e26af 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/conversion.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/deep_copy_generated.go b/vendor/k8s.io/kubernetes/pkg/runtime/deep_copy_generated.go deleted file mode 100644 index fad426da..00000000 --- a/vendor/k8s.io/kubernetes/pkg/runtime/deep_copy_generated.go +++ /dev/null @@ -1,65 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 2016 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This file was autogenerated by deepcopy-gen. Do not edit it manually! - -package runtime - -import ( - conversion "k8s.io/kubernetes/pkg/conversion" -) - -func DeepCopy_runtime_RawExtension(in RawExtension, out *RawExtension, c *conversion.Cloner) error { - if in.Raw != nil { - in, out := in.Raw, &out.Raw - *out = make([]byte, len(in)) - copy(*out, in) - } else { - out.Raw = nil - } - if in.Object == nil { - out.Object = nil - } else if newVal, err := c.DeepCopy(in.Object); err != nil { - return err - } else { - out.Object = newVal.(Object) - } - return nil -} - -func DeepCopy_runtime_TypeMeta(in TypeMeta, out *TypeMeta, c *conversion.Cloner) error { - out.APIVersion = in.APIVersion - out.Kind = in.Kind - return nil -} - -func DeepCopy_runtime_Unknown(in Unknown, out *Unknown, c *conversion.Cloner) error { - if err := DeepCopy_runtime_TypeMeta(in.TypeMeta, &out.TypeMeta, c); err != nil { - return err - } - if in.Raw != nil { - in, out := in.Raw, &out.Raw - *out = make([]byte, len(in)) - copy(*out, in) - } else { - out.Raw = nil - } - out.ContentEncoding = in.ContentEncoding - out.ContentType = in.ContentType - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/doc.go b/vendor/k8s.io/kubernetes/pkg/runtime/doc.go index 08e18891..a9d084d9 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -41,4 +41,5 @@ limitations under the License. // // As a bonus, a few common types useful from all api objects and versions // are provided in types.go. + package runtime diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/embedded.go b/vendor/k8s.io/kubernetes/pkg/runtime/embedded.go index a62080e3..eb1f573d 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/embedded.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/embedded.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/error.go b/vendor/k8s.io/kubernetes/pkg/runtime/error.go index ca60ee81..2a1262c5 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/error.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/error.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -84,7 +84,7 @@ type missingVersionErr struct { } // IsMissingVersion returns true if the error indicates that the provided object -// is missing a 'Versioj' field. +// is missing a 'Version' field. func NewMissingVersionErr(data string) error { return &missingVersionErr{data} } diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/extension.go b/vendor/k8s.io/kubernetes/pkg/runtime/extension.go index eca82986..4d23ee9e 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/extension.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/extension.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/runtime/generated.pb.go index 28926848..63216774 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -35,6 +35,9 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" +import strings "strings" +import reflect "reflect" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -42,17 +45,21 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *RawExtension) Reset() { *m = RawExtension{} } -func (m *RawExtension) String() string { return proto.CompactTextString(m) } -func (*RawExtension) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 -func (m *TypeMeta) Reset() { *m = TypeMeta{} } -func (m *TypeMeta) String() string { return proto.CompactTextString(m) } -func (*TypeMeta) ProtoMessage() {} +func (m *RawExtension) Reset() { *m = RawExtension{} } +func (*RawExtension) ProtoMessage() {} +func (*RawExtension) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } -func (m *Unknown) Reset() { *m = Unknown{} } -func (m *Unknown) String() string { return proto.CompactTextString(m) } -func (*Unknown) ProtoMessage() {} +func (m *TypeMeta) Reset() { *m = TypeMeta{} } +func (*TypeMeta) ProtoMessage() {} +func (*TypeMeta) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *Unknown) Reset() { *m = Unknown{} } +func (*Unknown) ProtoMessage() {} +func (*Unknown) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } func init() { proto.RegisterType((*RawExtension)(nil), "k8s.io.kubernetes.pkg.runtime.RawExtension") @@ -225,6 +232,48 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *RawExtension) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RawExtension{`, + `Raw:` + valueToStringGenerated(this.Raw) + `,`, + `}`, + }, "") + return s +} +func (this *TypeMeta) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&TypeMeta{`, + `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, + `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, + `}`, + }, "") + return s +} +func (this *Unknown) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Unknown{`, + `TypeMeta:` + strings.Replace(strings.Replace(this.TypeMeta.String(), "TypeMeta", "TypeMeta", 1), `&`, ``, 1) + `,`, + `Raw:` + valueToStringGenerated(this.Raw) + `,`, + `ContentEncoding:` + fmt.Sprintf("%v", this.ContentEncoding) + `,`, + `ContentType:` + fmt.Sprintf("%v", this.ContentType) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *RawExtension) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -687,3 +736,32 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 388 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x7c, 0x90, 0x3f, 0x8f, 0xda, 0x30, + 0x18, 0xc6, 0x13, 0x40, 0x82, 0x1a, 0x24, 0x2a, 0x77, 0x68, 0x8a, 0x54, 0x83, 0x58, 0x5a, 0x06, + 0x6c, 0x15, 0xa9, 0x52, 0x57, 0x82, 0x18, 0xaa, 0xaa, 0x52, 0x65, 0x95, 0x0e, 0x9d, 0x1a, 0x12, + 0x37, 0xb5, 0x52, 0xec, 0xc8, 0x71, 0x94, 0x76, 0xeb, 0x47, 0xe8, 0xc7, 0x62, 0x64, 0xbc, 0x09, + 0x1d, 0xb9, 0xcf, 0x70, 0xfb, 0x09, 0x63, 0xfe, 0x1c, 0xa0, 0xdb, 0xe2, 0xf7, 0xf9, 0x3d, 0xcf, + 0xfb, 0xbc, 0x01, 0xc3, 0xe4, 0x43, 0x86, 0xb9, 0x24, 0x49, 0x3e, 0x67, 0x4a, 0x30, 0xcd, 0x32, + 0x92, 0x26, 0x31, 0x51, 0xb9, 0xd0, 0x7c, 0xc1, 0x48, 0xcc, 0x04, 0x53, 0x81, 0x66, 0x11, 0x4e, + 0x95, 0xd4, 0x12, 0xbe, 0xde, 0xe1, 0xf8, 0x88, 0xe3, 0x34, 0x89, 0xb1, 0xc5, 0x3b, 0xc3, 0x98, + 0xeb, 0x5f, 0xf9, 0x1c, 0x87, 0x72, 0x41, 0x62, 0x19, 0x4b, 0x62, 0x5c, 0xf3, 0xfc, 0xa7, 0x79, + 0x99, 0x87, 0xf9, 0xda, 0xa5, 0x75, 0x46, 0xd7, 0x97, 0x07, 0x29, 0x27, 0x8a, 0x65, 0x32, 0x57, + 0xe1, 0x45, 0x83, 0xce, 0xbb, 0xeb, 0x9e, 0x5c, 0xf3, 0xdf, 0x84, 0x0b, 0x9d, 0x69, 0x75, 0x6e, + 0xe9, 0x0f, 0x40, 0x8b, 0x06, 0xc5, 0xf4, 0x8f, 0x66, 0x22, 0xe3, 0x52, 0xc0, 0x57, 0xa0, 0xaa, + 0x82, 0xc2, 0x73, 0x7b, 0xee, 0xdb, 0x96, 0x5f, 0x2f, 0xd7, 0xdd, 0x2a, 0x0d, 0x0a, 0xba, 0x9d, + 0xf5, 0x7f, 0x80, 0xc6, 0xd7, 0xbf, 0x29, 0xfb, 0xcc, 0x74, 0x00, 0x47, 0x00, 0x04, 0x29, 0xff, + 0xc6, 0xd4, 0xd6, 0x64, 0xe8, 0x67, 0x3e, 0x5c, 0xae, 0xbb, 0x4e, 0xb9, 0xee, 0x82, 0xf1, 0x97, + 0x8f, 0x56, 0xa1, 0x27, 0x14, 0xec, 0x81, 0x5a, 0xc2, 0x45, 0xe4, 0x55, 0x0c, 0xdd, 0xb2, 0x74, + 0xed, 0x13, 0x17, 0x11, 0x35, 0x4a, 0xff, 0xde, 0x05, 0xf5, 0x99, 0x48, 0x84, 0x2c, 0x04, 0x9c, + 0x81, 0x86, 0xb6, 0xdb, 0x4c, 0x7e, 0x73, 0xf4, 0x06, 0x3f, 0xf9, 0x83, 0xf1, 0xbe, 0x9c, 0xff, + 0xdc, 0x46, 0x1f, 0xea, 0xd2, 0x43, 0xd4, 0xfe, 0xbe, 0xca, 0xe5, 0x7d, 0x70, 0x0c, 0xda, 0xa1, + 0x14, 0x9a, 0x09, 0x3d, 0x15, 0xa1, 0x8c, 0xb8, 0x88, 0xbd, 0xaa, 0xa9, 0xfa, 0xd2, 0xe6, 0xb5, + 0x27, 0x8f, 0x65, 0x7a, 0xce, 0xc3, 0xf7, 0xa0, 0x69, 0x47, 0xdb, 0xd5, 0x5e, 0xcd, 0xd8, 0x5f, + 0x58, 0x7b, 0x73, 0x72, 0x94, 0xe8, 0x29, 0xe7, 0x0f, 0x96, 0x1b, 0xe4, 0xac, 0x36, 0xc8, 0xb9, + 0xd9, 0x20, 0xe7, 0x5f, 0x89, 0xdc, 0x65, 0x89, 0xdc, 0x55, 0x89, 0xdc, 0xdb, 0x12, 0xb9, 0xff, + 0xef, 0x90, 0xf3, 0xbd, 0x6e, 0x8f, 0x7c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x32, 0xc1, 0x73, 0x2d, + 0x94, 0x02, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/generated.proto b/vendor/k8s.io/kubernetes/pkg/runtime/generated.proto index 85272122..0e602abe 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/runtime/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -69,7 +69,7 @@ option go_package = "runtime"; // in the Object. (TODO: In the case where the object is of an unknown type, a // runtime.Unknown object will be created and stored.) // -// +gencopy=true +// +k8s:deepcopy-gen=true // +protobuf=true message RawExtension { // Raw is the underlying serialization of this object. @@ -89,7 +89,7 @@ message RawExtension { // TypeMeta is provided here for convenience. You may use it directly from this package or define // your own with the same fields. // -// +gencopy=true +// +k8s:deepcopy-gen=true // +protobuf=true message TypeMeta { optional string apiVersion = 1; @@ -103,7 +103,7 @@ message TypeMeta { // TODO: Make this object have easy access to field based accessors and settors for // metadata and field mutatation. // -// +gencopy=true +// +k8s:deepcopy-gen=true // +protobuf=true message Unknown { optional TypeMeta typeMeta = 1; diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/helper.go b/vendor/k8s.io/kubernetes/pkg/runtime/helper.go index 805305c5..2f8f161d 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/helper.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/helper.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -46,59 +46,6 @@ func UnsafeObjectConvertor(scheme *Scheme) ObjectConvertor { return unsafeObjectConvertor{scheme} } -// PreferredGroupVersion returns the desired group and version reported by the GroupVersioner, or -// false if no such group version was indicated. -func PreferredGroupVersion(target GroupVersioner) (unversioned.GroupVersion, bool) { - if group, ok := target.PrefersGroup(); ok { - if gv, ok := target.VersionForGroupKind(unversioned.GroupKind{Group: group}); ok { - return gv, true - } - } - return unversioned.GroupVersion{}, false -} - -var ( - InternalGroupVersioner GroupVersioner = internalGroupVersioner{} - DisabledGroupVersioner GroupVersioner = disabledGroupVersioner{} -) - -type internalGroupVersioner struct{} - -func (internalGroupVersioner) VersionForGroupKind(group unversioned.GroupKind) (unversioned.GroupVersion, bool) { - return unversioned.GroupVersion{Group: group.Group, Version: APIVersionInternal}, true -} - -func (internalGroupVersioner) PrefersGroup() (string, bool) { return "", false } - -type disabledGroupVersioner struct{} - -func (disabledGroupVersioner) VersionForGroupKind(group unversioned.GroupKind) (unversioned.GroupVersion, bool) { - return unversioned.GroupVersion{}, false -} - -func (disabledGroupVersioner) PrefersGroup() (string, bool) { return "", false } - -type GroupVersioners []GroupVersioner - -func (gvs GroupVersioners) VersionForGroupKind(group unversioned.GroupKind) (unversioned.GroupVersion, bool) { - for _, gv := range gvs { - if v, ok := gv.VersionForGroupKind(group); ok { - return v, true - } - } - return unversioned.GroupVersion{}, false -} - -func (gvs GroupVersioners) PrefersGroup() (string, bool) { - for _, gv := range gvs { - if g, ok := gv.PrefersGroup(); ok { - return g, true - } - } - return "", false - -} - // SetField puts the value of src, into fieldName, which must be a member of v. // The value of src must be assignable to the field. func SetField(src interface{}, v reflect.Value, fieldName string) error { diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/interfaces.go b/vendor/k8s.io/kubernetes/pkg/runtime/interfaces.go index e65580e6..07f77ca1 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/interfaces.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/interfaces.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,13 +30,13 @@ const ( APIVersionInternal = "__internal" ) -// GroupVersioner conveys information about a desired target version for objects being converted. +// GroupVersioner refines a set of possible conversion targets into a single option. type GroupVersioner interface { - // VersionForGroupKind returns the desired GroupVersion for a given group, or false if no version - // is preferred. The kind on the GroupKind is optional, and implementers may choose to ignore it. - VersionForGroupKind(group unversioned.GroupKind) (unversioned.GroupVersion, bool) - // PrefersGroup returns the preferred group for a conversion, or false if no group is preferred. - PrefersGroup() (string, bool) + // KindForGroupVersionKinds returns a desired target group version kind for the given input, or returns ok false if no + // target is known. In general, if the return target is not in the input list, the caller is expected to invoke + // Scheme.New(target) and then perform a conversion between the current Go type and the destination Go type. + // Sophisticated implementations may use additional information about the input kinds to pick a destination kind. + KindForGroupVersionKinds(kinds []unversioned.GroupVersionKind) (target unversioned.GroupVersionKind, ok bool) } // Encoders write objects to a serialized form diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/register.go b/vendor/k8s.io/kubernetes/pkg/runtime/register.go index 5201a15f..39a1eb14 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/register.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/scheme.go b/vendor/k8s.io/kubernetes/pkg/runtime/scheme.go index b43fd326..f5d3bd08 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/scheme.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/scheme.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -211,6 +211,11 @@ func (s *Scheme) KnownTypes(gv unversioned.GroupVersion) map[string]reflect.Type return types } +// AllKnownTypes returns the all known types. +func (s *Scheme) AllKnownTypes() map[unversioned.GroupVersionKind]reflect.Type { + return s.gvkToType +} + // ObjectKind returns the group,version,kind of the go object and true if this object // is considered unversioned, or an error if it's not a pointer or is unregistered. func (s *Scheme) ObjectKind(obj Object) (unversioned.GroupVersionKind, bool, error) { @@ -232,7 +237,7 @@ func (s *Scheme) ObjectKinds(obj Object) ([]unversioned.GroupVersionKind, bool, gvks, ok := s.typeToGVK[t] if !ok { - return nil, false, ¬RegisteredErr{t: t} + return nil, false, NewNotRegisteredErr(unversioned.GroupVersionKind{}, t) } _, unversionedType := s.unversionedTypes[t] @@ -270,7 +275,7 @@ func (s *Scheme) New(kind unversioned.GroupVersionKind) (Object, error) { if t, exists := s.unversionedKinds[kind.Kind]; exists { return reflect.New(t).Interface().(Object), nil } - return nil, ¬RegisteredErr{gvk: kind} + return nil, NewNotRegisteredErr(kind, nil) } // AddGenericConversionFunc adds a function that accepts the ConversionFunc call pattern @@ -357,9 +362,9 @@ func (s *Scheme) AddDeepCopyFuncs(deepCopyFuncs ...interface{}) error { // Similar to AddDeepCopyFuncs, but registers deep-copy functions that were // automatically generated. -func (s *Scheme) AddGeneratedDeepCopyFuncs(deepCopyFuncs ...interface{}) error { - for _, f := range deepCopyFuncs { - if err := s.cloner.RegisterGeneratedDeepCopyFunc(f); err != nil { +func (s *Scheme) AddGeneratedDeepCopyFuncs(deepCopyFuncs ...conversion.GeneratedDeepCopyFunc) error { + for _, fn := range deepCopyFuncs { + if err := s.cloner.RegisterGeneratedDeepCopyFunc(fn); err != nil { return err } } @@ -435,6 +440,8 @@ func (s *Scheme) DeepCopy(src interface{}) (interface{}, error) { // possible. You can call this with types that haven't been registered (for example, // a to test conversion of types that are nested within registered types). The // context interface is passed to the convertor. +// TODO: identify whether context should be hidden, or behind a formal context/scope +// interface func (s *Scheme) Convert(in, out interface{}, context interface{}) error { flags, meta := s.generateConvertMeta(in) meta.Context = context @@ -486,38 +493,31 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) ( } kinds, ok := s.typeToGVK[t] if !ok || len(kinds) == 0 { - return nil, ¬RegisteredErr{t: t} + return nil, NewNotRegisteredErr(unversioned.GroupVersionKind{}, t) } - // if the Go type is also registered to the destination kind, no conversion is necessary - if gv, ok := PreferredGroupVersion(target); ok { - for _, kind := range kinds { - if kind.Group == gv.Group && kind.Version == gv.Version { - return copyAndSetTargetKind(copy, s, in, kind) - } - } + gvk, ok := target.KindForGroupVersionKinds(kinds) + if !ok { + // TODO: should this be a typed error? + return nil, fmt.Errorf("%v is not suitable for converting to %q", t, target) } + + // target wants to use the existing type, set kind and return (no conversion necessary) for _, kind := range kinds { - if gv, ok := target.VersionForGroupKind(kind.GroupKind()); ok && kind.Version == gv.Version { - return copyAndSetTargetKind(copy, s, in, kind) + if gvk == kind { + return copyAndSetTargetKind(copy, s, in, gvk) } } // type is unversioned, no conversion necessary if unversionedKind, ok := s.unversionedTypes[t]; ok { - if desiredGV, ok := target.VersionForGroupKind(unversionedKind.GroupKind()); ok { - return copyAndSetTargetKind(copy, s, in, desiredGV.WithKind(unversionedKind.Kind)) + if gvk, ok := target.KindForGroupVersionKinds([]unversioned.GroupVersionKind{unversionedKind}); ok { + return copyAndSetTargetKind(copy, s, in, gvk) } return copyAndSetTargetKind(copy, s, in, unversionedKind) } - // allocate a new object as the target using the target kind - kind, ok := kindForGroupVersioner(kinds, target) - if !ok { - // TODO: should this be a typed error? - return nil, fmt.Errorf("%v is not suitable for converting to %q", t, target) - } - out, err := s.New(kind) + out, err := s.New(gvk) if err != nil { return nil, err } @@ -536,7 +536,7 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) ( return nil, err } - setTargetKind(out, kind) + setTargetKind(out, gvk) return out, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/scheme_builder.go b/vendor/k8s.io/kubernetes/pkg/runtime/scheme_builder.go new file mode 100644 index 00000000..944db481 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/runtime/scheme_builder.go @@ -0,0 +1,48 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package runtime + +// SchemeBuilder collects functions that add things to a scheme. It's to allow +// code to compile without explicitly referencing generated types. You should +// declare one in each package that will have generated deep copy or conversion +// functions. +type SchemeBuilder []func(*Scheme) error + +// AddToScheme applies all the stored functions to the scheme. A non-nil error +// indicates that one function failed and the attempt was abandoned. +func (sb *SchemeBuilder) AddToScheme(s *Scheme) error { + for _, f := range *sb { + if err := f(s); err != nil { + return err + } + } + return nil +} + +// Register adds a scheme setup function to the list. +func (sb *SchemeBuilder) Register(funcs ...func(*Scheme) error) { + for _, f := range funcs { + *sb = append(*sb, f) + } +} + +// NewSchemeBuilder calls Register for you. +func NewSchemeBuilder(funcs ...func(*Scheme) error) SchemeBuilder { + var sb SchemeBuilder + sb.Register(funcs...) + return sb +} diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/codec_factory.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/codec_factory.go index 0f651e65..afccae5a 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/codec_factory.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/codec_factory.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -186,11 +186,15 @@ func (f CodecFactory) SupportedStreamingMediaTypes() []string { return f.streamingAccepts } -// LegacyCodec encodes output to a given API version, and decodes output into the internal form from -// any recognized source. The returned codec will always encode output to JSON. +// LegacyCodec encodes output to a given API versions, and decodes output into the internal form from +// any recognized source. The returned codec will always encode output to JSON. If a type is not +// found in the list of versions an error will be returned. // // This method is deprecated - clients and servers should negotiate a serializer by mime-type and // invoke CodecForVersions. Callers that need only to read data should use UniversalDecoder(). +// +// TODO: make this call exist only in pkg/api, and initialize it with the set of default versions. +// All other callers will be forced to request a Codec directly. func (f CodecFactory) LegacyCodec(version ...unversioned.GroupVersion) runtime.Codec { return versioning.NewCodecForScheme(f.scheme, f.legacySerializer, f.universal, unversioned.GroupVersions(version), runtime.InternalGroupVersioner) } @@ -209,6 +213,7 @@ func (f CodecFactory) UniversalDeserializer() runtime.Decoder { // defaulting. // // TODO: the decoder will eventually be removed in favor of dealing with objects in their versioned form +// TODO: only accept a group versioner func (f CodecFactory) UniversalDecoder(versions ...unversioned.GroupVersion) runtime.Decoder { var versioner runtime.GroupVersioner if len(versions) == 0 { @@ -219,7 +224,7 @@ func (f CodecFactory) UniversalDecoder(versions ...unversioned.GroupVersion) run return f.CodecForVersions(nil, f.universal, nil, versioner) } -// CodecFor creates a codec with the provided serializer. If an object is decoded and its group is not in the list, +// CodecForVersions creates a codec with the provided serializer. If an object is decoded and its group is not in the list, // it will default to runtime.APIVersionInternal. If encode is not specified for an object's group, the object is not // converted. If encode or decode are nil, no conversion is performed. func (f CodecFactory) CodecForVersions(encoder runtime.Encoder, decoder runtime.Decoder, encode runtime.GroupVersioner, decode runtime.GroupVersioner) runtime.Codec { diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/json/json.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/json/json.go index c226448f..c83ed588 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/json/json.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/json/json.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/runtime/serializer/recognizer" "k8s.io/kubernetes/pkg/util/framer" utilyaml "k8s.io/kubernetes/pkg/util/yaml" ) @@ -63,6 +64,7 @@ type Serializer struct { // Serializer implements Serializer var _ runtime.Serializer = &Serializer{} +var _ recognizer.RecognizingDecoder = &Serializer{} // Decode attempts to convert the provided data into YAML or JSON, extract the stored schema kind, apply the provided default gvk, and then // load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, the raw data will be diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/json/meta.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/json/meta.go index 91df105e..b9bea21e 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/json/meta.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/json/meta.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/negotiated_codec.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/negotiated_codec.go index 8632e554..d8917725 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/negotiated_codec.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/negotiated_codec.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf/doc.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf/doc.go index 91b86af6..381748d6 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf/protobuf.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf/protobuf.go index a202a18d..5a6a50de 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf/protobuf.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf/protobuf.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/runtime/serializer/recognizer" "k8s.io/kubernetes/pkg/util/framer" ) @@ -76,6 +77,7 @@ type Serializer struct { } var _ runtime.Serializer = &Serializer{} +var _ recognizer.RecognizingDecoder = &Serializer{} // Decode attempts to convert the provided data into a protobuf message, extract the stored schema kind, apply the provided default // gvk, and then load that data into an object matching the desired schema kind or the provided into. If into is *runtime.Unknown, @@ -124,7 +126,7 @@ func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKi if intoUnknown, ok := into.(*runtime.Unknown); ok && intoUnknown != nil { *intoUnknown = unk - if len(intoUnknown.ContentType) == 0 { + if ok, _, _ := s.RecognizesData(bytes.NewBuffer(unk.Raw)); ok { intoUnknown.ContentType = s.contentType } return intoUnknown, &actual, nil @@ -167,17 +169,30 @@ func (s *Serializer) Decode(originalData []byte, gvk *unversioned.GroupVersionKi // Encode serializes the provided object to the given writer. func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error { - var unk runtime.Unknown - kind := obj.GetObjectKind().GroupVersionKind() - unk = runtime.Unknown{ - TypeMeta: runtime.TypeMeta{ - Kind: kind.Kind, - APIVersion: kind.GroupVersion().String(), - }, - } - prefixSize := uint64(len(s.prefix)) + var unk runtime.Unknown + switch t := obj.(type) { + case *runtime.Unknown: + estimatedSize := prefixSize + uint64(t.Size()) + data := make([]byte, estimatedSize) + i, err := t.MarshalTo(data[prefixSize:]) + if err != nil { + return err + } + copy(data, s.prefix) + _, err = w.Write(data[:prefixSize+uint64(i)]) + return err + default: + kind := obj.GetObjectKind().GroupVersionKind() + unk = runtime.Unknown{ + TypeMeta: runtime.TypeMeta{ + Kind: kind.Kind, + APIVersion: kind.GroupVersion().String(), + }, + } + } + switch t := obj.(type) { case bufferedMarshaller: // this path performs a single allocation during write but requires the caller to implement @@ -224,19 +239,19 @@ func (s *Serializer) Encode(obj runtime.Object, w io.Writer) error { } // RecognizesData implements the RecognizingDecoder interface. -func (s *Serializer) RecognizesData(peek io.Reader) (bool, error) { +func (s *Serializer) RecognizesData(peek io.Reader) (bool, bool, error) { prefix := make([]byte, 4) n, err := peek.Read(prefix) if err != nil { if err == io.EOF { - return false, nil + return false, false, nil } - return false, err + return false, false, err } if n != 4 { - return false, nil + return false, false, nil } - return bytes.Equal(s.prefix, prefix), nil + return bytes.Equal(s.prefix, prefix), false, nil } // copyKindDefaults defaults dst to the value in src if dst does not have a value set. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf_extension.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf_extension.go index a93708c4..5846d94d 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf_extension.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/protobuf_extension.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/recognizer/recognizer.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/recognizer/recognizer.go index 4b8b1e20..310002a2 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/recognizer/recognizer.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/recognizer/recognizer.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/streaming/streaming.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/streaming/streaming.go index c34f9a57..ac17138e 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/streaming/streaming.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/streaming/streaming.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/versioning/versioning.go b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/versioning/versioning.go index 3b767587..b3a165a5 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/serializer/versioning/versioning.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/serializer/versioning/versioning.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -137,21 +137,8 @@ func (c *codec) Decode(data []byte, defaultGVK *unversioned.GroupVersionKind, in // Encode ensures the provided object is output in the appropriate group and version, invoking // conversion if necessary. Unversioned objects (according to the ObjectTyper) are output as is. func (c *codec) Encode(obj runtime.Object, w io.Writer) error { - switch t := obj.(type) { - case *runtime.Unknown: - if gv, ok := runtime.PreferredGroupVersion(c.encodeVersion); ok { - t.APIVersion = gv.String() - } - return c.encoder.Encode(obj, w) - case *runtime.Unstructured: - if gv, ok := runtime.PreferredGroupVersion(c.encodeVersion); ok { - t.SetAPIVersion(gv.String()) - } - return c.encoder.Encode(obj, w) - case *runtime.UnstructuredList: - if gv, ok := runtime.PreferredGroupVersion(c.encodeVersion); ok { - t.SetAPIVersion(gv.String()) - } + switch obj.(type) { + case *runtime.Unknown, *runtime.Unstructured, *runtime.UnstructuredList: return c.encoder.Encode(obj, w) } @@ -182,7 +169,7 @@ func (c *codec) Encode(obj runtime.Object, w io.Writer) error { return err } - if e, ok := obj.(runtime.NestedObjectEncoder); ok { + if e, ok := out.(runtime.NestedObjectEncoder); ok { if err := e.EncodeNestedObjects(DirectEncoder{Encoder: c.encoder, ObjectTyper: c.typer}); err != nil { return err } @@ -195,6 +182,7 @@ func (c *codec) Encode(obj runtime.Object, w io.Writer) error { return err } +// DirectEncoder serializes an object and ensures the GVK is set. type DirectEncoder struct { runtime.Encoder runtime.ObjectTyper @@ -204,6 +192,9 @@ type DirectEncoder struct { func (e DirectEncoder) Encode(obj runtime.Object, stream io.Writer) error { gvks, _, err := e.ObjectTyper.ObjectKinds(obj) if err != nil { + if runtime.IsNotRegisteredError(err) { + return e.Encoder.Encode(obj, stream) + } return err } kind := obj.GetObjectKind() diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/swagger_doc_generator.go b/vendor/k8s.io/kubernetes/pkg/runtime/swagger_doc_generator.go index 19b8378a..29722d52 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/swagger_doc_generator.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/swagger_doc_generator.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/types.go b/vendor/k8s.io/kubernetes/pkg/runtime/types.go index e646d2af..960bbef9 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/types.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/types.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ limitations under the License. package runtime import ( + "bytes" "fmt" "github.com/golang/glog" @@ -40,7 +41,7 @@ import ( // TypeMeta is provided here for convenience. You may use it directly from this package or define // your own with the same fields. // -// +gencopy=true +// +k8s:deepcopy-gen=true // +protobuf=true type TypeMeta struct { APIVersion string `json:"apiVersion,omitempty" yaml:"apiVersion,omitempty" protobuf:"bytes,1,opt,name=apiVersion"` @@ -93,7 +94,7 @@ const ( // in the Object. (TODO: In the case where the object is of an unknown type, a // runtime.Unknown object will be created and stored.) // -// +gencopy=true +// +k8s:deepcopy-gen=true // +protobuf=true type RawExtension struct { // Raw is the underlying serialization of this object. @@ -111,7 +112,7 @@ type RawExtension struct { // TODO: Make this object have easy access to field based accessors and settors for // metadata and field mutatation. // -// +gencopy=true +// +k8s:deepcopy-gen=true // +protobuf=true type Unknown struct { TypeMeta `json:",inline" protobuf:"bytes,1,opt,name=typeMeta"` @@ -138,6 +139,21 @@ type Unstructured struct { Object map[string]interface{} } +// MarshalJSON ensures that the unstructured object produces proper +// JSON when passed to Go's standard JSON library. +func (u *Unstructured) MarshalJSON() ([]byte, error) { + var buf bytes.Buffer + err := UnstructuredJSONScheme.Encode(u, &buf) + return buf.Bytes(), err +} + +// UnmarshalJSON ensures that the unstructured object properly decodes +// JSON when passed to Go's standard JSON library. +func (u *Unstructured) UnmarshalJSON(b []byte) error { + _, _, err := UnstructuredJSONScheme.Decode(b, nil, u) + return err +} + func getNestedField(obj map[string]interface{}, fields ...string) interface{} { var val interface{} = obj for _, field := range fields { @@ -440,6 +456,14 @@ func (u *Unstructured) SetFinalizers(finalizers []string) { u.setNestedSlice(finalizers, "metadata", "finalizers") } +func (u *Unstructured) GetClusterName() string { + return getNestedString(u.Object, "metadata", "clusterName") +} + +func (u *Unstructured) SetClusterName(clusterName string) { + u.setNestedField(clusterName, "metadata", "clusterName") +} + // UnstructuredList allows lists that do not have Golang structs // registered to be manipulated generically. This can be used to deal // with the API lists from a plug-in. @@ -450,6 +474,21 @@ type UnstructuredList struct { Items []*Unstructured `json:"items"` } +// MarshalJSON ensures that the unstructured list object produces proper +// JSON when passed to Go's standard JSON library. +func (u *UnstructuredList) MarshalJSON() ([]byte, error) { + var buf bytes.Buffer + err := UnstructuredJSONScheme.Encode(u, &buf) + return buf.Bytes(), err +} + +// UnmarshalJSON ensures that the unstructured list object properly +// decodes JSON when passed to Go's standard JSON library. +func (u *UnstructuredList) UnmarshalJSON(b []byte) error { + _, _, err := UnstructuredJSONScheme.Decode(b, nil, u) + return err +} + func (u *UnstructuredList) setNestedField(value interface{}, fields ...string) { if u.Object == nil { u.Object = make(map[string]interface{}) diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/types_proto.go b/vendor/k8s.io/kubernetes/pkg/runtime/types_proto.go index 142dd05d..ead96ee0 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/types_proto.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/types_proto.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/unstructured.go b/vendor/k8s.io/kubernetes/pkg/runtime/unstructured.go index f454bcee..e14c8840 100644 --- a/vendor/k8s.io/kubernetes/pkg/runtime/unstructured.go +++ b/vendor/k8s.io/kubernetes/pkg/runtime/unstructured.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -95,6 +95,7 @@ func (s unstructuredJSONScheme) decode(data []byte) (Object, error) { err := s.decodeToUnstructured(data, unstruct) return unstruct, err } + func (s unstructuredJSONScheme) decodeInto(data []byte, obj Object) error { switch x := obj.(type) { case *Unstructured: @@ -102,10 +103,9 @@ func (s unstructuredJSONScheme) decodeInto(data []byte, obj Object) error { case *UnstructuredList: return s.decodeToList(data, x) case *VersionedObjects: - u := new(Unstructured) - err := s.decodeToUnstructured(data, u) + o, err := s.decode(data) if err == nil { - x.Objects = []Object{u} + x.Objects = []Object{o} } return err default: @@ -188,9 +188,13 @@ func (UnstructuredObjectConverter) Convert(in, out, context interface{}) error { } func (UnstructuredObjectConverter) ConvertToVersion(in Object, target GroupVersioner) (Object, error) { - if gv, ok := PreferredGroupVersion(target); ok { - kind := in.GetObjectKind().GroupVersionKind() - in.GetObjectKind().SetGroupVersionKind(gv.WithKind(kind.Kind)) + if kind := in.GetObjectKind().GroupVersionKind(); !kind.Empty() { + gvk, ok := target.KindForGroupVersionKinds([]unversioned.GroupVersionKind{kind}) + if !ok { + // TODO: should this be a typed error? + return nil, fmt.Errorf("%v is unstructured and is not suitable for converting to %q", kind, target) + } + in.GetObjectKind().SetGroupVersionKind(gvk) } return in, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/runtime/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/runtime/zz_generated.deepcopy.go new file mode 100644 index 00000000..627c22b6 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/runtime/zz_generated.deepcopy.go @@ -0,0 +1,75 @@ +// +build !ignore_autogenerated + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package runtime + +import ( + conversion "k8s.io/kubernetes/pkg/conversion" +) + +func DeepCopy_runtime_RawExtension(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*RawExtension) + out := out.(*RawExtension) + if in.Raw != nil { + in, out := &in.Raw, &out.Raw + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Raw = nil + } + if in.Object == nil { + out.Object = nil + } else if newVal, err := c.DeepCopy(&in.Object); err != nil { + return err + } else { + out.Object = *newVal.(*Object) + } + return nil + } +} + +func DeepCopy_runtime_TypeMeta(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*TypeMeta) + out := out.(*TypeMeta) + out.APIVersion = in.APIVersion + out.Kind = in.Kind + return nil + } +} + +func DeepCopy_runtime_Unknown(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*Unknown) + out := out.(*Unknown) + out.TypeMeta = in.TypeMeta + if in.Raw != nil { + in, out := &in.Raw, &out.Raw + *out = make([]byte, len(*in)) + copy(*out, *in) + } else { + out.Raw = nil + } + out.ContentEncoding = in.ContentEncoding + out.ContentType = in.ContentType + return nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/security/apparmor/helpers.go b/vendor/k8s.io/kubernetes/pkg/security/apparmor/helpers.go new file mode 100644 index 00000000..fa440d01 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/security/apparmor/helpers.go @@ -0,0 +1,62 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apparmor + +import ( + "strings" + + "k8s.io/kubernetes/pkg/api" +) + +// TODO: Move these values into the API package. +const ( + // The prefix to an annotation key specifying a container profile. + ContainerAnnotationKeyPrefix = "container.apparmor.security.beta.kubernetes.io/" + // The annotation key specifying the default AppArmor profile. + DefaultProfileAnnotationKey = "apparmor.security.beta.kubernetes.io/defaultProfileName" + // The annotation key specifying the allowed AppArmor profiles. + AllowedProfilesAnnotationKey = "apparmor.security.beta.kubernetes.io/allowedProfileNames" + + // The profile specifying the runtime default. + ProfileRuntimeDefault = "runtime/default" + // The prefix for specifying profiles loaded on the node. + ProfileNamePrefix = "localhost/" +) + +// Checks whether app armor is required for pod to be run. +func isRequired(pod *api.Pod) bool { + for key := range pod.Annotations { + if strings.HasPrefix(key, ContainerAnnotationKeyPrefix) { + return true + } + } + return false +} + +// Returns the name of the profile to use with the container. +func GetProfileName(pod *api.Pod, containerName string) string { + return pod.Annotations[ContainerAnnotationKeyPrefix+containerName] +} + +// Sets the name of the profile to use with the container. +func SetProfileName(pod *api.Pod, containerName, profileName string) error { + if pod.Annotations == nil { + pod.Annotations = map[string]string{} + } + pod.Annotations[ContainerAnnotationKeyPrefix+containerName] = profileName + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go b/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go new file mode 100644 index 00000000..79790c2a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go @@ -0,0 +1,227 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apparmor + +import ( + "bufio" + "errors" + "fmt" + "io/ioutil" + "os" + "path" + "strings" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/util" + utilconfig "k8s.io/kubernetes/pkg/util/config" +) + +// Whether AppArmor should be disabled by default. +// Set to true if the wrong build tags are set (see validate_disabled.go). +var isDisabledBuild bool + +// Interface for validating that a pod with with an AppArmor profile can be run by a Node. +type Validator interface { + Validate(pod *api.Pod) error + ValidateHost() error +} + +func NewValidator(runtime string) Validator { + if err := validateHost(runtime); err != nil { + return &validator{validateHostErr: err} + } + appArmorFS, err := getAppArmorFS() + if err != nil { + return &validator{ + validateHostErr: fmt.Errorf("error finding AppArmor FS: %v", err), + } + } + return &validator{ + appArmorFS: appArmorFS, + } +} + +type validator struct { + validateHostErr error + appArmorFS string +} + +func (v *validator) Validate(pod *api.Pod) error { + if !isRequired(pod) { + return nil + } + + if v.ValidateHost() != nil { + return v.validateHostErr + } + + loadedProfiles, err := v.getLoadedProfiles() + if err != nil { + return fmt.Errorf("could not read loaded profiles: %v", err) + } + + for _, container := range pod.Spec.InitContainers { + if err := validateProfile(GetProfileName(pod, container.Name), loadedProfiles); err != nil { + return err + } + } + for _, container := range pod.Spec.Containers { + if err := validateProfile(GetProfileName(pod, container.Name), loadedProfiles); err != nil { + return err + } + } + + return nil +} + +func (v *validator) ValidateHost() error { + return v.validateHostErr +} + +// Verify that the host and runtime is capable of enforcing AppArmor profiles. +func validateHost(runtime string) error { + // Check feature-gates + if !utilconfig.DefaultFeatureGate.AppArmor() { + return errors.New("AppArmor disabled by feature-gate") + } + + // Check build support. + if isDisabledBuild { + return errors.New("Binary not compiled for linux") + } + + // Check kernel support. + if !IsAppArmorEnabled() { + return errors.New("AppArmor is not enabled on the host") + } + + // Check runtime support. Currently only Docker is supported. + if runtime != "docker" { + return fmt.Errorf("AppArmor is only enabled for 'docker' runtime. Found: %q.", runtime) + } + + return nil +} + +// Verify that the profile is valid and loaded. +func validateProfile(profile string, loadedProfiles map[string]bool) error { + if err := ValidateProfileFormat(profile); err != nil { + return err + } + + if strings.HasPrefix(profile, ProfileNamePrefix) { + profileName := strings.TrimPrefix(profile, ProfileNamePrefix) + if !loadedProfiles[profileName] { + return fmt.Errorf("profile %q is not loaded", profileName) + } + } + + return nil +} + +func ValidateProfileFormat(profile string) error { + if profile == "" || profile == ProfileRuntimeDefault { + return nil + } + if !strings.HasPrefix(profile, ProfileNamePrefix) { + return fmt.Errorf("invalid AppArmor profile name: %q", profile) + } + return nil +} + +func (v *validator) getLoadedProfiles() (map[string]bool, error) { + profilesPath := path.Join(v.appArmorFS, "profiles") + profilesFile, err := os.Open(profilesPath) + if err != nil { + return nil, fmt.Errorf("failed to open %s: %v", profilesPath, err) + } + defer profilesFile.Close() + + profiles := map[string]bool{} + scanner := bufio.NewScanner(profilesFile) + for scanner.Scan() { + profileName := parseProfileName(scanner.Text()) + if profileName == "" { + // Unknown line format; skip it. + continue + } + profiles[profileName] = true + } + return profiles, nil +} + +// The profiles file is formatted with one profile per line, matching a form: +// namespace://profile-name (mode) +// profile-name (mode) +// Where mode is {enforce, complain, kill}. The "namespace://" is only included for namespaced +// profiles. For the purposes of Kubernetes, we consider the namespace part of the profile name. +func parseProfileName(profileLine string) string { + modeIndex := strings.IndexRune(profileLine, '(') + if modeIndex < 0 { + return "" + } + return strings.TrimSpace(profileLine[:modeIndex]) +} + +func getAppArmorFS() (string, error) { + mountsFile, err := os.Open("/proc/mounts") + if err != nil { + return "", fmt.Errorf("could not open /proc/mounts: %v", err) + } + defer mountsFile.Close() + + scanner := bufio.NewScanner(mountsFile) + for scanner.Scan() { + fields := strings.Fields(scanner.Text()) + if len(fields) < 3 { + // Unknown line format; skip it. + continue + } + if fields[2] == "securityfs" { + appArmorFS := path.Join(fields[1], "apparmor") + if ok, err := util.FileExists(appArmorFS); !ok { + msg := fmt.Sprintf("path %s does not exist", appArmorFS) + if err != nil { + return "", fmt.Errorf("%s: %v", msg, err) + } else { + return "", errors.New(msg) + } + } else { + return appArmorFS, nil + } + } + } + if err := scanner.Err(); err != nil { + return "", fmt.Errorf("error scanning mounts: %v", err) + } + + return "", errors.New("securityfs not found") +} + +// IsAppArmorEnabled returns true if apparmor is enabled for the host. +// This function is forked from +// https://github.com/opencontainers/runc/blob/1a81e9ab1f138c091fe5c86d0883f87716088527/libcontainer/apparmor/apparmor.go +// to avoid the libapparmor dependency. +func IsAppArmorEnabled() bool { + if _, err := os.Stat("/sys/kernel/security/apparmor"); err == nil && os.Getenv("container") == "" { + if _, err = os.Stat("/sbin/apparmor_parser"); err == nil { + buf, err := ioutil.ReadFile("/sys/module/apparmor/parameters/enabled") + return err == nil && len(buf) > 1 && buf[0] == 'Y' + } + } + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate_disabled.go b/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate_disabled.go new file mode 100644 index 00000000..875054a9 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate_disabled.go @@ -0,0 +1,24 @@ +// +build !linux + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package apparmor + +func init() { + // If Kubernetes was not built for linux, apparmor is always disabled. + isDisabledBuild = true +} diff --git a/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/doc.go b/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/doc.go new file mode 100644 index 00000000..af407b58 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package util contains utility code shared amongst different parts of the +// pod security policy apparatus. +package util diff --git a/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/util.go b/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/util.go index 097b1a6c..0b423b94 100644 --- a/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/util.go +++ b/vendor/k8s.io/kubernetes/pkg/security/podsecuritypolicy/util/util.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -58,7 +58,9 @@ func GetAllFSTypesAsSet() sets.String { string(extensions.DownwardAPI), string(extensions.FC), string(extensions.ConfigMap), - string(extensions.VsphereVolume)) + string(extensions.VsphereVolume), + string(extensions.Quobyte), + string(extensions.AzureDisk)) return fstypes } @@ -105,6 +107,10 @@ func GetVolumeFSType(v api.Volume) (extensions.FSType, error) { return extensions.ConfigMap, nil case v.VsphereVolume != nil: return extensions.VsphereVolume, nil + case v.Quobyte != nil: + return extensions.Quobyte, nil + case v.AzureDisk != nil: + return extensions.AzureDisk, nil } return "", fmt.Errorf("unknown volume type for volume: %#v", v) diff --git a/vendor/k8s.io/kubernetes/pkg/securitycontextconstraints/util/util.go b/vendor/k8s.io/kubernetes/pkg/securitycontextconstraints/util/util.go index 49e73b20..839d4924 100644 --- a/vendor/k8s.io/kubernetes/pkg/securitycontextconstraints/util/util.go +++ b/vendor/k8s.io/kubernetes/pkg/securitycontextconstraints/util/util.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -54,6 +54,8 @@ func GetAllFSTypesAsSet() sets.String { string(api.FSTypeFC), string(api.FSTypeConfigMap), string(api.FSTypeVsphereVolume), + string(api.FSTypeQuobyte), + string(api.FSTypeAzureDisk), ) return fstypes } @@ -101,6 +103,10 @@ func GetVolumeFSType(v api.Volume) (api.FSType, error) { return api.FSTypeConfigMap, nil case v.VsphereVolume != nil: return api.FSTypeVsphereVolume, nil + case v.Quobyte != nil: + return api.FSTypeQuobyte, nil + case v.AzureDisk != nil: + return api.FSTypeAzureDisk, nil } return "", fmt.Errorf("unknown volume type for volume: %#v", v) diff --git a/vendor/k8s.io/kubernetes/pkg/selection/operator.go b/vendor/k8s.io/kubernetes/pkg/selection/operator.go new file mode 100644 index 00000000..298f798c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/selection/operator.go @@ -0,0 +1,33 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package selection + +// Operator represents a key/field's relationship to value(s). +// See labels.Requirement and fields.Requirement for more details. +type Operator string + +const ( + DoesNotExist Operator = "!" + Equals Operator = "=" + DoubleEquals Operator = "==" + In Operator = "in" + NotEquals Operator = "!=" + NotIn Operator = "notin" + Exists Operator = "exists" + GreaterThan Operator = "gt" + LessThan Operator = "lt" +) diff --git a/vendor/k8s.io/kubernetes/pkg/serviceaccount/jwt.go b/vendor/k8s.io/kubernetes/pkg/serviceaccount/jwt.go index d26349d8..84792a88 100644 --- a/vendor/k8s.io/kubernetes/pkg/serviceaccount/jwt.go +++ b/vendor/k8s.io/kubernetes/pkg/serviceaccount/jwt.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -92,17 +92,19 @@ type jwtTokenGenerator struct { func (j *jwtTokenGenerator) GenerateToken(serviceAccount api.ServiceAccount, secret api.Secret) (string, error) { token := jwt.New(jwt.SigningMethodRS256) + claims, _ := token.Claims.(jwt.MapClaims) + // Identify the issuer - token.Claims[IssuerClaim] = Issuer + claims[IssuerClaim] = Issuer // Username - token.Claims[SubjectClaim] = MakeUsername(serviceAccount.Namespace, serviceAccount.Name) + claims[SubjectClaim] = MakeUsername(serviceAccount.Namespace, serviceAccount.Name) // Persist enough structured info for the authenticator to be able to look up the service account and secret - token.Claims[NamespaceClaim] = serviceAccount.Namespace - token.Claims[ServiceAccountNameClaim] = serviceAccount.Name - token.Claims[ServiceAccountUIDClaim] = serviceAccount.UID - token.Claims[SecretNameClaim] = secret.Name + claims[NamespaceClaim] = serviceAccount.Namespace + claims[ServiceAccountNameClaim] = serviceAccount.Name + claims[ServiceAccountUIDClaim] = serviceAccount.UID + claims[SecretNameClaim] = secret.Name // Sign and get the complete encoded token as a string return token.SignedString(j.key) @@ -156,30 +158,32 @@ func (j *jwtTokenAuthenticator) AuthenticateToken(token string) (user.Info, bool // If we get here, we have a token with a recognized signature + claims, _ := parsedToken.Claims.(jwt.MapClaims) + // Make sure we issued the token - iss, _ := parsedToken.Claims[IssuerClaim].(string) + iss, _ := claims[IssuerClaim].(string) if iss != Issuer { return nil, false, nil } // Make sure the claims we need exist - sub, _ := parsedToken.Claims[SubjectClaim].(string) + sub, _ := claims[SubjectClaim].(string) if len(sub) == 0 { return nil, false, errors.New("sub claim is missing") } - namespace, _ := parsedToken.Claims[NamespaceClaim].(string) + namespace, _ := claims[NamespaceClaim].(string) if len(namespace) == 0 { return nil, false, errors.New("namespace claim is missing") } - secretName, _ := parsedToken.Claims[SecretNameClaim].(string) + secretName, _ := claims[SecretNameClaim].(string) if len(namespace) == 0 { return nil, false, errors.New("secretName claim is missing") } - serviceAccountName, _ := parsedToken.Claims[ServiceAccountNameClaim].(string) + serviceAccountName, _ := claims[ServiceAccountNameClaim].(string) if len(serviceAccountName) == 0 { return nil, false, errors.New("serviceAccountName claim is missing") } - serviceAccountUID, _ := parsedToken.Claims[ServiceAccountUIDClaim].(string) + serviceAccountUID, _ := claims[ServiceAccountUIDClaim].(string) if len(serviceAccountUID) == 0 { return nil, false, errors.New("serviceAccountUID claim is missing") } diff --git a/vendor/k8s.io/kubernetes/pkg/serviceaccount/util.go b/vendor/k8s.io/kubernetes/pkg/serviceaccount/util.go index 487b0f15..712b086a 100644 --- a/vendor/k8s.io/kubernetes/pkg/serviceaccount/util.go +++ b/vendor/k8s.io/kubernetes/pkg/serviceaccount/util.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/storage/cacher.go b/vendor/k8s.io/kubernetes/pkg/storage/cacher.go index e7b4d63e..3e46fdd3 100644 --- a/vendor/k8s.io/kubernetes/pkg/storage/cacher.go +++ b/vendor/k8s.io/kubernetes/pkg/storage/cacher.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,14 +21,12 @@ import ( "net/http" "reflect" "strconv" - "strings" "sync" "time" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/meta" - "k8s.io/kubernetes/pkg/api/rest" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/conversion" @@ -60,9 +58,67 @@ type CacherConfig struct { // KeyFunc is used to get a key in the underyling storage for a given object. KeyFunc func(runtime.Object) (string, error) + // TriggerPublisherFunc is used for optimizing amount of watchers that + // needs to process an incoming event. + TriggerPublisherFunc TriggerPublisherFunc + // NewList is a function that creates new empty object storing a list of // objects of type Type. NewListFunc func() runtime.Object + + Codec runtime.Codec +} + +type watchersMap map[int]*cacheWatcher + +func (wm watchersMap) addWatcher(w *cacheWatcher, number int) { + wm[number] = w +} + +func (wm watchersMap) deleteWatcher(number int) { + delete(wm, number) +} + +func (wm watchersMap) terminateAll() { + for key, watcher := range wm { + delete(wm, key) + watcher.stop() + } +} + +type indexedWatchers struct { + allWatchers watchersMap + valueWatchers map[string]watchersMap +} + +func (i *indexedWatchers) addWatcher(w *cacheWatcher, number int, value string, supported bool) { + if supported { + if _, ok := i.valueWatchers[value]; !ok { + i.valueWatchers[value] = watchersMap{} + } + i.valueWatchers[value].addWatcher(w, number) + } else { + i.allWatchers.addWatcher(w, number) + } +} + +func (i *indexedWatchers) deleteWatcher(number int, value string, supported bool) { + if supported { + i.valueWatchers[value].deleteWatcher(number) + if len(i.valueWatchers[value]) == 0 { + delete(i.valueWatchers, value) + } + } else { + i.allWatchers.deleteWatcher(number) + } +} + +func (i *indexedWatchers) terminateAll() { + i.allWatchers.terminateAll() + for index, watchers := range i.valueWatchers { + watchers.terminateAll() + delete(i.valueWatchers, index) + } } // Cacher is responsible for serving WATCH and LIST requests for a given @@ -73,37 +129,41 @@ type CacherConfig struct { type Cacher struct { sync.RWMutex - // Each user-facing method that is not simply redirected to the underlying - // storage has to read-lock on this mutex before starting any processing. + // Before accessing the cacher's cache, wait for the ready to be ok. // This is necessary to prevent users from accessing structures that are // uninitialized or are being repopulated right now. - // NOTE: We cannot easily reuse the main mutex for it due to multi-threaded - // interactions of Cacher with the underlying WatchCache. Since Cacher is - // caling WatchCache directly and WatchCache is calling Cacher methods - // via its OnEvent and OnReplace hooks, we explicitly assume that if mutexes - // of both structures are held, the one from WatchCache is acquired first - // to avoid deadlocks. Unfortunately, forcing this rule in startCaching - // would be very difficult and introducing one more mutex seems to be much - // easier. - usable sync.RWMutex + // ready needs to be set to false when the cacher is paused or stopped. + // ready needs to be set to true when the cacher is ready to use after + // initialization. + ready *ready // Underlying storage.Interface. storage Interface + // Expected type of objects in the underlying cache. + objectType reflect.Type + // "sliding window" of recent changes of objects and the current state. watchCache *watchCache reflector *cache.Reflector - // Registered watchers. - watcherIdx int - watchers map[int]*cacheWatcher - // Versioner is used to handle resource versions. versioner Versioner // keyFunc is used to get a key in the underyling storage for a given object. keyFunc func(runtime.Object) (string, error) + // triggerFunc is used for optimizing amount of watchers that needs to process + // an incoming event. + triggerFunc TriggerPublisherFunc + // watchers is mapping from the value of trigger function that a + // watcher is interested into the watchers + watcherIdx int + watchers indexedWatchers + + // Incoming events that should be dispatched to watchers. + incoming chan watchCacheEvent + // Handling graceful termination. stopLock sync.RWMutex stopped bool @@ -111,37 +171,6 @@ type Cacher struct { stopWg sync.WaitGroup } -// Create a new Cacher responsible from service WATCH and LIST requests from its -// internal cache and updating its cache in the background based on the given -// configuration. -func NewCacher( - storage Interface, - capacity int, - versioner Versioner, - objectType runtime.Object, - resourcePrefix string, - scopeStrategy rest.NamespaceScopedStrategy, - newListFunc func() runtime.Object) Interface { - config := CacherConfig{ - CacheCapacity: capacity, - Storage: storage, - Versioner: versioner, - Type: objectType, - ResourcePrefix: resourcePrefix, - NewListFunc: newListFunc, - } - if scopeStrategy.NamespaceScoped() { - config.KeyFunc = func(obj runtime.Object) (string, error) { - return NamespaceKeyFunc(resourcePrefix, obj) - } - } else { - config.KeyFunc = func(obj runtime.Object) (string, error) { - return NoNamespaceKeyFunc(resourcePrefix, obj) - } - } - return NewCacherFromConfig(config) -} - // Create a new Cacher responsible from service WATCH and LIST requests from its // internal cache and updating its cache in the background based on the given // configuration. @@ -152,32 +181,36 @@ func NewCacherFromConfig(config CacherConfig) *Cacher { // Give this error when it is constructed rather than when you get the // first watch item, because it's much easier to track down that way. if obj, ok := config.Type.(runtime.Object); ok { - if err := runtime.CheckCodec(config.Storage.Codec(), obj); err != nil { + if err := runtime.CheckCodec(config.Codec, obj); err != nil { panic("storage codec doesn't seem to match given type: " + err.Error()) } } cacher := &Cacher{ - usable: sync.RWMutex{}, - storage: config.Storage, - watchCache: watchCache, - reflector: cache.NewReflector(listerWatcher, config.Type, watchCache, 0), - watcherIdx: 0, - watchers: make(map[int]*cacheWatcher), - versioner: config.Versioner, - keyFunc: config.KeyFunc, - stopped: false, + ready: newReady(), + storage: config.Storage, + objectType: reflect.TypeOf(config.Type), + watchCache: watchCache, + reflector: cache.NewReflector(listerWatcher, config.Type, watchCache, 0), + versioner: config.Versioner, + keyFunc: config.KeyFunc, + triggerFunc: config.TriggerPublisherFunc, + watcherIdx: 0, + watchers: indexedWatchers{ + allWatchers: make(map[int]*cacheWatcher), + valueWatchers: make(map[string]watchersMap), + }, + // TODO: Figure out the correct value for the buffer size. + incoming: make(chan watchCacheEvent, 100), // We need to (potentially) stop both: // - wait.Until go-routine // - reflector.ListAndWatch // and there are no guarantees on the order that they will stop. // So we will be simply closing the channel, and synchronizing on the WaitGroup. stopCh: make(chan struct{}), - stopWg: sync.WaitGroup{}, } - // See startCaching method for explanation and where this is unlocked. - cacher.usable.Lock() watchCache.SetOnEvent(cacher.processEvent) + go cacher.dispatchEvents() stopCh := cacher.stopCh cacher.stopWg.Add(1) @@ -204,11 +237,11 @@ func (c *Cacher) startCaching(stopChannel <-chan struct{}) { successfulList := false c.watchCache.SetOnReplace(func() { successfulList = true - c.usable.Unlock() + c.ready.set(true) }) defer func() { if successfulList { - c.usable.Lock() + c.ready.set(false) } }() @@ -222,11 +255,6 @@ func (c *Cacher) startCaching(stopChannel <-chan struct{}) { } } -// Implements storage.Interface. -func (c *Cacher) Backends(ctx context.Context) []string { - return c.storage.Backends(ctx) -} - // Implements storage.Interface. func (c *Cacher) Versioner() Versioner { return c.storage.Versioner() @@ -243,15 +271,13 @@ func (c *Cacher) Delete(ctx context.Context, key string, out runtime.Object, pre } // Implements storage.Interface. -func (c *Cacher) Watch(ctx context.Context, key string, resourceVersion string, filter FilterFunc) (watch.Interface, error) { +func (c *Cacher) Watch(ctx context.Context, key string, resourceVersion string, filter Filter) (watch.Interface, error) { watchRV, err := ParseWatchResourceVersion(resourceVersion) if err != nil { return nil, err } - // Do NOT allow Watch to start when the underlying structures are not propagated. - c.usable.RLock() - defer c.usable.RUnlock() + c.ready.wait() // We explicitly use thread unsafe version and do locking ourself to ensure that // no new events will be processed in the meantime. The watchCache will be unlocked @@ -268,16 +294,26 @@ func (c *Cacher) Watch(ctx context.Context, key string, resourceVersion string, return newErrWatcher(err), nil } + triggerValue, triggerSupported := "", false + // TODO: Currently we assume that in a given Cacher object, any that is + // passed here is aware of exactly the same trigger (at most one). + // Thus, either 0 or 1 values will be returned. + if matchValues := filter.Trigger(); len(matchValues) > 0 { + triggerValue, triggerSupported = matchValues[0].Value, true + } + c.Lock() defer c.Unlock() - watcher := newCacheWatcher(watchRV, initEvents, filterFunction(key, c.keyFunc, filter), forgetWatcher(c, c.watcherIdx)) - c.watchers[c.watcherIdx] = watcher + forget := forgetWatcher(c, c.watcherIdx, triggerValue, triggerSupported) + watcher := newCacheWatcher(watchRV, initEvents, filterFunction(key, c.keyFunc, filter), forget) + + c.watchers.addWatcher(watcher, c.watcherIdx, triggerValue, triggerSupported) c.watcherIdx++ return watcher, nil } // Implements storage.Interface. -func (c *Cacher) WatchList(ctx context.Context, key string, resourceVersion string, filter FilterFunc) (watch.Interface, error) { +func (c *Cacher) WatchList(ctx context.Context, key string, resourceVersion string, filter Filter) (watch.Interface, error) { return c.Watch(ctx, key, resourceVersion, filter) } @@ -287,12 +323,12 @@ func (c *Cacher) Get(ctx context.Context, key string, objPtr runtime.Object, ign } // Implements storage.Interface. -func (c *Cacher) GetToList(ctx context.Context, key string, filter FilterFunc, listObj runtime.Object) error { +func (c *Cacher) GetToList(ctx context.Context, key string, filter Filter, listObj runtime.Object) error { return c.storage.GetToList(ctx, key, filter, listObj) } // Implements storage.Interface. -func (c *Cacher) List(ctx context.Context, key string, resourceVersion string, filter FilterFunc, listObj runtime.Object) error { +func (c *Cacher) List(ctx context.Context, key string, resourceVersion string, filter Filter, listObj runtime.Object) error { if resourceVersion == "" { // If resourceVersion is not specified, serve it from underlying // storage (for backward compatibility). @@ -308,13 +344,7 @@ func (c *Cacher) List(ctx context.Context, key string, resourceVersion string, f return err } - // To avoid situation when List is processed before the underlying - // watchCache is propagated for the first time, we acquire and immediately - // release the 'usable' lock. - // We don't need to hold it all the time, because watchCache is thread-safe - // and it would complicate already very difficult locking pattern. - c.usable.RLock() - c.usable.RUnlock() + c.ready.wait() // List elements from cache, with at least 'listRV'. listPtr, err := meta.GetItemsPtr(listObj) @@ -336,7 +366,7 @@ func (c *Cacher) List(ctx context.Context, key string, resourceVersion string, f if !ok { return fmt.Errorf("non runtime.Object returned from storage: %v", obj) } - if filterFunc(object) { + if filterFunc.Filter(object) { listVal.Set(reflect.Append(listVal, reflect.ValueOf(object).Elem())) } } @@ -353,26 +383,93 @@ func (c *Cacher) GuaranteedUpdate(ctx context.Context, key string, ptrToType run return c.storage.GuaranteedUpdate(ctx, key, ptrToType, ignoreNotFound, preconditions, tryUpdate) } -// Implements storage.Interface. -func (c *Cacher) Codec() runtime.Codec { - return c.storage.Codec() +func (c *Cacher) triggerValues(event *watchCacheEvent) ([]string, bool) { + // TODO: Currently we assume that in a given Cacher object, its + // is aware of exactly the same trigger (at most one). Thus calling: + // c.triggerFunc() + // can return only 0 or 1 values. + // That means, that triggerValues itself may return up to 2 different values. + if c.triggerFunc == nil { + return nil, false + } + result := make([]string, 0, 2) + matchValues := c.triggerFunc(event.Object) + if len(matchValues) > 0 { + result = append(result, matchValues[0].Value) + } + if event.PrevObject == nil { + return result, len(result) > 0 + } + prevMatchValues := c.triggerFunc(event.PrevObject) + if len(prevMatchValues) > 0 { + if len(result) == 0 || result[0] != prevMatchValues[0].Value { + result = append(result, prevMatchValues[0].Value) + } + } + return result, len(result) > 0 } +// TODO: Most probably splitting this method to a separate thread will visibily +// improve throughput of our watch machinery. So what we should do is to: +// - OnEvent handler simply put an element to channel +// - processEvent be another goroutine processing events from that channel +// Additionally, if we make this channel buffered, cacher will be more resistant +// to single watchers being slow - see cacheWatcher::add method. func (c *Cacher) processEvent(event watchCacheEvent) { + c.incoming <- event +} + +func (c *Cacher) dispatchEvents() { + for { + select { + case event, ok := <-c.incoming: + if !ok { + return + } + c.dispatchEvent(&event) + case <-c.stopCh: + return + } + } +} + +func (c *Cacher) dispatchEvent(event *watchCacheEvent) { + triggerValues, supported := c.triggerValues(event) + c.Lock() defer c.Unlock() - for _, watcher := range c.watchers { + // Iterate over "allWatchers" no matter what the trigger function is. + for _, watcher := range c.watchers.allWatchers { watcher.add(event) } + if supported { + // Iterate over watchers interested in the given values of the trigger. + for _, triggerValue := range triggerValues { + for _, watcher := range c.watchers.valueWatchers[triggerValue] { + watcher.add(event) + } + } + } else { + // supported equal to false generally means that trigger function + // is not defined (or not aware of any indexes). In this case, + // watchers filters should generally also don't generate any + // trigger values, but can cause problems in case of some + // misconfiguration. Thus we paranoidly leave this branch. + + // Iterate over watchers interested in exact values for all values. + for _, watchers := range c.watchers.valueWatchers { + for _, watcher := range watchers { + watcher.add(event) + } + } + } } func (c *Cacher) terminateAllWatchers() { + glog.V(4).Infof("Terminating all watchers from cacher %v", c.objectType) c.Lock() defer c.Unlock() - for key, watcher := range c.watchers { - delete(c.watchers, key) - watcher.stop() - } + c.watchers.terminateAll() } func (c *Cacher) isStopped() bool { @@ -389,46 +486,42 @@ func (c *Cacher) Stop() { c.stopWg.Wait() } -func forgetWatcher(c *Cacher, index int) func(bool) { +func forgetWatcher(c *Cacher, index int, triggerValue string, triggerSupported bool) func(bool) { return func(lock bool) { if lock { c.Lock() defer c.Unlock() } - // It's possible that the watcher is already not in the map (e.g. in case of + // It's possible that the watcher is already not in the structure (e.g. in case of // simulaneous Stop() and terminateAllWatchers(), but it doesn't break anything. - delete(c.watchers, index) + c.watchers.deleteWatcher(index, triggerValue, triggerSupported) } } -func filterFunction(key string, keyFunc func(runtime.Object) (string, error), filter FilterFunc) FilterFunc { - return func(obj runtime.Object) bool { +func filterFunction(key string, keyFunc func(runtime.Object) (string, error), filter Filter) Filter { + filterFunc := func(obj runtime.Object) bool { objKey, err := keyFunc(obj) if err != nil { glog.Errorf("invalid object for filter: %v", obj) return false } - if !strings.HasPrefix(objKey, key) { + if !hasPathPrefix(objKey, key) { return false } - return filter(obj) + return filter.Filter(obj) } + return NewSimpleFilter(filterFunc, filter.Trigger) } // Returns resource version to which the underlying cache is synced. func (c *Cacher) LastSyncResourceVersion() (uint64, error) { - // To avoid situation when LastSyncResourceVersion is processed before the - // underlying watchCache is propagated, we acquire 'usable' lock. - c.usable.RLock() - defer c.usable.RUnlock() - - c.RLock() - defer c.RUnlock() + c.ready.wait() resourceVersion := c.reflector.LastSyncResourceVersion() if resourceVersion == "" { return 0, nil } + return strconv.ParseUint(resourceVersion, 10, 64) } @@ -506,12 +599,12 @@ type cacheWatcher struct { sync.Mutex input chan watchCacheEvent result chan watch.Event - filter FilterFunc + filter Filter stopped bool forget func(bool) } -func newCacheWatcher(resourceVersion uint64, initEvents []watchCacheEvent, filter FilterFunc, forget func(bool)) *cacheWatcher { +func newCacheWatcher(resourceVersion uint64, initEvents []watchCacheEvent, filter Filter, forget func(bool)) *cacheWatcher { watcher := &cacheWatcher{ input: make(chan watchCacheEvent, 10), result: make(chan watch.Event, 10), @@ -545,10 +638,10 @@ func (c *cacheWatcher) stop() { var timerPool sync.Pool -func (c *cacheWatcher) add(event watchCacheEvent) { +func (c *cacheWatcher) add(event *watchCacheEvent) { // Try to send the event immediately, without blocking. select { - case c.input <- event: + case c.input <- *event: return default: } @@ -556,6 +649,7 @@ func (c *cacheWatcher) add(event watchCacheEvent) { // OK, block sending, but only for up to 5 seconds. // cacheWatcher.add is called very often, so arrange // to reuse timers instead of constantly allocating. + startTime := time.Now() const timeout = 5 * time.Second t, ok := timerPool.Get().(*time.Timer) if ok { @@ -566,7 +660,7 @@ func (c *cacheWatcher) add(event watchCacheEvent) { defer timerPool.Put(t) select { - case c.input <- event: + case c.input <- *event: stopped := t.Stop() if !stopped { // Consume triggered (but not yet received) timer event @@ -580,13 +674,14 @@ func (c *cacheWatcher) add(event watchCacheEvent) { c.forget(false) c.stop() } + glog.V(2).Infof("cacheWatcher add function blocked processing for %v", time.Since(startTime)) } func (c *cacheWatcher) sendWatchCacheEvent(event watchCacheEvent) { - curObjPasses := event.Type != watch.Deleted && c.filter(event.Object) + curObjPasses := event.Type != watch.Deleted && c.filter.Filter(event.Object) oldObjPasses := false if event.PrevObject != nil { - oldObjPasses = c.filter(event.PrevObject) + oldObjPasses = c.filter.Filter(event.PrevObject) } if !curObjPasses && !oldObjPasses { // Watcher is not interested in that object. @@ -627,3 +722,27 @@ func (c *cacheWatcher) process(initEvents []watchCacheEvent, resourceVersion uin } } } + +type ready struct { + ok bool + c *sync.Cond +} + +func newReady() *ready { + return &ready{c: sync.NewCond(&sync.Mutex{})} +} + +func (r *ready) wait() { + r.c.L.Lock() + for !r.ok { + r.c.Wait() + } + r.c.L.Unlock() +} + +func (r *ready) set(ok bool) { + r.c.L.Lock() + defer r.c.L.Unlock() + r.ok = ok + r.c.Broadcast() +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/doc.go b/vendor/k8s.io/kubernetes/pkg/storage/doc.go index dca0d5b7..d2c5dbfc 100644 --- a/vendor/k8s.io/kubernetes/pkg/storage/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/storage/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/storage/errors.go b/vendor/k8s.io/kubernetes/pkg/storage/errors.go index 61b3cba5..7c1fbb50 100644 --- a/vendor/k8s.io/kubernetes/pkg/storage/errors.go +++ b/vendor/k8s.io/kubernetes/pkg/storage/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -107,24 +107,20 @@ func IsUnreachable(err error) bool { // IsTestFailed returns true if and only if err is a write conflict. func IsTestFailed(err error) bool { - return isErrCode(err, ErrCodeResourceVersionConflicts, ErrCodeInvalidObj) + return isErrCode(err, ErrCodeResourceVersionConflicts) } -// IsInvalidUID returns true if and only if err is invalid UID error +// IsInvalidObj returns true if and only if err is invalid error func IsInvalidObj(err error) bool { return isErrCode(err, ErrCodeInvalidObj) } -func isErrCode(err error, codes ...int) bool { +func isErrCode(err error, code int) bool { if err == nil { return false } if e, ok := err.(*StorageError); ok { - for _, code := range codes { - if e.Code == code { - return true - } - } + return e.Code == code } return false } diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd/api_object_versioner.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd/api_object_versioner.go new file mode 100644 index 00000000..59839b93 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd/api_object_versioner.go @@ -0,0 +1,98 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd + +import ( + "strconv" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/storage" +) + +// APIObjectVersioner implements versioning and extracting etcd node information +// for objects that have an embedded ObjectMeta or ListMeta field. +type APIObjectVersioner struct{} + +// UpdateObject implements Versioner +func (a APIObjectVersioner) UpdateObject(obj runtime.Object, resourceVersion uint64) error { + accessor, err := meta.Accessor(obj) + if err != nil { + return err + } + versionString := "" + if resourceVersion != 0 { + versionString = strconv.FormatUint(resourceVersion, 10) + } + accessor.SetResourceVersion(versionString) + return nil +} + +// UpdateList implements Versioner +func (a APIObjectVersioner) UpdateList(obj runtime.Object, resourceVersion uint64) error { + listMeta, err := api.ListMetaFor(obj) + if err != nil || listMeta == nil { + return err + } + versionString := "" + if resourceVersion != 0 { + versionString = strconv.FormatUint(resourceVersion, 10) + } + listMeta.ResourceVersion = versionString + return nil +} + +// ObjectResourceVersion implements Versioner +func (a APIObjectVersioner) ObjectResourceVersion(obj runtime.Object) (uint64, error) { + accessor, err := meta.Accessor(obj) + if err != nil { + return 0, err + } + version := accessor.GetResourceVersion() + if len(version) == 0 { + return 0, nil + } + return strconv.ParseUint(version, 10, 64) +} + +// APIObjectVersioner implements Versioner +var Versioner storage.Versioner = APIObjectVersioner{} + +// CompareResourceVersion compares etcd resource versions. Outside this API they are all strings, +// but etcd resource versions are special, they're actually ints, so we can easily compare them. +func (a APIObjectVersioner) CompareResourceVersion(lhs, rhs runtime.Object) int { + lhsVersion, err := Versioner.ObjectResourceVersion(lhs) + if err != nil { + // coder error + panic(err) + } + rhsVersion, err := Versioner.ObjectResourceVersion(rhs) + if err != nil { + // coder error + panic(err) + } + + if lhsVersion == rhsVersion { + return 0 + } + if lhsVersion < rhsVersion { + return -1 + } + + return 1 +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd/doc.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd/doc.go new file mode 100644 index 00000000..73e2f50c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd/doc.go @@ -0,0 +1,17 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd/etcd_helper.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd/etcd_helper.go new file mode 100644 index 00000000..523d50b1 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd/etcd_helper.go @@ -0,0 +1,616 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd + +import ( + "errors" + "fmt" + "path" + "reflect" + "strings" + "time" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/conversion" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/storage" + "k8s.io/kubernetes/pkg/storage/etcd/metrics" + etcdutil "k8s.io/kubernetes/pkg/storage/etcd/util" + "k8s.io/kubernetes/pkg/util" + utilcache "k8s.io/kubernetes/pkg/util/cache" + "k8s.io/kubernetes/pkg/watch" + + etcd "github.com/coreos/etcd/client" + "github.com/golang/glog" + "golang.org/x/net/context" +) + +// Creates a new storage interface from the client +// TODO: deprecate in favor of storage.Config abstraction over time +func NewEtcdStorage(client etcd.Client, codec runtime.Codec, prefix string, quorum bool, cacheSize int) storage.Interface { + return &etcdHelper{ + etcdMembersAPI: etcd.NewMembersAPI(client), + etcdKeysAPI: etcd.NewKeysAPI(client), + codec: codec, + versioner: APIObjectVersioner{}, + copier: api.Scheme, + pathPrefix: path.Join("/", prefix), + quorum: quorum, + cache: utilcache.NewCache(cacheSize), + } +} + +// etcdHelper is the reference implementation of storage.Interface. +type etcdHelper struct { + etcdMembersAPI etcd.MembersAPI + etcdKeysAPI etcd.KeysAPI + codec runtime.Codec + copier runtime.ObjectCopier + // Note that versioner is required for etcdHelper to work correctly. + // The public constructors (NewStorage & NewEtcdStorage) are setting it + // correctly, so be careful when manipulating with it manually. + // optional, has to be set to perform any atomic operations + versioner storage.Versioner + // prefix for all etcd keys + pathPrefix string + // if true, perform quorum read + quorum bool + + // We cache objects stored in etcd. For keys we use Node.ModifiedIndex which is equivalent + // to resourceVersion. + // This depends on etcd's indexes being globally unique across all objects/types. This will + // have to revisited if we decide to do things like multiple etcd clusters, or etcd will + // support multi-object transaction that will result in many objects with the same index. + // Number of entries stored in the cache is controlled by maxEtcdCacheEntries constant. + // TODO: Measure how much this cache helps after the conversion code is optimized. + cache utilcache.Cache +} + +func init() { + metrics.Register() +} + +// Implements storage.Interface. +func (h *etcdHelper) Versioner() storage.Versioner { + return h.versioner +} + +// Implements storage.Interface. +func (h *etcdHelper) Create(ctx context.Context, key string, obj, out runtime.Object, ttl uint64) error { + trace := util.NewTrace("etcdHelper::Create " + getTypeName(obj)) + defer trace.LogIfLong(250 * time.Millisecond) + if ctx == nil { + glog.Errorf("Context is nil") + } + key = h.prefixEtcdKey(key) + data, err := runtime.Encode(h.codec, obj) + trace.Step("Object encoded") + if err != nil { + return err + } + if version, err := h.versioner.ObjectResourceVersion(obj); err == nil && version != 0 { + return errors.New("resourceVersion may not be set on objects to be created") + } + trace.Step("Version checked") + + startTime := time.Now() + opts := etcd.SetOptions{ + TTL: time.Duration(ttl) * time.Second, + PrevExist: etcd.PrevNoExist, + } + response, err := h.etcdKeysAPI.Set(ctx, key, string(data), &opts) + trace.Step("Object created") + metrics.RecordEtcdRequestLatency("create", getTypeName(obj), startTime) + if err != nil { + return toStorageErr(err, key, 0) + } + if out != nil { + if _, err := conversion.EnforcePtr(out); err != nil { + panic("unable to convert output object to pointer") + } + _, _, err = h.extractObj(response, err, out, false, false) + } + return err +} + +func checkPreconditions(key string, preconditions *storage.Preconditions, out runtime.Object) error { + if preconditions == nil { + return nil + } + objMeta, err := api.ObjectMetaFor(out) + if err != nil { + return storage.NewInternalErrorf("can't enforce preconditions %v on un-introspectable object %v, got error: %v", *preconditions, out, err) + } + if preconditions.UID != nil && *preconditions.UID != objMeta.UID { + errMsg := fmt.Sprintf("Precondition failed: UID in precondition: %v, UID in object meta: %v", preconditions.UID, objMeta.UID) + return storage.NewInvalidObjError(key, errMsg) + } + return nil +} + +// Implements storage.Interface. +func (h *etcdHelper) Delete(ctx context.Context, key string, out runtime.Object, preconditions *storage.Preconditions) error { + if ctx == nil { + glog.Errorf("Context is nil") + } + key = h.prefixEtcdKey(key) + v, err := conversion.EnforcePtr(out) + if err != nil { + panic("unable to convert output object to pointer") + } + + if preconditions == nil { + startTime := time.Now() + response, err := h.etcdKeysAPI.Delete(ctx, key, nil) + metrics.RecordEtcdRequestLatency("delete", getTypeName(out), startTime) + if !etcdutil.IsEtcdNotFound(err) { + // if the object that existed prior to the delete is returned by etcd, update the out object. + if err != nil || response.PrevNode != nil { + _, _, err = h.extractObj(response, err, out, false, true) + } + } + return toStorageErr(err, key, 0) + } + + // Check the preconditions match. + obj := reflect.New(v.Type()).Interface().(runtime.Object) + for { + _, node, res, err := h.bodyAndExtractObj(ctx, key, obj, false) + if err != nil { + return toStorageErr(err, key, 0) + } + if err := checkPreconditions(key, preconditions, obj); err != nil { + return toStorageErr(err, key, 0) + } + index := uint64(0) + if node != nil { + index = node.ModifiedIndex + } else if res != nil { + index = res.Index + } + opt := etcd.DeleteOptions{PrevIndex: index} + startTime := time.Now() + response, err := h.etcdKeysAPI.Delete(ctx, key, &opt) + metrics.RecordEtcdRequestLatency("delete", getTypeName(out), startTime) + if etcdutil.IsEtcdTestFailed(err) { + glog.Infof("deletion of %s failed because of a conflict, going to retry", key) + } else { + if !etcdutil.IsEtcdNotFound(err) { + // if the object that existed prior to the delete is returned by etcd, update the out object. + if err != nil || response.PrevNode != nil { + _, _, err = h.extractObj(response, err, out, false, true) + } + } + return toStorageErr(err, key, 0) + } + } +} + +// Implements storage.Interface. +func (h *etcdHelper) Watch(ctx context.Context, key string, resourceVersion string, filter storage.Filter) (watch.Interface, error) { + if ctx == nil { + glog.Errorf("Context is nil") + } + watchRV, err := storage.ParseWatchResourceVersion(resourceVersion) + if err != nil { + return nil, err + } + key = h.prefixEtcdKey(key) + w := newEtcdWatcher(false, h.quorum, nil, filter, h.codec, h.versioner, nil, h) + go w.etcdWatch(ctx, h.etcdKeysAPI, key, watchRV) + return w, nil +} + +// Implements storage.Interface. +func (h *etcdHelper) WatchList(ctx context.Context, key string, resourceVersion string, filter storage.Filter) (watch.Interface, error) { + if ctx == nil { + glog.Errorf("Context is nil") + } + watchRV, err := storage.ParseWatchResourceVersion(resourceVersion) + if err != nil { + return nil, err + } + key = h.prefixEtcdKey(key) + w := newEtcdWatcher(true, h.quorum, exceptKey(key), filter, h.codec, h.versioner, nil, h) + go w.etcdWatch(ctx, h.etcdKeysAPI, key, watchRV) + return w, nil +} + +// Implements storage.Interface. +func (h *etcdHelper) Get(ctx context.Context, key string, objPtr runtime.Object, ignoreNotFound bool) error { + if ctx == nil { + glog.Errorf("Context is nil") + } + key = h.prefixEtcdKey(key) + _, _, _, err := h.bodyAndExtractObj(ctx, key, objPtr, ignoreNotFound) + return err +} + +// bodyAndExtractObj performs the normal Get path to etcd, returning the parsed node and response for additional information +// about the response, like the current etcd index and the ttl. +func (h *etcdHelper) bodyAndExtractObj(ctx context.Context, key string, objPtr runtime.Object, ignoreNotFound bool) (body string, node *etcd.Node, res *etcd.Response, err error) { + if ctx == nil { + glog.Errorf("Context is nil") + } + startTime := time.Now() + + opts := &etcd.GetOptions{ + Quorum: h.quorum, + } + + response, err := h.etcdKeysAPI.Get(ctx, key, opts) + metrics.RecordEtcdRequestLatency("get", getTypeName(objPtr), startTime) + if err != nil && !etcdutil.IsEtcdNotFound(err) { + return "", nil, nil, toStorageErr(err, key, 0) + } + body, node, err = h.extractObj(response, err, objPtr, ignoreNotFound, false) + return body, node, response, toStorageErr(err, key, 0) +} + +func (h *etcdHelper) extractObj(response *etcd.Response, inErr error, objPtr runtime.Object, ignoreNotFound, prevNode bool) (body string, node *etcd.Node, err error) { + if response != nil { + if prevNode { + node = response.PrevNode + } else { + node = response.Node + } + } + if inErr != nil || node == nil || len(node.Value) == 0 { + if ignoreNotFound { + v, err := conversion.EnforcePtr(objPtr) + if err != nil { + return "", nil, err + } + v.Set(reflect.Zero(v.Type())) + return "", nil, nil + } else if inErr != nil { + return "", nil, inErr + } + return "", nil, fmt.Errorf("unable to locate a value on the response: %#v", response) + } + body = node.Value + out, gvk, err := h.codec.Decode([]byte(body), nil, objPtr) + if err != nil { + return body, nil, err + } + if out != objPtr { + return body, nil, fmt.Errorf("unable to decode object %s into %v", gvk.String(), reflect.TypeOf(objPtr)) + } + // being unable to set the version does not prevent the object from being extracted + _ = h.versioner.UpdateObject(objPtr, node.ModifiedIndex) + return body, node, err +} + +// Implements storage.Interface. +func (h *etcdHelper) GetToList(ctx context.Context, key string, filter storage.Filter, listObj runtime.Object) error { + if ctx == nil { + glog.Errorf("Context is nil") + } + trace := util.NewTrace("GetToList " + getTypeName(listObj)) + listPtr, err := meta.GetItemsPtr(listObj) + if err != nil { + return err + } + key = h.prefixEtcdKey(key) + startTime := time.Now() + trace.Step("About to read etcd node") + + opts := &etcd.GetOptions{ + Quorum: h.quorum, + } + response, err := h.etcdKeysAPI.Get(ctx, key, opts) + trace.Step("Etcd node read") + metrics.RecordEtcdRequestLatency("get", getTypeName(listPtr), startTime) + if err != nil { + if etcdutil.IsEtcdNotFound(err) { + return nil + } + return toStorageErr(err, key, 0) + } + + nodes := make([]*etcd.Node, 0) + nodes = append(nodes, response.Node) + + if err := h.decodeNodeList(nodes, filter, listPtr); err != nil { + return err + } + trace.Step("Object decoded") + if err := h.versioner.UpdateList(listObj, response.Index); err != nil { + return err + } + return nil +} + +// decodeNodeList walks the tree of each node in the list and decodes into the specified object +func (h *etcdHelper) decodeNodeList(nodes []*etcd.Node, filter storage.Filter, slicePtr interface{}) error { + trace := util.NewTrace("decodeNodeList " + getTypeName(slicePtr)) + defer trace.LogIfLong(400 * time.Millisecond) + v, err := conversion.EnforcePtr(slicePtr) + if err != nil || v.Kind() != reflect.Slice { + // This should not happen at runtime. + panic("need ptr to slice") + } + for _, node := range nodes { + if node.Dir { + trace.Step("Decoding dir " + node.Key + " START") + if err := h.decodeNodeList(node.Nodes, filter, slicePtr); err != nil { + return err + } + trace.Step("Decoding dir " + node.Key + " END") + continue + } + if obj, found := h.getFromCache(node.ModifiedIndex, filter); found { + // obj != nil iff it matches the filter function. + if obj != nil { + v.Set(reflect.Append(v, reflect.ValueOf(obj).Elem())) + } + } else { + obj, _, err := h.codec.Decode([]byte(node.Value), nil, reflect.New(v.Type().Elem()).Interface().(runtime.Object)) + if err != nil { + return err + } + // being unable to set the version does not prevent the object from being extracted + _ = h.versioner.UpdateObject(obj, node.ModifiedIndex) + if filter.Filter(obj) { + v.Set(reflect.Append(v, reflect.ValueOf(obj).Elem())) + } + if node.ModifiedIndex != 0 { + h.addToCache(node.ModifiedIndex, obj) + } + } + } + trace.Step(fmt.Sprintf("Decoded %v nodes", len(nodes))) + return nil +} + +// Implements storage.Interface. +func (h *etcdHelper) List(ctx context.Context, key string, resourceVersion string, filter storage.Filter, listObj runtime.Object) error { + if ctx == nil { + glog.Errorf("Context is nil") + } + trace := util.NewTrace("List " + getTypeName(listObj)) + defer trace.LogIfLong(400 * time.Millisecond) + listPtr, err := meta.GetItemsPtr(listObj) + if err != nil { + return err + } + key = h.prefixEtcdKey(key) + startTime := time.Now() + trace.Step("About to list etcd node") + nodes, index, err := h.listEtcdNode(ctx, key) + trace.Step("Etcd node listed") + metrics.RecordEtcdRequestLatency("list", getTypeName(listPtr), startTime) + if err != nil { + return err + } + if err := h.decodeNodeList(nodes, filter, listPtr); err != nil { + return err + } + trace.Step("Node list decoded") + if err := h.versioner.UpdateList(listObj, index); err != nil { + return err + } + return nil +} + +func (h *etcdHelper) listEtcdNode(ctx context.Context, key string) ([]*etcd.Node, uint64, error) { + if ctx == nil { + glog.Errorf("Context is nil") + } + opts := etcd.GetOptions{ + Recursive: true, + Sort: true, + Quorum: h.quorum, + } + result, err := h.etcdKeysAPI.Get(ctx, key, &opts) + if err != nil { + var index uint64 + if etcdError, ok := err.(etcd.Error); ok { + index = etcdError.Index + } + nodes := make([]*etcd.Node, 0) + if etcdutil.IsEtcdNotFound(err) { + return nodes, index, nil + } else { + return nodes, index, toStorageErr(err, key, 0) + } + } + return result.Node.Nodes, result.Index, nil +} + +// Implements storage.Interface. +func (h *etcdHelper) GuaranteedUpdate(ctx context.Context, key string, ptrToType runtime.Object, ignoreNotFound bool, preconditions *storage.Preconditions, tryUpdate storage.UpdateFunc) error { + if ctx == nil { + glog.Errorf("Context is nil") + } + v, err := conversion.EnforcePtr(ptrToType) + if err != nil { + // Panic is appropriate, because this is a programming error. + panic("need ptr to type") + } + key = h.prefixEtcdKey(key) + for { + obj := reflect.New(v.Type()).Interface().(runtime.Object) + origBody, node, res, err := h.bodyAndExtractObj(ctx, key, obj, ignoreNotFound) + if err != nil { + return toStorageErr(err, key, 0) + } + if err := checkPreconditions(key, preconditions, obj); err != nil { + return toStorageErr(err, key, 0) + } + meta := storage.ResponseMeta{} + if node != nil { + meta.TTL = node.TTL + meta.ResourceVersion = node.ModifiedIndex + } + // Get the object to be written by calling tryUpdate. + ret, newTTL, err := tryUpdate(obj, meta) + if err != nil { + return toStorageErr(err, key, 0) + } + + index := uint64(0) + ttl := uint64(0) + if node != nil { + index = node.ModifiedIndex + if node.TTL != 0 { + ttl = uint64(node.TTL) + } + if node.Expiration != nil && ttl == 0 { + ttl = 1 + } + } else if res != nil { + index = res.Index + } + + if newTTL != nil { + if ttl != 0 && *newTTL == 0 { + // TODO: remove this after we have verified this is no longer an issue + glog.V(4).Infof("GuaranteedUpdate is clearing TTL for %q, may not be intentional", key) + } + ttl = *newTTL + } + + // Since update object may have a resourceVersion set, we need to clear it here. + if err := h.versioner.UpdateObject(ret, 0); err != nil { + return errors.New("resourceVersion cannot be set on objects store in etcd") + } + + data, err := runtime.Encode(h.codec, ret) + if err != nil { + return err + } + + // First time this key has been used, try creating new value. + if index == 0 { + startTime := time.Now() + opts := etcd.SetOptions{ + TTL: time.Duration(ttl) * time.Second, + PrevExist: etcd.PrevNoExist, + } + response, err := h.etcdKeysAPI.Set(ctx, key, string(data), &opts) + metrics.RecordEtcdRequestLatency("create", getTypeName(ptrToType), startTime) + if etcdutil.IsEtcdNodeExist(err) { + continue + } + _, _, err = h.extractObj(response, err, ptrToType, false, false) + return toStorageErr(err, key, 0) + } + + if string(data) == origBody { + // If we don't send an update, we simply return the currently existing + // version of the object. + _, _, err := h.extractObj(res, nil, ptrToType, ignoreNotFound, false) + return err + } + + startTime := time.Now() + // Swap origBody with data, if origBody is the latest etcd data. + opts := etcd.SetOptions{ + PrevValue: origBody, + PrevIndex: index, + TTL: time.Duration(ttl) * time.Second, + } + response, err := h.etcdKeysAPI.Set(ctx, key, string(data), &opts) + metrics.RecordEtcdRequestLatency("compareAndSwap", getTypeName(ptrToType), startTime) + if etcdutil.IsEtcdTestFailed(err) { + // Try again. + continue + } + _, _, err = h.extractObj(response, err, ptrToType, false, false) + return toStorageErr(err, key, int64(index)) + } +} + +func (h *etcdHelper) prefixEtcdKey(key string) string { + if strings.HasPrefix(key, h.pathPrefix) { + return key + } + return path.Join(h.pathPrefix, key) +} + +// etcdCache defines interface used for caching objects stored in etcd. Objects are keyed by +// their Node.ModifiedIndex, which is unique across all types. +// All implementations must be thread-safe. +type etcdCache interface { + getFromCache(index uint64, filter storage.Filter) (runtime.Object, bool) + addToCache(index uint64, obj runtime.Object) +} + +func getTypeName(obj interface{}) string { + return reflect.TypeOf(obj).String() +} + +func (h *etcdHelper) getFromCache(index uint64, filter storage.Filter) (runtime.Object, bool) { + startTime := time.Now() + defer func() { + metrics.ObserveGetCache(startTime) + }() + obj, found := h.cache.Get(index) + if found { + if !filter.Filter(obj.(runtime.Object)) { + return nil, true + } + // We should not return the object itself to avoid polluting the cache if someone + // modifies returned values. + objCopy, err := h.copier.Copy(obj.(runtime.Object)) + if err != nil { + glog.Errorf("Error during DeepCopy of cached object: %q", err) + // We can't return a copy, thus we report the object as not found. + return nil, false + } + metrics.ObserveCacheHit() + return objCopy.(runtime.Object), true + } + metrics.ObserveCacheMiss() + return nil, false +} + +func (h *etcdHelper) addToCache(index uint64, obj runtime.Object) { + startTime := time.Now() + defer func() { + metrics.ObserveAddCache(startTime) + }() + objCopy, err := h.copier.Copy(obj) + if err != nil { + glog.Errorf("Error during DeepCopy of cached object: %q", err) + return + } + isOverwrite := h.cache.Add(index, objCopy) + if !isOverwrite { + metrics.ObserveNewEntry() + } +} + +func toStorageErr(err error, key string, rv int64) error { + if err == nil { + return nil + } + switch { + case etcdutil.IsEtcdNotFound(err): + return storage.NewKeyNotFoundError(key, rv) + case etcdutil.IsEtcdNodeExist(err): + return storage.NewKeyExistsError(key, rv) + case etcdutil.IsEtcdTestFailed(err): + return storage.NewResourceVersionConflictsError(key, rv) + case etcdutil.IsEtcdUnreachable(err): + return storage.NewUnreachableError(key, rv) + default: + return err + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd/etcd_watcher.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd/etcd_watcher.go new file mode 100644 index 00000000..b9ea1b3a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd/etcd_watcher.go @@ -0,0 +1,504 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd + +import ( + "fmt" + "net/http" + "reflect" + "sync" + "sync/atomic" + "time" + + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/storage" + etcdutil "k8s.io/kubernetes/pkg/storage/etcd/util" + utilruntime "k8s.io/kubernetes/pkg/util/runtime" + "k8s.io/kubernetes/pkg/watch" + + etcd "github.com/coreos/etcd/client" + "github.com/golang/glog" + "golang.org/x/net/context" +) + +// Etcd watch event actions +const ( + EtcdCreate = "create" + EtcdGet = "get" + EtcdSet = "set" + EtcdCAS = "compareAndSwap" + EtcdDelete = "delete" + EtcdCAD = "compareAndDelete" + EtcdExpire = "expire" +) + +// HighWaterMark is a thread-safe object for tracking the maximum value seen +// for some quantity. +type HighWaterMark int64 + +// Update returns true if and only if 'current' is the highest value ever seen. +func (hwm *HighWaterMark) Update(current int64) bool { + for { + old := atomic.LoadInt64((*int64)(hwm)) + if current <= old { + return false + } + if atomic.CompareAndSwapInt64((*int64)(hwm), old, current) { + return true + } + } +} + +// TransformFunc attempts to convert an object to another object for use with a watcher. +type TransformFunc func(runtime.Object) (runtime.Object, error) + +// includeFunc returns true if the given key should be considered part of a watch +type includeFunc func(key string) bool + +// exceptKey is an includeFunc that returns false when the provided key matches the watched key +func exceptKey(except string) includeFunc { + return func(key string) bool { + return key != except + } +} + +// etcdWatcher converts a native etcd watch to a watch.Interface. +type etcdWatcher struct { + encoding runtime.Codec + // Note that versioner is required for etcdWatcher to work correctly. + // There is no public constructor of it, so be careful when manipulating + // with it manually. + versioner storage.Versioner + transform TransformFunc + + list bool // If we're doing a recursive watch, should be true. + quorum bool // If we enable quorum, shoule be true + include includeFunc + filter storage.Filter + + etcdIncoming chan *etcd.Response + etcdError chan error + ctx context.Context + cancel context.CancelFunc + etcdCallEnded chan struct{} + + outgoing chan watch.Event + userStop chan struct{} + stopped bool + stopLock sync.Mutex + // wg is used to avoid calls to etcd after Stop(), and to make sure + // that the translate goroutine is not leaked. + wg sync.WaitGroup + + // Injectable for testing. Send the event down the outgoing channel. + emit func(watch.Event) + + // HighWaterMarks for performance debugging. + incomingHWM HighWaterMark + outgoingHWM HighWaterMark + + cache etcdCache +} + +// watchWaitDuration is the amount of time to wait for an error from watch. +const watchWaitDuration = 100 * time.Millisecond + +// newEtcdWatcher returns a new etcdWatcher; if list is true, watch sub-nodes. +// The versioner must be able to handle the objects that transform creates. +func newEtcdWatcher( + list bool, quorum bool, include includeFunc, filter storage.Filter, + encoding runtime.Codec, versioner storage.Versioner, transform TransformFunc, + cache etcdCache) *etcdWatcher { + w := &etcdWatcher{ + encoding: encoding, + versioner: versioner, + transform: transform, + list: list, + quorum: quorum, + include: include, + filter: filter, + // Buffer this channel, so that the etcd client is not forced + // to context switch with every object it gets, and so that a + // long time spent decoding an object won't block the *next* + // object. Basically, we see a lot of "401 window exceeded" + // errors from etcd, and that's due to the client not streaming + // results but rather getting them one at a time. So we really + // want to never block the etcd client, if possible. The 100 is + // mostly arbitrary--we know it goes as high as 50, though. + // There's a V(2) log message that prints the length so we can + // monitor how much of this buffer is actually used. + etcdIncoming: make(chan *etcd.Response, 100), + etcdError: make(chan error, 1), + // Similarly to etcdIncomming, we don't want to force context + // switch on every new incoming object. + outgoing: make(chan watch.Event, 100), + userStop: make(chan struct{}), + stopped: false, + wg: sync.WaitGroup{}, + cache: cache, + ctx: nil, + cancel: nil, + } + w.emit = func(e watch.Event) { + if curLen := int64(len(w.outgoing)); w.outgoingHWM.Update(curLen) { + // Monitor if this gets backed up, and how much. + glog.V(1).Infof("watch (%v): %v objects queued in outgoing channel.", reflect.TypeOf(e.Object).String(), curLen) + } + // Give up on user stop, without this we leak a lot of goroutines in tests. + select { + case w.outgoing <- e: + case <-w.userStop: + } + } + // translate will call done. We need to Add() here because otherwise, + // if Stop() gets called before translate gets started, there'd be a + // problem. + w.wg.Add(1) + go w.translate() + return w +} + +// etcdWatch calls etcd's Watch function, and handles any errors. Meant to be called +// as a goroutine. +func (w *etcdWatcher) etcdWatch(ctx context.Context, client etcd.KeysAPI, key string, resourceVersion uint64) { + defer utilruntime.HandleCrash() + defer close(w.etcdError) + defer close(w.etcdIncoming) + + // All calls to etcd are coming from this function - once it is finished + // no other call to etcd should be generated by this watcher. + done := func() {} + + // We need to be prepared, that Stop() can be called at any time. + // It can potentially also be called, even before this function is called. + // If that is the case, we simply skip all the code here. + // See #18928 for more details. + var watcher etcd.Watcher + returned := func() bool { + w.stopLock.Lock() + defer w.stopLock.Unlock() + if w.stopped { + // Watcher has already been stopped - don't event initiate it here. + return true + } + w.wg.Add(1) + done = w.wg.Done + // Perform initialization of watcher under lock - we want to avoid situation when + // Stop() is called in the meantime (which in tests can cause etcd termination and + // strange behavior here). + if resourceVersion == 0 { + latest, err := etcdGetInitialWatchState(ctx, client, key, w.list, w.quorum, w.etcdIncoming) + if err != nil { + w.etcdError <- err + return true + } + resourceVersion = latest + } + + opts := etcd.WatcherOptions{ + Recursive: w.list, + AfterIndex: resourceVersion, + } + watcher = client.Watcher(key, &opts) + w.ctx, w.cancel = context.WithCancel(ctx) + return false + }() + defer done() + if returned { + return + } + + for { + resp, err := watcher.Next(w.ctx) + if err != nil { + w.etcdError <- err + return + } + w.etcdIncoming <- resp + } +} + +// etcdGetInitialWatchState turns an etcd Get request into a watch equivalent +func etcdGetInitialWatchState(ctx context.Context, client etcd.KeysAPI, key string, recursive bool, quorum bool, incoming chan<- *etcd.Response) (resourceVersion uint64, err error) { + opts := etcd.GetOptions{ + Recursive: recursive, + Sort: false, + Quorum: quorum, + } + resp, err := client.Get(ctx, key, &opts) + if err != nil { + if !etcdutil.IsEtcdNotFound(err) { + utilruntime.HandleError(fmt.Errorf("watch was unable to retrieve the current index for the provided key (%q): %v", key, err)) + return resourceVersion, toStorageErr(err, key, 0) + } + if etcdError, ok := err.(etcd.Error); ok { + resourceVersion = etcdError.Index + } + return resourceVersion, nil + } + resourceVersion = resp.Index + convertRecursiveResponse(resp.Node, resp, incoming) + return +} + +// convertRecursiveResponse turns a recursive get response from etcd into individual response objects +// by copying the original response. This emulates the behavior of a recursive watch. +func convertRecursiveResponse(node *etcd.Node, response *etcd.Response, incoming chan<- *etcd.Response) { + if node.Dir { + for i := range node.Nodes { + convertRecursiveResponse(node.Nodes[i], response, incoming) + } + return + } + copied := *response + copied.Action = "get" + copied.Node = node + incoming <- &copied +} + +// translate pulls stuff from etcd, converts, and pushes out the outgoing channel. Meant to be +// called as a goroutine. +func (w *etcdWatcher) translate() { + defer w.wg.Done() + defer close(w.outgoing) + defer utilruntime.HandleCrash() + + for { + select { + case err := <-w.etcdError: + if err != nil { + var status *unversioned.Status + switch { + case etcdutil.IsEtcdWatchExpired(err): + status = &unversioned.Status{ + Status: unversioned.StatusFailure, + Message: err.Error(), + Code: http.StatusGone, // Gone + Reason: unversioned.StatusReasonExpired, + } + // TODO: need to generate errors using api/errors which has a circular dependency on this package + // no other way to inject errors + // case etcdutil.IsEtcdUnreachable(err): + // status = errors.NewServerTimeout(...) + default: + status = &unversioned.Status{ + Status: unversioned.StatusFailure, + Message: err.Error(), + Code: http.StatusInternalServerError, + Reason: unversioned.StatusReasonInternalError, + } + } + w.emit(watch.Event{ + Type: watch.Error, + Object: status, + }) + } + return + case <-w.userStop: + return + case res, ok := <-w.etcdIncoming: + if ok { + if curLen := int64(len(w.etcdIncoming)); w.incomingHWM.Update(curLen) { + // Monitor if this gets backed up, and how much. + glog.V(1).Infof("watch: %v objects queued in incoming channel.", curLen) + } + w.sendResult(res) + } + // If !ok, don't return here-- must wait for etcdError channel + // to give an error or be closed. + } + } +} + +func (w *etcdWatcher) decodeObject(node *etcd.Node) (runtime.Object, error) { + if obj, found := w.cache.getFromCache(node.ModifiedIndex, storage.Everything); found { + return obj, nil + } + + obj, err := runtime.Decode(w.encoding, []byte(node.Value)) + if err != nil { + return nil, err + } + + // ensure resource version is set on the object we load from etcd + if err := w.versioner.UpdateObject(obj, node.ModifiedIndex); err != nil { + utilruntime.HandleError(fmt.Errorf("failure to version api object (%d) %#v: %v", node.ModifiedIndex, obj, err)) + } + + // perform any necessary transformation + if w.transform != nil { + obj, err = w.transform(obj) + if err != nil { + utilruntime.HandleError(fmt.Errorf("failure to transform api object %#v: %v", obj, err)) + return nil, err + } + } + + if node.ModifiedIndex != 0 { + w.cache.addToCache(node.ModifiedIndex, obj) + } + return obj, nil +} + +func (w *etcdWatcher) sendAdd(res *etcd.Response) { + if res.Node == nil { + utilruntime.HandleError(fmt.Errorf("unexpected nil node: %#v", res)) + return + } + if w.include != nil && !w.include(res.Node.Key) { + return + } + obj, err := w.decodeObject(res.Node) + if err != nil { + utilruntime.HandleError(fmt.Errorf("failure to decode api object: %v\n'%v' from %#v %#v", err, string(res.Node.Value), res, res.Node)) + // TODO: expose an error through watch.Interface? + // Ignore this value. If we stop the watch on a bad value, a client that uses + // the resourceVersion to resume will never be able to get past a bad value. + return + } + if !w.filter.Filter(obj) { + return + } + action := watch.Added + if res.Node.ModifiedIndex != res.Node.CreatedIndex { + action = watch.Modified + } + w.emit(watch.Event{ + Type: action, + Object: obj, + }) +} + +func (w *etcdWatcher) sendModify(res *etcd.Response) { + if res.Node == nil { + glog.Errorf("unexpected nil node: %#v", res) + return + } + if w.include != nil && !w.include(res.Node.Key) { + return + } + curObj, err := w.decodeObject(res.Node) + if err != nil { + utilruntime.HandleError(fmt.Errorf("failure to decode api object: %v\n'%v' from %#v %#v", err, string(res.Node.Value), res, res.Node)) + // TODO: expose an error through watch.Interface? + // Ignore this value. If we stop the watch on a bad value, a client that uses + // the resourceVersion to resume will never be able to get past a bad value. + return + } + curObjPasses := w.filter.Filter(curObj) + oldObjPasses := false + var oldObj runtime.Object + if res.PrevNode != nil && res.PrevNode.Value != "" { + // Ignore problems reading the old object. + if oldObj, err = w.decodeObject(res.PrevNode); err == nil { + if err := w.versioner.UpdateObject(oldObj, res.Node.ModifiedIndex); err != nil { + utilruntime.HandleError(fmt.Errorf("failure to version api object (%d) %#v: %v", res.Node.ModifiedIndex, oldObj, err)) + } + oldObjPasses = w.filter.Filter(oldObj) + } + } + // Some changes to an object may cause it to start or stop matching a filter. + // We need to report those as adds/deletes. So we have to check both the previous + // and current value of the object. + switch { + case curObjPasses && oldObjPasses: + w.emit(watch.Event{ + Type: watch.Modified, + Object: curObj, + }) + case curObjPasses && !oldObjPasses: + w.emit(watch.Event{ + Type: watch.Added, + Object: curObj, + }) + case !curObjPasses && oldObjPasses: + w.emit(watch.Event{ + Type: watch.Deleted, + Object: oldObj, + }) + } + // Do nothing if neither new nor old object passed the filter. +} + +func (w *etcdWatcher) sendDelete(res *etcd.Response) { + if res.PrevNode == nil { + utilruntime.HandleError(fmt.Errorf("unexpected nil prev node: %#v", res)) + return + } + if w.include != nil && !w.include(res.PrevNode.Key) { + return + } + node := *res.PrevNode + if res.Node != nil { + // Note that this sends the *old* object with the etcd index for the time at + // which it gets deleted. This will allow users to restart the watch at the right + // index. + node.ModifiedIndex = res.Node.ModifiedIndex + } + obj, err := w.decodeObject(&node) + if err != nil { + utilruntime.HandleError(fmt.Errorf("failure to decode api object: %v\nfrom %#v %#v", err, res, res.Node)) + // TODO: expose an error through watch.Interface? + // Ignore this value. If we stop the watch on a bad value, a client that uses + // the resourceVersion to resume will never be able to get past a bad value. + return + } + if !w.filter.Filter(obj) { + return + } + w.emit(watch.Event{ + Type: watch.Deleted, + Object: obj, + }) +} + +func (w *etcdWatcher) sendResult(res *etcd.Response) { + switch res.Action { + case EtcdCreate, EtcdGet: + w.sendAdd(res) + case EtcdSet, EtcdCAS: + w.sendModify(res) + case EtcdDelete, EtcdExpire, EtcdCAD: + w.sendDelete(res) + default: + utilruntime.HandleError(fmt.Errorf("unknown action: %v", res.Action)) + } +} + +// ResultChan implements watch.Interface. +func (w *etcdWatcher) ResultChan() <-chan watch.Event { + return w.outgoing +} + +// Stop implements watch.Interface. +func (w *etcdWatcher) Stop() { + w.stopLock.Lock() + if w.cancel != nil { + w.cancel() + w.cancel = nil + } + if !w.stopped { + w.stopped = true + close(w.userStop) + } + w.stopLock.Unlock() + + // Wait until all calls to etcd are finished and no other + // will be issued. + w.wg.Wait() +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd/metrics/metrics.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd/metrics/metrics.go new file mode 100644 index 00000000..119e2e8f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd/metrics/metrics.go @@ -0,0 +1,113 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package metrics + +import ( + "sync" + "time" + + "github.com/prometheus/client_golang/prometheus" +) + +var ( + cacheHitCounter = prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "etcd_helper_cache_hit_count", + Help: "Counter of etcd helper cache hits.", + }, + ) + cacheMissCounter = prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "etcd_helper_cache_miss_count", + Help: "Counter of etcd helper cache miss.", + }, + ) + cacheEntryCounter = prometheus.NewCounter( + prometheus.CounterOpts{ + Name: "etcd_helper_cache_entry_count", + Help: "Counter of etcd helper cache entries. This can be different from etcd_helper_cache_miss_count " + + "because two concurrent threads can miss the cache and generate the same entry twice.", + }, + ) + cacheGetLatency = prometheus.NewSummary( + prometheus.SummaryOpts{ + Name: "etcd_request_cache_get_latencies_summary", + Help: "Latency in microseconds of getting an object from etcd cache", + }, + ) + cacheAddLatency = prometheus.NewSummary( + prometheus.SummaryOpts{ + Name: "etcd_request_cache_add_latencies_summary", + Help: "Latency in microseconds of adding an object to etcd cache", + }, + ) + etcdRequestLatenciesSummary = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Name: "etcd_request_latencies_summary", + Help: "Etcd request latency summary in microseconds for each operation and object type.", + }, + []string{"operation", "type"}, + ) +) + +var registerMetrics sync.Once + +// Register all metrics. +func Register() { + // Register the metrics. + registerMetrics.Do(func() { + prometheus.MustRegister(cacheHitCounter) + prometheus.MustRegister(cacheMissCounter) + prometheus.MustRegister(cacheEntryCounter) + prometheus.MustRegister(cacheAddLatency) + prometheus.MustRegister(cacheGetLatency) + prometheus.MustRegister(etcdRequestLatenciesSummary) + }) +} + +func RecordEtcdRequestLatency(verb, resource string, startTime time.Time) { + etcdRequestLatenciesSummary.WithLabelValues(verb, resource).Observe(float64(time.Since(startTime) / time.Microsecond)) +} + +func ObserveGetCache(startTime time.Time) { + cacheGetLatency.Observe(float64(time.Since(startTime) / time.Microsecond)) +} + +func ObserveAddCache(startTime time.Time) { + cacheAddLatency.Observe(float64(time.Since(startTime) / time.Microsecond)) +} + +func ObserveCacheHit() { + cacheHitCounter.Inc() +} + +func ObserveCacheMiss() { + cacheMissCounter.Inc() +} + +func ObserveNewEntry() { + cacheEntryCounter.Inc() +} + +func Reset() { + cacheHitCounter.Set(0) + cacheMissCounter.Set(0) + cacheEntryCounter.Set(0) + // TODO: Reset cacheAddLatency. + // TODO: Reset cacheGetLatency. + etcdRequestLatenciesSummary.Reset() +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd/util/doc.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd/util/doc.go new file mode 100644 index 00000000..48a70cb7 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd/util/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package util holds generic etcd-related utility functions that any user of ectd might want to +// use, without pulling in kubernetes-specific code. +package util diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd/util/etcd_util.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd/util/etcd_util.go new file mode 100644 index 00000000..7c71fe24 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd/util/etcd_util.go @@ -0,0 +1,99 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + + etcd "github.com/coreos/etcd/client" +) + +// IsEtcdNotFound returns true if and only if err is an etcd not found error. +func IsEtcdNotFound(err error) bool { + return isEtcdErrorNum(err, etcd.ErrorCodeKeyNotFound) +} + +// IsEtcdNodeExist returns true if and only if err is an etcd node already exist error. +func IsEtcdNodeExist(err error) bool { + return isEtcdErrorNum(err, etcd.ErrorCodeNodeExist) +} + +// IsEtcdTestFailed returns true if and only if err is an etcd write conflict. +func IsEtcdTestFailed(err error) bool { + return isEtcdErrorNum(err, etcd.ErrorCodeTestFailed) +} + +// IsEtcdWatchExpired returns true if and only if err indicates the watch has expired. +func IsEtcdWatchExpired(err error) bool { + // NOTE: This seems weird why it wouldn't be etcd.ErrorCodeWatcherCleared + // I'm using the previous matching value + return isEtcdErrorNum(err, etcd.ErrorCodeEventIndexCleared) +} + +// IsEtcdUnreachable returns true if and only if err indicates the server could not be reached. +func IsEtcdUnreachable(err error) bool { + // NOTE: The logic has changed previous error code no longer applies + return err == etcd.ErrClusterUnavailable +} + +// isEtcdErrorNum returns true if and only if err is an etcd error, whose errorCode matches errorCode +func isEtcdErrorNum(err error, errorCode int) bool { + if err != nil { + if etcdError, ok := err.(etcd.Error); ok { + return etcdError.Code == errorCode + } + // NOTE: There are other error types returned + } + return false +} + +// GetEtcdVersion performs a version check against the provided Etcd server, +// returning the string response, and error (if any). +func GetEtcdVersion(host string) (string, error) { + response, err := http.Get(host + "/version") + if err != nil { + return "", err + } + defer response.Body.Close() + if response.StatusCode != http.StatusOK { + return "", fmt.Errorf("unsuccessful response from etcd server %q: %v", host, err) + } + versionBytes, err := ioutil.ReadAll(response.Body) + if err != nil { + return "", err + } + return string(versionBytes), nil +} + +type etcdHealth struct { + // Note this has to be public so the json library can modify it. + Health string `json:"health"` +} + +func EtcdHealthCheck(data []byte) error { + obj := etcdHealth{} + if err := json.Unmarshal(data, &obj); err != nil { + return err + } + if obj.Health != "true" { + return fmt.Errorf("Unhealthy status: %s", obj.Health) + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd3/compact.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd3/compact.go new file mode 100644 index 00000000..39b21c1c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd3/compact.go @@ -0,0 +1,161 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd3 + +import ( + "strconv" + "sync" + "time" + + "github.com/coreos/etcd/clientv3" + "github.com/golang/glog" + "golang.org/x/net/context" +) + +const ( + compactInterval = 10 * time.Minute + compactRevKey = "compact_rev_key" +) + +var ( + endpointsMapMu sync.Mutex + endpointsMap map[string]struct{} +) + +func init() { + endpointsMap = make(map[string]struct{}) +} + +// StartCompactor starts a compactor in the background to compact old version of keys that's not needed. +// By default, we save the most recent 10 minutes data and compact versions > 10minutes ago. +// It should be enough for slow watchers and to tolerate burst. +// TODO: We might keep a longer history (12h) in the future once storage API can take advantage of past version of keys. +func StartCompactor(ctx context.Context, client *clientv3.Client) { + endpointsMapMu.Lock() + defer endpointsMapMu.Unlock() + + // In one process, we can have only one compactor for one cluster. + // Currently we rely on endpoints to differentiate clusters. + for _, ep := range client.Endpoints() { + if _, ok := endpointsMap[ep]; ok { + glog.V(4).Infof("compactor already exists for endpoints %v", client.Endpoints()) + return + } + } + for _, ep := range client.Endpoints() { + endpointsMap[ep] = struct{}{} + } + + go compactor(ctx, client, compactInterval) +} + +// compactor periodically compacts historical versions of keys in etcd. +// It will compact keys with versions older than given interval. +// In other words, after compaction, it will only contain keys set during last interval. +// Any API call for the older versions of keys will return error. +// Interval is the time interval between each compaction. The first compaction happens after "interval". +func compactor(ctx context.Context, client *clientv3.Client, interval time.Duration) { + // Technical definitions: + // We have a special key in etcd defined as *compactRevKey*. + // compactRevKey's value will be set to the string of last compacted revision. + // compactRevKey's version will be used as logical time for comparison. THe version is referred as compact time. + // Initially, because the key doesn't exist, the compact time (version) is 0. + // + // Algorithm: + // - Compare to see if (local compact_time) = (remote compact_time). + // - If yes, increment both local and remote compact_time, and do a compaction. + // - If not, set local to remote compact_time. + // + // Technical details/insights: + // + // The protocol here is lease based. If one compactor CAS successfully, the others would know it when they fail in + // CAS later and would try again in 10 minutes. If an APIServer crashed, another one would "take over" the lease. + // + // For example, in the following diagram, we have a compactor C1 doing compaction in t1, t2. Another compactor C2 + // at t1' (t1 < t1' < t2) would CAS fail, set its known oldRev to rev at t1', and try again in t2' (t2' > t2). + // If C1 crashed and wouldn't compact at t2, C2 would CAS successfully at t2'. + // + // oldRev(t2) curRev(t2) + // + + // oldRev curRev | + // + + | + // | | | + // | | t1' | t2' + // +---v-------------v----^---------v------^----> + // t0 t1 t2 + // + // We have the guarantees: + // - in normal cases, the interval is 10 minutes. + // - in failover, the interval is >10m and <20m + // + // FAQ: + // - What if time is not accurate? We don't care as long as someone did the compaction. Atomicity is ensured using + // etcd API. + // - What happened under heavy load scenarios? Initially, each apiserver will do only one compaction + // every 10 minutes. This is very unlikely affecting or affected w.r.t. server load. + + var compactTime int64 + var rev int64 + var err error + for { + select { + case <-time.After(interval): + case <-ctx.Done(): + return + } + + compactTime, rev, err = compact(ctx, client, compactTime, rev) + if err != nil { + glog.Errorf("etcd: endpoint (%v) compact failed: %v", client.Endpoints(), err) + continue + } + } +} + +// compact compacts etcd store and returns current rev. +// It will return the current compact time and global revision if no error occurred. +// Note that CAS fail will not incur any error. +func compact(ctx context.Context, client *clientv3.Client, t, rev int64) (int64, int64, error) { + resp, err := client.KV.Txn(ctx).If( + clientv3.Compare(clientv3.Version(compactRevKey), "=", t), + ).Then( + clientv3.OpPut(compactRevKey, strconv.FormatInt(rev, 10)), // Expect side effect: increment Version + ).Else( + clientv3.OpGet(compactRevKey), + ).Commit() + if err != nil { + return t, rev, err + } + + curRev := resp.Header.Revision + + if !resp.Succeeded { + curTime := resp.Responses[0].GetResponseRange().Kvs[0].Version + return curTime, curRev, nil + } + curTime := t + 1 + + if rev == 0 { + // We don't compact on bootstrap. + return curTime, curRev, nil + } + if _, err = client.Compact(ctx, rev); err != nil { + return curTime, curRev, err + } + glog.Infof("etcd: compacted rev (%d), endpoints (%v)", rev, client.Endpoints()) + return curTime, curRev, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd3/event.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd3/event.go new file mode 100644 index 00000000..585c371b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd3/event.go @@ -0,0 +1,50 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd3 + +import ( + "github.com/coreos/etcd/clientv3" + "github.com/coreos/etcd/mvcc/mvccpb" +) + +type event struct { + key string + value []byte + rev int64 + isDeleted bool + isCreated bool +} + +func parseKV(kv *mvccpb.KeyValue) *event { + return &event{ + key: string(kv.Key), + value: kv.Value, + rev: kv.ModRevision, + isDeleted: false, + isCreated: kv.ModRevision == kv.CreateRevision, + } +} + +func parseEvent(e *clientv3.Event) *event { + return &event{ + key: string(e.Kv.Key), + value: e.Kv.Value, + rev: e.Kv.ModRevision, + isDeleted: e.Type == clientv3.EventTypeDelete, + isCreated: e.IsCreate(), + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd3/store.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd3/store.go new file mode 100644 index 00000000..83b74a56 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd3/store.go @@ -0,0 +1,455 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd3 + +import ( + "bytes" + "errors" + "fmt" + "path" + "reflect" + "strings" + + "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/meta" + "k8s.io/kubernetes/pkg/conversion" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/storage" + "k8s.io/kubernetes/pkg/storage/etcd" + "k8s.io/kubernetes/pkg/watch" + + "github.com/coreos/etcd/clientv3" + "github.com/golang/glog" + "golang.org/x/net/context" +) + +type store struct { + client *clientv3.Client + codec runtime.Codec + versioner storage.Versioner + pathPrefix string + watcher *watcher +} + +type elemForDecode struct { + data []byte + rev uint64 +} + +type objState struct { + obj runtime.Object + meta *storage.ResponseMeta + rev int64 + data []byte +} + +// New returns an etcd3 implementation of storage.Interface. +func New(c *clientv3.Client, codec runtime.Codec, prefix string) storage.Interface { + return newStore(c, codec, prefix) +} + +func newStore(c *clientv3.Client, codec runtime.Codec, prefix string) *store { + versioner := etcd.APIObjectVersioner{} + return &store{ + client: c, + versioner: versioner, + codec: codec, + pathPrefix: prefix, + watcher: newWatcher(c, codec, versioner), + } +} + +// Versioner implements storage.Interface.Versioner. +func (s *store) Versioner() storage.Versioner { + return s.versioner +} + +// Get implements storage.Interface.Get. +func (s *store) Get(ctx context.Context, key string, out runtime.Object, ignoreNotFound bool) error { + key = keyWithPrefix(s.pathPrefix, key) + getResp, err := s.client.KV.Get(ctx, key) + if err != nil { + return err + } + + if len(getResp.Kvs) == 0 { + if ignoreNotFound { + return runtime.SetZeroValue(out) + } + return storage.NewKeyNotFoundError(key, 0) + } + kv := getResp.Kvs[0] + return decode(s.codec, s.versioner, kv.Value, out, kv.ModRevision) +} + +// Create implements storage.Interface.Create. +func (s *store) Create(ctx context.Context, key string, obj, out runtime.Object, ttl uint64) error { + if version, err := s.versioner.ObjectResourceVersion(obj); err == nil && version != 0 { + return errors.New("resourceVersion should not be set on objects to be created") + } + data, err := runtime.Encode(s.codec, obj) + if err != nil { + return err + } + key = keyWithPrefix(s.pathPrefix, key) + + opts, err := s.ttlOpts(ctx, int64(ttl)) + if err != nil { + return err + } + + txnResp, err := s.client.KV.Txn(ctx).If( + notFound(key), + ).Then( + clientv3.OpPut(key, string(data), opts...), + ).Commit() + if err != nil { + return err + } + if !txnResp.Succeeded { + return storage.NewKeyExistsError(key, 0) + } + + if out != nil { + putResp := txnResp.Responses[0].GetResponsePut() + return decode(s.codec, s.versioner, data, out, putResp.Header.Revision) + } + return nil +} + +// Delete implements storage.Interface.Delete. +func (s *store) Delete(ctx context.Context, key string, out runtime.Object, precondtions *storage.Preconditions) error { + v, err := conversion.EnforcePtr(out) + if err != nil { + panic("unable to convert output object to pointer") + } + key = keyWithPrefix(s.pathPrefix, key) + if precondtions == nil { + return s.unconditionalDelete(ctx, key, out) + } + return s.conditionalDelete(ctx, key, out, v, precondtions) +} + +func (s *store) unconditionalDelete(ctx context.Context, key string, out runtime.Object) error { + // We need to do get and delete in single transaction in order to + // know the value and revision before deleting it. + txnResp, err := s.client.KV.Txn(ctx).If().Then( + clientv3.OpGet(key), + clientv3.OpDelete(key), + ).Commit() + if err != nil { + return err + } + getResp := txnResp.Responses[0].GetResponseRange() + if len(getResp.Kvs) == 0 { + return storage.NewKeyNotFoundError(key, 0) + } + + kv := getResp.Kvs[0] + return decode(s.codec, s.versioner, kv.Value, out, kv.ModRevision) +} + +func (s *store) conditionalDelete(ctx context.Context, key string, out runtime.Object, v reflect.Value, precondtions *storage.Preconditions) error { + getResp, err := s.client.KV.Get(ctx, key) + if err != nil { + return err + } + for { + origState, err := s.getState(getResp, key, v, false) + if err != nil { + return err + } + if err := checkPreconditions(key, precondtions, origState.obj); err != nil { + return err + } + txnResp, err := s.client.KV.Txn(ctx).If( + clientv3.Compare(clientv3.ModRevision(key), "=", origState.rev), + ).Then( + clientv3.OpDelete(key), + ).Else( + clientv3.OpGet(key), + ).Commit() + if err != nil { + return err + } + if !txnResp.Succeeded { + getResp = (*clientv3.GetResponse)(txnResp.Responses[0].GetResponseRange()) + glog.V(4).Infof("deletion of %s failed because of a conflict, going to retry", key) + continue + } + return decode(s.codec, s.versioner, origState.data, out, origState.rev) + } +} + +// GuaranteedUpdate implements storage.Interface.GuaranteedUpdate. +func (s *store) GuaranteedUpdate(ctx context.Context, key string, out runtime.Object, ignoreNotFound bool, precondtions *storage.Preconditions, tryUpdate storage.UpdateFunc) error { + v, err := conversion.EnforcePtr(out) + if err != nil { + panic("unable to convert output object to pointer") + } + key = keyWithPrefix(s.pathPrefix, key) + getResp, err := s.client.KV.Get(ctx, key) + if err != nil { + return err + } + for { + origState, err := s.getState(getResp, key, v, ignoreNotFound) + if err != nil { + return err + } + + if err := checkPreconditions(key, precondtions, origState.obj); err != nil { + return err + } + + ret, ttl, err := s.updateState(origState, tryUpdate) + if err != nil { + return err + } + + data, err := runtime.Encode(s.codec, ret) + if err != nil { + return err + } + if bytes.Equal(data, origState.data) { + return decode(s.codec, s.versioner, origState.data, out, origState.rev) + } + + opts, err := s.ttlOpts(ctx, int64(ttl)) + if err != nil { + return err + } + + txnResp, err := s.client.KV.Txn(ctx).If( + clientv3.Compare(clientv3.ModRevision(key), "=", origState.rev), + ).Then( + clientv3.OpPut(key, string(data), opts...), + ).Else( + clientv3.OpGet(key), + ).Commit() + if err != nil { + return err + } + if !txnResp.Succeeded { + getResp = (*clientv3.GetResponse)(txnResp.Responses[0].GetResponseRange()) + glog.V(4).Infof("GuaranteedUpdate of %s failed because of a conflict, going to retry", key) + continue + } + putResp := txnResp.Responses[0].GetResponsePut() + return decode(s.codec, s.versioner, data, out, putResp.Header.Revision) + } +} + +// GetToList implements storage.Interface.GetToList. +func (s *store) GetToList(ctx context.Context, key string, filter storage.Filter, listObj runtime.Object) error { + listPtr, err := meta.GetItemsPtr(listObj) + if err != nil { + return err + } + key = keyWithPrefix(s.pathPrefix, key) + + getResp, err := s.client.KV.Get(ctx, key) + if err != nil { + return err + } + if len(getResp.Kvs) == 0 { + return nil + } + elems := []*elemForDecode{{ + data: getResp.Kvs[0].Value, + rev: uint64(getResp.Kvs[0].ModRevision), + }} + if err := decodeList(elems, filter, listPtr, s.codec, s.versioner); err != nil { + return err + } + // update version with cluster level revision + return s.versioner.UpdateList(listObj, uint64(getResp.Header.Revision)) +} + +// List implements storage.Interface.List. +func (s *store) List(ctx context.Context, key, resourceVersion string, filter storage.Filter, listObj runtime.Object) error { + listPtr, err := meta.GetItemsPtr(listObj) + if err != nil { + return err + } + key = keyWithPrefix(s.pathPrefix, key) + // We need to make sure the key ended with "/" so that we only get children "directories". + // e.g. if we have key "/a", "/a/b", "/ab", getting keys with prefix "/a" will return all three, + // while with prefix "/a/" will return only "/a/b" which is the correct answer. + if !strings.HasSuffix(key, "/") { + key += "/" + } + getResp, err := s.client.KV.Get(ctx, key, clientv3.WithPrefix()) + if err != nil { + return err + } + + elems := make([]*elemForDecode, len(getResp.Kvs)) + for i, kv := range getResp.Kvs { + elems[i] = &elemForDecode{ + data: kv.Value, + rev: uint64(kv.ModRevision), + } + } + if err := decodeList(elems, filter, listPtr, s.codec, s.versioner); err != nil { + return err + } + // update version with cluster level revision + return s.versioner.UpdateList(listObj, uint64(getResp.Header.Revision)) +} + +// Watch implements storage.Interface.Watch. +func (s *store) Watch(ctx context.Context, key string, resourceVersion string, filter storage.Filter) (watch.Interface, error) { + return s.watch(ctx, key, resourceVersion, filter, false) +} + +// WatchList implements storage.Interface.WatchList. +func (s *store) WatchList(ctx context.Context, key string, resourceVersion string, filter storage.Filter) (watch.Interface, error) { + return s.watch(ctx, key, resourceVersion, filter, true) +} + +func (s *store) watch(ctx context.Context, key string, rv string, filter storage.Filter, recursive bool) (watch.Interface, error) { + rev, err := storage.ParseWatchResourceVersion(rv) + if err != nil { + return nil, err + } + key = keyWithPrefix(s.pathPrefix, key) + return s.watcher.Watch(ctx, key, int64(rev), recursive, filter) +} + +func (s *store) getState(getResp *clientv3.GetResponse, key string, v reflect.Value, ignoreNotFound bool) (*objState, error) { + state := &objState{ + obj: reflect.New(v.Type()).Interface().(runtime.Object), + meta: &storage.ResponseMeta{}, + } + if len(getResp.Kvs) == 0 { + if !ignoreNotFound { + return nil, storage.NewKeyNotFoundError(key, 0) + } + if err := runtime.SetZeroValue(state.obj); err != nil { + return nil, err + } + } else { + state.rev = getResp.Kvs[0].ModRevision + state.meta.ResourceVersion = uint64(state.rev) + state.data = getResp.Kvs[0].Value + if err := decode(s.codec, s.versioner, state.data, state.obj, state.rev); err != nil { + return nil, err + } + } + return state, nil +} + +func (s *store) updateState(st *objState, userUpdate storage.UpdateFunc) (runtime.Object, uint64, error) { + ret, ttlPtr, err := userUpdate(st.obj, *st.meta) + if err != nil { + return nil, 0, err + } + + version, err := s.versioner.ObjectResourceVersion(ret) + if err != nil { + return nil, 0, err + } + if version != 0 { + // We cannot store object with resourceVersion in etcd. We need to reset it. + if err := s.versioner.UpdateObject(ret, 0); err != nil { + return nil, 0, fmt.Errorf("UpdateObject failed: %v", err) + } + } + var ttl uint64 + if ttlPtr != nil { + ttl = *ttlPtr + } + return ret, ttl, nil +} + +// ttlOpts returns client options based on given ttl. +// ttl: if ttl is non-zero, it will attach the key to a lease with ttl of roughly the same length +func (s *store) ttlOpts(ctx context.Context, ttl int64) ([]clientv3.OpOption, error) { + if ttl == 0 { + return nil, nil + } + // TODO: one lease per ttl key is expensive. Based on current use case, we can have a long window to + // put keys within into same lease. We shall benchmark this and optimize the performance. + lcr, err := s.client.Lease.Grant(ctx, ttl) + if err != nil { + return nil, err + } + return []clientv3.OpOption{clientv3.WithLease(clientv3.LeaseID(lcr.ID))}, nil +} + +func keyWithPrefix(prefix, key string) string { + if strings.HasPrefix(key, prefix) { + return key + } + return path.Join(prefix, key) +} + +// decode decodes value of bytes into object. It will also set the object resource version to rev. +// On success, objPtr would be set to the object. +func decode(codec runtime.Codec, versioner storage.Versioner, value []byte, objPtr runtime.Object, rev int64) error { + if _, err := conversion.EnforcePtr(objPtr); err != nil { + panic("unable to convert output object to pointer") + } + _, _, err := codec.Decode(value, nil, objPtr) + if err != nil { + return err + } + // being unable to set the version does not prevent the object from being extracted + versioner.UpdateObject(objPtr, uint64(rev)) + return nil +} + +// decodeList decodes a list of values into a list of objects, with resource version set to corresponding rev. +// On success, ListPtr would be set to the list of objects. +func decodeList(elems []*elemForDecode, filter storage.Filter, ListPtr interface{}, codec runtime.Codec, versioner storage.Versioner) error { + v, err := conversion.EnforcePtr(ListPtr) + if err != nil || v.Kind() != reflect.Slice { + panic("need ptr to slice") + } + for _, elem := range elems { + obj, _, err := codec.Decode(elem.data, nil, reflect.New(v.Type().Elem()).Interface().(runtime.Object)) + if err != nil { + return err + } + // being unable to set the version does not prevent the object from being extracted + versioner.UpdateObject(obj, elem.rev) + if filter.Filter(obj) { + v.Set(reflect.Append(v, reflect.ValueOf(obj).Elem())) + } + } + return nil +} + +func checkPreconditions(key string, preconditions *storage.Preconditions, out runtime.Object) error { + if preconditions == nil { + return nil + } + objMeta, err := api.ObjectMetaFor(out) + if err != nil { + return storage.NewInternalErrorf("can't enforce preconditions %v on un-introspectable object %v, got error: %v", *preconditions, out, err) + } + if preconditions.UID != nil && *preconditions.UID != objMeta.UID { + errMsg := fmt.Sprintf("Precondition failed: UID in precondition: %v, UID in object meta: %v", preconditions.UID, objMeta.UID) + return storage.NewInvalidObjError(key, errMsg) + } + return nil +} + +func notFound(key string) clientv3.Cmp { + return clientv3.Compare(clientv3.ModRevision(key), "=", 0) +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/etcd3/watcher.go b/vendor/k8s.io/kubernetes/pkg/storage/etcd3/watcher.go new file mode 100644 index 00000000..0b3b39ba --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/etcd3/watcher.go @@ -0,0 +1,351 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package etcd3 + +import ( + "fmt" + "net/http" + "strings" + "sync" + + "k8s.io/kubernetes/pkg/api/unversioned" + "k8s.io/kubernetes/pkg/runtime" + "k8s.io/kubernetes/pkg/storage" + "k8s.io/kubernetes/pkg/watch" + + "github.com/coreos/etcd/clientv3" + etcdrpc "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes" + "github.com/golang/glog" + "golang.org/x/net/context" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" +) + +const ( + // We have set a buffer in order to reduce times of context switches. + incomingBufSize = 100 + outgoingBufSize = 100 +) + +type watcher struct { + client *clientv3.Client + codec runtime.Codec + versioner storage.Versioner +} + +// watchChan implements watch.Interface. +type watchChan struct { + watcher *watcher + key string + initialRev int64 + recursive bool + filter storage.Filter + ctx context.Context + cancel context.CancelFunc + incomingEventChan chan *event + resultChan chan watch.Event + errChan chan error +} + +func newWatcher(client *clientv3.Client, codec runtime.Codec, versioner storage.Versioner) *watcher { + return &watcher{ + client: client, + codec: codec, + versioner: versioner, + } +} + +// Watch watches on a key and returns a watch.Interface that transfers relevant notifications. +// If rev is zero, it will return the existing object(s) and then start watching from +// the maximum revision+1 from returned objects. +// If rev is non-zero, it will watch events happened after given revision. +// If recursive is false, it watches on given key. +// If recursive is true, it watches any children and directories under the key, excluding the root key itself. +// filter must be non-nil. Only if filter returns true will the changes be returned. +func (w *watcher) Watch(ctx context.Context, key string, rev int64, recursive bool, filter storage.Filter) (watch.Interface, error) { + if recursive && !strings.HasSuffix(key, "/") { + key += "/" + } + wc := w.createWatchChan(ctx, key, rev, recursive, filter) + go wc.run() + return wc, nil +} + +func (w *watcher) createWatchChan(ctx context.Context, key string, rev int64, recursive bool, filter storage.Filter) *watchChan { + wc := &watchChan{ + watcher: w, + key: key, + initialRev: rev, + recursive: recursive, + filter: filter, + incomingEventChan: make(chan *event, incomingBufSize), + resultChan: make(chan watch.Event, outgoingBufSize), + errChan: make(chan error, 1), + } + wc.ctx, wc.cancel = context.WithCancel(ctx) + return wc +} + +func (wc *watchChan) run() { + go wc.startWatching() + + var resultChanWG sync.WaitGroup + resultChanWG.Add(1) + go wc.processEvent(&resultChanWG) + + select { + case err := <-wc.errChan: + errResult := parseError(err) + if errResult != nil { + // error result is guaranteed to be received by user before closing ResultChan. + select { + case wc.resultChan <- *errResult: + case <-wc.ctx.Done(): // user has given up all results + } + } + wc.cancel() + case <-wc.ctx.Done(): + } + // we need to wait until resultChan wouldn't be sent to anymore + resultChanWG.Wait() + close(wc.resultChan) +} + +func (wc *watchChan) Stop() { + wc.cancel() +} + +func (wc *watchChan) ResultChan() <-chan watch.Event { + return wc.resultChan +} + +// sync tries to retrieve existing data and send them to process. +// The revision to watch will be set to the revision in response. +func (wc *watchChan) sync() error { + opts := []clientv3.OpOption{} + if wc.recursive { + opts = append(opts, clientv3.WithPrefix()) + } + getResp, err := wc.watcher.client.Get(wc.ctx, wc.key, opts...) + if err != nil { + return err + } + wc.initialRev = getResp.Header.Revision + + for _, kv := range getResp.Kvs { + wc.sendEvent(parseKV(kv)) + } + return nil +} + +// startWatching does: +// - get current objects if initialRev=0; set initialRev to current rev +// - watch on given key and send events to process. +func (wc *watchChan) startWatching() { + if wc.initialRev == 0 { + if err := wc.sync(); err != nil { + wc.sendError(err) + return + } + } + opts := []clientv3.OpOption{clientv3.WithRev(wc.initialRev + 1)} + if wc.recursive { + opts = append(opts, clientv3.WithPrefix()) + } + wch := wc.watcher.client.Watch(wc.ctx, wc.key, opts...) + for wres := range wch { + if wres.Err() != nil { + // If there is an error on server (e.g. compaction), the channel will return it before closed. + wc.sendError(wres.Err()) + return + } + for _, e := range wres.Events { + wc.sendEvent(parseEvent(e)) + } + } +} + +// processEvent processes events from etcd watcher and sends results to resultChan. +func (wc *watchChan) processEvent(wg *sync.WaitGroup) { + defer wg.Done() + + for { + select { + case e := <-wc.incomingEventChan: + res := wc.transform(e) + if res == nil { + continue + } + if len(wc.resultChan) == outgoingBufSize { + glog.Warningf("Fast watcher, slow processing. Number of buffered events: %d."+ + "Probably caused by slow dispatching events to watchers", outgoingBufSize) + } + // If user couldn't receive results fast enough, we also block incoming events from watcher. + // Because storing events in local will cause more memory usage. + // The worst case would be closing the fast watcher. + select { + case wc.resultChan <- *res: + case <-wc.ctx.Done(): + return + } + case <-wc.ctx.Done(): + return + } + } +} + +// transform transforms an event into a result for user if not filtered. +// TODO (Optimization): +// - Save remote round-trip. +// Currently, DELETE and PUT event don't contain the previous value. +// We need to do another Get() in order to get previous object and have logic upon it. +// We could potentially do some optimizations: +// - For PUT, we can save current and previous objects into the value. +// - For DELETE, See https://github.com/coreos/etcd/issues/4620 +func (wc *watchChan) transform(e *event) (res *watch.Event) { + curObj, oldObj, err := prepareObjs(wc.ctx, e, wc.watcher.client, wc.watcher.codec, wc.watcher.versioner) + if err != nil { + wc.sendError(err) + return nil + } + + switch { + case e.isDeleted: + if !wc.filter.Filter(oldObj) { + return nil + } + res = &watch.Event{ + Type: watch.Deleted, + Object: oldObj, + } + case e.isCreated: + if !wc.filter.Filter(curObj) { + return nil + } + res = &watch.Event{ + Type: watch.Added, + Object: curObj, + } + default: + curObjPasses := wc.filter.Filter(curObj) + oldObjPasses := wc.filter.Filter(oldObj) + switch { + case curObjPasses && oldObjPasses: + res = &watch.Event{ + Type: watch.Modified, + Object: curObj, + } + case curObjPasses && !oldObjPasses: + res = &watch.Event{ + Type: watch.Added, + Object: curObj, + } + case !curObjPasses && oldObjPasses: + res = &watch.Event{ + Type: watch.Deleted, + Object: oldObj, + } + } + } + return res +} + +func parseError(err error) *watch.Event { + var status *unversioned.Status + switch { + case err == etcdrpc.ErrCompacted: + status = &unversioned.Status{ + Status: unversioned.StatusFailure, + Message: err.Error(), + Code: http.StatusGone, + Reason: unversioned.StatusReasonExpired, + } + default: + status = &unversioned.Status{ + Status: unversioned.StatusFailure, + Message: err.Error(), + Code: http.StatusInternalServerError, + Reason: unversioned.StatusReasonInternalError, + } + } + + return &watch.Event{ + Type: watch.Error, + Object: status, + } +} + +func (wc *watchChan) sendError(err error) { + // Context.canceled is an expected behavior. + // We should just stop all goroutines in watchChan without returning error. + // TODO: etcd client should return context.Canceled instead of grpc specific error. + if grpc.Code(err) == codes.Canceled || err == context.Canceled { + return + } + select { + case wc.errChan <- err: + case <-wc.ctx.Done(): + } +} + +func (wc *watchChan) sendEvent(e *event) { + if len(wc.incomingEventChan) == incomingBufSize { + glog.Warningf("Fast watcher, slow processing. Number of buffered events: %d."+ + "Probably caused by slow decoding, user not receiving fast, or other processing logic", + incomingBufSize) + } + select { + case wc.incomingEventChan <- e: + case <-wc.ctx.Done(): + } +} + +func prepareObjs(ctx context.Context, e *event, client *clientv3.Client, codec runtime.Codec, versioner storage.Versioner) (curObj runtime.Object, oldObj runtime.Object, err error) { + if !e.isDeleted { + curObj, err = decodeObj(codec, versioner, e.value, e.rev) + if err != nil { + return nil, nil, err + } + } + if e.isDeleted || !e.isCreated { + getResp, err := client.Get(ctx, e.key, clientv3.WithRev(e.rev-1)) + if err != nil { + return nil, nil, err + } + // Note that this sends the *old* object with the etcd revision for the time at + // which it gets deleted. + // We assume old object is returned only in Deleted event. Users (e.g. cacher) need + // to have larger than previous rev to tell the ordering. + oldObj, err = decodeObj(codec, versioner, getResp.Kvs[0].Value, e.rev) + if err != nil { + return nil, nil, err + } + } + return curObj, oldObj, nil +} + +func decodeObj(codec runtime.Codec, versioner storage.Versioner, data []byte, rev int64) (runtime.Object, error) { + obj, err := runtime.Decode(codec, []byte(data)) + if err != nil { + return nil, err + } + // ensure resource version is set on the object we load from etcd + if err := versioner.UpdateObject(obj, uint64(rev)); err != nil { + return nil, fmt.Errorf("failure to version api object (%d) %#v: %v", rev, obj, err) + } + return obj, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/interfaces.go b/vendor/k8s.io/kubernetes/pkg/storage/interfaces.go index 89290e29..900a4a2e 100644 --- a/vendor/k8s.io/kubernetes/pkg/storage/interfaces.go +++ b/vendor/k8s.io/kubernetes/pkg/storage/interfaces.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -51,15 +51,47 @@ type ResponseMeta struct { ResourceVersion uint64 } -// FilterFunc is a predicate which takes an API object and returns true -// if and only if the object should remain in the set. -type FilterFunc func(obj runtime.Object) bool +// MatchValue defines a pair (, ). +type MatchValue struct { + IndexName string + Value string +} -// Everything is a FilterFunc which accepts all objects. -func Everything(runtime.Object) bool { +// TriggerPublisherFunc is a function that takes an object, and returns a list of pairs +// (, ) for all indexes known +// to that function. +type TriggerPublisherFunc func(obj runtime.Object) []MatchValue + +// Filter is interface that is used to pass filtering mechanism. +type Filter interface { + // Filter is a predicate which takes an API object and returns true + // if and only if the object should remain in the set. + Filter(obj runtime.Object) bool + // For any triggers known to the Filter, if Filter() can return only + // (a subset of) objects for which indexing function returns , + // (, pair would be returned. + // + // This is optimization to avoid computing Filter() function (which are + // usually relatively expensive) in case we are sure they will return + // false anyway. + Trigger() []MatchValue +} + +// Everything is a Filter which accepts all objects. +var Everything Filter = everything{} + +// everything is implementation of Everything. +type everything struct { +} + +func (e everything) Filter(runtime.Object) bool { return true } +func (e everything) Trigger() []MatchValue { + return nil +} + // Pass an UpdateFunc to Interface.GuaranteedUpdate to make an update // that is guaranteed to succeed. // See the comment for GuaranteedUpdate for more details. @@ -77,14 +109,9 @@ func NewUIDPreconditions(uid string) *Preconditions { return &Preconditions{UID: &u} } -// Interface offers a common interface for object marshaling/unmarshling operations and +// Interface offers a common interface for object marshaling/unmarshaling operations and // hides all the storage-related operations behind it. type Interface interface { - // Returns list of servers addresses of the underyling database. - // TODO: This method is used only in a single place. Consider refactoring and getting rid - // of this method from the interface. - Backends(ctx context.Context) []string - // Returns Versioner associated with this interface. Versioner() Versioner @@ -102,14 +129,14 @@ type Interface interface { // resourceVersion may be used to specify what version to begin watching, // which should be the current resourceVersion, and no longer rv+1 // (e.g. reconnecting without missing any updates). - Watch(ctx context.Context, key string, resourceVersion string, filter FilterFunc) (watch.Interface, error) + Watch(ctx context.Context, key string, resourceVersion string, filter Filter) (watch.Interface, error) // WatchList begins watching the specified key's items. Items are decoded into API // objects and any item passing 'filter' are sent down to returned watch.Interface. // resourceVersion may be used to specify what version to begin watching, // which should be the current resourceVersion, and no longer rv+1 // (e.g. reconnecting without missing any updates). - WatchList(ctx context.Context, key string, resourceVersion string, filter FilterFunc) (watch.Interface, error) + WatchList(ctx context.Context, key string, resourceVersion string, filter Filter) (watch.Interface, error) // Get unmarshals json found at key into objPtr. On a not found error, will either // return a zero object of the requested type, or an error, depending on ignoreNotFound. @@ -118,13 +145,13 @@ type Interface interface { // GetToList unmarshals json found at key and opaque it into *List api object // (an object that satisfies the runtime.IsList definition). - GetToList(ctx context.Context, key string, filter FilterFunc, listObj runtime.Object) error + GetToList(ctx context.Context, key string, filter Filter, listObj runtime.Object) error // List unmarshalls jsons found at directory defined by key and opaque them // into *List api object (an object that satisfies runtime.IsList definition). // The returned contents may be delayed, but it is guaranteed that they will // be have at least 'resourceVersion'. - List(ctx context.Context, key string, resourceVersion string, filter FilterFunc, listObj runtime.Object) error + List(ctx context.Context, key string, resourceVersion string, filter Filter, listObj runtime.Object) error // GuaranteedUpdate keeps calling 'tryUpdate()' to update key 'key' (of type 'ptrToType') // retrying the update until success if there is index conflict. @@ -155,17 +182,4 @@ type Interface interface { // } // }) GuaranteedUpdate(ctx context.Context, key string, ptrToType runtime.Object, ignoreNotFound bool, precondtions *Preconditions, tryUpdate UpdateFunc) error - - // Codec provides access to the underlying codec being used by the implementation. - Codec() runtime.Codec -} - -// Config interface allows storage tiers to generate the proper storage.interface -// and reduce the dependencies to encapsulate storage. -type Config interface { - // Creates the Interface base on ConfigObject - NewStorage() (Interface, error) - - // This function is used to enforce membership, and return the underlying type - GetType() string } diff --git a/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/config.go b/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/config.go new file mode 100644 index 00000000..b62f0e27 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/config.go @@ -0,0 +1,47 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storagebackend + +import "k8s.io/kubernetes/pkg/runtime" + +const ( + StorageTypeUnset = "" + StorageTypeETCD2 = "etcd2" + StorageTypeETCD3 = "etcd3" +) + +// Config is configuration for creating a storage backend. +type Config struct { + // Type defines the type of storage backend, e.g. "etcd2", etcd3". Default ("") is "etcd2". + Type string + // Prefix is the prefix to all keys passed to storage.Interface methods. + Prefix string + // ServerList is the list of storage servers to connect with. + ServerList []string + // TLS credentials + KeyFile string + CertFile string + CAFile string + // Quorum indicates that whether read operations should be quorum-level consistent. + Quorum bool + // DeserializationCacheSize is the size of cache of deserialized objects. + // Currently this is only supported in etcd2. + // We will drop the cache once using protobuf. + DeserializationCacheSize int + + Codec runtime.Codec +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/etcd2.go b/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/etcd2.go new file mode 100644 index 00000000..8a572460 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/etcd2.go @@ -0,0 +1,81 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package factory + +import ( + "net" + "net/http" + "time" + + etcd2client "github.com/coreos/etcd/client" + "github.com/coreos/etcd/pkg/transport" + + "k8s.io/kubernetes/pkg/storage" + "k8s.io/kubernetes/pkg/storage/etcd" + "k8s.io/kubernetes/pkg/storage/storagebackend" + utilnet "k8s.io/kubernetes/pkg/util/net" +) + +func newETCD2Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { + tr, err := newTransportForETCD2(c.CertFile, c.KeyFile, c.CAFile) + if err != nil { + return nil, nil, err + } + client, err := newETCD2Client(tr, c.ServerList) + if err != nil { + return nil, nil, err + } + s := etcd.NewEtcdStorage(client, c.Codec, c.Prefix, c.Quorum, c.DeserializationCacheSize) + return s, tr.CloseIdleConnections, nil +} + +func newETCD2Client(tr *http.Transport, serverList []string) (etcd2client.Client, error) { + cli, err := etcd2client.New(etcd2client.Config{ + Endpoints: serverList, + Transport: tr, + }) + if err != nil { + return nil, err + } + + return cli, nil +} + +func newTransportForETCD2(certFile, keyFile, caFile string) (*http.Transport, error) { + info := transport.TLSInfo{ + CertFile: certFile, + KeyFile: keyFile, + CAFile: caFile, + } + cfg, err := info.ClientConfig() + if err != nil { + return nil, err + } + // Copied from etcd.DefaultTransport declaration. + // TODO: Determine if transport needs optimization + tr := utilnet.SetTransportDefaults(&http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, + MaxIdleConnsPerHost: 500, + TLSClientConfig: cfg, + }) + return tr, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/etcd3.go b/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/etcd3.go new file mode 100644 index 00000000..ee5d1d93 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/etcd3.go @@ -0,0 +1,55 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package factory + +import ( + "k8s.io/kubernetes/pkg/storage" + "k8s.io/kubernetes/pkg/storage/etcd3" + "k8s.io/kubernetes/pkg/storage/storagebackend" + + "github.com/coreos/etcd/clientv3" + "github.com/coreos/etcd/pkg/transport" + "golang.org/x/net/context" +) + +func newETCD3Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { + tlsInfo := transport.TLSInfo{ + CertFile: c.CertFile, + KeyFile: c.KeyFile, + CAFile: c.CAFile, + } + tlsConfig, err := tlsInfo.ClientConfig() + if err != nil { + return nil, nil, err + } + + cfg := clientv3.Config{ + Endpoints: c.ServerList, + TLS: tlsConfig, + } + client, err := clientv3.New(cfg) + if err != nil { + return nil, nil, err + } + ctx, cancel := context.WithCancel(context.Background()) + etcd3.StartCompactor(ctx, client) + destroyFunc := func() { + cancel() + client.Close() + } + return etcd3.New(client, c.Codec, c.Prefix), destroyFunc, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/factory.go b/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/factory.go new file mode 100644 index 00000000..647f4f9f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/storage/storagebackend/factory/factory.go @@ -0,0 +1,43 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package factory + +import ( + "fmt" + + "k8s.io/kubernetes/pkg/storage" + "k8s.io/kubernetes/pkg/storage/storagebackend" +) + +// DestroyFunc is to destroy any resources used by the storage returned in Create() together. +type DestroyFunc func() + +// Create creates a storage backend based on given config. +func Create(c storagebackend.Config) (storage.Interface, DestroyFunc, error) { + switch c.Type { + case storagebackend.StorageTypeUnset, storagebackend.StorageTypeETCD2: + return newETCD2Storage(c) + case storagebackend.StorageTypeETCD3: + // TODO: We have the following features to implement: + // - Support secure connection by using key, cert, and CA files. + // - Honor "https" scheme to support secure connection in gRPC. + // - Support non-quorum read. + return newETCD3Storage(c) + default: + return nil, nil, fmt.Errorf("unknown storage type: %s", c.Type) + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/util.go b/vendor/k8s.io/kubernetes/pkg/storage/util.go index 6595a676..571e104d 100644 --- a/vendor/k8s.io/kubernetes/pkg/storage/util.go +++ b/vendor/k8s.io/kubernetes/pkg/storage/util.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ package storage import ( "fmt" "strconv" + "strings" "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/api/validation" @@ -36,6 +37,41 @@ func SimpleUpdate(fn SimpleUpdateFunc) UpdateFunc { } } +// SimpleFilter implements Filter interface. +type SimpleFilter struct { + filterFunc func(runtime.Object) bool + triggerFunc func() []MatchValue +} + +func (s *SimpleFilter) Filter(obj runtime.Object) bool { + return s.filterFunc(obj) +} + +func (s *SimpleFilter) Trigger() []MatchValue { + return s.triggerFunc() +} + +func NewSimpleFilter( + filterFunc func(runtime.Object) bool, + triggerFunc func() []MatchValue) Filter { + return &SimpleFilter{ + filterFunc: filterFunc, + triggerFunc: triggerFunc, + } +} + +func EverythingFunc(runtime.Object) bool { + return true +} + +func NoTriggerFunc() []MatchValue { + return nil +} + +func NoTriggerPublisher(runtime.Object) []MatchValue { + return nil +} + // ParseWatchResourceVersion takes a resource version argument and converts it to // the etcd version we should pass to helper.Watch(). Because resourceVersion is // an opaque value, the default watch behavior for non-zero watch is to watch @@ -88,3 +124,28 @@ func NoNamespaceKeyFunc(prefix string, obj runtime.Object) (string, error) { } return prefix + "/" + name, nil } + +// hasPathPrefix returns true if the string matches pathPrefix exactly, or if is prefixed with pathPrefix at a path segment boundary +func hasPathPrefix(s, pathPrefix string) bool { + // Short circuit if s doesn't contain the prefix at all + if !strings.HasPrefix(s, pathPrefix) { + return false + } + + pathPrefixLength := len(pathPrefix) + + if len(s) == pathPrefixLength { + // Exact match + return true + } + if strings.HasSuffix(pathPrefix, "/") { + // pathPrefix already ensured a path segment boundary + return true + } + if s[pathPrefixLength:pathPrefixLength+1] == "/" { + // The next character in s is a path segment boundary + // Check this instead of normalizing pathPrefix to avoid allocating on every call + return true + } + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/storage/watch_cache.go b/vendor/k8s.io/kubernetes/pkg/storage/watch_cache.go index 3e5ce5d7..b3f5e037 100644 --- a/vendor/k8s.io/kubernetes/pkg/storage/watch_cache.go +++ b/vendor/k8s.io/kubernetes/pkg/storage/watch_cache.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ import ( "k8s.io/kubernetes/pkg/api/meta" "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/runtime" - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/clock" "k8s.io/kubernetes/pkg/watch" ) @@ -96,7 +96,7 @@ type watchCache struct { onEvent func(watchCacheEvent) // for testing timeouts. - clock util.Clock + clock clock.Clock } func newWatchCache(capacity int) *watchCache { @@ -107,7 +107,7 @@ func newWatchCache(capacity int) *watchCache { endIndex: 0, store: cache.NewStore(cache.MetaNamespaceKeyFunc), resourceVersion: 0, - clock: util.RealClock{}, + clock: clock.RealClock{}, } wc.cond = sync.NewCond(wc.RLocker()) return wc diff --git a/vendor/k8s.io/kubernetes/pkg/types/doc.go b/vendor/k8s.io/kubernetes/pkg/types/doc.go index 239a9a5f..783cbcdc 100644 --- a/vendor/k8s.io/kubernetes/pkg/types/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/types/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/types/namespacedname.go b/vendor/k8s.io/kubernetes/pkg/types/namespacedname.go index 895d7c5b..1e2130da 100644 --- a/vendor/k8s.io/kubernetes/pkg/types/namespacedname.go +++ b/vendor/k8s.io/kubernetes/pkg/types/namespacedname.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -16,6 +16,11 @@ limitations under the License. package types +import ( + "fmt" + "strings" +) + // NamespacedName comprises a resource name, with a mandatory namespace, // rendered as "/". Being a type captures intent and // helps make sure that UIDs, namespaced names and non-namespaced names @@ -29,7 +34,27 @@ type NamespacedName struct { Name string } +const ( + Separator = '/' +) + // String returns the general purpose string representation func (n NamespacedName) String() string { - return n.Namespace + "/" + n.Name + return fmt.Sprintf("%s%c%s", n.Namespace, Separator, n.Name) +} + +// NewNamespacedNameFromString parses the provided string and returns a NamespacedName. +// The expected format is as per String() above. +// If the input string is invalid, the returned NamespacedName has all empty string field values. +// This allows a single-value return from this function, while still allowing error checks in the caller. +// Note that an input string which does not include exactly one Separator is not a valid input (as it could never +// have neem returned by String() ) +func NewNamespacedNameFromString(s string) NamespacedName { + nn := NamespacedName{} + result := strings.Split(s, string(Separator)) + if len(result) == 2 { + nn.Namespace = result[0] + nn.Name = result[1] + } + return nn } diff --git a/vendor/k8s.io/kubernetes/pkg/types/uid.go b/vendor/k8s.io/kubernetes/pkg/types/uid.go index de6cd18f..86933922 100644 --- a/vendor/k8s.io/kubernetes/pkg/types/uid.go +++ b/vendor/k8s.io/kubernetes/pkg/types/uid.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/types/unix_user_id.go b/vendor/k8s.io/kubernetes/pkg/types/unix_user_id.go index b59792ab..dc770c11 100644 --- a/vendor/k8s.io/kubernetes/pkg/types/unix_user_id.go +++ b/vendor/k8s.io/kubernetes/pkg/types/unix_user_id.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/cache/cache.go b/vendor/k8s.io/kubernetes/pkg/util/cache/cache.go new file mode 100644 index 00000000..9a09fe54 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/cache/cache.go @@ -0,0 +1,83 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cache + +import ( + "sync" +) + +const ( + shardsCount int = 32 +) + +type Cache []*cacheShard + +func NewCache(maxSize int) Cache { + if maxSize < shardsCount { + maxSize = shardsCount + } + cache := make(Cache, shardsCount) + for i := 0; i < shardsCount; i++ { + cache[i] = &cacheShard{ + items: make(map[uint64]interface{}), + maxSize: maxSize / shardsCount, + } + } + return cache +} + +func (c Cache) getShard(index uint64) *cacheShard { + return c[index%uint64(shardsCount)] +} + +// Returns true if object already existed, false otherwise. +func (c *Cache) Add(index uint64, obj interface{}) bool { + return c.getShard(index).add(index, obj) +} + +func (c *Cache) Get(index uint64) (obj interface{}, found bool) { + return c.getShard(index).get(index) +} + +type cacheShard struct { + items map[uint64]interface{} + sync.RWMutex + maxSize int +} + +// Returns true if object already existed, false otherwise. +func (s *cacheShard) add(index uint64, obj interface{}) bool { + s.Lock() + defer s.Unlock() + _, isOverwrite := s.items[index] + if !isOverwrite && len(s.items) >= s.maxSize { + var randomKey uint64 + for randomKey = range s.items { + break + } + delete(s.items, randomKey) + } + s.items[index] = obj + return isOverwrite +} + +func (s *cacheShard) get(index uint64) (obj interface{}, found bool) { + s.RLock() + defer s.RUnlock() + obj, found = s.items[index] + return +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/cache/lruexpirecache.go b/vendor/k8s.io/kubernetes/pkg/util/cache/lruexpirecache.go new file mode 100644 index 00000000..7e1bb65a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/cache/lruexpirecache.go @@ -0,0 +1,66 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package cache + +import ( + "sync" + "time" + + "github.com/golang/groupcache/lru" +) + +type LRUExpireCache struct { + cache *lru.Cache + lock sync.RWMutex +} + +func NewLRUExpireCache(maxSize int) *LRUExpireCache { + return &LRUExpireCache{cache: lru.New(maxSize)} +} + +type cacheEntry struct { + value interface{} + expireTime time.Time +} + +func (c *LRUExpireCache) Add(key lru.Key, value interface{}, ttl time.Duration) { + c.lock.Lock() + defer c.lock.Unlock() + c.cache.Add(key, &cacheEntry{value, time.Now().Add(ttl)}) + // Remove entry from cache after ttl. + time.AfterFunc(ttl, func() { c.remove(key) }) +} + +func (c *LRUExpireCache) Get(key lru.Key) (interface{}, bool) { + c.lock.RLock() + defer c.lock.RUnlock() + e, ok := c.cache.Get(key) + if !ok { + return nil, false + } + if time.Now().After(e.(*cacheEntry).expireTime) { + go c.remove(key) + return nil, false + } + return e.(*cacheEntry).value, true +} + +func (c *LRUExpireCache) remove(key lru.Key) { + c.lock.Lock() + defer c.lock.Unlock() + c.cache.Remove(key) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/certificates/csr.go b/vendor/k8s.io/kubernetes/pkg/util/certificates/csr.go new file mode 100644 index 00000000..ec8dfa44 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/certificates/csr.go @@ -0,0 +1,138 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package certificates + +import ( + "crypto/ecdsa" + "crypto/elliptic" + cryptorand "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "errors" + "fmt" + "net" + + "k8s.io/kubernetes/pkg/apis/certificates" +) + +// ParseCertificateRequestObject extracts the CSR from the API object and decodes it. +func ParseCertificateRequestObject(obj *certificates.CertificateSigningRequest) (*x509.CertificateRequest, error) { + // extract PEM from request object + pemBytes := obj.Spec.Request + block, _ := pem.Decode(pemBytes) + if block == nil || block.Type != "CERTIFICATE REQUEST" { + return nil, errors.New("PEM block type must be CERTIFICATE REQUEST") + } + csr, err := x509.ParseCertificateRequest(block.Bytes) + if err != nil { + return nil, err + } + return csr, nil +} + +// GeneratePrivateKey returns PEM data containing a generated ECDSA private key +func GeneratePrivateKey() ([]byte, error) { + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), cryptorand.Reader) + if err != nil { + return nil, err + } + + derBytes, err := x509.MarshalECPrivateKey(privateKey) + if err != nil { + return nil, err + } + + privateKeyPemBlock := &pem.Block{ + Type: "EC PRIVATE KEY", + Bytes: derBytes, + } + return pem.EncodeToMemory(privateKeyPemBlock), nil +} + +// ParsePrivateKey returns a private key parsed from a PEM block in the supplied data. +// Recognizes PEM blocks for "EC PRIVATE KEY" and "RSA PRIVATE KEY" +func ParsePrivateKey(keyData []byte) (interface{}, error) { + for { + var privateKeyPemBlock *pem.Block + privateKeyPemBlock, keyData = pem.Decode(keyData) + if privateKeyPemBlock == nil { + // we read all the PEM blocks and didn't recognize one + return nil, fmt.Errorf("no private key PEM block found") + } + + switch privateKeyPemBlock.Type { + case "EC PRIVATE KEY": + return x509.ParseECPrivateKey(privateKeyPemBlock.Bytes) + case "RSA PRIVATE KEY": + return x509.ParsePKCS1PrivateKey(privateKeyPemBlock.Bytes) + } + } +} + +// NewCertificateRequest generates a PEM-encoded CSR using the supplied private key, subject, and SANs. +// privateKey must be a *ecdsa.PrivateKey or *rsa.PrivateKey. +func NewCertificateRequest(privateKey interface{}, subject *pkix.Name, dnsSANs []string, ipSANs []net.IP) (csr []byte, err error) { + var sigType x509.SignatureAlgorithm + + switch privateKey := privateKey.(type) { + case *ecdsa.PrivateKey: + switch privateKey.Curve { + case elliptic.P256(): + sigType = x509.ECDSAWithSHA256 + case elliptic.P384(): + sigType = x509.ECDSAWithSHA384 + case elliptic.P521(): + sigType = x509.ECDSAWithSHA512 + default: + return nil, fmt.Errorf("unknown elliptic curve: %v", privateKey.Curve) + } + case *rsa.PrivateKey: + keySize := privateKey.N.BitLen() + switch { + case keySize >= 4096: + sigType = x509.SHA512WithRSA + case keySize >= 3072: + sigType = x509.SHA384WithRSA + default: + sigType = x509.SHA256WithRSA + } + + default: + return nil, fmt.Errorf("unsupported key type: %T", privateKey) + } + + template := &x509.CertificateRequest{ + Subject: *subject, + SignatureAlgorithm: sigType, + DNSNames: dnsSANs, + IPAddresses: ipSANs, + } + + csr, err = x509.CreateCertificateRequest(cryptorand.Reader, template, privateKey) + if err != nil { + return nil, err + } + + csrPemBlock := &pem.Block{ + Type: "CERTIFICATE REQUEST", + Bytes: csr, + } + + return pem.EncodeToMemory(csrPemBlock), nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/clock/clock.go b/vendor/k8s.io/kubernetes/pkg/util/clock/clock.go new file mode 100644 index 00000000..2ea1b53c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/clock/clock.go @@ -0,0 +1,218 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package clock + +import ( + "sync" + "time" +) + +// Clock allows for injecting fake or real clocks into code that +// needs to do arbitrary things based on time. +type Clock interface { + Now() time.Time + Since(time.Time) time.Duration + After(d time.Duration) <-chan time.Time + Sleep(d time.Duration) + Tick(d time.Duration) <-chan time.Time +} + +var ( + _ = Clock(RealClock{}) + _ = Clock(&FakeClock{}) + _ = Clock(&IntervalClock{}) +) + +// RealClock really calls time.Now() +type RealClock struct{} + +// Now returns the current time. +func (RealClock) Now() time.Time { + return time.Now() +} + +// Since returns time since the specified timestamp. +func (RealClock) Since(ts time.Time) time.Duration { + return time.Since(ts) +} + +// Same as time.After(d). +func (RealClock) After(d time.Duration) <-chan time.Time { + return time.After(d) +} + +func (RealClock) Tick(d time.Duration) <-chan time.Time { + return time.Tick(d) +} + +func (RealClock) Sleep(d time.Duration) { + time.Sleep(d) +} + +// FakeClock implements Clock, but returns an arbitrary time. +type FakeClock struct { + lock sync.RWMutex + time time.Time + + // waiters are waiting for the fake time to pass their specified time + waiters []fakeClockWaiter +} + +type fakeClockWaiter struct { + targetTime time.Time + stepInterval time.Duration + skipIfBlocked bool + destChan chan<- time.Time +} + +func NewFakeClock(t time.Time) *FakeClock { + return &FakeClock{ + time: t, + } +} + +// Now returns f's time. +func (f *FakeClock) Now() time.Time { + f.lock.RLock() + defer f.lock.RUnlock() + return f.time +} + +// Since returns time since the time in f. +func (f *FakeClock) Since(ts time.Time) time.Duration { + f.lock.RLock() + defer f.lock.RUnlock() + return f.time.Sub(ts) +} + +// Fake version of time.After(d). +func (f *FakeClock) After(d time.Duration) <-chan time.Time { + f.lock.Lock() + defer f.lock.Unlock() + stopTime := f.time.Add(d) + ch := make(chan time.Time, 1) // Don't block! + f.waiters = append(f.waiters, fakeClockWaiter{ + targetTime: stopTime, + destChan: ch, + }) + return ch +} + +func (f *FakeClock) Tick(d time.Duration) <-chan time.Time { + f.lock.Lock() + defer f.lock.Unlock() + tickTime := f.time.Add(d) + ch := make(chan time.Time, 1) // hold one tick + f.waiters = append(f.waiters, fakeClockWaiter{ + targetTime: tickTime, + stepInterval: d, + skipIfBlocked: true, + destChan: ch, + }) + + return ch +} + +// Move clock by Duration, notify anyone that's called After or Tick +func (f *FakeClock) Step(d time.Duration) { + f.lock.Lock() + defer f.lock.Unlock() + f.setTimeLocked(f.time.Add(d)) +} + +// Sets the time. +func (f *FakeClock) SetTime(t time.Time) { + f.lock.Lock() + defer f.lock.Unlock() + f.setTimeLocked(t) +} + +// Actually changes the time and checks any waiters. f must be write-locked. +func (f *FakeClock) setTimeLocked(t time.Time) { + f.time = t + newWaiters := make([]fakeClockWaiter, 0, len(f.waiters)) + for i := range f.waiters { + w := &f.waiters[i] + if !w.targetTime.After(t) { + + if w.skipIfBlocked { + select { + case w.destChan <- t: + default: + } + } else { + w.destChan <- t + } + + if w.stepInterval > 0 { + for !w.targetTime.After(t) { + w.targetTime = w.targetTime.Add(w.stepInterval) + } + newWaiters = append(newWaiters, *w) + } + + } else { + newWaiters = append(newWaiters, f.waiters[i]) + } + } + f.waiters = newWaiters +} + +// Returns true if After has been called on f but not yet satisfied (so you can +// write race-free tests). +func (f *FakeClock) HasWaiters() bool { + f.lock.RLock() + defer f.lock.RUnlock() + return len(f.waiters) > 0 +} + +func (f *FakeClock) Sleep(d time.Duration) { + f.Step(d) +} + +// IntervalClock implements Clock, but each invocation of Now steps the clock forward the specified duration +type IntervalClock struct { + Time time.Time + Duration time.Duration +} + +// Now returns i's time. +func (i *IntervalClock) Now() time.Time { + i.Time = i.Time.Add(i.Duration) + return i.Time +} + +// Since returns time since the time in i. +func (i *IntervalClock) Since(ts time.Time) time.Duration { + return i.Time.Sub(ts) +} + +// Unimplemented, will panic. +// TODO: make interval clock use FakeClock so this can be implemented. +func (*IntervalClock) After(d time.Duration) <-chan time.Time { + panic("IntervalClock doesn't implement After") +} + +// Unimplemented, will panic. +// TODO: make interval clock use FakeClock so this can be implemented. +func (*IntervalClock) Tick(d time.Duration) <-chan time.Time { + panic("IntervalClock doesn't implement Tick") +} + +func (*IntervalClock) Sleep(d time.Duration) { + panic("IntervalClock doesn't implement Sleep") +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/config/config.go b/vendor/k8s.io/kubernetes/pkg/util/config/config.go new file mode 100644 index 00000000..30defee8 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/config/config.go @@ -0,0 +1,140 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "sync" + + "k8s.io/kubernetes/pkg/util/wait" +) + +type Merger interface { + // Invoked when a change from a source is received. May also function as an incremental + // merger if you wish to consume changes incrementally. Must be reentrant when more than + // one source is defined. + Merge(source string, update interface{}) error +} + +// MergeFunc implements the Merger interface +type MergeFunc func(source string, update interface{}) error + +func (f MergeFunc) Merge(source string, update interface{}) error { + return f(source, update) +} + +// Mux is a class for merging configuration from multiple sources. Changes are +// pushed via channels and sent to the merge function. +type Mux struct { + // Invoked when an update is sent to a source. + merger Merger + + // Sources and their lock. + sourceLock sync.RWMutex + // Maps source names to channels + sources map[string]chan interface{} +} + +// NewMux creates a new mux that can merge changes from multiple sources. +func NewMux(merger Merger) *Mux { + mux := &Mux{ + sources: make(map[string]chan interface{}), + merger: merger, + } + return mux +} + +// Channel returns a channel where a configuration source +// can send updates of new configurations. Multiple calls with the same +// source will return the same channel. This allows change and state based sources +// to use the same channel. Different source names however will be treated as a +// union. +func (m *Mux) Channel(source string) chan interface{} { + if len(source) == 0 { + panic("Channel given an empty name") + } + m.sourceLock.Lock() + defer m.sourceLock.Unlock() + channel, exists := m.sources[source] + if exists { + return channel + } + newChannel := make(chan interface{}) + m.sources[source] = newChannel + go wait.Until(func() { m.listen(source, newChannel) }, 0, wait.NeverStop) + return newChannel +} + +func (m *Mux) listen(source string, listenChannel <-chan interface{}) { + for update := range listenChannel { + m.merger.Merge(source, update) + } +} + +// Accessor is an interface for retrieving the current merge state. +type Accessor interface { + // MergedState returns a representation of the current merge state. + // Must be reentrant when more than one source is defined. + MergedState() interface{} +} + +// AccessorFunc implements the Accessor interface. +type AccessorFunc func() interface{} + +func (f AccessorFunc) MergedState() interface{} { + return f() +} + +type Listener interface { + // OnUpdate is invoked when a change is made to an object. + OnUpdate(instance interface{}) +} + +// ListenerFunc receives a representation of the change or object. +type ListenerFunc func(instance interface{}) + +func (f ListenerFunc) OnUpdate(instance interface{}) { + f(instance) +} + +type Broadcaster struct { + // Listeners for changes and their lock. + listenerLock sync.RWMutex + listeners []Listener +} + +// NewBroadcaster registers a set of listeners that support the Listener interface +// and notifies them all on changes. +func NewBroadcaster() *Broadcaster { + return &Broadcaster{} +} + +// Add registers listener to receive updates of changes. +func (b *Broadcaster) Add(listener Listener) { + b.listenerLock.Lock() + defer b.listenerLock.Unlock() + b.listeners = append(b.listeners, listener) +} + +// Notify notifies all listeners. +func (b *Broadcaster) Notify(instance interface{}) { + b.listenerLock.RLock() + listeners := b.listeners + b.listenerLock.RUnlock() + for _, listener := range listeners { + listener.OnUpdate(instance) + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/config/configuration_map.go b/vendor/k8s.io/kubernetes/pkg/util/config/configuration_map.go new file mode 100644 index 00000000..0acbde56 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/config/configuration_map.go @@ -0,0 +1,53 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "fmt" + "sort" + "strings" +) + +type ConfigurationMap map[string]string + +func (m *ConfigurationMap) String() string { + pairs := []string{} + for k, v := range *m { + pairs = append(pairs, fmt.Sprintf("%s=%s", k, v)) + } + sort.Strings(pairs) + return strings.Join(pairs, ",") +} + +func (m *ConfigurationMap) Set(value string) error { + for _, s := range strings.Split(value, ",") { + if len(s) == 0 { + continue + } + arr := strings.SplitN(s, "=", 2) + if len(arr) == 2 { + (*m)[strings.TrimSpace(arr[0])] = strings.TrimSpace(arr[1]) + } else { + (*m)[strings.TrimSpace(arr[0])] = "" + } + } + return nil +} + +func (*ConfigurationMap) Type() string { + return "mapStringString" +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/config/doc.go b/vendor/k8s.io/kubernetes/pkg/util/config/doc.go new file mode 100644 index 00000000..5dbb37d4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/config/doc.go @@ -0,0 +1,20 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package config provides utility objects for decoupling sources of configuration and the +// actual configuration state. Consumers must implement the Merger interface to unify +// the sources of change into an object. +package config diff --git a/vendor/k8s.io/kubernetes/pkg/util/config/feature_gate.go b/vendor/k8s.io/kubernetes/pkg/util/config/feature_gate.go new file mode 100644 index 00000000..c8782c4c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/config/feature_gate.go @@ -0,0 +1,223 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package config + +import ( + "fmt" + "sort" + "strconv" + "strings" + + "github.com/golang/glog" + "github.com/spf13/pflag" +) + +const ( + flagName = "feature-gates" + + // All known feature keys + // To add a new feature, define a key for it below and add + // a featureSpec entry to knownFeatures. + + // allAlphaGate is a global toggle for alpha features. Per-feature key + // values override the default set by allAlphaGate. Examples: + // AllAlpha=false,NewFeature=true will result in newFeature=true + // AllAlpha=true,NewFeature=false will result in newFeature=false + allAlphaGate = "AllAlpha" + externalTrafficLocalOnly = "AllowExtTrafficLocalEndpoints" + appArmor = "AppArmor" + dynamicKubeletConfig = "DynamicKubeletConfig" + dynamicVolumeProvisioning = "DynamicVolumeProvisioning" +) + +var ( + // Default values for recorded features. Every new feature gate should be + // represented here. + knownFeatures = map[string]featureSpec{ + allAlphaGate: {false, alpha}, + externalTrafficLocalOnly: {false, alpha}, + appArmor: {true, beta}, + dynamicKubeletConfig: {false, alpha}, + dynamicVolumeProvisioning: {true, alpha}, + } + + // Special handling for a few gates. + specialFeatures = map[string]func(f *featureGate, val bool){ + allAlphaGate: setUnsetAlphaGates, + } + + // DefaultFeatureGate is a shared global FeatureGate. + DefaultFeatureGate = &featureGate{ + known: knownFeatures, + special: specialFeatures, + } +) + +type featureSpec struct { + enabled bool + prerelease prerelease +} + +type prerelease string + +const ( + // Values for prerelease. + alpha = prerelease("ALPHA") + beta = prerelease("BETA") + ga = prerelease("") +) + +// FeatureGate parses and stores flag gates for known features from +// a string like feature1=true,feature2=false,... +type FeatureGate interface { + AddFlag(fs *pflag.FlagSet) + + // Every feature gate should add method here following this template: + // + // // owner: @username + // // alpha: v1.4 + // MyFeature() bool + + // owner: @timstclair + // beta: v1.4 + AppArmor() bool + + // owner: @girishkalele + // alpha: v1.4 + ExternalTrafficLocalOnly() bool + + // owner: @saad-ali + // alpha: v1.3 + DynamicVolumeProvisioning() bool + + // owner: mtaufen + // alpha: v1.4 + DynamicKubeletConfig() bool +} + +// featureGate implements FeatureGate as well as pflag.Value for flag parsing. +type featureGate struct { + known map[string]featureSpec + special map[string]func(*featureGate, bool) + enabled map[string]bool +} + +func setUnsetAlphaGates(f *featureGate, val bool) { + for k, v := range f.known { + if v.prerelease == alpha { + if _, found := f.enabled[k]; !found { + f.enabled[k] = val + } + } + } +} + +// Set, String, and Type implement pflag.Value + +// Set Parses a string of the form // "key1=value1,key2=value2,..." into a +// map[string]bool of known keys or returns an error. +func (f *featureGate) Set(value string) error { + f.enabled = make(map[string]bool) + for _, s := range strings.Split(value, ",") { + if len(s) == 0 { + continue + } + arr := strings.SplitN(s, "=", 2) + k := strings.TrimSpace(arr[0]) + _, ok := f.known[k] + if !ok { + return fmt.Errorf("unrecognized key: %s", k) + } + if len(arr) != 2 { + return fmt.Errorf("missing bool value for %s", k) + } + v := strings.TrimSpace(arr[1]) + boolValue, err := strconv.ParseBool(v) + if err != nil { + return fmt.Errorf("invalid value of %s: %s, err: %v", k, v, err) + } + f.enabled[k] = boolValue + + // Handle "special" features like "all alpha gates" + if fn, found := f.special[k]; found { + fn(f, boolValue) + } + } + + glog.Infof("feature gates: %v", f.enabled) + return nil +} + +func (f *featureGate) String() string { + pairs := []string{} + for k, v := range f.enabled { + pairs = append(pairs, fmt.Sprintf("%s=%t", k, v)) + } + sort.Strings(pairs) + return strings.Join(pairs, ",") +} + +func (f *featureGate) Type() string { + return "mapStringBool" +} + +// ExternalTrafficLocalOnly returns value for AllowExtTrafficLocalEndpoints +func (f *featureGate) ExternalTrafficLocalOnly() bool { + return f.lookup(externalTrafficLocalOnly) +} + +// AppArmor returns the value for the AppArmor feature gate. +func (f *featureGate) AppArmor() bool { + return f.lookup(appArmor) +} + +// DynamicKubeletConfig returns value for dynamicKubeletConfig +func (f *featureGate) DynamicKubeletConfig() bool { + return f.lookup(dynamicKubeletConfig) +} + +// DynamicVolumeProvisioning returns value for dynamicVolumeProvisioning +func (f *featureGate) DynamicVolumeProvisioning() bool { + return f.lookup(dynamicVolumeProvisioning) +} + +func (f *featureGate) lookup(key string) bool { + defaultValue := f.known[key].enabled + if f.enabled != nil { + if v, ok := f.enabled[key]; ok { + return v + } + } + return defaultValue + +} + +// AddFlag adds a flag for setting global feature gates to the specified FlagSet. +func (f *featureGate) AddFlag(fs *pflag.FlagSet) { + var known []string + for k, v := range f.known { + pre := "" + if v.prerelease != ga { + pre = fmt.Sprintf("%s - ", v.prerelease) + } + known = append(known, fmt.Sprintf("%s=true|false (%sdefault=%t)", k, pre, v.enabled)) + } + sort.Strings(known) + fs.Var(f, flagName, ""+ + "A set of key=value pairs that describe feature gates for alpha/experimental features. "+ + "Options are:\n"+strings.Join(known, "\n")) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/crypto/crypto.go b/vendor/k8s.io/kubernetes/pkg/util/crypto/crypto.go index f4366436..7e926450 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/crypto/crypto.go +++ b/vendor/k8s.io/kubernetes/pkg/util/crypto/crypto.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -33,14 +33,14 @@ import ( "time" ) -// ShouldGenSelfSignedCerts returns false if the certificate or key files already exists, -// otherwise returns true. -func ShouldGenSelfSignedCerts(certPath, keyPath string) bool { +// FoundCertOrKey returns true if the certificate or key files already exists, +// otherwise returns false. +func FoundCertOrKey(certPath, keyPath string) bool { if canReadFile(certPath) || canReadFile(keyPath) { - return false + return true } - return true + return false } // If the file represented by path exists and @@ -109,24 +109,46 @@ func GenerateSelfSignedCert(host, certPath, keyPath string, alternateIPs []net.I } // Write cert - if err := os.MkdirAll(filepath.Dir(certPath), os.FileMode(0755)); err != nil { - return err - } - if err := ioutil.WriteFile(certPath, certBuffer.Bytes(), os.FileMode(0644)); err != nil { + if err := WriteCertToPath(certPath, certBuffer.Bytes()); err != nil { return err } // Write key - if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { - return err - } - if err := ioutil.WriteFile(keyPath, keyBuffer.Bytes(), os.FileMode(0600)); err != nil { + if err := WriteKeyToPath(keyPath, keyBuffer.Bytes()); err != nil { return err } return nil } +// WriteCertToPath writes the pem-encoded certificate data to certPath. +// The certificate file will be created with file mode 0644. +// If the certificate file already exists, it will be overwritten. +// The parent directory of the certPath will be created as needed with file mode 0755. +func WriteCertToPath(certPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(certPath), os.FileMode(0755)); err != nil { + return err + } + if err := ioutil.WriteFile(certPath, data, os.FileMode(0644)); err != nil { + return err + } + return nil +} + +// WriteKeyToPath writes the pem-encoded key data to keyPath. +// The key file will be created with file mode 0600. +// If the key file already exists, it will be overwritten. +// The parent directory of the keyPath will be created as needed with file mode 0755. +func WriteKeyToPath(keyPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { + return err + } + if err := ioutil.WriteFile(keyPath, data, os.FileMode(0600)); err != nil { + return err + } + return nil +} + // CertPoolFromFile returns an x509.CertPool containing the certificates in the given PEM-encoded file. // Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates func CertPoolFromFile(filename string) (*x509.CertPool, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/util/diff/diff.go b/vendor/k8s.io/kubernetes/pkg/util/diff/diff.go index b9771375..aa83a674 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/diff/diff.go +++ b/vendor/k8s.io/kubernetes/pkg/util/diff/diff.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -145,7 +145,7 @@ func objectReflectDiff(path *field.Path, a, b reflect.Value) []diff { } } return changes - case reflect.Ptr: + case reflect.Ptr, reflect.Interface: if a.IsNil() || b.IsNil() { switch { case a.IsNil() && b.IsNil(): @@ -199,7 +199,7 @@ func objectReflectDiff(path *field.Path, a, b reflect.Value) []diff { if reflect.DeepEqual(a.MapIndex(key).Interface(), b.MapIndex(key).Interface()) { continue } - missing = append(missing, diff{path: path.Key(fmt.Sprintf("%s", key.Interface())), a: a.MapIndex(key).Interface(), b: b.MapIndex(key).Interface()}) + missing = append(missing, objectReflectDiff(path.Key(fmt.Sprintf("%s", key.Interface())), a.MapIndex(key), b.MapIndex(key))...) continue } missing = append(missing, diff{path: path.Key(fmt.Sprintf("%s", key.Interface())), a: nil, b: b.MapIndex(key).Interface()}) diff --git a/vendor/k8s.io/kubernetes/pkg/util/doc.go b/vendor/k8s.io/kubernetes/pkg/util/doc.go index cd3f0823..1747db55 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/util/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/errors/doc.go b/vendor/k8s.io/kubernetes/pkg/util/errors/doc.go index b0af0f05..b3b39bc3 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/errors/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/util/errors/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/errors/errors.go b/vendor/k8s.io/kubernetes/pkg/util/errors/errors.go index df3adaf3..42631f21 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/errors/errors.go +++ b/vendor/k8s.io/kubernetes/pkg/util/errors/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -31,11 +31,23 @@ type Aggregate interface { // NewAggregate converts a slice of errors into an Aggregate interface, which // is itself an implementation of the error interface. If the slice is empty, // this returns nil. +// It will check if any of the element of input error list is nil, to avoid +// nil pointer panic when call Error(). func NewAggregate(errlist []error) Aggregate { if len(errlist) == 0 { return nil } - return aggregate(errlist) + // In case of input error list contains nil + var errs []error + for _, e := range errlist { + if e != nil { + errs = append(errs, e) + } + } + if len(errs) == 0 { + return nil + } + return aggregate(errs) } // This helper implements the error and Errors interfaces. Keeping it private diff --git a/vendor/k8s.io/kubernetes/pkg/util/exec/doc.go b/vendor/k8s.io/kubernetes/pkg/util/exec/doc.go new file mode 100644 index 00000000..8b824d24 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/exec/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package exec provides an injectable interface and implementations for running commands. +package exec diff --git a/vendor/k8s.io/kubernetes/pkg/util/exec/exec.go b/vendor/k8s.io/kubernetes/pkg/util/exec/exec.go new file mode 100644 index 00000000..1aeba036 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/exec/exec.go @@ -0,0 +1,167 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package exec + +import ( + "io" + osexec "os/exec" + "syscall" +) + +// ErrExecutableNotFound is returned if the executable is not found. +var ErrExecutableNotFound = osexec.ErrNotFound + +// Interface is an interface that presents a subset of the os/exec API. Use this +// when you want to inject fakeable/mockable exec behavior. +type Interface interface { + // Command returns a Cmd instance which can be used to run a single command. + // This follows the pattern of package os/exec. + Command(cmd string, args ...string) Cmd + + // LookPath wraps os/exec.LookPath + LookPath(file string) (string, error) +} + +// Cmd is an interface that presents an API that is very similar to Cmd from os/exec. +// As more functionality is needed, this can grow. Since Cmd is a struct, we will have +// to replace fields with get/set method pairs. +type Cmd interface { + // CombinedOutput runs the command and returns its combined standard output + // and standard error. This follows the pattern of package os/exec. + CombinedOutput() ([]byte, error) + // Output runs the command and returns standard output, but not standard err + Output() ([]byte, error) + SetDir(dir string) + SetStdin(in io.Reader) + SetStdout(out io.Writer) +} + +// ExitError is an interface that presents an API similar to os.ProcessState, which is +// what ExitError from os/exec is. This is designed to make testing a bit easier and +// probably loses some of the cross-platform properties of the underlying library. +type ExitError interface { + String() string + Error() string + Exited() bool + ExitStatus() int +} + +// Implements Interface in terms of really exec()ing. +type executor struct{} + +// New returns a new Interface which will os/exec to run commands. +func New() Interface { + return &executor{} +} + +// Command is part of the Interface interface. +func (executor *executor) Command(cmd string, args ...string) Cmd { + return (*cmdWrapper)(osexec.Command(cmd, args...)) +} + +// LookPath is part of the Interface interface +func (executor *executor) LookPath(file string) (string, error) { + return osexec.LookPath(file) +} + +// Wraps exec.Cmd so we can capture errors. +type cmdWrapper osexec.Cmd + +func (cmd *cmdWrapper) SetDir(dir string) { + cmd.Dir = dir +} + +func (cmd *cmdWrapper) SetStdin(in io.Reader) { + cmd.Stdin = in +} + +func (cmd *cmdWrapper) SetStdout(out io.Writer) { + cmd.Stdout = out +} + +// CombinedOutput is part of the Cmd interface. +func (cmd *cmdWrapper) CombinedOutput() ([]byte, error) { + out, err := (*osexec.Cmd)(cmd).CombinedOutput() + if err != nil { + return out, handleError(err) + } + return out, nil +} + +func (cmd *cmdWrapper) Output() ([]byte, error) { + out, err := (*osexec.Cmd)(cmd).Output() + if err != nil { + return out, handleError(err) + } + return out, nil +} + +func handleError(err error) error { + if ee, ok := err.(*osexec.ExitError); ok { + // Force a compile fail if exitErrorWrapper can't convert to ExitError. + var x ExitError = &ExitErrorWrapper{ee} + return x + } + if ee, ok := err.(*osexec.Error); ok { + if ee.Err == osexec.ErrNotFound { + return ErrExecutableNotFound + } + } + return err +} + +// ExitErrorWrapper is an implementation of ExitError in terms of os/exec ExitError. +// Note: standard exec.ExitError is type *os.ProcessState, which already implements Exited(). +type ExitErrorWrapper struct { + *osexec.ExitError +} + +var _ ExitError = ExitErrorWrapper{} + +// ExitStatus is part of the ExitError interface. +func (eew ExitErrorWrapper) ExitStatus() int { + ws, ok := eew.Sys().(syscall.WaitStatus) + if !ok { + panic("can't call ExitStatus() on a non-WaitStatus exitErrorWrapper") + } + return ws.ExitStatus() +} + +// CodeExitError is an implementation of ExitError consisting of an error object +// and an exit code (the upper bits of os.exec.ExitStatus). +type CodeExitError struct { + Err error + Code int +} + +var _ ExitError = CodeExitError{} + +func (e CodeExitError) Error() string { + return e.Err.Error() +} + +func (e CodeExitError) String() string { + return e.Err.Error() +} + +func (e CodeExitError) Exited() bool { + return true +} + +func (e CodeExitError) ExitStatus() int { + return e.Code +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/exec/fake_exec.go b/vendor/k8s.io/kubernetes/pkg/util/exec/fake_exec.go new file mode 100644 index 00000000..bd260819 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/exec/fake_exec.go @@ -0,0 +1,112 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package exec + +import ( + "fmt" + "io" +) + +// A simple scripted Interface type. +type FakeExec struct { + CommandScript []FakeCommandAction + CommandCalls int + LookPathFunc func(string) (string, error) +} + +type FakeCommandAction func(cmd string, args ...string) Cmd + +func (fake *FakeExec) Command(cmd string, args ...string) Cmd { + if fake.CommandCalls > len(fake.CommandScript)-1 { + panic(fmt.Sprintf("ran out of Command() actions. Could not handle command [%d]: %s args: %v", fake.CommandCalls, cmd, args)) + } + i := fake.CommandCalls + fake.CommandCalls++ + return fake.CommandScript[i](cmd, args...) +} + +func (fake *FakeExec) LookPath(file string) (string, error) { + return fake.LookPathFunc(file) +} + +// A simple scripted Cmd type. +type FakeCmd struct { + Argv []string + CombinedOutputScript []FakeCombinedOutputAction + CombinedOutputCalls int + CombinedOutputLog [][]string + Dirs []string + Stdin io.Reader + Stdout io.Writer +} + +func InitFakeCmd(fake *FakeCmd, cmd string, args ...string) Cmd { + fake.Argv = append([]string{cmd}, args...) + return fake +} + +type FakeCombinedOutputAction func() ([]byte, error) + +func (fake *FakeCmd) SetDir(dir string) { + fake.Dirs = append(fake.Dirs, dir) +} + +func (fake *FakeCmd) SetStdin(in io.Reader) { + fake.Stdin = in +} + +func (fake *FakeCmd) SetStdout(out io.Writer) { + fake.Stdout = out +} + +func (fake *FakeCmd) CombinedOutput() ([]byte, error) { + if fake.CombinedOutputCalls > len(fake.CombinedOutputScript)-1 { + panic("ran out of CombinedOutput() actions") + } + if fake.CombinedOutputLog == nil { + fake.CombinedOutputLog = [][]string{} + } + i := fake.CombinedOutputCalls + fake.CombinedOutputLog = append(fake.CombinedOutputLog, append([]string{}, fake.Argv...)) + fake.CombinedOutputCalls++ + return fake.CombinedOutputScript[i]() +} + +func (fake *FakeCmd) Output() ([]byte, error) { + return nil, fmt.Errorf("unimplemented") +} + +// A simple fake ExitError type. +type FakeExitError struct { + Status int +} + +func (fake *FakeExitError) String() string { + return fmt.Sprintf("exit %d", fake.Status) +} + +func (fake *FakeExitError) Error() string { + return fake.String() +} + +func (fake *FakeExitError) Exited() bool { + return true +} + +func (fake *FakeExitError) ExitStatus() int { + return fake.Status +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/flag/flags.go b/vendor/k8s.io/kubernetes/pkg/util/flag/flags.go index 94b9f733..24e961f2 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/flag/flags.go +++ b/vendor/k8s.io/kubernetes/pkg/util/flag/flags.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/flag/tristate.go b/vendor/k8s.io/kubernetes/pkg/util/flag/tristate.go index a9359695..cf16376b 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/flag/tristate.go +++ b/vendor/k8s.io/kubernetes/pkg/util/flag/tristate.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/flowcontrol/backoff.go b/vendor/k8s.io/kubernetes/pkg/util/flowcontrol/backoff.go index 1898c55c..2d91cc5e 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/flowcontrol/backoff.go +++ b/vendor/k8s.io/kubernetes/pkg/util/flowcontrol/backoff.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ import ( "sync" "time" - "k8s.io/kubernetes/pkg/util" + "k8s.io/kubernetes/pkg/util/clock" "k8s.io/kubernetes/pkg/util/integer" ) @@ -31,13 +31,13 @@ type backoffEntry struct { type Backoff struct { sync.Mutex - Clock util.Clock + Clock clock.Clock defaultDuration time.Duration maxDuration time.Duration perItemBackoff map[string]*backoffEntry } -func NewFakeBackOff(initial, max time.Duration, tc *util.FakeClock) *Backoff { +func NewFakeBackOff(initial, max time.Duration, tc *clock.FakeClock) *Backoff { return &Backoff{ perItemBackoff: map[string]*backoffEntry{}, Clock: tc, @@ -49,7 +49,7 @@ func NewFakeBackOff(initial, max time.Duration, tc *util.FakeClock) *Backoff { func NewBackOff(initial, max time.Duration) *Backoff { return &Backoff{ perItemBackoff: map[string]*backoffEntry{}, - Clock: util.RealClock{}, + Clock: clock.RealClock{}, defaultDuration: initial, maxDuration: max, } diff --git a/vendor/k8s.io/kubernetes/pkg/util/flowcontrol/throttle.go b/vendor/k8s.io/kubernetes/pkg/util/flowcontrol/throttle.go index a63817ca..881a2f57 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/flowcontrol/throttle.go +++ b/vendor/k8s.io/kubernetes/pkg/util/flowcontrol/throttle.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -35,10 +35,13 @@ type RateLimiter interface { // Usually we use token bucket rate limiter. In that case, // 1.0 means no tokens are available; 0.0 means we have a full bucket of tokens to use. Saturation() float64 + // QPS returns QPS of this rate limiter + QPS() float32 } type tokenBucketRateLimiter struct { limiter *ratelimit.Bucket + qps float32 } // NewTokenBucketRateLimiter creates a rate limiter which implements a token bucket approach. @@ -48,7 +51,10 @@ type tokenBucketRateLimiter struct { // The maximum number of tokens in the bucket is capped at 'burst'. func NewTokenBucketRateLimiter(qps float32, burst int) RateLimiter { limiter := ratelimit.NewBucketWithRate(float64(qps), int64(burst)) - return &tokenBucketRateLimiter{limiter} + return &tokenBucketRateLimiter{ + limiter: limiter, + qps: qps, + } } func (t *tokenBucketRateLimiter) TryAccept() bool { @@ -69,6 +75,10 @@ func (t *tokenBucketRateLimiter) Accept() { func (t *tokenBucketRateLimiter) Stop() { } +func (t *tokenBucketRateLimiter) QPS() float32 { + return t.qps +} + type fakeAlwaysRateLimiter struct{} func NewFakeAlwaysRateLimiter() RateLimiter { @@ -87,16 +97,18 @@ func (t *fakeAlwaysRateLimiter) Stop() {} func (t *fakeAlwaysRateLimiter) Accept() {} +func (t *fakeAlwaysRateLimiter) QPS() float32 { + return 1 +} + type fakeNeverRateLimiter struct { wg sync.WaitGroup } func NewFakeNeverRateLimiter() RateLimiter { - wg := sync.WaitGroup{} - wg.Add(1) - return &fakeNeverRateLimiter{ - wg: wg, - } + rl := fakeNeverRateLimiter{} + rl.wg.Add(1) + return &rl } func (t *fakeNeverRateLimiter) TryAccept() bool { @@ -114,3 +126,7 @@ func (t *fakeNeverRateLimiter) Stop() { func (t *fakeNeverRateLimiter) Accept() { t.wg.Wait() } + +func (t *fakeNeverRateLimiter) QPS() float32 { + return 1 +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/framer/framer.go b/vendor/k8s.io/kubernetes/pkg/util/framer/framer.go index 7ca806fa..066680f4 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/framer/framer.go +++ b/vendor/k8s.io/kubernetes/pkg/util/framer/framer.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/hash/hash.go b/vendor/k8s.io/kubernetes/pkg/util/hash/hash.go index 95fd32ab..803f066a 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/hash/hash.go +++ b/vendor/k8s.io/kubernetes/pkg/util/hash/hash.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/homedir/homedir.go b/vendor/k8s.io/kubernetes/pkg/util/homedir/homedir.go index 57171e10..40347549 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/homedir/homedir.go +++ b/vendor/k8s.io/kubernetes/pkg/util/homedir/homedir.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/integer/integer.go b/vendor/k8s.io/kubernetes/pkg/util/integer/integer.go index c51cd952..c6ea106f 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/integer/integer.go +++ b/vendor/k8s.io/kubernetes/pkg/util/integer/integer.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,6 +30,20 @@ func IntMin(a, b int) int { return a } +func Int32Max(a, b int32) int32 { + if b > a { + return b + } + return a +} + +func Int32Min(a, b int32) int32 { + if b < a { + return b + } + return a +} + func Int64Max(a, b int64) int64 { if b > a { return b @@ -43,3 +57,11 @@ func Int64Min(a, b int64) int64 { } return a } + +// RoundToInt32 rounds floats into integer numbers. +func RoundToInt32(a float64) int32 { + if a < 0 { + return int32(a - 0.5) + } + return int32(a + 0.5) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/interrupt/interrupt.go b/vendor/k8s.io/kubernetes/pkg/util/interrupt/interrupt.go new file mode 100644 index 00000000..0265b9fb --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/interrupt/interrupt.go @@ -0,0 +1,104 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package interrupt + +import ( + "os" + "os/signal" + "sync" + "syscall" +) + +// terminationSignals are signals that cause the program to exit in the +// supported platforms (linux, darwin, windows). +var terminationSignals = []os.Signal{syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT} + +// Handler guarantees execution of notifications after a critical section (the function passed +// to a Run method), even in the presence of process termination. It guarantees exactly once +// invocation of the provided notify functions. +type Handler struct { + notify []func() + final func(os.Signal) + once sync.Once +} + +// Chain creates a new handler that invokes all notify functions when the critical section exits +// and then invokes the optional handler's notifications. This allows critical sections to be +// nested without losing exactly once invocations. Notify functions can invoke any cleanup needed +// but should not exit (which is the responsibility of the parent handler). +func Chain(handler *Handler, notify ...func()) *Handler { + if handler == nil { + return New(nil, notify...) + } + return New(handler.Signal, append(notify, handler.Close)...) +} + +// New creates a new handler that guarantees all notify functions are run after the critical +// section exits (or is interrupted by the OS), then invokes the final handler. If no final +// handler is specified, the default final is `os.Exit(1)`. A handler can only be used for +// one critical section. +func New(final func(os.Signal), notify ...func()) *Handler { + return &Handler{ + final: final, + notify: notify, + } +} + +// Close executes all the notification handlers if they have not yet been executed. +func (h *Handler) Close() { + h.once.Do(func() { + for _, fn := range h.notify { + fn() + } + }) +} + +// Signal is called when an os.Signal is received, and guarantees that all notifications +// are executed, then the final handler is executed. This function should only be called once +// per Handler instance. +func (h *Handler) Signal(s os.Signal) { + h.once.Do(func() { + for _, fn := range h.notify { + fn() + } + if h.final == nil { + os.Exit(1) + } + h.final(s) + }) +} + +// Run ensures that any notifications are invoked after the provided fn exits (even if the +// process is interrupted by an OS termination signal). Notifications are only invoked once +// per Handler instance, so calling Run more than once will not behave as the user expects. +func (h *Handler) Run(fn func() error) error { + ch := make(chan os.Signal, 1) + signal.Notify(ch, terminationSignals...) + defer func() { + signal.Stop(ch) + close(ch) + }() + go func() { + sig, ok := <-ch + if !ok { + return + } + h.Signal(sig) + }() + defer h.Close() + return fn() +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/intstr/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/util/intstr/generated.pb.go index ef39cd58..4d60cfc7 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/intstr/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/util/intstr/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -40,8 +40,13 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *IntOrString) Reset() { *m = IntOrString{} } -func (*IntOrString) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *IntOrString) Reset() { *m = IntOrString{} } +func (*IntOrString) ProtoMessage() {} +func (*IntOrString) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } func init() { proto.RegisterType((*IntOrString)(nil), "k8s.io.kubernetes.pkg.util.intstr.IntOrString") @@ -345,3 +350,24 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 269 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x44, 0x8f, 0x31, 0x4e, 0xc3, 0x30, + 0x18, 0x85, 0x6d, 0x5a, 0x2a, 0x08, 0x12, 0x43, 0xc4, 0x50, 0x31, 0x38, 0x81, 0x01, 0x79, 0xc1, + 0x16, 0x1b, 0x62, 0xcc, 0xd6, 0x09, 0x29, 0x45, 0x0c, 0x6c, 0x0d, 0x18, 0x63, 0xa5, 0xd8, 0x96, + 0xf3, 0x67, 0xe8, 0xd6, 0x23, 0xc0, 0xc6, 0xc8, 0x71, 0x32, 0x76, 0x64, 0x40, 0x15, 0x31, 0xb7, + 0x60, 0x42, 0x71, 0x22, 0x75, 0xb2, 0xdf, 0x7b, 0xdf, 0x67, 0xc9, 0xd1, 0x55, 0x79, 0x5d, 0x31, + 0x65, 0x78, 0x59, 0x17, 0xc2, 0x69, 0x01, 0xa2, 0xe2, 0xb6, 0x94, 0xbc, 0x06, 0xb5, 0xe4, 0x4a, + 0x43, 0x05, 0x8e, 0x4b, 0xa1, 0x85, 0x5b, 0x80, 0x78, 0x62, 0xd6, 0x19, 0x30, 0xf1, 0x59, 0xaf, + 0xb0, 0x9d, 0xc2, 0x6c, 0x29, 0x59, 0xa7, 0xb0, 0x5e, 0x39, 0xbd, 0x94, 0x0a, 0x5e, 0xea, 0x82, + 0x3d, 0x9a, 0x57, 0x2e, 0x8d, 0x34, 0x3c, 0x98, 0x45, 0xfd, 0x1c, 0x52, 0x08, 0xe1, 0xd6, 0xbf, + 0x78, 0xfe, 0x8e, 0xa3, 0xa3, 0x99, 0x86, 0x5b, 0x37, 0x07, 0xa7, 0xb4, 0x8c, 0x69, 0x34, 0x86, + 0x95, 0x15, 0x53, 0x9c, 0x62, 0x3a, 0xca, 0x4e, 0x9a, 0x6d, 0x82, 0xfc, 0x36, 0x19, 0xdf, 0xad, + 0xac, 0xf8, 0x1b, 0xce, 0x3c, 0x10, 0xf1, 0x45, 0x34, 0x51, 0x1a, 0xee, 0x17, 0xcb, 0xe9, 0x5e, + 0x8a, 0xe9, 0x7e, 0x76, 0x3c, 0xb0, 0x93, 0x59, 0x68, 0xf3, 0x61, 0xed, 0xb8, 0x0a, 0x5c, 0xc7, + 0x8d, 0x52, 0x4c, 0x0f, 0x77, 0xdc, 0x3c, 0xb4, 0xf9, 0xb0, 0xde, 0x1c, 0x7c, 0x7c, 0x26, 0x68, + 0xfd, 0x9d, 0xa2, 0x8c, 0x36, 0x2d, 0x41, 0x9b, 0x96, 0xa0, 0xaf, 0x96, 0xa0, 0xb5, 0x27, 0xb8, + 0xf1, 0x04, 0x6f, 0x3c, 0xc1, 0x3f, 0x9e, 0xe0, 0xb7, 0x5f, 0x82, 0x1e, 0x26, 0xfd, 0x67, 0xff, + 0x03, 0x00, 0x00, 0xff, 0xff, 0x68, 0x57, 0xfb, 0xfa, 0x43, 0x01, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/intstr/generated.proto b/vendor/k8s.io/kubernetes/pkg/util/intstr/generated.proto index 32ad1b6b..dd508e1c 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/intstr/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/util/intstr/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -30,7 +30,6 @@ option go_package = "intstr"; // accept a name or number. // TODO: Rename to Int32OrString // -// +gencopy=true // +protobuf=true // +protobuf.options.(gogoproto.goproto_stringer)=false message IntOrString { diff --git a/vendor/k8s.io/kubernetes/pkg/util/intstr/intstr.go b/vendor/k8s.io/kubernetes/pkg/util/intstr/intstr.go index 53bc0fc7..59e7a066 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/intstr/intstr.go +++ b/vendor/k8s.io/kubernetes/pkg/util/intstr/intstr.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -32,7 +32,6 @@ import ( // accept a name or number. // TODO: Rename to Int32OrString // -// +gencopy=true // +protobuf=true // +protobuf.options.(gogoproto.goproto_stringer)=false type IntOrString struct { @@ -144,5 +143,5 @@ func getIntOrPercentValue(intOrStr *IntOrString) (int, bool, error) { } return int(v), true, nil } - return 0, false, fmt.Errorf("invalid value: neither int nor percentage") + return 0, false, fmt.Errorf("invalid type: neither int nor percentage") } diff --git a/vendor/k8s.io/kubernetes/pkg/util/json/json.go b/vendor/k8s.io/kubernetes/pkg/util/json/json.go index 1ff8cc0d..e8054a12 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/json/json.go +++ b/vendor/k8s.io/kubernetes/pkg/util/json/json.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/jsonpath/doc.go b/vendor/k8s.io/kubernetes/pkg/util/jsonpath/doc.go index 6bdf4ac5..2a6e1706 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/jsonpath/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/util/jsonpath/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/jsonpath/jsonpath.go b/vendor/k8s.io/kubernetes/pkg/util/jsonpath/jsonpath.go index 7a402af4..d84a1855 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/jsonpath/jsonpath.go +++ b/vendor/k8s.io/kubernetes/pkg/util/jsonpath/jsonpath.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -23,7 +23,7 @@ import ( "reflect" "strings" - "k8s.io/kubernetes/third_party/golang/template" + "k8s.io/kubernetes/third_party/forked/golang/template" ) type JSONPath struct { @@ -34,6 +34,8 @@ type JSONPath struct { beginRange int inRange int endRange int + + allowMissingKeys bool } func New(name string) *JSONPath { @@ -45,6 +47,13 @@ func New(name string) *JSONPath { } } +// AllowMissingKeys allows a caller to specify whether they want an error if a field or map key +// cannot be located, or simply an empty result. The receiver is returned for chaining. +func (j *JSONPath) AllowMissingKeys(allow bool) *JSONPath { + j.allowMissingKeys = allow + return j +} + // Parse parse the given template, return error func (j *JSONPath) Parse(text string) (err error) { j.parser, err = Parse(j.name, text) @@ -305,7 +314,7 @@ func (j *JSONPath) findFieldInValue(value *reflect.Value, node *FieldNode) (refl return value.FieldByName(node.Value), nil } -// evalField evaluates filed of struct or key of map. +// evalField evaluates field of struct or key of map. func (j *JSONPath) evalField(input []reflect.Value, node *FieldNode) ([]reflect.Value, error) { results := []reflect.Value{} // If there's no input, there's no output @@ -338,6 +347,9 @@ func (j *JSONPath) evalField(input []reflect.Value, node *FieldNode) ([]reflect. } } if len(results) == 0 { + if j.allowMissingKeys { + return results, nil + } return results, fmt.Errorf("%s is not found", node.Value) } return results, nil diff --git a/vendor/k8s.io/kubernetes/pkg/util/jsonpath/node.go b/vendor/k8s.io/kubernetes/pkg/util/jsonpath/node.go index ddf015c0..f0a27853 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/jsonpath/node.go +++ b/vendor/k8s.io/kubernetes/pkg/util/jsonpath/node.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/jsonpath/parser.go b/vendor/k8s.io/kubernetes/pkg/util/jsonpath/parser.go index bd1f5ecd..1ff82a3b 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/jsonpath/parser.go +++ b/vendor/k8s.io/kubernetes/pkg/util/jsonpath/parser.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/labels/doc.go b/vendor/k8s.io/kubernetes/pkg/util/labels/doc.go index 0746d878..c87305fb 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/labels/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/util/labels/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/labels/labels.go b/vendor/k8s.io/kubernetes/pkg/util/labels/labels.go index 624d5ad6..262f66e6 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/labels/labels.go +++ b/vendor/k8s.io/kubernetes/pkg/util/labels/labels.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/line_delimiter.go b/vendor/k8s.io/kubernetes/pkg/util/line_delimiter.go deleted file mode 100644 index b48478df..00000000 --- a/vendor/k8s.io/kubernetes/pkg/util/line_delimiter.go +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2015 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package util - -import ( - "bytes" - "io" - "strings" -) - -// A Line Delimiter is a filter that will -type LineDelimiter struct { - output io.Writer - delimiter []byte - buf bytes.Buffer -} - -// NewLineDelimiter allocates a new io.Writer that will split input on lines -// and bracket each line with the delimiter string. This can be useful in -// output tests where it is difficult to see and test trailing whitespace. -func NewLineDelimiter(output io.Writer, delimiter string) *LineDelimiter { - return &LineDelimiter{output: output, delimiter: []byte(delimiter)} -} - -// Write writes buf to the LineDelimiter ld. The only errors returned are ones -// encountered while writing to the underlying output stream. -func (ld *LineDelimiter) Write(buf []byte) (n int, err error) { - return ld.buf.Write(buf) -} - -// Flush all lines up until now. This will assume insert a linebreak at the current point of the stream. -func (ld *LineDelimiter) Flush() (err error) { - lines := strings.Split(ld.buf.String(), "\n") - for _, line := range lines { - if _, err = ld.output.Write(ld.delimiter); err != nil { - return - } - if _, err = ld.output.Write([]byte(line)); err != nil { - return - } - if _, err = ld.output.Write(ld.delimiter); err != nil { - return - } - if _, err = ld.output.Write([]byte("\n")); err != nil { - return - } - } - return -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/logs.go b/vendor/k8s.io/kubernetes/pkg/util/logs.go deleted file mode 100644 index c79c4903..00000000 --- a/vendor/k8s.io/kubernetes/pkg/util/logs.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package util - -import ( - "flag" - "log" - "time" - - "github.com/golang/glog" - "github.com/spf13/pflag" - "k8s.io/kubernetes/pkg/util/wait" -) - -var logFlushFreq = pflag.Duration("log-flush-frequency", 5*time.Second, "Maximum number of seconds between log flushes") - -// TODO(thockin): This is temporary until we agree on log dirs and put those into each cmd. -func init() { - flag.Set("logtostderr", "true") -} - -// GlogWriter serves as a bridge between the standard log package and the glog package. -type GlogWriter struct{} - -// Write implements the io.Writer interface. -func (writer GlogWriter) Write(data []byte) (n int, err error) { - glog.Info(string(data)) - return len(data), nil -} - -// InitLogs initializes logs the way we want for kubernetes. -func InitLogs() { - log.SetOutput(GlogWriter{}) - log.SetFlags(0) - // The default glog flush interval is 30 seconds, which is frighteningly long. - go wait.Until(glog.Flush, *logFlushFreq, wait.NeverStop) -} - -// FlushLogs flushes logs immediately. -func FlushLogs() { - glog.Flush() -} - -// NewLogger creates a new log.Logger which sends logs to glog.Info. -func NewLogger(prefix string) *log.Logger { - return log.New(GlogWriter{}, prefix, 0) -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/metrics/util.go b/vendor/k8s.io/kubernetes/pkg/util/metrics/util.go new file mode 100644 index 00000000..0fbc3ae0 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/metrics/util.go @@ -0,0 +1,71 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package metrics + +import ( + "fmt" + "sync" + "time" + + "k8s.io/kubernetes/pkg/util/flowcontrol" + "k8s.io/kubernetes/pkg/util/wait" + + "github.com/golang/glog" + "github.com/prometheus/client_golang/prometheus" +) + +const ( + updatePeriod = 5 * time.Second +) + +var ( + metricsLock sync.Mutex + rateLimiterMetrics map[string]prometheus.Gauge = make(map[string]prometheus.Gauge) +) + +func registerRateLimiterMetric(ownerName string) error { + metricsLock.Lock() + defer metricsLock.Unlock() + + if _, ok := rateLimiterMetrics[ownerName]; ok { + glog.Errorf("Metric for %v already registered", ownerName) + return fmt.Errorf("Metric for %v already registered", ownerName) + } + metric := prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "rate_limiter_use", + Subsystem: ownerName, + Help: fmt.Sprintf("A metric measuring the saturation of the rate limiter for %v", ownerName), + }) + rateLimiterMetrics[ownerName] = metric + prometheus.MustRegister(metric) + return nil +} + +// RegisterMetricAndTrackRateLimiterUsage registers a metric ownerName_rate_limiter_use in prometheus to track +// how much used rateLimiter is and starts a goroutine that updates this metric every updatePeriod +func RegisterMetricAndTrackRateLimiterUsage(ownerName string, rateLimiter flowcontrol.RateLimiter) error { + err := registerRateLimiterMetric(ownerName) + if err != nil { + return err + } + go wait.Forever(func() { + metricsLock.Lock() + defer metricsLock.Unlock() + rateLimiterMetrics[ownerName].Set(rateLimiter.Saturation()) + }, updatePeriod) + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/http.go b/vendor/k8s.io/kubernetes/pkg/util/net/http.go index 68073776..53f28dfc 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/net/http.go +++ b/vendor/k8s.io/kubernetes/pkg/util/net/http.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/interface.go b/vendor/k8s.io/kubernetes/pkg/util/net/interface.go index cdf5ddb5..a1e53d2e 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/net/interface.go +++ b/vendor/k8s.io/kubernetes/pkg/util/net/interface.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/port_range.go b/vendor/k8s.io/kubernetes/pkg/util/net/port_range.go index 52755257..6a50e618 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/net/port_range.go +++ b/vendor/k8s.io/kubernetes/pkg/util/net/port_range.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -71,12 +71,17 @@ func (pr *PortRange) Set(value string) error { high, err = strconv.Atoi(value[hyphenIndex+1:]) } if err != nil { - return fmt.Errorf("unable to parse port range: %s", value) + return fmt.Errorf("unable to parse port range: %s: %v", value, err) + } + + if low > 65535 || high > 65535 { + return fmt.Errorf("the port range cannot be greater than 65535: %s", value) } if high < low { return fmt.Errorf("end port cannot be less than start port: %s", value) } + pr.Base = low pr.Size = 1 + high - low return nil diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/port_split.go b/vendor/k8s.io/kubernetes/pkg/util/net/port_split.go index be40eb75..29c985ed 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/net/port_split.go +++ b/vendor/k8s.io/kubernetes/pkg/util/net/port_split.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/sets/README.md b/vendor/k8s.io/kubernetes/pkg/util/net/sets/README.md deleted file mode 100644 index b0f238a2..00000000 --- a/vendor/k8s.io/kubernetes/pkg/util/net/sets/README.md +++ /dev/null @@ -1,17 +0,0 @@ -This package contains hand-coded set implementations that should be similar to -the autogenerated ones in `pkg/util/sets`. - -We can't simply use net.IPNet as a map-key in Go (because it contains a -`[]byte`). - -We could use the same workaround we use here (a string representation as the -key) to autogenerate sets. If we do that, or decide on an alternate approach, -we should replace the implementations in this package with the autogenerated -versions. - -It is expected that callers will alias this import as `netsets` -i.e. `import netsets "k8s.io/kubernetes/pkg/util/net/sets"` - - - -[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/pkg/util/net/sets/README.md?pixel)]() diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/sets/doc.go b/vendor/k8s.io/kubernetes/pkg/util/net/sets/doc.go new file mode 100644 index 00000000..8414f74a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/net/sets/doc.go @@ -0,0 +1,28 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This package contains hand-coded set implementations that should be similar +// to the autogenerated ones in pkg/util/sets. +// We can't simply use net.IPNet as a map-key in Go (because it contains a +// []byte). +// We could use the same workaround we use here (a string representation as the +// key) to autogenerate sets. If we do that, or decide on an alternate +// approach, we should replace the implementations in this package with the +// autogenerated versions. +// It is expected that callers will alias this import as "netsets" i.e. import +// netsets "k8s.io/kubernetes/pkg/util/net/sets" + +package sets diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/sets/ipnet.go b/vendor/k8s.io/kubernetes/pkg/util/net/sets/ipnet.go index db117f63..5b6fe933 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/net/sets/ipnet.go +++ b/vendor/k8s.io/kubernetes/pkg/util/net/sets/ipnet.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/net/util.go b/vendor/k8s.io/kubernetes/pkg/util/net/util.go index 92d5d0b9..1348f4de 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/net/util.go +++ b/vendor/k8s.io/kubernetes/pkg/util/net/util.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/parsers/parsers.go b/vendor/k8s.io/kubernetes/pkg/util/parsers/parsers.go index a02f18d3..4e70cc68 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/parsers/parsers.go +++ b/vendor/k8s.io/kubernetes/pkg/util/parsers/parsers.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/pod/doc.go b/vendor/k8s.io/kubernetes/pkg/util/pod/doc.go index 3bad7d0b..d7a8ff22 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/pod/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/util/pod/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/pod/pod.go b/vendor/k8s.io/kubernetes/pkg/util/pod/pod.go index 9c57aaeb..06e48c51 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/pod/pod.go +++ b/vendor/k8s.io/kubernetes/pkg/util/pod/pod.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -70,7 +70,7 @@ func UpdatePodWithRetries(podClient unversionedcore.PodInterface, pod *api.Pod, // Handle returned error from wait poll if err == wait.ErrWaitTimeout { - err = fmt.Errorf("timed out trying to update pod: %+v", oldPod) + err = fmt.Errorf("timed out trying to update pod: %#v", oldPod) } // Ignore the pod not found error, but the pod isn't updated. if errors.IsNotFound(err) { diff --git a/vendor/k8s.io/kubernetes/pkg/util/rand/rand.go b/vendor/k8s.io/kubernetes/pkg/util/rand/rand.go index f2647af3..134c1526 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/rand/rand.go +++ b/vendor/k8s.io/kubernetes/pkg/util/rand/rand.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/replicaset/replicaset.go b/vendor/k8s.io/kubernetes/pkg/util/replicaset/replicaset.go index e5dd2651..38819727 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/replicaset/replicaset.go +++ b/vendor/k8s.io/kubernetes/pkg/util/replicaset/replicaset.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -66,7 +66,7 @@ func UpdateRSWithRetries(rsClient unversionedextensions.ReplicaSetInterface, rs // Handle returned error from wait poll if err == wait.ErrWaitTimeout { - err = fmt.Errorf("timed out trying to update RS: %+v", oldRs) + err = fmt.Errorf("timed out trying to update RS: %#v", oldRs) } // Ignore the RS not found error, but the RS isn't updated. if errors.IsNotFound(err) { @@ -108,3 +108,25 @@ func MatchingPodsFunc(rs *extensions.ReplicaSet) (func(api.Pod) bool, error) { return selector.Matches(podLabelsSelector) }, nil } + +// ReplicaSetIsInactive returns a condition that will be true when a replica set is inactive ie. +// it has zero running replicas. +func ReplicaSetIsInactive(c unversionedextensions.ExtensionsInterface, replicaSet *extensions.ReplicaSet) wait.ConditionFunc { + + // If we're given a ReplicaSet where the status lags the spec, it either means that the + // ReplicaSet is stale, or that the ReplicaSet manager hasn't noticed the update yet. + // Polling status.Replicas is not safe in the latter case. + desiredGeneration := replicaSet.Generation + + return func() (bool, error) { + rs, err := c.ReplicaSets(replicaSet.Namespace).Get(replicaSet.Name) + if err != nil { + return false, err + } + + return rs.Status.ObservedGeneration >= desiredGeneration && + rs.Spec.Replicas == 0 && + rs.Status.Replicas == 0 && + rs.Status.FullyLabeledReplicas == 0, nil + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/resource_container_linux.go b/vendor/k8s.io/kubernetes/pkg/util/resource_container_linux.go deleted file mode 100644 index 8d166045..00000000 --- a/vendor/k8s.io/kubernetes/pkg/util/resource_container_linux.go +++ /dev/null @@ -1,49 +0,0 @@ -// +build linux - -/* -Copyright 2015 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package util - -import ( - "os" - "syscall" - - "github.com/opencontainers/runc/libcontainer/cgroups/fs" - "github.com/opencontainers/runc/libcontainer/configs" -) - -// Creates resource-only containerName if it does not already exist and moves -// the current process to it. -// -// containerName must be an absolute container name. -func RunInResourceContainer(containerName string) error { - manager := fs.Manager{ - Cgroups: &configs.Cgroup{ - Parent: "/", - Name: containerName, - Resources: &configs.Resources{ - AllowAllDevices: true, - }, - }, - } - - return manager.Apply(os.Getpid()) -} - -func ApplyRLimitForSelf(maxOpenFiles uint64) { - syscall.Setrlimit(syscall.RLIMIT_NOFILE, &syscall.Rlimit{Max: maxOpenFiles, Cur: maxOpenFiles}) -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/runner.go b/vendor/k8s.io/kubernetes/pkg/util/runner.go deleted file mode 100644 index 60645cf0..00000000 --- a/vendor/k8s.io/kubernetes/pkg/util/runner.go +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright 2014 The Kubernetes Authors All rights reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package util - -import ( - "sync" -) - -// Runner is an abstraction to make it easy to start and stop groups of things that can be -// described by a single function which waits on a channel close to exit. -type Runner struct { - lock sync.Mutex - loopFuncs []func(stop chan struct{}) - stop *chan struct{} -} - -// NewRunner makes a runner for the given function(s). The function(s) should loop until -// the channel is closed. -func NewRunner(f ...func(stop chan struct{})) *Runner { - return &Runner{loopFuncs: f} -} - -// Start begins running. -func (r *Runner) Start() { - r.lock.Lock() - defer r.lock.Unlock() - if r.stop == nil { - c := make(chan struct{}) - r.stop = &c - for i := range r.loopFuncs { - go r.loopFuncs[i](*r.stop) - } - } -} - -// Stop stops running. -func (r *Runner) Stop() { - r.lock.Lock() - defer r.lock.Unlock() - if r.stop != nil { - close(*r.stop) - r.stop = nil - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/runtime/runtime.go b/vendor/k8s.io/kubernetes/pkg/util/runtime/runtime.go index f404d25d..976de49d 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/runtime/runtime.go +++ b/vendor/k8s.io/kubernetes/pkg/util/runtime/runtime.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,23 +18,32 @@ package runtime import ( "fmt" - "github.com/golang/glog" "runtime" + + "github.com/golang/glog" ) -// For testing, bypass HandleCrash. -var ReallyCrash bool +var ( + // ReallyCrash controls the behavior of HandleCrash and now defaults + // true. It's still exposed so components can optionally set to false + // to restore prior behavior. + ReallyCrash = true +) // PanicHandlers is a list of functions which will be invoked when a panic happens. var PanicHandlers = []func(interface{}){logPanic} -//TODO search the public functions -// HandleCrash simply catches a crash and logs an error. Meant to be called via defer. -// Additional context-specific handlers can be provided, and will be called in case of panic +// HandleCrash simply catches a crash and logs an error. Meant to be called via +// defer. Additional context-specific handlers can be provided, and will be +// called in case of panic. HandleCrash actually crashes, after calling the +// handlers and logging the panic message. +// +// TODO: remove this function. We are switching to a world where it's safe for +// apiserver to panic, since it will be restarted by kubelet. At the beginning +// of the Kubernetes project, nothing was going to restart apiserver and so +// catching panics was important. But it's actually much simpler for montoring +// software if we just exit when an unexpected panic happens. func HandleCrash(additionalHandlers ...func(interface{})) { - if ReallyCrash { - return - } if r := recover(); r != nil { for _, fn := range PanicHandlers { fn(r) @@ -42,11 +51,20 @@ func HandleCrash(additionalHandlers ...func(interface{})) { for _, fn := range additionalHandlers { fn(r) } + if ReallyCrash { + // Actually proceed to panic. + panic(r) + } } } // logPanic logs the caller tree when a panic occurs. func logPanic(r interface{}) { + callers := getCallers(r) + glog.Errorf("Observed a panic: %#v (%v)\n%v", r, r, callers) +} + +func getCallers(r interface{}) string { callers := "" for i := 0; true; i++ { _, file, line, ok := runtime.Caller(i) @@ -55,7 +73,8 @@ func logPanic(r interface{}) { } callers = callers + fmt.Sprintf("%v:%v\n", file, line) } - glog.Errorf("Recovered from panic: %#v (%v)\n%v", r, r, callers) + + return callers } // ErrorHandlers is a list of functions which will be invoked when an unreturnable @@ -92,3 +111,18 @@ func GetCaller() string { } return f.Name() } + +// RecoverFromPanic replaces the specified error with an error containing the +// original error, and the call tree when a panic occurs. This enables error +// handlers to handle errors and panics the same way. +func RecoverFromPanic(err *error) { + if r := recover(); r != nil { + callers := getCallers(r) + + *err = fmt.Errorf( + "recovered from panic %q. (err=%v) Call stack:\n%v", + r, + *err, + callers) + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/sets/byte.go b/vendor/k8s.io/kubernetes/pkg/util/sets/byte.go index fe1068cd..3d6d0dfe 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/sets/byte.go +++ b/vendor/k8s.io/kubernetes/pkg/util/sets/byte.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -174,6 +174,15 @@ func (s Byte) List() []byte { return []byte(res) } +// UnsortedList returns the slice with contents in random order. +func (s Byte) UnsortedList() []byte { + res := make([]byte, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s Byte) PopAny() (byte, bool) { for key := range s { diff --git a/vendor/k8s.io/kubernetes/pkg/util/sets/doc.go b/vendor/k8s.io/kubernetes/pkg/util/sets/doc.go index a27cb62f..c5e54162 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/sets/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/util/sets/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/sets/empty.go b/vendor/k8s.io/kubernetes/pkg/util/sets/empty.go index 73ac74c1..5654edd7 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/sets/empty.go +++ b/vendor/k8s.io/kubernetes/pkg/util/sets/empty.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/sets/int.go b/vendor/k8s.io/kubernetes/pkg/util/sets/int.go index e7a2b5db..6d32f84c 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/sets/int.go +++ b/vendor/k8s.io/kubernetes/pkg/util/sets/int.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -174,6 +174,15 @@ func (s Int) List() []int { return []int(res) } +// UnsortedList returns the slice with contents in random order. +func (s Int) UnsortedList() []int { + res := make([]int, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s Int) PopAny() (int, bool) { for key := range s { diff --git a/vendor/k8s.io/kubernetes/pkg/util/sets/int64.go b/vendor/k8s.io/kubernetes/pkg/util/sets/int64.go index f31da775..1de18319 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/sets/int64.go +++ b/vendor/k8s.io/kubernetes/pkg/util/sets/int64.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -174,6 +174,15 @@ func (s Int64) List() []int64 { return []int64(res) } +// UnsortedList returns the slice with contents in random order. +func (s Int64) UnsortedList() []int64 { + res := make([]int64, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s Int64) PopAny() (int64, bool) { for key := range s { diff --git a/vendor/k8s.io/kubernetes/pkg/util/sets/string.go b/vendor/k8s.io/kubernetes/pkg/util/sets/string.go index 572aa915..da66eaf8 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/sets/string.go +++ b/vendor/k8s.io/kubernetes/pkg/util/sets/string.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -174,6 +174,15 @@ func (s String) List() []string { return []string(res) } +// UnsortedList returns the slice with contents in random order. +func (s String) UnsortedList() []string { + res := make([]string, 0, len(s)) + for key := range s { + res = append(res, key) + } + return res +} + // Returns a single element from the set. func (s String) PopAny() (string, bool) { for key := range s { diff --git a/vendor/k8s.io/kubernetes/pkg/util/slice/slice.go b/vendor/k8s.io/kubernetes/pkg/util/slice/slice.go index f32dbabc..2e1d7ccb 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/slice/slice.go +++ b/vendor/k8s.io/kubernetes/pkg/util/slice/slice.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/strategicpatch/patch.go b/vendor/k8s.io/kubernetes/pkg/util/strategicpatch/patch.go index 676713bc..18d80f9b 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/strategicpatch/patch.go +++ b/vendor/k8s.io/kubernetes/pkg/util/strategicpatch/patch.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,7 +22,7 @@ import ( "sort" "k8s.io/kubernetes/pkg/util/json" - forkedjson "k8s.io/kubernetes/third_party/forked/json" + forkedjson "k8s.io/kubernetes/third_party/forked/golang/json" "github.com/davecgh/go-spew/spew" "github.com/ghodss/yaml" diff --git a/vendor/k8s.io/kubernetes/pkg/util/string_flag.go b/vendor/k8s.io/kubernetes/pkg/util/string_flag.go index 4208bf5f..9d6a00a1 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/string_flag.go +++ b/vendor/k8s.io/kubernetes/pkg/util/string_flag.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/template.go b/vendor/k8s.io/kubernetes/pkg/util/template.go index 1f966853..d09d7dc8 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/template.go +++ b/vendor/k8s.io/kubernetes/pkg/util/template.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/term/resize.go b/vendor/k8s.io/kubernetes/pkg/util/term/resize.go new file mode 100644 index 00000000..3d78c866 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/term/resize.go @@ -0,0 +1,144 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package term + +import ( + "fmt" + + "github.com/docker/docker/pkg/term" + "k8s.io/kubernetes/pkg/util/runtime" +) + +// Size represents the width and height of a terminal. +type Size struct { + Width uint16 + Height uint16 +} + +// GetSize returns the current size of the user's terminal. If it isn't a terminal, +// nil is returned. +func (t TTY) GetSize() *Size { + outFd, isTerminal := term.GetFdInfo(t.Out) + if !isTerminal { + return nil + } + return GetSize(outFd) +} + +// GetSize returns the current size of the terminal associated with fd. +func GetSize(fd uintptr) *Size { + winsize, err := term.GetWinsize(fd) + if err != nil { + runtime.HandleError(fmt.Errorf("unable to get terminal size: %v", err)) + return nil + } + + return &Size{Width: winsize.Width, Height: winsize.Height} +} + +// MonitorSize monitors the terminal's size. It returns a TerminalSizeQueue primed with +// initialSizes, or nil if there's no TTY present. +func (t *TTY) MonitorSize(initialSizes ...*Size) TerminalSizeQueue { + outFd, isTerminal := term.GetFdInfo(t.Out) + if !isTerminal { + return nil + } + + t.sizeQueue = &sizeQueue{ + t: *t, + // make it buffered so we can send the initial terminal sizes without blocking, prior to starting + // the streaming below + resizeChan: make(chan Size, len(initialSizes)), + stopResizing: make(chan struct{}), + } + + t.sizeQueue.monitorSize(outFd, initialSizes...) + + return t.sizeQueue +} + +// TerminalSizeQueue is capable of returning terminal resize events as they occur. +type TerminalSizeQueue interface { + // Next returns the new terminal size after the terminal has been resized. It returns nil when + // monitoring has been stopped. + Next() *Size +} + +// sizeQueue implements TerminalSizeQueue +type sizeQueue struct { + t TTY + // resizeChan receives a Size each time the user's terminal is resized. + resizeChan chan Size + stopResizing chan struct{} +} + +// make sure sizeQueue implements the TerminalSizeQueue interface +var _ TerminalSizeQueue = &sizeQueue{} + +// monitorSize primes resizeChan with initialSizes and then monitors for resize events. With each +// new event, it sends the current terminal size to resizeChan. +func (s *sizeQueue) monitorSize(outFd uintptr, initialSizes ...*Size) { + // send the initial sizes + for i := range initialSizes { + if initialSizes[i] != nil { + s.resizeChan <- *initialSizes[i] + } + } + + resizeEvents := make(chan Size, 1) + + monitorResizeEvents(outFd, resizeEvents, s.stopResizing) + + // listen for resize events in the background + go func() { + defer runtime.HandleCrash() + + for { + select { + case size, ok := <-resizeEvents: + if !ok { + return + } + + select { + // try to send the size to resizeChan, but don't block + case s.resizeChan <- size: + // send successful + default: + // unable to send / no-op + } + case <-s.stopResizing: + return + } + } + }() +} + +// Next returns the new terminal size after the terminal has been resized. It returns nil when +// monitoring has been stopped. +func (s *sizeQueue) Next() *Size { + size, ok := <-s.resizeChan + if !ok { + return nil + } + return &size +} + +// stop stops the background goroutine that is monitoring for terminal resizes. +func (s *sizeQueue) stop() { + close(s.stopResizing) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/term/resizeevents.go b/vendor/k8s.io/kubernetes/pkg/util/term/resizeevents.go new file mode 100644 index 00000000..70858ed0 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/term/resizeevents.go @@ -0,0 +1,60 @@ +// +build !windows + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package term + +import ( + "os" + "os/signal" + "syscall" + + "k8s.io/kubernetes/pkg/util/runtime" +) + +// monitorResizeEvents spawns a goroutine that waits for SIGWINCH signals (these indicate the +// terminal has resized). After receiving a SIGWINCH, this gets the terminal size and tries to send +// it to the resizeEvents channel. The goroutine stops when the stop channel is closed. +func monitorResizeEvents(fd uintptr, resizeEvents chan<- Size, stop chan struct{}) { + go func() { + defer runtime.HandleCrash() + + winch := make(chan os.Signal, 1) + signal.Notify(winch, syscall.SIGWINCH) + defer signal.Stop(winch) + + for { + select { + case <-winch: + size := GetSize(fd) + if size == nil { + return + } + + // try to send size + select { + case resizeEvents <- *size: + // success + default: + // not sent + } + case <-stop: + return + } + } + }() +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/term/resizeevents_windows.go b/vendor/k8s.io/kubernetes/pkg/util/term/resizeevents_windows.go new file mode 100644 index 00000000..e994d28d --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/term/resizeevents_windows.go @@ -0,0 +1,61 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package term + +import ( + "time" + + "k8s.io/kubernetes/pkg/util/runtime" +) + +// monitorResizeEvents spawns a goroutine that periodically gets the terminal size and tries to send +// it to the resizeEvents channel if the size has changed. The goroutine stops when the stop channel +// is closed. +func monitorResizeEvents(fd uintptr, resizeEvents chan<- Size, stop chan struct{}) { + go func() { + defer runtime.HandleCrash() + + size := GetSize(fd) + if size == nil { + return + } + lastSize := *size + + for { + // see if we need to stop running + select { + case <-stop: + return + default: + } + + size := GetSize(fd) + if size == nil { + return + } + + if size.Height != lastSize.Height || size.Width != lastSize.Width { + lastSize.Height = size.Height + lastSize.Width = size.Width + resizeEvents <- *size + } + + // sleep to avoid hot looping + time.Sleep(250 * time.Millisecond) + } + }() +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/term/setsize.go b/vendor/k8s.io/kubernetes/pkg/util/term/setsize.go new file mode 100644 index 00000000..944d4e5a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/term/setsize.go @@ -0,0 +1,28 @@ +// +build !windows + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package term + +import ( + "github.com/docker/docker/pkg/term" +) + +// SetSize sets the terminal size associated with fd. +func SetSize(fd uintptr, size Size) error { + return term.SetWinsize(fd, &term.Winsize{Height: size.Height, Width: size.Width}) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/term/setsize_unsupported.go b/vendor/k8s.io/kubernetes/pkg/util/term/setsize_unsupported.go new file mode 100644 index 00000000..dd3de312 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/term/setsize_unsupported.go @@ -0,0 +1,24 @@ +// +build windows + +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package term + +func SetSize(fd uintptr, size Size) error { + // NOP + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/term/term.go b/vendor/k8s.io/kubernetes/pkg/util/term/term.go new file mode 100644 index 00000000..58baee83 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/term/term.go @@ -0,0 +1,110 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package term + +import ( + "io" + "os" + + "github.com/docker/docker/pkg/term" + + "k8s.io/kubernetes/pkg/util/interrupt" +) + +// SafeFunc is a function to be invoked by TTY. +type SafeFunc func() error + +// TTY helps invoke a function and preserve the state of the terminal, even if the process is +// terminated during execution. It also provides support for terminal resizing for remote command +// execution/attachment. +type TTY struct { + // In is a reader representing stdin. It is a required field. + In io.Reader + // Out is a writer representing stdout. It must be set to support terminal resizing. It is an + // optional field. + Out io.Writer + // Raw is true if the terminal should be set raw. + Raw bool + // TryDev indicates the TTY should try to open /dev/tty if the provided input + // is not a file descriptor. + TryDev bool + // Parent is an optional interrupt handler provided to this function - if provided + // it will be invoked after the terminal state is restored. If it is not provided, + // a signal received during the TTY will result in os.Exit(0) being invoked. + Parent *interrupt.Handler + + // sizeQueue is set after a call to MonitorSize() and is used to monitor SIGWINCH signals when the + // user's terminal resizes. + sizeQueue *sizeQueue +} + +// IsTerminalIn returns true if t.In is a terminal. Does not check /dev/tty +// even if TryDev is set. +func (t TTY) IsTerminalIn() bool { + return IsTerminal(t.In) +} + +// IsTerminalOut returns true if t.Out is a terminal. Does not check /dev/tty +// even if TryDev is set. +func (t TTY) IsTerminalOut() bool { + return IsTerminal(t.Out) +} + +// IsTerminal returns whether the passed object is a terminal or not +func IsTerminal(i interface{}) bool { + _, terminal := term.GetFdInfo(i) + return terminal +} + +// Safe invokes the provided function and will attempt to ensure that when the +// function returns (or a termination signal is sent) that the terminal state +// is reset to the condition it was in prior to the function being invoked. If +// t.Raw is true the terminal will be put into raw mode prior to calling the function. +// If the input file descriptor is not a TTY and TryDev is true, the /dev/tty file +// will be opened (if available). +func (t TTY) Safe(fn SafeFunc) error { + inFd, isTerminal := term.GetFdInfo(t.In) + + if !isTerminal && t.TryDev { + if f, err := os.Open("/dev/tty"); err == nil { + defer f.Close() + inFd = f.Fd() + isTerminal = term.IsTerminal(inFd) + } + } + if !isTerminal { + return fn() + } + + var state *term.State + var err error + if t.Raw { + state, err = term.MakeRaw(inFd) + } else { + state, err = term.SaveState(inFd) + } + if err != nil { + return err + } + return interrupt.Chain(t.Parent, func() { + if t.sizeQueue != nil { + t.sizeQueue.stop() + } + + term.RestoreTerminal(inFd, state) + }).Run(fn) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/trace.go b/vendor/k8s.io/kubernetes/pkg/util/trace.go index ed9da94b..fe93db8d 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/trace.go +++ b/vendor/k8s.io/kubernetes/pkg/util/trace.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/umask.go b/vendor/k8s.io/kubernetes/pkg/util/umask.go index 48311f4e..35ccce50 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/umask.go +++ b/vendor/k8s.io/kubernetes/pkg/util/umask.go @@ -1,7 +1,7 @@ // +build !windows /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/umask_windows.go b/vendor/k8s.io/kubernetes/pkg/util/umask_windows.go index 0f97c26e..8c1b2cbc 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/umask_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/util/umask_windows.go @@ -1,7 +1,7 @@ // +build windows /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/util.go b/vendor/k8s.io/kubernetes/pkg/util/util.go index 4826a448..7a941495 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/util.go +++ b/vendor/k8s.io/kubernetes/pkg/util/util.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/uuid.go b/vendor/k8s.io/kubernetes/pkg/util/uuid/uuid.go similarity index 93% rename from vendor/k8s.io/kubernetes/pkg/util/uuid.go rename to vendor/k8s.io/kubernetes/pkg/util/uuid/uuid.go index 7e1396f1..51f2689a 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/uuid.go +++ b/vendor/k8s.io/kubernetes/pkg/util/uuid/uuid.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package uuid import ( "sync" diff --git a/vendor/k8s.io/kubernetes/pkg/util/validation/field/errors.go b/vendor/k8s.io/kubernetes/pkg/util/validation/field/errors.go index 203f7cc8..227a49ee 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/validation/field/errors.go +++ b/vendor/k8s.io/kubernetes/pkg/util/validation/field/errors.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import ( "strings" utilerrors "k8s.io/kubernetes/pkg/util/errors" + "k8s.io/kubernetes/pkg/util/sets" ) // Error is an implementation of the 'error' interface, which represents a @@ -201,9 +202,15 @@ func NewErrorTypeMatcher(t ErrorType) utilerrors.Matcher { // ToAggregate converts the ErrorList into an errors.Aggregate. func (list ErrorList) ToAggregate() utilerrors.Aggregate { - errs := make([]error, len(list)) - for i := range list { - errs[i] = list[i] + errs := make([]error, 0, len(list)) + errorMsgs := sets.NewString() + for _, err := range list { + msg := fmt.Sprintf("%v", err) + if errorMsgs.Has(msg) { + continue + } + errorMsgs.Insert(msg) + errs = append(errs, err) } return utilerrors.NewAggregate(errs) } diff --git a/vendor/k8s.io/kubernetes/pkg/util/validation/field/path.go b/vendor/k8s.io/kubernetes/pkg/util/validation/field/path.go index 30ff5a8f..2efc8eec 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/validation/field/path.go +++ b/vendor/k8s.io/kubernetes/pkg/util/validation/field/path.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/util/validation/validation.go index 9361a4bf..aac2357d 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/util/validation/validation.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -85,10 +85,10 @@ func IsValidLabelValue(value string) []string { return errs } -const DNS1123LabelFmt string = "[a-z0-9]([-a-z0-9]*[a-z0-9])?" +const dns1123LabelFmt string = "[a-z0-9]([-a-z0-9]*[a-z0-9])?" const DNS1123LabelMaxLength int = 63 -var dns1123LabelRegexp = regexp.MustCompile("^" + DNS1123LabelFmt + "$") +var dns1123LabelRegexp = regexp.MustCompile("^" + dns1123LabelFmt + "$") // IsDNS1123Label tests for a string that conforms to the definition of a label in // DNS (RFC 1123). @@ -98,15 +98,15 @@ func IsDNS1123Label(value string) []string { errs = append(errs, MaxLenError(DNS1123LabelMaxLength)) } if !dns1123LabelRegexp.MatchString(value) { - errs = append(errs, RegexError(DNS1123LabelFmt, "my-name", "123-abc")) + errs = append(errs, RegexError(dns1123LabelFmt, "my-name", "123-abc")) } return errs } -const DNS1123SubdomainFmt string = DNS1123LabelFmt + "(\\." + DNS1123LabelFmt + ")*" +const dns1123SubdomainFmt string = dns1123LabelFmt + "(\\." + dns1123LabelFmt + ")*" const DNS1123SubdomainMaxLength int = 253 -var dns1123SubdomainRegexp = regexp.MustCompile("^" + DNS1123SubdomainFmt + "$") +var dns1123SubdomainRegexp = regexp.MustCompile("^" + dns1123SubdomainFmt + "$") // IsDNS1123Subdomain tests for a string that conforms to the definition of a // subdomain in DNS (RFC 1123). @@ -116,42 +116,69 @@ func IsDNS1123Subdomain(value string) []string { errs = append(errs, MaxLenError(DNS1123SubdomainMaxLength)) } if !dns1123SubdomainRegexp.MatchString(value) { - errs = append(errs, RegexError(DNS1123SubdomainFmt, "example.com")) + errs = append(errs, RegexError(dns1123SubdomainFmt, "example.com")) } return errs } -const DNS952LabelFmt string = "[a-z]([-a-z0-9]*[a-z0-9])?" -const DNS952LabelMaxLength int = 24 +const dns1035LabelFmt string = "[a-z]([-a-z0-9]*[a-z0-9])?" +const DNS1035LabelMaxLength int = 63 -var dns952LabelRegexp = regexp.MustCompile("^" + DNS952LabelFmt + "$") +var dns1035LabelRegexp = regexp.MustCompile("^" + dns1035LabelFmt + "$") -// IsDNS952Label tests for a string that conforms to the definition of a label in -// DNS (RFC 952). -func IsDNS952Label(value string) []string { +// IsDNS1035Label tests for a string that conforms to the definition of a label in +// DNS (RFC 1035). +func IsDNS1035Label(value string) []string { var errs []string - if len(value) > DNS952LabelMaxLength { - errs = append(errs, MaxLenError(DNS952LabelMaxLength)) + if len(value) > DNS1035LabelMaxLength { + errs = append(errs, MaxLenError(DNS1035LabelMaxLength)) } - if !dns952LabelRegexp.MatchString(value) { - errs = append(errs, RegexError(DNS952LabelFmt, "my-name", "abc-123")) + if !dns1035LabelRegexp.MatchString(value) { + errs = append(errs, RegexError(dns1035LabelFmt, "my-name", "abc-123")) } return errs } -const CIdentifierFmt string = "[A-Za-z_][A-Za-z0-9_]*" +// wildcard definition - RFC 1034 section 4.3.3. +// examples: +// - valid: *.bar.com, *.foo.bar.com +// - invalid: *.*.bar.com, *.foo.*.com, *bar.com, f*.bar.com, * +const wildcardDNF1123SubdomainFmt = "\\*\\." + dns1123SubdomainFmt -var cIdentifierRegexp = regexp.MustCompile("^" + CIdentifierFmt + "$") +// IsWildcardDNS1123Subdomain tests for a string that conforms to the definition of a +// wildcard subdomain in DNS (RFC 1034 section 4.3.3). +func IsWildcardDNS1123Subdomain(value string) []string { + wildcardDNS1123SubdomainRegexp := regexp.MustCompile("^\\*\\." + dns1123SubdomainFmt + "$") + + var errs []string + if len(value) > DNS1123SubdomainMaxLength { + errs = append(errs, MaxLenError(DNS1123SubdomainMaxLength)) + } + if !wildcardDNS1123SubdomainRegexp.MatchString(value) { + errs = append(errs, RegexError(wildcardDNF1123SubdomainFmt, "*.example.com")) + } + return errs +} + +const cIdentifierFmt string = "[A-Za-z_][A-Za-z0-9_]*" + +var cIdentifierRegexp = regexp.MustCompile("^" + cIdentifierFmt + "$") // IsCIdentifier tests for a string that conforms the definition of an identifier // in C. This checks the format, but not the length. -func IsCIdentifier(value string) bool { - return cIdentifierRegexp.MatchString(value) +func IsCIdentifier(value string) []string { + if !cIdentifierRegexp.MatchString(value) { + return []string{RegexError(cIdentifierFmt, "my_name", "MY_NAME", "MyName")} + } + return nil } // IsValidPortNum tests that the argument is a valid, non-zero port number. -func IsValidPortNum(port int) bool { - return 0 < port && port < 65536 +func IsValidPortNum(port int) []string { + if 1 <= port && port <= 65535 { + return nil + } + return []string{InclusiveRangeError(1, 65535)} } // Now in libcontainer UID/GID limits is 0 ~ 1<<31 - 1 @@ -163,67 +190,106 @@ const ( maxGroupID = math.MaxInt32 ) -// IsValidGroupId tests that the argument is a valid gids. -func IsValidGroupId(gid int64) bool { - return minGroupID <= gid && gid <= maxGroupID +// IsValidGroupId tests that the argument is a valid Unix GID. +func IsValidGroupId(gid int64) []string { + if minGroupID <= gid && gid <= maxGroupID { + return nil + } + return []string{InclusiveRangeError(minGroupID, maxGroupID)} } -// IsValidUserId tests that the argument is a valid uids. -func IsValidUserId(uid int64) bool { - return minUserID <= uid && uid <= maxUserID +// IsValidUserId tests that the argument is a valid Unix UID. +func IsValidUserId(uid int64) []string { + if minUserID <= uid && uid <= maxUserID { + return nil + } + return []string{InclusiveRangeError(minUserID, maxUserID)} } -const doubleHyphensFmt string = ".*(--).*" +var portNameCharsetRegex = regexp.MustCompile("^[-a-z0-9]+$") +var portNameOneLetterRegexp = regexp.MustCompile("[a-z]") -var doubleHyphensRegexp = regexp.MustCompile("^" + doubleHyphensFmt + "$") - -const IdentifierNoHyphensBeginEndFmt string = "[a-z0-9]([a-z0-9-]*[a-z0-9])*" - -var identifierNoHyphensBeginEndRegexp = regexp.MustCompile("^" + IdentifierNoHyphensBeginEndFmt + "$") - -const atLeastOneLetterFmt string = ".*[a-z].*" - -var atLeastOneLetterRegexp = regexp.MustCompile("^" + atLeastOneLetterFmt + "$") - -// IsValidPortName check that the argument is valid syntax. It must be non empty and no more than 15 characters long -// It must contains at least one letter [a-z] and it must contains only [a-z0-9-]. -// Hypens ('-') cannot be leading or trailing character of the string and cannot be adjacent to other hyphens. -// Although RFC 6335 allows upper and lower case characters but case is ignored for comparison purposes: (HTTP -// and http denote the same service). -func IsValidPortName(port string) bool { - if len(port) < 1 || len(port) > 15 { - return false +// IsValidPortName check that the argument is valid syntax. It must be +// non-empty and no more than 15 characters long. It may contain only [-a-z0-9] +// and must contain at least one letter [a-z]. It must not start or end with a +// hyphen, nor contain adjacent hyphens. +// +// Note: We only allow lower-case characters, even though RFC 6335 is case +// insensitive. +func IsValidPortName(port string) []string { + var errs []string + if len(port) > 15 { + errs = append(errs, MaxLenError(15)) } - if doubleHyphensRegexp.MatchString(port) { - return false + if !portNameCharsetRegex.MatchString(port) { + errs = append(errs, "must contain only alpha-numeric characters (a-z, 0-9), and hyphens (-)") } - if identifierNoHyphensBeginEndRegexp.MatchString(port) && atLeastOneLetterRegexp.MatchString(port) { - return true + if !portNameOneLetterRegexp.MatchString(port) { + errs = append(errs, "must contain at least one letter (a-z)") } - return false + if strings.Contains(port, "--") { + errs = append(errs, "must not contain consecutive hyphens") + } + if len(port) > 0 && (port[0] == '-' || port[len(port)-1] == '-') { + errs = append(errs, "must not begin or end with a hyphen") + } + return errs } // IsValidIP tests that the argument is a valid IP address. -func IsValidIP(value string) bool { - return net.ParseIP(value) != nil +func IsValidIP(value string) []string { + if net.ParseIP(value) == nil { + return []string{"must be a valid IP address, (e.g. 10.9.8.7)"} + } + return nil } const percentFmt string = "[0-9]+%" var percentRegexp = regexp.MustCompile("^" + percentFmt + "$") -func IsValidPercent(percent string) bool { - return percentRegexp.MatchString(percent) +func IsValidPercent(percent string) []string { + if !percentRegexp.MatchString(percent) { + return []string{RegexError(percentFmt, "1%", "93%")} + } + return nil } -const HTTPHeaderNameFmt string = "[-A-Za-z0-9]+" +const httpHeaderNameFmt string = "[-A-Za-z0-9]+" -var httpHeaderNameRegexp = regexp.MustCompile("^" + HTTPHeaderNameFmt + "$") +var httpHeaderNameRegexp = regexp.MustCompile("^" + httpHeaderNameFmt + "$") // IsHTTPHeaderName checks that a string conforms to the Go HTTP library's // definition of a valid header field name (a stricter subset than RFC7230). -func IsHTTPHeaderName(value string) bool { - return httpHeaderNameRegexp.MatchString(value) +func IsHTTPHeaderName(value string) []string { + if !httpHeaderNameRegexp.MatchString(value) { + return []string{RegexError(httpHeaderNameFmt, "X-Header-Name")} + } + return nil +} + +const configMapKeyFmt = `[-._a-zA-Z0-9]+` + +var configMapKeyRegexp = regexp.MustCompile("^" + configMapKeyFmt + "$") + +// IsConfigMapKey tests for a string that is a valid key for a ConfigMap or Secret +func IsConfigMapKey(value string) []string { + var errs []string + if len(value) > DNS1123SubdomainMaxLength { + errs = append(errs, MaxLenError(DNS1123SubdomainMaxLength)) + } + if !configMapKeyRegexp.MatchString(value) { + errs = append(errs, RegexError(configMapKeyFmt, "key.name", "KEY_NAME", "key-name")) + } + if value == "." { + errs = append(errs, `must not be '.'`) + } + if value == ".." { + errs = append(errs, `must not be '..'`) + } else if strings.HasPrefix(value, "..") { + errs = append(errs, `must not start with '..'`) + } + return errs } // MaxLenError returns a string explanation of a "string too long" validation @@ -260,3 +326,9 @@ func prefixEach(msgs []string, prefix string) []string { } return msgs } + +// InclusiveRangeError returns a string explanation of a numeric "must be +// between" validation failure. +func InclusiveRangeError(lo, hi int) string { + return fmt.Sprintf(`must be between %d and %d, inclusive`, lo, hi) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/wait/doc.go b/vendor/k8s.io/kubernetes/pkg/util/wait/doc.go index 240397a2..ff89dc17 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/wait/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/util/wait/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/util/wait/wait.go b/vendor/k8s.io/kubernetes/pkg/util/wait/wait.go index b56560e7..e2d6a486 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/wait/wait.go +++ b/vendor/k8s.io/kubernetes/pkg/util/wait/wait.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ import ( "math/rand" "time" - "k8s.io/kubernetes/pkg/util/runtime" + utilruntime "k8s.io/kubernetes/pkg/util/runtime" ) // For any test of the style: @@ -64,13 +64,14 @@ func NonSlidingUntil(f func(), period time.Duration, stopCh <-chan struct{}) { // stop channel is already closed. Pass NeverStop to Until if you // don't want it stop. func JitterUntil(f func(), period time.Duration, jitterFactor float64, sliding bool, stopCh <-chan struct{}) { - select { - case <-stopCh: - return - default: - } - for { + + select { + case <-stopCh: + return + default: + } + jitteredPeriod := period if jitterFactor > 0.0 { jitteredPeriod = Jitter(period, jitterFactor) @@ -82,22 +83,20 @@ func JitterUntil(f func(), period time.Duration, jitterFactor float64, sliding b } func() { - defer runtime.HandleCrash() + // Handle crash should decide if we want to exit the process on panic. + defer utilruntime.HandleCrash() f() }() if sliding { t = time.NewTimer(jitteredPeriod) - } else { - // The timer we created could already have fired, so be - // careful and check stopCh first. - select { - case <-stopCh: - return - default: - } } + // NOTE: b/c there is no priority selection in golang + // it is possible for this to race, meaning we could + // trigger t.C and stopCh, and t.C select falls through. + // In order to mitigate we re-check stopCh at the beginning + // of every loop to prevent extra executions of f(). select { case <-stopCh: return diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/default_rate_limiters.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/default_rate_limiters.go new file mode 100644 index 00000000..35caed4f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/default_rate_limiters.go @@ -0,0 +1,211 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "math" + "sync" + "time" + + "github.com/juju/ratelimit" +) + +type RateLimiter interface { + // When gets an item and gets to decide how long that item should wait + When(item interface{}) time.Duration + // Forget indicates that an item is finished being retried. Doesn't matter whether its for perm failing + // or for success, we'll stop tracking it + Forget(item interface{}) + // NumRequeues returns back how many failures the item has had + NumRequeues(item interface{}) int +} + +// DefaultControllerRateLimiter is a no-arg constructor for a default rate limiter for a workqueue. It has +// both overall and per-item rate limitting. The overall is a token bucket and the per-item is exponential +func DefaultControllerRateLimiter() RateLimiter { + return NewMaxOfRateLimiter( + NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second), + // 10 qps, 100 bucket size. This is only for retry speed and its only the overall factor (not per item) + &BucketRateLimiter{Bucket: ratelimit.NewBucketWithRate(float64(10), int64(100))}, + ) +} + +// BucketRateLimiter adapts a standard bucket to the workqueue ratelimiter API +type BucketRateLimiter struct { + *ratelimit.Bucket +} + +var _ RateLimiter = &BucketRateLimiter{} + +func (r *BucketRateLimiter) When(item interface{}) time.Duration { + return r.Bucket.Take(1) +} + +func (r *BucketRateLimiter) NumRequeues(item interface{}) int { + return 0 +} + +func (r *BucketRateLimiter) Forget(item interface{}) { +} + +// ItemExponentialFailureRateLimiter does a simple baseDelay*10^ limit +// dealing with max failures and expiration are up to the caller +type ItemExponentialFailureRateLimiter struct { + failuresLock sync.Mutex + failures map[interface{}]int + + baseDelay time.Duration + maxDelay time.Duration +} + +var _ RateLimiter = &ItemExponentialFailureRateLimiter{} + +func NewItemExponentialFailureRateLimiter(baseDelay time.Duration, maxDelay time.Duration) RateLimiter { + return &ItemExponentialFailureRateLimiter{ + failures: map[interface{}]int{}, + baseDelay: baseDelay, + maxDelay: maxDelay, + } +} + +func DefaultItemBasedRateLimiter() RateLimiter { + return NewItemExponentialFailureRateLimiter(time.Millisecond, 1000*time.Second) +} + +func (r *ItemExponentialFailureRateLimiter) When(item interface{}) time.Duration { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + exp := r.failures[item] + r.failures[item] = r.failures[item] + 1 + + // The backoff is capped such that 'calculated' value never overflows. + backoff := float64(r.baseDelay.Nanoseconds()) * math.Pow(2, float64(exp)) + if backoff > math.MaxInt64 { + return r.maxDelay + } + + calculated := time.Duration(backoff) + if calculated > r.maxDelay { + return r.maxDelay + } + + return calculated +} + +func (r *ItemExponentialFailureRateLimiter) NumRequeues(item interface{}) int { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + return r.failures[item] +} + +func (r *ItemExponentialFailureRateLimiter) Forget(item interface{}) { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + delete(r.failures, item) +} + +// ItemFastSlowRateLimiter does a quick retry for a certain number of attempts, then a slow retry after that +type ItemFastSlowRateLimiter struct { + failuresLock sync.Mutex + failures map[interface{}]int + + maxFastAttempts int + fastDelay time.Duration + slowDelay time.Duration +} + +var _ RateLimiter = &ItemFastSlowRateLimiter{} + +func NewItemFastSlowRateLimiter(fastDelay, slowDelay time.Duration, maxFastAttempts int) RateLimiter { + return &ItemFastSlowRateLimiter{ + failures: map[interface{}]int{}, + fastDelay: fastDelay, + slowDelay: slowDelay, + maxFastAttempts: maxFastAttempts, + } +} + +func (r *ItemFastSlowRateLimiter) When(item interface{}) time.Duration { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + r.failures[item] = r.failures[item] + 1 + + if r.failures[item] <= r.maxFastAttempts { + return r.fastDelay + } + + return r.slowDelay +} + +func (r *ItemFastSlowRateLimiter) NumRequeues(item interface{}) int { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + return r.failures[item] +} + +func (r *ItemFastSlowRateLimiter) Forget(item interface{}) { + r.failuresLock.Lock() + defer r.failuresLock.Unlock() + + delete(r.failures, item) +} + +// MaxOfRateLimiter calls every RateLimiter and returns the worst case response +// When used with a token bucket limiter, the burst could be apparently exceeded in cases where particular items +// were separately delayed a longer time. +type MaxOfRateLimiter struct { + limiters []RateLimiter +} + +func (r *MaxOfRateLimiter) When(item interface{}) time.Duration { + ret := time.Duration(0) + for _, limiter := range r.limiters { + curr := limiter.When(item) + if curr > ret { + ret = curr + } + } + + return ret +} + +func NewMaxOfRateLimiter(limiters ...RateLimiter) RateLimiter { + return &MaxOfRateLimiter{limiters: limiters} +} + +func (r *MaxOfRateLimiter) NumRequeues(item interface{}) int { + ret := 0 + for _, limiter := range r.limiters { + curr := limiter.NumRequeues(item) + if curr > ret { + ret = curr + } + } + + return ret +} + +func (r *MaxOfRateLimiter) Forget(item interface{}) { + for _, limiter := range r.limiters { + limiter.Forget(item) + } +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/delaying_queue.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/delaying_queue.go new file mode 100644 index 00000000..5a71b818 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/delaying_queue.go @@ -0,0 +1,240 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "sort" + "time" + + "k8s.io/kubernetes/pkg/util/clock" + utilruntime "k8s.io/kubernetes/pkg/util/runtime" +) + +// DelayingInterface is an Interface that can Add an item at a later time. This makes it easier to +// requeue items after failures without ending up in a hot-loop. +type DelayingInterface interface { + Interface + // AddAfter adds an item to the workqueue after the indicated duration has passed + AddAfter(item interface{}, duration time.Duration) +} + +// NewDelayingQueue constructs a new workqueue with delayed queuing ability +func NewDelayingQueue() DelayingInterface { + return newDelayingQueue(clock.RealClock{}, "") +} + +func NewNamedDelayingQueue(name string) DelayingInterface { + return newDelayingQueue(clock.RealClock{}, name) +} + +func newDelayingQueue(clock clock.Clock, name string) DelayingInterface { + ret := &delayingType{ + Interface: NewNamed(name), + clock: clock, + heartbeat: clock.Tick(maxWait), + stopCh: make(chan struct{}), + waitingTimeByEntry: map[t]time.Time{}, + waitingForAddCh: make(chan waitFor, 1000), + metrics: newRetryMetrics(name), + } + + go ret.waitingLoop() + + return ret +} + +// delayingType wraps an Interface and provides delayed re-enquing +type delayingType struct { + Interface + + // clock tracks time for delayed firing + clock clock.Clock + + // stopCh lets us signal a shutdown to the waiting loop + stopCh chan struct{} + + // heartbeat ensures we wait no more than maxWait before firing + heartbeat <-chan time.Time + + // waitingForAdd is an ordered slice of items to be added to the contained work queue + waitingForAdd []waitFor + // waitingTimeByEntry holds wait time by entry, so we can lookup pre-existing indexes + waitingTimeByEntry map[t]time.Time + // waitingForAddCh is a buffered channel that feeds waitingForAdd + waitingForAddCh chan waitFor + + // metrics counts the number of retries + metrics retryMetrics +} + +// waitFor holds the data to add and the time it should be added +type waitFor struct { + data t + readyAt time.Time +} + +// ShutDown gives a way to shut off this queue +func (q *delayingType) ShutDown() { + q.Interface.ShutDown() + close(q.stopCh) +} + +// AddAfter adds the given item to the work queue after the given delay +func (q *delayingType) AddAfter(item interface{}, duration time.Duration) { + // don't add if we're already shutting down + if q.ShuttingDown() { + return + } + + q.metrics.retry() + + // immediately add things with no delay + if duration <= 0 { + q.Add(item) + return + } + + select { + case <-q.stopCh: + // unblock if ShutDown() is called + case q.waitingForAddCh <- waitFor{data: item, readyAt: q.clock.Now().Add(duration)}: + } +} + +// maxWait keeps a max bound on the wait time. It's just insurance against weird things happening. +// Checking the queue every 10 seconds isn't expensive and we know that we'll never end up with an +// expired item sitting for more than 10 seconds. +const maxWait = 10 * time.Second + +// waitingLoop runs until the workqueue is shutdown and keeps a check on the list of items to be added. +func (q *delayingType) waitingLoop() { + defer utilruntime.HandleCrash() + + // Make a placeholder channel to use when there are no items in our list + never := make(<-chan time.Time) + + for { + if q.Interface.ShuttingDown() { + // discard waiting entries + q.waitingForAdd = nil + q.waitingTimeByEntry = nil + return + } + + now := q.clock.Now() + + // Add ready entries + readyEntries := 0 + for _, entry := range q.waitingForAdd { + if entry.readyAt.After(now) { + break + } + q.Add(entry.data) + delete(q.waitingTimeByEntry, entry.data) + readyEntries++ + } + q.waitingForAdd = q.waitingForAdd[readyEntries:] + + // Set up a wait for the first item's readyAt (if one exists) + nextReadyAt := never + if len(q.waitingForAdd) > 0 { + nextReadyAt = q.clock.After(q.waitingForAdd[0].readyAt.Sub(now)) + } + + select { + case <-q.stopCh: + return + + case <-q.heartbeat: + // continue the loop, which will add ready items + + case <-nextReadyAt: + // continue the loop, which will add ready items + + case waitEntry := <-q.waitingForAddCh: + if waitEntry.readyAt.After(q.clock.Now()) { + q.waitingForAdd = insert(q.waitingForAdd, q.waitingTimeByEntry, waitEntry) + } else { + q.Add(waitEntry.data) + } + + drained := false + for !drained { + select { + case waitEntry := <-q.waitingForAddCh: + if waitEntry.readyAt.After(q.clock.Now()) { + q.waitingForAdd = insert(q.waitingForAdd, q.waitingTimeByEntry, waitEntry) + } else { + q.Add(waitEntry.data) + } + default: + drained = true + } + } + } + } +} + +// inserts the given entry into the sorted entries list +// same semantics as append()... the given slice may be modified, +// and the returned value should be used +func insert(entries []waitFor, knownEntries map[t]time.Time, entry waitFor) []waitFor { + // if the entry is already in our retry list and the existing time is before the new one, just skip it + existingTime, exists := knownEntries[entry.data] + if exists && existingTime.Before(entry.readyAt) { + return entries + } + + // if the entry exists and is scheduled for later, go ahead and remove the entry + if exists { + if existingIndex := findEntryIndex(entries, existingTime, entry.data); existingIndex >= 0 && existingIndex < len(entries) { + entries = append(entries[:existingIndex], entries[existingIndex+1:]...) + } + } + + insertionIndex := sort.Search(len(entries), func(i int) bool { + return entry.readyAt.Before(entries[i].readyAt) + }) + + // grow by 1 + entries = append(entries, waitFor{}) + // shift items from the insertion point to the end + copy(entries[insertionIndex+1:], entries[insertionIndex:]) + // insert the record + entries[insertionIndex] = entry + + knownEntries[entry.data] = entry.readyAt + + return entries +} + +// findEntryIndex returns the index for an existing entry +func findEntryIndex(entries []waitFor, existingTime time.Time, data t) int { + index := sort.Search(len(entries), func(i int) bool { + return entries[i].readyAt.After(existingTime) || existingTime == entries[i].readyAt + }) + + // we know this is the earliest possible index, but there could be multiple with the same time + // iterate from here to find the dupe + for ; index < len(entries); index++ { + if entries[index].data == data { + break + } + } + + return index +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/doc.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/doc.go new file mode 100644 index 00000000..2a00c74a --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/doc.go @@ -0,0 +1,26 @@ +/* +Copyright 2014 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package workqueue provides a simple queue that supports the following +// features: +// * Fair: items processed in the order in which they are added. +// * Stingy: a single item will not be processed multiple times concurrently, +// and if an item is added multiple times before it can be processed, it +// will only be processed once. +// * Multiple consumers and producers. In particular, it is allowed for an +// item to be reenqueued while it is being processed. +// * Shutdown notifications. +package workqueue diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/metrics.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/metrics.go new file mode 100644 index 00000000..8a37d2e7 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/metrics.go @@ -0,0 +1,153 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "time" + + "github.com/prometheus/client_golang/prometheus" +) + +type queueMetrics interface { + add(item t) + get(item t) + done(item t) +} + +type defaultQueueMetrics struct { + depth prometheus.Gauge + adds prometheus.Counter + latency prometheus.Summary + workDuration prometheus.Summary + addTimes map[t]time.Time + processingStartTimes map[t]time.Time +} + +func newQueueMetrics(name string) queueMetrics { + var ret *defaultQueueMetrics + if len(name) == 0 { + return ret + } + + ret = &defaultQueueMetrics{ + depth: prometheus.NewGauge(prometheus.GaugeOpts{ + Subsystem: name, + Name: "depth", + Help: "Current depth of workqueue: " + name, + }), + adds: prometheus.NewCounter(prometheus.CounterOpts{ + Subsystem: name, + Name: "adds", + Help: "Total number of adds handled by workqueue: " + name, + }), + latency: prometheus.NewSummary(prometheus.SummaryOpts{ + Subsystem: name, + Name: "queue_latency", + Help: "How long an item stays in workqueue" + name + " before being requested.", + }), + workDuration: prometheus.NewSummary(prometheus.SummaryOpts{ + Subsystem: name, + Name: "work_duration", + Help: "How long processing an item from workqueue" + name + " takes.", + }), + addTimes: map[t]time.Time{}, + processingStartTimes: map[t]time.Time{}, + } + + prometheus.Register(ret.depth) + prometheus.Register(ret.adds) + prometheus.Register(ret.latency) + prometheus.Register(ret.workDuration) + + return ret +} + +func (m *defaultQueueMetrics) add(item t) { + if m == nil { + return + } + + m.adds.Inc() + m.depth.Inc() + if _, exists := m.addTimes[item]; !exists { + m.addTimes[item] = time.Now() + } +} + +func (m *defaultQueueMetrics) get(item t) { + if m == nil { + return + } + + m.depth.Dec() + m.processingStartTimes[item] = time.Now() + if startTime, exists := m.addTimes[item]; exists { + m.latency.Observe(sinceInMicroseconds(startTime)) + delete(m.addTimes, item) + } +} + +func (m *defaultQueueMetrics) done(item t) { + if m == nil { + return + } + + if startTime, exists := m.processingStartTimes[item]; exists { + m.workDuration.Observe(sinceInMicroseconds(startTime)) + delete(m.processingStartTimes, item) + } +} + +// Gets the time since the specified start in microseconds. +func sinceInMicroseconds(start time.Time) float64 { + return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) +} + +type retryMetrics interface { + retry() +} + +type defaultRetryMetrics struct { + retries prometheus.Counter +} + +func newRetryMetrics(name string) retryMetrics { + var ret *defaultRetryMetrics + if len(name) == 0 { + return ret + } + + ret = &defaultRetryMetrics{ + retries: prometheus.NewCounter(prometheus.CounterOpts{ + Subsystem: name, + Name: "retries", + Help: "Total number of retries handled by workqueue: " + name, + }), + } + + prometheus.Register(ret.retries) + + return ret +} + +func (m *defaultRetryMetrics) retry() { + if m == nil { + return + } + + m.retries.Inc() +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/parallelizer.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/parallelizer.go new file mode 100644 index 00000000..a9305935 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/parallelizer.go @@ -0,0 +1,48 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "sync" + + utilruntime "k8s.io/kubernetes/pkg/util/runtime" +) + +type DoWorkPieceFunc func(piece int) + +// Parallelize is a very simple framework that allow for parallelizing +// N independent pieces of work. +func Parallelize(workers, pieces int, doWorkPiece DoWorkPieceFunc) { + toProcess := make(chan int, pieces) + for i := 0; i < pieces; i++ { + toProcess <- i + } + close(toProcess) + + wg := sync.WaitGroup{} + wg.Add(workers) + for i := 0; i < workers; i++ { + go func() { + defer utilruntime.HandleCrash() + defer wg.Done() + for piece := range toProcess { + doWorkPiece(piece) + } + }() + } + wg.Wait() +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/queue.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/queue.go new file mode 100644 index 00000000..9a2ecad3 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/queue.go @@ -0,0 +1,172 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import ( + "sync" +) + +type Interface interface { + Add(item interface{}) + Len() int + Get() (item interface{}, shutdown bool) + Done(item interface{}) + ShutDown() + ShuttingDown() bool +} + +// New constructs a new workqueue (see the package comment). +func New() *Type { + return NewNamed("") +} + +func NewNamed(name string) *Type { + return &Type{ + dirty: set{}, + processing: set{}, + cond: sync.NewCond(&sync.Mutex{}), + metrics: newQueueMetrics(name), + } +} + +// Type is a work queue (see the package comment). +type Type struct { + // queue defines the order in which we will work on items. Every + // element of queue should be in the dirty set and not in the + // processing set. + queue []t + + // dirty defines all of the items that need to be processed. + dirty set + + // Things that are currently being processed are in the processing set. + // These things may be simultaneously in the dirty set. When we finish + // processing something and remove it from this set, we'll check if + // it's in the dirty set, and if so, add it to the queue. + processing set + + cond *sync.Cond + + shuttingDown bool + + metrics queueMetrics +} + +type empty struct{} +type t interface{} +type set map[t]empty + +func (s set) has(item t) bool { + _, exists := s[item] + return exists +} + +func (s set) insert(item t) { + s[item] = empty{} +} + +func (s set) delete(item t) { + delete(s, item) +} + +// Add marks item as needing processing. +func (q *Type) Add(item interface{}) { + q.cond.L.Lock() + defer q.cond.L.Unlock() + if q.shuttingDown { + return + } + if q.dirty.has(item) { + return + } + + q.metrics.add(item) + + q.dirty.insert(item) + if q.processing.has(item) { + return + } + + q.queue = append(q.queue, item) + q.cond.Signal() +} + +// Len returns the current queue length, for informational purposes only. You +// shouldn't e.g. gate a call to Add() or Get() on Len() being a particular +// value, that can't be synchronized properly. +func (q *Type) Len() int { + q.cond.L.Lock() + defer q.cond.L.Unlock() + return len(q.queue) +} + +// Get blocks until it can return an item to be processed. If shutdown = true, +// the caller should end their goroutine. You must call Done with item when you +// have finished processing it. +func (q *Type) Get() (item interface{}, shutdown bool) { + q.cond.L.Lock() + defer q.cond.L.Unlock() + for len(q.queue) == 0 && !q.shuttingDown { + q.cond.Wait() + } + if len(q.queue) == 0 { + // We must be shutting down. + return nil, true + } + + item, q.queue = q.queue[0], q.queue[1:] + + q.metrics.get(item) + + q.processing.insert(item) + q.dirty.delete(item) + + return item, false +} + +// Done marks item as done processing, and if it has been marked as dirty again +// while it was being processed, it will be re-added to the queue for +// re-processing. +func (q *Type) Done(item interface{}) { + q.cond.L.Lock() + defer q.cond.L.Unlock() + + q.metrics.done(item) + + q.processing.delete(item) + if q.dirty.has(item) { + q.queue = append(q.queue, item) + q.cond.Signal() + } +} + +// Shutdown will cause q to ignore all new items added to it. As soon as the +// worker goroutines have drained the existing items in the queue, they will be +// instructed to exit. +func (q *Type) ShutDown() { + q.cond.L.Lock() + defer q.cond.L.Unlock() + q.shuttingDown = true + q.cond.Broadcast() +} + +func (q *Type) ShuttingDown() bool { + q.cond.L.Lock() + defer q.cond.L.Unlock() + + return q.shuttingDown +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/rate_limitting_queue.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/rate_limitting_queue.go new file mode 100644 index 00000000..9a2bfbb5 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/rate_limitting_queue.go @@ -0,0 +1,68 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +// RateLimitingInterface is an Interface that can Add an item at a later time. This makes it easier to +// requeue items after failures without ending up in a hot-loop. +type RateLimitingInterface interface { + DelayingInterface + // AddRateLimited adds an item to the workqueue after the rate limiter says its ok + AddRateLimited(item interface{}) + + // Forget indicates that an item is finished being retried. Doesn't matter whether its for perm failing + // or for success, we'll stop the rate limiter from tracking it. This only clears the `rateLimiter`, you + // still have to call `Done` on the queue. + Forget(item interface{}) + // NumRequeues returns back how many times the item was requeued + NumRequeues(item interface{}) int +} + +// NewRateLimitingQueue constructs a new workqueue with rateLimited queuing ability +// Remember to call Forget! If you don't, you may end up tracking failures forever. +func NewRateLimitingQueue(rateLimiter RateLimiter) RateLimitingInterface { + return &rateLimitingType{ + DelayingInterface: NewDelayingQueue(), + rateLimiter: rateLimiter, + } +} + +func NewNamedRateLimitingQueue(rateLimiter RateLimiter, name string) RateLimitingInterface { + return &rateLimitingType{ + DelayingInterface: NewNamedDelayingQueue(name), + rateLimiter: rateLimiter, + } +} + +// rateLimitingType wraps an Interface and provides rateLimited re-enquing +type rateLimitingType struct { + DelayingInterface + + rateLimiter RateLimiter +} + +// AddRateLimited AddAfter's the item based on the time when the rate limiter says its ok +func (q *rateLimitingType) AddRateLimited(item interface{}) { + q.DelayingInterface.AddAfter(item, q.rateLimiter.When(item)) +} + +func (q *rateLimitingType) NumRequeues(item interface{}) int { + return q.rateLimiter.NumRequeues(item) +} + +func (q *rateLimitingType) Forget(item interface{}) { + q.rateLimiter.Forget(item) +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/workqueue/timed_queue.go b/vendor/k8s.io/kubernetes/pkg/util/workqueue/timed_queue.go new file mode 100644 index 00000000..2ad90bfd --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/workqueue/timed_queue.go @@ -0,0 +1,52 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package workqueue + +import "time" + +type TimedWorkQueue struct { + *Type +} + +type TimedWorkQueueItem struct { + StartTime time.Time + Object interface{} +} + +func NewTimedWorkQueue() *TimedWorkQueue { + return &TimedWorkQueue{New()} +} + +// Add adds the obj along with the current timestamp to the queue. +func (q TimedWorkQueue) Add(timedItem *TimedWorkQueueItem) { + q.Type.Add(timedItem) +} + +// Get gets the obj along with its timestamp from the queue. +func (q TimedWorkQueue) Get() (timedItem *TimedWorkQueueItem, shutdown bool) { + origin, shutdown := q.Type.Get() + if origin == nil { + return nil, shutdown + } + timedItem, _ = origin.(*TimedWorkQueueItem) + return timedItem, shutdown +} + +func (q TimedWorkQueue) Done(timedItem *TimedWorkQueueItem) error { + q.Type.Done(timedItem) + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/yaml/decoder.go b/vendor/k8s.io/kubernetes/pkg/util/yaml/decoder.go index a48a6ce8..c65c2d6b 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/yaml/decoder.go +++ b/vendor/k8s.io/kubernetes/pkg/util/yaml/decoder.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -45,7 +45,7 @@ func ToJSON(data []byte) ([]byte, error) { // separating individual documents. It first converts the YAML // body to JSON, then unmarshals the JSON. type YAMLToJSONDecoder struct { - scanner *bufio.Scanner + reader Reader } // NewYAMLToJSONDecoder decodes YAML documents from the provided @@ -53,10 +53,9 @@ type YAMLToJSONDecoder struct { // the YAML spec) into its own chunk, converting it to JSON via // yaml.YAMLToJSON, and then passing it to json.Decoder. func NewYAMLToJSONDecoder(r io.Reader) *YAMLToJSONDecoder { - scanner := bufio.NewScanner(r) - scanner.Split(splitYAMLDocument) + reader := bufio.NewReader(r) return &YAMLToJSONDecoder{ - scanner: scanner, + reader: NewYAMLReader(reader), } } @@ -64,17 +63,18 @@ func NewYAMLToJSONDecoder(r io.Reader) *YAMLToJSONDecoder { // an error. The decoding rules match json.Unmarshal, not // yaml.Unmarshal. func (d *YAMLToJSONDecoder) Decode(into interface{}) error { - if d.scanner.Scan() { - data, err := yaml.YAMLToJSON(d.scanner.Bytes()) + bytes, err := d.reader.Read() + if err != nil && err != io.EOF { + return err + } + + if len(bytes) != 0 { + data, err := yaml.YAMLToJSON(bytes) if err != nil { return err } return json.Unmarshal(data, into) } - err := d.scanner.Err() - if err == nil { - err = io.EOF - } return err } @@ -137,6 +137,7 @@ func (d *YAMLDecoder) Close() error { } const yamlSeparator = "\n---" +const separator = "---\n" // splitYAMLDocument is a bufio.SplitFunc for splitting YAML streams into individual documents. func splitYAMLDocument(data []byte, atEOF bool) (advance int, token []byte, err error) { @@ -222,6 +223,64 @@ func (d *YAMLOrJSONDecoder) Decode(into interface{}) error { return err } +type Reader interface { + Read() ([]byte, error) +} + +type YAMLReader struct { + reader Reader +} + +func NewYAMLReader(r *bufio.Reader) *YAMLReader { + return &YAMLReader{ + reader: &LineReader{reader: r}, + } +} + +// Read returns a full YAML document. +func (r *YAMLReader) Read() ([]byte, error) { + var buffer bytes.Buffer + for { + line, err := r.reader.Read() + if err != nil && err != io.EOF { + return nil, err + } + + if string(line) == separator || err == io.EOF { + if buffer.Len() != 0 { + return buffer.Bytes(), nil + } + if err == io.EOF { + return nil, err + } + } else { + buffer.Write(line) + } + } +} + +type LineReader struct { + reader *bufio.Reader +} + +// Read returns a single line (with '\n' ended) from the underlying reader. +// An error is returned iff there is an error with the underlying reader. +func (r *LineReader) Read() ([]byte, error) { + var ( + isPrefix bool = true + err error = nil + line []byte + buffer bytes.Buffer + ) + + for isPrefix && err == nil { + line, isPrefix, err = r.reader.ReadLine() + buffer.Write(line) + } + buffer.WriteByte('\n') + return buffer.Bytes(), err +} + // GuessJSONStream scans the provided reader up to size, looking // for an open brace indicating this is JSON. It will return the // bufio.Reader it creates for the consumer. diff --git a/vendor/k8s.io/kubernetes/pkg/version/base.go b/vendor/k8s.io/kubernetes/pkg/version/base.go index 95fe9e94..4f53bd24 100644 --- a/vendor/k8s.io/kubernetes/pkg/version/base.go +++ b/vendor/k8s.io/kubernetes/pkg/version/base.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -39,10 +39,10 @@ var ( // them irrelevant. (Next we'll take it out, which may muck with // scripts consuming the kubectl version output - but most of // these should be looking at gitVersion already anyways.) - gitMajor string = "1" // major version, always numeric - gitMinor string = "3" // minor version, numeric possibly followed by "+" + gitMajor string = "1" // major version, always numeric + gitMinor string = "4+" // minor version, numeric possibly followed by "+" - // semantic version, dervied by build scripts (see + // semantic version, derived by build scripts (see // https://github.com/kubernetes/kubernetes/blob/master/docs/design/versioning.md // for a detailed discussion of this field) // @@ -51,7 +51,7 @@ var ( // semantic version is a git hash, but the version itself is no // longer the direct output of "git describe", but a slight // translation to be semver compliant. - gitVersion string = "v1.3.0+$Format:%h$" + gitVersion string = "v1.4.0-beta.3+$Format:%h$" gitCommit string = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD) gitTreeState string = "not a git tree" // state of git tree, either "clean" or "dirty" diff --git a/vendor/k8s.io/kubernetes/pkg/version/doc.go b/vendor/k8s.io/kubernetes/pkg/version/doc.go index c0397829..ccedec76 100644 --- a/vendor/k8s.io/kubernetes/pkg/version/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/version/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/version/semver.go b/vendor/k8s.io/kubernetes/pkg/version/semver.go index 1b5a845a..1f4067e2 100644 --- a/vendor/k8s.io/kubernetes/pkg/version/semver.go +++ b/vendor/k8s.io/kubernetes/pkg/version/semver.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/version/version.go b/vendor/k8s.io/kubernetes/pkg/version/version.go index b8ac0d6c..0da3aadd 100644 --- a/vendor/k8s.io/kubernetes/pkg/version/version.go +++ b/vendor/k8s.io/kubernetes/pkg/version/version.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,8 +19,6 @@ package version import ( "fmt" "runtime" - - "github.com/prometheus/client_golang/prometheus" ) // Info contains versioning information. @@ -60,17 +58,3 @@ func Get() Info { func (info Info) String() string { return info.GitVersion } - -func init() { - buildInfo := prometheus.NewGaugeVec( - prometheus.GaugeOpts{ - Name: "kubernetes_build_info", - Help: "A metric with a constant '1' value labeled by major, minor, git version, git commit, git tree state, build date, Go version, and compiler from which Kubernetes was built, and platform on which it is running.", - }, - []string{"major", "minor", "gitVersion", "gitCommit", "gitTreeState", "buildDate", "goVersion", "compiler", "platform"}, - ) - info := Get() - buildInfo.WithLabelValues(info.Major, info.Minor, info.GitVersion, info.GitCommit, info.GitTreeState, info.BuildDate, info.GoVersion, info.Compiler, info.Platform).Set(1) - - prometheus.MustRegister(buildInfo) -} diff --git a/vendor/k8s.io/kubernetes/pkg/watch/doc.go b/vendor/k8s.io/kubernetes/pkg/watch/doc.go index fd9b437e..5fde5e74 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/doc.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/filter.go b/vendor/k8s.io/kubernetes/pkg/watch/filter.go index 1eff5b94..3ca27f22 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/filter.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/filter.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/mux.go b/vendor/k8s.io/kubernetes/pkg/watch/mux.go index 700c26bc..ec6de050 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/mux.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/mux.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/streamwatcher.go b/vendor/k8s.io/kubernetes/pkg/watch/streamwatcher.go index 2802a9e0..26cf61d0 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/streamwatcher.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/streamwatcher.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/until.go b/vendor/k8s.io/kubernetes/pkg/watch/until.go index 9f34f9d0..4259f51b 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/until.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/until.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/versioned/decoder.go b/vendor/k8s.io/kubernetes/pkg/watch/versioned/decoder.go index 2d13ca80..e5865273 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/versioned/decoder.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/versioned/decoder.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/versioned/encoder.go b/vendor/k8s.io/kubernetes/pkg/watch/versioned/encoder.go index 8438ee98..df23e0bd 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/versioned/encoder.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/versioned/encoder.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/versioned/generated.pb.go b/vendor/k8s.io/kubernetes/pkg/watch/versioned/generated.pb.go index c1cbbd8b..db5ffadd 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/versioned/generated.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/versioned/generated.pb.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -33,6 +33,9 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" +import strings "strings" +import reflect "reflect" + import io "io" // Reference imports to suppress errors if they are not otherwise used. @@ -40,9 +43,13 @@ var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf -func (m *Event) Reset() { *m = Event{} } -func (m *Event) String() string { return proto.CompactTextString(m) } -func (*Event) ProtoMessage() {} +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +const _ = proto.GoGoProtoPackageIsVersion1 + +func (m *Event) Reset() { *m = Event{} } +func (*Event) ProtoMessage() {} +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } func init() { proto.RegisterType((*Event)(nil), "k8s.io.kubernetes.pkg.watch.versioned.Event") @@ -127,6 +134,25 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } +func (this *Event) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&Event{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `Object:` + strings.Replace(strings.Replace(this.Object.String(), "RawExtension", "k8s_io_kubernetes_pkg_runtime.RawExtension", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} func (m *Event) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -340,3 +366,25 @@ var ( ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") ) + +var fileDescriptorGenerated = []byte{ + // 280 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x6c, 0x90, 0x41, 0x4b, 0xc3, 0x30, + 0x18, 0x86, 0x1b, 0x99, 0x83, 0x55, 0xf1, 0xd0, 0xd3, 0xe8, 0x21, 0x2b, 0x82, 0x30, 0x18, 0x4b, + 0x50, 0x10, 0x3c, 0x17, 0x76, 0x16, 0xaa, 0x27, 0x6f, 0x6d, 0xf7, 0x99, 0xc5, 0xba, 0xa4, 0xa4, + 0x5f, 0x37, 0x77, 0x11, 0x7f, 0x82, 0x3f, 0xab, 0xc7, 0x1d, 0x3d, 0x0d, 0x5b, 0xff, 0x88, 0x98, + 0x95, 0x09, 0xa3, 0xb7, 0xbc, 0x24, 0xcf, 0xc3, 0xfb, 0xc6, 0xbd, 0xcd, 0xee, 0x0a, 0x26, 0x35, + 0xcf, 0xca, 0x04, 0x8c, 0x02, 0x84, 0x82, 0xe7, 0x99, 0xe0, 0xeb, 0x18, 0xd3, 0x05, 0x5f, 0x81, + 0x29, 0xa4, 0x56, 0x30, 0xe7, 0x02, 0x14, 0x98, 0x18, 0x61, 0xce, 0x72, 0xa3, 0x51, 0x7b, 0x57, + 0x7b, 0x8c, 0xfd, 0x63, 0x2c, 0xcf, 0x04, 0xb3, 0x18, 0x3b, 0x60, 0xfe, 0x54, 0x48, 0x5c, 0x94, + 0x09, 0x4b, 0xf5, 0x92, 0x0b, 0x2d, 0x34, 0xb7, 0x74, 0x52, 0x3e, 0xdb, 0x64, 0x83, 0x3d, 0xed, + 0xad, 0xfe, 0xb4, 0xbb, 0x8c, 0x29, 0x15, 0xca, 0x25, 0x1c, 0x97, 0xf0, 0xaf, 0xbb, 0x9f, 0x97, + 0x28, 0x5f, 0xb9, 0x54, 0x58, 0xa0, 0x39, 0x46, 0x2e, 0xdf, 0xdd, 0xd3, 0xd9, 0x0a, 0x14, 0x7a, + 0x81, 0xdb, 0xc3, 0x4d, 0x0e, 0x43, 0x12, 0x90, 0xf1, 0x20, 0x3c, 0xaf, 0x76, 0x23, 0xa7, 0xd9, + 0x8d, 0x7a, 0x8f, 0x9b, 0x1c, 0x22, 0x7b, 0xe3, 0x3d, 0xb8, 0x7d, 0x9d, 0xbc, 0x40, 0x8a, 0xc3, + 0x93, 0x80, 0x8c, 0xcf, 0x6e, 0x26, 0xac, 0x7b, 0x73, 0xdb, 0x8e, 0x45, 0xf1, 0x7a, 0xf6, 0x86, + 0xa0, 0xfe, 0xa6, 0x87, 0x17, 0xad, 0xb0, 0x7f, 0x6f, 0x15, 0x51, 0xab, 0x0a, 0x27, 0x55, 0x4d, + 0x9d, 0x6d, 0x4d, 0x9d, 0xaf, 0x9a, 0x3a, 0x1f, 0x0d, 0x25, 0x55, 0x43, 0xc9, 0xb6, 0xa1, 0xe4, + 0xbb, 0xa1, 0xe4, 0xf3, 0x87, 0x3a, 0x4f, 0x83, 0xc3, 0xef, 0xfd, 0x06, 0x00, 0x00, 0xff, 0xff, + 0x23, 0x3d, 0x7b, 0x7e, 0x9c, 0x01, 0x00, 0x00, +} diff --git a/vendor/k8s.io/kubernetes/pkg/watch/versioned/generated.proto b/vendor/k8s.io/kubernetes/pkg/watch/versioned/generated.proto index 5bb70221..8d550655 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/versioned/generated.proto +++ b/vendor/k8s.io/kubernetes/pkg/watch/versioned/generated.proto @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/versioned/register.go b/vendor/k8s.io/kubernetes/pkg/watch/versioned/register.go index feaea3b6..e90a021a 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/versioned/register.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/versioned/register.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/versioned/types.go b/vendor/k8s.io/kubernetes/pkg/watch/versioned/types.go index ba608aea..f8e968cc 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/versioned/types.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/versioned/types.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors All rights reserved. +Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/pkg/watch/watch.go b/vendor/k8s.io/kubernetes/pkg/watch/watch.go index e8fca0a6..96b2fe3d 100644 --- a/vendor/k8s.io/kubernetes/pkg/watch/watch.go +++ b/vendor/k8s.io/kubernetes/pkg/watch/watch.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors All rights reserved. +Copyright 2014 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/gcp/gcp.go b/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/gcp/gcp.go index 1efbb20f..fa5e079f 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/gcp/gcp.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/gcp/gcp.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,6 +25,7 @@ import ( "golang.org/x/oauth2" "golang.org/x/oauth2/google" + clientreporestclient "k8s.io/client-go/1.4/rest" "k8s.io/kubernetes/pkg/client/restclient" ) @@ -32,6 +33,9 @@ func init() { if err := restclient.RegisterAuthProviderPlugin("gcp", newGCPAuthProvider); err != nil { glog.Fatalf("Failed to register gcp auth plugin: %v", err) } + if err := clientreporestclient.RegisterAuthProviderPlugin("gcp", newGCPAuthProviderForClientRepo); err != nil { + glog.Fatalf("Failed to register gcp auth plugin: %v", err) + } } type gcpAuthProvider struct { @@ -47,6 +51,15 @@ func newGCPAuthProvider(_ string, gcpConfig map[string]string, persister restcli return &gcpAuthProvider{ts, persister}, nil } +// newGCPAuthProviderForClientRepo is the same as newGCPAuthProvider, but is programmed against client-go's interface +func newGCPAuthProviderForClientRepo(_ string, gcpConfig map[string]string, persister clientreporestclient.AuthProviderConfigPersister) (clientreporestclient.AuthProvider, error) { + ts, err := newCachedTokenSource(gcpConfig["access-token"], gcpConfig["expiry"], persister) + if err != nil { + return nil, err + } + return &gcpAuthProvider{ts, persister}, nil +} + func (g *gcpAuthProvider) WrapTransport(rt http.RoundTripper) http.RoundTripper { return &oauth2.Transport{ Source: g.tokenSource, diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/oidc/oidc.go b/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/oidc/oidc.go index 3ad279c1..155bb486 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/oidc/oidc.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/oidc/oidc.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -97,7 +97,7 @@ func newOIDCAuthProvider(_ string, cfg map[string]string, persister restclient.A } hc := &http.Client{Transport: trans} - providerCfg, err := oidc.FetchProviderConfig(hc, strings.TrimSuffix(issuer, "/")) + providerCfg, err := oidc.FetchProviderConfig(hc, issuer) if err != nil { return nil, fmt.Errorf("error fetching provider config: %v", err) } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/plugins.go b/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/plugins.go index 2b422ddd..17d3ad42 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/plugins.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/client/auth/plugins.go @@ -1,5 +1,5 @@ /* -Copyright 2016 The Kubernetes Authors All rights reserved. +Copyright 2016 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/vendor/k8s.io/kubernetes/third_party/forked/json/fields.go b/vendor/k8s.io/kubernetes/third_party/forked/golang/json/fields.go similarity index 100% rename from vendor/k8s.io/kubernetes/third_party/forked/json/fields.go rename to vendor/k8s.io/kubernetes/third_party/forked/golang/json/fields.go diff --git a/vendor/k8s.io/kubernetes/third_party/forked/golang/netutil/addr.go b/vendor/k8s.io/kubernetes/third_party/forked/golang/netutil/addr.go new file mode 100644 index 00000000..c70f431c --- /dev/null +++ b/vendor/k8s.io/kubernetes/third_party/forked/golang/netutil/addr.go @@ -0,0 +1,27 @@ +package netutil + +import ( + "net/url" + "strings" +) + +// FROM: http://golang.org/src/net/http/client.go +// Given a string of the form "host", "host:port", or "[ipv6::address]:port", +// return true if the string includes a port. +func hasPort(s string) bool { return strings.LastIndex(s, ":") > strings.LastIndex(s, "]") } + +// FROM: http://golang.org/src/net/http/transport.go +var portMap = map[string]string{ + "http": "80", + "https": "443", +} + +// FROM: http://golang.org/src/net/http/transport.go +// canonicalAddr returns url.Host but always with a ":port" suffix +func CanonicalAddr(url *url.URL) string { + addr := url.Host + if !hasPort(addr) { + return addr + ":" + portMap[url.Scheme] + } + return addr +} diff --git a/vendor/k8s.io/kubernetes/third_party/forked/golang/reflect/deep_equal.go b/vendor/k8s.io/kubernetes/third_party/forked/golang/reflect/deep_equal.go new file mode 100644 index 00000000..9e45dbe1 --- /dev/null +++ b/vendor/k8s.io/kubernetes/third_party/forked/golang/reflect/deep_equal.go @@ -0,0 +1,388 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package reflect is a fork of go's standard library reflection package, which +// allows for deep equal with equality functions defined. +package reflect + +import ( + "fmt" + "reflect" + "strings" +) + +// Equalities is a map from type to a function comparing two values of +// that type. +type Equalities map[reflect.Type]reflect.Value + +// For convenience, panics on errrors +func EqualitiesOrDie(funcs ...interface{}) Equalities { + e := Equalities{} + if err := e.AddFuncs(funcs...); err != nil { + panic(err) + } + return e +} + +// AddFuncs is a shortcut for multiple calls to AddFunc. +func (e Equalities) AddFuncs(funcs ...interface{}) error { + for _, f := range funcs { + if err := e.AddFunc(f); err != nil { + return err + } + } + return nil +} + +// AddFunc uses func as an equality function: it must take +// two parameters of the same type, and return a boolean. +func (e Equalities) AddFunc(eqFunc interface{}) error { + fv := reflect.ValueOf(eqFunc) + ft := fv.Type() + if ft.Kind() != reflect.Func { + return fmt.Errorf("expected func, got: %v", ft) + } + if ft.NumIn() != 2 { + return fmt.Errorf("expected three 'in' params, got: %v", ft) + } + if ft.NumOut() != 1 { + return fmt.Errorf("expected one 'out' param, got: %v", ft) + } + if ft.In(0) != ft.In(1) { + return fmt.Errorf("expected arg 1 and 2 to have same type, but got %v", ft) + } + var forReturnType bool + boolType := reflect.TypeOf(forReturnType) + if ft.Out(0) != boolType { + return fmt.Errorf("expected bool return, got: %v", ft) + } + e[ft.In(0)] = fv + return nil +} + +// Below here is forked from go's reflect/deepequal.go + +// During deepValueEqual, must keep track of checks that are +// in progress. The comparison algorithm assumes that all +// checks in progress are true when it reencounters them. +// Visited comparisons are stored in a map indexed by visit. +type visit struct { + a1 uintptr + a2 uintptr + typ reflect.Type +} + +// unexportedTypePanic is thrown when you use this DeepEqual on something that has an +// unexported type. It indicates a programmer error, so should not occur at runtime, +// which is why it's not public and thus impossible to catch. +type unexportedTypePanic []reflect.Type + +func (u unexportedTypePanic) Error() string { return u.String() } +func (u unexportedTypePanic) String() string { + strs := make([]string, len(u)) + for i, t := range u { + strs[i] = fmt.Sprintf("%v", t) + } + return "an unexported field was encountered, nested like this: " + strings.Join(strs, " -> ") +} + +func makeUsefulPanic(v reflect.Value) { + if x := recover(); x != nil { + if u, ok := x.(unexportedTypePanic); ok { + u = append(unexportedTypePanic{v.Type()}, u...) + x = u + } + panic(x) + } +} + +// Tests for deep equality using reflected types. The map argument tracks +// comparisons that have already been seen, which allows short circuiting on +// recursive types. +func (e Equalities) deepValueEqual(v1, v2 reflect.Value, visited map[visit]bool, depth int) bool { + defer makeUsefulPanic(v1) + + if !v1.IsValid() || !v2.IsValid() { + return v1.IsValid() == v2.IsValid() + } + if v1.Type() != v2.Type() { + return false + } + if fv, ok := e[v1.Type()]; ok { + return fv.Call([]reflect.Value{v1, v2})[0].Bool() + } + + hard := func(k reflect.Kind) bool { + switch k { + case reflect.Array, reflect.Map, reflect.Slice, reflect.Struct: + return true + } + return false + } + + if v1.CanAddr() && v2.CanAddr() && hard(v1.Kind()) { + addr1 := v1.UnsafeAddr() + addr2 := v2.UnsafeAddr() + if addr1 > addr2 { + // Canonicalize order to reduce number of entries in visited. + addr1, addr2 = addr2, addr1 + } + + // Short circuit if references are identical ... + if addr1 == addr2 { + return true + } + + // ... or already seen + typ := v1.Type() + v := visit{addr1, addr2, typ} + if visited[v] { + return true + } + + // Remember for later. + visited[v] = true + } + + switch v1.Kind() { + case reflect.Array: + // We don't need to check length here because length is part of + // an array's type, which has already been filtered for. + for i := 0; i < v1.Len(); i++ { + if !e.deepValueEqual(v1.Index(i), v2.Index(i), visited, depth+1) { + return false + } + } + return true + case reflect.Slice: + if (v1.IsNil() || v1.Len() == 0) != (v2.IsNil() || v2.Len() == 0) { + return false + } + if v1.IsNil() || v1.Len() == 0 { + return true + } + if v1.Len() != v2.Len() { + return false + } + if v1.Pointer() == v2.Pointer() { + return true + } + for i := 0; i < v1.Len(); i++ { + if !e.deepValueEqual(v1.Index(i), v2.Index(i), visited, depth+1) { + return false + } + } + return true + case reflect.Interface: + if v1.IsNil() || v2.IsNil() { + return v1.IsNil() == v2.IsNil() + } + return e.deepValueEqual(v1.Elem(), v2.Elem(), visited, depth+1) + case reflect.Ptr: + return e.deepValueEqual(v1.Elem(), v2.Elem(), visited, depth+1) + case reflect.Struct: + for i, n := 0, v1.NumField(); i < n; i++ { + if !e.deepValueEqual(v1.Field(i), v2.Field(i), visited, depth+1) { + return false + } + } + return true + case reflect.Map: + if (v1.IsNil() || v1.Len() == 0) != (v2.IsNil() || v2.Len() == 0) { + return false + } + if v1.IsNil() || v1.Len() == 0 { + return true + } + if v1.Len() != v2.Len() { + return false + } + if v1.Pointer() == v2.Pointer() { + return true + } + for _, k := range v1.MapKeys() { + if !e.deepValueEqual(v1.MapIndex(k), v2.MapIndex(k), visited, depth+1) { + return false + } + } + return true + case reflect.Func: + if v1.IsNil() && v2.IsNil() { + return true + } + // Can't do better than this: + return false + default: + // Normal equality suffices + if !v1.CanInterface() || !v2.CanInterface() { + panic(unexportedTypePanic{}) + } + return v1.Interface() == v2.Interface() + } +} + +// DeepEqual is like reflect.DeepEqual, but focused on semantic equality +// instead of memory equality. +// +// It will use e's equality functions if it finds types that match. +// +// An empty slice *is* equal to a nil slice for our purposes; same for maps. +// +// Unexported field members cannot be compared and will cause an imformative panic; you must add an Equality +// function for these types. +func (e Equalities) DeepEqual(a1, a2 interface{}) bool { + if a1 == nil || a2 == nil { + return a1 == a2 + } + v1 := reflect.ValueOf(a1) + v2 := reflect.ValueOf(a2) + if v1.Type() != v2.Type() { + return false + } + return e.deepValueEqual(v1, v2, make(map[visit]bool), 0) +} + +func (e Equalities) deepValueDerive(v1, v2 reflect.Value, visited map[visit]bool, depth int) bool { + defer makeUsefulPanic(v1) + + if !v1.IsValid() || !v2.IsValid() { + return v1.IsValid() == v2.IsValid() + } + if v1.Type() != v2.Type() { + return false + } + if fv, ok := e[v1.Type()]; ok { + return fv.Call([]reflect.Value{v1, v2})[0].Bool() + } + + hard := func(k reflect.Kind) bool { + switch k { + case reflect.Array, reflect.Map, reflect.Slice, reflect.Struct: + return true + } + return false + } + + if v1.CanAddr() && v2.CanAddr() && hard(v1.Kind()) { + addr1 := v1.UnsafeAddr() + addr2 := v2.UnsafeAddr() + if addr1 > addr2 { + // Canonicalize order to reduce number of entries in visited. + addr1, addr2 = addr2, addr1 + } + + // Short circuit if references are identical ... + if addr1 == addr2 { + return true + } + + // ... or already seen + typ := v1.Type() + v := visit{addr1, addr2, typ} + if visited[v] { + return true + } + + // Remember for later. + visited[v] = true + } + + switch v1.Kind() { + case reflect.Array: + // We don't need to check length here because length is part of + // an array's type, which has already been filtered for. + for i := 0; i < v1.Len(); i++ { + if !e.deepValueDerive(v1.Index(i), v2.Index(i), visited, depth+1) { + return false + } + } + return true + case reflect.Slice: + if v1.IsNil() || v1.Len() == 0 { + return true + } + if v1.Len() > v2.Len() { + return false + } + if v1.Pointer() == v2.Pointer() { + return true + } + for i := 0; i < v1.Len(); i++ { + if !e.deepValueDerive(v1.Index(i), v2.Index(i), visited, depth+1) { + return false + } + } + return true + case reflect.String: + if v1.Len() == 0 { + return true + } + if v1.Len() > v2.Len() { + return false + } + return v1.String() == v2.String() + case reflect.Interface: + if v1.IsNil() { + return true + } + return e.deepValueDerive(v1.Elem(), v2.Elem(), visited, depth+1) + case reflect.Ptr: + if v1.IsNil() { + return true + } + return e.deepValueDerive(v1.Elem(), v2.Elem(), visited, depth+1) + case reflect.Struct: + for i, n := 0, v1.NumField(); i < n; i++ { + if !e.deepValueDerive(v1.Field(i), v2.Field(i), visited, depth+1) { + return false + } + } + return true + case reflect.Map: + if v1.IsNil() || v1.Len() == 0 { + return true + } + if v1.Len() > v2.Len() { + return false + } + if v1.Pointer() == v2.Pointer() { + return true + } + for _, k := range v1.MapKeys() { + if !e.deepValueDerive(v1.MapIndex(k), v2.MapIndex(k), visited, depth+1) { + return false + } + } + return true + case reflect.Func: + if v1.IsNil() && v2.IsNil() { + return true + } + // Can't do better than this: + return false + default: + // Normal equality suffices + if !v1.CanInterface() || !v2.CanInterface() { + panic(unexportedTypePanic{}) + } + return v1.Interface() == v2.Interface() + } +} + +// DeepDerivative is similar to DeepEqual except that unset fields in a1 are +// ignored (not compared). This allows us to focus on the fields that matter to +// the semantic comparison. +// +// The unset fields include a nil pointer and an empty string. +func (e Equalities) DeepDerivative(a1, a2 interface{}) bool { + if a1 == nil { + return true + } + v1 := reflect.ValueOf(a1) + v2 := reflect.ValueOf(a2) + if v1.Type() != v2.Type() { + return false + } + return e.deepValueDerive(v1, v2, make(map[visit]bool), 0) +} diff --git a/vendor/k8s.io/kubernetes/third_party/forked/golang/reflect/type.go b/vendor/k8s.io/kubernetes/third_party/forked/golang/reflect/type.go new file mode 100644 index 00000000..67957ee3 --- /dev/null +++ b/vendor/k8s.io/kubernetes/third_party/forked/golang/reflect/type.go @@ -0,0 +1,91 @@ +//This package is copied from Go library reflect/type.go. +//The struct tag library provides no way to extract the list of struct tags, only +//a specific tag +package reflect + +import ( + "fmt" + + "strconv" + "strings" +) + +type StructTag struct { + Name string + Value string +} + +func (t StructTag) String() string { + return fmt.Sprintf("%s:%q", t.Name, t.Value) +} + +type StructTags []StructTag + +func (tags StructTags) String() string { + s := make([]string, 0, len(tags)) + for _, tag := range tags { + s = append(s, tag.String()) + } + return "`" + strings.Join(s, " ") + "`" +} + +func (tags StructTags) Has(name string) bool { + for i := range tags { + if tags[i].Name == name { + return true + } + } + return false +} + +// ParseStructTags returns the full set of fields in a struct tag in the order they appear in +// the struct tag. +func ParseStructTags(tag string) (StructTags, error) { + tags := StructTags{} + for tag != "" { + // Skip leading space. + i := 0 + for i < len(tag) && tag[i] == ' ' { + i++ + } + tag = tag[i:] + if tag == "" { + break + } + + // Scan to colon. A space, a quote or a control character is a syntax error. + // Strictly speaking, control chars include the range [0x7f, 0x9f], not just + // [0x00, 0x1f], but in practice, we ignore the multi-byte control characters + // as it is simpler to inspect the tag's bytes than the tag's runes. + i = 0 + for i < len(tag) && tag[i] > ' ' && tag[i] != ':' && tag[i] != '"' && tag[i] != 0x7f { + i++ + } + if i == 0 || i+1 >= len(tag) || tag[i] != ':' || tag[i+1] != '"' { + break + } + name := string(tag[:i]) + tag = tag[i+1:] + + // Scan quoted string to find value. + i = 1 + for i < len(tag) && tag[i] != '"' { + if tag[i] == '\\' { + i++ + } + i++ + } + if i >= len(tag) { + break + } + qvalue := string(tag[:i+1]) + tag = tag[i+1:] + + value, err := strconv.Unquote(qvalue) + if err != nil { + return nil, err + } + tags = append(tags, StructTag{Name: name, Value: value}) + } + return tags, nil +} diff --git a/vendor/k8s.io/kubernetes/third_party/golang/template/exec.go b/vendor/k8s.io/kubernetes/third_party/forked/golang/template/exec.go similarity index 100% rename from vendor/k8s.io/kubernetes/third_party/golang/template/exec.go rename to vendor/k8s.io/kubernetes/third_party/forked/golang/template/exec.go diff --git a/vendor/k8s.io/kubernetes/third_party/golang/template/funcs.go b/vendor/k8s.io/kubernetes/third_party/forked/golang/template/funcs.go similarity index 100% rename from vendor/k8s.io/kubernetes/third_party/golang/template/funcs.go rename to vendor/k8s.io/kubernetes/third_party/forked/golang/template/funcs.go diff --git a/vendor/k8s.io/kubernetes/third_party/forked/reflect/LICENSE b/vendor/k8s.io/kubernetes/third_party/forked/reflect/LICENSE deleted file mode 100644 index 74487567..00000000 --- a/vendor/k8s.io/kubernetes/third_party/forked/reflect/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2012 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. From 661bce5a50e7094739cadaf9437e2b44b6af89e6 Mon Sep 17 00:00:00 2001 From: Tomas Kral Date: Thu, 13 Oct 2016 17:54:05 +0200 Subject: [PATCH 3/3] add kompose up for openshift to userguide --- docs/user-guide.md | 85 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/docs/user-guide.md b/docs/user-guide.md index 8bdffb06..249b5218 100644 --- a/docs/user-guide.md +++ b/docs/user-guide.md @@ -7,10 +7,20 @@ - [Alternate formats](#alternate-formats) - [Unsupported docker-compose configuration options](#unsupported-docker-compose-configuration-options) + +Kompose has support for two providers: OpenShift and Kubernetes. +You can choose targeted provider either using global option `--provider`, or by setting environment variable `PROVIDER`. +By setting environment variable `PROVIDER` you can permanently switch to OpenShift provider without need to always specify `--provider openshift` option. +If no provider is specified Kubernetes is default provider. + + ## Kompose convert -Currently Kompose supports to transform either Docker Compose file (both of v1 and v2) and [experimental Distributed Application Bundles](https://blog.docker.com/2016/06/docker-app-bundle/) into Kubernetes objects. There is a couple of sample files in the `examples/` directory for testing. You will convert the compose or dab file to K8s objects with `kompose convert`. +Currently Kompose supports to transform either Docker Compose file (both of v1 and v2) and [experimental Distributed Application Bundles](https://blog.docker.com/2016/06/docker-app-bundle/) into Kubernetes and OpenShift objects. +There is a couple of sample files in the `examples/` directory for testing. +You will convert the compose or dab file to Kubernetes or OpenShift objects with `kompose convert`. +### Kubernetes ```console $ cd examples/ @@ -63,10 +73,45 @@ file "web-deployment.json" created file "redis-deployment.json" created ``` +### OpenShift + +```console +$ kompose --provider openshift --file docker-voting.yml convert +WARN[0000] [worker] Service cannot be created because of missing port. +INFO[0000] file "vote-service.json" created +INFO[0000] file "db-service.json" created +INFO[0000] file "redis-service.json" created +INFO[0000] file "result-service.json" created +INFO[0000] file "vote-deploymentconfig.json" created +INFO[0000] file "vote-imagestream.json" created +INFO[0000] file "worker-deploymentconfig.json" created +INFO[0000] file "worker-imagestream.json" created +INFO[0000] file "db-deploymentconfig.json" created +INFO[0000] file "db-imagestream.json" created +INFO[0000] file "redis-deploymentconfig.json" created +INFO[0000] file "redis-imagestream.json" created +INFO[0000] file "result-deploymentconfig.json" created +INFO[0000] file "result-imagestream.json" created +``` + +In similar way you can convert DAB files to OpenShift. +```console$ +$ kompose --bundle docker-compose-bundle.dab --provider openshift convert +WARN[0000]: Unsupported key networks - ignoring +INFO[0000] file "redis-svc.json" created +INFO[0000] file "web-svc.json" created +INFO[0000] file "web-deploymentconfig.json" created +INFO[0000] file "web-imagestream.json" created +INFO[0000] file "redis-deploymentconfig.json" created +INFO[0000] file "redis-imagestream.json" created +``` + ## Kompose up -Kompose supports a straightforward way to deploy your "composed" application to Kubernetes via `kompose up` like this: +Kompose supports a straightforward way to deploy your "composed" application to Kubernetes or OpenShift via `kompose up`. + +### Kubernetes ```console $ kompose --file ./examples/docker-guestbook.yml up We are going to create Kubernetes deployments and services for your Dockerized application. @@ -100,6 +145,42 @@ Note: - You must have a running Kubernetes cluster with a pre-configured kubectl context. - Only deployments and services are generated and deployed to Kubernetes. If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead. +### OpenShift +```console +$kompose --file ./examples/docker-guestbook.yml --provider openshift up +We are going to create OpenShift DeploymentConfigs and Services for your Dockerized application. +If you need different kind of resources, use the 'kompose convert' and 'oc create -f' commands instead. + +INFO[0000] Successfully created service: redis-slave +INFO[0000] Successfully created service: frontend +INFO[0000] Successfully created service: redis-master +INFO[0000] Successfully created deployment: redis-slave +INFO[0000] Successfully created ImageStream: redis-slave +INFO[0000] Successfully created deployment: frontend +INFO[0000] Successfully created ImageStream: frontend +INFO[0000] Successfully created deployment: redis-master +INFO[0000] Successfully created ImageStream: redis-master + +Your application has been deployed to OpenShift. You can run 'oc get dc,svc,is' for details. + +$ oc get dc,svc,is +NAME REVISION DESIRED CURRENT TRIGGERED BY +dc/frontend 0 1 0 config,image(frontend:v4) +dc/redis-master 0 1 0 config,image(redis-master:e2e) +dc/redis-slave 0 1 0 config,image(redis-slave:v1) +NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE +svc/frontend 172.30.46.64 80/TCP 8s +svc/redis-master 172.30.144.56 6379/TCP 8s +svc/redis-slave 172.30.75.245 6379/TCP 8s +NAME DOCKER REPO TAGS UPDATED +is/frontend 172.30.12.200:5000/fff/frontend +is/redis-master 172.30.12.200:5000/fff/redis-master +is/redis-slave 172.30.12.200:5000/fff/redis-slave v1 +``` + +Note: +- You must have a running OpenShift cluster with a pre-configured `oc` context (`oc login`) + ## Kompose down Once you have deployed "composed" application to Kubernetes, `kompose down` will help you to take the application out by deleting its deployments and services. If you need to remove other resources, use the 'kubectl' command.